ZGlmZiAtLWdpdCBhL0NIQU5HRUxPRyBiL0NIQU5HRUxPRwppbmRleCA0MTA0MGVmLi41YmM5NWZhIDEwMDY0NAotLS0gYS9DSEFOR0VMT0cKKysrIGIvQ0hBTkdFTE9HCkBAIC0xLDMgKzEsOTAgQEAKK2NvbW1pdCA1YTVjNTY5ODZhOWNjZjcxNjQyYzhiNjM3NGViMTg0ODdiMTVmZWNkCitBdXRob3I6IFN0ZWZhbiBSb2VzZSA8c3JAZGVueC5kZT4KK0RhdGU6CU1vbiBKYW4gMTUgMDk6NDY6MjkgMjAwNyArMDEwMAorCisgICAgW1BBVENIXSBGaXggNDQwU1BlIHJldiBCIGRldGVjdGlvbiBmcm9tIHByZXZpb3VzIHBhdGNoCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+CisKK2NvbW1pdCBhNDQzZDMxNDEwYzU3MWVlOGY5NzBkYTgxOWE0NGQ2OThmZGQ2YjFmCitBdXRob3I6IEhlaWtvIFNjaG9jaGVyIDxoc0Bwb2xsdXguZGVueC5kZT4KK0RhdGU6CVN1biBKYW4gMTQgMTM6MzU6MzEgMjAwNyArMDEwMAorCisJW0ZJWF0gY29ycmVjdCBJMkMgV3JpdGVzIGZvciB0aGUgTE04MSBTZW5zb3IuCisKKwlTaWduZWQtb2ZmLWJ5OiBIZWlrbyBTY2hvY2hlciA8aHNAZGVueC5kZT4KKworY29tbWl0IDBiYmE1NDUyODM1ZjE5YTYxMjA0ZWRjZGEzYTU4MTEyZmQ4ZTIyMDgKK0F1dGhvcjogV29sZmdhbmcgRGVuayA8d2RAcG9sbHV4LmRlbnguZGU+CitEYXRlOglTYXQgSmFuIDEzIDExOjE3OjEwIDIwMDcgKzAxMDAKKworICAgIFVuZG8gY29tbWl0IDMwMzNlYmIyOiByZXNldCBjb21tYW5kIGRvZXMgbm90IHRha2UgYW55IGFyZ3VtZW50cworCisgICAgSGFpeWluZyBXYW5nJ3MgbW9kaWZpY2F0aW9uIHRvIHRoZSByZXNldCBjb21tYW5kIHdhcyBicm9rZW4sIHVuZG8gaXQuCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBXb2xmZ2FuZyBEZW5rIDx3ZEBkZW54LmRlPgorCitjb21taXQgOTU5ODE3NzhjZmYwMDM4ZmQ5OTQxMDQ0ZDZhM2VkYTgxMGUzMzI1OAorQXV0aG9yOiBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+CitEYXRlOglTYXQgSmFuIDEzIDA4OjAxOjAzIDIwMDcgKzAxMDAKKworICAgIFtQQVRDSF0gVXBkYXRlIDQ0MFNQKGUpIGNwdSByZXZpc2lvbnMKKworICAgIEFsc28gZGlzcGxheSBlbmFibGVkL2Rpc2FibGVkIFJBSUQgNiBzdXBwb3J0IGZvciA0NDBTUC80NDBTUGUgUFBDJ3MuCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+CisKK2NvbW1pdCA3N2RkYzViOWFmYjMyNTI2MmZkODg3NTJiYTQzMGExZGRlZDFmMGM3CitBdXRob3I6IFN0ZWZhbiBSb2VzZSA8c3JAZGVueC5kZT4KK0RhdGU6CVNhdCBKYW4gMTMgMDc6NTk6NTYgMjAwNyArMDEwMAorCisgICAgW1BBVENIXSBVcGRhdGUgWWVsbG93c3RvbmUgKDQ0MEdSKSB0byBkaXNwbGF5IGJvYXJkIHJldiBhbmQgUENJIGJ1cyBzcGVlZAorCisgICAgTm93IHRoZSBib2FyZCByZXZpc2lvbiBhbmQgdGhlIGN1cnJlbnQgUENJIGJ1cyBzcGVlZCBhcmUgcHJpbnRlZCBhZnRlcgorICAgIHRoZSBib2FyZCBtZXNzYWdlLgorCisgICAgQWxzbyB0aGUgRUJDIGluaXRpYWxpc2luZyBpcyBub3cgZG9uZSB2aWEgZGVmaW5lcyBpbiB0aGUgYm9hcmQgY29uZmlnCisgICAgZmlsZS4KKworICAgIFNpZ25lZC1vZmYtYnk6IFN0ZWZhbiBSb2VzZSA8c3JAZGVueC5kZT4KKworY29tbWl0IDM2YWRmZjM2MmMyYzAxNDFmZjhhODEwZDQyYTdlNDc4Zjc3OTEzMGYKK0F1dGhvcjogU3RlZmFuIFJvZXNlIDxzckBkZW54LmRlPgorRGF0ZToJU2F0IEphbiAxMyAwNzo1OToxOSAyMDA3ICswMTAwCisKKyAgICBbUEFUQ0hdIFVwZGF0ZSBZb3NlbWl0ZSAoNDQwRVApIHRvIGRpc3BsYXkgYm9hcmQgcmV2IGFuZCBQQ0kgYnVzIHNwZWVkCisKKyAgICBOb3cgdGhlIGJvYXJkIHJldmlzaW9uIGFuZCB0aGUgY3VycmVudCBQQ0kgYnVzIHNwZWVkIGFyZSBwcmludGVkIGFmdGVyCisgICAgdGhlIGJvYXJkIG1lc3NhZ2UuCisKKyAgICBBbHNvIHRoZSBFQkMgaW5pdGlhbGlzaW5nIGlzIG5vdyBkb25lIHZpYSBkZWZpbmVzIGluIHRoZSBib2FyZCBjb25maWcKKyAgICBmaWxlLgorCisgICAgU2lnbmVkLW9mZi1ieTogU3RlZmFuIFJvZXNlIDxzckBkZW54LmRlPgorCitjb21taXQgZTBiOWVhOGM4YTI5NGRlNmE1MzUwYWU2Mzg4NzlkMjRiNWI3MDlkNgorQXV0aG9yOiBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+CitEYXRlOglTYXQgSmFuIDEzIDA3OjU3OjUxIDIwMDcgKzAxMDAKKworICAgIFtQQVRDSF0gVXBkYXRlIFNlcXVvaWEgKDQ0MEVQeCkgdG8gZGlzcGxheSBib2FyZCByZXYgYW5kIFBDSSBidXMgc3BlZWQKKworICAgIE5vdyB0aGUgYm9hcmQgcmV2aXNpb24gYW5kIHRoZSBjdXJyZW50IFBDSSBidXMgc3BlZWQgYXJlIHByaW50ZWQgYWZ0ZXIKKyAgICB0aGUgYm9hcmQgbWVzc2FnZS4KKworICAgIFNpZ25lZC1vZmYtYnk6IFN0ZWZhbiBSb2VzZSA8c3JAZGVueC5kZT4KKworY29tbWl0IDZhYmFlZTQyNjIxYzA3ZTgxYTJjZDE4OWFkNDM2OGI1ZThjNTAyODAKK0F1dGhvcjogUmVpbmhhcmQgVGhpZXMgPFJlaW5oYXJkLlRoaWVzQHdlYi5kZT4KK0RhdGU6CVdlZCBKYW4gMTAgMTQ6NDE6MTQgMjAwNyArMDEwMAorCisgICAgQWRqdXN0ZWQgZGVmYXVsdCBlbnZpcm9ubWVudCBmb3IgY2FtNTIwMCBib2FyZC4KKworY29tbWl0IGJhYjVhOTBkNGNjYzFhNDZhODEyN2I4NjdmYTU5MDI4Y2M2MjNhZDkKK0F1dGhvcjogV29sZmdhbmcgRGVuayA8d2RAcG9sbHV4LmRlbnguZGU+CitEYXRlOglXZWQgSmFuIDEwIDE1OjM1OjUyIDIwMDcgKzAxMDAKKworICAgIFVwZGF0ZSBDSEFOR0VMT0cKKwogY29tbWl0IDc4N2ZhMTU4NjBhNTc4MzNlNTBiZDMwNTU1MDc5YTljZDRlNTE5YjgKIEF1dGhvcjogV29sZmdhbmcgRGVuayA8d2RAcG9sbHV4LmRlbnguZGU+CiBEYXRlOglXZWQgSmFuIDEwIDAxOjI4OjM5IDIwMDcgKzAxMDAKQEAgLTEyLDYgKzk5LDE0IEBACiAgICAgQWxzbyBjb3JyZWN0IHRoZSBkZWNvZGluZyBvZiB0aGUga2V5cGFkIHN0YXR1cy4gV2l0aCB0aGlzIHVwZGF0ZSwgdGhlCiAgICAga2V5IHRoYXQgd2lsbCB0cmlnZ2VyIHRoZSB1cGRhdGUgaXMgQ29sdW1uIDIsIFJvdyAyLgogCitjb21taXQgZDkzODRkZTJmNTcxMDQ2ZTcxMDgxYmFlMjJiNDllM2Q1Y2EyZTNkNQorQXV0aG9yOiBNYXJpYW4gQmFsYWtvd2ljeiA8bThAc2VtaWhhbGYuY29tPgorRGF0ZToJV2VkIEphbiAxMCAwMDoyNjoxNSAyMDA3ICswMTAwCisKKyAgICBDQU01MjAwIGZsYXNoIGRyaXZlciBtb2RpZmljYXRpb25zOgorICAgIC0gdXNlIENGSSBkcml2ZXIgKHJlcGxhY2VzIGN1c3RvbSBmbGFzaCBkcml2ZXIpIGZvciBtYWluICdjYW01MjAwJyB0YXJnZXQKKyAgICAtIGFkZCBzZWNvbmQgYnVpbGQgdGFyZ2V0ICdjYW01MjAwX25pb3NmbGFzaCcgd2hpY2ggc3RpbGwgdXNlcyBjdXN0b20gZHJpdmVyCisKIGNvbW1pdCA2N2ZlYTAyMmZhOTU3ZjU5NjUzYjUyMzhjNzQ5NmY4MGE2YjcwNDMyCiBBdXRob3I6IE1hcmt1cyBLbG90emJ1ZWNoZXIgPG1rQGRlbnguZGU+CiBEYXRlOglUdWUgSmFuIDkgMTY6MDI6NDggMjAwNyArMDEwMApAQCAtMjA2LDYgKzMwMSwxNCBAQAogCiAgICAgU2lnbmVkLW9mZi1ieTogSGVpa28gU2Nob2NoZXIgPGhzQGRlbnguZGU+CiAKK2NvbW1pdCA2ZGVkZjNkNDlkZDE0YzNiZjU0MWM4ZWNlZTdmZmFhYzVmMGUxZDZjCitBdXRob3I6IEhlaWtvIFNjaG9jaGVyIDxoc0Bwb2xsdXguZGVueC5kZT4KK0RhdGU6CVRodSBEZWMgMjEgMTY6MTQ6NDggMjAwNiArMDEwMAorCisgICAgW1BBVENIXSBBZGQgc3VwcG9ydCBmb3IgdGhlIFVDMTAxIGJvYXJkIGZyb20gTUFOLgorCisgICAgU2lnbmVkLW9mZi1ieTogSGVpa28gU2Nob2NoZXIgPGhzQGRlbnguZGU+CisKIGNvbW1pdCBjODRiYWQwZWY2MGU3MDU1YWIwYmQ0OWI5MzA2OTUwOWNlY2MzODJhCiBBdXRob3I6IEJhcnRsb21pZWogU2lla2EgPHR1ckBzZW1paGFsZi5jb20+CiBEYXRlOglXZWQgRGVjIDIwIDAwOjI5OjQzIDIwMDYgKzAxMDAKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggYWE2MjY2Zi4uMDEzNDlmMSAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTEyMDAsNiArMTIwMCw5IEBACiAJQGVjaG8gIlRFWFRfQkFTRSA9IDB4MDEwMDAwMDAiID4gJChvYmopYm9hcmQvYW1jYy9zZXF1b2lhL2NvbmZpZy50bXAKIAlAZWNobyAiQ09ORklHX05BTkRfVV9CT09UID0geSIgPj4gJChvYmopaW5jbHVkZS9jb25maWcubWsKIAorc29saWRjYXJkM19jb25maWc6dW5jb25maWcKKwlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBwcGM0eHggc29saWRjYXJkMworCiBzeWNhbW9yZV9jb25maWc6CXVuY29uZmlnCiAJQGVjaG8gIkNvbmZpZ3VyaW5nIGZvciBzeWNhbW9yZSBib2FyZCBhcyBzdWJzZXQgb2Ygd2FsbnV0Li4uIgogCUAkKE1LQ09ORklHKSAtYSB3YWxudXQgcHBjIHBwYzR4eCB3YWxudXQgYW1jYwpkaWZmIC0tZ2l0IGEvYm9hcmQvYW1jYy9zZXF1b2lhL3NkcmFtLmggYi9ib2FyZC9hbWNjL3NlcXVvaWEvc2RyYW0uaAppbmRleCA0ODk2NmNmLi43Zjg0N2FhIDEwMDY0NAotLS0gYS9ib2FyZC9hbWNjL3NlcXVvaWEvc2RyYW0uaAorKysgYi9ib2FyZC9hbWNjL3NlcXVvaWEvc2RyYW0uaApAQCAtODYsNyArODYsNiBAQAogI2RlZmluZSBERFIwXzAwX0RMTF9TVEFSVF9QT0lOVF9ERUNPREUobikgICAoKCgodW5zaWduZWQgbG9uZykobikpPj4wKSYweDdGKQogCiAKLQogI2RlZmluZSBERFIwXzAxICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEKICNkZWZpbmUgRERSMF8wMV9QTEIwX0RCX0NTX0xPV0VSX01BU0sgICAgIDB4MUYwMDAwMDAKICNkZWZpbmUgRERSMF8wMV9QTEIwX0RCX0NTX0xPV0VSX0VOQ09ERShuKSAgKCgoKHVuc2lnbmVkIGxvbmcpKG4pKSYweDFGKTw8MjQpCkBAIC0zNTUsOCArMzU0LDYgQEAKICNkZWZpbmUgRERSMF8yMl9ETExfRFFTX0JZUEFTU184X0RFQ09ERShuKSAgKCgoKHVuc2lnbmVkIGxvbmcpKG4pKT4+MCkmMHg3RikKIAogCi0KLQogI2RlZmluZSBERFIwXzIzICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTcKICNkZWZpbmUgRERSMF8yM19PRFRfUkRfTUFQX0NTMF9NQVNLICAgICAgIDB4MDMwMDAwMDAKICNkZWZpbmUgRERSMF8yM19PRFRfUkRfTUFQX0NTMF9FTkNPREUobikgICAoKCgodW5zaWduZWQgbG9uZykobikpJjB4Myk8PDI0KQpkaWZmIC0tZ2l0IGEvYm9hcmQvbWNjMjAwL21jYzIwMC5jIGIvYm9hcmQvbWNjMjAwL21jYzIwMC5jCmluZGV4IDU1NGM1MWQuLmFmMDQ3ZTIgMTAwNjQ0Ci0tLSBhL2JvYXJkL21jYzIwMC9tY2MyMDAuYworKysgYi9ib2FyZC9tY2MyMDAvbWNjMjAwLmMKQEAgLTkyLDggKzkyLDggQEAKIAogLyoKICAqIEFUVEVOVElPTjogQWx0aG91Z2ggcGFydGlhbGx5IHJlZmVyZW5jZWQgaW5pdGRyYW0gZG9lcyBOT1QgbWFrZSByZWFsIHVzZQotICogICAgICAgICAgICB1c2Ugb2YgQ0ZHX1NEUkFNX0JBU0UuIFRoZSBjb2RlIGRvZXMgbm90IHdvcmsgaWYgQ0ZHX1NEUkFNX0JBU0UKLSAqICAgICAgICAgICAgaXMgc29tZXRoaW5nIGVsc2UgdGhhbiAweDAwMDAwMDAwLgorICoJICAgICAgdXNlIG9mIENGR19TRFJBTV9CQVNFLiBUaGUgY29kZSBkb2VzIG5vdCB3b3JrIGlmIENGR19TRFJBTV9CQVNFCisgKgkgICAgICBpcyBzb21ldGhpbmcgZWxzZSB0aGFuIDB4MDAwMDAwMDAuCiAgKi8KIAogbG9uZyBpbnQgaW5pdGRyYW0gKGludCBib2FyZF90eXBlKQpAQCAtMjkxLDcgKzI5MSw3IEBACiAJfQogCiAjaWZkZWYgQ09ORklHX0FVVE9fVVBEQVRFCi0gICAgICAgIGRvX2F1dG9fdXBkYXRlKCk7CisJZG9fYXV0b191cGRhdGUoKTsKICNlbmRpZgogCXJldHVybiAoMCk7CiB9CmRpZmYgLS1naXQgYS9ib2FyZC9zb2xpZGNhcmQzL01ha2VmaWxlIGIvYm9hcmQvc29saWRjYXJkMy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjBiMTVmCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvc29saWRjYXJkMy9NYWtlZmlsZQpAQCAtMCwwICsxLDQ3IEBACisjCisjIChDKSBDb3B5cmlnaHQgMjAwMAorIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorIworIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworIyBwcm9qZWN0LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorIyBNQSAwMjExMS0xMzA3IFVTQQorIworCitpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKKworTElCCT0gbGliJChCT0FSRCkuYQorCitPQkpTCT0gJChCT0FSRCkubyBzYzNuYW5kLm8KK1NPQkpTCT0gaW5pdC5vCisKKyQoTElCKToJJChPQkpTKSAkKFNPQkpTKQorCSQoQVIpIGNydiAkQCAkXgorCitjbGVhbjoKKwlybSAtZiAkKFNPQkpTKSAkKE9CSlMpCisKK2Rpc3RjbGVhbjoJY2xlYW4KKwlybSAtZiAkKExJQikgY29yZSAqLmJhayAuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQorCQkkKENDKSAtTSAkKENGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisKK3NpbmNsdWRlIC5kZXBlbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvc29saWRjYXJkMy9jb25maWcubWsgYi9ib2FyZC9zb2xpZGNhcmQzL2NvbmZpZy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmRmNWU0Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvc29saWRjYXJkMy9jb25maWcubWsKQEAgLTAsMCArMSwyNCBAQAorIworIyAoQykgQ29weXJpZ2h0IDIwMDAKKyMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyMKKyMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyMgcHJvamVjdC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyMgTUEgMDIxMTEtMTMwNyBVU0EKKyMKKworVEVYVF9CQVNFID0gMHhGRkZDMDAwMApkaWZmIC0tZ2l0IGEvYm9hcmQvc29saWRjYXJkMy9pbml0LlMgYi9ib2FyZC9zb2xpZGNhcmQzL2luaXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2IzYzgzCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvc29saWRjYXJkMy9pbml0LlMKQEAgLTAsMCArMSwzODIgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICoKKyAqCSBUaGlzIHNvdWNlIGNvZGUgaGFzIGJlZW4gbWFkZSBhdmFpbGFibGUgdG8geW91IGJ5IEV1cm9EZXNpZ24KKyAqCSAod3d3LmV1cm9kc24uZGUpLiBJdCdzIGJhc2VkIG9uIHRoZSBvcmlnaW5hbCBJQk0gc291cmNlIGNvZGUsIHNvCisgKgkgdGhpcyBmb2xsb3dzOgorICoKKyAqCSBUaGlzIHNvdXJjZSBjb2RlIGhhcyBiZWVuIG1hZGUgYXZhaWxhYmxlIHRvIHlvdSBieSBJQk0gb24gYW4gQVMtSVMKKyAqCSBiYXNpcy4gIEFueW9uZSByZWNlaXZpbmcgdGhpcyBzb3VyY2UgaXMgbGljZW5zZWQgdW5kZXIgSUJNCisgKgkgY29weXJpZ2h0cyB0byB1c2UgaXQgaW4gYW55IHdheSBoZSBvciBzaGUgZGVlbXMgZml0LCBpbmNsdWRpbmcKKyAqCSBjb3B5aW5nIGl0LCBtb2RpZnlpbmcgaXQsIGNvbXBpbGluZyBpdCwgYW5kIHJlZGlzdHJpYnV0aW5nIGl0IGVpdGhlcgorICoJIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLiAgTm8gbGljZW5zZSB1bmRlciBJQk0gcGF0ZW50cyBvcgorICoJIHBhdGVudCBhcHBsaWNhdGlvbnMgaXMgdG8gYmUgaW1wbGllZCBieSB0aGUgY29weXJpZ2h0IGxpY2Vuc2UuCisgKgorICoJIEFueSB1c2VyIG9mIHRoaXMgc29mdHdhcmUgc2hvdWxkIHVuZGVyc3RhbmQgdGhhdCBJQk0gY2Fubm90IHByb3ZpZGUKKyAqCSB0ZWNobmljYWwgc3VwcG9ydCBmb3IgdGhpcyBzb2Z0d2FyZSBhbmQgd2lsbCBub3QgYmUgcmVzcG9uc2libGUgZm9yCisgKgkgYW55IGNvbnNlcXVlbmNlcyByZXN1bHRpbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUuCisgKgorICoJIEFueSBwZXJzb24gd2hvIHRyYW5zZmVycyB0aGlzIHNvdXJjZSBjb2RlIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsKKyAqCSBtdXN0IGluY2x1ZGUgdGhlIElCTSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIHBhcmFncmFwaCwgYW5kIHRoZQorICoJIHByZWNlZGluZyB0d28gcGFyYWdyYXBocyBpbiB0aGUgdHJhbnNmZXJyZWQgc29mdHdhcmUuCisgKgorICoJIENPUFlSSUdIVCAgIEkgQiBNICAgQ09SUE9SQVRJT04gMTk5NQorICoJIExJQ0VOU0VEIE1BVEVSSUFMICAtICBQUk9HUkFNIFBST1BFUlRZIE9GIEkgQiBNCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPHBwYzR4eC5oPgorCisjZGVmaW5lIF9MSU5VWF9DT05GSUdfSCAxCS8qIGF2b2lkIHJlYWRpbmcgTGludXggYXV0b2NvbmYuaCBmaWxlCSovCisKKyNpbmNsdWRlIDxwcGNfYXNtLnRtcGw+CisjaW5jbHVkZSA8cHBjX2RlZnMuaD4KKworI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgorI2luY2x1ZGUgPGFzbS9tbXUuaD4KKworLyoqCisgKiBleHRfYnVzX2NudGxyX2luaXQgLSBJbml0aWFsaXplcyB0aGUgRXh0ZXJuYWwgQnVzIENvbnRyb2xsZXIgZm9yIHRoZSBleHRlcm5hbCBwZXJpcGhlcmFscworICoKKyAqIElNUE9SVEFOVDogRm9yIHBhc3MxIHRoaXMgY29kZSBtdXN0IHJ1biBmcm9tIGNhY2hlIHNpbmNlIHlvdSBjYW4gbm90CisgKiByZWxpYWJseSBjaGFuZ2UgYSBwZXJpcGhlcmFsIGJhbmtzIHRpbWluZyByZWdpc3RlciAocGJ4YXApIHdoaWxlIHJ1bm5pbmcKKyAqIGNvZGUgZnJvbSB0aGF0IGJhbmsuIEZvciBleC4sIHNpbmNlIHdlIGFyZSBydW5uaW5nIGZyb20gUk9NIG9uIGJhbmsgMCwgd2UKKyAqIGNhbiBOT1QgZXhlY3V0ZSB0aGUgY29kZSB0aGF0IG1vZGlmaWVzIGJhbmsgMCB0aW1pbmdzIGZyb20gUk9NLCBzbworICogd2UgcnVuIGl0IGZyb20gY2FjaGUuCisgKgorICogQmFuayAwIC0gQm9vdC1GbGFzaAorICogQmFuayAxIC0gTkFORC1GbGFzaAorICogQmFuayAyIC0gSVNBIGJ1cworICogQmFuayAzIC0gU2Vjb25kIEZsYXNoCisgKiBCYW5rIDQgLSBVU0IgY29udHJvbGxlcgorICovCisJLmdsb2JsIGV4dF9idXNfY250bHJfaW5pdAorZXh0X2J1c19jbnRscl9pbml0OgorLyoKKyAqIFdlIG5lZWQgdGhlIGN1cnJlbnQgYm9vdCB1cCBjb25maWd1cmF0aW9uIHRvIHNldCBjb3JyZWN0CisgKiB0aW1pbmdzIGludG8gaW50ZXJuYWwgZmxhc2ggYW5kIGV4dGVybmFsIGZsYXNoCisgKi8KKwkJbWZkY3IgcjI0LHN0cmFwCQkJLyogeHh4eCB4eHh4IHh4eHggeHh4PyA/eHh4IHh4eHggeHh4eCB4eHh4CisJCQkJCQkgICAwIDAgLT4gOCBiaXQgZXh0ZXJuYWwgUk9NCisJCQkJCQkgICAwIDEgLT4gMTYgYml0IGludGVybmFsIFJPTSAqLworCQlhZGRpIHI0LDAsMgorCQlzcncgcjI0LHIyNCxyNAkJCQkvKiBzaGlmdCByaWdodCByMjQgdHdvIHBvc2l0aW9ucyAqLworCQlhbmRpLiByMjQscjI0LDB4MDYwMDAKKy8qCisgKiBBbGwgY2FsY3VsYXRpb25zIGFyZSBiYXNlZCBvbiAzM01IeiBFQkMgY2xvY2suCisgKgorICogRmlyc3QsIGNyZWF0ZSBhICJ2ZXJ5IHNsb3ciIHRpbWluZyAofjI1MG5zKSB3aXRoIGJ1cnN0IG1vZGUgZW5hYmxlZAorICogVGhpcyBpcyBuZWVkIGZvciB0aGUgZXh0ZXJuYWwgZmxhc2ggYWNjZXNzCisgKi8KKwkJbGlzIHIyNSwweDA4MDAKKwkJb3JpIHIyNSxyMjUsMHgwMjgwCQkJLyogMDAwMCAxMDAwIDB4eHggMDAwMCAwMDAwIDAwMTAgMTAweCB4eHh4ID0gMHgwMzgwMDI4MAorLyoKKyAqIFNlY29uZCwgY3JlYXRlIGEgZmFzdCB0aW1pbmc6CisgKiA5MG5zIGZpcnN0IGN5Y2xlIC0gMyBjbG9jayBhY2Nlc3MKKyAqIGFuZCA5MG5zIGJ1cnN0IGN5Y2xlLCBwbHVzIDEgY2xvY2sgYWZ0ZXIgdGhlIGxhc3QgYWNjZXNzCisgKiBUaGlzIGlzIHVzZWQgZm9yIHRoZSBpbnRlcm5hbCBhY2Nlc3MKKyAqLworCQlsaXMgcjI2LDB4ODkwMAorCQlvcmkgcjI2LHIyNiwweDAyODAJCQkvKiAxMDAwIDEwMDEgMHh4eCAwMDAwIDAwMDAgMDAxMCAxMDB4IHh4eHgKKy8qCisgKiBXZSBjYW4ndCBjaGFuZ2Ugc2V0dGluZ3Mgb24gQ1MjIGlmIHdlIGN1cnJlbnRseSB1c2UgdGhlbS4KKyAqIC0+IGxvYWQgYSBmZXcgaW5zdHJ1Y3Rpb25zIGludG8gY2FjaGUgYW5kIHJ1biB0aGlzIGNvZGUgZnJvbSBjYWNoZQorICovCisJCW1mbHIgcjQJCQkJCS8qIHNhdmUgbGluayByZWdpc3RlciAqLworCQlibCAuLmdldEFkZHIKKy4uZ2V0QWRkcjoKKwkJbWZsciByMwkJCQkJLyogZ2V0IGFkZHJlc3Mgb2YgLi5nZXRBZGRyICovCisJCW10bHIgcjQJCQkJCS8qIHJlc3RvcmUgbGluayByZWdpc3RlciAqLworCQlhZGRpIHI0LDAsMTQJCQkJLyogc2V0IGN0ciB0byAxMDsgdXNlZCB0byBwcmVmZXRjaCAqLworCQltdGN0ciByNAkJCQkvKiAxMCBjYWNoZSBsaW5lcyB0byBmaXQgdGhpcyBmdW5jdGlvbgorCQkJCQkJCWluIGNhY2hlIChnaXZlcyB1cyA4eDEwPTgwIGluc3RydWN0aW9ucykgKi8KKy4uZWJjbG9vcDoKKwkJaWNidCByMCxyMwkJCQkvKiBwcmVmZXRjaCBjYWNoZSBsaW5lIGZvciBhZGRyIGluIHIzICovCisJCWFkZGkgcjMscjMsMzIJCQkJLyogbW92ZSB0byBuZXh0IGNhY2hlIGxpbmUgKi8KKwkJYmRueiAuLmViY2xvb3AJCQkJLyogY29udGludWUgZm9yIDEwIGNhY2hlIGxpbmVzICovCisvKgorICogRGVsYXkgdG8gZW5zdXJlIGFsbCBhY2Nlc3NlcyB0byBST00gYXJlIGNvbXBsZXRlIGJlZm9yZSBjaGFuZ2luZworICogYmFuayAwIHRpbWluZ3MuIDIwMHVzZWMgc2hvdWxkIGJlIGVub3VnaC4KKyAqIDIwMCwwMDAsMDAwIChjeWNsZXMvc2VjKSBYIC4wMDAyMDAgKHNlYykgPSAweDlDNDAgY3ljbGVzCisgKi8KKwkJbGlzIHIzLDB4MAorCQlvcmkgcjMscjMsMHhBMDAwCQkJLyogZW5zdXJlIDIwMHVzZWMgaGF2ZSBwYXNzZWQgc2luY2UgcmVzZXQgKi8KKwkJbXRjdHIgcjMKKy4uc3BpbmxwOgorCQliZG56IC4uc3BpbmxwCQkJCS8qIHNwaW4gbG9vcCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBNZW1vcnkgQmFuayAwIChCT09ULVJPTSkgaW5pdGlhbGl6YXRpb24KKyAqIDB4RkZFRjAwMDAwLi4uLjB4RkZGRkZGRgorICogV2Ugb25seSBoYXZlIHRvIGNoYW5nZSB0aGUgdGltaW5nLiBNYXBwaW5nIGlzIG9rIGJ5IGJvb3Qtc3RyYXBwaW5nCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKwkJbGkgcjQscGIwYXAJCQkJLyogUEIwQVA9UGVyaXBoZXJhbCBCYW5rIDAgQWNjZXNzIFBhcmFtZXRlcnMgKi8KKwkJbXRkY3IgZWJjY2ZnYSxyNAorCisJCW1yIHI0LHIyNgkJCQkvKiBhc3N1bWUgaW50ZXJuYWwgZmFzdCBmbGFzaCBpcyBib290IGZsYXNoICovCisJCWNtcHdpIHIyNCwweDIwMDAJCQkvKiBhc3N1bXB0aW9uIHRydWU/IC4uLiAqLworCQliZXEgMWYJCQkJCS8qIC4uLnllcyEgKi8KKwkJbXIgcjQscjI1CQkJCS8qIC4uLm5vLCB1c2UgdGhlIHNsb3cgdmFyaWFudCAqLworCQltciByMjUscjI2CQkJCS8qIHVzZSB0aGlzIGZvciB0aGUgb3RoZXIgZmxhc2ggKi8KKzE6CisJCW10ZGNyIGViY2NmZ2QscjQJCQkvKiBjaGFuZ2UgdGltaW5nIG5vdyAqLworCisJCWxpIHI0LHBiMGNyCQkJCS8qIFBCMENSPVBlcmlwaGVyYWwgQmFuayAwIENvbnRyb2wgUmVnaXN0ZXIgKi8KKwkJbXRkY3IgZWJjY2ZnYSxyNAorCQltZmRjciByNCxlYmNjZmdkCisJCWxpcyByMywweDAwMDEKKwkJb3JpIHIzLHIzLDB4ODAwMAkJCS8qIGFsbG93IHJlYWRzIGFuZCB3cml0ZXMgKi8KKwkJb3IgcjQscjQscjMKKwkJbXRkY3IgZWJjY2ZnZCxyNAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBNZW1vcnkgQmFuayAzIChTZWNvbmQtRmxhc2gpIGluaXRpYWxpemF0aW9uCisgKiAweEYwMDAwMDAwLi4uMHhGMDFGRkZGRiAtPiAyTUIKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCQlsaSByNCxwYjNhcAkJCQkvKiBQZXJpcGhlcmFsIEJhbmsgMSBBY2Nlc3MgUGFyYW1ldGVyICovCisJCW10ZGNyIGViY2NmZ2EscjQKKwkJbXRkY3IgZWJjY2ZnZCxyMgkJCS8qIGNoYW5nZSB0aW1pbmcgKi8KKworCQlsaSByNCxwYjNjcgkJCQkvKiBQZXJpcGhlcmFsIEJhbmsgMSBDb25maWd1cmF0aW9uIFJlZ2lzdGVycyAqLworCQltdGRjciBlYmNjZmdhLHI0CisKKwkJbGlzIHI0LDB4RjAwMworCQlvcmkgcjQscjQsMHg4MDAwCisvKgorICogQ29uc2lkZXIgYm9vdCBjb25maWd1cmF0aW9uCisgKi8KKwkJeG9yaSByMjQscjI0LDB4MjAwMAkJCS8qIGludmVydCBjdXJyZW50IGJ1cyB3aWR0aCAqLworCQlvciByNCxyNCxyMjQKKwkJbXRkY3IgZWJjY2ZnZCxyNAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBNZW1vcnkgQmFuayAxIChOQU5ELUZsYXNoKSBpbml0aWFsaXphdGlvbgorICogMHg3N0QwMDAwMC4uLjB4NzdERkZGRkYgLT4gMU1CCisgKiAtIHRoZSB3cml0ZS9yZWFkIHB1bHNlIHRvIHRoZSBOQU5EIGNhbiBiZSBhcyBzaG9ydCBhcyAyNW5zLCBidXMgdGhlIGN5Y2xlIHRpbWUgaXMgYWx3YXlzIDUwbnMKKyAqIC0gdGhlIHNldHVwIHRpbWUgaXMgMG5zCisgKiAtIHRoZSBob2xkIHRpbWUgaXMgMTVucworICogLT4KKyAqICAgLSBUV1QgPSAwCisgKiAgIC0gQ1NOID0gMAorICogICAtIE9FTiA9IDAKKyAqICAgLSBXQk4gPSAwCisgKiAgIC0gV0JGID0gMAorICogICAtIFRIICA9IDEKKyAqIC0tLS0+IDIgY2xvY2tzIHBlciBjeWNsZSA9IDYwbnMgY3ljbGUgKDMwbnMgYWN0aXZlLCAzMG5zIGhvbGQpCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKwkJbGkgcjQscGIxYXAJCQkJLyogUGVyaXBoZXJhbCBCYW5rIDEgQWNjZXNzIFBhcmFtZXRlciAqLworCQltdGRjciBlYmNjZmdhLHI0CisKKwkJbGlzIHI0LDB4MDAwMAorCQlvcmkgcjQscjQsMHgwMjAwCisJCW10ZGNyIGViY2NmZ2QscjQKKworCQlsaSByNCxwYjFjcgkJCQkvKiBQZXJpcGhlcmFsIEJhbmsgMSBDb25maWd1cmF0aW9uIFJlZ2lzdGVycyAqLworCQltdGRjciBlYmNjZmdhLHI0CisKKwkJbGlzIHI0LDB4NzdEMQorCQlvcmkgcjQscjQsMHg4MDAwCisJCW10ZGNyIGViY2NmZ2QscjQKKworCisvKiBVU0IgaW5pdCAod2l0aG91dCBhY2NlbGVyYXRpb24pICovCisjaWZuZGVmIENPTkZJR19JU1AxMTYxX1BSRVNFTlQKKwkJbGkgcjQscGI0YXAJCQkJLyogUEI0QVA9UGVyaXBoZXJhbCBCYW5rIDQgQWNjZXNzIFBhcmFtZXRlcnMgKi8KKwkJbXRkY3IgZWJjY2ZnYSxyNAorCQlsaXMgcjQsMHgwMTgwCisJCW9yaSByNCxyNCwweDU5NDAKKwkJbXRkY3IgZWJjY2ZnZCxyNAorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIE1lbW9yeSBCYW5rIDIgKElTQSBBY2Nlc3MpIGluaXRpYWxpemF0aW9uIChwbHVzIG1lbW9yeSBiYW5rIDYgYW5kIDcpCisgKiAweDc4MDAwMDAwLi4uMHg3QkZGRkZGRiAtPiA2NCBNQgorICogV2lyIGFyYmVpdGVuIGJlaSAzMyBNSHogLT4gMzBucworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgQTcgKHBwYyBub3RhdGlvbikgb3IgQTI0IChzdGFuZGFyZCBub3RhdGlvbikgZGVjaWRlcyBhYm91dAorIHRoZSB0eXBlIG9mIGFjY2VzczoKKyBBNy9BMjQ9MCAtPiBtZW1vcnkgY3ljbGUKKyBBNy8gL0EyND0xIC0+IEkvTyBjeWNsZQorKi8KKwkJbGkgcjQscGIyYXAJCQkJLyogUEIyQVA9UGVyaXBoZXJhbCBCYW5rIDIgQWNjZXNzIFBhcmFtZXRlcnMgKi8KKwkJbXRkY3IgZWJjY2ZnYSxyNAorLyoKKyBXZSBlbXVsYXRlIGFuIElTQSBhY2Nlc3MKKworIDEuIEFkZHJlc3MgYWN0aXZlCisgMi4gd2FpdCAwIEVCQyBjbG9ja3MgLT4gQ1NOPTAKKyAzLiBzZXQgQ1MjCisgNC4gd2FpdCAwIEVCQyBjbG9jayAtPiBPRU4vV0JOPTAKKyA1LiBzZXQgT0UjL1dFIworIDYuIHdhaXQgNCBjbG9ja3MgKGNhLiA5MG5zKSBhbmQgZm9yIFJlYWR5IHNpZ25hbAorIDcuIGhvbGQgZm9yIDQgY2xvY2tzIC0+IFRIPTQKKyovCisKKyNpZiAxCisvKiBmYXN0ZXIgYWNjZXNzIHRvIGlzYS1idXMgKi8KKwkJbGlzIHI0LDB4MDE4MAorCQlvcmkgcjQscjQsMHg1OTQwCisjZWxzZQorCQlsaXMgcjQsMHgwMTAwCisJCW9yaSByNCxyNCwweDAzNDAKKyNlbmRpZgorCQltdGRjciBlYmNjZmdkLHI0CisKKyNpZmRlZiBJREVfVVNFU19JU0FfRU1VTEFUSU9OCisJCWxpIHIyNSxwYjVhcAkJCQkvKiBQQjVBUD1QZXJpcGhlcmFsIEJhbmsgNSBBY2Nlc3MgUGFyYW1ldGVycyAqLworCQltdGRjciBlYmNjZmdhLHIyNQorCQltdGRjciBlYmNjZmdkLHI0CisjZW5kaWYKKworCQlsaSByMjUscGI2YXAJCQkJLyogUEI2QVA9UGVyaXBoZXJhbCBCYW5rIDYgQWNjZXNzIFBhcmFtZXRlcnMgKi8KKwkJbXRkY3IgZWJjY2ZnYSxyMjUKKwkJbXRkY3IgZWJjY2ZnZCxyNAorCQlsaSByMjUscGI3YXAJCQkJLyogUEI3QVA9UGVyaXBoZXJhbCBCYW5rIDcgQWNjZXNzIFBhcmFtZXRlcnMgKi8KKwkJbXRkY3IgZWJjY2ZnYSxyMjUKKwkJbXRkY3IgZWJjY2ZnZCxyNAorCisJCWxpIHIyNSxwYjJjcgkJCQkvKiBQQjJDUj1QZXJpcGhlcmFsIEJhbmsgMiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisJCW10ZGNyIGViY2NmZ2EscjI1CisKKwkJbGlzIHI0LDB4NzgwQgorCQlvcmkgcjQscjQsMHhBMDAwCisJCW10ZGNyIGViY2NmZ2QscjQKKy8qCisgKiB0aGUgb3RoZXIgYXJlYXMgYXJlIG9ubHkgMU1pQiBpbiBzaXplCisgKi8KKwkJbGlzIHI0LDB4NzQwMQorCQlvcmkgcjQscjQsMHhBMDAwCisKKwkJbGkgcjI1LHBiNmNyCQkJCS8qIFBCNkNSPVBlcmlwaGVyYWwgQmFuayA2IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKwkJbXRkY3IgZWJjY2ZnYSxyMjUKKwkJbGlzIHI0LDB4NzQwMQorCQlvcmkgcjQscjQsMHhBMDAwCisJCW10ZGNyIGViY2NmZ2QscjQKKworCQlsaSByMjUscGI3Y3IJCQkJLyogUEI3Q1I9UGVyaXBoZXJhbCBCYW5rIDcgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworCQltdGRjciBlYmNjZmdhLHIyNQorCQlsaXMgcjQsMHg3NDExCisJCW9yaSByNCxyNCwweEEwMDAKKwkJbXRkY3IgZWJjY2ZnZCxyNAorCisjaWZuZGVmIENPTkZJR19JU1AxMTYxX1BSRVNFTlQKKwkJbGkgcjI1LHBiNGNyCQkJCS8qIFBCNENSPVBlcmlwaGVyYWwgQmFuayA0IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKwkJbXRkY3IgZWJjY2ZnYSxyMjUKKwkJbGlzIHI0LDB4NzQyMQorCQlvcmkgcjQscjQsMHhBMDAwCisJCW10ZGNyIGViY2NmZ2QscjQKKyNlbmRpZgorI2lmZGVmIElERV9VU0VTX0lTQV9FTVVMQVRJT04KKwkJbGkgcjI1LHBiNWNyCQkJCS8qIFBCNUNSPVBlcmlwaGVyYWwgQmFuayA1IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKwkJbXRkY3IgZWJjY2ZnYSxyMjUKKwkJbGlzIHI0LDB4MDAwMAorCQlvcmkgcjQscjQsMHgwMDAwCisJCW10ZGNyIGViY2NmZ2QscjQKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBNZW1vcnkgYmFuayA0OiBVU0IgY29udHJvbGxlciBQaGlsaXBzIElTUDYxMTEKKyAqIDB4NzdDMDAwMDAgLi4uIDB4NzdDRkZGRkYKKyAqCisgKiBUaGUgY2hpcCBpcyBjb25uZWN0ZWQgdG86CisgKiAtIENQVSBDUyM0CisgKiAtIENQVSBJUlEjMgorICogLSBDUFUgRE1BIDMKKyAqCisgKiBUaW1pbmc6CisgKiAtIGNvbW1hbmQgdG8gZmlyc3QgZGF0YTogMzAwbnMuIFNvZnR3YXJlIG11c3QgZW5zdXJlIHRoaXMgdGltaW5nIQorICogLSBXcml0ZSBwdWxzZTogMjZucworICogLSBSZWFkIHB1bHNlOiAzM25zCisgKiAtIHJlYWQgY3ljbGUgdGltZTogMTUwbnMKKyAqIC0gd3JpdGUgY3ljbGUgdGltZTogMTQwbnMKKyAqCisgKiBOb3RlOiBBbGwgY2FsY3VsYXRpb25zIGFyZSBiYXNlZCBvbiAzM01IeiBFQkMgY2xvY2suIE9uZSAnIycgb3IgJ18nIGlzIDMwbnMKKyAqCisgKgkJCSAgfC0gMzAwbnMgLS18CisgKgkJICB8LS0tLSA0MjBucyAtLS18LS0tLSA0MjBucyAtLS18IGN5Y2xlCisgKiBDUyAjIyMjIyMjIyMjIyM6IyMjX19fXyMjIyMjIyM6IyMjX19fXyMjIyMjIyMKKyAqIE9FICMjIyMjIyMjIyMjIzojIyMjX19fIyMjIyMjIzojIyMjX19fIyMjIyMjIworICogV0UgIyMjIyMjIyMjIyMjOiMjIyNfXyMjIyMjIyMjOiMjIyNfXyMjIyMjIyMjCisgKgorICogLS0tLT4gMiBjbG9ja3MgUkQvV1IgcHVsc2VzOiA2MG5zCisgKiAtLS0tPiBDU046IDMgY2xvY2ssIDkwbnMKKyAqIC0tLS0+IE9FTjogMSBjbG9ja3MgKHJlYWQgY3ljbGUpCisgKiAtLS0tPiBXQk46IDEgY2xvY2tzICh3cml0ZSBjeWNsZSkKKyAqIC0tLS0+IFdCRTogMiBjbG9ja3MKKyAqIC0tLS0+IFRIOiA3IGNsb2NrLCAyMTBucworICogLS0tLT4gVFdUOiA3IGNsb2NrcworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWZkZWYgQ09ORklHX0lTUDExNjFfUFJFU0VOVAorCisJCWxpIHI0LHBiNGFwCQkJCS8qIFBCNEFQPVBlcmlwaGVyYWwgQmFuayA0IEFjY2VzcyBQYXJhbWV0ZXJzICovCisJCW10ZGNyIGViY2NmZ2EscjQKKworCQlsaXMgcjQsMHgwMzBECisJCW9yaSByNCxyNCwweDVFODAKKwkJbXRkY3IgZWJjY2ZnZCxyNAorCisJCWxpIHI0LHBiNGNyCQkJCS8qIFBCMkNSPVBlcmlwaGVyYWwgQmFuayA0IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKwkJbXRkY3IgZWJjY2ZnYSxyNAorCisJCWxpcyByNCwweDc3QzEKKwkJb3JpIHI0LHI0LDB4QTAwMAorCQltdGRjciBlYmNjZmdkLHI0CisKKyNlbmRpZgorCisjaWZuZGVmIElERV9VU0VTX0lTQV9FTVVMQVRJT04KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogTWVtb3J5IEJhbmsgNSB1c2VkIGZvciBJREUgYWNjZXNzCisgKgorICogVGltaW5ncyBmb3IgSURFIEludGVyZmFjZQorICoKKyAqIFNFVFVQIC8gTEVOR1RIIC8gSE9MRCAtIGN5Y2xlcyB2YWxpZCBmb3IgMzMuMyBNSHogY2xrIC0+IDMwbnMgY3ljbGUgdGltZQorICogIDcwCQkxNjUJCTMwCQlQSU8tTW9kZSAwLCBbbnNdCisgKiAgIDMJCSAgNgkJIDEJCVtDeWNsZXNdIC0tLS0+IEFQPTB4MDQwQzAyMDAKKyAqICA1MAkJMTI1CQkyMAkgICBQSU8tTW9kZSAxLCBbbnNdCisgKiAgIDIJCSAgNQkJIDEJCVtDeWNsZXNdIC0tLS0+IEFQPTB4MDMwODAyMDAKKyAqICAzMAkJMTAwCQkxNQkgICBQSU8tTW9kZSAyLCBbbnNdCisgKiAgIDEJCSAgNAkJIDEJCVtDeWNsZXNdIC0tLS0+IEFQPTB4MDIwNDAyMDAKKyAqICAzMAkJIDgwCQkxMAkgICBQSU8tTW9kZSAzLCBbbnNdCisgKiAgIDEJCSAgMwkJIDEJCVtDeWNsZXNdIC0tLS0+IEFQPTB4MDE4NDAyMDAKKyAqICAyNQkJIDcwCQkxMAkgICBQSU8tTW9kZSA0LCBbbnNdCisgKiAgIDEJCSAgMwkJIDEJCVtDeWNsZXNdIC0tLS0+IEFQPTB4MDE4NDAyMDAKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKwkJbGkgcjQscGI1YXAKKwkJbXRkY3IgZWJjY2ZnYSxyNAorCQlsaXMgcjQsMHgwNDBDCisJCW9yaSByNCxyNCwweDAyMDAKKwkJbXRkY3IgZWJjY2ZnZCxyNAorCisJCWxpIHI0LHBiNWNyCQkJLyogUEIyQ1I9UGVyaXBoZXJhbCBCYW5rIDIgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworCQltdGRjciBlYmNjZmdhLHI0CisKKwkJbGlzIHI0LDB4N0EwMQorCQlvcmkgcjQscjQsMHhBMDAwCisJCW10ZGNyIGViY2NmZ2QscjQKKyNlbmRpZgorLyoKKyAqIEV4dGVybmFsIFBlcmlwaGVyYWwgQ29udHJvbCBSZWdpc3RlcgorICovCisJCWxpIHI0LGVwY3IKKwkJbXRkY3IgZWJjY2ZnYSxyNAorCisJCWxpcyByNCwweEI4NEUKKwkJb3JpIHI0LHI0LDB4RjAwMAorCQltdGRjciBlYmNjZmdkLHI0CisvKgorICogZHJpdmUgUE9TVCBjb2RlCisgKi8KKwkJbGlzIHI0LDB4NzkwMAorCQlvcmkgcjQscjQsMHgwMDgwCisJCWxpIHIzLDB4MDAwMQorCQlzdGIgcjMsMChyNCkJCQkvKiAwMSAtPiBleHRlcm5hbCBidXMgY29udHJvbGxlciBpcyBpbml0aWFsaXplZCAqLworCQlub3AJCQkJLyogcGFzczIgRENSIGVycmF0YSAjOCAqLworCQlibHIKZGlmZiAtLWdpdCBhL2JvYXJkL3NvbGlkY2FyZDMvc2MzbmFuZC5jIGIvYm9hcmQvc29saWRjYXJkMy9zYzNuYW5kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RhYTg3NwotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL3NvbGlkY2FyZDMvc2MzbmFuZC5jCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDcKKyAqIEhlaWtvIFNjaG9jaGVyLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCBoc0BkZW54LmRlLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX05BTkQpCisKKyNpbmNsdWRlIDxuYW5kLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorCisjZGVmaW5lIHJlYWRiKGFkZHIpCSoodm9sYXRpbGUgdV9jaGFyICopKGFkZHIpCisjZGVmaW5lIHJlYWRsKGFkZHIpCSoodm9sYXRpbGUgdV9sb25nICopKGFkZHIpCisjZGVmaW5lIHdyaXRlYihkLGFkZHIpCSoodm9sYXRpbGUgdV9jaGFyICopKGFkZHIpID0gKGQpCisKKyNkZWZpbmUgU0MzX05BTkRfQUxFIDI5IC8qIEdQSU8gUElOIDMgKi8KKyNkZWZpbmUgU0MzX05BTkRfQ0xFIDMwCS8qIEdQSU8gUElOIDIgKi8KKyNkZWZpbmUgU0MzX05BTkRfQ0UgIDI3IC8qIEdQSU8gUElOIDUgKi8KKworc3RhdGljIHZvaWQgKnNjM19pb19iYXNlOworc3RhdGljIHZvaWQgKnNjM19jb250cm9sX2Jhc2UgPSAodm9pZCAqKTB4RUY2MDA3MDA7CisKK3N0YXRpYyB2b2lkIHNjM19uYW5kX2h3Y29udHJvbChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCkKK3sKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgTkFORF9DVExfU0VUQ0xFOgorCQlzZXRfYml0IChTQzNfTkFORF9DTEUsIHNjM19jb250cm9sX2Jhc2UpOworCQlicmVhazsKKwljYXNlIE5BTkRfQ1RMX0NMUkNMRToKKwkJY2xlYXJfYml0IChTQzNfTkFORF9DTEUsIHNjM19jb250cm9sX2Jhc2UpOworCQlicmVhazsKKworCWNhc2UgTkFORF9DVExfU0VUQUxFOgorCQlzZXRfYml0IChTQzNfTkFORF9BTEUsIHNjM19jb250cm9sX2Jhc2UpOworCQlicmVhazsKKwljYXNlIE5BTkRfQ1RMX0NMUkFMRToKKwkJY2xlYXJfYml0IChTQzNfTkFORF9BTEUsIHNjM19jb250cm9sX2Jhc2UpOworCQlicmVhazsKKworCWNhc2UgTkFORF9DVExfU0VUTkNFOgorCQlzZXRfYml0IChTQzNfTkFORF9DRSwgc2MzX2NvbnRyb2xfYmFzZSk7CisJCWJyZWFrOworCWNhc2UgTkFORF9DVExfQ0xSTkNFOgorCQljbGVhcl9iaXQgKFNDM19OQU5EX0NFLCBzYzNfY29udHJvbF9iYXNlKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IHNjM19uYW5kX2Rldl9yZWFkeShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKK3sKKwlpZiAoIShyZWFkbChzYzNfY29udHJvbF9iYXNlICsgMHgxQykgJiAweDQwMDApKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgc2MzX3NlbGVjdF9jaGlwKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY2hpcCkKK3sKKwljbGVhcl9iaXQgKFNDM19OQU5EX0NFLCBzYzNfY29udHJvbF9iYXNlKTsKK30KKworaW50IGJvYXJkX25hbmRfaW5pdChzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kKQoreworCW5hbmQtPmVjY21vZGUgPSBOQU5EX0VDQ19TT0ZUOworCisJc2MzX2lvX2Jhc2UgPSAodm9pZCAqKSBDRkdfTkFORF9CQVNFOworCS8qIFNldCBhZGRyZXNzIG9mIE5BTkQgSU8gbGluZXMgKFVzaW5nIExpbmVhciBEYXRhIEFjY2VzcyBSZWdpb24pICovCisJbmFuZC0+SU9fQUREUl9SID0gKHZvaWQgX19pb21lbSAqKSBzYzNfaW9fYmFzZTsKKwluYW5kLT5JT19BRERSX1cgPSAodm9pZCBfX2lvbWVtICopIHNjM19pb19iYXNlOworCS8qIFJlZmVyZW5jZSBoYXJkd2FyZSBjb250cm9sIGZ1bmN0aW9uICovCisJbmFuZC0+aHdjb250cm9sICA9IHNjM19uYW5kX2h3Y29udHJvbDsKKwluYW5kLT5kZXZfcmVhZHkgID0gc2MzX25hbmRfZGV2X3JlYWR5OworCW5hbmQtPnNlbGVjdF9jaGlwID0gc2MzX3NlbGVjdF9jaGlwOworCXJldHVybiAwOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9ib2FyZC9zb2xpZGNhcmQzL3NvbGlkY2FyZDMuYyBiL2JvYXJkL3NvbGlkY2FyZDMvc29saWRjYXJkMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxY2MwMzEKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9zb2xpZGNhcmQzL3NvbGlkY2FyZDMuYwpAQCAtMCwwICsxLDc3OSBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNworICogSGVpa28gU2Nob2NoZXIsIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIDxoc0BkZW54LmRlPi4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDMKKyAqIEp1ZXJnZW4gQmVpc2VydCwgRXVyb0Rlc2lnbiBlbWJlZGRlZCB0ZWNobm9sb2dpZXMsIGluZm9AZXVyb2Rzbi5kZQorICogRGVyaXZlZCBmcm9tIHdhbG51dC5jCisgKgorICogKEMpIENvcHlyaWdodCAyMDAwCisgKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICoKKyAqICRMb2c6JAorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSAic29saWRjYXJkMy5oIgorI2luY2x1ZGUgPHBjaS5oPgorI2luY2x1ZGUgPGkyYy5oPgorI2luY2x1ZGUgPG1hbGxvYy5oPgorCisjdW5kZWYgd3JpdGVsCisjdW5kZWYgd3JpdGViCisjZGVmaW5lIHdyaXRlYihiLGFkZHIpICgoKih2b2xhdGlsZSB1OCAqKSAoYWRkcikpID0gKGIpKQorI2RlZmluZSB3cml0ZWwoYixhZGRyKSAoKCoodm9sYXRpbGUgdTMyICopIChhZGRyKSkgPSAoYikpCisKKy8qIHdyaXRlIG9ubHkgcmVnaXN0ZXIgdG8gY29uZmlndXJlIHRoaW5ncyBpbiBvdXIgQ1BMRCAqLworI2RlZmluZSBDUExEX0NPTlRST0xfMQkweDc5MDAwMTAyCisjZGVmaW5lIENQTERfVkVSU0lPTgkweDc5MDAwMTAzCisKKyNkZWZpbmUJSVNfQ0FNRVJPTiAoKCoodW5zaWduZWQgY2hhciAqKShDUExEX1ZFUlNJT04pPT0gMHgzMikgPyAxIDogMCkKKworc3RhdGljIHN0cnVjdCBwY2lfY29udHJvbGxlciBob3NlPXswLH07CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFN0YW5kYXJkIGRlZmluaXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIENQQzBfQ1IwICAgICAgICBGdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElTQSBidXMKKwktICBHUElPMAorCS0gIEdQSU8xICAgICAgLT4gT3V0cHV0OiBOQU5ELUNvbW1hbmQgTGF0Y2ggRW5hYmxlCisJLSAgR1BJTzIgICAgICAtPiBPdXRwdXQ6IE5BTkQgQWRkcmVzcyBMYXRjaCBFbmFibGUKKwktICBHUElPMyAgICAgIC0+IElSUSBpbnB1dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJU0EtSVJRICM1ICh0aHJvdWdoIENQTEQpCisJLSAgR1BJTzQgICAgICAtPiBPdXRwdXQ6IE5BTkQtQ2hpcCBFbmFibGUKKwktICBHUElPNSAgICAgIC0+IElSUSBpbnB1dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJU0EtSVJRIzcgKHRocm91Z2ggQ1BMRCkKKwktICBHUElPNiAgICAgIC0+IElSUSBpbnB1dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJU0EtSVJRIzkgKHRocm91Z2ggQ1BMRCkKKwktICBHUElPNyAgICAgIC0+IElSUSBpbnB1dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJU0EtSVJRIzEwICh0aHJvdWdoIENQTEQpCisJLSAgR1BJTzggICAgICAtPiBJUlEgaW5wdXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVNBLUlSUSMxMSAodGhyb3VnaCBDUExEKQorCS0gIEdQSU85ICAgICAgLT4gSVJRIGlucHV0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElTQS1JUlEjMTIgKHRocm91Z2ggQ1BMRCkKKwktIEdQSU8xMC9DUzEjIC0+IENTMSMgTkFORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJU0EtQ1MjMAorCS0gR1BJTzExL0NTMiMgLT4gQ1MyIyBJU0EgZW11bGF0aW9uICAgICAgICAgICAgICAgICAgICAgIElTQS1DUyMxCisJLSBHUElPMTIvQ1MzIyAtPiBDUzMjIDJuZCBGbGFzaC1CYW5rICAgICAgICAgICAgICAgICAgICAgSVNBLUNTIzIgb3IgSVNBLUNTIzcKKwktIEdQSU8xMy9DUzQjIC0+IENTNCMgVVNCIEhDIG9yIElTQSBlbXVsYXRpb24gICAgICAgICAgICBJU0EtQ1MjMworCS0gR1BJTzE0L0NTNSMgLT4gQ1M1IyBCb29zdGVkIElERSBhY2Nlc3MgICAgICAgICAgICAgICAgIElTQS1DUyM0CisJLSBHUElPMTUvQ1M2IyAtPiBDUzYjIElTQSBlbXVsYXRpb24gICAgICAgICAgICAgICAgICAgICAgSVNBLUNTIzUKKwktIEdQSU8xNi9DUzcjIC0+IENTNyMgSVNBIGVtdWxhdGlvbiAgICAgICAgICAgICAgICAgICAgICBJU0EtQ1MjNgorCS0gR1BJTzE3L0lSUTAgLT4gR1BJTywgaW4sIE5BTkQtUmVhZHkvQnVzeSMgbGluZSAgICAgICAgIElTQS1JUlEjMworCS0gR1BJTzE4L0lSUTEgLT4gSVJRIGlucHV0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElTQS1JUlEjMTQKKwktIEdQSU8xOS9JUlEyIC0+IElSUSBpbnB1dCBvciBVU0IgICAgICAgICAgICAgICAgICAgICAgICBJU0EtSVJRIzQKKwktIEdQSU8yMC9JUlEzIC0+IElSUSBpbnB1dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0ktSVJRI0QKKwktIEdQSU8yMS9JUlE0IC0+IElSUSBpbnB1dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0ktSVJRI0MKKwktIEdQSU8yMi9JUlE1IC0+IElSUSBpbnB1dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0ktSVJRI0IKKwktIEdQSU8yMy9JUlE2IC0+IElSUSBpbnB1dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0ktSVJRI0EKKwktIEdQSU8yNCAtPiBpZiBHUElPIG91dHB1dDogMD1KVEFHIENQTEQgYWN0aXYsIDE9SlRBRyBDUExEIGluYWN0aXYKKyovCisvKgorfCBDUExEIHJlZ2lzdGVyOiBpby1zcGFjZSBhdCBvZmZzZXQgMHgxMDIgKHdyaXRlIG9ubHkpCit8IDAKK3wgMQorfCAyIDA9Q1MjNCBVU0IgQ1MjLCAxPUlTQSBvciBHUCBidXMKK3wgMworfCA0Cit8IDUKK3wgNiAxPWVuYWJsZSBmYXN0ZXIgSURFIGFjY2VzcworfCA3CisqLworI2RlZmluZSBVU0JfQ0hJUF9FTkFCTEUgMHgwNAorI2RlZmluZSBJREVfQk9PU1RJTkcgMHg0MAorCisvKiAtLS0tLS0tLS0tLS0tLS0gVVNCIHN0dWZmIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNpZmRlZiBDT05GSUdfSVNQMTE2MV9QUkVTRU5UCisvKioKKyAqIGluaXRVc2JIb3N0LSBJbml0aWFsaXplIHRoZSBQaGlsaXBzIGlzcDExNjEgSEMgcGFydCBpZiBwcmVzZW50CisgKiBAY3BsZENvbmZpZzogUG9pbnRlciB0byB2YWx1ZSBpbiB3cml0ZSBvbmx5IENQTEQgcmVnaXN0ZXIKKyAqCisgKiBJbml0aWFsaXplIHRoZSBVU0IgaG9zdCBjb250cm9sbGVyIGlmIHByZXNlbnQgYW5kIGZpbGxzIHRoZQorICogc2NyYXRjaCByZWdpc3RlciB0byBpbmZvcm0gdGhlIGRyaXZlciBhYm91dCB1c2VkIHJlc291cmNlcworICovCisKK3N0YXRpYyB2b2lkIGluaXRVc2JIb3N0ICh1bnNpZ25lZCBjaGFyICpjcGxkQ29uZmlnKQoreworCWludCBpOworCXVuc2lnbmVkIGxvbmcgdXNiQmFzZTsKKwkvKgorCSAqIFJlYWQgYmFjayB3aGVyZSBpbml0LlMgaGFzIGxvY2F0ZWQgdGhlIFVTQiBjaGlwCisJICovCisJbXRkY3IgKDB4MDEyLCAweDA0KTsKKwl1c2JCYXNlID0gbWZkY3IgKDB4MDEzKTsKKwlpZiAoISh1c2JCYXNlICYgMHgxODAwMCkpCS8qIGVuYWJsZWQ/ICovCisJCXJldHVybjsKKwl1c2JCYXNlICY9IDB4RkZGMDAwMDA7CisKKwkvKgorCSAqIHRvIHRlc3QgZm9yIHRoZSBVU0IgY29udHJvbGxlciBlbmFibGUgdXNpbmcgb2YgQ1MjNCBhbmQgRE1BIDMgZm9yIFVTQiBhY2Nlc3MKKwkgKi8KKwl3cml0ZWIgKCpjcGxkQ29uZmlnIHwgVVNCX0NISVBfRU5BQkxFLENQTERfQ09OVFJPTF8xKTsKKworCS8qCisJICogZmlyc3QgY2hlY2s6IGlzIHRoZSBjb250cm9sbGVyIGFzc2VtYmxlZD8KKwkgKi8KKwloY1dyaXRlV29yZCAodXNiQmFzZSwgMHg1NTU1LCBIY1NjcmF0Y2gpOworCWlmIChoY1JlYWRXb3JkICh1c2JCYXNlLCBIY1NjcmF0Y2gpID09IDB4NTU1NSkgeworCQloY1dyaXRlV29yZCAodXNiQmFzZSwgMHhBQUFBLCBIY1NjcmF0Y2gpOworCQlpZiAoaGNSZWFkV29yZCAodXNiQmFzZSwgSGNTY3JhdGNoKSA9PSAweEFBQUEpIHsKKwkJCWlmICgoaGNSZWFkV29yZCAodXNiQmFzZSwgSGNDaGlwSUQpICYgMHhGRjAwKSAhPSAweDYxMDApCisJCQkJcmV0dXJuOwkvKiB0aGlzIGlzIG5vdCBvdXIgY29udHJvbGxlciAqLworCQkvKgorCQkgKiB0cnkgYSBzb2Z0d2FyZSByZXNldC4gVGhpcyBuZWVkcyB1cCB0byAxMCBzZWNvbmRzIChzZWUgZGF0YXNoZWV0KQorCQkgKi8KKwkJCWhjV3JpdGVEV29yZCAodXNiQmFzZSwgMHgwMDAwMDAwMSwgSGNDb21tYW5kU3RhdHVzKTsKKwkJCWZvciAoaSA9IDEwMDA7IGkgPiAwOyBpLS0pIHsJLyogbG9vcCB1cCB0byAxMCBzZWNvbmRzICovCisJCQkJdWRlbGF5ICgxMCk7CisJCQkJaWYgKCEoaGNSZWFkRFdvcmQgKHVzYkJhc2UsIEhjQ29tbWFuZFN0YXR1cykgJiAweDAxKSkKKwkJCQkJYnJlYWs7CisJCQl9CisKKwkJCWlmICghaSkKKwkJCQlyZXR1cm47ICAvKiB0aGUgY29udHJvbGxlciBkb2Vzbid0IHJlc3BvbmRpbmcuIEJyb2tlbj8gKi8KKwkJLyoKKwkJICogT0suIFVTQiBjb250cm9sbGVyIGlzIHJlYWR5LiBJbml0aWFsaXplIGl0IGluIHN1Y2ggd2F5IHRoZSBsYXRlciBkcml2ZXIKKwkJICogY2FuIHVzIGl0ICh3aXRob3V0IGFueSBrbm93aW5nIGFib3V0IHNwZWNpZmljIGltcGxlbWVudGF0aW9uKQorCQkgKi8KKwkJCWhjV3JpdGVEV29yZCAodXNiQmFzZSwgMHgwMDAwMDAwMCwgSGNDb250cm9sKTsKKwkJLyoKKwkJICogZGlzYWJsZSBhbGwgaW50ZXJydXB0IHNvdXJjZXMuIEJlY2F1c2Ugd2UKKwkJICogZG9uJ3Qga25vdyB3aGVyZSB3ZSBjb21lIGZyb20gKGhhcmQgcmVzZXQsIGNvbGQgc3RhcnQsIHNvZnQgcmVzZXQuLi4pCisJCSAqLworCQkJaGNXcml0ZURXb3JkICh1c2JCYXNlLCAweDgwMDAwMDdELCBIY0ludGVycnVwdERpc2FibGUpOworCQkvKgorCQkgKiBvdXIgY3VycmVudCBzZXR1cCBoYXJkd2FyZSBjb25maWd1cmF0aW9uCisJCSAqIC0gZXZlcnkgcG9ydCBwb3dlciBzdXBwbHkgY2FuIHN3aXRjaGVkIGluZGVwZW50bHkKKwkJICogLSBldmVyeSBwb3J0IGNhbiBzaWduYWwgb3ZlcmN1cnJlbnQKKwkJICogLSBldmVyeSBwb3J0IGlzICJvdXRzaWRlIiBhbmQgdGhlIGRldmljZXMgYXJlIHJlbW92ZWFibGUKKwkJICovCisJCQloY1dyaXRlRFdvcmQgKHVzYkJhc2UsIDB4MzIwMDA5MDIsIEhjUmhEZXNjcmlwdG9yQSk7CisJCQloY1dyaXRlRFdvcmQgKHVzYkJhc2UsIDB4MDAwNjAwMDAsIEhjUmhEZXNjcmlwdG9yQik7CisJCS8qCisJCSAqIGRvbid0IGZvcmdldCB0byBzd2l0Y2ggb2ZmIHBvd2VyIHN1cHBseSBvZiBlYWNoIHBvcnQKKwkJICogVGhlIGxhdGVyIHJ1bm5pbmcgZHJpdmVyIGNhbiByZWVuYWJsZSB0aGVtIHRvIGZpbmQgYW5kIHVzZQorCQkgKiB0aGUgKG1heWJlKSBjb25uZWN0ZWQgZGV2aWNlcy4KKwkJICoKKwkJICovCisJCQloY1dyaXRlRFdvcmQgKHVzYkJhc2UsIDB4MDAwMDAyMDAsIEhjUmhQb3J0U3RhdHVzMSk7CisJCQloY1dyaXRlRFdvcmQgKHVzYkJhc2UsIDB4MDAwMDAyMDAsIEhjUmhQb3J0U3RhdHVzMik7CisJCQloY1dyaXRlV29yZCAodXNiQmFzZSwgMHgwNDI4LCBIY0hhcmR3YXJlQ29uZmlndXJhdGlvbik7CisJCQloY1dyaXRlV29yZCAodXNiQmFzZSwgMHgwMDQwLCBIY0RNQUNvbmZpZ3VyYXRpb24pOworCQkJaGNXcml0ZVdvcmQgKHVzYkJhc2UsIDB4MDAwMCwgSGN1UEludGVycnVwdEVuYWJsZSk7CisJCQloY1dyaXRlV29yZCAodXNiQmFzZSwgMHhBMDAwIHwgKDB4MDMgPDwgOCkgfCAyNywgSGNTY3JhdGNoKTsKKwkJLyoKKwkJICogY29udHJvbGxlciBpcyBwcmVzZW50IGFuZCB1c2FibGUKKwkJICovCisJCQkqY3BsZENvbmZpZyB8PSBVU0JfQ0hJUF9FTkFCTEU7CisJCX0KKwl9Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX1NUQVJUX0lERSkKK2ludCBib2FyZF9zdGFydF9pZGUodm9pZCkKK3sKKwlpZiAoSVNfQ0FNRVJPTikgeworCQlwdXRzICgibm8gSURFIG9uIGNhbWVyb24gYm9hcmQuXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgc2MzX2NhbWVyb25faW5pdCAodm9pZCkKK3sKKwkvKiBTZXQgdXAgdGhlIE1lbW9yeSBDb250cm9sbGVyIGZvciB0aGUgQ0FNRVJPTiB2ZXJzaW9uICovCisJbXRlYmMgKHBiNGFwLCAweDAxODA1OTQwKTsKKwltdGViYyAocGI0Y3IsIDB4NzQwMWEwMDApOworCW10ZWJjIChwYjVhcCwgMHgwMTgwNTk0MCk7CisJbXRlYmMgKHBiNWNyLCAweDc0MDFhMDAwKTsKKwltdGViYyAocGI2YXAsIDB4MCk7CisJbXRlYmMgKHBiNmNyLCAweDApOworCW10ZWJjIChwYjdhcCwgMHgwKTsKKwltdGViYyAocGI3Y3IsIDB4MCk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgc2MzX3JlYWRfZWVwcm9tICh2b2lkKQoreworCXVjaGFyIGkyY19idWZmZXJbMThdOworCisJaTJjX3JlYWQgKDB4NTAsIDB4MDMsIDEsIGkyY19idWZmZXIsIDkpOworCWkyY19idWZmZXJbOV0gPSAwOworCXNldGVudiAoInNlcmlhbCMiLCAoY2hhciAqKWkyY19idWZmZXIpOworCisJLyogcmVhZCBtYWMtYWRkcmVzcyBmcm9tIGVlcHJvbSAqLworCWkyY19yZWFkICgweDUwLCAweDExLCAxLCBpMmNfYnVmZmVyLCAxNSk7CisJaTJjX2J1ZmZlclsxN10gPSAwOworCWkyY19idWZmZXJbMTZdID0gaTJjX2J1ZmZlclsxNF07CisJaTJjX2J1ZmZlclsxNV0gPSBpMmNfYnVmZmVyWzEzXTsKKwlpMmNfYnVmZmVyWzE0XSA9ICc6JzsKKwlpMmNfYnVmZmVyWzEzXSA9IGkyY19idWZmZXJbMTJdOworCWkyY19idWZmZXJbMTJdID0gaTJjX2J1ZmZlclsxMV07CisJaTJjX2J1ZmZlclsxMV0gPSAnOic7CisJaTJjX2J1ZmZlcls4XSA9ICc6JzsKKwlpMmNfYnVmZmVyWzVdID0gJzonOworCWkyY19idWZmZXJbMl0gPSAnOic7CisJc2V0ZW52ICgiZXRoYWRkciIsIChjaGFyICopaTJjX2J1ZmZlcik7Cit9CisKK2ludCBib2FyZF9lYXJseV9pbml0X2YgKHZvaWQpCit7CisJLyogd3JpdGUgb25seSByZWdpc3RlciB0byBjb25maWd1cmUgdGhpbmdzIGluIG91ciBDUExEICovCisJdW5zaWduZWQgY2hhciBjcGxkQ29uZmlnXzE9MHgwMDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnRlcnJ1cHQgY29udHJvbGxlciBzZXR1cCBmb3IgdGhlIFNvbGlkQ2FyZCBJSUkgQ1BVIGNhcmQgKHBsdXMgRXZhbHVhdGlvbiBib2FyZCkuCit8Cit8IE5vdGU6IElSUSAwICBVQVJUIDAsIGFjdGl2ZSBoaWdoOyBsZXZlbCBzZW5zaXRpdmUKK3wgICAgICAgSVJRIDEgIFVBUlQgMSwgYWN0aXZlIGhpZ2g7IGxldmVsIHNlbnNpdGl2ZQorfCAgICAgICBJUlEgMiAgSUlDLCBhY3RpdmUgaGlnaDsgbGV2ZWwgc2Vuc2l0aXZlCit8ICAgICAgIElSUSAzICBFeHQuIG1hc3RlciwgcmlzaW5nIGVkZ2UsIGVkZ2Ugc2Vuc2l0aXZlCit8ICAgICAgIElSUSA0ICBQQ0ksIGFjdGl2ZSBoaWdoOyBsZXZlbCBzZW5zaXRpdmUKK3wgICAgICAgSVJRIDUgIERNQSBDaGFubmVsIDAsIGFjdGl2ZSBoaWdoOyBsZXZlbCBzZW5zaXRpdmUKK3wgICAgICAgSVJRIDYgIERNQSBDaGFubmVsIDEsIGFjdGl2ZSBoaWdoOyBsZXZlbCBzZW5zaXRpdmUKK3wgICAgICAgSVJRIDcgIERNQSBDaGFubmVsIDIsIGFjdGl2ZSBoaWdoOyBsZXZlbCBzZW5zaXRpdmUKK3wgICAgICAgSVJRIDggIERNQSBDaGFubmVsIDMsIGFjdGl2ZSBoaWdoOyBsZXZlbCBzZW5zaXRpdmUKK3wgICAgICAgSVJRIDkgIEV0aGVybmV0IFdha2V1cCwgYWN0aXZlIGhpZ2g7IGxldmVsIHNlbnNpdGl2ZQorfCAgICAgICBJUlEgMTAgTUFMIFN5c3RlbSBFcnJvciAoU0VSUiksIGFjdGl2ZSBoaWdoOyBsZXZlbCBzZW5zaXRpdmUKK3wgICAgICAgSVJRIDExIE1BTCBUeCBFbmQgb2YgQnVmZmVyLCBhY3RpdmUgaGlnaDsgbGV2ZWwgc2Vuc2l0aXZlCit8ICAgICAgIElSUSAxMiBNQUwgUnggRW5kIG9mIEJ1ZmZlciwgYWN0aXZlIGhpZ2g7IGxldmVsIHNlbnNpdGl2ZQorfCAgICAgICBJUlEgMTMgTUFMIFR4IERlc2NyaXB0b3IgRXJyb3IsIGFjdGl2ZSBoaWdoOyBsZXZlbCBzZW5zaXRpdmUKK3wgICAgICAgSVJRIDE0IE1BTCBSeCBEZXNjcmlwdG9yIEVycm9yLCBhY3RpdmUgaGlnaDsgbGV2ZWwgc2Vuc2l0aXZlCit8ICAgICAgIElSUSAxNSBFdGhlcm5ldCwgYWN0aXZlIGhpZ2g7IGxldmVsIHNlbnNpdGl2ZQorfCAgICAgICBJUlEgMTYgRXh0ZXJuYWwgUENJIFNFUlIsIGFjdGl2ZSBoaWdoOyBsZXZlbCBzZW5zaXRpdmUKK3wgICAgICAgSVJRIDE3IEVDQyBDb3JyZWN0YWJsZSBFcnJvciwgYWN0aXZlIGhpZ2g7IGxldmVsIHNlbnNpdGl2ZQorfCAgICAgICBJUlEgMTggUENJIFBvd2VyIE1hbmFnZW1lbnQsIGFjdGl2ZSBoaWdoOyBsZXZlbCBzZW5zaXRpdmUKK3wKK3wgICAgICAgSVJRIDE5IChFWFQgSVJRNyA0MDVHUHIgb25seSkKK3wgICAgICAgSVJRIDIwIChFWFQgSVJROCA0MDVHUHIgb25seSkKK3wgICAgICAgSVJRIDIxIChFWFQgSVJROSA0MDVHUHIgb25seSkKK3wgICAgICAgSVJRIDIyIChFWFQgSVJRMTAgNDA1R1ByIG9ubHkpCit8ICAgICAgIElSUSAyMyAoRVhUIElSUTExIDQwNUdQciBvbmx5KQorfCAgICAgICBJUlEgMjQgKEVYVCBJUlExMiA0MDVHUHIgb25seSkKK3wKK3wgICAgICAgSVJRIDI1IChFWFQgSVJRIDApIE5BTkQtRmxhc2ggUi9CIyAocmFpc2luZyBlZGdlIG1lYW5zIGZsYXNoIGlzIHJlYWR5KQorfCAgICAgICBJUlEgMjYgKEVYVCBJUlEgMSkgSURFMCBpbnRlcnJ1cHQgKHg4NiA9IElSUTE0KS4gQWN0aXZlIGhpZ2ggKGVkZ2Ugc2Vuc2l0aXZlKQorfCAgICAgICBJUlEgMjcgKEVYVCBJUlEgMikgVVNCIGNvbnRyb2xsZXIKK3wgICAgICAgSVJRIDI4IChFWFQgSVJRIDMpIElOVCBELCBWR0E7IGFjdGl2ZSBsb3c7IGxldmVsIHNlbnNpdGl2ZQorfCAgICAgICBJUlEgMjkgKEVYVCBJUlEgNCkgSU5UIEMsIEV0aGVybmV0OyBhY3RpdmUgbG93OyBsZXZlbCBzZW5zaXRpdmUKK3wgICAgICAgSVJRIDMwIChFWFQgSVJRIDUpIElOVCBCLCBQQzEwNCsgU0xPVDsgYWN0aXZlIGxvdzsgbGV2ZWwgc2Vuc2l0aXZlCit8ICAgICAgIElSUSAzMSAoRVhUIElSUSA2KSBJTlQgQSwgUEMxMDQrIFNMT1Q7IGFjdGl2ZSBsb3c7IGxldmVsIHNlbnNpdGl2ZQorfAorfCBEaXJlY3QgTWVtb3J5IEFjY2VzcyBDb250cm9sbGVyIFNpZ25hbCBQb2xhcml0aWVzCit8ICAgICAgIERSUTAgYWN0aXZlIGhpZ2ggKGxpa2UgSVNBKQorfCAgICAgICBBQ0swIGFjdGl2ZSBsb3cgKGxpa2UgSVNBKQorfCAgICAgICBFT1QwIGFjdGl2ZSBoaWdoIChsaWtlIElTQSkKK3wgICAgICAgRFJRMSBhY3RpdmUgaGlnaCAobGlrZSBJU0EpCit8ICAgICAgIEFDSzEgYWN0aXZlIGxvdyAobGlrZSBJU0EpCit8ICAgICAgIEVPVDEgYWN0aXZlIGhpZ2ggKGxpa2UgSVNBKQorfCAgICAgICBEUlEyIGFjdGl2ZSBoaWdoIChsaWtlIElTQSkKK3wgICAgICAgQUNLMiBhY3RpdmUgbG93IChsaWtlIElTQSkKK3wgICAgICAgRU9UMiBhY3RpdmUgaGlnaCAobGlrZSBJU0EpCit8ICAgICAgIERSUTMgYWN0aXZlIGhpZ2ggKGxpa2UgSVNBKQorfCAgICAgICBBQ0szIGFjdGl2ZSBsb3cgKGxpa2UgSVNBKQorfCAgICAgICBFT1QzIGFjdGl2ZSBoaWdoIChsaWtlIElTQSkKK3wKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworCXdyaXRlYiAoY3BsZENvbmZpZ18xLCBDUExEX0NPTlRST0xfMSk7CS8qIGRpc2FibGUgZXZlcnl0aGluZyBpbiBDUExEICovCisKKwltdGRjciAodWljc3IsIDB4RkZGRkZGRkYpOyAgICAvKiBjbGVhciBhbGwgaW50cyAqLworCW10ZGNyICh1aWNlciwgMHgwMDAwMDAwMCk7ICAgIC8qIGRpc2FibGUgYWxsIGludHMgKi8KKwltdGRjciAodWljY3IsIDB4MDAwMDAwMDApOyAgICAvKiBzZXQgYWxsIHRvIGJlIG5vbi1jcml0aWNhbCAqLworCisJaWYgKElTX0NBTUVST04pIHsKKwkJc2MzX2NhbWVyb25faW5pdCgpOworCQltdGRjciAoMHgwQjYsIDB4MTgwMDAwMDApOworCQltdGRjciAodWljcHIsIDB4RkZGRkZGRjApOworCQltdGRjciAodWljdHIsIDB4MTAwMDEwMzApOworCX0gZWxzZSB7CisJCW10ZGNyICgweDBCNiwgMHgwMDAwMDAwKTsKKwkJbXRkY3IgKHVpY3ByLCAweEZGRkZGRkUwKTsKKwkJbXRkY3IgKHVpY3RyLCAweDEwMDAwMDIwKTsKKwl9CisJbXRkY3IgKHVpY3ZjciwgMHgwMDAwMDAwMSk7ICAgLyogc2V0IHZlY3QgYmFzZT0wLElOVDAgaGlnaGVzdCBwcmlvcml0eSAqLworCW10ZGNyICh1aWNzciwgMHhGRkZGRkZGRik7ICAgIC8qIGNsZWFyIGFsbCBpbnRzICovCisKKwkvKiBzZXR1cCBvdGhlciBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBkZXRhaWxzICovCisJbXRkY3IgKGVjciwgMHg2MDYwNjAwMCk7CisKKwltdGRjciAoY250cmwxLCAweDAwMDA0MkMwKTsKKworCWlmIChJU19DQU1FUk9OKSB7CisJCW10ZGNyIChjbnRybDAsIDB4MDEzODAwMDApOworCQkvKiBTZXR1cCB0aGUgR1BJT3MgKi8KKwkJd3JpdGVsICgweDA4MDA4MDAwLCAweEVGNjAwNzAwKTsJLyogT3V0cHV0IHN0YXRlcyAqLworCQl3cml0ZWwgKDB4MDAwMDAwMDAsIDB4RUY2MDA3MTgpOwkvKiBPcGVuIERyYWluIGNvbnRyb2wgKi8KKwkJd3JpdGVsICgweDY4MDk4MDAwLCAweEVGNjAwNzA0KTsJLyogT3V0cHV0IGNvbnRyb2wgKi8KKwl9IGVsc2UgeworCQltdGRjciAoY250cmwwLDB4MDAwODAwMDApOworCQkvKiBTZXR1cCB0aGUgR1BJT3MgKi8KKwkJd3JpdGVsICgweDA4MDAwMDAwLCAweEVGNjAwNzAwKTsJLyogT3V0cHV0IHN0YXRlcyAqLworCQl3cml0ZWwgKDB4MTQwMDAwMDAsIDB4RUY2MDA3MTgpOwkvKiBPcGVuIERyYWluIGNvbnRyb2wgKi8KKwkJd3JpdGVsICgweDdDMDAwMDAwLCAweEVGNjAwNzA0KTsJLyogT3V0cHV0IGNvbnRyb2wgKi8KKwl9CisKKwkvKiBDb2RlIGRlY29tcHJlc3Npb24gZGlzYWJsZWQgKi8KKwltdGRjciAoa2lhciwga2NvbmYpOworCW10ZGNyIChraWRyLCAweDJCKTsKKworCS8qIENQQzBfRVI6IGVuYWJsZSBzbGVlcCBtb2RlIG9mIChjdXJyZW50bHkpIHVudXNlZCBjb21wb25lbnRzICovCisJLyogQ1BDMF9GUjogZm9yY2UgdW51c2VkIGNvbXBvbmVudHMgaW50byBzbGVlcCBtb2RlICovCisJbXRkY3IgKGNwbWVyLCAweDNGODAwMDAwKTsKKwltdGRjciAoY3BtZnIsIDB4MTQwMDAwMDApOworCisJLyogc2V0IFBMQiBwcmlvcml0eSAqLworCW10ZGNyICgweDg3LCAweDA4MDAwMDAwKTsKKworCS8qIC0tLS0tLS0tLS0tLS0tLSBETUEgc3R1ZmYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCW10ZGNyICgweDEyNiwgMHg0OTIwMDAwMCk7CisKKyNpZm5kZWYgSURFX1VTRVNfSVNBX0VNVUxBVElPTgorCWNwbGRDb25maWdfMSB8PSBJREVfQk9PU1RJTkc7CS8qIGVuYWJsZSBmYXN0ZXIgSURFICovCisJLyogY3BsZENvbmZpZyB8PSAweDAxOyAqLwkvKiBlbmFibGUgOC4zM01IeiBvdXRwdXQsIGlmICpub3QqIHByZXNlbnQgb24geW91ciBiYXNlYm9hcmQgKi8KKwl3cml0ZWIgKGNwbGRDb25maWdfMSwgQ1BMRF9DT05UUk9MXzEpOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfSVNQMTE2MV9QUkVTRU5UCisJaW5pdFVzYkhvc3QgKCZjcGxkQ29uZmlnXzEpOworCXdyaXRlYiAoY3BsZENvbmZpZ18xLCBDUExEX0NPTlRST0xfMSk7CisjZW5kaWYKKwlyZXR1cm4oMCk7Cit9CisKK2ludCBtaXNjX2luaXRfciAodm9pZCkKK3sKKwljaGFyICpzMTsKKwlpbnQgaSwgeGlsaW54X3ZhbDsKKwl2b2xhdGlsZSBjaGFyICp4aWxpbnhfYWRyOworCXhpbGlueF9hZHIgPSAoY2hhciAqKTB4NzkwMDAxMDI7CisKKwkqeGlsaW54X2FkciA9IDB4MDA7CisKKy8qIGN1c3RvbWVyIHNldHRpbmdzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKgorCXMxID0gZ2V0ZW52ICgiZnVuY3Rpb24iKTsKKwlpZiAoczEpIHsKKwkJaWYgKCFzdHJjbXAgKHMxLCAiUm9zaG8iKSkgeworCQkJcHJpbnRmICgiZnVuY3Rpb24gJ1Jvc2hvJyBhY3RpdmF0ZWRcbiIpOworCQkJKnhpbGlueF9hZHIgPSAweDQwOworCQl9CisJCWVsc2UgeworCQkJcHJpbnRmICgiPj4+Pj4+Pj4+PiBmdW5jdGlvbiAlcyBub3QgcmVjb2duaXplZFxuIixzMSk7CisJCX0KKwl9CisqLworCisvKiBpbmRpdmlkdWFsIHNldHRpbmdzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisJaWYgKChzMSA9IGdldGVudiAoInhpbGlueCIpKSkgeworCQlpPTA7CisJCXhpbGlueF92YWwgPSAwOworCQl3aGlsZSAoaSA8IDMgJiYgczFbaV0pIHsKKwkJCWlmIChzMVtpXSA+PSAnMCcgJiYgczFbaV0gPD0gJzknKQorCQkJCXhpbGlueF92YWwgPSAoeGlsaW54X3ZhbCA8PCA0KSArIHMxW2ldIC0gJzAnOworCQkJZWxzZQorCQkJCWlmIChzMVtpXSA+PSAnQScgJiYgczFbaV0gPD0gJ0YnKQorCQkJCQl4aWxpbnhfdmFsID0gKHhpbGlueF92YWwgPDwgNCkgKyBzMVtpXSAtICdBJyArIDEwOworCQkJCWVsc2UKKwkJCQkJaWYgKHMxW2ldID49ICdhJyAmJiBzMVtpXSA8PSAnZicpCisJCQkJCQl4aWxpbnhfdmFsID0gKHhpbGlueF92YWwgPDwgNCkgKyBzMVtpXSAtICdhJyArIDEwOworCQkJCQllbHNlIHsKKwkJCQkJCXhpbGlueF92YWwgPSAtMTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQlpKys7CisJCX0KKwkJaWYgKHhpbGlueF92YWwgPj0gMCAmJiB4aWxpbnhfdmFsIDw9MjU1ICYmIGkgPCAzKSB7CisJCQlwcmludGYgKCJYaWxpbng6IHNldCB0byAlc1xuIiwgczEpOworCQkJKnhpbGlueF9hZHIgPSAodW5zaWduZWQgY2hhcikgeGlsaW54X3ZhbDsKKwkJfSBlbHNlCisJCQlwcmludGYgKCJYaWxpbng6IHJlamVjdGVkIHZhbHVlICVzXG4iLCBzMSk7CisJfQorCXJldHVybiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBwcmludENTQ29uZmlnCisgKgorICogUHJpbnQgc29tZSBpbmZvcm1hdGlvbnMgYWJvdXQgY2hpcHMgc2VsZWN0IGNvbmZpZ3VyYXRpb25zCisgKiBPbmx5IHVzZWQgd2hpbGUgZGVidWdnaW5nLgorICoKKyAqIFBhcmFtczoKKyAqIC0gTm8uIG9mIENTIHBpbgorICogLSBBUCBvZiB0aGlzIENTCisgKiAtIENSIG9mIHRoaXMgQ1MKKyAqCisgKiBSZXR1cm5zCisgKiBub3RoaW5nCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZmRlZiBTQzNfREVCVUdPVVQKK3N0YXRpYyB2b2lkIHByaW50Q1NDb25maWcoaW50IHJlZyx1bnNpZ25lZCBsb25nIGFwLHVuc2lnbmVkIGxvbmcgY3IpCit7CisJY29uc3QgY2hhciAqYnNpemVbNF0gPSB7IjgiLCIxNiIsIjMyIiwiPyJ9OworCWNvbnN0IHVuc2lnbmVkIGNoYXIgYmFua3NbOF0gPSB7MSwgMiwgNCwgOCwgMTYsIDMyLCA2NCwgMTI4fTsKKwljb25zdCBjaGFyICpiYW5rYWNjZXNzWzRdID0geyJkaXNhYmxlZCIsICJSTyIsICJXTyIsICJSVyJ9OworCisjZGVmaW5lIENZQ0xFIDMwICAvKiB0aW1lIG9mIG9uZSBjbG9jayAoYmFzZWQgb24gMzNNSHopICovCisKKwlwcmludGYoIlxuQ1MjJWQiLHJlZyk7CisJaWYgKCEoY3IgJiAweDAwMDE4MDAwKSkKKwkJcHV0cygiIHVudXNlZCIpOworCWVsc2UgeworCQlpZiAoKChjciYweEZGRjAwMDAwVSkgJiAoKGJhbmtzWyhjciAmIDB4MDAwRTAwMDApID4+IDE3XS0xKSA8PCAyMCkpKQorCQkJcHV0cygiIEFkZHJlc3MgaXMgbm90IG11bHRpcGxlIG9mIGJhbmsgc2l6ZSEiKTsKKworCQlwcmludGYoIlxuIC0lcyBiaXQgZGV2aWNlIiwKKwkJCWJzaXplWyhjciAmIDB4MDAwMDYwMDApID4+IDEzXSk7CisJCXByaW50ZigiIGF0IDB4JTA4bFgiLCBjciAmIDB4RkZGMDAwMDBVKTsKKwkJcHJpbnRmKCIgc2l6ZTogJXUgTUIiLCBiYW5rc1soY3IgJiAweDAwMEUwMDAwKSA+PiAxN10pOworCQlwcmludGYoIiByaWdodHM6ICVzIiwgYmFua2FjY2Vzc1soY3IgJiAweDAwMDE4MDAwKSA+PiAxNV0pOworICAgCSAgIAlpZiAoYXAgJiAweDgwMDAwMDAwKSB7CisJCQlwcmludGYoIlxuIC1CdXJzdCBkZXZpY2UgKCVsdW5zLyVsdW5zKSIsCisJCQkJKCgoYXAgJiAweDdDMDAwMDAwKSA+PiAyNikgKyAxKSAqIENZQ0xFLAorCQkJCSgoKGFwICYgMHgwMzgwMDAwMCkgPj4gMjMpICsgMSkgKiBDWUNMRSk7CisJCX0gZWxzZSB7CisJCQlwcmludGYoIlxuIC1Ob24gYnVyc3QgZGV2aWNlLCBhY3RpdmUgY3ljbGUgJWx1bnMiLAorCQkJCSgoKGFwICYgMHg3RjgwMDAwMCkgPj4gMjMpICsgMSkgKiBDWUNMRSk7CisJCQlwcmludGYoIlxuIC1BZGRyZXNzIHNldHVwICVsdW5zIiwKKwkJCQkoKGFwICYgMHhDMDAwMCkgPj4gMTgpICogQ1lDTEUpOworCQkJcHJpbnRmKCJcbiAtQ1MgYWN0aXZlIHRvIFJEICVsdW5zL1dSICVsdW5zIiwKKwkJCQkoKGFwICYgMHgzMDAwMCkgPj4gMTYpICogQ1lDTEUsCisJCQkJKChhcCAmIDB4QzAwMCkgPj4gMTQpICogQ1lDTEUpOworCQkJcHJpbnRmKCJcbiAtV1IgdG8gQ1MgaW5hY3RpdmUgJWx1bnMiLAorCQkJCSgoYXAgJiAweDMwMDApID4+IDEyKSAqIENZQ0xFKTsKKwkJCXByaW50ZigiXG4gLUhvbGQgYWZ0ZXIgYWNjZXNzICVsdW5zIiwKKwkJCQkoKGFwICYgMHhFMDApID4+IDkpICogQ1lDTEUpOworCQkJcHJpbnRmKCJcbiAtUmVhZHkgaXMgJXNhYmxlZCIsCisJCQkJYXAgJiAweDEwMCA/ICJlbiIgOiAiZGlzIik7CisJCX0KKwl9Cit9CisjZW5kaWYKKworI2lmZGVmIFNDM19ERUJVR09VVAorCitzdGF0aWMgdW5zaWduZWQgaW50IGFwW10gPSB7cGIwYXAsIHBiMWFwLCBwYjJhcCwgcGIzYXAsIHBiNGFwLAorCQkJCXBiNWFwLCBwYjZhcCwgcGI3YXB9Oworc3RhdGljIHVuc2lnbmVkIGludCBjcltdID0ge3BiMGNyLCBwYjFjciwgcGIyY3IsIHBiM2NyLCBwYjRjciwKKwkJCQlwYjVjciwgcGI2Y3IsIHBiN2NyfTsKKworc3RhdGljIGludCBzaG93X3JlZyAoaW50IG5yKQoreworCXVuc2lnbmVkIGxvbmcgdWwxLCB1bDI7CisKKwltdGRjciAoZWJjY2ZnYSwgYXBbbnJdKTsKKwl1bDEgPSBtZmRjciAoZWJjY2ZnZCk7CisJbXRkY3IgKGViY2NmZ2EsIGNyW25yXSk7CisJdWwyID0gbWZkY3IoZWJjY2ZnZCk7CisJcHJpbnRDU0NvbmZpZyhuciwgdWwxLCB1bDIpOworCXJldHVybiAwOworfQorI2VuZGlmCisKK2ludCBjaGVja2JvYXJkICh2b2lkKQoreworI2lmZGVmIFNDM19ERUJVR09VVAorCXVuc2lnbmVkIGxvbmcgdWwxOworCWludAlpOworCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQlzaG93X3JlZyAoaSk7CisJfQorCisJbXRkY3IgKGViY2NmZ2EsIGVwY3IpOworCXVsMSA9IG1mZGNyIChlYmNjZmdkKTsKKworCXB1dHMgKCJcbkdlbmVyYWwgY29uZmlndXJhdGlvbjpcbiIpOworCisJaWYgKHVsMSAmIDB4ODAwMDAwMDApCisJCXByaW50ZigiIC1FeHRlcm5hbCBCdXMgaXMgYWx3YXlzIGRyaXZlblxuIik7CisKKwlpZiAodWwxICYgMHg0MDAwMDApCisJCXByaW50ZigiIC1DUyBzaWduYWxzIGFyZSBhbHdheXMgZHJpdmVuXG4iKTsKKworCWlmICh1bDEgJiAweDIwMDAwKQorCQlwcmludGYoIiAtUG93ZXJEb3duIGFmdGVyICVsdSBjbG9ja3NcbiIsCisJCQkodWwxICYgMHgxRjAwMCkgPj4gNyk7CisKKwlzd2l0Y2ggKHVsMSAmIDB4QzAwMDApCisJeworCWNhc2UgMHhDMDAwMDoKKwkJcHJpbnRmKCIgLU5vIGV4dGVybmFsIG1hc3RlciBwcmVzZW50XG4iKTsKKwkJYnJlYWs7CisJY2FzZSAweDAwMDAwOgorCQlwcmludGYoIiAtOCBiaXQgZXh0ZXJuYWwgbWFzdGVyIHByZXNlbnRcbiIpOworCQlicmVhazsKKwljYXNlIDB4NDAwMDA6CisJCXByaW50ZigiIC0xNiBiaXQgZXh0ZXJuYWwgbWFzdGVyIHByZXNlbnRcbiIpOworCQlicmVhazsKKwljYXNlIDB4ODAwMDA6CisJCXByaW50ZigiIC0zMiBiaXQgZXh0ZXJuYWwgbWFzdGVyIHByZXNlbnRcbiIpOworCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKHVsMSAmIDB4MzAwMDAwKQorCXsKKwljYXNlIDB4MzAwMDAwOgorCQlwcmludGYoIiAtUHJlZmV0Y2g6IElsbGVnYWwgc2V0dGluZyFcbiIpOworCQlicmVhazsKKwljYXNlIDB4MDAwMDAwOgorCQlwcmludGYoIiAtMSBkb3VibGV3b3JkIHByZWZldGNoXG4iKTsKKwkJYnJlYWs7CisJY2FzZSAweDEwMDAwMDoKKwkJcHJpbnRmKCIgLTIgZG91Ymxld29yZHMgcHJlZmV0Y2hcbiIpOworCQlicmVhazsKKwljYXNlIDB4MjAwMDAwOgorCQlwcmludGYoIiAtNCBkb3VibGV3b3JkcyBwcmVmZXRjaFxuIik7CisJCWJyZWFrOworCX0KKwlwdXRjICgnXG4nKTsKKyNlbmRpZgorCXByaW50ZigiQm9hcmQ6IFNvbGlkQ2FyZCBJSUkgJXMgJXMgdmVyc2lvbi5cbiIsCisJCShJU19DQU1FUk9OID8gIkNhbWVyb24iIDogIkV1cm9kZXNpZ24iKSwgQ09ORklHX1NDM19WRVJTSU9OKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcmludFNEUkFNQ29uZmlnKGNoYXIgcmVnLCB1bnNpZ25lZCBsb25nIGNyKQoreworCWNvbnN0IGludCBiaXNpemVbOF09ezQsIDgsIDE2LCAzMiwgNjQsIDEyOCwgMjU2LCAwfTsKKyNpZmRlZiBTQzNfREVCVUdPVVQKKwljb25zdCBjaGFyICpiYXNpemVbOF09CisJCXsiNCIsICI4IiwgIjE2IiwgIjMyIiwgIjY0IiwgIjEyOCIsICIyNTYiLCAiUmVzZXJ2ZWQifTsKKworCXByaW50ZigiU0RSQU0gYmFuayAlZCIscmVnKTsKKworCWlmICghKGNyICYgMHgwMSkpCisJCXB1dHMoIiBkaXNhYmxlZFxuIik7CisJZWxzZSB7CisJCXByaW50ZigiIGF0IDB4JTA4bFgsIHNpemUgJXMgTUIiLGNyICYgMHhGRkMwMDAwMCxiYXNpemVbKGNyJjB4RTAwMDApPj4xN10pOworCQlwcmludGYoIiBtb2RlICVsdVxuIiwoKGNyICYgMHhFMDAwKT4+MTMpKzEpOworCX0KKyNlbmRpZgorCisJaWYgKGNyICYgMHgwMSkKKwkJcmV0dXJuKGJpc2l6ZVsoY3IgJiAweEUwMDAwKSA+PiAxN10pOworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBTQzNfREVCVUdPVVQKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbWJjZltdID0ge21lbV9tYjBjZiwgbWVtX21iMWNmLCBtZW1fbWIyY2YsIG1lbV9tYjNjZn07CisjZW5kaWYKKworbG9uZyBpbnQgaW5pdGRyYW0gKGludCBib2FyZF90eXBlKQoreworCXVuc2lnbmVkIGludCBtZW1zPTA7CisJdW5zaWduZWQgbG9uZyB1bDE7CisKKyNpZmRlZiBTQzNfREVCVUdPVVQKKwl1bnNpZ25lZCBsb25nIHVsMjsKKwlpbnQJaTsKKworCXB1dHMoIlxuU0RSQU0gY29uZmlndXJhdGlvbjpcbiIpOworCisJbXRkY3IgKG1lbWNmZ2EsIG1lbV9tY29wdDEpOworCXVsMSA9IG1mZGNyKG1lbWNmZ2QpOworCisJaWYgKCEodWwxICYgMHg4MDAwMDAwMCkpIHsKKwkJcHV0cygiIENvbnRyb2xsZXIgZGlzYWJsZWRcbiIpOworCQlyZXR1cm4gMDsKKwl9CisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQltdGRjciAobWVtY2ZnYSwgbWJjZltpXSk7CisJCXVsMSA9IG1mZGNyIChtZW1jZmdkKTsKKwkJbWVtcyArPSBwcmludFNEUkFNQ29uZmlnIChpLCB1bDEpOworCX0KKworCW10ZGNyIChtZW1jZmdhLCBtZW1fc2R0cjEpOworCXVsMSA9IG1mZGNyKG1lbWNmZ2QpOworCisJcHJpbnRmICgiVGltaW5nOlxuIC1DQVMgbGF0ZW5jeSAlbHVcbiIsICgodWwxICYgMHgxODAwMDAwKSA+PiAyMykrMSk7CisJcHJpbnRmICgiIC1QcmVjaGFyZ2UgJWx1IChQVEEpIFxuIiwgKCh1bDEgJiAweEMwMDAwKSA+PiAxOCkgKyAxKTsKKwlwcmludGYgKCIgLVIvVyB0byBQcmVjaGFyZ2UgJWx1IChDVFApXG4iLCAoKHVsMSAmIDB4MzAwMDApID4+IDE2KSArIDEpOworCXByaW50ZiAoIiAtTGVhZG9mZiAlbHVcbiIsICgodWwxICYgMHhDMDAwKSA+PiAxNCkgKyAxKTsKKwlwcmludGYgKCIgLUNBUyB0byBSQVMgJWx1XG4iLCAoKHVsMSAmIDB4MUMpID4+IDIpICsgNCk7CisJcHJpbnRmICgiIC1SQVMgdG8gQ0FTICVsdVxuIiwgKCh1bDEgJiAweDMpICsgMSkpOworCXB1dHMgKCJNaXNjOlxuIik7CisJbXRkY3IgKG1lbWNmZ2EsIG1lbV9ydHIpOworCXVsMSA9IG1mZGNyKG1lbWNmZ2QpOworCXByaW50ZiAoIiAtUmVmcmVzaCByYXRlOiAlbHVuc1xuIiwgKHVsMSA+PiAxNikgKiA3KTsKKworCW10ZGNyKG1lbWNmZ2EsbWVtX3BtaXQpOworCXVsMj1tZmRjcihtZW1jZmdkKTsKKworCW10ZGNyKG1lbWNmZ2EsbWVtX21jb3B0MSk7CisJdWwxPW1mZGNyKG1lbWNmZ2QpOworCisJaWYgKHVsMSAmIDB4MjAwMDAwMDApCisJCXByaW50ZigiIC1Qb3dlciBEb3duIGFmdGVyOiAlbHVuc1xuIiwKKwkJCSgodWwyICYgMHhGRkMwMDAwMCkgPj4gMjIpICogNyk7CisJZWxzZQorCQlwdXRzKCIgLVBvd2VyIERvd24gZGlzYWJsZWRcbiIpOworCisJaWYgKHVsMSAmIDB4NDAwMDAwMDApCisJCXByaW50ZigiIC1TZWxmIHJlZnJlc2ggZmVhdHVyZSBhY3RpdmVcbiIpOworCWVsc2UKKwkJcHV0cygiIC1TZWxmIHJlZnJlc2ggZGlzYWJsZWRcbiIpOworCisJaWYgKHVsMSAmIDB4MTAwMDAwMDApCisJCXB1dHMoIiAtRUNDIGVuYWJsZWRcbiIpOworCWVsc2UKKwkJcHV0cygiIC1FQ0MgZGlzYWJsZWRcbiIpOworCisJaWYgKHVsMSAmIDB4ODAwMDAwMCkKKwkJcHV0cygiIC1Vc2luZyByZWdpc3RlcmVkIFNEUkFNXG4iKTsKKworCWlmICghKHVsMSAmIDB4NjAwMDAwMCkpCisJCXB1dHMoIiAtVXNpbmcgMzIgYml0IGRhdGEgd2lkdGhcbiIpOworCWVsc2UKKwkJcHV0cygiIC1JbGxlZ2FsIGRhdGEgd2lkdGghXG4iKTsKKworCWlmICh1bDEgJiAweDQwMDAwMCkKKwkJcHV0cygiIC1FQ0MgZHJpdmVycyBpbmFjdGl2ZVxuIik7CisJZWxzZQorCQlwdXRzKCIgLUVDQyBkcml2ZXJzIGFjdGl2ZVxuIik7CisKKwlpZiAodWwxICYgMHgyMDAwMDApCisJCXB1dHMoIiAtTWVtb3J5IGxpbmVzIGFsd2F5cyBhY3RpdmUgb3V0cHV0c1xuIik7CisJZWxzZQorCQlwdXRzKCIgLU1lbW9yeSBsaW5lcyBvbmx5IGF0IHdyaXRlIGN5Y2xlcyBhY3RpdmUgb3V0cHV0c1xuIik7CisKKwltdGRjciAobWVtY2ZnYSwgbWVtX3N0YXR1cyk7CisJdWwxID0gbWZkY3IgKG1lbWNmZ2QpOworCWlmICh1bDEgJiAweDgwMDAwMDAwKQorCQlwdXRzKCIgLVNEUkFNIENvbnRyb2xsZXIgcmVhZHlcbiIpOworCWVsc2UKKwkJcHV0cygiIC1TRFJBTSBDb250cm9sbGVyIG5vdCByZWFkeVxuIik7CisKKwlpZiAodWwxICYgMHg0MDAwMDAwKQorCQlwdXRzKCIgLVNEUkFNIGluIHNlbGYgcmVmcmVzaCBtb2RlIVxuIik7CisKKwlyZXR1cm4gKG1lbXMgKiAxMDI0ICogMTAyNCk7CisjZWxzZQorCW10ZGNyIChtZW1jZmdhLCBtZW1fbWIwY2YpOworCXVsMSA9IG1mZGNyIChtZW1jZmdkKTsKKwltZW1zID0gcHJpbnRTRFJBTUNvbmZpZyAoMCwgdWwxKTsKKworCW10ZGNyIChtZW1jZmdhLCBtZW1fbWIxY2YpOworCXVsMSA9IG1mZGNyIChtZW1jZmdkKTsKKwltZW1zICs9IHByaW50U0RSQU1Db25maWcgKDEsIHVsMSk7CisKKwltdGRjciAobWVtY2ZnYSwgbWVtX21iMmNmKTsKKwl1bDEgPSBtZmRjcihtZW1jZmdkKTsKKwltZW1zICs9IHByaW50U0RSQU1Db25maWcgKDIsIHVsMSk7CisKKwltdGRjciAobWVtY2ZnYSwgbWVtX21iM2NmKTsKKwl1bDEgPSBtZmRjcihtZW1jZmdkKTsKKwltZW1zICs9IHByaW50U0RSQU1Db25maWcgKDMsIHVsMSk7CisKKwlyZXR1cm4gKG1lbXMgKiAxMDI0ICogMTAyNCk7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgcGNpX3NvbGlkY2FyZDNfZml4dXBfaXJxIChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsIHBjaV9kZXZfdCBkZXYpCit7CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgfCAgICAgICAgICAgICAsLS4gICAgICwtLiAgICAgICAgLC0uICAgICAgICAsLS4gICAgICAgICwtLgorIHwgICBJTlREIyAtLS0tfEJ8LS0tLS18UHwtLiAgICAsLXxQfC0uICAgICwtfCB8LS4gICAgLC18R3wKKyB8ICAgICAgICAgICAgIHxSfCAgICAgfEN8ICBcICAvICB8Q3wgIFwgIC8gIHxFfCAgXCAgLyAgfHJ8CisgfCAgIElOVEMjIC0tLS18SXwtLS0tLXwxfC0uIGAvLS0tfDF8LS4gYC8tLS18dHwtLiBgLy0tLXxhfAorIHwgICAgICAgICAgICAgfER8ICAgICB8MHwgIFwvICAgIHwwfCAgXC8gICAgfGh8ICBcLyAgICB8ZnwKKyB8ICAgSU5UQiMgLS0tLXxHfC0tLS0tfDR8LS4vYC0tLS18NHwtLi9gLS0tLXxlfC0uL2AtLS0tfGl8CisgfCAgICAgICAgICAgICB8RXwgICAgIHwrfCAvXCAgICAgfCt8IC9cICAgICB8cnwgL1wgICAgIHxrfAorIHwgICBJTlRBIyAtLS0tfCB8LS0tLS18IHwtICBgLS0tLXwgfC0gIGAtLS0tfCB8LSAgYC0tLS18IHwKKyB8ICAgICAgICAgICAgIGAtJyAgICAgYC0nICAgICAgICBgLScgICAgICAgIGAtJyAgICAgICAgYC0nCisgfCAgIFNsb3QgICAgICAwICAgICAgIDEwICAgICAgICAgMTEgICAgICAgICAxMiAgICAgICAgIDEzCisgfCAgIFJFUSMgICAgICAgICAgICAgIDAgICAgICAgICAgMSAgICAgICAgICAyICAgICAgICAgICoKKyB8ICAgR05UIyAgICAgICAgICAgICAgMCAgICAgICAgICAxICAgICAgICAgIDIgICAgICAgICAgKgorICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwl1bnNpZ25lZCBjaGFyIGludF9saW5lID0gMHhmZjsKKworCXN3aXRjaCAoUENJX0RFVihkZXYpKSB7CisJY2FzZSAxMDoKKwkJaW50X2xpbmUgPSAzMTsgLyogSU5UIEEgKi8KKwkJUE9TVF9PVVQoMHg0Mik7CisJCWJyZWFrOworCisJY2FzZSAxMToKKwkJaW50X2xpbmUgPSAzMDsgLyogSU5UIEIgKi8KKwkJUE9TVF9PVVQoMHg0Myk7CisJCWJyZWFrOworCisJY2FzZSAxMjoKKwkJaW50X2xpbmUgPSAyOTsgLyogSU5UIEMgKi8KKwkJUE9TVF9PVVQoMHg0NCk7CisJCWJyZWFrOworCisJY2FzZSAxMzoKKwkJaW50X2xpbmUgPSAyODsgLyogSU5UIEQgKi8KKwkJUE9TVF9PVVQoMHg0NSk7CisJCWJyZWFrOworCX0KKwlwY2lfaG9zZV93cml0ZV9jb25maWdfYnl0ZShob3NlLCBkZXYsIFBDSV9JTlRFUlJVUFRfTElORSwgaW50X2xpbmUpOworfQorCitleHRlcm4gdm9pZCBwY2lfNDA1Z3BfaW5pdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpOworZXh0ZXJuIHZvaWQgcGNpXzQwNWdwX2ZpeHVwX2lycShzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsIHBjaV9kZXZfdCBkZXYpOworZXh0ZXJuIHZvaWQgcGNpXzQwNWdwX3NldHVwX2JyaWRnZShzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsIHBjaV9kZXZfdCBkZXYsc3RydWN0IHBjaV9jb25maWdfdGFibGUgKmVudHJ5KTsKKy8qCisgKiBUaGUgZm9sbG93aW5nIHRhYmxlIGlzIHVzZWQgd2hlbiB0aGVyZSBpcyBhIHNwZWNpYWwgbmVlZCB0byBzZXR1cCBhIFBDSSBkZXZpY2UuCisgKiBGb3IgZXZlcnkgUENJIGRldmljZSBmb3VuZCBpbiB0aGlzIHRhYmxlIGlzIGNhbGxlZCB0aGUgZ2l2ZW4gaW5pdCBmdW5jdGlvbiB3aXRoIGdpdmVuCisgKiBwYXJhbWV0ZXJzLiBTbyBuZXZlciBsZXQgYWxsIElEcyBhdCBQQ0lfQU5ZX0lELiBJbiB0aGlzIGNhc2UgYW55IGZvdW5kIGRldmljZSBnZXRzIHRoZSBzYW1lCisgKiBwYXJhbWV0ZXJzIQorICoKKyovCitzdGF0aWMgc3RydWN0IHBjaV9jb25maWdfdGFibGUgcGNpX3NvbGlkY2FyZDNfY29uZmlnX3RhYmxlW10gPQoreworLyogSG9zdCB0byBQQ0kgQnJpZGdlIGRldmljZSAoNDA1R1ApICovCisJeworCQl2ZW5kb3I6IDB4MTAxNCwKKwkJZGV2aWNlOiAweDAxNTYsCisJCWNsYXNzOiBQQ0lfQ0xBU1NfQlJJREdFX0hPU1QsCisJCWJ1czogMCwKKwkJZGV2OiAwLAorCQlmdW5jOiAwLAorCQljb25maWdfZGV2aWNlOiBwY2lfNDA1Z3Bfc2V0dXBfYnJpZGdlCisJfSwKKwl7IH0KK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyB8IHBjaV9pbml0X2JvYXJkIChDYWxsZWQgZnJvbSBwY2lfaW5pdCgpIGluIGRyaXZlcnMvcGNpLmMpCisgfAorIHwgSW5pdCB0aGUgUENJIHBhcnQgb2YgdGhlIFNvbGlkQ2FyZCBJSUkKKyB8CisgfCBQYXJhbXM6CisgKiAtIFBvaW50ZXIgdG8gY3VycmVudCBQQ0kgaG9zZQorICogLSBDdXJyZW50IERldmljZQorICoKKyAqIFJldHVybnMKKyAqIG5vdGhpbmcKKyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3ZvaWQgcGNpX2luaXRfYm9hcmQodm9pZCkKK3sKKwlQT1NUX09VVCgweDQxKTsKKy8qCisgKiB3ZSB3YW50IHRoZSBwdHJzIHRvIFJBTSBub3QgZmxhc2ggKGllIGRvbid0IHVzZSBpbml0IGxpc3QpCisgKi8KKwlob3NlLmZpeHVwX2lycSAgICA9IHBjaV9zb2xpZGNhcmQzX2ZpeHVwX2lycTsKKwlob3NlLmNvbmZpZ190YWJsZSA9IHBjaV9zb2xpZGNhcmQzX2NvbmZpZ190YWJsZTsKKwlwY2lfNDA1Z3BfaW5pdCgmaG9zZSk7Cit9CmRpZmYgLS1naXQgYS9ib2FyZC9zb2xpZGNhcmQzL3NvbGlkY2FyZDMuaCBiL2JvYXJkL3NvbGlkY2FyZDMvc29saWRjYXJkMy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmOTIwZjkKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9zb2xpZGNhcmQzL3NvbGlkY2FyZDMuaApAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMAorICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisvKioKKyAqIGhjV3JpdGVXb3JkIC0gd3JpdGUgYSAxNiBiaXQgdmFsdWUgaW50byB0aGUgVVNCIGNvbnRyb2xsZXIKKyAqIEBiYXNlOiBiYXNlIGFkZHJlc3MgdG8gYWNjZXNzIHRoZSBjaGlwIHJlZ2lzdGVycworICogQHZhbHVlOiAxNiBiaXQgdmFsdWUgdG8gd3JpdGUgaW50byByZWdpc3RlciBAb2Zmc2V0CisgKiBAb2Zmc2V0OiByZWdpc3RlciB0byB3cml0ZSB0aGUgQHZhbHVlIGludG8KKyAqCisgKi8KK3N0YXRpYyB2b2lkIGlubGluZSBoY1dyaXRlV29yZCAodW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBpbnQgdmFsdWUsCisJCQkJdW5zaWduZWQgaW50IG9mZnNldCkKK3sKKwlvdXRfbGUxNiAoKHZvbGF0aWxlIHUxNiopKGJhc2UgKyAyKSwgb2Zmc2V0IHwgMHg4MCk7CisJb3V0X2xlMTYgKCh2b2xhdGlsZSB1MTYqKWJhc2UsIHZhbHVlKTsKK30KKworLyoqCisgKiBoY1dyaXRlRFdvcmQgLSB3cml0ZSBhIDMyIGJpdCB2YWx1ZSBpbnRvIHRoZSBVU0IgY29udHJvbGxlcgorICogQGJhc2U6IGJhc2UgYWRkcmVzcyB0byBhY2Nlc3MgdGhlIGNoaXAgcmVnaXN0ZXJzCisgKiBAdmFsdWU6IDMyIGJpdCB2YWx1ZSB0byB3cml0ZSBpbnRvIHJlZ2lzdGVyIEBvZmZzZXQKKyAqIEBvZmZzZXQ6IHJlZ2lzdGVyIHRvIHdyaXRlIHRoZSBAdmFsdWUgaW50bworICoKKyAqLworCitzdGF0aWMgdm9pZCBpbmxpbmUgaGNXcml0ZURXb3JkICh1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgdmFsdWUsCisJCQkJdW5zaWduZWQgaW50IG9mZnNldCkKK3sKKwlvdXRfbGUxNiAoKHZvbGF0aWxlIHUxNiopKGJhc2UgKyAyKSwgb2Zmc2V0IHwgMHg4MCk7CisJb3V0X2xlMTYgKCh2b2xhdGlsZSB1MTYqKWJhc2UsIHZhbHVlKTsKKwlvdXRfbGUxNiAoKHZvbGF0aWxlIHUxNiopYmFzZSwgdmFsdWUgPj4gMTYpOworfQorCisvKioKKyAqIGhjUmVhZFdvcmQgLSByZWFkIGEgMTYgYml0IHZhbHVlIGZyb20gdGhlIFVTQiBjb250cm9sbGVyCisgKiBAYmFzZTogYmFzZSBhZGRyZXNzIHRvIGFjY2VzcyB0aGUgY2hpcCByZWdpc3RlcnMKKyAqIEBvZmZzZXQ6IHJlZ2lzdGVyIHRvIHJlYWQgZnJvbQorICoKKyAqIFJldHVybnMgdGhlIHJlYWRlZCByZWdpc3RlciB2YWx1ZQorICovCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaW5saW5lIGhjUmVhZFdvcmQgKHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgaW50IG9mZnNldCkKK3sKKwlvdXRfbGUxNiAoKHZvbGF0aWxlIHUxNiopKGJhc2UgKyAyKSwgb2Zmc2V0KTsKKwlyZXR1cm4gKGluX2xlMTYgKCh2b2xhdGlsZSB1MTYqKWJhc2UpKTsKK30KKworLyoqCisgKiBoY1JlYWREV29yZCAtIHJlYWQgYSAzMiBiaXQgdmFsdWUgZnJvbSB0aGUgVVNCIGNvbnRyb2xsZXIKKyAqIEBiYXNlOiBiYXNlIGFkZHJlc3MgdG8gYWNjZXNzIHRoZSBjaGlwIHJlZ2lzdGVycworICogQG9mZnNldDogcmVnaXN0ZXIgdG8gcmVhZCBmcm9tCisgKgorICogUmV0dXJucyB0aGUgcmVhZGVkIHJlZ2lzdGVyIHZhbHVlCisgKi8KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgaW5saW5lIGhjUmVhZERXb3JkICh1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGludCBvZmZzZXQpCit7CisJdW5zaWduZWQgbG9uZyB2YWwsIHZhbDE2OworCisJb3V0X2xlMTYgKCh2b2xhdGlsZSB1MTYqKShiYXNlICsgMiksIG9mZnNldCk7CisJdmFsID0gaW5fbGUxNigodm9sYXRpbGUgdTE2KiliYXNlKTsKKwl2YWwxNiA9IGluX2xlMTYoKHZvbGF0aWxlIHUxNiopYmFzZSk7CisJcmV0dXJuICh2YWwgfCAodmFsMTYgPDwgMTYpKTsKK30KKworLyogY29udHJvbCBhbmQgc3RhdHVzIHJlZ2lzdGVycyBpc3AxMTYxICovCisjZGVmaW5lIEhjUmV2aXNpb24JCTB4MDAKKyNkZWZpbmUgSGNDb250cm9sIAkJMHgwMQorI2RlZmluZSBIY0NvbW1hbmRTdGF0dXMJCTB4MDIKKyNkZWZpbmUgSGNJbnRlcnJ1cHRTdGF0dXMJMHgwMworI2RlZmluZSBIY0ludGVycnVwdEVuYWJsZQkweDA0CisjZGVmaW5lIEhjSW50ZXJydXB0RGlzYWJsZQkweDA1CisjZGVmaW5lIEhjRm1JbnRlcnZhbAkJMHgwRAorI2RlZmluZSBIY0ZtUmVtYWluaW5nCQkweDBFCisjZGVmaW5lIEhjRm1OdW1iZXIJCTB4MEYKKyNkZWZpbmUgSGNMU1RocmVzaG9sZAkJMHgxMQorI2RlZmluZSBIY1JoRGVzY3JpcHRvckEJCTB4MTIKKyNkZWZpbmUgSGNSaERlc2NyaXB0b3JCCQkweDEzCisjZGVmaW5lIEhjUmhTdGF0dXMJCTB4MTQKKyNkZWZpbmUgSGNSaFBvcnRTdGF0dXMxCQkweDE1CisjZGVmaW5lIEhjUmhQb3J0U3RhdHVzMgkJMHgxNgorCisjZGVmaW5lIEhjSGFyZHdhcmVDb25maWd1cmF0aW9uIDB4MjAKKyNkZWZpbmUgSGNETUFDb25maWd1cmF0aW9uCTB4MjEKKyNkZWZpbmUgSGNUcmFuc2ZlckNvdW50ZXIJMHgyMgorI2RlZmluZSBIY3VQSW50ZXJydXB0CQkweDI0CisjZGVmaW5lIEhjdVBJbnRlcnJ1cHRFbmFibGUJMHgyNQorI2RlZmluZSBIY0NoaXBJRAkJMHgyNworI2RlZmluZSBIY1NjcmF0Y2gJCTB4MjgKKyNkZWZpbmUgSGNTb2Z0d2FyZVJlc2V0CQkweDI5CisjZGVmaW5lIEhjSVRMQnVmZmVyTGVuZ3RoCTB4MkEKKyNkZWZpbmUgSGNBVExCdWZmZXJMZW5ndGgJMHgyQgorI2RlZmluZSBIY0J1ZmZlclN0YXR1cwkJMHgyQworI2RlZmluZSBIY1JlYWRCYWNrSVRMMExlbmd0aAkweDJECisjZGVmaW5lIEhjUmVhZEJhY2tJVEwxTGVuZ3RoCTB4MkUKKyNkZWZpbmUgSGNJVExCdWZmZXJQb3J0CQkweDQwCisjZGVmaW5lIEhjQVRMQnVmZmVyUG9ydAkJMHg0MQpkaWZmIC0tZ2l0IGEvYm9hcmQvc29saWRjYXJkMy91LWJvb3QubGRzIGIvYm9hcmQvc29saWRjYXJkMy91LWJvb3QubGRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjZDU2MDEKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9zb2xpZGNhcmQzL3UtYm9vdC5sZHMKQEAgLTAsMCArMSwxNTAgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDAKKyAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworT1VUUFVUX0FSQ0gocG93ZXJwYykKK1NFQVJDSF9ESVIoL2xpYik7IFNFQVJDSF9ESVIoL3Vzci9saWIpOyBTRUFSQ0hfRElSKC91c3IvbG9jYWwvbGliKTsgU0VBUkNIX0RJUigvdXNyL2xvY2FsL3Bvd2VycGMtYW55LWVsZi9saWIpOworLyogRG8gd2UgbmVlZCBhbnkgb2YgdGhlc2UgZm9yIGVsZj8KKyAgIF9fRFlOQU1JQyA9IDA7ICAgICovCitTRUNUSU9OUworeworICAucmVzZXR2ZWMgMHhGRkZGRkZGQyA6CisgIHsKKyAgICAqKC5yZXNldHZlYykKKyAgfSA9IDB4ZmZmZgorCisgIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLworICAuID0gKyBTSVpFT0ZfSEVBREVSUzsKKyAgLmludGVycCA6IHsgKiguaW50ZXJwKSB9CisgIC5oYXNoICAgICAgICAgIDogeyAqKC5oYXNoKQkJfQorICAuZHluc3ltICAgICAgICA6IHsgKiguZHluc3ltKQkJfQorICAuZHluc3RyICAgICAgICA6IHsgKiguZHluc3RyKQkJfQorICAucmVsLnRleHQgICAgICA6IHsgKigucmVsLnRleHQpCQl9CisgIC5yZWxhLnRleHQgICAgIDogeyAqKC5yZWxhLnRleHQpIAl9CisgIC5yZWwuZGF0YSAgICAgIDogeyAqKC5yZWwuZGF0YSkJCX0KKyAgLnJlbGEuZGF0YSAgICAgOiB7ICooLnJlbGEuZGF0YSkgCX0KKyAgLnJlbC5yb2RhdGEgICAgOiB7ICooLnJlbC5yb2RhdGEpIAl9CisgIC5yZWxhLnJvZGF0YSAgIDogeyAqKC5yZWxhLnJvZGF0YSkgCX0KKyAgLnJlbC5nb3QgICAgICAgOiB7ICooLnJlbC5nb3QpCQl9CisgIC5yZWxhLmdvdCAgICAgIDogeyAqKC5yZWxhLmdvdCkJCX0KKyAgLnJlbC5jdG9ycyAgICAgOiB7ICooLnJlbC5jdG9ycykJfQorICAucmVsYS5jdG9ycyAgICA6IHsgKigucmVsYS5jdG9ycykJfQorICAucmVsLmR0b3JzICAgICA6IHsgKigucmVsLmR0b3JzKQl9CisgIC5yZWxhLmR0b3JzICAgIDogeyAqKC5yZWxhLmR0b3JzKQl9CisgIC5yZWwuYnNzICAgICAgIDogeyAqKC5yZWwuYnNzKQkJfQorICAucmVsYS5ic3MgICAgICA6IHsgKigucmVsYS5ic3MpCQl9CisgIC5yZWwucGx0ICAgICAgIDogeyAqKC5yZWwucGx0KQkJfQorICAucmVsYS5wbHQgICAgICA6IHsgKigucmVsYS5wbHQpCQl9CisgIC5pbml0ICAgICAgICAgIDogeyAqKC5pbml0KQl9CisgIC5wbHQgOiB7ICooLnBsdCkgfQorICAudGV4dCAgICAgIDoKKyAgeworICAgIC8qIFdBUk5JTkcgLSB0aGUgZm9sbG93aW5nIGlzIGhhbmQtb3B0aW1pemVkIHRvIGZpdCB3aXRoaW4JKi8KKyAgICAvKiB0aGUgc2VjdG9yIGxheW91dCBvZiBvdXIgZmxhc2ggY2hpcHMhCVhYWCBGSVhNRSBYWFgJKi8KKworICAgIGNwdS9wcGM0eHgvc3RhcnQubwkoLnRleHQpCisgICAgYm9hcmQvc29saWRjYXJkMy9pbml0Lm8JKC50ZXh0KQorICAgIGNwdS9wcGM0eHgva2dkYi5vCSgudGV4dCkKKyAgICBjcHUvcHBjNHh4L3RyYXBzLm8JKC50ZXh0KQorICAgIGNwdS9wcGM0eHgvaW50ZXJydXB0cy5vCSgudGV4dCkKKyAgICBjcHUvcHBjNHh4L3NlcmlhbC5vCSgudGV4dCkKKyAgICBjcHUvcHBjNHh4L2NwdV9pbml0Lm8JKC50ZXh0KQorICAgIGNwdS9wcGM0eHgvc3BlZWQubwkoLnRleHQpCisgICAgY29tbW9uL2RsbWFsbG9jLm8JKC50ZXh0KQorICAgIGxpYl9nZW5lcmljL2NyYzMyLm8JCSgudGV4dCkKKyAgICBsaWJfcHBjL2V4dGFibGUubwkoLnRleHQpCisgICAgbGliX2dlbmVyaWMvemxpYi5vCQkoLnRleHQpCisKKy8qICAgIC4gPSBlbnZfb2Zmc2V0OyovCisvKiAgICBjb21tb24vZW52aXJvbm1lbnQubygudGV4dCkqLworCisgICAgKigudGV4dCkKKyAgICAqKC5maXh1cCkKKyAgICAqKC5nb3QxKQorICB9CisgIF9ldGV4dCA9IC47CisgIFBST1ZJREUgKGV0ZXh0ID0gLik7CisgIC5yb2RhdGEgICAgOgorICB7CisgICAgKigucm9kYXRhKQorICAgICooLnJvZGF0YTEpCisgICAgKigucm9kYXRhLnN0cjEuNCkKKyAgICAqKC5laF9mcmFtZSkKKyAgfQorICAuZmluaSAgICAgIDogeyAqKC5maW5pKSAgICB9ID0wCisgIC5jdG9ycyAgICAgOiB7ICooLmN0b3JzKSAgIH0KKyAgLmR0b3JzICAgICA6IHsgKiguZHRvcnMpICAgfQorCisgIC8qIFJlYWQtd3JpdGUgc2VjdGlvbiwgbWVyZ2VkIGludG8gZGF0YSBzZWdtZW50OiAqLworICAuID0gKC4gKyAweDAwRkYpICYgMHhGRkZGRkYwMDsKKyAgX2Vyb3RleHQgPSAuOworICBQUk9WSURFIChlcm90ZXh0ID0gLik7CisgIC5yZWxvYyAgIDoKKyAgeworICAgICooLmdvdCkKKyAgICBfR09UMl9UQUJMRV8gPSAuOworICAgICooLmdvdDIpCisgICAgX0ZJWFVQX1RBQkxFXyA9IC47CisgICAgKiguZml4dXApCisgIH0KKyAgX19nb3QyX2VudHJpZXMgPSAoX0ZJWFVQX1RBQkxFXyAtIF9HT1QyX1RBQkxFXykgPj4yOworICBfX2ZpeHVwX2VudHJpZXMgPSAoLiAtIF9GSVhVUF9UQUJMRV8pPj4yOworCisgIC5kYXRhICAgIDoKKyAgeworICAgICooLmRhdGEpCisgICAgKiguZGF0YTEpCisgICAgKiguc2RhdGEpCisgICAgKiguc2RhdGEyKQorICAgICooLmR5bmFtaWMpCisgICAgQ09OU1RSVUNUT1JTCisgIH0KKyAgX2VkYXRhICA9ICAuOworICBQUk9WSURFIChlZGF0YSA9IC4pOworCisgIC4gPSAuOworICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOworICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KKyAgX19zdG9wX19fZXhfdGFibGUgPSAuOworCisgIC4gPSBBTElHTigyNTYpOworICBfX2luaXRfYmVnaW4gPSAuOworICAudGV4dC5pbml0IDogeyAqKC50ZXh0LmluaXQpIH0KKyAgLmRhdGEuaW5pdCA6IHsgKiguZGF0YS5pbml0KSB9CisgIC4gPSBBTElHTigyNTYpOworICBfX2luaXRfZW5kID0gLjsKKworICBfX2Jzc19zdGFydCA9IC47CisgIC5ic3MgICAgICAgOgorICB7CisgICAqKC5zYnNzKSAqKC5zY29tbW9uKQorICAgKiguZHluYnNzKQorICAgKiguYnNzKQorICAgKihDT01NT04pCisgIH0KKyAgX2VuZCA9IC4gOworICBQUk9WSURFIChlbmQgPSAuKTsKK30KZGlmZiAtLWdpdCBhL2JvYXJkL3VjMTAxL3VjMTAxLmMgYi9ib2FyZC91YzEwMS91YzEwMS5jCmluZGV4IDkwNjI0ZTUuLmI4MDM1ODUgMTAwNjQ0Ci0tLSBhL2JvYXJkL3VjMTAxL3VjMTAxLmMKKysrIGIvYm9hcmQvdWMxMDEvdWMxMDEuYwpAQCAtNjUsMTIgKzY1LDEwIEBACiAjZGVmaW5lIEdQX1NJTVBfU0VUX08obiwgdikgIChwZ3Bpby0+c2ltcGxlX2R2byA9IHYgPyBcCiAJCQkJKHBncGlvLT5zaW1wbGVfZHZvIHwgKDEgPDwgbikpIDogXAogCQkJCShwZ3Bpby0+c2ltcGxlX2R2byAmIH4oMSA8PCBuKSkgKQotCQkJCQorCiAjZGVmaW5lIEdQX1NJTVBfR0VUX08obikgICgocGdwaW8tPnNpbXBsZV9kdm8gPj4gbikgJiAxKQogI2RlZmluZSBHUF9TSU1QX0dFVF9JKG4pICAoKHBncGlvLT5zaW1wbGVfaXZhbCA+PiBuKSAmIDEpCiAKLQotCiAjZGVmaW5lIEdQX1NJTlRfU0VUX08obiwgdikgIChwZ3Bpby0+c2ludF9kdm8gPSB2ID8gXAogCQkJCShwZ3Bpby0+c2ludF9kdm8gfCAoMSA8PCBuKSkgOiBcCiAJCQkJKHBncGlvLT5zaW50X2R2byAmIH4oMSA8PCBuKSkgKQpAQCAtMjI4LDcgKzIyNiw3IEBACiAKIHN0YXRpYyB2b2lkIGluaXRfcG9ydHMgKHZvaWQpCiB7Ci0Jdm9sYXRpbGUgc3RydWN0IG1wYzV4eHhfZ3BpbyAqcGdwaW8gPSAKKwl2b2xhdGlsZSBzdHJ1Y3QgbXBjNXh4eF9ncGlvICpwZ3BpbyA9CiAJCShzdHJ1Y3QgbXBjNXh4eF9ncGlvICopTVBDNVhYWF9HUElPOwogCiAJR1BfU0lNUF9FTkFCTEVfSShHUElPX1VTQl84KTsJLyogSEVYIEJpdCAzICovCkBAIC0zNzEsNCArMzY5LDMgQEAKIAkqKHZ1X2xvbmcgKilNUEM1WFhYX0dQVDBfRU5BQkxFID0gR1BUX09VVF8wOwogfQogI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2NwdS9tcGM4eHgvc2VyaWFsLmMgYi9jcHUvbXBjOHh4L3NlcmlhbC5jCmluZGV4IGM4Y2FhNzkuLjlkMGZjNmIgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4eHgvc2VyaWFsLmMKKysrIGIvY3B1L21wYzh4eC9zZXJpYWwuYwpAQCAtMjI5LDE1ICsyMjksMTUgQEAKIAogI2lmZGVmIENGR19TUEMxOTIwX1NNQzFfQ0xLNAogCS8qIGNsb2NrIHNvdXJjZSBpcyBQTEQgKi8KLQkKKwogCS8qIHNldCBmcmVxIHRvIDE5MjAwIEJhdWQgKi8KIAkqKCh2b2xhdGlsZSB1Y2hhciAqKSBDRkdfU1BDMTkyMF9QTERfQkFTRSs2KSA9IDB4MzsKIAkvKiBjb25maWd1cmUgY2xrNCBhcyBpbnB1dCAqLwogCWltLT5pbV9pb3BvcnQuaW9wX3BkcGFyIHw9IDB4ODAwOwogCWltLT5pbV9pb3BvcnQuaW9wX3BkZGlyICY9IH4weDgwMDsKLQkKKwogCWNwLT5jcF9zaW1vZGUgPSAweDAwMDA7Ci0gICAgICAgIGNwLT5jcF9zaW1vZGUgfD0gMHg3MDAwOworCWNwLT5jcF9zaW1vZGUgfD0gMHg3MDAwOwogI2Vsc2UKIAkvKiBTZXQgdXAgdGhlIGJhdWQgcmF0ZSBnZW5lcmF0b3IgKi8KIAlzbWNfc2V0YnJnICgpOwpkaWZmIC0tZ2l0IGEvY3B1L3BwYzR4eC80MDVncF9wY2kuYyBiL2NwdS9wcGM0eHgvNDA1Z3BfcGNpLmMKaW5kZXggOWI3MTFlMi4uMzhhMTMwNSAxMDA2NDQKLS0tIGEvY3B1L3BwYzR4eC80MDVncF9wY2kuYworKysgYi9jcHUvcHBjNHh4LzQwNWdwX3BjaS5jCkBAIC0zODAsNyArMzgwLDcgQEAKIAlwY2lfaG9zZV93cml0ZV9jb25maWdfZHdvcmQoaG9zZSwgZGV2LCBQQ0lfQ09NTUFORCwgY21kc3RhdCk7CiB9CiAKLSNpZiAhKGRlZmluZWQoQ09ORklHX1BJUDQwNSkgfHwgZGVmaW5lZCAoQ09ORklHX01JUDQwNSkpCisjaWYgIShkZWZpbmVkKENPTkZJR19QSVA0MDUpIHx8IGRlZmluZWQgKENPTkZJR19NSVA0MDUpKSB8fCBkZWZpbmVkIChDT05GSUdfU09MSURDQVJEMykKIAogLyoKICAqQXMgaXMgdGhlc2UgZnVuY3RzIGdldCBjYWxsZWQgb3V0IG9mIGZsYXNoIE5vdCBhIGhvcnJpYmxlCkBAIC00MDYsNiArNDA2LDcgQEAKIAljb25maWdfdGFibGU6IHBjaV80MDVncF9jb25maWdfdGFibGUsCiB9OwogCisjaWZuZGVmIENPTkZJR19TT0xJRENBUkQzCiB2b2lkIHBjaV9pbml0X2JvYXJkKHZvaWQpCiB7CiAJLyp3ZSB3YW50IHRoZSBwdHJzIHRvIFJBTSBub3QgZmxhc2ggKGllIGRvbid0IHVzZSBpbml0IGxpc3QpKi8KQEAgLTQxMyw2ICs0MTQsNyBAQAogCWhvc2UuY29uZmlnX3RhYmxlID0gcGNpXzQwNWdwX2NvbmZpZ190YWJsZTsKIAlwY2lfNDA1Z3BfaW5pdCgmaG9zZSk7CiB9CisjZW5kaWYKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2NwdS9wcGM0eHgvY3B1X2luaXQuYyBiL2NwdS9wcGM0eHgvY3B1X2luaXQuYwppbmRleCBkYjA1NTliLi5lMmFhODY3IDEwMDY0NAotLS0gYS9jcHUvcHBjNHh4L2NwdV9pbml0LmMKKysrIGIvY3B1L3BwYzR4eC9jcHVfaW5pdC5jCkBAIC0yMTksNiArMjE5LDEwIEBACiB2b2lkCiBjcHVfaW5pdF9mICh2b2lkKQogeworI2lmIGRlZmluZWQoQ09ORklHX1dBVENIRE9HKQorCXVuc2lnbmVkIGxvbmcgdmFsOworI2VuZGlmCisKICNpZiBkZWZpbmVkKENPTkZJR180MDVFUCkKIAkvKgogCSAqIEdQSU8wIHNldHVwIChzZWxlY3QgR1BJTyBvciBhbHRlcm5hdGUgZnVuY3Rpb24pCkBAIC0zMDksOSArMzEzLDEyIEBACiAJbXRlYmMocGI3Y3IsIENGR19FQkNfUEI3Q1IpOwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19XQVRDSERPRykKLQl1bnNpZ25lZCBsb25nIHZhbDsKKyNpZiBkZWZpbmVkIChDT05GSUdfU09MSURDQVJEMykKKwltdGViYyhlcGNyLCAweGI4NGVmMDAwKTsKKwkqKHVuc2lnbmVkIGxvbmcgKikweDc5MDAwMDgwID0gMHgwMDAxOworI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19XQVRDSERPRykKIAl2YWwgPSBtZnNwcih0Y3IpOwogI2lmIGRlZmluZWQoQ09ORklHXzQ0MEVQKSB8fCBkZWZpbmVkKENPTkZJR180NDBHUikKIAl2YWwgfD0gMHhiODAwMDAwMDsgICAgICAvKiBnZW5lcmF0ZSBzeXN0ZW0gcmVzZXQgYWZ0ZXIgMS4zNCBzZWNvbmRzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NmaV9mbGFzaC5jIGIvZHJpdmVycy9jZmlfZmxhc2guYwppbmRleCAyNjk5Y2NlLi44ZGM0NDk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NmaV9mbGFzaC5jCisrKyBiL2RyaXZlcnMvY2ZpX2ZsYXNoLmMKQEAgLTQwLDYgKzQwLDEwIEBACiAjaW5jbHVkZSA8ZW52aXJvbm1lbnQuaD4KICNpZmRlZglDRkdfRkxBU0hfQ0ZJX0RSSVZFUgogCisjaWYgZGVmaW5lZChDT05GSUdfU09MSURDQVJEMykKKyNkZWZpbmUgX19MSVRUTEVfRU5ESUFOCisjZW5kaWYKKwogLyoKICAqIFRoaXMgZmlsZSBpbXBsZW1lbnRzIGEgQ29tbW9uIEZsYXNoIEludGVyZmFjZSAoQ0ZJKSBkcml2ZXIgZm9yIFUtQm9vdC4KICAqIFRoZSB3aWR0aCBvZiB0aGUgcG9ydCBhbmQgdGhlIHdpZHRoIG9mIHRoZSBjaGlwcyBhcmUgZGV0ZXJtaW5lZCBhdCBpbml0aWFsaXphdGlvbi4KQEAgLTg2Nyw3ICs4NzEsNyBAQAogCQljd29yZC0+YyA9IGM7CiAJCWJyZWFrOwogCWNhc2UgRkxBU0hfQ0ZJXzE2QklUOgotI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKSAmJiAhZGVmaW5lZChDT05GSUdfU09MSURDQVJEMykKIAkJdyA9IGM7CiAJCXcgPDw9IDg7CiAJCWN3b3JkLT53ID0gKGN3b3JkLT53ID4+IDgpIHwgdzsKQEAgLTEzNTksNyArMTM2Myw2IEBACiAJY3RsYWRkci5jcCA9IGZsYXNoX21ha2VfYWRkciAoaW5mbywgMCwgMCk7CiAJY3B0ci5jcCA9ICh1Y2hhciAqKSBkZXN0OwogCi0KIAkvKiBDaGVjayBpZiBGbGFzaCBpcyAoc3VmZmljaWVudGx5KSBlcmFzZWQgKi8KIAlzd2l0Y2ggKGluZm8tPnBvcnR3aWR0aCkgewogCWNhc2UgRkxBU0hfQ0ZJXzhCSVQ6CkBAIC0xNTMxLDQgKzE1MzQsOSBAQAogCX0KIH0KICNlbmRpZiAvKiBDRkdfRkxBU0hfVVNFX0JVRkZFUl9XUklURSAqLworCisjaWYgZGVmaW5lZChDT05GSUdfU09MSURDQVJEMykKKyN1bmRlZiBfX0xJVFRMRV9FTkRJQU4KKyNlbmRpZgorCiAjZW5kaWYgLyogQ0ZHX0ZMQVNIX0NGSSAqLwpkaWZmIC0tZ2l0IGEvZHR0L2xtODEuYyBiL2R0dC9sbTgxLmMKaW5kZXggYzgzYTNjZC4uMDNiYzUzZCAxMDA2NDQKLS0tIGEvZHR0L2xtODEuYworKysgYi9kdHQvbG04MS5jCkBAIC0xMzQsOCArMTM0LDggQEAKIH0gLyogZHR0X2luaXQoKSAqLwogCiAjZGVmaW5lIFRFTVBfRlJPTV9SRUcodGVtcCkgXAotICAgKCh0ZW1wKTwyNTY/KCgoKHRlbXApJjB4MWZlKSA+PiAxKSAqIDEwKSAgICAgICsgKCh0ZW1wKSAmIDEpICogNTogIFwKLSAgICAgICAgICAgICAgICgoKCh0ZW1wKSYweDFmZSkgPj4gMSkgLTI1NSkgKiAxMCAtICgodGVtcCkgJiAxKSAqIDUpICBcCisgICAoKHRlbXApPDI1Nj8oKCgodGVtcCkmMHgxZmUpID4+IDEpICogMTApCSArICgodGVtcCkgJiAxKSAqIDU6ICBcCisJICAgICAgICgoKCh0ZW1wKSYweDFmZSkgPj4gMSkgLTI1NSkgKiAxMCAtICgodGVtcCkgJiAxKSAqIDUpICBcCiAKIGludCBkdHRfZ2V0X3RlbXAoaW50IHNlbnNvcikKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9zb2xpZGNhcmQzLmggYi9pbmNsdWRlL2NvbmZpZ3Mvc29saWRjYXJkMy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2N2NiYTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NvbmZpZ3Mvc29saWRjYXJkMy5oCkBAIC0wLDAgKzEsNTM3IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA3CisgKiBIZWlrbyBTY2hvY2hlciwgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgPGhzQGRlbnguZGU+LgorICoKKyAqIEZyb206CisgKiAoQykgQ29weXJpZ2h0IDIwMDMKKyAqIEp1ZXJnZW4gQmVpc2VydCwgRXVyb0Rlc2lnbiBlbWJlZGRlZCB0ZWNobm9sb2dpZXMsIGpiZWlzZXJ0QGV1cm9kc24uZGUKKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaWZuZGVmIF9fQ09ORklHX0gKKyNkZWZpbmUgX19DT05GSUdfSAorCisjdW5kZWYgVVNFX1ZHQV9HUkFQSElDUworCisvKiBNZW1vcnkgTWFwCisweDAwMDAwMDAwIC4uLi4gMHgwM0ZGRkZGRiAtPiBSQU0gKHVwIHRvIDEyOE1pQikKKzB4NzQwMDAwMDAgLi4uLiAweDc0MEZGRkZGIC0+IENTIzYKKzB4NzQxMDAwMDAgLi4uLiAweDc0MUZGRkZGIC0+IENTIzcKKzB4NzQyMDAwMDAgLi4uLiAweDc0MkZGRkZGIC0+IENTNCMgaWYgbm8gaW50ZXJuYWwgVVNCCisweDc0MzAwMDAwIC4uLi4gMHg3NDNGRkZGRiAtPiBDUzUjIGlmIG5vIGJvb3N0ZWQgSURFCisweDc3QzAwMDAwIC4uLi4gMHg3N0NGRkZGRiAtPiBDUzQjIFVTQiBIQyAoMSBNaUIpCisweDc3RDAwMDAwIC4uLi4gMHg3N0RGRkZGRiAtPiBDUzEjIE5BTkQtRmxhc2ggKDEgTWlCKQorMHg3ODAwMDAwMCAuLi4uIDB4NzhGRkZGRkYgLT4gQ1MyIyBJU0EtQnVzIFNwZWljaGVyenVncmlmZiAoMTYgTWlCKQorMHg3OTAwMDAwMCAuLi4uIDB4NzkwMEZGRkYgLT4gQ1MyIyBJU0EtQnVzIElPLVp1Z3JpZmYgKDE2IE1pQiwgbWFwcGVkOiA2NGtpQikKKzB4NzkwMTAwMDAgLi4uLiAweDc5RkZGRkZGIC0+IENTMiMgSVNBLUJ1cyBJTy1adWdyaWZmIChtaXJyb3JlZCkKKzB4N0EwMDAwMDAgLi4uLiAweDdBMEZGRkZGIC0+IENTNSMgSURFIGVtdWxhdGlvbiAoMU1pQikKKworMHg4MDAwMDAwMCAuLi4uIDB4OUZGRkZGRkYgLT4gUENJLUJ1cyBTcGVpY2hlcnp1Z3JpZmYgKDUxMk1pQiwgbWFwcGVkOiAxOjEpCisweEEwMDAwMDAwIC4uLi4gMHhCRkZGRkZGRiAtPiBQQ0ktQnVzIFNwZWljaGVyenVncmlmZiAoNTEyTWlCLCBtYXBwZWQ6IDB4MDAwMDAwMDAuLi4weDFGRkZGRkZGKQorMHhFODAwMDAwMCAuLi4uIDB4RTgwMEZGRkYgLT4gUENJLUJ1cyBJTy1adWdyaWZmICg2NGtpQiwgdHJhbnNsYXRlZCB0byBQQ0k6IDB4MDAwMC4uLjB4RkZGRikKKzB4RTg4MDAwMDAgLi4uLiAweEVCRkZGRkZGIC0+IFBDSS1CdXMgSU8tWnVncmlmZiAoNTZNaUIsIHRyYW5zbGF0ZWQgdG8gUENJOiAweDAwODAwMDAwLi4uMHgzRkZGRkZGKQorMHhFRUQwMDAwMCAuLi4uIDB4RUVEMDAwMDMgLT4gUENJLUJ1cworMHhFRjQwMDAwMCAuLi4uIDB4RUY0MDAwM0YgLT4gUENJLUJ1cyBMb2NhbCBDb25maWd1cmF0aW9uIFJlZ2lzdGVycworMHhFRjQwMDAzRiAuLi4uIDB4RUY1RkZGRkYgLT4gcmVzZXJ2ZWQKKzB4RUY2MDAwMDAgLi4uLiAweEVGRkZGRkZGIC0+IDQwNUdQIGludGVybmFsIERldmljZXMgKDEwIE1pQikKKzB4RjAwMDAwMDAgLi4uLiAweEYwMUZGRkZGIC0+IEZsYXNoLVJPTSAoMiBNaUIpCisweEYwMjAwMDAwIC4uLi4gMHhGN0ZGRkZGRiAtPiBmcmVlIGZvciBmbGFzaCBkZXZpY2VzCisweEY4MDAwMDAwIC4uLi4gMHhGODAwMEZGRiAtPiBPbkNoaXBNZW1vcnkgKDRraUIpCisweEY4MDAxMDAwIC4uLi4gMHhGRkRGRkZGRiAtPiBmcmVlIGZvciBmbGFzaCBkZXZpY2VzCisweEZGRTAwMDAwIC4uLi4gMHhGRkZGRkZGRiAtPiBCT09ULVJPTSAoMiBNaUIpCisqLworCisjZGVmaW5lIENPTkZJR19TT0xJRENBUkQzCTEKKyNkZWZpbmUgQ09ORklHXzR4eAkxCisjZGVmaW5lIENPTkZJR180MDVHUAkxCisKKyNkZWZpbmUgQ09ORklHX0JPQVJEX0VBUkxZX0lOSVRfRgkxCisKKy8qCisgKiBkZWZpbmUgSURFX1VTRVNfSVNBX0VNVUxBVElPTiBmb3Igc2xvd2VyIElERSBhY2Nlc3MgaW4gdGhlIElTQS1JTyBhZGRyZXNzIHJhbmdlCisgKiBJZiB1bmRlZmVkLCBJREUgYWNjZXNzIHVzZXMgYSBzZXBlcmF0IGVtdWxhdGlvbiB3aXRoIGhpZ2hlciBhY2Nlc3Mgc3BlZWQKKyAqIENvbnNpZGVyIHRvIGluZm9ybSB5b3VyIExpbnV4IElERSBkcml2ZXIgYWJvdXQgdGhlIGRpZmZlcmVudCBhZGRyZXNzZXMhCisgKiBJREVfVVNFU19JU0FfRU1VTEFUSU9OIGlzIG9ubHkgdXNlZCBpZiB5b3VyIENPTkZJR19DT01NQU5EUyBtYWNybyBpbmNsdWRlcyB0aGUgQ0ZHX0NNRF9JREUgbWFjcm8hCisgKi8KKyNkZWZpbmUgSURFX1VTRVNfSVNBX0VNVUxBVElPTgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBTZXJpYWwgUG9ydAorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgQ09ORklHX1NFUklBTF9NVUxUSQorI3VuZGVmIENPTkZJR19TRVJJQUxfU09GVFdBUkVfRklGTworLyoKKyAqIGRlZmluZSBDT05GSUdfUE9XRVJfRE9XTiBpZiB5b3VyIGNwdSBzaG91bGQgcG93ZXIgZG93biB3aGlsZSB3YWl0aW5nIGZvciB5b3VyIGlucHV0CisgKiBXb3JrcyBvbmx5LCBpZiB5b3UgaGF2ZSBlbmFibGVkIHRoZSBDT05GSUdfU0VSSUFMX1NPRlRXQVJFX0ZJRk8gZmVhdHVyZQorICovCisjaWYgQ09ORklHX1NFUklBTF9TT0ZUV0FSRV9GSUZPCisgI2RlZmluZSBDT05GSUdfUE9XRVJfRE9XTgorI2VuZGlmCisKKy8qCisgKiBkZWZpbmUgQ09ORklHX1NZU19DTEtfRlJFUSB0byB5b3VyIGJhc2UgY3J5c3RhbCBjbG9jayBpbiBIegorICovCisjZGVmaW5lIENPTkZJR19TWVNfQ0xLX0ZSRVEJMzMzMzMzMzMKKworLyoKKyAqIGRlZmluZSBDT05GSUdfQkFVRFJBVEUgdG8gdGhlIGJhdWRyYXRlIHZhbHVlIHlvdSB3YW50IHRvIHVzZSBhcyBkZWZhdWx0CisgKi8KKyNkZWZpbmUgQ09ORklHX0JBVURSQVRFCQkxMTUyMDAKKyNkZWZpbmUgQ09ORklHX0JPT1RERUxBWQkzIC8qIGF1dG9ib290IGFmdGVyIDMgc2Vjb25kcwkgICAgICAqLworCisjZGVmaW5lIENPTkZJR19TSUxFTlRfQ09OU09MRQkxCS8qIGVuYWJsZSBzaWxlbnQgc3RhcnR1cCAqLworI2RlZmluZSBDRkdfREVWSUNFX05VTExERVYJMQkvKiBpbmNsdWRlIG51bGxkZXYgZGV2aWNlCSovCisKKyNpZiAxCS8qIGZlZWwgZnJlZSB0byBkaXNhYmxlIGZvciBkZXZlbG9wbWVudCAqLworI2RlZmluZSBDT05GSUdfQVVUT0JPT1RfS0VZRUQJCS8qIEVuYWJsZSBwYXNzd29yZCBwcm90ZWN0aW9uCSovCisjZGVmaW5lIENPTkZJR19BVVRPQk9PVF9QUk9NUFQJCSJcblNDMyAtIGJvb3RpbmcuLi4gc3RvcCB3aXRoIFNcbiIKKyNkZWZpbmUgQ09ORklHX0FVVE9CT09UX0RFTEFZX1NUUgkiUyIJLyogMXN0ICJwYXNzd29yZCIJKi8KKyNlbmRpZgorCisvKgorICogZGVmaW5lIENPTkZJR19CT09UQ09NTUFORCB0byB0aGUgYXV0b2Jvb3QgY29tbWFuZHMuIFRoZXkgd2lsbCBydW5uaW5nIGFmdGVyCisgKiB0aGUgQ09ORklHX0JPT1RERUxBWSBkZWxheSB0byBib290IHlvdXIgbWFjaGluZQorICovCisjZGVmaW5lIENPTkZJR19CT09UQ09NTUFORAkiYm9vdHA7ZGNhY2hlIG9uO2Jvb3RtIgorCisvKgorICogZGVmaW5lIENPTkZJR19CT09UQVJHUyB0byB0aGUgZGVmYXVsdCBrZXJuZWwgcGFyYW1ldGVycy4gVGhleSB3aWxsIHVzZWQgaWYgeW91IGRvbid0CisgKiBzZXQgZGlmZmVyZW50IHZhbHVlcyBhdCB0aGUgdS1ib290IHByb21wdAorICovCisjaWZkZWYgVVNFX1ZHQV9HUkFQSElDUworICNkZWZpbmUgQ09ORklHX0JPT1RBUkdTCSJyb290PS9kZXYvbmZzIHJ3IGlwPWJvb3RwIG5mc3Jvb3Q9L3RmdHBib290L3NvbGlkY2FyZDNyZSIKKyNlbHNlCisgI2RlZmluZSBDT05GSUdfQk9PVEFSR1MJImNvbnNvbGU9dHR5UzAsMTE1MjAwIHJvb3Q9L2Rldi9uZnMgcncgaXA9Ym9vdHAiCisjZW5kaWYKKy8qCisgKiBJcyB0aGUgVVNCIGhvc3QgY29udHJvbGxlciBhc3NlbWJsZWQ/IElmIHllcyBkZWZpbmUgQ09ORklHX0lTUDExNjFfUFJFU0VOVAorICogVGhpcyByZXNlcnZlcyBtZW1vcnkgYmFuayAjNCBmb3IgdGhpcyBwdXJwb3NlCisgKi8KKyN1bmRlZiBDT05GSUdfSVNQMTE2MV9QUkVTRU5UCisKKyN1bmRlZiBDT05GSUdfTE9BRFNfRUNITyAgIC8qIG5vIGVjaG8gb24gZm9yIHNlcmlhbCBkb3dubG9hZAkqLworI2RlZmluZSBDRkdfTE9BRFNfQkFVRF9DSEFOR0UJMQkvKiBhbGxvdyBiYXVkcmF0ZSBjaGFuZ2UJKi8KKworI2RlZmluZSBDT05GSUdfTkVUX01VTFRJCisvKiAjZGVmaW5lIENPTkZJR19FRVBSTzEwMF9TUk9NX1dSSVRFICovCisvKiAjZGVmaW5lIENPTkZJR19TSE9XX01BQyAqLworI2RlZmluZSBDT05GSUdfRUVQUk8xMDAKKyNkZWZpbmUgQ09ORklHX01JSSAxCQkJLyogYWRkIDQwNUdQIE1JSSBQSFkgbWFuYWdlbWVudAkJKi8KKyNkZWZpbmUgQ09ORklHX1BIWV9BRERSIDEJLyogdGhlIGNvbm5lY3RlZCBQaHkgZGVmYXVsdHMgdG8gYWRkcmVzcyAxICovCisKKyNkZWZpbmUgQ09ORklHX0NPTU1BTkRTCSAgXAorCSAgIChDT05GSUdfQ01EX0RGTAl8IFwKKwkJCQlDRkdfQ01EX1BDSQl8IFwKKwkJCQlDRkdfQ01EX0lSUQl8IFwKKwkJCQlDRkdfQ01EX05FVCB8IFwKKwkJCQlDRkdfQ01EX01JSSB8IFwKKwkJCQlDRkdfQ01EX1BJTkcgfCBcCisJCQkJQ0ZHX0NNRF9OQU5EIHwgXAorCQkJCUNGR19DTURfSTJDIHwgXAorCQkJCUNGR19DTURfSURFIHwgXAorCQkJCUNGR19DTURfREFURSB8IFwKKwkJCQlDRkdfQ01EX0RIQ1AJfCBcCisJCQkJQ0ZHX0NNRF9DQUNIRSAgfCBcCisJCQkJQ0ZHX0NNRF9FTEYJKQorCisvKiB0aGlzIG11c3QgYmUgaW5jbHVkZWQgQUZURVIgdGhlIGRlZmluaXRpb24gb2YgQ09ORklHX0NPTU1BTkRTIChpZiBhbnkpICovCisjaW5jbHVkZSA8Y21kX2NvbmZkZWZzLmg+CisKKyN1bmRlZiBDT05GSUdfV0FUQ0hET0cJCQkvKiB3YXRjaGRvZyBkaXNhYmxlZAkJKi8KKworLyoKKyAqIE1pc2NlbGxhbmVvdXMgY29uZmlndXJhYmxlIG9wdGlvbnMKKyAqLworI2RlZmluZSBDRkdfTE9OR0hFTFAJMQkJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkJCSovCisjZGVmaW5lIENGR19QUk9NUFQJIlNDMz4gIgkvKiBNb25pdG9yIENvbW1hbmQgUHJvbXB0CSovCisjZGVmaW5lCUNGR19DQlNJWkUJMjU2CQkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZQkqLworCisjZGVmaW5lIENGR19QQlNJWkUgKENGR19DQlNJWkUrc2l6ZW9mKENGR19QUk9NUFQpKzE2KSAvKiBQcmludCBCdWZmZXIgU2l6ZSAqLworCisjZGVmaW5lIENGR19NQVhBUkdTCTE2CQkvKiBtYXggbnVtYmVyIG9mIGNvbW1hbmQgYXJncwkqLworI2RlZmluZSBDRkdfQkFSR1NJWkUJQ0ZHX0NCU0laRQkvKiBCb290IEFyZ3VtZW50IEJ1ZmZlciBTaXplCSovCisKKyNkZWZpbmUgQ0ZHX01FTVRFU1RfU1RBUlQJMHgwNDAwMDAwCS8qIG1lbXRlc3Qgd29ya3Mgb24JKi8KKyNkZWZpbmUgQ0ZHX01FTVRFU1RfRU5ECQkweDBDMDAwMDAJLyogNCAuLi4gMTIgTUIgaW4gRFJBTQkqLworCisvKgorICogSWYgQ0ZHX0VYVF9TRVJJQUxfQ0xPQ0ssIHRoZW4gdGhlIFVBUlQgZGl2aXNvciBpcyAxLgorICogSWYgQ0ZHXzQwNV9VQVJUX0VSUkFUQV81OSwgdGhlbiBVQVJUIGRpdmlzb3IgaXMgMzEuCisgKiBPdGhlcndpc2UsIFVBUlQgZGl2aXNvciBpcyBkZXRlcm1pbmVkIGJ5IENQVSBDbG9jayBhbmQgQ0ZHX0JBU0VfQkFVRCB2YWx1ZS4KKyAqIFRoZSBMaW51eCBCQVNFX0JBVUQgZGVmaW5lIHNob3VsZCBtYXRjaCB0aGlzIGNvbmZpZ3VyYXRpb24uCisgKiAgICBiYXNlQmF1ZCA9IGNwdUNsb2NrLyh1YXJ0RGl2aXNvcioxNikKKyAqIElmIENGR180MDVfVUFSVF9FUlJBVEFfNTkgYW5kIDIwME1IeiBDUFUgY2xvY2ssCisgKiBzZXQgTGludXggQkFTRV9CQVVEIHRvIDQwMzIwMC4KKyAqCisgKiBDb25zaWRlciB0aGUgT1BCIGNsb2NrISBJZiBpdCBnZXQgbG93ZXIgdGhlIEJBU0VfQkFVRCBtdXN0IGJlIGxvd2VyIHRvCisgKiAoc2VlIDQwNUdQIGRhdGFzaGVldCBmb3IgZGVzY3JpdHBpb24pCisgKi8KKyN1bmRlZglDRkdfRVhUX1NFUklBTF9DTE9DSwkJLyogZXh0ZXJuYWwgc2VyaWFsIGNsb2NrICovCisjdW5kZWYJQ0ZHXzQwNV9VQVJUX0VSUkFUQV81OQkJLyogNDA1R1AvQ1IgUmV2LiBEIHNpbGljb24gKi8KKyNkZWZpbmUgQ0ZHX0JBU0VfQkFVRAkJOTIxNjAwCS8qIGludGVybmFsIGNsb2NrICovCisKKy8qIFRoZSBmb2xsb3dpbmcgdGFibGUgaW5jbHVkZXMgdGhlIHN1cHBvcnRlZCBiYXVkcmF0ZXMgKi8KKyNkZWZpbmUgQ0ZHX0JBVURSQVRFX1RBQkxFICBcCisgICAgezMwMCwgNjAwLCAxMjAwLCAyNDAwLCA0ODAwLCA5NjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLCAxMTUyMDAsIDIzMDQwMH0KKworI2RlZmluZSBDRkdfTE9BRF9BRERSCQkweDEwMDAwMDAJLyogZGVmYXVsdCBsb2FkIGFkZHJlc3MgKi8KKyNkZWZpbmUgQ0ZHX0VYVEJESU5GTwkJMQkvKiBUbyB1c2UgZXh0ZW5kZWQgYm9hcmRfaW50byAoYmRfdCkgKi8KKworI2RlZmluZQlDRkdfSFoJCQkxMDAwCS8qIGRlY3JlbWVudGVyIGZyZXE6IDEgbXMgdGlja3MJKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSUlDIHN0dWZmCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNkZWZpbmUgIENPTkZJR19IQVJEX0kyQwkJLyogSTJDIHdpdGggaGFyZHdhcmUgc3VwcG9ydAkqLworI3VuZGVmCUNPTkZJR19TT0ZUX0kyQwkJCS8qIEkyQyBiaXQtYmFuZ2VkCQkqLworCisjZGVmaW5lIEkyQ19JTklUCisjZGVmaW5lIEkyQ19BQ1RJVkUgMAorI2RlZmluZSBJMkNfVFJJU1RBVEUgMAorCisjZGVmaW5lIENGR19JMkNfU1BFRUQJCTEwMDAwMAkvKiB1c2UgdGhlIHN0YW5kYXJkIDEwMGtIeiBzcGVlZCAqLworI2RlZmluZSBDRkdfSTJDX1NMQVZFCQkweDdGCQkvKiBtYXNrIHZhbGlkIGJpdHMgKi8KKworI2RlZmluZSBDT05GSUdfUlRDX0RTMTMzNworI2RlZmluZSBDRkdfSTJDX1JUQ19BRERSIDB4NjgKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUENJIHN0dWZmCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNkZWZpbmUgUENJX0hPU1RfQURBUFRFUiAwCQkvKiBjb25maWd1cmUgYXIgcGNpIGFkYXB0ZXIJKi8KKyNkZWZpbmUgUENJX0hPU1RfRk9SQ0UJMQkJLyogY29uZmlndXJlIGFzIHBjaSBob3N0CSovCisjZGVmaW5lIFBDSV9IT1NUX0FVVE8JMgkJLyogZGV0ZWN0ZWQgdmlhIGFyYml0ZXIgZW5hYmxlCSovCisKKyNkZWZpbmUgQ09ORklHX1BDSQkJCS8qIGluY2x1ZGUgcGNpIHN1cHBvcnQJCSovCisjZGVmaW5lIENPTkZJR19QQ0lfSE9TVAlQQ0lfSE9TVF9GT1JDRQkvKiBzZWxlY3QgcGNpIGhvc3QgZnVuY3Rpb24JKi8KKyNkZWZpbmUgQ09ORklHX1BDSV9QTlAJCQkvKiBkbyBwY2kgcGx1Zy1hbmQtcGxheQkJKi8KKwkJCQkJLyogcmVzb3VyY2UgY29uZmlndXJhdGlvbgkqLworCisvKiBJZiB5b3Ugd2FudCB0byBzZWUsIHdoYXRzIGNvbm5lY3RlZCB0byB5b3VyIFBDSSBidXMgKi8KKy8qICNkZWZpbmUgQ09ORklHX1BDSV9TQ0FOX1NIT1cgKi8KKworI2RlZmluZSBDRkdfUENJX1NVQlNZU19WRU5ET1JJRCAweDAwMDAJLyogUENJIFZlbmRvciBJRDogdG8tZG8hISEJKi8KKyNkZWZpbmUgQ0ZHX1BDSV9TVUJTWVNfREVWSUNFSUQgMHgwMDAwCS8qIFBDSSBEZXZpY2UgSUQ6IHRvLWRvISEhCSovCisjZGVmaW5lIENGR19QQ0lfUFRNMUxBCTB4MDAwMDAwMDAJLyogcG9pbnQgdG8gc2RyYW0JCSovCisjZGVmaW5lIENGR19QQ0lfUFRNMU1TCTB4ODAwMDAwMDEJLyogMkdCLCBlbmFibGUgaGFyZC13aXJlZCB0byAxCSovCisjZGVmaW5lIENGR19QQ0lfUFRNMVBDSSAweDAwMDAwMDAwCS8qIEhvc3Q6IHVzZSB0aGlzIHBjaSBhZGRyZXNzCSovCisjZGVmaW5lIENGR19QQ0lfUFRNMkxBCTB4MDAwMDAwMDAJLyogZGlzYWJsZWQJCQkqLworI2RlZmluZSBDRkdfUENJX1BUTTJNUwkweDAwMDAwMDAwCS8qIGRpc2FibGVkCQkJKi8KKyNkZWZpbmUgQ0ZHX1BDSV9QVE0yUENJIDB4MDQwMDAwMDAJLyogSG9zdDogdXNlIHRoaXMgcGNpIGFkZHJlc3MJKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRXh0ZXJuYWwgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmICEoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9JREUpCisKKyN1bmRlZglDT05GSUdfSURFX0xFRAkJCS8qIG5vIGxlZCBmb3IgaWRlIHN1cHBvcnRlZAkqLworI3VuZGVmCUNPTkZJR19JREVfUkVTRVQJCS8qIG5vIHJlc2V0IGZvciBpZGUgc3VwcG9ydGVkCSovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElERS9BVEEgc3R1ZmYKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2Vsc2UgLyogIShDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0lERSkgKi8KKyNkZWZpbmUgQ09ORklHX1NUQVJUX0lERQkxCS8qIGNoZWNrLCBpZiB1c2UgSURFICovCisKKyN1bmRlZglDT05GSUdfSURFXzh4eF9ESVJFQ1QJCS8qIG5vIHBjbWNpYSBpbnRlcmZhY2UgcmVxdWlyZWQgKi8KKyN1bmRlZglDT05GSUdfSURFX0xFRAkJCS8qIG5vIGxlZCBmb3IgaWRlIHN1cHBvcnRlZAkqLworI3VuZGVmCUNPTkZJR19JREVfUkVTRVQJCS8qIG5vIHJlc2V0IGZvciBpZGUgc3VwcG9ydGVkCSovCisKKyNkZWZpbmUJQ09ORklHX0FUQVBJCisjZGVmaW5lCUNPTkZJR19ET1NfUEFSVElUSU9OCisjZGVmaW5lCUNGR19JREVfTUFYREVWSUNFCShDRkdfSURFX01BWEJVUyoxKSAvKiBtYXguIDEgZHJpdmVzIHBlciBJREUgYnVzICovCisKKyNpZm5kZWYgSURFX1VTRVNfSVNBX0VNVUxBVElPTgorCisvKiBOZXcgYW5kIGZhc3RlciBhY2Nlc3MgKi8KKyNkZWZpbmUJQ0ZHX0FUQV9CQVNFX0FERFIJCTB4N0EwMDAwMDAJLyogc3RhcnQgb2YgSVNBIElPIGVtdWxhdGlvbiAqLworCisvKiBIb3cgbWFueSBJREUgYnVzc2VzIGFyZSBhdmFpbGFibGUgKi8KKyNkZWZpbmUJQ0ZHX0lERV9NQVhCVVMJCTEKKworLyogV2hhdCBJREUgcG9ydHMgYXJlIGF2YWlsYWJsZSAqLworI2RlZmluZQlDRkdfQVRBX0lERTBfT0ZGU0VUCTB4MDAwCQkvKiBmaXJzdCBpcyBhdmFpbGFibGUgKi8KKyN1bmRlZglDRkdfQVRBX0lERTFfT0ZGU0VUCQkJLyogc2Vjb25kIG5vdCBhdmFpbGFibGUgKi8KKworLyogYWNjZXNzIHRvIHRoZSBkYXRhIHBvcnQgaXMgY2FsY3VsYXRlZDoKKyAgIENGR19BVEFfQkFTRV9BRERSICsgQ0ZHX0FUQV9JREUwX09GRlNFVCArIENGR19BVEFfREFUQV9PRkZTRVQgKyAwICovCisjZGVmaW5lIENGR19BVEFfREFUQV9PRkZTRVQJMHgwMDAwCS8qIE9mZnNldCBmb3IgZGF0YSBJL08gKi8KKworLyogYWNjZXNzIHRvIHRoZSByZWdpc3RlcnMgaXMgY2FsY3VsYXRlZDoKKyAgIENGR19BVEFfQkFTRV9BRERSICsgQ0ZHX0FUQV9JREUwX09GRlNFVCArIENGR19BVEFfUkVHX09GRlNFVCArIFsxLi43XSAqLworI2RlZmluZQlDRkdfQVRBX1JFR19PRkZTRVQJMHgwMDAwCS8qIE9mZnNldCBmb3Igbm9ybWFsIHJlZ2lzdGVyIGFjY2Vzc2VzCSovCisKKy8qIGFjY2VzcyB0byB0aGUgYWx0ZXJuYXRlIHJlZ2lzdGVyIGlzIGNhbGN1bGF0ZWQ6CisgICBDRkdfQVRBX0JBU0VfQUREUiArIENGR19BVEFfSURFMF9PRkZTRVQgKyBDRkdfQVRBX0FMVF9PRkZTRVQgKyA2ICovCisjZGVmaW5lIENGR19BVEFfQUxUX09GRlNFVAkweDAwOAkJLyogT2Zmc2V0IGZvciBhbHRlcm5hdGUgcmVnaXN0ZXJzCSovCisKKyNlbHNlIC8qIElERV9VU0VTX0lTQV9FTVVMQVRJT04gKi8KKworI2RlZmluZQlDRkdfQVRBX0JBU0VfQUREUgkJMHg3OTAwMDAwMAkvKiBzdGFydCBvZiBJU0EgSU8gZW11bGF0aW9uICovCisKKy8qIEhvdyBtYW55IElERSBidXNzZXMgYXJlIGF2YWlsYWJsZSAqLworI2RlZmluZQlDRkdfSURFX01BWEJVUwkJMQorCisvKiBXaGF0IElERSBwb3J0cyBhcmUgYXZhaWxhYmxlICovCisjZGVmaW5lCUNGR19BVEFfSURFMF9PRkZTRVQJMHgwMUYwCS8qIGZpcnN0IGlzIGF2YWlsYWJsZSAqLworI3VuZGVmCUNGR19BVEFfSURFMV9PRkZTRVQJCQkJLyogc2Vjb25kIG5vdCBhdmFpbGFibGUgKi8KKworLyogYWNjZXNzIHRvIHRoZSBkYXRhIHBvcnQgaXMgY2FsY3VsYXRlZDoKKyAgIENGR19BVEFfQkFTRV9BRERSICsgQ0ZHX0FUQV9JREUwX09GRlNFVCArIENGR19BVEFfREFUQV9PRkZTRVQgKyAwICovCisjZGVmaW5lIENGR19BVEFfREFUQV9PRkZTRVQJMHgwMDAwCS8qIE9mZnNldCBmb3IgZGF0YSBJL08gKi8KKworLyogYWNjZXNzIHRvIHRoZSByZWdpc3RlcnMgaXMgY2FsY3VsYXRlZDoKKyAgIENGR19BVEFfQkFTRV9BRERSICsgQ0ZHX0FUQV9JREUwX09GRlNFVCArIENGR19BVEFfUkVHX09GRlNFVCArIFsxLi43XSAqLworI2RlZmluZQlDRkdfQVRBX1JFR19PRkZTRVQJMHgwMDAwCS8qIE9mZnNldCBmb3Igbm9ybWFsIHJlZ2lzdGVyIGFjY2Vzc2VzCSovCisKKy8qIGFjY2VzcyB0byB0aGUgYWx0ZXJuYXRlIHJlZ2lzdGVyIGlzIGNhbGN1bGF0ZWQ6CisgICBDRkdfQVRBX0JBU0VfQUREUiArIENGR19BVEFfSURFMF9PRkZTRVQgKyBDRkdfQVRBX0FMVF9PRkZTRVQgKyA2ICovCisjZGVmaW5lIENGR19BVEFfQUxUX09GRlNFVAkweDAzRjAJCS8qIE9mZnNldCBmb3IgYWx0ZXJuYXRlIHJlZ2lzdGVycwkqLworCisjZW5kaWYgLyogSURFX1VTRVNfSVNBX0VNVUxBVElPTiAqLworCisjZW5kaWYgLyogIShDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0lERSkgKi8KKworLyoKKyNkZWZpbmUJQ0ZHX0tFWV9SRUdfQkFTRV9BRERSCTB4RjAxMDAwMDAKKyNkZWZpbmUJQ0ZHX0lSX1JFR19CQVNFX0FERFIJMHhGMDIwMDAwMAorI2RlZmluZQlDRkdfRlBHQV9SRUdfQkFTRV9BRERSCTB4RjAzMDAwMDAKKyovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFN0YXJ0IGFkZHJlc3NlcyBmb3IgdGhlIGZpbmFsIG1lbW9yeSBjb25maWd1cmF0aW9uCisgKiAoU2V0IHVwIGJ5IHRoZSBzdGFydHVwIGNvZGUpCisgKiBQbGVhc2Ugbm90ZSB0aGF0IENGR19TRFJBTV9CQVNFIF9tdXN0XyBzdGFydCBhdCAwCisgKgorICogQ0ZHX0ZMQVNIX0JBU0UgICAtPiBzdGFydCBhZGRyZXNzIG9mIGludGVybmFsIGZsYXNoCisgKiBDRkdfTU9OSVRPUl9CQVNFIC0+IHN0YXJ0IG9mIHUtYm9vdAorICovCisjaWZuZGVmIF9fQVNTRU1CTEVSX18KK2V4dGVybiB1bnNpZ25lZCBsb25nIG9mZnNldE9mQmlnRmxhc2g7CitleHRlcm4gdW5zaWduZWQgbG9uZyBvZmZzZXRPZkVudmlyb25tZW50OworI2VuZGlmCisKKyNkZWZpbmUgQ0ZHX1NEUkFNX0JBU0UJCTB4MDAwMDAwMDAKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0JBU0UJCTB4RkZFMDAwMDAKKyNkZWZpbmUgQ0ZHX01PTklUT1JfQkFTRQkweEZGRkMwMDAwICAgICAvKiBwbGFjZWQgbGFzdCAyNTZrICovCisjZGVmaW5lIENGR19NT05JVE9SX0xFTgkJKDIyNCAqIDEwMjQpCS8qIFJlc2VydmUgMjI0IEtpQiBmb3IgTW9uaXRvcgkqLworI2RlZmluZSBDRkdfTUFMTE9DX0xFTgkJKDEyOCAqIDEwMjQpCS8qIFJlc2VydmUgMTI4IEtpQiBmb3IgbWFsbG9jKCkJKi8KKworLyoKKyAqIEZvciBib290aW5nIExpbnV4LCB0aGUgYm9hcmQgaW5mbyBhbmQgY29tbWFuZCBsaW5lIGRhdGEKKyAqIGhhdmUgdG8gYmUgaW4gdGhlIGZpcnN0IDggTWlCIG9mIG1lbW9yeSwgc2luY2UgdGhpcyBpcworICogdGhlIG1heGltdW0gbWFwcGVkIGJ5IHRoZSBMaW51eCBrZXJuZWwgZHVyaW5nIGluaXRpYWxpemF0aW9uLgorICovCisjZGVmaW5lIENGR19CT09UTUFQU1oJCSg4IDw8IDIwKQkvKiBJbml0aWFsIE1lbW9yeSBtYXAgZm9yIExpbnV4ICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBGTEFTSCBvcmdhbml6YXRpb24gIyMgRklYTUU6IGxvb2t1cCBpbiBkYXRhc2hlZXQKKyAqLworI2RlZmluZSBDRkdfTUFYX0ZMQVNIX0JBTktTCTIJLyogbWF4IG51bWJlciBvZiBtZW1vcnkgYmFua3MJCSovCisjZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAkyNTYJLyogbWF4IG51bWJlciBvZiBzZWN0b3JzIG9uIG9uZSBjaGlwCSovCisKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSQkJCS8qIGZsYXNoIGlzIENGSSBjb21wYXQuCSovCisjZGVmaW5lIENGR19GTEFTSF9DRklfRFJJVkVSCQkvKiBVc2UgY29tbW9uIENGSSBkcml2ZXIqLworI2RlZmluZSBDRkdfRkxBU0hfRU1QVFlfSU5GTwkJLyogcHJpbnQgJ0UnIGZvciBlbXB0eSBzZWN0b3IJKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1FVSUVUX1RFU1QJMQkvKiBkb24ndCB3YXJuIHVwb24gdW5rbm93biBmbGFzaCovCisjZGVmaW5lIENGR19GTEFTSF9FUkFTRV9UT1VUCTEyMDAwMAkvKiBUaW1lb3V0IGZvciBGbGFzaCBFcmFzZSAoaW4gbXMpCSovCisjZGVmaW5lIENGR19GTEFTSF9XUklURV9UT1VUCTUwMAkvKiBUaW1lb3V0IGZvciBGbGFzaCBXcml0ZSAoaW4gbXMpCSovCisKKyNkZWZpbmUgQ0ZHX0VOVl9JU19JTl9GTEFTSAkxCisjaWYgQ0ZHX0VOVl9JU19JTl9GTEFTSAorCSNkZWZpbmUgQ0ZHX0VOVl9PRkZTRVQJCTB4MDAwMDAwMDAgIC8qIE9mZnNldCBvZiBFbnZpcm9ubWVudCBTZWN0b3IgaW4gYm90dG9tIHR5cGUgKi8KKwkjZGVmaW5lIENGR19FTlZfU0laRQkJMHg0MDAwCSAgICAvKiBUb3RhbCBTaXplIG9mIEVudmlyb25tZW50IFNlY3RvcgkqLworCSNkZWZpbmUgQ0ZHX0VOVl9TRUNUX1NJWkUJMHg0MDAwCSAgICAvKiBzZWUgUkVBRE1FIC0gZW52IHNlY3RvciB0b3RhbCBzaXplCSovCisjZW5kaWYKKy8qIGxldCB1cyBjaGFuZ2luZyBhbnl0aGluZyBpbiBvdXIgZW52aXJvbm1lbnQgKi8KKyNkZWZpbmUgQ09ORklHX0VOVl9PVkVSV1JJVEUKKworLyoKKyAqIE5BTkQtRkxBU0ggc3R1ZmYKKyAqLworI2RlZmluZSBDRkdfTUFYX05BTkRfREVWSUNFCTEKKyNkZWZpbmUgTkFORF9NQVhfQ0hJUFMJCTEKKyNkZWZpbmUgQ0ZHX05BTkRfQkFTRQkJMHg3N0QwMDAwMAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBDYWNoZSBDb25maWd1cmF0aW9uCisgKgorICogQ0ZHX0RDQUNIRV9TSVpFIC0+IHNpemUgb2YgZGF0YSBjYWNoZToKKyAqIC0gNDA1R1AgOGsKKyAqIC0gNDA1R1ByIDE2aworICogSG93IHRvIGhhbmRsZSB0aGUgZGlmZmVyZW5jZSBpbiBjaGFjaGUgc2l6ZT8KKyAqIENGR19DQUNIRUxJTkVfU0laRSAtPiBzaXplIG9mIG9uZSBjYWNoZSBsaW5lOiAzMiBieXRlcworICogKHVzZWQgaW4gY3B1L3BwYzR4eC9zdGFydC5TKQorKi8KKyNkZWZpbmUgQ0ZHX0RDQUNIRV9TSVpFICAgIDE2Mzg0CisKKyNkZWZpbmUgQ0ZHX0NBQ0hFTElORV9TSVpFIDMyCisKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9LR0RCKQorICNkZWZpbmUgQ0ZHX0NBQ0hFTElORV9TSElGVAk1CS8qIGxvZyBiYXNlIDIgb2YgdGhlIGFib3ZlIHZhbHVlCSovCisjZW5kaWYKKworLyoKKyAqIEluaXQgTWVtb3J5IENvbnRyb2xsZXI6CisgKgorICovCisKKyNkZWZpbmUgRkxBU0hfQkFTRTBfUFJFTElNCUNGR19GTEFTSF9CQVNFCisjZGVmaW5lIEZMQVNIX0JBU0UxX1BSRUxJTQkwCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFNvbWUgaW5mb3JtYXRpb25zIGFib3V0IHRoZSBpbnRlcm5hbCBTUkFNIChPQ009T24gQ2hpcCBNZW1vcnkpCisgKgorICogQ0ZHX09DTV9EQVRBX0FERFIgLT4gbG9jYXRpb24KKyAqIENGR19PQ01fREFUQV9TSVpFIC0+IHNpemUKKyovCisKKyNkZWZpbmUgQ0ZHX1RFTVBfU1RBQ0tfT0NNCTEKKyNkZWZpbmUgQ0ZHX09DTV9EQVRBX0FERFIJMHhGODAwMDAwMAorI2RlZmluZSBDRkdfT0NNX0RBVEFfU0laRQkweDEwMDAKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRGVmaW5pdGlvbnMgZm9yIGluaXRpYWwgc3RhY2sgcG9pbnRlciBhbmQgZGF0YSBhcmVhIChpbiBEUFJBTSk6CisgKiAtIHdlIGFyZSB1c2luZyB0aGUgaW50ZXJuYWwgNGsgU1JBTSwgc28gd2UgZG9uJ3QgbmVlZCBkYXRhIGNhY2hlIG1hcHBpbmcKKyAqIC0gaW50ZXJuYWwgU1JBTSAoT0NNPU9uIENoaXAgTWVtb3J5KSBpcyBwbGFjZWQgdG8gQ0ZHX09DTV9EQVRBX0FERFIKKyAqIC0gU3RhY2twb2ludGVyIHdpbGwgYmUgbG9jYXRlZCB0bworICogICAoQ0ZHX0lOSVRfUkFNX0FERFImMHhGRkZGMDAwMCkgfCAoQ0ZHX0lOSVRfU1BfT0ZGU0VUJjB4MDAwMEZGRkYpCisgKiAgIGluIGNwdS9wcGM0eHgvc3RhcnQuUworICovCisKKyN1bmRlZiBDRkdfSU5JVF9EQ0FDSEVfQ1MKKy8qIFdoZXJlIHRoZSBpbnRlcm5hbCBTUkFNIHN0YXJ0cyAqLworI2RlZmluZSBDRkdfSU5JVF9SQU1fQUREUglDRkdfT0NNX0RBVEFfQUREUgorLyogV2hlcmUgdGhlIGludGVybmFsIFNSQU0gZW5kcyAob25seSBvZmZzZXQpICovCisjZGVmaW5lIENGR19JTklUX1JBTV9FTkQJMHgwRjAwCisKKy8qCisKKyBDRkdfSU5JVF9SQU1fQUREUiAtLS0tLS0+IC0tLS0tLS0tLS0tLSBsb3dlciBhZGRyZXNzCisJCQkgICB8CSAgICAgIHwKKwkJCSAgIHwgIF4gICAgICAgfAorCQkJICAgfCAgfCAgICAgICB8CisJCQkgICB8ICB8IFN0YWNrIHwKKyBDRkdfR0JMX0RBVEFfT0ZGU0VUIC0tLS0+IC0tLS0tLS0tLS0tLQorCQkJICAgfAkgICAgICB8CisJCQkgICB8IDY0IEJ5dGVzIHwKKwkJCSAgIHwJICAgICAgfAorIENGR19JTklUX1JBTV9FTkQgIC0tLS0tLT4gLS0tLS0tLS0tLS0tIGhpZ2hlciBhZGRyZXNzCisgIChvZmZzZXQgb25seSkKKworKi8KKy8qIHNpemUgaW4gYnl0ZXMgcmVzZXJ2ZWQgZm9yIGluaXRpYWwgZGF0YSAqLworI2RlZmluZSBDRkdfR0JMX0RBVEFfU0laRSAgICAgNjQKKyNkZWZpbmUgQ0ZHX0dCTF9EQVRBX09GRlNFVCAgIChDRkdfSU5JVF9SQU1fRU5EIC0gQ0ZHX0dCTF9EQVRBX1NJWkUpCisvKiBJbml0aWFsIHZhbHVlIG9mIHRoZSBzdGFjayBwb2ludGVybiBpbiBpbnRlcm5hbCBTUkFNICovCisjZGVmaW5lIENGR19JTklUX1NQX09GRlNFVCAgICBDRkdfR0JMX0RBVEFfT0ZGU0VUCisKKy8qCisgKiBJbnRlcm5hbCBEZWZpbml0aW9ucworICoKKyAqIEJvb3QgRmxhZ3MKKyAqLworI2RlZmluZSBCT09URkxBR19DT0xECTB4MDEJCS8qIE5vcm1hbCBQb3dlci1PbjogQm9vdCBmcm9tIEZMQVNICSovCisjZGVmaW5lIEJPT1RGTEFHX1dBUk0JMHgwMgkJLyogU29mdHdhcmUgcmVib290CQkJKi8KKworLyogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgKi8KKy8qIFRoZXNlIGRlZmluZXMgd2lsbCBiZSB1c2VkIGluIGNwdS9wcGM0eHgvY3B1X2luaXQuYyB0byBzZXR1cCBleHRlcm5hbCBjaGlwIHNlbGVjdHMgICovCisvKiBUaGV5IGFyZSBjdXJyZW50bHkgdW5kZWZpbmVkIGNhdXNlIHRoZXkgYXJlIGluaXRpYWl6ZWQgaW4gYm9hcmQvc29saWRjYXJkMy9pbml0LlMgICAqLworCisvKiBUaGlzIGNoaXAgc2VsZWN0IGFjY2Vzc2VzIHRoZSBib290IGRldmljZSAqLworLyogSXQgZGVwZW5kcyBvbiBib290IHNlbGVjdCBzd2l0Y2ggaWYgdGhpcyBkZXZpY2UgaXMgMTYgb3IgOCBiaXQgKi8KKworI3VuZGVmIENGR19FQkNfUEIwQVAKKyN1bmRlZiBDRkdfRUJDX1BCMENSCisKKyN1bmRlZiBDRkdfRUJDX1BCMUFQCisjdW5kZWYgQ0ZHX0VCQ19QQjFDUgorCisjdW5kZWYgQ0ZHX0VCQ19QQjJBUAorI3VuZGVmIENGR19FQkNfUEIyQ1IKKworI3VuZGVmIENGR19FQkNfUEIzQVAKKyN1bmRlZiBDRkdfRUJDX1BCM0NSCisKKyN1bmRlZiBDRkdfRUJDX1BCNEFQCisjdW5kZWYgQ0ZHX0VCQ19QQjRDUgorCisjdW5kZWYgQ0ZHX0VCQ19QQjVBUAorI3VuZGVmIENGR19FQkNfUEI1Q1IKKworI3VuZGVmIENGR19FQkNfUEI2QVAKKyN1bmRlZiBDRkdfRUJDX1BCNkNSCisKKyN1bmRlZiBDRkdfRUJDX1BCN0FQCisjdW5kZWYgQ0ZHX0VCQ19QQjdDUgorCisjZGVmaW5lIENPTkZJR19TRFJBTV9CQU5LMAkvKiB1c2UgdGhlIHN0YW5kYXJkIFNEUkFNIGluaXRpYWxpemF0aW9uICovCisjdW5kZWYgQ09ORklHX1NQRF9FRVBST00KKworLyoKKyAqIERlZmluZSB0aGlzIHRvIGdldCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHN5c3RlbSBjb25maWd1cmF0aW9uCisgKi8KKy8qICNkZWZpbmUgU0MzX0RFQlVHT1VUICovCisjdW5kZWYgU0MzX0RFQlVHT1VUCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRXh0ZXJuYWwgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBDRkdfSVNBX01FTV9CQVNFX0FERFJFU1MgMHg3ODAwMDAwMAorLyoKKyBEaWUgR3JhZmlrLVRyZWliZXIgZ3JlaWZlbiD8YmVyIGRpZSBBZHJlc3NlIGluIGRpZXNlbSBNYWNybyBhdWYgZGVuIENoaXAgenUuCisgRGFzIGZ1bmt0aW9uaWVydCBiZWkgZGVyZW4gS2FydGVuLCB3ZWlsIHNpZSBlaW5lIFBDSS1CcmlkZ2UgYmVudXR6ZW4sIGRpZQorIGRhcyBnbGVpY2hlIE1hcHBpbmcgZHVyY2hm/GhyZW4ga2Fubiwgd2llIGRlciBTQzUyMCAoYWxzbyBBdWZ0ZWlsZW4gdm9uIElPLVp1Z3JpZmZlbgorIGF1ZiBJU0EtIHVuZCBQQ0ktWnlrbGVuKQorICovCisjZGVmaW5lIENGR19JU0FfSU9fQkFTRV9BRERSRVNTICAweEU4MDAwMDAwCisvKiNkZWZpbmUgQ0ZHX0lTQV9JT19CQVNFX0FERFJFU1MgIDB4NzkwMDAwMDAgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVmlkZW8gc3VwcG9ydAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmZGVmIFVTRV9WR0FfR1JBUEhJQ1MKKyNkZWZpbmUgQ09ORklHX1ZJREVPCQkvKiBUbyBlbmFibGUgdmlkZW8gY29udHJvbGxlciBzdXBwb3J0ICovCisjZGVmaW5lIENPTkZJR19WSURFT19DVDY5MDAwCisjZGVmaW5lIENPTkZJR19DRkJfQ09OU09MRQorLyogI2RlZmluZSBDT05GSUdfVklERU9fTE9HTyAqLworI2RlZmluZSBDT05GSUdfVkdBX0FTX1NJTkdMRV9ERVZJQ0UKKyNkZWZpbmUgQ09ORklHX1ZJREVPX1NXX0NVUlNPUgorLyogI2RlZmluZSBDT05GSUdfVklERU9fSFdfQ1VSU09SICovCisjZGVmaW5lIENPTkZJR19WSURFT19PTkJPQVJECS8qIFZpZGVvIGNvbnRyb2xsZXIgaXMgb24tYm9hcmQgKi8KKworI2RlZmluZSBWSURFT19IV19SRUNURklMTAorI2RlZmluZSBWSURFT19IV19CSVRCTFQKKworI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIElkZW50CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBDT05GSUdfU0MzX1ZFUlNJT04gInIxLjQiCisKKyNkZWZpbmUgUE9TVF9PVVQoeCkgKCooKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIqKSgweDc5MDAwMDgwKSk9eCkKKworI2VuZGlmCS8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvcHBjNDA1LmggYi9pbmNsdWRlL3BwYzQwNS5oCmluZGV4IDQ0NzAyNDAuLmU0NzVmYTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcHBjNDA1LmgKKysrIGIvaW5jbHVkZS9wcGM0MDUuaApAQCAtMTYwLDYgKzE2MCw3IEBACiAgICNkZWZpbmUgbWVtX2JlYXIgICAgMHgxMCAgICAvKiBidXMgZXJyb3IgYWRkcmVzcyByZWcJCSAgICAgKi8KICNlbmRpZgogICAjZGVmaW5lIG1lbV9tY29wdDEgIDB4MjAgICAgLyogbWVtb3J5IGNvbnRyb2xsZXIgb3B0aW9ucyAxCSAgICAgKi8KKyAgI2RlZmluZSBtZW1fc3RhdHVzICAweDI0ICAgIC8qIG1lbW9yeSBzdGF0dXMJCQkgICAgICovCiAgICNkZWZpbmUgbWVtX3J0ciAgICAgMHgzMCAgICAvKiByZWZyZXNoIHRpbWVyIHJlZwkJICAgICAqLwogICAjZGVmaW5lIG1lbV9wbWl0ICAgIDB4MzQgICAgLyogcG93ZXIgbWFuYWdlbWVudCBpZGxlIHRpbWVyCSAgICAgKi8KICAgI2RlZmluZSBtZW1fbWIwY2YgICAweDQwICAgIC8qIG1lbW9yeSBiYW5rIDAgY29uZmlndXJhdGlvbgkgICAgICovCmRpZmYgLS1naXQgYS9saWJfcHBjL2JvYXJkLmMgYi9saWJfcHBjL2JvYXJkLmMKaW5kZXggZjQyNDEyMS4uMjRlOGU5NyAxMDA2NDQKLS0tIGEvbGliX3BwYy9ib2FyZC5jCisrKyBiL2xpYl9wcGMvYm9hcmQuYwpAQCAtNzYsNiArNzYsMTAgQEAKIGV4dGVybiBpbnQgdXBkYXRlX2ZsYXNoX3NpemUgKGludCBmbGFzaF9zaXplKTsKICNlbmRpZgogCisjaWYgZGVmaW5lZChDT05GSUdfU09MSURDQVJEMykKK2V4dGVybiB2b2lkIHNjM19yZWFkX2VlcHJvbSh2b2lkKTsKKyNlbmRpZgorCiAjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfRE9DKQogdm9pZCBkb2NfaW5pdCAodm9pZCk7CiAjZW5kaWYKQEAgLTkzLDYgKzk3LDkgQEAKIGV4dGVybiBmbGFzaF9pbmZvX3QgZmxhc2hfaW5mb1tdOwogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19TVEFSVF9JREUpCitleHRlcm4gaW50IGJvYXJkX3N0YXJ0X2lkZSh2b2lkKTsKKyNlbmRpZgogI2luY2x1ZGUgPGVudmlyb25tZW50Lmg+CiAKIERFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwpAQCAtODE1LDYgKzgyMiw5IEBACiAjZW5kaWYJLyogQ09ORklHXzQwNUdQLCBDT05GSUdfNDA1RVAgKi8KICNlbmRpZgkvKiBDRkdfRVhUQkRJTkZPICovCiAKKyNpZiBkZWZpbmVkKENPTkZJR19TT0xJRENBUkQzKQorCXNjM19yZWFkX2VlcHJvbSgpOworI2VuZGlmCiAJcyA9IGdldGVudiAoImV0aGFkZHIiKTsKICNpZiBkZWZpbmVkIChDT05GSUdfTUJYKSB8fCBcCiAgICAgZGVmaW5lZCAoQ09ORklHX1JQWENMQVNTSUMpIHx8IFwKQEAgLTkyMSw2ICs5MzEsNyBAQAogICAgIGRlZmluZWQoQ09ORklHX0tVUDRYKQl8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfTFdNT04pCXx8IFwKICAgICBkZWZpbmVkKENPTkZJR19QQ1VfRSkJfHwgXAorICAgIGRlZmluZWQoQ09ORklHX1NPTElEQ0FSRDMpCXx8IFwKICAgICBkZWZpbmVkKENPTkZJR19XN08pCQl8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfTUlTQ19JTklUX1IpCiAJLyogbWlzY2VsbGFuZW91cyBwbGF0Zm9ybSBkZXBlbmRlbnQgaW5pdGlhbGlzYXRpb25zICovCkBAIC0xMDMwLDcgKzEwNDEsMTIgQEAKICMgZWxzZQogCXB1dHMgKCJJREU6ICAgIik7CiAjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19TVEFSVF9JREUpCisJaWYgKGJvYXJkX3N0YXJ0X2lkZSgpKQorCQlpZGVfaW5pdCAoKTsKKyNlbHNlCiAJaWRlX2luaXQgKCk7CisjZW5kaWYKICNlbmRpZiAvKiBDRkdfQ01EX0lERSAqLwogCiAjaWZkZWYgQ09ORklHX0xBU1RfU1RBR0VfSU5JVAo=