LyoKICogQ29weXJpZ2h0IKkgMjAwNi0yMDA3IEludGVsIENvcnBvcmF0aW9uCiAqCiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCiAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCiAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCiAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQogKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgogKgogKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CiAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKICogU29mdHdhcmUuCiAqCiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAogKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgogKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAqCiAqIEF1dGhvcnM6CiAqCUVyaWMgQW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+CiAqLwoKLyoqCiAqIEBmaWxlIFNEVk8gY29tbWFuZCBkZWZpbml0aW9ucyBhbmQgc3RydWN0dXJlcy4KICovCgojZGVmaW5lIFNEVk9fT1VUUFVUX0ZJUlNUICAgKDApCiNkZWZpbmUgU0RWT19PVVRQVVRfVE1EUzAgICAoMSA8PCAwKQojZGVmaW5lIFNEVk9fT1VUUFVUX1JHQjAgICAgKDEgPDwgMSkKI2RlZmluZSBTRFZPX09VVFBVVF9DVkJTMCAgICgxIDw8IDIpCiNkZWZpbmUgU0RWT19PVVRQVVRfU1ZJRDAgICAoMSA8PCAzKQojZGVmaW5lIFNEVk9fT1VUUFVUX1lQUlBCMCAgKDEgPDwgNCkKI2RlZmluZSBTRFZPX09VVFBVVF9TQ0FSVDAgICgxIDw8IDUpCiNkZWZpbmUgU0RWT19PVVRQVVRfTFZEUzAgICAoMSA8PCA2KQojZGVmaW5lIFNEVk9fT1VUUFVUX1RNRFMxICAgKDEgPDwgOCkKI2RlZmluZSBTRFZPX09VVFBVVF9SR0IxICAgICgxIDw8IDkpCiNkZWZpbmUgU0RWT19PVVRQVVRfQ1ZCUzEgICAoMSA8PCAxMCkKI2RlZmluZSBTRFZPX09VVFBVVF9TVklEMSAgICgxIDw8IDExKQojZGVmaW5lIFNEVk9fT1VUUFVUX1lQUlBCMSAgKDEgPDwgMTIpCiNkZWZpbmUgU0RWT19PVVRQVVRfU0NBUlQxICAoMSA8PCAxMykKI2RlZmluZSBTRFZPX09VVFBVVF9MVkRTMSAgICgxIDw8IDE0KQojZGVmaW5lIFNEVk9fT1VUUFVUX0xBU1QgICAgKDE0KQoKc3RydWN0IGludGVsX3Nkdm9fY2FwcyB7CiAgICB1OCB2ZW5kb3JfaWQ7CiAgICB1OCBkZXZpY2VfaWQ7CiAgICB1OCBkZXZpY2VfcmV2X2lkOwogICAgdTggc2R2b192ZXJzaW9uX21ham9yOwogICAgdTggc2R2b192ZXJzaW9uX21pbm9yOwogICAgdW5zaWduZWQgaW50IHNkdm9faW5wdXRzX21hc2s6MjsKICAgIHVuc2lnbmVkIGludCBzbW9vdGhfc2NhbGluZzoxOwogICAgdW5zaWduZWQgaW50IHNoYXJwX3NjYWxpbmc6MTsKICAgIHVuc2lnbmVkIGludCB1cF9zY2FsaW5nOjE7CiAgICB1bnNpZ25lZCBpbnQgZG93bl9zY2FsaW5nOjE7CiAgICB1bnNpZ25lZCBpbnQgc3RhbGxfc3VwcG9ydDoxOwogICAgdW5zaWduZWQgaW50IHBhZDoxOwogICAgdTE2IG91dHB1dF9mbGFnczsKfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKCi8qKiBUaGlzIG1hdGNoZXMgdGhlIEVESUQgRFREIHN0cnVjdHVyZSwgbW9yZSBvciBsZXNzICovCnN0cnVjdCBpbnRlbF9zZHZvX2R0ZCB7CiAgICBzdHJ1Y3QgewoJdTE2IGNsb2NrOwkJLyoqPCBwaXhlbCBjbG9jaywgaW4gMTBrSHogdW5pdHMgKi8KCXU4IGhfYWN0aXZlOwkJLyoqPCBsb3dlciA4IGJpdHMgKHBpeGVscykgKi8KCXU4IGhfYmxhbms7CQkvKio8IGxvd2VyIDggYml0cyAocGl4ZWxzKSAqLwoJdTggaF9oaWdoOwkJLyoqPCB1cHBlciA0IGJpdHMgZWFjaCBoX2FjdGl2ZSwgaF9ibGFuayAqLwoJdTggdl9hY3RpdmU7CQkvKio8IGxvd2VyIDggYml0cyAobGluZXMpICovCgl1OCB2X2JsYW5rOwkJLyoqPCBsb3dlciA4IGJpdHMgKGxpbmVzKSAqLwoJdTggdl9oaWdoOwkJLyoqPCB1cHBlciA0IGJpdHMgZWFjaCB2X2FjdGl2ZSwgdl9ibGFuayAqLwogICAgfSBwYXJ0MTsKCiAgICBzdHJ1Y3QgewoJdTggaF9zeW5jX29mZjsJLyoqPCBsb3dlciA4IGJpdHMsIGZyb20gaGJsYW5rIHN0YXJ0ICovCgl1OCBoX3N5bmNfd2lkdGg7CS8qKjwgbG93ZXIgOCBiaXRzIChwaXhlbHMpICovCgkvKiogbG93ZXIgNCBiaXRzIGVhY2ggdnN5bmMgb2Zmc2V0LCB2c3luYyB3aWR0aCAqLwoJdTggdl9zeW5jX29mZl93aWR0aDsKCS8qKgoJICogMiBoaWdoIGJpdHMgb2YgaHN5bmMgb2Zmc2V0LCAyIGhpZ2ggYml0cyBvZiBoc3luYyB3aWR0aCwKCSAqIGJpdHMgNC01IG9mIHZzeW5jIG9mZnNldCwgYW5kIDIgaGlnaCBiaXRzIG9mIHZzeW5jIHdpZHRoLgoJICovCgl1OCBzeW5jX29mZl93aWR0aF9oaWdoOwoJdTggZHRkX2ZsYWdzOwoJdTggc2R2b19mbGFnczsKCS8qKiBiaXRzIDYtNyBvZiB2c3luYyBvZmZzZXQgYXQgYml0cyA2LTcgKi8KCXU4IHZfc3luY19vZmZfaGlnaDsKCXU4IHJlc2VydmVkOwogICAgfSBwYXJ0MjsKfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKCnN0cnVjdCBpbnRlbF9zZHZvX3BpeGVsX2Nsb2NrX3JhbmdlIHsKICAgIHUxNiBtaW47CQkJLyoqPCBwaXhlbCBjbG9jaywgaW4gMTBrSHogdW5pdHMgKi8KICAgIHUxNiBtYXg7CQkJLyoqPCBwaXhlbCBjbG9jaywgaW4gMTBrSHogdW5pdHMgKi8KfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKCnN0cnVjdCBpbnRlbF9zZHZvX3ByZWZlcnJlZF9pbnB1dF90aW1pbmdfYXJncyB7CiAgICB1MTYgY2xvY2s7CiAgICB1MTYgd2lkdGg7CiAgICB1MTYgaGVpZ2h0OwogICAgdTgJaW50ZXJsYWNlOjE7CiAgICB1OAlzY2FsZWQ6MTsKICAgIHU4CXBhZDo2Owp9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwoKLyogSTJDIHJlZ2lzdGVycyBmb3IgU0RWTyAqLwojZGVmaW5lIFNEVk9fSTJDX0FSR18wCQkJCTB4MDcKI2RlZmluZSBTRFZPX0kyQ19BUkdfMQkJCQkweDA2CiNkZWZpbmUgU0RWT19JMkNfQVJHXzIJCQkJMHgwNQojZGVmaW5lIFNEVk9fSTJDX0FSR18zCQkJCTB4MDQKI2RlZmluZSBTRFZPX0kyQ19BUkdfNAkJCQkweDAzCiNkZWZpbmUgU0RWT19JMkNfQVJHXzUJCQkJMHgwMgojZGVmaW5lIFNEVk9fSTJDX0FSR182CQkJCTB4MDEKI2RlZmluZSBTRFZPX0kyQ19BUkdfNwkJCQkweDAwCiNkZWZpbmUgU0RWT19JMkNfT1BDT0RFCQkJCTB4MDgKI2RlZmluZSBTRFZPX0kyQ19DTURfU1RBVFVTCQkJMHgwOQojZGVmaW5lIFNEVk9fSTJDX1JFVFVSTl8wCQkJMHgwYQojZGVmaW5lIFNEVk9fSTJDX1JFVFVSTl8xCQkJMHgwYgojZGVmaW5lIFNEVk9fSTJDX1JFVFVSTl8yCQkJMHgwYwojZGVmaW5lIFNEVk9fSTJDX1JFVFVSTl8zCQkJMHgwZAojZGVmaW5lIFNEVk9fSTJDX1JFVFVSTl80CQkJMHgwZQojZGVmaW5lIFNEVk9fSTJDX1JFVFVSTl81CQkJMHgwZgojZGVmaW5lIFNEVk9fSTJDX1JFVFVSTl82CQkJMHgxMAojZGVmaW5lIFNEVk9fSTJDX1JFVFVSTl83CQkJMHgxMQojZGVmaW5lIFNEVk9fSTJDX1ZFTkRPUl9CRUdJTgkJCTB4MjAKCi8qIFN0YXR1cyByZXN1bHRzICovCiNkZWZpbmUgU0RWT19DTURfU1RBVFVTX1BPV0VSX09OCQkweDAKI2RlZmluZSBTRFZPX0NNRF9TVEFUVVNfU1VDQ0VTUwkJCTB4MQojZGVmaW5lIFNEVk9fQ01EX1NUQVRVU19OT1RTVVBQCQkJMHgyCiNkZWZpbmUgU0RWT19DTURfU1RBVFVTX0lOVkFMSURfQVJHCQkweDMKI2RlZmluZSBTRFZPX0NNRF9TVEFUVVNfUEVORElORwkJCTB4NAojZGVmaW5lIFNEVk9fQ01EX1NUQVRVU19UQVJHRVRfTk9UX1NQRUNJRklFRAkweDUKI2RlZmluZSBTRFZPX0NNRF9TVEFUVVNfU0NBTElOR19OT1RfU1VQUAkweDYKCi8qIFNEVk8gY29tbWFuZHMsIGFyZ3VtZW50L3Jlc3VsdCByZWdpc3RlcnMgKi8KCiNkZWZpbmUgU0RWT19DTURfUkVTRVQJCQkJCTB4MDEKCi8qKiBSZXR1cm5zIGEgc3RydWN0IGludGVsX3Nkdm9fY2FwcyAqLwojZGVmaW5lIFNEVk9fQ01EX0dFVF9ERVZJQ0VfQ0FQUwkJCTB4MDIKCiNkZWZpbmUgU0RWT19DTURfR0VUX0ZJUk1XQVJFX1JFVgkJCTB4ODYKIyBkZWZpbmUgU0RWT19ERVZJQ0VfRklSTVdBUkVfTUlOT1IJCQlTRFZPX0kyQ19SRVRVUk5fMAojIGRlZmluZSBTRFZPX0RFVklDRV9GSVJNV0FSRV9NQUpPUgkJCVNEVk9fSTJDX1JFVFVSTl8xCiMgZGVmaW5lIFNEVk9fREVWSUNFX0ZJUk1XQVJFX1BBVENICQkJU0RWT19JMkNfUkVUVVJOXzIKCi8qKgogKiBSZXBvcnRzIHdoaWNoIGlucHV0cyBhcmUgdHJhaW5lZCAobWFuYWdlZCB0byBzeW5jKS4KICoKICogRGV2aWNlcyBtdXN0IGhhdmUgdHJhaW5lZCB3aXRoaW4gMiB2c3luY3Mgb2YgYSBtb2RlIGNoYW5nZS4KICovCiNkZWZpbmUgU0RWT19DTURfR0VUX1RSQUlORURfSU5QVVRTCQkJMHgwMwpzdHJ1Y3QgaW50ZWxfc2R2b19nZXRfdHJhaW5lZF9pbnB1dHNfcmVzcG9uc2UgewogICAgdW5zaWduZWQgaW50IGlucHV0MF90cmFpbmVkOjE7CiAgICB1bnNpZ25lZCBpbnQgaW5wdXQxX3RyYWluZWQ6MTsKICAgIHVuc2lnbmVkIGludCBwYWQ6NjsKfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKCi8qKiBSZXR1cm5zIGEgc3RydWN0IGludGVsX3Nkdm9fb3V0cHV0X2ZsYWdzIG9mIGFjdGl2ZSBvdXRwdXRzLiAqLwojZGVmaW5lIFNEVk9fQ01EX0dFVF9BQ1RJVkVfT1VUUFVUUwkJCTB4MDQKCi8qKgogKiBTZXRzIHRoZSBjdXJyZW50IHNldCBvZiBhY3RpdmUgb3V0cHV0cy4KICoKICogVGFrZXMgYSBzdHJ1Y3QgaW50ZWxfc2R2b19vdXRwdXRfZmxhZ3MuICBNdXN0IGJlIHByZWNlZGVkIGJ5IGEgU0VUX0lOX09VVF9NQVAKICogb24gbXVsdGktb3V0cHV0IGRldmljZXMuCiAqLwojZGVmaW5lIFNEVk9fQ01EX1NFVF9BQ1RJVkVfT1VUUFVUUwkJCTB4MDUKCi8qKgogKiBSZXR1cm5zIHRoZSBjdXJyZW50IG1hcHBpbmcgb2YgU0RWTyBpbnB1dHMgdG8gb3V0cHV0cyBvbiB0aGUgZGV2aWNlLgogKgogKiBSZXR1cm5zIHR3byBzdHJ1Y3QgaW50ZWxfc2R2b19vdXRwdXRfZmxhZ3Mgc3RydWN0dXJlcy4KICovCiNkZWZpbmUgU0RWT19DTURfR0VUX0lOX09VVF9NQVAJCQkJMHgwNgpzdHJ1Y3QgaW50ZWxfc2R2b19pbl9vdXRfbWFwIHsKICAgIHUxNiBpbjAsIGluMTsKfTsKCi8qKgogKiBTZXRzIHRoZSBjdXJyZW50IG1hcHBpbmcgb2YgU0RWTyBpbnB1dHMgdG8gb3V0cHV0cyBvbiB0aGUgZGV2aWNlLgogKgogKiBUYWtlcyB0d28gc3RydWN0IGkzODBfc2R2b19vdXRwdXRfZmxhZ3Mgc3RydWN0dXJlcy4KICovCiNkZWZpbmUgU0RWT19DTURfU0VUX0lOX09VVF9NQVAJCQkJMHgwNwoKLyoqCiAqIFJldHVybnMgYSBzdHJ1Y3QgaW50ZWxfc2R2b19vdXRwdXRfZmxhZ3Mgb2YgYXR0YWNoZWQgZGlzcGxheXMuCiAqLwojZGVmaW5lIFNEVk9fQ01EX0dFVF9BVFRBQ0hFRF9ESVNQTEFZUwkJCTB4MGIKCi8qKgogKiBSZXR1cm5zIGEgc3RydWN0IGludGVsX3Nkdm9fb3VwdHV0X2ZsYWdzIG9mIGRpc3BsYXlzIHN1cHBvcnRpbmcgaG90IHBsdWdnaW5nLgogKi8KI2RlZmluZSBTRFZPX0NNRF9HRVRfSE9UX1BMVUdfU1VQUE9SVAkJCTB4MGMKCi8qKgogKiBUYWtlcyBhIHN0cnVjdCBpbnRlbF9zZHZvX291dHB1dF9mbGFncy4KICovCiNkZWZpbmUgU0RWT19DTURfU0VUX0FDVElWRV9IT1RfUExVRwkJCTB4MGQKCi8qKgogKiBSZXR1cm5zIGEgc3RydWN0IGludGVsX3Nkdm9fb3V0cHV0X2ZsYWdzIG9mIGRpc3BsYXlzIHdpdGggaG90IHBsdWcKICogaW50ZXJydXB0cyBlbmFibGVkLgogKi8KI2RlZmluZSBTRFZPX0NNRF9HRVRfQUNUSVZFX0hPVF9QTFVHCQkJMHgwZQoKI2RlZmluZSBTRFZPX0NNRF9HRVRfSU5URVJSVVBUX0VWRU5UX1NPVVJDRQkJMHgwZgpzdHJ1Y3QgaW50ZWxfc2R2b19nZXRfaW50ZXJydXB0X2V2ZW50X3NvdXJjZV9yZXNwb25zZSB7CiAgICB1MTYgaW50ZXJydXB0X3N0YXR1czsKICAgIHVuc2lnbmVkIGludCBhbWJpZW50X2xpZ2h0X2ludGVycnVwdDoxOwogICAgdW5zaWduZWQgaW50IGhkbWlfYXVkaW9fZW5jcnlwdF9jaGFuZ2U6MTsKICAgIHVuc2lnbmVkIGludCBwYWQ6NjsKfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKCi8qKgogKiBTZWxlY3RzIHdoaWNoIGlucHV0IGlzIGFmZmVjdGVkIGJ5IGZ1dHVyZSBpbnB1dCBjb21tYW5kcy4KICoKICogQ29tbWFuZHMgYWZmZWN0ZWQgaW5jbHVkZSBTRVRfSU5QVVRfVElNSU5HU19QQVJUWzEyXSwKICogR0VUX0lOUFVUX1RJTUlOR1NfUEFSVFsxMl0sIEdFVF9QUkVGRVJSRURfSU5QVVRfVElNSU5HU19QQVJUWzEyXSwKICogR0VUX0lOUFVUX1BJWEVMX0NMT0NLX1JBTkdFLCBhbmQgQ1JFQVRFX1BSRUZFUlJFRF9JTlBVVF9USU1JTkdTLgogKi8KI2RlZmluZSBTRFZPX0NNRF9TRVRfVEFSR0VUX0lOUFVUCQkJMHgxMApzdHJ1Y3QgaW50ZWxfc2R2b19zZXRfdGFyZ2V0X2lucHV0X2FyZ3MgewogICAgdW5zaWduZWQgaW50IHRhcmdldF8xOjE7CiAgICB1bnNpZ25lZCBpbnQgcGFkOjc7Cn0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CgovKioKICogVGFrZXMgYSBzdHJ1Y3QgaW50ZWxfc2R2b19vdXRwdXRfZmxhZ3Mgb2Ygd2hpY2ggb3V0cHV0cyBhcmUgdGFyZ2V0dGVkIGJ5CiAqIGZ1dHVyZSBvdXRwdXQgY29tbWFuZHMuCiAqCiAqIEFmZmVjdGVkIGNvbW1hbmRzIGluY2x1ZSBTRVRfT1VUUFVUX1RJTUlOR1NfUEFSVFsxMl0sCiAqIEdFVF9PVVRQVVRfVElNSU5HU19QQVJUWzEyXSwgYW5kIEdFVF9PVVRQVVRfUElYRUxfQ0xPQ0tfUkFOR0UuCiAqLwojZGVmaW5lIFNEVk9fQ01EX1NFVF9UQVJHRVRfT1VUUFVUCQkJMHgxMQoKI2RlZmluZSBTRFZPX0NNRF9HRVRfSU5QVVRfVElNSU5HU19QQVJUMQkJMHgxMgojZGVmaW5lIFNEVk9fQ01EX0dFVF9JTlBVVF9USU1JTkdTX1BBUlQyCQkweDEzCiNkZWZpbmUgU0RWT19DTURfU0VUX0lOUFVUX1RJTUlOR1NfUEFSVDEJCTB4MTQKI2RlZmluZSBTRFZPX0NNRF9TRVRfSU5QVVRfVElNSU5HU19QQVJUMgkJMHgxNQojZGVmaW5lIFNEVk9fQ01EX1NFVF9PVVRQVVRfVElNSU5HU19QQVJUMQkJMHgxNgojZGVmaW5lIFNEVk9fQ01EX1NFVF9PVVRQVVRfVElNSU5HU19QQVJUMgkJMHgxNwojZGVmaW5lIFNEVk9fQ01EX0dFVF9PVVRQVVRfVElNSU5HU19QQVJUMQkJMHgxOAojZGVmaW5lIFNEVk9fQ01EX0dFVF9PVVRQVVRfVElNSU5HU19QQVJUMgkJMHgxOQovKiBQYXJ0IDEgKi8KIyBkZWZpbmUgU0RWT19EVERfQ0xPQ0tfTE9XCQkJCVNEVk9fSTJDX0FSR18wCiMgZGVmaW5lIFNEVk9fRFREX0NMT0NLX0hJR0gJCQkJU0RWT19JMkNfQVJHXzEKIyBkZWZpbmUgU0RWT19EVERfSF9BQ1RJVkUJCQkJU0RWT19JMkNfQVJHXzIKIyBkZWZpbmUgU0RWT19EVERfSF9CTEFOSwkJCQlTRFZPX0kyQ19BUkdfMwojIGRlZmluZSBTRFZPX0RURF9IX0hJR0gJCQkJU0RWT19JMkNfQVJHXzQKIyBkZWZpbmUgU0RWT19EVERfVl9BQ1RJVkUJCQkJU0RWT19JMkNfQVJHXzUKIyBkZWZpbmUgU0RWT19EVERfVl9CTEFOSwkJCQlTRFZPX0kyQ19BUkdfNgojIGRlZmluZSBTRFZPX0RURF9WX0hJR0gJCQkJU0RWT19JMkNfQVJHXzcKLyogUGFydCAyICovCiMgZGVmaW5lIFNEVk9fRFREX0hTWU5DX09GRgkJCQlTRFZPX0kyQ19BUkdfMAojIGRlZmluZSBTRFZPX0RURF9IU1lOQ19XSURUSAkJCQlTRFZPX0kyQ19BUkdfMQojIGRlZmluZSBTRFZPX0RURF9WU1lOQ19PRkZfV0lEVEgJCQlTRFZPX0kyQ19BUkdfMgojIGRlZmluZSBTRFZPX0RURF9TWU5DX09GRl9XSURUSF9ISUdICQkJU0RWT19JMkNfQVJHXzMKIyBkZWZpbmUgU0RWT19EVERfRFREX0ZMQUdTCQkJCVNEVk9fSTJDX0FSR180CiMgZGVmaW5lIFNEVk9fRFREX0RURF9GTEFHX0lOVEVSTEFDRUQJCQkJKDEgPDwgNykKIyBkZWZpbmUgU0RWT19EVERfRFREX0ZMQUdfU1RFUkVPX01BU0sJCQkJKDMgPDwgNSkKIyBkZWZpbmUgU0RWT19EVERfRFREX0ZMQUdfSU5QVVRfTUFTSwkJCQkoMyA8PCAzKQojIGRlZmluZSBTRFZPX0RURF9EVERfRkxBR19TWU5DX01BU0sJCQkJKDMgPDwgMSkKIyBkZWZpbmUgU0RWT19EVERfU0RWT19GTEFTCQkJCVNEVk9fSTJDX0FSR181CiMgZGVmaW5lIFNEVk9fRFREX1NEVk9fRkxBR19TVEFMTAkJCQkoMSA8PCA3KQojIGRlZmluZSBTRFZPX0RURF9TRFZPX0ZMQUdfQ0VOVEVSRUQJCQkJKDAgPDwgNikKIyBkZWZpbmUgU0RWT19EVERfU0RWT19GTEFHX1VQUEVSX0xFRlQJCQkJKDEgPDwgNikKIyBkZWZpbmUgU0RWT19EVERfU0RWT19GTEFHX1NDQUxJTkdfTUFTSwkJCSgzIDw8IDQpCiMgZGVmaW5lIFNEVk9fRFREX1NEVk9fRkxBR19TQ0FMSU5HX05PTkUJCQkoMCA8PCA0KQojIGRlZmluZSBTRFZPX0RURF9TRFZPX0ZMQUdfU0NBTElOR19TSEFSUAkJCSgxIDw8IDQpCiMgZGVmaW5lIFNEVk9fRFREX1NEVk9fRkxBR19TQ0FMSU5HX1NNT09USAkJCSgyIDw8IDQpCiMgZGVmaW5lIFNEVk9fRFREX1ZTWU5DX09GRl9ISUdICQkJU0RWT19JMkNfQVJHXzYKCi8qKgogKiBHZW5lcmF0ZXMgYSBEVEQgYmFzZWQgb24gdGhlIGdpdmVuIHdpZHRoLCBoZWlnaHQsIGFuZCBmbGFncy4KICoKICogVGhpcyB3aWxsIGJlIHN1cHBvcnRlZCBieSBhbnkgZGV2aWNlIHN1cHBvcnRpbmcgc2NhbGluZyBvciBpbnRlcmxhY2VkCiAqIG1vZGVzLgogKi8KI2RlZmluZSBTRFZPX0NNRF9DUkVBVEVfUFJFRkVSUkVEX0lOUFVUX1RJTUlORwkJMHgxYQojIGRlZmluZSBTRFZPX1BSRUZFUlJFRF9JTlBVVF9USU1JTkdfQ0xPQ0tfTE9XCQlTRFZPX0kyQ19BUkdfMAojIGRlZmluZSBTRFZPX1BSRUZFUlJFRF9JTlBVVF9USU1JTkdfQ0xPQ0tfSElHSAkJU0RWT19JMkNfQVJHXzEKIyBkZWZpbmUgU0RWT19QUkVGRVJSRURfSU5QVVRfVElNSU5HX1dJRFRIX0xPVwkJU0RWT19JMkNfQVJHXzIKIyBkZWZpbmUgU0RWT19QUkVGRVJSRURfSU5QVVRfVElNSU5HX1dJRFRIX0hJR0gJCVNEVk9fSTJDX0FSR18zCiMgZGVmaW5lIFNEVk9fUFJFRkVSUkVEX0lOUFVUX1RJTUlOR19IRUlHSFRfTE9XCQlTRFZPX0kyQ19BUkdfNAojIGRlZmluZSBTRFZPX1BSRUZFUlJFRF9JTlBVVF9USU1JTkdfSEVJR0hUX0hJR0gJU0RWT19JMkNfQVJHXzUKIyBkZWZpbmUgU0RWT19QUkVGRVJSRURfSU5QVVRfVElNSU5HX0ZMQUdTCQlTRFZPX0kyQ19BUkdfNgojIGRlZmluZSBTRFZPX1BSRUZFUlJFRF9JTlBVVF9USU1JTkdfRkxBR1NfSU5URVJMQUNFRAkJKDEgPDwgMCkKIyBkZWZpbmUgU0RWT19QUkVGRVJSRURfSU5QVVRfVElNSU5HX0ZMQUdTX1NDQUxFRAkJKDEgPDwgMSkKCiNkZWZpbmUgU0RWT19DTURfR0VUX1BSRUZFUlJFRF9JTlBVVF9USU1JTkdfUEFSVDEJMHgxYgojZGVmaW5lIFNEVk9fQ01EX0dFVF9QUkVGRVJSRURfSU5QVVRfVElNSU5HX1BBUlQyCTB4MWMKCi8qKiBSZXR1cm5zIGEgc3RydWN0IGludGVsX3Nkdm9fcGl4ZWxfY2xvY2tfcmFuZ2UgKi8KI2RlZmluZSBTRFZPX0NNRF9HRVRfSU5QVVRfUElYRUxfQ0xPQ0tfUkFOR0UJCTB4MWQKLyoqIFJldHVybnMgYSBzdHJ1Y3QgaW50ZWxfc2R2b19waXhlbF9jbG9ja19yYW5nZSAqLwojZGVmaW5lIFNEVk9fQ01EX0dFVF9PVVRQVVRfUElYRUxfQ0xPQ0tfUkFOR0UJCTB4MWUKCi8qKiBSZXR1cm5zIGEgYnl0ZSBiaXRmaWVsZCBjb250YWluaW5nIFNEVk9fQ0xPQ0tfUkFURV9NVUxUXyogZmxhZ3MgKi8KI2RlZmluZSBTRFZPX0NNRF9HRVRfU1VQUE9SVEVEX0NMT0NLX1JBVEVfTVVMVFMJCTB4MWYKCi8qKiBSZXR1cm5zIGEgYnl0ZSBjb250YWluaW5nIGEgU0RWT19DTE9DS19SQVRFX01VTFRfKiBmbGFnICovCiNkZWZpbmUgU0RWT19DTURfR0VUX0NMT0NLX1JBVEVfTVVMVAkJCTB4MjAKLyoqIFRha2VzIGEgYnl0ZSBjb250YWluaW5nIGEgU0RWT19DTE9DS19SQVRFX01VTFRfKiBmbGFnICovCiNkZWZpbmUgU0RWT19DTURfU0VUX0NMT0NLX1JBVEVfTVVMVAkJCTB4MjEKIyBkZWZpbmUgU0RWT19DTE9DS19SQVRFX01VTFRfMVgJCQkJKDEgPDwgMCkKIyBkZWZpbmUgU0RWT19DTE9DS19SQVRFX01VTFRfMlgJCQkJKDEgPDwgMSkKIyBkZWZpbmUgU0RWT19DTE9DS19SQVRFX01VTFRfNFgJCQkJKDEgPDwgMykKCiNkZWZpbmUgU0RWT19DTURfR0VUX1NVUFBPUlRFRF9UVl9GT1JNQVRTCQkweDI3Ci8qKiA1IGJ5dGVzIG9mIGJpdCBmbGFncyBmb3IgVFYgZm9ybWF0cyBzaGFyZWQgYnkgYWxsIFRWIGZvcm1hdCBmdW5jdGlvbnMgKi8Kc3RydWN0IGludGVsX3Nkdm9fdHZfZm9ybWF0IHsKICAgIHVuc2lnbmVkIGludCBudHNjX206MTsKICAgIHVuc2lnbmVkIGludCBudHNjX2o6MTsKICAgIHVuc2lnbmVkIGludCBudHNjXzQ0MzoxOwogICAgdW5zaWduZWQgaW50IHBhbF9iOjE7CiAgICB1bnNpZ25lZCBpbnQgcGFsX2Q6MTsKICAgIHVuc2lnbmVkIGludCBwYWxfZzoxOwogICAgdW5zaWduZWQgaW50IHBhbF9oOjE7CiAgICB1bnNpZ25lZCBpbnQgcGFsX2k6MTsKCiAgICB1bnNpZ25lZCBpbnQgcGFsX206MTsKICAgIHVuc2lnbmVkIGludCBwYWxfbjoxOwogICAgdW5zaWduZWQgaW50IHBhbF9uYzoxOwogICAgdW5zaWduZWQgaW50IHBhbF82MDoxOwogICAgdW5zaWduZWQgaW50IHNlY2FtX2I6MTsKICAgIHVuc2lnbmVkIGludCBzZWNhbV9kOjE7CiAgICB1bnNpZ25lZCBpbnQgc2VjYW1fZzoxOwogICAgdW5zaWduZWQgaW50IHNlY2FtX2s6MTsKCiAgICB1bnNpZ25lZCBpbnQgc2VjYW1fazE6MTsKICAgIHVuc2lnbmVkIGludCBzZWNhbV9sOjE7CiAgICB1bnNpZ25lZCBpbnQgc2VjYW1fNjA6MTsKICAgIHVuc2lnbmVkIGludCBoZHR2X3N0ZF9zbXB0ZV8yNDBtXzEwODBpXzU5OjE7CiAgICB1bnNpZ25lZCBpbnQgaGR0dl9zdGRfc21wdGVfMjQwbV8xMDgwaV82MDoxOwogICAgdW5zaWduZWQgaW50IGhkdHZfc3RkX3NtcHRlXzI2MG1fMTA4MGlfNTk6MTsKICAgIHVuc2lnbmVkIGludCBoZHR2X3N0ZF9zbXB0ZV8yNjBtXzEwODBpXzYwOjE7CiAgICB1bnNpZ25lZCBpbnQgaGR0dl9zdGRfc21wdGVfMjc0bV8xMDgwaV81MDoxOwoKICAgIHVuc2lnbmVkIGludCBoZHR2X3N0ZF9zbXB0ZV8yNzRtXzEwODBpXzU5OjE7CiAgICB1bnNpZ25lZCBpbnQgaGR0dl9zdGRfc21wdGVfMjc0bV8xMDgwaV82MDoxOwogICAgdW5zaWduZWQgaW50IGhkdHZfc3RkX3NtcHRlXzI3NG1fMTA4MHBfMjM6MTsKICAgIHVuc2lnbmVkIGludCBoZHR2X3N0ZF9zbXB0ZV8yNzRtXzEwODBwXzI0OjE7CiAgICB1bnNpZ25lZCBpbnQgaGR0dl9zdGRfc21wdGVfMjc0bV8xMDgwcF8yNToxOwogICAgdW5zaWduZWQgaW50IGhkdHZfc3RkX3NtcHRlXzI3NG1fMTA4MHBfMjk6MTsKICAgIHVuc2lnbmVkIGludCBoZHR2X3N0ZF9zbXB0ZV8yNzRtXzEwODBwXzMwOjE7CiAgICB1bnNpZ25lZCBpbnQgaGR0dl9zdGRfc21wdGVfMjc0bV8xMDgwcF81MDoxOwoKICAgIHVuc2lnbmVkIGludCBoZHR2X3N0ZF9zbXB0ZV8yNzRtXzEwODBwXzU5OjE7CiAgICB1bnNpZ25lZCBpbnQgaGR0dl9zdGRfc21wdGVfMjc0bV8xMDgwcF82MDoxOwogICAgdW5zaWduZWQgaW50IGhkdHZfc3RkX3NtcHRlXzI5NW1fMTA4MGlfNTA6MTsKICAgIHVuc2lnbmVkIGludCBoZHR2X3N0ZF9zbXB0ZV8yOTVtXzEwODBwXzUwOjE7CiAgICB1bnNpZ25lZCBpbnQgaGR0dl9zdGRfc21wdGVfMjk2bV83MjBwXzU5OjE7CiAgICB1bnNpZ25lZCBpbnQgaGR0dl9zdGRfc21wdGVfMjk2bV83MjBwXzYwOjE7CiAgICB1bnNpZ25lZCBpbnQgaGR0dl9zdGRfc21wdGVfMjk2bV83MjBwXzUwOjE7CiAgICB1bnNpZ25lZCBpbnQgaGR0dl9zdGRfc21wdGVfMjkzbV80ODBwXzU5OjE7CgogICAgdW5zaWduZWQgaW50IGhkdHZfc3RkX3NtcHRlXzE3MG1fNDgwaV81OToxOwogICAgdW5zaWduZWQgaW50IGhkdHZfc3RkX2l0dXJidDYwMV81NzZpXzUwOjE7CiAgICB1bnNpZ25lZCBpbnQgaGR0dl9zdGRfaXR1cmJ0NjAxXzU3NnBfNTA6MTsKICAgIHVuc2lnbmVkIGludCBoZHR2X3N0ZF9laWFfNzcwMmFfNDgwaV82MDoxOwogICAgdW5zaWduZWQgaW50IGhkdHZfc3RkX2VpYV83NzAyYV80ODBwXzYwOjE7CiAgICB1bnNpZ25lZCBpbnQgcGFkOjM7Cn0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CgojZGVmaW5lIFNEVk9fQ01EX0dFVF9UVl9GT1JNQVQJCQkJMHgyOAoKI2RlZmluZSBTRFZPX0NNRF9TRVRfVFZfRk9STUFUCQkJCTB4MjkKCi8qKiBSZXR1cm5zIHRoZSByZXNvbHV0aW9zbiB0aGF0IGNhbiBiZSB1c2VkIHdpdGggdGhlIGdpdmVuIFRWIGZvcm1hdCAqLwojZGVmaW5lIFNEVk9fQ01EX0dFVF9TRFRWX1JFU09MVVRJT05fU1VQUE9SVAkJMHg4MwpzdHJ1Y3QgaW50ZWxfc2R2b19zZHR2X3Jlc29sdXRpb25fcmVxdWVzdCB7CiAgICB1bnNpZ25lZCBpbnQgbnRzY19tOjE7CiAgICB1bnNpZ25lZCBpbnQgbnRzY19qOjE7CiAgICB1bnNpZ25lZCBpbnQgbnRzY180NDM6MTsKICAgIHVuc2lnbmVkIGludCBwYWxfYjoxOwogICAgdW5zaWduZWQgaW50IHBhbF9kOjE7CiAgICB1bnNpZ25lZCBpbnQgcGFsX2c6MTsKICAgIHVuc2lnbmVkIGludCBwYWxfaDoxOwogICAgdW5zaWduZWQgaW50IHBhbF9pOjE7CgogICAgdW5zaWduZWQgaW50IHBhbF9tOjE7CiAgICB1bnNpZ25lZCBpbnQgcGFsX246MTsKICAgIHVuc2lnbmVkIGludCBwYWxfbmM6MTsKICAgIHVuc2lnbmVkIGludCBwYWxfNjA6MTsKICAgIHVuc2lnbmVkIGludCBzZWNhbV9iOjE7CiAgICB1bnNpZ25lZCBpbnQgc2VjYW1fZDoxOwogICAgdW5zaWduZWQgaW50IHNlY2FtX2c6MTsKICAgIHVuc2lnbmVkIGludCBzZWNhbV9rOjE7CgogICAgdW5zaWduZWQgaW50IHNlY2FtX2sxOjE7CiAgICB1bnNpZ25lZCBpbnQgc2VjYW1fbDoxOwogICAgdW5zaWduZWQgaW50IHNlY2FtXzYwOjE7CiAgICB1bnNpZ25lZCBpbnQgcGFkOjU7Cn0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CgpzdHJ1Y3QgaW50ZWxfc2R2b19zZHR2X3Jlc29sdXRpb25fcmVwbHkgewogICAgdW5zaWduZWQgaW50IHJlc18zMjB4MjAwOjE7CiAgICB1bnNpZ25lZCBpbnQgcmVzXzMyMHgyNDA6MTsKICAgIHVuc2lnbmVkIGludCByZXNfNDAweDMwMDoxOwogICAgdW5zaWduZWQgaW50IHJlc182NDB4MzUwOjE7CiAgICB1bnNpZ25lZCBpbnQgcmVzXzY0MHg0MDA6MTsKICAgIHVuc2lnbmVkIGludCByZXNfNjQweDQ4MDoxOwogICAgdW5zaWduZWQgaW50IHJlc183MDR4NDgwOjE7CiAgICB1bnNpZ25lZCBpbnQgcmVzXzcwNHg1NzY6MTsKCiAgICB1bnNpZ25lZCBpbnQgcmVzXzcyMHgzNTA6MTsKICAgIHVuc2lnbmVkIGludCByZXNfNzIweDQwMDoxOwogICAgdW5zaWduZWQgaW50IHJlc183MjB4NDgwOjE7CiAgICB1bnNpZ25lZCBpbnQgcmVzXzcyMHg1NDA6MTsKICAgIHVuc2lnbmVkIGludCByZXNfNzIweDU3NjoxOwogICAgdW5zaWduZWQgaW50IHJlc183Njh4NTc2OjE7CiAgICB1bnNpZ25lZCBpbnQgcmVzXzgwMHg2MDA6MTsKICAgIHVuc2lnbmVkIGludCByZXNfODMyeDYyNDoxOwoKICAgIHVuc2lnbmVkIGludCByZXNfOTIweDc2NjoxOwogICAgdW5zaWduZWQgaW50IHJlc18xMDI0eDc2ODoxOwogICAgdW5zaWduZWQgaW50IHJlc18xMjgweDEwMjQ6MTsKICAgIHVuc2lnbmVkIGludCBwYWQ6NTsKfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKCi8qIEdldCBzdXBwb3J0ZWQgcmVzb2x1dGlvbiB3aXRoIHNxdWlyZSBwaXhlbCBhc3BlY3QgcmF0aW8gdGhhdCBjYW4gYmUKICAgc2NhbGVkIGZvciB0aGUgcmVxdWVzdGVkIEhEVFYgZm9ybWF0ICovCiNkZWZpbmUgU0RWT19DTURfR0VUX1NDQUxFRF9IRFRWX1JFU09MVVRJT05fU1VQUE9SVAkJMHg4NQoKc3RydWN0IGludGVsX3Nkdm9faGR0dl9yZXNvbHV0aW9uX3JlcXVlc3QgewogICAgdW5zaWduZWQgaW50IGhkdHZfc3RkX3NtcHRlXzI0MG1fMTA4MGlfNTk6MTsKICAgIHVuc2lnbmVkIGludCBoZHR2X3N0ZF9zbXB0ZV8yNDBtXzEwODBpXzYwOjE7CiAgICB1bnNpZ25lZCBpbnQgaGR0dl9zdGRfc21wdGVfMjYwbV8xMDgwaV81OToxOwogICAgdW5zaWduZWQgaW50IGhkdHZfc3RkX3NtcHRlXzI2MG1fMTA4MGlfNjA6MTsKICAgIHVuc2lnbmVkIGludCBoZHR2X3N0ZF9zbXB0ZV8yNzRtXzEwODBpXzUwOjE7CiAgICB1bnNpZ25lZCBpbnQgaGR0dl9zdGRfc21wdGVfMjc0bV8xMDgwaV81OToxOwogICAgdW5zaWduZWQgaW50IGhkdHZfc3RkX3NtcHRlXzI3NG1fMTA4MGlfNjA6MTsKICAgIHVuc2lnbmVkIGludCBoZHR2X3N0ZF9zbXB0ZV8yNzRtXzEwODBwXzIzOjE7CgogICAgdW5zaWduZWQgaW50IGhkdHZfc3RkX3NtcHRlXzI3NG1fMTA4MHBfMjQ6MTsKICAgIHVuc2lnbmVkIGludCBoZHR2X3N0ZF9zbXB0ZV8yNzRtXzEwODBwXzI1OjE7CiAgICB1bnNpZ25lZCBpbnQgaGR0dl9zdGRfc21wdGVfMjc0bV8xMDgwcF8yOToxOwogICAgdW5zaWduZWQgaW50IGhkdHZfc3RkX3NtcHRlXzI3NG1fMTA4MHBfMzA6MTsKICAgIHVuc2lnbmVkIGludCBoZHR2X3N0ZF9zbXB0ZV8yNzRtXzEwODBwXzUwOjE7CiAgICB1bnNpZ25lZCBpbnQgaGR0dl9zdGRfc21wdGVfMjc0bV8xMDgwcF81OToxOwogICAgdW5zaWduZWQgaW50IGhkdHZfc3RkX3NtcHRlXzI3NG1fMTA4MHBfNjA6MTsKICAgIHVuc2lnbmVkIGludCBoZHR2X3N0ZF9zbXB0ZV8yOTVtXzEwODBpXzUwOjE7CgogICAgdW5zaWduZWQgaW50IGhkdHZfc3RkX3NtcHRlXzI5NW1fMTA4MHBfNTA6MTsKICAgIHVuc2lnbmVkIGludCBoZHR2X3N0ZF9zbXB0ZV8yOTZtXzcyMHBfNTk6MTsKICAgIHVuc2lnbmVkIGludCBoZHR2X3N0ZF9zbXB0ZV8yOTZtXzcyMHBfNjA6MTsKICAgIHVuc2lnbmVkIGludCBoZHR2X3N0ZF9zbXB0ZV8yOTZtXzcyMHBfNTA6MTsKICAgIHVuc2lnbmVkIGludCBoZHR2X3N0ZF9zbXB0ZV8yOTNtXzQ4MHBfNTk6MTsKICAgIHVuc2lnbmVkIGludCBoZHR2X3N0ZF9zbXB0ZV8xNzBtXzQ4MGlfNTk6MTsKICAgIHVuc2lnbmVkIGludCBoZHR2X3N0ZF9pdHVyYnQ2MDFfNTc2aV81MDoxOwogICAgdW5zaWduZWQgaW50IGhkdHZfc3RkX2l0dXJidDYwMV81NzZwXzUwOjE7CgogICAgdW5zaWduZWQgaW50IGhkdHZfc3RkX2VpYV83NzAyYV80ODBpXzYwOjE7CiAgICB1bnNpZ25lZCBpbnQgaGR0dl9zdGRfZWlhXzc3MDJhXzQ4MHBfNjA6MTsKICAgIHVuc2lnbmVkIGludCBwYWQ6NjsKfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKCnN0cnVjdCBpbnRlbF9zZHZvX2hkdHZfcmVzb2x1dGlvbl9yZXBseSB7CiAgICB1bnNpZ25lZCBpbnQgcmVzXzY0MHg0ODA6MTsKICAgIHVuc2lnbmVkIGludCByZXNfODAweDYwMDoxOwogICAgdW5zaWduZWQgaW50IHJlc18xMDI0eDc2ODoxOwogICAgdW5zaWduZWQgaW50IHJlc18xMjgweDk2MDoxOwogICAgdW5zaWduZWQgaW50IHJlc18xNDAweDEwNTA6MTsKICAgIHVuc2lnbmVkIGludCByZXNfMTYwMHgxMjAwOjE7CiAgICB1bnNpZ25lZCBpbnQgcmVzXzE5MjB4MTQ0MDoxOwogICAgdW5zaWduZWQgaW50IHJlc18yMDQ4eDE1MzY6MTsKCiAgICB1bnNpZ25lZCBpbnQgcmVzXzI1NjB4MTkyMDoxOwogICAgdW5zaWduZWQgaW50IHJlc18zMjAweDI0MDA6MTsKICAgIHVuc2lnbmVkIGludCByZXNfMzg0MHgyODgwOjE7CiAgICB1bnNpZ25lZCBpbnQgcGFkMTo1OwoKICAgIHVuc2lnbmVkIGludCByZXNfODQ4eDQ4MDoxOwogICAgdW5zaWduZWQgaW50IHJlc18xMDY0eDYwMDoxOwogICAgdW5zaWduZWQgaW50IHJlc18xMjgweDcyMDoxOwogICAgdW5zaWduZWQgaW50IHJlc18xMzYweDc2ODoxOwogICAgdW5zaWduZWQgaW50IHJlc18xNzA0eDk2MDoxOwogICAgdW5zaWduZWQgaW50IHJlc18xODY0eDEwNTA6MTsKICAgIHVuc2lnbmVkIGludCByZXNfMTkyMHgxMDgwOjE7CiAgICB1bnNpZ25lZCBpbnQgcmVzXzIxMjh4MTIwMDoxOwoKICAgIHVuc2lnbmVkIGludCByZXNfMjU2MHgxNDAwOjE7CiAgICB1bnNpZ25lZCBpbnQgcmVzXzI3Mjh4MTUzNjoxOwogICAgdW5zaWduZWQgaW50IHJlc18zNDA4eDE5MjA6MTsKICAgIHVuc2lnbmVkIGludCByZXNfNDI2NHgyNDAwOjE7CiAgICB1bnNpZ25lZCBpbnQgcmVzXzUxMjB4Mjg4MDoxOwogICAgdW5zaWduZWQgaW50IHBhZDI6MzsKCiAgICB1bnNpZ25lZCBpbnQgcmVzXzc2OHg0ODA6MTsKICAgIHVuc2lnbmVkIGludCByZXNfOTYweDYwMDoxOwogICAgdW5zaWduZWQgaW50IHJlc18xMTUyeDcyMDoxOwogICAgdW5zaWduZWQgaW50IHJlc18xMTI0eDc2ODoxOwogICAgdW5zaWduZWQgaW50IHJlc18xNTM2eDk2MDoxOwogICAgdW5zaWduZWQgaW50IHJlc18xNjgweDEwNTA6MTsKICAgIHVuc2lnbmVkIGludCByZXNfMTcyOHgxMDgwOjE7CiAgICB1bnNpZ25lZCBpbnQgcmVzXzE5MjB4MTIwMDoxOwoKICAgIHVuc2lnbmVkIGludCByZXNfMjMwNHgxNDQwOjE7CiAgICB1bnNpZ25lZCBpbnQgcmVzXzI0NTZ4MTUzNjoxOwogICAgdW5zaWduZWQgaW50IHJlc18zMDcyeDE5MjA6MTsKICAgIHVuc2lnbmVkIGludCByZXNfMzg0MHgyNDAwOjE7CiAgICB1bnNpZ25lZCBpbnQgcmVzXzQ2MDh4Mjg4MDoxOwogICAgdW5zaWduZWQgaW50IHBhZDM6MzsKCiAgICB1bnNpZ25lZCBpbnQgcmVzXzEyODB4MTAyNDoxOwogICAgdW5zaWduZWQgaW50IHBhZDQ6NzsKCiAgICB1bnNpZ25lZCBpbnQgcmVzXzEyODB4NzY4OjE7CiAgICB1bnNpZ25lZCBpbnQgcGFkNTo3Owp9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwoKLyogR2V0IHN1cHBvcnRlZCBwb3dlciBzdGF0ZSByZXR1cm5zIGluZm8gZm9yIGVuY29kZXIgYW5kIG1vbml0b3IsIHJlbHkgb24KICAgbGFzdCBTZXRUYXJnZXRJbnB1dCBhbmQgU2V0VGFyZ2V0T3V0cHV0IGNhbGxzICovCiNkZWZpbmUgU0RWT19DTURfR0VUX1NVUFBPUlRFRF9QT1dFUl9TVEFURVMJCTB4MmEKLyogR2V0IHBvd2VyIHN0YXRlIHJldHVybnMgaW5mbyBmb3IgZW5jb2RlciBhbmQgbW9uaXRvciwgcmVseSBvbiBsYXN0CiAgIFNldFRhcmdldElucHV0IGFuZCBTZXRUYXJnZXRPdXRwdXQgY2FsbHMgKi8KI2RlZmluZSBTRFZPX0NNRF9HRVRfUE9XRVJfU1RBVEUJCQkweDJiCiNkZWZpbmUgU0RWT19DTURfR0VUX0VOQ09ERVJfUE9XRVJfU1RBVEUJCTB4MmIKI2RlZmluZSBTRFZPX0NNRF9TRVRfRU5DT0RFUl9QT1dFUl9TVEFURQkJMHgyYwojIGRlZmluZSBTRFZPX0VOQ09ERVJfU1RBVEVfT04JCQkJCSgxIDw8IDApCiMgZGVmaW5lIFNEVk9fRU5DT0RFUl9TVEFURV9TVEFOREJZCQkJCSgxIDw8IDEpCiMgZGVmaW5lIFNEVk9fRU5DT0RFUl9TVEFURV9TVVNQRU5ECQkJCSgxIDw8IDIpCiMgZGVmaW5lIFNEVk9fRU5DT0RFUl9TVEFURV9PRkYJCQkJCSgxIDw8IDMpCiMgZGVmaW5lIFNEVk9fTU9OSVRPUl9TVEFURV9PTgkJCQkJKDEgPDwgNCkKIyBkZWZpbmUgU0RWT19NT05JVE9SX1NUQVRFX1NUQU5EQlkJCQkJKDEgPDwgNSkKIyBkZWZpbmUgU0RWT19NT05JVE9SX1NUQVRFX1NVU1BFTkQJCQkJKDEgPDwgNikKIyBkZWZpbmUgU0RWT19NT05JVE9SX1NUQVRFX09GRgkJCQkJKDEgPDwgNykKCiNkZWZpbmUgU0RWT19DTURfR0VUX01BWF9QQU5FTF9QT1dFUl9TRVFVRU5DSU5HCQkweDJkCiNkZWZpbmUgU0RWT19DTURfR0VUX1BBTkVMX1BPV0VSX1NFUVVFTkNJTkcJCTB4MmUKI2RlZmluZSBTRFZPX0NNRF9TRVRfUEFORUxfUE9XRVJfU0VRVUVOQ0lORwkJMHgyZgovKioKICogVGhlIHBhbmVsIHBvd2VyIHNlcXVlbmNpbmcgcGFyYW1ldGVycyBhcmUgaW4gdW5pdHMgb2YgbWlsbGlzZWNvbmRzLgogKiBUaGUgaGlnaCBmaWVsZHMgYXJlIGJpdHMgODo5IG9mIHRoZSAxMC1iaXQgdmFsdWVzLgogKi8Kc3RydWN0IHNkdm9fcGFuZWxfcG93ZXJfc2VxdWVuY2luZyB7CiAgICB1OCB0MDsKICAgIHU4IHQxOwogICAgdTggdDI7CiAgICB1OCB0MzsKICAgIHU4IHQ0OwoKICAgIHVuc2lnbmVkIGludCB0MF9oaWdoOjI7CiAgICB1bnNpZ25lZCBpbnQgdDFfaGlnaDoyOwogICAgdW5zaWduZWQgaW50IHQyX2hpZ2g6MjsKICAgIHVuc2lnbmVkIGludCB0M19oaWdoOjI7CgogICAgdW5zaWduZWQgaW50IHQ0X2hpZ2g6MjsKICAgIHVuc2lnbmVkIGludCBwYWQ6NjsKfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKCiNkZWZpbmUgU0RWT19DTURfR0VUX01BWF9CQUNLTElHSFRfTEVWRUwJCTB4MzAKc3RydWN0IHNkdm9fbWF4X2JhY2tsaWdodF9yZXBseSB7CiAgICB1OCBtYXhfdmFsdWU7CiAgICB1OCBkZWZhdWx0X3ZhbHVlOwp9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwoKI2RlZmluZSBTRFZPX0NNRF9HRVRfQkFDS0xJR0hUX0xFVkVMCQkJMHgzMQojZGVmaW5lIFNEVk9fQ01EX1NFVF9CQUNLTElHSFRfTEVWRUwJCQkweDMyCgojZGVmaW5lIFNEVk9fQ01EX0dFVF9BTUJJRU5UX0xJR0hUCQkJMHgzMwpzdHJ1Y3Qgc2R2b19nZXRfYW1iaWVudF9saWdodF9yZXBseSB7CiAgICB1MTYgdHJpcF9sb3c7CiAgICB1MTYgdHJpcF9oaWdoOwogICAgdTE2IHZhbHVlOwp9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwojZGVmaW5lIFNEVk9fQ01EX1NFVF9BTUJJRU5UX0xJR0hUCQkJMHgzNApzdHJ1Y3Qgc2R2b19zZXRfYW1iaWVudF9saWdodF9yZXBseSB7CiAgICB1MTYgdHJpcF9sb3c7CiAgICB1MTYgdHJpcF9oaWdoOwogICAgdW5zaWduZWQgaW50IGVuYWJsZToxOwogICAgdW5zaWduZWQgaW50IHBhZDo3Owp9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwoKLyogU2V0IGRpc3BsYXkgcG93ZXIgc3RhdGUgKi8KI2RlZmluZSBTRFZPX0NNRF9TRVRfRElTUExBWV9QT1dFUl9TVEFURQkJMHg3ZAojIGRlZmluZSBTRFZPX0RJU1BMQVlfU1RBVEVfT04JCQkJKDEgPDwgMCkKIyBkZWZpbmUgU0RWT19ESVNQTEFZX1NUQVRFX1NUQU5EQlkJCQkoMSA8PCAxKQojIGRlZmluZSBTRFZPX0RJU1BMQVlfU1RBVEVfU1VTUEVORAkJCSgxIDw8IDIpCiMgZGVmaW5lIFNEVk9fRElTUExBWV9TVEFURV9PRkYJCQkJKDEgPDwgMykKCiNkZWZpbmUgU0RWT19DTURfR0VUX1NVUFBPUlRFRF9FTkhBTkNFTUVOVFMJCTB4ODQKc3RydWN0IGludGVsX3Nkdm9fZW5oYW5jZW1lbnRzX3JlcGx5IHsKICAgIHVuc2lnbmVkIGludCBmbGlja2VyX2ZpbHRlcjoxOwogICAgdW5zaWduZWQgaW50IGZsaWNrZXJfZmlsdGVyX2FkYXB0aXZlOjE7CiAgICB1bnNpZ25lZCBpbnQgZmxpY2tlcl9maWx0ZXJfMmQ6MTsKICAgIHVuc2lnbmVkIGludCBzYXR1cmF0aW9uOjE7CiAgICB1bnNpZ25lZCBpbnQgaHVlOjE7CiAgICB1bnNpZ25lZCBpbnQgYnJpZ2h0bmVzczoxOwogICAgdW5zaWduZWQgaW50IGNvbnRyYXN0OjE7CiAgICB1bnNpZ25lZCBpbnQgb3ZlcnNjYW5faDoxOwoKICAgIHVuc2lnbmVkIGludCBvdmVyc2Nhbl92OjE7CiAgICB1bnNpZ25lZCBpbnQgcG9zaXRpb25faDoxOwogICAgdW5zaWduZWQgaW50IHBvc2l0aW9uX3Y6MTsKICAgIHVuc2lnbmVkIGludCBzaGFycG5lc3M6MTsKICAgIHVuc2lnbmVkIGludCBkb3RfY3Jhd2w6MTsKICAgIHVuc2lnbmVkIGludCBkaXRoZXI6MTsKICAgIHVuc2lnbmVkIGludCBtYXhfdHZfY2hyb21hX2ZpbHRlcjoxOwogICAgdW5zaWduZWQgaW50IG1heF90dl9sdW1hX2ZpbHRlcjoxOwp9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwoKLyogUGljdHVyZSBlbmhhbmNlbWVudCBsaW1pdHMgYmVsb3cgYXJlIGRlcGVuZGVudCBvbiB0aGUgY3VycmVudCBUViBmb3JtYXQsCiAqIGFuZCB0aHVzIG5lZWQgdG8gYmUgcXVlcmllZCBhbmQgc2V0IGFmdGVyIGl0LgogKi8KI2RlZmluZSBTRFZPX0NNRF9HRVRfTUFYX0ZMSUNLRVJfRklURVIJCQkweDRkCiNkZWZpbmUgU0RWT19DTURfR0VUX01BWF9BREFQVElWRV9GTElDS0VSX0ZJVEVSCQkweDdiCiNkZWZpbmUgU0RWT19DTURfR0VUX01BWF8yRF9GTElDS0VSX0ZJVEVSCQkweDUyCiNkZWZpbmUgU0RWT19DTURfR0VUX01BWF9TQVRVUkFUSU9OCQkJMHg1NQojZGVmaW5lIFNEVk9fQ01EX0dFVF9NQVhfSFVFCQkJCTB4NTgKI2RlZmluZSBTRFZPX0NNRF9HRVRfTUFYX0JSSUdIVE5FU1MJCQkweDViCiNkZWZpbmUgU0RWT19DTURfR0VUX01BWF9DT05UUkFTVAkJCTB4NWUKI2RlZmluZSBTRFZPX0NNRF9HRVRfTUFYX09WRVJTQ0FOX0gJCQkweDYxCiNkZWZpbmUgU0RWT19DTURfR0VUX01BWF9PVkVSU0NBTl9WCQkJMHg2NAojZGVmaW5lIFNEVk9fQ01EX0dFVF9NQVhfUE9TSVRJT05fSAkJCTB4NjcKI2RlZmluZSBTRFZPX0NNRF9HRVRfTUFYX1BPU0lUSU9OX1YJCQkweDZhCiNkZWZpbmUgU0RWT19DTURfR0VUX01BWF9TSEFSUE5FU1NfVgkJCTB4NmQKI2RlZmluZSBTRFZPX0NNRF9HRVRfTUFYX1RWX0NIUk9NQQkJCTB4NzQKI2RlZmluZSBTRFZPX0NNRF9HRVRfTUFYX1RWX0xVTUEJCQkweDc3CnN0cnVjdCBpbnRlbF9zZHZvX2VuaGFuY2VtZW50X2xpbWl0c19yZXBseSB7CiAgICB1MTYgbWF4X3ZhbHVlOwogICAgdTE2IGRlZmF1bHRfdmFsdWU7Cn0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CgojZGVmaW5lIFNEVk9fQ01EX0dFVF9MVkRTX1BBTkVMX0lORk9STUFUSU9OCQkweDdmCiNkZWZpbmUgU0RWT19DTURfU0VUX0xWRFNfUEFORUxfSU5GT1JNQVRJT04JCTB4ODAKIyBkZWZpbmUgU0RWT19MVkRTX0NPTE9SX0RFUFRIXzE4CQkJKDAgPDwgMCkKIyBkZWZpbmUgU0RWT19MVkRTX0NPTE9SX0RFUFRIXzI0CQkJKDEgPDwgMCkKIyBkZWZpbmUgU0RWT19MVkRTX0NPTk5FQ1RPUl9TUFdHCQkJKDAgPDwgMikKIyBkZWZpbmUgU0RWT19MVkRTX0NPTk5FQ1RPUl9PUEVOTERJCQkJKDEgPDwgMikKIyBkZWZpbmUgU0RWT19MVkRTX1NJTkdMRV9DSEFOTkVMCQkJKDAgPDwgNCkKIyBkZWZpbmUgU0RWT19MVkRTX0RVQUxfQ0hBTk5FTAkJCQkoMSA8PCA0KQoKI2RlZmluZSBTRFZPX0NNRF9HRVRfRkxJQ0tFUl9GSUxURVIJCQkweDRlCiNkZWZpbmUgU0RWT19DTURfU0VUX0ZMSUNLRVJfRklMVEVSCQkJMHg0ZgojZGVmaW5lIFNEVk9fQ01EX0dFVF9BREFQVElWRV9GTElDS0VSX0ZJVEVSCQkweDUwCiNkZWZpbmUgU0RWT19DTURfU0VUX0FEQVBUSVZFX0ZMSUNLRVJfRklURVIJCTB4NTEKI2RlZmluZSBTRFZPX0NNRF9HRVRfMkRfRkxJQ0tFUl9GSVRFUgkJCTB4NTMKI2RlZmluZSBTRFZPX0NNRF9TRVRfMkRfRkxJQ0tFUl9GSVRFUgkJCTB4NTQKI2RlZmluZSBTRFZPX0NNRF9HRVRfU0FUVVJBVElPTgkJCQkweDU2CiNkZWZpbmUgU0RWT19DTURfU0VUX1NBVFVSQVRJT04JCQkJMHg1NwojZGVmaW5lIFNEVk9fQ01EX0dFVF9IVUUJCQkJMHg1OQojZGVmaW5lIFNEVk9fQ01EX1NFVF9IVUUJCQkJMHg1YQojZGVmaW5lIFNEVk9fQ01EX0dFVF9CUklHSFRORVNTCQkJCTB4NWMKI2RlZmluZSBTRFZPX0NNRF9TRVRfQlJJR0hUTkVTUwkJCQkweDVkCiNkZWZpbmUgU0RWT19DTURfR0VUX0NPTlRSQVNUCQkJCTB4NWYKI2RlZmluZSBTRFZPX0NNRF9TRVRfQ09OVFJBU1QJCQkJMHg2MAojZGVmaW5lIFNEVk9fQ01EX0dFVF9PVkVSU0NBTl9ICQkJCTB4NjIKI2RlZmluZSBTRFZPX0NNRF9TRVRfT1ZFUlNDQU5fSAkJCQkweDYzCiNkZWZpbmUgU0RWT19DTURfR0VUX09WRVJTQ0FOX1YJCQkJMHg2NQojZGVmaW5lIFNEVk9fQ01EX1NFVF9PVkVSU0NBTl9WCQkJCTB4NjYKI2RlZmluZSBTRFZPX0NNRF9HRVRfUE9TSVRJT05fSAkJCQkweDY4CiNkZWZpbmUgU0RWT19DTURfU0VUX1BPU0lUSU9OX0gJCQkJMHg2OQojZGVmaW5lIFNEVk9fQ01EX0dFVF9QT1NJVElPTl9WCQkJCTB4NmIKI2RlZmluZSBTRFZPX0NNRF9TRVRfUE9TSVRJT05fVgkJCQkweDZjCiNkZWZpbmUgU0RWT19DTURfR0VUX1NIQVJQTkVTUwkJCQkweDZlCiNkZWZpbmUgU0RWT19DTURfU0VUX1NIQVJQTkVTUwkJCQkweDZmCiNkZWZpbmUgU0RWT19DTURfR0VUX1RWX0NIUk9NQQkJCQkweDc1CiNkZWZpbmUgU0RWT19DTURfU0VUX1RWX0NIUk9NQQkJCQkweDc2CiNkZWZpbmUgU0RWT19DTURfR0VUX1RWX0xVTUEJCQkJMHg3OAojZGVmaW5lIFNEVk9fQ01EX1NFVF9UVl9MVU1BCQkJCTB4NzkKc3RydWN0IGludGVsX3Nkdm9fZW5oYW5jZW1lbnRzX2FyZyB7CiAgICB1MTYgdmFsdWU7Cn1fX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKCiNkZWZpbmUgU0RWT19DTURfR0VUX0RPVF9DUkFXTAkJCQkweDcwCiNkZWZpbmUgU0RWT19DTURfU0VUX0RPVF9DUkFXTAkJCQkweDcxCiMgZGVmaW5lIFNEVk9fRE9UX0NSQVdMX09OCQkJCQkoMSA8PCAwKQojIGRlZmluZSBTRFZPX0RPVF9DUkFXTF9ERUZBVUxUX09OCQkJCSgxIDw8IDEpCgojZGVmaW5lIFNEVk9fQ01EX0dFVF9ESVRIRVIJCQkJMHg3MgojZGVmaW5lIFNEVk9fQ01EX1NFVF9ESVRIRVIJCQkJMHg3MwojIGRlZmluZSBTRFZPX0RJVEhFUl9PTgkJCQkJCSgxIDw8IDApCiMgZGVmaW5lIFNEVk9fRElUSEVSX0RFRkFVTFRfT04JCQkJCSgxIDw8IDEpCgojZGVmaW5lIFNEVk9fQ01EX1NFVF9DT05UUk9MX0JVU19TV0lUQ0gJCQkweDdhCiMgZGVmaW5lIFNEVk9fQ09OVFJPTF9CVVNfUFJPTQkJCQkoMSA8PCAwKQojIGRlZmluZSBTRFZPX0NPTlRST0xfQlVTX0REQzEJCQkJKDEgPDwgMSkKIyBkZWZpbmUgU0RWT19DT05UUk9MX0JVU19EREMyCQkJCSgxIDw8IDIpCiMgZGVmaW5lIFNEVk9fQ09OVFJPTF9CVVNfRERDMwkJCQkoMSA8PCAzKQoKLyogSERNSSBvcCBjb2RlcyAqLwojZGVmaW5lIFNEVk9fQ01EX0dFVF9TVVBQX0VOQ09ERQkweDlkCiNkZWZpbmUgU0RWT19DTURfR0VUX0VOQ09ERQkJMHg5ZQojZGVmaW5lIFNEVk9fQ01EX1NFVF9FTkNPREUJCTB4OWYKICAjZGVmaW5lIFNEVk9fRU5DT0RFX0RWSQkweDAKICAjZGVmaW5lIFNEVk9fRU5DT0RFX0hETUkJMHgxCiNkZWZpbmUgU0RWT19DTURfU0VUX1BJWEVMX1JFUExJCTB4OGIKI2RlZmluZSBTRFZPX0NNRF9HRVRfUElYRUxfUkVQTEkJMHg4YwojZGVmaW5lIFNEVk9fQ01EX0dFVF9DT0xPUklNRVRSWV9DQVAJMHg4ZAojZGVmaW5lIFNEVk9fQ01EX1NFVF9DT0xPUklNRVRSWQkweDhlCiAgI2RlZmluZSBTRFZPX0NPTE9SSU1FVFJZX1JHQjI1NiAgIDB4MAogICNkZWZpbmUgU0RWT19DT0xPUklNRVRSWV9SR0IyMjAgICAweDEKICAjZGVmaW5lIFNEVk9fQ09MT1JJTUVUUllfWUNyQ2I0MjIgMHgzCiAgI2RlZmluZSBTRFZPX0NPTE9SSU1FVFJZX1lDckNiNDQ0IDB4NAojZGVmaW5lIFNEVk9fQ01EX0dFVF9DT0xPUklNRVRSWQkweDhmCiNkZWZpbmUgU0RWT19DTURfR0VUX0FVRElPX0VOQ1JZUFRfUFJFRkVSIDB4OTAKI2RlZmluZSBTRFZPX0NNRF9TRVRfQVVESU9fU1RBVAkJMHg5MQojZGVmaW5lIFNEVk9fQ01EX0dFVF9BVURJT19TVEFUCQkweDkyCiNkZWZpbmUgU0RWT19DTURfU0VUX0hCVUZfSU5ERVgJCTB4OTMKI2RlZmluZSBTRFZPX0NNRF9HRVRfSEJVRl9JTkRFWAkJMHg5NAojZGVmaW5lIFNEVk9fQ01EX0dFVF9IQlVGX0lORk8JCTB4OTUKI2RlZmluZSBTRFZPX0NNRF9TRVRfSEJVRl9BVl9TUExJVAkweDk2CiNkZWZpbmUgU0RWT19DTURfR0VUX0hCVUZfQVZfU1BMSVQJMHg5NwojZGVmaW5lIFNEVk9fQ01EX1NFVF9IQlVGX0RBVEEJCTB4OTgKI2RlZmluZSBTRFZPX0NNRF9HRVRfSEJVRl9EQVRBCQkweDk5CiNkZWZpbmUgU0RWT19DTURfU0VUX0hCVUZfVFhSQVRFCTB4OWEKI2RlZmluZSBTRFZPX0NNRF9HRVRfSEJVRl9UWFJBVEUJMHg5YgogICNkZWZpbmUgU0RWT19IQlVGX1RYX0RJU0FCTEVECSgwIDw8IDYpCiAgI2RlZmluZSBTRFZPX0hCVUZfVFhfT05DRQkoMiA8PCA2KQogICNkZWZpbmUgU0RWT19IQlVGX1RYX1ZTWU5DCSgzIDw8IDYpCiNkZWZpbmUgU0RWT19DTURfR0VUX0FVRElPX1RYX0lORk8JMHg5YwojZGVmaW5lIFNEVk9fTkVFRF9UT19TVEFMTCAgKDEgPDwgNykKCnN0cnVjdCBpbnRlbF9zZHZvX2VuY29kZXsKICAgIHU4IGR2aV9yZXY7CiAgICB1OCBoZG1pX3JldjsKfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cg==