ZGlmZiAtLWdpdCBhL0luYy9MZWdhY3kvc3RtMzJfaGFsX2xlZ2FjeS5oIGIvSW5jL0xlZ2FjeS9zdG0zMl9oYWxfbGVnYWN5LmgKaW5kZXggYjBjOGQ2Yy4uYjU5ZmY2ZCAxMDA2NDQKLS0tIGEvSW5jL0xlZ2FjeS9zdG0zMl9oYWxfbGVnYWN5LmgKKysrIGIvSW5jL0xlZ2FjeS9zdG0zMl9oYWxfbGVnYWN5LmgKQEAgLTcsNyArNyw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogQ29weXJpZ2h0IChjKSAyMDIxIFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlCkBAIC0zNyw2ICszNywxNiBAQAogI2RlZmluZSBBRVNfQ0xFQVJGTEFHX0NDRiAgICAgICAgICAgICAgIENSWVBfQ0xFQVJGTEFHX0NDRgogI2RlZmluZSBBRVNfQ0xFQVJGTEFHX1JERVJSICAgICAgICAgICAgIENSWVBfQ0xFQVJGTEFHX1JERVJSCiAjZGVmaW5lIEFFU19DTEVBUkZMQUdfV1JFUlIgICAgICAgICAgICAgQ1JZUF9DTEVBUkZMQUdfV1JFUlIKKyNpZiBkZWZpbmVkKFNUTTMyVTUpIHx8IGRlZmluZWQoU1RNMzJINykgfHwgZGVmaW5lZChTVE0zMk1QMSkKKyNkZWZpbmUgQ1JZUF9EQVRBVFlQRV8zMkIgICAgICAgICAgICAgICBDUllQX05PX1NXQVAKKyNkZWZpbmUgQ1JZUF9EQVRBVFlQRV8xNkIgICAgICAgICAgICAgICBDUllQX0hBTEZXT1JEX1NXQVAKKyNkZWZpbmUgQ1JZUF9EQVRBVFlQRV84QiAgICAgICAgICAgICAgICBDUllQX0JZVEVfU1dBUAorI2RlZmluZSBDUllQX0RBVEFUWVBFXzFCICAgICAgICAgICAgICAgIENSWVBfQklUX1NXQVAKKyNpZiBkZWZpbmVkKFNUTTMyVTUpCisjZGVmaW5lIENSWVBfQ0NGX0NMRUFSICAgICAgICAgICAgICAgICAgQ1JZUF9DTEVBUl9DQ0YKKyNkZWZpbmUgQ1JZUF9FUlJfQ0xFQVIgICAgICAgICAgICAgICAgICBDUllQX0NMRUFSX1JXRUlGCisjZW5kaWYgLyogU1RNMzJVNSAqLworI2VuZGlmIC8qIFNUTTMyVTUgfHwgU1RNMzJINyB8fCBTVE0zMk1QMSAqLwogLyoqCiAgICogQH0KICAgKi8KQEAgLTk2LDYgKzEwNiwxNiBAQAogI2lmIGRlZmluZWQoU1RNMzJINykKICNkZWZpbmUgQURDX0NIQU5ORUxfVkJBVF9ESVY0ICAgICAgICAgICBBRENfQ0hBTk5FTF9WQkFUCiAjZW5kaWYgLyogU1RNMzJINyAqLworCisjaWYgZGVmaW5lZChTVE0zMlU1KQorI2RlZmluZSBBRENfU0FNUExFVElNRV81Q1lDTEUgICAgICAgICAgIEFEQ19TQU1QTEVUSU1FXzVDWUNMRVMKKyNkZWZpbmUgQURDX1NBTVBMRVRJTUVfMzkxQ1lDTEVTXzUgICAgICBBRENfU0FNUExFVElNRV8zOTFDWUNMRVMKKyNkZWZpbmUgQURDNF9TQU1QTEVUSU1FXzE2MENZQ0xFU181ICAgICBBREM0X1NBTVBMRVRJTUVfODE0Q1lDTEVTXzUKKyNlbmRpZiAvKiBTVE0zMlU1ICovCisKKyNpZiBkZWZpbmVkKFNUTTMySDUpCisjZGVmaW5lIEFEQ19DSEFOTkVMX1ZDT1JFICAgICAgICAgICAgICAgQURDX0NIQU5ORUxfVkREQ09SRQorI2VuZGlmIC8qIFNUTTMySDUgKi8KIC8qKgogICAqIEB9CiAgICovCkBAIC0xMjMsNyArMTQzLDggQEAKICNkZWZpbmUgQ09NUF9FWFRJX0xJTkVfQ09NUDZfRVZFTlQgICAgIENPTVBfRVhUSV9MSU5FX0NPTVA2CiAjZGVmaW5lIENPTVBfRVhUSV9MSU5FX0NPTVA3X0VWRU5UICAgICBDT01QX0VYVElfTElORV9DT01QNwogI2lmIGRlZmluZWQoU1RNMzJMMCkKLSNkZWZpbmUgQ09NUF9MUFRJTUNPTk5FQ1RJT05fRU5BQkxFRCAgICgodWludDMyX3QpMHgwMDAwMDAwM1UpICAgIC8qITwgQ09NUFggb3V0cHV0IGdlbmVyaWMgbmFtaW5nOiBjb25uZWN0ZWQgdG8gTFBUSU0gaW5wdXQgMSBmb3IgQ09NUDEsIExQVElNIGlucHV0IDIgZm9yIENPTVAyICovCisjZGVmaW5lIENPTVBfTFBUSU1DT05ORUNUSU9OX0VOQUJMRUQgICAoKHVpbnQzMl90KTB4MDAwMDAwMDNVKSAgICAvKiE8IENPTVBYIG91dHB1dCBnZW5lcmljIG5hbWluZzogY29ubmVjdGVkIHRvIExQVElNIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCAxIGZvciBDT01QMSwgTFBUSU0gaW5wdXQgMiBmb3IgQ09NUDIgKi8KICNlbmRpZgogI2RlZmluZSBDT01QX09VVFBVVF9DT01QNlRJTTJPQ1JFRkNMUiAgQ09NUF9PVVRQVVRfQ09NUDZfVElNMk9DUkVGQ0xSCiAjaWYgZGVmaW5lZChTVE0zMkYzNzN4QykgfHwgZGVmaW5lZChTVE0zMkYzNzh4eCkKQEAgLTE5Nyw2ICsyMTgsMTEgQEAKICNlbmRpZgogCiAjZW5kaWYKKworI2lmIGRlZmluZWQoU1RNMzJVNSkKKyNkZWZpbmUgX19IQUxfQ09NUF9DT01QMV9FWFRJX0NMRUFSX1JBU0lOR19GTEFHIF9fSEFMX0NPTVBfQ09NUDFfRVhUSV9DTEVBUl9SSVNJTkdfRkxBRworI2VuZGlmCisKIC8qKgogICAqIEB9CiAgICovCkBAIC0yMDUsNiArMjMxLDExIEBACiAgICogQHsKICAgKi8KICNkZWZpbmUgX19IQUxfQ09SVEVYX1NZU1RJQ0tDTEtfQ09ORklHIEhBTF9TWVNUSUNLX0NMS1NvdXJjZUNvbmZpZworI2lmIGRlZmluZWQoU1RNMzJVNSkKKyNkZWZpbmUgIE1QVV9ERVZJQ0VfbkduUm5FICAgICAgICAgIE1QVV9ERVZJQ0VfTkdOUk5FCisjZGVmaW5lICBNUFVfREVWSUNFX25HblJFICAgICAgICAgICBNUFVfREVWSUNFX05HTlJFCisjZGVmaW5lICBNUFVfREVWSUNFX25HUkUgICAgICAgICAgICBNUFVfREVWSUNFX05HUkUKKyNlbmRpZiAvKiBTVE0zMlU1ICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtMjEyLDggKzI0MywxMyBAQAogLyoqIEBkZWZncm91cCBDUkNfQWxpYXNlcyBDUkMgQVBJIGFsaWFzZXMKICAgKiBAewogICAqLwotI2RlZmluZSBIQUxfQ1JDX0lucHV0X0RhdGFfUmV2ZXJzZSAgIEhBTF9DUkNFeF9JbnB1dF9EYXRhX1JldmVyc2UgICAgLyohPCBBbGlhc2VkIHRvIEhBTF9DUkNFeF9JbnB1dF9EYXRhX1JldmVyc2UgZm9yIGludGVyIFNUTTMyIHNlcmllcyBjb21wYXRpYmlsaXR5ICAqLwotI2RlZmluZSBIQUxfQ1JDX091dHB1dF9EYXRhX1JldmVyc2UgIEhBTF9DUkNFeF9PdXRwdXRfRGF0YV9SZXZlcnNlICAgLyohPCBBbGlhc2VkIHRvIEhBTF9DUkNFeF9PdXRwdXRfRGF0YV9SZXZlcnNlIGZvciBpbnRlciBTVE0zMiBzZXJpZXMgY29tcGF0aWJpbGl0eSAqLworI2lmIGRlZmluZWQoU1RNMzJINSkgfHwgZGVmaW5lZChTVE0zMkMwKQorI2Vsc2UKKyNkZWZpbmUgSEFMX0NSQ19JbnB1dF9EYXRhX1JldmVyc2UgICBIQUxfQ1JDRXhfSW5wdXRfRGF0YV9SZXZlcnNlICAgIC8qITwgQWxpYXNlZCB0byBIQUxfQ1JDRXhfSW5wdXRfRGF0YV9SZXZlcnNlIGZvciAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXIgU1RNMzIgc2VyaWVzIGNvbXBhdGliaWxpdHkgICovCisjZGVmaW5lIEhBTF9DUkNfT3V0cHV0X0RhdGFfUmV2ZXJzZSAgSEFMX0NSQ0V4X091dHB1dF9EYXRhX1JldmVyc2UgICAvKiE8IEFsaWFzZWQgdG8gSEFMX0NSQ0V4X091dHB1dF9EYXRhX1JldmVyc2UgZm9yIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlciBTVE0zMiBzZXJpZXMgY29tcGF0aWJpbGl0eSAqLworI2VuZGlmCiAvKioKICAgKiBAfQogICAqLwpAQCAtMjQzLDEyICsyNzksMjUgQEAKICNkZWZpbmUgREFDX1dBVkVHRU5FUkFUSU9OX05PSVNFICAgICAgICAgICAgICAgICAgICAgICAgREFDX1dBVkVfTk9JU0UKICNkZWZpbmUgREFDX1dBVkVHRU5FUkFUSU9OX1RSSUFOR0xFICAgICAgICAgICAgICAgICAgICAgREFDX1dBVkVfVFJJQU5HTEUKIAotI2lmIGRlZmluZWQoU1RNMzJHNCkgfHwgZGVmaW5lZChTVE0zMkg3KQorI2lmIGRlZmluZWQoU1RNMzJHNCkgfHwgZGVmaW5lZChTVE0zMkw1KSB8fCBkZWZpbmVkKFNUTTMySDcpIHx8IGRlZmluZWQgKFNUTTMyVTUpCiAjZGVmaW5lIERBQ19DSElQQ09OTkVDVF9ESVNBQkxFICAgICAgIERBQ19DSElQQ09OTkVDVF9FWFRFUk5BTAogI2RlZmluZSBEQUNfQ0hJUENPTk5FQ1RfRU5BQkxFICAgICAgICBEQUNfQ0hJUENPTk5FQ1RfSU5URVJOQUwKICNlbmRpZgogCi0jaWYgZGVmaW5lZChTVE0zMkwxKSB8fCBkZWZpbmVkKFNUTTMyTDQpIHx8IGRlZmluZWQoU1RNMzJHMCkgfHwgZGVmaW5lZChTVE0zMkw1KSB8fCBkZWZpbmVkKFNUTTMySDcpIHx8IGRlZmluZWQoU1RNMzJGNCkgfHwgZGVmaW5lZChTVE0zMkc0KQorI2lmIGRlZmluZWQoU1RNMzJVNSkKKyNkZWZpbmUgREFDX1RSSUdHRVJfU1RPUF9MUFRJTTFfT1VUICBEQUNfVFJJR0dFUl9TVE9QX0xQVElNMV9DSDEKKyNkZWZpbmUgREFDX1RSSUdHRVJfU1RPUF9MUFRJTTNfT1VUICBEQUNfVFJJR0dFUl9TVE9QX0xQVElNM19DSDEKKyNkZWZpbmUgREFDX1RSSUdHRVJfTFBUSU0xX09VVCAgICAgICBEQUNfVFJJR0dFUl9MUFRJTTFfQ0gxCisjZGVmaW5lIERBQ19UUklHR0VSX0xQVElNM19PVVQgICAgICAgREFDX1RSSUdHRVJfTFBUSU0zX0NIMQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFNUTTMySDUpCisjZGVmaW5lIERBQ19UUklHR0VSX0xQVElNMV9PVVQgICAgICAgREFDX1RSSUdHRVJfTFBUSU0xX0NIMQorI2RlZmluZSBEQUNfVFJJR0dFUl9MUFRJTTJfT1VUICAgICAgIERBQ19UUklHR0VSX0xQVElNMl9DSDEKKyNlbmRpZgorCisjaWYgZGVmaW5lZChTVE0zMkwxKSB8fCBkZWZpbmVkKFNUTTMyTDQpIHx8IGRlZmluZWQoU1RNMzJHMCkgfHwgZGVmaW5lZChTVE0zMkw1KSB8fCBkZWZpbmVkKFNUTTMySDcpIHx8IFwKKyAgICBkZWZpbmVkKFNUTTMyRjQpIHx8IGRlZmluZWQoU1RNMzJHNCkKICNkZWZpbmUgSEFMX0RBQ19NU1BfSU5JVF9DQl9JRCAgICAgICBIQUxfREFDX01TUElOSVRfQ0JfSUQKICNkZWZpbmUgSEFMX0RBQ19NU1BfREVJTklUX0NCX0lEICAgICBIQUxfREFDX01TUERFSU5JVF9DQl9JRAogI2VuZGlmCkBAIC0zMTMsNyArMzYyLDggQEAKICNkZWZpbmUgSEFMX0RNQU1VWF9SRVFVRVNUX0dFTl9GQUxMSU5HICAgICAgICAgICBIQUxfRE1BTVVYX1JFUV9HRU5fRkFMTElORwogI2RlZmluZSBIQUxfRE1BTVVYX1JFUVVFU1RfR0VOX1JJU0lOR19GQUxMSU5HICAgIEhBTF9ETUFNVVhfUkVRX0dFTl9SSVNJTkdfRkFMTElORwogCi0jaWYgZGVmaW5lZChTVE0zMkw0UjV4eCkgfHwgZGVmaW5lZChTVE0zMkw0Ujl4eCkgfHwgZGVmaW5lZChTVE0zMkw0Ujl4eCkgfHwgZGVmaW5lZChTVE0zMkw0UzV4eCkgfHwgZGVmaW5lZChTVE0zMkw0Uzd4eCkgfHwgZGVmaW5lZChTVE0zMkw0Uzl4eCkKKyNpZiBkZWZpbmVkKFNUTTMyTDRSNXh4KSB8fCBkZWZpbmVkKFNUTTMyTDRSOXh4KSB8fCBkZWZpbmVkKFNUTTMyTDRSOXh4KSB8fCBkZWZpbmVkKFNUTTMyTDRTNXh4KSB8fCBcCisgICAgZGVmaW5lZChTVE0zMkw0Uzd4eCkgfHwgZGVmaW5lZChTVE0zMkw0Uzl4eCkKICNkZWZpbmUgRE1BX1JFUVVFU1RfRENNSV9QU1NJICAgICAgICAgICAgICAgICAgICBETUFfUkVRVUVTVF9EQ01JCiAjZW5kaWYKIApAQCAtMzkxLDYgKzQ0MSw5IEBACiAKICNlbmRpZiAvKiBTVE0zMkg3ICovCiAKKyNpZiBkZWZpbmVkKFNUTTMyVTUpCisjZGVmaW5lIEdQRE1BMV9SRVFVRVNUX0RDTUkgICAgICAgICAgICAgICAgICAgICAgICBHUERNQTFfUkVRVUVTVF9EQ01JX1BTU0kKKyNlbmRpZiAvKiBTVE0zMlU1ICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtNDcwLDcgKzUyMyw3IEBACiAjZGVmaW5lIE9CX1JEUF9MRVZFTDAgICAgICAgICAgICAgICAgIE9CX1JEUF9MRVZFTF8wCiAjZGVmaW5lIE9CX1JEUF9MRVZFTDEgICAgICAgICAgICAgICAgIE9CX1JEUF9MRVZFTF8xCiAjZGVmaW5lIE9CX1JEUF9MRVZFTDIgICAgICAgICAgICAgICAgIE9CX1JEUF9MRVZFTF8yCi0jaWYgZGVmaW5lZChTVE0zMkcwKQorI2lmIGRlZmluZWQoU1RNMzJHMCkgfHwgZGVmaW5lZChTVE0zMkMwKQogI2RlZmluZSBPQl9CT09UX0xPQ0tfRElTQUJMRSAgICAgICAgICBPQl9CT09UX0VOVFJZX0ZPUkNFRF9OT05FCiAjZGVmaW5lIE9CX0JPT1RfTE9DS19FTkFCTEUgICAgICAgICAgIE9CX0JPT1RfRU5UUllfRk9SQ0VEX0ZMQVNICiAjZWxzZQpAQCAtNDg3LDYgKzU0MCwxOCBAQAogI2RlZmluZSBGTEFTSF9GTEFHX1dEVyAgICAgICAgICAgICAgICBGTEFTSF9GTEFHX1dCTkUKICNkZWZpbmUgT0JfV1JQX1NFQ1RPUl9BbGwgICAgICAgICAgICAgT0JfV1JQX1NFQ1RPUl9BTEwKICNlbmRpZiAvKiBTVE0zMkg3ICovCisjaWYgZGVmaW5lZChTVE0zMlU1KQorI2RlZmluZSBPQl9VU0VSX25SU1RfU1RPUCAgICAgICAgICAgICBPQl9VU0VSX05SU1RfU1RPUAorI2RlZmluZSBPQl9VU0VSX25SU1RfU1REQlkgICAgICAgICAgICBPQl9VU0VSX05SU1RfU1REQlkKKyNkZWZpbmUgT0JfVVNFUl9uUlNUX1NIRFcgICAgICAgICAgICAgT0JfVVNFUl9OUlNUX1NIRFcKKyNkZWZpbmUgT0JfVVNFUl9uU1dCT09UMCAgICAgICAgICAgICAgT0JfVVNFUl9OU1dCT09UMAorI2RlZmluZSBPQl9VU0VSX25CT09UMCAgICAgICAgICAgICAgICBPQl9VU0VSX05CT09UMAorI2RlZmluZSBPQl9uQk9PVDBfUkVTRVQgICAgICAgICAgICAgICBPQl9OQk9PVDBfUkVTRVQKKyNkZWZpbmUgT0JfbkJPT1QwX1NFVCAgICAgICAgICAgICAgICAgT0JfTkJPT1QwX1NFVAorI2RlZmluZSBPQl9VU0VSX1NSQU0xMzRfUlNUICAgICAgICAgICBPQl9VU0VSX1NSQU1fUlNUCisjZGVmaW5lIE9CX1NSQU0xMzRfUlNUX0VSQVNFICAgICAgICAgIE9CX1NSQU1fUlNUX0VSQVNFCisjZGVmaW5lIE9CX1NSQU0xMzRfUlNUX05PVF9FUkFTRSAgICAgIE9CX1NSQU1fUlNUX05PVF9FUkFTRQorI2VuZGlmIC8qIFNUTTMyVTUgKi8KIAogLyoqCiAgICogQH0KQEAgLTUyOSw2ICs1OTQsMTA3IEBACiAjZGVmaW5lIEhBTF9TWVNDRkdfRW5hYmxlSU9BbmFsb2dTd2l0Y2hWREQgICAgICAgIEhBTF9TWVNDRkdfRW5hYmxlSU9Td2l0Y2hWREQKICNkZWZpbmUgSEFMX1NZU0NGR19EaXNhYmxlSU9BbmFsb2dTd2l0Y2hWREQgICAgICAgSEFMX1NZU0NGR19EaXNhYmxlSU9Td2l0Y2hWREQKICNlbmRpZiAvKiBTVE0zMkc0ICovCisKKyNpZiBkZWZpbmVkKFNUTTMySDUpCisjZGVmaW5lIFNZU0NGR19JVF9GUFVfSU9DICAgICAgICAgU0JTX0lUX0ZQVV9JT0MKKyNkZWZpbmUgU1lTQ0ZHX0lUX0ZQVV9EWkMgICAgICAgICBTQlNfSVRfRlBVX0RaQworI2RlZmluZSBTWVNDRkdfSVRfRlBVX1VGQyAgICAgICAgIFNCU19JVF9GUFVfVUZDCisjZGVmaW5lIFNZU0NGR19JVF9GUFVfT0ZDICAgICAgICAgU0JTX0lUX0ZQVV9PRkMKKyNkZWZpbmUgU1lTQ0ZHX0lUX0ZQVV9JREMgICAgICAgICBTQlNfSVRfRlBVX0lEQworI2RlZmluZSBTWVNDRkdfSVRfRlBVX0lYQyAgICAgICAgIFNCU19JVF9GUFVfSVhDCisKKyNkZWZpbmUgU1lTQ0ZHX0JSRUFLX0ZMQVNIX0VDQyAgICBTQlNfQlJFQUtfRkxBU0hfRUNDCisjZGVmaW5lIFNZU0NGR19CUkVBS19QVkQgICAgICAgICAgU0JTX0JSRUFLX1BWRAorI2RlZmluZSBTWVNDRkdfQlJFQUtfU1JBTV9FQ0MgICAgIFNCU19CUkVBS19TUkFNX0VDQworI2RlZmluZSBTWVNDRkdfQlJFQUtfTE9DS1VQICAgICAgIFNCU19CUkVBS19MT0NLVVAKKworI2RlZmluZSBTWVNDRkdfVlJFRkJVRl9WT0xUQUdFX1NDQUxFMCAgIFZSRUZCVUZfVk9MVEFHRV9TQ0FMRTAKKyNkZWZpbmUgU1lTQ0ZHX1ZSRUZCVUZfVk9MVEFHRV9TQ0FMRTEgICBWUkVGQlVGX1ZPTFRBR0VfU0NBTEUxCisjZGVmaW5lIFNZU0NGR19WUkVGQlVGX1ZPTFRBR0VfU0NBTEUyICAgVlJFRkJVRl9WT0xUQUdFX1NDQUxFMgorI2RlZmluZSBTWVNDRkdfVlJFRkJVRl9WT0xUQUdFX1NDQUxFMyAgIFZSRUZCVUZfVk9MVEFHRV9TQ0FMRTMKKworI2RlZmluZSBTWVNDRkdfVlJFRkJVRl9ISUdIX0lNUEVEQU5DRV9ESVNBQkxFICAgVlJFRkJVRl9ISUdIX0lNUEVEQU5DRV9ESVNBQkxFCisjZGVmaW5lIFNZU0NGR19WUkVGQlVGX0hJR0hfSU1QRURBTkNFX0VOQUJMRSAgICBWUkVGQlVGX0hJR0hfSU1QRURBTkNFX0VOQUJMRQorCisjZGVmaW5lIFNZU0NGR19GQVNUTU9ERVBMVVNfUEI2ICAgU0JTX0ZBU1RNT0RFUExVU19QQjYKKyNkZWZpbmUgU1lTQ0ZHX0ZBU1RNT0RFUExVU19QQjcgICBTQlNfRkFTVE1PREVQTFVTX1BCNworI2RlZmluZSBTWVNDRkdfRkFTVE1PREVQTFVTX1BCOCAgIFNCU19GQVNUTU9ERVBMVVNfUEI4CisjZGVmaW5lIFNZU0NGR19GQVNUTU9ERVBMVVNfUEI5ICAgU0JTX0ZBU1RNT0RFUExVU19QQjkKKworI2RlZmluZSBTWVNDRkdfRVRIX01JSSAgIFNCU19FVEhfTUlJCisjZGVmaW5lIFNZU0NGR19FVEhfUk1JSSAgU0JTX0VUSF9STUlJCisjZGVmaW5lIElTX1NZU0NGR19FVEhFUk5FVF9DT05GSUcgIElTX1NCU19FVEhFUk5FVF9DT05GSUcKKworI2RlZmluZSBTWVNDRkdfTUVNT1JJRVNfRVJBU0VfRkxBR19JUE1FRSAgIFNCU19NRU1PUklFU19FUkFTRV9GTEFHX0lQTUVFCisjZGVmaW5lIFNZU0NGR19NRU1PUklFU19FUkFTRV9GTEFHX01DTFIgICAgU0JTX01FTU9SSUVTX0VSQVNFX0ZMQUdfTUNMUgorI2RlZmluZSBJU19TWVNDRkdfTUVNT1JJRVNfRVJBU0VfRkxBRyAgICAgIElTX1NCU19NRU1PUklFU19FUkFTRV9GTEFHCisKKyNkZWZpbmUgSVNfU1lTQ0ZHX0NPREVfQ09ORklHIElTX1NCU19DT0RFX0NPTkZJRworCisjZGVmaW5lIFNZU0NGR19NUFVfTlNFQyAgIFNCU19NUFVfTlNFQworI2RlZmluZSBTWVNDRkdfVlRPUl9OU0VDICBTQlNfVlRPUl9OU0VDCisjaWYgZGVmaW5lZCAoX19BUk1fRkVBVFVSRV9DTVNFKSAmJiAoX19BUk1fRkVBVFVSRV9DTVNFID09IDNVKQorI2RlZmluZSBTWVNDRkdfU0FVICAgICAgICAgICAgICBTQlNfU0FVCisjZGVmaW5lIFNZU0NGR19NUFVfU0VDICAgICAgICAgIFNCU19NUFVfU0VDCisjZGVmaW5lIFNZU0NGR19WVE9SX0FJUkNSX1NFQyAgIFNCU19WVE9SX0FJUkNSX1NFQworI2RlZmluZSBTWVNDRkdfTE9DS19BTEwgICAgICAgICBTQlNfTE9DS19BTEwKKyNlbHNlCisjZGVmaW5lIFNZU0NGR19MT0NLX0FMTCAgICAgICAgIFNCU19MT0NLX0FMTAorI2VuZGlmIC8qIF9fQVJNX0ZFQVRVUkVfQ01TRSAqLworCisjZGVmaW5lIFNZU0NGR19DTEsgICAgICBTQlNfQ0xLCisjZGVmaW5lIFNZU0NGR19DTEFTU0IgICBTQlNfQ0xBU1NCCisjZGVmaW5lIFNZU0NGR19GUFUgICAgICBTQlNfRlBVCisjZGVmaW5lIFNZU0NGR19BTEwgICAgICBTQlNfQUxMCisKKyNkZWZpbmUgU1lTQ0ZHX1NFQyAgICAgIFNCU19TRUMKKyNkZWZpbmUgU1lTQ0ZHX05TRUMgICAgIFNCU19OU0VDCisKKyNkZWZpbmUgX19IQUxfU1lTQ0ZHX0ZQVV9JTlRFUlJVUFRfRU5BQkxFICAgX19IQUxfU0JTX0ZQVV9JTlRFUlJVUFRfRU5BQkxFCisjZGVmaW5lIF9fSEFMX1NZU0NGR19GUFVfSU5URVJSVVBUX0RJU0FCTEUgIF9fSEFMX1NCU19GUFVfSU5URVJSVVBUX0RJU0FCTEUKKworI2RlZmluZSBfX0hBTF9TWVNDRkdfQlJFQUtfRUNDX0xPQ0sgICAgICAgIF9fSEFMX1NCU19CUkVBS19FQ0NfTE9DSworI2RlZmluZSBfX0hBTF9TWVNDRkdfQlJFQUtfTE9DS1VQX0xPQ0sgICAgIF9fSEFMX1NCU19CUkVBS19MT0NLVVBfTE9DSworI2RlZmluZSBfX0hBTF9TWVNDRkdfQlJFQUtfUFZEX0xPQ0sgICAgICAgIF9fSEFMX1NCU19CUkVBS19QVkRfTE9DSworI2RlZmluZSBfX0hBTF9TWVNDRkdfQlJFQUtfU1JBTV9FQ0NfTE9DSyAgIF9fSEFMX1NCU19CUkVBS19TUkFNX0VDQ19MT0NLCisKKyNkZWZpbmUgX19IQUxfU1lTQ0ZHX0ZBU1RNT0RFUExVU19FTkFCTEUgICBfX0hBTF9TQlNfRkFTVE1PREVQTFVTX0VOQUJMRQorI2RlZmluZSBfX0hBTF9TWVNDRkdfRkFTVE1PREVQTFVTX0RJU0FCTEUgIF9fSEFMX1NCU19GQVNUTU9ERVBMVVNfRElTQUJMRQorCisjZGVmaW5lIF9fSEFMX1NZU0NGR19HRVRfTUVNT1JJRVNfRVJBU0VfU1RBVFVTICAgIF9fSEFMX1NCU19HRVRfTUVNT1JJRVNfRVJBU0VfU1RBVFVTCisjZGVmaW5lIF9fSEFMX1NZU0NGR19DTEVBUl9NRU1PUklFU19FUkFTRV9TVEFUVVMgIF9fSEFMX1NCU19DTEVBUl9NRU1PUklFU19FUkFTRV9TVEFUVVMKKworI2RlZmluZSBJU19TWVNDRkdfRlBVX0lOVEVSUlVQVCAgICBJU19TQlNfRlBVX0lOVEVSUlVQVAorI2RlZmluZSBJU19TWVNDRkdfQlJFQUtfQ09ORklHICAgICBJU19TQlNfQlJFQUtfQ09ORklHCisjZGVmaW5lIElTX1NZU0NGR19WUkVGQlVGX1ZPTFRBR0VfU0NBTEUgICAgIElTX1ZSRUZCVUZfVk9MVEFHRV9TQ0FMRQorI2RlZmluZSBJU19TWVNDRkdfVlJFRkJVRl9ISUdIX0lNUEVEQU5DRSAgICBJU19WUkVGQlVGX0hJR0hfSU1QRURBTkNFCisjZGVmaW5lIElTX1NZU0NGR19WUkVGQlVGX1RSSU1NSU5HICBJU19WUkVGQlVGX1RSSU1NSU5HCisjZGVmaW5lIElTX1NZU0NGR19GQVNUTU9ERVBMVVMgICAgICBJU19TQlNfRkFTVE1PREVQTFVTCisjZGVmaW5lIElTX1NZU0NGR19JVEVNU19BVFRSSUJVVEVTICBJU19TQlNfSVRFTVNfQVRUUklCVVRFUworI2RlZmluZSBJU19TWVNDRkdfQVRUUklCVVRFUyAgICAgICAgSVNfU0JTX0FUVFJJQlVURVMKKyNkZWZpbmUgSVNfU1lTQ0ZHX0xPQ0tfSVRFTVMgICAgICAgIElTX1NCU19MT0NLX0lURU1TCisKKyNkZWZpbmUgSEFMX1NZU0NGR19WUkVGQlVGX1ZvbHRhZ2VTY2FsaW5nQ29uZmlnICAgSEFMX1ZSRUZCVUZfVm9sdGFnZVNjYWxpbmdDb25maWcKKyNkZWZpbmUgSEFMX1NZU0NGR19WUkVGQlVGX0hpZ2hJbXBlZGFuY2VDb25maWcgICAgSEFMX1ZSRUZCVUZfSGlnaEltcGVkYW5jZUNvbmZpZworI2RlZmluZSBIQUxfU1lTQ0ZHX1ZSRUZCVUZfVHJpbW1pbmdDb25maWcgICAgICAgICBIQUxfVlJFRkJVRl9UcmltbWluZ0NvbmZpZworI2RlZmluZSBIQUxfU1lTQ0ZHX0VuYWJsZVZSRUZCVUYgICAgICAgICAgICAgICAgICBIQUxfRW5hYmxlVlJFRkJVRgorI2RlZmluZSBIQUxfU1lTQ0ZHX0Rpc2FibGVWUkVGQlVGICAgICAgICAgICAgICAgICBIQUxfRGlzYWJsZVZSRUZCVUYKKworI2RlZmluZSBIQUxfU1lTQ0ZHX0VuYWJsZUlPQW5hbG9nU3dpdGNoQm9vc3RlciAgICBIQUxfU0JTX0VuYWJsZUlPQW5hbG9nU3dpdGNoQm9vc3RlcgorI2RlZmluZSBIQUxfU1lTQ0ZHX0Rpc2FibGVJT0FuYWxvZ1N3aXRjaEJvb3N0ZXIgICBIQUxfU0JTX0Rpc2FibGVJT0FuYWxvZ1N3aXRjaEJvb3N0ZXIKKyNkZWZpbmUgSEFMX1NZU0NGR19FVEhJbnRlcmZhY2VTZWxlY3QgICAgICAgICAgICAgSEFMX1NCU19FVEhJbnRlcmZhY2VTZWxlY3QKKworI2RlZmluZSBIQUxfU1lTQ0ZHX0xvY2sgICAgIEhBTF9TQlNfTG9jaworI2RlZmluZSBIQUxfU1lTQ0ZHX0dldExvY2sgIEhBTF9TQlNfR2V0TG9jaworCisjaWYgZGVmaW5lZCAoX19BUk1fRkVBVFVSRV9DTVNFKSAmJiAoX19BUk1fRkVBVFVSRV9DTVNFID09IDNVKQorI2RlZmluZSBIQUxfU1lTQ0ZHX0NvbmZpZ0F0dHJpYnV0ZXMgICAgIEhBTF9TQlNfQ29uZmlnQXR0cmlidXRlcworI2RlZmluZSBIQUxfU1lTQ0ZHX0dldENvbmZpZ0F0dHJpYnV0ZXMgIEhBTF9TQlNfR2V0Q29uZmlnQXR0cmlidXRlcworI2VuZGlmIC8qIF9fQVJNX0ZFQVRVUkVfQ01TRSAqLworCisjZW5kaWYgLyogU1RNMzJINSAqLworCisKIC8qKgogICAqIEB9CiAgICovCkBAIC01OTYsMTkgKzc2MiwyMSBAQAogI2RlZmluZSBHUElPX0FGMTBfT1RHMl9IUyAgR1BJT19BRjEwX09URzJfRlMKICNkZWZpbmUgR1BJT19BRjEwX09URzFfRlMgIEdQSU9fQUYxMF9PVEcxX0hTCiAjZGVmaW5lIEdQSU9fQUYxMl9PVEcyX0ZTICBHUElPX0FGMTJfT1RHMV9GUwotI2VuZGlmIC8qU1RNMzJINzQzeHggfHwgU1RNMzJINzUzeHggfHwgU1RNMzJINzUweHggfHwgU1RNMzJINzQyeHggfHwgU1RNMzJINzQ1eHggfHwgU1RNMzJINzU1eHggfHwgU1RNMzJINzQ3eHggfHwgU1RNMzJINzU3eHggKi8KKyNlbmRpZiAvKlNUTTMySDc0M3h4IHx8IFNUTTMySDc1M3h4IHx8IFNUTTMySDc1MHh4IHx8IFNUTTMySDc0Mnh4IHx8IFNUTTMySDc0NXh4IHx8IFNUTTMySDc1NXh4IHx8IFNUTTMySDc0N3h4IHx8IFwKKyAgICAgICAgIFNUTTMySDc1N3h4ICovCiAjZW5kaWYgLyogU1RNMzJINyAqLwogCiAjZGVmaW5lIEdQSU9fQUYwX0xQVElNICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQSU9fQUYwX0xQVElNMQogI2RlZmluZSBHUElPX0FGMV9MUFRJTSAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUElPX0FGMV9MUFRJTTEKICNkZWZpbmUgR1BJT19BRjJfTFBUSU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BJT19BRjJfTFBUSU0xCiAKLSNpZiBkZWZpbmVkKFNUTTMyTDApIHx8IGRlZmluZWQoU1RNMzJMNCkgfHwgZGVmaW5lZChTVE0zMkY0KSB8fCBkZWZpbmVkKFNUTTMyRjIpIHx8IGRlZmluZWQoU1RNMzJGNykgfHwgZGVmaW5lZChTVE0zMkc0KSB8fCBkZWZpbmVkKFNUTTMySDcpIHx8IGRlZmluZWQoU1RNMzJXQikKKyNpZiBkZWZpbmVkKFNUTTMyTDApIHx8IGRlZmluZWQoU1RNMzJMNCkgfHwgZGVmaW5lZChTVE0zMkY0KSB8fCBkZWZpbmVkKFNUTTMyRjIpIHx8IGRlZmluZWQoU1RNMzJGNykgfHwgXAorICAgIGRlZmluZWQoU1RNMzJHNCkgfHwgZGVmaW5lZChTVE0zMkg3KSB8fCBkZWZpbmVkKFNUTTMyV0IpIHx8IGRlZmluZWQoU1RNMzJVNSkKICNkZWZpbmUgIEdQSU9fU1BFRURfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BJT19TUEVFRF9GUkVRX0xPVwogI2RlZmluZSAgR1BJT19TUEVFRF9NRURJVU0gICAgICAgICAgICAgICAgICAgICAgICBHUElPX1NQRUVEX0ZSRVFfTUVESVVNCiAjZGVmaW5lICBHUElPX1NQRUVEX0ZBU1QgICAgICAgICAgICAgICAgICAgICAgICAgIEdQSU9fU1BFRURfRlJFUV9ISUdICiAjZGVmaW5lICBHUElPX1NQRUVEX0hJR0ggICAgICAgICAgICAgICAgICAgICAgICAgIEdQSU9fU1BFRURfRlJFUV9WRVJZX0hJR0gKLSNlbmRpZiAvKiBTVE0zMkwwIHx8IFNUTTMyTDQgfHwgU1RNMzJGNCB8fCBTVE0zMkYyIHx8IFNUTTMyRjcgfHwgU1RNMzJHNCB8fCBTVE0zMkg3IHx8IFNUTTMyV0IqLworI2VuZGlmIC8qIFNUTTMyTDAgfHwgU1RNMzJMNCB8fCBTVE0zMkY0IHx8IFNUTTMyRjIgfHwgU1RNMzJGNyB8fCBTVE0zMkc0IHx8IFNUTTMySDcgfHwgU1RNMzJXQiB8fCBTVE0zMlU1Ki8KIAogI2lmIGRlZmluZWQoU1RNMzJMMSkKICNkZWZpbmUgIEdQSU9fU1BFRURfVkVSWV9MT1cgICAgR1BJT19TUEVFRF9GUkVRX0xPVwpAQCAtNjI0LDYgKzc5Miw0MiBAQAogI2VuZGlmIC8qIFNUTTMyRjAgfHwgU1RNMzJGMyB8fCBTVE0zMkYxICovCiAKICNkZWZpbmUgR1BJT19BRjZfREZTRE0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BJT19BRjZfREZTRE0xCisKKyNpZiBkZWZpbmVkKFNUTTMyVTUpIHx8IGRlZmluZWQoU1RNMzJINSkKKyNkZWZpbmUgR1BJT19BRjBfUlRDXzUwSHogICAgICAgICAgICAgICAgICAgICAgICAgR1BJT19BRjBfUlRDXzUwSFoKKyNlbmRpZiAvKiBTVE0zMlU1IHx8IFNUTTMySDUgKi8KKyNpZiBkZWZpbmVkKFNUTTMyVTUpCisjZGVmaW5lIEdQSU9fQUYwX1MyRFNUT1AgICAgICAgICAgICAgICAgICAgICAgICAgIEdQSU9fQUYwX1NSRFNUT1AKKyNkZWZpbmUgR1BJT19BRjExX0xQR1BJTyAgICAgICAgICAgICAgICAgICAgICAgICAgR1BJT19BRjExX0xQR1BJTzEKKyNlbmRpZiAvKiBTVE0zMlU1ICovCisvKioKKyAgKiBAfQorICAqLworCisvKiogQGRlZmdyb3VwIEhBTF9HVFpDX0FsaWFzZWRfRGVmaW5lcyBIQUwgR1RaQyBBbGlhc2VkIERlZmluZXMgbWFpbnRhaW5lZCBmb3IgbGVnYWN5IHB1cnBvc2UKKyAgKiBAeworICAqLworI2lmIGRlZmluZWQoU1RNMzJVNSkKKyNkZWZpbmUgR1RaQ19QRVJJUEhfRENNSSAgICAgICAgICAgICAgICAgICAgICBHVFpDX1BFUklQSF9EQ01JX1BTU0kKKyNkZWZpbmUgR1RaQ19QRVJJUEhfTFREQyAgICAgICAgICAgICAgICAgICAgICBHVFpDX1BFUklQSF9MVERDVVNCCisjZW5kaWYgLyogU1RNMzJVNSAqLworI2lmIGRlZmluZWQoU1RNMzJINSkKKyNkZWZpbmUgR1RaQ19QRVJJUEhfREFDMTIgICAgICAgICAgICAgICAgICAgICBHVFpDX1BFUklQSF9EQUMxCisjZGVmaW5lIEdUWkNfUEVSSVBIX0FEQzEyICAgICAgICAgICAgICAgICAgICAgR1RaQ19QRVJJUEhfQURDCisjZGVmaW5lIEdUWkNfUEVSSVBIX1VTQkZTICAgICAgICAgICAgICAgICAgICAgR1RaQ19QRVJJUEhfVVNCCisjZW5kaWYgLyogU1RNMzJINSAqLworI2lmIGRlZmluZWQoU1RNMzJINSkgfHwgZGVmaW5lZChTVE0zMlU1KQorI2RlZmluZSBHVFpDX01DUEJCX05CX1ZDVFJfUkVHX01BWCAgICAgICAgICAgIEdUWkNfTVBDQkJfTkJfVkNUUl9SRUdfTUFYCisjZGVmaW5lIEdUWkNfTUNQQkJfTkJfTENLX1ZDVFJfUkVHX01BWCAgICAgICAgR1RaQ19NUENCQl9OQl9MQ0tfVkNUUl9SRUdfTUFYCisjZGVmaW5lIEdUWkNfTUNQQkJfU1VQRVJCTE9DS19VTkxPQ0tFRCAgICAgICAgR1RaQ19NUENCQl9TVVBFUkJMT0NLX1VOTE9DS0VECisjZGVmaW5lIEdUWkNfTUNQQkJfU1VQRVJCTE9DS19MT0NLRUQgICAgICAgICAgR1RaQ19NUENCQl9TVVBFUkJMT0NLX0xPQ0tFRAorI2RlZmluZSBHVFpDX01DUEJCX0JMT0NLX05TRUMgICAgICAgICAgICAgICAgIEdUWkNfTVBDQkJfQkxPQ0tfTlNFQworI2RlZmluZSBHVFpDX01DUEJCX0JMT0NLX1NFQyAgICAgICAgICAgICAgICAgIEdUWkNfTVBDQkJfQkxPQ0tfU0VDCisjZGVmaW5lIEdUWkNfTUNQQkJfQkxPQ0tfTlBSSVYgICAgICAgICAgICAgICAgR1RaQ19NUENCQl9CTE9DS19OUFJJVgorI2RlZmluZSBHVFpDX01DUEJCX0JMT0NLX1BSSVYgICAgICAgICAgICAgICAgIEdUWkNfTVBDQkJfQkxPQ0tfUFJJVgorI2RlZmluZSBHVFpDX01DUEJCX0xPQ0tfT0ZGICAgICAgICAgICAgICAgICAgIEdUWkNfTVBDQkJfTE9DS19PRkYKKyNkZWZpbmUgR1RaQ19NQ1BCQl9MT0NLX09OICAgICAgICAgICAgICAgICAgICBHVFpDX01QQ0JCX0xPQ0tfT04KKyNlbmRpZiAvKiBTVE0zMkg1IHx8IFNUTTMyVTUgKi8KIC8qKgogICAqIEB9CiAgICovCkBAIC04MDQsNyArMTAwOCw4IEBACiAjZGVmaW5lIEkyQ19OT1NUUkVUQ0hfRU5BQkxFRCAgICAgICAgICAgICAgICAgICBJMkNfTk9TVFJFVENIX0VOQUJMRQogI2RlZmluZSBJMkNfQU5BTE9HRklMVEVSX0VOQUJMRUQgICAgICAgICAgICAgICAgSTJDX0FOQUxPR0ZJTFRFUl9FTkFCTEUKICNkZWZpbmUgSTJDX0FOQUxPR0ZJTFRFUl9ESVNBQkxFRCAgICAgICAgICAgICAgIEkyQ19BTkFMT0dGSUxURVJfRElTQUJMRQotI2lmIGRlZmluZWQoU1RNMzJGMCkgfHwgZGVmaW5lZChTVE0zMkYxKSB8fCBkZWZpbmVkKFNUTTMyRjMpIHx8IGRlZmluZWQoU1RNMzJHMCkgfHwgZGVmaW5lZChTVE0zMkw0KSB8fCBkZWZpbmVkKFNUTTMyTDEpIHx8IGRlZmluZWQoU1RNMzJGNykKKyNpZiBkZWZpbmVkKFNUTTMyRjApIHx8IGRlZmluZWQoU1RNMzJGMSkgfHwgZGVmaW5lZChTVE0zMkYzKSB8fCBkZWZpbmVkKFNUTTMyRzApIHx8IGRlZmluZWQoU1RNMzJMNCkgfHwgXAorICAgIGRlZmluZWQoU1RNMzJMMSkgfHwgZGVmaW5lZChTVE0zMkY3KQogI2RlZmluZSBIQUxfSTJDX1NUQVRFX01FTV9CVVNZX1RYICAgICAgICAgICAgICAgSEFMX0kyQ19TVEFURV9CVVNZX1RYCiAjZGVmaW5lIEhBTF9JMkNfU1RBVEVfTUVNX0JVU1lfUlggICAgICAgICAgICAgICBIQUxfSTJDX1NUQVRFX0JVU1lfUlgKICNkZWZpbmUgSEFMX0kyQ19TVEFURV9NQVNURVJfQlVTWV9UWCAgICAgICAgICAgIEhBTF9JMkNfU1RBVEVfQlVTWV9UWApAQCAtODYxLDYgKzEwNjYsMjAgQEAKICNkZWZpbmUgTFBUSU1fVFJJR1NBTVBMRVRJTUVfNFRSQU5TSVRJT04gICAgICAgIExQVElNX1RSSUdTQU1QTEVUSU1FXzRUUkFOU0lUSU9OUwogI2RlZmluZSBMUFRJTV9UUklHU0FNUExFVElNRV84VFJBTlNJVElPTiAgICAgICAgTFBUSU1fVFJJR1NBTVBMRVRJTUVfOFRSQU5TSVRJT05TCiAKKworLyoqIEBkZWZncm91cCBIQUxfTFBUSU1fQWxpYXNlZF9EZWZpbmVzIEhBTCBMUFRJTSBBbGlhc2VkIERlZmluZXMgbWFpbnRhaW5lZCBmb3IgbGVnYWN5IHB1cnBvc2UKKyAgKiBAeworICAqLworI2RlZmluZSBIQUxfTFBUSU1fUmVhZENvbXBhcmUgICAgICBIQUxfTFBUSU1fUmVhZENhcHR1cmVkVmFsdWUKKy8qKgorICAqIEB9CisgICovCisKKyNpZiBkZWZpbmVkKFNUTTMyVTUpCisjZGVmaW5lIExQVElNX0lTUl9DQzEgICAgICAgIExQVElNX0lTUl9DQzFJRgorI2RlZmluZSBMUFRJTV9JU1JfQ0MyICAgICAgICBMUFRJTV9JU1JfQ0MySUYKKyNkZWZpbmUgTFBUSU1fQ0hBTk5FTF9BTEwgICAgMHgwMDAwMDAwMFUKKyNlbmRpZiAvKiBTVE0zMlU1ICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtOTI4LDcgKzExNDcsNyBAQAogI2RlZmluZSBPUEFNUF9QR0FDT05ORUNUX1ZNMCAgICAgICAgICAgICAgICAgIE9QQU1QX1BHQV9DT05ORUNUX0lOVkVSVElOR0lOUFVUX0lPMAogI2RlZmluZSBPUEFNUF9QR0FDT05ORUNUX1ZNMSAgICAgICAgICAgICAgICAgIE9QQU1QX1BHQV9DT05ORUNUX0lOVkVSVElOR0lOUFVUX0lPMQogCi0jaWYgZGVmaW5lZChTVE0zMkwxKSB8fCBkZWZpbmVkKFNUTTMyTDQpIHx8IGRlZmluZWQoU1RNMzJMNSkgfHwgZGVmaW5lZChTVE0zMkg3KSB8fCBkZWZpbmVkKFNUTTMyRzQpCisjaWYgZGVmaW5lZChTVE0zMkwxKSB8fCBkZWZpbmVkKFNUTTMyTDQpIHx8IGRlZmluZWQoU1RNMzJMNSkgfHwgZGVmaW5lZChTVE0zMkg3KSB8fCBkZWZpbmVkKFNUTTMyRzQpIHx8IGRlZmluZWQoU1RNMzJVNSkKICNkZWZpbmUgSEFMX09QQU1QX01TUF9JTklUX0NCX0lEICAgICAgIEhBTF9PUEFNUF9NU1BJTklUX0NCX0lECiAjZGVmaW5lIEhBTF9PUEFNUF9NU1BfREVJTklUX0NCX0lEICAgICBIQUxfT1BBTVBfTVNQREVJTklUX0NCX0lECiAjZW5kaWYKQEAgLTEwMTIsOCArMTIzMSw4IEBACiAjZGVmaW5lIFJUQ19UQU1QRVIxXzJfM19JTlRFUlJVUFQgICAgICAgUlRDX0FMTF9UQU1QRVJfSU5URVJSVVBUCiAKICNkZWZpbmUgUlRDX1RJTUVTVEFNUFBJTl9QQzEzICBSVENfVElNRVNUQU1QUElOX0RFRkFVTFQKLSNkZWZpbmUgUlRDX1RJTUVTVEFNUFBJTl9QQTAgUlRDX1RJTUVTVEFNUFBJTl9QT1MxCi0jZGVmaW5lIFJUQ19USU1FU1RBTVBQSU5fUEk4IFJUQ19USU1FU1RBTVBQSU5fUE9TMQorI2RlZmluZSBSVENfVElNRVNUQU1QUElOX1BBMCAgIFJUQ19USU1FU1RBTVBQSU5fUE9TMQorI2RlZmluZSBSVENfVElNRVNUQU1QUElOX1BJOCAgIFJUQ19USU1FU1RBTVBQSU5fUE9TMQogI2RlZmluZSBSVENfVElNRVNUQU1QUElOX1BDMSAgIFJUQ19USU1FU1RBTVBQSU5fUE9TMgogCiAjZGVmaW5lIFJUQ19PVVRQVVRfUkVNQVBfUEMxMyAgUlRDX09VVFBVVF9SRU1BUF9OT05FCkBAIC0xMDI0LDE1ICsxMjQzLDQyIEBACiAjZGVmaW5lIFJUQ19UQU1QRVJQSU5fUEEwICBSVENfVEFNUEVSUElOX1BPUzEKICNkZWZpbmUgUlRDX1RBTVBFUlBJTl9QSTggIFJUQ19UQU1QRVJQSU5fUE9TMQogCisjaWYgZGVmaW5lZChTVE0zMkg1KQorI2RlZmluZSBUQU1QX1NFQ1JFVERFVklDRV9FUkFTRV9OT05FICAgICAgICBUQU1QX0RFVklDRVNFQ1JFVFNfRVJBU0VfTk9ORQorI2RlZmluZSBUQU1QX1NFQ1JFVERFVklDRV9FUkFTRV9CS1BfU1JBTSAgICBUQU1QX0RFVklDRVNFQ1JFVFNfRVJBU0VfQktQU1JBTQorI2VuZGlmIC8qIFNUTTMySDUgKi8KKworI2lmIGRlZmluZWQoU1RNMzJXQkEpCisjZGVmaW5lIFRBTVBfU0VDUkVUREVWSUNFX0VSQVNFX05PTkUgICAgICAgICAgICBUQU1QX0RFVklDRVNFQ1JFVFNfRVJBU0VfTk9ORQorI2RlZmluZSBUQU1QX1NFQ1JFVERFVklDRV9FUkFTRV9TUkFNMiAgICAgICAgICAgVEFNUF9ERVZJQ0VTRUNSRVRTX0VSQVNFX1NSQU0yCisjZGVmaW5lIFRBTVBfU0VDUkVUREVWSUNFX0VSQVNFX1JIVUsgICAgICAgICAgICBUQU1QX0RFVklDRVNFQ1JFVFNfRVJBU0VfUkhVSworI2RlZmluZSBUQU1QX1NFQ1JFVERFVklDRV9FUkFTRV9JQ0FDSEUgICAgICAgICAgVEFNUF9ERVZJQ0VTRUNSRVRTX0VSQVNFX0lDQUNIRQorI2RlZmluZSBUQU1QX1NFQ1JFVERFVklDRV9FUkFTRV9TQUVTX0FFU19IQVNIICAgVEFNUF9ERVZJQ0VTRUNSRVRTX0VSQVNFX1NBRVNfQUVTX0hBU0gKKyNkZWZpbmUgVEFNUF9TRUNSRVRERVZJQ0VfRVJBU0VfUEtBX1NSQU0gICAgICAgIFRBTVBfREVWSUNFU0VDUkVUU19FUkFTRV9QS0FfU1JBTQorI2RlZmluZSBUQU1QX1NFQ1JFVERFVklDRV9FUkFTRV9BTEwgICAgICAgICAgICAgVEFNUF9ERVZJQ0VTRUNSRVRTX0VSQVNFX0FMTAorI2VuZGlmIC8qIFNUTTMyV0JBICovCisKKyNpZiBkZWZpbmVkKFNUTTMySDUpIHx8IGRlZmluZWQoU1RNMzJXQkEpCisjZGVmaW5lIFRBTVBfU0VDUkVUREVWSUNFX0VSQVNFX0RJU0FCTEUgICAgIFRBTVBfREVWSUNFU0VDUkVUU19FUkFTRV9OT05FCisjZGVmaW5lIFRBTVBfU0VDUkVUREVWSUNFX0VSQVNFX0VOQUJMRSAgICAgIFRBTVBfU0VDUkVUREVWSUNFX0VSQVNFX0FMTAorI2VuZGlmIC8qIFNUTTMySDUgfHwgU1RNMzJXQkEgKi8KKworI2lmIGRlZmluZWQoU1RNMzJGNykKKyNkZWZpbmUgUlRDX1RBTVBDUl9UQU1QWEUgICAgICAgICAgUlRDX1RBTVBFUl9FTkFCTEVfQklUU19NQVNLCisjZGVmaW5lIFJUQ19UQU1QQ1JfVEFNUFhJRSAgICAgICAgIFJUQ19UQU1QRVJfSVRfRU5BQkxFX0JJVFNfTUFTSworI2VuZGlmIC8qIFNUTTMyRjcgKi8KKwogI2lmIGRlZmluZWQoU1RNMzJINykKICNkZWZpbmUgUlRDX1RBTVBDUl9UQU1QWEUgICAgICAgICAgUlRDX1RBTVBFUl9YCiAjZGVmaW5lIFJUQ19UQU1QQ1JfVEFNUFhJRSAgICAgICAgIFJUQ19UQU1QRVJfWF9JTlRFUlJVUFQKKyNlbmRpZiAvKiBTVE0zMkg3ICovCiAKKyNpZiBkZWZpbmVkKFNUTTMyRjcpIHx8IGRlZmluZWQoU1RNMzJINykgfHwgZGVmaW5lZChTVE0zMkwwKQogI2RlZmluZSBSVENfVEFNUEVSMV9JTlRFUlJVUFQgICAgICBSVENfSVRfVEFNUDEKICNkZWZpbmUgUlRDX1RBTVBFUjJfSU5URVJSVVBUICAgICAgUlRDX0lUX1RBTVAyCiAjZGVmaW5lIFJUQ19UQU1QRVIzX0lOVEVSUlVQVCAgICAgIFJUQ19JVF9UQU1QMwotI2RlZmluZSBSVENfQUxMX1RBTVBFUl9JTlRFUlJVUFQgICBSVENfSVRfVEFNUEFMTAotI2VuZGlmIC8qIFNUTTMySDcgKi8KKyNkZWZpbmUgUlRDX0FMTF9UQU1QRVJfSU5URVJSVVBUICAgUlRDX0lUX1RBTVAKKyNlbmRpZiAvKiBTVE0zMkY3IHx8IFNUTTMySDcgfHwgU1RNMzJMMCAqLwogCiAvKioKICAgKiBAfQpAQCAtMTE5OSw2ICsxNDQ1LDEwIEBACiAjZGVmaW5lIFRJTV9USU0zX1RJMV9DT01QMUNPTVAyX09VVCAgIFRJTV9USU0zX1RJMV9DT01QMV9DT01QMgogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKFNUTTMyVTUpCisjZGVmaW5lIE9DUkVGX0NMRUFSX1NFTEVDVF9Qb3MgICAgICAgT0NSRUZfQ0xFQVJfU0VMRUNUX1BPUworI2RlZmluZSBPQ1JFRl9DTEVBUl9TRUxFQ1RfTXNrICAgICAgIE9DUkVGX0NMRUFSX1NFTEVDVF9NU0sKKyNlbmRpZgogLyoqCiAgICogQH0KICAgKi8KQEAgLTEzMDgsMzAgKzE1NTgsNDAgQEAKICNkZWZpbmUgRVRIX01NQ1JGQUVDUiAgICAgICAgICAweDAwMDAwMTk4VQogI2RlZmluZSBFVEhfTU1DUkdVRkNSICAgICAgICAgIDB4MDAwMDAxQzRVCiAKLSNkZWZpbmUgRVRIX01BQ19UWEZJRk9fRlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMFUgIC8qIFR4IEZJRk8gZnVsbCAqLwotI2RlZmluZSBFVEhfTUFDX1RYRklGT05PVF9FTVBUWSAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwVSAgLyogVHggRklGTyBub3QgZW1wdHkgKi8KLSNkZWZpbmUgRVRIX01BQ19UWEZJRk9fV1JJVEVfQUNUSVZFICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMFUgIC8qIFR4IEZJRk8gd3JpdGUgYWN0aXZlICovCi0jZGVmaW5lIEVUSF9NQUNfVFhGSUZPX0lETEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDBVICAvKiBUeCBGSUZPIHJlYWQgc3RhdHVzOiBJZGxlICovCi0jZGVmaW5lIEVUSF9NQUNfVFhGSUZPX1JFQUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDBVICAvKiBUeCBGSUZPIHJlYWQgc3RhdHVzOiBSZWFkICh0cmFuc2ZlcnJpbmcgZGF0YSB0byB0aGUgTUFDIHRyYW5zbWl0dGVyKSAqLwotI2RlZmluZSBFVEhfTUFDX1RYRklGT19XQUlUSU5HICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwVSAgLyogVHggRklGTyByZWFkIHN0YXR1czogV2FpdGluZyBmb3IgVHhTdGF0dXMgZnJvbSBNQUMgdHJhbnNtaXR0ZXIgKi8KLSNkZWZpbmUgRVRIX01BQ19UWEZJRk9fV1JJVElORyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDMwMDAwMFUgIC8qIFR4IEZJRk8gcmVhZCBzdGF0dXM6IFdyaXRpbmcgdGhlIHJlY2VpdmVkIFR4U3RhdHVzIG9yIGZsdXNoaW5nIHRoZSBUeEZJRk8gKi8KLSNkZWZpbmUgRVRIX01BQ19UUkFOU01JU1NJT05fUEFVU0UgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMFUgIC8qIE1BQyB0cmFuc21pdHRlciBpbiBwYXVzZSAqLwotI2RlZmluZSBFVEhfTUFDX1RSQU5TTUlURlJBTUVDT05UUk9MTEVSX0lETEUgICAgICAgICAgICAweDAwMDAwMDAwVSAgLyogTUFDIHRyYW5zbWl0IGZyYW1lIGNvbnRyb2xsZXI6IElkbGUgKi8KLSNkZWZpbmUgRVRIX01BQ19UUkFOU01JVEZSQU1FQ09OVFJPTExFUl9XQUlUSU5HICAgICAgICAgMHgwMDAyMDAwMFUgIC8qIE1BQyB0cmFuc21pdCBmcmFtZSBjb250cm9sbGVyOiBXYWl0aW5nIGZvciBTdGF0dXMgb2YgcHJldmlvdXMgZnJhbWUgb3IgSUZHL2JhY2tvZmYgcGVyaW9kIHRvIGJlIG92ZXIgKi8KLSNkZWZpbmUgRVRIX01BQ19UUkFOU01JVEZSQU1FQ09OVFJPTExFUl9HRU5SQVRJTkdfUENGICAgMHgwMDA0MDAwMFUgIC8qIE1BQyB0cmFuc21pdCBmcmFtZSBjb250cm9sbGVyOiBHZW5lcmF0aW5nIGFuZCB0cmFuc21pdHRpbmcgYSBQYXVzZSBjb250cm9sIGZyYW1lIChpbiBmdWxsIGR1cGxleCBtb2RlKSAqLwotI2RlZmluZSBFVEhfTUFDX1RSQU5TTUlURlJBTUVDT05UUk9MTEVSX1RSQU5TRkVSUklORyAgICAweDAwMDYwMDAwVSAgLyogTUFDIHRyYW5zbWl0IGZyYW1lIGNvbnRyb2xsZXI6IFRyYW5zZmVycmluZyBpbnB1dCBmcmFtZSBmb3IgdHJhbnNtaXNzaW9uICovCisjZGVmaW5lIEVUSF9NQUNfVFhGSUZPX0ZVTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwVSAgLyogVHggRklGTyBmdWxsICovCisjZGVmaW5lIEVUSF9NQUNfVFhGSUZPTk9UX0VNUFRZICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwVSAgLyogVHggRklGTyBub3QgZW1wdHkgKi8KKyNkZWZpbmUgRVRIX01BQ19UWEZJRk9fV1JJVEVfQUNUSVZFICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDBVICAvKiBUeCBGSUZPIHdyaXRlIGFjdGl2ZSAqLworI2RlZmluZSBFVEhfTUFDX1RYRklGT19JRExFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMFUgIC8qIFR4IEZJRk8gcmVhZCBzdGF0dXM6IElkbGUgKi8KKyNkZWZpbmUgRVRIX01BQ19UWEZJRk9fUkVBRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDBVICAvKiBUeCBGSUZPIHJlYWQgc3RhdHVzOiBSZWFkICh0cmFuc2ZlcnJpbmcgZGF0YSB0byAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgTUFDIHRyYW5zbWl0dGVyKSAqLworI2RlZmluZSBFVEhfTUFDX1RYRklGT19XQUlUSU5HICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMFUgIC8qIFR4IEZJRk8gcmVhZCBzdGF0dXM6IFdhaXRpbmcgZm9yIFR4U3RhdHVzIGZyb20gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFDIHRyYW5zbWl0dGVyICovCisjZGVmaW5lIEVUSF9NQUNfVFhGSUZPX1dSSVRJTkcgICAgICAgICAgICAgICAgICAgICAgICAweDAwMzAwMDAwVSAgLyogVHggRklGTyByZWFkIHN0YXR1czogV3JpdGluZyB0aGUgcmVjZWl2ZWQgVHhTdGF0dXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBmbHVzaGluZyB0aGUgVHhGSUZPICovCisjZGVmaW5lIEVUSF9NQUNfVFJBTlNNSVNTSU9OX1BBVVNFICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwVSAgLyogTUFDIHRyYW5zbWl0dGVyIGluIHBhdXNlICovCisjZGVmaW5lIEVUSF9NQUNfVFJBTlNNSVRGUkFNRUNPTlRST0xMRVJfSURMRSAgICAgICAgICAweDAwMDAwMDAwVSAgLyogTUFDIHRyYW5zbWl0IGZyYW1lIGNvbnRyb2xsZXI6IElkbGUgKi8KKyNkZWZpbmUgRVRIX01BQ19UUkFOU01JVEZSQU1FQ09OVFJPTExFUl9XQUlUSU5HICAgICAgIDB4MDAwMjAwMDBVICAvKiBNQUMgdHJhbnNtaXQgZnJhbWUgY29udHJvbGxlcjogV2FpdGluZyBmb3IgU3RhdHVzIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHByZXZpb3VzIGZyYW1lIG9yIElGRy9iYWNrb2ZmIHBlcmlvZCB0byBiZSBvdmVyICovCisjZGVmaW5lIEVUSF9NQUNfVFJBTlNNSVRGUkFNRUNPTlRST0xMRVJfR0VOUkFUSU5HX1BDRiAweDAwMDQwMDAwVSAgLyogTUFDIHRyYW5zbWl0IGZyYW1lIGNvbnRyb2xsZXI6IEdlbmVyYXRpbmcgYW5kIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbWl0dGluZyBhIFBhdXNlIGNvbnRyb2wgZnJhbWUgKGluIGZ1bGwgZHVwbGV4IG1vZGUpICovCisjZGVmaW5lIEVUSF9NQUNfVFJBTlNNSVRGUkFNRUNPTlRST0xMRVJfVFJBTlNGRVJSSU5HICAweDAwMDYwMDAwVSAgLyogTUFDIHRyYW5zbWl0IGZyYW1lIGNvbnRyb2xsZXI6IFRyYW5zZmVycmluZyBpbnB1dCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZSBmb3IgdHJhbnNtaXNzaW9uICovCiAjZGVmaW5lIEVUSF9NQUNfTUlJX1RSQU5TTUlUX0FDVElWRSAgICAgICAgICAgMHgwMDAxMDAwMFUgIC8qIE1BQyBNSUkgdHJhbnNtaXQgZW5naW5lIGFjdGl2ZSAqLwogI2RlZmluZSBFVEhfTUFDX1JYRklGT19FTVBUWSAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDBVICAvKiBSeCBGSUZPIGZpbGwgbGV2ZWw6IGVtcHR5ICovCi0jZGVmaW5lIEVUSF9NQUNfUlhGSUZPX0JFTE9XX1RIUkVTSE9MRCAgICAgICAgMHgwMDAwMDEwMFUgIC8qIFJ4IEZJRk8gZmlsbCBsZXZlbDogZmlsbC1sZXZlbCBiZWxvdyBmbG93LWNvbnRyb2wgZGUtYWN0aXZhdGUgdGhyZXNob2xkICovCi0jZGVmaW5lIEVUSF9NQUNfUlhGSUZPX0FCT1ZFX1RIUkVTSE9MRCAgICAgICAgMHgwMDAwMDIwMFUgIC8qIFJ4IEZJRk8gZmlsbCBsZXZlbDogZmlsbC1sZXZlbCBhYm92ZSBmbG93LWNvbnRyb2wgYWN0aXZhdGUgdGhyZXNob2xkICovCisjZGVmaW5lIEVUSF9NQUNfUlhGSUZPX0JFTE9XX1RIUkVTSE9MRCAgICAgICAgMHgwMDAwMDEwMFUgIC8qIFJ4IEZJRk8gZmlsbCBsZXZlbDogZmlsbC1sZXZlbCBiZWxvdyBmbG93LWNvbnRyb2wgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlLWFjdGl2YXRlIHRocmVzaG9sZCAqLworI2RlZmluZSBFVEhfTUFDX1JYRklGT19BQk9WRV9USFJFU0hPTEQgICAgICAgIDB4MDAwMDAyMDBVICAvKiBSeCBGSUZPIGZpbGwgbGV2ZWw6IGZpbGwtbGV2ZWwgYWJvdmUgZmxvdy1jb250cm9sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmF0ZSB0aHJlc2hvbGQgKi8KICNkZWZpbmUgRVRIX01BQ19SWEZJRk9fRlVMTCAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwVSAgLyogUnggRklGTyBmaWxsIGxldmVsOiBmdWxsICovCiAjaWYgZGVmaW5lZChTVE0zMkYxKQogI2Vsc2UKICNkZWZpbmUgRVRIX01BQ19SRUFEQ09OVFJPTExFUl9JRExFICAgICAgICAgICAweDAwMDAwMDAwVSAgLyogUnggRklGTyByZWFkIGNvbnRyb2xsZXIgSURMRSBzdGF0ZSAqLwogI2RlZmluZSBFVEhfTUFDX1JFQURDT05UUk9MTEVSX1JFQURJTkdfREFUQSAgIDB4MDAwMDAwMjBVICAvKiBSeCBGSUZPIHJlYWQgY29udHJvbGxlciBSZWFkaW5nIGZyYW1lIGRhdGEgKi8KLSNkZWZpbmUgRVRIX01BQ19SRUFEQ09OVFJPTExFUl9SRUFESU5HX1NUQVRVUyAweDAwMDAwMDQwVSAgLyogUnggRklGTyByZWFkIGNvbnRyb2xsZXIgUmVhZGluZyBmcmFtZSBzdGF0dXMgKG9yIHRpbWUtc3RhbXApICovCisjZGVmaW5lIEVUSF9NQUNfUkVBRENPTlRST0xMRVJfUkVBRElOR19TVEFUVVMgMHgwMDAwMDA0MFUgIC8qIFJ4IEZJRk8gcmVhZCBjb250cm9sbGVyIFJlYWRpbmcgZnJhbWUgc3RhdHVzIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvciB0aW1lLXN0YW1wKSAqLwogI2VuZGlmCi0jZGVmaW5lIEVUSF9NQUNfUkVBRENPTlRST0xMRVJfRkxVU0hJTkcgICAgICAgMHgwMDAwMDA2MFUgIC8qIFJ4IEZJRk8gcmVhZCBjb250cm9sbGVyIEZsdXNoaW5nIHRoZSBmcmFtZSBkYXRhIGFuZCBzdGF0dXMgKi8KKyNkZWZpbmUgRVRIX01BQ19SRUFEQ09OVFJPTExFUl9GTFVTSElORyAgICAgICAweDAwMDAwMDYwVSAgLyogUnggRklGTyByZWFkIGNvbnRyb2xsZXIgRmx1c2hpbmcgdGhlIGZyYW1lIGRhdGEgYW5kIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgKi8KICNkZWZpbmUgRVRIX01BQ19SWEZJRk9fV1JJVEVfQUNUSVZFICAgICAgICAgICAweDAwMDAwMDEwVSAgLyogUnggRklGTyB3cml0ZSBjb250cm9sbGVyIGFjdGl2ZSAqLwogI2RlZmluZSBFVEhfTUFDX1NNQUxMX0ZJRk9fTk9UQUNUSVZFICAgICAgICAgIDB4MDAwMDAwMDBVICAvKiBNQUMgc21hbGwgRklGTyByZWFkIC8gd3JpdGUgY29udHJvbGxlcnMgbm90IGFjdGl2ZSAqLwogI2RlZmluZSBFVEhfTUFDX1NNQUxMX0ZJRk9fUkVBRF9BQ1RJVkUgICAgICAgIDB4MDAwMDAwMDJVICAvKiBNQUMgc21hbGwgRklGTyByZWFkIGNvbnRyb2xsZXIgYWN0aXZlICovCkBAIC0xMzg5LDcgKzE2NDksNyBAQAogCiAjaWYgZGVmaW5lZChTVE0zMkw0KSB8fCBkZWZpbmVkKFNUTTMyRjcpIHx8IGRlZmluZWQoU1RNMzJGNDI3eHgpIHx8IGRlZmluZWQoU1RNMzJGNDM3eHgpIFwKICAgfHwgZGVmaW5lZChTVE0zMkY0Mjl4eCkgfHwgZGVmaW5lZChTVE0zMkY0Mzl4eCkgfHwgZGVmaW5lZChTVE0zMkY0Njl4eCkgfHwgZGVmaW5lZChTVE0zMkY0Nzl4eCkgXAotICB8fCBkZWZpbmVkKFNUTTMySDcpCisgIHx8IGRlZmluZWQoU1RNMzJINykgfHwgZGVmaW5lZChTVE0zMlU1KQogLyoqIEBkZWZncm91cCBETUEyRF9BbGlhc2VzIERNQTJEIEFQSSBBbGlhc2VzCiAgICogQHsKICAgKi8KQEAgLTEzOTksNyArMTY1OSw3IEBACiAgICogQH0KICAgKi8KIAotI2VuZGlmICAvKiBTVE0zMkw0IHx8ICBTVE0zMkY3IHx8ICBTVE0zMkY0IHx8ICBTVE0zMkg3ICovCisjZW5kaWYgIC8qIFNUTTMyTDQgfHwgIFNUTTMyRjcgfHwgIFNUTTMyRjQgfHwgIFNUTTMySDcgfHwgU1RNMzJVNSAqLwogCiAvKiogQGRlZmdyb3VwIEhBTF9QUFBfQWxpYXNlZF9EZWZpbmVzIEhBTCBQUFAgQWxpYXNlZCBEZWZpbmVzIG1haW50YWluZWQgZm9yIGxlZ2FjeSBwdXJwb3NlCiAgICogQHsKQEAgLTE0MTksNiArMTY3OSwxOSBAQAogICAqIEB9CiAgICovCiAKKy8qKiBAZGVmZ3JvdXAgSEFMX0RDQUNIRV9BbGlhc2VkX0Z1bmN0aW9ucyBIQUwgRENBQ0hFIEFsaWFzZWQgRnVuY3Rpb25zIG1haW50YWluZWQgZm9yIGxlZ2FjeSBwdXJwb3NlCisgICogQHsKKyAgKi8KKworI2lmIGRlZmluZWQoU1RNMzJVNSkKKyNkZWZpbmUgSEFMX0RDQUNIRV9DbGVhbkludmFsaWRhdGVCeUFkZHIgICAgIEhBTF9EQ0FDSEVfQ2xlYW5JbnZhbGlkQnlBZGRyCisjZGVmaW5lIEhBTF9EQ0FDSEVfQ2xlYW5JbnZhbGlkYXRlQnlBZGRyX0lUICBIQUxfRENBQ0hFX0NsZWFuSW52YWxpZEJ5QWRkcl9JVAorI2VuZGlmIC8qIFNUTTMyVTUgKi8KKworLyoqCisgICogQH0KKyAgKi8KKwogI2lmICFkZWZpbmVkKFNUTTMyRjIpCiAvKiogQGRlZmdyb3VwIEhBU0hfYWxpYXMgSEFTSCBBUEkgYWxpYXMKICAgKiBAewpAQCAtMTQ4OSw3ICsxNzYyLDggQEAKICNkZWZpbmUgSEFMX0VuYWJsZURCR1N0YW5kYnlNb2RlIEhBTF9EQkdNQ1VfRW5hYmxlREJHU3RhbmRieU1vZGUKICNkZWZpbmUgSEFMX0Rpc2FibGVEQkdTdGFuZGJ5TW9kZSBIQUxfREJHTUNVX0Rpc2FibGVEQkdTdGFuZGJ5TW9kZQogI2RlZmluZSBIQUxfREJHX0xvd1Bvd2VyQ29uZmlnKFBlcmlwaCwgY21kKSAoKChjbWRcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKT09RU5BQkxFKT8gSEFMX0RCR01DVV9EQkdfRW5hYmxlTG93UG93ZXJDb25maWcoUGVyaXBoKSA6IEhBTF9EQkdNQ1VfREJHX0Rpc2FibGVMb3dQb3dlckNvbmZpZyhQZXJpcGgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk9PUVOQUJMRSk/IEhBTF9EQkdNQ1VfREJHX0VuYWJsZUxvd1Bvd2VyQ29uZmlnKFBlcmlwaCkgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQUxfREJHTUNVX0RCR19EaXNhYmxlTG93UG93ZXJDb25maWcoUGVyaXBoKSkKICNkZWZpbmUgSEFMX1ZSRUZJTlRfT3V0cHV0U2VsZWN0ICBIQUxfU1lTQ0ZHX1ZSRUZJTlRfT3V0cHV0U2VsZWN0CiAjZGVmaW5lIEhBTF9Mb2NrX0NtZChjbWQpICgoKGNtZCk9PUVOQUJMRSkgPyBIQUxfU1lTQ0ZHX0VuYWJsZV9Mb2NrX1ZSRUZJTlQoKSA6IEhBTF9TWVNDRkdfRGlzYWJsZV9Mb2NrX1ZSRUZJTlQoKSkKICNpZiBkZWZpbmVkKFNUTTMyTDApCkBAIC0xNDk4LDggKzE3NzIsMTAgQEAKICNlbmRpZgogI2RlZmluZSBIQUxfQURDX0VuYWJsZUJ1ZmZlcl9DbWQoY21kKSAgKCgoY21kKT09RU5BQkxFKSA/IEhBTF9BRENFeF9FbmFibGVWUkVGSU5UKCkgOiBIQUxfQURDRXhfRGlzYWJsZVZSRUZJTlQoKSkKICNkZWZpbmUgSEFMX0FEQ19FbmFibGVCdWZmZXJTZW5zb3JfQ21kKGNtZCkgKCgoY21kXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk9PUVOQUJMRSkgPyAgSEFMX0FEQ0V4X0VuYWJsZVZSRUZJTlRUZW1wU2Vuc29yKCkgOiBIQUxfQURDRXhfRGlzYWJsZVZSRUZJTlRUZW1wU2Vuc29yKCkpCi0jaWYgZGVmaW5lZChTVE0zMkg3QTN4eCkgfHwgZGVmaW5lZChTVE0zMkg3QjN4eCkgfHwgZGVmaW5lZChTVE0zMkg3QjB4eCkgfHwgZGVmaW5lZChTVE0zMkg3QTN4eFEpIHx8IGRlZmluZWQoU1RNMzJIN0IzeHhRKSB8fCBkZWZpbmVkKFNUTTMySDdCMHh4USkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApPT1FTkFCTEUpID8gIEhBTF9BRENFeF9FbmFibGVWUkVGSU5UVGVtcFNlbnNvcigpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFMX0FEQ0V4X0Rpc2FibGVWUkVGSU5UVGVtcFNlbnNvcigpKQorI2lmIGRlZmluZWQoU1RNMzJIN0EzeHgpIHx8IGRlZmluZWQoU1RNMzJIN0IzeHgpIHx8IGRlZmluZWQoU1RNMzJIN0IweHgpIHx8IGRlZmluZWQoU1RNMzJIN0EzeHhRKSB8fCBcCisgICAgZGVmaW5lZChTVE0zMkg3QjN4eFEpIHx8IGRlZmluZWQoU1RNMzJIN0IweHhRKQogI2RlZmluZSBIQUxfRW5hYmxlU1JEb21haW5EQkdTdG9wTW9kZSAgICAgIEhBTF9FbmFibGVEb21haW4zREJHU3RvcE1vZGUKICNkZWZpbmUgSEFMX0Rpc2FibGVTUkRvbWFpbkRCR1N0b3BNb2RlICAgICBIQUxfRGlzYWJsZURvbWFpbjNEQkdTdG9wTW9kZQogI2RlZmluZSBIQUxfRW5hYmxlU1JEb21haW5EQkdTdGFuZGJ5TW9kZSAgIEhBTF9FbmFibGVEb21haW4zREJHU3RhbmRieU1vZGUKQEAgLTE1MzMsMTYgKzE4MDksMjEgQEAKICNkZWZpbmUgSEFMX0ZNUEkyQ0V4X0FuYWxvZ0ZpbHRlcl9Db25maWcgICAgICBIQUxfRk1QSTJDRXhfQ29uZmlnQW5hbG9nRmlsdGVyCiAjZGVmaW5lIEhBTF9GTVBJMkNFeF9EaWdpdGFsRmlsdGVyX0NvbmZpZyAgICAgSEFMX0ZNUEkyQ0V4X0NvbmZpZ0RpZ2l0YWxGaWx0ZXIKIAotI2RlZmluZSBIQUxfSTJDRmFzdE1vZGVQbHVzQ29uZmlnKFNZU0NGR19JMkNGYXN0TW9kZVBsdXMsIGNtZCkgKCgoY21kXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApPT1FTkFCTEUpPyBIQUxfSTJDRXhfRW5hYmxlRmFzdE1vZGVQbHVzKFNZU0NGR19JMkNGYXN0TW9kZVBsdXMpOiBIQUxfSTJDRXhfRGlzYWJsZUZhc3RNb2RlUGx1cyhTWVNDRkdfSTJDRmFzdE1vZGVQbHVzKSkKKyNkZWZpbmUgSEFMX0kyQ0Zhc3RNb2RlUGx1c0NvbmZpZyhTWVNDRkdfSTJDRmFzdE1vZGVQbHVzLCBjbWQpICgoY21kID09IEVOQUJMRSk/IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQUxfSTJDRXhfRW5hYmxlRmFzdE1vZGVQbHVzKFNZU0NGR19JMkNGYXN0TW9kZVBsdXMpOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFMX0kyQ0V4X0Rpc2FibGVGYXN0TW9kZVBsdXMoU1lTQ0ZHX0kyQ0Zhc3RNb2RlUGx1cykpCiAKLSNpZiBkZWZpbmVkKFNUTTMySDcpIHx8IGRlZmluZWQoU1RNMzJXQikgfHwgZGVmaW5lZChTVE0zMkcwKSB8fCBkZWZpbmVkKFNUTTMyRjApIHx8IGRlZmluZWQoU1RNMzJGMSkgfHwgZGVmaW5lZChTVE0zMkYyKSB8fCBkZWZpbmVkKFNUTTMyRjMpIHx8IGRlZmluZWQoU1RNMzJGNCkgfHwgZGVmaW5lZChTVE0zMkY3KSB8fCBkZWZpbmVkKFNUTTMyTDApIHx8IGRlZmluZWQoU1RNMzJMNCkgfHwgZGVmaW5lZChTVE0zMkw1KSB8fCBkZWZpbmVkKFNUTTMyRzQpIHx8IGRlZmluZWQoU1RNMzJMMSkKKyNpZiBkZWZpbmVkKFNUTTMySDcpIHx8IGRlZmluZWQoU1RNMzJXQikgfHwgZGVmaW5lZChTVE0zMkcwKSB8fCBkZWZpbmVkKFNUTTMyRjApIHx8IGRlZmluZWQoU1RNMzJGMSkgfHwgXAorICAgIGRlZmluZWQoU1RNMzJGMikgfHwgZGVmaW5lZChTVE0zMkYzKSB8fCBkZWZpbmVkKFNUTTMyRjQpIHx8IGRlZmluZWQoU1RNMzJGNykgfHwgZGVmaW5lZChTVE0zMkwwKSB8fCBcCisgICAgZGVmaW5lZChTVE0zMkw0KSB8fCBkZWZpbmVkKFNUTTMyTDUpIHx8IGRlZmluZWQoU1RNMzJHNCkgfHwgZGVmaW5lZChTVE0zMkwxKQogI2RlZmluZSBIQUxfSTJDX01hc3Rlcl9TZXF1ZW50aWFsX1RyYW5zbWl0X0lUICBIQUxfSTJDX01hc3Rlcl9TZXFfVHJhbnNtaXRfSVQKICNkZWZpbmUgSEFMX0kyQ19NYXN0ZXJfU2VxdWVudGlhbF9SZWNlaXZlX0lUICAgSEFMX0kyQ19NYXN0ZXJfU2VxX1JlY2VpdmVfSVQKICNkZWZpbmUgSEFMX0kyQ19TbGF2ZV9TZXF1ZW50aWFsX1RyYW5zbWl0X0lUICAgSEFMX0kyQ19TbGF2ZV9TZXFfVHJhbnNtaXRfSVQKICNkZWZpbmUgSEFMX0kyQ19TbGF2ZV9TZXF1ZW50aWFsX1JlY2VpdmVfSVQgICAgSEFMX0kyQ19TbGF2ZV9TZXFfUmVjZWl2ZV9JVAotI2VuZGlmIC8qIFNUTTMySDcgfHwgU1RNMzJXQiAgfHwgU1RNMzJHMCB8fCBTVE0zMkYwIHx8IFNUTTMyRjEgfHwgU1RNMzJGMiB8fCBTVE0zMkYzIHx8IFNUTTMyRjQgfHwgU1RNMzJGNyB8fCBTVE0zMkwwIHx8IFNUTTMyTDQgfHwgU1RNMzJMNSB8fCBTVE0zMkc0IHx8IFNUTTMyTDEgKi8KLSNpZiBkZWZpbmVkKFNUTTMySDcpIHx8IGRlZmluZWQoU1RNMzJXQikgfHwgZGVmaW5lZChTVE0zMkcwKSB8fCBkZWZpbmVkKFNUTTMyRjQpIHx8IGRlZmluZWQoU1RNMzJGNykgfHwgZGVmaW5lZChTVE0zMkwwKSB8fCBkZWZpbmVkKFNUTTMyTDQpIHx8IGRlZmluZWQoU1RNMzJMNSkgfHwgZGVmaW5lZChTVE0zMkc0KXx8IGRlZmluZWQoU1RNMzJMMSkKKyNlbmRpZiAvKiBTVE0zMkg3IHx8IFNUTTMyV0IgIHx8IFNUTTMyRzAgfHwgU1RNMzJGMCB8fCBTVE0zMkYxIHx8IFNUTTMyRjIgfHwgU1RNMzJGMyB8fCBTVE0zMkY0IHx8IFNUTTMyRjcgfHwgU1RNMzJMMCB8fAorICAgICAgICAgIFNUTTMyTDQgfHwgU1RNMzJMNSB8fCBTVE0zMkc0IHx8IFNUTTMyTDEgKi8KKyNpZiBkZWZpbmVkKFNUTTMySDcpIHx8IGRlZmluZWQoU1RNMzJXQikgfHwgZGVmaW5lZChTVE0zMkcwKSB8fCBkZWZpbmVkKFNUTTMyRjQpIHx8IGRlZmluZWQoU1RNMzJGNykgfHwgXAorICAgIGRlZmluZWQoU1RNMzJMMCkgfHwgZGVmaW5lZChTVE0zMkw0KSB8fCBkZWZpbmVkKFNUTTMyTDUpIHx8IGRlZmluZWQoU1RNMzJHNCl8fCBkZWZpbmVkKFNUTTMyTDEpCiAjZGVmaW5lIEhBTF9JMkNfTWFzdGVyX1NlcXVlbnRpYWxfVHJhbnNtaXRfRE1BIEhBTF9JMkNfTWFzdGVyX1NlcV9UcmFuc21pdF9ETUEKICNkZWZpbmUgSEFMX0kyQ19NYXN0ZXJfU2VxdWVudGlhbF9SZWNlaXZlX0RNQSAgSEFMX0kyQ19NYXN0ZXJfU2VxX1JlY2VpdmVfRE1BCiAjZGVmaW5lIEhBTF9JMkNfU2xhdmVfU2VxdWVudGlhbF9UcmFuc21pdF9ETUEgIEhBTF9JMkNfU2xhdmVfU2VxX1RyYW5zbWl0X0RNQQpAQCAtMTYxNiwxMCArMTg5NywxMTEgQEAKIAogI2RlZmluZSBQV1JfTU9ERV9FVlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFdSX1BWRF9NT0RFX05PUk1BTAogCisjaWYgZGVmaW5lZCAoU1RNMzJVNSkKKyNkZWZpbmUgUFdSX1NSQU0xX1BBR0UxX1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgIFBXUl9TUkFNMV9QQUdFMV9TVE9QCisjZGVmaW5lIFBXUl9TUkFNMV9QQUdFMl9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICBQV1JfU1JBTTFfUEFHRTJfU1RPUAorI2RlZmluZSBQV1JfU1JBTTFfUEFHRTNfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICAgUFdSX1NSQU0xX1BBR0UzX1NUT1AKKyNkZWZpbmUgUFdSX1NSQU0xX1BBR0U0X1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgIFBXUl9TUkFNMV9QQUdFNF9TVE9QCisjZGVmaW5lIFBXUl9TUkFNMV9QQUdFNV9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICBQV1JfU1JBTTFfUEFHRTVfU1RPUAorI2RlZmluZSBQV1JfU1JBTTFfUEFHRTZfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICAgUFdSX1NSQU0xX1BBR0U2X1NUT1AKKyNkZWZpbmUgUFdSX1NSQU0xX1BBR0U3X1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgIFBXUl9TUkFNMV9QQUdFN19TVE9QCisjZGVmaW5lIFBXUl9TUkFNMV9QQUdFOF9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICBQV1JfU1JBTTFfUEFHRThfU1RPUAorI2RlZmluZSBQV1JfU1JBTTFfUEFHRTlfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICAgUFdSX1NSQU0xX1BBR0U5X1NUT1AKKyNkZWZpbmUgUFdSX1NSQU0xX1BBR0UxMF9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgIFBXUl9TUkFNMV9QQUdFMTBfU1RPUAorI2RlZmluZSBQV1JfU1JBTTFfUEFHRTExX1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgUFdSX1NSQU0xX1BBR0UxMV9TVE9QCisjZGVmaW5lIFBXUl9TUkFNMV9QQUdFMTJfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICBQV1JfU1JBTTFfUEFHRTEyX1NUT1AKKyNkZWZpbmUgUFdSX1NSQU0xX0ZVTExfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICAgIFBXUl9TUkFNMV9GVUxMX1NUT1AKKworI2RlZmluZSBQV1JfU1JBTTJfUEFHRTFfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICAgUFdSX1NSQU0yX1BBR0UxX1NUT1AKKyNkZWZpbmUgUFdSX1NSQU0yX1BBR0UyX1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgIFBXUl9TUkFNMl9QQUdFMl9TVE9QCisjZGVmaW5lIFBXUl9TUkFNMl9GVUxMX1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgICBQV1JfU1JBTTJfRlVMTF9TVE9QCisKKyNkZWZpbmUgUFdSX1NSQU0zX1BBR0UxX1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgIFBXUl9TUkFNM19QQUdFMV9TVE9QCisjZGVmaW5lIFBXUl9TUkFNM19QQUdFMl9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICBQV1JfU1JBTTNfUEFHRTJfU1RPUAorI2RlZmluZSBQV1JfU1JBTTNfUEFHRTNfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICAgUFdSX1NSQU0zX1BBR0UzX1NUT1AKKyNkZWZpbmUgUFdSX1NSQU0zX1BBR0U0X1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgIFBXUl9TUkFNM19QQUdFNF9TVE9QCisjZGVmaW5lIFBXUl9TUkFNM19QQUdFNV9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICBQV1JfU1JBTTNfUEFHRTVfU1RPUAorI2RlZmluZSBQV1JfU1JBTTNfUEFHRTZfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICAgUFdSX1NSQU0zX1BBR0U2X1NUT1AKKyNkZWZpbmUgUFdSX1NSQU0zX1BBR0U3X1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgIFBXUl9TUkFNM19QQUdFN19TVE9QCisjZGVmaW5lIFBXUl9TUkFNM19QQUdFOF9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICBQV1JfU1JBTTNfUEFHRThfU1RPUAorI2RlZmluZSBQV1JfU1JBTTNfUEFHRTlfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICAgUFdSX1NSQU0zX1BBR0U5X1NUT1AKKyNkZWZpbmUgUFdSX1NSQU0zX1BBR0UxMF9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgIFBXUl9TUkFNM19QQUdFMTBfU1RPUAorI2RlZmluZSBQV1JfU1JBTTNfUEFHRTExX1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgUFdSX1NSQU0zX1BBR0UxMV9TVE9QCisjZGVmaW5lIFBXUl9TUkFNM19QQUdFMTJfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICBQV1JfU1JBTTNfUEFHRTEyX1NUT1AKKyNkZWZpbmUgUFdSX1NSQU0zX1BBR0UxM19TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgIFBXUl9TUkFNM19QQUdFMTNfU1RPUAorI2RlZmluZSBQV1JfU1JBTTNfRlVMTF9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICAgUFdSX1NSQU0zX0ZVTExfU1RPUAorCisjZGVmaW5lIFBXUl9TUkFNNF9GVUxMX1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgICBQV1JfU1JBTTRfRlVMTF9TVE9QCisKKyNkZWZpbmUgUFdSX1NSQU01X1BBR0UxX1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgIFBXUl9TUkFNNV9QQUdFMV9TVE9QCisjZGVmaW5lIFBXUl9TUkFNNV9QQUdFMl9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICBQV1JfU1JBTTVfUEFHRTJfU1RPUAorI2RlZmluZSBQV1JfU1JBTTVfUEFHRTNfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICAgUFdSX1NSQU01X1BBR0UzX1NUT1AKKyNkZWZpbmUgUFdSX1NSQU01X1BBR0U0X1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgIFBXUl9TUkFNNV9QQUdFNF9TVE9QCisjZGVmaW5lIFBXUl9TUkFNNV9QQUdFNV9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICBQV1JfU1JBTTVfUEFHRTVfU1RPUAorI2RlZmluZSBQV1JfU1JBTTVfUEFHRTZfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICAgUFdSX1NSQU01X1BBR0U2X1NUT1AKKyNkZWZpbmUgUFdSX1NSQU01X1BBR0U3X1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgIFBXUl9TUkFNNV9QQUdFN19TVE9QCisjZGVmaW5lIFBXUl9TUkFNNV9QQUdFOF9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICBQV1JfU1JBTTVfUEFHRThfU1RPUAorI2RlZmluZSBQV1JfU1JBTTVfUEFHRTlfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICAgUFdSX1NSQU01X1BBR0U5X1NUT1AKKyNkZWZpbmUgUFdSX1NSQU01X1BBR0UxMF9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgIFBXUl9TUkFNNV9QQUdFMTBfU1RPUAorI2RlZmluZSBQV1JfU1JBTTVfUEFHRTExX1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgUFdSX1NSQU01X1BBR0UxMV9TVE9QCisjZGVmaW5lIFBXUl9TUkFNNV9QQUdFMTJfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICBQV1JfU1JBTTVfUEFHRTEyX1NUT1AKKyNkZWZpbmUgUFdSX1NSQU01X1BBR0UxM19TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgIFBXUl9TUkFNNV9QQUdFMTNfU1RPUAorI2RlZmluZSBQV1JfU1JBTTVfRlVMTF9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICAgUFdSX1NSQU01X0ZVTExfU1RPUAorCisjZGVmaW5lIFBXUl9TUkFNNl9QQUdFMV9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICBQV1JfU1JBTTZfUEFHRTFfU1RPUAorI2RlZmluZSBQV1JfU1JBTTZfUEFHRTJfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICAgUFdSX1NSQU02X1BBR0UyX1NUT1AKKyNkZWZpbmUgUFdSX1NSQU02X1BBR0UzX1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgIFBXUl9TUkFNNl9QQUdFM19TVE9QCisjZGVmaW5lIFBXUl9TUkFNNl9QQUdFNF9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICBQV1JfU1JBTTZfUEFHRTRfU1RPUAorI2RlZmluZSBQV1JfU1JBTTZfUEFHRTVfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICAgUFdSX1NSQU02X1BBR0U1X1NUT1AKKyNkZWZpbmUgUFdSX1NSQU02X1BBR0U2X1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgIFBXUl9TUkFNNl9QQUdFNl9TVE9QCisjZGVmaW5lIFBXUl9TUkFNNl9QQUdFN19TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICBQV1JfU1JBTTZfUEFHRTdfU1RPUAorI2RlZmluZSBQV1JfU1JBTTZfUEFHRThfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICAgUFdSX1NSQU02X1BBR0U4X1NUT1AKKyNkZWZpbmUgUFdSX1NSQU02X0ZVTExfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICAgIFBXUl9TUkFNNl9GVUxMX1NUT1AKKworCisjZGVmaW5lIFBXUl9JQ0FDSEVfRlVMTF9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICBQV1JfSUNBQ0hFX0ZVTExfU1RPUAorI2RlZmluZSBQV1JfRENBQ0hFMV9GVUxMX1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgUFdSX0RDQUNIRTFfRlVMTF9TVE9QCisjZGVmaW5lIFBXUl9EQ0FDSEUyX0ZVTExfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICBQV1JfRENBQ0hFMl9GVUxMX1NUT1AKKyNkZWZpbmUgUFdSX0RNQTJEUkFNX0ZVTExfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgIFBXUl9ETUEyRFJBTV9GVUxMX1NUT1AKKyNkZWZpbmUgUFdSX1BFUklQSFJBTV9GVUxMX1NUT1BfUkVURU5USU9OICAgICAgICAgICAgIFBXUl9QRVJJUEhSQU1fRlVMTF9TVE9QCisjZGVmaW5lIFBXUl9QS0EzMlJBTV9GVUxMX1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICBQV1JfUEtBMzJSQU1fRlVMTF9TVE9QCisjZGVmaW5lIFBXUl9HUkFQSElDUFJBTV9GVUxMX1NUT1BfUkVURU5USU9OICAgICAgICAgICBQV1JfR1JBUEhJQ1BSQU1fRlVMTF9TVE9QCisjZGVmaW5lIFBXUl9EU0lSQU1fRlVMTF9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICBQV1JfRFNJUkFNX0ZVTExfU1RPUAorI2RlZmluZSBQV1JfSlBFR1JBTV9GVUxMX1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgUFdSX0pQRUdSQU1fRlVMTF9TVE9QCisKKworI2RlZmluZSBQV1JfU1JBTTJfUEFHRTFfU1RBTkRCWV9SRVRFTlRJT04gICAgICAgICAgICAgUFdSX1NSQU0yX1BBR0UxX1NUQU5EQlkKKyNkZWZpbmUgUFdSX1NSQU0yX1BBR0UyX1NUQU5EQllfUkVURU5USU9OICAgICAgICAgICAgIFBXUl9TUkFNMl9QQUdFMl9TVEFOREJZCisjZGVmaW5lIFBXUl9TUkFNMl9GVUxMX1NUQU5EQllfUkVURU5USU9OICAgICAgICAgICAgICBQV1JfU1JBTTJfRlVMTF9TVEFOREJZCisKKyNkZWZpbmUgUFdSX1NSQU0xX0ZVTExfUlVOX1JFVEVOVElPTiAgICAgICAgICAgICAgICAgIFBXUl9TUkFNMV9GVUxMX1JVTgorI2RlZmluZSBQV1JfU1JBTTJfRlVMTF9SVU5fUkVURU5USU9OICAgICAgICAgICAgICAgICAgUFdSX1NSQU0yX0ZVTExfUlVOCisjZGVmaW5lIFBXUl9TUkFNM19GVUxMX1JVTl9SRVRFTlRJT04gICAgICAgICAgICAgICAgICBQV1JfU1JBTTNfRlVMTF9SVU4KKyNkZWZpbmUgUFdSX1NSQU00X0ZVTExfUlVOX1JFVEVOVElPTiAgICAgICAgICAgICAgICAgIFBXUl9TUkFNNF9GVUxMX1JVTgorI2RlZmluZSBQV1JfU1JBTTVfRlVMTF9SVU5fUkVURU5USU9OICAgICAgICAgICAgICAgICAgUFdSX1NSQU01X0ZVTExfUlVOCisjZGVmaW5lIFBXUl9TUkFNNl9GVUxMX1JVTl9SRVRFTlRJT04gICAgICAgICAgICAgICAgICBQV1JfU1JBTTZfRlVMTF9SVU4KKworI2RlZmluZSBQV1JfQUxMX1JBTV9SVU5fUkVURU5USU9OX01BU0sgICAgICAgICAgICAgICAgUFdSX0FMTF9SQU1fUlVOX01BU0sKKyNlbmRpZgorCiAvKioKICAgKiBAfQogICovCiAKKy8qKiBAZGVmZ3JvdXAgSEFMX1JUQ19BbGlhc2VkX0Z1bmN0aW9ucyBIQUwgUlRDIEFsaWFzZWQgRnVuY3Rpb25zIG1haW50YWluZWQgZm9yIGxlZ2FjeSBwdXJwb3NlCisgICogQHsKKyAgKi8KKyNpZiBkZWZpbmVkKFNUTTMySDUpIHx8IGRlZmluZWQoU1RNMzJXQkEpCisjZGVmaW5lIEhBTF9SVENFeF9TZXRCb290aGFyZHdhcmVLZXkgICAgICAgICAgICBIQUxfUlRDRXhfTG9ja0Jvb3RIYXJkd2FyZUtleQorI2RlZmluZSBIQUxfUlRDRXhfQktVUEJsb2NrX0VuYWJsZSAgICAgICAgICAgICAgSEFMX1JUQ0V4X0JLVVBCbG9jaworI2RlZmluZSBIQUxfUlRDRXhfQktVUEJsb2NrX0Rpc2FibGUgICAgICAgICAgICAgSEFMX1JUQ0V4X0JLVVBVbmJsb2NrCisjZGVmaW5lIEhBTF9SVENFeF9FcmFzZV9TZWNyZXREZXZfQ29uZiAgICAgICAgICBIQUxfUlRDRXhfQ29uZmlnRXJhc2VEZXZpY2VTZWNyZXRzCisjZW5kaWYgLyogU1RNMzJINSB8fCBTVE0zMldCQSAqLworCisvKioKKyAgKiBAfQorICAqLworCiAvKiogQGRlZmdyb3VwIEhBTF9TTUJVU19BbGlhc2VkX0Z1bmN0aW9ucyBIQUwgU01CVVMgQWxpYXNlZCBGdW5jdGlvbnMgbWFpbnRhaW5lZCBmb3IgbGVnYWN5IHB1cnBvc2UKICAgKiBAewogICAqLwpAQCAtMTY0NSw3ICsyMDI3LDggQEAKICNkZWZpbmUgSEFMX1RJTV9ETUFFcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVElNX0RNQUVycm9yCiAjZGVmaW5lIEhBTF9USU1fRE1BQ2FwdHVyZUNwbHQgICAgICAgICAgICAgICAgICAgICAgICAgIFRJTV9ETUFDYXB0dXJlQ3BsdAogI2RlZmluZSBIQUxfVElNRXhfRE1BQ29tbXV0YXRpb25DcGx0ICAgICAgICAgICAgICAgICAgICBUSU1FeF9ETUFDb21tdXRhdGlvbkNwbHQKLSNpZiBkZWZpbmVkKFNUTTMySDcpIHx8IGRlZmluZWQoU1RNMzJHMCkgfHwgZGVmaW5lZChTVE0zMkYwKSB8fCBkZWZpbmVkKFNUTTMyRjEpIHx8IGRlZmluZWQoU1RNMzJGMikgfHwgZGVmaW5lZChTVE0zMkYzKSB8fCBkZWZpbmVkKFNUTTMyRjQpIHx8IGRlZmluZWQoU1RNMzJGNykgfHwgZGVmaW5lZChTVE0zMkwwKSB8fCBkZWZpbmVkKFNUTTMyTDQpCisjaWYgZGVmaW5lZChTVE0zMkg3KSB8fCBkZWZpbmVkKFNUTTMyRzApIHx8IGRlZmluZWQoU1RNMzJGMCkgfHwgZGVmaW5lZChTVE0zMkYxKSB8fCBkZWZpbmVkKFNUTTMyRjIpIHx8IFwKKyAgICBkZWZpbmVkKFNUTTMyRjMpIHx8IGRlZmluZWQoU1RNMzJGNCkgfHwgZGVmaW5lZChTVE0zMkY3KSB8fCBkZWZpbmVkKFNUTTMyTDApIHx8IGRlZmluZWQoU1RNMzJMNCkKICNkZWZpbmUgSEFMX1RJTV9TbGF2ZUNvbmZpZ1N5bmNocm9uaXphdGlvbiAgICAgICAgICAgICAgSEFMX1RJTV9TbGF2ZUNvbmZpZ1N5bmNocm8KICNkZWZpbmUgSEFMX1RJTV9TbGF2ZUNvbmZpZ1N5bmNocm9uaXphdGlvbl9JVCAgICAgICAgICAgSEFMX1RJTV9TbGF2ZUNvbmZpZ1N5bmNocm9fSVQKICNkZWZpbmUgSEFMX1RJTUV4X0NvbW11dGF0aW9uQ2FsbGJhY2sgICAgICAgICAgICAgICAgICAgSEFMX1RJTUV4X0NvbW11dENhbGxiYWNrCkBAIC0xOTAyLDcgKzIyODUsOCBAQAogI2RlZmluZSBDT01QX1NUT1AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19IQUxfQ09NUF9ESVNBQkxFCiAjZGVmaW5lIENPTVBfTE9DSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0hBTF9DT01QX0xPQ0sKIAotI2lmIGRlZmluZWQoU1RNMzJGMzAxeDgpIHx8IGRlZmluZWQoU1RNMzJGMzAyeDgpIHx8IGRlZmluZWQoU1RNMzJGMzE4eHgpIHx8IGRlZmluZWQoU1RNMzJGMzAzeDgpIHx8IGRlZmluZWQoU1RNMzJGMzM0eDgpIHx8IGRlZmluZWQoU1RNMzJGMzI4eHgpCisjaWYgZGVmaW5lZChTVE0zMkYzMDF4OCkgfHwgZGVmaW5lZChTVE0zMkYzMDJ4OCkgfHwgZGVmaW5lZChTVE0zMkYzMTh4eCkgfHwgZGVmaW5lZChTVE0zMkYzMDN4OCkgfHwgXAorICAgIGRlZmluZWQoU1RNMzJGMzM0eDgpIHx8IGRlZmluZWQoU1RNMzJGMzI4eHgpCiAjZGVmaW5lIF9fSEFMX0NPTVBfRVhUSV9SSVNJTkdfSVRfRU5BQkxFKF9fRVhUSUxJTkVfXykgICAoKChfX0VYVElMSU5FX18pICA9PSBDT01QX0VYVElfTElORV9DT01QMikgPyBfX0hBTF9DT01QX0NPTVAyX0VYVElfRU5BQkxFX1JJU0lOR19FREdFKCkgOiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0VYVElMSU5FX18pICA9PSBDT01QX0VYVElfTElORV9DT01QNCkgPyBfX0hBTF9DT01QX0NPTVA0X0VYVElfRU5BQkxFX1JJU0lOR19FREdFKCkgOiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19IQUxfQ09NUF9DT01QNl9FWFRJX0VOQUJMRV9SSVNJTkdfRURHRSgpKQpAQCAtMjA3NCw4ICsyNDU4LDEwIEBACiAvKiogQGRlZmdyb3VwIEhBTF9DT01QX0FsaWFzZWRfRnVuY3Rpb25zIEhBTCBDT01QIEFsaWFzZWQgRnVuY3Rpb25zIG1haW50YWluZWQgZm9yIGxlZ2FjeSBwdXJwb3NlCiAgICogQHsKICAgKi8KLSNkZWZpbmUgSEFMX0NPTVBfU3RhcnRfSVQgICAgICAgSEFMX0NPTVBfU3RhcnQgLyogRnVuY3Rpb24gY29uc2lkZXJlZCBhcyBsZWdhY3kgYXMgRVhUSSBldmVudCBvciBJVCBjb25maWd1cmF0aW9uIGlzIGRvbmUgaW50byBIQUxfQ09NUF9Jbml0KCkgKi8KLSNkZWZpbmUgSEFMX0NPTVBfU3RvcF9JVCAgICAgICAgSEFMX0NPTVBfU3RvcCAgLyogRnVuY3Rpb24gY29uc2lkZXJlZCBhcyBsZWdhY3kgYXMgRVhUSSBldmVudCBvciBJVCBjb25maWd1cmF0aW9uIGlzIGRvbmUgaW50byBIQUxfQ09NUF9Jbml0KCkgKi8KKyNkZWZpbmUgSEFMX0NPTVBfU3RhcnRfSVQgICAgICAgSEFMX0NPTVBfU3RhcnQgLyogRnVuY3Rpb24gY29uc2lkZXJlZCBhcyBsZWdhY3kgYXMgRVhUSSBldmVudCBvciBJVCBjb25maWd1cmF0aW9uIGlzIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lIGludG8gSEFMX0NPTVBfSW5pdCgpICovCisjZGVmaW5lIEhBTF9DT01QX1N0b3BfSVQgICAgICAgIEhBTF9DT01QX1N0b3AgIC8qIEZ1bmN0aW9uIGNvbnNpZGVyZWQgYXMgbGVnYWN5IGFzIEVYVEkgZXZlbnQgb3IgSVQgY29uZmlndXJhdGlvbiBpcyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSBpbnRvIEhBTF9DT01QX0luaXQoKSAqLwogLyoqCiAgICogQH0KICAgKi8KQEAgLTIyMzQsNyArMjYyMCw5IEBACiAjZGVmaW5lIF9fSEFMX1BXUl9JTlRFUk5BTFdBS0VVUF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTF9QV1JFeF9FbmFibGVJbnRlcm5hbFdha2VVcExpbmUKICNkZWZpbmUgX19IQUxfUFdSX1BVTExfVVBfRE9XTl9DT05GSUdfRElTQUJMRSAgICAgICAgICAgICAgICAgICAgSEFMX1BXUkV4X0Rpc2FibGVQdWxsVXBQdWxsRG93bkNvbmZpZwogI2RlZmluZSBfX0hBTF9QV1JfUFVMTF9VUF9ET1dOX0NPTkZJR19FTkFCTEUgICAgICAgICAgICAgICAgICAgICBIQUxfUFdSRXhfRW5hYmxlUHVsbFVwUHVsbERvd25Db25maWcKLSNkZWZpbmUgX19IQUxfUFdSX1BWRF9FWFRJX0NMRUFSX0VHREVfVFJJR0dFUigpICAgICAgICAgICAgICAgICAgZG8geyBfX0hBTF9QV1JfUFZEX0VYVElfRElTQUJMRV9SSVNJTkdfRURHRSgpO19fSEFMX1BXUl9QVkRfRVhUSV9ESVNBQkxFX0ZBTExJTkdfRURHRSgpOyB9IHdoaWxlKDApCisjZGVmaW5lIF9fSEFMX1BXUl9QVkRfRVhUSV9DTEVBUl9FR0RFX1RSSUdHRVIoKSAgICAgICAgICAgICAgICAgIGRvIHsgX19IQUxfUFdSX1BWRF9FWFRJX0RJU0FCTEVfUklTSU5HX0VER0UoKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSEFMX1BXUl9QVkRfRVhUSV9ESVNBQkxFX0ZBTExJTkdfRURHRSgpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKICNkZWZpbmUgX19IQUxfUFdSX1BWRF9FWFRJX0VWRU5UX0RJU0FCTEUgICAgICAgICAgICAgICAgICAgICAgICAgX19IQUxfUFdSX1BWRF9FWFRJX0RJU0FCTEVfRVZFTlQKICNkZWZpbmUgX19IQUxfUFdSX1BWRF9FWFRJX0VWRU5UX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgX19IQUxfUFdSX1BWRF9FWFRJX0VOQUJMRV9FVkVOVAogI2RlZmluZSBfX0hBTF9QV1JfUFZEX0VYVElfRkFMTElOR1RSSUdHRVJfRElTQUJMRSAgICAgICAgICAgICAgICBfX0hBTF9QV1JfUFZEX0VYVElfRElTQUJMRV9GQUxMSU5HX0VER0UKQEAgLTIyNDMsOCArMjYzMSwxMiBAQAogI2RlZmluZSBfX0hBTF9QV1JfUFZEX0VYVElfUklTSU5HVFJJR0dFUl9FTkFCTEUgICAgICAgICAgICAgICAgICBfX0hBTF9QV1JfUFZEX0VYVElfRU5BQkxFX1JJU0lOR19FREdFCiAjZGVmaW5lIF9fSEFMX1BXUl9QVkRfRVhUSV9TRVRfRkFMTElOR19FR0RFX1RSSUdHRVIgICAgICAgICAgICAgIF9fSEFMX1BXUl9QVkRfRVhUSV9FTkFCTEVfRkFMTElOR19FREdFCiAjZGVmaW5lIF9fSEFMX1BXUl9QVkRfRVhUSV9TRVRfUklTSU5HX0VER0VfVFJJR0dFUiAgICAgICAgICAgICAgIF9fSEFMX1BXUl9QVkRfRVhUSV9FTkFCTEVfUklTSU5HX0VER0UKLSNkZWZpbmUgX19IQUxfUFdSX1BWTV9ESVNBQkxFKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8geyBIQUxfUFdSRXhfRGlzYWJsZVBWTTEoKTtIQUxfUFdSRXhfRGlzYWJsZVBWTTIoKTtIQUxfUFdSRXhfRGlzYWJsZVBWTTMoKTtIQUxfUFdSRXhfRGlzYWJsZVBWTTQoKTsgfSB3aGlsZSgwKQotI2RlZmluZSBfX0hBTF9QV1JfUFZNX0VOQUJMRSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7IEhBTF9QV1JFeF9FbmFibGVQVk0xKCk7SEFMX1BXUkV4X0VuYWJsZVBWTTIoKTtIQUxfUFdSRXhfRW5hYmxlUFZNMygpO0hBTF9QV1JFeF9FbmFibGVQVk00KCk7IH0gd2hpbGUoMCkKKyNkZWZpbmUgX19IQUxfUFdSX1BWTV9ESVNBQkxFKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8geyBIQUxfUFdSRXhfRGlzYWJsZVBWTTEoKTtIQUxfUFdSRXhfRGlzYWJsZVBWTTIoKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTF9QV1JFeF9EaXNhYmxlUFZNMygpO0hBTF9QV1JFeF9EaXNhYmxlUFZNNCgpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKKyNkZWZpbmUgX19IQUxfUFdSX1BWTV9FTkFCTEUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8geyBIQUxfUFdSRXhfRW5hYmxlUFZNMSgpO0hBTF9QV1JFeF9FbmFibGVQVk0yKCk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQUxfUFdSRXhfRW5hYmxlUFZNMygpO0hBTF9QV1JFeF9FbmFibGVQVk00KCk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQogI2RlZmluZSBfX0hBTF9QV1JfU1JBTTJDT05URU5UX1BSRVNFUlZFX0RJU0FCTEUgICAgICAgICAgICAgICAgICBIQUxfUFdSRXhfRGlzYWJsZVNSQU0yQ29udGVudFJldGVudGlvbgogI2RlZmluZSBfX0hBTF9QV1JfU1JBTTJDT05URU5UX1BSRVNFUlZFX0VOQUJMRSAgICAgICAgICAgICAgICAgICBIQUxfUFdSRXhfRW5hYmxlU1JBTTJDb250ZW50UmV0ZW50aW9uCiAjZGVmaW5lIF9fSEFMX1BXUl9WRERJTzJfRElTQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTF9QV1JFeF9EaXNhYmxlVmRkSU8yCkBAIC0yMjgwLDggKzI2NzIsOCBAQAogI2RlZmluZSBSQ0NfU3RvcFdha2VVcENsb2NrX0hTSSAgICAgUkNDX1NUT1BfV0FLRVVQQ0xPQ0tfSFNJCiAKICNkZWZpbmUgSEFMX1JDQ19DQ1NDYWxsYmFjayBIQUxfUkNDX0NTU0NhbGxiYWNrCi0jZGVmaW5lIEhBTF9SQzQ4X0VuYWJsZUJ1ZmZlcl9DbWQoY21kKSAoKChjbWRcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk9PUVOQUJMRSkgPyBIQUxfUkNDRXhfRW5hYmxlSFNJNDhfVlJFRklOVCgpIDogSEFMX1JDQ0V4X0Rpc2FibGVIU0k0OF9WUkVGSU5UKCkpCisjZGVmaW5lIEhBTF9SQzQ4X0VuYWJsZUJ1ZmZlcl9DbWQoY21kKSAoKChjbWQpPT1FTkFCTEUpID8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTF9SQ0NFeF9FbmFibGVIU0k0OF9WUkVGSU5UKCkgOiBIQUxfUkNDRXhfRGlzYWJsZUhTSTQ4X1ZSRUZJTlQoKSkKIAogI2RlZmluZSBfX0FEQ19DTEtfRElTQUJMRSAgICAgICAgICBfX0hBTF9SQ0NfQURDX0NMS19ESVNBQkxFCiAjZGVmaW5lIF9fQURDX0NMS19FTkFCTEUgICAgICAgICAgIF9fSEFMX1JDQ19BRENfQ0xLX0VOQUJMRQpAQCAtMjc4NSw2ICszMTc3LDExIEBACiAKICNkZWZpbmUgIF9fSEFMX1JDQ19XV0RHX0lTX0NMS19FTkFCTEVEICAgIF9fSEFMX1JDQ19XV0RHMV9JU19DTEtfRU5BQkxFRAogI2RlZmluZSAgX19IQUxfUkNDX1dXREdfSVNfQ0xLX0RJU0FCTEVEICBfX0hBTF9SQ0NfV1dERzFfSVNfQ0xLX0RJU0FCTEVECisjZGVmaW5lICBSQ0NfU1BJNENMS1NPVVJDRV9EMlBDTEsxICAgICAgIFJDQ19TUEk0Q0xLU09VUkNFX0QyUENMSzIKKyNkZWZpbmUgIFJDQ19TUEk1Q0xLU09VUkNFX0QyUENMSzEgICAgICAgUkNDX1NQSTVDTEtTT1VSQ0VfRDJQQ0xLMgorI2RlZmluZSAgUkNDX1NQSTQ1Q0xLU09VUkNFX0QyUENMSzEgICAgICBSQ0NfU1BJNDVDTEtTT1VSQ0VfRDJQQ0xLMgorI2RlZmluZSAgUkNDX1NQSTQ1Q0xLU09VUkNFX0NEUENMSzEgICAgICBSQ0NfU1BJNDVDTEtTT1VSQ0VfQ0RQQ0xLMgorI2RlZmluZSAgUkNDX1NQSTQ1Q0xLU09VUkNFX1BDTEsxICAgICAgICBSQ0NfU1BJNDVDTEtTT1VSQ0VfUENMSzIKICNlbmRpZgogCiAjZGVmaW5lIF9fV1dER19DTEtfRElTQUJMRSBfX0hBTF9SQ0NfV1dER19DTEtfRElTQUJMRQpAQCAtMzI0OSw3ICszNjQ2LDggQEAKICNkZWZpbmUgUkNDX01DT1NPVVJDRV9QTExDTEtfTk9ESVYgIFJDQ19NQ08xU09VUkNFX1BMTENMSwogI2RlZmluZSBSQ0NfTUNPU09VUkNFX1BMTENMS19ESVYyICAgUkNDX01DTzFTT1VSQ0VfUExMQ0xLX0RJVjIKIAotI2lmIGRlZmluZWQoU1RNMzJMNCkgfHwgZGVmaW5lZChTVE0zMldCKSB8fCBkZWZpbmVkKFNUTTMyRzApIHx8IGRlZmluZWQoU1RNMzJHNCkgfHwgZGVmaW5lZChTVE0zMkw1KSB8fCBkZWZpbmVkKFNUTTMyV0wpCisjaWYgZGVmaW5lZChTVE0zMkw0KSB8fCBkZWZpbmVkKFNUTTMyV0IpIHx8IGRlZmluZWQoU1RNMzJHMCkgfHwgZGVmaW5lZChTVE0zMkc0KSB8fCBkZWZpbmVkKFNUTTMyTDUpIHx8IFwKKyAgICAgIGRlZmluZWQoU1RNMzJXTCkgfHwgZGVmaW5lZChTVE0zMkMwKQogI2RlZmluZSBSQ0NfUlRDQ0xLU09VUkNFX05PX0NMSyAgICAgUkNDX1JUQ0NMS1NPVVJDRV9OT05FCiAjZWxzZQogI2RlZmluZSBSQ0NfUlRDQ0xLU09VUkNFX05PTkUgICAgICAgUkNDX1JUQ0NMS1NPVVJDRV9OT19DTEsKQEAgLTMzNjEsNiArMzc1OSwxMjUgQEAKICNkZWZpbmUgUkNDX0RGU0RNMUNMS1NPVVJDRV9BUEIyICAgICAgICAgICAgUkNDX0RGU0RNMUNMS1NPVVJDRV9QQ0xLMgogI2RlZmluZSBSQ0NfREZTRE0yQ0xLU09VUkNFX0FQQjIgICAgICAgICAgICBSQ0NfREZTRE0yQ0xLU09VUkNFX1BDTEsyCiAjZGVmaW5lIFJDQ19GTVBJMkMxQ0xLU09VUkNFX0FQQiAgICAgICAgICAgIFJDQ19GTVBJMkMxQ0xLU09VUkNFX1BDTEsxCisjaWYgZGVmaW5lZChTVE0zMlU1KQorI2RlZmluZSBNU0lLUExMTW9kZVNFTCAgICAgICAgICAgICAgICAgICAgICAgIFJDQ19NU0lLUExMX01PREVfU0VMCisjZGVmaW5lIE1TSVNQTExNb2RlU0VMICAgICAgICAgICAgICAgICAgICAgICAgUkNDX01TSVNQTExfTU9ERV9TRUwKKyNkZWZpbmUgX19IQUxfUkNDX0FIQjIxX0NMS19ESVNBQkxFICAgICAgICAgICBfX0hBTF9SQ0NfQUhCMl8xX0NMS19ESVNBQkxFCisjZGVmaW5lIF9fSEFMX1JDQ19BSEIyMl9DTEtfRElTQUJMRSAgICAgICAgICAgX19IQUxfUkNDX0FIQjJfMl9DTEtfRElTQUJMRQorI2RlZmluZSBfX0hBTF9SQ0NfQUhCMV9DTEtfRGlzYWJsZV9DbGVhciAgICAgIF9fSEFMX1JDQ19BSEIxX0NMS19FTkFCTEUKKyNkZWZpbmUgX19IQUxfUkNDX0FIQjIxX0NMS19EaXNhYmxlX0NsZWFyICAgICBfX0hBTF9SQ0NfQUhCMl8xX0NMS19FTkFCTEUKKyNkZWZpbmUgX19IQUxfUkNDX0FIQjIyX0NMS19EaXNhYmxlX0NsZWFyICAgICBfX0hBTF9SQ0NfQUhCMl8yX0NMS19FTkFCTEUKKyNkZWZpbmUgX19IQUxfUkNDX0FIQjNfQ0xLX0Rpc2FibGVfQ2xlYXIgICAgICBfX0hBTF9SQ0NfQUhCM19DTEtfRU5BQkxFCisjZGVmaW5lIF9fSEFMX1JDQ19BUEIxX0NMS19EaXNhYmxlX0NsZWFyICAgICAgX19IQUxfUkNDX0FQQjFfQ0xLX0VOQUJMRQorI2RlZmluZSBfX0hBTF9SQ0NfQVBCMl9DTEtfRGlzYWJsZV9DbGVhciAgICAgIF9fSEFMX1JDQ19BUEIyX0NMS19FTkFCTEUKKyNkZWZpbmUgX19IQUxfUkNDX0FQQjNfQ0xLX0Rpc2FibGVfQ2xlYXIgICAgICBfX0hBTF9SQ0NfQVBCM19DTEtfRU5BQkxFCisjZGVmaW5lIElTX1JDQ19NU0lQTExNb2RlU2VsZWN0aW9uICAgICAgICAgICAgSVNfUkNDX01TSVBMTE1PREVfU0VMRUNUCisjZGVmaW5lIFJDQ19QRVJJUEhDTEtfQ0xLNDggICAgICAgICAgICAgICAgICAgUkNDX1BFUklQSENMS19JQ0xLCisjZGVmaW5lIFJDQ19DTEs0OENMS1NPVVJDRV9IU0k0OCAgICAgICAgICAgICAgUkNDX0lDTEtfQ0xLU09VUkNFX0hTSTQ4CisjZGVmaW5lIFJDQ19DTEs0OENMS1NPVVJDRV9QTEwyICAgICAgICAgICAgICAgUkNDX0lDTEtfQ0xLU09VUkNFX1BMTDIKKyNkZWZpbmUgUkNDX0NMSzQ4Q0xLU09VUkNFX1BMTDEgICAgICAgICAgICAgICBSQ0NfSUNMS19DTEtTT1VSQ0VfUExMMQorI2RlZmluZSBSQ0NfQ0xLNDhDTEtTT1VSQ0VfTVNJSyAgICAgICAgICAgICAgIFJDQ19JQ0xLX0NMS1NPVVJDRV9NU0lLCisjZGVmaW5lIF9fSEFMX1JDQ19BREMxX0NMS19FTkFCTEUgICAgICAgICAgICAgX19IQUxfUkNDX0FEQzEyX0NMS19FTkFCTEUKKyNkZWZpbmUgX19IQUxfUkNDX0FEQzFfQ0xLX0RJU0FCTEUgICAgICAgICAgICBfX0hBTF9SQ0NfQURDMTJfQ0xLX0RJU0FCTEUKKyNkZWZpbmUgX19IQUxfUkNDX0FEQzFfSVNfQ0xLX0VOQUJMRUQgICAgICAgICBfX0hBTF9SQ0NfQURDMTJfSVNfQ0xLX0VOQUJMRUQKKyNkZWZpbmUgX19IQUxfUkNDX0FEQzFfSVNfQ0xLX0RJU0FCTEVEICAgICAgICBfX0hBTF9SQ0NfQURDMTJfSVNfQ0xLX0RJU0FCTEVECisjZGVmaW5lIF9fSEFMX1JDQ19BREMxX0ZPUkNFX1JFU0VUICAgICAgICAgICAgX19IQUxfUkNDX0FEQzEyX0ZPUkNFX1JFU0VUCisjZGVmaW5lIF9fSEFMX1JDQ19BREMxX1JFTEVBU0VfUkVTRVQgICAgICAgICAgX19IQUxfUkNDX0FEQzEyX1JFTEVBU0VfUkVTRVQKKyNkZWZpbmUgX19IQUxfUkNDX0FEQzFfQ0xLX1NMRUVQX0VOQUJMRSAgICAgICBfX0hBTF9SQ0NfQURDMTJfQ0xLX1NMRUVQX0VOQUJMRQorI2RlZmluZSBfX0hBTF9SQ0NfQURDMV9DTEtfU0xFRVBfRElTQUJMRSAgICAgIF9fSEFMX1JDQ19BREMxMl9DTEtfU0xFRVBfRElTQUJMRQorI2RlZmluZSBfX0hBTF9SQ0NfR0VUX0NMSzQ4X1NPVVJDRSAgICAgICAgICAgIF9fSEFMX1JDQ19HRVRfSUNMS19TT1VSQ0UKKyNkZWZpbmUgX19IQUxfUkNDX1BMTEZSQUNOX0VOQUJMRSAgICAgICAgICAgICBfX0hBTF9SQ0NfUExMX0ZSQUNOX0VOQUJMRQorI2RlZmluZSBfX0hBTF9SQ0NfUExMRlJBQ05fRElTQUJMRSAgICAgICAgICAgIF9fSEFMX1JDQ19QTExfRlJBQ05fRElTQUJMRQorI2RlZmluZSBfX0hBTF9SQ0NfUExMRlJBQ05fQ09ORklHICAgICAgICAgICAgIF9fSEFMX1JDQ19QTExfRlJBQ05fQ09ORklHCisjZGVmaW5lIElTX1JDQ19QTExGUkFDTl9WQUxVRSAgICAgICAgICAgICAgICAgSVNfUkNDX1BMTF9GUkFDTl9WQUxVRQorI2VuZGlmIC8qIFNUTTMyVTUgKi8KKworI2lmIGRlZmluZWQoU1RNMzJINSkKKyNkZWZpbmUgX19IQUxfUkNDX1BMTEZSQUNOX0VOQUJMRSAgICAgICBfX0hBTF9SQ0NfUExMX0ZSQUNOX0VOQUJMRQorI2RlZmluZSBfX0hBTF9SQ0NfUExMRlJBQ05fRElTQUJMRSAgICAgIF9fSEFMX1JDQ19QTExfRlJBQ05fRElTQUJMRQorI2RlZmluZSBfX0hBTF9SQ0NfUExMRlJBQ05fQ09ORklHICAgICAgIF9fSEFMX1JDQ19QTExfRlJBQ05fQ09ORklHCisjZGVmaW5lIElTX1JDQ19QTExGUkFDTl9WQUxVRSAgICAgICAgICAgSVNfUkNDX1BMTF9GUkFDTl9WQUxVRQorCisjZGVmaW5lIFJDQ19QTExTT1VSQ0VfTk9ORSAgICAgICAgICAgICAgUkNDX1BMTDFfU09VUkNFX05PTkUKKyNkZWZpbmUgUkNDX1BMTFNPVVJDRV9IU0kgICAgICAgICAgICAgICBSQ0NfUExMMV9TT1VSQ0VfSFNJCisjZGVmaW5lIFJDQ19QTExTT1VSQ0VfQ1NJICAgICAgICAgICAgICAgUkNDX1BMTDFfU09VUkNFX0NTSQorI2RlZmluZSBSQ0NfUExMU09VUkNFX0hTRSAgICAgICAgICAgICAgIFJDQ19QTEwxX1NPVVJDRV9IU0UKKyNkZWZpbmUgUkNDX1BMTFZDSVJBTkdFXzAgICAgICAgICAgICAgICBSQ0NfUExMMV9WQ0lSQU5HRV8wCisjZGVmaW5lIFJDQ19QTExWQ0lSQU5HRV8xICAgICAgICAgICAgICAgUkNDX1BMTDFfVkNJUkFOR0VfMQorI2RlZmluZSBSQ0NfUExMVkNJUkFOR0VfMiAgICAgICAgICAgICAgIFJDQ19QTEwxX1ZDSVJBTkdFXzIKKyNkZWZpbmUgUkNDX1BMTFZDSVJBTkdFXzMgICAgICAgICAgICAgICBSQ0NfUExMMV9WQ0lSQU5HRV8zCisjZGVmaW5lIFJDQ19QTEwxVkNPV0lERSAgICAgICAgICAgICAgICAgUkNDX1BMTDFfVkNPUkFOR0VfV0lERQorI2RlZmluZSBSQ0NfUExMMVZDT01FRElVTSAgICAgICAgICAgICAgIFJDQ19QTEwxX1ZDT1JBTkdFX01FRElVTQorCisjZGVmaW5lIElTX1JDQ19QTExTT1VSQ0UgICAgICAgICAgICAgICAgSVNfUkNDX1BMTDFfU09VUkNFCisjZGVmaW5lIElTX1JDQ19QTExSR0VfVkFMVUUgICAgICAgICAgICAgSVNfUkNDX1BMTDFfVkNJUkdFX1ZBTFVFCisjZGVmaW5lIElTX1JDQ19QTExWQ09SR0VfVkFMVUUgICAgICAgICAgSVNfUkNDX1BMTDFfVkNPUkdFX1ZBTFVFCisjZGVmaW5lIElTX1JDQ19QTExDTE9DS09VVF9WQUxVRSAgICAgICAgSVNfUkNDX1BMTDFfQ0xPQ0tPVVRfVkFMVUUKKyNkZWZpbmUgSVNfUkNDX1BMTF9GUkFDTl9WQUxVRSAgICAgICAgICBJU19SQ0NfUExMMV9GUkFDTl9WQUxVRQorI2RlZmluZSBJU19SQ0NfUExMTV9WQUxVRSAgICAgICAgICAgICAgIElTX1JDQ19QTEwxX0RJVk1fVkFMVUUKKyNkZWZpbmUgSVNfUkNDX1BMTE5fVkFMVUUgICAgICAgICAgICAgICBJU19SQ0NfUExMMV9NVUxOX1ZBTFVFCisjZGVmaW5lIElTX1JDQ19QTExQX1ZBTFVFICAgICAgICAgICAgICAgSVNfUkNDX1BMTDFfRElWUF9WQUxVRQorI2RlZmluZSBJU19SQ0NfUExMUV9WQUxVRSAgICAgICAgICAgICAgIElTX1JDQ19QTEwxX0RJVlFfVkFMVUUKKyNkZWZpbmUgSVNfUkNDX1BMTFJfVkFMVUUgICAgICAgICAgICAgICBJU19SQ0NfUExMMV9ESVZSX1ZBTFVFCisKKyNkZWZpbmUgX19IQUxfUkNDX1BMTF9FTkFCTEUgICAgICAgICAgICBfX0hBTF9SQ0NfUExMMV9FTkFCTEUKKyNkZWZpbmUgX19IQUxfUkNDX1BMTF9ESVNBQkxFICAgICAgICAgICBfX0hBTF9SQ0NfUExMMV9ESVNBQkxFCisjZGVmaW5lIF9fSEFMX1JDQ19QTExfRlJBQ05fRU5BQkxFICAgICAgX19IQUxfUkNDX1BMTDFfRlJBQ05fRU5BQkxFCisjZGVmaW5lIF9fSEFMX1JDQ19QTExfRlJBQ05fRElTQUJMRSAgICAgX19IQUxfUkNDX1BMTDFfRlJBQ05fRElTQUJMRQorI2RlZmluZSBfX0hBTF9SQ0NfUExMX0NPTkZJRyAgICAgICAgICAgIF9fSEFMX1JDQ19QTEwxX0NPTkZJRworI2RlZmluZSBfX0hBTF9SQ0NfUExMX1BMTFNPVVJDRV9DT05GSUcgIF9fSEFMX1JDQ19QTEwxX1BMTFNPVVJDRV9DT05GSUcKKyNkZWZpbmUgX19IQUxfUkNDX1BMTF9ESVZNX0NPTkZJRyAgICAgICBfX0hBTF9SQ0NfUExMMV9ESVZNX0NPTkZJRworI2RlZmluZSBfX0hBTF9SQ0NfUExMX0ZSQUNOX0NPTkZJRyAgICAgIF9fSEFMX1JDQ19QTEwxX0ZSQUNOX0NPTkZJRworI2RlZmluZSBfX0hBTF9SQ0NfUExMX1ZDSVJBTkdFICAgICAgICAgIF9fSEFMX1JDQ19QTEwxX1ZDSVJBTkdFCisjZGVmaW5lIF9fSEFMX1JDQ19QTExfVkNPUkFOR0UgICAgICAgICAgX19IQUxfUkNDX1BMTDFfVkNPUkFOR0UKKyNkZWZpbmUgX19IQUxfUkNDX0dFVF9QTExfT1NDU09VUkNFICAgICBfX0hBTF9SQ0NfR0VUX1BMTDFfT1NDU09VUkNFCisjZGVmaW5lIF9fSEFMX1JDQ19QTExDTEtPVVRfRU5BQkxFICAgICAgX19IQUxfUkNDX1BMTDFfQ0xLT1VUX0VOQUJMRQorI2RlZmluZSBfX0hBTF9SQ0NfUExMQ0xLT1VUX0RJU0FCTEUgICAgIF9fSEFMX1JDQ19QTEwxX0NMS09VVF9ESVNBQkxFCisjZGVmaW5lIF9fSEFMX1JDQ19HRVRfUExMQ0xLT1VUX0NPTkZJRyAgX19IQUxfUkNDX0dFVF9QTEwxX0NMS09VVF9DT05GSUcKKworI2RlZmluZSBfX0hBTF9SQ0NfUExMMkZSQUNOX0VOQUJMRSAgICAgIF9fSEFMX1JDQ19QTEwyX0ZSQUNOX0VOQUJMRQorI2RlZmluZSBfX0hBTF9SQ0NfUExMMkZSQUNOX0RJU0FCTEUgICAgIF9fSEFMX1JDQ19QTEwyX0ZSQUNOX0RJU0FCTEUKKyNkZWZpbmUgX19IQUxfUkNDX1BMTDJDTEtPVVRfRU5BQkxFICAgICBfX0hBTF9SQ0NfUExMMl9DTEtPVVRfRU5BQkxFCisjZGVmaW5lIF9fSEFMX1JDQ19QTEwyQ0xLT1VUX0RJU0FCTEUgICAgX19IQUxfUkNDX1BMTDJfQ0xLT1VUX0RJU0FCTEUKKyNkZWZpbmUgX19IQUxfUkNDX1BMTDJGUkFDTl9DT05GSUcgICAgICBfX0hBTF9SQ0NfUExMMl9GUkFDTl9DT05GSUcKKyNkZWZpbmUgX19IQUxfUkNDX0dFVF9QTEwyQ0xLT1VUX0NPTkZJRyBfX0hBTF9SQ0NfR0VUX1BMTDJfQ0xLT1VUX0NPTkZJRworCisjZGVmaW5lIF9fSEFMX1JDQ19QTEwzRlJBQ05fRU5BQkxFICAgICAgX19IQUxfUkNDX1BMTDNfRlJBQ05fRU5BQkxFCisjZGVmaW5lIF9fSEFMX1JDQ19QTEwzRlJBQ05fRElTQUJMRSAgICAgX19IQUxfUkNDX1BMTDNfRlJBQ05fRElTQUJMRQorI2RlZmluZSBfX0hBTF9SQ0NfUExMM0NMS09VVF9FTkFCTEUgICAgIF9fSEFMX1JDQ19QTEwzX0NMS09VVF9FTkFCTEUKKyNkZWZpbmUgX19IQUxfUkNDX1BMTDNDTEtPVVRfRElTQUJMRSAgICBfX0hBTF9SQ0NfUExMM19DTEtPVVRfRElTQUJMRQorI2RlZmluZSBfX0hBTF9SQ0NfUExMM0ZSQUNOX0NPTkZJRyAgICAgIF9fSEFMX1JDQ19QTEwzX0ZSQUNOX0NPTkZJRworI2RlZmluZSBfX0hBTF9SQ0NfR0VUX1BMTDNDTEtPVVRfQ09ORklHIF9fSEFMX1JDQ19HRVRfUExMM19DTEtPVVRfQ09ORklHCisKKyNkZWZpbmUgUkNDX1BMTDJWQ0lSQU5HRV8wICAgICAgICAgICAgICBSQ0NfUExMMl9WQ0lSQU5HRV8wCisjZGVmaW5lIFJDQ19QTEwyVkNJUkFOR0VfMSAgICAgICAgICAgICAgUkNDX1BMTDJfVkNJUkFOR0VfMQorI2RlZmluZSBSQ0NfUExMMlZDSVJBTkdFXzIgICAgICAgICAgICAgIFJDQ19QTEwyX1ZDSVJBTkdFXzIKKyNkZWZpbmUgUkNDX1BMTDJWQ0lSQU5HRV8zICAgICAgICAgICAgICBSQ0NfUExMMl9WQ0lSQU5HRV8zCisKKyNkZWZpbmUgUkNDX1BMTDJWQ09XSURFICAgICAgICAgICAgICAgICBSQ0NfUExMMl9WQ09SQU5HRV9XSURFCisjZGVmaW5lIFJDQ19QTEwyVkNPTUVESVVNICAgICAgICAgICAgICAgUkNDX1BMTDJfVkNPUkFOR0VfTUVESVVNCisKKyNkZWZpbmUgUkNDX1BMTDJTT1VSQ0VfTk9ORSAgICAgICAgICAgICBSQ0NfUExMMl9TT1VSQ0VfTk9ORQorI2RlZmluZSBSQ0NfUExMMlNPVVJDRV9IU0kgICAgICAgICAgICAgIFJDQ19QTEwyX1NPVVJDRV9IU0kKKyNkZWZpbmUgUkNDX1BMTDJTT1VSQ0VfQ1NJICAgICAgICAgICAgICBSQ0NfUExMMl9TT1VSQ0VfQ1NJCisjZGVmaW5lIFJDQ19QTEwyU09VUkNFX0hTRSAgICAgICAgICAgICAgUkNDX1BMTDJfU09VUkNFX0hTRQorCisjZGVmaW5lIFJDQ19QTEwzVkNJUkFOR0VfMCAgICAgICAgICAgICAgUkNDX1BMTDNfVkNJUkFOR0VfMAorI2RlZmluZSBSQ0NfUExMM1ZDSVJBTkdFXzEgICAgICAgICAgICAgIFJDQ19QTEwzX1ZDSVJBTkdFXzEKKyNkZWZpbmUgUkNDX1BMTDNWQ0lSQU5HRV8yICAgICAgICAgICAgICBSQ0NfUExMM19WQ0lSQU5HRV8yCisjZGVmaW5lIFJDQ19QTEwzVkNJUkFOR0VfMyAgICAgICAgICAgICAgUkNDX1BMTDNfVkNJUkFOR0VfMworCisjZGVmaW5lIFJDQ19QTEwzVkNPV0lERSAgICAgICAgICAgICAgICAgUkNDX1BMTDNfVkNPUkFOR0VfV0lERQorI2RlZmluZSBSQ0NfUExMM1ZDT01FRElVTSAgICAgICAgICAgICAgIFJDQ19QTEwzX1ZDT1JBTkdFX01FRElVTQorCisjZGVmaW5lIFJDQ19QTEwzU09VUkNFX05PTkUgICAgICAgICAgICAgUkNDX1BMTDNfU09VUkNFX05PTkUKKyNkZWZpbmUgUkNDX1BMTDNTT1VSQ0VfSFNJICAgICAgICAgICAgICBSQ0NfUExMM19TT1VSQ0VfSFNJCisjZGVmaW5lIFJDQ19QTEwzU09VUkNFX0NTSSAgICAgICAgICAgICAgUkNDX1BMTDNfU09VUkNFX0NTSQorI2RlZmluZSBSQ0NfUExMM1NPVVJDRV9IU0UgICAgICAgICAgICAgIFJDQ19QTEwzX1NPVVJDRV9IU0UKKworCisjZW5kaWYgLyogU1RNMzJINSAqLworCiAvKioKICAgKiBAfQogICAqLwpAQCAtMzM3Nyw3ICszODk0LDkgQEAKIC8qKiBAZGVmZ3JvdXAgSEFMX1JUQ19BbGlhc2VkX01hY3JvcyBIQUwgUlRDIEFsaWFzZWQgTWFjcm9zIG1haW50YWluZWQgZm9yIGxlZ2FjeSBwdXJwb3NlCiAgICogQHsKICAgKi8KLSNpZiBkZWZpbmVkIChTVE0zMkcwKSB8fCBkZWZpbmVkIChTVE0zMkw1KSB8fCBkZWZpbmVkIChTVE0zMkw0MTJ4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNDIyeHgpIHx8IGRlZmluZWQgKFNUTTMyTDRQNXh4KSB8fCBkZWZpbmVkIChTVE0zMkw0UTV4eCkgfHwgZGVmaW5lZCAoU1RNMzJHNCkgfHwgZGVmaW5lZCAoU1RNMzJXTCkKKyNpZiBkZWZpbmVkIChTVE0zMkcwKSB8fCBkZWZpbmVkIChTVE0zMkw1KSB8fCBkZWZpbmVkIChTVE0zMkw0MTJ4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNDIyeHgpIHx8IFwKKyAgICBkZWZpbmVkIChTVE0zMkw0UDV4eCl8fCBkZWZpbmVkIChTVE0zMkw0UTV4eCkgfHwgZGVmaW5lZCAoU1RNMzJHNCkgfHwgZGVmaW5lZCAoU1RNMzJXTCkgfHwgZGVmaW5lZCAoU1RNMzJVNSkgfHwgXAorICAgIGRlZmluZWQgKFNUTTMyV0JBKSB8fCBkZWZpbmVkIChTVE0zMkg1KSB8fCBkZWZpbmVkIChTVE0zMkMwKQogI2Vsc2UKICNkZWZpbmUgX19IQUxfUlRDX0NMRUFSX0ZMQUcgICAgICAgICAgICAgICAgICAgICAgX19IQUxfUlRDX0VYVElfQ0xFQVJfRkxBRwogI2VuZGlmCkBAIC0zNDEyLDYgKzM5MzEsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19IQUxfUlRDX1RBTVBFUl9USU1FU1RBTVBfRVhUSV9HRU5FUkFURV9TV0lUKCkpKQogI2VuZGlmICAgLyogU1RNMzJGMSAqLwogCisjaWYgZGVmaW5lZCAoU1RNMzJGMCkgfHwgZGVmaW5lZCAoU1RNMzJGMikgfHwgZGVmaW5lZCAoU1RNMzJGMykgfHwgZGVmaW5lZCAoU1RNMzJGNCkgfHwgZGVmaW5lZCAoU1RNMzJGNykgfHwgXAorICAgIGRlZmluZWQgKFNUTTMyTDApIHx8IGRlZmluZWQgKFNUTTMyTDEpCisjZGVmaW5lIF9fSEFMX1JUQ19UQU1QRVJfR0VUX0lUICAgICAgICAgICAgICAgICAgIF9fSEFMX1JUQ19UQU1QRVJfR0VUX0ZMQUcKKyNlbmRpZgorCiAjZGVmaW5lIElTX0FMQVJNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElTX1JUQ19BTEFSTQogI2RlZmluZSBJU19BTEFSTV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJU19SVENfQUxBUk1fTUFTSwogI2RlZmluZSBJU19UQU1QRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJU19SVENfVEFNUEVSCkBAIC0zNDMwLDE3ICszOTU0LDMxIEBACiAjZGVmaW5lIF9fUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRU5BQkxFCiAjZGVmaW5lIF9fUlRDX1dSSVRFUFJPVEVDVElPTl9ESVNBQkxFICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0RJU0FCTEUKIAorI2lmIGRlZmluZWQgKFNUTTMySDUpCisjZGVmaW5lIF9fSEFMX1JDQ19SVENBUEJfQ0xLX0VOQUJMRSAgIF9fSEFMX1JDQ19SVENfQ0xLX0VOQUJMRQorI2RlZmluZSBfX0hBTF9SQ0NfUlRDQVBCX0NMS19ESVNBQkxFICBfX0hBTF9SQ0NfUlRDX0NMS19ESVNBQkxFCisjZW5kaWYgICAvKiBTVE0zMkg1ICovCisKIC8qKgogICAqIEB9CiAgICovCiAKLS8qKiBAZGVmZ3JvdXAgSEFMX1NEX0FsaWFzZWRfTWFjcm9zIEhBTCBTRCBBbGlhc2VkIE1hY3JvcyBtYWludGFpbmVkIGZvciBsZWdhY3kgcHVycG9zZQorLyoqIEBkZWZncm91cCBIQUxfU0RfQWxpYXNlZF9NYWNyb3MgSEFMIFNEL01NQyBBbGlhc2VkIE1hY3JvcyBtYWludGFpbmVkIGZvciBsZWdhY3kgcHVycG9zZQogICAqIEB7CiAgICovCiAKICNkZWZpbmUgU0RfT0NSX0NJRF9DU0RfT1ZFUldSSUVURSAgIFNEX09DUl9DSURfQ1NEX09WRVJXUklURQogI2RlZmluZSBTRF9DTURfU0RfQVBQX1NUQVVTICAgICAgICAgU0RfQ01EX1NEX0FQUF9TVEFUVVMKIAorI2lmICFkZWZpbmVkKFNUTTMyRjEpICYmICFkZWZpbmVkKFNUTTMyRjIpICYmICFkZWZpbmVkKFNUTTMyRjQpICYmICFkZWZpbmVkKFNUTTMyTDEpCisjZGVmaW5lIGVNTUNfSElHSF9WT0xUQUdFX1JBTkdFICAgICBFTU1DX0hJR0hfVk9MVEFHRV9SQU5HRQorI2RlZmluZSBlTU1DX0RVQUxfVk9MVEFHRV9SQU5HRSAgICAgRU1NQ19EVUFMX1ZPTFRBR0VfUkFOR0UKKyNkZWZpbmUgZU1NQ19MT1dfVk9MVEFHRV9SQU5HRSAgICAgIEVNTUNfTE9XX1ZPTFRBR0VfUkFOR0UKKworI2RlZmluZSBTRE1NQ19OU3BlZWRfQ0xLX0RJViAgICAgICAgU0RNTUNfTlNQRUVEX0NMS19ESVYKKyNkZWZpbmUgU0RNTUNfSFNwZWVkX0NMS19ESVYgICAgICAgIFNETU1DX0hTUEVFRF9DTEtfRElWCisjZW5kaWYKKwogI2lmIGRlZmluZWQoU1RNMzJGNCkgfHwgZGVmaW5lZChTVE0zMkYyKQogI2RlZmluZSAgU0RfU0RNTUNfRElTQUJMRUQgICAgICAgICAgU0RfU0RJT19ESVNBQkxFRAogI2RlZmluZSAgU0RfU0RNTUNfRlVOQ1RJT05fQlVTWSAgICAgU0RfU0RJT19GVU5DVElPTl9CVVNZCkBAIC0zNzY5LDYgKzQzMDcsMTYgQEAKICAgKiBAfQogICAqLwogCisvKiogQGRlZmdyb3VwIEhBTF9HZW5lcmljX0FsaWFzZWRfTWFjcm9zIEhBTCBHZW5lcmljIEFsaWFzZWQgTWFjcm9zIG1haW50YWluZWQgZm9yIGxlZ2FjeSBwdXJwb3NlCisgICogQHsKKyAgKi8KKyNpZiBkZWZpbmVkIChTVE0zMkY3KQorI2RlZmluZSBBUlRfQUNDTEVSQVRPUl9FTkFCTEUgQVJUX0FDQ0VMRVJBVE9SX0VOQUJMRQorI2VuZGlmIC8qIFNUTTMyRjcgKi8KKy8qKgorICAqIEB9CisgICovCisKIC8qKiBAZGVmZ3JvdXAgSEFMX1BQUF9BbGlhc2VkX01hY3JvcyBIQUwgUFBQIEFsaWFzZWQgTWFjcm9zIG1haW50YWluZWQgZm9yIGxlZ2FjeSBwdXJwb3NlCiAgICogQHsKICAgKi8KQEAgLTM3ODIsMyArNDMzMCw1IEBACiAjZW5kaWYKIAogI2VuZGlmIC8qIFNUTTMyX0hBTF9MRUdBQ1kgKi8KKworCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJfYXNzZXJ0X3RlbXBsYXRlLmggYi9JbmMvc3RtMzJfYXNzZXJ0X3RlbXBsYXRlLmgKaW5kZXggZDBjM2I3Mi4uZmY2OWJkNyAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyX2Fzc2VydF90ZW1wbGF0ZS5oCisrKyBiL0luYy9zdG0zMl9hc3NlcnRfdGVtcGxhdGUuaApAQCAtNTEsMyArNTEsNiBAQAogI2VuZGlmCiAKICNlbmRpZiAvKiBfX1NUTTMyX0FTU0VSVF9IICovCisKKworCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmMnh4X2hhbC5oIGIvSW5jL3N0bTMyZjJ4eF9oYWwuaAppbmRleCBmY2UyM2NkLi41NTNlN2JkIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmMnh4X2hhbC5oCisrKyBiL0luYy9zdG0zMmYyeHhfaGFsLmgKQEAgLTI0MiwzICsyNDIsNSBAQAogI2VuZGlmCiAKICNlbmRpZiAvKiBfX1NUTTMyRjJ4eF9IQUxfSCAqLworCisKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYyeHhfaGFsX2FkYy5oIGIvSW5jL3N0bTMyZjJ4eF9oYWxfYWRjLmgKaW5kZXggZDlhMTU5Ni4uN2Q0Zjc2OCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjJ4eF9oYWxfYWRjLmgKKysrIGIvSW5jL3N0bTMyZjJ4eF9oYWxfYWRjLmgKQEAgLTg4NSwzICs4ODUsNSBAQAogI2VuZGlmCiAKICNlbmRpZiAvKl9fU1RNMzJGMnh4X0FEQ19IICovCisKKwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjJ4eF9oYWxfYWRjX2V4LmggYi9JbmMvc3RtMzJmMnh4X2hhbF9hZGNfZXguaAppbmRleCA2MDU0YmZjLi4zYzM4OWRiIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmMnh4X2hhbF9hZGNfZXguaAorKysgYi9JbmMvc3RtMzJmMnh4X2hhbF9hZGNfZXguaApAQCAtMzU0LDMgKzM1NCw1IEBACiAjZW5kaWYKIAogI2VuZGlmIC8qX19TVE0zMkYyeHhfQURDX0VYX0ggKi8KKworCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmMnh4X2hhbF9jb25mX3RlbXBsYXRlLmggYi9JbmMvc3RtMzJmMnh4X2hhbF9jb25mX3RlbXBsYXRlLmgKaW5kZXggNzU5NmQxNC4uYmNlZmE3OCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjJ4eF9oYWxfY29uZl90ZW1wbGF0ZS5oCisrKyBiL0luYy9zdG0zMmYyeHhfaGFsX2NvbmZfdGVtcGxhdGUuaApAQCAtNSw2ICs1LDcgQEAKICAgKiBAYnJpZWYgICBIQUwgY29uZmlndXJhdGlvbiB0ZW1wbGF0ZSBmaWxlLiAKICAgKiAgICAgICAgICBUaGlzIGZpbGUgc2hvdWxkIGJlIGNvcGllZCB0byB0aGUgYXBwbGljYXRpb24gZm9sZGVyIGFuZCByZW5hbWVkCiAgICogICAgICAgICAgdG8gc3RtMzJmMnh4X2hhbF9jb25mLmguCisgICoKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCkBAIC00MTYsMyArNDE3LDUgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogX19TVE0zMkYyeHhfSEFMX0NPTkZfSCAqLworCisKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYyeHhfaGFsX2NvcnRleC5oIGIvSW5jL3N0bTMyZjJ4eF9oYWxfY29ydGV4LmgKaW5kZXggMjlhYjFiNC4uOWE2ZmM2YSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjJ4eF9oYWxfY29ydGV4LmgKKysrIGIvSW5jL3N0bTMyZjJ4eF9oYWxfY29ydGV4LmgKQEAgLTQwNCwzICs0MDQsNSBAQAogI2VuZGlmCiAKICNlbmRpZiAvKiBfX1NUTTMyRjJ4eF9IQUxfQ09SVEVYX0ggKi8KKyAKKwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjJ4eF9oYWxfY3JjLmggYi9JbmMvc3RtMzJmMnh4X2hhbF9jcmMuaAppbmRleCBhMTMwZDQyLi40YTQzOGFkIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmMnh4X2hhbF9jcmMuaAorKysgYi9JbmMvc3RtMzJmMnh4X2hhbF9jcmMuaApAQCAtMTU3LDcgKzE1Nyw3IEBACiAvKiogQGRlZmdyb3VwIENSQ19FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAzIFBlcmlwaGVyYWwgU3RhdGUgZnVuY3Rpb25zCiAgICogQHsKICAgKi8KLUhBTF9DUkNfU3RhdGVUeXBlRGVmIEhBTF9DUkNfR2V0U3RhdGUoQ1JDX0hhbmRsZVR5cGVEZWYgKmhjcmMpOworSEFMX0NSQ19TdGF0ZVR5cGVEZWYgSEFMX0NSQ19HZXRTdGF0ZShjb25zdCBDUkNfSGFuZGxlVHlwZURlZiAqaGNyYyk7CiAvKioKICAgKiBAfQogICAqLwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjJ4eF9oYWxfY3J5cC5oIGIvSW5jL3N0bTMyZjJ4eF9oYWxfY3J5cC5oCmluZGV4IDE5YTk5ZjguLjdiOTU3YTUgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmYyeHhfaGFsX2NyeXAuaAorKysgYi9JbmMvc3RtMzJmMnh4X2hhbF9jcnlwLmgKQEAgLTE0LDcgKzE0LDcgQEAKICAgKiBJZiBubyBMSUNFTlNFIGZpbGUgY29tZXMgd2l0aCB0aGlzIHNvZnR3YXJlLCBpdCBpcyBwcm92aWRlZCBBUy1JUy4KICAgKgogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgKi8KKyAgKi8gCiAKIC8qIERlZmluZSB0byBwcmV2ZW50IHJlY3Vyc2l2ZSBpbmNsdXNpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAjaWZuZGVmIF9fU1RNMzJGMnh4X0hBTF9DUllQX0gKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYyeHhfaGFsX2RhYy5oIGIvSW5jL3N0bTMyZjJ4eF9oYWxfZGFjLmgKaW5kZXggMzFkZGZjMS4uMmQ0N2RmYSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjJ4eF9oYWxfZGFjLmgKKysrIGIvSW5jL3N0bTMyZjJ4eF9oYWxfZGFjLmgKQEAgLTc4LDE5ICs3OCwxOSBAQAogICBfX0lPIHVpbnQzMl90ICAgICAgICAgICAgICAgRXJyb3JDb2RlOyAgICAgLyohPCBEQUMgRXJyb3IgY29kZSAgICAgICAgICAgICAgICAgICAgKi8KIAogI2lmIChVU0VfSEFMX0RBQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKLSAgdm9pZCAoKiBDb252Q3BsdENhbGxiYWNrQ2gxKSAgICAgICAgICAgIChzdHJ1Y3QgX19EQUNfSGFuZGxlVHlwZURlZiAqaGRhYyk7Ci0gIHZvaWQgKCogQ29udkhhbGZDcGx0Q2FsbGJhY2tDaDEpICAgICAgICAoc3RydWN0IF9fREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMpOwotICB2b2lkICgqIEVycm9yQ2FsbGJhY2tDaDEpICAgICAgICAgICAgICAgKHN0cnVjdCBfX0RBQ19IYW5kbGVUeXBlRGVmICpoZGFjKTsKLSAgdm9pZCAoKiBETUFVbmRlcnJ1bkNhbGxiYWNrQ2gxKSAgICAgICAgIChzdHJ1Y3QgX19EQUNfSGFuZGxlVHlwZURlZiAqaGRhYyk7CisgIHZvaWQgKCogQ29udkNwbHRDYWxsYmFja0NoMSkoc3RydWN0IF9fREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMpOworICB2b2lkICgqIENvbnZIYWxmQ3BsdENhbGxiYWNrQ2gxKShzdHJ1Y3QgX19EQUNfSGFuZGxlVHlwZURlZiAqaGRhYyk7CisgIHZvaWQgKCogRXJyb3JDYWxsYmFja0NoMSkoc3RydWN0IF9fREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMpOworICB2b2lkICgqIERNQVVuZGVycnVuQ2FsbGJhY2tDaDEpKHN0cnVjdCBfX0RBQ19IYW5kbGVUeXBlRGVmICpoZGFjKTsKIAotICB2b2lkICgqIENvbnZDcGx0Q2FsbGJhY2tDaDIpICAgICAgICAgICAgKHN0cnVjdCBfX0RBQ19IYW5kbGVUeXBlRGVmICpoZGFjKTsKLSAgdm9pZCAoKiBDb252SGFsZkNwbHRDYWxsYmFja0NoMikgICAgICAgIChzdHJ1Y3QgX19EQUNfSGFuZGxlVHlwZURlZiAqaGRhYyk7Ci0gIHZvaWQgKCogRXJyb3JDYWxsYmFja0NoMikgICAgICAgICAgICAgICAoc3RydWN0IF9fREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMpOwotICB2b2lkICgqIERNQVVuZGVycnVuQ2FsbGJhY2tDaDIpICAgICAgICAgKHN0cnVjdCBfX0RBQ19IYW5kbGVUeXBlRGVmICpoZGFjKTsKKyAgdm9pZCAoKiBDb252Q3BsdENhbGxiYWNrQ2gyKShzdHJ1Y3QgX19EQUNfSGFuZGxlVHlwZURlZiAqaGRhYyk7CisgIHZvaWQgKCogQ29udkhhbGZDcGx0Q2FsbGJhY2tDaDIpKHN0cnVjdCBfX0RBQ19IYW5kbGVUeXBlRGVmICpoZGFjKTsKKyAgdm9pZCAoKiBFcnJvckNhbGxiYWNrQ2gyKShzdHJ1Y3QgX19EQUNfSGFuZGxlVHlwZURlZiAqaGRhYyk7CisgIHZvaWQgKCogRE1BVW5kZXJydW5DYWxsYmFja0NoMikoc3RydWN0IF9fREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMpOwogCiAKLSAgdm9pZCAoKiBNc3BJbml0Q2FsbGJhY2spICAgICAgICAgICAgICAgIChzdHJ1Y3QgX19EQUNfSGFuZGxlVHlwZURlZiAqaGRhYyk7Ci0gIHZvaWQgKCogTXNwRGVJbml0Q2FsbGJhY2spICAgICAgICAgICAgICAoc3RydWN0IF9fREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMpOworICB2b2lkICgqIE1zcEluaXRDYWxsYmFjaykoc3RydWN0IF9fREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMpOworICB2b2lkICgqIE1zcERlSW5pdENhbGxiYWNrKShzdHJ1Y3QgX19EQUNfSGFuZGxlVHlwZURlZiAqaGRhYyk7CiAjZW5kaWYgLyogVVNFX0hBTF9EQUNfUkVHSVNURVJfQ0FMTEJBQ0tTICovCiAKIH0gREFDX0hhbmRsZVR5cGVEZWY7CkBAIC0zOTgsNyArMzk4LDcgQEAKIC8qIElPIG9wZXJhdGlvbiBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfREFDX1N0YXJ0KERBQ19IYW5kbGVUeXBlRGVmICpoZGFjLCB1aW50MzJfdCBDaGFubmVsKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9EQUNfU3RvcChEQUNfSGFuZGxlVHlwZURlZiAqaGRhYywgdWludDMyX3QgQ2hhbm5lbCk7Ci1IQUxfU3RhdHVzVHlwZURlZiBIQUxfREFDX1N0YXJ0X0RNQShEQUNfSGFuZGxlVHlwZURlZiAqaGRhYywgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgKnBEYXRhLCB1aW50MzJfdCBMZW5ndGgsCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfREFDX1N0YXJ0X0RNQShEQUNfSGFuZGxlVHlwZURlZiAqaGRhYywgdWludDMyX3QgQ2hhbm5lbCwgY29uc3QgdWludDMyX3QgKnBEYXRhLCB1aW50MzJfdCBMZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBBbGlnbm1lbnQpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0RBQ19TdG9wX0RNQShEQUNfSGFuZGxlVHlwZURlZiAqaGRhYywgdWludDMyX3QgQ2hhbm5lbCk7CiB2b2lkIEhBTF9EQUNfSVJRSGFuZGxlcihEQUNfSGFuZGxlVHlwZURlZiAqaGRhYyk7CkBAIC00MjQsOCArNDI0LDkgQEAKICAgKiBAewogICAqLwogLyogUGVyaXBoZXJhbCBDb250cm9sIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXVpbnQzMl90IEhBTF9EQUNfR2V0VmFsdWUoREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMsIHVpbnQzMl90IENoYW5uZWwpOwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0RBQ19Db25maWdDaGFubmVsKERBQ19IYW5kbGVUeXBlRGVmICpoZGFjLCBEQUNfQ2hhbm5lbENvbmZUeXBlRGVmICpzQ29uZmlnLCB1aW50MzJfdCBDaGFubmVsKTsKK3VpbnQzMl90IEhBTF9EQUNfR2V0VmFsdWUoY29uc3QgREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMsIHVpbnQzMl90IENoYW5uZWwpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0RBQ19Db25maWdDaGFubmVsKERBQ19IYW5kbGVUeXBlRGVmICpoZGFjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERBQ19DaGFubmVsQ29uZlR5cGVEZWYgKnNDb25maWcsIHVpbnQzMl90IENoYW5uZWwpOwogLyoqCiAgICogQH0KICAgKi8KQEAgLTQzNCw4ICs0MzUsOCBAQAogICAqIEB7CiAgICovCiAvKiBQZXJpcGhlcmFsIFN0YXRlIGFuZCBFcnJvciBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotSEFMX0RBQ19TdGF0ZVR5cGVEZWYgSEFMX0RBQ19HZXRTdGF0ZShEQUNfSGFuZGxlVHlwZURlZiAqaGRhYyk7Ci11aW50MzJfdCBIQUxfREFDX0dldEVycm9yKERBQ19IYW5kbGVUeXBlRGVmICpoZGFjKTsKK0hBTF9EQUNfU3RhdGVUeXBlRGVmIEhBTF9EQUNfR2V0U3RhdGUoY29uc3QgREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMpOwordWludDMyX3QgSEFMX0RBQ19HZXRFcnJvcihjb25zdCBEQUNfSGFuZGxlVHlwZURlZiAqaGRhYyk7CiAKIC8qKgogICAqIEB9CmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmMnh4X2hhbF9kYWNfZXguaCBiL0luYy9zdG0zMmYyeHhfaGFsX2RhY19leC5oCmluZGV4IGQ0NTcxMDMuLmE2ZTQwZmMgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmYyeHhfaGFsX2RhY19leC5oCisrKyBiL0luYy9zdG0zMmYyeHhfaGFsX2RhY19leC5oCkBAIC04MSw2ICs4MSw3IEBACiAgICogQH0KICAgKi8KIAorCiAvKioKICAgKiBAfQogICAqLwpAQCAtMTQ5LDcgKzE1MCw3IEBACiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfREFDRXhfRHVhbFN0YXJ0KERBQ19IYW5kbGVUeXBlRGVmICpoZGFjKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9EQUNFeF9EdWFsU3RvcChEQUNfSGFuZGxlVHlwZURlZiAqaGRhYyk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfREFDRXhfRHVhbFNldFZhbHVlKERBQ19IYW5kbGVUeXBlRGVmICpoZGFjLCB1aW50MzJfdCBBbGlnbm1lbnQsIHVpbnQzMl90IERhdGExLCB1aW50MzJfdCBEYXRhMik7Ci11aW50MzJfdCBIQUxfREFDRXhfRHVhbEdldFZhbHVlKERBQ19IYW5kbGVUeXBlRGVmICpoZGFjKTsKK3VpbnQzMl90IEhBTF9EQUNFeF9EdWFsR2V0VmFsdWUoY29uc3QgREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMpOwogCiB2b2lkIEhBTF9EQUNFeF9Db252Q3BsdENhbGxiYWNrQ2gyKERBQ19IYW5kbGVUeXBlRGVmICpoZGFjKTsKIHZvaWQgSEFMX0RBQ0V4X0NvbnZIYWxmQ3BsdENhbGxiYWNrQ2gyKERBQ19IYW5kbGVUeXBlRGVmICpoZGFjKTsKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYyeHhfaGFsX2RjbWkuaCBiL0luYy9zdG0zMmYyeHhfaGFsX2RjbWkuaAppbmRleCBiZTU2NmFmLi5iNmFiMDM2IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmMnh4X2hhbF9kY21pLmgKKysrIGIvSW5jL3N0bTMyZjJ4eF9oYWxfZGNtaS5oCkBAIC02LDEyICs2LDEzIEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIENvcHlyaWdodCAoYykgMjAxNiBTVE1pY3JvZWxlY3Ryb25pY3MuCi0gICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE2IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKLSAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUKLSAgKiBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCi0gICogSWYgbm8gTElDRU5TRSBmaWxlIGNvbWVzIHdpdGggdGhpcyBzb2Z0d2FyZSwgaXQgaXMgcHJvdmlkZWQgQVMtSVMuCisgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCisgICogdGhlICJMaWNlbnNlIjsgWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZQorICAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdDoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZQogICAqCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqLwpAQCAtNTgzLDMgKzU4NCw1IEBACiAjZW5kaWYKIAogI2VuZGlmIC8qIFNUTTMyRjJ4eF9IQUxfRENNSV9IICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKiogKEMpIENPUFlSSUdIVCBTVE1pY3JvZWxlY3Ryb25pY3MgKioqKipFTkQgT0YgRklMRSoqKiovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmMnh4X2hhbF9kY21pX2V4LmggYi9JbmMvc3RtMzJmMnh4X2hhbF9kY21pX2V4LmgKaW5kZXggNDA4ZTJkMS4uOWQ5MTdlNiAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjJ4eF9oYWxfZGNtaV9leC5oCisrKyBiL0luYy9zdG0zMmYyeHhfaGFsX2RjbWlfZXguaApAQCAtNiwxMiArNiwxMyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiBDb3B5cmlnaHQgKGMpIDIwMTYgU1RNaWNyb2VsZWN0cm9uaWNzLgotICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxNiBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCi0gICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlCi0gICogaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc29mdHdhcmUgY29tcG9uZW50LgotICAqIElmIG5vIExJQ0VOU0UgZmlsZSBjb21lcyB3aXRoIHRoaXMgc29mdHdhcmUsIGl0IGlzIHByb3ZpZGVkIEFTLUlTLgorICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLAorICAqIHRoZSAiTGljZW5zZSI7IFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUKKyAgKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQ6CisgICogICAgICAgICAgICAgICAgICAgICAgICBvcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2UKICAgKgogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKi8KQEAgLTMyLDMgKzMzLDUgQEAKIC8qIFByaXZhdGUgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKICNlbmRpZiAvKiBfX1NUTTMyRjJ4eF9IQUxfRENNSV9IICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKiogKEMpIENPUFlSSUdIVCBTVE1pY3JvZWxlY3Ryb25pY3MgKioqKipFTkQgT0YgRklMRSoqKiovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmMnh4X2hhbF9kZWYuaCBiL0luYy9zdG0zMmYyeHhfaGFsX2RlZi5oCmluZGV4IGM2ODNlOWEuLmRiNTQ4OWQgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmYyeHhfaGFsX2RlZi5oCisrKyBiL0luYy9zdG0zMmYyeHhfaGFsX2RlZi5oCkBAIC0yLDggKzIsOSBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAZmlsZSAgICBzdG0zMmYyeHhfaGFsX2RlZi5oCiAgICogQGF1dGhvciAgTUNEIEFwcGxpY2F0aW9uIFRlYW0KLSAgKiBAYnJpZWYgICBUaGlzIGZpbGUgY29udGFpbnMgSEFMIGNvbW1vbiBkZWZpbmVzLCBlbnVtZXJhdGlvbiwgbWFjcm9zIGFuZCAKLSAgKiAgICAgICAgICBzdHJ1Y3R1cmVzIGRlZmluaXRpb25zLiAKKyAgKiBAYnJpZWYgICBUaGlzIGZpbGUgY29udGFpbnMgSEFMIGNvbW1vbiBkZWZpbmVzLCBlbnVtZXJhdGlvbiwgbWFjcm9zIGFuZAorICAqICAgICAgICAgIHN0cnVjdHVyZXMgZGVmaW5pdGlvbnMuCisgICoKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCkBAIC0xNzUsMyArMTc2LDUgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogX19fU1RNMzJGMnh4X0hBTF9ERUYgKi8KKworCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmMnh4X2hhbF9kbWEuaCBiL0luYy9zdG0zMmYyeHhfaGFsX2RtYS5oCmluZGV4IDlmMjY4ZTQuLjI0YTNlNGQgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmYyeHhfaGFsX2RtYS5oCisrKyBiL0luYy9zdG0zMmYyeHhfaGFsX2RtYS5oCkBAIC05LDggKzksOCBAQAogICAqIENvcHlyaWdodCAoYykgMjAxNiBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgKgotICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGVybXMgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZQotICAqIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvZnR3YXJlIGNvbXBvbmVudC4KKyAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4KKyAgKiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCiAgICogSWYgbm8gTElDRU5TRSBmaWxlIGNvbWVzIHdpdGggdGhpcyBzb2Z0d2FyZSwgaXQgaXMgcHJvdmlkZWQgQVMtSVMuCiAgICoKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC03NzAsMyArNzcwLDQgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogX19TVE0zMkYyeHhfSEFMX0RNQV9IICovCisKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYyeHhfaGFsX2RtYV9leC5oIGIvSW5jL3N0bTMyZjJ4eF9oYWxfZG1hX2V4LmgKaW5kZXggMTY1MzJmMC4uOTI5MGZiNiAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjJ4eF9oYWxfZG1hX2V4LmgKKysrIGIvSW5jL3N0bTMyZjJ4eF9oYWxfZG1hX2V4LmgKQEAgLTksOCArOSw4IEBACiAgICogQ29weXJpZ2h0IChjKSAyMDE2IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAqCi0gICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlCi0gICogaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc29mdHdhcmUgY29tcG9uZW50LgorICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGVybXMgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbgorICAqIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvZnR3YXJlIGNvbXBvbmVudC4KICAgKiBJZiBubyBMSUNFTlNFIGZpbGUgY29tZXMgd2l0aCB0aGlzIHNvZnR3YXJlLCBpdCBpcyBwcm92aWRlZCBBUy1JUy4KICAgKgogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTk5LDMgKzk5LDQgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogX19TVE0zMkYyeHhfSEFMX0RNQV9IICovCisKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYyeHhfaGFsX2V4dGkuaCBiL0luYy9zdG0zMmYyeHhfaGFsX2V4dGkuaAppbmRleCAxOTk5NmQ1Li4xMjQ0MmE2IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmMnh4X2hhbF9leHRpLmgKKysrIGIvSW5jL3N0bTMyZjJ4eF9oYWxfZXh0aS5oCkBAIC0yODgsMyArMjg4LDQgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogU1RNMzJGMnh4X0hBTF9FWFRJX0ggKi8KKwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjJ4eF9oYWxfZmxhc2guaCBiL0luYy9zdG0zMmYyeHhfaGFsX2ZsYXNoLmgKaW5kZXggYTEyODJkOS4uZGEwYjVkOCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjJ4eF9oYWxfZmxhc2guaAorKysgYi9JbmMvc3RtMzJmMnh4X2hhbF9mbGFzaC5oCkBAIC05LDEwICs5LDkgQEAKICAgKiBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICoKLSAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUKLSAgKiBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCisgICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluCisgICogdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc29mdHdhcmUgY29tcG9uZW50LgogICAqIElmIG5vIExJQ0VOU0UgZmlsZSBjb21lcyB3aXRoIHRoaXMgc29mdHdhcmUsIGl0IGlzIHByb3ZpZGVkIEFTLUlTLgotICAqCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqLwogCkBAIC00MTQsMyArNDEzLDQgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogX19TVE0zMkYyeHhfSEFMX0ZMQVNIX0ggKi8KKwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjJ4eF9oYWxfZmxhc2hfZXguaCBiL0luYy9zdG0zMmYyeHhfaGFsX2ZsYXNoX2V4LmgKaW5kZXggOTM1NWQyOS4uMjUzOThjZSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjJ4eF9oYWxfZmxhc2hfZXguaAorKysgYi9JbmMvc3RtMzJmMnh4X2hhbF9mbGFzaF9leC5oCkBAIC05LDEwICs5LDkgQEAKICAgKiBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICoKLSAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUKLSAgKiBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCisgICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluCisgICogdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc29mdHdhcmUgY29tcG9uZW50LgogICAqIElmIG5vIExJQ0VOU0UgZmlsZSBjb21lcyB3aXRoIHRoaXMgc29mdHdhcmUsIGl0IGlzIHByb3ZpZGVkIEFTLUlTLgotICAqCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqLwogCkBAIC00MDQsMyArNDAzLDQgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogX19TVE0zMkYyeHhfSEFMX0ZMQVNIX0VYX0ggKi8KKwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjJ4eF9oYWxfZ3Bpby5oIGIvSW5jL3N0bTMyZjJ4eF9oYWxfZ3Bpby5oCmluZGV4IGIxN2MyODUuLjg0ODc1MWYgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmYyeHhfaGFsX2dwaW8uaAorKysgYi9JbmMvc3RtMzJmMnh4X2hhbF9ncGlvLmgKQEAgLTMyMCwzICszMjAsNCBAQAogI2VuZGlmCiAKICNlbmRpZiAvKiBfX1NUTTMyRjJ4eF9IQUxfR1BJT19IICovCisKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYyeHhfaGFsX2dwaW9fZXguaCBiL0luYy9zdG0zMmYyeHhfaGFsX2dwaW9fZXguaAppbmRleCBmODMyYTNmLi4wNGMyZWIwIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmMnh4X2hhbF9ncGlvX2V4LmgKKysrIGIvSW5jL3N0bTMyZjJ4eF9oYWxfZ3Bpb19leC5oCkBAIC0yNzYsMyArMjc2LDQgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogX19TVE0zMkYyeHhfSEFMX0dQSU9fRVhfSCAqLworCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmMnh4X2hhbF9oYXNoLmggYi9JbmMvc3RtMzJmMnh4X2hhbF9oYXNoLmgKaW5kZXggZTNhYTVjYy4uNTcxMmY1MyAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjJ4eF9oYWxfaGFzaC5oCisrKyBiL0luYy9zdG0zMmYyeHhfaGFsX2hhc2guaApAQCAtNiw3ICs2LDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiBDb3B5cmlnaHQgKGMpIDIwMTYgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUKQEAgLTU4NSwzICs1ODUsNCBAQAogCiAKICNlbmRpZiAvKiBTVE0zMkYyeHhfSEFMX0hBU0hfSCAqLworCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmMnh4X2hhbF9oY2QuaCBiL0luYy9zdG0zMmYyeHhfaGFsX2hjZC5oCmluZGV4IDI3MDkwYWMuLjEwNDA1M2EgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmYyeHhfaGFsX2hjZC5oCisrKyBiL0luYy9zdG0zMmYyeHhfaGFsX2hjZC5oCkBAIC0xNTksNiArMTU5LDEwIEBACiAKICNkZWZpbmUgX19IQUxfSENEX0dFVF9GTEFHKF9fSEFORExFX18sIF9fSU5URVJSVVBUX18pICAgICAgKChVU0JfUmVhZEludGVycnVwdHMoKF9fSEFORExFX18pLT5JbnN0YW5jZSlcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiAoX19JTlRFUlJVUFRfXykpID09IChfX0lOVEVSUlVQVF9fKSkKKworI2RlZmluZSBfX0hBTF9IQ0RfR0VUX0NIX0ZMQUcoX19IQU5ETEVfXywgX19jaG51bV9fLCBfX0lOVEVSUlVQVF9fKSBcCisgICgoVVNCX1JlYWRDaEludGVycnVwdHMoKF9fSEFORExFX18pLT5JbnN0YW5jZSwgKF9fY2hudW1fXykpICYgKF9fSU5URVJSVVBUX18pKSA9PSAoX19JTlRFUlJVUFRfXykpCisKICNkZWZpbmUgX19IQUxfSENEX0NMRUFSX0ZMQUcoX19IQU5ETEVfXywgX19JTlRFUlJVUFRfXykgICAgKCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5HSU5UU1RTKSA9IChfX0lOVEVSUlVQVF9fKSkKICNkZWZpbmUgX19IQUxfSENEX0lTX0lOVkFMSURfSU5URVJSVVBUKF9fSEFORExFX18pICAgICAgICAgKFVTQl9SZWFkSW50ZXJydXB0cygoX19IQU5ETEVfXyktPkluc3RhbmNlKSA9PSAwVSkKIApAQCAtMTY3LDYgKzE3MSw5IEBACiAjZGVmaW5lIF9fSEFMX0hDRF9VTk1BU0tfSEFMVF9IQ19JTlQoY2hudW0pICAgICAgICAgICAoVVNCeF9IQyhjaG51bSktPkhDSU5UTVNLIHw9IFVTQl9PVEdfSENJTlRNU0tfQ0hITSkKICNkZWZpbmUgX19IQUxfSENEX01BU0tfQUNLX0hDX0lOVChjaG51bSkgICAgICAgICAgICAgIChVU0J4X0hDKGNobnVtKS0+SENJTlRNU0sgJj0gflVTQl9PVEdfSENJTlRNU0tfQUNLTSkKICNkZWZpbmUgX19IQUxfSENEX1VOTUFTS19BQ0tfSENfSU5UKGNobnVtKSAgICAgICAgICAgIChVU0J4X0hDKGNobnVtKS0+SENJTlRNU0sgfD0gVVNCX09UR19IQ0lOVE1TS19BQ0tNKQorI2RlZmluZSBfX0hBTF9IQ0RfU0VUX0hDX0NTUExUKGNobnVtKSAgICAgICAgICAgICAgICAgKFVTQnhfSEMoY2hudW0pLT5IQ1NQTFQgICB8PSBVU0JfT1RHX0hDU1BMVF9DT01QTFNQTFQpCisjZGVmaW5lIF9fSEFMX0hDRF9DTEVBUl9IQ19DU1BMVChjaG51bSkgICAgICAgICAgICAgICAoVVNCeF9IQyhjaG51bSktPkhDU1BMVCAgICY9IH5VU0JfT1RHX0hDU1BMVF9DT01QTFNQTFQpCisjZGVmaW5lIF9fSEFMX0hDRF9DTEVBUl9IQ19TU1BMVChjaG51bSkgICAgICAgICAgICAgICAoVVNCeF9IQyhjaG51bSktPkhDU1BMVCAgICY9IH5VU0JfT1RHX0hDU1BMVF9TUExJVEVOKQogLyoqCiAgICogQH0KICAgKi8KQEAgLTI0OCw2ICsyNTUsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IHRva2VuLCB1aW50OF90ICpwYnVmZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBsZW5ndGgsIHVpbnQ4X3QgZG9fcGluZyk7CiAKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQ0RfSENfU2V0SHViSW5mbyhIQ0RfSGFuZGxlVHlwZURlZiAqaGhjZCwgdWludDhfdCBjaF9udW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBhZGRyLCB1aW50OF90IFBvcnROYnIpOworCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSENEX0hDX0NsZWFySHViSW5mbyhIQ0RfSGFuZGxlVHlwZURlZiAqaGhjZCwgdWludDhfdCBjaF9udW0pOworCiAvKiBOb24tQmxvY2tpbmcgbW9kZTogSW50ZXJydXB0ICovCiB2b2lkIEhBTF9IQ0RfSVJRSGFuZGxlcihIQ0RfSGFuZGxlVHlwZURlZiAqaGhjZCk7CiB2b2lkIEhBTF9IQ0RfV0tVUF9JUlFIYW5kbGVyKEhDRF9IYW5kbGVUeXBlRGVmICpoaGNkKTsKQEAgLTI3NywxNiArMjg5LDEzIEBACiAvKiogQGFkZHRvZ3JvdXAgSENEX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDQgUGVyaXBoZXJhbCBTdGF0ZSBmdW5jdGlvbnMKICAgKiBAewogICAqLwotSENEX1N0YXRlVHlwZURlZiAgICAgICAgSEFMX0hDRF9HZXRTdGF0ZShIQ0RfSGFuZGxlVHlwZURlZiAqaGhjZCk7Ci1IQ0RfVVJCU3RhdGVUeXBlRGVmICAgICBIQUxfSENEX0hDX0dldFVSQlN0YXRlKEhDRF9IYW5kbGVUeXBlRGVmICpoaGNkLCB1aW50OF90IGNobnVtKTsKLUhDRF9IQ1N0YXRlVHlwZURlZiAgICAgIEhBTF9IQ0RfSENfR2V0U3RhdGUoSENEX0hhbmRsZVR5cGVEZWYgKmhoY2QsIHVpbnQ4X3QgY2hudW0pOwotdWludDMyX3QgICAgICAgICAgICAgICAgSEFMX0hDRF9IQ19HZXRYZmVyQ291bnQoSENEX0hhbmRsZVR5cGVEZWYgKmhoY2QsIHVpbnQ4X3QgY2hudW0pOworSENEX1N0YXRlVHlwZURlZiAgICAgICAgSEFMX0hDRF9HZXRTdGF0ZShIQ0RfSGFuZGxlVHlwZURlZiBjb25zdCAqaGhjZCk7CitIQ0RfVVJCU3RhdGVUeXBlRGVmICAgICBIQUxfSENEX0hDX0dldFVSQlN0YXRlKEhDRF9IYW5kbGVUeXBlRGVmIGNvbnN0ICpoaGNkLCB1aW50OF90IGNobnVtKTsKK0hDRF9IQ1N0YXRlVHlwZURlZiAgICAgIEhBTF9IQ0RfSENfR2V0U3RhdGUoSENEX0hhbmRsZVR5cGVEZWYgY29uc3QgKmhoY2QsIHVpbnQ4X3QgY2hudW0pOwordWludDMyX3QgICAgICAgICAgICAgICAgSEFMX0hDRF9IQ19HZXRYZmVyQ291bnQoSENEX0hhbmRsZVR5cGVEZWYgY29uc3QgKmhoY2QsIHVpbnQ4X3QgY2hudW0pOwogdWludDMyX3QgICAgICAgICAgICAgICAgSEFMX0hDRF9HZXRDdXJyZW50RnJhbWUoSENEX0hhbmRsZVR5cGVEZWYgKmhoY2QpOwogdWludDMyX3QgICAgICAgICAgICAgICAgSEFMX0hDRF9HZXRDdXJyZW50U3BlZWQoSENEX0hhbmRsZVR5cGVEZWYgKmhoY2QpOwogCi0vKioKLSAgKiBAfQotICAqLwogCiAvKioKICAgKiBAfQpAQCAtMzA3LDYgKzMxNiw5IEBACiAvKioKICAgKiBAfQogICAqLworLyoqCisgICogQH0KKyAgKi8KICNlbmRpZiAvKiBkZWZpbmVkIChVU0JfT1RHX0ZTKSB8fCBkZWZpbmVkIChVU0JfT1RHX0hTKSAqLwogCiAjaWZkZWYgX19jcGx1c3BsdXMKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYyeHhfaGFsX2kyYy5oIGIvSW5jL3N0bTMyZjJ4eF9oYWxfaTJjLmgKaW5kZXggOTVlMjUxOS4uNmNmNDdiNiAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjJ4eF9oYWxfaTJjLmgKKysrIGIvSW5jL3N0bTMyZjJ4eF9oYWxfaTJjLmgKQEAgLTczNSwzICs3MzUsNCBAQAogCiAKICNlbmRpZiAvKiBfX1NUTTMyRjJ4eF9IQUxfSTJDX0ggKi8KKwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjJ4eF9oYWxfaTJzLmggYi9JbmMvc3RtMzJmMnh4X2hhbF9pMnMuaAppbmRleCA1NjcxYjEzLi42MmRhZTExIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmMnh4X2hhbF9pMnMuaAorKysgYi9JbmMvc3RtMzJmMnh4X2hhbF9pMnMuaApAQCAtNTYyLDMgKzU2Miw0IEBACiAjZW5kaWYKIAogI2VuZGlmIC8qIFNUTTMyRjJ4eF9IQUxfSTJTX0ggKi8KKwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjJ4eF9oYWxfaXJkYS5oIGIvSW5jL3N0bTMyZjJ4eF9oYWxfaXJkYS5oCmluZGV4IDdkNDIzMjEuLjNjZjE2ZjEgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmYyeHhfaGFsX2lyZGEuaAorKysgYi9JbmMvc3RtMzJmMnh4X2hhbF9pcmRhLmgKQEAgLTY3OSwzICs2NzksNCBAQAogI2VuZGlmCiAKICNlbmRpZiAvKiBfX1NUTTMyRjJ4eF9IQUxfSVJEQV9IICovCisKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYyeHhfaGFsX21tYy5oIGIvSW5jL3N0bTMyZjJ4eF9oYWxfbW1jLmgKaW5kZXggMzE4ZjNmNS4uZDk1NGJmZCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjJ4eF9oYWxfbW1jLmgKKysrIGIvSW5jL3N0bTMyZjJ4eF9oYWxfbW1jLmgKQEAgLTYsNyArNiw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIENvcHlyaWdodCAoYykgMjAxOCBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogQ29weXJpZ2h0IChjKSAyMDE2IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlCkBAIC0xNCw3ICsxNCw3IEBACiAgICogSWYgbm8gTElDRU5TRSBmaWxlIGNvbWVzIHdpdGggdGhpcyBzb2Z0d2FyZSwgaXQgaXMgcHJvdmlkZWQgQVMtSVMuCiAgICoKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICovCisgICovIAogCiAvKiBEZWZpbmUgdG8gcHJldmVudCByZWN1cnNpdmUgaW5jbHVzaW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogI2lmbmRlZiBTVE0zMkYyeHhfSEFMX01NQ19ICmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmMnh4X2hhbF9uYW5kLmggYi9JbmMvc3RtMzJmMnh4X2hhbF9uYW5kLmgKaW5kZXggM2FmOGJjYS4uOWRjYTczMiAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjJ4eF9oYWxfbmFuZC5oCisrKyBiL0luYy9zdG0zMmYyeHhfaGFsX25hbmQuaApAQCAtMTA0LDkgKzEwNCw4IEBACiAgIEZ1bmN0aW9uYWxTdGF0ZSBFeHRyYUNvbW1hbmRFbmFibGU7ICAgIC8qITwgTkFORCBleHRyYSBjb21tYW5kIG5lZWRlZCBmb3IgUGFnZSByZWFkaW5nIG1vZGUuIFRoaXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIgaXMgbWFuZGF0b3J5IGZvciBzb21lIE5BTkQgcGFydHMgYWZ0ZXIgdGhlIHJlYWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kIChOQU5EX0NNRF9BUkVBX1RSVUUxKSBhbmQgYmVmb3JlIERBVEEgcmVhZGluZyBzZXF1ZW5jZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGFtcGxlOiBUb3NoaWJhIFRIVEg1OEJZRzNTMEhCQUk2LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNvdWxkIGJlIEVOQUJMRSBvciBESVNBQkxFCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGxlYXNlIGNoZWNrIHRoZSBSZWFkIE1vZGUgc2VxdW5lY2UgaW4gdGhlIE5BTkQgZGV2aWNlIGRhdGFzaGVldCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBjaGVjayB0aGUgUmVhZCBNb2RlIHNlcXVlbmNlIGluIHRoZSBOQU5EIGRldmljZSBkYXRhc2hlZXQgKi8KIH0gTkFORF9EZXZpY2VDb25maWdUeXBlRGVmOwogCiAvKioKQEAgLTEyNiw3ICsxMjUsNyBAQAogCiAgIF9fSU8gSEFMX05BTkRfU3RhdGVUeXBlRGVmICAgICBTdGF0ZTsgICAgICAvKiE8IE5BTkQgZGV2aWNlIGFjY2VzcyBzdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKLSAgTkFORF9EZXZpY2VDb25maWdUeXBlRGVmICAgICAgIENvbmZpZzsgICAgIC8qITwgTkFORCBwaHVzaWNhbCBjaGFyYWN0ZXJpc3RpYyBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUgICAgKi8KKyAgTkFORF9EZXZpY2VDb25maWdUeXBlRGVmICAgICAgIENvbmZpZzsgICAgIC8qITwgTkFORCBwaHlzaWNhbCBjaGFyYWN0ZXJpc3RpYyBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUgICAgKi8KIAogI2lmIChVU0VfSEFMX05BTkRfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCiAgIHZvaWQgKCogTXNwSW5pdENhbGxiYWNrKShzdHJ1Y3QgX19OQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kKTsgICAgICAgICAgICAgICAvKiE8IE5BTkQgTXNwIEluaXQgY2FsbGJhY2sgICAgICAgICAgICAgICovCkBAIC0yMTQsMjcgKzIxMywyNyBAQAogLyogSU8gb3BlcmF0aW9uIGZ1bmN0aW9ucyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIEhBTF9TdGF0dXNUeXBlRGVmICBIQUxfTkFORF9SZXNldChOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kKTsKIAotSEFMX1N0YXR1c1R5cGVEZWYgIEhBTF9OQU5EX1JlYWRfUGFnZV84YihOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBOQU5EX0FkZHJlc3NUeXBlRGVmICpwQWRkcmVzcywgdWludDhfdCAqcEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgTnVtUGFnZVRvUmVhZCk7Ci1IQUxfU3RhdHVzVHlwZURlZiAgSEFMX05BTkRfV3JpdGVfUGFnZV84YihOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBOQU5EX0FkZHJlc3NUeXBlRGVmICpwQWRkcmVzcywgdWludDhfdCAqcEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IE51bVBhZ2VUb1dyaXRlKTsKLUhBTF9TdGF0dXNUeXBlRGVmICBIQUxfTkFORF9SZWFkX1NwYXJlQXJlYV84YihOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBOQU5EX0FkZHJlc3NUeXBlRGVmICpwQWRkcmVzcywKK0hBTF9TdGF0dXNUeXBlRGVmICBIQUxfTkFORF9SZWFkX1BhZ2VfOGIoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgY29uc3QgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBCdWZmZXIsIHVpbnQzMl90IE51bVBhZ2VUb1JlYWQpOworSEFMX1N0YXR1c1R5cGVEZWYgIEhBTF9OQU5EX1dyaXRlX1BhZ2VfOGIoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgY29uc3QgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwQnVmZmVyLCB1aW50MzJfdCBOdW1QYWdlVG9Xcml0ZSk7CitIQUxfU3RhdHVzVHlwZURlZiAgSEFMX05BTkRfUmVhZF9TcGFyZUFyZWFfOGIoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgY29uc3QgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcEJ1ZmZlciwgdWludDMyX3QgTnVtU3BhcmVBcmVhVG9SZWFkKTsKLUhBTF9TdGF0dXNUeXBlRGVmICBIQUxfTkFORF9Xcml0ZV9TcGFyZUFyZWFfOGIoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBCdWZmZXIsIHVpbnQzMl90IE51bVNwYXJlQXJlYVRvd3JpdGUpOworSEFMX1N0YXR1c1R5cGVEZWYgIEhBTF9OQU5EX1dyaXRlX1NwYXJlQXJlYV84YihOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBjb25zdCBOQU5EX0FkZHJlc3NUeXBlRGVmICpwQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcEJ1ZmZlciwgdWludDMyX3QgTnVtU3BhcmVBcmVhVG93cml0ZSk7CiAKLUhBTF9TdGF0dXNUeXBlRGVmICBIQUxfTkFORF9SZWFkX1BhZ2VfMTZiKE5BTkRfSGFuZGxlVHlwZURlZiAqaG5hbmQsIE5BTkRfQWRkcmVzc1R5cGVEZWYgKnBBZGRyZXNzLCB1aW50MTZfdCAqcEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IE51bVBhZ2VUb1JlYWQpOwotSEFMX1N0YXR1c1R5cGVEZWYgIEhBTF9OQU5EX1dyaXRlX1BhZ2VfMTZiKE5BTkRfSGFuZGxlVHlwZURlZiAqaG5hbmQsIE5BTkRfQWRkcmVzc1R5cGVEZWYgKnBBZGRyZXNzLCB1aW50MTZfdCAqcEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBOdW1QYWdlVG9Xcml0ZSk7Ci1IQUxfU3RhdHVzVHlwZURlZiAgSEFMX05BTkRfUmVhZF9TcGFyZUFyZWFfMTZiKE5BTkRfSGFuZGxlVHlwZURlZiAqaG5hbmQsIE5BTkRfQWRkcmVzc1R5cGVEZWYgKnBBZGRyZXNzLAorSEFMX1N0YXR1c1R5cGVEZWYgIEhBTF9OQU5EX1JlYWRfUGFnZV8xNmIoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgY29uc3QgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCAqcEJ1ZmZlciwgdWludDMyX3QgTnVtUGFnZVRvUmVhZCk7CitIQUxfU3RhdHVzVHlwZURlZiAgSEFMX05BTkRfV3JpdGVfUGFnZV8xNmIoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgY29uc3QgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDE2X3QgKnBCdWZmZXIsIHVpbnQzMl90IE51bVBhZ2VUb1dyaXRlKTsKK0hBTF9TdGF0dXNUeXBlRGVmICBIQUxfTkFORF9SZWFkX1NwYXJlQXJlYV8xNmIoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgY29uc3QgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90ICpwQnVmZmVyLCB1aW50MzJfdCBOdW1TcGFyZUFyZWFUb1JlYWQpOwotSEFMX1N0YXR1c1R5cGVEZWYgIEhBTF9OQU5EX1dyaXRlX1NwYXJlQXJlYV8xNmIoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCAqcEJ1ZmZlciwgdWludDMyX3QgTnVtU3BhcmVBcmVhVG93cml0ZSk7CitIQUxfU3RhdHVzVHlwZURlZiAgSEFMX05BTkRfV3JpdGVfU3BhcmVBcmVhXzE2YihOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBjb25zdCBOQU5EX0FkZHJlc3NUeXBlRGVmICpwQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQxNl90ICpwQnVmZmVyLCB1aW50MzJfdCBOdW1TcGFyZUFyZWFUb3dyaXRlKTsKIAotSEFMX1N0YXR1c1R5cGVEZWYgIEhBTF9OQU5EX0VyYXNlX0Jsb2NrKE5BTkRfSGFuZGxlVHlwZURlZiAqaG5hbmQsIE5BTkRfQWRkcmVzc1R5cGVEZWYgKnBBZGRyZXNzKTsKK0hBTF9TdGF0dXNUeXBlRGVmICBIQUxfTkFORF9FcmFzZV9CbG9jayhOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBjb25zdCBOQU5EX0FkZHJlc3NUeXBlRGVmICpwQWRkcmVzcyk7CiAKLXVpbnQzMl90ICAgICAgICAgICBIQUxfTkFORF9BZGRyZXNzX0luYyhOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBOQU5EX0FkZHJlc3NUeXBlRGVmICpwQWRkcmVzcyk7Cit1aW50MzJfdCAgICAgICAgICAgSEFMX05BTkRfQWRkcmVzc19JbmMoY29uc3QgTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MpOwogCiAjaWYgKFVTRV9IQUxfTkFORF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKIC8qIE5BTkQgY2FsbGJhY2sgcmVnaXN0ZXJpbmcvdW5yZWdpc3RlcmluZyAqLwpAQCAtMjY0LDggKzI2Myw4IEBACiAgICogQHsKICAgKi8KIC8qIE5BTkQgU3RhdGUgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1IQUxfTkFORF9TdGF0ZVR5cGVEZWYgSEFMX05BTkRfR2V0U3RhdGUoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCk7Ci11aW50MzJfdCAgICAgICAgICAgICAgSEFMX05BTkRfUmVhZF9TdGF0dXMoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCk7CitIQUxfTkFORF9TdGF0ZVR5cGVEZWYgSEFMX05BTkRfR2V0U3RhdGUoY29uc3QgTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCk7Cit1aW50MzJfdCAgICAgICAgICAgICAgSEFMX05BTkRfUmVhZF9TdGF0dXMoY29uc3QgTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCk7CiAvKioKICAgKiBAfQogICAqLwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjJ4eF9oYWxfbm9yLmggYi9JbmMvc3RtMzJmMnh4X2hhbF9ub3IuaAppbmRleCA1NjY3Y2JkLi5kNzY3YzliIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmMnh4X2hhbF9ub3IuaAorKysgYi9JbmMvc3RtMzJmMnh4X2hhbF9ub3IuaApAQCAtMjMzLDcgKzIzMyw3IEBACiAgICovCiAKIC8qIE5PUiBTdGF0ZSBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1IQUxfTk9SX1N0YXRlVHlwZURlZiAgSEFMX05PUl9HZXRTdGF0ZShOT1JfSGFuZGxlVHlwZURlZiAqaG5vcik7CitIQUxfTk9SX1N0YXRlVHlwZURlZiAgSEFMX05PUl9HZXRTdGF0ZShjb25zdCBOT1JfSGFuZGxlVHlwZURlZiAqaG5vcik7CiBIQUxfTk9SX1N0YXR1c1R5cGVEZWYgSEFMX05PUl9HZXRTdGF0dXMoTk9SX0hhbmRsZVR5cGVEZWYgKmhub3IsIHVpbnQzMl90IEFkZHJlc3MsIHVpbnQzMl90IFRpbWVvdXQpOwogLyoqCiAgICogQH0KZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYyeHhfaGFsX3BjZC5oIGIvSW5jL3N0bTMyZjJ4eF9oYWxfcGNkLmgKaW5kZXggZTVmYTY2OC4uMTczZDRkMiAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjJ4eF9oYWxfcGNkLmgKKysrIGIvSW5jL3N0bTMyZjJ4eF9oYWxfcGNkLmgKQEAgLTEwNiw2ICsxMDYsNyBAQAogICB1aW50MzJfdCAgICAgICAgICAgICAgICBTZXR1cFsxMl07ICAgLyohPCBTZXR1cCBwYWNrZXQgYnVmZmVyICAgICAgICAgICAgICAgKi8KICAgUENEX0xQTV9TdGF0ZVR5cGVEZWYgICAgTFBNX1N0YXRlOyAgIC8qITwgTFBNIFN0YXRlICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHVpbnQzMl90ICAgICAgICAgICAgICAgIEJFU0w7CisgIHVpbnQzMl90ICAgICAgICAgICAgICAgIEZyYW1lTnVtYmVyOyAvKiE8IFN0b3JlIEN1cnJlbnQgRnJhbWUgbnVtYmVyICAgICAgICAqLwogCiAgIHZvaWQgICAgICAgICAgICAgICAgICAgICpwRGF0YTsgICAgICAvKiE8IFBvaW50ZXIgdG8gdXBwZXIgc3RhY2sgSGFuZGxlciAqLwogCkBAIC0xODEsMTQgKzE4MiwxNCBAQAogICAqICBAYnJpZWYgbWFjcm9zIHRvIGhhbmRsZSBpbnRlcnJ1cHRzIGFuZCBzcGVjaWZpYyBjbG9jayBjb25maWd1cmF0aW9ucwogICAqIEB7CiAgICovCi0jaWYgZGVmaW5lZCAoVVNCX09UR19GUykgfHwgZGVmaW5lZCAoVVNCX09UR19IUykKICNkZWZpbmUgX19IQUxfUENEX0VOQUJMRShfX0hBTkRMRV9fKSAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpVVNCX0VuYWJsZUdsb2JhbEludCAoKF9fSEFORExFX18pLT5JbnN0YW5jZSkKICNkZWZpbmUgX19IQUxfUENEX0RJU0FCTEUoX19IQU5ETEVfXykgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpVVNCX0Rpc2FibGVHbG9iYWxJbnQgKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UpCiAKICNkZWZpbmUgX19IQUxfUENEX0dFVF9GTEFHKF9fSEFORExFX18sIF9fSU5URVJSVVBUX18pIFwKICAgKChVU0JfUmVhZEludGVycnVwdHMoKF9fSEFORExFX18pLT5JbnN0YW5jZSkgJiAoX19JTlRFUlJVUFRfXykpID09IChfX0lOVEVSUlVQVF9fKSkKIAotI2RlZmluZSBfX0hBTF9QQ0RfQ0xFQVJfRkxBRyhfX0hBTkRMRV9fLCBfX0lOVEVSUlVQVF9fKSAgICAoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkdJTlRTVFMpICY9ICAoX19JTlRFUlJVUFRfXykpCisjaWYgZGVmaW5lZCAoVVNCX09UR19GUykgfHwgZGVmaW5lZCAoVVNCX09UR19IUykKKyNkZWZpbmUgX19IQUxfUENEX0NMRUFSX0ZMQUcoX19IQU5ETEVfXywgX19JTlRFUlJVUFRfXykgICAgKCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5HSU5UU1RTKSAmPSAoX19JTlRFUlJVUFRfXykpCiAjZGVmaW5lIF9fSEFMX1BDRF9JU19JTlZBTElEX0lOVEVSUlVQVChfX0hBTkRMRV9fKSAgICAgICAgIChVU0JfUmVhZEludGVycnVwdHMoKF9fSEFORExFX18pLT5JbnN0YW5jZSkgPT0gMFUpCiAKICNkZWZpbmUgX19IQUxfUENEX1VOR0FURV9QSFlDTE9DSyhfX0hBTkRMRV9fKSBcCkBAIC0yNzksMTIgKzI4MCwxMCBAQAogICAqIEB9CiAgICovCiAKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9QQ0RfUmVnaXN0ZXJDYWxsYmFjayhQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQUxfUENEX0NhbGxiYWNrSURUeXBlRGVmIENhbGxiYWNrSUQsCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfUENEX1JlZ2lzdGVyQ2FsbGJhY2soUENEX0hhbmRsZVR5cGVEZWYgKmhwY2QsIEhBTF9QQ0RfQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwUENEX0NhbGxiYWNrVHlwZURlZiBwQ2FsbGJhY2spOwogCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfUENEX1VuUmVnaXN0ZXJDYWxsYmFjayhQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTF9QQ0RfQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJRCk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfUENEX1VuUmVnaXN0ZXJDYWxsYmFjayhQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCwgSEFMX1BDRF9DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lEKTsKIAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9SZWdpc3RlckRhdGFPdXRTdGFnZUNhbGxiYWNrKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBQQ0RfRGF0YU91dFN0YWdlQ2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjayk7CkBAIC0zNDQsMjQgKzM0MywyMSBAQAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9EZXZDb25uZWN0KFBDRF9IYW5kbGVUeXBlRGVmICpocGNkKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9QQ0RfRGV2RGlzY29ubmVjdChQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfUENEX1NldEFkZHJlc3MoUENEX0hhbmRsZVR5cGVEZWYgKmhwY2QsIHVpbnQ4X3QgYWRkcmVzcyk7Ci1IQUxfU3RhdHVzVHlwZURlZiBIQUxfUENEX0VQX09wZW4oUENEX0hhbmRsZVR5cGVEZWYgKmhwY2QsIHVpbnQ4X3QgZXBfYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBlcF9tcHMsIHVpbnQ4X3QgZXBfdHlwZSk7Ci0KK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9QQ0RfRVBfT3BlbihQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCwgdWludDhfdCBlcF9hZGRyLCB1aW50MTZfdCBlcF9tcHMsIHVpbnQ4X3QgZXBfdHlwZSk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfUENEX0VQX0Nsb3NlKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkLCB1aW50OF90IGVwX2FkZHIpOwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9FUF9SZWNlaXZlKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkLCB1aW50OF90IGVwX2FkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcEJ1ZiwgdWludDMyX3QgbGVuKTsKLQotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9FUF9UcmFuc21pdChQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCwgdWludDhfdCBlcF9hZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwQnVmLCB1aW50MzJfdCBsZW4pOwotCi0KK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9QQ0RfRVBfUmVjZWl2ZShQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCwgdWludDhfdCBlcF9hZGRyLCB1aW50OF90ICpwQnVmLCB1aW50MzJfdCBsZW4pOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9FUF9UcmFuc21pdChQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCwgdWludDhfdCBlcF9hZGRyLCB1aW50OF90ICpwQnVmLCB1aW50MzJfdCBsZW4pOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9FUF9TZXRTdGFsbChQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCwgdWludDhfdCBlcF9hZGRyKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9QQ0RfRVBfQ2xyU3RhbGwoUENEX0hhbmRsZVR5cGVEZWYgKmhwY2QsIHVpbnQ4X3QgZXBfYWRkcik7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfUENEX0VQX0ZsdXNoKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkLCB1aW50OF90IGVwX2FkZHIpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9FUF9BYm9ydChQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCwgdWludDhfdCBlcF9hZGRyKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9QQ0RfQWN0aXZhdGVSZW1vdGVXYWtldXAoUENEX0hhbmRsZVR5cGVEZWYgKmhwY2QpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9EZUFjdGl2YXRlUmVtb3RlV2FrZXVwKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkKTsKKyNpZiBkZWZpbmVkIChVU0JfT1RHX0ZTKSB8fCBkZWZpbmVkIChVU0JfT1RHX0hTKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9TZXRUZXN0TW9kZShQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCwgdWludDhfdCB0ZXN0bW9kZSk7CisjZW5kaWYgLyogZGVmaW5lZCAoVVNCX09UR19GUykgfHwgZGVmaW5lZCAoVVNCX09UR19IUykgKi8KIAotdWludDMyX3QgICAgICAgICAgSEFMX1BDRF9FUF9HZXRSeENvdW50KFBDRF9IYW5kbGVUeXBlRGVmICpocGNkLCB1aW50OF90IGVwX2FkZHIpOwordWludDMyX3QgICAgICAgICAgSEFMX1BDRF9FUF9HZXRSeENvdW50KFBDRF9IYW5kbGVUeXBlRGVmIGNvbnN0ICpocGNkLCB1aW50OF90IGVwX2FkZHIpOwogLyoqCiAgICogQH0KICAgKi8KQEAgLTM3MCw3ICszNjYsNyBAQAogLyoqIEBhZGR0b2dyb3VwIFBDRF9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXA0IFBlcmlwaGVyYWwgU3RhdGUgZnVuY3Rpb25zCiAgICogQHsKICAgKi8KLVBDRF9TdGF0ZVR5cGVEZWYgSEFMX1BDRF9HZXRTdGF0ZShQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCk7CitQQ0RfU3RhdGVUeXBlRGVmIEhBTF9QQ0RfR2V0U3RhdGUoUENEX0hhbmRsZVR5cGVEZWYgY29uc3QgKmhwY2QpOwogLyoqCiAgICogQH0KICAgKi8KZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYyeHhfaGFsX3BjZF9leC5oIGIvSW5jL3N0bTMyZjJ4eF9oYWxfcGNkX2V4LmgKaW5kZXggMjkwNTJlYi4uOTY3YmYzNyAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjJ4eF9oYWxfcGNkX2V4LmgKKysrIGIvSW5jL3N0bTMyZjJ4eF9oYWxfcGNkX2V4LmgKQEAgLTIyLDcgKzIyLDcgQEAKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKLSNlbmRpZgorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCiAKIC8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAjaW5jbHVkZSAic3RtMzJmMnh4X2hhbF9kZWYuaCIKQEAgLTczLDcgKzczLDcgQEAKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9Ci0jZW5kaWYKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLwogCiAKICNlbmRpZiAvKiBTVE0zMkYyeHhfSEFMX1BDRF9FWF9IICovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmMnh4X2hhbF9yY2MuaCBiL0luYy9zdG0zMmYyeHhfaGFsX3JjYy5oCmluZGV4IGViZTdlYmYuLjY2MDU5MDQgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmYyeHhfaGFsX3JjYy5oCisrKyBiL0luYy9zdG0zMmYyeHhfaGFsX3JjYy5oCkBAIC05LDEwICs5LDkgQEAKICAgKiBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICoKLSAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUKLSAgKiBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCisgICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluCisgICogdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc29mdHdhcmUgY29tcG9uZW50LgogICAqIElmIG5vIExJQ0VOU0UgZmlsZSBjb21lcyB3aXRoIHRoaXMgc29mdHdhcmUsIGl0IGlzIHByb3ZpZGVkIEFTLUlTLgotICAqCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqLwogCkBAIC0yMDgzLDMgKzIwODIsNCBAQAogI2VuZGlmCiAKICNlbmRpZiAvKiBfX1NUTTMyRjJ4eF9IQUxfUkNDX0ggKi8KKwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjJ4eF9oYWxfcmNjX2V4LmggYi9JbmMvc3RtMzJmMnh4X2hhbF9yY2NfZXguaAppbmRleCA5N2ZlYTBhLi5iMzI1NzA5IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmMnh4X2hhbF9yY2NfZXguaAorKysgYi9JbmMvc3RtMzJmMnh4X2hhbF9yY2NfZXguaApAQCAtOSwxMCArOSw5IEBACiAgICogQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAqCi0gICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlCi0gICogaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc29mdHdhcmUgY29tcG9uZW50LgorICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGVybXMgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbgorICAqIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvZnR3YXJlIGNvbXBvbmVudC4KICAgKiBJZiBubyBMSUNFTlNFIGZpbGUgY29tZXMgd2l0aCB0aGlzIHNvZnR3YXJlLCBpdCBpcyBwcm92aWRlZCBBUy1JUy4KLSAgKgogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKi8KIApAQCAtNDE3LDMgKzQxNiw0IEBACiAjZW5kaWYKIAogI2VuZGlmIC8qIF9fU1RNMzJGMnh4X0hBTF9SQ0NfRVhfSCAqLworCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmMnh4X2hhbF9ybmcuaCBiL0luYy9zdG0zMmYyeHhfaGFsX3JuZy5oCmluZGV4IGNlNGY1ZDUuLjM1N2U5MGQgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmYyeHhfaGFsX3JuZy5oCisrKyBiL0luYy9zdG0zMmYyeHhfaGFsX3JuZy5oCkBAIC0zMDQsNyArMzA0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpocm5nKTsgLyogT2Jzb2xldGUsIHVzZSBIQUxfUk5HX0dlbmVyYXRlUmFuZG9tTnVtYmVyX0lUKCkgaW5zdGVhZCAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1JOR19HZW5lcmF0ZVJhbmRvbU51bWJlcihSTkdfSGFuZGxlVHlwZURlZiAqaHJuZywgdWludDMyX3QgKnJhbmRvbTMyYml0KTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9STkdfR2VuZXJhdGVSYW5kb21OdW1iZXJfSVQoUk5HX0hhbmRsZVR5cGVEZWYgKmhybmcpOwotdWludDMyX3QgSEFMX1JOR19SZWFkTGFzdFJhbmRvbU51bWJlcihSTkdfSGFuZGxlVHlwZURlZiAqaHJuZyk7Cit1aW50MzJfdCBIQUxfUk5HX1JlYWRMYXN0UmFuZG9tTnVtYmVyKGNvbnN0IFJOR19IYW5kbGVUeXBlRGVmICpocm5nKTsKIAogdm9pZCBIQUxfUk5HX0lSUUhhbmRsZXIoUk5HX0hhbmRsZVR5cGVEZWYgKmhybmcpOwogdm9pZCBIQUxfUk5HX0Vycm9yQ2FsbGJhY2soUk5HX0hhbmRsZVR5cGVEZWYgKmhybmcpOwpAQCAtMzE3LDggKzMxNyw4IEBACiAvKiogQGRlZmdyb3VwIFJOR19FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAzIFBlcmlwaGVyYWwgU3RhdGUgZnVuY3Rpb25zCiAgICogQHsKICAgKi8KLUhBTF9STkdfU3RhdGVUeXBlRGVmIEhBTF9STkdfR2V0U3RhdGUoUk5HX0hhbmRsZVR5cGVEZWYgKmhybmcpOwotdWludDMyX3QgICAgICAgICAgICAgSEFMX1JOR19HZXRFcnJvcihSTkdfSGFuZGxlVHlwZURlZiAqaHJuZyk7CitIQUxfUk5HX1N0YXRlVHlwZURlZiBIQUxfUk5HX0dldFN0YXRlKGNvbnN0IFJOR19IYW5kbGVUeXBlRGVmICpocm5nKTsKK3VpbnQzMl90ICAgICAgICAgICAgIEhBTF9STkdfR2V0RXJyb3IoY29uc3QgUk5HX0hhbmRsZVR5cGVEZWYgKmhybmcpOwogLyoqCiAgICogQH0KICAgKi8KQEAgLTM1OCwzICszNTgsNCBAQAogCiAKICNlbmRpZiAvKiBTVE0zMkYyeHhfSEFMX1JOR19IICovCisKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYyeHhfaGFsX3J0Yy5oIGIvSW5jL3N0bTMyZjJ4eF9oYWxfcnRjLmgKaW5kZXggNTA3YTQ5Mi4uZTk3NWJkYyAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjJ4eF9oYWxfcnRjLmgKKysrIGIvSW5jL3N0bTMyZjJ4eF9oYWxfcnRjLmgKQEAgLTE3LDE0ICsxNywxNSBAQAogICAqLwogCiAvKiBEZWZpbmUgdG8gcHJldmVudCByZWN1cnNpdmUgaW5jbHVzaW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotI2lmbmRlZiBfX1NUTTMyRjJ4eF9IQUxfUlRDX0gKLSNkZWZpbmUgX19TVE0zMkYyeHhfSEFMX1JUQ19ICisjaWZuZGVmIFNUTTMyRjJ4eF9IQUxfUlRDX0gKKyNkZWZpbmUgU1RNMzJGMnh4X0hBTF9SVENfSAogCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKIC8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKICNpbmNsdWRlICJzdG0zMmYyeHhfaGFsX2RlZi5oIgogCiAvKiogQGFkZHRvZ3JvdXAgU1RNMzJGMnh4X0hBTF9Ecml2ZXIKQEAgLTM2LDYgKzM3LDcgQEAKICAgKi8KIAogLyogRXhwb3J0ZWQgdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwogLyoqIEBkZWZncm91cCBSVENfRXhwb3J0ZWRfVHlwZXMgUlRDIEV4cG9ydGVkIFR5cGVzCiAgICogQHsKICAgKi8KQEAgLTUwLDcgKzUyLDYgQEAKICAgSEFMX1JUQ19TVEFURV9CVVNZICAgICAgICAgICAgICA9IDB4MDJVLCAgLyohPCBSVEMgcHJvY2VzcyBpcyBvbmdvaW5nICAgICAgICAgICAgICAqLwogICBIQUxfUlRDX1NUQVRFX1RJTUVPVVQgICAgICAgICAgID0gMHgwM1UsICAvKiE8IFJUQyB0aW1lb3V0IHN0YXRlICAgICAgICAgICAgICAgICAgICovCiAgIEhBTF9SVENfU1RBVEVfRVJST1IgICAgICAgICAgICAgPSAweDA0VSAgIC8qITwgUlRDIGVycm9yIHN0YXRlICAgICAgICAgICAgICAgICAgICAgKi8KLQogfSBIQUxfUlRDU3RhdGVUeXBlRGVmOwogCiAvKioKQEAgLTY1LDcgKzY2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiBNaW5fRGF0YSA9IDB4MDAgYW5kIE1heF9EYXRhID0gMHg3RiAqLwogCiAgIHVpbnQzMl90IFN5bmNoUHJlZGl2OyAgICAgLyohPCBTcGVjaWZpZXMgdGhlIFJUQyBTeW5jaHJvbm91cyBQcmVkaXZpZGVyIHZhbHVlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIE1pbl9EYXRhID0gMHgwMCBhbmQgTWF4X0RhdGEgPSAweDFGRkYgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiBNaW5fRGF0YSA9IDB4MDAwMCBhbmQgTWF4X0RhdGEgPSAweDFGRkYgKi8KIAogICB1aW50MzJfdCBPdXRQdXQ7ICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHdoaWNoIHNpZ25hbCB3aWxsIGJlIHJvdXRlZCB0byB0aGUgUlRDIG91dHB1dC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgUlRDX091dHB1dF9zZWxlY3Rpb25fRGVmaW5pdGlvbnMgKi8KQEAgLTgzLDggKzg0LDggQEAKIHR5cGVkZWYgc3RydWN0CiB7CiAgIHVpbnQ4X3QgSG91cnM7ICAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIFJUQyBUaW1lIEhvdXIuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAwIGFuZCBNYXhfRGF0YSA9IDEyIGlmIHRoZSBSVENfSG91ckZvcm1hdF8xMiBpcyBzZWxlY3RlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiBNaW5fRGF0YSA9IDAgYW5kIE1heF9EYXRhID0gMjMgaWYgdGhlIFJUQ19Ib3VyRm9ybWF0XzI0IGlzIHNlbGVjdGVkICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIE1pbl9EYXRhID0gMCBhbmQgTWF4X0RhdGEgPSAxMiBpZiB0aGUgUlRDX0hvdXJGb3JtYXRfMTIgaXMgc2VsZWN0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiBNaW5fRGF0YSA9IDAgYW5kIE1heF9EYXRhID0gMjMgaWYgdGhlIFJUQ19Ib3VyRm9ybWF0XzI0IGlzIHNlbGVjdGVkICovCiAKICAgdWludDhfdCBNaW51dGVzOyAgICAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgUlRDIFRpbWUgTWludXRlcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiBNaW5fRGF0YSA9IDAgYW5kIE1heF9EYXRhID0gNTkgKi8KQEAgLTk1LDEwICs5NiwxMSBAQAogICB1aW50OF90IFRpbWVGb3JtYXQ7ICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBSVEMgQU0vUE0gVGltZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgUlRDX0FNX1BNX0RlZmluaXRpb25zICovCiAKLSAgdWludDMyX3QgRGF5TGlnaHRTYXZpbmc7ICAvKiE8IFRoaXMgaW50ZXJmYWNlIGlzIGRlcHJlY2F0ZWQuIFRvIG1hbmFnZSBEYXlsaWdodCBTYXZpbmcgVGltZSwgcGxlYXNlIHVzZSBIQUxfUlRDX0RTVF94eHggZnVuY3Rpb25zICovCisgIHVpbnQzMl90IERheUxpZ2h0U2F2aW5nOyAgLyohPCBUaGlzIGludGVyZmFjZSBpcyBkZXByZWNhdGVkLiBUbyBtYW5hZ2UgRGF5bGlnaHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNhdmluZyBUaW1lLCBwbGVhc2UgdXNlIEhBTF9SVENfRFNUX3h4eCBmdW5jdGlvbnMgKi8KIAotICB1aW50MzJfdCBTdG9yZU9wZXJhdGlvbjsgIC8qITwgVGhpcyBpbnRlcmZhY2UgaXMgZGVwcmVjYXRlZC4gVG8gbWFuYWdlIERheWxpZ2h0IFNhdmluZyBUaW1lLCBwbGVhc2UgdXNlIEhBTF9SVENfRFNUX3h4eCBmdW5jdGlvbnMgKi8KLQorICB1aW50MzJfdCBTdG9yZU9wZXJhdGlvbjsgIC8qITwgVGhpcyBpbnRlcmZhY2UgaXMgZGVwcmVjYXRlZC4gVG8gbWFuYWdlIERheWxpZ2h0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYXZpbmcgVGltZSwgcGxlYXNlIHVzZSBIQUxfUlRDX0RTVF94eHggZnVuY3Rpb25zICovCiB9IFJUQ19UaW1lVHlwZURlZjsKIAogLyoqCkBAIC0xMzEsNyArMTMzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBSVENfQWxhcm1NYXNrX0RlZmluaXRpb25zICovCiAKICAgdWludDMyX3QgQWxhcm1EYXRlV2Vla0RheVNlbDsgIC8qITwgU3BlY2lmaWVzIHRoZSBSVEMgQWxhcm0gaXMgb24gRGF0ZSBvciBXZWVrRGF5LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgUlRDX0FsYXJtRGF0ZVdlZWtEYXlfRGVmaW5pdGlvbnMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBSVENfQWxhcm1EYXRlV2Vla0RheV9EZWZpbml0aW9ucyAqLwogCiAgIHVpbnQ4X3QgQWxhcm1EYXRlV2Vla0RheTsgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgUlRDIEFsYXJtIERhdGUvV2Vla0RheS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgdGhlIEFsYXJtIERhdGUgaXMgc2VsZWN0ZWQsIHRoaXMgcGFyYW1ldGVyIG11c3QgYmUgc2V0IHRvIGEgdmFsdWUgaW4gdGhlIDEtMzEgcmFuZ2UuCkBAIC0xNDgsNyArMTUwLDcgQEAKIHR5cGVkZWYgc3RydWN0IF9fUlRDX0hhbmRsZVR5cGVEZWYKICNlbHNlCiB0eXBlZGVmIHN0cnVjdAotI2VuZGlmIC8qIChVU0VfSEFMX1JUQ19SRUdJU1RFUl9DQUxMQkFDS1MpICovCisjZW5kaWYgLyogVVNFX0hBTF9SVENfUkVHSVNURVJfQ0FMTEJBQ0tTICovCiB7CiAgIFJUQ19UeXBlRGVmICAgICAgICAgICAgICAgICAqSW5zdGFuY2U7ICAvKiE8IFJlZ2lzdGVyIGJhc2UgYWRkcmVzcyAgICAqLwogCkBAIC0xNTksMjEgKzE2MSwyMSBAQAogICBfX0lPIEhBTF9SVENTdGF0ZVR5cGVEZWYgICAgU3RhdGU7ICAgICAgLyohPCBUaW1lIGNvbW11bmljYXRpb24gc3RhdGUgKi8KIAogI2lmIChVU0VfSEFMX1JUQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKLSAgdm9pZCAoKiBBbGFybUFFdmVudENhbGxiYWNrKShzdHJ1Y3QgX19SVENfSGFuZGxlVHlwZURlZiAqaHJ0Yyk7ICAgICAgICAgICAvKiE8IFJUQyBBbGFybSBBIEV2ZW50IGNhbGxiYWNrICAgICAgICAgKi8KKyAgdm9pZCAoKiBBbGFybUFFdmVudENhbGxiYWNrKSAgICAgIChzdHJ1Y3QgX19SVENfSGFuZGxlVHlwZURlZiAqaHJ0Yyk7ICAvKiE8IFJUQyBBbGFybSBBIEV2ZW50IGNhbGxiYWNrICAgICAgICAgKi8KIAotICB2b2lkICgqIEFsYXJtQkV2ZW50Q2FsbGJhY2spKHN0cnVjdCBfX1JUQ19IYW5kbGVUeXBlRGVmICpocnRjKTsgICAgICAgICAgIC8qITwgUlRDIEFsYXJtIEIgRXZlbnQgY2FsbGJhY2sgICAgICAgICAqLworICB2b2lkICgqIEFsYXJtQkV2ZW50Q2FsbGJhY2spICAgICAgKHN0cnVjdCBfX1JUQ19IYW5kbGVUeXBlRGVmICpocnRjKTsgIC8qITwgUlRDIEFsYXJtIEIgRXZlbnQgY2FsbGJhY2sgICAgICAgICAqLwogCi0gIHZvaWQgKCogVGltZVN0YW1wRXZlbnRDYWxsYmFjaykoc3RydWN0IF9fUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpOyAgICAgICAgLyohPCBSVEMgVGltZVN0YW1wIEV2ZW50IGNhbGxiYWNrICAgICAgICovCisgIHZvaWQgKCogVGltZVN0YW1wRXZlbnRDYWxsYmFjaykgICAoc3RydWN0IF9fUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpOyAgLyohPCBSVEMgVGltZXN0YW1wIEV2ZW50IGNhbGxiYWNrICAgICAgICovCiAKLSAgdm9pZCAoKiBXYWtlVXBUaW1lckV2ZW50Q2FsbGJhY2spKHN0cnVjdCBfX1JUQ19IYW5kbGVUeXBlRGVmICpocnRjKTsgICAgICAvKiE8IFJUQyBXYWtlVXBUaW1lciBFdmVudCBjYWxsYmFjayAgICAgKi8KKyAgdm9pZCAoKiBXYWtlVXBUaW1lckV2ZW50Q2FsbGJhY2spIChzdHJ1Y3QgX19SVENfSGFuZGxlVHlwZURlZiAqaHJ0Yyk7ICAvKiE8IFJUQyBXYWtlVXBUaW1lciBFdmVudCBjYWxsYmFjayAgICAgKi8KIAotICB2b2lkICgqIFRhbXBlcjFFdmVudENhbGxiYWNrKShzdHJ1Y3QgX19SVENfSGFuZGxlVHlwZURlZiAqaHJ0Yyk7ICAgICAgICAgIC8qITwgUlRDIFRhbXBlciAxIEV2ZW50IGNhbGxiYWNrICAgICAgICAqLworICB2b2lkICgqIFRhbXBlcjFFdmVudENhbGxiYWNrKSAgICAgKHN0cnVjdCBfX1JUQ19IYW5kbGVUeXBlRGVmICpocnRjKTsgIC8qITwgUlRDIFRhbXBlciAxIEV2ZW50IGNhbGxiYWNrICAgICAgICAqLwogCi0gIHZvaWQgKCogTXNwSW5pdENhbGxiYWNrKShzdHJ1Y3QgX19SVENfSGFuZGxlVHlwZURlZiAqaHJ0Yyk7ICAgICAgICAgICAgICAgLyohPCBSVEMgTXNwIEluaXQgY2FsbGJhY2sgICAgICAgICAgICAgICovCisgIHZvaWQgKCogTXNwSW5pdENhbGxiYWNrKSAgICAgICAgICAoc3RydWN0IF9fUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpOyAgLyohPCBSVEMgTXNwIEluaXQgY2FsbGJhY2sgICAgICAgICAgICAgICovCiAKLSAgdm9pZCAoKiBNc3BEZUluaXRDYWxsYmFjaykoc3RydWN0IF9fUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpOyAgICAgICAgICAgICAvKiE8IFJUQyBNc3AgRGVJbml0IGNhbGxiYWNrICAgICAgICAgICAgKi8KKyAgdm9pZCAoKiBNc3BEZUluaXRDYWxsYmFjaykgICAgICAgIChzdHJ1Y3QgX19SVENfSGFuZGxlVHlwZURlZiAqaHJ0Yyk7ICAvKiE8IFJUQyBNc3AgRGVJbml0IGNhbGxiYWNrICAgICAgICAgICAgKi8KIAotI2VuZGlmIC8qIChVU0VfSEFMX1JUQ19SRUdJU1RFUl9DQUxMQkFDS1MpICovCisjZW5kaWYgLyogVVNFX0hBTF9SVENfUkVHSVNURVJfQ0FMTEJBQ0tTICovCiAKIH0gUlRDX0hhbmRsZVR5cGVEZWY7CiAKQEAgLTE4MywxMyArMTg1LDEzIEBACiAgICovCiB0eXBlZGVmIGVudW0KIHsKLSAgSEFMX1JUQ19BTEFSTV9BX0VWRU5UX0NCX0lEICAgICAgICAgICA9IDB4MDB1LCAgICAvKiE8IFJUQyBBbGFybSBBIEV2ZW50IENhbGxiYWNrIElEICAgICAgICovCi0gIEhBTF9SVENfQUxBUk1fQl9FVkVOVF9DQl9JRCAgICAgICAgICAgPSAweDAxdSwgICAgLyohPCBSVEMgQWxhcm0gQiBFdmVudCBDYWxsYmFjayBJRCAgICAgICAqLwotICBIQUxfUlRDX1RJTUVTVEFNUF9FVkVOVF9DQl9JRCAgICAgICAgID0gMHgwMnUsICAgIC8qITwgUlRDIFRpbWVTdGFtcCBFdmVudCBDYWxsYmFjayBJRCAgICAgKi8KLSAgSEFMX1JUQ19XQUtFVVBUSU1FUl9FVkVOVF9DQl9JRCAgICAgICA9IDB4MDN1LCAgICAvKiE8IFJUQyBXYWtlLVVwIFRpbWVyIEV2ZW50IENhbGxiYWNrIElEICovCi0gIEhBTF9SVENfVEFNUEVSMV9FVkVOVF9DQl9JRCAgICAgICAgICAgPSAweDA0dSwgICAgLyohPCBSVEMgVGFtcGVyIDEgQ2FsbGJhY2sgSUQgICAgICAgICAgICAqLwotICBIQUxfUlRDX01TUElOSVRfQ0JfSUQgICAgICAgICAgICAgICAgID0gMHgwRXUsICAgIC8qITwgUlRDIE1zcCBJbml0IGNhbGxiYWNrIElEICAgICAgICAgICAgKi8KLSAgSEFMX1JUQ19NU1BERUlOSVRfQ0JfSUQgICAgICAgICAgICAgICA9IDB4MEZ1ICAgICAvKiE8IFJUQyBNc3AgRGVJbml0IGNhbGxiYWNrIElEICAgICAgICAgICovCisgIEhBTF9SVENfQUxBUk1fQV9FVkVOVF9DQl9JRCAgICAgICAgICAgPSAweDAwVSwgICAgLyohPCBSVEMgQWxhcm0gQSBFdmVudCBDYWxsYmFjayBJRCAgICAgICAqLworICBIQUxfUlRDX0FMQVJNX0JfRVZFTlRfQ0JfSUQgICAgICAgICAgID0gMHgwMVUsICAgIC8qITwgUlRDIEFsYXJtIEIgRXZlbnQgQ2FsbGJhY2sgSUQgICAgICAgKi8KKyAgSEFMX1JUQ19USU1FU1RBTVBfRVZFTlRfQ0JfSUQgICAgICAgICA9IDB4MDJVLCAgICAvKiE8IFJUQyBUaW1lc3RhbXAgRXZlbnQgQ2FsbGJhY2sgSUQgICAgICovCisgIEhBTF9SVENfV0FLRVVQVElNRVJfRVZFTlRfQ0JfSUQgICAgICAgPSAweDAzVSwgICAgLyohPCBSVEMgV2FrZXVwIFRpbWVyIEV2ZW50IENhbGxiYWNrIElEICAqLworICBIQUxfUlRDX1RBTVBFUjFfRVZFTlRfQ0JfSUQgICAgICAgICAgID0gMHgwNFUsICAgIC8qITwgUlRDIFRhbXBlciAxIENhbGxiYWNrIElEICAgICAgICAgICAgKi8KKyAgSEFMX1JUQ19NU1BJTklUX0NCX0lEICAgICAgICAgICAgICAgICA9IDB4MEVVLCAgICAvKiE8IFJUQyBNc3AgSW5pdCBjYWxsYmFjayBJRCAgICAgICAgICAgICovCisgIEhBTF9SVENfTVNQREVJTklUX0NCX0lEICAgICAgICAgICAgICAgPSAweDBGVSAgICAgLyohPCBSVEMgTXNwIERlSW5pdCBjYWxsYmFjayBJRCAgICAgICAgICAqLwogfSBIQUxfUlRDX0NhbGxiYWNrSURUeXBlRGVmOwogCiAvKioKQEAgLTIwMyw2ICsyMDUsNyBAQAogICAqLwogCiAvKiBFeHBvcnRlZCBjb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCiAvKiogQGRlZmdyb3VwIFJUQ19FeHBvcnRlZF9Db25zdGFudHMgUlRDIEV4cG9ydGVkIENvbnN0YW50cwogICAqIEB7CiAgICovCkBAIC0yMTEsNyArMjE0LDcgQEAKICAgKiBAewogICAqLwogI2RlZmluZSBSVENfSE9VUkZPUk1BVF8yNCAgICAgICAgICAgICAgMHgwMDAwMDAwMFUKLSNkZWZpbmUgUlRDX0hPVVJGT1JNQVRfMTIgICAgICAgICAgICAgIDB4MDAwMDAwNDBVCisjZGVmaW5lIFJUQ19IT1VSRk9STUFUXzEyICAgICAgICAgICAgICBSVENfQ1JfRk1UCiAvKioKICAgKiBAfQogICAqLwpAQCAtMjIwLDkgKzIyMyw5IEBACiAgICogQHsKICAgKi8KICNkZWZpbmUgUlRDX09VVFBVVF9ESVNBQkxFICAgICAgICAgICAgIDB4MDAwMDAwMDBVCi0jZGVmaW5lIFJUQ19PVVRQVVRfQUxBUk1BICAgICAgICAgICAgICAweDAwMjAwMDAwVQotI2RlZmluZSBSVENfT1VUUFVUX0FMQVJNQiAgICAgICAgICAgICAgMHgwMDQwMDAwMFUKLSNkZWZpbmUgUlRDX09VVFBVVF9XQUtFVVAgICAgICAgICAgICAgIDB4MDA2MDAwMDBVCisjZGVmaW5lIFJUQ19PVVRQVVRfQUxBUk1BICAgICAgICAgICAgICBSVENfQ1JfT1NFTF8wCisjZGVmaW5lIFJUQ19PVVRQVVRfQUxBUk1CICAgICAgICAgICAgICBSVENfQ1JfT1NFTF8xCisjZGVmaW5lIFJUQ19PVVRQVVRfV0FLRVVQICAgICAgICAgICAgICBSVENfQ1JfT1NFTAogLyoqCiAgICogQH0KICAgKi8KQEAgLTIzMSw3ICsyMzQsNyBAQAogICAqIEB7CiAgICovCiAjZGVmaW5lIFJUQ19PVVRQVVRfUE9MQVJJVFlfSElHSCAgICAgICAweDAwMDAwMDAwVQotI2RlZmluZSBSVENfT1VUUFVUX1BPTEFSSVRZX0xPVyAgICAgICAgMHgwMDEwMDAwMFUKKyNkZWZpbmUgUlRDX09VVFBVVF9QT0xBUklUWV9MT1cgICAgICAgIFJUQ19DUl9QT0wKIC8qKgogICAqIEB9CiAgICovCkBAIC0yNDAsNyArMjQzLDcgQEAKICAgKiBAewogICAqLwogI2RlZmluZSBSVENfT1VUUFVUX1RZUEVfT1BFTkRSQUlOICAgICAgMHgwMDAwMDAwMFUKLSNkZWZpbmUgUlRDX09VVFBVVF9UWVBFX1BVU0hQVUxMICAgICAgIDB4MDAwNDAwMDBVCisjZGVmaW5lIFJUQ19PVVRQVVRfVFlQRV9QVVNIUFVMTCAgICAgICBSVENfVEFGQ1JfQUxBUk1PVVRUWVBFCiAvKioKICAgKiBAfQogICAqLwpAQCAtMjQ5LDcgKzI1Miw3IEBACiAgICogQHsKICAgKi8KICNkZWZpbmUgUlRDX0hPVVJGT1JNQVQxMl9BTSAgICAgICAgICAgICgodWludDhfdCkweDAwKQotI2RlZmluZSBSVENfSE9VUkZPUk1BVDEyX1BNICAgICAgICAgICAgKCh1aW50OF90KTB4NDApCisjZGVmaW5lIFJUQ19IT1VSRk9STUFUMTJfUE0gICAgICAgICAgICAoKHVpbnQ4X3QpMHgwMSkKIC8qKgogICAqIEB9CiAgICovCkBAIC0yNTcsOCArMjYwLDggQEAKIC8qKiBAZGVmZ3JvdXAgUlRDX0RheUxpZ2h0U2F2aW5nX0RlZmluaXRpb25zIFJUQyBEYXlMaWdodCBTYXZpbmcgRGVmaW5pdGlvbnMKICAgKiBAewogICAqLwotI2RlZmluZSBSVENfREFZTElHSFRTQVZJTkdfU1VCMUggICAgICAgMHgwMDAyMDAwMFUKLSNkZWZpbmUgUlRDX0RBWUxJR0hUU0FWSU5HX0FERDFIICAgICAgIDB4MDAwMTAwMDBVCisjZGVmaW5lIFJUQ19EQVlMSUdIVFNBVklOR19TVUIxSCAgICAgICBSVENfQ1JfU1VCMUgKKyNkZWZpbmUgUlRDX0RBWUxJR0hUU0FWSU5HX0FERDFIICAgICAgIFJUQ19DUl9BREQxSAogI2RlZmluZSBSVENfREFZTElHSFRTQVZJTkdfTk9ORSAgICAgICAgMHgwMDAwMDAwMFUKIC8qKgogICAqIEB9CkBAIC0yNjgsNyArMjcxLDcgQEAKICAgKiBAewogICAqLwogI2RlZmluZSBSVENfU1RPUkVPUEVSQVRJT05fUkVTRVQgICAgICAgIDB4MDAwMDAwMDBVCi0jZGVmaW5lIFJUQ19TVE9SRU9QRVJBVElPTl9TRVQgICAgICAgICAgMHgwMDA0MDAwMFUKKyNkZWZpbmUgUlRDX1NUT1JFT1BFUkFUSU9OX1NFVCAgICAgICAgICBSVENfQ1JfQktQCiAvKioKICAgKiBAfQogICAqLwpAQCAtMjc2LDE2ICsyNzksMTUgQEAKIC8qKiBAZGVmZ3JvdXAgUlRDX0lucHV0X3BhcmFtZXRlcl9mb3JtYXRfZGVmaW5pdGlvbnMgUlRDIElucHV0IFBhcmFtZXRlciBGb3JtYXQgRGVmaW5pdGlvbnMKICAgKiBAewogICAqLwotI2RlZmluZSBSVENfRk9STUFUX0JJTiAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwVQotI2RlZmluZSBSVENfRk9STUFUX0JDRCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxVQorI2RlZmluZSBSVENfRk9STUFUX0JJTiAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDBVCisjZGVmaW5lIFJUQ19GT1JNQVRfQkNEICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMVUKIC8qKgogICAqIEB9CiAgICovCiAKLS8qKiBAZGVmZ3JvdXAgUlRDX01vbnRoX0RhdGVfRGVmaW5pdGlvbnMgUlRDIE1vbnRoIERhdGUgRGVmaW5pdGlvbnMKKy8qKiBAZGVmZ3JvdXAgUlRDX01vbnRoX0RhdGVfRGVmaW5pdGlvbnMgUlRDIE1vbnRoIERhdGUgRGVmaW5pdGlvbnMgKGluIEJDRCBmb3JtYXQpCiAgICogQHsKICAgKi8KLS8qIENvZGVkIGluIEJDRCBmb3JtYXQgKi8KICNkZWZpbmUgUlRDX01PTlRIX0pBTlVBUlkgICAgICAgICAgICAgICgodWludDhfdCkweDAxKQogI2RlZmluZSBSVENfTU9OVEhfRkVCUlVBUlkgICAgICAgICAgICAgKCh1aW50OF90KTB4MDIpCiAjZGVmaW5lIFJUQ19NT05USF9NQVJDSCAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwMykKQEAgLTMyMCw3ICszMjIsNyBAQAogICAqIEB7CiAgICovCiAjZGVmaW5lIFJUQ19BTEFSTURBVEVXRUVLREFZU0VMX0RBVEUgICAgICAweDAwMDAwMDAwVQotI2RlZmluZSBSVENfQUxBUk1EQVRFV0VFS0RBWVNFTF9XRUVLREFZICAgMHg0MDAwMDAwMFUKKyNkZWZpbmUgUlRDX0FMQVJNREFURVdFRUtEQVlTRUxfV0VFS0RBWSAgIFJUQ19BTFJNQVJfV0RTRUwKIC8qKgogICAqIEB9CiAgICovCkBAIC0zMzMsNyArMzM1LDEwIEBACiAjZGVmaW5lIFJUQ19BTEFSTU1BU0tfSE9VUlMgICAgICAgICAgICAgICBSVENfQUxSTUFSX01TSzMKICNkZWZpbmUgUlRDX0FMQVJNTUFTS19NSU5VVEVTICAgICAgICAgICAgIFJUQ19BTFJNQVJfTVNLMgogI2RlZmluZSBSVENfQUxBUk1NQVNLX1NFQ09ORFMgICAgICAgICAgICAgUlRDX0FMUk1BUl9NU0sxCi0jZGVmaW5lIFJUQ19BTEFSTU1BU0tfQUxMICAgICAgICAgICAgICAgICAweDgwODA4MDgwVQorI2RlZmluZSBSVENfQUxBUk1NQVNLX0FMTCAgICAgICAgICAgICAgICAgKFJUQ19BTEFSTU1BU0tfREFURVdFRUtEQVkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRDX0FMQVJNTUFTS19IT1VSUyAgICAgICB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVENfQUxBUk1NQVNLX01JTlVURVMgICAgIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUQ19BTEFSTU1BU0tfU0VDT05EUykKIC8qKgogICAqIEB9CiAgICovCkBAIC0zNTAsMTIgKzM1NSwxMCBAQAogLyoqIEBkZWZncm91cCBSVENfSW50ZXJydXB0c19EZWZpbml0aW9ucyBSVEMgSW50ZXJydXB0cyBEZWZpbml0aW9ucwogICAqIEB7CiAgICovCi0jZGVmaW5lIFJUQ19JVF9UUyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwVQotI2RlZmluZSBSVENfSVRfV1VUICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMFUKLSNkZWZpbmUgUlRDX0lUX0FMUkIgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDBVCi0jZGVmaW5lIFJUQ19JVF9BTFJBICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwVQotI2RlZmluZSBSVENfSVRfVEFNUCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNFUgLyogVXNlZCBvbmx5IHRvIEVuYWJsZSB0aGUgVGFtcGVyIEludGVycnVwdCAqLwotI2RlZmluZSBSVENfSVRfVEFNUDEgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMFUKKyNkZWZpbmUgUlRDX0lUX1RTICAgICAgICAgICAgICAgICAgICAgICAgIFJUQ19DUl9UU0lFICAgICAgICAgLyohPCBFbmFibGUgVGltZXN0YW1wIEludGVycnVwdCAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJUQ19JVF9XVVQgICAgICAgICAgICAgICAgICAgICAgICBSVENfQ1JfV1VUSUUgICAgICAgIC8qITwgRW5hYmxlIFdha2V1cCB0aW1lciBJbnRlcnJ1cHQgICAgICAgICAgICAqLworI2RlZmluZSBSVENfSVRfQUxSQiAgICAgICAgICAgICAgICAgICAgICAgUlRDX0NSX0FMUkJJRSAgICAgICAvKiE8IEVuYWJsZSBBbGFybSBCIEludGVycnVwdCAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX0lUX0FMUkEgICAgICAgICAgICAgICAgICAgICAgIFJUQ19DUl9BTFJBSUUgICAgICAgLyohPCBFbmFibGUgQWxhcm0gQSBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtMzYzLDE4ICszNjYsMTggQEAKIC8qKiBAZGVmZ3JvdXAgUlRDX0ZsYWdzX0RlZmluaXRpb25zIFJUQyBGbGFncyBEZWZpbml0aW9ucwogICAqIEB7CiAgICovCi0jZGVmaW5lIFJUQ19GTEFHX1RBTVAxRiAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwVQotI2RlZmluZSBSVENfRkxBR19UU09WRiAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMFUKLSNkZWZpbmUgUlRDX0ZMQUdfVFNGICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDBVCi0jZGVmaW5lIFJUQ19GTEFHX1dVVEYgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwVQotI2RlZmluZSBSVENfRkxBR19BTFJCRiAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMFUKLSNkZWZpbmUgUlRDX0ZMQUdfQUxSQUYgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDBVCi0jZGVmaW5lIFJUQ19GTEFHX0lOSVRGICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwVQotI2RlZmluZSBSVENfRkxBR19SU0YgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMFUKLSNkZWZpbmUgUlRDX0ZMQUdfSU5JVFMgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTBVCi0jZGVmaW5lIFJUQ19GTEFHX1dVVFdGICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0VQotI2RlZmluZSBSVENfRkxBR19BTFJCV0YgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMlUKLSNkZWZpbmUgUlRDX0ZMQUdfQUxSQVdGICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDFVCisjZGVmaW5lIFJUQ19GTEFHX1RBTVAxRiAgICAgICAgICAgICAgICAgICBSVENfSVNSX1RBTVAxRiAgICAgIC8qITwgVGFtcGVyIDEgZXZlbnQgZmxhZyAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBSVENfRkxBR19UU09WRiAgICAgICAgICAgICAgICAgICAgUlRDX0lTUl9UU09WRiAgICAgICAvKiE8IFRpbWVzdGFtcCBvdmVyZmxvdyBmbGFnICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX0ZMQUdfVFNGICAgICAgICAgICAgICAgICAgICAgIFJUQ19JU1JfVFNGICAgICAgICAgLyohPCBUaW1lc3RhbXAgZXZlbnQgZmxhZyAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJUQ19GTEFHX1dVVEYgICAgICAgICAgICAgICAgICAgICBSVENfSVNSX1dVVEYgICAgICAgIC8qITwgV2FrZXVwIHRpbWVyIGV2ZW50IGZsYWcgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBSVENfRkxBR19BTFJCRiAgICAgICAgICAgICAgICAgICAgUlRDX0lTUl9BTFJCRiAgICAgICAvKiE8IEFsYXJtIEIgZXZlbnQgZmxhZyAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX0ZMQUdfQUxSQUYgICAgICAgICAgICAgICAgICAgIFJUQ19JU1JfQUxSQUYgICAgICAgLyohPCBBbGFybSBBIGV2ZW50IGZsYWcgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJUQ19GTEFHX0lOSVRGICAgICAgICAgICAgICAgICAgICBSVENfSVNSX0lOSVRGICAgICAgIC8qITwgUlRDIGluIGluaXRpYWxpemF0aW9uIG1vZGUgZmxhZyAgICAgICAgICAqLworI2RlZmluZSBSVENfRkxBR19SU0YgICAgICAgICAgICAgICAgICAgICAgUlRDX0lTUl9SU0YgICAgICAgICAvKiE8IFJlZ2lzdGVyIHN5bmNocm9uaXphdGlvbiBmbGFnICAgICAgICAgICAgKi8KKyNkZWZpbmUgUlRDX0ZMQUdfSU5JVFMgICAgICAgICAgICAgICAgICAgIFJUQ19JU1JfSU5JVFMgICAgICAgLyohPCBSVEMgaW5pdGlhbGl6YXRpb24gc3RhdHVzIGZsYWcgICAgICAgICAgICovCisjZGVmaW5lIFJUQ19GTEFHX1dVVFdGICAgICAgICAgICAgICAgICAgICBSVENfSVNSX1dVVFdGICAgICAgIC8qITwgV1VUUiByZWdpc3RlciB3cml0ZSBhbGxvd2FuY2UgZmxhZyAgICAgICAqLworI2RlZmluZSBSVENfRkxBR19BTFJCV0YgICAgICAgICAgICAgICAgICAgUlRDX0lTUl9BTFJCV0YgICAgICAvKiE8IEFMUk1CUiByZWdpc3RlciB3cml0ZSBhbGxvd2FuY2UgZmxhZyAgICAgKi8KKyNkZWZpbmUgUlRDX0ZMQUdfQUxSQVdGICAgICAgICAgICAgICAgICAgIFJUQ19JU1JfQUxSQVdGICAgICAgLyohPCBBTFJNQVIgcmVnaXN0ZXIgd3JpdGUgYWxsb3dhbmNlIGZsYWcgICAgICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtMzgzLDcgKzM4Niw4IEBACiAgICogQH0KICAgKi8KIAotLyogRXhwb3J0ZWQgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIEV4cG9ydGVkIG1hY3JvcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKIC8qKiBAZGVmZ3JvdXAgUlRDX0V4cG9ydGVkX01hY3JvcyBSVEMgRXhwb3J0ZWQgTWFjcm9zCiAgICogQHsKICAgKi8KQEAgLTM5MywxMSArMzk3LDExIEBACiAgICogQHJldHZhbCBOb25lCiAgICovCiAjaWYgKFVTRV9IQUxfUlRDX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQotI2RlZmluZSBfX0hBTF9SVENfUkVTRVRfSEFORExFX1NUQVRFKF9fSEFORExFX18pIGRve1wKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX1JFU0VUO1wKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+TXNwSW5pdENhbGxiYWNrID0gTlVMTDtcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPk1zcERlSW5pdENhbGxiYWNrID0gTlVMTDtcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH13aGlsZSgwdSkKKyNkZWZpbmUgX19IQUxfUlRDX1JFU0VUX0hBTkRMRV9TVEFURShfX0hBTkRMRV9fKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPlN0YXRlID0gSEFMX1JUQ19TVEFURV9SRVNFVDsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5Nc3BJbml0Q2FsbGJhY2sgPSBOVUxMOyAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+TXNwRGVJbml0Q2FsbGJhY2sgPSBOVUxMOyAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwVSkKICNlbHNlCiAjZGVmaW5lIF9fSEFMX1JUQ19SRVNFVF9IQU5ETEVfU1RBVEUoX19IQU5ETEVfXykgKChfX0hBTkRMRV9fKS0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX1JFU0VUKQogI2VuZGlmIC8qIFVTRV9IQUxfUlRDX1JFR0lTVEVSX0NBTExCQUNLUyAqLwpAQCAtNDA3LDIxICs0MTEsMjYgQEAKICAgKiBAcGFyYW0gIF9fSEFORExFX18gc3BlY2lmaWVzIHRoZSBSVEMgaGFuZGxlLgogICAqIEByZXR2YWwgTm9uZQogICAqLwotI2RlZmluZSBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0RJU0FCTEUoX19IQU5ETEVfXykgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgZG97ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPldQUiA9IDB4Q0FVOyAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPldQUiA9IDB4NTNVOyAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDBVKQorI2RlZmluZSBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0RJU0FCTEUoX19IQU5ETEVfXykgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5JbnN0YW5jZS0+V1BSID0gMHhDQVU7ICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPldQUiA9IDB4NTNVOyAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwVSkKIAogLyoqCiAgICogQGJyaWVmICBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMuCiAgICogQHBhcmFtICBfX0hBTkRMRV9fIHNwZWNpZmllcyB0aGUgUlRDIGhhbmRsZS4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KLSNkZWZpbmUgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoX19IQU5ETEVfXykgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRveyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPkluc3RhbmNlLT5XUFIgPSAweEZGVTsgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwVSkKKyNkZWZpbmUgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoX19IQU5ETEVfXykgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPkluc3RhbmNlLT5XUFIgPSAweEZGVTsgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwVSkKKworLyoqCisgICogQGJyaWVmICBDaGVjayB3aGV0aGVyIHRoZSBSVEMgQ2FsZW5kYXIgaXMgaW5pdGlhbGl6ZWQuCisgICogQHBhcmFtICBfX0hBTkRMRV9fIHNwZWNpZmllcyB0aGUgUlRDIGhhbmRsZS4KKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KKyNkZWZpbmUgX19IQUxfUlRDX0lTX0NBTEVOREFSX0lOSVRJQUxJWkVEKF9fSEFORExFX18pICAgICAgICAgICAgICAgICAoKCgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+SVNSKSAmIChSVENfRkxBR19JTklUUykpID09IFJUQ19GTEFHX0lOSVRTKSA/IDFVIDogMFUpCiAKIC8qKgogICAqIEBicmllZiAgRW5hYmxlIHRoZSBSVEMgQUxBUk1BIHBlcmlwaGVyYWwuCkBAIC00NjYsOSArNDc1LDkgQEAKICAgKiBAYnJpZWYgIERpc2FibGUgdGhlIFJUQyBBbGFybSBpbnRlcnJ1cHQuCiAgICogQHBhcmFtICBfX0hBTkRMRV9fIHNwZWNpZmllcyB0aGUgUlRDIGhhbmRsZS4KICAgKiBAcGFyYW0gIF9fSU5URVJSVVBUX18gc3BlY2lmaWVzIHRoZSBSVEMgQWxhcm0gaW50ZXJydXB0IHNvdXJjZXMgdG8gYmUgZW5hYmxlZCBvciBkaXNhYmxlZC4KLSAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6Ci0gICogICAgICAgICAgICBAYXJnIFJUQ19JVF9BTFJBOiBBbGFybSBBIGludGVycnVwdAotICAqICAgICAgICAgICAgQGFyZyBSVENfSVRfQUxSQjogQWxhcm0gQiBpbnRlcnJ1cHQKKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYW55IGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgICAgIEBhcmcgUlRDX0lUX0FMUkE6IEFsYXJtIEEgaW50ZXJydXB0CisgICogICAgICAgICAgICAgQGFyZyBSVENfSVRfQUxSQjogQWxhcm0gQiBpbnRlcnJ1cHQKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KICNkZWZpbmUgX19IQUxfUlRDX0FMQVJNX0RJU0FCTEVfSVQoX19IQU5ETEVfXywgX19JTlRFUlJVUFRfXykgICAgICAgICAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q1IgJj0gfihfX0lOVEVSUlVQVF9fKSkKQEAgLTQ4MiwyNSArNDkxLDI1IEBACiAgICogICAgICAgICAgICBAYXJnIFJUQ19JVF9BTFJCOiBBbGFybSBCIGludGVycnVwdAogICAqIEByZXR2YWwgTm9uZQogICAqLwotI2RlZmluZSBfX0hBTF9SVENfQUxBUk1fR0VUX0lUKF9fSEFORExFX18sIF9fSU5URVJSVVBUX18pICAgICAgICAgICAoKCgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+SVNSKSYgKChfX0lOVEVSUlVQVF9fKT4+IDRVKSkgIT0gUkVTRVQpPyBTRVQgOiBSRVNFVCkKKyNkZWZpbmUgX19IQUxfUlRDX0FMQVJNX0dFVF9JVChfX0hBTkRMRV9fLCBfX0lOVEVSUlVQVF9fKSAgICAgICAgICAgKCgoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPklTUikgJiAoKF9fSU5URVJSVVBUX18pID4+IDRVKSkgIT0gMFUpID8gMVUgOiAwVSkKIAogLyoqCiAgICogQGJyaWVmICBHZXQgdGhlIHNlbGVjdGVkIFJUQyBBbGFybSdzIGZsYWcgc3RhdHVzLgogICAqIEBwYXJhbSAgX19IQU5ETEVfXyBzcGVjaWZpZXMgdGhlIFJUQyBoYW5kbGUuCiAgICogQHBhcmFtICBfX0ZMQUdfXyBzcGVjaWZpZXMgdGhlIFJUQyBBbGFybSBGbGFnIHRvIGNoZWNrLgogICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOgotICAqICAgICAgICAgICAgQGFyZyBSVENfRkxBR19BTFJBRgotICAqICAgICAgICAgICAgQGFyZyBSVENfRkxBR19BTFJCRgotICAqICAgICAgICAgICAgQGFyZyBSVENfRkxBR19BTFJBV0YKLSAgKiAgICAgICAgICAgIEBhcmcgUlRDX0ZMQUdfQUxSQldGCisgICogICAgICAgICAgICBAYXJnIFJUQ19GTEFHX0FMUkFGOiBBbGFybSBBIGludGVycnVwdCBmbGFnCisgICogICAgICAgICAgICBAYXJnIFJUQ19GTEFHX0FMUkFXRjogQWxhcm0gQSAnd3JpdGUgYWxsb3dlZCcgZmxhZworICAqICAgICAgICAgICAgQGFyZyBSVENfRkxBR19BTFJCRjogQWxhcm0gQiBpbnRlcnJ1cHQgZmxhZworICAqICAgICAgICAgICAgQGFyZyBSVENfRkxBR19BTFJCV0Y6IEFsYXJtIEIgJ3dyaXRlIGFsbG93ZWQnIGZsYWcKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KLSNkZWZpbmUgX19IQUxfUlRDX0FMQVJNX0dFVF9GTEFHKF9fSEFORExFX18sIF9fRkxBR19fKSAgICAgICAgICAgICAgICAoKCgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+SVNSKSAmIChfX0ZMQUdfXykpICE9IFJFU0VUKT8gU0VUIDogUkVTRVQpCisjZGVmaW5lIF9fSEFMX1JUQ19BTEFSTV9HRVRfRkxBRyhfX0hBTkRMRV9fLCBfX0ZMQUdfXykgICAgICAgICAgICAgICAgKCgoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPklTUikgJiAoX19GTEFHX18pKSAhPSAwVSkgPyAxVSA6IDBVKQogCiAvKioKICAgKiBAYnJpZWYgIENsZWFyIHRoZSBSVEMgQWxhcm0ncyBwZW5kaW5nIGZsYWdzLgogICAqIEBwYXJhbSAgX19IQU5ETEVfXyBzcGVjaWZpZXMgdGhlIFJUQyBoYW5kbGUuCi0gICogQHBhcmFtICBfX0ZMQUdfXyBzcGVjaWZpZXMgdGhlIFJUQyBBbGFybSBGbGFnIHNvdXJjZXMgdG8gYmUgZW5hYmxlZCBvciBkaXNhYmxlZC4KKyAgKiBAcGFyYW0gIF9fRkxBR19fIHNwZWNpZmllcyB0aGUgUlRDIEFsYXJtIGZsYWcgdG8gYmUgY2xlYXJlZC4KICAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6CiAgICogICAgICAgICAgICAgQGFyZyBSVENfRkxBR19BTFJBRgogICAqICAgICAgICAgICAgIEBhcmcgUlRDX0ZMQUdfQUxSQkYKQEAgLTUwOCw3ICs1MTcsNiBAQAogICAqLwogI2RlZmluZSBfX0hBTF9SVENfQUxBUk1fQ0xFQVJfRkxBRyhfX0hBTkRMRV9fLCBfX0ZMQUdfXykgICAgICAgICAgICAgICAgICAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+SVNSKSA9ICh+KChfX0ZMQUdfXykgfCBSVENfSVNSX0lOSVQpfCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5JU1IgJiBSVENfSVNSX0lOSVQpKQogCi0KIC8qKgogICAqIEBicmllZiAgQ2hlY2sgd2hldGhlciB0aGUgc3BlY2lmaWVkIFJUQyBBbGFybSBpbnRlcnJ1cHQgaGFzIGJlZW4gZW5hYmxlZCBvciBub3QuCiAgICogQHBhcmFtICBfX0hBTkRMRV9fIHNwZWNpZmllcyB0aGUgUlRDIGhhbmRsZS4KQEAgLTUxOCw4NiArNTI2LDg4IEBACiAgICogICAgICAgICAgICBAYXJnIFJUQ19JVF9BTFJCOiBBbGFybSBCIGludGVycnVwdAogICAqIEByZXR2YWwgTm9uZQogICAqLwotI2RlZmluZSBfX0hBTF9SVENfQUxBUk1fR0VUX0lUX1NPVVJDRShfX0hBTkRMRV9fLCBfX0lOVEVSUlVQVF9fKSAgICAgKCgoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNSKSAmIChfX0lOVEVSUlVQVF9fKSkgIT0gUkVTRVQpID8gU0VUIDogUkVTRVQpCisjZGVmaW5lIF9fSEFMX1JUQ19BTEFSTV9HRVRfSVRfU09VUkNFKF9fSEFORExFX18sIF9fSU5URVJSVVBUX18pICAgICAoKCgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q1IpICYgKF9fSU5URVJSVVBUX18pKSAhPSAwVSkgPyAxVSA6IDBVKQogCiAvKioKLSAgKiBAYnJpZWYgIEVuYWJsZSBpbnRlcnJ1cHQgb24gdGhlIFJUQyBBbGFybSBhc3NvY2lhdGVkIEV4dGkgbGluZS4KKyAgKiBAYnJpZWYgIEVuYWJsZSBpbnRlcnJ1cHQgb24gdGhlIFJUQyBBbGFybSBhc3NvY2lhdGVkIEVYVEkgbGluZS4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KICNkZWZpbmUgX19IQUxfUlRDX0FMQVJNX0VYVElfRU5BQkxFX0lUKCkgICAgICAgICAgICAoRVhUSS0+SU1SIHw9IFJUQ19FWFRJX0xJTkVfQUxBUk1fRVZFTlQpCiAKIC8qKgotICAqIEBicmllZiAgRGlzYWJsZSBpbnRlcnJ1cHQgb24gdGhlIFJUQyBBbGFybSBhc3NvY2lhdGVkIEV4dGkgbGluZS4KKyAgKiBAYnJpZWYgIERpc2FibGUgaW50ZXJydXB0IG9uIHRoZSBSVEMgQWxhcm0gYXNzb2NpYXRlZCBFWFRJIGxpbmUuCiAgICogQHJldHZhbCBOb25lCiAgICovCi0jZGVmaW5lIF9fSEFMX1JUQ19BTEFSTV9FWFRJX0RJU0FCTEVfSVQoKSAgICAgICAgICAgKEVYVEktPklNUiAmPSB+KFJUQ19FWFRJX0xJTkVfQUxBUk1fRVZFTlQpKQorI2RlZmluZSBfX0hBTF9SVENfQUxBUk1fRVhUSV9ESVNBQkxFX0lUKCkgICAgICAgICAgIChFWFRJLT5JTVIgJj0gflJUQ19FWFRJX0xJTkVfQUxBUk1fRVZFTlQpCiAKIC8qKgotICAqIEBicmllZiAgRW5hYmxlIGV2ZW50IG9uIHRoZSBSVEMgQWxhcm0gYXNzb2NpYXRlZCBFeHRpIGxpbmUuCisgICogQGJyaWVmICBFbmFibGUgZXZlbnQgb24gdGhlIFJUQyBBbGFybSBhc3NvY2lhdGVkIEVYVEkgbGluZS4KICAgKiBAcmV0dmFsIE5vbmUuCiAgICovCi0jZGVmaW5lIF9fSEFMX1JUQ19BTEFSTV9FWFRJX0VOQUJMRV9FVkVOVCgpICAgICAgICAgKEVYVEktPkVNUiB8PSBSVENfRVhUSV9MSU5FX0FMQVJNX0VWRU5UKQorI2RlZmluZSBfX0hBTF9SVENfQUxBUk1fRVhUSV9FTkFCTEVfRVZFTlQoKSAgICAgICAgICAoRVhUSS0+RU1SIHw9IFJUQ19FWFRJX0xJTkVfQUxBUk1fRVZFTlQpCiAKIC8qKgotICAqIEBicmllZiAgRGlzYWJsZSBldmVudCBvbiB0aGUgUlRDIEFsYXJtIGFzc29jaWF0ZWQgRXh0aSBsaW5lLgorICAqIEBicmllZiAgRGlzYWJsZSBldmVudCBvbiB0aGUgUlRDIEFsYXJtIGFzc29jaWF0ZWQgRVhUSSBsaW5lLgogICAqIEByZXR2YWwgTm9uZS4KICAgKi8KLSNkZWZpbmUgX19IQUxfUlRDX0FMQVJNX0VYVElfRElTQUJMRV9FVkVOVCgpICAgICAgICAgKEVYVEktPkVNUiAmPSB+KFJUQ19FWFRJX0xJTkVfQUxBUk1fRVZFTlQpKQorI2RlZmluZSBfX0hBTF9SVENfQUxBUk1fRVhUSV9ESVNBQkxFX0VWRU5UKCkgICAgICAgICAoRVhUSS0+RU1SICY9IH5SVENfRVhUSV9MSU5FX0FMQVJNX0VWRU5UKQogCiAvKioKLSAgKiBAYnJpZWYgIEVuYWJsZSBmYWxsaW5nIGVkZ2UgdHJpZ2dlciBvbiB0aGUgUlRDIEFsYXJtIGFzc29jaWF0ZWQgRXh0aSBsaW5lLgorICAqIEBicmllZiAgRW5hYmxlIGZhbGxpbmcgZWRnZSB0cmlnZ2VyIG9uIHRoZSBSVEMgQWxhcm0gYXNzb2NpYXRlZCBFWFRJIGxpbmUuCiAgICogQHJldHZhbCBOb25lLgogICAqLwogI2RlZmluZSBfX0hBTF9SVENfQUxBUk1fRVhUSV9FTkFCTEVfRkFMTElOR19FREdFKCkgICAoRVhUSS0+RlRTUiB8PSBSVENfRVhUSV9MSU5FX0FMQVJNX0VWRU5UKQogCiAvKioKLSAgKiBAYnJpZWYgIERpc2FibGUgZmFsbGluZyBlZGdlIHRyaWdnZXIgb24gdGhlIFJUQyBBbGFybSBhc3NvY2lhdGVkIEV4dGkgbGluZS4KKyAgKiBAYnJpZWYgIERpc2FibGUgZmFsbGluZyBlZGdlIHRyaWdnZXIgb24gdGhlIFJUQyBBbGFybSBhc3NvY2lhdGVkIEVYVEkgbGluZS4KICAgKiBAcmV0dmFsIE5vbmUuCiAgICovCi0jZGVmaW5lIF9fSEFMX1JUQ19BTEFSTV9FWFRJX0RJU0FCTEVfRkFMTElOR19FREdFKCkgIChFWFRJLT5GVFNSICY9IH4oUlRDX0VYVElfTElORV9BTEFSTV9FVkVOVCkpCisjZGVmaW5lIF9fSEFMX1JUQ19BTEFSTV9FWFRJX0RJU0FCTEVfRkFMTElOR19FREdFKCkgIChFWFRJLT5GVFNSICY9IH5SVENfRVhUSV9MSU5FX0FMQVJNX0VWRU5UKQogCiAvKioKLSAgKiBAYnJpZWYgIEVuYWJsZSByaXNpbmcgZWRnZSB0cmlnZ2VyIG9uIHRoZSBSVEMgQWxhcm0gYXNzb2NpYXRlZCBFeHRpIGxpbmUuCisgICogQGJyaWVmICBFbmFibGUgcmlzaW5nIGVkZ2UgdHJpZ2dlciBvbiB0aGUgUlRDIEFsYXJtIGFzc29jaWF0ZWQgRVhUSSBsaW5lLgogICAqIEByZXR2YWwgTm9uZS4KICAgKi8KICNkZWZpbmUgX19IQUxfUlRDX0FMQVJNX0VYVElfRU5BQkxFX1JJU0lOR19FREdFKCkgICAgKEVYVEktPlJUU1IgfD0gUlRDX0VYVElfTElORV9BTEFSTV9FVkVOVCkKIAogLyoqCi0gICogQGJyaWVmICBEaXNhYmxlIHJpc2luZyBlZGdlIHRyaWdnZXIgb24gdGhlIFJUQyBBbGFybSBhc3NvY2lhdGVkIEV4dGkgbGluZS4KKyAgKiBAYnJpZWYgIERpc2FibGUgcmlzaW5nIGVkZ2UgdHJpZ2dlciBvbiB0aGUgUlRDIEFsYXJtIGFzc29jaWF0ZWQgRVhUSSBsaW5lLgogICAqIEByZXR2YWwgTm9uZS4KICAgKi8KLSNkZWZpbmUgX19IQUxfUlRDX0FMQVJNX0VYVElfRElTQUJMRV9SSVNJTkdfRURHRSgpICAgKEVYVEktPlJUU1IgJj0gfihSVENfRVhUSV9MSU5FX0FMQVJNX0VWRU5UKSkKKyNkZWZpbmUgX19IQUxfUlRDX0FMQVJNX0VYVElfRElTQUJMRV9SSVNJTkdfRURHRSgpICAgKEVYVEktPlJUU1IgJj0gflJUQ19FWFRJX0xJTkVfQUxBUk1fRVZFTlQpCiAKIC8qKgotICAqIEBicmllZiAgRW5hYmxlIHJpc2luZyAmIGZhbGxpbmcgZWRnZSB0cmlnZ2VyIG9uIHRoZSBSVEMgQWxhcm0gYXNzb2NpYXRlZCBFeHRpIGxpbmUuCisgICogQGJyaWVmICBFbmFibGUgcmlzaW5nICYgZmFsbGluZyBlZGdlIHRyaWdnZXIgb24gdGhlIFJUQyBBbGFybSBhc3NvY2lhdGVkIEVYVEkgbGluZS4KICAgKiBAcmV0dmFsIE5vbmUuCiAgICovCi0jZGVmaW5lIF9fSEFMX1JUQ19BTEFSTV9FWFRJX0VOQUJMRV9SSVNJTkdfRkFMTElOR19FREdFKCkgZG97IF9fSEFMX1JUQ19BTEFSTV9FWFRJX0VOQUJMRV9SSVNJTkdfRURHRSgpO1wKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19IQUxfUlRDX0FMQVJNX0VYVElfRU5BQkxFX0ZBTExJTkdfRURHRSgpO1wKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH13aGlsZSgwVSkKKyNkZWZpbmUgX19IQUxfUlRDX0FMQVJNX0VYVElfRU5BQkxFX1JJU0lOR19GQUxMSU5HX0VER0UoKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19IQUxfUlRDX0FMQVJNX0VYVElfRU5BQkxFX1JJU0lOR19FREdFKCk7ICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0hBTF9SVENfQUxBUk1fRVhUSV9FTkFCTEVfRkFMTElOR19FREdFKCk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDBVKQogCiAvKioKLSAgKiBAYnJpZWYgIERpc2FibGUgcmlzaW5nICYgZmFsbGluZyBlZGdlIHRyaWdnZXIgb24gdGhlIFJUQyBBbGFybSBhc3NvY2lhdGVkIEV4dGkgbGluZS4KKyAgKiBAYnJpZWYgIERpc2FibGUgcmlzaW5nICYgZmFsbGluZyBlZGdlIHRyaWdnZXIgb24gdGhlIFJUQyBBbGFybSBhc3NvY2lhdGVkIEVYVEkgbGluZS4KICAgKiBAcmV0dmFsIE5vbmUuCiAgICovCi0jZGVmaW5lIF9fSEFMX1JUQ19BTEFSTV9FWFRJX0RJU0FCTEVfUklTSU5HX0ZBTExJTkdfRURHRSgpIGRveyBfX0hBTF9SVENfQUxBUk1fRVhUSV9ESVNBQkxFX1JJU0lOR19FREdFKCk7XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19IQUxfUlRDX0FMQVJNX0VYVElfRElTQUJMRV9GQUxMSU5HX0VER0UoKTtcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfXdoaWxlKDBVKQorI2RlZmluZSBfX0hBTF9SVENfQUxBUk1fRVhUSV9ESVNBQkxFX1JJU0lOR19GQUxMSU5HX0VER0UoKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0hBTF9SVENfQUxBUk1fRVhUSV9ESVNBQkxFX1JJU0lOR19FREdFKCk7ICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19IQUxfUlRDX0FMQVJNX0VYVElfRElTQUJMRV9GQUxMSU5HX0VER0UoKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDBVKQogCiAvKioKLSAgKiBAYnJpZWYgQ2hlY2sgd2hldGhlciB0aGUgUlRDIEFsYXJtIGFzc29jaWF0ZWQgRXh0aSBsaW5lIGludGVycnVwdCBmbGFnIGlzIHNldCBvciBub3QuCisgICogQGJyaWVmIENoZWNrIHdoZXRoZXIgdGhlIFJUQyBBbGFybSBhc3NvY2lhdGVkIEVYVEkgbGluZSBpbnRlcnJ1cHQgZmxhZyBpcyBzZXQgb3Igbm90LgogICAqIEByZXR2YWwgTGluZSBTdGF0dXMuCiAgICovCiAjZGVmaW5lIF9fSEFMX1JUQ19BTEFSTV9FWFRJX0dFVF9GTEFHKCkgICAgICAgICAgICAgIChFWFRJLT5QUiAmIFJUQ19FWFRJX0xJTkVfQUxBUk1fRVZFTlQpCiAKIC8qKgotICAqIEBicmllZiBDbGVhciB0aGUgUlRDIEFsYXJtIGFzc29jaWF0ZWQgRXh0aSBsaW5lIGZsYWcuCisgICogQGJyaWVmIENsZWFyIHRoZSBSVEMgQWxhcm0gYXNzb2NpYXRlZCBFWFRJIGxpbmUgZmxhZy4KICAgKiBAcmV0dmFsIE5vbmUuCiAgICovCiAjZGVmaW5lIF9fSEFMX1JUQ19BTEFSTV9FWFRJX0NMRUFSX0ZMQUcoKSAgICAgICAgICAgIChFWFRJLT5QUiA9IFJUQ19FWFRJX0xJTkVfQUxBUk1fRVZFTlQpCiAKIC8qKgotICAqIEBicmllZiBHZW5lcmF0ZSBhIFNvZnR3YXJlIGludGVycnVwdCBvbiBSVEMgQWxhcm0gYXNzb2NpYXRlZCBFeHRpIGxpbmUuCisgICogQGJyaWVmIEdlbmVyYXRlIGEgU29mdHdhcmUgaW50ZXJydXB0IG9uIFJUQyBBbGFybSBhc3NvY2lhdGVkIEVYVEkgbGluZS4KICAgKiBAcmV0dmFsIE5vbmUuCiAgICovCiAjZGVmaW5lIF9fSEFMX1JUQ19BTEFSTV9FWFRJX0dFTkVSQVRFX1NXSVQoKSAgICAgICAgIChFWFRJLT5TV0lFUiB8PSBSVENfRVhUSV9MSU5FX0FMQVJNX0VWRU5UKQpAQCAtNjA1LDEwICs2MTUsMTEgQEAKICAgKiBAfQogICAqLwogCi0vKiBJbmNsdWRlIFJUQyBIQUwgRXh0ZW5zaW9uIG1vZHVsZSAqLworLyogSW5jbHVkZSBSVEMgSEFMIEV4dGVuZGVkIG1vZHVsZSAqLwogI2luY2x1ZGUgInN0bTMyZjJ4eF9oYWxfcnRjX2V4LmgiCiAKIC8qIEV4cG9ydGVkIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKIC8qKiBAYWRkdG9ncm91cCBSVENfRXhwb3J0ZWRfRnVuY3Rpb25zCiAgICogQHsKICAgKi8KQEAgLTYxOSw4ICs2MzAsOCBAQAogLyogSW5pdGlhbGl6YXRpb24gYW5kIGRlLWluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9SVENfSW5pdChSVENfSGFuZGxlVHlwZURlZiAqaHJ0Yyk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfUlRDX0RlSW5pdChSVENfSGFuZGxlVHlwZURlZiAqaHJ0Yyk7Ci12b2lkICAgICAgIEhBTF9SVENfTXNwSW5pdChSVENfSGFuZGxlVHlwZURlZiAqaHJ0Yyk7Ci12b2lkICAgICAgIEhBTF9SVENfTXNwRGVJbml0KFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKTsKK3ZvaWQgICAgICAgICAgICAgIEhBTF9SVENfTXNwSW5pdChSVENfSGFuZGxlVHlwZURlZiAqaHJ0Yyk7Cit2b2lkICAgICAgICAgICAgICBIQUxfUlRDX01zcERlSW5pdChSVENfSGFuZGxlVHlwZURlZiAqaHJ0Yyk7CiAKIC8qIENhbGxiYWNrcyBSZWdpc3Rlci9VblJlZ2lzdGVyIGZ1bmN0aW9ucyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWYgKFVTRV9IQUxfUlRDX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQpAQCAtNjM5LDEzICs2NTAsNiBAQAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1JUQ19HZXRUaW1lKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjLCBSVENfVGltZVR5cGVEZWYgKnNUaW1lLCB1aW50MzJfdCBGb3JtYXQpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1JUQ19TZXREYXRlKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjLCBSVENfRGF0ZVR5cGVEZWYgKnNEYXRlLCB1aW50MzJfdCBGb3JtYXQpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1JUQ19HZXREYXRlKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjLCBSVENfRGF0ZVR5cGVEZWYgKnNEYXRlLCB1aW50MzJfdCBGb3JtYXQpOwotCi0vKiBSVEMgRGF5bGlnaHQgU2F2aW5nIFRpbWUgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdm9pZCAgICAgICAgICAgICAgSEFMX1JUQ19EU1RfQWRkMUhvdXIoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpOwotdm9pZCAgICAgICAgICAgICAgSEFMX1JUQ19EU1RfU3ViMUhvdXIoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpOwotdm9pZCAgICAgICAgICAgICAgSEFMX1JUQ19EU1RfU2V0U3RvcmVPcGVyYXRpb24oUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpOwotdm9pZCAgICAgICAgICAgICAgSEFMX1JUQ19EU1RfQ2xlYXJTdG9yZU9wZXJhdGlvbihSVENfSGFuZGxlVHlwZURlZiAqaHJ0Yyk7Ci11aW50MzJfdCAgICAgICAgICBIQUxfUlRDX0RTVF9SZWFkU3RvcmVPcGVyYXRpb24oUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpOwogLyoqCiAgICogQH0KICAgKi8KQEAgLTY1OCw5ICs2NjIsOSBAQAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1JUQ19TZXRBbGFybV9JVChSVENfSGFuZGxlVHlwZURlZiAqaHJ0YywgUlRDX0FsYXJtVHlwZURlZiAqc0FsYXJtLCB1aW50MzJfdCBGb3JtYXQpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1JUQ19EZWFjdGl2YXRlQWxhcm0oUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMsIHVpbnQzMl90IEFsYXJtKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9SVENfR2V0QWxhcm0oUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMsIFJUQ19BbGFybVR5cGVEZWYgKnNBbGFybSwgdWludDMyX3QgQWxhcm0sIHVpbnQzMl90IEZvcm1hdCk7Ci12b2lkICAgICAgICAgICAgICAgIEhBTF9SVENfQWxhcm1JUlFIYW5kbGVyKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKTsKLUhBTF9TdGF0dXNUeXBlRGVmICAgSEFMX1JUQ19Qb2xsRm9yQWxhcm1BRXZlbnQoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMsIHVpbnQzMl90IFRpbWVvdXQpOwotdm9pZCAgICAgICAgIEhBTF9SVENfQWxhcm1BRXZlbnRDYWxsYmFjayhSVENfSGFuZGxlVHlwZURlZiAqaHJ0Yyk7Cit2b2lkICAgICAgICAgICAgICBIQUxfUlRDX0FsYXJtSVJRSGFuZGxlcihSVENfSGFuZGxlVHlwZURlZiAqaHJ0Yyk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfUlRDX1BvbGxGb3JBbGFybUFFdmVudChSVENfSGFuZGxlVHlwZURlZiAqaHJ0YywgdWludDMyX3QgVGltZW91dCk7Cit2b2lkICAgICAgICAgICAgICBIQUxfUlRDX0FsYXJtQUV2ZW50Q2FsbGJhY2soUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpOwogLyoqCiAgICogQH0KICAgKi8KQEAgLTY3MCw2ICs2NzQsMTMgQEAKICAgKi8KIC8qIFBlcmlwaGVyYWwgQ29udHJvbCBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBIQUxfU3RhdHVzVHlwZURlZiAgIEhBTF9SVENfV2FpdEZvclN5bmNocm8oUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpOworCisvKiBSVEMgRGF5bGlnaHQgU2F2aW5nIFRpbWUgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCAgICAgICAgICAgICAgSEFMX1JUQ19EU1RfQWRkMUhvdXIoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpOwordm9pZCAgICAgICAgICAgICAgSEFMX1JUQ19EU1RfU3ViMUhvdXIoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpOwordm9pZCAgICAgICAgICAgICAgSEFMX1JUQ19EU1RfU2V0U3RvcmVPcGVyYXRpb24oUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpOwordm9pZCAgICAgICAgICAgICAgSEFMX1JUQ19EU1RfQ2xlYXJTdG9yZU9wZXJhdGlvbihSVENfSGFuZGxlVHlwZURlZiAqaHJ0Yyk7Cit1aW50MzJfdCAgICAgICAgICBIQUxfUlRDX0RTVF9SZWFkU3RvcmVPcGVyYXRpb24oUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpOwogLyoqCiAgICogQH0KICAgKi8KQEAgLTY5MCwyNyArNzAxLDM4IEBACiAvKiBQcml2YXRlIHR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogUHJpdmF0ZSB2YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgY29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKIC8qKiBAZGVmZ3JvdXAgUlRDX1ByaXZhdGVfQ29uc3RhbnRzIFJUQyBQcml2YXRlIENvbnN0YW50cwogICAqIEB7CiAgICovCiAvKiBNYXNrcyBEZWZpbml0aW9uICovCi0jZGVmaW5lIFJUQ19UUl9SRVNFUlZFRF9NQVNLICAgIDB4MDA3RjdGN0ZVCi0jZGVmaW5lIFJUQ19EUl9SRVNFUlZFRF9NQVNLICAgIDB4MDBGRkZGM0ZVCisjZGVmaW5lIFJUQ19UUl9SRVNFUlZFRF9NQVNLICAgICgodWludDMyX3QpKFJUQ19UUl9IVCAgfCBSVENfVFJfSFUgIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVENfVFJfTU5UIHwgUlRDX1RSX01OVSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRDX1RSX1NUICB8IFJUQ19UUl9TVSAgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUQ19UUl9QTSkpCisjZGVmaW5lIFJUQ19EUl9SRVNFUlZFRF9NQVNLICAgICgodWludDMyX3QpKFJUQ19EUl9ZVCB8IFJUQ19EUl9ZVSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRDX0RSX01UIHwgUlRDX0RSX01VIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVENfRFJfRFQgfCBSVENfRFJfRFUgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUQ19EUl9XRFUpKQorI2RlZmluZSBSVENfSVNSX1JFU0VSVkVEX01BU0sgICAoKHVpbnQzMl90KShSVENfRkxBR1NfTUFTSyB8IFJUQ19JU1JfSU5JVCkpCiAjZGVmaW5lIFJUQ19JTklUX01BU0sgICAgICAgICAgIDB4RkZGRkZGRkZVCi0jZGVmaW5lIFJUQ19SU0ZfTUFTSyAgICAgICAgICAgIDB4RkZGRkZGNUZVCi0jZGVmaW5lIFJUQ19GTEFHU19NQVNLICAgICAgICAgICgodWludDMyX3QpKFJUQ19GTEFHX1RTT1ZGIHwgUlRDX0ZMQUdfVFNGIHwgUlRDX0ZMQUdfV1VURiB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRDX0ZMQUdfQUxSQkYgfCBSVENfRkxBR19BTFJBRiB8IFJUQ19GTEFHX0lOSVRGIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVENfRkxBR19SU0YgfCBSVENfRkxBR19JTklUUyB8IFJUQ19GTEFHX1dVVFdGIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVENfRkxBR19BTFJCV0YgfCBSVENfRkxBR19BTFJBV0YgfCBSVENfRkxBR19UQU1QMUYpKQorI2RlZmluZSBSVENfUlNGX01BU0sgICAgICAgICAgICAoKHVpbnQzMl90KX4oUlRDX0lTUl9JTklUIHwgUlRDX0lTUl9SU0YpKQorI2RlZmluZSBSVENfRkxBR1NfTUFTSyAgICAgICAgICAoKHVpbnQzMl90KShSVENfRkxBR19JTklURiAgIHwgUlRDX0ZMQUdfSU5JVFMgIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVENfRkxBR19BTFJBRiAgIHwgUlRDX0ZMQUdfQUxSQVdGIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVENfRkxBR19BTFJCRiAgIHwgUlRDX0ZMQUdfQUxSQldGIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVENfRkxBR19XVVRGICAgIHwgUlRDX0ZMQUdfV1VUV0YgIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVENfRkxBR19UU0YgICAgIHwgUlRDX0ZMQUdfVFNPVkYgIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVENfRkxBR19SU0YgICAgIHwgUlRDX1RBTVBFUl9GTEFHU19NQVNLKSkKIAogI2RlZmluZSBSVENfVElNRU9VVF9WQUxVRSAgICAgICAxMDAwVQogCi0jZGVmaW5lIFJUQ19FWFRJX0xJTkVfQUxBUk1fRVZFTlQgICAgICAgICAgICAgKCh1aW50MzJfdClFWFRJX0lNUl9NUjE3KSAgLyohPCBFeHRlcm5hbCBpbnRlcnJ1cHQgbGluZSAxNyBDb25uZWN0ZWQgdG8gdGhlIFJUQyBBbGFybSBldmVudCAqLworI2RlZmluZSBSVENfRVhUSV9MSU5FX0FMQVJNX0VWRU5UICBFWFRJX0lNUl9NUjE3ICAvKiE8IEV4dGVybmFsIGludGVycnVwdCBsaW5lIDE3IENvbm5lY3RlZCB0byB0aGUgUlRDIEFsYXJtIGV2ZW50ICovCiAvKioKICAgKiBAfQogICAqLwogCiAvKiBQcml2YXRlIG1hY3JvcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCiAvKiogQGRlZmdyb3VwIFJUQ19Qcml2YXRlX01hY3JvcyBSVEMgUHJpdmF0ZSBNYWNyb3MKICAgKiBAewogICAqLwpAQCAtNzIwLDMxICs3NDIsNDIgQEAKICAgKi8KICNkZWZpbmUgSVNfUlRDX0hPVVJfRk9STUFUKEZPUk1BVCkgICAgICgoKEZPUk1BVCkgPT0gUlRDX0hPVVJGT1JNQVRfMTIpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZPUk1BVCkgPT0gUlRDX0hPVVJGT1JNQVRfMjQpKQorCiAjZGVmaW5lIElTX1JUQ19PVVRQVVQoT1VUUFVUKSAoKChPVVRQVVQpID09IFJUQ19PVVRQVVRfRElTQUJMRSkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoT1VUUFVUKSA9PSBSVENfT1VUUFVUX0FMQVJNQSkgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE9VVFBVVCkgPT0gUlRDX09VVFBVVF9BTEFSTUIpICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChPVVRQVVQpID09IFJUQ19PVVRQVVRfV0FLRVVQKSkKKwogI2RlZmluZSBJU19SVENfT1VUUFVUX1BPTChQT0wpICgoKFBPTCkgPT0gUlRDX09VVFBVVF9QT0xBUklUWV9ISUdIKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUE9MKSA9PSBSVENfT1VUUFVUX1BPTEFSSVRZX0xPVykpCisKICNkZWZpbmUgSVNfUlRDX09VVFBVVF9UWVBFKFRZUEUpICgoKFRZUEUpID09IFJUQ19PVVRQVVRfVFlQRV9PUEVORFJBSU4pIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRZUEUpID09IFJUQ19PVVRQVVRfVFlQRV9QVVNIUFVMTCkpCi0jZGVmaW5lIElTX1JUQ19IT1VSMTIoSE9VUikgICAgICAgICAgICAoKChIT1VSKSA+IDBVKSAmJiAoKEhPVVIpIDw9IDEyVSkpCi0jZGVmaW5lIElTX1JUQ19IT1VSMjQoSE9VUikgICAgICAgICAgICAoKEhPVVIpIDw9IDIzVSkKKwogI2RlZmluZSBJU19SVENfQVNZTkNIX1BSRURJVihQUkVESVYpICAgKChQUkVESVYpIDw9IDB4N0ZVKQogI2RlZmluZSBJU19SVENfU1lOQ0hfUFJFRElWKFBSRURJVikgICAgKChQUkVESVYpIDw9IDB4MUZGRlUpCisKKyNkZWZpbmUgSVNfUlRDX0hPVVIxMihIT1VSKSAgICAgICAgICAgICgoKEhPVVIpID4gMFUpICYmICgoSE9VUikgPD0gMTJVKSkKKyNkZWZpbmUgSVNfUlRDX0hPVVIyNChIT1VSKSAgICAgICAgICAgICgoSE9VUikgPD0gMjNVKQogI2RlZmluZSBJU19SVENfTUlOVVRFUyhNSU5VVEVTKSAgICAgICAgKChNSU5VVEVTKSA8PSA1OVUpCiAjZGVmaW5lIElTX1JUQ19TRUNPTkRTKFNFQ09ORFMpICAgICAgICAoKFNFQ09ORFMpIDw9IDU5VSkKIAotI2RlZmluZSBJU19SVENfSE9VUkZPUk1BVDEyKFBNKSAgKCgoUE0pID09IFJUQ19IT1VSRk9STUFUMTJfQU0pIHx8ICgoUE0pID09IFJUQ19IT1VSRk9STUFUMTJfUE0pKQorI2RlZmluZSBJU19SVENfSE9VUkZPUk1BVDEyKFBNKSAgKCgoUE0pID09IFJUQ19IT1VSRk9STUFUMTJfQU0pIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBNKSA9PSBSVENfSE9VUkZPUk1BVDEyX1BNKSkKKwogI2RlZmluZSBJU19SVENfREFZTElHSFRfU0FWSU5HKFNBVkUpICgoKFNBVkUpID09IFJUQ19EQVlMSUdIVFNBVklOR19TVUIxSCkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNBVkUpID09IFJUQ19EQVlMSUdIVFNBVklOR19BREQxSCkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNBVkUpID09IFJUQ19EQVlMSUdIVFNBVklOR19OT05FKSkKKwogI2RlZmluZSBJU19SVENfU1RPUkVfT1BFUkFUSU9OKE9QRVJBVElPTikgKCgoT1BFUkFUSU9OKSA9PSBSVENfU1RPUkVPUEVSQVRJT05fUkVTRVQpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE9QRVJBVElPTikgPT0gUlRDX1NUT1JFT1BFUkFUSU9OX1NFVCkpCisKICNkZWZpbmUgSVNfUlRDX0ZPUk1BVChGT1JNQVQpICgoKEZPUk1BVCkgPT0gUlRDX0ZPUk1BVF9CSU4pIHx8ICgoRk9STUFUKSA9PSBSVENfRk9STUFUX0JDRCkpCisKICNkZWZpbmUgSVNfUlRDX1lFQVIoWUVBUikgICAgICAgICAgICAgICgoWUVBUikgPD0gOTlVKQogI2RlZmluZSBJU19SVENfTU9OVEgoTU9OVEgpICAgICAgICAgICAgKCgoTU9OVEgpID49IDFVKSAmJiAoKE1PTlRIKSA8PSAxMlUpKQogI2RlZmluZSBJU19SVENfREFURShEQVRFKSAgICAgICAgICAgICAgKCgoREFURSkgPj0gMVUpICYmICgoREFURSkgPD0gMzFVKSkKKwogI2RlZmluZSBJU19SVENfV0VFS0RBWShXRUVLREFZKSAoKChXRUVLREFZKSA9PSBSVENfV0VFS0RBWV9NT05EQVkpICAgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoV0VFS0RBWSkgPT0gUlRDX1dFRUtEQVlfVFVFU0RBWSkgICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFdFRUtEQVkpID09IFJUQ19XRUVLREFZX1dFRE5FU0RBWSkgfHwgXApAQCAtNzUyLDcgKzc4NSw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFdFRUtEQVkpID09IFJUQ19XRUVLREFZX0ZSSURBWSkgICAgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChXRUVLREFZKSA9PSBSVENfV0VFS0RBWV9TQVRVUkRBWSkgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoV0VFS0RBWSkgPT0gUlRDX1dFRUtEQVlfU1VOREFZKSkKKwogI2RlZmluZSBJU19SVENfQUxBUk1fREFURV9XRUVLREFZX0RBVEUoREFURSkgKCgoREFURSkgPiAwVSkgJiYgKChEQVRFKSA8PSAzMVUpKQorCiAjZGVmaW5lIElTX1JUQ19BTEFSTV9EQVRFX1dFRUtEQVlfV0VFS0RBWShXRUVLREFZKSAoKChXRUVLREFZKSA9PSBSVENfV0VFS0RBWV9NT05EQVkpICAgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFdFRUtEQVkpID09IFJUQ19XRUVLREFZX1RVRVNEQVkpICAgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoV0VFS0RBWSkgPT0gUlRDX1dFRUtEQVlfV0VETkVTREFZKSB8fCBcCkBAIC03NjAsMTAgKzc5NSwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoV0VFS0RBWSkgPT0gUlRDX1dFRUtEQVlfRlJJREFZKSAgICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChXRUVLREFZKSA9PSBSVENfV0VFS0RBWV9TQVRVUkRBWSkgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFdFRUtEQVkpID09IFJUQ19XRUVLREFZX1NVTkRBWSkpCisKICNkZWZpbmUgSVNfUlRDX0FMQVJNX0RBVEVfV0VFS0RBWV9TRUwoU0VMKSAoKChTRUwpID09IFJUQ19BTEFSTURBVEVXRUVLREFZU0VMX0RBVEUpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTRUwpID09IFJUQ19BTEFSTURBVEVXRUVLREFZU0VMX1dFRUtEQVkpKQotI2RlZmluZSBJU19SVENfQUxBUk1fTUFTSyhNQVNLKSAgKCgoTUFTSykgJiAweDdGN0Y3RjdGVSkgPT0gKHVpbnQzMl90KVJFU0VUKQorCisjZGVmaW5lIElTX1JUQ19BTEFSTV9NQVNLKE1BU0spICAoKChNQVNLKSAmICgodWludDMyX3QpflJUQ19BTEFSTU1BU0tfQUxMKSkgPT0gMFUpCisKICNkZWZpbmUgSVNfUlRDX0FMQVJNKEFMQVJNKSAgICAgICgoKEFMQVJNKSA9PSBSVENfQUxBUk1fQSkgfHwgKChBTEFSTSkgPT0gUlRDX0FMQVJNX0IpKQorCiAvKioKICAgKiBAfQogICAqLwpAQCAtNzczLDEyICs4MTIsMTQgQEAKICAgKi8KIAogLyogUHJpdmF0ZSBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwogLyoqIEBkZWZncm91cCBSVENfUHJpdmF0ZV9GdW5jdGlvbnMgUlRDIFByaXZhdGUgRnVuY3Rpb25zCiAgICogQHsKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmICBSVENfRW50ZXJJbml0TW9kZShSVENfSGFuZGxlVHlwZURlZiAqaHJ0Yyk7Ci11aW50OF90ICAgICAgICAgICAgUlRDX0J5dGVUb0JjZDIodWludDhfdCBWYWx1ZSk7Ci11aW50OF90ICAgICAgICAgICAgUlRDX0JjZDJUb0J5dGUodWludDhfdCBWYWx1ZSk7CitIQUxfU3RhdHVzVHlwZURlZiAgUlRDX0V4aXRJbml0TW9kZShSVENfSGFuZGxlVHlwZURlZiAqaHJ0Yyk7Cit1aW50OF90ICAgICAgICAgICAgUlRDX0J5dGVUb0JjZDIodWludDhfdCBudW1iZXIpOwordWludDhfdCAgICAgICAgICAgIFJUQ19CY2QyVG9CeXRlKHVpbnQ4X3QgbnVtYmVyKTsKIC8qKgogICAqIEB9CiAgICovCkBAIC03OTUsNCArODM2LDQgQEAKIH0KICNlbmRpZgogCi0jZW5kaWYgLyogX19TVE0zMkYyeHhfSEFMX1JUQ19IICovCisjZW5kaWYgLyogU1RNMzJGMnh4X0hBTF9SVENfSCAqLwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjJ4eF9oYWxfcnRjX2V4LmggYi9JbmMvc3RtMzJmMnh4X2hhbF9ydGNfZXguaAppbmRleCA3YjZiMTliLi5iNzJjMjJmIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmMnh4X2hhbF9ydGNfZXguaAorKysgYi9JbmMvc3RtMzJmMnh4X2hhbF9ydGNfZXguaApAQCAtMiw3ICsyLDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGZpbGUgICAgc3RtMzJmMnh4X2hhbF9ydGNfZXguaAogICAqIEBhdXRob3IgIE1DRCBBcHBsaWNhdGlvbiBUZWFtCi0gICogQGJyaWVmICAgSGVhZGVyIGZpbGUgb2YgUlRDIEhBTCBFeHRlbnNpb24gbW9kdWxlLgorICAqIEBicmllZiAgIEhlYWRlciBmaWxlIG9mIFJUQyBIQUwgRXh0ZW5kZWQgbW9kdWxlLgogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKQEAgLTE3LDE0ICsxNywxNSBAQAogICAqLwogCiAvKiBEZWZpbmUgdG8gcHJldmVudCByZWN1cnNpdmUgaW5jbHVzaW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotI2lmbmRlZiBfX1NUTTMyRjJ4eF9IQUxfUlRDX0VYX0gKLSNkZWZpbmUgX19TVE0zMkYyeHhfSEFMX1JUQ19FWF9ICisjaWZuZGVmIFNUTTMyRjJ4eF9IQUxfUlRDX0VYX0gKKyNkZWZpbmUgU1RNMzJGMnh4X0hBTF9SVENfRVhfSAogCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKIC8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKICNpbmNsdWRlICJzdG0zMmYyeHhfaGFsX2RlZi5oIgogCiAvKiogQGFkZHRvZ3JvdXAgU1RNMzJGMnh4X0hBTF9Ecml2ZXIKQEAgLTM2LDMzICszNywzNiBAQAogICAqLwogCiAvKiBFeHBvcnRlZCB0eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyoqIEBkZWZncm91cCBSVENFeF9FeHBvcnRlZF9UeXBlcyBSVEMgRXhwb3J0ZWQgVHlwZXMKKworLyoqIEBkZWZncm91cCBSVENFeF9FeHBvcnRlZF9UeXBlcyBSVENFeCBFeHBvcnRlZCBUeXBlcwogICAqIEB7CiAgICovCiAKLS8qKiBAYnJpZWYgIFJUQyBUYW1wZXIgc3RydWN0dXJlIGRlZmluaXRpb24KKy8qKgorICAqIEBicmllZiAgUlRDIFRhbXBlciBzdHJ1Y3R1cmUgZGVmaW5pdGlvbgogICAqLwogdHlwZWRlZiBzdHJ1Y3QKIHsKICAgdWludDMyX3QgVGFtcGVyOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgVGFtcGVyIFBpbi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgIFJUQ0V4X1RhbXBlcl9QaW5zX0RlZmluaXRpb25zICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFJUQ0V4X1RhbXBlcl9QaW5fRGVmaW5pdGlvbnMgKi8KIAogICB1aW50MzJfdCBQaW5TZWxlY3Rpb247ICAgICAgICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBUYW1wZXIgUGluLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiAgUlRDRXhfVGFtcGVyX1BpbnNfU2VsZWN0aW9uICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFJUQ0V4X1RhbXBlcl9QaW5fU2VsZWN0aW9uICovCiAKICAgdWludDMyX3QgVHJpZ2dlcjsgICAgICAgICAgICAgICAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgVGFtcGVyIFRyaWdnZXIuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmICBSVENFeF9UYW1wZXJfVHJpZ2dlcl9EZWZpbml0aW9ucyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBSVENFeF9UYW1wZXJfVHJpZ2dlcl9EZWZpbml0aW9ucyAqLwogfSBSVENfVGFtcGVyVHlwZURlZjsKIC8qKgogICAqIEB9CiAgICovCiAKIC8qIEV4cG9ydGVkIGNvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiogQGRlZmdyb3VwIFJUQ0V4X0V4cG9ydGVkX0NvbnN0YW50cyBSVEMgRXhwb3J0ZWQgQ29uc3RhbnRzCisKKy8qKiBAZGVmZ3JvdXAgUlRDRXhfRXhwb3J0ZWRfQ29uc3RhbnRzIFJUQ0V4IEV4cG9ydGVkIENvbnN0YW50cwogICAqIEB7CiAgICovCiAKLS8qKiBAZGVmZ3JvdXAgUlRDRXhfQmFja3VwX1JlZ2lzdGVyc19EZWZpbml0aW9ucyBSVEMgQmFja3VwIFJlZ2lzdGVycyBEZWZpbml0aW9ucworLyoqIEBkZWZncm91cCBSVENFeF9CYWNrdXBfUmVnaXN0ZXJzX0RlZmluaXRpb25zIFJUQ0V4IEJhY2t1cCBSZWdpc3RlcnMgRGVmaW5pdGlvbnMKICAgKiBAewogICAqLwogI2RlZmluZSBSVENfQktQX0RSMCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMFUKQEAgLTg5LDE2ICs5MywyNSBAQAogICAqIEB9CiAgICovCiAKLS8qKiBAZGVmZ3JvdXAgUlRDRXhfVGltZV9TdGFtcF9FZGdlc19kZWZpbml0aW9ucyBSVEMgVGltZVN0YW1wIEVkZ2VzIERlZmluaXRpb25zCisvKiogQGRlZmdyb3VwIFJUQ0V4X1RpbWVzdGFtcF9FZGdlc19EZWZpbml0aW9ucyBSVENFeCBUaW1lc3RhbXAgRWRnZXMgRGVmaW5pdGlvbnMKICAgKiBAewogICAqLwogI2RlZmluZSBSVENfVElNRVNUQU1QRURHRV9SSVNJTkcgICAgICAgICAgMHgwMDAwMDAwMFUKLSNkZWZpbmUgUlRDX1RJTUVTVEFNUEVER0VfRkFMTElORyAgICAgICAgIDB4MDAwMDAwMDhVCisjZGVmaW5lIFJUQ19USU1FU1RBTVBFREdFX0ZBTExJTkcgICAgICAgICBSVENfQ1JfVFNFREdFCiAvKioKICAgKiBAfQogICAqLwogCi0vKiogQGRlZmdyb3VwIFJUQ0V4X1RhbXBlcl9QaW5zX0RlZmluaXRpb25zIFJUQyBUYW1wZXIgUGlucyBEZWZpbml0aW9ucworLyoqIEBkZWZncm91cCBSVENFeF9UaW1lc3RhbXBfUGluX1NlbGVjdGlvbiBSVEMgVGltZXN0YW1wIFBpbiBTZWxlY3Rpb24KKyAgKiBAeworICAqLworI2RlZmluZSBSVENfVElNRVNUQU1QUElOX0RFRkFVTFQgICAgICAgICAgICAweDAwMDAwMDAwVQorI2RlZmluZSBSVENfVElNRVNUQU1QUElOX1BPUzEgICAgICAgICAgICAgICBSVENfVEFGQ1JfVFNJTlNFTAorLyoqCisgICogQH0KKyAgKi8KKworLyoqIEBkZWZncm91cCBSVENFeF9UYW1wZXJfUGluX0RlZmluaXRpb25zIFJUQ0V4IFRhbXBlciBQaW5zIERlZmluaXRpb25zCiAgICogQHsKICAgKi8KICNkZWZpbmUgUlRDX1RBTVBFUl8xICAgICAgICAgICAgICAgICAgICBSVENfVEFGQ1JfVEFNUDFFCkBAIC0xMDYsNTQgKzExOSw1MCBAQAogICAqIEB9CiAgICovCiAKLS8qKiBAZGVmZ3JvdXAgUlRDRXhfVGFtcGVyX1BpbnNfU2VsZWN0aW9uIFJUQyB0YW1wZXIgUGlucyBTZWxlY3Rpb24KKy8qKiBAZGVmZ3JvdXAgUlRDRXhfVGFtcGVyX1Bpbl9TZWxlY3Rpb24gUlRDIHRhbXBlciBQaW5zIFNlbGVjdGlvbgogICAqIEB7CiAgICovCiAjZGVmaW5lIFJUQ19UQU1QRVJQSU5fREVGQVVMVCAgICAgICAgICAgICAgIDB4MDAwMDAwMDBVCi0jZGVmaW5lIFJUQ19UQU1QRVJQSU5fUE9TMSAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDBVCi0KKyNkZWZpbmUgUlRDX1RBTVBFUlBJTl9QT1MxICAgICAgICAgICAgICAgICAgUlRDX1RBRkNSX1RBTVAxSU5TRUwKIC8qKgogICAqIEB9CiAgICovCiAKLS8qKiBAZGVmZ3JvdXAgUlRDRXhfVGltZVN0YW1wX1Bpbl9TZWxlY3Rpb24gUlRDIFRpbWVTdGFtcCBQaW5zIFNlbGVjdGlvbgorLyoqIEBkZWZncm91cCBSVENFeF9UYW1wZXJfSW50ZXJydXB0X0RlZmluaXRpb25zIFJUQ0V4IFRhbXBlciBJbnRlcnJ1cHQgRGVmaW5pdGlvbnMKICAgKiBAewogICAqLwotI2RlZmluZSBSVENfVElNRVNUQU1QUElOX0RFRkFVTFQgICAgICAgICAgICAweDAwMDAwMDAwVQotI2RlZmluZSBSVENfVElNRVNUQU1QUElOX1BPUzEgICAgICAgICAgICAgICAweDAwMDIwMDAwVQotCisjZGVmaW5lIFJUQ19JVF9UQU1QICAgICAgICAgICAgICAgICAgICAgICBSVENfVEFGQ1JfVEFNUElFICAgLyohPCBFbmFibGUgZ2xvYmFsIFRhbXBlciBJbnRlcnJ1cHQgICAgICAgICAgICovCiAvKioKICAgKiBAfQogICAqLwogCi0vKiogQGRlZmdyb3VwIFJUQ0V4X1RhbXBlcl9UcmlnZ2VyX0RlZmluaXRpb25zIFJUQyBUYW1wZXIgVHJpZ2dlcnMgRGVmaW5pdGlvbnMKKy8qKiBAZGVmZ3JvdXAgUlRDRXhfVGFtcGVyX1RyaWdnZXJfRGVmaW5pdGlvbnMgUlRDRXggVGFtcGVyIFRyaWdnZXJzIERlZmluaXRpb25zCiAgICogQHsKICAgKi8KICNkZWZpbmUgUlRDX1RBTVBFUlRSSUdHRVJfUklTSU5HRURHRSAgICAgICAweDAwMDAwMDAwVQogI2RlZmluZSBSVENfVEFNUEVSVFJJR0dFUl9GQUxMSU5HRURHRSAgICAgIDB4MDAwMDAwMDJVCi0KIC8qKgogICAqIEB9CiAgICovCiAKLS8qKiBAZGVmZ3JvdXAgUlRDRXhfV2FrZXVwX1RpbWVyX0RlZmluaXRpb25zIFJUQyBXYWtlLXVwIFRpbWVyIERlZmluaXRpb25zCisvKiogQGRlZmdyb3VwIFJUQ0V4X1dha2V1cF9UaW1lcl9EZWZpbml0aW9ucyBSVENFeCBXYWtldXAgVGltZXIgRGVmaW5pdGlvbnMKICAgKiBAewogICAqLwogI2RlZmluZSBSVENfV0FLRVVQQ0xPQ0tfUlRDQ0xLX0RJVjE2ICAgICAgICAweDAwMDAwMDAwVQotI2RlZmluZSBSVENfV0FLRVVQQ0xPQ0tfUlRDQ0xLX0RJVjggICAgICAgICAweDAwMDAwMDAxVQotI2RlZmluZSBSVENfV0FLRVVQQ0xPQ0tfUlRDQ0xLX0RJVjQgICAgICAgICAweDAwMDAwMDAyVQotI2RlZmluZSBSVENfV0FLRVVQQ0xPQ0tfUlRDQ0xLX0RJVjIgICAgICAgICAweDAwMDAwMDAzVQotI2RlZmluZSBSVENfV0FLRVVQQ0xPQ0tfQ0tfU1BSRV8xNkJJVFMgICAgICAweDAwMDAwMDA0VQotI2RlZmluZSBSVENfV0FLRVVQQ0xPQ0tfQ0tfU1BSRV8xN0JJVFMgICAgICAweDAwMDAwMDA2VQorI2RlZmluZSBSVENfV0FLRVVQQ0xPQ0tfUlRDQ0xLX0RJVjggICAgICAgICBSVENfQ1JfV1VDS1NFTF8wCisjZGVmaW5lIFJUQ19XQUtFVVBDTE9DS19SVENDTEtfRElWNCAgICAgICAgIFJUQ19DUl9XVUNLU0VMXzEKKyNkZWZpbmUgUlRDX1dBS0VVUENMT0NLX1JUQ0NMS19ESVYyICAgICAgICAgKFJUQ19DUl9XVUNLU0VMXzAgfCBSVENfQ1JfV1VDS1NFTF8xKQorI2RlZmluZSBSVENfV0FLRVVQQ0xPQ0tfQ0tfU1BSRV8xNkJJVFMgICAgICBSVENfQ1JfV1VDS1NFTF8yCisjZGVmaW5lIFJUQ19XQUtFVVBDTE9DS19DS19TUFJFXzE3QklUUyAgICAgIChSVENfQ1JfV1VDS1NFTF8xIHwgUlRDX0NSX1dVQ0tTRUxfMikKIC8qKgogICAqIEB9CiAgICovCiAKLS8qKiBAZGVmZ3JvdXAgUlRDRXhfRGlnaXRhbF9DYWxpYnJhdGlvbl9EZWZpbml0aW9ucyBSVEMgRGlnaXRhbCBDYWxpYiBEZWZpbml0aW9ucworLyoqIEBkZWZncm91cCBSVENFeF9Db2Fyc2VfQ2FsaWJyYXRpb25fRGVmaW5pdGlvbnMgUlRDRXggQ29hcnNlIENhbGliIERlZmluaXRpb25zCiAgICogQHsKICAgKi8KICNkZWZpbmUgUlRDX0NBTElCU0lHTl9QT1NJVElWRSAgICAgICAgICAgIDB4MDAwMDAwMDBVCi0jZGVmaW5lIFJUQ19DQUxJQlNJR05fTkVHQVRJVkUgICAgICAgICAgICAweDAwMDAwMDgwVQorI2RlZmluZSBSVENfQ0FMSUJTSUdOX05FR0FUSVZFICAgICAgICAgICAgUlRDX0NBTElCUl9EQ1MKIC8qKgogICAqIEB9CiAgICovCkBAIC0xNjIsMTMgKzE3MSwxNSBAQAogICAqIEB9CiAgICovCiAKLS8qIEV4cG9ydGVkIG1hY3JvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiogQGRlZmdyb3VwIFJUQ0V4X0V4cG9ydGVkX01hY3JvcyBSVEMgRXhwb3J0ZWQgTWFjcm9zCisvKiBFeHBvcnRlZCBtYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiogQGRlZmdyb3VwIFJUQ0V4X0V4cG9ydGVkX01hY3JvcyBSVENFeCBFeHBvcnRlZCBNYWNyb3MKICAgKiBAewogICAqLwogCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1XQUtFVVBUSU1FUi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiogQGRlZmdyb3VwIFJUQ0V4X1dha2VVcF9UaW1lciBSVEMgV2FrZVVwIFRpbWVyCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1XQUtFVVBUSU1FUi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiogQGRlZmdyb3VwIFJUQ0V4X1dha2VVcF9UaW1lciBSVENFeCBXYWtlVXAgVGltZXIKICAgKiBAewogICAqLwogCkBAIC0xODAsMTUyICsxOTEsMTU0IEBACiAjZGVmaW5lIF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9FTkFCTEUoX19IQU5ETEVfXykgICAgICAgICAgICAgICAgICAgICAgKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNSIHw9IChSVENfQ1JfV1VURSkpCiAKIC8qKgotICAqIEBicmllZiAgRGlzYWJsZSB0aGUgUlRDIFdha2UtdXAgVGltZXIgcGVyaXBoZXJhbC4KKyAgKiBAYnJpZWYgIERpc2FibGUgdGhlIFJUQyBXYWtldXAgVGltZXIgcGVyaXBoZXJhbC4KICAgKiBAcGFyYW0gIF9fSEFORExFX18gc3BlY2lmaWVzIHRoZSBSVEMgaGFuZGxlLgogICAqIEByZXR2YWwgTm9uZQogICAqLwogI2RlZmluZSBfX0hBTF9SVENfV0FLRVVQVElNRVJfRElTQUJMRShfX0hBTkRMRV9fKSAgICAgICAgICAgICAgICAgICAgICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DUiAmPSB+KFJUQ19DUl9XVVRFKSkKIAogLyoqCi0gICogQGJyaWVmICBFbmFibGUgdGhlIFJUQyBXYWtlVXBUaW1lciBpbnRlcnJ1cHQuCisgICogQGJyaWVmICBFbmFibGUgdGhlIFJUQyBXYWtldXAgVGltZXIgaW50ZXJydXB0LgogICAqIEBwYXJhbSAgX19IQU5ETEVfXyBzcGVjaWZpZXMgdGhlIFJUQyBoYW5kbGUuCi0gICogQHBhcmFtICBfX0lOVEVSUlVQVF9fIHNwZWNpZmllcyB0aGUgUlRDIFdha2VVcFRpbWVyIGludGVycnVwdCBzb3VyY2VzIHRvIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQuCisgICogQHBhcmFtICBfX0lOVEVSUlVQVF9fIHNwZWNpZmllcyB0aGUgUlRDIFdha2V1cCBUaW1lciBpbnRlcnJ1cHQgc291cmNlcyB0byBiZSBlbmFibGVkIG9yIGRpc2FibGVkLgogICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOgotICAqICAgICAgICAgICAgQGFyZyBSVENfSVRfV1VUOiBXYWtlVXBUaW1lciBBIGludGVycnVwdAorICAqICAgICAgICAgICAgQGFyZyBSVENfSVRfV1VUOiBXYWtldXAgVGltZXIgaW50ZXJydXB0CiAgICogQHJldHZhbCBOb25lCiAgICovCiAjZGVmaW5lIF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9FTkFCTEVfSVQoX19IQU5ETEVfXywgX19JTlRFUlJVUFRfXykgICAgKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNSIHw9IChfX0lOVEVSUlVQVF9fKSkKIAogLyoqCi0gICogQGJyaWVmICBEaXNhYmxlIHRoZSBSVEMgV2FrZVVwVGltZXIgaW50ZXJydXB0LgorICAqIEBicmllZiAgRGlzYWJsZSB0aGUgUlRDIFdha2V1cCBUaW1lciBpbnRlcnJ1cHQuCiAgICogQHBhcmFtICBfX0hBTkRMRV9fIHNwZWNpZmllcyB0aGUgUlRDIGhhbmRsZS4KLSAgKiBAcGFyYW0gIF9fSU5URVJSVVBUX18gc3BlY2lmaWVzIHRoZSBSVEMgV2FrZVVwVGltZXIgaW50ZXJydXB0IHNvdXJjZXMgdG8gYmUgZW5hYmxlZCBvciBkaXNhYmxlZC4KKyAgKiBAcGFyYW0gIF9fSU5URVJSVVBUX18gc3BlY2lmaWVzIHRoZSBSVEMgV2FrZXVwIFRpbWVyIGludGVycnVwdCBzb3VyY2VzIHRvIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQuCiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6Ci0gICogICAgICAgICAgICBAYXJnIFJUQ19JVF9XVVQ6IFdha2VVcFRpbWVyIEEgaW50ZXJydXB0CisgICogICAgICAgICAgICBAYXJnIFJUQ19JVF9XVVQ6IFdha2V1cCBUaW1lciBpbnRlcnJ1cHQKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KICNkZWZpbmUgX19IQUxfUlRDX1dBS0VVUFRJTUVSX0RJU0FCTEVfSVQoX19IQU5ETEVfXywgX19JTlRFUlJVUFRfXykgICAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q1IgJj0gfihfX0lOVEVSUlVQVF9fKSkKIAogLyoqCi0gICogQGJyaWVmICBDaGVjayB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgUlRDIFdha2VVcFRpbWVyIGludGVycnVwdCBoYXMgb2NjdXJyZWQgb3Igbm90LgorICAqIEBicmllZiAgQ2hlY2sgd2hldGhlciB0aGUgc3BlY2lmaWVkIFJUQyBXYWtldXAgVGltZXIgaW50ZXJydXB0IGhhcyBvY2N1cnJlZCBvciBub3QuCiAgICogQHBhcmFtICBfX0hBTkRMRV9fIHNwZWNpZmllcyB0aGUgUlRDIGhhbmRsZS4KLSAgKiBAcGFyYW0gIF9fSU5URVJSVVBUX18gc3BlY2lmaWVzIHRoZSBSVEMgV2FrZVVwVGltZXIgaW50ZXJydXB0IHRvIGNoZWNrLgorICAqIEBwYXJhbSAgX19JTlRFUlJVUFRfXyBzcGVjaWZpZXMgdGhlIFJUQyBXYWtldXAgVGltZXIgaW50ZXJydXB0IHRvIGNoZWNrLgogICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOgotICAqICAgICAgICAgICAgQGFyZyBSVENfSVRfV1VUOiAgV2FrZVVwVGltZXIgQSBpbnRlcnJ1cHQKKyAgKiAgICAgICAgICAgIEBhcmcgUlRDX0lUX1dVVDogV2FrZXVwIFRpbWVyIGludGVycnVwdAogICAqIEByZXR2YWwgTm9uZQogICAqLwotI2RlZmluZSBfX0hBTF9SVENfV0FLRVVQVElNRVJfR0VUX0lUKF9fSEFORExFX18sIF9fSU5URVJSVVBUX18pICAgICAgICAgICAgKCgoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPklTUikgJiAoKF9fSU5URVJSVVBUX18pPj4gNFUpKSAhPSBSRVNFVCk/IFNFVCA6IFJFU0VUKQorI2RlZmluZSBfX0hBTF9SVENfV0FLRVVQVElNRVJfR0VUX0lUKF9fSEFORExFX18sIF9fSU5URVJSVVBUX18pICAgICAgICAgICgoKCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5JU1IpICYgKChfX0lOVEVSUlVQVF9fKSA+PiA0VSkpICE9IDBVKSA/IDFVIDogMFUpCiAKIC8qKgotICAqIEBicmllZiAgQ2hlY2sgd2hldGhlciB0aGUgc3BlY2lmaWVkIFJUQyBXYWtlIFVwIHRpbWVyIGludGVycnVwdCBoYXMgYmVlbiBlbmFibGVkIG9yIG5vdC4KKyAgKiBAYnJpZWYgIENoZWNrIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBSVEMgV2FrZXVwIHRpbWVyIGludGVycnVwdCBoYXMgYmVlbiBlbmFibGVkIG9yIG5vdC4KICAgKiBAcGFyYW0gIF9fSEFORExFX18gc3BlY2lmaWVzIHRoZSBSVEMgaGFuZGxlLgotICAqIEBwYXJhbSAgX19JTlRFUlJVUFRfXyBzcGVjaWZpZXMgdGhlIFJUQyBXYWtlIFVwIHRpbWVyIGludGVycnVwdCBzb3VyY2VzIHRvIGNoZWNrLgorICAqIEBwYXJhbSAgX19JTlRFUlJVUFRfXyBzcGVjaWZpZXMgdGhlIFJUQyBXYWtldXAgdGltZXIgaW50ZXJydXB0IHNvdXJjZXMgdG8gY2hlY2suCiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6Ci0gICogICAgICAgICAgICBAYXJnIFJUQ19JVF9XVVQ6ICBXYWtlVXBUaW1lciBpbnRlcnJ1cHQKKyAgKiAgICAgICAgICAgIEBhcmcgUlRDX0lUX1dVVDogV2FrZVVwVGltZXIgaW50ZXJydXB0CiAgICogQHJldHZhbCBOb25lCiAgICovCi0jZGVmaW5lIF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9HRVRfSVRfU09VUkNFKF9fSEFORExFX18sIF9fSU5URVJSVVBUX18pICAgKCgoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNSKSAmIChfX0lOVEVSUlVQVF9fKSkgIT0gUkVTRVQpID8gU0VUIDogUkVTRVQpCisjZGVmaW5lIF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9HRVRfSVRfU09VUkNFKF9fSEFORExFX18sIF9fSU5URVJSVVBUX18pICAgKCgoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNSKSAmIChfX0lOVEVSUlVQVF9fKSkgIT0gMFUpID8gMVUgOiAwVSkKIAogLyoqCi0gICogQGJyaWVmICBHZXQgdGhlIHNlbGVjdGVkIFJUQyBXYWtlVXBUaW1lcidzIGZsYWcgc3RhdHVzLgorICAqIEBicmllZiAgR2V0IHRoZSBzZWxlY3RlZCBSVEMgV2FrZXVwIFRpbWVyJ3MgZmxhZyBzdGF0dXMuCiAgICogQHBhcmFtICBfX0hBTkRMRV9fIHNwZWNpZmllcyB0aGUgUlRDIGhhbmRsZS4KLSAgKiBAcGFyYW0gIF9fRkxBR19fIHNwZWNpZmllcyB0aGUgUlRDIFdha2VVcFRpbWVyIEZsYWcgdG8gY2hlY2suCisgICogQHBhcmFtICBfX0ZMQUdfXyBzcGVjaWZpZXMgdGhlIFJUQyBXYWtldXAgVGltZXIgZmxhZyB0byBjaGVjay4KICAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6Ci0gICogICAgICAgICAgICAgQGFyZyBSVENfRkxBR19XVVRGCi0gICogICAgICAgICAgICAgQGFyZyBSVENfRkxBR19XVVRXRgorICAqICAgICAgICAgICAgIEBhcmcgUlRDX0ZMQUdfV1VURjogV2FrZXVwIFRpbWVyIGludGVycnVwdCBmbGFnCisgICogICAgICAgICAgICAgQGFyZyBSVENfRkxBR19XVVRXRjogV2FrZXVwIFRpbWVyICd3cml0ZSBhbGxvd2VkJyBmbGFnCiAgICogQHJldHZhbCBOb25lCiAgICovCi0jZGVmaW5lIF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9HRVRfRkxBRyhfX0hBTkRMRV9fLCBfX0ZMQUdfXykgICAgICAgICAgKCgoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPklTUikgJiAoX19GTEFHX18pKSAhPSBSRVNFVCk/IFNFVCA6IFJFU0VUKQorI2RlZmluZSBfX0hBTF9SVENfV0FLRVVQVElNRVJfR0VUX0ZMQUcoX19IQU5ETEVfXywgX19GTEFHX18pICAgICAgICAgICgoKCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5JU1IpICYgKF9fRkxBR19fKSkgIT0gMFUpPyAxVSA6IDBVKQogCiAvKioKLSAgKiBAYnJpZWYgIENsZWFyIHRoZSBSVEMgV2FrZSBVcCB0aW1lcidzIHBlbmRpbmcgZmxhZ3MuCisgICogQGJyaWVmICBDbGVhciB0aGUgUlRDIFdha2V1cCB0aW1lcidzIHBlbmRpbmcgZmxhZ3MuCiAgICogQHBhcmFtICBfX0hBTkRMRV9fIHNwZWNpZmllcyB0aGUgUlRDIGhhbmRsZS4KLSAgKiBAcGFyYW0gIF9fRkxBR19fIHNwZWNpZmllcyB0aGUgUlRDIFRhbXBlciBGbGFnIHNvdXJjZXMgdG8gYmUgZW5hYmxlZCBvciBkaXNhYmxlZC4KKyAgKiBAcGFyYW0gIF9fRkxBR19fIHNwZWNpZmllcyB0aGUgUlRDIFdha2V1cCBUaW1lciBGbGFnIHRvIGNsZWFyLgogICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOgotICAqICAgICAgICAgICAgQGFyZyBSVENfRkxBR19XVVRGCisgICogICAgICAgICAgICAgQGFyZyBSVENfRkxBR19XVVRGOiBXYWtldXAgVGltZXIgaW50ZXJydXB0IEZsYWcKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KICNkZWZpbmUgX19IQUxfUlRDX1dBS0VVUFRJTUVSX0NMRUFSX0ZMQUcoX19IQU5ETEVfXywgX19GTEFHX18pICAgICAgICAgICAgKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPklTUikgPSAofigoX19GTEFHX18pIHwgUlRDX0lTUl9JTklUKXwoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+SVNSICYgUlRDX0lTUl9JTklUKSkKIAogLyoqCi0gICogQGJyaWVmICBFbmFibGUgaW50ZXJydXB0IG9uIHRoZSBSVEMgV2FrZS11cCBUaW1lciBhc3NvY2lhdGVkIEV4dGkgbGluZS4KKyAgKiBAYnJpZWYgIEVuYWJsZSBpbnRlcnJ1cHQgb24gdGhlIFJUQyBXYWtldXAgVGltZXIgYXNzb2NpYXRlZCBFWFRJIGxpbmUuCiAgICogQHJldHZhbCBOb25lCiAgICovCiAjZGVmaW5lIF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9FWFRJX0VOQUJMRV9JVCgpICAgICAgIChFWFRJLT5JTVIgfD0gUlRDX0VYVElfTElORV9XQUtFVVBUSU1FUl9FVkVOVCkKIAogLyoqCi0gICogQGJyaWVmICBEaXNhYmxlIGludGVycnVwdCBvbiB0aGUgUlRDIFdha2UtdXAgVGltZXIgYXNzb2NpYXRlZCBFeHRpIGxpbmUuCisgICogQGJyaWVmICBEaXNhYmxlIGludGVycnVwdCBvbiB0aGUgUlRDIFdha2V1cCBUaW1lciBhc3NvY2lhdGVkIEVYVEkgbGluZS4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KLSNkZWZpbmUgX19IQUxfUlRDX1dBS0VVUFRJTUVSX0VYVElfRElTQUJMRV9JVCgpICAgICAgKEVYVEktPklNUiAmPSB+KFJUQ19FWFRJX0xJTkVfV0FLRVVQVElNRVJfRVZFTlQpKQorI2RlZmluZSBfX0hBTF9SVENfV0FLRVVQVElNRVJfRVhUSV9ESVNBQkxFX0lUKCkgICAgICAoRVhUSS0+SU1SICY9IH5SVENfRVhUSV9MSU5FX1dBS0VVUFRJTUVSX0VWRU5UKQogCiAvKioKLSAgKiBAYnJpZWYgIEVuYWJsZSBldmVudCBvbiB0aGUgUlRDIFdha2UtdXAgVGltZXIgYXNzb2NpYXRlZCBFeHRpIGxpbmUuCisgICogQGJyaWVmICBFbmFibGUgZXZlbnQgb24gdGhlIFJUQyBXYWtldXAgVGltZXIgYXNzb2NpYXRlZCBFWFRJIGxpbmUuCiAgICogQHJldHZhbCBOb25lLgogICAqLwogI2RlZmluZSBfX0hBTF9SVENfV0FLRVVQVElNRVJfRVhUSV9FTkFCTEVfRVZFTlQoKSAgICAoRVhUSS0+RU1SIHw9IFJUQ19FWFRJX0xJTkVfV0FLRVVQVElNRVJfRVZFTlQpCiAKIC8qKgotICAqIEBicmllZiAgRGlzYWJsZSBldmVudCBvbiB0aGUgUlRDIFdha2UtdXAgVGltZXIgYXNzb2NpYXRlZCBFeHRpIGxpbmUuCisgICogQGJyaWVmICBEaXNhYmxlIGV2ZW50IG9uIHRoZSBSVEMgV2FrZXVwIFRpbWVyIGFzc29jaWF0ZWQgRVhUSSBsaW5lLgogICAqIEByZXR2YWwgTm9uZS4KICAgKi8KLSNkZWZpbmUgX19IQUxfUlRDX1dBS0VVUFRJTUVSX0VYVElfRElTQUJMRV9FVkVOVCgpICAgKEVYVEktPkVNUiAmPSB+KFJUQ19FWFRJX0xJTkVfV0FLRVVQVElNRVJfRVZFTlQpKQorI2RlZmluZSBfX0hBTF9SVENfV0FLRVVQVElNRVJfRVhUSV9ESVNBQkxFX0VWRU5UKCkgICAoRVhUSS0+RU1SICY9IH5SVENfRVhUSV9MSU5FX1dBS0VVUFRJTUVSX0VWRU5UKQogCiAvKioKLSAgKiBAYnJpZWYgIEVuYWJsZSBmYWxsaW5nIGVkZ2UgdHJpZ2dlciBvbiB0aGUgUlRDIFdha2UtdXAgVGltZXIgYXNzb2NpYXRlZCBFeHRpIGxpbmUuCisgICogQGJyaWVmICBFbmFibGUgZmFsbGluZyBlZGdlIHRyaWdnZXIgb24gdGhlIFJUQyBXYWtldXAgVGltZXIgYXNzb2NpYXRlZCBFWFRJIGxpbmUuCiAgICogQHJldHZhbCBOb25lLgogICAqLwogI2RlZmluZSBfX0hBTF9SVENfV0FLRVVQVElNRVJfRVhUSV9FTkFCTEVfRkFMTElOR19FREdFKCkgICAoRVhUSS0+RlRTUiB8PSBSVENfRVhUSV9MSU5FX1dBS0VVUFRJTUVSX0VWRU5UKQogCiAvKioKLSAgKiBAYnJpZWYgIERpc2FibGUgZmFsbGluZyBlZGdlIHRyaWdnZXIgb24gdGhlIFJUQyBXYWtlLXVwIFRpbWVyIGFzc29jaWF0ZWQgRXh0aSBsaW5lLgorICAqIEBicmllZiAgRGlzYWJsZSBmYWxsaW5nIGVkZ2UgdHJpZ2dlciBvbiB0aGUgUlRDIFdha2V1cCBUaW1lciBhc3NvY2lhdGVkIEVYVEkgbGluZS4KICAgKiBAcmV0dmFsIE5vbmUuCiAgICovCi0jZGVmaW5lIF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9FWFRJX0RJU0FCTEVfRkFMTElOR19FREdFKCkgIChFWFRJLT5GVFNSICY9IH4oUlRDX0VYVElfTElORV9XQUtFVVBUSU1FUl9FVkVOVCkpCisjZGVmaW5lIF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9FWFRJX0RJU0FCTEVfRkFMTElOR19FREdFKCkgIChFWFRJLT5GVFNSICY9IH5SVENfRVhUSV9MSU5FX1dBS0VVUFRJTUVSX0VWRU5UKQogCiAvKioKLSAgKiBAYnJpZWYgIEVuYWJsZSByaXNpbmcgZWRnZSB0cmlnZ2VyIG9uIHRoZSBSVEMgV2FrZS11cCBUaW1lciBhc3NvY2lhdGVkIEV4dGkgbGluZS4KKyAgKiBAYnJpZWYgIEVuYWJsZSByaXNpbmcgZWRnZSB0cmlnZ2VyIG9uIHRoZSBSVEMgV2FrZXVwIFRpbWVyIGFzc29jaWF0ZWQgRVhUSSBsaW5lLgogICAqIEByZXR2YWwgTm9uZS4KICAgKi8KICNkZWZpbmUgX19IQUxfUlRDX1dBS0VVUFRJTUVSX0VYVElfRU5BQkxFX1JJU0lOR19FREdFKCkgICAgKEVYVEktPlJUU1IgfD0gUlRDX0VYVElfTElORV9XQUtFVVBUSU1FUl9FVkVOVCkKIAogLyoqCi0gICogQGJyaWVmICBEaXNhYmxlIHJpc2luZyBlZGdlIHRyaWdnZXIgb24gdGhlIFJUQyBXYWtlLXVwIFRpbWVyIGFzc29jaWF0ZWQgRXh0aSBsaW5lLgorICAqIEBicmllZiAgRGlzYWJsZSByaXNpbmcgZWRnZSB0cmlnZ2VyIG9uIHRoZSBSVEMgV2FrZXVwIFRpbWVyIGFzc29jaWF0ZWQgRVhUSSBsaW5lLgogICAqIEByZXR2YWwgTm9uZS4KICAgKi8KLSNkZWZpbmUgX19IQUxfUlRDX1dBS0VVUFRJTUVSX0VYVElfRElTQUJMRV9SSVNJTkdfRURHRSgpICAgKEVYVEktPlJUU1IgJj0gfihSVENfRVhUSV9MSU5FX1dBS0VVUFRJTUVSX0VWRU5UKSkKKyNkZWZpbmUgX19IQUxfUlRDX1dBS0VVUFRJTUVSX0VYVElfRElTQUJMRV9SSVNJTkdfRURHRSgpICAgKEVYVEktPlJUU1IgJj0gflJUQ19FWFRJX0xJTkVfV0FLRVVQVElNRVJfRVZFTlQpCiAKIC8qKgotICAqIEBicmllZiAgRW5hYmxlIHJpc2luZyAmIGZhbGxpbmcgZWRnZSB0cmlnZ2VyIG9uIHRoZSBSVEMgV2FrZS11cCBUaW1lciBhc3NvY2lhdGVkIEV4dGkgbGluZS4KKyAgKiBAYnJpZWYgIEVuYWJsZSByaXNpbmcgJiBmYWxsaW5nIGVkZ2UgdHJpZ2dlciBvbiB0aGUgUlRDIFdha2V1cCBUaW1lciBhc3NvY2lhdGVkIEVYVEkgbGluZS4KICAgKiBAcmV0dmFsIE5vbmUuCiAgICovCi0jZGVmaW5lIF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9FWFRJX0VOQUJMRV9SSVNJTkdfRkFMTElOR19FREdFKCkgZG97IF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9FWFRJX0VOQUJMRV9SSVNJTkdfRURHRSgpO1wKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19IQUxfUlRDX1dBS0VVUFRJTUVSX0VYVElfRU5BQkxFX0ZBTExJTkdfRURHRSgpO1wKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH13aGlsZSgwVSkKKyNkZWZpbmUgX19IQUxfUlRDX1dBS0VVUFRJTUVSX0VYVElfRU5BQkxFX1JJU0lOR19GQUxMSU5HX0VER0UoKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19IQUxfUlRDX1dBS0VVUFRJTUVSX0VYVElfRU5BQkxFX1JJU0lOR19FREdFKCk7ICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0hBTF9SVENfV0FLRVVQVElNRVJfRVhUSV9FTkFCTEVfRkFMTElOR19FREdFKCk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDBVKQogCiAvKioKLSAgKiBAYnJpZWYgIERpc2FibGUgcmlzaW5nICYgZmFsbGluZyBlZGdlIHRyaWdnZXIgb24gdGhlIFJUQyBXYWtlLXVwIFRpbWVyIGFzc29jaWF0ZWQgRXh0aSBsaW5lLgorICAqIEBicmllZiAgRGlzYWJsZSByaXNpbmcgJiBmYWxsaW5nIGVkZ2UgdHJpZ2dlciBvbiB0aGUgUlRDIFdha2V1cCBUaW1lciBhc3NvY2lhdGVkIEVYVEkgbGluZS4KICAgKiBUaGlzIHBhcmFtZXRlciBjYW4gYmU6CiAgICogQHJldHZhbCBOb25lLgogICAqLwotI2RlZmluZSBfX0hBTF9SVENfV0FLRVVQVElNRVJfRVhUSV9ESVNBQkxFX1JJU0lOR19GQUxMSU5HX0VER0UoKSBkb3sgX19IQUxfUlRDX1dBS0VVUFRJTUVSX0VYVElfRElTQUJMRV9SSVNJTkdfRURHRSgpO1wKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9FWFRJX0RJU0FCTEVfRkFMTElOR19FREdFKCk7XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH13aGlsZSgwVSkKKyNkZWZpbmUgX19IQUxfUlRDX1dBS0VVUFRJTUVSX0VYVElfRElTQUJMRV9SSVNJTkdfRkFMTElOR19FREdFKCkgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19IQUxfUlRDX1dBS0VVUFRJTUVSX0VYVElfRElTQUJMRV9SSVNJTkdfRURHRSgpOyAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9FWFRJX0RJU0FCTEVfRkFMTElOR19FREdFKCk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwVSkKIAogLyoqCi0gICogQGJyaWVmIENoZWNrIHdoZXRoZXIgdGhlIFJUQyBXYWtlLXVwIFRpbWVyIGFzc29jaWF0ZWQgRXh0aSBsaW5lIGludGVycnVwdCBmbGFnIGlzIHNldCBvciBub3QuCisgICogQGJyaWVmIENoZWNrIHdoZXRoZXIgdGhlIFJUQyBXYWtldXAgVGltZXIgYXNzb2NpYXRlZCBFWFRJIGxpbmUgaW50ZXJydXB0IGZsYWcgaXMgc2V0IG9yIG5vdC4KICAgKiBAcmV0dmFsIExpbmUgU3RhdHVzLgogICAqLwogI2RlZmluZSBfX0hBTF9SVENfV0FLRVVQVElNRVJfRVhUSV9HRVRfRkxBRygpICAgICAgICAgICAgICAoRVhUSS0+UFIgJiBSVENfRVhUSV9MSU5FX1dBS0VVUFRJTUVSX0VWRU5UKQogCiAvKioKLSAgKiBAYnJpZWYgQ2xlYXIgdGhlIFJUQyBXYWtlLXVwIFRpbWVyIGFzc29jaWF0ZWQgRXh0aSBsaW5lIGZsYWcuCisgICogQGJyaWVmIENsZWFyIHRoZSBSVEMgV2FrZXVwIFRpbWVyIGFzc29jaWF0ZWQgRVhUSSBsaW5lIGZsYWcuCiAgICogQHJldHZhbCBOb25lLgogICAqLwogI2RlZmluZSBfX0hBTF9SVENfV0FLRVVQVElNRVJfRVhUSV9DTEVBUl9GTEFHKCkgICAgICAgICAgICAoRVhUSS0+UFIgPSBSVENfRVhUSV9MSU5FX1dBS0VVUFRJTUVSX0VWRU5UKQogCiAvKioKLSAgKiBAYnJpZWYgR2VuZXJhdGUgYSBTb2Z0d2FyZSBpbnRlcnJ1cHQgb24gdGhlIFJUQyBXYWtlLXVwIFRpbWVyIGFzc29jaWF0ZWQgRXh0aSBsaW5lLgorICAqIEBicmllZiBHZW5lcmF0ZSBhIFNvZnR3YXJlIGludGVycnVwdCBvbiB0aGUgUlRDIFdha2V1cCBUaW1lciBhc3NvY2lhdGVkIEVYVEkgbGluZS4KICAgKiBAcmV0dmFsIE5vbmUuCiAgICovCiAjZGVmaW5lIF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9FWFRJX0dFTkVSQVRFX1NXSVQoKSAgICAgICAgIChFWFRJLT5TV0lFUiB8PSBSVENfRVhUSV9MSU5FX1dBS0VVUFRJTUVSX0VWRU5UKQpAQCAtMzM1LDI4ICszNDgsMjkgQEAKICAgKi8KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tVElNRVNUQU1QLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qKiBAZGVmZ3JvdXAgUlRDRXhfVGltZXN0YW1wIFJUQyBUaW1lc3RhbXAKKworLyoqIEBkZWZncm91cCBSVENFeF9UaW1lc3RhbXAgUlRDRXggVGltZXN0YW1wCiAgICogQHsKICAgKi8KIAogLyoqCi0gICogQGJyaWVmICBFbmFibGUgdGhlIFJUQyBUaW1lU3RhbXAgcGVyaXBoZXJhbC4KKyAgKiBAYnJpZWYgIEVuYWJsZSB0aGUgUlRDIFRpbWVzdGFtcCBwZXJpcGhlcmFsLgogICAqIEBwYXJhbSAgX19IQU5ETEVfXyBzcGVjaWZpZXMgdGhlIFJUQyBoYW5kbGUuCiAgICogQHJldHZhbCBOb25lCiAgICovCiAjZGVmaW5lIF9fSEFMX1JUQ19USU1FU1RBTVBfRU5BQkxFKF9fSEFORExFX18pICAgICAgICAgICAgICAgICAgICAgICAgKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNSIHw9IChSVENfQ1JfVFNFKSkKIAogLyoqCi0gICogQGJyaWVmICBEaXNhYmxlIHRoZSBSVEMgVGltZVN0YW1wIHBlcmlwaGVyYWwuCisgICogQGJyaWVmICBEaXNhYmxlIHRoZSBSVEMgVGltZXN0YW1wIHBlcmlwaGVyYWwuCiAgICogQHBhcmFtICBfX0hBTkRMRV9fIHNwZWNpZmllcyB0aGUgUlRDIGhhbmRsZS4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KICNkZWZpbmUgX19IQUxfUlRDX1RJTUVTVEFNUF9ESVNBQkxFKF9fSEFORExFX18pICAgICAgICAgICAgICAgICAgICAgICAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q1IgJj0gfihSVENfQ1JfVFNFKSkKIAogLyoqCi0gICogQGJyaWVmICBFbmFibGUgdGhlIFJUQyBUaW1lU3RhbXAgaW50ZXJydXB0LgorICAqIEBicmllZiAgRW5hYmxlIHRoZSBSVEMgVGltZXN0YW1wIGludGVycnVwdC4KICAgKiBAcGFyYW0gIF9fSEFORExFX18gc3BlY2lmaWVzIHRoZSBSVEMgaGFuZGxlLgotICAqIEBwYXJhbSAgX19JTlRFUlJVUFRfXyBzcGVjaWZpZXMgdGhlIFJUQyBUaW1lU3RhbXAgaW50ZXJydXB0IHNvdXJjZXMgdG8gYmUgZW5hYmxlZCBvciBkaXNhYmxlZC4KKyAgKiBAcGFyYW0gIF9fSU5URVJSVVBUX18gc3BlY2lmaWVzIHRoZSBSVEMgVGltZXN0YW1wIGludGVycnVwdCBzb3VyY2VzIHRvIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQuCiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6CiAgICogICAgICAgICAgICBAYXJnIFJUQ19JVF9UUzogVGltZVN0YW1wIGludGVycnVwdAogICAqIEByZXR2YWwgTm9uZQpAQCAtMzY0LDkgKzM3OCw5IEBACiAjZGVmaW5lIF9fSEFMX1JUQ19USU1FU1RBTVBfRU5BQkxFX0lUKF9fSEFORExFX18sIF9fSU5URVJSVVBUX18pICAgICAgKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNSIHw9IChfX0lOVEVSUlVQVF9fKSkKIAogLyoqCi0gICogQGJyaWVmICBEaXNhYmxlIHRoZSBSVEMgVGltZVN0YW1wIGludGVycnVwdC4KKyAgKiBAYnJpZWYgIERpc2FibGUgdGhlIFJUQyBUaW1lc3RhbXAgaW50ZXJydXB0LgogICAqIEBwYXJhbSAgX19IQU5ETEVfXyBzcGVjaWZpZXMgdGhlIFJUQyBoYW5kbGUuCi0gICogQHBhcmFtICBfX0lOVEVSUlVQVF9fIHNwZWNpZmllcyB0aGUgUlRDIFRpbWVTdGFtcCBpbnRlcnJ1cHQgc291cmNlcyB0byBiZSBlbmFibGVkIG9yIGRpc2FibGVkLgorICAqIEBwYXJhbSAgX19JTlRFUlJVUFRfXyBzcGVjaWZpZXMgdGhlIFJUQyBUaW1lc3RhbXAgaW50ZXJydXB0IHNvdXJjZXMgdG8gYmUgZW5hYmxlZCBvciBkaXNhYmxlZC4KICAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZToKICAgKiAgICAgICAgICAgIEBhcmcgUlRDX0lUX1RTOiBUaW1lU3RhbXAgaW50ZXJydXB0CiAgICogQHJldHZhbCBOb25lCkBAIC0zNzQsNDIgKzM4OCw0MyBAQAogI2RlZmluZSBfX0hBTF9SVENfVElNRVNUQU1QX0RJU0FCTEVfSVQoX19IQU5ETEVfXywgX19JTlRFUlJVUFRfXykgICAgICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DUiAmPSB+KF9fSU5URVJSVVBUX18pKQogCiAvKioKLSAgKiBAYnJpZWYgIENoZWNrIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBSVEMgVGltZVN0YW1wIGludGVycnVwdCBoYXMgb2NjdXJyZWQgb3Igbm90LgorICAqIEBicmllZiAgQ2hlY2sgd2hldGhlciB0aGUgc3BlY2lmaWVkIFJUQyBUaW1lc3RhbXAgaW50ZXJydXB0IGhhcyBvY2N1cnJlZCBvciBub3QuCiAgICogQHBhcmFtICBfX0hBTkRMRV9fIHNwZWNpZmllcyB0aGUgUlRDIGhhbmRsZS4KLSAgKiBAcGFyYW0gIF9fSU5URVJSVVBUX18gc3BlY2lmaWVzIHRoZSBSVEMgVGltZVN0YW1wIGludGVycnVwdCB0byBjaGVjay4KKyAgKiBAcGFyYW0gIF9fSU5URVJSVVBUX18gc3BlY2lmaWVzIHRoZSBSVEMgVGltZXN0YW1wIGludGVycnVwdCB0byBjaGVjay4KICAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZToKICAgKiAgICAgICAgICAgIEBhcmcgUlRDX0lUX1RTOiBUaW1lU3RhbXAgaW50ZXJydXB0CiAgICogQHJldHZhbCBOb25lCiAgICovCi0jZGVmaW5lIF9fSEFMX1JUQ19USU1FU1RBTVBfR0VUX0lUKF9fSEFORExFX18sIF9fSU5URVJSVVBUX18pICAgICAgICAgKCgoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPklTUikgJiAoKF9fSU5URVJSVVBUX18pPj4gNFUpKSAhPSBSRVNFVCk/IFNFVCA6IFJFU0VUKQorI2RlZmluZSBfX0hBTF9SVENfVElNRVNUQU1QX0dFVF9JVChfX0hBTkRMRV9fLCBfX0lOVEVSUlVQVF9fKSAgICAgICAgICgoKCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5JU1IpICYgKChfX0lOVEVSUlVQVF9fKSA+PiA0VSkpICE9IDBVKSA/IDFVIDogMFUpCiAKIC8qKgotICAqIEBicmllZiAgQ2hlY2sgd2hldGhlciB0aGUgc3BlY2lmaWVkIFJUQyBUaW1lIFN0YW1wIGludGVycnVwdCBoYXMgYmVlbiBlbmFibGVkIG9yIG5vdC4KKyAgKiBAYnJpZWYgIENoZWNrIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBSVEMgVGltZXN0YW1wIGludGVycnVwdCBoYXMgYmVlbiBlbmFibGVkIG9yIG5vdC4KICAgKiBAcGFyYW0gIF9fSEFORExFX18gc3BlY2lmaWVzIHRoZSBSVEMgaGFuZGxlLgotICAqIEBwYXJhbSAgX19JTlRFUlJVUFRfXyBzcGVjaWZpZXMgdGhlIFJUQyBUaW1lIFN0YW1wIGludGVycnVwdCBzb3VyY2UgdG8gY2hlY2suCisgICogQHBhcmFtICBfX0lOVEVSUlVQVF9fIHNwZWNpZmllcyB0aGUgUlRDIFRpbWVzdGFtcCBpbnRlcnJ1cHQgc291cmNlIHRvIGNoZWNrLgogICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOgogICAqICAgICAgICAgICAgQGFyZyBSVENfSVRfVFM6IFRpbWVTdGFtcCBpbnRlcnJ1cHQKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KLSNkZWZpbmUgX19IQUxfUlRDX1RJTUVTVEFNUF9HRVRfSVRfU09VUkNFKF9fSEFORExFX18sIF9fSU5URVJSVVBUX18pICAgICAoKCgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q1IpICYgKF9fSU5URVJSVVBUX18pKSAhPSBSRVNFVCkgPyBTRVQgOiBSRVNFVCkKKyNkZWZpbmUgX19IQUxfUlRDX1RJTUVTVEFNUF9HRVRfSVRfU09VUkNFKF9fSEFORExFX18sIF9fSU5URVJSVVBUX18pICAgICAoKCgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q1IpICYgKF9fSU5URVJSVVBUX18pKSAhPSAwVSkgPyAxVSA6IDBVKQogCiAvKioKLSAgKiBAYnJpZWYgIEdldCB0aGUgc2VsZWN0ZWQgUlRDIFRpbWVTdGFtcCdzIGZsYWcgc3RhdHVzLgorICAqIEBicmllZiAgR2V0IHRoZSBzZWxlY3RlZCBSVEMgVGltZXN0YW1wJ3MgZmxhZyBzdGF0dXMuCiAgICogQHBhcmFtICBfX0hBTkRMRV9fIHNwZWNpZmllcyB0aGUgUlRDIGhhbmRsZS4KLSAgKiBAcGFyYW0gIF9fRkxBR19fIHNwZWNpZmllcyB0aGUgUlRDIFRpbWVTdGFtcCBmbGFnIHRvIGNoZWNrLgorICAqIEBwYXJhbSAgX19GTEFHX18gc3BlY2lmaWVzIHRoZSBSVEMgVGltZXN0YW1wIGZsYWcgdG8gY2hlY2suCiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6Ci0gICogICAgICAgICAgICBAYXJnIFJUQ19GTEFHX1RTRgotICAqICAgICAgICAgICAgQGFyZyBSVENfRkxBR19UU09WRgorICAqICAgICAgICAgICAgQGFyZyBSVENfRkxBR19UU0Y6IFRpbWVzdGFtcCBpbnRlcnJ1cHQgZmxhZworICAqICAgICAgICAgICAgQGFyZyBSVENfRkxBR19UU09WRjogVGltZXN0YW1wIG92ZXJmbG93IGZsYWcKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KLSNkZWZpbmUgX19IQUxfUlRDX1RJTUVTVEFNUF9HRVRfRkxBRyhfX0hBTkRMRV9fLCBfX0ZMQUdfXykgICAgICAgICAgICAoKCgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+SVNSKSAmIChfX0ZMQUdfXykpICE9IFJFU0VUKT8gU0VUIDogUkVTRVQpCisjZGVmaW5lIF9fSEFMX1JUQ19USU1FU1RBTVBfR0VUX0ZMQUcoX19IQU5ETEVfXywgX19GTEFHX18pICAgICAgICAgICAgKCgoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPklTUikgJiAoX19GTEFHX18pKSAhPSAwVSk/IDFVIDogMFUpCiAKIC8qKgotICAqIEBicmllZiAgQ2xlYXIgdGhlIFJUQyBUaW1lIFN0YW1wJ3MgcGVuZGluZyBmbGFncy4KKyAgKiBAYnJpZWYgIENsZWFyIHRoZSBSVEMgVGltZXN0YW1wJ3MgcGVuZGluZyBmbGFncy4KICAgKiBAcGFyYW0gIF9fSEFORExFX18gc3BlY2lmaWVzIHRoZSBSVEMgaGFuZGxlLgotICAqIEBwYXJhbSAgX19GTEFHX18gc3BlY2lmaWVzIHRoZSBSVEMgQWxhcm0gRmxhZyBzb3VyY2VzIHRvIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQuCi0gICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOgotICAqICAgICAgICAgICAgIEBhcmcgUlRDX0ZMQUdfVFNGCisgICogQHBhcmFtICBfX0ZMQUdfXyBzcGVjaWZpZXMgdGhlIFJUQyBUaW1lc3RhbXAgZmxhZyB0byBjbGVhci4KKyAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZToKKyAgKiAgICAgICAgICAgIEBhcmcgUlRDX0ZMQUdfVFNGOiBUaW1lc3RhbXAgaW50ZXJydXB0IGZsYWcKKyAgKiAgICAgICAgICAgIEBhcmcgUlRDX0ZMQUdfVFNPVkY6IFRpbWVzdGFtcCBvdmVyZmxvdyBmbGFnCiAgICogQHJldHZhbCBOb25lCiAgICovCiAjZGVmaW5lIF9fSEFMX1JUQ19USU1FU1RBTVBfQ0xFQVJfRkxBRyhfX0hBTkRMRV9fLCBfX0ZMQUdfXykgICAgICAgICAgKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPklTUikgPSAofigoX19GTEFHX18pIHwgUlRDX0lTUl9JTklUKXwoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+SVNSICYgUlRDX0lTUl9JTklUKSkKQEAgLTQxOSw3ICs0MzQsOCBAQAogICAqLwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1UQU1QRVItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyoqIEBkZWZncm91cCBSVENFeF9UYW1wZXIgUlRDIFRhbXBlcgorCisvKiogQGRlZmdyb3VwIFJUQ0V4X1RhbXBlciBSVENFeCBUYW1wZXIKICAgKiBAewogICAqLwogCkBAIC00MzgsNDEgKzQ1NCw1MSBAQAogI2RlZmluZSBfX0hBTF9SVENfVEFNUEVSMV9ESVNBQkxFKF9fSEFORExFX18pICAgICAgICAgICAgICAgICAgICAgICAgKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPlRBRkNSICY9IH4oUlRDX1RBRkNSX1RBTVAxRSkpCiAKIC8qKgotICAqIEBicmllZiAgQ2hlY2sgd2hldGhlciB0aGUgc3BlY2lmaWVkIFJUQyBUYW1wZXIgaW50ZXJydXB0IGhhcyBvY2N1cnJlZCBvciBub3QuCisgICogQGJyaWVmICBFbmFibGUgdGhlIFJUQyBUYW1wZXIgaW50ZXJydXB0LgogICAqIEBwYXJhbSAgX19IQU5ETEVfXyBzcGVjaWZpZXMgdGhlIFJUQyBoYW5kbGUuCi0gICogQHBhcmFtICBfX0lOVEVSUlVQVF9fIHNwZWNpZmllcyB0aGUgUlRDIFRhbXBlciBpbnRlcnJ1cHQgdG8gY2hlY2suCi0gICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6Ci0gICogICAgICAgICAgICBAYXJnICBSVENfSVRfVEFNUDEKKyAgKiBAcGFyYW0gIF9fSU5URVJSVVBUX18gc3BlY2lmaWVzIHRoZSBSVEMgVGFtcGVyIGludGVycnVwdCBzb3VyY2VzIHRvIGJlIGVuYWJsZWQuCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgICAgIEBhcmcgUlRDX0lUX1RBTVA6IFRhbXBlciBnbG9iYWwgaW50ZXJydXB0CiAgICogQHJldHZhbCBOb25lCiAgICovCi0jZGVmaW5lIF9fSEFMX1JUQ19UQU1QRVJfR0VUX0lUKF9fSEFORExFX18sIF9fSU5URVJSVVBUX18pICAgICAgICgoKCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5JU1IpICYgKChfX0lOVEVSUlVQVF9fKT4+IDRVKSkgIT0gUkVTRVQpPyBTRVQgOiBSRVNFVCkKKyNkZWZpbmUgX19IQUxfUlRDX1RBTVBFUl9FTkFCTEVfSVQoX19IQU5ETEVfXywgX19JTlRFUlJVUFRfXykgICAgICAgICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5UQUZDUiB8PSAoX19JTlRFUlJVUFRfXykpCisKKy8qKgorICAqIEBicmllZiAgRGlzYWJsZSB0aGUgUlRDIFRhbXBlciBpbnRlcnJ1cHQuCisgICogQHBhcmFtICBfX0hBTkRMRV9fIHNwZWNpZmllcyB0aGUgUlRDIGhhbmRsZS4KKyAgKiBAcGFyYW0gIF9fSU5URVJSVVBUX18gc3BlY2lmaWVzIHRoZSBSVEMgVGFtcGVyIGludGVycnVwdCBzb3VyY2VzIHRvIGJlIGRpc2FibGVkLgorICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgICAgIEBhcmcgUlRDX0lUX1RBTVA6IFRhbXBlciBnbG9iYWwgaW50ZXJydXB0CisgICogQHJldHZhbCBOb25lCisgICovCisjZGVmaW5lIF9fSEFMX1JUQ19UQU1QRVJfRElTQUJMRV9JVChfX0hBTkRMRV9fLCBfX0lOVEVSUlVQVF9fKSAgICAgICAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+VEFGQ1IgJj0gfihfX0lOVEVSUlVQVF9fKSkKIAogLyoqCiAgICogQGJyaWVmICBDaGVjayB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgUlRDIFRhbXBlciBpbnRlcnJ1cHQgaGFzIGJlZW4gZW5hYmxlZCBvciBub3QuCiAgICogQHBhcmFtICBfX0hBTkRMRV9fIHNwZWNpZmllcyB0aGUgUlRDIGhhbmRsZS4KICAgKiBAcGFyYW0gIF9fSU5URVJSVVBUX18gc3BlY2lmaWVzIHRoZSBSVEMgVGFtcGVyIGludGVycnVwdCBzb3VyY2UgdG8gY2hlY2suCiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6Ci0gICogICAgICAgICAgICBAYXJnIFJUQ19JVF9UQU1QOiBUYW1wZXIgaW50ZXJydXB0CisgICogICAgICAgICAgICBAYXJnIFJUQ19JVF9UQU1QOiBUYW1wZXIgZ2xvYmFsIGludGVycnVwdAogICAqIEByZXR2YWwgTm9uZQogICAqLwotI2RlZmluZSBfX0hBTF9SVENfVEFNUEVSX0dFVF9JVF9TT1VSQ0UoX19IQU5ETEVfXywgX19JTlRFUlJVUFRfXykgICAgICgoKCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5UQUZDUikgJiAoX19JTlRFUlJVUFRfXykpICE9IFJFU0VUKSA/IFNFVCA6IFJFU0VUKQorI2RlZmluZSBfX0hBTF9SVENfVEFNUEVSX0dFVF9JVF9TT1VSQ0UoX19IQU5ETEVfXywgX19JTlRFUlJVUFRfXykgICAgICgoKCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5UQUZDUikgJiAoX19JTlRFUlJVUFRfXykpICE9IDBVKSA/IDFVIDogMFUpCiAKIC8qKgogICAqIEBicmllZiAgR2V0IHRoZSBzZWxlY3RlZCBSVEMgVGFtcGVyJ3MgZmxhZyBzdGF0dXMuCiAgICogQHBhcmFtICBfX0hBTkRMRV9fIHNwZWNpZmllcyB0aGUgUlRDIGhhbmRsZS4KLSAgKiBAcGFyYW0gIF9fRkxBR19fIHNwZWNpZmllcyB0aGUgUlRDIFRhbXBlciBGbGFnIHNvdXJjZXMgdG8gYmUgZW5hYmxlZCBvciBkaXNhYmxlZC4KKyAgKiBAcGFyYW0gIF9fRkxBR19fIHNwZWNpZmllcyB0aGUgUlRDIFRhbXBlciBmbGFnIHRvIGJlIGNoZWNrZWQuCiAgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOgotICAqICAgICAgICAgICAgIEBhcmcgUlRDX0ZMQUdfVEFNUDFGCisgICogICAgICAgICAgICAgQGFyZyBSVENfRkxBR19UQU1QMUY6IFRhbXBlciAxIGludGVycnVwdCBmbGFnCiAgICogQHJldHZhbCBOb25lCiAgICovCi0jZGVmaW5lIF9fSEFMX1JUQ19UQU1QRVJfR0VUX0ZMQUcoX19IQU5ETEVfXywgX19GTEFHX18pICAgICAgICAgICAgICAgKCgoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPklTUikgJiAoX19GTEFHX18pKSAhPSBSRVNFVCk/IFNFVCA6IFJFU0VUKQorI2RlZmluZSBfX0hBTF9SVENfVEFNUEVSX0dFVF9GTEFHKF9fSEFORExFX18sIF9fRkxBR19fKSAgICAgICAgICAgICAgICgoKCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5JU1IpICYgKF9fRkxBR19fKSkgIT0gMFUpPyAxVSA6IDBVKQogCiAvKioKICAgKiBAYnJpZWYgIENsZWFyIHRoZSBSVEMgVGFtcGVyJ3MgcGVuZGluZyBmbGFncy4KICAgKiBAcGFyYW0gIF9fSEFORExFX18gc3BlY2lmaWVzIHRoZSBSVEMgaGFuZGxlLgogICAqIEBwYXJhbSAgX19GTEFHX18gc3BlY2lmaWVzIHRoZSBSVEMgVGFtcGVyIEZsYWcgdG8gY2xlYXIuCiAgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOgotICAqICAgICAgICAgICAgIEBhcmcgUlRDX0ZMQUdfVEFNUDFGCisgICogICAgICAgICAgICAgQGFyZyBSVENfRkxBR19UQU1QMUY6IFRhbXBlciAxIGludGVycnVwdCBmbGFnCiAgICogQHJldHZhbCBOb25lCiAgICovCiAjZGVmaW5lIF9fSEFMX1JUQ19UQU1QRVJfQ0xFQVJfRkxBRyhfX0hBTkRMRV9fLCBfX0ZMQUdfXykgICAgICAgICAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+SVNSKSA9ICh+KChfX0ZMQUdfXykgfCBSVENfSVNSX0lOSVQpfCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5JU1IgJiBSVENfSVNSX0lOSVQpKQpAQCAtNDg2LDg0ICs1MTIsODYgQEAKICAgKi8KIAogLyoqCi0gICogQGJyaWVmICBFbmFibGUgaW50ZXJydXB0IG9uIHRoZSBSVEMgVGFtcGVyIGFuZCBUaW1lc3RhbXAgYXNzb2NpYXRlZCBFeHRpIGxpbmUuCisgICogQGJyaWVmICBFbmFibGUgaW50ZXJydXB0IG9uIHRoZSBSVEMgVGFtcGVyIGFuZCBUaW1lc3RhbXAgYXNzb2NpYXRlZCBFWFRJIGxpbmUuCiAgICogQHJldHZhbCBOb25lCiAgICovCiAjZGVmaW5lIF9fSEFMX1JUQ19UQU1QRVJfVElNRVNUQU1QX0VYVElfRU5BQkxFX0lUKCkgICAgICAgIChFWFRJLT5JTVIgfD0gUlRDX0VYVElfTElORV9UQU1QRVJfVElNRVNUQU1QX0VWRU5UKQogCiAvKioKLSAgKiBAYnJpZWYgIERpc2FibGUgaW50ZXJydXB0IG9uIHRoZSBSVEMgVGFtcGVyIGFuZCBUaW1lc3RhbXAgYXNzb2NpYXRlZCBFeHRpIGxpbmUuCisgICogQGJyaWVmICBEaXNhYmxlIGludGVycnVwdCBvbiB0aGUgUlRDIFRhbXBlciBhbmQgVGltZXN0YW1wIGFzc29jaWF0ZWQgRVhUSSBsaW5lLgogICAqIEByZXR2YWwgTm9uZQogICAqLwotI2RlZmluZSBfX0hBTF9SVENfVEFNUEVSX1RJTUVTVEFNUF9FWFRJX0RJU0FCTEVfSVQoKSAgICAgICAoRVhUSS0+SU1SICY9IH4oUlRDX0VYVElfTElORV9UQU1QRVJfVElNRVNUQU1QX0VWRU5UKSkKKyNkZWZpbmUgX19IQUxfUlRDX1RBTVBFUl9USU1FU1RBTVBfRVhUSV9ESVNBQkxFX0lUKCkgICAgICAgKEVYVEktPklNUiAmPSB+UlRDX0VYVElfTElORV9UQU1QRVJfVElNRVNUQU1QX0VWRU5UKQogCiAvKioKLSAgKiBAYnJpZWYgIEVuYWJsZSBldmVudCBvbiB0aGUgUlRDIFRhbXBlciBhbmQgVGltZXN0YW1wIGFzc29jaWF0ZWQgRXh0aSBsaW5lLgorICAqIEBicmllZiAgRW5hYmxlIGV2ZW50IG9uIHRoZSBSVEMgVGFtcGVyIGFuZCBUaW1lc3RhbXAgYXNzb2NpYXRlZCBFWFRJIGxpbmUuCiAgICogQHJldHZhbCBOb25lLgogICAqLwogI2RlZmluZSBfX0hBTF9SVENfVEFNUEVSX1RJTUVTVEFNUF9FWFRJX0VOQUJMRV9FVkVOVCgpICAgIChFWFRJLT5FTVIgfD0gUlRDX0VYVElfTElORV9UQU1QRVJfVElNRVNUQU1QX0VWRU5UKQogCiAvKioKLSAgKiBAYnJpZWYgIERpc2FibGUgZXZlbnQgb24gdGhlIFJUQyBUYW1wZXIgYW5kIFRpbWVzdGFtcCBhc3NvY2lhdGVkIEV4dGkgbGluZS4KKyAgKiBAYnJpZWYgIERpc2FibGUgZXZlbnQgb24gdGhlIFJUQyBUYW1wZXIgYW5kIFRpbWVzdGFtcCBhc3NvY2lhdGVkIEVYVEkgbGluZS4KICAgKiBAcmV0dmFsIE5vbmUuCiAgICovCi0jZGVmaW5lIF9fSEFMX1JUQ19UQU1QRVJfVElNRVNUQU1QX0VYVElfRElTQUJMRV9FVkVOVCgpICAgKEVYVEktPkVNUiAmPSB+KFJUQ19FWFRJX0xJTkVfVEFNUEVSX1RJTUVTVEFNUF9FVkVOVCkpCisjZGVmaW5lIF9fSEFMX1JUQ19UQU1QRVJfVElNRVNUQU1QX0VYVElfRElTQUJMRV9FVkVOVCgpICAgKEVYVEktPkVNUiAmPSB+UlRDX0VYVElfTElORV9UQU1QRVJfVElNRVNUQU1QX0VWRU5UKQogCiAvKioKLSAgKiBAYnJpZWYgIEVuYWJsZSBmYWxsaW5nIGVkZ2UgdHJpZ2dlciBvbiB0aGUgUlRDIFRhbXBlciBhbmQgVGltZXN0YW1wIGFzc29jaWF0ZWQgRXh0aSBsaW5lLgorICAqIEBicmllZiAgRW5hYmxlIGZhbGxpbmcgZWRnZSB0cmlnZ2VyIG9uIHRoZSBSVEMgVGFtcGVyIGFuZCBUaW1lc3RhbXAgYXNzb2NpYXRlZCBFWFRJIGxpbmUuCiAgICogQHJldHZhbCBOb25lLgogICAqLwogI2RlZmluZSBfX0hBTF9SVENfVEFNUEVSX1RJTUVTVEFNUF9FWFRJX0VOQUJMRV9GQUxMSU5HX0VER0UoKSAgIChFWFRJLT5GVFNSIHw9IFJUQ19FWFRJX0xJTkVfVEFNUEVSX1RJTUVTVEFNUF9FVkVOVCkKIAogLyoqCi0gICogQGJyaWVmICBEaXNhYmxlIGZhbGxpbmcgZWRnZSB0cmlnZ2VyIG9uIHRoZSBSVEMgVGFtcGVyIGFuZCBUaW1lc3RhbXAgYXNzb2NpYXRlZCBFeHRpIGxpbmUuCisgICogQGJyaWVmICBEaXNhYmxlIGZhbGxpbmcgZWRnZSB0cmlnZ2VyIG9uIHRoZSBSVEMgVGFtcGVyIGFuZCBUaW1lc3RhbXAgYXNzb2NpYXRlZCBFWFRJIGxpbmUuCiAgICogQHJldHZhbCBOb25lLgogICAqLwotI2RlZmluZSBfX0hBTF9SVENfVEFNUEVSX1RJTUVTVEFNUF9FWFRJX0RJU0FCTEVfRkFMTElOR19FREdFKCkgIChFWFRJLT5GVFNSICY9IH4oUlRDX0VYVElfTElORV9UQU1QRVJfVElNRVNUQU1QX0VWRU5UKSkKKyNkZWZpbmUgX19IQUxfUlRDX1RBTVBFUl9USU1FU1RBTVBfRVhUSV9ESVNBQkxFX0ZBTExJTkdfRURHRSgpICAoRVhUSS0+RlRTUiAmPSB+UlRDX0VYVElfTElORV9UQU1QRVJfVElNRVNUQU1QX0VWRU5UKQogCiAvKioKLSAgKiBAYnJpZWYgIEVuYWJsZSByaXNpbmcgZWRnZSB0cmlnZ2VyIG9uIHRoZSBSVEMgVGFtcGVyIGFuZCBUaW1lc3RhbXAgYXNzb2NpYXRlZCBFeHRpIGxpbmUuCisgICogQGJyaWVmICBFbmFibGUgcmlzaW5nIGVkZ2UgdHJpZ2dlciBvbiB0aGUgUlRDIFRhbXBlciBhbmQgVGltZXN0YW1wIGFzc29jaWF0ZWQgRVhUSSBsaW5lLgogICAqIEByZXR2YWwgTm9uZS4KICAgKi8KICNkZWZpbmUgX19IQUxfUlRDX1RBTVBFUl9USU1FU1RBTVBfRVhUSV9FTkFCTEVfUklTSU5HX0VER0UoKSAgICAoRVhUSS0+UlRTUiB8PSBSVENfRVhUSV9MSU5FX1RBTVBFUl9USU1FU1RBTVBfRVZFTlQpCiAKIC8qKgotICAqIEBicmllZiAgRGlzYWJsZSByaXNpbmcgZWRnZSB0cmlnZ2VyIG9uIHRoZSBSVEMgVGFtcGVyIGFuZCBUaW1lc3RhbXAgYXNzb2NpYXRlZCBFeHRpIGxpbmUuCisgICogQGJyaWVmICBEaXNhYmxlIHJpc2luZyBlZGdlIHRyaWdnZXIgb24gdGhlIFJUQyBUYW1wZXIgYW5kIFRpbWVzdGFtcCBhc3NvY2lhdGVkIEVYVEkgbGluZS4KICAgKiBAcmV0dmFsIE5vbmUuCiAgICovCi0jZGVmaW5lIF9fSEFMX1JUQ19UQU1QRVJfVElNRVNUQU1QX0VYVElfRElTQUJMRV9SSVNJTkdfRURHRSgpICAgKEVYVEktPlJUU1IgJj0gfihSVENfRVhUSV9MSU5FX1RBTVBFUl9USU1FU1RBTVBfRVZFTlQpKQorI2RlZmluZSBfX0hBTF9SVENfVEFNUEVSX1RJTUVTVEFNUF9FWFRJX0RJU0FCTEVfUklTSU5HX0VER0UoKSAgIChFWFRJLT5SVFNSICY9IH5SVENfRVhUSV9MSU5FX1RBTVBFUl9USU1FU1RBTVBfRVZFTlQpCiAKIC8qKgotICAqIEBicmllZiAgRW5hYmxlIHJpc2luZyAmIGZhbGxpbmcgZWRnZSB0cmlnZ2VyIG9uIHRoZSBSVEMgVGFtcGVyIGFuZCBUaW1lc3RhbXAgYXNzb2NpYXRlZCBFeHRpIGxpbmUuCisgICogQGJyaWVmICBFbmFibGUgcmlzaW5nICYgZmFsbGluZyBlZGdlIHRyaWdnZXIgb24gdGhlIFJUQyBUYW1wZXIgYW5kIFRpbWVzdGFtcCBhc3NvY2lhdGVkIEVYVEkgbGluZS4KICAgKiBAcmV0dmFsIE5vbmUuCiAgICovCi0jZGVmaW5lIF9fSEFMX1JUQ19UQU1QRVJfVElNRVNUQU1QX0VYVElfRU5BQkxFX1JJU0lOR19GQUxMSU5HX0VER0UoKSBkb3sgX19IQUxfUlRDX1RBTVBFUl9USU1FU1RBTVBfRVhUSV9FTkFCTEVfUklTSU5HX0VER0UoKTtcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19IQUxfUlRDX1RBTVBFUl9USU1FU1RBTVBfRVhUSV9FTkFCTEVfRkFMTElOR19FREdFKCk7XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9d2hpbGUoMFUpCisjZGVmaW5lIF9fSEFMX1JUQ19UQU1QRVJfVElNRVNUQU1QX0VYVElfRU5BQkxFX1JJU0lOR19GQUxMSU5HX0VER0UoKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSEFMX1JUQ19UQU1QRVJfVElNRVNUQU1QX0VYVElfRU5BQkxFX1JJU0lOR19FREdFKCk7ICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSEFMX1JUQ19UQU1QRVJfVElNRVNUQU1QX0VYVElfRU5BQkxFX0ZBTExJTkdfRURHRSgpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDBVKQogCiAvKioKLSAgKiBAYnJpZWYgIERpc2FibGUgcmlzaW5nICYgZmFsbGluZyBlZGdlIHRyaWdnZXIgb24gdGhlIFJUQyBUYW1wZXIgYW5kIFRpbWVzdGFtcCBhc3NvY2lhdGVkIEV4dGkgbGluZS4KKyAgKiBAYnJpZWYgIERpc2FibGUgcmlzaW5nICYgZmFsbGluZyBlZGdlIHRyaWdnZXIgb24gdGhlIFJUQyBUYW1wZXIgYW5kIFRpbWVzdGFtcCBhc3NvY2lhdGVkIEVYVEkgbGluZS4KICAgKiBUaGlzIHBhcmFtZXRlciBjYW4gYmU6CiAgICogQHJldHZhbCBOb25lLgogICAqLwotI2RlZmluZSBfX0hBTF9SVENfVEFNUEVSX1RJTUVTVEFNUF9FWFRJX0RJU0FCTEVfUklTSU5HX0ZBTExJTkdfRURHRSgpIGRveyBfX0hBTF9SVENfVEFNUEVSX1RJTUVTVEFNUF9FWFRJX0RJU0FCTEVfUklTSU5HX0VER0UoKTtcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSEFMX1JUQ19UQU1QRVJfVElNRVNUQU1QX0VYVElfRElTQUJMRV9GQUxMSU5HX0VER0UoKTtcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9d2hpbGUoMFUpCisjZGVmaW5lIF9fSEFMX1JUQ19UQU1QRVJfVElNRVNUQU1QX0VYVElfRElTQUJMRV9SSVNJTkdfRkFMTElOR19FREdFKCkgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSEFMX1JUQ19UQU1QRVJfVElNRVNUQU1QX0VYVElfRElTQUJMRV9SSVNJTkdfRURHRSgpOyAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19IQUxfUlRDX1RBTVBFUl9USU1FU1RBTVBfRVhUSV9ESVNBQkxFX0ZBTExJTkdfRURHRSgpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwVSkKIAogLyoqCi0gICogQGJyaWVmIENoZWNrIHdoZXRoZXIgdGhlIFJUQyBUYW1wZXIgYW5kIFRpbWVzdGFtcCBhc3NvY2lhdGVkIEV4dGkgbGluZSBpbnRlcnJ1cHQgZmxhZyBpcyBzZXQgb3Igbm90LgorICAqIEBicmllZiBDaGVjayB3aGV0aGVyIHRoZSBSVEMgVGFtcGVyIGFuZCBUaW1lc3RhbXAgYXNzb2NpYXRlZCBFWFRJIGxpbmUgaW50ZXJydXB0IGZsYWcgaXMgc2V0IG9yIG5vdC4KICAgKiBAcmV0dmFsIExpbmUgU3RhdHVzLgogICAqLwogI2RlZmluZSBfX0hBTF9SVENfVEFNUEVSX1RJTUVTVEFNUF9FWFRJX0dFVF9GTEFHKCkgICAgICAgICAoRVhUSS0+UFIgJiBSVENfRVhUSV9MSU5FX1RBTVBFUl9USU1FU1RBTVBfRVZFTlQpCiAKIC8qKgotICAqIEBicmllZiBDbGVhciB0aGUgUlRDIFRhbXBlciBhbmQgVGltZXN0YW1wIGFzc29jaWF0ZWQgRXh0aSBsaW5lIGZsYWcuCisgICogQGJyaWVmIENsZWFyIHRoZSBSVEMgVGFtcGVyIGFuZCBUaW1lc3RhbXAgYXNzb2NpYXRlZCBFWFRJIGxpbmUgZmxhZy4KICAgKiBAcmV0dmFsIE5vbmUuCiAgICovCiAjZGVmaW5lIF9fSEFMX1JUQ19UQU1QRVJfVElNRVNUQU1QX0VYVElfQ0xFQVJfRkxBRygpICAgICAgIChFWFRJLT5QUiA9IFJUQ19FWFRJX0xJTkVfVEFNUEVSX1RJTUVTVEFNUF9FVkVOVCkKIAogLyoqCi0gICogQGJyaWVmIEdlbmVyYXRlIGEgU29mdHdhcmUgaW50ZXJydXB0IG9uIHRoZSBSVEMgVGFtcGVyIGFuZCBUaW1lc3RhbXAgYXNzb2NpYXRlZCBFeHRpIGxpbmUKKyAgKiBAYnJpZWYgR2VuZXJhdGUgYSBTb2Z0d2FyZSBpbnRlcnJ1cHQgb24gdGhlIFJUQyBUYW1wZXIgYW5kIFRpbWVzdGFtcCBhc3NvY2lhdGVkIEVYVEkgbGluZQogICAqIEByZXR2YWwgTm9uZS4KICAgKi8KICNkZWZpbmUgX19IQUxfUlRDX1RBTVBFUl9USU1FU1RBTVBfRVhUSV9HRU5FUkFURV9TV0lUKCkgICAgKEVYVEktPlNXSUVSIHw9IFJUQ19FWFRJX0xJTkVfVEFNUEVSX1RJTUVTVEFNUF9FVkVOVCkKQEAgLTU3MSw4ICs1OTksOSBAQAogICAqIEB9CiAgICovCiAKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLUNhbGlicmF0aW9uLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiogQGRlZmdyb3VwIFJUQ0V4X0NhbGlicmF0aW9uIFJUQyBDYWxpYnJhdGlvbgorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tQ0FMSUJSQVRJT04tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoqIEBkZWZncm91cCBSVENFeF9DYWxpYnJhdGlvbiBSVENFeCBDYWxpYnJhdGlvbgogICAqIEB7CiAgICovCiAKQEAgLTYyMiwzMSArNjUxLDI4IEBACiAgICogQH0KICAgKi8KIAotLyoqCi0gICogQH0KLSAgKi8KLQogLyogRXhwb3J0ZWQgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qKiBAZGVmZ3JvdXAgUlRDRXhfRXhwb3J0ZWRfRnVuY3Rpb25zIFJUQyBFeHBvcnRlZCBGdW5jdGlvbnMKKworLyoqIEBkZWZncm91cCBSVENFeF9FeHBvcnRlZF9GdW5jdGlvbnMgUlRDRXggRXhwb3J0ZWQgRnVuY3Rpb25zCiAgICogQHsKICAgKi8KIAogLyoqIEBhZGR0b2dyb3VwIFJUQ0V4X0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDEKICAgKiBAewogICAqLwotLyogUlRDIFRpbWVTdGFtcCBhbmQgVGFtcGVyIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9SVENFeF9TZXRUaW1lU3RhbXAoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMsIHVpbnQzMl90IFRpbWVTdGFtcEVkZ2UsIHVpbnQzMl90IFJUQ19UaW1lU3RhbXBQaW4pOwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1JUQ0V4X1NldFRpbWVTdGFtcF9JVChSVENfSGFuZGxlVHlwZURlZiAqaHJ0YywgdWludDMyX3QgVGltZVN0YW1wRWRnZSwgdWludDMyX3QgUlRDX1RpbWVTdGFtcFBpbik7CisvKiBSVEMgVGltZXN0YW1wIGFuZCBUYW1wZXIgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1JUQ0V4X1NldFRpbWVTdGFtcChSVENfSGFuZGxlVHlwZURlZiAqaHJ0YywgdWludDMyX3QgUlRDX1RpbWVTdGFtcEVkZ2UsIHVpbnQzMl90IFJUQ19UaW1lU3RhbXBQaW4pOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1JUQ0V4X1NldFRpbWVTdGFtcF9JVChSVENfSGFuZGxlVHlwZURlZiAqaHJ0YywgdWludDMyX3QgUlRDX1RpbWVTdGFtcEVkZ2UsIHVpbnQzMl90IFJUQ19UaW1lU3RhbXBQaW4pOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1JUQ0V4X0RlYWN0aXZhdGVUaW1lU3RhbXAoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1JUQ0V4X0dldFRpbWVTdGFtcChSVENfSGFuZGxlVHlwZURlZiAqaHJ0YywgUlRDX1RpbWVUeXBlRGVmICpzVGltZVN0YW1wLCBSVENfRGF0ZVR5cGVEZWYgKnNUaW1lU3RhbXBEYXRlLCB1aW50MzJfdCBGb3JtYXQpOwogCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfUlRDRXhfU2V0VGFtcGVyKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjLCBSVENfVGFtcGVyVHlwZURlZiAqc1RhbXBlcik7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfUlRDRXhfU2V0VGFtcGVyX0lUKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjLCBSVENfVGFtcGVyVHlwZURlZiAqc1RhbXBlcik7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfUlRDRXhfRGVhY3RpdmF0ZVRhbXBlcihSVENfSGFuZGxlVHlwZURlZiAqaHJ0YywgdWludDMyX3QgVGFtcGVyKTsKLXZvaWQgSEFMX1JUQ0V4X1RhbXBlclRpbWVTdGFtcElSUUhhbmRsZXIoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpOwordm9pZCAgICAgICAgICAgICAgSEFMX1JUQ0V4X1RhbXBlclRpbWVTdGFtcElSUUhhbmRsZXIoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpOwogCi12b2lkIEhBTF9SVENFeF9UYW1wZXIxRXZlbnRDYWxsYmFjayhSVENfSGFuZGxlVHlwZURlZiAqaHJ0Yyk7Ci12b2lkIEhBTF9SVENFeF9UaW1lU3RhbXBFdmVudENhbGxiYWNrKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKTsKK3ZvaWQgICAgICAgICAgICAgIEhBTF9SVENFeF9UYW1wZXIxRXZlbnRDYWxsYmFjayhSVENfSGFuZGxlVHlwZURlZiAqaHJ0Yyk7Cit2b2lkICAgICAgICAgICAgICBIQUxfUlRDRXhfVGltZVN0YW1wRXZlbnRDYWxsYmFjayhSVENfSGFuZGxlVHlwZURlZiAqaHJ0Yyk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfUlRDRXhfUG9sbEZvclRpbWVTdGFtcEV2ZW50KFJUQ19IYW5kbGVUeXBlRGVmICpocnRjLCB1aW50MzJfdCBUaW1lb3V0KTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9SVENFeF9Qb2xsRm9yVGFtcGVyMUV2ZW50KFJUQ19IYW5kbGVUeXBlRGVmICpocnRjLCB1aW50MzJfdCBUaW1lb3V0KTsKIC8qKgpAQCAtNjU2LDEzICs2ODIsMTMgQEAKIC8qKiBAYWRkdG9ncm91cCBSVENFeF9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAyCiAgICogQHsKICAgKi8KLS8qIFJUQyBXYWtlLXVwIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBSVEMgV2FrZXVwIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfUlRDRXhfU2V0V2FrZVVwVGltZXIoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMsIHVpbnQzMl90IFdha2VVcENvdW50ZXIsIHVpbnQzMl90IFdha2VVcENsb2NrKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9SVENFeF9TZXRXYWtlVXBUaW1lcl9JVChSVENfSGFuZGxlVHlwZURlZiAqaHJ0YywgdWludDMyX3QgV2FrZVVwQ291bnRlciwgdWludDMyX3QgV2FrZVVwQ2xvY2spOwotdWludDMyX3QgSEFMX1JUQ0V4X0RlYWN0aXZhdGVXYWtlVXBUaW1lcihSVENfSGFuZGxlVHlwZURlZiAqaHJ0Yyk7Ci11aW50MzJfdCBIQUxfUlRDRXhfR2V0V2FrZVVwVGltZXIoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpOwotdm9pZCBIQUxfUlRDRXhfV2FrZVVwVGltZXJJUlFIYW5kbGVyKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKTsKLXZvaWQgSEFMX1JUQ0V4X1dha2VVcFRpbWVyRXZlbnRDYWxsYmFjayhSVENfSGFuZGxlVHlwZURlZiAqaHJ0Yyk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfUlRDRXhfRGVhY3RpdmF0ZVdha2VVcFRpbWVyKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKTsKK3VpbnQzMl90ICAgICAgICAgIEhBTF9SVENFeF9HZXRXYWtlVXBUaW1lcihSVENfSGFuZGxlVHlwZURlZiAqaHJ0Yyk7Cit2b2lkICAgICAgICAgICAgICBIQUxfUlRDRXhfV2FrZVVwVGltZXJJUlFIYW5kbGVyKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKTsKK3ZvaWQgICAgICAgICAgICAgIEhBTF9SVENFeF9XYWtlVXBUaW1lckV2ZW50Q2FsbGJhY2soUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1JUQ0V4X1BvbGxGb3JXYWtlVXBUaW1lckV2ZW50KFJUQ19IYW5kbGVUeXBlRGVmICpocnRjLCB1aW50MzJfdCBUaW1lb3V0KTsKIC8qKgogICAqIEB9CkBAIC02NzEsOSArNjk3LDkgQEAKIC8qKiBAYWRkdG9ncm91cCBSVENFeF9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAzCiAgICogQHsKICAgKi8KLS8qIEV4dGVuc2lvbiBDb250cm9sIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi12b2lkIEhBTF9SVENFeF9CS1VQV3JpdGUoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMsIHVpbnQzMl90IEJhY2t1cFJlZ2lzdGVyLCB1aW50MzJfdCBEYXRhKTsKLXVpbnQzMl90IEhBTF9SVENFeF9CS1VQUmVhZChSVENfSGFuZGxlVHlwZURlZiAqaHJ0YywgdWludDMyX3QgQmFja3VwUmVnaXN0ZXIpOworLyogRXh0ZW5kZWQgQ29udHJvbCBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCAgICAgICAgICAgICAgSEFMX1JUQ0V4X0JLVVBXcml0ZShSVENfSGFuZGxlVHlwZURlZiAqaHJ0YywgdWludDMyX3QgQmFja3VwUmVnaXN0ZXIsIHVpbnQzMl90IERhdGEpOwordWludDMyX3QgICAgICAgICAgSEFMX1JUQ0V4X0JLVVBSZWFkKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjLCB1aW50MzJfdCBCYWNrdXBSZWdpc3Rlcik7CiAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9SVENFeF9TZXRDb2Fyc2VDYWxpYihSVENfSGFuZGxlVHlwZURlZiAqaHJ0YywgdWludDMyX3QgQ2FsaWJTaWduLCB1aW50MzJfdCBWYWx1ZSk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfUlRDRXhfRGVhY3RpdmF0ZUNvYXJzZUNhbGliKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKTsKQEAgLTY4OCw3ICs3MTQsNyBAQAogLyoqIEBhZGR0b2dyb3VwIFJUQ0V4X0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDQKICAgKiBAewogICAqLwotLyogRXh0ZW5zaW9uIFJUQyBmZWF0dXJlcyBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEV4dGVuZGVkIFJUQyBmZWF0dXJlcyBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHZvaWQgSEFMX1JUQ0V4X0FsYXJtQkV2ZW50Q2FsbGJhY2soUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1JUQ0V4X1BvbGxGb3JBbGFybUJFdmVudChSVENfSGFuZGxlVHlwZURlZiAqaHJ0YywgdWludDMyX3QgVGltZW91dCk7CiAvKioKQEAgLTcwMiw1MyArNzI4LDUwIEBACiAvKiBQcml2YXRlIHR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogUHJpdmF0ZSB2YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgY29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiogQGRlZmdyb3VwIFJUQ0V4X1ByaXZhdGVfQ29uc3RhbnRzIFJUQyBQcml2YXRlIENvbnN0YW50cworCisvKiogQGRlZmdyb3VwIFJUQ0V4X1ByaXZhdGVfQ29uc3RhbnRzIFJUQ0V4IFByaXZhdGUgQ29uc3RhbnRzCiAgICogQHsKICAgKi8KLSNkZWZpbmUgUlRDX0VYVElfTElORV9UQU1QRVJfVElNRVNUQU1QX0VWRU5UICAoKHVpbnQzMl90KUVYVElfSU1SX01SMjEpICAvKiE8IEV4dGVybmFsIGludGVycnVwdCBsaW5lIDIxIENvbm5lY3RlZCB0byB0aGUgUlRDIFRhbXBlciBhbmQgVGltZSBTdGFtcCBldmVudHMgKi8KLSNkZWZpbmUgUlRDX0VYVElfTElORV9XQUtFVVBUSU1FUl9FVkVOVCAgICAgICAoKHVpbnQzMl90KUVYVElfSU1SX01SMjIpICAvKiE8IEV4dGVybmFsIGludGVycnVwdCBsaW5lIDIyIENvbm5lY3RlZCB0byB0aGUgUlRDIFdha2UtdXAgZXZlbnQgKi8KKyNkZWZpbmUgUlRDX0VYVElfTElORV9UQU1QRVJfVElNRVNUQU1QX0VWRU5UICBFWFRJX0lNUl9NUjIxICAvKiE8IEV4dGVybmFsIGludGVycnVwdCBsaW5lIDIxIENvbm5lY3RlZCB0byB0aGUgUlRDIFRhbXBlciBhbmQgVGltZXN0YW1wIGV2ZW50ICovCisjZGVmaW5lIFJUQ19FWFRJX0xJTkVfV0FLRVVQVElNRVJfRVZFTlQgICAgICAgRVhUSV9JTVJfTVIyMiAgLyohPCBFeHRlcm5hbCBpbnRlcnJ1cHQgbGluZSAyMiBDb25uZWN0ZWQgdG8gdGhlIFJUQyBXYWtldXAgZXZlbnQgKi8KKy8qKgorICAqIEB9CisgICovCisKKy8qKiBAZGVmZ3JvdXAgUlRDRXhfUHJpdmF0ZV9Db25zdGFudHMgUlRDRXggUHJpdmF0ZSBDb25zdGFudHMKKyAgKiBAeworICAqLworLyogTWFza3MgRGVmaW5pdGlvbiAqLworI2RlZmluZSBSVENfVEFNUEVSX0VOQUJMRV9CSVRTX01BU0sgICAgICAgICAgICAgICAgICAgICAgUlRDX1RBTVBFUl8xCisKKyNkZWZpbmUgUlRDX1RBTVBFUl9GTEFHU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUQ19GTEFHX1RBTVAxRgogLyoqCiAgICogQH0KICAgKi8KIAogLyogUHJpdmF0ZSBtYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qKiBAZGVmZ3JvdXAgUlRDRXhfUHJpdmF0ZV9NYWNyb3MgUlRDIFByaXZhdGUgTWFjcm9zCisKKy8qKiBAZGVmZ3JvdXAgUlRDRXhfUHJpdmF0ZV9NYWNyb3MgUlRDRXggUHJpdmF0ZSBNYWNyb3MKICAgKiBAewogICAqLwogCiAvKiogQGRlZmdyb3VwIFJUQ0V4X0lTX1JUQ19EZWZpbml0aW9ucyBQcml2YXRlIG1hY3JvcyB0byBjaGVjayBpbnB1dCBwYXJhbWV0ZXJzCiAgICogQHsKICAgKi8KLSNkZWZpbmUgSVNfUlRDX0JLUChCS1ApICAgICAgICAgICAgICAgICAgICgoKEJLUCkgPT0gUlRDX0JLUF9EUjApICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChCS1ApID09IFJUQ19CS1BfRFIxKSAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQktQKSA9PSBSVENfQktQX0RSMikgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEJLUCkgPT0gUlRDX0JLUF9EUjMpICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChCS1ApID09IFJUQ19CS1BfRFI0KSAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQktQKSA9PSBSVENfQktQX0RSNSkgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEJLUCkgPT0gUlRDX0JLUF9EUjYpICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChCS1ApID09IFJUQ19CS1BfRFI3KSAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQktQKSA9PSBSVENfQktQX0RSOCkgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEJLUCkgPT0gUlRDX0JLUF9EUjkpICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChCS1ApID09IFJUQ19CS1BfRFIxMCkgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQktQKSA9PSBSVENfQktQX0RSMTEpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEJLUCkgPT0gUlRDX0JLUF9EUjEyKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChCS1ApID09IFJUQ19CS1BfRFIxMykgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQktQKSA9PSBSVENfQktQX0RSMTQpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEJLUCkgPT0gUlRDX0JLUF9EUjE1KSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChCS1ApID09IFJUQ19CS1BfRFIxNikgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQktQKSA9PSBSVENfQktQX0RSMTcpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEJLUCkgPT0gUlRDX0JLUF9EUjE4KSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChCS1ApID09IFJUQ19CS1BfRFIxOSkpCisjZGVmaW5lIElTX1JUQ19CS1AoQktQKSAgICAgKChCS1ApIDwgKHVpbnQzMl90KSBSVENfQktQX05VTUJFUikKKwogI2RlZmluZSBJU19USU1FU1RBTVBfRURHRShFREdFKSAoKChFREdFKSA9PSBSVENfVElNRVNUQU1QRURHRV9SSVNJTkcpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRURHRSkgPT0gUlRDX1RJTUVTVEFNUEVER0VfRkFMTElORykpCiAKKyNkZWZpbmUgSVNfUlRDX1RBTVBFUihUQU1QRVIpICgoKChUQU1QRVIpICYgKCh1aW50MzJfdCl+UlRDX1RBTVBFUl9FTkFCTEVfQklUU19NQVNLKSkgPT0gMHgwMFUpICYmICgoVEFNUEVSKSAhPSAwVSkpCisKICNkZWZpbmUgSVNfUlRDX1RBTVBFUl9QSU4oUElOKSAoKChQSU4pID09IFJUQ19UQU1QRVJQSU5fREVGQVVMVCkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBJTikgPT0gUlRDX1RBTVBFUlBJTl9QT1MxKSkKIAogI2RlZmluZSBJU19SVENfVElNRVNUQU1QX1BJTihQSU4pICgoKFBJTikgPT0gUlRDX1RJTUVTVEFNUFBJTl9ERUZBVUxUKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUElOKSA9PSBSVENfVElNRVNUQU1QUElOX1BPUzEpKQogCi0jZGVmaW5lIElTX1JUQ19UQU1QRVJfVFJJR0dFUihUUklHR0VSKSAoKChUUklHR0VSKSA9PSBSVENfVEFNUEVSVFJJR0dFUl9SSVNJTkdFREdFKSB8fCBcCisjZGVmaW5lIElTX1JUQ19UQU1QRVJfVFJJR0dFUihUUklHR0VSKSAoKChUUklHR0VSKSA9PSBSVENfVEFNUEVSVFJJR0dFUl9SSVNJTkdFREdFKSAgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVFJJR0dFUikgPT0gUlRDX1RBTVBFUlRSSUdHRVJfRkFMTElOR0VER0UpKQogCiAjZGVmaW5lIElTX1JUQ19XQUtFVVBfQ0xPQ0soQ0xPQ0spICgoKENMT0NLKSA9PSBSVENfV0FLRVVQQ0xPQ0tfUlRDQ0xLX0RJVjE2KSAgIHx8IFwKQEAgLTc1OCwxMiArNzgxLDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKENMT0NLKSA9PSBSVENfV0FLRVVQQ0xPQ0tfQ0tfU1BSRV8xNkJJVFMpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQ0xPQ0spID09IFJUQ19XQUtFVVBDTE9DS19DS19TUFJFXzE3QklUUykpCiAKLSNkZWZpbmUgSVNfUlRDX1dBS0VVUF9DT1VOVEVSKENPVU5URVIpICAoKENPVU5URVIpIDw9IDB4RkZGRlUpCisjZGVmaW5lIElTX1JUQ19XQUtFVVBfQ09VTlRFUihDT1VOVEVSKSAgKChDT1VOVEVSKSA8PSBSVENfV1VUUl9XVVQpCisKICNkZWZpbmUgSVNfUlRDX0NBTElCX1NJR04oU0lHTikgKCgoU0lHTikgPT0gUlRDX0NBTElCU0lHTl9QT1NJVElWRSkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTSUdOKSA9PSBSVENfQ0FMSUJTSUdOX05FR0FUSVZFKSkKIAogI2RlZmluZSBJU19SVENfQ0FMSUJfVkFMVUUoVkFMVUUpICgoVkFMVUUpIDwgMHgyMFUpCi0jZGVmaW5lIElTX1JUQ19UQU1QRVIoVEFNUEVSKSAoKCgoVEFNUEVSKSAmICgodWludDMyX3QpfihSVENfVEFGQ1JfVEFNUDFFKSkpID09IDB4MDBVKSAmJiAoKFRBTVBFUikgIT0gKHVpbnQzMl90KVJFU0VUKSkKKwogLyoqCiAgICogQH0KICAgKi8KQEAgLTc4NCw0ICs4MDgsNCBAQAogfQogI2VuZGlmCiAKLSNlbmRpZiAvKiBfX1NUTTMyRjJ4eF9IQUxfUlRDX0VYX0ggKi8KKyNlbmRpZiAvKiBTVE0zMkYyeHhfSEFMX1JUQ19FWF9IICovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmMnh4X2hhbF9zZC5oIGIvSW5jL3N0bTMyZjJ4eF9oYWxfc2QuaAppbmRleCBkOTE2ODhjLi42ZTQ4MDdkIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmMnh4X2hhbF9zZC5oCisrKyBiL0luYy9zdG0zMmYyeHhfaGFsX3NkLmgKQEAgLTYsNyArNiw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIENvcHlyaWdodCAoYykgMjAxOCBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogQ29weXJpZ2h0IChjKSAyMDE2IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlCkBAIC0xNCw3ICsxNCw3IEBACiAgICogSWYgbm8gTElDRU5TRSBmaWxlIGNvbWVzIHdpdGggdGhpcyBzb2Z0d2FyZSwgaXQgaXMgcHJvdmlkZWQgQVMtSVMuCiAgICoKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICovCisgICovIAogCiAvKiBEZWZpbmUgdG8gcHJldmVudCByZWN1cnNpdmUgaW5jbHVzaW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogI2lmbmRlZiBTVE0zMkYyeHhfSEFMX1NEX0gKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYyeHhfaGFsX3NtYXJ0Y2FyZC5oIGIvSW5jL3N0bTMyZjJ4eF9oYWxfc21hcnRjYXJkLmgKaW5kZXggYTI2MGQwNy4uMmYzYmRiZSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjJ4eF9oYWxfc21hcnRjYXJkLmgKKysrIGIvSW5jL3N0bTMyZjJ4eF9oYWxfc21hcnRjYXJkLmgKQEAgLTc1MiwzICs3NTIsNCBAQAogI2VuZGlmCiAKICNlbmRpZiAvKiBfX1NUTTMyRjJ4eF9IQUxfU01BUlRDQVJEX0ggKi8KKwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjJ4eF9oYWxfc3BpLmggYi9JbmMvc3RtMzJmMnh4X2hhbF9zcGkuaAppbmRleCBlNjdiNzY5Li42ODUwM2U0IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmMnh4X2hhbF9zcGkuaAorKysgYi9JbmMvc3RtMzJmMnh4X2hhbF9zcGkuaApAQCAtNjU1LDcgKzY1NSw4IEBACiAKIC8qIENhbGxiYWNrcyBSZWdpc3Rlci9VblJlZ2lzdGVyIGZ1bmN0aW9ucyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWYgKFVTRV9IQUxfU1BJX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVSkKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TUElfUmVnaXN0ZXJDYWxsYmFjayhTUElfSGFuZGxlVHlwZURlZiAqaHNwaSwgSEFMX1NQSV9DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lELCBwU1BJX0NhbGxiYWNrVHlwZURlZiBwQ2FsbGJhY2spOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NQSV9SZWdpc3RlckNhbGxiYWNrKFNQSV9IYW5kbGVUeXBlRGVmICpoc3BpLCBIQUxfU1BJX0NhbGxiYWNrSURUeXBlRGVmIENhbGxiYWNrSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFNQSV9DYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TUElfVW5SZWdpc3RlckNhbGxiYWNrKFNQSV9IYW5kbGVUeXBlRGVmICpoc3BpLCBIQUxfU1BJX0NhbGxiYWNrSURUeXBlRGVmIENhbGxiYWNrSUQpOwogI2VuZGlmIC8qIFVTRV9IQUxfU1BJX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogLyoqCkBAIC03MjUsMyArNzI2LDQgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogU1RNMzJGMnh4X0hBTF9TUElfSCAqLworCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmMnh4X2hhbF9zcmFtLmggYi9JbmMvc3RtMzJmMnh4X2hhbF9zcmFtLmgKaW5kZXggZDQ0NGJiNC4uN2ZlNzAzNCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjJ4eF9oYWxfc3JhbS5oCisrKyBiL0luYy9zdG0zMmYyeHhfaGFsX3NyYW0uaApAQCAtMjA0LDcgKzIwNCw3IEBACiAgICovCiAKIC8qIFNSQU0gIFN0YXRlIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1IQUxfU1JBTV9TdGF0ZVR5cGVEZWYgSEFMX1NSQU1fR2V0U3RhdGUoU1JBTV9IYW5kbGVUeXBlRGVmICpoc3JhbSk7CitIQUxfU1JBTV9TdGF0ZVR5cGVEZWYgSEFMX1NSQU1fR2V0U3RhdGUoY29uc3QgU1JBTV9IYW5kbGVUeXBlRGVmICpoc3JhbSk7CiAKIC8qKgogICAqIEB9CmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmMnh4X2hhbF90aW0uaCBiL0luYy9zdG0zMmYyeHhfaGFsX3RpbS5oCmluZGV4IGZlNjcyY2MuLjFlYjEzYWMgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmYyeHhfaGFsX3RpbS5oCisrKyBiL0luYy9zdG0zMmYyeHhfaGFsX3RpbS5oCkBAIC03MDUsNiArNzA1LDE1IEBACiAgICogQH0KICAgKi8KIAorLyoqIEBkZWZncm91cCBUSU1fQ0NfRE1BX1JlcXVlc3QgQ0N4IERNQSByZXF1ZXN0IHNlbGVjdGlvbgorICAqIEB7CisgICovCisjZGVmaW5lIFRJTV9DQ0RNQVJFUVVFU1RfQ0MgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDBVICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0N4IERNQSByZXF1ZXN0IHNlbnQgd2hlbiBjYXB0dXJlIG9yIGNvbXBhcmUgbWF0Y2ggZXZlbnQgb2NjdXJzICovCisjZGVmaW5lIFRJTV9DQ0RNQVJFUVVFU1RfVVBEQVRFICAgICAgICAgICAgIFRJTV9DUjJfQ0NEUyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0N4IERNQSByZXF1ZXN0cyBzZW50IHdoZW4gdXBkYXRlIGV2ZW50IG9jY3VycyAqLworLyoqCisgICogQH0KKyAgKi8KKwogLyoqIEBkZWZncm91cCBUSU1fRmxhZ19kZWZpbml0aW9uIFRJTSBGbGFnIERlZmluaXRpb24KICAgKiBAewogICAqLwpAQCAtNzM5LDE2ICs3NDgsMTYgQEAKIC8qKiBAZGVmZ3JvdXAgVElNX0Nsb2NrX1NvdXJjZSBUSU0gQ2xvY2sgU291cmNlCiAgICogQHsKICAgKi8KLSNkZWZpbmUgVElNX0NMT0NLU09VUkNFX0VUUk1PREUyICAgIFRJTV9TTUNSX0VUUFNfMSAgICAgIC8qITwgRXh0ZXJuYWwgY2xvY2sgc291cmNlIG1vZGUgMiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgVElNX0NMT0NLU09VUkNFX0lOVEVSTkFMICAgIFRJTV9TTUNSX0VUUFNfMCAgICAgIC8qITwgSW50ZXJuYWwgY2xvY2sgc291cmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVElNX0NMT0NLU09VUkNFX0VUUk1PREUxICAgIFRJTV9UU19FVFJGICAgICAgICAgIC8qITwgRXh0ZXJuYWwgY2xvY2sgc291cmNlIG1vZGUgMSAoRVRSRikgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVElNX0NMT0NLU09VUkNFX0VUUk1PREUyICAgIFRJTV9TTUNSX0VUUFNfMSAgICAgIC8qITwgRXh0ZXJuYWwgY2xvY2sgc291cmNlIG1vZGUgMiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVElNX0NMT0NLU09VUkNFX1RJMUVEICAgICAgIFRJTV9UU19USTFGX0VEICAgICAgIC8qITwgRXh0ZXJuYWwgY2xvY2sgc291cmNlIG1vZGUgMSAoVFRJMUZQMSArIGVkZ2UgZGV0ZWN0LikgKi8KKyNkZWZpbmUgVElNX0NMT0NLU09VUkNFX1RJMSAgICAgICAgIFRJTV9UU19USTFGUDEgICAgICAgIC8qITwgRXh0ZXJuYWwgY2xvY2sgc291cmNlIG1vZGUgMSAoVFRJMUZQMSkgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVElNX0NMT0NLU09VUkNFX1RJMiAgICAgICAgIFRJTV9UU19USTJGUDIgICAgICAgIC8qITwgRXh0ZXJuYWwgY2xvY2sgc291cmNlIG1vZGUgMSAoVFRJMkZQMikgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgVElNX0NMT0NLU09VUkNFX0lUUjAgICAgICAgIFRJTV9UU19JVFIwICAgICAgICAgIC8qITwgRXh0ZXJuYWwgY2xvY2sgc291cmNlIG1vZGUgMSAoSVRSMCkgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgVElNX0NMT0NLU09VUkNFX0lUUjEgICAgICAgIFRJTV9UU19JVFIxICAgICAgICAgIC8qITwgRXh0ZXJuYWwgY2xvY2sgc291cmNlIG1vZGUgMSAoSVRSMSkgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgVElNX0NMT0NLU09VUkNFX0lUUjIgICAgICAgIFRJTV9UU19JVFIyICAgICAgICAgIC8qITwgRXh0ZXJuYWwgY2xvY2sgc291cmNlIG1vZGUgMSAoSVRSMikgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgVElNX0NMT0NLU09VUkNFX0lUUjMgICAgICAgIFRJTV9UU19JVFIzICAgICAgICAgIC8qITwgRXh0ZXJuYWwgY2xvY2sgc291cmNlIG1vZGUgMSAoSVRSMykgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgVElNX0NMT0NLU09VUkNFX1RJMUVEICAgICAgIFRJTV9UU19USTFGX0VEICAgICAgIC8qITwgRXh0ZXJuYWwgY2xvY2sgc291cmNlIG1vZGUgMSAoVFRJMUZQMSArIGVkZ2UgZGV0ZWN0LikgKi8KLSNkZWZpbmUgVElNX0NMT0NLU09VUkNFX1RJMSAgICAgICAgIFRJTV9UU19USTFGUDEgICAgICAgIC8qITwgRXh0ZXJuYWwgY2xvY2sgc291cmNlIG1vZGUgMSAoVFRJMUZQMSkgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgVElNX0NMT0NLU09VUkNFX1RJMiAgICAgICAgIFRJTV9UU19USTJGUDIgICAgICAgIC8qITwgRXh0ZXJuYWwgY2xvY2sgc291cmNlIG1vZGUgMSAoVFRJMkZQMikgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgVElNX0NMT0NLU09VUkNFX0VUUk1PREUxICAgIFRJTV9UU19FVFJGICAgICAgICAgIC8qITwgRXh0ZXJuYWwgY2xvY2sgc291cmNlIG1vZGUgMSAoRVRSRikgICAgICAgICAgICAgICAgICAgKi8KIC8qKgogICAqIEB9CiAgICovCkBAIC0xNTI2LDYgKzE1MzUsMTcgQEAKICAgICBUSU1fU0VUX0NBUFRVUkVQT0xBUklUWSgoX19IQU5ETEVfXyksIChfX0NIQU5ORUxfXyksIChfX1BPTEFSSVRZX18pKTsgXAogICB9d2hpbGUoMCkKIAorLyoqIEBicmllZiAgU2VsZWN0IHRoZSBDYXB0dXJlL2NvbXBhcmUgRE1BIHJlcXVlc3Qgc291cmNlLgorICAqIEBwYXJhbSAgX19IQU5ETEVfXyBzcGVjaWZpZXMgdGhlIFRJTSBIYW5kbGUuCisgICogQHBhcmFtICBfX0NDRE1BX18gc3BlY2lmaWVzIENhcHR1cmUvY29tcGFyZSBETUEgcmVxdWVzdCBzb3VyY2UKKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgICAgQGFyZyBUSU1fQ0NETUFSRVFVRVNUX0NDOiBDQ3ggRE1BIHJlcXVlc3QgZ2VuZXJhdGVkIG9uIENhcHR1cmUvQ29tcGFyZSBldmVudAorICAqICAgICAgICAgICAgQGFyZyBUSU1fQ0NETUFSRVFVRVNUX1VQREFURTogQ0N4IERNQSByZXF1ZXN0IGdlbmVyYXRlZCBvbiBVcGRhdGUgZXZlbnQKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KKyNkZWZpbmUgX19IQUxfVElNX1NFTEVDVF9DQ0RNQVJFUVVFU1QoX19IQU5ETEVfXywgX19DQ0RNQV9fKSAgICBcCisgIE1PRElGWV9SRUcoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q1IyLCBUSU1fQ1IyX0NDRFMsIChfX0NDRE1BX18pKQorCiAvKioKICAgKiBAfQogICAqLwpAQCAtMTYzNCwyMCArMTY1NCwyMyBAQAogI2RlZmluZSBJU19USU1fT1BNX0NIQU5ORUxTKF9fQ0hBTk5FTF9fKSAgICgoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8xKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzIpKQogCisjZGVmaW5lIElTX1RJTV9QRVJJT0QoX19IQU5ETEVfXywgX19QRVJJT0RfXykgXAorICAoKElTX1RJTV8zMkJfQ09VTlRFUl9JTlNUQU5DRSgoKF9fSEFORExFX18pLT5JbnN0YW5jZSkpID09IDBVKSA/ICgoKF9fUEVSSU9EX18pID4gMFUpICYmICgoX19QRVJJT0RfXykgPD0gMHgwMDAwRkZGRlUpKSA6ICgoX19QRVJJT0RfXykgPiAwVSkpCisKICNkZWZpbmUgSVNfVElNX0NPTVBMRU1FTlRBUllfQ0hBTk5FTFMoX19DSEFOTkVMX18pICgoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8xKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gVElNX0NIQU5ORUxfMikgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzMpKQogCiAjZGVmaW5lIElTX1RJTV9DTE9DS1NPVVJDRShfX0NMT0NLX18pICgoKF9fQ0xPQ0tfXykgPT0gVElNX0NMT0NLU09VUkNFX0lOVEVSTkFMKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0xPQ0tfXykgPT0gVElNX0NMT0NLU09VUkNFX0VUUk1PREUxKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0xPQ0tfXykgPT0gVElNX0NMT0NLU09VUkNFX0VUUk1PREUyKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0xPQ0tfXykgPT0gVElNX0NMT0NLU09VUkNFX0lUUjApICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0xPQ0tfXykgPT0gVElNX0NMT0NLU09VUkNFX0lUUjEpICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0xPQ0tfXykgPT0gVElNX0NMT0NLU09VUkNFX0lUUjIpICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0xPQ0tfXykgPT0gVElNX0NMT0NLU09VUkNFX0lUUjMpICAgICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0xPQ0tfXykgPT0gVElNX0NMT0NLU09VUkNFX1RJMUVEKSAgICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0xPQ0tfXykgPT0gVElNX0NMT0NLU09VUkNFX1RJMSkgICAgICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0xPQ0tfXykgPT0gVElNX0NMT0NLU09VUkNFX1RJMikgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0xPQ0tfXykgPT0gVElNX0NMT0NLU09VUkNFX0VUUk1PREUxKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DTE9DS19fKSA9PSBUSU1fQ0xPQ0tTT1VSQ0VfSVRSMCkgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DTE9DS19fKSA9PSBUSU1fQ0xPQ0tTT1VSQ0VfSVRSMSkgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DTE9DS19fKSA9PSBUSU1fQ0xPQ0tTT1VSQ0VfSVRSMikgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DTE9DS19fKSA9PSBUSU1fQ0xPQ0tTT1VSQ0VfSVRSMykpCiAKICNkZWZpbmUgSVNfVElNX0NMT0NLUE9MQVJJVFkoX19QT0xBUklUWV9fKSAoKChfX1BPTEFSSVRZX18pID09IFRJTV9DTE9DS1BPTEFSSVRZX0lOVkVSVEVEKSAgICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19QT0xBUklUWV9fKSA9PSBUSU1fQ0xPQ0tQT0xBUklUWV9OT05JTlZFUlRFRCkgfHwgXApAQCAtMTcyMywxMyArMTc0NiwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fTU9ERV9fKSA9PSBUSU1fT0NNT0RFX0ZPUkNFRF9BQ1RJVkUpICAgICAgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fTU9ERV9fKSA9PSBUSU1fT0NNT0RFX0ZPUkNFRF9JTkFDVElWRSkpCiAKLSNkZWZpbmUgSVNfVElNX1RSSUdHRVJfU0VMRUNUSU9OKF9fU0VMRUNUSU9OX18pICgoKF9fU0VMRUNUSU9OX18pID09IFRJTV9UU19JVFIwKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NFTEVDVElPTl9fKSA9PSBUSU1fVFNfSVRSMSkgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TRUxFQ1RJT05fXykgPT0gVElNX1RTX0lUUjIpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU0VMRUNUSU9OX18pID09IFRJTV9UU19JVFIzKSB8fCBcCisjZGVmaW5lIElTX1RJTV9UUklHR0VSX1NFTEVDVElPTihfX1NFTEVDVElPTl9fKSAoKChfX1NFTEVDVElPTl9fKSA9PSBUSU1fVFNfSVRSMCkgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TRUxFQ1RJT05fXykgPT0gVElNX1RTX0lUUjEpICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU0VMRUNUSU9OX18pID09IFRJTV9UU19JVFIyKSAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NFTEVDVElPTl9fKSA9PSBUSU1fVFNfSVRSMykgICAgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TRUxFQ1RJT05fXykgPT0gVElNX1RTX1RJMUZfRUQpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU0VMRUNUSU9OX18pID09IFRJTV9UU19USTFGUDEpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU0VMRUNUSU9OX18pID09IFRJTV9UU19USTJGUDIpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU0VMRUNUSU9OX18pID09IFRJTV9UU19USTFGUDEpICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NFTEVDVElPTl9fKSA9PSBUSU1fVFNfVEkyRlAyKSAgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TRUxFQ1RJT05fXykgPT0gVElNX1RTX0VUUkYpKQogCiAjZGVmaW5lIElTX1RJTV9JTlRFUk5BTF9UUklHR0VSRVZFTlRfU0VMRUNUSU9OKF9fU0VMRUNUSU9OX18pICgoKF9fU0VMRUNUSU9OX18pID09IFRJTV9UU19JVFIwKSB8fCBcCkBAIC0xODE4LDExICsxODQxLDExIEBACiAgICAoKF9fSEFORExFX18pLT5DaGFubmVsU3RhdGVbM10gPSAoX19DSEFOTkVMX1NUQVRFX18pKSkKIAogI2RlZmluZSBUSU1fQ0hBTk5FTF9TVEFURV9TRVRfQUxMKF9fSEFORExFX18sICBfX0NIQU5ORUxfU1RBVEVfXykgZG8geyBcCi0gIChfX0hBTkRMRV9fKS0+Q2hhbm5lbFN0YXRlWzBdICA9IChfX0NIQU5ORUxfU1RBVEVfXyk7ICBcCi0gIChfX0hBTkRMRV9fKS0+Q2hhbm5lbFN0YXRlWzFdICA9IChfX0NIQU5ORUxfU1RBVEVfXyk7ICBcCi0gIChfX0hBTkRMRV9fKS0+Q2hhbm5lbFN0YXRlWzJdICA9IChfX0NIQU5ORUxfU1RBVEVfXyk7ICBcCi0gIChfX0hBTkRMRV9fKS0+Q2hhbm5lbFN0YXRlWzNdICA9IChfX0NIQU5ORUxfU1RBVEVfXyk7ICBcCi0gfSB3aGlsZSgwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPkNoYW5uZWxTdGF0ZVswXSAgPSAoX19DSEFOTkVMX1NUQVRFX18pOyAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPkNoYW5uZWxTdGF0ZVsxXSAgPSAoX19DSEFOTkVMX1NUQVRFX18pOyAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPkNoYW5uZWxTdGF0ZVsyXSAgPSAoX19DSEFOTkVMX1NUQVRFX18pOyAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPkNoYW5uZWxTdGF0ZVszXSAgPSAoX19DSEFOTkVMX1NUQVRFX18pOyAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQogCiAjZGVmaW5lIFRJTV9DSEFOTkVMX05fU1RBVEVfR0VUKF9fSEFORExFX18sIF9fQ0hBTk5FTF9fKVwKICAgKCgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzEpID8gKF9fSEFORExFX18pLT5DaGFubmVsTlN0YXRlWzBdIDpcCkBAIC0xODM3LDE1ICsxODYwLDE1IEBACiAgICAoKF9fSEFORExFX18pLT5DaGFubmVsTlN0YXRlWzNdID0gKF9fQ0hBTk5FTF9TVEFURV9fKSkpCiAKICNkZWZpbmUgVElNX0NIQU5ORUxfTl9TVEFURV9TRVRfQUxMKF9fSEFORExFX18sICBfX0NIQU5ORUxfU1RBVEVfXykgZG8geyBcCi0gIChfX0hBTkRMRV9fKS0+Q2hhbm5lbE5TdGF0ZVswXSA9IFwKLSAgKF9fQ0hBTk5FTF9TVEFURV9fKTsgIFwKLSAgKF9fSEFORExFX18pLT5DaGFubmVsTlN0YXRlWzFdID0gXAotICAoX19DSEFOTkVMX1NUQVRFX18pOyAgXAotICAoX19IQU5ETEVfXyktPkNoYW5uZWxOU3RhdGVbMl0gPSBcCi0gIChfX0NIQU5ORUxfU1RBVEVfXyk7ICBcCi0gIChfX0hBTkRMRV9fKS0+Q2hhbm5lbE5TdGF0ZVszXSA9IFwKLSAgKF9fQ0hBTk5FTF9TVEFURV9fKTsgIFwKLSB9IHdoaWxlKDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5DaGFubmVsTlN0YXRlWzBdID0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0NIQU5ORUxfU1RBVEVfXyk7ICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5DaGFubmVsTlN0YXRlWzFdID0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0NIQU5ORUxfU1RBVEVfXyk7ICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5DaGFubmVsTlN0YXRlWzJdID0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0NIQU5ORUxfU1RBVEVfXyk7ICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5DaGFubmVsTlN0YXRlWzNdID0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0NIQU5ORUxfU1RBVEVfXyk7ICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKIAogLyoqCiAgICogQH0KQEAgLTE5NzQsNyArMTk5Nyw3IEBACiAgICogQHsKICAgKi8KIC8qIFRpbWVyIEVuY29kZXIgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX0VuY29kZXJfSW5pdChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgIFRJTV9FbmNvZGVyX0luaXRUeXBlRGVmICpzQ29uZmlnKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fRW5jb2Rlcl9Jbml0KFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCBjb25zdCBUSU1fRW5jb2Rlcl9Jbml0VHlwZURlZiAqc0NvbmZpZyk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX0VuY29kZXJfRGVJbml0KFRJTV9IYW5kbGVUeXBlRGVmICpodGltKTsKIHZvaWQgSEFMX1RJTV9FbmNvZGVyX01zcEluaXQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0pOwogdm9pZCBIQUxfVElNX0VuY29kZXJfTXNwRGVJbml0KFRJTV9IYW5kbGVUeXBlRGVmICpodGltKTsKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYyeHhfaGFsX3RpbV9leC5oIGIvSW5jL3N0bTMyZjJ4eF9oYWxfdGltX2V4LmgKaW5kZXggYTQ1MjJmYS4uMjIyNTQ5ZCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjJ4eF9oYWxfdGltX2V4LmgKKysrIGIvSW5jL3N0bTMyZjJ4eF9oYWxfdGltX2V4LmgKQEAgLTI1Nyw3ICsyNTcsNyBAQAogLyogRW5kIG9mIGV4cG9ydGVkIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyogUHJpdmF0ZSBmdW5jdGlvbnMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qKiBAYWRkdG9ncm91cCBUSU1FeF9Qcml2YXRlX0Z1bmN0aW9ucyBUSU1FeCBQcml2YXRlIEZ1bmN0aW9ucworLyoqIEBhZGR0b2dyb3VwIFRJTUV4X1ByaXZhdGVfRnVuY3Rpb25zIFRJTSBFeHRlbmRlZCBQcml2YXRlIEZ1bmN0aW9ucwogICAqIEB7CiAgICovCiB2b2lkIFRJTUV4X0RNQUNvbW11dGF0aW9uQ3BsdChETUFfSGFuZGxlVHlwZURlZiAqaGRtYSk7CmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmMnh4X2hhbF91YXJ0LmggYi9JbmMvc3RtMzJmMnh4X2hhbF91YXJ0LmgKaW5kZXggMmMyZjg0ZC4uYTRlNzljNiAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjJ4eF9oYWxfdWFydC5oCisrKyBiL0luYy9zdG0zMmYyeHhfaGFsX3VhcnQuaApAQCAtMTYzLDcgKzE2Myw3IEBACiAKICAgVUFSVF9Jbml0VHlwZURlZiAgICAgICAgICAgICAgSW5pdDsgICAgICAgICAgICAgLyohPCBVQVJUIGNvbW11bmljYXRpb24gcGFyYW1ldGVycyAgICAgICovCiAKLSAgdWludDhfdCAgICAgICAgICAgICAgICAgICAgICAgKnBUeEJ1ZmZQdHI7ICAgICAgLyohPCBQb2ludGVyIHRvIFVBUlQgVHggdHJhbnNmZXIgQnVmZmVyICovCisgIGNvbnN0IHVpbnQ4X3QgICAgICAgICAgICAgICAgICpwVHhCdWZmUHRyOyAgICAgIC8qITwgUG9pbnRlciB0byBVQVJUIFR4IHRyYW5zZmVyIEJ1ZmZlciAqLwogCiAgIHVpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgIFR4WGZlclNpemU7ICAgICAgIC8qITwgVUFSVCBUeCBUcmFuc2ZlciBzaXplICAgICAgICAgICAgICAqLwogCkBAIC05MDYsMyArOTA2LDQgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogX19TVE0zMkYyeHhfSEFMX1VBUlRfSCAqLworCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmMnh4X2hhbF91c2FydC5oIGIvSW5jL3N0bTMyZjJ4eF9oYWxfdXNhcnQuaAppbmRleCBkYjI5Y2Y0Li44MDNmMWM1IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmMnh4X2hhbF91c2FydC5oCisrKyBiL0luYy9zdG0zMmYyeHhfaGFsX3VzYXJ0LmgKQEAgLTY0NSwzICs2NDUsNCBAQAogI2VuZGlmCiAKICNlbmRpZiAvKiBfX1NUTTMyRjJ4eF9IQUxfVVNBUlRfSCAqLworCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmMnh4X2hhbF93d2RnLmggYi9JbmMvc3RtMzJmMnh4X2hhbF93d2RnLmgKaW5kZXggZjk1MjExZC4uM2Q4NjVlNSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjJ4eF9oYWxfd3dkZy5oCisrKyBiL0luYy9zdG0zMmYyeHhfaGFsX3d3ZGcuaApAQCAtMTgzLDcgKzE4Myw3IEBACiAKIC8qKgogICAqIEBicmllZiAgRW5hYmxlIHRoZSBXV0RHIGVhcmx5IHdha2V1cCBpbnRlcnJ1cHQuCi0gICogQHBhcmFtICBfX0hBTkRMRV9fOiBXV0RHIGhhbmRsZQorICAqIEBwYXJhbSAgX19IQU5ETEVfXyAgICAgV1dERyBoYW5kbGUKICAgKiBAcGFyYW0gIF9fSU5URVJSVVBUX18gIHNwZWNpZmllcyB0aGUgaW50ZXJydXB0IHRvIGVuYWJsZS4KICAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICAgICBAYXJnIFdXREdfSVRfRVdJOiBFYXJseSB3YWtldXAgaW50ZXJydXB0CmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmMnh4X2xsX2FkYy5oIGIvSW5jL3N0bTMyZjJ4eF9sbF9hZGMuaAppbmRleCBhZmQxMDYwLi5hOTBjYzhjIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmMnh4X2xsX2FkYy5oCisrKyBiL0luYy9zdG0zMmYyeHhfbGxfYWRjLmgKQEAgLTQ2MTcsMyArNDYxNyw0IEBACiAjZW5kaWYKIAogI2VuZGlmIC8qIF9fU1RNMzJGMnh4X0xMX0FEQ19IICovCisKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYyeHhfbGxfYnVzLmggYi9JbmMvc3RtMzJmMnh4X2xsX2J1cy5oCmluZGV4IGQwYTExODkuLmVhYzgyYTMgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmYyeHhfbGxfYnVzLmgKKysrIGIvSW5jL3N0bTMyZjJ4eF9sbF9idXMuaApAQCAtMjYsMTAgKzI2LDkgQEAKICAgKiBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICoKLSAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUKLSAgKiBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCisgICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluCisgICogdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc29mdHdhcmUgY29tcG9uZW50LgogICAqIElmIG5vIExJQ0VOU0UgZmlsZSBjb21lcyB3aXRoIHRoaXMgc29mdHdhcmUsIGl0IGlzIHByb3ZpZGVkIEFTLUlTLgotICAqCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqLwogCkBAIC0xNTE1LDMgKzE1MTQsNCBAQAogI2VuZGlmCiAKICNlbmRpZiAvKiBfX1NUTTMyRjJ4eF9MTF9CVVNfSCAqLworCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmMnh4X2xsX2NvcnRleC5oIGIvSW5jL3N0bTMyZjJ4eF9sbF9jb3J0ZXguaAppbmRleCBmMjNlNDE2Li4zM2E4MzYyIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmMnh4X2xsX2NvcnRleC5oCisrKyBiL0luYy9zdG0zMmYyeHhfbGxfY29ydGV4LmgKQEAgLTEwLDcgKzEwLDcgQEAKICAgICBbLi5dCiAgICAgVGhlIExMIENPUlRFWCBkcml2ZXIgY29udGFpbnMgYSBzZXQgb2YgZ2VuZXJpYyBBUElzIHRoYXQgY2FuIGJlCiAgICAgdXNlZCBieSB1c2VyOgotICAgICAgKCspIFNZU1RJQ0sgY29uZmlndXJhdGlvbiB1c2VkIGJ5IEByZWYgTExfbURlbGF5IGFuZCBAcmVmIExMX0luaXQxbXNUaWNrCisgICAgICAoKykgU1lTVElDSyBjb25maWd1cmF0aW9uIHVzZWQgYnkgTExfbURlbGF5IGFuZCBMTF9Jbml0MW1zVGljawogICAgICAgICAgIGZ1bmN0aW9ucwogICAgICAgKCspIExvdyBwb3dlciBtb2RlIGNvbmZpZ3VyYXRpb24gKFNDQiByZWdpc3RlciBvZiBDb3J0ZXgtTUNVKQogICAgICAgKCspIE1QVSBBUEkgdG8gY29uZmlndXJlIGFuZCBlbmFibGUgcmVnaW9ucwpAQCAtMjUsOCArMjUsOCBAQAogICAqIENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgKgotICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGVybXMgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZQotICAqIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvZnR3YXJlIGNvbXBvbmVudC4KKyAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4KKyAgKiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCiAgICogSWYgbm8gTElDRU5TRSBmaWxlIGNvbWVzIHdpdGggdGhpcyBzb2Z0d2FyZSwgaXQgaXMgcHJvdmlkZWQgQVMtSVMuCiAgICoKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC02MzUsMyArNjM1LDQgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogX19TVE0zMkYyeHhfTExfQ09SVEVYX0ggKi8KKwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjJ4eF9sbF9jcmMuaCBiL0luYy9zdG0zMmYyeHhfbGxfY3JjLmgKaW5kZXggYWU0NzY4YS4uMTg2ZmY3YiAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjJ4eF9sbF9jcmMuaAorKysgYi9JbmMvc3RtMzJmMnh4X2xsX2NyYy5oCkBAIC0xMzUsNyArMTM1LDcgQEAKICAgKiBAcGFyYW0gIENSQ3ggQ1JDIEluc3RhbmNlCiAgICogQHJldHZhbCBDdXJyZW50IENSQyBjYWxjdWxhdGlvbiByZXN1bHQgYXMgc3RvcmVkIGluIENSQ19EUiByZWdpc3RlciAoMzIgYml0cykuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfQ1JDX1JlYWREYXRhMzIoQ1JDX1R5cGVEZWYgKkNSQ3gpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfQ1JDX1JlYWREYXRhMzIoY29uc3QgQ1JDX1R5cGVEZWYgKkNSQ3gpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfUkVHKENSQ3gtPkRSKSk7CiB9CkBAIC0xNzMsNyArMTczLDcgQEAKICAgKiBAewogICAqLwogCi1FcnJvclN0YXR1cyBMTF9DUkNfRGVJbml0KENSQ19UeXBlRGVmICpDUkN4KTsKK0Vycm9yU3RhdHVzIExMX0NSQ19EZUluaXQoY29uc3QgQ1JDX1R5cGVEZWYgKkNSQ3gpOwogCiAvKioKICAgKiBAfQpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjJ4eF9sbF9kYWMuaCBiL0luYy9zdG0zMmYyeHhfbGxfZGFjLmgKaW5kZXggOGM5YzMyYy4uOTIwN2ExMCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjJ4eF9sbF9kYWMuaAorKysgYi9JbmMvc3RtMzJmMnh4X2xsX2RhYy5oCkBAIC00NzEsMTIgKzQ3MSwxMCBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RBQ19SRVNPTFVUSU9OXzhCCiAgICogQHJldHZhbCBEQUMgY29udmVyc2lvbiBkYXRhICh1bml0OiBkaWdpdGFsIHZhbHVlKQogICAqLwotI2RlZmluZSBfX0xMX0RBQ19DQUxDX1ZPTFRBR0VfVE9fREFUQShfX1ZSRUZBTkFMT0dfVk9MVEFHRV9fLFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19EQUNfVk9MVEFHRV9fLFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19EQUNfUkVTT0xVVElPTl9fKSAgICAgICAgICAgICAgICAgICAgICBcCi0oKF9fREFDX1ZPTFRBR0VfXykgKiBfX0xMX0RBQ19ESUdJVEFMX1NDQUxFKF9fREFDX1JFU09MVVRJT05fXykgICAgICAgICAgICAgIFwKLSAvIChfX1ZSRUZBTkFMT0dfVk9MVEFHRV9fKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKQorI2RlZmluZSBfX0xMX0RBQ19DQUxDX1ZPTFRBR0VfVE9fREFUQShfX1ZSRUZBTkFMT0dfVk9MVEFHRV9fLCBfX0RBQ19WT0xUQUdFX18sIF9fREFDX1JFU09MVVRJT05fXykgICBcCisgICgoX19EQUNfVk9MVEFHRV9fKSAqIF9fTExfREFDX0RJR0lUQUxfU0NBTEUoX19EQUNfUkVTT0xVVElPTl9fKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgLyAoX19WUkVGQU5BTE9HX1ZPTFRBR0VfXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKQogCiAvKioKICAgKiBAfQpAQCAtNDkxLDYgKzQ4OSw3IEBACiAvKiogQGRlZmdyb3VwIERBQ19MTF9FeHBvcnRlZF9GdW5jdGlvbnMgREFDIEV4cG9ydGVkIEZ1bmN0aW9ucwogICAqIEB7CiAgICovCisKIC8qKgogICAqIEBicmllZiAgU2V0IHRoZSBjb252ZXJzaW9uIHRyaWdnZXIgc291cmNlIGZvciB0aGUgc2VsZWN0ZWQgREFDIGNoYW5uZWwuCiAgICogQG5vdGUgICBGb3IgY29udmVyc2lvbiB0cmlnZ2VyIHNvdXJjZSB0byBiZSBlZmZlY3RpdmUsIERBQyB0cmlnZ2VyCkBAIC01NDUsNyArNTQ0LDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfVFJJR19FWFRfVElNMl9UUkdPCiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX1RSSUdfRVhUX0VYVElfTElORTkKICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9EQUNfR2V0VHJpZ2dlclNvdXJjZShEQUNfVHlwZURlZiAqREFDeCwgdWludDMyX3QgREFDX0NoYW5uZWwpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfREFDX0dldFRyaWdnZXJTb3VyY2UoY29uc3QgREFDX1R5cGVEZWYgKkRBQ3gsIHVpbnQzMl90IERBQ19DaGFubmVsKQogewogICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChEQUN4LT5DUiwgREFDX0NSX1RTRUwxIDw8IChEQUNfQ2hhbm5lbCAmIERBQ19DUl9DSFhfQklUT0ZGU0VUX01BU0spKQogICAgICAgICAgICAgICAgICAgICA+PiAoREFDX0NoYW5uZWwgJiBEQUNfQ1JfQ0hYX0JJVE9GRlNFVF9NQVNLKQpAQCAtNTg4LDcgKzU4Nyw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX1dBVkVfQVVUT19HRU5FUkFUSU9OX05PSVNFCiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX1dBVkVfQVVUT19HRU5FUkFUSU9OX1RSSUFOR0xFCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfREFDX0dldFdhdmVBdXRvR2VuZXJhdGlvbihEQUNfVHlwZURlZiAqREFDeCwgdWludDMyX3QgREFDX0NoYW5uZWwpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfREFDX0dldFdhdmVBdXRvR2VuZXJhdGlvbihjb25zdCBEQUNfVHlwZURlZiAqREFDeCwgdWludDMyX3QgREFDX0NoYW5uZWwpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKERBQ3gtPkNSLCBEQUNfQ1JfV0FWRTEgPDwgKERBQ19DaGFubmVsICYgREFDX0NSX0NIWF9CSVRPRkZTRVRfTUFTSykpCiAgICAgICAgICAgICAgICAgICAgID4+IChEQUNfQ2hhbm5lbCAmIERBQ19DUl9DSFhfQklUT0ZGU0VUX01BU0spCkBAIC02NTQsNyArNjUzLDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfTk9JU0VfTEZTUl9VTk1BU0tfQklUUzEwXzAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfTk9JU0VfTEZTUl9VTk1BU0tfQklUUzExXzAKICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9EQUNfR2V0V2F2ZU5vaXNlTEZTUihEQUNfVHlwZURlZiAqREFDeCwgdWludDMyX3QgREFDX0NoYW5uZWwpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfREFDX0dldFdhdmVOb2lzZUxGU1IoY29uc3QgREFDX1R5cGVEZWYgKkRBQ3gsIHVpbnQzMl90IERBQ19DaGFubmVsKQogewogICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChEQUN4LT5DUiwgREFDX0NSX01BTVAxIDw8IChEQUNfQ2hhbm5lbCAmIERBQ19DUl9DSFhfQklUT0ZGU0VUX01BU0spKQogICAgICAgICAgICAgICAgICAgICA+PiAoREFDX0NoYW5uZWwgJiBEQUNfQ1JfQ0hYX0JJVE9GRlNFVF9NQVNLKQpAQCAtNzIxLDcgKzcyMCw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX1RSSUFOR0xFX0FNUExJVFVERV8yMDQ3CiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX1RSSUFOR0xFX0FNUExJVFVERV80MDk1CiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfREFDX0dldFdhdmVUcmlhbmdsZUFtcGxpdHVkZShEQUNfVHlwZURlZiAqREFDeCwgdWludDMyX3QgREFDX0NoYW5uZWwpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfREFDX0dldFdhdmVUcmlhbmdsZUFtcGxpdHVkZShjb25zdCBEQUNfVHlwZURlZiAqREFDeCwgdWludDMyX3QgREFDX0NoYW5uZWwpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKERBQ3gtPkNSLCBEQUNfQ1JfTUFNUDEgPDwgKERBQ19DaGFubmVsICYgREFDX0NSX0NIWF9CSVRPRkZTRVRfTUFTSykpCiAgICAgICAgICAgICAgICAgICAgID4+IChEQUNfQ2hhbm5lbCAmIERBQ19DUl9DSFhfQklUT0ZGU0VUX01BU0spCkBAIC03NjAsNyArNzU5LDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfT1VUUFVUX0JVRkZFUl9FTkFCTEUKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfT1VUUFVUX0JVRkZFUl9ESVNBQkxFCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfREFDX0dldE91dHB1dEJ1ZmZlcihEQUNfVHlwZURlZiAqREFDeCwgdWludDMyX3QgREFDX0NoYW5uZWwpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfREFDX0dldE91dHB1dEJ1ZmZlcihjb25zdCBEQUNfVHlwZURlZiAqREFDeCwgdWludDMyX3QgREFDX0NoYW5uZWwpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKERBQ3gtPkNSLCBEQUNfQ1JfQk9GRjEgPDwgKERBQ19DaGFubmVsICYgREFDX0NSX0NIWF9CSVRPRkZTRVRfTUFTSykpCiAgICAgICAgICAgICAgICAgICAgID4+IChEQUNfQ2hhbm5lbCAmIERBQ19DUl9DSFhfQklUT0ZGU0VUX01BU0spCkBAIC04MjIsNyArODIxLDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfQ0hBTk5FTF8yCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfREFDX0lzRE1BUmVxRW5hYmxlZChEQUNfVHlwZURlZiAqREFDeCwgdWludDMyX3QgREFDX0NoYW5uZWwpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfREFDX0lzRE1BUmVxRW5hYmxlZChjb25zdCBEQUNfVHlwZURlZiAqREFDeCwgdWludDMyX3QgREFDX0NoYW5uZWwpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKERBQ3gtPkNSLAogICAgICAgICAgICAgICAgICAgICBEQUNfQ1JfRE1BRU4xIDw8IChEQUNfQ2hhbm5lbCAmIERBQ19DUl9DSFhfQklUT0ZGU0VUX01BU0spKQpAQCAtODYxLDcgKzg2MCw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX0RNQV9SRUdfREFUQV84QklUU19SSUdIVF9BTElHTkVECiAgICogQHJldHZhbCBEQUMgcmVnaXN0ZXIgYWRkcmVzcwogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0RBQ19ETUFfR2V0UmVnQWRkcihEQUNfVHlwZURlZiAqREFDeCwgdWludDMyX3QgREFDX0NoYW5uZWwsIHVpbnQzMl90IFJlZ2lzdGVyKQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0RBQ19ETUFfR2V0UmVnQWRkcihjb25zdCBEQUNfVHlwZURlZiAqREFDeCwgdWludDMyX3QgREFDX0NoYW5uZWwsIHVpbnQzMl90IFJlZ2lzdGVyKQogewogICAvKiBSZXRyaWV2ZSBhZGRyZXNzIG9mIHJlZ2lzdGVyIERIUjEyUngsIERIUjEyTHggb3IgREhSOFJ4IGRlcGVuZGluZyBvbiAgICAgKi8KICAgLyogREFDIGNoYW5uZWwgc2VsZWN0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC05MjIsNyArOTIxLDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQUNfQ0hBTk5FTF8yCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfREFDX0lzRW5hYmxlZChEQUNfVHlwZURlZiAqREFDeCwgdWludDMyX3QgREFDX0NoYW5uZWwpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfREFDX0lzRW5hYmxlZChjb25zdCBEQUNfVHlwZURlZiAqREFDeCwgdWludDMyX3QgREFDX0NoYW5uZWwpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKERBQ3gtPkNSLAogICAgICAgICAgICAgICAgICAgICBEQUNfQ1JfRU4xIDw8IChEQUNfQ2hhbm5lbCAmIERBQ19DUl9DSFhfQklUT0ZGU0VUX01BU0spKQpAQCAtOTgwLDcgKzk3OSw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX0NIQU5ORUxfMgogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0RBQ19Jc1RyaWdnZXJFbmFibGVkKERBQ19UeXBlRGVmICpEQUN4LCB1aW50MzJfdCBEQUNfQ2hhbm5lbCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9EQUNfSXNUcmlnZ2VyRW5hYmxlZChjb25zdCBEQUNfVHlwZURlZiAqREFDeCwgdWludDMyX3QgREFDX0NoYW5uZWwpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKERBQ3gtPkNSLAogICAgICAgICAgICAgICAgICAgICBEQUNfQ1JfVEVOMSA8PCAoREFDX0NoYW5uZWwgJiBEQUNfQ1JfQ0hYX0JJVE9GRlNFVF9NQVNLKSkKQEAgLTExNTMsNyArMTE1Miw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfREFDX0NIQU5ORUxfMgogICAqIEByZXR2YWwgVmFsdWUgYmV0d2VlbiBNaW5fRGF0YT0weDAwMCBhbmQgTWF4X0RhdGE9MHhGRkYKICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9EQUNfUmV0cmlldmVPdXRwdXREYXRhKERBQ19UeXBlRGVmICpEQUN4LCB1aW50MzJfdCBEQUNfQ2hhbm5lbCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9EQUNfUmV0cmlldmVPdXRwdXREYXRhKGNvbnN0IERBQ19UeXBlRGVmICpEQUN4LCB1aW50MzJfdCBEQUNfQ2hhbm5lbCkKIHsKICAgX19JTyB1aW50MzJfdCBjb25zdCAqcHJlZyA9IF9fREFDX1BUUl9SRUdfT0ZGU0VUKERBQ3gtPkRPUjEsIChEQUNfQ2hhbm5lbCA+PiBEQUNfUkVHX0RPUlhfUkVHT0ZGU0VUX0JJVE9GRlNFVF9QT1MpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIERBQ19SRUdfRE9SWF9SRUdPRkZTRVRfTUFTS19QT1NCSVQwKTsKQEAgLTExNzUsNyArMTE3NCw3IEBACiAgICogQHBhcmFtICBEQUN4IERBQyBpbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0RBQ19Jc0FjdGl2ZUZsYWdfRE1BVURSMShEQUNfVHlwZURlZiAqREFDeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9EQUNfSXNBY3RpdmVGbGFnX0RNQVVEUjEoY29uc3QgREFDX1R5cGVEZWYgKkRBQ3gpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKERBQ3gtPlNSLCBMTF9EQUNfRkxBR19ETUFVRFIxKSA9PSAoTExfREFDX0ZMQUdfRE1BVURSMSkpID8gMVVMIDogMFVMKTsKIH0KQEAgLTExODcsNyArMTE4Niw3IEBACiAgICogQHBhcmFtICBEQUN4IERBQyBpbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0RBQ19Jc0FjdGl2ZUZsYWdfRE1BVURSMihEQUNfVHlwZURlZiAqREFDeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9EQUNfSXNBY3RpdmVGbGFnX0RNQVVEUjIoY29uc3QgREFDX1R5cGVEZWYgKkRBQ3gpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKERBQ3gtPlNSLCBMTF9EQUNfRkxBR19ETUFVRFIyKSA9PSAoTExfREFDX0ZMQUdfRE1BVURSMikpID8gMVVMIDogMFVMKTsKIH0KQEAgLTEyNzksNyArMTI3OCw3IEBACiAgICogQHBhcmFtICBEQUN4IERBQyBpbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0RBQ19Jc0VuYWJsZWRJVF9ETUFVRFIxKERBQ19UeXBlRGVmICpEQUN4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0RBQ19Jc0VuYWJsZWRJVF9ETUFVRFIxKGNvbnN0IERBQ19UeXBlRGVmICpEQUN4KQogewogICByZXR1cm4gKChSRUFEX0JJVChEQUN4LT5DUiwgTExfREFDX0lUX0RNQVVEUklFMSkgPT0gKExMX0RBQ19JVF9ETUFVRFJJRTEpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0xMjkxLDcgKzEyOTAsNyBAQAogICAqIEBwYXJhbSAgREFDeCBEQUMgaW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9EQUNfSXNFbmFibGVkSVRfRE1BVURSMihEQUNfVHlwZURlZiAqREFDeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9EQUNfSXNFbmFibGVkSVRfRE1BVURSMihjb25zdCBEQUNfVHlwZURlZiAqREFDeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoREFDeC0+Q1IsIExMX0RBQ19JVF9ETUFVRFJJRTIpID09IChMTF9EQUNfSVRfRE1BVURSSUUyKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMTMwNiw4ICsxMzA1LDggQEAKICAgKiBAewogICAqLwogCi1FcnJvclN0YXR1cyBMTF9EQUNfRGVJbml0KERBQ19UeXBlRGVmICpEQUN4KTsKLUVycm9yU3RhdHVzIExMX0RBQ19Jbml0KERBQ19UeXBlRGVmICpEQUN4LCB1aW50MzJfdCBEQUNfQ2hhbm5lbCwgTExfREFDX0luaXRUeXBlRGVmICpEQUNfSW5pdFN0cnVjdCk7CitFcnJvclN0YXR1cyBMTF9EQUNfRGVJbml0KGNvbnN0IERBQ19UeXBlRGVmICpEQUN4KTsKK0Vycm9yU3RhdHVzIExMX0RBQ19Jbml0KERBQ19UeXBlRGVmICpEQUN4LCB1aW50MzJfdCBEQUNfQ2hhbm5lbCwgY29uc3QgTExfREFDX0luaXRUeXBlRGVmICpEQUNfSW5pdFN0cnVjdCk7CiB2b2lkICAgICAgICBMTF9EQUNfU3RydWN0SW5pdChMTF9EQUNfSW5pdFR5cGVEZWYgKkRBQ19Jbml0U3RydWN0KTsKIAogLyoqCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmMnh4X2xsX2RtYS5oIGIvSW5jL3N0bTMyZjJ4eF9sbF9kbWEuaAppbmRleCBmNWQ3NTM1Li43YjUxOGZlIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmMnh4X2xsX2RtYS5oCisrKyBiL0luYy9zdG0zMmYyeHhfbGxfZG1hLmgKQEAgLTksOCArOSw4IEBACiAgICogQ29weXJpZ2h0IChjKSAyMDE2IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAqCi0gICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlCi0gICogaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc29mdHdhcmUgY29tcG9uZW50LgorICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGVybXMgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbgorICAqIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvZnR3YXJlIGNvbXBvbmVudC4KICAgKiBJZiBubyBMSUNFTlNFIGZpbGUgY29tZXMgd2l0aCB0aGlzIHNvZnR3YXJlLCBpdCBpcyBwcm92aWRlZCBBUy1JUy4KICAgKgogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTI3MTksNyArMjcxOSw3IEBACiB9CiAKIC8qKgotICAqIEBicmllZiBDaGVjayBpZiBIYWxmIHRyYW5zZmVyIGludGVycnVwIGlzIGVuYWJsZWQuCisgICogQGJyaWVmIENoZWNrIGlmIEhhbGYgdHJhbnNmZXIgaW50ZXJydXB0IGlzIGVuYWJsZWQuCiAgICogQHJtdG9sbCBDUiAgICAgICAgSFRJRSAgICAgICAgIExMX0RNQV9Jc0VuYWJsZWRJVF9IVAogICAqIEBwYXJhbSAgRE1BeCBETUF4IEluc3RhbmNlCiAgICogQHBhcmFtICBTdHJlYW0gVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKQEAgLTI3NTksNyArMjc1OSw3IEBACiB9CiAKIC8qKgotICAqIEBicmllZiBDaGVjayBpZiBUcmFuc2ZlciBjb21wbGV0ZSBpbnRlcnJ1cCBpcyBlbmFibGVkLgorICAqIEBicmllZiBDaGVjayBpZiBUcmFuc2ZlciBjb21wbGV0ZSBpbnRlcnJ1cHQgaXMgZW5hYmxlZC4KICAgKiBAcm10b2xsIENSICAgICAgICBUQ0lFICAgICAgICAgTExfRE1BX0lzRW5hYmxlZElUX1RDCiAgICogQHBhcmFtICBETUF4IERNQXggSW5zdGFuY2UKICAgKiBAcGFyYW0gIFN0cmVhbSBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgpAQCAtMjc5OSw3ICsyNzk5LDcgQEAKIH0KIAogLyoqCi0gICogQGJyaWVmIENoZWNrIGlmIEZJRk8gZXJyb3IgaW50ZXJydXAgaXMgZW5hYmxlZC4KKyAgKiBAYnJpZWYgQ2hlY2sgaWYgRklGTyBlcnJvciBpbnRlcnJ1cHQgaXMgZW5hYmxlZC4KICAgKiBAcm10b2xsIEZDUiAgICAgICAgRkVJRSAgICAgICAgIExMX0RNQV9Jc0VuYWJsZWRJVF9GRQogICAqIEBwYXJhbSAgRE1BeCBETUF4IEluc3RhbmNlCiAgICogQHBhcmFtICBTdHJlYW0gVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKQEAgLTI4NTUsMyArMjg1NSw0IEBACiAjZW5kaWYKIAogI2VuZGlmIC8qIF9fU1RNMzJGMnh4X0xMX0RNQV9IICovCisKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYyeHhfbGxfZXh0aS5oIGIvSW5jL3N0bTMyZjJ4eF9sbF9leHRpLmgKaW5kZXggZTcwOWI4Ny4uYWM3N2ZlYyAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjJ4eF9sbF9leHRpLmgKKysrIGIvSW5jL3N0bTMyZjJ4eF9sbF9leHRpLmgKQEAgLTkyOSwzICs5MjksNCBAQAogI2VuZGlmCiAKICNlbmRpZiAvKiBfX1NUTTMyRjJ4eF9MTF9FWFRJX0ggKi8KKwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjJ4eF9sbF9ncGlvLmggYi9JbmMvc3RtMzJmMnh4X2xsX2dwaW8uaAppbmRleCBkZmFiNTg5Li4wMDQzNjUwIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmMnh4X2xsX2dwaW8uaAorKysgYi9JbmMvc3RtMzJmMnh4X2xsX2dwaW8uaApAQCAtOTc4LDMgKzk3OCw0IEBACiAjZW5kaWYKIAogI2VuZGlmIC8qIF9fU1RNMzJGMnh4X0xMX0dQSU9fSCAqLworCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmMnh4X2xsX2kyYy5oIGIvSW5jL3N0bTMyZjJ4eF9sbF9pMmMuaAppbmRleCAwZGE2MjE4Li4zYjI5NTIzIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmMnh4X2xsX2kyYy5oCisrKyBiL0luYy9zdG0zMmYyeHhfbGxfaTJjLmgKQEAgLTI0MCw3ICsyNDAsNyBAQAogICAqIEB9CiAgICovCiAKLS8qKiBAZGVmZ3JvdXAgSTJDX0xMX0VNX0V4cG9ydGVkX01hY3Jvc19IZWxwZXIgRXhwb3J0ZWRfTWFjcm9zX0hlbHBlcgorLyoqIEBkZWZncm91cCBJMkNfTExfRU1fRXhwb3J0ZWRfTWFjcm9zX0hlbHBlciBFeHBvcnRlZCBNYWNyb3MgSGVscGVyCiAgICogQHsKICAgKi8KIApAQCAtNzYxLDcgKzc2MSw3IEBACiAKIC8qKgogICAqIEBicmllZiAgQ29uZmlndXJlIHBlcmlwaGVyYWwgbW9kZS4KLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIFNNQnVzIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJMkN4IEluc3RhbmNlLgogICAqIEBybXRvbGwgQ1IxICAgICAgICAgIFNNQlVTICAgICAgICAgTExfSTJDX1NldE1vZGVcbgogICAqICAgICAgICAgQ1IxICAgICAgICAgIFNNQlRZUEUgICAgICAgTExfSTJDX1NldE1vZGVcbgpAQCAtNzgxLDcgKzc4MSw3IEBACiAKIC8qKgogICAqIEBicmllZiAgR2V0IHBlcmlwaGVyYWwgbW9kZS4KLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIFNNQnVzIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJMkN4IEluc3RhbmNlLgogICAqIEBybXRvbGwgQ1IxICAgICAgICAgIFNNQlVTICAgICAgICAgTExfSTJDX0dldE1vZGVcbgogICAqICAgICAgICAgQ1IxICAgICAgICAgIFNNQlRZUEUgICAgICAgTExfSTJDX0dldE1vZGVcbgpAQCAtODAwLDcgKzgwMCw3IEBACiAKIC8qKgogICAqIEBicmllZiAgRW5hYmxlIFNNQnVzIGFsZXJ0IChIb3N0IG9yIERldmljZSBtb2RlKQotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU01CdXMgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIEkyQ3ggSW5zdGFuY2UuCiAgICogQG5vdGUgICBTTUJ1cyBEZXZpY2UgbW9kZToKICAgKiAgICAgICAgIC0gU01CdXMgQWxlcnQgcGluIGlzIGRyaXZlZCBsb3cgYW5kCkBAIC04MTgsNyArODE4LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBEaXNhYmxlIFNNQnVzIGFsZXJ0IChIb3N0IG9yIERldmljZSBtb2RlKQotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU01CdXMgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIEkyQ3ggSW5zdGFuY2UuCiAgICogQG5vdGUgICBTTUJ1cyBEZXZpY2UgbW9kZToKICAgKiAgICAgICAgIC0gU01CdXMgQWxlcnQgcGluIGlzIG5vdCBkcml2ZWQgKGNhbiBiZSB1c2VkIGFzIGEgc3RhbmRhcmQgR1BJTykgYW5kCkBAIC04MzYsNyArODM2LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBDaGVjayBpZiBTTUJ1cyBhbGVydCAoSG9zdCBvciBEZXZpY2UgbW9kZSkgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC4KLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIFNNQnVzIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJMkN4IEluc3RhbmNlLgogICAqIEBybXRvbGwgQ1IxICAgICAgICAgIEFMRVJUICAgICAgICAgTExfSTJDX0lzRW5hYmxlZFNNQnVzQWxlcnQKICAgKiBAcGFyYW0gIEkyQ3ggSTJDIEluc3RhbmNlLgpAQCAtODQ5LDcgKzg0OSw3IEBACiAKIC8qKgogICAqIEBicmllZiAgRW5hYmxlIFNNQnVzIFBhY2tldCBFcnJvciBDYWxjdWxhdGlvbiAoUEVDKS4KLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIFNNQnVzIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJMkN4IEluc3RhbmNlLgogICAqIEBybXRvbGwgQ1IxICAgICAgICAgIEVOUEVDICAgICAgICAgTExfSTJDX0VuYWJsZVNNQnVzUEVDCiAgICogQHBhcmFtICBJMkN4IEkyQyBJbnN0YW5jZS4KQEAgLTg2Miw3ICs4NjIsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIERpc2FibGUgU01CdXMgUGFja2V0IEVycm9yIENhbGN1bGF0aW9uIChQRUMpLgotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU01CdXMgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIEkyQ3ggSW5zdGFuY2UuCiAgICogQHJtdG9sbCBDUjEgICAgICAgICAgRU5QRUMgICAgICAgICBMTF9JMkNfRGlzYWJsZVNNQnVzUEVDCiAgICogQHBhcmFtICBJMkN4IEkyQyBJbnN0YW5jZS4KQEAgLTg3NSw3ICs4NzUsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIENoZWNrIGlmIFNNQnVzIFBhY2tldCBFcnJvciBDYWxjdWxhdGlvbiAoUEVDKSBpcyBlbmFibGVkIG9yIGRpc2FibGVkLgotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU01CdXMgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIEkyQ3ggSW5zdGFuY2UuCiAgICogQHJtdG9sbCBDUjEgICAgICAgICAgRU5QRUMgICAgICAgICBMTF9JMkNfSXNFbmFibGVkU01CdXNQRUMKICAgKiBAcGFyYW0gIEkyQ3ggSTJDIEluc3RhbmNlLgpAQCAtMTA1OCw3ICsxMDU4LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBFbmFibGUgRXJyb3IgaW50ZXJydXB0cy4KLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIFNNQnVzIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJMkN4IEluc3RhbmNlLgogICAqIEBub3RlICAgQW55IG9mIHRoZXNlIGVycm9ycyB3aWxsIGdlbmVyYXRlIGludGVycnVwdCA6CiAgICogICAgICAgICBCdXMgRXJyb3IgZGV0ZWN0aW9uIChCRVJSKQpAQCAtMTA3OSw3ICsxMDc5LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBEaXNhYmxlIEVycm9yIGludGVycnVwdHMuCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBTTUJ1cyBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgSTJDeCBJbnN0YW5jZS4KICAgKiBAbm90ZSAgIEFueSBvZiB0aGVzZSBlcnJvcnMgd2lsbCBnZW5lcmF0ZSBpbnRlcnJ1cHQgOgogICAqICAgICAgICAgQnVzIEVycm9yIGRldGVjdGlvbiAoQkVSUikKQEAgLTEyNjIsNyArMTI2Miw3IEBACiAKIC8qKgogICAqIEBicmllZiAgSW5kaWNhdGUgdGhlIHN0YXR1cyBvZiBTTUJ1cyBQRUMgZXJyb3IgZmxhZyBpbiByZWNlcHRpb24uCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBTTUJ1cyBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgSTJDeCBJbnN0YW5jZS4KICAgKiBAcm10b2xsIFNSMSAgICAgICAgICBQRUNFUlIgICAgICAgIExMX0kyQ19Jc0FjdGl2ZVNNQnVzRmxhZ19QRUNFUlIKICAgKiBAcGFyYW0gIEkyQ3ggSTJDIEluc3RhbmNlLgpAQCAtMTI3NSw3ICsxMjc1LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBJbmRpY2F0ZSB0aGUgc3RhdHVzIG9mIFNNQnVzIFRpbWVvdXQgZGV0ZWN0aW9uIGZsYWcuCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBTTUJ1cyBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgSTJDeCBJbnN0YW5jZS4KICAgKiBAcm10b2xsIFNSMSAgICAgICAgICBUSU1FT1VUICAgICAgIExMX0kyQ19Jc0FjdGl2ZVNNQnVzRmxhZ19USU1FT1VUCiAgICogQHBhcmFtICBJMkN4IEkyQyBJbnN0YW5jZS4KQEAgLTEyODgsNyArMTI4OCw3IEBACiAKIC8qKgogICAqIEBicmllZiAgSW5kaWNhdGUgdGhlIHN0YXR1cyBvZiBTTUJ1cyBhbGVydCBmbGFnLgotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU01CdXMgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIEkyQ3ggSW5zdGFuY2UuCiAgICogQHJtdG9sbCBTUjEgICAgICAgICAgU01CQUxFUlQgICAgICBMTF9JMkNfSXNBY3RpdmVTTUJ1c0ZsYWdfQUxFUlQKICAgKiBAcGFyYW0gIEkyQ3ggSTJDIEluc3RhbmNlLgpAQCAtMTMyNyw3ICsxMzI3LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBJbmRpY2F0ZSB0aGUgc3RhdHVzIG9mIFNNQnVzIEhvc3QgYWRkcmVzcyByZWNlcHRpb24gKFNsYXZlIG1vZGUpLgotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU01CdXMgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIEkyQ3ggSW5zdGFuY2UuCiAgICogQG5vdGUgICBSRVNFVDogTm8gU01CdXMgSG9zdCBhZGRyZXNzCiAgICogICAgICAgICBTRVQ6IFNNQnVzIEhvc3QgYWRkcmVzcyByZWNlaXZlZC4KQEAgLTEzNDMsNyArMTM0Myw3IEBACiAKIC8qKgogICAqIEBicmllZiAgSW5kaWNhdGUgdGhlIHN0YXR1cyBvZiBTTUJ1cyBEZXZpY2UgZGVmYXVsdCBhZGRyZXNzIHJlY2VwdGlvbiAoU2xhdmUgbW9kZSkuCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBTTUJ1cyBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgSTJDeCBJbnN0YW5jZS4KICAgKiBAbm90ZSAgIFJFU0VUOiBObyBTTUJ1cyBEZXZpY2UgZGVmYXVsdCBhZGRyZXNzCiAgICogICAgICAgICBTRVQ6IFNNQnVzIERldmljZSBkZWZhdWx0IGFkZHJlc3MgcmVjZWl2ZWQuCkBAIC0xNDc1LDcgKzE0NzUsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIENsZWFyIFNNQnVzIFRpbWVvdXQgZGV0ZWN0aW9uIGZsYWcuCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBTTUJ1cyBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgSTJDeCBJbnN0YW5jZS4KICAgKiBAcm10b2xsIFNSMSAgICAgICAgICBUSU1FT1VUICAgICAgIExMX0kyQ19DbGVhclNNQnVzRmxhZ19USU1FT1VUCiAgICogQHBhcmFtICBJMkN4IEkyQyBJbnN0YW5jZS4KQEAgLTE0ODgsNyArMTQ4OCw3IEBACiAKIC8qKgogICAqIEBicmllZiAgQ2xlYXIgU01CdXMgQWxlcnQgZmxhZy4KLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIFNNQnVzIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJMkN4IEluc3RhbmNlLgogICAqIEBybXRvbGwgU1IxICAgICAgICAgIFNNQkFMRVJUICAgICAgTExfSTJDX0NsZWFyU01CdXNGbGFnX0FMRVJUCiAgICogQHBhcmFtICBJMkN4IEkyQyBJbnN0YW5jZS4KQEAgLTE2NjYsNyArMTY2Niw3IEBACiAKIC8qKgogICAqIEBicmllZiAgRW5hYmxlIHRyYW5zZmVyIG9yIGludGVybmFsIGNvbXBhcmlzb24gb2YgdGhlIFNNQnVzIFBhY2tldCBFcnJvciBieXRlICh0cmFuc21pc3Npb24gb3IgcmVjZXB0aW9uIG1vZGUpLgotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU01CdXMgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIEkyQ3ggSW5zdGFuY2UuCiAgICogQG5vdGUgICBUaGlzIGZlYXR1cmUgaXMgY2xlYXJlZCBieSBoYXJkd2FyZSB3aGVuIHRoZSBQRUMgYnl0ZSBpcyB0cmFuc2ZlcnJlZCBvciBjb21wYXJlZCwKICAgKiAgICAgICAgIG9yIGJ5IGEgU1RBUlQgb3IgU1RPUCBjb25kaXRpb24sIGl0IGlzIGFsc28gY2xlYXJlZCBieSBzb2Z0d2FyZS4KQEAgLTE2ODEsNyArMTY4MSw3IEBACiAKIC8qKgogICAqIEBicmllZiAgRGlzYWJsZSB0cmFuc2ZlciBvciBpbnRlcm5hbCBjb21wYXJpc29uIG9mIHRoZSBTTUJ1cyBQYWNrZXQgRXJyb3IgYnl0ZSAodHJhbnNtaXNzaW9uIG9yIHJlY2VwdGlvbiBtb2RlKS4KLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIFNNQnVzIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJMkN4IEluc3RhbmNlLgogICAqIEBybXRvbGwgQ1IxICAgICAgICAgIFBFQyAgICAgICAgICAgTExfSTJDX0Rpc2FibGVTTUJ1c1BFQ0NvbXBhcmUKICAgKiBAcGFyYW0gIEkyQ3ggSTJDIEluc3RhbmNlLgpAQCAtMTY5NCw3ICsxNjk0LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBDaGVjayBpZiB0aGUgU01CdXMgUGFja2V0IEVycm9yIGJ5dGUgdHJhbnNmZXIgb3IgaW50ZXJuYWwgY29tcGFyaXNvbiBpcyByZXF1ZXN0ZWQgb3Igbm90LgotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU01CdXMgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIEkyQ3ggSW5zdGFuY2UuCiAgICogQHJtdG9sbCBDUjEgICAgICAgICAgUEVDICAgICAgICAgICBMTF9JMkNfSXNFbmFibGVkU01CdXNQRUNDb21wYXJlCiAgICogQHBhcmFtICBJMkN4IEkyQyBJbnN0YW5jZS4KQEAgLTE3MDcsNyArMTcwNyw3IEBACiAKIC8qKgogICAqIEBicmllZiAgR2V0IHRoZSBTTUJ1cyBQYWNrZXQgRXJyb3IgYnl0ZSBjYWxjdWxhdGVkLgotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU01CdXMgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIEkyQ3ggSW5zdGFuY2UuCiAgICogQHJtdG9sbCBTUjIgICAgICAgICAgUEVDICAgICAgICAgICBMTF9JMkNfR2V0U01CdXNQRUMKICAgKiBAcGFyYW0gIEkyQ3ggSTJDIEluc3RhbmNlLgpAQCAtMTc3OSwzICsxNzc5LDQgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogX19TVE0zMkYyeHhfTExfSTJDX0ggKi8KKwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjJ4eF9sbF9yY2MuaCBiL0luYy9zdG0zMmYyeHhfbGxfcmNjLmgKaW5kZXggZDE1MmJiMC4uNjRhZTc4YiAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjJ4eF9sbF9yY2MuaAorKysgYi9JbmMvc3RtMzJmMnh4X2xsX3JjYy5oCkBAIC05LDEwICs5LDkgQEAKICAgKiBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICoKLSAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUKLSAgKiBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCisgICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluCisgICogdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc29mdHdhcmUgY29tcG9uZW50LgogICAqIElmIG5vIExJQ0VOU0UgZmlsZSBjb21lcyB3aXRoIHRoaXMgc29mdHdhcmUsIGl0IGlzIHByb3ZpZGVkIEFTLUlTLgotICAqCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqLwogCkBAIC0yNDM1LDMgKzI0MzQsNCBAQAogI2VuZGlmCiAKICNlbmRpZiAvKiBfX1NUTTMyRjJ4eF9MTF9SQ0NfSCAqLworCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmMnh4X2xsX3JuZy5oIGIvSW5jL3N0bTMyZjJ4eF9sbF9ybmcuaAppbmRleCA2YzhlMDFhLi4yZWUyZDZiIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmMnh4X2xsX3JuZy5oCisrKyBiL0luYy9zdG0zMmYyeHhfbGxfcm5nLmgKQEAgLTM4LDYgKzM4LDcgQEAKICAgKi8KIAogLyogUHJpdmF0ZSB0eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFByaXZhdGUgZGVmaW5lcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBQcml2YXRlIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogUHJpdmF0ZSBjb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgbWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xNDUsNyArMTQ2LDcgQEAKICAgKiBAcGFyYW0gIFJOR3ggUk5HIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfUk5HX0lzRW5hYmxlZChSTkdfVHlwZURlZiAqUk5HeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9STkdfSXNFbmFibGVkKGNvbnN0IFJOR19UeXBlRGVmICpSTkd4KQogewogICByZXR1cm4gKChSRUFEX0JJVChSTkd4LT5DUiwgUk5HX0NSX1JOR0VOKSA9PSAoUk5HX0NSX1JOR0VOKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMTY0LDcgKzE2NSw3IEBACiAgICogQHBhcmFtICBSTkd4IFJORyBJbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1JOR19Jc0FjdGl2ZUZsYWdfRFJEWShSTkdfVHlwZURlZiAqUk5HeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9STkdfSXNBY3RpdmVGbGFnX0RSRFkoY29uc3QgUk5HX1R5cGVEZWYgKlJOR3gpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKFJOR3gtPlNSLCBSTkdfU1JfRFJEWSkgPT0gKFJOR19TUl9EUkRZKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMTc1LDcgKzE3Niw3IEBACiAgICogQHBhcmFtICBSTkd4IFJORyBJbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1JOR19Jc0FjdGl2ZUZsYWdfQ0VDUyhSTkdfVHlwZURlZiAqUk5HeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9STkdfSXNBY3RpdmVGbGFnX0NFQ1MoY29uc3QgUk5HX1R5cGVEZWYgKlJOR3gpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKFJOR3gtPlNSLCBSTkdfU1JfQ0VDUykgPT0gKFJOR19TUl9DRUNTKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMTg2LDcgKzE4Nyw3IEBACiAgICogQHBhcmFtICBSTkd4IFJORyBJbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1JOR19Jc0FjdGl2ZUZsYWdfU0VDUyhSTkdfVHlwZURlZiAqUk5HeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9STkdfSXNBY3RpdmVGbGFnX1NFQ1MoY29uc3QgUk5HX1R5cGVEZWYgKlJOR3gpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKFJOR3gtPlNSLCBSTkdfU1JfU0VDUykgPT0gKFJOR19TUl9TRUNTKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMTk3LDcgKzE5OCw3IEBACiAgICogQHBhcmFtICBSTkd4IFJORyBJbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1JOR19Jc0FjdGl2ZUZsYWdfQ0VJUyhSTkdfVHlwZURlZiAqUk5HeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9STkdfSXNBY3RpdmVGbGFnX0NFSVMoY29uc3QgUk5HX1R5cGVEZWYgKlJOR3gpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKFJOR3gtPlNSLCBSTkdfU1JfQ0VJUykgPT0gKFJOR19TUl9DRUlTKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMjA4LDcgKzIwOSw3IEBACiAgICogQHBhcmFtICBSTkd4IFJORyBJbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1JOR19Jc0FjdGl2ZUZsYWdfU0VJUyhSTkdfVHlwZURlZiAqUk5HeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9STkdfSXNBY3RpdmVGbGFnX1NFSVMoY29uc3QgUk5HX1R5cGVEZWYgKlJOR3gpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKFJOR3gtPlNSLCBSTkdfU1JfU0VJUykgPT0gKFJOR19TUl9TRUlTKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMjc0LDcgKzI3NSw3IEBACiAgICogQHBhcmFtICBSTkd4IFJORyBJbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1JOR19Jc0VuYWJsZWRJVChSTkdfVHlwZURlZiAqUk5HeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9STkdfSXNFbmFibGVkSVQoY29uc3QgUk5HX1R5cGVEZWYgKlJOR3gpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKFJOR3gtPkNSLCBSTkdfQ1JfSUUpID09IChSTkdfQ1JfSUUpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0yOTMsNyArMjk0LDcgQEAKICAgKiBAcGFyYW0gIFJOR3ggUk5HIEluc3RhbmNlCiAgICogQHJldHZhbCBHZW5lcmF0ZWQgMzItYml0IHJhbmRvbSB2YWx1ZQogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1JOR19SZWFkUmFuZERhdGEzMihSTkdfVHlwZURlZiAqUk5HeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9STkdfUmVhZFJhbmREYXRhMzIoY29uc3QgUk5HX1R5cGVEZWYgKlJOR3gpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfUkVHKFJOR3gtPkRSKSk7CiB9CkBAIC0zMDYsNyArMzA3LDcgQEAKIC8qKiBAZGVmZ3JvdXAgUk5HX0xMX0VGX0luaXQgSW5pdGlhbGl6YXRpb24gYW5kIGRlLWluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucwogICAqIEB7CiAgICovCi1FcnJvclN0YXR1cyBMTF9STkdfRGVJbml0KFJOR19UeXBlRGVmICpSTkd4KTsKK0Vycm9yU3RhdHVzIExMX1JOR19EZUluaXQoY29uc3QgUk5HX1R5cGVEZWYgKlJOR3gpOwogCiAvKioKICAgKiBAfQpAQCAtMzMyLDMgKzMzMyw0IEBACiAjZW5kaWYKIAogI2VuZGlmIC8qIF9fU1RNMzJGMnh4X0xMX1JOR19IICovCisKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYyeHhfbGxfcnRjLmggYi9JbmMvc3RtMzJmMnh4X2xsX3J0Yy5oCmluZGV4IDY4MTlmZDcuLjVjYTBhNWYgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmYyeHhfbGxfcnRjLmgKKysrIGIvSW5jL3N0bTMyZjJ4eF9sbF9ydGMuaApAQCAtMTcsOCArMTcsOCBAQAogICAqLwogCiAvKiBEZWZpbmUgdG8gcHJldmVudCByZWN1cnNpdmUgaW5jbHVzaW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotI2lmbmRlZiBfX1NUTTMyRjJ4eF9MTF9SVENfSAotI2RlZmluZSBfX1NUTTMyRjJ4eF9MTF9SVENfSAorI2lmbmRlZiBTVE0zMkYyeHhfTExfUlRDX0gKKyNkZWZpbmUgU1RNMzJGMnh4X0xMX1JUQ19ICiAKICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CkBAIC00NSw3ICs0NSw3IEBACiAgICovCiAvKiBNYXNrcyBEZWZpbml0aW9uICovCiAjZGVmaW5lIFJUQ19JTklUX01BU0sgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkZVCi0jZGVmaW5lIFJUQ19SU0ZfTUFTSyAgICAgICAgICAgICAgICAgIDB4RkZGRkZGNUZVCisjZGVmaW5lIFJUQ19SU0ZfTUFTSyAgICAgICAgICAgICAgICAgICgodWludDMyX3QpfihSVENfSVNSX0lOSVQgfCBSVENfSVNSX1JTRikpCiAKIC8qIFdyaXRlIHByb3RlY3Rpb24gZGVmaW5lcyAqLwogI2RlZmluZSBSVENfV1JJVEVfUFJPVEVDVElPTl9ESVNBQkxFICAoKHVpbnQ4X3QpMHhGRlUpCkBAIC0xNjcsNyArMTY3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBSVENfTExfRUNfQUxNQV9NQVNLIGZvciBBTEFSTSBBIG9yIEByZWYgUlRDX0xMX0VDX0FMTUJfTUFTSyBmb3IgQUxBUk0gQi4KIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGZlYXR1cmUgY2FuIGJlIG1vZGlmaWVkIGFmdGVyd2FyZHMgdXNpbmcgdW5pdGFyeSBmdW5jdGlvbiBAcmVmIExMX1JUQ19BTE1BX1NldE1hc2soKSBmb3IgQUxBUk0gQQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBAcmVmIExMX1JUQ19BTE1CX1NldE1hc2soKSBmb3IgQUxBUk0gQgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBAcmVmIExMX1JUQ19BTE1CX1NldE1hc2soKSBmb3IgQUxBUk0gQi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKICAgdWludDMyX3QgQWxhcm1EYXRlV2Vla0RheVNlbDsgIC8qITwgU3BlY2lmaWVzIHRoZSBSVEMgQWxhcm0gaXMgb24gZGF5IG9yIFdlZWtEYXkuCkBAIC0yMDQsOCArMjA0LDggQEAKIC8qKiBAZGVmZ3JvdXAgUlRDX0xMX0VDX0ZPUk1BVCBGT1JNQVQKICAgKiBAewogICAqLwotI2RlZmluZSBMTF9SVENfRk9STUFUX0JJTiAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAwVSAvKiE8IEJpbmFyeSBkYXRhIGZvcm1hdCAqLwotI2RlZmluZSBMTF9SVENfRk9STUFUX0JDRCAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAxVSAvKiE8IEJDRCBkYXRhIGZvcm1hdCAqLworI2RlZmluZSBMTF9SVENfRk9STUFUX0JJTiAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDBVIC8qITwgQmluYXJ5IGRhdGEgZm9ybWF0ICovCisjZGVmaW5lIExMX1JUQ19GT1JNQVRfQkNEICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMVUgLyohPCBCQ0QgZGF0YSBmb3JtYXQgKi8KIC8qKgogICAqIEB9CiAgICovCkBAIC0yMzQsOCArMjM0LDYgQEAKICAgKiBAYnJpZWYgICAgRmxhZ3MgZGVmaW5lcyB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIExMX1JUQ19SZWFkUmVnIGZ1bmN0aW9uCiAgICogQHsKICAgKi8KLSNkZWZpbmUgTExfUlRDX0lTUl9UQU1QM0YgICAgICAgICAgICAgICAgICBSVENfSVNSX1RBTVAzRgotI2RlZmluZSBMTF9SVENfSVNSX1RBTVAyRiAgICAgICAgICAgICAgICAgIFJUQ19JU1JfVEFNUDJGCiAjZGVmaW5lIExMX1JUQ19JU1JfVEFNUDFGICAgICAgICAgICAgICAgICAgUlRDX0lTUl9UQU1QMUYKICNkZWZpbmUgTExfUlRDX0lTUl9UU09WRiAgICAgICAgICAgICAgICAgICBSVENfSVNSX1RTT1ZGCiAjZGVmaW5lIExMX1JUQ19JU1JfVFNGICAgICAgICAgICAgICAgICAgICAgUlRDX0lTUl9UU0YKQEAgLTM0Niw3ICszNDQsNiBAQAogICAqIEB9CiAgICovCiAKLQogLyoqIEBkZWZncm91cCBSVENfTExfRUNfQUxNQV9NQVNLICBBTEFSTUEgTUFTSwogICAqIEB7CiAgICovCkBAIC0zNzIsMTEgKzM2OSwxMSBAQAogLyoqIEBkZWZncm91cCBSVENfTExfRUNfQUxNQl9NQVNLICBBTEFSTUIgTUFTSwogICAqIEB7CiAgICovCi0jZGVmaW5lIExMX1JUQ19BTE1CX01BU0tfTk9ORSAgICAgICAgICAgICAgMHgwMDAwMDAwMFUgICAgICAgICAgICAgLyohPCBObyBtYXNrcyBhcHBsaWVkIG9uIEFsYXJtIEIqLworI2RlZmluZSBMTF9SVENfQUxNQl9NQVNLX05PTkUgICAgICAgICAgICAgIDB4MDAwMDAwMDBVICAgICAgICAgICAgIC8qITwgTm8gbWFza3MgYXBwbGllZCBvbiBBbGFybSBCICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIExMX1JUQ19BTE1CX01BU0tfREFURVdFRUtEQVkgICAgICAgUlRDX0FMUk1CUl9NU0s0ICAgICAgICAgLyohPCBEYXRlL2RheSBkbyBub3QgY2FyZSBpbiBBbGFybSBCIGNvbXBhcmlzb24gKi8KLSNkZWZpbmUgTExfUlRDX0FMTUJfTUFTS19IT1VSUyAgICAgICAgICAgICBSVENfQUxSTUJSX01TSzMgICAgICAgICAvKiE8IEhvdXJzIGRvIG5vdCBjYXJlIGluIEFsYXJtIEIgY29tcGFyaXNvbiAqLwotI2RlZmluZSBMTF9SVENfQUxNQl9NQVNLX01JTlVURVMgICAgICAgICAgIFJUQ19BTFJNQlJfTVNLMiAgICAgICAgIC8qITwgTWludXRlcyBkbyBub3QgY2FyZSBpbiBBbGFybSBCIGNvbXBhcmlzb24gKi8KLSNkZWZpbmUgTExfUlRDX0FMTUJfTUFTS19TRUNPTkRTICAgICAgICAgICBSVENfQUxSTUJSX01TSzEgICAgICAgICAvKiE8IFNlY29uZHMgZG8gbm90IGNhcmUgaW4gQWxhcm0gQiBjb21wYXJpc29uICovCisjZGVmaW5lIExMX1JUQ19BTE1CX01BU0tfSE9VUlMgICAgICAgICAgICAgUlRDX0FMUk1CUl9NU0szICAgICAgICAgLyohPCBIb3VycyBkbyBub3QgY2FyZSBpbiBBbGFybSBCIGNvbXBhcmlzb24gICAgKi8KKyNkZWZpbmUgTExfUlRDX0FMTUJfTUFTS19NSU5VVEVTICAgICAgICAgICBSVENfQUxSTUJSX01TSzIgICAgICAgICAvKiE8IE1pbnV0ZXMgZG8gbm90IGNhcmUgaW4gQWxhcm0gQiBjb21wYXJpc29uICAqLworI2RlZmluZSBMTF9SVENfQUxNQl9NQVNLX1NFQ09ORFMgICAgICAgICAgIFJUQ19BTFJNQlJfTVNLMSAgICAgICAgIC8qITwgU2Vjb25kcyBkbyBub3QgY2FyZSBpbiBBbGFybSBCIGNvbXBhcmlzb24gICovCiAjZGVmaW5lIExMX1JUQ19BTE1CX01BU0tfQUxMICAgICAgICAgICAgICAgKFJUQ19BTFJNQlJfTVNLNCB8IFJUQ19BTFJNQlJfTVNLMyB8IFJUQ19BTFJNQlJfTVNLMiB8IFJUQ19BTFJNQlJfTVNLMSkgLyohPCBNYXNrcyBhbGwgKi8KIC8qKgogICAqIEB9CkBAIC00MTcsNjkgKzQxNCwxMCBAQAogICAqIEB9CiAgICovCiAKLS8qKiBAZGVmZ3JvdXAgUlRDX0xMX0VDX1RBTVBFUl9NQVNLICBUQU1QRVIgTUFTSwotICAqIEB7Ci0gICovCi0jZGVmaW5lIExMX1JUQ19UQU1QRVJfTUFTS19UQU1QRVIxICAgICAgICAgUlRDX1RBRkNSX1RBTVAxTUYgLyohPCBUYW1wZXIgMSBldmVudCBnZW5lcmF0ZXMgYSB0cmlnZ2VyIGV2ZW50LiBUQU1QMUYgaXMgbWFza2VkIGFuZCBpbnRlcm5hbGx5IGNsZWFyZWQgYnkgaGFyZHdhcmUuVGhlIGJhY2t1cCByZWdpc3RlcnMgYXJlIG5vdCBlcmFzZWQgKi8KLS8qKgotICAqIEB9Ci0gICovCi0KLS8qKiBAZGVmZ3JvdXAgUlRDX0xMX0VDX1RBTVBFUl9OT0VSQVNFICBUQU1QRVIgTk8gRVJBU0UKLSAgKiBAewotICAqLwotI2RlZmluZSBMTF9SVENfVEFNUEVSX05PRVJBU0VfVEFNUEVSMSAgICAgIFJUQ19UQUZDUl9UQU1QMU5PRVJBU0UgLyohPCBUYW1wZXIgMSBldmVudCBkb2VzIG5vdCBlcmFzZSB0aGUgYmFja3VwIHJlZ2lzdGVycy4gKi8KLS8qKgotICAqIEB9Ci0gICovCi0KLSNpZiBkZWZpbmVkKFJUQ19UQUZDUl9UQU1QUFJDSCkKLS8qKiBAZGVmZ3JvdXAgUlRDX0xMX0VDX1RBTVBFUl9EVVJBVElPTiAgVEFNUEVSIERVUkFUSU9OCi0gICogQHsKLSAgKi8KLSNkZWZpbmUgTExfUlRDX1RBTVBFUl9EVVJBVElPTl8xUlRDQ0xLICAgICAweDAwMDAwMDAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUYW1wZXIgcGlucyBhcmUgcHJlLWNoYXJnZWQgYmVmb3JlIHNhbXBsaW5nIGR1cmluZyAxIFJUQ0NMSyBjeWNsZSAgKi8KLSNkZWZpbmUgTExfUlRDX1RBTVBFUl9EVVJBVElPTl8yUlRDQ0xLICAgICBSVENfVEFGQ1JfVEFNUFBSQ0hfMCAgLyohPCBUYW1wZXIgcGlucyBhcmUgcHJlLWNoYXJnZWQgYmVmb3JlIHNhbXBsaW5nIGR1cmluZyAyIFJUQ0NMSyBjeWNsZXMgKi8KLSNkZWZpbmUgTExfUlRDX1RBTVBFUl9EVVJBVElPTl80UlRDQ0xLICAgICBSVENfVEFGQ1JfVEFNUFBSQ0hfMSAgLyohPCBUYW1wZXIgcGlucyBhcmUgcHJlLWNoYXJnZWQgYmVmb3JlIHNhbXBsaW5nIGR1cmluZyA0IFJUQ0NMSyBjeWNsZXMgKi8KLSNkZWZpbmUgTExfUlRDX1RBTVBFUl9EVVJBVElPTl84UlRDQ0xLICAgICBSVENfVEFGQ1JfVEFNUFBSQ0ggICAgLyohPCBUYW1wZXIgcGlucyBhcmUgcHJlLWNoYXJnZWQgYmVmb3JlIHNhbXBsaW5nIGR1cmluZyA4IFJUQ0NMSyBjeWNsZXMgKi8KLS8qKgotICAqIEB9Ci0gICovCi0jZW5kaWYgLyogUlRDX1RBRkNSX1RBTVBQUkNIICovCi0KLSNpZiBkZWZpbmVkKFJUQ19UQUZDUl9UQU1QRkxUKQotLyoqIEBkZWZncm91cCBSVENfTExfRUNfVEFNUEVSX0ZJTFRFUiAgVEFNUEVSIEZJTFRFUgotICAqIEB7Ci0gICovCi0jZGVmaW5lIExMX1JUQ19UQU1QRVJfRklMVEVSX0RJU0FCTEUgICAgICAgMHgwMDAwMDAwMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRhbXBlciBmaWx0ZXIgaXMgZGlzYWJsZWQgKi8KLSNkZWZpbmUgTExfUlRDX1RBTVBFUl9GSUxURVJfMlNBTVBMRSAgICAgICBSVENfVEFGQ1JfVEFNUEZMVF8wICAgIC8qITwgVGFtcGVyIGlzIGFjdGl2YXRlZCBhZnRlciAyIGNvbnNlY3V0aXZlIHNhbXBsZXMgYXQgdGhlIGFjdGl2ZSBsZXZlbCAqLwotI2RlZmluZSBMTF9SVENfVEFNUEVSX0ZJTFRFUl80U0FNUExFICAgICAgIFJUQ19UQUZDUl9UQU1QRkxUXzEgICAgLyohPCBUYW1wZXIgaXMgYWN0aXZhdGVkIGFmdGVyIDQgY29uc2VjdXRpdmUgc2FtcGxlcyBhdCB0aGUgYWN0aXZlIGxldmVsICovCi0jZGVmaW5lIExMX1JUQ19UQU1QRVJfRklMVEVSXzhTQU1QTEUgICAgICAgUlRDX1RBRkNSX1RBTVBGTFQgICAgICAvKiE8IFRhbXBlciBpcyBhY3RpdmF0ZWQgYWZ0ZXIgOCBjb25zZWN1dGl2ZSBzYW1wbGVzIGF0IHRoZSBhY3RpdmUgbGV2ZWwuICovCi0vKioKLSAgKiBAfQotICAqLwotI2VuZGlmIC8qIFJUQ19UQUZDUl9UQU1QRkxUICovCi0KLSNpZiBkZWZpbmVkKFJUQ19UQUZDUl9UQU1QRlJFUSkKLS8qKiBAZGVmZ3JvdXAgUlRDX0xMX0VDX1RBTVBFUl9TQU1QTEZSRVFESVYgIFRBTVBFUiBTQU1QTElORyBGUkVRVUVOQ1kgRElWSURFUgotICAqIEB7Ci0gICovCi0jZGVmaW5lIExMX1JUQ19UQU1QRVJfU0FNUExGUkVRRElWXzMyNzY4ICAgMHgwMDAwMDAwMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVhY2ggb2YgdGhlIHRhbXBlciBpbnB1dHMgYXJlIHNhbXBsZWQgd2l0aCBhIGZyZXF1ZW5jeSA9ICBSVENDTEsgLyAzMjc2OCAqLwotI2RlZmluZSBMTF9SVENfVEFNUEVSX1NBTVBMRlJFUURJVl8xNjM4NCAgIFJUQ19UQUZDUl9UQU1QRlJFUV8wICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFYWNoIG9mIHRoZSB0YW1wZXIgaW5wdXRzIGFyZSBzYW1wbGVkIHdpdGggYSBmcmVxdWVuY3kgPSAgUlRDQ0xLIC8gMTYzODQgKi8KLSNkZWZpbmUgTExfUlRDX1RBTVBFUl9TQU1QTEZSRVFESVZfODE5MiAgICBSVENfVEFGQ1JfVEFNUEZSRVFfMSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRWFjaCBvZiB0aGUgdGFtcGVyIGlucHV0cyBhcmUgc2FtcGxlZCB3aXRoIGEgZnJlcXVlbmN5ID0gIFJUQ0NMSyAvIDgxOTIgKi8KLSNkZWZpbmUgTExfUlRDX1RBTVBFUl9TQU1QTEZSRVFESVZfNDA5NiAgICAoUlRDX1RBRkNSX1RBTVBGUkVRXzEgfCBSVENfVEFGQ1JfVEFNUEZSRVFfMCkgLyohPCBFYWNoIG9mIHRoZSB0YW1wZXIgaW5wdXRzIGFyZSBzYW1wbGVkIHdpdGggYSBmcmVxdWVuY3kgPSAgUlRDQ0xLIC8gNDA5NiAqLwotI2RlZmluZSBMTF9SVENfVEFNUEVSX1NBTVBMRlJFUURJVl8yMDQ4ICAgIFJUQ19UQUZDUl9UQU1QRlJFUV8yICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFYWNoIG9mIHRoZSB0YW1wZXIgaW5wdXRzIGFyZSBzYW1wbGVkIHdpdGggYSBmcmVxdWVuY3kgPSAgUlRDQ0xLIC8gMjA0OCAqLwotI2RlZmluZSBMTF9SVENfVEFNUEVSX1NBTVBMRlJFUURJVl8xMDI0ICAgIChSVENfVEFGQ1JfVEFNUEZSRVFfMiB8IFJUQ19UQUZDUl9UQU1QRlJFUV8wKSAvKiE8IEVhY2ggb2YgdGhlIHRhbXBlciBpbnB1dHMgYXJlIHNhbXBsZWQgd2l0aCBhIGZyZXF1ZW5jeSA9ICBSVENDTEsgLyAxMDI0ICovCi0jZGVmaW5lIExMX1JUQ19UQU1QRVJfU0FNUExGUkVRRElWXzUxMiAgICAgKFJUQ19UQUZDUl9UQU1QRlJFUV8yIHwgUlRDX1RBRkNSX1RBTVBGUkVRXzEpIC8qITwgRWFjaCBvZiB0aGUgdGFtcGVyIGlucHV0cyBhcmUgc2FtcGxlZCB3aXRoIGEgZnJlcXVlbmN5ID0gIFJUQ0NMSyAvIDUxMiAqLwotI2RlZmluZSBMTF9SVENfVEFNUEVSX1NBTVBMRlJFUURJVl8yNTYgICAgIFJUQ19UQUZDUl9UQU1QRlJFUSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFYWNoIG9mIHRoZSB0YW1wZXIgaW5wdXRzIGFyZSBzYW1wbGVkIHdpdGggYSBmcmVxdWVuY3kgPSAgUlRDQ0xLIC8gMjU2ICovCi0vKioKLSAgKiBAfQotICAqLwotI2VuZGlmIC8qIFJUQ19UQUZDUl9UQU1QRlJFUSAqLwotCiAvKiogQGRlZmdyb3VwIFJUQ19MTF9FQ19UQU1QRVJfQUNUSVZFTEVWRUwgIFRBTVBFUiBBQ1RJVkUgTEVWRUwKICAgKiBAewogICAqLwotI2RlZmluZSBMTF9SVENfVEFNUEVSX0FDVElWRUxFVkVMX1RBTVAxICAgIFJUQ19UQUZDUl9UQU1QMVRSRyAvKiE8IFJUQ19UQU1QMSBpbnB1dCBmYWxsaW5nIGVkZ2UgKGlmIFRBTVBGTFQgPSAwMCkgb3Igc3RheWluZyBoaWdoIChpZiBUQU1QRkxUICE9IDAwKSB0cmlnZ2VycyBhIHRhbXBlciBkZXRlY3Rpb24gZXZlbnQqLworI2RlZmluZSBMTF9SVENfVEFNUEVSX0FDVElWRUxFVkVMX1RBTVAxICAgIFJUQ19UQUZDUl9UQU1QMVRSRyAvKiE8IFJUQ19UQU1QMSBpbnB1dCBmYWxsaW5nIGVkZ2UgdHJpZ2dlcnMgYSB0YW1wZXIgZGV0ZWN0aW9uIGV2ZW50ICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtNTA1LDcgKzQ0Myw2IEBACiAjZGVmaW5lIExMX1JUQ19CS1BfRFIyICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMlUKICNkZWZpbmUgTExfUlRDX0JLUF9EUjMgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzVQogI2RlZmluZSBMTF9SVENfQktQX0RSNCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDRVCi0jaWYgUlRDX0JLUF9OVU1CRVIgPiA1CiAjZGVmaW5lIExMX1JUQ19CS1BfRFI1ICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNVUKICNkZWZpbmUgTExfUlRDX0JLUF9EUjYgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA2VQogI2RlZmluZSBMTF9SVENfQktQX0RSNyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDdVCkBAIC01MTcsMTQgKzQ1NCwxMCBAQAogI2RlZmluZSBMTF9SVENfQktQX0RSMTMgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMERVCiAjZGVmaW5lIExMX1JUQ19CS1BfRFIxNCAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRVUKICNkZWZpbmUgTExfUlRDX0JLUF9EUjE1ICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGVQotI2VuZGlmIC8qIFJUQ19CS1BfTlVNQkVSID4gNSAqLwotCi0jaWYgUlRDX0JLUF9OVU1CRVIgPiAxNgogI2RlZmluZSBMTF9SVENfQktQX0RSMTYgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTBVCiAjZGVmaW5lIExMX1JUQ19CS1BfRFIxNyAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMVUKICNkZWZpbmUgTExfUlRDX0JLUF9EUjE4ICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEyVQogI2RlZmluZSBMTF9SVENfQktQX0RSMTkgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTNVCi0jZW5kaWYgLyogUlRDX0JLUF9OVU1CRVIgPiAxNiAqLwogLyoqCiAgICogQH0KICAgKi8KQEAgLTExNDUsMTIgKzEwNzgsMTIgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX1JUQ19USU1FX0NvbmZpZyhSVENfVHlwZURlZiAqUlRDeCwgdWludDMyX3QgRm9ybWF0MTJfMjQsIHVpbnQzMl90IEhvdXJzLCB1aW50MzJfdCBNaW51dGVzLCB1aW50MzJfdCBTZWNvbmRzKQogewotICByZWdpc3RlciB1aW50MzJfdCB0ZW1wID0gMFU7CisgIHVpbnQzMl90IHRlbXA7CiAKLSAgdGVtcCA9IEZvcm1hdDEyXzI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBcCi0gICAgICAgICAoKChIb3VycyAmIDB4RjBVKSA8PCAoUlRDX1RSX0hUX1BvcyAtIDRVKSkgfCAoKEhvdXJzICYgMHgwRlUpIDw8IFJUQ19UUl9IVV9Qb3MpKSAgICAgfCBcCisgIHRlbXAgPSBGb3JtYXQxMl8yNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFwKKyAgICAgICAgICgoKEhvdXJzICAgJiAweEYwVSkgPDwgKFJUQ19UUl9IVF9Qb3MgIC0gNFUpKSB8ICgoSG91cnMgJiAweDBGVSkgPDwgUlRDX1RSX0hVX1BvcykpICAgIHwgXAogICAgICAgICAgKCgoTWludXRlcyAmIDB4RjBVKSA8PCAoUlRDX1RSX01OVF9Qb3MgLSA0VSkpIHwgKChNaW51dGVzICYgMHgwRlUpIDw8IFJUQ19UUl9NTlVfUG9zKSkgfCBcCi0gICAgICAgICAoKChTZWNvbmRzICYgMHhGMFUpIDw8IChSVENfVFJfU1RfUG9zIC0gNFUpKSB8ICgoU2Vjb25kcyAmIDB4MEZVKSA8PCBSVENfVFJfU1VfUG9zKSk7CisgICAgICAgICAoKChTZWNvbmRzICYgMHhGMFUpIDw8IChSVENfVFJfU1RfUG9zICAtIDRVKSkgfCAoKFNlY29uZHMgJiAweDBGVSkgPDwgUlRDX1RSX1NVX1BvcykpOwogICBNT0RJRllfUkVHKFJUQ3gtPlRSLCAoUlRDX1RSX1BNIHwgUlRDX1RSX0hUIHwgUlRDX1RSX0hVIHwgUlRDX1RSX01OVCB8IFJUQ19UUl9NTlUgfCBSVENfVFJfU1QgfCBSVENfVFJfU1UpLCB0ZW1wKTsKIH0KIApAQCAtMTE3MywxMiArMTEwNiw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfUlRDX1RJTUVfR2V0KFJUQ19UeXBlRGVmICpSVEN4KQogewotICByZWdpc3RlciB1aW50MzJfdCB0ZW1wID0gMFU7Ci0KLSAgdGVtcCA9IFJFQURfQklUKFJUQ3gtPlRSLCAoUlRDX1RSX0hUIHwgUlRDX1RSX0hVIHwgUlRDX1RSX01OVCB8IFJUQ19UUl9NTlUgfCBSVENfVFJfU1QgfCBSVENfVFJfU1UpKTsKLSAgcmV0dXJuICh1aW50MzJfdCkoKCgoKCh0ZW1wICYgUlRDX1RSX0hUKSA+PiBSVENfVFJfSFRfUG9zKSA8PCA0VSkgfCAoKHRlbXAgJiBSVENfVFJfSFUpID4+IFJUQ19UUl9IVV9Qb3MpKSA8PCBSVENfT0ZGU0VUX0hPVVIpIHwgIFwKLSAgICAgICAgICAgICAgICAgICAgKCgoKCh0ZW1wICYgUlRDX1RSX01OVCkgPj4gUlRDX1RSX01OVF9Qb3MpIDw8IDRVKSB8ICgodGVtcCAmIFJUQ19UUl9NTlUpID4+IFJUQ19UUl9NTlVfUG9zKSkgPDwgUlRDX09GRlNFVF9NSU5VVEUpIHwgXAotICAgICAgICAgICAgICAgICAgICAoKCgodGVtcCAmIFJUQ19UUl9TVCkgPj4gUlRDX1RSX1NUX1BvcykgPDwgNFUpIHwgKCh0ZW1wICYgUlRDX1RSX1NVKSA+PiBSVENfVFJfU1VfUG9zKSkpOworICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChSVEN4LT5UUiwgKFJUQ19UUl9IVCB8IFJUQ19UUl9IVSB8IFJUQ19UUl9NTlQgfCBSVENfVFJfTU5VIHwgUlRDX1RSX1NUIHwgUlRDX1RSX1NVKSkpOwogfQogCiAvKioKQEAgLTEyMTMsNyArMTE0MSw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfUlRDX1RJTUVfSXNEYXlMaWdodFN0b3JlRW5hYmxlZChSVENfVHlwZURlZiAqUlRDeCkKIHsKLSAgcmV0dXJuIChSRUFEX0JJVChSVEN4LT5DUiwgUlRDX0NSX0JLUCkgPT0gKFJUQ19DUl9CS1ApKTsKKyAgcmV0dXJuICgoUkVBRF9CSVQoUlRDeC0+Q1IsIFJUQ19DUl9CS1ApID09IChSVENfQ1JfQktQKSkgPyAxVUwgOiAwVUwpOwogfQogCiAvKioKQEAgLTEyNDAsOCArMTE2OCw2IEBACiAgIFNFVF9CSVQoUlRDeC0+Q1IsIFJUQ19DUl9BREQxSCk7CiB9CiAKLQotCiAvKioKICAgKiBAfQogICAqLwpAQCAtMTQ0MCwxMiArMTM2NiwxMiBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfUlRDX0RBVEVfQ29uZmlnKFJUQ19UeXBlRGVmICpSVEN4LCB1aW50MzJfdCBXZWVrRGF5LCB1aW50MzJfdCBEYXksIHVpbnQzMl90IE1vbnRoLCB1aW50MzJfdCBZZWFyKQogewotICByZWdpc3RlciB1aW50MzJfdCB0ZW1wID0gMFU7CisgIHVpbnQzMl90IHRlbXA7CiAKLSAgdGVtcCA9IChXZWVrRGF5IDw8IFJUQ19EUl9XRFVfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBcCi0gICAgICAgICAoKChZZWFyICYgMHhGMFUpIDw8IChSVENfRFJfWVRfUG9zIC0gNFUpKSB8ICgoWWVhciAmIDB4MEZVKSA8PCBSVENfRFJfWVVfUG9zKSkgICB8IFwKKyAgdGVtcCA9ICggIFdlZWtEYXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgUlRDX0RSX1dEVV9Qb3MpIHwgXAorICAgICAgICAgKCgoWWVhciAgJiAweEYwVSkgPDwgKFJUQ19EUl9ZVF9Qb3MgLSA0VSkpIHwgKChZZWFyICAmIDB4MEZVKSA8PCBSVENfRFJfWVVfUG9zKSkgfCBcCiAgICAgICAgICAoKChNb250aCAmIDB4RjBVKSA8PCAoUlRDX0RSX01UX1BvcyAtIDRVKSkgfCAoKE1vbnRoICYgMHgwRlUpIDw8IFJUQ19EUl9NVV9Qb3MpKSB8IFwKLSAgICAgICAgICgoKERheSAmIDB4RjBVKSA8PCAoUlRDX0RSX0RUX1BvcyAtIDRVKSkgfCAoKERheSAmIDB4MEZVKSA8PCBSVENfRFJfRFVfUG9zKSk7CisgICAgICAgICAoKChEYXkgICAmIDB4RjBVKSA8PCAoUlRDX0RSX0RUX1BvcyAtIDRVKSkgfCAoKERheSAgICYgMHgwRlUpIDw8IFJUQ19EUl9EVV9Qb3MpKTsKIAogICBNT0RJRllfUkVHKFJUQ3gtPkRSLCAoUlRDX0RSX1dEVSB8IFJUQ19EUl9NVCB8IFJUQ19EUl9NVSB8IFJUQ19EUl9EVCB8IFJUQ19EUl9EVSB8IFJUQ19EUl9ZVCB8IFJUQ19EUl9ZVSksIHRlbXApOwogfQpAQCAtMTQ2OCwxMyArMTM5NCwxNCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1JUQ19EQVRFX0dldChSVENfVHlwZURlZiAqUlRDeCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgdGVtcCA9IDBVOworICB1aW50MzJfdCB0ZW1wOwogCiAgIHRlbXAgPSBSRUFEX0JJVChSVEN4LT5EUiwgKFJUQ19EUl9XRFUgfCBSVENfRFJfTVQgfCBSVENfRFJfTVUgfCBSVENfRFJfRFQgfCBSVENfRFJfRFUgfCBSVENfRFJfWVQgfCBSVENfRFJfWVUpKTsKLSAgcmV0dXJuICh1aW50MzJfdCkoKCgodGVtcCAmIFJUQ19EUl9XRFUpID4+IFJUQ19EUl9XRFVfUG9zKSA8PCBSVENfT0ZGU0VUX1dFRUtEQVkpIHwgXAotICAgICAgICAgICAgICAgICAgICAoKCgoKHRlbXAgJiBSVENfRFJfRFQpID4+IFJUQ19EUl9EVF9Qb3MpIDw8IDRVKSB8ICgodGVtcCAmIFJUQ19EUl9EVSkgPj4gUlRDX0RSX0RVX1BvcykpIDw8IFJUQ19PRkZTRVRfREFZKSB8IFwKLSAgICAgICAgICAgICAgICAgICAgKCgoKCh0ZW1wICYgUlRDX0RSX01UKSA+PiBSVENfRFJfTVRfUG9zKSA8PCA0VSkgfCAoKHRlbXAgJiBSVENfRFJfTVUpID4+IFJUQ19EUl9NVV9Qb3MpKSA8PCBSVENfT0ZGU0VUX01PTlRIKSB8IFwKLSAgICAgICAgICAgICAgICAgICAgKCgoKHRlbXAgJiBSVENfRFJfWVQpID4+IFJUQ19EUl9ZVF9Qb3MpIDw8IDRVKSB8ICgodGVtcCAmIFJUQ19EUl9ZVSkgPj4gUlRDX0RSX1lVX1BvcykpKTsKKworICByZXR1cm4gKHVpbnQzMl90KSgoKCh0ZW1wICYgICAgICAgICAgICAgIFJUQ19EUl9XRFUpID4+IFJUQ19EUl9XRFVfUG9zKSA8PCBSVENfT0ZGU0VUX1dFRUtEQVkpIHwgXAorICAgICAgICAgICAgICAgICAgICAoKCh0ZW1wICYgKFJUQ19EUl9EVCB8IFJUQ19EUl9EVSkpID4+IFJUQ19EUl9EVV9Qb3MpICA8PCBSVENfT0ZGU0VUX0RBWSkgICAgIHwgXAorICAgICAgICAgICAgICAgICAgICAoKCh0ZW1wICYgKFJUQ19EUl9NVCB8IFJUQ19EUl9NVSkpID4+IFJUQ19EUl9NVV9Qb3MpICA8PCBSVENfT0ZGU0VUX01PTlRIKSAgIHwgXAorICAgICAgICAgICAgICAgICAgICAgKCh0ZW1wICYgKFJUQ19EUl9ZVCB8IFJUQ19EUl9ZVSkpID4+IFJUQ19EUl9ZVV9Qb3MpKTsKIH0KIAogLyoqCkBAIC0xNzY4LDExICsxNjk1LDEyIEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9SVENfQUxNQV9Db25maWdUaW1lKFJUQ19UeXBlRGVmICpSVEN4LCB1aW50MzJfdCBGb3JtYXQxMl8yNCwgdWludDMyX3QgSG91cnMsIHVpbnQzMl90IE1pbnV0ZXMsIHVpbnQzMl90IFNlY29uZHMpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IHRlbXAgPSAwVTsKKyAgdWludDMyX3QgdGVtcDsKIAotICB0ZW1wID0gRm9ybWF0MTJfMjQgfCAoKChIb3VycyAmIDB4RjBVKSA8PCAoUlRDX0FMUk1BUl9IVF9Qb3MgLSA0VSkpIHwgKChIb3VycyAmIDB4MEZVKSA8PCBSVENfQUxSTUFSX0hVX1BvcykpICAgIHwgXAorICB0ZW1wID0gRm9ybWF0MTJfMjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFwKKyAgICAgICAgICgoKEhvdXJzICAgJiAweEYwVSkgPDwgKFJUQ19BTFJNQVJfSFRfUG9zICAtIDRVKSkgfCAoKEhvdXJzICAgJiAweDBGVSkgPDwgUlRDX0FMUk1BUl9IVV9Qb3MpKSAgfCBcCiAgICAgICAgICAoKChNaW51dGVzICYgMHhGMFUpIDw8IChSVENfQUxSTUFSX01OVF9Qb3MgLSA0VSkpIHwgKChNaW51dGVzICYgMHgwRlUpIDw8IFJUQ19BTFJNQVJfTU5VX1BvcykpIHwgXAotICAgICAgICAgKCgoU2Vjb25kcyAmIDB4RjBVKSA8PCAoUlRDX0FMUk1BUl9TVF9Qb3MgLSA0VSkpIHwgKChTZWNvbmRzICYgMHgwRlUpIDw8IFJUQ19BTFJNQVJfU1VfUG9zKSk7CisgICAgICAgICAoKChTZWNvbmRzICYgMHhGMFUpIDw8IChSVENfQUxSTUFSX1NUX1BvcyAgLSA0VSkpIHwgKChTZWNvbmRzICYgMHgwRlUpIDw8IFJUQ19BTFJNQVJfU1VfUG9zKSk7CiAKICAgTU9ESUZZX1JFRyhSVEN4LT5BTFJNQVIsIFJUQ19BTFJNQVJfUE0gfCBSVENfQUxSTUFSX0hUIHwgUlRDX0FMUk1BUl9IVSB8IFJUQ19BTFJNQVJfTU5UIHwgUlRDX0FMUk1BUl9NTlUgfCBSVENfQUxSTUFSX1NUIHwgUlRDX0FMUk1BUl9TVSwgdGVtcCk7CiB9CkBAIC0xNzk1LDcgKzE3MjMsNiBAQAogICByZXR1cm4gKHVpbnQzMl90KSgoTExfUlRDX0FMTUFfR2V0SG91cihSVEN4KSA8PCBSVENfT0ZGU0VUX0hPVVIpIHwgKExMX1JUQ19BTE1BX0dldE1pbnV0ZShSVEN4KSA8PCBSVENfT0ZGU0VUX01JTlVURSkgfCBMTF9SVENfQUxNQV9HZXRTZWNvbmQoUlRDeCkpOwogfQogCi0KIC8qKgogICAqIEB9CiAgICovCkBAIC0yMDY0LDEwICsxOTkxLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9SVENfQUxNQl9HZXRTZWNvbmQoUlRDX1R5cGVEZWYgKlJUQ3gpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IHRlbXAgPSAwVTsKLQotICB0ZW1wID0gUkVBRF9CSVQoUlRDeC0+QUxSTUJSLCAoUlRDX0FMUk1CUl9TVCB8IFJUQ19BTFJNQlJfU1UpKTsKLSAgcmV0dXJuICh1aW50MzJfdCkoKCgodGVtcCAmIFJUQ19BTFJNQlJfU1QpID4+IFJUQ19BTFJNQlJfU1RfUG9zKSA8PCA0VSkgfCAoKHRlbXAgJiBSVENfQUxSTUJSX1NVKSA+PiBSVENfQUxSTUJSX1NVX1BvcykpOworICByZXR1cm4gKHVpbnQzMl90KSgoUkVBRF9CSVQoUlRDeC0+QUxSTUJSLCAoUlRDX0FMUk1CUl9TVCB8IFJUQ19BTFJNQlJfU1UpKSkgPj4gUlRDX0FMUk1CUl9TVV9Qb3MpOwogfQogCiAvKioKQEAgLTIwOTAsMTEgKzIwMTQsMTIgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX1JUQ19BTE1CX0NvbmZpZ1RpbWUoUlRDX1R5cGVEZWYgKlJUQ3gsIHVpbnQzMl90IEZvcm1hdDEyXzI0LCB1aW50MzJfdCBIb3VycywgdWludDMyX3QgTWludXRlcywgdWludDMyX3QgU2Vjb25kcykKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgdGVtcCA9IDBVOworICB1aW50MzJfdCB0ZW1wOwogCi0gIHRlbXAgPSBGb3JtYXQxMl8yNCB8ICgoKEhvdXJzICYgMHhGMFUpIDw8IChSVENfQUxSTUJSX0hUX1BvcyAtIDRVKSkgfCAoKEhvdXJzICYgMHgwRlUpIDw8IFJUQ19BTFJNQlJfSFVfUG9zKSkgICAgfCBcCisgIHRlbXAgPSBGb3JtYXQxMl8yNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgXAorICAgICAgICAgKCgoSG91cnMgICAmIDB4RjBVKSA8PCAoUlRDX0FMUk1CUl9IVF9Qb3MgIC0gNFUpKSB8ICgoSG91cnMgICAmIDB4MEZVKSA8PCBSVENfQUxSTUJSX0hVX1BvcykpICB8IFwKICAgICAgICAgICgoKE1pbnV0ZXMgJiAweEYwVSkgPDwgKFJUQ19BTFJNQlJfTU5UX1BvcyAtIDRVKSkgfCAoKE1pbnV0ZXMgJiAweDBGVSkgPDwgUlRDX0FMUk1CUl9NTlVfUG9zKSkgfCBcCi0gICAgICAgICAoKChTZWNvbmRzICYgMHhGMFUpIDw8IChSVENfQUxSTUJSX1NUX1BvcyAtIDRVKSkgfCAoKFNlY29uZHMgJiAweDBGVSkgPDwgUlRDX0FMUk1CUl9TVV9Qb3MpKTsKKyAgICAgICAgICgoKFNlY29uZHMgJiAweEYwVSkgPDwgKFJUQ19BTFJNQlJfU1RfUG9zICAtIDRVKSkgfCAoKFNlY29uZHMgJiAweDBGVSkgPDwgUlRDX0FMUk1CUl9TVV9Qb3MpKTsKIAogICBNT0RJRllfUkVHKFJUQ3gtPkFMUk1CUiwgUlRDX0FMUk1CUl9QTSB8IFJUQ19BTFJNQlJfSFQgfCBSVENfQUxSTUJSX0hVIHwgUlRDX0FMUk1CUl9NTlQgfCBSVENfQUxSTUJSX01OVSB8IFJUQ19BTFJNQlJfU1QgfCBSVENfQUxSTUJSX1NVLCB0ZW1wKTsKIH0KQEAgLTIxMTcsNyArMjA0Miw2IEBACiAgIHJldHVybiAodWludDMyX3QpKChMTF9SVENfQUxNQl9HZXRIb3VyKFJUQ3gpIDw8IFJUQ19PRkZTRVRfSE9VUikgfCAoTExfUlRDX0FMTUJfR2V0TWludXRlKFJUQ3gpIDw8IFJUQ19PRkZTRVRfTUlOVVRFKSB8IExMX1JUQ19BTE1CX0dldFNlY29uZChSVEN4KSk7CiB9CiAKLQogLyoqCiAgICogQH0KICAgKi8KQEAgLTIzMjQsNyArMjI0OCw2IEBACiAgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKFJUQ3gtPlRTRFIsIFJUQ19UU0RSX1dEVSB8IFJUQ19UU0RSX01UIHwgUlRDX1RTRFJfTVUgfCBSVENfVFNEUl9EVCB8IFJUQ19UU0RSX0RVKSk7CiB9CiAKLQogI2lmIGRlZmluZWQoUlRDX1RBRkNSX1RBTVBUUykKIC8qKgogICAqIEBicmllZiAgQWN0aXZhdGUgdGltZXN0YW1wIG9uIHRhbXBlciBkZXRlY3Rpb24gZXZlbnQKQEAgLTIzNTMsMTAgKzIyNzYsMTAgQEAKICAgKiBAYnJpZWYgIFNldCB0aW1lc3RhbXAgUGluCiAgICogQHJtdG9sbCBUQUZDUiAgICAgICBUU0lOU0VMICAgICAgTExfUlRDX1RTX1NldFBpbgogICAqIEBwYXJhbSAgUlRDeCBSVEMgSW5zdGFuY2UKLSAgKiBAcGFyYW0gIFRTUGluIHNwZWNpZmllcyB0aGUgUlRDIFRpbWVTdGFtcCBQaW4uCisgICogQHBhcmFtICBUU1BpbiBzcGVjaWZpZXMgdGhlIFJUQyBUaW1lc3RhbXAgUGluLgogICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6Ci0gICogICAgICAgICAgICBAYXJnIExMX1JUQ19UaW1lU3RhbXBQaW5fRGVmYXVsdDogUlRDX0FGMSBpcyB1c2VkIGFzIFJUQyBUaW1lU3RhbXAuCi0gICogICAgICAgICAgICBAYXJnIExMX1JUQ19UaW1lU3RhbXBQaW5fUG9zMTogUlRDX0FGMiBpcyBzZWxlY3RlZCBhcyBSVEMgVGltZVN0YW1wLgorICAqICAgICAgICAgICAgQGFyZyBMTF9SVENfVGltZVN0YW1wUGluX0RlZmF1bHQ6IFJUQ19BRjEgaXMgdXNlZCBhcyBSVEMgVGltZXN0YW1wIFBpbi4KKyAgKiAgICAgICAgICAgIEBhcmcgTExfUlRDX1RpbWVTdGFtcFBpbl9Qb3MxOiBSVENfQUYyIGlzIHVzZWQgYXMgUlRDIFRpbWVzdGFtcCBQaW4uCiAgICogQHJldHZhbCBOb25lCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9SVENfVFNfU2V0UGluKFJUQ19UeXBlRGVmICpSVEN4LCB1aW50MzJfdCBUU1BpbikKQEAgLTIzNjksMTEgKzIyOTIsMTAgQEAKICAgKiBAcm10b2xsIFRBRkNSICAgICAgIFRTSU5TRUwgICAgICBMTF9SVENfVFNfR2V0UGluCiAgICogQHBhcmFtICBSVEN4IFJUQyBJbnN0YW5jZQogICAqIEByZXR2YWwgUmV0dXJuZWQgdmFsdWUgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKLSAgKiAgICAgICAgICAgIEBhcmcgTExfUlRDX1RpbWVTdGFtcFBpbl9EZWZhdWx0OiBSVENfQUYxIGlzIHVzZWQgYXMgUlRDIFRpbWVTdGFtcCBQaW4uCi0gICogICAgICAgICAgICBAYXJnIExMX1JUQ19UaW1lU3RhbXBQaW5fUG9zMTogUlRDX0FGMiBpcyBzZWxlY3RlZCBhcyBSVEMgVGltZVN0YW1wIFBpbi4KKyAgKiAgICAgICAgICAgIEBhcmcgTExfUlRDX1RpbWVTdGFtcFBpbl9EZWZhdWx0OiBSVENfQUYxIGlzIHVzZWQgYXMgUlRDIFRpbWVzdGFtcCBQaW4uCisgICogICAgICAgICAgICBAYXJnIExMX1JUQ19UaW1lU3RhbXBQaW5fUG9zMTogUlRDX0FGMiBpcyB1c2VkIGFzIFJUQyBUaW1lc3RhbXAgUGluLgogICAqIEByZXR2YWwgTm9uZQogICAqLwotCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfUlRDX1RTX0dldFBpbihSVENfVHlwZURlZiAqUlRDeCkKIHsKICAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoUlRDeC0+VEFGQ1IsIFJUQ19UQUZDUl9UU0lOU0VMKSk7CkBAIC0yNDE1LDEzNyArMjMzNyw2IEBACiAgIENMRUFSX0JJVChSVEN4LT5UQUZDUiwgVGFtcGVyKTsKIH0KIAotI2lmIGRlZmluZWQoUlRDX1RBRkNSX1RBTVBQVURJUykKLS8qKgotICAqIEBicmllZiAgRGlzYWJsZSBSVENfVEFNUHggcHVsbC11cCBkaXNhYmxlIChEaXNhYmxlIHByZWNoYXJnZSBvZiBSVENfVEFNUHggcGlucykKLSAgKiBAcm10b2xsIFRBRkNSICAgICAgIFRBTVBQVURJUyAgICAgTExfUlRDX1RBTVBFUl9EaXNhYmxlUHVsbFVwCi0gICogQHBhcmFtICBSVEN4IFJUQyBJbnN0YW5jZQotICAqIEByZXR2YWwgTm9uZQotICAqLwotX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfUlRDX1RBTVBFUl9EaXNhYmxlUHVsbFVwKFJUQ19UeXBlRGVmICpSVEN4KQotewotICBTRVRfQklUKFJUQ3gtPlRBRkNSLCBSVENfVEFGQ1JfVEFNUFBVRElTKTsKLX0KLQotLyoqCi0gICogQGJyaWVmICBFbmFibGUgUlRDX1RBTVB4IHB1bGwtdXAgZGlzYWJsZSAoIFByZWNoYXJnZSBSVENfVEFNUHggcGlucyBiZWZvcmUgc2FtcGxpbmcpCi0gICogQHJtdG9sbCBUQUZDUiAgICAgICBUQU1QUFVESVMgICAgIExMX1JUQ19UQU1QRVJfRW5hYmxlUHVsbFVwCi0gICogQHBhcmFtICBSVEN4IFJUQyBJbnN0YW5jZQotICAqIEByZXR2YWwgTm9uZQotICAqLwotX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfUlRDX1RBTVBFUl9FbmFibGVQdWxsVXAoUlRDX1R5cGVEZWYgKlJUQ3gpCi17Ci0gIENMRUFSX0JJVChSVEN4LT5UQUZDUiwgUlRDX1RBRkNSX1RBTVBQVURJUyk7Ci19Ci0jZW5kaWYgLyogUlRDX1RBRkNSX1RBTVBQVURJUyAqLwotCi0jaWYgZGVmaW5lZChSVENfVEFGQ1JfVEFNUFBSQ0gpCi0vKioKLSAgKiBAYnJpZWYgIFNldCBSVENfVEFNUHggcHJlY2hhcmdlIGR1cmF0aW9uCi0gICogQHJtdG9sbCBUQUZDUiAgICAgICBUQU1QUFJDSCAgICAgIExMX1JUQ19UQU1QRVJfU2V0UHJlY2hhcmdlCi0gICogQHBhcmFtICBSVEN4IFJUQyBJbnN0YW5jZQotICAqIEBwYXJhbSAgRHVyYXRpb24gVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SVENfVEFNUEVSX0RVUkFUSU9OXzFSVENDTEsKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SVENfVEFNUEVSX0RVUkFUSU9OXzJSVENDTEsKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SVENfVEFNUEVSX0RVUkFUSU9OXzRSVENDTEsKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SVENfVEFNUEVSX0RVUkFUSU9OXzhSVENDTEsKLSAgKiBAcmV0dmFsIE5vbmUKLSAgKi8KLV9fU1RBVElDX0lOTElORSB2b2lkIExMX1JUQ19UQU1QRVJfU2V0UHJlY2hhcmdlKFJUQ19UeXBlRGVmICpSVEN4LCB1aW50MzJfdCBEdXJhdGlvbikKLXsKLSAgTU9ESUZZX1JFRyhSVEN4LT5UQUZDUiwgUlRDX1RBRkNSX1RBTVBQUkNILCBEdXJhdGlvbik7Ci19Ci0KLS8qKgotICAqIEBicmllZiAgR2V0IFJUQ19UQU1QeCBwcmVjaGFyZ2UgZHVyYXRpb24KLSAgKiBAcm10b2xsIFRBRkNSICAgICAgIFRBTVBQUkNIICAgICAgTExfUlRDX1RBTVBFUl9HZXRQcmVjaGFyZ2UKLSAgKiBAcGFyYW0gIFJUQ3ggUlRDIEluc3RhbmNlCi0gICogQHJldHZhbCBSZXR1cm5lZCB2YWx1ZSBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JUQ19UQU1QRVJfRFVSQVRJT05fMVJUQ0NMSwotICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JUQ19UQU1QRVJfRFVSQVRJT05fMlJUQ0NMSwotICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JUQ19UQU1QRVJfRFVSQVRJT05fNFJUQ0NMSwotICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JUQ19UQU1QRVJfRFVSQVRJT05fOFJUQ0NMSwotICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1JUQ19UQU1QRVJfR2V0UHJlY2hhcmdlKFJUQ19UeXBlRGVmICpSVEN4KQotewotICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChSVEN4LT5UQUZDUiwgUlRDX1RBRkNSX1RBTVBQUkNIKSk7Ci19Ci0jZW5kaWYgLyogUlRDX1RBRkNSX1RBTVBQUkNIICovCi0KLSNpZiBkZWZpbmVkKFJUQ19UQUZDUl9UQU1QRkxUKQotLyoqCi0gICogQGJyaWVmICBTZXQgUlRDX1RBTVB4IGZpbHRlciBjb3VudAotICAqIEBybXRvbGwgVEFGQ1IgICAgICAgVEFNUEZMVCAgICAgICBMTF9SVENfVEFNUEVSX1NldEZpbHRlckNvdW50Ci0gICogQHBhcmFtICBSVEN4IFJUQyBJbnN0YW5jZQotICAqIEBwYXJhbSAgRmlsdGVyQ291bnQgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SVENfVEFNUEVSX0ZJTFRFUl9ESVNBQkxFCi0gICogICAgICAgICBAYXJnIEByZWYgTExfUlRDX1RBTVBFUl9GSUxURVJfMlNBTVBMRQotICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JUQ19UQU1QRVJfRklMVEVSXzRTQU1QTEUKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SVENfVEFNUEVSX0ZJTFRFUl84U0FNUExFCi0gICogQHJldHZhbCBOb25lCi0gICovCi1fX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9SVENfVEFNUEVSX1NldEZpbHRlckNvdW50KFJUQ19UeXBlRGVmICpSVEN4LCB1aW50MzJfdCBGaWx0ZXJDb3VudCkKLXsKLSAgTU9ESUZZX1JFRyhSVEN4LT5UQUZDUiwgUlRDX1RBRkNSX1RBTVBGTFQsIEZpbHRlckNvdW50KTsKLX0KLQotLyoqCi0gICogQGJyaWVmICBHZXQgUlRDX1RBTVB4IGZpbHRlciBjb3VudAotICAqIEBybXRvbGwgVEFGQ1IgICAgICAgVEFNUEZMVCAgICAgICBMTF9SVENfVEFNUEVSX0dldEZpbHRlckNvdW50Ci0gICogQHBhcmFtICBSVEN4IFJUQyBJbnN0YW5jZQotICAqIEByZXR2YWwgUmV0dXJuZWQgdmFsdWUgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SVENfVEFNUEVSX0ZJTFRFUl9ESVNBQkxFCi0gICogICAgICAgICBAYXJnIEByZWYgTExfUlRDX1RBTVBFUl9GSUxURVJfMlNBTVBMRQotICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JUQ19UQU1QRVJfRklMVEVSXzRTQU1QTEUKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SVENfVEFNUEVSX0ZJTFRFUl84U0FNUExFCi0gICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfUlRDX1RBTVBFUl9HZXRGaWx0ZXJDb3VudChSVENfVHlwZURlZiAqUlRDeCkKLXsKLSAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoUlRDeC0+VEFGQ1IsIFJUQ19UQUZDUl9UQU1QRkxUKSk7Ci19Ci0jZW5kaWYgLyogUlRDX1RBRkNSX1RBTVBGTFQgKi8KLQotI2lmIGRlZmluZWQoUlRDX1RBRkNSX1RBTVBGUkVRKQotLyoqCi0gICogQGJyaWVmICBTZXQgVGFtcGVyIHNhbXBsaW5nIGZyZXF1ZW5jeQotICAqIEBybXRvbGwgVEFGQ1IgICAgICAgVEFNUEZSRVEgICAgICBMTF9SVENfVEFNUEVSX1NldFNhbXBsaW5nRnJlcQotICAqIEBwYXJhbSAgUlRDeCBSVEMgSW5zdGFuY2UKLSAgKiBAcGFyYW0gIFNhbXBsaW5nRnJlcSBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JUQ19UQU1QRVJfU0FNUExGUkVRRElWXzMyNzY4Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfUlRDX1RBTVBFUl9TQU1QTEZSRVFESVZfMTYzODQKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SVENfVEFNUEVSX1NBTVBMRlJFUURJVl84MTkyCi0gICogICAgICAgICBAYXJnIEByZWYgTExfUlRDX1RBTVBFUl9TQU1QTEZSRVFESVZfNDA5NgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JUQ19UQU1QRVJfU0FNUExGUkVRRElWXzIwNDgKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SVENfVEFNUEVSX1NBTVBMRlJFUURJVl8xMDI0Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfUlRDX1RBTVBFUl9TQU1QTEZSRVFESVZfNTEyCi0gICogICAgICAgICBAYXJnIEByZWYgTExfUlRDX1RBTVBFUl9TQU1QTEZSRVFESVZfMjU2Ci0gICogQHJldHZhbCBOb25lCi0gICovCi1fX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9SVENfVEFNUEVSX1NldFNhbXBsaW5nRnJlcShSVENfVHlwZURlZiAqUlRDeCwgdWludDMyX3QgU2FtcGxpbmdGcmVxKQotewotICBNT0RJRllfUkVHKFJUQ3gtPlRBRkNSLCBSVENfVEFGQ1JfVEFNUEZSRVEsIFNhbXBsaW5nRnJlcSk7Ci19Ci0KLS8qKgotICAqIEBicmllZiAgR2V0IFRhbXBlciBzYW1wbGluZyBmcmVxdWVuY3kKLSAgKiBAcm10b2xsIFRBRkNSICAgICAgIFRBTVBGUkVRICAgICAgTExfUlRDX1RBTVBFUl9HZXRTYW1wbGluZ0ZyZXEKLSAgKiBAcGFyYW0gIFJUQ3ggUlRDIEluc3RhbmNlCi0gICogQHJldHZhbCBSZXR1cm5lZCB2YWx1ZSBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JUQ19UQU1QRVJfU0FNUExGUkVRRElWXzMyNzY4Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfUlRDX1RBTVBFUl9TQU1QTEZSRVFESVZfMTYzODQKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SVENfVEFNUEVSX1NBTVBMRlJFUURJVl84MTkyCi0gICogICAgICAgICBAYXJnIEByZWYgTExfUlRDX1RBTVBFUl9TQU1QTEZSRVFESVZfNDA5NgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JUQ19UQU1QRVJfU0FNUExGUkVRRElWXzIwNDgKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SVENfVEFNUEVSX1NBTVBMRlJFUURJVl8xMDI0Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfUlRDX1RBTVBFUl9TQU1QTEZSRVFESVZfNTEyCi0gICogICAgICAgICBAYXJnIEByZWYgTExfUlRDX1RBTVBFUl9TQU1QTEZSRVFESVZfMjU2Ci0gICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfUlRDX1RBTVBFUl9HZXRTYW1wbGluZ0ZyZXEoUlRDX1R5cGVEZWYgKlJUQ3gpCi17Ci0gIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKFJUQ3gtPlRBRkNSLCBSVENfVEFGQ1JfVEFNUEZSRVEpKTsKLX0KLSNlbmRpZiAvKiBSVENfVEFGQ1JfVEFNUEZSRVEgKi8KLQogLyoqCiAgICogQGJyaWVmICBFbmFibGUgQWN0aXZlIGxldmVsIGZvciBUYW1wZXIgaW5wdXQKICAgKiBAcm10b2xsIFRBRkNSICAgICAgIFRBTVAxVFJHICAgICAgTExfUlRDX1RBTVBFUl9FbmFibGVBY3RpdmVMZXZlbFxuCkBAIC0yNTgwLDggKzIzNzEsOCBAQAogICAqIEBwYXJhbSAgUlRDeCBSVEMgSW5zdGFuY2UKICAgKiBAcGFyYW0gIFRhbXBlclBpbiBzcGVjaWZpZXMgdGhlIFJUQyBUYW1wZXIgUGluLgogICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6Ci0gICogICAgICAgICAgICBAYXJnIExMX1JUQ19UYW1wZXJQaW5fRGVmYXVsdDogUlRDX0FGMSBpcyB1c2VkIGFzIFJUQyBUYW1wZXIuCi0gICogICAgICAgICAgICBAYXJnIExMX1JUQ19UYW1wZXJQaW5fUG9zMTogUlRDX0FGMiBpcyBzZWxlY3RlZCBhcyBSVEMgVGFtcGVyLgorICAqICAgICAgICAgICAgQGFyZyBMTF9SVENfVGFtcGVyUGluX0RlZmF1bHQ6IFJUQ19BRjEgaXMgdXNlZCBhcyBSVEMgVGFtcGVyIFBpbi4KKyAgKiAgICAgICAgICAgIEBhcmcgTExfUlRDX1RhbXBlclBpbl9Qb3MxOiBSVENfQUYyIGlzIHVzZWQgYXMgUlRDIFRhbXBlciBQaW4uCiAgICogQHJldHZhbCBOb25lCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9SVENfVEFNUEVSX1NldFBpbihSVENfVHlwZURlZiAqUlRDeCwgdWludDMyX3QgVGFtcGVyUGluKQpAQCAtMjY0NCwxMyArMjQzNSwxMyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1JUQ19XQUtFVVBfSXNFbmFibGVkKFJUQ19UeXBlRGVmICpSVEN4KQogewotICByZXR1cm4gKFJFQURfQklUKFJUQ3gtPkNSLCBSVENfQ1JfV1VURSkgPT0gKFJUQ19DUl9XVVRFKSk7CisgIHJldHVybiAoKFJFQURfQklUKFJUQ3gtPkNSLCBSVENfQ1JfV1VURSkgPT0gKFJUQ19DUl9XVVRFKSkgPyAxVUwgOiAwVUwpOwogfQogCiAvKioKICAgKiBAYnJpZWYgIFNlbGVjdCBXYWtldXAgY2xvY2sKICAgKiBAbm90ZSAgIEJpdCBpcyB3cml0ZS1wcm90ZWN0ZWQuIEByZWYgTExfUlRDX0Rpc2FibGVXcml0ZVByb3RlY3Rpb24gZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUuCi0gICogQG5vdGUgQml0IGNhbiBiZSB3cml0dGVuIG9ubHkgd2hlbiBSVENfQ1IgV1VURSBiaXQgPSAwIGFuZCBSVENfSVNSIFdVVFdGIGJpdCA9IDEKKyAgKiBAbm90ZSAgIEJpdCBjYW4gYmUgd3JpdHRlbiBvbmx5IHdoZW4gUlRDX0NSIFdVVEUgYml0ID0gMCBhbmQgUlRDX0lTUiBXVVRXRiBiaXQgPSAxCiAgICogQHJtdG9sbCBDUiAgICAgICAgICAgV1VDS1NFTCAgICAgICBMTF9SVENfV0FLRVVQX1NldENsb2NrCiAgICogQHBhcmFtICBSVEN4IFJUQyBJbnN0YW5jZQogICAqIEBwYXJhbSAgV2FrZXVwQ2xvY2sgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKQEAgLTI2ODYsNyArMjQ3Nyw3IEBACiAKIC8qKgogICAqIEBicmllZiAgU2V0IFdha2V1cCBhdXRvLXJlbG9hZCB2YWx1ZQotICAqIEBub3RlIEJpdCBjYW4gYmUgd3JpdHRlbiBvbmx5IHdoZW4gV1VUV0YgaXMgc2V0IHRvIDEgaW4gUlRDX0lTUgorICAqIEBub3RlICAgQml0IGNhbiBiZSB3cml0dGVuIG9ubHkgd2hlbiBXVVRXRiBpcyBzZXQgdG8gMSBpbiBSVENfSVNSCiAgICogQHJtdG9sbCBXVVRSICAgICAgICAgV1VUICAgICAgICAgICBMTF9SVENfV0FLRVVQX1NldEF1dG9SZWxvYWQKICAgKiBAcGFyYW0gIFJUQ3ggUlRDIEluc3RhbmNlCiAgICogQHBhcmFtICBWYWx1ZSBWYWx1ZSBiZXR3ZWVuIE1pbl9EYXRhPTB4MDAgYW5kIE1heF9EYXRhPTB4RkZGRgpAQCAtMjc0NiwxMyArMjUzNywxMyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfUlRDX0JBS19TZXRSZWdpc3RlcihSVENfVHlwZURlZiAqUlRDeCwgdWludDMyX3QgQmFja3VwUmVnaXN0ZXIsIHVpbnQzMl90IERhdGEpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IHRtcCA9IDBVOworICB1aW50MzJfdCB0ZW1wOwogCi0gIHRtcCA9ICh1aW50MzJfdCkoJihSVEN4LT5CS1AwUikpOwotICB0bXAgKz0gKEJhY2t1cFJlZ2lzdGVyICogNFUpOworICB0ZW1wID0gKHVpbnQzMl90KSgmKFJUQ3gtPkJLUDBSKSk7CisgIHRlbXAgKz0gKEJhY2t1cFJlZ2lzdGVyICogNFUpOwogCiAgIC8qIFdyaXRlIHRoZSBzcGVjaWZpZWQgcmVnaXN0ZXIgKi8KLSAgKihfX0lPIHVpbnQzMl90ICopdG1wID0gKHVpbnQzMl90KURhdGE7CisgICooX19JTyB1aW50MzJfdCAqKXRlbXAgPSAodWludDMyX3QpRGF0YTsKIH0KIAogLyoqCkBAIC0yNzg0LDEzICsyNTc1LDEzIEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfUlRDX0JBS19HZXRSZWdpc3RlcihSVENfVHlwZURlZiAqUlRDeCwgdWludDMyX3QgQmFja3VwUmVnaXN0ZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IHRtcCA9IDBVOworICB1aW50MzJfdCB0ZW1wOwogCi0gIHRtcCA9ICh1aW50MzJfdCkoJihSVEN4LT5CS1AwUikpOwotICB0bXAgKz0gKEJhY2t1cFJlZ2lzdGVyICogNFUpOworICB0ZW1wID0gKHVpbnQzMl90KSgmKFJUQ3gtPkJLUDBSKSk7CisgIHRlbXAgKz0gKEJhY2t1cFJlZ2lzdGVyICogNFUpOwogCiAgIC8qIFJlYWQgdGhlIHNwZWNpZmllZCByZWdpc3RlciAqLwotICByZXR1cm4gKCooX19JTyB1aW50MzJfdCAqKXRtcCk7CisgIHJldHVybiAoKihfX0lPIHVpbnQzMl90ICopdGVtcCk7CiB9CiAKIC8qKgpAQCAtMjgwNSwxMSArMjU5NiwxMSBAQAogICAqIEBicmllZiAgU2V0IENhbGlicmF0aW9uIG91dHB1dCBmcmVxdWVuY3kgKDEgSHogb3IgNTEyIEh6KQogICAqIEBub3RlIEJpdHMgYXJlIHdyaXRlLXByb3RlY3RlZC4gQHJlZiBMTF9SVENfRGlzYWJsZVdyaXRlUHJvdGVjdGlvbiBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZS4KICAgKiBAcm10b2xsIENSICAgICAgICAgICBDT0UgICAgICAgICAgIExMX1JUQ19DQUxfU2V0T3V0cHV0RnJlcVxuCi0gICogICAgICAgICBDUiAgICAgICAgICAgQ09TRUwgICAgICAgICBMTF9SVENfQ0FMX1NldE91dHB1dEZyZXEKICAgKiBAcGFyYW0gIFJUQ3ggUlRDIEluc3RhbmNlCiAgICogQHBhcmFtICBGcmVxdWVuY3kgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SVENfQ0FMSUJfT1VUUFVUX05PTkUKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SVENfQ0FMSUJfT1VUUFVUXzUxMkhaCisgICoKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX1JUQ19DQUxfU2V0T3V0cHV0RnJlcShSVENfVHlwZURlZiAqUlRDeCwgdWludDMyX3QgRnJlcXVlbmN5KQpAQCAtMjgyMCwxMSArMjYxMSwxMSBAQAogLyoqCiAgICogQGJyaWVmICBHZXQgQ2FsaWJyYXRpb24gb3V0cHV0IGZyZXF1ZW5jeSAoMSBIeiBvciA1MTIgSHopCiAgICogQHJtdG9sbCBDUiAgICAgICAgICAgQ09FICAgICAgICAgICBMTF9SVENfQ0FMX0dldE91dHB1dEZyZXFcbgotICAqICAgICAgICAgQ1IgICAgICAgICAgIENPU0VMICAgICAgICAgTExfUlRDX0NBTF9HZXRPdXRwdXRGcmVxCiAgICogQHBhcmFtICBSVEN4IFJUQyBJbnN0YW5jZQogICAqIEByZXR2YWwgUmV0dXJuZWQgdmFsdWUgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SVENfQ0FMSUJfT1VUUFVUX05PTkUKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SVENfQ0FMSUJfT1VUUFVUXzUxMkhaCisgICoKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9SVENfQ0FMX0dldE91dHB1dEZyZXEoUlRDX1R5cGVEZWYgKlJUQ3gpCiB7CkBAIC0yOTAxLDcgKzI2OTIsNiBAQAogICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChSVEN4LT5DQUxJQlIsIFJUQ19DQUxJQlJfRENTKSk7CiB9CiAKLQogLyoqCiAgICogQH0KICAgKi8KQEAgLTI5MTAsOSArMjcwMCw2IEBACiAgICogQHsKICAgKi8KIAotCi0KLQogLyoqCiAgICogQGJyaWVmICBHZXQgUlRDX1RBTVAxIGRldGVjdGlvbiBmbGFnCiAgICogQHJtdG9sbCBJU1IgICAgICAgICAgVEFNUDFGICAgICAgICBMTF9SVENfSXNBY3RpdmVGbGFnX1RBTVAxCkBAIC0yOTIxLDcgKzI3MDgsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1JUQ19Jc0FjdGl2ZUZsYWdfVEFNUDEoUlRDX1R5cGVEZWYgKlJUQ3gpCiB7Ci0gIHJldHVybiAoUkVBRF9CSVQoUlRDeC0+SVNSLCBSVENfSVNSX1RBTVAxRikgPT0gKFJUQ19JU1JfVEFNUDFGKSk7CisgIHJldHVybiAoKFJFQURfQklUKFJUQ3gtPklTUiwgUlRDX0lTUl9UQU1QMUYpID09IChSVENfSVNSX1RBTVAxRikpID8gMVVMIDogMFVMKTsKIH0KIAogLyoqCkBAIC0yOTMyLDcgKzI3MTksNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1JUQ19Jc0FjdGl2ZUZsYWdfVFNPVihSVENfVHlwZURlZiAqUlRDeCkKIHsKLSAgcmV0dXJuIChSRUFEX0JJVChSVEN4LT5JU1IsIFJUQ19JU1JfVFNPVkYpID09IChSVENfSVNSX1RTT1ZGKSk7CisgIHJldHVybiAoKFJFQURfQklUKFJUQ3gtPklTUiwgUlRDX0lTUl9UU09WRikgPT0gKFJUQ19JU1JfVFNPVkYpKSA/IDFVTCA6IDBVTCk7CiB9CiAKIC8qKgpAQCAtMjk0Myw3ICsyNzMwLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9SVENfSXNBY3RpdmVGbGFnX1RTKFJUQ19UeXBlRGVmICpSVEN4KQogewotICByZXR1cm4gKFJFQURfQklUKFJUQ3gtPklTUiwgUlRDX0lTUl9UU0YpID09IChSVENfSVNSX1RTRikpOworICByZXR1cm4gKChSRUFEX0JJVChSVEN4LT5JU1IsIFJUQ19JU1JfVFNGKSA9PSAoUlRDX0lTUl9UU0YpKSA/IDFVTCA6IDBVTCk7CiB9CiAKIC8qKgpAQCAtMjk1NCw3ICsyNzQxLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9SVENfSXNBY3RpdmVGbGFnX1dVVChSVENfVHlwZURlZiAqUlRDeCkKIHsKLSAgcmV0dXJuIChSRUFEX0JJVChSVEN4LT5JU1IsIFJUQ19JU1JfV1VURikgPT0gKFJUQ19JU1JfV1VURikpOworICByZXR1cm4gKChSRUFEX0JJVChSVEN4LT5JU1IsIFJUQ19JU1JfV1VURikgPT0gKFJUQ19JU1JfV1VURikpID8gMVVMIDogMFVMKTsKIH0KIAogLyoqCkBAIC0yOTY1LDcgKzI3NTIsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1JUQ19Jc0FjdGl2ZUZsYWdfQUxSQihSVENfVHlwZURlZiAqUlRDeCkKIHsKLSAgcmV0dXJuIChSRUFEX0JJVChSVEN4LT5JU1IsIFJUQ19JU1JfQUxSQkYpID09IChSVENfSVNSX0FMUkJGKSk7CisgIHJldHVybiAoKFJFQURfQklUKFJUQ3gtPklTUiwgUlRDX0lTUl9BTFJCRikgPT0gKFJUQ19JU1JfQUxSQkYpKSA/IDFVTCA6IDBVTCk7CiB9CiAKIC8qKgpAQCAtMjk3NiwxMSArMjc2Myw5IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfUlRDX0lzQWN0aXZlRmxhZ19BTFJBKFJUQ19UeXBlRGVmICpSVEN4KQogewotICByZXR1cm4gKFJFQURfQklUKFJUQ3gtPklTUiwgUlRDX0lTUl9BTFJBRikgPT0gKFJUQ19JU1JfQUxSQUYpKTsKKyAgcmV0dXJuICgoUkVBRF9CSVQoUlRDeC0+SVNSLCBSVENfSVNSX0FMUkFGKSA9PSAoUlRDX0lTUl9BTFJBRikpID8gMVVMIDogMFVMKTsKIH0KIAotCi0KIC8qKgogICAqIEBicmllZiAgQ2xlYXIgUlRDX1RBTVAxIGRldGVjdGlvbiBmbGFnCiAgICogQHJtdG9sbCBJU1IgICAgICAgICAgVEFNUDFGICAgICAgICBMTF9SVENfQ2xlYXJGbGFnX1RBTVAxCkBAIC0zMDU1LDcgKzI4NDAsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1JUQ19Jc0FjdGl2ZUZsYWdfSU5JVChSVENfVHlwZURlZiAqUlRDeCkKIHsKLSAgcmV0dXJuIChSRUFEX0JJVChSVEN4LT5JU1IsIFJUQ19JU1JfSU5JVEYpID09IChSVENfSVNSX0lOSVRGKSk7CisgIHJldHVybiAoKFJFQURfQklUKFJUQ3gtPklTUiwgUlRDX0lTUl9JTklURikgPT0gKFJUQ19JU1JfSU5JVEYpKSA/IDFVTCA6IDBVTCk7CiB9CiAKIC8qKgpAQCAtMzA2Niw3ICsyODUxLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9SVENfSXNBY3RpdmVGbGFnX1JTKFJUQ19UeXBlRGVmICpSVEN4KQogewotICByZXR1cm4gKFJFQURfQklUKFJUQ3gtPklTUiwgUlRDX0lTUl9SU0YpID09IChSVENfSVNSX1JTRikpOworICByZXR1cm4gKChSRUFEX0JJVChSVEN4LT5JU1IsIFJUQ19JU1JfUlNGKSA9PSAoUlRDX0lTUl9SU0YpKSA/IDFVTCA6IDBVTCk7CiB9CiAKIC8qKgpAQCAtMzA4OCwxMCArMjg3Myw5IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfUlRDX0lzQWN0aXZlRmxhZ19JTklUUyhSVENfVHlwZURlZiAqUlRDeCkKIHsKLSAgcmV0dXJuIChSRUFEX0JJVChSVEN4LT5JU1IsIFJUQ19JU1JfSU5JVFMpID09IChSVENfSVNSX0lOSVRTKSk7CisgIHJldHVybiAoKFJFQURfQklUKFJUQ3gtPklTUiwgUlRDX0lTUl9JTklUUykgPT0gKFJUQ19JU1JfSU5JVFMpKSA/IDFVTCA6IDBVTCk7CiB9CiAKLQogLyoqCiAgICogQGJyaWVmICBHZXQgV2FrZXVwIHRpbWVyIHdyaXRlIGZsYWcKICAgKiBAcm10b2xsIElTUiAgICAgICAgICBXVVRXRiAgICAgICAgIExMX1JUQ19Jc0FjdGl2ZUZsYWdfV1VUVwpAQCAtMzEwMCw3ICsyODg0LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9SVENfSXNBY3RpdmVGbGFnX1dVVFcoUlRDX1R5cGVEZWYgKlJUQ3gpCiB7Ci0gIHJldHVybiAoUkVBRF9CSVQoUlRDeC0+SVNSLCBSVENfSVNSX1dVVFdGKSA9PSAoUlRDX0lTUl9XVVRXRikpOworICByZXR1cm4gKChSRUFEX0JJVChSVEN4LT5JU1IsIFJUQ19JU1JfV1VUV0YpID09IChSVENfSVNSX1dVVFdGKSkgPyAxVUwgOiAwVUwpOwogfQogCiAvKioKQEAgLTMxMTEsNyArMjg5NSw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfUlRDX0lzQWN0aXZlRmxhZ19BTFJCVyhSVENfVHlwZURlZiAqUlRDeCkKIHsKLSAgcmV0dXJuIChSRUFEX0JJVChSVEN4LT5JU1IsIFJUQ19JU1JfQUxSQldGKSA9PSAoUlRDX0lTUl9BTFJCV0YpKTsKKyAgcmV0dXJuICgoUkVBRF9CSVQoUlRDeC0+SVNSLCBSVENfSVNSX0FMUkJXRikgPT0gKFJUQ19JU1JfQUxSQldGKSkgPyAxVUwgOiAwVUwpOwogfQogCiAvKioKQEAgLTMxMjIsNyArMjkwNiw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfUlRDX0lzQWN0aXZlRmxhZ19BTFJBVyhSVENfVHlwZURlZiAqUlRDeCkKIHsKLSAgcmV0dXJuIChSRUFEX0JJVChSVEN4LT5JU1IsIFJUQ19JU1JfQUxSQVdGKSA9PSAoUlRDX0lTUl9BTFJBV0YpKTsKKyAgcmV0dXJuICgoUkVBRF9CSVQoUlRDeC0+SVNSLCBSVENfSVNSX0FMUkFXRikgPT0gKFJUQ19JU1JfQUxSQVdGKSkgPyAxVUwgOiAwVUwpOwogfQogCiAvKioKQEAgLTMyNTksNyArMzA0Myw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfUlRDX0lzRW5hYmxlZElUX1RTKFJUQ19UeXBlRGVmICpSVEN4KQogewotICByZXR1cm4gKFJFQURfQklUKFJUQ3gtPkNSLCBSVENfQ1JfVFNJRSkgPT0gKFJUQ19DUl9UU0lFKSk7CisgIHJldHVybiAoKFJFQURfQklUKFJUQ3gtPkNSLCBSVENfQ1JfVFNJRSkgPT0gKFJUQ19DUl9UU0lFKSkgPyAxVUwgOiAwVUwpOwogfQogCiAvKioKQEAgLTMyNzAsNyArMzA1NCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfUlRDX0lzRW5hYmxlZElUX1dVVChSVENfVHlwZURlZiAqUlRDeCkKIHsKLSAgcmV0dXJuIChSRUFEX0JJVChSVEN4LT5DUiwgUlRDX0NSX1dVVElFKSA9PSAoUlRDX0NSX1dVVElFKSk7CisgIHJldHVybiAoKFJFQURfQklUKFJUQ3gtPkNSLCBSVENfQ1JfV1VUSUUpID09IChSVENfQ1JfV1VUSUUpKSA/IDFVTCA6IDBVTCk7CiB9CiAKIC8qKgpAQCAtMzI4MSw3ICszMDY1LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9SVENfSXNFbmFibGVkSVRfQUxSQihSVENfVHlwZURlZiAqUlRDeCkKIHsKLSAgcmV0dXJuIChSRUFEX0JJVChSVEN4LT5DUiwgUlRDX0NSX0FMUkJJRSkgPT0gKFJUQ19DUl9BTFJCSUUpKTsKKyAgcmV0dXJuICgoUkVBRF9CSVQoUlRDeC0+Q1IsIFJUQ19DUl9BTFJCSUUpID09IChSVENfQ1JfQUxSQklFKSkgPyAxVUwgOiAwVUwpOwogfQogCiAvKioKQEAgLTMyOTIsNyArMzA3Niw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfUlRDX0lzRW5hYmxlZElUX0FMUkEoUlRDX1R5cGVEZWYgKlJUQ3gpCiB7Ci0gIHJldHVybiAoUkVBRF9CSVQoUlRDeC0+Q1IsIFJUQ19DUl9BTFJBSUUpID09IChSVENfQ1JfQUxSQUlFKSk7CisgIHJldHVybiAoKFJFQURfQklUKFJUQ3gtPkNSLCBSVENfQ1JfQUxSQUlFKSA9PSAoUlRDX0NSX0FMUkFJRSkpID8gMVVMIDogMFVMKTsKIH0KIAogLyoqCkBAIC0zMzAzLDggKzMwODcsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1JUQ19Jc0VuYWJsZWRJVF9UQU1QKFJUQ19UeXBlRGVmICpSVEN4KQogewotICByZXR1cm4gKFJFQURfQklUKFJUQ3gtPlRBRkNSLAotICAgICAgICAgICAgICAgICAgIFJUQ19UQUZDUl9UQU1QSUUpID09IChSVENfVEFGQ1JfVEFNUElFKSk7CisgIHJldHVybiAoKFJFQURfQklUKFJUQ3gtPlRBRkNSLAorICAgICAgICAgICAgICAgICAgICBSVENfVEFGQ1JfVEFNUElFKSA9PSAoUlRDX1RBRkNSX1RBTVBJRSkpID8gMVVMIDogMFVMKTsKIH0KIAogLyoqCkBAIC0zMzU0LDQgKzMxMzgsNCBAQAogfQogI2VuZGlmCiAKLSNlbmRpZiAvKiBfX1NUTTMyRjJ4eF9MTF9SVENfSCAqLworI2VuZGlmIC8qIFNUTTMyRjJ4eF9MTF9SVENfSCAqLwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjJ4eF9sbF9zcGkuaCBiL0luYy9zdG0zMmYyeHhfbGxfc3BpLmgKaW5kZXggNTM3YTg5My4uMTBkOTc3MiAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjJ4eF9sbF9zcGkuaAorKysgYi9JbmMvc3RtMzJmMnh4X2xsX3NwaS5oCkBAIC0xOTg2LDMgKzE5ODYsNCBAQAogI2VuZGlmCiAKICNlbmRpZiAvKiBTVE0zMkYyeHhfTExfU1BJX0ggKi8KKwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZjJ4eF9sbF9zeXN0ZW0uaCBiL0luYy9zdG0zMmYyeHhfbGxfc3lzdGVtLmgKaW5kZXggMjM4NTk0YS4uYmI0NWI0NCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjJ4eF9sbF9zeXN0ZW0uaAorKysgYi9JbmMvc3RtMzJmMnh4X2xsX3N5c3RlbS5oCkBAIC0zLDYgKzMsMTggQEAKICAgKiBAZmlsZSAgICBzdG0zMmYyeHhfbGxfc3lzdGVtLmgKICAgKiBAYXV0aG9yICBNQ0QgQXBwbGljYXRpb24gVGVhbQogICAqIEBicmllZiAgIEhlYWRlciBmaWxlIG9mIFNZU1RFTSBMTCBtb2R1bGUuCisgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQGF0dGVudGlvbgorICAqCisgICogQ29weXJpZ2h0IChjKSAyMDE2IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAqCisgICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlCisgICogaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc29mdHdhcmUgY29tcG9uZW50LgorICAqIElmIG5vIExJQ0VOU0UgZmlsZSBjb21lcyB3aXRoIHRoaXMgc29mdHdhcmUsIGl0IGlzIHByb3ZpZGVkIEFTLUlTLgorICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICBAdmVyYmF0aW0KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICAgICAgICAjIyMjIyBIb3cgdG8gdXNlIHRoaXMgZHJpdmVyICMjIyMjCkBAIC0xNiwxNiArMjgsNiBAQAogCiAgIEBlbmR2ZXJiYXRpbQogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgKiBAYXR0ZW50aW9uCi0gICoKLSAgKiBDb3B5cmlnaHQgKGMpIDIwMTYgU1RNaWNyb2VsZWN0cm9uaWNzLgotICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gICoKLSAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUKLSAgKiBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCi0gICogSWYgbm8gTElDRU5TRSBmaWxlIGNvbWVzIHdpdGggdGhpcyBzb2Z0d2FyZSwgaXQgaXMgcHJvdmlkZWQgQVMtSVMuCi0gICoKLSAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICovCiAKIC8qIERlZmluZSB0byBwcmV2ZW50IHJlY3Vyc2l2ZSBpbmNsdXNpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC04NDEsMyArODQzLDUgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogX19TVE0zMkYyeHhfTExfU1lTVEVNX0ggKi8KKworCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmMnh4X2xsX3RpbS5oIGIvSW5jL3N0bTMyZjJ4eF9sbF90aW0uaAppbmRleCBmZWE5M2ZlLi4zNjA4MDkwIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmMnh4X2xsX3RpbS5oCisrKyBiL0luYy9zdG0zMmYyeHhfbGxfdGltLmgKQEAgLTk1Myw2ICs5NTMsNyBAQAogICAqIEB9CiAgICovCiAKKwogLyoqCiAgICogQH0KICAgKi8KQEAgLTk4NSwxMCArOTg2LDYgQEAKICAgKiBAfQogICAqLwogCi0vKiogQGRlZmdyb3VwIFRJTV9MTF9FTV9FeHBvcnRlZF9NYWNyb3MgRXhwb3J0ZWRfTWFjcm9zCi0gICogQHsKLSAgKi8KLQogLyoqCiAgICogQGJyaWVmICBIRUxQRVIgbWFjcm8gY2FsY3VsYXRpbmcgRFRHWzA6N10gaW4gdGhlIFRJTXhfQkRUUiByZWdpc3RlciB0byBhY2hpZXZlIHRoZSByZXF1ZXN0ZWQgZGVhZCB0aW1lIGR1cmF0aW9uLgogICAqIEBub3RlIGV4OiBAcmVmIF9fTExfVElNX0NBTENfREVBRFRJTUUgKDgwMDAwMDAwLCBAcmVmIExMX1RJTV9HZXRDbG9ja0RpdmlzaW9uICgpLCAxMjApOwpAQCAtMTA4MCwxMSArMTA3Nyw2IEBACiAgICogQH0KICAgKi8KIAotCi0vKioKLSAgKiBAfQotICAqLwotCiAvKiBFeHBvcnRlZCBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyoqIEBkZWZncm91cCBUSU1fTExfRXhwb3J0ZWRfRnVuY3Rpb25zIFRJTSBFeHBvcnRlZCBGdW5jdGlvbnMKICAgKiBAewpAQCAtMTYzNCw3ICsxNjI2LDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9USU1fQ0hBTk5FTF9DSDQKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fQ0NfSXNFbmFibGVkQ2hhbm5lbChUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgQ2hhbm5lbHMpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX0NDX0lzRW5hYmxlZENoYW5uZWwoY29uc3QgVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWxzKQogewogICByZXR1cm4gKChSRUFEX0JJVChUSU14LT5DQ0VSLCBDaGFubmVscykgPT0gKENoYW5uZWxzKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMTkxOSw3ICsxOTExLDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9USU1fQ0hBTk5FTF9DSDQKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fT0NfSXNFbmFibGVkRmFzdChUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgQ2hhbm5lbCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fT0NfSXNFbmFibGVkRmFzdChjb25zdCBUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKICAgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKICAgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKQEAgLTE5ODMsNyArMTk3NSw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfVElNX0NIQU5ORUxfQ0g0CiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX09DX0lzRW5hYmxlZFByZWxvYWQoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX09DX0lzRW5hYmxlZFByZWxvYWQoY29uc3QgVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwpCiB7CiAgIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7CiAgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CkBAIC0yMDU2LDcgKzIwNDgsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1RJTV9DSEFOTkVMX0NINAogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9PQ19Jc0VuYWJsZWRDbGVhcihUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgQ2hhbm5lbCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fT0NfSXNFbmFibGVkQ2xlYXIoY29uc3QgVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwpCiB7CiAgIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7CiAgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CkBAIC0yNTMxLDcgKzI1MjMsNyBAQAogICAqIEBwYXJhbSAgVElNeCBUaW1lciBpbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9JQ19Jc0VuYWJsZWRYT1JDb21iaW5hdGlvbihUSU1fVHlwZURlZiAqVElNeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fSUNfSXNFbmFibGVkWE9SQ29tYmluYXRpb24oY29uc3QgVElNX1R5cGVEZWYgKlRJTXgpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKFRJTXgtPkNSMiwgVElNX0NSMl9USTFTKSA9PSAoVElNX0NSMl9USTFTKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMzY1OSw3ICszNjUxLDcgQEAKICAgKiBAfQogICAqLwogCi0vKiogQGRlZmdyb3VwIFRJTV9MTF9FRl9ETUFfTWFuYWdlbWVudCBETUEtTWFuYWdlbWVudAorLyoqIEBkZWZncm91cCBUSU1fTExfRUZfRE1BX01hbmFnZW1lbnQgRE1BIE1hbmFnZW1lbnQKICAgKiBAewogICAqLwogLyoqCkBAIC0zOTk3LDcgKzM5ODksNyBAQAogICAqIEB7CiAgICovCiAKLUVycm9yU3RhdHVzIExMX1RJTV9EZUluaXQoVElNX1R5cGVEZWYgKlRJTXgpOworRXJyb3JTdGF0dXMgTExfVElNX0RlSW5pdChjb25zdCBUSU1fVHlwZURlZiAqVElNeCk7CiB2b2lkIExMX1RJTV9TdHJ1Y3RJbml0KExMX1RJTV9Jbml0VHlwZURlZiAqVElNX0luaXRTdHJ1Y3QpOwogRXJyb3JTdGF0dXMgTExfVElNX0luaXQoVElNX1R5cGVEZWYgKlRJTXgsIGNvbnN0IExMX1RJTV9Jbml0VHlwZURlZiAqVElNX0luaXRTdHJ1Y3QpOwogdm9pZCBMTF9USU1fT0NfU3RydWN0SW5pdChMTF9USU1fT0NfSW5pdFR5cGVEZWYgKlRJTV9PQ19Jbml0U3RydWN0KTsKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYyeHhfbGxfdXNhcnQuaCBiL0luYy9zdG0zMmYyeHhfbGxfdXNhcnQuaAppbmRleCA4NTRlMGE1Li43ZGExZGU2IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJmMnh4X2xsX3VzYXJ0LmgKKysrIGIvSW5jL3N0bTMyZjJ4eF9sbF91c2FydC5oCkBAIC0yNTE4LDMgKzI1MTgsNCBAQAogI2VuZGlmCiAKICNlbmRpZiAvKiBfX1NUTTMyRjJ4eF9MTF9VU0FSVF9IICovCisKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmYyeHhfbGxfdXNiLmggYi9JbmMvc3RtMzJmMnh4X2xsX3VzYi5oCmluZGV4IDQ4ZDE3Y2MuLjU1M2JkMWMgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmYyeHhfbGxfdXNiLmgKKysrIGIvSW5jL3N0bTMyZjJ4eF9sbF91c2IuaApAQCAtMjIsNyArMjIsNyBAQAogCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIgewotI2VuZGlmCisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KIAogLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICNpbmNsdWRlICJzdG0zMmYyeHhfaGFsX2RlZi5oIgpAQCAtNDEsMTQgKzQxLDEzIEBACiAvKioKICAgKiBAYnJpZWYgIFVTQiBNb2RlIGRlZmluaXRpb24KICAgKi8KLSNpZiBkZWZpbmVkIChVU0JfT1RHX0ZTKSB8fCBkZWZpbmVkIChVU0JfT1RHX0hTKQogCiB0eXBlZGVmIGVudW0KIHsKLSAgVVNCX0RFVklDRV9NT0RFICA9IDAsCi0gIFVTQl9IT1NUX01PREUgICAgPSAxLAotICBVU0JfRFJEX01PREUgICAgID0gMgotfSBVU0JfT1RHX01vZGVUeXBlRGVmOworICBVU0JfREVWSUNFX01PREUgPSAwLAorICBVU0JfSE9TVF9NT0RFICAgPSAxLAorICBVU0JfRFJEX01PREUgICAgPSAyCit9IFVTQl9Nb2RlVHlwZURlZjsKIAogLyoqCiAgICogQGJyaWVmICBVUkIgU3RhdGVzIGRlZmluaXRpb24KQEAgLTYxLDcgKzYwLDcgQEAKICAgVVJCX05ZRVQsCiAgIFVSQl9FUlJPUiwKICAgVVJCX1NUQUxMCi19IFVTQl9PVEdfVVJCU3RhdGVUeXBlRGVmOworfSBVU0JfVVJCU3RhdGVUeXBlRGVmOwogCiAvKioKICAgKiBAYnJpZWYgIEhvc3QgY2hhbm5lbCBTdGF0ZXMgIGRlZmluaXRpb24KQEAgLTcxLDEzICs3MCwxNSBAQAogICBIQ19JRExFID0gMCwKICAgSENfWEZSQywKICAgSENfSEFMVEVELAorICBIQ19BQ0ssCiAgIEhDX05BSywKICAgSENfTllFVCwKICAgSENfU1RBTEwsCiAgIEhDX1hBQ1RFUlIsCiAgIEhDX0JCTEVSUiwKICAgSENfREFUQVRHTEVSUgotfSBVU0JfT1RHX0hDU3RhdGVUeXBlRGVmOworfSBVU0JfSENTdGF0ZVR5cGVEZWY7CisKIAogLyoqCiAgICogQGJyaWVmICBVU0IgSW5zdGFuY2UgSW5pdGlhbGl6YXRpb24gU3RydWN0dXJlIGRlZmluaXRpb24KQEAgLTkyLDEyICs5MywxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBEZXBlbmRzIG9uIHRoZSB1c2VkIFVTQiBjb3JlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAxIGFuZCBNYXhfRGF0YSA9IDE1ICovCiAKKyAgdWludDMyX3QgZG1hX2VuYWJsZTsgICAgICAgICAgICAgIC8qITwgVVNCIERNQSBzdGF0ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgRE1BIGlzIG5vdCBzdXBwb3J0ZWQgdGhpcyBwYXJhbWV0ZXIgc2hhbGwgYmUgc2V0IGJ5IGRlZmF1bHQgdG8gemVybyAqLworCiAgIHVpbnQzMl90IHNwZWVkOyAgICAgICAgICAgICAgICAgICAvKiE8IFVTQiBDb3JlIHNwZWVkLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYW55IHZhbHVlIG9mIEByZWYgUENEX1NwZWVkL0hDRF9TcGVlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEhDRF9TUEVFRF94eHgsIEhDRF9TUEVFRF94eHgpICovCiAKLSAgdWludDMyX3QgZG1hX2VuYWJsZTsgICAgICAgICAgICAgIC8qITwgRW5hYmxlIG9yIGRpc2FibGUgb2YgdGhlIFVTQiBlbWJlZGRlZCBETUEgdXNlZCBvbmx5IGZvciBPVEcgSFMuICAgICAgICAqLwotCiAgIHVpbnQzMl90IGVwMF9tcHM7ICAgICAgICAgICAgICAgICAvKiE8IFNldCB0aGUgRW5kcG9pbnQgMCBNYXggUGFja2V0IHNpemUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAogICB1aW50MzJfdCBwaHlfaXRmYWNlOyAgICAgICAgICAgICAgLyohPCBTZWxlY3QgdGhlIHVzZWQgUEhZIGludGVyZmFjZS4KQEAgLTEwNSw3ICsxMDcsNyBAQAogCiAgIHVpbnQzMl90IFNvZl9lbmFibGU7ICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBvciBkaXNhYmxlIHRoZSBvdXRwdXQgb2YgdGhlIFNPRiBzaWduYWwuICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAotICB1aW50MzJfdCBsb3dfcG93ZXJfZW5hYmxlOyAgICAgICAgLyohPCBFbmFibGUgb3IgZGlzYWJsZSB0aGUgbG93IHBvd2VyIG1vZGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHVpbnQzMl90IGxvd19wb3dlcl9lbmFibGU7ICAgICAgICAvKiE8IEVuYWJsZSBvciBkaXNhYmxlIHRoZSBsb3cgUG93ZXIgTW9kZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAogICB1aW50MzJfdCBscG1fZW5hYmxlOyAgICAgICAgICAgICAgLyohPCBFbmFibGUgb3IgZGlzYWJsZSBMaW5rIFBvd2VyIE1hbmFnZW1lbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKQEAgLTExNyw3ICsxMTksNyBAQAogCiAgIHVpbnQzMl90IHVzZV9leHRlcm5hbF92YnVzOyAgICAgICAvKiE8IEVuYWJsZSBvciBkaXNhYmxlIHRoZSB1c2Ugb2YgdGhlIGV4dGVybmFsIFZCVVMuICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAotfSBVU0JfT1RHX0NmZ1R5cGVEZWY7Cit9IFVTQl9DZmdUeXBlRGVmOwogCiB0eXBlZGVmIHN0cnVjdAogewpAQCAtMTMwLDMxICsxMzIsMzQgQEAKICAgdWludDhfdCAgIGlzX3N0YWxsOyAgICAgICAgICAgICAvKiE8IEVuZHBvaW50IHN0YWxsIGNvbmRpdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIE1pbl9EYXRhID0gMCBhbmQgTWF4X0RhdGEgPSAxICAgICovCiAKKyAgdWludDhfdCAgIGlzX2lzb19pbmNvbXBsZXRlOyAgICAvKiE8IEVuZHBvaW50IGlzb2MgY29uZGl0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAwIGFuZCBNYXhfRGF0YSA9IDEgICAgKi8KKwogICB1aW50OF90ICAgdHlwZTsgICAgICAgICAgICAgICAgIC8qITwgRW5kcG9pbnQgdHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSB2YWx1ZSBvZiBAcmVmIFVTQl9MTF9FUF9UeXBlICAgICAgICAgICAgICAgICAgICovCiAKICAgdWludDhfdCAgIGRhdGFfcGlkX3N0YXJ0OyAgICAgICAvKiE8IEluaXRpYWwgZGF0YSBQSUQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiBNaW5fRGF0YSA9IDAgYW5kIE1heF9EYXRhID0gMSAgICAqLwogCisgIHVpbnQzMl90ICBtYXhwYWNrZXQ7ICAgICAgICAgICAgLyohPCBFbmRwb2ludCBNYXggcGFja2V0IHNpemUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiBNaW5fRGF0YSA9IDAgYW5kIE1heF9EYXRhID0gNjRLQiAqLworCisgIHVpbnQ4X3QgICAqeGZlcl9idWZmOyAgICAgICAgICAgLyohPCBQb2ludGVyIHRvIHRyYW5zZmVyIGJ1ZmZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICB1aW50MzJfdCAgeGZlcl9sZW47ICAgICAgICAgICAgIC8qITwgQ3VycmVudCB0cmFuc2ZlciBsZW5ndGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgdWludDMyX3QgIHhmZXJfY291bnQ7ICAgICAgICAgICAvKiE8IFBhcnRpYWwgdHJhbnNmZXIgbGVuZ3RoIGluIGNhc2Ugb2YgbXVsdGkgcGFja2V0IHRyYW5zZmVyICAgICAgICAgICAgICAgICAqLworCiAgIHVpbnQ4X3QgICBldmVuX29kZF9mcmFtZTsgICAgICAgLyohPCBJRnJhbWUgcGFyaXR5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAwIGFuZCBNYXhfRGF0YSA9IDEgICAgKi8KIAogICB1aW50MTZfdCAgdHhfZmlmb19udW07ICAgICAgICAgIC8qITwgVHJhbnNtaXNzaW9uIEZJRk8gbnVtYmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAxIGFuZCBNYXhfRGF0YSA9IDE1ICAgKi8KIAotICB1aW50MzJfdCAgbWF4cGFja2V0OyAgICAgICAgICAgIC8qITwgRW5kcG9pbnQgTWF4IHBhY2tldCBzaXplCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAwIGFuZCBNYXhfRGF0YSA9IDY0S0IgKi8KLQotICB1aW50OF90ICAgKnhmZXJfYnVmZjsgICAgICAgICAgIC8qITwgUG9pbnRlciB0byB0cmFuc2ZlciBidWZmZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0KICAgdWludDMyX3QgIGRtYV9hZGRyOyAgICAgICAgICAgICAvKiE8IDMyIGJpdHMgYWxpZ25lZCB0cmFuc2ZlciBidWZmZXIgYWRkcmVzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCi0gIHVpbnQzMl90ICB4ZmVyX2xlbjsgICAgICAgICAgICAgLyohPCBDdXJyZW50IHRyYW5zZmVyIGxlbmd0aCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQogICB1aW50MzJfdCAgeGZlcl9zaXplOyAgICAgICAgICAgIC8qITwgcmVxdWVzdGVkIHRyYW5zZmVyIHNpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0KLSAgdWludDMyX3QgIHhmZXJfY291bnQ7ICAgICAgICAgICAvKiE8IFBhcnRpYWwgdHJhbnNmZXIgbGVuZ3RoIGluIGNhc2Ugb2YgbXVsdGkgcGFja2V0IHRyYW5zZmVyICAgICAgICAgICAgICAgICAqLwotfSBVU0JfT1RHX0VQVHlwZURlZjsKK30gVVNCX0VQVHlwZURlZjsKIAogdHlwZWRlZiBzdHJ1Y3QKIHsKQEAgLTE3NSw4ICsxODAsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEhDRF9ERVZJQ0VfU1BFRURfeHh4KSAgICAgICAgICAgICAqLwogCiAgIHVpbnQ4X3QgICBkb19waW5nOyAgICAgICAgICAgIC8qITwgRW5hYmxlIG9yIGRpc2FibGUgdGhlIHVzZSBvZiB0aGUgUElORyBwcm90b2NvbCBmb3IgSFMgbW9kZS4gICAgICAgICAgICAgICAgKi8KKyAgdWludDhfdCAgIGRvX3NzcGxpdDsgICAgICAgICAgLyohPCBFbmFibGUgc3RhcnQgc3BsaXQgdHJhbnNhY3Rpb24gaW4gSFMgbW9kZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB1aW50OF90ICAgZG9fY3NwbGl0OyAgICAgICAgICAvKiE8IEVuYWJsZSBjb21wbGV0ZSBzcGxpdCB0cmFuc2FjdGlvbiBpbiBIUyBtb2RlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHVpbnQ4X3QgICBlcF9zc19zY2hlZHVsZTsgICAgIC8qITwgRW5hYmxlIHBlcmlvZGljIGVuZHBvaW50IHN0YXJ0IHNwbGl0IHNjaGVkdWxlIC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdWludDMyX3QgIGlzb19zcGx0X3hhY3RQb3M7ICAgLyohPCBpc28gc3BsaXQgdHJhbnNmZXIgdHJhbnNhY3Rpb24gcG9zaXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCi0gIHVpbnQ4X3QgICBwcm9jZXNzX3Bpbmc7ICAgICAgIC8qITwgRXhlY3V0ZSB0aGUgUElORyBwcm90b2NvbCBmb3IgSFMgbW9kZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdWludDhfdCAgIGh1Yl9wb3J0X25icjsgICAgICAgLyohPCBVU0IgSFVCIHBvcnQgbnVtYmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB1aW50OF90ICAgaHViX2FkZHI7ICAgICAgICAgICAvKiE8IFVTQiBIVUIgYWRkcmVzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKICAgdWludDhfdCAgIGVwX3R5cGU7ICAgICAgICAgICAgLyohPCBFbmRwb2ludCBUeXBlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgdmFsdWUgb2YgQHJlZiBVU0JfTExfRVBfVHlwZSAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xODksNyArMTk5LDcgQEAKIAogICB1aW50OF90ICAgKnhmZXJfYnVmZjsgICAgICAgICAvKiE8IFBvaW50ZXIgdG8gdHJhbnNmZXIgYnVmZmVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKLSAgdWludDMyX3QgIFhmZXJTaXplOyAgICAgICAgICAgICAvKiE8IE9URyBDaGFubmVsIHRyYW5zZmVyIHNpemUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdWludDMyX3QgIFhmZXJTaXplOyAgICAgICAgICAgLyohPCBPVEcgQ2hhbm5lbCB0cmFuc2ZlciBzaXplLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCiAgIHVpbnQzMl90ICB4ZmVyX2xlbjsgICAgICAgICAgIC8qITwgQ3VycmVudCB0cmFuc2ZlciBsZW5ndGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIApAQCAtMjA0LDE1ICsyMTQsMjEgQEAKICAgdWludDMyX3QgIGRtYV9hZGRyOyAgICAgICAgICAgLyohPCAzMiBiaXRzIGFsaWduZWQgdHJhbnNmZXIgYnVmZmVyIGFkZHJlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCiAgIHVpbnQzMl90ICBFcnJDbnQ7ICAgICAgICAgICAgIC8qITwgSG9zdCBjaGFubmVsIGVycm9yIGNvdW50LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdWludDMyX3QgIE55ZXRFcnJDbnQ7ICAgICAgICAgLyohPCBDb21wbGV0ZSBTcGxpdCBOWUVUIEhvc3QgY2hhbm5lbCBlcnJvciBjb3VudC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCi0gIFVTQl9PVEdfVVJCU3RhdGVUeXBlRGVmIHVyYl9zdGF0ZTsgIC8qITwgVVJCIHN0YXRlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYW55IHZhbHVlIG9mIEByZWYgVVNCX09UR19VUkJTdGF0ZVR5cGVEZWYgKi8KKyAgVVNCX1VSQlN0YXRlVHlwZURlZiB1cmJfc3RhdGU7ICAvKiE8IFVSQiBzdGF0ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgdmFsdWUgb2YgQHJlZiBVU0JfVVJCU3RhdGVUeXBlRGVmICAgICAgICAgICAgICAqLwogCi0gIFVTQl9PVEdfSENTdGF0ZVR5cGVEZWYgc3RhdGU7ICAgICAgIC8qITwgSG9zdCBDaGFubmVsIHN0YXRlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYW55IHZhbHVlIG9mIEByZWYgVVNCX09UR19IQ1N0YXRlVHlwZURlZiAgKi8KLX0gVVNCX09UR19IQ1R5cGVEZWY7Ci0jZW5kaWYgLyogZGVmaW5lZCAoVVNCX09UR19GUykgfHwgZGVmaW5lZCAoVVNCX09UR19IUykgKi8KKyAgVVNCX0hDU3RhdGVUeXBlRGVmIHN0YXRlOyAgICAgICAvKiE8IEhvc3QgQ2hhbm5lbCBzdGF0ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgdmFsdWUgb2YgQHJlZiBVU0JfSENTdGF0ZVR5cGVEZWYgICAgICAgICAgICAgICAqLworfSBVU0JfSENUeXBlRGVmOwogCit0eXBlZGVmIFVTQl9Nb2RlVHlwZURlZiAgICAgVVNCX09UR19Nb2RlVHlwZURlZjsKK3R5cGVkZWYgVVNCX0NmZ1R5cGVEZWYgICAgICBVU0JfT1RHX0NmZ1R5cGVEZWY7Cit0eXBlZGVmIFVTQl9FUFR5cGVEZWYgICAgICAgVVNCX09UR19FUFR5cGVEZWY7Cit0eXBlZGVmIFVTQl9VUkJTdGF0ZVR5cGVEZWYgVVNCX09UR19VUkJTdGF0ZVR5cGVEZWY7Cit0eXBlZGVmIFVTQl9IQ1N0YXRlVHlwZURlZiAgVVNCX09UR19IQ1N0YXRlVHlwZURlZjsKK3R5cGVkZWYgVVNCX0hDVHlwZURlZiAgICAgICBVU0JfT1RHX0hDVHlwZURlZjsKIAogLyogRXhwb3J0ZWQgY29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtMjQwLDE4ICsyNTYsNiBAQAogICAqIEB9CiAgICovCiAKLS8qKiBAZGVmZ3JvdXAgVVNCX0xMIERldmljZSBTcGVlZAotICAqIEB7Ci0gICovCi0jZGVmaW5lIFVTQkRfSFNfU1BFRUQgICAgICAgICAgICAgICAgICAgICAgICAgIDBVCi0jZGVmaW5lIFVTQkRfSFNJTkZTX1NQRUVEICAgICAgICAgICAgICAgICAgICAgIDFVCi0jZGVmaW5lIFVTQkhfSFNfU1BFRUQgICAgICAgICAgICAgICAgICAgICAgICAgIDBVCi0jZGVmaW5lIFVTQkRfRlNfU1BFRUQgICAgICAgICAgICAgICAgICAgICAgICAgIDJVCi0jZGVmaW5lIFVTQkhfRlNMU19TUEVFRCAgICAgICAgICAgICAgICAgICAgICAgIDFVCi0vKioKLSAgKiBAfQotICAqLwotCiAvKiogQGRlZmdyb3VwIFVTQl9MTF9Db3JlX1NwZWVkIFVTQiBMb3cgTGF5ZXIgQ29yZSBTcGVlZAogICAqIEB7CiAgICovCkBAIC0zMTUsMjQgKzMxOSwxNCBAQAogLyoqCiAgICogQH0KICAgKi8KLQorI2VuZGlmIC8qIGRlZmluZWQgKFVTQl9PVEdfRlMpIHx8IGRlZmluZWQgKFVTQl9PVEdfSFMpICovCiAvKiogQGRlZmdyb3VwIFVTQl9MTF9FUDBfTVBTIFVTQiBMb3cgTGF5ZXIgRVAwIE1QUwogICAqIEB7CiAgICovCi0jZGVmaW5lIEVQX01QU182NCAgICAgICAgICAgICAgICAgICAgICAgIDBVCi0jZGVmaW5lIEVQX01QU18zMiAgICAgICAgICAgICAgICAgICAgICAgIDFVCi0jZGVmaW5lIEVQX01QU18xNiAgICAgICAgICAgICAgICAgICAgICAgIDJVCi0jZGVmaW5lIEVQX01QU184ICAgICAgICAgICAgICAgICAgICAgICAgIDNVCi0vKioKLSAgKiBAfQotICAqLwotCi0vKiogQGRlZmdyb3VwIFVTQl9MTF9FUF9TcGVlZCBVU0IgTG93IExheWVyIEVQIFNwZWVkCi0gICogQHsKLSAgKi8KLSNkZWZpbmUgRVBfU1BFRURfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgMFUKLSNkZWZpbmUgRVBfU1BFRURfRlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgMVUKLSNkZWZpbmUgRVBfU1BFRURfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgMlUKKyNkZWZpbmUgRVBfTVBTXzY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFUKKyNkZWZpbmUgRVBfTVBTXzMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMVUKKyNkZWZpbmUgRVBfTVBTXzE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMlUKKyNkZWZpbmUgRVBfTVBTXzggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgM1UKIC8qKgogICAqIEB9CiAgICovCkBAIC0zNDksNiArMzQzLDQwIEBACiAgICogQH0KICAgKi8KIAorLyoqIEBkZWZncm91cCBVU0JfTExfRVBfU3BlZWQgVVNCIExvdyBMYXllciBFUCBTcGVlZAorICAqIEB7CisgICovCisjZGVmaW5lIEVQX1NQRUVEX0xPVyAgICAgICAgICAgICAgICAgICAgICAgICAgIDBVCisjZGVmaW5lIEVQX1NQRUVEX0ZVTEwgICAgICAgICAgICAgICAgICAgICAgICAgIDFVCisjZGVmaW5lIEVQX1NQRUVEX0hJR0ggICAgICAgICAgICAgICAgICAgICAgICAgIDJVCisvKioKKyAgKiBAfQorICAqLworCisvKiogQGRlZmdyb3VwIFVTQl9MTF9DSF9QSURfVHlwZSBVU0IgTG93IExheWVyIENoYW5uZWwgUElEIFR5cGUKKyAgKiBAeworICAqLworI2RlZmluZSBIQ19QSURfREFUQTAgICAgICAgICAgICAgICAgICAgICAgICAgICAwVQorI2RlZmluZSBIQ19QSURfREFUQTIgICAgICAgICAgICAgICAgICAgICAgICAgICAxVQorI2RlZmluZSBIQ19QSURfREFUQTEgICAgICAgICAgICAgICAgICAgICAgICAgICAyVQorI2RlZmluZSBIQ19QSURfU0VUVVAgICAgICAgICAgICAgICAgICAgICAgICAgICAzVQorLyoqCisgICogQH0KKyAgKi8KKworLyoqIEBkZWZncm91cCBVU0JfTEwgRGV2aWNlIFNwZWVkCisgICogQHsKKyAgKi8KKyNkZWZpbmUgVVNCRF9IU19TUEVFRCAgICAgICAgICAgICAgICAgICAgICAgICAgMFUKKyNkZWZpbmUgVVNCRF9IU0lORlNfU1BFRUQgICAgICAgICAgICAgICAgICAgICAgMVUKKyNkZWZpbmUgVVNCSF9IU19TUEVFRCAgICAgICAgICAgICAgICAgICAgICAgICAgMFUKKyNkZWZpbmUgVVNCRF9GU19TUEVFRCAgICAgICAgICAgICAgICAgICAgICAgICAgMlUKKyNkZWZpbmUgVVNCSF9GU0xTX1NQRUVEICAgICAgICAgICAgICAgICAgICAgICAgMVUKKy8qKgorICAqIEB9CisgICovCisKKyNpZiBkZWZpbmVkIChVU0JfT1RHX0ZTKSB8fCBkZWZpbmVkIChVU0JfT1RHX0hTKQogLyoqIEBkZWZncm91cCBVU0JfTExfU1RTX0RlZmluZXMgVVNCIExvdyBMYXllciBTVFMgRGVmaW5lcwogICAqIEB7CiAgICovCkBAIC0zNzEsNiArMzk5LDE2IEBACiAgICogQH0KICAgKi8KIAorLyoqIEBkZWZncm91cCBVU0JfTExfSEZJUl9EZWZpbmVzIFVTQiBMb3cgTGF5ZXIgZnJhbWUgaW50ZXJ2YWwgRGVmaW5lcworICAqIEB7CisgICovCisjZGVmaW5lIEhGSVJfNl9NSFogICAgICAgICAgICAgICAgICAgICAgICAgIDYwMDBVCisjZGVmaW5lIEhGSVJfNjBfTUhaICAgICAgICAgICAgICAgICAgICAgICAgNjAwMDBVCisjZGVmaW5lIEhGSVJfNDhfTUhaICAgICAgICAgICAgICAgICAgICAgICAgNDgwMDBVCisvKioKKyAgKiBAfQorICAqLworCiAvKiogQGRlZmdyb3VwIFVTQl9MTF9IUFJUMF9QUlRTUERfU1BFRURfRGVmaW5lcyBVU0IgTG93IExheWVyIEhQUlQwIFBSVFNQRCBTcGVlZCBEZWZpbmVzCiAgICogQHsKICAgKi8KQEAgLTM4NiwxNiArNDI0LDI3IEBACiAjZGVmaW5lIEhDQ0hBUl9CVUxLICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJVCiAjZGVmaW5lIEhDQ0hBUl9JTlRSICAgICAgICAgICAgICAgICAgICAgICAgICAgIDNVCiAKLSNkZWZpbmUgSENfUElEX0RBVEEwICAgICAgICAgICAgICAgICAgICAgICAgICAgMFUKLSNkZWZpbmUgSENfUElEX0RBVEEyICAgICAgICAgICAgICAgICAgICAgICAgICAgMVUKLSNkZWZpbmUgSENfUElEX0RBVEExICAgICAgICAgICAgICAgICAgICAgICAgICAgMlUKLSNkZWZpbmUgSENfUElEX1NFVFVQICAgICAgICAgICAgICAgICAgICAgICAgICAgM1UKLQogI2RlZmluZSBHUlhTVFNfUEtUU1RTX0lOICAgICAgICAgICAgICAgICAgICAgICAyVQogI2RlZmluZSBHUlhTVFNfUEtUU1RTX0lOX1hGRVJfQ09NUCAgICAgICAgICAgICAzVQogI2RlZmluZSBHUlhTVFNfUEtUU1RTX0RBVEFfVE9HR0xFX0VSUiAgICAgICAgICA1VQogI2RlZmluZSBHUlhTVFNfUEtUU1RTX0NIX0hBTFRFRCAgICAgICAgICAgICAgICA3VQogCisjZGVmaW5lIENMRUFSX0lOVEVSUlVQVF9NQVNLICAgICAgICAgIDB4RkZGRkZGRkZVCisKKyNkZWZpbmUgSENfTUFYX1BLVF9DTlQgICAgICAgICAgICAgICAgICAgICAgIDI1NlUKKyNkZWZpbmUgSVNPX1NQTFRfTVBTICAgICAgICAgICAgICAgICAgICAgICAgIDE4OFUKKworI2RlZmluZSBIQ1NQTFRfQkVHSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAxVQorI2RlZmluZSBIQ1NQTFRfTUlERExFICAgICAgICAgICAgICAgICAgICAgICAgICAyVQorI2RlZmluZSBIQ1NQTFRfRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzVQorI2RlZmluZSBIQ1NQTFRfRlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICA0VQorCisjZGVmaW5lIFRFU1RfSiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDFVCisjZGVmaW5lIFRFU1RfSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJVCisjZGVmaW5lIFRFU1RfU0UwX05BSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDNVCisjZGVmaW5lIFRFU1RfUEFDS0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDRVCisjZGVmaW5lIFRFU1RfRk9SQ0VfRU4gICAgICAgICAgICAgICAgICAgICAgICAgIDVVCisKICNkZWZpbmUgVVNCeF9QQ0dDQ1RMICAgICooX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpVVNCeF9CQVNFICsgVVNCX09UR19QQ0dDQ1RMX0JBU0UpCiAjZGVmaW5lIFVTQnhfSFBSVDAgICAgICAqKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KVVTQnhfQkFTRSArIFVTQl9PVEdfSE9TVF9QT1JUX0JBU0UpCiAKQEAgLTQxMyw5ICs0NjIsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFVTQl9PVEdfSE9TVF9DSEFOTkVMX0JBU0VcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgKChpKSAqIFVTQl9PVEdfSE9TVF9DSEFOTkVMX1NJWkUpKSkKIAotI2VuZGlmIC8qIGRlZmluZWQgKFVTQl9PVEdfRlMpIHx8IGRlZmluZWQgKFVTQl9PVEdfSFMpICovCiAKICNkZWZpbmUgRVBfQUREUl9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGVQorI2VuZGlmIC8qIGRlZmluZWQgKFVTQl9PVEdfRlMpIHx8IGRlZmluZWQgKFVTQl9PVEdfSFMpICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtNDU0LDEzICs1MDMsMTMgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIFVTQl9BY3RpdmF0ZURlZGljYXRlZEVuZHBvaW50KFVTQl9PVEdfR2xvYmFsVHlwZURlZiAqVVNCeCwgVVNCX09UR19FUFR5cGVEZWYgKmVwKTsKIEhBTF9TdGF0dXNUeXBlRGVmIFVTQl9EZWFjdGl2YXRlRGVkaWNhdGVkRW5kcG9pbnQoVVNCX09UR19HbG9iYWxUeXBlRGVmICpVU0J4LCBVU0JfT1RHX0VQVHlwZURlZiAqZXApOwogSEFMX1N0YXR1c1R5cGVEZWYgVVNCX0VQU3RhcnRYZmVyKFVTQl9PVEdfR2xvYmFsVHlwZURlZiAqVVNCeCwgVVNCX09UR19FUFR5cGVEZWYgKmVwLCB1aW50OF90IGRtYSk7Ci1IQUxfU3RhdHVzVHlwZURlZiBVU0JfRVAwU3RhcnRYZmVyKFVTQl9PVEdfR2xvYmFsVHlwZURlZiAqVVNCeCwgVVNCX09UR19FUFR5cGVEZWYgKmVwLCB1aW50OF90IGRtYSk7CiBIQUxfU3RhdHVzVHlwZURlZiBVU0JfV3JpdGVQYWNrZXQoVVNCX09UR19HbG9iYWxUeXBlRGVmICpVU0J4LCB1aW50OF90ICpzcmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBjaF9lcF9udW0sIHVpbnQxNl90IGxlbiwgdWludDhfdCBkbWEpOwogCiB2b2lkICAgICAgICAgICAgICpVU0JfUmVhZFBhY2tldChVU0JfT1RHX0dsb2JhbFR5cGVEZWYgKlVTQngsIHVpbnQ4X3QgKmRlc3QsIHVpbnQxNl90IGxlbik7CiBIQUxfU3RhdHVzVHlwZURlZiBVU0JfRVBTZXRTdGFsbChVU0JfT1RHX0dsb2JhbFR5cGVEZWYgKlVTQngsIFVTQl9PVEdfRVBUeXBlRGVmICplcCk7CiBIQUxfU3RhdHVzVHlwZURlZiBVU0JfRVBDbGVhclN0YWxsKFVTQl9PVEdfR2xvYmFsVHlwZURlZiAqVVNCeCwgVVNCX09UR19FUFR5cGVEZWYgKmVwKTsKK0hBTF9TdGF0dXNUeXBlRGVmIFVTQl9FUFN0b3BYZmVyKFVTQl9PVEdfR2xvYmFsVHlwZURlZiAqVVNCeCwgVVNCX09UR19FUFR5cGVEZWYgKmVwKTsKIEhBTF9TdGF0dXNUeXBlRGVmIFVTQl9TZXREZXZBZGRyZXNzKFVTQl9PVEdfR2xvYmFsVHlwZURlZiAqVVNCeCwgdWludDhfdCBhZGRyZXNzKTsKIEhBTF9TdGF0dXNUeXBlRGVmIFVTQl9EZXZDb25uZWN0KFVTQl9PVEdfR2xvYmFsVHlwZURlZiAqVVNCeCk7CiBIQUxfU3RhdHVzVHlwZURlZiBVU0JfRGV2RGlzY29ubmVjdChVU0JfT1RHX0dsb2JhbFR5cGVEZWYgKlVTQngpOwpAQCAtNDY5LDcgKzUxOCw4IEBACiBIQUxfU3RhdHVzVHlwZURlZiBVU0JfRVAwX091dFN0YXJ0KFVTQl9PVEdfR2xvYmFsVHlwZURlZiAqVVNCeCwgdWludDhfdCBkbWEsIHVpbnQ4X3QgKnBzZXR1cCk7CiB1aW50OF90ICAgICAgICAgICBVU0JfR2V0RGV2U3BlZWQoVVNCX09UR19HbG9iYWxUeXBlRGVmICpVU0J4KTsKIHVpbnQzMl90ICAgICAgICAgIFVTQl9HZXRNb2RlKFVTQl9PVEdfR2xvYmFsVHlwZURlZiAqVVNCeCk7Ci11aW50MzJfdCAgICAgICAgICBVU0JfUmVhZEludGVycnVwdHMoVVNCX09UR19HbG9iYWxUeXBlRGVmICpVU0J4KTsKK3VpbnQzMl90ICAgICAgICAgIFVTQl9SZWFkSW50ZXJydXB0cyhVU0JfT1RHX0dsb2JhbFR5cGVEZWYgY29uc3QgKlVTQngpOwordWludDMyX3QgICAgICAgICAgVVNCX1JlYWRDaEludGVycnVwdHMoVVNCX09UR19HbG9iYWxUeXBlRGVmICpVU0J4LCB1aW50OF90IGNobnVtKTsKIHVpbnQzMl90ICAgICAgICAgIFVTQl9SZWFkRGV2QWxsT3V0RXBJbnRlcnJ1cHQoVVNCX09UR19HbG9iYWxUeXBlRGVmICpVU0J4KTsKIHVpbnQzMl90ICAgICAgICAgIFVTQl9SZWFkRGV2T3V0RVBJbnRlcnJ1cHQoVVNCX09UR19HbG9iYWxUeXBlRGVmICpVU0J4LCB1aW50OF90IGVwbnVtKTsKIHVpbnQzMl90ICAgICAgICAgIFVTQl9SZWFkRGV2QWxsSW5FcEludGVycnVwdChVU0JfT1RHX0dsb2JhbFR5cGVEZWYgKlVTQngpOwpAQCAtNDgwLDggKzUzMCw4IEBACiBIQUxfU3RhdHVzVHlwZURlZiBVU0JfSW5pdEZTTFNQQ2xrU2VsKFVTQl9PVEdfR2xvYmFsVHlwZURlZiAqVVNCeCwgdWludDhfdCBmcmVxKTsKIEhBTF9TdGF0dXNUeXBlRGVmIFVTQl9SZXNldFBvcnQoVVNCX09UR19HbG9iYWxUeXBlRGVmICpVU0J4KTsKIEhBTF9TdGF0dXNUeXBlRGVmIFVTQl9Ecml2ZVZidXMoVVNCX09UR19HbG9iYWxUeXBlRGVmICpVU0J4LCB1aW50OF90IHN0YXRlKTsKLXVpbnQzMl90ICAgICAgICAgIFVTQl9HZXRIb3N0U3BlZWQoVVNCX09UR19HbG9iYWxUeXBlRGVmICpVU0J4KTsKLXVpbnQzMl90ICAgICAgICAgIFVTQl9HZXRDdXJyZW50RnJhbWUoVVNCX09UR19HbG9iYWxUeXBlRGVmICpVU0J4KTsKK3VpbnQzMl90ICAgICAgICAgIFVTQl9HZXRIb3N0U3BlZWQoVVNCX09UR19HbG9iYWxUeXBlRGVmIGNvbnN0ICpVU0J4KTsKK3VpbnQzMl90ICAgICAgICAgIFVTQl9HZXRDdXJyZW50RnJhbWUoVVNCX09UR19HbG9iYWxUeXBlRGVmIGNvbnN0ICpVU0J4KTsKIEhBTF9TdGF0dXNUeXBlRGVmIFVTQl9IQ19Jbml0KFVTQl9PVEdfR2xvYmFsVHlwZURlZiAqVVNCeCwgdWludDhfdCBjaF9udW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGVwbnVtLCB1aW50OF90IGRldl9hZGRyZXNzLCB1aW50OF90IHNwZWVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBlcF90eXBlLCB1aW50MTZfdCBtcHMpOwpAQCAtNTE1LDcgKzU2NSw3IEBACiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQotI2VuZGlmCisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KIAogCiAjZW5kaWYgLyogU1RNMzJGMnh4X0xMX1VTQl9IICovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJmMnh4X2xsX3V0aWxzLmggYi9JbmMvc3RtMzJmMnh4X2xsX3V0aWxzLmgKaW5kZXggODdjZjk1Mi4uNTY5YjRlMiAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZjJ4eF9sbF91dGlscy5oCisrKyBiL0luYy9zdG0zMmYyeHhfbGxfdXRpbHMuaApAQCAtMyw2ICszLDE3IEBACiAgICogQGZpbGUgICAgc3RtMzJmMnh4X2xsX3V0aWxzLmgKICAgKiBAYXV0aG9yICBNQ0QgQXBwbGljYXRpb24gVGVhbQogICAqIEBicmllZiAgIEhlYWRlciBmaWxlIG9mIFVUSUxTIExMIG1vZHVsZS4KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQGF0dGVudGlvbgorICAqCisgICogQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAqCisgICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlCisgICogaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc29mdHdhcmUgY29tcG9uZW50LgorICAqIElmIG5vIExJQ0VOU0UgZmlsZSBjb21lcyB3aXRoIHRoaXMgc29mdHdhcmUsIGl0IGlzIHByb3ZpZGVkIEFTLUlTLgorICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICBAdmVyYmF0aW0KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICAgICAgICAjIyMjIyBIb3cgdG8gdXNlIHRoaXMgZHJpdmVyICMjIyMjCkBAIC0xNiwxNiArMjcsNiBAQAogCiAgIEBlbmR2ZXJiYXRpbQogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgKiBAYXR0ZW50aW9uCi0gICoKLSAgKiBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzLgotICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gICoKLSAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUKLSAgKiBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCi0gICogSWYgbm8gTElDRU5TRSBmaWxlIGNvbWVzIHdpdGggdGhpcyBzb2Z0d2FyZSwgaXQgaXMgcHJvdmlkZWQgQVMtSVMuCi0gICoKLSAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICovCiAKIC8qIERlZmluZSB0byBwcmV2ZW50IHJlY3Vyc2l2ZSBpbmNsdXNpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCmRpZmYgLS1naXQgYS9SRUFETUUubWQgYi9SRUFETUUubWQKaW5kZXggN2I1NGE3OS4uMTZhMTQwOSAxMDA2NDQKLS0tIGEvUkVBRE1FLm1kCisrKyBiL1JFQURNRS5tZApAQCAtMjcsMTcgKzI3LDcgQEAKIAogIyMgQ29tcGF0aWJpbGl0eSBpbmZvcm1hdGlvbgogCi1JbiB0aGlzIHRhYmxlLCB5b3UgY2FuIGZpbmQgdGhlIHN1Y2Nlc3NpdmUgdmVyc2lvbnMgb2YgdGhpcyBIQUwtTEwgRHJpdmVyIGNvbXBvbmVudCwgaW4gbGluZSB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIHZlcnNpb25zIG9mIHRoZSBmdWxsIE1DVSBwYWNrYWdlOgotCi1JdCBpcyAqKmNydWNpYWwqKiB0aGF0IHlvdSB1c2UgYSBjb25zaXN0ZW50IHNldCBvZiB2ZXJzaW9ucyBmb3IgdGhlIENNU0lTIENvcmUgLSBDTVNJUyBEZXZpY2UgLSBIQUwsIGFzIG1lbnRpb25lZCBpbiB0aGlzIHRhYmxlLgotCi1IQUwgRHJpdmVyIEYyIHwgQ01TSVMgRGV2aWNlIEYyIHwgQ01TSVMgQ29yZSB8IFdhcyBkZWxpdmVyZWQgaW4gdGhlIGZ1bGwgTUNVIHBhY2thZ2UKLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVGFnIHYxLjIuMyB8IFRhZyB2Mi4yLjIgfCBUYWcgdjUuNC4wX2NtMyB8IFRhZyB2MS44LjAgKGFuZCBmb2xsb3dpbmcsIGlmIGFueSwgdGlsbCBIQUwgdGFnKQotVGFnIHYxLjIuNCB8IFRhZyB2Mi4yLjMgfCBUYWcgdjUuNC4wX2NtMyB8IFRhZyB2MS45LjAgKGFuZCBmb2xsb3dpbmcsIGlmIGFueSwgdGlsbCBIQUwgdGFnKQotVGFnIHYxLjIuNSB8IFRhZyB2Mi4yLjQgfCBUYWcgdjUuNC4wX2NtMyB8IFRhZyB2MS45LjEgKGFuZCBmb2xsb3dpbmcsIGlmIGFueSwgdGlsbCBIQUwgdGFnKQotVGFnIHYxLjIuNiB8IFRhZyB2Mi4yLjQgfCBUYWcgdjUuNC4wX2NtMyB8IFRhZyB2MS45LjIgKGFuZCBmb2xsb3dpbmcsIGlmIGFueSwgdGlsbCBIQUwgdGFnKQotVGFnIHYxLjIuNyB8IFRhZyB2Mi4yLjUgfCBUYWcgdjUuNC4wX2NtMyB8IFRhZyB2MS45LjMgKGFuZCBmb2xsb3dpbmcsIGlmIGFueSwgdGlsbCBIQUwgdGFnKQorSXQgaXMgKipjcnVjaWFsKiogdGhhdCB5b3UgdXNlIGEgY29uc2lzdGVudCBzZXQgb2YgdmVyc2lvbnMgZm9yIHRoZSBDTVNJUyBDb3JlIC0gQ01TSVMgRGV2aWNlIC0gSEFMLCBhcyBtZW50aW9uZWQgaW4gW3RoaXNdKGh0dHBzOi8vaHRtbHByZXZpZXcuZ2l0aHViLmlvLz9odHRwczovL2dpdGh1Yi5jb20vU1RNaWNyb2VsZWN0cm9uaWNzL1NUTTMyQ3ViZUYyL2Jsb2IvbWFzdGVyL1JlbGVhc2VfTm90ZXMuaHRtbCkgcmVsZWFzZSBub3RlLgogCiBUaGUgZnVsbCAqKlNUTTMyQ3ViZUYyKiogTUNVIHBhY2thZ2UgaXMgYXZhaWxhYmxlIFtoZXJlXShodHRwczovL2dpdGh1Yi5jb20vU1RNaWNyb2VsZWN0cm9uaWNzL1NUTTMyQ3ViZUYyKS4KIApkaWZmIC0tZ2l0IGEvUmVsZWFzZV9Ob3Rlcy5odG1sIGIvUmVsZWFzZV9Ob3Rlcy5odG1sCmluZGV4IDRlMTJmYTYuLjYyYzRlYTkgMTAwNjQ0Ci0tLSBhL1JlbGVhc2VfTm90ZXMuaHRtbAorKysgYi9SZWxlYXNlX05vdGVzLmh0bWwKQEAgLTExLDQ0ICsxMSwxODggQEAKICAgICAgIHNwYW4udW5kZXJsaW5le3RleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO30KICAgICAgIGRpdi5jb2x1bW57ZGlzcGxheTogaW5saW5lLWJsb2NrOyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyB3aWR0aDogNTAlO30KICAgPC9zdHlsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJfaHRtcmVzYy9taW5pLXN0LmNzcyIgLz4KKyAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj5AY2hhcnNldCAiVVRGLTgiOzpyb290IHstLWZvcmUtY29sb3I6ICMwMzIzNGI7LS1zZWNvbmRhcnktZm9yZS1jb2xvcjogIzAzMjM0YjstLWJhY2stY29sb3I6ICNmZmZmZmY7LS1zZWNvbmRhcnktYmFjay1jb2xvcjogI2ZmZmZmZjstLWJsb2NrcXVvdGUtY29sb3I6ICNlNjAwN2U7LS1wcmUtY29sb3I6ICNlNjAwN2U7LS1ib3JkZXItY29sb3I6ICMzY2I0ZTY7LS1zZWNvbmRhcnktYm9yZGVyLWNvbG9yOiAjM2NiNGU2Oy0taGVhZGluZy1yYXRpbzogMS4yOy0tdW5pdmVyc2FsLW1hcmdpbjogMC41cmVtOy0tdW5pdmVyc2FsLXBhZGRpbmc6IDAuMjVyZW07LS11bml2ZXJzYWwtYm9yZGVyLXJhZGl1czogMC4wNzVyZW07LS1iYWNrZ3JvdW5kLW1hcmdpbjogMS41JTstLWEtbGluay1jb2xvcjogIzNjYjRlNjstLWEtdmlzaXRlZC1jb2xvcjogIzhjMDA3ODsgfWh0bWwge2ZvbnQtc2l6ZTogMTMuNXB4OyB9YSwgYiwgZGVsLCBlbSwgaSwgaW5zLCBxLCBzcGFuLCBzdHJvbmcsIHUge2ZvbnQtc2l6ZTogMWVtOyB9aHRtbCwgKiB7Zm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgSGVsdmV0aWNhLCBhcmlhbCwgc2Fucy1zZXJpZjtsaW5lLWhlaWdodDogMS4yNTstd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IH0qIHtmb250LXNpemU6IDFyZW07IH1ib2R5IHttYXJnaW46IDA7Y29sb3I6IHZhcigtLWZvcmUtY29sb3IpO0BiYWNrZ3JvdW5kOiB2YXIoLS1iYWNrLWNvbG9yKTtiYWNrZ3JvdW5kOiB2YXIoLS1iYWNrLWNvbG9yKSBsaW5lYXItZ3JhZGllbnQoI2ZmZDIwMCwgI2ZmZDIwMCkgcmVwZWF0LXkgbGVmdCB0b3A7YmFja2dyb3VuZC1zaXplOiB2YXIoLS1iYWNrZ3JvdW5kLW1hcmdpbik7fWRldGFpbHMge2Rpc3BsYXk6IGJsb2NrOyB9c3VtbWFyeSB7ZGlzcGxheTogbGlzdC1pdGVtOyB9YWJiclt0aXRsZV0ge2JvcmRlci1ib3R0b206IG5vbmU7dGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUgZG90dGVkOyB9aW5wdXQge292ZXJmbG93OiB2aXNpYmxlOyB9aW1nIHttYXgtd2lkdGg6IDEwMCU7aGVpZ2h0OiBhdXRvOyB9aDEsIGgyLCBoMywgaDQsIGg1LCBoNiB7bGluZS1oZWlnaHQ6IDEuMjU7bWFyZ2luOiBjYWxjKDEuNSAqIHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pKSB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKTtmb250LXdlaWdodDogNDAwOyB9aDEgc21hbGwsIGgyIHNtYWxsLCBoMyBzbWFsbCwgaDQgc21hbGwsIGg1IHNtYWxsLCBoNiBzbWFsbCB7Y29sb3I6IHZhcigtLXNlY29uZGFyeS1mb3JlLWNvbG9yKTtkaXNwbGF5OiBibG9jazttYXJnaW4tdG9wOiAtMC4yNXJlbTsgfWgxIHtmb250LXNpemU6IGNhbGMoMXJlbSAqIHZhcigtLWhlYWRpbmctcmF0aW8pICogdmFyKC0taGVhZGluZy1yYXRpbykgKiB2YXIoLS1oZWFkaW5nLXJhdGlvKSk7IH1oMiB7Zm9udC1zaXplOiBjYWxjKDFyZW0gKiB2YXIoLS1oZWFkaW5nLXJhdGlvKSAqIHZhcigtLWhlYWRpbmctcmF0aW8pICk7Ym9yZGVyLXN0eWxlOiBub25lIG5vbmUgc29saWQgbm9uZSA7IGJvcmRlci13aWR0aDogdGhpbjtib3JkZXItY29sb3I6IHZhcigtLWJvcmRlci1jb2xvcik7IH1oMyB7Zm9udC1zaXplOiBjYWxjKDFyZW0gKiB2YXIoLS1oZWFkaW5nLXJhdGlvKSApOyB9aDQge2ZvbnQtc2l6ZTogY2FsYygxcmVtICogdmFyKC0taGVhZGluZy1yYXRpbykpOyB9aDUge2ZvbnQtc2l6ZTogMXJlbTsgfWg2IHtmb250LXNpemU6IGNhbGMoMXJlbSAvIHZhcigtLWhlYWRpbmctcmF0aW8pKTsgfXAge21hcmdpbjogdmFyKC0tdW5pdmVyc2FsLW1hcmdpbik7IH1vbCwgdWwge21hcmdpbjogdmFyKC0tdW5pdmVyc2FsLW1hcmdpbik7cGFkZGluZy1sZWZ0OiBjYWxjKDMgKiB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKSk7IH1iLCBzdHJvbmcge2ZvbnQtd2VpZ2h0OiA3MDA7IH1ociB7Ym94LXNpemluZzogY29udGVudC1ib3g7Ym9yZGVyOiAwO2xpbmUtaGVpZ2h0OiAxLjI1ZW07bWFyZ2luOiB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKTtoZWlnaHQ6IDAuMDcxNDI4NTcxNHJlbTtiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHRyYW5zcGFyZW50LCB2YXIoLS1ib3JkZXItY29sb3IpIDIwJSwgdmFyKC0tYm9yZGVyLWNvbG9yKSA4MCUsIHRyYW5zcGFyZW50KTsgfWJsb2NrcXVvdGUge2Rpc3BsYXk6IGJsb2NrO3Bvc2l0aW9uOiByZWxhdGl2ZTtmb250LXN0eWxlOiBpdGFsaWM7Y29sb3I6IHZhcigtLXNlY29uZGFyeS1mb3JlLWNvbG9yKTttYXJnaW46IHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pO3BhZGRpbmc6IGNhbGMoMyAqIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSk7Ym9yZGVyOiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tc2Vjb25kYXJ5LWJvcmRlci1jb2xvcik7Ym9yZGVyLWxlZnQ6IDAuM3JlbSBzb2xpZCB2YXIoLS1ibG9ja3F1b3RlLWNvbG9yKTtib3JkZXItcmFkaXVzOiAwIHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKSB2YXIoLS11bml2ZXJzYWwtYm9yZGVyLXJhZGl1cykgMDsgfWJsb2NrcXVvdGU6YmVmb3JlIHtwb3NpdGlvbjogYWJzb2x1dGU7dG9wOiBjYWxjKDByZW0gLSB2YXIoLS11bml2ZXJzYWwtcGFkZGluZykpO2xlZnQ6IDA7Zm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7Zm9udC1zaXplOiAycmVtO2ZvbnQtd2VpZ2h0OiA4MDA7Y29udGVudDogIlwyMDFjIjtjb2xvcjogdmFyKC0tYmxvY2txdW90ZS1jb2xvcik7IH1ibG9ja3F1b3RlW2NpdGVdOmFmdGVyIHtmb250LXN0eWxlOiBub3JtYWw7Zm9udC1zaXplOiAwLjc1ZW07Zm9udC13ZWlnaHQ6IDcwMDtjb250ZW50OiAiXGHigJQgIiBhdHRyKGNpdGUpO3doaXRlLXNwYWNlOiBwcmU7IH1jb2RlLCBrYmQsIHByZSwgc2FtcCB7Zm9udC1mYW1pbHk6IE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlO2ZvbnQtc2l6ZTogMC44NWVtOyB9Y29kZSB7YmFja2dyb3VuZDogdmFyKC0tc2Vjb25kYXJ5LWJhY2stY29sb3IpO2JvcmRlci1yYWRpdXM6IHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKTtwYWRkaW5nOiBjYWxjKHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSAvIDQpIGNhbGModmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpIC8gMik7IH1rYmQge2JhY2tncm91bmQ6IHZhcigtLWZvcmUtY29sb3IpO2NvbG9yOiB2YXIoLS1iYWNrLWNvbG9yKTtib3JkZXItcmFkaXVzOiB2YXIoLS11bml2ZXJzYWwtYm9yZGVyLXJhZGl1cyk7cGFkZGluZzogY2FsYyh2YXIoLS11bml2ZXJzYWwtcGFkZGluZykgLyA0KSBjYWxjKHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSAvIDIpOyB9cHJlIHtvdmVyZmxvdzogYXV0bztiYWNrZ3JvdW5kOiB2YXIoLS1zZWNvbmRhcnktYmFjay1jb2xvcik7cGFkZGluZzogY2FsYygxLjUgKiB2YXIoLS11bml2ZXJzYWwtcGFkZGluZykpO21hcmdpbjogdmFyKC0tdW5pdmVyc2FsLW1hcmdpbik7Ym9yZGVyOiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tc2Vjb25kYXJ5LWJvcmRlci1jb2xvcik7Ym9yZGVyLWxlZnQ6IDAuMjg1NzE0Mjg1N3JlbSBzb2xpZCB2YXIoLS1wcmUtY29sb3IpO2JvcmRlci1yYWRpdXM6IDAgdmFyKC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXMpIHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKSAwOyB9c3VwLCBzdWIsIGNvZGUsIGtiZCB7bGluZS1oZWlnaHQ6IDA7cG9zaXRpb246IHJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsgfXNtYWxsLCBzdXAsIHN1YiwgZmlnY2FwdGlvbiB7Zm9udC1zaXplOiAwLjc1ZW07IH1zdXAge3RvcDogLTAuNWVtOyB9c3ViIHtib3R0b206IC0wLjI1ZW07IH1maWd1cmUge21hcmdpbjogdmFyKC0tdW5pdmVyc2FsLW1hcmdpbik7IH1maWdjYXB0aW9uIHtjb2xvcjogdmFyKC0tc2Vjb25kYXJ5LWZvcmUtY29sb3IpOyB9YSB7dGV4dC1kZWNvcmF0aW9uOiBub25lOyB9YTpsaW5rIHtjb2xvcjogdmFyKC0tYS1saW5rLWNvbG9yKTsgfWE6dmlzaXRlZCB7Y29sb3I6IHZhcigtLWEtdmlzaXRlZC1jb2xvcik7IH1hOmhvdmVyLCBhOmZvY3VzIHt0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsgfS5jb250YWluZXIge21hcmdpbjogMCBhdXRvO3BhZGRpbmc6IDAgY2FsYygxLjUgKiB2YXIoLS11bml2ZXJzYWwtcGFkZGluZykpOyB9LnJvdyB7Ym94LXNpemluZzogYm9yZGVyLWJveDtkaXNwbGF5OiBmbGV4O2ZsZXg6IDAgMSBhdXRvO2ZsZXgtZmxvdzogcm93IHdyYXA7bWFyZ2luOiAwIDAgMCB2YXIoLS1iYWNrZ3JvdW5kLW1hcmdpbik7IH0uY29sLXNtLFtjbGFzc149J2NvbC1zbS0nXSxbY2xhc3NePSdjb2wtc20tb2Zmc2V0LSddLC5yb3dbY2xhc3MqPSdjb2xzLXNtLSddID4gKiB7Ym94LXNpemluZzogYm9yZGVyLWJveDtmbGV4OiAwIDAgYXV0bztwYWRkaW5nOiAwIGNhbGModmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpIC8gMik7IH0uY29sLXNtLC5yb3cuY29scy1zbSA+ICoge21heC13aWR0aDogMTAwJTtmbGV4LWdyb3c6IDE7ZmxleC1iYXNpczogMDsgfS5jb2wtc20tMSwucm93LmNvbHMtc20tMSA+ICoge21heC13aWR0aDogOC4zMzMzMzMzMzMzJTtmbGV4LWJhc2lzOiA4LjMzMzMzMzMzMzMlOyB9LmNvbC1zbS1vZmZzZXQtMCB7bWFyZ2luLWxlZnQ6IDA7IH0uY29sLXNtLTIsLnJvdy5jb2xzLXNtLTIgPiAqIHttYXgtd2lkdGg6IDE2LjY2NjY2NjY2NjclO2ZsZXgtYmFzaXM6IDE2LjY2NjY2NjY2NjclOyB9LmNvbC1zbS1vZmZzZXQtMSB7bWFyZ2luLWxlZnQ6IDguMzMzMzMzMzMzMyU7IH0uY29sLXNtLTMsLnJvdy5jb2xzLXNtLTMgPiAqIHttYXgtd2lkdGg6IDI1JTtmbGV4LWJhc2lzOiAyNSU7IH0uY29sLXNtLW9mZnNldC0yIHttYXJnaW4tbGVmdDogMTYuNjY2NjY2NjY2NyU7IH0uY29sLXNtLTQsLnJvdy5jb2xzLXNtLTQgPiAqIHttYXgtd2lkdGg6IDMzLjMzMzMzMzMzMzMlO2ZsZXgtYmFzaXM6IDMzLjMzMzMzMzMzMzMlOyB9LmNvbC1zbS1vZmZzZXQtMyB7bWFyZ2luLWxlZnQ6IDI1JTsgfS5jb2wtc20tNSwucm93LmNvbHMtc20tNSA+ICoge21heC13aWR0aDogNDEuNjY2NjY2NjY2NyU7ZmxleC1iYXNpczogNDEuNjY2NjY2NjY2NyU7IH0uY29sLXNtLW9mZnNldC00IHttYXJnaW4tbGVmdDogMzMuMzMzMzMzMzMzMyU7IH0uY29sLXNtLTYsLnJvdy5jb2xzLXNtLTYgPiAqIHttYXgtd2lkdGg6IDUwJTtmbGV4LWJhc2lzOiA1MCU7IH0uY29sLXNtLW9mZnNldC01IHttYXJnaW4tbGVmdDogNDEuNjY2NjY2NjY2NyU7IH0uY29sLXNtLTcsLnJvdy5jb2xzLXNtLTcgPiAqIHttYXgtd2lkdGg6IDU4LjMzMzMzMzMzMzMlO2ZsZXgtYmFzaXM6IDU4LjMzMzMzMzMzMzMlOyB9LmNvbC1zbS1vZmZzZXQtNiB7bWFyZ2luLWxlZnQ6IDUwJTsgfS5jb2wtc20tOCwucm93LmNvbHMtc20tOCA+ICoge21heC13aWR0aDogNjYuNjY2NjY2NjY2NyU7ZmxleC1iYXNpczogNjYuNjY2NjY2NjY2NyU7IH0uY29sLXNtLW9mZnNldC03IHttYXJnaW4tbGVmdDogNTguMzMzMzMzMzMzMyU7IH0uY29sLXNtLTksLnJvdy5jb2xzLXNtLTkgPiAqIHttYXgtd2lkdGg6IDc1JTtmbGV4LWJhc2lzOiA3NSU7IH0uY29sLXNtLW9mZnNldC04IHttYXJnaW4tbGVmdDogNjYuNjY2NjY2NjY2NyU7IH0uY29sLXNtLTEwLC5yb3cuY29scy1zbS0xMCA+ICoge21heC13aWR0aDogODMuMzMzMzMzMzMzMyU7ZmxleC1iYXNpczogODMuMzMzMzMzMzMzMyU7IH0uY29sLXNtLW9mZnNldC05IHttYXJnaW4tbGVmdDogNzUlOyB9LmNvbC1zbS0xMSwucm93LmNvbHMtc20tMTEgPiAqIHttYXgtd2lkdGg6IDkxLjY2NjY2NjY2NjclO2ZsZXgtYmFzaXM6IDkxLjY2NjY2NjY2NjclOyB9LmNvbC1zbS1vZmZzZXQtMTAge21hcmdpbi1sZWZ0OiA4My4zMzMzMzMzMzMzJTsgfS5jb2wtc20tMTIsLnJvdy5jb2xzLXNtLTEyID4gKiB7bWF4LXdpZHRoOiAxMDAlO2ZsZXgtYmFzaXM6IDEwMCU7IH0uY29sLXNtLW9mZnNldC0xMSB7bWFyZ2luLWxlZnQ6IDkxLjY2NjY2NjY2NjclOyB9LmNvbC1zbS1ub3JtYWwge29yZGVyOiBpbml0aWFsOyB9LmNvbC1zbS1maXJzdCB7b3JkZXI6IC05OTk7IH0uY29sLXNtLWxhc3Qge29yZGVyOiA5OTk7IH1AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1MDBweCkgey5jb2wtbWQsW2NsYXNzXj0nY29sLW1kLSddLFtjbGFzc149J2NvbC1tZC1vZmZzZXQtJ10sLnJvd1tjbGFzcyo9J2NvbHMtbWQtJ10gPiAqIHtib3gtc2l6aW5nOiBib3JkZXItYm94O2ZsZXg6IDAgMCBhdXRvO3BhZGRpbmc6IDAgY2FsYyh2YXIoLS11bml2ZXJzYWwtcGFkZGluZykgLyAyKTsgfS5jb2wtbWQsLnJvdy5jb2xzLW1kID4gKiB7bWF4LXdpZHRoOiAxMDAlO2ZsZXgtZ3JvdzogMTtmbGV4LWJhc2lzOiAwOyB9LmNvbC1tZC0xLC5yb3cuY29scy1tZC0xID4gKiB7bWF4LXdpZHRoOiA4LjMzMzMzMzMzMzMlO2ZsZXgtYmFzaXM6IDguMzMzMzMzMzMzMyU7IH0uY29sLW1kLW9mZnNldC0wIHttYXJnaW4tbGVmdDogMDsgfS5jb2wtbWQtMiwucm93LmNvbHMtbWQtMiA+ICoge21heC13aWR0aDogMTYuNjY2NjY2NjY2NyU7ZmxleC1iYXNpczogMTYuNjY2NjY2NjY2NyU7IH0uY29sLW1kLW9mZnNldC0xIHttYXJnaW4tbGVmdDogOC4zMzMzMzMzMzMzJTsgfS5jb2wtbWQtMywucm93LmNvbHMtbWQtMyA+ICoge21heC13aWR0aDogMjUlO2ZsZXgtYmFzaXM6IDI1JTsgfS5jb2wtbWQtb2Zmc2V0LTIge21hcmdpbi1sZWZ0OiAxNi42NjY2NjY2NjY3JTsgfS5jb2wtbWQtNCwucm93LmNvbHMtbWQtNCA+ICoge21heC13aWR0aDogMzMuMzMzMzMzMzMzMyU7ZmxleC1iYXNpczogMzMuMzMzMzMzMzMzMyU7IH0uY29sLW1kLW9mZnNldC0zIHttYXJnaW4tbGVmdDogMjUlOyB9LmNvbC1tZC01LC5yb3cuY29scy1tZC01ID4gKiB7bWF4LXdpZHRoOiA0MS42NjY2NjY2NjY3JTtmbGV4LWJhc2lzOiA0MS42NjY2NjY2NjY3JTsgfS5jb2wtbWQtb2Zmc2V0LTQge21hcmdpbi1sZWZ0OiAzMy4zMzMzMzMzMzMzJTsgfS5jb2wtbWQtNiwucm93LmNvbHMtbWQtNiA+ICoge21heC13aWR0aDogNTAlO2ZsZXgtYmFzaXM6IDUwJTsgfS5jb2wtbWQtb2Zmc2V0LTUge21hcmdpbi1sZWZ0OiA0MS42NjY2NjY2NjY3JTsgfS5jb2wtbWQtNywucm93LmNvbHMtbWQtNyA+ICoge21heC13aWR0aDogNTguMzMzMzMzMzMzMyU7ZmxleC1iYXNpczogNTguMzMzMzMzMzMzMyU7IH0uY29sLW1kLW9mZnNldC02IHttYXJnaW4tbGVmdDogNTAlOyB9LmNvbC1tZC04LC5yb3cuY29scy1tZC04ID4gKiB7bWF4LXdpZHRoOiA2Ni42NjY2NjY2NjY3JTtmbGV4LWJhc2lzOiA2Ni42NjY2NjY2NjY3JTsgfS5jb2wtbWQtb2Zmc2V0LTcge21hcmdpbi1sZWZ0OiA1OC4zMzMzMzMzMzMzJTsgfS5jb2wtbWQtOSwucm93LmNvbHMtbWQtOSA+ICoge21heC13aWR0aDogNzUlO2ZsZXgtYmFzaXM6IDc1JTsgfS5jb2wtbWQtb2Zmc2V0LTgge21hcmdpbi1sZWZ0OiA2Ni42NjY2NjY2NjY3JTsgfS5jb2wtbWQtMTAsLnJvdy5jb2xzLW1kLTEwID4gKiB7bWF4LXdpZHRoOiA4My4zMzMzMzMzMzMzJTtmbGV4LWJhc2lzOiA4My4zMzMzMzMzMzMzJTsgfS5jb2wtbWQtb2Zmc2V0LTkge21hcmdpbi1sZWZ0OiA3NSU7IH0uY29sLW1kLTExLC5yb3cuY29scy1tZC0xMSA+ICoge21heC13aWR0aDogOTEuNjY2NjY2NjY2NyU7ZmxleC1iYXNpczogOTEuNjY2NjY2NjY2NyU7IH0uY29sLW1kLW9mZnNldC0xMCB7bWFyZ2luLWxlZnQ6IDgzLjMzMzMzMzMzMzMlOyB9LmNvbC1tZC0xMiwucm93LmNvbHMtbWQtMTIgPiAqIHttYXgtd2lkdGg6IDEwMCU7ZmxleC1iYXNpczogMTAwJTsgfS5jb2wtbWQtb2Zmc2V0LTExIHttYXJnaW4tbGVmdDogOTEuNjY2NjY2NjY2NyU7IH0uY29sLW1kLW5vcm1hbCB7b3JkZXI6IGluaXRpYWw7IH0uY29sLW1kLWZpcnN0IHtvcmRlcjogLTk5OTsgfS5jb2wtbWQtbGFzdCB7b3JkZXI6IDk5OTsgfSB9QG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTI4MHB4KSB7LmNvbC1sZyxbY2xhc3NePSdjb2wtbGctJ10sW2NsYXNzXj0nY29sLWxnLW9mZnNldC0nXSwucm93W2NsYXNzKj0nY29scy1sZy0nXSA+ICoge2JveC1zaXppbmc6IGJvcmRlci1ib3g7ZmxleDogMCAwIGF1dG87cGFkZGluZzogMCBjYWxjKHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSAvIDIpOyB9LmNvbC1sZywucm93LmNvbHMtbGcgPiAqIHttYXgtd2lkdGg6IDEwMCU7ZmxleC1ncm93OiAxO2ZsZXgtYmFzaXM6IDA7IH0uY29sLWxnLTEsLnJvdy5jb2xzLWxnLTEgPiAqIHttYXgtd2lkdGg6IDguMzMzMzMzMzMzMyU7ZmxleC1iYXNpczogOC4zMzMzMzMzMzMzJTsgfS5jb2wtbGctb2Zmc2V0LTAge21hcmdpbi1sZWZ0OiAwOyB9LmNvbC1sZy0yLC5yb3cuY29scy1sZy0yID4gKiB7bWF4LXdpZHRoOiAxNi42NjY2NjY2NjY3JTtmbGV4LWJhc2lzOiAxNi42NjY2NjY2NjY3JTsgfS5jb2wtbGctb2Zmc2V0LTEge21hcmdpbi1sZWZ0OiA4LjMzMzMzMzMzMzMlOyB9LmNvbC1sZy0zLC5yb3cuY29scy1sZy0zID4gKiB7bWF4LXdpZHRoOiAyNSU7ZmxleC1iYXNpczogMjUlOyB9LmNvbC1sZy1vZmZzZXQtMiB7bWFyZ2luLWxlZnQ6IDE2LjY2NjY2NjY2NjclOyB9LmNvbC1sZy00LC5yb3cuY29scy1sZy00ID4gKiB7bWF4LXdpZHRoOiAzMy4zMzMzMzMzMzMzJTtmbGV4LWJhc2lzOiAzMy4zMzMzMzMzMzMzJTsgfS5jb2wtbGctb2Zmc2V0LTMge21hcmdpbi1sZWZ0OiAyNSU7IH0uY29sLWxnLTUsLnJvdy5jb2xzLWxnLTUgPiAqIHttYXgtd2lkdGg6IDQxLjY2NjY2NjY2NjclO2ZsZXgtYmFzaXM6IDQxLjY2NjY2NjY2NjclOyB9LmNvbC1sZy1vZmZzZXQtNCB7bWFyZ2luLWxlZnQ6IDMzLjMzMzMzMzMzMzMlOyB9LmNvbC1sZy02LC5yb3cuY29scy1sZy02ID4gKiB7bWF4LXdpZHRoOiA1MCU7ZmxleC1iYXNpczogNTAlOyB9LmNvbC1sZy1vZmZzZXQtNSB7bWFyZ2luLWxlZnQ6IDQxLjY2NjY2NjY2NjclOyB9LmNvbC1sZy03LC5yb3cuY29scy1sZy03ID4gKiB7bWF4LXdpZHRoOiA1OC4zMzMzMzMzMzMzJTtmbGV4LWJhc2lzOiA1OC4zMzMzMzMzMzMzJTsgfS5jb2wtbGctb2Zmc2V0LTYge21hcmdpbi1sZWZ0OiA1MCU7IH0uY29sLWxnLTgsLnJvdy5jb2xzLWxnLTggPiAqIHttYXgtd2lkdGg6IDY2LjY2NjY2NjY2NjclO2ZsZXgtYmFzaXM6IDY2LjY2NjY2NjY2NjclOyB9LmNvbC1sZy1vZmZzZXQtNyB7bWFyZ2luLWxlZnQ6IDU4LjMzMzMzMzMzMzMlOyB9LmNvbC1sZy05LC5yb3cuY29scy1sZy05ID4gKiB7bWF4LXdpZHRoOiA3NSU7ZmxleC1iYXNpczogNzUlOyB9LmNvbC1sZy1vZmZzZXQtOCB7bWFyZ2luLWxlZnQ6IDY2LjY2NjY2NjY2NjclOyB9LmNvbC1sZy0xMCwucm93LmNvbHMtbGctMTAgPiAqIHttYXgtd2lkdGg6IDgzLjMzMzMzMzMzMzMlO2ZsZXgtYmFzaXM6IDgzLjMzMzMzMzMzMzMlOyB9LmNvbC1sZy1vZmZzZXQtOSB7bWFyZ2luLWxlZnQ6IDc1JTsgfS5jb2wtbGctMTEsLnJvdy5jb2xzLWxnLTExID4gKiB7bWF4LXdpZHRoOiA5MS42NjY2NjY2NjY3JTtmbGV4LWJhc2lzOiA5MS42NjY2NjY2NjY3JTsgfS5jb2wtbGctb2Zmc2V0LTEwIHttYXJnaW4tbGVmdDogODMuMzMzMzMzMzMzMyU7IH0uY29sLWxnLTEyLC5yb3cuY29scy1sZy0xMiA+ICoge21heC13aWR0aDogMTAwJTtmbGV4LWJhc2lzOiAxMDAlOyB9LmNvbC1sZy1vZmZzZXQtMTEge21hcmdpbi1sZWZ0OiA5MS42NjY2NjY2NjY3JTsgfS5jb2wtbGctbm9ybWFsIHtvcmRlcjogaW5pdGlhbDsgfS5jb2wtbGctZmlyc3Qge29yZGVyOiAtOTk5OyB9LmNvbC1sZy1sYXN0IHtvcmRlcjogOTk5OyB9IH06cm9vdCB7LS1jYXJkLWJhY2stY29sb3I6ICMzY2I0ZTY7LS1jYXJkLWZvcmUtY29sb3I6ICMwMzIzNGI7LS1jYXJkLWJvcmRlci1jb2xvcjogIzAzMjM0YjsgfS5jYXJkIHtkaXNwbGF5OiBmbGV4O2ZsZXgtZGlyZWN0aW9uOiBjb2x1bW47anVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO2FsaWduLXNlbGY6IGNlbnRlcjtwb3NpdGlvbjogcmVsYXRpdmU7d2lkdGg6IDEwMCU7YmFja2dyb3VuZDogdmFyKC0tY2FyZC1iYWNrLWNvbG9yKTtjb2xvcjogdmFyKC0tY2FyZC1mb3JlLWNvbG9yKTtib3JkZXI6IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS1jYXJkLWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czogdmFyKC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXMpO21hcmdpbjogdmFyKC0tdW5pdmVyc2FsLW1hcmdpbik7b3ZlcmZsb3c6IGhpZGRlbjsgfUBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDMyMHB4KSB7LmNhcmQge21heC13aWR0aDogMzIwcHg7IH0gfS5jYXJkID4gLnNlY3Rpb25lIHtiYWNrZ3JvdW5kOiB2YXIoLS1jYXJkLWJhY2stY29sb3IpO2NvbG9yOiB2YXIoLS1jYXJkLWZvcmUtY29sb3IpO2JveC1zaXppbmc6IGJvcmRlci1ib3g7bWFyZ2luOiAwO2JvcmRlcjogMDtib3JkZXItcmFkaXVzOiAwO2JvcmRlci1ib3R0b206IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS1jYXJkLWJvcmRlci1jb2xvcik7cGFkZGluZzogdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpO3dpZHRoOiAxMDAlOyB9LmNhcmQgPiAuc2VjdGlvbmUubWVkaWEge2hlaWdodDogMjAwcHg7cGFkZGluZzogMDstby1vYmplY3QtZml0OiBjb3ZlcjtvYmplY3QtZml0OiBjb3ZlcjsgfS5jYXJkID4gLnNlY3Rpb25lOmxhc3QtY2hpbGQge2JvcmRlci1ib3R0b206IDA7IH1AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAyNDBweCkgey5jYXJkLnNtYWxsIHttYXgtd2lkdGg6IDI0MHB4OyB9IH1AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA0ODBweCkgey5jYXJkLmxhcmdlIHttYXgtd2lkdGg6IDQ4MHB4OyB9IH0uY2FyZC5mbHVpZCB7bWF4LXdpZHRoOiAxMDAlO3dpZHRoOiBhdXRvOyB9LmNhcmQud2FybmluZyB7LS1jYXJkLWJhY2stY29sb3I6ICNlNWI4Yjc7LS1jYXJkLWZvcmUtY29sb3I6ICMzYjIzNGI7LS1jYXJkLWJvcmRlci1jb2xvcjogIzhjMDA3ODsgfS5jYXJkLmVycm9yIHstLWNhcmQtYmFjay1jb2xvcjogIzQ2NDY1MDstLWNhcmQtZm9yZS1jb2xvcjogI2ZmZmZmZjstLWNhcmQtYm9yZGVyLWNvbG9yOiAjOGMwMDc4OyB9LmNhcmQgPiAuc2VjdGlvbmUuZGFyayB7LS1jYXJkLWJhY2stY29sb3I6ICMzYjIzNGI7LS1jYXJkLWZvcmUtY29sb3I6ICNmZmZmZmY7IH0uY2FyZCA+IC5zZWN0aW9uZS5kb3VibGUtcGFkZGVkIHtwYWRkaW5nOiBjYWxjKDEuNSAqIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSk7IH06cm9vdCB7LS1mb3JtLWJhY2stY29sb3I6ICNmZmU5N2Y7LS1mb3JtLWZvcmUtY29sb3I6ICMwMzIzNGI7LS1mb3JtLWJvcmRlci1jb2xvcjogIzNjYjRlNjstLWlucHV0LWJhY2stY29sb3I6ICNmZmZmZmY7LS1pbnB1dC1mb3JlLWNvbG9yOiAjMDMyMzRiOy0taW5wdXQtYm9yZGVyLWNvbG9yOiAjM2NiNGU2Oy0taW5wdXQtZm9jdXMtY29sb3I6ICMwMjg4ZDE7LS1pbnB1dC1pbnZhbGlkLWNvbG9yOiAjZDMyZjJmOy0tYnV0dG9uLWJhY2stY29sb3I6ICNlMmUyZTI7LS1idXR0b24taG92ZXItYmFjay1jb2xvcjogI2RjZGNkYzstLWJ1dHRvbi1mb3JlLWNvbG9yOiAjMjEyMTIxOy0tYnV0dG9uLWJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7LS1idXR0b24taG92ZXItYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDstLWJ1dHRvbi1ncm91cC1ib3JkZXItY29sb3I6IHJnYmEoMTI0LCAxMjQsIDEyNCwgMC41NCk7IH1mb3JtIHtiYWNrZ3JvdW5kOiB2YXIoLS1mb3JtLWJhY2stY29sb3IpO2NvbG9yOiB2YXIoLS1mb3JtLWZvcmUtY29sb3IpO2JvcmRlcjogMC4wNzE0Mjg1NzE0cmVtIHNvbGlkIHZhcigtLWZvcm0tYm9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOiB2YXIoLS11bml2ZXJzYWwtYm9yZGVyLXJhZGl1cyk7bWFyZ2luOiB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKTtwYWRkaW5nOiBjYWxjKDIgKiB2YXIoLS11bml2ZXJzYWwtcGFkZGluZykpIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKTsgfWZpZWxkc2V0IHtib3JkZXI6IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS1mb3JtLWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czogdmFyKC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXMpO21hcmdpbjogY2FsYyh2YXIoLS11bml2ZXJzYWwtbWFyZ2luKSAvIDQpO3BhZGRpbmc6IHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKTsgfWxlZ2VuZCB7Ym94LXNpemluZzogYm9yZGVyLWJveDtkaXNwbGF5OiB0YWJsZTttYXgtd2lkdGg6IDEwMCU7d2hpdGUtc3BhY2U6IG5vcm1hbDtmb250LXdlaWdodDogNTAwO3BhZGRpbmc6IGNhbGModmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpIC8gMik7IH1sYWJlbCB7cGFkZGluZzogY2FsYyh2YXIoLS11bml2ZXJzYWwtcGFkZGluZykgLyAyKSB2YXIoLS11bml2ZXJzYWwtcGFkZGluZyk7IH0uaW5wdXQtZ3JvdXAge2Rpc3BsYXk6IGlubGluZS1ibG9jazsgfS5pbnB1dC1ncm91cC5mbHVpZCB7ZGlzcGxheTogZmxleDthbGlnbi1pdGVtczogY2VudGVyO2p1c3RpZnktY29udGVudDogY2VudGVyOyB9LmlucHV0LWdyb3VwLmZsdWlkID4gaW5wdXQge21heC13aWR0aDogMTAwJTtmbGV4LWdyb3c6IDE7ZmxleC1iYXNpczogMHB4OyB9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDk5cHgpIHsuaW5wdXQtZ3JvdXAuZmx1aWQge2FsaWduLWl0ZW1zOiBzdHJldGNoO2ZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IH0gfS5pbnB1dC1ncm91cC52ZXJ0aWNhbCB7ZGlzcGxheTogZmxleDthbGlnbi1pdGVtczogc3RyZXRjaDtmbGV4LWRpcmVjdGlvbjogY29sdW1uOyB9LmlucHV0LWdyb3VwLnZlcnRpY2FsID4gaW5wdXQge21heC13aWR0aDogMTAwJTtmbGV4LWdyb3c6IDE7ZmxleC1iYXNpczogMHB4OyB9W3R5cGU9Im51bWJlciJdOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLCBbdHlwZT0ibnVtYmVyIl06Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24ge2hlaWdodDogYXV0bzsgfVt0eXBlPSJzZWFyY2giXSB7LXdlYmtpdC1hcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7b3V0bGluZS1vZmZzZXQ6IC0ycHg7IH1bdHlwZT0ic2VhcmNoIl06Oi13ZWJraXQtc2VhcmNoLWNhbmNlbC1idXR0b24sW3R5cGU9InNlYXJjaCJdOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uIHstd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7IH1pbnB1dDpub3QoW3R5cGVdKSwgW3R5cGU9InRleHQiXSwgW3R5cGU9ImVtYWlsIl0sIFt0eXBlPSJudW1iZXIiXSwgW3R5cGU9InNlYXJjaCJdLFt0eXBlPSJwYXNzd29yZCJdLCBbdHlwZT0idXJsIl0sIFt0eXBlPSJ0ZWwiXSwgW3R5cGU9ImNoZWNrYm94Il0sIFt0eXBlPSJyYWRpbyJdLCB0ZXh0YXJlYSwgc2VsZWN0IHtib3gtc2l6aW5nOiBib3JkZXItYm94O2JhY2tncm91bmQ6IHZhcigtLWlucHV0LWJhY2stY29sb3IpO2NvbG9yOiB2YXIoLS1pbnB1dC1mb3JlLWNvbG9yKTtib3JkZXI6IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS1pbnB1dC1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6IHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKTttYXJnaW46IGNhbGModmFyKC0tdW5pdmVyc2FsLW1hcmdpbikgLyAyKTtwYWRkaW5nOiB2YXIoLS11bml2ZXJzYWwtcGFkZGluZykgY2FsYygxLjUgKiB2YXIoLS11bml2ZXJzYWwtcGFkZGluZykpOyB9aW5wdXQ6bm90KFt0eXBlPSJidXR0b24iXSk6bm90KFt0eXBlPSJzdWJtaXQiXSk6bm90KFt0eXBlPSJyZXNldCJdKTpob3ZlciwgaW5wdXQ6bm90KFt0eXBlPSJidXR0b24iXSk6bm90KFt0eXBlPSJzdWJtaXQiXSk6bm90KFt0eXBlPSJyZXNldCJdKTpmb2N1cywgdGV4dGFyZWE6aG92ZXIsIHRleHRhcmVhOmZvY3VzLCBzZWxlY3Q6aG92ZXIsIHNlbGVjdDpmb2N1cyB7Ym9yZGVyLWNvbG9yOiB2YXIoLS1pbnB1dC1mb2N1cy1jb2xvcik7Ym94LXNoYWRvdzogbm9uZTsgfWlucHV0Om5vdChbdHlwZT0iYnV0dG9uIl0pOm5vdChbdHlwZT0ic3VibWl0Il0pOm5vdChbdHlwZT0icmVzZXQiXSk6aW52YWxpZCwgaW5wdXQ6bm90KFt0eXBlPSJidXR0b24iXSk6bm90KFt0eXBlPSJzdWJtaXQiXSk6bm90KFt0eXBlPSJyZXNldCJdKTpmb2N1czppbnZhbGlkLCB0ZXh0YXJlYTppbnZhbGlkLCB0ZXh0YXJlYTpmb2N1czppbnZhbGlkLCBzZWxlY3Q6aW52YWxpZCwgc2VsZWN0OmZvY3VzOmludmFsaWQge2JvcmRlci1jb2xvcjogdmFyKC0taW5wdXQtaW52YWxpZC1jb2xvcik7Ym94LXNoYWRvdzogbm9uZTsgfWlucHV0Om5vdChbdHlwZT0iYnV0dG9uIl0pOm5vdChbdHlwZT0ic3VibWl0Il0pOm5vdChbdHlwZT0icmVzZXQiXSlbcmVhZG9ubHldLCB0ZXh0YXJlYVtyZWFkb25seV0sIHNlbGVjdFtyZWFkb25seV0ge2JhY2tncm91bmQ6IHZhcigtLXNlY29uZGFyeS1iYWNrLWNvbG9yKTsgfXNlbGVjdCB7bWF4LXdpZHRoOiAxMDAlOyB9b3B0aW9uIHtvdmVyZmxvdzogaGlkZGVuO3RleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOyB9W3R5cGU9ImNoZWNrYm94Il0sIFt0eXBlPSJyYWRpbyJdIHstd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7LW1vei1hcHBlYXJhbmNlOiBub25lO2FwcGVhcmFuY2U6IG5vbmU7cG9zaXRpb246IHJlbGF0aXZlO2hlaWdodDogY2FsYygxcmVtICsgdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpIC8gMik7d2lkdGg6IGNhbGMoMXJlbSArIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSAvIDIpO3ZlcnRpY2FsLWFsaWduOiB0ZXh0LWJvdHRvbTtwYWRkaW5nOiAwO2ZsZXgtYmFzaXM6IGNhbGMoMXJlbSArIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSAvIDIpICFpbXBvcnRhbnQ7ZmxleC1ncm93OiAwICFpbXBvcnRhbnQ7IH1bdHlwZT0iY2hlY2tib3giXTpjaGVja2VkOmJlZm9yZSwgW3R5cGU9InJhZGlvIl06Y2hlY2tlZDpiZWZvcmUge3Bvc2l0aW9uOiBhYnNvbHV0ZTsgfVt0eXBlPSJjaGVja2JveCJdOmNoZWNrZWQ6YmVmb3JlIHtjb250ZW50OiAnXDI3MTMnO2ZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmO2ZvbnQtc2l6ZTogY2FsYygxcmVtICsgdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpIC8gMik7dG9wOiBjYWxjKDByZW0gLSB2YXIoLS11bml2ZXJzYWwtcGFkZGluZykpO2xlZnQ6IGNhbGModmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpIC8gNCk7IH1bdHlwZT0icmFkaW8iXSB7Ym9yZGVyLXJhZGl1czogMTAwJTsgfVt0eXBlPSJyYWRpbyJdOmNoZWNrZWQ6YmVmb3JlIHtib3JkZXItcmFkaXVzOiAxMDAlO2NvbnRlbnQ6ICcnO3RvcDogY2FsYygwLjA3MTQyODU3MTRyZW0gKyB2YXIoLS11bml2ZXJzYWwtcGFkZGluZykgLyAyKTtsZWZ0OiBjYWxjKDAuMDcxNDI4NTcxNHJlbSArIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSAvIDIpO2JhY2tncm91bmQ6IHZhcigtLWlucHV0LWZvcmUtY29sb3IpO3dpZHRoOiAwLjVyZW07aGVpZ2h0OiAwLjVyZW07IH06cGxhY2Vob2xkZXItc2hvd24ge2NvbG9yOiB2YXIoLS1pbnB1dC1mb3JlLWNvbG9yKTsgfTo6LW1zLXBsYWNlaG9sZGVyIHtjb2xvcjogdmFyKC0taW5wdXQtZm9yZS1jb2xvcik7b3BhY2l0eTogMC41NDsgfWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwgW3R5cGU9ImJ1dHRvbiJdOjotbW96LWZvY3VzLWlubmVyLCBbdHlwZT0icmVzZXQiXTo6LW1vei1mb2N1cy1pbm5lciwgW3R5cGU9InN1Ym1pdCJdOjotbW96LWZvY3VzLWlubmVyIHtib3JkZXItc3R5bGU6IG5vbmU7cGFkZGluZzogMDsgfWJ1dHRvbiwgaHRtbCBbdHlwZT0iYnV0dG9uIl0sIFt0eXBlPSJyZXNldCJdLCBbdHlwZT0ic3VibWl0Il0gey13ZWJraXQtYXBwZWFyYW5jZTogYnV0dG9uOyB9YnV0dG9uIHtvdmVyZmxvdzogdmlzaWJsZTt0ZXh0LXRyYW5zZm9ybTogbm9uZTsgfWJ1dHRvbiwgW3R5cGU9ImJ1dHRvbiJdLCBbdHlwZT0ic3VibWl0Il0sIFt0eXBlPSJyZXNldCJdLGEuYnV0dG9uLCBsYWJlbC5idXR0b24sIC5idXR0b24sYVtyb2xlPSJidXR0b24iXSwgbGFiZWxbcm9sZT0iYnV0dG9uIl0sIFtyb2xlPSJidXR0b24iXSB7ZGlzcGxheTogaW5saW5lLWJsb2NrO2JhY2tncm91bmQ6IHZhcigtLWJ1dHRvbi1iYWNrLWNvbG9yKTtjb2xvcjogdmFyKC0tYnV0dG9uLWZvcmUtY29sb3IpO2JvcmRlcjogMC4wNzE0Mjg1NzE0cmVtIHNvbGlkIHZhcigtLWJ1dHRvbi1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6IHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKTtwYWRkaW5nOiB2YXIoLS11bml2ZXJzYWwtcGFkZGluZykgY2FsYygxLjUgKiB2YXIoLS11bml2ZXJzYWwtcGFkZGluZykpO21hcmdpbjogdmFyKC0tdW5pdmVyc2FsLW1hcmdpbik7dGV4dC1kZWNvcmF0aW9uOiBub25lO2N1cnNvcjogcG9pbnRlcjt0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuM3M7IH1idXR0b246aG92ZXIsIGJ1dHRvbjpmb2N1cywgW3R5cGU9ImJ1dHRvbiJdOmhvdmVyLCBbdHlwZT0iYnV0dG9uIl06Zm9jdXMsIFt0eXBlPSJzdWJtaXQiXTpob3ZlciwgW3R5cGU9InN1Ym1pdCJdOmZvY3VzLCBbdHlwZT0icmVzZXQiXTpob3ZlciwgW3R5cGU9InJlc2V0Il06Zm9jdXMsYS5idXR0b246aG92ZXIsYS5idXR0b246Zm9jdXMsIGxhYmVsLmJ1dHRvbjpob3ZlciwgbGFiZWwuYnV0dG9uOmZvY3VzLCAuYnV0dG9uOmhvdmVyLCAuYnV0dG9uOmZvY3VzLGFbcm9sZT0iYnV0dG9uIl06aG92ZXIsYVtyb2xlPSJidXR0b24iXTpmb2N1cywgbGFiZWxbcm9sZT0iYnV0dG9uIl06aG92ZXIsIGxhYmVsW3JvbGU9ImJ1dHRvbiJdOmZvY3VzLCBbcm9sZT0iYnV0dG9uIl06aG92ZXIsIFtyb2xlPSJidXR0b24iXTpmb2N1cyB7YmFja2dyb3VuZDogdmFyKC0tYnV0dG9uLWhvdmVyLWJhY2stY29sb3IpO2JvcmRlci1jb2xvcjogdmFyKC0tYnV0dG9uLWhvdmVyLWJvcmRlci1jb2xvcik7IH1pbnB1dDpkaXNhYmxlZCwgaW5wdXRbZGlzYWJsZWRdLCB0ZXh0YXJlYTpkaXNhYmxlZCwgdGV4dGFyZWFbZGlzYWJsZWRdLCBzZWxlY3Q6ZGlzYWJsZWQsIHNlbGVjdFtkaXNhYmxlZF0sIGJ1dHRvbjpkaXNhYmxlZCwgYnV0dG9uW2Rpc2FibGVkXSwgLmJ1dHRvbjpkaXNhYmxlZCwgLmJ1dHRvbltkaXNhYmxlZF0sIFtyb2xlPSJidXR0b24iXTpkaXNhYmxlZCwgW3JvbGU9ImJ1dHRvbiJdW2Rpc2FibGVkXSB7Y3Vyc29yOiBub3QtYWxsb3dlZDtvcGFjaXR5OiAwLjc1OyB9LmJ1dHRvbi1ncm91cCB7ZGlzcGxheTogZmxleDtib3JkZXI6IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS1idXR0b24tZ3JvdXAtYm9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOiB2YXIoLS11bml2ZXJzYWwtYm9yZGVyLXJhZGl1cyk7bWFyZ2luOiB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKTsgfS5idXR0b24tZ3JvdXAgPiBidXR0b24sIC5idXR0b24tZ3JvdXAgW3R5cGU9ImJ1dHRvbiJdLCAuYnV0dG9uLWdyb3VwID4gW3R5cGU9InN1Ym1pdCJdLCAuYnV0dG9uLWdyb3VwID4gW3R5cGU9InJlc2V0Il0sIC5idXR0b24tZ3JvdXAgPiAuYnV0dG9uLCAuYnV0dG9uLWdyb3VwID4gW3JvbGU9ImJ1dHRvbiJdIHttYXJnaW46IDA7bWF4LXdpZHRoOiAxMDAlO2ZsZXg6IDEgMSBhdXRvO3RleHQtYWxpZ246IGNlbnRlcjtib3JkZXI6IDA7Ym9yZGVyLXJhZGl1czogMDtib3gtc2hhZG93OiBub25lOyB9LmJ1dHRvbi1ncm91cCA+IDpub3QoOmZpcnN0LWNoaWxkKSB7Ym9yZGVyLWxlZnQ6IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS1idXR0b24tZ3JvdXAtYm9yZGVyLWNvbG9yKTsgfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ5OXB4KSB7LmJ1dHRvbi1ncm91cCB7ZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgfS5idXR0b24tZ3JvdXAgPiA6bm90KDpmaXJzdC1jaGlsZCkge2JvcmRlcjogMDtib3JkZXItdG9wOiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tYnV0dG9uLWdyb3VwLWJvcmRlci1jb2xvcik7IH0gfWJ1dHRvbi5wcmltYXJ5LCBbdHlwZT0iYnV0dG9uIl0ucHJpbWFyeSwgW3R5cGU9InN1Ym1pdCJdLnByaW1hcnksIFt0eXBlPSJyZXNldCJdLnByaW1hcnksIC5idXR0b24ucHJpbWFyeSwgW3JvbGU9ImJ1dHRvbiJdLnByaW1hcnkgey0tYnV0dG9uLWJhY2stY29sb3I6ICMxOTc2ZDI7LS1idXR0b24tZm9yZS1jb2xvcjogI2Y4ZjhmODsgfWJ1dHRvbi5wcmltYXJ5OmhvdmVyLCBidXR0b24ucHJpbWFyeTpmb2N1cywgW3R5cGU9ImJ1dHRvbiJdLnByaW1hcnk6aG92ZXIsIFt0eXBlPSJidXR0b24iXS5wcmltYXJ5OmZvY3VzLCBbdHlwZT0ic3VibWl0Il0ucHJpbWFyeTpob3ZlciwgW3R5cGU9InN1Ym1pdCJdLnByaW1hcnk6Zm9jdXMsIFt0eXBlPSJyZXNldCJdLnByaW1hcnk6aG92ZXIsIFt0eXBlPSJyZXNldCJdLnByaW1hcnk6Zm9jdXMsIC5idXR0b24ucHJpbWFyeTpob3ZlciwgLmJ1dHRvbi5wcmltYXJ5OmZvY3VzLCBbcm9sZT0iYnV0dG9uIl0ucHJpbWFyeTpob3ZlciwgW3JvbGU9ImJ1dHRvbiJdLnByaW1hcnk6Zm9jdXMgey0tYnV0dG9uLWhvdmVyLWJhY2stY29sb3I6ICMxNTY1YzA7IH1idXR0b24uc2Vjb25kYXJ5LCBbdHlwZT0iYnV0dG9uIl0uc2Vjb25kYXJ5LCBbdHlwZT0ic3VibWl0Il0uc2Vjb25kYXJ5LCBbdHlwZT0icmVzZXQiXS5zZWNvbmRhcnksIC5idXR0b24uc2Vjb25kYXJ5LCBbcm9sZT0iYnV0dG9uIl0uc2Vjb25kYXJ5IHstLWJ1dHRvbi1iYWNrLWNvbG9yOiAjZDMyZjJmOy0tYnV0dG9uLWZvcmUtY29sb3I6ICNmOGY4Zjg7IH1idXR0b24uc2Vjb25kYXJ5OmhvdmVyLCBidXR0b24uc2Vjb25kYXJ5OmZvY3VzLCBbdHlwZT0iYnV0dG9uIl0uc2Vjb25kYXJ5OmhvdmVyLCBbdHlwZT0iYnV0dG9uIl0uc2Vjb25kYXJ5OmZvY3VzLCBbdHlwZT0ic3VibWl0Il0uc2Vjb25kYXJ5OmhvdmVyLCBbdHlwZT0ic3VibWl0Il0uc2Vjb25kYXJ5OmZvY3VzLCBbdHlwZT0icmVzZXQiXS5zZWNvbmRhcnk6aG92ZXIsIFt0eXBlPSJyZXNldCJdLnNlY29uZGFyeTpmb2N1cywgLmJ1dHRvbi5zZWNvbmRhcnk6aG92ZXIsIC5idXR0b24uc2Vjb25kYXJ5OmZvY3VzLCBbcm9sZT0iYnV0dG9uIl0uc2Vjb25kYXJ5OmhvdmVyLCBbcm9sZT0iYnV0dG9uIl0uc2Vjb25kYXJ5OmZvY3VzIHstLWJ1dHRvbi1ob3Zlci1iYWNrLWNvbG9yOiAjYzYyODI4OyB9YnV0dG9uLnRlcnRpYXJ5LCBbdHlwZT0iYnV0dG9uIl0udGVydGlhcnksIFt0eXBlPSJzdWJtaXQiXS50ZXJ0aWFyeSwgW3R5cGU9InJlc2V0Il0udGVydGlhcnksIC5idXR0b24udGVydGlhcnksIFtyb2xlPSJidXR0b24iXS50ZXJ0aWFyeSB7LS1idXR0b24tYmFjay1jb2xvcjogIzMwODczMjstLWJ1dHRvbi1mb3JlLWNvbG9yOiAjZjhmOGY4OyB9YnV0dG9uLnRlcnRpYXJ5OmhvdmVyLCBidXR0b24udGVydGlhcnk6Zm9jdXMsIFt0eXBlPSJidXR0b24iXS50ZXJ0aWFyeTpob3ZlciwgW3R5cGU9ImJ1dHRvbiJdLnRlcnRpYXJ5OmZvY3VzLCBbdHlwZT0ic3VibWl0Il0udGVydGlhcnk6aG92ZXIsIFt0eXBlPSJzdWJtaXQiXS50ZXJ0aWFyeTpmb2N1cywgW3R5cGU9InJlc2V0Il0udGVydGlhcnk6aG92ZXIsIFt0eXBlPSJyZXNldCJdLnRlcnRpYXJ5OmZvY3VzLCAuYnV0dG9uLnRlcnRpYXJ5OmhvdmVyLCAuYnV0dG9uLnRlcnRpYXJ5OmZvY3VzLCBbcm9sZT0iYnV0dG9uIl0udGVydGlhcnk6aG92ZXIsIFtyb2xlPSJidXR0b24iXS50ZXJ0aWFyeTpmb2N1cyB7LS1idXR0b24taG92ZXItYmFjay1jb2xvcjogIzI3NzUyOTsgfWJ1dHRvbi5pbnZlcnNlLCBbdHlwZT0iYnV0dG9uIl0uaW52ZXJzZSwgW3R5cGU9InN1Ym1pdCJdLmludmVyc2UsIFt0eXBlPSJyZXNldCJdLmludmVyc2UsIC5idXR0b24uaW52ZXJzZSwgW3JvbGU9ImJ1dHRvbiJdLmludmVyc2Ugey0tYnV0dG9uLWJhY2stY29sb3I6ICMyMTIxMjE7LS1idXR0b24tZm9yZS1jb2xvcjogI2Y4ZjhmODsgfWJ1dHRvbi5pbnZlcnNlOmhvdmVyLCBidXR0b24uaW52ZXJzZTpmb2N1cywgW3R5cGU9ImJ1dHRvbiJdLmludmVyc2U6aG92ZXIsIFt0eXBlPSJidXR0b24iXS5pbnZlcnNlOmZvY3VzLCBbdHlwZT0ic3VibWl0Il0uaW52ZXJzZTpob3ZlciwgW3R5cGU9InN1Ym1pdCJdLmludmVyc2U6Zm9jdXMsIFt0eXBlPSJyZXNldCJdLmludmVyc2U6aG92ZXIsIFt0eXBlPSJyZXNldCJdLmludmVyc2U6Zm9jdXMsIC5idXR0b24uaW52ZXJzZTpob3ZlciwgLmJ1dHRvbi5pbnZlcnNlOmZvY3VzLCBbcm9sZT0iYnV0dG9uIl0uaW52ZXJzZTpob3ZlciwgW3JvbGU9ImJ1dHRvbiJdLmludmVyc2U6Zm9jdXMgey0tYnV0dG9uLWhvdmVyLWJhY2stY29sb3I6ICMxMTE7IH1idXR0b24uc21hbGwsIFt0eXBlPSJidXR0b24iXS5zbWFsbCwgW3R5cGU9InN1Ym1pdCJdLnNtYWxsLCBbdHlwZT0icmVzZXQiXS5zbWFsbCwgLmJ1dHRvbi5zbWFsbCwgW3JvbGU9ImJ1dHRvbiJdLnNtYWxsIHtwYWRkaW5nOiBjYWxjKDAuNSAqIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSkgY2FsYygwLjc1ICogdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpKTttYXJnaW46IHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pOyB9YnV0dG9uLmxhcmdlLCBbdHlwZT0iYnV0dG9uIl0ubGFyZ2UsIFt0eXBlPSJzdWJtaXQiXS5sYXJnZSwgW3R5cGU9InJlc2V0Il0ubGFyZ2UsIC5idXR0b24ubGFyZ2UsIFtyb2xlPSJidXR0b24iXS5sYXJnZSB7cGFkZGluZzogY2FsYygxLjUgKiB2YXIoLS11bml2ZXJzYWwtcGFkZGluZykpIGNhbGMoMiAqIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSk7bWFyZ2luOiB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKTsgfTpyb290IHstLWhlYWRlci1iYWNrLWNvbG9yOiAjMDMyMzRiOy0taGVhZGVyLWhvdmVyLWJhY2stY29sb3I6ICNmZmQyMDA7LS1oZWFkZXItZm9yZS1jb2xvcjogI2ZmZmZmZjstLWhlYWRlci1ib3JkZXItY29sb3I6ICMzY2I0ZTY7LS1uYXYtYmFjay1jb2xvcjogI2ZmZmZmZjstLW5hdi1ob3Zlci1iYWNrLWNvbG9yOiAjZmZlOTdmOy0tbmF2LWZvcmUtY29sb3I6ICNlNjAwN2U7LS1uYXYtYm9yZGVyLWNvbG9yOiAjM2NiNGU2Oy0tbmF2LWxpbmstY29sb3I6ICMzY2I0ZTY7LS1mb290ZXItZm9yZS1jb2xvcjogI2ZmZmZmZjstLWZvb3Rlci1iYWNrLWNvbG9yOiAjMDMyMzRiOy0tZm9vdGVyLWJvcmRlci1jb2xvcjogIzNjYjRlNjstLWZvb3Rlci1saW5rLWNvbG9yOiAjM2NiNGU2Oy0tZHJhd2VyLWJhY2stY29sb3I6ICNmZmZmZmY7LS1kcmF3ZXItaG92ZXItYmFjay1jb2xvcjogI2ZmZTk3ZjstLWRyYXdlci1ib3JkZXItY29sb3I6ICMzY2I0ZTY7LS1kcmF3ZXItY2xvc2UtY29sb3I6ICNlNjAwN2U7IH1oZWFkZXIge2hlaWdodDogMi43NXJlbTtiYWNrZ3JvdW5kOiB2YXIoLS1oZWFkZXItYmFjay1jb2xvcik7Y29sb3I6IHZhcigtLWhlYWRlci1mb3JlLWNvbG9yKTtib3JkZXItYm90dG9tOiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0taGVhZGVyLWJvcmRlci1jb2xvcik7cGFkZGluZzogY2FsYyh2YXIoLS11bml2ZXJzYWwtcGFkZGluZykgLyA0KSAwO3doaXRlLXNwYWNlOiBub3dyYXA7b3ZlcmZsb3cteDogYXV0bztvdmVyZmxvdy15OiBoaWRkZW47IH1oZWFkZXIucm93IHtib3gtc2l6aW5nOiBjb250ZW50LWJveDsgfWhlYWRlciAubG9nbyB7Y29sb3I6IHZhcigtLWhlYWRlci1mb3JlLWNvbG9yKTtmb250LXNpemU6IDEuNzVyZW07cGFkZGluZzogdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpIGNhbGMoMiAqIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSk7dGV4dC1kZWNvcmF0aW9uOiBub25lOyB9aGVhZGVyIGJ1dHRvbiwgaGVhZGVyIFt0eXBlPSJidXR0b24iXSwgaGVhZGVyIC5idXR0b24sIGhlYWRlciBbcm9sZT0iYnV0dG9uIl0ge2JveC1zaXppbmc6IGJvcmRlci1ib3g7cG9zaXRpb246IHJlbGF0aXZlO3RvcDogY2FsYygwcmVtIC0gdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpIC8gNCk7aGVpZ2h0OiBjYWxjKDMuMTg3NXJlbSArIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSAvIDIpO2JhY2tncm91bmQ6IHZhcigtLWhlYWRlci1iYWNrLWNvbG9yKTtsaW5lLWhlaWdodDogY2FsYygzLjE4NzVyZW0gLSB2YXIoLS11bml2ZXJzYWwtcGFkZGluZykgKiAxLjUpO3RleHQtYWxpZ246IGNlbnRlcjtjb2xvcjogdmFyKC0taGVhZGVyLWZvcmUtY29sb3IpO2JvcmRlcjogMDtib3JkZXItcmFkaXVzOiAwO21hcmdpbjogMDt0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyB9aGVhZGVyIGJ1dHRvbjpob3ZlciwgaGVhZGVyIGJ1dHRvbjpmb2N1cywgaGVhZGVyIFt0eXBlPSJidXR0b24iXTpob3ZlciwgaGVhZGVyIFt0eXBlPSJidXR0b24iXTpmb2N1cywgaGVhZGVyIC5idXR0b246aG92ZXIsIGhlYWRlciAuYnV0dG9uOmZvY3VzLCBoZWFkZXIgW3JvbGU9ImJ1dHRvbiJdOmhvdmVyLCBoZWFkZXIgW3JvbGU9ImJ1dHRvbiJdOmZvY3VzIHtiYWNrZ3JvdW5kOiB2YXIoLS1oZWFkZXItaG92ZXItYmFjay1jb2xvcik7IH1uYXYge2JhY2tncm91bmQ6IHZhcigtLW5hdi1iYWNrLWNvbG9yKTtjb2xvcjogdmFyKC0tbmF2LWZvcmUtY29sb3IpO2JvcmRlcjogMC4wNzE0Mjg1NzE0cmVtIHNvbGlkIHZhcigtLW5hdi1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6IHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKTttYXJnaW46IHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pOyB9bmF2ICoge3BhZGRpbmc6IHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSBjYWxjKDEuNSAqIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSk7IH1uYXYgYSwgbmF2IGE6dmlzaXRlZCB7ZGlzcGxheTogYmxvY2s7Y29sb3I6IHZhcigtLW5hdi1saW5rLWNvbG9yKTtib3JkZXItcmFkaXVzOiB2YXIoLS11bml2ZXJzYWwtYm9yZGVyLXJhZGl1cyk7dHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjNzOyB9bmF2IGE6aG92ZXIsIG5hdiBhOmZvY3VzLCBuYXYgYTp2aXNpdGVkOmhvdmVyLCBuYXYgYTp2aXNpdGVkOmZvY3VzIHt0ZXh0LWRlY29yYXRpb246IG5vbmU7YmFja2dyb3VuZDogdmFyKC0tbmF2LWhvdmVyLWJhY2stY29sb3IpOyB9bmF2IC5zdWJsaW5rLTEge3Bvc2l0aW9uOiByZWxhdGl2ZTttYXJnaW4tbGVmdDogY2FsYygyICogdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpKTsgfW5hdiAuc3VibGluay0xOmJlZm9yZSB7cG9zaXRpb246IGFic29sdXRlO2xlZnQ6IGNhbGModmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpIC0gMSAqIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSk7dG9wOiAtMC4wNzE0Mjg1NzE0cmVtO2NvbnRlbnQ6ICcnO2hlaWdodDogMTAwJTtib3JkZXI6IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS1uYXYtYm9yZGVyLWNvbG9yKTtib3JkZXItbGVmdDogMDsgfW5hdiAuc3VibGluay0yIHtwb3NpdGlvbjogcmVsYXRpdmU7bWFyZ2luLWxlZnQ6IGNhbGMoNCAqIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSk7IH1uYXYgLnN1YmxpbmstMjpiZWZvcmUge3Bvc2l0aW9uOiBhYnNvbHV0ZTtsZWZ0OiBjYWxjKHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSAtIDMgKiB2YXIoLS11bml2ZXJzYWwtcGFkZGluZykpO3RvcDogLTAuMDcxNDI4NTcxNHJlbTtjb250ZW50OiAnJztoZWlnaHQ6IDEwMCU7Ym9yZGVyOiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tbmF2LWJvcmRlci1jb2xvcik7Ym9yZGVyLWxlZnQ6IDA7IH1mb290ZXIge2JhY2tncm91bmQ6IHZhcigtLWZvb3Rlci1iYWNrLWNvbG9yKTtjb2xvcjogdmFyKC0tZm9vdGVyLWZvcmUtY29sb3IpO2JvcmRlci10b3A6IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS1mb290ZXItYm9yZGVyLWNvbG9yKTtwYWRkaW5nOiBjYWxjKDIgKiB2YXIoLS11bml2ZXJzYWwtcGFkZGluZykpIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKTtmb250LXNpemU6IDAuODc1cmVtOyB9Zm9vdGVyIGEsIGZvb3RlciBhOnZpc2l0ZWQge2NvbG9yOiB2YXIoLS1mb290ZXItbGluay1jb2xvcik7IH1oZWFkZXIuc3RpY2t5IHtwb3NpdGlvbjogLXdlYmtpdC1zdGlja3k7cG9zaXRpb246IHN0aWNreTt6LWluZGV4OiAxMTAxO3RvcDogMDsgfWZvb3Rlci5zdGlja3kge3Bvc2l0aW9uOiAtd2Via2l0LXN0aWNreTtwb3NpdGlvbjogc3RpY2t5O3otaW5kZXg6IDExMDE7Ym90dG9tOiAwOyB9LmRyYXdlci10b2dnbGU6YmVmb3JlIHtkaXNwbGF5OiBpbmxpbmUtYmxvY2s7cG9zaXRpb246IHJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOiBib3R0b207Y29udGVudDogJ1wwMGEwXDIyNjFcMDBhMCc7Zm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7Zm9udC1zaXplOiAxLjVlbTsgfUBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDUwMHB4KSB7LmRyYXdlci10b2dnbGU6bm90KC5wZXJzaXN0ZW50KSB7ZGlzcGxheTogbm9uZTsgfSB9W3R5cGU9ImNoZWNrYm94Il0uZHJhd2VyIHtoZWlnaHQ6IDFweDt3aWR0aDogMXB4O21hcmdpbjogLTFweDtvdmVyZmxvdzogaGlkZGVuO3Bvc2l0aW9uOiBhYnNvbHV0ZTtjbGlwOiByZWN0KDAgMCAwIDApOy13ZWJraXQtY2xpcC1wYXRoOiBpbnNldCgxMDAlKTtjbGlwLXBhdGg6IGluc2V0KDEwMCUpOyB9W3R5cGU9ImNoZWNrYm94Il0uZHJhd2VyICsgKiB7ZGlzcGxheTogYmxvY2s7Ym94LXNpemluZzogYm9yZGVyLWJveDtwb3NpdGlvbjogZml4ZWQ7dG9wOiAwO3dpZHRoOiAzMjBweDtoZWlnaHQ6IDEwMHZoO292ZXJmbG93LXk6IGF1dG87YmFja2dyb3VuZDogdmFyKC0tZHJhd2VyLWJhY2stY29sb3IpO2JvcmRlcjogMC4wNzE0Mjg1NzE0cmVtIHNvbGlkIHZhcigtLWRyYXdlci1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6IDA7bWFyZ2luOiAwO3otaW5kZXg6IDExMTA7cmlnaHQ6IC0zMjBweDt0cmFuc2l0aW9uOiByaWdodCAwLjNzOyB9W3R5cGU9ImNoZWNrYm94Il0uZHJhd2VyICsgKiAuZHJhd2VyLWNsb3NlIHtwb3NpdGlvbjogYWJzb2x1dGU7dG9wOiB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKTtyaWdodDogdmFyKC0tdW5pdmVyc2FsLW1hcmdpbik7ei1pbmRleDogMTExMTt3aWR0aDogMnJlbTtoZWlnaHQ6IDJyZW07Ym9yZGVyLXJhZGl1czogdmFyKC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXMpO3BhZGRpbmc6IHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKTttYXJnaW46IDA7Y3Vyc29yOiBwb2ludGVyO3RyYW5zaXRpb246IGJhY2tncm91bmQgMC4zczsgfVt0eXBlPSJjaGVja2JveCJdLmRyYXdlciArICogLmRyYXdlci1jbG9zZTpiZWZvcmUge2Rpc3BsYXk6IGJsb2NrO2NvbnRlbnQ6ICdcMDBENyc7Y29sb3I6IHZhcigtLWRyYXdlci1jbG9zZS1jb2xvcik7cG9zaXRpb246IHJlbGF0aXZlO2ZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmO2ZvbnQtc2l6ZTogMnJlbTtsaW5lLWhlaWdodDogMTt0ZXh0LWFsaWduOiBjZW50ZXI7IH1bdHlwZT0iY2hlY2tib3giXS5kcmF3ZXIgKyAqIC5kcmF3ZXItY2xvc2U6aG92ZXIsIFt0eXBlPSJjaGVja2JveCJdLmRyYXdlciArICogLmRyYXdlci1jbG9zZTpmb2N1cyB7YmFja2dyb3VuZDogdmFyKC0tZHJhd2VyLWhvdmVyLWJhY2stY29sb3IpOyB9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogMzIwcHgpIHtbdHlwZT0iY2hlY2tib3giXS5kcmF3ZXIgKyAqIHt3aWR0aDogMTAwJTsgfSB9W3R5cGU9ImNoZWNrYm94Il0uZHJhd2VyOmNoZWNrZWQgKyAqIHtyaWdodDogMDsgfUBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDUwMHB4KSB7W3R5cGU9ImNoZWNrYm94Il0uZHJhd2VyOm5vdCgucGVyc2lzdGVudCkgKyAqIHtwb3NpdGlvbjogc3RhdGljO2hlaWdodDogMTAwJTt6LWluZGV4OiAxMTAwOyB9W3R5cGU9ImNoZWNrYm94Il0uZHJhd2VyOm5vdCgucGVyc2lzdGVudCkgKyAqIC5kcmF3ZXItY2xvc2Uge2Rpc3BsYXk6IG5vbmU7IH0gfTpyb290IHstLXRhYmxlLWJvcmRlci1jb2xvcjogIzAzMjM0YjstLXRhYmxlLWJvcmRlci1zZXBhcmF0b3ItY29sb3I6ICMwMzIzNGI7LS10YWJsZS1oZWFkLWJhY2stY29sb3I6ICMwMzIzNGI7LS10YWJsZS1oZWFkLWZvcmUtY29sb3I6ICNmZmZmZmY7LS10YWJsZS1ib2R5LWJhY2stY29sb3I6ICNmZmZmZmY7LS10YWJsZS1ib2R5LWZvcmUtY29sb3I6ICMwMzIzNGI7LS10YWJsZS1ib2R5LWFsdC1iYWNrLWNvbG9yOiAjZjRmNGY0OyB9dGFibGUge2JvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7Ym9yZGVyLXNwYWNpbmc6IDA7bWFyZ2luOiAwO2Rpc3BsYXk6IGZsZXg7ZmxleDogMCAxIGF1dG87ZmxleC1mbG93OiByb3cgd3JhcDtwYWRkaW5nOiB2YXIoLS11bml2ZXJzYWwtcGFkZGluZyk7cGFkZGluZy10b3A6IDA7IH10YWJsZSBjYXB0aW9uIHtmb250LXNpemU6IDFyZW07bWFyZ2luOiBjYWxjKDIgKiB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKSkgMDttYXgtd2lkdGg6IDEwMCU7ZmxleDogMCAwIDEwMCU7IH10YWJsZSB0aGVhZCwgdGFibGUgdGJvZHkge2Rpc3BsYXk6IGZsZXg7ZmxleC1mbG93OiByb3cgd3JhcDtib3JkZXI6IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS10YWJsZS1ib3JkZXItY29sb3IpOyB9dGFibGUgdGhlYWQge3otaW5kZXg6IDk5OTtib3JkZXItcmFkaXVzOiB2YXIoLS11bml2ZXJzYWwtYm9yZGVyLXJhZGl1cykgdmFyKC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXMpIDAgMDtib3JkZXItYm90dG9tOiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tdGFibGUtYm9yZGVyLXNlcGFyYXRvci1jb2xvcik7IH10YWJsZSB0Ym9keSB7Ym9yZGVyLXRvcDogMDttYXJnaW4tdG9wOiBjYWxjKDAgLSB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKSk7Ym9yZGVyLXJhZGl1czogMCAwIHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKSB2YXIoLS11bml2ZXJzYWwtYm9yZGVyLXJhZGl1cyk7IH10YWJsZSB0ciB7ZGlzcGxheTogZmxleDtwYWRkaW5nOiAwOyB9dGFibGUgdGgsIHRhYmxlIHRkIHtwYWRkaW5nOiBjYWxjKDAuNSAqIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSk7Zm9udC1zaXplOiAwLjlyZW07IH10YWJsZSB0aCB7dGV4dC1hbGlnbjogbGVmdDtiYWNrZ3JvdW5kOiB2YXIoLS10YWJsZS1oZWFkLWJhY2stY29sb3IpO2NvbG9yOiB2YXIoLS10YWJsZS1oZWFkLWZvcmUtY29sb3IpOyB9dGFibGUgdGQge2JhY2tncm91bmQ6IHZhcigtLXRhYmxlLWJvZHktYmFjay1jb2xvcik7Y29sb3I6IHZhcigtLXRhYmxlLWJvZHktZm9yZS1jb2xvcik7Ym9yZGVyLXRvcDogMC4wNzE0Mjg1NzE0cmVtIHNvbGlkIHZhcigtLXRhYmxlLWJvcmRlci1jb2xvcik7IH10YWJsZTpub3QoLmhvcml6b250YWwpIHtvdmVyZmxvdzogYXV0bzttYXgtaGVpZ2h0OiAxMDAlOyB9dGFibGU6bm90KC5ob3Jpem9udGFsKSB0aGVhZCwgdGFibGU6bm90KC5ob3Jpem9udGFsKSB0Ym9keSB7bWF4LXdpZHRoOiAxMDAlO2ZsZXg6IDAgMCAxMDAlOyB9dGFibGU6bm90KC5ob3Jpem9udGFsKSB0ciB7ZmxleC1mbG93OiByb3cgd3JhcDtmbGV4OiAwIDAgMTAwJTsgfXRhYmxlOm5vdCguaG9yaXpvbnRhbCkgdGgsIHRhYmxlOm5vdCguaG9yaXpvbnRhbCkgdGQge2ZsZXg6IDEgMCAwJTtvdmVyZmxvdzogaGlkZGVuO3RleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOyB9dGFibGU6bm90KC5ob3Jpem9udGFsKSB0aGVhZCB7cG9zaXRpb246IHN0aWNreTt0b3A6IDA7IH10YWJsZTpub3QoLmhvcml6b250YWwpIHRib2R5IHRyOmZpcnN0LWNoaWxkIHRkIHtib3JkZXItdG9wOiAwOyB9dGFibGUuaG9yaXpvbnRhbCB7Ym9yZGVyOiAwOyB9dGFibGUuaG9yaXpvbnRhbCB0aGVhZCwgdGFibGUuaG9yaXpvbnRhbCB0Ym9keSB7Ym9yZGVyOiAwO2ZsZXg6IC4yIDAgMDtmbGV4LWZsb3c6IHJvdyBub3dyYXA7IH10YWJsZS5ob3Jpem9udGFsIHRib2R5IHtvdmVyZmxvdzogYXV0bztqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47ZmxleDogLjggMCAwO21hcmdpbi1sZWZ0OiAwO3BhZGRpbmctYm90dG9tOiBjYWxjKHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSAvIDQpOyB9dGFibGUuaG9yaXpvbnRhbCB0ciB7ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtmbGV4OiAxIDAgYXV0bzsgfXRhYmxlLmhvcml6b250YWwgdGgsIHRhYmxlLmhvcml6b250YWwgdGQge3dpZHRoOiBhdXRvO2JvcmRlcjogMDtib3JkZXItYm90dG9tOiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tdGFibGUtYm9yZGVyLWNvbG9yKTsgfXRhYmxlLmhvcml6b250YWwgdGg6bm90KDpmaXJzdC1jaGlsZCksIHRhYmxlLmhvcml6b250YWwgdGQ6bm90KDpmaXJzdC1jaGlsZCkge2JvcmRlci10b3A6IDA7IH10YWJsZS5ob3Jpem9udGFsIHRoIHt0ZXh0LWFsaWduOiByaWdodDtib3JkZXItbGVmdDogMC4wNzE0Mjg1NzE0cmVtIHNvbGlkIHZhcigtLXRhYmxlLWJvcmRlci1jb2xvcik7Ym9yZGVyLXJpZ2h0OiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tdGFibGUtYm9yZGVyLXNlcGFyYXRvci1jb2xvcik7IH10YWJsZS5ob3Jpem9udGFsIHRoZWFkIHRyOmZpcnN0LWNoaWxkIHtwYWRkaW5nLWxlZnQ6IDA7IH10YWJsZS5ob3Jpem9udGFsIHRoOmZpcnN0LWNoaWxkLCB0YWJsZS5ob3Jpem9udGFsIHRkOmZpcnN0LWNoaWxkIHtib3JkZXItdG9wOiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tdGFibGUtYm9yZGVyLWNvbG9yKTsgfXRhYmxlLmhvcml6b250YWwgdGJvZHkgdHI6bGFzdC1jaGlsZCB0ZCB7Ym9yZGVyLXJpZ2h0OiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tdGFibGUtYm9yZGVyLWNvbG9yKTsgfXRhYmxlLmhvcml6b250YWwgdGJvZHkgdHI6bGFzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZCB7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDAuMjVyZW07IH10YWJsZS5ob3Jpem9udGFsIHRib2R5IHRyOmxhc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZCB7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDAuMjVyZW07IH10YWJsZS5ob3Jpem9udGFsIHRoZWFkIHRyOmZpcnN0LWNoaWxkIHRoOmZpcnN0LWNoaWxkIHtib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwLjI1cmVtOyB9dGFibGUuaG9yaXpvbnRhbCB0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aDpsYXN0LWNoaWxkIHtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwLjI1cmVtOyB9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDk5cHgpIHt0YWJsZSwgdGFibGUuaG9yaXpvbnRhbCB7Ym9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtib3JkZXI6IDA7d2lkdGg6IDEwMCU7ZGlzcGxheTogdGFibGU7IH10YWJsZSB0aGVhZCwgdGFibGUgdGgsIHRhYmxlLmhvcml6b250YWwgdGhlYWQsIHRhYmxlLmhvcml6b250YWwgdGgge2JvcmRlcjogMDtoZWlnaHQ6IDFweDt3aWR0aDogMXB4O21hcmdpbjogLTFweDtvdmVyZmxvdzogaGlkZGVuO3BhZGRpbmc6IDA7cG9zaXRpb246IGFic29sdXRlO2NsaXA6IHJlY3QoMCAwIDAgMCk7LXdlYmtpdC1jbGlwLXBhdGg6IGluc2V0KDEwMCUpO2NsaXAtcGF0aDogaW5zZXQoMTAwJSk7IH10YWJsZSB0Ym9keSwgdGFibGUuaG9yaXpvbnRhbCB0Ym9keSB7Ym9yZGVyOiAwO2Rpc3BsYXk6IHRhYmxlLXJvdy1ncm91cDsgfXRhYmxlIHRyLCB0YWJsZS5ob3Jpem9udGFsIHRyIHtkaXNwbGF5OiBibG9jaztib3JkZXI6IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS10YWJsZS1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6IHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKTtiYWNrZ3JvdW5kOiAjZmZmZmZmO3BhZGRpbmc6IHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKTttYXJnaW46IHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pO21hcmdpbi1ib3R0b206IGNhbGMoMSAqIHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pKTsgfXRhYmxlIHRoLCB0YWJsZSB0ZCwgdGFibGUuaG9yaXpvbnRhbCB0aCwgdGFibGUuaG9yaXpvbnRhbCB0ZCB7d2lkdGg6IGF1dG87IH10YWJsZSB0ZCwgdGFibGUuaG9yaXpvbnRhbCB0ZCB7ZGlzcGxheTogYmxvY2s7Ym9yZGVyOiAwO3RleHQtYWxpZ246IHJpZ2h0OyB9dGFibGUgdGQ6YmVmb3JlLCB0YWJsZS5ob3Jpem9udGFsIHRkOmJlZm9yZSB7Y29udGVudDogYXR0cihkYXRhLWxhYmVsKTtmbG9hdDogbGVmdDtmb250LXdlaWdodDogNjAwOyB9dGFibGUgdGg6Zmlyc3QtY2hpbGQsIHRhYmxlIHRkOmZpcnN0LWNoaWxkLCB0YWJsZS5ob3Jpem9udGFsIHRoOmZpcnN0LWNoaWxkLCB0YWJsZS5ob3Jpem9udGFsIHRkOmZpcnN0LWNoaWxkIHtib3JkZXItdG9wOiAwOyB9dGFibGUgdGJvZHkgdHI6bGFzdC1jaGlsZCB0ZCwgdGFibGUuaG9yaXpvbnRhbCB0Ym9keSB0cjpsYXN0LWNoaWxkIHRkIHtib3JkZXItcmlnaHQ6IDA7IH0gfXRhYmxlIHRyOm50aC1vZi10eXBlKDJuKSA+IHRkIHtiYWNrZ3JvdW5kOiB2YXIoLS10YWJsZS1ib2R5LWFsdC1iYWNrLWNvbG9yKTsgfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDUwMHB4KSB7dGFibGUgdHI6bnRoLW9mLXR5cGUoMm4pIHtiYWNrZ3JvdW5kOiB2YXIoLS10YWJsZS1ib2R5LWFsdC1iYWNrLWNvbG9yKTsgfSB9OnJvb3Qgey0tdGFibGUtYm9keS1ob3Zlci1iYWNrLWNvbG9yOiAjOTBjYWY5OyB9dGFibGUuaG92ZXJhYmxlIHRyOmhvdmVyLCB0YWJsZS5ob3ZlcmFibGUgdHI6aG92ZXIgPiB0ZCwgdGFibGUuaG92ZXJhYmxlIHRyOmZvY3VzLCB0YWJsZS5ob3ZlcmFibGUgdHI6Zm9jdXMgPiB0ZCB7YmFja2dyb3VuZDogdmFyKC0tdGFibGUtYm9keS1ob3Zlci1iYWNrLWNvbG9yKTsgfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDUwMHB4KSB7dGFibGUuaG92ZXJhYmxlIHRyOmhvdmVyLCB0YWJsZS5ob3ZlcmFibGUgdHI6aG92ZXIgPiB0ZCwgdGFibGUuaG92ZXJhYmxlIHRyOmZvY3VzLCB0YWJsZS5ob3ZlcmFibGUgdHI6Zm9jdXMgPiB0ZCB7YmFja2dyb3VuZDogdmFyKC0tdGFibGUtYm9keS1ob3Zlci1iYWNrLWNvbG9yKTsgfSB9OnJvb3Qgey0tbWFyay1iYWNrLWNvbG9yOiAjM2NiNGU2Oy0tbWFyay1mb3JlLWNvbG9yOiAjZmZmZmZmOyB9bWFyayB7YmFja2dyb3VuZDogdmFyKC0tbWFyay1iYWNrLWNvbG9yKTtjb2xvcjogdmFyKC0tbWFyay1mb3JlLWNvbG9yKTtmb250LXNpemU6IDAuOTVlbTtsaW5lLWhlaWdodDogMWVtO2JvcmRlci1yYWRpdXM6IHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKTtwYWRkaW5nOiBjYWxjKHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSAvIDQpIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKTsgfW1hcmsuaW5saW5lLWJsb2NrIHtkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Zm9udC1zaXplOiAxZW07bGluZS1oZWlnaHQ6IDEuNDtwYWRkaW5nOiBjYWxjKHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSAvIDIpIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKTsgfTpyb290IHstLXRvYXN0LWJhY2stY29sb3I6ICM0MjQyNDI7LS10b2FzdC1mb3JlLWNvbG9yOiAjZmFmYWZhOyB9LnRvYXN0IHtwb3NpdGlvbjogZml4ZWQ7Ym90dG9tOiBjYWxjKHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pICogMyk7bGVmdDogNTAlO3RyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO3otaW5kZXg6IDExMTE7Y29sb3I6IHZhcigtLXRvYXN0LWZvcmUtY29sb3IpO2JhY2tncm91bmQ6IHZhcigtLXRvYXN0LWJhY2stY29sb3IpO2JvcmRlci1yYWRpdXM6IGNhbGModmFyKC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXMpICogMTYpO3BhZGRpbmc6IHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSBjYWxjKHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSAqIDMpOyB9OnJvb3Qgey0tdG9vbHRpcC1iYWNrLWNvbG9yOiAjMjEyMTIxOy0tdG9vbHRpcC1mb3JlLWNvbG9yOiAjZmFmYWZhOyB9LnRvb2x0aXAge3Bvc2l0aW9uOiByZWxhdGl2ZTtkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IH0udG9vbHRpcDpiZWZvcmUsIC50b29sdGlwOmFmdGVyIHtwb3NpdGlvbjogYWJzb2x1dGU7b3BhY2l0eTogMDtjbGlwOiByZWN0KDAgMCAwIDApOy13ZWJraXQtY2xpcC1wYXRoOiBpbnNldCgxMDAlKTtjbGlwLXBhdGg6IGluc2V0KDEwMCUpO3RyYW5zaXRpb246IGFsbCAwLjNzO3otaW5kZXg6IDEwMTA7bGVmdDogNTAlOyB9LnRvb2x0aXA6bm90KC5ib3R0b20pOmJlZm9yZSwgLnRvb2x0aXA6bm90KC5ib3R0b20pOmFmdGVyIHtib3R0b206IDc1JTsgfS50b29sdGlwLmJvdHRvbTpiZWZvcmUsIC50b29sdGlwLmJvdHRvbTphZnRlciB7dG9wOiA3NSU7IH0udG9vbHRpcDpob3ZlcjpiZWZvcmUsIC50b29sdGlwOmhvdmVyOmFmdGVyLCAudG9vbHRpcDpmb2N1czpiZWZvcmUsIC50b29sdGlwOmZvY3VzOmFmdGVyIHtvcGFjaXR5OiAxO2NsaXA6IGF1dG87LXdlYmtpdC1jbGlwLXBhdGg6IGluc2V0KDAlKTtjbGlwLXBhdGg6IGluc2V0KDAlKTsgfS50b29sdGlwOmJlZm9yZSB7Y29udGVudDogJyc7YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Ym9yZGVyOiB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKSBzb2xpZCB0cmFuc3BhcmVudDtsZWZ0OiBjYWxjKDUwJSAtIHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pKTsgfS50b29sdGlwOm5vdCguYm90dG9tKTpiZWZvcmUge2JvcmRlci10b3AtY29sb3I6ICMyMTIxMjE7IH0udG9vbHRpcC5ib3R0b206YmVmb3JlIHtib3JkZXItYm90dG9tLWNvbG9yOiAjMjEyMTIxOyB9LnRvb2x0aXA6YWZ0ZXIge2NvbnRlbnQ6IGF0dHIoYXJpYS1sYWJlbCk7Y29sb3I6IHZhcigtLXRvb2x0aXAtZm9yZS1jb2xvcik7YmFja2dyb3VuZDogdmFyKC0tdG9vbHRpcC1iYWNrLWNvbG9yKTtib3JkZXItcmFkaXVzOiB2YXIoLS11bml2ZXJzYWwtYm9yZGVyLXJhZGl1cyk7cGFkZGluZzogdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpO3doaXRlLXNwYWNlOiBub3dyYXA7dHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpOyB9LnRvb2x0aXA6bm90KC5ib3R0b20pOmFmdGVyIHttYXJnaW4tYm90dG9tOiBjYWxjKDIgKiB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKSk7IH0udG9vbHRpcC5ib3R0b206YWZ0ZXIge21hcmdpbi10b3A6IGNhbGMoMiAqIHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pKTsgfTpyb290IHstLW1vZGFsLW92ZXJsYXktY29sb3I6IHJnYmEoMCwgMCwgMCwgMC40NSk7LS1tb2RhbC1jbG9zZS1jb2xvcjogI2U2MDA3ZTstLW1vZGFsLWNsb3NlLWhvdmVyLWNvbG9yOiAjZmZlOTdmOyB9W3R5cGU9ImNoZWNrYm94Il0ubW9kYWwge2hlaWdodDogMXB4O3dpZHRoOiAxcHg7bWFyZ2luOiAtMXB4O292ZXJmbG93OiBoaWRkZW47cG9zaXRpb246IGFic29sdXRlO2NsaXA6IHJlY3QoMCAwIDAgMCk7LXdlYmtpdC1jbGlwLXBhdGg6IGluc2V0KDEwMCUpO2NsaXAtcGF0aDogaW5zZXQoMTAwJSk7IH1bdHlwZT0iY2hlY2tib3giXS5tb2RhbCArIGRpdiB7cG9zaXRpb246IGZpeGVkO3RvcDogMDtsZWZ0OiAwO2Rpc3BsYXk6IG5vbmU7d2lkdGg6IDEwMHZ3O2hlaWdodDogMTAwdmg7YmFja2dyb3VuZDogdmFyKC0tbW9kYWwtb3ZlcmxheS1jb2xvcik7IH1bdHlwZT0iY2hlY2tib3giXS5tb2RhbCArIGRpdiAuY2FyZCB7bWFyZ2luOiAwIGF1dG87bWF4LWhlaWdodDogNTB2aDtvdmVyZmxvdzogYXV0bzsgfVt0eXBlPSJjaGVja2JveCJdLm1vZGFsICsgZGl2IC5jYXJkIC5tb2RhbC1jbG9zZSB7cG9zaXRpb246IGFic29sdXRlO3RvcDogMDtyaWdodDogMDt3aWR0aDogMS43NXJlbTtoZWlnaHQ6IDEuNzVyZW07Ym9yZGVyLXJhZGl1czogdmFyKC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXMpO3BhZGRpbmc6IHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKTttYXJnaW46IDA7Y3Vyc29yOiBwb2ludGVyO3RyYW5zaXRpb246IGJhY2tncm91bmQgMC4zczsgfVt0eXBlPSJjaGVja2JveCJdLm1vZGFsICsgZGl2IC5jYXJkIC5tb2RhbC1jbG9zZTpiZWZvcmUge2Rpc3BsYXk6IGJsb2NrO2NvbnRlbnQ6ICdcMDBENyc7Y29sb3I6IHZhcigtLW1vZGFsLWNsb3NlLWNvbG9yKTtwb3NpdGlvbjogcmVsYXRpdmU7Zm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7Zm9udC1zaXplOiAxLjc1cmVtO2xpbmUtaGVpZ2h0OiAxO3RleHQtYWxpZ246IGNlbnRlcjsgfVt0eXBlPSJjaGVja2JveCJdLm1vZGFsICsgZGl2IC5jYXJkIC5tb2RhbC1jbG9zZTpob3ZlciwgW3R5cGU9ImNoZWNrYm94Il0ubW9kYWwgKyBkaXYgLmNhcmQgLm1vZGFsLWNsb3NlOmZvY3VzIHtiYWNrZ3JvdW5kOiB2YXIoLS1tb2RhbC1jbG9zZS1ob3Zlci1jb2xvcik7IH1bdHlwZT0iY2hlY2tib3giXS5tb2RhbDpjaGVja2VkICsgZGl2IHtkaXNwbGF5OiBmbGV4O2ZsZXg6IDAgMSBhdXRvO3otaW5kZXg6IDEyMDA7IH1bdHlwZT0iY2hlY2tib3giXS5tb2RhbDpjaGVja2VkICsgZGl2IC5jYXJkIC5tb2RhbC1jbG9zZSB7ei1pbmRleDogMTIxMTsgfTpyb290IHstLWNvbGxhcHNlLWxhYmVsLWJhY2stY29sb3I6ICMwMzIzNGI7LS1jb2xsYXBzZS1sYWJlbC1mb3JlLWNvbG9yOiAjZmZmZmZmOy0tY29sbGFwc2UtbGFiZWwtaG92ZXItYmFjay1jb2xvcjogIzNjYjRlNjstLWNvbGxhcHNlLXNlbGVjdGVkLWxhYmVsLWJhY2stY29sb3I6ICMzY2I0ZTY7LS1jb2xsYXBzZS1ib3JkZXItY29sb3I6IHZhcigtLWNvbGxhcHNlLWxhYmVsLWJhY2stY29sb3IpOy0tY29sbGFwc2Utc2VsZWN0ZWQtYm9yZGVyLWNvbG9yOiAjY2VlY2Y4Oy0tY29sbGFwc2UtY29udGVudC1iYWNrLWNvbG9yOiAjZmZmZmZmOy0tY29sbGFwc2Utc2VsZWN0ZWQtbGFiZWwtYm9yZGVyLWNvbG9yOiAjM2NiNGU2OyB9LmNvbGxhcHNlIHt3aWR0aDogY2FsYygxMDAlIC0gMiAqIHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pKTtvcGFjaXR5OiAxO2Rpc3BsYXk6IGZsZXg7ZmxleC1kaXJlY3Rpb246IGNvbHVtbjttYXJnaW46IHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pO2JvcmRlci1yYWRpdXM6IHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKTsgfS5jb2xsYXBzZSA+IFt0eXBlPSJyYWRpbyJdLCAuY29sbGFwc2UgPiBbdHlwZT0iY2hlY2tib3giXSB7aGVpZ2h0OiAxcHg7d2lkdGg6IDFweDttYXJnaW46IC0xcHg7b3ZlcmZsb3c6IGhpZGRlbjtwb3NpdGlvbjogYWJzb2x1dGU7Y2xpcDogcmVjdCgwIDAgMCAwKTstd2Via2l0LWNsaXAtcGF0aDogaW5zZXQoMTAwJSk7Y2xpcC1wYXRoOiBpbnNldCgxMDAlKTsgfS5jb2xsYXBzZSA+IGxhYmVsIHtmbGV4LWdyb3c6IDE7ZGlzcGxheTogaW5saW5lLWJsb2NrO2hlaWdodDogMS4yNXJlbTtjdXJzb3I6IHBvaW50ZXI7dHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjJzO2NvbG9yOiB2YXIoLS1jb2xsYXBzZS1sYWJlbC1mb3JlLWNvbG9yKTtiYWNrZ3JvdW5kOiB2YXIoLS1jb2xsYXBzZS1sYWJlbC1iYWNrLWNvbG9yKTtib3JkZXI6IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS1jb2xsYXBzZS1zZWxlY3RlZC1ib3JkZXItY29sb3IpO3BhZGRpbmc6IGNhbGMoMS4yNSAqIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSk7IH0uY29sbGFwc2UgPiBsYWJlbDpob3ZlciwgLmNvbGxhcHNlID4gbGFiZWw6Zm9jdXMge2JhY2tncm91bmQ6IHZhcigtLWNvbGxhcHNlLWxhYmVsLWhvdmVyLWJhY2stY29sb3IpOyB9LmNvbGxhcHNlID4gbGFiZWwgKyBkaXYge2ZsZXgtYmFzaXM6IGF1dG87aGVpZ2h0OiAxcHg7d2lkdGg6IDFweDttYXJnaW46IC0xcHg7b3ZlcmZsb3c6IGhpZGRlbjtwb3NpdGlvbjogYWJzb2x1dGU7Y2xpcDogcmVjdCgwIDAgMCAwKTstd2Via2l0LWNsaXAtcGF0aDogaW5zZXQoMTAwJSk7Y2xpcC1wYXRoOiBpbnNldCgxMDAlKTt0cmFuc2l0aW9uOiBtYXgtaGVpZ2h0IDAuM3M7bWF4LWhlaWdodDogMXB4OyB9LmNvbGxhcHNlID4gOmNoZWNrZWQgKyBsYWJlbCB7YmFja2dyb3VuZDogdmFyKC0tY29sbGFwc2Utc2VsZWN0ZWQtbGFiZWwtYmFjay1jb2xvcik7Ym9yZGVyLWNvbG9yOiB2YXIoLS1jb2xsYXBzZS1zZWxlY3RlZC1sYWJlbC1ib3JkZXItY29sb3IpOyB9LmNvbGxhcHNlID4gOmNoZWNrZWQgKyBsYWJlbCArIGRpdiB7Ym94LXNpemluZzogYm9yZGVyLWJveDtwb3NpdGlvbjogcmVsYXRpdmU7d2lkdGg6IDEwMCU7aGVpZ2h0OiBhdXRvO292ZXJmbG93OiBhdXRvO21hcmdpbjogMDtiYWNrZ3JvdW5kOiB2YXIoLS1jb2xsYXBzZS1jb250ZW50LWJhY2stY29sb3IpO2JvcmRlcjogMC4wNzE0Mjg1NzE0cmVtIHNvbGlkIHZhcigtLWNvbGxhcHNlLXNlbGVjdGVkLWJvcmRlci1jb2xvcik7Ym9yZGVyLXRvcDogMDtwYWRkaW5nOiB2YXIoLS11bml2ZXJzYWwtcGFkZGluZyk7Y2xpcDogYXV0bzstd2Via2l0LWNsaXAtcGF0aDogaW5zZXQoMCUpO2NsaXAtcGF0aDogaW5zZXQoMCUpO21heC1oZWlnaHQ6IDEwMCU7IH0uY29sbGFwc2UgPiBsYWJlbDpub3QoOmZpcnN0LW9mLXR5cGUpIHtib3JkZXItdG9wOiAwOyB9LmNvbGxhcHNlID4gbGFiZWw6Zmlyc3Qtb2YtdHlwZSB7Ym9yZGVyLXJhZGl1czogdmFyKC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXMpIHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKSAwIDA7IH0uY29sbGFwc2UgPiBsYWJlbDpsYXN0LW9mLXR5cGU6bm90KDpmaXJzdC1vZi10eXBlKSB7Ym9yZGVyLXJhZGl1czogMCAwIHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKSB2YXIoLS11bml2ZXJzYWwtYm9yZGVyLXJhZGl1cyk7IH0uY29sbGFwc2UgPiBsYWJlbDpsYXN0LW9mLXR5cGU6Zmlyc3Qtb2YtdHlwZSB7Ym9yZGVyLXJhZGl1czogdmFyKC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXMpOyB9LmNvbGxhcHNlID4gOmNoZWNrZWQ6bGFzdC1vZi10eXBlOm5vdCg6Zmlyc3Qtb2YtdHlwZSkgKyBsYWJlbCB7Ym9yZGVyLXJhZGl1czogMDsgfS5jb2xsYXBzZSA+IDpjaGVja2VkOmxhc3Qtb2YtdHlwZSArIGxhYmVsICsgZGl2IHtib3JkZXItcmFkaXVzOiAwIDAgdmFyKC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXMpIHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKTsgfW1hcmsudGVydGlhcnkgey0tbWFyay1iYWNrLWNvbG9yOiAjM2NiNGU2OyB9bWFyay50YWcge3BhZGRpbmc6IGNhbGModmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpLzIpIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKTtib3JkZXItcmFkaXVzOiAxZW07IH06cm9vdCB7LS1wcm9ncmVzcy1iYWNrLWNvbG9yOiAjM2NiNGU2Oy0tcHJvZ3Jlc3MtZm9yZS1jb2xvcjogIzU1NTsgfXByb2dyZXNzIHtkaXNwbGF5OiBibG9jazt2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7LXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOy1tb3otYXBwZWFyYW5jZTogbm9uZTthcHBlYXJhbmNlOiBub25lO2hlaWdodDogMC43NXJlbTt3aWR0aDogY2FsYygxMDAlIC0gMiAqIHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pKTttYXJnaW46IHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pO2JvcmRlcjogMDtib3JkZXItcmFkaXVzOiBjYWxjKDIgKiB2YXIoLS11bml2ZXJzYWwtYm9yZGVyLXJhZGl1cykpO2JhY2tncm91bmQ6IHZhcigtLXByb2dyZXNzLWJhY2stY29sb3IpO2NvbG9yOiB2YXIoLS1wcm9ncmVzcy1mb3JlLWNvbG9yKTsgfXByb2dyZXNzOjotd2Via2l0LXByb2dyZXNzLXZhbHVlIHtiYWNrZ3JvdW5kOiB2YXIoLS1wcm9ncmVzcy1mb3JlLWNvbG9yKTtib3JkZXItdG9wLWxlZnQtcmFkaXVzOiBjYWxjKDIgKiB2YXIoLS11bml2ZXJzYWwtYm9yZGVyLXJhZGl1cykpO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IGNhbGMoMiAqIHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKSk7IH1wcm9ncmVzczo6LXdlYmtpdC1wcm9ncmVzcy1iYXIge2JhY2tncm91bmQ6IHZhcigtLXByb2dyZXNzLWJhY2stY29sb3IpOyB9cHJvZ3Jlc3M6Oi1tb3otcHJvZ3Jlc3MtYmFyIHtiYWNrZ3JvdW5kOiB2YXIoLS1wcm9ncmVzcy1mb3JlLWNvbG9yKTtib3JkZXItdG9wLWxlZnQtcmFkaXVzOiBjYWxjKDIgKiB2YXIoLS11bml2ZXJzYWwtYm9yZGVyLXJhZGl1cykpO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IGNhbGMoMiAqIHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKSk7IH1wcm9ncmVzc1t2YWx1ZT0iMTAwMCJdOjotd2Via2l0LXByb2dyZXNzLXZhbHVlIHtib3JkZXItcmFkaXVzOiBjYWxjKDIgKiB2YXIoLS11bml2ZXJzYWwtYm9yZGVyLXJhZGl1cykpOyB9cHJvZ3Jlc3NbdmFsdWU9IjEwMDAiXTo6LW1vei1wcm9ncmVzcy1iYXIge2JvcmRlci1yYWRpdXM6IGNhbGMoMiAqIHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKSk7IH1wcm9ncmVzcy5pbmxpbmUge2Rpc3BsYXk6IGlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO3dpZHRoOiA2MCU7IH06cm9vdCB7LS1zcGlubmVyLWJhY2stY29sb3I6ICNkZGQ7LS1zcGlubmVyLWZvcmUtY29sb3I6ICM1NTU7IH1Aa2V5ZnJhbWVzIHNwaW5uZXItZG9udXQtYW5pbSB7MCUge3RyYW5zZm9ybTogcm90YXRlKDBkZWcpOyB9MTAwJSB7dHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsgfSB9LnNwaW5uZXIge2Rpc3BsYXk6IGlubGluZS1ibG9jazttYXJnaW46IHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pO2JvcmRlcjogMC4yNXJlbSBzb2xpZCB2YXIoLS1zcGlubmVyLWJhY2stY29sb3IpO2JvcmRlci1sZWZ0OiAwLjI1cmVtIHNvbGlkIHZhcigtLXNwaW5uZXItZm9yZS1jb2xvcik7Ym9yZGVyLXJhZGl1czogNTAlO3dpZHRoOiAxLjI1cmVtO2hlaWdodDogMS4yNXJlbTthbmltYXRpb246IHNwaW5uZXItZG9udXQtYW5pbSAxLjJzIGxpbmVhciBpbmZpbml0ZTsgfXByb2dyZXNzLnByaW1hcnkgey0tcHJvZ3Jlc3MtZm9yZS1jb2xvcjogIzE5NzZkMjsgfXByb2dyZXNzLnNlY29uZGFyeSB7LS1wcm9ncmVzcy1mb3JlLWNvbG9yOiAjZDMyZjJmOyB9cHJvZ3Jlc3MudGVydGlhcnkgey0tcHJvZ3Jlc3MtZm9yZS1jb2xvcjogIzMwODczMjsgfS5zcGlubmVyLnByaW1hcnkgey0tc3Bpbm5lci1mb3JlLWNvbG9yOiAjMTk3NmQyOyB9LnNwaW5uZXIuc2Vjb25kYXJ5IHstLXNwaW5uZXItZm9yZS1jb2xvcjogI2QzMmYyZjsgfS5zcGlubmVyLnRlcnRpYXJ5IHstLXNwaW5uZXItZm9yZS1jb2xvcjogIzMwODczMjsgfXNwYW5bY2xhc3NePSdpY29uLSddIHtkaXNwbGF5OiBpbmxpbmUtYmxvY2s7aGVpZ2h0OiAxZW07d2lkdGg6IDFlbTt2ZXJ0aWNhbC1hbGlnbjogLTAuMTI1ZW07YmFja2dyb3VuZC1zaXplOiBjb250YWluO21hcmdpbjogMCBjYWxjKHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pIC8gNCk7IH1zcGFuW2NsYXNzXj0naWNvbi0nXS5zZWNvbmRhcnkgey13ZWJraXQtZmlsdGVyOiBpbnZlcnQoMjUlKTtmaWx0ZXI6IGludmVydCgyNSUpOyB9c3BhbltjbGFzc149J2ljb24tJ10uaW52ZXJzZSB7LXdlYmtpdC1maWx0ZXI6IGludmVydCgxMDAlKTtmaWx0ZXI6IGludmVydCgxMDAlKTsgfXNwYW4uaWNvbi1hbGVydCB7YmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMDMyMzRiJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NjaXJjbGUgY3g9JzEyJyBjeT0nMTInIHI9JzEwJyUzRSUzQy9jaXJjbGUlM0UlM0NsaW5lIHgxPScxMicgeTE9JzgnIHgyPScxMicgeTI9JzEyJyUzRSUzQy9saW5lJTNFJTNDbGluZSB4MT0nMTInIHkxPScxNicgeDI9JzEyJyB5Mj0nMTYnJTNFJTNDL2xpbmUlM0UlM0Mvc3ZnJTNFIik7IH1zcGFuLmljb24tYm9va21hcmsge2JhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzAzMjM0Yicgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDcGF0aCBkPSdNMTkgMjFsLTctNS03IDVWNWEyIDIgMCAwIDEgMi0yaDEwYTIgMiAwIDAgMSAyIDJ6JyUzRSUzQy9wYXRoJTNFJTNDL3N2ZyUzRSIpOyB9c3Bhbi5pY29uLWNhbGVuZGFyIHtiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMwMzIzNGInIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ3JlY3QgeD0nMycgeT0nNCcgd2lkdGg9JzE4JyBoZWlnaHQ9JzE4JyByeD0nMicgcnk9JzInJTNFJTNDL3JlY3QlM0UlM0NsaW5lIHgxPScxNicgeTE9JzInIHgyPScxNicgeTI9JzYnJTNFJTNDL2xpbmUlM0UlM0NsaW5lIHgxPSc4JyB5MT0nMicgeDI9JzgnIHkyPSc2JyUzRSUzQy9saW5lJTNFJTNDbGluZSB4MT0nMycgeTE9JzEwJyB4Mj0nMjEnIHkyPScxMCclM0UlM0MvbGluZSUzRSUzQy9zdmclM0UiKTsgfXNwYW4uaWNvbi1jcmVkaXQge2JhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzAzMjM0Yicgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDcmVjdCB4PScxJyB5PSc0JyB3aWR0aD0nMjInIGhlaWdodD0nMTYnIHJ4PScyJyByeT0nMiclM0UlM0MvcmVjdCUzRSUzQ2xpbmUgeDE9JzEnIHkxPScxMCcgeDI9JzIzJyB5Mj0nMTAnJTNFJTNDL2xpbmUlM0UlM0Mvc3ZnJTNFIik7IH1zcGFuLmljb24tZWRpdCB7YmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMDMyMzRiJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NwYXRoIGQ9J00yMCAxNC42NlYyMGEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY2YTIgMiAwIDAgMSAyLTJoNS4zNCclM0UlM0MvcGF0aCUzRSUzQ3BvbHlnb24gcG9pbnRzPScxOCAyIDIyIDYgMTIgMTYgOCAxNiA4IDEyIDE4IDInJTNFJTNDL3BvbHlnb24lM0UlM0Mvc3ZnJTNFIik7IH1zcGFuLmljb24tbGluayB7YmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMDMyMzRiJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NwYXRoIGQ9J00xOCAxM3Y2YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMmg2JyUzRSUzQy9wYXRoJTNFJTNDcG9seWxpbmUgcG9pbnRzPScxNSAzIDIxIDMgMjEgOSclM0UlM0MvcG9seWxpbmUlM0UlM0NsaW5lIHgxPScxMCcgeTE9JzE0JyB4Mj0nMjEnIHkyPSczJyUzRSUzQy9saW5lJTNFJTNDL3N2ZyUzRSIpOyB9c3Bhbi5pY29uLWhlbHAge2JhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzAzMjM0Yicgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDcGF0aCBkPSdNOS4wOSA5YTMgMyAwIDAgMSA1LjgzIDFjMCAyLTMgMy0zIDMnJTNFJTNDL3BhdGglM0UlM0NjaXJjbGUgY3g9JzEyJyBjeT0nMTInIHI9JzEwJyUzRSUzQy9jaXJjbGUlM0UlM0NsaW5lIHgxPScxMicgeTE9JzE3JyB4Mj0nMTInIHkyPScxNyclM0UlM0MvbGluZSUzRSUzQy9zdmclM0UiKTsgfXNwYW4uaWNvbi1ob21lIHtiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMwMzIzNGInIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ3BhdGggZD0nTTMgOWw5LTcgOSA3djExYTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yeiclM0UlM0MvcGF0aCUzRSUzQ3BvbHlsaW5lIHBvaW50cz0nOSAyMiA5IDEyIDE1IDEyIDE1IDIyJyUzRSUzQy9wb2x5bGluZSUzRSUzQy9zdmclM0UiKTsgfXNwYW4uaWNvbi1pbmZvIHtiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMwMzIzNGInIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ2NpcmNsZSBjeD0nMTInIGN5PScxMicgcj0nMTAnJTNFJTNDL2NpcmNsZSUzRSUzQ2xpbmUgeDE9JzEyJyB5MT0nMTYnIHgyPScxMicgeTI9JzEyJyUzRSUzQy9saW5lJTNFJTNDbGluZSB4MT0nMTInIHkxPSc4JyB4Mj0nMTInIHkyPSc4JyUzRSUzQy9saW5lJTNFJTNDL3N2ZyUzRSIpOyB9c3Bhbi5pY29uLWxvY2sge2JhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzAzMjM0Yicgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDcmVjdCB4PSczJyB5PScxMScgd2lkdGg9JzE4JyBoZWlnaHQ9JzExJyByeD0nMicgcnk9JzInJTNFJTNDL3JlY3QlM0UlM0NwYXRoIGQ9J003IDExVjdhNSA1IDAgMCAxIDEwIDB2NCclM0UlM0MvcGF0aCUzRSUzQy9zdmclM0UiKTsgfXNwYW4uaWNvbi1tYWlsIHtiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMwMzIzNGInIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ3BhdGggZD0nTTQgNGgxNmMxLjEgMCAyIC45IDIgMnYxMmMwIDEuMS0uOSAyLTIgMkg0Yy0xLjEgMC0yLS45LTItMlY2YzAtMS4xLjktMiAyLTJ6JyUzRSUzQy9wYXRoJTNFJTNDcG9seWxpbmUgcG9pbnRzPScyMiw2IDEyLDEzIDIsNiclM0UlM0MvcG9seWxpbmUlM0UlM0Mvc3ZnJTNFIik7IH1zcGFuLmljb24tbG9jYXRpb24ge2JhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzAzMjM0Yicgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDcGF0aCBkPSdNMjEgMTBjMCA3LTkgMTMtOSAxM3MtOS02LTktMTNhOSA5IDAgMCAxIDE4IDB6JyUzRSUzQy9wYXRoJTNFJTNDY2lyY2xlIGN4PScxMicgY3k9JzEwJyByPSczJyUzRSUzQy9jaXJjbGUlM0UlM0Mvc3ZnJTNFIik7IH1zcGFuLmljb24tcGhvbmUge2JhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzAzMjM0Yicgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDcGF0aCBkPSdNMjIgMTYuOTJ2M2EyIDIgMCAwIDEtMi4xOCAyIDE5Ljc5IDE5Ljc5IDAgMCAxLTguNjMtMy4wNyAxOS41IDE5LjUgMCAwIDEtNi02IDE5Ljc5IDE5Ljc5IDAgMCAxLTMuMDctOC42N0EyIDIgMCAwIDEgNC4xMSAyaDNhMiAyIDAgMCAxIDIgMS43MiAxMi44NCAxMi44NCAwIDAgMCAuNyAyLjgxIDIgMiAwIDAgMS0uNDUgMi4xMUw4LjA5IDkuOTFhMTYgMTYgMCAwIDAgNiA2bDEuMjctMS4yN2EyIDIgMCAwIDEgMi4xMS0uNDUgMTIuODQgMTIuODQgMCAwIDAgMi44MS43QTIgMiAwIDAgMSAyMiAxNi45MnonJTNFJTNDL3BhdGglM0UlM0Mvc3ZnJTNFIik7IH1zcGFuLmljb24tcnNzIHtiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMwMzIzNGInIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ3BhdGggZD0nTTQgMTFhOSA5IDAgMCAxIDkgOSclM0UlM0MvcGF0aCUzRSUzQ3BhdGggZD0nTTQgNGExNiAxNiAwIDAgMSAxNiAxNiclM0UlM0MvcGF0aCUzRSUzQ2NpcmNsZSBjeD0nNScgY3k9JzE5JyByPScxJyUzRSUzQy9jaXJjbGUlM0UlM0Mvc3ZnJTNFIik7IH1zcGFuLmljb24tc2VhcmNoIHtiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMwMzIzNGInIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ2NpcmNsZSBjeD0nMTEnIGN5PScxMScgcj0nOCclM0UlM0MvY2lyY2xlJTNFJTNDbGluZSB4MT0nMjEnIHkxPScyMScgeDI9JzE2LjY1JyB5Mj0nMTYuNjUnJTNFJTNDL2xpbmUlM0UlM0Mvc3ZnJTNFIik7IH1zcGFuLmljb24tc2V0dGluZ3Mge2JhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzAzMjM0Yicgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDY2lyY2xlIGN4PScxMicgY3k9JzEyJyByPSczJyUzRSUzQy9jaXJjbGUlM0UlM0NwYXRoIGQ9J00xOS40IDE1YTEuNjUgMS42NSAwIDAgMCAuMzMgMS44MmwuMDYuMDZhMiAyIDAgMCAxIDAgMi44MyAyIDIgMCAwIDEtMi44MyAwbC0uMDYtLjA2YTEuNjUgMS42NSAwIDAgMC0xLjgyLS4zMyAxLjY1IDEuNjUgMCAwIDAtMSAxLjUxVjIxYTIgMiAwIDAgMS0yIDIgMiAyIDAgMCAxLTItMnYtLjA5QTEuNjUgMS42NSAwIDAgMCA5IDE5LjRhMS42NSAxLjY1IDAgMCAwLTEuODIuMzNsLS4wNi4wNmEyIDIgMCAwIDEtMi44MyAwIDIgMiAwIDAgMSAwLTIuODNsLjA2LS4wNmExLjY1IDEuNjUgMCAwIDAgLjMzLTEuODIgMS42NSAxLjY1IDAgMCAwLTEuNTEtMUgzYTIgMiAwIDAgMS0yLTIgMiAyIDAgMCAxIDItMmguMDlBMS42NSAxLjY1IDAgMCAwIDQuNiA5YTEuNjUgMS42NSAwIDAgMC0uMzMtMS44MmwtLjA2LS4wNmEyIDIgMCAwIDEgMC0yLjgzIDIgMiAwIDAgMSAyLjgzIDBsLjA2LjA2YTEuNjUgMS42NSAwIDAgMCAxLjgyLjMzSDlhMS42NSAxLjY1IDAgMCAwIDEtMS41MVYzYTIgMiAwIDAgMSAyLTIgMiAyIDAgMCAxIDIgMnYuMDlhMS42NSAxLjY1IDAgMCAwIDEgMS41MSAxLjY1IDEuNjUgMCAwIDAgMS44Mi0uMzNsLjA2LS4wNmEyIDIgMCAwIDEgMi44MyAwIDIgMiAwIDAgMSAwIDIuODNsLS4wNi4wNmExLjY1IDEuNjUgMCAwIDAtLjMzIDEuODJWOWExLjY1IDEuNjUgMCAwIDAgMS41MSAxSDIxYTIgMiAwIDAgMSAyIDIgMiAyIDAgMCAxLTIgMmgtLjA5YTEuNjUgMS42NSAwIDAgMC0xLjUxIDF6JyUzRSUzQy9wYXRoJTNFJTNDL3N2ZyUzRSIpOyB9c3Bhbi5pY29uLXNoYXJlIHtiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMwMzIzNGInIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ2NpcmNsZSBjeD0nMTgnIGN5PSc1JyByPSczJyUzRSUzQy9jaXJjbGUlM0UlM0NjaXJjbGUgY3g9JzYnIGN5PScxMicgcj0nMyclM0UlM0MvY2lyY2xlJTNFJTNDY2lyY2xlIGN4PScxOCcgY3k9JzE5JyByPSczJyUzRSUzQy9jaXJjbGUlM0UlM0NsaW5lIHgxPSc4LjU5JyB5MT0nMTMuNTEnIHgyPScxNS40MicgeTI9JzE3LjQ5JyUzRSUzQy9saW5lJTNFJTNDbGluZSB4MT0nMTUuNDEnIHkxPSc2LjUxJyB4Mj0nOC41OScgeTI9JzEwLjQ5JyUzRSUzQy9saW5lJTNFJTNDL3N2ZyUzRSIpOyB9c3Bhbi5pY29uLWNhcnQge2JhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzAzMjM0Yicgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDY2lyY2xlIGN4PSc5JyBjeT0nMjEnIHI9JzEnJTNFJTNDL2NpcmNsZSUzRSUzQ2NpcmNsZSBjeD0nMjAnIGN5PScyMScgcj0nMSclM0UlM0MvY2lyY2xlJTNFJTNDcGF0aCBkPSdNMSAxaDRsMi42OCAxMy4zOWEyIDIgMCAwIDAgMiAxLjYxaDkuNzJhMiAyIDAgMCAwIDItMS42MUwyMyA2SDYnJTNFJTNDL3BhdGglM0UlM0Mvc3ZnJTNFIik7IH1zcGFuLmljb24tdXBsb2FkIHtiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMwMzIzNGInIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ3BhdGggZD0nTTIxIDE1djRhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ2LTQnJTNFJTNDL3BhdGglM0UlM0Nwb2x5bGluZSBwb2ludHM9JzE3IDggMTIgMyA3IDgnJTNFJTNDL3BvbHlsaW5lJTNFJTNDbGluZSB4MT0nMTInIHkxPSczJyB4Mj0nMTInIHkyPScxNSclM0UlM0MvbGluZSUzRSUzQy9zdmclM0UiKTsgfXNwYW4uaWNvbi11c2VyIHtiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMwMzIzNGInIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ3BhdGggZD0nTTIwIDIxdi0yYTQgNCAwIDAgMC00LTRIOGE0IDQgMCAwIDAtNCA0djInJTNFJTNDL3BhdGglM0UlM0NjaXJjbGUgY3g9JzEyJyBjeT0nNycgcj0nNCclM0UlM0MvY2lyY2xlJTNFJTNDL3N2ZyUzRSIpOyB9OnJvb3Qgey0tZ2VuZXJpYy1ib3JkZXItY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4zKTstLWdlbmVyaWMtYm94LXNoYWRvdzogMCAwLjI4NTcxNDI4NTdyZW0gMC4yODU3MTQyODU3cmVtIDAgcmdiYSgwLCAwLCAwLCAwLjEyNSksIDAgMC4xNDI4NTcxNDI5cmVtIDAuMTQyODU3MTQyOXJlbSAtMC4xNDI4NTcxNDI5cmVtIHJnYmEoMCwgMCwgMCwgMC4xMjUpOyB9LmhpZGRlbiB7ZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9LnZpc3VhbGx5LWhpZGRlbiB7cG9zaXRpb246IGFic29sdXRlICFpbXBvcnRhbnQ7d2lkdGg6IDFweCAhaW1wb3J0YW50O2hlaWdodDogMXB4ICFpbXBvcnRhbnQ7bWFyZ2luOiAtMXB4ICFpbXBvcnRhbnQ7Ym9yZGVyOiAwICFpbXBvcnRhbnQ7cGFkZGluZzogMCAhaW1wb3J0YW50O2NsaXA6IHJlY3QoMCAwIDAgMCkgIWltcG9ydGFudDstd2Via2l0LWNsaXAtcGF0aDogaW5zZXQoMTAwJSkgIWltcG9ydGFudDtjbGlwLXBhdGg6IGluc2V0KDEwMCUpICFpbXBvcnRhbnQ7b3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50OyB9LmJvcmRlcmVkIHtib3JkZXI6IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS1nZW5lcmljLWJvcmRlci1jb2xvcikgIWltcG9ydGFudDsgfS5yb3VuZGVkIHtib3JkZXItcmFkaXVzOiB2YXIoLS11bml2ZXJzYWwtYm9yZGVyLXJhZGl1cykgIWltcG9ydGFudDsgfS5jaXJjdWxhciB7Ym9yZGVyLXJhZGl1czogNTAlICFpbXBvcnRhbnQ7IH0uc2hhZG93ZWQge2JveC1zaGFkb3c6IHZhcigtLWdlbmVyaWMtYm94LXNoYWRvdykgIWltcG9ydGFudDsgfS5yZXNwb25zaXZlLW1hcmdpbiB7bWFyZ2luOiBjYWxjKHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pIC8gNCkgIWltcG9ydGFudDsgfUBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDUwMHB4KSB7LnJlc3BvbnNpdmUtbWFyZ2luIHttYXJnaW46IGNhbGModmFyKC0tdW5pdmVyc2FsLW1hcmdpbikgLyAyKSAhaW1wb3J0YW50OyB9IH1AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMjgwcHgpIHsucmVzcG9uc2l2ZS1tYXJnaW4ge21hcmdpbjogdmFyKC0tdW5pdmVyc2FsLW1hcmdpbikgIWltcG9ydGFudDsgfSB9LnJlc3BvbnNpdmUtcGFkZGluZyB7cGFkZGluZzogY2FsYyh2YXIoLS11bml2ZXJzYWwtcGFkZGluZykgLyA0KSAhaW1wb3J0YW50OyB9QG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTAwcHgpIHsucmVzcG9uc2l2ZS1wYWRkaW5nIHtwYWRkaW5nOiBjYWxjKHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSAvIDIpICFpbXBvcnRhbnQ7IH0gfUBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEyODBweCkgey5yZXNwb25zaXZlLXBhZGRpbmcge3BhZGRpbmc6IHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSAhaW1wb3J0YW50OyB9IH1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA0OTlweCkgey5oaWRkZW4tc20ge2Rpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfSB9QG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTAwcHgpIGFuZCAobWF4LXdpZHRoOiAxMjc5cHgpIHsuaGlkZGVuLW1kIHtkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0gfUBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEyODBweCkgey5oaWRkZW4tbGcge2Rpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfSB9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDk5cHgpIHsudmlzdWFsbHktaGlkZGVuLXNtIHtwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDt3aWR0aDogMXB4ICFpbXBvcnRhbnQ7aGVpZ2h0OiAxcHggIWltcG9ydGFudDttYXJnaW46IC0xcHggIWltcG9ydGFudDtib3JkZXI6IDAgIWltcG9ydGFudDtwYWRkaW5nOiAwICFpbXBvcnRhbnQ7Y2xpcDogcmVjdCgwIDAgMCAwKSAhaW1wb3J0YW50Oy13ZWJraXQtY2xpcC1wYXRoOiBpbnNldCgxMDAlKSAhaW1wb3J0YW50O2NsaXAtcGF0aDogaW5zZXQoMTAwJSkgIWltcG9ydGFudDtvdmVyZmxvdzogaGlkZGVuICFpbXBvcnRhbnQ7IH0gfUBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDUwMHB4KSBhbmQgKG1heC13aWR0aDogMTI3OXB4KSB7LnZpc3VhbGx5LWhpZGRlbi1tZCB7cG9zaXRpb246IGFic29sdXRlICFpbXBvcnRhbnQ7d2lkdGg6IDFweCAhaW1wb3J0YW50O2hlaWdodDogMXB4ICFpbXBvcnRhbnQ7bWFyZ2luOiAtMXB4ICFpbXBvcnRhbnQ7Ym9yZGVyOiAwICFpbXBvcnRhbnQ7cGFkZGluZzogMCAhaW1wb3J0YW50O2NsaXA6IHJlY3QoMCAwIDAgMCkgIWltcG9ydGFudDstd2Via2l0LWNsaXAtcGF0aDogaW5zZXQoMTAwJSkgIWltcG9ydGFudDtjbGlwLXBhdGg6IGluc2V0KDEwMCUpICFpbXBvcnRhbnQ7b3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50OyB9IH1AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMjgwcHgpIHsudmlzdWFsbHktaGlkZGVuLWxnIHtwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDt3aWR0aDogMXB4ICFpbXBvcnRhbnQ7aGVpZ2h0OiAxcHggIWltcG9ydGFudDttYXJnaW46IC0xcHggIWltcG9ydGFudDtib3JkZXI6IDAgIWltcG9ydGFudDtwYWRkaW5nOiAwICFpbXBvcnRhbnQ7Y2xpcDogcmVjdCgwIDAgMCAwKSAhaW1wb3J0YW50Oy13ZWJraXQtY2xpcC1wYXRoOiBpbnNldCgxMDAlKSAhaW1wb3J0YW50O2NsaXAtcGF0aDogaW5zZXQoMTAwJSkgIWltcG9ydGFudDtvdmVyZmxvdzogaGlkZGVuICFpbXBvcnRhbnQ7IH0gfWltZ1thbHQ9IlNUIGxvZ28iXSB7IGRpc3BsYXk6IGJsb2NrOyBtYXJnaW46IGF1dG87IHdpZHRoOiA3NSU7IG1heC13aWR0aDogMjUwcHg7IG1pbi13aWR0aDogNzFweDsgfWltZ1thbHQ9IkN1YmUgbG9nbyJdIHsgZmxvYXQ6IHJpZ2h0OyB3aWR0aDogMzAlOyBtYXgtd2lkdGg6IDEwcmVtOyBtaW4td2lkdGg6IDhyZW07IHBhZGRpbmctcmlnaHQ6IDFyZW07fS5maWd1cmUge2Rpc3BsYXk6IGJsb2NrO21hcmdpbi1sZWZ0OiBhdXRvO21hcmdpbi1yaWdodDogYXV0bzt0ZXh0LWFsaWduOiBjZW50ZXI7fTwvc3R5bGU+CiAgIDwhLS1baWYgbHQgSUUgOV0+CiAgICAgPHNjcmlwdCBzcmM9Ii8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2h0bWw1c2hpdi8zLjcuMy9odG1sNXNoaXYtcHJpbnRzaGl2Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgIDwhW2VuZGlmXS0tPgorICA8bGluayBocmVmPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUNBQUFBQWdDQU1BQUFCRXBJckdBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQUROUVRGUkZnWkdsRXpGVzcvSDBZbmFQb0t5NzBOYmQzK1BvTWt4dGtKNndVbWlEd01qU0l6OWlzTHJIY29TYVFscDRBeU5MLy8vL2VUNk1nZ0FBQUJGMFVrNVQvLy8vLy8vLy8vLy8vLy8vLy8vLy93QWxyWmxpQUFBQXdrbEVRVlI0MnR5VDNSYUVJQWlFRWMyMEgrWDluM1ladEsxek50djd1Qm5MVHhqSVNQNEV2UW1JbE10OU5DRFVVVGdEbHVGK0pRTXlWdFBZUTlUOThHUnlyM1YrN01KcEFaRjBxYXo4QkMwR29JVmRaTHRhRS9IUVpFRFIxY29LdWkvQXdsMFZzRnpWYTZucElId3Y2TTJEN3kvNUpCYVJ0YXNRSDhkbTdzNWdjZW1xd0drZWhLVUxiWFJ0TnJTZTNuTXI3ZGhHQndWd2lVMGZtelVJV3YrOUQ4Z1hiWFRWeFJ2QXQrbGhkQzdjM0NqQ0RkR3Z1cFdjNGh2L2kzRjhCQmdBWW5nNlp2czR0aTRBQUFBQVNVVk9SSzVDWUlJcUFBQjRtYkk4dVNRNVJZRmJDQzF4QjFkWExoNG96a2tYS3hRMllRSmhta0F1d25tWkdUS0JOQS9nODh3QUFLQ1JGUkhnZy9QOWVNNE9yczdPTm82MkRsOHQ2cjhHL3lKaVl1UCs1YytyY0VBQUFPRjBmdEgrTEMrekdvQTdCb0J0L3FJbDdnUm9YZ3VnZGZlTFpySVBRTFVBb09uYVYvTncrSDQ4UEVXaGtMbloyZVhrNU5oS3hFSmJZY3BYZmY1bndsL0FWLzFzK1g0OC9QZjE0TDdpSklFeVhZRkhCUGpnd3N6MFRLVWN6NUlKaEdMYzVvOUgvTGNMLy93ZDB5TEVTV0s1V0NvVTQxRVNjWTVFbW96ek1xVWlpVUtTS2NVbDB2OWs0dDhzK3dNKzN6VUFzR28rQVh1UkxhaGRZd1AyU3ljUVdIVEE0dmNBQVBLN2I4SFVLQWdEZ0dpRDRjOTMvKzgvL1VlZ0pRQ0Faa21TY1FBQVhrUWtMbFRLc3ovSENBQUFSS0NCS3JCQkcvVEJHQ3pBQmh6QkJkekJDL3hnTm9SQ0pNVENRaEJDQ21TQUhISmdLYXlDUWlpR3piQWRLbUF2MUVBZE5NQlJhSWFUY0E0dXdsVzREajF3RC9waENKN0JLTHlCQ1FSQnlBZ1RZU0hhaUFGaWlsZ2pqZ2dYbVlYNEljRklCQktMSkNESmlCUlJJa3VSTlVneFVvcFVJRlZJSGZJOWNnSTVoMXhHdXBFN3lBQXlndnlHdkVjeGxJR3lVVDNVRExWRHVhZzNHb1JHb2d2UVpIUXhtbzhXb0p2UWNyUWFQWXcyb2VmUXEyZ1AybzgrUThjd3dPZ1lCelBFYkRBdXhzTkNzVGdzQ1pOank3RWlyQXlyeGhxd1Zxd0R1NG4xWTgreGR3UVNnVVhBQ1RZRWQwSWdZUjVCU0ZoTVdFN1lTS2dnSENRMEVkb0pOd2tEaEZIQ0p5S1RxRXUwSnJvUitjUVlZakl4aDFoSUxDUFdFbzhUTHhCN2lFUEVOeVFTaVVNeUo3bVFBa214cEZUU0V0SkcwbTVTSStrc3FaczBTQm9qazhuYVpHdXlCem1VTENBcnlJWGtuZVRENURQa0crUWg4bHNLbldKQWNhVDRVK0lvVXNwcVNobmxFT1UwNVFabG1ESkJWYU9hVXQyb29WUVJOWTlhUXEyaHRsS3ZVWWVvRXpSMW1qbk5neFpKUzZXdG9wWFRHbWdYYVBkcHIraDB1aEhkbFI1T2w5Qlgwc3ZwUitpWDZBUDBkd3dOaGhXRHg0aG5LQm1iR0FjWVp4bDNHSytZVEtZWjA0c1p4MVF3TnpIcm1PZVpENWx2VlZncXRpcDhGWkhLQ3BWS2xTYVZHeW92VkttcXBxcmVxZ3RWODFYTFZJK3BYbE45cmtaVk0xUGpxUW5VbHF0VnFwMVE2MU1iVTJlcE82aUhxbWVvYjFRL3BINVovWWtHV2NOTXcwOURwRkdnc1YvanZNWWdDMk1aczNnc0lXc05xNFoxZ1RYRUpySE4yWHgyS3J1WS9SMjdpejJxcWFFNVF6TktNMWV6VXZPVVpqOEg0NWh4K0p4MFRnbm5LS2VYODM2SzNoVHZLZUlwRzZZMFRMa3haVnhycXBhWGxsaXJTS3RScTBmcnZUYXU3YWVkcHIxRnUxbjdnUTVCeDBvblhDZEhaNC9PQlozblU5bFQzYWNLcHhaTlBUcjFyaTZxYTZVYm9idEVkNzl1cCs2WW5yNWVnSjVNYjZmZWViM24raHg5TC8xVS9XMzZwL1ZIREZnR3N3d2tCdHNNemhnOHhUVnhiendkTDhmYjhWRkRYY05BUTZWaGxXR1g0WVNSdWRFOG85VkdqVVlQakduR1hPTWs0MjNHYmNhakpnWW1JU1pMVGVwTjdwcFNUYm1tS2FZN1REdE14ODNNemFMTjFwazFtejB4MXpMbm0rZWIxNXZmdDJCYWVGb3N0cWkydUdWSnN1UmFwbG51dHJ4dWhWbzVXYVZZVlZwZHMwYXRuYTBsMXJ1dHU2Y1JwN2xPazA2cm50Wm53N0R4dHNtMnFiY1pzT1hZQnR1dXRtMjJmV0ZuWWhkbnQ4V3V3KzZUdlpOOXVuMk4vVDBIRFlmWkRxc2RXaDErYzdSeUZEcFdPdDZhenB6dVAzM0Y5SmJwTDJkWXp4RFAyRFBqdGhQTEtjUnBuVk9iMDBkbkYyZTVjNFB6aUl1SlM0TExMcGMrTHBzYnh0M0l2ZVJLZFBWeFhlRjYwdldkbTdPYnd1Mm8yNi91TnU1cDdvZmNuOHcwbnltZVdUTnowTVBJUStCUjVkRS9DNStWTUd2ZnJINVBRMCtCWjdYbkl5OWpMNUZYcmRld3Q2VjNxdmRoN3hjKzlqNXluK00rNHp3MzNqTGVXVi9NTjhDM3lMZkxUOE52bmwrRjMwTi9JLzlrLzNyLzBRQ25nQ1VCWndPSmdVR0JXd0w3K0hwOEliK09QenJiWmZheTJlMUJqS0M1UVJWQmo0S3RndVhCclNGb3lPeVFyU0gzNTVqT2tjNXBEb1ZRZnVqVzBBZGg1bUdMdzM0TUo0V0hoVmVHUDQ1d2lGZ2EwVEdYTlhmUjNFTnozMFQ2UkpaRTNwdG5NVTg1cnkxS05TbytxaTVxUE5vM3VqUzZQOFl1WmxuTTFWaWRXRWxzU3h3NUxpcXVObTVzdnQvODdmT0g0cDNpQytON0Y1Z3Z5RjF3ZWFIT3d2U0ZweGFwTGhJc09wWkFUSWhPT0pUd1FSQXFxQmFNSmZJVGR5V09Dbm5DSGNKbklpL1JOdEdJMkVOY0toNU84a2dxVFhxUzdKRzhOWGtreFRPbExPVzVoQ2Vwa0x4TURVemRtenFlRnBwMklHMHlQVHE5TVlPU2taQnhRcW9oVFpPMlorcG41bVoyeTZ4bGhiTCt4VzZMdHk4ZWxRZkphN09RckFWWkxRcTJRcWJvVkZvbzF5b0hzbWRsVjJhL3pZbktPWmFybml2TjdjeXp5dHVRTjV6dm4vL3RFc0lTNFpLMnBZWkxWeTBkV09hOXJHbzVzanh4ZWRzSzR4VUZLNFpXQnF3OHVJcTJLbTNWVDZ2dFY1ZXVmcjBtZWsxcmdWN0J5b0xCdFFGcjZ3dFZDdVdGZmV2YzErMWRUMWd2V2QrMVlmcUduUnMrRlltS3JoVGJGNWNWZjlnbzNIamxHNGR2eXIrWjNKUzBxYXZFdVdUUFp0Sm02ZWJlTFo1YkRwYXFsK2FYRG00TjJkcTBEZDlXdE8zMTlrWGJMNWZOS051N2c3WkR1YU8vUExpOFphZkp6czA3UDFTa1ZQUlUrbFEyN3RMZHRXSFgrRzdSN2h0N3ZQWTA3TlhiVzd6My9UN0p2dHRWQVZWTjFXYlZaZnRKKzdQM1A2NkpxdW40bHZ0dFhhMU9iWEh0eHdQU0EvMEhJdzYyMTduVTFSM1NQVlJTajlZcjYwY094eCsrL3AzdmR5ME5OZzFWalp6RzRpTndSSG5rNmZjSjMvY2VEVHJhZG94N3JPRUgweDkySFdjZEwycENtdkthUnB0VG12dGJZbHU2VDh3KzBkYnEzbnI4UjlzZkQ1dzBQRmw1U3ZOVXlXbmE2WUxUazJmeXo0eWRsWjE5Zmk3NTNHRGJvclo3NTJQTzMyb1BiKys2RUhUaDBrWC9pK2M3dkR2T1hQSzRkUEt5MitVVFY3aFhtcTg2WDIzcWRPbzgvcFBUVDhlN25MdWFycmxjYTdudWVyMjFlMmIzNlJ1ZU44N2Q5TDE1OFJiLzF0V2VPVDNkdmZONmIvZkY5L1hmRnQxK2NpZjl6c3U3MlhjbjdxMjhUN3hmOUVEdFFkbEQzWWZWUDF2KzNOanYzSDlxd0hlZzg5SGNSL2NHaFlQUC9wSDFqdzlEQlkrWmo4dUdEWWJybmpnK09UbmlQM0w5NmZ5blE4OWt6eWFlRi82aS9zdXVGeFl2ZnZqVjY5Zk8wWmpSb1pmeWw1Ty9iWHlsL2VyQTZ4bXYyOGJDeGg2K3lYZ3pNVjcwVnZ2dHdYZmNkeDN2bzk4UFQrUjhJSDhvLzJqNXNmVlQwS2Y3a3htVGsvOEVBNWp6L0dNekxkc0FBQUFnWTBoU1RRQUFlaVVBQUlDREFBRDUvd0FBZ09rQUFIVXdBQURxWUFBQU9wZ0FBQmR2a2wvRlJnQUFCVWxKUkVGVWVOcnNsMXVNVmRVWngzL2ZXbXVmZmM2Wk9RTXpnakRnQ0U2UWNTQllpNENRZ21QUlVpOW9VdHNRUXlLSmw4aUxWUjZhOEtER1MzeWdUVnFycVVhVDJrSkRqRUVscllhV2tlZ0lXTFZUeEZIQmthc3dnNXk1NEZ6T21UbTN2ZmRhZmRnVGlvRnBmQ0R4b2JPU25iV1NMM3V0My9ldGIvMi90Y1E1eC9mWkZOOXptd0NZQUpnQU1QL0xtQjNJM2QzYWNYeDkxK0RvYkpRUnBiVkRhYlFTakFoYUs3UUlXZ3RhQktVQUJHdkI0b2dzV0JmM2tRTm5MYmlJY2lWUUMyZFA2VjU5elJYWGpRdlEzbmw4MDhZdHV6Wm1DdzVNa2dBRm5vOTRTWHlqU0hzSzM5UDRuaVpwaEtTblNHaUZjNDVTYU9NdmNKUURTeW1JS0lhV01BaXhRWWxpZnBnWDcyMzVZTndJakJaTFAzcnlMNjBiKy9NaENTOUJmVVpZMUhncG1XUUNKd29SVUJKN0xTb2VLd0dGZ0lCMXNlZU9lT3djV01iNktDVGx6WEEzTGJqaWhYRUIyajQ3ZHQveHZod21sZUxIemZVOHRxYUZLYldUTHViV2R3QzdMd2pnb09HdDlrTS9pNktJeSt0cWVIcmR6V1JTaVl1ZGV5ODc1eUlST1IvZ1VIWjRUWHZuaWNsS1lNbTh4ck9MLy92SUtkcSs2TVpQSkZCYWc5SW9wUkdseGhKUUVCRUNhMWs1ZHpwTjArT0l2ZjNKVWZaM0RaQktKWWtjTEc2ODlNeUtLNmUvUHQ0cDhGcy9Qcnh1TkpkRGVRa21WNmZPR281MG5lYVpOM1l6dVc0cXhrOGl4a004SHpFZVJpczhKU2lsMEpWUmJteXNCV0J3T01kdld6L25WSkRFMkloU1lZUUZNMnEyQTcwaWNqNUFLYlFyMjlvL3ZkcFhGb2ZseXhQWnM3YTFOeTRtak9BM08vYmpTNEtFRWRBTzBRNjBRaWxGTVlpNGZrYWF1VE9ueHJuMFJUZGZGNFRhS2tXbFhLRnhpb2xXekszLzg3aEN0UFBURS9jZE9IU01wTkdrUE1XK0E0Zlp2THR6ekNxc1c3V0VKKzVxSVlnaXlxVWlSQlZjVU1FRlpXd1FFSlNMM0xHa0NjYTgyL25sQUNtdGNFR1p2c0ZCcnA4ejVjT2s3N2RmVUlnaXg1Vy8yNzdybHV6UUFHVW1rL0tUR09QWTlNcmZHU2tXZWZEbWhRRDhZbGt6TlRVMVBMVnREMEdwaE9lN1dGeWlNczMxZFN4cmFvaTNyQy9IbnBQOURKZEw1SU1BRlJhNWRYSHp5OFFuOHZ3SS9QUEEwWFg3MnR2VFNVOHhXaTV6cGxDZ3AxQ2dieVRIcjdhOHlZYk5PNGhzQk1DcStUTjU2UGJyNkJvdGNtb2tUOWRJbnNQRE9WWmZPd3ZmeEZQKzhWOUhPZFRiVDMreHdPaHdqdFVMcitwcXVtemEzOGFUNHN5ZmRyeTN0cGpQWTZRR29qSFpqQ3hvRHpFZXovNTFMd05ET1Y1WWZ5ZlZLWitiNWplUThJWHVvUndZdzZTcU5DMU45UUQwNUFwczN2c1pXaUowSlNDWlVHeFllZlUyWVBDQ0FMMURJN2NkN081dm5ET25FYU1Ob2hST2FVUnJuR2hRQ2l1YVBaMm42RG96eEx5R2FkVDZtbWtxNEhSWUlTeVZ1R04rUFEyVDBnQnMyN3Vmdm15V3FxbzBoV0tSWlF1YUtvc3V2MlRMQll1UmM0NjY2dFFET3pjOWpGYUtiMTFSdjNWaGRTZ1JhdEpKQUk3MURuQ3lkd0RmT3JSMTNMOXlVWnhMa2VXMWp6cnhzT2hLQ1RlU1o4MFBaN2NxNGNDNVV6LzA2RXM4OS9SNmpMVjJxV2YwRFpkazB0OVp4a3FWa0NlMy9vTytuajR3aHBZZnpHWHBWYk1BMk5WeGhQYy9QNFkybWx3dTRPZExtNys1Wi9uOHg4LzkvNWVQdk1nZmZyOHRCdEJhTHdkR2dQQzdMQjVGbHEzdjdxTzc1eHQrc3FpWm9CeXk0ZllWR0IwbjM1SFQvU3lmTTBPbTF0YUVQMTNZMUw3K2xtV1BBWjhFUWNqem0zZnd3VWNIZWUyTk5waFVGUi91N0dpUW1aNDJkWEVad0FGeUViUmVnQUE0M2RxMm4xOC84eW85QThOMEh2d0tyRU5WcCtMcStQV2JtTFU3czhYTE11WWtRR2dkOCtwOFpsWWJicGlaWmxaYWVPdWRqK25zUEFGYWtjbWs4Uk1lZzRONUVFRWtKcmIydjdtaUpLNEpEc2V1M1IyOHU3ZURLRitBaEVHcVVpamczTWVRVEx5TUpnRCs3d0grTXdBR1BEVXdyYkJtOGdBQUFBQkpSVTVFcmtKZ2dnPT0iIHJlbD0iaWNvbiIgdHlwZT0iaW1hZ2UveC1pY29uIiAvPgogPC9oZWFkPgogPGJvZHk+CiA8ZGl2IGNsYXNzPSJyb3ciPgogPGRpdiBjbGFzcz0iY29sLXNtLTEyIGNvbC1sZy00Ij4KLTxkaXYgY2xhc3M9ImNhcmQgZmx1aWQiPgotPGRpdiBjbGFzcz0ic2VjdGlvbmUgZGFyayI+CiA8Y2VudGVyPgotPGgxIGlkPSJyZWxlYXNlLW5vdGVzLWZvci1zdG0zMmYyeHgtaGFsLWRyaXZlcnMiPjxzdHJvbmc+UmVsZWFzZSBOb3RlcyBmb3IgU1RNMzJGMnh4IEhBTCBEcml2ZXJzPC9zdHJvbmc+PC9oMT4KKzxoMSBpZD0icmVsZWFzZS1ub3Rlcy1mb3JzdG0zMmYyeHgtaGFsLWRyaXZlcnMiPjxzbWFsbD5SZWxlYXNlIE5vdGVzIGZvcjwvc21hbGw+PG1hcms+U1RNMzJGMnh4IEhBTCBEcml2ZXJzPC9tYXJrPjwvaDE+CiA8cD5Db3B5cmlnaHQgwqkgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3M8YnIgLz4KIDwvcD4KLTxhIGhyZWY9Imh0dHBzOi8vd3d3LnN0LmNvbSIgY2xhc3M9ImxvZ28iPjxpbWcgc3JjPSJfaHRtcmVzYy9zdF9sb2dvLnBuZyIgYWx0PSJTVCBsb2dvIiAvPjwvYT4KKzxhIGhyZWY9Imh0dHBzOi8vd3d3LnN0LmNvbSIgY2xhc3M9ImxvZ28iPjxpbWcgc3JjPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVVRQUFBRDVDQVlBQUFFb3pueFBBQUFBQ1hCSVdYTUFBQXNTQUFBTEVnSFMzWDc4QUFBZEVrbEVRVlI0bk8yZDNWVWpPZFBITmV1OWYwd0VDNmNEZUNDQ2dXdGZMRVF3RU1GQ0JFQUVNQkhBUkFCNzRXdThFZUFOd0FkbmdOOEFmT1k5NGlreFFxaTc5ZjNSL2YrZE0yZG03SGEzV2wxZGtxcEtWUXdBTUZDK3VON1dwSm45RE4wbDI5VmMyNTdmYlU4MGFXWjNqTEhUSUsweXhMcVJhZ1BiN2o0a1ZoZVFIM0dLeGdsK2MvemRKbnhUMm5GNTNMd1hkOFMvVFY4Z3VlZlYzL1E5RmVPZTdHak1rZWs1NkR5SHlrZTlUOFZZcnZydXZxdEhmWHFSbWZha3JnRXVGM1BGOWNWeGFxanJqZlUyY3RMTWptMHVyQktpaDAxNjhxSHZBSk0zZk5MTW5wV1BMZ3l1L1Vad09XcFQrRDR5N0NXVEhoelkvTlJKbWVzZy9mY2tmZlgrT0hNTnA2QUlORU5qSnpaajl4WC8wL0g5SWYwOVZkL2tTVE43RXA5Snh6M0puenMxVWpxcE9ORWZqTEZMNmZ0WDZaZ1BmMnM0VkYrWTdXcCtKRDdudjlQb1VRQUFBQUFVanROc2VOTE16aGxqTjRGdjdYcTdtbithVFZrM01JYUJsSFVzSFp4TmU4VFpkalcvOTJ4Yko4NkxyRlNMSlpzWjk3dmxOdVZLenFZSDc5UVBxTkdmUHRjaGJvclAwaGxqVSttUVRqSHhXdXlieXAvUzQxUGx1ODV6T0p2eFdpNGVIS2NldExUUGFDMFNwamRuWXI1NzlXbmtkalcvN2J0R0Z5WTlPRzM3Z3BhUyszMk5aREVOb0FhMHJuVkR5R2V2bWdseGtVa3oyM1g5YlZDYllvZFo3a1UrTG92UjAzQVNjUVo3NG1ocE0vMTF5cUFzVjJRL0ZDYTRCL1pMRHg2cXg4cS9sK3lFaDhwM1J2WkRFOXVoT01HbHNQTnRWL01UNmZNN1B0cUk3elNuV25JYm9lYnpmZGwyMk5WSUFBQUFBQUFBUURpU3JGckpvbE5OZ0lEdGFqNTZKOWEyU25JeGgwVHR4TFlPSEpyZEp0ck42RHB3cUVhdktEYzFwZzVrSVVNNkJUWTZrSWZhTWNhMGZoQkhGaFR4WnRVbTN3Y2NWRHJJdHRnYTI5M1cyRkNkcVR0L2lsanlZSjFvMmhHMmtmdW11SFFnWTJ4bnU1cDdiODBKNmZJeGtpU3ljSGM2Z20ybG82VURXeU4zaVVXSURtU2hKTkZ6THRncURaTm14Z041enJ0KzNLRWlvci9HZ2hDZXoxQ1RhVzB3UnMvNTk3YXIrZHEyVGFGbkNyNDdsZnBlR1JzK2RVWVA2eEk2a0tWYU83dlNOZHJuR29sMUZOdUp0bEZJUFIwWVpCUUdZR0Fva1JEYWY1ZUl6WFl5MndIVGVuVHVpT1VUY2FUdjRTVzBpbEViS0w0L1Y3ZWppWDlQbXRtTDVuang5N09JTzlSOHQ4KzNGTk01bmxuTHc1VisveUQ5N3JUdCtENWliSHg5U3g3QVEyQW9oRVVrdW5ocnJPaHNKWUJTbFJJNTZtNGhmN0ZkelEva0JBWEVBWDIzRkZ1ZStYSDAzUWVEQk84czhYc0swK0hIUDRzNTZtQ3NUUlRjTkdVVldzWUJBQUFBQUFBQUFBQUFBQUFBUkNhcEtid1dLN1d0aXlCNGtLZU9vWnY0c1h0QXdjVlJGVFhON1ZpY1RFbGU1eGFXa2x1emFwSnV3U0JPdHF2NTR4QTZUNUJVRW9lNkRTT0tUaFRoR1FxMlFaelZFR3RnK1JTWXVWM045NGJSWlo4SjNvbTZJS2FoRTBNbkdtL3FpVEFGY2dtZTk5YlZ1Y29oUktHbEEvdFNUSHBuR1EyZC84MXFhMW1pMGJxemR0VjJOVC96dlVCb1NiVFdoNkU2TXVmMEtXU2l2ODRubmlNbmFhb3RHU0Vsc1RlOWJWZWhDTThieWpwOVNqMnc3SGZwVGVwSTYvMG1MVHVyWHZSSHYrT3RDd1ZCT3RGeXF2S3BKb3NNeFZQYmpKakxsczg3czYyR3pQMmRiWXJUMDVGbnBoS3Bzd1RKU1lGVDROMkpCdk93cnQvMlNhUXJuVGw0aXRwbFNualZFTzFSQloxR2kxS3NRa1dzV0RyeTUxaVB1Z2I2T2ZoSUhyUXlvK2U1cktxUThYSVlMdGZSamVTK0ZMTjIzcTdtQzRQRDVPTS83YitqMmlWZHRJM2tYcFMrYVR6a251ZG9PclJLSzQ1alowVGJORjVzSjlwYWhBeWswR2ZLMUVtUm5VaHp6emFMa0ZWRmFaWmdLcFRUNzZ6RlFLSStEVUJ0bTd4UkdnSUFBQ3FnSlRFRnR4RStsZHg2MHlXcXkxSTIxT2o4T3VhUk1MVExkRitzWDd0U3FjamY2M0xyU0g5ZmlZcERhc29WcVFyUnVURENhbjYveTFPOEtHMW92WjRyb1NmYnoyVCt2K3F6c25Ua1BieVMwcjVjU2NmZks3OWYwSFY0anNVYlVpZHErcGUxU1BFaXNSSGxuSVM5c3JnSUNIN2pkUFB2TnkyWjY2ZlNaMjFaa0t4OUh6d1pMeVhrTlRHUFRhWGpSZG9ZcnhTR1RqcVJMaXBxOEIvUloyb2RMTzRudWFjbnpsKzlMOHIzSWlIUWg5cFpYSHJJVTJkVTFrLzUvYlVxalQzSGkvWDBlbkNoMFdyYXF2d3RBZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBR01HdDJsSENxNEhZWWxhNXI2NGZlSXUwT1o4cjd4R29KT3ptRUxJYWhkRTJ0Rlg5SDdXQVhBZk1xZGZHOVVPelJpQ2s3Q0ptZnRHcGtxTk9HbG1ONDVDZUxCZHphUGtCd04rVktjUkhZYmpxSk5zRUlZYU5hS3BFRUw3VlVSVkd0RTBud0N5cXRWSE5WazdMWkphbkVSdUNvaEFGWnJETnB1THhYbGZYY3JGcE1UMGZxZ01tRlcyV0lWa0syUWR4V3RFU2xsa0pJU1c1MzBZaWhBU1BrSVlOVVd4Q1VVTElpVVR1elE0MUpydGFuNFNzb0pOaFBiWmFIYXZYRndsektsTDE0aWQ5Vk4wa0kzUkNPNHhvSWRRV2lsazQ1emhBUkxDRlhIdnhjNFJQVHZZeVhRVFlKNFZnbnZUdW9zQnZFdTMyOVg4SXRtZGRWQ2tJQVpLKytoVjlEMVQ2a25qQlFObDBuV3VBc2JUYTVaVUZMbzRRYlJaSVJ2aUs1REpWdFlKVjhqRjJWcUxhb3lTMURjMFh1WUpxclVhclhEaTJCWW5Lc1UwaUNkZ1o0ejExV2tOZ3MrRElMTlA2S1RLeHY3d0lRb2hLOHpYbkVRSTJjZUhhUjBRUVdhZmtIUElFd3NoOUYxSVdWZndTa1hSeFVvVDhFcGxOS3lIM0VDYWhhK1FIMDBPN0NrUlozb3RxektjS2NtdXBnc3JqSEJtRTQzc0dTRnVzMEkrMXBROGlYS3RYR1FWeE5nTEFGZFNMQnpHdkVMV2tXMW9wa3BWeFFsaENoTDdrS3NJYkVIY25nZjBNaG03RkluUnI1QjFWRmxGdkNCc2hkQjRXMmFBRlhJeFhoTVRCckd2T1FjTzJ1clJkQ0hrdTBLdU1VSWRRN01scmdadGk4V0p6MHE4Mm4wNjBJaUcrS3p3TFRXVXJSQmV5eFZ4YXdVYXNRZFJIOW9GRndOeXgvVTIySlVJQUFBQUFBQkFZSFEyTjlwdm9YNzJrMnhvd0JHKzJBa2RTRUxQSmVyS1BJdjVSdTBveFhaMk9tbG1QOFNLVXhNd3l6MFRleFllQ3QzV0F4Nko4aXJNS3RTZUkzV1ZxMzdlc2xucC9WeHROa0Q2VGhXT0Q1RStMZTdDOTJPa2MyOFVZL2Y3Wml2NUd1TGYwajErNmdmVnJOVFNmcU13TlYreUNLTDZZT2hCdjMwbWR3NGRjNkxwc0J1K2VhZ3J0SWxpREo5MU5qeGJyU3NpWUZyT3BSVTg1WmlmcW8rWnRNeDB1NXJmU2dML1NURFVQbEh2bWQrTE9FWitHU1FCL1BCLzViZmNqYmpnd2I3VWh1dVc0NktINnRWZzBQNXIwc3orMG56ZVoxUGplMS9XdWkrNEJxRmRjS2FjZHh4M1loSWgwNkxCWmMxMjJHSkR2TzQ1OVkrZXRNMXYvZEF5dEg1WDJwak5NRjY2SU41eUlWQzBwQmlxVDZUUDNuZmFpV1BGVzg2L2s3Vkl5L0J6UzUvSjEzbmYzTThmRUg4Wk5CcmJkMHVuZlAxTG1uS3NsZnZzRThST3RxdjVFV20wdjVSK2VNczdMdDNQa1c2S0VpRDRZbHowZVVCb2VPMmw3VHdrMUx2cXVXaWFVRktVZVNlbTJ5SmN0ay80QUJlZkJTMEJENFB3OVFJd2VnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFERUlGTVhVNDdyQjAxTkZPQkk3R0xrZzZyWExHcXJGTkNVb1dGVVhNbUh3UWhpUzRVcEVJYUQyUDA0aUtHNXB2SVNOUko3V09iOFZuc25RUWlqNDFWd3lKU3FOU0tFTUQ0cHRDR3JXU09pbkc0U3RMVU1ZMUR6MEd4VDFCRzRFWDJSSXFoeTFhd3JUV3NKTDhMNHQxcWZHZVNqVnZPTmk2SDZ2Y0EyS0kvcUJOR3l6akpuMDFWZ0hKUkJqWE5FbTBYS1BZU3dEcW9TUk5PYXk4UWpodUo2cUUwakd2dVJlUVg3dUUwQklhbE5FSTE4eWFtTXNDQWMxUWppcEpuZEdCNjZqTndVRUlGcU5JZXBPdy9hc0U2cTBJZ1Vad2dHVEMxRHMra2lCY055cFF3cVFwdTc3VXdQckNHYTIyYWFNV2xtL0Y2Y1I0N2NVNXJpTmVLa21UMVlIRzdqT3g3YWxvS3FweTgxRE0zSEJiUWhCN2VtMXd3UUJKSWsrTFdMb2dYUndhOXNRL1FOUVQ1c1YvTUxpNTk3N1ZiY3J1WlgwVzdFa05JMW9tM3dxL0VES2R3SGJSeVFHdUJsVFJiODJrV3hnbWpwVnhiOFpYTXdUZEJMMUl4SEZzZjZScW9uQzM3dG9tU042TEtZc0JaZTBveEZDZU4yTlRmU1VwTm01cjE5ZHJ1YUYzSHZKUXVpVXlkUG1wbjFmSW1Fc1JRYnBFM0VrTzhpcFpqb3BDSUZjZExNZkNiUFRnOW51NW9mV0pwL29yQmR6ZTh0enV1bEVTMnZGWlZTTmVLbHo0OG56Y3pKNUxOZHpmbmNMT2ZETVg0UkxJSkEybmowL0gxUWlnc1FvSG5QUzRCVDdiak9meWJON0p3eDV2dWdyYkgwcEhqdDZTNHRPS1JFalJqSzQvSHF1UExtRCttMnBQbVR5aENEUUVvVVJDZmhhY0ZIR084VG16WnNJc3A5WDlZaVREWXlSUWxpcE93TnI2NGFaTHVhTDFNOXRPMXFubXpPUnZkVkZLVnB4Rmd1dldkUFlZenRoVEZlSUZrR2dlZ3c5bUducEpnSks2MTBmVHU1anpOWGt3VU44YTh4R2pYbVJZcWdKSTBZV3dnNWQ2NitXYjRDai9RUWpWZjJRL0VyNnloQ0VGMFhGSTdjZWM1Rjl3SzN4MllPNmp1SHR2RmhKNlVVamVqcnFyTGwxRlVZeVE4Y3pBTmo0VmYyZmxsTnI1V0RVZ1F4aDEzc2xNTHJyU0VQVEFoc0FsSjlUVFpGWjczSUxvaWVmbVZmOWlrSnZBdmVya0RMZ05UQitKVjFsS0FSdmZ6S0FkaWRORFByMVhDQXZEbzJ3YSsrTDJ2eGVTQ3pDbUtJZUxwQVREUGs0N1pacEhpOXJBR25FdEhJclJHTDJrbm5JSXpPSGdyVGdJeUNYdGFvNUJiRWxHWWJJeXgzeExrT2VUYkR1dS9MV3J3MlpEa0ZzZUNxQURZUjN2L25jZ0hMaFlQWHkxcExudkNjR3JIVXFnQTJ0cmF2RHVjM0RtNEk4TElXdlZLV3FiN3lWR0FXMjlYY3huUGlzai9HSnR6TDYyV3RLV051dHR3M0kwMGZaK05YOXMxd1VYUUNBUlZvUkVjY1hXNDJDd2ZmSUpEaWdsKzdnQ0M2WXkwb0tRTlNTL1lyNjRBZ3VtTTdQMHlaVkttNmtoNFFSQWRjZ2lVU0psVjZMQ1Y3Z3cwUVJFdG95NEZ0dEZDcXBFcWJXc3Q2UUJEdGNmRjBwQWgrcmJyVUd3VFJBdGZBaUFSKzVlcEx2UTB0aDNZVVBQTnR4MDZxNUp6Um9pUlFrNlNIbEVuU0xUVHVJKzFJckY0QUJkQ0lIZEJRYWJQYS9ZQkR3TUZlV3lRMmlwd0RBQUFBQUFBQUFBQUFBQUJBUkxpblFQeVJyOExqN1hUWkMranoxQnZkQndYMXQxZHRQcFVVenlScTBBTzV0M1RoOFVzMU5JckNudzVIdXBkbDlHUng4YlVFaVg2cklVY0xpRU55UWFRdytMZWhRMmcvV2ZYemY4dGFVVDZldURiTm90VVNOYk9rSUlhMzg5QXc5cVJxWXZYemx2b3ZqMVJQV3B6cnAzUitBZDhpOEs4U1ovZ3BkcEFTUVUzYmpxRnozNnRiVEtYMlhVazVjdmdVaC85OXhIM1U0bDZVdHQrcUNvRXlvNm0rN2lUaFpjbmpFU2toMEpIeTJSZlNoZ3RGQ0gvU1E5Mmh6M2xRd0tWSnFENEpEai91Z3Y5Vy9IR0pwS0VkZXk4a2NQSzVkRnMrOTZYditVTThKeUU4a0Q2Znl1bnc2RDdYeXJrM21ya1pGOEk5NlppbE9JYS9DRkxmSGRFeEMzb1p1UkNlcU8yU3ExZlJlYVpLRzY1ajVRMVhLYmxNN3R1Yno3V0NDSGZpTzlPRU1CbHM1M3loZ05FUG01WWM1NkN2OUpKODBNUXQ1enFUdnQrSXViQ3lnKzlBYUI2eGFLTmFnUEs1OTlpdktsaUNlM2wzbnZxYkZwN3BCWHFVZnJlUlhwTDNRcHFxbHFiN1RUSmRLamtNakwrdGk1YmNnR3ZxeE00aHVpUFRnVXNjbitsZUVIVi95bHI5akFzbERaMk1odE4xeTg2OURYMHZYcVlmdWd0eVFlb0pFL3ZhdGpPUU5PWmxXMll6UG9LbFdEV1hMSWpUaml5cC9NSCt4K1BjSm9MNDRkcVJnMUQ1L2Z5aitWejNtUXR0NS9sSDZvdXNRYllsQ3lLZm1CL3Jra3lxR29EU2MzelZUTDZ2V2hZMnNwQzFiWHIvVXpuWFU2U0VsMjhMa0piNy9Pa1RtQ3V4VWFjb29tNE1MYksrdHlVTVNKVzFyZGc1SWcyclU3VWphS0dpRGpNUE5QbVdPL09BRmphSHl1OC9UTDZGcGxNbTdsTmxJY0xuYTRmS2ZDMklvVmRNSDlRRm1QaS9La0FPOENuRmpkd1BVdkdpQlpQS3I2bDlReTk0a3F4dFVUV2l6aXhqK2huOWQ0ZHE2Y21kMFZWNDUxL3hENXFIblVpbURNRmFrM1B3Z01xa3lZSjJLeWJ6ZklFd2FXYmlHTGw4cm1xcWNVTDBpeXJZSVl6N1hNZ216ZXhNMHcrUDhoNW9hc09yNXVYYUMxUzJlQnowYmNVMDNhcXBxOW5IdFpQeXNreWxmLzhNbVY0NHRIdk9zUTJESzhNN0dFamdQc3lqV2pRSWNBQzcrTXdSMHdSWjhHTFY1d01BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUorSUpPcnBkSk16dGtqUEUvZnpER2RxVS9BT1JnelJnNzJxN202MXA3Ly9jQzJnQjZJTVgzalRGMmlyNENCYk5MQS9SOXJROEpDckZBSnMxc3loaTdaSXlkajcwdlFGWGNibGZ6YXBVaHc1SzVMQ2JOak04QTc4YmVENkJLRnR2Vi9LajJSd2VGV0FDVFpuYUg1VENvbVBWMk5kOGJ3Z1BFa2pramsyYkdsOFEzbyswQU1CU3FueGtLb0JBelFEYkNGOGJZZEhRM0Q0WkcxVjVsbGQvS2FzN3dJWS94SzVRaEdBQVgyOVY4TWFRSENSdGlRa2daUGhYV3JBMWpiRmxBTzBCZC9LamRvNndEQ2pFUmsyYTJTOHZrbEhCRjk1MDhnSU5aMWdBUUN5akVCQ1MwR2ZMbHl4bVVId0J1d0ttU2hxZUl5cERQQWsrZ0JBSHdCd294TWhSanVCL2hLdmZiMWZ5c3FKc0ZvSEtnRUNNeWFXWlhFUUt1bHhUcXNDbnFaZ0VZQUxBaFJtTFN6STRaWXcrQnozNjlYYzJ2aXJsSkFBWUdGR0lFSW5tVWo0WVc4d1ZBYVNBd093N1BnYzk2Qm1VSVFIeWdFQU16YVdiUGdUM0s5ME1NZ0FXZ1JLQVFBeExKbzN5UjlhWUFHQkh3TWdlQ010ZUU5aWpmeC9JbVU3QTR6N1J6akgzVlRrUnpjR1YrTm54LzhtM2lheFlEWm9nQklJOXlqRFJlZjBkbzYzVFN6RjRvd2NRcGxLRXpmOFk0S1lWcTVYdzJYek5jc3hpZ0VEMGhqM0xvOEJwQmpObmhEVU1oS2w4Mk1YSUFVc2IweStSMzh3dWU2UFVrNC9XekE0WG9UMmlQY216K3JheTlKWElRMnBReGFXYjdCWlNQR0V5aVYxZWdFRDJZTkxPWWU1UlpqQzEvWkIvQ2xqOTNnaWZQSUp0aDdyUndnMHIwNmdvVW9pUGtVVDZNZkprb2Rpb2V4ck5kemI5QU1WcHpIU2tFS25Tb2xpMkRTL1RxQ25hcU9KQzRGZ3BmbmtWTjRFckx0ZGl6M2RxSmtreWpnQUpqU0JJaUFZVm9TWWFzMThrcW1rbDJyQmpaZVdvbXlqTWdqM0pPSjhvZ1NvZUdCQXJSZ2t4WnIxbnFVVnl5YVVFeC9zK2p2QmZCaVJJaitZY05tKzFxdnBQeCtrVUNoV2dCeGUvbENsbkpNcHFqWm5SNGswWEdnVlZtRDA2VXowQWhHa0llNWRoT2xENDI5SUltRitTUktzYXowRTZVUWtyUThnenJqeG12WHl6d01odVF5S05zd3R2TFJNbzVLWHpKUGpMUGRDeVBjbTduMVFXVVlUdVlJZlpBdXdkeUI4eTJrUzE3TnRuQTdnYnFtWDZNc1dNREh1WHlnVUxzb05BNnlqcXlGWm9hWU1oT0xJOXl5bEF0SGN2dGFuNlE4ZnBWQUlYWVFpR0diMXMyTkdOTVhuaCtRSjdwblNGNmxHTjR5b2NJRkdJTG1UM0t2bXpJVnBROHNXemxpaEVlNVpFRGhhaWhFSTl5S0lKN1NrMnB6RE1kcFo4bXpld1ZIdVY2Z0pkWllkTE1iZ2FrRERsM2syYjJrNVJUVXNpQXYwTTJ6cEs1amFRTWM5dFdyNkVNN2NBTVVhSndqM0lvc25nYUMrN2JLQUh2OENqWENSUWlVWkZIT1JUSlEzWUtkRlRGOGlqblZ2N0o5cjhQRFNqRVg0NkExd0tha29Pa2lyR3d2bzdoVWM0OXNNS2o3QUZzaVAranRxelhJZUhlNEZkdS9LZVl3cWpRaTFwQ1BGendRWUJtd0xsWEdjR3plWStKMFN2RVNUTjdRSTJSTi9qTTdUbUZZcVRRbHB5VjNXSVYvcyt0RElObjh4NGJvMTR5azBmNXZJQ21sRXJVa0IzdS9jNXczN0VTdmVZTzFZcFdGblZNakZZaGpzU2pISXFqR0RPcURFb2tsa2M1OThBYVplLzFHQm5sa3JtUUNtYzE4VVQyc2REOGs3QVBOcEdVNFdsbVpUajYwcUVoR1oxQ0pDL25tSjBvcnRSdVp3M3V5Q2xrWUVYQ2hvQ01jWWFZYzVOOXJaeEVja0o4VGRRZndVdHNGakt3d3FNY21OOEhkVGNHOEdVVGpleW9NTmZOT3FiSGtwNUJDdnRockJLYnVaWGhXWTZzUmtObmRBcVIvUXI3QUhsSlVXM3VuZ3J6QjZXQVVLMG9lNjhCZHFxQURDVHk4RWRKaUZwQTZWRHNVWTRJRkNKSUNpMlZZeTgzbzVUWUxDQlVDOG93TXFQZnFRTFNRZnQ4VTlqZWh1aFJ2b0F5akE4VUlrZ0MxUlJKc2JVdGVHMFpLUXQ0RHBhVWhDTG5Wc2ZSTUVxbkNraEg0cElDc1JLaVBtZUlTc2hXSDJmTVFDR0NhQ1JPa25vZll5OHYzVU5LajNLMkNvb0FUaFVRR0pvUmNpVnluTEJ2YS9jb2J5aXVFT24rTTRNWklnZ0MyUWd2Y3kwdFE1K1VTb2ZHVW9hOHpUeU84RHRtZ21VQmhRaWN5VnczWkVNMncxak9CdDh0Y1J0YS9pNHBpY1VDMit3QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBaGt2VlcvY29uZFFIdXRMRlU3bElubVRnaDJuR1lTblYvUVpaaWtGcWFDdWtTSXl4TERXNFczb1hvNWFlaUUzdE8xVjBLWm02bEx4UWJwM2xMelVaV3NSV0t3QlNzeS9KT2QraUdLTStUQWhFRzY4Wlk5VVd6SzlhSVc1WDh6ZmxSNk5UYjc0Nmk3cThkeVNJZkxUYjgyNG9BS0FLUnJHWG1WSy9mMGpocEthS29rTHNZbC91dnZTNU9PNitheWxBdno5V2toc3NVK3hocGZ2N2syYS80dm9ibWszOExaYjYwcjBzWk5PQ2N1K2Q5Mmx6UEExVWYybmE5VWhtaTBWYnU5UnIwRG0rU1pYNjFuUi9QelQzY2tuSGlXZStwR09Oa2luUUNrSHVVOEZiZjlJOWE1K3BwdDJNK3VCWWFzOUdhcytuR1IvMW03anVIOUpYM3hRemtiYnZKWG1RTXc1WjlZSG1YUEl6MVBiOUVCaExjb2Yva3BLVDdUSHF0SDRxMVFtZWFqNzdsSnFKaE9WR2VkbVgwbTh2NlRoR254K0ZVbzZValVXdU1jMkY5THUwcEJJSzVKaVNNQ3lWSksyeUlPOUttVjBXZEs0dVdvOG5tK3VUOHZMY2t5Smgwb3Q2U3YyeTBDZ2R0VTN5dGM3b25IK1M0aEhuZVpRVWdEQngvQ005UTU2TjU1eU9QV3BSUkdxeUNuN09DNm52dnRMenZxSHpYR3R5TU9yYUxRWUJZYXI1U20wOXB2T290VkoyTmJMSXFBM3l3UDR1azVwNkwwdXA3ZUo4cDFJZkxOcFdUSnB6Q2RrU3N2MVZlWWFEU1dJN2lIeUk4cEpaTEtNOWozdWlsN1JMYUY1STBIb3pHeXNDcG51SmJPLzNTVklpMnBlNzQvcWYycUNZSEV6T3B6MWVVU2dYZlpsb0tHWFlqYTVkeWpXNm5vTnFMamxyYzM2UlUrMmMvbnNnbmhuTjZrUlc3TjZCU3lwU0w1Ny9uamhlYWMrR3J0TTJnK2EvZjZIL1BtNVg4NU9lKzJ0VDVNK2tMSTJ5YkZNWlZURjRIQ2t6YkZtMkRnek8xZm9NYXdRMVZSeVE2dkp5cjk5T245RFFDeXFxd0YyU2duSzk5cFVrc0hzbVN4YTZmdkFFcWtxN2ppVmxlR2FTbG91TythUUVORngzbkdNaHpTclhYWkVBMjlYOFF2cXZ2Sng4RU1xUUo1cnRtOFh6NzhtMnZLYmZQYlFjZXRHMVBLWHZSSnVPYVhadGhSUTV3VWdlZW1kcnBIaEZQNzBQSm5RdUlWdTljczNzbm1FVklCK2lHK0psMnA4MHM1OE9aL2ptNGJVV1M2bUZqUzJJQy9la21hbkwwNURzUzljeXZqZWVKWnFXWFNGd0RmY1FiWGQ5bm0xOWF0SWVXZW00Sk5lVmxlaXJTMS95V1NnTkxPSmNWbmJ2d004d0sxQ0licXhwaHBpalR1NC85QUllOGlXWHFWS2s1Wm1KTWpSNUtYWG5rZTJJeDZicDhHbG1tWnUxTk9PUE9wT09nUHo4ZHp4dDFFdEp0cWFtNTNLWjJaWUtsc3h1aUNYQ0tkbk5PdUhDeFcyT2ZQWkJ0c2RQOEtVd2ZTLy8wUVdlWDBsTHhCY1RZYVJqdE5kbHY1YWQ0c1c2YVR1T2ZmVGlxdWU0bDJhOUR5Wm1BVHFtYmJtWkVtR2Y1RFBFWjdJUmRyVjdTc2Z4Wi9SS2ZaSUZHcERGc3pPVmh6dWRqSkZKd2ZaY3FXcHRKNkhxR2FJVXJ2R0g1ck9GSnF4RGQ5eWIzVWtKbHhBQ3Zxc0x1NkhsNXc3WlgwN3B4Vlk5Y1V6eWhJb1hyTXZnckt2ZmNha0x4T1VPQnNsUjhpeDVhMzlJQXIycmhLbHNlbVovQjZRMGQyblp1S0Q3RWJPRS9iNmFLZnpsbkRTekg2VGs3aVR2OWcrcFg5UjJxZDd2NU5Cei9TSTVKN2lTMnlqZThhbmtxUlY5a0dPRjhBbHV6NVFjUmtJZVJOdkY4L3RUQ2YzUk9vL29YS3BzUGRLNVhHV3JHbXBmTW4rVi9yMVFQbHNiSHZjZitudXEvSGF0SFBkaENVaUM5TGE4b2xIeW0wWmhyQzJLQ1IyUUloRUN1K2d5Vm9zWm1SUXo5MDN4SkRNcDlPSXRibzQ4aUdyZnlQZXpRK2M3cC9PcHM3ZEh5Y0VoWnBMdkw1UTAyemlpUVVPMFM1MTFMb1EzV1BHaXlvUEpSbnBXZlV1M3BmSjNGKzhPR0UwZnFNL3pWUEpLTXlsODVycmplZHEwMitSNG8vUFI3TzZDQm5ZUjl5alAwamRTdjNjNjRoVFpPaWRscXBPdE15bkd0VlcyYWdKbFNFRXdsUENlMWxBWmdSS3ppRjFCSUR0UWlDQW9MZnZBK2F6cVg4bG8vMThsN0tXSXBTY0FVSWdnR2pRREZMWW1kWmZNM3hTTWpMckVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFnQXBqN1A4QjdybGpidytGS3JFQUFBQUFTVVZPUks1Q1lJST0iIGFsdD0iU1QgbG9nbyIgLz48L2E+CiA8L2NlbnRlcj4KLTwvZGl2PgotPC9kaXY+Ci08aDEgaWQ9ImxpY2Vuc2UiPjxzdHJvbmc+TGljZW5zZTwvc3Ryb25nPjwvaDE+Ci1UaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwgdGhlIOKAnExpY2Vuc2XigJ07IFlvdSBtYXkgbm90IHVzZSB0aGlzIGNvbXBvbmVudCBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQ6Ci08Y2VudGVyPgotPGEgaHJlZj0iaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2UiPmh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlPC9hPgotPC9jZW50ZXI+Cis8aDEgaWQ9InB1cnBvc2UiPlB1cnBvc2U8L2gxPgorPHA+VGhlIFNUTTMyQ3ViZSBIQUwgYW5kIExMLCBhbiBTVE0zMiBhYnN0cmFjdGlvbiBsYXllciBlbWJlZGRlZCBzb2Z0d2FyZSwgZW5zdXJlIG1heGltaXplZCBwb3J0YWJpbGl0eSBhY3Jvc3MgU1RNMzIgcG9ydGZvbGlvLjwvcD4KKzxwPlRoZSBwb3J0YWJsZSBBUElzIGxheWVyIHByb3ZpZGVzIGEgZ2VuZXJpYywgbXVsdGkgaW5zdGFuY2VkIGFuZCBzaW1wbGUgc2V0IG9mIEFQSXMgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgdXBwZXIgbGF5ZXIgKGFwcGxpY2F0aW9uLCBsaWJyYXJpZXMgYW5kIHN0YWNrcykuIEl0IGlzIGNvbXBvc2VkIG9mIG5hdGl2ZSBhbmQgZXh0ZW5kZWQgQVBJcyBzZXQuIEl0IGlzIGRpcmVjdGx5IGJ1aWx0IGFyb3VuZCBhIGdlbmVyaWMgYXJjaGl0ZWN0dXJlIGFuZCBhbGxvd3MgdGhlIGJ1aWxkLXVwb24gbGF5ZXJzLCBsaWtlIHRoZSBtaWRkbGV3YXJlIGxheWVyLCB0byBpbXBsZW1lbnQgaXRzIGZ1bmN0aW9ucyB3aXRob3V0IGtub3dpbmcgaW4tZGVwdGggdGhlIHVzZWQgU1RNMzIgZGV2aWNlLiBUaGlzIGltcHJvdmVzIHRoZSBsaWJyYXJ5IGNvZGUgcmV1c2FiaWxpdHkgYW5kIGd1YXJhbnRlZXMgYW4gZWFzeSBwb3J0YWJpbGl0eSBvbiBvdGhlciBkZXZpY2VzIGFuZCBTVE0zMiBmYW1pbGllcy48L3A+Cis8cD5UaGUgTG93IExheWVyIChMTCkgZHJpdmVycyBhcmUgcGFydCBvZiB0aGUgU1RNMzJDdWJlIGZpcm13YXJlIEhBTCB0aGF0IHByb3ZpZGVzIGEgYmFzaWMgc2V0IG9mIG9wdGltaXplZCBhbmQgb25lIHNob3Qgc2VydmljZXMuIFRoZSBMb3cgbGF5ZXIgZHJpdmVycywgY29udHJhcnkgdG8gdGhlIEhBTCBvbmVzIGFyZSBub3QgZnVsbHkgcG9ydGFibGUgYWNyb3NzIHRoZSBTVE0zMiBmYW1pbGllczsgdGhlIGF2YWlsYWJpbGl0eSBvZiBzb21lIGZ1bmN0aW9ucyBkZXBlbmRzIG9uIHRoZSBwaHlzaWNhbCBhdmFpbGFiaWxpdHkgb2YgdGhlIHJlbGF0aXZlIGZlYXR1cmVzIG9uIHRoZSBwcm9kdWN0LiBUaGUgTG93IExheWVyIChMTCkgZHJpdmVycyBhcmUgZGVzaWduZWQgdG8gb2ZmZXIgdGhlIGZvbGxvd2luZyBmZWF0dXJlczo8L3A+Cis8dWw+Cis8bGk+TmV3IHNldCBvZiBpbmxpbmUgZnVuY3Rpb25zIGZvciBkaXJlY3QgYW5kIGF0b21pYyByZWdpc3RlciBhY2Nlc3M8L2xpPgorPGxpPk9uZS1zaG90IG9wZXJhdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCBieSB0aGUgSEFMIGRyaXZlcnMgb3IgZnJvbSBhcHBsaWNhdGlvbiBsZXZlbDwvbGk+Cis8bGk+RnVsbCBpbmRlcGVuZGVuY2UgZnJvbSBIQUwgYW5kIHN0YW5kYWxvbmUgdXNhZ2UgKHdpdGhvdXQgSEFMIGRyaXZlcnMpPC9saT4KKzxsaT5GdWxsIGZlYXR1cmVzIGNvdmVyYWdlIG9mIGFsbCB0aGUgc3VwcG9ydGVkIHBlcmlwaGVyYWxzPC9saT4KKzwvdWw+CiA8L2Rpdj4KIDxkaXYgY2xhc3M9ImNvbC1zbS0xMiBjb2wtbGctOCI+CiA8aDEgaWQ9InVwZGF0ZS1oaXN0b3J5Ij48c3Ryb25nPlVwZGF0ZSBIaXN0b3J5PC9zdHJvbmc+PC9oMT4KIDxkaXYgY2xhc3M9ImNvbGxhcHNlIj4KLTxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb24xXzJfNyIgYXJpYS1oaWRkZW49InRydWUiPiA8bGFiZWwgZm9yPSJjb2xsYXBzZS1zZWN0aW9uMV8yXzciIGFyaWEtaGlkZGVuPSJ0cnVlIj48c3Ryb25nPlYxLjIuNyAvIDIxLU1heS0yMDIxPC9zdHJvbmc+PC9sYWJlbD4KKzxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb24xXzJfOCIgY2hlY2tlZCBhcmlhLWhpZGRlbj0idHJ1ZSI+IDxsYWJlbCBmb3I9ImNvbGxhcHNlLXNlY3Rpb24xXzJfOCIgYXJpYS1oaWRkZW49InRydWUiPjxzdHJvbmc+VjEuMi44IC8gMDctQXByaWwtMjAyMzwvc3Ryb25nPjwvbGFiZWw+CiA8ZGl2PgogPGgyIGlkPSJtYWluLWNoYW5nZXMiPk1haW4gQ2hhbmdlczwvaDI+CiA8dWw+Ci08bGk+R2VuZXJhbCB1cGRhdGVzIHRvIGZpeCBrbm93biBkZWZlY3RzLjwvbGk+Cis8bGk+R2VuZXJhbCB1cGRhdGVzIHRvIGZpeCBrbm93biBkZWZlY3RzIGFuZCBlbmhhbmNlbWVudHMgaW1wbGVtZW50YXRpb24uPC9saT4KKzxsaT5IQUwgY29kZSBxdWFsaXR5IGVuaGFuY2VtZW50IGZvciBNSVNSQS1DIFJ1bGUtOC4xMyBieSBhZGRpbmcgY29uc3QgcXVhbGlmaWVycy48L2xpPgorPGxpPkFsbCBzb3VyY2UgZmlsZXM6IHVwZGF0ZSBkaXNjbGFpbWVyIHRvIGFkZCByZWZlcmVuY2UgdG8gdGhlIG5ldyBsaWNlbnNlIGFncmVlbWVudC48L2xpPgogPC91bD4KIDxoMiBpZD0iY29udGVudHMiPkNvbnRlbnRzPC9oMj4KIDx1bD4KKzxsaT48c3Ryb25nPkhBTCBHZW5lcmljPC9zdHJvbmc+IGRyaXZlcgorPHVsPgorPGxpPkFsbG93IHJlZGVmaW5pdGlvbiBvZiBtYWNybyBVTlVTRUQoeCkuPC9saT4KKzwvdWw+PC9saT4KKzxsaT48c3Ryb25nPkhBTCBHUElPPC9zdHJvbmc+IGRyaXZlcgorPHVsPgorPGxpPlJlb3JkZXIgRVhUSSBjb25maWd1cmF0aW9uIHNlcXVlbmNlIGluIG9yZGVyIHRvIGF2b2lkIHVuZXhwZWN0ZWQgbGV2ZWwgZGV0ZWN0aW9uLjwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+PHN0cm9uZz5IQUwgRVhUSTwvc3Ryb25nPiBkcml2ZXIKKzx1bD4KKzxsaT5GaXggY29tcHV0YXRpb24gb2YgcEV4dGlDb25maWctJmd0O0dQSU9TZWwgaW4gSEFMX0VYVElfR2V0Q29uZmlnTGluZSgpLjwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+PHN0cm9uZz5IQUwgQURDPC9zdHJvbmc+IGRyaXZlcgorPHVsPgorPGxpPlJlbW92ZSBtdWx0aXBsZSB2b2xhdGlsZSByZWFkcyBvciB3cml0ZXMgaW4gaW50ZXJydXB0IGhhbmRsZXIgZm9yIGJldHRlciBwZXJmb3JtYW5jZS48L2xpPgorPC91bD48L2xpPgorPGxpPjxzdHJvbmc+SEFMIERBQzwvc3Ryb25nPiBkcml2ZXIKKzx1bD4KKzxsaT5GaXggaW5jb3JyZWN0IHdvcmQg4oCYc3VyY2hhcmdlZOKAmSBpbiBmdW5jdGlvbnMgaGVhZGVycy48L2xpPgorPC91bD48L2xpPgorPGxpPjxzdHJvbmc+SEFML0xMIFRJTTwvc3Ryb25nPiBkcml2ZXIKKzx1bD4KKzxsaT5NYW5hZ2UgY29uZmlndXJhdGlvbiBvZiB0aGUgQ2FwdHVyZS9jb21wYXJlIERNQSByZXF1ZXN0IHNvdXJjZToKKzx1bD4KKzxsaT5BZGQgcmVsYXRlZCBuZXcgZXhwb3J0ZWQgY29uc3RhbnRzIChUSU1fQ0NETUFSRVFVRVNUX0NDLCBUSU1fQ0NETUFSRVFVRVNUX1VQREFURSkuPC9saT4KKzxsaT5DcmVhdGUgYSBuZXcgbWFjcm8gX19IQUxfVElNX1NFTEVDVF9DQ0RNQVJFUVVFU1QoKSBhbGxvd2luZyB0byBwcm9ncmFtIHRoZSBUSU14X0NSMi5DQ0RTIGJpdGZpZWxkLjwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+SW1wcm92ZWQgZHJpdmVyIHJvYnVzdG5lc3MgYWdhaW5zdCB3cm9uZyBwZXJpb2QgdmFsdWVzLjwvbGk+Cis8bGk+SW1wcm92ZWQgZHJpdmVyIHJvYnVzdG5lc3MgYWdhaW5zdCB3cm9uZyBETUEgcmVsYXRlZCBwYXJhbWV0ZXJzLjwvbGk+Cis8bGk+X19MTF9USU1fQ0FMQ19QU0MoKSBtYWNybyB1cGRhdGUgdG8gcm91bmQgdXAgdGhlIGV2YWx1YXRlIHZhbHVlIHdoZW4gdGhlIGZyYWN0aW9uYWwgcGFydCBvZiB0aGUgZGl2aXNpb24gaXMgZ3JlYXRlciB0aGFuIDAuNS48L2xpPgorPGxpPlJlbW92ZWQgbG9jayBtYW5hZ2VtZW50IGZyb20gY2FsbGJhY2sgbWFuYWdlbWVudCBmdW5jdGlvbnMuPC9saT4KKzwvdWw+PC9saT4KKzxsaT48c3Ryb25nPkhBTCBSVEM8L3N0cm9uZz4gZHJpdmVyCis8dWw+Cis8bGk+VXNlIGJpdHMgZGVmaW5pdGlvbnMgZnJvbSBDTVNJUyBEZXZpY2UgaGVhZGVyIGZpbGUgaW5zdGVhZCBvZiBoYXJkLWNvZGVkIHZhbHVlcy48L2xpPgorPGxpPldyYXAgY29tbWVudHMgdG8gYmUgODAtY2hhcmFjdGVyIGxvbmcgYW5kIGNvcnJlY3QgdHlwb3MuPC9saT4KKzxsaT5Nb3ZlIGNvbnN0YW50cyBSVENfSVRfVEFNUC4gZnJvbSBoYWxfcnRjLmggdG8gaGFsX3J0Y19leC5oLjwvbGk+Cis8bGk+R2F0aGVyIGFsbCBpbnN0cnVjdGlvbnMgcmVsYXRlZCB0byBleGl0aW5nIHRoZSDigJxpbml04oCdIG1vZGUgaW50byBuZXcgZnVuY3Rpb24gUlRDX0V4aXRJbml0TW9kZSgpLjwvbGk+Cis8bGk+UmV3b3JrIGZ1bmN0aW9ucyBIQUxfUlRDRXhfU2V0VGFtcGVyKCkgYW5kIEhBTF9SVENFeF9TZXRUYW1wZXJfSVQoKSB0bzoKKzx1bD4KKzxsaT5Xcml0ZSBpbiBUQUZDUiByZWdpc3RlciBpbiBvbmUgc2luZ2xlIGFjY2VzcyBpbnN0ZWFkIG9mIHR3by48L2xpPgorPGxpPkF2b2lkIG1vZGlmeWluZyB1c2VyIHN0cnVjdHVyZSBzVGFtcGVyLjwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+Q2hlY2sgaWYgdGhlIFJUQyBjYWxlbmRhciBoYXMgYmVlbiBwcmV2aW91c2x5IGluaXRpYWxpemVkIGJlZm9yZSBlbnRlcmluZyBpbml0aWFsaXphdGlvbiBtb2RlLjwvbGk+Cis8bGk+QWRkIGEgbmV3IEFQSSBIQUxfVUFSVEV4X0dldFJ4RXZlbnRUeXBlIHRoYXQgY291bGQgYmUgdXNlZCB0byByZXRyaWV2ZSB0aGUgdHlwZSBvZiBldmVudCB0aGF0IGhhcyBsZWQgdGhlIFJ4RXZlbnRDYWxsYmFjayBleGVjdXRpb24uPC9saT4KKzxsaT5SZW1vdmUgbWFjcm8gX19IQUxfUlRDX1RBTVBFUl9HRVRfSVQoKSBhcyBpdCBpcyByZWR1bmRhbnQgd2l0aCBtYWNybyBfX0hBTF9SVENfVEFNUEVSX0dFVF9GTEFHKCkgYW5kIGNyZWF0ZSBhbiBhbGlhcyBpbnRvIHRoZSBoYWxfbGVnYWN5LmggZmlsZS48L2xpPgorPC91bD48L2xpPgorPGxpPjxzdHJvbmc+SEFMIFVBUlQ8L3N0cm9uZz4gZHJpdmVyCis8dWw+Cis8bGk+SGFuZGxpbmcgb2YgVUFSVCBjb25jdXJyZW50IHJlZ2lzdGVyIGFjY2VzcyBpbiBjYXNlIG9mIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gVHggYW5kIFJ4IHRyYW5zZmVycy48L2xpPgorPGxpPkltcHJvdmUgaGVhZGVyIGRlc2NyaXB0aW9uIG9mIFVBUlRfV2FpdE9uRmxhZ1VudGlsVGltZW91dCgpIGZ1bmN0aW9uLjwvbGk+Cis8bGk+QWRkIGEgY2hlY2sgb24gdGhlIFVBUlQgcGFyaXR5IGJlZm9yZSBlbmFibGluZyB0aGUgcGFyaXR5IGVycm9yIGludGVycnVwdGlvbi48L2xpPgorPGxpPkZpeCB0eXBvIGluIFVBUlRfSVRfVFhFIGJpdCBkZXNjcmlwdGlvbi48L2xpPgorPGxpPlJlbW92YWwgb2YgSEFMX0xPQ0svSEFMX1VOTE9DSyBjYWxscyBpbiBIQUwgVUFSVCBUeCBhbmQgUnggQVBJcy48L2xpPgorPGxpPlJlbW92ZSBfX0hBTF9MT0NLKCkgZnJvbSBIQUxfeHh4X1JlZ2lzdGVyQ2FsbGJhY2soKS9IQUxfeHh4X1VuUmVnaXN0ZXJDYWxsYmFjaygpLjwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+PHN0cm9uZz5IQUwgU01BUlRDQVJEPC9zdHJvbmc+IGRyaXZlcgorPHVsPgorPGxpPkltcHJvdmUgaGVhZGVyIGRlc2NyaXB0aW9uIG9mIFNNQVJUQ0FSRF9XYWl0T25GbGFnVW50aWxUaW1lb3V0KCkgZnVuY3Rpb24uPC9saT4KKzxsaT5SZW1vdmUgX19IQUxfTE9DSygpIGZyb20gSEFMX3h4eF9SZWdpc3RlckNhbGxiYWNrKCkvSEFMX3h4eF9VblJlZ2lzdGVyQ2FsbGJhY2soKS48L2xpPgorPC91bD48L2xpPgorPGxpPjxzdHJvbmc+SEFMIElSREE8L3N0cm9uZz4gZHJpdmVyCis8dWw+Cis8bGk+SW1wcm92ZSBoZWFkZXIgZGVzY3JpcHRpb24gb2YgSVJEQV9XYWl0T25GbGFnVW50aWxUaW1lb3V0KCkgZnVuY3Rpb24uPC9saT4KKzxsaT5BZGQgYSBjaGVjayBvbiB0aGUgSVJEQSBwYXJpdHkgYmVmb3JlIGVuYWJsaW5nIHRoZSBwYXJpdHkgZXJyb3IgaW50ZXJydXB0LjwvbGk+Cis8bGk+UmVtb3ZlIF9fSEFMX0xPQ0soKSBmcm9tIEhBTF94eHhfUmVnaXN0ZXJDYWxsYmFjaygpL0hBTF94eHhfVW5SZWdpc3RlckNhbGxiYWNrKCkuPC9saT4KKzwvdWw+PC9saT4KKzxsaT48c3Ryb25nPkhBTCBTRE1NQzwvc3Ryb25nPiBkcml2ZXIKKzx1bD4KKzxsaT5UYWtlIGluIGFjY291bnQgdGhlIHZvbHRhZ2UgcmFuZ2UgaW4gdGhlIENNRDEgY29tbWFuZC48L2xpPgorPGxpPkFkZCBuZXcgTEwgZnVuY3Rpb24gdG8gaGF2ZSBjb3JyZWN0IHJlc3BvbnNlIGZvciBNTUMgZHJpdmVyLjwvbGk+Cis8bGk+VXBkYXRlIHRoZSBkcml2ZXIgdG8gaGF2ZSBhbGwgZmllbGRzIGNvcnJlY3RseSBpbml0aWFsaXplZC48L2xpPgorPGxpPkFkZCBhIGludGVybmFsIHRvIG1hbmFnZSB0aGUgcG93ZXIgY2xhc3MgYW5kIGNhbGwgaXQgYmVmb3JlIHRvIHVwZGF0ZSBzcGVlZCBvZiBidXMgd2lkdGguPC9saT4KKzxsaT5BZGQgbmV3IEFQSSB0byBnZXQgdGhlIHZhbHVlIG9mIHRoZSBFeHRlbmRlZCBDU0QgcmVnaXN0ZXIgYW5kIHBvcHVsYXRlIHRoZSBFeHRDU0QgZmllbGQgb2YgdGhlIE1NQyBoYW5kbGUuPC9saT4KKzwvdWw+PC9saT4KKzxsaT48c3Ryb25nPkhBTC9MTCBVU0FSVDwvc3Ryb25nPiBkcml2ZXIKKzx1bD4KKzxsaT5IYW5kbGUgVVNBUlQgY29uY3VycmVudCByZWdpc3RlciBhY2Nlc3NlcyBpbiBjYXNlIG9mIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gVHggYW5kIFJ4IHRyYW5zZmVycy48L2xpPgorPGxpPkltcHJvdmUgaGVhZGVyIGRlc2NyaXB0aW9uIG9mIFVTQVJUX1dhaXRPbkZsYWdVbnRpbFRpbWVvdXQoKSBmdW5jdGlvbi48L2xpPgorPGxpPkFkZCBhIGNoZWNrIG9uIHRoZSBVU0FSVCBwYXJpdHkgYmVmb3JlIGVuYWJsaW5nIHRoZSBwYXJpdHkgZXJyb3IgaW50ZXJydXB0LjwvbGk+Cis8bGk+UmVtb3ZlIF9fSEFMX0xPQ0soKSBmcm9tIEhBTF94eHhfUmVnaXN0ZXJDYWxsYmFjaygpL0hBTF94eHhfVW5SZWdpc3RlckNhbGxiYWNrKCkuPC9saT4KKzwvdWw+PC9saT4KKzxsaT48c3Ryb25nPkhBTCBDQU48L3N0cm9uZz4gZHJpdmVyCis8dWw+Cis8bGk+UmVtb3ZhbCBvZiBuZXZlciByZWFjaGVkIGNvZGUuPC9saT4KKzxsaT5JbXByb3ZlIHByb3RlY3Rpb24gYWdhaW5zdCBiYWQgaW5wdXRzLjwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+PHN0cm9uZz5IQUwgSEFTSDwvc3Ryb25nPiBkcml2ZXIKKzx1bD4KKzxsaT5IQUwgY29kZSBxdWFsaXR5IGVuaGFuY2VtZW50IGZvciBNSVNSQS1DMjAxMiBSdWxlLTIuMl9jLjwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+PHN0cm9uZz5IQUwgTk9SPC9zdHJvbmc+IGRyaXZlcgorPHVsPgorPGxpPkVuYWJsZSB3cml0ZSBvcGVyYXRpb25zIGJlZm9yZSBlZmZlY3RpdmUgd3JpdGUgdG8gTk9SIG1lbW9yeSBpbiBIQUxfTk9SX0luaXQoKSBmdW5jdGlvbiB0byBhdm9pZCBIYXJkRmF1bHQuPC9saT4KKzxsaT5GTUNfV1JJVEVfT1BFUkFUSU9OX0RJU0FCTEUgZm9yIE5PUiBjYXVzZSBIYXJkZmF1bHQgZm9yIFJlYWQgb3BlcmF0aW9ucy48L2xpPgorPC91bD48L2xpPgorPGxpPjxzdHJvbmc+SEFMIFNQSTwvc3Ryb25nPiBkcml2ZXIKKzx1bD4KKzxsaT5GaXggZHJpdmVyIHRvIGRvbuKAmXQgdXBkYXRlIHN0YXRlIGluIGNhc2Ugb2YgZXJyb3IgKEhBTF9TUElfU1RBVEVfUkVBRFkgd2lsbCBiZSBzZXQgb25seSBpbiBjYXNlIG9mIEhBTF9USU1FT1VUKS48L2xpPgorPC91bD48L2xpPgorPGxpPjxzdHJvbmc+SEFMIElXREc8L3N0cm9uZz4gZHJpdmVyCis8dWw+Cis8bGk+VXBkYXRlIGNvbW1lbnQgZGVzY3JpYmluZyB0aGUgY2FsY3VsYXRpb24gb2YgSEFMX0lXREdfREVGQVVMVF9USU1FT1VUIG1hY3JvLjwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+PHN0cm9uZz5IQUwgRE1BPC9zdHJvbmc+IGRyaXZlcgorPHVsPgorPGxpPk1hbmFnZSB0aGUgY2FzZSBvZiBhbiBpbnZhbGlkIGNhbGxiYWNrIElEIHBhc3NlZCB0byB0aGUgSEFMX0RNQV9SZWdpc3RlckNhbGxiYWNrKCkgZnVuY3Rpb24uPC9saT4KKzwvdWw+PC9saT4KKzxsaT48c3Ryb25nPkhBTCBJMkM8L3N0cm9uZz4gZHJpdmVyCis8dWw+Cis8bGk+VXBkYXRlIEhBTF9JMkNfTWVtX1dyaXRlX0RNQSgpIGFuZCBIQUxfSTJDX01lbV9SZWFkX0RNQSgpIEFQSXMgdG8gYWRkIGluaXRpYWxpemF0aW9uIGZvciBEZXZhZGRyZXNzLCBNZW1hZGRyZXNzIGFuZCBFdmVudENvdW50IHBhcmFtZXRlcnMuPC9saT4KKzxsaT5VcGRhdGUgSTJDX01hc3RlclJlY2VpdmVfUlhORSgpIHByb2Nlc3MgdG8gc2FmZWx5IG1hbmFnZSBkYXRhIE49MiBhbmQgTj0zLCBEaXNhYmxlIEJVRiBpbnRlcnJ1cHQgaWYgbm90aGluZyB0byBkby48L2xpPgorPGxpPlVwZGF0ZSBIQUxfSTJDX01hc3Rlcl9UcmFuc21pdF9JVCB0byByZXR1cm4gSEFMX0JVU1kgaW5zdGVhZCBvZiBIQUxfRVJST1Igd2hlbiB0aW1lb3V0IG9jY3VyIGFuZCBJMkNfRkxBR19CVVNZIGlzIFNFVC48L2xpPgorPGxpPkNsZWFyIEFDSyBiaXQgb25jZSAzIGJ5dGVzIHRvIHJlYWQgcmVtYWluIHRvIGJlIGFibGUgdG8gc2VuZCB0aGUgTkFDSyBvbmNlIHRoZSB0cmFuc2ZlciBlbmRzLjwvbGk+Cis8bGk+RHVwbGljYXRlIHRoZSB0ZXN0IGNvbmRpdGlvbiBhZnRlciB0aW1lb3V0IGRldGVjdGlvbiB0byBhdm9pZCBmYWxzZSB0aW1lb3V0IGRldGVjdGlvbi48L2xpPgorPC91bD48L2xpPgorPGxpPjxzdHJvbmc+SEFML0xMIFVTQjwvc3Ryb25nPiBkcml2ZXIKKzx1bD4KKzxsaT5QQ0Q6IGFkZCBoYW5kbGluZyBvZiBVU0IgT1VUIEVuZHBvaW50IGRpc2FibGUgaW50ZXJydXB0LjwvbGk+Cis8bGk+UENEOiBmaXggZGV2aWNlIElOIGVuZHBvaW50IGlzb2MgaW5jb21wbGV0ZSB0cmFuc2ZlciBpbnRlcnJ1cHQgaGFuZGxpbmcuPC9saT4KKzxsaT5QQ0Q6IGZpeCBVU0IgZGV2aWNlIElzb2MgT1VUIEVuZHBvaW50IGluY29tcGxldGUgdHJhbnNmZXIgaW50ZXJydXB0IGhhbmRsaW5nLjwvbGk+Cis8bGk+SENEOiBmaXggaGFuZGxpbmcgb2YgT0RERlJNIGJpdCBpbiBPVEdfSENDSEFSeCBmb3IgSXNvY2hyb25vdXMgSU4gdHJhbnNhY3Rpb25zLjwvbGk+Cis8bGk+UENEOiBhZGRlZCBmaXggdG8gY29ycmVjdCByZWNlaXZlZCB0cmFuc2ZlciBsZW5ndGggd2l0aCBVU0IgRE1BIGFjdGl2YXRlZC48L2xpPgorPGxpPkZpeCBhZGRlZCB0byBVU0JfQ2xlYXJJbnRlcnJ1cHRzKCkgYW5kIFVTQl9IQ19IYWx0KCkgQVBJcy48L2xpPgorPGxpPlJlbW92ZSB1c2VsZXNzIHNvZnR3YXJlIHNldHRpbmcgdG8gc2V0dXAgdGhlIGZyYW1lIGludGVydmFsIGF0IDgwJS48L2xpPgorPGxpPkFkZGluZyBzdXBwb3J0IG9mIGh1YiBzcGxpdCB0cmFuc2FjdGlvbnMuPC9saT4KKzwvdWw+PC9saT4KKzwvdWw+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iY29sbGFwc2UiPgorPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iY29sbGFwc2Utc2VjdGlvbjFfMl83IiBhcmlhLWhpZGRlbj0idHJ1ZSI+IDxsYWJlbCBmb3I9ImNvbGxhcHNlLXNlY3Rpb24xXzJfNyIgYXJpYS1oaWRkZW49InRydWUiPjxzdHJvbmc+VjEuMi43IC8gMjEtTWF5LTIwMjE8L3N0cm9uZz48L2xhYmVsPgorPGRpdj4KKzxoMiBpZD0ibWFpbi1jaGFuZ2VzLTEiPk1haW4gQ2hhbmdlczwvaDI+Cis8dWw+Cis8bGk+R2VuZXJhbCB1cGRhdGVzIHRvIGZpeCBrbm93biBkZWZlY3RzLjwvbGk+Cis8L3VsPgorPGgyIGlkPSJjb250ZW50cy0xIj5Db250ZW50czwvaDI+Cis8dWw+CiA8bGk+PHN0cm9uZz5IQUwvTEwgQURDPC9zdHJvbmc+IGRyaXZlcgogPHVsPgogPGxpPlVwZGF0ZSB0aW1lb3V0IG1lY2hhbmlzbSB0byBhdm9pZCBmYWxzZSB0aW1lb3V0IGRldGVjdGlvbiBpbiBjYXNlIG9mIHByZWVtcHRpb24uPC9saT4KKzxsaT5VcGRhdGUgSEFMIEFEQyBkcml2ZXIgdG8gYWRkIGluY2x1ZGUgb2YgdGhlIExMIEFEQyBkcml2ZXIuPC9saT4KIDxsaT5VcGRhdGUgTExfQURDX0RlSW5pdCgpIEFQSSB0byBjbGVhciBtaXNzaW5nIFNRUjMgcmVnaXN0ZXIuPC9saT4KIDwvdWw+PC9saT4KIDxsaT48c3Ryb25nPkhBTCBDQU48L3N0cm9uZz4gZHJpdmVyCkBAIC0xMzksNyArMjgzLDYgQEAKIDxsaT5VcGRhdGUgSEFMX0kyQ19NYXN0ZXJfVHJhbnNtaXRfSVQoKSwgSEFMX0kyQ19NYXN0ZXJfUmVjZWl2ZV9JVCgpLCBIQUxfSTJDX01hc3Rlcl9UcmFuc21pdF9ETUEoKSBhbmQgSEFMX0kyQ19NYXN0ZXJfUmVjZWl2ZV9ETUEoKSBBUElzIHRvIHVubG9jayB0aGUgSTJDIHBlcmlwaGVyYWwgYmVmb3JlIGdlbmVyYXRpbmcgdGhlIHN0YXJ0LjwvbGk+CiA8L3VsPjwvbGk+CiA8bGk+VXBkYXRlIHRvIHVzZSB0aGUgcmlnaHQgbWFjcm8gdG8gY2xlYXIgSTJDIEFERFIgZmxhZyBpbnNpZGUgSTJDX1NsYXZlX0FERFIoKSBBUEkgYXMgaXTigJlzIGluZGljYXRlZCBpbiB0aGUgcmVmZXJlbmNlIG1hbnVhbC48L2xpPgotPGxpPlVwZGF0ZSBIQUxfSTJDX0VWX0lSUUhhbmRsZXIoKSBhbmQgSTJDX01hc3RlclRyYW5zbWl0X0JURigpIEFQSXMgdG8gZml4IGFuIGlzc3VlIHdoZXJlIHRoZSB0cmFuc2ZlciBvZiB0aGUgZmlyc3QgZmV3IGJ5dGVzIHRvIGFuIEkyQyBtZW1vcnkgZmFpbHMuPC9saT4KIDwvdWw+PC9saT4KIDxsaT48c3Ryb25nPkhBTCBSTkc8L3N0cm9uZz4gZHJpdmVyCiA8dWw+CkBAIC0xNzIsMTEgKzMxNSwxMSBAQAogPGRpdiBjbGFzcz0iY29sbGFwc2UiPgogPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iY29sbGFwc2Utc2VjdGlvbjEzIiBhcmlhLWhpZGRlbj0idHJ1ZSI+IDxsYWJlbCBmb3I9ImNvbGxhcHNlLXNlY3Rpb24xMyIgYXJpYS1oaWRkZW49InRydWUiPjxzdHJvbmc+VjEuMi42IC8gMjItT2N0b2Jlci0yMDIwPC9zdHJvbmc+PC9sYWJlbD4KIDxkaXY+Ci08aDIgaWQ9Im1haW4tY2hhbmdlcy0xIj5NYWluIENoYW5nZXM8L2gyPgorPGgyIGlkPSJtYWluLWNoYW5nZXMtMiI+TWFpbiBDaGFuZ2VzPC9oMj4KIDx1bD4KIDxsaT5HZW5lcmFsIHVwZGF0ZXMgdG8gZml4IGtub3duIGRlZmVjdHMuPC9saT4KIDwvdWw+Ci08aDIgaWQ9ImNvbnRlbnRzLTEiPkNvbnRlbnRzPC9oMj4KKzxoMiBpZD0iY29udGVudHMtMiI+Q29udGVudHM8L2gyPgogPHVsPgogPGxpPjxzdHJvbmc+SEFML0xMIEkyQzwvc3Ryb25nPiBkcml2ZXIKIDx1bD4KQEAgLTE5MSw3ICszMzQsNyBAQAogPGRpdiBjbGFzcz0iY29sbGFwc2UiPgogPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iY29sbGFwc2Utc2VjdGlvbjEyIiBhcmlhLWhpZGRlbj0idHJ1ZSI+IDxsYWJlbCBmb3I9ImNvbGxhcHNlLXNlY3Rpb24xMiIgYXJpYS1oaWRkZW49InRydWUiPjxzdHJvbmc+VjEuMi41IC8gMDktU2VwdGVtYmVyLTIwMjA8L3N0cm9uZz48L2xhYmVsPgogPGRpdj4KLTxoMiBpZD0ibWFpbi1jaGFuZ2VzLTIiPk1haW4gQ2hhbmdlczwvaDI+Cis8aDIgaWQ9Im1haW4tY2hhbmdlcy0zIj5NYWluIENoYW5nZXM8L2gyPgogPHVsPgogPGxpPkdlbmVyYWwgdXBkYXRlcyB0byBmaXgga25vd24gZGVmZWN0cyBhbmQgZW5oYW5jZW1lbnRzIGltcGxlbWVudGF0aW9uLjwvbGk+CiA8bGk+PHN0cm9uZz5IQUw8L3N0cm9uZz4gZHJpdmVyCkBAIC00NTMsNyArNTk2LDcgQEAKIDxkaXYgY2xhc3M9ImNvbGxhcHNlIj4KIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb24xMSIgYXJpYS1oaWRkZW49InRydWUiPiA8bGFiZWwgZm9yPSJjb2xsYXBzZS1zZWN0aW9uMTEiIGFyaWEtaGlkZGVuPSJ0cnVlIj48c3Ryb25nPlYxLjIuNCAvIDMxLURlY2VtYmVyLTIwMTk8L3N0cm9uZz48L2xhYmVsPgogPGRpdj4KLTxoMiBpZD0ibWFpbi1jaGFuZ2VzLTMiPk1haW4gQ2hhbmdlczwvaDI+Cis8aDIgaWQ9Im1haW4tY2hhbmdlcy00Ij5NYWluIENoYW5nZXM8L2gyPgogPHVsPgogPGxpPkdlbmVyYWwgdXBkYXRlcyB0byBmaXgga25vd24gZGVmZWN0cyBhbmQgZW5oYW5jZW1lbnRzIGltcGxlbWVudGF0aW9uPC9saT4KIDxsaT48c3Ryb25nPkhBTC9MTCBHUElPPC9zdHJvbmc+IHVwZGF0ZQpAQCAtNTE5LDcgKzY2Miw3IEBACiA8ZGl2IGNsYXNzPSJjb2xsYXBzZSI+CiA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJjb2xsYXBzZS1zZWN0aW9uMTAiIGFyaWEtaGlkZGVuPSJ0cnVlIj4gPGxhYmVsIGZvcj0iY29sbGFwc2Utc2VjdGlvbjEwIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHN0cm9uZz5WMS4yLjMgLyAyNi1KdW5lLTIwMTk8L3N0cm9uZz48L2xhYmVsPgogPGRpdj4KLTxoMiBpZD0ibWFpbi1jaGFuZ2VzLTQiPk1haW4gQ2hhbmdlczwvaDI+Cis8aDIgaWQ9Im1haW4tY2hhbmdlcy01Ij5NYWluIENoYW5nZXM8L2gyPgogPHVsPgogPGxpPkdlbmVyYWwgdXBkYXRlcyB0byBmaXgga25vd24gZGVmZWN0cyBhbmQgZW5oYW5jZW1lbnRzIGltcGxlbWVudGF0aW9uPC9saT4KIDxsaT5IQUwgZHJpdmVycyBjbGVhbiB1cDogcmVtb3ZlIGRvdWJsZSBjYXN0aW5nIOKAmHVpbnQzMl904oCZIGFuZCDigJhV4oCZPC9saT4KQEAgLTg4Miw3ICsxMDI1LDcgQEAKIDxkaXYgY2xhc3M9ImNvbGxhcHNlIj4KIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb245IiBhcmlhLWhpZGRlbj0idHJ1ZSI+IDxsYWJlbCBmb3I9ImNvbGxhcHNlLXNlY3Rpb245IiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHN0cm9uZz5WMS4yLjIgLyAyOS1TZXB0ZW1iZXItMjAxNzwvc3Ryb25nPjwvbGFiZWw+CiA8ZGl2PgotPGgyIGlkPSJtYWluLWNoYW5nZXMtNSI+TWFpbiBDaGFuZ2VzPC9oMj4KKzxoMiBpZD0ibWFpbi1jaGFuZ2VzLTYiPk1haW4gQ2hhbmdlczwvaDI+CiA8dWw+CiA8bGk+R2VuZXJhbCB1cGRhdGVzIHRvIGZpeCBrbm93biBkZWZlY3RzIGFuZCBlbmhhbmNlbWVudHMgaW1wbGVtZW50YXRpb248L2xpPgogPGxpPkZpeCBjb21waWxhdGlvbiB3YXJuaW5nIHdpdGggR0NDIGNvbXBpbGVyPC9saT4KQEAgLTk0OCw3ICsxMDkxLDcgQEAKIDxkaXYgY2xhc3M9ImNvbGxhcHNlIj4KIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb244IiBhcmlhLWhpZGRlbj0idHJ1ZSI+IDxsYWJlbCBmb3I9ImNvbGxhcHNlLXNlY3Rpb244IiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHN0cm9uZz5WMS4yLjEgLyAxNC1BcHJpbC0yMDE3PC9zdHJvbmc+PC9sYWJlbD4KIDxkaXY+Ci08aDIgaWQ9Im1haW4tY2hhbmdlcy02Ij5NYWluIENoYW5nZXM8L2gyPgorPGgyIGlkPSJtYWluLWNoYW5nZXMtNyI+TWFpbiBDaGFuZ2VzPC9oMj4KIDx1bD4KIDxsaT5HZW5lcmFsIHVwZGF0ZXMgdG8gZml4IGtub3duIGRlZmVjdHMgYW5kIGVuaGFuY2VtZW50cyBpbXBsZW1lbnRhdGlvbjwvbGk+CiA8bGk+PHN0cm9uZz5IQUwgQ09ORiBUZW1wbGF0ZTwvc3Ryb25nPiB1cGRhdGUKQEAgLTk2OSw3ICsxMTEyLDcgQEAKIDxkaXYgY2xhc3M9ImNvbGxhcHNlIj4KIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb243IiBhcmlhLWhpZGRlbj0idHJ1ZSI+IDxsYWJlbCBmb3I9ImNvbGxhcHNlLXNlY3Rpb243IiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHN0cm9uZz5WMS4yLjAgLyAxNy1NYXJjaC0yMDE3PC9zdHJvbmc+PC9sYWJlbD4KIDxkaXY+Ci08aDIgaWQ9Im1haW4tY2hhbmdlcy03Ij5NYWluIENoYW5nZXM8L2gyPgorPGgyIGlkPSJtYWluLWNoYW5nZXMtOCI+TWFpbiBDaGFuZ2VzPC9oMj4KIDx1bD4KIDxsaT48c3Ryb25nPkFkZCBMb3cgTGF5ZXIgZHJpdmVycyBhbGxvd2luZyBwZXJmb3JtYW5jZSBhbmQgZm9vdHByaW50IG9wdGltaXphdGlvbjwvc3Ryb25nPgogPHVsPgpAQCAtMTA4Nyw3ICsxMjMwLDcgQEAKIDxkaXYgY2xhc3M9ImNvbGxhcHNlIj4KIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb242IiBhcmlhLWhpZGRlbj0idHJ1ZSI+IDxsYWJlbCBmb3I9ImNvbGxhcHNlLXNlY3Rpb242IiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHN0cm9uZz5WMS4xLjMgLyAyOS1KdW5lLTIwMTY8L3N0cm9uZz48L2xhYmVsPgogPGRpdj4KLTxoMiBpZD0ibWFpbi1jaGFuZ2VzLTgiPk1haW4gQ2hhbmdlczwvaDI+Cis8aDIgaWQ9Im1haW4tY2hhbmdlcy05Ij5NYWluIENoYW5nZXM8L2gyPgogPHVsPgogPGxpPkdlbmVyYWwgdXBkYXRlcyB0byBmaXgga25vd24gZGVmZWN0cyBhbmQgZW5oYW5jZW1lbnRzIGltcGxlbWVudGF0aW9uPC9saT4KIDxsaT5FbmhhbmNlIEhBTCBkZWxheSBhbmQgdGltZSBiYXNlIGltcGxlbWVudGF0aW9uOgpAQCAtMTQ0MSw3ICsxNTg0LDcgQEAKIDxkaXYgY2xhc3M9ImNvbGxhcHNlIj4KIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb241IiBhcmlhLWhpZGRlbj0idHJ1ZSI+IDxsYWJlbCBmb3I9ImNvbGxhcHNlLXNlY3Rpb241IiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHN0cm9uZz5WMS4xLjIgLyAxMS1EZWNlbWJlci0yMDE1PC9zdHJvbmc+PC9sYWJlbD4KIDxkaXY+Ci08aDIgaWQ9Im1haW4tY2hhbmdlcy05Ij5NYWluIENoYW5nZXM8L2gyPgorPGgyIGlkPSJtYWluLWNoYW5nZXMtMTAiPk1haW4gQ2hhbmdlczwvaDI+CiA8dWw+CiA8bGk+PHN0cm9uZz5IQUwgUkNDPC9zdHJvbmc+IHVwZGF0ZQogPHVsPgpAQCAtMTQ1Nyw3ICsxNjAwLDcgQEAKIDxkaXYgY2xhc3M9ImNvbGxhcHNlIj4KIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb240IiBhcmlhLWhpZGRlbj0idHJ1ZSI+IDxsYWJlbCBmb3I9ImNvbGxhcHNlLXNlY3Rpb240IiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHN0cm9uZz5WMS4xLjEgLyAyMC1Ob3ZlbWJlci0yMDE1PC9zdHJvbmc+PC9sYWJlbD4KIDxkaXY+Ci08aDIgaWQ9Im1haW4tY2hhbmdlcy0xMCI+TWFpbiBDaGFuZ2VzPC9oMj4KKzxoMiBpZD0ibWFpbi1jaGFuZ2VzLTExIj5NYWluIENoYW5nZXM8L2gyPgogPHVsPgogPGxpPkdlbmVyYWwgdXBkYXRlcyB0byBmaXgga25vd24gZGVmZWN0cyBhbmQgZW5oYW5jZW1lbnRzIGltcGxlbWVudGF0aW9uPC9saT4KIDxsaT48c3Ryb25nPk9uZSBjaGFuZ2UgZG9uZSBvbiB0aGUgSEFMIENSWVAgcmVxdWlyZXMgYW4gdXBkYXRlIG9uIHRoZSBhcHBsaWNhdGlvbiBjb2RlIGJhc2VkIG9uIEhBTCBWMS4xLjA8L3N0cm9uZz4KQEAgLTE1MjAsNyArMTY2Myw3IEBACiA8ZGl2IGNsYXNzPSJjb2xsYXBzZSI+CiA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJjb2xsYXBzZS1zZWN0aW9uMyIgYXJpYS1oaWRkZW49InRydWUiPiA8bGFiZWwgZm9yPSJjb2xsYXBzZS1zZWN0aW9uMyIgYXJpYS1oaWRkZW49InRydWUiPjxzdHJvbmc+VjEuMS4wIC8gMDktT2N0b2Jlci0yMDE1PC9zdHJvbmc+PC9sYWJlbD4KIDxkaXY+Ci08aDIgaWQ9Im1haW4tY2hhbmdlcy0xMSI+TWFpbiBDaGFuZ2VzPC9oMj4KKzxoMiBpZD0ibWFpbi1jaGFuZ2VzLTEyIj5NYWluIENoYW5nZXM8L2gyPgogPHVsPgogPGxpPjxzdHJvbmc+TWFpbnRlbmFuY2UgcmVsZWFzZSB0byBmaXgga25vd24gZGVmZWN0cyBhbmQgZW5oYW5jZW1lbnRzIGltcGxlbWVudGF0aW9uPC9zdHJvbmc+PC9saT4KIDxsaT48c3Ryb25nPk1hY3JvcyBhbmQgbGl0ZXJhbHMgcmVuYW1pbmcgdG8gZW5zdXJlIGNvbXBhdGlibGVzIGFjcm9zcyBTVE0zMiBzZXJpZXM8L3N0cm9uZz4sIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgbWFpbnRhaW5lZCB0aGFua3MgdG8gbmV3IGFkZGVkIGZpbGUgc3RtMzJfaGFsX2xlZ2FjeS5oIHVuZGVyIC9JbmMvTGVnYWN5PC9saT4KQEAgLTE3NTgsNyArMTkwMSw3IEBACiA8bGk+UFZEIG1hY3JvczoKIDx1bD4KIDxsaT5SZW1vdmUgdGhlIDxzdHJvbmc+RVhUSUxJTkU8L3N0cm9uZz4gcGFyYW1ldGVyPC9saT4KLTxsaT5VcGRhdGUgdG8gdXNlIHByZWZpeCAiX19IQUxfUFdSX1BWRF8iIGluc3RlYWQgb2YgcHJlZml4ICJfX0hBTF9QVkQiPC9saT4KKzxsaT5VcGRhdGUgdG8gdXNlIHByZWZpeCAmcXVvdDtfX0hBTF9QV1JfUFZEXyZxdW90OyBpbnN0ZWFkIG9mIHByZWZpeCAmcXVvdDtfX0hBTF9QVkQmcXVvdDs8L2xpPgogPC91bD48L2xpPgogPGxpPlJlbmFtZSBIQUxfUFdSX1BWRENvbmZpZygpIGZ1bmN0aW9uIGJ5IEhBTF9QV1JfQ29uZmlnUFZEKCk8L2xpPgogPC91bD48L2xpPgpAQCAtMTkxMiw3ICsyMDU1LDcgQEAKIDxsaT5JbiBzdG0zMmYyeHhfaXQuYyBmaWxlLCBVQVNSVHhfSVJRSGFuZGxlcigpIGZ1bmN0aW9uOiBhZGQgYSBjYWxsIHRvIEhBTF9JUkRBX0lSUUhhbmRsZXIoKSBmdW5jdGlvbjwvbGk+CiA8L3VsPjwvbGk+CiA8bGk+SVQgdHJhbnNtaXQgcHJvY2VzczsgdGhlIGNvZGUgaGFzIGJlZW4gdXBkYXRlZCB0byBhdm9pZCB3YWl0aW5nIG9uIFRDIGZsYWcgdW5kZXIgSVJEQSBJU1IsIElyREEgVEMgaW50ZXJydXB0IGlzIHVzZWQgaW5zdGVhZC4gTm8gaW1wYWN0IG9uIHVzZXIgYXBwbGljYXRpb248L2xpPgotPGxpPlJlbmFtZSBNYWNyb3M6IGFkZCBwcmVmaXggIl9fSEFMIgorPGxpPlJlbmFtZSBNYWNyb3M6IGFkZCBwcmVmaXggJnF1b3Q7X19IQUwmcXVvdDsKIDx1bD4KIDxsaT5fX0lSREFfRU5BQkxFKCkgYnkgX19IQUxfSVJEQV9FTkFCTEUoKTwvbGk+CiA8bGk+X19JUkRBX0RJU0FCTEUoKSBieSBfX0hBTF9JUkRBX0RJU0FCTEUoKTwvbGk+CkBAIC0yMDk2LDcgKzIyMzksNyBAQAogPGxpPjx1bD4KIDxsaT5SZWFkaW5nIFJUQyBjdXJyZW50IHRpbWUgbG9ja3MgdGhlIHZhbHVlcyBpbiBjYWxlbmRhciBzaGFkb3cgcmVnaXN0ZXJzIHVudGlsIEN1cnJlbnQgZGF0ZSBpcyByZWFkLjwvbGk+CiA8L3VsPjwvbGk+Ci08bGk+UmVuYW1lIGxpdGVyYWxzOiBhZGQgcHJlZml4ICJfX0hBTCIKKzxsaT5SZW5hbWUgbGl0ZXJhbHM6IGFkZCBwcmVmaXggJnF1b3Q7X19IQUwmcXVvdDsKIDx1bD4KIDxsaT5GT1JNQVRfQklOIGJ5IFJUQ19GT1JNQVRfQklOPC9saT4KIDxsaT5GT1JNQVRfQkNEIGJ5IFJUQ19GT1JNQVRfQkNEPC9saT4KQEAgLTIxNjMsNyArMjMwNiw3IEBACiA8bGk+SW4gc3RtMzJmMnh4X2l0LmMgZmlsZSwgVUFTUlR4X0lSUUhhbmRsZXIoKSBmdW5jdGlvbjogYWRkIGEgY2FsbCB0byBIQUxfU01BUlRDQVJEX0lSUUhhbmRsZXIoKSBmdW5jdGlvbjwvbGk+CiA8L3VsPjwvbGk+CiA8bGk+SVQgdHJhbnNtaXQgcHJvY2VzczsgdGhlIGNvZGUgaGFzIGJlZW4gdXBkYXRlZCB0byBhdm9pZCB3YWl0aW5nIG9uIFRDIGZsYWcgdW5kZXIgU01BUlRDQVJEIElTUiwgU01BUlRDQVJEIFRDIGludGVycnVwdCBpcyB1c2VkIGluc3RlYWQuIE5vIGltcGFjdCBvbiB1c2VyIGFwcGxpY2F0aW9uPC9saT4KLTxsaT5SZW5hbWUgbWFjcm9zOiBhZGQgcHJlZml4ICJfX0hBTCIKKzxsaT5SZW5hbWUgbWFjcm9zOiBhZGQgcHJlZml4ICZxdW90O19fSEFMJnF1b3Q7CiA8dWw+CiA8bGk+X19TTUFSVENBUkRfRU5BQkxFKCkgYnkgX19IQUxfU01BUlRDQVJEX0VOQUJMRSgpPC9saT4KIDxsaT5fX1NNQVJUQ0FSRF9ESVNBQkxFKCkgYnkgX19IQUxfU01BUlRDQVJEX0RJU0FCTEUoKTwvbGk+CkBAIC0yMzUwLDcgKzI0OTMsNyBAQAogPGRpdiBjbGFzcz0iY29sbGFwc2UiPgogPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iY29sbGFwc2Utc2VjdGlvbjIiIGFyaWEtaGlkZGVuPSJ0cnVlIj4gPGxhYmVsIGZvcj0iY29sbGFwc2Utc2VjdGlvbjIiIGFyaWEtaGlkZGVuPSJ0cnVlIj48c3Ryb25nPlYxLjAuMSAvIDI1LU1hcmNoLTIwMTQ8L3N0cm9uZz48L2xhYmVsPgogPGRpdj4KLTxoMiBpZD0ibWFpbi1jaGFuZ2VzLTEyIj5NYWluIENoYW5nZXM8L2gyPgorPGgyIGlkPSJtYWluLWNoYW5nZXMtMTMiPk1haW4gQ2hhbmdlczwvaDI+CiA8dWw+CiA8bGk+UGF0Y2ggcmVsZWFzZSA6IG1vdmVkIG1hY3JvcyByZWxhdGVkIHRvIFJORyBmcm9tIGhhbF9yY2NfZXguaCB0byBoYWxfcmNjLmggYXMgUk5HIGlzIHByZXNlbnQgaW4gYWxsIHZlcnNpb25zIG9mIHRoZSBTVE0zMkYyPC9saT4KIDwvdWw+CkBAIC0yMzU5LDcgKzI1MDIsNyBAQAogPGRpdiBjbGFzcz0iY29sbGFwc2UiPgogPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iY29sbGFwc2Utc2VjdGlvbjEiIGFyaWEtaGlkZGVuPSJ0cnVlIj4gPGxhYmVsIGZvcj0iY29sbGFwc2Utc2VjdGlvbjEiIGFyaWEtaGlkZGVuPSJ0cnVlIj48c3Ryb25nPlYxLjAuMCAvIDA3LU1hcmNoLTIwMTQ8L3N0cm9uZz48L2xhYmVsPgogPGRpdj4KLTxoMiBpZD0ibWFpbi1jaGFuZ2VzLTEzIj5NYWluIENoYW5nZXM8L2gyPgorPGgyIGlkPSJtYWluLWNoYW5nZXMtMTQiPk1haW4gQ2hhbmdlczwvaDI+CiA8dWw+CiA8bGk+Rmlyc3Qgb2ZmaWNpYWwgcmVsZWFzZTwvbGk+CiA8L3VsPgpkaWZmIC0tZ2l0IGEvU3JjL0xlZ2FjeS9zdG0zMmYyeHhfaGFsX2Nhbi5jIGIvU3JjL0xlZ2FjeS9zdG0zMmYyeHhfaGFsX2Nhbi5jCmluZGV4IDgyYjVjYzIuLjI0YzhjOGIgMTAwNjQ0Ci0tLSBhL1NyYy9MZWdhY3kvc3RtMzJmMnh4X2hhbF9jYW4uYworKysgYi9TcmMvTGVnYWN5L3N0bTMyZjJ4eF9oYWxfY2FuLmMKQEAgLTEyLDcgKzEyLDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiBDb3B5cmlnaHQgKGMpIDIwMTYgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUKQEAgLTg4LDYgKzg4LDcgQEAKICAgICAgIChAKSBZb3UgY2FuIHJlZmVyIHRvIHRoZSBDQU4gTGVnYWN5IEhBTCBkcml2ZXIgaGVhZGVyIGZpbGUgZm9yIG1vcmUgdXNlZnVsIG1hY3JvcwogICAgICAgICAgICAgICAgIAogICBAZW5kdmVyYmF0aW0KKyAgICAgICAgICAgCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqLwogCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmMnh4X2hhbC5jIGIvU3JjL3N0bTMyZjJ4eF9oYWwuYwppbmRleCAyMjY1MTE4Li5iM2I5M2ZlIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmMnh4X2hhbC5jCisrKyBiL1NyYy9zdG0zMmYyeHhfaGFsLmMKQEAgLTUwLDExICs1MCwxMSBAQAogICAqIEB7CiAgICovCiAvKioKLSAgKiBAYnJpZWYgU1RNMzJGMnh4IEhBTCBEcml2ZXIgdmVyc2lvbiBudW1iZXIgVjEuMi43CisgICogQGJyaWVmIFNUTTMyRjJ4eCBIQUwgRHJpdmVyIHZlcnNpb24gbnVtYmVyCiAgICovCiAjZGVmaW5lIF9fU1RNMzJGMnh4X0hBTF9WRVJTSU9OX01BSU4gICAweDAxVSAvKiE8IFszMToyNF0gbWFpbiB2ZXJzaW9uICovCiAjZGVmaW5lIF9fU1RNMzJGMnh4X0hBTF9WRVJTSU9OX1NVQjEgICAweDAyVSAvKiE8IFsyMzoxNl0gc3ViMSB2ZXJzaW9uICovCi0jZGVmaW5lIF9fU1RNMzJGMnh4X0hBTF9WRVJTSU9OX1NVQjIgICAweDA3VSAvKiE8IFsxNTo4XSAgc3ViMiB2ZXJzaW9uICovCisjZGVmaW5lIF9fU1RNMzJGMnh4X0hBTF9WRVJTSU9OX1NVQjIgICAweDA4VSAvKiE8IFsxNTo4XSAgc3ViMiB2ZXJzaW9uICovCiAjZGVmaW5lIF9fU1RNMzJGMnh4X0hBTF9WRVJTSU9OX1JDICAgICAweDAwVSAvKiE8IFs3OjBdICByZWxlYXNlIGNhbmRpZGF0ZSAqLyAKICNkZWZpbmUgX19TVE0zMkYyeHhfSEFMX1ZFUlNJT04gICAgICAgICAoKF9fU1RNMzJGMnh4X0hBTF9WRVJTSU9OX01BSU4gPDwgMjRVKVwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8KF9fU1RNMzJGMnh4X0hBTF9WRVJTSU9OX1NVQjEgPDwgMTZVKVwKQEAgLTU3NCwzICs1NzQsNSBAQAogLyoqCiAgICogQH0KICAgKi8KKworCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmMnh4X2hhbF9hZGMuYyBiL1NyYy9zdG0zMmYyeHhfaGFsX2FkYy5jCmluZGV4IGNlNTA1YjYuLjk2NWM4MDUgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYyeHhfaGFsX2FkYy5jCisrKyBiL1NyYy9zdG0zMmYyeHhfaGFsX2FkYy5jCkBAIC01LDkgKzUsOSBAQAogICAqIEBicmllZiAgIFRoaXMgZmlsZSBwcm92aWRlcyBmaXJtd2FyZSBmdW5jdGlvbnMgdG8gbWFuYWdlIHRoZSBmb2xsb3dpbmcgCiAgICogICAgICAgICAgZnVuY3Rpb25hbGl0aWVzIG9mIHRoZSBBbmFsb2cgdG8gRGlnaXRhbCBDb252ZXJ0ZXIgKEFEQykgcGVyaXBoZXJhbDoKICAgKiAgICAgICAgICAgKyBJbml0aWFsaXphdGlvbiBhbmQgZGUtaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zCi0gICogICAgICAgICAgICsgSU8gb3BlcmF0aW9uIGZ1bmN0aW9ucwotICAqICAgICAgICAgICArIFN0YXRlIGFuZCBlcnJvcnMgZnVuY3Rpb25zCi0gICogICAgICAgICAKKyAgKiAgICAgICAgICAgKyBQZXJpcGhlcmFsIENvbnRyb2wgZnVuY3Rpb25zCisgICogICAgICAgICAgICsgUGVyaXBoZXJhbCBTdGF0ZSBmdW5jdGlvbnMKKyAgKgogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKQEAgLTE3NCwxMSArMTc0LDExIEBACiAKICAgICAgVGhlIGNvbXBpbGF0aW9uIGZsYWcgVVNFX0hBTF9BRENfUkVHSVNURVJfQ0FMTEJBQ0tTLCB3aGVuIHNldCB0byAxLAogICAgICBhbGxvd3MgdGhlIHVzZXIgdG8gY29uZmlndXJlIGR5bmFtaWNhbGx5IHRoZSBkcml2ZXIgY2FsbGJhY2tzLgotICAgICBVc2UgRnVuY3Rpb25zIEByZWYgSEFMX0FEQ19SZWdpc3RlckNhbGxiYWNrKCkKKyAgICAgVXNlIEZ1bmN0aW9ucyBIQUxfQURDX1JlZ2lzdGVyQ2FsbGJhY2soKQogICAgICB0byByZWdpc3RlciBhbiBpbnRlcnJ1cHQgY2FsbGJhY2suCiAgICAgWy4uXQogCi0gICAgIEZ1bmN0aW9uIEByZWYgSEFMX0FEQ19SZWdpc3RlckNhbGxiYWNrKCkgYWxsb3dzIHRvIHJlZ2lzdGVyIGZvbGxvd2luZyBjYWxsYmFja3M6CisgICAgIEZ1bmN0aW9uIEhBTF9BRENfUmVnaXN0ZXJDYWxsYmFjaygpIGFsbG93cyB0byByZWdpc3RlciBmb2xsb3dpbmcgY2FsbGJhY2tzOgogICAgICAgICgrKSBDb252Q3BsdENhbGxiYWNrICAgICAgICAgICAgICAgOiBBREMgY29udmVyc2lvbiBjb21wbGV0ZSBjYWxsYmFjawogICAgICAgICgrKSBDb252SGFsZkNwbHRDYWxsYmFjayAgICAgICAgICAgOiBBREMgY29udmVyc2lvbiBETUEgaGFsZi10cmFuc2ZlciBjYWxsYmFjawogICAgICAgICgrKSBMZXZlbE91dE9mV2luZG93Q2FsbGJhY2sgICAgICAgOiBBREMgYW5hbG9nIHdhdGNoZG9nIDEgY2FsbGJhY2sKQEAgLTE5NCwxMSArMTk0LDExIEBACiAgICAgIGFuZCBhIHBvaW50ZXIgdG8gdGhlIHVzZXIgY2FsbGJhY2sgZnVuY3Rpb24uCiAgICAgWy4uXQogCi0gICAgIFVzZSBmdW5jdGlvbiBAcmVmIEhBTF9BRENfVW5SZWdpc3RlckNhbGxiYWNrIHRvIHJlc2V0IGEgY2FsbGJhY2sgdG8gdGhlIGRlZmF1bHQKKyAgICAgVXNlIGZ1bmN0aW9uIEhBTF9BRENfVW5SZWdpc3RlckNhbGxiYWNrIHRvIHJlc2V0IGEgY2FsbGJhY2sgdG8gdGhlIGRlZmF1bHQKICAgICAgd2VhayBmdW5jdGlvbi4KICAgICBbLi5dCiAKLSAgICAgQHJlZiBIQUxfQURDX1VuUmVnaXN0ZXJDYWxsYmFjayB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsCisgICAgIEhBTF9BRENfVW5SZWdpc3RlckNhbGxiYWNrIHRha2VzIGFzIHBhcmFtZXRlcnMgdGhlIEhBTCBwZXJpcGhlcmFsIGhhbmRsZSwKICAgICAgYW5kIHRoZSBDYWxsYmFjayBJRC4KICAgICAgVGhpcyBmdW5jdGlvbiBhbGxvd3MgdG8gcmVzZXQgZm9sbG93aW5nIGNhbGxiYWNrczoKICAgICAgICAoKykgQ29udkNwbHRDYWxsYmFjayAgICAgICAgICAgICAgIDogQURDIGNvbnZlcnNpb24gY29tcGxldGUgY2FsbGJhY2sKQEAgLTIxNCwyNyArMjE0LDI3IEBACiAgICAgICAgKCspIE1zcERlSW5pdENhbGxiYWNrICAgICAgICAgICAgICA6IEFEQyBNc3AgRGVJbml0IGNhbGxiYWNrCiAgICAgIFsuLl0KIAotICAgICBCeSBkZWZhdWx0LCBhZnRlciB0aGUgQHJlZiBIQUxfQURDX0luaXQoKSBhbmQgd2hlbiB0aGUgc3RhdGUgaXMgQHJlZiBIQUxfQURDX1NUQVRFX1JFU0VUCisgICAgIEJ5IGRlZmF1bHQsIGFmdGVyIHRoZSBIQUxfQURDX0luaXQoKSBhbmQgd2hlbiB0aGUgc3RhdGUgaXMgSEFMX0FEQ19TVEFURV9SRVNFVAogICAgICBhbGwgY2FsbGJhY2tzIGFyZSBzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgd2VhayBmdW5jdGlvbnM6Ci0gICAgIGV4YW1wbGVzIEByZWYgSEFMX0FEQ19Db252Q3BsdENhbGxiYWNrKCksIEByZWYgSEFMX0FEQ19FcnJvckNhbGxiYWNrKCkuCisgICAgIGV4YW1wbGVzIEhBTF9BRENfQ29udkNwbHRDYWxsYmFjaygpLCBIQUxfQURDX0Vycm9yQ2FsbGJhY2soKS4KICAgICAgRXhjZXB0aW9uIGRvbmUgZm9yIE1zcEluaXQgYW5kIE1zcERlSW5pdCBmdW5jdGlvbnMgdGhhdCBhcmUKLSAgICAgcmVzZXQgdG8gdGhlIGxlZ2FjeSB3ZWFrIGZ1bmN0aW9ucyBpbiB0aGUgQHJlZiBIQUxfQURDX0luaXQoKS8gQHJlZiBIQUxfQURDX0RlSW5pdCgpIG9ubHkgd2hlbgorICAgICByZXNldCB0byB0aGUgbGVnYWN5IHdlYWsgZnVuY3Rpb25zIGluIHRoZSBIQUxfQURDX0luaXQoKS8gSEFMX0FEQ19EZUluaXQoKSBvbmx5IHdoZW4KICAgICAgdGhlc2UgY2FsbGJhY2tzIGFyZSBudWxsIChub3QgcmVnaXN0ZXJlZCBiZWZvcmVoYW5kKS4KICAgICBbLi5dCiAKLSAgICAgSWYgTXNwSW5pdCBvciBNc3BEZUluaXQgYXJlIG5vdCBudWxsLCB0aGUgQHJlZiBIQUxfQURDX0luaXQoKS8gQHJlZiBIQUxfQURDX0RlSW5pdCgpCisgICAgIElmIE1zcEluaXQgb3IgTXNwRGVJbml0IGFyZSBub3QgbnVsbCwgdGhlIEhBTF9BRENfSW5pdCgpLyBIQUxfQURDX0RlSW5pdCgpCiAgICAgIGtlZXAgYW5kIHVzZSB0aGUgdXNlciBNc3BJbml0L01zcERlSW5pdCBjYWxsYmFja3MgKHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCkgd2hhdGV2ZXIgdGhlIHN0YXRlLgogICAgICBbLi5dCiAKLSAgICAgQ2FsbGJhY2tzIGNhbiBiZSByZWdpc3RlcmVkL3VucmVnaXN0ZXJlZCBpbiBAcmVmIEhBTF9BRENfU1RBVEVfUkVBRFkgc3RhdGUgb25seS4KKyAgICAgQ2FsbGJhY2tzIGNhbiBiZSByZWdpc3RlcmVkL3VucmVnaXN0ZXJlZCBpbiBIQUxfQURDX1NUQVRFX1JFQURZIHN0YXRlIG9ubHkuCiAgICAgIEV4Y2VwdGlvbiBkb25lIE1zcEluaXQvTXNwRGVJbml0IGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSByZWdpc3RlcmVkL3VucmVnaXN0ZXJlZAotICAgICBpbiBAcmVmIEhBTF9BRENfU1RBVEVfUkVBRFkgb3IgQHJlZiBIQUxfQURDX1NUQVRFX1JFU0VUIHN0YXRlLAorICAgICBpbiBIQUxfQURDX1NUQVRFX1JFQURZIG9yIEhBTF9BRENfU1RBVEVfUkVTRVQgc3RhdGUsCiAgICAgIHRodXMgcmVnaXN0ZXJlZCAodXNlcikgTXNwSW5pdC9EZUluaXQgY2FsbGJhY2tzIGNhbiBiZSB1c2VkIGR1cmluZyB0aGUgSW5pdC9EZUluaXQuCiAgICAgWy4uXQogCiAgICAgIFRoZW4sIHRoZSB1c2VyIGZpcnN0IHJlZ2lzdGVycyB0aGUgTXNwSW5pdC9Nc3BEZUluaXQgdXNlciBjYWxsYmFja3MKLSAgICAgdXNpbmcgQHJlZiBIQUxfQURDX1JlZ2lzdGVyQ2FsbGJhY2soKSBiZWZvcmUgY2FsbGluZyBAcmVmIEhBTF9BRENfRGVJbml0KCkKLSAgICAgb3IgQHJlZiBIQUxfQURDX0luaXQoKSBmdW5jdGlvbi4KKyAgICAgdXNpbmcgSEFMX0FEQ19SZWdpc3RlckNhbGxiYWNrKCkgYmVmb3JlIGNhbGxpbmcgSEFMX0FEQ19EZUluaXQoKQorICAgICBvciBIQUxfQURDX0luaXQoKSBmdW5jdGlvbi4KICAgICAgWy4uXQogCiAgICAgIFdoZW4gdGhlIGNvbXBpbGF0aW9uIGZsYWcgVVNFX0hBTF9BRENfUkVHSVNURVJfQ0FMTEJBQ0tTIGlzIHNldCB0byAwIG9yCkBAIC0yMDIyLDMgKzIwMjIsNCBAQAogLyoqCiAgICogQH0KICAgKi8gCisKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmYyeHhfaGFsX2FkY19leC5jIGIvU3JjL3N0bTMyZjJ4eF9oYWxfYWRjX2V4LmMKaW5kZXggMDgyNGEzZi4uN2UzMDE3OSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjJ4eF9oYWxfYWRjX2V4LmMKKysrIGIvU3JjL3N0bTMyZjJ4eF9oYWxfYWRjX2V4LmMKQEAgLTc5LDYgKzc5LDcgQEAKICAgICAgICAgICAgb2YgZGF0YSB0byBiZSB0cmFuc2ZlcnJlZCBhdCBlYWNoIGVuZCBvZiBjb252ZXJzaW9uCiAgICAgICAgKCspIFJlYWQgdGhlIEFEQ3MgY29udmVydGVkIHZhbHVlcyB1c2luZyB0aGUgSEFMX0FEQ0V4X011bHRpTW9kZUdldFZhbHVlKCkgZnVuY3Rpb24uCiAKKwogICBAZW5kdmVyYmF0aW0KICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICovCkBAIC0xMDY0LDQgKzEwNjUsNSBAQAogCiAvKioKICAgKiBAfQotICAqLyAKKyAgKi8KKwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjJ4eF9oYWxfY2FuLmMgYi9TcmMvc3RtMzJmMnh4X2hhbF9jYW4uYwppbmRleCA2M2E4N2YwLi5jNDNjODczIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmMnh4X2hhbF9jYW4uYworKysgYi9TcmMvc3RtMzJmMnh4X2hhbF9jYW4uYwpAQCAtMTQyLDkgKzE0Miw5IEBACiAKICAgVGhlIGNvbXBpbGF0aW9uIGRlZmluZSAgVVNFX0hBTF9DQU5fUkVHSVNURVJfQ0FMTEJBQ0tTIHdoZW4gc2V0IHRvIDEKICAgYWxsb3dzIHRoZSB1c2VyIHRvIGNvbmZpZ3VyZSBkeW5hbWljYWxseSB0aGUgZHJpdmVyIGNhbGxiYWNrcy4KLSAgVXNlIEZ1bmN0aW9uIEByZWYgSEFMX0NBTl9SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVnaXN0ZXIgYW4gaW50ZXJydXB0IGNhbGxiYWNrLgorICBVc2UgRnVuY3Rpb24gSEFMX0NBTl9SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVnaXN0ZXIgYW4gaW50ZXJydXB0IGNhbGxiYWNrLgogCi0gIEZ1bmN0aW9uIEByZWYgSEFMX0NBTl9SZWdpc3RlckNhbGxiYWNrKCkgYWxsb3dzIHRvIHJlZ2lzdGVyIGZvbGxvd2luZyBjYWxsYmFja3M6CisgIEZ1bmN0aW9uIEhBTF9DQU5fUmVnaXN0ZXJDYWxsYmFjaygpIGFsbG93cyB0byByZWdpc3RlciBmb2xsb3dpbmcgY2FsbGJhY2tzOgogICAgICgrKSBUeE1haWxib3gwQ29tcGxldGVDYWxsYmFjayAgIDogVHggTWFpbGJveCAwIENvbXBsZXRlIENhbGxiYWNrLgogICAgICgrKSBUeE1haWxib3gxQ29tcGxldGVDYWxsYmFjayAgIDogVHggTWFpbGJveCAxIENvbXBsZXRlIENhbGxiYWNrLgogICAgICgrKSBUeE1haWxib3gyQ29tcGxldGVDYWxsYmFjayAgIDogVHggTWFpbGJveCAyIENvbXBsZXRlIENhbGxiYWNrLgpAQCAtMTYzLDkgKzE2Myw5IEBACiAgIFRoaXMgZnVuY3Rpb24gdGFrZXMgYXMgcGFyYW1ldGVycyB0aGUgSEFMIHBlcmlwaGVyYWwgaGFuZGxlLCB0aGUgQ2FsbGJhY2sgSUQKICAgYW5kIGEgcG9pbnRlciB0byB0aGUgdXNlciBjYWxsYmFjayBmdW5jdGlvbi4KIAotICBVc2UgZnVuY3Rpb24gQHJlZiBIQUxfQ0FOX1VuUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlc2V0IGEgY2FsbGJhY2sgdG8gdGhlIGRlZmF1bHQKKyAgVXNlIGZ1bmN0aW9uIEhBTF9DQU5fVW5SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVzZXQgYSBjYWxsYmFjayB0byB0aGUgZGVmYXVsdAogICB3ZWFrIGZ1bmN0aW9uLgotICBAcmVmIEhBTF9DQU5fVW5SZWdpc3RlckNhbGxiYWNrIHRha2VzIGFzIHBhcmFtZXRlcnMgdGhlIEhBTCBwZXJpcGhlcmFsIGhhbmRsZSwKKyAgSEFMX0NBTl9VblJlZ2lzdGVyQ2FsbGJhY2sgdGFrZXMgYXMgcGFyYW1ldGVycyB0aGUgSEFMIHBlcmlwaGVyYWwgaGFuZGxlLAogICBhbmQgdGhlIENhbGxiYWNrIElELgogICBUaGlzIGZ1bmN0aW9uIGFsbG93cyB0byByZXNldCBmb2xsb3dpbmcgY2FsbGJhY2tzOgogICAgICgrKSBUeE1haWxib3gwQ29tcGxldGVDYWxsYmFjayAgIDogVHggTWFpbGJveCAwIENvbXBsZXRlIENhbGxiYWNrLgpAQCAtMTg0LDEzICsxODQsMTMgQEAKICAgICAoKykgTXNwSW5pdENhbGxiYWNrICAgICAgICAgICAgICA6IENBTiBNc3BJbml0LgogICAgICgrKSBNc3BEZUluaXRDYWxsYmFjayAgICAgICAgICAgIDogQ0FOIE1zcERlSW5pdC4KIAotICBCeSBkZWZhdWx0LCBhZnRlciB0aGUgQHJlZiBIQUxfQ0FOX0luaXQoKSBhbmQgd2hlbiB0aGUgc3RhdGUgaXMgSEFMX0NBTl9TVEFURV9SRVNFVCwKKyAgQnkgZGVmYXVsdCwgYWZ0ZXIgdGhlIEhBTF9DQU5fSW5pdCgpIGFuZCB3aGVuIHRoZSBzdGF0ZSBpcyBIQUxfQ0FOX1NUQVRFX1JFU0VULAogICBhbGwgY2FsbGJhY2tzIGFyZSBzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgd2VhayBmdW5jdGlvbnM6Ci0gIGV4YW1wbGUgQHJlZiBIQUxfQ0FOX0Vycm9yQ2FsbGJhY2soKS4KKyAgZXhhbXBsZSBIQUxfQ0FOX0Vycm9yQ2FsbGJhY2soKS4KICAgRXhjZXB0aW9uIGRvbmUgZm9yIE1zcEluaXQgYW5kIE1zcERlSW5pdCBmdW5jdGlvbnMgdGhhdCBhcmUKLSAgcmVzZXQgdG8gdGhlIGxlZ2FjeSB3ZWFrIGZ1bmN0aW9uIGluIHRoZSBAcmVmIEhBTF9DQU5fSW5pdCgpLyBAcmVmIEhBTF9DQU5fRGVJbml0KCkgb25seSB3aGVuCisgIHJlc2V0IHRvIHRoZSBsZWdhY3kgd2VhayBmdW5jdGlvbiBpbiB0aGUgSEFMX0NBTl9Jbml0KCkvIEhBTF9DQU5fRGVJbml0KCkgb25seSB3aGVuCiAgIHRoZXNlIGNhbGxiYWNrcyBhcmUgbnVsbCAobm90IHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCkuCi0gIGlmIG5vdCwgTXNwSW5pdCBvciBNc3BEZUluaXQgYXJlIG5vdCBudWxsLCB0aGUgQHJlZiBIQUxfQ0FOX0luaXQoKS8gQHJlZiBIQUxfQ0FOX0RlSW5pdCgpCisgIGlmIG5vdCwgTXNwSW5pdCBvciBNc3BEZUluaXQgYXJlIG5vdCBudWxsLCB0aGUgSEFMX0NBTl9Jbml0KCkvIEhBTF9DQU5fRGVJbml0KCkKICAga2VlcCBhbmQgdXNlIHRoZSB1c2VyIE1zcEluaXQvTXNwRGVJbml0IGNhbGxiYWNrcyAocmVnaXN0ZXJlZCBiZWZvcmVoYW5kKQogCiAgIENhbGxiYWNrcyBjYW4gYmUgcmVnaXN0ZXJlZC91bnJlZ2lzdGVyZWQgaW4gSEFMX0NBTl9TVEFURV9SRUFEWSBzdGF0ZSBvbmx5LgpAQCAtMTk4LDggKzE5OCw4IEBACiAgIGluIEhBTF9DQU5fU1RBVEVfUkVBRFkgb3IgSEFMX0NBTl9TVEFURV9SRVNFVCBzdGF0ZSwKICAgdGh1cyByZWdpc3RlcmVkICh1c2VyKSBNc3BJbml0L0RlSW5pdCBjYWxsYmFja3MgY2FuIGJlIHVzZWQgZHVyaW5nIHRoZSBJbml0L0RlSW5pdC4KICAgSW4gdGhhdCBjYXNlIGZpcnN0IHJlZ2lzdGVyIHRoZSBNc3BJbml0L01zcERlSW5pdCB1c2VyIGNhbGxiYWNrcwotICB1c2luZyBAcmVmIEhBTF9DQU5fUmVnaXN0ZXJDYWxsYmFjaygpIGJlZm9yZSBjYWxsaW5nIEByZWYgSEFMX0NBTl9EZUluaXQoKQotICBvciBAcmVmIEhBTF9DQU5fSW5pdCgpIGZ1bmN0aW9uLgorICB1c2luZyBIQUxfQ0FOX1JlZ2lzdGVyQ2FsbGJhY2soKSBiZWZvcmUgY2FsbGluZyBIQUxfQ0FOX0RlSW5pdCgpCisgIG9yIEhBTF9DQU5fSW5pdCgpIGZ1bmN0aW9uLgogCiAgIFdoZW4gVGhlIGNvbXBpbGF0aW9uIGRlZmluZSBVU0VfSEFMX0NBTl9SRUdJU1RFUl9DQUxMQkFDS1MgaXMgc2V0IHRvIDAgb3IKICAgbm90IGRlZmluZWQsIHRoZSBjYWxsYmFjayByZWdpc3RyYXRpb24gZmVhdHVyZSBpcyBub3QgYXZhaWxhYmxlIGFuZCBhbGwgY2FsbGJhY2tzCkBAIC02NzYsNyArNjc2LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBVbnJlZ2lzdGVyIGEgQ0FOIENhbGxCYWNrLgotICAqICAgICAgICAgQ0FOIGNhbGxhYmNrIGlzIHJlZGlyZWN0ZWQgdG8gdGhlIHdlYWsgcHJlZGVmaW5lZCBjYWxsYmFjaworICAqICAgICAgICAgQ0FOIGNhbGxiYWNrIGlzIHJlZGlyZWN0ZWQgdG8gdGhlIHdlYWsgcHJlZGVmaW5lZCBjYWxsYmFjawogICAqIEBwYXJhbSAgaGNhbiBwb2ludGVyIHRvIGEgQ0FOX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKICAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBDQU4gbW9kdWxlCiAgICogQHBhcmFtICBDYWxsYmFja0lEIElEIG9mIHRoZSBjYWxsYmFjayB0byBiZSB1bnJlZ2lzdGVyZWQKQEAgLTEyNTIsMTUgKzEyNTIsNiBAQAogICAgICAgLyogU2VsZWN0IGFuIGVtcHR5IHRyYW5zbWl0IG1haWxib3ggKi8KICAgICAgIHRyYW5zbWl0bWFpbGJveCA9ICh0c3IgJiBDQU5fVFNSX0NPREUpID4+IENBTl9UU1JfQ09ERV9Qb3M7CiAKLSAgICAgIC8qIENoZWNrIHRyYW5zbWl0IG1haWxib3ggdmFsdWUgKi8KLSAgICAgIGlmICh0cmFuc21pdG1haWxib3ggPiAyVSkKLSAgICAgIHsKLSAgICAgICAgLyogVXBkYXRlIGVycm9yIGNvZGUgKi8KLSAgICAgICAgaGNhbi0+RXJyb3JDb2RlIHw9IEhBTF9DQU5fRVJST1JfSU5URVJOQUw7Ci0KLSAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKLSAgICAgIH0KLQogICAgICAgLyogU3RvcmUgdGhlIFR4IG1haWxib3ggKi8KICAgICAgICpwVHhNYWlsYm94ID0gKHVpbnQzMl90KTEgPDwgdHJhbnNtaXRtYWlsYm94OwogCkBAIC0xNTMzLDcgKzE1MjQsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGhjYW4tPkluc3RhbmNlLT5zRklGT01haWxCb3hbUnhGaWZvXS5SSVIpID4+IENBTl9SSTBSX0VYSURfUG9zOwogICAgIH0KICAgICBwSGVhZGVyLT5SVFIgPSAoQ0FOX1JJMFJfUlRSICYgaGNhbi0+SW5zdGFuY2UtPnNGSUZPTWFpbEJveFtSeEZpZm9dLlJJUik7Ci0gICAgcEhlYWRlci0+RExDID0gKENBTl9SRFQwUl9ETEMgJiBoY2FuLT5JbnN0YW5jZS0+c0ZJRk9NYWlsQm94W1J4Rmlmb10uUkRUUikgPj4gQ0FOX1JEVDBSX0RMQ19Qb3M7CisgICAgaWYgKCgoQ0FOX1JEVDBSX0RMQyAmIGhjYW4tPkluc3RhbmNlLT5zRklGT01haWxCb3hbUnhGaWZvXS5SRFRSKSA+PiBDQU5fUkRUMFJfRExDX1BvcykgPj0gOFUpCisgICAgeworICAgICAgLyogVHJ1bmNhdGUgRExDIHRvIDggaWYgcmVjZWl2ZWQgZmllbGQgaXMgb3ZlciByYW5nZSAqLworICAgICAgcEhlYWRlci0+RExDID0gOFU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBwSGVhZGVyLT5ETEMgPSAoQ0FOX1JEVDBSX0RMQyAmIGhjYW4tPkluc3RhbmNlLT5zRklGT01haWxCb3hbUnhGaWZvXS5SRFRSKSA+PiBDQU5fUkRUMFJfRExDX1BvczsKKyAgICB9CiAgICAgcEhlYWRlci0+RmlsdGVyTWF0Y2hJbmRleCA9IChDQU5fUkRUMFJfRk1JICYgaGNhbi0+SW5zdGFuY2UtPnNGSUZPTWFpbEJveFtSeEZpZm9dLlJEVFIpID4+IENBTl9SRFQwUl9GTUlfUG9zOwogICAgIHBIZWFkZXItPlRpbWVzdGFtcCA9IChDQU5fUkRUMFJfVElNRSAmIGhjYW4tPkluc3RhbmNlLT5zRklGT01haWxCb3hbUnhGaWZvXS5SRFRSKSA+PiBDQU5fUkRUMFJfVElNRV9Qb3M7CiAKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmYyeHhfaGFsX2NvcnRleC5jIGIvU3JjL3N0bTMyZjJ4eF9oYWxfY29ydGV4LmMKaW5kZXggZWEwMzA1YS4uOTUzOThiNiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjJ4eF9oYWxfY29ydGV4LmMKKysrIGIvU3JjL3N0bTMyZjJ4eF9oYWxfY29ydGV4LmMKQEAgLTUwMSwzICs1MDEsNCBAQAogLyoqCiAgICogQH0KICAgKi8KKwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjJ4eF9oYWxfY3JjLmMgYi9TcmMvc3RtMzJmMnh4X2hhbF9jcmMuYwppbmRleCBjZGU5MWNkLi5hZjk0ZTMzIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmMnh4X2hhbF9jcmMuYworKysgYi9TcmMvc3RtMzJmMnh4X2hhbF9jcmMuYwpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAgIF9fSEFMX0NSQ19EUl9SRVNFVChoY3JjKTsKIAogICAvKiBSZXNldCBJRFIgcmVnaXN0ZXIgY29udGVudCAqLwotICBDTEVBUl9CSVQoaGNyYy0+SW5zdGFuY2UtPklEUiwgQ1JDX0lEUl9JRFIpOworICBfX0hBTF9DUkNfU0VUX0lEUihoY3JjLCAwKTsKIAogICAvKiBEZUluaXQgdGhlIGxvdyBsZXZlbCBoYXJkd2FyZSAqLwogICBIQUxfQ1JDX01zcERlSW5pdChoY3JjKTsKQEAgLTMwMyw3ICszMDMsNyBAQAogICAqIEBwYXJhbSAgaGNyYyBDUkMgaGFuZGxlCiAgICogQHJldHZhbCBIQUwgc3RhdGUKICAgKi8KLUhBTF9DUkNfU3RhdGVUeXBlRGVmIEhBTF9DUkNfR2V0U3RhdGUoQ1JDX0hhbmRsZVR5cGVEZWYgKmhjcmMpCitIQUxfQ1JDX1N0YXRlVHlwZURlZiBIQUxfQ1JDX0dldFN0YXRlKGNvbnN0IENSQ19IYW5kbGVUeXBlRGVmICpoY3JjKQogewogICAvKiBSZXR1cm4gQ1JDIGhhbmRsZSBzdGF0ZSAqLwogICByZXR1cm4gaGNyYy0+U3RhdGU7CmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmMnh4X2hhbF9jcnlwLmMgYi9TcmMvc3RtMzJmMnh4X2hhbF9jcnlwLmMKaW5kZXggN2NlMWQ4NS4uNzUwZWVjNiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjJ4eF9oYWxfY3J5cC5jCisrKyBiL1NyYy9zdG0zMmYyeHhfaGFsX2NyeXAuYwpAQCAtNzAsNyArNzAsNyBAQAogICAgICAgICAgdGhlIENSWVAgcGVyaXBoZXJhbCBpcyBjb25maWd1cmVkIGFuZCBwcm9jZXNzZXMgdGhlIGJ1ZmZlciBpbiBpbnB1dC4KICAgICAgICAgIEF0IHNlY29uZCBjYWxsLCBubyBuZWVkIHRvIEluaXRpYWxpemUgdGhlIENSWVAsIHVzZXIgaGF2ZSB0byBnZXQgY3VycmVudCBjb25maWd1cmF0aW9uIHZpYQogICAgICAgICAgSEFMX0NSWVBfR2V0Q29uZmlnKCkgQVBJLCB0aGVuIG9ubHkgIEhBTF9DUllQX1NldENvbmZpZygpIGlzIHJlcXVlc3RlZCB0byBzZXQKLSAgICAgICAgIG5ldyBwYXJhbWV0cmVzLCBmaW5hbGx5IHVzZXIgY2FuICBzdGFydCBlbmNyeXB0aW9uL2RlY3J5cHRpb24uCisgICAgICAgICBuZXcgcGFyYW1ldGVycywgZmluYWxseSB1c2VyIGNhbiAgc3RhcnQgZW5jcnlwdGlvbi9kZWNyeXB0aW9uLgogCiAgICAgICAgKCMpQ2FsbCBIQUxfQ1JZUF9EZUluaXQoKSB0byBkZWluaXRpYWxpemUgdGhlIENSWVAgcGVyaXBoZXJhbC4KIApAQCAtMjAxLDcgKzIwMSw3IEBACiBzdGF0aWMgdm9pZCBDUllQX0RNQUVycm9yKERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKTsKIHN0YXRpYyB2b2lkIENSWVBfU2V0S2V5KCBDUllQX0hhbmRsZVR5cGVEZWYgKmhjcnlwLCB1aW50MzJfdCBLZXlTaXplKTsKIHN0YXRpYyB2b2lkIENSWVBfQUVTX0lUKENSWVBfSGFuZGxlVHlwZURlZiAqaGNyeXApOwotc3RhdGljIHZvaWQgQ1JZUF9BRVNfUHJvY2Vzc0RhdGEoQ1JZUF9IYW5kbGVUeXBlRGVmICpoY3J5cHQsIHVpbnQzMl90IFRpbWVvdXQpOworc3RhdGljIHZvaWQgQ1JZUF9BRVNfUHJvY2Vzc0RhdGEoQ1JZUF9IYW5kbGVUeXBlRGVmICpoY3J5cCwgdWludDMyX3QgVGltZW91dCk7CiBzdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgQ1JZUF9BRVNfRW5jcnlwdChDUllQX0hhbmRsZVR5cGVEZWYgKmhjcnlwLCB1aW50MzJfdCBUaW1lb3V0KTsKIHN0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBDUllQX0FFU19EZWNyeXB0KENSWVBfSGFuZGxlVHlwZURlZiAqaGNyeXAsIHVpbnQzMl90IFRpbWVvdXQpOwogc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIENSWVBfQUVTX0RlY3J5cHRfSVQoQ1JZUF9IYW5kbGVUeXBlRGVmICpoY3J5cCk7CkBAIC02MDUsNyArNjA1LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBVbnJlZ2lzdGVyIGFuIENSWVAgQ2FsbGJhY2sKLSAgKiAgICAgICAgIENSWVAgY2FsbGFiY2sgaXMgcmVkaXJlY3RlZCB0byB0aGUgd2VhayBwcmVkZWZpbmVkIGNhbGxiYWNrCisgICogICAgICAgICBDUllQIGNhbGxiYWNrIGlzIHJlZGlyZWN0ZWQgdG8gdGhlIHdlYWsgcHJlZGVmaW5lZCBjYWxsYmFjawogICAqIEBwYXJhbSBoY3J5cCBjcnlwIGhhbmRsZQogICAqIEBwYXJhbSBDYWxsYmFja0lEIElEIG9mIHRoZSBjYWxsYmFjayB0byBiZSB1bnJlZ2lzdGVyZWQKICAgKiAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKQEAgLTc5OCw3ICs3OTgsNyBAQAogICAgICAgLyogU2V0IHRoZSBwaGFzZSAqLwogICAgICAgaGNyeXAtPlBoYXNlID0gQ1JZUF9QSEFTRV9QUk9DRVNTOwogCi0gICAgICAvKiBTdGF0cnQgREVTL1RERVMgZW5jcnlwdGlvbiBwcm9jZXNzICovCisgICAgICAvKiBTdGFydCBERVMvVERFUyBlbmNyeXB0aW9uIHByb2Nlc3MgKi8KICAgICAgIHN0YXR1cyA9IENSWVBfVERFU19Qcm9jZXNzKGhjcnlwLFRpbWVvdXQpOwogICAgICAgYnJlYWs7CiAKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmYyeHhfaGFsX2RhYy5jIGIvU3JjL3N0bTMyZjJ4eF9oYWxfZGFjLmMKaW5kZXggNGE0NTNmZC4uYTI3Y2MyOSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjJ4eF9oYWxfZGFjLmMKKysrIGIvU3JjL3N0bTMyZjJ4eF9oYWxfZGFjLmMKQEAgLTEwLDYgKzEwLDcgQEAKICAgKiAgICAgICAgICAgKyBQZXJpcGhlcmFsIENvbnRyb2wgZnVuY3Rpb25zCiAgICogICAgICAgICAgICsgUGVyaXBoZXJhbCBTdGF0ZSBhbmQgRXJyb3JzIGZ1bmN0aW9ucwogICAqCisgICoKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCkBAIC0xMTEsOSArMTEyLDkgQEAKICAgICAgICBBIERNQSByZXF1ZXN0IGNhbiBiZSBnZW5lcmF0ZWQgd2hlbiBhbiBleHRlcm5hbCB0cmlnZ2VyIChidXQgbm90IGEgc29mdHdhcmUgdHJpZ2dlcikKICAgICAgICBvY2N1cnMgaWYgRE1BMSByZXF1ZXN0cyBhcmUgZW5hYmxlZCB1c2luZyBIQUxfREFDX1N0YXJ0X0RNQSgpLgogICAgICAgIERNQTEgcmVxdWVzdHMgYXJlIG1hcHBlZCBhcyBmb2xsb3dpbmc6Ci0gICAgICAoIykgREFDIGNoYW5uZWwxIG1hcHBlZCBvbiBETUExIFN0cmVhbTUgY2hhbm5lbDcgd2hpY2ggbXVzdCBiZSAKKyAgICAgICgjKSBEQUMgY2hhbm5lbDEgbWFwcGVkIG9uIERNQTEgU3RyZWFtNSBjaGFubmVsNyB3aGljaCBtdXN0IGJlCiAgICAgICAgICAgYWxyZWFkeSBjb25maWd1cmVkCi0gICAgICAoIykgREFDIGNoYW5uZWwyIG1hcHBlZCBvbiBETUExIFN0cmVhbTYgY2hhbm5lbDcgd2hpY2ggbXVzdCBiZSAKKyAgICAgICgjKSBEQUMgY2hhbm5lbDIgbWFwcGVkIG9uIERNQTEgU3RyZWFtNiBjaGFubmVsNyB3aGljaCBtdXN0IGJlCiAgICAgICAgICAgYWxyZWFkeSBjb25maWd1cmVkCiAKICAgICAgWy4uXQpAQCAtMTY0LDcgKzE2NSw3IEBACiAgICAgICBUaGUgY29tcGlsYXRpb24gZGVmaW5lICBVU0VfSEFMX0RBQ19SRUdJU1RFUl9DQUxMQkFDS1Mgd2hlbiBzZXQgdG8gMQogICAgICAgYWxsb3dzIHRoZSB1c2VyIHRvIGNvbmZpZ3VyZSBkeW5hbWljYWxseSB0aGUgZHJpdmVyIGNhbGxiYWNrcy4KIAotICAgIFVzZSBGdW5jdGlvbnMgQHJlZiBIQUxfREFDX1JlZ2lzdGVyQ2FsbGJhY2soKSB0byByZWdpc3RlciBhIHVzZXIgY2FsbGJhY2ssCisgICAgVXNlIEZ1bmN0aW9ucyBIQUxfREFDX1JlZ2lzdGVyQ2FsbGJhY2soKSB0byByZWdpc3RlciBhIHVzZXIgY2FsbGJhY2ssCiAgICAgICBpdCBhbGxvd3MgdG8gcmVnaXN0ZXIgZm9sbG93aW5nIGNhbGxiYWNrczoKICAgICAgICgrKSBDb252Q3BsdENhbGxiYWNrQ2gxICAgICA6IGNhbGxiYWNrIHdoZW4gYSBoYWxmIHRyYW5zZmVyIGlzIGNvbXBsZXRlZCBvbiBDaDEuCiAgICAgICAoKykgQ29udkhhbGZDcGx0Q2FsbGJhY2tDaDEgOiBjYWxsYmFjayB3aGVuIGEgdHJhbnNmZXIgaXMgY29tcGxldGVkIG9uIENoMS4KQEAgLTE3OSw4ICsxODAsOCBAQAogICAgICAgVGhpcyBmdW5jdGlvbiB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsIHRoZSBDYWxsYmFjayBJRAogICAgICAgYW5kIGEgcG9pbnRlciB0byB0aGUgdXNlciBjYWxsYmFjayBmdW5jdGlvbi4KIAotICAgIFVzZSBmdW5jdGlvbiBAcmVmIEhBTF9EQUNfVW5SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVzZXQgYSBjYWxsYmFjayB0byB0aGUgZGVmYXVsdAotICAgICAgd2VhayAoc3VyY2hhcmdlZCkgZnVuY3Rpb24uIEl0IGFsbG93cyB0byByZXNldCBmb2xsb3dpbmcgY2FsbGJhY2tzOgorICAgIFVzZSBmdW5jdGlvbiBIQUxfREFDX1VuUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlc2V0IGEgY2FsbGJhY2sgdG8gdGhlIGRlZmF1bHQKKyAgICAgIHdlYWsgKG92ZXJyaWRkZW4pIGZ1bmN0aW9uLiBJdCBhbGxvd3MgdG8gcmVzZXQgZm9sbG93aW5nIGNhbGxiYWNrczoKICAgICAgICgrKSBDb252Q3BsdENhbGxiYWNrQ2gxICAgICA6IGNhbGxiYWNrIHdoZW4gYSBoYWxmIHRyYW5zZmVyIGlzIGNvbXBsZXRlZCBvbiBDaDEuCiAgICAgICAoKykgQ29udkhhbGZDcGx0Q2FsbGJhY2tDaDEgOiBjYWxsYmFjayB3aGVuIGEgdHJhbnNmZXIgaXMgY29tcGxldGVkIG9uIENoMS4KICAgICAgICgrKSBFcnJvckNhbGxiYWNrQ2gxICAgICAgICA6IGNhbGxiYWNrIHdoZW4gYW4gZXJyb3Igb2NjdXJzIG9uIENoMS4KQEAgLTE5NCwxMiArMTk1LDEyIEBACiAgICAgICAoKykgQWxsIENhbGxiYWNrcwogICAgICAgVGhpcyBmdW5jdGlvbikgdGFrZXMgYXMgcGFyYW1ldGVycyB0aGUgSEFMIHBlcmlwaGVyYWwgaGFuZGxlIGFuZCB0aGUgQ2FsbGJhY2sgSUQuCiAKLSAgICAgIEJ5IGRlZmF1bHQsIGFmdGVyIHRoZSBAcmVmIEhBTF9EQUNfSW5pdCBhbmQgaWYgdGhlIHN0YXRlIGlzIEhBTF9EQUNfU1RBVEVfUkVTRVQKLSAgICAgIGFsbCBjYWxsYmFja3MgYXJlIHJlc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIGxlZ2FjeSB3ZWFrIChzdXJjaGFyZ2VkKSBmdW5jdGlvbnMuCisgICAgICBCeSBkZWZhdWx0LCBhZnRlciB0aGUgSEFMX0RBQ19Jbml0IGFuZCBpZiB0aGUgc3RhdGUgaXMgSEFMX0RBQ19TVEFURV9SRVNFVAorICAgICAgYWxsIGNhbGxiYWNrcyBhcmUgcmVzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgbGVnYWN5IHdlYWsgKG92ZXJyaWRkZW4pIGZ1bmN0aW9ucy4KICAgICAgIEV4Y2VwdGlvbiBkb25lIGZvciBNc3BJbml0IGFuZCBNc3BEZUluaXQgY2FsbGJhY2tzIHRoYXQgYXJlIHJlc3BlY3RpdmVseQotICAgICAgcmVzZXQgdG8gdGhlIGxlZ2FjeSB3ZWFrIChzdXJjaGFyZ2VkKSBmdW5jdGlvbnMgaW4gdGhlIEByZWYgSEFMX0RBQ19Jbml0Ci0gICAgICBhbmQgQHJlZiAgSEFMX0RBQ19EZUluaXQgb25seSB3aGVuIHRoZXNlIGNhbGxiYWNrcyBhcmUgbnVsbCAobm90IHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCkuCi0gICAgICBJZiBub3QsIE1zcEluaXQgb3IgTXNwRGVJbml0IGFyZSBub3QgbnVsbCwgdGhlIEByZWYgSEFMX0RBQ19Jbml0IGFuZCBAcmVmIEhBTF9EQUNfRGVJbml0CisgICAgICByZXNldCB0byB0aGUgbGVnYWN5IHdlYWsgKG92ZXJyaWRkZW4pIGZ1bmN0aW9ucyBpbiB0aGUgSEFMX0RBQ19Jbml0CisgICAgICBhbmQgIEhBTF9EQUNfRGVJbml0IG9ubHkgd2hlbiB0aGVzZSBjYWxsYmFja3MgYXJlIG51bGwgKG5vdCByZWdpc3RlcmVkIGJlZm9yZWhhbmQpLgorICAgICAgSWYgbm90LCBNc3BJbml0IG9yIE1zcERlSW5pdCBhcmUgbm90IG51bGwsIHRoZSBIQUxfREFDX0luaXQgYW5kIEhBTF9EQUNfRGVJbml0CiAgICAgICBrZWVwIGFuZCB1c2UgdGhlIHVzZXIgTXNwSW5pdC9Nc3BEZUluaXQgY2FsbGJhY2tzIChyZWdpc3RlcmVkIGJlZm9yZWhhbmQpCiAKICAgICAgIENhbGxiYWNrcyBjYW4gYmUgcmVnaXN0ZXJlZC91bnJlZ2lzdGVyZWQgaW4gUkVBRFkgc3RhdGUgb25seS4KQEAgLTIwNywxMiArMjA4LDEyIEBACiAgICAgICBpbiBSRUFEWSBvciBSRVNFVCBzdGF0ZSwgdGh1cyByZWdpc3RlcmVkICh1c2VyKSBNc3BJbml0L0RlSW5pdCBjYWxsYmFja3MgY2FuIGJlIHVzZWQKICAgICAgIGR1cmluZyB0aGUgSW5pdC9EZUluaXQuCiAgICAgICBJbiB0aGF0IGNhc2UgZmlyc3QgcmVnaXN0ZXIgdGhlIE1zcEluaXQvTXNwRGVJbml0IHVzZXIgY2FsbGJhY2tzCi0gICAgICB1c2luZyBAcmVmIEhBTF9EQUNfUmVnaXN0ZXJDYWxsYmFjayBiZWZvcmUgY2FsbGluZyBAcmVmIEhBTF9EQUNfRGVJbml0Ci0gICAgICBvciBAcmVmIEhBTF9EQUNfSW5pdCBmdW5jdGlvbi4KKyAgICAgIHVzaW5nIEhBTF9EQUNfUmVnaXN0ZXJDYWxsYmFjayBiZWZvcmUgY2FsbGluZyBIQUxfREFDX0RlSW5pdAorICAgICAgb3IgSEFMX0RBQ19Jbml0IGZ1bmN0aW9uLgogCiAgICAgICBXaGVuIFRoZSBjb21waWxhdGlvbiBkZWZpbmUgVVNFX0hBTF9EQUNfUkVHSVNURVJfQ0FMTEJBQ0tTIGlzIHNldCB0byAwIG9yCiAgICAgICBub3QgZGVmaW5lZCwgdGhlIGNhbGxiYWNrIHJlZ2lzdGVyaW5nIGZlYXR1cmUgaXMgbm90IGF2YWlsYWJsZQotICAgICAgYW5kIHdlYWsgKHN1cmNoYXJnZWQpIGNhbGxiYWNrcyBhcmUgdXNlZC4KKyAgICAgIGFuZCB3ZWFrIChvdmVycmlkZGVuKSBjYWxsYmFja3MgYXJlIHVzZWQuCiAKICAgICAgKioqIERBQyBIQUwgZHJpdmVyIG1hY3JvcyBsaXN0ICoqKgogICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTIyNyw3ICsyMjgsNyBAQAogICAgICBbLi5dCiAgICAgICAoQCkgWW91IGNhbiByZWZlciB0byB0aGUgREFDIEhBTCBkcml2ZXIgaGVhZGVyIGZpbGUgZm9yIG1vcmUgdXNlZnVsIG1hY3JvcwogCi0gIEBlbmR2ZXJiYXRpbQorQGVuZHZlcmJhdGltCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqLwogCkBAIC0yODIsNyArMjgzLDcgQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9EQUNfSW5pdChEQUNfSGFuZGxlVHlwZURlZiAqaGRhYykKIHsKLSAgLyogQ2hlY2sgREFDIGhhbmRsZSAqLworICAvKiBDaGVjayB0aGUgREFDIHBlcmlwaGVyYWwgaGFuZGxlICovCiAgIGlmIChoZGFjID09IE5VTEwpCiAgIHsKICAgICByZXR1cm4gSEFMX0VSUk9SOwpAQCAtMzQzLDcgKzM0NCw3IEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfREFDX0RlSW5pdChEQUNfSGFuZGxlVHlwZURlZiAqaGRhYykKIHsKLSAgLyogQ2hlY2sgREFDIGhhbmRsZSAqLworICAvKiBDaGVjayB0aGUgREFDIHBlcmlwaGVyYWwgaGFuZGxlICovCiAgIGlmIChoZGFjID09IE5VTEwpCiAgIHsKICAgICByZXR1cm4gSEFMX0VSUk9SOwpAQCAtNDQ2LDYgKzQ0NywxMiBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0RBQ19TdGFydChEQUNfSGFuZGxlVHlwZURlZiAqaGRhYywgdWludDMyX3QgQ2hhbm5lbCkKIHsKKyAgLyogQ2hlY2sgdGhlIERBQyBwZXJpcGhlcmFsIGhhbmRsZSAqLworICBpZiAoaGRhYyA9PSBOVUxMKQorICB7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19EQUNfQ0hBTk5FTChDaGFubmVsKSk7CiAKQEAgLTUwMSw2ICs1MDgsMTIgQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9EQUNfU3RvcChEQUNfSGFuZGxlVHlwZURlZiAqaGRhYywgdWludDMyX3QgQ2hhbm5lbCkKIHsKKyAgLyogQ2hlY2sgdGhlIERBQyBwZXJpcGhlcmFsIGhhbmRsZSAqLworICBpZiAoaGRhYyA9PSBOVUxMKQorICB7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19EQUNfQ0hBTk5FTChDaGFubmVsKSk7CiAKQEAgLTUzMSwxMSArNTQ0LDE3IEBACiAgICogICAgICAgICAgICBAYXJnIERBQ19BTElHTl8xMkJfUjogMTJiaXQgcmlnaHQgZGF0YSBhbGlnbm1lbnQgc2VsZWN0ZWQKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9EQUNfU3RhcnRfRE1BKERBQ19IYW5kbGVUeXBlRGVmICpoZGFjLCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCAqcERhdGEsIHVpbnQzMl90IExlbmd0aCwKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9EQUNfU3RhcnRfRE1BKERBQ19IYW5kbGVUeXBlRGVmICpoZGFjLCB1aW50MzJfdCBDaGFubmVsLCBjb25zdCB1aW50MzJfdCAqcERhdGEsIHVpbnQzMl90IExlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IEFsaWdubWVudCkKIHsKICAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzOwotICB1aW50MzJfdCB0bXByZWcgPSAwVTsKKyAgdWludDMyX3QgdG1wcmVnOworCisgIC8qIENoZWNrIHRoZSBEQUMgcGVyaXBoZXJhbCBoYW5kbGUgKi8KKyAgaWYgKGhkYWMgPT0gTlVMTCkKKyAgeworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KIAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfREFDX0NIQU5ORUwoQ2hhbm5lbCkpOwpAQCAtNTcyLDEyICs1OTEsMTAgQEAKICAgICAgICAgLyogR2V0IERIUjEyTDEgYWRkcmVzcyAqLwogICAgICAgICB0bXByZWcgPSAodWludDMyX3QpJmhkYWMtPkluc3RhbmNlLT5ESFIxMkwxOwogICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgREFDX0FMSUdOXzhCX1I6CisgICAgICBkZWZhdWx0OiAvKiBjYXNlIERBQ19BTElHTl84Ql9SICovCiAgICAgICAgIC8qIEdldCBESFI4UjEgYWRkcmVzcyAqLwogICAgICAgICB0bXByZWcgPSAodWludDMyX3QpJmhkYWMtPkluc3RhbmNlLT5ESFI4UjE7CiAgICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7CiAgICAgfQogICB9CiAKQEAgLTYwNiwxNyArNjIzLDEzIEBACiAgICAgICAgIC8qIEdldCBESFIxMkwyIGFkZHJlc3MgKi8KICAgICAgICAgdG1wcmVnID0gKHVpbnQzMl90KSZoZGFjLT5JbnN0YW5jZS0+REhSMTJMMjsKICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIERBQ19BTElHTl84Ql9SOgorICAgICAgZGVmYXVsdDogLyogY2FzZSBEQUNfQUxJR05fOEJfUiAqLwogICAgICAgICAvKiBHZXQgREhSOFIyIGFkZHJlc3MgKi8KICAgICAgICAgdG1wcmVnID0gKHVpbnQzMl90KSZoZGFjLT5JbnN0YW5jZS0+REhSOFIyOwogICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwogICAgIH0KICAgfQogCi0KLSAgLyogRW5hYmxlIHRoZSBETUEgU3RyZWFtICovCiAgIGlmIChDaGFubmVsID09IERBQ19DSEFOTkVMXzEpCiAgIHsKICAgICAvKiBFbmFibGUgdGhlIERBQyBETUEgdW5kZXJydW4gaW50ZXJydXB0ICovCkBAIC02NjUsNiArNjc4LDEyIEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfREFDX1N0b3BfRE1BKERBQ19IYW5kbGVUeXBlRGVmICpoZGFjLCB1aW50MzJfdCBDaGFubmVsKQogeworICAvKiBDaGVjayB0aGUgREFDIHBlcmlwaGVyYWwgaGFuZGxlICovCisgIGlmIChoZGFjID09IE5VTEwpCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX0RBQ19DSEFOTkVMKENoYW5uZWwpKTsKIApAQCAtNzEzLDEwICs3MzIsMTMgQEAKICAgKi8KIHZvaWQgSEFMX0RBQ19JUlFIYW5kbGVyKERBQ19IYW5kbGVUeXBlRGVmICpoZGFjKQogewotICBpZiAoX19IQUxfREFDX0dFVF9JVF9TT1VSQ0UoaGRhYywgREFDX0lUX0RNQVVEUjEpKQorICB1aW50MzJfdCBpdHNvdXJjZSA9IGhkYWMtPkluc3RhbmNlLT5DUjsKKyAgdWludDMyX3QgaXRmbGFnICAgPSBoZGFjLT5JbnN0YW5jZS0+U1I7CisKKyAgaWYgKChpdHNvdXJjZSAmIERBQ19JVF9ETUFVRFIxKSA9PSBEQUNfSVRfRE1BVURSMSkKICAgewogICAgIC8qIENoZWNrIHVuZGVycnVuIGZsYWcgb2YgREFDIGNoYW5uZWwgMSAqLwotICAgIGlmIChfX0hBTF9EQUNfR0VUX0ZMQUcoaGRhYywgREFDX0ZMQUdfRE1BVURSMSkpCisgICAgaWYgKChpdGZsYWcgJiBEQUNfRkxBR19ETUFVRFIxKSA9PSBEQUNfRkxBR19ETUFVRFIxKQogICAgIHsKICAgICAgIC8qIENoYW5nZSBEQUMgc3RhdGUgdG8gZXJyb3Igc3RhdGUgKi8KICAgICAgIGhkYWMtPlN0YXRlID0gSEFMX0RBQ19TVEFURV9FUlJPUjsKQEAgLTcyOCw3ICs3NTAsNyBAQAogICAgICAgX19IQUxfREFDX0NMRUFSX0ZMQUcoaGRhYywgREFDX0ZMQUdfRE1BVURSMSk7CiAKICAgICAgIC8qIERpc2FibGUgdGhlIHNlbGVjdGVkIERBQyBjaGFubmVsMSBETUEgcmVxdWVzdCAqLwotICAgICAgQ0xFQVJfQklUKGhkYWMtPkluc3RhbmNlLT5DUiwgREFDX0NSX0RNQUVOMSk7CisgICAgICBfX0hBTF9EQUNfRElTQUJMRV9JVChoZGFjLCBEQUNfQ1JfRE1BRU4xKTsKIAogICAgICAgLyogRXJyb3IgY2FsbGJhY2sgKi8KICNpZiAoVVNFX0hBTF9EQUNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCkBAIC03NDAsMTAgKzc2MiwxMCBAQAogICB9CiAKIAotICBpZiAoX19IQUxfREFDX0dFVF9JVF9TT1VSQ0UoaGRhYywgREFDX0lUX0RNQVVEUjIpKQorICBpZiAoKGl0c291cmNlICYgREFDX0lUX0RNQVVEUjIpID09IERBQ19JVF9ETUFVRFIyKQogICB7CiAgICAgLyogQ2hlY2sgdW5kZXJydW4gZmxhZyBvZiBEQUMgY2hhbm5lbCAyICovCi0gICAgaWYgKF9fSEFMX0RBQ19HRVRfRkxBRyhoZGFjLCBEQUNfRkxBR19ETUFVRFIyKSkKKyAgICBpZiAoKGl0ZmxhZyAmIERBQ19GTEFHX0RNQVVEUjIpID09IERBQ19GTEFHX0RNQVVEUjIpCiAgICAgewogICAgICAgLyogQ2hhbmdlIERBQyBzdGF0ZSB0byBlcnJvciBzdGF0ZSAqLwogICAgICAgaGRhYy0+U3RhdGUgPSBIQUxfREFDX1NUQVRFX0VSUk9SOwpAQCAtNzU1LDcgKzc3Nyw3IEBACiAgICAgICBfX0hBTF9EQUNfQ0xFQVJfRkxBRyhoZGFjLCBEQUNfRkxBR19ETUFVRFIyKTsKIAogICAgICAgLyogRGlzYWJsZSB0aGUgc2VsZWN0ZWQgREFDIGNoYW5uZWwyIERNQSByZXF1ZXN0ICovCi0gICAgICBDTEVBUl9CSVQoaGRhYy0+SW5zdGFuY2UtPkNSLCBEQUNfQ1JfRE1BRU4yKTsKKyAgICAgIF9fSEFMX0RBQ19ESVNBQkxFX0lUKGhkYWMsIERBQ19DUl9ETUFFTjIpOwogCiAgICAgICAvKiBFcnJvciBjYWxsYmFjayAqLwogI2lmIChVU0VfSEFMX0RBQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKQEAgLTc4OCw2ICs4MTAsMTIgQEAKIHsKICAgX19JTyB1aW50MzJfdCB0bXAgPSAwVUw7CiAKKyAgLyogQ2hlY2sgdGhlIERBQyBwZXJpcGhlcmFsIGhhbmRsZSAqLworICBpZiAoaGRhYyA9PSBOVUxMKQorICB7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19EQUNfQ0hBTk5FTChDaGFubmVsKSk7CiAgIGFzc2VydF9wYXJhbShJU19EQUNfQUxJR04oQWxpZ25tZW50KSk7CkBAIC05MDUsMTAgKzkzMywxNiBAQAogICAqICAgICAgICAgICAgQGFyZyBEQUNfQ0hBTk5FTF8yOiBEQUMgQ2hhbm5lbDIgc2VsZWN0ZWQKICAgKiBAcmV0dmFsIFRoZSBzZWxlY3RlZCBEQUMgY2hhbm5lbCBkYXRhIG91dHB1dCB2YWx1ZS4KICAgKi8KLXVpbnQzMl90IEhBTF9EQUNfR2V0VmFsdWUoREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMsIHVpbnQzMl90IENoYW5uZWwpCit1aW50MzJfdCBIQUxfREFDX0dldFZhbHVlKGNvbnN0IERBQ19IYW5kbGVUeXBlRGVmICpoZGFjLCB1aW50MzJfdCBDaGFubmVsKQogewogICB1aW50MzJfdCByZXN1bHQ7CiAKKyAgLyogQ2hlY2sgdGhlIERBQyBwZXJpcGhlcmFsIGhhbmRsZSAqLworICBpZiAoaGRhYyA9PSBOVUxMKQorICB7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19EQUNfQ0hBTk5FTChDaGFubmVsKSk7CiAKQEAgLTkzNywxMSArOTcxLDE5IEBACiAgICogICAgICAgICAgICBAYXJnIERBQ19DSEFOTkVMXzI6IERBQyBDaGFubmVsMiBzZWxlY3RlZAogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0RBQ19Db25maWdDaGFubmVsKERBQ19IYW5kbGVUeXBlRGVmICpoZGFjLCBEQUNfQ2hhbm5lbENvbmZUeXBlRGVmICpzQ29uZmlnLCB1aW50MzJfdCBDaGFubmVsKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0RBQ19Db25maWdDaGFubmVsKERBQ19IYW5kbGVUeXBlRGVmICpoZGFjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERBQ19DaGFubmVsQ29uZlR5cGVEZWYgKnNDb25maWcsIHVpbnQzMl90IENoYW5uZWwpCiB7CisgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKICAgdWludDMyX3QgdG1wcmVnMTsKICAgdWludDMyX3QgdG1wcmVnMjsKIAorICAvKiBDaGVjayB0aGUgREFDIHBlcmlwaGVyYWwgaGFuZGxlIGFuZCBjaGFubmVsIGNvbmZpZ3VyYXRpb24gc3RydWN0ICovCisgIGlmICgoaGRhYyA9PSBOVUxMKSB8fCAoc0NvbmZpZyA9PSBOVUxMKSkKKyAgeworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKwogICAvKiBDaGVjayB0aGUgREFDIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX0RBQ19UUklHR0VSKHNDb25maWctPkRBQ19UcmlnZ2VyKSk7CiAgIGFzc2VydF9wYXJhbShJU19EQUNfT1VUUFVUX0JVRkZFUl9TVEFURShzQ29uZmlnLT5EQUNfT3V0cHV0QnVmZmVyKSk7CkBAIC05NTYsNyArOTk4LDggQEAKICAgLyogR2V0IHRoZSBEQUMgQ1IgdmFsdWUgKi8KICAgdG1wcmVnMSA9IGhkYWMtPkluc3RhbmNlLT5DUjsKICAgLyogQ2xlYXIgQk9GRngsIFRFTngsIFRTRUx4LCBXQVZFeCBhbmQgTUFNUHggYml0cyAqLwotICB0bXByZWcxICY9IH4oKCh1aW50MzJfdCkoREFDX0NSX01BTVAxIHwgREFDX0NSX1dBVkUxIHwgREFDX0NSX1RTRUwxIHwgREFDX0NSX1RFTjEgfCBEQUNfQ1JfQk9GRjEpKSA8PCAoQ2hhbm5lbCAmIDB4MTBVTCkpOworICB0bXByZWcxICY9IH4oKCh1aW50MzJfdCkoREFDX0NSX01BTVAxIHwgREFDX0NSX1dBVkUxIHwgREFDX0NSX1RTRUwxIHwgREFDX0NSX1RFTjEgfCBEQUNfQ1JfQk9GRjEpKQorICAgICAgICAgICAgICAgPDwgKENoYW5uZWwgJiAweDEwVUwpKTsKICAgLyogQ29uZmlndXJlIGZvciB0aGUgc2VsZWN0ZWQgREFDIGNoYW5uZWw6IGJ1ZmZlciBvdXRwdXQsIHRyaWdnZXIgKi8KICAgLyogU2V0IFRTRUx4IGFuZCBURU54IGJpdHMgYWNjb3JkaW5nIHRvIERBQ19UcmlnZ2VyIHZhbHVlICovCiAgIC8qIFNldCBCT0ZGeCBiaXQgYWNjb3JkaW5nIHRvIERBQ19PdXRwdXRCdWZmZXIgdmFsdWUgKi8KQEAgLTk3NSw3ICsxMDE4LDcgQEAKICAgX19IQUxfVU5MT0NLKGhkYWMpOwogCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KLSAgcmV0dXJuIEhBTF9PSzsKKyAgcmV0dXJuIHN0YXR1czsKIH0KIAogLyoqCkBAIC0xMDA0LDcgKzEwNDcsNyBAQAogICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgREFDLgogICAqIEByZXR2YWwgSEFMIHN0YXRlCiAgICovCi1IQUxfREFDX1N0YXRlVHlwZURlZiBIQUxfREFDX0dldFN0YXRlKERBQ19IYW5kbGVUeXBlRGVmICpoZGFjKQorSEFMX0RBQ19TdGF0ZVR5cGVEZWYgSEFMX0RBQ19HZXRTdGF0ZShjb25zdCBEQUNfSGFuZGxlVHlwZURlZiAqaGRhYykKIHsKICAgLyogUmV0dXJuIERBQyBoYW5kbGUgc3RhdGUgKi8KICAgcmV0dXJuIGhkYWMtPlN0YXRlOwpAQCAtMTAxNyw3ICsxMDYwLDcgQEAKICAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIERBQy4KICAgKiBAcmV0dmFsIERBQyBFcnJvciBDb2RlCiAgICovCi11aW50MzJfdCBIQUxfREFDX0dldEVycm9yKERBQ19IYW5kbGVUeXBlRGVmICpoZGFjKQordWludDMyX3QgSEFMX0RBQ19HZXRFcnJvcihjb25zdCBEQUNfSGFuZGxlVHlwZURlZiAqaGRhYykKIHsKICAgcmV0dXJuIGhkYWMtPkVycm9yQ29kZTsKIH0KQEAgLTEwNDAsNyArMTA4Myw5IEBACiAjaWYgKFVTRV9IQUxfREFDX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQogLyoqCiAgICogQGJyaWVmICBSZWdpc3RlciBhIFVzZXIgREFDIENhbGxiYWNrCi0gICogICAgICAgICBUbyBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIHdlYWsgKHN1cmNoYXJnZWQpIHByZWRlZmluZWQgY2FsbGJhY2sKKyAgKiAgICAgICAgIFRvIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgd2VhayAob3ZlcnJpZGRlbikgcHJlZGVmaW5lZCBjYWxsYmFjaworICAqIEBub3RlICAgVGhlIEhBTF9EQUNfUmVnaXN0ZXJDYWxsYmFjaygpIG1heSBiZSBjYWxsZWQgYmVmb3JlIEhBTF9EQUNfSW5pdCgpIGluIEhBTF9EQUNfU1RBVEVfUkVTRVQgdG8gcmVnaXN0ZXIKKyAgKiAgICAgICAgIGNhbGxiYWNrcyBmb3IgSEFMX0RBQ19NU1BJTklUX0NCX0lEIGFuZCBIQUxfREFDX01TUERFSU5JVF9DQl9JRAogICAqIEBwYXJhbSAgaGRhYyBEQUMgaGFuZGxlCiAgICogQHBhcmFtICBDYWxsYmFja0lEIElEIG9mIHRoZSBjYWxsYmFjayB0byBiZSByZWdpc3RlcmVkCiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgpAQCAtMTA2NCw2ICsxMTA5LDEyIEBACiB7CiAgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKIAorICAvKiBDaGVjayB0aGUgREFDIHBlcmlwaGVyYWwgaGFuZGxlICovCisgIGlmIChoZGFjID09IE5VTEwpCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisKICAgaWYgKHBDYWxsYmFjayA9PSBOVUxMKQogICB7CiAgICAgLyogVXBkYXRlIHRoZSBlcnJvciBjb2RlICovCkBAIC0xMDcxLDkgKzExMjIsNiBAQAogICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KIAotICAvKiBQcm9jZXNzIGxvY2tlZCAqLwotICBfX0hBTF9MT0NLKGhkYWMpOwotCiAgIGlmIChoZGFjLT5TdGF0ZSA9PSBIQUxfREFDX1NUQVRFX1JFQURZKQogICB7CiAgICAgc3dpdGNoIChDYWxsYmFja0lEKQpAQCAtMTE0NCwxNCArMTE5MiwxNCBAQAogICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7CiAgIH0KIAotICAvKiBSZWxlYXNlIExvY2sgKi8KLSAgX19IQUxfVU5MT0NLKGhkYWMpOwogICByZXR1cm4gc3RhdHVzOwogfQogCiAvKioKICAgKiBAYnJpZWYgIFVucmVnaXN0ZXIgYSBVc2VyIERBQyBDYWxsYmFjawotICAqICAgICAgICAgREFDIENhbGxiYWNrIGlzIHJlZGlyZWN0ZWQgdG8gdGhlIHdlYWsgKHN1cmNoYXJnZWQpIHByZWRlZmluZWQgY2FsbGJhY2sKKyAgKiAgICAgICAgIERBQyBDYWxsYmFjayBpcyByZWRpcmVjdGVkIHRvIHRoZSB3ZWFrIChvdmVycmlkZGVuKSBwcmVkZWZpbmVkIGNhbGxiYWNrCisgICogQG5vdGUgICBUaGUgSEFMX0RBQ19VblJlZ2lzdGVyQ2FsbGJhY2soKSBtYXkgYmUgY2FsbGVkIGJlZm9yZSBIQUxfREFDX0luaXQoKSBpbiBIQUxfREFDX1NUQVRFX1JFU0VUIHRvIHVuLXJlZ2lzdGVyCisgICogICAgICAgICBjYWxsYmFja3MgZm9yIEhBTF9EQUNfTVNQSU5JVF9DQl9JRCBhbmQgSEFMX0RBQ19NU1BERUlOSVRfQ0JfSUQKICAgKiBAcGFyYW0gIGhkYWMgREFDIGhhbmRsZQogICAqIEBwYXJhbSAgQ2FsbGJhY2tJRCBJRCBvZiB0aGUgY2FsbGJhY2sgdG8gYmUgdW5yZWdpc3RlcmVkCiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgpAQCAtMTE3Miw4ICsxMjIwLDExIEBACiB7CiAgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKIAotICAvKiBQcm9jZXNzIGxvY2tlZCAqLwotICBfX0hBTF9MT0NLKGhkYWMpOworICAvKiBDaGVjayB0aGUgREFDIHBlcmlwaGVyYWwgaGFuZGxlICovCisgIGlmIChoZGFjID09IE5VTEwpCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CiAKICAgaWYgKGhkYWMtPlN0YXRlID09IEhBTF9EQUNfU1RBVEVfUkVBRFkpCiAgIHsKQEAgLTEyNTksOCArMTMxMCw2IEBACiAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKICAgfQogCi0gIC8qIFJlbGVhc2UgTG9jayAqLwotICBfX0hBTF9VTkxPQ0soaGRhYyk7CiAgIHJldHVybiBzdGF0dXM7CiB9CiAjZW5kaWYgLyogVVNFX0hBTF9EQUNfUkVHSVNURVJfQ0FMTEJBQ0tTICovCkBAIC0xMzQ2LDcgKzEzOTUsNiBAQAogI2VuZGlmIC8qIERBQyAqLwogCiAjZW5kaWYgLyogSEFMX0RBQ19NT0RVTEVfRU5BQkxFRCAqLwotCiAvKioKICAgKiBAfQogICAqLwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjJ4eF9oYWxfZGFjX2V4LmMgYi9TcmMvc3RtMzJmMnh4X2hhbF9kYWNfZXguYwppbmRleCBhNDMzYmZhLi5iYzJjODc0IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmMnh4X2hhbF9kYWNfZXguYworKysgYi9TcmMvc3RtMzJmMnh4X2hhbF9kYWNfZXguYwpAQCAtNiw2ICs2LDcgQEAKICAgKiAgICAgICAgICBUaGlzIGZpbGUgcHJvdmlkZXMgZmlybXdhcmUgZnVuY3Rpb25zIHRvIG1hbmFnZSB0aGUgZXh0ZW5kZWQKICAgKiAgICAgICAgICBmdW5jdGlvbmFsaXRpZXMgb2YgdGhlIERBQyBwZXJpcGhlcmFsLgogICAqCisgICoKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCkBAIC0yMiwyMiArMjMsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAjIyMjIyBIb3cgdG8gdXNlIHRoaXMgZHJpdmVyICMjIyMjCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgIFsuLl0KLQotICAgICAqKiogRHVhbCBtb2RlIElPIG9wZXJhdGlvbiAqKioKLSAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgIFsuLl0KLSAgICAgICgrKSBXaGVuIER1YWwgbW9kZSBpcyBlbmFibGVkIChpLmUuIERBQyBDaGFubmVsMSBhbmQgQ2hhbm5lbDIgYXJlIHVzZWQgc2ltdWx0YW5lb3VzbHkpIDoKLSAgICAgICAgICBVc2UgSEFMX0RBQ0V4X0R1YWxHZXRWYWx1ZSgpIHRvIGdldCBkaWdpdGFsIGRhdGEgdG8gYmUgY29udmVydGVkIGFuZCB1c2UKLSAgICAgICAgICBIQUxfREFDRXhfRHVhbFNldFZhbHVlKCkgdG8gc2V0IGRpZ2l0YWwgdmFsdWUgdG8gY29udmVydGVkIHNpbXVsdGFuZW91c2x5IGluCi0gICAgICAgICAgQ2hhbm5lbCAxIGFuZCBDaGFubmVsIDIuCi0KICAgICAgKioqIFNpZ25hbCBnZW5lcmF0aW9uIG9wZXJhdGlvbiAqKioKICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgWy4uXQogICAgICAgKCspIFVzZSBIQUxfREFDRXhfVHJpYW5nbGVXYXZlR2VuZXJhdGUoKSB0byBnZW5lcmF0ZSBUcmlhbmdsZSBzaWduYWwuCiAgICAgICAoKykgVXNlIEhBTF9EQUNFeF9Ob2lzZVdhdmVHZW5lcmF0ZSgpIHRvIGdlbmVyYXRlIE5vaXNlIHNpZ25hbC4KIAotICBAZW5kdmVyYmF0aW0KKyBAZW5kdmVyYmF0aW0KICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICovCiAKQEAgLTYwLDYgKzUyLDcgQEAKIAogLyogUHJpdmF0ZSB0eXBlZGVmIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgZGVmaW5lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKIC8qIFByaXZhdGUgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBQcml2YXRlIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogUHJpdmF0ZSBmdW5jdGlvbiBwcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTk5LDYgKzkyLDEyIEBACiB7CiAgIHVpbnQzMl90IHRtcF9zd3RyaWcgPSAwVUw7CiAKKyAgLyogQ2hlY2sgdGhlIERBQyBwZXJpcGhlcmFsIGhhbmRsZSAqLworICBpZiAoaGRhYyA9PSBOVUxMKQorICB7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCiAKICAgLyogUHJvY2VzcyBsb2NrZWQgKi8KICAgX19IQUxfTE9DSyhoZGFjKTsKQEAgLTE0MCw2ICsxMzksMTIgQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9EQUNFeF9EdWFsU3RvcChEQUNfSGFuZGxlVHlwZURlZiAqaGRhYykKIHsKKyAgLyogQ2hlY2sgdGhlIERBQyBwZXJpcGhlcmFsIGhhbmRsZSAqLworICBpZiAoaGRhYyA9PSBOVUxMKQorICB7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCiAKICAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwogICBfX0hBTF9EQUNfRElTQUJMRShoZGFjLCBEQUNfQ0hBTk5FTF8xKTsKQEAgLTE3OSw2ICsxODQsMTIgQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9EQUNFeF9UcmlhbmdsZVdhdmVHZW5lcmF0ZShEQUNfSGFuZGxlVHlwZURlZiAqaGRhYywgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgQW1wbGl0dWRlKQogeworICAvKiBDaGVjayB0aGUgREFDIHBlcmlwaGVyYWwgaGFuZGxlICovCisgIGlmIChoZGFjID09IE5VTEwpCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX0RBQ19DSEFOTkVMKENoYW5uZWwpKTsKICAgYXNzZXJ0X3BhcmFtKElTX0RBQ19MRlNSX1VOTUFTS19UUklBTkdMRV9BTVBMSVRVREUoQW1wbGl0dWRlKSk7CkBAIC0yMjksNiArMjQwLDEyIEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfREFDRXhfTm9pc2VXYXZlR2VuZXJhdGUoREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMsIHVpbnQzMl90IENoYW5uZWwsIHVpbnQzMl90IEFtcGxpdHVkZSkKIHsKKyAgLyogQ2hlY2sgdGhlIERBQyBwZXJpcGhlcmFsIGhhbmRsZSAqLworICBpZiAoaGRhYyA9PSBOVUxMKQorICB7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19EQUNfQ0hBTk5FTChDaGFubmVsKSk7CiAgIGFzc2VydF9wYXJhbShJU19EQUNfTEZTUl9VTk1BU0tfVFJJQU5HTEVfQU1QTElUVURFKEFtcGxpdHVkZSkpOwpAQCAtMjc0LDYgKzI5MSwxMiBAQAogICB1aW50MzJfdCBkYXRhOwogICB1aW50MzJfdCB0bXA7CiAKKyAgLyogQ2hlY2sgdGhlIERBQyBwZXJpcGhlcmFsIGhhbmRsZSAqLworICBpZiAoaGRhYyA9PSBOVUxMKQorICB7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19EQUNfQUxJR04oQWxpZ25tZW50KSk7CiAgIGFzc2VydF9wYXJhbShJU19EQUNfREFUQShEYXRhMSkpOwpAQCAtMzkwLDcgKzQxMyw3IEBACiAgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBEQUMuCiAgICogQHJldHZhbCBUaGUgc2VsZWN0ZWQgREFDIGNoYW5uZWwgZGF0YSBvdXRwdXQgdmFsdWUuCiAgICovCi11aW50MzJfdCBIQUxfREFDRXhfRHVhbEdldFZhbHVlKERBQ19IYW5kbGVUeXBlRGVmICpoZGFjKQordWludDMyX3QgSEFMX0RBQ0V4X0R1YWxHZXRWYWx1ZShjb25zdCBEQUNfSGFuZGxlVHlwZURlZiAqaGRhYykKIHsKICAgdWludDMyX3QgdG1wID0gMFVMOwogCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmMnh4X2hhbF9kY21pLmMgYi9TcmMvc3RtMzJmMnh4X2hhbF9kY21pLmMKaW5kZXggY2I2NjRjMC4uOThjNzBmNCAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjJ4eF9oYWxfZGNtaS5jCisrKyBiL1NyYy9zdG0zMmYyeHhfaGFsX2RjbWkuYwpAQCAtMTAsMTcgKzEwLDYgQEAKICAgKiAgICAgICAgICAgKyBQZXJpcGhlcmFsIENvbnRyb2wgZnVuY3Rpb25zCiAgICogICAgICAgICAgICsgUGVyaXBoZXJhbCBTdGF0ZSBhbmQgRXJyb3IgZnVuY3Rpb25zCiAgICoKLSAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICogQGF0dGVudGlvbgotICAqCi0gICogQ29weXJpZ2h0IChjKSAyMDE2IFNUTWljcm9lbGVjdHJvbmljcy4KLSAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICAqCi0gICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlCi0gICogaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc29mdHdhcmUgY29tcG9uZW50LgotICAqIElmIG5vIExJQ0VOU0UgZmlsZSBjb21lcyB3aXRoIHRoaXMgc29mdHdhcmUsIGl0IGlzIHByb3ZpZGVkIEFTLUlTLgotICAqCi0gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICBAdmVyYmF0aW0KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICAgICAgICAgICAjIyMjIyBIb3cgdG8gdXNlIHRoaXMgZHJpdmVyICMjIyMjCkBAIC03Myw5ICs2Miw5IEBACiAKICAgICBUaGUgY29tcGlsYXRpb24gZGVmaW5lIFVTRV9IQUxfRENNSV9SRUdJU1RFUl9DQUxMQkFDS1Mgd2hlbiBzZXQgdG8gMQogICAgIGFsbG93cyB0aGUgdXNlciB0byBjb25maWd1cmUgZHluYW1pY2FsbHkgdGhlIGRyaXZlciBjYWxsYmFja3MuCi0gICAgVXNlIGZ1bmN0aW9ucyBAcmVmIEhBTF9EQ01JX1JlZ2lzdGVyQ2FsbGJhY2soKSB0byByZWdpc3RlciBhIHVzZXIgY2FsbGJhY2suCisgICAgVXNlIGZ1bmN0aW9ucyBIQUxfRENNSV9SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVnaXN0ZXIgYSB1c2VyIGNhbGxiYWNrLgogCi0gICAgRnVuY3Rpb24gQHJlZiBIQUxfRENNSV9SZWdpc3RlckNhbGxiYWNrKCkgYWxsb3dzIHRvIHJlZ2lzdGVyIGZvbGxvd2luZyBjYWxsYmFja3M6CisgICAgRnVuY3Rpb24gSEFMX0RDTUlfUmVnaXN0ZXJDYWxsYmFjaygpIGFsbG93cyB0byByZWdpc3RlciBmb2xsb3dpbmcgY2FsbGJhY2tzOgogICAgICAgKCspIEZyYW1lRXZlbnRDYWxsYmFjayA6IERDTUkgRnJhbWUgRXZlbnQuCiAgICAgICAoKykgVnN5bmNFdmVudENhbGxiYWNrIDogRENNSSBWc3luYyBFdmVudC4KICAgICAgICgrKSBMaW5lRXZlbnRDYWxsYmFjayAgOiBEQ01JIExpbmUgRXZlbnQuCkBAIC04NSw5ICs3NCw5IEBACiAgICAgVGhpcyBmdW5jdGlvbiB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsIHRoZSBjYWxsYmFjayBJRAogICAgIGFuZCBhIHBvaW50ZXIgdG8gdGhlIHVzZXIgY2FsbGJhY2sgZnVuY3Rpb24uCiAKLSAgICBVc2UgZnVuY3Rpb24gQHJlZiBIQUxfRENNSV9VblJlZ2lzdGVyQ2FsbGJhY2soKSB0byByZXNldCBhIGNhbGxiYWNrIHRvIHRoZSBkZWZhdWx0CisgICAgVXNlIGZ1bmN0aW9uIEhBTF9EQ01JX1VuUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlc2V0IGEgY2FsbGJhY2sgdG8gdGhlIGRlZmF1bHQKICAgICB3ZWFrIChzdXJjaGFyZ2VkKSBmdW5jdGlvbi4KLSAgICBAcmVmIEhBTF9EQ01JX1VuUmVnaXN0ZXJDYWxsYmFjaygpIHRha2VzIGFzIHBhcmFtZXRlcnMgdGhlIEhBTCBwZXJpcGhlcmFsIGhhbmRsZSwKKyAgICBIQUxfRENNSV9VblJlZ2lzdGVyQ2FsbGJhY2soKSB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsCiAgICAgYW5kIHRoZSBjYWxsYmFjayBJRC4KICAgICBUaGlzIGZ1bmN0aW9uIGFsbG93cyB0byByZXNldCBmb2xsb3dpbmcgY2FsbGJhY2tzOgogICAgICAgKCspIEZyYW1lRXZlbnRDYWxsYmFjayA6IERDTUkgRnJhbWUgRXZlbnQuCkBAIC05NywxMyArODYsMTMgQEAKICAgICAgICgrKSBNc3BJbml0Q2FsbGJhY2sgICAgOiBEQ01JIE1zcEluaXQuCiAgICAgICAoKykgTXNwRGVJbml0Q2FsbGJhY2sgIDogRENNSSBNc3BEZUluaXQuCiAKLSAgICBCeSBkZWZhdWx0LCBhZnRlciB0aGUgQHJlZiBIQUxfRENNSV9Jbml0IGFuZCBpZiB0aGUgc3RhdGUgaXMgSEFMX0RDTUlfU1RBVEVfUkVTRVQKKyAgICBCeSBkZWZhdWx0LCBhZnRlciB0aGUgSEFMX0RDTUlfSW5pdCBhbmQgaWYgdGhlIHN0YXRlIGlzIEhBTF9EQ01JX1NUQVRFX1JFU0VUCiAgICAgYWxsIGNhbGxiYWNrcyBhcmUgcmVzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgbGVnYWN5IHdlYWsgKHN1cmNoYXJnZWQpIGZ1bmN0aW9uczoKLSAgICBleGFtcGxlcyBAcmVmIEZyYW1lRXZlbnRDYWxsYmFjaygpLCBAcmVmIEhBTF9EQ01JX0Vycm9yQ2FsbGJhY2soKS4KKyAgICBleGFtcGxlcyBGcmFtZUV2ZW50Q2FsbGJhY2soKSwgSEFMX0RDTUlfRXJyb3JDYWxsYmFjaygpLgogICAgIEV4Y2VwdGlvbiBkb25lIGZvciBNc3BJbml0IGFuZCBNc3BEZUluaXQgY2FsbGJhY2tzIHRoYXQgYXJlIHJlc3BlY3RpdmVseQotICAgIHJlc2V0IHRvIHRoZSBsZWdhY3kgd2VhayAoc3VyY2hhcmdlZCkgZnVuY3Rpb25zIGluIHRoZSBAcmVmIEhBTF9EQ01JX0luaXQKLSAgICBhbmQgQHJlZiAgSEFMX0RDTUlfRGVJbml0IG9ubHkgd2hlbiB0aGVzZSBjYWxsYmFja3MgYXJlIG51bGwgKG5vdCByZWdpc3RlcmVkIGJlZm9yZWhhbmQpLgotICAgIElmIG5vdCwgTXNwSW5pdCBvciBNc3BEZUluaXQgYXJlIG5vdCBudWxsLCB0aGUgQHJlZiBIQUxfRENNSV9Jbml0IGFuZCBAcmVmIEhBTF9EQ01JX0RlSW5pdAorICAgIHJlc2V0IHRvIHRoZSBsZWdhY3kgd2VhayAoc3VyY2hhcmdlZCkgZnVuY3Rpb25zIGluIHRoZSBIQUxfRENNSV9Jbml0CisgICAgYW5kICBIQUxfRENNSV9EZUluaXQgb25seSB3aGVuIHRoZXNlIGNhbGxiYWNrcyBhcmUgbnVsbCAobm90IHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCkuCisgICAgSWYgbm90LCBNc3BJbml0IG9yIE1zcERlSW5pdCBhcmUgbm90IG51bGwsIHRoZSBIQUxfRENNSV9Jbml0IGFuZCBIQUxfRENNSV9EZUluaXQKICAgICBrZWVwIGFuZCB1c2UgdGhlIHVzZXIgTXNwSW5pdC9Nc3BEZUluaXQgY2FsbGJhY2tzIChyZWdpc3RlcmVkIGJlZm9yZWhhbmQpLgogCiAgICAgQ2FsbGJhY2tzIGNhbiBiZSByZWdpc3RlcmVkL3VucmVnaXN0ZXJlZCBpbiBSRUFEWSBzdGF0ZSBvbmx5LgpAQCAtMTExLDggKzEwMCw4IEBACiAgICAgaW4gUkVBRFkgb3IgUkVTRVQgc3RhdGUsIHRodXMgcmVnaXN0ZXJlZCAodXNlcikgTXNwSW5pdC9EZUluaXQgY2FsbGJhY2tzIGNhbiBiZSB1c2VkCiAgICAgZHVyaW5nIHRoZSBJbml0L0RlSW5pdC4KICAgICBJbiB0aGF0IGNhc2UgZmlyc3QgcmVnaXN0ZXIgdGhlIE1zcEluaXQvTXNwRGVJbml0IHVzZXIgY2FsbGJhY2tzCi0gICAgdXNpbmcgQHJlZiBIQUxfRENNSV9SZWdpc3RlckNhbGxiYWNrIGJlZm9yZSBjYWxsaW5nIEByZWYgSEFMX0RDTUlfRGVJbml0Ci0gICAgb3IgQHJlZiBIQUxfRENNSV9Jbml0IGZ1bmN0aW9uLgorICAgIHVzaW5nIEhBTF9EQ01JX1JlZ2lzdGVyQ2FsbGJhY2sgYmVmb3JlIGNhbGxpbmcgSEFMX0RDTUlfRGVJbml0CisgICAgb3IgSEFMX0RDTUlfSW5pdCBmdW5jdGlvbi4KIAogICAgIFdoZW4gdGhlIGNvbXBpbGF0aW9uIGRlZmluZSBVU0VfSEFMX0RDTUlfUkVHSVNURVJfQ0FMTEJBQ0tTIGlzIHNldCB0byAwIG9yCiAgICAgbm90IGRlZmluZWQsIHRoZSBjYWxsYmFjayByZWdpc3RlcmluZyBmZWF0dXJlIGlzIG5vdCBhdmFpbGFibGUKQEAgLTEyMCw2ICsxMDksMTYgQEAKIAogICBAZW5kdmVyYmF0aW0KICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQGF0dGVudGlvbgorICAqCisgICogQ29weXJpZ2h0IChjKSAyMDE2IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAqCisgICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlCisgICogaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc29mdHdhcmUgY29tcG9uZW50LgorICAqIElmIG5vIExJQ0VOU0UgZmlsZSBjb21lcyB3aXRoIHRoaXMgc29mdHdhcmUsIGl0IGlzIHByb3ZpZGVkIEFTLUlTLgorICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqLwogCiAvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMTE3NCwzICsxMTczLDUgQEAKIC8qKgogICAqIEB9CiAgICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKiogKEMpIENPUFlSSUdIVCBTVE1pY3JvZWxlY3Ryb25pY3MgKioqKipFTkQgT0YgRklMRSoqKiovCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmMnh4X2hhbF9kY21pX2V4LmMgYi9TcmMvc3RtMzJmMnh4X2hhbF9kY21pX2V4LmMKaW5kZXggOWI2Y2U0NS4uYWE3MzdkMiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjJ4eF9oYWxfZGNtaV9leC5jCisrKyBiL1NyYy9zdG0zMmYyeHhfaGFsX2RjbWlfZXguYwpAQCAtMjgsMyArMjgsNiBAQAogLyogUHJpdmF0ZSB2YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgZnVuY3Rpb24gcHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBFeHBvcnRlZCBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKiogKEMpIENPUFlSSUdIVCBTVE1pY3JvZWxlY3Ryb25pY3MgKioqKipFTkQgT0YgRklMRSoqKiovCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmMnh4X2hhbF9kbWEuYyBiL1NyYy9zdG0zMmYyeHhfaGFsX2RtYS5jCmluZGV4IDZmMDg2ZTMuLjdhOGY5NDEgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYyeHhfaGFsX2RtYS5jCisrKyBiL1NyYy9zdG0zMmYyeHhfaGFsX2RtYS5jCkBAIC0xNiw4ICsxNiw4IEBACiAgICogQ29weXJpZ2h0IChjKSAyMDE2IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAqCi0gICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlCi0gICogaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc29mdHdhcmUgY29tcG9uZW50LgorICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGVybXMgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbgorICAqIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvZnR3YXJlIGNvbXBvbmVudC4KICAgKiBJZiBubyBMSUNFTlNFIGZpbGUgY29tZXMgd2l0aCB0aGlzIHNvZnR3YXJlLCBpdCBpcyBwcm92aWRlZCBBUy1JUy4KICAgKgogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTk2NCw3ICs5NjQsNyBAQAogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIERNQSBTdHJlYW0uCiAgICogQHBhcmFtICBDYWxsYmFja0lEICAgICAgICAgICBVc2VyIENhbGxiYWNrIGlkZW50aWZpZXIKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIERNQV9IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSBhcyBwYXJhbWV0ZXIuCi0gICogQHBhcmFtICBwQ2FsbGJhY2sgICAgICAgICAgICBwb2ludGVyIHRvIHByaXZhdGUgY2FsbGJhY3NrIGZ1bmN0aW9uIHdoaWNoIGhhcyBwb2ludGVyIHRvIAorICAqIEBwYXJhbSAgcENhbGxiYWNrICAgICAgICAgICAgcG9pbnRlciB0byBwcml2YXRlIGNhbGxiYWNrIGZ1bmN0aW9uIHdoaWNoIGhhcyBwb2ludGVyIHRvIAogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgRE1BX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIGFzIHBhcmFtZXRlci4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8gICAgICAgICAgICAgICAgICAgICAgCkBAIC0xMzA2LDMgKzEzMDYsNCBAQAogLyoqCiAgICogQH0KICAgKi8KKwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjJ4eF9oYWxfZG1hX2V4LmMgYi9TcmMvc3RtMzJmMnh4X2hhbF9kbWFfZXguYwppbmRleCBmYTU3NzNlLi43YmUzMmVhIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmMnh4X2hhbF9kbWFfZXguYworKysgYi9TcmMvc3RtMzJmMnh4X2hhbF9kbWFfZXguYwpAQCAtMTMsOCArMTMsOCBAQAogICAqIENvcHlyaWdodCAoYykgMjAxNiBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgKgotICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGVybXMgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZQotICAqIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvZnR3YXJlIGNvbXBvbmVudC4KKyAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4KKyAgKiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCiAgICogSWYgbm8gTElDRU5TRSBmaWxlIGNvbWVzIHdpdGggdGhpcyBzb2Z0d2FyZSwgaXQgaXMgcHJvdmlkZWQgQVMtSVMuCiAgICoKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0zMTEsMyArMzExLDQgQEAKIC8qKgogICAqIEB9CiAgICovCisKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmYyeHhfaGFsX2V0aC5jIGIvU3JjL3N0bTMyZjJ4eF9oYWxfZXRoLmMKaW5kZXggZTA5ZDJmZC4uY2RhMDNmNiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjJ4eF9oYWxfZXRoLmMKKysrIGIvU3JjL3N0bTMyZjJ4eF9oYWxfZXRoLmMKQEAgLTc3MCw3ICs3NzAsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIFVucmVnaXN0ZXIgYW4gRVRIIENhbGxiYWNrCi0gICogICAgICAgICBFVEggY2FsbGFiY2sgaXMgcmVkaXJlY3RlZCB0byB0aGUgd2VhayBwcmVkZWZpbmVkIGNhbGxiYWNrCisgICogICAgICAgICBFVEggY2FsbGJhY2sgaXMgcmVkaXJlY3RlZCB0byB0aGUgd2VhayBwcmVkZWZpbmVkIGNhbGxiYWNrCiAgICogQHBhcmFtIGhldGggZXRoIGhhbmRsZQogICAqIEBwYXJhbSBDYWxsYmFja0lEIElEIG9mIHRoZSBjYWxsYmFjayB0byBiZSB1bnJlZ2lzdGVyZWQKICAgKiAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmYyeHhfaGFsX2V4dGkuYyBiL1NyYy9zdG0zMmYyeHhfaGFsX2V4dGkuYwppbmRleCBmN2ViZWE5Li44N2EyNjk0IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmMnh4X2hhbF9leHRpLmMKKysrIGIvU3JjL3N0bTMyZjJ4eF9oYWxfZXh0aS5jCkBAIC02NCw3ICs2NCw3IEBACiAgICAgICAgICgrKykgUHJvdmlkZSBleGl0aW5nIGhhbmRsZSBhcyBwYXJhbWV0ZXIuCiAgICAgICAgICgrKykgUHJvdmlkZSBwb2ludGVyIG9uIEVYVElfQ29uZmlnVHlwZURlZiBzdHJ1Y3R1cmUgYXMgc2Vjb25kIHBhcmFtZXRlci4KIAotICAgICgjKSBDbGVhciBFeHRpIGNvbmZpZ3VyYXRpb24gb2YgYSBkZWRpY2F0ZWQgbGluZSB1c2luZyBIQUxfRVhUSV9HZXRDb25maWdMaW5lKCkuCisgICAgKCMpIENsZWFyIEV4dGkgY29uZmlndXJhdGlvbiBvZiBhIGRlZGljYXRlZCBsaW5lIHVzaW5nIEhBTF9FWFRJX0NsZWFyQ29uZmlnTGluZSgpLgogICAgICAgICAoKyspIFByb3ZpZGUgZXhpdGluZyBoYW5kbGUgYXMgcGFyYW1ldGVyLgogCiAgICAgKCMpIFJlZ2lzdGVyIGNhbGxiYWNrIHRvIHRyZWF0IEV4dGkgaW50ZXJydXB0cyB1c2luZyBIQUxfRVhUSV9SZWdpc3RlckNhbGxiYWNrKCkuCkBAIC03NSw3ICs3NSw3IEBACiAKICAgICAoIykgR2V0IGludGVycnVwdCBwZW5kaW5nIGJpdCB1c2luZyBIQUxfRVhUSV9HZXRQZW5kaW5nKCkuCiAKLSAgICAoIykgQ2xlYXIgaW50ZXJydXB0IHBlbmRpbmcgYml0IHVzaW5nIEhBTF9FWFRJX0dldFBlbmRpbmcoKS4KKyAgICAoIykgQ2xlYXIgaW50ZXJydXB0IHBlbmRpbmcgYml0IHVzaW5nIEhBTF9FWFRJX0NsZWFyUGVuZGluZygpLgogCiAgICAgKCMpIEdlbmVyYXRlIHNvZnR3YXJlIGludGVycnVwdCB1c2luZyBIQUxfRVhUSV9HZW5lcmF0ZVNXSSgpLgogCkBAIC01NDUsMyArNTQ1LDQgQEAKIC8qKgogICAqIEB9CiAgICovCisKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmYyeHhfaGFsX2ZsYXNoLmMgYi9TcmMvc3RtMzJmMnh4X2hhbF9mbGFzaC5jCmluZGV4IDJiOTZlYjQuLjVmMTQ1YTYgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYyeHhfaGFsX2ZsYXNoLmMKKysrIGIvU3JjL3N0bTMyZjJ4eF9oYWxfZmxhc2guYwpAQCAtMTUsOCArMTUsOCBAQAogICAqIENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgKgotICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGVybXMgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZQotICAqIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvZnR3YXJlIGNvbXBvbmVudC4KKyAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4KKyAgKiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCiAgICogSWYgbm8gTElDRU5TRSBmaWxlIGNvbWVzIHdpdGggdGhpcyBzb2Z0d2FyZSwgaXQgaXMgcHJvdmlkZWQgQVMtSVMuCiAgICoKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC03NTcsMyArNzU3LDQgQEAKIC8qKgogICAqIEB9CiAgICovCisKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmYyeHhfaGFsX2ZsYXNoX2V4LmMgYi9TcmMvc3RtMzJmMnh4X2hhbF9mbGFzaF9leC5jCmluZGV4IGQwODBhOTIuLjNmMGE4YTcgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYyeHhfaGFsX2ZsYXNoX2V4LmMKKysrIGIvU3JjL3N0bTMyZjJ4eF9oYWxfZmxhc2hfZXguYwpAQCAtMTMsOCArMTMsOCBAQAogICAqIENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgKgotICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGVybXMgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZQotICAqIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvZnR3YXJlIGNvbXBvbmVudC4KKyAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4KKyAgKiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCiAgICogSWYgbm8gTElDRU5TRSBmaWxlIGNvbWVzIHdpdGggdGhpcyBzb2Z0d2FyZSwgaXQgaXMgcHJvdmlkZWQgQVMtSVMuCiAgICoKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC02OTMsMyArNjkzLDQgQEAKIC8qKgogICAqIEB9CiAgICovCisKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmYyeHhfaGFsX2dwaW8uYyBiL1NyYy9zdG0zMmYyeHhfaGFsX2dwaW8uYwppbmRleCA4OTIyMDZlLi4xN2QwZDAyIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmMnh4X2hhbF9ncGlvLmMKKysrIGIvU3JjL3N0bTMyZjJ4eF9oYWxfZ3Bpby5jCkBAIC0yNDcsMjMgKzI0Nyw2IEBACiAgICAgICAgIHRlbXAgfD0gKEdQSU9fR0VUX0lOREVYKEdQSU94KSA8PCAoNHUgKiAocG9zaXRpb24gJiAweDAzdSkpKTsKICAgICAgICAgU1lTQ0ZHLT5FWFRJQ1JbcG9zaXRpb24gPj4gMnVdID0gdGVtcDsKIAotICAgICAgICAvKiBDbGVhciBFWFRJIGxpbmUgY29uZmlndXJhdGlvbiAqLwotICAgICAgICB0ZW1wID0gRVhUSS0+SU1SOwotICAgICAgICB0ZW1wICY9IH4oaW9jdXJyZW50KTsKLSAgICAgICAgaWYoKEdQSU9fSW5pdC0+TW9kZSAmIEVYVElfSVQpICE9IDB4MDB1KQotICAgICAgICB7Ci0gICAgICAgICAgdGVtcCB8PSBpb2N1cnJlbnQ7Ci0gICAgICAgIH0KLSAgICAgICAgRVhUSS0+SU1SID0gdGVtcDsKLQotICAgICAgICB0ZW1wID0gRVhUSS0+RU1SOwotICAgICAgICB0ZW1wICY9IH4oaW9jdXJyZW50KTsKLSAgICAgICAgaWYoKEdQSU9fSW5pdC0+TW9kZSAmIEVYVElfRVZUKSAhPSAweDAwdSkKLSAgICAgICAgewotICAgICAgICAgIHRlbXAgfD0gaW9jdXJyZW50OwotICAgICAgICB9Ci0gICAgICAgIEVYVEktPkVNUiA9IHRlbXA7Ci0KICAgICAgICAgLyogQ2xlYXIgUmlzaW5nIEZhbGxpbmcgZWRnZSBjb25maWd1cmF0aW9uICovCiAgICAgICAgIHRlbXAgPSBFWFRJLT5SVFNSOwogICAgICAgICB0ZW1wICY9IH4oaW9jdXJyZW50KTsKQEAgLTI4MCw2ICsyNjMsMjMgQEAKICAgICAgICAgICB0ZW1wIHw9IGlvY3VycmVudDsKICAgICAgICAgfQogICAgICAgICBFWFRJLT5GVFNSID0gdGVtcDsKKworICAgICAgICB0ZW1wID0gRVhUSS0+RU1SOworICAgICAgICB0ZW1wICY9IH4oaW9jdXJyZW50KTsKKyAgICAgICAgaWYoKEdQSU9fSW5pdC0+TW9kZSAmIEVYVElfRVZUKSAhPSAweDAwdSkKKyAgICAgICAgeworICAgICAgICAgIHRlbXAgfD0gaW9jdXJyZW50OworICAgICAgICB9CisgICAgICAgIEVYVEktPkVNUiA9IHRlbXA7CisKKyAgICAgICAgLyogQ2xlYXIgRVhUSSBsaW5lIGNvbmZpZ3VyYXRpb24gKi8KKyAgICAgICAgdGVtcCA9IEVYVEktPklNUjsKKyAgICAgICAgdGVtcCAmPSB+KGlvY3VycmVudCk7CisgICAgICAgIGlmKChHUElPX0luaXQtPk1vZGUgJiBFWFRJX0lUKSAhPSAweDAwdSkKKyAgICAgICAgeworICAgICAgICAgIHRlbXAgfD0gaW9jdXJyZW50OworICAgICAgICB9CisgICAgICAgIEVYVEktPklNUiA9IHRlbXA7CiAgICAgICB9CiAgICAgfQogCkBAIC0zMjQsOCArMzI0LDggQEAKICAgICAgICAgRVhUSS0+RU1SICY9IH4oKHVpbnQzMl90KWlvY3VycmVudCk7CiAKICAgICAgICAgLyogQ2xlYXIgUmlzaW5nIEZhbGxpbmcgZWRnZSBjb25maWd1cmF0aW9uICovCi0gICAgICAgIEVYVEktPlJUU1IgJj0gfigodWludDMyX3QpaW9jdXJyZW50KTsKICAgICAgICAgRVhUSS0+RlRTUiAmPSB+KCh1aW50MzJfdClpb2N1cnJlbnQpOworICAgICAgICBFWFRJLT5SVFNSICY9IH4oKHVpbnQzMl90KWlvY3VycmVudCk7CiAKICAgICAgICAgLyogQ29uZmlndXJlIHRoZSBFeHRlcm5hbCBJbnRlcnJ1cHQgb3IgZXZlbnQgZm9yIHRoZSBjdXJyZW50IElPICovCiAgICAgICAgIHRtcCA9IDB4MEZ1TCA8PCAoNHUgKiAocG9zaXRpb24gJiAweDAzdSkpOwpAQCAtNTMxLDMgKzUzMSw0IEBACiAvKioKICAgKiBAfQogICAqLworCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmMnh4X2hhbF9oYXNoLmMgYi9TcmMvc3RtMzJmMnh4X2hhbF9oYXNoLmMKaW5kZXggMTQwOWI2Ni4uNmE3MmIzZCAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjJ4eF9oYWxfaGFzaC5jCisrKyBiL1NyYy9zdG0zMmYyeHhfaGFsX2hhc2guYwpAQCAtMTUsNyArMTUsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIENvcHlyaWdodCAoYykgMjAxNiBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgKgogICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGVybXMgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZQpAQCAtMTU0LDkgKzE1NCw5IEBACiAgICAgIFsuLl0KICAgICAgICgjKSBUaGUgY29tcGlsYXRpb24gZGVmaW5lICBVU0VfSEFMX0hBU0hfUkVHSVNURVJfQ0FMTEJBQ0tTIHdoZW4gc2V0IHRvIDEKICAgICAgICAgICBhbGxvd3MgdGhlIHVzZXIgdG8gY29uZmlndXJlIGR5bmFtaWNhbGx5IHRoZSBkcml2ZXIgY2FsbGJhY2tzLgotICAgICAgICAgIFVzZSBmdW5jdGlvbiBAcmVmIEhBTF9IQVNIX1JlZ2lzdGVyQ2FsbGJhY2soKSB0byByZWdpc3RlciBhIHVzZXIgY2FsbGJhY2suCisgICAgICAgICAgVXNlIGZ1bmN0aW9uIEhBTF9IQVNIX1JlZ2lzdGVyQ2FsbGJhY2soKSB0byByZWdpc3RlciBhIHVzZXIgY2FsbGJhY2suCiAKLSAgICAgICgjKSBGdW5jdGlvbiBAcmVmIEhBTF9IQVNIX1JlZ2lzdGVyQ2FsbGJhY2soKSBhbGxvd3MgdG8gcmVnaXN0ZXIgZm9sbG93aW5nIGNhbGxiYWNrczoKKyAgICAgICgjKSBGdW5jdGlvbiBIQUxfSEFTSF9SZWdpc3RlckNhbGxiYWNrKCkgYWxsb3dzIHRvIHJlZ2lzdGVyIGZvbGxvd2luZyBjYWxsYmFja3M6CiAgICAgICAgICAgICAoKykgSW5DcGx0Q2FsbGJhY2sgICAgOiBjYWxsYmFjayBmb3IgaW5wdXQgY29tcGxldGlvbi4KICAgICAgICAgICAgICgrKSBEZ3N0Q3BsdENhbGxiYWNrICA6IGNhbGxiYWNrIGZvciBkaWdlc3QgY29tcHV0YXRpb24gY29tcGxldGlvbi4KICAgICAgICAgICAgICgrKSBFcnJvckNhbGxiYWNrICAgICA6IGNhbGxiYWNrIGZvciBlcnJvci4KQEAgLTE2NSw5ICsxNjUsOSBAQAogICAgICAgICAgIFRoaXMgZnVuY3Rpb24gdGFrZXMgYXMgcGFyYW1ldGVycyB0aGUgSEFMIHBlcmlwaGVyYWwgaGFuZGxlLCB0aGUgQ2FsbGJhY2sgSUQKICAgICAgICAgICBhbmQgYSBwb2ludGVyIHRvIHRoZSB1c2VyIGNhbGxiYWNrIGZ1bmN0aW9uLgogCi0gICAgICAoIykgVXNlIGZ1bmN0aW9uIEByZWYgSEFMX0hBU0hfVW5SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVzZXQgYSBjYWxsYmFjayB0byB0aGUgZGVmYXVsdAorICAgICAgKCMpIFVzZSBmdW5jdGlvbiBIQUxfSEFTSF9VblJlZ2lzdGVyQ2FsbGJhY2soKSB0byByZXNldCBhIGNhbGxiYWNrIHRvIHRoZSBkZWZhdWx0CiAgICAgICAgICAgd2VhayAoc3VyY2hhcmdlZCkgZnVuY3Rpb24uCi0gICAgICAgICAgQHJlZiBIQUxfSEFTSF9VblJlZ2lzdGVyQ2FsbGJhY2soKSB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsCisgICAgICAgICAgSEFMX0hBU0hfVW5SZWdpc3RlckNhbGxiYWNrKCkgdGFrZXMgYXMgcGFyYW1ldGVycyB0aGUgSEFMIHBlcmlwaGVyYWwgaGFuZGxlLAogICAgICAgICAgIGFuZCB0aGUgQ2FsbGJhY2sgSUQuCiAgICAgICAgICAgVGhpcyBmdW5jdGlvbiBhbGxvd3MgdG8gcmVzZXQgZm9sbG93aW5nIGNhbGxiYWNrczoKICAgICAgICAgICAgICgrKSBJbkNwbHRDYWxsYmFjayAgICA6IGNhbGxiYWNrIGZvciBpbnB1dCBjb21wbGV0aW9uLgpAQCAtMTc2LDEzICsxNzYsMTMgQEAKICAgICAgICAgICAgICgrKSBNc3BJbml0Q2FsbGJhY2sgICA6IEhBU0ggTXNwSW5pdC4KICAgICAgICAgICAgICgrKSBNc3BEZUluaXRDYWxsYmFjayA6IEhBU0ggTXNwRGVJbml0LgogCi0gICAgICAoIykgQnkgZGVmYXVsdCwgYWZ0ZXIgdGhlIEByZWYgSEFMX0hBU0hfSW5pdCBhbmQgaWYgdGhlIHN0YXRlIGlzIEhBTF9IQVNIX1NUQVRFX1JFU0VUCisgICAgICAoIykgQnkgZGVmYXVsdCwgYWZ0ZXIgdGhlIEhBTF9IQVNIX0luaXQgYW5kIGlmIHRoZSBzdGF0ZSBpcyBIQUxfSEFTSF9TVEFURV9SRVNFVAogICAgICAgICAgIGFsbCBjYWxsYmFja3MgYXJlIHJlc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIGxlZ2FjeSB3ZWFrIChzdXJjaGFyZ2VkKSBmdW5jdGlvbnM6Ci0gICAgICAgICAgZXhhbXBsZXMgQHJlZiBIQUxfSEFTSF9JbkNwbHRDYWxsYmFjaygpLCBAcmVmIEhBTF9IQVNIX0Rnc3RDcGx0Q2FsbGJhY2soKQorICAgICAgICAgIGV4YW1wbGVzIEhBTF9IQVNIX0luQ3BsdENhbGxiYWNrKCksIEhBTF9IQVNIX0Rnc3RDcGx0Q2FsbGJhY2soKQogICAgICAgICAgIEV4Y2VwdGlvbiBkb25lIGZvciBNc3BJbml0IGFuZCBNc3BEZUluaXQgY2FsbGJhY2tzIHRoYXQgYXJlIHJlc3BlY3RpdmVseQotICAgICAgICAgIHJlc2V0IHRvIHRoZSBsZWdhY3kgd2VhayAoc3VyY2hhcmdlZCkgZnVuY3Rpb25zIGluIHRoZSBAcmVmIEhBTF9IQVNIX0luaXQKLSAgICAgICAgICBhbmQgQHJlZiBIQUxfSEFTSF9EZUluaXQgb25seSB3aGVuIHRoZXNlIGNhbGxiYWNrcyBhcmUgbnVsbCAobm90IHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCkKLSAgICAgICAgICBJZiBub3QsIE1zcEluaXQgb3IgTXNwRGVJbml0IGFyZSBub3QgbnVsbCwgdGhlIEByZWYgSEFMX0hBU0hfSW5pdCBhbmQgQHJlZiBIQUxfSEFTSF9EZUluaXQKKyAgICAgICAgICByZXNldCB0byB0aGUgbGVnYWN5IHdlYWsgKHN1cmNoYXJnZWQpIGZ1bmN0aW9ucyBpbiB0aGUgSEFMX0hBU0hfSW5pdAorICAgICAgICAgIGFuZCBIQUxfSEFTSF9EZUluaXQgb25seSB3aGVuIHRoZXNlIGNhbGxiYWNrcyBhcmUgbnVsbCAobm90IHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCkKKyAgICAgICAgICBJZiBub3QsIE1zcEluaXQgb3IgTXNwRGVJbml0IGFyZSBub3QgbnVsbCwgdGhlIEhBTF9IQVNIX0luaXQgYW5kIEhBTF9IQVNIX0RlSW5pdAogICAgICAgICAgIGtlZXAgYW5kIHVzZSB0aGUgdXNlciBNc3BJbml0L01zcERlSW5pdCBjYWxsYmFja3MgKHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCkuCiAKICAgICAgICAgICBDYWxsYmFja3MgY2FuIGJlIHJlZ2lzdGVyZWQvdW5yZWdpc3RlcmVkIGluIFJFQURZIHN0YXRlIG9ubHkuCkBAIC0xOTAsOCArMTkwLDggQEAKICAgICAgICAgICBpbiBSRUFEWSBvciBSRVNFVCBzdGF0ZSwgdGh1cyByZWdpc3RlcmVkICh1c2VyKSBNc3BJbml0L0RlSW5pdCBjYWxsYmFja3MgY2FuIGJlIHVzZWQKICAgICAgICAgICBkdXJpbmcgdGhlIEluaXQvRGVJbml0LgogICAgICAgICAgIEluIHRoYXQgY2FzZSBmaXJzdCByZWdpc3RlciB0aGUgTXNwSW5pdC9Nc3BEZUluaXQgdXNlciBjYWxsYmFja3MKLSAgICAgICAgICB1c2luZyBAcmVmIEhBTF9IQVNIX1JlZ2lzdGVyQ2FsbGJhY2sgYmVmb3JlIGNhbGxpbmcgQHJlZiBIQUxfSEFTSF9EZUluaXQKLSAgICAgICAgICBvciBAcmVmIEhBTF9IQVNIX0luaXQgZnVuY3Rpb24uCisgICAgICAgICAgdXNpbmcgSEFMX0hBU0hfUmVnaXN0ZXJDYWxsYmFjayBiZWZvcmUgY2FsbGluZyBIQUxfSEFTSF9EZUluaXQKKyAgICAgICAgICBvciBIQUxfSEFTSF9Jbml0IGZ1bmN0aW9uLgogCiAgICAgICAgICAgV2hlbiBUaGUgY29tcGlsYXRpb24gZGVmaW5lIFVTRV9IQUxfSEFTSF9SRUdJU1RFUl9DQUxMQkFDS1MgaXMgc2V0IHRvIDAgb3IKICAgICAgICAgICBub3QgZGVmaW5lZCwgdGhlIGNhbGxiYWNrIHJlZ2lzdGVyaW5nIGZlYXR1cmUgaXMgbm90IGF2YWlsYWJsZQpAQCAtMTYyMSw3ICsxNjIxLDcgQEAKICAgSEFTSF9IYW5kbGVUeXBlRGVmICpoaGFzaCA9IChIQVNIX0hhbmRsZVR5cGVEZWYgKikoKERNQV9IYW5kbGVUeXBlRGVmICopaGRtYSktPlBhcmVudDsKICAgdWludDMyX3QgaW5wdXRhZGRyOwogICB1aW50MzJfdCBidWZmZXJzaXplOwotICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CisgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1czsKIAogICBpZiAoaGhhc2gtPlN0YXRlICE9IEhBTF9IQVNIX1NUQVRFX1NVU1BFTkRFRCkKICAgewpAQCAtMTcyNCw4ICsxNzI0LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoYnVmZmVyc2l6ZSAlIDRVKSAhPSAwVSkgPyAoKGJ1ZmZlcnNpemUgKyAoNFUgLSAoYnVmZmVyc2l6ZSAlIDRVKSkpIC8gNFUpIDogXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJ1ZmZlcnNpemUgLyA0VSkpKTsKIAotCi0KICAgICAgIC8qIEVuYWJsZSBETUEgcmVxdWVzdHMgKi8KICAgICAgIFNFVF9CSVQoSEFTSC0+Q1IsIEhBU0hfQ1JfRE1BRSk7CiAKQEAgLTI4MjgsOCArMjgyNiw4IEBACiAgICAgICAgICAgIFVwZGF0ZSBIYXNoSW5Db3VudCBhbmQgcEhhc2hJbkJ1ZmZQdHIgYWNjb3JkaW5nbHkuICovCiAgICAgICAgIGhoYXNoLT5IYXNoSW5Db3VudCA9IFNpemVWYXI7CiAgICAgICAgIGhoYXNoLT5wSGFzaEluQnVmZlB0ciA9ICh1aW50OF90ICopaW5wdXRhZGRyOwotICAgICAgICBfX0hBTF9IQVNIX1NFVF9OQlZBTElEQklUUygKLSAgICAgICAgICBTaXplVmFyKTsgIC8qIFVwZGF0ZSB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgbnVtYmVyIG9mIHZhbGlkIGJpdHMgaW4gbGFzdCB3b3JkIG9mIHRoZSBtZXNzYWdlICovCisgICAgICAgIC8qIFVwZGF0ZSB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgbnVtYmVyIG9mIHZhbGlkIGJpdHMgaW4gbGFzdCB3b3JkIG9mIHRoZSBtZXNzYWdlICovCisgICAgICAgIF9fSEFMX0hBU0hfU0VUX05CVkFMSURCSVRTKFNpemVWYXIpOwogICAgICAgICBoaGFzaC0+cEhhc2hPdXRCdWZmUHRyID0gcE91dEJ1ZmZlcjsgIC8qIFBvaW50cyBhdCB0aGUgY29tcHV0ZWQgZGlnZXN0ICovCiAgICAgICAgIGlmIChpbml0aWFsaXphdGlvbl9za2lwcGVkID09IDFVKQogICAgICAgICB7CkBAIC0zMzY1LDYgKzMzNjMsNyBAQAogICAgIHN0YXR1cyA9IEhBTF9ETUFfU3RhcnRfSVQoaGhhc2gtPmhkbWFpbiwgaW5wdXRhZGRyLCAodWludDMyX3QpJkhBU0gtPkRJTiwgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKGlucHV0U2l6ZSAlIDRVKSAhPSAwVSkgPyAoKGlucHV0U2l6ZSArICg0VSAtIChpbnB1dFNpemUgJSA0VSkpKSAvIDRVKSBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChpbnB1dFNpemUgLyA0VSkpKTsKKwogICAgIC8qIEVuYWJsZSBETUEgcmVxdWVzdHMgKi8KICAgICBTRVRfQklUKEhBU0gtPkNSLCBIQVNIX0NSX0RNQUUpOwogCkBAIC0zMzk5LDMgKzMzOTgsNCBAQAogLyoqCiAgICogQH0KICAgKi8KKwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjJ4eF9oYWxfaGNkLmMgYi9TcmMvc3RtMzJmMnh4X2hhbF9oY2QuYwppbmRleCBlNDE5MGMyLi40NzYwMzYzIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmMnh4X2hhbF9oY2QuYworKysgYi9TcmMvc3RtMzJmMnh4X2hhbF9oY2QuYwpAQCAtMTk3LDI0ICsxOTcsMjIgQEAKICAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBmcm9tIDAgdG8zMksKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9IQ0RfSENfSW5pdChIQ0RfSGFuZGxlVHlwZURlZiAqaGhjZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGNoX251bSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGVwbnVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgZGV2X2FkZHJlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBzcGVlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGVwX3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgbXBzKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hDRF9IQ19Jbml0KEhDRF9IYW5kbGVUeXBlRGVmICpoaGNkLCB1aW50OF90IGNoX251bSwgdWludDhfdCBlcG51bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGRldl9hZGRyZXNzLCB1aW50OF90IHNwZWVkLCB1aW50OF90IGVwX3R5cGUsIHVpbnQxNl90IG1wcykKIHsKICAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzOworICB1aW50MzJfdCBIb3N0Q29yZVNwZWVkOworICB1aW50MzJfdCBIQ2NoYXJNcHMgPSBtcHM7CiAKICAgX19IQUxfTE9DSyhoaGNkKTsKICAgaGhjZC0+aGNbY2hfbnVtXS5kb19waW5nID0gMFU7CiAgIGhoY2QtPmhjW2NoX251bV0uZGV2X2FkZHIgPSBkZXZfYWRkcmVzczsKLSAgaGhjZC0+aGNbY2hfbnVtXS5tYXhfcGFja2V0ID0gbXBzOwogICBoaGNkLT5oY1tjaF9udW1dLmNoX251bSA9IGNoX251bTsKICAgaGhjZC0+aGNbY2hfbnVtXS5lcF90eXBlID0gZXBfdHlwZTsKICAgaGhjZC0+aGNbY2hfbnVtXS5lcF9udW0gPSBlcG51bSAmIDB4N0ZVOwogCisgICh2b2lkKUhBTF9IQ0RfSENfQ2xlYXJIdWJJbmZvKGhoY2QsIGNoX251bSk7CisKICAgaWYgKChlcG51bSAmIDB4ODBVKSA9PSAweDgwVSkKICAgewogICAgIGhoY2QtPmhjW2NoX251bV0uZXBfaXNfaW4gPSAxVTsKQEAgLTIyNCwxNSArMjIyLDI3IEBACiAgICAgaGhjZC0+aGNbY2hfbnVtXS5lcF9pc19pbiA9IDBVOwogICB9CiAKLSAgaGhjZC0+aGNbY2hfbnVtXS5zcGVlZCA9IHNwZWVkOworICBIb3N0Q29yZVNwZWVkID0gVVNCX0dldEhvc3RTcGVlZChoaGNkLT5JbnN0YW5jZSk7CiAKLSAgc3RhdHVzID0gIFVTQl9IQ19Jbml0KGhoY2QtPkluc3RhbmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgY2hfbnVtLAotICAgICAgICAgICAgICAgICAgICAgICAgZXBudW0sCi0gICAgICAgICAgICAgICAgICAgICAgICBkZXZfYWRkcmVzcywKLSAgICAgICAgICAgICAgICAgICAgICAgIHNwZWVkLAotICAgICAgICAgICAgICAgICAgICAgICAgZXBfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1wcyk7CisgIGlmIChlcF90eXBlID09IEVQX1RZUEVfSVNPQykKKyAgeworICAgIC8qIEZTIGRldmljZSBwbHVnZ2VkIHRvIEhTIEhVQiAqLworICAgIGlmICgoc3BlZWQgPT0gSENEX0RFVklDRV9TUEVFRF9GVUxMKSAmJiAoSG9zdENvcmVTcGVlZCA9PSBIUFJUMF9QUlRTUERfSElHSF9TUEVFRCkpCisgICAgeworICAgICAgaWYgKEhDY2hhck1wcyA+IElTT19TUExUX01QUykKKyAgICAgIHsKKyAgICAgICAgLyogSVNPIE1heCBQYWNrZXQgU2l6ZSBmb3IgU3BsaXQgbW9kZSAqLworICAgICAgICBIQ2NoYXJNcHMgPSBJU09fU1BMVF9NUFM7CisgICAgICB9CisgICAgfQorICB9CisKKyAgaGhjZC0+aGNbY2hfbnVtXS5zcGVlZCA9IHNwZWVkOworICBoaGNkLT5oY1tjaF9udW1dLm1heF9wYWNrZXQgPSAodWludDE2X3QpSENjaGFyTXBzOworCisgIHN0YXR1cyA9ICBVU0JfSENfSW5pdChoaGNkLT5JbnN0YW5jZSwgY2hfbnVtLCBlcG51bSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRldl9hZGRyZXNzLCBzcGVlZCwgZXBfdHlwZSwgKHVpbnQxNl90KUhDY2hhck1wcyk7CisKICAgX19IQUxfVU5MT0NLKGhoY2QpOwogCiAgIHJldHVybiBzdGF0dXM7CkBAIC0yNTAsNyArMjYwLDcgQEAKICAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwogCiAgIF9fSEFMX0xPQ0soaGhjZCk7Ci0gICh2b2lkKVVTQl9IQ19IYWx0KGhoY2QtPkluc3RhbmNlLCAodWludDhfdCljaF9udW0pOworICAodm9pZClVU0JfSENfSGFsdChoaGNkLT5JbnN0YW5jZSwgY2hfbnVtKTsKICAgX19IQUxfVU5MT0NLKGhoY2QpOwogCiAgIHJldHVybiBzdGF0dXM7CkBAIC0zODksMjQgKzM5OSw0MSBAQAogICBzd2l0Y2ggKGVwX3R5cGUpCiAgIHsKICAgICBjYXNlIEVQX1RZUEVfQ1RSTDoKLSAgICAgIGlmICgodG9rZW4gPT0gMVUpICYmIChkaXJlY3Rpb24gPT0gMFUpKSAvKnNlbmQgZGF0YSAqLworICAgICAgaWYgKHRva2VuID09IDFVKSAvKiBzZW5kIGRhdGEgKi8KICAgICAgIHsKLSAgICAgICAgaWYgKGxlbmd0aCA9PSAwVSkKKyAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSAwVSkKICAgICAgICAgewotICAgICAgICAgIC8qIEZvciBTdGF0dXMgT1VUIHN0YWdlLCBMZW5ndGg9PTAsIFN0YXR1cyBPdXQgUElEID0gMSAqLwotICAgICAgICAgIGhoY2QtPmhjW2NoX251bV0udG9nZ2xlX291dCA9IDFVOwotICAgICAgICB9CisgICAgICAgICAgaWYgKGxlbmd0aCA9PSAwVSkKKyAgICAgICAgICB7CisgICAgICAgICAgICAvKiBGb3IgU3RhdHVzIE9VVCBzdGFnZSwgTGVuZ3RoID09IDBVLCBTdGF0dXMgT3V0IFBJRCA9IDEgKi8KKyAgICAgICAgICAgIGhoY2QtPmhjW2NoX251bV0udG9nZ2xlX291dCA9IDFVOworICAgICAgICAgIH0KIAotICAgICAgICAvKiBTZXQgdGhlIERhdGEgVG9nZ2xlIGJpdCBhcyBwZXIgdGhlIEZsYWcgKi8KLSAgICAgICAgaWYgKGhoY2QtPmhjW2NoX251bV0udG9nZ2xlX291dCA9PSAwVSkKLSAgICAgICAgewotICAgICAgICAgIC8qIFB1dCB0aGUgUElEIDAgKi8KLSAgICAgICAgICBoaGNkLT5oY1tjaF9udW1dLmRhdGFfcGlkID0gSENfUElEX0RBVEEwOworICAgICAgICAgIC8qIFNldCB0aGUgRGF0YSBUb2dnbGUgYml0IGFzIHBlciB0aGUgRmxhZyAqLworICAgICAgICAgIGlmIChoaGNkLT5oY1tjaF9udW1dLnRvZ2dsZV9vdXQgPT0gMFUpCisgICAgICAgICAgeworICAgICAgICAgICAgLyogUHV0IHRoZSBQSUQgMCAqLworICAgICAgICAgICAgaGhjZC0+aGNbY2hfbnVtXS5kYXRhX3BpZCA9IEhDX1BJRF9EQVRBMDsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFB1dCB0aGUgUElEIDEgKi8KKyAgICAgICAgICAgIGhoY2QtPmhjW2NoX251bV0uZGF0YV9waWQgPSBIQ19QSURfREFUQTE7CisgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAgIC8qIFB1dCB0aGUgUElEIDEgKi8KLSAgICAgICAgICBoaGNkLT5oY1tjaF9udW1dLmRhdGFfcGlkID0gSENfUElEX0RBVEExOworICAgICAgICAgIGlmIChoaGNkLT5oY1tjaF9udW1dLmRvX3NzcGxpdCA9PSAxVSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoaGhjZC0+aGNbY2hfbnVtXS50b2dnbGVfaW4gPT0gMFUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGhoY2QtPmhjW2NoX251bV0uZGF0YV9waWQgPSBIQ19QSURfREFUQTA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGhoY2QtPmhjW2NoX251bV0uZGF0YV9waWQgPSBIQ19QSURfREFUQTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICB9CiAgICAgICBicmVhazsKQEAgLTUzNywxNCArNTY0LDIyIEBACiAKICAgICAgIGlmICgoVVNCeF9IUFJUMCAmIFVTQl9PVEdfSFBSVF9QQ1NUUykgPT0gMFUpCiAgICAgICB7CisgICAgICAgIC8qIEZsdXNoIFVTQiBGaWZvICovCisgICAgICAgICh2b2lkKVVTQl9GbHVzaFR4RmlmbyhVU0J4LCAweDEwVSk7CisgICAgICAgICh2b2lkKVVTQl9GbHVzaFJ4RmlmbyhVU0J4KTsKKworICAgICAgICBpZiAoaGhjZC0+SW5pdC5waHlfaXRmYWNlID09IFVTQl9PVEdfRU1CRURERURfUEhZKQorICAgICAgICB7CisgICAgICAgICAgLyogUmVzdG9yZSBGUyBDbG9jayAqLworICAgICAgICAgICh2b2lkKVVTQl9Jbml0RlNMU1BDbGtTZWwoaGhjZC0+SW5zdGFuY2UsIEhDRkdfNDhfTUhaKTsKKyAgICAgICAgfQorCiAgICAgICAgIC8qIEhhbmRsZSBIb3N0IFBvcnQgRGlzY29ubmVjdCBJbnRlcnJ1cHQgKi8KICNpZiAoVVNFX0hBTF9IQ0RfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDFVKQogICAgICAgICBoaGNkLT5EaXNjb25uZWN0Q2FsbGJhY2soaGhjZCk7CiAjZWxzZQogICAgICAgICBIQUxfSENEX0Rpc2Nvbm5lY3RfQ2FsbGJhY2soaGhjZCk7CiAjZW5kaWYgLyogVVNFX0hBTF9IQ0RfUkVHSVNURVJfQ0FMTEJBQ0tTICovCi0KLSAgICAgICAgKHZvaWQpVVNCX0luaXRGU0xTUENsa1NlbChoaGNkLT5JbnN0YW5jZSwgSENGR180OF9NSFopOwogICAgICAgfQogICAgIH0KIApAQCAtNTY2LDE2ICs2MDEsNiBAQAogICAgICAgX19IQUxfSENEX0NMRUFSX0ZMQUcoaGhjZCwgVVNCX09UR19HSU5UU1RTX1NPRik7CiAgICAgfQogCi0gICAgLyogSGFuZGxlIFJ4IFF1ZXVlIExldmVsIEludGVycnVwdHMgKi8KLSAgICBpZiAoKF9fSEFMX0hDRF9HRVRfRkxBRyhoaGNkLCBVU0JfT1RHX0dJTlRTVFNfUlhGTFZMKSkgIT0gMFUpCi0gICAgewotICAgICAgVVNCX01BU0tfSU5URVJSVVBUKGhoY2QtPkluc3RhbmNlLCBVU0JfT1RHX0dJTlRTVFNfUlhGTFZMKTsKLQotICAgICAgSENEX1JYUUxWTF9JUlFIYW5kbGVyKGhoY2QpOwotCi0gICAgICBVU0JfVU5NQVNLX0lOVEVSUlVQVChoaGNkLT5JbnN0YW5jZSwgVVNCX09UR19HSU5UU1RTX1JYRkxWTCk7Ci0gICAgfQotCiAgICAgLyogSGFuZGxlIEhvc3QgY2hhbm5lbCBJbnRlcnJ1cHQgKi8KICAgICBpZiAoX19IQUxfSENEX0dFVF9GTEFHKGhoY2QsIFVTQl9PVEdfR0lOVFNUU19IQ0lOVCkpCiAgICAgewpAQCAtNTk2LDYgKzYyMSwxNiBAQAogICAgICAgfQogICAgICAgX19IQUxfSENEX0NMRUFSX0ZMQUcoaGhjZCwgVVNCX09UR19HSU5UU1RTX0hDSU5UKTsKICAgICB9CisKKyAgICAvKiBIYW5kbGUgUnggUXVldWUgTGV2ZWwgSW50ZXJydXB0cyAqLworICAgIGlmICgoX19IQUxfSENEX0dFVF9GTEFHKGhoY2QsIFVTQl9PVEdfR0lOVFNUU19SWEZMVkwpKSAhPSAwVSkKKyAgICB7CisgICAgICBVU0JfTUFTS19JTlRFUlJVUFQoaGhjZC0+SW5zdGFuY2UsIFVTQl9PVEdfR0lOVFNUU19SWEZMVkwpOworCisgICAgICBIQ0RfUlhRTFZMX0lSUUhhbmRsZXIoaGhjZCk7CisKKyAgICAgIFVTQl9VTk1BU0tfSU5URVJSVVBUKGhoY2QtPkluc3RhbmNlLCBVU0JfT1RHX0dJTlRTVFNfUlhGTFZMKTsKKyAgICB9CiAgIH0KIH0KIApAQCAtMTA3OSw3ICsxMTE0LDcgQEAKICAgKiBAcGFyYW0gIGhoY2QgSENEIGhhbmRsZQogICAqIEByZXR2YWwgSEFMIHN0YXRlCiAgICovCi1IQ0RfU3RhdGVUeXBlRGVmIEhBTF9IQ0RfR2V0U3RhdGUoSENEX0hhbmRsZVR5cGVEZWYgKmhoY2QpCitIQ0RfU3RhdGVUeXBlRGVmIEhBTF9IQ0RfR2V0U3RhdGUoSENEX0hhbmRsZVR5cGVEZWYgY29uc3QgKmhoY2QpCiB7CiAgIHJldHVybiBoaGNkLT5TdGF0ZTsKIH0KQEAgLTEwOTgsNyArMTEzMyw3IEBACiAgICogICAgICAgICAgICBVUkJfRVJST1IvCiAgICogICAgICAgICAgICBVUkJfU1RBTEwKICAgKi8KLUhDRF9VUkJTdGF0ZVR5cGVEZWYgSEFMX0hDRF9IQ19HZXRVUkJTdGF0ZShIQ0RfSGFuZGxlVHlwZURlZiAqaGhjZCwgdWludDhfdCBjaG51bSkKK0hDRF9VUkJTdGF0ZVR5cGVEZWYgSEFMX0hDRF9IQ19HZXRVUkJTdGF0ZShIQ0RfSGFuZGxlVHlwZURlZiBjb25zdCAqaGhjZCwgdWludDhfdCBjaG51bSkKIHsKICAgcmV0dXJuIGhoY2QtPmhjW2NobnVtXS51cmJfc3RhdGU7CiB9CkBAIC0xMTExLDcgKzExNDYsNyBAQAogICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgZnJvbSAxIHRvIDE1CiAgICogQHJldHZhbCBsYXN0IHRyYW5zZmVyIHNpemUgaW4gYnl0ZQogICAqLwotdWludDMyX3QgSEFMX0hDRF9IQ19HZXRYZmVyQ291bnQoSENEX0hhbmRsZVR5cGVEZWYgKmhoY2QsIHVpbnQ4X3QgY2hudW0pCit1aW50MzJfdCBIQUxfSENEX0hDX0dldFhmZXJDb3VudChIQ0RfSGFuZGxlVHlwZURlZiBjb25zdCAqaGhjZCwgdWludDhfdCBjaG51bSkKIHsKICAgcmV0dXJuIGhoY2QtPmhjW2NobnVtXS54ZmVyX2NvdW50OwogfQpAQCAtMTEzMyw3ICsxMTY4LDcgQEAKICAgKiAgICAgICAgICAgIEhDX0JCTEVSUi8KICAgKiAgICAgICAgICAgIEhDX0RBVEFUR0xFUlIKICAgKi8KLUhDRF9IQ1N0YXRlVHlwZURlZiAgSEFMX0hDRF9IQ19HZXRTdGF0ZShIQ0RfSGFuZGxlVHlwZURlZiAqaGhjZCwgdWludDhfdCBjaG51bSkKK0hDRF9IQ1N0YXRlVHlwZURlZiAgSEFMX0hDRF9IQ19HZXRTdGF0ZShIQ0RfSGFuZGxlVHlwZURlZiBjb25zdCAqaGhjZCwgdWludDhfdCBjaG51bSkKIHsKICAgcmV0dXJuIGhoY2QtPmhjW2NobnVtXS5zdGF0ZTsKIH0KQEAgLTExNTksNiArMTE5NCw1NCBAQAogfQogCiAvKioKKyAgKiBAYnJpZWYgIFNldCBob3N0IGNoYW5uZWwgSHViIGluZm9ybWF0aW9uLgorICAqIEBwYXJhbSAgaGhjZCBIQ0QgaGFuZGxlCisgICogQHBhcmFtICBjaF9udW0gQ2hhbm5lbCBudW1iZXIuCisgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBmcm9tIDEgdG8gMTUKKyAgKiBAcGFyYW0gIGFkZHIgSHViIGFkZHJlc3MKKyAgKiBAcGFyYW0gIFBvcnROYnIgSHViIHBvcnQgbnVtYmVyCisgICogQHJldHZhbCBIQUwgc3RhdHVzCisgICovCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSENEX0hDX1NldEh1YkluZm8oSENEX0hhbmRsZVR5cGVEZWYgKmhoY2QsIHVpbnQ4X3QgY2hfbnVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYWRkciwgdWludDhfdCBQb3J0TmJyKQoreworICB1aW50MzJfdCBIb3N0Q29yZVNwZWVkID0gVVNCX0dldEhvc3RTcGVlZChoaGNkLT5JbnN0YW5jZSk7CisKKyAgLyogTFMvRlMgZGV2aWNlIHBsdWdnZWQgdG8gSFMgSFVCICovCisgIGlmICgoaGhjZC0+aGNbY2hfbnVtXS5zcGVlZCAhPSBIQ0RfREVWSUNFX1NQRUVEX0hJR0gpICYmIChIb3N0Q29yZVNwZWVkID09IEhQUlQwX1BSVFNQRF9ISUdIX1NQRUVEKSkKKyAgeworICAgIGhoY2QtPmhjW2NoX251bV0uZG9fc3NwbGl0ID0gMVU7CisKKyAgICBpZiAoKGhoY2QtPmhjW2NoX251bV0uZXBfdHlwZSA9PSBFUF9UWVBFX0NUUkwpICYmIChoaGNkLT5oY1tjaF9udW1dLmVwX2lzX2luICE9IDBVKSkKKyAgICB7CisgICAgICBoaGNkLT5oY1tjaF9udW1dLnRvZ2dsZV9pbiA9IDFVOworICAgIH0KKyAgfQorCisgIGhoY2QtPmhjW2NoX251bV0uaHViX2FkZHIgPSBhZGRyOworICBoaGNkLT5oY1tjaF9udW1dLmh1Yl9wb3J0X25iciA9IFBvcnROYnI7CisKKyAgcmV0dXJuIEhBTF9PSzsKK30KKworCisvKioKKyAgKiBAYnJpZWYgIENsZWFyIGhvc3QgY2hhbm5lbCBodWIgaW5mb3JtYXRpb24uCisgICogQHBhcmFtICBoaGNkIEhDRCBoYW5kbGUKKyAgKiBAcGFyYW0gIGNoX251bSBDaGFubmVsIG51bWJlci4KKyAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIGZyb20gMSB0byAxNQorICAqIEByZXR2YWwgSEFMIHN0YXR1cworICAqLworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hDRF9IQ19DbGVhckh1YkluZm8oSENEX0hhbmRsZVR5cGVEZWYgKmhoY2QsIHVpbnQ4X3QgY2hfbnVtKQoreworICBoaGNkLT5oY1tjaF9udW1dLmRvX3NzcGxpdCA9IDBVOworICBoaGNkLT5oY1tjaF9udW1dLmRvX2NzcGxpdCA9IDBVOworICBoaGNkLT5oY1tjaF9udW1dLmh1Yl9hZGRyID0gMFU7CisgIGhoY2QtPmhjW2NoX251bV0uaHViX3BvcnRfbmJyID0gMFU7CisKKyAgcmV0dXJuIEhBTF9PSzsKK30KKy8qKgogICAqIEB9CiAgICovCiAKQEAgLTExODAsODkgKzEyNjMsODQgQEAKIHsKICAgVVNCX09UR19HbG9iYWxUeXBlRGVmICpVU0J4ID0gaGhjZC0+SW5zdGFuY2U7CiAgIHVpbnQzMl90IFVTQnhfQkFTRSA9ICh1aW50MzJfdClVU0J4OwotICB1aW50MzJfdCBjaF9udW0gPSAodWludDMyX3QpY2hudW07Ci0KICAgdWludDMyX3QgdG1wcmVnOwogCi0gIGlmICgoVVNCeF9IQyhjaF9udW0pLT5IQ0lOVCAmIFVTQl9PVEdfSENJTlRfQUhCRVJSKSA9PSBVU0JfT1RHX0hDSU5UX0FIQkVSUikKKyAgaWYgKF9fSEFMX0hDRF9HRVRfQ0hfRkxBRyhoaGNkLCBjaG51bSwgVVNCX09UR19IQ0lOVF9BSEJFUlIpKQogICB7Ci0gICAgX19IQUxfSENEX0NMRUFSX0hDX0lOVChjaF9udW0sIFVTQl9PVEdfSENJTlRfQUhCRVJSKTsKLSAgICBfX0hBTF9IQ0RfVU5NQVNLX0hBTFRfSENfSU5UKGNoX251bSk7CisgICAgX19IQUxfSENEX0NMRUFSX0hDX0lOVChjaG51bSwgVVNCX09UR19IQ0lOVF9BSEJFUlIpOworICAgIGhoY2QtPmhjW2NobnVtXS5zdGF0ZSA9IEhDX1hBQ1RFUlI7CisgICAgKHZvaWQpVVNCX0hDX0hhbHQoaGhjZC0+SW5zdGFuY2UsIGNobnVtKTsKICAgfQotICBlbHNlIGlmICgoVVNCeF9IQyhjaF9udW0pLT5IQ0lOVCAmIFVTQl9PVEdfSENJTlRfQkJFUlIpID09IFVTQl9PVEdfSENJTlRfQkJFUlIpCisgIGVsc2UgaWYgKF9fSEFMX0hDRF9HRVRfQ0hfRkxBRyhoaGNkLCBjaG51bSwgVVNCX09UR19IQ0lOVF9CQkVSUikpCiAgIHsKLSAgICBfX0hBTF9IQ0RfQ0xFQVJfSENfSU5UKGNoX251bSwgVVNCX09UR19IQ0lOVF9CQkVSUik7Ci0gICAgaGhjZC0+aGNbY2hfbnVtXS5zdGF0ZSA9IEhDX0JCTEVSUjsKLSAgICBfX0hBTF9IQ0RfVU5NQVNLX0hBTFRfSENfSU5UKGNoX251bSk7Ci0gICAgKHZvaWQpVVNCX0hDX0hhbHQoaGhjZC0+SW5zdGFuY2UsICh1aW50OF90KWNoX251bSk7CisgICAgX19IQUxfSENEX0NMRUFSX0hDX0lOVChjaG51bSwgVVNCX09UR19IQ0lOVF9CQkVSUik7CisgICAgaGhjZC0+aGNbY2hudW1dLnN0YXRlID0gSENfQkJMRVJSOworICAgICh2b2lkKVVTQl9IQ19IYWx0KGhoY2QtPkluc3RhbmNlLCBjaG51bSk7CiAgIH0KLSAgZWxzZSBpZiAoKFVTQnhfSEMoY2hfbnVtKS0+SENJTlQgJiBVU0JfT1RHX0hDSU5UX0FDSykgPT0gVVNCX09UR19IQ0lOVF9BQ0spCisgIGVsc2UgaWYgKF9fSEFMX0hDRF9HRVRfQ0hfRkxBRyhoaGNkLCBjaG51bSwgVVNCX09UR19IQ0lOVF9TVEFMTCkpCiAgIHsKLSAgICBfX0hBTF9IQ0RfQ0xFQVJfSENfSU5UKGNoX251bSwgVVNCX09UR19IQ0lOVF9BQ0spOworICAgIF9fSEFMX0hDRF9DTEVBUl9IQ19JTlQoY2hudW0sIFVTQl9PVEdfSENJTlRfU1RBTEwpOworICAgIGhoY2QtPmhjW2NobnVtXS5zdGF0ZSA9IEhDX1NUQUxMOworICAgICh2b2lkKVVTQl9IQ19IYWx0KGhoY2QtPkluc3RhbmNlLCBjaG51bSk7CiAgIH0KLSAgZWxzZSBpZiAoKFVTQnhfSEMoY2hfbnVtKS0+SENJTlQgJiBVU0JfT1RHX0hDSU5UX1NUQUxMKSA9PSBVU0JfT1RHX0hDSU5UX1NUQUxMKQorICBlbHNlIGlmIChfX0hBTF9IQ0RfR0VUX0NIX0ZMQUcoaGhjZCwgY2hudW0sIFVTQl9PVEdfSENJTlRfRFRFUlIpKQogICB7Ci0gICAgX19IQUxfSENEX1VOTUFTS19IQUxUX0hDX0lOVChjaF9udW0pOwotICAgIGhoY2QtPmhjW2NoX251bV0uc3RhdGUgPSBIQ19TVEFMTDsKLSAgICBfX0hBTF9IQ0RfQ0xFQVJfSENfSU5UKGNoX251bSwgVVNCX09UR19IQ0lOVF9OQUspOwotICAgIF9fSEFMX0hDRF9DTEVBUl9IQ19JTlQoY2hfbnVtLCBVU0JfT1RHX0hDSU5UX1NUQUxMKTsKLSAgICAodm9pZClVU0JfSENfSGFsdChoaGNkLT5JbnN0YW5jZSwgKHVpbnQ4X3QpY2hfbnVtKTsKKyAgICBfX0hBTF9IQ0RfQ0xFQVJfSENfSU5UKGNobnVtLCBVU0JfT1RHX0hDSU5UX0RURVJSKTsKKyAgICBoaGNkLT5oY1tjaG51bV0uc3RhdGUgPSBIQ19EQVRBVEdMRVJSOworICAgICh2b2lkKVVTQl9IQ19IYWx0KGhoY2QtPkluc3RhbmNlLCBjaG51bSk7CiAgIH0KLSAgZWxzZSBpZiAoKFVTQnhfSEMoY2hfbnVtKS0+SENJTlQgJiBVU0JfT1RHX0hDSU5UX0RURVJSKSA9PSBVU0JfT1RHX0hDSU5UX0RURVJSKQorICBlbHNlIGlmIChfX0hBTF9IQ0RfR0VUX0NIX0ZMQUcoaGhjZCwgY2hudW0sIFVTQl9PVEdfSENJTlRfVFhFUlIpKQogICB7Ci0gICAgX19IQUxfSENEX1VOTUFTS19IQUxUX0hDX0lOVChjaF9udW0pOwotICAgIGhoY2QtPmhjW2NoX251bV0uc3RhdGUgPSBIQ19EQVRBVEdMRVJSOwotICAgIF9fSEFMX0hDRF9DTEVBUl9IQ19JTlQoY2hfbnVtLCBVU0JfT1RHX0hDSU5UX05BSyk7Ci0gICAgX19IQUxfSENEX0NMRUFSX0hDX0lOVChjaF9udW0sIFVTQl9PVEdfSENJTlRfRFRFUlIpOwotICAgICh2b2lkKVVTQl9IQ19IYWx0KGhoY2QtPkluc3RhbmNlLCAodWludDhfdCljaF9udW0pOwotICB9Ci0gIGVsc2UgaWYgKChVU0J4X0hDKGNoX251bSktPkhDSU5UICYgVVNCX09UR19IQ0lOVF9UWEVSUikgPT0gVVNCX09UR19IQ0lOVF9UWEVSUikKLSAgewotICAgIF9fSEFMX0hDRF9VTk1BU0tfSEFMVF9IQ19JTlQoY2hfbnVtKTsKLSAgICBoaGNkLT5oY1tjaF9udW1dLnN0YXRlID0gSENfWEFDVEVSUjsKLSAgICAodm9pZClVU0JfSENfSGFsdChoaGNkLT5JbnN0YW5jZSwgKHVpbnQ4X3QpY2hfbnVtKTsKLSAgICBfX0hBTF9IQ0RfQ0xFQVJfSENfSU5UKGNoX251bSwgVVNCX09UR19IQ0lOVF9UWEVSUik7CisgICAgX19IQUxfSENEX0NMRUFSX0hDX0lOVChjaG51bSwgVVNCX09UR19IQ0lOVF9UWEVSUik7CisgICAgaGhjZC0+aGNbY2hudW1dLnN0YXRlID0gSENfWEFDVEVSUjsKKyAgICAodm9pZClVU0JfSENfSGFsdChoaGNkLT5JbnN0YW5jZSwgY2hudW0pOwogICB9CiAgIGVsc2UKICAgewogICAgIC8qIC4uLiAqLwogICB9CiAKLSAgaWYgKChVU0J4X0hDKGNoX251bSktPkhDSU5UICYgVVNCX09UR19IQ0lOVF9GUk1PUikgPT0gVVNCX09UR19IQ0lOVF9GUk1PUikKKyAgaWYgKF9fSEFMX0hDRF9HRVRfQ0hfRkxBRyhoaGNkLCBjaG51bSwgVVNCX09UR19IQ0lOVF9GUk1PUikpCiAgIHsKLSAgICBfX0hBTF9IQ0RfVU5NQVNLX0hBTFRfSENfSU5UKGNoX251bSk7Ci0gICAgKHZvaWQpVVNCX0hDX0hhbHQoaGhjZC0+SW5zdGFuY2UsICh1aW50OF90KWNoX251bSk7Ci0gICAgX19IQUxfSENEX0NMRUFSX0hDX0lOVChjaF9udW0sIFVTQl9PVEdfSENJTlRfRlJNT1IpOworICAgICh2b2lkKVVTQl9IQ19IYWx0KGhoY2QtPkluc3RhbmNlLCBjaG51bSk7CisgICAgX19IQUxfSENEX0NMRUFSX0hDX0lOVChjaG51bSwgVVNCX09UR19IQ0lOVF9GUk1PUik7CiAgIH0KLSAgZWxzZSBpZiAoKFVTQnhfSEMoY2hfbnVtKS0+SENJTlQgJiBVU0JfT1RHX0hDSU5UX1hGUkMpID09IFVTQl9PVEdfSENJTlRfWEZSQykKKyAgZWxzZSBpZiAoX19IQUxfSENEX0dFVF9DSF9GTEFHKGhoY2QsIGNobnVtLCBVU0JfT1RHX0hDSU5UX1hGUkMpKQogICB7CisgICAgLyogQ2xlYXIgYW55IHBlbmRpbmcgQUNLIElUICovCisgICAgX19IQUxfSENEX0NMRUFSX0hDX0lOVChjaG51bSwgVVNCX09UR19IQ0lOVF9BQ0spOworCisgICAgaWYgKGhoY2QtPmhjW2NobnVtXS5kb19jc3BsaXQgPT0gMVUpCisgICAgeworICAgICAgaGhjZC0+aGNbY2hudW1dLmRvX2NzcGxpdCA9IDBVOworICAgICAgX19IQUxfSENEX0NMRUFSX0hDX0NTUExUKGNobnVtKTsKKyAgICB9CisKICAgICBpZiAoaGhjZC0+SW5pdC5kbWFfZW5hYmxlICE9IDBVKQogICAgIHsKLSAgICAgIGhoY2QtPmhjW2NoX251bV0ueGZlcl9jb3VudCA9IGhoY2QtPmhjW2NoX251bV0uWGZlclNpemUgLSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVVNCeF9IQyhjaF9udW0pLT5IQ1RTSVogJiBVU0JfT1RHX0hDVFNJWl9YRlJTSVopOworICAgICAgaGhjZC0+aGNbY2hudW1dLnhmZXJfY291bnQgPSBoaGNkLT5oY1tjaG51bV0uWGZlclNpemUgLSAoVVNCeF9IQyhjaG51bSktPkhDVFNJWiAmIFVTQl9PVEdfSENUU0laX1hGUlNJWik7CiAgICAgfQogCi0gICAgaGhjZC0+aGNbY2hfbnVtXS5zdGF0ZSA9IEhDX1hGUkM7Ci0gICAgaGhjZC0+aGNbY2hfbnVtXS5FcnJDbnQgPSAwVTsKLSAgICBfX0hBTF9IQ0RfQ0xFQVJfSENfSU5UKGNoX251bSwgVVNCX09UR19IQ0lOVF9YRlJDKTsKKyAgICBoaGNkLT5oY1tjaG51bV0uc3RhdGUgPSBIQ19YRlJDOworICAgIGhoY2QtPmhjW2NobnVtXS5FcnJDbnQgPSAwVTsKKyAgICBfX0hBTF9IQ0RfQ0xFQVJfSENfSU5UKGNobnVtLCBVU0JfT1RHX0hDSU5UX1hGUkMpOwogCi0gICAgaWYgKChoaGNkLT5oY1tjaF9udW1dLmVwX3R5cGUgPT0gRVBfVFlQRV9DVFJMKSB8fAotICAgICAgICAoaGhjZC0+aGNbY2hfbnVtXS5lcF90eXBlID09IEVQX1RZUEVfQlVMSykpCisgICAgaWYgKChoaGNkLT5oY1tjaG51bV0uZXBfdHlwZSA9PSBFUF9UWVBFX0NUUkwpIHx8CisgICAgICAgIChoaGNkLT5oY1tjaG51bV0uZXBfdHlwZSA9PSBFUF9UWVBFX0JVTEspKQogICAgIHsKLSAgICAgIF9fSEFMX0hDRF9VTk1BU0tfSEFMVF9IQ19JTlQoY2hfbnVtKTsKLSAgICAgICh2b2lkKVVTQl9IQ19IYWx0KGhoY2QtPkluc3RhbmNlLCAodWludDhfdCljaF9udW0pOwotICAgICAgX19IQUxfSENEX0NMRUFSX0hDX0lOVChjaF9udW0sIFVTQl9PVEdfSENJTlRfTkFLKTsKKyAgICAgICh2b2lkKVVTQl9IQ19IYWx0KGhoY2QtPkluc3RhbmNlLCBjaG51bSk7CisgICAgICBfX0hBTF9IQ0RfQ0xFQVJfSENfSU5UKGNobnVtLCBVU0JfT1RHX0hDSU5UX05BSyk7CiAgICAgfQotICAgIGVsc2UgaWYgKChoaGNkLT5oY1tjaF9udW1dLmVwX3R5cGUgPT0gRVBfVFlQRV9JTlRSKSB8fAotICAgICAgICAgICAgIChoaGNkLT5oY1tjaF9udW1dLmVwX3R5cGUgPT0gRVBfVFlQRV9JU09DKSkKKyAgICBlbHNlIGlmICgoaGhjZC0+aGNbY2hudW1dLmVwX3R5cGUgPT0gRVBfVFlQRV9JTlRSKSB8fAorICAgICAgICAgICAgIChoaGNkLT5oY1tjaG51bV0uZXBfdHlwZSA9PSBFUF9UWVBFX0lTT0MpKQogICAgIHsKLSAgICAgIFVTQnhfSEMoY2hfbnVtKS0+SENDSEFSIHw9IFVTQl9PVEdfSENDSEFSX09EREZSTTsKLSAgICAgIGhoY2QtPmhjW2NoX251bV0udXJiX3N0YXRlID0gVVJCX0RPTkU7CisgICAgICBVU0J4X0hDKGNobnVtKS0+SENDSEFSIHw9IFVTQl9PVEdfSENDSEFSX09EREZSTTsKKyAgICAgIGhoY2QtPmhjW2NobnVtXS51cmJfc3RhdGUgPSBVUkJfRE9ORTsKIAogI2lmIChVU0VfSEFMX0hDRF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCi0gICAgICBoaGNkLT5IQ19Ob3RpZnlVUkJDaGFuZ2VDYWxsYmFjayhoaGNkLCAodWludDhfdCljaF9udW0sIGhoY2QtPmhjW2NoX251bV0udXJiX3N0YXRlKTsKKyAgICAgIGhoY2QtPkhDX05vdGlmeVVSQkNoYW5nZUNhbGxiYWNrKGhoY2QsIGNobnVtLCBoaGNkLT5oY1tjaG51bV0udXJiX3N0YXRlKTsKICNlbHNlCi0gICAgICBIQUxfSENEX0hDX05vdGlmeVVSQkNoYW5nZV9DYWxsYmFjayhoaGNkLCAodWludDhfdCljaF9udW0sIGhoY2QtPmhjW2NoX251bV0udXJiX3N0YXRlKTsKKyAgICAgIEhBTF9IQ0RfSENfTm90aWZ5VVJCQ2hhbmdlX0NhbGxiYWNrKGhoY2QsIGNobnVtLCBoaGNkLT5oY1tjaG51bV0udXJiX3N0YXRlKTsKICNlbmRpZiAvKiBVU0VfSEFMX0hDRF9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KICAgICB9CiAgICAgZWxzZQpAQCAtMTI3Miw5NSArMTM1MCwyMjAgQEAKIAogICAgIGlmIChoaGNkLT5Jbml0LmRtYV9lbmFibGUgPT0gMVUpCiAgICAgewotICAgICAgaWYgKCgoaGhjZC0+aGNbY2hfbnVtXS5YZmVyU2l6ZSAvIGhoY2QtPmhjW2NoX251bV0ubWF4X3BhY2tldCkgJiAxVSkgIT0gMFUpCisgICAgICBpZiAoKCgoaGhjZC0+aGNbY2hudW1dLnhmZXJfY291bnQgKyBoaGNkLT5oY1tjaG51bV0ubWF4X3BhY2tldCAtIDFVKSAvIGhoY2QtPmhjW2NobnVtXS5tYXhfcGFja2V0KSAmIDFVKSAhPSAwVSkKICAgICAgIHsKLSAgICAgICAgaGhjZC0+aGNbY2hfbnVtXS50b2dnbGVfaW4gXj0gMVU7CisgICAgICAgIGhoY2QtPmhjW2NobnVtXS50b2dnbGVfaW4gXj0gMVU7CiAgICAgICB9CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICBoaGNkLT5oY1tjaF9udW1dLnRvZ2dsZV9pbiBePSAxVTsKKyAgICAgIGhoY2QtPmhjW2NobnVtXS50b2dnbGVfaW4gXj0gMVU7CiAgICAgfQogICB9Ci0gIGVsc2UgaWYgKChVU0J4X0hDKGNoX251bSktPkhDSU5UICYgVVNCX09UR19IQ0lOVF9DSEgpID09IFVTQl9PVEdfSENJTlRfQ0hIKQorICBlbHNlIGlmIChfX0hBTF9IQ0RfR0VUX0NIX0ZMQUcoaGhjZCwgY2hudW0sIFVTQl9PVEdfSENJTlRfQUNLKSkKICAgewotICAgIF9fSEFMX0hDRF9NQVNLX0hBTFRfSENfSU5UKGNoX251bSk7CisgICAgX19IQUxfSENEX0NMRUFSX0hDX0lOVChjaG51bSwgVVNCX09UR19IQ0lOVF9BQ0spOwogCi0gICAgaWYgKGhoY2QtPmhjW2NoX251bV0uc3RhdGUgPT0gSENfWEZSQykKKyAgICBpZiAoaGhjZC0+aGNbY2hudW1dLmRvX3NzcGxpdCA9PSAxVSkKICAgICB7Ci0gICAgICBoaGNkLT5oY1tjaF9udW1dLnVyYl9zdGF0ZSA9IFVSQl9ET05FOworICAgICAgaGhjZC0+aGNbY2hudW1dLmRvX2NzcGxpdCA9IDFVOworICAgICAgaGhjZC0+aGNbY2hudW1dLnN0YXRlID0gSENfQUNLOworCisgICAgICAodm9pZClVU0JfSENfSGFsdChoaGNkLT5JbnN0YW5jZSwgY2hudW0pOwogICAgIH0KLSAgICBlbHNlIGlmIChoaGNkLT5oY1tjaF9udW1dLnN0YXRlID09IEhDX1NUQUxMKQorICB9CisgIGVsc2UgaWYgKF9fSEFMX0hDRF9HRVRfQ0hfRkxBRyhoaGNkLCBjaG51bSwgVVNCX09UR19IQ0lOVF9DSEgpKQorICB7CisgICAgX19IQUxfSENEX0NMRUFSX0hDX0lOVChjaG51bSwgVVNCX09UR19IQ0lOVF9DSEgpOworCisgICAgaWYgKGhoY2QtPmhjW2NobnVtXS5zdGF0ZSA9PSBIQ19YRlJDKQogICAgIHsKLSAgICAgIGhoY2QtPmhjW2NoX251bV0udXJiX3N0YXRlID0gVVJCX1NUQUxMOworICAgICAgaGhjZC0+aGNbY2hudW1dLnN0YXRlID0gSENfSEFMVEVEOworICAgICAgaGhjZC0+aGNbY2hudW1dLnVyYl9zdGF0ZSA9IFVSQl9ET05FOwogICAgIH0KLSAgICBlbHNlIGlmICgoaGhjZC0+aGNbY2hfbnVtXS5zdGF0ZSA9PSBIQ19YQUNURVJSKSB8fAotICAgICAgICAgICAgIChoaGNkLT5oY1tjaF9udW1dLnN0YXRlID09IEhDX0RBVEFUR0xFUlIpKQorICAgIGVsc2UgaWYgKGhoY2QtPmhjW2NobnVtXS5zdGF0ZSA9PSBIQ19TVEFMTCkKICAgICB7Ci0gICAgICBoaGNkLT5oY1tjaF9udW1dLkVyckNudCsrOwotICAgICAgaWYgKGhoY2QtPmhjW2NoX251bV0uRXJyQ250ID4gMlUpCisgICAgICBoaGNkLT5oY1tjaG51bV0uc3RhdGUgPSBIQ19IQUxURUQ7CisgICAgICBoaGNkLT5oY1tjaG51bV0udXJiX3N0YXRlID0gVVJCX1NUQUxMOworICAgIH0KKyAgICBlbHNlIGlmICgoaGhjZC0+aGNbY2hudW1dLnN0YXRlID09IEhDX1hBQ1RFUlIpIHx8CisgICAgICAgICAgICAgKGhoY2QtPmhjW2NobnVtXS5zdGF0ZSA9PSBIQ19EQVRBVEdMRVJSKSkKKyAgICB7CisgICAgICBoaGNkLT5oY1tjaG51bV0uc3RhdGUgPSBIQ19IQUxURUQ7CisgICAgICBoaGNkLT5oY1tjaG51bV0uRXJyQ250Kys7CisgICAgICBpZiAoaGhjZC0+aGNbY2hudW1dLkVyckNudCA+IDJVKQogICAgICAgewotICAgICAgICBoaGNkLT5oY1tjaF9udW1dLkVyckNudCA9IDBVOwotICAgICAgICBoaGNkLT5oY1tjaF9udW1dLnVyYl9zdGF0ZSA9IFVSQl9FUlJPUjsKKyAgICAgICAgaGhjZC0+aGNbY2hudW1dLkVyckNudCA9IDBVOworCisgICAgICAgIGlmIChoaGNkLT5oY1tjaG51bV0uZG9fc3NwbGl0ID09IDFVKQorICAgICAgICB7CisgICAgICAgICAgaGhjZC0+aGNbY2hudW1dLmRvX2NzcGxpdCA9IDBVOworICAgICAgICAgIGhoY2QtPmhjW2NobnVtXS5lcF9zc19zY2hlZHVsZSA9IDBVOworICAgICAgICAgIF9fSEFMX0hDRF9DTEVBUl9IQ19DU1BMVChjaG51bSk7CisgICAgICAgIH0KKworICAgICAgICBoaGNkLT5oY1tjaG51bV0udXJiX3N0YXRlID0gVVJCX0VSUk9SOwogICAgICAgfQogICAgICAgZWxzZQogICAgICAgewotICAgICAgICBoaGNkLT5oY1tjaF9udW1dLnVyYl9zdGF0ZSA9IFVSQl9OT1RSRUFEWTsKKyAgICAgICAgaGhjZC0+aGNbY2hudW1dLnVyYl9zdGF0ZSA9IFVSQl9OT1RSRUFEWTsKIAorICAgICAgICBpZiAoKGhoY2QtPmhjW2NobnVtXS5lcF90eXBlID09IEVQX1RZUEVfQ1RSTCkgfHwKKyAgICAgICAgICAgIChoaGNkLT5oY1tjaG51bV0uZXBfdHlwZSA9PSBFUF9UWVBFX0JVTEspKQorICAgICAgICB7CisgICAgICAgICAgLyogcmUtYWN0aXZhdGUgdGhlIGNoYW5uZWwgKi8KKyAgICAgICAgICB0bXByZWcgPSBVU0J4X0hDKGNobnVtKS0+SENDSEFSOworICAgICAgICAgIHRtcHJlZyAmPSB+VVNCX09UR19IQ0NIQVJfQ0hESVM7CisgICAgICAgICAgdG1wcmVnIHw9IFVTQl9PVEdfSENDSEFSX0NIRU5BOworICAgICAgICAgIFVTQnhfSEMoY2hudW0pLT5IQ0NIQVIgPSB0bXByZWc7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoaGhjZC0+aGNbY2hudW1dLnN0YXRlID09IEhDX05ZRVQpCisgICAgeworICAgICAgaGhjZC0+aGNbY2hudW1dLnN0YXRlID0gSENfSEFMVEVEOworCisgICAgICBpZiAoaGhjZC0+aGNbY2hudW1dLmRvX2NzcGxpdCA9PSAxVSkKKyAgICAgIHsKKyAgICAgICAgaWYgKGhoY2QtPmhjW2NobnVtXS5lcF90eXBlID09IEVQX1RZUEVfSU5UUikKKyAgICAgICAgeworICAgICAgICAgIGhoY2QtPmhjW2NobnVtXS5OeWV0RXJyQ250Kys7CisgICAgICAgICAgaWYgKGhoY2QtPmhjW2NobnVtXS5OeWV0RXJyQ250ID4gMlUpCisgICAgICAgICAgeworICAgICAgICAgICAgaGhjZC0+aGNbY2hudW1dLk55ZXRFcnJDbnQgPSAwVTsKKyAgICAgICAgICAgIGhoY2QtPmhjW2NobnVtXS5kb19jc3BsaXQgPSAwVTsKKworICAgICAgICAgICAgaWYgKGhoY2QtPmhjW2NobnVtXS5FcnJDbnQgPCAzVSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaGhjZC0+aGNbY2hudW1dLmVwX3NzX3NjaGVkdWxlID0gMVU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBfX0hBTF9IQ0RfQ0xFQVJfSENfQ1NQTFQoY2hudW0pOworICAgICAgICAgICAgaGhjZC0+aGNbY2hudW1dLnVyYl9zdGF0ZSA9IFVSQl9FUlJPUjsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGhoY2QtPmhjW2NobnVtXS51cmJfc3RhdGUgPSBVUkJfTk9UUkVBRFk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGhoY2QtPmhjW2NobnVtXS51cmJfc3RhdGUgPSBVUkJfTk9UUkVBRFk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKGhoY2QtPmhjW2NobnVtXS5lcF90eXBlID09IEVQX1RZUEVfQ1RSTCkgfHwKKyAgICAgICAgICAgIChoaGNkLT5oY1tjaG51bV0uZXBfdHlwZSA9PSBFUF9UWVBFX0JVTEspKQorICAgICAgICB7CisgICAgICAgICAgLyogcmUtYWN0aXZhdGUgdGhlIGNoYW5uZWwgKi8KKyAgICAgICAgICB0bXByZWcgPSBVU0J4X0hDKGNobnVtKS0+SENDSEFSOworICAgICAgICAgIHRtcHJlZyAmPSB+VVNCX09UR19IQ0NIQVJfQ0hESVM7CisgICAgICAgICAgdG1wcmVnIHw9IFVTQl9PVEdfSENDSEFSX0NIRU5BOworICAgICAgICAgIFVTQnhfSEMoY2hudW0pLT5IQ0NIQVIgPSB0bXByZWc7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoaGhjZC0+aGNbY2hudW1dLnN0YXRlID09IEhDX0FDSykKKyAgICB7CisgICAgICBoaGNkLT5oY1tjaG51bV0uc3RhdGUgPSBIQ19IQUxURUQ7CisKKyAgICAgIGlmIChoaGNkLT5oY1tjaG51bV0uZG9fY3NwbGl0ID09IDFVKQorICAgICAgeworICAgICAgICBoaGNkLT5oY1tjaG51bV0udXJiX3N0YXRlID0gVVJCX05PVFJFQURZOworCisgICAgICAgIC8qIFNldCBDb21wbGV0ZSBzcGxpdCBhbmQgcmUtYWN0aXZhdGUgdGhlIGNoYW5uZWwgKi8KKyAgICAgICAgVVNCeF9IQyhjaG51bSktPkhDU1BMVCB8PSBVU0JfT1RHX0hDU1BMVF9DT01QTFNQTFQ7CisgICAgICAgIFVTQnhfSEMoY2hudW0pLT5IQ0lOVE1TSyB8PSBVU0JfT1RHX0hDSU5UTVNLX05ZRVQ7CisgICAgICAgIFVTQnhfSEMoY2hudW0pLT5IQ0lOVE1TSyAmPSB+VVNCX09UR19IQ0lOVF9BQ0s7CisKKyAgICAgICAgaWYgKChoaGNkLT5oY1tjaG51bV0uZXBfdHlwZSA9PSBFUF9UWVBFX0NUUkwpIHx8CisgICAgICAgICAgICAoaGhjZC0+aGNbY2hudW1dLmVwX3R5cGUgPT0gRVBfVFlQRV9CVUxLKSkKKyAgICAgICAgeworICAgICAgICAgIC8qIHJlLWFjdGl2YXRlIHRoZSBjaGFubmVsICovCisgICAgICAgICAgdG1wcmVnID0gVVNCeF9IQyhjaG51bSktPkhDQ0hBUjsKKyAgICAgICAgICB0bXByZWcgJj0gflVTQl9PVEdfSENDSEFSX0NIRElTOworICAgICAgICAgIHRtcHJlZyB8PSBVU0JfT1RHX0hDQ0hBUl9DSEVOQTsKKyAgICAgICAgICBVU0J4X0hDKGNobnVtKS0+SENDSEFSID0gdG1wcmVnOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGhoY2QtPmhjW2NobnVtXS5zdGF0ZSA9PSBIQ19OQUspCisgICAgeworICAgICAgaGhjZC0+aGNbY2hudW1dLnN0YXRlID0gSENfSEFMVEVEOworICAgICAgaGhjZC0+aGNbY2hudW1dLnVyYl9zdGF0ZSA9IFVSQl9OT1RSRUFEWTsKKworICAgICAgaWYgKChoaGNkLT5oY1tjaG51bV0uZXBfdHlwZSA9PSBFUF9UWVBFX0NUUkwpIHx8CisgICAgICAgICAgKGhoY2QtPmhjW2NobnVtXS5lcF90eXBlID09IEVQX1RZUEVfQlVMSykpCisgICAgICB7CiAgICAgICAgIC8qIHJlLWFjdGl2YXRlIHRoZSBjaGFubmVsICovCi0gICAgICAgIHRtcHJlZyA9IFVTQnhfSEMoY2hfbnVtKS0+SENDSEFSOworICAgICAgICB0bXByZWcgPSBVU0J4X0hDKGNobnVtKS0+SENDSEFSOwogICAgICAgICB0bXByZWcgJj0gflVTQl9PVEdfSENDSEFSX0NIRElTOwogICAgICAgICB0bXByZWcgfD0gVVNCX09UR19IQ0NIQVJfQ0hFTkE7Ci0gICAgICAgIFVTQnhfSEMoY2hfbnVtKS0+SENDSEFSID0gdG1wcmVnOworICAgICAgICBVU0J4X0hDKGNobnVtKS0+SENDSEFSID0gdG1wcmVnOwogICAgICAgfQogICAgIH0KLSAgICBlbHNlIGlmIChoaGNkLT5oY1tjaF9udW1dLnN0YXRlID09IEhDX05BSykKKyAgICBlbHNlIGlmIChoaGNkLT5oY1tjaG51bV0uc3RhdGUgPT0gSENfQkJMRVJSKQogICAgIHsKLSAgICAgIGhoY2QtPmhjW2NoX251bV0udXJiX3N0YXRlICA9IFVSQl9OT1RSRUFEWTsKLQotICAgICAgLyogcmUtYWN0aXZhdGUgdGhlIGNoYW5uZWwgKi8KLSAgICAgIHRtcHJlZyA9IFVTQnhfSEMoY2hfbnVtKS0+SENDSEFSOwotICAgICAgdG1wcmVnICY9IH5VU0JfT1RHX0hDQ0hBUl9DSERJUzsKLSAgICAgIHRtcHJlZyB8PSBVU0JfT1RHX0hDQ0hBUl9DSEVOQTsKLSAgICAgIFVTQnhfSEMoY2hfbnVtKS0+SENDSEFSID0gdG1wcmVnOwotICAgIH0KLSAgICBlbHNlIGlmIChoaGNkLT5oY1tjaF9udW1dLnN0YXRlID09IEhDX0JCTEVSUikKLSAgICB7Ci0gICAgICBoaGNkLT5oY1tjaF9udW1dLkVyckNudCsrOwotICAgICAgaGhjZC0+aGNbY2hfbnVtXS51cmJfc3RhdGUgPSBVUkJfRVJST1I7CisgICAgICBoaGNkLT5oY1tjaG51bV0uc3RhdGUgPSBIQ19IQUxURUQ7CisgICAgICBoaGNkLT5oY1tjaG51bV0uRXJyQ250Kys7CisgICAgICBoaGNkLT5oY1tjaG51bV0udXJiX3N0YXRlID0gVVJCX0VSUk9SOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgLyogLi4uICovCi0gICAgfQotICAgIF9fSEFMX0hDRF9DTEVBUl9IQ19JTlQoY2hfbnVtLCBVU0JfT1RHX0hDSU5UX0NISCk7Ci0gICAgSEFMX0hDRF9IQ19Ob3RpZnlVUkJDaGFuZ2VfQ2FsbGJhY2soaGhjZCwgKHVpbnQ4X3QpY2hfbnVtLCBoaGNkLT5oY1tjaF9udW1dLnVyYl9zdGF0ZSk7Ci0gIH0KLSAgZWxzZSBpZiAoKFVTQnhfSEMoY2hfbnVtKS0+SENJTlQgJiBVU0JfT1RHX0hDSU5UX05BSykgPT0gVVNCX09UR19IQ0lOVF9OQUspCi0gIHsKLSAgICBpZiAoaGhjZC0+aGNbY2hfbnVtXS5lcF90eXBlID09IEVQX1RZUEVfSU5UUikKLSAgICB7Ci0gICAgICBoaGNkLT5oY1tjaF9udW1dLkVyckNudCA9IDBVOwotICAgICAgX19IQUxfSENEX1VOTUFTS19IQUxUX0hDX0lOVChjaF9udW0pOwotICAgICAgKHZvaWQpVVNCX0hDX0hhbHQoaGhjZC0+SW5zdGFuY2UsICh1aW50OF90KWNoX251bSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKChoaGNkLT5oY1tjaF9udW1dLmVwX3R5cGUgPT0gRVBfVFlQRV9DVFJMKSB8fAotICAgICAgICAgICAgIChoaGNkLT5oY1tjaF9udW1dLmVwX3R5cGUgPT0gRVBfVFlQRV9CVUxLKSkKLSAgICB7Ci0gICAgICBoaGNkLT5oY1tjaF9udW1dLkVyckNudCA9IDBVOwotCi0gICAgICBpZiAoaGhjZC0+SW5pdC5kbWFfZW5hYmxlID09IDBVKQorICAgICAgaWYgKGhoY2QtPmhjW2NobnVtXS5zdGF0ZSA9PSBIQ19IQUxURUQpCiAgICAgICB7Ci0gICAgICAgIGhoY2QtPmhjW2NoX251bV0uc3RhdGUgPSBIQ19OQUs7Ci0gICAgICAgIF9fSEFMX0hDRF9VTk1BU0tfSEFMVF9IQ19JTlQoY2hfbnVtKTsKLSAgICAgICAgKHZvaWQpVVNCX0hDX0hhbHQoaGhjZC0+SW5zdGFuY2UsICh1aW50OF90KWNoX251bSk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICB9CisKKyNpZiAoVVNFX0hBTF9IQ0RfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDFVKQorICAgIGhoY2QtPkhDX05vdGlmeVVSQkNoYW5nZUNhbGxiYWNrKGhoY2QsIGNobnVtLCBoaGNkLT5oY1tjaG51bV0udXJiX3N0YXRlKTsKKyNlbHNlCisgICAgSEFMX0hDRF9IQ19Ob3RpZnlVUkJDaGFuZ2VfQ2FsbGJhY2soaGhjZCwgY2hudW0sIGhoY2QtPmhjW2NobnVtXS51cmJfc3RhdGUpOworI2VuZGlmIC8qIFVTRV9IQUxfSENEX1JFR0lTVEVSX0NBTExCQUNLUyAqLworICB9CisgIGVsc2UgaWYgKF9fSEFMX0hDRF9HRVRfQ0hfRkxBRyhoaGNkLCBjaG51bSwgVVNCX09UR19IQ0lOVF9OWUVUKSkKKyAgeworICAgIF9fSEFMX0hDRF9DTEVBUl9IQ19JTlQoY2hudW0sIFVTQl9PVEdfSENJTlRfTllFVCk7CisgICAgaGhjZC0+aGNbY2hudW1dLnN0YXRlID0gSENfTllFVDsKKworICAgIGlmIChoaGNkLT5oY1tjaG51bV0uZG9fc3NwbGl0ID09IDBVKQorICAgIHsKKyAgICAgIGhoY2QtPmhjW2NobnVtXS5FcnJDbnQgPSAwVTsKKyAgICB9CisKKyAgICAodm9pZClVU0JfSENfSGFsdChoaGNkLT5JbnN0YW5jZSwgY2hudW0pOworICB9CisgIGVsc2UgaWYgKF9fSEFMX0hDRF9HRVRfQ0hfRkxBRyhoaGNkLCBjaG51bSwgVVNCX09UR19IQ0lOVF9OQUspKQorICB7CisgICAgaWYgKGhoY2QtPmhjW2NobnVtXS5lcF90eXBlID09IEVQX1RZUEVfSU5UUikKKyAgICB7CisgICAgICBoaGNkLT5oY1tjaG51bV0uRXJyQ250ID0gMFU7CisgICAgICBoaGNkLT5oY1tjaG51bV0uc3RhdGUgPSBIQ19OQUs7CisgICAgICAodm9pZClVU0JfSENfSGFsdChoaGNkLT5JbnN0YW5jZSwgY2hudW0pOworICAgIH0KKyAgICBlbHNlIGlmICgoaGhjZC0+aGNbY2hudW1dLmVwX3R5cGUgPT0gRVBfVFlQRV9DVFJMKSB8fAorICAgICAgICAgICAgIChoaGNkLT5oY1tjaG51bV0uZXBfdHlwZSA9PSBFUF9UWVBFX0JVTEspKQorICAgIHsKKyAgICAgIGhoY2QtPmhjW2NobnVtXS5FcnJDbnQgPSAwVTsKKworICAgICAgaWYgKChoaGNkLT5Jbml0LmRtYV9lbmFibGUgPT0gMFUpIHx8IChoaGNkLT5oY1tjaG51bV0uZG9fY3NwbGl0ID09IDFVKSkKKyAgICAgIHsKKyAgICAgICAgaGhjZC0+aGNbY2hudW1dLnN0YXRlID0gSENfTkFLOworICAgICAgICAodm9pZClVU0JfSENfSGFsdChoaGNkLT5JbnN0YW5jZSwgY2hudW0pOwogICAgICAgfQogICAgIH0KICAgICBlbHNlCiAgICAgewogICAgICAgLyogLi4uICovCiAgICAgfQotICAgIF9fSEFMX0hDRF9DTEVBUl9IQ19JTlQoY2hfbnVtLCBVU0JfT1RHX0hDSU5UX05BSyk7CisKKyAgICBpZiAoaGhjZC0+aGNbY2hudW1dLmRvX2NzcGxpdCA9PSAxVSkKKyAgICB7CisgICAgICBoaGNkLT5oY1tjaG51bV0uZG9fY3NwbGl0ID0gMFU7CisgICAgICBfX0hBTF9IQ0RfQ0xFQVJfSENfQ1NQTFQoY2hudW0pOworICAgICAgX19IQUxfSENEX1VOTUFTS19BQ0tfSENfSU5UKGNobnVtKTsKKyAgICB9CisKKyAgICBfX0hBTF9IQ0RfQ0xFQVJfSENfSU5UKGNobnVtLCBVU0JfT1RHX0hDSU5UX05BSyk7CiAgIH0KICAgZWxzZQogICB7CkBAIC0xMzc5LDE4MyArMTU4MiwyMjkgQEAKIHsKICAgVVNCX09UR19HbG9iYWxUeXBlRGVmICpVU0J4ID0gaGhjZC0+SW5zdGFuY2U7CiAgIHVpbnQzMl90IFVTQnhfQkFTRSA9ICh1aW50MzJfdClVU0J4OwotICB1aW50MzJfdCBjaF9udW0gPSAodWludDMyX3QpY2hudW07CiAgIHVpbnQzMl90IHRtcHJlZzsKICAgdWludDMyX3QgbnVtX3BhY2tldHM7CiAKLSAgaWYgKChVU0J4X0hDKGNoX251bSktPkhDSU5UICYgVVNCX09UR19IQ0lOVF9BSEJFUlIpID09IFVTQl9PVEdfSENJTlRfQUhCRVJSKQorICBpZiAoX19IQUxfSENEX0dFVF9DSF9GTEFHKGhoY2QsIGNobnVtLCBVU0JfT1RHX0hDSU5UX0FIQkVSUikpCiAgIHsKLSAgICBfX0hBTF9IQ0RfQ0xFQVJfSENfSU5UKGNoX251bSwgVVNCX09UR19IQ0lOVF9BSEJFUlIpOwotICAgIF9fSEFMX0hDRF9VTk1BU0tfSEFMVF9IQ19JTlQoY2hfbnVtKTsKKyAgICBfX0hBTF9IQ0RfQ0xFQVJfSENfSU5UKGNobnVtLCBVU0JfT1RHX0hDSU5UX0FIQkVSUik7CisgICAgaGhjZC0+aGNbY2hudW1dLnN0YXRlID0gSENfWEFDVEVSUjsKKyAgICAodm9pZClVU0JfSENfSGFsdChoaGNkLT5JbnN0YW5jZSwgY2hudW0pOwogICB9Ci0gIGVsc2UgaWYgKChVU0J4X0hDKGNoX251bSktPkhDSU5UICYgVVNCX09UR19IQ0lOVF9BQ0spID09IFVTQl9PVEdfSENJTlRfQUNLKQorICBlbHNlIGlmIChfX0hBTF9IQ0RfR0VUX0NIX0ZMQUcoaGhjZCwgY2hudW0sIFVTQl9PVEdfSENJTlRfQUNLKSkKICAgewotICAgIF9fSEFMX0hDRF9DTEVBUl9IQ19JTlQoY2hfbnVtLCBVU0JfT1RHX0hDSU5UX0FDSyk7CisgICAgX19IQUxfSENEX0NMRUFSX0hDX0lOVChjaG51bSwgVVNCX09UR19IQ0lOVF9BQ0spOwogCi0gICAgaWYgKGhoY2QtPmhjW2NoX251bV0uZG9fcGluZyA9PSAxVSkKKyAgICBpZiAoaGhjZC0+aGNbY2hudW1dLmRvX3BpbmcgPT0gMVUpCiAgICAgewotICAgICAgaGhjZC0+aGNbY2hfbnVtXS5kb19waW5nID0gMFU7Ci0gICAgICBoaGNkLT5oY1tjaF9udW1dLnVyYl9zdGF0ZSAgPSBVUkJfTk9UUkVBRFk7Ci0gICAgICBfX0hBTF9IQ0RfVU5NQVNLX0hBTFRfSENfSU5UKGNoX251bSk7Ci0gICAgICAodm9pZClVU0JfSENfSGFsdChoaGNkLT5JbnN0YW5jZSwgKHVpbnQ4X3QpY2hfbnVtKTsKKyAgICAgIGhoY2QtPmhjW2NobnVtXS5kb19waW5nID0gMFU7CisgICAgICBoaGNkLT5oY1tjaG51bV0udXJiX3N0YXRlID0gVVJCX05PVFJFQURZOworICAgICAgaGhjZC0+aGNbY2hudW1dLnN0YXRlID0gSENfQUNLOworICAgICAgKHZvaWQpVVNCX0hDX0hhbHQoaGhjZC0+SW5zdGFuY2UsIGNobnVtKTsKKyAgICB9CisKKyAgICBpZiAoKGhoY2QtPmhjW2NobnVtXS5kb19zc3BsaXQgPT0gMVUpICYmIChoaGNkLT5oY1tjaG51bV0uZG9fY3NwbGl0ID09IDBVKSkKKyAgICB7CisgICAgICBpZiAoaGhjZC0+aGNbY2hudW1dLmVwX3R5cGUgIT0gRVBfVFlQRV9JU09DKQorICAgICAgeworICAgICAgICBoaGNkLT5oY1tjaG51bV0uZG9fY3NwbGl0ID0gMVU7CisgICAgICB9CisKKyAgICAgIGhoY2QtPmhjW2NobnVtXS5zdGF0ZSA9IEhDX0FDSzsKKyAgICAgICh2b2lkKVVTQl9IQ19IYWx0KGhoY2QtPkluc3RhbmNlLCBjaG51bSk7CisKKyAgICAgIC8qIHJlc2V0IGVycm9yX2NvdW50ICovCisgICAgICBoaGNkLT5oY1tjaG51bV0uRXJyQ250ID0gMFU7CiAgICAgfQogICB9Ci0gIGVsc2UgaWYgKChVU0J4X0hDKGNoX251bSktPkhDSU5UICYgVVNCX09UR19IQ0lOVF9GUk1PUikgPT0gVVNCX09UR19IQ0lOVF9GUk1PUikKKyAgZWxzZSBpZiAoX19IQUxfSENEX0dFVF9DSF9GTEFHKGhoY2QsIGNobnVtLCBVU0JfT1RHX0hDSU5UX0ZSTU9SKSkKICAgewotICAgIF9fSEFMX0hDRF9VTk1BU0tfSEFMVF9IQ19JTlQoY2hfbnVtKTsKLSAgICAodm9pZClVU0JfSENfSGFsdChoaGNkLT5JbnN0YW5jZSwgKHVpbnQ4X3QpY2hfbnVtKTsKLSAgICBfX0hBTF9IQ0RfQ0xFQVJfSENfSU5UKGNoX251bSwgVVNCX09UR19IQ0lOVF9GUk1PUik7CisgICAgX19IQUxfSENEX0NMRUFSX0hDX0lOVChjaG51bSwgVVNCX09UR19IQ0lOVF9GUk1PUik7CisgICAgKHZvaWQpVVNCX0hDX0hhbHQoaGhjZC0+SW5zdGFuY2UsIGNobnVtKTsKICAgfQotICBlbHNlIGlmICgoVVNCeF9IQyhjaF9udW0pLT5IQ0lOVCAmIFVTQl9PVEdfSENJTlRfWEZSQykgPT0gVVNCX09UR19IQ0lOVF9YRlJDKQorICBlbHNlIGlmIChfX0hBTF9IQ0RfR0VUX0NIX0ZMQUcoaGhjZCwgY2hudW0sIFVTQl9PVEdfSENJTlRfWEZSQykpCiAgIHsKLSAgICBoaGNkLT5oY1tjaF9udW1dLkVyckNudCA9IDBVOworICAgIGhoY2QtPmhjW2NobnVtXS5FcnJDbnQgPSAwVTsKIAogICAgIC8qIHRyYW5zYWN0aW9uIGNvbXBsZXRlZCB3aXRoIE5ZRVQgc3RhdGUsIHVwZGF0ZSBkbyBwaW5nIHN0YXRlICovCi0gICAgaWYgKChVU0J4X0hDKGNoX251bSktPkhDSU5UICYgVVNCX09UR19IQ0lOVF9OWUVUKSA9PSBVU0JfT1RHX0hDSU5UX05ZRVQpCisgICAgaWYgKF9fSEFMX0hDRF9HRVRfQ0hfRkxBRyhoaGNkLCBjaG51bSwgVVNCX09UR19IQ0lOVF9OWUVUKSkKICAgICB7Ci0gICAgICBoaGNkLT5oY1tjaF9udW1dLmRvX3BpbmcgPSAxVTsKLSAgICAgIF9fSEFMX0hDRF9DTEVBUl9IQ19JTlQoY2hfbnVtLCBVU0JfT1RHX0hDSU5UX05ZRVQpOworICAgICAgaGhjZC0+aGNbY2hudW1dLmRvX3BpbmcgPSAxVTsKKyAgICAgIF9fSEFMX0hDRF9DTEVBUl9IQ19JTlQoY2hudW0sIFVTQl9PVEdfSENJTlRfTllFVCk7CiAgICAgfQotICAgIF9fSEFMX0hDRF9VTk1BU0tfSEFMVF9IQ19JTlQoY2hfbnVtKTsKLSAgICAodm9pZClVU0JfSENfSGFsdChoaGNkLT5JbnN0YW5jZSwgKHVpbnQ4X3QpY2hfbnVtKTsKLSAgICBfX0hBTF9IQ0RfQ0xFQVJfSENfSU5UKGNoX251bSwgVVNCX09UR19IQ0lOVF9YRlJDKTsKLSAgICBoaGNkLT5oY1tjaF9udW1dLnN0YXRlID0gSENfWEZSQzsKLSAgfQotICBlbHNlIGlmICgoVVNCeF9IQyhjaF9udW0pLT5IQ0lOVCAmIFVTQl9PVEdfSENJTlRfTllFVCkgPT0gVVNCX09UR19IQ0lOVF9OWUVUKQotICB7Ci0gICAgaGhjZC0+aGNbY2hfbnVtXS5zdGF0ZSA9IEhDX05ZRVQ7Ci0gICAgaGhjZC0+aGNbY2hfbnVtXS5kb19waW5nID0gMVU7Ci0gICAgaGhjZC0+aGNbY2hfbnVtXS5FcnJDbnQgPSAwVTsKLSAgICBfX0hBTF9IQ0RfVU5NQVNLX0hBTFRfSENfSU5UKGNoX251bSk7Ci0gICAgKHZvaWQpVVNCX0hDX0hhbHQoaGhjZC0+SW5zdGFuY2UsICh1aW50OF90KWNoX251bSk7Ci0gICAgX19IQUxfSENEX0NMRUFSX0hDX0lOVChjaF9udW0sIFVTQl9PVEdfSENJTlRfTllFVCk7Ci0gIH0KLSAgZWxzZSBpZiAoKFVTQnhfSEMoY2hfbnVtKS0+SENJTlQgJiBVU0JfT1RHX0hDSU5UX1NUQUxMKSA9PSBVU0JfT1RHX0hDSU5UX1NUQUxMKQotICB7Ci0gICAgX19IQUxfSENEX0NMRUFSX0hDX0lOVChjaF9udW0sIFVTQl9PVEdfSENJTlRfU1RBTEwpOwotICAgIF9fSEFMX0hDRF9VTk1BU0tfSEFMVF9IQ19JTlQoY2hfbnVtKTsKLSAgICAodm9pZClVU0JfSENfSGFsdChoaGNkLT5JbnN0YW5jZSwgKHVpbnQ4X3QpY2hfbnVtKTsKLSAgICBoaGNkLT5oY1tjaF9udW1dLnN0YXRlID0gSENfU1RBTEw7Ci0gIH0KLSAgZWxzZSBpZiAoKFVTQnhfSEMoY2hfbnVtKS0+SENJTlQgJiBVU0JfT1RHX0hDSU5UX05BSykgPT0gVVNCX09UR19IQ0lOVF9OQUspCi0gIHsKLSAgICBoaGNkLT5oY1tjaF9udW1dLkVyckNudCA9IDBVOwotICAgIGhoY2QtPmhjW2NoX251bV0uc3RhdGUgPSBIQ19OQUs7CiAKLSAgICBpZiAoaGhjZC0+aGNbY2hfbnVtXS5kb19waW5nID09IDBVKQorICAgIGlmIChoaGNkLT5oY1tjaG51bV0uZG9fY3NwbGl0ICE9IDBVKQogICAgIHsKLSAgICAgIGlmIChoaGNkLT5oY1tjaF9udW1dLnNwZWVkID09IEhDRF9ERVZJQ0VfU1BFRURfSElHSCkKKyAgICAgIGhoY2QtPmhjW2NobnVtXS5kb19jc3BsaXQgPSAwVTsKKyAgICAgIF9fSEFMX0hDRF9DTEVBUl9IQ19DU1BMVChjaG51bSk7CisgICAgfQorCisgICAgX19IQUxfSENEX0NMRUFSX0hDX0lOVChjaG51bSwgVVNCX09UR19IQ0lOVF9YRlJDKTsKKyAgICBoaGNkLT5oY1tjaG51bV0uc3RhdGUgPSBIQ19YRlJDOworICAgICh2b2lkKVVTQl9IQ19IYWx0KGhoY2QtPkluc3RhbmNlLCBjaG51bSk7CisgIH0KKyAgZWxzZSBpZiAoX19IQUxfSENEX0dFVF9DSF9GTEFHKGhoY2QsIGNobnVtLCBVU0JfT1RHX0hDSU5UX05ZRVQpKQorICB7CisgICAgaGhjZC0+aGNbY2hudW1dLnN0YXRlID0gSENfTllFVDsKKworICAgIGlmIChoaGNkLT5oY1tjaG51bV0uZG9fc3NwbGl0ID09IDBVKQorICAgIHsKKyAgICAgIGhoY2QtPmhjW2NobnVtXS5kb19waW5nID0gMVU7CisgICAgfQorCisgICAgaGhjZC0+aGNbY2hudW1dLkVyckNudCA9IDBVOworICAgICh2b2lkKVVTQl9IQ19IYWx0KGhoY2QtPkluc3RhbmNlLCBjaG51bSk7CisgICAgX19IQUxfSENEX0NMRUFSX0hDX0lOVChjaG51bSwgVVNCX09UR19IQ0lOVF9OWUVUKTsKKyAgfQorICBlbHNlIGlmIChfX0hBTF9IQ0RfR0VUX0NIX0ZMQUcoaGhjZCwgY2hudW0sIFVTQl9PVEdfSENJTlRfU1RBTEwpKQorICB7CisgICAgX19IQUxfSENEX0NMRUFSX0hDX0lOVChjaG51bSwgVVNCX09UR19IQ0lOVF9TVEFMTCk7CisgICAgaGhjZC0+aGNbY2hudW1dLnN0YXRlID0gSENfU1RBTEw7CisgICAgKHZvaWQpVVNCX0hDX0hhbHQoaGhjZC0+SW5zdGFuY2UsIGNobnVtKTsKKyAgfQorICBlbHNlIGlmIChfX0hBTF9IQ0RfR0VUX0NIX0ZMQUcoaGhjZCwgY2hudW0sIFVTQl9PVEdfSENJTlRfTkFLKSkKKyAgeworICAgIGhoY2QtPmhjW2NobnVtXS5FcnJDbnQgPSAwVTsKKyAgICBoaGNkLT5oY1tjaG51bV0uc3RhdGUgPSBIQ19OQUs7CisKKyAgICBpZiAoaGhjZC0+aGNbY2hudW1dLmRvX3BpbmcgPT0gMFUpCisgICAgeworICAgICAgaWYgKGhoY2QtPmhjW2NobnVtXS5zcGVlZCA9PSBIQ0RfREVWSUNFX1NQRUVEX0hJR0gpCiAgICAgICB7Ci0gICAgICAgIGhoY2QtPmhjW2NoX251bV0uZG9fcGluZyA9IDFVOworICAgICAgICBoaGNkLT5oY1tjaG51bV0uZG9fcGluZyA9IDFVOwogICAgICAgfQogICAgIH0KIAotICAgIF9fSEFMX0hDRF9VTk1BU0tfSEFMVF9IQ19JTlQoY2hfbnVtKTsKLSAgICAodm9pZClVU0JfSENfSGFsdChoaGNkLT5JbnN0YW5jZSwgKHVpbnQ4X3QpY2hfbnVtKTsKLSAgICBfX0hBTF9IQ0RfQ0xFQVJfSENfSU5UKGNoX251bSwgVVNCX09UR19IQ0lOVF9OQUspOworICAgICh2b2lkKVVTQl9IQ19IYWx0KGhoY2QtPkluc3RhbmNlLCBjaG51bSk7CisgICAgX19IQUxfSENEX0NMRUFSX0hDX0lOVChjaG51bSwgVVNCX09UR19IQ0lOVF9OQUspOwogICB9Ci0gIGVsc2UgaWYgKChVU0J4X0hDKGNoX251bSktPkhDSU5UICYgVVNCX09UR19IQ0lOVF9UWEVSUikgPT0gVVNCX09UR19IQ0lOVF9UWEVSUikKKyAgZWxzZSBpZiAoX19IQUxfSENEX0dFVF9DSF9GTEFHKGhoY2QsIGNobnVtLCBVU0JfT1RHX0hDSU5UX1RYRVJSKSkKICAgewogICAgIGlmIChoaGNkLT5Jbml0LmRtYV9lbmFibGUgPT0gMFUpCiAgICAgewotICAgICAgaGhjZC0+aGNbY2hfbnVtXS5zdGF0ZSA9IEhDX1hBQ1RFUlI7Ci0gICAgICBfX0hBTF9IQ0RfVU5NQVNLX0hBTFRfSENfSU5UKGNoX251bSk7Ci0gICAgICAodm9pZClVU0JfSENfSGFsdChoaGNkLT5JbnN0YW5jZSwgKHVpbnQ4X3QpY2hfbnVtKTsKKyAgICAgIGhoY2QtPmhjW2NobnVtXS5zdGF0ZSA9IEhDX1hBQ1RFUlI7CisgICAgICAodm9pZClVU0JfSENfSGFsdChoaGNkLT5JbnN0YW5jZSwgY2hudW0pOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgaGhjZC0+aGNbY2hfbnVtXS5FcnJDbnQrKzsKLSAgICAgIGlmIChoaGNkLT5oY1tjaF9udW1dLkVyckNudCA+IDJVKQorICAgICAgaGhjZC0+aGNbY2hudW1dLkVyckNudCsrOworICAgICAgaWYgKGhoY2QtPmhjW2NobnVtXS5FcnJDbnQgPiAyVSkKICAgICAgIHsKLSAgICAgICAgaGhjZC0+aGNbY2hfbnVtXS5FcnJDbnQgPSAwVTsKLSAgICAgICAgaGhjZC0+aGNbY2hfbnVtXS51cmJfc3RhdGUgPSBVUkJfRVJST1I7Ci0gICAgICAgIEhBTF9IQ0RfSENfTm90aWZ5VVJCQ2hhbmdlX0NhbGxiYWNrKGhoY2QsICh1aW50OF90KWNoX251bSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGhjZC0+aGNbY2hfbnVtXS51cmJfc3RhdGUpOworICAgICAgICBoaGNkLT5oY1tjaG51bV0uRXJyQ250ID0gMFU7CisgICAgICAgIGhoY2QtPmhjW2NobnVtXS51cmJfc3RhdGUgPSBVUkJfRVJST1I7CisKKyNpZiAoVVNFX0hBTF9IQ0RfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDFVKQorICAgICAgICBoaGNkLT5IQ19Ob3RpZnlVUkJDaGFuZ2VDYWxsYmFjayhoaGNkLCBjaG51bSwgaGhjZC0+aGNbY2hudW1dLnVyYl9zdGF0ZSk7CisjZWxzZQorICAgICAgICBIQUxfSENEX0hDX05vdGlmeVVSQkNoYW5nZV9DYWxsYmFjayhoaGNkLCBjaG51bSwgaGhjZC0+aGNbY2hudW1dLnVyYl9zdGF0ZSk7CisjZW5kaWYgLyogVVNFX0hBTF9IQ0RfUkVHSVNURVJfQ0FMTEJBQ0tTICovCiAgICAgICB9CiAgICAgICBlbHNlCiAgICAgICB7Ci0gICAgICAgIGhoY2QtPmhjW2NoX251bV0udXJiX3N0YXRlID0gVVJCX05PVFJFQURZOworICAgICAgICBoaGNkLT5oY1tjaG51bV0udXJiX3N0YXRlID0gVVJCX05PVFJFQURZOwogICAgICAgfQogICAgIH0KLSAgICBfX0hBTF9IQ0RfQ0xFQVJfSENfSU5UKGNoX251bSwgVVNCX09UR19IQ0lOVF9UWEVSUik7CisgICAgX19IQUxfSENEX0NMRUFSX0hDX0lOVChjaG51bSwgVVNCX09UR19IQ0lOVF9UWEVSUik7CiAgIH0KLSAgZWxzZSBpZiAoKFVTQnhfSEMoY2hfbnVtKS0+SENJTlQgJiBVU0JfT1RHX0hDSU5UX0RURVJSKSA9PSBVU0JfT1RHX0hDSU5UX0RURVJSKQorICBlbHNlIGlmIChfX0hBTF9IQ0RfR0VUX0NIX0ZMQUcoaGhjZCwgY2hudW0sIFVTQl9PVEdfSENJTlRfRFRFUlIpKQogICB7Ci0gICAgX19IQUxfSENEX1VOTUFTS19IQUxUX0hDX0lOVChjaF9udW0pOwotICAgICh2b2lkKVVTQl9IQ19IYWx0KGhoY2QtPkluc3RhbmNlLCAodWludDhfdCljaF9udW0pOwotICAgIF9fSEFMX0hDRF9DTEVBUl9IQ19JTlQoY2hfbnVtLCBVU0JfT1RHX0hDSU5UX05BSyk7Ci0gICAgX19IQUxfSENEX0NMRUFSX0hDX0lOVChjaF9udW0sIFVTQl9PVEdfSENJTlRfRFRFUlIpOwotICAgIGhoY2QtPmhjW2NoX251bV0uc3RhdGUgPSBIQ19EQVRBVEdMRVJSOworICAgIGhoY2QtPmhjW2NobnVtXS5zdGF0ZSA9IEhDX0RBVEFUR0xFUlI7CisgICAgKHZvaWQpVVNCX0hDX0hhbHQoaGhjZC0+SW5zdGFuY2UsIGNobnVtKTsKKyAgICBfX0hBTF9IQ0RfQ0xFQVJfSENfSU5UKGNobnVtLCBVU0JfT1RHX0hDSU5UX0RURVJSKTsKICAgfQotICBlbHNlIGlmICgoVVNCeF9IQyhjaF9udW0pLT5IQ0lOVCAmIFVTQl9PVEdfSENJTlRfQ0hIKSA9PSBVU0JfT1RHX0hDSU5UX0NISCkKKyAgZWxzZSBpZiAoX19IQUxfSENEX0dFVF9DSF9GTEFHKGhoY2QsIGNobnVtLCBVU0JfT1RHX0hDSU5UX0NISCkpCiAgIHsKLSAgICBfX0hBTF9IQ0RfTUFTS19IQUxUX0hDX0lOVChjaF9udW0pOworICAgIF9fSEFMX0hDRF9DTEVBUl9IQ19JTlQoY2hudW0sIFVTQl9PVEdfSENJTlRfQ0hIKTsKIAotICAgIGlmIChoaGNkLT5oY1tjaF9udW1dLnN0YXRlID09IEhDX1hGUkMpCisgICAgaWYgKGhoY2QtPmhjW2NobnVtXS5zdGF0ZSA9PSBIQ19YRlJDKQogICAgIHsKLSAgICAgIGhoY2QtPmhjW2NoX251bV0udXJiX3N0YXRlICA9IFVSQl9ET05FOwotICAgICAgaWYgKChoaGNkLT5oY1tjaF9udW1dLmVwX3R5cGUgPT0gRVBfVFlQRV9CVUxLKSB8fAotICAgICAgICAgIChoaGNkLT5oY1tjaF9udW1dLmVwX3R5cGUgPT0gRVBfVFlQRV9JTlRSKSkKKyAgICAgIGhoY2QtPmhjW2NobnVtXS5zdGF0ZSA9IEhDX0hBTFRFRDsKKyAgICAgIGhoY2QtPmhjW2NobnVtXS51cmJfc3RhdGUgPSBVUkJfRE9ORTsKKworICAgICAgaWYgKChoaGNkLT5oY1tjaG51bV0uZXBfdHlwZSA9PSBFUF9UWVBFX0JVTEspIHx8CisgICAgICAgICAgKGhoY2QtPmhjW2NobnVtXS5lcF90eXBlID09IEVQX1RZUEVfSU5UUikpCiAgICAgICB7CiAgICAgICAgIGlmIChoaGNkLT5Jbml0LmRtYV9lbmFibGUgPT0gMFUpCiAgICAgICAgIHsKLSAgICAgICAgICBoaGNkLT5oY1tjaF9udW1dLnRvZ2dsZV9vdXQgXj0gMVU7CisgICAgICAgICAgaGhjZC0+aGNbY2hudW1dLnRvZ2dsZV9vdXQgXj0gMVU7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoKGhoY2QtPkluaXQuZG1hX2VuYWJsZSA9PSAxVSkgJiYgKGhoY2QtPmhjW2NoX251bV0ueGZlcl9sZW4gPiAwVSkpCisgICAgICAgIGlmICgoaGhjZC0+SW5pdC5kbWFfZW5hYmxlID09IDFVKSAmJiAoaGhjZC0+aGNbY2hudW1dLnhmZXJfbGVuID4gMFUpKQogICAgICAgICB7Ci0gICAgICAgICAgbnVtX3BhY2tldHMgPSAoaGhjZC0+aGNbY2hfbnVtXS54ZmVyX2xlbiArIGhoY2QtPmhjW2NoX251bV0ubWF4X3BhY2tldCAtIDFVKSAvIGhoY2QtPmhjW2NoX251bV0ubWF4X3BhY2tldDsKKyAgICAgICAgICBudW1fcGFja2V0cyA9IChoaGNkLT5oY1tjaG51bV0ueGZlcl9sZW4gKyBoaGNkLT5oY1tjaG51bV0ubWF4X3BhY2tldCAtIDFVKSAvIGhoY2QtPmhjW2NobnVtXS5tYXhfcGFja2V0OwogCiAgICAgICAgICAgaWYgKChudW1fcGFja2V0cyAmIDFVKSAhPSAwVSkKICAgICAgICAgICB7Ci0gICAgICAgICAgICBoaGNkLT5oY1tjaF9udW1dLnRvZ2dsZV9vdXQgXj0gMVU7CisgICAgICAgICAgICBoaGNkLT5oY1tjaG51bV0udG9nZ2xlX291dCBePSAxVTsKICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgIH0KICAgICB9Ci0gICAgZWxzZSBpZiAoaGhjZC0+aGNbY2hfbnVtXS5zdGF0ZSA9PSBIQ19OQUspCisgICAgZWxzZSBpZiAoaGhjZC0+aGNbY2hudW1dLnN0YXRlID09IEhDX0FDSykKICAgICB7Ci0gICAgICBoaGNkLT5oY1tjaF9udW1dLnVyYl9zdGF0ZSA9IFVSQl9OT1RSRUFEWTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoaGhjZC0+aGNbY2hfbnVtXS5zdGF0ZSA9PSBIQ19OWUVUKQotICAgIHsKLSAgICAgIGhoY2QtPmhjW2NoX251bV0udXJiX3N0YXRlICA9IFVSQl9OT1RSRUFEWTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoaGhjZC0+aGNbY2hfbnVtXS5zdGF0ZSA9PSBIQ19TVEFMTCkKLSAgICB7Ci0gICAgICBoaGNkLT5oY1tjaF9udW1dLnVyYl9zdGF0ZSAgPSBVUkJfU1RBTEw7Ci0gICAgfQotICAgIGVsc2UgaWYgKChoaGNkLT5oY1tjaF9udW1dLnN0YXRlID09IEhDX1hBQ1RFUlIpIHx8Ci0gICAgICAgICAgICAgKGhoY2QtPmhjW2NoX251bV0uc3RhdGUgPT0gSENfREFUQVRHTEVSUikpCi0gICAgewotICAgICAgaGhjZC0+aGNbY2hfbnVtXS5FcnJDbnQrKzsKLSAgICAgIGlmIChoaGNkLT5oY1tjaF9udW1dLkVyckNudCA+IDJVKQorICAgICAgaGhjZC0+aGNbY2hudW1dLnN0YXRlID0gSENfSEFMVEVEOworCisgICAgICBpZiAoaGhjZC0+aGNbY2hudW1dLmRvX2NzcGxpdCA9PSAxVSkKICAgICAgIHsKLSAgICAgICAgaGhjZC0+aGNbY2hfbnVtXS5FcnJDbnQgPSAwVTsKLSAgICAgICAgaGhjZC0+aGNbY2hfbnVtXS51cmJfc3RhdGUgPSBVUkJfRVJST1I7CisgICAgICAgIGhoY2QtPmhjW2NobnVtXS51cmJfc3RhdGUgPSBVUkJfTk9UUkVBRFk7CisgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGhoY2QtPmhjW2NobnVtXS5zdGF0ZSA9PSBIQ19OQUspCisgICAgeworICAgICAgaGhjZC0+aGNbY2hudW1dLnN0YXRlID0gSENfSEFMVEVEOworICAgICAgaGhjZC0+aGNbY2hudW1dLnVyYl9zdGF0ZSA9IFVSQl9OT1RSRUFEWTsKKworICAgICAgaWYgKGhoY2QtPmhjW2NobnVtXS5kb19jc3BsaXQgPT0gMVUpCisgICAgICB7CisgICAgICAgIGhoY2QtPmhjW2NobnVtXS5kb19jc3BsaXQgPSAwVTsKKyAgICAgICAgX19IQUxfSENEX0NMRUFSX0hDX0NTUExUKGNobnVtKTsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoaGhjZC0+aGNbY2hudW1dLnN0YXRlID09IEhDX05ZRVQpCisgICAgeworICAgICAgaGhjZC0+aGNbY2hudW1dLnN0YXRlID0gSENfSEFMVEVEOworICAgICAgaGhjZC0+aGNbY2hudW1dLnVyYl9zdGF0ZSAgPSBVUkJfTk9UUkVBRFk7CisgICAgfQorICAgIGVsc2UgaWYgKGhoY2QtPmhjW2NobnVtXS5zdGF0ZSA9PSBIQ19TVEFMTCkKKyAgICB7CisgICAgICBoaGNkLT5oY1tjaG51bV0uc3RhdGUgPSBIQ19IQUxURUQ7CisgICAgICBoaGNkLT5oY1tjaG51bV0udXJiX3N0YXRlICA9IFVSQl9TVEFMTDsKKyAgICB9CisgICAgZWxzZSBpZiAoKGhoY2QtPmhjW2NobnVtXS5zdGF0ZSA9PSBIQ19YQUNURVJSKSB8fAorICAgICAgICAgICAgIChoaGNkLT5oY1tjaG51bV0uc3RhdGUgPT0gSENfREFUQVRHTEVSUikpCisgICAgeworICAgICAgaGhjZC0+aGNbY2hudW1dLnN0YXRlID0gSENfSEFMVEVEOworICAgICAgaGhjZC0+aGNbY2hudW1dLkVyckNudCsrOworICAgICAgaWYgKGhoY2QtPmhjW2NobnVtXS5FcnJDbnQgPiAyVSkKKyAgICAgIHsKKyAgICAgICAgaGhjZC0+aGNbY2hudW1dLkVyckNudCA9IDBVOworICAgICAgICBoaGNkLT5oY1tjaG51bV0udXJiX3N0YXRlID0gVVJCX0VSUk9SOwogICAgICAgfQogICAgICAgZWxzZQogICAgICAgewotICAgICAgICBoaGNkLT5oY1tjaF9udW1dLnVyYl9zdGF0ZSA9IFVSQl9OT1RSRUFEWTsKKyAgICAgICAgaGhjZC0+aGNbY2hudW1dLnVyYl9zdGF0ZSA9IFVSQl9OT1RSRUFEWTsKIAogICAgICAgICAvKiByZS1hY3RpdmF0ZSB0aGUgY2hhbm5lbCAgKi8KLSAgICAgICAgdG1wcmVnID0gVVNCeF9IQyhjaF9udW0pLT5IQ0NIQVI7CisgICAgICAgIHRtcHJlZyA9IFVTQnhfSEMoY2hudW0pLT5IQ0NIQVI7CiAgICAgICAgIHRtcHJlZyAmPSB+VVNCX09UR19IQ0NIQVJfQ0hESVM7CiAgICAgICAgIHRtcHJlZyB8PSBVU0JfT1RHX0hDQ0hBUl9DSEVOQTsKLSAgICAgICAgVVNCeF9IQyhjaF9udW0pLT5IQ0NIQVIgPSB0bXByZWc7CisgICAgICAgIFVTQnhfSEMoY2hudW0pLT5IQ0NIQVIgPSB0bXByZWc7CiAgICAgICB9CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAvKiAuLi4gKi8KKyAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBfX0hBTF9IQ0RfQ0xFQVJfSENfSU5UKGNoX251bSwgVVNCX09UR19IQ0lOVF9DSEgpOwotICAgIEhBTF9IQ0RfSENfTm90aWZ5VVJCQ2hhbmdlX0NhbGxiYWNrKGhoY2QsICh1aW50OF90KWNoX251bSwgaGhjZC0+aGNbY2hfbnVtXS51cmJfc3RhdGUpOworI2lmIChVU0VfSEFMX0hDRF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCisgICAgaGhjZC0+SENfTm90aWZ5VVJCQ2hhbmdlQ2FsbGJhY2soaGhjZCwgY2hudW0sIGhoY2QtPmhjW2NobnVtXS51cmJfc3RhdGUpOworI2Vsc2UKKyAgICBIQUxfSENEX0hDX05vdGlmeVVSQkNoYW5nZV9DYWxsYmFjayhoaGNkLCBjaG51bSwgaGhjZC0+aGNbY2hudW1dLnVyYl9zdGF0ZSk7CisjZW5kaWYgLyogVVNFX0hBTF9IQ0RfUkVHSVNURVJfQ0FMTEJBQ0tTICovCiAgIH0KICAgZWxzZQogICB7Ci0gICAgLyogLi4uICovCisgICAgcmV0dXJuOwogICB9CiB9CiAKQEAgLTE1NzMsMTAgKzE4MjIsMTAgQEAKICAgdWludDMyX3QgR3J4c3RzcFJlZzsKICAgdWludDMyX3QgeGZlclNpemVQa3RDbnQ7CiAgIHVpbnQzMl90IHRtcHJlZzsKLSAgdWludDMyX3QgY2hfbnVtOworICB1aW50MzJfdCBjaG51bTsKIAogICBHcnhzdHNwUmVnID0gaGhjZC0+SW5zdGFuY2UtPkdSWFNUU1A7Ci0gIGNoX251bSA9IEdyeHN0c3BSZWcgJiBVU0JfT1RHX0dSWFNUU1BfRVBOVU07CisgIGNobnVtID0gR3J4c3RzcFJlZyAmIFVTQl9PVEdfR1JYU1RTUF9FUE5VTTsKICAgcGt0c3RzID0gKEdyeHN0c3BSZWcgJiBVU0JfT1RHX0dSWFNUU1BfUEtUU1RTKSA+PiAxNzsKICAgcGt0Y250ID0gKEdyeHN0c3BSZWcgJiBVU0JfT1RHX0dSWFNUU1BfQkNOVCkgPj4gNDsKIApAQCAtMTU4NCwzMyArMTgzMywzMyBAQAogICB7CiAgICAgY2FzZSBHUlhTVFNfUEtUU1RTX0lOOgogICAgICAgLyogUmVhZCB0aGUgZGF0YSBpbnRvIHRoZSBob3N0IGJ1ZmZlci4gKi8KLSAgICAgIGlmICgocGt0Y250ID4gMFUpICYmIChoaGNkLT5oY1tjaF9udW1dLnhmZXJfYnVmZiAhPSAodm9pZCAqKTApKQorICAgICAgaWYgKChwa3RjbnQgPiAwVSkgJiYgKGhoY2QtPmhjW2NobnVtXS54ZmVyX2J1ZmYgIT0gKHZvaWQgKikwKSkKICAgICAgIHsKLSAgICAgICAgaWYgKChoaGNkLT5oY1tjaF9udW1dLnhmZXJfY291bnQgKyBwa3RjbnQpIDw9IGhoY2QtPmhjW2NoX251bV0ueGZlcl9sZW4pCisgICAgICAgIGlmICgoaGhjZC0+aGNbY2hudW1dLnhmZXJfY291bnQgKyBwa3RjbnQpIDw9IGhoY2QtPmhjW2NobnVtXS54ZmVyX2xlbikKICAgICAgICAgewogICAgICAgICAgICh2b2lkKVVTQl9SZWFkUGFja2V0KGhoY2QtPkluc3RhbmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhoY2QtPmhjW2NoX251bV0ueGZlcl9idWZmLCAodWludDE2X3QpcGt0Y250KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaGNkLT5oY1tjaG51bV0ueGZlcl9idWZmLCAodWludDE2X3QpcGt0Y250KTsKIAogICAgICAgICAgIC8qIG1hbmFnZSBtdWx0aXBsZSBYZmVyICovCi0gICAgICAgICAgaGhjZC0+aGNbY2hfbnVtXS54ZmVyX2J1ZmYgKz0gcGt0Y250OwotICAgICAgICAgIGhoY2QtPmhjW2NoX251bV0ueGZlcl9jb3VudCArPSBwa3RjbnQ7CisgICAgICAgICAgaGhjZC0+aGNbY2hudW1dLnhmZXJfYnVmZiArPSBwa3RjbnQ7CisgICAgICAgICAgaGhjZC0+aGNbY2hudW1dLnhmZXJfY291bnQgKz0gcGt0Y250OwogCiAgICAgICAgICAgLyogZ2V0IHRyYW5zZmVyIHNpemUgcGFja2V0IGNvdW50ICovCi0gICAgICAgICAgeGZlclNpemVQa3RDbnQgPSAoVVNCeF9IQyhjaF9udW0pLT5IQ1RTSVogJiBVU0JfT1RHX0hDVFNJWl9QS1RDTlQpID4+IDE5OworICAgICAgICAgIHhmZXJTaXplUGt0Q250ID0gKFVTQnhfSEMoY2hudW0pLT5IQ1RTSVogJiBVU0JfT1RHX0hDVFNJWl9QS1RDTlQpID4+IDE5OwogCi0gICAgICAgICAgaWYgKChoaGNkLT5oY1tjaF9udW1dLm1heF9wYWNrZXQgPT0gcGt0Y250KSAmJiAoeGZlclNpemVQa3RDbnQgPiAwVSkpCisgICAgICAgICAgaWYgKChoaGNkLT5oY1tjaG51bV0ubWF4X3BhY2tldCA9PSBwa3RjbnQpICYmICh4ZmVyU2l6ZVBrdENudCA+IDBVKSkKICAgICAgICAgICB7CiAgICAgICAgICAgICAvKiByZS1hY3RpdmF0ZSB0aGUgY2hhbm5lbCB3aGVuIG1vcmUgcGFja2V0cyBhcmUgZXhwZWN0ZWQgKi8KLSAgICAgICAgICAgIHRtcHJlZyA9IFVTQnhfSEMoY2hfbnVtKS0+SENDSEFSOworICAgICAgICAgICAgdG1wcmVnID0gVVNCeF9IQyhjaG51bSktPkhDQ0hBUjsKICAgICAgICAgICAgIHRtcHJlZyAmPSB+VVNCX09UR19IQ0NIQVJfQ0hESVM7CiAgICAgICAgICAgICB0bXByZWcgfD0gVVNCX09UR19IQ0NIQVJfQ0hFTkE7Ci0gICAgICAgICAgICBVU0J4X0hDKGNoX251bSktPkhDQ0hBUiA9IHRtcHJlZzsKLSAgICAgICAgICAgIGhoY2QtPmhjW2NoX251bV0udG9nZ2xlX2luIF49IDFVOworICAgICAgICAgICAgVVNCeF9IQyhjaG51bSktPkhDQ0hBUiA9IHRtcHJlZzsKKyAgICAgICAgICAgIGhoY2QtPmhjW2NobnVtXS50b2dnbGVfaW4gXj0gMVU7CiAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAgIGhoY2QtPmhjW2NoX251bV0udXJiX3N0YXRlID0gVVJCX0VSUk9SOworICAgICAgICAgIGhoY2QtPmhjW2NobnVtXS51cmJfc3RhdGUgPSBVUkJfRVJST1I7CiAgICAgICAgIH0KICAgICAgIH0KICAgICAgIGJyZWFrOwpAQCAtMTY2NSw3ICsxOTE0LDcgQEAKIAogICAgIGlmICgoaHBydDAgJiBVU0JfT1RHX0hQUlRfUEVOQSkgPT0gVVNCX09UR19IUFJUX1BFTkEpCiAgICAgewotICAgICAgaWYgKGhoY2QtPkluaXQucGh5X2l0ZmFjZSAgPT0gVVNCX09UR19FTUJFRERFRF9QSFkpCisgICAgICBpZiAoaGhjZC0+SW5pdC5waHlfaXRmYWNlID09IFVTQl9PVEdfRU1CRURERURfUEhZKQogICAgICAgewogICAgICAgICBpZiAoKGhwcnQwICYgVVNCX09UR19IUFJUX1BTUEQpID09IChIUFJUMF9QUlRTUERfTE9XX1NQRUVEIDw8IDE3KSkKICAgICAgICAgewpAQCAtMTY4MCw3ICsxOTI5LDcgQEAKICAgICAgIHsKICAgICAgICAgaWYgKGhoY2QtPkluaXQuc3BlZWQgPT0gSENEX1NQRUVEX0ZVTEwpCiAgICAgICAgIHsKLSAgICAgICAgICBVU0J4X0hPU1QtPkhGSVIgPSA2MDAwMFU7CisgICAgICAgICAgVVNCeF9IT1NULT5IRklSID0gSEZJUl82MF9NSFo7CiAgICAgICAgIH0KICAgICAgIH0KICNpZiAoVVNFX0hBTF9IQ0RfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDFVKQpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjJ4eF9oYWxfaTJjLmMgYi9TcmMvc3RtMzJmMnh4X2hhbF9pMmMuYwppbmRleCA1NjdmYWFlLi40OGVlZjJmIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmMnh4X2hhbF9pMmMuYworKysgYi9TcmMvc3RtMzJmMnh4X2hhbF9pMmMuYwpAQCAtMzAsNyArMzAsNyBAQAogICAgICgjKSBEZWNsYXJlIGEgSTJDX0hhbmRsZVR5cGVEZWYgaGFuZGxlIHN0cnVjdHVyZSwgZm9yIGV4YW1wbGU6CiAgICAgICAgIEkyQ19IYW5kbGVUeXBlRGVmICBoaTJjOwogCi0gICAgKCMpSW5pdGlhbGl6ZSB0aGUgSTJDIGxvdyBsZXZlbCByZXNvdXJjZXMgYnkgaW1wbGVtZW50aW5nIHRoZSBAcmVmIEhBTF9JMkNfTXNwSW5pdCgpIEFQSToKKyAgICAoIylJbml0aWFsaXplIHRoZSBJMkMgbG93IGxldmVsIHJlc291cmNlcyBieSBpbXBsZW1lbnRpbmcgdGhlIEhBTF9JMkNfTXNwSW5pdCgpIEFQSToKICAgICAgICAgKCMjKSBFbmFibGUgdGhlIEkyQ3ggaW50ZXJmYWNlIGNsb2NrCiAgICAgICAgICgjIykgSTJDIHBpbnMgY29uZmlndXJhdGlvbgogICAgICAgICAgICAgKCsrKykgRW5hYmxlIHRoZSBjbG9jayBmb3IgdGhlIEkyQyBHUElPcwpAQCAtNTAsNDggKzUwLDQ4IEBACiAgICAgKCMpIENvbmZpZ3VyZSB0aGUgQ29tbXVuaWNhdGlvbiBTcGVlZCwgRHV0eSBjeWNsZSwgQWRkcmVzc2luZyBtb2RlLCBPd24gQWRkcmVzczEsCiAgICAgICAgIER1YWwgQWRkcmVzc2luZyBtb2RlLCBPd24gQWRkcmVzczIsIEdlbmVyYWwgY2FsbCBhbmQgTm9zdHJldGNoIG1vZGUgaW4gdGhlIGhpMmMgSW5pdCBzdHJ1Y3R1cmUuCiAKLSAgICAoIykgSW5pdGlhbGl6ZSB0aGUgSTJDIHJlZ2lzdGVycyBieSBjYWxsaW5nIHRoZSBAcmVmIEhBTF9JMkNfSW5pdCgpLCBjb25maWd1cmVzIGFsc28gdGhlIGxvdyBsZXZlbCBIYXJkd2FyZQotICAgICAgICAoR1BJTywgQ0xPQ0ssIE5WSUMuLi5ldGMpIGJ5IGNhbGxpbmcgdGhlIGN1c3RvbWl6ZWQgQHJlZiBIQUxfSTJDX01zcEluaXQoKSBBUEkuCisgICAgKCMpIEluaXRpYWxpemUgdGhlIEkyQyByZWdpc3RlcnMgYnkgY2FsbGluZyB0aGUgSEFMX0kyQ19Jbml0KCksIGNvbmZpZ3VyZXMgYWxzbyB0aGUgbG93IGxldmVsIEhhcmR3YXJlCisgICAgICAgIChHUElPLCBDTE9DSywgTlZJQy4uLmV0YykgYnkgY2FsbGluZyB0aGUgY3VzdG9taXplZCBIQUxfSTJDX01zcEluaXQoKSBBUEkuCiAKLSAgICAoIykgVG8gY2hlY2sgaWYgdGFyZ2V0IGRldmljZSBpcyByZWFkeSBmb3IgY29tbXVuaWNhdGlvbiwgdXNlIHRoZSBmdW5jdGlvbiBAcmVmIEhBTF9JMkNfSXNEZXZpY2VSZWFkeSgpCisgICAgKCMpIFRvIGNoZWNrIGlmIHRhcmdldCBkZXZpY2UgaXMgcmVhZHkgZm9yIGNvbW11bmljYXRpb24sIHVzZSB0aGUgZnVuY3Rpb24gSEFMX0kyQ19Jc0RldmljZVJlYWR5KCkKIAogICAgICgjKSBGb3IgSTJDIElPIGFuZCBJTyBNRU0gb3BlcmF0aW9ucywgdGhyZWUgb3BlcmF0aW9uIG1vZGVzIGFyZSBhdmFpbGFibGUgd2l0aGluIHRoaXMgZHJpdmVyIDoKIAogICAgICoqKiBQb2xsaW5nIG1vZGUgSU8gb3BlcmF0aW9uICoqKgogICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgIFsuLl0KLSAgICAgICgrKSBUcmFuc21pdCBpbiBtYXN0ZXIgbW9kZSBhbiBhbW91bnQgb2YgZGF0YSBpbiBibG9ja2luZyBtb2RlIHVzaW5nIEByZWYgSEFMX0kyQ19NYXN0ZXJfVHJhbnNtaXQoKQotICAgICAgKCspIFJlY2VpdmUgaW4gbWFzdGVyIG1vZGUgYW4gYW1vdW50IG9mIGRhdGEgaW4gYmxvY2tpbmcgbW9kZSB1c2luZyBAcmVmIEhBTF9JMkNfTWFzdGVyX1JlY2VpdmUoKQotICAgICAgKCspIFRyYW5zbWl0IGluIHNsYXZlIG1vZGUgYW4gYW1vdW50IG9mIGRhdGEgaW4gYmxvY2tpbmcgbW9kZSB1c2luZyBAcmVmIEhBTF9JMkNfU2xhdmVfVHJhbnNtaXQoKQotICAgICAgKCspIFJlY2VpdmUgaW4gc2xhdmUgbW9kZSBhbiBhbW91bnQgb2YgZGF0YSBpbiBibG9ja2luZyBtb2RlIHVzaW5nIEByZWYgSEFMX0kyQ19TbGF2ZV9SZWNlaXZlKCkKKyAgICAgICgrKSBUcmFuc21pdCBpbiBtYXN0ZXIgbW9kZSBhbiBhbW91bnQgb2YgZGF0YSBpbiBibG9ja2luZyBtb2RlIHVzaW5nIEhBTF9JMkNfTWFzdGVyX1RyYW5zbWl0KCkKKyAgICAgICgrKSBSZWNlaXZlIGluIG1hc3RlciBtb2RlIGFuIGFtb3VudCBvZiBkYXRhIGluIGJsb2NraW5nIG1vZGUgdXNpbmcgSEFMX0kyQ19NYXN0ZXJfUmVjZWl2ZSgpCisgICAgICAoKykgVHJhbnNtaXQgaW4gc2xhdmUgbW9kZSBhbiBhbW91bnQgb2YgZGF0YSBpbiBibG9ja2luZyBtb2RlIHVzaW5nIEhBTF9JMkNfU2xhdmVfVHJhbnNtaXQoKQorICAgICAgKCspIFJlY2VpdmUgaW4gc2xhdmUgbW9kZSBhbiBhbW91bnQgb2YgZGF0YSBpbiBibG9ja2luZyBtb2RlIHVzaW5nIEhBTF9JMkNfU2xhdmVfUmVjZWl2ZSgpCiAKICAgICAqKiogUG9sbGluZyBtb2RlIElPIE1FTSBvcGVyYXRpb24gKioqCiAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgIFsuLl0KLSAgICAgICgrKSBXcml0ZSBhbiBhbW91bnQgb2YgZGF0YSBpbiBibG9ja2luZyBtb2RlIHRvIGEgc3BlY2lmaWMgbWVtb3J5IGFkZHJlc3MgdXNpbmcgQHJlZiBIQUxfSTJDX01lbV9Xcml0ZSgpCi0gICAgICAoKykgUmVhZCBhbiBhbW91bnQgb2YgZGF0YSBpbiBibG9ja2luZyBtb2RlIGZyb20gYSBzcGVjaWZpYyBtZW1vcnkgYWRkcmVzcyB1c2luZyBAcmVmIEhBTF9JMkNfTWVtX1JlYWQoKQorICAgICAgKCspIFdyaXRlIGFuIGFtb3VudCBvZiBkYXRhIGluIGJsb2NraW5nIG1vZGUgdG8gYSBzcGVjaWZpYyBtZW1vcnkgYWRkcmVzcyB1c2luZyBIQUxfSTJDX01lbV9Xcml0ZSgpCisgICAgICAoKykgUmVhZCBhbiBhbW91bnQgb2YgZGF0YSBpbiBibG9ja2luZyBtb2RlIGZyb20gYSBzcGVjaWZpYyBtZW1vcnkgYWRkcmVzcyB1c2luZyBIQUxfSTJDX01lbV9SZWFkKCkKIAogCiAgICAgKioqIEludGVycnVwdCBtb2RlIElPIG9wZXJhdGlvbiAqKioKICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgIFsuLl0KLSAgICAgICgrKSBUcmFuc21pdCBpbiBtYXN0ZXIgbW9kZSBhbiBhbW91bnQgb2YgZGF0YSBpbiBub24tYmxvY2tpbmcgbW9kZSB1c2luZyBAcmVmIEhBTF9JMkNfTWFzdGVyX1RyYW5zbWl0X0lUKCkKLSAgICAgICgrKSBBdCB0cmFuc21pc3Npb24gZW5kIG9mIHRyYW5zZmVyLCBAcmVmIEhBTF9JMkNfTWFzdGVyVHhDcGx0Q2FsbGJhY2soKSBpcyBleGVjdXRlZCBhbmQgdXNlciBjYW4KLSAgICAgICAgICAgYWRkIGhpcyBvd24gY29kZSBieSBjdXN0b21pemF0aW9uIG9mIGZ1bmN0aW9uIHBvaW50ZXIgQHJlZiBIQUxfSTJDX01hc3RlclR4Q3BsdENhbGxiYWNrKCkKLSAgICAgICgrKSBSZWNlaXZlIGluIG1hc3RlciBtb2RlIGFuIGFtb3VudCBvZiBkYXRhIGluIG5vbi1ibG9ja2luZyBtb2RlIHVzaW5nIEByZWYgSEFMX0kyQ19NYXN0ZXJfUmVjZWl2ZV9JVCgpCi0gICAgICAoKykgQXQgcmVjZXB0aW9uIGVuZCBvZiB0cmFuc2ZlciwgQHJlZiBIQUxfSTJDX01hc3RlclJ4Q3BsdENhbGxiYWNrKCkgaXMgZXhlY3V0ZWQgYW5kIHVzZXIgY2FuCi0gICAgICAgICAgIGFkZCBoaXMgb3duIGNvZGUgYnkgY3VzdG9taXphdGlvbiBvZiBmdW5jdGlvbiBwb2ludGVyIEByZWYgSEFMX0kyQ19NYXN0ZXJSeENwbHRDYWxsYmFjaygpCi0gICAgICAoKykgVHJhbnNtaXQgaW4gc2xhdmUgbW9kZSBhbiBhbW91bnQgb2YgZGF0YSBpbiBub24tYmxvY2tpbmcgbW9kZSB1c2luZyBAcmVmIEhBTF9JMkNfU2xhdmVfVHJhbnNtaXRfSVQoKQotICAgICAgKCspIEF0IHRyYW5zbWlzc2lvbiBlbmQgb2YgdHJhbnNmZXIsIEByZWYgSEFMX0kyQ19TbGF2ZVR4Q3BsdENhbGxiYWNrKCkgaXMgZXhlY3V0ZWQgYW5kIHVzZXIgY2FuCi0gICAgICAgICAgIGFkZCBoaXMgb3duIGNvZGUgYnkgY3VzdG9taXphdGlvbiBvZiBmdW5jdGlvbiBwb2ludGVyIEByZWYgSEFMX0kyQ19TbGF2ZVR4Q3BsdENhbGxiYWNrKCkKLSAgICAgICgrKSBSZWNlaXZlIGluIHNsYXZlIG1vZGUgYW4gYW1vdW50IG9mIGRhdGEgaW4gbm9uLWJsb2NraW5nIG1vZGUgdXNpbmcgQHJlZiBIQUxfSTJDX1NsYXZlX1JlY2VpdmVfSVQoKQotICAgICAgKCspIEF0IHJlY2VwdGlvbiBlbmQgb2YgdHJhbnNmZXIsIEByZWYgSEFMX0kyQ19TbGF2ZVJ4Q3BsdENhbGxiYWNrKCkgaXMgZXhlY3V0ZWQgYW5kIHVzZXIgY2FuCi0gICAgICAgICAgIGFkZCBoaXMgb3duIGNvZGUgYnkgY3VzdG9taXphdGlvbiBvZiBmdW5jdGlvbiBwb2ludGVyIEByZWYgSEFMX0kyQ19TbGF2ZVJ4Q3BsdENhbGxiYWNrKCkKLSAgICAgICgrKSBJbiBjYXNlIG9mIHRyYW5zZmVyIEVycm9yLCBAcmVmIEhBTF9JMkNfRXJyb3JDYWxsYmFjaygpIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGFuZCB1c2VyIGNhbgotICAgICAgICAgICBhZGQgaGlzIG93biBjb2RlIGJ5IGN1c3RvbWl6YXRpb24gb2YgZnVuY3Rpb24gcG9pbnRlciBAcmVmIEhBTF9JMkNfRXJyb3JDYWxsYmFjaygpCi0gICAgICAoKykgQWJvcnQgYSBtYXN0ZXIgSTJDIHByb2Nlc3MgY29tbXVuaWNhdGlvbiB3aXRoIEludGVycnVwdCB1c2luZyBAcmVmIEhBTF9JMkNfTWFzdGVyX0Fib3J0X0lUKCkKLSAgICAgICgrKSBFbmQgb2YgYWJvcnQgcHJvY2VzcywgQHJlZiBIQUxfSTJDX0Fib3J0Q3BsdENhbGxiYWNrKCkgaXMgZXhlY3V0ZWQgYW5kIHVzZXIgY2FuCi0gICAgICAgICAgIGFkZCBoaXMgb3duIGNvZGUgYnkgY3VzdG9taXphdGlvbiBvZiBmdW5jdGlvbiBwb2ludGVyIEByZWYgSEFMX0kyQ19BYm9ydENwbHRDYWxsYmFjaygpCisgICAgICAoKykgVHJhbnNtaXQgaW4gbWFzdGVyIG1vZGUgYW4gYW1vdW50IG9mIGRhdGEgaW4gbm9uLWJsb2NraW5nIG1vZGUgdXNpbmcgSEFMX0kyQ19NYXN0ZXJfVHJhbnNtaXRfSVQoKQorICAgICAgKCspIEF0IHRyYW5zbWlzc2lvbiBlbmQgb2YgdHJhbnNmZXIsIEhBTF9JMkNfTWFzdGVyVHhDcGx0Q2FsbGJhY2soKSBpcyBleGVjdXRlZCBhbmQgdXNlciBjYW4KKyAgICAgICAgICAgYWRkIGhpcyBvd24gY29kZSBieSBjdXN0b21pemF0aW9uIG9mIGZ1bmN0aW9uIHBvaW50ZXIgSEFMX0kyQ19NYXN0ZXJUeENwbHRDYWxsYmFjaygpCisgICAgICAoKykgUmVjZWl2ZSBpbiBtYXN0ZXIgbW9kZSBhbiBhbW91bnQgb2YgZGF0YSBpbiBub24tYmxvY2tpbmcgbW9kZSB1c2luZyBIQUxfSTJDX01hc3Rlcl9SZWNlaXZlX0lUKCkKKyAgICAgICgrKSBBdCByZWNlcHRpb24gZW5kIG9mIHRyYW5zZmVyLCBIQUxfSTJDX01hc3RlclJ4Q3BsdENhbGxiYWNrKCkgaXMgZXhlY3V0ZWQgYW5kIHVzZXIgY2FuCisgICAgICAgICAgIGFkZCBoaXMgb3duIGNvZGUgYnkgY3VzdG9taXphdGlvbiBvZiBmdW5jdGlvbiBwb2ludGVyIEhBTF9JMkNfTWFzdGVyUnhDcGx0Q2FsbGJhY2soKQorICAgICAgKCspIFRyYW5zbWl0IGluIHNsYXZlIG1vZGUgYW4gYW1vdW50IG9mIGRhdGEgaW4gbm9uLWJsb2NraW5nIG1vZGUgdXNpbmcgSEFMX0kyQ19TbGF2ZV9UcmFuc21pdF9JVCgpCisgICAgICAoKykgQXQgdHJhbnNtaXNzaW9uIGVuZCBvZiB0cmFuc2ZlciwgSEFMX0kyQ19TbGF2ZVR4Q3BsdENhbGxiYWNrKCkgaXMgZXhlY3V0ZWQgYW5kIHVzZXIgY2FuCisgICAgICAgICAgIGFkZCBoaXMgb3duIGNvZGUgYnkgY3VzdG9taXphdGlvbiBvZiBmdW5jdGlvbiBwb2ludGVyIEhBTF9JMkNfU2xhdmVUeENwbHRDYWxsYmFjaygpCisgICAgICAoKykgUmVjZWl2ZSBpbiBzbGF2ZSBtb2RlIGFuIGFtb3VudCBvZiBkYXRhIGluIG5vbi1ibG9ja2luZyBtb2RlIHVzaW5nIEhBTF9JMkNfU2xhdmVfUmVjZWl2ZV9JVCgpCisgICAgICAoKykgQXQgcmVjZXB0aW9uIGVuZCBvZiB0cmFuc2ZlciwgSEFMX0kyQ19TbGF2ZVJ4Q3BsdENhbGxiYWNrKCkgaXMgZXhlY3V0ZWQgYW5kIHVzZXIgY2FuCisgICAgICAgICAgIGFkZCBoaXMgb3duIGNvZGUgYnkgY3VzdG9taXphdGlvbiBvZiBmdW5jdGlvbiBwb2ludGVyIEhBTF9JMkNfU2xhdmVSeENwbHRDYWxsYmFjaygpCisgICAgICAoKykgSW4gY2FzZSBvZiB0cmFuc2ZlciBFcnJvciwgSEFMX0kyQ19FcnJvckNhbGxiYWNrKCkgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgYW5kIHVzZXIgY2FuCisgICAgICAgICAgIGFkZCBoaXMgb3duIGNvZGUgYnkgY3VzdG9taXphdGlvbiBvZiBmdW5jdGlvbiBwb2ludGVyIEhBTF9JMkNfRXJyb3JDYWxsYmFjaygpCisgICAgICAoKykgQWJvcnQgYSBtYXN0ZXIgSTJDIHByb2Nlc3MgY29tbXVuaWNhdGlvbiB3aXRoIEludGVycnVwdCB1c2luZyBIQUxfSTJDX01hc3Rlcl9BYm9ydF9JVCgpCisgICAgICAoKykgRW5kIG9mIGFib3J0IHByb2Nlc3MsIEhBTF9JMkNfQWJvcnRDcGx0Q2FsbGJhY2soKSBpcyBleGVjdXRlZCBhbmQgdXNlciBjYW4KKyAgICAgICAgICAgYWRkIGhpcyBvd24gY29kZSBieSBjdXN0b21pemF0aW9uIG9mIGZ1bmN0aW9uIHBvaW50ZXIgSEFMX0kyQ19BYm9ydENwbHRDYWxsYmFjaygpCiAKICAgICAqKiogSW50ZXJydXB0IG1vZGUgb3IgRE1BIG1vZGUgSU8gc2VxdWVudGlhbCBvcGVyYXRpb24gKioqCiAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMTAwLDE0ICsxMDAsMTQgQEAKICAgICAgICAgICB3aGVuIGEgZGlyZWN0aW9uIGNoYW5nZSBkdXJpbmcgdHJhbnNmZXIKICAgICBbLi5dCiAgICAgICAoKykgQSBzcGVjaWZpYyBvcHRpb24gZmllbGQgbWFuYWdlIHRoZSBkaWZmZXJlbnQgc3RlcHMgb2YgYSBzZXF1ZW50aWFsIHRyYW5zZmVyCi0gICAgICAoKykgT3B0aW9uIGZpZWxkIHZhbHVlcyBhcmUgZGVmaW5lZCB0aHJvdWdoIEByZWYgSTJDX1hmZXJPcHRpb25zX2RlZmluaXRpb24gYW5kIGFyZSBsaXN0ZWQgYmVsb3c6CisgICAgICAoKykgT3B0aW9uIGZpZWxkIHZhbHVlcyBhcmUgZGVmaW5lZCB0aHJvdWdoIEkyQ19YZmVyT3B0aW9uc19kZWZpbml0aW9uIGFuZCBhcmUgbGlzdGVkIGJlbG93OgogICAgICAgKCsrKSBJMkNfRklSU1RfQU5EX0xBU1RfRlJBTUU6IE5vIHNlcXVlbnRpYWwgdXNhZ2UsIGZ1bmN0aW9uYWwgaXMgc2FtZSBhcyBhc3NvY2lhdGVkIGludGVyZmFjZXMgaW4gbm8gc2VxdWVudGlhbCBtb2RlCiAgICAgICAoKyspIEkyQ19GSVJTVF9GUkFNRTogU2VxdWVudGlhbCB1c2FnZSwgdGhpcyBvcHRpb24gYWxsb3cgdG8gbWFuYWdlIGEgc2VxdWVuY2Ugd2l0aCBzdGFydCBjb25kaXRpb24sIGFkZHJlc3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgZGF0YSB0byB0cmFuc2ZlciB3aXRob3V0IGEgZmluYWwgc3RvcCBjb25kaXRpb24KICAgICAgICgrKykgSTJDX0ZJUlNUX0FORF9ORVhUX0ZSQU1FOiBTZXF1ZW50aWFsIHVzYWdlIChNYXN0ZXIgb25seSksIHRoaXMgb3B0aW9uIGFsbG93IHRvIG1hbmFnZSBhIHNlcXVlbmNlIHdpdGggc3RhcnQgY29uZGl0aW9uLCBhZGRyZXNzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGRhdGEgdG8gdHJhbnNmZXIgd2l0aG91dCBhIGZpbmFsIHN0b3AgY29uZGl0aW9uLCBhbiB0aGVuIHBlcm1pdCBhIGNhbGwgdGhlIHNhbWUgbWFzdGVyIHNlcXVlbnRpYWwgaW50ZXJmYWNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V2ZXJhbCB0aW1lcyAobGlrZSBAcmVmIEhBTF9JMkNfTWFzdGVyX1NlcV9UcmFuc21pdF9JVCgpIHRoZW4gQHJlZiBIQUxfSTJDX01hc3Rlcl9TZXFfVHJhbnNtaXRfSVQoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIEByZWYgSEFMX0kyQ19NYXN0ZXJfU2VxX1RyYW5zbWl0X0RNQSgpIHRoZW4gQHJlZiBIQUxfSTJDX01hc3Rlcl9TZXFfVHJhbnNtaXRfRE1BKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V2ZXJhbCB0aW1lcyAobGlrZSBIQUxfSTJDX01hc3Rlcl9TZXFfVHJhbnNtaXRfSVQoKSB0aGVuIEhBTF9JMkNfTWFzdGVyX1NlcV9UcmFuc21pdF9JVCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgSEFMX0kyQ19NYXN0ZXJfU2VxX1RyYW5zbWl0X0RNQSgpIHRoZW4gSEFMX0kyQ19NYXN0ZXJfU2VxX1RyYW5zbWl0X0RNQSgpKQogICAgICAgKCsrKSBJMkNfTkVYVF9GUkFNRTogU2VxdWVudGlhbCB1c2FnZSwgdGhpcyBvcHRpb24gYWxsb3cgdG8gbWFuYWdlIGEgc2VxdWVuY2Ugd2l0aCBhIHJlc3RhcnQgY29uZGl0aW9uLCBhZGRyZXNzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHdpdGggbmV3IGRhdGEgdG8gdHJhbnNmZXIgaWYgdGhlIGRpcmVjdGlvbiBjaGFuZ2Ugb3IgbWFuYWdlIG9ubHkgdGhlIG5ldyBkYXRhIHRvIHRyYW5zZmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm8gZGlyZWN0aW9uIGNoYW5nZSBhbmQgd2l0aG91dCBhIGZpbmFsIHN0b3AgY29uZGl0aW9uIGluIGJvdGggY2FzZXMKQEAgLTEzMSw4NSArMTMxLDg1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlbiB1c2FnZSBvZiB0aGlzIG9wdGlvbiBJMkNfT1RIRVJfQU5EX0xBU1RfRlJBTUUgYXQgdGhlIGxhc3QgZnJhbWUgdG8gaGVscCBhdXRvbWF0aWMgZ2VuZXJhdGlvbiBvZiBTVE9QIGNvbmRpdGlvbi4KIAogICAgICAgKCspIERpZmZlcmVudCBzZXF1ZW50aWFsIEkyQyBpbnRlcmZhY2VzIGFyZSBsaXN0ZWQgYmVsb3c6Ci0gICAgICAoKyspIFNlcXVlbnRpYWwgdHJhbnNtaXQgaW4gbWFzdGVyIEkyQyBtb2RlIGFuIGFtb3VudCBvZiBkYXRhIGluIG5vbi1ibG9ja2luZyBtb2RlIHVzaW5nIEByZWYgSEFMX0kyQ19NYXN0ZXJfU2VxX1RyYW5zbWl0X0lUKCkKLSAgICAgICAgICAgIG9yIHVzaW5nIEByZWYgSEFMX0kyQ19NYXN0ZXJfU2VxX1RyYW5zbWl0X0RNQSgpCi0gICAgICAoKysrKSBBdCB0cmFuc21pc3Npb24gZW5kIG9mIGN1cnJlbnQgZnJhbWUgdHJhbnNmZXIsIEByZWYgSEFMX0kyQ19NYXN0ZXJUeENwbHRDYWxsYmFjaygpIGlzIGV4ZWN1dGVkIGFuZCB1c2VyIGNhbgotICAgICAgICAgICBhZGQgaGlzIG93biBjb2RlIGJ5IGN1c3RvbWl6YXRpb24gb2YgZnVuY3Rpb24gcG9pbnRlciBAcmVmIEhBTF9JMkNfTWFzdGVyVHhDcGx0Q2FsbGJhY2soKQotICAgICAgKCsrKSBTZXF1ZW50aWFsIHJlY2VpdmUgaW4gbWFzdGVyIEkyQyBtb2RlIGFuIGFtb3VudCBvZiBkYXRhIGluIG5vbi1ibG9ja2luZyBtb2RlIHVzaW5nIEByZWYgSEFMX0kyQ19NYXN0ZXJfU2VxX1JlY2VpdmVfSVQoKQotICAgICAgICAgICAgb3IgdXNpbmcgQHJlZiBIQUxfSTJDX01hc3Rlcl9TZXFfUmVjZWl2ZV9ETUEoKQotICAgICAgKCsrKykgQXQgcmVjZXB0aW9uIGVuZCBvZiBjdXJyZW50IGZyYW1lIHRyYW5zZmVyLCBAcmVmIEhBTF9JMkNfTWFzdGVyUnhDcGx0Q2FsbGJhY2soKSBpcyBleGVjdXRlZCBhbmQgdXNlciBjYW4KLSAgICAgICAgICAgYWRkIGhpcyBvd24gY29kZSBieSBjdXN0b21pemF0aW9uIG9mIGZ1bmN0aW9uIHBvaW50ZXIgQHJlZiBIQUxfSTJDX01hc3RlclJ4Q3BsdENhbGxiYWNrKCkKLSAgICAgICgrKykgQWJvcnQgYSBtYXN0ZXIgSVQgb3IgRE1BIEkyQyBwcm9jZXNzIGNvbW11bmljYXRpb24gd2l0aCBJbnRlcnJ1cHQgdXNpbmcgQHJlZiBIQUxfSTJDX01hc3Rlcl9BYm9ydF9JVCgpCi0gICAgICAoKysrKSBFbmQgb2YgYWJvcnQgcHJvY2VzcywgQHJlZiBIQUxfSTJDX0Fib3J0Q3BsdENhbGxiYWNrKCkgaXMgZXhlY3V0ZWQgYW5kIHVzZXIgY2FuCi0gICAgICAgICAgIGFkZCBoaXMgb3duIGNvZGUgYnkgY3VzdG9taXphdGlvbiBvZiBmdW5jdGlvbiBwb2ludGVyIEByZWYgSEFMX0kyQ19BYm9ydENwbHRDYWxsYmFjaygpCi0gICAgICAoKyspIEVuYWJsZS9kaXNhYmxlIHRoZSBBZGRyZXNzIGxpc3RlbiBtb2RlIGluIHNsYXZlIEkyQyBtb2RlIHVzaW5nIEByZWYgSEFMX0kyQ19FbmFibGVMaXN0ZW5fSVQoKSBAcmVmIEhBTF9JMkNfRGlzYWJsZUxpc3Rlbl9JVCgpCi0gICAgICAoKysrKSBXaGVuIGFkZHJlc3Mgc2xhdmUgSTJDIG1hdGNoLCBAcmVmIEhBTF9JMkNfQWRkckNhbGxiYWNrKCkgaXMgZXhlY3V0ZWQgYW5kIHVzZXIgY2FuCisgICAgICAoKyspIFNlcXVlbnRpYWwgdHJhbnNtaXQgaW4gbWFzdGVyIEkyQyBtb2RlIGFuIGFtb3VudCBvZiBkYXRhIGluIG5vbi1ibG9ja2luZyBtb2RlIHVzaW5nIEhBTF9JMkNfTWFzdGVyX1NlcV9UcmFuc21pdF9JVCgpCisgICAgICAgICAgICBvciB1c2luZyBIQUxfSTJDX01hc3Rlcl9TZXFfVHJhbnNtaXRfRE1BKCkKKyAgICAgICgrKyspIEF0IHRyYW5zbWlzc2lvbiBlbmQgb2YgY3VycmVudCBmcmFtZSB0cmFuc2ZlciwgSEFMX0kyQ19NYXN0ZXJUeENwbHRDYWxsYmFjaygpIGlzIGV4ZWN1dGVkIGFuZCB1c2VyIGNhbgorICAgICAgICAgICBhZGQgaGlzIG93biBjb2RlIGJ5IGN1c3RvbWl6YXRpb24gb2YgZnVuY3Rpb24gcG9pbnRlciBIQUxfSTJDX01hc3RlclR4Q3BsdENhbGxiYWNrKCkKKyAgICAgICgrKykgU2VxdWVudGlhbCByZWNlaXZlIGluIG1hc3RlciBJMkMgbW9kZSBhbiBhbW91bnQgb2YgZGF0YSBpbiBub24tYmxvY2tpbmcgbW9kZSB1c2luZyBIQUxfSTJDX01hc3Rlcl9TZXFfUmVjZWl2ZV9JVCgpCisgICAgICAgICAgICBvciB1c2luZyBIQUxfSTJDX01hc3Rlcl9TZXFfUmVjZWl2ZV9ETUEoKQorICAgICAgKCsrKykgQXQgcmVjZXB0aW9uIGVuZCBvZiBjdXJyZW50IGZyYW1lIHRyYW5zZmVyLCBIQUxfSTJDX01hc3RlclJ4Q3BsdENhbGxiYWNrKCkgaXMgZXhlY3V0ZWQgYW5kIHVzZXIgY2FuCisgICAgICAgICAgIGFkZCBoaXMgb3duIGNvZGUgYnkgY3VzdG9taXphdGlvbiBvZiBmdW5jdGlvbiBwb2ludGVyIEhBTF9JMkNfTWFzdGVyUnhDcGx0Q2FsbGJhY2soKQorICAgICAgKCsrKSBBYm9ydCBhIG1hc3RlciBJVCBvciBETUEgSTJDIHByb2Nlc3MgY29tbXVuaWNhdGlvbiB3aXRoIEludGVycnVwdCB1c2luZyBIQUxfSTJDX01hc3Rlcl9BYm9ydF9JVCgpCisgICAgICAoKysrKSBFbmQgb2YgYWJvcnQgcHJvY2VzcywgSEFMX0kyQ19BYm9ydENwbHRDYWxsYmFjaygpIGlzIGV4ZWN1dGVkIGFuZCB1c2VyIGNhbgorICAgICAgICAgICBhZGQgaGlzIG93biBjb2RlIGJ5IGN1c3RvbWl6YXRpb24gb2YgZnVuY3Rpb24gcG9pbnRlciBIQUxfSTJDX0Fib3J0Q3BsdENhbGxiYWNrKCkKKyAgICAgICgrKykgRW5hYmxlL2Rpc2FibGUgdGhlIEFkZHJlc3MgbGlzdGVuIG1vZGUgaW4gc2xhdmUgSTJDIG1vZGUgdXNpbmcgSEFMX0kyQ19FbmFibGVMaXN0ZW5fSVQoKSBIQUxfSTJDX0Rpc2FibGVMaXN0ZW5fSVQoKQorICAgICAgKCsrKykgV2hlbiBhZGRyZXNzIHNsYXZlIEkyQyBtYXRjaCwgSEFMX0kyQ19BZGRyQ2FsbGJhY2soKSBpcyBleGVjdXRlZCBhbmQgdXNlciBjYW4KICAgICAgICAgICAgYWRkIGhpcyBvd24gY29kZSB0byBjaGVjayB0aGUgQWRkcmVzcyBNYXRjaCBDb2RlIGFuZCB0aGUgdHJhbnNtaXNzaW9uIGRpcmVjdGlvbiByZXF1ZXN0IGJ5IG1hc3RlciAoV3JpdGUvUmVhZCkuCi0gICAgICAoKysrKSBBdCBMaXN0ZW4gbW9kZSBlbmQgQHJlZiBIQUxfSTJDX0xpc3RlbkNwbHRDYWxsYmFjaygpIGlzIGV4ZWN1dGVkIGFuZCB1c2VyIGNhbgotICAgICAgICAgICBhZGQgaGlzIG93biBjb2RlIGJ5IGN1c3RvbWl6YXRpb24gb2YgZnVuY3Rpb24gcG9pbnRlciBAcmVmIEhBTF9JMkNfTGlzdGVuQ3BsdENhbGxiYWNrKCkKLSAgICAgICgrKykgU2VxdWVudGlhbCB0cmFuc21pdCBpbiBzbGF2ZSBJMkMgbW9kZSBhbiBhbW91bnQgb2YgZGF0YSBpbiBub24tYmxvY2tpbmcgbW9kZSB1c2luZyBAcmVmIEhBTF9JMkNfU2xhdmVfU2VxX1RyYW5zbWl0X0lUKCkKLSAgICAgICAgICAgIG9yIHVzaW5nIEByZWYgSEFMX0kyQ19TbGF2ZV9TZXFfVHJhbnNtaXRfRE1BKCkKLSAgICAgICgrKyspIEF0IHRyYW5zbWlzc2lvbiBlbmQgb2YgY3VycmVudCBmcmFtZSB0cmFuc2ZlciwgQHJlZiBIQUxfSTJDX1NsYXZlVHhDcGx0Q2FsbGJhY2soKSBpcyBleGVjdXRlZCBhbmQgdXNlciBjYW4KLSAgICAgICAgICAgYWRkIGhpcyBvd24gY29kZSBieSBjdXN0b21pemF0aW9uIG9mIGZ1bmN0aW9uIHBvaW50ZXIgQHJlZiBIQUxfSTJDX1NsYXZlVHhDcGx0Q2FsbGJhY2soKQotICAgICAgKCsrKSBTZXF1ZW50aWFsIHJlY2VpdmUgaW4gc2xhdmUgSTJDIG1vZGUgYW4gYW1vdW50IG9mIGRhdGEgaW4gbm9uLWJsb2NraW5nIG1vZGUgdXNpbmcgQHJlZiBIQUxfSTJDX1NsYXZlX1NlcV9SZWNlaXZlX0lUKCkKLSAgICAgICAgICAgIG9yIHVzaW5nIEByZWYgSEFMX0kyQ19TbGF2ZV9TZXFfUmVjZWl2ZV9ETUEoKQotICAgICAgKCsrKykgQXQgcmVjZXB0aW9uIGVuZCBvZiBjdXJyZW50IGZyYW1lIHRyYW5zZmVyLCBAcmVmIEhBTF9JMkNfU2xhdmVSeENwbHRDYWxsYmFjaygpIGlzIGV4ZWN1dGVkIGFuZCB1c2VyIGNhbgotICAgICAgICAgICBhZGQgaGlzIG93biBjb2RlIGJ5IGN1c3RvbWl6YXRpb24gb2YgZnVuY3Rpb24gcG9pbnRlciBAcmVmIEhBTF9JMkNfU2xhdmVSeENwbHRDYWxsYmFjaygpCi0gICAgICAoKyspIEluIGNhc2Ugb2YgdHJhbnNmZXIgRXJyb3IsIEByZWYgSEFMX0kyQ19FcnJvckNhbGxiYWNrKCkgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgYW5kIHVzZXIgY2FuCi0gICAgICAgICAgIGFkZCBoaXMgb3duIGNvZGUgYnkgY3VzdG9taXphdGlvbiBvZiBmdW5jdGlvbiBwb2ludGVyIEByZWYgSEFMX0kyQ19FcnJvckNhbGxiYWNrKCkKKyAgICAgICgrKyspIEF0IExpc3RlbiBtb2RlIGVuZCBIQUxfSTJDX0xpc3RlbkNwbHRDYWxsYmFjaygpIGlzIGV4ZWN1dGVkIGFuZCB1c2VyIGNhbgorICAgICAgICAgICBhZGQgaGlzIG93biBjb2RlIGJ5IGN1c3RvbWl6YXRpb24gb2YgZnVuY3Rpb24gcG9pbnRlciBIQUxfSTJDX0xpc3RlbkNwbHRDYWxsYmFjaygpCisgICAgICAoKyspIFNlcXVlbnRpYWwgdHJhbnNtaXQgaW4gc2xhdmUgSTJDIG1vZGUgYW4gYW1vdW50IG9mIGRhdGEgaW4gbm9uLWJsb2NraW5nIG1vZGUgdXNpbmcgSEFMX0kyQ19TbGF2ZV9TZXFfVHJhbnNtaXRfSVQoKQorICAgICAgICAgICAgb3IgdXNpbmcgSEFMX0kyQ19TbGF2ZV9TZXFfVHJhbnNtaXRfRE1BKCkKKyAgICAgICgrKyspIEF0IHRyYW5zbWlzc2lvbiBlbmQgb2YgY3VycmVudCBmcmFtZSB0cmFuc2ZlciwgSEFMX0kyQ19TbGF2ZVR4Q3BsdENhbGxiYWNrKCkgaXMgZXhlY3V0ZWQgYW5kIHVzZXIgY2FuCisgICAgICAgICAgIGFkZCBoaXMgb3duIGNvZGUgYnkgY3VzdG9taXphdGlvbiBvZiBmdW5jdGlvbiBwb2ludGVyIEhBTF9JMkNfU2xhdmVUeENwbHRDYWxsYmFjaygpCisgICAgICAoKyspIFNlcXVlbnRpYWwgcmVjZWl2ZSBpbiBzbGF2ZSBJMkMgbW9kZSBhbiBhbW91bnQgb2YgZGF0YSBpbiBub24tYmxvY2tpbmcgbW9kZSB1c2luZyBIQUxfSTJDX1NsYXZlX1NlcV9SZWNlaXZlX0lUKCkKKyAgICAgICAgICAgIG9yIHVzaW5nIEhBTF9JMkNfU2xhdmVfU2VxX1JlY2VpdmVfRE1BKCkKKyAgICAgICgrKyspIEF0IHJlY2VwdGlvbiBlbmQgb2YgY3VycmVudCBmcmFtZSB0cmFuc2ZlciwgSEFMX0kyQ19TbGF2ZVJ4Q3BsdENhbGxiYWNrKCkgaXMgZXhlY3V0ZWQgYW5kIHVzZXIgY2FuCisgICAgICAgICAgIGFkZCBoaXMgb3duIGNvZGUgYnkgY3VzdG9taXphdGlvbiBvZiBmdW5jdGlvbiBwb2ludGVyIEhBTF9JMkNfU2xhdmVSeENwbHRDYWxsYmFjaygpCisgICAgICAoKyspIEluIGNhc2Ugb2YgdHJhbnNmZXIgRXJyb3IsIEhBTF9JMkNfRXJyb3JDYWxsYmFjaygpIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGFuZCB1c2VyIGNhbgorICAgICAgICAgICBhZGQgaGlzIG93biBjb2RlIGJ5IGN1c3RvbWl6YXRpb24gb2YgZnVuY3Rpb24gcG9pbnRlciBIQUxfSTJDX0Vycm9yQ2FsbGJhY2soKQogCiAgICAgKioqIEludGVycnVwdCBtb2RlIElPIE1FTSBvcGVyYXRpb24gKioqCiAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgWy4uXQogICAgICAgKCspIFdyaXRlIGFuIGFtb3VudCBvZiBkYXRhIGluIG5vbi1ibG9ja2luZyBtb2RlIHdpdGggSW50ZXJydXB0IHRvIGEgc3BlY2lmaWMgbWVtb3J5IGFkZHJlc3MgdXNpbmcKLSAgICAgICAgICBAcmVmIEhBTF9JMkNfTWVtX1dyaXRlX0lUKCkKLSAgICAgICgrKSBBdCBNZW1vcnkgZW5kIG9mIHdyaXRlIHRyYW5zZmVyLCBAcmVmIEhBTF9JMkNfTWVtVHhDcGx0Q2FsbGJhY2soKSBpcyBleGVjdXRlZCBhbmQgdXNlciBjYW4KLSAgICAgICAgICAgYWRkIGhpcyBvd24gY29kZSBieSBjdXN0b21pemF0aW9uIG9mIGZ1bmN0aW9uIHBvaW50ZXIgQHJlZiBIQUxfSTJDX01lbVR4Q3BsdENhbGxiYWNrKCkKKyAgICAgICAgICBIQUxfSTJDX01lbV9Xcml0ZV9JVCgpCisgICAgICAoKykgQXQgTWVtb3J5IGVuZCBvZiB3cml0ZSB0cmFuc2ZlciwgSEFMX0kyQ19NZW1UeENwbHRDYWxsYmFjaygpIGlzIGV4ZWN1dGVkIGFuZCB1c2VyIGNhbgorICAgICAgICAgICBhZGQgaGlzIG93biBjb2RlIGJ5IGN1c3RvbWl6YXRpb24gb2YgZnVuY3Rpb24gcG9pbnRlciBIQUxfSTJDX01lbVR4Q3BsdENhbGxiYWNrKCkKICAgICAgICgrKSBSZWFkIGFuIGFtb3VudCBvZiBkYXRhIGluIG5vbi1ibG9ja2luZyBtb2RlIHdpdGggSW50ZXJydXB0IGZyb20gYSBzcGVjaWZpYyBtZW1vcnkgYWRkcmVzcyB1c2luZwotICAgICAgICAgIEByZWYgSEFMX0kyQ19NZW1fUmVhZF9JVCgpCi0gICAgICAoKykgQXQgTWVtb3J5IGVuZCBvZiByZWFkIHRyYW5zZmVyLCBAcmVmIEhBTF9JMkNfTWVtUnhDcGx0Q2FsbGJhY2soKSBpcyBleGVjdXRlZCBhbmQgdXNlciBjYW4KLSAgICAgICAgICAgYWRkIGhpcyBvd24gY29kZSBieSBjdXN0b21pemF0aW9uIG9mIGZ1bmN0aW9uIHBvaW50ZXIgQHJlZiBIQUxfSTJDX01lbVJ4Q3BsdENhbGxiYWNrKCkKLSAgICAgICgrKSBJbiBjYXNlIG9mIHRyYW5zZmVyIEVycm9yLCBAcmVmIEhBTF9JMkNfRXJyb3JDYWxsYmFjaygpIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGFuZCB1c2VyIGNhbgotICAgICAgICAgICBhZGQgaGlzIG93biBjb2RlIGJ5IGN1c3RvbWl6YXRpb24gb2YgZnVuY3Rpb24gcG9pbnRlciBAcmVmIEhBTF9JMkNfRXJyb3JDYWxsYmFjaygpCisgICAgICAgICAgSEFMX0kyQ19NZW1fUmVhZF9JVCgpCisgICAgICAoKykgQXQgTWVtb3J5IGVuZCBvZiByZWFkIHRyYW5zZmVyLCBIQUxfSTJDX01lbVJ4Q3BsdENhbGxiYWNrKCkgaXMgZXhlY3V0ZWQgYW5kIHVzZXIgY2FuCisgICAgICAgICAgIGFkZCBoaXMgb3duIGNvZGUgYnkgY3VzdG9taXphdGlvbiBvZiBmdW5jdGlvbiBwb2ludGVyIEhBTF9JMkNfTWVtUnhDcGx0Q2FsbGJhY2soKQorICAgICAgKCspIEluIGNhc2Ugb2YgdHJhbnNmZXIgRXJyb3IsIEhBTF9JMkNfRXJyb3JDYWxsYmFjaygpIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGFuZCB1c2VyIGNhbgorICAgICAgICAgICBhZGQgaGlzIG93biBjb2RlIGJ5IGN1c3RvbWl6YXRpb24gb2YgZnVuY3Rpb24gcG9pbnRlciBIQUxfSTJDX0Vycm9yQ2FsbGJhY2soKQogCiAgICAgKioqIERNQSBtb2RlIElPIG9wZXJhdGlvbiAqKioKICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICBbLi5dCiAgICAgICAoKykgVHJhbnNtaXQgaW4gbWFzdGVyIG1vZGUgYW4gYW1vdW50IG9mIGRhdGEgaW4gbm9uLWJsb2NraW5nIG1vZGUgKERNQSkgdXNpbmcKLSAgICAgICAgICBAcmVmIEhBTF9JMkNfTWFzdGVyX1RyYW5zbWl0X0RNQSgpCi0gICAgICAoKykgQXQgdHJhbnNtaXNzaW9uIGVuZCBvZiB0cmFuc2ZlciwgQHJlZiBIQUxfSTJDX01hc3RlclR4Q3BsdENhbGxiYWNrKCkgaXMgZXhlY3V0ZWQgYW5kIHVzZXIgY2FuCi0gICAgICAgICAgIGFkZCBoaXMgb3duIGNvZGUgYnkgY3VzdG9taXphdGlvbiBvZiBmdW5jdGlvbiBwb2ludGVyIEByZWYgSEFMX0kyQ19NYXN0ZXJUeENwbHRDYWxsYmFjaygpCisgICAgICAgICAgSEFMX0kyQ19NYXN0ZXJfVHJhbnNtaXRfRE1BKCkKKyAgICAgICgrKSBBdCB0cmFuc21pc3Npb24gZW5kIG9mIHRyYW5zZmVyLCBIQUxfSTJDX01hc3RlclR4Q3BsdENhbGxiYWNrKCkgaXMgZXhlY3V0ZWQgYW5kIHVzZXIgY2FuCisgICAgICAgICAgIGFkZCBoaXMgb3duIGNvZGUgYnkgY3VzdG9taXphdGlvbiBvZiBmdW5jdGlvbiBwb2ludGVyIEhBTF9JMkNfTWFzdGVyVHhDcGx0Q2FsbGJhY2soKQogICAgICAgKCspIFJlY2VpdmUgaW4gbWFzdGVyIG1vZGUgYW4gYW1vdW50IG9mIGRhdGEgaW4gbm9uLWJsb2NraW5nIG1vZGUgKERNQSkgdXNpbmcKLSAgICAgICAgICBAcmVmIEhBTF9JMkNfTWFzdGVyX1JlY2VpdmVfRE1BKCkKLSAgICAgICgrKSBBdCByZWNlcHRpb24gZW5kIG9mIHRyYW5zZmVyLCBAcmVmIEhBTF9JMkNfTWFzdGVyUnhDcGx0Q2FsbGJhY2soKSBpcyBleGVjdXRlZCBhbmQgdXNlciBjYW4KLSAgICAgICAgICAgYWRkIGhpcyBvd24gY29kZSBieSBjdXN0b21pemF0aW9uIG9mIGZ1bmN0aW9uIHBvaW50ZXIgQHJlZiBIQUxfSTJDX01hc3RlclJ4Q3BsdENhbGxiYWNrKCkKKyAgICAgICAgICBIQUxfSTJDX01hc3Rlcl9SZWNlaXZlX0RNQSgpCisgICAgICAoKykgQXQgcmVjZXB0aW9uIGVuZCBvZiB0cmFuc2ZlciwgSEFMX0kyQ19NYXN0ZXJSeENwbHRDYWxsYmFjaygpIGlzIGV4ZWN1dGVkIGFuZCB1c2VyIGNhbgorICAgICAgICAgICBhZGQgaGlzIG93biBjb2RlIGJ5IGN1c3RvbWl6YXRpb24gb2YgZnVuY3Rpb24gcG9pbnRlciBIQUxfSTJDX01hc3RlclJ4Q3BsdENhbGxiYWNrKCkKICAgICAgICgrKSBUcmFuc21pdCBpbiBzbGF2ZSBtb2RlIGFuIGFtb3VudCBvZiBkYXRhIGluIG5vbi1ibG9ja2luZyBtb2RlIChETUEpIHVzaW5nCi0gICAgICAgICAgQHJlZiBIQUxfSTJDX1NsYXZlX1RyYW5zbWl0X0RNQSgpCi0gICAgICAoKykgQXQgdHJhbnNtaXNzaW9uIGVuZCBvZiB0cmFuc2ZlciwgQHJlZiBIQUxfSTJDX1NsYXZlVHhDcGx0Q2FsbGJhY2soKSBpcyBleGVjdXRlZCBhbmQgdXNlciBjYW4KLSAgICAgICAgICAgYWRkIGhpcyBvd24gY29kZSBieSBjdXN0b21pemF0aW9uIG9mIGZ1bmN0aW9uIHBvaW50ZXIgQHJlZiBIQUxfSTJDX1NsYXZlVHhDcGx0Q2FsbGJhY2soKQorICAgICAgICAgIEhBTF9JMkNfU2xhdmVfVHJhbnNtaXRfRE1BKCkKKyAgICAgICgrKSBBdCB0cmFuc21pc3Npb24gZW5kIG9mIHRyYW5zZmVyLCBIQUxfSTJDX1NsYXZlVHhDcGx0Q2FsbGJhY2soKSBpcyBleGVjdXRlZCBhbmQgdXNlciBjYW4KKyAgICAgICAgICAgYWRkIGhpcyBvd24gY29kZSBieSBjdXN0b21pemF0aW9uIG9mIGZ1bmN0aW9uIHBvaW50ZXIgSEFMX0kyQ19TbGF2ZVR4Q3BsdENhbGxiYWNrKCkKICAgICAgICgrKSBSZWNlaXZlIGluIHNsYXZlIG1vZGUgYW4gYW1vdW50IG9mIGRhdGEgaW4gbm9uLWJsb2NraW5nIG1vZGUgKERNQSkgdXNpbmcKLSAgICAgICAgICBAcmVmIEhBTF9JMkNfU2xhdmVfUmVjZWl2ZV9ETUEoKQotICAgICAgKCspIEF0IHJlY2VwdGlvbiBlbmQgb2YgdHJhbnNmZXIsIEByZWYgSEFMX0kyQ19TbGF2ZVJ4Q3BsdENhbGxiYWNrKCkgaXMgZXhlY3V0ZWQgYW5kIHVzZXIgY2FuCi0gICAgICAgICAgIGFkZCBoaXMgb3duIGNvZGUgYnkgY3VzdG9taXphdGlvbiBvZiBmdW5jdGlvbiBwb2ludGVyIEByZWYgSEFMX0kyQ19TbGF2ZVJ4Q3BsdENhbGxiYWNrKCkKLSAgICAgICgrKSBJbiBjYXNlIG9mIHRyYW5zZmVyIEVycm9yLCBAcmVmIEhBTF9JMkNfRXJyb3JDYWxsYmFjaygpIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGFuZCB1c2VyIGNhbgotICAgICAgICAgICBhZGQgaGlzIG93biBjb2RlIGJ5IGN1c3RvbWl6YXRpb24gb2YgZnVuY3Rpb24gcG9pbnRlciBAcmVmIEhBTF9JMkNfRXJyb3JDYWxsYmFjaygpCi0gICAgICAoKykgQWJvcnQgYSBtYXN0ZXIgSTJDIHByb2Nlc3MgY29tbXVuaWNhdGlvbiB3aXRoIEludGVycnVwdCB1c2luZyBAcmVmIEhBTF9JMkNfTWFzdGVyX0Fib3J0X0lUKCkKLSAgICAgICgrKSBFbmQgb2YgYWJvcnQgcHJvY2VzcywgQHJlZiBIQUxfSTJDX0Fib3J0Q3BsdENhbGxiYWNrKCkgaXMgZXhlY3V0ZWQgYW5kIHVzZXIgY2FuCi0gICAgICAgICAgIGFkZCBoaXMgb3duIGNvZGUgYnkgY3VzdG9taXphdGlvbiBvZiBmdW5jdGlvbiBwb2ludGVyIEByZWYgSEFMX0kyQ19BYm9ydENwbHRDYWxsYmFjaygpCisgICAgICAgICAgSEFMX0kyQ19TbGF2ZV9SZWNlaXZlX0RNQSgpCisgICAgICAoKykgQXQgcmVjZXB0aW9uIGVuZCBvZiB0cmFuc2ZlciwgSEFMX0kyQ19TbGF2ZVJ4Q3BsdENhbGxiYWNrKCkgaXMgZXhlY3V0ZWQgYW5kIHVzZXIgY2FuCisgICAgICAgICAgIGFkZCBoaXMgb3duIGNvZGUgYnkgY3VzdG9taXphdGlvbiBvZiBmdW5jdGlvbiBwb2ludGVyIEhBTF9JMkNfU2xhdmVSeENwbHRDYWxsYmFjaygpCisgICAgICAoKykgSW4gY2FzZSBvZiB0cmFuc2ZlciBFcnJvciwgSEFMX0kyQ19FcnJvckNhbGxiYWNrKCkgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgYW5kIHVzZXIgY2FuCisgICAgICAgICAgIGFkZCBoaXMgb3duIGNvZGUgYnkgY3VzdG9taXphdGlvbiBvZiBmdW5jdGlvbiBwb2ludGVyIEhBTF9JMkNfRXJyb3JDYWxsYmFjaygpCisgICAgICAoKykgQWJvcnQgYSBtYXN0ZXIgSTJDIHByb2Nlc3MgY29tbXVuaWNhdGlvbiB3aXRoIEludGVycnVwdCB1c2luZyBIQUxfSTJDX01hc3Rlcl9BYm9ydF9JVCgpCisgICAgICAoKykgRW5kIG9mIGFib3J0IHByb2Nlc3MsIEhBTF9JMkNfQWJvcnRDcGx0Q2FsbGJhY2soKSBpcyBleGVjdXRlZCBhbmQgdXNlciBjYW4KKyAgICAgICAgICAgYWRkIGhpcyBvd24gY29kZSBieSBjdXN0b21pemF0aW9uIG9mIGZ1bmN0aW9uIHBvaW50ZXIgSEFMX0kyQ19BYm9ydENwbHRDYWxsYmFjaygpCiAKICAgICAqKiogRE1BIG1vZGUgSU8gTUVNIG9wZXJhdGlvbiAqKioKICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICBbLi5dCiAgICAgICAoKykgV3JpdGUgYW4gYW1vdW50IG9mIGRhdGEgaW4gbm9uLWJsb2NraW5nIG1vZGUgd2l0aCBETUEgdG8gYSBzcGVjaWZpYyBtZW1vcnkgYWRkcmVzcyB1c2luZwotICAgICAgICAgIEByZWYgSEFMX0kyQ19NZW1fV3JpdGVfRE1BKCkKLSAgICAgICgrKSBBdCBNZW1vcnkgZW5kIG9mIHdyaXRlIHRyYW5zZmVyLCBAcmVmIEhBTF9JMkNfTWVtVHhDcGx0Q2FsbGJhY2soKSBpcyBleGVjdXRlZCBhbmQgdXNlciBjYW4KLSAgICAgICAgICAgYWRkIGhpcyBvd24gY29kZSBieSBjdXN0b21pemF0aW9uIG9mIGZ1bmN0aW9uIHBvaW50ZXIgQHJlZiBIQUxfSTJDX01lbVR4Q3BsdENhbGxiYWNrKCkKKyAgICAgICAgICBIQUxfSTJDX01lbV9Xcml0ZV9ETUEoKQorICAgICAgKCspIEF0IE1lbW9yeSBlbmQgb2Ygd3JpdGUgdHJhbnNmZXIsIEhBTF9JMkNfTWVtVHhDcGx0Q2FsbGJhY2soKSBpcyBleGVjdXRlZCBhbmQgdXNlciBjYW4KKyAgICAgICAgICAgYWRkIGhpcyBvd24gY29kZSBieSBjdXN0b21pemF0aW9uIG9mIGZ1bmN0aW9uIHBvaW50ZXIgSEFMX0kyQ19NZW1UeENwbHRDYWxsYmFjaygpCiAgICAgICAoKykgUmVhZCBhbiBhbW91bnQgb2YgZGF0YSBpbiBub24tYmxvY2tpbmcgbW9kZSB3aXRoIERNQSBmcm9tIGEgc3BlY2lmaWMgbWVtb3J5IGFkZHJlc3MgdXNpbmcKLSAgICAgICAgICBAcmVmIEhBTF9JMkNfTWVtX1JlYWRfRE1BKCkKLSAgICAgICgrKSBBdCBNZW1vcnkgZW5kIG9mIHJlYWQgdHJhbnNmZXIsIEByZWYgSEFMX0kyQ19NZW1SeENwbHRDYWxsYmFjaygpIGlzIGV4ZWN1dGVkIGFuZCB1c2VyIGNhbgotICAgICAgICAgICBhZGQgaGlzIG93biBjb2RlIGJ5IGN1c3RvbWl6YXRpb24gb2YgZnVuY3Rpb24gcG9pbnRlciBAcmVmIEhBTF9JMkNfTWVtUnhDcGx0Q2FsbGJhY2soKQotICAgICAgKCspIEluIGNhc2Ugb2YgdHJhbnNmZXIgRXJyb3IsIEByZWYgSEFMX0kyQ19FcnJvckNhbGxiYWNrKCkgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgYW5kIHVzZXIgY2FuCi0gICAgICAgICAgIGFkZCBoaXMgb3duIGNvZGUgYnkgY3VzdG9taXphdGlvbiBvZiBmdW5jdGlvbiBwb2ludGVyIEByZWYgSEFMX0kyQ19FcnJvckNhbGxiYWNrKCkKKyAgICAgICAgICBIQUxfSTJDX01lbV9SZWFkX0RNQSgpCisgICAgICAoKykgQXQgTWVtb3J5IGVuZCBvZiByZWFkIHRyYW5zZmVyLCBIQUxfSTJDX01lbVJ4Q3BsdENhbGxiYWNrKCkgaXMgZXhlY3V0ZWQgYW5kIHVzZXIgY2FuCisgICAgICAgICAgIGFkZCBoaXMgb3duIGNvZGUgYnkgY3VzdG9taXphdGlvbiBvZiBmdW5jdGlvbiBwb2ludGVyIEhBTF9JMkNfTWVtUnhDcGx0Q2FsbGJhY2soKQorICAgICAgKCspIEluIGNhc2Ugb2YgdHJhbnNmZXIgRXJyb3IsIEhBTF9JMkNfRXJyb3JDYWxsYmFjaygpIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGFuZCB1c2VyIGNhbgorICAgICAgICAgICBhZGQgaGlzIG93biBjb2RlIGJ5IGN1c3RvbWl6YXRpb24gb2YgZnVuY3Rpb24gcG9pbnRlciBIQUxfSTJDX0Vycm9yQ2FsbGJhY2soKQogCiAKICAgICAgKioqIEkyQyBIQUwgZHJpdmVyIG1hY3JvcyBsaXN0ICoqKgpAQCAtMjE3LDIyICsyMTcsMjIgQEAKICAgICAgWy4uXQogICAgICAgIEJlbG93IHRoZSBsaXN0IG9mIG1vc3QgdXNlZCBtYWNyb3MgaW4gSTJDIEhBTCBkcml2ZXIuCiAKLSAgICAgICgrKSBAcmVmIF9fSEFMX0kyQ19FTkFCTEU6ICAgICBFbmFibGUgdGhlIEkyQyBwZXJpcGhlcmFsCi0gICAgICAoKykgQHJlZiBfX0hBTF9JMkNfRElTQUJMRTogICAgRGlzYWJsZSB0aGUgSTJDIHBlcmlwaGVyYWwKLSAgICAgICgrKSBAcmVmIF9fSEFMX0kyQ19HRVRfRkxBRzogICBDaGVja3Mgd2hldGhlciB0aGUgc3BlY2lmaWVkIEkyQyBmbGFnIGlzIHNldCBvciBub3QKLSAgICAgICgrKSBAcmVmIF9fSEFMX0kyQ19DTEVBUl9GTEFHOiBDbGVhciB0aGUgc3BlY2lmaWVkIEkyQyBwZW5kaW5nIGZsYWcKLSAgICAgICgrKSBAcmVmIF9fSEFMX0kyQ19FTkFCTEVfSVQ6ICBFbmFibGUgdGhlIHNwZWNpZmllZCBJMkMgaW50ZXJydXB0Ci0gICAgICAoKykgQHJlZiBfX0hBTF9JMkNfRElTQUJMRV9JVDogRGlzYWJsZSB0aGUgc3BlY2lmaWVkIEkyQyBpbnRlcnJ1cHQKKyAgICAgICgrKSBfX0hBTF9JMkNfRU5BQkxFOiAgICAgRW5hYmxlIHRoZSBJMkMgcGVyaXBoZXJhbAorICAgICAgKCspIF9fSEFMX0kyQ19ESVNBQkxFOiAgICBEaXNhYmxlIHRoZSBJMkMgcGVyaXBoZXJhbAorICAgICAgKCspIF9fSEFMX0kyQ19HRVRfRkxBRzogICBDaGVja3Mgd2hldGhlciB0aGUgc3BlY2lmaWVkIEkyQyBmbGFnIGlzIHNldCBvciBub3QKKyAgICAgICgrKSBfX0hBTF9JMkNfQ0xFQVJfRkxBRzogQ2xlYXIgdGhlIHNwZWNpZmllZCBJMkMgcGVuZGluZyBmbGFnCisgICAgICAoKykgX19IQUxfSTJDX0VOQUJMRV9JVDogIEVuYWJsZSB0aGUgc3BlY2lmaWVkIEkyQyBpbnRlcnJ1cHQKKyAgICAgICgrKSBfX0hBTF9JMkNfRElTQUJMRV9JVDogRGlzYWJsZSB0aGUgc3BlY2lmaWVkIEkyQyBpbnRlcnJ1cHQKIAogICAgICAqKiogQ2FsbGJhY2sgcmVnaXN0cmF0aW9uICoqKgogICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICBbLi5dCiAgICAgIFRoZSBjb21waWxhdGlvbiBmbGFnIFVTRV9IQUxfSTJDX1JFR0lTVEVSX0NBTExCQUNLUyB3aGVuIHNldCB0byAxCiAgICAgIGFsbG93cyB0aGUgdXNlciB0byBjb25maWd1cmUgZHluYW1pY2FsbHkgdGhlIGRyaXZlciBjYWxsYmFja3MuCi0gICAgIFVzZSBGdW5jdGlvbnMgQHJlZiBIQUxfSTJDX1JlZ2lzdGVyQ2FsbGJhY2soKSBvciBAcmVmIEhBTF9JMkNfUmVnaXN0ZXJBZGRyQ2FsbGJhY2soKQorICAgICBVc2UgRnVuY3Rpb25zIEhBTF9JMkNfUmVnaXN0ZXJDYWxsYmFjaygpIG9yIEhBTF9JMkNfUmVnaXN0ZXJBZGRyQ2FsbGJhY2soKQogICAgICB0byByZWdpc3RlciBhbiBpbnRlcnJ1cHQgY2FsbGJhY2suCiAgICAgWy4uXQotICAgICBGdW5jdGlvbiBAcmVmIEhBTF9JMkNfUmVnaXN0ZXJDYWxsYmFjaygpIGFsbG93cyB0byByZWdpc3RlciBmb2xsb3dpbmcgY2FsbGJhY2tzOgorICAgICBGdW5jdGlvbiBIQUxfSTJDX1JlZ2lzdGVyQ2FsbGJhY2soKSBhbGxvd3MgdG8gcmVnaXN0ZXIgZm9sbG93aW5nIGNhbGxiYWNrczoKICAgICAgICAoKykgTWFzdGVyVHhDcGx0Q2FsbGJhY2sgOiBjYWxsYmFjayBmb3IgTWFzdGVyIHRyYW5zbWlzc2lvbiBlbmQgb2YgdHJhbnNmZXIuCiAgICAgICAgKCspIE1hc3RlclJ4Q3BsdENhbGxiYWNrIDogY2FsbGJhY2sgZm9yIE1hc3RlciByZWNlcHRpb24gZW5kIG9mIHRyYW5zZmVyLgogICAgICAgICgrKSBTbGF2ZVR4Q3BsdENhbGxiYWNrICA6IGNhbGxiYWNrIGZvciBTbGF2ZSB0cmFuc21pc3Npb24gZW5kIG9mIHRyYW5zZmVyLgpAQCAtMjQ3LDExICsyNDcsMTEgQEAKICAgICAgVGhpcyBmdW5jdGlvbiB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsIHRoZSBDYWxsYmFjayBJRAogICAgICBhbmQgYSBwb2ludGVyIHRvIHRoZSB1c2VyIGNhbGxiYWNrIGZ1bmN0aW9uLgogICAgIFsuLl0KLSAgICAgRm9yIHNwZWNpZmljIGNhbGxiYWNrIEFkZHJDYWxsYmFjayB1c2UgZGVkaWNhdGVkIHJlZ2lzdGVyIGNhbGxiYWNrcyA6IEByZWYgSEFMX0kyQ19SZWdpc3RlckFkZHJDYWxsYmFjaygpLgorICAgICBGb3Igc3BlY2lmaWMgY2FsbGJhY2sgQWRkckNhbGxiYWNrIHVzZSBkZWRpY2F0ZWQgcmVnaXN0ZXIgY2FsbGJhY2tzIDogSEFMX0kyQ19SZWdpc3RlckFkZHJDYWxsYmFjaygpLgogICAgIFsuLl0KLSAgICAgVXNlIGZ1bmN0aW9uIEByZWYgSEFMX0kyQ19VblJlZ2lzdGVyQ2FsbGJhY2sgdG8gcmVzZXQgYSBjYWxsYmFjayB0byB0aGUgZGVmYXVsdAorICAgICBVc2UgZnVuY3Rpb24gSEFMX0kyQ19VblJlZ2lzdGVyQ2FsbGJhY2sgdG8gcmVzZXQgYSBjYWxsYmFjayB0byB0aGUgZGVmYXVsdAogICAgICB3ZWFrIGZ1bmN0aW9uLgotICAgICBAcmVmIEhBTF9JMkNfVW5SZWdpc3RlckNhbGxiYWNrIHRha2VzIGFzIHBhcmFtZXRlcnMgdGhlIEhBTCBwZXJpcGhlcmFsIGhhbmRsZSwKKyAgICAgSEFMX0kyQ19VblJlZ2lzdGVyQ2FsbGJhY2sgdGFrZXMgYXMgcGFyYW1ldGVycyB0aGUgSEFMIHBlcmlwaGVyYWwgaGFuZGxlLAogICAgICBhbmQgdGhlIENhbGxiYWNrIElELgogICAgICBUaGlzIGZ1bmN0aW9uIGFsbG93cyB0byByZXNldCBmb2xsb3dpbmcgY2FsbGJhY2tzOgogICAgICAgICgrKSBNYXN0ZXJUeENwbHRDYWxsYmFjayA6IGNhbGxiYWNrIGZvciBNYXN0ZXIgdHJhbnNtaXNzaW9uIGVuZCBvZiB0cmFuc2Zlci4KQEAgLTI2NiwyNCArMjY2LDI0IEBACiAgICAgICAgKCspIE1zcEluaXRDYWxsYmFjayAgICAgIDogY2FsbGJhY2sgZm9yIE1zcCBJbml0LgogICAgICAgICgrKSBNc3BEZUluaXRDYWxsYmFjayAgICA6IGNhbGxiYWNrIGZvciBNc3AgRGVJbml0LgogICAgIFsuLl0KLSAgICAgRm9yIGNhbGxiYWNrIEFkZHJDYWxsYmFjayB1c2UgZGVkaWNhdGVkIHJlZ2lzdGVyIGNhbGxiYWNrcyA6IEByZWYgSEFMX0kyQ19VblJlZ2lzdGVyQWRkckNhbGxiYWNrKCkuCisgICAgIEZvciBjYWxsYmFjayBBZGRyQ2FsbGJhY2sgdXNlIGRlZGljYXRlZCByZWdpc3RlciBjYWxsYmFja3MgOiBIQUxfSTJDX1VuUmVnaXN0ZXJBZGRyQ2FsbGJhY2soKS4KICAgICBbLi5dCi0gICAgIEJ5IGRlZmF1bHQsIGFmdGVyIHRoZSBAcmVmIEhBTF9JMkNfSW5pdCgpIGFuZCB3aGVuIHRoZSBzdGF0ZSBpcyBAcmVmIEhBTF9JMkNfU1RBVEVfUkVTRVQKKyAgICAgQnkgZGVmYXVsdCwgYWZ0ZXIgdGhlIEhBTF9JMkNfSW5pdCgpIGFuZCB3aGVuIHRoZSBzdGF0ZSBpcyBIQUxfSTJDX1NUQVRFX1JFU0VUCiAgICAgIGFsbCBjYWxsYmFja3MgYXJlIHNldCB0byB0aGUgY29ycmVzcG9uZGluZyB3ZWFrIGZ1bmN0aW9uczoKLSAgICAgZXhhbXBsZXMgQHJlZiBIQUxfSTJDX01hc3RlclR4Q3BsdENhbGxiYWNrKCksIEByZWYgSEFMX0kyQ19NYXN0ZXJSeENwbHRDYWxsYmFjaygpLgorICAgICBleGFtcGxlcyBIQUxfSTJDX01hc3RlclR4Q3BsdENhbGxiYWNrKCksIEhBTF9JMkNfTWFzdGVyUnhDcGx0Q2FsbGJhY2soKS4KICAgICAgRXhjZXB0aW9uIGRvbmUgZm9yIE1zcEluaXQgYW5kIE1zcERlSW5pdCBmdW5jdGlvbnMgdGhhdCBhcmUKLSAgICAgcmVzZXQgdG8gdGhlIGxlZ2FjeSB3ZWFrIGZ1bmN0aW9ucyBpbiB0aGUgQHJlZiBIQUxfSTJDX0luaXQoKS8gQHJlZiBIQUxfSTJDX0RlSW5pdCgpIG9ubHkgd2hlbgorICAgICByZXNldCB0byB0aGUgbGVnYWN5IHdlYWsgZnVuY3Rpb25zIGluIHRoZSBIQUxfSTJDX0luaXQoKS8gSEFMX0kyQ19EZUluaXQoKSBvbmx5IHdoZW4KICAgICAgdGhlc2UgY2FsbGJhY2tzIGFyZSBudWxsIChub3QgcmVnaXN0ZXJlZCBiZWZvcmVoYW5kKS4KLSAgICAgSWYgTXNwSW5pdCBvciBNc3BEZUluaXQgYXJlIG5vdCBudWxsLCB0aGUgQHJlZiBIQUxfSTJDX0luaXQoKS8gQHJlZiBIQUxfSTJDX0RlSW5pdCgpCisgICAgIElmIE1zcEluaXQgb3IgTXNwRGVJbml0IGFyZSBub3QgbnVsbCwgdGhlIEhBTF9JMkNfSW5pdCgpLyBIQUxfSTJDX0RlSW5pdCgpCiAgICAgIGtlZXAgYW5kIHVzZSB0aGUgdXNlciBNc3BJbml0L01zcERlSW5pdCBjYWxsYmFja3MgKHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCkgd2hhdGV2ZXIgdGhlIHN0YXRlLgogICAgIFsuLl0KLSAgICAgQ2FsbGJhY2tzIGNhbiBiZSByZWdpc3RlcmVkL3VucmVnaXN0ZXJlZCBpbiBAcmVmIEhBTF9JMkNfU1RBVEVfUkVBRFkgc3RhdGUgb25seS4KKyAgICAgQ2FsbGJhY2tzIGNhbiBiZSByZWdpc3RlcmVkL3VucmVnaXN0ZXJlZCBpbiBIQUxfSTJDX1NUQVRFX1JFQURZIHN0YXRlIG9ubHkuCiAgICAgIEV4Y2VwdGlvbiBkb25lIE1zcEluaXQvTXNwRGVJbml0IGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSByZWdpc3RlcmVkL3VucmVnaXN0ZXJlZAotICAgICBpbiBAcmVmIEhBTF9JMkNfU1RBVEVfUkVBRFkgb3IgQHJlZiBIQUxfSTJDX1NUQVRFX1JFU0VUIHN0YXRlLAorICAgICBpbiBIQUxfSTJDX1NUQVRFX1JFQURZIG9yIEhBTF9JMkNfU1RBVEVfUkVTRVQgc3RhdGUsCiAgICAgIHRodXMgcmVnaXN0ZXJlZCAodXNlcikgTXNwSW5pdC9EZUluaXQgY2FsbGJhY2tzIGNhbiBiZSB1c2VkIGR1cmluZyB0aGUgSW5pdC9EZUluaXQuCiAgICAgIFRoZW4sIHRoZSB1c2VyIGZpcnN0IHJlZ2lzdGVycyB0aGUgTXNwSW5pdC9Nc3BEZUluaXQgdXNlciBjYWxsYmFja3MKLSAgICAgdXNpbmcgQHJlZiBIQUxfSTJDX1JlZ2lzdGVyQ2FsbGJhY2soKSBiZWZvcmUgY2FsbGluZyBAcmVmIEhBTF9JMkNfRGVJbml0KCkKLSAgICAgb3IgQHJlZiBIQUxfSTJDX0luaXQoKSBmdW5jdGlvbi4KKyAgICAgdXNpbmcgSEFMX0kyQ19SZWdpc3RlckNhbGxiYWNrKCkgYmVmb3JlIGNhbGxpbmcgSEFMX0kyQ19EZUluaXQoKQorICAgICBvciBIQUxfSTJDX0luaXQoKSBmdW5jdGlvbi4KICAgICBbLi5dCiAgICAgIFdoZW4gdGhlIGNvbXBpbGF0aW9uIGZsYWcgVVNFX0hBTF9JMkNfUkVHSVNURVJfQ0FMTEJBQ0tTIGlzIHNldCB0byAwIG9yCiAgICAgIG5vdCBkZWZpbmVkLCB0aGUgY2FsbGJhY2sgcmVnaXN0cmF0aW9uIGZlYXR1cmUgaXMgbm90IGF2YWlsYWJsZSBhbmQgYWxsIGNhbGxiYWNrcwpAQCAtMjk1LDcgKzI5NSw2IEBACiAgICAgICAgKEApIFlvdSBjYW4gcmVmZXIgdG8gdGhlIEkyQyBIQUwgZHJpdmVyIGhlYWRlciBmaWxlIGZvciBtb3JlIHVzZWZ1bCBtYWNyb3MKIAogICBAZW5kdmVyYmF0aW0KLSAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICovCiAKIC8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0zMTQsNyArMzEzLDcgQEAKIAogLyogUHJpdmF0ZSB0eXBlZGVmIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgZGVmaW5lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiogQGFkZHRvZ3JvdXAgSTJDX1ByaXZhdGVfRGVmaW5lCisvKiogQGRlZmdyb3VwIEkyQ19Qcml2YXRlX0RlZmluZSBJMkMgUHJpdmF0ZSBEZWZpbmUKICAgKiBAewogICAqLwogI2RlZmluZSBJMkNfVElNRU9VVF9GTEFHICAgICAgICAgIDM1VSAgICAgICAgIC8qITwgVGltZW91dCAzNSBtcyAgICAgICAgICAgICAqLwpAQCAtMzM1LDYgKzMzNCwxNCBAQAogICAqLwogCiAvKiBQcml2YXRlIG1hY3JvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqIEBhZGR0b2dyb3VwIEkyQ19Qcml2YXRlX01hY3JvcworICAqIEB7CisgICovCisvKiBNYWNybyB0byBnZXQgcmVtYWluaW5nIGRhdGEgdG8gdHJhbnNmZXIgb24gRE1BIHNpZGUgKi8KKyNkZWZpbmUgSTJDX0dFVF9ETUFfUkVNQUlOX0RBVEEoX19IQU5ETEVfXykgICAgIF9fSEFMX0RNQV9HRVRfQ09VTlRFUihfX0hBTkRMRV9fKQorLyoqCisgICogQH0KKyAgKi8KIC8qIFByaXZhdGUgdmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBQcml2YXRlIGZ1bmN0aW9uIHByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC0zODQsNiArMzkxLDkgQEAKIAogLyogUHJpdmF0ZSBmdW5jdGlvbiB0byBDb252ZXJ0IFNwZWNpZmljIG9wdGlvbnMgKi8KIHN0YXRpYyB2b2lkIEkyQ19Db252ZXJ0T3RoZXJYZmVyT3B0aW9ucyhJMkNfSGFuZGxlVHlwZURlZiAqaGkyYyk7CisKKy8qIFByaXZhdGUgZnVuY3Rpb24gdG8gZmx1c2ggRFIgcmVnaXN0ZXIgKi8KK3N0YXRpYyB2b2lkIEkyQ19GbHVzaF9EUihJMkNfSGFuZGxlVHlwZURlZiAqaGkyYyk7CiAvKioKICAgKiBAfQogICAqLwpAQCAtOTQyLDYgKzk1MiwyMCBAQAogI2VuZGlmIC8qIFVTRV9IQUxfSTJDX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogCiAvKioKKyAgKiBAYnJpZWYgIEkyQyBkYXRhIHJlZ2lzdGVyIGZsdXNoIHByb2Nlc3MuCisgICogQHBhcmFtICBoaTJjIEkyQyBoYW5kbGUuCisgICogQHJldHZhbCBOb25lCisgICovCitzdGF0aWMgdm9pZCBJMkNfRmx1c2hfRFIoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMpCit7CisgIC8qIFdyaXRlIGEgZHVtbXkgZGF0YSBpbiBEUiB0byBjbGVhciBUWEUgZmxhZyAqLworICBpZiAoX19IQUxfSTJDX0dFVF9GTEFHKGhpMmMsIEkyQ19GTEFHX1RYRSkgIT0gUkVTRVQpCisgIHsKKyAgICBoaTJjLT5JbnN0YW5jZS0+RFIgPSAweDAwVTsKKyAgfQorfQorCisvKioKICAgKiBAfQogICAqLwogCkBAIC0xMzU4LDYgKzEzODIsMTMgQEAKIAogICAgICAgICBpZiAoX19IQUxfSTJDX0dFVF9GTEFHKGhpMmMsIEkyQ19GTEFHX0JURikgPT0gU0VUKQogICAgICAgICB7CisKKyAgICAgICAgICBpZiAoaGkyYy0+WGZlclNpemUgPT0gM1UpCisgICAgICAgICAgeworICAgICAgICAgICAgLyogRGlzYWJsZSBBY2tub3dsZWRnZSAqLworICAgICAgICAgICAgQ0xFQVJfQklUKGhpMmMtPkluc3RhbmNlLT5DUjEsIEkyQ19DUjFfQUNLKTsKKyAgICAgICAgICB9CisKICAgICAgICAgICAvKiBSZWFkIGRhdGEgZnJvbSBEUiAqLwogICAgICAgICAgICpoaTJjLT5wQnVmZlB0ciA9ICh1aW50OF90KWhpMmMtPkluc3RhbmNlLT5EUjsKIApAQCAtMzM5Nyw3ICszNDI4LDcgQEAKIHsKICAgLyogR2V0IHRpY2sgKi8KICAgdWludDMyX3QgdGlja3N0YXJ0ID0gSEFMX0dldFRpY2soKTsKLSAgdWludDMyX3QgSTJDX1RyaWFscyA9IDFVOworICB1aW50MzJfdCBJMkNfVHJpYWxzID0gMFU7CiAgIEZsYWdTdGF0dXMgdG1wMTsKICAgRmxhZ1N0YXR1cyB0bXAyOwogCkBAIC01NDY5LDcgKzU1MDAsOCBAQAogICB9CiAgIGVsc2UKICAgewotICAgIC8qIERvIG5vdGhpbmcgKi8KKyAgICAvKiBDbGVhciBUWEUgYW5kIEJURiBmbGFncyAqLworICAgIEkyQ19GbHVzaF9EUihoaTJjKTsKICAgfQogfQogCkBAIC02MTM1LDcgKzYxNjcsNyBAQAogICB7CiAgICAgaWYgKChDdXJyZW50U3RhdGUgPT0gSEFMX0kyQ19TVEFURV9CVVNZX1JYKSB8fCAoQ3VycmVudFN0YXRlID09IEhBTF9JMkNfU1RBVEVfQlVTWV9SWF9MSVNURU4pKQogICAgIHsKLSAgICAgIGhpMmMtPlhmZXJDb3VudCA9ICh1aW50MTZfdCkoX19IQUxfRE1BX0dFVF9DT1VOVEVSKGhpMmMtPmhkbWFyeCkpOworICAgICAgaGkyYy0+WGZlckNvdW50ID0gKHVpbnQxNl90KShJMkNfR0VUX0RNQV9SRU1BSU5fREFUQShoaTJjLT5oZG1hcngpKTsKIAogICAgICAgaWYgKGhpMmMtPlhmZXJDb3VudCAhPSAwVSkKICAgICAgIHsKQEAgLTYxNjMsNyArNjE5NSw3IEBACiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICBoaTJjLT5YZmVyQ291bnQgPSAodWludDE2X3QpKF9fSEFMX0RNQV9HRVRfQ09VTlRFUihoaTJjLT5oZG1hdHgpKTsKKyAgICAgIGhpMmMtPlhmZXJDb3VudCA9ICh1aW50MTZfdCkoSTJDX0dFVF9ETUFfUkVNQUlOX0RBVEEoaGkyYy0+aGRtYXR4KSk7CiAKICAgICAgIGlmIChoaTJjLT5YZmVyQ291bnQgIT0gMFUpCiAgICAgICB7CkBAIC02MzMyLDYgKzYzNjQsOSBAQAogICAgIC8qIERpc2FibGUgQWNrbm93bGVkZ2UgKi8KICAgICBDTEVBUl9CSVQoaGkyYy0+SW5zdGFuY2UtPkNSMSwgSTJDX0NSMV9BQ0spOwogCisgICAgLyogQ2xlYXIgVFhFIGZsYWcgKi8KKyAgICBJMkNfRmx1c2hfRFIoaGkyYyk7CisKICNpZiAoVVNFX0hBTF9JMkNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCiAgICAgaGkyYy0+U2xhdmVUeENwbHRDYWxsYmFjayhoaTJjKTsKICNlbHNlCkBAIC03NTA0LDMgKzc1MzksNCBAQAogLyoqCiAgICogQH0KICAgKi8KKwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjJ4eF9oYWxfaTJzLmMgYi9TcmMvc3RtMzJmMnh4X2hhbF9pMnMuYwppbmRleCBhYjE4YzIwLi4zZjg5MWE2IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmMnh4X2hhbF9pMnMuYworKysgYi9TcmMvc3RtMzJmMnh4X2hhbF9pMnMuYwpAQCAtOCw3ICs4LDYgQEAKICAgKiAgICAgICAgICAgKyBJbml0aWFsaXphdGlvbiBhbmQgZGUtaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zCiAgICogICAgICAgICAgICsgSU8gb3BlcmF0aW9uIGZ1bmN0aW9ucwogICAqICAgICAgICAgICArIFBlcmlwaGVyYWwgU3RhdGUgYW5kIEVycm9ycyBmdW5jdGlvbnMKLSAgKgogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKQEAgLTE3OSw3ICsxNzgsNyBAQAogICAgICAgIGFuZCB3ZWFrIChzdXJjaGFyZ2VkKSBjYWxsYmFja3MgYXJlIHVzZWQuCiAKICAgQGVuZHZlcmJhdGltCi0gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCiAgICovCiAKIC8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xODk0LDMgKzE4OTMsNCBAQAogICAqLwogCiAjZW5kaWYgLyogSEFMX0kyU19NT0RVTEVfRU5BQkxFRCAqLworCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmMnh4X2hhbF9pcmRhLmMgYi9TcmMvc3RtMzJmMnh4X2hhbF9pcmRhLmMKaW5kZXggY2Q0ZmM3Yy4uNzA2Y2JkOSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjJ4eF9oYWxfaXJkYS5jCisrKyBiL1NyYy9zdG0zMmYyeHhfaGFsX2lyZGEuYwpAQCAtMTIzLDggKzEyMyw4IEBACiAgICAgICBhbGxvd3MgdGhlIHVzZXIgdG8gY29uZmlndXJlIGR5bmFtaWNhbGx5IHRoZSBkcml2ZXIgY2FsbGJhY2tzLgogCiAgICAgWy4uXQotICAgICAgVXNlIEZ1bmN0aW9uIEByZWYgSEFMX0lSREFfUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlZ2lzdGVyIGEgdXNlciBjYWxsYmFjay4KLSAgICAgIEZ1bmN0aW9uIEByZWYgSEFMX0lSREFfUmVnaXN0ZXJDYWxsYmFjaygpIGFsbG93cyB0byByZWdpc3RlciBmb2xsb3dpbmcgY2FsbGJhY2tzOgorICAgICAgVXNlIEZ1bmN0aW9uIEhBTF9JUkRBX1JlZ2lzdGVyQ2FsbGJhY2soKSB0byByZWdpc3RlciBhIHVzZXIgY2FsbGJhY2suCisgICAgICBGdW5jdGlvbiBIQUxfSVJEQV9SZWdpc3RlckNhbGxiYWNrKCkgYWxsb3dzIHRvIHJlZ2lzdGVyIGZvbGxvd2luZyBjYWxsYmFja3M6CiAgICAgICAgKCspIFR4SGFsZkNwbHRDYWxsYmFjayAgICAgICAgOiBUeCBIYWxmIENvbXBsZXRlIENhbGxiYWNrLgogICAgICAgICgrKSBUeENwbHRDYWxsYmFjayAgICAgICAgICAgIDogVHggQ29tcGxldGUgQ2FsbGJhY2suCiAgICAgICAgKCspIFJ4SGFsZkNwbHRDYWxsYmFjayAgICAgICAgOiBSeCBIYWxmIENvbXBsZXRlIENhbGxiYWNrLgpAQCAtMTM5LDkgKzEzOSw5IEBACiAgICAgICBhbmQgYSBwb2ludGVyIHRvIHRoZSB1c2VyIGNhbGxiYWNrIGZ1bmN0aW9uLgogCiAgICAgWy4uXQotICAgICAgVXNlIGZ1bmN0aW9uIEByZWYgSEFMX0lSREFfVW5SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVzZXQgYSBjYWxsYmFjayB0byB0aGUgZGVmYXVsdAorICAgICAgVXNlIGZ1bmN0aW9uIEhBTF9JUkRBX1VuUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlc2V0IGEgY2FsbGJhY2sgdG8gdGhlIGRlZmF1bHQKICAgICAgIHdlYWsgKHN1cmNoYXJnZWQpIGZ1bmN0aW9uLgotICAgICAgQHJlZiBIQUxfSVJEQV9VblJlZ2lzdGVyQ2FsbGJhY2soKSB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsCisgICAgICBIQUxfSVJEQV9VblJlZ2lzdGVyQ2FsbGJhY2soKSB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsCiAgICAgICBhbmQgdGhlIENhbGxiYWNrIElELgogICAgICAgVGhpcyBmdW5jdGlvbiBhbGxvd3MgdG8gcmVzZXQgZm9sbG93aW5nIGNhbGxiYWNrczoKICAgICAgICAoKykgVHhIYWxmQ3BsdENhbGxiYWNrICAgICAgICA6IFR4IEhhbGYgQ29tcGxldGUgQ2FsbGJhY2suCkBAIC0xNTYsMTMgKzE1NiwxMyBAQAogICAgICAgICgrKSBNc3BEZUluaXRDYWxsYmFjayAgICAgICAgIDogSVJEQSBNc3BEZUluaXQuCiAKICAgICBbLi5dCi0gICAgICBCeSBkZWZhdWx0LCBhZnRlciB0aGUgQHJlZiBIQUxfSVJEQV9Jbml0KCkgYW5kIHdoZW4gdGhlIHN0YXRlIGlzIEhBTF9JUkRBX1NUQVRFX1JFU0VUCisgICAgICBCeSBkZWZhdWx0LCBhZnRlciB0aGUgSEFMX0lSREFfSW5pdCgpIGFuZCB3aGVuIHRoZSBzdGF0ZSBpcyBIQUxfSVJEQV9TVEFURV9SRVNFVAogICAgICAgYWxsIGNhbGxiYWNrcyBhcmUgc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIHdlYWsgKHN1cmNoYXJnZWQpIGZ1bmN0aW9uczoKLSAgICAgIGV4YW1wbGVzIEByZWYgSEFMX0lSREFfVHhDcGx0Q2FsbGJhY2soKSwgQHJlZiBIQUxfSVJEQV9SeEhhbGZDcGx0Q2FsbGJhY2soKS4KKyAgICAgIGV4YW1wbGVzIEhBTF9JUkRBX1R4Q3BsdENhbGxiYWNrKCksIEhBTF9JUkRBX1J4SGFsZkNwbHRDYWxsYmFjaygpLgogICAgICAgRXhjZXB0aW9uIGRvbmUgZm9yIE1zcEluaXQgYW5kIE1zcERlSW5pdCBmdW5jdGlvbnMgdGhhdCBhcmUgcmVzcGVjdGl2ZWx5Ci0gICAgICByZXNldCB0byB0aGUgbGVnYWN5IHdlYWsgKHN1cmNoYXJnZWQpIGZ1bmN0aW9ucyBpbiB0aGUgQHJlZiBIQUxfSVJEQV9Jbml0KCkKLSAgICAgIGFuZCBAcmVmIEhBTF9JUkRBX0RlSW5pdCgpIG9ubHkgd2hlbiB0aGVzZSBjYWxsYmFja3MgYXJlIG51bGwgKG5vdCByZWdpc3RlcmVkIGJlZm9yZWhhbmQpLgotICAgICAgSWYgbm90LCBNc3BJbml0IG9yIE1zcERlSW5pdCBhcmUgbm90IG51bGwsIHRoZSBAcmVmIEhBTF9JUkRBX0luaXQoKSBhbmQgQHJlZiBIQUxfSVJEQV9EZUluaXQoKQorICAgICAgcmVzZXQgdG8gdGhlIGxlZ2FjeSB3ZWFrIChzdXJjaGFyZ2VkKSBmdW5jdGlvbnMgaW4gdGhlIEhBTF9JUkRBX0luaXQoKQorICAgICAgYW5kIEhBTF9JUkRBX0RlSW5pdCgpIG9ubHkgd2hlbiB0aGVzZSBjYWxsYmFja3MgYXJlIG51bGwgKG5vdCByZWdpc3RlcmVkIGJlZm9yZWhhbmQpLgorICAgICAgSWYgbm90LCBNc3BJbml0IG9yIE1zcERlSW5pdCBhcmUgbm90IG51bGwsIHRoZSBIQUxfSVJEQV9Jbml0KCkgYW5kIEhBTF9JUkRBX0RlSW5pdCgpCiAgICAgICBrZWVwIGFuZCB1c2UgdGhlIHVzZXIgTXNwSW5pdC9Nc3BEZUluaXQgY2FsbGJhY2tzIChyZWdpc3RlcmVkIGJlZm9yZWhhbmQpLgogCiAgICAgWy4uXQpAQCAtMTcxLDggKzE3MSw4IEBACiAgICAgICBpbiBIQUxfSVJEQV9TVEFURV9SRUFEWSBvciBIQUxfSVJEQV9TVEFURV9SRVNFVCBzdGF0ZSwgdGh1cyByZWdpc3RlcmVkICh1c2VyKQogICAgICAgTXNwSW5pdC9EZUluaXQgY2FsbGJhY2tzIGNhbiBiZSB1c2VkIGR1cmluZyB0aGUgSW5pdC9EZUluaXQuCiAgICAgICBJbiB0aGF0IGNhc2UgZmlyc3QgcmVnaXN0ZXIgdGhlIE1zcEluaXQvTXNwRGVJbml0IHVzZXIgY2FsbGJhY2tzCi0gICAgICB1c2luZyBAcmVmIEhBTF9JUkRBX1JlZ2lzdGVyQ2FsbGJhY2soKSBiZWZvcmUgY2FsbGluZyBAcmVmIEhBTF9JUkRBX0RlSW5pdCgpCi0gICAgICBvciBAcmVmIEhBTF9JUkRBX0luaXQoKSBmdW5jdGlvbi4KKyAgICAgIHVzaW5nIEhBTF9JUkRBX1JlZ2lzdGVyQ2FsbGJhY2soKSBiZWZvcmUgY2FsbGluZyBIQUxfSVJEQV9EZUluaXQoKQorICAgICAgb3IgSEFMX0lSREFfSW5pdCgpIGZ1bmN0aW9uLgogCiAgICAgWy4uXQogICAgICAgV2hlbiBUaGUgY29tcGlsYXRpb24gZGVmaW5lIFVTRV9IQUxfSVJEQV9SRUdJU1RFUl9DQUxMQkFDS1MgaXMgc2V0IHRvIDAgb3IKQEAgLTE5Niw3ICsxOTYsNiBAQAogICAgIHwtLS0tLS0tLS18LS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgIHwgICAgMSAgICB8ICAgIDEgICAgICB8ICAgIHwgU0IgfCA4IGJpdCBkYXRhIHwgUEIgfCAxIFNUQiB8ICAgfAogICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqLwogCkBAIC00NDAsNiArNDM5LDggQEAKIC8qKgogICAqIEBicmllZiAgUmVnaXN0ZXIgYSBVc2VyIElSREEgQ2FsbGJhY2sKICAgKiAgICAgICAgIFRvIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgd2VhayBwcmVkZWZpbmVkIGNhbGxiYWNrCisgICogQG5vdGUgICBUaGUgSEFMX0lSREFfUmVnaXN0ZXJDYWxsYmFjaygpIG1heSBiZSBjYWxsZWQgYmVmb3JlIEhBTF9JUkRBX0luaXQoKSBpbiBIQUxfSVJEQV9TVEFURV9SRVNFVAorICAqICAgICAgICAgdG8gcmVnaXN0ZXIgY2FsbGJhY2tzIGZvciBIQUxfSVJEQV9NU1BJTklUX0NCX0lEIGFuZCBIQUxfSVJEQV9NU1BERUlOSVRfQ0JfSUQKICAgKiBAcGFyYW0gIGhpcmRhIGlyZGEgaGFuZGxlCiAgICogQHBhcmFtICBDYWxsYmFja0lEIElEIG9mIHRoZSBjYWxsYmFjayB0byBiZSByZWdpc3RlcmVkCiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgpAQCAtNDY3LDggKzQ2OCw2IEBACiAKICAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9Ci0gIC8qIFByb2Nlc3MgbG9ja2VkICovCi0gIF9fSEFMX0xPQ0soaGlyZGEpOwogCiAgIGlmIChoaXJkYS0+Z1N0YXRlID09IEhBTF9JUkRBX1NUQVRFX1JFQURZKQogICB7CkBAIC01NTMsMTUgKzU1MiwxNCBAQAogICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7CiAgIH0KIAotICAvKiBSZWxlYXNlIExvY2sgKi8KLSAgX19IQUxfVU5MT0NLKGhpcmRhKTsKLQogICByZXR1cm4gc3RhdHVzOwogfQogCiAvKioKICAgKiBAYnJpZWYgIFVucmVnaXN0ZXIgYW4gSVJEQSBjYWxsYmFjawogICAqICAgICAgICAgSVJEQSBjYWxsYmFjayBpcyByZWRpcmVjdGVkIHRvIHRoZSB3ZWFrIHByZWRlZmluZWQgY2FsbGJhY2sKKyAgKiBAbm90ZSAgIFRoZSBIQUxfSVJEQV9VblJlZ2lzdGVyQ2FsbGJhY2soKSBtYXkgYmUgY2FsbGVkIGJlZm9yZSBIQUxfSVJEQV9Jbml0KCkgaW4gSEFMX0lSREFfU1RBVEVfUkVTRVQKKyAgKiAgICAgICAgIHRvIHVuLXJlZ2lzdGVyIGNhbGxiYWNrcyBmb3IgSEFMX0lSREFfTVNQSU5JVF9DQl9JRCBhbmQgSEFMX0lSREFfTVNQREVJTklUX0NCX0lECiAgICogQHBhcmFtICBoaXJkYSBpcmRhIGhhbmRsZQogICAqIEBwYXJhbSAgQ2FsbGJhY2tJRCBJRCBvZiB0aGUgY2FsbGJhY2sgdG8gYmUgdW5yZWdpc3RlcmVkCiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgpAQCAtNTgxLDkgKzU3OSw2IEBACiB7CiAgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKIAotICAvKiBQcm9jZXNzIGxvY2tlZCAqLwotICBfX0hBTF9MT0NLKGhpcmRhKTsKLQogICBpZiAoSEFMX0lSREFfU1RBVEVfUkVBRFkgPT0gaGlyZGEtPmdTdGF0ZSkKICAgewogICAgIHN3aXRjaCAoQ2FsbGJhY2tJRCkKQEAgLTY2Nyw5ICs2NjIsNiBAQAogICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7CiAgIH0KIAotICAvKiBSZWxlYXNlIExvY2sgKi8KLSAgX19IQUxfVU5MT0NLKGhpcmRhKTsKLQogICByZXR1cm4gc3RhdHVzOwogfQogI2VuZGlmIC8qIFVTRV9IQUxfSVJEQV9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KQEAgLTI2NzEsMyArMjY2Myw0IEBACiAvKioKICAgKiBAfQogICAqLworCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmMnh4X2hhbF9tbWMuYyBiL1NyYy9zdG0zMmYyeHhfaGFsX21tYy5jCmluZGV4IGFjNWFjYWMuLjJmMWEzZDcgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYyeHhfaGFsX21tYy5jCisrKyBiL1NyYy9zdG0zMmYyeHhfaGFsX21tYy5jCkBAIC0xMyw3ICsxMyw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIENvcHlyaWdodCAoYykgMjAxOCBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogQ29weXJpZ2h0IChjKSAyMDE2IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlCkBAIC03NCw3ICs3NCw3IEBACiAgICAgU0RNTUMgUGVyaXBoZXJhbCAoU1RNMzIgc2lkZSkgYW5kIHRoZSBNTUMgQ2FyZCwgYW5kIHB1dCBpdCBpbnRvIFN0YW5kQnkgU3RhdGUgKFJlYWR5IGZvciBkYXRhIHRyYW5zZmVyKS4KICAgICBUaGlzIGZ1bmN0aW9uIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBvcGVyYXRpb25zOgogCi0gICAgKCMpIEluaXRpYWxpemUgdGhlIFNETU1DIHBlcmlwaGVyYWwgaW50ZXJmYWNlIHdpdGggZGVmYXVsbHQgY29uZmlndXJhdGlvbi4KKyAgICAoIykgSW5pdGlhbGl6ZSB0aGUgU0RNTUMgcGVyaXBoZXJhbCBpbnRlcmZhY2Ugd2l0aCBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uCiAgICAgICAgIFRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzIGlzIGRvbmUgYXQgNDAwS0h6LiBZb3UgY2FuIGNoYW5nZSBvciBhZGFwdAogICAgICAgICB0aGlzIGZyZXF1ZW5jeSBieSBhZGp1c3RpbmcgdGhlICJDbG9ja0RpdiIgZmllbGQuCiAgICAgICAgIFRoZSBNTUMgQ2FyZCBmcmVxdWVuY3kgKFNETU1DX0NLKSBpcyBjb21wdXRlZCBhcyBmb2xsb3dzOgpAQCAtMjA2LDcgKzIwNiw3IEBACiAgICAgVGhlIGNvbXBpbGF0aW9uIGRlZmluZSBVU0VfSEFMX01NQ19SRUdJU1RFUl9DQUxMQkFDS1Mgd2hlbiBzZXQgdG8gMQogICAgIGFsbG93cyB0aGUgdXNlciB0byBjb25maWd1cmUgZHluYW1pY2FsbHkgdGhlIGRyaXZlciBjYWxsYmFja3MuCiAKLSAgICBVc2UgRnVuY3Rpb25zIEByZWYgSEFMX01NQ19SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVnaXN0ZXIgYSB1c2VyIGNhbGxiYWNrLAorICAgIFVzZSBGdW5jdGlvbnMgSEFMX01NQ19SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVnaXN0ZXIgYSB1c2VyIGNhbGxiYWNrLAogICAgIGl0IGFsbG93cyB0byByZWdpc3RlciBmb2xsb3dpbmcgY2FsbGJhY2tzOgogICAgICAgKCspIFR4Q3BsdENhbGxiYWNrIDogY2FsbGJhY2sgd2hlbiBhIHRyYW5zbWlzc2lvbiB0cmFuc2ZlciBpcyBjb21wbGV0ZWQuCiAgICAgICAoKykgUnhDcGx0Q2FsbGJhY2sgOiBjYWxsYmFjayB3aGVuIGEgcmVjZXB0aW9uIHRyYW5zZmVyIGlzIGNvbXBsZXRlZC4KQEAgLTIxNyw3ICsyMTcsNyBAQAogICAgIFRoaXMgZnVuY3Rpb24gdGFrZXMgYXMgcGFyYW1ldGVycyB0aGUgSEFMIHBlcmlwaGVyYWwgaGFuZGxlLCB0aGUgQ2FsbGJhY2sgSUQKICAgICBhbmQgYSBwb2ludGVyIHRvIHRoZSB1c2VyIGNhbGxiYWNrIGZ1bmN0aW9uLgogCi0gICAgVXNlIGZ1bmN0aW9uIEByZWYgSEFMX01NQ19VblJlZ2lzdGVyQ2FsbGJhY2soKSB0byByZXNldCBhIGNhbGxiYWNrIHRvIHRoZSBkZWZhdWx0CisgICAgVXNlIGZ1bmN0aW9uIEhBTF9NTUNfVW5SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVzZXQgYSBjYWxsYmFjayB0byB0aGUgZGVmYXVsdAogICAgIHdlYWsgKHN1cmNoYXJnZWQpIGZ1bmN0aW9uLiBJdCBhbGxvd3MgdG8gcmVzZXQgZm9sbG93aW5nIGNhbGxiYWNrczoKICAgICAgICgrKSBUeENwbHRDYWxsYmFjayA6IGNhbGxiYWNrIHdoZW4gYSB0cmFuc21pc3Npb24gdHJhbnNmZXIgaXMgY29tcGxldGVkLgogICAgICAgKCspIFJ4Q3BsdENhbGxiYWNrIDogY2FsbGJhY2sgd2hlbiBhIHJlY2VwdGlvbiB0cmFuc2ZlciBpcyBjb21wbGV0ZWQuCkBAIC0yMjcsMTIgKzIyNywxMiBAQAogICAgICAgKCspIE1zcERlSW5pdENhbGxiYWNrICA6IE1NQyBNc3BEZUluaXQuCiAgICAgVGhpcyBmdW5jdGlvbikgdGFrZXMgYXMgcGFyYW1ldGVycyB0aGUgSEFMIHBlcmlwaGVyYWwgaGFuZGxlIGFuZCB0aGUgQ2FsbGJhY2sgSUQuCiAKLSAgICBCeSBkZWZhdWx0LCBhZnRlciB0aGUgQHJlZiBIQUxfTU1DX0luaXQgYW5kIGlmIHRoZSBzdGF0ZSBpcyBIQUxfTU1DX1NUQVRFX1JFU0VUCisgICAgQnkgZGVmYXVsdCwgYWZ0ZXIgdGhlIEhBTF9NTUNfSW5pdCBhbmQgaWYgdGhlIHN0YXRlIGlzIEhBTF9NTUNfU1RBVEVfUkVTRVQKICAgICBhbGwgY2FsbGJhY2tzIGFyZSByZXNldCB0byB0aGUgY29ycmVzcG9uZGluZyBsZWdhY3kgd2VhayAoc3VyY2hhcmdlZCkgZnVuY3Rpb25zLgogICAgIEV4Y2VwdGlvbiBkb25lIGZvciBNc3BJbml0IGFuZCBNc3BEZUluaXQgY2FsbGJhY2tzIHRoYXQgYXJlIHJlc3BlY3RpdmVseQotICAgIHJlc2V0IHRvIHRoZSBsZWdhY3kgd2VhayAoc3VyY2hhcmdlZCkgZnVuY3Rpb25zIGluIHRoZSBAcmVmIEhBTF9NTUNfSW5pdAotICAgIGFuZCBAcmVmICBIQUxfTU1DX0RlSW5pdCBvbmx5IHdoZW4gdGhlc2UgY2FsbGJhY2tzIGFyZSBudWxsIChub3QgcmVnaXN0ZXJlZCBiZWZvcmVoYW5kKS4KLSAgICBJZiBub3QsIE1zcEluaXQgb3IgTXNwRGVJbml0IGFyZSBub3QgbnVsbCwgdGhlIEByZWYgSEFMX01NQ19Jbml0IGFuZCBAcmVmIEhBTF9NTUNfRGVJbml0CisgICAgcmVzZXQgdG8gdGhlIGxlZ2FjeSB3ZWFrIChzdXJjaGFyZ2VkKSBmdW5jdGlvbnMgaW4gdGhlIEhBTF9NTUNfSW5pdAorICAgIGFuZCAgSEFMX01NQ19EZUluaXQgb25seSB3aGVuIHRoZXNlIGNhbGxiYWNrcyBhcmUgbnVsbCAobm90IHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCkuCisgICAgSWYgbm90LCBNc3BJbml0IG9yIE1zcERlSW5pdCBhcmUgbm90IG51bGwsIHRoZSBIQUxfTU1DX0luaXQgYW5kIEhBTF9NTUNfRGVJbml0CiAgICAga2VlcCBhbmQgdXNlIHRoZSB1c2VyIE1zcEluaXQvTXNwRGVJbml0IGNhbGxiYWNrcyAocmVnaXN0ZXJlZCBiZWZvcmVoYW5kKQogCiAgICAgQ2FsbGJhY2tzIGNhbiBiZSByZWdpc3RlcmVkL3VucmVnaXN0ZXJlZCBpbiBSRUFEWSBzdGF0ZSBvbmx5LgpAQCAtMjQwLDggKzI0MCw4IEBACiAgICAgaW4gUkVBRFkgb3IgUkVTRVQgc3RhdGUsIHRodXMgcmVnaXN0ZXJlZCAodXNlcikgTXNwSW5pdC9EZUluaXQgY2FsbGJhY2tzIGNhbiBiZSB1c2VkCiAgICAgZHVyaW5nIHRoZSBJbml0L0RlSW5pdC4KICAgICBJbiB0aGF0IGNhc2UgZmlyc3QgcmVnaXN0ZXIgdGhlIE1zcEluaXQvTXNwRGVJbml0IHVzZXIgY2FsbGJhY2tzCi0gICAgdXNpbmcgQHJlZiBIQUxfTU1DX1JlZ2lzdGVyQ2FsbGJhY2sgYmVmb3JlIGNhbGxpbmcgQHJlZiBIQUxfTU1DX0RlSW5pdAotICAgIG9yIEByZWYgSEFMX01NQ19Jbml0IGZ1bmN0aW9uLgorICAgIHVzaW5nIEhBTF9NTUNfUmVnaXN0ZXJDYWxsYmFjayBiZWZvcmUgY2FsbGluZyBIQUxfTU1DX0RlSW5pdAorICAgIG9yIEhBTF9NTUNfSW5pdCBmdW5jdGlvbi4KIAogICAgIFdoZW4gVGhlIGNvbXBpbGF0aW9uIGRlZmluZSBVU0VfSEFMX01NQ19SRUdJU1RFUl9DQUxMQkFDS1MgaXMgc2V0IHRvIDAgb3IKICAgICBub3QgZGVmaW5lZCwgdGhlIGNhbGxiYWNrIHJlZ2lzdGVyaW5nIGZlYXR1cmUgaXMgbm90IGF2YWlsYWJsZQpAQCAtMjk1LDcgKzI5NSw3IEBACiAjZW5kaWYKIAogLyogRnJlcXVlbmNpZXMgdXNlZCBpbiB0aGUgZHJpdmVyIGZvciBjbG9jayBkaXZpZGVyIGNhbGN1bGF0aW9uICovCi0jZGVmaW5lIE1NQ19JTklUX0ZSRVEgICAgICAgICAgICAgICAgICAgNDAwMDAwVSAgIC8qIEluaXRhbGl6YXRpb24gcGhhc2UgOiA0MDAga0h6IG1heCAqLworI2RlZmluZSBNTUNfSU5JVF9GUkVRICAgICAgICAgICAgICAgICAgIDQwMDAwMFUgICAvKiBJbml0aWFsaXphdGlvbiBwaGFzZSA6IDQwMCBrSHogbWF4ICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtNDYwLDYgKzQ2MCw5IEBACiAgIC8qIEVuYWJsZSBNTUMgQ2xvY2sgKi8KICAgX19IQUxfTU1DX0VOQUJMRShobW1jKTsKIAorICAvKiBSZXF1aXJlZCBwb3dlciB1cCB3YWl0aW5nIHRpbWUgYmVmb3JlIHN0YXJ0aW5nIHRoZSBNTUMgaW5pdGlhbGl6YXRpb24gIHNlcXVlbmNlICovCisgIEhBTF9EZWxheSgyKTsKKwogICAvKiBJZGVudGlmeSBjYXJkIG9wZXJhdGluZyB2b2x0YWdlICovCiAgIGVycm9yc3RhdGUgPSBNTUNfUG93ZXJPTihobW1jKTsKICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmMnh4X2hhbF9tc3BfdGVtcGxhdGUuYyBiL1NyYy9zdG0zMmYyeHhfaGFsX21zcF90ZW1wbGF0ZS5jCmluZGV4IGZiNDE2YzMuLmQyN2QyYmQgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYyeHhfaGFsX21zcF90ZW1wbGF0ZS5jCisrKyBiL1NyYy9zdG0zMmYyeHhfaGFsX21zcF90ZW1wbGF0ZS5jCkBAIC01LDcgKzUsNyBAQAogICAqIEBicmllZiAgIEhBTCBNU1AgbW9kdWxlLgogICAqICAgICAgICAgIFRoaXMgZmlsZSB0ZW1wbGF0ZSBpcyBsb2NhdGVkIGluIHRoZSBIQUwgZm9sZGVyIGFuZCBzaG91bGQgYmUgY29waWVkIAogICAqICAgICAgICAgIHRvIHRoZSB1c2VyIGZvbGRlci4KLSAgKiAgICAgICAgIAorICAqCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgpAQCAtOTIsMyArOTIsNSBAQAogLyoqCiAgICogQH0KICAgKi8KKworCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmMnh4X2hhbF9uYW5kLmMgYi9TcmMvc3RtMzJmMnh4X2hhbF9uYW5kLmMKaW5kZXggMWE3NmFjOC4uMDk3NmE3YSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjJ4eF9oYWxfbmFuZC5jCisrKyBiL1NyYy9zdG0zMmYyeHhfaGFsX25hbmQuYwpAQCAtNjksMjUgKzY5LDI1IEBACiAgICAgICBUaGUgY29tcGlsYXRpb24gZGVmaW5lICBVU0VfSEFMX05BTkRfUkVHSVNURVJfQ0FMTEJBQ0tTIHdoZW4gc2V0IHRvIDEKICAgICAgIGFsbG93cyB0aGUgdXNlciB0byBjb25maWd1cmUgZHluYW1pY2FsbHkgdGhlIGRyaXZlciBjYWxsYmFja3MuCiAKLSAgICAgIFVzZSBGdW5jdGlvbnMgQHJlZiBIQUxfTkFORF9SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVnaXN0ZXIgYSB1c2VyIGNhbGxiYWNrLAorICAgICAgVXNlIEZ1bmN0aW9ucyBIQUxfTkFORF9SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVnaXN0ZXIgYSB1c2VyIGNhbGxiYWNrLAogICAgICAgaXQgYWxsb3dzIHRvIHJlZ2lzdGVyIGZvbGxvd2luZyBjYWxsYmFja3M6CiAgICAgICAgICgrKSBNc3BJbml0Q2FsbGJhY2sgICAgOiBOQU5EIE1zcEluaXQuCiAgICAgICAgICgrKSBNc3BEZUluaXRDYWxsYmFjayAgOiBOQU5EIE1zcERlSW5pdC4KICAgICAgIFRoaXMgZnVuY3Rpb24gdGFrZXMgYXMgcGFyYW1ldGVycyB0aGUgSEFMIHBlcmlwaGVyYWwgaGFuZGxlLCB0aGUgQ2FsbGJhY2sgSUQKICAgICAgIGFuZCBhIHBvaW50ZXIgdG8gdGhlIHVzZXIgY2FsbGJhY2sgZnVuY3Rpb24uCiAKLSAgICAgIFVzZSBmdW5jdGlvbiBAcmVmIEhBTF9OQU5EX1VuUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlc2V0IGEgY2FsbGJhY2sgdG8gdGhlIGRlZmF1bHQKLSAgICAgIHdlYWsgKHN1cmNoYXJnZWQpIGZ1bmN0aW9uLiBJdCBhbGxvd3MgdG8gcmVzZXQgZm9sbG93aW5nIGNhbGxiYWNrczoKKyAgICAgIFVzZSBmdW5jdGlvbiBIQUxfTkFORF9VblJlZ2lzdGVyQ2FsbGJhY2soKSB0byByZXNldCBhIGNhbGxiYWNrIHRvIHRoZSBkZWZhdWx0CisgICAgICB3ZWFrIChvdmVycmlkZGVuKSBmdW5jdGlvbi4gSXQgYWxsb3dzIHRvIHJlc2V0IGZvbGxvd2luZyBjYWxsYmFja3M6CiAgICAgICAgICgrKSBNc3BJbml0Q2FsbGJhY2sgICAgOiBOQU5EIE1zcEluaXQuCiAgICAgICAgICgrKSBNc3BEZUluaXRDYWxsYmFjayAgOiBOQU5EIE1zcERlSW5pdC4KICAgICAgIFRoaXMgZnVuY3Rpb24pIHRha2VzIGFzIHBhcmFtZXRlcnMgdGhlIEhBTCBwZXJpcGhlcmFsIGhhbmRsZSBhbmQgdGhlIENhbGxiYWNrIElELgogCi0gICAgICBCeSBkZWZhdWx0LCBhZnRlciB0aGUgQHJlZiBIQUxfTkFORF9Jbml0IGFuZCBpZiB0aGUgc3RhdGUgaXMgSEFMX05BTkRfU1RBVEVfUkVTRVQKLSAgICAgIGFsbCBjYWxsYmFja3MgYXJlIHJlc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIGxlZ2FjeSB3ZWFrIChzdXJjaGFyZ2VkKSBmdW5jdGlvbnMuCisgICAgICBCeSBkZWZhdWx0LCBhZnRlciB0aGUgSEFMX05BTkRfSW5pdCBhbmQgaWYgdGhlIHN0YXRlIGlzIEhBTF9OQU5EX1NUQVRFX1JFU0VUCisgICAgICBhbGwgY2FsbGJhY2tzIGFyZSByZXNldCB0byB0aGUgY29ycmVzcG9uZGluZyBsZWdhY3kgd2VhayAob3ZlcnJpZGRlbikgZnVuY3Rpb25zLgogICAgICAgRXhjZXB0aW9uIGRvbmUgZm9yIE1zcEluaXQgYW5kIE1zcERlSW5pdCBjYWxsYmFja3MgdGhhdCBhcmUgcmVzcGVjdGl2ZWx5Ci0gICAgICByZXNldCB0byB0aGUgbGVnYWN5IHdlYWsgKHN1cmNoYXJnZWQpIGZ1bmN0aW9ucyBpbiB0aGUgQHJlZiBIQUxfTkFORF9Jbml0Ci0gICAgICBhbmQgQHJlZiAgSEFMX05BTkRfRGVJbml0IG9ubHkgd2hlbiB0aGVzZSBjYWxsYmFja3MgYXJlIG51bGwgKG5vdCByZWdpc3RlcmVkIGJlZm9yZWhhbmQpLgotICAgICAgSWYgbm90LCBNc3BJbml0IG9yIE1zcERlSW5pdCBhcmUgbm90IG51bGwsIHRoZSBAcmVmIEhBTF9OQU5EX0luaXQgYW5kIEByZWYgSEFMX05BTkRfRGVJbml0CisgICAgICByZXNldCB0byB0aGUgbGVnYWN5IHdlYWsgKG92ZXJyaWRkZW4pIGZ1bmN0aW9ucyBpbiB0aGUgSEFMX05BTkRfSW5pdAorICAgICAgYW5kICBIQUxfTkFORF9EZUluaXQgb25seSB3aGVuIHRoZXNlIGNhbGxiYWNrcyBhcmUgbnVsbCAobm90IHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCkuCisgICAgICBJZiBub3QsIE1zcEluaXQgb3IgTXNwRGVJbml0IGFyZSBub3QgbnVsbCwgdGhlIEhBTF9OQU5EX0luaXQgYW5kIEhBTF9OQU5EX0RlSW5pdAogICAgICAga2VlcCBhbmQgdXNlIHRoZSB1c2VyIE1zcEluaXQvTXNwRGVJbml0IGNhbGxiYWNrcyAocmVnaXN0ZXJlZCBiZWZvcmVoYW5kKQogCiAgICAgICBDYWxsYmFja3MgY2FuIGJlIHJlZ2lzdGVyZWQvdW5yZWdpc3RlcmVkIGluIFJFQURZIHN0YXRlIG9ubHkuCkBAIC05NSwxMiArOTUsMTIgQEAKICAgICAgIGluIFJFQURZIG9yIFJFU0VUIHN0YXRlLCB0aHVzIHJlZ2lzdGVyZWQgKHVzZXIpIE1zcEluaXQvRGVJbml0IGNhbGxiYWNrcyBjYW4gYmUgdXNlZAogICAgICAgZHVyaW5nIHRoZSBJbml0L0RlSW5pdC4KICAgICAgIEluIHRoYXQgY2FzZSBmaXJzdCByZWdpc3RlciB0aGUgTXNwSW5pdC9Nc3BEZUluaXQgdXNlciBjYWxsYmFja3MKLSAgICAgIHVzaW5nIEByZWYgSEFMX05BTkRfUmVnaXN0ZXJDYWxsYmFjayBiZWZvcmUgY2FsbGluZyBAcmVmIEhBTF9OQU5EX0RlSW5pdAotICAgICAgb3IgQHJlZiBIQUxfTkFORF9Jbml0IGZ1bmN0aW9uLgorICAgICAgdXNpbmcgSEFMX05BTkRfUmVnaXN0ZXJDYWxsYmFjayBiZWZvcmUgY2FsbGluZyBIQUxfTkFORF9EZUluaXQKKyAgICAgIG9yIEhBTF9OQU5EX0luaXQgZnVuY3Rpb24uCiAKICAgICAgIFdoZW4gVGhlIGNvbXBpbGF0aW9uIGRlZmluZSBVU0VfSEFMX05BTkRfUkVHSVNURVJfQ0FMTEJBQ0tTIGlzIHNldCB0byAwIG9yCiAgICAgICBub3QgZGVmaW5lZCwgdGhlIGNhbGxiYWNrIHJlZ2lzdGVyaW5nIGZlYXR1cmUgaXMgbm90IGF2YWlsYWJsZQotICAgICAgYW5kIHdlYWsgKHN1cmNoYXJnZWQpIGNhbGxiYWNrcyBhcmUgdXNlZC4KKyAgICAgIGFuZCB3ZWFrIChvdmVycmlkZGVuKSBjYWxsYmFja3MgYXJlIHVzZWQuCiAKICAgQGVuZHZlcmJhdGltCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNTI4LDggKzUyOCw4IEBACiAgICogQHBhcmFtICBOdW1QYWdlVG9SZWFkICBudW1iZXIgb2YgcGFnZXMgdG8gcmVhZCBmcm9tIGJsb2NrCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfTkFORF9SZWFkX1BhZ2VfOGIoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MsIHVpbnQ4X3QgKnBCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgTnVtUGFnZVRvUmVhZCkKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9OQU5EX1JlYWRfUGFnZV84YihOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBjb25zdCBOQU5EX0FkZHJlc3NUeXBlRGVmICpwQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpwQnVmZmVyLCB1aW50MzJfdCBOdW1QYWdlVG9SZWFkKQogewogICB1aW50MzJfdCBpbmRleDsKICAgdWludDMyX3QgdGlja3N0YXJ0OwpAQCAtNjkzLDggKzY5Myw4IEBACiAgICogQHBhcmFtICBOdW1QYWdlVG9SZWFkICBudW1iZXIgb2YgcGFnZXMgdG8gcmVhZCBmcm9tIGJsb2NrCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfTkFORF9SZWFkX1BhZ2VfMTZiKE5BTkRfSGFuZGxlVHlwZURlZiAqaG5hbmQsIE5BTkRfQWRkcmVzc1R5cGVEZWYgKnBBZGRyZXNzLCB1aW50MTZfdCAqcEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgTnVtUGFnZVRvUmVhZCkKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9OQU5EX1JlYWRfUGFnZV8xNmIoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgY29uc3QgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90ICpwQnVmZmVyLCB1aW50MzJfdCBOdW1QYWdlVG9SZWFkKQogewogICB1aW50MzJfdCBpbmRleDsKICAgdWludDMyX3QgdGlja3N0YXJ0OwpAQCAtODY4LDggKzg2OCw4IEBACiAgICogQHBhcmFtICBOdW1QYWdlVG9Xcml0ZSAgIG51bWJlciBvZiBwYWdlcyB0byB3cml0ZSB0byBibG9jawogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX05BTkRfV3JpdGVfUGFnZV84YihOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBOQU5EX0FkZHJlc3NUeXBlRGVmICpwQWRkcmVzcywgdWludDhfdCAqcEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgTnVtUGFnZVRvV3JpdGUpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfTkFORF9Xcml0ZV9QYWdlXzhiKE5BTkRfSGFuZGxlVHlwZURlZiAqaG5hbmQsIGNvbnN0IE5BTkRfQWRkcmVzc1R5cGVEZWYgKnBBZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpwQnVmZmVyLCB1aW50MzJfdCBOdW1QYWdlVG9Xcml0ZSkKIHsKICAgdWludDMyX3QgaW5kZXg7CiAgIHVpbnQzMl90IHRpY2tzdGFydDsKQEAgLTg3Nyw3ICs4NzcsNyBAQAogICB1aW50MzJfdCBudW1wYWdlc3dyaXR0ZW4gPSAwVTsKICAgdWludDMyX3QgbmFuZGFkZHJlc3M7CiAgIHVpbnQzMl90IG5icGFnZXMgPSBOdW1QYWdlVG9Xcml0ZTsKLSAgdWludDhfdCAqYnVmZiA9IHBCdWZmZXI7CisgIGNvbnN0IHVpbnQ4X3QgKmJ1ZmYgPSBwQnVmZmVyOwogCiAgIC8qIENoZWNrIHRoZSBOQU5EIGNvbnRyb2xsZXIgc3RhdGUgKi8KICAgaWYgKGhuYW5kLT5TdGF0ZSA9PSBIQUxfTkFORF9TVEFURV9CVVNZKQpAQCAtMTAyOCw4ICsxMDI4LDggQEAKICAgKiBAcGFyYW0gIE51bVBhZ2VUb1dyaXRlICAgbnVtYmVyIG9mIHBhZ2VzIHRvIHdyaXRlIHRvIGJsb2NrCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfTkFORF9Xcml0ZV9QYWdlXzE2YihOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBOQU5EX0FkZHJlc3NUeXBlRGVmICpwQWRkcmVzcywgdWludDE2X3QgKnBCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBOdW1QYWdlVG9Xcml0ZSkKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9OQU5EX1dyaXRlX1BhZ2VfMTZiKE5BTkRfSGFuZGxlVHlwZURlZiAqaG5hbmQsIGNvbnN0IE5BTkRfQWRkcmVzc1R5cGVEZWYgKnBBZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDE2X3QgKnBCdWZmZXIsIHVpbnQzMl90IE51bVBhZ2VUb1dyaXRlKQogewogICB1aW50MzJfdCBpbmRleDsKICAgdWludDMyX3QgdGlja3N0YXJ0OwpAQCAtMTAzNyw3ICsxMDM3LDcgQEAKICAgdWludDMyX3QgbnVtcGFnZXN3cml0dGVuID0gMFU7CiAgIHVpbnQzMl90IG5hbmRhZGRyZXNzOwogICB1aW50MzJfdCBuYnBhZ2VzID0gTnVtUGFnZVRvV3JpdGU7Ci0gIHVpbnQxNl90ICpidWZmID0gcEJ1ZmZlcjsKKyAgY29uc3QgdWludDE2X3QgKmJ1ZmYgPSBwQnVmZmVyOwogCiAgIC8qIENoZWNrIHRoZSBOQU5EIGNvbnRyb2xsZXIgc3RhdGUgKi8KICAgaWYgKGhuYW5kLT5TdGF0ZSA9PSBIQUxfTkFORF9TVEFURV9CVVNZKQpAQCAtMTE5OSw4ICsxMTk5LDggQEAKICAgKiBAcGFyYW0gIE51bVNwYXJlQXJlYVRvUmVhZCBOdW1iZXIgb2Ygc3BhcmUgYXJlYSB0byByZWFkCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfTkFORF9SZWFkX1NwYXJlQXJlYV84YihOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBOQU5EX0FkZHJlc3NUeXBlRGVmICpwQWRkcmVzcywgdWludDhfdCAqcEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IE51bVNwYXJlQXJlYVRvUmVhZCkKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9OQU5EX1JlYWRfU3BhcmVBcmVhXzhiKE5BTkRfSGFuZGxlVHlwZURlZiAqaG5hbmQsIGNvbnN0IE5BTkRfQWRkcmVzc1R5cGVEZWYgKnBBZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcEJ1ZmZlciwgdWludDMyX3QgTnVtU3BhcmVBcmVhVG9SZWFkKQogewogICB1aW50MzJfdCBpbmRleDsKICAgdWludDMyX3QgdGlja3N0YXJ0OwpAQCAtMTM3MSw3ICsxMzcxLDcgQEAKICAgKiBAcGFyYW0gIE51bVNwYXJlQXJlYVRvUmVhZCBOdW1iZXIgb2Ygc3BhcmUgYXJlYSB0byByZWFkCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfTkFORF9SZWFkX1NwYXJlQXJlYV8xNmIoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MsCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfTkFORF9SZWFkX1NwYXJlQXJlYV8xNmIoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgY29uc3QgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgKnBCdWZmZXIsIHVpbnQzMl90IE51bVNwYXJlQXJlYVRvUmVhZCkKIHsKICAgdWludDMyX3QgaW5kZXg7CkBAIC0xNTQzLDggKzE1NDMsOCBAQAogICAqIEBwYXJhbSAgTnVtU3BhcmVBcmVhVG93cml0ZSAgIG51bWJlciBvZiBzcGFyZSBhcmVhcyB0byB3cml0ZSB0byBibG9jawogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX05BTkRfV3JpdGVfU3BhcmVBcmVhXzhiKE5BTkRfSGFuZGxlVHlwZURlZiAqaG5hbmQsIE5BTkRfQWRkcmVzc1R5cGVEZWYgKnBBZGRyZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBCdWZmZXIsIHVpbnQzMl90IE51bVNwYXJlQXJlYVRvd3JpdGUpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfTkFORF9Xcml0ZV9TcGFyZUFyZWFfOGIoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgY29uc3QgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcEJ1ZmZlciwgdWludDMyX3QgTnVtU3BhcmVBcmVhVG93cml0ZSkKIHsKICAgdWludDMyX3QgaW5kZXg7CiAgIHVpbnQzMl90IHRpY2tzdGFydDsKQEAgLTE1NTMsNyArMTU1Myw3IEBACiAgIHVpbnQzMl90IG5hbmRhZGRyZXNzOwogICB1aW50MzJfdCBjb2x1bW5hZGRyZXNzOwogICB1aW50MzJfdCBuYnNwYXJlID0gTnVtU3BhcmVBcmVhVG93cml0ZTsKLSAgdWludDhfdCAqYnVmZiA9IHBCdWZmZXI7CisgIGNvbnN0IHVpbnQ4X3QgKmJ1ZmYgPSBwQnVmZmVyOwogCiAgIC8qIENoZWNrIHRoZSBOQU5EIGNvbnRyb2xsZXIgc3RhdGUgKi8KICAgaWYgKGhuYW5kLT5TdGF0ZSA9PSBIQUxfTkFORF9TVEFURV9CVVNZKQpAQCAtMTcxMyw4ICsxNzEzLDggQEAKICAgKiBAcGFyYW0gIE51bVNwYXJlQXJlYVRvd3JpdGUgICBudW1iZXIgb2Ygc3BhcmUgYXJlYXMgdG8gd3JpdGUgdG8gYmxvY2sKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9OQU5EX1dyaXRlX1NwYXJlQXJlYV8xNmIoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90ICpwQnVmZmVyLCB1aW50MzJfdCBOdW1TcGFyZUFyZWFUb3dyaXRlKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX05BTkRfV3JpdGVfU3BhcmVBcmVhXzE2YihOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBjb25zdCBOQU5EX0FkZHJlc3NUeXBlRGVmICpwQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDE2X3QgKnBCdWZmZXIsIHVpbnQzMl90IE51bVNwYXJlQXJlYVRvd3JpdGUpCiB7CiAgIHVpbnQzMl90IGluZGV4OwogICB1aW50MzJfdCB0aWNrc3RhcnQ7CkBAIC0xNzIzLDcgKzE3MjMsNyBAQAogICB1aW50MzJfdCBuYW5kYWRkcmVzczsKICAgdWludDMyX3QgY29sdW1uYWRkcmVzczsKICAgdWludDMyX3QgbmJzcGFyZSA9IE51bVNwYXJlQXJlYVRvd3JpdGU7Ci0gIHVpbnQxNl90ICpidWZmID0gcEJ1ZmZlcjsKKyAgY29uc3QgdWludDE2X3QgKmJ1ZmYgPSBwQnVmZmVyOwogCiAgIC8qIENoZWNrIHRoZSBOQU5EIGNvbnRyb2xsZXIgc3RhdGUgKi8KICAgaWYgKGhuYW5kLT5TdGF0ZSA9PSBIQUxfTkFORF9TVEFURV9CVVNZKQpAQCAtMTg4MSw3ICsxODgxLDcgQEAKICAgKiBAcGFyYW0gIHBBZGRyZXNzICBwb2ludGVyIHRvIE5BTkQgYWRkcmVzcyBzdHJ1Y3R1cmUKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9OQU5EX0VyYXNlX0Jsb2NrKE5BTkRfSGFuZGxlVHlwZURlZiAqaG5hbmQsIE5BTkRfQWRkcmVzc1R5cGVEZWYgKnBBZGRyZXNzKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX05BTkRfRXJhc2VfQmxvY2soTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgY29uc3QgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MpCiB7CiAgIHVpbnQzMl90IGRldmljZWFkZHJlc3M7CiAKQEAgLTE5NDQsNyArMTk0NCw3IEBACiAgICogICAgICAgICAgIC0gTkFORF9WQUxJRF9BRERSRVNTOiBXaGVuIHRoZSBuZXcgYWRkcmVzcyBpcyB2YWxpZCBhZGRyZXNzCiAgICogICAgICAgICAgIC0gTkFORF9JTlZBTElEX0FERFJFU1M6IFdoZW4gdGhlIG5ldyBhZGRyZXNzIGlzIGludmFsaWQgYWRkcmVzcwogICAqLwotdWludDMyX3QgSEFMX05BTkRfQWRkcmVzc19JbmMoTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCwgTkFORF9BZGRyZXNzVHlwZURlZiAqcEFkZHJlc3MpCit1aW50MzJfdCBIQUxfTkFORF9BZGRyZXNzX0luYyhjb25zdCBOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kLCBOQU5EX0FkZHJlc3NUeXBlRGVmICpwQWRkcmVzcykKIHsKICAgdWludDMyX3Qgc3RhdHVzID0gTkFORF9WQUxJRF9BRERSRVNTOwogCkBAIC0xOTc1LDcgKzE5NzUsNyBAQAogI2lmIChVU0VfSEFMX05BTkRfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCiAvKioKICAgKiBAYnJpZWYgIFJlZ2lzdGVyIGEgVXNlciBOQU5EIENhbGxiYWNrCi0gICogICAgICAgICBUbyBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIHdlYWsgKHN1cmNoYXJnZWQpIHByZWRlZmluZWQgY2FsbGJhY2sKKyAgKiAgICAgICAgIFRvIGJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIHdlYWsgcHJlZGVmaW5lZCBjYWxsYmFjawogICAqIEBwYXJhbSBobmFuZCA6IE5BTkQgaGFuZGxlCiAgICogQHBhcmFtIENhbGxiYWNrSWQgOiBJRCBvZiB0aGUgY2FsbGJhY2sgdG8gYmUgcmVnaXN0ZXJlZAogICAqICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgpAQCAtMTk5NSw5ICsxOTk1LDYgQEAKICAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CiAKLSAgLyogUHJvY2VzcyBsb2NrZWQgKi8KLSAgX19IQUxfTE9DSyhobmFuZCk7Ci0KICAgaWYgKGhuYW5kLT5TdGF0ZSA9PSBIQUxfTkFORF9TVEFURV9SRUFEWSkKICAgewogICAgIHN3aXRjaCAoQ2FsbGJhY2tJZCkKQEAgLTIwMzksMTQgKzIwMzYsMTEgQEAKICAgICBzdGF0dXMgPSAgSEFMX0VSUk9SOwogICB9CiAKLSAgLyogUmVsZWFzZSBMb2NrICovCi0gIF9fSEFMX1VOTE9DSyhobmFuZCk7Ci0gIHJldHVybiBzdGF0dXM7CiB9CiAKIC8qKgogICAqIEBicmllZiAgVW5yZWdpc3RlciBhIFVzZXIgTkFORCBDYWxsYmFjawotICAqICAgICAgICAgTkFORCBDYWxsYmFjayBpcyByZWRpcmVjdGVkIHRvIHRoZSB3ZWFrIChzdXJjaGFyZ2VkKSBwcmVkZWZpbmVkIGNhbGxiYWNrCisgICogICAgICAgICBOQU5EIENhbGxiYWNrIGlzIHJlZGlyZWN0ZWQgdG8gdGhlIHdlYWsgcHJlZGVmaW5lZCBjYWxsYmFjawogICAqIEBwYXJhbSBobmFuZCA6IE5BTkQgaGFuZGxlCiAgICogQHBhcmFtIENhbGxiYWNrSWQgOiBJRCBvZiB0aGUgY2FsbGJhY2sgdG8gYmUgdW5yZWdpc3RlcmVkCiAgICogICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CkBAIC0yMDU5LDkgKzIwNTMsNiBAQAogewogICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CiAKLSAgLyogUHJvY2VzcyBsb2NrZWQgKi8KLSAgX19IQUxfTE9DSyhobmFuZCk7Ci0KICAgaWYgKGhuYW5kLT5TdGF0ZSA9PSBIQUxfTkFORF9TVEFURV9SRUFEWSkKICAgewogICAgIHN3aXRjaCAoQ2FsbGJhY2tJZCkKQEAgLTIxMDMsOSArMjA5NCw2IEBACiAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKICAgfQogCi0gIC8qIFJlbGVhc2UgTG9jayAqLwotICBfX0hBTF9VTkxPQ0soaG5hbmQpOwotICByZXR1cm4gc3RhdHVzOwogfQogI2VuZGlmIC8qIFVTRV9IQUxfTkFORF9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KIApAQCAtMjI1NSw3ICsyMjQzLDcgQEAKICAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgTkFORCBtb2R1bGUuCiAgICogQHJldHZhbCBIQUwgc3RhdGUKICAgKi8KLUhBTF9OQU5EX1N0YXRlVHlwZURlZiBIQUxfTkFORF9HZXRTdGF0ZShOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kKQorSEFMX05BTkRfU3RhdGVUeXBlRGVmIEhBTF9OQU5EX0dldFN0YXRlKGNvbnN0IE5BTkRfSGFuZGxlVHlwZURlZiAqaG5hbmQpCiB7CiAgIHJldHVybiBobmFuZC0+U3RhdGU7CiB9CkBAIC0yMjY2LDcgKzIyNTQsNyBAQAogICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBOQU5EIG1vZHVsZS4KICAgKiBAcmV0dmFsIE5BTkQgc3RhdHVzCiAgICovCi11aW50MzJfdCBIQUxfTkFORF9SZWFkX1N0YXR1cyhOQU5EX0hhbmRsZVR5cGVEZWYgKmhuYW5kKQordWludDMyX3QgSEFMX05BTkRfUmVhZF9TdGF0dXMoY29uc3QgTkFORF9IYW5kbGVUeXBlRGVmICpobmFuZCkKIHsKICAgdWludDMyX3QgZGF0YTsKICAgdWludDMyX3QgZGV2aWNlYWRkcmVzczsKQEAgLTIzMjAsMyArMjMwOCw0IEBACiAvKioKICAgKiBAfQogICAqLworCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmMnh4X2hhbF9ub3IuYyBiL1NyYy9zdG0zMmYyeHhfaGFsX25vci5jCmluZGV4IGRmNjBlY2QuLmI4NWNkMGUgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYyeHhfaGFsX25vci5jCisrKyBiL1NyYy9zdG0zMmYyeHhfaGFsX25vci5jCkBAIC02NiwyNSArNjYsMjUgQEAKICAgICAgIFRoZSBjb21waWxhdGlvbiBkZWZpbmUgIFVTRV9IQUxfTk9SX1JFR0lTVEVSX0NBTExCQUNLUyB3aGVuIHNldCB0byAxCiAgICAgICBhbGxvd3MgdGhlIHVzZXIgdG8gY29uZmlndXJlIGR5bmFtaWNhbGx5IHRoZSBkcml2ZXIgY2FsbGJhY2tzLgogCi0gICAgICBVc2UgRnVuY3Rpb25zIEByZWYgSEFMX05PUl9SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVnaXN0ZXIgYSB1c2VyIGNhbGxiYWNrLAorICAgICAgVXNlIEZ1bmN0aW9ucyBIQUxfTk9SX1JlZ2lzdGVyQ2FsbGJhY2soKSB0byByZWdpc3RlciBhIHVzZXIgY2FsbGJhY2ssCiAgICAgICBpdCBhbGxvd3MgdG8gcmVnaXN0ZXIgZm9sbG93aW5nIGNhbGxiYWNrczoKICAgICAgICAgKCspIE1zcEluaXRDYWxsYmFjayAgICA6IE5PUiBNc3BJbml0LgogICAgICAgICAoKykgTXNwRGVJbml0Q2FsbGJhY2sgIDogTk9SIE1zcERlSW5pdC4KICAgICAgIFRoaXMgZnVuY3Rpb24gdGFrZXMgYXMgcGFyYW1ldGVycyB0aGUgSEFMIHBlcmlwaGVyYWwgaGFuZGxlLCB0aGUgQ2FsbGJhY2sgSUQKICAgICAgIGFuZCBhIHBvaW50ZXIgdG8gdGhlIHVzZXIgY2FsbGJhY2sgZnVuY3Rpb24uCiAKLSAgICAgIFVzZSBmdW5jdGlvbiBAcmVmIEhBTF9OT1JfVW5SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVzZXQgYSBjYWxsYmFjayB0byB0aGUgZGVmYXVsdAotICAgICAgd2VhayAoc3VyY2hhcmdlZCkgZnVuY3Rpb24uIEl0IGFsbG93cyB0byByZXNldCBmb2xsb3dpbmcgY2FsbGJhY2tzOgorICAgICAgVXNlIGZ1bmN0aW9uIEhBTF9OT1JfVW5SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVzZXQgYSBjYWxsYmFjayB0byB0aGUgZGVmYXVsdAorICAgICAgd2VhayAob3ZlcnJpZGRlbikgZnVuY3Rpb24uIEl0IGFsbG93cyB0byByZXNldCBmb2xsb3dpbmcgY2FsbGJhY2tzOgogICAgICAgICAoKykgTXNwSW5pdENhbGxiYWNrICAgIDogTk9SIE1zcEluaXQuCiAgICAgICAgICgrKSBNc3BEZUluaXRDYWxsYmFjayAgOiBOT1IgTXNwRGVJbml0LgogICAgICAgVGhpcyBmdW5jdGlvbikgdGFrZXMgYXMgcGFyYW1ldGVycyB0aGUgSEFMIHBlcmlwaGVyYWwgaGFuZGxlIGFuZCB0aGUgQ2FsbGJhY2sgSUQuCiAKLSAgICAgIEJ5IGRlZmF1bHQsIGFmdGVyIHRoZSBAcmVmIEhBTF9OT1JfSW5pdCBhbmQgaWYgdGhlIHN0YXRlIGlzIEhBTF9OT1JfU1RBVEVfUkVTRVQKLSAgICAgIGFsbCBjYWxsYmFja3MgYXJlIHJlc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIGxlZ2FjeSB3ZWFrIChzdXJjaGFyZ2VkKSBmdW5jdGlvbnMuCisgICAgICBCeSBkZWZhdWx0LCBhZnRlciB0aGUgSEFMX05PUl9Jbml0IGFuZCBpZiB0aGUgc3RhdGUgaXMgSEFMX05PUl9TVEFURV9SRVNFVAorICAgICAgYWxsIGNhbGxiYWNrcyBhcmUgcmVzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgbGVnYWN5IHdlYWsgKG92ZXJyaWRkZW4pIGZ1bmN0aW9ucy4KICAgICAgIEV4Y2VwdGlvbiBkb25lIGZvciBNc3BJbml0IGFuZCBNc3BEZUluaXQgY2FsbGJhY2tzIHRoYXQgYXJlIHJlc3BlY3RpdmVseQotICAgICAgcmVzZXQgdG8gdGhlIGxlZ2FjeSB3ZWFrIChzdXJjaGFyZ2VkKSBmdW5jdGlvbnMgaW4gdGhlIEByZWYgSEFMX05PUl9Jbml0Ci0gICAgICBhbmQgQHJlZiAgSEFMX05PUl9EZUluaXQgb25seSB3aGVuIHRoZXNlIGNhbGxiYWNrcyBhcmUgbnVsbCAobm90IHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCkuCi0gICAgICBJZiBub3QsIE1zcEluaXQgb3IgTXNwRGVJbml0IGFyZSBub3QgbnVsbCwgdGhlIEByZWYgSEFMX05PUl9Jbml0IGFuZCBAcmVmIEhBTF9OT1JfRGVJbml0CisgICAgICByZXNldCB0byB0aGUgbGVnYWN5IHdlYWsgKG92ZXJyaWRkZW4pIGZ1bmN0aW9ucyBpbiB0aGUgSEFMX05PUl9Jbml0CisgICAgICBhbmQgIEhBTF9OT1JfRGVJbml0IG9ubHkgd2hlbiB0aGVzZSBjYWxsYmFja3MgYXJlIG51bGwgKG5vdCByZWdpc3RlcmVkIGJlZm9yZWhhbmQpLgorICAgICAgSWYgbm90LCBNc3BJbml0IG9yIE1zcERlSW5pdCBhcmUgbm90IG51bGwsIHRoZSBIQUxfTk9SX0luaXQgYW5kIEhBTF9OT1JfRGVJbml0CiAgICAgICBrZWVwIGFuZCB1c2UgdGhlIHVzZXIgTXNwSW5pdC9Nc3BEZUluaXQgY2FsbGJhY2tzIChyZWdpc3RlcmVkIGJlZm9yZWhhbmQpCiAKICAgICAgIENhbGxiYWNrcyBjYW4gYmUgcmVnaXN0ZXJlZC91bnJlZ2lzdGVyZWQgaW4gUkVBRFkgc3RhdGUgb25seS4KQEAgLTkyLDEyICs5MiwxMiBAQAogICAgICAgaW4gUkVBRFkgb3IgUkVTRVQgc3RhdGUsIHRodXMgcmVnaXN0ZXJlZCAodXNlcikgTXNwSW5pdC9EZUluaXQgY2FsbGJhY2tzIGNhbiBiZSB1c2VkCiAgICAgICBkdXJpbmcgdGhlIEluaXQvRGVJbml0LgogICAgICAgSW4gdGhhdCBjYXNlIGZpcnN0IHJlZ2lzdGVyIHRoZSBNc3BJbml0L01zcERlSW5pdCB1c2VyIGNhbGxiYWNrcwotICAgICAgdXNpbmcgQHJlZiBIQUxfTk9SX1JlZ2lzdGVyQ2FsbGJhY2sgYmVmb3JlIGNhbGxpbmcgQHJlZiBIQUxfTk9SX0RlSW5pdAotICAgICAgb3IgQHJlZiBIQUxfTk9SX0luaXQgZnVuY3Rpb24uCisgICAgICB1c2luZyBIQUxfTk9SX1JlZ2lzdGVyQ2FsbGJhY2sgYmVmb3JlIGNhbGxpbmcgSEFMX05PUl9EZUluaXQKKyAgICAgIG9yIEhBTF9OT1JfSW5pdCBmdW5jdGlvbi4KIAogICAgICAgV2hlbiBUaGUgY29tcGlsYXRpb24gZGVmaW5lIFVTRV9IQUxfTk9SX1JFR0lTVEVSX0NBTExCQUNLUyBpcyBzZXQgdG8gMCBvcgogICAgICAgbm90IGRlZmluZWQsIHRoZSBjYWxsYmFjayByZWdpc3RlcmluZyBmZWF0dXJlIGlzIG5vdCBhdmFpbGFibGUKLSAgICAgIGFuZCB3ZWFrIChzdXJjaGFyZ2VkKSBjYWxsYmFja3MgYXJlIHVzZWQuCisgICAgICBhbmQgd2VhayAob3ZlcnJpZGRlbikgY2FsbGJhY2tzIGFyZSB1c2VkLgogCiAgIEBlbmR2ZXJiYXRpbQogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTEyNiw2ICsxMjYsMTEgQEAKICAgKi8KIAogLyogQ29uc3RhbnRzIHRvIGRlZmluZSBhZGRyZXNzIHRvIHNldCB0byB3cml0ZSBhIGNvbW1hbmQgKi8KKyNkZWZpbmUgTk9SX0NNRF9BRERSRVNTX0ZJUlNUX0JZVEUgICAgICAgICAgICAodWludDE2X3QpMHgwQUFBCisjZGVmaW5lIE5PUl9DTURfQUREUkVTU19GSVJTVF9DRklfQllURSAgICAgICAgKHVpbnQxNl90KTB4MDBBQQorI2RlZmluZSBOT1JfQ01EX0FERFJFU1NfU0VDT05EX0JZVEUgICAgICAgICAgICh1aW50MTZfdCkweDA1NTUKKyNkZWZpbmUgTk9SX0NNRF9BRERSRVNTX1RISVJEX0JZVEUgICAgICAgICAgICAodWludDE2X3QpMHgwQUFBCisKICNkZWZpbmUgTk9SX0NNRF9BRERSRVNTX0ZJUlNUICAgICAgICAgICAgICAgICAodWludDE2X3QpMHgwNTU1CiAjZGVmaW5lIE5PUl9DTURfQUREUkVTU19GSVJTVF9DRkkgICAgICAgICAgICAgKHVpbnQxNl90KTB4MDA1NQogI2RlZmluZSBOT1JfQ01EX0FERFJFU1NfU0VDT05EICAgICAgICAgICAgICAgICh1aW50MTZfdCkweDAyQUEKQEAgLTI2Myw3ICsyNjgsOCBAQAogICAodm9pZClGU01DX05PUlNSQU1fVGltaW5nX0luaXQoaG5vci0+SW5zdGFuY2UsIFRpbWluZywgaG5vci0+SW5pdC5OU0JhbmspOwogCiAgIC8qIEluaXRpYWxpemUgTk9SIGV4dGVuZGVkIG1vZGUgdGltaW5nIEludGVyZmFjZSAqLwotICAodm9pZClGU01DX05PUlNSQU1fRXh0ZW5kZWRfVGltaW5nX0luaXQoaG5vci0+RXh0ZW5kZWQsIEV4dFRpbWluZywgaG5vci0+SW5pdC5OU0JhbmssIGhub3ItPkluaXQuRXh0ZW5kZWRNb2RlKTsKKyAgKHZvaWQpRlNNQ19OT1JTUkFNX0V4dGVuZGVkX1RpbWluZ19Jbml0KGhub3ItPkV4dGVuZGVkLCBFeHRUaW1pbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBobm9yLT5Jbml0Lk5TQmFuaywgaG5vci0+SW5pdC5FeHRlbmRlZE1vZGUpOwogCiAgIC8qIEVuYWJsZSB0aGUgTk9SU1JBTSBkZXZpY2UgKi8KICAgX19GU01DX05PUlNSQU1fRU5BQkxFKGhub3ItPkluc3RhbmNlLCBobm9yLT5Jbml0Lk5TQmFuayk7CkBAIC0yOTksMjEgKzMwNSwzMCBAQAogICAgIGRldmljZWFkZHJlc3MgPSBOT1JfTUVNT1JZX0FEUkVTUzQ7CiAgIH0KIAotICBGU01DX05PUlNSQU1fV3JpdGVPcGVyYXRpb25fRW5hYmxlKGhub3ItPkluc3RhbmNlLGhub3ItPkluaXQuTlNCYW5rKTsKLSAgCi0gIC8qIEdldCB0aGUgdmFsdWUgb2YgdGhlIGNvbW1hbmQgc2V0ICovCi0gIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX0ZJUlNUX0NGSSksIE5PUl9DTURfREFUQV9DRkkpOwotICBobm9yLT5Db21tYW5kU2V0ID0gKihfX0lPIHVpbnQxNl90ICopIE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQUREUkVTU19DT01NQU5EX1NFVCk7Ci0gIAotICBzdGF0dXMgPSBIQUxfTk9SX1JldHVyblRvUmVhZE1vZGUoaG5vcik7Ci0KICAgaWYgKGhub3ItPkluaXQuV3JpdGVPcGVyYXRpb24gPT0gRlNNQ19XUklURV9PUEVSQVRJT05fRElTQUJMRSkKICAgewotICAgIEZTTUNfTk9SU1JBTV9Xcml0ZU9wZXJhdGlvbl9EaXNhYmxlKGhub3ItPkluc3RhbmNlLGhub3ItPkluaXQuTlNCYW5rKTsKKyAgICAodm9pZClGU01DX05PUlNSQU1fV3JpdGVPcGVyYXRpb25fRGlzYWJsZShobm9yLT5JbnN0YW5jZSwgaG5vci0+SW5pdC5OU0JhbmspOwogCiAgICAgLyogVXBkYXRlIHRoZSBOT1IgY29udHJvbGxlciBzdGF0ZSAqLwogICAgIGhub3ItPlN0YXRlID0gSEFMX05PUl9TVEFURV9QUk9URUNURUQ7CiAgIH0KKyAgZWxzZQorICB7CisgICAgLyogR2V0IHRoZSB2YWx1ZSBvZiB0aGUgY29tbWFuZCBzZXQgKi8KKyAgICBpZiAodXdOT1JNZW1vcnlEYXRhV2lkdGggPT0gTk9SX01FTU9SWV84QikKKyAgICB7CisgICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GSVJTVF9DRklfQllURSksCisgICAgICAgICAgICAgICAgTk9SX0NNRF9EQVRBX0NGSSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GSVJTVF9DRkkpLCBOT1JfQ01EX0RBVEFfQ0ZJKTsKKyAgICB9CisKKyAgICBobm9yLT5Db21tYW5kU2V0ID0gKihfX0lPIHVpbnQxNl90ICopIE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQUREUkVTU19DT01NQU5EX1NFVCk7CisKKyAgICBzdGF0dXMgPSBIQUxfTk9SX1JldHVyblRvUmVhZE1vZGUoaG5vcik7CisgIH0KIAogICByZXR1cm4gc3RhdHVzOwogfQpAQCAtNDM4LDcgKzQ1MywxMSBAQAogICB7CiAgICAgcmV0dXJuIEhBTF9CVVNZOwogICB9Ci0gIGVsc2UgaWYgKChzdGF0ZSA9PSBIQUxfTk9SX1NUQVRFX1JFQURZKSB8fCAoc3RhdGUgPT0gSEFMX05PUl9TVEFURV9QUk9URUNURUQpKQorICBlbHNlIGlmIChzdGF0ZSA9PSBIQUxfTk9SX1NUQVRFX1BST1RFQ1RFRCkKKyAgeworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKyAgZWxzZSBpZiAoc3RhdGUgPT0gSEFMX05PUl9TVEFURV9SRUFEWSkKICAgewogICAgIC8qIFByb2Nlc3MgTG9ja2VkICovCiAgICAgX19IQUxfTE9DSyhobm9yKTsKQEAgLTQ2Nyw5ICs0ODYsMjIgQEAKICAgICAvKiBTZW5kIHJlYWQgSUQgY29tbWFuZCAqLwogICAgIGlmIChobm9yLT5Db21tYW5kU2V0ID09IE5PUl9BTURfRlVKSVRTVV9DT01NQU5EX1NFVCkKICAgICB7Ci0gICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GSVJTVCksIE5PUl9DTURfREFUQV9GSVJTVCk7Ci0gICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19TRUNPTkQpLCBOT1JfQ01EX0RBVEFfU0VDT05EKTsKLSAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1RISVJEKSwgTk9SX0NNRF9EQVRBX0FVVE9fU0VMRUNUKTsKKyAgICAgIGlmICh1d05PUk1lbW9yeURhdGFXaWR0aCA9PSBOT1JfTUVNT1JZXzhCKQorICAgICAgeworICAgICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GSVJTVF9CWVRFKSwKKyAgICAgICAgICAgICAgICAgIE5PUl9DTURfREFUQV9GSVJTVCk7CisgICAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1NFQ09ORF9CWVRFKSwKKyAgICAgICAgICAgICAgICAgIE5PUl9DTURfREFUQV9TRUNPTkQpOworICAgICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19USElSRF9CWVRFKSwKKyAgICAgICAgICAgICAgICAgIE5PUl9DTURfREFUQV9BVVRPX1NFTEVDVCk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX0ZJUlNUKSwgTk9SX0NNRF9EQVRBX0ZJUlNUKTsKKyAgICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfU0VDT05EKSwgTk9SX0NNRF9EQVRBX1NFQ09ORCk7CisgICAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1RISVJEKSwKKyAgICAgICAgICAgICAgICAgIE5PUl9DTURfREFUQV9BVVRPX1NFTEVDVCk7CisgICAgICB9CiAgICAgfQogICAgIGVsc2UgaWYgKGhub3ItPkNvbW1hbmRTZXQgPT0gTk9SX0lOVEVMX1NIQVJQX0VYVF9DT01NQU5EX1NFVCkKICAgICB7CkBAIC01MjUsNyArNTU3LDExIEBACiAgIHsKICAgICByZXR1cm4gSEFMX0JVU1k7CiAgIH0KLSAgZWxzZSBpZiAoKHN0YXRlID09IEhBTF9OT1JfU1RBVEVfUkVBRFkpIHx8IChzdGF0ZSA9PSBIQUxfTk9SX1NUQVRFX1BST1RFQ1RFRCkpCisgIGVsc2UgaWYgKHN0YXRlID09IEhBTF9OT1JfU1RBVEVfUFJPVEVDVEVEKQorICB7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorICBlbHNlIGlmIChzdGF0ZSA9PSBIQUxfTk9SX1NUQVRFX1JFQURZKQogICB7CiAgICAgLyogUHJvY2VzcyBMb2NrZWQgKi8KICAgICBfX0hBTF9MT0NLKGhub3IpOwpAQCAtNTk5LDcgKzYzNSwxMSBAQAogICB7CiAgICAgcmV0dXJuIEhBTF9CVVNZOwogICB9Ci0gIGVsc2UgaWYgKChzdGF0ZSA9PSBIQUxfTk9SX1NUQVRFX1JFQURZKSB8fCAoc3RhdGUgPT0gSEFMX05PUl9TVEFURV9QUk9URUNURUQpKQorICBlbHNlIGlmIChzdGF0ZSA9PSBIQUxfTk9SX1NUQVRFX1BST1RFQ1RFRCkKKyAgeworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKyAgZWxzZSBpZiAoc3RhdGUgPT0gSEFMX05PUl9TVEFURV9SRUFEWSkKICAgewogICAgIC8qIFByb2Nlc3MgTG9ja2VkICovCiAgICAgX19IQUxfTE9DSyhobm9yKTsKQEAgLTYyOCw5ICs2NjgsMjIgQEAKICAgICAvKiBTZW5kIHJlYWQgZGF0YSBjb21tYW5kICovCiAgICAgaWYgKGhub3ItPkNvbW1hbmRTZXQgPT0gTk9SX0FNRF9GVUpJVFNVX0NPTU1BTkRfU0VUKQogICAgIHsKLSAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX0ZJUlNUKSwgTk9SX0NNRF9EQVRBX0ZJUlNUKTsKLSAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1NFQ09ORCksIE5PUl9DTURfREFUQV9TRUNPTkQpOwotICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfVEhJUkQpLCBOT1JfQ01EX0RBVEFfUkVBRF9SRVNFVCk7CisgICAgICBpZiAodXdOT1JNZW1vcnlEYXRhV2lkdGggPT0gTk9SX01FTU9SWV84QikKKyAgICAgIHsKKyAgICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfRklSU1RfQllURSksCisgICAgICAgICAgICAgICAgICBOT1JfQ01EX0RBVEFfRklSU1QpOworICAgICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19TRUNPTkRfQllURSksCisgICAgICAgICAgICAgICAgICBOT1JfQ01EX0RBVEFfU0VDT05EKTsKKyAgICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfVEhJUkRfQllURSksCisgICAgICAgICAgICAgICAgICBOT1JfQ01EX0RBVEFfUkVBRF9SRVNFVCk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX0ZJUlNUKSwgTk9SX0NNRF9EQVRBX0ZJUlNUKTsKKyAgICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfU0VDT05EKSwgTk9SX0NNRF9EQVRBX1NFQ09ORCk7CisgICAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1RISVJEKSwKKyAgICAgICAgICAgICAgICAgIE5PUl9DTURfREFUQV9SRUFEX1JFU0VUKTsKKyAgICAgIH0KICAgICB9CiAgICAgZWxzZSBpZiAoaG5vci0+Q29tbWFuZFNldCA9PSBOT1JfSU5URUxfU0hBUlBfRVhUX0NPTU1BTkRfU0VUKQogICAgIHsKQEAgLTcwOSw5ICs3NjIsMjEgQEAKICAgICAvKiBTZW5kIHByb2dyYW0gZGF0YSBjb21tYW5kICovCiAgICAgaWYgKGhub3ItPkNvbW1hbmRTZXQgPT0gTk9SX0FNRF9GVUpJVFNVX0NPTU1BTkRfU0VUKQogICAgIHsKLSAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX0ZJUlNUKSwgTk9SX0NNRF9EQVRBX0ZJUlNUKTsKLSAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1NFQ09ORCksIE5PUl9DTURfREFUQV9TRUNPTkQpOwotICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfVEhJUkQpLCBOT1JfQ01EX0RBVEFfUFJPR1JBTSk7CisgICAgICBpZiAodXdOT1JNZW1vcnlEYXRhV2lkdGggPT0gTk9SX01FTU9SWV84QikKKyAgICAgIHsKKyAgICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfRklSU1RfQllURSksCisgICAgICAgICAgICAgICAgICBOT1JfQ01EX0RBVEFfRklSU1QpOworICAgICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19TRUNPTkRfQllURSksCisgICAgICAgICAgICAgICAgICBOT1JfQ01EX0RBVEFfU0VDT05EKTsKKyAgICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfVEhJUkRfQllURSksCisgICAgICAgICAgICAgICAgICBOT1JfQ01EX0RBVEFfUFJPR1JBTSk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX0ZJUlNUKSwgTk9SX0NNRF9EQVRBX0ZJUlNUKTsKKyAgICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfU0VDT05EKSwgTk9SX0NNRF9EQVRBX1NFQ09ORCk7CisgICAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1RISVJEKSwgTk9SX0NNRF9EQVRBX1BST0dSQU0pOworICAgICAgfQogICAgIH0KICAgICBlbHNlIGlmIChobm9yLT5Db21tYW5kU2V0ID09IE5PUl9JTlRFTF9TSEFSUF9FWFRfQ09NTUFORF9TRVQpCiAgICAgewpAQCAtNzY4LDcgKzgzMywxMSBAQAogICB7CiAgICAgcmV0dXJuIEhBTF9CVVNZOwogICB9Ci0gIGVsc2UgaWYgKChzdGF0ZSA9PSBIQUxfTk9SX1NUQVRFX1JFQURZKSB8fCAoc3RhdGUgPT0gSEFMX05PUl9TVEFURV9QUk9URUNURUQpKQorICBlbHNlIGlmIChzdGF0ZSA9PSBIQUxfTk9SX1NUQVRFX1BST1RFQ1RFRCkKKyAgeworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKyAgZWxzZSBpZiAoc3RhdGUgPT0gSEFMX05PUl9TVEFURV9SRUFEWSkKICAgewogICAgIC8qIFByb2Nlc3MgTG9ja2VkICovCiAgICAgX19IQUxfTE9DSyhobm9yKTsKQEAgLTc5Nyw5ICs4NjYsMjIgQEAKICAgICAvKiBTZW5kIHJlYWQgZGF0YSBjb21tYW5kICovCiAgICAgaWYgKGhub3ItPkNvbW1hbmRTZXQgPT0gTk9SX0FNRF9GVUpJVFNVX0NPTU1BTkRfU0VUKQogICAgIHsKLSAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX0ZJUlNUKSwgTk9SX0NNRF9EQVRBX0ZJUlNUKTsKLSAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1NFQ09ORCksIE5PUl9DTURfREFUQV9TRUNPTkQpOwotICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfVEhJUkQpLCBOT1JfQ01EX0RBVEFfUkVBRF9SRVNFVCk7CisgICAgICBpZiAodXdOT1JNZW1vcnlEYXRhV2lkdGggPT0gTk9SX01FTU9SWV84QikKKyAgICAgIHsKKyAgICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfRklSU1RfQllURSksCisgICAgICAgICAgICAgICAgICBOT1JfQ01EX0RBVEFfRklSU1QpOworICAgICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19TRUNPTkRfQllURSksCisgICAgICAgICAgICAgICAgICBOT1JfQ01EX0RBVEFfU0VDT05EKTsKKyAgICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfVEhJUkRfQllURSksCisgICAgICAgICAgICAgICAgICBOT1JfQ01EX0RBVEFfUkVBRF9SRVNFVCk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX0ZJUlNUKSwgTk9SX0NNRF9EQVRBX0ZJUlNUKTsKKyAgICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfU0VDT05EKSwgTk9SX0NNRF9EQVRBX1NFQ09ORCk7CisgICAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1RISVJEKSwKKyAgICAgICAgICAgICAgICAgIE5PUl9DTURfREFUQV9SRUFEX1JFU0VUKTsKKyAgICAgIH0KICAgICB9CiAgICAgZWxzZSBpZiAoaG5vci0+Q29tbWFuZFNldCA9PSBOT1JfSU5URUxfU0hBUlBfRVhUX0NPTU1BTkRfU0VUKQogICAgIHsKQEAgLTg5MiwxMCArOTc0LDIwIEBACiAKICAgICBpZiAoaG5vci0+Q29tbWFuZFNldCA9PSBOT1JfQU1EX0ZVSklUU1VfQ09NTUFORF9TRVQpCiAgICAgewotICAgICAgLyogSXNzdWUgdW5sb2NrIGNvbW1hbmQgc2VxdWVuY2UgKi8KLSAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX0ZJUlNUKSwgTk9SX0NNRF9EQVRBX0ZJUlNUKTsKLSAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1NFQ09ORCksIE5PUl9DTURfREFUQV9TRUNPTkQpOwotCisgICAgICBpZiAodXdOT1JNZW1vcnlEYXRhV2lkdGggPT0gTk9SX01FTU9SWV84QikKKyAgICAgIHsKKyAgICAgICAgLyogSXNzdWUgdW5sb2NrIGNvbW1hbmQgc2VxdWVuY2UgKi8KKyAgICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfRklSU1RfQllURSksCisgICAgICAgICAgICAgICAgICBOT1JfQ01EX0RBVEFfRklSU1QpOworICAgICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19TRUNPTkRfQllURSksCisgICAgICAgICAgICAgICAgICBOT1JfQ01EX0RBVEFfU0VDT05EKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgLyogSXNzdWUgdW5sb2NrIGNvbW1hbmQgc2VxdWVuY2UgKi8KKyAgICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfRklSU1QpLCBOT1JfQ01EX0RBVEFfRklSU1QpOworICAgICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19TRUNPTkQpLCBOT1JfQ01EX0RBVEFfU0VDT05EKTsKKyAgICAgIH0KICAgICAgIC8qIFdyaXRlIEJ1ZmZlciBMb2FkIENvbW1hbmQgKi8KICAgICAgIE5PUl9XUklURSgoZGV2aWNlYWRkcmVzcyArIHV3QWRkcmVzcyksIE5PUl9DTURfREFUQV9CVUZGRVJfQU5EX1BST0cpOwogICAgICAgTk9SX1dSSVRFKChkZXZpY2VhZGRyZXNzICsgdXdBZGRyZXNzKSwgKHVpbnQxNl90KSh1d0J1ZmZlclNpemUgLSAxVSkpOwpAQCAtOTk1LDE0ICsxMDg3LDI2IEBACiAgICAgLyogU2VuZCBibG9jayBlcmFzZSBjb21tYW5kIHNlcXVlbmNlICovCiAgICAgaWYgKGhub3ItPkNvbW1hbmRTZXQgPT0gTk9SX0FNRF9GVUpJVFNVX0NPTU1BTkRfU0VUKQogICAgIHsKLSAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX0ZJUlNUKSwgTk9SX0NNRF9EQVRBX0ZJUlNUKTsKLSAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1NFQ09ORCksIE5PUl9DTURfREFUQV9TRUNPTkQpOwotICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfVEhJUkQpLAotICAgICAgICAgICAgICAgIE5PUl9DTURfREFUQV9DSElQX0JMT0NLX0VSQVNFX1RISVJEKTsKLSAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX0ZPVVJUSCksCi0gICAgICAgICAgICAgICAgTk9SX0NNRF9EQVRBX0NISVBfQkxPQ0tfRVJBU0VfRk9VUlRIKTsKLSAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX0ZJRlRIKSwKLSAgICAgICAgICAgICAgICBOT1JfQ01EX0RBVEFfQ0hJUF9CTE9DS19FUkFTRV9GSUZUSCk7CisgICAgICBpZiAodXdOT1JNZW1vcnlEYXRhV2lkdGggPT0gTk9SX01FTU9SWV84QikKKyAgICAgIHsKKyAgICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfRklSU1RfQllURSksCisgICAgICAgICAgICAgICAgICBOT1JfQ01EX0RBVEFfRklSU1QpOworICAgICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19TRUNPTkRfQllURSksCisgICAgICAgICAgICAgICAgICBOT1JfQ01EX0RBVEFfU0VDT05EKTsKKyAgICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfVEhJUkRfQllURSksCisgICAgICAgICAgICAgICAgICBOT1JfQ01EX0RBVEFfQ0hJUF9CTE9DS19FUkFTRV9USElSRCk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX0ZJUlNUKSwgTk9SX0NNRF9EQVRBX0ZJUlNUKTsKKyAgICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfU0VDT05EKSwgTk9SX0NNRF9EQVRBX1NFQ09ORCk7CisgICAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1RISVJEKSwKKyAgICAgICAgICAgICAgICAgIE5PUl9DTURfREFUQV9DSElQX0JMT0NLX0VSQVNFX1RISVJEKTsKKyAgICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfRk9VUlRIKSwKKyAgICAgICAgICAgICAgICAgIE5PUl9DTURfREFUQV9DSElQX0JMT0NLX0VSQVNFX0ZPVVJUSCk7CisgICAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX0ZJRlRIKSwKKyAgICAgICAgICAgICAgICAgIE5PUl9DTURfREFUQV9DSElQX0JMT0NLX0VSQVNFX0ZJRlRIKTsKKyAgICAgIH0KICAgICAgIE5PUl9XUklURSgodWludDMyX3QpKEJsb2NrQWRkcmVzcyArIEFkZHJlc3MpLCBOT1JfQ01EX0RBVEFfQkxPQ0tfRVJBU0UpOwogICAgIH0KICAgICBlbHNlIGlmIChobm9yLT5Db21tYW5kU2V0ID09IE5PUl9JTlRFTF9TSEFSUF9FWFRfQ09NTUFORF9TRVQpCkBAIC0xMDgwLDE1ICsxMTg0LDI4IEBACiAgICAgLyogU2VuZCBOT1IgY2hpcCBlcmFzZSBjb21tYW5kIHNlcXVlbmNlICovCiAgICAgaWYgKGhub3ItPkNvbW1hbmRTZXQgPT0gTk9SX0FNRF9GVUpJVFNVX0NPTU1BTkRfU0VUKQogICAgIHsKLSAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX0ZJUlNUKSwgTk9SX0NNRF9EQVRBX0ZJUlNUKTsKLSAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1NFQ09ORCksIE5PUl9DTURfREFUQV9TRUNPTkQpOwotICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfVEhJUkQpLAotICAgICAgICAgICAgICAgIE5PUl9DTURfREFUQV9DSElQX0JMT0NLX0VSQVNFX1RISVJEKTsKLSAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX0ZPVVJUSCksCi0gICAgICAgICAgICAgICAgTk9SX0NNRF9EQVRBX0NISVBfQkxPQ0tfRVJBU0VfRk9VUlRIKTsKLSAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX0ZJRlRIKSwKLSAgICAgICAgICAgICAgICBOT1JfQ01EX0RBVEFfQ0hJUF9CTE9DS19FUkFTRV9GSUZUSCk7Ci0gICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19TSVhUSCksIE5PUl9DTURfREFUQV9DSElQX0VSQVNFKTsKKyAgICAgIGlmICh1d05PUk1lbW9yeURhdGFXaWR0aCA9PSBOT1JfTUVNT1JZXzhCKQorICAgICAgeworICAgICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GSVJTVF9CWVRFKSwKKyAgICAgICAgICAgICAgICAgIE5PUl9DTURfREFUQV9GSVJTVCk7CisgICAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX1NFQ09ORF9CWVRFKSwKKyAgICAgICAgICAgICAgICAgIE5PUl9DTURfREFUQV9TRUNPTkQpOworICAgICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19USElSRF9CWVRFKSwKKyAgICAgICAgICAgICAgICAgIE5PUl9DTURfREFUQV9DSElQX0JMT0NLX0VSQVNFX1RISVJEKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfRklSU1QpLCBOT1JfQ01EX0RBVEFfRklSU1QpOworICAgICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19TRUNPTkQpLCBOT1JfQ01EX0RBVEFfU0VDT05EKTsKKyAgICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfVEhJUkQpLAorICAgICAgICAgICAgICAgICAgTk9SX0NNRF9EQVRBX0NISVBfQkxPQ0tfRVJBU0VfVEhJUkQpOworICAgICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GT1VSVEgpLAorICAgICAgICAgICAgICAgICAgTk9SX0NNRF9EQVRBX0NISVBfQkxPQ0tfRVJBU0VfRk9VUlRIKTsKKyAgICAgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfRklGVEgpLAorICAgICAgICAgICAgICAgICAgTk9SX0NNRF9EQVRBX0NISVBfQkxPQ0tfRVJBU0VfRklGVEgpOworICAgICAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19TSVhUSCksCisgICAgICAgICAgICAgICAgICBOT1JfQ01EX0RBVEFfQ0hJUF9FUkFTRSk7CisgICAgICB9CiAgICAgfQogICAgIGVsc2UKICAgICB7CkBAIC0xMTI4LDcgKzEyNDUsMTEgQEAKICAgewogICAgIHJldHVybiBIQUxfQlVTWTsKICAgfQotICBlbHNlIGlmICgoc3RhdGUgPT0gSEFMX05PUl9TVEFURV9SRUFEWSkgfHwgKHN0YXRlID09IEhBTF9OT1JfU1RBVEVfUFJPVEVDVEVEKSkKKyAgZWxzZSBpZiAoc3RhdGUgPT0gSEFMX05PUl9TVEFURV9QUk9URUNURUQpCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisgIGVsc2UgaWYgKHN0YXRlID09IEhBTF9OT1JfU1RBVEVfUkVBRFkpCiAgIHsKICAgICAvKiBQcm9jZXNzIExvY2tlZCAqLwogICAgIF9fSEFMX0xPQ0soaG5vcik7CkBAIC0xMTU1LDggKzEyNzYsMTUgQEAKICAgICB9CiAKICAgICAvKiBTZW5kIHJlYWQgQ0ZJIHF1ZXJ5IGNvbW1hbmQgKi8KLSAgICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GSVJTVF9DRkkpLCBOT1JfQ01EX0RBVEFfQ0ZJKTsKLQorICAgIGlmICh1d05PUk1lbW9yeURhdGFXaWR0aCA9PSBOT1JfTUVNT1JZXzhCKQorICAgIHsKKyAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX0ZJUlNUX0NGSV9CWVRFKSwKKyAgICAgICAgICAgICAgICBOT1JfQ01EX0RBVEFfQ0ZJKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIE5PUl9XUklURShOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0NNRF9BRERSRVNTX0ZJUlNUX0NGSSksIE5PUl9DTURfREFUQV9DRkkpOworICAgIH0KICAgICAvKiByZWFkIHRoZSBOT1IgQ0ZJIGluZm9ybWF0aW9uICovCiAgICAgcE5PUl9DRkktPkNGSV8xID0gKihfX0lPIHVpbnQxNl90ICopIE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBDRkkxX0FERFJFU1MpOwogICAgIHBOT1JfQ0ZJLT5DRklfMiA9ICooX19JTyB1aW50MTZfdCAqKSBOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgQ0ZJMl9BRERSRVNTKTsKQEAgLTExODAsNyArMTMwOCw3IEBACiAjaWYgKFVTRV9IQUxfTk9SX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQogLyoqCiAgICogQGJyaWVmICBSZWdpc3RlciBhIFVzZXIgTk9SIENhbGxiYWNrCi0gICogICAgICAgICBUbyBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIHdlYWsgKHN1cmNoYXJnZWQpIHByZWRlZmluZWQgY2FsbGJhY2sKKyAgKiAgICAgICAgIFRvIGJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIHdlYWsgcHJlZGVmaW5lZCBjYWxsYmFjawogICAqIEBwYXJhbSBobm9yIDogTk9SIGhhbmRsZQogICAqIEBwYXJhbSBDYWxsYmFja0lkIDogSUQgb2YgdGhlIGNhbGxiYWNrIHRvIGJlIHJlZ2lzdGVyZWQKICAgKiAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKQEAgLTEyMDAsOSArMTMyOCw2IEBACiAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQogCi0gIC8qIFByb2Nlc3MgbG9ja2VkICovCi0gIF9fSEFMX0xPQ0soaG5vcik7Ci0KICAgc3RhdGUgPSBobm9yLT5TdGF0ZTsKICAgaWYgKChzdGF0ZSA9PSBIQUxfTk9SX1NUQVRFX1JFQURZKSB8fCAoc3RhdGUgPT0gSEFMX05PUl9TVEFURV9SRVNFVCkgfHwgKHN0YXRlID09IEhBTF9OT1JfU1RBVEVfUFJPVEVDVEVEKSkKICAgewpAQCAtMTIyNiwxNCArMTM1MSwxMiBAQAogICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7CiAgIH0KIAotICAvKiBSZWxlYXNlIExvY2sgKi8KLSAgX19IQUxfVU5MT0NLKGhub3IpOwogICByZXR1cm4gc3RhdHVzOwogfQogCiAvKioKICAgKiBAYnJpZWYgIFVucmVnaXN0ZXIgYSBVc2VyIE5PUiBDYWxsYmFjawotICAqICAgICAgICAgTk9SIENhbGxiYWNrIGlzIHJlZGlyZWN0ZWQgdG8gdGhlIHdlYWsgKHN1cmNoYXJnZWQpIHByZWRlZmluZWQgY2FsbGJhY2sKKyAgKiAgICAgICAgIE5PUiBDYWxsYmFjayBpcyByZWRpcmVjdGVkIHRvIHRoZSB3ZWFrIHByZWRlZmluZWQgY2FsbGJhY2sKICAgKiBAcGFyYW0gaG5vciA6IE5PUiBoYW5kbGUKICAgKiBAcGFyYW0gQ2FsbGJhY2tJZCA6IElEIG9mIHRoZSBjYWxsYmFjayB0byBiZSB1bnJlZ2lzdGVyZWQKICAgKiAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKQEAgLTEyNDYsOSArMTM2OSw2IEBACiAgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKICAgSEFMX05PUl9TdGF0ZVR5cGVEZWYgc3RhdGU7CiAKLSAgLyogUHJvY2VzcyBsb2NrZWQgKi8KLSAgX19IQUxfTE9DSyhobm9yKTsKLQogICBzdGF0ZSA9IGhub3ItPlN0YXRlOwogICBpZiAoKHN0YXRlID09IEhBTF9OT1JfU1RBVEVfUkVBRFkpIHx8IChzdGF0ZSA9PSBIQUxfTk9SX1NUQVRFX1JFU0VUKSB8fCAoc3RhdGUgPT0gSEFMX05PUl9TVEFURV9QUk9URUNURUQpKQogICB7CkBAIC0xMjcyLDggKzEzOTIsNiBAQAogICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7CiAgIH0KIAotICAvKiBSZWxlYXNlIExvY2sgKi8KLSAgX19IQUxfVU5MT0NLKGhub3IpOwogICByZXR1cm4gc3RhdHVzOwogfQogI2VuZGlmIC8qIChVU0VfSEFMX05PUl9SRUdJU1RFUl9DQUxMQkFDS1MpICovCkBAIC0xMzkwLDcgKzE1MDgsNyBAQAogICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBOT1IgbW9kdWxlLgogICAqIEByZXR2YWwgTk9SIGNvbnRyb2xsZXIgc3RhdGUKICAgKi8KLUhBTF9OT1JfU3RhdGVUeXBlRGVmIEhBTF9OT1JfR2V0U3RhdGUoTk9SX0hhbmRsZVR5cGVEZWYgKmhub3IpCitIQUxfTk9SX1N0YXRlVHlwZURlZiBIQUxfTk9SX0dldFN0YXRlKGNvbnN0IE5PUl9IYW5kbGVUeXBlRGVmICpobm9yKQogewogICByZXR1cm4gaG5vci0+U3RhdGU7CiB9CkBAIC0xNTE4LDMgKzE2MzYsNCBAQAogLyoqCiAgICogQH0KICAgKi8KKwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjJ4eF9oYWxfcGNjYXJkLmMgYi9TcmMvc3RtMzJmMnh4X2hhbF9wY2NhcmQuYwppbmRleCA2ZWUzODI3Li4yMzYxZDdlIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmMnh4X2hhbF9wY2NhcmQuYworKysgYi9TcmMvc3RtMzJmMnh4X2hhbF9wY2NhcmQuYwpAQCAtNjEsMjUgKzYxLDI1IEBACiAgICAgICBUaGUgY29tcGlsYXRpb24gZGVmaW5lICBVU0VfSEFMX1BDQ0FSRF9SRUdJU1RFUl9DQUxMQkFDS1Mgd2hlbiBzZXQgdG8gMQogICAgICAgYWxsb3dzIHRoZSB1c2VyIHRvIGNvbmZpZ3VyZSBkeW5hbWljYWxseSB0aGUgZHJpdmVyIGNhbGxiYWNrcy4KIAotICAgICAgVXNlIEZ1bmN0aW9ucyBAcmVmIEhBTF9QQ0NBUkRfUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlZ2lzdGVyIGEgdXNlciBjYWxsYmFjaywKKyAgICAgIFVzZSBGdW5jdGlvbnMgSEFMX1BDQ0FSRF9SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVnaXN0ZXIgYSB1c2VyIGNhbGxiYWNrLAogICAgICAgaXQgYWxsb3dzIHRvIHJlZ2lzdGVyIGZvbGxvd2luZyBjYWxsYmFja3M6CiAgICAgICAgICgrKSBNc3BJbml0Q2FsbGJhY2sgICAgOiBQQ0NBUkQgTXNwSW5pdC4KICAgICAgICAgKCspIE1zcERlSW5pdENhbGxiYWNrICA6IFBDQ0FSRCBNc3BEZUluaXQuCiAgICAgICBUaGlzIGZ1bmN0aW9uIHRha2VzIGFzIHBhcmFtZXRlcnMgdGhlIEhBTCBwZXJpcGhlcmFsIGhhbmRsZSwgdGhlIENhbGxiYWNrIElECiAgICAgICBhbmQgYSBwb2ludGVyIHRvIHRoZSB1c2VyIGNhbGxiYWNrIGZ1bmN0aW9uLgogCi0gICAgICBVc2UgZnVuY3Rpb24gQHJlZiBIQUxfUENDQVJEX1VuUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlc2V0IGEgY2FsbGJhY2sgdG8gdGhlIGRlZmF1bHQKKyAgICAgIFVzZSBmdW5jdGlvbiBIQUxfUENDQVJEX1VuUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlc2V0IGEgY2FsbGJhY2sgdG8gdGhlIGRlZmF1bHQKICAgICAgIHdlYWsgKHN1cmNoYXJnZWQpIGZ1bmN0aW9uLiBJdCBhbGxvd3MgdG8gcmVzZXQgZm9sbG93aW5nIGNhbGxiYWNrczoKICAgICAgICAgKCspIE1zcEluaXRDYWxsYmFjayAgICA6IFBDQ0FSRCBNc3BJbml0LgogICAgICAgICAoKykgTXNwRGVJbml0Q2FsbGJhY2sgIDogUENDQVJEIE1zcERlSW5pdC4KICAgICAgIFRoaXMgZnVuY3Rpb24pIHRha2VzIGFzIHBhcmFtZXRlcnMgdGhlIEhBTCBwZXJpcGhlcmFsIGhhbmRsZSBhbmQgdGhlIENhbGxiYWNrIElELgogCi0gICAgICBCeSBkZWZhdWx0LCBhZnRlciB0aGUgQHJlZiBIQUxfUENDQVJEX0luaXQgYW5kIGlmIHRoZSBzdGF0ZSBpcyBIQUxfUENDQVJEX1NUQVRFX1JFU0VUCisgICAgICBCeSBkZWZhdWx0LCBhZnRlciB0aGUgSEFMX1BDQ0FSRF9Jbml0IGFuZCBpZiB0aGUgc3RhdGUgaXMgSEFMX1BDQ0FSRF9TVEFURV9SRVNFVAogICAgICAgYWxsIGNhbGxiYWNrcyBhcmUgcmVzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgbGVnYWN5IHdlYWsgKHN1cmNoYXJnZWQpIGZ1bmN0aW9ucy4KICAgICAgIEV4Y2VwdGlvbiBkb25lIGZvciBNc3BJbml0IGFuZCBNc3BEZUluaXQgY2FsbGJhY2tzIHRoYXQgYXJlIHJlc3BlY3RpdmVseQotICAgICAgcmVzZXQgdG8gdGhlIGxlZ2FjeSB3ZWFrIChzdXJjaGFyZ2VkKSBmdW5jdGlvbnMgaW4gdGhlIEByZWYgSEFMX1BDQ0FSRF9Jbml0Ci0gICAgICBhbmQgQHJlZiAgSEFMX1BDQ0FSRF9EZUluaXQgb25seSB3aGVuIHRoZXNlIGNhbGxiYWNrcyBhcmUgbnVsbCAobm90IHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCkuCi0gICAgICBJZiBub3QsIE1zcEluaXQgb3IgTXNwRGVJbml0IGFyZSBub3QgbnVsbCwgdGhlIEByZWYgSEFMX1BDQ0FSRF9Jbml0IGFuZCBAcmVmIEhBTF9QQ0NBUkRfRGVJbml0CisgICAgICByZXNldCB0byB0aGUgbGVnYWN5IHdlYWsgKHN1cmNoYXJnZWQpIGZ1bmN0aW9ucyBpbiB0aGUgSEFMX1BDQ0FSRF9Jbml0CisgICAgICBhbmQgIEhBTF9QQ0NBUkRfRGVJbml0IG9ubHkgd2hlbiB0aGVzZSBjYWxsYmFja3MgYXJlIG51bGwgKG5vdCByZWdpc3RlcmVkIGJlZm9yZWhhbmQpLgorICAgICAgSWYgbm90LCBNc3BJbml0IG9yIE1zcERlSW5pdCBhcmUgbm90IG51bGwsIHRoZSBIQUxfUENDQVJEX0luaXQgYW5kIEhBTF9QQ0NBUkRfRGVJbml0CiAgICAgICBrZWVwIGFuZCB1c2UgdGhlIHVzZXIgTXNwSW5pdC9Nc3BEZUluaXQgY2FsbGJhY2tzIChyZWdpc3RlcmVkIGJlZm9yZWhhbmQpCiAKICAgICAgIENhbGxiYWNrcyBjYW4gYmUgcmVnaXN0ZXJlZC91bnJlZ2lzdGVyZWQgaW4gUkVBRFkgc3RhdGUgb25seS4KQEAgLTg3LDggKzg3LDggQEAKICAgICAgIGluIFJFQURZIG9yIFJFU0VUIHN0YXRlLCB0aHVzIHJlZ2lzdGVyZWQgKHVzZXIpIE1zcEluaXQvRGVJbml0IGNhbGxiYWNrcyBjYW4gYmUgdXNlZAogICAgICAgZHVyaW5nIHRoZSBJbml0L0RlSW5pdC4KICAgICAgIEluIHRoYXQgY2FzZSBmaXJzdCByZWdpc3RlciB0aGUgTXNwSW5pdC9Nc3BEZUluaXQgdXNlciBjYWxsYmFja3MKLSAgICAgIHVzaW5nIEByZWYgSEFMX1BDQ0FSRF9SZWdpc3RlckNhbGxiYWNrIGJlZm9yZSBjYWxsaW5nIEByZWYgSEFMX1BDQ0FSRF9EZUluaXQKLSAgICAgIG9yIEByZWYgSEFMX1BDQ0FSRF9Jbml0IGZ1bmN0aW9uLgorICAgICAgdXNpbmcgSEFMX1BDQ0FSRF9SZWdpc3RlckNhbGxiYWNrIGJlZm9yZSBjYWxsaW5nIEhBTF9QQ0NBUkRfRGVJbml0CisgICAgICBvciBIQUxfUENDQVJEX0luaXQgZnVuY3Rpb24uCiAKICAgICAgIFdoZW4gVGhlIGNvbXBpbGF0aW9uIGRlZmluZSBVU0VfSEFMX1BDQ0FSRF9SRUdJU1RFUl9DQUxMQkFDS1MgaXMgc2V0IHRvIDAgb3IKICAgICAgIG5vdCBkZWZpbmVkLCB0aGUgY2FsbGJhY2sgcmVnaXN0ZXJpbmcgZmVhdHVyZSBpcyBub3QgYXZhaWxhYmxlCkBAIC05NDEsMyArOTQxLDQgQEAKIC8qKgogICAqIEB9CiAgICovCisKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmYyeHhfaGFsX3BjZC5jIGIvU3JjL3N0bTMyZjJ4eF9oYWxfcGNkLmMKaW5kZXggY2EyZTFiZi4uOTk0NmFiMCAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjJ4eF9oYWxfcGNkLmMKKysrIGIvU3JjL3N0bTMyZjJ4eF9oYWxfcGNkLmMKQEAgLTMwOSw3ICszMDksNyBAQAogICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfUENEX1NVU1BFTkRfQ0JfSUQgVVNCIFBDRCBTdXNwZW5kIGNhbGxiYWNrIElECiAgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9QQ0RfUkVTVU1FX0NCX0lEIFVTQiBQQ0QgUmVzdW1lIGNhbGxiYWNrIElECiAgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9QQ0RfQ09OTkVDVF9DQl9JRCBVU0IgUENEIENvbm5lY3QgY2FsbGJhY2sgSUQKLSAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX1BDRF9ESVNDT05ORUNUX0NCX0lEIE9URyBQQ0QgRGlzY29ubmVjdCBjYWxsYmFjayBJRAorICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfUENEX0RJU0NPTk5FQ1RfQ0JfSUQgVVNCIFBDRCBEaXNjb25uZWN0IGNhbGxiYWNrIElECiAgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9QQ0RfTVNQSU5JVF9DQl9JRCBNc3BEZUluaXQgY2FsbGJhY2sgSUQKICAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX1BDRF9NU1BERUlOSVRfQ0JfSUQgTXNwRGVJbml0IGNhbGxiYWNrIElECiAgICogQHBhcmFtICBwQ2FsbGJhY2sgcG9pbnRlciB0byB0aGUgQ2FsbGJhY2sgZnVuY3Rpb24KQEAgLTQxMyw3ICs0MTMsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIFVucmVnaXN0ZXIgYW4gVVNCIFBDRCBDYWxsYmFjawotICAqICAgICAgICAgVVNCIFBDRCBjYWxsYWJjayBpcyByZWRpcmVjdGVkIHRvIHRoZSB3ZWFrIHByZWRlZmluZWQgY2FsbGJhY2sKKyAgKiAgICAgICAgIFVTQiBQQ0QgY2FsbGJhY2sgaXMgcmVkaXJlY3RlZCB0byB0aGUgd2VhayBwcmVkZWZpbmVkIGNhbGxiYWNrCiAgICogQHBhcmFtICBocGNkIFVTQiBQQ0QgaGFuZGxlCiAgICogQHBhcmFtICBDYWxsYmFja0lEIElEIG9mIHRoZSBjYWxsYmFjayB0byBiZSB1bnJlZ2lzdGVyZWQKICAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CkBAIC00MjMsNyArNDIzLDcgQEAKICAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX1BDRF9TVVNQRU5EX0NCX0lEIFVTQiBQQ0QgU3VzcGVuZCBjYWxsYmFjayBJRAogICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfUENEX1JFU1VNRV9DQl9JRCBVU0IgUENEIFJlc3VtZSBjYWxsYmFjayBJRAogICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfUENEX0NPTk5FQ1RfQ0JfSUQgVVNCIFBDRCBDb25uZWN0IGNhbGxiYWNrIElECi0gICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9QQ0RfRElTQ09OTkVDVF9DQl9JRCBPVEcgUENEIERpc2Nvbm5lY3QgY2FsbGJhY2sgSUQKKyAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX1BDRF9ESVNDT05ORUNUX0NCX0lEIFVTQiBQQ0QgRGlzY29ubmVjdCBjYWxsYmFjayBJRAogICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfUENEX01TUElOSVRfQ0JfSUQgTXNwRGVJbml0IGNhbGxiYWNrIElECiAgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9QQ0RfTVNQREVJTklUX0NCX0lEIE1zcERlSW5pdCBjYWxsYmFjayBJRAogICAqIEByZXR2YWwgSEFMIHN0YXR1cwpAQCAtODg4LDcgKzg4OCw3IEBACiAgIHVpbnQzMl90IGVwaW50OwogICB1aW50MzJfdCBlcG51bTsKICAgdWludDMyX3QgZmlmb2VtcHR5bXNrOwotICB1aW50MzJfdCB0ZW1wOworICB1aW50MzJfdCBSZWdWYWw7CiAKICAgLyogZW5zdXJlIHRoYXQgd2UgYXJlIGluIGRldmljZSBtb2RlICovCiAgIGlmIChVU0JfR2V0TW9kZShocGNkLT5JbnN0YW5jZSkgPT0gVVNCX09UR19NT0RFX0RFVklDRSkKQEAgLTg5OSw2ICs4OTksOSBAQAogICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIC8qIHN0b3JlIGN1cnJlbnQgZnJhbWUgbnVtYmVyICovCisgICAgaHBjZC0+RnJhbWVOdW1iZXIgPSAoVVNCeF9ERVZJQ0UtPkRTVFMgJiBVU0JfT1RHX0RTVFNfRk5TT0ZfTXNrKSA+PiBVU0JfT1RHX0RTVFNfRk5TT0ZfUG9zOworCiAgICAgaWYgKF9fSEFMX1BDRF9HRVRfRkxBRyhocGNkLCBVU0JfT1RHX0dJTlRTVFNfTU1JUykpCiAgICAgewogICAgICAgLyogaW5jb3JyZWN0IG1vZGUsIGFja25vd2xlZGdlIHRoZSBpbnRlcnJ1cHQgKi8KQEAgLTkxMCwzMCArOTEzLDMxIEBACiAgICAgewogICAgICAgVVNCX01BU0tfSU5URVJSVVBUKGhwY2QtPkluc3RhbmNlLCBVU0JfT1RHX0dJTlRTVFNfUlhGTFZMKTsKIAotICAgICAgdGVtcCA9IFVTQngtPkdSWFNUU1A7CisgICAgICBSZWdWYWwgPSBVU0J4LT5HUlhTVFNQOwogCi0gICAgICBlcCA9ICZocGNkLT5PVVRfZXBbdGVtcCAmIFVTQl9PVEdfR1JYU1RTUF9FUE5VTV07CisgICAgICBlcCA9ICZocGNkLT5PVVRfZXBbUmVnVmFsICYgVVNCX09UR19HUlhTVFNQX0VQTlVNXTsKIAotICAgICAgaWYgKCgodGVtcCAmIFVTQl9PVEdfR1JYU1RTUF9QS1RTVFMpID4+IDE3KSA9PSAgU1RTX0RBVEFfVVBEVCkKKyAgICAgIGlmICgoKFJlZ1ZhbCAmIFVTQl9PVEdfR1JYU1RTUF9QS1RTVFMpID4+IDE3KSA9PSAgU1RTX0RBVEFfVVBEVCkKICAgICAgIHsKLSAgICAgICAgaWYgKCh0ZW1wICYgVVNCX09UR19HUlhTVFNQX0JDTlQpICE9IDBVKQorICAgICAgICBpZiAoKFJlZ1ZhbCAmIFVTQl9PVEdfR1JYU1RTUF9CQ05UKSAhPSAwVSkKICAgICAgICAgewogICAgICAgICAgICh2b2lkKVVTQl9SZWFkUGFja2V0KFVTQngsIGVwLT54ZmVyX2J1ZmYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQxNl90KSgodGVtcCAmIFVTQl9PVEdfR1JYU1RTUF9CQ05UKSA+PiA0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQxNl90KSgoUmVnVmFsICYgVVNCX09UR19HUlhTVFNQX0JDTlQpID4+IDQpKTsKIAotICAgICAgICAgIGVwLT54ZmVyX2J1ZmYgKz0gKHRlbXAgJiBVU0JfT1RHX0dSWFNUU1BfQkNOVCkgPj4gNDsKLSAgICAgICAgICBlcC0+eGZlcl9jb3VudCArPSAodGVtcCAmIFVTQl9PVEdfR1JYU1RTUF9CQ05UKSA+PiA0OworICAgICAgICAgIGVwLT54ZmVyX2J1ZmYgKz0gKFJlZ1ZhbCAmIFVTQl9PVEdfR1JYU1RTUF9CQ05UKSA+PiA0OworICAgICAgICAgIGVwLT54ZmVyX2NvdW50ICs9IChSZWdWYWwgJiBVU0JfT1RHX0dSWFNUU1BfQkNOVCkgPj4gNDsKICAgICAgICAgfQogICAgICAgfQotICAgICAgZWxzZSBpZiAoKCh0ZW1wICYgVVNCX09UR19HUlhTVFNQX1BLVFNUUykgPj4gMTcpID09ICBTVFNfU0VUVVBfVVBEVCkKKyAgICAgIGVsc2UgaWYgKCgoUmVnVmFsICYgVVNCX09UR19HUlhTVFNQX1BLVFNUUykgPj4gMTcpID09IFNUU19TRVRVUF9VUERUKQogICAgICAgewogICAgICAgICAodm9pZClVU0JfUmVhZFBhY2tldChVU0J4LCAodWludDhfdCAqKWhwY2QtPlNldHVwLCA4VSk7Ci0gICAgICAgIGVwLT54ZmVyX2NvdW50ICs9ICh0ZW1wICYgVVNCX09UR19HUlhTVFNQX0JDTlQpID4+IDQ7CisgICAgICAgIGVwLT54ZmVyX2NvdW50ICs9IChSZWdWYWwgJiBVU0JfT1RHX0dSWFNUU1BfQkNOVCkgPj4gNDsKICAgICAgIH0KICAgICAgIGVsc2UKICAgICAgIHsKICAgICAgICAgLyogLi4uICovCiAgICAgICB9CisKICAgICAgIFVTQl9VTk1BU0tfSU5URVJSVVBUKGhwY2QtPkluc3RhbmNlLCBVU0JfT1RHX0dJTlRTVFNfUlhGTFZMKTsKICAgICB9CiAKQEAgLTk2OCw2ICs5NzIsMzAgQEAKICAgICAgICAgICAgIENMRUFSX09VVF9FUF9JTlRSKGVwbnVtLCBVU0JfT1RHX0RPRVBJTlRfT1RFUERJUyk7CiAgICAgICAgICAgfQogCisgICAgICAgICAgLyogQ2xlYXIgT1VUIEVuZHBvaW50IGRpc2FibGUgaW50ZXJydXB0ICovCisgICAgICAgICAgaWYgKChlcGludCAmIFVTQl9PVEdfRE9FUElOVF9FUERJU0QpID09IFVTQl9PVEdfRE9FUElOVF9FUERJU0QpCisgICAgICAgICAgeworICAgICAgICAgICAgaWYgKChVU0J4LT5HSU5UU1RTICYgVVNCX09UR19HSU5UU1RTX0JPVVROQUtFRkYpID09IFVTQl9PVEdfR0lOVFNUU19CT1VUTkFLRUZGKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBVU0J4X0RFVklDRS0+RENUTCB8PSBVU0JfT1RHX0RDVExfQ0dPTkFLOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlcCA9ICZocGNkLT5PVVRfZXBbZXBudW1dOworCisgICAgICAgICAgICBpZiAoZXAtPmlzX2lzb19pbmNvbXBsZXRlID09IDFVKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBlcC0+aXNfaXNvX2luY29tcGxldGUgPSAwVTsKKworI2lmIChVU0VfSEFMX1BDRF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCisgICAgICAgICAgICAgIGhwY2QtPklTT09VVEluY29tcGxldGVDYWxsYmFjayhocGNkLCAodWludDhfdCllcG51bSk7CisjZWxzZQorICAgICAgICAgICAgICBIQUxfUENEX0lTT09VVEluY29tcGxldGVDYWxsYmFjayhocGNkLCAodWludDhfdCllcG51bSk7CisjZW5kaWYgLyogVVNFX0hBTF9QQ0RfUkVHSVNURVJfQ0FMTEJBQ0tTICovCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIENMRUFSX09VVF9FUF9JTlRSKGVwbnVtLCBVU0JfT1RHX0RPRVBJTlRfRVBESVNEKTsKKyAgICAgICAgICB9CisKICAgICAgICAgICAvKiBDbGVhciBTdGF0dXMgUGhhc2UgUmVjZWl2ZWQgaW50ZXJydXB0ICovCiAgICAgICAgICAgaWYgKChlcGludCAmIFVTQl9PVEdfRE9FUElOVF9PVEVQU1BSKSA9PSBVU0JfT1RHX0RPRVBJTlRfT1RFUFNQUikKICAgICAgICAgICB7CkBAIC0xMDM3LDYgKzEwNjUsMjEgQEAKICAgICAgICAgICB9CiAgICAgICAgICAgaWYgKChlcGludCAmIFVTQl9PVEdfRElFUElOVF9FUERJU0QpID09IFVTQl9PVEdfRElFUElOVF9FUERJU0QpCiAgICAgICAgICAgeworICAgICAgICAgICAgKHZvaWQpVVNCX0ZsdXNoVHhGaWZvKFVTQngsIGVwbnVtKTsKKworICAgICAgICAgICAgZXAgPSAmaHBjZC0+SU5fZXBbZXBudW1dOworCisgICAgICAgICAgICBpZiAoZXAtPmlzX2lzb19pbmNvbXBsZXRlID09IDFVKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBlcC0+aXNfaXNvX2luY29tcGxldGUgPSAwVTsKKworI2lmIChVU0VfSEFMX1BDRF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCisgICAgICAgICAgICAgIGhwY2QtPklTT0lOSW5jb21wbGV0ZUNhbGxiYWNrKGhwY2QsICh1aW50OF90KWVwbnVtKTsKKyNlbHNlCisgICAgICAgICAgICAgIEhBTF9QQ0RfSVNPSU5JbmNvbXBsZXRlQ2FsbGJhY2soaHBjZCwgKHVpbnQ4X3QpZXBudW0pOworI2VuZGlmIC8qIFVTRV9IQUxfUENEX1JFR0lTVEVSX0NBTExCQUNLUyAqLworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBDTEVBUl9JTl9FUF9JTlRSKGVwbnVtLCBVU0JfT1RHX0RJRVBJTlRfRVBESVNEKTsKICAgICAgICAgICB9CiAgICAgICAgICAgaWYgKChlcGludCAmIFVTQl9PVEdfRElFUElOVF9UWEZFKSA9PSBVU0JfT1RHX0RJRVBJTlRfVFhGRSkKQEAgLTEwODcsNyArMTEzMCw2IEBACiAgICAgICB7CiAgICAgICAgIFVTQnhfSU5FUChpKS0+RElFUElOVCA9IDB4RkI3RlU7CiAgICAgICAgIFVTQnhfSU5FUChpKS0+RElFUENUTCAmPSB+VVNCX09UR19ESUVQQ1RMX1NUQUxMOwotICAgICAgICBVU0J4X0lORVAoaSktPkRJRVBDVEwgfD0gVVNCX09UR19ESUVQQ1RMX1NOQUs7CiAgICAgICAgIFVTQnhfT1VURVAoaSktPkRPRVBJTlQgPSAweEZCN0ZVOwogICAgICAgICBVU0J4X09VVEVQKGkpLT5ET0VQQ1RMICY9IH5VU0JfT1RHX0RPRVBDVExfU1RBTEw7CiAgICAgICAgIFVTQnhfT1VURVAoaSktPkRPRVBDVEwgfD0gVVNCX09UR19ET0VQQ1RMX1NOQUs7CkBAIC0xMTU5LDE4ICsxMjAxLDM3IEBACiAgICAgICBfX0hBTF9QQ0RfQ0xFQVJfRkxBRyhocGNkLCBVU0JfT1RHX0dJTlRTVFNfU09GKTsKICAgICB9CiAKKyAgICAvKiBIYW5kbGUgR2xvYmFsIE9VVCBOQUsgZWZmZWN0aXZlIEludGVycnVwdCAqLworICAgIGlmIChfX0hBTF9QQ0RfR0VUX0ZMQUcoaHBjZCwgVVNCX09UR19HSU5UU1RTX0JPVVROQUtFRkYpKQorICAgIHsKKyAgICAgIFVTQngtPkdJTlRNU0sgJj0gflVTQl9PVEdfR0lOVE1TS19HT05BS0VGRk07CisKKyAgICAgIGZvciAoZXBudW0gPSAxVTsgZXBudW0gPCBocGNkLT5Jbml0LmRldl9lbmRwb2ludHM7IGVwbnVtKyspCisgICAgICB7CisgICAgICAgIGlmIChocGNkLT5PVVRfZXBbZXBudW1dLmlzX2lzb19pbmNvbXBsZXRlID09IDFVKQorICAgICAgICB7CisgICAgICAgICAgLyogQWJvcnQgY3VycmVudCB0cmFuc2FjdGlvbiBhbmQgZGlzYWJsZSB0aGUgRVAgKi8KKyAgICAgICAgICAodm9pZClIQUxfUENEX0VQX0Fib3J0KGhwY2QsICh1aW50OF90KWVwbnVtKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKwogICAgIC8qIEhhbmRsZSBJbmNvbXBsZXRlIElTTyBJTiBJbnRlcnJ1cHQgKi8KICAgICBpZiAoX19IQUxfUENEX0dFVF9GTEFHKGhwY2QsIFVTQl9PVEdfR0lOVFNUU19JSVNPSVhGUikpCiAgICAgewotICAgICAgLyogS2VlcCBhcHBsaWNhdGlvbiBjaGVja2luZyB0aGUgY29ycmVzcG9uZGluZyBJc28gSU4gZW5kcG9pbnQKLSAgICAgIGNhdXNpbmcgdGhlIGluY29tcGxldGUgSW50ZXJydXB0ICovCi0gICAgICBlcG51bSA9IDBVOworICAgICAgZm9yIChlcG51bSA9IDFVOyBlcG51bSA8IGhwY2QtPkluaXQuZGV2X2VuZHBvaW50czsgZXBudW0rKykKKyAgICAgIHsKKyAgICAgICAgUmVnVmFsID0gVVNCeF9JTkVQKGVwbnVtKS0+RElFUENUTDsKIAotI2lmIChVU0VfSEFMX1BDRF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCi0gICAgICBocGNkLT5JU09JTkluY29tcGxldGVDYWxsYmFjayhocGNkLCAodWludDhfdCllcG51bSk7Ci0jZWxzZQotICAgICAgSEFMX1BDRF9JU09JTkluY29tcGxldGVDYWxsYmFjayhocGNkLCAodWludDhfdCllcG51bSk7Ci0jZW5kaWYgLyogVVNFX0hBTF9QQ0RfUkVHSVNURVJfQ0FMTEJBQ0tTICovCisgICAgICAgIGlmICgoaHBjZC0+SU5fZXBbZXBudW1dLnR5cGUgPT0gRVBfVFlQRV9JU09DKSAmJgorICAgICAgICAgICAgKChSZWdWYWwgJiBVU0JfT1RHX0RJRVBDVExfRVBFTkEpID09IFVTQl9PVEdfRElFUENUTF9FUEVOQSkpCisgICAgICAgIHsKKyAgICAgICAgICBocGNkLT5JTl9lcFtlcG51bV0uaXNfaXNvX2luY29tcGxldGUgPSAxVTsKKworICAgICAgICAgIC8qIEFib3J0IGN1cnJlbnQgdHJhbnNhY3Rpb24gYW5kIGRpc2FibGUgdGhlIEVQICovCisgICAgICAgICAgKHZvaWQpSEFMX1BDRF9FUF9BYm9ydChocGNkLCAodWludDhfdCkoZXBudW0gfCAweDgwVSkpOworICAgICAgICB9CisgICAgICB9CiAKICAgICAgIF9fSEFMX1BDRF9DTEVBUl9GTEFHKGhwY2QsIFVTQl9PVEdfR0lOVFNUU19JSVNPSVhGUik7CiAgICAgfQpAQCAtMTE3OCwxNSArMTIzOSwyNSBAQAogICAgIC8qIEhhbmRsZSBJbmNvbXBsZXRlIElTTyBPVVQgSW50ZXJydXB0ICovCiAgICAgaWYgKF9fSEFMX1BDRF9HRVRfRkxBRyhocGNkLCBVU0JfT1RHX0dJTlRTVFNfUFhGUl9JTkNPTVBJU09PVVQpKQogICAgIHsKLSAgICAgIC8qIEtlZXAgYXBwbGljYXRpb24gY2hlY2tpbmcgdGhlIGNvcnJlc3BvbmRpbmcgSXNvIE9VVCBlbmRwb2ludAotICAgICAgY2F1c2luZyB0aGUgaW5jb21wbGV0ZSBJbnRlcnJ1cHQgKi8KLSAgICAgIGVwbnVtID0gMFU7CisgICAgICBmb3IgKGVwbnVtID0gMVU7IGVwbnVtIDwgaHBjZC0+SW5pdC5kZXZfZW5kcG9pbnRzOyBlcG51bSsrKQorICAgICAgeworICAgICAgICBSZWdWYWwgPSBVU0J4X09VVEVQKGVwbnVtKS0+RE9FUENUTDsKIAotI2lmIChVU0VfSEFMX1BDRF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCi0gICAgICBocGNkLT5JU09PVVRJbmNvbXBsZXRlQ2FsbGJhY2soaHBjZCwgKHVpbnQ4X3QpZXBudW0pOwotI2Vsc2UKLSAgICAgIEhBTF9QQ0RfSVNPT1VUSW5jb21wbGV0ZUNhbGxiYWNrKGhwY2QsICh1aW50OF90KWVwbnVtKTsKLSNlbmRpZiAvKiBVU0VfSEFMX1BDRF9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KKyAgICAgICAgaWYgKChocGNkLT5PVVRfZXBbZXBudW1dLnR5cGUgPT0gRVBfVFlQRV9JU09DKSAmJgorICAgICAgICAgICAgKChSZWdWYWwgJiBVU0JfT1RHX0RPRVBDVExfRVBFTkEpID09IFVTQl9PVEdfRE9FUENUTF9FUEVOQSkgJiYKKyAgICAgICAgICAgICgoUmVnVmFsICYgKDB4MVUgPDwgMTYpKSA9PSAoaHBjZC0+RnJhbWVOdW1iZXIgJiAweDFVKSkpCisgICAgICAgIHsKKyAgICAgICAgICBocGNkLT5PVVRfZXBbZXBudW1dLmlzX2lzb19pbmNvbXBsZXRlID0gMVU7CisKKyAgICAgICAgICBVU0J4LT5HSU5UTVNLIHw9IFVTQl9PVEdfR0lOVE1TS19HT05BS0VGRk07CisKKyAgICAgICAgICBpZiAoKFVTQngtPkdJTlRTVFMgJiBVU0JfT1RHX0dJTlRTVFNfQk9VVE5BS0VGRikgPT0gMFUpCisgICAgICAgICAgeworICAgICAgICAgICAgVVNCeF9ERVZJQ0UtPkRDVEwgfD0gVVNCX09UR19EQ1RMX1NHT05BSzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQogCiAgICAgICBfX0hBTF9QQ0RfQ0xFQVJfRkxBRyhocGNkLCBVU0JfT1RHX0dJTlRTVFNfUFhGUl9JTkNPTVBJU09PVVQpOwogICAgIH0KQEAgLTEyMDYsOSArMTI3Nyw5IEBACiAgICAgLyogSGFuZGxlIERpc2Nvbm5lY3Rpb24gZXZlbnQgSW50ZXJydXB0ICovCiAgICAgaWYgKF9fSEFMX1BDRF9HRVRfRkxBRyhocGNkLCBVU0JfT1RHX0dJTlRTVFNfT1RHSU5UKSkKICAgICB7Ci0gICAgICB0ZW1wID0gaHBjZC0+SW5zdGFuY2UtPkdPVEdJTlQ7CisgICAgICBSZWdWYWwgPSBocGNkLT5JbnN0YW5jZS0+R09UR0lOVDsKIAotICAgICAgaWYgKCh0ZW1wICYgVVNCX09UR19HT1RHSU5UX1NFREVUKSA9PSBVU0JfT1RHX0dPVEdJTlRfU0VERVQpCisgICAgICBpZiAoKFJlZ1ZhbCAmIFVTQl9PVEdfR09UR0lOVF9TRURFVCkgPT0gVVNCX09UR19HT1RHSU5UX1NFREVUKQogICAgICAgewogI2lmIChVU0VfSEFMX1BDRF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCiAgICAgICAgIGhwY2QtPkRpc2Nvbm5lY3RDYWxsYmFjayhocGNkKTsKQEAgLTEyMTYsNyArMTI4Nyw3IEBACiAgICAgICAgIEhBTF9QQ0RfRGlzY29ubmVjdENhbGxiYWNrKGhwY2QpOwogI2VuZGlmIC8qIFVTRV9IQUxfUENEX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogICAgICAgfQotICAgICAgaHBjZC0+SW5zdGFuY2UtPkdPVEdJTlQgfD0gdGVtcDsKKyAgICAgIGhwY2QtPkluc3RhbmNlLT5HT1RHSU5UIHw9IFJlZ1ZhbDsKICAgICB9CiAgIH0KIH0KQEAgLTE1MTUsNiArMTU4Niw3IEBACiAgICAgLyogQXNzaWduIGEgVHggRklGTyAqLwogICAgIGVwLT50eF9maWZvX251bSA9IGVwLT5udW07CiAgIH0KKwogICAvKiBTZXQgaW5pdGlhbCBkYXRhIFBJRC4gKi8KICAgaWYgKGVwX3R5cGUgPT0gRVBfVFlQRV9CVUxLKQogICB7CkBAIC0xNTQ4LDcgKzE2MjAsNyBAQAogICAgIGVwID0gJmhwY2QtPk9VVF9lcFtlcF9hZGRyICYgRVBfQUREUl9NU0tdOwogICAgIGVwLT5pc19pbiA9IDBVOwogICB9Ci0gIGVwLT5udW0gICA9IGVwX2FkZHIgJiBFUF9BRERSX01TSzsKKyAgZXAtPm51bSA9IGVwX2FkZHIgJiBFUF9BRERSX01TSzsKIAogICBfX0hBTF9MT0NLKGhwY2QpOwogICAodm9pZClVU0JfRGVhY3RpdmF0ZUVuZHBvaW50KGhwY2QtPkluc3RhbmNlLCBlcCk7CkBAIC0xNTgzLDE0ICsxNjU1LDcgQEAKICAgICBlcC0+ZG1hX2FkZHIgPSAodWludDMyX3QpcEJ1ZjsKICAgfQogCi0gIGlmICgoZXBfYWRkciAmIEVQX0FERFJfTVNLKSA9PSAwVSkKLSAgewotICAgICh2b2lkKVVTQl9FUDBTdGFydFhmZXIoaHBjZC0+SW5zdGFuY2UsIGVwLCAodWludDhfdClocGNkLT5Jbml0LmRtYV9lbmFibGUpOwotICB9Ci0gIGVsc2UKLSAgewotICAgICh2b2lkKVVTQl9FUFN0YXJ0WGZlcihocGNkLT5JbnN0YW5jZSwgZXAsICh1aW50OF90KWhwY2QtPkluaXQuZG1hX2VuYWJsZSk7Ci0gIH0KKyAgKHZvaWQpVVNCX0VQU3RhcnRYZmVyKGhwY2QtPkluc3RhbmNlLCBlcCwgKHVpbnQ4X3QpaHBjZC0+SW5pdC5kbWFfZW5hYmxlKTsKIAogICByZXR1cm4gSEFMX09LOwogfQpAQCAtMTYwMSw3ICsxNjY2LDcgQEAKICAgKiBAcGFyYW0gIGVwX2FkZHIgZW5kcG9pbnQgYWRkcmVzcwogICAqIEByZXR2YWwgRGF0YSBTaXplCiAgICovCi11aW50MzJfdCBIQUxfUENEX0VQX0dldFJ4Q291bnQoUENEX0hhbmRsZVR5cGVEZWYgKmhwY2QsIHVpbnQ4X3QgZXBfYWRkcikKK3VpbnQzMl90IEhBTF9QQ0RfRVBfR2V0UnhDb3VudChQQ0RfSGFuZGxlVHlwZURlZiBjb25zdCAqaHBjZCwgdWludDhfdCBlcF9hZGRyKQogewogICByZXR1cm4gaHBjZC0+T1VUX2VwW2VwX2FkZHIgJiBFUF9BRERSX01TS10ueGZlcl9jb3VudDsKIH0KQEAgLTE2MzEsMTQgKzE2OTYsNyBAQAogICAgIGVwLT5kbWFfYWRkciA9ICh1aW50MzJfdClwQnVmOwogICB9CiAKLSAgaWYgKChlcF9hZGRyICYgRVBfQUREUl9NU0spID09IDBVKQotICB7Ci0gICAgKHZvaWQpVVNCX0VQMFN0YXJ0WGZlcihocGNkLT5JbnN0YW5jZSwgZXAsICh1aW50OF90KWhwY2QtPkluaXQuZG1hX2VuYWJsZSk7Ci0gIH0KLSAgZWxzZQotICB7Ci0gICAgKHZvaWQpVVNCX0VQU3RhcnRYZmVyKGhwY2QtPkluc3RhbmNlLCBlcCwgKHVpbnQ4X3QpaHBjZC0+SW5pdC5kbWFfZW5hYmxlKTsKLSAgfQorICAodm9pZClVU0JfRVBTdGFydFhmZXIoaHBjZC0+SW5zdGFuY2UsIGVwLCAodWludDhfdClocGNkLT5Jbml0LmRtYV9lbmFibGUpOwogCiAgIHJldHVybiBIQUxfT0s7CiB9CkBAIC0xNzIzLDYgKzE3ODEsMzIgQEAKIH0KIAogLyoqCisgICAqIEBicmllZiAgQWJvcnQgYW4gVVNCIEVQIHRyYW5zYWN0aW9uLgorICAgKiBAcGFyYW0gIGhwY2QgUENEIGhhbmRsZQorICAgKiBAcGFyYW0gIGVwX2FkZHIgZW5kcG9pbnQgYWRkcmVzcworICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKKyAgICovCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfUENEX0VQX0Fib3J0KFBDRF9IYW5kbGVUeXBlRGVmICpocGNkLCB1aW50OF90IGVwX2FkZHIpCit7CisgIEhBTF9TdGF0dXNUeXBlRGVmIHJldDsKKyAgUENEX0VQVHlwZURlZiAqZXA7CisKKyAgaWYgKCgweDgwVSAmIGVwX2FkZHIpID09IDB4ODBVKQorICB7CisgICAgZXAgPSAmaHBjZC0+SU5fZXBbZXBfYWRkciAmIEVQX0FERFJfTVNLXTsKKyAgfQorICBlbHNlCisgIHsKKyAgICBlcCA9ICZocGNkLT5PVVRfZXBbZXBfYWRkciAmIEVQX0FERFJfTVNLXTsKKyAgfQorCisgIC8qIFN0b3AgWGZlciAqLworICByZXQgPSBVU0JfRVBTdG9wWGZlcihocGNkLT5JbnN0YW5jZSwgZXApOworCisgIHJldHVybiByZXQ7Cit9CisKKy8qKgogICAqIEBicmllZiAgRmx1c2ggYW4gZW5kcG9pbnQKICAgKiBAcGFyYW0gIGhwY2QgUENEIGhhbmRsZQogICAqIEBwYXJhbSAgZXBfYWRkciBlbmRwb2ludCBhZGRyZXNzCkBAIC0xNzkwLDExICsxODc0LDQwIEBACiAgICogQHBhcmFtICBocGNkIFBDRCBoYW5kbGUKICAgKiBAcmV0dmFsIEhBTCBzdGF0ZQogICAqLwotUENEX1N0YXRlVHlwZURlZiBIQUxfUENEX0dldFN0YXRlKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkKQorUENEX1N0YXRlVHlwZURlZiBIQUxfUENEX0dldFN0YXRlKFBDRF9IYW5kbGVUeXBlRGVmIGNvbnN0ICpocGNkKQogewogICByZXR1cm4gaHBjZC0+U3RhdGU7CiB9CiAKKyNpZiBkZWZpbmVkIChVU0JfT1RHX0ZTKSB8fCBkZWZpbmVkIChVU0JfT1RHX0hTKQorLyoqCisgICogQGJyaWVmICBTZXQgdGhlIFVTQiBEZXZpY2UgaGlnaCBzcGVlZCB0ZXN0IG1vZGUuCisgICogQHBhcmFtICBocGNkIFBDRCBoYW5kbGUKKyAgKiBAcGFyYW0gIHRlc3Rtb2RlIFVTQiBEZXZpY2UgaGlnaCBzcGVlZCB0ZXN0IG1vZGUKKyAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKKyAgKi8KK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9QQ0RfU2V0VGVzdE1vZGUoUENEX0hhbmRsZVR5cGVEZWYgKmhwY2QsIHVpbnQ4X3QgdGVzdG1vZGUpCit7CisgIFVTQl9PVEdfR2xvYmFsVHlwZURlZiAqVVNCeCA9IGhwY2QtPkluc3RhbmNlOworICB1aW50MzJfdCBVU0J4X0JBU0UgPSAodWludDMyX3QpVVNCeDsKKworICBzd2l0Y2ggKHRlc3Rtb2RlKQorICB7CisgICAgY2FzZSBURVNUX0o6CisgICAgY2FzZSBURVNUX0s6CisgICAgY2FzZSBURVNUX1NFMF9OQUs6CisgICAgY2FzZSBURVNUX1BBQ0tFVDoKKyAgICBjYXNlIFRFU1RfRk9SQ0VfRU46CisgICAgICBVU0J4X0RFVklDRS0+RENUTCB8PSAodWludDMyX3QpdGVzdG1vZGUgPDwgNDsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICB9CisKKyAgcmV0dXJuIEhBTF9PSzsKK30KKyNlbmRpZiAvKiBkZWZpbmVkIChVU0JfT1RHX0ZTKSB8fCBkZWZpbmVkIChVU0JfT1RHX0hTKSAqLwogLyoqCiAgICogQH0KICAgKi8KZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmYyeHhfaGFsX3JjYy5jIGIvU3JjL3N0bTMyZjJ4eF9oYWxfcmNjLmMKaW5kZXggMmVmNGVlYS4uNTc0ZDlkZSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjJ4eF9oYWxfcmNjLmMKKysrIGIvU3JjL3N0bTMyZjJ4eF9oYWxfcmNjLmMKQEAgLTE0LDggKzE0LDggQEAKICAgKiBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICoKLSAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUKLSAgKiBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCisgICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluCisgICogdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc29mdHdhcmUgY29tcG9uZW50LgogICAqIElmIG5vIExJQ0VOU0UgZmlsZSBjb21lcyB3aXRoIHRoaXMgc29mdHdhcmUsIGl0IGlzIHByb3ZpZGVkIEFTLUlTLgogICAqCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTIyMiwzICsxMjIyLDQgQEAKIC8qKgogICAqIEB9CiAgICovCisKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmYyeHhfaGFsX3JjY19leC5jIGIvU3JjL3N0bTMyZjJ4eF9oYWxfcmNjX2V4LmMKaW5kZXggN2QzMDE4Mi4uNTE5NWM4OCAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjJ4eF9oYWxfcmNjX2V4LmMKKysrIGIvU3JjL3N0bTMyZjJ4eF9oYWxfcmNjX2V4LmMKQEAgLTEzLDggKzEzLDggQEAKICAgKiBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICoKLSAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUKLSAgKiBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCisgICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluCisgICogdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc29mdHdhcmUgY29tcG9uZW50LgogICAqIElmIG5vIExJQ0VOU0UgZmlsZSBjb21lcyB3aXRoIHRoaXMgc29mdHdhcmUsIGl0IGlzIHByb3ZpZGVkIEFTLUlTLgogICAqCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMzIxLDMgKzMyMSw0IEBACiAvKioKICAgKiBAfQogICAqLworCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmMnh4X2hhbF9ybmcuYyBiL1NyYy9zdG0zMmYyeHhfaGFsX3JuZy5jCmluZGV4IDliM2RjMjYuLmE0OTg5NGIgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYyeHhfaGFsX3JuZy5jCisrKyBiL1NyYy9zdG0zMmYyeHhfaGFsX3JuZy5jCkBAIC00Miw4ICs0Miw4IEBACiAgICAgYWxsb3dzIHRoZSB1c2VyIHRvIGNvbmZpZ3VyZSBkeW5hbWljYWxseSB0aGUgZHJpdmVyIGNhbGxiYWNrcy4KIAogICAgIFsuLl0KLSAgICBVc2UgRnVuY3Rpb24gQHJlZiBIQUxfUk5HX1JlZ2lzdGVyQ2FsbGJhY2soKSB0byByZWdpc3RlciBhIHVzZXIgY2FsbGJhY2suCi0gICAgRnVuY3Rpb24gQHJlZiBIQUxfUk5HX1JlZ2lzdGVyQ2FsbGJhY2soKSBhbGxvd3MgdG8gcmVnaXN0ZXIgZm9sbG93aW5nIGNhbGxiYWNrczoKKyAgICBVc2UgRnVuY3Rpb24gSEFMX1JOR19SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVnaXN0ZXIgYSB1c2VyIGNhbGxiYWNrLgorICAgIEZ1bmN0aW9uIEhBTF9STkdfUmVnaXN0ZXJDYWxsYmFjaygpIGFsbG93cyB0byByZWdpc3RlciBmb2xsb3dpbmcgY2FsbGJhY2tzOgogICAgICgrKSBFcnJvckNhbGxiYWNrICAgICAgICAgICAgIDogUk5HIEVycm9yIENhbGxiYWNrLgogICAgICgrKSBNc3BJbml0Q2FsbGJhY2sgICAgICAgICAgIDogUk5HIE1zcEluaXQuCiAgICAgKCspIE1zcERlSW5pdENhbGxiYWNrICAgICAgICAgOiBSTkcgTXNwRGVJbml0LgpAQCAtNTEsOSArNTEsOSBAQAogICAgIGFuZCBhIHBvaW50ZXIgdG8gdGhlIHVzZXIgY2FsbGJhY2sgZnVuY3Rpb24uCiAKICAgICBbLi5dCi0gICAgVXNlIGZ1bmN0aW9uIEByZWYgSEFMX1JOR19VblJlZ2lzdGVyQ2FsbGJhY2soKSB0byByZXNldCBhIGNhbGxiYWNrIHRvIHRoZSBkZWZhdWx0Ci0gICAgd2VhayAoc3VyY2hhcmdlZCkgZnVuY3Rpb24uCi0gICAgQHJlZiBIQUxfUk5HX1VuUmVnaXN0ZXJDYWxsYmFjaygpIHRha2VzIGFzIHBhcmFtZXRlcnMgdGhlIEhBTCBwZXJpcGhlcmFsIGhhbmRsZSwKKyAgICBVc2UgZnVuY3Rpb24gSEFMX1JOR19VblJlZ2lzdGVyQ2FsbGJhY2soKSB0byByZXNldCBhIGNhbGxiYWNrIHRvIHRoZSBkZWZhdWx0CisgICAgd2VhayAob3ZlcnJpZGRlbikgZnVuY3Rpb24uCisgICAgSEFMX1JOR19VblJlZ2lzdGVyQ2FsbGJhY2soKSB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsCiAgICAgYW5kIHRoZSBDYWxsYmFjayBJRC4KICAgICBUaGlzIGZ1bmN0aW9uIGFsbG93cyB0byByZXNldCBmb2xsb3dpbmcgY2FsbGJhY2tzOgogICAgICgrKSBFcnJvckNhbGxiYWNrICAgICAgICAgICAgIDogUk5HIEVycm9yIENhbGxiYWNrLgpAQCAtNjIsMTYgKzYyLDE2IEBACiAKICAgICBbLi5dCiAgICAgRm9yIHNwZWNpZmljIGNhbGxiYWNrIFJlYWR5RGF0YUNhbGxiYWNrLCB1c2UgZGVkaWNhdGVkIHJlZ2lzdGVyIGNhbGxiYWNrczoKLSAgICByZXNwZWN0aXZlbHkgQHJlZiBIQUxfUk5HX1JlZ2lzdGVyUmVhZHlEYXRhQ2FsbGJhY2soKSAsIEByZWYgSEFMX1JOR19VblJlZ2lzdGVyUmVhZHlEYXRhQ2FsbGJhY2soKS4KKyAgICByZXNwZWN0aXZlbHkgSEFMX1JOR19SZWdpc3RlclJlYWR5RGF0YUNhbGxiYWNrKCkgLCBIQUxfUk5HX1VuUmVnaXN0ZXJSZWFkeURhdGFDYWxsYmFjaygpLgogCiAgICAgWy4uXQotICAgIEJ5IGRlZmF1bHQsIGFmdGVyIHRoZSBAcmVmIEhBTF9STkdfSW5pdCgpIGFuZCB3aGVuIHRoZSBzdGF0ZSBpcyBIQUxfUk5HX1NUQVRFX1JFU0VUCi0gICAgYWxsIGNhbGxiYWNrcyBhcmUgc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIHdlYWsgKHN1cmNoYXJnZWQpIGZ1bmN0aW9uczoKLSAgICBleGFtcGxlIEByZWYgSEFMX1JOR19FcnJvckNhbGxiYWNrKCkuCisgICAgQnkgZGVmYXVsdCwgYWZ0ZXIgdGhlIEhBTF9STkdfSW5pdCgpIGFuZCB3aGVuIHRoZSBzdGF0ZSBpcyBIQUxfUk5HX1NUQVRFX1JFU0VUCisgICAgYWxsIGNhbGxiYWNrcyBhcmUgc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIHdlYWsgKG92ZXJyaWRkZW4pIGZ1bmN0aW9uczoKKyAgICBleGFtcGxlIEhBTF9STkdfRXJyb3JDYWxsYmFjaygpLgogICAgIEV4Y2VwdGlvbiBkb25lIGZvciBNc3BJbml0IGFuZCBNc3BEZUluaXQgZnVuY3Rpb25zIHRoYXQgYXJlIHJlc3BlY3RpdmVseQotICAgIHJlc2V0IHRvIHRoZSBsZWdhY3kgd2VhayAoc3VyY2hhcmdlZCkgZnVuY3Rpb25zIGluIHRoZSBAcmVmIEhBTF9STkdfSW5pdCgpCi0gICAgYW5kIEByZWYgSEFMX1JOR19EZUluaXQoKSBvbmx5IHdoZW4gdGhlc2UgY2FsbGJhY2tzIGFyZSBudWxsIChub3QgcmVnaXN0ZXJlZCBiZWZvcmVoYW5kKS4KLSAgICBJZiBub3QsIE1zcEluaXQgb3IgTXNwRGVJbml0IGFyZSBub3QgbnVsbCwgdGhlIEByZWYgSEFMX1JOR19Jbml0KCkgYW5kIEByZWYgSEFMX1JOR19EZUluaXQoKQorICAgIHJlc2V0IHRvIHRoZSBsZWdhY3kgd2VhayAob3ZlcnJpZGRlbikgZnVuY3Rpb25zIGluIHRoZSBIQUxfUk5HX0luaXQoKQorICAgIGFuZCBIQUxfUk5HX0RlSW5pdCgpIG9ubHkgd2hlbiB0aGVzZSBjYWxsYmFja3MgYXJlIG51bGwgKG5vdCByZWdpc3RlcmVkIGJlZm9yZWhhbmQpLgorICAgIElmIG5vdCwgTXNwSW5pdCBvciBNc3BEZUluaXQgYXJlIG5vdCBudWxsLCB0aGUgSEFMX1JOR19Jbml0KCkgYW5kIEhBTF9STkdfRGVJbml0KCkKICAgICBrZWVwIGFuZCB1c2UgdGhlIHVzZXIgTXNwSW5pdC9Nc3BEZUluaXQgY2FsbGJhY2tzIChyZWdpc3RlcmVkIGJlZm9yZWhhbmQpLgogCiAgICAgWy4uXQpAQCAtODAsMTMgKzgwLDEzIEBACiAgICAgaW4gSEFMX1JOR19TVEFURV9SRUFEWSBvciBIQUxfUk5HX1NUQVRFX1JFU0VUIHN0YXRlLCB0aHVzIHJlZ2lzdGVyZWQgKHVzZXIpCiAgICAgTXNwSW5pdC9EZUluaXQgY2FsbGJhY2tzIGNhbiBiZSB1c2VkIGR1cmluZyB0aGUgSW5pdC9EZUluaXQuCiAgICAgSW4gdGhhdCBjYXNlIGZpcnN0IHJlZ2lzdGVyIHRoZSBNc3BJbml0L01zcERlSW5pdCB1c2VyIGNhbGxiYWNrcwotICAgIHVzaW5nIEByZWYgSEFMX1JOR19SZWdpc3RlckNhbGxiYWNrKCkgYmVmb3JlIGNhbGxpbmcgQHJlZiBIQUxfUk5HX0RlSW5pdCgpCi0gICAgb3IgQHJlZiBIQUxfUk5HX0luaXQoKSBmdW5jdGlvbi4KKyAgICB1c2luZyBIQUxfUk5HX1JlZ2lzdGVyQ2FsbGJhY2soKSBiZWZvcmUgY2FsbGluZyBIQUxfUk5HX0RlSW5pdCgpCisgICAgb3IgSEFMX1JOR19Jbml0KCkgZnVuY3Rpb24uCiAKICAgICBbLi5dCiAgICAgV2hlbiBUaGUgY29tcGlsYXRpb24gZGVmaW5lIFVTRV9IQUxfUk5HX1JFR0lTVEVSX0NBTExCQUNLUyBpcyBzZXQgdG8gMCBvcgogICAgIG5vdCBkZWZpbmVkLCB0aGUgY2FsbGJhY2sgcmVnaXN0cmF0aW9uIGZlYXR1cmUgaXMgbm90IGF2YWlsYWJsZQotICAgIGFuZCB3ZWFrIChzdXJjaGFyZ2VkKSBjYWxsYmFja3MgYXJlIHVzZWQuCisgICAgYW5kIHdlYWsgKG92ZXJyaWRkZW4pIGNhbGxiYWNrcyBhcmUgdXNlZC4KIAogICBAZW5kdmVyYmF0aW0KICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0zMDcsOCArMzA3LDYgQEAKICAgICBocm5nLT5FcnJvckNvZGUgPSBIQUxfUk5HX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0s7CiAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQotICAvKiBQcm9jZXNzIGxvY2tlZCAqLwotICBfX0hBTF9MT0NLKGhybmcpOwogCiAgIGlmIChIQUxfUk5HX1NUQVRFX1JFQURZID09IGhybmctPlN0YXRlKQogICB7CkBAIC0zNjIsMTQgKzM2MCwxMiBAQAogICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7CiAgIH0KIAotICAvKiBSZWxlYXNlIExvY2sgKi8KLSAgX19IQUxfVU5MT0NLKGhybmcpOwogICByZXR1cm4gc3RhdHVzOwogfQogCiAvKioKICAgKiBAYnJpZWYgIFVucmVnaXN0ZXIgYW4gUk5HIENhbGxiYWNrCi0gICogICAgICAgICBSTkcgY2FsbGFiY2sgaXMgcmVkaXJlY3RlZCB0byB0aGUgd2VhayBwcmVkZWZpbmVkIGNhbGxiYWNrCisgICogICAgICAgICBSTkcgY2FsbGJhY2sgaXMgcmVkaXJlY3RlZCB0byB0aGUgd2VhayBwcmVkZWZpbmVkIGNhbGxiYWNrCiAgICogQHBhcmFtICBocm5nIFJORyBoYW5kbGUKICAgKiBAcGFyYW0gIENhbGxiYWNrSUQgSUQgb2YgdGhlIGNhbGxiYWNrIHRvIGJlIHVucmVnaXN0ZXJlZAogICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKQEAgLTM4Miw4ICszNzgsNiBAQAogewogICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CiAKLSAgLyogUHJvY2VzcyBsb2NrZWQgKi8KLSAgX19IQUxfTE9DSyhocm5nKTsKIAogICBpZiAoSEFMX1JOR19TVEFURV9SRUFEWSA9PSBocm5nLT5TdGF0ZSkKICAgewpAQCAtNDM3LDggKzQzMSw2IEBACiAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKICAgfQogCi0gIC8qIFJlbGVhc2UgTG9jayAqLwotICBfX0hBTF9VTkxPQ0soaHJuZyk7CiAgIHJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTc2OCw3ICs3NjAsNyBAQAogICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBSTkcuCiAgICogQHJldHZhbCByYW5kb20gdmFsdWUKICAgKi8KLXVpbnQzMl90IEhBTF9STkdfUmVhZExhc3RSYW5kb21OdW1iZXIoUk5HX0hhbmRsZVR5cGVEZWYgKmhybmcpCit1aW50MzJfdCBIQUxfUk5HX1JlYWRMYXN0UmFuZG9tTnVtYmVyKGNvbnN0IFJOR19IYW5kbGVUeXBlRGVmICpocm5nKQogewogICByZXR1cm4gKGhybmctPlJhbmRvbU51bWJlcik7CiB9CkBAIC04MzAsNyArODIyLDcgQEAKICAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgUk5HLgogICAqIEByZXR2YWwgSEFMIHN0YXRlCiAgICovCi1IQUxfUk5HX1N0YXRlVHlwZURlZiBIQUxfUk5HX0dldFN0YXRlKFJOR19IYW5kbGVUeXBlRGVmICpocm5nKQorSEFMX1JOR19TdGF0ZVR5cGVEZWYgSEFMX1JOR19HZXRTdGF0ZShjb25zdCBSTkdfSGFuZGxlVHlwZURlZiAqaHJuZykKIHsKICAgcmV0dXJuIGhybmctPlN0YXRlOwogfQpAQCAtODQwLDcgKzgzMiw3IEBACiAgICogQHBhcmFtICBocm5nOiBwb2ludGVyIHRvIGEgUk5HX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlLgogICAqIEByZXR2YWwgUk5HIEVycm9yIENvZGUKICAgKi8KLXVpbnQzMl90IEhBTF9STkdfR2V0RXJyb3IoUk5HX0hhbmRsZVR5cGVEZWYgKmhybmcpCit1aW50MzJfdCBIQUxfUk5HX0dldEVycm9yKGNvbnN0IFJOR19IYW5kbGVUeXBlRGVmICpocm5nKQogewogICAvKiBSZXR1cm4gUk5HIEVycm9yIENvZGUgKi8KICAgcmV0dXJuIGhybmctPkVycm9yQ29kZTsKQEAgLTg2NCwzICs4NTYsNCBAQAogLyoqCiAgICogQH0KICAgKi8KKwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjJ4eF9oYWxfcnRjLmMgYi9TcmMvc3RtMzJmMnh4X2hhbF9ydGMuYwppbmRleCBhYzk3NWYwLi4zMGZlNTJjIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmMnh4X2hhbF9ydGMuYworKysgYi9TcmMvc3RtMzJmMnh4X2hhbF9ydGMuYwpAQCAtNCwxMCArNCwxMCBAQAogICAqIEBhdXRob3IgIE1DRCBBcHBsaWNhdGlvbiBUZWFtCiAgICogQGJyaWVmICAgUlRDIEhBTCBtb2R1bGUgZHJpdmVyLgogICAqICAgICAgICAgIFRoaXMgZmlsZSBwcm92aWRlcyBmaXJtd2FyZSBmdW5jdGlvbnMgdG8gbWFuYWdlIHRoZSBmb2xsb3dpbmcKLSAgKiAgICAgICAgICBmdW5jdGlvbmFsaXRpZXMgb2YgdGhlIFJlYWwgVGltZSBDbG9jayAoUlRDKSBwZXJpcGhlcmFsOgorICAqICAgICAgICAgIGZ1bmN0aW9uYWxpdGllcyBvZiB0aGUgUmVhbC1UaW1lIENsb2NrIChSVEMpIHBlcmlwaGVyYWw6CiAgICogICAgICAgICAgICsgSW5pdGlhbGl6YXRpb24gYW5kIGRlLWluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucwotICAqICAgICAgICAgICArIFJUQyBUaW1lIGFuZCBEYXRlIGZ1bmN0aW9ucwotICAqICAgICAgICAgICArIFJUQyBBbGFybSBmdW5jdGlvbnMKKyAgKiAgICAgICAgICAgKyBSVEMgQ2FsZW5kYXIgKFRpbWUgYW5kIERhdGUpIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zCisgICogICAgICAgICAgICsgUlRDIEFsYXJtcyAoQWxhcm0gQSBhbmQgQWxhcm0gQikgY29uZmlndXJhdGlvbiBmdW5jdGlvbnMKICAgKiAgICAgICAgICAgKyBQZXJpcGhlcmFsIENvbnRyb2wgZnVuY3Rpb25zCiAgICogICAgICAgICAgICsgUGVyaXBoZXJhbCBTdGF0ZSBmdW5jdGlvbnMKICAgKgpAQCAtMjQsMTIgKzI0LDEyIEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICBAdmVyYmF0aW0KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICAgICAgICAgICMjIyMjIEJhY2t1cCBEb21haW4gT3BlcmF0aW5nIENvbmRpdGlvbiAjIyMjIworICAgICAgICAgICAgICAgIyMjIyMgUlRDIGFuZCBCYWNrdXAgRG9tYWluIE9wZXJhdGluZyBDb25kaXRpb24gIyMjIyMKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIFsuLl0gVGhlIHJlYWwtdGltZSBjbG9jayAoUlRDKSwgdGhlIFJUQyBiYWNrdXAgcmVnaXN0ZXJzLCBhbmQgdGhlIGJhY2t1cAogICAgICAgIFNSQU0gKEJLUCBTUkFNKSBjYW4gYmUgcG93ZXJlZCBmcm9tIHRoZSBWQkFUIHZvbHRhZ2Ugd2hlbiB0aGUgbWFpbgogICAgICAgIFZERCBzdXBwbHkgaXMgcG93ZXJlZCBvZmYuCi0gICAgICAgVG8gcmV0YWluIHRoZSBjb250ZW50IG9mIHRoZSBSVEMgYmFja3VwIHJlZ2lzdGVycywgYmFja3VwIFNSQU0sIGFuZCBzdXBwbHkKKyAgICAgICBUbyByZXRhaW4gdGhlIGNvbnRlbnQgb2YgdGhlIFJUQyBiYWNrdXAgcmVnaXN0ZXJzLCBCS1AgU1JBTSwgYW5kIHN1cHBseQogICAgICAgIHRoZSBSVEMgd2hlbiBWREQgaXMgdHVybmVkIG9mZiwgVkJBVCBwaW4gY2FuIGJlIGNvbm5lY3RlZCB0byBhbiBvcHRpb25hbAogICAgICAgIHN0YW5kYnkgdm9sdGFnZSBzdXBwbGllZCBieSBhIGJhdHRlcnkgb3IgYnkgYW5vdGhlciBzb3VyY2UuCiAKQEAgLTM3LDI3ICszNywyNSBAQAogICAgICAgIG9mZiwgdGhlIFZCQVQgcGluIHBvd2VycyB0aGUgZm9sbG93aW5nIGJsb2NrczoKICAgICAoIykgVGhlIFJUQwogICAgICgjKSBUaGUgTFNFIG9zY2lsbGF0b3IKLSAgICAoIykgVGhlIGJhY2t1cCBTUkFNIHdoZW4gdGhlIGxvdyBwb3dlciBiYWNrdXAgcmVndWxhdG9yIGlzIGVuYWJsZWQKLSAgICAoIykgUEMxMyB0byBQQzE1IEkvT3MsIHBsdXMgUEk4IEkvTyAod2hlbiBhdmFpbGFibGUpCisgICAgKCMpIFRoZSBCS1AgU1JBTSB3aGVuIHRoZSBsb3cgcG93ZXIgYmFja3VwIHJlZ3VsYXRvciBpcyBlbmFibGVkCiAKICAgWy4uXSBXaGVuIHRoZSBiYWNrdXAgZG9tYWluIGlzIHN1cHBsaWVkIGJ5IFZERCAoYW5hbG9nIHN3aXRjaCBjb25uZWN0ZWQgdG8gVkREKSwKICAgICAgICB0aGUgZm9sbG93aW5nIHBpbnMgYXJlIGF2YWlsYWJsZToKICAgICAoIykgUEMxNCBhbmQgUEMxNSBjYW4gYmUgdXNlZCBhcyBlaXRoZXIgR1BJTyBvciBMU0UgcGlucwogICAgICgjKSBQQzEzIGNhbiBiZSB1c2VkIGFzIGEgR1BJTyBvciBhcyB0aGUgUlRDX0FGMSBwaW4KLSAgICAoIykgUEk4IGNhbiBiZSB1c2VkIGFzIGEgR1BJTyBvciBhcyB0aGUgUlRDX0FGMiBwaW4KIAogICBbLi5dIFdoZW4gdGhlIGJhY2t1cCBkb21haW4gaXMgc3VwcGxpZWQgYnkgVkJBVCAoYW5hbG9nIHN3aXRjaCBjb25uZWN0ZWQgdG8gVkJBVAogICAgICAgIGJlY2F1c2UgVkREIGlzIG5vdCBwcmVzZW50KSwgdGhlIGZvbGxvd2luZyBwaW5zIGFyZSBhdmFpbGFibGU6CiAgICAgKCMpIFBDMTQgYW5kIFBDMTUgY2FuIGJlIHVzZWQgYXMgTFNFIHBpbnMgb25seQogICAgICgjKSBQQzEzIGNhbiBiZSB1c2VkIGFzIHRoZSBSVENfQUYxIHBpbgotICAgICgjKSBQSTggY2FuIGJlIHVzZWQgYXMgdGhlIFJUQ19BRjIgcGluCiAKICAgICAgICAgICAgICAgICAgICAjIyMjIyBCYWNrdXAgRG9tYWluIFJlc2V0ICMjIyMjCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBbLi5dIFRoZSBiYWNrdXAgZG9tYWluIHJlc2V0IHNldHMgYWxsIFJUQyByZWdpc3RlcnMgYW5kIHRoZSBSQ0NfQkRDUiByZWdpc3RlcgotICAgICAgIHRvIHRoZWlyIHJlc2V0IHZhbHVlcy4gVGhlIEJLUFNSQU0gaXMgbm90IGFmZmVjdGVkIGJ5IHRoaXMgcmVzZXQuIFRoZSBvbmx5Ci0gICAgICAgd2F5IHRvIHJlc2V0IHRoZSBCS1BTUkFNIGlzIHRocm91Z2ggdGhlIEZsYXNoIGludGVyZmFjZSBieSByZXF1ZXN0aW5nCi0gICAgICAgYSBwcm90ZWN0aW9uIGxldmVsIGNoYW5nZSBmcm9tIDEgdG8gMC4KKyAgICAgICB0byB0aGVpciByZXNldCB2YWx1ZXMuCisgICAgICAgVGhlIEJLUCBTUkFNIGlzIG5vdCBhZmZlY3RlZCBieSB0aGlzIHJlc2V0LiBUaGUgb25seSB3YXkgdG8gcmVzZXQgdGhlIEJLUAorICAgICAgIFNSQU0gaXMgdGhyb3VnaCB0aGUgRmxhc2ggaW50ZXJmYWNlIGJ5IHJlcXVlc3RpbmcgYSBwcm90ZWN0aW9uIGxldmVsCisgICAgICAgY2hhbmdlIGZyb20gMSB0byAwLgogICBbLi5dIEEgYmFja3VwIGRvbWFpbiByZXNldCBpcyBnZW5lcmF0ZWQgd2hlbiBvbmUgb2YgdGhlIGZvbGxvd2luZyBldmVudHMgb2NjdXJzOgogICAgICgjKSBTb2Z0d2FyZSByZXNldCwgdHJpZ2dlcmVkIGJ5IHNldHRpbmcgdGhlIEJEUlNUIGJpdCBpbiB0aGUKICAgICAgICAgUkNDIEJhY2t1cCBkb21haW4gY29udHJvbCByZWdpc3RlciAoUkNDX0JEQ1IpLgpAQCAtNjUsMTkgKzYzLDE4IEBACiAKICAgICAgICAgICAgICAgICAgICAjIyMjIyBCYWNrdXAgRG9tYWluIEFjY2VzcyAjIyMjIwogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgWy4uXSBBZnRlciByZXNldCwgdGhlIGJhY2t1cCBkb21haW4gKFJUQyByZWdpc3RlcnMsIFJUQyBiYWNrdXAgZGF0YQotICAgICAgIHJlZ2lzdGVycyBhbmQgYmFja3VwIFNSQU0pIGlzIHByb3RlY3RlZCBhZ2FpbnN0IHBvc3NpYmxlIHVud2FudGVkIHdyaXRlCi0gICAgICAgYWNjZXNzZXMuCisgIFsuLl0gQWZ0ZXIgcmVzZXQsIHRoZSBiYWNrdXAgZG9tYWluIChSVEMgcmVnaXN0ZXJzLCBSVEMgYmFja3VwIGRhdGEgcmVnaXN0ZXJzCisgICAgICAgYW5kIEJLUCBTUkFNKSBpcyBwcm90ZWN0ZWQgYWdhaW5zdCBwb3NzaWJsZSB1bndhbnRlZCB3cml0ZSBhY2Nlc3Nlcy4KICAgWy4uXSBUbyBlbmFibGUgYWNjZXNzIHRvIHRoZSBSVEMgRG9tYWluIGFuZCBSVEMgcmVnaXN0ZXJzLCBwcm9jZWVkIGFzIGZvbGxvd3M6CiAgICAgKCspIEVuYWJsZSB0aGUgUG93ZXIgQ29udHJvbGxlciAoUFdSKSBBUEIxIGludGVyZmFjZSBjbG9jayB1c2luZyB0aGUKLSAgICAgICAgX19IQUxfUkNDX1BXUl9DTEtfRU5BQkxFKCkgZnVuY3Rpb24uCisgICAgICAgIF9fSEFMX1JDQ19QV1JfQ0xLX0VOQUJMRSgpIG1hY3JvLgogICAgICgrKSBFbmFibGUgYWNjZXNzIHRvIFJUQyBkb21haW4gdXNpbmcgdGhlIEhBTF9QV1JfRW5hYmxlQmtVcEFjY2VzcygpIGZ1bmN0aW9uLgotICAgICgrKSBTZWxlY3QgdGhlIFJUQyBjbG9jayBzb3VyY2UgdXNpbmcgdGhlIF9fSEFMX1JDQ19SVENfQ09ORklHKCkgZnVuY3Rpb24uCi0gICAgKCspIEVuYWJsZSBSVEMgQ2xvY2sgdXNpbmcgdGhlIF9fSEFMX1JDQ19SVENfRU5BQkxFKCkgZnVuY3Rpb24uCisgICAgKCspIFNlbGVjdCB0aGUgUlRDIGNsb2NrIHNvdXJjZSB1c2luZyB0aGUgX19IQUxfUkNDX1JUQ19DT05GSUcoKSBtYWNyby4KKyAgICAoKykgRW5hYmxlIFJUQyBDbG9jayB1c2luZyB0aGUgX19IQUxfUkNDX1JUQ19FTkFCTEUoKSBtYWNyby4KIAotCi0gICAgICAgICAgICAgICAgICAjIyMjIyBIb3cgdG8gdXNlIHRoaXMgZHJpdmVyICMjIyMjCi0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjIEhvdyB0byB1c2UgdGhpcyBkcml2ZXIgIyMjIyMKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIFsuLl0KICAgICAoKykgRW5hYmxlIHRoZSBSVEMgZG9tYWluIGFjY2VzcyAoc2VlIGRlc2NyaXB0aW9uIGluIHRoZSBzZWN0aW9uIGFib3ZlKS4KICAgICAoKykgQ29uZmlndXJlIHRoZSBSVEMgUHJlc2NhbGVyIChBc3luY2hyb25vdXMgYW5kIFN5bmNocm9ub3VzKSBhbmQgUlRDIGhvdXIKQEAgLTg4LDEzICs4NSwyMSBAQAogICBbLi5dCiAgICAgKCspIFRvIGNvbmZpZ3VyZSB0aGUgUlRDIENhbGVuZGFyIChUaW1lIGFuZCBEYXRlKSB1c2UgdGhlIEhBTF9SVENfU2V0VGltZSgpCiAgICAgICAgIGFuZCBIQUxfUlRDX1NldERhdGUoKSBmdW5jdGlvbnMuCi0gICAgKCspIFRvIHJlYWQgdGhlIFJUQyBDYWxlbmRhciwgdXNlIHRoZSBIQUxfUlRDX0dldFRpbWUoKSBhbmQgSEFMX1JUQ19HZXREYXRlKCkgZnVuY3Rpb25zLgorICAgICgrKSBUbyByZWFkIHRoZSBSVEMgQ2FsZW5kYXIsIHVzZSB0aGUgSEFMX1JUQ19HZXRUaW1lKCkgYW5kIEhBTF9SVENfR2V0RGF0ZSgpCisgICAgICAgIGZ1bmN0aW9ucy4KKyAgICAoKykgVG8gbWFuYWdlIHRoZSBSVEMgc3VtbWVyIG9yIHdpbnRlciB0aW1lIGNoYW5nZSwgdXNlIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgZnVuY3Rpb25zOgorICAgICAgICAoKyspIEhBTF9SVENfRFNUX0FkZDFIb3VyKCkgb3IgSEFMX1JUQ19EU1RfU3ViMUhvdXIgdG8gYWRkIG9yIHN1YnRyYWN0CisgICAgICAgICAgICAgMSBob3VyIGZyb20gdGhlIGNhbGVuZGFyIHRpbWUuCisgICAgICAgICgrKykgSEFMX1JUQ19EU1RfU2V0U3RvcmVPcGVyYXRpb24oKSBvciBIQUxfUlRDX0RTVF9DbGVhclN0b3JlT3BlcmF0aW9uCisgICAgICAgICAgICAgdG8gbWVtb3JpemUgd2hldGhlciB0aGUgdGltZSBjaGFuZ2UgaGFzIGJlZW4gcGVyZm9ybWVkIG9yIG5vdC4KIAogICAqKiogQWxhcm0gY29uZmlndXJhdGlvbiAqKioKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIFsuLl0KICAgICAoKykgVG8gY29uZmlndXJlIHRoZSBSVEMgQWxhcm0gdXNlIHRoZSBIQUxfUlRDX1NldEFsYXJtKCkgZnVuY3Rpb24uCi0gICAgICAgIFlvdSBjYW4gYWxzbyBjb25maWd1cmUgdGhlIFJUQyBBbGFybSB3aXRoIGludGVycnVwdCBtb2RlIHVzaW5nIHRoZSBIQUxfUlRDX1NldEFsYXJtX0lUKCkgZnVuY3Rpb24uCisgICAgICAgIFlvdSBjYW4gYWxzbyBjb25maWd1cmUgdGhlIFJUQyBBbGFybSB3aXRoIGludGVycnVwdCBtb2RlIHVzaW5nIHRoZQorICAgICAgICBIQUxfUlRDX1NldEFsYXJtX0lUKCkgZnVuY3Rpb24uCiAgICAgKCspIFRvIHJlYWQgdGhlIFJUQyBBbGFybSwgdXNlIHRoZSBIQUxfUlRDX0dldEFsYXJtKCkgZnVuY3Rpb24uCiAKICAgICAgICAgICAgICAgICAgICMjIyMjIFJUQyBhbmQgbG93IHBvd2VyIG1vZGVzICMjIyMjCkBAIC0xMDIsNjkgKzEwNyw3MCBAQAogICBbLi5dIFRoZSBNQ1UgY2FuIGJlIHdva2VuIHVwIGZyb20gYSBsb3cgcG93ZXIgbW9kZSBieSBhbiBSVEMgYWx0ZXJuYXRlCiAgICAgICAgZnVuY3Rpb24uCiAgIFsuLl0gVGhlIFJUQyBhbHRlcm5hdGUgZnVuY3Rpb25zIGFyZSB0aGUgUlRDIGFsYXJtcyAoQWxhcm0gQSBhbmQgQWxhcm0gQiksCi0gICAgICAgUlRDIHdha2UtdXAsIFJUQyB0YW1wZXIgZXZlbnQgZGV0ZWN0aW9uIGFuZCBSVEMgdGltZSBzdGFtcCBldmVudCBkZXRlY3Rpb24uCisgICAgICAgUlRDIHdha2V1cCwgUlRDIHRhbXBlciBldmVudCBkZXRlY3Rpb24gYW5kIFJUQyB0aW1lc3RhbXAgZXZlbnQgZGV0ZWN0aW9uLgogICAgICAgIFRoZXNlIFJUQyBhbHRlcm5hdGUgZnVuY3Rpb25zIGNhbiB3YWtlIHVwIHRoZSBzeXN0ZW0gZnJvbSB0aGUgU3RvcCBhbmQKICAgICAgICBTdGFuZGJ5IGxvdyBwb3dlciBtb2Rlcy4KICAgWy4uXSBUaGUgc3lzdGVtIGNhbiBhbHNvIHdha2UgdXAgZnJvbSBsb3cgcG93ZXIgbW9kZXMgd2l0aG91dCBkZXBlbmRpbmcKLSAgICAgICBvbiBhbiBleHRlcm5hbCBpbnRlcnJ1cHQgKEF1dG8td2FrZS11cCBtb2RlKSwgYnkgdXNpbmcgdGhlIFJUQyBhbGFybQotICAgICAgIG9yIHRoZSBSVEMgd2FrZS11cCBldmVudHMuCisgICAgICAgb24gYW4gZXh0ZXJuYWwgaW50ZXJydXB0IChBdXRvLXdha2V1cCBtb2RlKSwgYnkgdXNpbmcgdGhlIFJUQyBhbGFybQorICAgICAgIG9yIHRoZSBSVEMgd2FrZXVwIGV2ZW50cy4KICAgWy4uXSBUaGUgUlRDIHByb3ZpZGVzIGEgcHJvZ3JhbW1hYmxlIHRpbWUgYmFzZSBmb3Igd2FraW5nIHVwIGZyb20gdGhlCiAgICAgICAgU3RvcCBvciBTdGFuZGJ5IG1vZGUgYXQgcmVndWxhciBpbnRlcnZhbHMuCi0gICAgICAgV2FrZS11cCBmcm9tIFNUT1AgYW5kIFNUQU5EQlkgbW9kZXMgaXMgcG9zc2libGUgb25seSB3aGVuIHRoZSBSVEMgY2xvY2sgc291cmNlCi0gICAgICAgaXMgTFNFIG9yIExTSS4KKyAgICAgICBXYWtldXAgZnJvbSBTVE9QIGFuZCBTVEFOREJZIG1vZGVzIGlzIHBvc3NpYmxlIG9ubHkgd2hlbiB0aGUgUlRDIGNsb2NrCisgICAgICAgc291cmNlIGlzIExTRSBvciBMU0kuCiAKICAgKioqIENhbGxiYWNrIHJlZ2lzdHJhdGlvbiAqKioKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIFsuLl0KICAgVGhlIGNvbXBpbGF0aW9uIGRlZmluZSAgVVNFX0hBTF9SVENfUkVHSVNURVJfQ0FMTEJBQ0tTIHdoZW4gc2V0IHRvIDEKICAgYWxsb3dzIHRoZSB1c2VyIHRvIGNvbmZpZ3VyZSBkeW5hbWljYWxseSB0aGUgZHJpdmVyIGNhbGxiYWNrcy4KLSAgVXNlIEZ1bmN0aW9uIEByZWYgSEFMX1JUQ19SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVnaXN0ZXIgYW4gaW50ZXJydXB0IGNhbGxiYWNrLgorICBVc2UgRnVuY3Rpb24gSEFMX1JUQ19SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVnaXN0ZXIgYW4gaW50ZXJydXB0IGNhbGxiYWNrLgogICBbLi5dCi0gIEZ1bmN0aW9uIEByZWYgSEFMX1JUQ19SZWdpc3RlckNhbGxiYWNrKCkgYWxsb3dzIHRvIHJlZ2lzdGVyIGZvbGxvd2luZyBjYWxsYmFja3M6CisgIEZ1bmN0aW9uIEhBTF9SVENfUmVnaXN0ZXJDYWxsYmFjaygpIGFsbG93cyB0byByZWdpc3RlciBmb2xsb3dpbmcgY2FsbGJhY2tzOgogICAgICgrKSBBbGFybUFFdmVudENhbGxiYWNrICAgICAgICAgIDogUlRDIEFsYXJtIEEgRXZlbnQgY2FsbGJhY2suCiAgICAgKCspIEFsYXJtQkV2ZW50Q2FsbGJhY2sgICAgICAgICAgOiBSVEMgQWxhcm0gQiBFdmVudCBjYWxsYmFjay4KLSAgICAoKykgVGltZVN0YW1wRXZlbnRDYWxsYmFjayAgICAgICA6IFJUQyBUaW1lU3RhbXAgRXZlbnQgY2FsbGJhY2suCisgICAgKCspIFRpbWVTdGFtcEV2ZW50Q2FsbGJhY2sgICAgICAgOiBSVEMgVGltZXN0YW1wIEV2ZW50IGNhbGxiYWNrLgogICAgICgrKSBXYWtlVXBUaW1lckV2ZW50Q2FsbGJhY2sgICAgIDogUlRDIFdha2VVcFRpbWVyIEV2ZW50IGNhbGxiYWNrLgogICAgICgrKSBUYW1wZXIxRXZlbnRDYWxsYmFjayAgICAgICAgIDogUlRDIFRhbXBlciAxIEV2ZW50IGNhbGxiYWNrLgogICAgICgrKSBNc3BJbml0Q2FsbGJhY2sgICAgICAgICAgICAgIDogUlRDIE1zcEluaXQgY2FsbGJhY2suCiAgICAgKCspIE1zcERlSW5pdENhbGxiYWNrICAgICAgICAgICAgOiBSVEMgTXNwRGVJbml0IGNhbGxiYWNrLgotICBbLi5dCQorICBbLi5dCiAgIFRoaXMgZnVuY3Rpb24gdGFrZXMgYXMgcGFyYW1ldGVycyB0aGUgSEFMIHBlcmlwaGVyYWwgaGFuZGxlLCB0aGUgQ2FsbGJhY2sgSUQKICAgYW5kIGEgcG9pbnRlciB0byB0aGUgdXNlciBjYWxsYmFjayBmdW5jdGlvbi4KICAgWy4uXQotICBVc2UgZnVuY3Rpb24gQHJlZiBIQUxfUlRDX1VuUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlc2V0IGEgY2FsbGJhY2sgdG8gdGhlIGRlZmF1bHQKKyAgVXNlIGZ1bmN0aW9uIEhBTF9SVENfVW5SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVzZXQgYSBjYWxsYmFjayB0byB0aGUgZGVmYXVsdAogICB3ZWFrIGZ1bmN0aW9uLgotICBAcmVmIEhBTF9SVENfVW5SZWdpc3RlckNhbGxiYWNrKCkgdGFrZXMgYXMgcGFyYW1ldGVycyB0aGUgSEFMIHBlcmlwaGVyYWwgaGFuZGxlLAorICBIQUxfUlRDX1VuUmVnaXN0ZXJDYWxsYmFjaygpIHRha2VzIGFzIHBhcmFtZXRlcnMgdGhlIEhBTCBwZXJpcGhlcmFsIGhhbmRsZSwKICAgYW5kIHRoZSBDYWxsYmFjayBJRC4KICAgVGhpcyBmdW5jdGlvbiBhbGxvd3MgdG8gcmVzZXQgZm9sbG93aW5nIGNhbGxiYWNrczoKICAgICAoKykgQWxhcm1BRXZlbnRDYWxsYmFjayAgICAgICAgICA6IFJUQyBBbGFybSBBIEV2ZW50IGNhbGxiYWNrLgogICAgICgrKSBBbGFybUJFdmVudENhbGxiYWNrICAgICAgICAgIDogUlRDIEFsYXJtIEIgRXZlbnQgY2FsbGJhY2suCi0gICAgKCspIFRpbWVTdGFtcEV2ZW50Q2FsbGJhY2sgICAgICAgOiBSVEMgVGltZVN0YW1wIEV2ZW50IGNhbGxiYWNrLgorICAgICgrKSBUaW1lU3RhbXBFdmVudENhbGxiYWNrICAgICAgIDogUlRDIFRpbWVzdGFtcCBFdmVudCBjYWxsYmFjay4KICAgICAoKykgV2FrZVVwVGltZXJFdmVudENhbGxiYWNrICAgICA6IFJUQyBXYWtlVXBUaW1lciBFdmVudCBjYWxsYmFjay4KICAgICAoKykgVGFtcGVyMUV2ZW50Q2FsbGJhY2sgICAgICAgICA6IFJUQyBUYW1wZXIgMSBFdmVudCBjYWxsYmFjay4KICAgICAoKykgTXNwSW5pdENhbGxiYWNrICAgICAgICAgICAgICA6IFJUQyBNc3BJbml0IGNhbGxiYWNrLgogICAgICgrKSBNc3BEZUluaXRDYWxsYmFjayAgICAgICAgICAgIDogUlRDIE1zcERlSW5pdCBjYWxsYmFjay4KICAgWy4uXQotICBCeSBkZWZhdWx0LCBhZnRlciB0aGUgQHJlZiBIQUxfUlRDX0luaXQoKSBhbmQgd2hlbiB0aGUgc3RhdGUgaXMgSEFMX1JUQ19TVEFURV9SRVNFVCwKLSAgYWxsIGNhbGxiYWNrcyBhcmUgc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIHdlYWsgZnVuY3Rpb25zIDoKLSAgZXhhbXBsZXMgQHJlZiBBbGFybUFFdmVudENhbGxiYWNrKCksIEByZWYgV2FrZVVwVGltZXJFdmVudENhbGxiYWNrKCkuCi0gIEV4Y2VwdGlvbiBkb25lIGZvciBNc3BJbml0IGFuZCBNc3BEZUluaXQgY2FsbGJhY2tzIHRoYXQgYXJlIHJlc2V0IHRvIHRoZSBsZWdhY3kgd2VhayBmdW5jdGlvbgotICBpbiB0aGUgQHJlZiBIQUxfUlRDX0luaXQoKS9AcmVmIEhBTF9SVENfRGVJbml0KCkgb25seSB3aGVuIHRoZXNlIGNhbGxiYWNrcyBhcmUgbnVsbAotICAobm90IHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCkuCi0gIElmIG5vdCwgTXNwSW5pdCBvciBNc3BEZUluaXQgYXJlIG5vdCBudWxsLCBAcmVmIEhBTF9SVENfSW5pdCgpL0ByZWYgSEFMX1JUQ19EZUluaXQoKQotICBrZWVwIGFuZCB1c2UgdGhlIHVzZXIgTXNwSW5pdC9Nc3BEZUluaXQgY2FsbGJhY2tzIChyZWdpc3RlcmVkIGJlZm9yZWhhbmQpCisgIEJ5IGRlZmF1bHQsIGFmdGVyIHRoZSBIQUxfUlRDX0luaXQoKSBhbmQgd2hlbiB0aGUgc3RhdGUgaXMgSEFMX1JUQ19TVEFURV9SRVNFVCwKKyAgYWxsIGNhbGxiYWNrcyBhcmUgc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIHdlYWsgZnVuY3Rpb25zOgorICBleGFtcGxlcyBBbGFybUFFdmVudENhbGxiYWNrKCksIFdha2VVcFRpbWVyRXZlbnRDYWxsYmFjaygpLgorICBFeGNlcHRpb24gZG9uZSBmb3IgTXNwSW5pdCgpIGFuZCBNc3BEZUluaXQoKSBjYWxsYmFja3MgdGhhdCBhcmUgcmVzZXQgdG8gdGhlCisgIGxlZ2FjeSB3ZWFrIGZ1bmN0aW9uIGluIHRoZSBIQUxfUlRDX0luaXQoKS9IQUxfUlRDX0RlSW5pdCgpIG9ubHkKKyAgd2hlbiB0aGVzZSBjYWxsYmFja3MgYXJlIG51bGwgKG5vdCByZWdpc3RlcmVkIGJlZm9yZWhhbmQpLgorICBJZiBub3QsIE1zcEluaXQoKSBvciBNc3BEZUluaXQoKSBhcmUgbm90IG51bGwsIEhBTF9SVENfSW5pdCgpL0hBTF9SVENfRGVJbml0KCkKKyAga2VlcCBhbmQgdXNlIHRoZSB1c2VyIE1zcEluaXQoKS9Nc3BEZUluaXQoKSBjYWxsYmFja3MgKHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCkuCiAgIFsuLl0KICAgQ2FsbGJhY2tzIGNhbiBiZSByZWdpc3RlcmVkL3VucmVnaXN0ZXJlZCBpbiBIQUxfUlRDX1NUQVRFX1JFQURZIHN0YXRlIG9ubHkuCi0gIEV4Y2VwdGlvbiBkb25lIE1zcEluaXQvTXNwRGVJbml0IHRoYXQgY2FuIGJlIHJlZ2lzdGVyZWQvdW5yZWdpc3RlcmVkCi0gIGluIEhBTF9SVENfU1RBVEVfUkVBRFkgb3IgSEFMX1JUQ19TVEFURV9SRVNFVCBzdGF0ZSwKLSAgdGh1cyByZWdpc3RlcmVkICh1c2VyKSBNc3BJbml0L0RlSW5pdCBjYWxsYmFja3MgY2FuIGJlIHVzZWQgZHVyaW5nIHRoZSBJbml0L0RlSW5pdC4KLSAgSW4gdGhhdCBjYXNlIGZpcnN0IHJlZ2lzdGVyIHRoZSBNc3BJbml0L01zcERlSW5pdCB1c2VyIGNhbGxiYWNrcwotICB1c2luZyBAcmVmIEhBTF9SVENfUmVnaXN0ZXJDYWxsYmFjaygpIGJlZm9yZSBjYWxsaW5nIEByZWYgSEFMX1JUQ19EZUluaXQoKQotICBvciBAcmVmIEhBTF9SVENfSW5pdCgpIGZ1bmN0aW9uLgorICBFeGNlcHRpb24gZG9uZSBNc3BJbml0KCkvTXNwRGVJbml0KCkgdGhhdCBjYW4gYmUgcmVnaXN0ZXJlZC91bnJlZ2lzdGVyZWQKKyAgaW4gSEFMX1JUQ19TVEFURV9SRUFEWSBvciBIQUxfUlRDX1NUQVRFX1JFU0VUIHN0YXRlLgorICBUaHVzIHJlZ2lzdGVyZWQgKHVzZXIpIE1zcEluaXQoKS9Nc3BEZUluaXQoKSBjYWxsYmFja3MgY2FuIGJlIHVzZWQgZHVyaW5nIHRoZQorICBJbml0L0RlSW5pdC4KKyAgSW4gdGhhdCBjYXNlIGZpcnN0IHJlZ2lzdGVyIHRoZSBNc3BJbml0KCkvTXNwRGVJbml0KCkgdXNlciBjYWxsYmFja3MKKyAgdXNpbmcgSEFMX1JUQ19SZWdpc3RlckNhbGxiYWNrKCkgYmVmb3JlIGNhbGxpbmcgSEFMX1JUQ19EZUluaXQoKQorICBvciBIQUxfUlRDX0luaXQoKSBmdW5jdGlvbnMuCiAgIFsuLl0KICAgV2hlbiBUaGUgY29tcGlsYXRpb24gZGVmaW5lIFVTRV9IQUxfUlRDX1JFR0lTVEVSX0NBTExCQUNLUyBpcyBzZXQgdG8gMCBvcgotICBub3QgZGVmaW5lZCwgdGhlIGNhbGxiYWNrIHJlZ2lzdHJhdGlvbiBmZWF0dXJlIGlzIG5vdCBhdmFpbGFibGUgYW5kIGFsbCBjYWxsYmFja3MKLSAgYXJlIHNldCB0byB0aGUgY29ycmVzcG9uZGluZyB3ZWFrIGZ1bmN0aW9ucy4KKyAgbm90IGRlZmluZWQsIHRoZSBjYWxsYmFjayByZWdpc3RyYXRpb24gZmVhdHVyZSBpcyBub3QgYXZhaWxhYmxlIGFuZCBhbGwKKyAgY2FsbGJhY2tzIGFyZSBzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgd2VhayBmdW5jdGlvbnMuCiAKICAgQGVuZHZlcmJhdGltCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTc4LDcgKzE4NCw3IEBACiAgICovCiAKIC8qKiBAZGVmZ3JvdXAgUlRDIFJUQwotICAqIEBicmllZiBSVEMgSEFMIG1vZHVsZSBkcml2ZXIKKyAgKiBAYnJpZWYgICAgUlRDIEhBTCBtb2R1bGUgZHJpdmVyCiAgICogQHsKICAgKi8KIApAQCAtMTg5LDE0ICsxOTUsMTQgQEAKIC8qIFByaXZhdGUgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBQcml2YXRlIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogUHJpdmF0ZSBmdW5jdGlvbiBwcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIFByaXZhdGUgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBFeHBvcnRlZCBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKiogQGRlZmdyb3VwIFJUQ19FeHBvcnRlZF9GdW5jdGlvbnMgUlRDIEV4cG9ydGVkIEZ1bmN0aW9ucwogICAqIEB7CiAgICovCiAKIC8qKiBAZGVmZ3JvdXAgUlRDX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDEgSW5pdGlhbGl6YXRpb24gYW5kIGRlLWluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucwotICAqICBAYnJpZWYgICAgSW5pdGlhbGl6YXRpb24gYW5kIENvbmZpZ3VyYXRpb24gZnVuY3Rpb25zCisgICogQGJyaWVmICAgIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucwogICAqCiBAdmVyYmF0aW0KICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0yMTgsMTEgKzIyNCwxMSBAQAogICAgICAgICAgICAgIGFuZCBpdHMgdmFsdWUgY2FuIGJlIHVwZGF0ZWQuIFdoZW4gdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIGlzCiAgICAgICAgICAgICAgY29tcGxldGUsIHRoZSBjYWxlbmRhciByZXN0YXJ0cyBjb3VudGluZyBhZnRlciA0IFJUQ0NMSyBjeWNsZXMuCiAgICAgICAgICAoIykgVG8gcmVhZCB0aGUgY2FsZW5kYXIgdGhyb3VnaCB0aGUgc2hhZG93IHJlZ2lzdGVycyBhZnRlciBDYWxlbmRhcgotICAgICAgICAgICAgIGluaXRpYWxpemF0aW9uLCBjYWxlbmRhciB1cGRhdGUgb3IgYWZ0ZXIgd2FrZS11cCBmcm9tIGxvdyBwb3dlciBtb2RlcworICAgICAgICAgICAgIGluaXRpYWxpemF0aW9uLCBjYWxlbmRhciB1cGRhdGUgb3IgYWZ0ZXIgd2FrZXVwIGZyb20gbG93IHBvd2VyIG1vZGVzCiAgICAgICAgICAgICAgdGhlIHNvZnR3YXJlIG11c3QgZmlyc3QgY2xlYXIgdGhlIFJTRiBmbGFnLiBUaGUgc29mdHdhcmUgbXVzdCB0aGVuCiAgICAgICAgICAgICAgd2FpdCB1bnRpbCBpdCBpcyBzZXQgYWdhaW4gYmVmb3JlIHJlYWRpbmcgdGhlIGNhbGVuZGFyLCB3aGljaCBtZWFucwogICAgICAgICAgICAgIHRoYXQgdGhlIGNhbGVuZGFyIHJlZ2lzdGVycyBoYXZlIGJlZW4gY29ycmVjdGx5IGNvcGllZCBpbnRvIHRoZQotICAgICAgICAgICAgIFJUQ19UUiBhbmQgUlRDX0RSIHNoYWRvdyByZWdpc3RlcnMuVGhlIEhBTF9SVENfV2FpdEZvclN5bmNocm8oKSBmdW5jdGlvbgorICAgICAgICAgICAgIFJUQ19UUiBhbmQgUlRDX0RSIHNoYWRvdyByZWdpc3RlcnMuIFRoZSBIQUxfUlRDX1dhaXRGb3JTeW5jaHJvKCkgZnVuY3Rpb24KICAgICAgICAgICAgICBpbXBsZW1lbnRzIHRoZSBhYm92ZSBzb2Z0d2FyZSBzZXF1ZW5jZSAoUlNGIGNsZWFyIGFuZCBSU0YgY2hlY2spLgogCiBAZW5kdmVyYmF0aW0KQEAgLTIzNywxMyArMjQzLDE2IEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfUlRDX0luaXQoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpCiB7Ci0gIC8qIENoZWNrIHRoZSBSVEMgcGVyaXBoZXJhbCBzdGF0ZSAqLworICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfRVJST1I7CisKKyAgLyogQ2hlY2sgUlRDIGhhbmRsZXIgdmFsaWRpdHkgKi8KICAgaWYgKGhydGMgPT0gTlVMTCkKICAgewogICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KIAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLworICBhc3NlcnRfcGFyYW0oSVNfUlRDX0FMTF9JTlNUQU5DRShocnRjLT5JbnN0YW5jZSkpOwogICBhc3NlcnRfcGFyYW0oSVNfUlRDX0hPVVJfRk9STUFUKGhydGMtPkluaXQuSG91ckZvcm1hdCkpOwogICBhc3NlcnRfcGFyYW0oSVNfUlRDX0FTWU5DSF9QUkVESVYoaHJ0Yy0+SW5pdC5Bc3luY2hQcmVkaXYpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19TWU5DSF9QUkVESVYoaHJ0Yy0+SW5pdC5TeW5jaFByZWRpdikpOwpAQCAtMjc1LDcgKzI4NCw3IEBACiAgICAgICBocnRjLT5Nc3BEZUluaXRDYWxsYmFjayA9IEhBTF9SVENfTXNwRGVJbml0OwogICAgIH0KICAgfQotI2Vsc2UKKyNlbHNlIC8qIFVTRV9IQUxfUlRDX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogICBpZiAoaHJ0Yy0+U3RhdGUgPT0gSEFMX1JUQ19TVEFURV9SRVNFVCkKICAgewogICAgIC8qIEFsbG9jYXRlIGxvY2sgcmVzb3VyY2UgYW5kIGluaXRpYWxpemUgaXQgKi8KQEAgLTI4NCw3MSArMjkzLDcxIEBACiAgICAgLyogSW5pdGlhbGl6ZSBSVEMgTVNQICovCiAgICAgSEFMX1JUQ19Nc3BJbml0KGhydGMpOwogICB9Ci0jZW5kaWYgLyogKFVTRV9IQUxfUlRDX1JFR0lTVEVSX0NBTExCQUNLUykgKi8KKyNlbmRpZiAvKiBVU0VfSEFMX1JUQ19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KIAogICAvKiBTZXQgUlRDIHN0YXRlICovCiAgIGhydGMtPlN0YXRlID0gSEFMX1JUQ19TVEFURV9CVVNZOwogCi0gIC8qIERpc2FibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KLSAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9ESVNBQkxFKGhydGMpOwotCi0gIC8qIFNldCBJbml0aWFsaXphdGlvbiBtb2RlICovCi0gIGlmIChSVENfRW50ZXJJbml0TW9kZShocnRjKSAhPSBIQUxfT0spCisgIC8qIENoZWNrIHdoZXRoZXIgdGhlIGNhbGVuZGFyIG5lZWRzIHRvIGJlIGluaXRpYWxpemVkICovCisgIGlmIChfX0hBTF9SVENfSVNfQ0FMRU5EQVJfSU5JVElBTElaRUQoaHJ0YykgPT0gMFUpCiAgIHsKKyAgICAvKiBEaXNhYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCisgICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9ESVNBQkxFKGhydGMpOworCisgICAgLyogRW50ZXIgSW5pdGlhbGl6YXRpb24gbW9kZSAqLworICAgIHN0YXR1cyA9IFJUQ19FbnRlckluaXRNb2RlKGhydGMpOworCisgICAgaWYgKHN0YXR1cyA9PSBIQUxfT0spCisgICAgeworICAgICAgLyogQ2xlYXIgUlRDX0NSIEZNVCwgT1NFTCBhbmQgUE9MIEJpdHMgKi8KKyAgICAgIGhydGMtPkluc3RhbmNlLT5DUiAmPSAoKHVpbnQzMl90KX4oUlRDX0NSX0ZNVCB8IFJUQ19DUl9PU0VMIHwgUlRDX0NSX1BPTCkpOworICAgICAgLyogU2V0IFJUQ19DUiByZWdpc3RlciAqLworICAgICAgaHJ0Yy0+SW5zdGFuY2UtPkNSIHw9ICh1aW50MzJfdCkoaHJ0Yy0+SW5pdC5Ib3VyRm9ybWF0IHwgaHJ0Yy0+SW5pdC5PdXRQdXQgfCBocnRjLT5Jbml0Lk91dFB1dFBvbGFyaXR5KTsKKworICAgICAgLyogQ29uZmlndXJlIHRoZSBSVEMgUFJFUiAqLworICAgICAgaHJ0Yy0+SW5zdGFuY2UtPlBSRVIgPSAodWludDMyX3QpKGhydGMtPkluaXQuU3luY2hQcmVkaXYpOworICAgICAgaHJ0Yy0+SW5zdGFuY2UtPlBSRVIgfD0gKHVpbnQzMl90KShocnRjLT5Jbml0LkFzeW5jaFByZWRpdiA8PCBSVENfUFJFUl9QUkVESVZfQV9Qb3MpOworCisgICAgICAvKiBFeGl0IEluaXRpYWxpemF0aW9uIG1vZGUgKi8KKyAgICAgIHN0YXR1cyA9IFJUQ19FeGl0SW5pdE1vZGUoaHJ0Yyk7CisgICAgfQorCisgICAgaWYgKHN0YXR1cyA9PSBIQUxfT0spCisgICAgeworICAgICAgaHJ0Yy0+SW5zdGFuY2UtPlRBRkNSICY9ICh1aW50MzJfdCl+UlRDX09VVFBVVF9UWVBFX1BVU0hQVUxMOworICAgICAgaHJ0Yy0+SW5zdGFuY2UtPlRBRkNSIHw9ICh1aW50MzJfdCkoaHJ0Yy0+SW5pdC5PdXRQdXRUeXBlKTsKKyAgICB9CisKICAgICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KICAgICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0VOQUJMRShocnRjKTsKLQotICAgIC8qIFNldCBSVEMgc3RhdGUgKi8KLSAgICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfRVJST1I7Ci0KLSAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CiAgIGVsc2UKICAgewotICAgIC8qIENsZWFyIFJUQ19DUiBGTVQsIE9TRUwgYW5kIFBPTCBCaXRzICovCi0gICAgaHJ0Yy0+SW5zdGFuY2UtPkNSICY9ICgodWludDMyX3QpfihSVENfQ1JfRk1UIHwgUlRDX0NSX09TRUwgfCBSVENfQ1JfUE9MKSk7Ci0gICAgLyogU2V0IFJUQ19DUiByZWdpc3RlciAqLwotICAgIGhydGMtPkluc3RhbmNlLT5DUiB8PSAodWludDMyX3QpKGhydGMtPkluaXQuSG91ckZvcm1hdCB8IGhydGMtPkluaXQuT3V0UHV0IHwgaHJ0Yy0+SW5pdC5PdXRQdXRQb2xhcml0eSk7Ci0KLSAgICAvKiBDb25maWd1cmUgdGhlIFJUQyBQUkVSICovCi0gICAgaHJ0Yy0+SW5zdGFuY2UtPlBSRVIgPSAodWludDMyX3QpKGhydGMtPkluaXQuU3luY2hQcmVkaXYpOwotICAgIGhydGMtPkluc3RhbmNlLT5QUkVSIHw9ICh1aW50MzJfdCkoaHJ0Yy0+SW5pdC5Bc3luY2hQcmVkaXYgPDwgMTZVKTsKLQotICAgIC8qIEV4aXQgSW5pdGlhbGl6YXRpb24gbW9kZSAqLwotICAgIGhydGMtPkluc3RhbmNlLT5JU1IgJj0gKHVpbnQzMl90KX5SVENfSVNSX0lOSVQ7Ci0KLSAgICBpZiAoSEFMX1JUQ19XYWl0Rm9yU3luY2hybyhocnRjKSAhPSBIQUxfT0spCi0gICAgewotICAgICAgLyogRW5hYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCi0gICAgICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0VOQUJMRShocnRjKTsKLQotICAgICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX0VSUk9SOwotCi0gICAgICByZXR1cm4gSEFMX0VSUk9SOwotICAgIH0KLSAgICBocnRjLT5JbnN0YW5jZS0+VEFGQ1IgJj0gKHVpbnQzMl90KX5SVENfVEFGQ1JfQUxBUk1PVVRUWVBFOwotICAgIGhydGMtPkluc3RhbmNlLT5UQUZDUiB8PSAodWludDMyX3QpKGhydGMtPkluaXQuT3V0UHV0VHlwZSk7Ci0KLSAgICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KLSAgICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0VOQUJMRShocnRjKTsKLQotICAgIC8qIFNldCBSVEMgc3RhdGUgKi8KLSAgICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfUkVBRFk7Ci0KLSAgICByZXR1cm4gSEFMX09LOworICAgIC8qIFRoZSBjYWxlbmRhciBpcyBhbHJlYWR5IGluaXRpYWxpemVkICovCisgICAgc3RhdHVzID0gSEFMX09LOwogICB9CisKKyAgaWYgKHN0YXR1cyA9PSBIQUxfT0spCisgIHsKKyAgICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfUkVBRFk7CisgIH0KKworICByZXR1cm4gc3RhdHVzOwogfQogCiAvKioKICAgKiBAYnJpZWYgIERlSW5pdGlhbGl6ZXMgdGhlIFJUQyBwZXJpcGhlcmFsCiAgICogQHBhcmFtICBocnRjIHBvaW50ZXIgdG8gYSBSVENfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwogICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBSVEMuCi0gICogQG5vdGUgICBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgcmVzZXQgdGhlIFJUQyBCYWNrdXAgRGF0YSByZWdpc3RlcnMuCisgICogQG5vdGUgICBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHJlc2V0IHRoZSBSVEMgQmFja3VwIERhdGEgcmVnaXN0ZXJzLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1JUQ19EZUluaXQoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpCiB7Ci0gIHVpbnQzMl90IHRpY2tzdGFydCA9IDBVOworICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfRVJST1I7CisKKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KKyAgYXNzZXJ0X3BhcmFtKElTX1JUQ19BTExfSU5TVEFOQ0UoaHJ0Yy0+SW5zdGFuY2UpKTsKIAogICAvKiBTZXQgUlRDIHN0YXRlICovCiAgIGhydGMtPlN0YXRlID0gSEFMX1JUQ19TVEFURV9CVVNZOwpAQCAtMzU2LDEwNCArMzY1LDY3IEBACiAgIC8qIERpc2FibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9ESVNBQkxFKGhydGMpOwogCi0gIC8qIFNldCBJbml0aWFsaXphdGlvbiBtb2RlICovCi0gIGlmIChSVENfRW50ZXJJbml0TW9kZShocnRjKSAhPSBIQUxfT0spCi0gIHsKLSAgICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KLSAgICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0VOQUJMRShocnRjKTsKKyAgLyogRW50ZXIgSW5pdGlhbGl6YXRpb24gbW9kZSAqLworICBzdGF0dXMgPSBSVENfRW50ZXJJbml0TW9kZShocnRjKTsKIAotICAgIC8qIFNldCBSVEMgc3RhdGUgKi8KLSAgICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfRVJST1I7Ci0KLSAgICByZXR1cm4gSEFMX0VSUk9SOwotICB9Ci0gIGVsc2UKKyAgaWYgKHN0YXR1cyA9PSBIQUxfT0spCiAgIHsKLSAgICAvKiBSZXNldCBUUiwgRFIgYW5kIENSIHJlZ2lzdGVycyAqLworICAgIC8qIFJlc2V0IFJUQyByZWdpc3RlcnMgKi8KICAgICBocnRjLT5JbnN0YW5jZS0+VFIgPSAweDAwMDAwMDAwVTsKLSAgICBocnRjLT5JbnN0YW5jZS0+RFIgPSAweDAwMDAyMTAxVTsKLSAgICAvKiBSZXNldCBBbGwgQ1IgYml0cyBleGNlcHQgQ1JbMjowXSAqLwotICAgIGhydGMtPkluc3RhbmNlLT5DUiAmPSAweDAwMDAwMDA3VTsKLQotICAgIC8qIEdldCB0aWNrICovCi0gICAgdGlja3N0YXJ0ID0gSEFMX0dldFRpY2soKTsKLQotICAgIC8qIFdhaXQgdGlsbCBXVVRXRiBmbGFnIGlzIHNldCBhbmQgaWYgVGltZSBvdXQgaXMgcmVhY2hlZCBleGl0ICovCi0gICAgd2hpbGUgKCgoaHJ0Yy0+SW5zdGFuY2UtPklTUikgJiBSVENfSVNSX1dVVFdGKSA9PSAodWludDMyX3QpUkVTRVQpCi0gICAgewotICAgICAgaWYgKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+IFJUQ19USU1FT1VUX1ZBTFVFKQotICAgICAgewotICAgICAgICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KLSAgICAgICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7Ci0KLSAgICAgICAgLyogU2V0IFJUQyBzdGF0ZSAqLwotICAgICAgICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfVElNRU9VVDsKLQotICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLyogUmVzZXQgYWxsIFJUQyBDUiByZWdpc3RlciBiaXRzICovCi0gICAgaHJ0Yy0+SW5zdGFuY2UtPkNSICY9IDB4MDAwMDAwMDBVOwotICAgIGhydGMtPkluc3RhbmNlLT5XVVRSID0gMHgwMDAwRkZGRlU7Ci0gICAgaHJ0Yy0+SW5zdGFuY2UtPlBSRVIgPSAweDAwN0YwMEZGVTsKKyAgICBocnRjLT5JbnN0YW5jZS0+RFIgPSAoUlRDX0RSX1dEVV8wIHwgUlRDX0RSX01VXzAgfCBSVENfRFJfRFVfMCk7CisgICAgaHJ0Yy0+SW5zdGFuY2UtPkNSICAmPSAweDAwMDAwMDAwVTsKKyAgICBocnRjLT5JbnN0YW5jZS0+V1VUUiA9IFJUQ19XVVRSX1dVVDsKKyAgICBocnRjLT5JbnN0YW5jZS0+UFJFUiA9ICh1aW50MzJfdCkoUlRDX1BSRVJfUFJFRElWX0EgfCAweDAwMDAwMEZGVSk7CiAgICAgaHJ0Yy0+SW5zdGFuY2UtPkNBTElCUiA9IDB4MDAwMDAwMDBVOwotICAgIGhydGMtPkluc3RhbmNlLT5BTFJNQVIgPSAweDAwMDAwMDAwVTsKLSAgICBocnRjLT5JbnN0YW5jZS0+QUxSTUJSID0gMHgwMDAwMDAwMFU7CisgICAgaHJ0Yy0+SW5zdGFuY2UtPkFMUk1BUiAgID0gMHgwMDAwMDAwMFU7CisgICAgaHJ0Yy0+SW5zdGFuY2UtPkFMUk1CUiAgID0gMHgwMDAwMDAwMFU7CiAKLSAgICAvKiBSZXNldCBJU1IgcmVnaXN0ZXIgYW5kIGV4aXQgaW5pdGlhbGl6YXRpb24gbW9kZSAqLwotICAgIGhydGMtPkluc3RhbmNlLT5JU1IgPSAweDAwMDAwMDAwVTsKLQotICAgIC8qIFJlc2V0IFRhbXBlciBhbmQgYWx0ZXJuYXRlIGZ1bmN0aW9ucyBjb25maWd1cmF0aW9uIHJlZ2lzdGVyICovCi0gICAgaHJ0Yy0+SW5zdGFuY2UtPlRBRkNSID0gMHgwMDAwMDAwMFU7Ci0KLSAgICBpZiAoSEFMX1JUQ19XYWl0Rm9yU3luY2hybyhocnRjKSAhPSBIQUxfT0spCi0gICAgewotICAgICAgLyogRW5hYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCi0gICAgICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0VOQUJMRShocnRjKTsKLQotICAgICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX0VSUk9SOwotCi0gICAgICByZXR1cm4gSEFMX0VSUk9SOwotICAgIH0KKyAgICAvKiBFeGl0IEluaXRpYWxpemF0aW9uIG1vZGUgKi8KKyAgICBzdGF0dXMgPSBSVENfRXhpdEluaXRNb2RlKGhydGMpOwogICB9CiAKICAgLyogRW5hYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCiAgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRU5BQkxFKGhydGMpOwogCi0jaWYgKFVTRV9IQUxfUlRDX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQotICBpZiAoaHJ0Yy0+TXNwRGVJbml0Q2FsbGJhY2sgPT0gTlVMTCkKKyAgaWYgKHN0YXR1cyA9PSBIQUxfT0spCiAgIHsKLSAgICBocnRjLT5Nc3BEZUluaXRDYWxsYmFjayA9IEhBTF9SVENfTXNwRGVJbml0OworICAgIC8qIFJlc2V0IFRhbXBlciBhbmQgYWx0ZXJuYXRlIGZ1bmN0aW9ucyBjb25maWd1cmF0aW9uIHJlZ2lzdGVyICovCisgICAgaHJ0Yy0+SW5zdGFuY2UtPlRBRkNSID0gMHgwMDAwMDAwMFU7CisKKyNpZiAoVVNFX0hBTF9SVENfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCisgICAgaWYgKGhydGMtPk1zcERlSW5pdENhbGxiYWNrID09IE5VTEwpCisgICAgeworICAgICAgaHJ0Yy0+TXNwRGVJbml0Q2FsbGJhY2sgPSBIQUxfUlRDX01zcERlSW5pdDsKKyAgICB9CisKKyAgICAvKiBEZUluaXQgdGhlIGxvdyBsZXZlbCBoYXJkd2FyZTogQ0xPQ0ssIE5WSUMuKi8KKyAgICBocnRjLT5Nc3BEZUluaXRDYWxsYmFjayhocnRjKTsKKyNlbHNlIC8qIFVTRV9IQUxfUlRDX1JFR0lTVEVSX0NBTExCQUNLUyAqLworICAgIC8qIERlLUluaXRpYWxpemUgUlRDIE1TUCAqLworICAgIEhBTF9SVENfTXNwRGVJbml0KGhydGMpOworI2VuZGlmIC8qIFVTRV9IQUxfUlRDX1JFR0lTVEVSX0NBTExCQUNLUyAqLworCisgICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX1JFU0VUOwogICB9CiAKLSAgLyogRGVJbml0IHRoZSBsb3cgbGV2ZWwgaGFyZHdhcmU6IENMT0NLLCBOVklDLiovCi0gIGhydGMtPk1zcERlSW5pdENhbGxiYWNrKGhydGMpOwotCi0jZWxzZQotICAvKiBEZS1Jbml0aWFsaXplIFJUQyBNU1AgKi8KLSAgSEFMX1JUQ19Nc3BEZUluaXQoaHJ0Yyk7Ci0jZW5kaWYgLyogKFVTRV9IQUxfUlRDX1JFR0lTVEVSX0NBTExCQUNLUykgKi8KLQotICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfUkVTRVQ7Ci0KICAgLyogUmVsZWFzZSBMb2NrICovCiAgIF9fSEFMX1VOTE9DSyhocnRjKTsKIAotICByZXR1cm4gSEFMX09LOworICByZXR1cm4gc3RhdHVzOwogfQogCiAjaWYgKFVTRV9IQUxfUlRDX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQogLyoqCi0gICogQGJyaWVmICBSZWdpc3RlciBhIFVzZXIgUlRDIENhbGxiYWNrCisgICogQGJyaWVmICBSZWdpc3RlcnMgYSBVc2VyIFJUQyBDYWxsYmFjawogICAqICAgICAgICAgVG8gYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSB3ZWFrIHByZWRlZmluZWQgY2FsbGJhY2sKLSAgKiBAcGFyYW0gIGhydGMgUlRDIGhhbmRsZQorICAqIEBwYXJhbSAgaHJ0YyBwb2ludGVyIHRvIGEgUlRDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgUlRDLgogICAqIEBwYXJhbSAgQ2FsbGJhY2tJRCBJRCBvZiB0aGUgY2FsbGJhY2sgdG8gYmUgcmVnaXN0ZXJlZAogICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX1JUQ19BTEFSTV9BX0VWRU5UX0NCX0lEICAgICAgICAgIEFsYXJtIEEgRXZlbnQgQ2FsbGJhY2sgSUQKICAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX1JUQ19BTEFSTV9CX0VWRU5UX0NCX0lEICAgICAgICAgIEFsYXJtIEIgRXZlbnQgQ2FsbGJhY2sgSUQKLSAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX1JUQ19USU1FU1RBTVBfRVZFTlRfQ0JfSUQgICAgICAgIFRpbWVTdGFtcCBFdmVudCBDYWxsYmFjayBJRAotICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfUlRDX1dBS0VVUFRJTUVSX0VWRU5UX0NCX0lEICAgICAgV2FrZS1VcCBUaW1lciBFdmVudCBDYWxsYmFjayBJRAorICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfUlRDX1RJTUVTVEFNUF9FVkVOVF9DQl9JRCAgICAgICAgVGltZXN0YW1wIEV2ZW50IENhbGxiYWNrIElECisgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9SVENfV0FLRVVQVElNRVJfRVZFTlRfQ0JfSUQgICAgICBXYWtldXAgVGltZXIgRXZlbnQgQ2FsbGJhY2sgSUQKICAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX1JUQ19UQU1QRVIxX0VWRU5UX0NCX0lEICAgICAgICAgIFRhbXBlciAxIENhbGxiYWNrIElECiAgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9SVENfTVNQSU5JVF9DQl9JRCAgICAgICAgICAgICAgICBNc3AgSW5pdCBjYWxsYmFjayBJRAogICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfUlRDX01TUERFSU5JVF9DQl9JRCAgICAgICAgICAgICAgTXNwIERlSW5pdCBjYWxsYmFjayBJRApAQCAtNTQxLDE1ICs1MTMsMTYgQEAKIH0KIAogLyoqCi0gICogQGJyaWVmICBVbnJlZ2lzdGVyIGFuIFJUQyBDYWxsYmFjawotICAqICAgICAgICAgUlRDIGNhbGxhYmNrIGlzIHJlZGlyZWN0ZWQgdG8gdGhlIHdlYWsgcHJlZGVmaW5lZCBjYWxsYmFjawotICAqIEBwYXJhbSAgaHJ0YyBSVEMgaGFuZGxlCisgICogQGJyaWVmICBVbnJlZ2lzdGVycyBhbiBSVEMgQ2FsbGJhY2sKKyAgKiAgICAgICAgIFJUQyBjYWxsYmFjayBpcyByZWRpcmVjdGVkIHRvIHRoZSB3ZWFrIHByZWRlZmluZWQgY2FsbGJhY2sKKyAgKiBAcGFyYW0gIGhydGMgcG9pbnRlciB0byBhIFJUQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIFJUQy4KICAgKiBAcGFyYW0gIENhbGxiYWNrSUQgSUQgb2YgdGhlIGNhbGxiYWNrIHRvIGJlIHVucmVnaXN0ZXJlZAogICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX1JUQ19BTEFSTV9BX0VWRU5UX0NCX0lEICAgICAgICAgIEFsYXJtIEEgRXZlbnQgQ2FsbGJhY2sgSUQKICAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX1JUQ19BTEFSTV9CX0VWRU5UX0NCX0lEICAgICAgICAgIEFsYXJtIEIgRXZlbnQgQ2FsbGJhY2sgSUQKLSAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX1JUQ19USU1FU1RBTVBfRVZFTlRfQ0JfSUQgICAgICAgIFRpbWVTdGFtcCBFdmVudCBDYWxsYmFjayBJRAotICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfUlRDX1dBS0VVUFRJTUVSX0VWRU5UX0NCX0lEICAgICAgV2FrZS1VcCBUaW1lciBFdmVudCBDYWxsYmFjayBJRAorICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfUlRDX1RJTUVTVEFNUF9FVkVOVF9DQl9JRCAgICAgICAgVGltZXN0YW1wIEV2ZW50IENhbGxiYWNrIElECisgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9SVENfV0FLRVVQVElNRVJfRVZFTlRfQ0JfSUQgICAgICBXYWtldXAgVGltZXIgRXZlbnQgQ2FsbGJhY2sgSUQKICAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX1JUQ19UQU1QRVIxX0VWRU5UX0NCX0lEICAgICAgICAgIFRhbXBlciAxIENhbGxiYWNrIElECiAgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9SVENfTVNQSU5JVF9DQl9JRCBNc3AgSW5pdCBjYWxsYmFjayBJRAogICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfUlRDX01TUERFSU5JVF9DQl9JRCBNc3AgRGVJbml0IGNhbGxiYWNrIElECkBAIC01NjcsMTUgKzU0MCwxNSBAQAogICAgIHN3aXRjaCAoQ2FsbGJhY2tJRCkKICAgICB7CiAgICAgICBjYXNlIEhBTF9SVENfQUxBUk1fQV9FVkVOVF9DQl9JRCA6Ci0gICAgICAgIGhydGMtPkFsYXJtQUV2ZW50Q2FsbGJhY2sgPSBIQUxfUlRDX0FsYXJtQUV2ZW50Q2FsbGJhY2s7ICAgICAgICAgLyogTGVnYWN5IHdlYWsgQWxhcm1BRXZlbnRDYWxsYmFjayAgICAqLworICAgICAgICBocnRjLT5BbGFybUFFdmVudENhbGxiYWNrID0gSEFMX1JUQ19BbGFybUFFdmVudENhbGxiYWNrOyAgICAgICAgICAgICAvKiBMZWdhY3kgd2VhayBBbGFybUFFdmVudENhbGxiYWNrICAgICovCiAgICAgICAgIGJyZWFrOwogCiAgICAgICBjYXNlIEhBTF9SVENfQUxBUk1fQl9FVkVOVF9DQl9JRCA6Ci0gICAgICAgIGhydGMtPkFsYXJtQkV2ZW50Q2FsbGJhY2sgPSBIQUxfUlRDRXhfQWxhcm1CRXZlbnRDYWxsYmFjazsgICAgICAgICAgLyogTGVnYWN5IHdlYWsgQWxhcm1CRXZlbnRDYWxsYmFjayAqLworICAgICAgICBocnRjLT5BbGFybUJFdmVudENhbGxiYWNrID0gSEFMX1JUQ0V4X0FsYXJtQkV2ZW50Q2FsbGJhY2s7ICAgICAgICAgICAvKiBMZWdhY3kgd2VhayBBbGFybUJFdmVudENhbGxiYWNrICovCiAgICAgICAgIGJyZWFrOwogCiAgICAgICBjYXNlIEhBTF9SVENfVElNRVNUQU1QX0VWRU5UX0NCX0lEIDoKLSAgICAgICAgaHJ0Yy0+VGltZVN0YW1wRXZlbnRDYWxsYmFjayA9IEhBTF9SVENFeF9UaW1lU3RhbXBFdmVudENhbGxiYWNrOyAgICAvKiBMZWdhY3kgd2VhayBUaW1lU3RhbXBFdmVudENhbGxiYWNrICAgICovCisgICAgICAgIGhydGMtPlRpbWVTdGFtcEV2ZW50Q2FsbGJhY2sgPSBIQUxfUlRDRXhfVGltZVN0YW1wRXZlbnRDYWxsYmFjazsgICAgIC8qIExlZ2FjeSB3ZWFrIFRpbWVTdGFtcEV2ZW50Q2FsbGJhY2sgICAgKi8KICAgICAgICAgYnJlYWs7CiAKICAgICAgIGNhc2UgSEFMX1JUQ19XQUtFVVBUSU1FUl9FVkVOVF9DQl9JRCA6CkBAIC02NDEsOCArNjE0LDkgQEAKIHsKICAgLyogUHJldmVudCB1bnVzZWQgYXJndW1lbnQocykgY29tcGlsYXRpb24gd2FybmluZyAqLwogICBVTlVTRUQoaHJ0Yyk7Ci0gIC8qIE5PVEUgOiBUaGlzIGZ1bmN0aW9uIFNob3VsZCBub3QgYmUgbW9kaWZpZWQsIHdoZW4gdGhlIGNhbGxiYWNrIGlzIG5lZWRlZCwKLSAgICAgICAgICAgIHRoZSBIQUxfUlRDX01zcEluaXQgY291bGQgYmUgaW1wbGVtZW50ZWQgaW4gdGhlIHVzZXIgZmlsZQorCisgIC8qIE5PVEU6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBtb2RpZmllZCwgd2hlbiB0aGUgY2FsbGJhY2sgaXMgbmVlZGVkLAorICAgICAgICAgICB0aGUgSEFMX1JUQ19Nc3BJbml0IGNvdWxkIGJlIGltcGxlbWVudGVkIGluIHRoZSB1c2VyIGZpbGUKICAgICovCiB9CiAKQEAgLTY1Niw4ICs2MzAsOSBAQAogewogICAvKiBQcmV2ZW50IHVudXNlZCBhcmd1bWVudChzKSBjb21waWxhdGlvbiB3YXJuaW5nICovCiAgIFVOVVNFRChocnRjKTsKLSAgLyogTk9URSA6IFRoaXMgZnVuY3Rpb24gU2hvdWxkIG5vdCBiZSBtb2RpZmllZCwgd2hlbiB0aGUgY2FsbGJhY2sgaXMgbmVlZGVkLAotICAgICAgICAgICAgdGhlIEhBTF9SVENfTXNwRGVJbml0IGNvdWxkIGJlIGltcGxlbWVudGVkIGluIHRoZSB1c2VyIGZpbGUKKworICAvKiBOT1RFOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgbW9kaWZpZWQsIHdoZW4gdGhlIGNhbGxiYWNrIGlzIG5lZWRlZCwKKyAgICAgICAgICAgdGhlIEhBTF9SVENfTXNwRGVJbml0IGNvdWxkIGJlIGltcGxlbWVudGVkIGluIHRoZSB1c2VyIGZpbGUKICAgICovCiB9CiAKQEAgLTY2Niw4ICs2NDEsOCBAQAogICAqLwogCiAvKiogQGRlZmdyb3VwIFJUQ19FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAyIFJUQyBUaW1lIGFuZCBEYXRlIGZ1bmN0aW9ucwotICogIEBicmllZiAgIFJUQyBUaW1lIGFuZCBEYXRlIGZ1bmN0aW9ucwotICoKKyAgKiBAYnJpZWYgICAgUlRDIFRpbWUgYW5kIERhdGUgZnVuY3Rpb25zCisgICoKIEB2ZXJiYXRpbQogID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgICAgIyMjIyMgUlRDIFRpbWUgYW5kIERhdGUgZnVuY3Rpb25zICMjIyMjCkBAIC02ODQsNiArNjU5LDggQEAKICAgKiBAcGFyYW0gIGhydGMgcG9pbnRlciB0byBhIFJUQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIFJUQy4KICAgKiBAcGFyYW0gIHNUaW1lIFBvaW50ZXIgdG8gVGltZSBzdHJ1Y3R1cmUKKyAgKiBAbm90ZSAgIERheUxpZ2h0U2F2aW5nIGFuZCBTdG9yZU9wZXJhdGlvbiBpbnRlcmZhY2VzIGFyZSBkZXByZWNhdGVkLgorICAqICAgICAgICAgVG8gbWFuYWdlIERheWxpZ2h0IFNhdmluZyBUaW1lLCBwbGVhc2UgdXNlIEhBTF9SVENfRFNUX3h4eCBmdW5jdGlvbnMuCiAgICogQHBhcmFtICBGb3JtYXQgU3BlY2lmaWVzIHRoZSBmb3JtYXQgb2YgdGhlIGVudGVyZWQgcGFyYW1ldGVycy4KICAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgICAgQGFyZyBSVENfRk9STUFUX0JJTjogQmluYXJ5IGRhdGEgZm9ybWF0CkBAIC02OTMsNiArNjcwLDcgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9SVENfU2V0VGltZShSVENfSGFuZGxlVHlwZURlZiAqaHJ0YywgUlRDX1RpbWVUeXBlRGVmICpzVGltZSwgdWludDMyX3QgRm9ybWF0KQogewogICB1aW50MzJfdCB0bXByZWcgPSAwVTsKKyAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzOwogCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19SVENfRk9STUFUKEZvcm1hdCkpOwpAQCAtNzA2LDcgKzY4NCw3IEBACiAKICAgaWYgKEZvcm1hdCA9PSBSVENfRk9STUFUX0JJTikKICAgewotICAgIGlmICgoaHJ0Yy0+SW5zdGFuY2UtPkNSICYgUlRDX0NSX0ZNVCkgIT0gKHVpbnQzMl90KVJFU0VUKQorICAgIGlmICgoaHJ0Yy0+SW5zdGFuY2UtPkNSICYgUlRDX0NSX0ZNVCkgIT0gMFUpCiAgICAgewogICAgICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19IT1VSMTIoc1RpbWUtPkhvdXJzKSk7CiAgICAgICBhc3NlcnRfcGFyYW0oSVNfUlRDX0hPVVJGT1JNQVQxMihzVGltZS0+VGltZUZvcm1hdCkpOwpAQCAtNzE5LDE0ICs2OTcsMTQgQEAKICAgICBhc3NlcnRfcGFyYW0oSVNfUlRDX01JTlVURVMoc1RpbWUtPk1pbnV0ZXMpKTsKICAgICBhc3NlcnRfcGFyYW0oSVNfUlRDX1NFQ09ORFMoc1RpbWUtPlNlY29uZHMpKTsKIAotICAgIHRtcHJlZyA9ICh1aW50MzJfdCkoKCh1aW50MzJfdClSVENfQnl0ZVRvQmNkMihzVGltZS0+SG91cnMpIDw8IDE2VSkgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KVJUQ19CeXRlVG9CY2QyKHNUaW1lLT5NaW51dGVzKSA8PCA4VSkgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KVJUQ19CeXRlVG9CY2QyKHNUaW1lLT5TZWNvbmRzKSkgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdClzVGltZS0+VGltZUZvcm1hdCkgPDwgMTZVKSk7CisgICAgdG1wcmVnID0gKHVpbnQzMl90KSgoICh1aW50MzJfdClSVENfQnl0ZVRvQmNkMihzVGltZS0+SG91cnMpICAgPDwgUlRDX1RSX0hVX1BvcykgIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgKCAodWludDMyX3QpUlRDX0J5dGVUb0JjZDIoc1RpbWUtPk1pbnV0ZXMpIDw8IFJUQ19UUl9NTlVfUG9zKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICggKHVpbnQzMl90KVJUQ19CeXRlVG9CY2QyKHNUaW1lLT5TZWNvbmRzKSkgICAgICAgICAgICAgICAgICAgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdClzVGltZS0+VGltZUZvcm1hdCkgICAgICAgICAgICAgPDwgUlRDX1RSX1BNX1BvcykpOwogICB9CiAgIGVsc2UKICAgewotICAgIGlmICgoaHJ0Yy0+SW5zdGFuY2UtPkNSICYgUlRDX0NSX0ZNVCkgIT0gKHVpbnQzMl90KVJFU0VUKQorICAgIGlmICgoaHJ0Yy0+SW5zdGFuY2UtPkNSICYgUlRDX0NSX0ZNVCkgIT0gMFUpCiAgICAgewogICAgICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19IT1VSMTIoUlRDX0JjZDJUb0J5dGUoc1RpbWUtPkhvdXJzKSkpOwogICAgICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19IT1VSRk9STUFUMTIoc1RpbWUtPlRpbWVGb3JtYXQpKTsKQEAgLTczOCw2NSArNzE2LDQ1IEBACiAgICAgfQogICAgIGFzc2VydF9wYXJhbShJU19SVENfTUlOVVRFUyhSVENfQmNkMlRvQnl0ZShzVGltZS0+TWludXRlcykpKTsKICAgICBhc3NlcnRfcGFyYW0oSVNfUlRDX1NFQ09ORFMoUlRDX0JjZDJUb0J5dGUoc1RpbWUtPlNlY29uZHMpKSk7Ci0gICAgdG1wcmVnID0gKCgodWludDMyX3QpKHNUaW1lLT5Ib3VycykgPDwgMTZVKSB8IFwKLSAgICAgICAgICAgICAgKCh1aW50MzJfdCkoc1RpbWUtPk1pbnV0ZXMpIDw8IDhVKSB8IFwKLSAgICAgICAgICAgICAgKCh1aW50MzJfdClzVGltZS0+U2Vjb25kcykgfCBcCi0gICAgICAgICAgICAgICgodWludDMyX3QpKHNUaW1lLT5UaW1lRm9ybWF0KSA8PCAxNlUpKTsKKyAgICB0bXByZWcgPSAoKCh1aW50MzJfdCkoc1RpbWUtPkhvdXJzKSAgICAgIDw8IFJUQ19UUl9IVV9Qb3MpICB8IFwKKyAgICAgICAgICAgICAgKCh1aW50MzJfdCkoc1RpbWUtPk1pbnV0ZXMpICAgIDw8IFJUQ19UUl9NTlVfUG9zKSB8IFwKKyAgICAgICAgICAgICAgKCh1aW50MzJfdCkgc1RpbWUtPlNlY29uZHMpICAgICAgICAgICAgICAgICAgICAgICB8IFwKKyAgICAgICAgICAgICAgKCh1aW50MzJfdCkoc1RpbWUtPlRpbWVGb3JtYXQpIDw8IFJUQ19UUl9QTV9Qb3MpKTsKICAgfQogCiAgIC8qIERpc2FibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9ESVNBQkxFKGhydGMpOwogCi0gIC8qIFNldCBJbml0aWFsaXphdGlvbiBtb2RlICovCi0gIGlmIChSVENfRW50ZXJJbml0TW9kZShocnRjKSAhPSBIQUxfT0spCi0gIHsKLSAgICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KLSAgICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0VOQUJMRShocnRjKTsKKyAgLyogRW50ZXIgSW5pdGlhbGl6YXRpb24gbW9kZSAqLworICBzdGF0dXMgPSBSVENfRW50ZXJJbml0TW9kZShocnRjKTsKIAotICAgIC8qIFNldCBSVEMgc3RhdGUgKi8KLSAgICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfRVJST1I7Ci0KLSAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCi0gICAgX19IQUxfVU5MT0NLKGhydGMpOwotCi0gICAgcmV0dXJuIEhBTF9FUlJPUjsKLSAgfQotICBlbHNlCisgIGlmIChzdGF0dXMgPT0gSEFMX09LKQogICB7CiAgICAgLyogU2V0IHRoZSBSVENfVFIgcmVnaXN0ZXIgKi8KICAgICBocnRjLT5JbnN0YW5jZS0+VFIgPSAodWludDMyX3QpKHRtcHJlZyAmIFJUQ19UUl9SRVNFUlZFRF9NQVNLKTsKIAotICAgIC8qIFRoaXMgaW50ZXJmYWNlIGlzIGRlcHJlY2F0ZWQuIFRvIG1hbmFnZSBEYXlsaWdodCBTYXZpbmcgVGltZSwgcGxlYXNlIHVzZSBIQUxfUlRDX0RTVF94eHggZnVuY3Rpb25zICovCi0gICAgaHJ0Yy0+SW5zdGFuY2UtPkNSICY9ICh1aW50MzJfdCl+UlRDX0NSX0JDSzsKKyAgICAvKiBDbGVhciB0aGUgYml0cyB0byBiZSBjb25maWd1cmVkIChEZXByZWNhdGVkLiBVc2UgSEFMX1JUQ19EU1RfeHh4IGZ1bmN0aW9ucyBpbnN0ZWFkKSAqLworICAgIGhydGMtPkluc3RhbmNlLT5DUiAmPSAodWludDMyX3QpflJUQ19DUl9CS1A7CiAKLSAgICAvKiBUaGlzIGludGVyZmFjZSBpcyBkZXByZWNhdGVkLiBUbyBtYW5hZ2UgRGF5bGlnaHQgU2F2aW5nIFRpbWUsIHBsZWFzZSB1c2UgSEFMX1JUQ19EU1RfeHh4IGZ1bmN0aW9ucyAqLworICAgIC8qIENvbmZpZ3VyZSB0aGUgUlRDX0NSIHJlZ2lzdGVyIChEZXByZWNhdGVkLiBVc2UgSEFMX1JUQ19EU1RfeHh4IGZ1bmN0aW9ucyBpbnN0ZWFkKSAqLwogICAgIGhydGMtPkluc3RhbmNlLT5DUiB8PSAodWludDMyX3QpKHNUaW1lLT5EYXlMaWdodFNhdmluZyB8IHNUaW1lLT5TdG9yZU9wZXJhdGlvbik7CiAKICAgICAvKiBFeGl0IEluaXRpYWxpemF0aW9uIG1vZGUgKi8KLSAgICBocnRjLT5JbnN0YW5jZS0+SVNSICY9ICh1aW50MzJfdCl+UlRDX0lTUl9JTklUOwotCi0gICAgaWYgKEhBTF9SVENfV2FpdEZvclN5bmNocm8oaHJ0YykgIT0gSEFMX09LKQotICAgIHsKLSAgICAgIC8qIEVuYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLwotICAgICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7Ci0KLSAgICAgIGhydGMtPlN0YXRlID0gSEFMX1JUQ19TVEFURV9FUlJPUjsKLQotICAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLwotICAgICAgX19IQUxfVU5MT0NLKGhydGMpOwotCi0gICAgICByZXR1cm4gSEFMX0VSUk9SOwotICAgIH0KLQotICAgIC8qIEVuYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLwotICAgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRU5BQkxFKGhydGMpOwotCi0gICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX1JFQURZOwotCi0gICAgX19IQUxfVU5MT0NLKGhydGMpOwotCi0gICAgcmV0dXJuIEhBTF9PSzsKKyAgICBzdGF0dXMgPSBSVENfRXhpdEluaXRNb2RlKGhydGMpOwogICB9CisKKyAgaWYgKHN0YXR1cyA9PSBIQUxfT0spCisgIHsKKyAgICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfUkVBRFk7CisgIH0KKworICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KKyAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7CisKKyAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLworICBfX0hBTF9VTkxPQ0soaHJ0Yyk7CisKKyAgcmV0dXJuIHN0YXR1czsKIH0KIAogLyoqCkBAIC04MDgsOSArNzY2LDEyIEBACiAgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgICAgIEBhcmcgUlRDX0ZPUk1BVF9CSU46IEJpbmFyeSBkYXRhIGZvcm1hdAogICAqICAgICAgICAgICAgQGFyZyBSVENfRk9STUFUX0JDRDogQkNEIGRhdGEgZm9ybWF0Ci0gICogQG5vdGUgWW91IG11c3QgY2FsbCBIQUxfUlRDX0dldERhdGUoKSBhZnRlciBIQUxfUlRDX0dldFRpbWUoKSB0byB1bmxvY2sgdGhlIHZhbHVlcwotICAqIGluIHRoZSBoaWdoZXItb3JkZXIgY2FsZW5kYXIgc2hhZG93IHJlZ2lzdGVycyB0byBlbnN1cmUgY29uc2lzdGVuY3kgYmV0d2VlbiB0aGUgdGltZSBhbmQgZGF0ZSB2YWx1ZXMuCi0gICogUmVhZGluZyBSVEMgY3VycmVudCB0aW1lIGxvY2tzIHRoZSB2YWx1ZXMgaW4gY2FsZW5kYXIgc2hhZG93IHJlZ2lzdGVycyB1bnRpbCBDdXJyZW50IGRhdGUgaXMgcmVhZC4KKyAgKiBAbm90ZSAgWW91IG11c3QgY2FsbCBIQUxfUlRDX0dldERhdGUoKSBhZnRlciBIQUxfUlRDX0dldFRpbWUoKSB0byB1bmxvY2sgdGhlCisgICogICAgICAgIHZhbHVlcyBpbiB0aGUgaGlnaGVyLW9yZGVyIGNhbGVuZGFyIHNoYWRvdyByZWdpc3RlcnMgdG8gZW5zdXJlCisgICogICAgICAgIGNvbnNpc3RlbmN5IGJldHdlZW4gdGhlIHRpbWUgYW5kIGRhdGUgdmFsdWVzLgorICAqICAgICAgICBSZWFkaW5nIFJUQyBjdXJyZW50IHRpbWUgbG9ja3MgdGhlIHZhbHVlcyBpbiBjYWxlbmRhciBzaGFkb3cgcmVnaXN0ZXJzCisgICogICAgICAgIHVudGlsIGN1cnJlbnQgZGF0ZSBpcyByZWFkIHRvIGVuc3VyZSBjb25zaXN0ZW5jeSBiZXR3ZWVuIHRoZSB0aW1lIGFuZAorICAqICAgICAgICBkYXRlIHZhbHVlcy4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9SVENfR2V0VGltZShSVENfSGFuZGxlVHlwZURlZiAqaHJ0YywgUlRDX1RpbWVUeXBlRGVmICpzVGltZSwgdWludDMyX3QgRm9ybWF0KQpAQCAtODI0LDEwICs3ODUsMTAgQEAKICAgdG1wcmVnID0gKHVpbnQzMl90KShocnRjLT5JbnN0YW5jZS0+VFIgJiBSVENfVFJfUkVTRVJWRURfTUFTSyk7CiAKICAgLyogRmlsbCB0aGUgc3RydWN0dXJlIGZpZWxkcyB3aXRoIHRoZSByZWFkIHBhcmFtZXRlcnMgKi8KLSAgc1RpbWUtPkhvdXJzID0gKHVpbnQ4X3QpKCh0bXByZWcgJiAoUlRDX1RSX0hUIHwgUlRDX1RSX0hVKSkgPj4gMTZVKTsKLSAgc1RpbWUtPk1pbnV0ZXMgPSAodWludDhfdCkoKHRtcHJlZyAmIChSVENfVFJfTU5UIHwgUlRDX1RSX01OVSkpID4+IDhVKTsKLSAgc1RpbWUtPlNlY29uZHMgPSAodWludDhfdCkodG1wcmVnICYgKFJUQ19UUl9TVCB8IFJUQ19UUl9TVSkpOwotICBzVGltZS0+VGltZUZvcm1hdCA9ICh1aW50OF90KSgodG1wcmVnICYgKFJUQ19UUl9QTSkpID4+IDE2VSk7CisgIHNUaW1lLT5Ib3VycyAgICAgID0gKHVpbnQ4X3QpKCh0bXByZWcgJiAoUlRDX1RSX0hUICB8IFJUQ19UUl9IVSkpICA+PiBSVENfVFJfSFVfUG9zKTsKKyAgc1RpbWUtPk1pbnV0ZXMgICAgPSAodWludDhfdCkoKHRtcHJlZyAmIChSVENfVFJfTU5UIHwgUlRDX1RSX01OVSkpID4+IFJUQ19UUl9NTlVfUG9zKTsKKyAgc1RpbWUtPlNlY29uZHMgICAgPSAodWludDhfdCkoIHRtcHJlZyAmIChSVENfVFJfU1QgIHwgUlRDX1RSX1NVKSk7CisgIHNUaW1lLT5UaW1lRm9ybWF0ID0gKHVpbnQ4X3QpKCh0bXByZWcgJiAoUlRDX1RSX1BNKSkgICAgICAgICAgICAgICA+PiBSVENfVFJfUE1fUG9zKTsKIAogICAvKiBDaGVjayB0aGUgaW5wdXQgcGFyYW1ldGVycyBmb3JtYXQgKi8KICAgaWYgKEZvcm1hdCA9PSBSVENfRk9STUFUX0JJTikKQEAgLTg1NSw2ICs4MTYsNyBAQAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1JUQ19TZXREYXRlKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjLCBSVENfRGF0ZVR5cGVEZWYgKnNEYXRlLCB1aW50MzJfdCBGb3JtYXQpCiB7CiAgIHVpbnQzMl90IGRhdGV0bXByZWcgPSAwVTsKKyAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzOwogCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19SVENfRk9STUFUKEZvcm1hdCkpOwpAQCAtODY0LDkgKzgyNiw5IEBACiAKICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX0JVU1k7CiAKLSAgaWYgKChGb3JtYXQgPT0gUlRDX0ZPUk1BVF9CSU4pICYmICgoc0RhdGUtPk1vbnRoICYgMHgxMCkgPT0gMHgxMCkpCisgIGlmICgoRm9ybWF0ID09IFJUQ19GT1JNQVRfQklOKSAmJiAoKHNEYXRlLT5Nb250aCAmIDB4MTBVKSA9PSAweDEwVSkpCiAgIHsKLSAgICBzRGF0ZS0+TW9udGggPSAodWludDhfdCkoKHNEYXRlLT5Nb250aCAmICh1aW50OF90KX4weDEwKSArICh1aW50OF90KTB4MEEpOworICAgIHNEYXRlLT5Nb250aCA9ICh1aW50OF90KSgoc0RhdGUtPk1vbnRoICYgKHVpbnQ4X3QpfigweDEwVSkpICsgKHVpbnQ4X3QpMHgwQVUpOwogICB9CiAKICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19XRUVLREFZKHNEYXRlLT5XZWVrRGF5KSk7CkBAIC04NzcsMTAgKzgzOSwxMCBAQAogICAgIGFzc2VydF9wYXJhbShJU19SVENfTU9OVEgoc0RhdGUtPk1vbnRoKSk7CiAgICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19EQVRFKHNEYXRlLT5EYXRlKSk7CiAKLSAgICBkYXRldG1wcmVnID0gKCgodWludDMyX3QpUlRDX0J5dGVUb0JjZDIoc0RhdGUtPlllYXIpIDw8IDE2VSkgfCBcCi0gICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KVJUQ19CeXRlVG9CY2QyKHNEYXRlLT5Nb250aCkgPDwgOFUpIHwgXAotICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdClSVENfQnl0ZVRvQmNkMihzRGF0ZS0+RGF0ZSkpIHwgXAotICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdClzRGF0ZS0+V2Vla0RheSA8PCAxM1UpKTsKKyAgICBkYXRldG1wcmVnID0gKCgodWludDMyX3QpUlRDX0J5dGVUb0JjZDIoc0RhdGUtPlllYXIpICA8PCBSVENfRFJfWVVfUG9zKSB8IFwKKyAgICAgICAgICAgICAgICAgICgodWludDMyX3QpUlRDX0J5dGVUb0JjZDIoc0RhdGUtPk1vbnRoKSA8PCBSVENfRFJfTVVfUG9zKSB8IFwKKyAgICAgICAgICAgICAgICAgICgodWludDMyX3QpUlRDX0J5dGVUb0JjZDIoc0RhdGUtPkRhdGUpKSAgICAgICAgICAgICAgICAgICB8IFwKKyAgICAgICAgICAgICAgICAgICgodWludDMyX3Qpc0RhdGUtPldlZWtEYXkgICAgICAgICAgICAgICA8PCBSVENfRFJfV0RVX1BvcykpOwogICB9CiAgIGVsc2UKICAgewpAQCAtODg4LDYwICs4NTAsMzkgQEAKICAgICBhc3NlcnRfcGFyYW0oSVNfUlRDX01PTlRIKFJUQ19CY2QyVG9CeXRlKHNEYXRlLT5Nb250aCkpKTsKICAgICBhc3NlcnRfcGFyYW0oSVNfUlRDX0RBVEUoUlRDX0JjZDJUb0J5dGUoc0RhdGUtPkRhdGUpKSk7CiAKLSAgICBkYXRldG1wcmVnID0gKCgoKHVpbnQzMl90KXNEYXRlLT5ZZWFyKSA8PCAxNlUpIHwgXAotICAgICAgICAgICAgICAgICAgKCgodWludDMyX3Qpc0RhdGUtPk1vbnRoKSA8PCA4VSkgfCBcCi0gICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KXNEYXRlLT5EYXRlKSB8IFwKLSAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KXNEYXRlLT5XZWVrRGF5KSA8PCAxM1UpKTsKKyAgICBkYXRldG1wcmVnID0gKCgoKHVpbnQzMl90KXNEYXRlLT5ZZWFyKSAgICA8PCBSVENfRFJfWVVfUG9zKSB8IFwKKyAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KXNEYXRlLT5Nb250aCkgICA8PCBSVENfRFJfTVVfUG9zKSB8IFwKKyAgICAgICAgICAgICAgICAgICgodWludDMyX3QpIHNEYXRlLT5EYXRlKSAgICAgICAgICAgICAgICAgICAgICB8IFwKKyAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KXNEYXRlLT5XZWVrRGF5KSA8PCBSVENfRFJfV0RVX1BvcykpOwogICB9CiAKICAgLyogRGlzYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLwogICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0RJU0FCTEUoaHJ0Yyk7CiAKLSAgLyogU2V0IEluaXRpYWxpemF0aW9uIG1vZGUgKi8KLSAgaWYgKFJUQ19FbnRlckluaXRNb2RlKGhydGMpICE9IEhBTF9PSykKLSAgewotICAgIC8qIEVuYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLwotICAgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRU5BQkxFKGhydGMpOworICAvKiBFbnRlciBJbml0aWFsaXphdGlvbiBtb2RlICovCisgIHN0YXR1cyA9IFJUQ19FbnRlckluaXRNb2RlKGhydGMpOwogCi0gICAgLyogU2V0IFJUQyBzdGF0ZSovCi0gICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX0VSUk9SOwotCi0gICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLwotICAgIF9fSEFMX1VOTE9DSyhocnRjKTsKLQotICAgIHJldHVybiBIQUxfRVJST1I7Ci0gIH0KLSAgZWxzZQorICBpZiAoc3RhdHVzID09IEhBTF9PSykKICAgewogICAgIC8qIFNldCB0aGUgUlRDX0RSIHJlZ2lzdGVyICovCiAgICAgaHJ0Yy0+SW5zdGFuY2UtPkRSID0gKHVpbnQzMl90KShkYXRldG1wcmVnICYgUlRDX0RSX1JFU0VSVkVEX01BU0spOwogCiAgICAgLyogRXhpdCBJbml0aWFsaXphdGlvbiBtb2RlICovCi0gICAgaHJ0Yy0+SW5zdGFuY2UtPklTUiAmPSAodWludDMyX3QpflJUQ19JU1JfSU5JVDsKLQotICAgIGlmIChIQUxfUlRDX1dhaXRGb3JTeW5jaHJvKGhydGMpICE9IEhBTF9PSykKLSAgICB7Ci0gICAgICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KLSAgICAgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRU5BQkxFKGhydGMpOwotCi0gICAgICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfRVJST1I7Ci0KLSAgICAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KLSAgICAgIF9fSEFMX1VOTE9DSyhocnRjKTsKLQotICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKLSAgICB9Ci0KLSAgICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KLSAgICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0VOQUJMRShocnRjKTsKLQotICAgIGhydGMtPlN0YXRlID0gSEFMX1JUQ19TVEFURV9SRUFEWSA7Ci0KLSAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCi0gICAgX19IQUxfVU5MT0NLKGhydGMpOwotCi0gICAgcmV0dXJuIEhBTF9PSzsKKyAgICBzdGF0dXMgPSBSVENfRXhpdEluaXRNb2RlKGhydGMpOwogICB9CisKKyAgaWYgKHN0YXR1cyA9PSBIQUxfT0spCisgIHsKKyAgICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfUkVBRFk7CisgIH0KKworICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KKyAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7CisKKyAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLworICBfX0hBTF9VTkxPQ0soaHJ0Yyk7CisKKyAgcmV0dXJuIHN0YXR1czsKIH0KIAogLyoqCkBAIC05NTMsOSArODk0LDEyIEBACiAgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgICAgIEBhcmcgUlRDX0ZPUk1BVF9CSU46ICBCaW5hcnkgZGF0YSBmb3JtYXQKICAgKiAgICAgICAgICAgIEBhcmcgUlRDX0ZPUk1BVF9CQ0Q6ICBCQ0QgZGF0YSBmb3JtYXQKLSAgKiBAbm90ZSBZb3UgbXVzdCBjYWxsIEhBTF9SVENfR2V0RGF0ZSgpIGFmdGVyIEhBTF9SVENfR2V0VGltZSgpIHRvIHVubG9jayB0aGUgdmFsdWVzCi0gICogaW4gdGhlIGhpZ2hlci1vcmRlciBjYWxlbmRhciBzaGFkb3cgcmVnaXN0ZXJzIHRvIGVuc3VyZSBjb25zaXN0ZW5jeSBiZXR3ZWVuIHRoZSB0aW1lIGFuZCBkYXRlIHZhbHVlcy4KLSAgKiBSZWFkaW5nIFJUQyBjdXJyZW50IHRpbWUgbG9ja3MgdGhlIHZhbHVlcyBpbiBjYWxlbmRhciBzaGFkb3cgcmVnaXN0ZXJzIHVudGlsIEN1cnJlbnQgZGF0ZSBpcyByZWFkLgorICAqIEBub3RlICBZb3UgbXVzdCBjYWxsIEhBTF9SVENfR2V0RGF0ZSgpIGFmdGVyIEhBTF9SVENfR2V0VGltZSgpIHRvIHVubG9jayB0aGUKKyAgKiAgICAgICAgdmFsdWVzIGluIHRoZSBoaWdoZXItb3JkZXIgY2FsZW5kYXIgc2hhZG93IHJlZ2lzdGVycyB0byBlbnN1cmUKKyAgKiAgICAgICAgY29uc2lzdGVuY3kgYmV0d2VlbiB0aGUgdGltZSBhbmQgZGF0ZSB2YWx1ZXMuCisgICogICAgICAgIFJlYWRpbmcgUlRDIGN1cnJlbnQgdGltZSBsb2NrcyB0aGUgdmFsdWVzIGluIGNhbGVuZGFyIHNoYWRvdyByZWdpc3RlcnMKKyAgKiAgICAgICAgdW50aWwgY3VycmVudCBkYXRlIGlzIHJlYWQgdG8gZW5zdXJlIGNvbnNpc3RlbmN5IGJldHdlZW4gdGhlIHRpbWUgYW5kCisgICogICAgICAgIGRhdGUgdmFsdWVzLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1JUQ19HZXREYXRlKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjLCBSVENfRGF0ZVR5cGVEZWYgKnNEYXRlLCB1aW50MzJfdCBGb3JtYXQpCkBAIC05NjksOTAgKzkxMywyOSBAQAogICBkYXRldG1wcmVnID0gKHVpbnQzMl90KShocnRjLT5JbnN0YW5jZS0+RFIgJiBSVENfRFJfUkVTRVJWRURfTUFTSyk7CiAKICAgLyogRmlsbCB0aGUgc3RydWN0dXJlIGZpZWxkcyB3aXRoIHRoZSByZWFkIHBhcmFtZXRlcnMgKi8KLSAgc0RhdGUtPlllYXIgPSAodWludDhfdCkoKGRhdGV0bXByZWcgJiAoUlRDX0RSX1lUIHwgUlRDX0RSX1lVKSkgPj4gMTZVKTsKLSAgc0RhdGUtPk1vbnRoID0gKHVpbnQ4X3QpKChkYXRldG1wcmVnICYgKFJUQ19EUl9NVCB8IFJUQ19EUl9NVSkpID4+IDhVKTsKLSAgc0RhdGUtPkRhdGUgPSAodWludDhfdCkoZGF0ZXRtcHJlZyAmIChSVENfRFJfRFQgfCBSVENfRFJfRFUpKTsKLSAgc0RhdGUtPldlZWtEYXkgPSAodWludDhfdCkoKGRhdGV0bXByZWcgJiAoUlRDX0RSX1dEVSkpID4+IDEzVSk7CisgIHNEYXRlLT5ZZWFyICAgID0gKHVpbnQ4X3QpKChkYXRldG1wcmVnICYgKFJUQ19EUl9ZVCB8IFJUQ19EUl9ZVSkpID4+IFJUQ19EUl9ZVV9Qb3MpOworICBzRGF0ZS0+TW9udGggICA9ICh1aW50OF90KSgoZGF0ZXRtcHJlZyAmIChSVENfRFJfTVQgfCBSVENfRFJfTVUpKSA+PiBSVENfRFJfTVVfUG9zKTsKKyAgc0RhdGUtPkRhdGUgICAgPSAodWludDhfdCkgKGRhdGV0bXByZWcgJiAoUlRDX0RSX0RUIHwgUlRDX0RSX0RVKSk7CisgIHNEYXRlLT5XZWVrRGF5ID0gKHVpbnQ4X3QpKChkYXRldG1wcmVnICYgKFJUQ19EUl9XRFUpKSAgICAgICAgICAgID4+IFJUQ19EUl9XRFVfUG9zKTsKIAogICAvKiBDaGVjayB0aGUgaW5wdXQgcGFyYW1ldGVycyBmb3JtYXQgKi8KICAgaWYgKEZvcm1hdCA9PSBSVENfRk9STUFUX0JJTikKICAgewogICAgIC8qIENvbnZlcnQgdGhlIGRhdGUgc3RydWN0dXJlIHBhcmFtZXRlcnMgdG8gQmluYXJ5IGZvcm1hdCAqLwotICAgIHNEYXRlLT5ZZWFyID0gKHVpbnQ4X3QpUlRDX0JjZDJUb0J5dGUoc0RhdGUtPlllYXIpOworICAgIHNEYXRlLT5ZZWFyICA9ICh1aW50OF90KVJUQ19CY2QyVG9CeXRlKHNEYXRlLT5ZZWFyKTsKICAgICBzRGF0ZS0+TW9udGggPSAodWludDhfdClSVENfQmNkMlRvQnl0ZShzRGF0ZS0+TW9udGgpOwotICAgIHNEYXRlLT5EYXRlID0gKHVpbnQ4X3QpUlRDX0JjZDJUb0J5dGUoc0RhdGUtPkRhdGUpOworICAgIHNEYXRlLT5EYXRlICA9ICh1aW50OF90KVJUQ19CY2QyVG9CeXRlKHNEYXRlLT5EYXRlKTsKICAgfQogICByZXR1cm4gSEFMX09LOwogfQogCiAvKioKLSAgKiBAYnJpZWYgIERheWxpZ2h0IFNhdmluZyBUaW1lLCBBZGQgb25lIGhvdXIgdG8gdGhlIGNhbGVuZGFyIGluIG9uZSBzaW5nbGUgb3BlcmF0aW9uCi0gICogICAgICAgICB3aXRob3V0IGdvaW5nIHRocm91Z2ggdGhlIGluaXRpYWxpemF0aW9uIHByb2NlZHVyZS4KLSAgKiBAcGFyYW0gIGhydGMgUlRDIGhhbmRsZQotICAqIEByZXR2YWwgTm9uZQotICAqLwotdm9pZCBIQUxfUlRDX0RTVF9BZGQxSG91cihSVENfSGFuZGxlVHlwZURlZiAqaHJ0YykKLXsKLSAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9ESVNBQkxFKGhydGMpOwotICBTRVRfQklUKGhydGMtPkluc3RhbmNlLT5DUiwgUlRDX0NSX0FERDFIKTsKLSAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7Ci19Ci0KLS8qKgotICAqIEBicmllZiAgRGF5bGlnaHQgU2F2aW5nIFRpbWUsIFN1YnRyYWN0IG9uZSBob3VyIGZyb20gdGhlIGNhbGVuZGFyIGluIG9uZQotICAqICAgICAgICAgc2luZ2xlIG9wZXJhdGlvbiB3aXRob3V0IGdvaW5nIHRocm91Z2ggdGhlIGluaXRpYWxpemF0aW9uIHByb2NlZHVyZS4KLSAgKiBAcGFyYW0gIGhydGMgUlRDIGhhbmRsZQotICAqIEByZXR2YWwgTm9uZQotICAqLwotdm9pZCBIQUxfUlRDX0RTVF9TdWIxSG91cihSVENfSGFuZGxlVHlwZURlZiAqaHJ0YykKLXsKLSAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9ESVNBQkxFKGhydGMpOwotICBTRVRfQklUKGhydGMtPkluc3RhbmNlLT5DUiwgUlRDX0NSX1NVQjFIKTsKLSAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7Ci19Ci0KLS8qKgotICAqIEBicmllZiAgRGF5bGlnaHQgU2F2aW5nIFRpbWUsIFNldCB0aGUgc3RvcmUgb3BlcmF0aW9uIGJpdC4KLSAgKiBAbm90ZSAgIEl0IGNhbiBiZSB1c2VkIGJ5IHRoZSBzb2Z0d2FyZSBpbiBvcmRlciB0byBtZW1vcml6ZSB0aGUgRFNUIHN0YXR1cy4KLSAgKiBAcGFyYW0gIGhydGMgUlRDIGhhbmRsZQotICAqIEByZXR2YWwgTm9uZQotICAqLwotdm9pZCBIQUxfUlRDX0RTVF9TZXRTdG9yZU9wZXJhdGlvbihSVENfSGFuZGxlVHlwZURlZiAqaHJ0YykKLXsKLSAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9ESVNBQkxFKGhydGMpOwotICBTRVRfQklUKGhydGMtPkluc3RhbmNlLT5DUiwgUlRDX0NSX0JLUCk7Ci0gIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRU5BQkxFKGhydGMpOwotfQotCi0vKioKLSAgKiBAYnJpZWYgIERheWxpZ2h0IFNhdmluZyBUaW1lLCBDbGVhciB0aGUgc3RvcmUgb3BlcmF0aW9uIGJpdC4KLSAgKiBAcGFyYW0gIGhydGMgUlRDIGhhbmRsZQotICAqIEByZXR2YWwgTm9uZQotICAqLwotdm9pZCBIQUxfUlRDX0RTVF9DbGVhclN0b3JlT3BlcmF0aW9uKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKQotewotICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0RJU0FCTEUoaHJ0Yyk7Ci0gIENMRUFSX0JJVChocnRjLT5JbnN0YW5jZS0+Q1IsIFJUQ19DUl9CS1ApOwotICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0VOQUJMRShocnRjKTsKLX0KLQotLyoqCi0gICogQGJyaWVmICBEYXlsaWdodCBTYXZpbmcgVGltZSwgUmVhZCB0aGUgc3RvcmUgb3BlcmF0aW9uIGJpdC4KLSAgKiBAcGFyYW0gIGhydGMgUlRDIGhhbmRsZQotICAqIEByZXR2YWwgb3BlcmF0aW9uIHNlZSBSVENfU3RvcmVPcGVyYXRpb25fRGVmaW5pdGlvbnMKLSAgKi8KLXVpbnQzMl90IEhBTF9SVENfRFNUX1JlYWRTdG9yZU9wZXJhdGlvbihSVENfSGFuZGxlVHlwZURlZiAqaHJ0YykKLXsKLSAgcmV0dXJuIFJFQURfQklUKGhydGMtPkluc3RhbmNlLT5DUiwgUlRDX0NSX0JLUCk7Ci19Ci0KLS8qKgogICAqIEB9CiAgICovCiAKIC8qKiBAZGVmZ3JvdXAgUlRDX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDMgUlRDIEFsYXJtIGZ1bmN0aW9ucwotICogIEBicmllZiAgIFJUQyBBbGFybSBmdW5jdGlvbnMKLSAqCisgICogQGJyaWVmICAgIFJUQyBBbGFybSBmdW5jdGlvbnMKKyAgKgogQHZlcmJhdGltCiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAgICAjIyMjIyBSVEMgQWxhcm0gZnVuY3Rpb25zICMjIyMjCkBAIC0xMDcyLDYgKzk1NSw5IEBACiAgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgICAgICBAYXJnIFJUQ19GT1JNQVRfQklOOiBCaW5hcnkgZGF0YSBmb3JtYXQKICAgKiAgICAgICAgICAgICBAYXJnIFJUQ19GT1JNQVRfQkNEOiBCQ0QgZGF0YSBmb3JtYXQKKyAgKiBAbm90ZSAgIFRoZSBBbGFybSByZWdpc3RlciBjYW4gb25seSBiZSB3cml0dGVuIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgQWxhcm0KKyAgKiAgICAgICAgIGlzIGRpc2FibGVkIChVc2UgdGhlIEhBTF9SVENfRGVhY3RpdmF0ZUFsYXJtKCkpLgorICAqIEBub3RlICAgVGhlIEhBTF9SVENfU2V0VGltZSgpIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBlbmFibGluZyB0aGUgQWxhcm0gZmVhdHVyZS4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9SVENfU2V0QWxhcm0oUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMsIFJUQ19BbGFybVR5cGVEZWYgKnNBbGFybSwgdWludDMyX3QgRm9ybWF0KQpAQCAtMTA4OCwxOCArOTc0LDIxIEBACiAgIC8qIFByb2Nlc3MgTG9ja2VkICovCiAgIF9fSEFMX0xPQ0soaHJ0Yyk7CiAKKyAgLyogQ2hhbmdlIFJUQyBzdGF0ZSB0byBCVVNZICovCiAgIGhydGMtPlN0YXRlID0gSEFMX1JUQ19TVEFURV9CVVNZOwogCisgIC8qIENoZWNrIHRoZSBkYXRhIGZvcm1hdCAoYmluYXJ5IG9yIEJDRCkgYW5kIHN0b3JlIHRoZSBBbGFybSB0aW1lIGFuZCBkYXRlCisgICAgIGNvbmZpZ3VyYXRpb24gYWNjb3JkaW5nbHkgKi8KICAgaWYgKEZvcm1hdCA9PSBSVENfRk9STUFUX0JJTikKICAgewotICAgIGlmICgoaHJ0Yy0+SW5zdGFuY2UtPkNSICYgUlRDX0NSX0ZNVCkgIT0gKHVpbnQzMl90KVJFU0VUKQorICAgIGlmICgoaHJ0Yy0+SW5zdGFuY2UtPkNSICYgUlRDX0NSX0ZNVCkgIT0gMFUpCiAgICAgewogICAgICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19IT1VSMTIoc0FsYXJtLT5BbGFybVRpbWUuSG91cnMpKTsKICAgICAgIGFzc2VydF9wYXJhbShJU19SVENfSE9VUkZPUk1BVDEyKHNBbGFybS0+QWxhcm1UaW1lLlRpbWVGb3JtYXQpKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgIHNBbGFybS0+QWxhcm1UaW1lLlRpbWVGb3JtYXQgPSAweDAwOworICAgICAgc0FsYXJtLT5BbGFybVRpbWUuVGltZUZvcm1hdCA9IDB4MDBVOwogICAgICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19IT1VSMjQoc0FsYXJtLT5BbGFybVRpbWUuSG91cnMpKTsKICAgICB9CiAgICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19NSU5VVEVTKHNBbGFybS0+QWxhcm1UaW1lLk1pbnV0ZXMpKTsKQEAgLTExMTQsMjQgKzEwMDMsMjQgQEAKICAgICAgIGFzc2VydF9wYXJhbShJU19SVENfQUxBUk1fREFURV9XRUVLREFZX1dFRUtEQVkoc0FsYXJtLT5BbGFybURhdGVXZWVrRGF5KSk7CiAgICAgfQogCi0gICAgdG1wcmVnID0gKCgodWludDMyX3QpUlRDX0J5dGVUb0JjZDIoc0FsYXJtLT5BbGFybVRpbWUuSG91cnMpIDw8IDE2VSkgfCBcCi0gICAgICAgICAgICAgICgodWludDMyX3QpUlRDX0J5dGVUb0JjZDIoc0FsYXJtLT5BbGFybVRpbWUuTWludXRlcykgPDwgOFUpIHwgXAotICAgICAgICAgICAgICAoKHVpbnQzMl90KVJUQ19CeXRlVG9CY2QyKHNBbGFybS0+QWxhcm1UaW1lLlNlY29uZHMpKSB8IFwKLSAgICAgICAgICAgICAgKCh1aW50MzJfdCkoc0FsYXJtLT5BbGFybVRpbWUuVGltZUZvcm1hdCkgPDwgMTZVKSB8IFwKLSAgICAgICAgICAgICAgKCh1aW50MzJfdClSVENfQnl0ZVRvQmNkMihzQWxhcm0tPkFsYXJtRGF0ZVdlZWtEYXkpIDw8IDI0VSkgfCBcCi0gICAgICAgICAgICAgICgodWludDMyX3Qpc0FsYXJtLT5BbGFybURhdGVXZWVrRGF5U2VsKSB8IFwKKyAgICB0bXByZWcgPSAoKCh1aW50MzJfdClSVENfQnl0ZVRvQmNkMihzQWxhcm0tPkFsYXJtVGltZS5Ib3VycykgICA8PCBSVENfQUxSTUFSX0hVX1BvcykgIHwgXAorICAgICAgICAgICAgICAoKHVpbnQzMl90KVJUQ19CeXRlVG9CY2QyKHNBbGFybS0+QWxhcm1UaW1lLk1pbnV0ZXMpIDw8IFJUQ19BTFJNQVJfTU5VX1BvcykgfCBcCisgICAgICAgICAgICAgICgodWludDMyX3QpUlRDX0J5dGVUb0JjZDIoc0FsYXJtLT5BbGFybVRpbWUuU2Vjb25kcykpICAgICAgICAgICAgICAgICAgICAgICB8IFwKKyAgICAgICAgICAgICAgKCh1aW50MzJfdCkoc0FsYXJtLT5BbGFybVRpbWUuVGltZUZvcm1hdCkgICAgICAgICAgICA8PCBSVENfVFJfUE1fUG9zKSAgICAgIHwgXAorICAgICAgICAgICAgICAoKHVpbnQzMl90KVJUQ19CeXRlVG9CY2QyKHNBbGFybS0+QWxhcm1EYXRlV2Vla0RheSkgIDw8IFJUQ19BTFJNQVJfRFVfUG9zKSAgfCBcCisgICAgICAgICAgICAgICgodWludDMyX3Qpc0FsYXJtLT5BbGFybURhdGVXZWVrRGF5U2VsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFwKICAgICAgICAgICAgICAgKCh1aW50MzJfdClzQWxhcm0tPkFsYXJtTWFzaykpOwogICB9CiAgIGVsc2UKICAgewotICAgIGlmICgoaHJ0Yy0+SW5zdGFuY2UtPkNSICYgUlRDX0NSX0ZNVCkgIT0gKHVpbnQzMl90KVJFU0VUKQorICAgIGlmICgoaHJ0Yy0+SW5zdGFuY2UtPkNSICYgUlRDX0NSX0ZNVCkgIT0gMFUpCiAgICAgewogICAgICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19IT1VSMTIoUlRDX0JjZDJUb0J5dGUoc0FsYXJtLT5BbGFybVRpbWUuSG91cnMpKSk7CiAgICAgICBhc3NlcnRfcGFyYW0oSVNfUlRDX0hPVVJGT1JNQVQxMihzQWxhcm0tPkFsYXJtVGltZS5UaW1lRm9ybWF0KSk7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICBzQWxhcm0tPkFsYXJtVGltZS5UaW1lRm9ybWF0ID0gMHgwMDsKKyAgICAgIHNBbGFybS0+QWxhcm1UaW1lLlRpbWVGb3JtYXQgPSAweDAwVTsKICAgICAgIGFzc2VydF9wYXJhbShJU19SVENfSE9VUjI0KFJUQ19CY2QyVG9CeXRlKHNBbGFybS0+QWxhcm1UaW1lLkhvdXJzKSkpOwogICAgIH0KIApAQCAtMTE0NywxMyArMTAzNiwxMyBAQAogICAgICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19BTEFSTV9EQVRFX1dFRUtEQVlfV0VFS0RBWShSVENfQmNkMlRvQnl0ZShzQWxhcm0tPkFsYXJtRGF0ZVdlZWtEYXkpKSk7CiAgICAgfQogCi0gICAgdG1wcmVnID0gKCgodWludDMyX3QpKHNBbGFybS0+QWxhcm1UaW1lLkhvdXJzKSA8PCAxNlUpIHwgXAotICAgICAgICAgICAgICAoKHVpbnQzMl90KShzQWxhcm0tPkFsYXJtVGltZS5NaW51dGVzKSA8PCA4VSkgfCBcCi0gICAgICAgICAgICAgICgodWludDMyX3QpIHNBbGFybS0+QWxhcm1UaW1lLlNlY29uZHMpIHwgXAotICAgICAgICAgICAgICAoKHVpbnQzMl90KShzQWxhcm0tPkFsYXJtVGltZS5UaW1lRm9ybWF0KSA8PCAxNlUpIHwgXAotICAgICAgICAgICAgICAoKHVpbnQzMl90KShzQWxhcm0tPkFsYXJtRGF0ZVdlZWtEYXkpIDw8IDI0VSkgfCBcCi0gICAgICAgICAgICAgICgodWludDMyX3Qpc0FsYXJtLT5BbGFybURhdGVXZWVrRGF5U2VsKSB8IFwKLSAgICAgICAgICAgICAgKCh1aW50MzJfdClzQWxhcm0tPkFsYXJtTWFzaykpOworICAgIHRtcHJlZyA9ICgoKHVpbnQzMl90KShzQWxhcm0tPkFsYXJtVGltZS5Ib3VycykgICAgICA8PCBSVENfQUxSTUFSX0hVX1BvcykgIHwgXAorICAgICAgICAgICAgICAoKHVpbnQzMl90KShzQWxhcm0tPkFsYXJtVGltZS5NaW51dGVzKSAgICA8PCBSVENfQUxSTUFSX01OVV9Qb3MpIHwgXAorICAgICAgICAgICAgICAoKHVpbnQzMl90KSBzQWxhcm0tPkFsYXJtVGltZS5TZWNvbmRzKSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgXAorICAgICAgICAgICAgICAoKHVpbnQzMl90KShzQWxhcm0tPkFsYXJtVGltZS5UaW1lRm9ybWF0KSA8PCBSVENfVFJfUE1fUG9zKSAgICAgIHwgXAorICAgICAgICAgICAgICAoKHVpbnQzMl90KShzQWxhcm0tPkFsYXJtRGF0ZVdlZWtEYXkpICAgICA8PCBSVENfQUxSTUFSX0RVX1BvcykgIHwgXAorICAgICAgICAgICAgICAoKHVpbnQzMl90KSBzQWxhcm0tPkFsYXJtRGF0ZVdlZWtEYXlTZWwpICAgICAgICAgICAgICAgICAgICAgICAgIHwgXAorICAgICAgICAgICAgICAoKHVpbnQzMl90KSBzQWxhcm0tPkFsYXJtTWFzaykpOwogICB9CiAKICAgLyogRGlzYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLwpAQCAtMTE2MiwxNyArMTA1MSwyMCBAQAogICAvKiBDb25maWd1cmUgdGhlIEFsYXJtIHJlZ2lzdGVyICovCiAgIGlmIChzQWxhcm0tPkFsYXJtID09IFJUQ19BTEFSTV9BKQogICB7Ci0gICAgLyogRGlzYWJsZSB0aGUgQWxhcm0gQSBpbnRlcnJ1cHQgKi8KKyAgICAvKiBEaXNhYmxlIHRoZSBBbGFybSBBICovCiAgICAgX19IQUxfUlRDX0FMQVJNQV9ESVNBQkxFKGhydGMpOwogCi0gICAgLyogSW4gY2FzZSBvZiBpbnRlcnJ1cHQgbW9kZSBpcyB1c2VkLCB0aGUgaW50ZXJydXB0IHNvdXJjZSBtdXN0IGRpc2FibGVkICovCisgICAgLyogSW4gY2FzZSBpbnRlcnJ1cHQgbW9kZSBpcyB1c2VkLCB0aGUgaW50ZXJydXB0IHNvdXJjZSBtdXN0IGJlIGRpc2FibGVkICovCiAgICAgX19IQUxfUlRDX0FMQVJNX0RJU0FCTEVfSVQoaHJ0YywgUlRDX0lUX0FMUkEpOwogCisgICAgLyogQ2xlYXIgdGhlIEFsYXJtIGZsYWcgKi8KKyAgICBfX0hBTF9SVENfQUxBUk1fQ0xFQVJfRkxBRyhocnRjLCBSVENfRkxBR19BTFJBRik7CisKICAgICAvKiBHZXQgdGljayAqLwogICAgIHRpY2tzdGFydCA9IEhBTF9HZXRUaWNrKCk7CiAKLSAgICAvKiBXYWl0IHRpbGwgUlRDIEFMUkFXRiBmbGFnIGlzIHNldCBhbmQgaWYgVGltZSBvdXQgaXMgcmVhY2hlZCBleGl0ICovCi0gICAgd2hpbGUgKF9fSEFMX1JUQ19BTEFSTV9HRVRfRkxBRyhocnRjLCBSVENfRkxBR19BTFJBV0YpID09IFJFU0VUKQorICAgIC8qIFdhaXQgdGlsbCBSVEMgQUxSQVdGIGZsYWcgaXMgc2V0IGFuZCBpZiB0aW1lb3V0IGlzIHJlYWNoZWQgZXhpdCAqLworICAgIHdoaWxlIChfX0hBTF9SVENfQUxBUk1fR0VUX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfQUxSQVdGKSA9PSAwVSkKICAgICB7CiAgICAgICBpZiAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gUlRDX1RJTUVPVVRfVkFMVUUpCiAgICAgICB7CkBAIC0xMTk0LDE3ICsxMDg2LDIwIEBACiAgIH0KICAgZWxzZQogICB7Ci0gICAgLyogRGlzYWJsZSB0aGUgQWxhcm0gQiBpbnRlcnJ1cHQgKi8KKyAgICAvKiBEaXNhYmxlIHRoZSBBbGFybSBCICovCiAgICAgX19IQUxfUlRDX0FMQVJNQl9ESVNBQkxFKGhydGMpOwogCi0gICAgLyogSW4gY2FzZSBvZiBpbnRlcnJ1cHQgbW9kZSBpcyB1c2VkLCB0aGUgaW50ZXJydXB0IHNvdXJjZSBtdXN0IGRpc2FibGVkICovCisgICAgLyogSW4gY2FzZSBpbnRlcnJ1cHQgbW9kZSBpcyB1c2VkLCB0aGUgaW50ZXJydXB0IHNvdXJjZSBtdXN0IGJlIGRpc2FibGVkICovCiAgICAgX19IQUxfUlRDX0FMQVJNX0RJU0FCTEVfSVQoaHJ0YywgUlRDX0lUX0FMUkIpOwogCisgICAgLyogQ2xlYXIgdGhlIEFsYXJtIGZsYWcgKi8KKyAgICBfX0hBTF9SVENfQUxBUk1fQ0xFQVJfRkxBRyhocnRjLCBSVENfRkxBR19BTFJCRik7CisKICAgICAvKiBHZXQgdGljayAqLwogICAgIHRpY2tzdGFydCA9IEhBTF9HZXRUaWNrKCk7CiAKLSAgICAvKiBXYWl0IHRpbGwgUlRDIEFMUkJXRiBmbGFnIGlzIHNldCBhbmQgaWYgVGltZSBvdXQgaXMgcmVhY2hlZCBleGl0ICovCi0gICAgd2hpbGUgKF9fSEFMX1JUQ19BTEFSTV9HRVRfRkxBRyhocnRjLCBSVENfRkxBR19BTFJCV0YpID09IFJFU0VUKQorICAgIC8qIFdhaXQgdGlsbCBSVEMgQUxSQldGIGZsYWcgaXMgc2V0IGFuZCBpZiB0aW1lb3V0IGlzIHJlYWNoZWQgZXhpdCAqLworICAgIHdoaWxlIChfX0hBTF9SVENfQUxBUk1fR0VUX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfQUxSQldGKSA9PSAwVSkKICAgICB7CiAgICAgICBpZiAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gUlRDX1RJTUVPVVRfVkFMVUUpCiAgICAgICB7CkBAIC0xMjI4LDcgKzExMjMsNyBAQAogICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7CiAKLSAgLyogQ2hhbmdlIFJUQyBzdGF0ZSAqLworICAvKiBDaGFuZ2UgUlRDIHN0YXRlIGJhY2sgdG8gUkVBRFkgKi8KICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX1JFQURZOwogCiAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KQEAgLTEyMzgsNyArMTEzMyw3IEBACiB9CiAKIC8qKgotICAqIEBicmllZiAgU2V0cyB0aGUgc3BlY2lmaWVkIFJUQyBBbGFybSB3aXRoIEludGVycnVwdAorICAqIEBicmllZiAgU2V0cyB0aGUgc3BlY2lmaWVkIFJUQyBBbGFybSB3aXRoIEludGVycnVwdC4KICAgKiBAcGFyYW0gIGhydGMgcG9pbnRlciB0byBhIFJUQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIFJUQy4KICAgKiBAcGFyYW0gIHNBbGFybSBQb2ludGVyIHRvIEFsYXJtIHN0cnVjdHVyZQpAQCAtMTI0NiwxMiArMTE0MSwxNSBAQAogICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICAgICAgQGFyZyBSVENfRk9STUFUX0JJTjogQmluYXJ5IGRhdGEgZm9ybWF0CiAgICogICAgICAgICAgICAgQGFyZyBSVENfRk9STUFUX0JDRDogQkNEIGRhdGEgZm9ybWF0CisgICogQG5vdGUgICBUaGUgQWxhcm0gcmVnaXN0ZXIgY2FuIG9ubHkgYmUgd3JpdHRlbiB3aGVuIHRoZSBjb3JyZXNwb25kaW5nIEFsYXJtCisgICogICAgICAgICBpcyBkaXNhYmxlZCAoVXNlIHRoZSBIQUxfUlRDX0RlYWN0aXZhdGVBbGFybSgpKS4KKyAgKiBAbm90ZSAgIFRoZSBIQUxfUlRDX1NldFRpbWUoKSBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgZW5hYmxpbmcgdGhlIEFsYXJtIGZlYXR1cmUuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfUlRDX1NldEFsYXJtX0lUKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjLCBSVENfQWxhcm1UeXBlRGVmICpzQWxhcm0sIHVpbnQzMl90IEZvcm1hdCkKIHsKLSAgdWludDMyX3QgdG1wcmVnID0gMFU7Ci0gIF9fSU8gdWludDMyX3QgY291bnQgPSBSVENfVElNRU9VVF9WQUxVRSAgKiAoU3lzdGVtQ29yZUNsb2NrIC8gMzJVIC8gMTAwMFUpOworICBfX0lPIHVpbnQzMl90IGNvdW50ICA9IFJUQ19USU1FT1VUX1ZBTFVFICogKFN5c3RlbUNvcmVDbG9jayAvIDMyVSAvIDEwMDBVKTsKKyAgICAgICB1aW50MzJfdCB0bXByZWcgPSAwVTsKIAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfUlRDX0ZPUk1BVChGb3JtYXQpKTsKQEAgLTEyNjIsMTggKzExNjAsMjEgQEAKICAgLyogUHJvY2VzcyBMb2NrZWQgKi8KICAgX19IQUxfTE9DSyhocnRjKTsKIAorICAvKiBDaGFuZ2UgUlRDIHN0YXRlIHRvIEJVU1kgKi8KICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX0JVU1k7CiAKKyAgLyogQ2hlY2sgdGhlIGRhdGEgZm9ybWF0IChiaW5hcnkgb3IgQkNEKSBhbmQgc3RvcmUgdGhlIEFsYXJtIHRpbWUgYW5kIGRhdGUKKyAgICAgY29uZmlndXJhdGlvbiBhY2NvcmRpbmdseSAqLwogICBpZiAoRm9ybWF0ID09IFJUQ19GT1JNQVRfQklOKQogICB7Ci0gICAgaWYgKChocnRjLT5JbnN0YW5jZS0+Q1IgJiBSVENfQ1JfRk1UKSAhPSAodWludDMyX3QpUkVTRVQpCisgICAgaWYgKChocnRjLT5JbnN0YW5jZS0+Q1IgJiBSVENfQ1JfRk1UKSAhPSAwVSkKICAgICB7CiAgICAgICBhc3NlcnRfcGFyYW0oSVNfUlRDX0hPVVIxMihzQWxhcm0tPkFsYXJtVGltZS5Ib3VycykpOwogICAgICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19IT1VSRk9STUFUMTIoc0FsYXJtLT5BbGFybVRpbWUuVGltZUZvcm1hdCkpOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgc0FsYXJtLT5BbGFybVRpbWUuVGltZUZvcm1hdCA9IDB4MDA7CisgICAgICBzQWxhcm0tPkFsYXJtVGltZS5UaW1lRm9ybWF0ID0gMHgwMFU7CiAgICAgICBhc3NlcnRfcGFyYW0oSVNfUlRDX0hPVVIyNChzQWxhcm0tPkFsYXJtVGltZS5Ib3VycykpOwogICAgIH0KICAgICBhc3NlcnRfcGFyYW0oSVNfUlRDX01JTlVURVMoc0FsYXJtLT5BbGFybVRpbWUuTWludXRlcykpOwpAQCAtMTI4NywyNCArMTE4OCwyNSBAQAogICAgIHsKICAgICAgIGFzc2VydF9wYXJhbShJU19SVENfQUxBUk1fREFURV9XRUVLREFZX1dFRUtEQVkoc0FsYXJtLT5BbGFybURhdGVXZWVrRGF5KSk7CiAgICAgfQotICAgIHRtcHJlZyA9ICgoKHVpbnQzMl90KVJUQ19CeXRlVG9CY2QyKHNBbGFybS0+QWxhcm1UaW1lLkhvdXJzKSA8PCAxNlUpIHwgXAotICAgICAgICAgICAgICAoKHVpbnQzMl90KVJUQ19CeXRlVG9CY2QyKHNBbGFybS0+QWxhcm1UaW1lLk1pbnV0ZXMpIDw8IDhVKSB8IFwKLSAgICAgICAgICAgICAgKCh1aW50MzJfdClSVENfQnl0ZVRvQmNkMihzQWxhcm0tPkFsYXJtVGltZS5TZWNvbmRzKSkgfCBcCi0gICAgICAgICAgICAgICgodWludDMyX3QpKHNBbGFybS0+QWxhcm1UaW1lLlRpbWVGb3JtYXQpIDw8IDE2VSkgfCBcCi0gICAgICAgICAgICAgICgodWludDMyX3QpUlRDX0J5dGVUb0JjZDIoc0FsYXJtLT5BbGFybURhdGVXZWVrRGF5KSA8PCAyNFUpIHwgXAotICAgICAgICAgICAgICAoKHVpbnQzMl90KXNBbGFybS0+QWxhcm1EYXRlV2Vla0RheVNlbCkgfCBcCisKKyAgICB0bXByZWcgPSAoKCh1aW50MzJfdClSVENfQnl0ZVRvQmNkMihzQWxhcm0tPkFsYXJtVGltZS5Ib3VycykgICA8PCBSVENfQUxSTUFSX0hVX1BvcykgIHwgXAorICAgICAgICAgICAgICAoKHVpbnQzMl90KVJUQ19CeXRlVG9CY2QyKHNBbGFybS0+QWxhcm1UaW1lLk1pbnV0ZXMpIDw8IFJUQ19BTFJNQVJfTU5VX1BvcykgfCBcCisgICAgICAgICAgICAgICgodWludDMyX3QpUlRDX0J5dGVUb0JjZDIoc0FsYXJtLT5BbGFybVRpbWUuU2Vjb25kcykpICAgICAgICAgICAgICAgICAgICAgICB8IFwKKyAgICAgICAgICAgICAgKCh1aW50MzJfdCkoc0FsYXJtLT5BbGFybVRpbWUuVGltZUZvcm1hdCkgICAgICAgICAgICA8PCBSVENfVFJfUE1fUG9zKSAgICAgIHwgXAorICAgICAgICAgICAgICAoKHVpbnQzMl90KVJUQ19CeXRlVG9CY2QyKHNBbGFybS0+QWxhcm1EYXRlV2Vla0RheSkgIDw8IFJUQ19BTFJNQVJfRFVfUG9zKSAgfCBcCisgICAgICAgICAgICAgICgodWludDMyX3Qpc0FsYXJtLT5BbGFybURhdGVXZWVrRGF5U2VsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFwKICAgICAgICAgICAgICAgKCh1aW50MzJfdClzQWxhcm0tPkFsYXJtTWFzaykpOwogICB9CiAgIGVsc2UKICAgewotICAgIGlmICgoaHJ0Yy0+SW5zdGFuY2UtPkNSICYgUlRDX0NSX0ZNVCkgIT0gKHVpbnQzMl90KVJFU0VUKQorICAgIGlmICgoaHJ0Yy0+SW5zdGFuY2UtPkNSICYgUlRDX0NSX0ZNVCkgIT0gMFUpCiAgICAgewogICAgICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19IT1VSMTIoUlRDX0JjZDJUb0J5dGUoc0FsYXJtLT5BbGFybVRpbWUuSG91cnMpKSk7CiAgICAgICBhc3NlcnRfcGFyYW0oSVNfUlRDX0hPVVJGT1JNQVQxMihzQWxhcm0tPkFsYXJtVGltZS5UaW1lRm9ybWF0KSk7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICBzQWxhcm0tPkFsYXJtVGltZS5UaW1lRm9ybWF0ID0gMHgwMDsKKyAgICAgIHNBbGFybS0+QWxhcm1UaW1lLlRpbWVGb3JtYXQgPSAweDAwVTsKICAgICAgIGFzc2VydF9wYXJhbShJU19SVENfSE9VUjI0KFJUQ19CY2QyVG9CeXRlKHNBbGFybS0+QWxhcm1UaW1lLkhvdXJzKSkpOwogICAgIH0KIApAQCAtMTMxOSwxMyArMTIyMSwxNCBAQAogICAgIHsKICAgICAgIGFzc2VydF9wYXJhbShJU19SVENfQUxBUk1fREFURV9XRUVLREFZX1dFRUtEQVkoUlRDX0JjZDJUb0J5dGUoc0FsYXJtLT5BbGFybURhdGVXZWVrRGF5KSkpOwogICAgIH0KLSAgICB0bXByZWcgPSAoKCh1aW50MzJfdCkoc0FsYXJtLT5BbGFybVRpbWUuSG91cnMpIDw8IDE2VSkgfCBcCi0gICAgICAgICAgICAgICgodWludDMyX3QpKHNBbGFybS0+QWxhcm1UaW1lLk1pbnV0ZXMpIDw8IDhVKSB8IFwKLSAgICAgICAgICAgICAgKCh1aW50MzJfdCkgc0FsYXJtLT5BbGFybVRpbWUuU2Vjb25kcykgfCBcCi0gICAgICAgICAgICAgICgodWludDMyX3QpKHNBbGFybS0+QWxhcm1UaW1lLlRpbWVGb3JtYXQpIDw8IDE2VSkgfCBcCi0gICAgICAgICAgICAgICgodWludDMyX3QpKHNBbGFybS0+QWxhcm1EYXRlV2Vla0RheSkgPDwgMjRVKSB8IFwKLSAgICAgICAgICAgICAgKCh1aW50MzJfdClzQWxhcm0tPkFsYXJtRGF0ZVdlZWtEYXlTZWwpIHwgXAotICAgICAgICAgICAgICAoKHVpbnQzMl90KXNBbGFybS0+QWxhcm1NYXNrKSk7CisKKyAgICB0bXByZWcgPSAoKCh1aW50MzJfdCkoc0FsYXJtLT5BbGFybVRpbWUuSG91cnMpICAgICAgPDwgUlRDX0FMUk1BUl9IVV9Qb3MpICB8IFwKKyAgICAgICAgICAgICAgKCh1aW50MzJfdCkoc0FsYXJtLT5BbGFybVRpbWUuTWludXRlcykgICAgPDwgUlRDX0FMUk1BUl9NTlVfUG9zKSB8IFwKKyAgICAgICAgICAgICAgKCh1aW50MzJfdCkgc0FsYXJtLT5BbGFybVRpbWUuU2Vjb25kcykgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFwKKyAgICAgICAgICAgICAgKCh1aW50MzJfdCkoc0FsYXJtLT5BbGFybVRpbWUuVGltZUZvcm1hdCkgPDwgUlRDX1RSX1BNX1BvcykgICAgICB8IFwKKyAgICAgICAgICAgICAgKCh1aW50MzJfdCkoc0FsYXJtLT5BbGFybURhdGVXZWVrRGF5KSAgICAgPDwgUlRDX0FMUk1BUl9EVV9Qb3MpICB8IFwKKyAgICAgICAgICAgICAgKCh1aW50MzJfdCkgc0FsYXJtLT5BbGFybURhdGVXZWVrRGF5U2VsKSAgICAgICAgICAgICAgICAgICAgICAgICB8IFwKKyAgICAgICAgICAgICAgKCh1aW50MzJfdCkgc0FsYXJtLT5BbGFybU1hc2spKTsKICAgfQogCiAgIC8qIERpc2FibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KQEAgLTEzMzQsMTYgKzEyMzcsMTcgQEAKICAgLyogQ29uZmlndXJlIHRoZSBBbGFybSByZWdpc3RlciAqLwogICBpZiAoc0FsYXJtLT5BbGFybSA9PSBSVENfQUxBUk1fQSkKICAgewotICAgIC8qIERpc2FibGUgdGhlIEFsYXJtIEEgaW50ZXJydXB0ICovCisgICAgLyogRGlzYWJsZSB0aGUgQWxhcm0gQSAqLwogICAgIF9fSEFMX1JUQ19BTEFSTUFfRElTQUJMRShocnRjKTsKIAotICAgIC8qIENsZWFyIGZsYWcgYWxhcm0gQSAqLworICAgIC8qIENsZWFyIHRoZSBBbGFybSBmbGFnICovCiAgICAgX19IQUxfUlRDX0FMQVJNX0NMRUFSX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfQUxSQUYpOwogCi0gICAgLyogV2FpdCB0aWxsIFJUQyBBTFJBV0YgZmxhZyBpcyBzZXQgYW5kIGlmIFRpbWUgb3V0IGlzIHJlYWNoZWQgZXhpdCAqLworICAgIC8qIFdhaXQgdGlsbCBSVEMgQUxSQVdGIGZsYWcgaXMgc2V0IGFuZCBpZiB0aW1lb3V0IGlzIHJlYWNoZWQgZXhpdCAqLwogICAgIGRvCiAgICAgewotICAgICAgaWYgKGNvdW50LS0gPT0gMFUpCisgICAgICBjb3VudCA9IGNvdW50IC0gMVU7CisgICAgICBpZiAoY291bnQgPT0gMFUpCiAgICAgICB7CiAgICAgICAgIC8qIEVuYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLwogICAgICAgICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0VOQUJMRShocnRjKTsKQEAgLTEzNTUsOCArMTI1OSw3IEBACiAKICAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOwogICAgICAgfQotICAgIH0KLSAgICB3aGlsZSAoX19IQUxfUlRDX0FMQVJNX0dFVF9GTEFHKGhydGMsIFJUQ19GTEFHX0FMUkFXRikgPT0gUkVTRVQpOworICAgIH0gd2hpbGUgKF9fSEFMX1JUQ19BTEFSTV9HRVRfRkxBRyhocnRjLCBSVENfRkxBR19BTFJBV0YpID09IDBVKTsKIAogICAgIGhydGMtPkluc3RhbmNlLT5BTFJNQVIgPSAodWludDMyX3QpdG1wcmVnOwogICAgIC8qIENvbmZpZ3VyZSB0aGUgQWxhcm0gc3RhdGU6IEVuYWJsZSBBbGFybSAqLwpAQCAtMTM2NiwxNiArMTI2OSwyMCBAQAogICB9CiAgIGVsc2UKICAgewotICAgIC8qIERpc2FibGUgdGhlIEFsYXJtIEIgaW50ZXJydXB0ICovCisgICAgLyogRGlzYWJsZSB0aGUgQWxhcm0gQiAqLwogICAgIF9fSEFMX1JUQ19BTEFSTUJfRElTQUJMRShocnRjKTsKIAotICAgIC8qIENsZWFyIGZsYWcgYWxhcm0gQiAqLworICAgIC8qIENsZWFyIHRoZSBBbGFybSBmbGFnICovCiAgICAgX19IQUxfUlRDX0FMQVJNX0NMRUFSX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfQUxSQkYpOwogCi0gICAgLyogV2FpdCB0aWxsIFJUQyBBTFJCV0YgZmxhZyBpcyBzZXQgYW5kIGlmIFRpbWUgb3V0IGlzIHJlYWNoZWQgZXhpdCAqLworICAgIC8qIFJlbG9hZCB0aGUgY291bnRlciAqLworICAgIGNvdW50ID0gUlRDX1RJTUVPVVRfVkFMVUUgKiAoU3lzdGVtQ29yZUNsb2NrIC8gMzJVIC8gMTAwMFUpOworCisgICAgLyogV2FpdCB0aWxsIFJUQyBBTFJCV0YgZmxhZyBpcyBzZXQgYW5kIGlmIHRpbWVvdXQgaXMgcmVhY2hlZCBleGl0ICovCiAgICAgZG8KICAgICB7Ci0gICAgICBpZiAoY291bnQtLSA9PSAwKQorICAgICAgY291bnQgPSBjb3VudCAtIDFVOworICAgICAgaWYgKGNvdW50ID09IDBVKQogICAgICAgewogICAgICAgICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KICAgICAgICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7CkBAIC0xMzg3LDggKzEyOTQsNyBAQAogCiAgICAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKICAgICAgIH0KLSAgICB9Ci0gICAgd2hpbGUgKF9fSEFMX1JUQ19BTEFSTV9HRVRfRkxBRyhocnRjLCBSVENfRkxBR19BTFJCV0YpID09IFJFU0VUKTsKKyAgICB9IHdoaWxlIChfX0hBTF9SVENfQUxBUk1fR0VUX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfQUxSQldGKSA9PSAwVSk7CiAKICAgICBocnRjLT5JbnN0YW5jZS0+QUxSTUJSID0gKHVpbnQzMl90KXRtcHJlZzsKICAgICAvKiBDb25maWd1cmUgdGhlIEFsYXJtIHN0YXRlOiBFbmFibGUgQWxhcm0gKi8KQEAgLTEzOTksMTIgKzEzMDUsMTIgQEAKIAogICAvKiBSVEMgQWxhcm0gSW50ZXJydXB0IENvbmZpZ3VyYXRpb246IEVYVEkgY29uZmlndXJhdGlvbiAqLwogICBfX0hBTF9SVENfQUxBUk1fRVhUSV9FTkFCTEVfSVQoKTsKLQotICBFWFRJLT5SVFNSIHw9IFJUQ19FWFRJX0xJTkVfQUxBUk1fRVZFTlQ7CisgIF9fSEFMX1JUQ19BTEFSTV9FWFRJX0VOQUJMRV9SSVNJTkdfRURHRSgpOwogCiAgIC8qIEVuYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLwogICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0VOQUJMRShocnRjKTsKIAorICAvKiBDaGFuZ2UgUlRDIHN0YXRlIGJhY2sgdG8gUkVBRFkgKi8KICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX1JFQURZOwogCiAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KQEAgLTE0MTQsMTMgKzEzMjAsMTMgQEAKIH0KIAogLyoqCi0gICogQGJyaWVmICBEZWFjdGl2YXRlIHRoZSBzcGVjaWZpZWQgUlRDIEFsYXJtCisgICogQGJyaWVmICBEZWFjdGl2YXRlcyB0aGUgc3BlY2lmaWVkIFJUQyBBbGFybS4KICAgKiBAcGFyYW0gIGhydGMgcG9pbnRlciB0byBhIFJUQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIFJUQy4KICAgKiBAcGFyYW0gIEFsYXJtIFNwZWNpZmllcyB0aGUgQWxhcm0uCiAgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKLSAgKiAgICAgICAgICAgIEBhcmcgUlRDX0FMQVJNX0E6ICBBbGFybUEKLSAgKiAgICAgICAgICAgIEBhcmcgUlRDX0FMQVJNX0I6ICBBbGFybUIKKyAgKiAgICAgICAgICAgIEBhcmcgUlRDX0FMQVJNX0E6IEFsYXJtIEEKKyAgKiAgICAgICAgICAgIEBhcmcgUlRDX0FMQVJNX0I6IEFsYXJtIEIKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9SVENfRGVhY3RpdmF0ZUFsYXJtKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjLCB1aW50MzJfdCBBbGFybSkKQEAgLTE0NDAsMTcgKzEzNDYsMTcgQEAKIAogICBpZiAoQWxhcm0gPT0gUlRDX0FMQVJNX0EpCiAgIHsKLSAgICAvKiBBbGFybUEgKi8KKyAgICAvKiBEaXNhYmxlIEFsYXJtIEEgKi8KICAgICBfX0hBTF9SVENfQUxBUk1BX0RJU0FCTEUoaHJ0Yyk7CiAKLSAgICAvKiBJbiBjYXNlIG9mIGludGVycnVwdCBtb2RlIGlzIHVzZWQsIHRoZSBpbnRlcnJ1cHQgc291cmNlIG11c3QgZGlzYWJsZWQgKi8KKyAgICAvKiBJbiBjYXNlIGludGVycnVwdCBtb2RlIGlzIHVzZWQsIHRoZSBpbnRlcnJ1cHQgc291cmNlIG11c3QgYmUgZGlzYWJsZWQgKi8KICAgICBfX0hBTF9SVENfQUxBUk1fRElTQUJMRV9JVChocnRjLCBSVENfSVRfQUxSQSk7CiAKICAgICAvKiBHZXQgdGljayAqLwogICAgIHRpY2tzdGFydCA9IEhBTF9HZXRUaWNrKCk7CiAKLSAgICAvKiBXYWl0IHRpbGwgUlRDIEFMUnhXRiBmbGFnIGlzIHNldCBhbmQgaWYgVGltZSBvdXQgaXMgcmVhY2hlZCBleGl0ICovCi0gICAgd2hpbGUgKF9fSEFMX1JUQ19BTEFSTV9HRVRfRkxBRyhocnRjLCBSVENfRkxBR19BTFJBV0YpID09IFJFU0VUKQorICAgIC8qIFdhaXQgdGlsbCBSVEMgQUxSeFdGIGZsYWcgaXMgc2V0IGFuZCBpZiB0aW1lb3V0IGlzIHJlYWNoZWQgZXhpdCAqLworICAgIHdoaWxlIChfX0hBTF9SVENfQUxBUk1fR0VUX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfQUxSQVdGKSA9PSAwVSkKICAgICB7CiAgICAgICBpZiAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gUlRDX1RJTUVPVVRfVkFMVUUpCiAgICAgICB7CkBAIC0xNDY4LDE3ICsxMzc0LDE3IEBACiAgIH0KICAgZWxzZQogICB7Ci0gICAgLyogQWxhcm1CICovCisgICAgLyogRGlzYWJsZSBBbGFybSBCICovCiAgICAgX19IQUxfUlRDX0FMQVJNQl9ESVNBQkxFKGhydGMpOwogCi0gICAgLyogSW4gY2FzZSBvZiBpbnRlcnJ1cHQgbW9kZSBpcyB1c2VkLCB0aGUgaW50ZXJydXB0IHNvdXJjZSBtdXN0IGRpc2FibGVkICovCisgICAgLyogSW4gY2FzZSBpbnRlcnJ1cHQgbW9kZSBpcyB1c2VkLCB0aGUgaW50ZXJydXB0IHNvdXJjZSBtdXN0IGJlIGRpc2FibGVkICovCiAgICAgX19IQUxfUlRDX0FMQVJNX0RJU0FCTEVfSVQoaHJ0YywgUlRDX0lUX0FMUkIpOwogCiAgICAgLyogR2V0IHRpY2sgKi8KICAgICB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOwogCi0gICAgLyogV2FpdCB0aWxsIFJUQyBBTFJ4V0YgZmxhZyBpcyBzZXQgYW5kIGlmIFRpbWUgb3V0IGlzIHJlYWNoZWQgZXhpdCAqLwotICAgIHdoaWxlIChfX0hBTF9SVENfQUxBUk1fR0VUX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfQUxSQldGKSA9PSBSRVNFVCkKKyAgICAvKiBXYWl0IHRpbGwgUlRDIEFMUnhXRiBmbGFnIGlzIHNldCBhbmQgaWYgdGltZW91dCBpcyByZWFjaGVkIGV4aXQgKi8KKyAgICB3aGlsZSAoX19IQUxfUlRDX0FMQVJNX0dFVF9GTEFHKGhydGMsIFJUQ19GTEFHX0FMUkJXRikgPT0gMFUpCiAgICAgewogICAgICAgaWYgKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+IFJUQ19USU1FT1VUX1ZBTFVFKQogICAgICAgewpAQCAtMTQ5NCw2ICsxNDAwLDcgQEAKICAgICAgIH0KICAgICB9CiAgIH0KKwogICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7CiAKQEAgLTE1MTIsOCArMTQxOSw4IEBACiAgICogQHBhcmFtICBzQWxhcm0gUG9pbnRlciB0byBEYXRlIHN0cnVjdHVyZQogICAqIEBwYXJhbSAgQWxhcm0gU3BlY2lmaWVzIHRoZSBBbGFybS4KICAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgotICAqICAgICAgICAgICAgIEBhcmcgUlRDX0FMQVJNX0E6IEFsYXJtQQotICAqICAgICAgICAgICAgIEBhcmcgUlRDX0FMQVJNX0I6IEFsYXJtQgorICAqICAgICAgICAgICAgQGFyZyBSVENfQUxBUk1fQTogQWxhcm0gQQorICAqICAgICAgICAgICAgQGFyZyBSVENfQUxBUk1fQjogQWxhcm0gQgogICAqIEBwYXJhbSAgRm9ybWF0IFNwZWNpZmllcyB0aGUgZm9ybWF0IG9mIHRoZSBlbnRlcmVkIHBhcmFtZXRlcnMuCiAgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgICAgICBAYXJnIFJUQ19GT1JNQVRfQklOOiBCaW5hcnkgZGF0YSBmb3JtYXQKQEAgLTE1MzAsNyArMTQzNyw2IEBACiAKICAgaWYgKEFsYXJtID09IFJUQ19BTEFSTV9BKQogICB7Ci0gICAgLyogQWxhcm1BICovCiAgICAgc0FsYXJtLT5BbGFybSA9IFJUQ19BTEFSTV9BOwogCiAgICAgdG1wcmVnID0gKHVpbnQzMl90KShocnRjLT5JbnN0YW5jZS0+QUxSTUFSKTsKQEAgLTE1NDMsNzIgKzE0NDksNzIgQEAKICAgfQogCiAgIC8qIEZpbGwgdGhlIHN0cnVjdHVyZSB3aXRoIHRoZSByZWFkIHBhcmFtZXRlcnMgKi8KLSAgc0FsYXJtLT5BbGFybVRpbWUuSG91cnMgPSAodWludDMyX3QpKCh0bXByZWcgJiAoUlRDX0FMUk1BUl9IVCB8IFJUQ19BTFJNQVJfSFUpKSA+PiAxNlUpOwotICBzQWxhcm0tPkFsYXJtVGltZS5NaW51dGVzID0gKHVpbnQzMl90KSgodG1wcmVnICYgKFJUQ19BTFJNQVJfTU5UIHwgUlRDX0FMUk1BUl9NTlUpKSA+PiA4VSk7Ci0gIHNBbGFybS0+QWxhcm1UaW1lLlNlY29uZHMgPSAodWludDMyX3QpKHRtcHJlZyAmIChSVENfQUxSTUFSX1NUIHwgUlRDX0FMUk1BUl9TVSkpOwotICBzQWxhcm0tPkFsYXJtVGltZS5UaW1lRm9ybWF0ID0gKHVpbnQzMl90KSgodG1wcmVnICYgUlRDX0FMUk1BUl9QTSkgPj4gMTZVKTsKLSAgc0FsYXJtLT5BbGFybURhdGVXZWVrRGF5ID0gKHVpbnQzMl90KSgodG1wcmVnICYgKFJUQ19BTFJNQVJfRFQgfCBSVENfQUxSTUFSX0RVKSkgPj4gMjRVKTsKLSAgc0FsYXJtLT5BbGFybURhdGVXZWVrRGF5U2VsID0gKHVpbnQzMl90KSh0bXByZWcgJiBSVENfQUxSTUFSX1dEU0VMKTsKLSAgc0FsYXJtLT5BbGFybU1hc2sgPSAodWludDMyX3QpKHRtcHJlZyAmIFJUQ19BTEFSTU1BU0tfQUxMKTsKKyAgc0FsYXJtLT5BbGFybVRpbWUuSG91cnMgICAgICA9ICh1aW50OF90KSAoKHRtcHJlZyAmIChSVENfQUxSTUFSX0hUICB8IFJUQ19BTFJNQVJfSFUpKSAgPj4gUlRDX0FMUk1BUl9IVV9Qb3MpOworICBzQWxhcm0tPkFsYXJtVGltZS5NaW51dGVzICAgID0gKHVpbnQ4X3QpICgodG1wcmVnICYgKFJUQ19BTFJNQVJfTU5UIHwgUlRDX0FMUk1BUl9NTlUpKSA+PiBSVENfQUxSTUFSX01OVV9Qb3MpOworICBzQWxhcm0tPkFsYXJtVGltZS5TZWNvbmRzICAgID0gKHVpbnQ4X3QpICggdG1wcmVnICYgKFJUQ19BTFJNQVJfU1QgIHwgUlRDX0FMUk1BUl9TVSkpOworICBzQWxhcm0tPkFsYXJtVGltZS5UaW1lRm9ybWF0ID0gKHVpbnQ4X3QpICgodG1wcmVnICYgUlRDX0FMUk1BUl9QTSkgICAgICAgICAgICAgICAgICAgICA+PiBSVENfVFJfUE1fUG9zKTsKKyAgc0FsYXJtLT5BbGFybURhdGVXZWVrRGF5ICAgICA9ICh1aW50OF90KSAoKHRtcHJlZyAmIChSVENfQUxSTUFSX0RUICB8IFJUQ19BTFJNQVJfRFUpKSAgPj4gUlRDX0FMUk1BUl9EVV9Qb3MpOworICBzQWxhcm0tPkFsYXJtRGF0ZVdlZWtEYXlTZWwgID0gKHVpbnQzMl90KSAodG1wcmVnICYgUlRDX0FMUk1BUl9XRFNFTCk7CisgIHNBbGFybS0+QWxhcm1NYXNrICAgICAgICAgICAgPSAodWludDMyX3QpICh0bXByZWcgJiBSVENfQUxBUk1NQVNLX0FMTCk7CiAKICAgaWYgKEZvcm1hdCA9PSBSVENfRk9STUFUX0JJTikKICAgewotICAgIHNBbGFybS0+QWxhcm1UaW1lLkhvdXJzID0gUlRDX0JjZDJUb0J5dGUoc0FsYXJtLT5BbGFybVRpbWUuSG91cnMpOworICAgIHNBbGFybS0+QWxhcm1UaW1lLkhvdXJzICAgPSBSVENfQmNkMlRvQnl0ZShzQWxhcm0tPkFsYXJtVGltZS5Ib3Vycyk7CiAgICAgc0FsYXJtLT5BbGFybVRpbWUuTWludXRlcyA9IFJUQ19CY2QyVG9CeXRlKHNBbGFybS0+QWxhcm1UaW1lLk1pbnV0ZXMpOwogICAgIHNBbGFybS0+QWxhcm1UaW1lLlNlY29uZHMgPSBSVENfQmNkMlRvQnl0ZShzQWxhcm0tPkFsYXJtVGltZS5TZWNvbmRzKTsKLSAgICBzQWxhcm0tPkFsYXJtRGF0ZVdlZWtEYXkgPSBSVENfQmNkMlRvQnl0ZShzQWxhcm0tPkFsYXJtRGF0ZVdlZWtEYXkpOworICAgIHNBbGFybS0+QWxhcm1EYXRlV2Vla0RheSAgPSBSVENfQmNkMlRvQnl0ZShzQWxhcm0tPkFsYXJtRGF0ZVdlZWtEYXkpOwogICB9CiAKICAgcmV0dXJuIEhBTF9PSzsKIH0KIAogLyoqCi0gICogQGJyaWVmICBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgQWxhcm0gaW50ZXJydXB0IHJlcXVlc3QuCisgICogQGJyaWVmICBIYW5kbGVzIEFsYXJtIGludGVycnVwdCByZXF1ZXN0LgogICAqIEBwYXJhbSAgaHJ0YyBwb2ludGVyIHRvIGEgUlRDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKICAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgUlRDLgogICAqIEByZXR2YWwgTm9uZQogICAqLwogdm9pZCBIQUxfUlRDX0FsYXJtSVJRSGFuZGxlcihSVENfSGFuZGxlVHlwZURlZiAqaHJ0YykKIHsKLSAgLyogR2V0IHRoZSBBbGFybUEgaW50ZXJydXB0IHNvdXJjZSBlbmFibGUgc3RhdHVzICovCisgIC8qIENsZWFyIHRoZSBFWFRJJ3MgbGluZSBGbGFnIGZvciBSVEMgQWxhcm0gKi8KKyAgX19IQUxfUlRDX0FMQVJNX0VYVElfQ0xFQVJfRkxBRygpOworCisgIC8qIEdldCB0aGUgQWxhcm0gQSBpbnRlcnJ1cHQgc291cmNlIGVuYWJsZSBzdGF0dXMgKi8KICAgaWYgKF9fSEFMX1JUQ19BTEFSTV9HRVRfSVRfU09VUkNFKGhydGMsIFJUQ19JVF9BTFJBKSAhPSAwVSkKICAgewotICAgIC8qIEdldCB0aGUgcGVuZGluZyBzdGF0dXMgb2YgdGhlIEFsYXJtQSBJbnRlcnJ1cHQgKi8KKyAgICAvKiBHZXQgdGhlIHBlbmRpbmcgc3RhdHVzIG9mIHRoZSBBbGFybSBBIEludGVycnVwdCAqLwogICAgIGlmIChfX0hBTF9SVENfQUxBUk1fR0VUX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfQUxSQUYpICE9IDBVKQogICAgIHsKLSAgICAgIC8qIEFsYXJtQSBjYWxsYmFjayAqLworICAgICAgLyogQ2xlYXIgdGhlIEFsYXJtIEEgaW50ZXJydXB0IHBlbmRpbmcgYml0ICovCisgICAgICBfX0hBTF9SVENfQUxBUk1fQ0xFQVJfRkxBRyhocnRjLCBSVENfRkxBR19BTFJBRik7CisKKyAgICAgIC8qIEFsYXJtIEEgY2FsbGJhY2sgKi8KICNpZiAoVVNFX0hBTF9SVENfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCiAgICAgICBocnRjLT5BbGFybUFFdmVudENhbGxiYWNrKGhydGMpOwogI2Vsc2UKICAgICAgIEhBTF9SVENfQWxhcm1BRXZlbnRDYWxsYmFjayhocnRjKTsKICNlbmRpZiAvKiBVU0VfSEFMX1JUQ19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KLQotICAgICAgLyogQ2xlYXIgdGhlIEFsYXJtIGludGVycnVwdCBwZW5kaW5nIGJpdCAqLwotICAgICAgX19IQUxfUlRDX0FMQVJNX0NMRUFSX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfQUxSQUYpOwogICAgIH0KICAgfQogCi0gIC8qIEdldCB0aGUgQWxhcm1CIGludGVycnVwdCBzb3VyY2UgZW5hYmxlIHN0YXR1cyAqLworICAvKiBHZXQgdGhlIEFsYXJtIEIgaW50ZXJydXB0IHNvdXJjZSBlbmFibGUgc3RhdHVzICovCiAgIGlmIChfX0hBTF9SVENfQUxBUk1fR0VUX0lUX1NPVVJDRShocnRjLCBSVENfSVRfQUxSQikgIT0gMFUpCiAgIHsKLSAgICAvKiBHZXQgdGhlIHBlbmRpbmcgc3RhdHVzIG9mIHRoZSBBbGFybUIgSW50ZXJydXB0ICovCisgICAgLyogR2V0IHRoZSBwZW5kaW5nIHN0YXR1cyBvZiB0aGUgQWxhcm0gQiBJbnRlcnJ1cHQgKi8KICAgICBpZiAoX19IQUxfUlRDX0FMQVJNX0dFVF9GTEFHKGhydGMsIFJUQ19GTEFHX0FMUkJGKSAhPSAwVSkKICAgICB7Ci0gICAgICAvKiBBbGFybUIgY2FsbGJhY2sgKi8KKyAgICAgIC8qIENsZWFyIHRoZSBBbGFybSBCIGludGVycnVwdCBwZW5kaW5nIGJpdCAqLworICAgICAgX19IQUxfUlRDX0FMQVJNX0NMRUFSX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfQUxSQkYpOworCisgICAgICAvKiBBbGFybSBCIGNhbGxiYWNrICovCiAjaWYgKFVTRV9IQUxfUlRDX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQogICAgICAgaHJ0Yy0+QWxhcm1CRXZlbnRDYWxsYmFjayhocnRjKTsKICNlbHNlCiAgICAgICBIQUxfUlRDRXhfQWxhcm1CRXZlbnRDYWxsYmFjayhocnRjKTsKICNlbmRpZiAvKiBVU0VfSEFMX1JUQ19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KLQotICAgICAgLyogQ2xlYXIgdGhlIEFsYXJtIGludGVycnVwdCBwZW5kaW5nIGJpdCAqLwotICAgICAgX19IQUxfUlRDX0FMQVJNX0NMRUFSX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfQUxSQkYpOwogICAgIH0KICAgfQogCi0gIC8qIENsZWFyIHRoZSBFWFRJJ3MgbGluZSBGbGFnIGZvciBSVEMgQWxhcm0gKi8KLSAgX19IQUxfUlRDX0FMQVJNX0VYVElfQ0xFQVJfRkxBRygpOwotCiAgIC8qIENoYW5nZSBSVEMgc3RhdGUgKi8KICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX1JFQURZOwogfQpAQCAtMTYyMywxMyArMTUyOSwxNCBAQAogewogICAvKiBQcmV2ZW50IHVudXNlZCBhcmd1bWVudChzKSBjb21waWxhdGlvbiB3YXJuaW5nICovCiAgIFVOVVNFRChocnRjKTsKLSAgLyogTk9URSA6IFRoaXMgZnVuY3Rpb24gU2hvdWxkIG5vdCBiZSBtb2RpZmllZCwgd2hlbiB0aGUgY2FsbGJhY2sgaXMgbmVlZGVkLAotICAgICAgICAgICAgdGhlIEhBTF9SVENfQWxhcm1BRXZlbnRDYWxsYmFjayBjb3VsZCBiZSBpbXBsZW1lbnRlZCBpbiB0aGUgdXNlciBmaWxlCisKKyAgLyogTk9URTogVGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIG1vZGlmaWVkLCB3aGVuIHRoZSBjYWxsYmFjayBpcyBuZWVkZWQsCisgICAgICAgICAgIHRoZSBIQUxfUlRDX0FsYXJtQUV2ZW50Q2FsbGJhY2sgY291bGQgYmUgaW1wbGVtZW50ZWQgaW4gdGhlIHVzZXIgZmlsZQogICAgKi8KIH0KIAogLyoqCi0gICogQGJyaWVmICBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgQWxhcm1BIFBvbGxpbmcgcmVxdWVzdC4KKyAgKiBAYnJpZWYgIEhhbmRsZXMgQWxhcm0gQSBQb2xsaW5nIHJlcXVlc3QuCiAgICogQHBhcmFtICBocnRjIHBvaW50ZXIgdG8gYSBSVENfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwogICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBSVEMuCiAgICogQHBhcmFtICBUaW1lb3V0IFRpbWVvdXQgZHVyYXRpb24KQEAgLTE2NDIsNyArMTU0OSw4IEBACiAgIC8qIEdldCB0aWNrICovCiAgIHRpY2tzdGFydCA9IEhBTF9HZXRUaWNrKCk7CiAKLSAgd2hpbGUgKF9fSEFMX1JUQ19BTEFSTV9HRVRfRkxBRyhocnRjLCBSVENfRkxBR19BTFJBRikgPT0gUkVTRVQpCisgIC8qIFdhaXQgdGlsbCBSVEMgQUxSQUYgZmxhZyBpcyBzZXQgYW5kIGlmIHRpbWVvdXQgaXMgcmVhY2hlZCBleGl0ICovCisgIHdoaWxlIChfX0hBTF9SVENfQUxBUk1fR0VUX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfQUxSQUYpID09IDBVKQogICB7CiAgICAgaWYgKFRpbWVvdXQgIT0gSEFMX01BWF9ERUxBWSkKICAgICB7CkBAIC0xNjU0LDcgKzE1NjIsNyBAQAogICAgIH0KICAgfQogCi0gIC8qIENsZWFyIHRoZSBBbGFybSBpbnRlcnJ1cHQgcGVuZGluZyBiaXQgKi8KKyAgLyogQ2xlYXIgdGhlIEFsYXJtIGZsYWcgKi8KICAgX19IQUxfUlRDX0FMQVJNX0NMRUFSX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfQUxSQUYpOwogCiAgIC8qIENoYW5nZSBSVEMgc3RhdGUgKi8KQEAgLTE2NjgsOCArMTU3Niw4IEBACiAgICovCiAKIC8qKiBAZGVmZ3JvdXAgUlRDX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDQgUGVyaXBoZXJhbCBDb250cm9sIGZ1bmN0aW9ucwotICogIEBicmllZiAgIFBlcmlwaGVyYWwgQ29udHJvbCBmdW5jdGlvbnMKLSAqCisgICogQGJyaWVmICAgIFBlcmlwaGVyYWwgQ29udHJvbCBmdW5jdGlvbnMKKyAgKgogQHZlcmJhdGltCiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAgICAgICAgIyMjIyMgUGVyaXBoZXJhbCBDb250cm9sIGZ1bmN0aW9ucyAjIyMjIwpAQCAtMTY3Nyw2ICsxNTg1LDcgQEAKICAgICBbLi5dCiAgICAgVGhpcyBzdWJzZWN0aW9uIHByb3ZpZGVzIGZ1bmN0aW9ucyBhbGxvd2luZyB0bwogICAgICAgKCspIFdhaXQgZm9yIFJUQyBUaW1lIGFuZCBEYXRlIFN5bmNocm9uaXphdGlvbgorICAgICAgKCspIE1hbmFnZSBSVEMgU3VtbWVyIG9yIFdpbnRlciB0aW1lIGNoYW5nZQogCiBAZW5kdmVyYmF0aW0KICAgKiBAewpAQCAtMTY4OCw3ICsxNTk3LDcgQEAKICAgKiBAbm90ZSAgIFRoZSBSVEMgUmVzeW5jaHJvbml6YXRpb24gbW9kZSBpcyB3cml0ZSBwcm90ZWN0ZWQsIHVzZSB0aGUKICAgKiAgICAgICAgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRElTQUJMRSgpIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCiAgICogQG5vdGUgICBUbyByZWFkIHRoZSBjYWxlbmRhciB0aHJvdWdoIHRoZSBzaGFkb3cgcmVnaXN0ZXJzIGFmdGVyIENhbGVuZGFyCi0gICogICAgICAgICBpbml0aWFsaXphdGlvbiwgY2FsZW5kYXIgdXBkYXRlIG9yIGFmdGVyIHdha2UtdXAgZnJvbSBsb3cgcG93ZXIgbW9kZXMKKyAgKiAgICAgICAgIGluaXRpYWxpemF0aW9uLCBjYWxlbmRhciB1cGRhdGUgb3IgYWZ0ZXIgd2FrZXVwIGZyb20gbG93IHBvd2VyIG1vZGVzCiAgICogICAgICAgICB0aGUgc29mdHdhcmUgbXVzdCBmaXJzdCBjbGVhciB0aGUgUlNGIGZsYWcuCiAgICogICAgICAgICBUaGUgc29mdHdhcmUgbXVzdCB0aGVuIHdhaXQgdW50aWwgaXQgaXMgc2V0IGFnYWluIGJlZm9yZSByZWFkaW5nCiAgICogICAgICAgICB0aGUgY2FsZW5kYXIsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIGNhbGVuZGFyIHJlZ2lzdGVycyBoYXZlIGJlZW4KQEAgLTE3MDEsMTQgKzE2MTAsMTQgQEAKIHsKICAgdWludDMyX3QgdGlja3N0YXJ0ID0gMFU7CiAKLSAgLyogQ2xlYXIgUlNGIGZsYWcgKi8KLSAgaHJ0Yy0+SW5zdGFuY2UtPklTUiAmPSAodWludDMyX3QpUlRDX1JTRl9NQVNLOworICAvKiBDbGVhciBSU0YgZmxhZywga2VlcCByZXNlcnZlZCBiaXRzIGF0IHJlc2V0IHZhbHVlcyAoc2V0dGluZyBvdGhlciBmbGFncyBoYXMgbm8gZWZmZWN0KSAqLworICBocnRjLT5JbnN0YW5jZS0+SVNSID0gKCh1aW50MzJfdCkoUlRDX1JTRl9NQVNLICYgUlRDX0lTUl9SRVNFUlZFRF9NQVNLKSk7CiAKICAgLyogR2V0IHRpY2sgKi8KICAgdGlja3N0YXJ0ID0gSEFMX0dldFRpY2soKTsKIAogICAvKiBXYWl0IHRoZSByZWdpc3RlcnMgdG8gYmUgc3luY2hyb25pc2VkICovCi0gIHdoaWxlICgoaHJ0Yy0+SW5zdGFuY2UtPklTUiAmIFJUQ19JU1JfUlNGKSA9PSAodWludDMyX3QpUkVTRVQpCisgIHdoaWxlICgoaHJ0Yy0+SW5zdGFuY2UtPklTUiAmIFJUQ19JU1JfUlNGKSA9PSAwVSkKICAgewogICAgIGlmICgoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCkgPiBSVENfVElNRU9VVF9WQUxVRSkKICAgICB7CkBAIC0xNzIwLDEyICsxNjI5LDc3IEBACiB9CiAKIC8qKgorICAqIEBicmllZiAgRGF5bGlnaHQgU2F2aW5nIFRpbWUsIGFkZHMgb25lIGhvdXIgdG8gdGhlIGNhbGVuZGFyIGluIG9uZQorICAqICAgICAgICAgc2luZ2xlIG9wZXJhdGlvbiB3aXRob3V0IGdvaW5nIHRocm91Z2ggdGhlIGluaXRpYWxpemF0aW9uIHByb2NlZHVyZS4KKyAgKiBAcGFyYW0gIGhydGMgcG9pbnRlciB0byBhIFJUQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIFJUQy4KKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK3ZvaWQgSEFMX1JUQ19EU1RfQWRkMUhvdXIoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpCit7CisgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRElTQUJMRShocnRjKTsKKyAgU0VUX0JJVChocnRjLT5JbnN0YW5jZS0+Q1IsIFJUQ19DUl9BREQxSCk7CisgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRU5BQkxFKGhydGMpOworfQorCisvKioKKyAgKiBAYnJpZWYgIERheWxpZ2h0IFNhdmluZyBUaW1lLCBzdWJ0cmFjdHMgb25lIGhvdXIgZnJvbSB0aGUgY2FsZW5kYXIgaW4gb25lCisgICogICAgICAgICBzaW5nbGUgb3BlcmF0aW9uIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VkdXJlLgorICAqIEBwYXJhbSAgaHJ0YyBwb2ludGVyIHRvIGEgUlRDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgUlRDLgorICAqIEByZXR2YWwgTm9uZQorICAqLwordm9pZCBIQUxfUlRDX0RTVF9TdWIxSG91cihSVENfSGFuZGxlVHlwZURlZiAqaHJ0YykKK3sKKyAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9ESVNBQkxFKGhydGMpOworICBTRVRfQklUKGhydGMtPkluc3RhbmNlLT5DUiwgUlRDX0NSX1NVQjFIKTsKKyAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7Cit9CisKKy8qKgorICAqIEBicmllZiAgRGF5bGlnaHQgU2F2aW5nIFRpbWUsIHNldHMgdGhlIHN0b3JlIG9wZXJhdGlvbiBiaXQuCisgICogQG5vdGUgICBJdCBjYW4gYmUgdXNlZCBieSB0aGUgc29mdHdhcmUgaW4gb3JkZXIgdG8gbWVtb3JpemUgdGhlIERTVCBzdGF0dXMuCisgICogQHBhcmFtICBocnRjIHBvaW50ZXIgdG8gYSBSVENfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBSVEMuCisgICogQHJldHZhbCBOb25lCisgICovCit2b2lkIEhBTF9SVENfRFNUX1NldFN0b3JlT3BlcmF0aW9uKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKQoreworICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0RJU0FCTEUoaHJ0Yyk7CisgIFNFVF9CSVQoaHJ0Yy0+SW5zdGFuY2UtPkNSLCBSVENfQ1JfQktQKTsKKyAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7Cit9CisKKy8qKgorICAqIEBicmllZiAgRGF5bGlnaHQgU2F2aW5nIFRpbWUsIGNsZWFycyB0aGUgc3RvcmUgb3BlcmF0aW9uIGJpdC4KKyAgKiBAcGFyYW0gIGhydGMgcG9pbnRlciB0byBhIFJUQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIFJUQy4KKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK3ZvaWQgSEFMX1JUQ19EU1RfQ2xlYXJTdG9yZU9wZXJhdGlvbihSVENfSGFuZGxlVHlwZURlZiAqaHJ0YykKK3sKKyAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9ESVNBQkxFKGhydGMpOworICBDTEVBUl9CSVQoaHJ0Yy0+SW5zdGFuY2UtPkNSLCBSVENfQ1JfQktQKTsKKyAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7Cit9CisKKy8qKgorICAqIEBicmllZiAgRGF5bGlnaHQgU2F2aW5nIFRpbWUsIHJlYWRzIHRoZSBzdG9yZSBvcGVyYXRpb24gYml0LgorICAqIEBwYXJhbSAgaHJ0YyBSVEMgaGFuZGxlCisgICogQHJldHZhbCBvcGVyYXRpb24gc2VlIFJUQ19TdG9yZU9wZXJhdGlvbl9EZWZpbml0aW9ucworICAqLwordWludDMyX3QgSEFMX1JUQ19EU1RfUmVhZFN0b3JlT3BlcmF0aW9uKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKQoreworICByZXR1cm4gUkVBRF9CSVQoaHJ0Yy0+SW5zdGFuY2UtPkNSLCBSVENfQ1JfQktQKTsKK30KKworLyoqCiAgICogQH0KICAgKi8KIAogLyoqIEBkZWZncm91cCBSVENfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwNSBQZXJpcGhlcmFsIFN0YXRlIGZ1bmN0aW9ucwotICogIEBicmllZiAgIFBlcmlwaGVyYWwgU3RhdGUgZnVuY3Rpb25zCi0gKgorICAqIEBicmllZiAgICBQZXJpcGhlcmFsIFN0YXRlIGZ1bmN0aW9ucworICAqCiBAdmVyYmF0aW0KICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICAgICAgICAjIyMjIyBQZXJpcGhlcmFsIFN0YXRlIGZ1bmN0aW9ucyAjIyMjIwpAQCAtMTc1Miw2ICsxNzI2LDE1IEBACiAgICogQH0KICAgKi8KIAorCisvKioKKyAgKiBAfQorICAqLworCisvKiogQGFkZHRvZ3JvdXAgUlRDX1ByaXZhdGVfRnVuY3Rpb25zCisgICogQHsKKyAgKi8KKwogLyoqCiAgICogQGJyaWVmICBFbnRlcnMgdGhlIFJUQyBJbml0aWFsaXphdGlvbiBtb2RlLgogICAqIEBub3RlICAgVGhlIFJUQyBJbml0aWFsaXphdGlvbiBtb2RlIGlzIHdyaXRlIHByb3RlY3RlZCwgdXNlIHRoZQpAQCAtMTc2Myw1OCArMTc0Niw4MyBAQAogSEFMX1N0YXR1c1R5cGVEZWYgUlRDX0VudGVySW5pdE1vZGUoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpCiB7CiAgIHVpbnQzMl90IHRpY2tzdGFydCA9IDBVOworICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CiAKLSAgLyogQ2hlY2sgaWYgdGhlIEluaXRpYWxpemF0aW9uIG1vZGUgaXMgc2V0ICovCi0gIGlmICgoaHJ0Yy0+SW5zdGFuY2UtPklTUiAmIFJUQ19JU1JfSU5JVEYpID09ICh1aW50MzJfdClSRVNFVCkKKyAgLyogQ2hlY2sgdGhhdCBJbml0aWFsaXphdGlvbiBtb2RlIGlzIG5vdCBhbHJlYWR5IHNldCAqLworICBpZiAoUkVBRF9CSVQoaHJ0Yy0+SW5zdGFuY2UtPklTUiwgUlRDX0lTUl9JTklURikgPT0gMFUpCiAgIHsKLSAgICAvKiBTZXQgdGhlIEluaXRpYWxpemF0aW9uIG1vZGUgKi8KLSAgICBocnRjLT5JbnN0YW5jZS0+SVNSID0gKHVpbnQzMl90KVJUQ19JTklUX01BU0s7CisgICAgLyogU2V0IElOSVQgYml0IHRvIGVudGVyIEluaXRpYWxpemF0aW9uIG1vZGUgKi8KKyAgICBTRVRfQklUKGhydGMtPkluc3RhbmNlLT5JU1IsIFJUQ19JU1JfSU5JVCk7CiAKICAgICAvKiBHZXQgdGljayAqLwogICAgIHRpY2tzdGFydCA9IEhBTF9HZXRUaWNrKCk7CiAKLSAgICAvKiBXYWl0IHRpbGwgUlRDIGlzIGluIElOSVQgc3RhdGUgYW5kIGlmIFRpbWUgb3V0IGlzIHJlYWNoZWQgZXhpdCAqLwotICAgIHdoaWxlICgoaHJ0Yy0+SW5zdGFuY2UtPklTUiAmIFJUQ19JU1JfSU5JVEYpID09ICh1aW50MzJfdClSRVNFVCkKKyAgICAvKiBXYWl0IHRpbGwgUlRDIGlzIGluIElOSVQgc3RhdGUgYW5kIGlmIHRpbWVvdXQgaXMgcmVhY2hlZCBleGl0ICovCisgICAgd2hpbGUgKChSRUFEX0JJVChocnRjLT5JbnN0YW5jZS0+SVNSLCBSVENfSVNSX0lOSVRGKSA9PSAwVSkgJiYgKHN0YXR1cyAhPSBIQUxfRVJST1IpKQogICAgIHsKICAgICAgIGlmICgoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCkgPiBSVENfVElNRU9VVF9WQUxVRSkKICAgICAgIHsKLSAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICAgICAgICAvKiBTZXQgUlRDIHN0YXRlICovCisgICAgICAgIGhydGMtPlN0YXRlID0gSEFMX1JUQ19TVEFURV9FUlJPUjsKKyAgICAgICAgc3RhdHVzID0gSEFMX0VSUk9SOwogICAgICAgfQogICAgIH0KICAgfQogCi0gIHJldHVybiBIQUxfT0s7CisgIHJldHVybiBzdGF0dXM7CiB9CiAKKy8qKgorICAqIEBicmllZiAgRXhpdHMgdGhlIFJUQyBJbml0aWFsaXphdGlvbiBtb2RlLgorICAqIEBwYXJhbSAgaHJ0YyBwb2ludGVyIHRvIGEgUlRDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgUlRDLgorICAqIEByZXR2YWwgSEFMIHN0YXR1cworICAqLworSEFMX1N0YXR1c1R5cGVEZWYgUlRDX0V4aXRJbml0TW9kZShSVENfSGFuZGxlVHlwZURlZiAqaHJ0YykKK3sKKyAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOworCisgIC8qIENsZWFyIElOSVQgYml0IHRvIGV4aXQgSW5pdGlhbGl6YXRpb24gbW9kZSAqLworICBDTEVBUl9CSVQoaHJ0Yy0+SW5zdGFuY2UtPklTUiwgUlRDX0lTUl9JTklUKTsKKworICBpZiAoSEFMX1JUQ19XYWl0Rm9yU3luY2hybyhocnRjKSAhPSBIQUxfT0spCisgIHsKKyAgICAvKiBTZXQgUlRDIHN0YXRlICovCisgICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX0VSUk9SOworICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKKyAgfQorCisgIHJldHVybiBzdGF0dXM7Cit9CiAKIC8qKgotICAqIEBicmllZiAgQ29udmVydHMgYSAyIGRpZ2l0IGRlY2ltYWwgdG8gQkNEIGZvcm1hdC4KLSAgKiBAcGFyYW0gIFZhbHVlIEJ5dGUgdG8gYmUgY29udmVydGVkCisgICogQGJyaWVmICBDb252ZXJ0cyBhIDItZGlnaXQgbnVtYmVyIGZyb20gZGVjaW1hbCB0byBCQ0QgZm9ybWF0LgorICAqIEBwYXJhbSAgbnVtYmVyIGRlY2ltYWwtZm9ybWF0dGVkIG51bWJlciAoZnJvbSAwIHRvIDk5KSB0byBiZSBjb252ZXJ0ZWQKICAgKiBAcmV0dmFsIENvbnZlcnRlZCBieXRlCiAgICovCi11aW50OF90IFJUQ19CeXRlVG9CY2QyKHVpbnQ4X3QgVmFsdWUpCit1aW50OF90IFJUQ19CeXRlVG9CY2QyKHVpbnQ4X3QgbnVtYmVyKQogewogICB1aW50MzJfdCBiY2RoaWdoID0gMFU7CiAKLSAgd2hpbGUgKFZhbHVlID49IDEwKQorICB3aGlsZSAobnVtYmVyID49IDEwVSkKICAgewogICAgIGJjZGhpZ2grKzsKLSAgICBWYWx1ZSAtPSAxMDsKKyAgICBudW1iZXIgLT0gMTBVOwogICB9CiAKLSAgcmV0dXJuICgodWludDhfdCkoYmNkaGlnaCA8PCA0VSkgfCBWYWx1ZSk7CisgIHJldHVybiAoKHVpbnQ4X3QpKGJjZGhpZ2ggPDwgNFUpIHwgbnVtYmVyKTsKIH0KIAogLyoqCi0gICogQGJyaWVmICBDb252ZXJ0cyBmcm9tIDIgZGlnaXQgQkNEIHRvIEJpbmFyeS4KLSAgKiBAcGFyYW0gIFZhbHVlIEJDRCB2YWx1ZSB0byBiZSBjb252ZXJ0ZWQKKyAgKiBAYnJpZWYgIENvbnZlcnRzIGEgMi1kaWdpdCBudW1iZXIgZnJvbSBCQ0QgdG8gZGVjaW1hbCBmb3JtYXQuCisgICogQHBhcmFtICBudW1iZXIgQkNELWZvcm1hdHRlZCBudW1iZXIgKGZyb20gMDAgdG8gOTkpIHRvIGJlIGNvbnZlcnRlZAogICAqIEByZXR2YWwgQ29udmVydGVkIHdvcmQKICAgKi8KLXVpbnQ4X3QgUlRDX0JjZDJUb0J5dGUodWludDhfdCBWYWx1ZSkKK3VpbnQ4X3QgUlRDX0JjZDJUb0J5dGUodWludDhfdCBudW1iZXIpCiB7Ci0gIHVpbnQzMl90IHRtcCA9IDBVOwotICB0bXAgPSAoKHVpbnQ4X3QpKFZhbHVlICYgKHVpbnQ4X3QpMHhGMCkgPj4gKHVpbnQ4X3QpMHg0KSAqIDEwOwotICByZXR1cm4gKHRtcCArIChWYWx1ZSAmICh1aW50OF90KTB4MEYpKTsKKyAgdWludDMyX3QgdGVucyA9IDBVOworICB0ZW5zID0gKCgodWludDMyX3QpbnVtYmVyICYgMHhGMFUpID4+IDRVKSAqIDEwVTsKKyAgcmV0dXJuICh1aW50OF90KSh0ZW5zICsgKCh1aW50MzJfdCludW1iZXIgJiAweDBGVSkpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmYyeHhfaGFsX3J0Y19leC5jIGIvU3JjL3N0bTMyZjJ4eF9oYWxfcnRjX2V4LmMKaW5kZXggODczOWY4YS4uYmFjYzUyMSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjJ4eF9oYWxfcnRjX2V4LmMKKysrIGIvU3JjL3N0bTMyZjJ4eF9oYWxfcnRjX2V4LmMKQEAgLTIsMTQgKzIsMTQgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGZpbGUgICAgc3RtMzJmMnh4X2hhbF9ydGNfZXguYwogICAqIEBhdXRob3IgIE1DRCBBcHBsaWNhdGlvbiBUZWFtCi0gICogQGJyaWVmICAgUlRDIEhBTCBtb2R1bGUgZHJpdmVyLgorICAqIEBicmllZiAgIEV4dGVuZGVkIFJUQyBIQUwgbW9kdWxlIGRyaXZlci4KICAgKiAgICAgICAgICBUaGlzIGZpbGUgcHJvdmlkZXMgZmlybXdhcmUgZnVuY3Rpb25zIHRvIG1hbmFnZSB0aGUgZm9sbG93aW5nCi0gICogICAgICAgICAgZnVuY3Rpb25hbGl0aWVzIG9mIHRoZSBSZWFsIFRpbWUgQ2xvY2sgKFJUQykgRXh0ZW5zaW9uIHBlcmlwaGVyYWw6Ci0gICogICAgICAgICAgICsgUlRDIFRpbWUgU3RhbXAgZnVuY3Rpb25zCisgICogICAgICAgICAgZnVuY3Rpb25hbGl0aWVzIG9mIHRoZSBSZWFsLVRpbWUgQ2xvY2sgKFJUQykgRXh0ZW5kZWQgcGVyaXBoZXJhbDoKKyAgKiAgICAgICAgICAgKyBSVEMgVGltZXN0YW1wIGZ1bmN0aW9ucwogICAqICAgICAgICAgICArIFJUQyBUYW1wZXIgZnVuY3Rpb25zCi0gICogICAgICAgICAgICsgUlRDIFdha2UtdXAgZnVuY3Rpb25zCi0gICogICAgICAgICAgICsgRXh0ZW5zaW9uIENvbnRyb2wgZnVuY3Rpb25zCi0gICogICAgICAgICAgICsgRXh0ZW5zaW9uIFJUQyBmZWF0dXJlcyBmdW5jdGlvbnMKKyAgKiAgICAgICAgICAgKyBSVEMgV2FrZXVwIGZ1bmN0aW9ucworICAqICAgICAgICAgICArIEV4dGVuZGVkIENvbnRyb2wgZnVuY3Rpb25zCisgICogICAgICAgICAgICsgRXh0ZW5kZWQgUlRDIGZlYXR1cmVzIGZ1bmN0aW9ucwogICAqCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KQEAgLTI0LDQ0ICsyNCw1MSBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgQHZlcmJhdGltCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgICAgICAgICAgICAgIyMjIyMgSG93IHRvIHVzZSB0aGlzIGRyaXZlciAjIyMjIworICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMgSG93IHRvIHVzZSB0aGlzIGRyaXZlciAjIyMjIwogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgWy4uXQogICAgICgrKSBFbmFibGUgdGhlIFJUQyBkb21haW4gYWNjZXNzLgogICAgICgrKSBDb25maWd1cmUgdGhlIFJUQyBQcmVzY2FsZXIgKEFzeW5jaHJvbm91cyBhbmQgU3luY2hyb25vdXMpIGFuZCBSVEMgaG91cgogICAgICAgICBmb3JtYXQgdXNpbmcgdGhlIEhBTF9SVENfSW5pdCgpIGZ1bmN0aW9uLgogCi0gICoqKiBSVEMgV2FrZS11cCBjb25maWd1cmF0aW9uICoqKgorICAqKiogUlRDIFdha2V1cCBjb25maWd1cmF0aW9uICoqKgogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBbLi5dCi0gICAgKCspIFRvIGNvbmZpZ3VyZSB0aGUgUlRDIFdha2UtdXAgQ2xvY2sgc291cmNlIGFuZCBDb3VudGVyIHVzZSB0aGUgSEFMX1JUQ0V4X1NldFdha2VVcFRpbWVyKCkKLSAgICAgICAgZnVuY3Rpb24uIFlvdSBjYW4gYWxzbyBjb25maWd1cmUgdGhlIFJUQyBXYWtlLXVwIHRpbWVyIGluIGludGVycnVwdCBtb2RlCi0gICAgICAgIHVzaW5nIHRoZSBIQUxfUlRDRXhfU2V0V2FrZVVwVGltZXJfSVQoKSBmdW5jdGlvbi4KLSAgICAoKykgVG8gcmVhZCB0aGUgUlRDIFdha2UtdXAgQ291bnRlciByZWdpc3RlciwgdXNlIHRoZSBIQUxfUlRDRXhfR2V0V2FrZVVwVGltZXIoKQorICAgICgrKSBUbyBjb25maWd1cmUgdGhlIFJUQyBXYWtldXAgQ2xvY2sgc291cmNlIGFuZCBDb3VudGVyIHVzZSB0aGUKKyAgICAgICAgSEFMX1JUQ0V4X1NldFdha2VVcFRpbWVyKCkgZnVuY3Rpb24uCisgICAgICAgIFlvdSBjYW4gYWxzbyBjb25maWd1cmUgdGhlIFJUQyBXYWtldXAgdGltZXIgaW4gaW50ZXJydXB0IG1vZGUgdXNpbmcgdGhlCisgICAgICAgIEhBTF9SVENFeF9TZXRXYWtlVXBUaW1lcl9JVCgpIGZ1bmN0aW9uLgorICAgICgrKSBUbyByZWFkIHRoZSBSVEMgV2FrZXVwIENvdW50ZXIgcmVnaXN0ZXIsIHVzZSB0aGUgSEFMX1JUQ0V4X0dldFdha2VVcFRpbWVyKCkKICAgICAgICAgZnVuY3Rpb24uCiAKLSAgKioqIFRpbWVTdGFtcCBjb25maWd1cmF0aW9uICoqKgorICAqKiogVGltZXN0YW1wIGNvbmZpZ3VyYXRpb24gKioqCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgWy4uXQotICAgICgrKSBDb25maWd1cmUgdGhlIFJUQ19BRnggdHJpZ2dlciBhbmQgZW5hYmxlIHRoZSBSVEMgVGltZVN0YW1wIHVzaW5nIHRoZQotICAgICAgICBIQUxfUlRDRXhfU2V0VGltZVN0YW1wKCkgZnVuY3Rpb24uIFlvdSBjYW4gYWxzbyBjb25maWd1cmUgdGhlIFJUQyBUaW1lU3RhbXAgd2l0aAotICAgICAgICBpbnRlcnJ1cHQgbW9kZSB1c2luZyB0aGUgSEFMX1JUQ0V4X1NldFRpbWVTdGFtcF9JVCgpIGZ1bmN0aW9uLgotICAgICgrKSBUbyByZWFkIHRoZSBSVEMgVGltZVN0YW1wIFRpbWUgYW5kIERhdGUgcmVnaXN0ZXIsIHVzZSB0aGUgSEFMX1JUQ0V4X0dldFRpbWVTdGFtcCgpCi0gICAgICAgIGZ1bmN0aW9uLgotICAgICgrKSBUaGUgVElNRVNUQU1QIGFsdGVybmF0ZSBmdW5jdGlvbiBjYW4gYmUgbWFwcGVkIGVpdGhlciB0byBSVENfQUYxIChQQzEzKQotICAgICAgICBvciBSVENfQUYyIChQSTgpIGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgVFNJTlNFTCBiaXQgaW4KLSAgICAgICAgUlRDX1RBRkNSIHJlZ2lzdGVyLiBUaGUgY29ycmVzcG9uZGluZyBwaW4gaXMgYWxzbyBzZWxlY3RlZCBieSBIQUxfUlRDRXhfU2V0VGltZVN0YW1wKCkKLSAgICAgICAgb3IgSEFMX1JUQ0V4X1NldFRpbWVTdGFtcF9JVCgpIGZ1bmN0aW9uLgorICAgICgrKSBUbyBjb25maWd1cmUgdGhlIFJUQyBUaW1lc3RhbXAgdXNlIHRoZSBIQUxfUlRDRXhfU2V0VGltZVN0YW1wKCkgZnVuY3Rpb24uCisgICAgICAgIFlvdSBjYW4gYWxzbyBjb25maWd1cmUgdGhlIFJUQyBUaW1lc3RhbXAgd2l0aCBpbnRlcnJ1cHQgbW9kZSB1c2luZyB0aGUKKyAgICAgICAgSEFMX1JUQ0V4X1NldFRpbWVTdGFtcF9JVCgpIGZ1bmN0aW9uLgorICAgICgrKSBUbyByZWFkIHRoZSBSVEMgVGltZXN0YW1wIFRpbWUgYW5kIERhdGUgcmVnaXN0ZXIsIHVzZSB0aGUKKyAgICAgICAgSEFMX1JUQ0V4X0dldFRpbWVTdGFtcCgpIGZ1bmN0aW9uLgorICAgICgrKSBUaGUgVGltZXN0YW1wIGFsdGVybmF0ZSBmdW5jdGlvbiBjYW4gYmUgbWFwcGVkIGVpdGhlciB0byBSVENfQUYxIChQQzEzKQorICAgICAgICBvciBSVENfQUYyIChQSTgpIGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgVFNJTlNFTCBiaXQgaW4gUlRDX1RBRkNSCisgICAgICAgIHJlZ2lzdGVyLgorICAgICAgICBUaGUgY29ycmVzcG9uZGluZyBwaW4gaXMgYWxzbyBzZWxlY3RlZCBieSBIQUxfUlRDRXhfU2V0VGltZVN0YW1wKCkKKyAgICAgICAgb3IgSEFMX1JUQ0V4X1NldFRpbWVTdGFtcF9JVCgpIGZ1bmN0aW9ucy4KIAogICAqKiogVGFtcGVyIGNvbmZpZ3VyYXRpb24gKioqCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgWy4uXQotICAgICgrKSBFbmFibGUgdGhlIFJUQyBUYW1wZXIgYW5kIGNvbmZpZ3VyZSB0aGUgdHJpZ2dlciB1c2luZyB0aGUgSEFMX1JUQ0V4X1NldFRhbXBlcigpIGZ1bmN0aW9uLgotICAgICAgICBZb3UgY2FuIGNvbmZpZ3VyZSBSVEMgVGFtcGVyIGluIGludGVycnVwdCBtb2RlIHVzaW5nIEhBTF9SVENFeF9TZXRUYW1wZXJfSVQoKSBmdW5jdGlvbi4KKyAgICAoKykgVG8gRW5hYmxlIHRoZSBSVEMgVGFtcGVyIGFuZCBjb25maWd1cmUgdGhlIFRhbXBlciBmaWx0ZXIgY291bnQsIHRyaWdnZXIKKyAgICAgICAgRWRnZSBvciBMZXZlbCBhY2NvcmRpbmcgdG8gdGhlIFRhbXBlciBmaWx0ZXIgdmFsdWUgKGlmIGVxdWFsIHRvIDAgRWRnZQorICAgICAgICBlbHNlIExldmVsKSwgc2FtcGxpbmcgZnJlcXVlbmN5LCBwcmVjaGFyZ2Ugb3IgZGlzY2hhcmdlIGFuZCBQdWxsLVVQIHVzZQorICAgICAgICB0aGUgSEFMX1JUQ0V4X1NldFRhbXBlcigpIGZ1bmN0aW9uLgorICAgICAgICBZb3UgY2FuIGNvbmZpZ3VyZSBSVEMgVGFtcGVyIGluIGludGVycnVwdCBtb2RlIHVzaW5nIEhBTF9SVENFeF9TZXRUYW1wZXJfSVQoKQorICAgICAgICBmdW5jdGlvbi4KICAgICAoKykgVGhlIFRBTVBFUjEgYWx0ZXJuYXRlIGZ1bmN0aW9uIGNhbiBiZSBtYXBwZWQgZWl0aGVyIHRvIFJUQ19BRjEgKFBDMTMpCi0gICAgICAgIG9yIFJUQ19BRjIgKFBJOCkgZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiBUQU1QMUlOU0VMIGJpdCBpbgotICAgICAgICBSVENfVEFGQ1IgcmVnaXN0ZXIuIFRoZSBjb3JyZXNwb25kaW5nIHBpbiBpcyBhbHNvIHNlbGVjdGVkIGJ5IEhBTF9SVENFeF9TZXRUYW1wZXIoKQotICAgICAgICBvciBIQUxfUlRDRXhfU2V0VGFtcGVyX0lUKCkgZnVuY3Rpb24uCisgICAgICAgIG9yIFJUQ19BRjIgKFBJOCkgZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiBUQU1QMUlOU0VMIGJpdCBpbiBSVENfVEFGQ1IKKyAgICAgICAgcmVnaXN0ZXIuCisgICAgICAgIFRoZSBjb3JyZXNwb25kaW5nIHBpbiBpcyBhbHNvIHNlbGVjdGVkIGJ5IEhBTF9SVENFeF9TZXRUYW1wZXIoKQorICAgICAgICBvciBIQUxfUlRDRXhfU2V0VGFtcGVyX0lUKCkgZnVuY3Rpb25zLgogCiAgICoqKiBCYWNrdXAgRGF0YSBSZWdpc3RlcnMgY29uZmlndXJhdGlvbiAqKioKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtNzEsNiArNzgsMjcgQEAKICAgICAoKykgVG8gcmVhZCB0aGUgUlRDIEJhY2t1cCBEYXRhIHJlZ2lzdGVycywgdXNlIHRoZSBIQUxfUlRDRXhfQktVUFJlYWQoKQogICAgICAgICBmdW5jdGlvbi4KIAorICAqKiogQ29hcnNlIERpZ2l0YWwgQ2FsaWJyYXRpb24gY29uZmlndXJhdGlvbiAqKioKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIFsuLl0KKyAgICAoKykgVGhlIENvYXJzZSBEaWdpdGFsIENhbGlicmF0aW9uIGNhbiBiZSB1c2VkIHRvIGNvbXBlbnNhdGUgY3J5c3RhbCBpbmFjY3VyYWN5CisgICAgICAgIGJ5IHNldHRpbmcgdGhlIERDUyBiaXQgaW4gUlRDX0NBTElCUiByZWdpc3Rlci4KKyAgICAoKykgV2hlbiBwb3NpdGl2ZSBjYWxpYnJhdGlvbiBpcyBlbmFibGVkIChEQ1MgPSDigJgw4oCZKSwgMiBhc3luY2hyb25vdXMgcHJlc2NhbGVyCisgICAgICAgIGNsb2NrIGN5Y2xlcyBhcmUgYWRkZWQgZXZlcnkgbWludXRlIGR1cmluZyAyeERDIG1pbnV0ZXMuCisgICAgICAgIFRoaXMgY2F1c2VzIHRoZSBjYWxlbmRhciB0byBiZSB1cGRhdGVkIHNvb25lciwgdGhlcmVieSBhZGp1c3RpbmcgdGhlCisgICAgICAgIGVmZmVjdGl2ZSBSVEMgZnJlcXVlbmN5IHRvIGJlIGEgYml0IGhpZ2hlci4KKyAgICAoKykgV2hlbiBuZWdhdGl2ZSBjYWxpYnJhdGlvbiBpcyBlbmFibGVkIChEQ1MgPSDigJgx4oCZKSwgMSBhc3luY2hyb25vdXMgcHJlc2NhbGVyCisgICAgICAgIGNsb2NrIGN5Y2xlIGlzIHJlbW92ZWQgZXZlcnkgbWludXRlIGR1cmluZyAyeERDIG1pbnV0ZXMuCisgICAgICAgIFRoaXMgY2F1c2VzIHRoZSBjYWxlbmRhciB0byBiZSB1cGRhdGVkIGxhdGVyLCB0aGVyZWJ5IGFkanVzdGluZyB0aGUKKyAgICAgICAgZWZmZWN0aXZlIFJUQyBmcmVxdWVuY3kgdG8gYmUgYSBiaXQgbG93ZXIuCisgICAgKCspIERDIGlzIGNvbmZpZ3VyZWQgdGhyb3VnaCBiaXRzIERDWzQ6MF0gb2YgUlRDX0NBTElCUiByZWdpc3Rlci4gVGhpcyBudW1iZXIKKyAgICAgICAgcmFuZ2VzIGZyb20gMCB0byAzMSBjb3JyZXNwb25kaW5nIHRvIGEgdGltZSBpbnRlcnZhbCAoMnhEQykgcmFuZ2luZyBmcm9tCisgICAgICAgIDAgdG8gNjIuCisgICAgKCspIEluIG9yZGVyIHRvIG1lYXN1cmUgdGhlIGNsb2NrIGRldmlhdGlvbiwgYSA1MTIgSHogY2xvY2sgaXMgb3V0cHV0IGZvcgorICAgICAgICBjYWxpYnJhdGlvbi4KKyAgICAoKykgVGhlIFJUQyBDb2Fyc2UgRGlnaXRhbCBDYWxpYnJhdGlvbiB2YWx1ZSBhbmQgc2lnbiBjYW4gYmUgY2FsaWJyYXRlZCB1c2luZworICAgICAgICB0aGUgSEFMX1JUQ0V4X1NldENvYXJzZUNhbGliKCkgZnVuY3Rpb24uCisKICAgQGVuZHZlcmJhdGltCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqLwpAQCAtODMsNyArMTExLDcgQEAKICAgKi8KIAogLyoqIEBkZWZncm91cCBSVENFeCBSVENFeAotICAqIEBicmllZiBSVEMgSEFMIG1vZHVsZSBkcml2ZXIKKyAgKiBAYnJpZWYgICAgUlRDIEV4dGVuZGVkIEhBTCBtb2R1bGUgZHJpdmVyCiAgICogQHsKICAgKi8KIApAQCAtOTQsMTQ2ICsxMjIsODYgQEAKIC8qIFByaXZhdGUgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBQcml2YXRlIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogUHJpdmF0ZSBmdW5jdGlvbiBwcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIFByaXZhdGUgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBFeHBvcnRlZCBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0vKiogQGRlZmdyb3VwIFJUQ0V4X0V4cG9ydGVkX0Z1bmN0aW9ucyBSVEMgRXhwb3J0ZWQgRnVuY3Rpb25zCisvKiogQGRlZmdyb3VwIFJUQ0V4X0V4cG9ydGVkX0Z1bmN0aW9ucyBSVENFeCBFeHBvcnRlZCBGdW5jdGlvbnMKICAgKiBAewogICAqLwogCi0vKiogQGRlZmdyb3VwIFJUQ0V4X0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDEgUlRDIFRpbWVTdGFtcCBhbmQgVGFtcGVyIGZ1bmN0aW9ucwotICAqICBAYnJpZWYgICBSVEMgVGltZVN0YW1wIGFuZCBUYW1wZXIgZnVuY3Rpb25zCisvKiogQGRlZmdyb3VwIFJUQ0V4X0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDEgUlRDIFRpbWVzdGFtcCBhbmQgVGFtcGVyIGZ1bmN0aW9ucworICAqIEBicmllZiAgICBSVEMgVGltZXN0YW1wIGFuZCBUYW1wZXIgZnVuY3Rpb25zCiAgICoKIEB2ZXJiYXRpbQogID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgICAgICAgICAgICAgIyMjIyMgUlRDIFRpbWVTdGFtcCBhbmQgVGFtcGVyIGZ1bmN0aW9ucyAjIyMjIworICAgICAgICAgICAgICAgICAjIyMjIyBSVEMgVGltZXN0YW1wIGFuZCBUYW1wZXIgZnVuY3Rpb25zICMjIyMjCiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi0gWy4uXSBUaGlzIHNlY3Rpb24gcHJvdmlkZXMgZnVuY3Rpb25zIGFsbG93aW5nIHRvIGNvbmZpZ3VyZSBUaW1lU3RhbXAgZmVhdHVyZQorIFsuLl0gVGhpcyBzZWN0aW9uIHByb3ZpZGVzIGZ1bmN0aW9ucyBhbGxvd2luZyB0byBjb25maWd1cmUgVGltZXN0YW1wIGZlYXR1cmUKIAogQGVuZHZlcmJhdGltCiAgICogQHsKICAgKi8KIAogLyoqCi0gICogQGJyaWVmICBTZXRzIFRpbWVTdGFtcC4KLSAgKiBAbm90ZSAgIFRoaXMgQVBJIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBlbmFibGluZyB0aGUgVGltZVN0YW1wIGZlYXR1cmUuCisgICogQGJyaWVmICBTZXRzIFRpbWVzdGFtcC4KKyAgKiBAbm90ZSAgIFRoaXMgQVBJIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBlbmFibGluZyB0aGUgVGltZXN0YW1wIGZlYXR1cmUuCiAgICogQHBhcmFtICBocnRjIHBvaW50ZXIgdG8gYSBSVENfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwogICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBSVEMuCi0gICogQHBhcmFtICBUaW1lU3RhbXBFZGdlIFNwZWNpZmllcyB0aGUgcGluIGVkZ2Ugb24gd2hpY2ggdGhlIFRpbWVTdGFtcCBpcworICAqIEBwYXJhbSAgUlRDX1RpbWVTdGFtcEVkZ2UgU3BlY2lmaWVzIHRoZSBwaW4gZWRnZSBvbiB3aGljaCB0aGUgVGltZXN0YW1wIGlzCiAgICogICAgICAgICBhY3RpdmF0ZWQuCiAgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKLSAgKiAgICAgICAgICAgICBAYXJnIFJUQ19USU1FU1RBTVBFREdFX1JJU0lORzogdGhlIFRpbWUgc3RhbXAgZXZlbnQgb2NjdXJzIG9uIHRoZQotICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpc2luZyBlZGdlIG9mIHRoZSByZWxhdGVkIHBpbi4KLSAgKiAgICAgICAgICAgICBAYXJnIFJUQ19USU1FU1RBTVBFREdFX0ZBTExJTkc6IHRoZSBUaW1lIHN0YW1wIGV2ZW50IG9jY3VycyBvbiB0aGUKLSAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsbGluZyBlZGdlIG9mIHRoZSByZWxhdGVkIHBpbi4KLSAgKiBAcGFyYW0gIFJUQ19UaW1lU3RhbXBQaW4gc3BlY2lmaWVzIHRoZSBSVEMgVGltZVN0YW1wIFBpbi4KKyAgKiAgICAgICAgICAgICBAYXJnIFJUQ19USU1FU1RBTVBFREdFX1JJU0lORzogdGhlIFRpbWVzdGFtcCBldmVudCBvY2N1cnMgb24KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcmlzaW5nIGVkZ2Ugb2YgdGhlIHJlbGF0ZWQgcGluLgorICAqICAgICAgICAgICAgIEBhcmcgUlRDX1RJTUVTVEFNUEVER0VfRkFMTElORzogdGhlIFRpbWVzdGFtcCBldmVudCBvY2N1cnMgb24KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZmFsbGluZyBlZGdlIG9mIHRoZSByZWxhdGVkIHBpbi4KKyAgKiBAcGFyYW0gIFJUQ19UaW1lU3RhbXBQaW4gU3BlY2lmaWVzIHRoZSBSVEMgVGltZXN0YW1wIFBpbi4KICAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgotICAqICAgICAgICAgICAgIEBhcmcgUlRDX1RJTUVTVEFNUFBJTl9ERUZBVUxUOiBQQzEzIGlzIHNlbGVjdGVkIGFzIFJUQyBUaW1lU3RhbXAgUGluLgotICAqICAgICAgICAgICAgIEBhcmcgUlRDX1RJTUVTVEFNUFBJTl9QT1MxOiBQSTggaXMgc2VsZWN0ZWQgYXMgUlRDIFRpbWVTdGFtcCBQaW4uCisgICogICAgICAgICAgICAgQGFyZyBSVENfVElNRVNUQU1QUElOX0RFRkFVTFQ6IFBDMTMgaXMgc2VsZWN0ZWQgYXMgUlRDIFRpbWVzdGFtcCBQaW4uCisgICogICAgICAgICAgICAgQGFyZyBSVENfVElNRVNUQU1QUElOX1BPUzE6IFBJOCBpcyBzZWxlY3RlZCBhcyBSVEMgVGltZXN0YW1wIFBpbi4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9SVENFeF9TZXRUaW1lU3RhbXAoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMsIHVpbnQzMl90IFRpbWVTdGFtcEVkZ2UsIHVpbnQzMl90IFJUQ19UaW1lU3RhbXBQaW4pCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfUlRDRXhfU2V0VGltZVN0YW1wKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjLCB1aW50MzJfdCBSVENfVGltZVN0YW1wRWRnZSwgdWludDMyX3QgUlRDX1RpbWVTdGFtcFBpbikKIHsKICAgdWludDMyX3QgdG1wcmVnID0gMFU7CiAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KLSAgYXNzZXJ0X3BhcmFtKElTX1RJTUVTVEFNUF9FREdFKFRpbWVTdGFtcEVkZ2UpKTsKKyAgYXNzZXJ0X3BhcmFtKElTX1RJTUVTVEFNUF9FREdFKFJUQ19UaW1lU3RhbXBFZGdlKSk7CiAgIGFzc2VydF9wYXJhbShJU19SVENfVElNRVNUQU1QX1BJTihSVENfVGltZVN0YW1wUGluKSk7CiAKICAgLyogUHJvY2VzcyBMb2NrZWQgKi8KICAgX19IQUxfTE9DSyhocnRjKTsKIAorICAvKiBDaGFuZ2UgUlRDIHN0YXRlIHRvIEJVU1kgKi8KICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX0JVU1k7CiAKLSAgLyogR2V0IHRoZSBSVENfQ1IgcmVnaXN0ZXIgYW5kIGNsZWFyIHRoZSBiaXRzIHRvIGJlIGNvbmZpZ3VyZWQgKi8KLSAgdG1wcmVnID0gKHVpbnQzMl90KShocnRjLT5JbnN0YW5jZS0+Q1IgJiAodWludDMyX3QpfihSVENfQ1JfVFNFREdFIHwgUlRDX0NSX1RTRSkpOwotCi0gIHRtcHJlZyB8PSBUaW1lU3RhbXBFZGdlOwotCi0gIC8qIERpc2FibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KLSAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9ESVNBQkxFKGhydGMpOwotCiAgIGhydGMtPkluc3RhbmNlLT5UQUZDUiAmPSAodWludDMyX3QpflJUQ19UQUZDUl9UU0lOU0VMOwogICBocnRjLT5JbnN0YW5jZS0+VEFGQ1IgfD0gKHVpbnQzMl90KShSVENfVGltZVN0YW1wUGluKTsKIAotICAvKiBDb25maWd1cmUgdGhlIFRpbWUgU3RhbXAgVFNFREdFIGFuZCBFbmFibGUgYml0cyAqLwotICBocnRjLT5JbnN0YW5jZS0+Q1IgPSAodWludDMyX3QpdG1wcmVnOwotCi0gIF9fSEFMX1JUQ19USU1FU1RBTVBfRU5BQkxFKGhydGMpOwotCi0gIC8qIEVuYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLwotICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0VOQUJMRShocnRjKTsKLQotICAvKiBDaGFuZ2UgUlRDIHN0YXRlICovCi0gIGhydGMtPlN0YXRlID0gSEFMX1JUQ19TVEFURV9SRUFEWTsKLQotICAvKiBQcm9jZXNzIFVubG9ja2VkICovCi0gIF9fSEFMX1VOTE9DSyhocnRjKTsKLQotICByZXR1cm4gSEFMX09LOwotfQotCi0vKioKLSAgKiBAYnJpZWYgIFNldHMgVGltZVN0YW1wIHdpdGggSW50ZXJydXB0LgotICAqIEBwYXJhbSAgaHJ0YyBwb2ludGVyIHRvIGEgUlRDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKLSAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgUlRDLgotICAqIEBub3RlICAgVGhpcyBBUEkgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGVuYWJsaW5nIHRoZSBUaW1lU3RhbXAgZmVhdHVyZS4KLSAgKiBAcGFyYW0gIFRpbWVTdGFtcEVkZ2UgU3BlY2lmaWVzIHRoZSBwaW4gZWRnZSBvbiB3aGljaCB0aGUgVGltZVN0YW1wIGlzCi0gICogICAgICAgICBhY3RpdmF0ZWQuCi0gICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKLSAgKiAgICAgICAgICAgICBAYXJnIFJUQ19USU1FU1RBTVBFREdFX1JJU0lORzogdGhlIFRpbWUgc3RhbXAgZXZlbnQgb2NjdXJzIG9uIHRoZQotICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpc2luZyBlZGdlIG9mIHRoZSByZWxhdGVkIHBpbi4KLSAgKiAgICAgICAgICAgICBAYXJnIFJUQ19USU1FU1RBTVBFREdFX0ZBTExJTkc6IHRoZSBUaW1lIHN0YW1wIGV2ZW50IG9jY3VycyBvbiB0aGUKLSAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsbGluZyBlZGdlIG9mIHRoZSByZWxhdGVkIHBpbi4KLSAgKiBAcGFyYW0gIFJUQ19UaW1lU3RhbXBQaW4gU3BlY2lmaWVzIHRoZSBSVEMgVGltZVN0YW1wIFBpbi4KLSAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgotICAqICAgICAgICAgICAgIEBhcmcgUlRDX1RJTUVTVEFNUFBJTl9ERUZBVUxUOiBQQzEzIGlzIHNlbGVjdGVkIGFzIFJUQyBUaW1lU3RhbXAgUGluLgotICAqICAgICAgICAgICAgIEBhcmcgUlRDX1RJTUVTVEFNUFBJTl9QT1MxOiBQSTggaXMgc2VsZWN0ZWQgYXMgUlRDIFRpbWVTdGFtcCBQaW4uCi0gICogQHJldHZhbCBIQUwgc3RhdHVzCi0gICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfUlRDRXhfU2V0VGltZVN0YW1wX0lUKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjLCB1aW50MzJfdCBUaW1lU3RhbXBFZGdlLCB1aW50MzJfdCBSVENfVGltZVN0YW1wUGluKQotewotICB1aW50MzJfdCB0bXByZWcgPSAwVTsKLQotICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwotICBhc3NlcnRfcGFyYW0oSVNfVElNRVNUQU1QX0VER0UoVGltZVN0YW1wRWRnZSkpOwotICBhc3NlcnRfcGFyYW0oSVNfUlRDX1RJTUVTVEFNUF9QSU4oUlRDX1RpbWVTdGFtcFBpbikpOwotCi0gIC8qIFByb2Nlc3MgTG9ja2VkICovCi0gIF9fSEFMX0xPQ0soaHJ0Yyk7Ci0KLSAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX0JVU1k7Ci0KICAgLyogR2V0IHRoZSBSVENfQ1IgcmVnaXN0ZXIgYW5kIGNsZWFyIHRoZSBiaXRzIHRvIGJlIGNvbmZpZ3VyZWQgKi8KICAgdG1wcmVnID0gKHVpbnQzMl90KShocnRjLT5JbnN0YW5jZS0+Q1IgJiAodWludDMyX3QpfihSVENfQ1JfVFNFREdFIHwgUlRDX0NSX1RTRSkpOwogCi0gIHRtcHJlZyB8PSBUaW1lU3RhbXBFZGdlOworICAvKiBDb25maWd1cmUgdGhlIFRpbWVzdGFtcCBUU0VER0UgYml0ICovCisgIHRtcHJlZyB8PSBSVENfVGltZVN0YW1wRWRnZTsKIAogICAvKiBEaXNhYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCiAgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRElTQUJMRShocnRjKTsKIAotICAvKiBDb25maWd1cmUgdGhlIFRpbWUgU3RhbXAgVFNFREdFIGFuZCBFbmFibGUgYml0cyAqLworICAvKiBDb3B5IHRoZSBkZXNpcmVkIGNvbmZpZ3VyYXRpb24gaW50byB0aGUgQ1IgcmVnaXN0ZXIgKi8KICAgaHJ0Yy0+SW5zdGFuY2UtPkNSID0gKHVpbnQzMl90KXRtcHJlZzsKIAotICBocnRjLT5JbnN0YW5jZS0+VEFGQ1IgJj0gKHVpbnQzMl90KX5SVENfVEFGQ1JfVFNJTlNFTDsKLSAgaHJ0Yy0+SW5zdGFuY2UtPlRBRkNSIHw9ICh1aW50MzJfdCkoUlRDX1RpbWVTdGFtcFBpbik7Ci0KICAgLyogQ2xlYXIgUlRDIFRpbWVzdGFtcCBmbGFnICovCiAgIF9fSEFMX1JUQ19USU1FU1RBTVBfQ0xFQVJfRkxBRyhocnRjLCBSVENfRkxBR19UU0YpOwogCisgIC8qIENsZWFyIFJUQyBUaW1lc3RhbXAgb3ZlcnJ1biBGbGFnICovCisgIF9fSEFMX1JUQ19USU1FU1RBTVBfQ0xFQVJfRkxBRyhocnRjLCBSVENfRkxBR19UU09WRik7CisKKyAgLyogRW5hYmxlIHRoZSBUaW1lc3RhbXAgc2F2aW5nICovCiAgIF9fSEFMX1JUQ19USU1FU1RBTVBfRU5BQkxFKGhydGMpOwogCi0gIC8qIEVuYWJsZSBJVCB0aW1lc3RhbXAgKi8KLSAgX19IQUxfUlRDX1RJTUVTVEFNUF9FTkFCTEVfSVQoaHJ0YywgUlRDX0lUX1RTKTsKLQotICAvKiBSVEMgdGltZXN0YW1wIEludGVycnVwdCBDb25maWd1cmF0aW9uOiBFWFRJIGNvbmZpZ3VyYXRpb24gKi8KLSAgX19IQUxfUlRDX1RBTVBFUl9USU1FU1RBTVBfRVhUSV9FTkFCTEVfSVQoKTsKLQotICBFWFRJLT5SVFNSIHw9IFJUQ19FWFRJX0xJTkVfVEFNUEVSX1RJTUVTVEFNUF9FVkVOVDsKLQogICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7CiAKKyAgLyogQ2hhbmdlIFJUQyBzdGF0ZSBiYWNrIHRvIFJFQURZICovCiAgIGhydGMtPlN0YXRlID0gSEFMX1JUQ19TVEFURV9SRUFEWTsKIAogICAvKiBQcm9jZXNzIFVubG9ja2VkICovCkBAIC0yNDMsNyArMjExLDgyIEBACiB9CiAKIC8qKgotICAqIEBicmllZiAgRGVhY3RpdmF0ZXMgVGltZVN0YW1wLgorICAqIEBicmllZiAgU2V0cyBUaW1lc3RhbXAgd2l0aCBJbnRlcnJ1cHQuCisgICogQHBhcmFtICBocnRjIHBvaW50ZXIgdG8gYSBSVENfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBSVEMuCisgICogQG5vdGUgICBUaGlzIEFQSSBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgZW5hYmxpbmcgdGhlIFRpbWVzdGFtcCBmZWF0dXJlLgorICAqIEBwYXJhbSAgUlRDX1RpbWVTdGFtcEVkZ2UgU3BlY2lmaWVzIHRoZSBwaW4gZWRnZSBvbiB3aGljaCB0aGUgVGltZXN0YW1wIGlzCisgICogICAgICAgICBhY3RpdmF0ZWQuCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgICAgICBAYXJnIFJUQ19USU1FU1RBTVBFREdFX1JJU0lORzogdGhlIFRpbWVzdGFtcCBldmVudCBvY2N1cnMgb24KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcmlzaW5nIGVkZ2Ugb2YgdGhlIHJlbGF0ZWQgcGluLgorICAqICAgICAgICAgICAgIEBhcmcgUlRDX1RJTUVTVEFNUEVER0VfRkFMTElORzogdGhlIFRpbWVzdGFtcCBldmVudCBvY2N1cnMgb24KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZmFsbGluZyBlZGdlIG9mIHRoZSByZWxhdGVkIHBpbi4KKyAgKiBAcGFyYW0gIFJUQ19UaW1lU3RhbXBQaW4gU3BlY2lmaWVzIHRoZSBSVEMgVGltZXN0YW1wIFBpbi4KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgICAgIEBhcmcgUlRDX1RJTUVTVEFNUFBJTl9ERUZBVUxUOiBQQzEzIGlzIHNlbGVjdGVkIGFzIFJUQyBUaW1lc3RhbXAgUGluLgorICAqICAgICAgICAgICAgIEBhcmcgUlRDX1RJTUVTVEFNUFBJTl9QT1MxOiBQSTggaXMgc2VsZWN0ZWQgYXMgUlRDIFRpbWVzdGFtcCBQaW4uCisgICogQHJldHZhbCBIQUwgc3RhdHVzCisgICovCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfUlRDRXhfU2V0VGltZVN0YW1wX0lUKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjLCB1aW50MzJfdCBSVENfVGltZVN0YW1wRWRnZSwgdWludDMyX3QgUlRDX1RpbWVTdGFtcFBpbikKK3sKKyAgdWludDMyX3QgdG1wcmVnID0gMFU7CisKKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTUVTVEFNUF9FREdFKFJUQ19UaW1lU3RhbXBFZGdlKSk7CisgIGFzc2VydF9wYXJhbShJU19SVENfVElNRVNUQU1QX1BJTihSVENfVGltZVN0YW1wUGluKSk7CisKKyAgLyogUHJvY2VzcyBMb2NrZWQgKi8KKyAgX19IQUxfTE9DSyhocnRjKTsKKworICAvKiBDaGFuZ2UgUlRDIHN0YXRlIHRvIEJVU1kgKi8KKyAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX0JVU1k7CisKKyAgaHJ0Yy0+SW5zdGFuY2UtPlRBRkNSICY9ICh1aW50MzJfdCl+UlRDX1RBRkNSX1RTSU5TRUw7CisgIGhydGMtPkluc3RhbmNlLT5UQUZDUiB8PSAodWludDMyX3QpKFJUQ19UaW1lU3RhbXBQaW4pOworCisgIC8qIEdldCB0aGUgUlRDX0NSIHJlZ2lzdGVyIGFuZCBjbGVhciB0aGUgYml0cyB0byBiZSBjb25maWd1cmVkICovCisgIHRtcHJlZyA9ICh1aW50MzJfdCkoaHJ0Yy0+SW5zdGFuY2UtPkNSICYgKHVpbnQzMl90KX4oUlRDX0NSX1RTRURHRSB8IFJUQ19DUl9UU0UpKTsKKworICAvKiBDb25maWd1cmUgdGhlIFRpbWVzdGFtcCBUU0VER0UgYml0ICovCisgIHRtcHJlZyB8PSBSVENfVGltZVN0YW1wRWRnZTsKKworICAvKiBEaXNhYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCisgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRElTQUJMRShocnRjKTsKKworICAvKiBDb3B5IHRoZSBkZXNpcmVkIGNvbmZpZ3VyYXRpb24gaW50byB0aGUgQ1IgcmVnaXN0ZXIgKi8KKyAgaHJ0Yy0+SW5zdGFuY2UtPkNSID0gKHVpbnQzMl90KXRtcHJlZzsKKworICAvKiBDbGVhciBSVEMgVGltZXN0YW1wIGZsYWcgKi8KKyAgX19IQUxfUlRDX1RJTUVTVEFNUF9DTEVBUl9GTEFHKGhydGMsIFJUQ19GTEFHX1RTRik7CisKKyAgLyogQ2xlYXIgUlRDIFRpbWVzdGFtcCBvdmVycnVuIEZsYWcgKi8KKyAgX19IQUxfUlRDX1RJTUVTVEFNUF9DTEVBUl9GTEFHKGhydGMsIFJUQ19GTEFHX1RTT1ZGKTsKKworICAvKiBFbmFibGUgdGhlIFRpbWVzdGFtcCBzYXZpbmcgKi8KKyAgX19IQUxfUlRDX1RJTUVTVEFNUF9FTkFCTEUoaHJ0Yyk7CisKKyAgLyogRW5hYmxlIElUIFRpbWVzdGFtcCAqLworICBfX0hBTF9SVENfVElNRVNUQU1QX0VOQUJMRV9JVChocnRjLCBSVENfSVRfVFMpOworCisgIC8qIEVuYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLworICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0VOQUJMRShocnRjKTsKKworICAvKiBSVEMgVGltZXN0YW1wIEludGVycnVwdCBDb25maWd1cmF0aW9uOiBFWFRJIGNvbmZpZ3VyYXRpb24gKi8KKyAgX19IQUxfUlRDX1RBTVBFUl9USU1FU1RBTVBfRVhUSV9FTkFCTEVfSVQoKTsKKyAgX19IQUxfUlRDX1RBTVBFUl9USU1FU1RBTVBfRVhUSV9FTkFCTEVfUklTSU5HX0VER0UoKTsKKworICAvKiBDaGFuZ2UgUlRDIHN0YXRlIGJhY2sgdG8gUkVBRFkgKi8KKyAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX1JFQURZOworCisgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KKyAgX19IQUxfVU5MT0NLKGhydGMpOworCisgIHJldHVybiBIQUxfT0s7Cit9CisKKy8qKgorICAqIEBicmllZiAgRGVhY3RpdmF0ZXMgVGltZXN0YW1wLgogICAqIEBwYXJhbSAgaHJ0YyBwb2ludGVyIHRvIGEgUlRDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKICAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgUlRDLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwpAQCAtMjY2LDcgKzMwOSw3IEBACiAgIC8qIEdldCB0aGUgUlRDX0NSIHJlZ2lzdGVyIGFuZCBjbGVhciB0aGUgYml0cyB0byBiZSBjb25maWd1cmVkICovCiAgIHRtcHJlZyA9ICh1aW50MzJfdCkoaHJ0Yy0+SW5zdGFuY2UtPkNSICYgKHVpbnQzMl90KX4oUlRDX0NSX1RTRURHRSB8IFJUQ19DUl9UU0UpKTsKIAotICAvKiBDb25maWd1cmUgdGhlIFRpbWUgU3RhbXAgVFNFREdFIGFuZCBFbmFibGUgYml0cyAqLworICAvKiBDb25maWd1cmUgdGhlIFRpbWVzdGFtcCBUU0VER0UgYW5kIEVuYWJsZSBiaXRzICovCiAgIGhydGMtPkluc3RhbmNlLT5DUiA9ICh1aW50MzJfdCl0bXByZWc7CiAKICAgLyogRW5hYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCkBAIC0yODEsNjMgKzMyNCw2NCBAQAogfQogCiAvKioKLSAgKiBAYnJpZWYgIEdldHMgdGhlIFJUQyBUaW1lU3RhbXAgdmFsdWUuCisgICogQGJyaWVmICBHZXRzIHRoZSBSVEMgVGltZXN0YW1wIHZhbHVlLgogICAqIEBwYXJhbSAgaHJ0YyBwb2ludGVyIHRvIGEgUlRDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKICAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgUlRDLgogICAqIEBwYXJhbSAgc1RpbWVTdGFtcCBQb2ludGVyIHRvIFRpbWUgc3RydWN0dXJlCiAgICogQHBhcmFtICBzVGltZVN0YW1wRGF0ZSBQb2ludGVyIHRvIERhdGUgc3RydWN0dXJlCiAgICogQHBhcmFtICBGb3JtYXQgc3BlY2lmaWVzIHRoZSBmb3JtYXQgb2YgdGhlIGVudGVyZWQgcGFyYW1ldGVycy4KICAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgotICAqICAgICAgICAgICAgIFJUQ19GT1JNQVRfQklOOiBCaW5hcnkgZGF0YSBmb3JtYXQKLSAgKiAgICAgICAgICAgICBSVENfRk9STUFUX0JDRDogQkNEIGRhdGEgZm9ybWF0CisgICogICAgICAgICAgICAgQGFyZyBSVENfRk9STUFUX0JJTjogQmluYXJ5IGRhdGEgZm9ybWF0CisgICogICAgICAgICAgICAgQGFyZyBSVENfRk9STUFUX0JDRDogQkNEIGRhdGEgZm9ybWF0CiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfUlRDRXhfR2V0VGltZVN0YW1wKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjLCBSVENfVGltZVR5cGVEZWYgKnNUaW1lU3RhbXAsIFJUQ19EYXRlVHlwZURlZiAqc1RpbWVTdGFtcERhdGUsIHVpbnQzMl90IEZvcm1hdCkKIHsKLSAgdWludDMyX3QgdG1wdGltZSA9IDBVLCB0bXBkYXRlID0gMFU7CisgIHVpbnQzMl90IHRtcHRpbWUgPSAwVTsKKyAgdWludDMyX3QgdG1wZGF0ZSA9IDBVOwogCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19SVENfRk9STUFUKEZvcm1hdCkpOwogCi0gIC8qIEdldCB0aGUgVGltZVN0YW1wIHRpbWUgYW5kIGRhdGUgcmVnaXN0ZXJzIHZhbHVlcyAqLworICAvKiBHZXQgdGhlIFRpbWVzdGFtcCB0aW1lIGFuZCBkYXRlIHJlZ2lzdGVycyB2YWx1ZXMgKi8KICAgdG1wdGltZSA9ICh1aW50MzJfdCkoaHJ0Yy0+SW5zdGFuY2UtPlRTVFIgJiBSVENfVFJfUkVTRVJWRURfTUFTSyk7CiAgIHRtcGRhdGUgPSAodWludDMyX3QpKGhydGMtPkluc3RhbmNlLT5UU0RSICYgUlRDX0RSX1JFU0VSVkVEX01BU0spOwogCiAgIC8qIEZpbGwgdGhlIFRpbWUgc3RydWN0dXJlIGZpZWxkcyB3aXRoIHRoZSByZWFkIHBhcmFtZXRlcnMgKi8KLSAgc1RpbWVTdGFtcC0+SG91cnMgPSAodWludDhfdCkoKHRtcHRpbWUgJiAoUlRDX1RSX0hUIHwgUlRDX1RSX0hVKSkgPj4gMTZVKTsKLSAgc1RpbWVTdGFtcC0+TWludXRlcyA9ICh1aW50OF90KSgodG1wdGltZSAmIChSVENfVFJfTU5UIHwgUlRDX1RSX01OVSkpID4+IDhVKTsKLSAgc1RpbWVTdGFtcC0+U2Vjb25kcyA9ICh1aW50OF90KSh0bXB0aW1lICYgKFJUQ19UUl9TVCB8IFJUQ19UUl9TVSkpOwotICBzVGltZVN0YW1wLT5UaW1lRm9ybWF0ID0gKHVpbnQ4X3QpKCh0bXB0aW1lICYgKFJUQ19UUl9QTSkpID4+IDE2VSk7CisgIHNUaW1lU3RhbXAtPkhvdXJzICAgICAgPSAodWludDhfdCkoKHRtcHRpbWUgJiAoUlRDX1RTVFJfSFQgIHwgUlRDX1RTVFJfSFUpKSAgPj4gUlRDX1RTVFJfSFVfUG9zKTsKKyAgc1RpbWVTdGFtcC0+TWludXRlcyAgICA9ICh1aW50OF90KSgodG1wdGltZSAmIChSVENfVFNUUl9NTlQgfCBSVENfVFNUUl9NTlUpKSA+PiBSVENfVFNUUl9NTlVfUG9zKTsKKyAgc1RpbWVTdGFtcC0+U2Vjb25kcyAgICA9ICh1aW50OF90KSgodG1wdGltZSAmIChSVENfVFNUUl9TVCAgfCBSVENfVFNUUl9TVSkpICA+PiBSVENfVFNUUl9TVV9Qb3MpOworICBzVGltZVN0YW1wLT5UaW1lRm9ybWF0ID0gKHVpbnQ4X3QpKCh0bXB0aW1lICYgKFJUQ19UU1RSX1BNKSkgICAgICAgICAgICAgICAgID4+IFJUQ19UU1RSX1BNX1Bvcyk7CiAKICAgLyogRmlsbCB0aGUgRGF0ZSBzdHJ1Y3R1cmUgZmllbGRzIHdpdGggdGhlIHJlYWQgcGFyYW1ldGVycyAqLwotICBzVGltZVN0YW1wRGF0ZS0+WWVhciA9IDA7Ci0gIHNUaW1lU3RhbXBEYXRlLT5Nb250aCA9ICh1aW50OF90KSgodG1wZGF0ZSAmIChSVENfRFJfTVQgfCBSVENfRFJfTVUpKSA+PiA4VSk7Ci0gIHNUaW1lU3RhbXBEYXRlLT5EYXRlID0gKHVpbnQ4X3QpKHRtcGRhdGUgJiAoUlRDX0RSX0RUIHwgUlRDX0RSX0RVKSk7Ci0gIHNUaW1lU3RhbXBEYXRlLT5XZWVrRGF5ID0gKHVpbnQ4X3QpKCh0bXBkYXRlICYgKFJUQ19EUl9XRFUpKSA+PiAxM1UpOworICBzVGltZVN0YW1wRGF0ZS0+WWVhciAgICA9IDBVOworICBzVGltZVN0YW1wRGF0ZS0+TW9udGggICA9ICh1aW50OF90KSgodG1wZGF0ZSAmIChSVENfVFNEUl9NVCB8IFJUQ19UU0RSX01VKSkgPj4gUlRDX1RTRFJfTVVfUG9zKTsKKyAgc1RpbWVTdGFtcERhdGUtPkRhdGUgICAgPSAodWludDhfdCkoKHRtcGRhdGUgJiAoUlRDX1RTRFJfRFQgfCBSVENfVFNEUl9EVSkpID4+IFJUQ19UU0RSX0RVX1Bvcyk7CisgIHNUaW1lU3RhbXBEYXRlLT5XZWVrRGF5ID0gKHVpbnQ4X3QpKCh0bXBkYXRlICYgKFJUQ19UU0RSX1dEVSkpICAgICAgICAgICAgICA+PiBSVENfVFNEUl9XRFVfUG9zKTsKIAogICAvKiBDaGVjayB0aGUgaW5wdXQgcGFyYW1ldGVycyBmb3JtYXQgKi8KICAgaWYgKEZvcm1hdCA9PSBSVENfRk9STUFUX0JJTikKICAgewotICAgIC8qIENvbnZlcnQgdGhlIFRpbWVTdGFtcCBzdHJ1Y3R1cmUgcGFyYW1ldGVycyB0byBCaW5hcnkgZm9ybWF0ICovCi0gICAgc1RpbWVTdGFtcC0+SG91cnMgPSAodWludDhfdClSVENfQmNkMlRvQnl0ZShzVGltZVN0YW1wLT5Ib3Vycyk7CisgICAgLyogQ29udmVydCB0aGUgVGltZXN0YW1wIHN0cnVjdHVyZSBwYXJhbWV0ZXJzIHRvIEJpbmFyeSBmb3JtYXQgKi8KKyAgICBzVGltZVN0YW1wLT5Ib3VycyAgID0gKHVpbnQ4X3QpUlRDX0JjZDJUb0J5dGUoc1RpbWVTdGFtcC0+SG91cnMpOwogICAgIHNUaW1lU3RhbXAtPk1pbnV0ZXMgPSAodWludDhfdClSVENfQmNkMlRvQnl0ZShzVGltZVN0YW1wLT5NaW51dGVzKTsKICAgICBzVGltZVN0YW1wLT5TZWNvbmRzID0gKHVpbnQ4X3QpUlRDX0JjZDJUb0J5dGUoc1RpbWVTdGFtcC0+U2Vjb25kcyk7CiAKICAgICAvKiBDb252ZXJ0IHRoZSBEYXRlVGltZVN0YW1wIHN0cnVjdHVyZSBwYXJhbWV0ZXJzIHRvIEJpbmFyeSBmb3JtYXQgKi8KLSAgICBzVGltZVN0YW1wRGF0ZS0+TW9udGggPSAodWludDhfdClSVENfQmNkMlRvQnl0ZShzVGltZVN0YW1wRGF0ZS0+TW9udGgpOwotICAgIHNUaW1lU3RhbXBEYXRlLT5EYXRlID0gKHVpbnQ4X3QpUlRDX0JjZDJUb0J5dGUoc1RpbWVTdGFtcERhdGUtPkRhdGUpOworICAgIHNUaW1lU3RhbXBEYXRlLT5Nb250aCAgID0gKHVpbnQ4X3QpUlRDX0JjZDJUb0J5dGUoc1RpbWVTdGFtcERhdGUtPk1vbnRoKTsKKyAgICBzVGltZVN0YW1wRGF0ZS0+RGF0ZSAgICA9ICh1aW50OF90KVJUQ19CY2QyVG9CeXRlKHNUaW1lU3RhbXBEYXRlLT5EYXRlKTsKICAgICBzVGltZVN0YW1wRGF0ZS0+V2Vla0RheSA9ICh1aW50OF90KVJUQ19CY2QyVG9CeXRlKHNUaW1lU3RhbXBEYXRlLT5XZWVrRGF5KTsKICAgfQogCi0gIC8qIENsZWFyIHRoZSBUSU1FU1RBTVAgRmxhZyAqLworICAvKiBDbGVhciB0aGUgVGltZXN0YW1wIEZsYWcgKi8KICAgX19IQUxfUlRDX1RJTUVTVEFNUF9DTEVBUl9GTEFHKGhydGMsIFJUQ19GTEFHX1RTRik7CiAKICAgcmV0dXJuIEhBTF9PSzsKIH0KIAogLyoqCi0gICogQGJyaWVmICBTZXRzIFRhbXBlcgotICAqIEBub3RlICAgQnkgY2FsbGluZyB0aGlzIEFQSSB3ZSBkaXNhYmxlIHRoZSB0YW1wZXIgaW50ZXJydXB0IGZvciBhbGwgdGFtcGVycy4KKyAgKiBAYnJpZWYgIFNldHMgVGFtcGVyLgorICAqIEBub3RlICAgQnkgY2FsbGluZyB0aGlzIEFQSSB0aGUgdGFtcGVyIGdsb2JhbCBpbnRlcnJ1cHQgd2lsbCBiZSBkaXNhYmxlZC4KICAgKiBAcGFyYW0gIGhydGMgcG9pbnRlciB0byBhIFJUQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIFJUQy4KICAgKiBAcGFyYW0gIHNUYW1wZXIgUG9pbnRlciB0byBUYW1wZXIgU3RydWN0dXJlLgpAQCAtMzU3LDExICs0MDEsMzYgQEAKIAogICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfQlVTWTsKIAotICB0bXByZWcgPSAoKHVpbnQzMl90KXNUYW1wZXItPlRhbXBlciB8ICh1aW50MzJfdClzVGFtcGVyLT5QaW5TZWxlY3Rpb24gfCAodWludDMyX3QpKHNUYW1wZXItPlRyaWdnZXIpKTsKKyAgLyogQ29weSBjb250cm9sIHJlZ2lzdGVyIGludG8gdGVtcG9yYXJ5IHZhcmlhYmxlICovCisgIHRtcHJlZyA9IGhydGMtPkluc3RhbmNlLT5UQUZDUjsKIAotICBocnRjLT5JbnN0YW5jZS0+VEFGQ1IgJj0gKHVpbnQzMl90KX4oKHVpbnQzMl90KVJUQ19UQUZDUl9UQU1QMUUgfCAodWludDMyX3QpUlRDX1RBRkNSX1RBTVAxVFJHIHwgKHVpbnQzMl90KVJUQ19UQUZDUl9UQU1QSU5TRUwpOworICAvKiBFbmFibGUgc2VsZWN0ZWQgdGFtcGVyICovCisgIHRtcHJlZyB8PSAoc1RhbXBlci0+VGFtcGVyKTsKIAotICBocnRjLT5JbnN0YW5jZS0+VEFGQ1IgfD0gdG1wcmVnOworICAvKiBDb25maWd1cmUgdGhlIHRhbXBlciB0cmlnZ2VyIGJpdCAodGhpcyBiaXQgaXMganVzdCBvbiB0aGUgcmlnaHQgb2YgdGhlCisgICAgICAgdGFtcGVyIGVuYWJsZSBiaXQsIGhlbmNlIHRoZSBvbmUtdGltZSByaWdodCBzaGlmdCBiZWZvcmUgdXBkYXRpbmcgaXQpICovCisgIGlmIChzVGFtcGVyLT5UcmlnZ2VyID09IFJUQ19UQU1QRVJUUklHR0VSX0ZBTExJTkdFREdFKQorICB7CisgICAgLyogU2V0IHRoZSB0YW1wZXIgdHJpZ2dlciBiaXQgKGNhc2Ugb2YgZmFsbGluZyBlZGdlIG9yIGhpZ2ggbGV2ZWwpICovCisgICAgdG1wcmVnIHw9ICh1aW50MzJfdCkoc1RhbXBlci0+VGFtcGVyIDw8IDFVKTsKKyAgfQorICBlbHNlCisgIHsKKyAgICAvKiBDbGVhciB0aGUgdGFtcGVyIHRyaWdnZXIgYml0IChjYXNlIG9mIHJpc2luZyBlZGdlIG9yIGxvdyBsZXZlbCkgKi8KKyAgICB0bXByZWcgJj0gKHVpbnQzMl90KX4oc1RhbXBlci0+VGFtcGVyIDw8IDFVKTsKKyAgfQorCisgIC8qIENsZWFyIHJlbWFpbmluZyBmaWVsZCBiZWZvcmUgc2V0dGluZyBpdCAqLworICB0bXByZWcgJj0gflJUQ19UQUZDUl9UQU1QMUlOU0VMOworCisgIC8qIFNldCByZW1haW5pbmcgcGFyYW1ldGVyIG9mIGRlc2lyZWQgY29uZmlndXJhdGlvbiBpbnRvIHRlbXBvcmFyeSB2YXJpYWJsZSAqLworICB0bXByZWcgfD0gKHVpbnQzMl90KXNUYW1wZXItPlBpblNlbGVjdGlvbjsKKworICAvKiBEaXNhYmxlIHRhbXBlciBnbG9iYWwgaW50ZXJydXB0IGluIGNhc2UgaXQgaXMgZW5hYmxlZCAqLworICB0bXByZWcgJj0gKHVpbnQzMl90KX5SVENfVEFGQ1JfVEFNUElFOworCisgIC8qIENvcHkgZGVzaXJlZCBjb25maWd1cmF0aW9uIGludG8gY29uZmlndXJhdGlvbiByZWdpc3RlciAqLworICBocnRjLT5JbnN0YW5jZS0+VEFGQ1IgPSB0bXByZWc7CiAKICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX1JFQURZOwogCkBAIC0zNzMsNyArNDQyLDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBTZXRzIFRhbXBlciB3aXRoIGludGVycnVwdC4KLSAgKiBAbm90ZSAgIEJ5IGNhbGxpbmcgdGhpcyBBUEkgd2UgZm9yY2UgdGhlIHRhbXBlciBpbnRlcnJ1cHQgZm9yIGFsbCB0YW1wZXJzLgorICAqIEBub3RlICAgQnkgY2FsbGluZyB0aGlzIEFQSSB0aGUgdGFtcGVyIGdsb2JhbCBpbnRlcnJ1cHQgd2lsbCBiZSBlbmFibGVkLgogICAqIEBwYXJhbSAgaHJ0YyBwb2ludGVyIHRvIGEgUlRDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKICAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgUlRDLgogICAqIEBwYXJhbSAgc1RhbXBlciBQb2ludGVyIHRvIFJUQyBUYW1wZXIuCkBAIC0zOTMsMjIgKzQ2Miw0MCBAQAogCiAgIGhydGMtPlN0YXRlID0gSEFMX1JUQ19TVEFURV9CVVNZOwogCi0gIHRtcHJlZyA9ICgodWludDMyX3Qpc1RhbXBlci0+VGFtcGVyIHwgKHVpbnQzMl90KXNUYW1wZXItPlBpblNlbGVjdGlvbiB8ICh1aW50MzJfdClzVGFtcGVyLT5UcmlnZ2VyKTsKKyAgLyogQ29weSBjb250cm9sIHJlZ2lzdGVyIGludG8gdGVtcG9yYXJ5IHZhcmlhYmxlICovCisgIHRtcHJlZyA9IGhydGMtPkluc3RhbmNlLT5UQUZDUjsKIAotICBocnRjLT5JbnN0YW5jZS0+VEFGQ1IgJj0gKHVpbnQzMl90KX4oKHVpbnQzMl90KVJUQ19UQUZDUl9UQU1QMUUgfCAodWludDMyX3QpUlRDX1RBRkNSX1RBTVAxVFJHIHwgKHVpbnQzMl90KVJUQ19UQUZDUl9UQU1QSU5TRUwgfCAodWludDMyX3QpUlRDX1RBRkNSX1RBTVBJRSk7CisgIC8qIEVuYWJsZSBzZWxlY3RlZCB0YW1wZXIgKi8KKyAgdG1wcmVnIHw9IChzVGFtcGVyLT5UYW1wZXIpOwogCi0gIGhydGMtPkluc3RhbmNlLT5UQUZDUiB8PSB0bXByZWc7CisgIC8qIENvbmZpZ3VyZSB0aGUgdGFtcGVyIHRyaWdnZXIgYml0ICh0aGlzIGJpdCBpcyBqdXN0IG9uIHRoZSByaWdodCBvZiB0aGUKKyAgICAgICB0YW1wZXIgZW5hYmxlIGJpdCwgaGVuY2UgdGhlIG9uZS10aW1lIHJpZ2h0IHNoaWZ0IGJlZm9yZSB1cGRhdGluZyBpdCkgKi8KKyAgaWYgKHNUYW1wZXItPlRyaWdnZXIgPT0gUlRDX1RBTVBFUlRSSUdHRVJfRkFMTElOR0VER0UpCisgIHsKKyAgICAvKiBTZXQgdGhlIHRhbXBlciB0cmlnZ2VyIGJpdCAoY2FzZSBvZiBmYWxsaW5nIGVkZ2Ugb3IgaGlnaCBsZXZlbCkgKi8KKyAgICB0bXByZWcgfD0gKHVpbnQzMl90KShzVGFtcGVyLT5UYW1wZXIgPDwgMVUpOworICB9CisgIGVsc2UKKyAgeworICAgIC8qIENsZWFyIHRoZSB0YW1wZXIgdHJpZ2dlciBiaXQgKGNhc2Ugb2YgcmlzaW5nIGVkZ2Ugb3IgbG93IGxldmVsKSAqLworICAgIHRtcHJlZyAmPSAodWludDMyX3QpfihzVGFtcGVyLT5UYW1wZXIgPDwgMVUpOworICB9CiAKLSAgLyogQ29uZmlndXJlIHRoZSBUYW1wZXIgSW50ZXJydXB0IGluIHRoZSBSVENfVEFGQ1IgKi8KLSAgaHJ0Yy0+SW5zdGFuY2UtPlRBRkNSIHw9ICh1aW50MzJfdClSVENfVEFGQ1JfVEFNUElFOworICAvKiBDbGVhciByZW1haW5pbmcgZmllbGQgYmVmb3JlIHNldHRpbmcgaXQgKi8KKyAgdG1wcmVnICY9IH5SVENfVEFGQ1JfVEFNUDFJTlNFTDsKIAotICAvKiBDbGVhciBSVEMgVGFtcGVyIDEgZmxhZyAqLwotICBfX0hBTF9SVENfVEFNUEVSX0NMRUFSX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfVEFNUDFGKTsKKyAgLyogU2V0IHJlbWFpbmluZyBwYXJhbWV0ZXIgb2YgZGVzaXJlZCBjb25maWd1cmF0aW9uIGludG8gdGVtcG9yYXJ5IHZhcmlhYmxlICovCisgIHRtcHJlZyB8PSAodWludDMyX3Qpc1RhbXBlci0+UGluU2VsZWN0aW9uOworCisgIC8qIEVuYWJsZSBnbG9iYWwgdGFtcGVyIGludGVycnVwdCAqLworICB0bXByZWcgfD0gKHVpbnQzMl90KVJUQ19UQUZDUl9UQU1QSUU7CisKKyAgLyogQ29weSBkZXNpcmVkIGNvbmZpZ3VyYXRpb24gaW50byBjb25maWd1cmF0aW9uIHJlZ2lzdGVyICovCisgIGhydGMtPkluc3RhbmNlLT5UQUZDUiA9IHRtcHJlZzsKIAogICAvKiBSVEMgVGFtcGVyIEludGVycnVwdCBDb25maWd1cmF0aW9uOiBFWFRJIGNvbmZpZ3VyYXRpb24gKi8KICAgX19IQUxfUlRDX1RBTVBFUl9USU1FU1RBTVBfRVhUSV9FTkFCTEVfSVQoKTsKLQotICBFWFRJLT5SVFNSIHw9IFJUQ19FWFRJX0xJTkVfVEFNUEVSX1RJTUVTVEFNUF9FVkVOVDsKKyAgX19IQUxfUlRDX1RBTVBFUl9USU1FU1RBTVBfRVhUSV9FTkFCTEVfUklTSU5HX0VER0UoKTsKIAogICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfUkVBRFk7CiAKQEAgLTQyMCwxMCArNTA3LDEyIEBACiAKIC8qKgogICAqIEBicmllZiAgRGVhY3RpdmF0ZXMgVGFtcGVyLgorICAqIEBub3RlICAgVGhlIHRhbXBlciBnbG9iYWwgaW50ZXJydXB0IGJpdCB3aWxsIHJlbWFpbiB1bmNoYW5nZWQuCiAgICogQHBhcmFtICBocnRjIHBvaW50ZXIgdG8gYSBSVENfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwogICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBSVEMuCiAgICogQHBhcmFtICBUYW1wZXIgU2VsZWN0ZWQgdGFtcGVyIHBpbi4KLSAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgUlRDX1RhbXBlcl8xLgorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZToKKyAgKiAgICAgICAgICAgIEBhcmcgUlRDX1RBTVBFUl8xOiAgVGFtcGVyIDEKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9SVENFeF9EZWFjdGl2YXRlVGFtcGVyKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjLCB1aW50MzJfdCBUYW1wZXIpCkBAIC00NDcsNTggKzUzNiw1OSBAQAogfQogCiAvKioKLSAgKiBAYnJpZWYgIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyBUaW1lU3RhbXAgaW50ZXJydXB0IHJlcXVlc3QuCisgICogQGJyaWVmICBIYW5kbGVzIFRpbWVzdGFtcCBhbmQgVGFtcGVyIGludGVycnVwdCByZXF1ZXN0LgogICAqIEBwYXJhbSAgaHJ0YyBwb2ludGVyIHRvIGEgUlRDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKICAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgUlRDLgogICAqIEByZXR2YWwgTm9uZQogICAqLwogdm9pZCBIQUxfUlRDRXhfVGFtcGVyVGltZVN0YW1wSVJRSGFuZGxlcihSVENfSGFuZGxlVHlwZURlZiAqaHJ0YykKIHsKLSAgLyogR2V0IHRoZSBUaW1lU3RhbXAgaW50ZXJydXB0IHNvdXJjZSBlbmFibGUgc3RhdHVzICovCisgIC8qIENsZWFyIHRoZSBFWFRJJ3MgRmxhZyBmb3IgUlRDIFRpbWVzdGFtcCBhbmQgVGFtcGVyICovCisgIF9fSEFMX1JUQ19UQU1QRVJfVElNRVNUQU1QX0VYVElfQ0xFQVJfRkxBRygpOworCisgIC8qIEdldCB0aGUgVGltZXN0YW1wIGludGVycnVwdCBzb3VyY2UgZW5hYmxlIHN0YXR1cyAqLwogICBpZiAoX19IQUxfUlRDX1RJTUVTVEFNUF9HRVRfSVRfU09VUkNFKGhydGMsIFJUQ19JVF9UUykgIT0gMFUpCiAgIHsKLSAgICAvKiBHZXQgdGhlIHBlbmRpbmcgc3RhdHVzIG9mIHRoZSBUSU1FU1RBTVAgSW50ZXJydXB0ICovCisgICAgLyogR2V0IHRoZSBwZW5kaW5nIHN0YXR1cyBvZiB0aGUgVGltZXN0YW1wIEludGVycnVwdCAqLwogICAgIGlmIChfX0hBTF9SVENfVElNRVNUQU1QX0dFVF9GTEFHKGhydGMsIFJUQ19GTEFHX1RTRikgIT0gMFUpCiAgICAgewotICAgICAgLyogVElNRVNUQU1QIGNhbGxiYWNrICovCisgICAgICAvKiBUaW1lc3RhbXAgY2FsbGJhY2sgKi8KICNpZiAoVVNFX0hBTF9SVENfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCiAgICAgICBocnRjLT5UaW1lU3RhbXBFdmVudENhbGxiYWNrKGhydGMpOwogI2Vsc2UKICAgICAgIEhBTF9SVENFeF9UaW1lU3RhbXBFdmVudENhbGxiYWNrKGhydGMpOwogI2VuZGlmIC8qIFVTRV9IQUxfUlRDX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogCi0gICAgICAvKiBDbGVhciB0aGUgVElNRVNUQU1QIGludGVycnVwdCBwZW5kaW5nIGJpdCAqLworICAgICAgLyogQ2xlYXIgdGhlIFRpbWVzdGFtcCBpbnRlcnJ1cHQgcGVuZGluZyBiaXQgYWZ0ZXIgcmV0dXJuaW5nIGZyb20gY2FsbGJhY2sKKyAgICAgICAgIGFzIFJUQ19UU1RSIGFuZCBSVENfVFNEUiByZWdpc3RlcnMgYXJlIGNsZWFyZWQgd2hlbiBUU0YgYml0IGlzIHJlc2V0ICovCiAgICAgICBfX0hBTF9SVENfVElNRVNUQU1QX0NMRUFSX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfVFNGKTsKICAgICB9CiAgIH0KIAotICAvKiBHZXQgdGhlIFRhbXBlciBpbnRlcnJ1cHRzIHNvdXJjZSBlbmFibGUgc3RhdHVzICovCi0gIGlmIChfX0hBTF9SVENfVEFNUEVSX0dFVF9JVF9TT1VSQ0UoaHJ0YywgUlRDX0lUX1RBTVAgfCBSVENfSVRfVEFNUDEpICE9IDBVKQorICAvKiBHZXQgdGhlIFRhbXBlciAxIGludGVycnVwdCBzb3VyY2UgZW5hYmxlIHN0YXR1cyAqLworICBpZiAoX19IQUxfUlRDX1RBTVBFUl9HRVRfSVRfU09VUkNFKGhydGMsIFJUQ19JVF9UQU1QKSAhPSAwVSkKICAgewotICAgIC8qIEdldCB0aGUgcGVuZGluZyBzdGF0dXMgb2YgdGhlIFRhbXBlciBJbnRlcnJ1cHQgKi8KKyAgICAvKiBHZXQgdGhlIHBlbmRpbmcgc3RhdHVzIG9mIHRoZSBUYW1wZXIgMSBJbnRlcnJ1cHQgKi8KICAgICBpZiAoX19IQUxfUlRDX1RBTVBFUl9HRVRfRkxBRyhocnRjLCBSVENfRkxBR19UQU1QMUYpICE9IDBVKQogICAgIHsKKyAgICAgIC8qIENsZWFyIHRoZSBUYW1wZXIgaW50ZXJydXB0IHBlbmRpbmcgYml0ICovCisgICAgICBfX0hBTF9SVENfVEFNUEVSX0NMRUFSX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfVEFNUDFGKTsKKwogICAgICAgLyogVGFtcGVyIGNhbGxiYWNrICovCiAjaWYgKFVTRV9IQUxfUlRDX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQogICAgICAgaHJ0Yy0+VGFtcGVyMUV2ZW50Q2FsbGJhY2soaHJ0Yyk7CiAjZWxzZQogICAgICAgSEFMX1JUQ0V4X1RhbXBlcjFFdmVudENhbGxiYWNrKGhydGMpOwogI2VuZGlmIC8qIFVTRV9IQUxfUlRDX1JFR0lTVEVSX0NBTExCQUNLUyAqLwotCi0gICAgICAvKiBDbGVhciB0aGUgVGFtcGVyIGludGVycnVwdCBwZW5kaW5nIGJpdCAqLwotICAgICAgX19IQUxfUlRDX1RBTVBFUl9DTEVBUl9GTEFHKGhydGMsIFJUQ19GTEFHX1RBTVAxRik7CiAgICAgfQogICB9CiAKLSAgLyogQ2xlYXIgdGhlIEVYVEkncyBGbGFnIGZvciBSVEMgVGltZVN0YW1wIGFuZCBUYW1wZXIgKi8KLSAgX19IQUxfUlRDX1RBTVBFUl9USU1FU1RBTVBfRVhUSV9DTEVBUl9GTEFHKCk7Ci0KICAgLyogQ2hhbmdlIFJUQyBzdGF0ZSAqLwogICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfUkVBRFk7CiB9CiAKIC8qKgotICAqIEBicmllZiAgVGltZVN0YW1wIGNhbGxiYWNrLgorICAqIEBicmllZiAgVGltZXN0YW1wIGNhbGxiYWNrLgogICAqIEBwYXJhbSAgaHJ0YyBwb2ludGVyIHRvIGEgUlRDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKICAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgUlRDLgogICAqIEByZXR2YWwgTm9uZQpAQCAtNTA3LDggKzU5Nyw5IEBACiB7CiAgIC8qIFByZXZlbnQgdW51c2VkIGFyZ3VtZW50KHMpIGNvbXBpbGF0aW9uIHdhcm5pbmcgKi8KICAgVU5VU0VEKGhydGMpOwotICAvKiBOT1RFIDogVGhpcyBmdW5jdGlvbiBTaG91bGQgbm90IGJlIG1vZGlmaWVkLCB3aGVuIHRoZSBjYWxsYmFjayBpcyBuZWVkZWQsCi0gICAgICAgICAgICB0aGUgSEFMX1JUQ19UaW1lU3RhbXBFdmVudENhbGxiYWNrIGNvdWxkIGJlIGltcGxlbWVudGVkIGluIHRoZSB1c2VyIGZpbGUKKworICAvKiBOT1RFOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgbW9kaWZpZWQsIHdoZW4gdGhlIGNhbGxiYWNrIGlzIG5lZWRlZCwKKyAgICAgICAgICAgdGhlIEhBTF9SVENFeF9UaW1lU3RhbXBFdmVudENhbGxiYWNrIGNvdWxkIGJlIGltcGxlbWVudGVkIGluIHRoZSB1c2VyIGZpbGUKICAgKi8KIH0KIApAQCAtNTIyLDEzICs2MTMsMTQgQEAKIHsKICAgLyogUHJldmVudCB1bnVzZWQgYXJndW1lbnQocykgY29tcGlsYXRpb24gd2FybmluZyAqLwogICBVTlVTRUQoaHJ0Yyk7Ci0gIC8qIE5PVEUgOiBUaGlzIGZ1bmN0aW9uIFNob3VsZCBub3QgYmUgbW9kaWZpZWQsIHdoZW4gdGhlIGNhbGxiYWNrIGlzIG5lZWRlZCwKLSAgICAgICAgICAgIHRoZSBIQUxfUlRDX1RhbXBlcjFFdmVudENhbGxiYWNrIGNvdWxkIGJlIGltcGxlbWVudGVkIGluIHRoZSB1c2VyIGZpbGUKKworICAvKiBOT1RFOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgbW9kaWZpZWQsIHdoZW4gdGhlIGNhbGxiYWNrIGlzIG5lZWRlZCwKKyAgICAgICAgICAgdGhlIEhBTF9SVENFeF9UYW1wZXIxRXZlbnRDYWxsYmFjayBjb3VsZCBiZSBpbXBsZW1lbnRlZCBpbiB0aGUgdXNlciBmaWxlCiAgICAqLwogfQogCiAvKioKLSAgKiBAYnJpZWYgIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyBUaW1lU3RhbXAgcG9sbGluZyByZXF1ZXN0LgorICAqIEBicmllZiAgSGFuZGxlcyBUaW1lc3RhbXAgcG9sbGluZyByZXF1ZXN0LgogICAqIEBwYXJhbSAgaHJ0YyBwb2ludGVyIHRvIGEgUlRDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKICAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgUlRDLgogICAqIEBwYXJhbSAgVGltZW91dCBUaW1lb3V0IGR1cmF0aW9uCkBAIC01NDEsMTkgKzYzMyw4IEBACiAgIC8qIEdldCB0aWNrICovCiAgIHRpY2tzdGFydCA9IEhBTF9HZXRUaWNrKCk7CiAKLSAgd2hpbGUgKF9fSEFMX1JUQ19USU1FU1RBTVBfR0VUX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfVFNGKSA9PSBSRVNFVCkKKyAgd2hpbGUgKF9fSEFMX1JUQ19USU1FU1RBTVBfR0VUX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfVFNGKSA9PSAwVSkKICAgewotICAgIGlmIChfX0hBTF9SVENfVElNRVNUQU1QX0dFVF9GTEFHKGhydGMsIFJUQ19GTEFHX1RTT1ZGKSAhPSBSRVNFVCkKLSAgICB7Ci0gICAgICAvKiBDbGVhciB0aGUgVElNRVNUQU1QIE92ZXJydW4gRmxhZyAqLwotICAgICAgX19IQUxfUlRDX1RJTUVTVEFNUF9DTEVBUl9GTEFHKGhydGMsIFJUQ19GTEFHX1RTT1ZGKTsKLQotICAgICAgLyogQ2hhbmdlIFRJTUVTVEFNUCBzdGF0ZSAqLwotICAgICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX0VSUk9SOwotCi0gICAgICByZXR1cm4gSEFMX0VSUk9SOwotICAgIH0KLQogICAgIGlmIChUaW1lb3V0ICE9IEhBTF9NQVhfREVMQVkpCiAgICAgewogICAgICAgaWYgKChUaW1lb3V0ID09IDBVKSB8fCAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gVGltZW91dCkpCkBAIC01NjIsNiArNjQzLDE3IEBACiAgICAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKICAgICAgIH0KICAgICB9CisKKyAgICBpZiAoX19IQUxfUlRDX1RJTUVTVEFNUF9HRVRfRkxBRyhocnRjLCBSVENfRkxBR19UU09WRikgIT0gMFUpCisgICAgeworICAgICAgLyogQ2xlYXIgdGhlIFRpbWVzdGFtcCBPdmVycnVuIEZsYWcgKi8KKyAgICAgIF9fSEFMX1JUQ19USU1FU1RBTVBfQ0xFQVJfRkxBRyhocnRjLCBSVENfRkxBR19UU09WRik7CisKKyAgICAgIC8qIENoYW5nZSBUaW1lc3RhbXAgc3RhdGUgKi8KKyAgICAgIGhydGMtPlN0YXRlID0gSEFMX1JUQ19TVEFURV9FUlJPUjsKKworICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICB9CiAgIH0KIAogICAvKiBDaGFuZ2UgUlRDIHN0YXRlICovCkBAIC01NzEsNyArNjYzLDcgQEAKIH0KIAogLyoqCi0gICogQGJyaWVmICBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgVGFtcGVyMSBQb2xsaW5nLgorICAqIEBicmllZiAgSGFuZGxlcyBUYW1wZXIgMSBQb2xsaW5nLgogICAqIEBwYXJhbSAgaHJ0YyBwb2ludGVyIHRvIGEgUlRDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKICAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgUlRDLgogICAqIEBwYXJhbSAgVGltZW91dCBUaW1lb3V0IGR1cmF0aW9uCkBAIC01ODUsNyArNjc3LDcgQEAKICAgdGlja3N0YXJ0ID0gSEFMX0dldFRpY2soKTsKIAogICAvKiBHZXQgdGhlIHN0YXR1cyBvZiB0aGUgSW50ZXJydXB0ICovCi0gIHdoaWxlIChfX0hBTF9SVENfVEFNUEVSX0dFVF9GTEFHKGhydGMsIFJUQ19GTEFHX1RBTVAxRikgPT0gUkVTRVQpCisgIHdoaWxlIChfX0hBTF9SVENfVEFNUEVSX0dFVF9GTEFHKGhydGMsIFJUQ19GTEFHX1RBTVAxRikgPT0gMFUpCiAgIHsKICAgICBpZiAoVGltZW91dCAhPSBIQUxfTUFYX0RFTEFZKQogICAgIHsKQEAgLTYxMCwyNiArNzAyLDI2IEBACiAgICogQH0KICAgKi8KIAotLyoqIEBkZWZncm91cCBSVENFeF9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAyIFJUQyBXYWtlLXVwIGZ1bmN0aW9ucwotICAqICBAYnJpZWYgICBSVEMgV2FrZS11cCBmdW5jdGlvbnMKKy8qKiBAZGVmZ3JvdXAgUlRDRXhfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMiBSVEMgV2FrZXVwIGZ1bmN0aW9ucworICAqIEBicmllZiAgICBSVEMgV2FrZXVwIGZ1bmN0aW9ucwogICAqCiBAdmVyYmF0aW0KICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICAgICAgICAgICAgICAgICAgICAjIyMjIyBSVEMgV2FrZS11cCBmdW5jdGlvbnMgIyMjIyMKKyAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjIFJUQyBXYWtldXAgZnVuY3Rpb25zICMjIyMjCiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi0gWy4uXSBUaGlzIHNlY3Rpb24gcHJvdmlkZXMgZnVuY3Rpb25zIGFsbG93aW5nIHRvIGNvbmZpZ3VyZSBXYWtlLXVwIGZlYXR1cmUKKyBbLi5dIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBmdW5jdGlvbnMgYWxsb3dpbmcgdG8gY29uZmlndXJlIFdha2V1cCBmZWF0dXJlCiAKIEBlbmR2ZXJiYXRpbQogICAqIEB7CiAgICovCiAKIC8qKgotICAqIEBicmllZiAgU2V0cyB3YWtlIHVwIHRpbWVyLgorICAqIEBicmllZiAgU2V0cyB3YWtldXAgdGltZXIuCiAgICogQHBhcmFtICBocnRjIHBvaW50ZXIgdG8gYSBSVENfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwogICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBSVEMuCi0gICogQHBhcmFtICBXYWtlVXBDb3VudGVyIFdha2UgdXAgY291bnRlcgotICAqIEBwYXJhbSAgV2FrZVVwQ2xvY2sgV2FrZSB1cCBjbG9jaworICAqIEBwYXJhbSAgV2FrZVVwQ291bnRlciBXYWtldXAgY291bnRlcgorICAqIEBwYXJhbSAgV2FrZVVwQ2xvY2sgV2FrZXVwIGNsb2NrCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfUlRDRXhfU2V0V2FrZVVwVGltZXIoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMsIHVpbnQzMl90IFdha2VVcENvdW50ZXIsIHVpbnQzMl90IFdha2VVcENsb2NrKQpAQCAtNjQ4LDEzICs3NDAsMTMgQEAKICAgLyogRGlzYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLwogICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0RJU0FCTEUoaHJ0Yyk7CiAKLSAgLypDaGVjayBSVEMgV1VUV0YgZmxhZyBpcyByZXNldCBvbmx5IHdoZW4gd2FrZSB1cCB0aW1lciBlbmFibGVkKi8KLSAgaWYgKChocnRjLT5JbnN0YW5jZS0+Q1IgJiBSVENfQ1JfV1VURSkgIT0gUkVTRVQpCisgIC8qIENoZWNrIFJUQyBXVVRXRiBmbGFnIGlzIHJlc2V0IG9ubHkgd2hlbiB3YWtldXAgdGltZXIgZW5hYmxlZCovCisgIGlmICgoaHJ0Yy0+SW5zdGFuY2UtPkNSICYgUlRDX0NSX1dVVEUpICE9IDBVKQogICB7CiAgICAgdGlja3N0YXJ0ID0gSEFMX0dldFRpY2soKTsKIAotICAgIC8qIFdhaXQgdGlsbCBSVEMgV1VUV0YgZmxhZyBpcyByZXNldCBhbmQgaWYgVGltZSBvdXQgaXMgcmVhY2hlZCBleGl0ICovCi0gICAgd2hpbGUgKF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9HRVRfRkxBRyhocnRjLCBSVENfRkxBR19XVVRXRikgPT0gU0VUKQorICAgIC8qIFdhaXQgdGlsbCBSVEMgV1VUV0YgZmxhZyBpcyByZXNldCBhbmQgaWYgdGltZW91dCBpcyByZWFjaGVkIGV4aXQgKi8KKyAgICB3aGlsZSAoX19IQUxfUlRDX1dBS0VVUFRJTUVSX0dFVF9GTEFHKGhydGMsIFJUQ19GTEFHX1dVVFdGKSAhPSAwVSkKICAgICB7CiAgICAgICBpZiAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gUlRDX1RJTUVPVVRfVkFMVUUpCiAgICAgICB7CkBAIC02NzEsMTMgKzc2MywxNyBAQAogICAgIH0KICAgfQogCisgIC8qIERpc2FibGUgdGhlIFdha2V1cCB0aW1lciAqLwogICBfX0hBTF9SVENfV0FLRVVQVElNRVJfRElTQUJMRShocnRjKTsKIAorICAvKiBDbGVhciB0aGUgV2FrZXVwIGZsYWcgKi8KKyAgX19IQUxfUlRDX1dBS0VVUFRJTUVSX0NMRUFSX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfV1VURik7CisKICAgLyogR2V0IHRpY2sgKi8KICAgdGlja3N0YXJ0ID0gSEFMX0dldFRpY2soKTsKIAotICAvKiBXYWl0IHRpbGwgUlRDIFdVVFdGIGZsYWcgaXMgc2V0IGFuZCBpZiBUaW1lIG91dCBpcyByZWFjaGVkIGV4aXQgKi8KLSAgd2hpbGUgKF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9HRVRfRkxBRyhocnRjLCBSVENfRkxBR19XVVRXRikgPT0gUkVTRVQpCisgIC8qIFdhaXQgdGlsbCBSVEMgV1VUV0YgZmxhZyBpcyBzZXQgYW5kIGlmIHRpbWVvdXQgaXMgcmVhY2hlZCBleGl0ICovCisgIHdoaWxlIChfX0hBTF9SVENfV0FLRVVQVElNRVJfR0VUX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfV1VUV0YpID09IDBVKQogICB7CiAgICAgaWYgKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+IFJUQ19USU1FT1VUX1ZBTFVFKQogICAgIHsKQEAgLTY5MywxNiArNzg5LDE2IEBACiAgICAgfQogICB9CiAKLSAgLyogQ2xlYXIgdGhlIFdha2UtdXAgVGltZXIgY2xvY2sgc291cmNlIGJpdHMgaW4gQ1IgcmVnaXN0ZXIgKi8KKyAgLyogQ2xlYXIgdGhlIFdha2V1cCBUaW1lciBjbG9jayBzb3VyY2UgYml0cyBpbiBDUiByZWdpc3RlciAqLwogICBocnRjLT5JbnN0YW5jZS0+Q1IgJj0gKHVpbnQzMl90KX5SVENfQ1JfV1VDS1NFTDsKIAogICAvKiBDb25maWd1cmUgdGhlIGNsb2NrIHNvdXJjZSAqLwogICBocnRjLT5JbnN0YW5jZS0+Q1IgfD0gKHVpbnQzMl90KVdha2VVcENsb2NrOwogCi0gIC8qIENvbmZpZ3VyZSB0aGUgV2FrZS11cCBUaW1lciBjb3VudGVyICovCisgIC8qIENvbmZpZ3VyZSB0aGUgV2FrZXVwIFRpbWVyIGNvdW50ZXIgKi8KICAgaHJ0Yy0+SW5zdGFuY2UtPldVVFIgPSAodWludDMyX3QpV2FrZVVwQ291bnRlcjsKIAotICAvKiBFbmFibGUgdGhlIFdha2UtdXAgVGltZXIgKi8KKyAgLyogRW5hYmxlIHRoZSBXYWtldXAgVGltZXIgKi8KICAgX19IQUxfUlRDX1dBS0VVUFRJTUVSX0VOQUJMRShocnRjKTsKIAogICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KQEAgLTcxNywxNiArODEzLDE2IEBACiB9CiAKIC8qKgotICAqIEBicmllZiAgU2V0cyB3YWtlIHVwIHRpbWVyIHdpdGggaW50ZXJydXB0CisgICogQGJyaWVmICBTZXRzIHdha2V1cCB0aW1lciB3aXRoIGludGVycnVwdC4KICAgKiBAcGFyYW0gIGhydGMgcG9pbnRlciB0byBhIFJUQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIFJUQy4KLSAgKiBAcGFyYW0gIFdha2VVcENvdW50ZXIgV2FrZSB1cCBjb3VudGVyCi0gICogQHBhcmFtICBXYWtlVXBDbG9jayBXYWtlIHVwIGNsb2NrCisgICogQHBhcmFtICBXYWtlVXBDb3VudGVyIFdha2V1cCBjb3VudGVyCisgICogQHBhcmFtICBXYWtlVXBDbG9jayBXYWtldXAgY2xvY2sKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9SVENFeF9TZXRXYWtlVXBUaW1lcl9JVChSVENfSGFuZGxlVHlwZURlZiAqaHJ0YywgdWludDMyX3QgV2FrZVVwQ291bnRlciwgdWludDMyX3QgV2FrZVVwQ2xvY2spCiB7Ci0gIF9fSU8gdWludDMyX3QgY291bnQ7CisgIF9fSU8gdWludDMyX3QgY291bnQgID0gUlRDX1RJTUVPVVRfVkFMVUUgKiAoU3lzdGVtQ29yZUNsb2NrIC8gMzJVIC8gMTAwMFUpOwogCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19SVENfV0FLRVVQX0NMT0NLKFdha2VVcENsb2NrKSk7CkBAIC03NDAsMTQgKzgzNiwxNCBAQAogICAvKiBEaXNhYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCiAgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRElTQUJMRShocnRjKTsKIAotICAvKkNoZWNrIFJUQyBXVVRXRiBmbGFnIGlzIHJlc2V0IG9ubHkgd2hlbiB3YWtlIHVwIHRpbWVyIGVuYWJsZWQqLwotICBpZiAoKGhydGMtPkluc3RhbmNlLT5DUiAmIFJUQ19DUl9XVVRFKSAhPSBSRVNFVCkKKyAgLyogQ2hlY2sgUlRDIFdVVFdGIGZsYWcgaXMgcmVzZXQgb25seSB3aGVuIHdha2V1cCB0aW1lciBlbmFibGVkICovCisgIGlmICgoaHJ0Yy0+SW5zdGFuY2UtPkNSICYgUlRDX0NSX1dVVEUpICE9IDBVKQogICB7Ci0gICAgLyogV2FpdCB0aWxsIFJUQyBXVVRXRiBmbGFnIGlzIHJlc2V0IGFuZCBpZiBUaW1lIG91dCBpcyByZWFjaGVkIGV4aXQgKi8KLSAgICBjb3VudCA9IFJUQ19USU1FT1VUX1ZBTFVFICAqIChTeXN0ZW1Db3JlQ2xvY2sgLyAzMlUgLyAxMDAwVSk7CisgICAgLyogV2FpdCB0aWxsIFJUQyBXVVRXRiBmbGFnIGlzIHJlc2V0IGFuZCBpZiB0aW1lb3V0IGlzIHJlYWNoZWQgZXhpdCAqLwogICAgIGRvCiAgICAgewotICAgICAgaWYgKGNvdW50LS0gPT0gMFUpCisgICAgICBjb3VudCA9IGNvdW50IC0gMVU7CisgICAgICBpZiAoY291bnQgPT0gMFUpCiAgICAgICB7CiAgICAgICAgIC8qIEVuYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLwogICAgICAgICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0VOQUJMRShocnRjKTsKQEAgLTc1OSwxNyArODU1LDIzIEBACiAKICAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOwogICAgICAgfQotICAgIH0KLSAgICB3aGlsZSAoX19IQUxfUlRDX1dBS0VVUFRJTUVSX0dFVF9GTEFHKGhydGMsIFJUQ19GTEFHX1dVVFdGKSA9PSBTRVQpOworICAgIH0gd2hpbGUgKF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9HRVRfRkxBRyhocnRjLCBSVENfRkxBR19XVVRXRikgIT0gMFUpOwogICB9CiAKKyAgLyogRGlzYWJsZSB0aGUgV2FrZXVwIHRpbWVyICovCiAgIF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9ESVNBQkxFKGhydGMpOwogCi0gIC8qIFdhaXQgdGlsbCBSVEMgV1VUV0YgZmxhZyBpcyBzZXQgYW5kIGlmIFRpbWUgb3V0IGlzIHJlYWNoZWQgZXhpdCAqLwotICBjb3VudCA9IFJUQ19USU1FT1VUX1ZBTFVFICAqIChTeXN0ZW1Db3JlQ2xvY2sgLyAzMlUgLyAxMDAwVSk7CisgIC8qIENsZWFyIHRoZSBXYWtldXAgZmxhZyAqLworICBfX0hBTF9SVENfV0FLRVVQVElNRVJfQ0xFQVJfRkxBRyhocnRjLCBSVENfRkxBR19XVVRGKTsKKworICAvKiBSZWxvYWQgdGhlIGNvdW50ZXIgKi8KKyAgY291bnQgPSBSVENfVElNRU9VVF9WQUxVRSAqIChTeXN0ZW1Db3JlQ2xvY2sgLyAzMlUgLyAxMDAwVSk7CisKKyAgLyogV2FpdCB0aWxsIFJUQyBXVVRXRiBmbGFnIGlzIHNldCBhbmQgaWYgdGltZW91dCBpcyByZWFjaGVkIGV4aXQgKi8KICAgZG8KICAgewotICAgIGlmIChjb3VudC0tID09IDBVKQorICAgIGNvdW50ID0gY291bnQgLSAxVTsKKyAgICBpZiAoY291bnQgPT0gMFUpCiAgICAgewogICAgICAgLyogRW5hYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCiAgICAgICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0VOQUJMRShocnRjKTsKQEAgLTc4MSwzMCArODgzLDI1IEBACiAKICAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKICAgICB9Ci0gIH0KLSAgd2hpbGUgKF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9HRVRfRkxBRyhocnRjLCBSVENfRkxBR19XVVRXRikgPT0gUkVTRVQpOworICB9IHdoaWxlIChfX0hBTF9SVENfV0FLRVVQVElNRVJfR0VUX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfV1VUV0YpID09IDBVKTsKIAotICAvKiBDb25maWd1cmUgdGhlIFdha2UtdXAgVGltZXIgY291bnRlciAqLwotICBocnRjLT5JbnN0YW5jZS0+V1VUUiA9ICh1aW50MzJfdClXYWtlVXBDb3VudGVyOwotCi0gIC8qIENsZWFyIHRoZSBXYWtlLXVwIFRpbWVyIGNsb2NrIHNvdXJjZSBiaXRzIGluIENSIHJlZ2lzdGVyICovCisgIC8qIENsZWFyIHRoZSBXYWtldXAgVGltZXIgY2xvY2sgc291cmNlIGJpdHMgaW4gQ1IgcmVnaXN0ZXIgKi8KICAgaHJ0Yy0+SW5zdGFuY2UtPkNSICY9ICh1aW50MzJfdCl+UlRDX0NSX1dVQ0tTRUw7CiAKICAgLyogQ29uZmlndXJlIHRoZSBjbG9jayBzb3VyY2UgKi8KICAgaHJ0Yy0+SW5zdGFuY2UtPkNSIHw9ICh1aW50MzJfdClXYWtlVXBDbG9jazsKIAotICAvKiBSVEMgV2FrZVVwVGltZXIgSW50ZXJydXB0IENvbmZpZ3VyYXRpb246IEVYVEkgY29uZmlndXJhdGlvbiAqLworICAvKiBDb25maWd1cmUgdGhlIFdha2V1cCBUaW1lciBjb3VudGVyICovCisgIGhydGMtPkluc3RhbmNlLT5XVVRSID0gKHVpbnQzMl90KVdha2VVcENvdW50ZXI7CisKKyAgLyogUlRDIHdha2V1cCB0aW1lciBJbnRlcnJ1cHQgQ29uZmlndXJhdGlvbjogRVhUSSBjb25maWd1cmF0aW9uICovCiAgIF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9FWFRJX0VOQUJMRV9JVCgpOworICBfX0hBTF9SVENfV0FLRVVQVElNRVJfRVhUSV9FTkFCTEVfUklTSU5HX0VER0UoKTsKIAotICBFWFRJLT5SVFNSIHw9IFJUQ19FWFRJX0xJTkVfV0FLRVVQVElNRVJfRVZFTlQ7Ci0KLSAgLyogQ2xlYXIgUlRDIFdha2UgVXAgdGltZXIgRmxhZyAqLwotICBfX0hBTF9SVENfV0FLRVVQVElNRVJfQ0xFQVJfRkxBRyhocnRjLCBSVENfRkxBR19XVVRGKTsKLQotICAvKiBDb25maWd1cmUgdGhlIEludGVycnVwdCBpbiB0aGUgUlRDX0NSIHJlZ2lzdGVyICovCisgIC8qIENvbmZpZ3VyZSB0aGUgaW50ZXJydXB0IGluIHRoZSBSVENfQ1IgcmVnaXN0ZXIgKi8KICAgX19IQUxfUlRDX1dBS0VVUFRJTUVSX0VOQUJMRV9JVChocnRjLCBSVENfSVRfV1VUKTsKIAotICAvKiBFbmFibGUgdGhlIFdha2UtdXAgVGltZXIgKi8KKyAgLyogRW5hYmxlIHRoZSBXYWtldXAgVGltZXIgKi8KICAgX19IQUxfUlRDX1dBS0VVUFRJTUVSX0VOQUJMRShocnRjKTsKIAogICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KQEAgLTgxOSwxMiArOTE2LDEyIEBACiB9CiAKIC8qKgotICAqIEBicmllZiAgRGVhY3RpdmF0ZXMgd2FrZSB1cCB0aW1lciBjb3VudGVyLgorICAqIEBicmllZiAgRGVhY3RpdmF0ZXMgd2FrZXVwIHRpbWVyIGNvdW50ZXIuCiAgICogQHBhcmFtICBocnRjIHBvaW50ZXIgdG8gYSBSVENfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwogICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBSVEMuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi11aW50MzJfdCBIQUxfUlRDRXhfRGVhY3RpdmF0ZVdha2VVcFRpbWVyKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1JUQ0V4X0RlYWN0aXZhdGVXYWtlVXBUaW1lcihSVENfSGFuZGxlVHlwZURlZiAqaHJ0YykKIHsKICAgdWludDMyX3QgdGlja3N0YXJ0ID0gMFU7CiAKQEAgLTgzNiw3ICs5MzMsNyBAQAogICAvKiBEaXNhYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCiAgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRElTQUJMRShocnRjKTsKIAotICAvKiBEaXNhYmxlIHRoZSBXYWtlLXVwIFRpbWVyICovCisgIC8qIERpc2FibGUgdGhlIFdha2V1cCBUaW1lciAqLwogICBfX0hBTF9SVENfV0FLRVVQVElNRVJfRElTQUJMRShocnRjKTsKIAogICAvKiBJbiBjYXNlIG9mIGludGVycnVwdCBtb2RlIGlzIHVzZWQsIHRoZSBpbnRlcnJ1cHQgc291cmNlIG11c3QgZGlzYWJsZWQgKi8KQEAgLTg0NSw4ICs5NDIsOCBAQAogICAvKiBHZXQgdGljayAqLwogICB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOwogCi0gIC8qIFdhaXQgdGlsbCBSVEMgV1VUV0YgZmxhZyBpcyBzZXQgYW5kIGlmIFRpbWUgb3V0IGlzIHJlYWNoZWQgZXhpdCAqLwotICB3aGlsZSAoX19IQUxfUlRDX1dBS0VVUFRJTUVSX0dFVF9GTEFHKGhydGMsIFJUQ19GTEFHX1dVVFdGKSA9PSBSRVNFVCkKKyAgLyogV2FpdCB0aWxsIFJUQyBXVVRXRiBmbGFnIGlzIHNldCBhbmQgaWYgdGltZW91dCBpcyByZWFjaGVkIGV4aXQgKi8KKyAgd2hpbGUgKF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9HRVRfRkxBRyhocnRjLCBSVENfRkxBR19XVVRXRikgPT0gMFUpCiAgIHsKICAgICBpZiAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gUlRDX1RJTUVPVVRfVkFMVUUpCiAgICAgewpAQCAtODc0LDcgKzk3MSw3IEBACiB9CiAKIC8qKgotICAqIEBicmllZiAgR2V0cyB3YWtlIHVwIHRpbWVyIGNvdW50ZXIuCisgICogQGJyaWVmICBHZXRzIHdha2V1cCB0aW1lciBjb3VudGVyLgogICAqIEBwYXJhbSAgaHJ0YyBwb2ludGVyIHRvIGEgUlRDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKICAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgUlRDLgogICAqIEByZXR2YWwgQ291bnRlciB2YWx1ZQpAQCAtODg2LDQwICs5ODMsNDEgQEAKIH0KIAogLyoqCi0gICogQGJyaWVmICBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgV2FrZSBVcCBUaW1lciBpbnRlcnJ1cHQgcmVxdWVzdC4KKyAgKiBAYnJpZWYgIEhhbmRsZXMgV2FrZXVwIFRpbWVyIGludGVycnVwdCByZXF1ZXN0LgorICAqIEBub3RlICAgVW5saWtlIGFsYXJtIGludGVycnVwdCBsaW5lIChzaGFyZWQgYnkgQWxhcm1zIEEgYW5kIEIpIG9yIHRhbXBlcgorICAqICAgICAgICAgaW50ZXJydXB0IGxpbmUgKHNoYXJlZCBieSB0aW1lc3RhbXAgYW5kIHRhbXBlcnMpIHdha2V1cCB0aW1lcgorICAqICAgICAgICAgaW50ZXJydXB0IGxpbmUgaXMgZXhjbHVzaXZlIHRvIHRoZSB3YWtldXAgdGltZXIuCisgICogICAgICAgICBUaGVyZSBpcyBubyBuZWVkIGluIHRoaXMgY2FzZSB0byBjaGVjayBvbiB0aGUgaW50ZXJydXB0IGVuYWJsZQorICAqICAgICAgICAgc3RhdHVzIHZpYSBfX0hBTF9SVENfV0FLRVVQVElNRVJfR0VUX0lUX1NPVVJDRSgpLgogICAqIEBwYXJhbSAgaHJ0YyBwb2ludGVyIHRvIGEgUlRDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKICAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgUlRDLgogICAqIEByZXR2YWwgTm9uZQogICAqLwogdm9pZCBIQUxfUlRDRXhfV2FrZVVwVGltZXJJUlFIYW5kbGVyKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKQogewotICAvKiBHZXQgdGhlIFdBS0VVUFRJTUVSIGludGVycnVwdCBzb3VyY2UgZW5hYmxlIHN0YXR1cyAqLwotICBpZiAoX19IQUxfUlRDX1dBS0VVUFRJTUVSX0dFVF9JVF9TT1VSQ0UoaHJ0YywgUlRDX0lUX1dVVCkgIT0gUkVTRVQpCi0gIHsKLSAgICAvKiBHZXQgdGhlIHBlbmRpbmcgc3RhdHVzIG9mIHRoZSBXQUtFVVBUSU1FUiBJbnRlcnJ1cHQgKi8KLSAgICBpZihfX0hBTF9SVENfV0FLRVVQVElNRVJfR0VUX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfV1VURikgIT0gUkVTRVQpCi0gICAgewotICAgICAgLyogV0FLRVVQVElNRVIgY2FsbGJhY2sgKi8KLSNpZiAoVVNFX0hBTF9SVENfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCi0gICAgICBocnRjLT5XYWtlVXBUaW1lckV2ZW50Q2FsbGJhY2soaHJ0Yyk7Ci0jZWxzZQotICAgICAgSEFMX1JUQ0V4X1dha2VVcFRpbWVyRXZlbnRDYWxsYmFjayhocnRjKTsKLSNlbmRpZiAvKiBVU0VfSEFMX1JUQ19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KLQotICAgICAgLyogQ2xlYXIgdGhlIFdBS0VVUFRJTUVSIGludGVycnVwdCBwZW5kaW5nIGJpdCAqLwotICAgICAgX19IQUxfUlRDX1dBS0VVUFRJTUVSX0NMRUFSX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfV1VURik7Ci0gICAgfQotICB9Ci0KICAgLyogQ2xlYXIgdGhlIEVYVEkncyBsaW5lIEZsYWcgZm9yIFJUQyBXYWtlVXBUaW1lciAqLwogICBfX0hBTF9SVENfV0FLRVVQVElNRVJfRVhUSV9DTEVBUl9GTEFHKCk7CiAKKyAgLyogR2V0IHRoZSBwZW5kaW5nIHN0YXR1cyBvZiB0aGUgV2FrZXVwIHRpbWVyIEludGVycnVwdCAqLworICBpZiAoX19IQUxfUlRDX1dBS0VVUFRJTUVSX0dFVF9GTEFHKGhydGMsIFJUQ19GTEFHX1dVVEYpICE9IDBVKQorICB7CisgICAgLyogQ2xlYXIgdGhlIFdha2V1cCB0aW1lciBpbnRlcnJ1cHQgcGVuZGluZyBiaXQgKi8KKyAgICBfX0hBTF9SVENfV0FLRVVQVElNRVJfQ0xFQVJfRkxBRyhocnRjLCBSVENfRkxBR19XVVRGKTsKKworICAgIC8qIFdha2V1cCB0aW1lciBjYWxsYmFjayAqLworI2lmIChVU0VfSEFMX1JUQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKKyAgICBocnRjLT5XYWtlVXBUaW1lckV2ZW50Q2FsbGJhY2soaHJ0Yyk7CisjZWxzZQorICAgIEhBTF9SVENFeF9XYWtlVXBUaW1lckV2ZW50Q2FsbGJhY2soaHJ0Yyk7CisjZW5kaWYgLyogVVNFX0hBTF9SVENfUkVHSVNURVJfQ0FMTEJBQ0tTICovCisgIH0KKwogICAvKiBDaGFuZ2UgUlRDIHN0YXRlICovCiAgIGhydGMtPlN0YXRlID0gSEFMX1JUQ19TVEFURV9SRUFEWTsKIH0KIAogLyoqCi0gICogQGJyaWVmICBXYWtlIFVwIFRpbWVyIGNhbGxiYWNrLgorICAqIEBicmllZiAgV2FrZXVwIFRpbWVyIGNhbGxiYWNrLgogICAqIEBwYXJhbSAgaHJ0YyBwb2ludGVyIHRvIGEgUlRDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKICAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgUlRDLgogICAqIEByZXR2YWwgTm9uZQpAQCAtOTI4LDEzICsxMDI2LDE0IEBACiB7CiAgIC8qIFByZXZlbnQgdW51c2VkIGFyZ3VtZW50KHMpIGNvbXBpbGF0aW9uIHdhcm5pbmcgKi8KICAgVU5VU0VEKGhydGMpOwotICAvKiBOT1RFIDogVGhpcyBmdW5jdGlvbiBTaG91bGQgbm90IGJlIG1vZGlmaWVkLCB3aGVuIHRoZSBjYWxsYmFjayBpcyBuZWVkZWQsCi0gICAgICAgICAgICB0aGUgSEFMX1JUQ19XYWtlVXBUaW1lckV2ZW50Q2FsbGJhY2sgY291bGQgYmUgaW1wbGVtZW50ZWQgaW4gdGhlIHVzZXIgZmlsZQorCisgIC8qIE5PVEU6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBtb2RpZmllZCwgd2hlbiB0aGUgY2FsbGJhY2sgaXMgbmVlZGVkLAorICAgICAgICAgICB0aGUgSEFMX1JUQ0V4X1dha2VVcFRpbWVyRXZlbnRDYWxsYmFjayBjb3VsZCBiZSBpbXBsZW1lbnRlZCBpbiB0aGUgdXNlciBmaWxlCiAgICAqLwogfQogCiAvKioKLSAgKiBAYnJpZWYgIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyBXYWtlIFVwIFRpbWVyIFBvbGxpbmcuCisgICogQGJyaWVmICBIYW5kbGVzIFdha2V1cCBUaW1lciBQb2xsaW5nLgogICAqIEBwYXJhbSAgaHJ0YyBwb2ludGVyIHRvIGEgUlRDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKICAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgUlRDLgogICAqIEBwYXJhbSAgVGltZW91dCBUaW1lb3V0IGR1cmF0aW9uCkBAIC05NDcsMjAgKzEwNDYsMTkgQEAKICAgLyogR2V0IHRpY2sgKi8KICAgdGlja3N0YXJ0ID0gSEFMX0dldFRpY2soKTsKIAotICB3aGlsZSAoX19IQUxfUlRDX1dBS0VVUFRJTUVSX0dFVF9GTEFHKGhydGMsIFJUQ19GTEFHX1dVVEYpID09IFJFU0VUKQorICB3aGlsZSAoX19IQUxfUlRDX1dBS0VVUFRJTUVSX0dFVF9GTEFHKGhydGMsIFJUQ19GTEFHX1dVVEYpID09IDBVKQogICB7CiAgICAgaWYgKFRpbWVvdXQgIT0gSEFMX01BWF9ERUxBWSkKICAgICB7CiAgICAgICBpZiAoKFRpbWVvdXQgPT0gMFUpIHx8ICgoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCkgPiBUaW1lb3V0KSkKICAgICAgIHsKICAgICAgICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX1RJTUVPVVQ7Ci0KICAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOwogICAgICAgfQogICAgIH0KICAgfQogCi0gIC8qIENsZWFyIHRoZSBXQUtFVVBUSU1FUiBGbGFnICovCisgIC8qIENsZWFyIHRoZSBXYWtldXAgdGltZXIgRmxhZyAqLwogICBfX0hBTF9SVENfV0FLRVVQVElNRVJfQ0xFQVJfRkxBRyhocnRjLCBSVENfRkxBR19XVVRGKTsKIAogICAvKiBDaGFuZ2UgUlRDIHN0YXRlICovCkBAIC05NzMsMTIgKzEwNzEsMTIgQEAKICAgKiBAfQogICAqLwogCi0vKiogQGRlZmdyb3VwIFJUQ0V4X0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDMgRXh0ZW5zaW9uIFBlcmlwaGVyYWwgQ29udHJvbCBmdW5jdGlvbnMKLSAgKiAgQGJyaWVmICAgRXh0ZW5zaW9uIFBlcmlwaGVyYWwgQ29udHJvbCBmdW5jdGlvbnMKKy8qKiBAZGVmZ3JvdXAgUlRDRXhfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMyBFeHRlbmRlZCBQZXJpcGhlcmFsIENvbnRyb2wgZnVuY3Rpb25zCisgICogQGJyaWVmICAgIEV4dGVuZGVkIFBlcmlwaGVyYWwgQ29udHJvbCBmdW5jdGlvbnMKICAgKgogQHZlcmJhdGltCiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgICAgICAgICAjIyMjIyBFeHRlbnNpb24gUGVyaXBoZXJhbCBDb250cm9sIGZ1bmN0aW9ucyAjIyMjIworICAgICAgICAgICAgICAjIyMjIyBFeHRlbmRlZCBQZXJpcGhlcmFsIENvbnRyb2wgZnVuY3Rpb25zICMjIyMjCiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgIFsuLl0KICAgICBUaGlzIHN1YnNlY3Rpb24gcHJvdmlkZXMgZnVuY3Rpb25zIGFsbG93aW5nIHRvCkBAIC0xMDAxLDggKzEwOTksOCBAQAogICAqIEBwYXJhbSAgaHJ0YyBwb2ludGVyIHRvIGEgUlRDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKICAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgUlRDLgogICAqIEBwYXJhbSAgQmFja3VwUmVnaXN0ZXIgUlRDIEJhY2t1cCBkYXRhIFJlZ2lzdGVyIG51bWJlci4KLSAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6IFJUQ19CS1BfRFJ4IHdoZXJlIHggY2FuIGJlIGZyb20gMCB0byAxOSB0bwotICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmeSB0aGUgcmVnaXN0ZXIuCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOiBSVENfQktQX0RSeCAod2hlcmUgeCBjYW4gYmUgZnJvbSAwIHRvIDE5KQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gc3BlY2lmeSB0aGUgcmVnaXN0ZXIuCiAgICogQHBhcmFtICBEYXRhIERhdGEgdG8gYmUgd3JpdHRlbiBpbiB0aGUgc3BlY2lmaWVkIFJUQyBCYWNrdXAgZGF0YSByZWdpc3Rlci4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KQEAgLTEwMjUsOCArMTEyMyw4IEBACiAgICogQHBhcmFtICBocnRjIHBvaW50ZXIgdG8gYSBSVENfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwogICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBSVEMuCiAgICogQHBhcmFtICBCYWNrdXBSZWdpc3RlciBSVEMgQmFja3VwIGRhdGEgUmVnaXN0ZXIgbnVtYmVyLgotICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogUlRDX0JLUF9EUnggd2hlcmUgeCBjYW4gYmUgZnJvbSAwIHRvIDE5IHRvCi0gICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZ5IHRoZSByZWdpc3Rlci4KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6IFJUQ19CS1BfRFJ4ICh3aGVyZSB4IGNhbiBiZSBmcm9tIDAgdG8gMTkpCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBzcGVjaWZ5IHRoZSByZWdpc3Rlci4KICAgKiBAcmV0dmFsIFJlYWQgdmFsdWUKICAgKi8KIHVpbnQzMl90IEhBTF9SVENFeF9CS1VQUmVhZChSVENfSGFuZGxlVHlwZURlZiAqaHJ0YywgdWludDMyX3QgQmFja3VwUmVnaXN0ZXIpCkBAIC0xMDQ4LDcgKzExNDYsNyBAQAogICAqIEBwYXJhbSAgaHJ0YyBwb2ludGVyIHRvIGEgUlRDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKICAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgUlRDLgogICAqIEBwYXJhbSAgQ2FsaWJTaWduIFNwZWNpZmllcyB0aGUgc2lnbiBvZiB0aGUgY29hcnNlIGNhbGlicmF0aW9uIHZhbHVlLgotICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSAgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzIDoKKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgICAgICBAYXJnIFJUQ19DQUxJQlNJR05fUE9TSVRJVkU6IFRoZSB2YWx1ZSBzaWduIGlzIHBvc2l0aXZlCiAgICogICAgICAgICAgICAgQGFyZyBSVENfQ0FMSUJTSUdOX05FR0FUSVZFOiBUaGUgdmFsdWUgc2lnbiBpcyBuZWdhdGl2ZQogICAqIEBwYXJhbSAgVmFsdWUgdmFsdWUgb2YgY29hcnNlIGNhbGlicmF0aW9uIGV4cHJlc3NlZCBpbiBwcG0gKGNvZGVkIG9uIDUgYml0cykuCkBAIC0xMDYyLDYgKzExNjAsOCBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1JUQ0V4X1NldENvYXJzZUNhbGliKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjLCB1aW50MzJfdCBDYWxpYlNpZ24sIHVpbnQzMl90IFZhbHVlKQogeworICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXM7CisKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19DQUxJQl9TSUdOKENhbGliU2lnbikpOwogICBhc3NlcnRfcGFyYW0oSVNfUlRDX0NBTElCX1ZBTFVFKFZhbHVlKSk7CkBAIC0xMDc0LDIxICsxMTc0LDEwIEBACiAgIC8qIERpc2FibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9ESVNBQkxFKGhydGMpOwogCi0gIC8qIFNldCBJbml0aWFsaXphdGlvbiBtb2RlICovCi0gIGlmIChSVENfRW50ZXJJbml0TW9kZShocnRjKSAhPSBIQUxfT0spCi0gIHsKLSAgICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KLSAgICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0VOQUJMRShocnRjKTsKKyAgLyogRW50ZXIgSW5pdGlhbGl6YXRpb24gbW9kZSAqLworICBzdGF0dXMgPSBSVENfRW50ZXJJbml0TW9kZShocnRjKTsKIAotICAgIC8qIFNldCBSVEMgc3RhdGUqLwotICAgIGhydGMtPlN0YXRlID0gSEFMX1JUQ19TVEFURV9FUlJPUjsKLQotICAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KLSAgICBfX0hBTF9VTkxPQ0soaHJ0Yyk7Ci0KLSAgICByZXR1cm4gSEFMX0VSUk9SOwotICB9Ci0gIGVsc2UKKyAgaWYgKHN0YXR1cyA9PSBIQUxfT0spCiAgIHsKICAgICAvKiBFbmFibGUgdGhlIENvYXJzZSBDYWxpYnJhdGlvbiAqLwogICAgIF9fSEFMX1JUQ19DT0FSU0VfQ0FMSUJfRU5BQkxFKGhydGMpOwpAQCAtMTA5NywxOSArMTE4NiwyMSBAQAogICAgIGhydGMtPkluc3RhbmNlLT5DQUxJQlIgPSAodWludDMyX3QpKENhbGliU2lnbiB8IFZhbHVlKTsKIAogICAgIC8qIEV4aXQgSW5pdGlhbGl6YXRpb24gbW9kZSAqLwotICAgIGhydGMtPkluc3RhbmNlLT5JU1IgJj0gKHVpbnQzMl90KX5SVENfSVNSX0lOSVQ7CisgICAgc3RhdHVzID0gUlRDX0V4aXRJbml0TW9kZShocnRjKTsKKyAgfQorCisgIGlmIChzdGF0dXMgPT0gSEFMX09LKQorICB7CisgICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX1JFQURZOwogICB9CiAKICAgLyogRW5hYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCiAgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRU5BQkxFKGhydGMpOwogCi0gIC8qIENoYW5nZSBzdGF0ZSAqLwotICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfUkVBRFk7Ci0KICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLwogICBfX0hBTF9VTkxPQ0soaHJ0Yyk7CiAKLSAgcmV0dXJuIEhBTF9PSzsKKyAgcmV0dXJuIHN0YXR1czsKIH0KIAogLyoqCkBAIC0xMTIwLDYgKzEyMTEsOCBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1JUQ0V4X0RlYWN0aXZhdGVDb2Fyc2VDYWxpYihSVENfSGFuZGxlVHlwZURlZiAqaHJ0YykKIHsKKyAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzOworCiAgIC8qIFByb2Nlc3MgTG9ja2VkICovCiAgIF9fSEFMX0xPQ0soaHJ0Yyk7CiAKQEAgLTExMjgsNDQgKzEyMjEsMzYgQEAKICAgLyogRGlzYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLwogICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0RJU0FCTEUoaHJ0Yyk7CiAKLSAgLyogU2V0IEluaXRpYWxpemF0aW9uIG1vZGUgKi8KLSAgaWYgKFJUQ19FbnRlckluaXRNb2RlKGhydGMpICE9IEhBTF9PSykKKyAgLyogRW50ZXIgSW5pdGlhbGl6YXRpb24gbW9kZSAqLworICBzdGF0dXMgPSBSVENfRW50ZXJJbml0TW9kZShocnRjKTsKKworICBpZiAoc3RhdHVzID09IEhBTF9PSykKICAgewotICAgIC8qIEVuYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLwotICAgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRU5BQkxFKGhydGMpOwotCi0gICAgLyogU2V0IFJUQyBzdGF0ZSovCi0gICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX0VSUk9SOwotCi0gICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLwotICAgIF9fSEFMX1VOTE9DSyhocnRjKTsKLQotICAgIHJldHVybiBIQUxfRVJST1I7Ci0gIH0KLSAgZWxzZQotICB7Ci0gICAgLyogRW5hYmxlIHRoZSBDb2Fyc2UgQ2FsaWJyYXRpb24gKi8KKyAgICAvKiBEaXNhYmxlIHRoZSBDb2Fyc2UgQ2FsaWJyYXRpb24gKi8KICAgICBfX0hBTF9SVENfQ09BUlNFX0NBTElCX0RJU0FCTEUoaHJ0Yyk7CiAKICAgICAvKiBFeGl0IEluaXRpYWxpemF0aW9uIG1vZGUgKi8KLSAgICBocnRjLT5JbnN0YW5jZS0+SVNSICY9ICh1aW50MzJfdCl+UlRDX0lTUl9JTklUOworICAgIHN0YXR1cyA9IFJUQ19FeGl0SW5pdE1vZGUoaHJ0Yyk7CisgIH0KKworICBpZiAoc3RhdHVzID09IEhBTF9PSykKKyAgeworICAgIGhydGMtPlN0YXRlID0gSEFMX1JUQ19TVEFURV9SRUFEWTsKICAgfQogCiAgIC8qIEVuYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLwogICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0VOQUJMRShocnRjKTsKIAotICAvKiBDaGFuZ2Ugc3RhdGUgKi8KLSAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX1JFQURZOwotCiAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KICAgX19IQUxfVU5MT0NLKGhydGMpOwogCi0gIHJldHVybiBIQUxfT0s7CisgIHJldHVybiBzdGF0dXM7CiB9CiAKIC8qKgotICAqIEBicmllZiAgQ29uZmlndXJlIHRoZSBDYWxpYnJhdGlvbiBQaW5vdXQgKFJUQ19DQUxJQikuCi0gICogQHBhcmFtICBocnRjIFJUQyBoYW5kbGUKKyAgKiBAYnJpZWYgIENvbmZpZ3VyZXMgdGhlIENhbGlicmF0aW9uIFBpbm91dCAoUlRDX0NBTElCKS4KKyAgKiBAcGFyYW0gIGhydGMgcG9pbnRlciB0byBhIFJUQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIFJUQy4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9SVENFeF9TZXRDYWxpYnJhdGlvbk91dFB1dChSVENfSGFuZGxlVHlwZURlZiAqaHJ0YykKQEAgLTEyMzAsNiArMTMxNSw4IEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfUlRDRXhfU2V0UmVmQ2xvY2soUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpCiB7CisgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1czsKKwogICAvKiBQcm9jZXNzIExvY2tlZCAqLwogICBfX0hBTF9MT0NLKGhydGMpOwogCkBAIC0xMjM4LDM4ICsxMzI1LDMwIEBACiAgIC8qIERpc2FibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9ESVNBQkxFKGhydGMpOwogCi0gIC8qIFNldCBJbml0aWFsaXphdGlvbiBtb2RlICovCi0gIGlmIChSVENfRW50ZXJJbml0TW9kZShocnRjKSAhPSBIQUxfT0spCisgIC8qIEVudGVyIEluaXRpYWxpemF0aW9uIG1vZGUgKi8KKyAgc3RhdHVzID0gUlRDX0VudGVySW5pdE1vZGUoaHJ0Yyk7CisKKyAgaWYgKHN0YXR1cyA9PSBIQUxfT0spCiAgIHsKLSAgICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KLSAgICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0VOQUJMRShocnRjKTsKLQotICAgIC8qIFNldCBSVEMgc3RhdGUqLwotICAgIGhydGMtPlN0YXRlID0gSEFMX1JUQ19TVEFURV9FUlJPUjsKLQotICAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KLSAgICBfX0hBTF9VTkxPQ0soaHJ0Yyk7Ci0KLSAgICByZXR1cm4gSEFMX0VSUk9SOwotICB9Ci0gIGVsc2UKLSAgeworICAgIC8qIEVuYWJsZSB0aGUgcmVmZXJlbmNlIGNsb2NrIGRldGVjdGlvbiAqLwogICAgIF9fSEFMX1JUQ19DTE9DS1JFRl9ERVRFQ1RJT05fRU5BQkxFKGhydGMpOwogCiAgICAgLyogRXhpdCBJbml0aWFsaXphdGlvbiBtb2RlICovCi0gICAgaHJ0Yy0+SW5zdGFuY2UtPklTUiAmPSAodWludDMyX3QpflJUQ19JU1JfSU5JVDsKKyAgICBzdGF0dXMgPSBSVENfRXhpdEluaXRNb2RlKGhydGMpOworICB9CisKKyAgaWYgKHN0YXR1cyA9PSBIQUxfT0spCisgIHsKKyAgICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfUkVBRFk7CiAgIH0KIAogICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7CiAKLSAgLyogQ2hhbmdlIFJUQyBzdGF0ZSAqLwotICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfUkVBRFk7Ci0KICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLwogICBfX0hBTF9VTkxPQ0soaHJ0Yyk7CiAKLSAgcmV0dXJuIEhBTF9PSzsKKyAgcmV0dXJuIHN0YXR1czsKIH0KIAogLyoqCkBAIC0xMjgwLDYgKzEzNTksOCBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1JUQ0V4X0RlYWN0aXZhdGVSZWZDbG9jayhSVENfSGFuZGxlVHlwZURlZiAqaHJ0YykKIHsKKyAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzOworCiAgIC8qIFByb2Nlc3MgTG9ja2VkICovCiAgIF9fSEFMX0xPQ0soaHJ0Yyk7CiAKQEAgLTEyODgsMzggKzEzNjksMzAgQEAKICAgLyogRGlzYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLwogICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0RJU0FCTEUoaHJ0Yyk7CiAKLSAgLyogU2V0IEluaXRpYWxpemF0aW9uIG1vZGUgKi8KLSAgaWYgKFJUQ19FbnRlckluaXRNb2RlKGhydGMpICE9IEhBTF9PSykKKyAgLyogRW50ZXIgSW5pdGlhbGl6YXRpb24gbW9kZSAqLworICBzdGF0dXMgPSBSVENfRW50ZXJJbml0TW9kZShocnRjKTsKKworICBpZiAoc3RhdHVzID09IEhBTF9PSykKICAgewotICAgIC8qIEVuYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLwotICAgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRU5BQkxFKGhydGMpOwotCi0gICAgLyogU2V0IFJUQyBzdGF0ZSovCi0gICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX0VSUk9SOwotCi0gICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLwotICAgIF9fSEFMX1VOTE9DSyhocnRjKTsKLQotICAgIHJldHVybiBIQUxfRVJST1I7Ci0gIH0KLSAgZWxzZQotICB7CisgICAgLyogRGlzYWJsZSB0aGUgcmVmZXJlbmNlIGNsb2NrIGRldGVjdGlvbiAqLwogICAgIF9fSEFMX1JUQ19DTE9DS1JFRl9ERVRFQ1RJT05fRElTQUJMRShocnRjKTsKIAogICAgIC8qIEV4aXQgSW5pdGlhbGl6YXRpb24gbW9kZSAqLwotICAgIGhydGMtPkluc3RhbmNlLT5JU1IgJj0gKHVpbnQzMl90KX5SVENfSVNSX0lOSVQ7CisgICAgc3RhdHVzID0gUlRDX0V4aXRJbml0TW9kZShocnRjKTsKKyAgfQorCisgIGlmIChzdGF0dXMgPT0gSEFMX09LKQorICB7CisgICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX1JFQURZOwogICB9CiAKICAgLyogRW5hYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCiAgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRU5BQkxFKGhydGMpOwogCi0gIC8qIENoYW5nZSBSVEMgc3RhdGUgKi8KLSAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX1JFQURZOwotCiAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KICAgX19IQUxfVU5MT0NLKGhydGMpOwogCi0gIHJldHVybiBIQUxfT0s7CisgIHJldHVybiBzdGF0dXM7CiB9CiAKIC8qKgpAQCAtMTMyNyw3ICsxNDAwLDcgQEAKICAgKi8KIAogLyoqIEBkZWZncm91cCBSVENFeF9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXA0IEV4dGVuZGVkIGZlYXR1cmVzIGZ1bmN0aW9ucwotICAqICBAYnJpZWYgICAgRXh0ZW5kZWQgZmVhdHVyZXMgZnVuY3Rpb25zCisgICogQGJyaWVmICAgIEV4dGVuZGVkIGZlYXR1cmVzIGZ1bmN0aW9ucwogICAqCiBAdmVyYmF0aW0KICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0xMzUxLDEzICsxNDI0LDE0IEBACiB7CiAgIC8qIFByZXZlbnQgdW51c2VkIGFyZ3VtZW50KHMpIGNvbXBpbGF0aW9uIHdhcm5pbmcgKi8KICAgVU5VU0VEKGhydGMpOwotICAvKiBOT1RFIDogVGhpcyBmdW5jdGlvbiBTaG91bGQgbm90IGJlIG1vZGlmaWVkLCB3aGVuIHRoZSBjYWxsYmFjayBpcyBuZWVkZWQsCi0gICAgICAgICAgICB0aGUgSEFMX1JUQ19BbGFybUJFdmVudENhbGxiYWNrIGNvdWxkIGJlIGltcGxlbWVudGVkIGluIHRoZSB1c2VyIGZpbGUKKworICAvKiBOT1RFOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgbW9kaWZpZWQsIHdoZW4gdGhlIGNhbGxiYWNrIGlzIG5lZWRlZCwKKyAgICAgICAgICAgdGhlIEhBTF9SVENFeF9BbGFybUJFdmVudENhbGxiYWNrIGNvdWxkIGJlIGltcGxlbWVudGVkIGluIHRoZSB1c2VyIGZpbGUKICAgICovCiB9CiAKIC8qKgotICAqIEBicmllZiAgVGhpcyBmdW5jdGlvbiBoYW5kbGVzIEFsYXJtQiBQb2xsaW5nIHJlcXVlc3QuCisgICogQGJyaWVmICBIYW5kbGVzIEFsYXJtIEIgUG9sbGluZyByZXF1ZXN0LgogICAqIEBwYXJhbSAgaHJ0YyBwb2ludGVyIHRvIGEgUlRDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKICAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgUlRDLgogICAqIEBwYXJhbSAgVGltZW91dCBUaW1lb3V0IGR1cmF0aW9uCkBAIC0xMzcwLDcgKzE0NDQsOCBAQAogICAvKiBHZXQgdGljayAqLwogICB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOwogCi0gIHdoaWxlIChfX0hBTF9SVENfQUxBUk1fR0VUX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfQUxSQkYpID09IFJFU0VUKQorICAvKiBXYWl0IHRpbGwgUlRDIEFMUkJGIGZsYWcgaXMgc2V0IGFuZCBpZiB0aW1lb3V0IGlzIHJlYWNoZWQgZXhpdCAqLworICB3aGlsZSAoX19IQUxfUlRDX0FMQVJNX0dFVF9GTEFHKGhydGMsIFJUQ19GTEFHX0FMUkJGKSA9PSAwVSkKICAgewogICAgIGlmIChUaW1lb3V0ICE9IEhBTF9NQVhfREVMQVkpCiAgICAgewpAQCAtMTM4Miw3ICsxNDU3LDcgQEAKICAgICB9CiAgIH0KIAotICAvKiBDbGVhciB0aGUgQWxhcm0gRmxhZyAqLworICAvKiBDbGVhciB0aGUgQWxhcm0gZmxhZyAqLwogICBfX0hBTF9SVENfQUxBUk1fQ0xFQVJfRkxBRyhocnRjLCBSVENfRkxBR19BTFJCRik7CiAKICAgLyogQ2hhbmdlIFJUQyBzdGF0ZSAqLwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjJ4eF9oYWxfc2QuYyBiL1NyYy9zdG0zMmYyeHhfaGFsX3NkLmMKaW5kZXggYTlhZmVjMy4uNDJmYzA0YiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjJ4eF9oYWxfc2QuYworKysgYi9TcmMvc3RtMzJmMnh4X2hhbF9zZC5jCkBAIC0xMyw3ICsxMyw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIENvcHlyaWdodCAoYykgMjAxOCBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogQ29weXJpZ2h0IChjKSAyMDE2IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlCkBAIC0yMTAsNyArMjEwLDcgQEAKICAgICBUaGUgY29tcGlsYXRpb24gZGVmaW5lIFVTRV9IQUxfU0RfUkVHSVNURVJfQ0FMTEJBQ0tTIHdoZW4gc2V0IHRvIDEKICAgICBhbGxvd3MgdGhlIHVzZXIgdG8gY29uZmlndXJlIGR5bmFtaWNhbGx5IHRoZSBkcml2ZXIgY2FsbGJhY2tzLgogCi0gICAgVXNlIEZ1bmN0aW9ucyBAcmVmIEhBTF9TRF9SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVnaXN0ZXIgYSB1c2VyIGNhbGxiYWNrLAorICAgIFVzZSBGdW5jdGlvbnMgSEFMX1NEX1JlZ2lzdGVyQ2FsbGJhY2soKSB0byByZWdpc3RlciBhIHVzZXIgY2FsbGJhY2ssCiAgICAgaXQgYWxsb3dzIHRvIHJlZ2lzdGVyIGZvbGxvd2luZyBjYWxsYmFja3M6CiAgICAgICAoKykgVHhDcGx0Q2FsbGJhY2sgOiBjYWxsYmFjayB3aGVuIGEgdHJhbnNtaXNzaW9uIHRyYW5zZmVyIGlzIGNvbXBsZXRlZC4KICAgICAgICgrKSBSeENwbHRDYWxsYmFjayA6IGNhbGxiYWNrIHdoZW4gYSByZWNlcHRpb24gdHJhbnNmZXIgaXMgY29tcGxldGVkLgpAQCAtMjIxLDcgKzIyMSw3IEBACiAgICAgVGhpcyBmdW5jdGlvbiB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsIHRoZSBDYWxsYmFjayBJRAogICAgIGFuZCBhIHBvaW50ZXIgdG8gdGhlIHVzZXIgY2FsbGJhY2sgZnVuY3Rpb24uCiAKLSAgICBVc2UgZnVuY3Rpb24gQHJlZiBIQUxfU0RfVW5SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVzZXQgYSBjYWxsYmFjayB0byB0aGUgZGVmYXVsdAorICAgIFVzZSBmdW5jdGlvbiBIQUxfU0RfVW5SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVzZXQgYSBjYWxsYmFjayB0byB0aGUgZGVmYXVsdAogICAgIHdlYWsgKHN1cmNoYXJnZWQpIGZ1bmN0aW9uLiBJdCBhbGxvd3MgdG8gcmVzZXQgZm9sbG93aW5nIGNhbGxiYWNrczoKICAgICAgICgrKSBUeENwbHRDYWxsYmFjayA6IGNhbGxiYWNrIHdoZW4gYSB0cmFuc21pc3Npb24gdHJhbnNmZXIgaXMgY29tcGxldGVkLgogICAgICAgKCspIFJ4Q3BsdENhbGxiYWNrIDogY2FsbGJhY2sgd2hlbiBhIHJlY2VwdGlvbiB0cmFuc2ZlciBpcyBjb21wbGV0ZWQuCkBAIC0yMzEsMTIgKzIzMSwxMiBAQAogICAgICAgKCspIE1zcERlSW5pdENhbGxiYWNrICA6IFNEIE1zcERlSW5pdC4KICAgICBUaGlzIGZ1bmN0aW9uKSB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUgYW5kIHRoZSBDYWxsYmFjayBJRC4KIAotICAgIEJ5IGRlZmF1bHQsIGFmdGVyIHRoZSBAcmVmIEhBTF9TRF9Jbml0IGFuZCBpZiB0aGUgc3RhdGUgaXMgSEFMX1NEX1NUQVRFX1JFU0VUCisgICAgQnkgZGVmYXVsdCwgYWZ0ZXIgdGhlIEhBTF9TRF9Jbml0IGFuZCBpZiB0aGUgc3RhdGUgaXMgSEFMX1NEX1NUQVRFX1JFU0VUCiAgICAgYWxsIGNhbGxiYWNrcyBhcmUgcmVzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgbGVnYWN5IHdlYWsgKHN1cmNoYXJnZWQpIGZ1bmN0aW9ucy4KICAgICBFeGNlcHRpb24gZG9uZSBmb3IgTXNwSW5pdCBhbmQgTXNwRGVJbml0IGNhbGxiYWNrcyB0aGF0IGFyZSByZXNwZWN0aXZlbHkKLSAgICByZXNldCB0byB0aGUgbGVnYWN5IHdlYWsgKHN1cmNoYXJnZWQpIGZ1bmN0aW9ucyBpbiB0aGUgQHJlZiBIQUxfU0RfSW5pdAotICAgIGFuZCBAcmVmICBIQUxfU0RfRGVJbml0IG9ubHkgd2hlbiB0aGVzZSBjYWxsYmFja3MgYXJlIG51bGwgKG5vdCByZWdpc3RlcmVkIGJlZm9yZWhhbmQpLgotICAgIElmIG5vdCwgTXNwSW5pdCBvciBNc3BEZUluaXQgYXJlIG5vdCBudWxsLCB0aGUgQHJlZiBIQUxfU0RfSW5pdCBhbmQgQHJlZiBIQUxfU0RfRGVJbml0CisgICAgcmVzZXQgdG8gdGhlIGxlZ2FjeSB3ZWFrIChzdXJjaGFyZ2VkKSBmdW5jdGlvbnMgaW4gdGhlIEhBTF9TRF9Jbml0CisgICAgYW5kICBIQUxfU0RfRGVJbml0IG9ubHkgd2hlbiB0aGVzZSBjYWxsYmFja3MgYXJlIG51bGwgKG5vdCByZWdpc3RlcmVkIGJlZm9yZWhhbmQpLgorICAgIElmIG5vdCwgTXNwSW5pdCBvciBNc3BEZUluaXQgYXJlIG5vdCBudWxsLCB0aGUgSEFMX1NEX0luaXQgYW5kIEhBTF9TRF9EZUluaXQKICAgICBrZWVwIGFuZCB1c2UgdGhlIHVzZXIgTXNwSW5pdC9Nc3BEZUluaXQgY2FsbGJhY2tzIChyZWdpc3RlcmVkIGJlZm9yZWhhbmQpCiAKICAgICBDYWxsYmFja3MgY2FuIGJlIHJlZ2lzdGVyZWQvdW5yZWdpc3RlcmVkIGluIFJFQURZIHN0YXRlIG9ubHkuCkBAIC0yNDQsOCArMjQ0LDggQEAKICAgICBpbiBSRUFEWSBvciBSRVNFVCBzdGF0ZSwgdGh1cyByZWdpc3RlcmVkICh1c2VyKSBNc3BJbml0L0RlSW5pdCBjYWxsYmFja3MgY2FuIGJlIHVzZWQKICAgICBkdXJpbmcgdGhlIEluaXQvRGVJbml0LgogICAgIEluIHRoYXQgY2FzZSBmaXJzdCByZWdpc3RlciB0aGUgTXNwSW5pdC9Nc3BEZUluaXQgdXNlciBjYWxsYmFja3MKLSAgICB1c2luZyBAcmVmIEhBTF9TRF9SZWdpc3RlckNhbGxiYWNrIGJlZm9yZSBjYWxsaW5nIEByZWYgSEFMX1NEX0RlSW5pdAotICAgIG9yIEByZWYgSEFMX1NEX0luaXQgZnVuY3Rpb24uCisgICAgdXNpbmcgSEFMX1NEX1JlZ2lzdGVyQ2FsbGJhY2sgYmVmb3JlIGNhbGxpbmcgSEFMX1NEX0RlSW5pdAorICAgIG9yIEhBTF9TRF9Jbml0IGZ1bmN0aW9uLgogCiAgICAgV2hlbiBUaGUgY29tcGlsYXRpb24gZGVmaW5lIFVTRV9IQUxfU0RfUkVHSVNURVJfQ0FMTEJBQ0tTIGlzIHNldCB0byAwIG9yCiAgICAgbm90IGRlZmluZWQsIHRoZSBjYWxsYmFjayByZWdpc3RlcmluZyBmZWF0dXJlIGlzIG5vdCBhdmFpbGFibGUKQEAgLTQzMCw2ICs0MzAsOSBAQAogICAvKiBFbmFibGUgU0RJTyBDbG9jayAqLwogICBfX0hBTF9TRF9FTkFCTEUoaHNkKTsKIAorICAvKiBSZXF1aXJlZCBwb3dlciB1cCB3YWl0aW5nIHRpbWUgYmVmb3JlIHN0YXJ0aW5nIHRoZSBTRCBpbml0aWFsaXphdGlvbiAgc2VxdWVuY2UgKi8KKyAgSEFMX0RlbGF5KDIpOworCiAgIC8qIElkZW50aWZ5IGNhcmQgb3BlcmF0aW5nIHZvbHRhZ2UgKi8KICAgZXJyb3JzdGF0ZSA9IFNEX1Bvd2VyT04oaHNkKTsKICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfU0RfRVJST1JfTk9ORSkKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmYyeHhfaGFsX3NtYXJ0Y2FyZC5jIGIvU3JjL3N0bTMyZjJ4eF9oYWxfc21hcnRjYXJkLmMKaW5kZXggZTRlMjFlZS4uOTRlODIyYSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjJ4eF9oYWxfc21hcnRjYXJkLmMKKysrIGIvU3JjL3N0bTMyZjJ4eF9oYWxfc21hcnRjYXJkLmMKQEAgLTExNiw4ICsxMTYsOCBAQAogICAgIGFsbG93cyB0aGUgdXNlciB0byBjb25maWd1cmUgZHluYW1pY2FsbHkgdGhlIGRyaXZlciBjYWxsYmFja3MuCiAKICAgICBbLi5dCi0gICAgVXNlIEZ1bmN0aW9uIEByZWYgSEFMX1NNQVJUQ0FSRF9SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVnaXN0ZXIgYSB1c2VyIGNhbGxiYWNrLgotICAgIEZ1bmN0aW9uIEByZWYgSEFMX1NNQVJUQ0FSRF9SZWdpc3RlckNhbGxiYWNrKCkgYWxsb3dzIHRvIHJlZ2lzdGVyIGZvbGxvd2luZyBjYWxsYmFja3M6CisgICAgVXNlIEZ1bmN0aW9uIEhBTF9TTUFSVENBUkRfUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlZ2lzdGVyIGEgdXNlciBjYWxsYmFjay4KKyAgICBGdW5jdGlvbiBIQUxfU01BUlRDQVJEX1JlZ2lzdGVyQ2FsbGJhY2soKSBhbGxvd3MgdG8gcmVnaXN0ZXIgZm9sbG93aW5nIGNhbGxiYWNrczoKICAgICAoKykgVHhDcGx0Q2FsbGJhY2sgICAgICAgICAgICA6IFR4IENvbXBsZXRlIENhbGxiYWNrLgogICAgICgrKSBSeENwbHRDYWxsYmFjayAgICAgICAgICAgIDogUnggQ29tcGxldGUgQ2FsbGJhY2suCiAgICAgKCspIEVycm9yQ2FsbGJhY2sgICAgICAgICAgICAgOiBFcnJvciBDYWxsYmFjay4KQEAgLTEzMCw5ICsxMzAsOSBAQAogICAgIGFuZCBhIHBvaW50ZXIgdG8gdGhlIHVzZXIgY2FsbGJhY2sgZnVuY3Rpb24uCiAKICAgICBbLi5dCi0gICAgVXNlIGZ1bmN0aW9uIEByZWYgSEFMX1NNQVJUQ0FSRF9VblJlZ2lzdGVyQ2FsbGJhY2soKSB0byByZXNldCBhIGNhbGxiYWNrIHRvIHRoZSBkZWZhdWx0CisgICAgVXNlIGZ1bmN0aW9uIEhBTF9TTUFSVENBUkRfVW5SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVzZXQgYSBjYWxsYmFjayB0byB0aGUgZGVmYXVsdAogICAgIHdlYWsgKHN1cmNoYXJnZWQpIGZ1bmN0aW9uLgotICAgIEByZWYgSEFMX1NNQVJUQ0FSRF9VblJlZ2lzdGVyQ2FsbGJhY2soKSB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsCisgICAgSEFMX1NNQVJUQ0FSRF9VblJlZ2lzdGVyQ2FsbGJhY2soKSB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsCiAgICAgYW5kIHRoZSBDYWxsYmFjayBJRC4KICAgICBUaGlzIGZ1bmN0aW9uIGFsbG93cyB0byByZXNldCBmb2xsb3dpbmcgY2FsbGJhY2tzOgogICAgICgrKSBUeENwbHRDYWxsYmFjayAgICAgICAgICAgIDogVHggQ29tcGxldGUgQ2FsbGJhY2suCkBAIC0xNDUsMTMgKzE0NSwxMyBAQAogICAgICgrKSBNc3BEZUluaXRDYWxsYmFjayAgICAgICAgIDogU01BUlRDQVJEIE1zcERlSW5pdC4KIAogICAgIFsuLl0KLSAgICBCeSBkZWZhdWx0LCBhZnRlciB0aGUgQHJlZiBIQUxfU01BUlRDQVJEX0luaXQoKSBhbmQgd2hlbiB0aGUgc3RhdGUgaXMgSEFMX1NNQVJUQ0FSRF9TVEFURV9SRVNFVAorICAgIEJ5IGRlZmF1bHQsIGFmdGVyIHRoZSBIQUxfU01BUlRDQVJEX0luaXQoKSBhbmQgd2hlbiB0aGUgc3RhdGUgaXMgSEFMX1NNQVJUQ0FSRF9TVEFURV9SRVNFVAogICAgIGFsbCBjYWxsYmFja3MgYXJlIHNldCB0byB0aGUgY29ycmVzcG9uZGluZyB3ZWFrIChzdXJjaGFyZ2VkKSBmdW5jdGlvbnM6Ci0gICAgZXhhbXBsZXMgQHJlZiBIQUxfU01BUlRDQVJEX1R4Q3BsdENhbGxiYWNrKCksIEByZWYgSEFMX1NNQVJUQ0FSRF9SeENwbHRDYWxsYmFjaygpLgorICAgIGV4YW1wbGVzIEhBTF9TTUFSVENBUkRfVHhDcGx0Q2FsbGJhY2soKSwgSEFMX1NNQVJUQ0FSRF9SeENwbHRDYWxsYmFjaygpLgogICAgIEV4Y2VwdGlvbiBkb25lIGZvciBNc3BJbml0IGFuZCBNc3BEZUluaXQgZnVuY3Rpb25zIHRoYXQgYXJlIHJlc3BlY3RpdmVseQotICAgIHJlc2V0IHRvIHRoZSBsZWdhY3kgd2VhayAoc3VyY2hhcmdlZCkgZnVuY3Rpb25zIGluIHRoZSBAcmVmIEhBTF9TTUFSVENBUkRfSW5pdCgpCi0gICAgYW5kIEByZWYgSEFMX1NNQVJUQ0FSRF9EZUluaXQoKSBvbmx5IHdoZW4gdGhlc2UgY2FsbGJhY2tzIGFyZSBudWxsIChub3QgcmVnaXN0ZXJlZCBiZWZvcmVoYW5kKS4KLSAgICBJZiBub3QsIE1zcEluaXQgb3IgTXNwRGVJbml0IGFyZSBub3QgbnVsbCwgdGhlIEByZWYgSEFMX1NNQVJUQ0FSRF9Jbml0KCkgYW5kIEByZWYgSEFMX1NNQVJUQ0FSRF9EZUluaXQoKQorICAgIHJlc2V0IHRvIHRoZSBsZWdhY3kgd2VhayAoc3VyY2hhcmdlZCkgZnVuY3Rpb25zIGluIHRoZSBIQUxfU01BUlRDQVJEX0luaXQoKQorICAgIGFuZCBIQUxfU01BUlRDQVJEX0RlSW5pdCgpIG9ubHkgd2hlbiB0aGVzZSBjYWxsYmFja3MgYXJlIG51bGwgKG5vdCByZWdpc3RlcmVkIGJlZm9yZWhhbmQpLgorICAgIElmIG5vdCwgTXNwSW5pdCBvciBNc3BEZUluaXQgYXJlIG5vdCBudWxsLCB0aGUgSEFMX1NNQVJUQ0FSRF9Jbml0KCkgYW5kIEhBTF9TTUFSVENBUkRfRGVJbml0KCkKICAgICBrZWVwIGFuZCB1c2UgdGhlIHVzZXIgTXNwSW5pdC9Nc3BEZUluaXQgY2FsbGJhY2tzIChyZWdpc3RlcmVkIGJlZm9yZWhhbmQpLgogCiAgICAgWy4uXQpAQCAtMTYwLDggKzE2MCw4IEBACiAgICAgaW4gSEFMX1NNQVJUQ0FSRF9TVEFURV9SRUFEWSBvciBIQUxfU01BUlRDQVJEX1NUQVRFX1JFU0VUIHN0YXRlLCB0aHVzIHJlZ2lzdGVyZWQgKHVzZXIpCiAgICAgTXNwSW5pdC9EZUluaXQgY2FsbGJhY2tzIGNhbiBiZSB1c2VkIGR1cmluZyB0aGUgSW5pdC9EZUluaXQuCiAgICAgSW4gdGhhdCBjYXNlIGZpcnN0IHJlZ2lzdGVyIHRoZSBNc3BJbml0L01zcERlSW5pdCB1c2VyIGNhbGxiYWNrcwotICAgIHVzaW5nIEByZWYgSEFMX1NNQVJUQ0FSRF9SZWdpc3RlckNhbGxiYWNrKCkgYmVmb3JlIGNhbGxpbmcgQHJlZiBIQUxfU01BUlRDQVJEX0RlSW5pdCgpCi0gICAgb3IgQHJlZiBIQUxfU01BUlRDQVJEX0luaXQoKSBmdW5jdGlvbi4KKyAgICB1c2luZyBIQUxfU01BUlRDQVJEX1JlZ2lzdGVyQ2FsbGJhY2soKSBiZWZvcmUgY2FsbGluZyBIQUxfU01BUlRDQVJEX0RlSW5pdCgpCisgICAgb3IgSEFMX1NNQVJUQ0FSRF9Jbml0KCkgZnVuY3Rpb24uCiAKICAgICBbLi5dCiAgICAgV2hlbiBUaGUgY29tcGlsYXRpb24gZGVmaW5lIFVTRV9IQUxfU01BUlRDQVJEX1JFR0lTVEVSX0NBTExCQUNLUyBpcyBzZXQgdG8gMCBvcgpAQCAtNDQ1LDYgKzQ0NSw5IEBACiAvKioKICAgKiBAYnJpZWYgIFJlZ2lzdGVyIGEgVXNlciBTTUFSVENBUkQgQ2FsbGJhY2sKICAgKiAgICAgICAgIFRvIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgd2VhayBwcmVkZWZpbmVkIGNhbGxiYWNrCisgICogQG5vdGUgICBUaGUgSEFMX1NNQVJUQ0FSRF9SZWdpc3RlckNhbGxiYWNrKCkgbWF5IGJlIGNhbGxlZCBiZWZvcmUgSEFMX1NNQVJUQ0FSRF9Jbml0KCkKKyAgKiAgICAgICAgIGluIEhBTF9TTUFSVENBUkRfU1RBVEVfUkVTRVQgdG8gcmVnaXN0ZXIgY2FsbGJhY2tzIGZvciBIQUxfU01BUlRDQVJEX01TUElOSVRfQ0JfSUQKKyAgKiAgICAgICAgIGFuZCBIQUxfU01BUlRDQVJEX01TUERFSU5JVF9DQl9JRAogICAqIEBwYXJhbSAgaHNjIHNtYXJ0Y2FyZCBoYW5kbGUKICAgKiBAcGFyYW0gIENhbGxiYWNrSUQgSUQgb2YgdGhlIGNhbGxiYWNrIHRvIGJlIHJlZ2lzdGVyZWQKICAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CkBAIC00NzAsOCArNDczLDYgQEAKIAogICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KLSAgLyogUHJvY2VzcyBsb2NrZWQgKi8KLSAgX19IQUxfTE9DSyhoc2MpOwogCiAgIGlmIChoc2MtPmdTdGF0ZSA9PSBIQUxfU01BUlRDQVJEX1NUQVRFX1JFQURZKQogICB7CkBAIC01NTAsMTUgKzU1MSwxNSBAQAogICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7CiAgIH0KIAotICAvKiBSZWxlYXNlIExvY2sgKi8KLSAgX19IQUxfVU5MT0NLKGhzYyk7Ci0KICAgcmV0dXJuIHN0YXR1czsKIH0KIAogLyoqCiAgICogQGJyaWVmICBVbnJlZ2lzdGVyIGFuIFNNQVJUQ0FSRCBjYWxsYmFjawogICAqICAgICAgICAgU01BUlRDQVJEIGNhbGxiYWNrIGlzIHJlZGlyZWN0ZWQgdG8gdGhlIHdlYWsgcHJlZGVmaW5lZCBjYWxsYmFjaworICAqIEBub3RlICAgVGhlIEhBTF9TTUFSVENBUkRfVW5SZWdpc3RlckNhbGxiYWNrKCkgbWF5IGJlIGNhbGxlZCBiZWZvcmUgSEFMX1NNQVJUQ0FSRF9Jbml0KCkKKyAgKiAgICAgICAgIGluIEhBTF9TTUFSVENBUkRfU1RBVEVfUkVTRVQgdG8gdW4tcmVnaXN0ZXIgY2FsbGJhY2tzIGZvciBIQUxfU01BUlRDQVJEX01TUElOSVRfQ0JfSUQKKyAgKiAgICAgICAgIGFuZCBIQUxfU01BUlRDQVJEX01TUERFSU5JVF9DQl9JRAogICAqIEBwYXJhbSAgaHNjIHNtYXJ0Y2FyZCBoYW5kbGUKICAgKiBAcGFyYW0gIENhbGxiYWNrSUQgSUQgb2YgdGhlIGNhbGxiYWNrIHRvIGJlIHVucmVnaXN0ZXJlZAogICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKQEAgLTU3Niw5ICs1NzcsNiBAQAogewogICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CiAKLSAgLyogUHJvY2VzcyBsb2NrZWQgKi8KLSAgX19IQUxfTE9DSyhoc2MpOwotCiAgIGlmIChIQUxfU01BUlRDQVJEX1NUQVRFX1JFQURZID09IGhzYy0+Z1N0YXRlKQogICB7CiAgICAgc3dpdGNoIChDYWxsYmFja0lEKQpAQCAtNjU1LDkgKzY1Myw2IEBACiAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKICAgfQogCi0gIC8qIFJlbGVhc2UgTG9jayAqLwotICBfX0hBTF9VTkxPQ0soaHNjKTsKLQogICByZXR1cm4gc3RhdHVzOwogfQogI2VuZGlmIC8qIFVTRV9IQUxfU01BUlRDQVJEX1JFR0lTVEVSX0NBTExCQUNLUyAqLwpAQCAtMjM0OCwzICsyMzQzLDUgQEAKIC8qKgogICAqIEB9CiAgICovCisKKwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjJ4eF9oYWxfc3BpLmMgYi9TcmMvc3RtMzJmMnh4X2hhbF9zcGkuYwppbmRleCA1NDIwMTAzLi43NzA3NjQ0IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmMnh4X2hhbF9zcGkuYworKysgYi9TcmMvc3RtMzJmMnh4X2hhbF9zcGkuYwpAQCAtOSw3ICs5LDYgQEAKICAgKiAgICAgICAgICAgKyBJTyBvcGVyYXRpb24gZnVuY3Rpb25zCiAgICogICAgICAgICAgICsgUGVyaXBoZXJhbCBDb250cm9sIGZ1bmN0aW9ucwogICAqICAgICAgICAgICArIFBlcmlwaGVyYWwgU3RhdGUgZnVuY3Rpb25zCi0gICoKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCkBAIC0xOTUsNyArMTk0LDYgQEAKICAgICAgICAgICAgICgjKSBSWCBwcm9jZXNzZXMgYXJlIEhBTF9TUElfUmVjZWl2ZSgpLCBIQUxfU1BJX1JlY2VpdmVfSVQoKSBhbmQgSEFMX1NQSV9SZWNlaXZlX0RNQSgpCiAgICAgICAgICAgICAoIykgVFggcHJvY2Vzc2VzIGFyZSBIQUxfU1BJX1RyYW5zbWl0KCksIEhBTF9TUElfVHJhbnNtaXRfSVQoKSBhbmQgSEFMX1NQSV9UcmFuc21pdF9ETUEoKQogCi0gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqLwogCiAvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMzE3Miw3ICszMTcwLDcgQEAKICAgKi8KIHN0YXRpYyB2b2lkIFNQSV8ybGluZXNSeElTUl84QklUQ1JDKHN0cnVjdCBfX1NQSV9IYW5kbGVUeXBlRGVmICpoc3BpKQogewotICBfX0lPIHVpbnQ4X3QgICogcHRtcHJlZzg7CisgIF9fSU8gdWludDhfdCAgKnB0bXByZWc4OwogICBfX0lPIHVpbnQ4X3QgIHRtcHJlZzggPSAwOwogCiAgIC8qIEluaXRpYWxpemUgdGhlIDhiaXQgdGVtcG9yYXJ5IHBvaW50ZXIgKi8KQEAgLTMyNzUsNyArMzI3Myw3IEBACiAgIC8qIFJlYWQgMTZiaXQgQ1JDIHRvIGZsdXNoIERhdGEgUmVnaXN0ZXIgKi8KICAgdG1wcmVnID0gUkVBRF9SRUcoaHNwaS0+SW5zdGFuY2UtPkRSKTsKICAgLyogVG8gYXZvaWQgR0NDIHdhcm5pbmcgKi8KLSAgVU5VU0VEKHRtcHJlZyk7ICAKKyAgVU5VU0VEKHRtcHJlZyk7CiAKICAgLyogRGlzYWJsZSBSWE5FIGludGVycnVwdCAqLwogICBfX0hBTF9TUElfRElTQUJMRV9JVChoc3BpLCBTUElfSVRfUlhORSk7CkBAIC0zMzMwLDcgKzMzMjgsNyBAQAogICAqLwogc3RhdGljIHZvaWQgU1BJX1J4SVNSXzhCSVRDUkMoc3RydWN0IF9fU1BJX0hhbmRsZVR5cGVEZWYgKmhzcGkpCiB7Ci0gIF9fSU8gdWludDhfdCAgKiBwdG1wcmVnODsKKyAgX19JTyB1aW50OF90ICAqcHRtcHJlZzg7CiAgIF9fSU8gdWludDhfdCAgdG1wcmVnOCA9IDA7CiAKICAgLyogSW5pdGlhbGl6ZSB0aGUgOGJpdCB0ZW1wb3JhcnkgcG9pbnRlciAqLwpAQCAtMzU0Miw3ICszNTQwLDcgQEAKICAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOwogICAgICAgfQogICAgICAgLyogSWYgU3lzdGljayBpcyBkaXNhYmxlZCBvciBub3QgaW5jcmVtZW50ZWQsIGRlYWN0aXZhdGUgdGltZW91dCB0byBnbyBpbiBkaXNhYmxlIGxvb3AgcHJvY2VkdXJlICovCi0gICAgICBpZihjb3VudCA9PSAwVSkKKyAgICAgIGlmIChjb3VudCA9PSAwVSkKICAgICAgIHsKICAgICAgICAgdG1wX3RpbWVvdXQgPSAwVTsKICAgICAgIH0KQEAgLTM4ODIsMyArMzg4MCw0IEBACiAvKioKICAgKiBAfQogICAqLworCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmMnh4X2hhbF9zcmFtLmMgYi9TcmMvc3RtMzJmMnh4X2hhbF9zcmFtLmMKaW5kZXggM2JkNjdiMS4uMmQ5MDdlYiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjJ4eF9oYWxfc3JhbS5jCisrKyBiL1NyYy9zdG0zMmYyeHhfaGFsX3NyYW0uYwpAQCAtNzUsMjUgKzc1LDI1IEBACiAgICAgICBUaGUgY29tcGlsYXRpb24gZGVmaW5lICBVU0VfSEFMX1NSQU1fUkVHSVNURVJfQ0FMTEJBQ0tTIHdoZW4gc2V0IHRvIDEKICAgICAgIGFsbG93cyB0aGUgdXNlciB0byBjb25maWd1cmUgZHluYW1pY2FsbHkgdGhlIGRyaXZlciBjYWxsYmFja3MuCiAKLSAgICAgIFVzZSBGdW5jdGlvbnMgQHJlZiBIQUxfU1JBTV9SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVnaXN0ZXIgYSB1c2VyIGNhbGxiYWNrLAorICAgICAgVXNlIEZ1bmN0aW9ucyBIQUxfU1JBTV9SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVnaXN0ZXIgYSB1c2VyIGNhbGxiYWNrLAogICAgICAgaXQgYWxsb3dzIHRvIHJlZ2lzdGVyIGZvbGxvd2luZyBjYWxsYmFja3M6CiAgICAgICAgICgrKSBNc3BJbml0Q2FsbGJhY2sgICAgOiBTUkFNIE1zcEluaXQuCiAgICAgICAgICgrKSBNc3BEZUluaXRDYWxsYmFjayAgOiBTUkFNIE1zcERlSW5pdC4KICAgICAgIFRoaXMgZnVuY3Rpb24gdGFrZXMgYXMgcGFyYW1ldGVycyB0aGUgSEFMIHBlcmlwaGVyYWwgaGFuZGxlLCB0aGUgQ2FsbGJhY2sgSUQKICAgICAgIGFuZCBhIHBvaW50ZXIgdG8gdGhlIHVzZXIgY2FsbGJhY2sgZnVuY3Rpb24uCiAKLSAgICAgIFVzZSBmdW5jdGlvbiBAcmVmIEhBTF9TUkFNX1VuUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlc2V0IGEgY2FsbGJhY2sgdG8gdGhlIGRlZmF1bHQKLSAgICAgIHdlYWsgKHN1cmNoYXJnZWQpIGZ1bmN0aW9uLiBJdCBhbGxvd3MgdG8gcmVzZXQgZm9sbG93aW5nIGNhbGxiYWNrczoKKyAgICAgIFVzZSBmdW5jdGlvbiBIQUxfU1JBTV9VblJlZ2lzdGVyQ2FsbGJhY2soKSB0byByZXNldCBhIGNhbGxiYWNrIHRvIHRoZSBkZWZhdWx0CisgICAgICB3ZWFrIChvdmVycmlkZGVuKSBmdW5jdGlvbi4gSXQgYWxsb3dzIHRvIHJlc2V0IGZvbGxvd2luZyBjYWxsYmFja3M6CiAgICAgICAgICgrKSBNc3BJbml0Q2FsbGJhY2sgICAgOiBTUkFNIE1zcEluaXQuCiAgICAgICAgICgrKSBNc3BEZUluaXRDYWxsYmFjayAgOiBTUkFNIE1zcERlSW5pdC4KICAgICAgIFRoaXMgZnVuY3Rpb24pIHRha2VzIGFzIHBhcmFtZXRlcnMgdGhlIEhBTCBwZXJpcGhlcmFsIGhhbmRsZSBhbmQgdGhlIENhbGxiYWNrIElELgogCi0gICAgICBCeSBkZWZhdWx0LCBhZnRlciB0aGUgQHJlZiBIQUxfU1JBTV9Jbml0IGFuZCBpZiB0aGUgc3RhdGUgaXMgSEFMX1NSQU1fU1RBVEVfUkVTRVQKLSAgICAgIGFsbCBjYWxsYmFja3MgYXJlIHJlc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIGxlZ2FjeSB3ZWFrIChzdXJjaGFyZ2VkKSBmdW5jdGlvbnMuCisgICAgICBCeSBkZWZhdWx0LCBhZnRlciB0aGUgSEFMX1NSQU1fSW5pdCBhbmQgaWYgdGhlIHN0YXRlIGlzIEhBTF9TUkFNX1NUQVRFX1JFU0VUCisgICAgICBhbGwgY2FsbGJhY2tzIGFyZSByZXNldCB0byB0aGUgY29ycmVzcG9uZGluZyBsZWdhY3kgd2VhayAob3ZlcnJpZGRlbikgZnVuY3Rpb25zLgogICAgICAgRXhjZXB0aW9uIGRvbmUgZm9yIE1zcEluaXQgYW5kIE1zcERlSW5pdCBjYWxsYmFja3MgdGhhdCBhcmUgcmVzcGVjdGl2ZWx5Ci0gICAgICByZXNldCB0byB0aGUgbGVnYWN5IHdlYWsgKHN1cmNoYXJnZWQpIGZ1bmN0aW9ucyBpbiB0aGUgQHJlZiBIQUxfU1JBTV9Jbml0Ci0gICAgICBhbmQgQHJlZiAgSEFMX1NSQU1fRGVJbml0IG9ubHkgd2hlbiB0aGVzZSBjYWxsYmFja3MgYXJlIG51bGwgKG5vdCByZWdpc3RlcmVkIGJlZm9yZWhhbmQpLgotICAgICAgSWYgbm90LCBNc3BJbml0IG9yIE1zcERlSW5pdCBhcmUgbm90IG51bGwsIHRoZSBAcmVmIEhBTF9TUkFNX0luaXQgYW5kIEByZWYgSEFMX1NSQU1fRGVJbml0CisgICAgICByZXNldCB0byB0aGUgbGVnYWN5IHdlYWsgKG92ZXJyaWRkZW4pIGZ1bmN0aW9ucyBpbiB0aGUgSEFMX1NSQU1fSW5pdAorICAgICAgYW5kICBIQUxfU1JBTV9EZUluaXQgb25seSB3aGVuIHRoZXNlIGNhbGxiYWNrcyBhcmUgbnVsbCAobm90IHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCkuCisgICAgICBJZiBub3QsIE1zcEluaXQgb3IgTXNwRGVJbml0IGFyZSBub3QgbnVsbCwgdGhlIEhBTF9TUkFNX0luaXQgYW5kIEhBTF9TUkFNX0RlSW5pdAogICAgICAga2VlcCBhbmQgdXNlIHRoZSB1c2VyIE1zcEluaXQvTXNwRGVJbml0IGNhbGxiYWNrcyAocmVnaXN0ZXJlZCBiZWZvcmVoYW5kKQogCiAgICAgICBDYWxsYmFja3MgY2FuIGJlIHJlZ2lzdGVyZWQvdW5yZWdpc3RlcmVkIGluIFJFQURZIHN0YXRlIG9ubHkuCkBAIC0xMDEsMTIgKzEwMSwxMiBAQAogICAgICAgaW4gUkVBRFkgb3IgUkVTRVQgc3RhdGUsIHRodXMgcmVnaXN0ZXJlZCAodXNlcikgTXNwSW5pdC9EZUluaXQgY2FsbGJhY2tzIGNhbiBiZSB1c2VkCiAgICAgICBkdXJpbmcgdGhlIEluaXQvRGVJbml0LgogICAgICAgSW4gdGhhdCBjYXNlIGZpcnN0IHJlZ2lzdGVyIHRoZSBNc3BJbml0L01zcERlSW5pdCB1c2VyIGNhbGxiYWNrcwotICAgICAgdXNpbmcgQHJlZiBIQUxfU1JBTV9SZWdpc3RlckNhbGxiYWNrIGJlZm9yZSBjYWxsaW5nIEByZWYgSEFMX1NSQU1fRGVJbml0Ci0gICAgICBvciBAcmVmIEhBTF9TUkFNX0luaXQgZnVuY3Rpb24uCisgICAgICB1c2luZyBIQUxfU1JBTV9SZWdpc3RlckNhbGxiYWNrIGJlZm9yZSBjYWxsaW5nIEhBTF9TUkFNX0RlSW5pdAorICAgICAgb3IgSEFMX1NSQU1fSW5pdCBmdW5jdGlvbi4KIAogICAgICAgV2hlbiBUaGUgY29tcGlsYXRpb24gZGVmaW5lIFVTRV9IQUxfU1JBTV9SRUdJU1RFUl9DQUxMQkFDS1MgaXMgc2V0IHRvIDAgb3IKICAgICAgIG5vdCBkZWZpbmVkLCB0aGUgY2FsbGJhY2sgcmVnaXN0ZXJpbmcgZmVhdHVyZSBpcyBub3QgYXZhaWxhYmxlCi0gICAgICBhbmQgd2VhayAoc3VyY2hhcmdlZCkgY2FsbGJhY2tzIGFyZSB1c2VkLgorICAgICAgYW5kIHdlYWsgKG92ZXJyaWRkZW4pIGNhbGxiYWNrcyBhcmUgdXNlZC4KIAogICBAZW5kdmVyYmF0aW0KICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xMzIsOSArMTMyLDE1IEBACiAvKiBQcml2YXRlIG1hY3JvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogUHJpdmF0ZSB2YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgZnVuY3Rpb24gcHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiogQGFkZHRvZ3JvdXAgU1JBTV9Qcml2YXRlX0Z1bmN0aW9ucyBTUkFNIFByaXZhdGUgRnVuY3Rpb25zCisgICogQHsKKyAgKi8KIHN0YXRpYyB2b2lkIFNSQU1fRE1BQ3BsdChETUFfSGFuZGxlVHlwZURlZiAqaGRtYSk7CiBzdGF0aWMgdm9pZCBTUkFNX0RNQUNwbHRQcm90KERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKTsKIHN0YXRpYyB2b2lkIFNSQU1fRE1BRXJyb3IoRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpOworLyoqCisgICogQH0KKyAgKi8KIAogLyogRXhwb3J0ZWQgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtNzMwLDcgKzczNiw3IEBACiAjaWYgKFVTRV9IQUxfU1JBTV9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKIC8qKgogICAqIEBicmllZiAgUmVnaXN0ZXIgYSBVc2VyIFNSQU0gQ2FsbGJhY2sKLSAgKiAgICAgICAgIFRvIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgd2VhayAoc3VyY2hhcmdlZCkgcHJlZGVmaW5lZCBjYWxsYmFjaworICAqICAgICAgICAgVG8gYmUgdXNlZCB0byBvdmVycmlkZSB0aGUgd2VhayBwcmVkZWZpbmVkIGNhbGxiYWNrCiAgICogQHBhcmFtIGhzcmFtIDogU1JBTSBoYW5kbGUKICAgKiBAcGFyYW0gQ2FsbGJhY2tJZCA6IElEIG9mIHRoZSBjYWxsYmFjayB0byBiZSByZWdpc3RlcmVkCiAgICogICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CkBAIC03NTAsOSArNzU2LDYgQEAKICAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CiAKLSAgLyogUHJvY2VzcyBsb2NrZWQgKi8KLSAgX19IQUxfTE9DSyhoc3JhbSk7Ci0KICAgc3RhdGUgPSBoc3JhbS0+U3RhdGU7CiAgIGlmICgoc3RhdGUgPT0gSEFMX1NSQU1fU1RBVEVfUkVBRFkpIHx8IChzdGF0ZSA9PSBIQUxfU1JBTV9TVEFURV9SRVNFVCkgfHwgKHN0YXRlID09IEhBTF9TUkFNX1NUQVRFX1BST1RFQ1RFRCkpCiAgIHsKQEAgLTc3NiwxNCArNzc5LDEyIEBACiAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKICAgfQogCi0gIC8qIFJlbGVhc2UgTG9jayAqLwotICBfX0hBTF9VTkxPQ0soaHNyYW0pOwogICByZXR1cm4gc3RhdHVzOwogfQogCiAvKioKICAgKiBAYnJpZWYgIFVucmVnaXN0ZXIgYSBVc2VyIFNSQU0gQ2FsbGJhY2sKLSAgKiAgICAgICAgIFNSQU0gQ2FsbGJhY2sgaXMgcmVkaXJlY3RlZCB0byB0aGUgd2VhayAoc3VyY2hhcmdlZCkgcHJlZGVmaW5lZCBjYWxsYmFjaworICAqICAgICAgICAgU1JBTSBDYWxsYmFjayBpcyByZWRpcmVjdGVkIHRvIHRoZSB3ZWFrIHByZWRlZmluZWQgY2FsbGJhY2sKICAgKiBAcGFyYW0gaHNyYW0gOiBTUkFNIGhhbmRsZQogICAqIEBwYXJhbSBDYWxsYmFja0lkIDogSUQgb2YgdGhlIGNhbGxiYWNrIHRvIGJlIHVucmVnaXN0ZXJlZAogICAqICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgpAQCAtNzk4LDkgKzc5OSw2IEBACiAgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKICAgSEFMX1NSQU1fU3RhdGVUeXBlRGVmIHN0YXRlOwogCi0gIC8qIFByb2Nlc3MgbG9ja2VkICovCi0gIF9fSEFMX0xPQ0soaHNyYW0pOwotCiAgIHN0YXRlID0gaHNyYW0tPlN0YXRlOwogICBpZiAoKHN0YXRlID09IEhBTF9TUkFNX1NUQVRFX1JFQURZKSB8fCAoc3RhdGUgPT0gSEFMX1NSQU1fU1RBVEVfUFJPVEVDVEVEKSkKICAgewpAQCAtODQ2LDE0ICs4NDQsMTIgQEAKICAgICBzdGF0dXMgPSAgSEFMX0VSUk9SOwogICB9CiAKLSAgLyogUmVsZWFzZSBMb2NrICovCi0gIF9fSEFMX1VOTE9DSyhoc3JhbSk7CiAgIHJldHVybiBzdGF0dXM7CiB9CiAKIC8qKgogICAqIEBicmllZiAgUmVnaXN0ZXIgYSBVc2VyIFNSQU0gQ2FsbGJhY2sgZm9yIERNQSB0cmFuc2ZlcnMKLSAgKiAgICAgICAgIFRvIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgd2VhayAoc3VyY2hhcmdlZCkgcHJlZGVmaW5lZCBjYWxsYmFjaworICAqICAgICAgICAgVG8gYmUgdXNlZCB0byBvdmVycmlkZSB0aGUgd2VhayBwcmVkZWZpbmVkIGNhbGxiYWNrCiAgICogQHBhcmFtIGhzcmFtIDogU1JBTSBoYW5kbGUKICAgKiBAcGFyYW0gQ2FsbGJhY2tJZCA6IElEIG9mIHRoZSBjYWxsYmFjayB0byBiZSByZWdpc3RlcmVkCiAgICogICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CkBAIC0xMDE3LDcgKzEwMTMsNyBAQAogICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBTUkFNIG1vZHVsZS4KICAgKiBAcmV0dmFsIEhBTCBzdGF0ZQogICAqLwotSEFMX1NSQU1fU3RhdGVUeXBlRGVmIEhBTF9TUkFNX0dldFN0YXRlKFNSQU1fSGFuZGxlVHlwZURlZiAqaHNyYW0pCitIQUxfU1JBTV9TdGF0ZVR5cGVEZWYgSEFMX1NSQU1fR2V0U3RhdGUoY29uc3QgU1JBTV9IYW5kbGVUeXBlRGVmICpoc3JhbSkKIHsKICAgcmV0dXJuIGhzcmFtLT5TdGF0ZTsKIH0KQEAgLTEwMzAsNiArMTAyNiwxMCBAQAogICAqIEB9CiAgICovCiAKKy8qKiBAYWRkdG9ncm91cCBTUkFNX1ByaXZhdGVfRnVuY3Rpb25zIFNSQU0gUHJpdmF0ZSBGdW5jdGlvbnMKKyAgKiBAeworICAqLworCiAvKioKICAgKiBAYnJpZWYgIERNQSBTUkFNIHByb2Nlc3MgY29tcGxldGUgY2FsbGJhY2suCiAgICogQHBhcmFtICBoZG1hIDogRE1BIGhhbmRsZQpAQCAtMTEwMCw4ICsxMTAwLDEzIEBACiAgICogQH0KICAgKi8KIAorLyoqCisgICogQH0KKyAgKi8KKwogI2VuZGlmIC8qIEhBTF9TUkFNX01PRFVMRV9FTkFCTEVEICovCiAKIC8qKgogICAqIEB9CiAgICovCisKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmYyeHhfaGFsX3RpbS5jIGIvU3JjL3N0bTMyZjJ4eF9oYWxfdGltLmMKaW5kZXggZmU5ZjM1YS4uODBjYzFlOCAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjJ4eF9oYWxfdGltLmMKKysrIGIvU3JjL3N0bTMyZjJ4eF9oYWxfdGltLmMKQEAgLTI5LDcgKzI5LDYgQEAKICAgKiAgICAgICAgICAgKyBDb21tdXRhdGlvbiBFdmVudCBjb25maWd1cmF0aW9uIHdpdGggSW50ZXJydXB0aW9uIGFuZCBETUEKICAgKiAgICAgICAgICAgKyBUSU0gT0NSZWYgY2xlYXIgY29uZmlndXJhdGlvbgogICAqICAgICAgICAgICArIFRJTSBFeHRlcm5hbCBDbG9jayBjb25maWd1cmF0aW9uCi0gICoKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCkBAIC0xMTUsMTQgKzExNCwxNCBAQAogICBhbGxvd3MgdGhlIHVzZXIgdG8gY29uZmlndXJlIGR5bmFtaWNhbGx5IHRoZSBkcml2ZXIgY2FsbGJhY2tzLgogCiAgIFsuLl0KLSAgVXNlIEZ1bmN0aW9uIEByZWYgSEFMX1RJTV9SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVnaXN0ZXIgYSBjYWxsYmFjay4KLSAgQHJlZiBIQUxfVElNX1JlZ2lzdGVyQ2FsbGJhY2soKSB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsCisgIFVzZSBGdW5jdGlvbiBIQUxfVElNX1JlZ2lzdGVyQ2FsbGJhY2soKSB0byByZWdpc3RlciBhIGNhbGxiYWNrLgorICBIQUxfVElNX1JlZ2lzdGVyQ2FsbGJhY2soKSB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsCiAgIHRoZSBDYWxsYmFjayBJRCBhbmQgYSBwb2ludGVyIHRvIHRoZSB1c2VyIGNhbGxiYWNrIGZ1bmN0aW9uLgogCiAgIFsuLl0KLSAgVXNlIGZ1bmN0aW9uIEByZWYgSEFMX1RJTV9VblJlZ2lzdGVyQ2FsbGJhY2soKSB0byByZXNldCBhIGNhbGxiYWNrIHRvIHRoZSBkZWZhdWx0CisgIFVzZSBmdW5jdGlvbiBIQUxfVElNX1VuUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlc2V0IGEgY2FsbGJhY2sgdG8gdGhlIGRlZmF1bHQKICAgd2VhayBmdW5jdGlvbi4KLSAgQHJlZiBIQUxfVElNX1VuUmVnaXN0ZXJDYWxsYmFjayB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsCisgIEhBTF9USU1fVW5SZWdpc3RlckNhbGxiYWNrIHRha2VzIGFzIHBhcmFtZXRlcnMgdGhlIEhBTCBwZXJpcGhlcmFsIGhhbmRsZSwKICAgYW5kIHRoZSBDYWxsYmFjayBJRC4KIAogICBbLi5dCkBAIC0xNTgsNyArMTU3LDcgQEAKICAgWy4uXQogQnkgZGVmYXVsdCwgYWZ0ZXIgdGhlIEluaXQgYW5kIHdoZW4gdGhlIHN0YXRlIGlzIEhBTF9USU1fU1RBVEVfUkVTRVQKIGFsbCBpbnRlcnJ1cHQgY2FsbGJhY2tzIGFyZSBzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgd2VhayBmdW5jdGlvbnM6Ci0gIGV4YW1wbGVzIEByZWYgSEFMX1RJTV9UcmlnZ2VyQ2FsbGJhY2soKSwgQHJlZiBIQUxfVElNX0Vycm9yQ2FsbGJhY2soKS4KKyAgZXhhbXBsZXMgSEFMX1RJTV9UcmlnZ2VyQ2FsbGJhY2soKSwgSEFMX1RJTV9FcnJvckNhbGxiYWNrKCkuCiAKICAgWy4uXQogICBFeGNlcHRpb24gZG9uZSBmb3IgTXNwSW5pdCBhbmQgTXNwRGVJbml0IGZ1bmN0aW9ucyB0aGF0IGFyZSByZXNldCB0byB0aGUgbGVnYWN5IHdlYWsKQEAgLTE3Miw3ICsxNzEsNyBAQAogICAgIGluIEhBTF9USU1fU1RBVEVfUkVBRFkgb3IgSEFMX1RJTV9TVEFURV9SRVNFVCBzdGF0ZSwKICAgICB0aHVzIHJlZ2lzdGVyZWQodXNlcikgTXNwSW5pdCAvIERlSW5pdCBjYWxsYmFja3MgY2FuIGJlIHVzZWQgZHVyaW5nIHRoZSBJbml0IC8gRGVJbml0LgogICBJbiB0aGF0IGNhc2UgZmlyc3QgcmVnaXN0ZXIgdGhlIE1zcEluaXQvTXNwRGVJbml0IHVzZXIgY2FsbGJhY2tzCi0gICAgICB1c2luZyBAcmVmIEhBTF9USU1fUmVnaXN0ZXJDYWxsYmFjaygpIGJlZm9yZSBjYWxsaW5nIERlSW5pdCBvciBJbml0IGZ1bmN0aW9uLgorICAgICAgdXNpbmcgSEFMX1RJTV9SZWdpc3RlckNhbGxiYWNrKCkgYmVmb3JlIGNhbGxpbmcgRGVJbml0IG9yIEluaXQgZnVuY3Rpb24uCiAKICAgWy4uXQogICAgICAgV2hlbiBUaGUgY29tcGlsYXRpb24gZGVmaW5lIFVTRV9IQUxfVElNX1JFR0lTVEVSX0NBTExCQUNLUyBpcyBzZXQgdG8gMCBvcgpAQCAtMjc2LDYgKzI3NSw3IEBACiAgIGFzc2VydF9wYXJhbShJU19USU1fSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DT1VOVEVSX01PREUoaHRpbS0+SW5pdC5Db3VudGVyTW9kZSkpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NMT0NLRElWSVNJT05fRElWKGh0aW0tPkluaXQuQ2xvY2tEaXZpc2lvbikpOworICBhc3NlcnRfcGFyYW0oSVNfVElNX1BFUklPRChodGltLCBodGltLT5Jbml0LlBlcmlvZCkpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0FVVE9SRUxPQURfUFJFTE9BRChodGltLT5Jbml0LkF1dG9SZWxvYWRQcmVsb2FkKSk7CiAKICAgaWYgKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfUkVTRVQpCkBAIC01MzcsNyArNTM3LDcgQEAKICAgfQogICBlbHNlIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX1JFQURZKQogICB7Ci0gICAgaWYgKChwRGF0YSA9PSBOVUxMKSAmJiAoTGVuZ3RoID4gMFUpKQorICAgIGlmICgocERhdGEgPT0gTlVMTCkgfHwgKExlbmd0aCA9PSAwVSkpCiAgICAgewogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICB9CkBAIC01NjAsNyArNTYwLDcgQEAKIAogICAvKiBFbmFibGUgdGhlIERNQSBzdHJlYW0gKi8KICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX1VQREFURV0sICh1aW50MzJfdClwRGF0YSwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+QVJSLAotICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoKSAhPSBIQUxfT0spCisgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aCkgIT0gSEFMX09LKQogICB7CiAgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLwogICAgIHJldHVybiBIQUxfRVJST1I7CkBAIC02NTksNiArNjU5LDcgQEAKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NPVU5URVJfTU9ERShodGltLT5Jbml0LkNvdW50ZXJNb2RlKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fQ0xPQ0tESVZJU0lPTl9ESVYoaHRpbS0+SW5pdC5DbG9ja0RpdmlzaW9uKSk7CisgIGFzc2VydF9wYXJhbShJU19USU1fUEVSSU9EKGh0aW0sIGh0aW0tPkluaXQuUGVyaW9kKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fQVVUT1JFTE9BRF9QUkVMT0FEKGh0aW0tPkluaXQuQXV0b1JlbG9hZFByZWxvYWQpKTsKIAogICBpZiAoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9SRVNFVCkKQEAgLTg3Niw2ICs4NzcsNyBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9PQ19TdGFydF9JVChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQ2hhbm5lbCkKIHsKKyAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwogICB1aW50MzJfdCB0bXBzbWNyOwogCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCkBAIC05MjEsMzQgKzkyMywzOCBAQAogICAgIH0KIAogICAgIGRlZmF1bHQ6CisgICAgICBzdGF0dXMgPSBIQUxfRVJST1I7CiAgICAgICBicmVhazsKICAgfQogCi0gIC8qIEVuYWJsZSB0aGUgT3V0cHV0IGNvbXBhcmUgY2hhbm5lbCAqLwotICBUSU1fQ0N4Q2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCwgVElNX0NDeF9FTkFCTEUpOwotCi0gIGlmIChJU19USU1fQlJFQUtfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpICE9IFJFU0VUKQorICBpZiAoc3RhdHVzID09IEhBTF9PSykKICAgewotICAgIC8qIEVuYWJsZSB0aGUgbWFpbiBvdXRwdXQgKi8KLSAgICBfX0hBTF9USU1fTU9FX0VOQUJMRShodGltKTsKLSAgfQorICAgIC8qIEVuYWJsZSB0aGUgT3V0cHV0IGNvbXBhcmUgY2hhbm5lbCAqLworICAgIFRJTV9DQ3hDaGFubmVsQ21kKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsLCBUSU1fQ0N4X0VOQUJMRSk7CiAKLSAgLyogRW5hYmxlIHRoZSBQZXJpcGhlcmFsLCBleGNlcHQgaW4gdHJpZ2dlciBtb2RlIHdoZXJlIGVuYWJsZSBpcyBhdXRvbWF0aWNhbGx5IGRvbmUgd2l0aCB0cmlnZ2VyICovCi0gIGlmIChJU19USU1fU0xBVkVfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKQotICB7Ci0gICAgdG1wc21jciA9IGh0aW0tPkluc3RhbmNlLT5TTUNSICYgVElNX1NNQ1JfU01TOwotICAgIGlmICghSVNfVElNX1NMQVZFTU9ERV9UUklHR0VSX0VOQUJMRUQodG1wc21jcikpCisgICAgaWYgKElTX1RJTV9CUkVBS19JTlNUQU5DRShodGltLT5JbnN0YW5jZSkgIT0gUkVTRVQpCisgICAgeworICAgICAgLyogRW5hYmxlIHRoZSBtYWluIG91dHB1dCAqLworICAgICAgX19IQUxfVElNX01PRV9FTkFCTEUoaHRpbSk7CisgICAgfQorCisgICAgLyogRW5hYmxlIHRoZSBQZXJpcGhlcmFsLCBleGNlcHQgaW4gdHJpZ2dlciBtb2RlIHdoZXJlIGVuYWJsZSBpcyBhdXRvbWF0aWNhbGx5IGRvbmUgd2l0aCB0cmlnZ2VyICovCisgICAgaWYgKElTX1RJTV9TTEFWRV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpCisgICAgeworICAgICAgdG1wc21jciA9IGh0aW0tPkluc3RhbmNlLT5TTUNSICYgVElNX1NNQ1JfU01TOworICAgICAgaWYgKCFJU19USU1fU0xBVkVNT0RFX1RSSUdHRVJfRU5BQkxFRCh0bXBzbWNyKSkKKyAgICAgIHsKKyAgICAgICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZQogICAgIHsKICAgICAgIF9fSEFMX1RJTV9FTkFCTEUoaHRpbSk7CiAgICAgfQogICB9Ci0gIGVsc2UKLSAgewotICAgIF9fSEFMX1RJTV9FTkFCTEUoaHRpbSk7Ci0gIH0KIAogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCi0gIHJldHVybiBIQUxfT0s7CisgIHJldHVybiBzdGF0dXM7CiB9CiAKIC8qKgpAQCAtOTY0LDYgKzk3MCw4IEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX09DX1N0b3BfSVQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IENoYW5uZWwpCiB7CisgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKKwogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDWF9JTlNUQU5DRShodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCkpOwogCkBAIC05OTgsMjYgKzEwMDYsMzAgQEAKICAgICB9CiAKICAgICBkZWZhdWx0OgorICAgICAgc3RhdHVzID0gSEFMX0VSUk9SOwogICAgICAgYnJlYWs7CiAgIH0KIAotICAvKiBEaXNhYmxlIHRoZSBPdXRwdXQgY29tcGFyZSBjaGFubmVsICovCi0gIFRJTV9DQ3hDaGFubmVsQ21kKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsLCBUSU1fQ0N4X0RJU0FCTEUpOwotCi0gIGlmIChJU19USU1fQlJFQUtfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpICE9IFJFU0VUKQorICBpZiAoc3RhdHVzID09IEhBTF9PSykKICAgewotICAgIC8qIERpc2FibGUgdGhlIE1haW4gT3V0cHV0ICovCi0gICAgX19IQUxfVElNX01PRV9ESVNBQkxFKGh0aW0pOworICAgIC8qIERpc2FibGUgdGhlIE91dHB1dCBjb21wYXJlIGNoYW5uZWwgKi8KKyAgICBUSU1fQ0N4Q2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCwgVElNX0NDeF9ESVNBQkxFKTsKKworICAgIGlmIChJU19USU1fQlJFQUtfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpICE9IFJFU0VUKQorICAgIHsKKyAgICAgIC8qIERpc2FibGUgdGhlIE1haW4gT3V0cHV0ICovCisgICAgICBfX0hBTF9USU1fTU9FX0RJU0FCTEUoaHRpbSk7CisgICAgfQorCisgICAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLworICAgIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOworCisgICAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbCBzdGF0ZSAqLworICAgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOwogICB9CiAKLSAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwotICBfX0hBTF9USU1fRElTQUJMRShodGltKTsKLQotICAvKiBTZXQgdGhlIFRJTSBjaGFubmVsIHN0YXRlICovCi0gIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOwotCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KLSAgcmV0dXJuIEhBTF9PSzsKKyAgcmV0dXJuIHN0YXR1czsKIH0KIAogLyoqCkBAIC0xMDM2LDYgKzEwNDgsNyBAQAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9PQ19TdGFydF9ETUEoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IENoYW5uZWwsIGNvbnN0IHVpbnQzMl90ICpwRGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IExlbmd0aCkKIHsKKyAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwogICB1aW50MzJfdCB0bXBzbWNyOwogCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCkBAIC0xMDQ4LDcgKzEwNjEsNyBAQAogICB9CiAgIGVsc2UgaWYgKFRJTV9DSEFOTkVMX1NUQVRFX0dFVChodGltLCBDaGFubmVsKSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCiAgIHsKLSAgICBpZiAoKHBEYXRhID09IE5VTEwpICYmIChMZW5ndGggPiAwVSkpCisgICAgaWYgKChwRGF0YSA9PSBOVUxMKSB8fCAoTGVuZ3RoID09IDBVKSkKICAgICB7CiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KQEAgLTEwNzUsNyArMTA4OCw3IEBACiAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIHN0cmVhbSAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMV0sICh1aW50MzJfdClwRGF0YSwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+Q0NSMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBMZW5ndGgpICE9IEhBTF9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aCkgIT0gSEFMX09LKQogICAgICAgewogICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CkBAIC0xMDk3LDcgKzExMTAsNyBAQAogCiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBzdHJlYW0gKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzJdLCAodWludDMyX3QpcERhdGEsICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkNDUjIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoKSAhPSBIQUxfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICBMZW5ndGgpICE9IEhBTF9PSykKICAgICAgIHsKICAgICAgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLwogICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwpAQCAtMTExOSw3ICsxMTMyLDcgQEAKIAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgc3RyZWFtICovCiAgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MzXSwgKHVpbnQzMl90KXBEYXRhLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5DQ1IzLAotICAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aCkgIT0gSEFMX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CiAgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKQEAgLTExNDAsNyArMTE1Myw3IEBACiAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIHN0cmVhbSAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDNF0sICh1aW50MzJfdClwRGF0YSwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+Q0NSNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBMZW5ndGgpICE9IEhBTF9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aCkgIT0gSEFMX09LKQogICAgICAgewogICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CkBAIC0xMTUxLDM0ICsxMTY0LDM4IEBACiAgICAgfQogCiAgICAgZGVmYXVsdDoKKyAgICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKICAgICAgIGJyZWFrOwogICB9CiAKLSAgLyogRW5hYmxlIHRoZSBPdXRwdXQgY29tcGFyZSBjaGFubmVsICovCi0gIFRJTV9DQ3hDaGFubmVsQ21kKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsLCBUSU1fQ0N4X0VOQUJMRSk7Ci0KLSAgaWYgKElTX1RJTV9CUkVBS19JTlNUQU5DRShodGltLT5JbnN0YW5jZSkgIT0gUkVTRVQpCisgIGlmIChzdGF0dXMgPT0gSEFMX09LKQogICB7Ci0gICAgLyogRW5hYmxlIHRoZSBtYWluIG91dHB1dCAqLwotICAgIF9fSEFMX1RJTV9NT0VfRU5BQkxFKGh0aW0pOwotICB9CisgICAgLyogRW5hYmxlIHRoZSBPdXRwdXQgY29tcGFyZSBjaGFubmVsICovCisgICAgVElNX0NDeENoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwsIFRJTV9DQ3hfRU5BQkxFKTsKIAotICAvKiBFbmFibGUgdGhlIFBlcmlwaGVyYWwsIGV4Y2VwdCBpbiB0cmlnZ2VyIG1vZGUgd2hlcmUgZW5hYmxlIGlzIGF1dG9tYXRpY2FsbHkgZG9uZSB3aXRoIHRyaWdnZXIgKi8KLSAgaWYgKElTX1RJTV9TTEFWRV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpCi0gIHsKLSAgICB0bXBzbWNyID0gaHRpbS0+SW5zdGFuY2UtPlNNQ1IgJiBUSU1fU01DUl9TTVM7Ci0gICAgaWYgKCFJU19USU1fU0xBVkVNT0RFX1RSSUdHRVJfRU5BQkxFRCh0bXBzbWNyKSkKKyAgICBpZiAoSVNfVElNX0JSRUFLX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSAhPSBSRVNFVCkKKyAgICB7CisgICAgICAvKiBFbmFibGUgdGhlIG1haW4gb3V0cHV0ICovCisgICAgICBfX0hBTF9USU1fTU9FX0VOQUJMRShodGltKTsKKyAgICB9CisKKyAgICAvKiBFbmFibGUgdGhlIFBlcmlwaGVyYWwsIGV4Y2VwdCBpbiB0cmlnZ2VyIG1vZGUgd2hlcmUgZW5hYmxlIGlzIGF1dG9tYXRpY2FsbHkgZG9uZSB3aXRoIHRyaWdnZXIgKi8KKyAgICBpZiAoSVNfVElNX1NMQVZFX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSkKKyAgICB7CisgICAgICB0bXBzbWNyID0gaHRpbS0+SW5zdGFuY2UtPlNNQ1IgJiBUSU1fU01DUl9TTVM7CisgICAgICBpZiAoIUlTX1RJTV9TTEFWRU1PREVfVFJJR0dFUl9FTkFCTEVEKHRtcHNtY3IpKQorICAgICAgeworICAgICAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOworICAgICAgfQorICAgIH0KKyAgICBlbHNlCiAgICAgewogICAgICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKICAgICB9CiAgIH0KLSAgZWxzZQotICB7Ci0gICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKLSAgfQogCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KLSAgcmV0dXJuIEhBTF9PSzsKKyAgcmV0dXJuIHN0YXR1czsKIH0KIAogLyoqCkBAIC0xMTk0LDYgKzEyMTEsOCBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9PQ19TdG9wX0RNQShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQ2hhbm5lbCkKIHsKKyAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOworCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fQ0NYX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsKSk7CiAKQEAgLTEyMzIsMjYgKzEyNTEsMzAgQEAKICAgICB9CiAKICAgICBkZWZhdWx0OgorICAgICAgc3RhdHVzID0gSEFMX0VSUk9SOwogICAgICAgYnJlYWs7CiAgIH0KIAotICAvKiBEaXNhYmxlIHRoZSBPdXRwdXQgY29tcGFyZSBjaGFubmVsICovCi0gIFRJTV9DQ3hDaGFubmVsQ21kKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsLCBUSU1fQ0N4X0RJU0FCTEUpOwotCi0gIGlmIChJU19USU1fQlJFQUtfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpICE9IFJFU0VUKQorICBpZiAoc3RhdHVzID09IEhBTF9PSykKICAgewotICAgIC8qIERpc2FibGUgdGhlIE1haW4gT3V0cHV0ICovCi0gICAgX19IQUxfVElNX01PRV9ESVNBQkxFKGh0aW0pOworICAgIC8qIERpc2FibGUgdGhlIE91dHB1dCBjb21wYXJlIGNoYW5uZWwgKi8KKyAgICBUSU1fQ0N4Q2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCwgVElNX0NDeF9ESVNBQkxFKTsKKworICAgIGlmIChJU19USU1fQlJFQUtfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpICE9IFJFU0VUKQorICAgIHsKKyAgICAgIC8qIERpc2FibGUgdGhlIE1haW4gT3V0cHV0ICovCisgICAgICBfX0hBTF9USU1fTU9FX0RJU0FCTEUoaHRpbSk7CisgICAgfQorCisgICAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLworICAgIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOworCisgICAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbCBzdGF0ZSAqLworICAgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOwogICB9CiAKLSAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwotICBfX0hBTF9USU1fRElTQUJMRShodGltKTsKLQotICAvKiBTZXQgdGhlIFRJTSBjaGFubmVsIHN0YXRlICovCi0gIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOwotCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KLSAgcmV0dXJuIEhBTF9PSzsKKyAgcmV0dXJuIHN0YXR1czsKIH0KIAogLyoqCkBAIC0xMzAxLDYgKzEzMjQsNyBAQAogICBhc3NlcnRfcGFyYW0oSVNfVElNX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fQ09VTlRFUl9NT0RFKGh0aW0tPkluaXQuQ291bnRlck1vZGUpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DTE9DS0RJVklTSU9OX0RJVihodGltLT5Jbml0LkNsb2NrRGl2aXNpb24pKTsKKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9QRVJJT0QoaHRpbSwgaHRpbS0+SW5pdC5QZXJpb2QpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9BVVRPUkVMT0FEX1BSRUxPQUQoaHRpbS0+SW5pdC5BdXRvUmVsb2FkUHJlbG9hZCkpOwogCiAgIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX1JFU0VUKQpAQCAtMTUxOCw3ICsxNTQyLDkgQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fUFdNX1N0YXJ0X0lUKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBDaGFubmVsKQogeworICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CiAgIHVpbnQzMl90IHRtcHNtY3I7CisKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DQ1hfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwpKTsKIApAQCAtMTU2MiwzNCArMTU4OCwzOCBAQAogICAgIH0KIAogICAgIGRlZmF1bHQ6CisgICAgICBzdGF0dXMgPSBIQUxfRVJST1I7CiAgICAgICBicmVhazsKICAgfQogCi0gIC8qIEVuYWJsZSB0aGUgQ2FwdHVyZSBjb21wYXJlIGNoYW5uZWwgKi8KLSAgVElNX0NDeENoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwsIFRJTV9DQ3hfRU5BQkxFKTsKLQotICBpZiAoSVNfVElNX0JSRUFLX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSAhPSBSRVNFVCkKKyAgaWYgKHN0YXR1cyA9PSBIQUxfT0spCiAgIHsKLSAgICAvKiBFbmFibGUgdGhlIG1haW4gb3V0cHV0ICovCi0gICAgX19IQUxfVElNX01PRV9FTkFCTEUoaHRpbSk7Ci0gIH0KKyAgICAvKiBFbmFibGUgdGhlIENhcHR1cmUgY29tcGFyZSBjaGFubmVsICovCisgICAgVElNX0NDeENoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwsIFRJTV9DQ3hfRU5BQkxFKTsKIAotICAvKiBFbmFibGUgdGhlIFBlcmlwaGVyYWwsIGV4Y2VwdCBpbiB0cmlnZ2VyIG1vZGUgd2hlcmUgZW5hYmxlIGlzIGF1dG9tYXRpY2FsbHkgZG9uZSB3aXRoIHRyaWdnZXIgKi8KLSAgaWYgKElTX1RJTV9TTEFWRV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpCi0gIHsKLSAgICB0bXBzbWNyID0gaHRpbS0+SW5zdGFuY2UtPlNNQ1IgJiBUSU1fU01DUl9TTVM7Ci0gICAgaWYgKCFJU19USU1fU0xBVkVNT0RFX1RSSUdHRVJfRU5BQkxFRCh0bXBzbWNyKSkKKyAgICBpZiAoSVNfVElNX0JSRUFLX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSAhPSBSRVNFVCkKKyAgICB7CisgICAgICAvKiBFbmFibGUgdGhlIG1haW4gb3V0cHV0ICovCisgICAgICBfX0hBTF9USU1fTU9FX0VOQUJMRShodGltKTsKKyAgICB9CisKKyAgICAvKiBFbmFibGUgdGhlIFBlcmlwaGVyYWwsIGV4Y2VwdCBpbiB0cmlnZ2VyIG1vZGUgd2hlcmUgZW5hYmxlIGlzIGF1dG9tYXRpY2FsbHkgZG9uZSB3aXRoIHRyaWdnZXIgKi8KKyAgICBpZiAoSVNfVElNX1NMQVZFX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSkKKyAgICB7CisgICAgICB0bXBzbWNyID0gaHRpbS0+SW5zdGFuY2UtPlNNQ1IgJiBUSU1fU01DUl9TTVM7CisgICAgICBpZiAoIUlTX1RJTV9TTEFWRU1PREVfVFJJR0dFUl9FTkFCTEVEKHRtcHNtY3IpKQorICAgICAgeworICAgICAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOworICAgICAgfQorICAgIH0KKyAgICBlbHNlCiAgICAgewogICAgICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKICAgICB9CiAgIH0KLSAgZWxzZQotICB7Ci0gICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKLSAgfQogCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KLSAgcmV0dXJuIEhBTF9PSzsKKyAgcmV0dXJuIHN0YXR1czsKIH0KIAogLyoqCkBAIC0xNjA1LDYgKzE2MzUsOCBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9QV01fU3RvcF9JVChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQ2hhbm5lbCkKIHsKKyAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOworCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fQ0NYX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsKSk7CiAKQEAgLTE2MzksMjYgKzE2NzEsMzAgQEAKICAgICB9CiAKICAgICBkZWZhdWx0OgorICAgICAgc3RhdHVzID0gSEFMX0VSUk9SOwogICAgICAgYnJlYWs7CiAgIH0KIAotICAvKiBEaXNhYmxlIHRoZSBDYXB0dXJlIGNvbXBhcmUgY2hhbm5lbCAqLwotICBUSU1fQ0N4Q2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCwgVElNX0NDeF9ESVNBQkxFKTsKLQotICBpZiAoSVNfVElNX0JSRUFLX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSAhPSBSRVNFVCkKKyAgaWYgKHN0YXR1cyA9PSBIQUxfT0spCiAgIHsKLSAgICAvKiBEaXNhYmxlIHRoZSBNYWluIE91dHB1dCAqLwotICAgIF9fSEFMX1RJTV9NT0VfRElTQUJMRShodGltKTsKKyAgICAvKiBEaXNhYmxlIHRoZSBDYXB0dXJlIGNvbXBhcmUgY2hhbm5lbCAqLworICAgIFRJTV9DQ3hDaGFubmVsQ21kKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsLCBUSU1fQ0N4X0RJU0FCTEUpOworCisgICAgaWYgKElTX1RJTV9CUkVBS19JTlNUQU5DRShodGltLT5JbnN0YW5jZSkgIT0gUkVTRVQpCisgICAgeworICAgICAgLyogRGlzYWJsZSB0aGUgTWFpbiBPdXRwdXQgKi8KKyAgICAgIF9fSEFMX1RJTV9NT0VfRElTQUJMRShodGltKTsKKyAgICB9CisKKyAgICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCisgICAgX19IQUxfVElNX0RJU0FCTEUoaHRpbSk7CisKKyAgICAvKiBTZXQgdGhlIFRJTSBjaGFubmVsIHN0YXRlICovCisgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CiAgIH0KIAotICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCi0gIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOwotCi0gIC8qIFNldCB0aGUgVElNIGNoYW5uZWwgc3RhdGUgKi8KLSAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7Ci0KICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwotICByZXR1cm4gSEFMX09LOworICByZXR1cm4gc3RhdHVzOwogfQogCiAvKioKQEAgLTE2NzcsNiArMTcxMyw3IEBACiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX1BXTV9TdGFydF9ETUEoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IENoYW5uZWwsIGNvbnN0IHVpbnQzMl90ICpwRGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBMZW5ndGgpCiB7CisgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKICAgdWludDMyX3QgdG1wc21jcjsKIAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwpAQCAtMTY4OSw3ICsxNzI2LDcgQEAKICAgfQogICBlbHNlIGlmIChUSU1fQ0hBTk5FTF9TVEFURV9HRVQoaHRpbSwgQ2hhbm5lbCkgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQogICB7Ci0gICAgaWYgKChwRGF0YSA9PSBOVUxMKSAmJiAoTGVuZ3RoID4gMFUpKQorICAgIGlmICgocERhdGEgPT0gTlVMTCkgfHwgKExlbmd0aCA9PSAwVSkpCiAgICAgewogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICB9CkBAIC0xNzE2LDcgKzE3NTMsNyBAQAogCiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBzdHJlYW0gKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzFdLCAodWludDMyX3QpcERhdGEsICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkNDUjEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoKSAhPSBIQUxfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICBMZW5ndGgpICE9IEhBTF9PSykKICAgICAgIHsKICAgICAgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLwogICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwpAQCAtMTczOCw3ICsxNzc1LDcgQEAKIAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgc3RyZWFtICovCiAgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MyXSwgKHVpbnQzMl90KXBEYXRhLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5DQ1IyLAotICAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aCkgIT0gSEFMX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CiAgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKQEAgLTE3NTksNyArMTc5Niw3IEBACiAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIHN0cmVhbSAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDM10sICh1aW50MzJfdClwRGF0YSwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+Q0NSMywKLSAgICAgICAgICAgICAgICAgICAgICAgICBMZW5ndGgpICE9IEhBTF9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aCkgIT0gSEFMX09LKQogICAgICAgewogICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CkBAIC0xNzgwLDcgKzE4MTcsNyBAQAogCiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBzdHJlYW0gKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzRdLCAodWludDMyX3QpcERhdGEsICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkNDUjQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoKSAhPSBIQUxfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICBMZW5ndGgpICE9IEhBTF9PSykKICAgICAgIHsKICAgICAgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLwogICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwpAQCAtMTc5MSwzNCArMTgyOCwzOCBAQAogICAgIH0KIAogICAgIGRlZmF1bHQ6CisgICAgICBzdGF0dXMgPSBIQUxfRVJST1I7CiAgICAgICBicmVhazsKICAgfQogCi0gIC8qIEVuYWJsZSB0aGUgQ2FwdHVyZSBjb21wYXJlIGNoYW5uZWwgKi8KLSAgVElNX0NDeENoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwsIFRJTV9DQ3hfRU5BQkxFKTsKLQotICBpZiAoSVNfVElNX0JSRUFLX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSAhPSBSRVNFVCkKKyAgaWYgKHN0YXR1cyA9PSBIQUxfT0spCiAgIHsKLSAgICAvKiBFbmFibGUgdGhlIG1haW4gb3V0cHV0ICovCi0gICAgX19IQUxfVElNX01PRV9FTkFCTEUoaHRpbSk7Ci0gIH0KKyAgICAvKiBFbmFibGUgdGhlIENhcHR1cmUgY29tcGFyZSBjaGFubmVsICovCisgICAgVElNX0NDeENoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwsIFRJTV9DQ3hfRU5BQkxFKTsKIAotICAvKiBFbmFibGUgdGhlIFBlcmlwaGVyYWwsIGV4Y2VwdCBpbiB0cmlnZ2VyIG1vZGUgd2hlcmUgZW5hYmxlIGlzIGF1dG9tYXRpY2FsbHkgZG9uZSB3aXRoIHRyaWdnZXIgKi8KLSAgaWYgKElTX1RJTV9TTEFWRV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpCi0gIHsKLSAgICB0bXBzbWNyID0gaHRpbS0+SW5zdGFuY2UtPlNNQ1IgJiBUSU1fU01DUl9TTVM7Ci0gICAgaWYgKCFJU19USU1fU0xBVkVNT0RFX1RSSUdHRVJfRU5BQkxFRCh0bXBzbWNyKSkKKyAgICBpZiAoSVNfVElNX0JSRUFLX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSAhPSBSRVNFVCkKKyAgICB7CisgICAgICAvKiBFbmFibGUgdGhlIG1haW4gb3V0cHV0ICovCisgICAgICBfX0hBTF9USU1fTU9FX0VOQUJMRShodGltKTsKKyAgICB9CisKKyAgICAvKiBFbmFibGUgdGhlIFBlcmlwaGVyYWwsIGV4Y2VwdCBpbiB0cmlnZ2VyIG1vZGUgd2hlcmUgZW5hYmxlIGlzIGF1dG9tYXRpY2FsbHkgZG9uZSB3aXRoIHRyaWdnZXIgKi8KKyAgICBpZiAoSVNfVElNX1NMQVZFX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSkKKyAgICB7CisgICAgICB0bXBzbWNyID0gaHRpbS0+SW5zdGFuY2UtPlNNQ1IgJiBUSU1fU01DUl9TTVM7CisgICAgICBpZiAoIUlTX1RJTV9TTEFWRU1PREVfVFJJR0dFUl9FTkFCTEVEKHRtcHNtY3IpKQorICAgICAgeworICAgICAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOworICAgICAgfQorICAgIH0KKyAgICBlbHNlCiAgICAgewogICAgICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKICAgICB9CiAgIH0KLSAgZWxzZQotICB7Ci0gICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKLSAgfQogCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KLSAgcmV0dXJuIEhBTF9PSzsKKyAgcmV0dXJuIHN0YXR1czsKIH0KIAogLyoqCkBAIC0xODM0LDYgKzE4NzUsOCBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9QV01fU3RvcF9ETUEoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IENoYW5uZWwpCiB7CisgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKKwogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDWF9JTlNUQU5DRShodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCkpOwogCkBAIC0xODcyLDI2ICsxOTE1LDMwIEBACiAgICAgfQogCiAgICAgZGVmYXVsdDoKKyAgICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKICAgICAgIGJyZWFrOwogICB9CiAKLSAgLyogRGlzYWJsZSB0aGUgQ2FwdHVyZSBjb21wYXJlIGNoYW5uZWwgKi8KLSAgVElNX0NDeENoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwsIFRJTV9DQ3hfRElTQUJMRSk7Ci0KLSAgaWYgKElTX1RJTV9CUkVBS19JTlNUQU5DRShodGltLT5JbnN0YW5jZSkgIT0gUkVTRVQpCisgIGlmIChzdGF0dXMgPT0gSEFMX09LKQogICB7Ci0gICAgLyogRGlzYWJsZSB0aGUgTWFpbiBPdXRwdXQgKi8KLSAgICBfX0hBTF9USU1fTU9FX0RJU0FCTEUoaHRpbSk7CisgICAgLyogRGlzYWJsZSB0aGUgQ2FwdHVyZSBjb21wYXJlIGNoYW5uZWwgKi8KKyAgICBUSU1fQ0N4Q2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCwgVElNX0NDeF9ESVNBQkxFKTsKKworICAgIGlmIChJU19USU1fQlJFQUtfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpICE9IFJFU0VUKQorICAgIHsKKyAgICAgIC8qIERpc2FibGUgdGhlIE1haW4gT3V0cHV0ICovCisgICAgICBfX0hBTF9USU1fTU9FX0RJU0FCTEUoaHRpbSk7CisgICAgfQorCisgICAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLworICAgIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOworCisgICAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbCBzdGF0ZSAqLworICAgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOwogICB9CiAKLSAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwotICBfX0hBTF9USU1fRElTQUJMRShodGltKTsKLQotICAvKiBTZXQgdGhlIFRJTSBjaGFubmVsIHN0YXRlICovCi0gIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOwotCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KLSAgcmV0dXJuIEhBTF9PSzsKKyAgcmV0dXJuIHN0YXR1czsKIH0KIAogLyoqCkBAIC0xOTQxLDYgKzE5ODgsNyBAQAogICBhc3NlcnRfcGFyYW0oSVNfVElNX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fQ09VTlRFUl9NT0RFKGh0aW0tPkluaXQuQ291bnRlck1vZGUpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DTE9DS0RJVklTSU9OX0RJVihodGltLT5Jbml0LkNsb2NrRGl2aXNpb24pKTsKKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9QRVJJT0QoaHRpbSwgaHRpbS0+SW5pdC5QZXJpb2QpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9BVVRPUkVMT0FEX1BSRUxPQUQoaHRpbS0+SW5pdC5BdXRvUmVsb2FkUHJlbG9hZCkpOwogCiAgIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX1JFU0VUKQpAQCAtMjE1MSw3ICsyMTk5LDkgQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fSUNfU3RhcnRfSVQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IENoYW5uZWwpCiB7CisgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKICAgdWludDMyX3QgdG1wc21jcjsKKwogICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgY2hhbm5lbF9zdGF0ZSA9IFRJTV9DSEFOTkVMX1NUQVRFX0dFVChodGltLCBDaGFubmVsKTsKICAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGNvbXBsZW1lbnRhcnlfY2hhbm5lbF9zdGF0ZSA9IFRJTV9DSEFOTkVMX05fU1RBVEVfR0VUKGh0aW0sIENoYW5uZWwpOwogCkBAIC0yMjAwLDI3ICsyMjUwLDMyIEBACiAgICAgfQogCiAgICAgZGVmYXVsdDoKKyAgICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKICAgICAgIGJyZWFrOwogICB9Ci0gIC8qIEVuYWJsZSB0aGUgSW5wdXQgQ2FwdHVyZSBjaGFubmVsICovCi0gIFRJTV9DQ3hDaGFubmVsQ21kKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsLCBUSU1fQ0N4X0VOQUJMRSk7CiAKLSAgLyogRW5hYmxlIHRoZSBQZXJpcGhlcmFsLCBleGNlcHQgaW4gdHJpZ2dlciBtb2RlIHdoZXJlIGVuYWJsZSBpcyBhdXRvbWF0aWNhbGx5IGRvbmUgd2l0aCB0cmlnZ2VyICovCi0gIGlmIChJU19USU1fU0xBVkVfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKQorICBpZiAoc3RhdHVzID09IEhBTF9PSykKICAgewotICAgIHRtcHNtY3IgPSBodGltLT5JbnN0YW5jZS0+U01DUiAmIFRJTV9TTUNSX1NNUzsKLSAgICBpZiAoIUlTX1RJTV9TTEFWRU1PREVfVFJJR0dFUl9FTkFCTEVEKHRtcHNtY3IpKQorICAgIC8qIEVuYWJsZSB0aGUgSW5wdXQgQ2FwdHVyZSBjaGFubmVsICovCisgICAgVElNX0NDeENoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwsIFRJTV9DQ3hfRU5BQkxFKTsKKworICAgIC8qIEVuYWJsZSB0aGUgUGVyaXBoZXJhbCwgZXhjZXB0IGluIHRyaWdnZXIgbW9kZSB3aGVyZSBlbmFibGUgaXMgYXV0b21hdGljYWxseSBkb25lIHdpdGggdHJpZ2dlciAqLworICAgIGlmIChJU19USU1fU0xBVkVfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKQorICAgIHsKKyAgICAgIHRtcHNtY3IgPSBodGltLT5JbnN0YW5jZS0+U01DUiAmIFRJTV9TTUNSX1NNUzsKKyAgICAgIGlmICghSVNfVElNX1NMQVZFTU9ERV9UUklHR0VSX0VOQUJMRUQodG1wc21jcikpCisgICAgICB7CisgICAgICAgIF9fSEFMX1RJTV9FTkFCTEUoaHRpbSk7CisgICAgICB9CisgICAgfQorICAgIGVsc2UKICAgICB7CiAgICAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOwogICAgIH0KICAgfQotICBlbHNlCi0gIHsKLSAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOwotICB9CiAKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwotICByZXR1cm4gSEFMX09LOworICByZXR1cm4gc3RhdHVzOwogfQogCiAvKioKQEAgLTIyMzYsNiArMjI5MSw4IEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX0lDX1N0b3BfSVQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IENoYW5uZWwpCiB7CisgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKKwogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDWF9JTlNUQU5DRShodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCkpOwogCkBAIC0yMjcwLDIxICsyMzI3LDI1IEBACiAgICAgfQogCiAgICAgZGVmYXVsdDoKKyAgICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKICAgICAgIGJyZWFrOwogICB9CiAKLSAgLyogRGlzYWJsZSB0aGUgSW5wdXQgQ2FwdHVyZSBjaGFubmVsICovCi0gIFRJTV9DQ3hDaGFubmVsQ21kKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsLCBUSU1fQ0N4X0RJU0FCTEUpOworICBpZiAoc3RhdHVzID09IEhBTF9PSykKKyAgeworICAgIC8qIERpc2FibGUgdGhlIElucHV0IENhcHR1cmUgY2hhbm5lbCAqLworICAgIFRJTV9DQ3hDaGFubmVsQ21kKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsLCBUSU1fQ0N4X0RJU0FCTEUpOwogCi0gIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KLSAgX19IQUxfVElNX0RJU0FCTEUoaHRpbSk7CisgICAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLworICAgIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOwogCi0gIC8qIFNldCB0aGUgVElNIGNoYW5uZWwgc3RhdGUgKi8KLSAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7Ci0gIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgICAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbCBzdGF0ZSAqLworICAgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICAgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIH0KIAogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCi0gIHJldHVybiBIQUxfT0s7CisgIHJldHVybiBzdGF0dXM7CiB9CiAKIC8qKgpAQCAtMjMwMiw3ICsyMzYzLDkgQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fSUNfU3RhcnRfRE1BKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCAqcERhdGEsIHVpbnQxNl90IExlbmd0aCkKIHsKKyAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwogICB1aW50MzJfdCB0bXBzbWNyOworCiAgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjaGFubmVsX3N0YXRlID0gVElNX0NIQU5ORUxfU1RBVEVfR0VUKGh0aW0sIENoYW5uZWwpOwogICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgY29tcGxlbWVudGFyeV9jaGFubmVsX3N0YXRlID0gVElNX0NIQU5ORUxfTl9TVEFURV9HRVQoaHRpbSwgQ2hhbm5lbCk7CiAKQEAgLTIzMTksNyArMjM4Miw3IEBACiAgIGVsc2UgaWYgKChjaGFubmVsX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKICAgICAgICAgICAgJiYgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpKQogICB7Ci0gICAgaWYgKChwRGF0YSA9PSBOVUxMKSAmJiAoTGVuZ3RoID4gMFUpKQorICAgIGlmICgocERhdGEgPT0gTlVMTCkgfHwgKExlbmd0aCA9PSAwVSkpCiAgICAgewogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICB9CkBAIC0yMzM3LDIwICsyNDAwLDYgQEAKICAgLyogRW5hYmxlIHRoZSBJbnB1dCBDYXB0dXJlIGNoYW5uZWwgKi8KICAgVElNX0NDeENoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwsIFRJTV9DQ3hfRU5BQkxFKTsKIAotICAvKiBFbmFibGUgdGhlIFBlcmlwaGVyYWwsIGV4Y2VwdCBpbiB0cmlnZ2VyIG1vZGUgd2hlcmUgZW5hYmxlIGlzIGF1dG9tYXRpY2FsbHkgZG9uZSB3aXRoIHRyaWdnZXIgKi8KLSAgaWYgKElTX1RJTV9TTEFWRV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpCi0gIHsKLSAgICB0bXBzbWNyID0gaHRpbS0+SW5zdGFuY2UtPlNNQ1IgJiBUSU1fU01DUl9TTVM7Ci0gICAgaWYgKCFJU19USU1fU0xBVkVNT0RFX1RSSUdHRVJfRU5BQkxFRCh0bXBzbWNyKSkKLSAgICB7Ci0gICAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOwotICAgIH0KLSAgfQotICBlbHNlCi0gIHsKLSAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOwotICB9Ci0KICAgc3dpdGNoIChDaGFubmVsKQogICB7CiAgICAgY2FzZSBUSU1fQ0hBTk5FTF8xOgpAQCAtMjM2NCw3ICsyNDEzLDcgQEAKIAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgc3RyZWFtICovCiAgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MxXSwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+Q0NSMSwgKHVpbnQzMl90KXBEYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aCkgIT0gSEFMX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CiAgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKQEAgLTIzODUsNyArMjQzNCw3IEBACiAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIHN0cmVhbSAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMl0sICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkNDUjIsICh1aW50MzJfdClwRGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBMZW5ndGgpICE9IEhBTF9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aCkgIT0gSEFMX09LKQogICAgICAgewogICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CkBAIC0yNDA2LDcgKzI0NTUsNyBAQAogCiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBzdHJlYW0gKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzNdLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5DQ1IzLCAodWludDMyX3QpcERhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoKSAhPSBIQUxfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICBMZW5ndGgpICE9IEhBTF9PSykKICAgICAgIHsKICAgICAgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLwogICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwpAQCAtMjQyNyw3ICsyNDc2LDcgQEAKIAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgc3RyZWFtICovCiAgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0M0XSwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+Q0NSNCwgKHVpbnQzMl90KXBEYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aCkgIT0gSEFMX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CiAgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKQEAgLTI0MzgsMTEgKzI0ODcsMjYgQEAKICAgICB9CiAKICAgICBkZWZhdWx0OgorICAgICAgc3RhdHVzID0gSEFMX0VSUk9SOwogICAgICAgYnJlYWs7CiAgIH0KIAorICAvKiBFbmFibGUgdGhlIFBlcmlwaGVyYWwsIGV4Y2VwdCBpbiB0cmlnZ2VyIG1vZGUgd2hlcmUgZW5hYmxlIGlzIGF1dG9tYXRpY2FsbHkgZG9uZSB3aXRoIHRyaWdnZXIgKi8KKyAgaWYgKElTX1RJTV9TTEFWRV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpCisgIHsKKyAgICB0bXBzbWNyID0gaHRpbS0+SW5zdGFuY2UtPlNNQ1IgJiBUSU1fU01DUl9TTVM7CisgICAgaWYgKCFJU19USU1fU0xBVkVNT0RFX1RSSUdHRVJfRU5BQkxFRCh0bXBzbWNyKSkKKyAgICB7CisgICAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOworICAgIH0KKyAgfQorICBlbHNlCisgIHsKKyAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOworICB9CisKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwotICByZXR1cm4gSEFMX09LOworICByZXR1cm4gc3RhdHVzOwogfQogCiAvKioKQEAgLTI0NTgsNiArMjUyMiw4IEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX0lDX1N0b3BfRE1BKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBDaGFubmVsKQogeworICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CisKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DQ1hfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9ETUFfQ0NfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKQEAgLTI1MDAsMTggKzI1NjYsMjIgQEAKICAgICB9CiAKICAgICBkZWZhdWx0OgorICAgICAgc3RhdHVzID0gSEFMX0VSUk9SOwogICAgICAgYnJlYWs7CiAgIH0KIAotICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCi0gIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOworICBpZiAoc3RhdHVzID09IEhBTF9PSykKKyAgeworICAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KKyAgICBfX0hBTF9USU1fRElTQUJMRShodGltKTsKIAotICAvKiBTZXQgdGhlIFRJTSBjaGFubmVsIHN0YXRlICovCi0gIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOwotICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICAgIC8qIFNldCB0aGUgVElNIGNoYW5uZWwgc3RhdGUgKi8KKyAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICB9CiAKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwotICByZXR1cm4gSEFMX09LOworICByZXR1cm4gc3RhdHVzOwogfQogLyoqCiAgICogQH0KQEAgLTI1NjgsNiArMjYzOCw3IEBACiAgIGFzc2VydF9wYXJhbShJU19USU1fQ09VTlRFUl9NT0RFKGh0aW0tPkluaXQuQ291bnRlck1vZGUpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DTE9DS0RJVklTSU9OX0RJVihodGltLT5Jbml0LkNsb2NrRGl2aXNpb24pKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9PUE1fTU9ERShPbmVQdWxzZU1vZGUpKTsKKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9QRVJJT0QoaHRpbSwgaHRpbS0+SW5pdC5QZXJpb2QpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9BVVRPUkVMT0FEX1BSRUxPQUQoaHRpbS0+SW5pdC5BdXRvUmVsb2FkUHJlbG9hZCkpOwogCiAgIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX1JFU0VUKQpAQCAtMjk0NSw3ICszMDE2LDcgQEAKICAgKiBAcGFyYW0gIHNDb25maWcgVElNIEVuY29kZXIgSW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX0VuY29kZXJfSW5pdChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgIFRJTV9FbmNvZGVyX0luaXRUeXBlRGVmICpzQ29uZmlnKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9FbmNvZGVyX0luaXQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIGNvbnN0IFRJTV9FbmNvZGVyX0luaXRUeXBlRGVmICpzQ29uZmlnKQogewogICB1aW50MzJfdCB0bXBzbWNyOwogICB1aW50MzJfdCB0bXBjY21yMTsKQEAgLTI5NzEsNiArMzA0Miw3IEBACiAgIGFzc2VydF9wYXJhbShJU19USU1fSUNfUFJFU0NBTEVSKHNDb25maWctPklDMlByZXNjYWxlcikpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0lDX0ZJTFRFUihzQ29uZmlnLT5JQzFGaWx0ZXIpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9JQ19GSUxURVIoc0NvbmZpZy0+SUMyRmlsdGVyKSk7CisgIGFzc2VydF9wYXJhbShJU19USU1fUEVSSU9EKGh0aW0sIGh0aW0tPkluaXQuUGVyaW9kKSk7CiAKICAgaWYgKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfUkVTRVQpCiAgIHsKQEAgLTM0ODAsNyArMzU1Miw3IEBACiAgICAgZWxzZSBpZiAoKGNoYW5uZWxfMV9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCiAgICAgICAgICAgICAgJiYgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8xX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkpCiAgICAgewotICAgICAgaWYgKChwRGF0YTEgPT0gTlVMTCkgJiYgKExlbmd0aCA+IDBVKSkKKyAgICAgIGlmICgocERhdGExID09IE5VTEwpIHx8IChMZW5ndGggPT0gMFUpKQogICAgICAgewogICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgICAgfQpAQCAtMzUwNSw3ICszNTc3LDcgQEAKICAgICBlbHNlIGlmICgoY2hhbm5lbF8yX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKICAgICAgICAgICAgICAmJiAoY29tcGxlbWVudGFyeV9jaGFubmVsXzJfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKSkKICAgICB7Ci0gICAgICBpZiAoKHBEYXRhMiA9PSBOVUxMKSAmJiAoTGVuZ3RoID4gMFUpKQorICAgICAgaWYgKChwRGF0YTIgPT0gTlVMTCkgfHwgKExlbmd0aCA9PSAwVSkpCiAgICAgICB7CiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgICB9CkBAIC0zNTM0LDcgKzM2MDYsNyBAQAogICAgICAgICAgICAgICYmIChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMV9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCiAgICAgICAgICAgICAgJiYgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8yX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkpCiAgICAgewotICAgICAgaWYgKCgoKHBEYXRhMSA9PSBOVUxMKSB8fCAocERhdGEyID09IE5VTEwpKSkgJiYgKExlbmd0aCA+IDBVKSkKKyAgICAgIGlmICgoKChwRGF0YTEgPT0gTlVMTCkgfHwgKHBEYXRhMiA9PSBOVUxMKSkpIHx8IChMZW5ndGggPT0gMFUpKQogICAgICAgewogICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgICAgfQpAQCAtMzU2NSw3ICszNjM3LDcgQEAKIAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgc3RyZWFtICovCiAgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MxXSwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+Q0NSMSwgKHVpbnQzMl90KXBEYXRhMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBMZW5ndGgpICE9IEhBTF9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aCkgIT0gSEFMX09LKQogICAgICAgewogICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CkBAIC0zNTczLDExICszNjQ1LDEyIEBACiAgICAgICAvKiBFbmFibGUgdGhlIFRJTSBJbnB1dCBDYXB0dXJlIERNQSByZXF1ZXN0ICovCiAgICAgICBfX0hBTF9USU1fRU5BQkxFX0RNQShodGltLCBUSU1fRE1BX0NDMSk7CiAKKyAgICAgIC8qIEVuYWJsZSB0aGUgQ2FwdHVyZSBjb21wYXJlIGNoYW5uZWwgKi8KKyAgICAgIFRJTV9DQ3hDaGFubmVsQ21kKGh0aW0tPkluc3RhbmNlLCBUSU1fQ0hBTk5FTF8xLCBUSU1fQ0N4X0VOQUJMRSk7CisKICAgICAgIC8qIEVuYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwogICAgICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKIAotICAgICAgLyogRW5hYmxlIHRoZSBDYXB0dXJlIGNvbXBhcmUgY2hhbm5lbCAqLwotICAgICAgVElNX0NDeENoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIFRJTV9DSEFOTkVMXzEsIFRJTV9DQ3hfRU5BQkxFKTsKICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMzU5MSw3ICszNjY0LDcgQEAKICAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzJdLT5YZmVyRXJyb3JDYWxsYmFjayA9IFRJTV9ETUFFcnJvcjsKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIHN0cmVhbSAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMl0sICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkNDUjIsICh1aW50MzJfdClwRGF0YTIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoKSAhPSBIQUxfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICBMZW5ndGgpICE9IEhBTF9PSykKICAgICAgIHsKICAgICAgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLwogICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwpAQCAtMzU5OSwxNSArMzY3MiwxNiBAQAogICAgICAgLyogRW5hYmxlIHRoZSBUSU0gSW5wdXQgQ2FwdHVyZSAgRE1BIHJlcXVlc3QgKi8KICAgICAgIF9fSEFMX1RJTV9FTkFCTEVfRE1BKGh0aW0sIFRJTV9ETUFfQ0MyKTsKIAorICAgICAgLyogRW5hYmxlIHRoZSBDYXB0dXJlIGNvbXBhcmUgY2hhbm5lbCAqLworICAgICAgVElNX0NDeENoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIFRJTV9DSEFOTkVMXzIsIFRJTV9DQ3hfRU5BQkxFKTsKKwogICAgICAgLyogRW5hYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgICAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOwogCi0gICAgICAvKiBFbmFibGUgdGhlIENhcHR1cmUgY29tcGFyZSBjaGFubmVsICovCi0gICAgICBUSU1fQ0N4Q2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgVElNX0NIQU5ORUxfMiwgVElNX0NDeF9FTkFCTEUpOwogICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgY2FzZSBUSU1fQ0hBTk5FTF9BTEw6CisgICAgZGVmYXVsdDoKICAgICB7CiAgICAgICAvKiBTZXQgdGhlIERNQSBjYXB0dXJlIGNhbGxiYWNrcyAqLwogICAgICAgaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMV0tPlhmZXJDcGx0Q2FsbGJhY2sgPSBUSU1fRE1BQ2FwdHVyZUNwbHQ7CkBAIC0zNjE4LDcgKzM2OTIsNyBAQAogCiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBzdHJlYW0gKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzFdLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5DQ1IxLCAodWludDMyX3QpcERhdGExLAotICAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aCkgIT0gSEFMX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CiAgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKQEAgLTM2MzMsMjcgKzM3MDcsMjYgQEAKIAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgc3RyZWFtICovCiAgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MyXSwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+Q0NSMiwgKHVpbnQzMl90KXBEYXRhMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBMZW5ndGgpICE9IEhBTF9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aCkgIT0gSEFMX09LKQogICAgICAgewogICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgICB9Ci0gICAgICAvKiBFbmFibGUgdGhlIFBlcmlwaGVyYWwgKi8KLSAgICAgIF9fSEFMX1RJTV9FTkFCTEUoaHRpbSk7Ci0KLSAgICAgIC8qIEVuYWJsZSB0aGUgQ2FwdHVyZSBjb21wYXJlIGNoYW5uZWwgKi8KLSAgICAgIFRJTV9DQ3hDaGFubmVsQ21kKGh0aW0tPkluc3RhbmNlLCBUSU1fQ0hBTk5FTF8xLCBUSU1fQ0N4X0VOQUJMRSk7Ci0gICAgICBUSU1fQ0N4Q2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgVElNX0NIQU5ORUxfMiwgVElNX0NDeF9FTkFCTEUpOwogCiAgICAgICAvKiBFbmFibGUgdGhlIFRJTSBJbnB1dCBDYXB0dXJlICBETUEgcmVxdWVzdCAqLwogICAgICAgX19IQUxfVElNX0VOQUJMRV9ETUEoaHRpbSwgVElNX0RNQV9DQzEpOwogICAgICAgLyogRW5hYmxlIHRoZSBUSU0gSW5wdXQgQ2FwdHVyZSAgRE1BIHJlcXVlc3QgKi8KICAgICAgIF9fSEFMX1RJTV9FTkFCTEVfRE1BKGh0aW0sIFRJTV9ETUFfQ0MyKTsKKworICAgICAgLyogRW5hYmxlIHRoZSBDYXB0dXJlIGNvbXBhcmUgY2hhbm5lbCAqLworICAgICAgVElNX0NDeENoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIFRJTV9DSEFOTkVMXzEsIFRJTV9DQ3hfRU5BQkxFKTsKKyAgICAgIFRJTV9DQ3hDaGFubmVsQ21kKGh0aW0tPkluc3RhbmNlLCBUSU1fQ0hBTk5FTF8yLCBUSU1fQ0N4X0VOQUJMRSk7CisKKyAgICAgIC8qIEVuYWJsZSB0aGUgUGVyaXBoZXJhbCAqLworICAgICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKKwogICAgICAgYnJlYWs7CiAgICAgfQotCi0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwogICB9CiAKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwpAQCAtMzk2Niw2ICs0MDM5LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUSU1fT0NfSW5pdFR5cGVEZWYgKnNDb25maWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgQ2hhbm5lbCkKIHsKKyAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOworCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fQ0hBTk5FTFMoQ2hhbm5lbCkpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX09DX01PREUoc0NvbmZpZy0+T0NNb2RlKSk7CkBAIC00MDE3LDEyICs0MDkyLDEzIEBACiAgICAgfQogCiAgICAgZGVmYXVsdDoKKyAgICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKICAgICAgIGJyZWFrOwogICB9CiAKICAgX19IQUxfVU5MT0NLKGh0aW0pOwogCi0gIHJldHVybiBIQUxfT0s7CisgIHJldHVybiBzdGF0dXM7CiB9CiAKIC8qKgpAQCAtNDA0MCw2ICs0MTE2LDggQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fSUNfQ29uZmlnQ2hhbm5lbChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgY29uc3QgVElNX0lDX0luaXRUeXBlRGVmICpzQ29uZmlnLCB1aW50MzJfdCBDaGFubmVsKQogeworICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CisKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DQzFfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9JQ19QT0xBUklUWShzQ29uZmlnLT5JQ1BvbGFyaXR5KSk7CkBAIC00MDk2LDcgKzQxNzQsNyBAQAogICAgIC8qIFNldCB0aGUgSUMzUFNDIHZhbHVlICovCiAgICAgaHRpbS0+SW5zdGFuY2UtPkNDTVIyIHw9IHNDb25maWctPklDUHJlc2NhbGVyOwogICB9Ci0gIGVsc2UKKyAgZWxzZSBpZiAoQ2hhbm5lbCA9PSBUSU1fQ0hBTk5FTF80KQogICB7CiAgICAgLyogVEk0IENvbmZpZ3VyYXRpb24gKi8KICAgICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDNF9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOwpAQCAtNDExMiwxMCArNDE5MCwxNCBAQAogICAgIC8qIFNldCB0aGUgSUM0UFNDIHZhbHVlICovCiAgICAgaHRpbS0+SW5zdGFuY2UtPkNDTVIyIHw9IChzQ29uZmlnLT5JQ1ByZXNjYWxlciA8PCA4VSk7CiAgIH0KKyAgZWxzZQorICB7CisgICAgc3RhdHVzID0gSEFMX0VSUk9SOworICB9CiAKICAgX19IQUxfVU5MT0NLKGh0aW0pOwogCi0gIHJldHVybiBIQUxfT0s7CisgIHJldHVybiBzdGF0dXM7CiB9CiAKIC8qKgpAQCAtNDEzNSw2ICs0MjE3LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVElNX09DX0luaXRUeXBlRGVmICpzQ29uZmlnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBDaGFubmVsKQogeworICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CisKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DSEFOTkVMUyhDaGFubmVsKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fUFdNX01PREUoc0NvbmZpZy0+T0NNb2RlKSk7CkBAIC00MjE1LDEyICs0Mjk5LDEzIEBACiAgICAgfQogCiAgICAgZGVmYXVsdDoKKyAgICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKICAgICAgIGJyZWFrOwogICB9CiAKICAgX19IQUxfVU5MT0NLKGh0aW0pOwogCi0gIHJldHVybiBIQUxfT0s7CisgIHJldHVybiBzdGF0dXM7CiB9CiAKIC8qKgpAQCAtNDI0NSw2ICs0MzMwLDcgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fT25lUHVsc2VfQ29uZmlnQ2hhbm5lbChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgIFRJTV9PbmVQdWxzZV9Jbml0VHlwZURlZiAqc0NvbmZpZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBPdXRwdXRDaGFubmVsLCAgdWludDMyX3QgSW5wdXRDaGFubmVsKQogeworICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CiAgIFRJTV9PQ19Jbml0VHlwZURlZiB0ZW1wMTsKIAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwpAQCAtNDI3NSw2ICs0MzYxLDcgQEAKICAgICAgICAgVElNX09DMV9TZXRDb25maWcoaHRpbS0+SW5zdGFuY2UsICZ0ZW1wMSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgfQorCiAgICAgICBjYXNlIFRJTV9DSEFOTkVMXzI6CiAgICAgICB7CiAgICAgICAgIGFzc2VydF9wYXJhbShJU19USU1fQ0MyX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CkBAIC00MjgyLDYwICs0MzY5LDY3IEBACiAgICAgICAgIFRJTV9PQzJfU2V0Q29uZmlnKGh0aW0tPkluc3RhbmNlLCAmdGVtcDEpOwogICAgICAgICBicmVhazsKICAgICAgIH0KKwogICAgICAgZGVmYXVsdDoKKyAgICAgICAgc3RhdHVzID0gSEFMX0VSUk9SOwogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBzd2l0Y2ggKElucHV0Q2hhbm5lbCkKKyAgICBpZiAoc3RhdHVzID09IEhBTF9PSykKICAgICB7Ci0gICAgICBjYXNlIFRJTV9DSEFOTkVMXzE6CisgICAgICBzd2l0Y2ggKElucHV0Q2hhbm5lbCkKICAgICAgIHsKLSAgICAgICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DQzFfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKKyAgICAgICAgY2FzZSBUSU1fQ0hBTk5FTF8xOgorICAgICAgICB7CisgICAgICAgICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DQzFfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKIAotICAgICAgICBUSU1fVEkxX1NldENvbmZpZyhodGltLT5JbnN0YW5jZSwgc0NvbmZpZy0+SUNQb2xhcml0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc0NvbmZpZy0+SUNTZWxlY3Rpb24sIHNDb25maWctPklDRmlsdGVyKTsKKyAgICAgICAgICBUSU1fVEkxX1NldENvbmZpZyhodGltLT5JbnN0YW5jZSwgc0NvbmZpZy0+SUNQb2xhcml0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzQ29uZmlnLT5JQ1NlbGVjdGlvbiwgc0NvbmZpZy0+SUNGaWx0ZXIpOwogCi0gICAgICAgIC8qIFJlc2V0IHRoZSBJQzFQU0MgQml0cyAqLwotICAgICAgICBodGltLT5JbnN0YW5jZS0+Q0NNUjEgJj0gflRJTV9DQ01SMV9JQzFQU0M7CisgICAgICAgICAgLyogUmVzZXQgdGhlIElDMVBTQyBCaXRzICovCisgICAgICAgICAgaHRpbS0+SW5zdGFuY2UtPkNDTVIxICY9IH5USU1fQ0NNUjFfSUMxUFNDOwogCi0gICAgICAgIC8qIFNlbGVjdCB0aGUgVHJpZ2dlciBzb3VyY2UgKi8KLSAgICAgICAgaHRpbS0+SW5zdGFuY2UtPlNNQ1IgJj0gflRJTV9TTUNSX1RTOwotICAgICAgICBodGltLT5JbnN0YW5jZS0+U01DUiB8PSBUSU1fVFNfVEkxRlAxOworICAgICAgICAgIC8qIFNlbGVjdCB0aGUgVHJpZ2dlciBzb3VyY2UgKi8KKyAgICAgICAgICBodGltLT5JbnN0YW5jZS0+U01DUiAmPSB+VElNX1NNQ1JfVFM7CisgICAgICAgICAgaHRpbS0+SW5zdGFuY2UtPlNNQ1IgfD0gVElNX1RTX1RJMUZQMTsKIAotICAgICAgICAvKiBTZWxlY3QgdGhlIFNsYXZlIE1vZGUgKi8KLSAgICAgICAgaHRpbS0+SW5zdGFuY2UtPlNNQ1IgJj0gflRJTV9TTUNSX1NNUzsKLSAgICAgICAgaHRpbS0+SW5zdGFuY2UtPlNNQ1IgfD0gVElNX1NMQVZFTU9ERV9UUklHR0VSOwotICAgICAgICBicmVhazsKKyAgICAgICAgICAvKiBTZWxlY3QgdGhlIFNsYXZlIE1vZGUgKi8KKyAgICAgICAgICBodGltLT5JbnN0YW5jZS0+U01DUiAmPSB+VElNX1NNQ1JfU01TOworICAgICAgICAgIGh0aW0tPkluc3RhbmNlLT5TTUNSIHw9IFRJTV9TTEFWRU1PREVfVFJJR0dFUjsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgVElNX0NIQU5ORUxfMjoKKyAgICAgICAgeworICAgICAgICAgIGFzc2VydF9wYXJhbShJU19USU1fQ0MyX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CisKKyAgICAgICAgICBUSU1fVEkyX1NldENvbmZpZyhodGltLT5JbnN0YW5jZSwgc0NvbmZpZy0+SUNQb2xhcml0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzQ29uZmlnLT5JQ1NlbGVjdGlvbiwgc0NvbmZpZy0+SUNGaWx0ZXIpOworCisgICAgICAgICAgLyogUmVzZXQgdGhlIElDMlBTQyBCaXRzICovCisgICAgICAgICAgaHRpbS0+SW5zdGFuY2UtPkNDTVIxICY9IH5USU1fQ0NNUjFfSUMyUFNDOworCisgICAgICAgICAgLyogU2VsZWN0IHRoZSBUcmlnZ2VyIHNvdXJjZSAqLworICAgICAgICAgIGh0aW0tPkluc3RhbmNlLT5TTUNSICY9IH5USU1fU01DUl9UUzsKKyAgICAgICAgICBodGltLT5JbnN0YW5jZS0+U01DUiB8PSBUSU1fVFNfVEkyRlAyOworCisgICAgICAgICAgLyogU2VsZWN0IHRoZSBTbGF2ZSBNb2RlICovCisgICAgICAgICAgaHRpbS0+SW5zdGFuY2UtPlNNQ1IgJj0gflRJTV9TTUNSX1NNUzsKKyAgICAgICAgICBodGltLT5JbnN0YW5jZS0+U01DUiB8PSBUSU1fU0xBVkVNT0RFX1RSSUdHRVI7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKKyAgICAgICAgICBicmVhazsKICAgICAgIH0KLSAgICAgIGNhc2UgVElNX0NIQU5ORUxfMjoKLSAgICAgIHsKLSAgICAgICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DQzJfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKLQotICAgICAgICBUSU1fVEkyX1NldENvbmZpZyhodGltLT5JbnN0YW5jZSwgc0NvbmZpZy0+SUNQb2xhcml0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc0NvbmZpZy0+SUNTZWxlY3Rpb24sIHNDb25maWctPklDRmlsdGVyKTsKLQotICAgICAgICAvKiBSZXNldCB0aGUgSUMyUFNDIEJpdHMgKi8KLSAgICAgICAgaHRpbS0+SW5zdGFuY2UtPkNDTVIxICY9IH5USU1fQ0NNUjFfSUMyUFNDOwotCi0gICAgICAgIC8qIFNlbGVjdCB0aGUgVHJpZ2dlciBzb3VyY2UgKi8KLSAgICAgICAgaHRpbS0+SW5zdGFuY2UtPlNNQ1IgJj0gflRJTV9TTUNSX1RTOwotICAgICAgICBodGltLT5JbnN0YW5jZS0+U01DUiB8PSBUSU1fVFNfVEkyRlAyOwotCi0gICAgICAgIC8qIFNlbGVjdCB0aGUgU2xhdmUgTW9kZSAqLwotICAgICAgICBodGltLT5JbnN0YW5jZS0+U01DUiAmPSB+VElNX1NNQ1JfU01TOwotICAgICAgICBodGltLT5JbnN0YW5jZS0+U01DUiB8PSBUSU1fU0xBVkVNT0RFX1RSSUdHRVI7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVBRFk7CiAKICAgICBfX0hBTF9VTkxPQ0soaHRpbSk7CiAKLSAgICByZXR1cm4gSEFMX09LOworICAgIHJldHVybiBzdGF0dXM7CiAgIH0KICAgZWxzZQogICB7CkBAIC00Mzg0LDggKzQ0NzgsMTQgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fRE1BQnVyc3RfV3JpdGVTdGFydChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQnVyc3RCYXNlQWRkcmVzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBCdXJzdFJlcXVlc3RTcmMsIGNvbnN0IHVpbnQzMl90ICpCdXJzdEJ1ZmZlciwgdWludDMyX3QgIEJ1cnN0TGVuZ3RoKQogewotICByZXR1cm4gSEFMX1RJTV9ETUFCdXJzdF9NdWx0aVdyaXRlU3RhcnQoaHRpbSwgQnVyc3RCYXNlQWRkcmVzcywgQnVyc3RSZXF1ZXN0U3JjLCBCdXJzdEJ1ZmZlciwgQnVyc3RMZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEJ1cnN0TGVuZ3RoKSA+PiA4VSkgKyAxVSk7CisgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1czsKKworICBzdGF0dXMgPSBIQUxfVElNX0RNQUJ1cnN0X011bHRpV3JpdGVTdGFydChodGltLCBCdXJzdEJhc2VBZGRyZXNzLCBCdXJzdFJlcXVlc3RTcmMsIEJ1cnN0QnVmZmVyLCBCdXJzdExlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChCdXJzdExlbmd0aCkgPj4gOFUpICsgMVUpOworCisKKworICByZXR1cm4gc3RhdHVzOwogfQogCiAvKioKQEAgLTQ0MzEsNiArNDUzMSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBCdXJzdFJlcXVlc3RTcmMsIGNvbnN0IHVpbnQzMl90ICpCdXJzdEJ1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICBCdXJzdExlbmd0aCwgIHVpbnQzMl90ICBEYXRhTGVuZ3RoKQogeworICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CisKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9ETUFCVVJTVF9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0RNQV9CQVNFKEJ1cnN0QmFzZUFkZHJlc3MpKTsKQEAgLTQ0NTcsNiArNDU1OSw3IEBACiAgIHsKICAgICAvKiBub3RoaW5nIHRvIGRvICovCiAgIH0KKwogICBzd2l0Y2ggKEJ1cnN0UmVxdWVzdFNyYykKICAgewogICAgIGNhc2UgVElNX0RNQV9VUERBVEU6CkBAIC00NDcwLDcgKzQ1NzMsNyBAQAogCiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBzdHJlYW0gKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9VUERBVEVdLCAodWludDMyX3QpQnVyc3RCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+RE1BUiwgRGF0YUxlbmd0aCkgIT0gSEFMX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+RE1BUiwgRGF0YUxlbmd0aCkgIT0gSEFMX09LKQogICAgICAgewogICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CkBAIC00NDg4LDcgKzQ1OTEsNyBAQAogCiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBzdHJlYW0gKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzFdLCAodWludDMyX3QpQnVyc3RCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+RE1BUiwgRGF0YUxlbmd0aCkgIT0gSEFMX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+RE1BUiwgRGF0YUxlbmd0aCkgIT0gSEFMX09LKQogICAgICAgewogICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CkBAIC00NTA2LDcgKzQ2MDksNyBAQAogCiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBzdHJlYW0gKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzJdLCAodWludDMyX3QpQnVyc3RCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+RE1BUiwgRGF0YUxlbmd0aCkgIT0gSEFMX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+RE1BUiwgRGF0YUxlbmd0aCkgIT0gSEFMX09LKQogICAgICAgewogICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CkBAIC00NTI0LDcgKzQ2MjcsNyBAQAogCiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBzdHJlYW0gKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzNdLCAodWludDMyX3QpQnVyc3RCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+RE1BUiwgRGF0YUxlbmd0aCkgIT0gSEFMX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+RE1BUiwgRGF0YUxlbmd0aCkgIT0gSEFMX09LKQogICAgICAgewogICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CkBAIC00NTQyLDcgKzQ2NDUsNyBAQAogCiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBzdHJlYW0gKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzRdLCAodWludDMyX3QpQnVyc3RCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+RE1BUiwgRGF0YUxlbmd0aCkgIT0gSEFMX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+RE1BUiwgRGF0YUxlbmd0aCkgIT0gSEFMX09LKQogICAgICAgewogICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CkBAIC00NTYwLDcgKzQ2NjMsNyBAQAogCiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBzdHJlYW0gKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DT01NVVRBVElPTl0sICh1aW50MzJfdClCdXJzdEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5ETUFSLCBEYXRhTGVuZ3RoKSAhPSBIQUxfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5ETUFSLCBEYXRhTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CiAgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKQEAgLTQ1NzgsNyArNDY4MSw3IEBACiAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIHN0cmVhbSAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX1RSSUdHRVJdLCAodWludDMyX3QpQnVyc3RCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+RE1BUiwgRGF0YUxlbmd0aCkgIT0gSEFMX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+RE1BUiwgRGF0YUxlbmd0aCkgIT0gSEFMX09LKQogICAgICAgewogICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CkBAIC00NTg2LDE2ICs0Njg5LDIwIEBACiAgICAgICBicmVhazsKICAgICB9CiAgICAgZGVmYXVsdDoKKyAgICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKICAgICAgIGJyZWFrOwogICB9CiAKLSAgLyogQ29uZmlndXJlIHRoZSBETUEgQnVyc3QgTW9kZSAqLwotICBodGltLT5JbnN0YW5jZS0+RENSID0gKEJ1cnN0QmFzZUFkZHJlc3MgfCBCdXJzdExlbmd0aCk7Ci0gIC8qIEVuYWJsZSB0aGUgVElNIERNQSBSZXF1ZXN0ICovCi0gIF9fSEFMX1RJTV9FTkFCTEVfRE1BKGh0aW0sIEJ1cnN0UmVxdWVzdFNyYyk7CisgIGlmIChzdGF0dXMgPT0gSEFMX09LKQorICB7CisgICAgLyogQ29uZmlndXJlIHRoZSBETUEgQnVyc3QgTW9kZSAqLworICAgIGh0aW0tPkluc3RhbmNlLT5EQ1IgPSAoQnVyc3RCYXNlQWRkcmVzcyB8IEJ1cnN0TGVuZ3RoKTsKKyAgICAvKiBFbmFibGUgdGhlIFRJTSBETUEgUmVxdWVzdCAqLworICAgIF9fSEFMX1RJTV9FTkFCTEVfRE1BKGh0aW0sIEJ1cnN0UmVxdWVzdFNyYyk7CisgIH0KIAogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCi0gIHJldHVybiBIQUxfT0s7CisgIHJldHVybiBzdGF0dXM7CiB9CiAKIC8qKgpAQCAtNDYwNiw2ICs0NzEzLDggQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fRE1BQnVyc3RfV3JpdGVTdG9wKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBCdXJzdFJlcXVlc3RTcmMpCiB7CisgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKKwogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0RNQV9TT1VSQ0UoQnVyc3RSZXF1ZXN0U3JjKSk7CiAKQEAgLTQ2NDgsMTcgKzQ3NTcsMjEgQEAKICAgICAgIGJyZWFrOwogICAgIH0KICAgICBkZWZhdWx0OgorICAgICAgc3RhdHVzID0gSEFMX0VSUk9SOwogICAgICAgYnJlYWs7CiAgIH0KIAotICAvKiBEaXNhYmxlIHRoZSBUSU0gVXBkYXRlIERNQSByZXF1ZXN0ICovCi0gIF9fSEFMX1RJTV9ESVNBQkxFX0RNQShodGltLCBCdXJzdFJlcXVlc3RTcmMpOworICBpZiAoc3RhdHVzID09IEhBTF9PSykKKyAgeworICAgIC8qIERpc2FibGUgdGhlIFRJTSBVcGRhdGUgRE1BIHJlcXVlc3QgKi8KKyAgICBfX0hBTF9USU1fRElTQUJMRV9ETUEoaHRpbSwgQnVyc3RSZXF1ZXN0U3JjKTsKIAotICAvKiBDaGFuZ2UgdGhlIERNQSBidXJzdCBvcGVyYXRpb24gc3RhdGUgKi8KLSAgaHRpbS0+RE1BQnVyc3RTdGF0ZSA9IEhBTF9ETUFfQlVSU1RfU1RBVEVfUkVBRFk7CisgICAgLyogQ2hhbmdlIHRoZSBETUEgYnVyc3Qgb3BlcmF0aW9uIHN0YXRlICovCisgICAgaHRpbS0+RE1BQnVyc3RTdGF0ZSA9IEhBTF9ETUFfQlVSU1RfU1RBVEVfUkVBRFk7CisgIH0KIAogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCi0gIHJldHVybiBIQUxfT0s7CisgIHJldHVybiBzdGF0dXM7CiB9CiAKIC8qKgpAQCAtNDcwMiw4ICs0ODE1LDEzIEBACiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX0RNQUJ1cnN0X1JlYWRTdGFydChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQnVyc3RCYXNlQWRkcmVzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IEJ1cnN0UmVxdWVzdFNyYywgdWludDMyX3QgICpCdXJzdEJ1ZmZlciwgdWludDMyX3QgIEJ1cnN0TGVuZ3RoKQogewotICByZXR1cm4gSEFMX1RJTV9ETUFCdXJzdF9NdWx0aVJlYWRTdGFydChodGltLCBCdXJzdEJhc2VBZGRyZXNzLCBCdXJzdFJlcXVlc3RTcmMsIEJ1cnN0QnVmZmVyLCBCdXJzdExlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChCdXJzdExlbmd0aCkgPj4gOFUpICsgMVUpOworICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXM7CisKKyAgc3RhdHVzID0gSEFMX1RJTV9ETUFCdXJzdF9NdWx0aVJlYWRTdGFydChodGltLCBCdXJzdEJhc2VBZGRyZXNzLCBCdXJzdFJlcXVlc3RTcmMsIEJ1cnN0QnVmZmVyLCBCdXJzdExlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEJ1cnN0TGVuZ3RoKSA+PiA4VSkgKyAxVSk7CisKKworICByZXR1cm4gc3RhdHVzOwogfQogCiAvKioKQEAgLTQ3NDksNiArNDg2Nyw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IEJ1cnN0UmVxdWVzdFNyYywgdWludDMyX3QgICpCdXJzdEJ1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgIEJ1cnN0TGVuZ3RoLCB1aW50MzJfdCAgRGF0YUxlbmd0aCkKIHsKKyAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOworCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fRE1BQlVSU1RfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9ETUFfQkFTRShCdXJzdEJhc2VBZGRyZXNzKSk7CkBAIC00Nzg4LDcgKzQ5MDgsNyBAQAogCiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBzdHJlYW0gKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9VUERBVEVdLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5ETUFSLCAodWludDMyX3QpQnVyc3RCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgRGF0YUxlbmd0aCkgIT0gSEFMX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YUxlbmd0aCkgIT0gSEFMX09LKQogICAgICAgewogICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CkBAIC00ODA2LDcgKzQ5MjYsNyBAQAogCiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBzdHJlYW0gKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzFdLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5ETUFSLCAodWludDMyX3QpQnVyc3RCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgRGF0YUxlbmd0aCkgIT0gSEFMX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YUxlbmd0aCkgIT0gSEFMX09LKQogICAgICAgewogICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CkBAIC00ODI0LDcgKzQ5NDQsNyBAQAogCiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBzdHJlYW0gKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzJdLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5ETUFSLCAodWludDMyX3QpQnVyc3RCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgRGF0YUxlbmd0aCkgIT0gSEFMX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YUxlbmd0aCkgIT0gSEFMX09LKQogICAgICAgewogICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CkBAIC00ODQyLDcgKzQ5NjIsNyBAQAogCiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBzdHJlYW0gKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzNdLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5ETUFSLCAodWludDMyX3QpQnVyc3RCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgRGF0YUxlbmd0aCkgIT0gSEFMX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YUxlbmd0aCkgIT0gSEFMX09LKQogICAgICAgewogICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CkBAIC00ODYwLDcgKzQ5ODAsNyBAQAogCiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBzdHJlYW0gKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzRdLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5ETUFSLCAodWludDMyX3QpQnVyc3RCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgRGF0YUxlbmd0aCkgIT0gSEFMX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YUxlbmd0aCkgIT0gSEFMX09LKQogICAgICAgewogICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CkBAIC00ODc4LDcgKzQ5OTgsNyBAQAogCiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBzdHJlYW0gKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DT01NVVRBVElPTl0sICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkRNQVIsICh1aW50MzJfdClCdXJzdEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhTGVuZ3RoKSAhPSBIQUxfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CiAgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKQEAgLTQ4OTYsNyArNTAxNiw3IEBACiAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIHN0cmVhbSAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX1RSSUdHRVJdLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5ETUFSLCAodWludDMyX3QpQnVyc3RCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgRGF0YUxlbmd0aCkgIT0gSEFMX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YUxlbmd0aCkgIT0gSEFMX09LKQogICAgICAgewogICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CkBAIC00OTA0LDE3ICs1MDI0LDIxIEBACiAgICAgICBicmVhazsKICAgICB9CiAgICAgZGVmYXVsdDoKKyAgICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKICAgICAgIGJyZWFrOwogICB9CiAKLSAgLyogQ29uZmlndXJlIHRoZSBETUEgQnVyc3QgTW9kZSAqLwotICBodGltLT5JbnN0YW5jZS0+RENSID0gKEJ1cnN0QmFzZUFkZHJlc3MgfCBCdXJzdExlbmd0aCk7CisgIGlmIChzdGF0dXMgPT0gSEFMX09LKQorICB7CisgICAgLyogQ29uZmlndXJlIHRoZSBETUEgQnVyc3QgTW9kZSAqLworICAgIGh0aW0tPkluc3RhbmNlLT5EQ1IgPSAoQnVyc3RCYXNlQWRkcmVzcyB8IEJ1cnN0TGVuZ3RoKTsKIAotICAvKiBFbmFibGUgdGhlIFRJTSBETUEgUmVxdWVzdCAqLwotICBfX0hBTF9USU1fRU5BQkxFX0RNQShodGltLCBCdXJzdFJlcXVlc3RTcmMpOworICAgIC8qIEVuYWJsZSB0aGUgVElNIERNQSBSZXF1ZXN0ICovCisgICAgX19IQUxfVElNX0VOQUJMRV9ETUEoaHRpbSwgQnVyc3RSZXF1ZXN0U3JjKTsKKyAgfQogCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KLSAgcmV0dXJuIEhBTF9PSzsKKyAgcmV0dXJuIHN0YXR1czsKIH0KIAogLyoqCkBAIC00OTI1LDYgKzUwNDksOCBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9ETUFCdXJzdF9SZWFkU3RvcChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQnVyc3RSZXF1ZXN0U3JjKQogeworICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CisKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9ETUFfU09VUkNFKEJ1cnN0UmVxdWVzdFNyYykpOwogCkBAIC00OTY3LDE3ICs1MDkzLDIxIEBACiAgICAgICBicmVhazsKICAgICB9CiAgICAgZGVmYXVsdDoKKyAgICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKICAgICAgIGJyZWFrOwogICB9CiAKLSAgLyogRGlzYWJsZSB0aGUgVElNIFVwZGF0ZSBETUEgcmVxdWVzdCAqLwotICBfX0hBTF9USU1fRElTQUJMRV9ETUEoaHRpbSwgQnVyc3RSZXF1ZXN0U3JjKTsKKyAgaWYgKHN0YXR1cyA9PSBIQUxfT0spCisgIHsKKyAgICAvKiBEaXNhYmxlIHRoZSBUSU0gVXBkYXRlIERNQSByZXF1ZXN0ICovCisgICAgX19IQUxfVElNX0RJU0FCTEVfRE1BKGh0aW0sIEJ1cnN0UmVxdWVzdFNyYyk7CiAKLSAgLyogQ2hhbmdlIHRoZSBETUEgYnVyc3Qgb3BlcmF0aW9uIHN0YXRlICovCi0gIGh0aW0tPkRNQUJ1cnN0U3RhdGUgPSBIQUxfRE1BX0JVUlNUX1NUQVRFX1JFQURZOworICAgIC8qIENoYW5nZSB0aGUgRE1BIGJ1cnN0IG9wZXJhdGlvbiBzdGF0ZSAqLworICAgIGh0aW0tPkRNQUJ1cnN0U3RhdGUgPSBIQUxfRE1BX0JVUlNUX1NUQVRFX1JFQURZOworICB9CiAKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwotICByZXR1cm4gSEFMX09LOworICByZXR1cm4gc3RhdHVzOwogfQogCiAvKioKQEAgLTUwNDEsNiArNTE3MSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVElNX0NsZWFySW5wdXRDb25maWdUeXBlRGVmICpzQ2xlYXJJbnB1dENvbmZpZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBDaGFubmVsKQogeworICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CisKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9PQ1hSRUZfQ0xFQVJfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DTEVBUklOUFVUX1NPVVJDRShzQ2xlYXJJbnB1dENvbmZpZy0+Q2xlYXJJbnB1dFNvdXJjZSkpOwpAQCAtNTA4Miw3NiArNTIxNCw4MCBAQAogICAgIH0KIAogICAgIGRlZmF1bHQ6CisgICAgICBzdGF0dXMgPSBIQUxfRVJST1I7CiAgICAgICBicmVhazsKICAgfQogCi0gIHN3aXRjaCAoQ2hhbm5lbCkKKyAgaWYgKHN0YXR1cyA9PSBIQUxfT0spCiAgIHsKLSAgICBjYXNlIFRJTV9DSEFOTkVMXzE6CisgICAgc3dpdGNoIChDaGFubmVsKQogICAgIHsKLSAgICAgIGlmIChzQ2xlYXJJbnB1dENvbmZpZy0+Q2xlYXJJbnB1dFN0YXRlICE9ICh1aW50MzJfdClESVNBQkxFKQorICAgICAgY2FzZSBUSU1fQ0hBTk5FTF8xOgogICAgICAgewotICAgICAgICAvKiBFbmFibGUgdGhlIE9DUkVGIGNsZWFyIGZlYXR1cmUgZm9yIENoYW5uZWwgMSAqLwotICAgICAgICBTRVRfQklUKGh0aW0tPkluc3RhbmNlLT5DQ01SMSwgVElNX0NDTVIxX09DMUNFKTsKKyAgICAgICAgaWYgKHNDbGVhcklucHV0Q29uZmlnLT5DbGVhcklucHV0U3RhdGUgIT0gKHVpbnQzMl90KURJU0FCTEUpCisgICAgICAgIHsKKyAgICAgICAgICAvKiBFbmFibGUgdGhlIE9DUkVGIGNsZWFyIGZlYXR1cmUgZm9yIENoYW5uZWwgMSAqLworICAgICAgICAgIFNFVF9CSVQoaHRpbS0+SW5zdGFuY2UtPkNDTVIxLCBUSU1fQ0NNUjFfT0MxQ0UpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIC8qIERpc2FibGUgdGhlIE9DUkVGIGNsZWFyIGZlYXR1cmUgZm9yIENoYW5uZWwgMSAqLworICAgICAgICAgIENMRUFSX0JJVChodGltLT5JbnN0YW5jZS0+Q0NNUjEsIFRJTV9DQ01SMV9PQzFDRSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CiAgICAgICB9Ci0gICAgICBlbHNlCisgICAgICBjYXNlIFRJTV9DSEFOTkVMXzI6CiAgICAgICB7Ci0gICAgICAgIC8qIERpc2FibGUgdGhlIE9DUkVGIGNsZWFyIGZlYXR1cmUgZm9yIENoYW5uZWwgMSAqLwotICAgICAgICBDTEVBUl9CSVQoaHRpbS0+SW5zdGFuY2UtPkNDTVIxLCBUSU1fQ0NNUjFfT0MxQ0UpOworICAgICAgICBpZiAoc0NsZWFySW5wdXRDb25maWctPkNsZWFySW5wdXRTdGF0ZSAhPSAodWludDMyX3QpRElTQUJMRSkKKyAgICAgICAgeworICAgICAgICAgIC8qIEVuYWJsZSB0aGUgT0NSRUYgY2xlYXIgZmVhdHVyZSBmb3IgQ2hhbm5lbCAyICovCisgICAgICAgICAgU0VUX0JJVChodGltLT5JbnN0YW5jZS0+Q0NNUjEsIFRJTV9DQ01SMV9PQzJDRSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgLyogRGlzYWJsZSB0aGUgT0NSRUYgY2xlYXIgZmVhdHVyZSBmb3IgQ2hhbm5lbCAyICovCisgICAgICAgICAgQ0xFQVJfQklUKGh0aW0tPkluc3RhbmNlLT5DQ01SMSwgVElNX0NDTVIxX09DMkNFKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKICAgICAgIH0KLSAgICAgIGJyZWFrOworICAgICAgY2FzZSBUSU1fQ0hBTk5FTF8zOgorICAgICAgeworICAgICAgICBpZiAoc0NsZWFySW5wdXRDb25maWctPkNsZWFySW5wdXRTdGF0ZSAhPSAodWludDMyX3QpRElTQUJMRSkKKyAgICAgICAgeworICAgICAgICAgIC8qIEVuYWJsZSB0aGUgT0NSRUYgY2xlYXIgZmVhdHVyZSBmb3IgQ2hhbm5lbCAzICovCisgICAgICAgICAgU0VUX0JJVChodGltLT5JbnN0YW5jZS0+Q0NNUjIsIFRJTV9DQ01SMl9PQzNDRSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgLyogRGlzYWJsZSB0aGUgT0NSRUYgY2xlYXIgZmVhdHVyZSBmb3IgQ2hhbm5lbCAzICovCisgICAgICAgICAgQ0xFQVJfQklUKGh0aW0tPkluc3RhbmNlLT5DQ01SMiwgVElNX0NDTVIyX09DM0NFKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGNhc2UgVElNX0NIQU5ORUxfNDoKKyAgICAgIHsKKyAgICAgICAgaWYgKHNDbGVhcklucHV0Q29uZmlnLT5DbGVhcklucHV0U3RhdGUgIT0gKHVpbnQzMl90KURJU0FCTEUpCisgICAgICAgIHsKKyAgICAgICAgICAvKiBFbmFibGUgdGhlIE9DUkVGIGNsZWFyIGZlYXR1cmUgZm9yIENoYW5uZWwgNCAqLworICAgICAgICAgIFNFVF9CSVQoaHRpbS0+SW5zdGFuY2UtPkNDTVIyLCBUSU1fQ0NNUjJfT0M0Q0UpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIC8qIERpc2FibGUgdGhlIE9DUkVGIGNsZWFyIGZlYXR1cmUgZm9yIENoYW5uZWwgNCAqLworICAgICAgICAgIENMRUFSX0JJVChodGltLT5JbnN0YW5jZS0+Q0NNUjIsIFRJTV9DQ01SMl9PQzRDRSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBUSU1fQ0hBTk5FTF8yOgotICAgIHsKLSAgICAgIGlmIChzQ2xlYXJJbnB1dENvbmZpZy0+Q2xlYXJJbnB1dFN0YXRlICE9ICh1aW50MzJfdClESVNBQkxFKQotICAgICAgewotICAgICAgICAvKiBFbmFibGUgdGhlIE9DUkVGIGNsZWFyIGZlYXR1cmUgZm9yIENoYW5uZWwgMiAqLwotICAgICAgICBTRVRfQklUKGh0aW0tPkluc3RhbmNlLT5DQ01SMSwgVElNX0NDTVIxX09DMkNFKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLyogRGlzYWJsZSB0aGUgT0NSRUYgY2xlYXIgZmVhdHVyZSBmb3IgQ2hhbm5lbCAyICovCi0gICAgICAgIENMRUFSX0JJVChodGltLT5JbnN0YW5jZS0+Q0NNUjEsIFRJTV9DQ01SMV9PQzJDRSk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBUSU1fQ0hBTk5FTF8zOgotICAgIHsKLSAgICAgIGlmIChzQ2xlYXJJbnB1dENvbmZpZy0+Q2xlYXJJbnB1dFN0YXRlICE9ICh1aW50MzJfdClESVNBQkxFKQotICAgICAgewotICAgICAgICAvKiBFbmFibGUgdGhlIE9DUkVGIGNsZWFyIGZlYXR1cmUgZm9yIENoYW5uZWwgMyAqLwotICAgICAgICBTRVRfQklUKGh0aW0tPkluc3RhbmNlLT5DQ01SMiwgVElNX0NDTVIyX09DM0NFKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLyogRGlzYWJsZSB0aGUgT0NSRUYgY2xlYXIgZmVhdHVyZSBmb3IgQ2hhbm5lbCAzICovCi0gICAgICAgIENMRUFSX0JJVChodGltLT5JbnN0YW5jZS0+Q0NNUjIsIFRJTV9DQ01SMl9PQzNDRSk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBUSU1fQ0hBTk5FTF80OgotICAgIHsKLSAgICAgIGlmIChzQ2xlYXJJbnB1dENvbmZpZy0+Q2xlYXJJbnB1dFN0YXRlICE9ICh1aW50MzJfdClESVNBQkxFKQotICAgICAgewotICAgICAgICAvKiBFbmFibGUgdGhlIE9DUkVGIGNsZWFyIGZlYXR1cmUgZm9yIENoYW5uZWwgNCAqLwotICAgICAgICBTRVRfQklUKGh0aW0tPkluc3RhbmNlLT5DQ01SMiwgVElNX0NDTVIyX09DNENFKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgLyogRGlzYWJsZSB0aGUgT0NSRUYgY2xlYXIgZmVhdHVyZSBmb3IgQ2hhbm5lbCA0ICovCi0gICAgICAgIENMRUFSX0JJVChodGltLT5JbnN0YW5jZS0+Q0NNUjIsIFRJTV9DQ01SMl9PQzRDRSk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwogICB9CiAKICAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOwogCiAgIF9fSEFMX1VOTE9DSyhodGltKTsKIAotICByZXR1cm4gSEFMX09LOworICByZXR1cm4gc3RhdHVzOwogfQogCiAvKioKQEAgLTUxNjMsNiArNTI5OSw3IEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX0NvbmZpZ0Nsb2NrU291cmNlKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCBjb25zdCBUSU1fQ2xvY2tDb25maWdUeXBlRGVmICpzQ2xvY2tTb3VyY2VDb25maWcpCiB7CisgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKICAgdWludDMyX3QgdG1wc21jcjsKIAogICAvKiBQcm9jZXNzIExvY2tlZCAqLwpAQCAtNTI4MywyMiArNTQyMCwyMyBAQAogICAgIGNhc2UgVElNX0NMT0NLU09VUkNFX0lUUjE6CiAgICAgY2FzZSBUSU1fQ0xPQ0tTT1VSQ0VfSVRSMjoKICAgICBjYXNlIFRJTV9DTE9DS1NPVVJDRV9JVFIzOgotICAgICAgewotICAgICAgICAvKiBDaGVjayB3aGV0aGVyIG9yIG5vdCB0aGUgdGltZXIgaW5zdGFuY2Ugc3VwcG9ydHMgaW50ZXJuYWwgdHJpZ2dlciBpbnB1dCAqLwotICAgICAgICBhc3NlcnRfcGFyYW0oSVNfVElNX0NMT0NLU09VUkNFX0lUUlhfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKKyAgICB7CisgICAgICAvKiBDaGVjayB3aGV0aGVyIG9yIG5vdCB0aGUgdGltZXIgaW5zdGFuY2Ugc3VwcG9ydHMgaW50ZXJuYWwgdHJpZ2dlciBpbnB1dCAqLworICAgICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DTE9DS1NPVVJDRV9JVFJYX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CiAKLSAgICAgICAgVElNX0lUUnhfU2V0Q29uZmlnKGh0aW0tPkluc3RhbmNlLCBzQ2xvY2tTb3VyY2VDb25maWctPkNsb2NrU291cmNlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9CisgICAgICBUSU1fSVRSeF9TZXRDb25maWcoaHRpbS0+SW5zdGFuY2UsIHNDbG9ja1NvdXJjZUNvbmZpZy0+Q2xvY2tTb3VyY2UpOworICAgICAgYnJlYWs7CisgICAgfQogCiAgICAgZGVmYXVsdDoKKyAgICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKICAgICAgIGJyZWFrOwogICB9CiAgIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRUFEWTsKIAogICBfX0hBTF9VTkxPQ0soaHRpbSk7CiAKLSAgcmV0dXJuIEhBTF9PSzsKKyAgcmV0dXJuIHN0YXR1czsKIH0KIAogLyoqCkBAIC01NzAyLDggKzU4NDAsNiBAQAogICB7CiAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQotICAvKiBQcm9jZXNzIGxvY2tlZCAqLwotICBfX0hBTF9MT0NLKGh0aW0pOwogCiAgIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX1JFQURZKQogICB7CkBAIC01ODE5LDcgKzU5NTUsNyBAQAogCiAgICAgICBkZWZhdWx0IDoKICAgICAgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLwotICAgICAgICBzdGF0dXMgPSAgSEFMX0VSUk9SOworICAgICAgICBzdGF0dXMgPSBIQUxfRVJST1I7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgfQpAQCAtNTg4NSwxOSArNjAyMSwxNiBAQAogCiAgICAgICBkZWZhdWx0IDoKICAgICAgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLwotICAgICAgICBzdGF0dXMgPSAgSEFMX0VSUk9SOworICAgICAgICBzdGF0dXMgPSBIQUxfRVJST1I7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgfQogICBlbHNlCiAgIHsKICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCi0gICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKKyAgICBzdGF0dXMgPSBIQUxfRVJST1I7CiAgIH0KIAotICAvKiBSZWxlYXNlIExvY2sgKi8KLSAgX19IQUxfVU5MT0NLKGh0aW0pOwotCiAgIHJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTU5NDAsOSArNjA3Myw2IEBACiB7CiAgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKIAotICAvKiBQcm9jZXNzIGxvY2tlZCAqLwotICBfX0hBTF9MT0NLKGh0aW0pOwotCiAgIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX1JFQURZKQogICB7CiAgICAgc3dpdGNoIChDYWxsYmFja0lEKQpAQCAtNjA4NCw3ICs2MjE0LDcgQEAKIAogICAgICAgZGVmYXVsdCA6CiAgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KLSAgICAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKKyAgICAgICAgc3RhdHVzID0gSEFMX0VSUk9SOwogICAgICAgICBicmVhazsKICAgICB9CiAgIH0KQEAgLTYxNjQsMTkgKzYyOTQsMTYgQEAKIAogICAgICAgZGVmYXVsdCA6CiAgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KLSAgICAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKKyAgICAgICAgc3RhdHVzID0gSEFMX0VSUk9SOwogICAgICAgICBicmVhazsKICAgICB9CiAgIH0KICAgZWxzZQogICB7CiAgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLwotICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7CisgICAgc3RhdHVzID0gSEFMX0VSUk9SOwogICB9CiAKLSAgLyogUmVsZWFzZSBMb2NrICovCi0gIF9fSEFMX1VOTE9DSyhodGltKTsKLQogICByZXR1cm4gc3RhdHVzOwogfQogI2VuZGlmIC8qIFVTRV9IQUxfVElNX1JFR0lTVEVSX0NBTExCQUNLUyAqLwpAQCAtNjY5NywxMSArNjgyNCwxMiBAQAogICB1aW50MzJfdCB0bXBjY2VyOwogICB1aW50MzJfdCB0bXBjcjI7CiAKKyAgLyogR2V0IHRoZSBUSU14IENDRVIgcmVnaXN0ZXIgdmFsdWUgKi8KKyAgdG1wY2NlciA9IFRJTXgtPkNDRVI7CisKICAgLyogRGlzYWJsZSB0aGUgQ2hhbm5lbCAxOiBSZXNldCB0aGUgQ0MxRSBCaXQgKi8KICAgVElNeC0+Q0NFUiAmPSB+VElNX0NDRVJfQ0MxRTsKIAotICAvKiBHZXQgdGhlIFRJTXggQ0NFUiByZWdpc3RlciB2YWx1ZSAqLwotICB0bXBjY2VyID0gVElNeC0+Q0NFUjsKICAgLyogR2V0IHRoZSBUSU14IENSMiByZWdpc3RlciB2YWx1ZSAqLwogICB0bXBjcjIgPSAgVElNeC0+Q1IyOwogCkBAIC02NzcyLDExICs2OTAwLDEyIEBACiAgIHVpbnQzMl90IHRtcGNjZXI7CiAgIHVpbnQzMl90IHRtcGNyMjsKIAorICAvKiBHZXQgdGhlIFRJTXggQ0NFUiByZWdpc3RlciB2YWx1ZSAqLworICB0bXBjY2VyID0gVElNeC0+Q0NFUjsKKwogICAvKiBEaXNhYmxlIHRoZSBDaGFubmVsIDI6IFJlc2V0IHRoZSBDQzJFIEJpdCAqLwogICBUSU14LT5DQ0VSICY9IH5USU1fQ0NFUl9DQzJFOwogCi0gIC8qIEdldCB0aGUgVElNeCBDQ0VSIHJlZ2lzdGVyIHZhbHVlICovCi0gIHRtcGNjZXIgPSBUSU14LT5DQ0VSOwogICAvKiBHZXQgdGhlIFRJTXggQ1IyIHJlZ2lzdGVyIHZhbHVlICovCiAgIHRtcGNyMiA9ICBUSU14LT5DUjI7CiAKQEAgLTY4NDgsMTEgKzY5NzcsMTIgQEAKICAgdWludDMyX3QgdG1wY2NlcjsKICAgdWludDMyX3QgdG1wY3IyOwogCisgIC8qIEdldCB0aGUgVElNeCBDQ0VSIHJlZ2lzdGVyIHZhbHVlICovCisgIHRtcGNjZXIgPSBUSU14LT5DQ0VSOworCiAgIC8qIERpc2FibGUgdGhlIENoYW5uZWwgMzogUmVzZXQgdGhlIENDMkUgQml0ICovCiAgIFRJTXgtPkNDRVIgJj0gflRJTV9DQ0VSX0NDM0U7CiAKLSAgLyogR2V0IHRoZSBUSU14IENDRVIgcmVnaXN0ZXIgdmFsdWUgKi8KLSAgdG1wY2NlciA9IFRJTXgtPkNDRVI7CiAgIC8qIEdldCB0aGUgVElNeCBDUjIgcmVnaXN0ZXIgdmFsdWUgKi8KICAgdG1wY3IyID0gIFRJTXgtPkNSMjsKIApAQCAtNjkyMiwxMSArNzA1MiwxMiBAQAogICB1aW50MzJfdCB0bXBjY2VyOwogICB1aW50MzJfdCB0bXBjcjI7CiAKKyAgLyogR2V0IHRoZSBUSU14IENDRVIgcmVnaXN0ZXIgdmFsdWUgKi8KKyAgdG1wY2NlciA9IFRJTXgtPkNDRVI7CisKICAgLyogRGlzYWJsZSB0aGUgQ2hhbm5lbCA0OiBSZXNldCB0aGUgQ0M0RSBCaXQgKi8KICAgVElNeC0+Q0NFUiAmPSB+VElNX0NDRVJfQ0M0RTsKIAotICAvKiBHZXQgdGhlIFRJTXggQ0NFUiByZWdpc3RlciB2YWx1ZSAqLwotICB0bXBjY2VyID0gVElNeC0+Q0NFUjsKICAgLyogR2V0IHRoZSBUSU14IENSMiByZWdpc3RlciB2YWx1ZSAqLwogICB0bXBjcjIgPSAgVElNeC0+Q1IyOwogCkBAIC02OTc5LDYgKzcxMTAsNyBAQAogc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIFRJTV9TbGF2ZVRpbWVyX1NldENvbmZpZyhUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVElNX1NsYXZlQ29uZmlnVHlwZURlZiAqc1NsYXZlQ29uZmlnKQogeworICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CiAgIHVpbnQzMl90IHRtcHNtY3I7CiAgIHVpbnQzMl90IHRtcGNjbXIxOwogICB1aW50MzJfdCB0bXBjY2VyOwpAQCAtNzA3NSwxNiArNzIwNywxOCBAQAogICAgIGNhc2UgVElNX1RTX0lUUjE6CiAgICAgY2FzZSBUSU1fVFNfSVRSMjoKICAgICBjYXNlIFRJTV9UU19JVFIzOgotICAgICAgewotICAgICAgICAvKiBDaGVjayB0aGUgcGFyYW1ldGVyICovCi0gICAgICAgIGFzc2VydF9wYXJhbShJU19USU1fQ0MyX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQorICAgIHsKKyAgICAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXIgKi8KKyAgICAgIGFzc2VydF9wYXJhbShJU19USU1fQ0MyX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CisgICAgICBicmVhazsKKyAgICB9CiAKICAgICBkZWZhdWx0OgorICAgICAgc3RhdHVzID0gSEFMX0VSUk9SOwogICAgICAgYnJlYWs7CiAgIH0KLSAgcmV0dXJuIEhBTF9PSzsKKworICByZXR1cm4gc3RhdHVzOwogfQogCiAvKioKQEAgLTcxMTQsOSArNzI0OCw5IEBACiAgIHVpbnQzMl90IHRtcGNjZXI7CiAKICAgLyogRGlzYWJsZSB0aGUgQ2hhbm5lbCAxOiBSZXNldCB0aGUgQ0MxRSBCaXQgKi8KKyAgdG1wY2NlciA9IFRJTXgtPkNDRVI7CiAgIFRJTXgtPkNDRVIgJj0gflRJTV9DQ0VSX0NDMUU7CiAgIHRtcGNjbXIxID0gVElNeC0+Q0NNUjE7Ci0gIHRtcGNjZXIgPSBUSU14LT5DQ0VSOwogCiAgIC8qIFNlbGVjdCB0aGUgSW5wdXQgKi8KICAgaWYgKElTX1RJTV9DQzJfSU5TVEFOQ0UoVElNeCkgIT0gUkVTRVQpCkBAIC03MjA0LDkgKzczMzgsOSBAQAogICB1aW50MzJfdCB0bXBjY2VyOwogCiAgIC8qIERpc2FibGUgdGhlIENoYW5uZWwgMjogUmVzZXQgdGhlIENDMkUgQml0ICovCisgIHRtcGNjZXIgPSBUSU14LT5DQ0VSOwogICBUSU14LT5DQ0VSICY9IH5USU1fQ0NFUl9DQzJFOwogICB0bXBjY21yMSA9IFRJTXgtPkNDTVIxOwotICB0bXBjY2VyID0gVElNeC0+Q0NFUjsKIAogICAvKiBTZWxlY3QgdGhlIElucHV0ICovCiAgIHRtcGNjbXIxICY9IH5USU1fQ0NNUjFfQ0MyUzsKQEAgLTcyNDMsOSArNzM3Nyw5IEBACiAgIHVpbnQzMl90IHRtcGNjZXI7CiAKICAgLyogRGlzYWJsZSB0aGUgQ2hhbm5lbCAyOiBSZXNldCB0aGUgQ0MyRSBCaXQgKi8KKyAgdG1wY2NlciA9IFRJTXgtPkNDRVI7CiAgIFRJTXgtPkNDRVIgJj0gflRJTV9DQ0VSX0NDMkU7CiAgIHRtcGNjbXIxID0gVElNeC0+Q0NNUjE7Ci0gIHRtcGNjZXIgPSBUSU14LT5DQ0VSOwogCiAgIC8qIFNldCB0aGUgZmlsdGVyICovCiAgIHRtcGNjbXIxICY9IH5USU1fQ0NNUjFfSUMyRjsKQEAgLTcyODcsOSArNzQyMSw5IEBACiAgIHVpbnQzMl90IHRtcGNjZXI7CiAKICAgLyogRGlzYWJsZSB0aGUgQ2hhbm5lbCAzOiBSZXNldCB0aGUgQ0MzRSBCaXQgKi8KKyAgdG1wY2NlciA9IFRJTXgtPkNDRVI7CiAgIFRJTXgtPkNDRVIgJj0gflRJTV9DQ0VSX0NDM0U7CiAgIHRtcGNjbXIyID0gVElNeC0+Q0NNUjI7Ci0gIHRtcGNjZXIgPSBUSU14LT5DQ0VSOwogCiAgIC8qIFNlbGVjdCB0aGUgSW5wdXQgKi8KICAgdG1wY2NtcjIgJj0gflRJTV9DQ01SMl9DQzNTOwpAQCAtNzMzNSw5ICs3NDY5LDkgQEAKICAgdWludDMyX3QgdG1wY2NlcjsKIAogICAvKiBEaXNhYmxlIHRoZSBDaGFubmVsIDQ6IFJlc2V0IHRoZSBDQzRFIEJpdCAqLworICB0bXBjY2VyID0gVElNeC0+Q0NFUjsKICAgVElNeC0+Q0NFUiAmPSB+VElNX0NDRVJfQ0M0RTsKICAgdG1wY2NtcjIgPSBUSU14LT5DQ01SMjsKLSAgdG1wY2NlciA9IFRJTXgtPkNDRVI7CiAKICAgLyogU2VsZWN0IHRoZSBJbnB1dCAqLwogICB0bXBjY21yMiAmPSB+VElNX0NDTVIyX0NDNFM7CmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmMnh4X2hhbF90aW1fZXguYyBiL1NyYy9zdG0zMmYyeHhfaGFsX3RpbV9leC5jCmluZGV4IGQxNzJkN2EuLjg1ZTg0ZjUgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYyeHhfaGFsX3RpbV9leC5jCisrKyBiL1NyYy9zdG0zMmYyeHhfaGFsX3RpbV9leC5jCkBAIC0xMCw3ICsxMCw2IEBACiAgICogICAgICAgICAgICsgVGltZSBDb21wbGVtZW50YXJ5IHNpZ25hbCBicmVhayBhbmQgZGVhZCB0aW1lIGNvbmZpZ3VyYXRpb24KICAgKiAgICAgICAgICAgKyBUaW1lIE1hc3RlciBhbmQgU2xhdmUgc3luY2hyb25pemF0aW9uIGNvbmZpZ3VyYXRpb24KICAgKiAgICAgICAgICAgKyBUaW1lciByZW1hcHBpbmcgY2FwYWJpbGl0aWVzIGNvbmZpZ3VyYXRpb24KLSAgKgogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKQEAgLTE1Miw2ICsxNTEsNyBAQAogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NMT0NLRElWSVNJT05fRElWKGh0aW0tPkluaXQuQ2xvY2tEaXZpc2lvbikpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0FVVE9SRUxPQURfUFJFTE9BRChodGltLT5Jbml0LkF1dG9SZWxvYWRQcmVsb2FkKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fSUNfUE9MQVJJVFkoc0NvbmZpZy0+SUMxUG9sYXJpdHkpKTsKKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9QRVJJT0QoaHRpbSwgaHRpbS0+SW5pdC5QZXJpb2QpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9JQ19QUkVTQ0FMRVIoc0NvbmZpZy0+SUMxUHJlc2NhbGVyKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fSUNfRklMVEVSKHNDb25maWctPklDMUZpbHRlcikpOwogCkBAIC01MDIsNyArNTAyLDcgQEAKICAgZWxzZSBpZiAoKGNoYW5uZWxfMV9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCiAgICAgICAgICAgICYmIChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMV9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpKQogICB7Ci0gICAgaWYgKChwRGF0YSA9PSBOVUxMKSAmJiAoTGVuZ3RoID4gMFUpKQorICAgIGlmICgocERhdGEgPT0gTlVMTCkgfHwgKExlbmd0aCA9PSAwVSkpCiAgICAgewogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICB9CkBAIC03MDcsNiArNzA3LDcgQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1FeF9PQ05fU3RhcnRfSVQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IENoYW5uZWwpCiB7CisgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKICAgdWludDMyX3QgdG1wc21jcjsKIAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwpAQCAtNzQ2LDM0ICs3NDcsMzggQEAKIAogCiAgICAgZGVmYXVsdDoKKyAgICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKICAgICAgIGJyZWFrOwogICB9CiAKLSAgLyogRW5hYmxlIHRoZSBUSU0gQnJlYWsgaW50ZXJydXB0ICovCi0gIF9fSEFMX1RJTV9FTkFCTEVfSVQoaHRpbSwgVElNX0lUX0JSRUFLKTsKLQotICAvKiBFbmFibGUgdGhlIENhcHR1cmUgY29tcGFyZSBjaGFubmVsIE4gKi8KLSAgVElNX0NDeE5DaGFubmVsQ21kKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsLCBUSU1fQ0N4Tl9FTkFCTEUpOwotCi0gIC8qIEVuYWJsZSB0aGUgTWFpbiBPdXRwdXQgKi8KLSAgX19IQUxfVElNX01PRV9FTkFCTEUoaHRpbSk7Ci0KLSAgLyogRW5hYmxlIHRoZSBQZXJpcGhlcmFsLCBleGNlcHQgaW4gdHJpZ2dlciBtb2RlIHdoZXJlIGVuYWJsZSBpcyBhdXRvbWF0aWNhbGx5IGRvbmUgd2l0aCB0cmlnZ2VyICovCi0gIGlmIChJU19USU1fU0xBVkVfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKQorICBpZiAoc3RhdHVzID09IEhBTF9PSykKICAgewotICAgIHRtcHNtY3IgPSBodGltLT5JbnN0YW5jZS0+U01DUiAmIFRJTV9TTUNSX1NNUzsKLSAgICBpZiAoIUlTX1RJTV9TTEFWRU1PREVfVFJJR0dFUl9FTkFCTEVEKHRtcHNtY3IpKQorICAgIC8qIEVuYWJsZSB0aGUgVElNIEJyZWFrIGludGVycnVwdCAqLworICAgIF9fSEFMX1RJTV9FTkFCTEVfSVQoaHRpbSwgVElNX0lUX0JSRUFLKTsKKworICAgIC8qIEVuYWJsZSB0aGUgQ2FwdHVyZSBjb21wYXJlIGNoYW5uZWwgTiAqLworICAgIFRJTV9DQ3hOQ2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCwgVElNX0NDeE5fRU5BQkxFKTsKKworICAgIC8qIEVuYWJsZSB0aGUgTWFpbiBPdXRwdXQgKi8KKyAgICBfX0hBTF9USU1fTU9FX0VOQUJMRShodGltKTsKKworICAgIC8qIEVuYWJsZSB0aGUgUGVyaXBoZXJhbCwgZXhjZXB0IGluIHRyaWdnZXIgbW9kZSB3aGVyZSBlbmFibGUgaXMgYXV0b21hdGljYWxseSBkb25lIHdpdGggdHJpZ2dlciAqLworICAgIGlmIChJU19USU1fU0xBVkVfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKQorICAgIHsKKyAgICAgIHRtcHNtY3IgPSBodGltLT5JbnN0YW5jZS0+U01DUiAmIFRJTV9TTUNSX1NNUzsKKyAgICAgIGlmICghSVNfVElNX1NMQVZFTU9ERV9UUklHR0VSX0VOQUJMRUQodG1wc21jcikpCisgICAgICB7CisgICAgICAgIF9fSEFMX1RJTV9FTkFCTEUoaHRpbSk7CisgICAgICB9CisgICAgfQorICAgIGVsc2UKICAgICB7CiAgICAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOwogICAgIH0KICAgfQotICBlbHNlCi0gIHsKLSAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOwotICB9CiAKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwotICByZXR1cm4gSEFMX09LOworICByZXR1cm4gc3RhdHVzOwogfQogCiAvKioKQEAgLTc4OSw3ICs3OTQsOSBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTUV4X09DTl9TdG9wX0lUKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBDaGFubmVsKQogeworICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CiAgIHVpbnQzMl90IHRtcGNjZXI7CisKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DQ1hOX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsKSk7CiAKQEAgLTgxNywzMCArODI0LDM0IEBACiAgICAgfQogCiAgICAgZGVmYXVsdDoKKyAgICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKICAgICAgIGJyZWFrOwogICB9CiAKLSAgLyogRGlzYWJsZSB0aGUgQ2FwdHVyZSBjb21wYXJlIGNoYW5uZWwgTiAqLwotICBUSU1fQ0N4TkNoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwsIFRJTV9DQ3hOX0RJU0FCTEUpOwotCi0gIC8qIERpc2FibGUgdGhlIFRJTSBCcmVhayBpbnRlcnJ1cHQgKG9ubHkgaWYgbm8gbW9yZSBjaGFubmVsIGlzIGFjdGl2ZSkgKi8KLSAgdG1wY2NlciA9IGh0aW0tPkluc3RhbmNlLT5DQ0VSOwotICBpZiAoKHRtcGNjZXIgJiAoVElNX0NDRVJfQ0MxTkUgfCBUSU1fQ0NFUl9DQzJORSB8IFRJTV9DQ0VSX0NDM05FKSkgPT0gKHVpbnQzMl90KVJFU0VUKQorICBpZiAoc3RhdHVzID09IEhBTF9PSykKICAgewotICAgIF9fSEFMX1RJTV9ESVNBQkxFX0lUKGh0aW0sIFRJTV9JVF9CUkVBSyk7CisgICAgLyogRGlzYWJsZSB0aGUgQ2FwdHVyZSBjb21wYXJlIGNoYW5uZWwgTiAqLworICAgIFRJTV9DQ3hOQ2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCwgVElNX0NDeE5fRElTQUJMRSk7CisKKyAgICAvKiBEaXNhYmxlIHRoZSBUSU0gQnJlYWsgaW50ZXJydXB0IChvbmx5IGlmIG5vIG1vcmUgY2hhbm5lbCBpcyBhY3RpdmUpICovCisgICAgdG1wY2NlciA9IGh0aW0tPkluc3RhbmNlLT5DQ0VSOworICAgIGlmICgodG1wY2NlciAmIChUSU1fQ0NFUl9DQzFORSB8IFRJTV9DQ0VSX0NDMk5FIHwgVElNX0NDRVJfQ0MzTkUpKSA9PSAodWludDMyX3QpUkVTRVQpCisgICAgeworICAgICAgX19IQUxfVElNX0RJU0FCTEVfSVQoaHRpbSwgVElNX0lUX0JSRUFLKTsKKyAgICB9CisKKyAgICAvKiBEaXNhYmxlIHRoZSBNYWluIE91dHB1dCAqLworICAgIF9fSEFMX1RJTV9NT0VfRElTQUJMRShodGltKTsKKworICAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KKyAgICBfX0hBTF9USU1fRElTQUJMRShodGltKTsKKworICAgIC8qIFNldCB0aGUgVElNIGNvbXBsZW1lbnRhcnkgY2hhbm5lbCBzdGF0ZSAqLworICAgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CiAgIH0KIAotICAvKiBEaXNhYmxlIHRoZSBNYWluIE91dHB1dCAqLwotICBfX0hBTF9USU1fTU9FX0RJU0FCTEUoaHRpbSk7Ci0KLSAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwotICBfX0hBTF9USU1fRElTQUJMRShodGltKTsKLQotICAvKiBTZXQgdGhlIFRJTSBjb21wbGVtZW50YXJ5IGNoYW5uZWwgc3RhdGUgKi8KLSAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKLQogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCi0gIHJldHVybiBIQUxfT0s7CisgIHJldHVybiBzdGF0dXM7CiB9CiAKIC8qKgpAQCAtODU5LDYgKzg3MCw3IEBACiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNRXhfT0NOX1N0YXJ0X0RNQShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQ2hhbm5lbCwgY29uc3QgdWludDMyX3QgKnBEYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgTGVuZ3RoKQogeworICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CiAgIHVpbnQzMl90IHRtcHNtY3I7CiAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KQEAgLTg3MSw3ICs4ODMsNyBAQAogICB9CiAgIGVsc2UgaWYgKFRJTV9DSEFOTkVMX05fU1RBVEVfR0VUKGh0aW0sIENoYW5uZWwpID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKICAgewotICAgIGlmICgocERhdGEgPT0gTlVMTCkgJiYgKExlbmd0aCA+IDBVKSkKKyAgICBpZiAoKHBEYXRhID09IE5VTEwpIHx8IChMZW5ndGggPT0gMFUpKQogICAgIHsKICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgfQpAQCAtODk4LDcgKzkxMCw3IEBACiAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIHN0cmVhbSAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMV0sICh1aW50MzJfdClwRGF0YSwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+Q0NSMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBMZW5ndGgpICE9IEhBTF9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aCkgIT0gSEFMX09LKQogICAgICAgewogICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CkBAIC05MTksNyArOTMxLDcgQEAKIAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgc3RyZWFtICovCiAgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MyXSwgKHVpbnQzMl90KXBEYXRhLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5DQ1IyLAotICAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aCkgIT0gSEFMX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CiAgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKQEAgLTk0MCw3ICs5NTIsNyBAQAogCiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBzdHJlYW0gKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzNdLCAodWludDMyX3QpcERhdGEsICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkNDUjMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoKSAhPSBIQUxfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICBMZW5ndGgpICE9IEhBTF9PSykKICAgICAgIHsKICAgICAgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLwogICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwpAQCAtOTUxLDMxICs5NjMsMzUgQEAKICAgICB9CiAKICAgICBkZWZhdWx0OgorICAgICAgc3RhdHVzID0gSEFMX0VSUk9SOwogICAgICAgYnJlYWs7CiAgIH0KIAotICAvKiBFbmFibGUgdGhlIENhcHR1cmUgY29tcGFyZSBjaGFubmVsIE4gKi8KLSAgVElNX0NDeE5DaGFubmVsQ21kKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsLCBUSU1fQ0N4Tl9FTkFCTEUpOwotCi0gIC8qIEVuYWJsZSB0aGUgTWFpbiBPdXRwdXQgKi8KLSAgX19IQUxfVElNX01PRV9FTkFCTEUoaHRpbSk7Ci0KLSAgLyogRW5hYmxlIHRoZSBQZXJpcGhlcmFsLCBleGNlcHQgaW4gdHJpZ2dlciBtb2RlIHdoZXJlIGVuYWJsZSBpcyBhdXRvbWF0aWNhbGx5IGRvbmUgd2l0aCB0cmlnZ2VyICovCi0gIGlmIChJU19USU1fU0xBVkVfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKQorICBpZiAoc3RhdHVzID09IEhBTF9PSykKICAgewotICAgIHRtcHNtY3IgPSBodGltLT5JbnN0YW5jZS0+U01DUiAmIFRJTV9TTUNSX1NNUzsKLSAgICBpZiAoIUlTX1RJTV9TTEFWRU1PREVfVFJJR0dFUl9FTkFCTEVEKHRtcHNtY3IpKQorICAgIC8qIEVuYWJsZSB0aGUgQ2FwdHVyZSBjb21wYXJlIGNoYW5uZWwgTiAqLworICAgIFRJTV9DQ3hOQ2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCwgVElNX0NDeE5fRU5BQkxFKTsKKworICAgIC8qIEVuYWJsZSB0aGUgTWFpbiBPdXRwdXQgKi8KKyAgICBfX0hBTF9USU1fTU9FX0VOQUJMRShodGltKTsKKworICAgIC8qIEVuYWJsZSB0aGUgUGVyaXBoZXJhbCwgZXhjZXB0IGluIHRyaWdnZXIgbW9kZSB3aGVyZSBlbmFibGUgaXMgYXV0b21hdGljYWxseSBkb25lIHdpdGggdHJpZ2dlciAqLworICAgIGlmIChJU19USU1fU0xBVkVfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKQorICAgIHsKKyAgICAgIHRtcHNtY3IgPSBodGltLT5JbnN0YW5jZS0+U01DUiAmIFRJTV9TTUNSX1NNUzsKKyAgICAgIGlmICghSVNfVElNX1NMQVZFTU9ERV9UUklHR0VSX0VOQUJMRUQodG1wc21jcikpCisgICAgICB7CisgICAgICAgIF9fSEFMX1RJTV9FTkFCTEUoaHRpbSk7CisgICAgICB9CisgICAgfQorICAgIGVsc2UKICAgICB7CiAgICAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOwogICAgIH0KICAgfQotICBlbHNlCi0gIHsKLSAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOwotICB9CiAKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwotICByZXR1cm4gSEFMX09LOworICByZXR1cm4gc3RhdHVzOwogfQogCiAvKioKQEAgLTk5MSw2ICsxMDA3LDggQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1FeF9PQ05fU3RvcF9ETUEoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IENoYW5uZWwpCiB7CisgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKKwogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDWE5fSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwpKTsKIApAQCAtMTAyMSwyMyArMTAzOSwyNyBAQAogICAgIH0KIAogICAgIGRlZmF1bHQ6CisgICAgICBzdGF0dXMgPSBIQUxfRVJST1I7CiAgICAgICBicmVhazsKICAgfQogCi0gIC8qIERpc2FibGUgdGhlIENhcHR1cmUgY29tcGFyZSBjaGFubmVsIE4gKi8KLSAgVElNX0NDeE5DaGFubmVsQ21kKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsLCBUSU1fQ0N4Tl9ESVNBQkxFKTsKKyAgaWYgKHN0YXR1cyA9PSBIQUxfT0spCisgIHsKKyAgICAvKiBEaXNhYmxlIHRoZSBDYXB0dXJlIGNvbXBhcmUgY2hhbm5lbCBOICovCisgICAgVElNX0NDeE5DaGFubmVsQ21kKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsLCBUSU1fQ0N4Tl9ESVNBQkxFKTsKIAotICAvKiBEaXNhYmxlIHRoZSBNYWluIE91dHB1dCAqLwotICBfX0hBTF9USU1fTU9FX0RJU0FCTEUoaHRpbSk7CisgICAgLyogRGlzYWJsZSB0aGUgTWFpbiBPdXRwdXQgKi8KKyAgICBfX0hBTF9USU1fTU9FX0RJU0FCTEUoaHRpbSk7CiAKLSAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwotICBfX0hBTF9USU1fRElTQUJMRShodGltKTsKKyAgICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCisgICAgX19IQUxfVElNX0RJU0FCTEUoaHRpbSk7CiAKLSAgLyogU2V0IHRoZSBUSU0gY29tcGxlbWVudGFyeSBjaGFubmVsIHN0YXRlICovCi0gIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgICAgLyogU2V0IHRoZSBUSU0gY29tcGxlbWVudGFyeSBjaGFubmVsIHN0YXRlICovCisgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgfQogCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KLSAgcmV0dXJuIEhBTF9PSzsKKyAgcmV0dXJuIHN0YXR1czsKIH0KIAogLyoqCkBAIC0xMTY4LDYgKzExOTAsNyBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTUV4X1BXTU5fU3RhcnRfSVQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IENoYW5uZWwpCiB7CisgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKICAgdWludDMyX3QgdG1wc21jcjsKIAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwpAQCAtMTIwNiwzNCArMTIyOSwzOCBAQAogICAgIH0KIAogICAgIGRlZmF1bHQ6CisgICAgICBzdGF0dXMgPSBIQUxfRVJST1I7CiAgICAgICBicmVhazsKICAgfQogCi0gIC8qIEVuYWJsZSB0aGUgVElNIEJyZWFrIGludGVycnVwdCAqLwotICBfX0hBTF9USU1fRU5BQkxFX0lUKGh0aW0sIFRJTV9JVF9CUkVBSyk7Ci0KLSAgLyogRW5hYmxlIHRoZSBjb21wbGVtZW50YXJ5IFBXTSBvdXRwdXQgICovCi0gIFRJTV9DQ3hOQ2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCwgVElNX0NDeE5fRU5BQkxFKTsKLQotICAvKiBFbmFibGUgdGhlIE1haW4gT3V0cHV0ICovCi0gIF9fSEFMX1RJTV9NT0VfRU5BQkxFKGh0aW0pOwotCi0gIC8qIEVuYWJsZSB0aGUgUGVyaXBoZXJhbCwgZXhjZXB0IGluIHRyaWdnZXIgbW9kZSB3aGVyZSBlbmFibGUgaXMgYXV0b21hdGljYWxseSBkb25lIHdpdGggdHJpZ2dlciAqLwotICBpZiAoSVNfVElNX1NMQVZFX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSkKKyAgaWYgKHN0YXR1cyA9PSBIQUxfT0spCiAgIHsKLSAgICB0bXBzbWNyID0gaHRpbS0+SW5zdGFuY2UtPlNNQ1IgJiBUSU1fU01DUl9TTVM7Ci0gICAgaWYgKCFJU19USU1fU0xBVkVNT0RFX1RSSUdHRVJfRU5BQkxFRCh0bXBzbWNyKSkKKyAgICAvKiBFbmFibGUgdGhlIFRJTSBCcmVhayBpbnRlcnJ1cHQgKi8KKyAgICBfX0hBTF9USU1fRU5BQkxFX0lUKGh0aW0sIFRJTV9JVF9CUkVBSyk7CisKKyAgICAvKiBFbmFibGUgdGhlIGNvbXBsZW1lbnRhcnkgUFdNIG91dHB1dCAgKi8KKyAgICBUSU1fQ0N4TkNoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwsIFRJTV9DQ3hOX0VOQUJMRSk7CisKKyAgICAvKiBFbmFibGUgdGhlIE1haW4gT3V0cHV0ICovCisgICAgX19IQUxfVElNX01PRV9FTkFCTEUoaHRpbSk7CisKKyAgICAvKiBFbmFibGUgdGhlIFBlcmlwaGVyYWwsIGV4Y2VwdCBpbiB0cmlnZ2VyIG1vZGUgd2hlcmUgZW5hYmxlIGlzIGF1dG9tYXRpY2FsbHkgZG9uZSB3aXRoIHRyaWdnZXIgKi8KKyAgICBpZiAoSVNfVElNX1NMQVZFX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSkKKyAgICB7CisgICAgICB0bXBzbWNyID0gaHRpbS0+SW5zdGFuY2UtPlNNQ1IgJiBUSU1fU01DUl9TTVM7CisgICAgICBpZiAoIUlTX1RJTV9TTEFWRU1PREVfVFJJR0dFUl9FTkFCTEVEKHRtcHNtY3IpKQorICAgICAgeworICAgICAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOworICAgICAgfQorICAgIH0KKyAgICBlbHNlCiAgICAgewogICAgICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKICAgICB9CiAgIH0KLSAgZWxzZQotICB7Ci0gICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKLSAgfQogCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KLSAgcmV0dXJuIEhBTF9PSzsKKyAgcmV0dXJuIHN0YXR1czsKIH0KIAogLyoqCkBAIC0xMjQ5LDYgKzEyNzYsNyBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTUV4X1BXTU5fU3RvcF9JVChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQ2hhbm5lbCkKIHsKKyAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwogICB1aW50MzJfdCB0bXBjY2VyOwogCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCkBAIC0xMjc4LDMwICsxMzA2LDM0IEBACiAgICAgfQogCiAgICAgZGVmYXVsdDoKKyAgICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKICAgICAgIGJyZWFrOwogICB9CiAKLSAgLyogRGlzYWJsZSB0aGUgY29tcGxlbWVudGFyeSBQV00gb3V0cHV0ICAqLwotICBUSU1fQ0N4TkNoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwsIFRJTV9DQ3hOX0RJU0FCTEUpOwotCi0gIC8qIERpc2FibGUgdGhlIFRJTSBCcmVhayBpbnRlcnJ1cHQgKG9ubHkgaWYgbm8gbW9yZSBjaGFubmVsIGlzIGFjdGl2ZSkgKi8KLSAgdG1wY2NlciA9IGh0aW0tPkluc3RhbmNlLT5DQ0VSOwotICBpZiAoKHRtcGNjZXIgJiAoVElNX0NDRVJfQ0MxTkUgfCBUSU1fQ0NFUl9DQzJORSB8IFRJTV9DQ0VSX0NDM05FKSkgPT0gKHVpbnQzMl90KVJFU0VUKQorICBpZiAoc3RhdHVzID09IEhBTF9PSykKICAgewotICAgIF9fSEFMX1RJTV9ESVNBQkxFX0lUKGh0aW0sIFRJTV9JVF9CUkVBSyk7CisgICAgLyogRGlzYWJsZSB0aGUgY29tcGxlbWVudGFyeSBQV00gb3V0cHV0ICAqLworICAgIFRJTV9DQ3hOQ2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCwgVElNX0NDeE5fRElTQUJMRSk7CisKKyAgICAvKiBEaXNhYmxlIHRoZSBUSU0gQnJlYWsgaW50ZXJydXB0IChvbmx5IGlmIG5vIG1vcmUgY2hhbm5lbCBpcyBhY3RpdmUpICovCisgICAgdG1wY2NlciA9IGh0aW0tPkluc3RhbmNlLT5DQ0VSOworICAgIGlmICgodG1wY2NlciAmIChUSU1fQ0NFUl9DQzFORSB8IFRJTV9DQ0VSX0NDMk5FIHwgVElNX0NDRVJfQ0MzTkUpKSA9PSAodWludDMyX3QpUkVTRVQpCisgICAgeworICAgICAgX19IQUxfVElNX0RJU0FCTEVfSVQoaHRpbSwgVElNX0lUX0JSRUFLKTsKKyAgICB9CisKKyAgICAvKiBEaXNhYmxlIHRoZSBNYWluIE91dHB1dCAqLworICAgIF9fSEFMX1RJTV9NT0VfRElTQUJMRShodGltKTsKKworICAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KKyAgICBfX0hBTF9USU1fRElTQUJMRShodGltKTsKKworICAgIC8qIFNldCB0aGUgVElNIGNvbXBsZW1lbnRhcnkgY2hhbm5lbCBzdGF0ZSAqLworICAgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CiAgIH0KIAotICAvKiBEaXNhYmxlIHRoZSBNYWluIE91dHB1dCAqLwotICBfX0hBTF9USU1fTU9FX0RJU0FCTEUoaHRpbSk7Ci0KLSAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwotICBfX0hBTF9USU1fRElTQUJMRShodGltKTsKLQotICAvKiBTZXQgdGhlIFRJTSBjb21wbGVtZW50YXJ5IGNoYW5uZWwgc3RhdGUgKi8KLSAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKLQogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCi0gIHJldHVybiBIQUxfT0s7CisgIHJldHVybiBzdGF0dXM7CiB9CiAKIC8qKgpAQCAtMTMyMCw2ICsxMzUyLDcgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1FeF9QV01OX1N0YXJ0X0RNQShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQ2hhbm5lbCwgY29uc3QgdWludDMyX3QgKnBEYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IExlbmd0aCkKIHsKKyAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwogICB1aW50MzJfdCB0bXBzbWNyOwogCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCkBAIC0xMzMyLDcgKzEzNjUsNyBAQAogICB9CiAgIGVsc2UgaWYgKFRJTV9DSEFOTkVMX05fU1RBVEVfR0VUKGh0aW0sIENoYW5uZWwpID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKICAgewotICAgIGlmICgocERhdGEgPT0gTlVMTCkgJiYgKExlbmd0aCA+IDBVKSkKKyAgICBpZiAoKHBEYXRhID09IE5VTEwpIHx8IChMZW5ndGggPT0gMFUpKQogICAgIHsKICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgfQpAQCAtMTM1OSw3ICsxMzkyLDcgQEAKIAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgc3RyZWFtICovCiAgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MxXSwgKHVpbnQzMl90KXBEYXRhLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5DQ1IxLAotICAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aCkgIT0gSEFMX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoKSAhPSBIQUxfT0spCiAgICAgICB7CiAgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKQEAgLTEzODAsNyArMTQxMyw3IEBACiAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIHN0cmVhbSAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMl0sICh1aW50MzJfdClwRGF0YSwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+Q0NSMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBMZW5ndGgpICE9IEhBTF9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aCkgIT0gSEFMX09LKQogICAgICAgewogICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CkBAIC0xNDAxLDcgKzE0MzQsNyBAQAogCiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBzdHJlYW0gKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzNdLCAodWludDMyX3QpcERhdGEsICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkNDUjMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoKSAhPSBIQUxfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICBMZW5ndGgpICE9IEhBTF9PSykKICAgICAgIHsKICAgICAgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLwogICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwpAQCAtMTQxMiwzMSArMTQ0NSwzNSBAQAogICAgIH0KIAogICAgIGRlZmF1bHQ6CisgICAgICBzdGF0dXMgPSBIQUxfRVJST1I7CiAgICAgICBicmVhazsKICAgfQogCi0gIC8qIEVuYWJsZSB0aGUgY29tcGxlbWVudGFyeSBQV00gb3V0cHV0ICAqLwotICBUSU1fQ0N4TkNoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwsIFRJTV9DQ3hOX0VOQUJMRSk7Ci0KLSAgLyogRW5hYmxlIHRoZSBNYWluIE91dHB1dCAqLwotICBfX0hBTF9USU1fTU9FX0VOQUJMRShodGltKTsKLQotICAvKiBFbmFibGUgdGhlIFBlcmlwaGVyYWwsIGV4Y2VwdCBpbiB0cmlnZ2VyIG1vZGUgd2hlcmUgZW5hYmxlIGlzIGF1dG9tYXRpY2FsbHkgZG9uZSB3aXRoIHRyaWdnZXIgKi8KLSAgaWYgKElTX1RJTV9TTEFWRV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpCisgIGlmIChzdGF0dXMgPT0gSEFMX09LKQogICB7Ci0gICAgdG1wc21jciA9IGh0aW0tPkluc3RhbmNlLT5TTUNSICYgVElNX1NNQ1JfU01TOwotICAgIGlmICghSVNfVElNX1NMQVZFTU9ERV9UUklHR0VSX0VOQUJMRUQodG1wc21jcikpCisgICAgLyogRW5hYmxlIHRoZSBjb21wbGVtZW50YXJ5IFBXTSBvdXRwdXQgICovCisgICAgVElNX0NDeE5DaGFubmVsQ21kKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsLCBUSU1fQ0N4Tl9FTkFCTEUpOworCisgICAgLyogRW5hYmxlIHRoZSBNYWluIE91dHB1dCAqLworICAgIF9fSEFMX1RJTV9NT0VfRU5BQkxFKGh0aW0pOworCisgICAgLyogRW5hYmxlIHRoZSBQZXJpcGhlcmFsLCBleGNlcHQgaW4gdHJpZ2dlciBtb2RlIHdoZXJlIGVuYWJsZSBpcyBhdXRvbWF0aWNhbGx5IGRvbmUgd2l0aCB0cmlnZ2VyICovCisgICAgaWYgKElTX1RJTV9TTEFWRV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpCisgICAgeworICAgICAgdG1wc21jciA9IGh0aW0tPkluc3RhbmNlLT5TTUNSICYgVElNX1NNQ1JfU01TOworICAgICAgaWYgKCFJU19USU1fU0xBVkVNT0RFX1RSSUdHRVJfRU5BQkxFRCh0bXBzbWNyKSkKKyAgICAgIHsKKyAgICAgICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZQogICAgIHsKICAgICAgIF9fSEFMX1RJTV9FTkFCTEUoaHRpbSk7CiAgICAgfQogICB9Ci0gIGVsc2UKLSAgewotICAgIF9fSEFMX1RJTV9FTkFCTEUoaHRpbSk7Ci0gIH0KIAogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCi0gIHJldHVybiBIQUxfT0s7CisgIHJldHVybiBzdGF0dXM7CiB9CiAKIC8qKgpAQCAtMTQ1Miw2ICsxNDg5LDggQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1FeF9QV01OX1N0b3BfRE1BKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBDaGFubmVsKQogeworICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CisKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DQ1hOX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsKSk7CiAKQEAgLTE0ODIsMjMgKzE1MjEsMjcgQEAKICAgICB9CiAKICAgICBkZWZhdWx0OgorICAgICAgc3RhdHVzID0gSEFMX0VSUk9SOwogICAgICAgYnJlYWs7CiAgIH0KIAotICAvKiBEaXNhYmxlIHRoZSBjb21wbGVtZW50YXJ5IFBXTSBvdXRwdXQgKi8KLSAgVElNX0NDeE5DaGFubmVsQ21kKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsLCBUSU1fQ0N4Tl9ESVNBQkxFKTsKKyAgaWYgKHN0YXR1cyA9PSBIQUxfT0spCisgIHsKKyAgICAvKiBEaXNhYmxlIHRoZSBjb21wbGVtZW50YXJ5IFBXTSBvdXRwdXQgKi8KKyAgICBUSU1fQ0N4TkNoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwsIFRJTV9DQ3hOX0RJU0FCTEUpOwogCi0gIC8qIERpc2FibGUgdGhlIE1haW4gT3V0cHV0ICovCi0gIF9fSEFMX1RJTV9NT0VfRElTQUJMRShodGltKTsKKyAgICAvKiBEaXNhYmxlIHRoZSBNYWluIE91dHB1dCAqLworICAgIF9fSEFMX1RJTV9NT0VfRElTQUJMRShodGltKTsKIAotICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCi0gIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOworICAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KKyAgICBfX0hBTF9USU1fRElTQUJMRShodGltKTsKIAotICAvKiBTZXQgdGhlIFRJTSBjb21wbGVtZW50YXJ5IGNoYW5uZWwgc3RhdGUgKi8KLSAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgICAvKiBTZXQgdGhlIFRJTSBjb21wbGVtZW50YXJ5IGNoYW5uZWwgc3RhdGUgKi8KKyAgICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICB9CiAKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwotICByZXR1cm4gSEFMX09LOworICByZXR1cm4gc3RhdHVzOwogfQogCiAvKioKQEAgLTIwNDQsMTEgKzIwODcsMTIgQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1FeF9SZW1hcENvbmZpZyhUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgUmVtYXApCiB7Ci0gIF9fSEFMX0xPQ0soaHRpbSk7CiAKICAgLyogQ2hlY2sgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX1JFTUFQKGh0aW0tPkluc3RhbmNlLCBSZW1hcCkpOwogCisgIF9fSEFMX0xPQ0soaHRpbSk7CisKICAgLyogU2V0IHRoZSBUaW1lciByZW1hcHBpbmcgY29uZmlndXJhdGlvbiAqLwogICBXUklURV9SRUcoaHRpbS0+SW5zdGFuY2UtPk9SLCBSZW1hcCk7CiAKQEAgLTIxNzksNyArMjIyMyw3IEBACiAgICovCiAKIC8qIFByaXZhdGUgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiogQGRlZmdyb3VwIFRJTUV4X1ByaXZhdGVfRnVuY3Rpb25zIFRJTUV4IFByaXZhdGUgRnVuY3Rpb25zCisvKiogQGRlZmdyb3VwIFRJTUV4X1ByaXZhdGVfRnVuY3Rpb25zIFRJTSBFeHRlbmRlZCBQcml2YXRlIEZ1bmN0aW9ucwogICAqIEB7CiAgICovCiAKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmYyeHhfaGFsX3RpbWViYXNlX3J0Y19hbGFybV90ZW1wbGF0ZS5jIGIvU3JjL3N0bTMyZjJ4eF9oYWxfdGltZWJhc2VfcnRjX2FsYXJtX3RlbXBsYXRlLmMKaW5kZXggNDFjNThhNi4uOGQzMDcxOSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjJ4eF9oYWxfdGltZWJhc2VfcnRjX2FsYXJtX3RlbXBsYXRlLmMKKysrIGIvU3JjL3N0bTMyZjJ4eF9oYWxfdGltZWJhc2VfcnRjX2FsYXJtX3RlbXBsYXRlLmMKQEAgLTEwLDcgKzEwLDcgQEAKICAgKiAgICAgICAgICAgICBSVEMgY2xvY2sgc291cmNlIChIU0UsIExTRSBvciBMU0kpCiAgICogICAgICAgICAgICsgVGhlIGFsYXJtIGlzIGNvbmZpZ3VyZWQgdG8gYXNzZXJ0IGFuIGludGVycnVwdCB3aGVuIHRoZSBSVEMgcmVhY2hlcyAxbXMgCiAgICogICAgICAgICAgICsgSEFMX0luY1RpY2sgaXMgY2FsbGVkIGF0IGVhY2ggQWxhcm0gZXZlbnQgYW5kIHRoZSB0aW1lIGlzIHJlc2V0IHRvIDAwOjAwOjAwCi0gICogICAgICAgICAgICsgSFNFIChkZWZhdWx0KSwgTFNFIG9yIExTSSBjYW4gYmUgc2VsZWN0ZWQgYXMgUlRDIGNsb2NrIHNvdXJjZSAgCisgICogICAgICAgICAgICsgSFNFIChkZWZhdWx0KSwgTFNFIG9yIExTSSBjYW4gYmUgc2VsZWN0ZWQgYXMgUlRDIGNsb2NrIHNvdXJjZQogICAqCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KQEAgLTMzMSwzICszMzEsNSBAQAogLyoqCiAgICogQH0KICAgKi8KKworCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmMnh4X2hhbF90aW1lYmFzZV9ydGNfd2FrZXVwX3RlbXBsYXRlLmMgYi9TcmMvc3RtMzJmMnh4X2hhbF90aW1lYmFzZV9ydGNfd2FrZXVwX3RlbXBsYXRlLmMKaW5kZXggYjdiZmExYi4uOGNjYzFiMyAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjJ4eF9oYWxfdGltZWJhc2VfcnRjX3dha2V1cF90ZW1wbGF0ZS5jCisrKyBiL1NyYy9zdG0zMmYyeHhfaGFsX3RpbWViYXNlX3J0Y193YWtldXBfdGVtcGxhdGUuYwpAQCAtMjMsNyArMjMsNyBAQAogICAqIElmIG5vIExJQ0VOU0UgZmlsZSBjb21lcyB3aXRoIHRoaXMgc29mdHdhcmUsIGl0IGlzIHByb3ZpZGVkIEFTLUlTLgogICAqCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotIEB2ZXJiYXRpbQorICBAdmVyYmF0aW0KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICAgICAgICAgICAjIyMjIyBIb3cgdG8gdXNlIHRoaXMgZHJpdmVyICMjIyMjCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMzAxLDMgKzMwMSw1IEBACiAvKioKICAgKiBAfQogICAqLworCisKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmYyeHhfaGFsX3RpbWViYXNlX3RpbV90ZW1wbGF0ZS5jIGIvU3JjL3N0bTMyZjJ4eF9oYWxfdGltZWJhc2VfdGltX3RlbXBsYXRlLmMKaW5kZXggODZiM2JiOC4uMTM5NDAzOCAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjJ4eF9oYWxfdGltZWJhc2VfdGltX3RlbXBsYXRlLmMKKysrIGIvU3JjL3N0bTMyZjJ4eF9oYWxfdGltZWJhc2VfdGltX3RlbXBsYXRlLmMKQEAgLTE3NywzICsxNzcsNSBAQAogLyoqCiAgICogQH0KICAgKi8gCisKKwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjJ4eF9oYWxfdWFydC5jIGIvU3JjL3N0bTMyZjJ4eF9oYWxfdWFydC5jCmluZGV4IDUzNjQ5ZmEuLjBlMTE3YTUgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYyeHhfaGFsX3VhcnQuYworKysgYi9TcmMvc3RtMzJmMnh4X2hhbF91YXJ0LmMKQEAgLTg0LDggKzg0LDggQEAKICAgICBhbGxvd3MgdGhlIHVzZXIgdG8gY29uZmlndXJlIGR5bmFtaWNhbGx5IHRoZSBkcml2ZXIgY2FsbGJhY2tzLgogCiAgICAgWy4uXQotICAgIFVzZSBGdW5jdGlvbiBAcmVmIEhBTF9VQVJUX1JlZ2lzdGVyQ2FsbGJhY2soKSB0byByZWdpc3RlciBhIHVzZXIgY2FsbGJhY2suCi0gICAgRnVuY3Rpb24gQHJlZiBIQUxfVUFSVF9SZWdpc3RlckNhbGxiYWNrKCkgYWxsb3dzIHRvIHJlZ2lzdGVyIGZvbGxvd2luZyBjYWxsYmFja3M6CisgICAgVXNlIEZ1bmN0aW9uIEhBTF9VQVJUX1JlZ2lzdGVyQ2FsbGJhY2soKSB0byByZWdpc3RlciBhIHVzZXIgY2FsbGJhY2suCisgICAgRnVuY3Rpb24gSEFMX1VBUlRfUmVnaXN0ZXJDYWxsYmFjaygpIGFsbG93cyB0byByZWdpc3RlciBmb2xsb3dpbmcgY2FsbGJhY2tzOgogICAgICgrKSBUeEhhbGZDcGx0Q2FsbGJhY2sgICAgICAgIDogVHggSGFsZiBDb21wbGV0ZSBDYWxsYmFjay4KICAgICAoKykgVHhDcGx0Q2FsbGJhY2sgICAgICAgICAgICA6IFR4IENvbXBsZXRlIENhbGxiYWNrLgogICAgICgrKSBSeEhhbGZDcGx0Q2FsbGJhY2sgICAgICAgIDogUnggSGFsZiBDb21wbGV0ZSBDYWxsYmFjay4KQEAgLTEwMCw5ICsxMDAsOSBAQAogICAgIGFuZCBhIHBvaW50ZXIgdG8gdGhlIHVzZXIgY2FsbGJhY2sgZnVuY3Rpb24uCiAKICAgICBbLi5dCi0gICAgVXNlIGZ1bmN0aW9uIEByZWYgSEFMX1VBUlRfVW5SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVzZXQgYSBjYWxsYmFjayB0byB0aGUgZGVmYXVsdAorICAgIFVzZSBmdW5jdGlvbiBIQUxfVUFSVF9VblJlZ2lzdGVyQ2FsbGJhY2soKSB0byByZXNldCBhIGNhbGxiYWNrIHRvIHRoZSBkZWZhdWx0CiAgICAgd2VhayAoc3VyY2hhcmdlZCkgZnVuY3Rpb24uCi0gICAgQHJlZiBIQUxfVUFSVF9VblJlZ2lzdGVyQ2FsbGJhY2soKSB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsCisgICAgSEFMX1VBUlRfVW5SZWdpc3RlckNhbGxiYWNrKCkgdGFrZXMgYXMgcGFyYW1ldGVycyB0aGUgSEFMIHBlcmlwaGVyYWwgaGFuZGxlLAogICAgIGFuZCB0aGUgQ2FsbGJhY2sgSUQuCiAgICAgVGhpcyBmdW5jdGlvbiBhbGxvd3MgdG8gcmVzZXQgZm9sbG93aW5nIGNhbGxiYWNrczoKICAgICAoKykgVHhIYWxmQ3BsdENhbGxiYWNrICAgICAgICA6IFR4IEhhbGYgQ29tcGxldGUgQ2FsbGJhY2suCkBAIC0xMTgsMTYgKzExOCwxNiBAQAogCiAgICAgWy4uXQogICAgIEZvciBzcGVjaWZpYyBjYWxsYmFjayBSeEV2ZW50Q2FsbGJhY2ssIHVzZSBkZWRpY2F0ZWQgcmVnaXN0cmF0aW9uL3Jlc2V0IGZ1bmN0aW9uczoKLSAgICByZXNwZWN0aXZlbHkgQHJlZiBIQUxfVUFSVF9SZWdpc3RlclJ4RXZlbnRDYWxsYmFjaygpICwgQHJlZiBIQUxfVUFSVF9VblJlZ2lzdGVyUnhFdmVudENhbGxiYWNrKCkuCisgICAgcmVzcGVjdGl2ZWx5IEhBTF9VQVJUX1JlZ2lzdGVyUnhFdmVudENhbGxiYWNrKCkgLCBIQUxfVUFSVF9VblJlZ2lzdGVyUnhFdmVudENhbGxiYWNrKCkuCiAKICAgICBbLi5dCi0gICAgQnkgZGVmYXVsdCwgYWZ0ZXIgdGhlIEByZWYgSEFMX1VBUlRfSW5pdCgpIGFuZCB3aGVuIHRoZSBzdGF0ZSBpcyBIQUxfVUFSVF9TVEFURV9SRVNFVAorICAgIEJ5IGRlZmF1bHQsIGFmdGVyIHRoZSBIQUxfVUFSVF9Jbml0KCkgYW5kIHdoZW4gdGhlIHN0YXRlIGlzIEhBTF9VQVJUX1NUQVRFX1JFU0VUCiAgICAgYWxsIGNhbGxiYWNrcyBhcmUgc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIHdlYWsgKHN1cmNoYXJnZWQpIGZ1bmN0aW9uczoKLSAgICBleGFtcGxlcyBAcmVmIEhBTF9VQVJUX1R4Q3BsdENhbGxiYWNrKCksIEByZWYgSEFMX1VBUlRfUnhIYWxmQ3BsdENhbGxiYWNrKCkuCisgICAgZXhhbXBsZXMgSEFMX1VBUlRfVHhDcGx0Q2FsbGJhY2soKSwgSEFMX1VBUlRfUnhIYWxmQ3BsdENhbGxiYWNrKCkuCiAgICAgRXhjZXB0aW9uIGRvbmUgZm9yIE1zcEluaXQgYW5kIE1zcERlSW5pdCBmdW5jdGlvbnMgdGhhdCBhcmUgcmVzcGVjdGl2ZWx5Ci0gICAgcmVzZXQgdG8gdGhlIGxlZ2FjeSB3ZWFrIChzdXJjaGFyZ2VkKSBmdW5jdGlvbnMgaW4gdGhlIEByZWYgSEFMX1VBUlRfSW5pdCgpCi0gICAgYW5kIEByZWYgSEFMX1VBUlRfRGVJbml0KCkgb25seSB3aGVuIHRoZXNlIGNhbGxiYWNrcyBhcmUgbnVsbCAobm90IHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCkuCi0gICAgSWYgbm90LCBNc3BJbml0IG9yIE1zcERlSW5pdCBhcmUgbm90IG51bGwsIHRoZSBAcmVmIEhBTF9VQVJUX0luaXQoKSBhbmQgQHJlZiBIQUxfVUFSVF9EZUluaXQoKQorICAgIHJlc2V0IHRvIHRoZSBsZWdhY3kgd2VhayAoc3VyY2hhcmdlZCkgZnVuY3Rpb25zIGluIHRoZSBIQUxfVUFSVF9Jbml0KCkKKyAgICBhbmQgSEFMX1VBUlRfRGVJbml0KCkgb25seSB3aGVuIHRoZXNlIGNhbGxiYWNrcyBhcmUgbnVsbCAobm90IHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCkuCisgICAgSWYgbm90LCBNc3BJbml0IG9yIE1zcERlSW5pdCBhcmUgbm90IG51bGwsIHRoZSBIQUxfVUFSVF9Jbml0KCkgYW5kIEhBTF9VQVJUX0RlSW5pdCgpCiAgICAga2VlcCBhbmQgdXNlIHRoZSB1c2VyIE1zcEluaXQvTXNwRGVJbml0IGNhbGxiYWNrcyAocmVnaXN0ZXJlZCBiZWZvcmVoYW5kKS4KIAogICAgIFsuLl0KQEAgLTEzNiw4ICsxMzYsOCBAQAogICAgIGluIEhBTF9VQVJUX1NUQVRFX1JFQURZIG9yIEhBTF9VQVJUX1NUQVRFX1JFU0VUIHN0YXRlLCB0aHVzIHJlZ2lzdGVyZWQgKHVzZXIpCiAgICAgTXNwSW5pdC9EZUluaXQgY2FsbGJhY2tzIGNhbiBiZSB1c2VkIGR1cmluZyB0aGUgSW5pdC9EZUluaXQuCiAgICAgSW4gdGhhdCBjYXNlIGZpcnN0IHJlZ2lzdGVyIHRoZSBNc3BJbml0L01zcERlSW5pdCB1c2VyIGNhbGxiYWNrcwotICAgIHVzaW5nIEByZWYgSEFMX1VBUlRfUmVnaXN0ZXJDYWxsYmFjaygpIGJlZm9yZSBjYWxsaW5nIEByZWYgSEFMX1VBUlRfRGVJbml0KCkKLSAgICBvciBAcmVmIEhBTF9VQVJUX0luaXQoKSBmdW5jdGlvbi4KKyAgICB1c2luZyBIQUxfVUFSVF9SZWdpc3RlckNhbGxiYWNrKCkgYmVmb3JlIGNhbGxpbmcgSEFMX1VBUlRfRGVJbml0KCkKKyAgICBvciBIQUxfVUFSVF9Jbml0KCkgZnVuY3Rpb24uCiAKICAgICBbLi5dCiAgICAgV2hlbiBUaGUgY29tcGlsYXRpb24gZGVmaW5lIFVTRV9IQUxfVUFSVF9SRUdJU1RFUl9DQUxMQkFDS1MgaXMgc2V0IHRvIDAgb3IKQEAgLTczNCw2ICs3MzQsOCBAQAogLyoqCiAgICogQGJyaWVmICBSZWdpc3RlciBhIFVzZXIgVUFSVCBDYWxsYmFjawogICAqICAgICAgICAgVG8gYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSB3ZWFrIHByZWRlZmluZWQgY2FsbGJhY2sKKyAgKiBAbm90ZSAgIFRoZSBIQUxfVUFSVF9SZWdpc3RlckNhbGxiYWNrKCkgbWF5IGJlIGNhbGxlZCBiZWZvcmUgSEFMX1VBUlRfSW5pdCgpLCBIQUxfSGFsZkR1cGxleF9Jbml0KCksIEhBTF9MSU5fSW5pdCgpLAorICAqICAgICAgICAgSEFMX011bHRpUHJvY2Vzc29yX0luaXQoKSB0byByZWdpc3RlciBjYWxsYmFja3MgZm9yIEhBTF9VQVJUX01TUElOSVRfQ0JfSUQgYW5kIEhBTF9VQVJUX01TUERFSU5JVF9DQl9JRAogICAqIEBwYXJhbSAgaHVhcnQgdWFydCBoYW5kbGUKICAgKiBAcGFyYW0gIENhbGxiYWNrSUQgSUQgb2YgdGhlIGNhbGxiYWNrIHRvIGJlIHJlZ2lzdGVyZWQKICAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CkBAIC03NjIsOCArNzY0LDYgQEAKIAogICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KLSAgLyogUHJvY2VzcyBsb2NrZWQgKi8KLSAgX19IQUxfTE9DSyhodWFydCk7CiAKICAgaWYgKGh1YXJ0LT5nU3RhdGUgPT0gSEFMX1VBUlRfU1RBVEVfUkVBRFkpCiAgIHsKQEAgLTg0OCwxNSArODQ4LDE1IEBACiAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKICAgfQogCi0gIC8qIFJlbGVhc2UgTG9jayAqLwotICBfX0hBTF9VTkxPQ0soaHVhcnQpOwotCiAgIHJldHVybiBzdGF0dXM7CiB9CiAKIC8qKgogICAqIEBicmllZiAgVW5yZWdpc3RlciBhbiBVQVJUIENhbGxiYWNrCiAgICogICAgICAgICBVQVJUIGNhbGxhYmFjayBpcyByZWRpcmVjdGVkIHRvIHRoZSB3ZWFrIHByZWRlZmluZWQgY2FsbGJhY2sKKyAgKiBAbm90ZSAgIFRoZSBIQUxfVUFSVF9VblJlZ2lzdGVyQ2FsbGJhY2soKSBtYXkgYmUgY2FsbGVkIGJlZm9yZSBIQUxfVUFSVF9Jbml0KCksIEhBTF9IYWxmRHVwbGV4X0luaXQoKSwKKyAgKiAgICAgICAgIEhBTF9MSU5fSW5pdCgpLCBIQUxfTXVsdGlQcm9jZXNzb3JfSW5pdCgpIHRvIHVuLXJlZ2lzdGVyIGNhbGxiYWNrcyBmb3IgSEFMX1VBUlRfTVNQSU5JVF9DQl9JRAorICAqICAgICAgICAgYW5kIEhBTF9VQVJUX01TUERFSU5JVF9DQl9JRAogICAqIEBwYXJhbSAgaHVhcnQgdWFydCBoYW5kbGUKICAgKiBAcGFyYW0gIENhbGxiYWNrSUQgSUQgb2YgdGhlIGNhbGxiYWNrIHRvIGJlIHVucmVnaXN0ZXJlZAogICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKQEAgLTg3Niw5ICs4NzYsNiBAQAogewogICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CiAKLSAgLyogUHJvY2VzcyBsb2NrZWQgKi8KLSAgX19IQUxfTE9DSyhodWFydCk7Ci0KICAgaWYgKEhBTF9VQVJUX1NUQVRFX1JFQURZID09IGh1YXJ0LT5nU3RhdGUpCiAgIHsKICAgICBzd2l0Y2ggKENhbGxiYWNrSUQpCkBAIC05NjIsOSArOTU5LDYgQEAKICAgICBzdGF0dXMgPSAgSEFMX0VSUk9SOwogICB9CiAKLSAgLyogUmVsZWFzZSBMb2NrICovCi0gIF9fSEFMX1VOTE9DSyhodWFydCk7Ci0KICAgcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtMTMwOSw3ICsxMzAzLDcgQEAKICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgfQogCi0gICAgaHVhcnQtPnBUeEJ1ZmZQdHIgPSAodWludDhfdCAqKSBwRGF0YTsKKyAgICBodWFydC0+cFR4QnVmZlB0ciA9IHBEYXRhOwogICAgIGh1YXJ0LT5UeFhmZXJTaXplID0gU2l6ZTsKICAgICBodWFydC0+VHhYZmVyQ291bnQgPSBTaXplOwogCkBAIC0xMzcyLDcgKzEzNjYsNyBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1VBUlRfVHJhbnNtaXRfRE1BKFVBUlRfSGFuZGxlVHlwZURlZiAqaHVhcnQsIGNvbnN0IHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplKQogewotICB1aW50MzJfdCAqdG1wOworICBjb25zdCB1aW50MzJfdCAqdG1wOwogCiAgIC8qIENoZWNrIHRoYXQgYSBUeCBwcm9jZXNzIGlzIG5vdCBhbHJlYWR5IG9uZ29pbmcgKi8KICAgaWYgKGh1YXJ0LT5nU3RhdGUgPT0gSEFMX1VBUlRfU1RBVEVfUkVBRFkpCkBAIC0xMzgyLDcgKzEzNzYsNyBAQAogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICB9CiAKLSAgICBodWFydC0+cFR4QnVmZlB0ciA9ICh1aW50OF90ICopIHBEYXRhOworICAgIGh1YXJ0LT5wVHhCdWZmUHRyID0gcERhdGE7CiAgICAgaHVhcnQtPlR4WGZlclNpemUgPSBTaXplOwogICAgIGh1YXJ0LT5UeFhmZXJDb3VudCA9IFNpemU7CiAKQEAgLTE0MDIsOCArMTM5Niw4IEBACiAgICAgaHVhcnQtPmhkbWF0eC0+WGZlckFib3J0Q2FsbGJhY2sgPSBOVUxMOwogCiAgICAgLyogRW5hYmxlIHRoZSBVQVJUIHRyYW5zbWl0IERNQSBzdHJlYW0gKi8KLSAgICB0bXAgPSAodWludDMyX3QgKikmcERhdGE7Ci0gICAgSEFMX0RNQV9TdGFydF9JVChodWFydC0+aGRtYXR4LCAqKHVpbnQzMl90ICopdG1wLCAodWludDMyX3QpJmh1YXJ0LT5JbnN0YW5jZS0+RFIsIFNpemUpOworICAgIHRtcCA9IChjb25zdCB1aW50MzJfdCAqKSZwRGF0YTsKKyAgICBIQUxfRE1BX1N0YXJ0X0lUKGh1YXJ0LT5oZG1hdHgsICooY29uc3QgdWludDMyX3QgKil0bXAsICh1aW50MzJfdCkmaHVhcnQtPkluc3RhbmNlLT5EUiwgU2l6ZSk7CiAKICAgICAvKiBDbGVhciB0aGUgVEMgZmxhZyBpbiB0aGUgU1IgcmVnaXN0ZXIgYnkgd3JpdGluZyAwIHRvIGl0ICovCiAgICAgX19IQUxfVUFSVF9DTEVBUl9GTEFHKGh1YXJ0LCBVQVJUX0ZMQUdfVEMpOwpAQCAtMzUxMCwxNCArMzUwNCwxNCBAQAogICAqLwogc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIFVBUlRfVHJhbnNtaXRfSVQoVUFSVF9IYW5kbGVUeXBlRGVmICpodWFydCkKIHsKLSAgdWludDE2X3QgKnRtcDsKKyAgY29uc3QgdWludDE2X3QgKnRtcDsKIAogICAvKiBDaGVjayB0aGF0IGEgVHggcHJvY2VzcyBpcyBvbmdvaW5nICovCiAgIGlmIChodWFydC0+Z1N0YXRlID09IEhBTF9VQVJUX1NUQVRFX0JVU1lfVFgpCiAgIHsKICAgICBpZiAoKGh1YXJ0LT5Jbml0LldvcmRMZW5ndGggPT0gVUFSVF9XT1JETEVOR1RIXzlCKSAmJiAoaHVhcnQtPkluaXQuUGFyaXR5ID09IFVBUlRfUEFSSVRZX05PTkUpKQogICAgIHsKLSAgICAgIHRtcCA9ICh1aW50MTZfdCAqKSBodWFydC0+cFR4QnVmZlB0cjsKKyAgICAgIHRtcCA9IChjb25zdCB1aW50MTZfdCAqKSBodWFydC0+cFR4QnVmZlB0cjsKICAgICAgIGh1YXJ0LT5JbnN0YW5jZS0+RFIgPSAodWludDE2X3QpKCp0bXAgJiAodWludDE2X3QpMHgwMUZGKTsKICAgICAgIGh1YXJ0LT5wVHhCdWZmUHRyICs9IDJVOwogICAgIH0KQEAgLTM3MzksMyArMzczMyw0IEBACiAvKioKICAgKiBAfQogICAqLworCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmMnh4X2hhbF91c2FydC5jIGIvU3JjL3N0bTMyZjJ4eF9oYWxfdXNhcnQuYwppbmRleCAzOGRjNWRiLi5kY2M4ZWE5IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmMnh4X2hhbF91c2FydC5jCisrKyBiL1NyYy9zdG0zMmYyeHhfaGFsX3VzYXJ0LmMKQEAgLTE5Myw3ICsxOTMsNiBAQAogICAgIHwtLS0tLS0tLS18LS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgIHwgICAgMSAgICB8ICAgIDEgICAgICB8ICAgIHwgU0IgfCA4IGJpdCBkYXRhIHwgUEIgfCBTVEIgfCAgICAgfAogICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqLwogCkBAIC00MjQsNiArNDIzLDggQEAKIC8qKgogICAqIEBicmllZiAgUmVnaXN0ZXIgYSBVc2VyIFVTQVJUIENhbGxiYWNrCiAgICogICAgICAgICBUbyBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIHdlYWsgcHJlZGVmaW5lZCBjYWxsYmFjaworICAqIEBub3RlICAgVGhlIEhBTF9VU0FSVF9SZWdpc3RlckNhbGxiYWNrKCkgbWF5IGJlIGNhbGxlZCBiZWZvcmUgSEFMX1VTQVJUX0luaXQoKSBpbiBIQUxfVVNBUlRfU1RBVEVfUkVTRVQKKyAgKiAgICAgICAgIHRvIHJlZ2lzdGVyIGNhbGxiYWNrcyBmb3IgSEFMX1VTQVJUX01TUElOSVRfQ0JfSUQgYW5kIEhBTF9VU0FSVF9NU1BERUlOSVRfQ0JfSUQKICAgKiBAcGFyYW0gIGh1c2FydCB1c2FydCBoYW5kbGUKICAgKiBAcGFyYW0gIENhbGxiYWNrSUQgSUQgb2YgdGhlIGNhbGxiYWNrIHRvIGJlIHJlZ2lzdGVyZWQKICAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CkBAIC00NTEsOCArNDUyLDYgQEAKIAogICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KLSAgLyogUHJvY2VzcyBsb2NrZWQgKi8KLSAgX19IQUxfTE9DSyhodXNhcnQpOwogCiAgIGlmIChodXNhcnQtPlN0YXRlID09IEhBTF9VU0FSVF9TVEFURV9SRUFEWSkKICAgewpAQCAtNTMzLDE1ICs1MzIsMTQgQEAKICAgICBzdGF0dXMgPSAgSEFMX0VSUk9SOwogICB9CiAKLSAgLyogUmVsZWFzZSBMb2NrICovCi0gIF9fSEFMX1VOTE9DSyhodXNhcnQpOwotCiAgIHJldHVybiBzdGF0dXM7CiB9CiAKIC8qKgogICAqIEBicmllZiAgVW5yZWdpc3RlciBhbiBVU0FSVCBDYWxsYmFjawogICAqICAgICAgICAgVVNBUlQgY2FsbGFiYWNrIGlzIHJlZGlyZWN0ZWQgdG8gdGhlIHdlYWsgcHJlZGVmaW5lZCBjYWxsYmFjaworICAqIEBub3RlICAgVGhlIEhBTF9VU0FSVF9VblJlZ2lzdGVyQ2FsbGJhY2soKSBtYXkgYmUgY2FsbGVkIGJlZm9yZSBIQUxfVVNBUlRfSW5pdCgpIGluIEhBTF9VU0FSVF9TVEFURV9SRVNFVAorICAqICAgICAgICAgdG8gdW4tcmVnaXN0ZXIgY2FsbGJhY2tzIGZvciBIQUxfVVNBUlRfTVNQSU5JVF9DQl9JRCBhbmQgSEFMX1VTQVJUX01TUERFSU5JVF9DQl9JRAogICAqIEBwYXJhbSAgaHVzYXJ0IHVzYXJ0IGhhbmRsZQogICAqIEBwYXJhbSAgQ2FsbGJhY2tJRCBJRCBvZiB0aGUgY2FsbGJhY2sgdG8gYmUgdW5yZWdpc3RlcmVkCiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgpAQCAtNTYwLDkgKzU1OCw2IEBACiB7CiAgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKIAotICAvKiBQcm9jZXNzIGxvY2tlZCAqLwotICBfX0hBTF9MT0NLKGh1c2FydCk7Ci0KICAgaWYgKGh1c2FydC0+U3RhdGUgPT0gSEFMX1VTQVJUX1NUQVRFX1JFQURZKQogICB7CiAgICAgc3dpdGNoIChDYWxsYmFja0lEKQpAQCAtNjQyLDkgKzYzNyw2IEBACiAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKICAgfQogCi0gIC8qIFJlbGVhc2UgTG9jayAqLwotICBfX0hBTF9VTkxPQ0soaHVzYXJ0KTsKLQogICByZXR1cm4gc3RhdHVzOwogfQogI2VuZGlmIC8qIFVTRV9IQUxfVVNBUlRfUkVHSVNURVJfQ0FMTEJBQ0tTICovCkBAIC0yODE4LDMgKzI4MTAsNCBAQAogLyoqCiAgICogQH0KICAgKi8KKwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjJ4eF9oYWxfd3dkZy5jIGIvU3JjL3N0bTMyZjJ4eF9oYWxfd3dkZy5jCmluZGV4IDk5ZjI1Y2YuLjljYzliMTIgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYyeHhfaGFsX3d3ZGcuYworKysgYi9TcmMvc3RtMzJmMnh4X2hhbF93d2RnLmMKQEAgLTcsNyArNyw2IEBACiAgICogICAgICAgICAgZnVuY3Rpb25hbGl0aWVzIG9mIHRoZSBXaW5kb3cgV2F0Y2hkb2cgKFdXREcpIHBlcmlwaGVyYWw6CiAgICogICAgICAgICAgICsgSW5pdGlhbGl6YXRpb24gYW5kIENvbmZpZ3VyYXRpb24gZnVuY3Rpb25zCiAgICogICAgICAgICAgICsgSU8gb3BlcmF0aW9uIGZ1bmN0aW9ucwotICAqCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgpAQCAtNTIsNyArNTEsNyBAQAogICAgICAgICAoKyspIG1heCB0aW1lIChtUykgPSAxMDAwICogKENvdW50ZXIgLSAweDQwKSAvIFdXREcgY2xvY2sKICAgICAoKykgVHlwaWNhbCB2YWx1ZXM6CiAgICAgICAgICgrKykgQ291bnRlciBtaW4gKFRbNTswXSA9IDB4MDApIGF0IDMwTUh6IChQQ0xLMSkgd2l0aCB6ZXJvIHByZXNjYWxlcjoKLSAgICAgICAgICAgICBtYXggdGltZW91dCBiZWZvcmUgcmVzZXQ6IGFwcHJveGltYXRlbHkgMTM2LjUztXMKKyAgICAgICAgICAgICBtYXggdGltZW91dCBiZWZvcmUgcmVzZXQ6IGFwcHJveGltYXRlbHkgMTM2LjUzdXMKICAgICAgICAgKCsrKSBDb3VudGVyIG1heCAoVFs1OzBdID0gMHgzRikgYXQgMzBNSHogKFBDTEsxKSB3aXRoIHByZXNjYWxlcgogICAgICAgICAgICAgIGRpdmlkaW5nIGJ5IDg6CiAgICAgICAgICAgICAgbWF4IHRpbWVvdXQgYmVmb3JlIHJlc2V0OiBhcHByb3hpbWF0ZWx5IDY5LjkxbXMKQEAgLTY3LDcgKzY2LDcgQEAKICAgICAoKykgRW5hYmxlIFdXREcgQVBCMSBjbG9jayB1c2luZyBfX0hBTF9SQ0NfV1dER19DTEtfRU5BQkxFKCkuCiAgICAgKCspIENvbmZpZ3VyZSB0aGUgV1dERyBwcmVzY2FsZXIsIHJlZnJlc2ggd2luZG93IHZhbHVlLCBjb3VudGVyIHZhbHVlIGFuZCBlYXJseQogICAgICAgICBpbnRlcnJ1cHQgc3RhdHVzIHVzaW5nIEhBTF9XV0RHX0luaXQoKSBmdW5jdGlvbi4gVGhpcyB3aWxsIGF1dG9tYXRpY2FsbHkKLSAgICAgICAgZW5hYmxlIFdXREcgYW5kIHN0YXJ0IGl0cyBkb3duY291bnRlci4gVGltZSByZWZlcmVuY2UgY2FuIGJlIHRha2VuIGZyb20gCisgICAgICAgIGVuYWJsZSBXV0RHIGFuZCBzdGFydCBpdHMgZG93bmNvdW50ZXIuIFRpbWUgcmVmZXJlbmNlIGNhbiBiZSB0YWtlbiBmcm9tCiAgICAgICAgIGZ1bmN0aW9uIGV4aXQuIENhcmUgbXVzdCBiZSB0YWtlbiB0byBwcm92aWRlIGEgY291bnRlciB2YWx1ZQogICAgICAgICBncmVhdGVyIHRoYW4gMHg0MCB0byBwcmV2ZW50IGdlbmVyYXRpb24gb2YgaW1tZWRpYXRlIHJlc2V0LgogICAgICgrKSBJZiB0aGUgRWFybHkgV2FrZXVwIEludGVycnVwdCAoRVdJKSBmZWF0dXJlIGlzIGVuYWJsZWQsIGFuIGludGVycnVwdCBpcwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjJ4eF9sbF9hZGMuYyBiL1NyYy9zdG0zMmYyeHhfbGxfYWRjLmMKaW5kZXggYjkzM2Q2Yi4uNGQxNTNmYiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjJ4eF9sbF9hZGMuYworKysgYi9TcmMvc3RtMzJmMnh4X2xsX2FkYy5jCkBAIC05MjksMyArOTI5LDQgQEAKICAgKi8KIAogI2VuZGlmIC8qIFVTRV9GVUxMX0xMX0RSSVZFUiAqLworCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmMnh4X2xsX2NyYy5jIGIvU3JjL3N0bTMyZjJ4eF9sbF9jcmMuYwppbmRleCBlODUwZGU3Li43MDg5MjYwIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmMnh4X2xsX2NyYy5jCisrKyBiL1NyYy9zdG0zMmYyeHhfbGxfY3JjLmMKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlICJzdG0zMl9hc3NlcnQuaCIKICNlbHNlCiAjZGVmaW5lIGFzc2VydF9wYXJhbShleHByKSAoKHZvaWQpMFUpCi0jZW5kaWYvKiBVU0VfRlVMTF9BU1NFUlQgKi8KKyNlbmRpZiAvKiBVU0VfRlVMTF9BU1NFUlQgKi8KIAogLyoqIEBhZGR0b2dyb3VwIFNUTTMyRjJ4eF9MTF9Ecml2ZXIKICAgKiBAewpAQCAtNTksNyArNTksNyBAQAogICAqICAgICAgICAgIC0gU1VDQ0VTUzogQ1JDIHJlZ2lzdGVycyBhcmUgZGUtaW5pdGlhbGl6ZWQKICAgKiAgICAgICAgICAtIEVSUk9SOiBDUkMgcmVnaXN0ZXJzIGFyZSBub3QgZGUtaW5pdGlhbGl6ZWQKICAgKi8KLUVycm9yU3RhdHVzIExMX0NSQ19EZUluaXQoQ1JDX1R5cGVEZWYgKkNSQ3gpCitFcnJvclN0YXR1cyBMTF9DUkNfRGVJbml0KGNvbnN0IENSQ19UeXBlRGVmICpDUkN4KQogewogICBFcnJvclN0YXR1cyBzdGF0dXMgPSBTVUNDRVNTOwogCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmMnh4X2xsX2RhYy5jIGIvU3JjL3N0bTMyZjJ4eF9sbF9kYWMuYwppbmRleCBkZGExOWU5Li5mNmVhYjRmIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmMnh4X2xsX2RhYy5jCisrKyBiL1NyYy9zdG0zMmYyeHhfbGxfZGFjLmMKQEAgLTQ2LDEyICs0NiwxMiBAQAogICAqIEB7CiAgICovCiAjZGVmaW5lIElTX0xMX0RBQ19DSEFOTkVMKF9fREFDX0NIQU5ORUxfXykgICAgICAgIFwKLSAgKCAgKChfX0RBQ19DSEFOTkVMX18pID09IExMX0RBQ19DSEFOTkVMXzEpICAgICAgXAotICAgICB8fCAoKF9fREFDX0NIQU5ORUxfXykgPT0gTExfREFDX0NIQU5ORUxfMikgICBcCisgICgoKF9fREFDX0NIQU5ORUxfXykgPT0gTExfREFDX0NIQU5ORUxfMSkgICAgICBcCisgICB8fCAoKF9fREFDX0NIQU5ORUxfXykgPT0gTExfREFDX0NIQU5ORUxfMikgICBcCiAgICkKIAogI2RlZmluZSBJU19MTF9EQUNfVFJJR0dFUl9TT1VSQ0UoX19UUklHR0VSX1NPVVJDRV9fKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKCAgICgoX19UUklHR0VSX1NPVVJDRV9fKSA9PSBMTF9EQUNfVFJJR19TT0ZUV0FSRSkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICgoKF9fVFJJR0dFUl9TT1VSQ0VfXykgPT0gTExfREFDX1RSSUdfU09GVFdBUkUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgfHwgKChfX1RSSUdHRVJfU09VUkNFX18pID09IExMX0RBQ19UUklHX0VYVF9USU0yX1RSR08pICAgICAgICAgICAgICAgICAgICAgIFwKICAgIHx8ICgoX19UUklHR0VSX1NPVVJDRV9fKSA9PSBMTF9EQUNfVFJJR19FWFRfVElNNF9UUkdPKSAgICAgICAgICAgICAgICAgICAgICBcCiAgICB8fCAoKF9fVFJJR0dFUl9TT1VSQ0VfXykgPT0gTExfREFDX1RSSUdfRVhUX1RJTTVfVFJHTykgICAgICAgICAgICAgICAgICAgICAgXApAQCAtNjIsNDUgKzYyLDQ1IEBACiAgICkKIAogI2RlZmluZSBJU19MTF9EQUNfV0FWRV9BVVRPX0dFTkVSX01PREUoX19XQVZFX0FVVE9fR0VORVJBVElPTl9NT0RFX18pICAgICAgICAgICAgICBcCi0gICggICAoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fTU9ERV9fKSA9PSBMTF9EQUNfV0FWRV9BVVRPX0dFTkVSQVRJT05fTk9ORSkgICAgICAgIFwKLSAgICAgIHx8ICgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9NT0RFX18pID09IExMX0RBQ19XQVZFX0FVVE9fR0VORVJBVElPTl9OT0lTRSkgICAgXAotICAgICAgfHwgKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX01PREVfXykgPT0gTExfREFDX1dBVkVfQVVUT19HRU5FUkFUSU9OX1RSSUFOR0xFKSBcCisgICgoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fTU9ERV9fKSA9PSBMTF9EQUNfV0FWRV9BVVRPX0dFTkVSQVRJT05fTk9ORSkgICAgICAgICAgIFwKKyAgIHx8ICgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9NT0RFX18pID09IExMX0RBQ19XQVZFX0FVVE9fR0VORVJBVElPTl9OT0lTRSkgICAgICAgXAorICAgfHwgKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX01PREVfXykgPT0gTExfREFDX1dBVkVfQVVUT19HRU5FUkFUSU9OX1RSSUFOR0xFKSAgICBcCiAgICkKIAogI2RlZmluZSBJU19MTF9EQUNfV0FWRV9BVVRPX0dFTkVSX0NPTkZJRyhfX1dBVkVfQVVUT19HRU5FUkFUSU9OX01PREVfXywgX19XQVZFX0FVVE9fR0VORVJBVElPTl9DT05GSUdfXykgIFwKICAgKCAoKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX01PREVfXykgPT0gTExfREFDX1dBVkVfQVVUT19HRU5FUkFUSU9OX05PSVNFKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICYmICggICgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9DT05GSUdfXykgPT0gTExfREFDX05PSVNFX0xGU1JfVU5NQVNLX0JJVDApICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICB8fCAoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fQ09ORklHX18pID09IExMX0RBQ19OT0lTRV9MRlNSX1VOTUFTS19CSVRTMV8wKSAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgfHwgKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX0NPTkZJR19fKSA9PSBMTF9EQUNfTk9JU0VfTEZTUl9VTk1BU0tfQklUUzJfMCkgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgIHx8ICgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9DT05GSUdfXykgPT0gTExfREFDX05PSVNFX0xGU1JfVU5NQVNLX0JJVFMzXzApICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICB8fCAoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fQ09ORklHX18pID09IExMX0RBQ19OT0lTRV9MRlNSX1VOTUFTS19CSVRTNF8wKSAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgfHwgKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX0NPTkZJR19fKSA9PSBMTF9EQUNfTk9JU0VfTEZTUl9VTk1BU0tfQklUUzVfMCkgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgIHx8ICgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9DT05GSUdfXykgPT0gTExfREFDX05PSVNFX0xGU1JfVU5NQVNLX0JJVFM2XzApICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICB8fCAoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fQ09ORklHX18pID09IExMX0RBQ19OT0lTRV9MRlNSX1VOTUFTS19CSVRTN18wKSAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgfHwgKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX0NPTkZJR19fKSA9PSBMTF9EQUNfTk9JU0VfTEZTUl9VTk1BU0tfQklUUzhfMCkgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgIHx8ICgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9DT05GSUdfXykgPT0gTExfREFDX05PSVNFX0xGU1JfVU5NQVNLX0JJVFM5XzApICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICB8fCAoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fQ09ORklHX18pID09IExMX0RBQ19OT0lTRV9MRlNSX1VOTUFTS19CSVRTMTBfMCkgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgfHwgKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX0NPTkZJR19fKSA9PSBMTF9EQUNfTk9JU0VfTEZTUl9VTk1BU0tfQklUUzExXzApKSAgICAgICAgICAgICAgICAgICBcCisgICAgICYmICgoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fQ09ORklHX18pID09IExMX0RBQ19OT0lTRV9MRlNSX1VOTUFTS19CSVQwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgfHwgKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX0NPTkZJR19fKSA9PSBMTF9EQUNfTk9JU0VfTEZTUl9VTk1BU0tfQklUUzFfMCkgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgIHx8ICgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9DT05GSUdfXykgPT0gTExfREFDX05PSVNFX0xGU1JfVU5NQVNLX0JJVFMyXzApICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICB8fCAoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fQ09ORklHX18pID09IExMX0RBQ19OT0lTRV9MRlNSX1VOTUFTS19CSVRTM18wKSAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgfHwgKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX0NPTkZJR19fKSA9PSBMTF9EQUNfTk9JU0VfTEZTUl9VTk1BU0tfQklUUzRfMCkgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgIHx8ICgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9DT05GSUdfXykgPT0gTExfREFDX05PSVNFX0xGU1JfVU5NQVNLX0JJVFM1XzApICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICB8fCAoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fQ09ORklHX18pID09IExMX0RBQ19OT0lTRV9MRlNSX1VOTUFTS19CSVRTNl8wKSAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgfHwgKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX0NPTkZJR19fKSA9PSBMTF9EQUNfTk9JU0VfTEZTUl9VTk1BU0tfQklUUzdfMCkgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgIHx8ICgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9DT05GSUdfXykgPT0gTExfREFDX05PSVNFX0xGU1JfVU5NQVNLX0JJVFM4XzApICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICB8fCAoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fQ09ORklHX18pID09IExMX0RBQ19OT0lTRV9MRlNSX1VOTUFTS19CSVRTOV8wKSAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgfHwgKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX0NPTkZJR19fKSA9PSBMTF9EQUNfTk9JU0VfTEZTUl9VTk1BU0tfQklUUzEwXzApICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgIHx8ICgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9DT05GSUdfXykgPT0gTExfREFDX05PSVNFX0xGU1JfVU5NQVNLX0JJVFMxMV8wKSkgICAgICAgICAgICAgICAgICAgICBcCiAgICAgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIHx8KCgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9NT0RFX18pID09IExMX0RBQ19XQVZFX0FVVE9fR0VORVJBVElPTl9UUklBTkdMRSkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAmJiAoICAoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fQ09ORklHX18pID09IExMX0RBQ19UUklBTkdMRV9BTVBMSVRVREVfMSkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgfHwgKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX0NPTkZJR19fKSA9PSBMTF9EQUNfVFJJQU5HTEVfQU1QTElUVURFXzMpICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgIHx8ICgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9DT05GSUdfXykgPT0gTExfREFDX1RSSUFOR0xFX0FNUExJVFVERV83KSAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICB8fCAoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fQ09ORklHX18pID09IExMX0RBQ19UUklBTkdMRV9BTVBMSVRVREVfMTUpICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgfHwgKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX0NPTkZJR19fKSA9PSBMTF9EQUNfVFJJQU5HTEVfQU1QTElUVURFXzMxKSAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgIHx8ICgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9DT05GSUdfXykgPT0gTExfREFDX1RSSUFOR0xFX0FNUExJVFVERV82MykgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICB8fCAoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fQ09ORklHX18pID09IExMX0RBQ19UUklBTkdMRV9BTVBMSVRVREVfMTI3KSAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgfHwgKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX0NPTkZJR19fKSA9PSBMTF9EQUNfVFJJQU5HTEVfQU1QTElUVURFXzI1NSkgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgIHx8ICgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9DT05GSUdfXykgPT0gTExfREFDX1RSSUFOR0xFX0FNUExJVFVERV81MTEpICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICB8fCAoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fQ09ORklHX18pID09IExMX0RBQ19UUklBTkdMRV9BTVBMSVRVREVfMTAyMykgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgfHwgKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX0NPTkZJR19fKSA9PSBMTF9EQUNfVFJJQU5HTEVfQU1QTElUVURFXzIwNDcpICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgIHx8ICgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9DT05GSUdfXykgPT0gTExfREFDX1RSSUFOR0xFX0FNUExJVFVERV80MDk1KSkgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAmJiAoKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX0NPTkZJR19fKSA9PSBMTF9EQUNfVFJJQU5HTEVfQU1QTElUVURFXzEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgIHx8ICgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9DT05GSUdfXykgPT0gTExfREFDX1RSSUFOR0xFX0FNUExJVFVERV8zKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICB8fCAoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fQ09ORklHX18pID09IExMX0RBQ19UUklBTkdMRV9BTVBMSVRVREVfNykgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgfHwgKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX0NPTkZJR19fKSA9PSBMTF9EQUNfVFJJQU5HTEVfQU1QTElUVURFXzE1KSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgIHx8ICgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9DT05GSUdfXykgPT0gTExfREFDX1RSSUFOR0xFX0FNUExJVFVERV8zMSkgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICB8fCAoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fQ09ORklHX18pID09IExMX0RBQ19UUklBTkdMRV9BTVBMSVRVREVfNjMpICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgfHwgKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX0NPTkZJR19fKSA9PSBMTF9EQUNfVFJJQU5HTEVfQU1QTElUVURFXzEyNykgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgIHx8ICgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9DT05GSUdfXykgPT0gTExfREFDX1RSSUFOR0xFX0FNUExJVFVERV8yNTUpICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICB8fCAoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fQ09ORklHX18pID09IExMX0RBQ19UUklBTkdMRV9BTVBMSVRVREVfNTExKSAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgfHwgKChfX1dBVkVfQVVUT19HRU5FUkFUSU9OX0NPTkZJR19fKSA9PSBMTF9EQUNfVFJJQU5HTEVfQU1QTElUVURFXzEwMjMpICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgIHx8ICgoX19XQVZFX0FVVE9fR0VORVJBVElPTl9DT05GSUdfXykgPT0gTExfREFDX1RSSUFOR0xFX0FNUExJVFVERV8yMDQ3KSAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICB8fCAoKF9fV0FWRV9BVVRPX0dFTkVSQVRJT05fQ09ORklHX18pID09IExMX0RBQ19UUklBTkdMRV9BTVBMSVRVREVfNDA5NSkpICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICkKIAogI2RlZmluZSBJU19MTF9EQUNfT1VUUFVUX0JVRkZFUihfX09VVFBVVF9CVUZGRVJfXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKCAgICgoX19PVVRQVVRfQlVGRkVSX18pID09IExMX0RBQ19PVVRQVVRfQlVGRkVSX0VOQUJMRSkgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB8fCAoKF9fT1VUUFVUX0JVRkZFUl9fKSA9PSBMTF9EQUNfT1VUUFVUX0JVRkZFUl9ESVNBQkxFKSAgICAgICAgICAgICAgICAgXAorICAoKChfX09VVFBVVF9CVUZGRVJfXykgPT0gTExfREFDX09VVFBVVF9CVUZGRVJfRU5BQkxFKSAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIHx8ICgoX19PVVRQVVRfQlVGRkVSX18pID09IExMX0RBQ19PVVRQVVRfQlVGRkVSX0RJU0FCTEUpICAgICAgICAgICAgICAgICAgICBcCiAgICkKIAogLyoqCkBAIC0xMjcsNyArMTI3LDcgQEAKICAgKiAgICAgICAgICAtIFNVQ0NFU1M6IERBQyByZWdpc3RlcnMgYXJlIGRlLWluaXRpYWxpemVkCiAgICogICAgICAgICAgLSBFUlJPUjogbm90IGFwcGxpY2FibGUKICAgKi8KLUVycm9yU3RhdHVzIExMX0RBQ19EZUluaXQoREFDX1R5cGVEZWYgKkRBQ3gpCitFcnJvclN0YXR1cyBMTF9EQUNfRGVJbml0KGNvbnN0IERBQ19UeXBlRGVmICpEQUN4KQogewogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfREFDX0FMTF9JTlNUQU5DRShEQUN4KSk7CkBAIC0xNjYsNyArMTY2LDcgQEAKICAgKiAgICAgICAgICAtIFNVQ0NFU1M6IERBQyByZWdpc3RlcnMgYXJlIGluaXRpYWxpemVkCiAgICogICAgICAgICAgLSBFUlJPUjogREFDIHJlZ2lzdGVycyBhcmUgbm90IGluaXRpYWxpemVkCiAgICovCi1FcnJvclN0YXR1cyBMTF9EQUNfSW5pdChEQUNfVHlwZURlZiAqREFDeCwgdWludDMyX3QgREFDX0NoYW5uZWwsIExMX0RBQ19Jbml0VHlwZURlZiAqREFDX0luaXRTdHJ1Y3QpCitFcnJvclN0YXR1cyBMTF9EQUNfSW5pdChEQUNfVHlwZURlZiAqREFDeCwgdWludDMyX3QgREFDX0NoYW5uZWwsIGNvbnN0IExMX0RBQ19Jbml0VHlwZURlZiAqREFDX0luaXRTdHJ1Y3QpCiB7CiAgIEVycm9yU3RhdHVzIHN0YXR1cyA9IFNVQ0NFU1M7CiAKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmYyeHhfbGxfZG1hLmMgYi9TcmMvc3RtMzJmMnh4X2xsX2RtYS5jCmluZGV4IDM0YzdjNzcuLmU0NDMxZWUgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYyeHhfbGxfZG1hLmMKKysrIGIvU3JjL3N0bTMyZjJ4eF9sbF9kbWEuYwpAQCAtOSw4ICs5LDggQEAKICAgKiBDb3B5cmlnaHQgKGMpIDIwMTYgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICoKLSAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUKLSAgKiBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCisgICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluCisgICogdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc29mdHdhcmUgY29tcG9uZW50LgogICAqIElmIG5vIExJQ0VOU0UgZmlsZSBjb21lcyB3aXRoIHRoaXMgc29mdHdhcmUsIGl0IGlzIHByb3ZpZGVkIEFTLUlTLgogICAqCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNDIyLDMgKzQyMiw0IEBACiAgICovCiAKICNlbmRpZiAvKiBVU0VfRlVMTF9MTF9EUklWRVIgKi8KKwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjJ4eF9sbF9leHRpLmMgYi9TcmMvc3RtMzJmMnh4X2xsX2V4dGkuYwppbmRleCBhZjliZjMwLi4xYWFjZDRhIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmMnh4X2xsX2V4dGkuYworKysgYi9TcmMvc3RtMzJmMnh4X2xsX2V4dGkuYwpAQCAtMjEwLDMgKzIxMCw0IEBACiAgICovCiAKICNlbmRpZiAvKiBVU0VfRlVMTF9MTF9EUklWRVIgKi8KKwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjJ4eF9sbF9mc21jLmMgYi9TcmMvc3RtMzJmMnh4X2xsX2ZzbWMuYwppbmRleCAyYzQ5MjcyLi5kNGY1MmRjIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmMnh4X2xsX2ZzbWMuYworKysgYi9TcmMvc3RtMzJmMnh4X2xsX2ZzbWMuYwpAQCAtMTAsNiArMTAsMTcgQEAKICAgKiAgICAgICAgICAgKyBQZXJpcGhlcmFsIENvbnRyb2wgZnVuY3Rpb25zCiAgICogICAgICAgICAgICsgUGVyaXBoZXJhbCBTdGF0ZSBmdW5jdGlvbnMKICAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBAYXR0ZW50aW9uCisgICoKKyAgKiBDb3B5cmlnaHQgKGMpIDIwMTYgU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICoKKyAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUKKyAgKiBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCisgICogSWYgbm8gTElDRU5TRSBmaWxlIGNvbWVzIHdpdGggdGhpcyBzb2Z0d2FyZSwgaXQgaXMgcHJvdmlkZWQgQVMtSVMuCisgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgIEB2ZXJiYXRpbQogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjIEZTTUMgcGVyaXBoZXJhbCBmZWF0dXJlcyAjIyMjIwpAQCAtNDAsMTYgKzUxLDYgQEAKIAogICBAZW5kdmVyYmF0aW0KICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICogQGF0dGVudGlvbgotICAqCi0gICogQ29weXJpZ2h0IChjKSAyMDE2IFNUTWljcm9lbGVjdHJvbmljcy4KLSAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICAqCi0gICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlCi0gICogaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc29mdHdhcmUgY29tcG9uZW50LgotICAqIElmIG5vIExJQ0VOU0UgZmlsZSBjb21lcyB3aXRoIHRoaXMgc29mdHdhcmUsIGl0IGlzIHByb3ZpZGVkIEFTLUlTLgotICAqCi0gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqLwogCiAvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtNTgsNyArNTksOCBAQAogLyoqIEBhZGR0b2dyb3VwIFNUTTMyRjJ4eF9IQUxfRHJpdmVyCiAgICogQHsKICAgKi8KLSNpZiBkZWZpbmVkKEhBTF9OT1JfTU9EVUxFX0VOQUJMRUQpIHx8IGRlZmluZWQoSEFMX1NSQU1fTU9EVUxFX0VOQUJMRUQpIHx8IGRlZmluZWQoSEFMX05BTkRfTU9EVUxFX0VOQUJMRUQpIHx8IGRlZmluZWQoSEFMX1BDQ0FSRF9NT0RVTEVfRU5BQkxFRCkKKyNpZiBkZWZpbmVkKEhBTF9OT1JfTU9EVUxFX0VOQUJMRUQpIHx8IGRlZmluZWQoSEFMX05BTkRfTU9EVUxFX0VOQUJMRUQpIHx8IGRlZmluZWQoSEFMX1BDQ0FSRF9NT0RVTEVfRU5BQkxFRCkgXAorIHx8IGRlZmluZWQoSEFMX1NSQU1fTU9EVUxFX0VOQUJMRUQpCiAKIC8qKiBAZGVmZ3JvdXAgRlNNQ19MTCAgRlNNQyBMb3cgTGF5ZXIKICAgKiBAYnJpZWYgRlNNQyBkcml2ZXIgbW9kdWxlcwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjJ4eF9sbF9ncGlvLmMgYi9TcmMvc3RtMzJmMnh4X2xsX2dwaW8uYwppbmRleCA2OWQxNDA5Li5lMTUyNDI2IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmMnh4X2xsX2dwaW8uYworKysgYi9TcmMvc3RtMzJmMnh4X2xsX2dwaW8uYwpAQCAtMzAxLDMgKzMwMSw0IEBACiAgICovCiAKICNlbmRpZiAvKiBVU0VfRlVMTF9MTF9EUklWRVIgKi8KKwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjJ4eF9sbF9pMmMuYyBiL1NyYy9zdG0zMmYyeHhfbGxfaTJjLmMKaW5kZXggYzllZWZjOC4uMDMxNDhhNiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjJ4eF9sbF9pMmMuYworKysgYi9TcmMvc3RtMzJmMnh4X2xsX2kyYy5jCkBAIC0yMjIsMyArMjIyLDQgQEAKICAgKi8KIAogI2VuZGlmIC8qIFVTRV9GVUxMX0xMX0RSSVZFUiAqLworCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmMnh4X2xsX3JjYy5jIGIvU3JjL3N0bTMyZjJ4eF9sbF9yY2MuYwppbmRleCBiOTNhOGE4Li40NzE4YjZiIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmMnh4X2xsX3JjYy5jCisrKyBiL1NyYy9zdG0zMmYyeHhfbGxfcmNjLmMKQEAgLTksMTAgKzksOSBAQAogICAqIENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgKgotICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGVybXMgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZQotICAqIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvZnR3YXJlIGNvbXBvbmVudC4KKyAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4KKyAgKiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCiAgICogSWYgbm8gTElDRU5TRSBmaWxlIGNvbWVzIHdpdGggdGhpcyBzb2Z0d2FyZSwgaXQgaXMgcHJvdmlkZWQgQVMtSVMuCi0gICoKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICovCiAKQEAgLTQwMSwzICs0MDAsNCBAQAogICAqLwogCiAjZW5kaWYgLyogVVNFX0ZVTExfTExfRFJJVkVSICovCisKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmYyeHhfbGxfcm5nLmMgYi9TcmMvc3RtMzJmMnh4X2xsX3JuZy5jCmluZGV4IDMzMjhhMzIuLjg0ZTZkZDUgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYyeHhfbGxfcm5nLmMKKysrIGIvU3JjL3N0bTMyZjJ4eF9sbF9ybmcuYwpAQCAtNTksMTYgKzU5LDI2IEBACiAgICogICAgICAgICAgLSBTVUNDRVNTOiBSTkcgcmVnaXN0ZXJzIGFyZSBkZS1pbml0aWFsaXplZAogICAqICAgICAgICAgIC0gRVJST1I6IG5vdCBhcHBsaWNhYmxlCiAgICovCi1FcnJvclN0YXR1cyBMTF9STkdfRGVJbml0KFJOR19UeXBlRGVmICpSTkd4KQorRXJyb3JTdGF0dXMgTExfUk5HX0RlSW5pdChjb25zdCBSTkdfVHlwZURlZiAqUk5HeCkKIHsKKyAgRXJyb3JTdGF0dXMgc3RhdHVzID0gU1VDQ0VTUzsKKwogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfUk5HX0FMTF9JTlNUQU5DRShSTkd4KSk7Ci0gIC8qIEVuYWJsZSBSTkcgcmVzZXQgc3RhdGUgKi8KLSAgTExfQUhCMl9HUlAxX0ZvcmNlUmVzZXQoTExfQUhCMl9HUlAxX1BFUklQSF9STkcpOworICBpZiAoUk5HeCA9PSBSTkcpCisgIHsKKyAgICAvKiBFbmFibGUgUk5HIHJlc2V0IHN0YXRlICovCisgICAgTExfQUhCMl9HUlAxX0ZvcmNlUmVzZXQoTExfQUhCMl9HUlAxX1BFUklQSF9STkcpOwogCi0gIC8qIFJlbGVhc2UgUk5HIGZyb20gcmVzZXQgc3RhdGUgKi8KLSAgTExfQUhCMl9HUlAxX1JlbGVhc2VSZXNldChMTF9BSEIyX0dSUDFfUEVSSVBIX1JORyk7Ci0gIHJldHVybiAoU1VDQ0VTUyk7CisgICAgLyogUmVsZWFzZSBSTkcgZnJvbSByZXNldCBzdGF0ZSAqLworICAgIExMX0FIQjJfR1JQMV9SZWxlYXNlUmVzZXQoTExfQUhCMl9HUlAxX1BFUklQSF9STkcpOworICB9CisgIGVsc2UKKyAgeworICAgIHN0YXR1cyA9IEVSUk9SOworICB9CisKKyAgcmV0dXJuIHN0YXR1czsKIH0KIAogLyoqCkBAIC05MCwzICsxMDAsNCBAQAogICAqLwogCiAjZW5kaWYgLyogVVNFX0ZVTExfTExfRFJJVkVSICovCisKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmYyeHhfbGxfcnRjLmMgYi9TcmMvc3RtMzJmMnh4X2xsX3J0Yy5jCmluZGV4IDU5NWZmYWYuLmEyNWNkNWMgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYyeHhfbGxfcnRjLmMKKysrIGIvU3JjL3N0bTMyZjJ4eF9sbF9ydGMuYwpAQCAtMTUsNyArMTUsNiBAQAogICAqCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqLwotCiAjaWYgZGVmaW5lZChVU0VfRlVMTF9MTF9EUklWRVIpCiAKIC8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC04NSwxMSArODQsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1JUQ19XRUVLREFZX1NBVFVSREFZKSBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9SVENfV0VFS0RBWV9TVU5EQVkpKQogCi0jZGVmaW5lIElTX0xMX1JUQ19EQVkoX19EQVlfXykgICAgKCgoX19EQVlfXykgPj0gMVUpICYmICgoX19EQVlfXykgPD0gMzFVKSkKKyNkZWZpbmUgSVNfTExfUlRDX0RBWShfX0RBWV9fKSAgICAgKCgoX19EQVlfXykgPj0gMVUpICYmICgoX19EQVlfXykgPD0gMzFVKSkKIAogI2RlZmluZSBJU19MTF9SVENfTU9OVEgoX19NT05USF9fKSAoKChfX01PTlRIX18pID49IDFVKSAmJiAoKF9fTU9OVEhfXykgPD0gMTJVKSkKIAotI2RlZmluZSBJU19MTF9SVENfWUVBUihfX1lFQVJfXykgKChfX1lFQVJfXykgPD0gOTlVKQorI2RlZmluZSBJU19MTF9SVENfWUVBUihfX1lFQVJfXykgICAoKF9fWUVBUl9fKSA8PSA5OVUpCiAKICNkZWZpbmUgSVNfTExfUlRDX0FMTUFfTUFTSyhfX1ZBTFVFX18pICgoKF9fVkFMVUVfXykgPT0gTExfUlRDX0FMTUFfTUFTS19OT05FKSBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1JUQ19BTE1BX01BU0tfREFURVdFRUtEQVkpIFwKQEAgLTEwNSwxNCArMTA0LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1JUQ19BTE1CX01BU0tfU0VDT05EUykgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9SVENfQUxNQl9NQVNLX0FMTCkpCiAKLQogI2RlZmluZSBJU19MTF9SVENfQUxNQV9EQVRFX1dFRUtEQVlfU0VMKF9fU0VMX18pICgoKF9fU0VMX18pID09IExMX1JUQ19BTE1BX0RBVEVXRUVLREFZU0VMX0RBVEUpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NFTF9fKSA9PSBMTF9SVENfQUxNQV9EQVRFV0VFS0RBWVNFTF9XRUVLREFZKSkKIAogI2RlZmluZSBJU19MTF9SVENfQUxNQl9EQVRFX1dFRUtEQVlfU0VMKF9fU0VMX18pICgoKF9fU0VMX18pID09IExMX1JUQ19BTE1CX0RBVEVXRUVLREFZU0VMX0RBVEUpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NFTF9fKSA9PSBMTF9SVENfQUxNQl9EQVRFV0VFS0RBWVNFTF9XRUVLREFZKSkKIAotCiAvKioKICAgKiBAfQogICAqLwpAQCAtMTI4LDcgKzEyNSw3IEBACiAKIC8qKgogICAqIEBicmllZiAgRGUtSW5pdGlhbGl6ZXMgdGhlIFJUQyByZWdpc3RlcnMgdG8gdGhlaXIgZGVmYXVsdCByZXNldCB2YWx1ZXMuCi0gICogQG5vdGUgICBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgcmVzZXQgdGhlIFJUQyBDbG9jayBzb3VyY2UgYW5kIFJUQyBCYWNrdXAgRGF0YQorICAqIEBub3RlICAgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCByZXNldCB0aGUgUlRDIENsb2NrIHNvdXJjZSBhbmQgUlRDIEJhY2t1cCBEYXRhCiAgICogICAgICAgICByZWdpc3RlcnMuCiAgICogQHBhcmFtICBSVEN4IFJUQyBJbnN0YW5jZQogICAqIEByZXR2YWwgQW4gRXJyb3JTdGF0dXMgZW51bWVyYXRpb24gdmFsdWU6CkBAIC0xNTAsMTcgKzE0NywxMyBAQAogICB7CiAgICAgLyogUmVzZXQgVFIsIERSIGFuZCBDUiByZWdpc3RlcnMgKi8KICAgICBMTF9SVENfV3JpdGVSZWcoUlRDeCwgVFIsICAgICAgIDB4MDAwMDAwMDBVKTsKLSNpZiBkZWZpbmVkKFJUQ19XQUtFVVBfU1VQUE9SVCkKICAgICBMTF9SVENfV3JpdGVSZWcoUlRDeCwgV1VUUiwgICAgIFJUQ19XVVRSX1dVVCk7Ci0jZW5kaWYgLyogUlRDX1dBS0VVUF9TVVBQT1JUICovCi0gICAgTExfUlRDX1dyaXRlUmVnKFJUQ3gsIERSLCAoUlRDX0RSX1dEVV8wIHwgUlRDX0RSX01VXzAgfCBSVENfRFJfRFVfMCkpOworICAgIExMX1JUQ19Xcml0ZVJlZyhSVEN4LCBEUiwgICAgICAoUlRDX0RSX1dEVV8wIHwgUlRDX0RSX01VXzAgfCBSVENfRFJfRFVfMCkpOworCiAgICAgLyogUmVzZXQgQWxsIENSIGJpdHMgZXhjZXB0IENSWzI6MF0gKi8KLSNpZiBkZWZpbmVkKFJUQ19XQUtFVVBfU1VQUE9SVCkKICAgICBMTF9SVENfV3JpdGVSZWcoUlRDeCwgQ1IsIChMTF9SVENfUmVhZFJlZyhSVEN4LCBDUikgJiBSVENfQ1JfV1VDS1NFTCkpOwotI2Vsc2UKLSAgICBMTF9SVENfV3JpdGVSZWcoUlRDeCwgQ1IsIDB4MDAwMDAwMDBVKTsKLSNlbmRpZiAvKiBSVENfV0FLRVVQX1NVUFBPUlQgKi8KLSAgICBMTF9SVENfV3JpdGVSZWcoUlRDeCwgUFJFUiwgKFJUQ19QUkVSX1BSRURJVl9BIHwgUlRDX1NZTkNIX1BSRVNDX0RFRkFVTFQpKTsKKworICAgIExMX1JUQ19Xcml0ZVJlZyhSVEN4LCBQUkVSLCAgICAoUlRDX1BSRVJfUFJFRElWX0EgfCBSVENfU1lOQ0hfUFJFU0NfREVGQVVMVCkpOwogICAgIExMX1JUQ19Xcml0ZVJlZyhSVEN4LCBBTFJNQVIsICAgMHgwMDAwMDAwMFUpOwogICAgIExMX1JUQ19Xcml0ZVJlZyhSVEN4LCBBTFJNQlIsICAgMHgwMDAwMDAwMFUpOwogCkBAIC03NjMsNyArNzU2LDcgQEAKICAgKiAgICAgICAgIHN5bmNocm9uaXplZCB3aXRoIFJUQyBBUEIgY2xvY2suCiAgICogQG5vdGUgICBUaGUgUlRDIFJlc3luY2hyb25pemF0aW9uIG1vZGUgaXMgd3JpdGUgcHJvdGVjdGVkLCB1c2UgdGhlCiAgICogICAgICAgICBAcmVmIExMX1JUQ19EaXNhYmxlV3JpdGVQcm90ZWN0aW9uIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCi0gICogQG5vdGUgICBUbyByZWFkIHRoZSBjYWxlbmRhciB0aHJvdWdoIHRoZSBzaGFkb3cgcmVnaXN0ZXJzIGFmdGVyIENhbGVuZGFyCisgICogQG5vdGUgICBUbyByZWFkIHRoZSBjYWxlbmRhciB0aHJvdWdoIHRoZSBzaGFkb3cgcmVnaXN0ZXJzIGFmdGVyIGNhbGVuZGFyCiAgICogICAgICAgICBpbml0aWFsaXphdGlvbiwgY2FsZW5kYXIgdXBkYXRlIG9yIGFmdGVyIHdha2V1cCBmcm9tIGxvdyBwb3dlciBtb2RlcwogICAqICAgICAgICAgdGhlIHNvZnR3YXJlIG11c3QgZmlyc3QgY2xlYXIgdGhlIFJTRiBmbGFnLgogICAqICAgICAgICAgVGhlIHNvZnR3YXJlIG11c3QgdGhlbiB3YWl0IHVudGlsIGl0IGlzIHNldCBhZ2FpbiBiZWZvcmUgcmVhZGluZwpAQCAtNzg4LDcgKzc4MSw3IEBACiAKICAgLyogV2FpdCB0aGUgcmVnaXN0ZXJzIHRvIGJlIHN5bmNocm9uaXNlZCAqLwogICB0bXAgPSBMTF9SVENfSXNBY3RpdmVGbGFnX1JTKFJUQ3gpOwotICB3aGlsZSAoKHRpbWVvdXQgIT0gMFUpICYmICh0bXAgIT0gMFUpKQorICB3aGlsZSAoKHRpbWVvdXQgIT0gMFUpICYmICh0bXAgIT0gMVUpKQogICB7CiAgICAgaWYgKExMX1NZU1RJQ0tfSXNBY3RpdmVDb3VudGVyRmxhZygpID09IDFVKQogICAgIHsKQEAgLTgwMSwyNCArNzk0LDYgQEAKICAgICB9CiAgIH0KIAotICBpZiAoc3RhdHVzICE9IEVSUk9SKQotICB7Ci0gICAgdGltZW91dCA9IFJUQ19TWU5DSFJPX1RJTUVPVVQ7Ci0gICAgdG1wID0gTExfUlRDX0lzQWN0aXZlRmxhZ19SUyhSVEN4KTsKLSAgICB3aGlsZSAoKHRpbWVvdXQgIT0gMFUpICYmICh0bXAgIT0gMVUpKQotICAgIHsKLSAgICAgIGlmIChMTF9TWVNUSUNLX0lzQWN0aXZlQ291bnRlckZsYWcoKSA9PSAxVSkKLSAgICAgIHsKLSAgICAgICAgdGltZW91dC0tOwotICAgICAgfQotICAgICAgdG1wID0gTExfUlRDX0lzQWN0aXZlRmxhZ19SUyhSVEN4KTsKLSAgICAgIGlmICh0aW1lb3V0ID09IDBVKQotICAgICAgewotICAgICAgICBzdGF0dXMgPSBFUlJPUjsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQogICByZXR1cm4gKHN0YXR1cyk7CiB9CiAKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmYyeHhfbGxfc2RtbWMuYyBiL1NyYy9zdG0zMmYyeHhfbGxfc2RtbWMuYwppbmRleCA5YmMxZDMwLi4zZjVlMzRiIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmMnh4X2xsX3NkbW1jLmMKKysrIGIvU3JjL3N0bTMyZjJ4eF9sbF9zZG1tYy5jCkBAIC0xMSw2ICsxMSwxNyBAQAogICAqICAgICAgICAgICArIFBlcmlwaGVyYWwgQ29udHJvbCBmdW5jdGlvbnMgCiAgICogICAgICAgICAgICsgUGVyaXBoZXJhbCBTdGF0ZSBmdW5jdGlvbnMKICAgKiAgICAgICAgIAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBAYXR0ZW50aW9uCisgICoKKyAgKiBDb3B5cmlnaHQgKGMpIDIwMTYgU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICoKKyAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUKKyAgKiBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCisgICogSWYgbm8gTElDRU5TRSBmaWxlIGNvbWVzIHdpdGggdGhpcyBzb2Z0d2FyZSwgaXQgaXMgcHJvdmlkZWQgQVMtSVMuCisgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgIEB2ZXJiYXRpbQogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMgU0RNTUMgcGVyaXBoZXJhbCBmZWF0dXJlcyAjIyMjIwpAQCAtMTQyLDE3ICsxNTMsNyBAQAogICAKICAgQGVuZHZlcmJhdGltCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAqIEBhdHRlbnRpb24KLSAgKgotICAqIENvcHlyaWdodCAoYykgMjAxOCBTVE1pY3JvZWxlY3Ryb25pY3MuCi0gICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAgKgotICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGVybXMgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZQotICAqIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvZnR3YXJlIGNvbXBvbmVudC4KLSAgKiBJZiBubyBMSUNFTlNFIGZpbGUgY29tZXMgd2l0aCB0aGlzIHNvZnR3YXJlLCBpdCBpcyBwcm92aWRlZCBBUy1JUy4KLSAgKgotICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgKi8KKyAgKi8gCiAKIC8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAjaW5jbHVkZSAic3RtMzJmMnh4X2hhbC5oIgpAQCAtMzA1LDEwICszMDYsNiBAQAogICAvKiBTZXQgcG93ZXIgc3RhdGUgdG8gT04gKi8gCiAgIFNESU94LT5QT1dFUiA9IFNESU9fUE9XRVJfUFdSQ1RSTDsKIAotICAvKiAxbXM6IHJlcXVpcmVkIHBvd2VyIHVwIHdhaXRpbmcgdGltZSBiZWZvcmUgc3RhcnRpbmcgdGhlIFNEIGluaXRpYWxpemF0aW9uCi0gIHNlcXVlbmNlICovCi0gIEhBTF9EZWxheSgyKTsKLSAgCiAgIHJldHVybiBIQUxfT0s7CiB9CiAKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmYyeHhfbGxfc3BpLmMgYi9TcmMvc3RtMzJmMnh4X2xsX3NwaS5jCmluZGV4IDk3Mjk4ZmMuLjA5N2ViZjYgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYyeHhfbGxfc3BpLmMKKysrIGIvU3JjL3N0bTMyZjJ4eF9sbF9zcGkuYwpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgInN0bTMyX2Fzc2VydC5oIgogI2Vsc2UKICNkZWZpbmUgYXNzZXJ0X3BhcmFtKGV4cHIpICgodm9pZCkwVSkKLSNlbmRpZgorI2VuZGlmIC8qIFVTRV9GVUxMX0FTU0VSVCAqLwogCiAvKiogQGFkZHRvZ3JvdXAgU1RNMzJGMnh4X0xMX0RyaXZlcgogICAqIEB7CkBAIC01MTksMyArNTE5LDQgQEAKICAgKi8KIAogI2VuZGlmIC8qIFVTRV9GVUxMX0xMX0RSSVZFUiAqLworCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJmMnh4X2xsX3RpbS5jIGIvU3JjL3N0bTMyZjJ4eF9sbF90aW0uYwppbmRleCA2YWZkMDI4Li40ZDA2N2IzIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJmMnh4X2xsX3RpbS5jCisrKyBiL1NyYy9zdG0zMmYyeHhfbGxfdGltLmMKQEAgLTE2NSw3ICsxNjUsNyBAQAogICAqICAgICAgICAgIC0gU1VDQ0VTUzogVElNeCByZWdpc3RlcnMgYXJlIGRlLWluaXRpYWxpemVkCiAgICogICAgICAgICAgLSBFUlJPUjogaW52YWxpZCBUSU14IGluc3RhbmNlCiAgICovCi1FcnJvclN0YXR1cyBMTF9USU1fRGVJbml0KFRJTV9UeXBlRGVmICpUSU14KQorRXJyb3JTdGF0dXMgTExfVElNX0RlSW5pdChjb25zdCBUSU1fVHlwZURlZiAqVElNeCkKIHsKICAgRXJyb3JTdGF0dXMgcmVzdWx0ID0gU1VDQ0VTUzsKIApAQCAtMTgzLDkxICsxODMsOTEgQEAKICAgICBMTF9BUEIxX0dSUDFfRm9yY2VSZXNldChMTF9BUEIxX0dSUDFfUEVSSVBIX1RJTTIpOwogICAgIExMX0FQQjFfR1JQMV9SZWxlYXNlUmVzZXQoTExfQVBCMV9HUlAxX1BFUklQSF9USU0yKTsKICAgfQotI2VuZGlmCisjZW5kaWYgLyogVElNMiAqLwogI2lmIGRlZmluZWQoVElNMykKICAgZWxzZSBpZiAoVElNeCA9PSBUSU0zKQogICB7CiAgICAgTExfQVBCMV9HUlAxX0ZvcmNlUmVzZXQoTExfQVBCMV9HUlAxX1BFUklQSF9USU0zKTsKICAgICBMTF9BUEIxX0dSUDFfUmVsZWFzZVJlc2V0KExMX0FQQjFfR1JQMV9QRVJJUEhfVElNMyk7CiAgIH0KLSNlbmRpZgorI2VuZGlmIC8qIFRJTTMgKi8KICNpZiBkZWZpbmVkKFRJTTQpCiAgIGVsc2UgaWYgKFRJTXggPT0gVElNNCkKICAgewogICAgIExMX0FQQjFfR1JQMV9Gb3JjZVJlc2V0KExMX0FQQjFfR1JQMV9QRVJJUEhfVElNNCk7CiAgICAgTExfQVBCMV9HUlAxX1JlbGVhc2VSZXNldChMTF9BUEIxX0dSUDFfUEVSSVBIX1RJTTQpOwogICB9Ci0jZW5kaWYKKyNlbmRpZiAvKiBUSU00ICovCiAjaWYgZGVmaW5lZChUSU01KQogICBlbHNlIGlmIChUSU14ID09IFRJTTUpCiAgIHsKICAgICBMTF9BUEIxX0dSUDFfRm9yY2VSZXNldChMTF9BUEIxX0dSUDFfUEVSSVBIX1RJTTUpOwogICAgIExMX0FQQjFfR1JQMV9SZWxlYXNlUmVzZXQoTExfQVBCMV9HUlAxX1BFUklQSF9USU01KTsKICAgfQotI2VuZGlmCisjZW5kaWYgLyogVElNNSAqLwogI2lmIGRlZmluZWQoVElNNikKICAgZWxzZSBpZiAoVElNeCA9PSBUSU02KQogICB7CiAgICAgTExfQVBCMV9HUlAxX0ZvcmNlUmVzZXQoTExfQVBCMV9HUlAxX1BFUklQSF9USU02KTsKICAgICBMTF9BUEIxX0dSUDFfUmVsZWFzZVJlc2V0KExMX0FQQjFfR1JQMV9QRVJJUEhfVElNNik7CiAgIH0KLSNlbmRpZgorI2VuZGlmIC8qIFRJTTYgKi8KICNpZiBkZWZpbmVkIChUSU03KQogICBlbHNlIGlmIChUSU14ID09IFRJTTcpCiAgIHsKICAgICBMTF9BUEIxX0dSUDFfRm9yY2VSZXNldChMTF9BUEIxX0dSUDFfUEVSSVBIX1RJTTcpOwogICAgIExMX0FQQjFfR1JQMV9SZWxlYXNlUmVzZXQoTExfQVBCMV9HUlAxX1BFUklQSF9USU03KTsKICAgfQotI2VuZGlmCisjZW5kaWYgLyogVElNNyAqLwogI2lmIGRlZmluZWQoVElNOCkKICAgZWxzZSBpZiAoVElNeCA9PSBUSU04KQogICB7CiAgICAgTExfQVBCMl9HUlAxX0ZvcmNlUmVzZXQoTExfQVBCMl9HUlAxX1BFUklQSF9USU04KTsKICAgICBMTF9BUEIyX0dSUDFfUmVsZWFzZVJlc2V0KExMX0FQQjJfR1JQMV9QRVJJUEhfVElNOCk7CiAgIH0KLSNlbmRpZgorI2VuZGlmIC8qIFRJTTggKi8KICNpZiBkZWZpbmVkKFRJTTkpCiAgIGVsc2UgaWYgKFRJTXggPT0gVElNOSkKICAgewogICAgIExMX0FQQjJfR1JQMV9Gb3JjZVJlc2V0KExMX0FQQjJfR1JQMV9QRVJJUEhfVElNOSk7CiAgICAgTExfQVBCMl9HUlAxX1JlbGVhc2VSZXNldChMTF9BUEIyX0dSUDFfUEVSSVBIX1RJTTkpOwogICB9Ci0jZW5kaWYKKyNlbmRpZiAvKiBUSU05ICovCiAjaWYgZGVmaW5lZChUSU0xMCkKICAgZWxzZSBpZiAoVElNeCA9PSBUSU0xMCkKICAgewogICAgIExMX0FQQjJfR1JQMV9Gb3JjZVJlc2V0KExMX0FQQjJfR1JQMV9QRVJJUEhfVElNMTApOwogICAgIExMX0FQQjJfR1JQMV9SZWxlYXNlUmVzZXQoTExfQVBCMl9HUlAxX1BFUklQSF9USU0xMCk7CiAgIH0KLSNlbmRpZgorI2VuZGlmIC8qIFRJTTEwICovCiAjaWYgZGVmaW5lZChUSU0xMSkKICAgZWxzZSBpZiAoVElNeCA9PSBUSU0xMSkKICAgewogICAgIExMX0FQQjJfR1JQMV9Gb3JjZVJlc2V0KExMX0FQQjJfR1JQMV9QRVJJUEhfVElNMTEpOwogICAgIExMX0FQQjJfR1JQMV9SZWxlYXNlUmVzZXQoTExfQVBCMl9HUlAxX1BFUklQSF9USU0xMSk7CiAgIH0KLSNlbmRpZgorI2VuZGlmIC8qIFRJTTExICovCiAjaWYgZGVmaW5lZChUSU0xMikKICAgZWxzZSBpZiAoVElNeCA9PSBUSU0xMikKICAgewogICAgIExMX0FQQjFfR1JQMV9Gb3JjZVJlc2V0KExMX0FQQjFfR1JQMV9QRVJJUEhfVElNMTIpOwogICAgIExMX0FQQjFfR1JQMV9SZWxlYXNlUmVzZXQoTExfQVBCMV9HUlAxX1BFUklQSF9USU0xMik7CiAgIH0KLSNlbmRpZgorI2VuZGlmIC8qIFRJTTEyICovCiAjaWYgZGVmaW5lZChUSU0xMykKICAgZWxzZSBpZiAoVElNeCA9PSBUSU0xMykKICAgewogICAgIExMX0FQQjFfR1JQMV9Gb3JjZVJlc2V0KExMX0FQQjFfR1JQMV9QRVJJUEhfVElNMTMpOwogICAgIExMX0FQQjFfR1JQMV9SZWxlYXNlUmVzZXQoTExfQVBCMV9HUlAxX1BFUklQSF9USU0xMyk7CiAgIH0KLSNlbmRpZgorI2VuZGlmIC8qIFRJTTEzICovCiAjaWYgZGVmaW5lZChUSU0xNCkKICAgZWxzZSBpZiAoVElNeCA9PSBUSU0xNCkKICAgewogICAgIExMX0FQQjFfR1JQMV9Gb3JjZVJlc2V0KExMX0FQQjFfR1JQMV9QRVJJUEhfVElNMTQpOwogICAgIExMX0FQQjFfR1JQMV9SZWxlYXNlUmVzZXQoTExfQVBCMV9HUlAxX1BFUklQSF9USU0xNCk7CiAgIH0KLSNlbmRpZgorI2VuZGlmIC8qIFRJTTE0ICovCiAgIGVsc2UKICAgewogICAgIHJlc3VsdCA9IEVSUk9SOwpAQCAtNzExLDcgKzcxMSw2IEBACiAgIE1PRElGWV9SRUcodG1wYmR0ciwgVElNX0JEVFJfQktFLCBUSU1fQkRUUkluaXRTdHJ1Y3QtPkJyZWFrU3RhdGUpOwogICBNT0RJRllfUkVHKHRtcGJkdHIsIFRJTV9CRFRSX0JLUCwgVElNX0JEVFJJbml0U3RydWN0LT5CcmVha1BvbGFyaXR5KTsKICAgTU9ESUZZX1JFRyh0bXBiZHRyLCBUSU1fQkRUUl9BT0UsIFRJTV9CRFRSSW5pdFN0cnVjdC0+QXV0b21hdGljT3V0cHV0KTsKLSAgTU9ESUZZX1JFRyh0bXBiZHRyLCBUSU1fQkRUUl9NT0UsIFRJTV9CRFRSSW5pdFN0cnVjdC0+QXV0b21hdGljT3V0cHV0KTsKIAogICAvKiBTZXQgVElNeF9CRFRSICovCiAgIExMX1RJTV9Xcml0ZVJlZyhUSU14LCBCRFRSLCB0bXBiZHRyKTsKQEAgLTExODYsMyArMTE4NSw0IEBACiAgICovCiAKICNlbmRpZiAvKiBVU0VfRlVMTF9MTF9EUklWRVIgKi8KKwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjJ4eF9sbF91c2FydC5jIGIvU3JjL3N0bTMyZjJ4eF9sbF91c2FydC5jCmluZGV4IGFmMmNlOWQuLmQxYTRkYzkgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmYyeHhfbGxfdXNhcnQuYworKysgYi9TcmMvc3RtMzJmMnh4X2xsX3VzYXJ0LmMKQEAgLTQxNiwzICs0MTYsNSBAQAogICAqLwogCiAjZW5kaWYgLyogVVNFX0ZVTExfTExfRFJJVkVSICovCisKKwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZjJ4eF9sbF91c2IuYyBiL1NyYy9zdG0zMmYyeHhfbGxfdXNiLmMKaW5kZXggNjY1ZDFkZS4uZmJmNmYyZSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZjJ4eF9sbF91c2IuYworKysgYi9TcmMvc3RtMzJmMnh4X2xsX3VzYi5jCkBAIC0xMSwxOCArMTEsNiBAQAogICAqICAgICAgICAgICArIFBlcmlwaGVyYWwgQ29udHJvbCBmdW5jdGlvbnMKICAgKiAgICAgICAgICAgKyBQZXJpcGhlcmFsIFN0YXRlIGZ1bmN0aW9ucwogICAqCi0gIEB2ZXJiYXRpbQotICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgICAgICAgICAgICAgICAgIyMjIyMgSG93IHRvIHVzZSB0aGlzIGRyaXZlciAjIyMjIwotICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICBbLi5dCi0gICAgICAoIykgRmlsbCBwYXJhbWV0ZXJzIG9mIEluaXQgc3RydWN0dXJlIGluIFVTQl9PVEdfQ2ZnVHlwZURlZiBzdHJ1Y3R1cmUuCi0KLSAgICAgICgjKSBDYWxsIFVTQl9Db3JlSW5pdCgpIEFQSSB0byBpbml0aWFsaXplIHRoZSBVU0IgQ29yZSBwZXJpcGhlcmFsLgotCi0gICAgICAoIykgVGhlIHVwcGVyIEhBTCBIQ0QvUENEIGRyaXZlciB3aWxsIGNhbGwgdGhlIHJpZ2h0IHJvdXRpbmVzIGZvciBpdHMgaW50ZXJuYWwgcHJvY2Vzc2VzLgotCi0gIEBlbmR2ZXJiYXRpbQogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKQEAgLTM0LDYgKzIyLDIwIEBACiAgICogSWYgbm8gTElDRU5TRSBmaWxlIGNvbWVzIHdpdGggdGhpcyBzb2Z0d2FyZSwgaXQgaXMgcHJvdmlkZWQgQVMtSVMuCiAgICoKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgIEB2ZXJiYXRpbQorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAgICAgICAgICAgICAgICAgIyMjIyMgSG93IHRvIHVzZSB0aGlzIGRyaXZlciAjIyMjIworICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBbLi5dCisgICAgICAoIykgRmlsbCBwYXJhbWV0ZXJzIG9mIEluaXQgc3RydWN0dXJlIGluIFVTQl9DZmdUeXBlRGVmIHN0cnVjdHVyZS4KKworICAgICAgKCMpIENhbGwgVVNCX0NvcmVJbml0KCkgQVBJIHRvIGluaXRpYWxpemUgdGhlIFVTQiBDb3JlIHBlcmlwaGVyYWwuCisKKyAgICAgICgjKSBUaGUgdXBwZXIgSEFMIEhDRC9QQ0QgZHJpdmVyIHdpbGwgY2FsbCB0aGUgcmlnaHQgcm91dGluZXMgZm9yIGl0cyBpbnRlcm5hbCBwcm9jZXNzZXMuCisKKyAgQGVuZHZlcmJhdGltCisKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICovCiAKIC8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC04MSw3ICs4Myw2IEBACiBIQUxfU3RhdHVzVHlwZURlZiBVU0JfQ29yZUluaXQoVVNCX09UR19HbG9iYWxUeXBlRGVmICpVU0J4LCBVU0JfT1RHX0NmZ1R5cGVEZWYgY2ZnKQogewogICBIQUxfU3RhdHVzVHlwZURlZiByZXQ7Ci0KICAgaWYgKGNmZy5waHlfaXRmYWNlID09IFVTQl9PVEdfVUxQSV9QSFkpCiAgIHsKICAgICBVU0J4LT5HQ0NGRyAmPSB+KFVTQl9PVEdfR0NDRkdfUFdSRFdOKTsKQEAgLTMxNyw5ICszMTgsNiBAQAogICAvKiBSZXN0YXJ0IHRoZSBQaHkgQ2xvY2sgKi8KICAgVVNCeF9QQ0dDQ1RMID0gMFU7CiAKLSAgLyogRGV2aWNlIG1vZGUgY29uZmlndXJhdGlvbiAqLwotICBVU0J4X0RFVklDRS0+RENGRyB8PSBEQ0ZHX0ZSQU1FX0lOVEVSVkFMXzgwOwotCiAgIGlmIChjZmcucGh5X2l0ZmFjZSA9PSBVU0JfT1RHX1VMUElfUEhZKQogICB7CiAgICAgaWYgKGNmZy5zcGVlZCA9PSBVU0JEX0hTX1NQRUVEKQpAQCAtNDMzLDcgKzQzMSw3IEBACiB9CiAKIC8qKgotICAqIEBicmllZiAgVVNCX09UR19GbHVzaFR4RmlmbyA6IEZsdXNoIGEgVHggRklGTworICAqIEBicmllZiAgVVNCX0ZsdXNoVHhGaWZvIEZsdXNoIGEgVHggRklGTwogICAqIEBwYXJhbSAgVVNCeCAgU2VsZWN0ZWQgZGV2aWNlCiAgICogQHBhcmFtICBudW0gIEZJRk8gbnVtYmVyCiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBmcm9tIDEgdG8gMTUKQEAgLTQ0MiwxMyArNDQwLDI4IEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBVU0JfRmx1c2hUeEZpZm8oVVNCX09UR19HbG9iYWxUeXBlRGVmICpVU0J4LCB1aW50MzJfdCBudW0pCiB7Ci0gIHVpbnQzMl90IGNvdW50ID0gMFU7CisgIF9fSU8gdWludDMyX3QgY291bnQgPSAwVTsKIAorICAvKiBXYWl0IGZvciBBSEIgbWFzdGVyIElETEUgc3RhdGUuICovCisgIGRvCisgIHsKKyAgICBjb3VudCsrOworCisgICAgaWYgKGNvdW50ID4gMjAwMDAwVSkKKyAgICB7CisgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgICAgfQorICB9IHdoaWxlICgoVVNCeC0+R1JTVENUTCAmIFVTQl9PVEdfR1JTVENUTF9BSEJJREwpID09IDBVKTsKKworICAvKiBGbHVzaCBUWCBGaWZvICovCisgIGNvdW50ID0gMFU7CiAgIFVTQngtPkdSU1RDVEwgPSAoVVNCX09UR19HUlNUQ1RMX1RYRkZMU0ggfCAobnVtIDw8IDYpKTsKIAogICBkbwogICB7Ci0gICAgaWYgKCsrY291bnQgPiAyMDAwMDBVKQorICAgIGNvdW50Kys7CisKKyAgICBpZiAoY291bnQgPiAyMDAwMDBVKQogICAgIHsKICAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKICAgICB9CkBAIC00NTgsMTkgKzQ3MSwzNCBAQAogfQogCiAvKioKLSAgKiBAYnJpZWYgIFVTQl9GbHVzaFJ4RmlmbyA6IEZsdXNoIFJ4IEZJRk8KKyAgKiBAYnJpZWYgIFVTQl9GbHVzaFJ4RmlmbyAgRmx1c2ggUnggRklGTwogICAqIEBwYXJhbSAgVVNCeCAgU2VsZWN0ZWQgZGV2aWNlCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBVU0JfRmx1c2hSeEZpZm8oVVNCX09UR19HbG9iYWxUeXBlRGVmICpVU0J4KQogewotICB1aW50MzJfdCBjb3VudCA9IDA7CisgIF9fSU8gdWludDMyX3QgY291bnQgPSAwVTsKIAorICAvKiBXYWl0IGZvciBBSEIgbWFzdGVyIElETEUgc3RhdGUuICovCisgIGRvCisgIHsKKyAgICBjb3VudCsrOworCisgICAgaWYgKGNvdW50ID4gMjAwMDAwVSkKKyAgICB7CisgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgICAgfQorICB9IHdoaWxlICgoVVNCeC0+R1JTVENUTCAmIFVTQl9PVEdfR1JTVENUTF9BSEJJREwpID09IDBVKTsKKworICAvKiBGbHVzaCBSWCBGaWZvICovCisgIGNvdW50ID0gMFU7CiAgIFVTQngtPkdSU1RDVEwgPSBVU0JfT1RHX0dSU1RDVExfUlhGRkxTSDsKIAogICBkbwogICB7Ci0gICAgaWYgKCsrY291bnQgPiAyMDAwMDBVKQorICAgIGNvdW50Kys7CisKKyAgICBpZiAoY291bnQgPiAyMDAwMDBVKQogICAgIHsKICAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKICAgICB9CkBAIC03MjYsOCArNzU0LDIxIEBACiAgICAgICAqLwogICAgICAgVVNCeF9JTkVQKGVwbnVtKS0+RElFUFRTSVogJj0gfihVU0JfT1RHX0RJRVBUU0laX1hGUlNJWik7CiAgICAgICBVU0J4X0lORVAoZXBudW0pLT5ESUVQVFNJWiAmPSB+KFVTQl9PVEdfRElFUFRTSVpfUEtUQ05UKTsKLSAgICAgIFVTQnhfSU5FUChlcG51bSktPkRJRVBUU0laIHw9IChVU0JfT1RHX0RJRVBUU0laX1BLVENOVCAmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoZXAtPnhmZXJfbGVuICsgZXAtPm1heHBhY2tldCAtIDFVKSAvIGVwLT5tYXhwYWNrZXQpIDw8IDE5KSk7CisKKyAgICAgIGlmIChlcG51bSA9PSAwVSkKKyAgICAgIHsKKyAgICAgICAgaWYgKGVwLT54ZmVyX2xlbiA+IGVwLT5tYXhwYWNrZXQpCisgICAgICAgIHsKKyAgICAgICAgICBlcC0+eGZlcl9sZW4gPSBlcC0+bWF4cGFja2V0OworICAgICAgICB9CisKKyAgICAgICAgVVNCeF9JTkVQKGVwbnVtKS0+RElFUFRTSVogfD0gKFVTQl9PVEdfRElFUFRTSVpfUEtUQ05UICYgKDFVIDw8IDE5KSk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIFVTQnhfSU5FUChlcG51bSktPkRJRVBUU0laIHw9IChVU0JfT1RHX0RJRVBUU0laX1BLVENOVCAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChlcC0+eGZlcl9sZW4gKyBlcC0+bWF4cGFja2V0IC0gMVUpIC8gZXAtPm1heHBhY2tldCkgPDwgMTkpKTsKKyAgICAgIH0KIAogICAgICAgVVNCeF9JTkVQKGVwbnVtKS0+RElFUFRTSVogfD0gKFVTQl9PVEdfRElFUFRTSVpfWEZSU0laICYgZXAtPnhmZXJfbGVuKTsKIApAQCAtNzk3LDE4ICs4MzgsMzQgQEAKICAgICBVU0J4X09VVEVQKGVwbnVtKS0+RE9FUFRTSVogJj0gfihVU0JfT1RHX0RPRVBUU0laX1hGUlNJWik7CiAgICAgVVNCeF9PVVRFUChlcG51bSktPkRPRVBUU0laICY9IH4oVVNCX09UR19ET0VQVFNJWl9QS1RDTlQpOwogCi0gICAgaWYgKGVwLT54ZmVyX2xlbiA9PSAwVSkKKyAgICBpZiAoZXBudW0gPT0gMFUpCiAgICAgewotICAgICAgVVNCeF9PVVRFUChlcG51bSktPkRPRVBUU0laIHw9IChVU0JfT1RHX0RPRVBUU0laX1hGUlNJWiAmIGVwLT5tYXhwYWNrZXQpOworICAgICAgaWYgKGVwLT54ZmVyX2xlbiA+IDBVKQorICAgICAgeworICAgICAgICBlcC0+eGZlcl9sZW4gPSBlcC0+bWF4cGFja2V0OworICAgICAgfQorCisgICAgICAvKiBTdG9yZSB0cmFuc2ZlciBzaXplLCBmb3IgRVAwIHRoaXMgaXMgZXF1YWwgdG8gZW5kcG9pbnQgbWF4IHBhY2tldCBzaXplICovCisgICAgICBlcC0+eGZlcl9zaXplID0gZXAtPm1heHBhY2tldDsKKworICAgICAgVVNCeF9PVVRFUChlcG51bSktPkRPRVBUU0laIHw9IChVU0JfT1RHX0RPRVBUU0laX1hGUlNJWiAmIGVwLT54ZmVyX3NpemUpOwogICAgICAgVVNCeF9PVVRFUChlcG51bSktPkRPRVBUU0laIHw9IChVU0JfT1RHX0RPRVBUU0laX1BLVENOVCAmICgxVSA8PCAxOSkpOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgcGt0Y250ID0gKHVpbnQxNl90KSgoZXAtPnhmZXJfbGVuICsgZXAtPm1heHBhY2tldCAtIDFVKSAvIGVwLT5tYXhwYWNrZXQpOwotICAgICAgZXAtPnhmZXJfc2l6ZSA9IGVwLT5tYXhwYWNrZXQgKiBwa3RjbnQ7CisgICAgICBpZiAoZXAtPnhmZXJfbGVuID09IDBVKQorICAgICAgeworICAgICAgICBVU0J4X09VVEVQKGVwbnVtKS0+RE9FUFRTSVogfD0gKFVTQl9PVEdfRE9FUFRTSVpfWEZSU0laICYgZXAtPm1heHBhY2tldCk7CisgICAgICAgIFVTQnhfT1VURVAoZXBudW0pLT5ET0VQVFNJWiB8PSAoVVNCX09UR19ET0VQVFNJWl9QS1RDTlQgJiAoMVUgPDwgMTkpKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgcGt0Y250ID0gKHVpbnQxNl90KSgoZXAtPnhmZXJfbGVuICsgZXAtPm1heHBhY2tldCAtIDFVKSAvIGVwLT5tYXhwYWNrZXQpOworICAgICAgICBlcC0+eGZlcl9zaXplID0gZXAtPm1heHBhY2tldCAqIHBrdGNudDsKIAotICAgICAgVVNCeF9PVVRFUChlcG51bSktPkRPRVBUU0laIHw9IFVTQl9PVEdfRE9FUFRTSVpfUEtUQ05UICYgKCh1aW50MzJfdClwa3RjbnQgPDwgMTkpOwotICAgICAgVVNCeF9PVVRFUChlcG51bSktPkRPRVBUU0laIHw9IFVTQl9PVEdfRE9FUFRTSVpfWEZSU0laICYgZXAtPnhmZXJfc2l6ZTsKKyAgICAgICAgVVNCeF9PVVRFUChlcG51bSktPkRPRVBUU0laIHw9IFVTQl9PVEdfRE9FUFRTSVpfUEtUQ05UICYgKCh1aW50MzJfdClwa3RjbnQgPDwgMTkpOworICAgICAgICBVU0J4X09VVEVQKGVwbnVtKS0+RE9FUFRTSVogfD0gVVNCX09UR19ET0VQVFNJWl9YRlJTSVogJiBlcC0+eGZlcl9zaXplOworICAgICAgfQogICAgIH0KIAogICAgIGlmIChkbWEgPT0gMVUpCkBAIC04MzcsMTA2ICs4OTQsNjQgQEAKICAgcmV0dXJuIEhBTF9PSzsKIH0KIAorCiAvKioKLSAgKiBAYnJpZWYgIFVTQl9FUDBTdGFydFhmZXIgOiBzZXR1cCBhbmQgc3RhcnRzIGEgdHJhbnNmZXIgb3ZlciB0aGUgRVAgIDAKLSAgKiBAcGFyYW0gIFVTQnggIFNlbGVjdGVkIGRldmljZQotICAqIEBwYXJhbSAgZXAgcG9pbnRlciB0byBlbmRwb2ludCBzdHJ1Y3R1cmUKLSAgKiBAcGFyYW0gIGRtYSBVU0IgZG1hIGVuYWJsZWQgb3IgZGlzYWJsZWQKLSAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZXNlIHZhbHVlczoKLSAgKiAgICAgICAgICAgMCA6IERNQSBmZWF0dXJlIG5vdCB1c2VkCi0gICogICAgICAgICAgIDEgOiBETUEgZmVhdHVyZSB1c2VkCi0gICogQHJldHZhbCBIQUwgc3RhdHVzCi0gICovCi1IQUxfU3RhdHVzVHlwZURlZiBVU0JfRVAwU3RhcnRYZmVyKFVTQl9PVEdfR2xvYmFsVHlwZURlZiAqVVNCeCwgVVNCX09UR19FUFR5cGVEZWYgKmVwLCB1aW50OF90IGRtYSkKKyAgICogQGJyaWVmICBVU0JfRVBTdG9wdFhmZXIgIFN0b3AgdHJhbnNmZXIgb24gYW4gRVAKKyAgICogQHBhcmFtICBVU0J4ICB1c2IgZGV2aWNlIGluc3RhbmNlCisgICAqIEBwYXJhbSAgZXAgcG9pbnRlciB0byBlbmRwb2ludCBzdHJ1Y3R1cmUKKyAgICogQHJldHZhbCBIQUwgc3RhdHVzCisgICAqLworSEFMX1N0YXR1c1R5cGVEZWYgVVNCX0VQU3RvcFhmZXIoVVNCX09UR19HbG9iYWxUeXBlRGVmICpVU0J4LCBVU0JfT1RHX0VQVHlwZURlZiAqZXApCiB7CisgIF9fSU8gdWludDMyX3QgY291bnQgPSAwVTsKKyAgSEFMX1N0YXR1c1R5cGVEZWYgcmV0ID0gSEFMX09LOwogICB1aW50MzJfdCBVU0J4X0JBU0UgPSAodWludDMyX3QpVVNCeDsKLSAgdWludDMyX3QgZXBudW0gPSAodWludDMyX3QpZXAtPm51bTsKIAogICAvKiBJTiBlbmRwb2ludCAqLwogICBpZiAoZXAtPmlzX2luID09IDFVKQogICB7Ci0gICAgLyogWmVybyBMZW5ndGggUGFja2V0PyAqLwotICAgIGlmIChlcC0+eGZlcl9sZW4gPT0gMFUpCisgICAgLyogRVAgZW5hYmxlLCBJTiBkYXRhIGluIEZJRk8gKi8KKyAgICBpZiAoKChVU0J4X0lORVAoZXAtPm51bSktPkRJRVBDVEwpICYgVVNCX09UR19ESUVQQ1RMX0VQRU5BKSA9PSBVU0JfT1RHX0RJRVBDVExfRVBFTkEpCiAgICAgewotICAgICAgVVNCeF9JTkVQKGVwbnVtKS0+RElFUFRTSVogJj0gfihVU0JfT1RHX0RJRVBUU0laX1BLVENOVCk7Ci0gICAgICBVU0J4X0lORVAoZXBudW0pLT5ESUVQVFNJWiB8PSAoVVNCX09UR19ESUVQVFNJWl9QS1RDTlQgJiAoMVUgPDwgMTkpKTsKLSAgICAgIFVTQnhfSU5FUChlcG51bSktPkRJRVBUU0laICY9IH4oVVNCX09UR19ESUVQVFNJWl9YRlJTSVopOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLyogUHJvZ3JhbSB0aGUgdHJhbnNmZXIgc2l6ZSBhbmQgcGFja2V0IGNvdW50Ci0gICAgICAqIGFzIGZvbGxvd3M6IHhmZXJzaXplID0gTiAqIG1heHBhY2tldCArCi0gICAgICAqIHNob3J0X3BhY2tldCBwa3RjbnQgPSBOICsgKHNob3J0X3BhY2tldAotICAgICAgKiBleGlzdCA/IDEgOiAwKQotICAgICAgKi8KLSAgICAgIFVTQnhfSU5FUChlcG51bSktPkRJRVBUU0laICY9IH4oVVNCX09UR19ESUVQVFNJWl9YRlJTSVopOwotICAgICAgVVNCeF9JTkVQKGVwbnVtKS0+RElFUFRTSVogJj0gfihVU0JfT1RHX0RJRVBUU0laX1BLVENOVCk7CisgICAgICBVU0J4X0lORVAoZXAtPm51bSktPkRJRVBDVEwgfD0gKFVTQl9PVEdfRElFUENUTF9TTkFLKTsKKyAgICAgIFVTQnhfSU5FUChlcC0+bnVtKS0+RElFUENUTCB8PSAoVVNCX09UR19ESUVQQ1RMX0VQRElTKTsKIAotICAgICAgaWYgKGVwLT54ZmVyX2xlbiA+IGVwLT5tYXhwYWNrZXQpCisgICAgICBkbwogICAgICAgewotICAgICAgICBlcC0+eGZlcl9sZW4gPSBlcC0+bWF4cGFja2V0OwotICAgICAgfQotICAgICAgVVNCeF9JTkVQKGVwbnVtKS0+RElFUFRTSVogfD0gKFVTQl9PVEdfRElFUFRTSVpfUEtUQ05UICYgKDFVIDw8IDE5KSk7Ci0gICAgICBVU0J4X0lORVAoZXBudW0pLT5ESUVQVFNJWiB8PSAoVVNCX09UR19ESUVQVFNJWl9YRlJTSVogJiBlcC0+eGZlcl9sZW4pOwotICAgIH0KKyAgICAgICAgY291bnQrKzsKIAotICAgIGlmIChkbWEgPT0gMVUpCi0gICAgewotICAgICAgaWYgKCh1aW50MzJfdCllcC0+ZG1hX2FkZHIgIT0gMFUpCi0gICAgICB7Ci0gICAgICAgIFVTQnhfSU5FUChlcG51bSktPkRJRVBETUEgPSAodWludDMyX3QpKGVwLT5kbWFfYWRkcik7Ci0gICAgICB9Ci0KLSAgICAgIC8qIEVQIGVuYWJsZSwgSU4gZGF0YSBpbiBGSUZPICovCi0gICAgICBVU0J4X0lORVAoZXBudW0pLT5ESUVQQ1RMIHw9IChVU0JfT1RHX0RJRVBDVExfQ05BSyB8IFVTQl9PVEdfRElFUENUTF9FUEVOQSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAvKiBFUCBlbmFibGUsIElOIGRhdGEgaW4gRklGTyAqLwotICAgICAgVVNCeF9JTkVQKGVwbnVtKS0+RElFUENUTCB8PSAoVVNCX09UR19ESUVQQ1RMX0NOQUsgfCBVU0JfT1RHX0RJRVBDVExfRVBFTkEpOwotCi0gICAgICAvKiBFbmFibGUgdGhlIFR4IEZJRk8gRW1wdHkgSW50ZXJydXB0IGZvciB0aGlzIEVQICovCi0gICAgICBpZiAoZXAtPnhmZXJfbGVuID4gMFUpCi0gICAgICB7Ci0gICAgICAgIFVTQnhfREVWSUNFLT5ESUVQRU1QTVNLIHw9IDFVTCA8PCAoZXAtPm51bSAmIEVQX0FERFJfTVNLKTsKLSAgICAgIH0KKyAgICAgICAgaWYgKGNvdW50ID4gMTAwMDBVKQorICAgICAgICB7CisgICAgICAgICAgcmV0ID0gSEFMX0VSUk9SOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9IHdoaWxlICgoKFVTQnhfSU5FUChlcC0+bnVtKS0+RElFUENUTCkgJiBVU0JfT1RHX0RJRVBDVExfRVBFTkEpID09ICBVU0JfT1RHX0RJRVBDVExfRVBFTkEpOwogICAgIH0KICAgfQogICBlbHNlIC8qIE9VVCBlbmRwb2ludCAqLwogICB7Ci0gICAgLyogUHJvZ3JhbSB0aGUgdHJhbnNmZXIgc2l6ZSBhbmQgcGFja2V0IGNvdW50IGFzIGZvbGxvd3M6Ci0gICAgKiBwa3RjbnQgPSBOCi0gICAgKiB4ZmVyc2l6ZSA9IE4gKiBtYXhwYWNrZXQKLSAgICAqLwotICAgIFVTQnhfT1VURVAoZXBudW0pLT5ET0VQVFNJWiAmPSB+KFVTQl9PVEdfRE9FUFRTSVpfWEZSU0laKTsKLSAgICBVU0J4X09VVEVQKGVwbnVtKS0+RE9FUFRTSVogJj0gfihVU0JfT1RHX0RPRVBUU0laX1BLVENOVCk7Ci0KLSAgICBpZiAoZXAtPnhmZXJfbGVuID4gMFUpCisgICAgaWYgKCgoVVNCeF9PVVRFUChlcC0+bnVtKS0+RE9FUENUTCkgJiBVU0JfT1RHX0RPRVBDVExfRVBFTkEpID09IFVTQl9PVEdfRE9FUENUTF9FUEVOQSkKICAgICB7Ci0gICAgICBlcC0+eGZlcl9sZW4gPSBlcC0+bWF4cGFja2V0OwotICAgIH0KKyAgICAgIFVTQnhfT1VURVAoZXAtPm51bSktPkRPRVBDVEwgfD0gKFVTQl9PVEdfRE9FUENUTF9TTkFLKTsKKyAgICAgIFVTQnhfT1VURVAoZXAtPm51bSktPkRPRVBDVEwgfD0gKFVTQl9PVEdfRE9FUENUTF9FUERJUyk7CiAKLSAgICAvKiBTdG9yZSB0cmFuc2ZlciBzaXplLCBmb3IgRVAwIHRoaXMgaXMgZXF1YWwgdG8gZW5kcG9pbnQgbWF4IHBhY2tldCBzaXplICovCi0gICAgZXAtPnhmZXJfc2l6ZSA9IGVwLT5tYXhwYWNrZXQ7Ci0KLSAgICBVU0J4X09VVEVQKGVwbnVtKS0+RE9FUFRTSVogfD0gKFVTQl9PVEdfRE9FUFRTSVpfUEtUQ05UICYgKDFVIDw8IDE5KSk7Ci0gICAgVVNCeF9PVVRFUChlcG51bSktPkRPRVBUU0laIHw9IChVU0JfT1RHX0RPRVBUU0laX1hGUlNJWiAmIGVwLT54ZmVyX3NpemUpOwotCi0gICAgaWYgKGRtYSA9PSAxVSkKLSAgICB7Ci0gICAgICBpZiAoKHVpbnQzMl90KWVwLT54ZmVyX2J1ZmYgIT0gMFUpCisgICAgICBkbwogICAgICAgewotICAgICAgICBVU0J4X09VVEVQKGVwbnVtKS0+RE9FUERNQSA9ICh1aW50MzJfdCkoZXAtPnhmZXJfYnVmZik7Ci0gICAgICB9Ci0gICAgfQorICAgICAgICBjb3VudCsrOwogCi0gICAgLyogRVAgZW5hYmxlICovCi0gICAgVVNCeF9PVVRFUChlcG51bSktPkRPRVBDVEwgfD0gKFVTQl9PVEdfRE9FUENUTF9DTkFLIHwgVVNCX09UR19ET0VQQ1RMX0VQRU5BKTsKKyAgICAgICAgaWYgKGNvdW50ID4gMTAwMDBVKQorICAgICAgICB7CisgICAgICAgICAgcmV0ID0gSEFMX0VSUk9SOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9IHdoaWxlICgoKFVTQnhfT1VURVAoZXAtPm51bSktPkRPRVBDVEwpICYgVVNCX09UR19ET0VQQ1RMX0VQRU5BKSA9PSAgVVNCX09UR19ET0VQQ1RMX0VQRU5BKTsKKyAgICB9CiAgIH0KIAotICByZXR1cm4gSEFMX09LOworICByZXR1cm4gcmV0OwogfQogCisKIC8qKgogICAqIEBicmllZiAgVVNCX1dyaXRlUGFja2V0IDogV3JpdGVzIGEgcGFja2V0IGludG8gdGhlIFR4IEZJRk8gYXNzb2NpYXRlZAogICAqICAgICAgICAgd2l0aCB0aGUgRVAvY2hhbm5lbApAQCAtMTEyNCw3ICsxMTM5LDcgQEAKICAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBmcm9tIDAgdG8gMjU1CiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiAgVVNCX1NldERldkFkZHJlc3MoVVNCX09UR19HbG9iYWxUeXBlRGVmICpVU0J4LCB1aW50OF90IGFkZHJlc3MpCitIQUxfU3RhdHVzVHlwZURlZiBVU0JfU2V0RGV2QWRkcmVzcyhVU0JfT1RHX0dsb2JhbFR5cGVEZWYgKlVTQngsIHVpbnQ4X3QgYWRkcmVzcykKIHsKICAgdWludDMyX3QgVVNCeF9CQVNFID0gKHVpbnQzMl90KVVTQng7CiAKQEAgLTExMzksNyArMTE1NCw3IEBACiAgICogQHBhcmFtICBVU0J4ICBTZWxlY3RlZCBkZXZpY2UKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmICBVU0JfRGV2Q29ubmVjdChVU0JfT1RHX0dsb2JhbFR5cGVEZWYgKlVTQngpCitIQUxfU3RhdHVzVHlwZURlZiBVU0JfRGV2Q29ubmVjdChVU0JfT1RHX0dsb2JhbFR5cGVEZWYgKlVTQngpCiB7CiAgIHVpbnQzMl90IFVTQnhfQkFTRSA9ICh1aW50MzJfdClVU0J4OwogCkBAIC0xMTU2LDcgKzExNzEsNyBAQAogICAqIEBwYXJhbSAgVVNCeCAgU2VsZWN0ZWQgZGV2aWNlCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiAgVVNCX0RldkRpc2Nvbm5lY3QoVVNCX09UR19HbG9iYWxUeXBlRGVmICpVU0J4KQorSEFMX1N0YXR1c1R5cGVEZWYgVVNCX0RldkRpc2Nvbm5lY3QoVVNCX09UR19HbG9iYWxUeXBlRGVmICpVU0J4KQogewogICB1aW50MzJfdCBVU0J4X0JBU0UgPSAodWludDMyX3QpVVNCeDsKIApAQCAtMTE3MSw5ICsxMTg2LDkgQEAKIC8qKgogICAqIEBicmllZiAgVVNCX1JlYWRJbnRlcnJ1cHRzOiByZXR1cm4gdGhlIGdsb2JhbCBVU0IgaW50ZXJydXB0IHN0YXR1cwogICAqIEBwYXJhbSAgVVNCeCAgU2VsZWN0ZWQgZGV2aWNlCi0gICogQHJldHZhbCBIQUwgc3RhdHVzCisgICogQHJldHZhbCBVU0IgR2xvYmFsIEludGVycnVwdCBzdGF0dXMKICAgKi8KLXVpbnQzMl90ICBVU0JfUmVhZEludGVycnVwdHMoVVNCX09UR19HbG9iYWxUeXBlRGVmICpVU0J4KQordWludDMyX3QgVVNCX1JlYWRJbnRlcnJ1cHRzKFVTQl9PVEdfR2xvYmFsVHlwZURlZiBjb25zdCAqVVNCeCkKIHsKICAgdWludDMyX3QgdG1wcmVnOwogCkBAIC0xMTg0LDkgKzExOTksMjYgQEAKIH0KIAogLyoqCisgICogQGJyaWVmICBVU0JfUmVhZENoSW50ZXJydXB0czogcmV0dXJuIFVTQiBjaGFubmVsIGludGVycnVwdCBzdGF0dXMKKyAgKiBAcGFyYW0gIFVTQnggIFNlbGVjdGVkIGRldmljZQorICAqIEBwYXJhbSAgY2hudW0gQ2hhbm5lbCBudW1iZXIKKyAgKiBAcmV0dmFsIFVTQiBDaGFubmVsIEludGVycnVwdCBzdGF0dXMKKyAgKi8KK3VpbnQzMl90IFVTQl9SZWFkQ2hJbnRlcnJ1cHRzKFVTQl9PVEdfR2xvYmFsVHlwZURlZiAqVVNCeCwgdWludDhfdCBjaG51bSkKK3sKKyAgdWludDMyX3QgVVNCeF9CQVNFID0gKHVpbnQzMl90KVVTQng7CisgIHVpbnQzMl90IHRtcHJlZzsKKworICB0bXByZWcgPSBVU0J4X0hDKGNobnVtKS0+SENJTlQ7CisgIHRtcHJlZyAmPSBVU0J4X0hDKGNobnVtKS0+SENJTlRNU0s7CisKKyAgcmV0dXJuIHRtcHJlZzsKK30KKworLyoqCiAgICogQGJyaWVmICBVU0JfUmVhZERldkFsbE91dEVwSW50ZXJydXB0OiByZXR1cm4gdGhlIFVTQiBkZXZpY2UgT1VUIGVuZHBvaW50cyBpbnRlcnJ1cHQgc3RhdHVzCiAgICogQHBhcmFtICBVU0J4ICBTZWxlY3RlZCBkZXZpY2UKLSAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKKyAgKiBAcmV0dmFsIFVTQiBEZXZpY2UgT1VUIEVQIGludGVycnVwdCBzdGF0dXMKICAgKi8KIHVpbnQzMl90IFVTQl9SZWFkRGV2QWxsT3V0RXBJbnRlcnJ1cHQoVVNCX09UR19HbG9iYWxUeXBlRGVmICpVU0J4KQogewpAQCAtMTIwMiw3ICsxMjM0LDcgQEAKIC8qKgogICAqIEBicmllZiAgVVNCX1JlYWREZXZBbGxJbkVwSW50ZXJydXB0OiByZXR1cm4gdGhlIFVTQiBkZXZpY2UgSU4gZW5kcG9pbnRzIGludGVycnVwdCBzdGF0dXMKICAgKiBAcGFyYW0gIFVTQnggIFNlbGVjdGVkIGRldmljZQotICAqIEByZXR2YWwgSEFMIHN0YXR1cworICAqIEByZXR2YWwgVVNCIERldmljZSBJTiBFUCBpbnRlcnJ1cHQgc3RhdHVzCiAgICovCiB1aW50MzJfdCBVU0JfUmVhZERldkFsbEluRXBJbnRlcnJ1cHQoVVNCX09UR19HbG9iYWxUeXBlRGVmICpVU0J4KQogewpAQCAtMTI4NCw3ICsxMzE2LDcgQEAKICAgKiBAcGFyYW0gIFVTQnggIFNlbGVjdGVkIGRldmljZQogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgIFVTQl9BY3RpdmF0ZVNldHVwKFVTQl9PVEdfR2xvYmFsVHlwZURlZiAqVVNCeCkKK0hBTF9TdGF0dXNUeXBlRGVmIFVTQl9BY3RpdmF0ZVNldHVwKFVTQl9PVEdfR2xvYmFsVHlwZURlZiAqVVNCeCkKIHsKICAgdWludDMyX3QgVVNCeF9CQVNFID0gKHVpbnQzMl90KVVTQng7CiAKQEAgLTEzNDEsMTIgKzEzNzMsMTQgQEAKICAgKi8KIHN0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBVU0JfQ29yZVJlc2V0KFVTQl9PVEdfR2xvYmFsVHlwZURlZiAqVVNCeCkKIHsKLSAgdWludDMyX3QgY291bnQgPSAwVTsKKyAgX19JTyB1aW50MzJfdCBjb3VudCA9IDBVOwogCiAgIC8qIFdhaXQgZm9yIEFIQiBtYXN0ZXIgSURMRSBzdGF0ZS4gKi8KICAgZG8KICAgewotICAgIGlmICgrK2NvdW50ID4gMjAwMDAwVSkKKyAgICBjb3VudCsrOworCisgICAgaWYgKGNvdW50ID4gMjAwMDAwVSkKICAgICB7CiAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CiAgICAgfQpAQCAtMTM1OCw3ICsxMzkyLDkgQEAKIAogICBkbwogICB7Ci0gICAgaWYgKCsrY291bnQgPiAyMDAwMDBVKQorICAgIGNvdW50Kys7CisKKyAgICBpZiAoY291bnQgPiAyMDAwMDBVKQogICAgIHsKICAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKICAgICB9CkBAIC0xMzc3LDYgKzE0MTMsNyBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgVVNCX0hvc3RJbml0KFVTQl9PVEdfR2xvYmFsVHlwZURlZiAqVVNCeCwgVVNCX09UR19DZmdUeXBlRGVmIGNmZykKIHsKKyAgSEFMX1N0YXR1c1R5cGVEZWYgcmV0ID0gSEFMX09LOwogICB1aW50MzJfdCBVU0J4X0JBU0UgPSAodWludDMyX3QpVVNCeDsKICAgdWludDMyX3QgaTsKIApAQCAtMTQwOCwxMyArMTQ0NSwyMCBAQAogICB9CiAKICAgLyogTWFrZSBzdXJlIHRoZSBGSUZPcyBhcmUgZmx1c2hlZC4gKi8KLSAgKHZvaWQpVVNCX0ZsdXNoVHhGaWZvKFVTQngsIDB4MTBVKTsgLyogYWxsIFR4IEZJRk9zICovCi0gICh2b2lkKVVTQl9GbHVzaFJ4RmlmbyhVU0J4KTsKKyAgaWYgKFVTQl9GbHVzaFR4RmlmbyhVU0J4LCAweDEwVSkgIT0gSEFMX09LKSAvKiBhbGwgVHggRklGT3MgKi8KKyAgeworICAgIHJldCA9IEhBTF9FUlJPUjsKKyAgfQorCisgIGlmIChVU0JfRmx1c2hSeEZpZm8oVVNCeCkgIT0gSEFMX09LKQorICB7CisgICAgcmV0ID0gSEFMX0VSUk9SOworICB9CiAKICAgLyogQ2xlYXIgYWxsIHBlbmRpbmcgSEMgSW50ZXJydXB0cyAqLwogICBmb3IgKGkgPSAwVTsgaSA8IGNmZy5Ib3N0X2NoYW5uZWxzOyBpKyspCiAgIHsKLSAgICBVU0J4X0hDKGkpLT5IQ0lOVCA9IDB4RkZGRkZGRkZVOworICAgIFVTQnhfSEMoaSktPkhDSU5UID0gQ0xFQVJfSU5URVJSVVBUX01BU0s7CiAgICAgVVNCeF9IQyhpKS0+SENJTlRNU0sgPSAwVTsKICAgfQogCkBAIC0xNDIyLDcgKzE0NjYsNyBAQAogICBVU0J4LT5HSU5UTVNLID0gMFU7CiAKICAgLyogQ2xlYXIgYW55IHBlbmRpbmcgaW50ZXJydXB0cyAqLwotICBVU0J4LT5HSU5UU1RTID0gMHhGRkZGRkZGRlU7CisgIFVTQngtPkdJTlRTVFMgPSBDTEVBUl9JTlRFUlJVUFRfTUFTSzsKIAogICBpZiAoKFVTQngtPkNJRCAmICgweDFVIDw8IDgpKSAhPSAwVSkKICAgewpAQCAtMTQ1MCw3ICsxNDk0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgVVNCX09UR19HSU5UTVNLX1NPRk0gICAgICAgICAgICAgfCBVU0JfT1RHX0dJTlRTVFNfRElTQ0lOVCB8IFwKICAgICAgICAgICAgICAgICAgICAgVVNCX09UR19HSU5UTVNLX1BYRlJNX0lJU09PWEZSTSAgfCBVU0JfT1RHX0dJTlRNU0tfV1VJTSk7CiAKLSAgcmV0dXJuIEhBTF9PSzsKKyAgcmV0dXJuIHJldDsKIH0KIAogLyoqCkBAIC0xNDcyLDE1ICsxNTE2LDE1IEBACiAKICAgaWYgKGZyZXEgPT0gSENGR180OF9NSFopCiAgIHsKLSAgICBVU0J4X0hPU1QtPkhGSVIgPSA0ODAwMFU7CisgICAgVVNCeF9IT1NULT5IRklSID0gSEZJUl80OF9NSFo7CiAgIH0KICAgZWxzZSBpZiAoZnJlcSA9PSBIQ0ZHXzZfTUhaKQogICB7Ci0gICAgVVNCeF9IT1NULT5IRklSID0gNjAwMFU7CisgICAgVVNCeF9IT1NULT5IRklSID0gSEZJUl82X01IWjsKICAgfQogICBlbHNlCiAgIHsKLSAgICAvKiAuLi4gKi8KKyAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CiAKICAgcmV0dXJuIEhBTF9PSzsKQEAgLTE1NTAsNyArMTU5NCw3IEBACiAgICogICAgICAgICAgICBAYXJnIEhDRF9TUEVFRF9GVUxMOiBGdWxsIHNwZWVkIG1vZGUKICAgKiAgICAgICAgICAgIEBhcmcgSENEX1NQRUVEX0xPVzogTG93IHNwZWVkIG1vZGUKICAgKi8KLXVpbnQzMl90IFVTQl9HZXRIb3N0U3BlZWQoVVNCX09UR19HbG9iYWxUeXBlRGVmICpVU0J4KQordWludDMyX3QgVVNCX0dldEhvc3RTcGVlZChVU0JfT1RHX0dsb2JhbFR5cGVEZWYgY29uc3QgKlVTQngpCiB7CiAgIHVpbnQzMl90IFVTQnhfQkFTRSA9ICh1aW50MzJfdClVU0J4OwogICBfX0lPIHVpbnQzMl90IGhwcnQwID0gMFU7CkBAIC0xNTY0LDcgKzE2MDgsNyBAQAogICAqIEBwYXJhbSAgVVNCeCAgU2VsZWN0ZWQgZGV2aWNlCiAgICogQHJldHZhbCBjdXJyZW50IGZyYW1lIG51bWJlcgogICAqLwotdWludDMyX3QgVVNCX0dldEN1cnJlbnRGcmFtZShVU0JfT1RHX0dsb2JhbFR5cGVEZWYgKlVTQngpCit1aW50MzJfdCBVU0JfR2V0Q3VycmVudEZyYW1lKFVTQl9PVEdfR2xvYmFsVHlwZURlZiBjb25zdCAqVVNCeCkKIHsKICAgdWludDMyX3QgVVNCeF9CQVNFID0gKHVpbnQzMl90KVVTQng7CiAKQEAgLTE2MDYsNyArMTY1MCw3IEBACiAgIHVpbnQzMl90IEhvc3RDb3JlU3BlZWQ7CiAKICAgLyogQ2xlYXIgb2xkIGludGVycnVwdCBjb25kaXRpb25zIGZvciB0aGlzIGhvc3QgY2hhbm5lbC4gKi8KLSAgVVNCeF9IQygodWludDMyX3QpY2hfbnVtKS0+SENJTlQgPSAweEZGRkZGRkZGVTsKKyAgVVNCeF9IQygodWludDMyX3QpY2hfbnVtKS0+SENJTlQgPSBDTEVBUl9JTlRFUlJVUFRfTUFTSzsKIAogICAvKiBFbmFibGUgY2hhbm5lbCBpbnRlcnJ1cHRzIHJlcXVpcmVkIGZvciB0aGlzIHRyYW5zZmVyLiAqLwogICBzd2l0Y2ggKGVwX3R5cGUpCkBAIC0xNjY3LDYgKzE3MTEsMTIgQEAKICAgICAgIGJyZWFrOwogICB9CiAKKyAgLyogQ2xlYXIgSHViIFN0YXJ0IFNwbGl0IHRyYW5zYWN0aW9uICovCisgIFVTQnhfSEMoKHVpbnQzMl90KWNoX251bSktPkhDU1BMVCA9IDBVOworCisgIC8qIEVuYWJsZSBob3N0IGNoYW5uZWwgSGFsdCBpbnRlcnJ1cHQgKi8KKyAgVVNCeF9IQygodWludDMyX3QpY2hfbnVtKS0+SENJTlRNU0sgfD0gVVNCX09UR19IQ0lOVE1TS19DSEhNOworCiAgIC8qIEVuYWJsZSB0aGUgdG9wIGxldmVsIGhvc3QgY2hhbm5lbCBpbnRlcnJ1cHQuICovCiAgIFVTQnhfSE9TVC0+SEFJTlRNU0sgfD0gMVVMIDw8IChjaF9udW0gJiAweEZVKTsKIApAQCAtMTY5OCw3ICsxNzQ4LDggQEAKICAgVVNCeF9IQygodWludDMyX3QpY2hfbnVtKS0+SENDSEFSID0gKCgodWludDMyX3QpZGV2X2FkZHJlc3MgPDwgMjIpICYgVVNCX09UR19IQ0NIQVJfREFEKSB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKCh1aW50MzJfdCllcG51bSAmIDB4N0ZVKSA8PCAxMSkgJiBVU0JfT1RHX0hDQ0hBUl9FUE5VTSkgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCllcF90eXBlIDw8IDE4KSAmIFVTQl9PVEdfSENDSEFSX0VQVFlQKSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpbXBzICYgVVNCX09UR19IQ0NIQVJfTVBTSVopIHwgSENjaGFyRXBEaXIgfCBIQ2NoYXJMb3dTcGVlZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCltcHMgJiBVU0JfT1RHX0hDQ0hBUl9NUFNJWikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU0JfT1RHX0hDQ0hBUl9NQ18wIHwgSENjaGFyRXBEaXIgfCBIQ2NoYXJMb3dTcGVlZDsKIAogICBpZiAoKGVwX3R5cGUgPT0gRVBfVFlQRV9JTlRSKSB8fCAoZXBfdHlwZSA9PSBFUF9UWVBFX0lTT0MpKQogICB7CkBAIC0xNzI2LDUzICsxNzc3LDExNiBAQAogICB1aW50OF90ICBpc19vZGRmcmFtZTsKICAgdWludDE2X3QgbGVuX3dvcmRzOwogICB1aW50MTZfdCBudW1fcGFja2V0czsKLSAgdWludDE2X3QgbWF4X2hjX3BrdF9jb3VudCA9IDI1NlU7CisgIHVpbnQxNl90IG1heF9oY19wa3RfY291bnQgPSBIQ19NQVhfUEtUX0NOVDsKIAotICBpZiAoKChVU0J4LT5DSUQgJiAoMHgxVSA8PCA4KSkgIT0gMFUpICYmIChoYy0+c3BlZWQgPT0gVVNCSF9IU19TUEVFRCkpCisgIGlmICgoVVNCeC0+Q0lEICYgKDB4MVUgPDwgOCkpICE9IDBVKQogICB7Ci0gICAgLyogaW4gRE1BIG1vZGUgaG9zdCBDb3JlIGF1dG9tYXRpY2FsbHkgaXNzdWVzIHBpbmcgIGluIGNhc2Ugb2YgTllFVC9OQUsgKi8KLSAgICBpZiAoKGRtYSA9PSAxVSkgJiYgKChoYy0+ZXBfdHlwZSA9PSBFUF9UWVBFX0NUUkwpIHx8IChoYy0+ZXBfdHlwZSA9PSBFUF9UWVBFX0JVTEspKSkKKyAgICAvKiBpbiBETUEgbW9kZSBob3N0IENvcmUgYXV0b21hdGljYWxseSBpc3N1ZXMgcGluZyBpbiBjYXNlIG9mIE5ZRVQvTkFLICovCisgICAgaWYgKGRtYSA9PSAxVSkKICAgICB7Ci0gICAgICBVU0J4X0hDKCh1aW50MzJfdCljaF9udW0pLT5IQ0lOVE1TSyAmPSB+KFVTQl9PVEdfSENJTlRNU0tfTllFVCB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTQl9PVEdfSENJTlRNU0tfQUNLTSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTQl9PVEdfSENJTlRNU0tfTkFLTSk7Ci0gICAgfQorICAgICAgaWYgKChoYy0+ZXBfdHlwZSA9PSBFUF9UWVBFX0NUUkwpIHx8IChoYy0+ZXBfdHlwZSA9PSBFUF9UWVBFX0JVTEspKQorICAgICAgewogCi0gICAgaWYgKChkbWEgPT0gMFUpICYmIChoYy0+ZG9fcGluZyA9PSAxVSkpCisgICAgICAgIFVTQnhfSEMoKHVpbnQzMl90KWNoX251bSktPkhDSU5UTVNLICY9IH4oVVNCX09UR19IQ0lOVE1TS19OWUVUIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU0JfT1RHX0hDSU5UTVNLX0FDS00gfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTQl9PVEdfSENJTlRNU0tfTkFLTSk7CisgICAgICB9CisgICAgfQorICAgIGVsc2UKICAgICB7Ci0gICAgICAodm9pZClVU0JfRG9QaW5nKFVTQngsIGhjLT5jaF9udW0pOwotICAgICAgcmV0dXJuIEhBTF9PSzsKKyAgICAgIGlmICgoaGMtPnNwZWVkID09IFVTQkhfSFNfU1BFRUQpICYmIChoYy0+ZG9fcGluZyA9PSAxVSkpCisgICAgICB7CisgICAgICAgICh2b2lkKVVTQl9Eb1BpbmcoVVNCeCwgaGMtPmNoX251bSk7CisgICAgICAgIHJldHVybiBIQUxfT0s7CisgICAgICB9CiAgICAgfQotCiAgIH0KIAotICAvKiBDb21wdXRlIHRoZSBleHBlY3RlZCBudW1iZXIgb2YgcGFja2V0cyBhc3NvY2lhdGVkIHRvIHRoZSB0cmFuc2ZlciAqLwotICBpZiAoaGMtPnhmZXJfbGVuID4gMFUpCisgIGlmIChoYy0+ZG9fc3NwbGl0ID09IDFVKQogICB7Ci0gICAgbnVtX3BhY2tldHMgPSAodWludDE2X3QpKChoYy0+eGZlcl9sZW4gKyBoYy0+bWF4X3BhY2tldCAtIDFVKSAvIGhjLT5tYXhfcGFja2V0KTsKKyAgICAvKiBTZXQgbnVtYmVyIG9mIHBhY2tldCB0byAxIGZvciBTcGxpdCB0cmFuc2FjdGlvbiAqLworICAgIG51bV9wYWNrZXRzID0gMVU7CiAKLSAgICBpZiAobnVtX3BhY2tldHMgPiBtYXhfaGNfcGt0X2NvdW50KQorICAgIGlmIChoYy0+ZXBfaXNfaW4gIT0gMFUpCiAgICAgewotICAgICAgbnVtX3BhY2tldHMgPSBtYXhfaGNfcGt0X2NvdW50OwogICAgICAgaGMtPlhmZXJTaXplID0gKHVpbnQzMl90KW51bV9wYWNrZXRzICogaGMtPm1heF9wYWNrZXQ7CiAgICAgfQotICB9Ci0gIGVsc2UKLSAgewotICAgIG51bV9wYWNrZXRzID0gMVU7Ci0gIH0KKyAgICBlbHNlCisgICAgeworICAgICAgaWYgKGhjLT5lcF90eXBlID09IEVQX1RZUEVfSVNPQykKKyAgICAgIHsKKyAgICAgICAgaWYgKGhjLT54ZmVyX2xlbiA+IElTT19TUExUX01QUykKKyAgICAgICAgeworICAgICAgICAgIC8qIElzb2Nocm9uZSBNYXggUGFja2V0IFNpemUgZm9yIFNwbGl0IG1vZGUgKi8KKyAgICAgICAgICBoYy0+WGZlclNpemUgPSBoYy0+bWF4X3BhY2tldDsKKyAgICAgICAgICBoYy0+eGZlcl9sZW4gPSBoYy0+WGZlclNpemU7CiAKLSAgLyoKLSAgICogRm9yIElOIGNoYW5uZWwgSENUU0laLlhmZXJTaXplIGlzIGV4cGVjdGVkIHRvIGJlIGFuIGludGVnZXIgbXVsdGlwbGUgb2YKLSAgICogbWF4X3BhY2tldCBzaXplLgotICAgKi8KLSAgaWYgKGhjLT5lcF9pc19pbiAhPSAwVSkKLSAgewotICAgIGhjLT5YZmVyU2l6ZSA9ICh1aW50MzJfdCludW1fcGFja2V0cyAqIGhjLT5tYXhfcGFja2V0OworICAgICAgICAgIGlmICgoaGMtPmlzb19zcGx0X3hhY3RQb3MgPT0gSENTUExUX0JFR0lOKSB8fCAoaGMtPmlzb19zcGx0X3hhY3RQb3MgPT0gSENTUExUX01JRERMRSkpCisgICAgICAgICAgeworICAgICAgICAgICAgaGMtPmlzb19zcGx0X3hhY3RQb3MgPSBIQ1NQTFRfTUlERExFOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgaGMtPmlzb19zcGx0X3hhY3RQb3MgPSBIQ1NQTFRfQkVHSU47CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGhjLT5YZmVyU2l6ZSA9IGhjLT54ZmVyX2xlbjsKKworICAgICAgICAgIGlmICgoaGMtPmlzb19zcGx0X3hhY3RQb3MgIT0gSENTUExUX0JFR0lOKSAmJiAoaGMtPmlzb19zcGx0X3hhY3RQb3MgIT0gSENTUExUX01JRERMRSkpCisgICAgICAgICAgeworICAgICAgICAgICAgaGMtPmlzb19zcGx0X3hhY3RQb3MgPSBIQ1NQTFRfRlVMTDsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGhjLT5pc29fc3BsdF94YWN0UG9zID0gSENTUExUX0VORDsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgaWYgKChkbWEgPT0gMVUpICYmIChoYy0+eGZlcl9sZW4gPiBoYy0+bWF4X3BhY2tldCkpCisgICAgICAgIHsKKyAgICAgICAgICBoYy0+WGZlclNpemUgPSAodWludDMyX3QpbnVtX3BhY2tldHMgKiBoYy0+bWF4X3BhY2tldDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBoYy0+WGZlclNpemUgPSBoYy0+eGZlcl9sZW47CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CiAgIH0KICAgZWxzZQogICB7Ci0gICAgaGMtPlhmZXJTaXplID0gaGMtPnhmZXJfbGVuOworICAgIC8qIENvbXB1dGUgdGhlIGV4cGVjdGVkIG51bWJlciBvZiBwYWNrZXRzIGFzc29jaWF0ZWQgdG8gdGhlIHRyYW5zZmVyICovCisgICAgaWYgKGhjLT54ZmVyX2xlbiA+IDBVKQorICAgIHsKKyAgICAgIG51bV9wYWNrZXRzID0gKHVpbnQxNl90KSgoaGMtPnhmZXJfbGVuICsgaGMtPm1heF9wYWNrZXQgLSAxVSkgLyBoYy0+bWF4X3BhY2tldCk7CisKKyAgICAgIGlmIChudW1fcGFja2V0cyA+IG1heF9oY19wa3RfY291bnQpCisgICAgICB7CisgICAgICAgIG51bV9wYWNrZXRzID0gbWF4X2hjX3BrdF9jb3VudDsKKyAgICAgICAgaGMtPlhmZXJTaXplID0gKHVpbnQzMl90KW51bV9wYWNrZXRzICogaGMtPm1heF9wYWNrZXQ7CisgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBudW1fcGFja2V0cyA9IDFVOworICAgIH0KKworICAgIC8qCisgICAgKiBGb3IgSU4gY2hhbm5lbCBIQ1RTSVouWGZlclNpemUgaXMgZXhwZWN0ZWQgdG8gYmUgYW4gaW50ZWdlciBtdWx0aXBsZSBvZgorICAgICogbWF4X3BhY2tldCBzaXplLgorICAgICovCisgICAgaWYgKGhjLT5lcF9pc19pbiAhPSAwVSkKKyAgICB7CisgICAgICBoYy0+WGZlclNpemUgPSAodWludDMyX3QpbnVtX3BhY2tldHMgKiBoYy0+bWF4X3BhY2tldDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIGhjLT5YZmVyU2l6ZSA9IGhjLT54ZmVyX2xlbjsKKyAgICB9CiAgIH0KIAogICAvKiBJbml0aWFsaXplIHRoZSBIQ1RTSVpuIHJlZ2lzdGVyICovCkBAIC0xNzkwLDYgKzE5MDQsNjUgQEAKICAgVVNCeF9IQyhjaF9udW0pLT5IQ0NIQVIgJj0gflVTQl9PVEdfSENDSEFSX09EREZSTTsKICAgVVNCeF9IQyhjaF9udW0pLT5IQ0NIQVIgfD0gKHVpbnQzMl90KWlzX29kZGZyYW1lIDw8IDI5OwogCisgIGlmIChoYy0+ZG9fc3NwbGl0ID09IDFVKQorICB7CisgICAgLyogU2V0IEh1YiBzdGFydCBTcGxpdCB0cmFuc2FjdGlvbiAqLworICAgIFVTQnhfSEMoKHVpbnQzMl90KWNoX251bSktPkhDU1BMVCA9ICgodWludDMyX3QpaGMtPmh1Yl9hZGRyIDw8IFVTQl9PVEdfSENTUExUX0hVQkFERFJfUG9zKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KWhjLT5odWJfcG9ydF9uYnIgfCBVU0JfT1RHX0hDU1BMVF9TUExJVEVOOworCisgICAgLyogdW5tYXNrIGFjayAmIG55ZXQgZm9yIElOL09VVCB0cmFuc2FjdGlvbnMgKi8KKyAgICBVU0J4X0hDKCh1aW50MzJfdCljaF9udW0pLT5IQ0lOVE1TSyB8PSAoVVNCX09UR19IQ0lOVE1TS19BQ0tNIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNCX09UR19IQ0lOVE1TS19OWUVUKTsKKworICAgIGlmICgoaGMtPmRvX2NzcGxpdCA9PSAxVSkgJiYgKGhjLT5lcF9pc19pbiA9PSAwVSkpCisgICAgeworICAgICAgVVNCeF9IQygodWludDMyX3QpY2hfbnVtKS0+SENTUExUIHw9IFVTQl9PVEdfSENTUExUX0NPTVBMU1BMVDsKKyAgICAgIFVTQnhfSEMoKHVpbnQzMl90KWNoX251bSktPkhDSU5UTVNLIHw9IFVTQl9PVEdfSENJTlRNU0tfTllFVDsKKyAgICB9CisKKyAgICBpZiAoKChoYy0+ZXBfdHlwZSA9PSBFUF9UWVBFX0lTT0MpIHx8IChoYy0+ZXBfdHlwZSA9PSBFUF9UWVBFX0lOVFIpKSAmJgorICAgICAgICAoaGMtPmRvX2NzcGxpdCA9PSAxVSkgJiYgKGhjLT5lcF9pc19pbiA9PSAxVSkpCisgICAgeworICAgICAgVVNCeF9IQygodWludDMyX3QpY2hfbnVtKS0+SENTUExUIHw9IFVTQl9PVEdfSENTUExUX0NPTVBMU1BMVDsKKyAgICB9CisKKyAgICAvKiBQb3NpdGlvbiBtYW5hZ2VtZW50IGZvciBpc28gb3V0IHRyYW5zYWN0aW9uIG9uIHNwbGl0IG1vZGUgKi8KKyAgICBpZiAoKGhjLT5lcF90eXBlID09IEVQX1RZUEVfSVNPQykgJiYgKGhjLT5lcF9pc19pbiA9PSAwVSkpCisgICAgeworICAgICAgLyogU2V0IGRhdGEgcGF5bG9hZCBwb3NpdGlvbiAqLworICAgICAgc3dpdGNoIChoYy0+aXNvX3NwbHRfeGFjdFBvcykKKyAgICAgIHsKKyAgICAgICAgY2FzZSBIQ1NQTFRfQkVHSU46CisgICAgICAgICAgLyogRmlyc3QgZGF0YSBwYXlsb2FkIGZvciBPVVQgVHJhbnNhY3Rpb24gKi8KKyAgICAgICAgICBVU0J4X0hDKCh1aW50MzJfdCljaF9udW0pLT5IQ1NQTFQgfD0gVVNCX09UR19IQ1NQTFRfWEFDVFBPU18xOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgSENTUExUX01JRERMRToKKyAgICAgICAgICAvKiBNaWRkbGUgZGF0YSBwYXlsb2FkIGZvciBPVVQgVHJhbnNhY3Rpb24gKi8KKyAgICAgICAgICBVU0J4X0hDKCh1aW50MzJfdCljaF9udW0pLT5IQ1NQTFQgfD0gVVNCX09UR19IQ1NQTFRfWEFDVFBPU19Qb3M7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBIQ1NQTFRfRU5EOgorICAgICAgICAgIC8qIEVuZCBkYXRhIHBheWxvYWQgZm9yIE9VVCBUcmFuc2FjdGlvbiAqLworICAgICAgICAgIFVTQnhfSEMoKHVpbnQzMl90KWNoX251bSktPkhDU1BMVCB8PSBVU0JfT1RHX0hDU1BMVF9YQUNUUE9TXzA7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBIQ1NQTFRfRlVMTDoKKyAgICAgICAgICAvKiBFbnRpcmUgZGF0YSBwYXlsb2FkIGZvciBPVVQgVHJhbnNhY3Rpb24gKi8KKyAgICAgICAgICBVU0J4X0hDKCh1aW50MzJfdCljaF9udW0pLT5IQ1NQTFQgfD0gVVNCX09UR19IQ1NQTFRfWEFDVFBPUzsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgfQorICBlbHNlCisgIHsKKyAgICAvKiBDbGVhciBIdWIgU3RhcnQgU3BsaXQgdHJhbnNhY3Rpb24gKi8KKyAgICBVU0J4X0hDKCh1aW50MzJfdCljaF9udW0pLT5IQ1NQTFQgPSAwVTsKKyAgfQorCiAgIC8qIFNldCBob3N0IGNoYW5uZWwgZW5hYmxlICovCiAgIHRtcHJlZyA9IFVTQnhfSEMoY2hfbnVtKS0+SENDSEFSOwogICB0bXByZWcgJj0gflVTQl9PVEdfSENDSEFSX0NIRElTOwpAQCAtMTgxMSw3ICsxOTg0LDcgQEAKICAgICByZXR1cm4gSEFMX09LOwogICB9CiAKLSAgaWYgKChoYy0+ZXBfaXNfaW4gPT0gMFUpICYmIChoYy0+eGZlcl9sZW4gPiAwVSkpCisgIGlmICgoaGMtPmVwX2lzX2luID09IDBVKSAmJiAoaGMtPnhmZXJfbGVuID4gMFUpICYmIChoYy0+ZG9fY3NwbGl0ID09IDBVKSkKICAgewogICAgIHN3aXRjaCAoaGMtPmVwX3R5cGUpCiAgICAgewpAQCAtMTg3NSwxMiArMjA0OCwxNyBAQAogewogICB1aW50MzJfdCBVU0J4X0JBU0UgPSAodWludDMyX3QpVVNCeDsKICAgdWludDMyX3QgaGNudW0gPSAodWludDMyX3QpaGNfbnVtOwotICB1aW50MzJfdCBjb3VudCA9IDBVOworICBfX0lPIHVpbnQzMl90IGNvdW50ID0gMFU7CiAgIHVpbnQzMl90IEhjRXBUeXBlID0gKFVTQnhfSEMoaGNudW0pLT5IQ0NIQVIgJiBVU0JfT1RHX0hDQ0hBUl9FUFRZUCkgPj4gMTg7CiAgIHVpbnQzMl90IENoYW5uZWxFbmEgPSAoVVNCeF9IQyhoY251bSktPkhDQ0hBUiAmIFVTQl9PVEdfSENDSEFSX0NIRU5BKSA+PiAzMTsKKyAgdWludDMyX3QgU3BsaXRFbmEgPSAoVVNCeF9IQyhoY251bSktPkhDU1BMVCAmIFVTQl9PVEdfSENTUExUX1NQTElURU4pID4+IDMxOwogCi0gIGlmICgoKFVTQngtPkdBSEJDRkcgJiBVU0JfT1RHX0dBSEJDRkdfRE1BRU4pID09IFVTQl9PVEdfR0FIQkNGR19ETUFFTikgJiYKLSAgICAgIChDaGFubmVsRW5hID09IDBVKSkKKyAgLyogSW4gYnVmZmVyIERNQSwgQ2hhbm5lbCBkaXNhYmxlIG11c3Qgbm90IGJlIHByb2dyYW1tZWQgZm9yIG5vbi1zcGxpdCBwZXJpb2RpYyBjaGFubmVscy4KKyAgICAgQXQgdGhlIGVuZCBvZiB0aGUgbmV4dCB1ZnJhbWUvZnJhbWUgKGluIHRoZSB3b3JzdCBjYXNlKSwgdGhlIGNvcmUgZ2VuZXJhdGVzIGEgY2hhbm5lbCBoYWx0ZWQKKyAgICAgYW5kIGRpc2FibGVzIHRoZSBjaGFubmVsIGF1dG9tYXRpY2FsbHkuICovCisKKyAgaWYgKCgoKFVTQngtPkdBSEJDRkcgJiBVU0JfT1RHX0dBSEJDRkdfRE1BRU4pID09IFVTQl9PVEdfR0FIQkNGR19ETUFFTikgJiYgKFNwbGl0RW5hID09IDBVKSkgJiYKKyAgICAgICgoQ2hhbm5lbEVuYSA9PSAwVSkgfHwgKCgoSGNFcFR5cGUgPT0gSENDSEFSX0lTT0MpIHx8IChIY0VwVHlwZSA9PSBIQ0NIQVJfSU5UUikpKSkpCiAgIHsKICAgICByZXR1cm4gSEFMX09LOwogICB9CkBAIC0xODk2LDEwICsyMDc0LDExIEBACiAgICAgICB7CiAgICAgICAgIFVTQnhfSEMoaGNudW0pLT5IQ0NIQVIgJj0gflVTQl9PVEdfSENDSEFSX0NIRU5BOwogICAgICAgICBVU0J4X0hDKGhjbnVtKS0+SENDSEFSIHw9IFVTQl9PVEdfSENDSEFSX0NIRU5BOwotICAgICAgICBVU0J4X0hDKGhjbnVtKS0+SENDSEFSICY9IH5VU0JfT1RHX0hDQ0hBUl9FUERJUjsKICAgICAgICAgZG8KICAgICAgICAgewotICAgICAgICAgIGlmICgrK2NvdW50ID4gMTAwMFUpCisgICAgICAgICAgY291bnQrKzsKKworICAgICAgICAgIGlmIChjb3VudCA+IDEwMDBVKQogICAgICAgICAgIHsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIH0KQEAgLTE5MjMsMTAgKzIxMDIsMTEgQEAKICAgICB7CiAgICAgICBVU0J4X0hDKGhjbnVtKS0+SENDSEFSICY9IH5VU0JfT1RHX0hDQ0hBUl9DSEVOQTsKICAgICAgIFVTQnhfSEMoaGNudW0pLT5IQ0NIQVIgfD0gVVNCX09UR19IQ0NIQVJfQ0hFTkE7Ci0gICAgICBVU0J4X0hDKGhjbnVtKS0+SENDSEFSICY9IH5VU0JfT1RHX0hDQ0hBUl9FUERJUjsKICAgICAgIGRvCiAgICAgICB7Ci0gICAgICAgIGlmICgrK2NvdW50ID4gMTAwMFUpCisgICAgICAgIGNvdW50Kys7CisKKyAgICAgICAgaWYgKGNvdW50ID4gMTAwMFUpCiAgICAgICAgIHsKICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTk3NCwxNiArMjE1NCwyNCBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgVVNCX1N0b3BIb3N0KFVTQl9PVEdfR2xvYmFsVHlwZURlZiAqVVNCeCkKIHsKKyAgSEFMX1N0YXR1c1R5cGVEZWYgcmV0ID0gSEFMX09LOwogICB1aW50MzJfdCBVU0J4X0JBU0UgPSAodWludDMyX3QpVVNCeDsKLSAgdWludDMyX3QgY291bnQgPSAwVTsKKyAgX19JTyB1aW50MzJfdCBjb3VudCA9IDBVOwogICB1aW50MzJfdCB2YWx1ZTsKICAgdWludDMyX3QgaTsKIAogICAodm9pZClVU0JfRGlzYWJsZUdsb2JhbEludChVU0J4KTsKIAotICAvKiBGbHVzaCBGSUZPICovCi0gICh2b2lkKVVTQl9GbHVzaFR4RmlmbyhVU0J4LCAweDEwVSk7Ci0gICh2b2lkKVVTQl9GbHVzaFJ4RmlmbyhVU0J4KTsKKyAgLyogRmx1c2ggVVNCIEZJRk8gKi8KKyAgaWYgKFVTQl9GbHVzaFR4RmlmbyhVU0J4LCAweDEwVSkgIT0gSEFMX09LKSAvKiBhbGwgVHggRklGT3MgKi8KKyAgeworICAgIHJldCA9IEhBTF9FUlJPUjsKKyAgfQorCisgIGlmIChVU0JfRmx1c2hSeEZpZm8oVVNCeCkgIT0gSEFMX09LKQorICB7CisgICAgcmV0ID0gSEFMX0VSUk9SOworICB9CiAKICAgLyogRmx1c2ggb3V0IGFueSBsZWZ0b3ZlciBxdWV1ZWQgcmVxdWVzdHMuICovCiAgIGZvciAoaSA9IDBVOyBpIDw9IDE1VTsgaSsrKQpAQCAtMjAwNiw3ICsyMTk0LDkgQEAKIAogICAgIGRvCiAgICAgewotICAgICAgaWYgKCsrY291bnQgPiAxMDAwVSkKKyAgICAgIGNvdW50Kys7CisKKyAgICAgIGlmIChjb3VudCA+IDEwMDBVKQogICAgICAgewogICAgICAgICBicmVhazsKICAgICAgIH0KQEAgLTIwMTQsMTAgKzIyMDQsMTIgQEAKICAgfQogCiAgIC8qIENsZWFyIGFueSBwZW5kaW5nIEhvc3QgaW50ZXJydXB0cyAqLwotICBVU0J4X0hPU1QtPkhBSU5UID0gMHhGRkZGRkZGRlU7Ci0gIFVTQngtPkdJTlRTVFMgPSAweEZGRkZGRkZGVTsKKyAgVVNCeF9IT1NULT5IQUlOVCA9IENMRUFSX0lOVEVSUlVQVF9NQVNLOworICBVU0J4LT5HSU5UU1RTID0gQ0xFQVJfSU5URVJSVVBUX01BU0s7CiAKLSAgcmV0dXJuIEhBTF9PSzsKKyAgKHZvaWQpVVNCX0VuYWJsZUdsb2JhbEludChVU0J4KTsKKworICByZXR1cm4gcmV0OwogfQogCiAvKioKQEAgLTIwNTQsNyArMjI0Niw2IEBACiB9CiAjZW5kaWYgLyogZGVmaW5lZCAoVVNCX09UR19GUykgfHwgZGVmaW5lZCAoVVNCX09UR19IUykgKi8KIAotCiAvKioKICAgKiBAfQogICAqLwpkaWZmIC0tZ2l0IGEvX2h0bXJlc2MvZmF2aWNvbi5wbmcgYi9faHRtcmVzYy9mYXZpY29uLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjcxM2VlCi0tLSAvZGV2L251bGwKKysrIGIvX2h0bXJlc2MvZmF2aWNvbi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvX2h0bXJlc2MvbWluaS1zdC5jc3MgYi9faHRtcmVzYy9taW5pLXN0XzIwMjAuY3NzCnNpbWlsYXJpdHkgaW5kZXggNzclCnJlbmFtZSBmcm9tIF9odG1yZXNjL21pbmktc3QuY3NzCnJlbmFtZSB0byBfaHRtcmVzYy9taW5pLXN0XzIwMjAuY3NzCmluZGV4IDcxZmJjMTQuLjNkOWU4MWEgMTAwNjQ0Ci0tLSBhL19odG1yZXNjL21pbmktc3QuY3NzCisrKyBiL19odG1yZXNjL21pbmktc3RfMjAyMC5jc3MKQEAgLTEsMzkgKzEsMzkgQEAKIEBjaGFyc2V0ICJVVEYtOCI7CiAvKgotICBGbGF2b3IgbmFtZTogRGVmYXVsdCAobWluaS1kZWZhdWx0KQotICBBdXRob3I6IEFuZ2Vsb3MgQ2hhbGFyaXMgKGNoYWxhcmFuZ2Vsb0BnbWFpbC5jb20pCi0gIE1haW50YWluZXJzOiBBbmdlbG9zIENoYWxhcmlzCi0gIG1pbmkuY3NzIHZlcnNpb246IHYzLjAuMC1hbHBoYS4zCisgIEZsYXZvciBuYW1lOiBDdXN0b20gKG1pbmktY3VzdG9tKQorICBHZW5lcmF0ZWQgb25saW5lIC0gaHR0cHM6Ly9taW5pY3NzLm9yZy9mbGF2b3JzCisgIG1pbmkuY3NzIHZlcnNpb246IHYzLjAuMQogKi8KIC8qCiAgIEJyb3dzZXJzIHJlc2V0cyBhbmQgYmFzZSB0eXBvZ3JhcGh5LgogKi8KIC8qIENvcmUgbW9kdWxlIENTUyB2YXJpYWJsZSBkZWZpbml0aW9ucyAqLwogOnJvb3QgewotICAtLWZvcmUtY29sb3I6ICMxMTE7Ci0gIC0tc2Vjb25kYXJ5LWZvcmUtY29sb3I6ICM0NDQ7Ci0gIC0tYmFjay1jb2xvcjogI2Y4ZjhmODsKLSAgLS1zZWNvbmRhcnktYmFjay1jb2xvcjogI2YwZjBmMDsKLSAgLS1ibG9ja3F1b3RlLWNvbG9yOiAjZjU3YzAwOwotICAtLXByZS1jb2xvcjogIzE1NjVjMDsKLSAgLS1ib3JkZXItY29sb3I6ICNhYWE7Ci0gIC0tc2Vjb25kYXJ5LWJvcmRlci1jb2xvcjogI2RkZDsKLSAgLS1oZWFkaW5nLXJhdGlvOiAxLjE5OworICAtLWZvcmUtY29sb3I6ICMwMzIzNGI7CisgIC0tc2Vjb25kYXJ5LWZvcmUtY29sb3I6ICMwMzIzNGI7CisgIC0tYmFjay1jb2xvcjogI2ZmZmZmZjsKKyAgLS1zZWNvbmRhcnktYmFjay1jb2xvcjogI2ZmZmZmZjsKKyAgLS1ibG9ja3F1b3RlLWNvbG9yOiAjZTYwMDdlOworICAtLXByZS1jb2xvcjogI2U2MDA3ZTsKKyAgLS1ib3JkZXItY29sb3I6ICMzY2I0ZTY7CisgIC0tc2Vjb25kYXJ5LWJvcmRlci1jb2xvcjogIzNjYjRlNjsKKyAgLS1oZWFkaW5nLXJhdGlvOiAxLjI7CiAgIC0tdW5pdmVyc2FsLW1hcmdpbjogMC41cmVtOwotICAtLXVuaXZlcnNhbC1wYWRkaW5nOiAwLjEyNXJlbTsKLSAgLS11bml2ZXJzYWwtYm9yZGVyLXJhZGl1czogMC4xMjVyZW07Ci0gIC0tYS1saW5rLWNvbG9yOiAjMDI3N2JkOwotICAtLWEtdmlzaXRlZC1jb2xvcjogIzAxNTc5YjsgfQorICAtLXVuaXZlcnNhbC1wYWRkaW5nOiAwLjI1cmVtOworICAtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzOiAwLjA3NXJlbTsKKyAgLS1iYWNrZ3JvdW5kLW1hcmdpbjogMS41JTsKKyAgLS1hLWxpbmstY29sb3I6ICMzY2I0ZTY7CisgIC0tYS12aXNpdGVkLWNvbG9yOiAjOGMwMDc4OyB9CiAKIGh0bWwgewotICBmb250LXNpemU6IDE0cHg7IH0KKyAgZm9udC1zaXplOiAxMy41cHg7IH0KIAogYSwgYiwgZGVsLCBlbSwgaSwgaW5zLCBxLCBzcGFuLCBzdHJvbmcsIHUgewogICBmb250LXNpemU6IDFlbTsgfQogCiBodG1sLCAqIHsKLSAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgIlNlZ29lIFVJIiwgUm9ib3RvLCBVYnVudHUsICJIZWx2ZXRpY2EgTmV1ZSIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsKLSAgbGluZS1oZWlnaHQ6IDEuNDsKKyAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgSGVsdmV0aWNhLCBhcmlhbCwgc2Fucy1zZXJpZjsKKyAgbGluZS1oZWlnaHQ6IDEuMjU7CiAgIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgfQogCiAqIHsKQEAgLTQyLDcgKzQyLDEwIEBACiBib2R5IHsKICAgbWFyZ2luOiAwOwogICBjb2xvcjogdmFyKC0tZm9yZS1jb2xvcik7Ci0gIGJhY2tncm91bmQ6IHZhcigtLWJhY2stY29sb3IpOyB9CisgIEBiYWNrZ3JvdW5kOiB2YXIoLS1iYWNrLWNvbG9yKTsKKyAgYmFja2dyb3VuZDogdmFyKC0tYmFjay1jb2xvcikgbGluZWFyLWdyYWRpZW50KCNmZmQyMDAsICNmZmQyMDApIHJlcGVhdC15IGxlZnQgdG9wOworICBiYWNrZ3JvdW5kLXNpemU6IHZhcigtLWJhY2tncm91bmQtbWFyZ2luKTsKKyAgfQogCiBkZXRhaWxzIHsKICAgZGlzcGxheTogYmxvY2s7IH0KQEAgLTYyLDkgKzY1LDkgQEAKICAgaGVpZ2h0OiBhdXRvOyB9CiAKIGgxLCBoMiwgaDMsIGg0LCBoNSwgaDYgewotICBsaW5lLWhlaWdodDogMS4yOworICBsaW5lLWhlaWdodDogMS4yNTsKICAgbWFyZ2luOiBjYWxjKDEuNSAqIHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pKSB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKTsKLSAgZm9udC13ZWlnaHQ6IDUwMDsgfQorICBmb250LXdlaWdodDogNDAwOyB9CiAgIGgxIHNtYWxsLCBoMiBzbWFsbCwgaDMgc21hbGwsIGg0IHNtYWxsLCBoNSBzbWFsbCwgaDYgc21hbGwgewogICAgIGNvbG9yOiB2YXIoLS1zZWNvbmRhcnktZm9yZS1jb2xvcik7CiAgICAgZGlzcGxheTogYmxvY2s7CkBAIC03NCwyMSArNzcsMTUgQEAKICAgZm9udC1zaXplOiBjYWxjKDFyZW0gKiB2YXIoLS1oZWFkaW5nLXJhdGlvKSAqIHZhcigtLWhlYWRpbmctcmF0aW8pICogdmFyKC0taGVhZGluZy1yYXRpbykpOyB9CiAKIGgyIHsKLSAgZm9udC1zaXplOiBjYWxjKDFyZW0gKiB2YXIoLS1oZWFkaW5nLXJhdGlvKSAqIHZhcigtLWhlYWRpbmctcmF0aW8pOyApOwotICBiYWNrZ3JvdW5kOiB2YXIoLS1tYXJrLWJhY2stY29sb3IpOwotICBmb250LXdlaWdodDogNjAwOwotICBwYWRkaW5nOiAwLjFlbSAwLjVlbSAwLjJlbSAwLjVlbTsKLSAgY29sb3I6IHZhcigtLW1hcmstZm9yZS1jb2xvcik7IH0KLQorICBmb250LXNpemU6IGNhbGMoMXJlbSAqIHZhcigtLWhlYWRpbmctcmF0aW8pICogdmFyKC0taGVhZGluZy1yYXRpbykgKTsKKyAgYm9yZGVyLXN0eWxlOiBub25lIG5vbmUgc29saWQgbm9uZSA7IAorICBib3JkZXItd2lkdGg6IHRoaW47CisgIGJvcmRlci1jb2xvcjogdmFyKC0tYm9yZGVyLWNvbG9yKTsgfQogaDMgewotICBmb250LXNpemU6IGNhbGMoMXJlbSAqIHZhcigtLWhlYWRpbmctcmF0aW8pKTsKLSAgcGFkZGluZy1sZWZ0OiBjYWxjKDIgKiB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKSk7IAotICAvKiBiYWNrZ3JvdW5kOiB2YXIoLS1ib3JkZXItY29sb3IpOyAqLwotICAgIH0KKyAgZm9udC1zaXplOiBjYWxjKDFyZW0gKiB2YXIoLS1oZWFkaW5nLXJhdGlvKSApOyB9CiAKIGg0IHsKLSAgZm9udC1zaXplOiAxcmVtOyk7Ci0gIHBhZGRpbmctbGVmdDogY2FsYyg0ICogdmFyKC0tdW5pdmVyc2FsLW1hcmdpbikpOyAgfQorICBmb250LXNpemU6IGNhbGMoMXJlbSAqIHZhcigtLWhlYWRpbmctcmF0aW8pKTsgfQogCiBoNSB7CiAgIGZvbnQtc2l6ZTogMXJlbTsgfQpAQCAtMTAxLDcgKzk4LDcgQEAKIAogb2wsIHVsIHsKICAgbWFyZ2luOiB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKTsKLSAgcGFkZGluZy1sZWZ0OiBjYWxjKDYgKiB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKSk7IH0KKyAgcGFkZGluZy1sZWZ0OiBjYWxjKDMgKiB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKSk7IH0KIAogYiwgc3Ryb25nIHsKICAgZm9udC13ZWlnaHQ6IDcwMDsgfQpAQCAtMTExLDcgKzEwOCw3IEBACiAgIGJvcmRlcjogMDsKICAgbGluZS1oZWlnaHQ6IDEuMjVlbTsKICAgbWFyZ2luOiB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKTsKLSAgaGVpZ2h0OiAwLjA2MjVyZW07CisgIGhlaWdodDogMC4wNzE0Mjg1NzE0cmVtOwogICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHRyYW5zcGFyZW50LCB2YXIoLS1ib3JkZXItY29sb3IpIDIwJSwgdmFyKC0tYm9yZGVyLWNvbG9yKSA4MCUsIHRyYW5zcGFyZW50KTsgfQogCiBibG9ja3F1b3RlIHsKQEAgLTEyMSwxNiArMTE4LDE2IEBACiAgIGNvbG9yOiB2YXIoLS1zZWNvbmRhcnktZm9yZS1jb2xvcik7CiAgIG1hcmdpbjogdmFyKC0tdW5pdmVyc2FsLW1hcmdpbik7CiAgIHBhZGRpbmc6IGNhbGMoMyAqIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSk7Ci0gIGJvcmRlcjogMC4wNjI1cmVtIHNvbGlkIHZhcigtLXNlY29uZGFyeS1ib3JkZXItY29sb3IpOwotICBib3JkZXItbGVmdDogMC4zNzVyZW0gc29saWQgdmFyKC0tYmxvY2txdW90ZS1jb2xvcik7CisgIGJvcmRlcjogMC4wNzE0Mjg1NzE0cmVtIHNvbGlkIHZhcigtLXNlY29uZGFyeS1ib3JkZXItY29sb3IpOworICBib3JkZXItbGVmdDogMC4zcmVtIHNvbGlkIHZhcigtLWJsb2NrcXVvdGUtY29sb3IpOwogICBib3JkZXItcmFkaXVzOiAwIHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKSB2YXIoLS11bml2ZXJzYWwtYm9yZGVyLXJhZGl1cykgMDsgfQogICBibG9ja3F1b3RlOmJlZm9yZSB7CiAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgIHRvcDogY2FsYygwcmVtIC0gdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpKTsKICAgICBsZWZ0OiAwOwogICAgIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmOwotICAgIGZvbnQtc2l6ZTogM3JlbTsKLSAgICBmb250LXdlaWdodDogNzAwOworICAgIGZvbnQtc2l6ZTogMnJlbTsKKyAgICBmb250LXdlaWdodDogODAwOwogICAgIGNvbnRlbnQ6ICJcMjAxYyI7CiAgICAgY29sb3I6IHZhcigtLWJsb2NrcXVvdGUtY29sb3IpOyB9CiAgIGJsb2NrcXVvdGVbY2l0ZV06YWZ0ZXIgewpAQCAtMTYwLDggKzE1Nyw4IEBACiAgIGJhY2tncm91bmQ6IHZhcigtLXNlY29uZGFyeS1iYWNrLWNvbG9yKTsKICAgcGFkZGluZzogY2FsYygxLjUgKiB2YXIoLS11bml2ZXJzYWwtcGFkZGluZykpOwogICBtYXJnaW46IHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pOwotICBib3JkZXI6IDAuMDYyNXJlbSBzb2xpZCB2YXIoLS1zZWNvbmRhcnktYm9yZGVyLWNvbG9yKTsKLSAgYm9yZGVyLWxlZnQ6IDAuMjVyZW0gc29saWQgdmFyKC0tcHJlLWNvbG9yKTsKKyAgYm9yZGVyOiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tc2Vjb25kYXJ5LWJvcmRlci1jb2xvcik7CisgIGJvcmRlci1sZWZ0OiAwLjI4NTcxNDI4NTdyZW0gc29saWQgdmFyKC0tcHJlLWNvbG9yKTsKICAgYm9yZGVyLXJhZGl1czogMCB2YXIoLS11bml2ZXJzYWwtYm9yZGVyLXJhZGl1cykgdmFyKC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXMpIDA7IH0KIAogc3VwLCBzdWIsIGNvZGUsIGtiZCB7CkBAIC0yMDQsNyArMjAxLDggQEAKICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgZGlzcGxheTogZmxleDsKICAgZmxleDogMCAxIGF1dG87Ci0gIGZsZXgtZmxvdzogcm93IHdyYXA7IH0KKyAgZmxleC1mbG93OiByb3cgd3JhcDsKKyAgbWFyZ2luOiAwIDAgMCB2YXIoLS1iYWNrZ3JvdW5kLW1hcmdpbik7IH0KIAogLmNvbC1zbSwKIFtjbGFzc149J2NvbC1zbS0nXSwKQEAgLTU2NSw5ICs1NjMsOSBAQAogICAgIG9yZGVyOiA5OTk7IH0gfQogLyogQ2FyZCBjb21wb25lbnQgQ1NTIHZhcmlhYmxlIGRlZmluaXRpb25zICovCiA6cm9vdCB7Ci0gIC0tY2FyZC1iYWNrLWNvbG9yOiAjZjhmOGY4OwotICAtLWNhcmQtZm9yZS1jb2xvcjogIzExMTsKLSAgLS1jYXJkLWJvcmRlci1jb2xvcjogI2RkZDsgfQorICAtLWNhcmQtYmFjay1jb2xvcjogIzNjYjRlNjsKKyAgLS1jYXJkLWZvcmUtY29sb3I6ICMwMzIzNGI7CisgIC0tY2FyZC1ib3JkZXItY29sb3I6ICMwMzIzNGI7IH0KIAogLmNhcmQgewogICBkaXNwbGF5OiBmbGV4OwpAQCAtNTc4LDcgKzU3Niw3IEBACiAgIHdpZHRoOiAxMDAlOwogICBiYWNrZ3JvdW5kOiB2YXIoLS1jYXJkLWJhY2stY29sb3IpOwogICBjb2xvcjogdmFyKC0tY2FyZC1mb3JlLWNvbG9yKTsKLSAgYm9yZGVyOiAwLjA2MjVyZW0gc29saWQgdmFyKC0tY2FyZC1ib3JkZXItY29sb3IpOworICBib3JkZXI6IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS1jYXJkLWJvcmRlci1jb2xvcik7CiAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKTsKICAgbWFyZ2luOiB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKTsKICAgb3ZlcmZsb3c6IGhpZGRlbjsgfQpAQCAtNTkyLDcgKzU5MCw3IEBACiAgICAgbWFyZ2luOiAwOwogICAgIGJvcmRlcjogMDsKICAgICBib3JkZXItcmFkaXVzOiAwOwotICAgIGJvcmRlci1ib3R0b206IDAuMDYyNXJlbSBzb2xpZCB2YXIoLS1jYXJkLWJvcmRlci1jb2xvcik7CisgICAgYm9yZGVyLWJvdHRvbTogMC4wNzE0Mjg1NzE0cmVtIHNvbGlkIHZhcigtLWNhcmQtYm9yZGVyLWNvbG9yKTsKICAgICBwYWRkaW5nOiB2YXIoLS11bml2ZXJzYWwtcGFkZGluZyk7CiAgICAgd2lkdGg6IDEwMCU7IH0KICAgICAuY2FyZCA+IC5zZWN0aW9uZS5tZWRpYSB7CkBAIC02MTcsMTcgKzYxNSwxOCBAQAogICB3aWR0aDogYXV0bzsgfQogCiAuY2FyZC53YXJuaW5nIHsKLS8qICAtLWNhcmQtYmFjay1jb2xvcjogI2ZmY2EyODsgKi8KICAgLS1jYXJkLWJhY2stY29sb3I6ICNlNWI4Yjc7Ci0gIC0tY2FyZC1ib3JkZXItY29sb3I6ICNlOGI4MjU7IH0KKyAgLS1jYXJkLWZvcmUtY29sb3I6ICMzYjIzNGI7CisgIC0tY2FyZC1ib3JkZXItY29sb3I6ICM4YzAwNzg7IH0KIAogLmNhcmQuZXJyb3IgewotICAtLWNhcmQtYmFjay1jb2xvcjogI2I3MWMxYzsKLSAgLS1jYXJkLWZvcmUtY29sb3I6ICNmOGY4Zjg7Ci0gIC0tY2FyZC1ib3JkZXItY29sb3I6ICNhNzFhMWE7IH0KKyAgLS1jYXJkLWJhY2stY29sb3I6ICM0NjQ2NTA7CisgIC0tY2FyZC1mb3JlLWNvbG9yOiAjZmZmZmZmOworICAtLWNhcmQtYm9yZGVyLWNvbG9yOiAjOGMwMDc4OyB9CiAKIC5jYXJkID4gLnNlY3Rpb25lLmRhcmsgewotICAtLWNhcmQtYmFjay1jb2xvcjogI2UwZTBlMDsgfQorICAtLWNhcmQtYmFjay1jb2xvcjogIzNiMjM0YjsKKyAgLS1jYXJkLWZvcmUtY29sb3I6ICNmZmZmZmY7IH0KIAogLmNhcmQgPiAuc2VjdGlvbmUuZG91YmxlLXBhZGRlZCB7CiAgIHBhZGRpbmc6IGNhbGMoMS41ICogdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpKTsgfQpAQCAtNjM3LDEyICs2MzYsMTIgQEAKICovCiAvKiBJbnB1dF9jb250cm9sIG1vZHVsZSBDU1MgdmFyaWFibGUgZGVmaW5pdGlvbnMgKi8KIDpyb290IHsKLSAgLS1mb3JtLWJhY2stY29sb3I6ICNmMGYwZjA7Ci0gIC0tZm9ybS1mb3JlLWNvbG9yOiAjMTExOwotICAtLWZvcm0tYm9yZGVyLWNvbG9yOiAjZGRkOwotICAtLWlucHV0LWJhY2stY29sb3I6ICNmOGY4Zjg7Ci0gIC0taW5wdXQtZm9yZS1jb2xvcjogIzExMTsKLSAgLS1pbnB1dC1ib3JkZXItY29sb3I6ICNkZGQ7CisgIC0tZm9ybS1iYWNrLWNvbG9yOiAjZmZlOTdmOworICAtLWZvcm0tZm9yZS1jb2xvcjogIzAzMjM0YjsKKyAgLS1mb3JtLWJvcmRlci1jb2xvcjogIzNjYjRlNjsKKyAgLS1pbnB1dC1iYWNrLWNvbG9yOiAjZmZmZmZmOworICAtLWlucHV0LWZvcmUtY29sb3I6ICMwMzIzNGI7CisgIC0taW5wdXQtYm9yZGVyLWNvbG9yOiAjM2NiNGU2OwogICAtLWlucHV0LWZvY3VzLWNvbG9yOiAjMDI4OGQxOwogICAtLWlucHV0LWludmFsaWQtY29sb3I6ICNkMzJmMmY7CiAgIC0tYnV0dG9uLWJhY2stY29sb3I6ICNlMmUyZTI7CkBAIC02NTUsMTMgKzY1NCwxMyBAQAogZm9ybSB7CiAgIGJhY2tncm91bmQ6IHZhcigtLWZvcm0tYmFjay1jb2xvcik7CiAgIGNvbG9yOiB2YXIoLS1mb3JtLWZvcmUtY29sb3IpOwotICBib3JkZXI6IDAuMDYyNXJlbSBzb2xpZCB2YXIoLS1mb3JtLWJvcmRlci1jb2xvcik7CisgIGJvcmRlcjogMC4wNzE0Mjg1NzE0cmVtIHNvbGlkIHZhcigtLWZvcm0tYm9yZGVyLWNvbG9yKTsKICAgYm9yZGVyLXJhZGl1czogdmFyKC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXMpOwogICBtYXJnaW46IHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pOwogICBwYWRkaW5nOiBjYWxjKDIgKiB2YXIoLS11bml2ZXJzYWwtcGFkZGluZykpIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKTsgfQogCiBmaWVsZHNldCB7Ci0gIGJvcmRlcjogMC4wNjI1cmVtIHNvbGlkIHZhcigtLWZvcm0tYm9yZGVyLWNvbG9yKTsKKyAgYm9yZGVyOiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tZm9ybS1ib3JkZXItY29sb3IpOwogICBib3JkZXItcmFkaXVzOiB2YXIoLS11bml2ZXJzYWwtYm9yZGVyLXJhZGl1cyk7CiAgIG1hcmdpbjogY2FsYyh2YXIoLS11bml2ZXJzYWwtbWFyZ2luKSAvIDQpOwogICBwYWRkaW5nOiB2YXIoLS11bml2ZXJzYWwtcGFkZGluZyk7IH0KQEAgLTY3MSw3ICs2NzAsNyBAQAogICBkaXNwbGF5OiB0YWJsZTsKICAgbWF4LXdpZHRoOiAxMDAlOwogICB3aGl0ZS1zcGFjZTogbm9ybWFsOwotICBmb250LXdlaWdodDogNzAwOworICBmb250LXdlaWdodDogNTAwOwogICBwYWRkaW5nOiBjYWxjKHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSAvIDIpOyB9CiAKIGxhYmVsIHsKQEAgLTcxNiw3ICs3MTUsNyBAQAogICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICBiYWNrZ3JvdW5kOiB2YXIoLS1pbnB1dC1iYWNrLWNvbG9yKTsKICAgY29sb3I6IHZhcigtLWlucHV0LWZvcmUtY29sb3IpOwotICBib3JkZXI6IDAuMDYyNXJlbSBzb2xpZCB2YXIoLS1pbnB1dC1ib3JkZXItY29sb3IpOworICBib3JkZXI6IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS1pbnB1dC1ib3JkZXItY29sb3IpOwogICBib3JkZXItcmFkaXVzOiB2YXIoLS11bml2ZXJzYWwtYm9yZGVyLXJhZGl1cyk7CiAgIG1hcmdpbjogY2FsYyh2YXIoLS11bml2ZXJzYWwtbWFyZ2luKSAvIDIpOwogICBwYWRkaW5nOiB2YXIoLS11bml2ZXJzYWwtcGFkZGluZykgY2FsYygxLjUgKiB2YXIoLS11bml2ZXJzYWwtcGFkZGluZykpOyB9CkBAIC03NjMsOCArNzYyLDggQEAKICAgW3R5cGU9InJhZGlvIl06Y2hlY2tlZDpiZWZvcmUgewogICAgIGJvcmRlci1yYWRpdXM6IDEwMCU7CiAgICAgY29udGVudDogJyc7Ci0gICAgdG9wOiBjYWxjKDAuMDYyNXJlbSArIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSAvIDIpOwotICAgIGxlZnQ6IGNhbGMoMC4wNjI1cmVtICsgdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpIC8gMik7CisgICAgdG9wOiBjYWxjKDAuMDcxNDI4NTcxNHJlbSArIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSAvIDIpOworICAgIGxlZnQ6IGNhbGMoMC4wNzE0Mjg1NzE0cmVtICsgdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpIC8gMik7CiAgICAgYmFja2dyb3VuZDogdmFyKC0taW5wdXQtZm9yZS1jb2xvcik7CiAgICAgd2lkdGg6IDAuNXJlbTsKICAgICBoZWlnaHQ6IDAuNXJlbTsgfQpAQCAtNzkzLDcgKzc5Miw3IEBACiAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgYmFja2dyb3VuZDogdmFyKC0tYnV0dG9uLWJhY2stY29sb3IpOwogICBjb2xvcjogdmFyKC0tYnV0dG9uLWZvcmUtY29sb3IpOwotICBib3JkZXI6IDAuMDYyNXJlbSBzb2xpZCB2YXIoLS1idXR0b24tYm9yZGVyLWNvbG9yKTsKKyAgYm9yZGVyOiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tYnV0dG9uLWJvcmRlci1jb2xvcik7CiAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKTsKICAgcGFkZGluZzogdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpIGNhbGMoMS41ICogdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpKTsKICAgbWFyZ2luOiB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKTsKQEAgLTgxNCw3ICs4MTMsNyBAQAogCiAuYnV0dG9uLWdyb3VwIHsKICAgZGlzcGxheTogZmxleDsKLSAgYm9yZGVyOiAwLjA2MjVyZW0gc29saWQgdmFyKC0tYnV0dG9uLWdyb3VwLWJvcmRlci1jb2xvcik7CisgIGJvcmRlcjogMC4wNzE0Mjg1NzE0cmVtIHNvbGlkIHZhcigtLWJ1dHRvbi1ncm91cC1ib3JkZXItY29sb3IpOwogICBib3JkZXItcmFkaXVzOiB2YXIoLS11bml2ZXJzYWwtYm9yZGVyLXJhZGl1cyk7CiAgIG1hcmdpbjogdmFyKC0tdW5pdmVyc2FsLW1hcmdpbik7IH0KICAgLmJ1dHRvbi1ncm91cCA+IGJ1dHRvbiwgLmJ1dHRvbi1ncm91cCBbdHlwZT0iYnV0dG9uIl0sIC5idXR0b24tZ3JvdXAgPiBbdHlwZT0ic3VibWl0Il0sIC5idXR0b24tZ3JvdXAgPiBbdHlwZT0icmVzZXQiXSwgLmJ1dHRvbi1ncm91cCA+IC5idXR0b24sIC5idXR0b24tZ3JvdXAgPiBbcm9sZT0iYnV0dG9uIl0gewpAQCAtODI2LDEzICs4MjUsMTMgQEAKICAgICBib3JkZXItcmFkaXVzOiAwOwogICAgIGJveC1zaGFkb3c6IG5vbmU7IH0KICAgLmJ1dHRvbi1ncm91cCA+IDpub3QoOmZpcnN0LWNoaWxkKSB7Ci0gICAgYm9yZGVyLWxlZnQ6IDAuMDYyNXJlbSBzb2xpZCB2YXIoLS1idXR0b24tZ3JvdXAtYm9yZGVyLWNvbG9yKTsgfQorICAgIGJvcmRlci1sZWZ0OiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tYnV0dG9uLWdyb3VwLWJvcmRlci1jb2xvcik7IH0KICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDk5cHgpIHsKICAgICAuYnV0dG9uLWdyb3VwIHsKICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IH0KICAgICAgIC5idXR0b24tZ3JvdXAgPiA6bm90KDpmaXJzdC1jaGlsZCkgewogICAgICAgICBib3JkZXI6IDA7Ci0gICAgICAgIGJvcmRlci10b3A6IDAuMDYyNXJlbSBzb2xpZCB2YXIoLS1idXR0b24tZ3JvdXAtYm9yZGVyLWNvbG9yKTsgfSB9CisgICAgICAgIGJvcmRlci10b3A6IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS1idXR0b24tZ3JvdXAtYm9yZGVyLWNvbG9yKTsgfSB9CiAKIC8qCiAgIEN1c3RvbSBlbGVtZW50cyBmb3IgZm9ybXMgYW5kIGlucHV0IGVsZW1lbnRzLgpAQCAtODc0LDI5ICs4NzMsMjkgQEAKICovCiAvKiBOYXZpZ2F0aW9uIG1vZHVsZSBDU1MgdmFyaWFibGUgZGVmaW5pdGlvbnMgKi8KIDpyb290IHsKLSAgLS1oZWFkZXItYmFjay1jb2xvcjogI2Y4ZjhmODsKLSAgLS1oZWFkZXItaG92ZXItYmFjay1jb2xvcjogI2YwZjBmMDsKLSAgLS1oZWFkZXItZm9yZS1jb2xvcjogIzQ0NDsKLSAgLS1oZWFkZXItYm9yZGVyLWNvbG9yOiAjZGRkOwotICAtLW5hdi1iYWNrLWNvbG9yOiAjZjhmOGY4OwotICAtLW5hdi1ob3Zlci1iYWNrLWNvbG9yOiAjZjBmMGYwOwotICAtLW5hdi1mb3JlLWNvbG9yOiAjNDQ0OwotICAtLW5hdi1ib3JkZXItY29sb3I6ICNkZGQ7Ci0gIC0tbmF2LWxpbmstY29sb3I6ICMwMjc3YmQ7Ci0gIC0tZm9vdGVyLWZvcmUtY29sb3I6ICM0NDQ7Ci0gIC0tZm9vdGVyLWJhY2stY29sb3I6ICNmOGY4Zjg7Ci0gIC0tZm9vdGVyLWJvcmRlci1jb2xvcjogI2RkZDsKLSAgLS1mb290ZXItbGluay1jb2xvcjogIzAyNzdiZDsKLSAgLS1kcmF3ZXItYmFjay1jb2xvcjogI2Y4ZjhmODsKLSAgLS1kcmF3ZXItaG92ZXItYmFjay1jb2xvcjogI2YwZjBmMDsKLSAgLS1kcmF3ZXItYm9yZGVyLWNvbG9yOiAjZGRkOwotICAtLWRyYXdlci1jbG9zZS1jb2xvcjogIzQ0NDsgfQorICAtLWhlYWRlci1iYWNrLWNvbG9yOiAjMDMyMzRiOworICAtLWhlYWRlci1ob3Zlci1iYWNrLWNvbG9yOiAjZmZkMjAwOworICAtLWhlYWRlci1mb3JlLWNvbG9yOiAjZmZmZmZmOworICAtLWhlYWRlci1ib3JkZXItY29sb3I6ICMzY2I0ZTY7CisgIC0tbmF2LWJhY2stY29sb3I6ICNmZmZmZmY7CisgIC0tbmF2LWhvdmVyLWJhY2stY29sb3I6ICNmZmU5N2Y7CisgIC0tbmF2LWZvcmUtY29sb3I6ICNlNjAwN2U7CisgIC0tbmF2LWJvcmRlci1jb2xvcjogIzNjYjRlNjsKKyAgLS1uYXYtbGluay1jb2xvcjogIzNjYjRlNjsKKyAgLS1mb290ZXItZm9yZS1jb2xvcjogI2ZmZmZmZjsKKyAgLS1mb290ZXItYmFjay1jb2xvcjogIzAzMjM0YjsKKyAgLS1mb290ZXItYm9yZGVyLWNvbG9yOiAjM2NiNGU2OworICAtLWZvb3Rlci1saW5rLWNvbG9yOiAjM2NiNGU2OworICAtLWRyYXdlci1iYWNrLWNvbG9yOiAjZmZmZmZmOworICAtLWRyYXdlci1ob3Zlci1iYWNrLWNvbG9yOiAjZmZlOTdmOworICAtLWRyYXdlci1ib3JkZXItY29sb3I6ICMzY2I0ZTY7CisgIC0tZHJhd2VyLWNsb3NlLWNvbG9yOiAjZTYwMDdlOyB9CiAKIGhlYWRlciB7Ci0gIGhlaWdodDogMy4xODc1cmVtOworICBoZWlnaHQ6IDIuNzVyZW07CiAgIGJhY2tncm91bmQ6IHZhcigtLWhlYWRlci1iYWNrLWNvbG9yKTsKICAgY29sb3I6IHZhcigtLWhlYWRlci1mb3JlLWNvbG9yKTsKLSAgYm9yZGVyLWJvdHRvbTogMC4wNjI1cmVtIHNvbGlkIHZhcigtLWhlYWRlci1ib3JkZXItY29sb3IpOworICBib3JkZXItYm90dG9tOiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0taGVhZGVyLWJvcmRlci1jb2xvcik7CiAgIHBhZGRpbmc6IGNhbGModmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpIC8gNCkgMDsKICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgb3ZlcmZsb3cteDogYXV0bzsKQEAgLTkyNyw3ICs5MjYsNyBAQAogbmF2IHsKICAgYmFja2dyb3VuZDogdmFyKC0tbmF2LWJhY2stY29sb3IpOwogICBjb2xvcjogdmFyKC0tbmF2LWZvcmUtY29sb3IpOwotICBib3JkZXI6IDAuMDYyNXJlbSBzb2xpZCB2YXIoLS1uYXYtYm9yZGVyLWNvbG9yKTsKKyAgYm9yZGVyOiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tbmF2LWJvcmRlci1jb2xvcik7CiAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXVuaXZlcnNhbC1ib3JkZXItcmFkaXVzKTsKICAgbWFyZ2luOiB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKTsgfQogICBuYXYgKiB7CkBAIC05NDYsMTAgKzk0NSwxMCBAQAogICAgIG5hdiAuc3VibGluay0xOmJlZm9yZSB7CiAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICBsZWZ0OiBjYWxjKHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSAtIDEgKiB2YXIoLS11bml2ZXJzYWwtcGFkZGluZykpOwotICAgICAgdG9wOiAtMC4wNjI1cmVtOworICAgICAgdG9wOiAtMC4wNzE0Mjg1NzE0cmVtOwogICAgICAgY29udGVudDogJyc7CiAgICAgICBoZWlnaHQ6IDEwMCU7Ci0gICAgICBib3JkZXI6IDAuMDYyNXJlbSBzb2xpZCB2YXIoLS1uYXYtYm9yZGVyLWNvbG9yKTsKKyAgICAgIGJvcmRlcjogMC4wNzE0Mjg1NzE0cmVtIHNvbGlkIHZhcigtLW5hdi1ib3JkZXItY29sb3IpOwogICAgICAgYm9yZGVyLWxlZnQ6IDA7IH0KICAgbmF2IC5zdWJsaW5rLTIgewogICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKQEAgLTk1NywxNiArOTU2LDE2IEBACiAgICAgbmF2IC5zdWJsaW5rLTI6YmVmb3JlIHsKICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgIGxlZnQ6IGNhbGModmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpIC0gMyAqIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSk7Ci0gICAgICB0b3A6IC0wLjA2MjVyZW07CisgICAgICB0b3A6IC0wLjA3MTQyODU3MTRyZW07CiAgICAgICBjb250ZW50OiAnJzsKICAgICAgIGhlaWdodDogMTAwJTsKLSAgICAgIGJvcmRlcjogMC4wNjI1cmVtIHNvbGlkIHZhcigtLW5hdi1ib3JkZXItY29sb3IpOworICAgICAgYm9yZGVyOiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tbmF2LWJvcmRlci1jb2xvcik7CiAgICAgICBib3JkZXItbGVmdDogMDsgfQogCiBmb290ZXIgewogICBiYWNrZ3JvdW5kOiB2YXIoLS1mb290ZXItYmFjay1jb2xvcik7CiAgIGNvbG9yOiB2YXIoLS1mb290ZXItZm9yZS1jb2xvcik7Ci0gIGJvcmRlci10b3A6IDAuMDYyNXJlbSBzb2xpZCB2YXIoLS1mb290ZXItYm9yZGVyLWNvbG9yKTsKKyAgYm9yZGVyLXRvcDogMC4wNzE0Mjg1NzE0cmVtIHNvbGlkIHZhcigtLWZvb3Rlci1ib3JkZXItY29sb3IpOwogICBwYWRkaW5nOiBjYWxjKDIgKiB2YXIoLS11bml2ZXJzYWwtcGFkZGluZykpIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKTsKICAgZm9udC1zaXplOiAwLjg3NXJlbTsgfQogICBmb290ZXIgYSwgZm9vdGVyIGE6dmlzaXRlZCB7CkBAIC0xMDEzLDcgKzEwMTIsNyBAQAogICAgIGhlaWdodDogMTAwdmg7CiAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1kcmF3ZXItYmFjay1jb2xvcik7Ci0gICAgYm9yZGVyOiAwLjA2MjVyZW0gc29saWQgdmFyKC0tZHJhd2VyLWJvcmRlci1jb2xvcik7CisgICAgYm9yZGVyOiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tZHJhd2VyLWJvcmRlci1jb2xvcik7CiAgICAgYm9yZGVyLXJhZGl1czogMDsKICAgICBtYXJnaW46IDA7CiAgICAgei1pbmRleDogMTExMDsKQEAgLTEwNjAsMzggKzEwNTksMzYgQEAKICovCiAvKiBUYWJsZSBtb2R1bGUgQ1NTIHZhcmlhYmxlIGRlZmluaXRpb25zLiAqLwogOnJvb3QgewotICAtLXRhYmxlLWJvcmRlci1jb2xvcjogI2FhYTsKLSAgLS10YWJsZS1ib3JkZXItc2VwYXJhdG9yLWNvbG9yOiAjNjY2OwotICAtLXRhYmxlLWhlYWQtYmFjay1jb2xvcjogI2U2ZTZlNjsKLSAgLS10YWJsZS1oZWFkLWZvcmUtY29sb3I6ICMxMTE7Ci0gIC0tdGFibGUtYm9keS1iYWNrLWNvbG9yOiAjZjhmOGY4OwotICAtLXRhYmxlLWJvZHktZm9yZS1jb2xvcjogIzExMTsKLSAgLS10YWJsZS1ib2R5LWFsdC1iYWNrLWNvbG9yOiAjZWVlOyB9CisgIC0tdGFibGUtYm9yZGVyLWNvbG9yOiAjMDMyMzRiOworICAtLXRhYmxlLWJvcmRlci1zZXBhcmF0b3ItY29sb3I6ICMwMzIzNGI7CisgIC0tdGFibGUtaGVhZC1iYWNrLWNvbG9yOiAjMDMyMzRiOworICAtLXRhYmxlLWhlYWQtZm9yZS1jb2xvcjogI2ZmZmZmZjsKKyAgLS10YWJsZS1ib2R5LWJhY2stY29sb3I6ICNmZmZmZmY7CisgIC0tdGFibGUtYm9keS1mb3JlLWNvbG9yOiAjMDMyMzRiOworICAtLXRhYmxlLWJvZHktYWx0LWJhY2stY29sb3I6ICNmNGY0ZjQ7IH0KIAogdGFibGUgewogICBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlOwogICBib3JkZXItc3BhY2luZzogMDsKLSAgOiBtYXJnaW46IGNhbGMoMS41ICogdmFyKC0tdW5pdmVyc2FsLW1hcmdpbikpIHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pOworICBtYXJnaW46IDA7CiAgIGRpc3BsYXk6IGZsZXg7CiAgIGZsZXg6IDAgMSBhdXRvOwogICBmbGV4LWZsb3c6IHJvdyB3cmFwOwogICBwYWRkaW5nOiB2YXIoLS11bml2ZXJzYWwtcGFkZGluZyk7Ci0gIHBhZGRpbmctdG9wOiAwOwotCW1hcmdpbjogY2FsYygxLjUgKiB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKSkgdmFyKC0tdW5pdmVyc2FsLW1hcmdpbik7CX0KKyAgcGFkZGluZy10b3A6IDA7IH0KICAgdGFibGUgY2FwdGlvbiB7Ci0gICAgZm9udC1zaXplOiAxLjI1ICogcmVtOworICAgIGZvbnQtc2l6ZTogMXJlbTsKICAgICBtYXJnaW46IGNhbGMoMiAqIHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pKSAwOwogICAgIG1heC13aWR0aDogMTAwJTsKLSAgICBmbGV4OiAwIDAgMTAwJTsKLQkJdGV4dC1hbGlnbjogbGVmdDt9CisgICAgZmxleDogMCAwIDEwMCU7IH0KICAgdGFibGUgdGhlYWQsIHRhYmxlIHRib2R5IHsKICAgICBkaXNwbGF5OiBmbGV4OwogICAgIGZsZXgtZmxvdzogcm93IHdyYXA7Ci0gICAgYm9yZGVyOiAwLjA2MjVyZW0gc29saWQgdmFyKC0tdGFibGUtYm9yZGVyLWNvbG9yKTsgfQorICAgIGJvcmRlcjogMC4wNzE0Mjg1NzE0cmVtIHNvbGlkIHZhcigtLXRhYmxlLWJvcmRlci1jb2xvcik7IH0KICAgdGFibGUgdGhlYWQgewogICAgIHotaW5kZXg6IDk5OTsKICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS11bml2ZXJzYWwtYm9yZGVyLXJhZGl1cykgdmFyKC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXMpIDAgMDsKLSAgICBib3JkZXItYm90dG9tOiAwLjA2MjVyZW0gc29saWQgdmFyKC0tdGFibGUtYm9yZGVyLXNlcGFyYXRvci1jb2xvcik7IH0KKyAgICBib3JkZXItYm90dG9tOiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tdGFibGUtYm9yZGVyLXNlcGFyYXRvci1jb2xvcik7IH0KICAgdGFibGUgdGJvZHkgewogICAgIGJvcmRlci10b3A6IDA7CiAgICAgbWFyZ2luLXRvcDogY2FsYygwIC0gdmFyKC0tdW5pdmVyc2FsLW1hcmdpbikpOwpAQCAtMTEwOSwxMSArMTEwNiwxMSBAQAogICB0YWJsZSB0ZCB7CiAgICAgYmFja2dyb3VuZDogdmFyKC0tdGFibGUtYm9keS1iYWNrLWNvbG9yKTsKICAgICBjb2xvcjogdmFyKC0tdGFibGUtYm9keS1mb3JlLWNvbG9yKTsKLSAgICBib3JkZXItdG9wOiAwLjA2MjVyZW0gc29saWQgdmFyKC0tdGFibGUtYm9yZGVyLWNvbG9yKTsgfQorICAgIGJvcmRlci10b3A6IDAuMDcxNDI4NTcxNHJlbSBzb2xpZCB2YXIoLS10YWJsZS1ib3JkZXItY29sb3IpOyB9CiAKIHRhYmxlOm5vdCguaG9yaXpvbnRhbCkgewogICBvdmVyZmxvdzogYXV0bzsKLSAgbWF4LWhlaWdodDogODUwcHg7IH0KKyAgbWF4LWhlaWdodDogMTAwJTsgfQogICB0YWJsZTpub3QoLmhvcml6b250YWwpIHRoZWFkLCB0YWJsZTpub3QoLmhvcml6b250YWwpIHRib2R5IHsKICAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICAgZmxleDogMCAwIDEwMCU7IH0KQEAgLTExMzQsMzIgKzExMzEsMzMgQEAKICAgYm9yZGVyOiAwOyB9CiAgIHRhYmxlLmhvcml6b250YWwgdGhlYWQsIHRhYmxlLmhvcml6b250YWwgdGJvZHkgewogICAgIGJvcmRlcjogMDsKKyAgICBmbGV4OiAuMiAwIDA7CiAgICAgZmxleC1mbG93OiByb3cgbm93cmFwOyB9CiAgIHRhYmxlLmhvcml6b250YWwgdGJvZHkgewogICAgIG92ZXJmbG93OiBhdXRvOwogICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKLSAgICBmbGV4OiAxIDAgMDsKLSAgICBtYXJnaW4tbGVmdDogY2FsYyggNCAqIHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pKTsKKyAgICBmbGV4OiAuOCAwIDA7CisgICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAgcGFkZGluZy1ib3R0b206IGNhbGModmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpIC8gNCk7IH0KICAgdGFibGUuaG9yaXpvbnRhbCB0ciB7CiAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICBmbGV4OiAxIDAgYXV0bzsgfQogICB0YWJsZS5ob3Jpem9udGFsIHRoLCB0YWJsZS5ob3Jpem9udGFsIHRkIHsKLSAgICB3aWR0aDogMTAwJTsKKyAgICB3aWR0aDogYXV0bzsKICAgICBib3JkZXI6IDA7Ci0gICAgYm9yZGVyLWJvdHRvbTogMC4wNjI1cmVtIHNvbGlkIHZhcigtLXRhYmxlLWJvcmRlci1jb2xvcik7IH0KKyAgICBib3JkZXItYm90dG9tOiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tdGFibGUtYm9yZGVyLWNvbG9yKTsgfQogICAgIHRhYmxlLmhvcml6b250YWwgdGg6bm90KDpmaXJzdC1jaGlsZCksIHRhYmxlLmhvcml6b250YWwgdGQ6bm90KDpmaXJzdC1jaGlsZCkgewogICAgICAgYm9yZGVyLXRvcDogMDsgfQogICB0YWJsZS5ob3Jpem9udGFsIHRoIHsKICAgICB0ZXh0LWFsaWduOiByaWdodDsKLSAgICBib3JkZXItbGVmdDogMC4wNjI1cmVtIHNvbGlkIHZhcigtLXRhYmxlLWJvcmRlci1jb2xvcik7Ci0gICAgYm9yZGVyLXJpZ2h0OiAwLjA2MjVyZW0gc29saWQgdmFyKC0tdGFibGUtYm9yZGVyLXNlcGFyYXRvci1jb2xvcik7IH0KKyAgICBib3JkZXItbGVmdDogMC4wNzE0Mjg1NzE0cmVtIHNvbGlkIHZhcigtLXRhYmxlLWJvcmRlci1jb2xvcik7CisgICAgYm9yZGVyLXJpZ2h0OiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tdGFibGUtYm9yZGVyLXNlcGFyYXRvci1jb2xvcik7IH0KICAgdGFibGUuaG9yaXpvbnRhbCB0aGVhZCB0cjpmaXJzdC1jaGlsZCB7CiAgICAgcGFkZGluZy1sZWZ0OiAwOyB9CiAgIHRhYmxlLmhvcml6b250YWwgdGg6Zmlyc3QtY2hpbGQsIHRhYmxlLmhvcml6b250YWwgdGQ6Zmlyc3QtY2hpbGQgewotICAgIGJvcmRlci10b3A6IDAuMDYyNXJlbSBzb2xpZCB2YXIoLS10YWJsZS1ib3JkZXItY29sb3IpOyB9CisgICAgYm9yZGVyLXRvcDogMC4wNzE0Mjg1NzE0cmVtIHNvbGlkIHZhcigtLXRhYmxlLWJvcmRlci1jb2xvcik7IH0KICAgdGFibGUuaG9yaXpvbnRhbCB0Ym9keSB0cjpsYXN0LWNoaWxkIHRkIHsKLSAgICBib3JkZXItcmlnaHQ6IDAuMDYyNXJlbSBzb2xpZCB2YXIoLS10YWJsZS1ib3JkZXItY29sb3IpOyB9CisgICAgYm9yZGVyLXJpZ2h0OiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tdGFibGUtYm9yZGVyLWNvbG9yKTsgfQogICAgIHRhYmxlLmhvcml6b250YWwgdGJvZHkgdHI6bGFzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZCB7CiAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMC4yNXJlbTsgfQogICAgIHRhYmxlLmhvcml6b250YWwgdGJvZHkgdHI6bGFzdC1jaGlsZCB0ZDpsYXN0LWNoaWxkIHsKQEAgLTExOTEsMTIgKzExODksMTIgQEAKICAgICAgIGRpc3BsYXk6IHRhYmxlLXJvdy1ncm91cDsgfQogICAgIHRhYmxlIHRyLCB0YWJsZS5ob3Jpem9udGFsIHRyIHsKICAgICAgIGRpc3BsYXk6IGJsb2NrOwotICAgICAgYm9yZGVyOiAwLjA2MjVyZW0gc29saWQgdmFyKC0tdGFibGUtYm9yZGVyLWNvbG9yKTsKKyAgICAgIGJvcmRlcjogMC4wNzE0Mjg1NzE0cmVtIHNvbGlkIHZhcigtLXRhYmxlLWJvcmRlci1jb2xvcik7CiAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS11bml2ZXJzYWwtYm9yZGVyLXJhZGl1cyk7Ci0gICAgICBiYWNrZ3JvdW5kOiAjZmFmYWZhOworICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjsKICAgICAgIHBhZGRpbmc6IHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKTsKICAgICAgIG1hcmdpbjogdmFyKC0tdW5pdmVyc2FsLW1hcmdpbik7Ci0gICAgICBtYXJnaW4tYm90dG9tOiBjYWxjKDIgKiB2YXIoLS11bml2ZXJzYWwtbWFyZ2luKSk7IH0KKyAgICAgIG1hcmdpbi1ib3R0b206IGNhbGMoMSAqIHZhcigtLXVuaXZlcnNhbC1tYXJnaW4pKTsgfQogICAgIHRhYmxlIHRoLCB0YWJsZSB0ZCwgdGFibGUuaG9yaXpvbnRhbCB0aCwgdGFibGUuaG9yaXpvbnRhbCB0ZCB7CiAgICAgICB3aWR0aDogYXV0bzsgfQogICAgIHRhYmxlIHRkLCB0YWJsZS5ob3Jpem9udGFsIHRkIHsKQEAgLTEyMTEsOSArMTIwOSw2IEBACiAgICAgICBib3JkZXItdG9wOiAwOyB9CiAgICAgdGFibGUgdGJvZHkgdHI6bGFzdC1jaGlsZCB0ZCwgdGFibGUuaG9yaXpvbnRhbCB0Ym9keSB0cjpsYXN0LWNoaWxkIHRkIHsKICAgICAgIGJvcmRlci1yaWdodDogMDsgfSB9Ci06cm9vdCB7Ci0gIC0tdGFibGUtYm9keS1hbHQtYmFjay1jb2xvcjogI2VlZTsgfQotCiB0YWJsZSB0cjpudGgtb2YtdHlwZSgybikgPiB0ZCB7CiAgIGJhY2tncm91bmQ6IHZhcigtLXRhYmxlLWJvZHktYWx0LWJhY2stY29sb3IpOyB9CiAKQEAgLTEyMzQsOCArMTIyOSw4IEBACiAqLwogLyogQ29udGV4dHVhbCBtb2R1bGUgQ1NTIHZhcmlhYmxlIGRlZmluaXRpb25zICovCiA6cm9vdCB7Ci0gIC0tbWFyay1iYWNrLWNvbG9yOiAjMDI3N2JkOwotICAtLW1hcmstZm9yZS1jb2xvcjogI2ZhZmFmYTsgfQorICAtLW1hcmstYmFjay1jb2xvcjogIzNjYjRlNjsKKyAgLS1tYXJrLWZvcmUtY29sb3I6ICNmZmZmZmY7IH0KIAogbWFyayB7CiAgIGJhY2tncm91bmQ6IHZhcigtLW1hcmstYmFjay1jb2xvcik7CkBAIC0xMjQzLDExICsxMjM4LDExIEBACiAgIGZvbnQtc2l6ZTogMC45NWVtOwogICBsaW5lLWhlaWdodDogMWVtOwogICBib3JkZXItcmFkaXVzOiB2YXIoLS11bml2ZXJzYWwtYm9yZGVyLXJhZGl1cyk7Ci0gIHBhZGRpbmc6IGNhbGModmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpIC8gNCkgY2FsYyh2YXIoLS11bml2ZXJzYWwtcGFkZGluZykgLyAyKTsgfQorICBwYWRkaW5nOiBjYWxjKHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSAvIDQpIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKTsgfQogICBtYXJrLmlubGluZS1ibG9jayB7CiAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgIGZvbnQtc2l6ZTogMWVtOwotICAgIGxpbmUtaGVpZ2h0OiAxLjU7CisgICAgbGluZS1oZWlnaHQ6IDEuNDsKICAgICBwYWRkaW5nOiBjYWxjKHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKSAvIDIpIHZhcigtLXVuaXZlcnNhbC1wYWRkaW5nKTsgfQogCiA6cm9vdCB7CkBAIC0xMzE0LDggKzEzMDksOCBAQAogCiA6cm9vdCB7CiAgIC0tbW9kYWwtb3ZlcmxheS1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjQ1KTsKLSAgLS1tb2RhbC1jbG9zZS1jb2xvcjogIzQ0NDsKLSAgLS1tb2RhbC1jbG9zZS1ob3Zlci1jb2xvcjogI2YwZjBmMDsgfQorICAtLW1vZGFsLWNsb3NlLWNvbG9yOiAjZTYwMDdlOworICAtLW1vZGFsLWNsb3NlLWhvdmVyLWNvbG9yOiAjZmZlOTdmOyB9CiAKIFt0eXBlPSJjaGVja2JveCJdLm1vZGFsIHsKICAgaGVpZ2h0OiAxcHg7CkBAIC0xMzY4LDEzICsxMzYzLDE0IEBACiAgICAgICB6LWluZGV4OiAxMjExOyB9CiAKIDpyb290IHsKLSAgLS1jb2xsYXBzZS1sYWJlbC1iYWNrLWNvbG9yOiAjZThlOGU4OwotICAtLWNvbGxhcHNlLWxhYmVsLWZvcmUtY29sb3I6ICMyMTIxMjE7Ci0gIC0tY29sbGFwc2UtbGFiZWwtaG92ZXItYmFjay1jb2xvcjogI2YwZjBmMDsKLSAgLS1jb2xsYXBzZS1zZWxlY3RlZC1sYWJlbC1iYWNrLWNvbG9yOiAjZWNlY2VjOwotICAtLWNvbGxhcHNlLWJvcmRlci1jb2xvcjogI2RkZDsKLSAgLS1jb2xsYXBzZS1jb250ZW50LWJhY2stY29sb3I6ICNmYWZhZmE7Ci0gIC0tY29sbGFwc2Utc2VsZWN0ZWQtbGFiZWwtYm9yZGVyLWNvbG9yOiAjMDI3N2JkOyB9CisgIC0tY29sbGFwc2UtbGFiZWwtYmFjay1jb2xvcjogIzAzMjM0YjsKKyAgLS1jb2xsYXBzZS1sYWJlbC1mb3JlLWNvbG9yOiAjZmZmZmZmOworICAtLWNvbGxhcHNlLWxhYmVsLWhvdmVyLWJhY2stY29sb3I6ICMzY2I0ZTY7CisgIC0tY29sbGFwc2Utc2VsZWN0ZWQtbGFiZWwtYmFjay1jb2xvcjogIzNjYjRlNjsKKyAgLS1jb2xsYXBzZS1ib3JkZXItY29sb3I6IHZhcigtLWNvbGxhcHNlLWxhYmVsLWJhY2stY29sb3IpOworICAtLWNvbGxhcHNlLXNlbGVjdGVkLWJvcmRlci1jb2xvcjogI2NlZWNmODsKKyAgLS1jb2xsYXBzZS1jb250ZW50LWJhY2stY29sb3I6ICNmZmZmZmY7CisgIC0tY29sbGFwc2Utc2VsZWN0ZWQtbGFiZWwtYm9yZGVyLWNvbG9yOiAjM2NiNGU2OyB9CiAKIC5jb2xsYXBzZSB7CiAgIHdpZHRoOiBjYWxjKDEwMCUgLSAyICogdmFyKC0tdW5pdmVyc2FsLW1hcmdpbikpOwpAQCAtMTM5NSwxMyArMTM5MSwxMyBAQAogICAuY29sbGFwc2UgPiBsYWJlbCB7CiAgICAgZmxleC1ncm93OiAxOwogICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKLSAgICBoZWlnaHQ6IDEuNXJlbTsKKyAgICBoZWlnaHQ6IDEuMjVyZW07CiAgICAgY3Vyc29yOiBwb2ludGVyOwotICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4zczsKKyAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMnM7CiAgICAgY29sb3I6IHZhcigtLWNvbGxhcHNlLWxhYmVsLWZvcmUtY29sb3IpOwogICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbGxhcHNlLWxhYmVsLWJhY2stY29sb3IpOwotICAgIGJvcmRlcjogMC4wNjI1cmVtIHNvbGlkIHZhcigtLWNvbGxhcHNlLWJvcmRlci1jb2xvcik7Ci0gICAgcGFkZGluZzogY2FsYygxLjUgKiB2YXIoLS11bml2ZXJzYWwtcGFkZGluZykpOyB9CisgICAgYm9yZGVyOiAwLjA3MTQyODU3MTRyZW0gc29saWQgdmFyKC0tY29sbGFwc2Utc2VsZWN0ZWQtYm9yZGVyLWNvbG9yKTsKKyAgICBwYWRkaW5nOiBjYWxjKDEuMjUgKiB2YXIoLS11bml2ZXJzYWwtcGFkZGluZykpOyB9CiAgICAgLmNvbGxhcHNlID4gbGFiZWw6aG92ZXIsIC5jb2xsYXBzZSA+IGxhYmVsOmZvY3VzIHsKICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbGxhcHNlLWxhYmVsLWhvdmVyLWJhY2stY29sb3IpOyB9CiAgICAgLmNvbGxhcHNlID4gbGFiZWwgKyBkaXYgewpAQCAtMTQxOCw3ICsxNDE0LDcgQEAKICAgICAgIG1heC1oZWlnaHQ6IDFweDsgfQogICAuY29sbGFwc2UgPiA6Y2hlY2tlZCArIGxhYmVsIHsKICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xsYXBzZS1zZWxlY3RlZC1sYWJlbC1iYWNrLWNvbG9yKTsKLSAgICBib3JkZXItYm90dG9tLWNvbG9yOiB2YXIoLS1jb2xsYXBzZS1zZWxlY3RlZC1sYWJlbC1ib3JkZXItY29sb3IpOyB9CisgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jb2xsYXBzZS1zZWxlY3RlZC1sYWJlbC1ib3JkZXItY29sb3IpOyB9CiAgICAgLmNvbGxhcHNlID4gOmNoZWNrZWQgKyBsYWJlbCArIGRpdiB7CiAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwpAQCAtMTQyNywxMyArMTQyMywxMyBAQAogICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgICBtYXJnaW46IDA7CiAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xsYXBzZS1jb250ZW50LWJhY2stY29sb3IpOwotICAgICAgYm9yZGVyOiAwLjA2MjVyZW0gc29saWQgdmFyKC0tY29sbGFwc2UtYm9yZGVyLWNvbG9yKTsKKyAgICAgIGJvcmRlcjogMC4wNzE0Mjg1NzE0cmVtIHNvbGlkIHZhcigtLWNvbGxhcHNlLXNlbGVjdGVkLWJvcmRlci1jb2xvcik7CiAgICAgICBib3JkZXItdG9wOiAwOwogICAgICAgcGFkZGluZzogdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpOwogICAgICAgY2xpcDogYXV0bzsKICAgICAgIC13ZWJraXQtY2xpcC1wYXRoOiBpbnNldCgwJSk7CiAgICAgICBjbGlwLXBhdGg6IGluc2V0KDAlKTsKLSAgICAgIG1heC1oZWlnaHQ6IDg1MHB4OyB9CisgICAgICBtYXgtaGVpZ2h0OiAxMDAlOyB9CiAgIC5jb2xsYXBzZSA+IGxhYmVsOm5vdCg6Zmlyc3Qtb2YtdHlwZSkgewogICAgIGJvcmRlci10b3A6IDA7IH0KICAgLmNvbGxhcHNlID4gbGFiZWw6Zmlyc3Qtb2YtdHlwZSB7CkBAIC0xNDUwLDExICsxNDQ2LDggQEAKIC8qCiAgIEN1c3RvbSBlbGVtZW50cyBmb3IgY29udGV4dHVhbCBiYWNrZ3JvdW5kIGVsZW1lbnRzLCB0b2FzdHMgYW5kIHRvb2x0aXBzLgogKi8KLW1hcmsuc2Vjb25kYXJ5IHsKLSAgLS1tYXJrLWJhY2stY29sb3I6ICNkMzJmMmY7IH0KLQogbWFyay50ZXJ0aWFyeSB7Ci0gIC0tbWFyay1iYWNrLWNvbG9yOiAjMzA4NzMyOyB9CisgIC0tbWFyay1iYWNrLWNvbG9yOiAjM2NiNGU2OyB9CiAKIG1hcmsudGFnIHsKICAgcGFkZGluZzogY2FsYyh2YXIoLS11bml2ZXJzYWwtcGFkZGluZykvMikgdmFyKC0tdW5pdmVyc2FsLXBhZGRpbmcpOwpAQCAtMTQ2Myw5ICsxNDU2LDkgQEAKIC8qCiAgIERlZmluaXRpb25zIGZvciBwcm9ncmVzcyBlbGVtZW50cyBhbmQgc3Bpbm5lcnMuCiAqLwotLyogUHJvZ2VzcyBtb2R1bGUgQ1NTIHZhcmlhYmxlIGRlZmluaXRpb25zICovCisvKiBQcm9ncmVzcyBtb2R1bGUgQ1NTIHZhcmlhYmxlIGRlZmluaXRpb25zICovCiA6cm9vdCB7Ci0gIC0tcHJvZ3Jlc3MtYmFjay1jb2xvcjogI2RkZDsKKyAgLS1wcm9ncmVzcy1iYWNrLWNvbG9yOiAjM2NiNGU2OwogICAtLXByb2dyZXNzLWZvcmUtY29sb3I6ICM1NTU7IH0KIAogcHJvZ3Jlc3MgewpAQCAtMTU1OCw0NSArMTU1MSw0NSBAQAogICAgIGZpbHRlcjogaW52ZXJ0KDEwMCUpOyB9CiAKIHNwYW4uaWNvbi1hbGVydCB7Ci0gIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzExMScgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDY2lyY2xlIGN4PScxMicgY3k9JzEyJyByPScxMCclM0UlM0MvY2lyY2xlJTNFJTNDbGluZSB4MT0nMTInIHkxPSc4JyB4Mj0nMTInIHkyPScxMiclM0UlM0MvbGluZSUzRSUzQ2xpbmUgeDE9JzEyJyB5MT0nMTYnIHgyPScxMicgeTI9JzE2JyUzRSUzQy9saW5lJTNFJTNDL3N2ZyUzRSIpOyB9CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzAzMjM0Yicgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDY2lyY2xlIGN4PScxMicgY3k9JzEyJyByPScxMCclM0UlM0MvY2lyY2xlJTNFJTNDbGluZSB4MT0nMTInIHkxPSc4JyB4Mj0nMTInIHkyPScxMiclM0UlM0MvbGluZSUzRSUzQ2xpbmUgeDE9JzEyJyB5MT0nMTYnIHgyPScxMicgeTI9JzE2JyUzRSUzQy9saW5lJTNFJTNDL3N2ZyUzRSIpOyB9CiBzcGFuLmljb24tYm9va21hcmsgewotICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMxMTEnIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ3BhdGggZD0nTTE5IDIxbC03LTUtNyA1VjVhMiAyIDAgMCAxIDItMmgxMGEyIDIgMCAwIDEgMiAyeiclM0UlM0MvcGF0aCUzRSUzQy9zdmclM0UiKTsgfQorICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMwMzIzNGInIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ3BhdGggZD0nTTE5IDIxbC03LTUtNyA1VjVhMiAyIDAgMCAxIDItMmgxMGEyIDIgMCAwIDEgMiAyeiclM0UlM0MvcGF0aCUzRSUzQy9zdmclM0UiKTsgfQogc3Bhbi5pY29uLWNhbGVuZGFyIHsKLSAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMTExJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NyZWN0IHg9JzMnIHk9JzQnIHdpZHRoPScxOCcgaGVpZ2h0PScxOCcgcng9JzInIHJ5PScyJyUzRSUzQy9yZWN0JTNFJTNDbGluZSB4MT0nMTYnIHkxPScyJyB4Mj0nMTYnIHkyPSc2JyUzRSUzQy9saW5lJTNFJTNDbGluZSB4MT0nOCcgeTE9JzInIHgyPSc4JyB5Mj0nNiclM0UlM0MvbGluZSUzRSUzQ2xpbmUgeDE9JzMnIHkxPScxMCcgeDI9JzIxJyB5Mj0nMTAnJTNFJTNDL2xpbmUlM0UlM0Mvc3ZnJTNFIik7IH0KKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMDMyMzRiJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NyZWN0IHg9JzMnIHk9JzQnIHdpZHRoPScxOCcgaGVpZ2h0PScxOCcgcng9JzInIHJ5PScyJyUzRSUzQy9yZWN0JTNFJTNDbGluZSB4MT0nMTYnIHkxPScyJyB4Mj0nMTYnIHkyPSc2JyUzRSUzQy9saW5lJTNFJTNDbGluZSB4MT0nOCcgeTE9JzInIHgyPSc4JyB5Mj0nNiclM0UlM0MvbGluZSUzRSUzQ2xpbmUgeDE9JzMnIHkxPScxMCcgeDI9JzIxJyB5Mj0nMTAnJTNFJTNDL2xpbmUlM0UlM0Mvc3ZnJTNFIik7IH0KIHNwYW4uaWNvbi1jcmVkaXQgewotICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMxMTEnIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ3JlY3QgeD0nMScgeT0nNCcgd2lkdGg9JzIyJyBoZWlnaHQ9JzE2JyByeD0nMicgcnk9JzInJTNFJTNDL3JlY3QlM0UlM0NsaW5lIHgxPScxJyB5MT0nMTAnIHgyPScyMycgeTI9JzEwJyUzRSUzQy9saW5lJTNFJTNDL3N2ZyUzRSIpOyB9CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzAzMjM0Yicgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDcmVjdCB4PScxJyB5PSc0JyB3aWR0aD0nMjInIGhlaWdodD0nMTYnIHJ4PScyJyByeT0nMiclM0UlM0MvcmVjdCUzRSUzQ2xpbmUgeDE9JzEnIHkxPScxMCcgeDI9JzIzJyB5Mj0nMTAnJTNFJTNDL2xpbmUlM0UlM0Mvc3ZnJTNFIik7IH0KIHNwYW4uaWNvbi1lZGl0IHsKLSAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMTExJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NwYXRoIGQ9J00yMCAxNC42NlYyMGEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY2YTIgMiAwIDAgMSAyLTJoNS4zNCclM0UlM0MvcGF0aCUzRSUzQ3BvbHlnb24gcG9pbnRzPScxOCAyIDIyIDYgMTIgMTYgOCAxNiA4IDEyIDE4IDInJTNFJTNDL3BvbHlnb24lM0UlM0Mvc3ZnJTNFIik7IH0KKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMDMyMzRiJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NwYXRoIGQ9J00yMCAxNC42NlYyMGEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY2YTIgMiAwIDAgMSAyLTJoNS4zNCclM0UlM0MvcGF0aCUzRSUzQ3BvbHlnb24gcG9pbnRzPScxOCAyIDIyIDYgMTIgMTYgOCAxNiA4IDEyIDE4IDInJTNFJTNDL3BvbHlnb24lM0UlM0Mvc3ZnJTNFIik7IH0KIHNwYW4uaWNvbi1saW5rIHsKLSAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMTExJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NwYXRoIGQ9J00xOCAxM3Y2YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMmg2JyUzRSUzQy9wYXRoJTNFJTNDcG9seWxpbmUgcG9pbnRzPScxNSAzIDIxIDMgMjEgOSclM0UlM0MvcG9seWxpbmUlM0UlM0NsaW5lIHgxPScxMCcgeTE9JzE0JyB4Mj0nMjEnIHkyPSczJyUzRSUzQy9saW5lJTNFJTNDL3N2ZyUzRSIpOyB9CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzAzMjM0Yicgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDcGF0aCBkPSdNMTggMTN2NmEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMlY4YTIgMiAwIDAgMSAyLTJoNiclM0UlM0MvcGF0aCUzRSUzQ3BvbHlsaW5lIHBvaW50cz0nMTUgMyAyMSAzIDIxIDknJTNFJTNDL3BvbHlsaW5lJTNFJTNDbGluZSB4MT0nMTAnIHkxPScxNCcgeDI9JzIxJyB5Mj0nMyclM0UlM0MvbGluZSUzRSUzQy9zdmclM0UiKTsgfQogc3Bhbi5pY29uLWhlbHAgewotICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMxMTEnIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ3BhdGggZD0nTTkuMDkgOWEzIDMgMCAwIDEgNS44MyAxYzAgMi0zIDMtMyAzJyUzRSUzQy9wYXRoJTNFJTNDY2lyY2xlIGN4PScxMicgY3k9JzEyJyByPScxMCclM0UlM0MvY2lyY2xlJTNFJTNDbGluZSB4MT0nMTInIHkxPScxNycgeDI9JzEyJyB5Mj0nMTcnJTNFJTNDL2xpbmUlM0UlM0Mvc3ZnJTNFIik7IH0KKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMDMyMzRiJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NwYXRoIGQ9J005LjA5IDlhMyAzIDAgMCAxIDUuODMgMWMwIDItMyAzLTMgMyclM0UlM0MvcGF0aCUzRSUzQ2NpcmNsZSBjeD0nMTInIGN5PScxMicgcj0nMTAnJTNFJTNDL2NpcmNsZSUzRSUzQ2xpbmUgeDE9JzEyJyB5MT0nMTcnIHgyPScxMicgeTI9JzE3JyUzRSUzQy9saW5lJTNFJTNDL3N2ZyUzRSIpOyB9CiBzcGFuLmljb24taG9tZSB7Ci0gIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzExMScgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDcGF0aCBkPSdNMyA5bDktNyA5IDd2MTFhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ6JyUzRSUzQy9wYXRoJTNFJTNDcG9seWxpbmUgcG9pbnRzPSc5IDIyIDkgMTIgMTUgMTIgMTUgMjInJTNFJTNDL3BvbHlsaW5lJTNFJTNDL3N2ZyUzRSIpOyB9CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzAzMjM0Yicgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDcGF0aCBkPSdNMyA5bDktNyA5IDd2MTFhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ6JyUzRSUzQy9wYXRoJTNFJTNDcG9seWxpbmUgcG9pbnRzPSc5IDIyIDkgMTIgMTUgMTIgMTUgMjInJTNFJTNDL3BvbHlsaW5lJTNFJTNDL3N2ZyUzRSIpOyB9CiBzcGFuLmljb24taW5mbyB7Ci0gIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzExMScgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDY2lyY2xlIGN4PScxMicgY3k9JzEyJyByPScxMCclM0UlM0MvY2lyY2xlJTNFJTNDbGluZSB4MT0nMTInIHkxPScxNicgeDI9JzEyJyB5Mj0nMTInJTNFJTNDL2xpbmUlM0UlM0NsaW5lIHgxPScxMicgeTE9JzgnIHgyPScxMicgeTI9JzgnJTNFJTNDL2xpbmUlM0UlM0Mvc3ZnJTNFIik7IH0KKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMDMyMzRiJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NjaXJjbGUgY3g9JzEyJyBjeT0nMTInIHI9JzEwJyUzRSUzQy9jaXJjbGUlM0UlM0NsaW5lIHgxPScxMicgeTE9JzE2JyB4Mj0nMTInIHkyPScxMiclM0UlM0MvbGluZSUzRSUzQ2xpbmUgeDE9JzEyJyB5MT0nOCcgeDI9JzEyJyB5Mj0nOCclM0UlM0MvbGluZSUzRSUzQy9zdmclM0UiKTsgfQogc3Bhbi5pY29uLWxvY2sgewotICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMxMTEnIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ3JlY3QgeD0nMycgeT0nMTEnIHdpZHRoPScxOCcgaGVpZ2h0PScxMScgcng9JzInIHJ5PScyJyUzRSUzQy9yZWN0JTNFJTNDcGF0aCBkPSdNNyAxMVY3YTUgNSAwIDAgMSAxMCAwdjQnJTNFJTNDL3BhdGglM0UlM0Mvc3ZnJTNFIik7IH0KKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMDMyMzRiJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NyZWN0IHg9JzMnIHk9JzExJyB3aWR0aD0nMTgnIGhlaWdodD0nMTEnIHJ4PScyJyByeT0nMiclM0UlM0MvcmVjdCUzRSUzQ3BhdGggZD0nTTcgMTFWN2E1IDUgMCAwIDEgMTAgMHY0JyUzRSUzQy9wYXRoJTNFJTNDL3N2ZyUzRSIpOyB9CiBzcGFuLmljb24tbWFpbCB7Ci0gIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzExMScgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDcGF0aCBkPSdNNCA0aDE2YzEuMSAwIDIgLjkgMiAydjEyYzAgMS4xLS45IDItMiAySDRjLTEuMSAwLTItLjktMi0yVjZjMC0xLjEuOS0yIDItMnonJTNFJTNDL3BhdGglM0UlM0Nwb2x5bGluZSBwb2ludHM9JzIyLDYgMTIsMTMgMiw2JyUzRSUzQy9wb2x5bGluZSUzRSUzQy9zdmclM0UiKTsgfQorICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMwMzIzNGInIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ3BhdGggZD0nTTQgNGgxNmMxLjEgMCAyIC45IDIgMnYxMmMwIDEuMS0uOSAyLTIgMkg0Yy0xLjEgMC0yLS45LTItMlY2YzAtMS4xLjktMiAyLTJ6JyUzRSUzQy9wYXRoJTNFJTNDcG9seWxpbmUgcG9pbnRzPScyMiw2IDEyLDEzIDIsNiclM0UlM0MvcG9seWxpbmUlM0UlM0Mvc3ZnJTNFIik7IH0KIHNwYW4uaWNvbi1sb2NhdGlvbiB7Ci0gIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzExMScgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDcGF0aCBkPSdNMjEgMTBjMCA3LTkgMTMtOSAxM3MtOS02LTktMTNhOSA5IDAgMCAxIDE4IDB6JyUzRSUzQy9wYXRoJTNFJTNDY2lyY2xlIGN4PScxMicgY3k9JzEwJyByPSczJyUzRSUzQy9jaXJjbGUlM0UlM0Mvc3ZnJTNFIik7IH0KKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMDMyMzRiJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NwYXRoIGQ9J00yMSAxMGMwIDctOSAxMy05IDEzcy05LTYtOS0xM2E5IDkgMCAwIDEgMTggMHonJTNFJTNDL3BhdGglM0UlM0NjaXJjbGUgY3g9JzEyJyBjeT0nMTAnIHI9JzMnJTNFJTNDL2NpcmNsZSUzRSUzQy9zdmclM0UiKTsgfQogc3Bhbi5pY29uLXBob25lIHsKLSAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMTExJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NwYXRoIGQ9J00yMiAxNi45MnYzYTIgMiAwIDAgMS0yLjE4IDIgMTkuNzkgMTkuNzkgMCAwIDEtOC42My0zLjA3IDE5LjUgMTkuNSAwIDAgMS02LTYgMTkuNzkgMTkuNzkgMCAwIDEtMy4wNy04LjY3QTIgMiAwIDAgMSA0LjExIDJoM2EyIDIgMCAwIDEgMiAxLjcyIDEyLjg0IDEyLjg0IDAgMCAwIC43IDIuODEgMiAyIDAgMCAxLS40NSAyLjExTDguMDkgOS45MWExNiAxNiAwIDAgMCA2IDZsMS4yNy0xLjI3YTIgMiAwIDAgMSAyLjExLS40NSAxMi44NCAxMi44NCAwIDAgMCAyLjgxLjdBMiAyIDAgMCAxIDIyIDE2LjkyeiclM0UlM0MvcGF0aCUzRSUzQy9zdmclM0UiKTsgfQorICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMwMzIzNGInIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ3BhdGggZD0nTTIyIDE2LjkydjNhMiAyIDAgMCAxLTIuMTggMiAxOS43OSAxOS43OSAwIDAgMS04LjYzLTMuMDcgMTkuNSAxOS41IDAgMCAxLTYtNiAxOS43OSAxOS43OSAwIDAgMS0zLjA3LTguNjdBMiAyIDAgMCAxIDQuMTEgMmgzYTIgMiAwIDAgMSAyIDEuNzIgMTIuODQgMTIuODQgMCAwIDAgLjcgMi44MSAyIDIgMCAwIDEtLjQ1IDIuMTFMOC4wOSA5LjkxYTE2IDE2IDAgMCAwIDYgNmwxLjI3LTEuMjdhMiAyIDAgMCAxIDIuMTEtLjQ1IDEyLjg0IDEyLjg0IDAgMCAwIDIuODEuN0EyIDIgMCAwIDEgMjIgMTYuOTJ6JyUzRSUzQy9wYXRoJTNFJTNDL3N2ZyUzRSIpOyB9CiBzcGFuLmljb24tcnNzIHsKLSAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMTExJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NwYXRoIGQ9J000IDExYTkgOSAwIDAgMSA5IDknJTNFJTNDL3BhdGglM0UlM0NwYXRoIGQ9J000IDRhMTYgMTYgMCAwIDEgMTYgMTYnJTNFJTNDL3BhdGglM0UlM0NjaXJjbGUgY3g9JzUnIGN5PScxOScgcj0nMSclM0UlM0MvY2lyY2xlJTNFJTNDL3N2ZyUzRSIpOyB9CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzAzMjM0Yicgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDcGF0aCBkPSdNNCAxMWE5IDkgMCAwIDEgOSA5JyUzRSUzQy9wYXRoJTNFJTNDcGF0aCBkPSdNNCA0YTE2IDE2IDAgMCAxIDE2IDE2JyUzRSUzQy9wYXRoJTNFJTNDY2lyY2xlIGN4PSc1JyBjeT0nMTknIHI9JzEnJTNFJTNDL2NpcmNsZSUzRSUzQy9zdmclM0UiKTsgfQogc3Bhbi5pY29uLXNlYXJjaCB7Ci0gIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzExMScgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDY2lyY2xlIGN4PScxMScgY3k9JzExJyByPSc4JyUzRSUzQy9jaXJjbGUlM0UlM0NsaW5lIHgxPScyMScgeTE9JzIxJyB4Mj0nMTYuNjUnIHkyPScxNi42NSclM0UlM0MvbGluZSUzRSUzQy9zdmclM0UiKTsgfQorICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMwMzIzNGInIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ2NpcmNsZSBjeD0nMTEnIGN5PScxMScgcj0nOCclM0UlM0MvY2lyY2xlJTNFJTNDbGluZSB4MT0nMjEnIHkxPScyMScgeDI9JzE2LjY1JyB5Mj0nMTYuNjUnJTNFJTNDL2xpbmUlM0UlM0Mvc3ZnJTNFIik7IH0KIHNwYW4uaWNvbi1zZXR0aW5ncyB7Ci0gIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzExMScgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDY2lyY2xlIGN4PScxMicgY3k9JzEyJyByPSczJyUzRSUzQy9jaXJjbGUlM0UlM0NwYXRoIGQ9J00xOS40IDE1YTEuNjUgMS42NSAwIDAgMCAuMzMgMS44MmwuMDYuMDZhMiAyIDAgMCAxIDAgMi44MyAyIDIgMCAwIDEtMi44MyAwbC0uMDYtLjA2YTEuNjUgMS42NSAwIDAgMC0xLjgyLS4zMyAxLjY1IDEuNjUgMCAwIDAtMSAxLjUxVjIxYTIgMiAwIDAgMS0yIDIgMiAyIDAgMCAxLTItMnYtLjA5QTEuNjUgMS42NSAwIDAgMCA5IDE5LjRhMS42NSAxLjY1IDAgMCAwLTEuODIuMzNsLS4wNi4wNmEyIDIgMCAwIDEtMi44MyAwIDIgMiAwIDAgMSAwLTIuODNsLjA2LS4wNmExLjY1IDEuNjUgMCAwIDAgLjMzLTEuODIgMS42NSAxLjY1IDAgMCAwLTEuNTEtMUgzYTIgMiAwIDAgMS0yLTIgMiAyIDAgMCAxIDItMmguMDlBMS42NSAxLjY1IDAgMCAwIDQuNiA5YTEuNjUgMS42NSAwIDAgMC0uMzMtMS44MmwtLjA2LS4wNmEyIDIgMCAwIDEgMC0yLjgzIDIgMiAwIDAgMSAyLjgzIDBsLjA2LjA2YTEuNjUgMS42NSAwIDAgMCAxLjgyLjMzSDlhMS42NSAxLjY1IDAgMCAwIDEtMS41MVYzYTIgMiAwIDAgMSAyLTIgMiAyIDAgMCAxIDIgMnYuMDlhMS42NSAxLjY1IDAgMCAwIDEgMS41MSAxLjY1IDEuNjUgMCAwIDAgMS44Mi0uMzNsLjA2LS4wNmEyIDIgMCAwIDEgMi44MyAwIDIgMiAwIDAgMSAwIDIuODNsLS4wNi4wNmExLjY1IDEuNjUgMCAwIDAtLjMzIDEuODJWOWExLjY1IDEuNjUgMCAwIDAgMS41MSAxSDIxYTIgMiAwIDAgMSAyIDIgMiAyIDAgMCAxLTIgMmgtLjA5YTEuNjUgMS42NSAwIDAgMC0xLjUxIDF6JyUzRSUzQy9wYXRoJTNFJTNDL3N2ZyUzRSIpOyB9CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzAzMjM0Yicgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDY2lyY2xlIGN4PScxMicgY3k9JzEyJyByPSczJyUzRSUzQy9jaXJjbGUlM0UlM0NwYXRoIGQ9J00xOS40IDE1YTEuNjUgMS42NSAwIDAgMCAuMzMgMS44MmwuMDYuMDZhMiAyIDAgMCAxIDAgMi44MyAyIDIgMCAwIDEtMi44MyAwbC0uMDYtLjA2YTEuNjUgMS42NSAwIDAgMC0xLjgyLS4zMyAxLjY1IDEuNjUgMCAwIDAtMSAxLjUxVjIxYTIgMiAwIDAgMS0yIDIgMiAyIDAgMCAxLTItMnYtLjA5QTEuNjUgMS42NSAwIDAgMCA5IDE5LjRhMS42NSAxLjY1IDAgMCAwLTEuODIuMzNsLS4wNi4wNmEyIDIgMCAwIDEtMi44MyAwIDIgMiAwIDAgMSAwLTIuODNsLjA2LS4wNmExLjY1IDEuNjUgMCAwIDAgLjMzLTEuODIgMS42NSAxLjY1IDAgMCAwLTEuNTEtMUgzYTIgMiAwIDAgMS0yLTIgMiAyIDAgMCAxIDItMmguMDlBMS42NSAxLjY1IDAgMCAwIDQuNiA5YTEuNjUgMS42NSAwIDAgMC0uMzMtMS44MmwtLjA2LS4wNmEyIDIgMCAwIDEgMC0yLjgzIDIgMiAwIDAgMSAyLjgzIDBsLjA2LjA2YTEuNjUgMS42NSAwIDAgMCAxLjgyLjMzSDlhMS42NSAxLjY1IDAgMCAwIDEtMS41MVYzYTIgMiAwIDAgMSAyLTIgMiAyIDAgMCAxIDIgMnYuMDlhMS42NSAxLjY1IDAgMCAwIDEgMS41MSAxLjY1IDEuNjUgMCAwIDAgMS44Mi0uMzNsLjA2LS4wNmEyIDIgMCAwIDEgMi44MyAwIDIgMiAwIDAgMSAwIDIuODNsLS4wNi4wNmExLjY1IDEuNjUgMCAwIDAtLjMzIDEuODJWOWExLjY1IDEuNjUgMCAwIDAgMS41MSAxSDIxYTIgMiAwIDAgMSAyIDIgMiAyIDAgMCAxLTIgMmgtLjA5YTEuNjUgMS42NSAwIDAgMC0xLjUxIDF6JyUzRSUzQy9wYXRoJTNFJTNDL3N2ZyUzRSIpOyB9CiBzcGFuLmljb24tc2hhcmUgewotICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMxMTEnIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ2NpcmNsZSBjeD0nMTgnIGN5PSc1JyByPSczJyUzRSUzQy9jaXJjbGUlM0UlM0NjaXJjbGUgY3g9JzYnIGN5PScxMicgcj0nMyclM0UlM0MvY2lyY2xlJTNFJTNDY2lyY2xlIGN4PScxOCcgY3k9JzE5JyByPSczJyUzRSUzQy9jaXJjbGUlM0UlM0NsaW5lIHgxPSc4LjU5JyB5MT0nMTMuNTEnIHgyPScxNS40MicgeTI9JzE3LjQ5JyUzRSUzQy9saW5lJTNFJTNDbGluZSB4MT0nMTUuNDEnIHkxPSc2LjUxJyB4Mj0nOC41OScgeTI9JzEwLjQ5JyUzRSUzQy9saW5lJTNFJTNDL3N2ZyUzRSIpOyB9CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzAzMjM0Yicgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDY2lyY2xlIGN4PScxOCcgY3k9JzUnIHI9JzMnJTNFJTNDL2NpcmNsZSUzRSUzQ2NpcmNsZSBjeD0nNicgY3k9JzEyJyByPSczJyUzRSUzQy9jaXJjbGUlM0UlM0NjaXJjbGUgY3g9JzE4JyBjeT0nMTknIHI9JzMnJTNFJTNDL2NpcmNsZSUzRSUzQ2xpbmUgeDE9JzguNTknIHkxPScxMy41MScgeDI9JzE1LjQyJyB5Mj0nMTcuNDknJTNFJTNDL2xpbmUlM0UlM0NsaW5lIHgxPScxNS40MScgeTE9JzYuNTEnIHgyPSc4LjU5JyB5Mj0nMTAuNDknJTNFJTNDL2xpbmUlM0UlM0Mvc3ZnJTNFIik7IH0KIHNwYW4uaWNvbi1jYXJ0IHsKLSAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMTExJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NjaXJjbGUgY3g9JzknIGN5PScyMScgcj0nMSclM0UlM0MvY2lyY2xlJTNFJTNDY2lyY2xlIGN4PScyMCcgY3k9JzIxJyByPScxJyUzRSUzQy9jaXJjbGUlM0UlM0NwYXRoIGQ9J00xIDFoNGwyLjY4IDEzLjM5YTIgMiAwIDAgMCAyIDEuNjFoOS43MmEyIDIgMCAwIDAgMi0xLjYxTDIzIDZINiclM0UlM0MvcGF0aCUzRSUzQy9zdmclM0UiKTsgfQorICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMwMzIzNGInIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ2NpcmNsZSBjeD0nOScgY3k9JzIxJyByPScxJyUzRSUzQy9jaXJjbGUlM0UlM0NjaXJjbGUgY3g9JzIwJyBjeT0nMjEnIHI9JzEnJTNFJTNDL2NpcmNsZSUzRSUzQ3BhdGggZD0nTTEgMWg0bDIuNjggMTMuMzlhMiAyIDAgMCAwIDIgMS42MWg5LjcyYTIgMiAwIDAgMCAyLTEuNjFMMjMgNkg2JyUzRSUzQy9wYXRoJTNFJTNDL3N2ZyUzRSIpOyB9CiBzcGFuLmljb24tdXBsb2FkIHsKLSAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMTExJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NwYXRoIGQ9J00yMSAxNXY0YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0ydi00JyUzRSUzQy9wYXRoJTNFJTNDcG9seWxpbmUgcG9pbnRzPScxNyA4IDEyIDMgNyA4JyUzRSUzQy9wb2x5bGluZSUzRSUzQ2xpbmUgeDE9JzEyJyB5MT0nMycgeDI9JzEyJyB5Mj0nMTUnJTNFJTNDL2xpbmUlM0UlM0Mvc3ZnJTNFIik7IH0KKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMDMyMzRiJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NwYXRoIGQ9J00yMSAxNXY0YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0ydi00JyUzRSUzQy9wYXRoJTNFJTNDcG9seWxpbmUgcG9pbnRzPScxNyA4IDEyIDMgNyA4JyUzRSUzQy9wb2x5bGluZSUzRSUzQ2xpbmUgeDE9JzEyJyB5MT0nMycgeDI9JzEyJyB5Mj0nMTUnJTNFJTNDL2xpbmUlM0UlM0Mvc3ZnJTNFIik7IH0KIHNwYW4uaWNvbi11c2VyIHsKLSAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMTExJyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NwYXRoIGQ9J00yMCAyMXYtMmE0IDQgMCAwIDAtNC00SDhhNCA0IDAgMCAwLTQgNHYyJyUzRSUzQy9wYXRoJTNFJTNDY2lyY2xlIGN4PScxMicgY3k9JzcnIHI9JzQnJTNFJTNDL2NpcmNsZSUzRSUzQy9zdmclM0UiKTsgfQorICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMwMzIzNGInIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ3BhdGggZD0nTTIwIDIxdi0yYTQgNCAwIDAgMC00LTRIOGE0IDQgMCAwIDAtNCA0djInJTNFJTNDL3BhdGglM0UlM0NjaXJjbGUgY3g9JzEyJyBjeT0nNycgcj0nNCclM0UlM0MvY2lyY2xlJTNFJTNDL3N2ZyUzRSIpOyB9CiAKIC8qCiAgIERlZmluaXRpb25zIGZvciB1dGlsaXRpZXMgYW5kIGhlbHBlciBjbGFzc2VzLgpAQCAtMTYwNCw3ICsxNTk3LDcgQEAKIC8qIFV0aWxpdHkgbW9kdWxlIENTUyB2YXJpYWJsZSBkZWZpbml0aW9ucyAqLwogOnJvb3QgewogICAtLWdlbmVyaWMtYm9yZGVyLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMyk7Ci0gIC0tZ2VuZXJpYy1ib3gtc2hhZG93OiAwIDAuMjVyZW0gMC4yNXJlbSAwIHJnYmEoMCwgMCwgMCwgMC4xMjUpLCAwIDAuMTI1cmVtIDAuMTI1cmVtIC0wLjEyNXJlbSByZ2JhKDAsIDAsIDAsIDAuMjUpOyB9CisgIC0tZ2VuZXJpYy1ib3gtc2hhZG93OiAwIDAuMjg1NzE0Mjg1N3JlbSAwLjI4NTcxNDI4NTdyZW0gMCByZ2JhKDAsIDAsIDAsIDAuMTI1KSwgMCAwLjE0Mjg1NzE0MjlyZW0gMC4xNDI4NTcxNDI5cmVtIC0wLjE0Mjg1NzE0MjlyZW0gcmdiYSgwLCAwLCAwLCAwLjEyNSk7IH0KIAogLmhpZGRlbiB7CiAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfQpAQCAtMTYyMiw3ICsxNjE1LDcgQEAKICAgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50OyB9CiAKIC5ib3JkZXJlZCB7Ci0gIGJvcmRlcjogMC4wNjI1cmVtIHNvbGlkIHZhcigtLWdlbmVyaWMtYm9yZGVyLWNvbG9yKSAhaW1wb3J0YW50OyB9CisgIGJvcmRlcjogMC4wNzE0Mjg1NzE0cmVtIHNvbGlkIHZhcigtLWdlbmVyaWMtYm9yZGVyLWNvbG9yKSAhaW1wb3J0YW50OyB9CiAKIC5yb3VuZGVkIHsKICAgYm9yZGVyLXJhZGl1czogdmFyKC0tdW5pdmVyc2FsLWJvcmRlci1yYWRpdXMpICFpbXBvcnRhbnQ7IH0KQEAgLTE2OTcsNCArMTY5MCwxNCBAQAogICAgIGNsaXAtcGF0aDogaW5zZXQoMTAwJSkgIWltcG9ydGFudDsKICAgICBvdmVyZmxvdzogaGlkZGVuICFpbXBvcnRhbnQ7IH0gfQogCi0vKiMgc291cmNlTWFwcGluZ1VSTD1taW5pLWRlZmF1bHQuY3NzLm1hcCAqLworLyojIHNvdXJjZU1hcHBpbmdVUkw9bWluaS1jdXN0b20uY3NzLm1hcCAqLworCitpbWdbYWx0PSJTVCBsb2dvIl0geyBkaXNwbGF5OiBibG9jazsgbWFyZ2luOiBhdXRvOyB3aWR0aDogNzUlOyBtYXgtd2lkdGg6IDI1MHB4OyBtaW4td2lkdGg6IDcxcHg7IH0KK2ltZ1thbHQ9IkN1YmUgbG9nbyJdIHsgZmxvYXQ6IHJpZ2h0OyB3aWR0aDogMzAlOyBtYXgtd2lkdGg6IDEwcmVtOyBtaW4td2lkdGg6IDhyZW07IHBhZGRpbmctcmlnaHQ6IDFyZW07fQorCisuZmlndXJlIHsKKyAgZGlzcGxheTogYmxvY2s7CisgIG1hcmdpbi1sZWZ0OiBhdXRvOworICBtYXJnaW4tcmlnaHQ6IGF1dG87CisgIHRleHQtYWxpZ246IGNlbnRlcjsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9faHRtcmVzYy9zdF9sb2dvLnBuZyBiL19odG1yZXNjL3N0X2xvZ28ucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjgwMDU3Li4wMDAwMDAwCi0tLSBhL19odG1yZXNjL3N0X2xvZ28ucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvX2h0bXJlc2Mvc3RfbG9nb18yMDIwLnBuZyBiL19odG1yZXNjL3N0X2xvZ29fMjAyMC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZjZWJiNQotLS0gL2Rldi9udWxsCisrKyBiL19odG1yZXNjL3N0X2xvZ29fMjAyMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgo=