ZGlmZiAtLWdpdCBhL2RsbHMvTWFrZWZpbGUuaW4gYi9kbGxzL01ha2VmaWxlLmluCmluZGV4IGYxNDk4MmIuLmM1OTAyODEgMTAwNjQ0Ci0tLSBhL2RsbHMvTWFrZWZpbGUuaW4KKysrIGIvZGxscy9NYWtlZmlsZS5pbgpAQCAtNjksNiArNjksNyBAQAogCXN0aSBcCiAJdGFwaTMyIFwKIAl0dHlkcnYgXAorCXR3YWluIFwKIAl1cmwgXAogCXVybG1vbiBcCiAJdXNlciBcCkBAIC0xOTUsNiArMTk2LDcgQEAKIAl0YXBpMzIuZGxsJChETExFWFQpIFwKIAl0b29saGVscC5kbGwkKERMTEVYVCkgXAogCXR0eWRydi5kbGwkKERMTEVYVCkgXAorCXR3YWluXzMyLmRsbCQoRExMRVhUKSBcCiAJdHlwZWxpYi5kbGwkKERMTEVYVCkgXAogCXVybC5kbGwkKERMTEVYVCkgXAogCXVybG1vbi5kbGwkKERMTEVYVCkgXApAQCAtNDI2LDYgKzQyOCw5IEBACiB0dHlkcnYuZGxsJChETExFWFQpOiB0dHlkcnYvdHR5ZHJ2LmRsbCQoRExMRVhUKQogCSQoUk0pICRAICYmICQoTE5fUykgdHR5ZHJ2L3R0eWRydi5kbGwkKERMTEVYVCkgJEAKIAordHdhaW5fMzIuZGxsJChETExFWFQpOiB0d2Fpbi90d2Fpbl8zMi5kbGwkKERMTEVYVCkKKwkkKFJNKSAkQCAmJiAkKExOX1MpIHR3YWluL3R3YWluXzMyLmRsbCQoRExMRVhUKSAkQAorCiB1cmwuZGxsJChETExFWFQpOiB1cmwvdXJsLmRsbCQoRExMRVhUKQogCSQoUk0pICRAICYmICQoTE5fUykgdXJsL3VybC5kbGwkKERMTEVYVCkgJEAKIApAQCAtNjkwLDYgKzY5NSwxMCBAQAogICBsaWJrZXJuZWwzMi5kbGwuJChMSUJFWFQpIGxpYm50ZGxsLmRsbC4kKExJQkVYVCkKIAlAY2QgdHR5ZHJ2ICYmICQoTUFLRSkgdHR5ZHJ2LmRsbCQoRExMRVhUKQogCit0d2Fpbi90d2Fpbl8zMi5kbGwkKERMTEVYVCk6IGR1bW15IHVzZXIzMi5kbGwkKERMTEVYVCkgZ2RpMzIuZGxsJChETExFWFQpIFwKKyAga2VybmVsMzIuZGxsJChETExFWFQpIG50ZGxsLmRsbCQoRExMRVhUKQorCUBjZCB0d2FpbiAmJiAkKE1BS0UpIHR3YWluXzMyLmRsbCQoRExMRVhUKQorCiB1cmwvdXJsLmRsbCQoRExMRVhUKTogZHVtbXkgbnRkbGwuZGxsJChETExFWFQpCiAJQGNkIHVybCAmJiAkKE1BS0UpIHVybC5kbGwkKERMTEVYVCkKIApkaWZmIC0tZ2l0IGEvZGxscy90d2Fpbi8uY3ZzaWdub3JlIGIvZGxscy90d2Fpbi8uY3ZzaWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmYmYwNWIKLS0tIC9kZXYvbnVsbAorKysgYi9kbGxzL3R3YWluLy5jdnNpZ25vcmUKQEAgLTAsMCArMSwyIEBACitNYWtlZmlsZQordHdhaW5fMzIuc3BlYy5jCmRpZmYgLS1naXQgYS9kbGxzL3R3YWluL01ha2VmaWxlLmluIGIvZGxscy90d2Fpbi9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzNlMTI4Ci0tLSAvZGV2L251bGwKKysrIGIvZGxscy90d2Fpbi9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDIyIEBACitUT1BTUkNESVIgPSBAdG9wX3NyY2RpckAKK1RPUE9CSkRJUiA9IC4uLy4uCitTUkNESVIgICAgPSBAc3JjZGlyQAorVlBBVEggICAgID0gQHNyY2RpckAKK01PRFVMRSAgICA9IHR3YWluXzMyLmRsbAorRVhUUkFMSUJTID0gQFNBTkVMSUJTQAorRVhUUkFJTkNMID0gQFNBTkVJTkNMQAorCitMRERMTEZMQUdTID0gQExERExMRkxBR1NACitTWU1CT0xGSUxFID0gJChNT0RVTEUpLnRtcC5vCisKK0NfU1JDUyA9IFwKKwljYXBhYmlsaXR5LmMgXAorCWRzX2F1ZGlvLmMgXAorCWRzX2N0cmwuYyBcCisJZHNfaW1hZ2UuYyBcCisJZHNtX2N0cmwuYyBcCisJdHdhaW4zMl9tYWluLmMKKworQE1BS0VfRExMX1JVTEVTQAorCisjIyMgRGVwZW5kZW5jaWVzOgpkaWZmIC0tZ2l0IGEvZGxscy90d2Fpbi9SRUFETUUgYi9kbGxzL3R3YWluL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2FkNjNjCi0tLSAvZGV2L251bGwKKysrIGIvZGxscy90d2Fpbi9SRUFETUUKQEAgLTAsMCArMSw1NCBAQAorLS0tLS0gT2xkIENvcmVsIFJFQURNRSwgcHJvYmFibHkgb3V0ZGF0ZWQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMS4gSU5UUk9EVUNUSU9OCisKK1RoaXMgbGlicmFyeSAodHdhaW4zMi5kbGwpIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIFRXQUlOIEFQSSBmb3IgcHJvdmlkaW5nIGltYWdlIGFjcXVpc2l0aW9uIGRldmljZXMgKHNjYW5uZXIgb3IgZGlnaXRhbCBjYW1lcmEpIHN1cHBvcnQuICBJdCB1c2VzIFNBTkUgZHJpdmVycyBhcyB0aGUgYmFja2VuZCBhbmQgdHJhbnNsYXRlcyBUV0FJTiBBUEkgY2FsbHMgaW50byBTQU5FIEFQSSBjYWxscy4gIFVubGlrZSB0aGUgdHdhaW4zMiBsaWJyYXJ5IG9uIFdpbmRvd3MgcGxhdGZvcm0sIGl0IGNvbWJpbmVzIHRoZSBEYXRhIFNvdXJjZSBNYW5hZ2VyIGFuZCBEYXRhIFNvdXJjZXMgaW50byBhIHNpbmdsZSBsaWJyYXJ5LiAgVGh1cyBpdCBpcyBvdXIgcmVzcG9uc2libGl0eSB0byBwcm92aWRlIGEgZ3JhcGhpY2FsIHVzZXIgaW50ZXJmYWNlIGFuZCBjYXBhYmlsaXR5IG5lZ290aWF0aW9uLCB3aGljaCB1c3VhbGx5IGFyZSBwZXJmb3JtZWQgYnkgZGF0YSBzb3VyY2VzLgorCisKKzIuIFdIQVQnUyBJTVBMRU1FTlRFRAorCistIEZ1bmN0aW9ucyB0aGF0IGRpc3BhdGNoIG9wZXJhdGlvbnMgc3BlY2lmaWVkIGJ5IHRoZSBvcGVyYXRpb24gdHJpcGxldHMgdG8gdGhlIGNvcmVzcG9uZGluZyBmdW5jdGlvbi4KKworLSBBbGwgdGhlIG9wZXJhdGlvbiB0cmlwbGV0cyByZWxhdGVkIHRvIHRoZSBEYXRhIFNvdXJjZSBNYW5hZ2VyIGFyZSBpbXBsZW1lbnRlZC4gIEFwcHBsaWNhdGlvbiBpcyBhYmxlIHRvIGVudW1lcmF0ZSBkYXRhIHNvdXJjZXMgYW5kIG9wZW4gdGhlbS4KKworLSBUaGUgb3BlcmF0aW9uIHRyaXBsZXRzIHRoYXQgZGVhbCB3aXRoIHRoZSBVSSAoc3VjaCBhcyBER19DT05UUk9ML0RBVF9VU0VSSU5URVJGQUNFL01TR19FTkFCTEVEUywgTVNHX0RJU0FCTEVEUyBhbmQgTVNHX0VOQUJMRURTVUlPTkxZKSBhcmUgcGFydGlhbGx5IGltcGxlbWVudGVkIGFsdGhvdWdoIGl0IGRvZXMgbm90IHJlYWxseSBkbyBtdWNoLgorCistIFRoZSBvcGVyYXRpb24gdHJpcGxldHMgdGhhdCBkZWFsIHdpdGggbmF0aXZlIGltYWdlIHRyYW5zZmVyaW5nIChER19JTUFHRS9EQVRfSU1BR0VOQVRJVkVYRkVSL01TR19HRVQpIGFyZSBhbHNvIHBhcnRpYWxseSBpbXBsZW1lbnRlZC4gIFN0aWxsIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gY29udmVydCB0aGUgaW1hZ2UgZGF0YSBvYnRhaW5lZCBmcm9tIHNhbmUgdG8gdGhlIFdpbmRvd3MgRElCIGZvcm1hdC4KKworLSAgT25seSB0aGUgQ0FQX0lDQVBYRkVSTUVDSCBjYXBhYmlsaXR5IGlzIGltcGxlbWVudGVkLgorCisKKzMuIFRPLURPCisKKy0gSW1hZ2UgbmF0aXZlIHRyYW5zZmVyIGlzIG5vdCB3b3JraW5nIGNvcnJlY3RseSByaWdodCBub3cuICBJdCBjcmFzaGVkIHRoZSBhcHBsaWNhdGlvbiBkdWUgdG8gdGhlIGludmFsaWQgRElCIGNyZWF0ZWQuICBXZSBuZWVkIHRvIGZpeCB0aGlzLgorCistIEltcGxlbWVudCBvdGhlciBpbWFnZSB0cmFuc2ZlciBtb2RlIHN1Y2ggYXMgZmlsZSB0cmFuc2ZlciBhbmQgbWVtb3J5IHRyYW5zZmVyLgorCistIFN1cHBvcnQgYWxsIHJlcXVpcmVkIFRXQUlOIGNhcGFiaWxpdGllcyB0aGF0IGhhdmUgbm90IGJlZW4gaW1wbGVtZW50ZWQgY3VycmVudGx5LiAgVGhlcmUgYXJlIGEgZml4ZWQgbnVtYmVyIG9mIGNhcGFiaWxpdGllcyBzcGVjaWZpZWQgYnkgdGhlIFRXQUlOIFNwZWNpZmljYXRpb24uICBIb3dldmVyLCBkZXZpY2UgY2FwYWJpbGl0aWVzIGFyZSBkeW5hbWljIGluIFNBTkUgYW5kIHRoZXJlIGlzbid0IGEgc3RhbmRhcmQgYWJvdXQgdGhlIGNhcGFiaWxpdHkgbmFtZXMuICBJdCB3b3VsZCBiZSBkaWZmaWN1bHQgdG8gbmVnb3RpYXRlIGNhcGFiaWxpdGllcyBpbiBUV0FJTiBnaXZlbiB0aGF0IHdlIGRvbid0IGtub3cgd2hhdCBjYXBhYmlsaXRpZXMgYSBTQU5FIGRyaXZlciB3b3VsZCBwcm92aWRlLiAgT25lIHBvc3NpYmxlIHNvbHV0aW9uIHRvIHVzZSBhIGRldmljZSBjb25maWd1cmF0aW9uIGZpbGUgdG8gZGVzY3JpYmUgdGhlIG1hcHBpbmcgYmV0d2VlbiBjYXBhYmlsaXRpZXMgc3VwcG9ydGVkIGJ5IGEgU0FORSBkcml2ZXIgYW5kIHRob3NlIHNwZWNpZmllZCBieSBUV0FJTi4gICAKKy0gQnVpbGQgYSBkeW5hbWljIHVzZXIgaW50ZXJmYWNlIHRoYXQgcmVmbGVjdHMgdGhlIGNhcGFiaWxpdGllcyBvZiBkaWZmZXJlbnQgc2Nhbm5lciBkZXZpY2VzLiAgQWNjb3JkaW5nIHRvIHRoZSBUV0FJTiBzcGVjaWZpY2F0aW9uLCBlYWNoIFRXQUlOIGRyaXZlciBuZWVkIHRvIHByb3ZpZGUgaXRzIG93biB1c2VyIGludGVyZmFjZS4gIEhvd2V2ZXIgdGhlIFNBTkUgZHJpdmVycyBkbyBub3QgaGF2ZSBncmFwaGljYWwgZnJvbnRlbmRzLiAgQnVpbGRpbmcgYSBmcm9udGVuZCBmb3IgZWFjaCBTQU5FIGRyaXZlciBpcyBhIGh1Z2UgdGFzay4gIEl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgYSBkeW5hbWljIGZyb250ZW5kIHNpbWlsYXIgdG8geHNjYW5pbWFnZSBvciB4c2FuZSB0aGF0IHdvcmtzIGZvciBhbGwgdGhlIGRldmljZXMuICBUaGlzIGlzIHBvc3NpYmx5IHRoZSBtb3N0IGRpZmZpY3VsdCBwYXJ0LiAKKworLSBjaGVjayBpbnRvIGxlZ2FsIGlzc3VlcyByZWdhcmRpbmc6CisgIC0gVFdBSU4gaGVhZGVyIGZpbGUKKyAgLSBsaW5raW5nIHRvIFNBTkUgKG1heWJlIHNob3VsZCBkeW5hbWljYWxseSBsaW5rIGF0IHJ1biB0aW1lPykKKworLSBhZGQgYXV0b2NvbmYgcnVsZXMgZm9yIGVuYWJsaW5nIGJhc2VkIG9uIHdoZXRoZXIgc2FuZSBpcyBpbnN0YWxsZWQKKworNC4gRklMRSBMSVNUSU5HCisKK3R3YWluMzJfbWFpbi5jICAgICAgICAgIEZ1bmN0aW9ucyB0byByZWdjb25pemUgb3BlcmF0aW9uIHRyaXBldHMgYW5kIGRpc3BhdGNoCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcmVxdWVzdHMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb25zLgorZHNtX2N0cmwuYwkJSW1wbGVtZW50YXRpb24gb2YgREdfQ09OVFJPTCBncm91cCBvcGVyYXRpb24gdHJpcGxldHMKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0ZWQgZm9yIHNvdXJjZSBtYW5hZ2VyLgorZHNfY3RybC5jICAgICAgICAgICAgICAgSW1wbGVtZW50YXRpb24gb2YgREdfQ09OVFJPTCBncm91cCBvcGVyYXRpb24gdHJpcGxldHMKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0ZWQgZm9yIGRhdGEgc291cmNlLgorZHNfaW1hZ2UuYyAgICAgICAgICAgICAgSW1wbGVtZW50YXRpb24gb2YgREdfSU1BR0UgZ3JvdXAgb3BlcmF0aW9uIHRyaXBsZXRzCisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGVkIGZvciBkYXRhIHNvdXJjZS4KK2RzX2F1ZGlvLmMgICAgICAgICAgICAgIEltcGxlbWVudGF0aW9uIG9mIERHX0FVRElPIGdyb3VwIG9wZXJhdGlvbiB0cmlwbGV0cworICAgICAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRlZCBmb3IgZGF0YSBzb3VyY2UKK2NhcGFiaWxpdHkuYyAgICAgICAgICAgIEZ1bmN0aW9ucyBmb3IgbmVnb3RpYXRpbmcgY2FwYWJpbGl0aWVzCit0d2Fpbi5oCQkJVGhlIG9yaWdpbmFsIFRXQUlOIGhlYWRlciBmaWxlCit0d2Fpbl9pLmgJCUhlYWRlciBmaWxlIGZvciB0aGUgaW50ZXJuYWwgdHdhaW4gZnVuY3Rpb25zCQorCisKKy0tCitTaGkgUXVhbiBIZQorc2hpcXVhbkBjeWJlcmR1ZGUuY29tCmRpZmYgLS1naXQgYS9kbGxzL3R3YWluL1RXQUlOIGIvZGxscy90d2Fpbi9UV0FJTgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWJjNGYzCi0tLSAvZGV2L251bGwKKysrIGIvZGxscy90d2Fpbi9UV0FJTgpAQCAtMCwwICsxLDE3MiBAQAorUmVxdWlyZW1lbnRzIHRvIGJlIGEgVFdBSU4tQ29tcGxpYW50IFNvdXJjZQorUmVxdWlyZW1lbnRzCitUV0FJTi1jb21wbGlhbnQgU291cmNlcyBtdXN0IHN1cHBvcnQgdGhlIGZvbGxvd2luZzoKK09wZXJhdGlvbnMKKy0tLS0tLS0tLS0KK0RHX0NPTlRST0wgLyBEQVRfQ0FQQUJJTElUWSAvIE1TR19HRVQKK0RHX0NPTlRST0wgLyBEQVRfQ0FQQUJJTElUWSAvIE1TR19HRVRDVVJSRU5UCitER19DT05UUk9MIC8gREFUX0NBUEFCSUxJVFkgLyBNU0dfR0VUREVGQVVMVAorREdfQ09OVFJPTCAvIERBVF9DQVBBQklMSVRZIC8gTVNHX1JFU0VUCitER19DT05UUk9MIC8gREFUX0NBUEFCSUxJVFkgLyBNU0dfU0VUCitER19DT05UUk9MIC8gREFUX0VWRU5UIC8gTVNHX1BST0NFU1NFVkVOVAorREdfQ09OVFJPTCAvIERBVF9JREVOVElUWSAvIE1TR19HRVQKK0RHX0NPTlRST0wgLyBEQVRfSURFTlRJVFkgLyBNU0dfT1BFTkRTCitER19DT05UUk9MIC8gREFUX0lERU5USVRZIC8gTVNHX0NMT1NFRFMKK0RHX0NPTlRST0wgLyBEQVRfUEVORElOR1hGRVJTIC8gTVNHX0VORFhGRVIKK0RHX0NPTlRST0wgLyBEQVRfUEVORElOR1hGRVJTIC8gTVNHX0dFVAorREdfQ09OVFJPTCAvIERBVF9QRU5ESU5HWEZFUlMgLyBNU0dfUkVTRVQKK0RHX0NPTlRST0wgLyBEQVRfU0VUVVBNRU1YRkVSIC8gTVNHX0dFVAorREdfQ09OVFJPTCAvIERBVF9TVEFUVVMgLyBNU0dfR0VUCitER19DT05UUk9MIC8gREFUX1VTRVJJTlRFUkZBQ0UgLyBNU0dfRElTQUJMRURTCitER19DT05UUk9MIC8gREFUX1VTRVJJTlRFUkZBQ0UgLyBNU0dfRU5BQkxFRFMKK0RHX0NPTlRST0wgLyBEQVRfWEZFUkdST1VQIC8gTVNHX0dFVAorREdfSU1BR0UgLyBEQVRfSU1BR0VJTkZPIC8gTVNHX0dFVAorREdfSU1BR0UgLyBEQVRfSU1BR0VMQVlPVVQgLyBNU0dfR0VUCitER19JTUFHRSAvIERBVF9JTUFHRUxBWU9VVCAvIE1TR19HRVRERUZBVUxUCitER19JTUFHRSAvIERBVF9JTUFHRUxBWU9VVCAvIE1TR19SRVNFVAorREdfSU1BR0UgLyBEQVRfSU1BR0VMQVlPVVQgLyBNU0dfU0VUCitER19JTUFHRSAvIERBVF9JTUFHRU1FTVhGRVIgLyBNU0dfR0VUCitER19JTUFHRSAvIERBVF9JTUFHRU5BVElWRVhGRVIgLyBNU0dfR0VUCisKK0NhcGFiaWxpdGllcworLS0tLS0tLS0tLS0tCitFdmVyeSBTb3VyY2UgbXVzdCBzdXBwb3J0IGFsbCBmaXZlIERHX0NPTlRST0wgLyBEQVRfQ0FQQUJJTElUWSBvcGVyYXRpb25zIG9uOgorQ0FQX1hGRVJDT1VOVAorRXZlcnkgU291cmNlIG11c3Qgc3VwcG9ydCBER19DT05UUk9MIC8gREFUX0NBUEFCSUxJVFkgTVNHX0dFVCBvbjoKK0NBUF9TVVBQT1JURURDQVBTCitDQVBfVUlDT05UUk9MTEFCTEUKK1NvdXJjZXMgdGhhdCBzdXBwbHkgaW1hZ2UgaW5mb3JtYXRpb24gbXVzdCBzdXBwb3J0IERHX0NPTlRST0wgLyBEQVRfQ0FQQUJJTElUWSAvCitNU0dfR0VULCBNU0dfR0VUQ1VSUkVOVCwgTVNHX0dFVERFRkFVTFQgb246CitJQ0FQX0NPTVBSRVNTSU9OCitJQ0FQX1BMQU5BUkNIVU5LWQorSUNBUF9QSFlTSUNBTEhFSUdIVAorSUNBUF9QSFlTSUNBTFdJRFRICitJQ0FQX1BJWEVMRkxBVk9SCitTb3VyY2VzIHRoYXQgc3VwcGx5IGltYWdlIGluZm9ybWF0aW9uIG11c3Qgc3VwcG9ydCBER19DT05UUk9MIC8gREFUX0NBUEFCSUxJVFkgLworTVNHX0dFVCwgTVNHX0dFVENVUlJFTlQsIE1TR19HRVRERUZBVUxULCBNU0dfUkVTRVQgYW5kIE1TR19TRVQgb246CitJQ0FQX0JJVERFUFRICitJQ0FQX0JJVE9SREVSCitJQ0FQX1BJWEVMVFlQRQorSUNBUF9VTklUUworSUNBUF9YRkVSTUVDSAorSUNBUF9YUkVTT0xVVElPTgorSUNBUF9ZUkVTT0xVVElPTgorQWxsIFNvdXJjZXMgbXVzdCBpbXBsZW1lbnQgdGhlIGFkdmVydGlzZWQgZmVhdHVyZXMgc3VwcG9ydGVkIGJ5IHRoZWlyIGRldmljZXMuIFRoZXkgbXVzdAorbWFrZSB0aGVzZSBmZWF0dXJlcyBhdmFpbGFibGUgdG8gYXBwbGljYXRpb25zIHZpYSB0aGUgVFdBSU4gcHJvdG9jb2wuIEZvciBleGFtcGxlLCBhIFNvdXJjZQordGhhdHMgY29ubmVjdGVkIHRvIGEgZGV2aWNlIHRoYXQgaGFzIGFuIEFERiBtdXN0IHN1cHBvcnQgREdfQ09OVFJPTCAvCitEQVRfQ0FQQUJJTElUWSAvIE1TR19HRVQsIE1TR19HRVRDVVJSRU5ULCBNU0dfR0VUREVGQVVMVCBvbjoKK0NBUF9GRUVERVJFTkFCTEVECitDQVBfRkVFREVSTE9BREVECithbmQgREdfQ09OVFJPTCAvIERBVF9DQVBBQklMSVRZIC8gTVNHX0dFVCwgTVNHX0dFVENVUlJFTlQsCitNU0dfR0VUREVGQVVMVCwgTVNHX1JFU0VUIGFuZCBNU0dfU0VUIG9uOgorQ0FQX0FVVE9GRUVECitJZiB0aGUgQURGIGFsc28gc3VwcG9ydHMgZWplY3RpbmcgYW5kIHJld2luZGluZyBvZiBwYWdlcyB0aGVuIHRoZSBTb3VyY2Ugc2hvdWxkIGFsc28gc3VwcG9ydAorREdfQ09OVFJPTCAvIERBVF9DQVBBQklMSVRZIC8gTVNHX0dFVCwgTVNHX0dFVENVUlJFTlQsCitNU0dfR0VUREVGQVVMVCwgTVNHX1JFU0VUIGFuZCBNU0dfU0VUIG9uOgorQ0FQX0NMRUFSUEFHRQorQ0FQX1JFV0lORFBBR0UKKworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK0Zyb20gQXBwbGljYXRpb24gdG8gU291cmNlIE1hbmFnZXIgKENvbnRyb2wgSW5mb3JtYXRpb24pCisKK0RhdGEgR3JvdXAJCURhdGEgQXJndW1lbnQgVHlwZQlNZXNzYWdlCitER19DT05UUk9MCQlEQVRfSURFTlRJVFkgCQlNU0dfQ0xPU0VEUworCQkJCQkJTVNHX0dFVERFRkFVTFQKKwkJCQkJCU1TR19HRVRGSVJTVAorCQkJCQkJTVNHX0dFVE5FWFQKKwkJCQkJCU1TR19PUEVORFMKKwkJCQkJCU1TR19VU0VSU0VMRUNUCitER19DT05UUk9MCQlEQVRfUEFSRU5UCQlNU0dfQ0xPU0VEU00KKwkJCQkJCU1TR19PUEVORFNNCitER19DT05UUk9MCQlEQVRfU1RBVFVTCQlNU0dfR0VUCisKK0Zyb20gQXBwbGljYXRpb24gdG8gU291cmNlIChDb250cm9sIEluZm9ybWF0aW9uKQorRGF0YSBHcm91cAkJRGF0YSBBcmd1bWVudCBUeXBlIAlNZXNzYWdlCitER19DT05UUk9MCQlEQVRfQ0FQQUJJTElUWQkJTVNHX0dFVAorCQkJCQkJTVNHX0dFVENVUlJFTlQKKwkJCQkJCU1TR19HRVRERUZBVUxUCisJCQkJCQlNU0dfUVVFUllTVVBQT1JUCisJCQkJCQlNU0dfUkVTRVQKKwkJCQkJCU1TR19TRVQKK0RHX0NPTlRST0wJCURBVF9DVVNUT01EU0RBVEEJTVNHX0dFVAorCQkJCQkJTVNHX1NFVAorREdfQ09OVFJPTAkJREFUX0ZJTEVTWVNURU0JCU1TR19BVVRPTUFUSUNDQVBUVVJFCisJCQkJCQlESVJFQ1RPUlkKKwkJCQkJCU1TR19DSEFOR0VESVJFQ1RPUlkKKwkJCQkJCU1TR19DT1BZCisJCQkJCQlNU0dfQ1JFQVRFRElSRUNUT1JZCisJCQkJCQlNU0dfREVMRVRFCisJCQkJCQlNU0dfRk9STUFUTUVESUEKKwkJCQkJCU1TR19HRVRDTE9TRQorCQkJCQkJTVNHX0dFVEZJUlNURklMRQorCQkJCQkJTVNHX0dFVElORk8KKwkJCQkJCU1TR19HRVRORVhURklMRQorCQkJCQkJTVNHX1JFTkFNRQorREdfQ09OVFJPTAkJREFUX0VWRU5UCQlNU0dfUFJPQ0VTU0VWRU5UCitER19DT05UUk9MCQlEQVRfUEFTU1RIUlUJCU1TR19QQVNTVEhSVQorREdfQ09OVFJPTAkJREFUX1BFTkRJTkdYRkVSUwlNU0dfRU5EWEZFUgorCQkJCQkJTVNHX0dFVAorCQkJCQkJTVNHX1JFU0VUCisJCQkJCQlNU0dfU1RPUEZFRURFUgorREdfQ09OVFJPTAkJREFUX1NFVFVQRklMRVhGRVIJTVNHX0dFVAorCQkJCQkJTVNHX0dFVERFRkFVTFQKKwkJCQkJCU1TR19SRVNFVAorCQkJCQkJTVNHX1NFVAorREdfQ09OVFJPTAkJREFUX1NFVFVQRklMRVhGRVIyCU1TR19HRVQKKwkJCQkJCU1TR19HRVRERUZBVUxUCisJCQkJCQlNU0dfUkVTRVQKKwkJCQkJCU1TR19TRVQKK0RHX0NPTlRST0wJCURBVF9TRVRVUE1FTVhGRVIJTVNHX0dFVAorREdfQ09OVFJPTAkJREFUX1NUQVRVUwkJTVNHX0dFVAorREdfQ09OVFJPTAkJREFUX1VTRVJJTlRFUkZBQ0UJTVNHX0RJU0FCTEVEUworCQkJCQkJTVNHX0VOQUJMRURTCisJCQkJCQlNU0dfRU5BQkxFRFNVSU9OTFkKK0RHX0NPTlRST0wJCURBVF9YRkVSR1JPVVAJCU1TR19HRVQKKwkJCQkJCU1TR19TRVQKKworRnJvbSBBcHBsaWNhdGlvbiB0byBTb3VyY2UgKEltYWdlIEluZm9ybWF0aW9uKQorRGF0YSBHcm91cAkJRGF0YSBBcmd1bWVudCBUeXBlCU1lc3NhZ2UKK0RHX0lNQUdFCQlEQVRfQ0lFQ09MT1IJCU1TR19HRVQKK0RHX0lNQUdFCQlEQVRfRVhUSU1BR0VJTkZPCU1TR19HRVQKK0RHX0lNQUdFCQlEQVRfR1JBWVJFU1BPTlNFCU1TR19SRVNFVAorCQkJCQkJTVNHX1NFVAorREdfSU1BR0UJCURBVF9JTUFHRUZJTEVYRkVSCU1TR19HRVQKK0RHX0lNQUdFCQlEQVRfSU1BR0VJTkZPCQlNU0dfR0VUCitER19JTUFHRQkJREFUX0lNQUdFTEFZT1VUCQlNU0dfR0VUCisJCQkJCQlNU0dfR0VUREVGQVVMVAorCQkJCQkJTVNHX1JFU0VUCisJCQkJCQlNU0dfU0VUCitER19JTUFHRQkJREFUX0lNQUdFTUVNWEZFUglNU0dfR0VUCitER19JTUFHRQkJREFUX0lNQUdFTkFUSVZFWEZFUglNU0dfR0VUCitER19JTUFHRQkJREFUX0pQRUdDT01QUkVTU0lPTglNU0dfR0VUCisJCQkJCQlNU0dfR0VUREVGQVVMVAorCQkJCQkJTVNHX1JFU0VUCisJCQkJCQlNU0dfU0VUCitER19JTUFHRQkJREFUX1BBTEVUVEU4CQlNU0dfR0VUCisJCQkJCQlNU0dfR0VUREVGQVVMVAorCQkJCQkJTVNHX1JFU0VUCisJCQkJCQlNU0dfU0VUCitER19JTUFHRQkJREFUX1JHQlJFU1BPTlNFCQlNU0dfUkVTRVQKKwkJCQkJCU1TR19TRVQKKworRnJvbSBBcHBsaWNhdGlvbiB0byBTb3VyY2UgKEF1ZGlvIEluZm9ybWF0aW9uKQorRGF0YSBHcm91cAkJRGF0YSBBcmd1bWVudCBUeXBlCU1lc3NhZ2UKK0RHX0FVRElPCQlEQVRfQVVESU9GSUxFWEZFUglNU0dfR0VUCitER19BVURJTwkJREFUX0FVRElPSU5GTwkJTVNHX0dFVAorREdfQVVESU8JCURBVF9BVURJT05BVElWRVhGRVIJTVNHX0dFVAorCitGcm9tIFNvdXJjZSBNYW5hZ2VyIHRvIFNvdXJjZSAoQ29udHJvbCBJbmZvcm1hdGlvbikKK0RhdGEgR3JvdXAJCURhdGEgQXJndW1lbnQgVHlwZQlNZXNzYWdlCitER19DT05UUk9MCQlEQVRfSURFTlRJVFkJCU1TR19DTE9TRURTCisJCQkJCQlNU0dfR0VUCisJCQkJCQlNU0dfT1BFTkRTCisKK0Zyb20gU291cmNlIHRvIEFwcGxpY2F0aW9uIChDb250cm9sIEluZm9ybWF0aW9uIHZpYSB0aGUgU291cmNlIE1hbmFnZXIpCisoVXNlZCBieSBXaW5kb3dzIFNvdXJjZXMgb25seSkKK0RhdGEgR3JvdXAJCURhdGEgQXJndW1lbnQgVHlwZQlNZXNzYWdlCitER19DT05UUk9MCQlEQVRfTlVMTAkJTVNHX0NMT1NFRFNPSworCQkJCQkJTVNHX0NMT1NFRFNSRVEKKwkJCQkJCU1TR19ERVZJQ0VFVkVOVAorCQkJCQkJTVNHX1hGRVJSRUFEWQpkaWZmIC0tZ2l0IGEvZGxscy90d2Fpbi9jYXBhYmlsaXR5LmMgYi9kbGxzL3R3YWluL2NhcGFiaWxpdHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWM1ODQ1Ci0tLSAvZGV2L251bGwKKysrIGIvZGxscy90d2Fpbi9jYXBhYmlsaXR5LmMKQEAgLTAsMCArMSwyNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMCBDb3JlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlICJ3aW5iYXNlLmgiCisjaW5jbHVkZSAidHdhaW4uaCIKKyNpbmNsdWRlICJ0d2Fpbl9pLmgiCisjaW5jbHVkZSAid2luZS9kZWJ1Zy5oIgorCitXSU5FX0RFRkFVTFRfREVCVUdfQ0hBTk5FTCh0d2Fpbik7CisKK1RXX1VJTlQxNiBUV0FJTl9TYW5lQ2FwYWJpbGl0eSAoYWN0aXZlRFMgKnBTb3VyY2UsIHBUV19DQVBBQklMSVRZIHBDYXBhYmlsaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUV19VSU5UMTYgYWN0aW9uKQoreworICAgIFRXX1VJTlQxNiB0d0NDID0gVFdDQ19TVUNDRVNTOworCisgICAgVFJBQ0UoImNhcGFiaWxpdHk9JWQgYWN0aW9uPSVkXG4iLCBwQ2FwYWJpbGl0eS0+Q2FwLCBhY3Rpb24pOworCisgICAgc3dpdGNoIChwQ2FwYWJpbGl0eS0+Q2FwKQorICAgIHsKKyAgICAgICAgY2FzZSBDQVBfREVWSUNFRVZFTlQ6CisgICAgICAgIGNhc2UgQ0FQX0FMQVJNUzoKKyAgICAgICAgY2FzZSBDQVBfQUxBUk1WT0xVTUU6CisgICAgICAgIGNhc2UgQUNBUF9BVURJT0ZJTEVGT1JNQVQ6CisgICAgICAgIGNhc2UgQUNBUF9YRkVSTUVDSDoKKyAgICAgICAgY2FzZSBJQ0FQX0FVVE9NQVRJQ0JPUkRFUkRFVEVDVElPTjoKKyAgICAgICAgY2FzZSBJQ0FQX0FVVE9NQVRJQ0RFU0tFVzoKKyAgICAgICAgY2FzZSBJQ0FQX0FVVE9ESVNDQVJEQkxBTktQQUdFUzoKKyAgICAgICAgY2FzZSBJQ0FQX0FVVE9NQVRJQ1JPVEFURToKKyAgICAgICAgY2FzZSBJQ0FQX0ZMSVBST1RBVElPTjoKKyAgICAgICAgY2FzZSBDQVBfQVVUT01BVElDQ0FQVFVSRToKKyAgICAgICAgY2FzZSBDQVBfVElNRUJFRk9SRUZJUlNUQ0FQVFVSRToKKyAgICAgICAgY2FzZSBDQVBfVElNRUJFVFdFRU5DQVBUVVJFUzoKKyAgICAgICAgY2FzZSBDQVBfQVVUT1NDQU46CisgICAgICAgIGNhc2UgQ0FQX0NMRUFSQlVGRkVSUzoKKyAgICAgICAgY2FzZSBDQVBfTUFYQkFUQ0hCVUZGRVJTOgorICAgICAgICBjYXNlIElDQVBfQkFSQ09ERURFVEVDVElPTkVOQUJMRUQ6CisgICAgICAgIGNhc2UgSUNBUF9TVVBQT1JURURCQVJDT0RFVFlQRVM6CisgICAgICAgIGNhc2UgSUNBUF9CQVJDT0RFTUFYU0VBUkNIUFJJT1JJVElFUzoKKyAgICAgICAgY2FzZSBJQ0FQX0JBUkNPREVTRUFSQ0hQUklPUklUSUVTOgorICAgICAgICBjYXNlIElDQVBfQkFSQ09ERVNFQVJDSE1PREU6CisgICAgICAgIGNhc2UgSUNBUF9CQVJDT0RFTUFYUkVUUklFUzoKKyAgICAgICAgY2FzZSBJQ0FQX0JBUkNPREVUSU1FT1VUOgorICAgICAgICBjYXNlIENBUF9FWFRFTkRFRENBUFM6CisgICAgICAgIGNhc2UgQ0FQX1NVUFBPUlRFRENBUFM6CisgICAgICAgIGNhc2UgSUNBUF9GSUxURVI6CisgICAgICAgIGNhc2UgSUNBUF9HQU1NQToKKyAgICAgICAgY2FzZSBJQ0FQX1BMQU5BUkNIVU5LWToKKyAgICAgICAgY2FzZSBJQ0FQX0JJVE9SREVSQ09ERVM6CisgICAgICAgIGNhc2UgSUNBUF9DQ0lUVEtGQUNUT1I6CisgICAgICAgIGNhc2UgSUNBUF9DT01QUkVTU0lPTjoKKyAgICAgICAgY2FzZSBJQ0FQX0pQRUdQSVhFTFRZUEU6CisgICAgICAgIC8qY2FzZSBJQ0FQX0pQRUdRVUFMSVRZOiovCisgICAgICAgIGNhc2UgSUNBUF9QSVhFTEZMQVZPUkNPREVTOgorICAgICAgICBjYXNlIElDQVBfVElNRUZJTEw6CisgICAgICAgIGNhc2UgQ0FQX0RFVklDRU9OTElORToKKyAgICAgICAgY2FzZSBDQVBfREVWSUNFVElNRURBVEU6CisgICAgICAgIGNhc2UgQ0FQX1NFUklBTE5VTUJFUjoKKyAgICAgICAgY2FzZSBJQ0FQX0VYUE9TVVJFVElNRToKKyAgICAgICAgY2FzZSBJQ0FQX0ZMQVNIVVNFRDI6CisgICAgICAgIGNhc2UgSUNBUF9JTUFHRUZJTFRFUjoKKyAgICAgICAgY2FzZSBJQ0FQX0xBTVBTVEFURToKKyAgICAgICAgY2FzZSBJQ0FQX0xJR0hUUEFUSDoKKyAgICAgICAgY2FzZSBJQ0FQX05PSVNFRklMVEVSOgorICAgICAgICBjYXNlIElDQVBfT1ZFUlNDQU46CisgICAgICAgIGNhc2UgSUNBUF9QSFlTSUNBTEhFSUdIVDoKKyAgICAgICAgY2FzZSBJQ0FQX1BIWVNJQ0FMV0lEVEg6CisgICAgICAgIGNhc2UgSUNBUF9VTklUUzoKKyAgICAgICAgY2FzZSBJQ0FQX1pPT01GQUNUT1I6CisgICAgICAgIGNhc2UgQ0FQX1BSSU5URVI6CisgICAgICAgIGNhc2UgQ0FQX1BSSU5URVJFTkFCTEVEOgorICAgICAgICBjYXNlIENBUF9QUklOVEVSSU5ERVg6CisgICAgICAgIGNhc2UgQ0FQX1BSSU5URVJNT0RFOgorICAgICAgICBjYXNlIENBUF9QUklOVEVSU1RSSU5HOgorICAgICAgICBjYXNlIENBUF9QUklOVEVSU1VGRklYOgorICAgICAgICBjYXNlIENBUF9BVVRIT1I6CisgICAgICAgIGNhc2UgQ0FQX0NBUFRJT046CisgICAgICAgIGNhc2UgQ0FQX1RJTUVEQVRFOgorICAgICAgICBjYXNlIElDQVBfQVVUT0JSSUdIVDoKKyAgICAgICAgY2FzZSBJQ0FQX0JSSUdIVE5FU1M6CisgICAgICAgIGNhc2UgSUNBUF9DT05UUkFTVDoKKyAgICAgICAgY2FzZSBJQ0FQX0hJR0hMSUdIVDoKKyAgICAgICAgY2FzZSBJQ0FQX09SSUVOVEFUSU9OOgorICAgICAgICBjYXNlIElDQVBfUk9UQVRJT046CisgICAgICAgIGNhc2UgSUNBUF9TSEFET1c6CisgICAgICAgIGNhc2UgSUNBUF9YU0NBTElORzoKKyAgICAgICAgY2FzZSBJQ0FQX1lTQ0FMSU5HOgorICAgICAgICBjYXNlIElDQVBfQklUREVQVEg6CisgICAgICAgIGNhc2UgSUNBUF9CSVRERVBUSFJFRFVDVElPTjoKKyAgICAgICAgY2FzZSBJQ0FQX0JJVE9SREVSOgorICAgICAgICBjYXNlIElDQVBfQ1VTVEhBTEZUT05FOgorICAgICAgICBjYXNlIElDQVBfSEFMRlRPTkVTOgorICAgICAgICBjYXNlIElDQVBfUElYRUxGTEFWT1I6CisgICAgICAgIGNhc2UgSUNBUF9QSVhFTFRZUEU6CisgICAgICAgIGNhc2UgSUNBUF9USFJFU0hPTEQ6CisgICAgICAgIGNhc2UgQ0FQX0xBTkdVQUdFOgorICAgICAgICBjYXNlIElDQVBfRlJBTUVTOgorICAgICAgICBjYXNlIElDQVBfTUFYRlJBTUVTOgorICAgICAgICBjYXNlIElDQVBfU1VQUE9SVEVEU0laRVM6CisgICAgICAgIGNhc2UgQ0FQX0FVVE9GRUVEOgorICAgICAgICBjYXNlIENBUF9DTEVBUlBBR0U6CisgICAgICAgIGNhc2UgQ0FQX0ZFRURFUkFMSUdOTUVOVDoKKyAgICAgICAgY2FzZSBDQVBfRkVFREVSRU5BQkxFRDoKKyAgICAgICAgY2FzZSBDQVBfRkVFREVSTE9BREVEOgorICAgICAgICBjYXNlIENBUF9GRUVERVJPUkRFUjoKKyAgICAgICAgY2FzZSBDQVBfRkVFRFBBR0U6CisgICAgICAgIGNhc2UgQ0FQX1BBUEVSQklORElORzoKKyAgICAgICAgY2FzZSBDQVBfUEFQRVJERVRFQ1RBQkxFOgorICAgICAgICBjYXNlIENBUF9SRUFDUVVJUkVBTExPV0VEOgorICAgICAgICBjYXNlIENBUF9SRVdJTkRQQUdFOgorICAgICAgICBjYXNlIElDQVBfUEFUQ0hDT0RFREVURUNUSU9ORU5BQkxFRDoKKyAgICAgICAgY2FzZSBJQ0FQX1NVUFBPUlRFRFBBVENIQ09ERVRZUEVTOgorICAgICAgICBjYXNlIElDQVBfUEFUQ0hDT0RFTUFYU0VBUkNIUFJJT1JJVElFUzoKKyAgICAgICAgY2FzZSBJQ0FQX1BBVENIQ09ERVNFQVJDSFBSSU9SSVRJRVM6CisgICAgICAgIGNhc2UgSUNBUF9QQVRDSENPREVTRUFSQ0hNT0RFOgorICAgICAgICBjYXNlIElDQVBfUEFUQ0hDT0RFTUFYUkVUUklFUzoKKyAgICAgICAgY2FzZSBJQ0FQX1BBVENIQ09ERVRJTUVPVVQ6CisgICAgICAgIGNhc2UgQ0FQX0JBVFRFUllNSU5VVEVTOgorICAgICAgICBjYXNlIENBUF9CQVRURVJZUEVSQ0VOVEFHRToKKyAgICAgICAgY2FzZSBDQVBfUE9XRVJET1dOVElNRToKKyAgICAgICAgY2FzZSBDQVBfUE9XRVJTVVBQTFk6CisgICAgICAgIGNhc2UgSUNBUF9YTkFUSVZFUkVTT0xVVElPTjoKKyAgICAgICAgY2FzZSBJQ0FQX1hSRVNPTFVUSU9OOgorICAgICAgICBjYXNlIElDQVBfWU5BVElWRVJFU09MVVRJT046CisgICAgICAgIGNhc2UgSUNBUF9ZUkVTT0xVVElPTjoKKyAgICAgICAgICAgIHR3Q0MgPSBUV0NDX0NBUFVOU1VQUE9SVEVEOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ0FQX1hGRVJDT1VOVDoKKyAgICAgICAgICAgIC8qIFRoaXMgaXMgYSByZXF1aXJlZCBjYXBhYmlsaXR5IHRoYXQgZXZlcnkgc291cmNlIG5lZWQgdG8gCisgICAgICAgICAgICAgICBzdXBwb3J0IGJ1dCB3ZSBoYXZldid0IGltcGxlbWVudGVkIHlldC4gKi8KKyAgICAgICAgICAgIHR3Q0MgPSBUV0NDX1NVQ0NFU1M7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgLypjYXNlIElDQVBfQ09NUFJFU1NJT046Ki8KKyAgICAgICAgY2FzZSBJQ0FQX0lNQUdFRklMRUZPUk1BVDoKKyAgICAgICAgY2FzZSBJQ0FQX1RJTEVTOgorICAgICAgICAgICAgdHdDQyA9IFRXQ0NfQ0FQVU5TVVBQT1JURUQ7CisgICAgICAgICAgICBicmVhazsgCisgICAgICAgIGNhc2UgSUNBUF9YRkVSTUVDSDoKKyAgICAgICAgICAgIHR3Q0MgPSBUV0FJTl9JQ0FQWGZlck1lY2ggKHBTb3VyY2UsIHBDYXBhYmlsaXR5LCBhY3Rpb24pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSUNBUF9VTkRFRklORURJTUFHRVNJWkU6CisgICAgICAgIGNhc2UgQ0FQX0NBTUVSQVBSRVZJRVdVSToKKyAgICAgICAgY2FzZSBDQVBfRU5BQkxFRFNVSU9OTFk6CisgICAgICAgIGNhc2UgQ0FQX0lORElDQVRPUlM6CisgICAgICAgIGNhc2UgQ0FQX1VJQ09OVFJPTExBQkxFOgorICAgICAgICAgICAgdHdDQyA9IFRXQ0NfQ0FQVU5TVVBQT1JURUQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHR3Q0MgPSBUV1JDX0ZBSUxVUkU7CisgICAgICAgICAgICAKKyAgICB9CisKKyAgICByZXR1cm4gdHdDQzsKK30KKworVFdfQk9PTCBUV0FJTl9PbmVWYWx1ZVNldCAocFRXX0NBUEFCSUxJVFkgcENhcGFiaWxpdHksIFRXX1VJTlQzMiB2YWx1ZSkKK3sKKyAgICBwQ2FwYWJpbGl0eS0+aENvbnRhaW5lciA9IChUV19IQU5ETEUpR2xvYmFsQWxsb2MgKDAsIHNpemVvZihUV19PTkVWQUxVRSkpOworICAgIAorICAgIGlmIChwQ2FwYWJpbGl0eS0+aENvbnRhaW5lcikKKyAgICB7CisgICAgICAgIHBUV19PTkVWQUxVRSBwVmFsID0gR2xvYmFsTG9jayAoKEhHTE9CQUwpIHBDYXBhYmlsaXR5LT5oQ29udGFpbmVyKTsKKyAgICAgICAgcFZhbC0+SXRlbVR5cGUgPSBUV1RZX1VJTlQzMjsKKyAgICAgICAgcFZhbC0+SXRlbSA9IHZhbHVlOworICAgICAgICBHbG9iYWxVbmxvY2sgKChIR0xPQkFMKSBwQ2FwYWJpbGl0eS0+aENvbnRhaW5lcik7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHJldHVybiBGQUxTRTsKK30KKworVFdfQk9PTCBUV0FJTl9PbmVWYWx1ZUdldCAocFRXX0NBUEFCSUxJVFkgcENhcGFiaWxpdHksIFRXX1VJTlQzMiAqcFZhbHVlKQoreworICAgIHBUV19PTkVWQUxVRSBwVmFsID0gR2xvYmFsTG9jayAoKEhHTE9CQUwpIHBDYXBhYmlsaXR5LT5oQ29udGFpbmVyKTsKKworICAgIGlmIChwVmFsKQorICAgIHsKKyAgICAgICAgKnBWYWx1ZSA9IHBWYWwtPkl0ZW07CisgICAgICAgIEdsb2JhbFVubG9jayAoKEhHTE9CQUwpIHBDYXBhYmlsaXR5LT5oQ29udGFpbmVyKTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIEZBTFNFOworfQorIAorLyogSUNBUF9YRkVSTUVDSCAqLworVFdfVUlOVDE2IFRXQUlOX0lDQVBYZmVyTWVjaCAoYWN0aXZlRFMgKnBTb3VyY2UsIHBUV19DQVBBQklMSVRZIHBDYXBhYmlsaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFdfVUlOVDE2IGFjdGlvbikKK3sgCisgICAgVFJBQ0UoIklDQVBfWEZFUk1FQ0hcbiIpOworCisgICAgc3dpdGNoIChhY3Rpb24pCisgICAgeworICAgICAgICBjYXNlIE1TR19HRVQ6CisgICAgICAgICAgICBpZiAocENhcGFiaWxpdHktPkNvblR5cGUgPT0gVFdPTl9PTkVWQUxVRSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoIVRXQUlOX09uZVZhbHVlU2V0IChwQ2FwYWJpbGl0eSwgcFNvdXJjZS0+Y2FwWGZlck1lY2gpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gVFdDQ19MT1dNRU1PUlk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNU0dfU0VUOgorICAgICAgICAgICAgaWYgKHBDYXBhYmlsaXR5LT5Db25UeXBlID09IFRXT05fT05FVkFMVUUpCisgICAgICAgICAgICB7CisJCVRXX1VJTlQzMiB4ZmVybWVjaHRlbXA7CisgICAgICAgICAgICAgICAgaWYgKCFUV0FJTl9PbmVWYWx1ZUdldCAocENhcGFiaWxpdHksICZ4ZmVybWVjaHRlbXApKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gVFdDQ19MT1dNRU1PUlk7CisJCXBTb3VyY2UtPmNhcFhmZXJNZWNoID0geGZlcm1lY2h0ZW1wOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAocENhcGFiaWxpdHktPkNvblR5cGUgPT0gVFdPTl9FTlVNRVJBVElPTikKKyAgICAgICAgICAgIHsKKworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTVNHX0dFVENVUlJFTlQ6CisgICAgICAgICAgICBpZiAoIVRXQUlOX09uZVZhbHVlU2V0IChwQ2FwYWJpbGl0eSwgcFNvdXJjZS0+Y2FwWGZlck1lY2gpKQorICAgICAgICAgICAgICAgIHJldHVybiBUV0NDX0xPV01FTU9SWTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1TR19HRVRERUZBVUxUOgorICAgICAgICAgICAgaWYgKCFUV0FJTl9PbmVWYWx1ZVNldCAocENhcGFiaWxpdHksIFRXU1hfTkFUSVZFKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gVFdDQ19MT1dNRU1PUlk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNU0dfUkVTRVQ6CisgICAgICAgICAgICBwU291cmNlLT5jYXBYZmVyTWVjaCA9IFRXU1hfTkFUSVZFOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBUV0NDX1NVQ0NFU1M7Cit9CmRpZmYgLS1naXQgYS9kbGxzL3R3YWluL2RzX2F1ZGlvLmMgYi9kbGxzL3R3YWluL2RzX2F1ZGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTljOTY2YQotLS0gL2Rldi9udWxsCisrKyBiL2RsbHMvdHdhaW4vZHNfYXVkaW8uYwpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAgQ29yZWwgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSAidHdhaW4uaCIKKyNpbmNsdWRlICJ0d2Fpbl9pLmgiCisjaW5jbHVkZSAid2luZS9kZWJ1Zy5oIgorCitXSU5FX0RFRkFVTFRfREVCVUdfQ0hBTk5FTCh0d2Fpbik7CisKKy8qIERHX0FVRElPL0RBVF9BVURJT0ZJTEVYRkVSL01TR19HRVQgKi8KK1RXX1VJTlQxNiBUV0FJTl9BdWRpb0ZpbGVYZmVyR2V0IChwVFdfSURFTlRJVFkgcE9yaWdpbiwgcFRXX0lERU5USVRZIHBEZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRXX01FTVJFRiBwRGF0YSkKK3sKKyAgICBGSVhNRSAoInN0dWIhXG4iKTsKKworICAgIHJldHVybiBUV1JDX0ZBSUxVUkU7Cit9CisKKy8qIERHX0FVRElPL0RBVF9BVURJT0lORk8vTVNHX0dFVCAqLworVFdfVUlOVDE2IFRXQUlOX0F1ZGlvSW5mb0dldCAocFRXX0lERU5USVRZIHBPcmlnaW4sIHBUV19JREVOVElUWSBwRGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRXX01FTVJFRiBwRGF0YSkKK3sKKyAgICBGSVhNRSAoInN0dWIhXG4iKTsKKworICAgIHJldHVybiBUV1JDX0ZBSUxVUkU7Cit9CisKKy8qIERHX0FVRElPL0RBVF9BVURJT05BVElWRVhGRVIvTVNHX0dFVCAqLworVFdfVUlOVDE2IFRXQUlOX0F1ZGlvTmF0aXZlWGZlckdldCAocFRXX0lERU5USVRZIHBPcmlnaW4sIHBUV19JREVOVElUWSBwRGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRXX01FTVJFRiBwRGF0YSkKK3sKKyAgICBGSVhNRSAoInN0dWIhXG4iKTsKKworICAgIHJldHVybiBUV1JDX0ZBSUxVUkU7Cit9CisKZGlmZiAtLWdpdCBhL2RsbHMvdHdhaW4vZHNfY3RybC5jIGIvZGxscy90d2Fpbi9kc19jdHJsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJjZWI0MwotLS0gL2Rldi9udWxsCisrKyBiL2RsbHMvdHdhaW4vZHNfY3RybC5jCkBAIC0wLDAgKzEsNjk2IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAgQ29yZWwgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAidHdhaW4uaCIKKyNpbmNsdWRlICJ0d2Fpbl9pLmgiCisjaW5jbHVkZSAid2luZS9kZWJ1Zy5oIgorCitXSU5FX0RFRkFVTFRfREVCVUdfQ0hBTk5FTCh0d2Fpbik7CisKKy8qIERHX0NPTlRST0wvREFUX0NBUEFCSUxJVFkvTVNHX0dFVCAqLworVFdfVUlOVDE2IFRXQUlOX0NhcGFiaWxpdHlHZXQgKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFdfTUVNUkVGIHBEYXRhKQoreworICAgIFRXX1VJTlQxNiB0d1JDID0gVFdSQ19TVUNDRVNTLCB0d0NDID0gVFdDQ19TVUNDRVNTOworICAgIHBUV19DQVBBQklMSVRZIHBDYXBhYmlsaXR5ID0gKHBUV19DQVBBQklMSVRZKSBwRGF0YTsKKyAgICBhY3RpdmVEUyAqcFNvdXJjZSA9IFRXQUlOX0xvb2t1cFNvdXJjZSAocERlc3QpOworICAgIAorICAgIFRSQUNFKCJER19DT05UUk9ML0RBVF9DQVBBQklMSVRZL01TR19HRVRcbiIpOworICAgIAorICAgIGlmICghcERlc3QpCisgICAgeworICAgICAgICB0d1JDID0gVFdSQ19GQUlMVVJFOworICAgICAgICBEU01fdHdDQyA9IFRXQ0NfQkFEREVTVDsKKyAgICB9CisgICAgZWxzZSBpZiAocFNvdXJjZS0+Y3VycmVudFN0YXRlIDwgNCB8fCBwU291cmNlLT5jdXJyZW50U3RhdGUgPiA3KQorICAgIHsKKyAgICAgICAgdHdSQyA9IFRXUkNfRkFJTFVSRTsKKyAgICAgICAgcFNvdXJjZS0+dHdDQyA9IFRXQ0NfU0VRRVJST1I7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHR3Q0MgPSBUV0FJTl9TYW5lQ2FwYWJpbGl0eSAocFNvdXJjZSwgcENhcGFiaWxpdHksIE1TR19HRVQpOworICAgICAgICB0d1JDID0gKHR3Q0MgPT0gVFdDQ19TVUNDRVNTKT9UV1JDX1NVQ0NFU1M6VFdSQ19GQUlMVVJFOworICAgICAgICBwU291cmNlLT50d0NDID0gdHdDQzsgCisgICAgfQorCisgICAgcmV0dXJuIHR3UkM7Cit9CisKKy8qIERHX0NPTlRST0wvREFUX0NBUEFCSUxJVFkvTVNHX0dFVENVUlJFTlQgKi8KK1RXX1VJTlQxNiBUV0FJTl9DYXBhYmlsaXR5R2V0Q3VycmVudCAocFRXX0lERU5USVRZIHBPcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBUV19JREVOVElUWSBwRGVzdCxUV19NRU1SRUYgcERhdGEpCit7CisgICAgVFdfVUlOVDE2IHR3UkMgPSBUV1JDX1NVQ0NFU1MsIHR3Q0MgPSBUV0NDX1NVQ0NFU1M7CisgICAgcFRXX0NBUEFCSUxJVFkgcENhcGFiaWxpdHkgPSAocFRXX0NBUEFCSUxJVFkpIHBEYXRhOworICAgIGFjdGl2ZURTICpwU291cmNlID0gVFdBSU5fTG9va3VwU291cmNlIChwRGVzdCk7CisKKyAgICBUUkFDRSgiREdfQ09OVFJPTC9EQVRfQ0FQQUJJTElUWS9NU0dfR0VUQ1VSUkVOVFxuIik7CisKKyAgICBpZiAoIXBTb3VyY2UpCisgICAgeworICAgICAgICB0d1JDID0gVFdSQ19GQUlMVVJFOworICAgICAgICBEU01fdHdDQyA9IFRXQ0NfQkFEREVTVDsKKyAgICB9CisgICAgZWxzZSBpZiAocFNvdXJjZS0+Y3VycmVudFN0YXRlIDwgNCB8fCBwU291cmNlLT5jdXJyZW50U3RhdGUgPiA3KQorICAgIHsKKyAgICAgICAgdHdSQyA9IFRXUkNfRkFJTFVSRTsKKyAgICAgICAgcFNvdXJjZS0+dHdDQyA9IFRXQ0NfU0VRRVJST1I7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHR3Q0MgPSBUV0FJTl9TYW5lQ2FwYWJpbGl0eSAocFNvdXJjZSwgcENhcGFiaWxpdHksIE1TR19HRVRDVVJSRU5UKTsKKyAgICAgICAgdHdSQyA9ICh0d0NDID09IFRXQ0NfU1VDQ0VTUyk/VFdSQ19TVUNDRVNTOlRXUkNfRkFJTFVSRTsKKyAgICAgICAgcFNvdXJjZS0+dHdDQyA9IHR3Q0M7CisgICAgfSAKKworICAgIHJldHVybiB0d1JDOworfQorCisvKiBER19DT05UUk9ML0RBVF9DQVBBQklMSVRZL01TR19HRVRERUZBVUxUICovCitUV19VSU5UMTYgVFdBSU5fQ2FwYWJpbGl0eUdldERlZmF1bHQgKHBUV19JREVOVElUWSBwT3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwVFdfSURFTlRJVFkgcERlc3QsIFRXX01FTVJFRiBwRGF0YSkKK3sKKyAgICBUV19VSU5UMTYgdHdSQyA9IFRXUkNfU1VDQ0VTUywgdHdDQyA9IFRXQ0NfU1VDQ0VTUzsKKyAgICBwVFdfQ0FQQUJJTElUWSBwQ2FwYWJpbGl0eSA9IChwVFdfQ0FQQUJJTElUWSkgcERhdGE7CisgICAgYWN0aXZlRFMgKnBTb3VyY2UgPSBUV0FJTl9Mb29rdXBTb3VyY2UgKHBEZXN0KTsKKworICAgIFRSQUNFKCJER19DT05UUk9ML0RBVF9DQVBBQklMSVRZL01TR19HRVRERUZBVUxUXG4iKTsKKworICAgIGlmICghcERlc3QpCisgICAgeworICAgICAgICB0d1JDID0gVFdSQ19GQUlMVVJFOworICAgICAgICBEU01fdHdDQyA9IFRXQ0NfQkFEREVTVDsKKyAgICB9CisgICAgZWxzZSBpZiAocFNvdXJjZS0+Y3VycmVudFN0YXRlIDwgNCB8fCBwU291cmNlLT5jdXJyZW50U3RhdGUgPiA3KQorICAgIHsKKyAgICAgICAgdHdSQyA9IFRXUkNfRkFJTFVSRTsKKyAgICAgICAgcFNvdXJjZS0+dHdDQyA9IFRXQ0NfU0VRRVJST1I7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHR3Q0MgPSBUV0FJTl9TYW5lQ2FwYWJpbGl0eSAocFNvdXJjZSwgcENhcGFiaWxpdHksIE1TR19HRVRERUZBVUxUKTsKKyAgICAgICAgdHdSQyA9ICh0d0NDID09IFRXQ0NfU1VDQ0VTUyk/VFdSQ19TVUNDRVNTOlRXUkNfRkFJTFVSRTsKKyAgICAgICAgcFNvdXJjZS0+dHdDQyA9IHR3Q0M7CisgICAgfQorCisgICAgcmV0dXJuIHR3UkM7Cit9CisKKy8qIERHX0NPTlRST0wvREFUX0NBUEFCSUxJVFkvTVNHX1FVRVJZU1VQUE9SVCAqLworVFdfVUlOVDE2IFRXQUlOX0NhcGFiaWxpdHlRdWVyeVN1cHBvcnQgKHBUV19JREVOVElUWSBwT3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBUV19JREVOVElUWSBwRGVzdCwgVFdfTUVNUkVGIHBEYXRhKQoreworICAgIEZJWE1FICgic3R1YiFcbiIpOworCisgICAgcmV0dXJuIFRXUkNfRkFJTFVSRTsKK30KKworLyogREdfQ09OVFJPTC9EQVRfQ0FQQUJJTElUWS9NU0dfUkVTRVQgKi8KK1RXX1VJTlQxNiBUV0FJTl9DYXBhYmlsaXR5UmVzZXQgKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUV19NRU1SRUYgcERhdGEpCit7CisgICAgVFdfVUlOVDE2IHR3UkMgPSBUV1JDX1NVQ0NFU1MsIHR3Q0MgPSBUV0NDX1NVQ0NFU1M7CisgICAgcFRXX0NBUEFCSUxJVFkgcENhcGFiaWxpdHkgPSAocFRXX0NBUEFCSUxJVFkpIHBEYXRhOworICAgIGFjdGl2ZURTICpwU291cmNlID0gVFdBSU5fTG9va3VwU291cmNlIChwRGVzdCk7CisKKyAgICBUUkFDRSgiREdfQ09OVFJPTC9EQVRfQ0FQQUJJTElUWS9NU0dfUkVTRVRcbiIpOworCisgICAgaWYgKCFwRGVzdCkKKyAgICB7CisgICAgICAgIHR3UkMgPSBUV1JDX0ZBSUxVUkU7CisgICAgICAgIERTTV90d0NDID0gVFdDQ19CQURERVNUOworICAgIH0KKyAgICBlbHNlIGlmIChwU291cmNlLT5jdXJyZW50U3RhdGUgPCA0IHx8IHBTb3VyY2UtPmN1cnJlbnRTdGF0ZSA+IDcpCisgICAgeworICAgICAgICB0d1JDID0gVFdSQ19GQUlMVVJFOworICAgICAgICBwU291cmNlLT50d0NDID0gVFdDQ19TRVFFUlJPUjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdHdDQyA9IFRXQUlOX1NhbmVDYXBhYmlsaXR5IChwU291cmNlLCBwQ2FwYWJpbGl0eSwgTVNHX1JFU0VUKTsKKyAgICAgICAgdHdSQyA9ICh0d0NDID09IFRXQ0NfU1VDQ0VTUyk/VFdSQ19TVUNDRVNTOlRXUkNfRkFJTFVSRTsKKyAgICAgICAgcFNvdXJjZS0+dHdDQyA9IHR3Q0M7CisgICAgfQorCisgICAgcmV0dXJuIHR3UkM7Cit9CisKKy8qIERHX0NPTlRST0wvREFUX0NBUEFCSUxJVFkvTVNHX1NFVCAqLworVFdfVUlOVDE2IFRXQUlOX0NhcGFiaWxpdHlTZXQgKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRXX01FTVJFRiBwRGF0YSkKK3sKKyAgICBUV19VSU5UMTYgdHdSQyA9IFRXUkNfU1VDQ0VTUywgdHdDQyA9IFRXQ0NfU1VDQ0VTUzsKKyAgICBwVFdfQ0FQQUJJTElUWSBwQ2FwYWJpbGl0eSA9IChwVFdfQ0FQQUJJTElUWSkgcERhdGE7CisgICAgYWN0aXZlRFMgKnBTb3VyY2UgPSBUV0FJTl9Mb29rdXBTb3VyY2UgKHBEZXN0KTsKKworICAgIFRSQUNFICgiREdfQ09OVFJPTC9EQVRfQ0FQQUJJTElUWS9NU0dfU0VUXG4iKTsKKworICAgIGlmICghcFNvdXJjZSkKKyAgICB7CisgICAgICAgIHR3UkMgPSBUV1JDX0ZBSUxVUkU7CisgICAgICAgIERTTV90d0NDID0gVFdDQ19CQURERVNUOworICAgIH0KKyAgICBlbHNlIGlmIChwU291cmNlLT5jdXJyZW50U3RhdGUgIT0gNCkKKyAgICB7CisgICAgICAgIHR3UkMgPSBUV1JDX0ZBSUxVUkU7CisgICAgICAgIHBTb3VyY2UtPnR3Q0MgPSBUV0NDX1NFUUVSUk9SOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB0d0NDID0gVFdBSU5fU2FuZUNhcGFiaWxpdHkgKHBTb3VyY2UsIHBDYXBhYmlsaXR5LCBNU0dfU0VUKTsgCisgICAgICAgIHR3UkMgPSAodHdDQyA9PSBUV0NDX1NVQ0NFU1MpP1RXUkNfU1VDQ0VTUzpUV1JDX0ZBSUxVUkU7CisgICAgICAgIHBTb3VyY2UtPnR3Q0MgPSB0d0NDOworICAgIH0KKyAgICByZXR1cm4gdHdSQzsKK30KKworLyogREdfQ09OVFJPTC9EQVRfQ1VTVE9NRFNEQVRBL01TR19HRVQgKi8KK1RXX1VJTlQxNiBUV0FJTl9DdXN0b21EU0RhdGFHZXQgKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRXX01FTVJFRiBwRGF0YSkKK3sKKyAgICBGSVhNRSAoInN0dWIhXG4iKTsKKworICAgIHJldHVybiBUV1JDX0ZBSUxVUkU7Cit9CisKKy8qIERHX0NPTlRST0wvREFUX0NVU1RPTURTREFUQS9NU0dfU0VUICovCitUV19VSU5UMTYgVFdBSU5fQ3VzdG9tRFNEYXRhU2V0IChwVFdfSURFTlRJVFkgcE9yaWdpbiwgcFRXX0lERU5USVRZIHBEZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFdfTUVNUkVGIHBEYXRhKQoreworICAgIEZJWE1FICgic3R1YiFcbiIpOworCisgICAgcmV0dXJuIFRXUkNfRkFJTFVSRTsKK30KKworLyogREdfQ09OVFJPTC9EQVRfRklMRVNZU1RFTS9NU0dfQVVUT01BVElDQ0FQVFVSRURJUkVDVE9SWSAqLworVFdfVUlOVDE2IFRXQUlOX0F1dG9tYXRpY0NhcHR1cmVEaXJlY3RvcnkgKHBUV19JREVOVElUWSBwT3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBUV19JREVOVElUWSBwRGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUV19NRU1SRUYgcERhdGEpCit7CisgICAgRklYTUUgKCJzdHViIVxuIik7CisKKyAgICByZXR1cm4gVFdSQ19GQUlMVVJFOworfQorCisvKiBER19DT05UUk9ML0RBVF9GSUxFU1lTVEVNL01TR19DSEFOR0VESVJFQ1RPUlkgKi8KK1RXX1VJTlQxNiBUV0FJTl9DaGFuZ2VEaXJlY3RvcnkgKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUV19NRU1SRUYgcERhdGEpCit7CisgICAgRklYTUUgKCJzdHViIVxuIik7CisKKyAgICByZXR1cm4gVFdSQ19GQUlMVVJFOworfQorCisvKiBER19DT05UUk9ML0RBVF9GSUxFU1lTVEVNL01TR19DT1BZICovCitUV19VSU5UMTYgVFdBSU5fRmlsZVN5c3RlbUNvcHkgKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRXX01FTVJFRiBwRGF0YSkKK3sKKyAgICBGSVhNRSAoInN0dWIhXG4iKTsKKworICAgIHJldHVybiBUV1JDX0ZBSUxVUkU7Cit9CisKKy8qIERHX0NPTlRST0wvREFUX0ZJTEVTWVNURU0vTVNHX0NSRUFURURJUkVDVE9SWSAqLworVFdfVUlOVDE2IFRXQUlOX0NyZWF0ZURpcmVjdG9yeSAocFRXX0lERU5USVRZIHBPcmlnaW4sIHBUV19JREVOVElUWSBwRGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRXX01FTVJFRiBwRGF0YSkKK3sKKyAgICBGSVhNRSAoInN0dWIhXG4iKTsKKworICAgIHJldHVybiBUV1JDX0ZBSUxVUkU7Cit9CisKKy8qIERHX0NPTlRST0wvREFUX0ZJTEVTWVNURU0vTVNHX0RFTEVURSAqLworVFdfVUlOVDE2IFRXQUlOX0ZpbGVTeXN0ZW1EZWxldGUgKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFdfTUVNUkVGIHBEYXRhKQoreworICAgIEZJWE1FICgic3R1YiFcbiIpOworCisgICAgcmV0dXJuIFRXUkNfRkFJTFVSRTsKK30KKworLyogREdfQ09OVFJPTC9EQVRfRklMRVNZU1RFTS9NU0dfRk9STUFUTUVESUEgKi8KK1RXX1VJTlQxNiBUV0FJTl9Gb3JtYXRNZWRpYSAocFRXX0lERU5USVRZIHBPcmlnaW4sIHBUV19JREVOVElUWSBwRGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFdfTUVNUkVGIHBEYXRhKQoreworICAgIEZJWE1FICgic3R1YiFcbiIpOworCisgICAgcmV0dXJuIFRXUkNfRkFJTFVSRTsKK30KKworLyogREdfQ09OVFJPTC9EQVRfRklMRVNZU1RFTS9NU0dfR0VUQ0xPU0UgKi8KK1RXX1VJTlQxNiBUV0FJTl9GaWxlU3lzdGVtR2V0Q2xvc2UgKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUV19NRU1SRUYgcERhdGEpCit7CisgICAgRklYTUUgKCJzdHViIVxuIik7CisKKyAgICByZXR1cm4gVFdSQ19GQUlMVVJFOworfQorCisvKiBER19DT05UUk9ML0RBVF9GSUxFU1lTVEVNL01TR19HRVRGSVJTVEZJTEUgKi8KK1RXX1VJTlQxNiBUV0FJTl9GaWxlU3lzdGVtR2V0Rmlyc3RGaWxlIChwVFdfSURFTlRJVFkgcE9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwVFdfSURFTlRJVFkgcERlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFdfTUVNUkVGIHBEYXRhKQoreworICAgIEZJWE1FICgic3R1YiFcbiIpOworCisgICAgcmV0dXJuIFRXUkNfRkFJTFVSRTsKK30KKworLyogREdfQ09OVFJPTC9EQVRfRklMRVNZU1RFTS9NU0dfR0VUSU5GTyAqLworVFdfVUlOVDE2IFRXQUlOX0ZpbGVTeXN0ZW1HZXRJbmZvIChwVFdfSURFTlRJVFkgcE9yaWdpbiwgcFRXX0lERU5USVRZIHBEZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUV19NRU1SRUYgcERhdGEpCit7CisgICAgRklYTUUgKCJzdHViIVxuIik7CisKKyAgICByZXR1cm4gVFdSQ19GQUlMVVJFOworfQorCisvKiBER19DT05UUk9ML0RBVF9GSUxFU1lTVEVNL01TR19HRVRORVhURklMRSAqLworVFdfVUlOVDE2IFRXQUlOX0ZpbGVTeXN0ZW1HZXROZXh0RmlsZSAocFRXX0lERU5USVRZIHBPcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwVFdfSURFTlRJVFkgcERlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUV19NRU1SRUYgcERhdGEpCit7CisgICAgRklYTUUgKCJzdHViIVxuIik7CisKKyAgICByZXR1cm4gVFdSQ19GQUlMVVJFOworfQorCisvKiBER19DT05UUk9ML0RBVF9GSUxFU1lTVEVNL01TR19SRU5BTUUgKi8KK1RXX1VJTlQxNiBUV0FJTl9GaWxlU3lzdGVtUmVuYW1lIChwVFdfSURFTlRJVFkgcE9yaWdpbiwgcFRXX0lERU5USVRZIHBEZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRXX01FTVJFRiBwRGF0YSkKK3sKKyAgICBGSVhNRSAoInN0dWIhXG4iKTsKKworICAgIHJldHVybiBUV1JDX0ZBSUxVUkU7Cit9CisKKy8qIERHX0NPTlRST0wvREFUX0VWRU5UL01TR19QUk9DRVNTRVZFTlQgKi8KK1RXX1VJTlQxNiBUV0FJTl9Qcm9jZXNzRXZlbnQgKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUV19NRU1SRUYgcERhdGEpCit7CisgICAgVFdfVUlOVDE2IHR3UkMgPSBUV1JDX1NVQ0NFU1M7CisgICAgcFRXX0VWRU5UIHBFdmVudCA9IChwVFdfRVZFTlQpIHBEYXRhOworICAgIGFjdGl2ZURTICpwU291cmNlID0gVFdBSU5fTG9va3VwU291cmNlIChwRGVzdCk7CisKKyAgICBUUkFDRSgiREdfQ09OVFJPTC9EQVRfRVZFTlQvTVNHX1BST0NFU1NFVkVOVFxuIik7CisKKyAgICBpZiAoIXBTb3VyY2UpCisgICAgeworICAgICAgICAgdHdSQyA9IFRXUkNfRkFJTFVSRTsKKyAgICAgICAgIERTTV90d0NDID0gVFdDQ19CQURERVNUOworICAgIH0KKyAgICBlbHNlIGlmIChwU291cmNlLT5jdXJyZW50U3RhdGUgPCA1IHx8IHBTb3VyY2UtPmN1cnJlbnRTdGF0ZSA+IDcpCisgICAgeworICAgICAgICB0d1JDID0gVFdSQ19GQUlMVVJFOworICAgICAgICBwU291cmNlLT50d0NDID0gVFdDQ19TRVFFUlJPUjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKHBTb3VyY2UtPnBlbmRpbmdFdmVudC5UV01lc3NhZ2UgIT0gTVNHX05VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBFdmVudC0+VFdNZXNzYWdlID0gcFNvdXJjZS0+cGVuZGluZ0V2ZW50LlRXTWVzc2FnZTsKKyAgICAgICAgICAgIHBTb3VyY2UtPnBlbmRpbmdFdmVudC5UV01lc3NhZ2UgPSBNU0dfTlVMTDsKKyAgICAgICAgICAgIHR3UkMgPSBUV1JDX0RTRVZFTlQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBwRXZlbnQtPlRXTWVzc2FnZSA9IE1TR19OVUxMOyAgLyogbm8gbWVzc2FnZSB0byB0aGUgYXBwbGljYXRpb24gKi8KKyAgICAgICAgICAgIHR3UkMgPSBUV1JDX05PVERTRVZFTlQ7CisgICAgICAgIH0KKyAgICAgICAgcFNvdXJjZS0+dHdDQyA9IFRXQ0NfU1VDQ0VTUzsKKyAgICB9CisKKyAgICByZXR1cm4gdHdSQzsKK30KKworLyogREdfQ09OVFJPTC9EQVRfUEFTU1RIUlUvTVNHX1BBU1NUSFJVICovCitUV19VSU5UMTYgVFdBSU5fUGFzc1Rocm91Z2ggKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRXX01FTVJFRiBwRGF0YSkKK3sKKyAgICBGSVhNRSAoInN0dWIhXG4iKTsKKworICAgIHJldHVybiBUV1JDX0ZBSUxVUkU7Cit9CisKKy8qIERHX0NPTlRST0wvREFUX1BFTkRJTkdYRkVSUy9NU0dfRU5EWEZFUiAqLworVFdfVUlOVDE2IFRXQUlOX1BlbmRpbmdYZmVyc0VuZFhmZXIgKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFdfTUVNUkVGIHBEYXRhKQoreworICAgIFRXX1VJTlQxNiB0d1JDID0gVFdSQ19TVUNDRVNTOworICAgIHBUV19QRU5ESU5HWEZFUlMgcFBlbmRpbmdYZmVycyA9IChwVFdfUEVORElOR1hGRVJTKSBwRGF0YTsKKyAgICBhY3RpdmVEUyAqcFNvdXJjZSA9IFRXQUlOX0xvb2t1cFNvdXJjZSAocERhdGEpOworCisgICAgVFJBQ0UoIkRHX0NPTlRST0wvREFUX1BFTkRJTkdYRkVSUy9NU0dfRU5EWEZFUlxuIik7CisKKyAgICBpZiAoIXBTb3VyY2UpCisgICAgeworICAgICAgICB0d1JDID0gVFdSQ19GQUlMVVJFOworICAgICAgICBEU01fdHdDQyA9IFRXQ0NfQkFEREVTVDsKKyAgICB9CisgICAgZWxzZSBpZiAocFNvdXJjZS0+Y3VycmVudFN0YXRlICE9IDYgJiYgcFNvdXJjZS0+Y3VycmVudFN0YXRlICE9IDcpCisgICAgeworICAgICAgICB0d1JDID0gVFdSQ19GQUlMVVJFOworICAgICAgICBwU291cmNlLT50d0NDID0gVFdDQ19TRVFFUlJPUjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKHBQZW5kaW5nWGZlcnMtPkNvdW50ICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHBQZW5kaW5nWGZlcnMtPkNvdW50IC0tOworICAgICAgICAgICAgcFNvdXJjZS0+Y3VycmVudFN0YXRlID0gNjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHBTb3VyY2UtPmN1cnJlbnRTdGF0ZSA9IDU7CisgICAgICAgICAgICAvKiBOb3RpZnkgdGhlIGFwcGxpY2F0aW9uIHRoYXQgaXQgY2FuIGNsb3NlIHRoZSBkYXRhIHNvdXJjZSAqLworICAgICAgICAgICAgcFNvdXJjZS0+cGVuZGluZ0V2ZW50LlRXTWVzc2FnZSA9IE1TR19DTE9TRURTUkVROworICAgICAgICB9CisgICAgICAgIHR3UkMgPSBUV1JDX1NVQ0NFU1M7CisgICAgICAgIHBTb3VyY2UtPnR3Q0MgPSBUV0NDX1NVQ0NFU1M7CisgICAgfQorCisgICAgcmV0dXJuIHR3UkM7Cit9CisKKy8qIERHX0NPTlRST0wvREFUX1BFTkRJTkdYRkVSUy9NU0dfR0VUICovCitUV19VSU5UMTYgVFdBSU5fUGVuZGluZ1hmZXJzR2V0IChwVFdfSURFTlRJVFkgcE9yaWdpbiwgcFRXX0lERU5USVRZIHBEZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFdfTUVNUkVGIHBEYXRhKQoreworICAgIFRXX1VJTlQxNiB0d1JDID0gVFdSQ19TVUNDRVNTOworICAgIHBUV19QRU5ESU5HWEZFUlMgcFBlbmRpbmdYZmVycyA9IChwVFdfUEVORElOR1hGRVJTKSBwRGF0YTsKKyAgICBhY3RpdmVEUyAqcFNvdXJjZSA9IFRXQUlOX0xvb2t1cFNvdXJjZSAocERlc3QpOworCisgICAgVFJBQ0UoIkRHX0NPTlRST0wvREFUX1BFTkRJTkdYRkVSUy9NU0dfR0VUXG4iKTsKKworICAgIGlmICghcFNvdXJjZSkKKyAgICB7CisgICAgICAgIHR3UkMgPSBUV1JDX0ZBSUxVUkU7CisgICAgICAgIERTTV90d0NDID0gVFdDQ19CQURERVNUOworICAgIH0KKyAgICBlbHNlIGlmIChwU291cmNlLT5jdXJyZW50U3RhdGUgPCA0IHx8IHBTb3VyY2UtPmN1cnJlbnRTdGF0ZSA+IDcpCisgICAgeworICAgICAgICB0d1JDID0gVFdSQ19GQUlMVVJFOworICAgICAgICBEU01fdHdDQyA9IFRXQ0NfU0VRRVJST1I7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8qIEZJWE1FOiB3ZSBzaG91bGRuJ3QgcmV0dXJuIDEgaGVyZSAqLworICAgICAgICBwUGVuZGluZ1hmZXJzLT5Db3VudCA9IDE7CisgICAgICAgIHR3UkMgPSBUV1JDX1NVQ0NFU1M7CisgICAgICAgIHBTb3VyY2UtPnR3Q0MgPSBUV0NDX1NVQ0NFU1M7CisgICAgfQorCisgICAgcmV0dXJuIHR3UkM7Cit9CisKKy8qIERHX0NPTlRST0wvREFUX1BFTkRJTkdYRkVSUy9NU0dfUkVTRVQgKi8KK1RXX1VJTlQxNiBUV0FJTl9QZW5kaW5nWGZlcnNSZXNldCAocFRXX0lERU5USVRZIHBPcmlnaW4sIHBUV19JREVOVElUWSBwRGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFdfTUVNUkVGIHBEYXRhKQoreworICAgIFRXX1VJTlQxNiB0d1JDID0gVFdSQ19TVUNDRVNTOworICAgIHBUV19QRU5ESU5HWEZFUlMgcFBlbmRpbmdYZmVycyA9IChwVFdfUEVORElOR1hGRVJTKSBwRGF0YTsKKyAgICBhY3RpdmVEUyAqcFNvdXJjZSA9IFRXQUlOX0xvb2t1cFNvdXJjZSAocERlc3QpOworCisgICAgVFJBQ0UoIkRHX0NPTlRST0wvREFUX1BFTkRJTkdYRkVSUy9NU0dfUkVTRVRcbiIpOworCisgICAgaWYgKCFwU291cmNlKQorICAgIHsKKyAgICAgICAgdHdSQyA9IFRXUkNfRkFJTFVSRTsKKyAgICAgICAgRFNNX3R3Q0MgPSBUV0NDX0JBRERFU1Q7CisgICAgfQorICAgIGVsc2UgaWYgKHBTb3VyY2UtPmN1cnJlbnRTdGF0ZSAhPSA2KQorICAgIHsKKyAgICAgICAgdHdSQyA9IFRXUkNfRkFJTFVSRTsKKyAgICAgICAgRFNNX3R3Q0MgPSBUV0NDX1NFUUVSUk9SOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBwUGVuZGluZ1hmZXJzLT5Db3VudCA9IDA7CisgICAgICAgIHBTb3VyY2UtPmN1cnJlbnRTdGF0ZSA9IDU7CisgICAgICAgIHR3UkMgPSBUV1JDX1NVQ0NFU1M7CisgICAgICAgIHBTb3VyY2UtPnR3Q0MgPSBUV0NDX1NVQ0NFU1M7CisgICAgfQorCisgICAgcmV0dXJuIHR3UkM7Cit9CisKKy8qIERHX0NPTlRST0wvREFUX1BFTkRJTkdYRkVSUy9NU0dfU1RPUEZFRURFUiAqLworVFdfVUlOVDE2IFRXQUlOX1BlbmRpbmdYZmVyc1N0b3BGZWVkZXIgKHBUV19JREVOVElUWSBwT3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBUV19JREVOVElUWSBwRGVzdCwgVFdfTUVNUkVGIHBEYXRhKQoreworICAgIEZJWE1FICgic3R1YiFcbiIpOworCisgICAgcmV0dXJuIFRXUkNfRkFJTFVSRTsKK30KKworLyogREdfQ09OVFJPTC9EQVRfU0VUVVBGSUxFWEZFUi9NU0dfR0VUICovCitUV19VSU5UMTYgVFdBSU5fU2V0dXBGaWxlWGZlckdldCAocFRXX0lERU5USVRZIHBPcmlnaW4sIHBUV19JREVOVElUWSBwRGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUV19NRU1SRUYgcERhdGEpCit7CisgICAgRklYTUUgKCJzdHViIVxuIik7CisKKyAgICByZXR1cm4gVFdSQ19GQUlMVVJFOworfQorCisvKiBER19DT05UUk9ML0RBVF9TRVRVUFhGRVIvTVNHX0dFVERFRkFVTFQgKi8KK1RXX1VJTlQxNiBUV0FJTl9TZXR1cEZpbGVYZmVyR2V0RGVmYXVsdCAocFRXX0lERU5USVRZIHBPcmlnaW4sIHBUV19JREVOVElUWSBwRGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFdfTUVNUkVGIHBEYXRhKQoreworICAgIEZJWE1FICgic3R1YiFcbiIpOworCisgICAgcmV0dXJuIFRXUkNfRkFJTFVSRTsKK30KKworCisvKiBER19DT05UUk9ML0RBVF9TRVRVUEZJTEVYRkVSL01TR19SRVNFVCAqLworVFdfVUlOVDE2IFRXQUlOX1NldHVwRmlsZVhmZXJSZXNldCAocFRXX0lERU5USVRZIHBPcmlnaW4sIHBUV19JREVOVElUWSBwRGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRXX01FTVJFRiBwRGF0YSkKK3sKKyAgICBGSVhNRSAoInN0dWIhXG4iKTsKKworICAgIHJldHVybiBUV1JDX0ZBSUxVUkU7Cit9CisKKy8qIERHX0NPTlRST0wvREFUX1NFVFVQRklMRVhGRVIvTVNHX1NFVCAqLworVFdfVUlOVDE2IFRXQUlOX1NldHVwRmlsZVhmZXJTZXQgKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFdfTUVNUkVGIHBEYXRhKQoreworICAgIEZJWE1FICgic3R1YiFcbiIpOworCisgICAgcmV0dXJuIFRXUkNfRkFJTFVSRTsKK30KKworLyogREdfQ09OVFJPTC9EQVRfU0VUVVBGSUxFWEZFUjIvTVNHX0dFVCAqLworVFdfVUlOVDE2IFRXQUlOX1NldHVwRmlsZVhmZXIyR2V0IChwVFdfSURFTlRJVFkgcE9yaWdpbiwgcFRXX0lERU5USVRZIHBEZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUV19NRU1SRUYgcERhdGEpCit7CisgICAgRklYTUUgKCJzdHViIVxuIik7CisKKyAgICByZXR1cm4gVFdSQ19GQUlMVVJFOworfQorCisvKiBER19DT05UUk9ML0RBVF9TRVRVUEZJTEVYRkVSMi9NU0dfR0VUREVGQVVMVCAqLworVFdfVUlOVDE2IFRXQUlOX1NldHVwRmlsZVhmZXIyR2V0RGVmYXVsdCAocFRXX0lERU5USVRZIHBPcmlnaW4sIHBUV19JREVOVElUWSBwRGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFdfTUVNUkVGIHBEYXRhKQoreworICAgIEZJWE1FICgic3R1YiFcbiIpOworCisgICAgcmV0dXJuIFRXUkNfRkFJTFVSRTsKK30KKworLyogREdfQ09OVFJPTC9EQVRfU0VUVVBGSUxFWEZFUjIvTVNHX1JFU0VUICovCitUV19VSU5UMTYgVFdBSU5fU2V0dXBGaWxlWGZlcjJSZXNldCAocFRXX0lERU5USVRZIHBPcmlnaW4sIHBUV19JREVOVElUWSBwRGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUV19NRU1SRUYgcERhdGEpCit7CisgICAgRklYTUUgKCJzdHViIVxuIik7CisKKyAgICByZXR1cm4gVFdSQ19GQUlMVVJFOworfQorCisvKiBER19DT05UUk9ML0RBVF9TRVRVUEZJTEVYRkVSMi9NU0dfU0VUICovCitUV19VSU5UMTYgVFdBSU5fU2V0dXBGaWxlWGZlcjJTZXQgKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFdfTUVNUkVGIHBEYXRhKQoreworICAgIEZJWE1FICgic3R1YiFcbiIpOworCisgICAgcmV0dXJuIFRXUkNfRkFJTFVSRTsKK30KKworLyogREdfQ09OVFJPTC9EQVRfU0VUVVBNRU1YRkVSL01TR19HRVQgKi8KK1RXX1VJTlQxNiBUV0FJTl9TZXR1cE1lbVhmZXJHZXQgKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFdfTUVNUkVGIHBEYXRhKQoreworICAgIEZJWE1FICgic3R1YiFcbiIpOworCisgICAgcmV0dXJuIFRXUkNfRkFJTFVSRTsKK30KKworLyogREdfQ09OVFJPTC9EQVRfU1RBVFVTL01TR19HRVQgKi8KK1RXX1VJTlQxNiBUV0FJTl9HZXREU1N0YXR1cyAocFRXX0lERU5USVRZIHBPcmlnaW4sIHBUV19JREVOVElUWSBwRGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFdfTUVNUkVGIHBEYXRhKQoreworICAgIFRXX1VJTlQxNiB0d1JDID0gVFdSQ19GQUlMVVJFOworICAgIHBUV19TVEFUVVMgcFNvdXJjZVN0YXR1cyA9IChwVFdfU1RBVFVTKSBwRGF0YTsKKyAgICBhY3RpdmVEUyAqcFNvdXJjZSA9IFRXQUlOX0xvb2t1cFNvdXJjZSAocERlc3QpOworCisgICAgVFJBQ0UgKCJER19DT05UUk9ML0RBVF9TVEFUVVMvTVNHX0dFVFxuIik7CisKKyAgICBpZiAoIXBTb3VyY2UpCisgICAgeworICAgICAgICB0d1JDID0gVFdSQ19GQUlMVVJFOworICAgICAgICBEU01fdHdDQyA9IFRXQ0NfQkFEREVTVDsKKyAgICAgICAgcFNvdXJjZVN0YXR1cy0+Q29uZGl0aW9uQ29kZSA9IFRXQ0NfQkFEREVTVDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdHdSQyA9IFRXUkNfU1VDQ0VTUzsKKyAgICAgICAgcFNvdXJjZVN0YXR1cy0+Q29uZGl0aW9uQ29kZSA9IHBTb3VyY2UtPnR3Q0M7CisgICAgICAgIC8qIFJlc2V0IHRoZSBjb25kaXRpb24gY29kZSAqLworICAgICAgICBwU291cmNlLT50d0NDID0gVFdDQ19TVUNDRVNTOworICAgIH0KKyAKKyAgICByZXR1cm4gdHdSQzsKK30KKworLyogREdfQ09OVFJPTC9EQVRfVVNFUklOVEVSRkFDRS9NU0dfRElTQUJMRURTICovCitUV19VSU5UMTYgVFdBSU5fRGlzYWJsZURTVXNlckludGVyZmFjZSAocFRXX0lERU5USVRZIHBPcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFRXX0lERU5USVRZIHBEZXN0LCBUV19NRU1SRUYgcERhdGEpCit7CisgICAgVFdfVUlOVDE2IHR3UkMgPSBUV1JDX1NVQ0NFU1M7CisgICAgcFRXX1VTRVJJTlRFUkZBQ0UgcFVzZXJJbnRlcmZhY2UgPSAocFRXX1VTRVJJTlRFUkZBQ0UpIHBEYXRhOworICAgIGFjdGl2ZURTICpwU291cmNlID0gVFdBSU5fTG9va3VwU291cmNlIChwRGVzdCk7CisKKyAgICBUUkFDRSAoIkRHX0NPTlRST0wvREFUX1VTRVJJTlRFUkZBQ0UvTVNHX0RJU0FCTEVEU1xuIik7CisKKyAgICBpZiAoIXBTb3VyY2UpCisgICAgeworICAgICAgICB0d1JDID0gVFdSQ19GQUlMVVJFOworICAgICAgICBEU01fdHdDQyA9IFRXQ0NfQkFEREVTVDsKKyAgICB9CisgICAgZWxzZSBpZiAocFNvdXJjZS0+Y3VycmVudFN0YXRlICE9IDUpCisgICAgeworICAgICAgICB0d1JDID0gVFdSQ19GQUlMVVJFOworICAgICAgICBwU291cmNlLT50d0NDID0gVFdDQ19TRVFFUlJPUjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcFNvdXJjZS0+Y3VycmVudFN0YXRlID0gNDsKKyAgICAgICAgdHdSQyA9IFRXUkNfU1VDQ0VTUzsKKyAgICAgICAgcFNvdXJjZS0+dHdDQyA9IFRXQ0NfU1VDQ0VTUzsKKyAgICB9CisKKyAgICByZXR1cm4gdHdSQzsKK30KKworLyogREdfQ09OVFJPTC9EQVRfVVNFUklOVEVSRkFDRS9NU0dfRU5BQkxFRFMgKi8KK1RXX1VJTlQxNiBUV0FJTl9FbmFibGVEU1VzZXJJbnRlcmZhY2UgKHBUV19JREVOVElUWSBwT3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFRXX0lERU5USVRZIHBEZXN0LCBUV19NRU1SRUYgcERhdGEpCit7CisgICAgVFdfVUlOVDE2IHR3UkMgPSBUV1JDX1NVQ0NFU1M7CisgICAgcFRXX1VTRVJJTlRFUkZBQ0UgcFVzZXJJbnRlcmZhY2UgPSAocFRXX1VTRVJJTlRFUkZBQ0UpIHBEYXRhOworICAgIGFjdGl2ZURTICpwU291cmNlID0gVFdBSU5fTG9va3VwU291cmNlIChwRGVzdCk7CisgICAKKyAgICBUUkFDRSAoIkRHX0NPTlRST0wvREFUX1VTRVJJTlRFUkZBQ0UvTVNHX0VOQUJMRURTXG4iKTsKKyAKKyAgICBpZiAoIXBTb3VyY2UpCisgICAgeworICAgICAgICB0d1JDID0gVFdSQ19GQUlMVVJFOworICAgICAgICBEU01fdHdDQyA9IFRXQ0NfQkFEREVTVDsKKyAgICB9CisgICAgZWxzZSBpZiAocFNvdXJjZS0+Y3VycmVudFN0YXRlICE9IDQpCisgICAgeworICAgICAgICB0d1JDID0gVFdSQ19GQUlMVVJFOworICAgICAgICBwU291cmNlLT50d0NDID0gVFdDQ19TRVFFUlJPUjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKHBVc2VySW50ZXJmYWNlLT5TaG93VUkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBTb3VyY2UtPmN1cnJlbnRTdGF0ZSA9IDU7IC8qIFRyYW5zaXRpb25zIHRvIHN0YXRlIDUgKi8gCisgICAgICAgICAgICAvKiBGSVhNRTogd2Ugc2hvdWxkIHJlcGxhY2UgeHNjYW5pbWFnZSB3aXRoIG91ciBvd24gZGV2aWNlIFVJICovCisgICAgICAgICAgICBzeXN0ZW0gKCJ4c2NhbmltYWdlIik7CisgICAgICAgICAgICBwU291cmNlLT5jdXJyZW50U3RhdGUgPSA2OworICAgICAgICAgICAgcFNvdXJjZS0+cGVuZGluZ0V2ZW50LlRXTWVzc2FnZSA9IE1TR19YRkVSUkVBRFk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvKiBubyBVSSB3aWxsIGJlIGRpc3BsYXllZCwgc28gc291cmNlIGlzIHJlYWR5IHRvIHRyYW5zZmVyIGRhdGEgKi8KKyAgICAgICAgICAgIHBTb3VyY2UtPnBlbmRpbmdFdmVudC5UV01lc3NhZ2UgPSBNU0dfWEZFUlJFQURZOyAKKyAgICAgICAgICAgIHBTb3VyY2UtPmN1cnJlbnRTdGF0ZSA9IDY7IC8qIFRyYW5zaXRpb25zIHRvIHN0YXRlIDYgZGlyZWN0bHkgKi8KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcFNvdXJjZS0+aHduZE93bmVyID0gcFVzZXJJbnRlcmZhY2UtPmhQYXJlbnQ7CisgICAgICAgIHR3UkMgPSBUV1JDX1NVQ0NFU1M7CisgICAgICAgIHBTb3VyY2UtPnR3Q0MgPSBUV0NDX1NVQ0NFU1M7CisgICAgfQorCisgICAgcmV0dXJuIHR3UkM7Cit9CisKKy8qIERHX0NPTlRST0wvREFUX1VTRVJJTlRFUkZBQ0UvTVNHX0VOQUJMRURTVUlPTkxZICovCitUV19VSU5UMTYgVFdBSU5fRW5hYmxlRFNVSU9ubHkgKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRXX01FTVJFRiBwRGF0YSkKK3sKKyAgICBUV19VSU5UMTYgdHdSQyA9IFRXUkNfU1VDQ0VTUzsKKyAgICBwVFdfVVNFUklOVEVSRkFDRSBwVXNlckludGVyZmFjZSA9IChwVFdfVVNFUklOVEVSRkFDRSkgcERhdGE7CisgICAgYWN0aXZlRFMgKnBTb3VyY2UgPSBUV0FJTl9Mb29rdXBTb3VyY2UgKHBEZXN0KTsKKworICAgIFRSQUNFKCJER19DT05UUk9ML0RBVF9VU0VSSU5URVJGQUNFL01TR19FTkFCTEVEU1VJT05MWVxuIik7CisKKyAgICBpZiAoIXBTb3VyY2UpCisgICAgeworICAgICAgICB0d1JDID0gVFdSQ19GQUlMVVJFOworICAgICAgICBEU01fdHdDQyA9IFRXQ0NfQkFEREVTVDsKKyAgICB9CisgICAgZWxzZSBpZiAocFNvdXJjZS0+Y3VycmVudFN0YXRlICE9IDQpCisgICAgeworICAgICAgICB0d1JDID0gVFdSQ19GQUlMVVJFOworICAgICAgICBwU291cmNlLT50d0NDID0gVFdDQ19TRVFFUlJPUjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogRklYTUU6IHdlIHNob3VsZCByZXBsYWNlIHhzY2FuaW1hZ2Ugd2l0aCBvdXIgb3duIFVJICovCisgICAgICAgIHN5c3RlbSAoInhzY2FuaW1hZ2UiKTsKKyAgICAgICAgcFNvdXJjZS0+Y3VycmVudFN0YXRlID0gNTsKKyAgICAgICAgdHdSQyA9IFRXUkNfU1VDQ0VTUzsKKyAgICAgICAgcFNvdXJjZS0+dHdDQyA9IFRXQ0NfU1VDQ0VTUzsgCisgICAgfQorCisgICAgcmV0dXJuIHR3UkM7Cit9CisKKy8qIERHX0NPTlRST0wvREFUX1hGRVJHUk9VUC9NU0dfR0VUICovCitUV19VSU5UMTYgVFdBSU5fWGZlckdyb3VwR2V0IChwVFdfSURFTlRJVFkgcE9yaWdpbiwgcFRXX0lERU5USVRZIHBEZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFdfTUVNUkVGIHBEYXRhKQoreworICAgIEZJWE1FICgic3R1YiFcbiIpOworCisgICAgcmV0dXJuIFRXUkNfRkFJTFVSRTsKK30KKworLyogREdfQ09OVFJPTC9EQVRfWEZFUkdST1VQL01TR19TRVQgKi8KK1RXX1VJTlQxNiBUV0FJTl9YZmVyR3JvdXBTZXQgKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFdfTUVNUkVGIHBEYXRhKQoreworICAgIEZJWE1FICgic3R1YiFcbiIpOworCisgICAgcmV0dXJuIFRXUkNfRkFJTFVSRTsKK30KZGlmZiAtLWdpdCBhL2RsbHMvdHdhaW4vZHNfaW1hZ2UuYyBiL2RsbHMvdHdhaW4vZHNfaW1hZ2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzc5MjFlCi0tLSAvZGV2L251bGwKKysrIGIvZGxscy90d2Fpbi9kc19pbWFnZS5jCkBAIC0wLDAgKzEsMzc3IEBACisvKgorICogQ29weXJpZ2h0IDIwMDAgQ29yZWwgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJ3aW5iYXNlLmgiCisjaW5jbHVkZSAid2luZ2RpLmgiCisjaW5jbHVkZSAid2ludXNlci5oIgorI2luY2x1ZGUgInR3YWluLmgiCisjaW5jbHVkZSAidHdhaW5faS5oIgorI2luY2x1ZGUgIndpbmUvZGVidWcuaCIKKworV0lORV9ERUZBVUxUX0RFQlVHX0NIQU5ORUwodHdhaW4pOworCisvKiBER19JTUFHRS9EQVRfQ0lFQ09MT1IvTVNHX0dFVCAqLworVFdfVUlOVDE2IFRXQUlOX0NJRUNvbG9yR2V0IChwVFdfSURFTlRJVFkgcE9yaWdpbiwgcFRXX0lERU5USVRZIHBEZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUV19NRU1SRUYgcERhdGEpCit7CisgICAgRklYTUUgKCJzdHViIVxuIik7CisKKyAgICByZXR1cm4gVFdSQ19GQUlMVVJFOworfQorCisvKiBER19JTUFHRS9EQVRfRVhUSU1BR0VJTkZPL01TR19HRVQgKi8KK1RXX1VJTlQxNiBUV0FJTl9FeHRJbWFnZUluZm9HZXQgKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUV19NRU1SRUYgcERhdGEpCit7CisgICAgRklYTUUgKCJzdHViIVxuIik7CisKKyAgICByZXR1cm4gVFdSQ19GQUlMVVJFOworfQorCisvKiBER19JTUFHRS9EQVRfR1JBWVJFU1BPTlNFL01TR19SRVNFVCAqLworVFdfVUlOVDE2IFRXQUlOX0dyYXlSZXNwb25zZVJlc2V0IChwVFdfSURFTlRJVFkgcE9yaWdpbiwgcFRXX0lERU5USVRZIHBEZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUV19NRU1SRUYgcERhdGEpCit7CisgICAgRklYTUUgKCJzdHViIVxuIik7CisKKyAgICByZXR1cm4gVFdSQ19GQUlMVVJFOworfQorCisvKiBER19JTUFHRS9EQVRfR1JBWVJFU1BPTlNFL01TR19TRVQgKi8KK1RXX1VJTlQxNiBUV0FJTl9HcmF5UmVzcG9uc2VTZXQgKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUV19NRU1SRUYgcERhdGEpCit7CisgICAgRklYTUUgKCJzdHViIVxuIik7CisKKyAgICByZXR1cm4gVFdSQ19GQUlMVVJFOworfQorCisvKiBER19JTUFHRS9EQVRfSU1BR0VGSUxFWEZFUi9NU0dfR0VUICovCitUV19VSU5UMTYgVFdBSU5fSW1hZ2VGaWxlWGZlckdldCAocFRXX0lERU5USVRZIHBPcmlnaW4sIHBUV19JREVOVElUWSBwRGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUV19NRU1SRUYgcERhdGEpCit7CisgICAgRklYTUUgKCJzdHViIVxuIik7CisKKyAgICByZXR1cm4gVFdSQ19GQUlMVVJFOworfQorCisvKiBER19JTUFHRS9EQVRfSU1BR0VJTkZPL01TR19HRVQgKi8KK1RXX1VJTlQxNiBUV0FJTl9JbWFnZUluZm9HZXQgKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUV19NRU1SRUYgcERhdGEpCit7CisjaWZuZGVmIEhBVkVfU0FORQorICAgIHJldHVybiBUV1JDX0ZBSUxVUkU7CisjZWxzZQorICAgIFRXX1VJTlQxNiB0d1JDID0gVFdSQ19TVUNDRVNTOworICAgIHBUV19JTUFHRUlORk8gcEltYWdlSW5mbyA9IChwVFdfSU1BR0VJTkZPKSBwRGF0YTsKKyAgICBhY3RpdmVEUyAqcFNvdXJjZSA9IFRXQUlOX0xvb2t1cFNvdXJjZSAocERlc3QpOworICAgIFNBTkVfU3RhdHVzIHN0YXR1czsKKworICAgIFRSQUNFKCJER19JTUFHRS9EQVRfSU1BR0VJTkZPL01TR19HRVRcbiIpOworCisgICAgaWYgKCFwU291cmNlKQorICAgIHsKKyAgICAgICAgdHdSQyA9IFRXUkNfRkFJTFVSRTsKKyAgICAgICAgRFNNX3R3Q0MgPSBUV0NDX0JBRERFU1Q7CisgICAgfQorICAgIGVsc2UgaWYgKHBTb3VyY2UtPmN1cnJlbnRTdGF0ZSAhPSA2ICYmIHBTb3VyY2UtPmN1cnJlbnRTdGF0ZSAhPSA3KQorICAgIHsKKyAgICAgICAgdHdSQyA9IFRXUkNfRkFJTFVSRTsKKyAgICAgICAgcFNvdXJjZS0+dHdDQyA9IFRXQ0NfU0VRRVJST1I7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmIChwU291cmNlLT5jdXJyZW50U3RhdGUgPT0gNikKKyAgICAgICAgeworICAgICAgICAgICAgLyogcmV0dXJuIGdlbmVyYWwgaW1hZ2UgZGVzY3JpcHRpb24gaW5mb3JtYXRpb24gYWJvdXQgdGhlIGltYWdlIGFib3V0IHRvIGJlIHRyYW5zZmVyICovCisgICAgICAgICAgICBzdGF0dXMgPSBzYW5lX2dldF9wYXJhbWV0ZXJzIChwU291cmNlLT5kZXZpY2VIYW5kbGUsICZwU291cmNlLT5zYW5lX3BhcmFtKTsKKyAgICAgICAgfQorCisgICAgICAgIHBJbWFnZUluZm8tPlhSZXNvbHV0aW9uLldob2xlID0gLTE7CisgICAgICAgIHBJbWFnZUluZm8tPlhSZXNvbHV0aW9uLkZyYWMgPSAwOworICAgICAgICBwSW1hZ2VJbmZvLT5ZUmVzb2x1dGlvbi5XaG9sZSA9IC0xOworICAgICAgICBwSW1hZ2VJbmZvLT5ZUmVzb2x1dGlvbi5GcmFjID0gMDsKKyAgICAgICAgcEltYWdlSW5mby0+SW1hZ2VXaWR0aCA9IHBTb3VyY2UtPnNhbmVfcGFyYW0ucGl4ZWxzX3Blcl9saW5lOworICAgICAgICBwSW1hZ2VJbmZvLT5JbWFnZUxlbmd0aCA9IHBTb3VyY2UtPnNhbmVfcGFyYW0ubGluZXM7CisgICAgICAgIGlmIChwU291cmNlLT5zYW5lX3BhcmFtLmRlcHRoID09IDI0KQorICAgICAgICB7CisgICAgICAgICAgICBwSW1hZ2VJbmZvLT5TYW1wbGVzUGVyUGl4ZWwgPSAzOworICAgICAgICAgICAgcEltYWdlSW5mby0+Qml0c1BlclNhbXBsZVswXSA9IDg7CisgICAgICAgICAgICBwSW1hZ2VJbmZvLT5CaXRzUGVyU2FtcGxlWzFdID0gODsKKyAgICAgICAgICAgIHBJbWFnZUluZm8tPkJpdHNQZXJTYW1wbGVbMl0gPSA4OworICAgICAgICAgICAgcEltYWdlSW5mby0+Qml0c1BlclBpeGVsID0gMjQ7CisgICAgICAgICAgICBwSW1hZ2VJbmZvLT5QbGFuYXIgPSBUUlVFOworICAgICAgICAgICAgcEltYWdlSW5mby0+UGl4ZWxUeXBlID0gVFdQVF9SR0I7CisgICAgICAgICAgICBwSW1hZ2VJbmZvLT5Db21wcmVzc2lvbiA9IFRXQ1BfTk9ORTsKKyAgICAgICAgfSAKKyAgICAgICAgZWxzZSBpZiAocFNvdXJjZS0+c2FuZV9wYXJhbS5kZXB0aCA9PSA4KQorICAgICAgICB7CisgICAgICAgICAgICAvKiBGSVhNRTogZmlsbCB0aGUgaW1hZ2UgaW5mbyBzdHJ1Y3R1cmUgZm9yIDgtYml0IGltYWdlICovCisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHdSQzsKKyNlbmRpZgorfQorCisvKiBER19JTUFHRS9EQVRfSU1BR0VMQVlPVVQvTVNHX0dFVCAqLworVFdfVUlOVDE2IFRXQUlOX0ltYWdlTGF5b3V0R2V0IChwVFdfSURFTlRJVFkgcE9yaWdpbiwgcFRXX0lERU5USVRZIHBEZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUV19NRU1SRUYgcERhdGEpCit7CisgICAgRklYTUUgKCJzdHViIVxuIik7CisKKyAgICByZXR1cm4gVFdSQ19GQUlMVVJFOworfQorCisvKiBER19JTUFHRS9EQVRfSU1BR0VMQVlPVVQvTVNHX0dFVERFRkFVTFQgKi8KK1RXX1VJTlQxNiBUV0FJTl9JbWFnZUxheW91dEdldERlZmF1bHQgKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUV19NRU1SRUYgcERhdGEpCit7CisgICAgRklYTUUgKCJzdHViIVxuIik7CisKKyAgICByZXR1cm4gVFdSQ19GQUlMVVJFOworfQorCisvKiBER19JTUFHRS9EQVRfSU1BR0VMQVlPVVQvTVNHX1JFU0VUICovCitUV19VSU5UMTYgVFdBSU5fSW1hZ2VMYXlvdXRSZXNldCAocFRXX0lERU5USVRZIHBPcmlnaW4sIHBUV19JREVOVElUWSBwRGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUV19NRU1SRUYgcERhdGEpCit7CisgICAgRklYTUUgKCJzdHViIVxuIik7CisKKyAgICByZXR1cm4gVFdSQ19GQUlMVVJFOworfQorCisvKiBER19JTUFHRS9EQVRfSU1BR0VMQVlPVVQvTVNHX1NFVCAqLworVFdfVUlOVDE2IFRXQUlOX0ltYWdlTGF5b3V0U2V0IChwVFdfSURFTlRJVFkgcE9yaWdpbiwgcFRXX0lERU5USVRZIHBEZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUV19NRU1SRUYgcERhdGEpCit7CisgICAgRklYTUUgKCJzdHViIVxuIik7CisKKyAgICByZXR1cm4gVFdSQ19GQUlMVVJFOworfQorCisvKiBER19JTUFHRS9EQVRfSU1BR0VNRU1YRkVSL01TR19HRVQgKi8KK1RXX1VJTlQxNiBUV0FJTl9JbWFnZU1lbVhmZXJHZXQgKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUV19NRU1SRUYgcERhdGEpCit7CisgICAgRklYTUUgKCJzdHViIVxuIik7CisKKyAgICByZXR1cm4gVFdSQ19GQUlMVVJFOworfQorCisvKiBER19JTUFHRS9EQVRfSU1BR0VOQVRJVkVYRkVSL01TR19HRVQgKi8KK1RXX1VJTlQxNiBUV0FJTl9JbWFnZU5hdGl2ZVhmZXJHZXQgKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUV19NRU1SRUYgcERhdGEpCit7CisjaWZuZGVmIEhBVkVfU0FORQorICAgIHJldHVybiBUV1JDX0ZBSUxVUkU7CisjZWxzZQorICAgIFRXX1VJTlQxNiB0d1JDID0gVFdSQ19TVUNDRVNTOworICAgIHBUV19VSU5UMzIgcEhhbmRsZSA9IChwVFdfVUlOVDMyKSBwRGF0YTsKKyAgICBhY3RpdmVEUyAqcFNvdXJjZSA9IFRXQUlOX0xvb2t1cFNvdXJjZSAocERlc3QpOworICAgIFNBTkVfU3RhdHVzIHN0YXR1czsKKyAgICBTQU5FX0J5dGUgYnVmZmVyWzMyKjEwMjRdOworICAgIGludCBidWZmX2xlbjsKKyAgICBIQklUTUFQIGhESUI7CisgICAgQklUTUFQSU5GTyBibXBJbmZvOworICAgIFZPSUQgKnBCaXRzOworICAgIEhEQyBkYzsKKyAKKyAgICBUUkFDRSgiREdfSU1BR0UvREFUX0lNQUdFTkFUSVZFWEZFUi9NU0dfR0VUXG4iKTsKKworICAgIGlmICghcFNvdXJjZSkKKyAgICB7CisgICAgICAgIHR3UkMgPSBUV1JDX0ZBSUxVUkU7CisgICAgICAgIERTTV90d0NDID0gVFdDQ19OT0RTOworICAgIH0KKyAgICBlbHNlIGlmIChwU291cmNlLT5jdXJyZW50U3RhdGUgIT0gNikKKyAgICB7CisgICAgICAgIHR3UkMgPSBUV1JDX0ZBSUxVUkU7CisgICAgICAgIHBTb3VyY2UtPnR3Q0MgPSBUV0NDX1NFUUVSUk9SOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBUcmFuc2ZlciBhbiBpbWFnZSBmcm9tIHRoZSBzb3VyY2UgdG8gdGhlIGFwcGxpY2F0aW9uICovCisgICAgICAgIHN0YXR1cyA9IHNhbmVfc3RhcnQgKHBTb3VyY2UtPmRldmljZUhhbmRsZSk7CisgICAgICAgIGlmIChzdGF0dXMgIT0gU0FORV9TVEFUVVNfR09PRCkKKyAgICAgICAgeworICAgICAgICAgICAgV0FSTigic2FuZV9zdGFydDogJXNcbiIsIHNhbmVfc3Ryc3RhdHVzIChzdGF0dXMpKTsKKyAgICAgICAgICAgIHNhbmVfY2FuY2VsIChwU291cmNlLT5kZXZpY2VIYW5kbGUpOworICAgICAgICAgICAgcFNvdXJjZS0+dHdDQyA9IFRXQ0NfT1BFUkFUSU9ORVJST1I7CisgICAgICAgICAgICByZXR1cm4gVFdSQ19GQUlMVVJFOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdGF0dXMgPSBzYW5lX2dldF9wYXJhbWV0ZXJzIChwU291cmNlLT5kZXZpY2VIYW5kbGUsICZwU291cmNlLT5zYW5lX3BhcmFtKTsKKyAgICAgICAgaWYgKHN0YXR1cyAhPSBTQU5FX1NUQVRVU19HT09EKQorICAgICAgICB7CisgICAgICAgICAgICBXQVJOKCJzYW5lX2dldF9wYXJhbWV0ZXJzOiAlc1xuIiwgc2FuZV9zdHJzdGF0dXMgKHN0YXR1cykpOworICAgICAgICAgICAgc2FuZV9jYW5jZWwgKHBTb3VyY2UtPmRldmljZUhhbmRsZSk7CisgICAgICAgICAgICBwU291cmNlLT50d0NDID0gVFdDQ19PUEVSQVRJT05FUlJPUjsKKyAgICAgICAgICAgIHJldHVybiBUV1JDX0ZBSUxVUkU7CisgICAgICAgIH0KKworICAgICAgICBUUkFDRSgiQWNxdWlyaW5nIGltYWdlICVkeCVkeCVkIGJpdHMgKGZvcm1hdD0lZCBsYXN0PSVkKSBmcm9tIHNhbmUuLi5cbiIKKyAgICAgICAgICAgICAgLCBwU291cmNlLT5zYW5lX3BhcmFtLnBpeGVsc19wZXJfbGluZSwgcFNvdXJjZS0+c2FuZV9wYXJhbS5saW5lcywKKyAgICAgICAgICAgICAgcFNvdXJjZS0+c2FuZV9wYXJhbS5kZXB0aCwgcFNvdXJjZS0+c2FuZV9wYXJhbS5mb3JtYXQsCisgICAgICAgICAgICAgIHBTb3VyY2UtPnNhbmVfcGFyYW0ubGFzdF9mcmFtZSk7CisKKyAgICAgICAgWmVyb01lbW9yeSAoJmJtcEluZm8sIHNpemVvZiAoQklUTUFQSU5GTykpOworICAgICAgICBibXBJbmZvLmJtaUhlYWRlci5iaVNpemUgPSBzaXplb2YgKEJJVE1BUElORk9IRUFERVIpOworICAgICAgICBibXBJbmZvLmJtaUhlYWRlci5iaVdpZHRoID0gcFNvdXJjZS0+c2FuZV9wYXJhbS5waXhlbHNfcGVyX2xpbmU7CisgICAgICAgIGJtcEluZm8uYm1pSGVhZGVyLmJpSGVpZ2h0ID0gcFNvdXJjZS0+c2FuZV9wYXJhbS5saW5lczsKKyAgICAgICAgYm1wSW5mby5ibWlIZWFkZXIuYmlQbGFuZXMgPSAxOworICAgICAgICBibXBJbmZvLmJtaUhlYWRlci5iaUJpdENvdW50ID0gcFNvdXJjZS0+c2FuZV9wYXJhbS5kZXB0aDsKKyAgICAgICAgYm1wSW5mby5ibWlIZWFkZXIuYmlDb21wcmVzc2lvbiA9IEJJX1JHQjsKKyAgICAgICAgYm1wSW5mby5ibWlIZWFkZXIuYmlTaXplSW1hZ2UgPSAwOworICAgICAgICBibXBJbmZvLmJtaUhlYWRlci5iaVhQZWxzUGVyTWV0ZXIgPSAwOworICAgICAgICBibXBJbmZvLmJtaUhlYWRlci5iaVlQZWxzUGVyTWV0ZXIgPSAwOworICAgICAgICBibXBJbmZvLmJtaUhlYWRlci5iaUNsclVzZWQgPSAxOworICAgICAgICBibXBJbmZvLmJtaUhlYWRlci5iaUNsckltcG9ydGFudCA9IDA7CisgICAgICAgIGJtcEluZm8uYm1pQ29sb3JzWzBdLnJnYkJsdWUgPSAxMjg7CisgICAgICAgIGJtcEluZm8uYm1pQ29sb3JzWzBdLnJnYkdyZWVuID0gMTI4OworICAgICAgICBibXBJbmZvLmJtaUNvbG9yc1swXS5yZ2JSZWQgPSAxMjg7CisgICAgICAgIGhESUIgPSBDcmVhdGVESUJTZWN0aW9uICgoZGMgPSBHZXREQyhwU291cmNlLT5od25kT3duZXIpKSwgJmJtcEluZm8sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRElCX1JHQl9DT0xPUlMsICZwQml0cywgMCwgMCk7CisgICAgICAgIGlmICghaERJQikKKyAgICAgICAgeworICAgICAgICAgICAgc2FuZV9jYW5jZWwgKHBTb3VyY2UtPmRldmljZUhhbmRsZSk7CisgICAgICAgICAgICBwU291cmNlLT50d0NDID0gVFdDQ19MT1dNRU1PUlk7CisgICAgICAgICAgICByZXR1cm4gVFdSQ19GQUlMVVJFOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZG8KKyAgICAgICAgeworICAgICAgICAgICAgc3RhdHVzID0gc2FuZV9yZWFkIChwU291cmNlLT5kZXZpY2VIYW5kbGUsIGJ1ZmZlciwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoYnVmZmVyKSwgICZidWZmX2xlbik7CisgICAgICAgICAgICBpZiAoc3RhdHVzID09IFNBTkVfU1RBVFVTX0dPT0QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogRklYTUU6IHB1dCBjb2RlIGZvciBjb3ZlcnRpbmcgdGhlIGltYWdlIGRhdGEgaW50byBESUIgaGVyZSAqLworCisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChzdGF0dXMgIT0gU0FORV9TVEFUVVNfRU9GKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFdBUk4oInNhbmVfcmVhZDogJXNcbiIsIHNhbmVfc3Ryc3RhdHVzIChzdGF0dXMpKTsKKyAgICAgICAgICAgICAgICBzYW5lX2NhbmNlbCAocFNvdXJjZS0+ZGV2aWNlSGFuZGxlKTsKKyAgICAgICAgICAgICAgICBwU291cmNlLT50d0NDID0gVFdDQ19PUEVSQVRJT05FUlJPUjsKKyAgICAgICAgICAgICAgICByZXR1cm4gVFdSQ19GQUlMVVJFOworICAgICAgICAgICAgfQorICAgICAgICB9IHdoaWxlIChzdGF0dXMgPT0gU0FORV9TVEFUVVNfR09PRCk7CisgICAgICAgIAorICAgICAgICBzYW5lX2NhbmNlbCAocFNvdXJjZS0+ZGV2aWNlSGFuZGxlKTsgCisgICAgICAgIFJlbGVhc2VEQyAocFNvdXJjZS0+aHduZE93bmVyLCBkYyk7CisgICAgICAgICpwSGFuZGxlID0gaERJQjsKKyAgICAgICAgdHdSQyA9IFRXUkNfWEZFUkRPTkU7IAorICAgICAgICBwU291cmNlLT50d0NDID0gVFdDQ19TVUNDRVNTOworICAgICAgICBwU291cmNlLT5jdXJyZW50U3RhdGUgPSA3OworICAgIH0KKyAgICByZXR1cm4gdHdSQzsKKyNlbmRpZgorfQorCisvKiBER19JTUFHRS9EQVRfSlBFR0NPTVBSRVNTSU9OL01TR19HRVQgKi8KK1RXX1VJTlQxNiBUV0FJTl9KUEVHQ29tcHJlc3Npb25HZXQgKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUV19NRU1SRUYgcERhdGEpCit7CisgICAgRklYTUUgKCJzdHViIVxuIik7CisKKyAgICByZXR1cm4gVFdSQ19GQUlMVVJFOworfQorCisvKiBER19JTUFHRS9EQVRfSlBFR0NPTVBSRVNTSU9OL01TR19HRVRERUZBVUxUICovCitUV19VSU5UMTYgVFdBSU5fSlBFR0NvbXByZXNzaW9uR2V0RGVmYXVsdCAocFRXX0lERU5USVRZIHBPcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFRXX0lERU5USVRZIHBEZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRXX01FTVJFRiBwRGF0YSkKK3sKKyAgICBGSVhNRSAoInN0dWIhXG4iKTsKKworICAgIHJldHVybiBUV1JDX0ZBSUxVUkU7Cit9CisKKy8qIERHX0lNQUdFL0RBVF9KUEVHQ09NUFJFU1NJT04vTVNHX1JFU0VUICovCitUV19VSU5UMTYgVFdBSU5fSlBFR0NvbXByZXNzaW9uUmVzZXQgKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRXX01FTVJFRiBwRGF0YSkKK3sKKyAgICBGSVhNRSAoInN0dWIhXG4iKTsKKworICAgIHJldHVybiBUV1JDX0ZBSUxVUkU7Cit9CisKKy8qIERHX0lNQUdFL0RBVF9KUEVHQ09NUFJFU1NJT04vTVNHX1NFVCAqLworVFdfVUlOVDE2IFRXQUlOX0pQRUdDb21wcmVzc2lvblNldCAocFRXX0lERU5USVRZIHBPcmlnaW4sIHBUV19JREVOVElUWSBwRGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRXX01FTVJFRiBwRGF0YSkKK3sKKyAgICBGSVhNRSAoInN0dWIhXG4iKTsKKworICAgIHJldHVybiBUV1JDX0ZBSUxVUkU7Cit9CisKKy8qIERHX0lNQUdFL0RBVF9QQUxFVFRFOC9NU0dfR0VUICovCitUV19VSU5UMTYgVFdBSU5fUGFsZXR0ZThHZXQgKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRXX01FTVJFRiBwRGF0YSkKK3sKKyAgICBGSVhNRSAoInN0dWIhXG4iKTsKKworICAgIHJldHVybiBUV1JDX0ZBSUxVUkU7Cit9CisKKy8qIERHX0lNQUdFL0RBVF9QQUxFVFRFOC9NU0dfR0VUREVGQVVMVCAqLworVFdfVUlOVDE2IFRXQUlOX1BhbGV0dGU4R2V0RGVmYXVsdCAocFRXX0lERU5USVRZIHBPcmlnaW4sIHBUV19JREVOVElUWSBwRGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRXX01FTVJFRiBwRGF0YSkKK3sKKyAgICBGSVhNRSAoInN0dWIhXG4iKTsKKworICAgIHJldHVybiBUV1JDX0ZBSUxVUkU7Cit9CisKKy8qIERHX0lNQUdFL0RBVF9QQUxFVFRFOC9NU0dfUkVTRVQgKi8KK1RXX1VJTlQxNiBUV0FJTl9QYWxldHRlOFJlc2V0IChwVFdfSURFTlRJVFkgcE9yaWdpbiwgcFRXX0lERU5USVRZIHBEZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRXX01FTVJFRiBwRGF0YSkKK3sKKyAgICBGSVhNRSAoInN0dWIhXG4iKTsKKworICAgIHJldHVybiBUV1JDX0ZBSUxVUkU7Cit9CisKKy8qIERHX0lNQUdFL0RBVF9QQUxFVFRFOC9NU0dfU0VUICovCitUV19VSU5UMTYgVFdBSU5fUGFsZXR0ZThTZXQgKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRXX01FTVJFRiBwRGF0YSkKK3sKKyAgICBGSVhNRSAoInN0dWIhXG4iKTsKKworICAgIHJldHVybiBUV1JDX0ZBSUxVUkU7Cit9CisKKy8qIERHX0lNQUdFL0RBVF9SR0JSRVNQT05TRS9NU0dfUkVTRVQgKi8KK1RXX1VJTlQxNiBUV0FJTl9SR0JSZXNwb25zZVJlc2V0IChwVFdfSURFTlRJVFkgcE9yaWdpbiwgcFRXX0lERU5USVRZIHBEZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRXX01FTVJFRiBwRGF0YSkKK3sKKyAgICBGSVhNRSAoInN0dWIhXG4iKTsKKworICAgIHJldHVybiBUV1JDX0ZBSUxVUkU7Cit9CisKKy8qIERHX0lNQUdFL0RBVF9SR0JSRVNQT05TRS9NU0dfU0VUICovCitUV19VSU5UMTYgVFdBSU5fUkdCUmVzcG9uc2VTZXQgKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRXX01FTVJFRiBwRGF0YSkKK3sKKyAgICBGSVhNRSAoInN0dWIhXG4iKTsKKworICAgIHJldHVybiBUV1JDX0ZBSUxVUkU7Cit9CmRpZmYgLS1naXQgYS9kbGxzL3R3YWluL2RzbV9jdHJsLmMgYi9kbGxzL3R3YWluL2RzbV9jdHJsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZkYjkzYQotLS0gL2Rldi9udWxsCisrKyBiL2RsbHMvdHdhaW4vZHNtX2N0cmwuYwpAQCAtMCwwICsxLDM5NSBAQAorLyoKKyAqIFRXQUlOMzIgU291cmNlIE1hbmFnZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAwMCBDb3JlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgIndpbmJhc2UuaCIKKyNpbmNsdWRlICJ0d2Fpbi5oIgorI2luY2x1ZGUgInR3YWluX2kuaCIKKyNpbmNsdWRlICJ3aW5lL2RlYnVnLmgiCisKK1dJTkVfREVGQVVMVF9ERUJVR19DSEFOTkVMKHR3YWluKTsKKworLyogREdfQ09OVFJPTC9EQVRfSURFTlRJVFkvTVNHX0NMT1NFRFMgKi8KK1RXX1VJTlQxNiBUV0FJTl9DbG9zZURTIChwVFdfSURFTlRJVFkgcE9yaWdpbiwgVFdfTUVNUkVGIHBEYXRhKSAKK3sKKyNpZm5kZWYgSEFWRV9TQU5FCisgICAgRFNNX3R3Q0MgPSBUV0NDX05PRFM7CisgICAgcmV0dXJuIFRXUkNfRkFJTFVSRTsKKyNlbHNlCisgICAgVFdfVUlOVDE2IHR3UkMgPSBUV1JDX1NVQ0NFU1M7CisgICAgcFRXX0lERU5USVRZIHBJZGVudGl0eSA9IChwVFdfSURFTlRJVFkpIHBEYXRhOworICAgIGFjdGl2ZURTICpjdXJyZW50RFMgPSBOVUxMLCAqcHJldkRTID0gTlVMTDsKKworICAgIFRSQUNFICgiREdfQ09OVFJPTC9EQVRfSURFTlRJVFkvTVNHX0NMT1NFRFNcbiIpOworCisgICAgZm9yIChjdXJyZW50RFMgPSBhY3RpdmVTb3VyY2VzOyBjdXJyZW50RFM7IGN1cnJlbnREUyA9IGN1cnJlbnREUy0+bmV4dCkKKyAgICB7CisgICAgICAgIGlmIChjdXJyZW50RFMtPmlkZW50aXR5LklkID09IHBJZGVudGl0eS0+SWQpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgcHJldkRTID0gY3VycmVudERTOworICAgIH0KKyAgICBpZiAoY3VycmVudERTKQorICAgIHsKKyAgICAgICAgLyogT25seSB2YWxpZCB0byBjbG9zZSBhIGRhdGEgc291cmNlIGlmIGl0IGlzIGluIHN0YXRlIDQgKi8KKyAgICAgICAgaWYgKGN1cnJlbnREUy0+Y3VycmVudFN0YXRlID09IDQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNhbmVfY2xvc2UgKGN1cnJlbnREUy0+ZGV2aWNlSGFuZGxlKTsKKyAgICAgICAgICAgIC8qIHJlbW92ZSB0aGUgZGF0YSBzb3VyY2UgZnJvbSBhY3RpdmUgZGF0YSBzb3VyY2UgbGlzdCAqLworICAgICAgICAgICAgaWYgKHByZXZEUykKKyAgICAgICAgICAgICAgICBwcmV2RFMtPm5leHQgPSBjdXJyZW50RFMtPm5leHQ7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYWN0aXZlU291cmNlcyA9IGN1cnJlbnREUy0+bmV4dDsKKyAgICAgICAgICAgIEhlYXBGcmVlIChHZXRQcm9jZXNzSGVhcCgpLCAwLCBjdXJyZW50RFMpOworICAgICAgICAgICAgdHdSQyA9IFRXUkNfU1VDQ0VTUzsKKyAgICAgICAgICAgIERTTV90d0NDID0gVFdDQ19TVUNDRVNTOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdHdSQyA9IFRXUkNfRkFJTFVSRTsKKyAgICAgICAgICAgIERTTV90d0NDID0gVFdDQ19TRVFFUlJPUjsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB0d1JDID0gVFdSQ19GQUlMVVJFOworICAgICAgICBEU01fdHdDQyA9IFRXQ0NfTk9EUzsKKyAgICB9CisgCisgICAgcmV0dXJuIHR3UkM7CisjZW5kaWYKK30KKworLyogREdfQ09OVFJPTC9EQVRfSURFTlRJVFkvTVNHX0dFVERFRkFVTFQgKi8KK1RXX1VJTlQxNiBUV0FJTl9JZGVudGl0eUdldERlZmF1bHQgKHBUV19JREVOVElUWSBwT3JpZ2luLCBUV19NRU1SRUYgcERhdGEpCit7CisjaWZuZGVmIEhBVkVfU0FORQorICAgIERTTV90d0NDID0gVFdDQ19OT0RTOworICAgIHJldHVybiBUV1JDX0ZBSUxVUkU7CisjZWxzZQorICAgIFRXX1VJTlQxNiB0d1JDID0gVFdSQ19TVUNDRVNTOworICAgIHBUV19JREVOVElUWSBwU291cmNlSWRlbnRpdHkgPSAocFRXX0lERU5USVRZKSBwRGF0YTsKKworICAgIFRSQUNFKCJER19DT05UUk9ML0RBVF9JREVOVElUWS9NU0dfR0VUREVGQVVMVFxuIik7CisKKyAgICBpZiAoIWRldmljZV9saXN0KQorICAgIHsKKyAgICAgICAgaWYgKChzYW5lX2dldF9kZXZpY2VzICgmZGV2aWNlX2xpc3QsIFNBTkVfRkFMU0UpICE9IFNBTkVfU1RBVFVTX0dPT0QpKQorICAgICAgICB7CisgICAgICAgICAgICBEU01fdHdDQyA9IFRXQ0NfTk9EUzsKKyAgICAgICAgICAgIHJldHVybiBUV1JDX0ZBSUxVUkU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBGSVhNRTogdGhlIGRlZmF1bHQgZGV2aWNlIGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgZmlyc3QgZGV2aWNlLiAgKgorICAgICAqIFVzZXJzIHNob3VsZCBiZSBhYmxlIHRvIGNob29zZSB0aGUgZGVmYXVsdCBkZXZpY2UgICAgICAgICAgICAgICAqLworICAgIGlmIChkZXZpY2VfbGlzdCAmJiBkZXZpY2VfbGlzdFswXSkKKyAgICB7CisgICAgICAgIHBTb3VyY2VJZGVudGl0eS0+SWQgPSBEU01fc291cmNlSWQgKys7CisgICAgICAgIHN0cmNweSAocFNvdXJjZUlkZW50aXR5LT5Qcm9kdWN0TmFtZSwgZGV2aWNlX2xpc3RbMF0tPm5hbWUpOworICAgICAgICBzdHJjcHkgKHBTb3VyY2VJZGVudGl0eS0+TWFudWZhY3R1cmVyLCBkZXZpY2VfbGlzdFswXS0+dmVuZG9yKTsKKyAgICAgICAgc3RyY3B5IChwU291cmNlSWRlbnRpdHktPlByb2R1Y3RGYW1pbHksIGRldmljZV9saXN0WzBdLT5tb2RlbCk7CisgICAgICAgIHBTb3VyY2VJZGVudGl0eS0+UHJvdG9jb2xNYWpvciA9IFRXT05fUFJPVE9DT0xNQUpPUjsKKyAgICAgICAgcFNvdXJjZUlkZW50aXR5LT5Qcm90b2NvbE1pbm9yID0gVFdPTl9QUk9UT0NPTE1JTk9SOworCisgICAgICAgIHR3UkMgPSBUV1JDX1NVQ0NFU1M7CisgICAgICAgIERTTV90d0NDID0gVFdDQ19TVUNDRVNTOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB0d1JDID0gVFdSQ19GQUlMVVJFOworICAgICAgICBEU01fdHdDQyA9IFRXQ0NfTk9EUzsKKyAgICB9CisgCisgICAgcmV0dXJuIHR3UkM7CisjZW5kaWYKK30KKworLyogREdfQ09OVFJPTC9EQVRfSURFTlRJVFkvTVNHX0dFVEZJUlNUICovCitUV19VSU5UMTYgVFdBSU5fSWRlbnRpdHlHZXRGaXJzdCAocFRXX0lERU5USVRZIHBPcmlnaW4sIFRXX01FTVJFRiBwRGF0YSkKK3sKKyNpZm5kZWYgSEFWRV9TQU5FCisgICAgRFNNX3R3Q0MgPSBUV0NDX05PRFM7CisgICAgcmV0dXJuIFRXUkNfRkFJTFVSRTsKKyNlbHNlCisgICAgVFdfVUlOVDE2IHR3UkMgPSBUV1JDX1NVQ0NFU1M7CisgICAgcFRXX0lERU5USVRZIHBTb3VyY2VJZGVudGl0eTsvKiA9IChwVFdfSURFTlRJVFkpIHBEYXRhOyovCisgICAgU0FORV9TdGF0dXMgc3RhdHVzOworICAgIAorICAgIFRSQUNFICgiREdfQ09OVFJPTC9EQVRfSURFTlRJVFkvTVNHX0dFVEZJUlNUXG4iKTsKKworICAgIHN0YXR1cyA9IHNhbmVfZ2V0X2RldmljZXMgKCZkZXZpY2VfbGlzdCwgU0FORV9GQUxTRSk7CisgICAgaWYgKHN0YXR1cyA9PSBTQU5FX1NUQVRVU19HT09EKQorICAgIHsKKyAgICAgICAgaWYgKGRldmljZV9saXN0WzBdKQorICAgICAgICB7CisgICAgICAgICAgICBwU291cmNlSWRlbnRpdHktPklkID0gRFNNX3NvdXJjZUlkICsrOworICAgICAgICAgICAgc3RyY3B5IChwU291cmNlSWRlbnRpdHktPlByb2R1Y3ROYW1lLCBkZXZpY2VfbGlzdFswXS0+bmFtZSk7CisgICAgICAgICAgICBzdHJjcHkgKHBTb3VyY2VJZGVudGl0eS0+TWFudWZhY3R1cmVyLCBkZXZpY2VfbGlzdFswXS0+dmVuZG9yKTsKKyAgICAgICAgICAgIHN0cmNweSAocFNvdXJjZUlkZW50aXR5LT5Qcm9kdWN0RmFtaWx5LCBkZXZpY2VfbGlzdFswXS0+bW9kZWwpOworICAgICAgICAgICAgcFNvdXJjZUlkZW50aXR5LT5Qcm90b2NvbE1ham9yID0gVFdPTl9QUk9UT0NPTE1BSk9SOworICAgICAgICAgICAgcFNvdXJjZUlkZW50aXR5LT5Qcm90b2NvbE1pbm9yID0gVFdPTl9QUk9UT0NPTE1JTk9SOworICAgICAgICB9CisgICAgICAgIERTTV9jdXJyZW50RGV2aWNlID0gMTsKKyAgICAgICAgdHdSQyA9IFRXUkNfU1VDQ0VTUzsKKyAgICAgICAgRFNNX3R3Q0MgPSBUV0NDX1NVQ0NFU1M7CisgICAgfQorICAgIGVsc2UgaWYgKHN0YXR1cyA9PSBTQU5FX1NUQVRVU19OT19NRU0pCisgICAgeworICAgICAgICB0d1JDID0gVFdSQ19GQUlMVVJFOworICAgICAgICBEU01fdHdDQyA9IFRXQ0NfTE9XTUVNT1JZOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBXQVJOKCJzYW5lX2dldF9kZXZpY2VzKCkgZmFpbGVkOiAlc1xuIiwgc2FuZV9zdHJzdGF0dXMgKHN0YXR1cykpOyAKKyAgICAgICAgdHdSQyA9IFRXUkNfRkFJTFVSRTsKKyAgICAgICAgRFNNX3R3Q0MgPSBUV0NDX05PRFM7CisgICAgfQorICAgCisgICAgcmV0dXJuIHR3UkM7CisjZW5kaWYKK30KKworLyogREdfQ09OVFJPTC9EQVRfSURFTlRJVFkvTVNHX0dFVE5FWFQgKi8KK1RXX1VJTlQxNiBUV0FJTl9JZGVudGl0eUdldE5leHQgKHBUV19JREVOVElUWSBwT3JpZ2luLCBUV19NRU1SRUYgcERhdGEpCit7CisjaWZuZGVmIEhBVkVfU0FORQorICAgIERTTV90d0NDID0gVFdDQ19TVUNDRVNTOworICAgIHJldHVybiBUV1JDX0VORE9GTElTVDsKKyNlbHNlCisgICAgVFdfVUlOVDE2IHR3UkMgPSBUV1JDX1NVQ0NFU1M7CisgICAgcFRXX0lERU5USVRZIHBTb3VyY2VJZGVudGl0eSA9IChwVFdfSURFTlRJVFkpIHBEYXRhOworCisgICAgVFJBQ0UoIkRHX0NPTlRST0wvREFUX0lERU5USVRZL01TR19HRVRORVhUXG4iKTsKKworICAgIGlmIChkZXZpY2VfbGlzdCAmJiBkZXZpY2VfbGlzdFtEU01fY3VycmVudERldmljZV0pCisgICAgeworICAgICAgICBwU291cmNlSWRlbnRpdHktPklkID0gRFNNX3NvdXJjZUlkICsrOworICAgICAgICBzdHJjcHkgKHBTb3VyY2VJZGVudGl0eS0+UHJvZHVjdE5hbWUsIGRldmljZV9saXN0W0RTTV9jdXJyZW50RGV2aWNlXS0+bmFtZSk7CisgICAgICAgIHN0cmNweSAocFNvdXJjZUlkZW50aXR5LT5NYW51ZmFjdHVyZXIsIGRldmljZV9saXN0W0RTTV9jdXJyZW50RGV2aWNlXS0+dmVuZG9yKTsKKyAgICAgICAgc3RyY3B5IChwU291cmNlSWRlbnRpdHktPlByb2R1Y3RGYW1pbHksIGRldmljZV9saXN0W0RTTV9jdXJyZW50RGV2aWNlXS0+bW9kZWwpOworICAgICAgICBwU291cmNlSWRlbnRpdHktPlByb3RvY29sTWFqb3IgPSBUV09OX1BST1RPQ09MTUFKT1I7CisgICAgICAgIHBTb3VyY2VJZGVudGl0eS0+UHJvdG9jb2xNaW5vciA9IFRXT05fUFJPVE9DT0xNSU5PUjsKKyAgICAgICAgRFNNX2N1cnJlbnREZXZpY2UgKys7CisKKyAgICAgICAgdHdSQyA9IFRXUkNfU1VDQ0VTUzsKKyAgICAgICAgRFNNX3R3Q0MgPSBUV0NDX1NVQ0NFU1M7IAorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBEU01fdHdDQyA9IFRXQ0NfU1VDQ0VTUzsKKyAgICAgICAgdHdSQyA9IFRXUkNfRU5ET0ZMSVNUOworICAgIH0KKworICAgIHJldHVybiB0d1JDOworI2VuZGlmCit9CisKKy8qIERHX0NPTlRST0wvREFUX0lERU5USVRZL01TR19PUEVORFMgKi8KK1RXX1VJTlQxNiBUV0FJTl9PcGVuRFMgKHBUV19JREVOVElUWSBwT3JpZ2luLCBUV19NRU1SRUYgcERhdGEpCit7CisjaWZuZGVmIEhBVkVfU0FORQorICAgIERTTV90d0NDID0gVFdDQ19OT0RTOworICAgIHJldHVybiBUV1JDX0ZBSUxVUkU7CisjZWxzZQorICAgIFRXX1VJTlQxNiB0d1JDID0gVFdSQ19TVUNDRVNTLCBpID0gMDsKKyAgICBwVFdfSURFTlRJVFkgcElkZW50aXR5ID0gKHBUV19JREVOVElUWSkgcERhdGE7CisgICAgYWN0aXZlRFMgKm5ld1NvdXJjZTsKKyAgICBTQU5FX1N0YXR1cyBzdGF0dXM7CisKKyAgICBUUkFDRSgiREdfQ09OVFJPTC9EQVRfSURFTlRJVFkvTVNHX09QRU5EU1xuIik7CisKKyAgICBpZiAoRFNNX2N1cnJlbnRTdGF0ZSAhPSAzKQorICAgIHsKKyAgICAgICAgRFNNX3R3Q0MgPSBUV0NDX1NFUUVSUk9SOworICAgICAgICByZXR1cm4gVFdSQ19GQUlMVVJFOworICAgIH0KKworICAgIGlmICghZGV2aWNlX2xpc3QgJiYKKyAgICAgICAoc2FuZV9nZXRfZGV2aWNlcyAoJmRldmljZV9saXN0LCBTQU5FX0ZBTFNFKSAhPSBTQU5FX1NUQVRVU19HT09EKSkKKyAgICB7CisgICAgICAgIERTTV90d0NDID0gVFdDQ19OT0RTOworICAgICAgICByZXR1cm4gVFdSQ19GQUlMVVJFOworICAgIH0KKworICAgIGlmIChwSWRlbnRpdHktPlByb2R1Y3ROYW1lWzBdICE9ICdcMCcpCisgICAgeworICAgICAgICAvKiBNYWtlIHN1cmUgdGhlIHNvdXJjZSB0byBiZSBvcGVuIGV4aXN0cyBpbiB0aGUgZGV2aWNlIGxpc3QgKi8KKyAgICAgICAgZm9yIChpID0gMDsgZGV2aWNlX2xpc3RbaV07IGkgKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChzdHJjbXAgKGRldmljZV9saXN0W2ldLT5uYW1lLCBwSWRlbnRpdHktPlByb2R1Y3ROYW1lKSA9PSAwKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGRldmljZV9saXN0W2ldKQorICAgIHsKKyAgICAgICAgLyogdGhlIHNvdXJjZSBpcyBmb3VuZCBpbiB0aGUgZGV2aWNlIGxpc3QgKi8KKyAgICAgICAgbmV3U291cmNlID0gSGVhcEFsbG9jIChHZXRQcm9jZXNzSGVhcCgpLCAwLCBzaXplb2YgKGFjdGl2ZURTKSk7CisgICAgICAgIGlmIChuZXdTb3VyY2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXR1cyA9IHNhbmVfb3BlbihkZXZpY2VfbGlzdFtpXS0+bmFtZSwmbmV3U291cmNlLT5kZXZpY2VIYW5kbGUpOworICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBTQU5FX1NUQVRVU19HT09EKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIEFzc2lnbiBuYW1lIGFuZCBpZCBmb3IgdGhlIG9wZW5lZCBkYXRhIHNvdXJjZSAqLworICAgICAgICAgICAgICAgIHN0cmNweSAocElkZW50aXR5LT5Qcm9kdWN0TmFtZSwgZGV2aWNlX2xpc3RbaV0tPm5hbWUpOworICAgICAgICAgICAgICAgIHBJZGVudGl0eS0+SWQgPSBEU01fc291cmNlSWQgKys7CisgICAgICAgICAgICAgICAgLyogYWRkIHRoZSBkYXRhIHNvdXJjZSB0byBhbiBpbnRlcm5hbCBhY3RpdmUgc291cmNlIGxpc3QgKi8KKyAgICAgICAgICAgICAgICBuZXdTb3VyY2UtPm5leHQgPSBhY3RpdmVTb3VyY2VzOworICAgICAgICAgICAgICAgIG5ld1NvdXJjZS0+aWRlbnRpdHkuSWQgPSBwSWRlbnRpdHktPklkOworICAgICAgICAgICAgICAgIHN0cmNweSAobmV3U291cmNlLT5pZGVudGl0eS5Qcm9kdWN0TmFtZSwgcElkZW50aXR5LT5Qcm9kdWN0TmFtZSk7CisgICAgICAgICAgICAgICAgbmV3U291cmNlLT5jdXJyZW50U3RhdGUgPSA0OyAvKnRyYW5zaXRpb24gaW50byBzdGF0ZSA0Ki8KKyAgICAgICAgICAgICAgICBuZXdTb3VyY2UtPnR3Q0MgPSBUV0NDX1NVQ0NFU1M7CisgICAgICAgICAgICAgICAgYWN0aXZlU291cmNlcyA9IG5ld1NvdXJjZTsKKyAgICAgICAgICAgICAgICB0d1JDID0gVFdSQ19TVUNDRVNTOworICAgICAgICAgICAgICAgIERTTV90d0NDID0gVFdDQ19TVUNDRVNTOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHR3UkMgPSBUV1JDX0ZBSUxVUkU7CisgICAgICAgICAgICAgICAgRFNNX3R3Q0MgPSBUV0NDX09QRVJBVElPTkVSUk9SOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdHdSQyA9IFRXUkNfRkFJTFVSRTsKKyAgICAgICAgICAgIERTTV90d0NDID0gVFdDQ19MT1dNRU1PUlk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdHdSQyA9IFRXUkNfRkFJTFVSRTsKKyAgICAgICAgRFNNX3R3Q0MgPSBUV0NDX05PRFM7CisgICAgfQorIAorICAgIHJldHVybiB0d1JDOworI2VuZGlmCit9CisKKy8qIERHX0NPTlRST0wvREFUX0lERU5USVRZL01TR19VU0VSU0VMRUNUICovCitUV19VSU5UMTYgVFdBSU5fVXNlclNlbGVjdCAocFRXX0lERU5USVRZIHBPcmlnaW4sIFRXX01FTVJFRiBwRGF0YSkKK3sKKyNpZm5kZWYgSEFWRV9TQU5FCisgICAgcmV0dXJuIFRXUkNfU1VDQ0VTUzsKKyNlbHNlCisgICAgVFdfVUlOVDE2IHR3UkMgPSBUV1JDX1NVQ0NFU1M7CisKKyAgICBUUkFDRSgiREdfQ09OVFJPTC9EQVRfSURFTlRJVFkvTVNHX1VTRVJTRUxFQ1RcbiIpOworCisgICAgLyogRklYTUU6IHdlIHNob3VsZCByZXBsYWNlIHhzY2FuaW1hZ2Ugd2l0aCBvdXIgb3duICBVc2VyIFNlbGVjdCBVSSAqLworICAgIHN5c3RlbSgieHNjYW5pbWFnZSIpOworCisgICAgRFNNX3R3Q0MgPSBUV0NDX1NVQ0NFU1M7CisgICAgcmV0dXJuIHR3UkM7CisjZW5kaWYKK30KKworLyogREdfQ09OVFJPTC9EQVRfUEFSRU5UL01TR19DTE9TRURTTSAqLworVFdfVUlOVDE2IFRXQUlOX0Nsb3NlRFNNIChwVFdfSURFTlRJVFkgcE9yaWdpbiwgVFdfTUVNUkVGIHBEYXRhKQoreworI2lmbmRlZiBIQVZFX1NBTkUKKyAgICByZXR1cm4gVFdSQ19GQUlMVVJFOworI2Vsc2UKKyAgICBUV19VSU5UMTYgdHdSQyA9IFRXUkNfU1VDQ0VTUzsKKyAgICBhY3RpdmVEUyAqY3VycmVudERTID0gYWN0aXZlU291cmNlcywgKm5leHREUzsKKworICAgIFRSQUNFKCJER19DT05UUk9ML0RBVF9QQVJFTlQvTVNHX0NMT1NFRFNNXG4iKTsKKworICAgIGlmIChEU01fY3VycmVudFN0YXRlID09IDMpCisgICAgeworICAgICAgICBzYW5lX2V4aXQgKCk7CisgICAgICAgIERTTV9pbml0aWFsaXplZCA9IEZBTFNFOworICAgICAgICBEU01fcGFyZW50SFdORCA9IDA7CisgICAgICAgIERTTV9jdXJyZW50U3RhdGUgPSAyOworCisgICAgICAgIC8qIElmIHRoZXJlIGFyZSBkYXRhIHNvdXJjZXMgc3RpbGwgb3BlbiwgY2xvc2UgdGhlbSBub3cuICovCisgICAgICAgIHdoaWxlIChjdXJyZW50RFMgIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgbmV4dERTID0gY3VycmVudERTLT5uZXh0OworICAgICAgICAgICAgc2FuZV9jbG9zZSAoY3VycmVudERTLT5kZXZpY2VIYW5kbGUpOworICAgICAgICAgICAgSGVhcEZyZWUgKEdldFByb2Nlc3NIZWFwKCksIDAsIGN1cnJlbnREUyk7CisgICAgICAgICAgICBjdXJyZW50RFMgPSBuZXh0RFM7CisgICAgICAgIH0KKyAgICAgICAgYWN0aXZlU291cmNlcyA9IE5VTEw7CisgICAgICAgIERTTV90d0NDID0gVFdDQ19TVUNDRVNTOworICAgICAgICB0d1JDID0gVFdSQ19TVUNDRVNTOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBEU01fdHdDQyA9IFRXQ0NfU0VRRVJST1I7CisgICAgICAgIHR3UkMgPSBUV1JDX0ZBSUxVUkU7CisgICAgfQorCisgICAgcmV0dXJuIHR3UkM7CisjZW5kaWYKK30KKworLyogREdfQ09OVFJPTC9EQVRfUEFSRU5UL01TR19PUEVORFNNICovCitUV19VSU5UMTYgVFdBSU5fT3BlbkRTTSAocFRXX0lERU5USVRZIHBPcmlnaW4sIFRXX01FTVJFRiBwRGF0YSkKK3sKKyNpZm5kZWYgSEFWRV9TQU5FCisgICAgcmV0dXJuIFRXUkNfRkFJTFVSRTsKKyNlbHNlCisgICAgVFdfVUlOVDE2IHR3UkMgPSBUV1JDX1NVQ0NFU1M7CisgICAgU0FORV9TdGF0dXMgc3RhdHVzOworICAgIFNBTkVfSW50IHZlcnNpb25fY29kZTsKKworICAgIFRSQUNFKCJER19DT05UUk9ML0RBVF9QQVJFTlQvTVNHX09QRU5EU01cbiIpOworCisgICAgaWYgKERTTV9jdXJyZW50U3RhdGUgPT0gMikKKyAgICB7CisgICAgICAgIGlmICghRFNNX2luaXRpYWxpemVkKQorICAgICAgICB7CisgICAgICAgICAgICBEU01faW5pdGlhbGl6ZWQgPSBUUlVFOworICAgICAgICAgICAgc3RhdHVzID0gc2FuZV9pbml0ICgmdmVyc2lvbl9jb2RlLCBOVUxMKTsKKyAgICAgICAgICAgIGRldmljZV9saXN0ID0gTlVMTDsKKyAgICAgICAgICAgIERTTV9jdXJyZW50RGV2aWNlID0gMDsgCisgICAgICAgICAgICBEU01fc291cmNlSWQgPSAwOworICAgICAgICB9ICAgIAorICAgICAgICBEU01fcGFyZW50SFdORCA9ICpwRGF0YTsKKyAgICAgICAgRFNNX2N1cnJlbnRTdGF0ZSA9IDM7IC8qIHRyYW5zaXRpb24gdG8gc3RhdGUgMyAqLworICAgICAgICBEU01fdHdDQyA9IFRXQ0NfU1VDQ0VTUzsKKyAgICAgICAgdHdSQyA9IFRXUkNfU1VDQ0VTUzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogb3BlcmF0aW9uIGludm9rZWQgaW4gaW52YWxpZCBzdGF0ZSAqLworICAgICAgICBEU01fdHdDQyA9IFRXQ0NfU0VRRVJST1I7CisgICAgICAgIHR3UkMgPSBUV1JDX0ZBSUxVUkU7CisgICAgfQorCisgICAgcmV0dXJuIHR3UkM7CisjZW5kaWYKK30KKworLyogREdfQ09OVFJPTC9EQVRfU1RBVFVTL01TR19HRVQgKi8KK1RXX1VJTlQxNiBUV0FJTl9HZXREU01TdGF0dXMgKHBUV19JREVOVElUWSBwT3JpZ2luLCBUV19NRU1SRUYgcERhdGEpCit7CisgICAgcFRXX1NUQVRVUyBwU291cmNlU3RhdHVzID0gKHBUV19TVEFUVVMpIHBEYXRhOworCisgICAgVFJBQ0UgKCJER19DT05UUk9ML0RBVF9TVEFUVVMvTVNHX0dFVFxuIik7CisKKyAgICBwU291cmNlU3RhdHVzLT5Db25kaXRpb25Db2RlID0gRFNNX3R3Q0M7CisgICAgRFNNX3R3Q0MgPSBUV0NDX1NVQ0NFU1M7ICAvKiBjbGVhciB0aGUgY29uZGl0aW9uIGNvZGUgKi8KKworICAgIHJldHVybiBUV1JDX1NVQ0NFU1M7Cit9CisKZGlmZiAtLWdpdCBhL2RsbHMvdHdhaW4vdHdhaW4uaCBiL2RsbHMvdHdhaW4vdHdhaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjRhNzhmCi0tLSAvZGV2L251bGwKKysrIGIvZGxscy90d2Fpbi90d2Fpbi5oCkBAIC0wLDAgKzEsMTg3NiBAQAorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICpcCisKKyAgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyIFRXQUlOIFdvcmtpbmcgR3JvdXA6IEFsZHVzLCBDYWVyZSwgRWFzdG1hbi1Lb2RhaywKKyAgSGV3bGV0dC1QYWNrYXJkIGFuZCBMb2dpdGVjaCBDb3Jwb3JhdGlvbnMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgIENvcHlyaWdodCAoQykgMTk5NyBUV0FJTiBXb3JraW5nIEdyb3VwOiBCZWxsK0hvd2VsbCwgQ2Fub24sIERvY3VNYWdpeCwgCisgIEZ1aml0c3UsIEdlbm9hIFRlY2hub2xvZ3ksIEhld2xldHQtUGFja2FyZCwgS29mYXggSW1hZ2luZyBQcm9kdWN0cywgYW5kCisgIFJpY29oIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAKKyAgQ29weXJpZ2h0IKkgMTk5OCBUV0FJTiBXb3JraW5nIEdyb3VwOiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZCwgCisgIENhbm9uIEluZm9ybWF0aW9uIFN5c3RlbXMsIEVhc3RtYW4gS29kYWsgQ29tcGFueSwgCisgIEZ1aml0c3UgQ29tcHV0ZXIgUHJvZHVjdHMgb2YgQW1lcmljYSwgR2Vub2EgVGVjaG5vbG9neSwgCisgIEhld2xldHQtUGFja2FyZCBDb21wYW55LCBJbnRlbCBDb3Jwb3JhdGlvbiwgS29mYXggSW1hZ2UgUHJvZHVjdHMsIAorICBKRkwgUGVyaXBoZXJhbCBTb2x1dGlvbnMgSW5jLiwgUmljb2ggQ29ycG9yYXRpb24sIGFuZCBYZXJveCBDb3Jwb3JhdGlvbi4gIAorICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgIFRXQUlOLmggLSAgVGhpcyBpcyB0aGUgZGVmaW5pdGl2ZSBpbmNsdWRlIGZpbGUgZm9yIGFwcGxpY2F0aW9ucyBhbmQKKyAgICAgICAgICBkYXRhIHNvdXJjZXMgd3JpdHRlbiB0byB0aGUgVFdBSU4gc3BlY2lmaWNhdGlvbi4KKyAgICAgICAgICBJdCBkZWZpbmVzIGNvbnN0YW50cywgZGF0YSBzdHJ1Y3R1cmVzLCBtZXNzYWdlcyBldGMuCisgICAgICAgICAgZm9yIHRoZSBwdWJsaWMgaW50ZXJmYWNlIHRvIFRXQUlOLgorIAorICBSZXZpc2lvbiBIaXN0b3J5OgorICAgIHZlcnNpb24gMS4wLCBNYXJjaCA2LCAxOTkyLiAgVFdBSU4gMS4wLgorICAgIHZlcnNpb24gMS4xLCBKYW51YXJ5IDE5OTMuICAgVGVjaCBOb3RlcyAxLjEKKyAgICB2ZXJzaW9uIDEuNSwgSnVuZSAxOTkzLiAgICAgIFNwZWNpZmljYXRpb24gVXBkYXRlIDEuNQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlIERDIHRvIFRXIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlIGZpbGVuYW1lIGZyb20gREMuSCB0byBUV0FJTi5ICisgICAgdmVyc2lvbiAxLjUsIEp1bHkgMTk5My4gICAgICBSZW1vdmUgc3BhY2VzIGZyb20gY291bnRyeSBpZGVudGlmaWVycworIAorICAgIHZlcnNpb24gMS43LCBKdWx5IDE5OTcgICAgICAgQWRkZWQgQ2FwYWJpbGl0aWVzIGFuZCBkYXRhIHN0cnVjdHVyZSBmb3IgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudCBpbWFnaW5nIGFuZCBkaWdpdGFsIGNhbWVyYXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLSEwuCisgICAgdmVyc2lvbiAxLjcsIEp1bHkgMTk5NyAgICAgICBJbnNlcnRlZCBCb3JsYW5kIGNvbXBhdGliaWxlIHN0cnVjdHVyZSBwYWNraW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzIHByb3ZpZGVkIGJ5IE1lbnRvci4gIEpNSAorICAgIHZlcnNpb24gMS43LCBBdWcgMTk5NyAgICAgICAgRXhwYW5kZWQgZmlsZSB0YWJzIHRvIHNwYWNlcy4gIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTk9URTogZnV0dXJlIGF1dGhvcnMgc2hvdWxkIGJlIHN1cmUgdG8gaGF2ZSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZWlyIGVkaXRvcnMgc2V0IHRvIGF1dG9tYXRpY2FsbHkgZXhwYW5kIHRhYnMgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBzcGFjZXMgKG9yaWdpbmFsIHRhYiBzZXR0aW5nIHdhcyA0IHNwYWNlcykuCisgICAgdmVyc2lvbiAxLjcsIFNlcHQgMTk5NyAgICAgICBBZGRlZCBqb2IgY29udHJvbCB2YWx1ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIHJldHVybiBjb2RlcworICAgIHZlcnNpb24gMS43LCBTZXB0IDE5OTcgICAgICAgY2hhbmdlZCBkZWZpbml0aW9uIG9mIHBSR0JSRVNQT05TRSB0byAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBUV19SR0JSRVNQT05TRQorICAgIHZlcnNpb24gMS43ICBBdWcgMTk5OCAgICAgICAgQWRkZWQgbWlzc2luZyBUV0VJX0JBUkNPREVST1RBVElPTiB2YWx1ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRXQkNPUl8gdHlwZXMgSk1ICisgICAgdmVyc2lvbiAxLjggIEF1Z3VzdCAxOTk4ICAgICBBZGRlZCBuZXcgdHlwZXMgYW5kIGRlZmluaXRpb25zIHJlcXVpcmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgMS44IFNwZWNpZmljYXRpb24gSk1ICisgICAgdmVyc2lvbiAxLjggIEphbnVhcnkgMTk5OSAgICBDaGFuZ2VkIHNlYXJjaCBtb2RlIGZyb20gU1JDSF8gdG8gVFdCRF8gYXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIDEuOCBTcGVjaWZpY2F0aW9uLCBhZGRlZCBUV0JUX01BWElDT0RFCUpNSAorICAgIHZlcnNpb24gMS44ICBKYW51YXJ5IDE5OTkgICAgUmVtb3ZlZCB1bmRvY3VtZW50ZWQgZHVwbGljYXRlIEFVVE88Y2FwPiBKTUgKK1wqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisjaWZuZGVmIFRXQUlOCisjZGVmaW5lIFRXQUlOCisKKy8qICBTREggLSAwMi8wOC85NSAtIFRXVU5LICovCisvKiAgRm9yY2UgMzItYml0IHR3YWluIHRvIHVzZSBzYW1lIHBhY2tpbmcgb2YgdHdhaW4gc3RydWN0dXJlcyBhcyBleGlzdGluZyAqLworLyogIDE2LWJpdCB0d2Fpbi4gIFRoaXMgYWxsb3dzIDE2LzMyLWJpdCB0aHVua2luZy4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNpZmRlZiAgV0lOMzIKKyAgICAjaWZkZWYgX19CT1JMQU5EQ19fIC8vKE1lbnRvciBKdW5lIDEzLCAxOTk2KSBpZiB1c2luZyBhIEJvcmxhbmQgY29tcGlsZXIKKyAgICAgICAgI3ByYWdtYSBvcHRpb24gLWEyICAvLyhNZW50b3IgSnVuZSAxMywgMTk5Nikgc3dpdGNoIHRvIHdvcmQgYWxpZ25tZW50CisgICAgI2Vsc2UgICAvLyhNZW50b3IgSnVuZSAxMywgMTk5NikgaWYgd2UncmUgdXNpbmcgc29tZSBvdGhlciBjb21waWxlcgorICAgICAgICAjcHJhZ21hIHBhY2sgKHB1c2gsIGJlZm9yZV90d2FpbikKKyAgICAgICAgI3ByYWdtYSBwYWNrICgyKQorICAgICNlbmRpZiAgLy8oTWVudG9yIEp1bmUgMTMsIDE5OTYpCisjZWxzZSAgIC8qIFdJTjMyICovCisjZW5kaWYgIC8qIFdJTjMyICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUV0FJTiBWZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFRXT05fUFJPVE9DT0xNSU5PUiAgIDggICAgICAgIC8qIENoYW5nZWQgZm9yIFZlcnNpb24gMS44ICAgICAgICAgICAgKi8KKyNkZWZpbmUgVFdPTl9QUk9UT0NPTE1BSk9SICAgMQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUGxhdGZvcm0gRGVwZW5kZW50IERlZmluaXRpb25zIGFuZCBUeXBlZGVmcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBEZWZpbmUgb25lIG9mIHRoZSBmb2xsb3dpbmcsIGRlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm0gKi8KKy8qICNkZWZpbmUgX01BQ18gICAqLworI2RlZmluZSBfVU5JWF8KKy8qI2RlZmluZSBfTVNXSU5fICAqLworCisjaWZkZWYgIF9NU1dJTl8KKyAgICB0eXBlZGVmIEhBTkRMRSAgICAgICAgIFRXX0hBTkRMRTsKKyAgICB0eXBlZGVmIExQVk9JRCAgICAgICAgIFRXX01FTVJFRjsKKworICAgIC8qICBTREggLSAwNS8wNS85NSAtIFRXVU5LICovCisgICAgLyogIEZvciBjb21tb24gY29kZSBiZXR3ZWVuIDE2IGFuZCAzMiBiaXRzLiAgKi8KKyAgICAjaWZkZWYgIFdJTjMyCisgICAgICAgICNkZWZpbmUgVFdfSFVHRQorICAgICNlbHNlICAgLyogV0lOMzIgKi8KKyAgICAgICAgI2RlZmluZSBUV19IVUdFICAgIGh1Z2UKKyAgICAjZW5kaWYgIC8qIFdJTjMyICovCisgICAgdHlwZWRlZiBCWVRFIFRXX0hVR0UgKiBIUEJZVEU7CisgICAgdHlwZWRlZiB2b2lkIFRXX0hVR0UgKiBIUFZPSUQ7CisjZW5kaWYgIC8qIF9NU1dJTl8gKi8KKworI2lmZGVmICBfTUFDXworICAgICNkZWZpbmUgUEFTQ0FMICAgICAgICAgcGFzY2FsCisgICAgI2RlZmluZSBGQVIKKyAgICB0eXBlZGVmIEhhbmRsZSAgICAgICAgIFRXX0hBTkRMRTsKKyAgICB0eXBlZGVmIGNoYXIgICAgICAgICAgKlRXX01FTVJFRjsKKyNlbmRpZiAgLyogX01BQ18gKi8KKworI2lmZGVmICBfVU5JWF8KKy8qICAgICNkZWZpbmUgUEFTQ0FMICAgICAgICAgcGFzY2FsICovCisgICAgI2RlZmluZSBGQVIKKyAgICB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgKlRXX0hBTkRMRTsKKyAgICB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgKlRXX01FTVJFRjsKKyNlbmRpZiAgLyogX1VOSVhfICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUeXBlIERlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFN0cmluZyB0eXBlcy4gVGhlc2UgaW5jbHVkZSByb29tIGZvciB0aGUgc3RyaW5ncyBhbmQgYSBOVUxMIGNoYXIsICAgICAqCisgKiBvciwgb24gdGhlIE1hYywgYSBsZW5ndGggYnl0ZSBmb2xsb3dlZCBieSB0aGUgc3RyaW5nLiAgICAgICAgICAgICAgICAgKgorICogVFdfU1RSMjU1IG11c3QgaG9sZCBsZXNzIHRoYW4gMjU2IGNoYXJzIHNvIGxlbmd0aCBmaXRzIGluIGZpcnN0IGJ5dGUuICovCit0eXBlZGVmIGNoYXIgICAgVFdfU1RSMzJbMzRdLCAgICAgRkFSICpwVFdfU1RSMzI7Cit0eXBlZGVmIGNoYXIgICAgVFdfU1RSNjRbNjZdLCAgICAgRkFSICpwVFdfU1RSNjQ7Cit0eXBlZGVmIGNoYXIgICAgVFdfU1RSMTI4WzEzMF0sICAgRkFSICpwVFdfU1RSMTI4OwordHlwZWRlZiBjaGFyICAgIFRXX1NUUjI1NVsyNTZdLCAgIEZBUiAqcFRXX1NUUjI1NTsKKworLyogTnVtZXJpYyB0eXBlcy4gKi8KK3R5cGVkZWYgY2hhciAgICAgICAgICAgVFdfSU5UOCwgICBGQVIgKnBUV19JTlQ4OwordHlwZWRlZiBzaG9ydCAgICAgICAgICBUV19JTlQxNiwgIEZBUiAqcFRXX0lOVDE2OyAKK3R5cGVkZWYgbG9uZyAgICAgICAgICAgVFdfSU5UMzIsICBGQVIgKnBUV19JTlQzMjsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciAgVFdfVUlOVDgsICBGQVIgKnBUV19VSU5UODsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgVFdfVUlOVDE2LCBGQVIgKnBUV19VSU5UMTY7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgIFRXX1VJTlQzMiwgRkFSICpwVFdfVUlOVDMyOwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBUV19CT09MLCAgIEZBUiAqcFRXX0JPT0w7IAorCisvKiBGaXhlZCBwb2ludCBzdHJ1Y3R1cmUgdHlwZS4gKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBUV19JTlQxNiAgICAgV2hvbGU7ICAgICAgICAvKiBtYWludGFpbnMgdGhlIHNpZ24gKi8KKyAgICBUV19VSU5UMTYgICAgRnJhYzsKK30gVFdfRklYMzIsICBGQVIgKnBUV19GSVgzMjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFN0cnVjdHVyZSBEZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogTm8gREFUIG5lZWRlZC4gKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgIFRXX0ZJWDMyICAgWDsKKyAgIFRXX0ZJWDMyICAgWTsKKyAgIFRXX0ZJWDMyICAgWjsKK30gVFdfQ0lFUE9JTlQsIEZBUiAqIHBUV19DSUVQT0lOVDsKKworLyogTm8gREFUIG5lZWRlZC4gKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgIFRXX0ZJWDMyICAgU3RhcnRJbjsKKyAgIFRXX0ZJWDMyICAgQnJlYWtJbjsKKyAgIFRXX0ZJWDMyICAgRW5kSW47CisgICBUV19GSVgzMiAgIFN0YXJ0T3V0OworICAgVFdfRklYMzIgICBCcmVha091dDsKKyAgIFRXX0ZJWDMyICAgRW5kT3V0OworICAgVFdfRklYMzIgICBHYW1tYTsKKyAgIFRXX0ZJWDMyICAgU2FtcGxlQ291bnQ7ICAvKiBpZiA9MCB1c2UgdGhlIGdhbW1hICovCit9IFRXX0RFQ09ERUZVTkNUSU9OLCBGQVIgKiBwVFdfREVDT0RFRlVOQ1RJT047CisKKy8qIE5vIERBVCBuZWVkZWQuICovCit0eXBlZGVmIHN0cnVjdCB7CisgICBUV19VSU5UOCAgICBJbmRleDsgICAgLyogVmFsdWUgdXNlZCB0byBpbmRleCBpbnRvIHRoZSBjb2xvciB0YWJsZS4gKi8KKyAgIFRXX1VJTlQ4ICAgIENoYW5uZWwxOyAvKiBGaXJzdCAgdHJpLXN0aW11bHVzIHZhbHVlIChlLmcgUmVkKSAgICAgICAqLworICAgVFdfVUlOVDggICAgQ2hhbm5lbDI7IC8qIFNlY29uZCB0cmktc3RpbXVsdXMgdmFsdWUgKGUuZyBHcmVlbikgICAgICovCisgICBUV19VSU5UOCAgICBDaGFubmVsMzsgLyogVGhpcmQgIHRyaS1zdGltdWx1cyB2YWx1ZSAoZS5nIEJsdWUpICAgICAgKi8KK30gVFdfRUxFTUVOVDgsIEZBUiAqIHBUV19FTEVNRU5UODsKKworLyogTm8gREFULiAgRGVmaW5lcyBhIGZyYW1lIHJlY3RhbmdsZSBpbiBJQ0FQX1VOSVRTIGNvb3JkaW5hdGVzLiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgVFdfRklYMzIgICBMZWZ0OworICAgVFdfRklYMzIgICBUb3A7CisgICBUV19GSVgzMiAgIFJpZ2h0OworICAgVFdfRklYMzIgICBCb3R0b207Cit9IFRXX0ZSQU1FLCBGQVIgKiBwVFdfRlJBTUU7CisKKy8qIE5vIERBVCBuZWVkZWQuICBVc2VkIHRvIG1hbmFnZSBtZW1vcnkgYnVmZmVycy4gKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgIFRXX1VJTlQzMiAgRmxhZ3M7ICAvKiBBbnkgY29tYmluYXRpb24gb2YgdGhlIFRXTUZfIGNvbnN0YW50cy4gICAgICAgICAgICovCisgICBUV19VSU5UMzIgIExlbmd0aDsgLyogTnVtYmVyIG9mIGJ5dGVzIHN0b3JlZCBpbiBidWZmZXIgVGhlTWVtLiAgICAgICAgICAqLworICAgVFdfTUVNUkVGICBUaGVNZW07IC8qIFBvaW50ZXIgb3IgaGFuZGxlIHRvIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGJ1ZmZlci4gKi8KK30gVFdfTUVNT1JZLCBGQVIgKiBwVFdfTUVNT1JZOworCisvKiBObyBEQVQgbmVlZGVkLiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgVFdfREVDT0RFRlVOQ1RJT04gICBEZWNvZGVbM107CisgICBUV19GSVgzMiAgICAgICAgICAgIE1peFszXVszXTsKK30gVFdfVFJBTlNGT1JNU1RBR0UsIEZBUiAqIHBUV19UUkFOU0ZPUk1TVEFHRTsKKworLyogTm8gREFUIG5lZWRlZC4gIERlc2NyaWJlcyB2ZXJzaW9uIG9mIHNvZnR3YXJlIGN1cnJlbnRseSBydW5uaW5nLiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgVFdfVUlOVDE2ICBNYWpvck51bTsgIC8qIE1ham9yIHJldmlzaW9uIG51bWJlciBvZiB0aGUgc29mdHdhcmUuICovCisgICBUV19VSU5UMTYgIE1pbm9yTnVtOyAgLyogSW5jcmVtZW50YWwgcmV2aXNpb24gbnVtYmVyIG9mIHRoZSBzb2Z0d2FyZS4gKi8KKyAgIFRXX1VJTlQxNiAgTGFuZ3VhZ2U7ICAvKiBlLmcuIFRXTEdfU1dJU1NGUkVOQ0ggKi8KKyAgIFRXX1VJTlQxNiAgQ291bnRyeTsgICAvKiBlLmcuIFRXQ1lfU1dJVFpFUkxBTkQgKi8KKyAgIFRXX1NUUjMyICAgSW5mbzsgICAgICAvKiBlLmcuICIxLjBiMyBCZXRhIHJlbGVhc2UiICovCit9IFRXX1ZFUlNJT04sIEZBUiAqIHBUV19WRVJTSU9OOworCisvKiBUV09OX0FSUkFZLiBDb250YWluZXIgZm9yIGFycmF5IG9mIHZhbHVlcyAoYSBzaW1wbGlmaWVkIFRXX0VOVU1FUkFUSU9OKSAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgVFdfVUlOVDE2ICBJdGVtVHlwZTsKKyAgIFRXX1VJTlQzMiAgTnVtSXRlbXM7ICAgIC8qIEhvdyBtYW55IGl0ZW1zIGluIEl0ZW1MaXN0ICAgICAgICAgICAqLworICAgVFdfVUlOVDggICBJdGVtTGlzdFsxXTsgLyogQXJyYXkgb2YgSXRlbVR5cGUgdmFsdWVzIHN0YXJ0cyBoZXJlICovCit9IFRXX0FSUkFZLCBGQVIgKiBwVFdfQVJSQVk7CisKKy8qIFRXT05fRU5VTUVSQVRJT04uIENvbnRhaW5lciBmb3IgYSBjb2xsZWN0aW9uIG9mIHZhbHVlcy4gKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgIFRXX1VJTlQxNiAgSXRlbVR5cGU7CisgICBUV19VSU5UMzIgIE51bUl0ZW1zOyAgICAgLyogSG93IG1hbnkgaXRlbXMgaW4gSXRlbUxpc3QgICAgICAgICAgICAgICAgICovCisgICBUV19VSU5UMzIgIEN1cnJlbnRJbmRleDsgLyogQ3VycmVudCB2YWx1ZSBpcyBpbiBJdGVtTGlzdFtDdXJyZW50SW5kZXhdICovCisgICBUV19VSU5UMzIgIERlZmF1bHRJbmRleDsgLyogUG93ZXJ1cCB2YWx1ZSBpcyBpbiBJdGVtTGlzdFtEZWZhdWx0SW5kZXhdICovCisgICBUV19VSU5UOCAgIEl0ZW1MaXN0WzFdOyAgLyogQXJyYXkgb2YgSXRlbVR5cGUgdmFsdWVzIHN0YXJ0cyBoZXJlICAgICAgICovCit9IFRXX0VOVU1FUkFUSU9OLCBGQVIgKiBwVFdfRU5VTUVSQVRJT047CisKKy8qIFRXT05fT05FVkFMVUUuIENvbnRhaW5lciBmb3Igb25lIHZhbHVlLiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgVFdfVUlOVDE2ICBJdGVtVHlwZTsKKyAgIFRXX1VJTlQzMiAgSXRlbTsKK30gVFdfT05FVkFMVUUsIEZBUiAqIHBUV19PTkVWQUxVRTsKKworLyogVFdPTl9SQU5HRS4gQ29udGFpbmVyIGZvciBhIHJhbmdlIG9mIHZhbHVlcy4gKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgIFRXX1VJTlQxNiAgSXRlbVR5cGU7CisgICBUV19VSU5UMzIgIE1pblZhbHVlOyAgICAgLyogU3RhcnRpbmcgdmFsdWUgaW4gdGhlIHJhbmdlLiAgICAgICAgICAgKi8KKyAgIFRXX1VJTlQzMiAgTWF4VmFsdWU7ICAgICAvKiBGaW5hbCB2YWx1ZSBpbiB0aGUgcmFuZ2UuICAgICAgICAgICAgICAqLworICAgVFdfVUlOVDMyICBTdGVwU2l6ZTsgICAgIC8qIEluY3JlbWVudCBmcm9tIE1pblZhbHVlIHRvIE1heFZhbHVlLiAgICovCisgICBUV19VSU5UMzIgIERlZmF1bHRWYWx1ZTsgLyogUG93ZXItdXAgdmFsdWUuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgIFRXX1VJTlQzMiAgQ3VycmVudFZhbHVlOyAvKiBUaGUgdmFsdWUgdGhhdCBpcyBjdXJyZW50bHkgaW4gZWZmZWN0LiAqLworfSBUV19SQU5HRSwgRkFSICogcFRXX1JBTkdFOworCisvKiBEQVRfQ0FQQUJJTElUWS4gVXNlZCBieSBhcHBsaWNhdGlvbiB0byBnZXQvc2V0IGNhcGFiaWxpdHkgZnJvbS9pbiBhIGRhdGEgc291cmNlLiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgVFdfVUlOVDE2ICBDYXA7IC8qIGlkIG9mIGNhcGFiaWxpdHkgdG8gc2V0IG9yIGdldCwgZS5nLiBDQVBfQlJJR0hUTkVTUyAqLworICAgVFdfVUlOVDE2ICBDb25UeXBlOyAvKiBUV09OX09ORVZBTFVFLCBfUkFOR0UsIF9FTlVNRVJBVElPTiBvciBfQVJSQVkgICAqLworICAgVFdfSEFORExFICBoQ29udGFpbmVyOyAvKiBIYW5kbGUgdG8gY29udGFpbmVyIG9mIHR5cGUgRGF0ICAgICAgICAgICAgICAqLworfSBUV19DQVBBQklMSVRZLCBGQVIgKiBwVFdfQ0FQQUJJTElUWTsKKworLyogREFUX0NJRUNPTE9SLiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgVFdfVUlOVDE2ICAgICAgICAgICBDb2xvclNwYWNlOworICAgVFdfSU5UMTYgICAgICAgICAgICBMb3dFbmRpYW47CisgICBUV19JTlQxNiAgICAgICAgICAgIERldmljZURlcGVuZGVudDsKKyAgIFRXX0lOVDMyICAgICAgICAgICAgVmVyc2lvbk51bWJlcjsKKyAgIFRXX1RSQU5TRk9STVNUQUdFICAgU3RhZ2VBQkM7CisgICBUV19UUkFOU0ZPUk1TVEFHRSAgIFN0YWdlTE1OOworICAgVFdfQ0lFUE9JTlQgICAgICAgICBXaGl0ZVBvaW50OworICAgVFdfQ0lFUE9JTlQgICAgICAgICBCbGFja1BvaW50OworICAgVFdfQ0lFUE9JTlQgICAgICAgICBXaGl0ZVBhcGVyOworICAgVFdfQ0lFUE9JTlQgICAgICAgICBCbGFja0luazsKKyAgIFRXX0ZJWDMyICAgICAgICAgICAgU2FtcGxlc1sxXTsKK30gVFdfQ0lFQ09MT1IsIEZBUiAqIHBUV19DSUVDT0xPUjsKKworLyogREFUX0VWRU5ULiBGb3IgcGFzc2luZyBldmVudHMgZG93biBmcm9tIHRoZSBhcHBsaWNhdGlvbiB0byB0aGUgRFMuICovCit0eXBlZGVmIHN0cnVjdCB7CisgICBUV19NRU1SRUYgIHBFdmVudDsgICAgLyogV2luZG93cyBwTVNHIG9yIE1hYyBwRXZlbnQuICAgICAgICAgICAgICAgICAqLworICAgVFdfVUlOVDE2ICBUV01lc3NhZ2U7IC8qIFRXIG1zZyBmcm9tIGRhdGEgc291cmNlLCBlLmcuIE1TR19YRkVSUkVBRFkgKi8KK30gVFdfRVZFTlQsIEZBUiAqIHBUV19FVkVOVDsKKworLyogREFUX0dSQVlSRVNQT05TRSAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgVFdfRUxFTUVOVDggICAgICAgICBSZXNwb25zZVsxXTsKK30gVFdfR1JBWVJFU1BPTlNFLCBGQVIgKiBwVFdfR1JBWVJFU1BPTlNFOworCisvKiBEQVRfSURFTlRJVFkuIElkZW50aWZpZXMgdGhlIHByb2dyYW0vbGlicmFyeS9jb2RlIHJlc291cmNlLiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgVFdfVUlOVDMyICBJZDsgICAgICAgICAgICAgIC8qIFVuaXF1ZSBudW1iZXIuICBJbiBXaW5kb3dzLCBhcHBsaWNhdGlvbiBoV25kICAgICAgKi8KKyAgIFRXX1ZFUlNJT04gVmVyc2lvbjsgICAgICAgICAvKiBJZGVudGlmaWVzIHRoZSBwaWVjZSBvZiBjb2RlICAgICAgICAgICAgICAqLworICAgVFdfVUlOVDE2ICBQcm90b2NvbE1ham9yOyAgIC8qIEFwcGxpY2F0aW9uIGFuZCBEUyBtdXN0IHNldCB0byBUV09OX1BST1RPQ09MTUFKT1IgKi8KKyAgIFRXX1VJTlQxNiAgUHJvdG9jb2xNaW5vcjsgICAvKiBBcHBsaWNhdGlvbiBhbmQgRFMgbXVzdCBzZXQgdG8gVFdPTl9QUk9UT0NPTE1JTk9SICovCisgICBUV19VSU5UMzIgIFN1cHBvcnRlZEdyb3VwczsgLyogQml0IGZpZWxkIE9SIGNvbWJpbmF0aW9uIG9mIERHXyBjb25zdGFudHMgKi8KKyAgIFRXX1NUUjMyICAgTWFudWZhY3R1cmVyOyAgICAvKiBNYW51ZmFjdHVyZXIgbmFtZSwgZS5nLiAiSGV3bGV0dC1QYWNrYXJkIiAqLworICAgVFdfU1RSMzIgICBQcm9kdWN0RmFtaWx5OyAgIC8qIFByb2R1Y3QgZmFtaWx5IG5hbWUsIGUuZy4gIlNjYW5KZXQiICAgICAgICovCisgICBUV19TVFIzMiAgIFByb2R1Y3ROYW1lOyAgICAgLyogUHJvZHVjdCBuYW1lLCBlLmcuICJTY2FuSmV0IFBsdXMiICAgICAgICAgKi8KK30gVFdfSURFTlRJVFksIEZBUiAqIHBUV19JREVOVElUWTsKKworLyogREFUX0lNQUdFSU5GTy4gQXBwbGljYXRpb24gZ2V0cyBkZXRhaWxlZCBpbWFnZSBpbmZvIGZyb20gRFMgd2l0aCB0aGlzLiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgVFdfRklYMzIgICBYUmVzb2x1dGlvbjsgICAgICAvKiBSZXNvbHV0aW9uIGluIHRoZSBob3Jpem9udGFsICAgICAgICAgICAgICovCisgICBUV19GSVgzMiAgIFlSZXNvbHV0aW9uOyAgICAgIC8qIFJlc29sdXRpb24gaW4gdGhlIHZlcnRpY2FsICAgICAgICAgICAgICAgKi8KKyAgIFRXX0lOVDMyICAgSW1hZ2VXaWR0aDsgICAgICAgLyogQ29sdW1ucyBpbiB0aGUgaW1hZ2UsIC0xIGlmIHVua25vd24gYnkgRFMqLworICAgVFdfSU5UMzIgICBJbWFnZUxlbmd0aDsgICAgICAvKiBSb3dzIGluIHRoZSBpbWFnZSwgLTEgaWYgdW5rbm93biBieSBEUyAgICovCisgICBUV19JTlQxNiAgIFNhbXBsZXNQZXJQaXhlbDsgIC8qIE51bWJlciBvZiBzYW1wbGVzIHBlciBwaXhlbCwgMyBmb3IgUkdCICAgKi8KKyAgIFRXX0lOVDE2ICAgQml0c1BlclNhbXBsZVs4XTsgLyogTnVtYmVyIG9mIGJpdHMgZm9yIGVhY2ggc2FtcGxlICAgICAgICAgICAqLworICAgVFdfSU5UMTYgICBCaXRzUGVyUGl4ZWw7ICAgICAvKiBOdW1iZXIgb2YgYml0cyBmb3IgZWFjaCBwYWRkZWQgcGl4ZWwgICAgICovCisgICBUV19CT09MICAgIFBsYW5hcjsgICAgICAgICAgIC8qIFRydWUgaWYgUGxhbmFyLCBGYWxzZSBpZiBjaHVua3kgICAgICAgICAgKi8KKyAgIFRXX0lOVDE2ICAgUGl4ZWxUeXBlOyAgICAgICAgLyogSG93IHRvIGludGVycCBkYXRhOyBwaG90byBpbnRlcnAgKFRXUFRfKSAqLworICAgVFdfVUlOVDE2ICBDb21wcmVzc2lvbjsgICAgICAvKiBIb3cgdGhlIGRhdGEgaXMgY29tcHJlc3NlZCAoVFdDUF94eHh4KSAgICovCit9IFRXX0lNQUdFSU5GTywgRkFSICogcFRXX0lNQUdFSU5GTzsKKworLyogREFUX0lNQUdFTEFZT1VULiBQcm92aWRlcyBpbWFnZSBsYXlvdXQgaW5mb3JtYXRpb24gaW4gY3VycmVudCB1bml0cy4gKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgIFRXX0ZSQU1FICAgRnJhbWU7ICAgICAgICAgIC8qIEZyYW1lIGNvb3JkcyB3aXRoaW4gbGFyZ2VyIGRvY3VtZW50ICovCisgICBUV19VSU5UMzIgIERvY3VtZW50TnVtYmVyOworICAgVFdfVUlOVDMyICBQYWdlTnVtYmVyOyAgICAgLyogUmVzZXQgd2hlbiB5b3UgZ28gdG8gbmV4dCBkb2N1bWVudCAgKi8KKyAgIFRXX1VJTlQzMiAgRnJhbWVOdW1iZXI7ICAgIC8qIFJlc2V0IHdoZW4geW91IGdvIHRvIG5leHQgcGFnZSAgICAgICovCit9IFRXX0lNQUdFTEFZT1VULCBGQVIgKiBwVFdfSU1BR0VMQVlPVVQ7CisKKy8qIERBVF9JTUFHRU1FTVhGRVIuIFVzZWQgdG8gcGFzcyBpbWFnZSBkYXRhIChlLmcuIGluIHN0cmlwcykgZnJvbSBEUyB0byBhcHBsaWNhdGlvbi4qLwordHlwZWRlZiBzdHJ1Y3QgeworICAgVFdfVUlOVDE2ICBDb21wcmVzc2lvbjsgIC8qIEhvdyB0aGUgZGF0YSBpcyBjb21wcmVzc2VkICAgICAgICAgICAgICAgICovCisgICBUV19VSU5UMzIgIEJ5dGVzUGVyUm93OyAgLyogTnVtYmVyIG9mIGJ5dGVzIGluIGEgcm93IG9mIGRhdGEgICAgICAgICAgKi8KKyAgIFRXX1VJTlQzMiAgQ29sdW1uczsgICAgICAvKiBIb3cgbWFueSBjb2x1bW5zICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgVFdfVUlOVDMyICBSb3dzOyAgICAgICAgIC8qIEhvdyBtYW55IHJvd3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICBUV19VSU5UMzIgIFhPZmZzZXQ7ICAgICAgLyogSG93IGZhciBmcm9tIHRoZSBzaWRlIG9mIHRoZSBpbWFnZSAgICAgICAgKi8KKyAgIFRXX1VJTlQzMiAgWU9mZnNldDsgICAgICAvKiBIb3cgZmFyIGZyb20gdGhlIHRvcCBvZiB0aGUgaW1hZ2UgICAgICAgICAqLworICAgVFdfVUlOVDMyICBCeXRlc1dyaXR0ZW47IC8qIEhvdyBtYW55IGJ5dGVzIHdyaXR0ZW4gaW4gTWVtb3J5ICAgICAgICAgICovCisgICBUV19NRU1PUlkgIE1lbW9yeTsgICAgICAgLyogTWVtIHN0cnVjdCB1c2VkIHRvIHBhc3MgYWN0dWFsIGltYWdlIGRhdGEgKi8KK30gVFdfSU1BR0VNRU1YRkVSLCBGQVIgKiBwVFdfSU1BR0VNRU1YRkVSOworCisvKiBDaGFuZ2VkIGluIDEuMTogUXVhbnRUYWJsZSwgSHVmZm1hbkRDLCBIdWZmbWFuQUMgVFdfTUVNUkVGIC0+IFRXX01FTU9SWSAgKi8KKy8qIERBVF9KUEVHQ09NUFJFU1NJT04uIEJhc2VkIG9uIEpQRUcgRHJhZnQgSW50ZXJuYXRpb25hbCBTdGQsIHZlciAxMDkxOC0xLiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgVFdfVUlOVDE2ICAgQ29sb3JTcGFjZTsgICAgICAgLyogT25lIG9mIHRoZSBUV1BUX3h4eHggdmFsdWVzICAgICAgICAgICAgICAgICovCisgICBUV19VSU5UMzIgICBTdWJTYW1wbGluZzsgICAgICAvKiBUd28gd29yZCAiYXJyYXkiIGZvciBzdWJzYW1wbGluZyB2YWx1ZXMgICAgKi8KKyAgIFRXX1VJTlQxNiAgIE51bUNvbXBvbmVudHM7ICAgIC8qIE51bWJlciBvZiBjb2xvciBjb21wb25lbnRzIGluIGltYWdlICAgICAgICAqLworICAgVFdfVUlOVDE2ICAgUmVzdGFydEZyZXF1ZW5jeTsgLyogRnJlcXVlbmN5IG9mIHJlc3RhcnQgbWFya2VyIGNvZGVzIGluIE1EVSdzICovCisgICBUV19VSU5UMTYgICBRdWFudE1hcFs0XTsgICAgICAvKiBNYXBwaW5nIG9mIGNvbXBvbmVudHMgdG8gUXVhbnRUYWJsZXMgICAgICAgKi8KKyAgIFRXX01FTU9SWSAgIFF1YW50VGFibGVbNF07ICAgIC8qIFF1YW50aXphdGlvbiB0YWJsZXMgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgVFdfVUlOVDE2ICAgSHVmZm1hbk1hcFs0XTsgICAgLyogTWFwcGluZyBvZiBjb21wb25lbnRzIHRvIEh1ZmZtYW4gdGFibGVzICAgICovCisgICBUV19NRU1PUlkgICBIdWZmbWFuRENbMl07ICAgICAvKiBEQyBIdWZmbWFuIHRhYmxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgIFRXX01FTU9SWSAgIEh1ZmZtYW5BQ1syXTsgICAgIC8qIEFDIEh1ZmZtYW4gdGFibGVzICAgICAgICAgICAgICAgICAgICAgICAgICAqLworfSBUV19KUEVHQ09NUFJFU1NJT04sIEZBUiAqIHBUV19KUEVHQ09NUFJFU1NJT047CisKKy8qIERBVF9QQUxFVFRFOC4gQ29sb3IgcGFsZXR0ZSB3aGVuIFRXUFRfUEFMRVRURSBwaXhlbHMgeGZlcidkIGluIG1lbSBidWYuICovCit0eXBlZGVmIHN0cnVjdCB7CisgICBUV19VSU5UMTYgICAgTnVtQ29sb3JzOyAgIC8qIE51bWJlciBvZiBjb2xvcnMgaW4gdGhlIGNvbG9yIHRhYmxlLiAgKi8KKyAgIFRXX1VJTlQxNiAgICBQYWxldHRlVHlwZTsgLyogVFdQQV94eHh4LCBzcGVjaWZpZXMgdHlwZSBvZiBwYWxldHRlLiAqLworICAgVFdfRUxFTUVOVDggIENvbG9yc1syNTZdOyAvKiBBcnJheSBvZiBwYWxldHRlIHZhbHVlcyBzdGFydHMgaGVyZS4gICovCit9IFRXX1BBTEVUVEU4LCBGQVIgKiBwVFdfUEFMRVRURTg7CisKKy8qIERBVF9QRU5ESU5HWEZFUlMuIFVzZWQgd2l0aCBNU0dfRU5EWEZFUiB0byBpbmRpY2F0ZSBhZGRpdGlvbmFsIGRhdGEuICovCit0eXBlZGVmIHN0cnVjdCB7CisgICBUV19VSU5UMTYgQ291bnQ7CisgICB1bmlvbiB7CisgICAgICBUV19VSU5UMzIgRU9KOworICAgICAgVFdfVUlOVDMyIFJlc2VydmVkOworICAgfSBEVU1NWVVOSU9OTkFNRTsKK30gVFdfUEVORElOR1hGRVJTLCBGQVIgKnBUV19QRU5ESU5HWEZFUlM7CisKKy8qIERBVF9SR0JSRVNQT05TRSAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgVFdfRUxFTUVOVDggICAgICAgICBSZXNwb25zZVsxXTsKK30gVFdfUkdCUkVTUE9OU0UsIEZBUiAqIHBUV19SR0JSRVNQT05TRTsKKworLyogREFUX1NFVFVQRklMRVhGRVIuIFNldHMgdXAgRFMgdG8gYXBwbGljYXRpb24gZGF0YSB0cmFuc2ZlciB2aWEgYSBmaWxlLiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgVFdfU1RSMjU1IEZpbGVOYW1lOworICAgVFdfVUlOVDE2IEZvcm1hdDsgICAvKiBBbnkgVFdGRl8gY29uc3RhbnQgKi8KKyAgIFRXX0lOVDE2ICBWUmVmTnVtOyAgLyogVXNlZCBmb3IgTWFjIG9ubHkgICovCit9IFRXX1NFVFVQRklMRVhGRVIsIEZBUiAqIHBUV19TRVRVUEZJTEVYRkVSOworCisvKiBEQVRfU0VUVVBNRU1YRkVSLiBTZXRzIHVwIERTIHRvIGFwcGxpY2F0aW9uIGRhdGEgdHJhbnNmZXIgdmlhIGEgbWVtb3J5IGJ1ZmZlci4gKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgIFRXX1VJTlQzMiBNaW5CdWZTaXplOworICAgVFdfVUlOVDMyIE1heEJ1ZlNpemU7CisgICBUV19VSU5UMzIgUHJlZmVycmVkOworfSBUV19TRVRVUE1FTVhGRVIsIEZBUiAqIHBUV19TRVRVUE1FTVhGRVI7CisKKy8qIERBVF9TVEFUVVMuIEFwcGxpY2F0aW9uIGdldHMgZGV0YWlsZWQgc3RhdHVzIGluZm8gZnJvbSBhIGRhdGEgc291cmNlIHdpdGggdGhpcy4gKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgIFRXX1VJTlQxNiAgQ29uZGl0aW9uQ29kZTsgLyogQW55IFRXQ0NfIGNvbnN0YW50ICAgICAqLworICAgVFdfVUlOVDE2ICBSZXNlcnZlZDsgICAgICAvKiBGdXR1cmUgZXhwYW5zaW9uIHNwYWNlICovCit9IFRXX1NUQVRVUywgRkFSICogcFRXX1NUQVRVUzsKKworLyogREFUX1VTRVJJTlRFUkZBQ0UuIENvb3JkaW5hdGVzIFVJIGJldHdlZW4gYXBwbGljYXRpb24gYW5kIGRhdGEgc291cmNlLiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgVFdfQk9PTCAgICBTaG93VUk7ICAvKiBUUlVFIGlmIERTIHNob3VsZCBicmluZyB1cCBpdHMgVUkgICAgICAgICAgICovCisgICBUV19CT09MICAgIE1vZGFsVUk7IC8qIEZvciBNYWMgb25seSAtIHRydWUgaWYgdGhlIERTJ3MgVUkgaXMgbW9kYWwgKi8KKyAgIFRXX0hBTkRMRSAgaFBhcmVudDsgLyogRm9yIHdpbmRvd3Mgb25seSAtIEFwcGxpY2F0aW9uIHdpbmRvdyBoYW5kbGUgICAgICAgICovCit9IFRXX1VTRVJJTlRFUkZBQ0UsIEZBUiAqIHBUV19VU0VSSU5URVJGQUNFOworCisvKiBTREggLSAwMy8yMS85NSAtIFRXVU5LICovCisvKiBEQVRfVFdVTktJREVOVElUWS4gUHJvdmlkZXMgRFMgaWRlbnRpdHkgYW5kICdvdGhlcicgaW5mb3JtYXRpb24gbmVjZXNzYXJ5ICovCisvKiAgICAgICAgICAgICAgICAgICAgYWNyb3NzIHRodW5rIGxpbmsuICovCit0eXBlZGVmIHN0cnVjdCB7CisgICBUV19JREVOVElUWSBpZGVudGl0eTsgICAgICAgIC8qIElkZW50aXR5IG9mIGRhdGEgc291cmNlLiAgICAgICAgICAgICAgICAgKi8KKyAgIFRXX1NUUjI1NSAgIGRzUGF0aDsgICAgICAgICAgLyogRnVsbCBwYXRoIGFuZCBmaWxlIG5hbWUgb2YgZGF0YSBzb3VyY2UuICAqLworfSBUV19UV1VOS0lERU5USVRZLCBGQVIgKiBwVFdfVFdVTktJREVOVElUWTsKKworLyogU0RIIC0gMDMvMjEvOTUgLSBUV1VOSyAqLworLyogUHJvdmlkZXMgRFNfRW50cnkgcGFyYW1ldGVycyBvdmVyIHRodW5rIGxpbmsuICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIFRXX0lOVDggICAgIGRlc3RGbGFnOyAgICAgICAvKiBUUlVFIGlmIGRlc3QgaXMgbm90IE5VTEwgICAgICAgICAgICAgICAgICovCisgICAgVFdfSURFTlRJVFkgZGVzdDsgICAgICAgICAgIC8qIElkZW50aXR5IG9mIGRhdGEgc291cmNlIChpZiB1c2VkKSAgICAgICAgKi8KKyAgICBUV19JTlQzMiAgICBkYXRhR3JvdXA7ICAgICAgLyogRFNNX0VudHJ5IGRhdGFHcm91cCBwYXJhbWV0ZXIgICAgICAgICAgICAqLworICAgIFRXX0lOVDE2ICAgIGRhdGFBcmdUeXBlOyAgICAvKiBEU01fRW50cnkgZGF0YUFyZ1R5cGUgcGFyYW1ldGVyICAgICAgICAgICovCisgICAgVFdfSU5UMTYgICAgbWVzc2FnZTsgICAgICAgIC8qIERTTV9FbnRyeSBtZXNzYWdlIHBhcmFtZXRlciAgICAgICAgICAgICAgKi8KKyAgICBUV19JTlQzMiAgICBwRGF0YVNpemU7ICAgICAgLyogU2l6ZSBvZiBwRGF0YSAoMCBpZiBOVUxMKSAgICAgICAgICAgICAgICAqLworICAgIC8vICBUV19NRU1SRUYgICBwRGF0YTsgICAgICAvKiBCYXNlZCBvbiBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpY3MsIGEgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBEYXRhIHBhcmFtZXRlciBtYWtlcyBubyBzZW5zZSBpbiB0aGlzICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3RydWN0dXJlLCBidXQgZGF0YSAoaWYgcHJvdmlkZWQpIHdpbGwgYmUqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhcHBlbmRlZCBpbiB0aGUgZGF0YSBibG9jay4gICAgICAgICAgICAgICovCisgICB9IFRXX1RXVU5LRFNFTlRSWVBBUkFNUywgRkFSICogcFRXX1RXVU5LRFNFTlRSWVBBUkFNUzsKKworLyogU0RIIC0gMDMvMjEvOTUgLSBUV1VOSyAqLworLyogUHJvdmlkZXMgRFNfRW50cnkgcmVzdWx0cyBvdmVyIHRodW5rIGxpbmsuICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIFRXX1VJTlQxNiAgIHJldHVybkNvZGU7ICAgICAvKiBUaHVua2VyIERzRW50cnkgcmV0dXJuIGNvZGUuICAgICAgICAgICAgICovCisgICAgVFdfVUlOVDE2ICAgY29uZGl0aW9uQ29kZTsgIC8qIFRodW5rZXIgRHNFbnRyeSBjb25kaXRpb24gY29kZS4gICAgICAgICAgKi8KKyAgICBUV19JTlQzMiAgICBwRGF0YVNpemU7ICAgICAgLyogU2l6ZSBvZiBwRGF0YSAoMCBpZiBOVUxMKSAgICAgICAgICAgICAgICAqLworICAgIC8vICBUV19NRU1SRUYgICBwRGF0YTsgICAgICAvKiBCYXNlZCBvbiBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpY3MsIGEgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBEYXRhIHBhcmFtZXRlciBtYWtlcyBubyBzZW5zZSBpbiB0aGlzICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3RydWN0dXJlLCBidXQgZGF0YSAoaWYgcHJvdmlkZWQpIHdpbGwgYmUqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhcHBlbmRlZCBpbiB0aGUgZGF0YSBibG9jay4gICAgICAgICAgICAgICovCit9IFRXX1RXVU5LRFNFTlRSWVJFVFVSTiwgRkFSICogcFRXX1RXVU5LRFNFTlRSWVJFVFVSTjsKKworLyogV0pEIC0gOTUwODE4ICovCisvKiBBZGRlZCBmb3IgMS42IFNwZWNpZmljYXRpb24gKi8KKy8qIFRXQUlOIDEuNiBDQVBfU1VQUE9SVEVEQ0FQU0VYVCBzdHJ1Y3R1cmUgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgVFdfVUlOVDE2IENhcDsgICAvKiBXaGljaCBDQVAvSUNBUCBpbmZvIGlzIHJlbGV2YW50IHRvICovCisgICAgVFdfVUlOVDE2IFByb3BlcnRpZXM7ICAvKiBNZXNzYWdlcyB0aGlzIENBUC9JQ0FQIHN1cHBvcnRzICovCit9IFRXX0NBUEVYVCwgRkFSICogcFRXX0NBUEVYVDsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKlwKKworICBWZXJzaW9uIDEuNzogICAgICBBZGRlZCBGb2xsb3dpbmcgZGF0YSBzdHJ1Y3R1cmUgZm9yIERvY3VtZW50IEltYWdpbmcgCisgIEp1bHkgMTk5NyAgICAgICAgIEVuaGFuY2VtZW50LgorICBLSEwgICAgICAgICAgICAgICBUV19DVVNUT01EU0RBVEEgLS0gIEZvciBTYXZpbmcgYW5kIFJlc3RvcmluZyBTb3VyY2UncyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS4KKyAgICAgICAgICAgICAgICAgICAgVFdfSU5GTyAgICAgICAgIC0tICBFYWNoIGF0dHJpYnV0ZSBmb3IgZXh0ZW5kZWQgaW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgVFdfRVhUSU1BR0VJTkZPIC0tICBFeHRlbmRlZCBpbWFnZSBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUuCisKK1wqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBUV19VSU5UMzIgIEluZm9MZW5ndGg7ICAgICAvKiBMZW5ndGggb2YgSW5mb3JtYXRpb24gaW4gYnl0ZXMuICAqLworICAgIFRXX0hBTkRMRSAgaERhdGE7ICAgICAgICAgIC8qIFBsYWNlIGhvbGRlciBmb3IgZGF0YSwgRFMgQWxsb2NhdGVzICovCit9VFdfQ1VTVE9NRFNEQVRBLCBGQVIgKnBUV19DVVNUT01EU0RBVEE7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBUV19VSU5UMTYgICBJbmZvSUQ7CisgICAgVFdfVUlOVDE2ICAgSXRlbVR5cGU7CisgICAgVFdfVUlOVDE2ICAgTnVtSXRlbXM7CisgICAgVFdfVUlOVDE2ICAgQ29uZENvZGU7CisgICAgVFdfVUlOVDMyICAgSXRlbTsKK31UV19JTkZPLCBGQVIqIHBUV19JTkZPOworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgVFdfVUlOVDMyICAgTnVtSW5mb3M7CisgICAgVFdfSU5GTyAgICAgSW5mb1sxXTsKK31UV19FWFRJTUFHRUlORk8sIEZBUiogcFRXX0VYVElNQUdFSU5GTzsKKworLyogQWRkZWQgMS44ICovCisKKy8qIERBVF9BVURJT0lORk8sIGluZm9ybWF0aW9uIGFib3V0IGF1ZGlvIGRhdGEgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgIFRXX1NUUjI1NSAgTmFtZTsgICAgICAgLyogbmFtZSBvZiBhdWRpbyBkYXRhICovCisgICBUV19VSU5UMzIgIFJlc2VydmVkOyAgIC8qIHJlc2VydmVkIHNwYWNlICovCit9IFRXX0FVRElPSU5GTywgRkFSICogcFRXX0FVRElPSU5GTzsKKworLyogREFUX0RFVklDRUVWRU5ULCBpbmZvcm1hdGlvbiBhYm91dCBldmVudHMgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgIFRXX1VJTlQzMiAgRXZlbnQ7ICAgICAgICAgICAgICAgICAgLyogT25lIG9mIHRoZSBUV0RFX3h4eHggdmFsdWVzLiAqLworICAgVFdfU1RSMjU1ICBEZXZpY2VOYW1lOyAgICAgICAgICAgICAvKiBUaGUgbmFtZSBvZiB0aGUgZGV2aWNlIHRoYXQgZ2VuZXJhdGVkIHRoZSBldmVudCAqLworICAgVFdfVUlOVDMyICBCYXR0ZXJ5TWludXRlczsgICAgICAgICAvKiBCYXR0ZXJ5IE1pbnV0ZXMgUmVtYWluaW5nICAgICovCisgICBUV19JTlQxNiAgIEJhdHRlcnlQZXJjZW50YWdlOyAgICAgIC8qIEJhdHRlcnkgUGVyY2VudGFnZSBSZW1haW5pbmcgKi8KKyAgIFRXX0lOVDMyICAgUG93ZXJTdXBwbHk7ICAgICAgICAgICAgLyogUG93ZXIgU3VwcGx5ICAgICAgICAgICAgICAgICAqLworICAgVFdfRklYMzIgICBYUmVzb2x1dGlvbjsgICAgICAgICAgICAvKiBSZXNvbHV0aW9uICAgICAgICAgICAgICAgICAgICovCisgICBUV19GSVgzMiAgIFlSZXNvbHV0aW9uOyAgICAgICAgICAgIC8qIFJlc29sdXRpb24gICAgICAgICAgICAgICAgICAgKi8KKyAgIFRXX1VJTlQzMiAgRmxhc2hVc2VkMjsgICAgICAgICAgICAgLyogRmxhc2ggVXNlZDIgICAgICAgICAgICAgICAgICAqLworICAgVFdfVUlOVDMyICBBdXRvbWF0aWNDYXB0dXJlOyAgICAgICAvKiBBdXRvbWF0aWMgQ2FwdHVyZSAgICAgICAgICAgICovCisgICBUV19VSU5UMzIgIFRpbWVCZWZvcmVGaXJzdENhcHR1cmU7IC8qIEF1dG9tYXRpYyBDYXB0dXJlICAgICAgICAgICAgKi8KKyAgIFRXX1VJTlQzMiAgVGltZUJldHdlZW5DYXB0dXJlczsgICAgLyogQXV0b21hdGljIENhcHR1cmUgICAgICAgICAgICAqLworfSBUV19ERVZJQ0VFVkVOVCwgRkFSICogcFRXX0RFVklDRUVWRU5UOworCisvKiBEQVRfRklMRVNZU1RFTSwgaW5mb3JtYXRpb24gYWJvdXQgVFdBSU4gZmlsZSBzeXN0ZW0gKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgIC8qIERHX0NPTlRST0wgLyBEQVRfRklMRVNZU1RFTSAvIE1TR194eHh4IGZpZWxkcyAgICAgKi8KKyAgIFRXX1NUUjI1NSAgSW5wdXROYW1lOyAvKiBUaGUgbmFtZSBvZiB0aGUgaW5wdXQgb3Igc291cmNlIGZpbGUgKi8KKyAgIFRXX1NUUjI1NSAgT3V0cHV0TmFtZTsgLyogVGhlIHJlc3VsdCBvZiBhbiBvcGVyYXRpb24gb3IgdGhlIG5hbWUgb2YgYSBkZXN0aW5hdGlvbiBmaWxlICovCisgICBUV19NRU1SRUYgIENvbnRleHQ7IC8qIFNvdXJjZSBzcGVjaWZpYyBkYXRhIHVzZWQgdG8gcmVtZW1iZXIgc3RhdGUgaW5mb3JtYXRpb24gKi8KKyAgIC8qIERHX0NPTlRST0wgLyBEQVRfRklMRVNZU1RFTSAvIE1TR19ERUxFVEUgZmllbGQgICAgKi8KKyAgIGludCAgICAgICAgUmVjdXJzaXZlOyAvKiByZWN1cnNpdmVseSBkZWxldGUgYWxsIHN1Yi1kaXJlY3RvcmllcyAqLworICAgLyogREdfQ09OVFJPTCAvIERBVF9GSUxFU1lTVEVNIC8gTVNHX0dFVElORk8gZmllbGRzICAqLworICAgVFdfSU5UMzIgICBGaWxlVHlwZTsgLyogT25lIG9mIHRoZSBUV0ZUX3h4eHggdmFsdWVzICovCisgICBUV19VSU5UMzIgIFNpemU7IC8qIFNpemUgb2YgY3VycmVudCBGaWxlVHlwZSAqLworICAgVFdfU1RSMzIgICBDcmVhdGVUaW1lRGF0ZTsgLyogY3JlYXRpb24gZGF0ZSBvZiB0aGUgZmlsZSAqLworICAgVFdfU1RSMzIgICBNb2RpZmllZFRpbWVEYXRlOyAvKiBsYXN0IGRhdGUgdGhlIGZpbGUgd2FzIG1vZGlmaWVkICovCisgICBUV19VSU5UMzIgIEZyZWVTcGFjZTsgLyogYnl0ZXMgb2YgZnJlZSBzcGFjZSBvbiB0aGUgY3VycmVudCBkZXZpY2UgKi8KKyAgIFRXX0lOVDMyICAgTmV3SW1hZ2VTaXplOyAvKiBlc3RpbWF0ZSBvZiB0aGUgYW1vdW50IG9mIHNwYWNlIGEgbmV3IGltYWdlIHdvdWxkIHRha2UgdXAgKi8KKyAgIFRXX1VJTlQzMiAgTnVtYmVyT2ZGaWxlczsgLyogbnVtYmVyIG9mIGZpbGVzLCBkZXBlbmRzIG9uIEZpbGVUeXBlICovCisgICBUV19VSU5UMzIgIE51bWJlck9mU25pcHBldHM7IC8qKi8KKyAgIGNoYXIgICAgICAgUmVzZXJ2ZWRbNTEyXTsgLyoqLworfSBUV19GSUxFU1lTVEVNLCBGQVIgKiBwVFdfRklMRVNZU1RFTTsKKworLyogREFUX1BBU1NUSFJVLCBkZXZpY2UgZGVwZW5kYW50IGRhdGEgdG8gcGFzcyB0aHJvdWdoIERhdGEgU291cmNlICovCit0eXBlZGVmIHN0cnVjdCB7CisgICBUV19NRU1SRUYgIHBDb21tYW5kOyAgICAgICAgLyogUG9pbnRlciB0byBDb21tYW5kIGJ1ZmZlciAqLworICAgVFdfVUlOVDMyICBDb21tYW5kQnl0ZXM7ICAgIC8qIE51bWJlciBvZiBieXRlcyBpbiBDb21tYW5kIGJ1ZmZlciAqLworICAgVFdfSU5UMzIgICBEaXJlY3Rpb247ICAgICAgIC8qIE9uZSBvZiB0aGUgVFdEUl94eHh4IHZhbHVlcy4gIERlZmluZXMgdGhlIGRpcmVjdGlvbiBvZiBkYXRhIGZsb3cgKi8KKyAgIFRXX01FTVJFRiAgcERhdGE7ICAgICAgICAgICAvKiBQb2ludGVyIHRvIERhdGEgYnVmZmVyICovCisgICBUV19VSU5UMzIgIERhdGFCeXRlczsgICAgICAgLyogTnVtYmVyIG9mIGJ5dGVzIGluIERhdGEgYnVmZmVyICovCisgICBUV19VSU5UMzIgIERhdGFCeXRlc1hmZXJlZDsgLyogTnVtYmVyIG9mIGJ5dGVzIHN1Y2Nlc3NmdWxseSB0cmFuc2ZlcnJlZCAqLworfSBUV19QQVNTVEhSVSwgRkFSICogcFRXX1BBU1NUSFJVOworCisvKiBEQVRfU0VUVVBBVURJT0ZJTEVYRkVSLCBpbmZvcm1hdGlvbiByZXF1aXJlZCB0byBzZXR1cCBhbiBhdWRpbyBmaWxlIHRyYW5zZmVyICovCit0eXBlZGVmIHN0cnVjdCB7CisgICBUV19TVFIyNTUgIEZpbGVOYW1lOyAvKiBmdWxsIHBhdGggdGFyZ2V0IGZpbGUgKi8KKyAgIFRXX1VJTlQxNiAgRm9ybWF0OyAgIC8qIG9uZSBvZiBUV0FGX3h4eHggKi8KKyAgIFRXX0lOVDE2IFZSZWZOdW07Cit9IFRXX1NFVFVQQVVESU9GSUxFWEZFUiwgRkFSICogcFRXX1NFVFVQQVVESU9GSUxFWEZFUjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEdlbmVyaWMgQ29uc3RhbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBUV09OX0FSUkFZICAgICAgICAgICAzIC8qIGluZGljYXRlcyBUV19BUlJBWSBjb250YWluZXIgICAgICAgKi8KKyNkZWZpbmUgVFdPTl9FTlVNRVJBVElPTiAgICAgNCAvKiBpbmRpY2F0ZXMgVFdfRU5VTUVSQVRJT04gY29udGFpbmVyICovCisjZGVmaW5lIFRXT05fT05FVkFMVUUgICAgICAgIDUgLyogaW5kaWNhdGVzIFRXX09ORVZBTFVFIGNvbnRhaW5lciAgICAqLworI2RlZmluZSBUV09OX1JBTkdFICAgICAgICAgICA2IC8qIGluZGljYXRlcyBUV19SQU5HRSBjb250YWluZXIgICAgICAgKi8KKworI2RlZmluZSBUV09OX0lDT05JRCAgICAgICAgICA5NjIgLyogcmVzIElkIG9mIGljb24gdXNlZCBpbiBVU0VSU0VMRUNUIGxib3ggKi8KKyNkZWZpbmUgVFdPTl9EU01JRCAgICAgICAgICAgNDYxIC8qIHJlcyBJZCBvZiB0aGUgRFNNIHZlcnNpb24gbnVtIHJlc291cmNlICovCisjZGVmaW5lIFRXT05fRFNNQ09ERUlEICAgICAgIDYzICAvKiByZXMgSWQgb2YgdGhlIE1hYyBTTSBDb2RlIHJlc291cmNlICAgICAqLworCisjZGVmaW5lIFRXT05fRE9OVENBUkU4ICAgICAgIDB4ZmYKKyNkZWZpbmUgVFdPTl9ET05UQ0FSRTE2ICAgICAgMHhmZmZmCisjZGVmaW5lIFRXT05fRE9OVENBUkUzMiAgICAgIDB4ZmZmZmZmZmYKKworLyogRmxhZ3MgdXNlZCBpbiBUV19NRU1PUlkgc3RydWN0dXJlLiAqLworI2RlZmluZSBUV01GX0FQUE9XTlMgICAgIDB4MQorI2RlZmluZSBUV01GX0RTTU9XTlMgICAgIDB4MgorI2RlZmluZSBUV01GX0RTT1dOUyAgICAgIDB4NAorI2RlZmluZSBUV01GX1BPSU5URVIgICAgIDB4OAorI2RlZmluZSBUV01GX0hBTkRMRSAgICAgIDB4MTAKKworLyogUGFsZXR0ZSB0eXBlcyBmb3IgVFdfUEFMRVRURTggKi8KKyNkZWZpbmUgVFdQQV9SR0IgICAgICAgICAwCisjZGVmaW5lIFRXUEFfR1JBWSAgICAgICAgMQorI2RlZmluZSBUV1BBX0NNWSAgICAgICAgIDIKKworLyogVGhlcmUgYXJlIGZvdXIgY29udGFpbmVycyB1c2VkIGZvciBjYXBhYmlsaXRpZXMgbmVnb3RpYXRpb246CisgKiAgICBUV09OX09ORVZBTFVFLCBUV09OX1JBTkdFLCBUV09OX0VOVU1FUkFUSU9OLCBUV09OX0FSUkFZCisgKiBJbiBlYWNoIGNvbnRhaW5lciBzdHJ1Y3R1cmUgSXRlbVR5cGUgY2FuIGJlIFRXVFlfSU5UOCwgVFdUWV9JTlQxNiwgZXRjLgorICogVGhlIGtpbmQgb2YgZGF0YSBzdG9yZWQgaW4gdGhlIGNvbnRhaW5lciBjYW4gYmUgZGV0ZXJtaW5lZCBieSBkb2luZworICogRENJdGVtU2l6ZVtJdGVtVHlwZV0gd2hlcmUgdGhlIGZvbGxvd2luZyBpcyBkZWZpbmVkIGluIFRXQUlOIGdsdWUgY29kZToKKyAqICAgICAgICAgIERDSXRlbVNpemVbXT0geyBzaXplb2YoVFdfSU5UOCksCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKFRXX0lOVDE2KSwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBldGMuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKFRXX1VJTlQzMikgfTsKKyAqCisgKi8KKworI2RlZmluZSBUV1RZX0lOVDggICAgICAgIDB4MDAwMCAgICAvKiBNZWFucyBJdGVtIGlzIGEgVFdfSU5UOCAgICovCisjZGVmaW5lIFRXVFlfSU5UMTYgICAgICAgMHgwMDAxICAgIC8qIE1lYW5zIEl0ZW0gaXMgYSBUV19JTlQxNiAgKi8KKyNkZWZpbmUgVFdUWV9JTlQzMiAgICAgICAweDAwMDIgICAgLyogTWVhbnMgSXRlbSBpcyBhIFRXX0lOVDMyICAqLworCisjZGVmaW5lIFRXVFlfVUlOVDggICAgICAgMHgwMDAzICAgIC8qIE1lYW5zIEl0ZW0gaXMgYSBUV19VSU5UOCAgKi8KKyNkZWZpbmUgVFdUWV9VSU5UMTYgICAgICAweDAwMDQgICAgLyogTWVhbnMgSXRlbSBpcyBhIFRXX1VJTlQxNiAqLworI2RlZmluZSBUV1RZX1VJTlQzMiAgICAgIDB4MDAwNSAgICAvKiBNZWFucyBJdGVtIGlzIGEgVFdfVUlOVDMyICovCisKKyNkZWZpbmUgVFdUWV9CT09MICAgICAgICAweDAwMDYgICAgLyogTWVhbnMgSXRlbSBpcyBhIFRXX0JPT0wgICAqLworCisjZGVmaW5lIFRXVFlfRklYMzIgICAgICAgMHgwMDA3ICAgIC8qIE1lYW5zIEl0ZW0gaXMgYSBUV19GSVgzMiAgKi8KKworI2RlZmluZSBUV1RZX0ZSQU1FICAgICAgIDB4MDAwOCAgICAvKiBNZWFucyBJdGVtIGlzIGEgVFdfRlJBTUUgICovCisKKyNkZWZpbmUgVFdUWV9TVFIzMiAgICAgICAweDAwMDkgICAgLyogTWVhbnMgSXRlbSBpcyBhIFRXX1NUUjMyICAqLworI2RlZmluZSBUV1RZX1NUUjY0ICAgICAgIDB4MDAwYSAgICAvKiBNZWFucyBJdGVtIGlzIGEgVFdfU1RSNjQgICovCisjZGVmaW5lIFRXVFlfU1RSMTI4ICAgICAgMHgwMDBiICAgIC8qIE1lYW5zIEl0ZW0gaXMgYSBUV19TVFIxMjggKi8KKyNkZWZpbmUgVFdUWV9TVFIyNTUgICAgICAweDAwMGMgICAgLyogTWVhbnMgSXRlbSBpcyBhIFRXX1NUUjI1NSAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ2FwYWJpbGl0eSBDb25zdGFudHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBJQ0FQX0JJVE9SREVSIHZhbHVlcyAoQk9fIG1lYW5zIEJpdCBPcmRlcikgKi8KKyNkZWZpbmUgVFdCT19MU0JGSVJTVCAgICAwCisjZGVmaW5lIFRXQk9fTVNCRklSU1QgICAgMQorCisvKiBJQ0FQX0NPTVBSRVNTSU9OIHZhbHVlcyAoQ1BfIG1lYW5zIENvbVByZXNzaW9uICkgKi8KKyNkZWZpbmUgVFdDUF9OT05FICAgICAgICAwCisjZGVmaW5lIFRXQ1BfUEFDS0JJVFMgICAgMQorI2RlZmluZSBUV0NQX0dST1VQMzFEICAgIDIgLyogRm9sbG93cyBDQ0lUVCBzcGVjIChubyBFbmQgT2YgTGluZSkgICAgICAgICAgKi8KKyNkZWZpbmUgVFdDUF9HUk9VUDMxREVPTCAzIC8qIEZvbGxvd3MgQ0NJVFQgc3BlYyAoaGFzIEVuZCBPZiBMaW5lKSAgICAgICAgICovCisjZGVmaW5lIFRXQ1BfR1JPVVAzMkQgICAgNCAvKiBGb2xsb3dzIENDSVRUIHNwZWMgKHVzZSBjYXAgZm9yIEsgRmFjdG9yKSAgICAqLworI2RlZmluZSBUV0NQX0dST1VQNCAgICAgIDUgLyogRm9sbG93cyBDQ0lUVCBzcGVjICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVFdDUF9KUEVHICAgICAgICA2IC8qIFVzZSBjYXBhYmlsaXR5IGZvciBtb3JlIGluZm8gICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFRXQ1BfTFpXICAgICAgICAgNyAvKiBNdXN0IGxpY2Vuc2UgZnJvbSBVbmlzeXMgYW5kIElCTSB0byB1c2UgICAgICAqLworI2RlZmluZSBUV0NQX0pCSUcgICAgICAgIDggLyogRm9yIEJpdG9uYWwgaW1hZ2VzICAtLSBBZGRlZCAxLjcgS0hMICAgICAgICAgKi8KKy8qIEFkZGVkIDEuOCAqLworI2RlZmluZSBUV0NQX1BORyAgICAgICAgIDkKKyNkZWZpbmUgVFdDUF9STEU0ICAgICAgICAxMAorI2RlZmluZSBUV0NQX1JMRTggICAgICAgIDExCisjZGVmaW5lIFRXQ1BfQklURklFTERTICAgMTIKKworCisvKiBJQ0FQX0lNQUdFRklMRUZPUk1BVCB2YWx1ZXMgKEZGX21lYW5zIEZpbGUgRm9ybWF0KSAgICovCisjZGVmaW5lIFRXRkZfVElGRiAgICAgICAgMCAgICAvKiBUYWdnZWQgSW1hZ2UgRmlsZSBGb3JtYXQgICAgICovCisjZGVmaW5lIFRXRkZfUElDVCAgICAgICAgMSAgICAvKiBNYWNpbnRvc2ggUElDVCAgICAgICAgICAgICAgICovCisjZGVmaW5lIFRXRkZfQk1QICAgICAgICAgMiAgICAvKiBXaW5kb3dzIEJpdG1hcCAgICAgICAgICAgICAgICovCisjZGVmaW5lIFRXRkZfWEJNICAgICAgICAgMyAgICAvKiBYLVdpbmRvd3MgQml0bWFwICAgICAgICAgICAgICovCisjZGVmaW5lIFRXRkZfSkZJRiAgICAgICAgNCAgICAvKiBKUEVHIEZpbGUgSW50ZXJjaGFuZ2UgRm9ybWF0ICovCisjZGVmaW5lIFRXRkZfRlBYICAgICAgICAgNSAgICAvKiBGbGFzaCBQaXggICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFRXRkZfVElGRk1VTFRJICAgNiAgICAvKiBNdWx0aS1wYWdlIHRpZmYgZmlsZSAgICAgICAgICovCisjZGVmaW5lIFRXRkZfUE5HICAgICAgICAgNworI2RlZmluZSBUV0ZGX1NQSUZGICAgICAgIDgKKyNkZWZpbmUgVFdGRl9FWElGICAgICAgICA5CisKKworLyogSUNBUF9GSUxURVIgdmFsdWVzIChGVF8gbWVhbnMgRmlsdGVyIFR5cGUpICovCisjZGVmaW5lIFRXRlRfUkVEICAgICAgICAgMAorI2RlZmluZSBUV0ZUX0dSRUVOICAgICAgIDEKKyNkZWZpbmUgVFdGVF9CTFVFICAgICAgICAyCisjZGVmaW5lIFRXRlRfTk9ORSAgICAgICAgMworI2RlZmluZSBUV0ZUX1dISVRFICAgICAgIDQKKyNkZWZpbmUgVFdGVF9DWUFOICAgICAgICA1CisjZGVmaW5lIFRXRlRfTUFHRU5UQSAgICAgNgorI2RlZmluZSBUV0ZUX1lFTExPVyAgICAgIDcKKyNkZWZpbmUgVFdGVF9CTEFDSyAgICAgICA4CisKKy8qIElDQVBfTElHSFRQQVRIIHZhbHVlcyAoTFBfIG1lYW5zIExpZ2h0IFBhdGgpICovCisjZGVmaW5lIFRXTFBfUkVGTEVDVElWRSAgIDAKKyNkZWZpbmUgVFdMUF9UUkFOU01JU1NJVkUgMQorCisvKiBJQ0FQX0xJR0hUU09VUkNFIHZhbHVlcyAoTFNfIG1lYW5zIExpZ2h0IFNvdXJjZSkgKi8KKyNkZWZpbmUgVFdMU19SRUQgICAgICAgICAwCisjZGVmaW5lIFRXTFNfR1JFRU4gICAgICAgMQorI2RlZmluZSBUV0xTX0JMVUUgICAgICAgIDIKKyNkZWZpbmUgVFdMU19OT05FICAgICAgICAzCisjZGVmaW5lIFRXTFNfV0hJVEUgICAgICAgNAorI2RlZmluZSBUV0xTX1VWICAgICAgICAgIDUKKyNkZWZpbmUgVFdMU19JUiAgICAgICAgICA2CisKKy8qIElDQVBfT1JJRU5UQVRJT04gdmFsdWVzIChPUl8gbWVhbnMgT1JpZW50YXRpb24pICovCisjZGVmaW5lIFRXT1JfUk9UMCAgICAgICAgMAorI2RlZmluZSBUV09SX1JPVDkwICAgICAgIDEKKyNkZWZpbmUgVFdPUl9ST1QxODAgICAgICAyCisjZGVmaW5lIFRXT1JfUk9UMjcwICAgICAgMworI2RlZmluZSBUV09SX1BPUlRSQUlUICAgIFRXT1JfUk9UMAorI2RlZmluZSBUV09SX0xBTkRTQ0FQRSAgIFRXT1JfUk9UMjcwCisKKy8qIElDQVBfUExBTkFSQ0hVTktZIHZhbHVlcyAoUENfIG1lYW5zIFBsYW5hci9DaHVua3kgKSAqLworI2RlZmluZSBUV1BDX0NIVU5LWSAgICAgIDAKKyNkZWZpbmUgVFdQQ19QTEFOQVIgICAgICAxCisKKy8qIElDQVBfUElYRUxGTEFWT1IgdmFsdWVzIChQRl8gbWVhbnMgUGl4ZWwgRmxhdm9yKSAqLworI2RlZmluZSBUV1BGX0NIT0NPTEFURSAgIDAgIC8qIHplcm8gcGl4ZWwgcmVwcmVzZW50cyBkYXJrZXN0IHNoYWRlICAqLworI2RlZmluZSBUV1BGX1ZBTklMTEEgICAgIDEgIC8qIHplcm8gcGl4ZWwgcmVwcmVzZW50cyBsaWdodGVzdCBzaGFkZSAqLworCisvKiBJQ0FQX1BJWEVMVFlQRSB2YWx1ZXMgKFBUXyBtZWFucyBQaXhlbCBUeXBlKSAqLworI2RlZmluZSBUV1BUX0JXICAgICAgICAgIDAgLyogQmxhY2sgYW5kIFdoaXRlICovCisjZGVmaW5lIFRXUFRfR1JBWSAgICAgICAgMQorI2RlZmluZSBUV1BUX1JHQiAgICAgICAgIDIKKyNkZWZpbmUgVFdQVF9QQUxFVFRFICAgICAzCisjZGVmaW5lIFRXUFRfQ01ZICAgICAgICAgNAorI2RlZmluZSBUV1BUX0NNWUsgICAgICAgIDUKKyNkZWZpbmUgVFdQVF9ZVVYgICAgICAgICA2CisjZGVmaW5lIFRXUFRfWVVWSyAgICAgICAgNworI2RlZmluZSBUV1BUX0NJRVhZWiAgICAgIDgKKworLyogSUNBUF9TVVBQT1JURURTSVpFUyB2YWx1ZXMgKFNTXyBtZWFucyBTdXBwb3J0ZWQgU2l6ZXMpICovCisjZGVmaW5lIFRXU1NfTk9ORSAgICAgICAgMAorI2RlZmluZSBUV1NTX0E0TEVUVEVSICAgIDEKKyNkZWZpbmUgVFdTU19CNUxFVFRFUiAgICAyCisjZGVmaW5lIFRXU1NfVVNMRVRURVIgICAgMworI2RlZmluZSBUV1NTX1VTTEVHQUwgICAgIDQKKy8qIEFkZGVkIDEuNSAqLworI2RlZmluZSBUV1NTX0E1ICAgICAgICAgIDUKKyNkZWZpbmUgVFdTU19CNCAgICAgICAgICA2CisjZGVmaW5lIFRXU1NfQjYgICAgICAgICAgNworLy8jZGVmaW5lIFRXU1NfQiAgICAgICAgICA4CisvKiBBZGRlZCAxLjcgKi8KKyNkZWZpbmUgVFdTU19VU0xFREdFUiAgICA5CisjZGVmaW5lIFRXU1NfVVNFWEVDVVRJVkUgMTAKKyNkZWZpbmUgVFdTU19BMyAgICAgICAgICAxMQorI2RlZmluZSBUV1NTX0IzICAgICAgICAgIDEyCisjZGVmaW5lIFRXU1NfQTYgICAgICAgICAgMTMKKyNkZWZpbmUgVFdTU19DNCAgICAgICAgICAxNAorI2RlZmluZSBUV1NTX0M1ICAgICAgICAgIDE1CisjZGVmaW5lIFRXU1NfQzYgICAgICAgICAgMTYKKy8qIEFkZGVkIDEuOCAqLworI2RlZmluZSBUV1NTXzRBMCAgICAgICAgICAxNworI2RlZmluZSBUV1NTXzJBMCAgICAgICAgICAxOAorI2RlZmluZSBUV1NTX0EwICAgICAgICAgICAxOQorI2RlZmluZSBUV1NTX0ExICAgICAgICAgICAyMAorI2RlZmluZSBUV1NTX0EyICAgICAgICAgICAyMQorI2RlZmluZSBUV1NTX0E0ICAgICAgICAgICBUV1NTX0E0TEVUVEVSCisjZGVmaW5lIFRXU1NfQTcgICAgICAgICAgIDIyCisjZGVmaW5lIFRXU1NfQTggICAgICAgICAgIDIzCisjZGVmaW5lIFRXU1NfQTkgICAgICAgICAgIDI0CisjZGVmaW5lIFRXU1NfQTEwICAgICAgICAgIDI1CisjZGVmaW5lIFRXU1NfSVNPQjAgICAgICAgIDI2CisjZGVmaW5lIFRXU1NfSVNPQjEgICAgICAgIDI3CisjZGVmaW5lIFRXU1NfSVNPQjIgICAgICAgIDI4CisjZGVmaW5lIFRXU1NfSVNPQjMgICAgICAgIFRXU1NfQjMKKyNkZWZpbmUgVFdTU19JU09CNCAgICAgICAgVFdTU19CNAorI2RlZmluZSBUV1NTX0lTT0I1ICAgICAgICAyOQorI2RlZmluZSBUV1NTX0lTT0I2ICAgICAgICBUV1NTX0I2CisjZGVmaW5lIFRXU1NfSVNPQjcgICAgICAgIDMwCisjZGVmaW5lIFRXU1NfSVNPQjggICAgICAgIDMxCisjZGVmaW5lIFRXU1NfSVNPQjkgICAgICAgIDMyCisjZGVmaW5lIFRXU1NfSVNPQjEwICAgICAgIDMzCisjZGVmaW5lIFRXU1NfSklTQjAgICAgICAgIDM0CisjZGVmaW5lIFRXU1NfSklTQjEgICAgICAgIDM1CisjZGVmaW5lIFRXU1NfSklTQjIgICAgICAgIDM2CisjZGVmaW5lIFRXU1NfSklTQjMgICAgICAgIDM3CisjZGVmaW5lIFRXU1NfSklTQjQgICAgICAgIDM4CisjZGVmaW5lIFRXU1NfSklTQjUgICAgICAgIFRXU1NfQjVMRVRURVIKKyNkZWZpbmUgVFdTU19KSVNCNiAgICAgICAgMzkKKyNkZWZpbmUgVFdTU19KSVNCNyAgICAgICAgNDAKKyNkZWZpbmUgVFdTU19KSVNCOCAgICAgICAgNDEKKyNkZWZpbmUgVFdTU19KSVNCOSAgICAgICAgNDIKKyNkZWZpbmUgVFdTU19KSVNCMTAgICAgICAgNDMKKyNkZWZpbmUgVFdTU19DMCAgICAgICAgICAgNDQKKyNkZWZpbmUgVFdTU19DMSAgICAgICAgICAgNDUKKyNkZWZpbmUgVFdTU19DMiAgICAgICAgICAgNDYKKyNkZWZpbmUgVFdTU19DMyAgICAgICAgICAgNDcKKyNkZWZpbmUgVFdTU19DNyAgICAgICAgICAgNDgKKyNkZWZpbmUgVFdTU19DOCAgICAgICAgICAgNDkKKyNkZWZpbmUgVFdTU19DOSAgICAgICAgICAgNTAKKyNkZWZpbmUgVFdTU19DMTAgICAgICAgICAgNTEKKyNkZWZpbmUgVFdTU19VU1NUQVRFTUVOVCAgNTIKKyNkZWZpbmUgVFdTU19CVVNJTkVTU0NBUkQgNTMKKworLyogSUNBUF9YRkVSTUVDSCB2YWx1ZXMgKFNYXyBtZWFucyBTZXR1cCBYRmVyKSAqLworI2RlZmluZSBUV1NYX05BVElWRSAgICAgIDAKKyNkZWZpbmUgVFdTWF9GSUxFICAgICAgICAxCisjZGVmaW5lIFRXU1hfTUVNT1JZICAgICAgMgorCisvKiBJQ0FQX1VOSVRTIHZhbHVlcyAoVU5fIG1lYW5zIFVOaXRzKSAqLworI2RlZmluZSBUV1VOX0lOQ0hFUyAgICAgIDAKKyNkZWZpbmUgVFdVTl9DRU5USU1FVEVSUyAxCisjZGVmaW5lIFRXVU5fUElDQVMgICAgICAgMgorI2RlZmluZSBUV1VOX1BPSU5UUyAgICAgIDMKKyNkZWZpbmUgVFdVTl9UV0lQUyAgICAgICA0CisjZGVmaW5lIFRXVU5fUElYRUxTICAgICAgNQorCisvKiBBZGRlZCAxLjUgKi8KKy8qIElDQVBfQklUREVQVEhSRURVQ1RJT04gdmFsdWVzIChCUl8gbWVhbnMgQml0ZGVwdGggUmVkdWN0aW9uKSAqLworI2RlZmluZSBUV0JSX1RIUkVTSE9MRCAgICAgMAorI2RlZmluZSBUV0JSX0hBTEZUT05FICAgICAgMQorI2RlZmluZSBUV0JSX0NVU1RIQUxGVE9ORSAgMgorI2RlZmluZSBUV0JSX0RJRkZVU0lPTiAgICAgMworCisvKiBBZGRlZCAxLjcgKi8KKy8qIElDQVBfRFVQTEVYIHZhbHVlcyAqLworI2RlZmluZSBUV0RYX05PTkUgICAgICAgICAwCisjZGVmaW5lIFRXRFhfMVBBU1NEVVBMRVggIDEKKyNkZWZpbmUgVFdEWF8yUEFTU0RVUExFWCAgMgorCisvKiBBZGRlZCAxLjcgKi8KKy8qIFRXRUlfQkFSQ09ERVRZUEUgdmFsdWVzICovCisjZGVmaW5lIFRXQlRfM09GOSAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBUV0JUXzJPRjVJTlRFUkxFQVZFRCAgICAgIDEKKyNkZWZpbmUgVFdCVF8yT0Y1Tk9OSU5URVJMRUFWRUQgICAyCisjZGVmaW5lIFRXQlRfQ09ERTkzICAgICAgICAgICAgICAgMworI2RlZmluZSBUV0JUX0NPREUxMjggICAgICAgICAgICAgIDQKKyNkZWZpbmUgVFdCVF9VQ0MxMjggICAgICAgICAgICAgICA1CisjZGVmaW5lIFRXQlRfQ09EQUJBUiAgICAgICAgICAgICAgNgorI2RlZmluZSBUV0JUX1VQQ0EgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgVFdCVF9VUENFICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIFRXQlRfRUFOOCAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBUV0JUX0VBTjEzICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIFRXQlRfUE9TVE5FVCAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgVFdCVF9QREY0MTcgICAgICAgICAgICAgICAxMgorLyogQWRkZWQgMS44ICovCisjZGVmaW5lIFRXQlRfMk9GNUlORFVTVFJJQUwgICAgICAgMTMKKyNkZWZpbmUgVFdCVF8yT0Y1TUFUUklYICAgICAgICAgICAxNAorI2RlZmluZSBUV0JUXzJPRjVEQVRBTE9HSUMgICAgICAgIDE1CisjZGVmaW5lIFRXQlRfMk9GNUlBVEEgICAgICAgICAgICAgMTYKKyNkZWZpbmUgVFdCVF8zT0Y5RlVMTEFTQ0lJICAgICAgICAxNworI2RlZmluZSBUV0JUX0NPREFCQVJXSVRIU1RBUlRTVE9QIDE4CisjZGVmaW5lIFRXQlRfTUFYSUNPREUgICAgICAgICAgICAgMTkKKworLyogQWRkZWQgMS43ICovCisvKiBUV0VJX0RFU0tFV1NUQVRVUyB2YWx1ZXMgKi8KKyNkZWZpbmUgVFdEU0tfU1VDQ0VTUyAgICAgMAorI2RlZmluZSBUV0RTS19SRVBPUlRPTkxZICAxCisjZGVmaW5lIFRXRFNLX0ZBSUwgICAgICAgIDIKKyNkZWZpbmUgVFdEU0tfRElTQUJMRUQgICAgMworCisvKiBBZGRlZCAxLjcgKi8KKy8qIFRXRUlfUEFUQ0hDT0RFIHZhbHVlcyAqLworI2RlZmluZSBUV1BDSF9QQVRDSDEgICAgICAwCisjZGVmaW5lIFRXUENIX1BBVENIMiAgICAgIDEKKyNkZWZpbmUgVFdQQ0hfUEFUQ0gzICAgICAgMgorI2RlZmluZSBUV1BDSF9QQVRDSDQgICAgICAzCisjZGVmaW5lIFRXUENIX1BBVENINiAgICAgIDQKKyNkZWZpbmUgVFdQQ0hfUEFUQ0hUICAgICAgNQorCisvKiBBZGRlZCAxLjcgKi8KKy8qIENBUF9KT0JDT05UUk9MIHZhbHVlcyAqLworI2RlZmluZSBUV0pDX05PTkUgICAwCisjZGVmaW5lIFRXSkNfSlNJQyAgIDEKKyNkZWZpbmUgVFdKQ19KU0lTICAgMgorI2RlZmluZSBUV0pDX0pTWEMgICAzCisjZGVmaW5lIFRXSkNfSlNYUyAgIDQKKyAgICAgICAgICAgICAgICAgIAorLyogQWRkZWQgMS43ICovCisvKiBUV0VJX0JBUkNPREVST1RBVElPTiB2YWx1ZXMgKEJDT1JfIG1lYW5zIGJhcmNvZGUgcm90YXRpb24pICovCisjZGVmaW5lIFRXQkNPUl9ST1QwICAgMAorI2RlZmluZSBUV0JDT1JfUk9UOTAgIDEKKyNkZWZpbmUgVFdCQ09SX1JPVDE4MCAyCisjZGVmaW5lIFRXQkNPUl9ST1QyNzAgMworI2RlZmluZSBUV0JDT1JfUk9UWCAgIDQKKworLyogQWRkZWQgMS44ICovCisvKiBBQ0FQX0FVRElPRklMRUZPUk1BVCB2YWx1ZXMgKEFGXyBtZWFucyBhdWRpbyBmb3JtYXQpICovCisjZGVmaW5lIFRXQUZfV0FWICAgICAgMAorI2RlZmluZSBUV0FGX0FJRkYgICAgIDEKKyNkZWZpbmUgVFdBRl9BVSAgICAgICAzCisjZGVmaW5lIFRXQUZfU05EICAgICAgNAorCisvKiBDQVBfQUxBUk1TIHZhbHVlcyAoQUxfIG1lYW5zIGFsYXJtcykgKi8KKyNkZWZpbmUgVFdBTF9BTEFSTSAgICAgICAgICAwCisjZGVmaW5lIFRXQUxfRkVFREVSRVJST1IgICAgMQorI2RlZmluZSBUV0FMX0ZFRURFUldBUk5JTkcgIDIKKyNkZWZpbmUgVFdBTF9CQVJDT0RFICAgICAgICAzCisjZGVmaW5lIFRXQUxfRE9VQkxFRkVFRCAgICAgNAorI2RlZmluZSBUV0FMX0pBTSAgICAgICAgICAgIDUKKyNkZWZpbmUgVFdBTF9QQVRDSENPREUgICAgICA2CisjZGVmaW5lIFRXQUxfUE9XRVIgICAgICAgICAgNworI2RlZmluZSBUV0FMX1NLRVcgICAgICAgICAgIDgKKworLyogQ0FQX0NMRUFSQlVGRkVSUyB2YWx1ZXMgKENCXyBtZWFucyBjbGVhciBidWZmZXJzKSAqLworI2RlZmluZSBUV0NCX0FVVE8gICAgICAgICAgIDAKKyNkZWZpbmUgVFdDQl9DTEVBUiAgICAgICAgICAxCisjZGVmaW5lIFRXQ0JfTk9DTEVBUiAgICAgICAgMgorCisvKiBDQVBfREVWSUNFRVZFTlQgdmFsdWVzIChERV8gbWVhbnMgZGV2aWNlIGV2ZW50KSAqLworI2RlZmluZSBUV0RFX0NVU1RPTUVWRU5UUyAgICAgICAgICAgMHg4MDAwICAgICAgCisjZGVmaW5lIFRXREVfQ0hFQ0tBVVRPTUFUSUNDQVBUVVJFICAwCisjZGVmaW5lIFRXREVfQ0hFQ0tCQVRURVJZICAgICAgICAgICAxCisjZGVmaW5lIFRXREVfQ0hFQ0tERVZJQ0VPTkxJTkUgICAgICAyCisjZGVmaW5lIFRXREVfQ0hFQ0tGTEFTSCAgICAgICAgICAgICAzCisjZGVmaW5lIFRXREVfQ0hFQ0tQT1dFUlNVUFBMWSAgICAgICA0CisjZGVmaW5lIFRXREVfQ0hFQ0tSRVNPTFVUSU9OICAgICAgICA1CisjZGVmaW5lIFRXREVfREVWSUNFQURERUQgICAgICAgICAgICA2CisjZGVmaW5lIFRXREVfREVWSUNFT0ZGTElORSAgICAgICAgICA3CisjZGVmaW5lIFRXREVfREVWSUNFUkVBRFkgICAgICAgICAgICA4CisjZGVmaW5lIFRXREVfREVWSUNFUkVNT1ZFRCAgICAgICAgICA5CisjZGVmaW5lIFRXREVfSU1BR0VDQVBUVVJFRCAgICAgICAgICAxMAorI2RlZmluZSBUV0RFX0lNQUdFREVMRVRFRCAgICAgICAgICAgMTEKKyNkZWZpbmUgVFdERV9QQVBFUkRPVUJMRUZFRUQgICAgICAgIDEyCisjZGVmaW5lIFRXREVfUEFQRVJKQU0gICAgICAgICAgICAgICAxMworI2RlZmluZSBUV0RFX0xBTVBGQUlMVVJFICAgICAgICAgICAgMTQKKyNkZWZpbmUgVFdERV9QT1dFUlNBVkUgICAgICAgICAgICAgIDE1CisjZGVmaW5lIFRXREVfUE9XRVJTQVZFTk9USUZZICAgICAgICAxNgorCisvKiBDQVBfRkVFREVSQUxJR05NRU5UIHZhbHVlcyAoRkFfIG1lYW5zIGZlZWRlciBhbGlnbm1lbnQpICovCisjZGVmaW5lIFRXRkFfTk9ORSAgIDAKKyNkZWZpbmUgVFdGQV9MRUZUICAgMQorI2RlZmluZSBUV0ZBX0NFTlRFUiAyCisjZGVmaW5lIFRXRkFfUklHSFQgIDMKKworLyogQ0FQX0ZFRURFUk9SREVSIHZhbHVlcyAoRk9fIG1lYW5zIGZlZWRlciBvcmRlcikgKi8KKyNkZWZpbmUgVFdGT19GSVJTVFBBR0VGSVJTVCAwCisjZGVmaW5lIFRXRk9fTEFTVFBBR0VGSVJTVCAgMQorCisvKiBDQVBfRklMRVNZU1RFTSB2YWx1ZXMgKEZTXyBtZWFucyBmaWxlIHN5c3RlbSkgKi8KKyNkZWZpbmUgVFdGU19GSUxFU1lTVEVNICAgICAgIDAKKyNkZWZpbmUgVFdGU19SRUNVUlNJVkVERUxFVEUgIDEKKworLyogQ0FQX1BPV0VSU1VQUExZIHZhbHVlcyAoUFNfIG1lYW5zIHBvd2VyIHN1cHBseSkgKi8KKyNkZWZpbmUgVFdQU19FWFRFUk5BTCAwCisjZGVmaW5lIFRXUFNfQkFUVEVSWSAgMQorCisvKiBDQVBfUFJJTlRFUiB2YWx1ZXMgKFBSXyBtZWFucyBwcmludGVyKSAqLworI2RlZmluZSBUV1BSX0lNUFJJTlRFUlRPUEJFRk9SRSAgICAgMAorI2RlZmluZSBUV1BSX0lNUFJJTlRFUlRPUEFGVEVSICAgICAgMQorI2RlZmluZSBUV1BSX0lNUFJJTlRFUkJPVFRPTUJFRk9SRSAgMgorI2RlZmluZSBUV1BSX0lNUFJJTlRFUkJPVFRPTUFGVEVSICAgMworI2RlZmluZSBUV1BSX0VORE9SU0VSVE9QQkVGT1JFICAgICAgNAorI2RlZmluZSBUV1BSX0VORE9SU0VSVE9QQUZURVIgICAgICAgNQorI2RlZmluZSBUV1BSX0VORE9SU0VSQk9UVE9NQkVGT1JFICAgNgorI2RlZmluZSBUV1BSX0VORE9SU0VSQk9UVE9NQUZURVIgICAgNworCisvKiBDQVBfUFJJTlRFUk1PREUgdmFsdWVzIChQTV8gbWVhbnMgcHJpbnRlciBtb2RlKSAqLworI2RlZmluZSBUV1BNX1NJTkdMRVNUUklORyAgICAgMAorI2RlZmluZSBUV1BNX01VTFRJU1RSSU5HICAgICAgMQorI2RlZmluZSBUV1BNX0NPTVBPVU5EU1RSSU5HICAgMgorCisvKiBJQ0FQX0JBUkNPREVTRUFSQ0hNT0RFIHZhbHVlcyAoVFdCRF8gbWVhbnMgc2VhcmNoKSAqLworI2RlZmluZSBUV0JEX0hPUlogICAgIDAKKyNkZWZpbmUgVFdCRF9WRVJUICAgICAxCisjZGVmaW5lIFRXQkRfSE9SWlZFUlQgMgorI2RlZmluZSBUV0JEX1ZFUlRIT1JaIDMKKworLyogSUNBUF9GTEFTSFVTRUQyIHZhbHVlcyAoRkxfIG1lYW5zIGZsYXNoKSAqLworI2RlZmluZSBUV0ZMX05PTkUgICAgIDAKKyNkZWZpbmUgVFdGTF9PRkYgICAgICAxCisjZGVmaW5lIFRXRkxfT04gICAgICAgMgorI2RlZmluZSBUV0ZMX0FVVE8gICAgIDMKKyNkZWZpbmUgVFdGTF9SRURFWUUgICA0CisKKy8qIElDQVBfRkxJUFJPVEFUSU9OIHZhbHVlcyAoRlJfIG1lYW5zIGZsaXAgcm90YXRpb24pICovCisjZGVmaW5lIFRXRlJfQk9PSyAgICAgMAorI2RlZmluZSBUV0ZSX0ZBTkZPTEQgIDEKKworLyogSUNBUF9JTUFHRUZJTFRFUiB2YWx1ZXMgKElGXyBtZWFucyBpbWFnZSBmaWx0ZXIpICovCisjZGVmaW5lIFRXSUZfTk9ORSAgICAgMAorI2RlZmluZSBUV0lGX0FVVE8gICAgIDEKKyNkZWZpbmUgVFdJRl9MT1dQQVNTICAyCisjZGVmaW5lIFRXSUZfQkFORFBBU1MgMworI2RlZmluZSBUV0lGX0hJR0hQQVNTIDQKKyNkZWZpbmUgVFdJRl9URVhUICAgICBUV0lGX0JBTkRQQVNTCisjZGVmaW5lIFRXSUZfRklORUxJTkUgVFdJRl9ISUdIUEFTUworCisvKiBJQ0FQX05PSVNFRklMVEVSIHZhbHVlcyAoTkZfIG1lYW5zIG5vaXNlIGZpbHRlcikgKi8KKyNkZWZpbmUgVFdORl9OT05FICAgICAgICAgMAorI2RlZmluZSBUV05GX0FVVE8gICAgICAgICAxCisjZGVmaW5lIFRXTkZfTE9ORVBJWEVMICAgIDIKKyNkZWZpbmUgVFdORl9NQUpPUklUWVJVTEUgMworCisvKiBJQ0FQX09WRVJTQ0FOIHZhbHVlcyAoT1ZfIG1lYW5zIG92ZXJzY2FuKSAqLworI2RlZmluZSBUV09WX05PTkUgICAgICAgMAorI2RlZmluZSBUV09WX0FVVE8gICAgICAgMQorI2RlZmluZSBUV09WX1RPUEJPVFRPTSAgMgorI2RlZmluZSBUV09WX0xFRlRSSUdIVCAgMworI2RlZmluZSBUV09WX0FMTCAgICAgICAgNAorCisvKiBUV19GSUxFU1lTVEVNLkZpbGVUeXBlIHZhbHVlcyAoRlRfIG1lYW5zIGZpbGUgdHlwZSkgKi8KKyNkZWZpbmUgVFdGWV9DQU1FUkEgICAgICAgICAwCisjZGVmaW5lIFRXRllfQ0FNRVJBVE9QICAgICAgMQorI2RlZmluZSBUV0ZZX0NBTUVSQUJPVFRPTSAgIDIKKyNkZWZpbmUgVFdGWV9DQU1FUkFQUkVWSUVXICAzCisjZGVmaW5lIFRXRllfRE9NQUlOICAgICAgICAgNAorI2RlZmluZSBUV0ZZX0hPU1QgICAgICAgICAgIDUKKyNkZWZpbmUgVFdGWV9ESVJFQ1RPUlkgICAgICA2CisjZGVmaW5lIFRXRllfSU1BR0UgICAgICAgICAgNworI2RlZmluZSBUV0ZZX1VOS05PV04gICAgICAgIDgKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvdW50cnkgQ29uc3RhbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBUV0NZX0FGR0hBTklTVEFOICAgMTAwMQorI2RlZmluZSBUV0NZX0FMR0VSSUEgICAgICAgIDIxMworI2RlZmluZSBUV0NZX0FNRVJJQ0FOU0FNT0EgIDY4NAorI2RlZmluZSBUV0NZX0FORE9SUkEgICAgICAgIDAzMworI2RlZmluZSBUV0NZX0FOR09MQSAgICAgICAgMTAwMgorI2RlZmluZSBUV0NZX0FOR1VJTExBICAgICAgODA5MAorI2RlZmluZSBUV0NZX0FOVElHVUEgICAgICAgODA5MQorI2RlZmluZSBUV0NZX0FSR0VOVElOQSAgICAgICA1NAorI2RlZmluZSBUV0NZX0FSVUJBICAgICAgICAgIDI5NworI2RlZmluZSBUV0NZX0FTQ0VOU0lPTkkgICAgIDI0NworI2RlZmluZSBUV0NZX0FVU1RSQUxJQSAgICAgICA2MQorI2RlZmluZSBUV0NZX0FVU1RSSUEgICAgICAgICA0MworI2RlZmluZSBUV0NZX0JBSEFNQVMgICAgICAgODA5MgorI2RlZmluZSBUV0NZX0JBSFJBSU4gICAgICAgIDk3MworI2RlZmluZSBUV0NZX0JBTkdMQURFU0ggICAgIDg4MAorI2RlZmluZSBUV0NZX0JBUkJBRE9TICAgICAgODA5MworI2RlZmluZSBUV0NZX0JFTEdJVU0gICAgICAgICAzMgorI2RlZmluZSBUV0NZX0JFTElaRSAgICAgICAgIDUwMQorI2RlZmluZSBUV0NZX0JFTklOICAgICAgICAgIDIyOQorI2RlZmluZSBUV0NZX0JFUk1VREEgICAgICAgODA5NAorI2RlZmluZSBUV0NZX0JIVVRBTiAgICAgICAgMTAwMworI2RlZmluZSBUV0NZX0JPTElWSUEgICAgICAgIDU5MQorI2RlZmluZSBUV0NZX0JPVFNXQU5BICAgICAgIDI2NworI2RlZmluZSBUV0NZX0JSSVRBSU4gICAgICAgICAgNgorI2RlZmluZSBUV0NZX0JSSVRWSVJHSU5JUyAgODA5NQorI2RlZmluZSBUV0NZX0JSQVpJTCAgICAgICAgICA1NQorI2RlZmluZSBUV0NZX0JSVU5FSSAgICAgICAgIDY3MworI2RlZmluZSBUV0NZX0JVTEdBUklBICAgICAgIDM1OQorI2RlZmluZSBUV0NZX0JVUktJTkFGQVNPICAgMTAwNAorI2RlZmluZSBUV0NZX0JVUk1BICAgICAgICAgMTAwNQorI2RlZmluZSBUV0NZX0JVUlVOREkgICAgICAgMTAwNgorI2RlZmluZSBUV0NZX0NBTUFST09OICAgICAgIDIzNworI2RlZmluZSBUV0NZX0NBTkFEQSAgICAgICAgICAgMgorI2RlZmluZSBUV0NZX0NBUEVWRVJERUlTICAgIDIzOAorI2RlZmluZSBUV0NZX0NBWU1BTklTICAgICAgODA5NgorI2RlZmluZSBUV0NZX0NFTlRSQUxBRlJFUCAgMTAwNworI2RlZmluZSBUV0NZX0NIQUQgICAgICAgICAgMTAwOAorI2RlZmluZSBUV0NZX0NISUxFICAgICAgICAgICA1NgorI2RlZmluZSBUV0NZX0NISU5BICAgICAgICAgICA4NgorI2RlZmluZSBUV0NZX0NIUklTVE1BU0lTICAgMTAwOQorI2RlZmluZSBUV0NZX0NPQ09TSVMgICAgICAgMTAwOQorI2RlZmluZSBUV0NZX0NPTE9NQklBICAgICAgICA1NworI2RlZmluZSBUV0NZX0NPTU9ST1MgICAgICAgMTAxMAorI2RlZmluZSBUV0NZX0NPTkdPICAgICAgICAgMTAxMQorI2RlZmluZSBUV0NZX0NPT0tJUyAgICAgICAgMTAxMgorI2RlZmluZSBUV0NZX0NPU1RBUklDQSAgICAgNTA2CisjZGVmaW5lIFRXQ1lfQ1VCQSAgICAgICAgICAgMDA1CisjZGVmaW5lIFRXQ1lfQ1lQUlVTICAgICAgICAgMzU3CisjZGVmaW5lIFRXQ1lfQ1pFQ0hPU0xPVkFLSUEgIDQyCisjZGVmaW5lIFRXQ1lfREVOTUFSSyAgICAgICAgIDQ1CisjZGVmaW5lIFRXQ1lfREpJQk9VVEkgICAgICAxMDEzCisjZGVmaW5lIFRXQ1lfRE9NSU5JQ0EgICAgICA4MDk3CisjZGVmaW5lIFRXQ1lfRE9NSU5DQU5SRVAgICA4MDk4CisjZGVmaW5lIFRXQ1lfRUFTVEVSSVMgICAgICAxMDE0CisjZGVmaW5lIFRXQ1lfRUNVQURPUiAgICAgICAgNTkzCisjZGVmaW5lIFRXQ1lfRUdZUFQgICAgICAgICAgIDIwCisjZGVmaW5lIFRXQ1lfRUxTQUxWQURPUiAgICAgNTAzCisjZGVmaW5lIFRXQ1lfRVFHVUlORUEgICAgICAxMDE1CisjZGVmaW5lIFRXQ1lfRVRISU9QSUEgICAgICAgMjUxCisjZGVmaW5lIFRXQ1lfRkFMS0xBTkRJUyAgICAxMDE2CisjZGVmaW5lIFRXQ1lfRkFFUk9FSVMgICAgICAgMjk4CisjZGVmaW5lIFRXQ1lfRklKSUlTTEFORFMgICAgNjc5CisjZGVmaW5lIFRXQ1lfRklOTEFORCAgICAgICAgMzU4CisjZGVmaW5lIFRXQ1lfRlJBTkNFICAgICAgICAgIDMzCisjZGVmaW5lIFRXQ1lfRlJBTlRJTExFUyAgICAgNTk2CisjZGVmaW5lIFRXQ1lfRlJHVUlBTkEgICAgICAgNTk0CisjZGVmaW5lIFRXQ1lfRlJQT0xZTkVJU0EgICAgNjg5CisjZGVmaW5lIFRXQ1lfRlVUQU5BSVMgICAgICAxMDQzCisjZGVmaW5lIFRXQ1lfR0FCT04gICAgICAgICAgMjQxCisjZGVmaW5lIFRXQ1lfR0FNQklBICAgICAgICAgMjIwCisjZGVmaW5lIFRXQ1lfR0VSTUFOWSAgICAgICAgIDQ5CisjZGVmaW5lIFRXQ1lfR0hBTkEgICAgICAgICAgMjMzCisjZGVmaW5lIFRXQ1lfR0lCUkFMVEVSICAgICAgMzUwCisjZGVmaW5lIFRXQ1lfR1JFRUNFICAgICAgICAgIDMwCisjZGVmaW5lIFRXQ1lfR1JFRU5MQU5EICAgICAgMjk5CisjZGVmaW5lIFRXQ1lfR1JFTkFEQSAgICAgICA4MDk5CisjZGVmaW5lIFRXQ1lfR1JFTkVESU5FUyAgICA4MDE1CisjZGVmaW5lIFRXQ1lfR1VBREVMT1VQRSAgICAgNTkwCisjZGVmaW5lIFRXQ1lfR1VBTSAgICAgICAgICAgNjcxCisjZGVmaW5lIFRXQ1lfR1VBTlRBTkFNT0JBWSA1Mzk5CisjZGVmaW5lIFRXQ1lfR1VBVEVNQUxBICAgICAgNTAyCisjZGVmaW5lIFRXQ1lfR1VJTkVBICAgICAgICAgMjI0CisjZGVmaW5lIFRXQ1lfR1VJTkVBQklTU0FVICAxMDE3CisjZGVmaW5lIFRXQ1lfR1VZQU5BICAgICAgICAgNTkyCisjZGVmaW5lIFRXQ1lfSEFJVEkgICAgICAgICAgNTA5CisjZGVmaW5lIFRXQ1lfSE9ORFVSQVMgICAgICAgNTA0CisjZGVmaW5lIFRXQ1lfSE9OR0tPTkcgICAgICA4NTIKKyNkZWZpbmUgVFdDWV9IVU5HQVJZICAgICAgICAgMzYKKyNkZWZpbmUgVFdDWV9JQ0VMQU5EICAgICAgICAzNTQKKyNkZWZpbmUgVFdDWV9JTkRJQSAgICAgICAgICAgOTEKKyNkZWZpbmUgVFdDWV9JTkRPTkVTSUEgICAgICAgNjIKKyNkZWZpbmUgVFdDWV9JUkFOICAgICAgICAgICAgOTgKKyNkZWZpbmUgVFdDWV9JUkFRICAgICAgICAgICA5NjQKKyNkZWZpbmUgVFdDWV9JUkVMQU5EICAgICAgICAzNTMKKyNkZWZpbmUgVFdDWV9JU1JBRUwgICAgICAgICA5NzIKKyNkZWZpbmUgVFdDWV9JVEFMWSAgICAgICAgICAgMzkKKyNkZWZpbmUgVFdDWV9JVk9SWUNPQVNUICAgIDIyNQorI2RlZmluZSBUV0NZX0pBTUFJQ0EgICAgICAgODAxMAorI2RlZmluZSBUV0NZX0pBUEFOICAgICAgICAgICA4MQorI2RlZmluZSBUV0NZX0pPUkRBTiAgICAgICAgIDk2MgorI2RlZmluZSBUV0NZX0tFTllBICAgICAgICAgIDI1NAorI2RlZmluZSBUV0NZX0tJUklCQVRJICAgICAgMTAxOAorI2RlZmluZSBUV0NZX0tPUkVBICAgICAgICAgICA4MgorI2RlZmluZSBUV0NZX0tVV0FJVCAgICAgICAgIDk2NQorI2RlZmluZSBUV0NZX0xBT1MgICAgICAgICAgMTAxOQorI2RlZmluZSBUV0NZX0xFQkFOT04gICAgICAgMTAyMAorI2RlZmluZSBUV0NZX0xJQkVSSUEgICAgICAgIDIzMQorI2RlZmluZSBUV0NZX0xJQllBICAgICAgICAgIDIxOAorI2RlZmluZSBUV0NZX0xJRUNIVEVOU1RFSU4gICA0MQorI2RlZmluZSBUV0NZX0xVWEVOQk9VUkcgICAgIDM1MgorI2RlZmluZSBUV0NZX01BQ0FPICAgICAgICAgIDg1MworI2RlZmluZSBUV0NZX01BREFHQVNDQVIgICAgMTAyMQorI2RlZmluZSBUV0NZX01BTEFXSSAgICAgICAgIDI2NQorI2RlZmluZSBUV0NZX01BTEFZU0lBICAgICAgICA2MAorI2RlZmluZSBUV0NZX01BTERJVkVTICAgICAgIDk2MAorI2RlZmluZSBUV0NZX01BTEkgICAgICAgICAgMTAyMgorI2RlZmluZSBUV0NZX01BTFRBICAgICAgICAgIDM1NgorI2RlZmluZSBUV0NZX01BUlNIQUxMSVMgICAgIDY5MgorI2RlZmluZSBUV0NZX01BVVJJVEFOSUEgICAgMTAyMworI2RlZmluZSBUV0NZX01BVVJJVElVUyAgICAgIDIzMAorI2RlZmluZSBUV0NZX01FWElDTyAgICAgICAgICAgMworI2RlZmluZSBUV0NZX01JQ1JPTkVTSUEgICAgIDY5MQorI2RlZmluZSBUV0NZX01JUVVFTE9OICAgICAgIDUwOAorI2RlZmluZSBUV0NZX01PTkFDTyAgICAgICAgICAzMworI2RlZmluZSBUV0NZX01PTkdPTElBICAgICAgMTAyNAorI2RlZmluZSBUV0NZX01PTlRTRVJSQVQgICAgODAxMQorI2RlZmluZSBUV0NZX01PUk9DQ08gICAgICAgIDIxMgorI2RlZmluZSBUV0NZX01PWkFNQklRVUUgICAgMTAyNQorI2RlZmluZSBUV0NZX05BTUlCSUEgICAgICAgIDI2NAorI2RlZmluZSBUV0NZX05BVVJVICAgICAgICAgMTAyNgorI2RlZmluZSBUV0NZX05FUEFMICAgICAgICAgIDk3NworI2RlZmluZSBUV0NZX05FVEhFUkxBTkRTICAgICAzMQorI2RlZmluZSBUV0NZX05FVEhBTlRJTExFUyAgIDU5OQorI2RlZmluZSBUV0NZX05FVklTICAgICAgICAgODAxMgorI2RlZmluZSBUV0NZX05FV0NBTEVET05JQSAgIDY4NworI2RlZmluZSBUV0NZX05FV1pFQUxBTkQgICAgICA2NAorI2RlZmluZSBUV0NZX05JQ0FSQUdVQSAgICAgIDUwNQorI2RlZmluZSBUV0NZX05JR0VSICAgICAgICAgIDIyNworI2RlZmluZSBUV0NZX05JR0VSSUEgICAgICAgIDIzNAorI2RlZmluZSBUV0NZX05JVUUgICAgICAgICAgMTAyNworI2RlZmluZSBUV0NZX05PUkZPTEtJICAgICAgMTAyOAorI2RlZmluZSBUV0NZX05PUldBWSAgICAgICAgICA0NworI2RlZmluZSBUV0NZX09NQU4gICAgICAgICAgIDk2OAorI2RlZmluZSBUV0NZX1BBS0lTVEFOICAgICAgICA5MgorI2RlZmluZSBUV0NZX1BBTEFVICAgICAgICAgMTAyOQorI2RlZmluZSBUV0NZX1BBTkFNQSAgICAgICAgIDUwNworI2RlZmluZSBUV0NZX1BBUkFHVUFZICAgICAgIDU5NQorI2RlZmluZSBUV0NZX1BFUlUgICAgICAgICAgICA1MQorI2RlZmluZSBUV0NZX1BISUxMSVBQSU5FUyAgICA2MworI2RlZmluZSBUV0NZX1BJVENBSVJOSVMgICAgMTAzMAorI2RlZmluZSBUV0NZX1BORVdHVUlORUEgICAgIDY3NQorI2RlZmluZSBUV0NZX1BPTEFORCAgICAgICAgICA0OAorI2RlZmluZSBUV0NZX1BPUlRVR0FMICAgICAgIDM1MQorI2RlZmluZSBUV0NZX1FBVEFSICAgICAgICAgIDk3NAorI2RlZmluZSBUV0NZX1JFVU5JT05JICAgICAgMTAzMQorI2RlZmluZSBUV0NZX1JPTUFOSUEgICAgICAgICA0MAorI2RlZmluZSBUV0NZX1JXQU5EQSAgICAgICAgIDI1MAorI2RlZmluZSBUV0NZX1NBSVBBTiAgICAgICAgIDY3MAorI2RlZmluZSBUV0NZX1NBTk1BUklOTyAgICAgICAzOQorI2RlZmluZSBUV0NZX1NBT1RPTUUgICAgICAgMTAzMworI2RlZmluZSBUV0NZX1NBVURJQVJBQklBICAgIDk2NgorI2RlZmluZSBUV0NZX1NFTkVHQUwgICAgICAgIDIyMQorI2RlZmluZSBUV0NZX1NFWUNIRUxMRVNJUyAgMTAzNAorI2RlZmluZSBUV0NZX1NJRVJSQUxFT05FICAgMTAzNQorI2RlZmluZSBUV0NZX1NJTkdBUE9SRSAgICAgICA2NQorI2RlZmluZSBUV0NZX1NPTE9NT05JUyAgICAgMTAzNgorI2RlZmluZSBUV0NZX1NPTUFMSSAgICAgICAgMTAzNworI2RlZmluZSBUV0NZX1NPVVRIQUZSSUNBICAgIDI3CisjZGVmaW5lIFRXQ1lfU1BBSU4gICAgICAgICAgIDM0CisjZGVmaW5lIFRXQ1lfU1JJTEFOS0EgICAgICAgIDk0CisjZGVmaW5lIFRXQ1lfU1RIRUxFTkEgICAgICAxMDMyCisjZGVmaW5lIFRXQ1lfU1RLSVRUUyAgICAgICA4MDEzCisjZGVmaW5lIFRXQ1lfU1RMVUNJQSAgICAgICA4MDE0CisjZGVmaW5lIFRXQ1lfU1RQSUVSUkUgICAgICAgNTA4CisjZGVmaW5lIFRXQ1lfU1RWSU5DRU5UICAgICA4MDE1CisjZGVmaW5lIFRXQ1lfU1VEQU4gICAgICAgICAxMDM4CisjZGVmaW5lIFRXQ1lfU1VSSU5BTUUgICAgICAgNTk3CisjZGVmaW5lIFRXQ1lfU1dBWklMQU5EICAgICAgMjY4CisjZGVmaW5lIFRXQ1lfU1dFREVOICAgICAgICAgIDQ2CisjZGVmaW5lIFRXQ1lfU1dJVFpFUkxBTkQgICAgIDQxCisjZGVmaW5lIFRXQ1lfU1lSSUEgICAgICAgICAxMDM5CisjZGVmaW5lIFRXQ1lfVEFJV0FOICAgICAgICAgODg2CisjZGVmaW5lIFRXQ1lfVEFOWkFOSUEgICAgICAgMjU1CisjZGVmaW5lIFRXQ1lfVEhBSUxBTkQgICAgICAgIDY2CisjZGVmaW5lIFRXQ1lfVE9CQUdPICAgICAgICA4MDE2CisjZGVmaW5lIFRXQ1lfVE9HTyAgICAgICAgICAgMjI4CisjZGVmaW5lIFRXQ1lfVE9OR0FJUyAgICAgICAgNjc2CisjZGVmaW5lIFRXQ1lfVFJJTklEQUQgICAgICA4MDE2CisjZGVmaW5lIFRXQ1lfVFVOSVNJQSAgICAgICAgMjE2CisjZGVmaW5lIFRXQ1lfVFVSS0VZICAgICAgICAgIDkwCisjZGVmaW5lIFRXQ1lfVFVSS1NDQUlDT1MgICA4MDE3CisjZGVmaW5lIFRXQ1lfVFVWQUxVICAgICAgICAxMDQwCisjZGVmaW5lIFRXQ1lfVUdBTkRBICAgICAgICAgMjU2CisjZGVmaW5lIFRXQ1lfVVNTUiAgICAgICAgICAgICA3CisjZGVmaW5lIFRXQ1lfVUFFTUlSQVRFUyAgICAgOTcxCisjZGVmaW5lIFRXQ1lfVU5JVEVES0lOR0RPTSAgIDQ0CisjZGVmaW5lIFRXQ1lfVVNBICAgICAgICAgICAgICAxCisjZGVmaW5lIFRXQ1lfVVJVR1VBWSAgICAgICAgNTk4CisjZGVmaW5lIFRXQ1lfVkFOVUFUVSAgICAgICAxMDQxCisjZGVmaW5lIFRXQ1lfVkFUSUNBTkNJVFkgICAgIDM5CisjZGVmaW5lIFRXQ1lfVkVORVpVRUxBICAgICAgIDU4CisjZGVmaW5lIFRXQ1lfV0FLRSAgICAgICAgICAxMDQyCisjZGVmaW5lIFRXQ1lfV0FMTElTSVMgICAgICAxMDQzCisjZGVmaW5lIFRXQ1lfV0VTVEVSTlNBSEFSQSAxMDQ0CisjZGVmaW5lIFRXQ1lfV0VTVEVSTlNBTU9BICAxMDQ1CisjZGVmaW5lIFRXQ1lfWUVNRU4gICAgICAgICAxMDQ2CisjZGVmaW5lIFRXQ1lfWVVHT1NMQVZJQSAgICAgIDM4CisjZGVmaW5lIFRXQ1lfWkFJUkUgICAgICAgICAgMjQzCisjZGVmaW5lIFRXQ1lfWkFNQklBICAgICAgICAgMjYwCisjZGVmaW5lIFRXQ1lfWklNQkFCV0UgICAgICAgMjYzCisvKiBBZGRlZCBmb3IgMS44ICovCisjZGVmaW5lIFRXQ1lfQUxCQU5JQSAgICAgICAgMzU1CisjZGVmaW5lIFRXQ1lfQVJNRU5JQSAgICAgICAgMzc0CisjZGVmaW5lIFRXQ1lfQVpFUkJBSUpBTiAgICAgOTk0CisjZGVmaW5lIFRXQ1lfQkVMQVJVUyAgICAgICAgMzc1CisjZGVmaW5lIFRXQ1lfQk9TTklBSEVSWkdPICAgMzg3CisjZGVmaW5lIFRXQ1lfQ0FNQk9ESUEgICAgICAgODU1CisjZGVmaW5lIFRXQ1lfQ1JPQVRJQSAgICAgICAgMzg1CisjZGVmaW5lIFRXQ1lfQ1pFQ0hSRVBVQkxJQyAgNDIwCisjZGVmaW5lIFRXQ1lfRElFR09HQVJDSUEgICAgMjQ2CisjZGVmaW5lIFRXQ1lfRVJJVFJFQSAgICAgICAgMjkxCisjZGVmaW5lIFRXQ1lfRVNUT05JQSAgICAgICAgMzcyCisjZGVmaW5lIFRXQ1lfR0VPUkdJQSAgICAgICAgOTk1CisjZGVmaW5lIFRXQ1lfTEFUVklBICAgICAgICAgMzcxCisjZGVmaW5lIFRXQ1lfTEVTT1RITyAgICAgICAgMjY2CisjZGVmaW5lIFRXQ1lfTElUSFVBTklBICAgICAgMzcwCisjZGVmaW5lIFRXQ1lfTUFDRURPTklBICAgICAgMzg5CisjZGVmaW5lIFRXQ1lfTUFZT1RURUlTICAgICAgMjY5CisjZGVmaW5lIFRXQ1lfTU9MRE9WQSAgICAgICAgMzczCisjZGVmaW5lIFRXQ1lfTVlBTk1BUiAgICAgICAgOTUKKyNkZWZpbmUgVFdDWV9OT1JUSEtPUkVBICAgICA4NTAKKyNkZWZpbmUgVFdDWV9QVUVSVE9SSUNPICAgICA3ODcKKyNkZWZpbmUgVFdDWV9SVVNTSUEgICAgICAgICA3CisjZGVmaW5lIFRXQ1lfU0VSQklBICAgICAgICAgMzgxCisjZGVmaW5lIFRXQ1lfU0xPVkFLSUEgICAgICAgNDIxCisjZGVmaW5lIFRXQ1lfU0xPVkVOSUEgICAgICAgMzg2CisjZGVmaW5lIFRXQ1lfU09VVEhLT1JFQSAgICAgODIKKyNkZWZpbmUgVFdDWV9VS1JBSU5FICAgICAgICAzODAKKyNkZWZpbmUgVFdDWV9VU1ZJUkdJTklTICAgICAzNDAKKyNkZWZpbmUgVFdDWV9WSUVUTkFNICAgICAgICA4NAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTGFuZ3VhZ2UgQ29uc3RhbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIFRXTEdfREFOICAgICAgICAgICAgICAwIC8qIERhbmlzaCAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVFdMR19EVVQgICAgICAgICAgICAgIDEgLyogRHV0Y2ggICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBUV0xHX0VORyAgICAgICAgICAgICAgMiAvKiBJbnRlcm5hdGlvbmFsIEVuZ2xpc2ggICovCisjZGVmaW5lIFRXTEdfRkNGICAgICAgICAgICAgICAzIC8qIEZyZW5jaCBDYW5hZGlhbiAgICAgICAgKi8KKyNkZWZpbmUgVFdMR19GSU4gICAgICAgICAgICAgIDQgLyogRmlubmlzaCAgICAgICAgICAgICAgICAqLworI2RlZmluZSBUV0xHX0ZSTiAgICAgICAgICAgICAgNSAvKiBGcmVuY2ggICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFRXTEdfR0VSICAgICAgICAgICAgICA2IC8qIEdlcm1hbiAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVFdMR19JQ0UgICAgICAgICAgICAgIDcgLyogSWNlbGFuZGljICAgICAgICAgICAgICAqLworI2RlZmluZSBUV0xHX0lUTiAgICAgICAgICAgICAgOCAvKiBJdGFsaWFuICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFRXTEdfTk9SICAgICAgICAgICAgICA5IC8qIE5vcndlZ2lhbiAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVFdMR19QT1IgICAgICAgICAgICAgMTAgLyogUG9ydHVndWVzZSAgICAgICAgICAgICAqLworI2RlZmluZSBUV0xHX1NQQSAgICAgICAgICAgICAxMSAvKiBTcGFuaXNoICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFRXTEdfU1dFICAgICAgICAgICAgIDEyIC8qIFN3ZWRpc2ggICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVFdMR19VU0EgICAgICAgICAgICAgMTMgLyogVS5TLiBFbmdsaXNoICAgICAgICAgICAqLworLyogQWRkZWQgZm9yIDEuOCAqLworI2RlZmluZSBUV0xHX1VTRVJMT0NBTEUgICAgICAgICAgIC0xCisjZGVmaW5lIFRXTEdfQUZSSUtBQU5TICAgICAgICAgICAgMTQgIAorI2RlZmluZSBUV0xHX0FMQkFOSUEgICAgICAgICAgICAgIDE1CisjZGVmaW5lIFRXTEdfQVJBQklDICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgVFdMR19BUkFCSUNfQUxHRVJJQSAgICAgICAxNworI2RlZmluZSBUV0xHX0FSQUJJQ19CQUhSQUlOICAgICAgIDE4CisjZGVmaW5lIFRXTEdfQVJBQklDX0VHWVBUICAgICAgICAgMTkKKyNkZWZpbmUgVFdMR19BUkFCSUNfSVJBUSAgICAgICAgICAyMAorI2RlZmluZSBUV0xHX0FSQUJJQ19KT1JEQU4gICAgICAgIDIxCisjZGVmaW5lIFRXTEdfQVJBQklDX0tVV0FJVCAgICAgICAgMjIKKyNkZWZpbmUgVFdMR19BUkFCSUNfTEVCQU5PTiAgICAgICAyMworI2RlZmluZSBUV0xHX0FSQUJJQ19MSUJZQSAgICAgICAgIDI0CisjZGVmaW5lIFRXTEdfQVJBQklDX01PUk9DQ08gICAgICAgMjUKKyNkZWZpbmUgVFdMR19BUkFCSUNfT01BTiAgICAgICAgICAyNgorI2RlZmluZSBUV0xHX0FSQUJJQ19RQVRBUiAgICAgICAgIDI3CisjZGVmaW5lIFRXTEdfQVJBQklDX1NBVURJQVJBQklBICAgMjgKKyNkZWZpbmUgVFdMR19BUkFCSUNfU1lSSUEgICAgICAgICAyOQorI2RlZmluZSBUV0xHX0FSQUJJQ19UVU5JU0lBICAgICAgIDMwCisjZGVmaW5lIFRXTEdfQVJBQklDX1VBRSAgICAgICAgICAgMzEgLyogVW5pdGVkIEFyYWJpYyBFbWlyYXRlcyAqLworI2RlZmluZSBUV0xHX0FSQUJJQ19ZRU1FTiAgICAgICAgIDMyCisjZGVmaW5lIFRXTEdfQkFTUVVFICAgICAgICAgICAgICAgMzMKKyNkZWZpbmUgVFdMR19CWUVMT1JVU1NJQU4gICAgICAgICAzNAorI2RlZmluZSBUV0xHX0JVTEdBUklBTiAgICAgICAgICAgIDM1CisjZGVmaW5lIFRXTEdfQ0FUQUxBTiAgICAgICAgICAgICAgMzYKKyNkZWZpbmUgVFdMR19DSElORVNFICAgICAgICAgICAgICAzNworI2RlZmluZSBUV0xHX0NISU5FU0VfSE9OR0tPTkcgICAgIDM4CisjZGVmaW5lIFRXTEdfQ0hJTkVTRV9QUkMgICAgICAgICAgMzkgLyogUGVvcGxlJ3MgUmVwdWJsaWMgb2YgQ2hpbmEgKi8KKyNkZWZpbmUgVFdMR19DSElORVNFX1NJTkdBUE9SRSAgICA0MAorI2RlZmluZSBUV0xHX0NISU5FU0VfU0lNUExJRklFRCAgIDQxCisjZGVmaW5lIFRXTEdfQ0hJTkVTRV9UQUlXQU4gICAgICAgNDIKKyNkZWZpbmUgVFdMR19DSElORVNFX1RSQURJVElPTkFMICA0MworI2RlZmluZSBUV0xHX0NST0FUSUEgICAgICAgICAgICAgIDQ0CisjZGVmaW5lIFRXTEdfQ1pFQ0ggICAgICAgICAgICAgICAgNDUKKyNkZWZpbmUgVFdMR19EQU5JU0ggICAgICAgICAgICAgICBUV0xHX0RBTgorI2RlZmluZSBUV0xHX0RVVENIICAgICAgICAgICAgICAgIFRXTEdfRFVUCisjZGVmaW5lIFRXTEdfRFVUQ0hfQkVMR0lBTiAgICAgICAgNDYKKyNkZWZpbmUgVFdMR19FTkdMSVNIICAgICAgICAgICAgICBUV0xHX0VORworI2RlZmluZSBUV0xHX0VOR0xJU0hfQVVTVFJBTElBTiAgIDQ3CisjZGVmaW5lIFRXTEdfRU5HTElTSF9DQU5BRElBTiAgICAgNDgKKyNkZWZpbmUgVFdMR19FTkdMSVNIX0lSRUxBTkQgICAgICA0OQorI2RlZmluZSBUV0xHX0VOR0xJU0hfTkVXWkVBTEFORCAgIDUwCisjZGVmaW5lIFRXTEdfRU5HTElTSF9TT1VUSEFGUklDQSAgNTEKKyNkZWZpbmUgVFdMR19FTkdMSVNIX1VLICAgICAgICAgICA1MgorI2RlZmluZSBUV0xHX0VOR0xJU0hfVVNBICAgICAgICAgIFRXTEdfVVNBCisjZGVmaW5lIFRXTEdfRVNUT05JQU4gICAgICAgICAgICAgNTMKKyNkZWZpbmUgVFdMR19GQUVST0VTRSAgICAgICAgICAgICA1NAorI2RlZmluZSBUV0xHX0ZBUlNJICAgICAgICAgICAgICAgIDU1CisjZGVmaW5lIFRXTEdfRklOTklTSCAgICAgICAgICAgICAgVFdMR19GSU4KKyNkZWZpbmUgVFdMR19GUkVOQ0ggICAgICAgICAgICAgICBUV0xHX0ZSTgorI2RlZmluZSBUV0xHX0ZSRU5DSF9CRUxHSUFOICAgICAgIDU2CisjZGVmaW5lIFRXTEdfRlJFTkNIX0NBTkFESUFOICAgICAgVFdMR19GQ0YKKyNkZWZpbmUgVFdMR19GUkVOQ0hfTFVYRU1CT1VSRyAgICA1NworI2RlZmluZSBUV0xHX0ZSRU5DSF9TV0lTUyAgICAgICAgIDU4CisjZGVmaW5lIFRXTEdfR0VSTUFOICAgICAgICAgICAgICAgVFdMR19HRVIKKyNkZWZpbmUgVFdMR19HRVJNQU5fQVVTVFJJQU4gICAgICA1OQorI2RlZmluZSBUV0xHX0dFUk1BTl9MVVhFTUJPVVJHICAgIDYwCisjZGVmaW5lIFRXTEdfR0VSTUFOX0xJRUNIVEVOU1RFSU4gNjEKKyNkZWZpbmUgVFdMR19HRVJNQU5fU1dJU1MgICAgICAgICA2MgorI2RlZmluZSBUV0xHX0dSRUVLICAgICAgICAgICAgICAgIDYzCisjZGVmaW5lIFRXTEdfSEVCUkVXICAgICAgICAgICAgICAgNjQKKyNkZWZpbmUgVFdMR19IVU5HQVJJQU4gICAgICAgICAgICA2NQorI2RlZmluZSBUV0xHX0lDRUxBTkRJQyAgICAgICAgICAgIFRXTEdfSUNFCisjZGVmaW5lIFRXTEdfSU5ET05FU0lBTiAgICAgICAgICAgNjYKKyNkZWZpbmUgVFdMR19JVEFMSUFOICAgICAgICAgICAgICBUV0xHX0lUTgorI2RlZmluZSBUV0xHX0lUQUxJQU5fU1dJU1MgICAgICAgIDY3CisjZGVmaW5lIFRXTEdfSkFQQU5FU0UgICAgICAgICAgICAgNjgKKyNkZWZpbmUgVFdMR19LT1JFQU4gICAgICAgICAgICAgICA2OQorI2RlZmluZSBUV0xHX0tPUkVBTl9KT0hBQiAgICAgICAgIDcwCisjZGVmaW5lIFRXTEdfTEFUVklBTiAgICAgICAgICAgICAgNzEKKyNkZWZpbmUgVFdMR19MSVRIVUFOSUFOICAgICAgICAgICA3MgorI2RlZmluZSBUV0xHX05PUldFR0lBTiAgICAgICAgICAgIFRXTEdfTk9SCisjZGVmaW5lIFRXTEdfTk9SV0VHSUFOX0JPS01BTCAgICAgNzMKKyNkZWZpbmUgVFdMR19OT1JXRUdJQU5fTllOT1JTSyAgICA3NAorI2RlZmluZSBUV0xHX1BPTElTSCAgICAgICAgICAgICAgIDc1CisjZGVmaW5lIFRXTEdfUE9SVFVHVUVTRSAgICAgICAgICAgVFdMR19QT1IKKyNkZWZpbmUgVFdMR19QT1JUVUdVRVNFX0JSQVpJTCAgICA3NgorI2RlZmluZSBUV0xHX1JPTUFOSUFOICAgICAgICAgICAgIDc3CisjZGVmaW5lIFRXTEdfUlVTU0lBTiAgICAgICAgICAgICAgNzgKKyNkZWZpbmUgVFdMR19TRVJCSUFOX0xBVElOICAgICAgICA3OQorI2RlZmluZSBUV0xHX1NMT1ZBSyAgICAgICAgICAgICAgIDgwCisjZGVmaW5lIFRXTEdfU0xPVkVOSUFOICAgICAgICAgICAgODEKKyNkZWZpbmUgVFdMR19TUEFOSVNIICAgICAgICAgICAgICBUV0xHX1NQQQorI2RlZmluZSBUV0xHX1NQQU5JU0hfTUVYSUNBTiAgICAgIDgyCisjZGVmaW5lIFRXTEdfU1BBTklTSF9NT0RFUk4gICAgICAgODMKKyNkZWZpbmUgVFdMR19TV0VESVNIICAgICAgICAgICAgICBUV0xHX1NXRQorI2RlZmluZSBUV0xHX1RIQUkgICAgICAgICAgICAgICAgIDg0CisjZGVmaW5lIFRXTEdfVFVSS0lTSCAgICAgICAgICAgICAgODUKKyNkZWZpbmUgVFdMR19VS1JBTklBTiAgICAgICAgICAgICA4NgorLyogTW9yZSBzdHVmZiBhZGRlZCBmb3IgMS44ICovCisjZGVmaW5lIFRXTEdfQVNTQU1FU0UgICAgICAgICAgICAgODcKKyNkZWZpbmUgVFdMR19CRU5HQUxJICAgICAgICAgICAgICA4OAorI2RlZmluZSBUV0xHX0JJSEFSSSAgICAgICAgICAgICAgIDg5CisjZGVmaW5lIFRXTEdfQk9ETyAgICAgICAgICAgICAgICAgOTAKKyNkZWZpbmUgVFdMR19ET0dSSSAgICAgICAgICAgICAgICA5MQorI2RlZmluZSBUV0xHX0dVSkFSQVRJICAgICAgICAgICAgIDkyCisjZGVmaW5lIFRXTEdfSEFSWUFOVkkgICAgICAgICAgICAgOTMKKyNkZWZpbmUgVFdMR19ISU5ESSAgICAgICAgICAgICAgICA5NAorI2RlZmluZSBUV0xHX0tBTk5BREEgICAgICAgICAgICAgIDk1CisjZGVmaW5lIFRXTEdfS0FTSE1JUkkgICAgICAgICAgICAgOTYKKyNkZWZpbmUgVFdMR19NQUxBWUFMQU0gICAgICAgICAgICA5NworI2RlZmluZSBUV0xHX01BUkFUSEkgICAgICAgICAgICAgIDk4CisjZGVmaW5lIFRXTEdfTUFSV0FSSSAgICAgICAgICAgICAgOTkKKyNkZWZpbmUgVFdMR19NRUdIQUxBWUFOICAgICAgICAgIDEwMAorI2RlZmluZSBUV0xHX01JWk8gICAgICAgICAgICAgICAgMTAxCisjZGVmaW5lIFRXTEdfTkFHQSAgICAgICAgICAgICAgICAxMDIKKyNkZWZpbmUgVFdMR19PUklTU0kgICAgICAgICAgICAgIDEwMworI2RlZmluZSBUV0xHX1BVTkpBQkkgICAgICAgICAgICAgMTA0CisjZGVmaW5lIFRXTEdfUFVTSFRVICAgICAgICAgICAgICAxMDUKKyNkZWZpbmUgVFdMR19TRVJCSUFOX0NZUklMTElDICAgIDEwNgorI2RlZmluZSBUV0xHX1NJS0tJTUkgICAgICAgICAgICAgMTA3CisjZGVmaW5lIFRXTEdfU1dFRElTSF9GSU5MQU5EICAgICAxMDgKKyNkZWZpbmUgVFdMR19UQU1JTCAgICAgICAgICAgICAgIDEwOQorI2RlZmluZSBUV0xHX1RFTFVHVSAgICAgICAgICAgICAgMTEwCisjZGVmaW5lIFRXTEdfVFJJUFVSSSAgICAgICAgICAgICAxMTEKKyNkZWZpbmUgVFdMR19VUkRVICAgICAgICAgICAgICAgIDExMgorI2RlZmluZSBUV0xHX1ZJRVROQU1FU0UgICAgICAgICAgMTEzCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEYXRhIEdyb3VwcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIE1vcmUgRGF0YSBHcm91cHMgbWF5IGJlIGFkZGVkIGluIHRoZSBmdXR1cmUuCisgKiBQb3NzaWJsZSBjYW5kaWRhdGVzIGluY2x1ZGUgdGV4dCwgdmVjdG9yIGdyYXBoaWNzLCBzb3VuZCwgZXRjLgorICogTk9URTogRGF0YSBHcm91cCBjb25zdGFudHMgbXVzdCBiZSBwb3dlcnMgb2YgMiBhcyB0aGV5IGFyZSB1c2VkCisgKiAgICAgICBhcyBiaXRmbGFncyB3aGVuIEFwcGxpY2F0aW9uIGFza3MgRFNNIHRvIHByZXNlbnQgYSBsaXN0IG9mIERTcy4KKyAqLworCisjZGVmaW5lIERHX0NPTlRST0wgICAgICAgICAgMHgwMDAxTCAvKiBkYXRhIHBlcnRhaW5pbmcgdG8gY29udHJvbCAgICAgICAqLworI2RlZmluZSBER19JTUFHRSAgICAgICAgICAgIDB4MDAwMkwgLyogZGF0YSBwZXJ0YWluaW5nIHRvIHJhc3RlciBpbWFnZXMgKi8KKy8qIEFkZGVkIDEuOCAqLworI2RlZmluZSBER19BVURJTyAgICAgICAgICAgIDB4MDAwNEwgLyogZGF0YSBwZXJ0YWluaW5nIHRvIGF1ZGlvICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEYXRhIEFyZ3VtZW50IFR5cGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qICBTREggLSAwMy8yMy85NSAtIFdBVENIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoZSB0aHVua2VyIHJlcXVpcmVzIGtub3dsZWRnZSBhYm91dCBzaXplIG9mIGRhdGEgYmVpbmcgcGFzc2VkIGluIHRoZSAgICovCisvKiAgbHBEYXRhIHBhcmFtZXRlciB0byBEU19FbnRyeSAod2hpY2ggaXMgbm90IHJlYWRpbHkgYXZhaWxhYmxlIGR1ZSB0byAgICAgKi8KKy8qICB0eXBlIExQVk9JRC4gIFRodXMsIHdlIGtleSBvZmYgdGhlIERBVF8gYXJndW1lbnQgdG8gZGV0ZXJtaW5lIHRoZSBzaXplLiAqLworLyogIFRoaXMgaGFzIGEgY291cGxlIGltcGxpY2F0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgMSkgQW55IGFkZGl0aW9uYWwgREFUXyBmZWF0dXJlcyByZXF1aXJlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIHRodW5rIGNvZGUgKi8KKy8qICAgICBmb3IgdGh1bmtlciBzdXBwb3J0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIDIpIEFueSBhcHBsaWNhdGlvbnMgd2hpY2ggdXNlIHRoZSBjdXN0b20gY2FwYWJhaWxpdGVzIGFyZSBub3Qgc3VwcG9ydGVkICovCisvKiAgICAgdW5kZXIgdGh1bmtpbmcgc2luY2Ugd2UgaGF2ZSBubyB3YXkgb2Yga25vd2luZyB3aGF0IHNpemUgZGF0YSAoaWYgICAgKi8KKy8qICAgICBhbnkpIGlzIGJlaW5nIHBhc3NlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIERBVF9OVUxMICAgICAgICAgICAgMHgwMDAwIC8qIE5vIGRhdGEgb3Igc3RydWN0dXJlLiAqLworI2RlZmluZSBEQVRfQ1VTVE9NQkFTRSAgICAgIDB4ODAwMCAvKiBCYXNlIG9mIGN1c3RvbSBEQVRzLiAgKi8KKworLyogRGF0YSBBcmd1bWVudCBUeXBlcyBmb3IgdGhlIERHX0NPTlRST0wgRGF0YSBHcm91cC4gKi8KKyNkZWZpbmUgREFUX0NBUEFCSUxJVFkgICAgICAweDAwMDEgLyogVFdfQ0FQQUJJTElUWSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERBVF9FVkVOVCAgICAgICAgICAgMHgwMDAyIC8qIFRXX0VWRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEQVRfSURFTlRJVFkgICAgICAgIDB4MDAwMyAvKiBUV19JREVOVElUWSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREFUX1BBUkVOVCAgICAgICAgICAweDAwMDQgLyogVFdfSEFORExFLCBhcHBsaWNhdGlvbiB3aW4gaGFuZGxlIGluIFdpbmRvd3MgKi8KKyNkZWZpbmUgREFUX1BFTkRJTkdYRkVSUyAgICAweDAwMDUgLyogVFdfUEVORElOR1hGRVJTICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERBVF9TRVRVUE1FTVhGRVIgICAgMHgwMDA2IC8qIFRXX1NFVFVQTUVNWEZFUiAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEQVRfU0VUVVBGSUxFWEZFUiAgIDB4MDAwNyAvKiBUV19TRVRVUEZJTEVYRkVSICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREFUX1NUQVRVUyAgICAgICAgICAweDAwMDggLyogVFdfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERBVF9VU0VSSU5URVJGQUNFICAgMHgwMDA5IC8qIFRXX1VTRVJJTlRFUkZBQ0UgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEQVRfWEZFUkdST1VQICAgICAgIDB4MDAwYSAvKiBUV19VSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBTREggLSAwMy8yMS85NSAtIFRXVU5LICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIEFkZGl0aW9uYWwgbWVzc2FnZSByZXF1aXJlZCBmb3IgdGh1bmtlciB0byByZXF1ZXN0IHRoZSBzcGVjaWFsICovCisvKiAgaWRlbnRpdHkgaW5mb3JtYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREFUX1RXVU5LSURFTlRJVFkgICAweDAwMGIgLyogVFdfVFdVTktJREVOVElUWSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERBVF9DVVNUT01EU0RBVEEgICAgMHgwMDBjIC8qIFRXX0NVU1RPTURTREFUQS4gICAgICAgICAgICAgICAgICAgICAqLworLyogQWRkZWQgMS44ICovCisjZGVmaW5lIERBVF9ERVZJQ0VFVkVOVCAgICAgMHgwMDBkIC8qIFRXX0RFVklDRUVWRU5UICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEQVRfRklMRVNZU1RFTSAgICAgIDB4MDAwZSAvKiBUV19GSUxFU1lTVEVNICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREFUX1BBU1NUSFJVICAgICAgICAweDAwMGYgLyogVFdfUEFTU1RIUlUgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKy8qIERhdGEgQXJndW1lbnQgVHlwZXMgZm9yIHRoZSBER19JTUFHRSBEYXRhIEdyb3VwLiAqLworI2RlZmluZSBEQVRfSU1BR0VJTkZPICAgICAgIDB4MDEwMSAvKiBUV19JTUFHRUlORk8gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREFUX0lNQUdFTEFZT1VUICAgICAweDAxMDIgLyogVFdfSU1BR0VMQVlPVVQgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERBVF9JTUFHRU1FTVhGRVIgICAgMHgwMTAzIC8qIFRXX0lNQUdFTUVNWEZFUiAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEQVRfSU1BR0VOQVRJVkVYRkVSIDB4MDEwNCAvKiBUV19VSU5UMzIgbG93b3JkIGlzIGhESUIsIFBJQ0hhbmRsZSAgKi8KKyNkZWZpbmUgREFUX0lNQUdFRklMRVhGRVIgICAweDAxMDUgLyogTnVsbCBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERBVF9DSUVDT0xPUiAgICAgICAgMHgwMTA2IC8qIFRXX0NJRUNPTE9SICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEQVRfR1JBWVJFU1BPTlNFICAgIDB4MDEwNyAvKiBUV19HUkFZUkVTUE9OU0UgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREFUX1JHQlJFU1BPTlNFICAgICAweDAxMDggLyogVFdfUkdCUkVTUE9OU0UgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERBVF9KUEVHQ09NUFJFU1NJT04gMHgwMTA5IC8qIFRXX0pQRUdDT01QUkVTU0lPTiAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEQVRfUEFMRVRURTggICAgICAgIDB4MDEwYSAvKiBUV19QQUxFVFRFOCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREFUX0VYVElNQUdFSU5GTyAgICAweDAxMGIgLyogVFdfRVhUSU1BR0VJTkZPIC0tIGZvciAxLjcgU3BlYy4gICAgICovCisKKy8qIEFkZGVkIDEuOCAqLworLyogRGF0YSBBcmd1bWVudCBUeXBlcyBmb3IgdGhlIERHX0FVRElPIERhdGEgR3JvdXAuICovCisjZGVmaW5lIERBVF9BVURJT0ZJTEVYRkVSICAgMHgwMjAxIC8qIE51bGwgZGF0YSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEQVRfQVVESU9JTkZPICAgICAgIDB4MDIwMiAvKiBUV19BVURJT0lORk8gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREFUX0FVRElPTkFUSVZFWEZFUiAweDAyMDMgLyogVFdfVUlOVDMyIGhhbmRsZSB0byBXQVYsIChBSUZGIE1hYykgICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBNZXNzYWdlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEFsbCBtZXNzYWdlIGNvbnN0YW50cyBhcmUgdW5pcXVlLgorICogTWVzc2FnZXMgYXJlIGdyb3VwZWQgYWNjb3JkaW5nIHRvIHdoaWNoIERBVHMgdGhleSBhcmUgdXNlZCB3aXRoLiovCisKKyNkZWZpbmUgTVNHX05VTEwgICAgICAgICAweDAwMDAgLyogVXNlZCBpbiBUV19FVkVOVCBzdHJ1Y3R1cmUgICAgICAgICAgICAgICAqLworI2RlZmluZSBNU0dfQ1VTVE9NQkFTRSAgIDB4ODAwMCAvKiBCYXNlIG9mIGN1c3RvbSBtZXNzYWdlcyAgICAgICAgICAgICAgICAgICovCisKKy8qIEdlbmVyaWMgbWVzc2FnZXMgbWF5IGJlIHVzZWQgd2l0aCBhbnkgb2Ygc2V2ZXJhbCBEQVRzLiAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBNU0dfR0VUICAgICAgICAgIDB4MDAwMSAvKiBHZXQgb25lIG9yIG1vcmUgdmFsdWVzICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIE1TR19HRVRDVVJSRU5UICAgMHgwMDAyIC8qIEdldCBjdXJyZW50IHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTVNHX0dFVERFRkFVTFQgICAweDAwMDMgLyogR2V0IGRlZmF1bHQgKGUuZy4gcG93ZXIgdXApIHZhbHVlICAgICAgICAqLworI2RlZmluZSBNU0dfR0VURklSU1QgICAgIDB4MDAwNCAvKiBHZXQgZmlyc3Qgb2YgYSBzZXJpZXMgb2YgaXRlbXMsIGUuZy4gRFNzICovCisjZGVmaW5lIE1TR19HRVRORVhUICAgICAgMHgwMDA1IC8qIEl0ZXJhdGUgdGhyb3VnaCBhIHNlcmllcyBvZiBpdGVtcy4gICAgICAgKi8KKyNkZWZpbmUgTVNHX1NFVCAgICAgICAgICAweDAwMDYgLyogU2V0IG9uZSBvciBtb3JlIHZhbHVlcyAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBNU0dfUkVTRVQgICAgICAgIDB4MDAwNyAvKiBTZXQgY3VycmVudCB2YWx1ZSB0byBkZWZhdWx0IHZhbHVlICAgICAgICovCisjZGVmaW5lIE1TR19RVUVSWVNVUFBPUlQgMHgwMDA4IC8qIEdldCBzdXBwb3J0ZWQgb3BlcmF0aW9ucyBvbiB0aGUgY2FwLiAgICAgKi8KKworLyogTWVzc2FnZXMgdXNlZCB3aXRoIERBVF9OVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIE1TR19YRkVSUkVBRFkgICAgMHgwMTAxIC8qIFRoZSBkYXRhIHNvdXJjZSBoYXMgZGF0YSByZWFkeSAgICAgICAgICAgKi8KKyNkZWZpbmUgTVNHX0NMT1NFRFNSRVEgICAweDAxMDIgLyogUmVxdWVzdCBmb3IgQXBwbGljYXRpb24uIHRvIGNsb3NlIERTICAgICAgICAgICAgICovCisjZGVmaW5lIE1TR19DTE9TRURTT0sgICAgMHgwMTAzIC8qIFRlbGwgdGhlIEFwcGxpY2F0aW9uLiB0byBzYXZlIHRoZSBzdGF0ZS4gICAgICAgICAqLworLyogQWRkZWQgMS44ICovCisjZGVmaW5lIE1TR19ERVZJQ0VFVkVOVCAgMFgwMTA0IC8qIFNvbWUgZXZlbnQgaGFzIHRha2VuIHBsYWNlICAgICAgICAgICAgICAgKi8KKworLyogTWVzc2FnZXMgdXNlZCB3aXRoIGEgcG9pbnRlciB0byBhIERBVF9TVEFUVVMgc3RydWN0dXJlICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIE1TR19DSEVDS1NUQVRVUyAgMHgwMjAxIC8qIEdldCBzdGF0dXMgaW5mb3JtYXRpb24gICAgICAgICAgICAgICAgICAgKi8KKworLyogTWVzc2FnZXMgdXNlZCB3aXRoIGEgcG9pbnRlciB0byBEQVRfUEFSRU5UIGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIE1TR19PUEVORFNNICAgICAgMHgwMzAxIC8qIE9wZW4gdGhlIERTTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTVNHX0NMT1NFRFNNICAgICAweDAzMDIgLyogQ2xvc2UgdGhlIERTTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisvKiBNZXNzYWdlcyB1c2VkIHdpdGggYSBwb2ludGVyIHRvIGEgREFUX0lERU5USVRZIHN0cnVjdHVyZSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTVNHX09QRU5EUyAgICAgICAweDA0MDEgLyogT3BlbiBhIGRhdGEgc291cmNlICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBNU0dfQ0xPU0VEUyAgICAgIDB4MDQwMiAvKiBDbG9zZSBhIGRhdGEgc291cmNlICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIE1TR19VU0VSU0VMRUNUICAgMHgwNDAzIC8qIFB1dCB1cCBhIGRpYWxvZyBvZiBhbGwgRFMgICAgICAgICAgICAgICAgKi8KKworLyogTWVzc2FnZXMgdXNlZCB3aXRoIGEgcG9pbnRlciB0byBhIERBVF9VU0VSSU5URVJGQUNFIHN0cnVjdHVyZSAgICAgICAgICAgICovCisjZGVmaW5lIE1TR19ESVNBQkxFRFMgICAgMHgwNTAxIC8qIERpc2FibGUgZGF0YSB0cmFuc2ZlciBpbiB0aGUgRFMgICAgICAgICAgKi8KKyNkZWZpbmUgTVNHX0VOQUJMRURTICAgICAweDA1MDIgLyogRW5hYmxlIGRhdGEgdHJhbnNmZXIgaW4gdGhlIERTICAgICAgICAgICAqLworI2RlZmluZSBNU0dfRU5BQkxFRFNVSU9OTFkgIDB4MDUwMyAgLyogRW5hYmxlIGZvciBzYXZpbmcgRFMgc3RhdGUgb25seS4gICAgICovCisKKy8qIE1lc3NhZ2VzIHVzZWQgd2l0aCBhIHBvaW50ZXIgdG8gYSBEQVRfRVZFTlQgc3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBNU0dfUFJPQ0VTU0VWRU5UIDB4MDYwMQorCisvKiBNZXNzYWdlcyB1c2VkIHdpdGggYSBwb2ludGVyIHRvIGEgREFUX1BFTkRJTkdYRkVSUyBzdHJ1Y3R1cmUgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTVNHX0VORFhGRVIgICAgICAweDA3MDEKKworLyogQWRkZWQgMS44ICovCisvKiBNZXNzYWdlcyB1c2VkIHdpdGggYSBwb2ludGVyIHRvIGEgREFUX0ZJTEVTWVNURU0gc3RydWN0dXJlICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTVNHX0NIQU5HRURJUkVDVE9SWSAgIDB4MDgwMQorI2RlZmluZSBNU0dfQ1JFQVRFRElSRUNUT1JZICAgMHgwODAyCisjZGVmaW5lIE1TR19ERUxFVEUgICAgICAgICAgICAweDA4MDMKKyNkZWZpbmUgTVNHX0ZPUk1BVE1FRElBICAgICAgIDB4MDgwNCAKKyNkZWZpbmUgTVNHX0dFVENMT1NFICAgICAgICAgIDB4MDgwNQorI2RlZmluZSBNU0dfR0VURklSU1RGSUxFICAgICAgMHgwODA2CisjZGVmaW5lIE1TR19HRVRJTkZPICAgICAgICAgICAweDA4MDcKKyNkZWZpbmUgTVNHX0dFVE5FWFRGSUxFICAgICAgIDB4MDgwOAorI2RlZmluZSBNU0dfUkVOQU1FICAgICAgICAgICAgMHgwODA5CisKKy8qIE1lc3NhZ2VzIHVzZWQgd2l0aCBhIHBvaW50ZXIgdG8gYSBEQVRfUEFTU1RIUlUgc3RydWN0dXJlICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBNU0dfUEFTU1RIUlUgICAgICAgICAgMHgwOTAxCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDYXBhYmlsaXRpZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgQ0FQX0NVU1RPTUJBU0UgICAgICAgICAgMHg4MDAwIC8qIEJhc2Ugb2YgY3VzdG9tIGNhcGFiaWxpdGllcyAqLworCisvKiBhbGwgZGF0YSBzb3VyY2VzIGFyZSBSRVFVSVJFRCB0byBzdXBwb3J0IHRoZXNlIGNhcHMgKi8KKyNkZWZpbmUgQ0FQX1hGRVJDT1VOVCAgICAgICAgICAgMHgwMDAxCisKKy8qIGltYWdlIGRhdGEgc291cmNlcyBhcmUgUkVRVUlSRUQgdG8gc3VwcG9ydCB0aGVzZSBjYXBzICovCisjZGVmaW5lIElDQVBfQ09NUFJFU1NJT04gICAgICAgIDB4MDEwMAorI2RlZmluZSBJQ0FQX1BJWEVMVFlQRSAgICAgICAgICAweDAxMDEKKyNkZWZpbmUgSUNBUF9VTklUUyAgICAgICAgICAgICAgMHgwMTAyIC8qIGRlZmF1bHQgaXMgVFdVTl9JTkNIRVMgKi8KKyNkZWZpbmUgSUNBUF9YRkVSTUVDSCAgICAgICAgICAgMHgwMTAzCisKKy8qIGFsbCBkYXRhIHNvdXJjZXMgTUFZIHN1cHBvcnQgdGhlc2UgY2FwcyAqLworI2RlZmluZSBDQVBfQVVUSE9SICAgICAgICAgICAgICAgICAgMHgxMDAwCisjZGVmaW5lIENBUF9DQVBUSU9OICAgICAgICAgICAgICAgICAweDEwMDEKKyNkZWZpbmUgQ0FQX0ZFRURFUkVOQUJMRUQgICAgICAgICAgIDB4MTAwMgorI2RlZmluZSBDQVBfRkVFREVSTE9BREVEICAgICAgICAgICAgMHgxMDAzCisjZGVmaW5lIENBUF9USU1FREFURSAgICAgICAgICAgICAgICAweDEwMDQKKyNkZWZpbmUgQ0FQX1NVUFBPUlRFRENBUFMgICAgICAgICAgIDB4MTAwNQorI2RlZmluZSBDQVBfRVhURU5ERURDQVBTICAgICAgICAgICAgMHgxMDA2CisjZGVmaW5lIENBUF9BVVRPRkVFRCAgICAgICAgICAgICAgICAweDEwMDcKKyNkZWZpbmUgQ0FQX0NMRUFSUEFHRSAgICAgICAgICAgICAgIDB4MTAwOAorI2RlZmluZSBDQVBfRkVFRFBBR0UgICAgICAgICAgICAgICAgMHgxMDA5CisjZGVmaW5lIENBUF9SRVdJTkRQQUdFICAgICAgICAgICAgICAweDEwMGEKKyNkZWZpbmUgQ0FQX0lORElDQVRPUlMgICAgICAgICAgICAgIDB4MTAwYiAgIC8qIEFkZGVkIDEuMSAqLworI2RlZmluZSBDQVBfU1VQUE9SVEVEQ0FQU0VYVCAgICAgICAgMHgxMDBjICAgLyogQWRkZWQgMS42ICovCisjZGVmaW5lIENBUF9QQVBFUkRFVEVDVEFCTEUgICAgICAgICAweDEwMGQgICAvKiBBZGRlZCAxLjYgKi8KKyNkZWZpbmUgQ0FQX1VJQ09OVFJPTExBQkxFICAgICAgICAgIDB4MTAwZSAgIC8qIEFkZGVkIDEuNiAqLworI2RlZmluZSBDQVBfREVWSUNFT05MSU5FICAgICAgICAgICAgMHgxMDBmICAgLyogQWRkZWQgMS42ICovCisjZGVmaW5lIENBUF9BVVRPU0NBTiAgICAgICAgICAgICAgICAweDEwMTAgICAvKiBBZGRlZCAxLjYgKi8KKyNkZWZpbmUgQ0FQX1RIVU1CTkFJTFNFTkFCTEVEICAgICAgIDB4MTAxMSAgIC8qIEFkZGVkIDEuNyAqLworI2RlZmluZSBDQVBfRFVQTEVYICAgICAgICAgICAgICAgICAgMHgxMDEyICAgLyogQWRkZWQgMS43ICovCisjZGVmaW5lIENBUF9EVVBMRVhFTkFCTEVEICAgICAgICAgICAweDEwMTMgICAvKiBBZGRlZCAxLjcgKi8KKyNkZWZpbmUgQ0FQX0VOQUJMRURTVUlPTkxZICAgICAgICAgIDB4MTAxNCAgIC8qIEFkZGVkIDEuNyAqLworI2RlZmluZSBDQVBfQ1VTVE9NRFNEQVRBICAgICAgICAgICAgMHgxMDE1ICAgLyogQWRkZWQgMS43ICovCisjZGVmaW5lIENBUF9FTkRPUlNFUiAgICAgICAgICAgICAgICAweDEwMTYgICAvKiBBZGRlZCAxLjcgKi8KKyNkZWZpbmUgQ0FQX0pPQkNPTlRST0wgICAgICAgICAgICAgIDB4MTAxNyAgIC8qIEFkZGVkIDEuNyAqLworI2RlZmluZSBDQVBfQUxBUk1TICAgICAgICAgICAgICAgICAgMHgxMDE4ICAgLyogQWRkZWQgMS44ICovCisjZGVmaW5lIENBUF9BTEFSTVZPTFVNRSAgICAgICAgICAgICAweDEwMTkgICAvKiBBZGRlZCAxLjggKi8KKyNkZWZpbmUgQ0FQX0FVVE9NQVRJQ0NBUFRVUkUgICAgICAgIDB4MTAxYSAgIC8qIEFkZGVkIDEuOCAqLworI2RlZmluZSBDQVBfVElNRUJFRk9SRUZJUlNUQ0FQVFVSRSAgMHgxMDFiICAgLyogQWRkZWQgMS44ICovCisjZGVmaW5lIENBUF9USU1FQkVUV0VFTkNBUFRVUkVTICAgICAweDEwMWMgICAvKiBBZGRlZCAxLjggKi8KKyNkZWZpbmUgQ0FQX0NMRUFSQlVGRkVSUyAgICAgICAgICAgIDB4MTAxZCAgIC8qIEFkZGVkIDEuOCAqLworI2RlZmluZSBDQVBfTUFYQkFUQ0hCVUZGRVJTICAgICAgICAgMHgxMDFlICAgLyogQWRkZWQgMS44ICovCisjZGVmaW5lIENBUF9ERVZJQ0VUSU1FREFURSAgICAgICAgICAweDEwMWYgICAvKiBBZGRlZCAxLjggKi8KKyNkZWZpbmUgQ0FQX1BPV0VSU1VQUExZICAgICAgICAgICAgIDB4MTAyMCAgIC8qIEFkZGVkIDEuOCAqLworI2RlZmluZSBDQVBfQ0FNRVJBUFJFVklFV1VJICAgICAgICAgMHgxMDIxICAgLyogQWRkZWQgMS44ICovCisjZGVmaW5lIENBUF9ERVZJQ0VFVkVOVCAgICAgICAgICAgICAweDEwMjIgICAvKiBBZGRlZCAxLjggKi8KKyNkZWZpbmUgQ0FQX1BBR0VNVUxUSVBMRUFDUVVJUkUgICAgIDB4MTAyMyAgIC8qIEFkZGVkIDEuOCAqLworI2RlZmluZSBDQVBfU0VSSUFMTlVNQkVSICAgICAgICAgICAgMHgxMDI0ICAgLyogQWRkZWQgMS44ICovCisjZGVmaW5lIENBUF9GSUxFU1lTVEVNICAgICAgICAgICAgICAweDEwMjUgICAvKiBBZGRlZCAxLjggKi8KKyNkZWZpbmUgQ0FQX1BSSU5URVIgICAgICAgICAgICAgICAgIDB4MTAyNiAgIC8qIEFkZGVkIDEuOCAqLworI2RlZmluZSBDQVBfUFJJTlRFUkVOQUJMRUQgICAgICAgICAgMHgxMDI3ICAgLyogQWRkZWQgMS44ICovCisjZGVmaW5lIENBUF9QUklOVEVSSU5ERVggICAgICAgICAgICAweDEwMjggICAvKiBBZGRlZCAxLjggKi8KKyNkZWZpbmUgQ0FQX1BSSU5URVJNT0RFICAgICAgICAgICAgIDB4MTAyOSAgIC8qIEFkZGVkIDEuOCAqLworI2RlZmluZSBDQVBfUFJJTlRFUlNUUklORyAgICAgICAgICAgMHgxMDJhICAgLyogQWRkZWQgMS44ICovCisjZGVmaW5lIENBUF9QUklOVEVSU1VGRklYICAgICAgICAgICAweDEwMmIgICAvKiBBZGRlZCAxLjggKi8KKyNkZWZpbmUgQ0FQX0xBTkdVQUdFICAgICAgICAgICAgICAgIDB4MTAyYyAgIC8qIEFkZGVkIDEuOCAqLworI2RlZmluZSBDQVBfRkVFREVSQUxJR05NRU5UICAgICAgICAgMHgxMDJkICAgLyogQWRkZWQgMS44ICovCisjZGVmaW5lIENBUF9GRUVERVJPUkRFUiAgICAgICAgICAgICAweDEwMmUgICAvKiBBZGRlZCAxLjggKi8KKyNkZWZpbmUgQ0FQX1BBUEVSQklORElORyAgICAgICAgICAgIDB4MTAyZiAgIC8qIEFkZGVkIDEuOCAqLworI2RlZmluZSBDQVBfUkVBQ1FVSVJFQUxMT1dFRCAgICAgICAgMHgxMDMwICAgLyogQWRkZWQgMS44ICovCisjZGVmaW5lIENBUF9QQVNTVEhSVSAgICAgICAgICAgICAgICAweDEwMzEgICAvKiBBZGRlZCAxLjggKi8KKyNkZWZpbmUgQ0FQX0JBVFRFUllNSU5VVEVTICAgICAgICAgIDB4MTAzMiAgIC8qIEFkZGVkIDEuOCAqLworI2RlZmluZSBDQVBfQkFUVEVSWVBFUkNFTlRBR0UgICAgICAgMHgxMDMzICAgLyogQWRkZWQgMS44ICovCisjZGVmaW5lIENBUF9QT1dFUkRPV05USU1FICAgICAgICAgICAweDEwMzQgICAvKiBBZGRlZCAxLjggKi8KKyAKKy8qIGltYWdlIGRhdGEgc291cmNlcyBNQVkgc3VwcG9ydCB0aGVzZSBjYXBzICovCisjZGVmaW5lIElDQVBfQVVUT0JSSUdIVCAgICAgICAgICAgICAgICAgICAweDExMDAKKyNkZWZpbmUgSUNBUF9CUklHSFRORVNTICAgICAgICAgICAgICAgICAgIDB4MTEwMQorI2RlZmluZSBJQ0FQX0NPTlRSQVNUICAgICAgICAgICAgICAgICAgICAgMHgxMTAzCisjZGVmaW5lIElDQVBfQ1VTVEhBTEZUT05FICAgICAgICAgICAgICAgICAweDExMDQKKyNkZWZpbmUgSUNBUF9FWFBPU1VSRVRJTUUgICAgICAgICAgICAgICAgIDB4MTEwNQorI2RlZmluZSBJQ0FQX0ZJTFRFUiAgICAgICAgICAgICAgICAgICAgICAgMHgxMTA2CisjZGVmaW5lIElDQVBfRkxBU0hVU0VEICAgICAgICAgICAgICAgICAgICAweDExMDcKKyNkZWZpbmUgSUNBUF9HQU1NQSAgICAgICAgICAgICAgICAgICAgICAgIDB4MTEwOAorI2RlZmluZSBJQ0FQX0hBTEZUT05FUyAgICAgICAgICAgICAgICAgICAgMHgxMTA5CisjZGVmaW5lIElDQVBfSElHSExJR0hUICAgICAgICAgICAgICAgICAgICAweDExMGEKKyNkZWZpbmUgSUNBUF9JTUFHRUZJTEVGT1JNQVQgICAgICAgICAgICAgIDB4MTEwYworI2RlZmluZSBJQ0FQX0xBTVBTVEFURSAgICAgICAgICAgICAgICAgICAgMHgxMTBkCisjZGVmaW5lIElDQVBfTElHSFRTT1VSQ0UgICAgICAgICAgICAgICAgICAweDExMGUKKyNkZWZpbmUgSUNBUF9PUklFTlRBVElPTiAgICAgICAgICAgICAgICAgIDB4MTExMAorI2RlZmluZSBJQ0FQX1BIWVNJQ0FMV0lEVEggICAgICAgICAgICAgICAgMHgxMTExCisjZGVmaW5lIElDQVBfUEhZU0lDQUxIRUlHSFQgICAgICAgICAgICAgICAweDExMTIKKyNkZWZpbmUgSUNBUF9TSEFET1cgICAgICAgICAgICAgICAgICAgICAgIDB4MTExMworI2RlZmluZSBJQ0FQX0ZSQU1FUyAgICAgICAgICAgICAgICAgICAgICAgMHgxMTE0CisjZGVmaW5lIElDQVBfWE5BVElWRVJFU09MVVRJT04gICAgICAgICAgICAweDExMTYKKyNkZWZpbmUgSUNBUF9ZTkFUSVZFUkVTT0xVVElPTiAgICAgICAgICAgIDB4MTExNworI2RlZmluZSBJQ0FQX1hSRVNPTFVUSU9OICAgICAgICAgICAgICAgICAgMHgxMTE4CisjZGVmaW5lIElDQVBfWVJFU09MVVRJT04gICAgICAgICAgICAgICAgICAweDExMTkKKyNkZWZpbmUgSUNBUF9NQVhGUkFNRVMgICAgICAgICAgICAgICAgICAgIDB4MTExYQorI2RlZmluZSBJQ0FQX1RJTEVTICAgICAgICAgICAgICAgICAgICAgICAgMHgxMTFiCisjZGVmaW5lIElDQVBfQklUT1JERVIgICAgICAgICAgICAgICAgICAgICAweDExMWMKKyNkZWZpbmUgSUNBUF9DQ0lUVEtGQUNUT1IgICAgICAgICAgICAgICAgIDB4MTExZAorI2RlZmluZSBJQ0FQX0xJR0hUUEFUSCAgICAgICAgICAgICAgICAgICAgMHgxMTFlCisjZGVmaW5lIElDQVBfUElYRUxGTEFWT1IgICAgICAgICAgICAgICAgICAweDExMWYKKyNkZWZpbmUgSUNBUF9QTEFOQVJDSFVOS1kgICAgICAgICAgICAgICAgIDB4MTEyMAorI2RlZmluZSBJQ0FQX1JPVEFUSU9OICAgICAgICAgICAgICAgICAgICAgMHgxMTIxCisjZGVmaW5lIElDQVBfU1VQUE9SVEVEU0laRVMgICAgICAgICAgICAgICAweDExMjIKKyNkZWZpbmUgSUNBUF9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgIDB4MTEyMworI2RlZmluZSBJQ0FQX1hTQ0FMSU5HICAgICAgICAgICAgICAgICAgICAgMHgxMTI0CisjZGVmaW5lIElDQVBfWVNDQUxJTkcgICAgICAgICAgICAgICAgICAgICAweDExMjUKKyNkZWZpbmUgSUNBUF9CSVRPUkRFUkNPREVTICAgICAgICAgICAgICAgIDB4MTEyNgorI2RlZmluZSBJQ0FQX1BJWEVMRkxBVk9SQ09ERVMgICAgICAgICAgICAgMHgxMTI3CisjZGVmaW5lIElDQVBfSlBFR1BJWEVMVFlQRSAgICAgICAgICAgICAgICAweDExMjgKKyNkZWZpbmUgSUNBUF9USU1FRklMTCAgICAgICAgICAgICAgICAgICAgIDB4MTEyYQorI2RlZmluZSBJQ0FQX0JJVERFUFRIICAgICAgICAgICAgICAgICAgICAgMHgxMTJiCisjZGVmaW5lIElDQVBfQklUREVQVEhSRURVQ1RJT04gICAgICAgICAgICAweDExMmMgIC8qIEFkZGVkIDEuNSAqLworI2RlZmluZSBJQ0FQX1VOREVGSU5FRElNQUdFU0laRSAgICAgICAgICAgMHgxMTJkICAvKiBBZGRlZCAxLjYgKi8KKyNkZWZpbmUgSUNBUF9JTUFHRURBVEFTRVQgICAgICAgICAgICAgICAgIDB4MTEyZSAgLyogQWRkZWQgMS43ICovCisjZGVmaW5lIElDQVBfRVhUSU1BR0VJTkZPICAgICAgICAgICAgICAgICAweDExMmYgIC8qIEFkZGVkIDEuNyAqLworI2RlZmluZSBJQ0FQX01JTklNVU1IRUlHSFQgICAgICAgICAgICAgICAgMHgxMTMwICAvKiBBZGRlZCAxLjcgKi8KKyNkZWZpbmUgSUNBUF9NSU5JTVVNV0lEVEggICAgICAgICAgICAgICAgIDB4MTEzMSAgLyogQWRkZWQgMS43ICovCisjZGVmaW5lIElDQVBfQVVUT0RJU0NBUkRCTEFOS1BBR0VTICAgICAgICAweDExMzQgIC8qIEFkZGVkIDEuOCAqLworI2RlZmluZSBJQ0FQX0ZMSVBST1RBVElPTiAgICAgICAgICAgICAgICAgMHgxMTM2ICAvKiBBZGRlZCAxLjggKi8KKyNkZWZpbmUgSUNBUF9CQVJDT0RFREVURUNUSU9ORU5BQkxFRCAgICAgIDB4MTEzNyAgLyogQWRkZWQgMS44ICovCisjZGVmaW5lIElDQVBfU1VQUE9SVEVEQkFSQ09ERVRZUEVTICAgICAgICAweDExMzggIC8qIEFkZGVkIDEuOCAqLworI2RlZmluZSBJQ0FQX0JBUkNPREVNQVhTRUFSQ0hQUklPUklUSUVTICAgMHgxMTM5ICAvKiBBZGRlZCAxLjggKi8KKyNkZWZpbmUgSUNBUF9CQVJDT0RFU0VBUkNIUFJJT1JJVElFUyAgICAgIDB4MTEzYSAgLyogQWRkZWQgMS44ICovCisjZGVmaW5lIElDQVBfQkFSQ09ERVNFQVJDSE1PREUgICAgICAgICAgICAweDExM2IgIC8qIEFkZGVkIDEuOCAqLworI2RlZmluZSBJQ0FQX0JBUkNPREVNQVhSRVRSSUVTICAgICAgICAgICAgMHgxMTNjICAvKiBBZGRlZCAxLjggKi8KKyNkZWZpbmUgSUNBUF9CQVJDT0RFVElNRU9VVCAgICAgICAgICAgICAgIDB4MTEzZCAgLyogQWRkZWQgMS44ICovCisjZGVmaW5lIElDQVBfWk9PTUZBQ1RPUiAgICAgICAgICAgICAgICAgICAweDExM2UgIC8qIEFkZGVkIDEuOCAqLworI2RlZmluZSBJQ0FQX1BBVENIQ09ERURFVEVDVElPTkVOQUJMRUQgICAgMHgxMTNmICAvKiBBZGRlZCAxLjggKi8KKyNkZWZpbmUgSUNBUF9TVVBQT1JURURQQVRDSENPREVUWVBFUyAgICAgIDB4MTE0MCAgLyogQWRkZWQgMS44ICovCisjZGVmaW5lIElDQVBfUEFUQ0hDT0RFTUFYU0VBUkNIUFJJT1JJVElFUyAweDExNDEgIC8qIEFkZGVkIDEuOCAqLworI2RlZmluZSBJQ0FQX1BBVENIQ09ERVNFQVJDSFBSSU9SSVRJRVMgICAgMHgxMTQyICAvKiBBZGRlZCAxLjggKi8KKyNkZWZpbmUgSUNBUF9QQVRDSENPREVTRUFSQ0hNT0RFICAgICAgICAgIDB4MTE0MyAgLyogQWRkZWQgMS44ICovCisjZGVmaW5lIElDQVBfUEFUQ0hDT0RFTUFYUkVUUklFUyAgICAgICAgICAweDExNDQgIC8qIEFkZGVkIDEuOCAqLworI2RlZmluZSBJQ0FQX1BBVENIQ09ERVRJTUVPVVQgICAgICAgICAgICAgMHgxMTQ1ICAvKiBBZGRlZCAxLjggKi8KKyNkZWZpbmUgSUNBUF9GTEFTSFVTRUQyICAgICAgICAgICAgICAgICAgIDB4MTE0NiAgLyogQWRkZWQgMS44ICovCisjZGVmaW5lIElDQVBfSU1BR0VGSUxURVIgICAgICAgICAgICAgICAgICAweDExNDcgIC8qIEFkZGVkIDEuOCAqLworI2RlZmluZSBJQ0FQX05PSVNFRklMVEVSICAgICAgICAgICAgICAgICAgMHgxMTQ4ICAvKiBBZGRlZCAxLjggKi8KKyNkZWZpbmUgSUNBUF9PVkVSU0NBTiAgICAgICAgICAgICAgICAgICAgIDB4MTE0OSAgLyogQWRkZWQgMS44ICovCisjZGVmaW5lIElDQVBfQVVUT01BVElDQk9SREVSREVURUNUSU9OICAgICAweDExNTAgIC8qIEFkZGVkIDEuOCAqLworI2RlZmluZSBJQ0FQX0FVVE9NQVRJQ0RFU0tFVyAgICAgICAgICAgICAgMHgxMTUxICAvKiBBZGRlZCAxLjggKi8KKyNkZWZpbmUgSUNBUF9BVVRPTUFUSUNST1RBVEUgICAgICAgICAgICAgIDB4MTE1MiAgLyogQWRkZWQgMS44ICovCisKKy8qIGltYWdlIGRhdGEgc291cmNlcyBNQVkgc3VwcG9ydCB0aGVzZSBhdWRpbyBjYXBzICovCisjZGVmaW5lIEFDQVBfQVVESU9GSUxFRk9STUFUICAgIDB4MTIwMSAgLyogQWRkZWQgMS44ICovCisjZGVmaW5lIEFDQVBfWEZFUk1FQ0ggICAgICAgICAgIDB4MTIwMiAgLyogQWRkZWQgMS44ICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICpcCisKKyAgVmVyc2lvbiAxLjc6ICAgICAgRm9sbG93aW5nIGlzIEV4dGVuZGVkIEltYWdlIEluZm8gQXR0cmlidXRlcy4KKyAgSnVseSAxOTk3ICAgICAgICAgCisgIEtITCAgICAgICAgICAgICAgIAorCitcKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIFRXRUlfQkFSQ09ERVggICAgICAgICAgICAgICAweDEyMDAKKyNkZWZpbmUgVFdFSV9CQVJDT0RFWSAgICAgICAgICAgICAgIDB4MTIwMQorI2RlZmluZSBUV0VJX0JBUkNPREVURVhUICAgICAgICAgICAgMHgxMjAyCisjZGVmaW5lIFRXRUlfQkFSQ09ERVRZUEUgICAgICAgICAgICAweDEyMDMKKyNkZWZpbmUgVFdFSV9ERVNIQURFVE9QICAgICAgICAgICAgIDB4MTIwNAorI2RlZmluZSBUV0VJX0RFU0hBREVMRUZUICAgICAgICAgICAgMHgxMjA1CisjZGVmaW5lIFRXRUlfREVTSEFERUhFSUdIVCAgICAgICAgICAweDEyMDYKKyNkZWZpbmUgVFdFSV9ERVNIQURFV0lEVEggICAgICAgICAgIDB4MTIwNworI2RlZmluZSBUV0VJX0RFU0hBREVTSVpFICAgICAgICAgICAgMHgxMjA4CisjZGVmaW5lIFRXRUlfU1BFQ0tMRVNSRU1PVkVEICAgICAgICAweDEyMDkKKyNkZWZpbmUgVFdFSV9IT1JaTElORVhDT09SRCAgICAgICAgIDB4MTIwQQorI2RlZmluZSBUV0VJX0hPUlpMSU5FWUNPT1JEICAgICAgICAgMHgxMjBCCisjZGVmaW5lIFRXRUlfSE9SWkxJTkVMRU5HVEggICAgICAgICAweDEyMEMKKyNkZWZpbmUgVFdFSV9IT1JaTElORVRISUNLTkVTUyAgICAgIDB4MTIwRAorI2RlZmluZSBUV0VJX1ZFUlRMSU5FWENPT1JEICAgICAgICAgMHgxMjBFCisjZGVmaW5lIFRXRUlfVkVSVExJTkVZQ09PUkQgICAgICAgICAweDEyMEYKKyNkZWZpbmUgVFdFSV9WRVJUTElORUxFTkdUSCAgICAgICAgIDB4MTIxMAorI2RlZmluZSBUV0VJX1ZFUlRMSU5FVEhJQ0tORVNTICAgICAgMHgxMjExCisjZGVmaW5lIFRXRUlfUEFUQ0hDT0RFICAgICAgICAgICAgICAweDEyMTIKKyNkZWZpbmUgVFdFSV9FTkRPUlNFRFRFWFQgICAgICAgICAgIDB4MTIxMworI2RlZmluZSBUV0VJX0ZPUk1DT05GSURFTkNFICAgICAgICAgMHgxMjE0CisjZGVmaW5lIFRXRUlfRk9STVRFTVBMQVRFTUFUQ0ggICAgICAweDEyMTUKKyNkZWZpbmUgVFdFSV9GT1JNVEVNUExBVEVQQUdFTUFUQ0ggIDB4MTIxNgorI2RlZmluZSBUV0VJX0ZPUk1IT1JaRE9DT0ZGU0VUICAgICAgMHgxMjE3CisjZGVmaW5lIFRXRUlfRk9STVZFUlRET0NPRkZTRVQgICAgICAweDEyMTgKKyNkZWZpbmUgVFdFSV9CQVJDT0RFQ09VTlQgICAgICAgICAgIDB4MTIxOQorI2RlZmluZSBUV0VJX0JBUkNPREVDT05GSURFTkNFICAgICAgMHgxMjFBCisjZGVmaW5lIFRXRUlfQkFSQ09ERVJPVEFUSU9OICAgICAgICAweDEyMUIKKyNkZWZpbmUgVFdFSV9CQVJDT0RFVEVYVExFTkdUSCAgICAgIDB4MTIxQworI2RlZmluZSBUV0VJX0RFU0hBREVDT1VOVCAgICAgICAgICAgMHgxMjFECisjZGVmaW5lIFRXRUlfREVTSEFERUJMQUNLQ09VTlRPTEQgICAweDEyMUUKKyNkZWZpbmUgVFdFSV9ERVNIQURFQkxBQ0tDT1VOVE5FVyAgIDB4MTIxRgorI2RlZmluZSBUV0VJX0RFU0hBREVCTEFDS1JMTUlOICAgICAgMHgxMjIwCisjZGVmaW5lIFRXRUlfREVTSEFERUJMQUNLUkxNQVggICAgICAweDEyMjEKKyNkZWZpbmUgVFdFSV9ERVNIQURFV0hJVEVDT1VOVE9MRCAgIDB4MTIyMgorI2RlZmluZSBUV0VJX0RFU0hBREVXSElURUNPVU5UTkVXICAgMHgxMjIzCisjZGVmaW5lIFRXRUlfREVTSEFERVdISVRFUkxNSU4gICAgICAweDEyMjQKKyNkZWZpbmUgVFdFSV9ERVNIQURFV0hJVEVSTEFWRSAgICAgIDB4MTIyNQorI2RlZmluZSBUV0VJX0RFU0hBREVXSElURVJMTUFYICAgICAgMHgxMjI2CisjZGVmaW5lIFRXRUlfQkxBQ0tTUEVDS0xFU1JFTU9WRUQgICAweDEyMjcKKyNkZWZpbmUgVFdFSV9XSElURVNQRUNLTEVTUkVNT1ZFRCAgIDB4MTIyOAorI2RlZmluZSBUV0VJX0hPUlpMSU5FQ09VTlQgICAgICAgICAgMHgxMjI5CisjZGVmaW5lIFRXRUlfVkVSVExJTkVDT1VOVCAgICAgICAgICAweDEyMkEKKyNkZWZpbmUgVFdFSV9ERVNLRVdTVEFUVVMgICAgICAgICAgIDB4MTIyQgorI2RlZmluZSBUV0VJX1NLRVdPUklHSU5BTEFOR0xFICAgICAgMHgxMjJDCisjZGVmaW5lIFRXRUlfU0tFV0ZJTkFMQU5HTEUgICAgICAgICAweDEyMkQKKyNkZWZpbmUgVFdFSV9TS0VXQ09ORklERU5DRSAgICAgICAgIDB4MTIyRQorI2RlZmluZSBUV0VJX1NLRVdXSU5ET1dYMSAgICAgICAgICAgMHgxMjJGCisjZGVmaW5lIFRXRUlfU0tFV1dJTkRPV1kxICAgICAgICAgICAweDEyMzAKKyNkZWZpbmUgVFdFSV9TS0VXV0lORE9XWDIgICAgICAgICAgIDB4MTIzMQorI2RlZmluZSBUV0VJX1NLRVdXSU5ET1dZMiAgICAgICAgICAgMHgxMjMyCisjZGVmaW5lIFRXRUlfU0tFV1dJTkRPV1gzICAgICAgICAgICAweDEyMzMKKyNkZWZpbmUgVFdFSV9TS0VXV0lORE9XWTMgICAgICAgICAgIDB4MTIzNAorI2RlZmluZSBUV0VJX1NLRVdXSU5ET1dYNCAgICAgICAgICAgMHgxMjM1CisjZGVmaW5lIFRXRUlfU0tFV1dJTkRPV1k0ICAgICAgICAgICAweDEyMzYKKworI2RlZmluZSBUV0VKX05PTkUgICAgICAgICAgICAgICAgICAgMHgwMDAwCisjZGVmaW5lIFRXRUpfTUlEU0VQQVJBVE9SICAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgVFdFSl9QQVRDSDEgICAgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBUV0VKX1BBVENIMiAgICAgICAgICAgICAgICAgMHgwMDAzCisjZGVmaW5lIFRXRUpfUEFUQ0gzICAgICAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgVFdFSl9QQVRDSDQgICAgICAgICAgICAgICAgIDB4MDAwNQorI2RlZmluZSBUV0VKX1BBVENINiAgICAgICAgICAgICAgICAgMHgwMDA2CisjZGVmaW5lIFRXRUpfUEFUQ0hUICAgICAgICAgICAgICAgICAweDAwMDcKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICBSZXR1cm4gQ29kZXMgYW5kIENvbmRpdGlvbiBDb2RlcyBzZWN0aW9uICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogUmV0dXJuIENvZGVzOiBEU01fRW50cnkgYW5kIERTX0VudHJ5IG1heSByZXR1cm4gYW55IG9uZSBvZiB0aGVzZSB2YWx1ZXMuICovCisjZGVmaW5lIFRXUkNfQ1VTVE9NQkFTRSAgICAgMHg4MDAwCisKKyNkZWZpbmUgVFdSQ19TVUNDRVNTICAgICAgICAgIDAKKyNkZWZpbmUgVFdSQ19GQUlMVVJFICAgICAgICAgIDEgLyogQXBwbGljYXRpb24gbWF5IGdldCBUV19TVEFUVVMgZm9yIGluZm8gb24gZmFpbHVyZSAqLworI2RlZmluZSBUV1JDX0NIRUNLU1RBVFVTICAgICAgMiAvKiAidHJpZWQgaGFyZCI7IGdldCBzdGF0dXMgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBUV1JDX0NBTkNFTCAgICAgICAgICAgMworI2RlZmluZSBUV1JDX0RTRVZFTlQgICAgICAgICAgNAorI2RlZmluZSBUV1JDX05PVERTRVZFTlQgICAgICAgNQorI2RlZmluZSBUV1JDX1hGRVJET05FICAgICAgICAgNgorI2RlZmluZSBUV1JDX0VORE9GTElTVCAgICAgICAgNyAvKiBBZnRlciBNU0dfR0VUTkVYVCBpZiBub3RoaW5nIGxlZnQgICAgICAgICAqLworI2RlZmluZSBUV1JDX0lORk9OT1RTVVBQT1JURUQgOAorI2RlZmluZSBUV1JDX0RBVEFOT1RBVkFJTEFCTEUgOQorCisvKiBDb25kaXRpb24gQ29kZXM6IEFwcGxpY2F0aW9uIGdldHMgdGhlc2UgYnkgZG9pbmcgREdfQ09OVFJPTCBEQVRfU1RBVFVTIE1TR19HRVQuICAqLworI2RlZmluZSBUV0NDX0NVU1RPTUJBU0UgICAgICAgICAweDgwMDAKKworI2RlZmluZSBUV0NDX1NVQ0NFU1MgICAgICAgICAgICAwIC8qIEl0IHdvcmtlZCEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFRXQ0NfQlVNTUVSICAgICAgICAgICAgIDEgLyogRmFpbHVyZSBkdWUgdG8gdW5rbm93biBjYXVzZXMgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVFdDQ19MT1dNRU1PUlkgICAgICAgICAgMiAvKiBOb3QgZW5vdWdoIG1lbW9yeSB0byBwZXJmb3JtIG9wZXJhdGlvbiAgICAqLworI2RlZmluZSBUV0NDX05PRFMgICAgICAgICAgICAgICAzIC8qIE5vIERhdGEgU291cmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFRXQ0NfTUFYQ09OTkVDVElPTlMgICAgIDQgLyogRFMgaXMgY29ubmVjdGVkIHRvIG1heCBwb3NzaWJsZSBhcHBsaWNhdGlvbnMgICAgICAqLworI2RlZmluZSBUV0NDX09QRVJBVElPTkVSUk9SICAgICA1IC8qIERTIG9yIERTTSByZXBvcnRlZCBlcnJvciwgYXBwbGljYXRpb24gc2hvdWxkbid0ICAgKi8KKyNkZWZpbmUgVFdDQ19CQURDQVAgICAgICAgICAgICAgNiAvKiBVbmtub3duIGNhcGFiaWxpdHkgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBUV0NDX0JBRFBST1RPQ09MICAgICAgICA5IC8qIFVucmVjb2duaXplZCBNU0cgREcgREFUIGNvbWJpbmF0aW9uICAgICAgICovCisjZGVmaW5lIFRXQ0NfQkFEVkFMVUUgICAgICAgICAgIDEwIC8qIERhdGEgcGFyYW1ldGVyIG91dCBvZiByYW5nZSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVFdDQ19TRVFFUlJPUiAgICAgICAgICAgMTEgLyogREcgREFUIE1TRyBvdXQgb2YgZXhwZWN0ZWQgc2VxdWVuY2UgICAgICAqLworI2RlZmluZSBUV0NDX0JBRERFU1QgICAgICAgICAgICAxMiAvKiBVbmtub3duIGRlc3RpbmF0aW9uIEFwcGxpY2F0aW9uL1NvdXJjZSBpbiBEU01fRW50cnkgKi8KKyNkZWZpbmUgVFdDQ19DQVBVTlNVUFBPUlRFRCAgICAgMTMgLyogQ2FwYWJpbGl0eSBub3Qgc3VwcG9ydGVkIGJ5IHNvdXJjZSAgICAgICAgICAgICovCisjZGVmaW5lIFRXQ0NfQ0FQQkFET1BFUkFUSU9OICAgIDE0IC8qIE9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIGJ5IGNhcGFiaWxpdHkgICAgICAgICAqLworI2RlZmluZSBUV0NDX0NBUFNFUUVSUk9SICAgICAgICAxNSAvKiBDYXBhYmlsaXR5IGhhcyBkZXBlbmRhbmN5IG9uIG90aGVyIGNhcGFiaWxpdHkgKi8KKy8qIEFkZGVkIDEuOCAqLworI2RlZmluZSBUV0NDX0RFTklFRCAgICAgICAgICAgICAxNiAvKiBGaWxlIFN5c3RlbSBvcGVyYXRpb24gaXMgZGVuaWVkIChmaWxlIGlzIHByb3RlY3RlZCkgKi8KKyNkZWZpbmUgVFdDQ19GSUxFRVhJU1RTICAgICAgICAgMTcgLyogT3BlcmF0aW9uIGZhaWxlZCBiZWNhdXNlIGZpbGUgYWxyZWFkeSBleGlzdHMuICovCisjZGVmaW5lIFRXQ0NfRklMRU5PVEZPVU5EICAgICAgIDE4IC8qIEZpbGUgbm90IGZvdW5kICovCisjZGVmaW5lIFRXQ0NfTk9URU1QVFkgICAgICAgICAgIDE5IC8qIE9wZXJhdGlvbiBmYWlsZWQgYmVjYXVzZSBkaXJlY3RvcnkgaXMgbm90IGVtcHR5ICovCisjZGVmaW5lIFRXQ0NfUEFQRVJKQU0gICAgICAgICAgIDIwICAvKiBUaGUgZmVlZGVyIGlzIGphbW1lZCAqLworI2RlZmluZSBUV0NDX1BBUEVSRE9VQkxFRkVFRCAgICAyMSAgLyogVGhlIGZlZWRlciBkZXRlY3RlZCBtdWx0aXBsZSBwYWdlcyAqLworI2RlZmluZSBUV0NDX0ZJTEVXUklURUVSUk9SICAgICAyMiAgLyogRXJyb3Igd3JpdGluZyB0aGUgZmlsZSAobWVhbnQgZm9yIHRoaW5ncyBsaWtlIGRpc2sgZnVsbCBjb25kaXRpb25zKSAqLworI2RlZmluZSBUV0NDX0NIRUNLREVWSUNFT05MSU5FICAyMyAgLyogVGhlIGRldmljZSB3ZW50IG9mZmxpbmUgcHJpb3IgdG8gb3IgZHVyaW5nIHRoaXMgb3BlcmF0aW9uICovCisKKworLyogYml0IHBhdHRlcm5zOiBmb3IgcXVlcnkgdGhlIG9wZXJhdGlvbiB0aGF0IGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGRhdGEgc291cmNlIG9uIGEgY2FwYWJpbGl0eSAqLworLyogQXBwbGljYXRpb24gZ2V0cyB0aGVzZSB0aHJvdWdoIERHX0NPTlRST0wvREFUX0NBUEFCSUxJVFkvTVNHX1FVRVJZU1VQUE9SVCAqLworLyogQWRkZWQgMS42ICovCisjZGVmaW5lIFRXUUNfR0VUICAgICAgICAgICAweDAwMDEgCisjZGVmaW5lIFRXUUNfU0VUICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgVFdRQ19HRVRERUZBVUxUICAgIDB4MDAwNAorI2RlZmluZSBUV1FDX0dFVENVUlJFTlQgICAgMHgwMDA4CisjZGVmaW5lIFRXUUNfUkVTRVQgICAgICAgICAweDAwMTAKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRW50cnkgUG9pbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRnVuY3Rpb246IERTTV9FbnRyeSwgdGhlIG9ubHkgZW50cnkgcG9pbnQgaW50byB0aGUgRGF0YSBTb3VyY2UgTWFuYWdlci4KKyAqCisgKiBQYXJhbWV0ZXJzOgorICogIHBPcmlnaW4gSWRlbnRpZmllcyB0aGUgc291cmNlIG1vZHVsZSBvZiB0aGUgbWVzc2FnZS4gVGhpcyBjb3VsZAorICogICAgICAgICAgaWRlbnRpZnkgYW4gQXBwbGljYXRpb24sIGEgU291cmNlLCBvciB0aGUgU291cmNlIE1hbmFnZXIuCisgKgorICogIHBEZXN0ICAgSWRlbnRpZmllcyB0aGUgZGVzdGluYXRpb24gbW9kdWxlIGZvciB0aGUgbWVzc2FnZS4KKyAqICAgICAgICAgIFRoaXMgY291bGQgaWRlbnRpZnkgYW4gYXBwbGljYXRpb24gb3IgYSBkYXRhIHNvdXJjZS4KKyAqICAgICAgICAgIElmIHRoaXMgaXMgTlVMTCwgdGhlIG1lc3NhZ2UgZ29lcyB0byB0aGUgU291cmNlIE1hbmFnZXIuCisgKgorICogIERHICAgICAgVGhlIERhdGEgR3JvdXAuIAorICogICAgICAgICAgRXhhbXBsZTogREdfSU1BR0UuCisgKgorICogIERBVCAgICAgVGhlIERhdGEgQXR0cmlidXRlIFR5cGUuCisgKiAgICAgICAgICBFeGFtcGxlOiBEQVRfSU1BR0VNRU1YRkVSLgorICogICAgCisgKiAgTVNHICAgICBUaGUgbWVzc2FnZS4gIE1lc3NhZ2VzIGFyZSBpbnRlcnByZXRlZCBieSB0aGUgZGVzdGluYXRpb24gbW9kdWxlCisgKiAgICAgICAgICB3aXRoIHJlc3BlY3QgdG8gdGhlIERhdGEgR3JvdXAgYW5kIHRoZSBEYXRhIEF0dHJpYnV0ZSBUeXBlLiAgCisgKiAgICAgICAgICBFeGFtcGxlOiBNU0dfR0VULgorICoKKyAqICBwRGF0YSAgIEEgcG9pbnRlciB0byB0aGUgZGF0YSBzdHJ1Y3R1cmUgb3IgdmFyaWFibGUgaWRlbnRpZmllZCAKKyAqICAgICAgICAgIGJ5IHRoZSBEYXRhIEF0dHJpYnV0ZSBUeXBlLgorICogICAgICAgICAgRXhhbXBsZTogKFRXX01FTVJFRikmSW1hZ2VNZW1YZmVyCisgKiAgICAgICAgICAgICAgICAgICB3aGVyZSBJbWFnZU1lbVhmZXIgaXMgYSBUV19JTUFHRU1FTVhGRVIgc3RydWN0dXJlLgorICogICAgICAgICAgICAgICAgICAgIAorICogUmV0dXJuczoKKyAqICBSZXR1cm5Db2RlCisgKiAgICAgICAgIEV4YW1wbGU6IFRXUkNfU1VDQ0VTUy4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIERvbid0IG1hbmdsZSB0aGUgbmFtZSAiRFNNX0VudHJ5IiBpZiB3ZSdyZSBjb21waWxpbmcgaW4gQysrISAqLworI2lmZGVmICBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgIC8qIF9fY3BsdXNwbHVzICovCisKKyNpZmRlZiAgX01TV0lOXworVFdfVUlOVDE2IEZBUiBQQVNDQUwgRFNNX0VudHJ5KCBwVFdfSURFTlRJVFkgcE9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFRXX0lERU5USVRZIHBEZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUV19VSU5UMzIgICAgREcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRXX1VJTlQxNiAgICBEQVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRXX1VJTlQxNiAgICBNU0csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRXX01FTVJFRiAgICBwRGF0YSk7CisKK3R5cGVkZWYgVFdfVUlOVDE2IChGQVIgUEFTQ0FMICpEU01FTlRSWVBST0MpKHBUV19JREVOVElUWSwgcFRXX0lERU5USVRZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFdfVUlOVDMyLCAgICBUV19VSU5UMTYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUV19VSU5UMTYsICAgIFRXX01FTVJFRik7CisjZWxzZSAgIC8qIF9NU1dJTl8gKi8KKworLypGQVIgUEFTQ0FMIFRXX1VJTlQxNiBEU01fRW50cnkoIHBUV19JREVOVElUWSBwT3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwVFdfSURFTlRJVFkgcERlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRXX1VJTlQzMiAgICBERywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFdfVUlOVDE2ICAgIERBVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFdfVUlOVDE2ICAgIE1TRywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFdfTUVNUkVGICAgIHBEYXRhKTsqLworCit0eXBlZGVmIFRXX1VJTlQxNiAoKkRTTUVOVFJZUFJPQykocFRXX0lERU5USVRZLCBwVFdfSURFTlRJVFksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFdfVUlOVDMyLCAgICBUV19VSU5UMTYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFdfVUlOVDE2LCAgICBUV19NRU1SRUYpOworI2VuZGlmICAvKiBfTVNXSU5fICovCisKKyNpZmRlZiAgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAgLyogY3BsdXNwbHVzICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZ1bmN0aW9uOiBEU19FbnRyeSwgdGhlIGVudHJ5IHBvaW50IHByb3ZpZGVkIGJ5IGEgRGF0YSBTb3VyY2UuCisgKgorICogUGFyYW1ldGVyczoKKyAqICBwT3JpZ2luIElkZW50aWZpZXMgdGhlIHNvdXJjZSBtb2R1bGUgb2YgdGhlIG1lc3NhZ2UuIFRoaXMgY291bGQKKyAqICAgICAgICAgIGlkZW50aWZ5IGFuIGFwcGxpY2F0aW9uIG9yIHRoZSBEYXRhIFNvdXJjZSBNYW5hZ2VyLgorICoKKyAqICBERyAgICAgIFRoZSBEYXRhIEdyb3VwLiAKKyAqICAgICAgICAgIEV4YW1wbGU6IERHX0lNQUdFLgorICogICAgICAgICAgIAorICogIERBVCAgICAgVGhlIERhdGEgQXR0cmlidXRlIFR5cGUuCisgKiAgICAgICAgICBFeGFtcGxlOiBEQVRfSU1BR0VNRU1YRkVSLgorICogICAgCisgKiAgTVNHICAgICBUaGUgbWVzc2FnZS4gIE1lc3NhZ2VzIGFyZSBpbnRlcnByZXRlZCBieSB0aGUgZGF0YSBzb3VyY2UKKyAqICAgICAgICAgIHdpdGggcmVzcGVjdCB0byB0aGUgRGF0YSBHcm91cCBhbmQgdGhlIERhdGEgQXR0cmlidXRlIFR5cGUuCisgKiAgICAgICAgICBFeGFtcGxlOiBNU0dfR0VULgorICoKKyAqICBwRGF0YSAgIEEgcG9pbnRlciB0byB0aGUgZGF0YSBzdHJ1Y3R1cmUgb3IgdmFyaWFibGUgaWRlbnRpZmllZCAKKyAqICAgICAgICAgIGJ5IHRoZSBEYXRhIEF0dHJpYnV0ZSBUeXBlLgorICogICAgICAgICAgRXhhbXBsZTogKFRXX01FTVJFRikmSW1hZ2VNZW1YZmVyCisgKiAgICAgICAgICAgICAgICAgICB3aGVyZSBJbWFnZU1lbVhmZXIgaXMgYSBUV19JTUFHRU1FTVhGRVIgc3RydWN0dXJlLgorICogICAgICAgICAgICAgICAgICAgIAorICogUmV0dXJuczoKKyAqICBSZXR1cm5Db2RlCisgKiAgICAgICAgICBFeGFtcGxlOiBUV1JDX1NVQ0NFU1MuCisgKgorICogTm90ZToKKyAqICBUaGUgRFNQUk9DIHR5cGUgaXMgb25seSB1c2VkIGJ5IGFuIGFwcGxpY2F0aW9uIHdoZW4gaXQgY2FsbHMKKyAqICBhIERhdGEgU291cmNlIGRpcmVjdGx5LCBieXBhc3NpbmcgdGhlIERhdGEgU291cmNlIE1hbmFnZXIuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRG9uJ3QgbWFuZ2xlIHRoZSBuYW1lICJEU19FbnRyeSIgaWYgd2UncmUgY29tcGlsaW5nIGluIEMrKyEgKi8KKyNpZmRlZiAgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmICAvKiBfX2NwbHVzcGx1cyAqLworI2lmZGVmICBfTVNXSU5fCisgICNpZmRlZiBfV0lOMzIKKyAgICAgX19kZWNsc3BlYyhkbGxleHBvcnQpIFRXX1VJTlQxNiBGQVIgUEFTQ0FMIERTX0VudHJ5IChwVFdfSURFTlRJVFkgcE9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUV19VSU5UMzIgICAgREcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRXX1VJTlQxNiAgICBEQVQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRXX1VJTlQxNiAgICBNU0csIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRXX01FTVJFRiAgICBwRGF0YSk7CisgICNlbHNlICAgLyogX1dJTjMyICovCisgICAgIFRXX1VJTlQxNiBGQVIgUEFTQ0FMIERTX0VudHJ5IChwVFdfSURFTlRJVFkgcE9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRXX1VJTlQzMiAgICBERywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUV19VSU5UMTYgICAgREFULCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRXX1VJTlQxNiAgICBNU0csIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFdfTUVNUkVGICAgIHBEYXRhKTsKKyAgI2VuZGlmICAvKiBfV0lOMzIgKi8KKyAgCisgIHR5cGVkZWYgVFdfVUlOVDE2IChGQVIgUEFTQ0FMICpEU0VOVFJZUFJPQykgKHBUV19JREVOVElUWSBwT3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUV19VSU5UMzIgICAgREcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUV19VSU5UMTYgICAgREFULCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFdfVUlOVDE2ICAgIE1TRywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRXX01FTVJFRiAgICBwRGF0YSk7CisjZWxzZSAgIC8qIF9NU1dJTl8gKi8KKy8qRkFSIFBBU0NBTCBUV19VSU5UMTYgRFNfRW50cnkoIHBUV19JREVOVElUWSBwT3JpZ2luLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUV19VSU5UMzIgICAgREcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRXX1VJTlQxNiAgICBEQVQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRXX1VJTlQxNiAgICBNU0csIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRXX01FTVJFRiAgICBwRGF0YSk7Ki8KKwordHlwZWRlZiBUV19VSU5UMTYgKCpEU0VOVFJZUFJPQykocFRXX0lERU5USVRZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRXX1VJTlQzMiwgICAgVFdfVUlOVDE2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRXX1VJTlQxNiwgICAgVFdfTUVNUkVGKTsKKyNlbmRpZiAgLyogX01TV0lOXyAqLworI2lmZGVmICBfX2NwbHVzcGx1cworfQorI2VuZGlmICAvKiBjcGx1c3BsdXMgKi8KKworLyogIFNESCAtIDAyLzA4Lzk1IC0gVFdVTksgKi8KKy8qICBGb3JjZSAzMi1iaXQgdHdhaW4gdG8gdXNlIHNhbWUgcGFja2luZyBvZiB0d2FpbiBzdHJ1Y3R1cmVzIGFzIGV4aXN0aW5nICovCisvKiAgMTYtYml0IHR3YWluLiAgVGhpcyBhbGxvd3MgMTYvMzItYml0IHRodW5raW5nLiAqLworI2lmZGVmICBXSU4zMgorICAgICNpZmRlZiBfX0JPUkxBTkRDX18gLy8oTWVudG9yIEp1bmUgMTMsIDE5OTYpIGlmIHdlJ3JlIHVzaW5nIGEgQm9ybGFuZCBjb21waWxlcgorICAgICAgICAjcHJhZ21hIG9wdGlvbiAtYS4gIC8vKE1lbnRvciBPY3RvYmVyIDMwLCAxOTk2KSBzd2l0Y2ggYmFjayB0byBvcmlnaW5hbCBhbGlnbm1lbnQKKyAgICAjZWxzZSAgIC8vKE1lbnRvciBKdW5lIDEzLCAxOTk2KSBpZiBOT1QgdXNpbmcgYSBCb3JsYW5kIGNvbXBpbGVyCisgICAgICAgICNwcmFnbWEgcGFjayAocG9wLCBiZWZvcmVfdHdhaW4pCisgICAgI2VuZGlmICAvLyhNZW50b3IgSnVuZSAxMywgMTk5NikKKyNlbHNlICAgLyogV0lOMzIgKi8KKyNlbmRpZiAgLyogV0lOMzIgKi8KKworI2VuZGlmICAvKiBUV0FJTiAqLwpkaWZmIC0tZ2l0IGEvZGxscy90d2Fpbi90d2FpbjMyX21haW4uYyBiL2RsbHMvdHdhaW4vdHdhaW4zMl9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUxYzAzYQotLS0gL2Rldi9udWxsCisrKyBiL2RsbHMvdHdhaW4vdHdhaW4zMl9tYWluLmMKQEAgLTAsMCArMSw2NDEgQEAKKy8qCisgKiBUV0FJTjMyIGZ1bmN0aW9ucworICogCisgKiBDb3B5cmlnaHQgMjAwMCBTaGkgUXVhbiBIZSA8c2hpcXVhbkBjeWJlcmR1ZGUuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlICJ3aW5kZWYuaCIKKyNpbmNsdWRlICJ3aW5iYXNlLmgiCisjaW5jbHVkZSAidHdhaW4uaCIKKyNpbmNsdWRlICJ0d2Fpbl9pLmgiCisjaW5jbHVkZSAid2luZS9kZWJ1Zy5oIgorCitXSU5FX0RFRkFVTFRfREVCVUdfQ0hBTk5FTCh0d2Fpbik7CisKK0JPT0wgV0lOQVBJCitUV0FJTl9MaWJNYWluIChISU5TVEFOQ0UgaGluc3RETEwsIERXT1JEIGZkd1JlYXNvbiwgTFBWT0lEIGxwdlJlc2VydmVkKQoreworICAgIFRSQUNFKCIleCwlbHgsJXBcbiIsIGhpbnN0RExMLCBmZHdSZWFzb24sIGxwdlJlc2VydmVkKTsKKworICAgIHN3aXRjaCAoZmR3UmVhc29uKQorICAgIHsKKyAgICAgICAgY2FzZSBETExfUFJPQ0VTU19BVFRBQ0g6CisgICAgICAgICAgICBEU01fY3VycmVudFN0YXRlID0gMjsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRExMX1RIUkVBRF9BVFRBQ0g6CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIERMTF9USFJFQURfREVUQUNIOgorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBETExfUFJPQ0VTU19ERVRBQ0g6CisgICAgICAgICAgICBEU01fY3VycmVudFN0YXRlID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBUUlVFOworfQorCitUV19VSU5UMTYgVFdBSU5fU291cmNlTWFuYWdlckhhbmRsZXIgKAorICAgICAgICAgICBwVFdfSURFTlRJVFkgcE9yaWdpbiwKKyAgICAgICAgICAgVFdfVUlOVDE2ICAgREFULAorICAgICAgICAgICBUV19VSU5UMTYgICBNU0csCisgICAgICAgICAgIFRXX01FTVJFRiAgIHBEYXRhKQoreworICAgIFRXX1VJTlQxNiB0d1JDID0gVFdSQ19TVUNDRVNTOworCisgICAgc3dpdGNoIChEQVQpCisgICAgeworICAgICAgICBjYXNlIERBVF9JREVOVElUWToKKyAgICAgICAgICAgIHN3aXRjaCAoTVNHKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgTVNHX0NMT1NFRFM6CisgICAgICAgICAgICAgICAgICAgIHR3UkMgPSBUV0FJTl9DbG9zZURTIChwT3JpZ2luLCBwRGF0YSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBNU0dfR0VUREVGQVVMVDoKKyAgICAgICAgICAgICAgICAgICAgdHdSQyA9IFRXQUlOX0lkZW50aXR5R2V0RGVmYXVsdCAocE9yaWdpbiwgcERhdGEpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgTVNHX0dFVEZJUlNUOgorICAgICAgICAgICAgICAgICAgICB0d1JDID0gVFdBSU5fSWRlbnRpdHlHZXRGaXJzdCAocE9yaWdpbiwgcERhdGEpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgTVNHX0dFVE5FWFQ6CisgICAgICAgICAgICAgICAgICAgIHR3UkMgPSBUV0FJTl9JZGVudGl0eUdldE5leHQgKHBPcmlnaW4sIHBEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIE1TR19PUEVORFM6CisgICAgICAgICAgICAgICAgICAgIHR3UkMgPSBUV0FJTl9PcGVuRFMgKHBPcmlnaW4sIHBEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIE1TR19VU0VSU0VMRUNUOgorICAgICAgICAgICAgICAgICAgICB0d1JDID0gVFdBSU5fVXNlclNlbGVjdCAocE9yaWdpbiwgcERhdGEpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIC8qIFVucmVjb2duaXplZCBvcGVyYXRpb24gdHJpcGxldCAqLworICAgICAgICAgICAgICAgICAgICB0d1JDID0gVFdSQ19GQUlMVVJFOworICAgICAgICAgICAgICAgICAgICBEU01fdHdDQyA9IFRXQ0NfQkFEUFJPVE9DT0w7CisgICAgICAgICAgICAgICAgICAgIFdBUk4oInVucmVjb2duaXplZCBvcGVyYXRpb24gdHJpcGxldFxuIik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBEQVRfUEFSRU5UOgorICAgICAgICAgICAgc3dpdGNoIChNU0cpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBNU0dfQ0xPU0VEU006CisgICAgICAgICAgICAgICAgICAgIHR3UkMgPSBUV0FJTl9DbG9zZURTTSAocE9yaWdpbiwgcERhdGEpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgTVNHX09QRU5EU006CisgICAgICAgICAgICAgICAgICAgIHR3UkMgPSBUV0FJTl9PcGVuRFNNIChwT3JpZ2luLCBwRGF0YSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgLyogVW5yZWNvZ25pemVkIG9wZXJhdGlvbiB0cmlwbGV0ICovCisgICAgICAgICAgICAgICAgICAgIHR3UkMgPSBUV1JDX0ZBSUxVUkU7CisgICAgICAgICAgICAgICAgICAgIERTTV90d0NDID0gVFdDQ19CQURQUk9UT0NPTDsKKyAgICAgICAgICAgICAgICAgICAgV0FSTigidW5yZWNvZ25pemVkIG9wZXJhdGlvbiB0cmlwbGV0XG4iKTsKKyAgICAgICAgICAgIH0gCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIERBVF9TVEFUVVM6CisgICAgICAgICAgICBpZiAoTVNHID09IE1TR19HRVQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdHdSQyA9IFRXQUlOX0dldERTTVN0YXR1cyAocE9yaWdpbiwgcERhdGEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHR3UkMgPSBUV1JDX0ZBSUxVUkU7CisgICAgICAgICAgICAgICAgRFNNX3R3Q0MgPSBUV0NDX0JBRFBST1RPQ09MOworICAgICAgICAgICAgICAgIFdBUk4oInVucmVjb2duaXplZCBvcGVyYXRpb24gdHJpcGxldFxuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgdHdSQyA9IFRXUkNfRkFJTFVSRTsKKyAgICAgICAgICAgIERTTV90d0NDID0gVFdDQ19CQURQUk9UT0NPTDsKKyAgICAgICAgICAgIFdBUk4oInVucmVjb2duaXplZCBvcGVyYXRpb24gdHJpcGxldFxuIik7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gdHdSQzsKK30KKworVFdfVUlOVDE2IFRXQUlOX1NvdXJjZUNvbnRyb2xIYW5kbGVyICgKKyAgICAgICAgICAgcFRXX0lERU5USVRZIHBPcmlnaW4sCisgICAgICAgICAgIHBUV19JREVOVElUWSBwRGVzdCwKKyAgICAgICAgICAgVFdfVUlOVDE2ICAgIERBVCwKKyAgICAgICAgICAgVFdfVUlOVDE2ICAgIE1TRywKKyAgICAgICAgICAgVFdfTUVNUkVGICAgIHBEYXRhKQoreworICAgIFRXX1VJTlQxNiB0d1JDID0gVFdSQ19TVUNDRVNTOworCisgICAgc3dpdGNoIChEQVQpCisgICAgeworICAgICAgICBjYXNlIERBVF9DQVBBQklMSVRZOgorICAgICAgICAgICAgc3dpdGNoIChNU0cpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBNU0dfR0VUOgorICAgICAgICAgICAgICAgICAgICB0d1JDID0gVFdBSU5fQ2FwYWJpbGl0eUdldCAocE9yaWdpbiwgcERlc3QsIHBEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBNU0dfR0VUQ1VSUkVOVDoKKyAgICAgICAgICAgICAgICAgICAgdHdSQyA9IFRXQUlOX0NhcGFiaWxpdHlHZXRDdXJyZW50IChwT3JpZ2luLCBwRGVzdCwgcERhdGEpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIE1TR19HRVRERUZBVUxUOgorICAgICAgICAgICAgICAgICAgICB0d1JDID0gVFdBSU5fQ2FwYWJpbGl0eUdldERlZmF1bHQgKHBPcmlnaW4sIHBEZXN0LCBwRGF0YSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgTVNHX1FVRVJZU1VQUE9SVDoKKyAgICAgICAgICAgICAgICAgICAgdHdSQyA9IFRXQUlOX0NhcGFiaWxpdHlRdWVyeVN1cHBvcnQgKHBPcmlnaW4sIHBEZXN0LCBwRGF0YSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgTVNHX1JFU0VUOgorICAgICAgICAgICAgICAgICAgICB0d1JDID0gVFdBSU5fQ2FwYWJpbGl0eVJlc2V0IChwT3JpZ2luLCBwRGVzdCwgcERhdGEpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIE1TR19TRVQ6CisgICAgICAgICAgICAgICAgICAgIHR3UkMgPSBUV0FJTl9DYXBhYmlsaXR5U2V0IChwT3JpZ2luLCBwRGVzdCwgcERhdGEpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICB0d1JDID0gVFdSQ19GQUlMVVJFOworICAgICAgICAgICAgICAgICAgICBXQVJOKCJ1bnJlY29nbml6ZWQgb3BlcnRpb24gdHJpcGxldFxuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIERBVF9DVVNUT01EU0RBVEE6CisgICAgICAgICAgICBzd2l0Y2ggKE1TRykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIE1TR19HRVQ6CisgICAgICAgICAgICAgICAgICAgIHR3UkMgPSBUV0FJTl9DdXN0b21EU0RhdGFHZXQgKHBPcmlnaW4sIHBEZXN0LCBwRGF0YSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgTVNHX1NFVDoKKyAgICAgICAgICAgICAgICAgICAgdHdSQyA9IFRXQUlOX0N1c3RvbURTRGF0YVNldCAocE9yaWdpbiwgcERlc3QsIHBEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIERBVF9GSUxFU1lTVEVNOgorICAgICAgICAgICAgc3dpdGNoIChNU0cpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLypjYXNlIE1TR19BVVRPTUFUSUNDQVBUVVJFRElSRUNUT1JZOgorICAgICAgICAgICAgICAgICAgICB0d1JDID0gVFdBSU5fQXV0b21hdGljQ2FwdHVyZURpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwT3JpZ2luLCBwRGVzdCwgcERhdGEpOworICAgICAgICAgICAgICAgICAgICBicmVhazsqLworICAgICAgICAgICAgICAgIGNhc2UgTVNHX0NIQU5HRURJUkVDVE9SWToKKyAgICAgICAgICAgICAgICAgICAgdHdSQyA9IFRXQUlOX0NoYW5nZURpcmVjdG9yeSAocE9yaWdpbiwgcERlc3QsIHBEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgLypjYXNlIE1TR19DT1BZOgorICAgICAgICAgICAgICAgICAgICB0d1JDID0gVFdBSU5fRmlsZVN5c3RlbUNvcHkgKHBPcmlnaW4sIHBEZXN0LCBwRGF0YSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOyovCisgICAgICAgICAgICAgICAgY2FzZSBNU0dfQ1JFQVRFRElSRUNUT1JZOgorICAgICAgICAgICAgICAgICAgICB0d1JDID0gVFdBSU5fQ3JlYXRlRGlyZWN0b3J5IChwT3JpZ2luLCBwRGVzdCwgcERhdGEpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIE1TR19ERUxFVEU6CisgICAgICAgICAgICAgICAgICAgIHR3UkMgPSBUV0FJTl9GaWxlU3lzdGVtRGVsZXRlIChwT3JpZ2luLCBwRGVzdCwgcERhdGEpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIE1TR19GT1JNQVRNRURJQToKKyAgICAgICAgICAgICAgICAgICAgdHdSQyA9IFRXQUlOX0Zvcm1hdE1lZGlhIChwT3JpZ2luLCBwRGVzdCwgcERhdGEpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIE1TR19HRVRDTE9TRToKKyAgICAgICAgICAgICAgICAgICAgdHdSQyA9IFRXQUlOX0ZpbGVTeXN0ZW1HZXRDbG9zZSAocE9yaWdpbiwgcERlc3QsIHBEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBNU0dfR0VURklSU1RGSUxFOgorICAgICAgICAgICAgICAgICAgICB0d1JDID0gVFdBSU5fRmlsZVN5c3RlbUdldEZpcnN0RmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwT3JpZ2luLCBwRGVzdCwgcERhdGEpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIE1TR19HRVRJTkZPOgorICAgICAgICAgICAgICAgICAgICB0d1JDID0gVFdBSU5fRmlsZVN5c3RlbUdldEluZm8gKHBPcmlnaW4sIHBEZXN0LCBwRGF0YSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgTVNHX0dFVE5FWFRGSUxFOgorICAgICAgICAgICAgICAgICAgICB0d1JDID0gVFdBSU5fRmlsZVN5c3RlbUdldE5leHRGaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBPcmlnaW4sIHBEZXN0LCBwRGF0YSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgTVNHX1JFTkFNRToKKyAgICAgICAgICAgICAgICAgICAgdHdSQyA9IFRXQUlOX0ZpbGVTeXN0ZW1SZW5hbWUgKHBPcmlnaW4sIHBEZXN0LCBwRGF0YSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHR3UkMgPSBUV1JDX0ZBSUxVUkU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBEQVRfRVZFTlQ6CisgICAgICAgICAgICBpZiAoTVNHID09IE1TR19QUk9DRVNTRVZFTlQpCisgICAgICAgICAgICAgICAgdHdSQyA9IFRXQUlOX1Byb2Nlc3NFdmVudCAocE9yaWdpbiwgcERlc3QsIHBEYXRhKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0d1JDID0gVFdSQ19GQUlMVVJFOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBEQVRfUEFTU1RIUlU6CisgICAgICAgICAgICBpZiAoTVNHID09IE1TR19QQVNTVEhSVSkKKyAgICAgICAgICAgICAgICB0d1JDID0gVFdBSU5fUGFzc1Rocm91Z2ggKHBPcmlnaW4sIHBEZXN0LCBwRGF0YSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdHdSQyA9IFRXUkNfRkFJTFVSRTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgREFUX1BFTkRJTkdYRkVSUzoKKyAgICAgICAgICAgIHN3aXRjaCAoTVNHKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgTVNHX0VORFhGRVI6CisgICAgICAgICAgICAgICAgICAgIHR3UkMgPSBUV0FJTl9QZW5kaW5nWGZlcnNFbmRYZmVyIChwT3JpZ2luLCBwRGVzdCwgcERhdGEpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIE1TR19HRVQ6CisgICAgICAgICAgICAgICAgICAgIHR3UkMgPSBUV0FJTl9QZW5kaW5nWGZlcnNHZXQgKHBPcmlnaW4sIHBEZXN0LCBwRGF0YSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgTVNHX1JFU0VUOgorICAgICAgICAgICAgICAgICAgICB0d1JDID0gVFdBSU5fUGVuZGluZ1hmZXJzUmVzZXQgKHBPcmlnaW4sIHBEZXN0LCBwRGF0YSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIC8qY2FzZSBNU0dfU1RPUEZFRURFUjoKKyAgICAgICAgICAgICAgICAgICAgdHdSQyA9IFRXQUlOX1BlbmRpbmdYZmVyc1N0b3BGZWVkZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocE9yaWdpbiwgcERlc3QsIHBEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ki8KKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICB0d1JDID0gVFdSQ19GQUlMVVJFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBEQVRfU0VUVVBGSUxFWEZFUjoKKyAgICAgICAgICAgIHN3aXRjaCAoTVNHKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgTVNHX0dFVDoKKyAgICAgICAgICAgICAgICAgICAgdHdSQyA9IFRXQUlOX1NldHVwRmlsZVhmZXJHZXQgKHBPcmlnaW4sIHBEZXN0LCBwRGF0YSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgTVNHX0dFVERFRkFVTFQ6CisgICAgICAgICAgICAgICAgICAgIHR3UkMgPSBUV0FJTl9TZXR1cEZpbGVYZmVyR2V0RGVmYXVsdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwT3JpZ2luLCBwRGVzdCwgcERhdGEpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIE1TR19SRVNFVDoKKyAgICAgICAgICAgICAgICAgICAgdHdSQyA9IFRXQUlOX1NldHVwRmlsZVhmZXJSZXNldCAocE9yaWdpbiwgcERlc3QsIHBEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBNU0dfU0VUOgorICAgICAgICAgICAgICAgICAgICB0d1JDID0gVFdBSU5fU2V0dXBGaWxlWGZlclNldCAocE9yaWdpbiwgcERlc3QsIHBEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgdHdSQyA9IFRXUkNfRkFJTFVSRTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvKmNhc2UgREFUX1NFVFVQRklMRVhGRVIyOgorICAgICAgICAgICAgc3dpdGNoIChNU0cpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBNU0dfR0VUOgorICAgICAgICAgICAgICAgICAgICB0d1JDID0gVFdBSU5fU2V0dXBGaWxlWGZlcjJHZXQgKHBPcmlnaW4sIHBEZXN0LCBwRGF0YSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgTVNHX0dFVERFRkFVTFQ6CisgICAgICAgICAgICAgICAgICAgIHR3UkMgPSBUV0FJTl9TZXR1cEZpbGVYZmVyMkdldERlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocE9yaWdpbiwgcERlc3QsIHBEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBNU0dfUkVTRVQ6CisgICAgICAgICAgICAgICAgICAgIHR3UkMgPSBUV0FJTl9TZXR1cEZpbGVYZmVyMlJlc2V0IChwT3JpZ2luLCBwRGVzdCwgcERhdGEpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIE1TR19TRVQ6CisgICAgICAgICAgICAgICAgICAgIHR3UkMgPSBUV0FJTl9TZXR1cEZpbGVYZmVyMlNldCAocE9yaWdpbiwgcERlc3QsIHBEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsqLworICAgICAgICBjYXNlIERBVF9TRVRVUE1FTVhGRVI6CisgICAgICAgICAgICBpZiAoTVNHID09IE1TR19HRVQpCisgICAgICAgICAgICAgICAgdHdSQyA9IFRXQUlOX1NldHVwTWVtWGZlckdldCAocE9yaWdpbiwgcERlc3QsIHBEYXRhKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0d1JDID0gVFdSQ19GQUlMVVJFOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBEQVRfU1RBVFVTOgorICAgICAgICAgICAgaWYgKE1TRyA9PSBNU0dfR0VUKQorICAgICAgICAgICAgICAgIHR3UkMgPSBUV0FJTl9HZXREU1N0YXR1cyAocE9yaWdpbiwgcERlc3QsIHBEYXRhKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0d1JDID0gVFdSQ19GQUlMVVJFOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBEQVRfVVNFUklOVEVSRkFDRToKKyAgICAgICAgICAgIHN3aXRjaCAoTVNHKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgTVNHX0RJU0FCTEVEUzoKKyAgICAgICAgICAgICAgICAgICAgdHdSQyA9IFRXQUlOX0Rpc2FibGVEU1VzZXJJbnRlcmZhY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocE9yaWdpbiwgcERlc3QsIHBEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBNU0dfRU5BQkxFRFM6CisgICAgICAgICAgICAgICAgICAgIHR3UkMgPSBUV0FJTl9FbmFibGVEU1VzZXJJbnRlcmZhY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocE9yaWdpbiwgcERlc3QsIHBEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBNU0dfRU5BQkxFRFNVSU9OTFk6CisgICAgICAgICAgICAgICAgICAgIHR3UkMgPSBUV0FJTl9FbmFibGVEU1VJT25seSAocE9yaWdpbiwgcERlc3QsIHBEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgdHdSQyA9IFRXUkNfRkFJTFVSRTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIERBVF9YRkVSR1JPVVA6CisgICAgICAgICAgICBzd2l0Y2ggKE1TRykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIE1TR19HRVQ6CisgICAgICAgICAgICAgICAgICAgIHR3UkMgPSBUV0FJTl9YZmVyR3JvdXBHZXQgKHBPcmlnaW4sIHBEZXN0LCBwRGF0YSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgTVNHX1NFVDoKKyAgICAgICAgICAgICAgICAgICAgdHdSQyA9IFRXQUlOX1hmZXJHcm91cFNldCAocE9yaWdpbiwgcERlc3QsIHBEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgdHdSQyA9IFRXUkNfRkFJTFVSRTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgdHdSQyA9IFRXUkNfRkFJTFVSRTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiB0d1JDOworfQorCitUV19VSU5UMTYgVFdBSU5fQ29udHJvbEdyb3VwSGFuZGxlciAoCisgICAgICAgICAgIHBUV19JREVOVElUWSBwT3JpZ2luLAorICAgICAgICAgICBwVFdfSURFTlRJVFkgcERlc3QsCisgICAgICAgICAgIFRXX1VJTlQxNiAgICBEQVQsCisgICAgICAgICAgIFRXX1VJTlQxNiAgICBNU0csCisgICAgICAgICAgIFRXX01FTVJFRiAgICBwRGF0YSkKK3sKKyAgICBUV19VSU5UMTYgdHdSQyA9IFRXUkNfU1VDQ0VTUzsKKworICAgIGlmIChwRGVzdCkKKyAgICB7CisgICAgICAgIC8qIFRoaXMgb3BlcmF0aW9uJ3MgZGVzdGluYXRpb24gaXMgYSBzb3VyY2UgKi8KKyAgICAgICAgdHdSQyA9IFRXQUlOX1NvdXJjZUNvbnRyb2xIYW5kbGVyIChwT3JpZ2luLCBwRGVzdCwgREFULCBNU0csIHBEYXRhKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogVGhpcyBvcGVyYXRpb24ncyBkZXN0aW5hdGlvbiBpcyB0aGUgU291cmNlIE1hbmFnZXIgKi8KKyAgICAgICAgdHdSQyA9IFRXQUlOX1NvdXJjZU1hbmFnZXJIYW5kbGVyIChwT3JpZ2luLCBEQVQsIE1TRywgcERhdGEpOworICAgIH0KKworICAgIHJldHVybiB0d1JDOworfQorCitUV19VSU5UMTYgVFdBSU5fSW1hZ2VHcm91cEhhbmRsZXIgKAorICAgICAgICAgICBwVFdfSURFTlRJVFkgcE9yaWdpbiwKKyAgICAgICAgICAgcFRXX0lERU5USVRZIHBEZXN0LAorICAgICAgICAgICBUV19VSU5UMTYgICAgREFULAorICAgICAgICAgICBUV19VSU5UMTYgICAgTVNHLAorICAgICAgICAgICBUV19NRU1SRUYgICAgcERhdGEpCit7CisgICAgVFdfVUlOVDE2IHR3UkMgPSBUV1JDX1NVQ0NFU1M7CisKKyAgICBpZiAocERlc3QgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIERTTV90d0NDID0gVFdDQ19CQURERVNUOworICAgICAgICByZXR1cm4gVFdSQ19GQUlMVVJFOworICAgIH0KKworICAgIHN3aXRjaCAoREFUKQorICAgIHsKKyAgICAgICAgY2FzZSBEQVRfQ0lFQ09MT1I6CisgICAgICAgICAgICBpZiAoTVNHID09IE1TR19HRVQpCisgICAgICAgICAgICAgICAgdHdSQyA9IFRXQUlOX0NJRUNvbG9yR2V0IChwT3JpZ2luLCBwRGVzdCwgcERhdGEpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHR3UkMgPSBUV1JDX0ZBSUxVUkU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIERBVF9FWFRJTUFHRUlORk86CisgICAgICAgICAgICBpZiAoTVNHID09IE1TR19HRVQpCisgICAgICAgICAgICAgICAgdHdSQyA9IFRXQUlOX0V4dEltYWdlSW5mb0dldCAocE9yaWdpbiwgcERlc3QsIHBEYXRhKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0d1JDID0gVFdSQ19GQUlMVVJFOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBEQVRfR1JBWVJFU1BPTlNFOgorICAgICAgICAgICAgc3dpdGNoIChNU0cpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBNU0dfUkVTRVQ6CisgICAgICAgICAgICAgICAgICAgIHR3UkMgPSBUV0FJTl9HcmF5UmVzcG9uc2VSZXNldCAocE9yaWdpbiwgcERlc3QsIHBEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBNU0dfU0VUOgorICAgICAgICAgICAgICAgICAgICB0d1JDID0gVFdBSU5fR3JheVJlc3BvbnNlU2V0IChwT3JpZ2luLCBwRGVzdCwgcERhdGEpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICB0d1JDID0gVFdSQ19GQUlMVVJFOworICAgICAgICAgICAgICAgICAgICBEU01fdHdDQyA9IFRXQ0NfQkFEUFJPVE9DT0w7CisgICAgICAgICAgICAgICAgICAgIFdBUk4oInVucmVjb2duaXplZCBvcGVyYXRpb24gdHJpcGxldFxuIik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgREFUX0lNQUdFRklMRVhGRVI6CisgICAgICAgICAgICBpZiAoTVNHID09IE1TR19HRVQpCisgICAgICAgICAgICAgICAgdHdSQyA9IFRXQUlOX0ltYWdlRmlsZVhmZXJHZXQgKHBPcmlnaW4sIHBEZXN0LCBwRGF0YSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdHdSQyA9IFRXUkNfRkFJTFVSRTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgREFUX0lNQUdFSU5GTzoKKyAgICAgICAgICAgIGlmIChNU0cgPT0gTVNHX0dFVCkKKyAgICAgICAgICAgICAgICB0d1JDID0gVFdBSU5fSW1hZ2VJbmZvR2V0IChwT3JpZ2luLCBwRGVzdCwgcERhdGEpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHR3UkMgPSBUV1JDX0ZBSUxVUkU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIERBVF9JTUFHRUxBWU9VVDoKKyAgICAgICAgICAgIHN3aXRjaCAoTVNHKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgTVNHX0dFVDoKKyAgICAgICAgICAgICAgICAgICAgdHdSQyA9IFRXQUlOX0ltYWdlTGF5b3V0R2V0IChwT3JpZ2luLCBwRGVzdCwgcERhdGEpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIE1TR19HRVRERUZBVUxUOgorICAgICAgICAgICAgICAgICAgICB0d1JDID0gVFdBSU5fSW1hZ2VMYXlvdXRHZXREZWZhdWx0IChwT3JpZ2luLCBwRGVzdCwgcERhdGEpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIE1TR19SRVNFVDoKKyAgICAgICAgICAgICAgICAgICAgdHdSQyA9IFRXQUlOX0ltYWdlTGF5b3V0UmVzZXQgKHBPcmlnaW4sIHBEZXN0LCBwRGF0YSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgTVNHX1NFVDoKKyAgICAgICAgICAgICAgICAgICAgdHdSQyA9IFRXQUlOX0ltYWdlTGF5b3V0U2V0IChwT3JpZ2luLCBwRGVzdCwgcERhdGEpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICB0d1JDID0gVFdSQ19GQUlMVVJFOworICAgICAgICAgICAgICAgICAgICBEU01fdHdDQyA9IFRXQ0NfQkFEUFJPVE9DT0w7CisgICAgICAgICAgICAgICAgICAgIFdBUk4oInVucmVjb2duaXplZCBvcGVyYXRpb24gdHJpcGxldFxuIik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBEQVRfSU1BR0VNRU1YRkVSOgorICAgICAgICAgICAgaWYgKE1TRyA9PSBNU0dfR0VUKQorICAgICAgICAgICAgICAgIHR3UkMgPSBUV0FJTl9JbWFnZU1lbVhmZXJHZXQgKHBPcmlnaW4sIHBEZXN0LCBwRGF0YSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdHdSQyA9IFRXUkNfRkFJTFVSRTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgREFUX0lNQUdFTkFUSVZFWEZFUjoKKyAgICAgICAgICAgIGlmIChNU0cgPT0gTVNHX0dFVCkKKyAgICAgICAgICAgICAgICB0d1JDID0gVFdBSU5fSW1hZ2VOYXRpdmVYZmVyR2V0IChwT3JpZ2luLCBwRGVzdCwgcERhdGEpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHR3UkMgPSBUV1JDX0ZBSUxVUkU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIERBVF9KUEVHQ09NUFJFU1NJT046CisgICAgICAgICAgICBzd2l0Y2ggKE1TRykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIE1TR19HRVQ6CisgICAgICAgICAgICAgICAgICAgIHR3UkMgPSBUV0FJTl9KUEVHQ29tcHJlc3Npb25HZXQgKHBPcmlnaW4sIHBEZXN0LCBwRGF0YSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgTVNHX0dFVERFRkFVTFQ6CisgICAgICAgICAgICAgICAgICAgIHR3UkMgPSBUV0FJTl9KUEVHQ29tcHJlc3Npb25HZXREZWZhdWx0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBPcmlnaW4sIHBEZXN0LCBwRGF0YSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgTVNHX1JFU0VUOgorICAgICAgICAgICAgICAgICAgICB0d1JDID0gVFdBSU5fSlBFR0NvbXByZXNzaW9uUmVzZXQgKHBPcmlnaW4sIHBEZXN0LCBwRGF0YSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgTVNHX1NFVDoKKyAgICAgICAgICAgICAgICAgICAgdHdSQyA9IFRXQUlOX0pQRUdDb21wcmVzc2lvblNldCAocE9yaWdpbiwgcERlc3QsIHBEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgdHdSQyA9IFRXUkNfRkFJTFVSRTsKKyAgICAgICAgICAgICAgICAgICAgRFNNX3R3Q0MgPSBUV0NDX0JBRFBST1RPQ09MOworICAgICAgICAgICAgICAgICAgICBXQVJOKCJ1bnJlY29nbml6ZWQgb3BlcmF0aW9uIHRyaXBsZXRcbiIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgREFUX1BBTEVUVEU4OgorICAgICAgICAgICAgc3dpdGNoIChNU0cpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBNU0dfR0VUOgorICAgICAgICAgICAgICAgICAgICB0d1JDID0gVFdBSU5fUGFsZXR0ZThHZXQgKHBPcmlnaW4sIHBEZXN0LCBwRGF0YSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgTVNHX0dFVERFRkFVTFQ6CisgICAgICAgICAgICAgICAgICAgIHR3UkMgPSBUV0FJTl9QYWxldHRlOEdldERlZmF1bHQgKHBPcmlnaW4sIHBEZXN0LCBwRGF0YSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgTVNHX1JFU0VUOgorICAgICAgICAgICAgICAgICAgICB0d1JDID0gVFdBSU5fUGFsZXR0ZThSZXNldCAocE9yaWdpbiwgcERlc3QsIHBEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBNU0dfU0VUOgorICAgICAgICAgICAgICAgICAgICB0d1JDID0gVFdBSU5fUGFsZXR0ZThTZXQgKHBPcmlnaW4sIHBEZXN0LCBwRGF0YSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICB0d1JDID0gVFdSQ19GQUlMVVJFOworICAgICAgICAgICAgICAgICAgICBEU01fdHdDQyA9IFRXQ0NfQkFEUFJPVE9DT0w7CisgICAgICAgICAgICAgICAgICAgIFdBUk4oInVucmVjb2duaXplZCBvcGVyYXRpb24gdHJpcGxldFxuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIERBVF9SR0JSRVNQT05TRToKKyAgICAgICAgICAgIHN3aXRjaCAoTVNHKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgTVNHX1JFU0VUOgorICAgICAgICAgICAgICAgICAgICB0d1JDID0gVFdBSU5fUkdCUmVzcG9uc2VSZXNldCAocE9yaWdpbiwgcERlc3QsIHBEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBNU0dfU0VUOgorICAgICAgICAgICAgICAgICAgICB0d1JDID0gVFdBSU5fUkdCUmVzcG9uc2VTZXQgKHBPcmlnaW4sIHBEZXN0LCBwRGF0YSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHR3UkMgPSBUV1JDX0ZBSUxVUkU7CisgICAgICAgICAgICAgICAgICAgIERTTV90d0NDID0gVFdDQ19CQURQUk9UT0NPTDsKKyAgICAgICAgICAgICAgICAgICAgV0FSTigidW5yZWNvZ25pemVkIG9wZXJhdGlvbiB0cmlwbGV0XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgdHdSQyA9IFRXUkNfRkFJTFVSRTsKKyAgICAgICAgICAgIERTTV90d0NDID0gVFdDQ19CQURQUk9UT0NPTDsKKyAgICAgICAgICAgIFdBUk4oInVucmVjb2duaXplZCBvcGVyYXRpb24gdHJpcGxldFxuIik7CisgICAgfQorICAgIHJldHVybiB0d1JDOworfQorCitUV19VSU5UMTYgVFdBSU5fQXVkaW9Hcm91cEhhbmRsZXIgKAorICAgICAgICAgICBwVFdfSURFTlRJVFkgcE9yaWdpbiwKKyAgICAgICAgICAgcFRXX0lERU5USVRZIHBEZXN0LAorICAgICAgICAgICBUV19VSU5UMTYgICAgREFULAorICAgICAgICAgICBUV19VSU5UMTYgICAgTVNHLAorICAgICAgICAgICBUV19NRU1SRUYgICAgcERhdGEpCit7CisgICAgVFdfVUlOVDE2IHR3UkMgPSBUV1JDX0ZBSUxVUkU7CisKKyAgICBzd2l0Y2ggKERBVCkKKyAgICB7CisgICAgICAgIGNhc2UgREFUX0FVRElPRklMRVhGRVI6CisgICAgICAgICAgICBpZiAoTVNHID09IE1TR19HRVQpCisgICAgICAgICAgICAgICAgdHdSQyA9IFRXQUlOX0F1ZGlvRmlsZVhmZXJHZXQgKHBPcmlnaW4sIHBEZXN0LCBwRGF0YSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIERBVF9BVURJT0lORk86CisgICAgICAgICAgICBpZiAoTVNHID09IE1TR19HRVQpCisgICAgICAgICAgICAgICAgdHdSQyA9IFRXQUlOX0F1ZGlvSW5mb0dldCAocE9yaWdpbiwgcERlc3QsIHBEYXRhKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgREFUX0FVRElPTkFUSVZFWEZFUjoKKyAgICAgICAgICAgIGlmIChNU0cgPT0gTVNHX0dFVCkKKyAgICAgICAgICAgICAgICB0d1JDID0gVFdBSU5fQXVkaW9OYXRpdmVYZmVyR2V0IChwT3JpZ2luLCBwRGVzdCwgcERhdGEpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERTTV90d0NDID0gVFdDQ19CQURQUk9UT0NPTDsKKyAgICAgICAgICAgIHR3UkMgPSBUV1JDX0ZBSUxVUkU7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgIAorICAgIHJldHVybiB0d1JDOworfQorCisvKiBNYWluIGVudHJ5IHBvaW50IGZvciB0aGUgVFdBSU4gbGlicmFyeSAqLworVFdfVUlOVDE2IFdJTkFQSQorRFNNX0VudHJ5IChwVFdfSURFTlRJVFkgcE9yaWdpbiwKKyAgICAgICAgICAgcFRXX0lERU5USVRZIHBEZXN0LAorICAgICAgICAgICBUV19VSU5UMzIgICAgREcsCisgICAgICAgICAgIFRXX1VJTlQxNiAgICBEQVQsCisgICAgICAgICAgIFRXX1VJTlQxNiAgICBNU0csCisgICAgICAgICAgIFRXX01FTVJFRiAgICBwRGF0YSkKK3sKKyAgICBUV19VSU5UMTYgdHdSQyA9IFRXUkNfU1VDQ0VTUzsgIC8qIFJldHVybiBDb2RlICovCisKKyAgICBUUkFDRSgiKERHPSVsZCBEQVQ9JWQgTVNHPSVkKVxuIiwgREcsIERBVCwgTVNHKTsKKyAgICAKKyAgICBzd2l0Y2ggKERHKQorICAgIHsKKyAgICAgICAgY2FzZSBER19DT05UUk9MOgorICAgICAgICAgICAgdHdSQyA9IFRXQUlOX0NvbnRyb2xHcm91cEhhbmRsZXIgKHBPcmlnaW4scERlc3QsREFULE1TRyxwRGF0YSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBER19JTUFHRToKKyAgICAgICAgICAgIHR3UkMgPSBUV0FJTl9JbWFnZUdyb3VwSGFuZGxlciAocE9yaWdpbixwRGVzdCxEQVQsTVNHLHBEYXRhKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERHX0FVRElPOgorICAgICAgICAgICAgdHdSQyA9IFRXQUlOX0F1ZGlvR3JvdXBIYW5kbGVyIChwT3JpZ2luLHBEZXN0LERBVCxNU0cscERhdGEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBEU01fdHdDQyA9IFRXQ0NfQkFEUFJPVE9DT0w7CisgICAgICAgICAgICB0d1JDID0gVFdSQ19GQUlMVVJFOworICAgIH0KKworICAgIHJldHVybiB0d1JDOworfQorCisvKiBBIGhlbHBlciBmdW5jdGlvbiB0aGF0IGxvb2tzIHVwIGEgZGVzdGluYXRpb24gaWRlbnRpdHkgaW4gdGhlIGFjdGl2ZSAKKyAgIHNvdXJjZSBsaXN0ICovCithY3RpdmVEUyAqVFdBSU5fTG9va3VwU291cmNlIChwVFdfSURFTlRJVFkgcERlc3QpCit7CisgICAgYWN0aXZlRFMgKnBTb3VyY2U7CisKKyAgICBmb3IgKHBTb3VyY2UgPSBhY3RpdmVTb3VyY2VzOyBwU291cmNlOyBwU291cmNlID0gcFNvdXJjZS0+bmV4dCkKKyAgICAgICAgaWYgKHBTb3VyY2UtPmlkZW50aXR5LklkID09IHBEZXN0LT5JZCkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgcmV0dXJuIHBTb3VyY2U7Cit9CmRpZmYgLS1naXQgYS9kbGxzL3R3YWluL3R3YWluXzMyLnNwZWMgYi9kbGxzL3R3YWluL3R3YWluXzMyLnNwZWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IwYThiMwotLS0gL2Rldi9udWxsCisrKyBiL2RsbHMvdHdhaW4vdHdhaW5fMzIuc3BlYwpAQCAtMCwwICsxLDEyIEBACituYW1lCXR3YWluXzMyCit0eXBlCXdpbjMyCitpbml0CVRXQUlOX0xpYk1haW4KKworaW1wb3J0ICB1c2VyMzIuZGxsCitpbXBvcnQgIGdkaTMyLmRsbAoraW1wb3J0ICBrZXJuZWwzMi5kbGwKK2ltcG9ydCAgbnRkbGwuZGxsCisKK2RlYnVnX2NoYW5uZWxzICh0d2FpbikKKworQCBzdGRjYWxsIERTTV9FbnRyeShwdHIgcHRyIGxvbmcgbG9uZyBsb25nIHB0cikgRFNNX0VudHJ5CmRpZmYgLS1naXQgYS9kbGxzL3R3YWluL3R3YWluX2kuaCBiL2RsbHMvdHdhaW4vdHdhaW5faS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2NmE5NzAKLS0tIC9kZXYvbnVsbAorKysgYi9kbGxzL3R3YWluL3R3YWluX2kuaApAQCAtMCwwICsxLDIzOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwIENvcmVsIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2lmbmRlZiBfVFdBSU4zMl9ICisjZGVmaW5lIF9UV0FJTjMyX0gKKworI2lmZGVmIEhBVkVfU0FORQorIyBpbmNsdWRlIDxzYW5lL3NhbmUuaD4KKyNlbmRpZgorI2luY2x1ZGUgInR3YWluLmgiCisjaW5jbHVkZSAid2luZGVmLmgiCisKKy8qIGludGVybmVsIGluZm9ybWF0aW9uIGFib3V0IGFuIGFjdGl2ZSBkYXRhIHNvdXJjZSAqLwordHlwZWRlZiBzdHJ1Y3QgdGFnQWN0aXZlRFMKK3sKKyAgICBzdHJ1Y3QgdGFnQWN0aXZlRFMJKm5leHQ7CQkJLyogbmV4dCBhY3RpdmUgRFMgKi8KKyAgICBUV19JREVOVElUWQkJaWRlbnRpdHk7CQkvKiBpZGVudGl0eSAqLworICAgIFRXX1VJTlQxNgkJY3VycmVudFN0YXRlOwkJLyogY3VycmVudCBzdGF0ZSAqLworICAgIFRXX0VWRU5UCQlwZW5kaW5nRXZlbnQ7CQkvKiBwZW5kaW5nIGV2ZW50IHRvIGJlIHNlbnQgdG8gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbiAqLworICAgIFRXX1VJTlQxNgkJdHdDQzsJCQkvKiBjb25kaXRpb24gY29kZSAqLworICAgIEhXTkQJCWh3bmRPd25lcjsJCS8qIHdpbmRvdyBoYW5kbGUgb2YgdGhlIGFwcCAqLworI2lmZGVmIEhBVkVfU0FORQorICAgIFNBTkVfSGFuZGxlCQlkZXZpY2VIYW5kbGU7CQkvKiBkZXZpY2UgaGFuZGxlICovCisgICAgU0FORV9QYXJhbWV0ZXJzICAgICBzYW5lX3BhcmFtOyAgICAgICAgICAgICAvKiBwYXJhbWV0ZXJzIGFib3V0IHRoZSBpbWFnZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmZXJlZCAqLworI2VuZGlmCisgICAgLyogQ2FwYWJpYmxpdGllcyAqLworICAgIFRXX1VJTlQxNgkJY2FwWGZlck1lY2g7CQkvKiBJQ0FQX1hGRVJNRUNIICovCit9IGFjdGl2ZURTOyAKKworVFdfVUlOVDE2IERTTV9pbml0aWFsaXplZDsgICAgICAvKiB3aGV0aGVyIFNvdXJjZSBNYW5hZ2VyIGlzIGluaXRpYWxpemVkICovCitUV19VSU5UMTYgRFNNX2N1cnJlbnRTdGF0ZTsgICAgIC8qIGN1cnJlbnQgc3RhdGUgb2YgU291cmNlIE1hbmFnZXIgKi8KK1RXX1VJTlQxNiBEU01fdHdDQzsgICAgICAgICAgICAgLyogY3VycmVudCBjb25kaXRpb24gY29kZSBvZiBTb3VyY2UgTWFuYWdlciAqLworVFdfSU5UMzIgIERTTV9wYXJlbnRIV05EOyAgICAgICAvKiB3aW5kb3cgaGFuZGxlIG9mIHRoZSBTb3VyY2UncyAicGFyZW50IiAqLworVFdfVUlOVDMyIERTTV9zb3VyY2VJZDsgICAgICAgICAvKiBzb3VyY2UgaWQgZ2VuZXJhdG9yICovCitUV19VSU5UMTYgRFNNX2N1cnJlbnREZXZpY2U7ICAgIC8qIGtlZXAgdHJhY2sgb2YgZGV2aWNlIGR1cmluZyBlbnVtZXJhdGlvbiAqLworI2lmZGVmIEhBVkVfU0FORQorY29uc3QgU0FORV9EZXZpY2UgKipkZXZpY2VfbGlzdDsvKiBhIGxpc3Qgb2YgYWxsIHNhbmUgZGV2aWNlcyAqLworI2VuZGlmCithY3RpdmVEUyAqYWN0aXZlU291cmNlczsJLyogbGlzdCBvZiBhY3RpdmUgZGF0YSBzb3VyY2VzICovCisKKy8qIEhlbHBlciBmdW5jdGlvbnMgKi8KK2V4dGVybiBhY3RpdmVEUyAqVFdBSU5fTG9va3VwU291cmNlIChwVFdfSURFTlRJVFkgcERlc3QpOworZXh0ZXJuIFRXX1VJTlQxNiBUV0FJTl9TYW5lQ2FwYWJpbGl0eSAoYWN0aXZlRFMgKnBTb3VyY2UsCisgICAgICAgIHBUV19DQVBBQklMSVRZIHBDYXBhYmlsaXR5LCBUV19VSU5UMTYgYWN0aW9uKTsKKworLyogICovCitleHRlcm4gVFdfVUlOVDE2IFRXQUlOX0NvbnRyb2xHcm91cEhhbmRsZXIgKAorCXBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsCisgICAgVFdfVUlOVDE2IERBVCwgVFdfVUlOVDE2IE1TRywgVFdfTUVNUkVGIHBEYXRhKTsKK2V4dGVybiBUV19VSU5UMTYgVFdBSU5fSW1hZ2VHcm91cEhhbmRsZXIgKAorCXBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsCisJVFdfVUlOVDE2IERBVCwgVFdfVUlOVDE2IE1TRywgVFdfTUVNUkVGIHBEYXRhKTsKK2V4dGVybiBUV19VSU5UMTYgVFdBSU5fQXVkaW9Hcm91cEhhbmRsZXIgKAorCXBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsCisJVFdfVUlOVDE2IERBVCwgVFdfVUlOVDE2IE1TRywgVFdfTUVNUkVGIHBEYXRhKTsKK2V4dGVybiBUV19VSU5UMTYgVFdBSU5fU291cmNlTWFuYWdlckhhbmRsZXIgKAorCXBUV19JREVOVElUWSBwT3JpZ2luLCBUV19VSU5UMTYgREFULCBUV19VSU5UMTYgTVNHLCBUV19NRU1SRUYgcERhdGEpOworCisvKiBJbXBsZW1lbnRhdGlvbiBvZiBvcGVyYXRpb24gdHJpcGxldHMgKEZyb20gQXBwbGljYXRpb24gdG8gU291cmNlIE1hbmFnZXIpICovCitleHRlcm4gVFdfVUlOVDE2IFRXQUlOX0Nsb3NlRFMKKyAgICAgICAgICAgKHBUV19JREVOVElUWSBwT3JpZ2luLCBUV19NRU1SRUYgcERhdGEpOworZXh0ZXJuIFRXX1VJTlQxNiBUV0FJTl9JZGVudGl0eUdldERlZmF1bHQKKyAgICAgICAgICAgKHBUV19JREVOVElUWSBwT3JpZ2luLCBUV19NRU1SRUYgcERhdGEpOworZXh0ZXJuIFRXX1VJTlQxNiBUV0FJTl9JZGVudGl0eUdldEZpcnN0CisgICAgICAgICAgIChwVFdfSURFTlRJVFkgcE9yaWdpbiwgVFdfTUVNUkVGIHBEYXRhKTsKK2V4dGVybiBUV19VSU5UMTYgVFdBSU5fSWRlbnRpdHlHZXROZXh0CisgICAgICAgICAgIChwVFdfSURFTlRJVFkgcE9yaWdpbiwgVFdfTUVNUkVGIHBEYXRhKTsKK2V4dGVybiBUV19VSU5UMTYgVFdBSU5fT3BlbkRTCisgICAgICAgICAgIChwVFdfSURFTlRJVFkgcE9yaWdpbiwgVFdfTUVNUkVGIHBEYXRhKTsKK2V4dGVybiBUV19VSU5UMTYgVFdBSU5fVXNlclNlbGVjdAorICAgICAgICAgICAocFRXX0lERU5USVRZIHBPcmlnaW4sIFRXX01FTVJFRiBwRGF0YSk7CitleHRlcm4gVFdfVUlOVDE2IFRXQUlOX0Nsb3NlRFNNCisgICAgICAgICAgIChwVFdfSURFTlRJVFkgcE9yaWdpbiwgVFdfTUVNUkVGIHBEYXRhKTsKK2V4dGVybiBUV19VSU5UMTYgVFdBSU5fT3BlbkRTTQorICAgICAgICAgICAocFRXX0lERU5USVRZIHBPcmlnaW4sIFRXX01FTVJFRiBwRGF0YSk7CitleHRlcm4gVFdfVUlOVDE2IFRXQUlOX0dldERTTVN0YXR1cworICAgICAgICAgICAocFRXX0lERU5USVRZIHBPcmlnaW4sIFRXX01FTVJFRiBwRGF0YSk7CisKKy8qIEltcGxlbWVudGF0aW9uIG9mIG9wZXJhdGlvbiB0cmlwbGV0cworICogRnJvbSBBcHBsaWNhdGlvbiB0byBTb3VyY2UgKENvbnRyb2wgSW5mb3JtYXRpb24pICovCitUV19VSU5UMTYgVFdBSU5fQ2FwYWJpbGl0eUdldAorICAgIChwVFdfSURFTlRJVFkgcE9yaWdpbiwgcFRXX0lERU5USVRZIHBEZXN0LCBUV19NRU1SRUYgcERhdGEpOworVFdfVUlOVDE2IFRXQUlOX0NhcGFiaWxpdHlHZXRDdXJyZW50CisgICAgKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsVFdfTUVNUkVGIHBEYXRhKTsKK1RXX1VJTlQxNiBUV0FJTl9DYXBhYmlsaXR5R2V0RGVmYXVsdAorICAgIChwVFdfSURFTlRJVFkgcE9yaWdpbiwgcFRXX0lERU5USVRZIHBEZXN0LCBUV19NRU1SRUYgcERhdGEpOworVFdfVUlOVDE2IFRXQUlOX0NhcGFiaWxpdHlRdWVyeVN1cHBvcnQKKyAgICAocFRXX0lERU5USVRZIHBPcmlnaW4sIHBUV19JREVOVElUWSBwRGVzdCwgVFdfTUVNUkVGIHBEYXRhKTsKK1RXX1VJTlQxNiBUV0FJTl9DYXBhYmlsaXR5UmVzZXQKKyAgICAocFRXX0lERU5USVRZIHBPcmlnaW4sIHBUV19JREVOVElUWSBwRGVzdCwgVFdfTUVNUkVGIHBEYXRhKTsKK1RXX1VJTlQxNiBUV0FJTl9DYXBhYmlsaXR5U2V0CisgICAgKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsIFRXX01FTVJFRiBwRGF0YSk7CitUV19VSU5UMTYgVFdBSU5fQ3VzdG9tRFNEYXRhR2V0CisgICAgKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsIFRXX01FTVJFRiBwRGF0YSk7CitUV19VSU5UMTYgVFdBSU5fQ3VzdG9tRFNEYXRhU2V0CisgICAgKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsIFRXX01FTVJFRiBwRGF0YSk7CitUV19VSU5UMTYgVFdBSU5fQXV0b21hdGljQ2FwdHVyZURpcmVjdG9yeQorICAgIChwVFdfSURFTlRJVFkgcE9yaWdpbiwgcFRXX0lERU5USVRZIHBEZXN0LCBUV19NRU1SRUYgcERhdGEpOworVFdfVUlOVDE2IFRXQUlOX0NoYW5nZURpcmVjdG9yeQorICAgIChwVFdfSURFTlRJVFkgcE9yaWdpbiwgcFRXX0lERU5USVRZIHBEZXN0LCBUV19NRU1SRUYgcERhdGEpOworVFdfVUlOVDE2IFRXQUlOX0ZpbGVTeXN0ZW1Db3B5CisgICAgKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsIFRXX01FTVJFRiBwRGF0YSk7CitUV19VSU5UMTYgVFdBSU5fQ3JlYXRlRGlyZWN0b3J5CisgICAgKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsIFRXX01FTVJFRiBwRGF0YSk7CitUV19VSU5UMTYgVFdBSU5fRmlsZVN5c3RlbURlbGV0ZQorICAgIChwVFdfSURFTlRJVFkgcE9yaWdpbiwgcFRXX0lERU5USVRZIHBEZXN0LCBUV19NRU1SRUYgcERhdGEpOworVFdfVUlOVDE2IFRXQUlOX0Zvcm1hdE1lZGlhCisgICAgKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsIFRXX01FTVJFRiBwRGF0YSk7CitUV19VSU5UMTYgVFdBSU5fRmlsZVN5c3RlbUdldENsb3NlCisgICAgKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsIFRXX01FTVJFRiBwRGF0YSk7CitUV19VSU5UMTYgVFdBSU5fRmlsZVN5c3RlbUdldEZpcnN0RmlsZQorICAgIChwVFdfSURFTlRJVFkgcE9yaWdpbiwgcFRXX0lERU5USVRZIHBEZXN0LCBUV19NRU1SRUYgcERhdGEpOworVFdfVUlOVDE2IFRXQUlOX0ZpbGVTeXN0ZW1HZXRJbmZvCisgICAgKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsIFRXX01FTVJFRiBwRGF0YSk7CitUV19VSU5UMTYgVFdBSU5fRmlsZVN5c3RlbUdldE5leHRGaWxlCisgICAgKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsIFRXX01FTVJFRiBwRGF0YSk7CitUV19VSU5UMTYgVFdBSU5fRmlsZVN5c3RlbVJlbmFtZQorICAgIChwVFdfSURFTlRJVFkgcE9yaWdpbiwgcFRXX0lERU5USVRZIHBEZXN0LCBUV19NRU1SRUYgcERhdGEpOworVFdfVUlOVDE2IFRXQUlOX1Byb2Nlc3NFdmVudAorICAgIChwVFdfSURFTlRJVFkgcE9yaWdpbiwgcFRXX0lERU5USVRZIHBEZXN0LCBUV19NRU1SRUYgcERhdGEpOworVFdfVUlOVDE2IFRXQUlOX1Bhc3NUaHJvdWdoCisgICAgKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsIFRXX01FTVJFRiBwRGF0YSk7CitUV19VSU5UMTYgVFdBSU5fUGVuZGluZ1hmZXJzRW5kWGZlcgorICAgIChwVFdfSURFTlRJVFkgcE9yaWdpbiwgcFRXX0lERU5USVRZIHBEZXN0LCBUV19NRU1SRUYgcERhdGEpOworVFdfVUlOVDE2IFRXQUlOX1BlbmRpbmdYZmVyc0dldAorICAgIChwVFdfSURFTlRJVFkgcE9yaWdpbiwgcFRXX0lERU5USVRZIHBEZXN0LCBUV19NRU1SRUYgcERhdGEpOworVFdfVUlOVDE2IFRXQUlOX1BlbmRpbmdYZmVyc1Jlc2V0CisgICAgKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsIFRXX01FTVJFRiBwRGF0YSk7CitUV19VSU5UMTYgVFdBSU5fUGVuZGluZ1hmZXJzU3RvcEZlZWRlcgorICAgIChwVFdfSURFTlRJVFkgcE9yaWdpbiwgcFRXX0lERU5USVRZIHBEZXN0LCBUV19NRU1SRUYgcERhdGEpOworVFdfVUlOVDE2IFRXQUlOX1NldHVwRmlsZVhmZXJHZXQKKyAgICAocFRXX0lERU5USVRZIHBPcmlnaW4sIHBUV19JREVOVElUWSBwRGVzdCwgVFdfTUVNUkVGIHBEYXRhKTsKK1RXX1VJTlQxNiBUV0FJTl9TZXR1cEZpbGVYZmVyR2V0RGVmYXVsdAorICAgIChwVFdfSURFTlRJVFkgcE9yaWdpbiwgcFRXX0lERU5USVRZIHBEZXN0LCBUV19NRU1SRUYgcERhdGEpOworVFdfVUlOVDE2IFRXQUlOX1NldHVwRmlsZVhmZXJSZXNldAorICAgIChwVFdfSURFTlRJVFkgcE9yaWdpbiwgcFRXX0lERU5USVRZIHBEZXN0LCBUV19NRU1SRUYgcERhdGEpOworVFdfVUlOVDE2IFRXQUlOX1NldHVwRmlsZVhmZXJTZXQKKyAgICAocFRXX0lERU5USVRZIHBPcmlnaW4sIHBUV19JREVOVElUWSBwRGVzdCwgVFdfTUVNUkVGIHBEYXRhKTsKK1RXX1VJTlQxNiBUV0FJTl9TZXR1cEZpbGVYZmVyMkdldAorICAgIChwVFdfSURFTlRJVFkgcE9yaWdpbiwgcFRXX0lERU5USVRZIHBEZXN0LCBUV19NRU1SRUYgcERhdGEpOworVFdfVUlOVDE2IFRXQUlOX1NldHVwRmlsZVhmZXIyR2V0RGVmYXVsdAorICAgIChwVFdfSURFTlRJVFkgcE9yaWdpbiwgcFRXX0lERU5USVRZIHBEZXN0LCBUV19NRU1SRUYgcERhdGEpOworVFdfVUlOVDE2IFRXQUlOX1NldHVwRmlsZVhmZXIyUmVzZXQKKyAgICAocFRXX0lERU5USVRZIHBPcmlnaW4sIHBUV19JREVOVElUWSBwRGVzdCwgVFdfTUVNUkVGIHBEYXRhKTsKK1RXX1VJTlQxNiBUV0FJTl9TZXR1cEZpbGVYZmVyMlNldAorICAgIChwVFdfSURFTlRJVFkgcE9yaWdpbiwgcFRXX0lERU5USVRZIHBEZXN0LCBUV19NRU1SRUYgcERhdGEpOworVFdfVUlOVDE2IFRXQUlOX1NldHVwTWVtWGZlckdldAorICAgIChwVFdfSURFTlRJVFkgcE9yaWdpbiwgcFRXX0lERU5USVRZIHBEZXN0LCBUV19NRU1SRUYgcERhdGEpOworVFdfVUlOVDE2IFRXQUlOX0dldERTU3RhdHVzCisgICAgKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsIFRXX01FTVJFRiBwRGF0YSk7CitUV19VSU5UMTYgVFdBSU5fRGlzYWJsZURTVXNlckludGVyZmFjZQorICAgIChwVFdfSURFTlRJVFkgcE9yaWdpbiwgcFRXX0lERU5USVRZIHBEZXN0LCBUV19NRU1SRUYgcERhdGEpOworVFdfVUlOVDE2IFRXQUlOX0VuYWJsZURTVXNlckludGVyZmFjZQorICAgIChwVFdfSURFTlRJVFkgcE9yaWdpbiwgcFRXX0lERU5USVRZIHBEZXN0LCBUV19NRU1SRUYgcERhdGEpOworVFdfVUlOVDE2IFRXQUlOX0VuYWJsZURTVUlPbmx5CisgICAgKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsIFRXX01FTVJFRiBwRGF0YSk7CitUV19VSU5UMTYgVFdBSU5fWGZlckdyb3VwR2V0CisgICAgKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsIFRXX01FTVJFRiBwRGF0YSk7CitUV19VSU5UMTYgVFdBSU5fWGZlckdyb3VwU2V0CisgICAgKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsIFRXX01FTVJFRiBwRGF0YSk7CisKKy8qIEltcGxlbWVudGF0aW9uIG9mIG9wZXJhdGlvbiB0cmlwbGV0cyAKKyAqIEZyb20gQXBwbGljYXRpb24gdG8gU291cmNlIChJbWFnZSBJbmZvcm1hdGlvbikgKi8KK1RXX1VJTlQxNiBUV0FJTl9DSUVDb2xvckdldAorICAgIChwVFdfSURFTlRJVFkgcE9yaWdpbiwgcFRXX0lERU5USVRZIHBEZXN0LCBUV19NRU1SRUYgcERhdGEpOworVFdfVUlOVDE2IFRXQUlOX0V4dEltYWdlSW5mb0dldAorICAgIChwVFdfSURFTlRJVFkgcE9yaWdpbiwgcFRXX0lERU5USVRZIHBEZXN0LCBUV19NRU1SRUYgcERhdGEpOworVFdfVUlOVDE2IFRXQUlOX0dyYXlSZXNwb25zZVJlc2V0CisgICAgKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsIFRXX01FTVJFRiBwRGF0YSk7CitUV19VSU5UMTYgVFdBSU5fR3JheVJlc3BvbnNlU2V0CisgICAgKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsIFRXX01FTVJFRiBwRGF0YSk7CitUV19VSU5UMTYgVFdBSU5fSW1hZ2VGaWxlWGZlckdldAorICAgIChwVFdfSURFTlRJVFkgcE9yaWdpbiwgcFRXX0lERU5USVRZIHBEZXN0LCBUV19NRU1SRUYgcERhdGEpOworVFdfVUlOVDE2IFRXQUlOX0ltYWdlSW5mb0dldAorICAgIChwVFdfSURFTlRJVFkgcE9yaWdpbiwgcFRXX0lERU5USVRZIHBEZXN0LCBUV19NRU1SRUYgcERhdGEpOworVFdfVUlOVDE2IFRXQUlOX0ltYWdlTGF5b3V0R2V0CisgICAgKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsIFRXX01FTVJFRiBwRGF0YSk7CitUV19VSU5UMTYgVFdBSU5fSW1hZ2VMYXlvdXRHZXREZWZhdWx0CisgICAgKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsIFRXX01FTVJFRiBwRGF0YSk7CitUV19VSU5UMTYgVFdBSU5fSW1hZ2VMYXlvdXRSZXNldAorICAgIChwVFdfSURFTlRJVFkgcE9yaWdpbiwgcFRXX0lERU5USVRZIHBEZXN0LCBUV19NRU1SRUYgcERhdGEpOworVFdfVUlOVDE2IFRXQUlOX0ltYWdlTGF5b3V0U2V0CisgICAgKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsIFRXX01FTVJFRiBwRGF0YSk7CitUV19VSU5UMTYgVFdBSU5fSW1hZ2VNZW1YZmVyR2V0CisgICAgKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsIFRXX01FTVJFRiBwRGF0YSk7CitUV19VSU5UMTYgVFdBSU5fSW1hZ2VOYXRpdmVYZmVyR2V0CisgICAgKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsIFRXX01FTVJFRiBwRGF0YSk7CitUV19VSU5UMTYgVFdBSU5fSlBFR0NvbXByZXNzaW9uR2V0CisgICAgKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsIFRXX01FTVJFRiBwRGF0YSk7CitUV19VSU5UMTYgVFdBSU5fSlBFR0NvbXByZXNzaW9uR2V0RGVmYXVsdAorICAgIChwVFdfSURFTlRJVFkgcE9yaWdpbiwgcFRXX0lERU5USVRZIHBEZXN0LCBUV19NRU1SRUYgcERhdGEpOworVFdfVUlOVDE2IFRXQUlOX0pQRUdDb21wcmVzc2lvblJlc2V0CisgICAgKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsIFRXX01FTVJFRiBwRGF0YSk7CitUV19VSU5UMTYgVFdBSU5fSlBFR0NvbXByZXNzaW9uU2V0CisgICAgKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsIFRXX01FTVJFRiBwRGF0YSk7CitUV19VSU5UMTYgVFdBSU5fUGFsZXR0ZThHZXQKKyAgICAocFRXX0lERU5USVRZIHBPcmlnaW4sIHBUV19JREVOVElUWSBwRGVzdCwgVFdfTUVNUkVGIHBEYXRhKTsKK1RXX1VJTlQxNiBUV0FJTl9QYWxldHRlOEdldERlZmF1bHQKKyAgICAocFRXX0lERU5USVRZIHBPcmlnaW4sIHBUV19JREVOVElUWSBwRGVzdCwgVFdfTUVNUkVGIHBEYXRhKTsKK1RXX1VJTlQxNiBUV0FJTl9QYWxldHRlOFJlc2V0CisgICAgKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsIFRXX01FTVJFRiBwRGF0YSk7CitUV19VSU5UMTYgVFdBSU5fUGFsZXR0ZThTZXQKKyAgICAocFRXX0lERU5USVRZIHBPcmlnaW4sIHBUV19JREVOVElUWSBwRGVzdCwgVFdfTUVNUkVGIHBEYXRhKTsKK1RXX1VJTlQxNiBUV0FJTl9SR0JSZXNwb25zZVJlc2V0CisgICAgKHBUV19JREVOVElUWSBwT3JpZ2luLCBwVFdfSURFTlRJVFkgcERlc3QsIFRXX01FTVJFRiBwRGF0YSk7CitUV19VSU5UMTYgVFdBSU5fUkdCUmVzcG9uc2VTZXQKKyAgICAocFRXX0lERU5USVRZIHBPcmlnaW4sIHBUV19JREVOVElUWSBwRGVzdCwgVFdfTUVNUkVGIHBEYXRhKTsKKworLyogSW1wbGVtZW50YXRpb24gb2Ygb3BlcmF0aW9uIHRyaXBsZXRzCisgKiBGcm9tIEFwcGxpY2F0aW9uIHRvIFNvdXJjZSAoQXVkaW8gSW5mb3JtYXRpb24pICovCitUV19VSU5UMTYgVFdBSU5fQXVkaW9GaWxlWGZlckdldAorICAgIChwVFdfSURFTlRJVFkgcE9yaWdpbiwgcFRXX0lERU5USVRZIHBEZXN0LCBUV19NRU1SRUYgcERhdGEpOworVFdfVUlOVDE2IFRXQUlOX0F1ZGlvSW5mb0dldAorICAgIChwVFdfSURFTlRJVFkgcE9yaWdpbiwgcFRXX0lERU5USVRZIHBEZXN0LCBUV19NRU1SRUYgcERhdGEpOworVFdfVUlOVDE2IFRXQUlOX0F1ZGlvTmF0aXZlWGZlckdldAorICAgIChwVFdfSURFTlRJVFkgcE9yaWdpbiwgcFRXX0lERU5USVRZIHBEZXN0LCBUV19NRU1SRUYgcERhdGEpOworCisvKiBJbXBsZW1lbnRhdGlvbiBvZiBUV0FJTiBjYXBhYmlsaXRpZXMgKi8KK1RXX1VJTlQxNiBUV0FJTl9JQ0FQWGZlck1lY2gKKyAgICAoYWN0aXZlRFMgKnBTb3VyY2UsIHBUV19DQVBBQklMSVRZIHBDYXBhYmlsaXR5LCBUV19VSU5UMTYgYWN0aW9uKTsKKworI2VuZGlmCg==