ZGlmZiAtLWdpdCBhL0luYy9MZWdhY3kvc3RtMzJfaGFsX2xlZ2FjeS5oIGIvSW5jL0xlZ2FjeS9zdG0zMl9oYWxfbGVnYWN5LmgKaW5kZXggODg3ZDY0Yi4uY2RjNzBlMyAxMDA2NDQKLS0tIGEvSW5jL0xlZ2FjeS9zdG0zMl9oYWxfbGVnYWN5LmgKKysrIGIvSW5jL0xlZ2FjeS9zdG0zMl9oYWxfbGVnYWN5LmgKQEAgLTIzNiwxMiArMjM2LDEyIEBACiAjZGVmaW5lIERBQ19XQVZFR0VORVJBVElPTl9OT0lTRSAgICAgICAgICAgICAgICAgICAgICAgIERBQ19XQVZFX05PSVNFCiAjZGVmaW5lIERBQ19XQVZFR0VORVJBVElPTl9UUklBTkdMRSAgICAgICAgICAgICAgICAgICAgIERBQ19XQVZFX1RSSUFOR0xFCiAKLSNpZiBkZWZpbmVkKFNUTTMyRzQpCi0jZGVmaW5lIERBQ19DSElQQ09OTkVDVF9ESVNBQkxFICAgICAgIChEQUNfQ0hJUENPTk5FQ1RfRVhURVJOQUwgfCBEQUNfQ0hJUENPTk5FQ1RfQk9USCkKLSNkZWZpbmUgREFDX0NISVBDT05ORUNUX0VOQUJMRSAgICAgICAgKERBQ19DSElQQ09OTkVDVF9JTlRFUk5BTCB8IERBQ19DSElQQ09OTkVDVF9CT1RIKQorI2lmIGRlZmluZWQoU1RNMzJHNCkgfHwgZGVmaW5lZChTVE0zMkg3KQorI2RlZmluZSBEQUNfQ0hJUENPTk5FQ1RfRElTQUJMRSAgICAgICBEQUNfQ0hJUENPTk5FQ1RfRVhURVJOQUwKKyNkZWZpbmUgREFDX0NISVBDT05ORUNUX0VOQUJMRSAgICAgICAgREFDX0NISVBDT05ORUNUX0lOVEVSTkFMCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoU1RNMzJMMSkgfHwgZGVmaW5lZChTVE0zMkw0KSB8fCBkZWZpbmVkKFNUTTMyRzApCisjaWYgZGVmaW5lZChTVE0zMkwxKSB8fCBkZWZpbmVkKFNUTTMyTDQpIHx8IGRlZmluZWQoU1RNMzJHMCkgfHwgZGVmaW5lZChTVE0zMkw1KSB8fCBkZWZpbmVkKFNUTTMySDcpIHx8IGRlZmluZWQoU1RNMzJGNCkgfHwgZGVmaW5lZChTVE0zMkc0KQogI2RlZmluZSBIQUxfREFDX01TUF9JTklUX0NCX0lEICAgICAgIEhBTF9EQUNfTVNQSU5JVF9DQl9JRAogI2RlZmluZSBIQUxfREFDX01TUF9ERUlOSVRfQ0JfSUQgICAgIEhBTF9EQUNfTVNQREVJTklUX0NCX0lECiAjZW5kaWYKQEAgLTMwNiw4ICszMDYsMTcgQEAKICNkZWZpbmUgSEFMX0RNQU1VWF9SRVFVRVNUX0dFTl9GQUxMSU5HICAgICAgICAgICBIQUxfRE1BTVVYX1JFUV9HRU5fRkFMTElORwogI2RlZmluZSBIQUxfRE1BTVVYX1JFUVVFU1RfR0VOX1JJU0lOR19GQUxMSU5HICAgIEhBTF9ETUFNVVhfUkVRX0dFTl9SSVNJTkdfRkFMTElORwogCisjaWYgZGVmaW5lZChTVE0zMkw0UjV4eCkgfHwgZGVmaW5lZChTVE0zMkw0Ujl4eCkgfHwgZGVmaW5lZChTVE0zMkw0Ujl4eCkgfHwgZGVmaW5lZChTVE0zMkw0UzV4eCkgfHwgZGVmaW5lZChTVE0zMkw0Uzd4eCkgfHwgZGVmaW5lZChTVE0zMkw0Uzl4eCkKKyNkZWZpbmUgRE1BX1JFUVVFU1RfRENNSV9QU1NJICAgICAgICAgICAgICAgICAgICBETUFfUkVRVUVTVF9EQ01JCisjZW5kaWYKKwogI2VuZGlmIC8qIFNUTTMyTDQgKi8KIAorI2lmIGRlZmluZWQoU1RNMzJHMCkKKyNkZWZpbmUgRE1BX1JFUVVFU1RfREFDMV9DSEFOTkVMMSAgICAgICAgICAgICAgICBETUFfUkVRVUVTVF9EQUMxX0NIMQorI2RlZmluZSBETUFfUkVRVUVTVF9EQUMxX0NIQU5ORUwyICAgICAgICAgICAgICAgIERNQV9SRVFVRVNUX0RBQzFfQ0gyCisjZW5kaWYKKwogI2lmIGRlZmluZWQoU1RNMzJINykKIAogI2RlZmluZSBETUFfUkVRVUVTVF9EQUMxIERNQV9SRVFVRVNUX0RBQzFfQ0gxCkBAIC0zNjUsNiArMzc0LDkgQEAKICNkZWZpbmUgREZTRE1fRklMVEVSX0VYVF9UUklHX0xQVElNMiAgICAgICAgICAgICAgIERGU0RNX0ZJTFRFUl9FWFRfVFJJR19MUFRJTTJfT1VUCiAjZGVmaW5lIERGU0RNX0ZJTFRFUl9FWFRfVFJJR19MUFRJTTMgICAgICAgICAgICAgICBERlNETV9GSUxURVJfRVhUX1RSSUdfTFBUSU0zX09VVAogCisjZGVmaW5lIERBQ19UUklHR0VSX0xQMV9PVVQgICAgICAgICAgICAgICAgICAgICAgICBEQUNfVFJJR0dFUl9MUFRJTTFfT1VUCisjZGVmaW5lIERBQ19UUklHR0VSX0xQMl9PVVQgICAgICAgICAgICAgICAgICAgICAgICBEQUNfVFJJR0dFUl9MUFRJTTJfT1VUCisKICNlbmRpZiAvKiBTVE0zMkg3ICovCiAKIC8qKgpAQCAtNDYwLDcgKzQ3Miw5IEBACiAjZGVmaW5lIEZMQVNIX0ZMQUdfU05FQ0NFX0JBTksyUlIgRkxBU0hfRkxBR19TTkVDQ0VSUl9CQU5LMgogI2RlZmluZSBGTEFTSF9GTEFHX0RCRUNDRV9CQU5LMlJSIEZMQVNIX0ZMQUdfREJFQ0NFUlJfQkFOSzIKICNkZWZpbmUgRkxBU0hfRkxBR19TVFJCRVJfQkFOSzJSICBGTEFTSF9GTEFHX1NUUkJFUlJfQkFOSzIKLSNlbmRpZgorI2RlZmluZSBGTEFTSF9GTEFHX1dEVyAgICAgICAgICAgIEZMQVNIX0ZMQUdfV0JORQorI2RlZmluZSBPQl9XUlBfU0VDVE9SX0FsbCAgICAgICAgIE9CX1dSUF9TRUNUT1JfQUxMCisjZW5kaWYgLyogU1RNMzJINyAqLwogCiAvKioKICAgKiBAfQpAQCAtNTY0LDcgKzU3OCwxNCBAQAogI2RlZmluZSBHUElPX0FGOV9TRElPMiAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUElPX0FGOV9TRE1NQzIKICNkZWZpbmUgR1BJT19BRjEwX1NESU8yICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BJT19BRjEwX1NETU1DMgogI2RlZmluZSBHUElPX0FGMTFfU0RJTzIgICAgICAgICAgICAgICAgICAgICAgICAgICBHUElPX0FGMTFfU0RNTUMyCi0jZW5kaWYKKworI2lmIGRlZmluZWQgKFNUTTMySDc0M3h4KSB8fCBkZWZpbmVkIChTVE0zMkg3NTN4eCkgIHx8IGRlZmluZWQgKFNUTTMySDc1MHh4KSB8fCBkZWZpbmVkIChTVE0zMkg3NDJ4eCkgfHwgXAorICAgIGRlZmluZWQgKFNUTTMySDc0NXh4KSB8fCBkZWZpbmVkIChTVE0zMkg3NTV4eCkgIHx8IGRlZmluZWQgKFNUTTMySDc0N3h4KSB8fCBkZWZpbmVkIChTVE0zMkg3NTd4eCkKKyNkZWZpbmUgR1BJT19BRjEwX09URzJfSFMgIEdQSU9fQUYxMF9PVEcyX0ZTCisjZGVmaW5lIEdQSU9fQUYxMF9PVEcxX0ZTICBHUElPX0FGMTBfT1RHMV9IUworI2RlZmluZSBHUElPX0FGMTJfT1RHMl9GUyAgR1BJT19BRjEyX09URzFfRlMKKyNlbmRpZiAvKlNUTTMySDc0M3h4IHx8IFNUTTMySDc1M3h4IHx8IFNUTTMySDc1MHh4IHx8IFNUTTMySDc0Mnh4IHx8IFNUTTMySDc0NXh4IHx8IFNUTTMySDc1NXh4IHx8IFNUTTMySDc0N3h4IHx8IFNUTTMySDc1N3h4ICovCisjZW5kaWYgLyogU1RNMzJINyAqLwogCiAjZGVmaW5lIEdQSU9fQUYwX0xQVElNICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQSU9fQUYwX0xQVElNMQogI2RlZmluZSBHUElPX0FGMV9MUFRJTSAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUElPX0FGMV9MUFRJTTEKQEAgLTczNSw2ICs3NTYsNjYgQEAKICNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNRkVWOF9USU1FQ01QMiBIUlRJTV9PVVRQVVRTRVRfVElNRVZfOAogI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1GRVY5X1RJTUVDTVAzIEhSVElNX09VVFBVVFNFVF9USU1FVl85CiAjZW5kaWYgLyogU1RNMzJINyAqLworCisjaWYgZGVmaW5lZChTVE0zMkYzKQorLyoqIEBicmllZiBDb25zdGFudHMgZGVmaW5pbmcgYXZhaWxhYmxlIHNvdXJjZXMgYXNzb2NpYXRlZCB0byBleHRlcm5hbCBldmVudHMuCisgICovCisjZGVmaW5lIEhSVElNX0VWRU5UU1JDXzEgICAgICAgICAgICAgICgweDAwMDAwMDAwVSkKKyNkZWZpbmUgSFJUSU1fRVZFTlRTUkNfMiAgICAgICAgICAgICAgKEhSVElNX0VFQ1IxX0VFMVNSQ18wKQorI2RlZmluZSBIUlRJTV9FVkVOVFNSQ18zICAgICAgICAgICAgICAoSFJUSU1fRUVDUjFfRUUxU1JDXzEpCisjZGVmaW5lIEhSVElNX0VWRU5UU1JDXzQgICAgICAgICAgICAgIChIUlRJTV9FRUNSMV9FRTFTUkNfMSB8IEhSVElNX0VFQ1IxX0VFMVNSQ18wKQorCisvKiogQGJyaWVmIENvbnN0YW50cyBkZWZpbmluZyB0aGUgZXZlbnRzIHRoYXQgY2FuIGJlIHNlbGVjdGVkIHRvIGNvbmZpZ3VyZSB0aGUKKyAgKiAgICAgICAgc2V0L3Jlc2V0IGNyb3NzYmFyIG9mIGEgdGltZXIgb3V0cHV0CisgICovCisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1FVl8xICAgICAgIChIUlRJTV9TRVQxUl9USU1FVk5UMSkKKyNkZWZpbmUgSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzIgICAgICAgKEhSVElNX1NFVDFSX1RJTUVWTlQyKQorI2RlZmluZSBIUlRJTV9PVVRQVVRTRVRfVElNRVZfMyAgICAgICAoSFJUSU1fU0VUMVJfVElNRVZOVDMpCisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1FVl80ICAgICAgIChIUlRJTV9TRVQxUl9USU1FVk5UNCkKKyNkZWZpbmUgSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzUgICAgICAgKEhSVElNX1NFVDFSX1RJTUVWTlQ1KQorI2RlZmluZSBIUlRJTV9PVVRQVVRTRVRfVElNRVZfNiAgICAgICAoSFJUSU1fU0VUMVJfVElNRVZOVDYpCisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1FVl83ICAgICAgIChIUlRJTV9TRVQxUl9USU1FVk5UNykKKyNkZWZpbmUgSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzggICAgICAgKEhSVElNX1NFVDFSX1RJTUVWTlQ4KQorI2RlZmluZSBIUlRJTV9PVVRQVVRTRVRfVElNRVZfOSAgICAgICAoSFJUSU1fU0VUMVJfVElNRVZOVDkpCisKKyNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNRVZfMSAgICAgKEhSVElNX1JTVDFSX1RJTUVWTlQxKQorI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1FVl8yICAgICAoSFJUSU1fUlNUMVJfVElNRVZOVDIpCisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUVWXzMgICAgIChIUlRJTV9SU1QxUl9USU1FVk5UMykKKyNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNRVZfNCAgICAgKEhSVElNX1JTVDFSX1RJTUVWTlQ0KQorI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1FVl81ICAgICAoSFJUSU1fUlNUMVJfVElNRVZOVDUpCisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUVWXzYgICAgIChIUlRJTV9SU1QxUl9USU1FVk5UNikKKyNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNRVZfNyAgICAgKEhSVElNX1JTVDFSX1RJTUVWTlQ3KQorI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1FVl84ICAgICAoSFJUSU1fUlNUMVJfVElNRVZOVDgpCisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUVWXzkgICAgIChIUlRJTV9SU1QxUl9USU1FVk5UOSkKKworLyoqIEBicmllZiBDb25zdGFudHMgZGVmaW5pbmcgdGhlIGV2ZW50IGZpbHRlcmluZyBhcHBsaWVkIHRvIGV4dGVybmFsIGV2ZW50cworICAqICAgICAgICBieSBhIHRpbWVyCisgICovCisjZGVmaW5lIEhSVElNX1RJTUVWRU5URklMVEVSX05PTkUgICAgICAgICAgICAgKDB4MDAwMDAwMDBVKQorI2RlZmluZSBIUlRJTV9USU1FVkVOVEZJTFRFUl9CTEFOS0lOR0NNUDEgICAgIChIUlRJTV9FRUZSMV9FRTFGTFRSXzApCisjZGVmaW5lIEhSVElNX1RJTUVWRU5URklMVEVSX0JMQU5LSU5HQ01QMiAgICAgKEhSVElNX0VFRlIxX0VFMUZMVFJfMSkKKyNkZWZpbmUgSFJUSU1fVElNRVZFTlRGSUxURVJfQkxBTktJTkdDTVAzICAgICAoSFJUSU1fRUVGUjFfRUUxRkxUUl8xIHwgSFJUSU1fRUVGUjFfRUUxRkxUUl8wKQorI2RlZmluZSBIUlRJTV9USU1FVkVOVEZJTFRFUl9CTEFOS0lOR0NNUDQgICAgIChIUlRJTV9FRUZSMV9FRTFGTFRSXzIpCisjZGVmaW5lIEhSVElNX1RJTUVWRU5URklMVEVSX0JMQU5LSU5HRkxUUjEgICAgKEhSVElNX0VFRlIxX0VFMUZMVFJfMiB8IEhSVElNX0VFRlIxX0VFMUZMVFJfMCkKKyNkZWZpbmUgSFJUSU1fVElNRVZFTlRGSUxURVJfQkxBTktJTkdGTFRSMiAgICAoSFJUSU1fRUVGUjFfRUUxRkxUUl8yIHwgSFJUSU1fRUVGUjFfRUUxRkxUUl8xKQorI2RlZmluZSBIUlRJTV9USU1FVkVOVEZJTFRFUl9CTEFOS0lOR0ZMVFIzICAgIChIUlRJTV9FRUZSMV9FRTFGTFRSXzIgfCBIUlRJTV9FRUZSMV9FRTFGTFRSXzEgfCBIUlRJTV9FRUZSMV9FRTFGTFRSXzApCisjZGVmaW5lIEhSVElNX1RJTUVWRU5URklMVEVSX0JMQU5LSU5HRkxUUjQgICAgKEhSVElNX0VFRlIxX0VFMUZMVFJfMykKKyNkZWZpbmUgSFJUSU1fVElNRVZFTlRGSUxURVJfQkxBTktJTkdGTFRSNSAgICAoSFJUSU1fRUVGUjFfRUUxRkxUUl8zIHwgSFJUSU1fRUVGUjFfRUUxRkxUUl8wKQorI2RlZmluZSBIUlRJTV9USU1FVkVOVEZJTFRFUl9CTEFOS0lOR0ZMVFI2ICAgIChIUlRJTV9FRUZSMV9FRTFGTFRSXzMgfCBIUlRJTV9FRUZSMV9FRTFGTFRSXzEpCisjZGVmaW5lIEhSVElNX1RJTUVWRU5URklMVEVSX0JMQU5LSU5HRkxUUjcgICAgKEhSVElNX0VFRlIxX0VFMUZMVFJfMyB8IEhSVElNX0VFRlIxX0VFMUZMVFJfMSB8IEhSVElNX0VFRlIxX0VFMUZMVFJfMCkKKyNkZWZpbmUgSFJUSU1fVElNRVZFTlRGSUxURVJfQkxBTktJTkdGTFRSOCAgICAoSFJUSU1fRUVGUjFfRUUxRkxUUl8zIHwgSFJUSU1fRUVGUjFfRUUxRkxUUl8yKQorI2RlZmluZSBIUlRJTV9USU1FVkVOVEZJTFRFUl9XSU5ET1dJTkdDTVAyICAgIChIUlRJTV9FRUZSMV9FRTFGTFRSXzMgfCBIUlRJTV9FRUZSMV9FRTFGTFRSXzIgfCBIUlRJTV9FRUZSMV9FRTFGTFRSXzApCisjZGVmaW5lIEhSVElNX1RJTUVWRU5URklMVEVSX1dJTkRPV0lOR0NNUDMgICAgKEhSVElNX0VFRlIxX0VFMUZMVFJfMyB8IEhSVElNX0VFRlIxX0VFMUZMVFJfMiB8IEhSVElNX0VFRlIxX0VFMUZMVFJfMSkKKyNkZWZpbmUgSFJUSU1fVElNRVZFTlRGSUxURVJfV0lORE9XSU5HVElNICAgICAoSFJUSU1fRUVGUjFfRUUxRkxUUl8zIHwgSFJUSU1fRUVGUjFfRUUxRkxUUl8yIHwgSFJUSU1fRUVGUjFfRUUxRkxUUl8xIHwgSFJUSU1fRUVGUjFfRUUxRkxUUl8wKQorCisvKiogQGJyaWVmIENvbnN0YW50cyBkZWZpbmluZyB0aGUgRExMIGNhbGlicmF0aW9uIHBlcmlvZHMgKGluIG1pY3JvIHNlY29uZHMpCisgICovCisjZGVmaW5lIEhSVElNX0NBTElCUkFUSU9OUkFURV83MzAwICAgICAgICAgICAgIDB4MDAwMDAwMDBVCisjZGVmaW5lIEhSVElNX0NBTElCUkFUSU9OUkFURV85MTAgICAgICAgICAgICAgIChIUlRJTV9ETExDUl9DQUxSVEVfMCkKKyNkZWZpbmUgSFJUSU1fQ0FMSUJSQVRJT05SQVRFXzExNCAgICAgICAgICAgICAgKEhSVElNX0RMTENSX0NBTFJURV8xKQorI2RlZmluZSBIUlRJTV9DQUxJQlJBVElPTlJBVEVfMTQgICAgICAgICAgICAgICAoSFJUSU1fRExMQ1JfQ0FMUlRFXzEgfCBIUlRJTV9ETExDUl9DQUxSVEVfMCkKKworI2VuZGlmIC8qIFNUTTMyRjMgKi8KIC8qKgogICAqIEB9CiAgICovCkBAIC04NzQsNyArOTU1LDcgQEAKICNkZWZpbmUgT1BBTVBfUEdBQ09OTkVDVF9WTTAgICAgICAgICAgICAgICAgICBPUEFNUF9QR0FfQ09OTkVDVF9JTlZFUlRJTkdJTlBVVF9JTzAKICNkZWZpbmUgT1BBTVBfUEdBQ09OTkVDVF9WTTEgICAgICAgICAgICAgICAgICBPUEFNUF9QR0FfQ09OTkVDVF9JTlZFUlRJTkdJTlBVVF9JTzEKIAotI2lmIGRlZmluZWQoU1RNMzJMMSkgfHwgZGVmaW5lZChTVE0zMkw0KQorI2lmIGRlZmluZWQoU1RNMzJMMSkgfHwgZGVmaW5lZChTVE0zMkw0KSB8fCBkZWZpbmVkKFNUTTMyTDUpIHx8IGRlZmluZWQoU1RNMzJINykgfHwgZGVmaW5lZChTVE0zMkc0KQogI2RlZmluZSBIQUxfT1BBTVBfTVNQX0lOSVRfQ0JfSUQgICAgICAgSEFMX09QQU1QX01TUElOSVRfQ0JfSUQKICNkZWZpbmUgSEFMX09QQU1QX01TUF9ERUlOSVRfQ0JfSUQgICAgIEhBTF9PUEFNUF9NU1BERUlOSVRfQ0JfSUQKICNlbmRpZgpAQCAtOTMzLDcgKzEwMTQsNyBAQAogLyoqCiAgICogQH0KICAgKi8KLQorICAKIC8qKiBAZGVmZ3JvdXAgSEFMX1JUQ19BbGlhc2VkX0RlZmluZXMgSEFMIFJUQyBBbGlhc2VkIERlZmluZXMgbWFpbnRhaW5lZCBmb3IgbGVnYWN5IHB1cnBvc2UKICAgKiBAewogICAqLwpAQCAtOTY1LDYgKzEwNDYsMTYgQEAKICNkZWZpbmUgUlRDX1RBTVBFUlBJTl9QQTAgIFJUQ19UQU1QRVJQSU5fUE9TMQogI2RlZmluZSBSVENfVEFNUEVSUElOX1BJOCAgUlRDX1RBTVBFUlBJTl9QT1MxCiAKKyNpZiBkZWZpbmVkKFNUTTMySDcpCisjZGVmaW5lIFJUQ19UQU1QQ1JfVEFNUFhFICAgICAgICAgIFJUQ19UQU1QRVJfWAorI2RlZmluZSBSVENfVEFNUENSX1RBTVBYSUUgICAgICAgICBSVENfVEFNUEVSX1hfSU5URVJSVVBUCisKKyNkZWZpbmUgUlRDX1RBTVBFUjFfSU5URVJSVVBUICAgICAgUlRDX0lUX1RBTVAxCisjZGVmaW5lIFJUQ19UQU1QRVIyX0lOVEVSUlVQVCAgICAgIFJUQ19JVF9UQU1QMgorI2RlZmluZSBSVENfVEFNUEVSM19JTlRFUlJVUFQgICAgICBSVENfSVRfVEFNUDMKKyNkZWZpbmUgUlRDX0FMTF9UQU1QRVJfSU5URVJSVVBUICAgUlRDX0lUX1RBTVBBTEwKKyNlbmRpZiAvKiBTVE0zMkg3ICovCisKIC8qKgogICAqIEB9CiAgICovCkBAIC0xMzU4LDYgKzE0NDksMzAgQEAKIAogI2RlZmluZSBIQVNIX0hNQUNLZXlUeXBlX1Nob3J0S2V5ICBIQVNIX0hNQUNfS0VZVFlQRV9TSE9SVEtFWQogI2RlZmluZSBIQVNIX0hNQUNLZXlUeXBlX0xvbmdLZXkgICBIQVNIX0hNQUNfS0VZVFlQRV9MT05HS0VZCisKKyNpZiBkZWZpbmVkKFNUTTMyTDQpIHx8IGRlZmluZWQoU1RNMzJMNSkgfHwgZGVmaW5lZChTVE0zMkY0KSB8fCBkZWZpbmVkKFNUTTMyRjcpIHx8IGRlZmluZWQoU1RNMzJINykKKworI2RlZmluZSBIQUxfSEFTSF9NRDVfQWNjdW11bGF0ZSAgICAgICAgICAgICAgICBIQUxfSEFTSF9NRDVfQWNjbWx0CisjZGVmaW5lIEhBTF9IQVNIX01ENV9BY2N1bXVsYXRlX0VuZCAgICAgICAgICAgIEhBTF9IQVNIX01ENV9BY2NtbHRfRW5kCisjZGVmaW5lIEhBTF9IQVNIX01ENV9BY2N1bXVsYXRlX0lUICAgICAgICAgICAgIEhBTF9IQVNIX01ENV9BY2NtbHRfSVQKKyNkZWZpbmUgSEFMX0hBU0hfTUQ1X0FjY3VtdWxhdGVfRW5kX0lUICAgICAgICAgSEFMX0hBU0hfTUQ1X0FjY21sdF9FbmRfSVQKKworI2RlZmluZSBIQUxfSEFTSF9TSEExX0FjY3VtdWxhdGUgICAgICAgICAgICAgICBIQUxfSEFTSF9TSEExX0FjY21sdAorI2RlZmluZSBIQUxfSEFTSF9TSEExX0FjY3VtdWxhdGVfRW5kICAgICAgICAgICBIQUxfSEFTSF9TSEExX0FjY21sdF9FbmQKKyNkZWZpbmUgSEFMX0hBU0hfU0hBMV9BY2N1bXVsYXRlX0lUICAgICAgICAgICAgSEFMX0hBU0hfU0hBMV9BY2NtbHRfSVQKKyNkZWZpbmUgSEFMX0hBU0hfU0hBMV9BY2N1bXVsYXRlX0VuZF9JVCAgICAgICAgSEFMX0hBU0hfU0hBMV9BY2NtbHRfRW5kX0lUCisKKyNkZWZpbmUgSEFMX0hBU0hFeF9TSEEyMjRfQWNjdW11bGF0ZSAgICAgICAgICAgSEFMX0hBU0hFeF9TSEEyMjRfQWNjbWx0CisjZGVmaW5lIEhBTF9IQVNIRXhfU0hBMjI0X0FjY3VtdWxhdGVfRW5kICAgICAgIEhBTF9IQVNIRXhfU0hBMjI0X0FjY21sdF9FbmQKKyNkZWZpbmUgSEFMX0hBU0hFeF9TSEEyMjRfQWNjdW11bGF0ZV9JVCAgICAgICAgSEFMX0hBU0hFeF9TSEEyMjRfQWNjbWx0X0lUCisjZGVmaW5lIEhBTF9IQVNIRXhfU0hBMjI0X0FjY3VtdWxhdGVfRW5kX0lUICAgIEhBTF9IQVNIRXhfU0hBMjI0X0FjY21sdF9FbmRfSVQKKworI2RlZmluZSBIQUxfSEFTSEV4X1NIQTI1Nl9BY2N1bXVsYXRlICAgICAgICAgICBIQUxfSEFTSEV4X1NIQTI1Nl9BY2NtbHQKKyNkZWZpbmUgSEFMX0hBU0hFeF9TSEEyNTZfQWNjdW11bGF0ZV9FbmQgICAgICAgSEFMX0hBU0hFeF9TSEEyNTZfQWNjbWx0X0VuZAorI2RlZmluZSBIQUxfSEFTSEV4X1NIQTI1Nl9BY2N1bXVsYXRlX0lUICAgICAgICBIQUxfSEFTSEV4X1NIQTI1Nl9BY2NtbHRfSVQKKyNkZWZpbmUgSEFMX0hBU0hFeF9TSEEyNTZfQWNjdW11bGF0ZV9FbmRfSVQgICAgSEFMX0hBU0hFeF9TSEEyNTZfQWNjbWx0X0VuZF9JVAorCisjZW5kaWYgIC8qIFNUTTMyTDQgfHwgU1RNMzJMNSB8fCBTVE0zMkY0IHx8IFNUTTMyRjcgfHwgU1RNMzJINyAqLwogLyoqCiAgICogQH0KICAgKi8KQEAgLTEzODAsNiArMTQ5NSwxMyBAQAogI2VuZGlmCiAjZGVmaW5lIEhBTF9BRENfRW5hYmxlQnVmZmVyX0NtZChjbWQpICAoKChjbWQpPT1FTkFCTEUpID8gSEFMX0FEQ0V4X0VuYWJsZVZSRUZJTlQoKSA6IEhBTF9BRENFeF9EaXNhYmxlVlJFRklOVCgpKQogI2RlZmluZSBIQUxfQURDX0VuYWJsZUJ1ZmZlclNlbnNvcl9DbWQoY21kKSAoKChjbWQpPT1FTkFCTEUpID8gIEhBTF9BRENFeF9FbmFibGVWUkVGSU5UVGVtcFNlbnNvcigpIDogSEFMX0FEQ0V4X0Rpc2FibGVWUkVGSU5UVGVtcFNlbnNvcigpKQorI2lmIGRlZmluZWQoU1RNMzJIN0EzeHgpIHx8IGRlZmluZWQoU1RNMzJIN0IzeHgpIHx8IGRlZmluZWQoU1RNMzJIN0IweHgpIHx8IGRlZmluZWQoU1RNMzJIN0EzeHhRKSB8fCBkZWZpbmVkKFNUTTMySDdCM3h4USkgfHwgZGVmaW5lZChTVE0zMkg3QjB4eFEpCisjZGVmaW5lIEhBTF9FbmFibGVTUkRvbWFpbkRCR1N0b3BNb2RlICAgICAgSEFMX0VuYWJsZURvbWFpbjNEQkdTdG9wTW9kZQorI2RlZmluZSBIQUxfRGlzYWJsZVNSRG9tYWluREJHU3RvcE1vZGUgICAgIEhBTF9EaXNhYmxlRG9tYWluM0RCR1N0b3BNb2RlCisjZGVmaW5lIEhBTF9FbmFibGVTUkRvbWFpbkRCR1N0YW5kYnlNb2RlICAgSEFMX0VuYWJsZURvbWFpbjNEQkdTdGFuZGJ5TW9kZQorI2RlZmluZSBIQUxfRGlzYWJsZVNSRG9tYWluREJHU3RhbmRieU1vZGUgIEhBTF9EaXNhYmxlRG9tYWluM0RCR1N0YW5kYnlNb2RlCisjZW5kaWYgLyogU1RNMzJIN0EzeHggfHwgU1RNMzJIN0IzeHggfHwgU1RNMzJIN0IweHggfHwgU1RNMzJIN0EzeHhRIHx8IFNUTTMySDdCM3h4USAgfHwgU1RNMzJIN0IweHhRICovCisKIC8qKgogICAqIEB9CiAgICovCkBAIC0xNDA5LDE2ICsxNTMxLDE4IEBACiAKICNkZWZpbmUgSEFMX0kyQ0Zhc3RNb2RlUGx1c0NvbmZpZyhTWVNDRkdfSTJDRmFzdE1vZGVQbHVzLCBjbWQpICgoKGNtZCk9PUVOQUJMRSk/IEhBTF9JMkNFeF9FbmFibGVGYXN0TW9kZVBsdXMoU1lTQ0ZHX0kyQ0Zhc3RNb2RlUGx1cyk6IEhBTF9JMkNFeF9EaXNhYmxlRmFzdE1vZGVQbHVzKFNZU0NGR19JMkNGYXN0TW9kZVBsdXMpKQogCi0jaWYgZGVmaW5lZChTVE0zMkg3KSB8fCBkZWZpbmVkKFNUTTMyV0IpIHx8IGRlZmluZWQoU1RNMzJHMCkgfHwgZGVmaW5lZChTVE0zMkY0KSB8fCBkZWZpbmVkKFNUTTMyRjcpIHx8IGRlZmluZWQoU1RNMzJMMCkgfHwgZGVmaW5lZChTVE0zMkw0KSB8fCBkZWZpbmVkKFNUTTMyRzQpCisjaWYgZGVmaW5lZChTVE0zMkg3KSB8fCBkZWZpbmVkKFNUTTMyV0IpIHx8IGRlZmluZWQoU1RNMzJHMCkgfHwgZGVmaW5lZChTVE0zMkYwKSB8fCBkZWZpbmVkKFNUTTMyRjEpIHx8IGRlZmluZWQoU1RNMzJGMikgfHwgZGVmaW5lZChTVE0zMkYzKSB8fCBkZWZpbmVkKFNUTTMyRjQpIHx8IGRlZmluZWQoU1RNMzJGNykgfHwgZGVmaW5lZChTVE0zMkwwKSB8fCBkZWZpbmVkKFNUTTMyTDQpIHx8IGRlZmluZWQoU1RNMzJMNSkgfHwgZGVmaW5lZChTVE0zMkc0KQogI2RlZmluZSBIQUxfSTJDX01hc3Rlcl9TZXF1ZW50aWFsX1RyYW5zbWl0X0lUICBIQUxfSTJDX01hc3Rlcl9TZXFfVHJhbnNtaXRfSVQKICNkZWZpbmUgSEFMX0kyQ19NYXN0ZXJfU2VxdWVudGlhbF9SZWNlaXZlX0lUICAgSEFMX0kyQ19NYXN0ZXJfU2VxX1JlY2VpdmVfSVQKICNkZWZpbmUgSEFMX0kyQ19TbGF2ZV9TZXF1ZW50aWFsX1RyYW5zbWl0X0lUICAgSEFMX0kyQ19TbGF2ZV9TZXFfVHJhbnNtaXRfSVQKICNkZWZpbmUgSEFMX0kyQ19TbGF2ZV9TZXF1ZW50aWFsX1JlY2VpdmVfSVQgICAgSEFMX0kyQ19TbGF2ZV9TZXFfUmVjZWl2ZV9JVAorI2VuZGlmIC8qIFNUTTMySDcgfHwgU1RNMzJXQiAgfHwgU1RNMzJHMCB8fCBTVE0zMkYwIHx8IFNUTTMyRjEgfHwgU1RNMzJGMiB8fCBTVE0zMkYzIHx8IFNUTTMyRjQgfHwgU1RNMzJGNyB8fCBTVE0zMkwwIHx8IFNUTTMyTDQgfHwgU1RNMzJMNSB8fCBTVE0zMkc0ICovCisjaWYgZGVmaW5lZChTVE0zMkg3KSB8fCBkZWZpbmVkKFNUTTMyV0IpIHx8IGRlZmluZWQoU1RNMzJHMCkgfHwgZGVmaW5lZChTVE0zMkY0KSB8fCBkZWZpbmVkKFNUTTMyRjcpIHx8IGRlZmluZWQoU1RNMzJMMCkgfHwgZGVmaW5lZChTVE0zMkw0KSB8fCBkZWZpbmVkKFNUTTMyTDUpIHx8IGRlZmluZWQoU1RNMzJHNCkKICNkZWZpbmUgSEFMX0kyQ19NYXN0ZXJfU2VxdWVudGlhbF9UcmFuc21pdF9ETUEgSEFMX0kyQ19NYXN0ZXJfU2VxX1RyYW5zbWl0X0RNQQogI2RlZmluZSBIQUxfSTJDX01hc3Rlcl9TZXF1ZW50aWFsX1JlY2VpdmVfRE1BICBIQUxfSTJDX01hc3Rlcl9TZXFfUmVjZWl2ZV9ETUEKICNkZWZpbmUgSEFMX0kyQ19TbGF2ZV9TZXF1ZW50aWFsX1RyYW5zbWl0X0RNQSAgSEFMX0kyQ19TbGF2ZV9TZXFfVHJhbnNtaXRfRE1BCiAjZGVmaW5lIEhBTF9JMkNfU2xhdmVfU2VxdWVudGlhbF9SZWNlaXZlX0RNQSAgIEhBTF9JMkNfU2xhdmVfU2VxX1JlY2VpdmVfRE1BCi0jZW5kaWYgLyogU1RNMzJINyB8fCBTVE0zMldCICB8fCBTVE0zMkcwIHx8IFNUTTMyRjQgfHwgU1RNMzJGNyB8fCBTVE0zMkwwIHx8IFNUTTMyTDQgKi8KKyNlbmRpZiAvKiBTVE0zMkg3IHx8IFNUTTMyV0IgIHx8IFNUTTMyRzAgfHwgU1RNMzJGNCB8fCBTVE0zMkY3IHx8IFNUTTMyTDAgfHwgU1RNMzJMNCB8fCBTVE0zMkw1IHx8IFNUTTMyRzQgKi8KIAogI2lmIGRlZmluZWQoU1RNMzJGNCkKICNkZWZpbmUgSEFMX0ZNUEkyQ19NYXN0ZXJfU2VxdWVudGlhbF9UcmFuc21pdF9JVCAgSEFMX0ZNUEkyQ19NYXN0ZXJfU2VxX1RyYW5zbWl0X0lUCkBAIC0xNDM3LDYgKzE1NjEsMTMgQEAKIC8qKiBAZGVmZ3JvdXAgSEFMX1BXUl9BbGlhc2VkIEhBTCBQV1IgQWxpYXNlZCBtYWludGFpbmVkIGZvciBsZWdhY3kgcHVycG9zZQogICAqIEB7CiAgICovCisKKyNpZiBkZWZpbmVkKFNUTTMyRzApCisjZGVmaW5lIEhBTF9QV1JfQ29uZmlnUFZEICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQUxfUFdSRXhfQ29uZmlnUFZECisjZGVmaW5lIEhBTF9QV1JfRW5hYmxlUFZEICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQUxfUFdSRXhfRW5hYmxlUFZECisjZGVmaW5lIEhBTF9QV1JfRGlzYWJsZVBWRCAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQUxfUFdSRXhfRGlzYWJsZVBWRAorI2RlZmluZSBIQUxfUFdSX1BWRF9JUlFIYW5kbGVyICAgICAgICAgICAgICAgICAgICAgICAgSEFMX1BXUkV4X1BWRF9JUlFIYW5kbGVyCisjZW5kaWYKICNkZWZpbmUgSEFMX1BXUl9QVkRDb25maWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTF9QV1JfQ29uZmlnUFZECiAjZGVmaW5lIEhBTF9QV1JfRGlzYWJsZUJrVXBSZWcgICAgICAgICAgICAgICAgICAgICAgICBIQUxfUFdSRXhfRGlzYWJsZUJrVXBSZWcKICNkZWZpbmUgSEFMX1BXUl9EaXNhYmxlRmxhc2hQb3dlckRvd24gICAgICAgICAgICAgICAgIEhBTF9QV1JFeF9EaXNhYmxlRmxhc2hQb3dlckRvd24KQEAgLTE1MDksMTQgKzE2NDAsMTQgQEAKICNkZWZpbmUgSEFMX1RJTV9ETUFFcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVElNX0RNQUVycm9yCiAjZGVmaW5lIEhBTF9USU1fRE1BQ2FwdHVyZUNwbHQgICAgICAgICAgICAgICAgICAgICAgICAgIFRJTV9ETUFDYXB0dXJlQ3BsdAogI2RlZmluZSBIQUxfVElNRXhfRE1BQ29tbXV0YXRpb25DcGx0ICAgICAgICAgICAgICAgICAgICBUSU1FeF9ETUFDb21tdXRhdGlvbkNwbHQKLSNpZiBkZWZpbmVkKFNUTTMySDcpIHx8IGRlZmluZWQoU1RNMzJHMCkgfHwgZGVmaW5lZChTVE0zMkY3KSB8fCBkZWZpbmVkKFNUTTMyRjQpIHx8IGRlZmluZWQoU1RNMzJMMCkgfHwgZGVmaW5lZChTVE0zMkw0KQorI2lmIGRlZmluZWQoU1RNMzJINykgfHwgZGVmaW5lZChTVE0zMkcwKSB8fCBkZWZpbmVkKFNUTTMyRjApIHx8IGRlZmluZWQoU1RNMzJGMSkgfHwgZGVmaW5lZChTVE0zMkYyKSB8fCBkZWZpbmVkKFNUTTMyRjMpIHx8IGRlZmluZWQoU1RNMzJGNCkgfHwgZGVmaW5lZChTVE0zMkY3KSB8fCBkZWZpbmVkKFNUTTMyTDApIHx8IGRlZmluZWQoU1RNMzJMNCkKICNkZWZpbmUgSEFMX1RJTV9TbGF2ZUNvbmZpZ1N5bmNocm9uaXphdGlvbiAgICAgICAgICAgICAgSEFMX1RJTV9TbGF2ZUNvbmZpZ1N5bmNocm8KICNkZWZpbmUgSEFMX1RJTV9TbGF2ZUNvbmZpZ1N5bmNocm9uaXphdGlvbl9JVCAgICAgICAgICAgSEFMX1RJTV9TbGF2ZUNvbmZpZ1N5bmNocm9fSVQKICNkZWZpbmUgSEFMX1RJTUV4X0NvbW11dGF0aW9uQ2FsbGJhY2sgICAgICAgICAgICAgICAgICAgSEFMX1RJTUV4X0NvbW11dENhbGxiYWNrCiAjZGVmaW5lIEhBTF9USU1FeF9Db25maWdDb21tdXRhdGlvbkV2ZW50ICAgICAgICAgICAgICAgIEhBTF9USU1FeF9Db25maWdDb21tdXRFdmVudAogI2RlZmluZSBIQUxfVElNRXhfQ29uZmlnQ29tbXV0YXRpb25FdmVudF9JVCAgICAgICAgICAgICBIQUxfVElNRXhfQ29uZmlnQ29tbXV0RXZlbnRfSVQKICNkZWZpbmUgSEFMX1RJTUV4X0NvbmZpZ0NvbW11dGF0aW9uRXZlbnRfRE1BICAgICAgICAgICAgSEFMX1RJTUV4X0NvbmZpZ0NvbW11dEV2ZW50X0RNQQotI2VuZGlmIC8qIFNUTTMySDcgfHwgU1RNMzJHMCB8fCBTVE0zMkY3IHx8IFNUTTMyRjQgIHx8IFNUTTMyTDAgKi8KKyNlbmRpZiAvKiBTVE0zMkg3IHx8IFNUTTMyRzAgfHwgU1RNMzJGMCB8fCBTVE0zMkYxIHx8IFNUTTMyRjIgfHwgU1RNMzJGMyB8fCBTVE0zMkY0IHx8IFNUTTMyRjcgfHwgU1RNMzJMMCAqLwogLyoqCiAgICogQH0KICAgKi8KQEAgLTMxMTIsOSArMzI0Myw4IEBACiAjZGVmaW5lIFJDQ19NQ09TT1VSQ0VfUExMQ0xLX05PRElWICBSQ0NfTUNPMVNPVVJDRV9QTExDTEsKICNkZWZpbmUgUkNDX01DT1NPVVJDRV9QTExDTEtfRElWMiAgIFJDQ19NQ08xU09VUkNFX1BMTENMS19ESVYyCiAKLSNpZiBkZWZpbmVkKFNUTTMyTDQpCisjaWYgZGVmaW5lZChTVE0zMkw0KSB8fCBkZWZpbmVkKFNUTTMyV0IpIHx8IGRlZmluZWQoU1RNMzJHMCkgfHwgZGVmaW5lZChTVE0zMkc0KSB8fCBkZWZpbmVkKFNUTTMyTDUpCiAjZGVmaW5lIFJDQ19SVENDTEtTT1VSQ0VfTk9fQ0xLICAgICBSQ0NfUlRDQ0xLU09VUkNFX05PTkUKLSNlbGlmIGRlZmluZWQoU1RNMzJXQikgfHwgZGVmaW5lZChTVE0zMkcwKSB8fCBkZWZpbmVkKFNUTTMyRzQpCiAjZWxzZQogI2RlZmluZSBSQ0NfUlRDQ0xLU09VUkNFX05PTkUgICAgICAgUkNDX1JUQ0NMS1NPVVJDRV9OT19DTEsKICNlbmRpZgpAQCAtMzI0Miw3ICszMzcyLDcgQEAKIC8qKiBAZGVmZ3JvdXAgSEFMX1JUQ19BbGlhc2VkX01hY3JvcyBIQUwgUlRDIEFsaWFzZWQgTWFjcm9zIG1haW50YWluZWQgZm9yIGxlZ2FjeSBwdXJwb3NlCiAgICogQHsKICAgKi8KLSNpZiBkZWZpbmVkIChTVE0zMkcwKSB8fCBkZWZpbmVkIChTVE0zMkw0MTJ4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNDIyeHgpIHx8IGRlZmluZWQgKFNUTTMyTDRQNXh4KSB8fCBkZWZpbmVkIChTVE0zMkw0UTV4eCkgfHwgZGVmaW5lZCAoU1RNMzJHNCkKKyNpZiBkZWZpbmVkIChTVE0zMkcwKSB8fCBkZWZpbmVkIChTVE0zMkw1KSB8fCBkZWZpbmVkIChTVE0zMkw0MTJ4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNDIyeHgpIHx8IGRlZmluZWQgKFNUTTMyTDRQNXh4KSB8fCBkZWZpbmVkIChTVE0zMkw0UTV4eCkgfHwgZGVmaW5lZCAoU1RNMzJHNCkKICNlbHNlCiAjZGVmaW5lIF9fSEFMX1JUQ19DTEVBUl9GTEFHICAgICAgICAgICAgICAgICAgICAgIF9fSEFMX1JUQ19FWFRJX0NMRUFSX0ZMQUcKICNlbmRpZgpAQCAtMzM1MCwyMiArMzQ4MCwyMiBAQAogI2RlZmluZSAgX19IQUxfU0RfU0RJT19DTEVBUl9GTEFHICAgX19IQUxfU0RfU0RNTUNfQ0xFQVJfRkxBRwogI2RlZmluZSAgX19IQUxfU0RfU0RJT19HRVRfSVQgICAgICAgX19IQUxfU0RfU0RNTUNfR0VUX0lUCiAjZGVmaW5lICBfX0hBTF9TRF9TRElPX0NMRUFSX0lUICAgICBfX0hBTF9TRF9TRE1NQ19DTEVBUl9JVAotI2RlZmluZSAgU0RJT19TVEFUSUNfRkxBR1MJICAgICAgICBTRE1NQ19TVEFUSUNfRkxBR1MKLSNkZWZpbmUgIFNESU9fQ01EMFRJTUVPVVQJICAgICAgICAgIFNETU1DX0NNRDBUSU1FT1VUCi0jZGVmaW5lICBTRF9TRElPX1NFTkRfSUZfQ09ORAkgICAgICBTRF9TRE1NQ19TRU5EX0lGX0NPTkQKKyNkZWZpbmUgIFNESU9fU1RBVElDX0ZMQUdTICAgICAgICAgIFNETU1DX1NUQVRJQ19GTEFHUworI2RlZmluZSAgU0RJT19DTUQwVElNRU9VVCAgICAgICAgICAgU0RNTUNfQ01EMFRJTUVPVVQKKyNkZWZpbmUgIFNEX1NESU9fU0VORF9JRl9DT05EICAgICAgIFNEX1NETU1DX1NFTkRfSUZfQ09ORAogLyogYWxpYXMgQ01TSVMgZm9yIGNvbXBhdGliaWxpdGllcyAqLwogI2RlZmluZSAgU0RJT19JUlFuICAgICAgICAgICAgICAgICAgU0RNTUMxX0lSUW4KICNkZWZpbmUgIFNESU9fSVJRSGFuZGxlciAgICAgICAgICAgIFNETU1DMV9JUlFIYW5kbGVyCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoU1RNMzJGNykgfHwgZGVmaW5lZChTVE0zMkY0KSB8fCBkZWZpbmVkKFNUTTMyRjIpIHx8IGRlZmluZWQoU1RNMzJMNCkKKyNpZiBkZWZpbmVkKFNUTTMyRjcpIHx8IGRlZmluZWQoU1RNMzJGNCkgfHwgZGVmaW5lZChTVE0zMkYyKSB8fCBkZWZpbmVkKFNUTTMyTDQpIHx8IGRlZmluZWQoU1RNMzJINykKICNkZWZpbmUgIEhBTF9TRF9DYXJkQ0lEVHlwZWRlZiAgICAgICBIQUxfU0RfQ2FyZENJRFR5cGVEZWYKICNkZWZpbmUgIEhBTF9TRF9DYXJkQ1NEVHlwZWRlZiAgICAgICBIQUxfU0RfQ2FyZENTRFR5cGVEZWYKICNkZWZpbmUgIEhBTF9TRF9DYXJkU3RhdHVzVHlwZWRlZiAgICBIQUxfU0RfQ2FyZFN0YXR1c1R5cGVEZWYKICNkZWZpbmUgIEhBTF9TRF9DYXJkU3RhdGVUeXBlZGVmICAgICBIQUxfU0RfQ2FyZFN0YXRlVHlwZURlZgogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFNUTTMySDcpCisjaWYgZGVmaW5lZChTVE0zMkg3KSB8fCBkZWZpbmVkKFNUTTMyTDUpCiAjZGVmaW5lIEhBTF9NTUNFeF9SZWFkX0RNQURvdWJsZUJ1ZmZlcjBDcGx0Q2FsbGJhY2sgICBIQUxfTU1DRXhfUmVhZF9ETUFEb3VibGVCdWYwQ3BsdENhbGxiYWNrCiAjZGVmaW5lIEhBTF9NTUNFeF9SZWFkX0RNQURvdWJsZUJ1ZmZlcjFDcGx0Q2FsbGJhY2sgICBIQUxfTU1DRXhfUmVhZF9ETUFEb3VibGVCdWYxQ3BsdENhbGxiYWNrCiAjZGVmaW5lIEhBTF9NTUNFeF9Xcml0ZV9ETUFEb3VibGVCdWZmZXIwQ3BsdENhbGxiYWNrICBIQUxfTU1DRXhfV3JpdGVfRE1BRG91YmxlQnVmMENwbHRDYWxsYmFjawpAQCAtMzYwNiwxMiArMzczNiwxMiBAQAogICAqIEB7CiAgICovCiAjaWYgZGVmaW5lZCAoU1RNMzJINykgfHwgZGVmaW5lZCAoU1RNMzJHNCkgfHwgZGVmaW5lZCAoU1RNMzJGMykKLSNkZWZpbmUgSEFMX0hSVElNX1dhdmVmb3JtQ291bnRlclN0YXJ0X0lUIEhBTF9IUlRJTV9XYXZlZm9ybUNvdW50U3RhcnRfSVQKLSNkZWZpbmUgSEFMX0hSVElNX1dhdmVmb3JtQ291bnRlclN0YXJ0X0RNQSBIQUxfSFJUSU1fV2F2ZWZvcm1Db3VudFN0YXJ0X0RNQQotI2RlZmluZSBIQUxfSFJUSU1fV2F2ZWZvcm1Db3VudGVyU3RhcnQgSEFMX0hSVElNX1dhdmVmb3JtQ291bnRTdGFydAotI2RlZmluZSBIQUxfSFJUSU1fV2F2ZWZvcm1Db3VudGVyU3RvcF9JVCBIQUxfSFJUSU1fV2F2ZWZvcm1Db3VudFN0b3BfSVQKLSNkZWZpbmUgSEFMX0hSVElNX1dhdmVmb3JtQ291bnRlclN0b3BfRE1BIEhBTF9IUlRJTV9XYXZlZm9ybUNvdW50U3RvcF9ETUEKLSNkZWZpbmUgSEFMX0hSVElNX1dhdmVmb3JtQ291bnRlclN0b3AgSEFMX0hSVElNX1dhdmVmb3JtQ291bnRTdG9wCisjZGVmaW5lIEhBTF9IUlRJTV9XYXZlZm9ybUNvdW50ZXJTdGFydF9JVCAgICAgIEhBTF9IUlRJTV9XYXZlZm9ybUNvdW50U3RhcnRfSVQKKyNkZWZpbmUgSEFMX0hSVElNX1dhdmVmb3JtQ291bnRlclN0YXJ0X0RNQSAgICAgSEFMX0hSVElNX1dhdmVmb3JtQ291bnRTdGFydF9ETUEKKyNkZWZpbmUgSEFMX0hSVElNX1dhdmVmb3JtQ291bnRlclN0YXJ0ICAgICAgICAgSEFMX0hSVElNX1dhdmVmb3JtQ291bnRTdGFydAorI2RlZmluZSBIQUxfSFJUSU1fV2F2ZWZvcm1Db3VudGVyU3RvcF9JVCAgICAgICBIQUxfSFJUSU1fV2F2ZWZvcm1Db3VudFN0b3BfSVQKKyNkZWZpbmUgSEFMX0hSVElNX1dhdmVmb3JtQ291bnRlclN0b3BfRE1BICAgICAgSEFMX0hSVElNX1dhdmVmb3JtQ291bnRTdG9wX0RNQQorI2RlZmluZSBIQUxfSFJUSU1fV2F2ZWZvcm1Db3VudGVyU3RvcCAgICAgICAgICBIQUxfSFJUSU1fV2F2ZWZvcm1Db3VudFN0b3AKICNlbmRpZgogLyoqCiAgICogQH0KQEAgLTM2MjAsOSArMzc1MCw5IEBACiAvKiogQGRlZmdyb3VwIEhBTF9RU1BJX0FsaWFzZWRfTWFjcm9zIEhBTCBRU1BJIEFsaWFzZWQgTWFjcm9zIG1haW50YWluZWQgZm9yIGxlZ2FjeSBwdXJwb3NlCiAgICogQHsKICAgKi8KLSNpZiBkZWZpbmVkIChTVE0zMkw0KQorI2lmIGRlZmluZWQgKFNUTTMyTDQpIHx8IGRlZmluZWQgKFNUTTMyRjQpIHx8IGRlZmluZWQgKFNUTTMyRjcpIHx8IGRlZmluZWQoU1RNMzJINykKICNkZWZpbmUgSEFMX1FQU0lfVElNRU9VVF9ERUZBVUxUX1ZBTFVFIEhBTF9RU1BJX1RJTUVPVVRfREVGQVVMVF9WQUxVRQotI2VuZGlmCisjZW5kaWYgLyogU1RNMzJMNCB8fCBTVE0zMkY0IHx8IFNUTTMyRjcgKi8KIC8qKgogICAqIEB9CiAgICovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJnNHh4X2hhbF9jcnlwLmggYi9JbmMvc3RtMzJnNHh4X2hhbF9jcnlwLmgKaW5kZXggZWY1MzA1Zi4uYTlmMGIyZSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZzR4eF9oYWxfY3J5cC5oCisrKyBiL0luYy9zdG0zMmc0eHhfaGFsX2NyeXAuaApAQCAtNiw3ICs2LDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOCBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCkBAIC02NCw5ICs2NCwxMCBAQAogICB1aW50MzJfdCAqSGVhZGVyOyAgICAgICAgICAgICAgICAgICAgLyohPCB1c2VkIG9ubHkgaW4gQUVTIEdDTSBhbmQgQ0NNIEFsZ29yaXRobSBmb3IgYXV0aGVudGljYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NNIDogYWxzbyBrbm93biBhcyBBZGRpdGlvbmFsIEF1dGhlbnRpY2F0aW9uIERhdGEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ00gOiBuYW1lZCBCMSBjb21wb3NlZCBvZiB0aGUgYXNzb2NpYXRlZCBkYXRhIGxlbmd0aCBhbmQgQXNzb2NpYXRlZCBEYXRhLiAqLwotICB1aW50MzJfdCBIZWFkZXJTaXplOyAgICAgICAgICAgICAgICAgLyohPCBUaGUgc2l6ZSBvZiBoZWFkZXIgYnVmZmVyIGluIHdvcmQgICovCisgIHVpbnQzMl90IEhlYWRlclNpemU7ICAgICAgICAgICAgICAgICAvKiE8IFRoZSBzaXplIG9mIGhlYWRlciBidWZmZXIgKi8KICAgdWludDMyX3QgKkIwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQjAgaXMgZmlyc3QgYXV0aGVudGljYXRpb24gYmxvY2sgdXNlZCBvbmx5ICBpbiBBRVMgQ0NNIG1vZGUgKi8KLSAgdWludDMyX3QgRGF0YVdpZHRoVW5pdDsgICAgICAgICAgICAgIC8qITwgRGF0YSBXaXRoIFVuaXQsIHRoaXMgcGFyYW1ldGVyIGNhbiBiZSB2YWx1ZSBvZiBAcmVmIENSWVBfRGF0YV9XaWR0aF9Vbml0Ki8KKyAgdWludDMyX3QgRGF0YVdpZHRoVW5pdDsgICAgICAgICAgICAgIC8qITwgUGF5bG9hZCBEYXRhIFdpZHRoIFVuaXQsIHRoaXMgcGFyYW1ldGVyIGNhbiBiZSB2YWx1ZSBvZiBAcmVmIENSWVBfRGF0YV9XaWR0aF9Vbml0Ki8KKyAgdWludDMyX3QgSGVhZGVyV2lkdGhVbml0OyAgICAgICAgICAgIC8qITwgSGVhZGVyIFdpZHRoIFVuaXQsIHRoaXMgcGFyYW1ldGVyIGNhbiBiZSB2YWx1ZSBvZiBAcmVmIENSWVBfSGVhZGVyX1dpZHRoX1VuaXQqLwogICB1aW50MzJfdCBLZXlJVkNvbmZpZ1NraXA7ICAgICAgICAgICAgLyohPCBDUllQIHBlcmlwaGVyYWwgS2V5IGFuZCBJViBjb25maWd1cmF0aW9uIHNraXAsIHRvIGNvbmZpZyBLZXkgYW5kIEluaXRpYWxpemF0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yIG9ubHkgb25jZSBhbmQgdG8gc2tpcCBjb25maWd1cmF0aW9uIGZvciBjb25zZWN1dGl2ZSBwcm9jZXNzaW5ncy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIENSWVBfQ29uZmlndXJhdGlvbl9Ta2lwICovCkBAIC0xODIsMTAgKzE4MywxMiBAQAogCiAgIHVpbnQzMl90ICAgICAgICAgICAgICAgICAgICBLZXlfc2F2ZWRbOF07ICAgICAgICAgICAgLyohPCBjb3B5IG9mIGtleSByZWdpc3RlcnMgKi8KIAotICB1aW50MzJfdCAgICAgICAgICAgICAgICAgICAgU2l6ZV9zYXZlZDsgICAgICAgICAgICAgIC8qITwgY29weSBvZiBpbnB1dCBidWZmZXIgc2l6ZSAqLworICB1aW50MTZfdCAgICAgICAgICAgICAgICAgICAgU2l6ZV9zYXZlZDsgICAgICAgICAgICAgIC8qITwgY29weSBvZiBpbnB1dCBidWZmZXIgc2l6ZSAqLwogCiAgIHVpbnQxNl90ICAgICAgICAgICAgICAgICAgICBDcnlwSGVhZGVyQ291bnRfc2F2ZWQ7ICAgLyohPCBjb3B5IG9mIENSWVAgaGVhZGVyIGRhdGEgY291bnRlciB3aGVuIHByb2Nlc3NpbmcgaXMgc3VzcGVuZGVkICovCiAKKyAgdWludDMyX3QgICAgICAgICAgICAgICAgICAgIFNpemVzU3VtX3NhdmVkOyAgICAgICAgICAvKiE8IGNvcHkgb2YgU2l6ZXNTdW0gd2hlbiBwcm9jZXNzaW5nIGlzIHN1c3BlbmRlZCAqLworCiAgIHVpbnQzMl90ICAgICAgICAgICAgICAgICAgICBSZXN1bWluZ0ZsYWc7ICAgICAgICAgICAgLyohPCByZXN1bXB0aW9uIGZsYWcgdG8gYnlwYXNzIHN0ZXBzIGFscmVhZHkgY2FycmllZCBvdXQgKi8KIAogICBGdW5jdGlvbmFsU3RhdGUgICAgICAgICAgICAgQXV0b0tleURlcml2YXRpb25fc2F2ZWQ7IC8qITwgY29weSBvZiBDUllQIGhhbmRsZSBhdXRvIGtleSBkZXJpdmF0aW9uIHBhcmFtZXRlciAqLwpAQCAtMjYzLDYgKzI2NiwxNyBAQAogICAqIEB9CiAgICovCiAKKy8qKiBAZGVmZ3JvdXAgQ1JZUF9IZWFkZXJfV2lkdGhfVW5pdCBDUllQIEhlYWRlciBXaWR0aCBVbml0CisgICogQHsKKyAgKi8KKworI2RlZmluZSBDUllQX0hFQURFUldJRFRIVU5JVF9XT1JEICAgMHgwMDAwMDAwMFUgIC8qITwgQnkgZGVmYXVsdCwgaGVhZGVyIHNpemUgdW5pdCBpcyB3b3JkICovCisjZGVmaW5lIENSWVBfSEVBREVSV0lEVEhVTklUX0JZVEUgICAweDAwMDAwMDAxVSAgLyohPCBCeSBkZWZhdWx0LCBoZWFkZXIgc2l6ZSB1bml0IGlzIGJ5dGUgKi8KKworLyoqCisgICogQH0KKyAgKi8KKwogLyoqIEBkZWZncm91cCBDUllQX0FsZ29yaXRobV9Nb2RlIENSWVAgQWxnb3JpdGhtIE1vZGUKICAgKiBAewogICAqLwpAQCAtNTY1LDYgKzU3OSwxMyBAQAogI2RlZmluZSBJU19DUllQX0lOSVQoQ09ORklHKSgoKENPTkZJRykgPT0gQ1JZUF9LRVlJVkNPTkZJR19BTFdBWVMpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChDT05GSUcpID09IENSWVBfS0VZSVZDT05GSUdfT05DRSkpCiAKKyNkZWZpbmUgSVNfQ1JZUF9CVUZGRVJTSVpFKEFMR08sIERBVEFXSURUSCwgU0laRSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgKCgoKChBTEdPKSA9PSBDUllQX0FFU19DVFIpKSAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICgoKChEQVRBV0lEVEgpID09IENSWVBfREFUQVdJRFRIVU5JVF9XT1JEKSAmJiAoKChTSVpFKSAlIDRVKSA9PSAwVSkpICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgKCgoREFUQVdJRFRIKSA9PSBDUllQX0RBVEFXSURUSFVOSVRfQllURSkgJiYgKCgoU0laRSkgJSAxNlUpID09IDBVKSkpKSAgICAgICAgfHwgXAorICAgICAgICAgKCgoQUxHTykgPT0gQ1JZUF9BRVNfRUNCKSB8fCAoKEFMR08pID09IENSWVBfQUVTX0NCQykgICAgICAgICAgICAgICAgICB8fCBcCisgICAgICAgICAgKChBTEdPKT09IENSWVBfQUVTX0dDTV9HTUFDKSB8fCAoKEFMR08pID09IENSWVBfQUVTX0NDTSkpKQorCiAvKioKICAgKiBAfQogICAqLwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZzR4eF9oYWxfY3J5cF9leC5oIGIvSW5jL3N0bTMyZzR4eF9oYWxfY3J5cF9leC5oCmluZGV4IDMwODE3ZGEuLjA3MDhlYjIgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmc0eHhfaGFsX2NyeXBfZXguaAorKysgYi9JbmMvc3RtMzJnNHh4X2hhbF9jcnlwX2V4LmgKQEAgLTYsNyArNiw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTggU1RNaWNyb2VsZWN0cm9uaWNzLiAKKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4gCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJnNHh4X2hhbF9mbWFjLmggYi9JbmMvc3RtMzJnNHh4X2hhbF9mbWFjLmgKaW5kZXggYjZlMjFkNy4uMWYyODlkZCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZzR4eF9oYWxfZm1hYy5oCisrKyBiL0luYy9zdG0zMmc0eHhfaGFsX2ZtYWMuaApAQCAtMiw4ICsyLDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGZpbGUgICAgc3RtMzJnNHh4X2hhbF9mbWFjLmgKICAgKiBAYXV0aG9yICBNQ0QgQXBwbGljYXRpb24gVGVhbQotICAqIEBicmllZiAgIFRoaXMgZmlsZSBjb250YWlucyBhbGwgdGhlIGZ1bmN0aW9ucyBwcm90b3R5cGVzIGZvciB0aGUgRk1BQyBmaXJtd2FyZQotICAqICAgICAgICAgIGxpYnJhcnkuCisgICogQGJyaWVmICAgSGVhZGVyIGZvciBzdG0zMmc0eHhfaGFsX2ZtYWMuYyBtb2R1bGUKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCkBAIC0xMzUsNyArMTM0LDcgQEAKIAogI2lmIChVU0VfSEFMX0ZNQUNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCiAvKioKLSAgKiBAYnJpZWYgIEZNQUMgQ2FsbGJhY2sgSUQgc3RydWN0dXJlIGRlZmluaXRpb24KKyAgKiBAYnJpZWYgIEZNQUMgQ2FsbGJhY2sgSUQgZW51bWVyYXRpb24gZGVmaW5pdGlvbgogICAqLwogdHlwZWRlZiBlbnVtCiB7CkBAIC0xNjUsMzEgKzE2NCwzMSBAQAogewogICB1aW50OF90ICAgICAgICAgICAgICAgICAgICBJbnB1dEJhc2VBZGRyZXNzOyAgLyohPCBCYXNlIGFkZHJlc3Mgb2YgdGhlIGlucHV0IGJ1ZmZlciAoWDEpIHdpdGhpbiB0aGUgaW50ZXJuYWwgbWVtb3J5ICgweDAwIHRvIDB4RkYpLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZ25vcmVkIGlmIElucHV0QnVmZmVyU2l6ZSBpcyBzZXQgdG8gMCAocHJldmlvdXMgY29uZmlndXJhdGlvbiBrZXB0KS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkI6IHRoZSBidWZmZXJzIGNhbiBvdmVybGFwIG9yIGV2ZW4gY29pbmNpZGUgZXhhY3RseS4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90ZTogdGhlIGJ1ZmZlcnMgY2FuIG92ZXJsYXAgb3IgZXZlbiBjb2luY2lkZSBleGFjdGx5LiAqLwogCi0gIHVpbnQ4X3QgICAgICAgICAgICAgICAgICAgIElucHV0QnVmZmVyU2l6ZTsgICAvKiE8IE51bWJlciBvZiAxNi1iaXQgYWRkcmVzc2VzIGFsbG9jYXRlZCB0byB0aGUgaW5wdXQgYnVmZmVyIChpbmNsdWRpbmcgdGhlIG9wdGlvbmFsICJoZWFkcm9vbSIpLgorICB1aW50OF90ICAgICAgICAgICAgICAgICAgICBJbnB1dEJ1ZmZlclNpemU7ICAgLyohPCBOdW1iZXIgb2YgMTYtYml0IHdvcmRzIGFsbG9jYXRlZCB0byB0aGUgaW5wdXQgYnVmZmVyIChpbmNsdWRpbmcgdGhlIG9wdGlvbmFsICJoZWFkcm9vbSIpLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIGlmIGEgcHJldmlvdXMgY29uZmlndXJhdGlvbiBzaG91bGQgYmUga2VwdC4gKi8KIAogICB1aW50MzJfdCAgICAgICAgICAgICAgICAgICBJbnB1dFRocmVzaG9sZDsgICAgLyohPCBJbnB1dCB0aHJlc2hvbGQ6IHRoZSBidWZmZXIgZnVsbCBmbGFnIHdpbGwgYmUgc2V0IGlmIHRoZSBudW1iZXIgb2YgZnJlZSBzcGFjZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGJ1ZmZlciBpcyBpbmZlcmlvciB0byB0aGlzIHRocmVzaG9sZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGJ1ZmZlciBpcyBsb3dlciB0aGFuIHRoaXMgdGhyZXNob2xkLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEZNQUNfRGF0YV9CdWZmZXJfVGhyZXNob2xkLiAqLwogCiAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgICAgIENvZWZmQmFzZUFkZHJlc3M7ICAvKiE8IEJhc2UgYWRkcmVzcyBvZiB0aGUgY29lZmZpY2llbnQgYnVmZmVyIChYMikgd2l0aGluIHRoZSBpbnRlcm5hbCBtZW1vcnkgKDB4MDAgdG8gMHhGRikuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElnbm9yZWQgaWYgQ29lZmZCdWZmZXJTaXplIGlzIHNldCB0byAwIChwcmV2aW91cyBjb25maWd1cmF0aW9uIGtlcHQpLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQjogdGhlIGJ1ZmZlcnMgY2FuIG92ZXJsYXAgb3IgZXZlbiBjb2luY2lkZSBleGFjdGx5LiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3RlOiB0aGUgYnVmZmVycyBjYW4gb3ZlcmxhcCBvciBldmVuIGNvaW5jaWRlIGV4YWN0bHkuICovCiAKLSAgdWludDhfdCAgICAgICAgICAgICAgICAgICAgQ29lZmZCdWZmZXJTaXplOyAgIC8qITwgTnVtYmVyIG9mIDE2LWJpdCBhZGRyZXNzZXMgYWxsb2NhdGVkIHRvIHRoZSBjb2VmZmljaWVudCBidWZmZXIuCisgIHVpbnQ4X3QgICAgICAgICAgICAgICAgICAgIENvZWZmQnVmZmVyU2l6ZTsgICAvKiE8IE51bWJlciBvZiAxNi1iaXQgd29yZHMgYWxsb2NhdGVkIHRvIHRoZSBjb2VmZmljaWVudCBidWZmZXIuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgaWYgYSBwcmV2aW91cyBjb25maWd1cmF0aW9uIHNob3VsZCBiZSBrZXB0LiAqLwogCiAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgICAgIE91dHB1dEJhc2VBZGRyZXNzOyAvKiE8IEJhc2UgYWRkcmVzcyBvZiB0aGUgb3V0cHV0IGJ1ZmZlciAoWSkgd2l0aGluIHRoZSBpbnRlcm5hbCBtZW1vcnkgKDB4MDAgdG8gMHhGRikuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElnbm9yZWQgaWYgT3VwdXRCdWZmZXJTaXplIGlzIHNldCB0byAwIChwcmV2aW91cyBjb25maWd1cmF0aW9uIGtlcHQpLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQjogdGhlIGJ1ZmZlcnMgY2FuIG92ZXJsYXAgb3IgZXZlbiBjb2luY2lkZSBleGFjdGx5LiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3RlOiB0aGUgYnVmZmVycyBjYW4gb3ZlcmxhcCBvciBldmVuIGNvaW5jaWRlIGV4YWN0bHkuICovCiAKLSAgdWludDhfdCAgICAgICAgICAgICAgICAgICAgT3V0cHV0QnVmZmVyU2l6ZTsgIC8qITwgTnVtYmVyIG9mIDE2LWJpdCBhZGRyZXNzZXMgYWxsb2NhdGVkIHRvIHRoZSBvdXRwdXQgYnVmZmVyIChpbmNsdWRpbmcgdGhlIG9wdGlvbmFsICJoZWFkcm9vbSIpLgorICB1aW50OF90ICAgICAgICAgICAgICAgICAgICBPdXRwdXRCdWZmZXJTaXplOyAgLyohPCBOdW1iZXIgb2YgMTYtYml0IHdvcmRzIGFsbG9jYXRlZCB0byB0aGUgb3V0cHV0IGJ1ZmZlciAoaW5jbHVkaW5nIHRoZSBvcHRpb25hbCAiaGVhZHJvb20iKS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCBpZiBhIHByZXZpb3VzIGNvbmZpZ3VyYXRpb24gc2hvdWxkIGJlIGtlcHQuICovCiAKICAgdWludDMyX3QgICAgICAgICAgICAgICAgICAgT3V0cHV0VGhyZXNob2xkOyAgIC8qITwgT3V0cHV0IHRocmVzaG9sZDogdGhlIGJ1ZmZlciBlbXB0eSBmbGFnIHdpbGwgYmUgc2V0IGlmIHRoZSBudW1iZXIgb2YgdW5yZWFkIHZhbHVlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgYnVmZmVyIGlzIGluZmVyaW9yIHRvIHRoaXMgdGhyZXNob2xkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgYnVmZmVyIGlzIGxvd2VyIHRoYW4gdGhpcyB0aHJlc2hvbGQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRk1BQ19EYXRhX0J1ZmZlcl9UaHJlc2hvbGQuICovCiAKICAgaW50MTZfdCAgICAgICAgICAgICAgICAgICAgKnBDb2VmZkE7ICAgICAgICAgIC8qITwgW0lJUiBvbmx5XSBJbml0aWFsaXphdGlvbiBvZiB0aGUgY29lZmZpY2llbnQgdmVjdG9yIEEuCkBAIC0yMDIsMTMgKzIwMSwxNSBAQAogCiAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgICAgIENvZWZmQlNpemU7ICAgICAgICAvKiE8IFNpemUgb2YgdGhlIGNvZWZmaWNpZW50IHZlY3RvciBCLiAqLwogCi0gIHVpbnQ4X3QgICAgICAgICAgICAgICAgICAgIElucHV0QWNjZXNzOyAgICAgICAvKiE8IEFjY2VzcyB0byB0aGUgaW5wdXQgYnVmZmVyIChpbnRlcm5hbCBtZW1vcnkgYXJlYSk6IERNVCwgSVQsIFBvbGxpbmcsIE5vbmUuCisgIHVpbnQ4X3QgICAgICAgICAgICAgICAgICAgIElucHV0QWNjZXNzOyAgICAgICAvKiE8IEFjY2VzcyB0byB0aGUgaW5wdXQgYnVmZmVyIChpbnRlcm5hbCBtZW1vcnkgYXJlYSk6IERNQSwgSVQsIFBvbGxpbmcsIE5vbmUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRk1BQ19CdWZmZXJfQWNjZXNzLiAqLwogCiAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgICAgIE91dHB1dEFjY2VzczsgICAgICAvKiE8IEFjY2VzcyB0byB0aGUgb3V0cHV0IGJ1ZmZlciAoaW50ZXJuYWwgbWVtb3J5IGFyZWEpOiBETUEsIElULCBQb2xsaW5nLCBOb25lLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEZNQUNfQnVmZmVyX0FjY2Vzcy4gKi8KIAotICB1aW50MzJfdCAgICAgICAgICAgICAgICAgICBDbGlwOyAgICAgICAgICAgICAgLyohPCBFbmFibGUgb3IgZGlzYWJsZSB0aGUgY2xpcHBpbmcgZmVhdHVyZSAod3JhcHBpbmcgd2hlbiB0aGUgcTEuMTUgcmFuZ2UgaXMgZXhjZWVkZWQpLgorICB1aW50MzJfdCAgICAgICAgICAgICAgICAgICBDbGlwOyAgICAgICAgICAgICAgLyohPCBFbmFibGUgb3IgZGlzYWJsZSB0aGUgY2xpcHBpbmcgZmVhdHVyZS4gSWYgdGhlIHExLjE1IHJhbmdlIGlzIGV4Y2VlZGVkLCB3cmFwcGluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBkb25lIHdoZW4gdGhlIGNsaXBwaW5nIGZlYXR1cmUgaXMgZGlzYWJsZWQgYW5kIHNhdHVyYXRpb24gaXMgZG9uZSB3aGVuIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlwcGluZyBmZWF0dXJlIGlzIGVuYWJsZWQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRk1BQ19DbGlwX1N0YXRlLiAqLwogCiAgIHVpbnQzMl90ICAgICAgICAgICAgICAgICAgIEZpbHRlcjsgICAgICAgICAgICAvKiE8IEZpbHRlciB0eXBlLgpAQCAtMjM3LDE3ICsyMzgsMTcgQEAKIC8qKiBAZGVmZ3JvdXAgRk1BQ19FcnJvcl9Db2RlIEZNQUMgRXJyb3IgY29kZQogICAqIEB7CiAgICovCi0jZGVmaW5lIEhBTF9GTUFDX0VSUk9SX05PTkUgICAgICAgICAgICAgICAgMHgwMDAwMDAwMFVMIC8qITwgTm8gZXJyb3IgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQUxfRk1BQ19FUlJPUl9TQVQgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDFVTCAvKiE8IFNhdHVyYXRpb24gZXJyb3IgICAgICAgKi8KLSNkZWZpbmUgSEFMX0ZNQUNfRVJST1JfVU5GTCAgICAgICAgICAgICAgICAweDAwMDAwMDAyVUwgLyohPCBVbmRlcmZsb3cgZXJyb3IgICAgICAgICovCi0jZGVmaW5lIEhBTF9GTUFDX0VSUk9SX09WRkwgICAgICAgICAgICAgICAgMHgwMDAwMDAwNFVMIC8qITwgT3ZlcmZsb3cgZXJyb3IgICAgICAgICAqLwotI2RlZmluZSBIQUxfRk1BQ19FUlJPUl9ETUEgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDhVTCAvKiE8IERNQSBlcnJvciAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFMX0ZNQUNfRVJST1JfUkVTRVQgICAgICAgICAgICAgICAweDAwMDAwMDEwVUwgLyohPCBSZXNldCBlcnJvciAgICAgICAgICAgICovCi0jZGVmaW5lIEhBTF9GTUFDX0VSUk9SX1BBUkFNICAgICAgICAgICAgICAgMHgwMDAwMDAyMFVMIC8qITwgUGFyYW1ldGVyIGVycm9yICAgICAgICAqLworI2RlZmluZSBIQUxfRk1BQ19FUlJPUl9OT05FICAgICAgICAgICAgICAgIDB4MDAwMDAwMDBVIC8qITwgTm8gZXJyb3IgICAgICAgICAgICAgICAqLworI2RlZmluZSBIQUxfRk1BQ19FUlJPUl9TQVQgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDFVIC8qITwgU2F0dXJhdGlvbiBlcnJvciAgICAgICAqLworI2RlZmluZSBIQUxfRk1BQ19FUlJPUl9VTkZMICAgICAgICAgICAgICAgIDB4MDAwMDAwMDJVIC8qITwgVW5kZXJmbG93IGVycm9yICAgICAgICAqLworI2RlZmluZSBIQUxfRk1BQ19FUlJPUl9PVkZMICAgICAgICAgICAgICAgIDB4MDAwMDAwMDRVIC8qITwgT3ZlcmZsb3cgZXJyb3IgICAgICAgICAqLworI2RlZmluZSBIQUxfRk1BQ19FUlJPUl9ETUEgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDhVIC8qITwgRE1BIGVycm9yICAgICAgICAgICAgICAqLworI2RlZmluZSBIQUxfRk1BQ19FUlJPUl9SRVNFVCAgICAgICAgICAgICAgIDB4MDAwMDAwMTBVIC8qITwgUmVzZXQgZXJyb3IgICAgICAgICAgICAqLworI2RlZmluZSBIQUxfRk1BQ19FUlJPUl9QQVJBTSAgICAgICAgICAgICAgIDB4MDAwMDAwMjBVIC8qITwgUGFyYW1ldGVyIGVycm9yICAgICAgICAqLwogI2lmIChVU0VfSEFMX0ZNQUNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCi0jZGVmaW5lIEhBTF9GTUFDX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0sgICAgMHgwMDAwMDA0MFVMIC8qITwgSW52YWxpZCBDYWxsYmFjayBlcnJvciAqLworI2RlZmluZSBIQUxfRk1BQ19FUlJPUl9JTlZBTElEX0NBTExCQUNLICAgIDB4MDAwMDAwNDBVIC8qITwgSW52YWxpZCBDYWxsYmFjayBlcnJvciAqLwogI2VuZGlmIC8qIFVTRV9IQUxfRk1BQ19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KLSNkZWZpbmUgSEFMX0ZNQUNfRVJST1JfVElNRU9VVCAgICAgICAgICAgICAweDAwMDAwMDgwVUwgLyohPCBUaW1lb3V0IGVycm9yICAgICAgICAgICovCisjZGVmaW5lIEhBTF9GTUFDX0VSUk9SX1RJTUVPVVQgICAgICAgICAgICAgMHgwMDAwMDA4MFUgLyohPCBUaW1lb3V0IGVycm9yICAgICAgICAgICovCiAKIC8qKgogICAqIEB9CkBAIC0yNTYsMTEgKzI1NywxMSBAQAogLyoqIEBkZWZncm91cCBGTUFDX0Z1bmN0aW9ucyBGTUFDIEZ1bmN0aW9ucwogICAqIEB7CiAgICovCi0jZGVmaW5lIEZNQUNfRlVOQ19MT0FEX1gxICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkoRk1BQ19QQVJBTV9GVU5DXzApKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IExvYWQgWDEgYnVmZmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEZNQUNfRlVOQ19MT0FEX1gyICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkoRk1BQ19QQVJBTV9GVU5DXzEpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IExvYWQgWDIgYnVmZmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEZNQUNfRlVOQ19MT0FEX1kgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkoRk1BQ19QQVJBTV9GVU5DXzEgfCBGTUFDX1BBUkFNX0ZVTkNfMCkpICAgICAgICAgICAgICAgICAgICAvKiE8IExvYWQgWSBidWZmZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEZNQUNfRlVOQ19DT05WT19GSVIgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkoRk1BQ19QQVJBTV9GVU5DXzMpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvbnZvbHV0aW9uIChGSVIgZmlsdGVyKSAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEZNQUNfRlVOQ19JSVJfRElSRUNUX0ZPUk1fMSAgICAgICAgKCh1aW50MzJfdCkoRk1BQ19QQVJBTV9GVU5DXzMgfCBGTUFDX1BBUkFNX0ZVTkNfMCkpICAgICAgICAgICAgICAgICAgICAvKiE8IElJUiBmaWx0ZXIgKGRpcmVjdCBmb3JtIDEpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZNQUNfRlVOQ19MT0FEX1gxICAgICAgICAgICAgICAgICAgKEZNQUNfUEFSQU1fRlVOQ18wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IExvYWQgWDEgYnVmZmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZNQUNfRlVOQ19MT0FEX1gyICAgICAgICAgICAgICAgICAgKEZNQUNfUEFSQU1fRlVOQ18xKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IExvYWQgWDIgYnVmZmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZNQUNfRlVOQ19MT0FEX1kgICAgICAgICAgICAgICAgICAgKEZNQUNfUEFSQU1fRlVOQ18xIHwgRk1BQ19QQVJBTV9GVU5DXzApICAgICAgICAgICAgICAgICAgICAvKiE8IExvYWQgWSBidWZmZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZNQUNfRlVOQ19DT05WT19GSVIgICAgICAgICAgICAgICAgKEZNQUNfUEFSQU1fRlVOQ18zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvbnZvbHV0aW9uIChGSVIgZmlsdGVyKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZNQUNfRlVOQ19JSVJfRElSRUNUX0ZPUk1fMSAgICAgICAgKEZNQUNfUEFSQU1fRlVOQ18zIHwgRk1BQ19QQVJBTV9GVU5DXzApICAgICAgICAgICAgICAgICAgICAvKiE8IElJUiBmaWx0ZXIgKGRpcmVjdCBmb3JtIDEpICAgICAgICAgICAgICAgICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtMjY5LDE1ICsyNzAsMTUgQEAKICAgKiBAewogICAqIEBub3RlICAgICBUaGlzIHBhcmFtZXRlciBzZXRzIGEgd2F0ZXJtYXJrIGZvciBidWZmZXIgZnVsbCAoaW5wdXQpIG9yIGJ1ZmZlciBlbXB0eSAob3V0cHV0KS4KICAgKi8KLSNkZWZpbmUgRk1BQ19USFJFU0hPTERfMSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwVUwgICAgLyohPCBJbnB1dDogQnVmZmVyIGZ1bGwgZmxhZyBzZXQgaWYgdGhlIG51bWJlciBvZiBmcmVlIHNwYWNlcyBpbiB0aGUgYnVmZmVyIGlzIGxlc3MgdGhhbiAxLgorI2RlZmluZSBGTUFDX1RIUkVTSE9MRF8xICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDBVICAgIC8qITwgSW5wdXQ6IEJ1ZmZlciBmdWxsIGZsYWcgc2V0IGlmIHRoZSBudW1iZXIgb2YgZnJlZSBzcGFjZXMgaW4gdGhlIGJ1ZmZlciBpcyBsZXNzIHRoYW4gMS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IEJ1ZmZlciBlbXB0eSBmbGFnIHNldCBpZiB0aGUgbnVtYmVyIG9mIHVucmVhZCB2YWx1ZXMgaW4gdGhlIGJ1ZmZlciBpcyBsZXNzIHRoYW4gMS4gKi8KLSNkZWZpbmUgRk1BQ19USFJFU0hPTERfMiAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwVUwgICAgLyohPCBJbnB1dDogQnVmZmVyIGZ1bGwgZmxhZyBzZXQgaWYgdGhlIG51bWJlciBvZiBmcmVlIHNwYWNlcyBpbiB0aGUgYnVmZmVyIGlzIGxlc3MgdGhhbiAyLgorI2RlZmluZSBGTUFDX1RIUkVTSE9MRF8yICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDBVICAgIC8qITwgSW5wdXQ6IEJ1ZmZlciBmdWxsIGZsYWcgc2V0IGlmIHRoZSBudW1iZXIgb2YgZnJlZSBzcGFjZXMgaW4gdGhlIGJ1ZmZlciBpcyBsZXNzIHRoYW4gMi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IEJ1ZmZlciBlbXB0eSBmbGFnIHNldCBpZiB0aGUgbnVtYmVyIG9mIHVucmVhZCB2YWx1ZXMgaW4gdGhlIGJ1ZmZlciBpcyBsZXNzIHRoYW4gMi4gKi8KLSNkZWZpbmUgRk1BQ19USFJFU0hPTERfNCAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwVUwgICAgLyohPCBJbnB1dDogQnVmZmVyIGZ1bGwgZmxhZyBzZXQgaWYgdGhlIG51bWJlciBvZiBmcmVlIHNwYWNlcyBpbiB0aGUgYnVmZmVyIGlzIGxlc3MgdGhhbiA0LgorI2RlZmluZSBGTUFDX1RIUkVTSE9MRF80ICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDBVICAgIC8qITwgSW5wdXQ6IEJ1ZmZlciBmdWxsIGZsYWcgc2V0IGlmIHRoZSBudW1iZXIgb2YgZnJlZSBzcGFjZXMgaW4gdGhlIGJ1ZmZlciBpcyBsZXNzIHRoYW4gNC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IEJ1ZmZlciBlbXB0eSBmbGFnIHNldCBpZiB0aGUgbnVtYmVyIG9mIHVucmVhZCB2YWx1ZXMgaW4gdGhlIGJ1ZmZlciBpcyBsZXNzIHRoYW4gNC4gKi8KLSNkZWZpbmUgRk1BQ19USFJFU0hPTERfOCAgICAgICAgICAgICAgICAgICAweDAzMDAwMDAwVUwgICAgLyohPCBJbnB1dDogQnVmZmVyIGZ1bGwgZmxhZyBzZXQgaWYgdGhlIG51bWJlciBvZiBmcmVlIHNwYWNlcyBpbiB0aGUgYnVmZmVyIGlzIGxlc3MgdGhhbiA4LgorI2RlZmluZSBGTUFDX1RIUkVTSE9MRF84ICAgICAgICAgICAgICAgICAgIDB4MDMwMDAwMDBVICAgIC8qITwgSW5wdXQ6IEJ1ZmZlciBmdWxsIGZsYWcgc2V0IGlmIHRoZSBudW1iZXIgb2YgZnJlZSBzcGFjZXMgaW4gdGhlIGJ1ZmZlciBpcyBsZXNzIHRoYW4gOC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IEJ1ZmZlciBlbXB0eSBmbGFnIHNldCBpZiB0aGUgbnVtYmVyIG9mIHVucmVhZCB2YWx1ZXMgaW4gdGhlIGJ1ZmZlciBpcyBsZXNzIHRoYW4gOC4gKi8KLSNkZWZpbmUgRk1BQ19USFJFU0hPTERfTk9fVkFMVUUgICAgICAgICAgICAweEZGRkZGRkZGVUwgICAgLyohPCBUaGUgY29uZmlndXJlZCB0aHJlc2hvbGQgdmFsdWUgc2hvdWxkbid0IGJlIGNoYW5nZWQgKi8KKyNkZWZpbmUgRk1BQ19USFJFU0hPTERfTk9fVkFMVUUgICAgICAgICAgICAweEZGRkZGRkZGVSAgICAvKiE8IFRoZSBjb25maWd1cmVkIHRocmVzaG9sZCB2YWx1ZSBzaG91bGRuJ3QgYmUgY2hhbmdlZCAqLwogLyoqCiAgICogQH0KICAgKi8KQEAgLTI4Niw3ICsyODcsNyBAQAogICAqIEB7CiAgICovCiAjZGVmaW5lIEZNQUNfQlVGRkVSX0FDQ0VTU19OT05FICAgICAgICAgICAgMHgwMFUgICAgICAgICAgIC8qITwgQnVmZmVyIGhhbmRsZWQgYnkgYW4gZXh0ZXJuYWwgSVAgKEFEQyBmb3IgaW5zdGFuY2UpICovCi0jZGVmaW5lIEZNQUNfQlVGRkVSX0FDQ0VTU19ETUEgICAgICAgICAgICAgMHgwMVUgICAgICAgICAgIC8qITwgQnVmZmVyIGFjY2Vzc2VkIHRocm91Z2ggdGhlIEZNQUMgRE1BICovCisjZGVmaW5lIEZNQUNfQlVGRkVSX0FDQ0VTU19ETUEgICAgICAgICAgICAgMHgwMVUgICAgICAgICAgIC8qITwgQnVmZmVyIGFjY2Vzc2VkIHRocm91Z2ggRE1BICovCiAjZGVmaW5lIEZNQUNfQlVGRkVSX0FDQ0VTU19QT0xMSU5HICAgICAgICAgMHgwMlUgICAgICAgICAgIC8qITwgQnVmZmVyIGFjY2Vzc2VkIHRocm91Z2ggcG9sbGluZyAqLwogI2RlZmluZSBGTUFDX0JVRkZFUl9BQ0NFU1NfSVQgICAgICAgICAgICAgIDB4MDNVICAgICAgICAgICAvKiE8IEJ1ZmZlciBhY2Nlc3NlZCB0aHJvdWdoIGludGVycnVwdGlvbnMgKi8KIC8qKgpAQCAtMjk2LDcgKzI5Nyw3IEBACiAvKiogQGRlZmdyb3VwIEZNQUNfQ2xpcF9TdGF0ZSBGTUFDIENsaXAgU3RhdGUKICAgKiBAewogICAqLwotI2RlZmluZSBGTUFDX0NMSVBfRElTQUJMRUQgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDBVTCAgICAvKiE8IENsaXBwaW5nIGRpc2FibGVkICovCisjZGVmaW5lIEZNQUNfQ0xJUF9ESVNBQkxFRCAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMFUgICAgIC8qITwgQ2xpcHBpbmcgZGlzYWJsZWQgKi8KICNkZWZpbmUgRk1BQ19DTElQX0VOQUJMRUQgICAgICAgICAgICAgICAgICBGTUFDX0NSX0NMSVBFTiAgLyohPCBDbGlwcGluZyBlbmFibGVkICovCiAvKioKICAgKiBAfQpAQCAtMzI2LDUyICszMjcsMTMgQEAKICAgKiBAfQogICAqLwogCi0vKiogQGRlZmdyb3VwIEZNQUNfRE1BUiBETUEgUmVhZCBSZXF1ZXN0IEVuYWJsZSBiaXQKLSAgKiBAewotICAqLwotI2RlZmluZSBGTUFDX0RNQV9SRU4gICAgICAgICAgICAgICAgICAgICAgIEZNQUNfQ1JfRE1BUkVOICAvKiE8IERNQSBSZWFkIFJlcXVlc3RzIEVuYWJsZSAqLwotLyoqCi0gICogQH0KLSAgKi8KLQotLyoqIEBkZWZncm91cCBGTUFDX0RNQVcgRE1BIFdyaXRlIFJlcXVlc3QgRW5hYmxlIGJpdAotICAqIEB7Ci0gICovCi0jZGVmaW5lIEZNQUNfRE1BX1dFTiAgICAgICAgICAgICAgICAgICAgICAgRk1BQ19DUl9ETUFXRU4gIC8qITwgRE1BIFdyaXRlIENoYW5uZWwgRW5hYmxlICovCi0vKioKLSAgKiBAfQotICAqLwotCi0vKiogQGRlZmdyb3VwIEZNQUNfRE1BUyBETUEgU1RBUlQgYml0Ci0gICogQHsKLSAgKi8KLSNkZWZpbmUgRk1BQ19TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgICBGTUFDX1BBUkFNX1NUQVJUICAvKiE8IERNQSBTdGFydCAqLwotLyoqCi0gICogQH0KLSAgKi8KLQotLyoqIEBkZWZncm91cCBGTUFDX1RpbWVPdXRfVmFsdWUgICAgRk1BQyBwb2xsaW5nLWJhc2VkIGNvbW11bmljYXRpb25zIHRpbWUtb3V0IHZhbHVlCi0gICogQHsKLSAgKi8KLSNkZWZpbmUgSEFMX0ZNQUNfVElNRU9VVF9WQUxVRSAgICAgICAgICAgICAxMDAwVUwgICAgICAgICAgLyohPCBGTUFDIHBvbGxpbmctYmFzZWQgY29tbXVuaWNhdGlvbnMgdGltZS1vdXQgdmFsdWUgKi8KLS8qKgotICAqIEB9Ci0gICovCi0KLS8qKiBAZGVmZ3JvdXAgRk1BQ19SZXNldF9UaW1lT3V0X1ZhbHVlICAgIEZNQUMgcmVzZXQgdGltZS1vdXQgdmFsdWUKLSAgKiBAewotICAqLwotI2RlZmluZSBIQUxfRk1BQ19SRVNFVF9USU1FT1VUX1ZBTFVFICAgICAgIDUwMFVMICAgICAgICAgICAvKiE8IEZNQUMgcmVzZXQgdGltZS1vdXQgdmFsdWUgKi8KLS8qKgotICAqIEB9Ci0gICovCi0KIC8qKgogICAqIEB9CiAgICovCiAKIAotLyogRXhwb3J0ZWQgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIEV4dGVybmFsIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBFeHBvcnRlZCBtYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyoqIEBkZWZncm91cCBGTUFDX0V4cG9ydGVkX01hY3JvcyBGTUFDIEV4cG9ydGVkIE1hY3JvcwogICAqIEB7CiAgICovCkBAIC0zOTEsMTAgKzM1MywxMCBAQAogI2VuZGlmIC8qIFVTRV9IQUxfRk1BQ19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KIAogLyoqCi0gICogQGJyaWVmICBFbmFibGUgdGhlIEZNQUMgaW50ZXJydXB0IHdoZW4gcmVzdWx0IGlzIHJlYWR5CisgICogQGJyaWVmICBFbmFibGUgdGhlIHNwZWNpZmllZCBGTUFDIGludGVycnVwdAogICAqIEBwYXJhbSAgX19IQU5ETEVfXyBGTUFDIGhhbmRsZS4KICAgKiBAcGFyYW0gIF9fSU5URVJSVVBUX18gRk1BQyBJbnRlcnJ1cHQuCi0gICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBGTUFDX0lUX1JJRU4gICAgUmVhZCBpbnRlcnJ1cHQgZW5hYmxlCiAgICogICAgICAgICAgICBAYXJnIEByZWYgRk1BQ19JVF9XSUVOICAgIFdyaXRlIGludGVycnVwdCBlbmFibGUKICAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBGTUFDX0lUX09WRkxJRU4gT3ZlcmZsb3cgZXJyb3IgaW50ZXJydXB0IGVuYWJsZQpAQCAtNDA5LDcgKzM3MSw3IEBACiAgICogQGJyaWVmICBEaXNhYmxlIHRoZSBGTUFDIGludGVycnVwdAogICAqIEBwYXJhbSAgX19IQU5ETEVfXyBGTUFDIGhhbmRsZS4KICAgKiBAcGFyYW0gIF9fSU5URVJSVVBUX18gRk1BQyBJbnRlcnJ1cHQuCi0gICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBGTUFDX0lUX1JJRU4gICAgUmVhZCBpbnRlcnJ1cHQgZW5hYmxlCiAgICogICAgICAgICAgICBAYXJnIEByZWYgRk1BQ19JVF9XSUVOICAgIFdyaXRlIGludGVycnVwdCBlbmFibGUKICAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBGTUFDX0lUX09WRkxJRU4gT3ZlcmZsb3cgZXJyb3IgaW50ZXJydXB0IGVuYWJsZQpAQCAtNDIzLDcgKzM4NSw3IEBACiAvKiogQGJyaWVmICBDaGVjayB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgRk1BQyBpbnRlcnJ1cHQgb2NjdXJyZWQgb3Igbm90LgogICAqIEBwYXJhbSAgX19IQU5ETEVfXyBGTUFDIGhhbmRsZS4KICAgKiBAcGFyYW0gIF9fSU5URVJSVVBUX18gRk1BQyBpbnRlcnJ1cHQgdG8gY2hlY2suCi0gICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBGTUFDX0ZMQUdfWUVNUFRZIFkgQnVmZmVyIEVtcHR5IEZsYWcKICAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBGTUFDX0ZMQUdfWDFGVUxMIFgxIEJ1ZmZlciBGdWxsIEZsYWcKICAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBGTUFDX0ZMQUdfT1ZGTCAgIE92ZXJmbG93IEVycm9yIEZsYWcKQEAgLTQ0NSw3ICs0MDcsNyBAQAogLyoqIEBicmllZiAgQ2hlY2sgd2hldGhlciB0aGUgc3BlY2lmaWVkIEZNQUMgc3RhdHVzIGZsYWcgaXMgc2V0IG9yIG5vdC4KICAgKiBAcGFyYW0gIF9fSEFORExFX18gRk1BQyBoYW5kbGUuCiAgICogQHBhcmFtICBfX0ZMQUdfXyBGTUFDIGZsYWcgdG8gY2hlY2suCi0gICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBGTUFDX0ZMQUdfWUVNUFRZIFkgQnVmZmVyIEVtcHR5IEZsYWcKICAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBGTUFDX0ZMQUdfWDFGVUxMIFgxIEJ1ZmZlciBGdWxsIEZsYWcKICAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBGTUFDX0ZMQUdfT1ZGTCAgIE92ZXJmbG93IEVycm9yIEZsYWcKQEAgLTQ4Miw3ICs0NDQsNiBAQAogICAqIEB9CiAgICovCiAKLS8qIFByaXZhdGUgbWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qKiBAYWRkdG9ncm91cCAgRk1BQ19Qcml2YXRlX01hY3JvcwogICAqIEB7CiAgICovCkBAIC00OTksNyArNDYwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fRlVOQ1RJT05fXykgPT0gRk1BQ19GVU5DX0lJUl9ESVJFQ1RfRk9STV8xKSkKIAogLyoqCi0gICogQGJyaWVmICBWZXJpZnkgdGhlIEZNQUMgbG9hZCBmdW5jdGlvbi4KKyAgKiBAYnJpZWYgIFZlcmlmeSB0aGUgRk1BQyBsb2FkIGZ1bmN0aW9uIHVzZWQgZm9yIGlucHV0IGRhdGEsIG91dHB1dCBkYXRhIG9yIGNvZWZmaWNpZW50cy4KICAgKiBAcGFyYW0gIF9fRlVOQ1RJT05fXyBJRCBvZiB0aGUgbG9hZCBmdW5jdGlvbi4KICAgKiBAcmV0dmFsIFNFVCAoX19GVU5DVElPTl9fIGlzIGEgdmFsaWQgdmFsdWUpIG9yIFJFU0VUIChfX0ZVTkNUSU9OX18gaXMgaW52YWxpZCkKICAgKi8KQEAgLTUwOCw3ICs0NjksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0ZVTkNUSU9OX18pID09IEZNQUNfRlVOQ19MT0FEX1kpKQogCiAvKioKLSAgKiBAYnJpZWYgIFZlcmlmeSB0aGUgRk1BQyBsb2FkIGZ1bmN0aW9uLgorICAqIEBicmllZiAgVmVyaWZ5IHRoZSBGTUFDIGxvYWQgZnVuY3Rpb24gdXNlZCB3aXRoIE4gdmFsdWVzIGFzIGlucHV0IG9yIG91dHB1dCBkYXRhLgogICAqIEBwYXJhbSAgX19GVU5DVElPTl9fIElEIG9mIHRoZSBsb2FkIGZ1bmN0aW9uLgogICAqIEByZXR2YWwgU0VUIChfX0ZVTkNUSU9OX18gaXMgYSB2YWxpZCB2YWx1ZSkgb3IgUkVTRVQgKF9fRlVOQ1RJT05fXyBpcyBpbnZhbGlkKQogICAqLwpAQCAtNTE2LDcgKzQ3Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19GVU5DVElPTl9fKSA9PSBGTUFDX0ZVTkNfTE9BRF9ZKSkKIAogLyoqCi0gICogQGJyaWVmICBWZXJpZnkgdGhlIEZNQUMgbG9hZCBmdW5jdGlvbi4KKyAgKiBAYnJpZWYgIFZlcmlmeSB0aGUgRk1BQyBsb2FkIGZ1bmN0aW9uIHVzZWQgd2l0aCBOICsgTSB2YWx1ZXMgYXMgY29lZmZpY2llbnRzLgogICAqIEBwYXJhbSAgX19GVU5DVElPTl9fIElEIG9mIHRoZSBsb2FkIGZ1bmN0aW9uLgogICAqIEByZXR2YWwgU0VUIChfX0ZVTkNUSU9OX18gaXMgYSB2YWxpZCB2YWx1ZSkgb3IgUkVTRVQgKF9fRlVOQ1RJT05fXyBpcyBpbnZhbGlkKQogICAqLwpAQCAtNTkyLDYgKzU1MywxOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0xJUF9TVEFURV9fKSA9PSBGTUFDX0NMSVBfRU5BQkxFRCkpCiAKIC8qKgorICAqIEBicmllZiAgQ2hlY2sgd2hldGhlciB0aGUgdGhyZXNob2xkIGlzIGFwcGxpY2FibGUuCisgICogQHBhcmFtICBfX1NJWkVfXyBTaXplIG9mIHRoZSBtYXRjaGluZyBidWZmZXIuCisgICogQHBhcmFtICBfX1dNX18gV2F0ZXJtYXJrIHZhbHVlLgorICAqIEBwYXJhbSAgX19BQ0NFU1NfXyBBY2Nlc3MgdG8gdGhlIGJ1ZmZlciAocG9sbGluZywgaXQsIGRtYSwgbm9uZSkuCisgICogQHJldHZhbCBUSFJFU0hPTEQKKyAgKi8KKyNkZWZpbmUgSVNfRk1BQ19USFJFU0hPTERfQVBQTElDQUJMRShfX1NJWkVfXywgX19XTV9fLCBfX0FDQ0VTU19fKSAoKCAoX19TSVpFX18pID49ICgoKF9fV01fXykgPT0gRk1BQ19USFJFU0hPTERfMSk/IDFVOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1dNX18pID09IEZNQUNfVEhSRVNIT0xEXzIpPyAyVTogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19XTV9fKSA9PSBGTUFDX1RIUkVTSE9MRF80KT8gNFU6OFUpKSYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoKF9fQUNDRVNTX18pID09IEZNQUNfQlVGRkVSX0FDQ0VTU19ETUEpJiYoKF9fV01fXykgPT0gRk1BQ19USFJFU0hPTERfMSkpfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0FDQ0VTU19fICkhPSBGTUFDX0JVRkZFUl9BQ0NFU1NfRE1BKSkpCisKKy8qKgogICAqIEB9CiAgICovCiAKQEAgLTYyMyw4ICs1OTcsOCBAQAogICAqIEB7CiAgICovCiAvKiBQZXJpcGhlcmFsIENvbnRyb2wgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNQUNfRmlsdGVyQ29uZmlnKEZNQUNfSGFuZGxlVHlwZURlZiAqaGZtYWMsIEZNQUNfRmlsdGVyQ29uZmlnVHlwZURlZiAqc0NvbmZpZyk7Ci1IQUxfU3RhdHVzVHlwZURlZiBIQUxfRk1BQ19GaWx0ZXJDb25maWdfRE1BKEZNQUNfSGFuZGxlVHlwZURlZiAqaGZtYWMsIEZNQUNfRmlsdGVyQ29uZmlnVHlwZURlZiAqc0NvbmZpZyk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfRk1BQ19GaWx0ZXJDb25maWcoRk1BQ19IYW5kbGVUeXBlRGVmICpoZm1hYywgRk1BQ19GaWx0ZXJDb25maWdUeXBlRGVmICpwQ29uZmlnKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTUFDX0ZpbHRlckNvbmZpZ19ETUEoRk1BQ19IYW5kbGVUeXBlRGVmICpoZm1hYywgRk1BQ19GaWx0ZXJDb25maWdUeXBlRGVmICpwQ29uZmlnKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTUFDX0ZpbHRlclByZWxvYWQoRk1BQ19IYW5kbGVUeXBlRGVmICpoZm1hYywgaW50MTZfdCAqcElucHV0LCB1aW50OF90IElucHV0U2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MTZfdCAqcE91dHB1dCwgdWludDhfdCBPdXRwdXRTaXplKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTUFDX0ZpbHRlclByZWxvYWRfRE1BKEZNQUNfSGFuZGxlVHlwZURlZiAqaGZtYWMsIGludDE2X3QgKnBJbnB1dCwgdWludDhfdCBJbnB1dFNpemUsCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJnNHh4X2hhbF9ncGlvX2V4LmggYi9JbmMvc3RtMzJnNHh4X2hhbF9ncGlvX2V4LmgKaW5kZXggY2RhMTYzNi4uNGYyNmRhMiAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZzR4eF9oYWxfZ3Bpb19leC5oCisrKyBiL0luYy9zdG0zMmc0eHhfaGFsX2dwaW9fZXguaApAQCAtODIsNiArODIsNyBAQAogI2VuZGlmIC8qIFRJTTUgKi8KICNkZWZpbmUgR1BJT19BRjJfVElNOCAgICAgICAgICAoKHVpbnQ4X3QpMHgwMikgIC8qIFRJTTggQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICovCiAjZGVmaW5lIEdQSU9fQUYyX1RJTTE1ICAgICAgICAgKCh1aW50OF90KTB4MDIpICAvKiBUSU0xNSBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAqLworI2RlZmluZSBHUElPX0FGMl9USU0xNiAgICAgICAgICgodWludDhfdCkweDAyKSAgLyogVElNMTYgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgKi8KICNpZiBkZWZpbmVkKFRJTTIwKQogI2RlZmluZSBHUElPX0FGMl9USU0yMCAgICAgICAgICgodWludDhfdCkweDAyKSAgLyogVElNMjAgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgKi8KICNlbmRpZiAvKiBUSU0yMCAqLwpAQCAtMjE0LDYgKzIxNSw3IEBACiAgICogQGJyaWVmICAgQUYgOSBzZWxlY3Rpb24KICAgKi8KICNkZWZpbmUgR1BJT19BRjlfVElNMSAgICAgICAgICAoKHVpbnQ4X3QpMHgwOSkgIC8qIFRJTTEgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAgKi8KKyNkZWZpbmUgR1BJT19BRjlfVElNOCAgICAgICAgICAoKHVpbnQ4X3QpMHgwOSkgIC8qIFRJTTggQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAgKi8KICNkZWZpbmUgR1BJT19BRjlfVElNMTUgICAgICAgICAoKHVpbnQ4X3QpMHgwOSkgIC8qIFRJTTE1IEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICAgKi8KICNkZWZpbmUgR1BJT19BRjlfVElNMV9DT01QMSAgICAoKHVpbnQ4X3QpMHgwOSkgIC8qIFRJTTEvQ09NUDEgQnJlYWsgaW4gQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAqLwogI2RlZmluZSBHUElPX0FGOV9USU04X0NPTVAxICAgICgodWludDhfdCkweDA5KSAgLyogVElNOC9DT01QMSBCcmVhayBpbiBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICovCkBAIC0yNDUsNiArMjQ3LDcgQEAKICNkZWZpbmUgR1BJT19BRjExX0ZEQ0FOMyAgICAgICAoKHVpbnQ4X3QpMHgwQikgIC8qIEZEQ0FOMyBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgKi8KICNlbmRpZiAvKiBGRENBTjMgKi8KICNkZWZpbmUgR1BJT19BRjExX1RJTTEgICAgICAgICAoKHVpbnQ4X3QpMHgwQikgIC8qIFRJTTEgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAgKi8KKyNkZWZpbmUgR1BJT19BRjExX1RJTTggICAgICAgICAoKHVpbnQ4X3QpMHgwQikgIC8qIFRJTTggQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAgKi8KICNkZWZpbmUgR1BJT19BRjExX1RJTThfQ09NUDEgICAoKHVpbnQ4X3QpMHgwQikgIC8qIFRJTTgvQ09NUDEgQnJlYWsgaW4gQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICovCiAjZGVmaW5lIEdQSU9fQUYxMV9MUFRJTTEgICAgICAgKCh1aW50OF90KTB4MEIpICAvKiBMUFRJTTEgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICovCiAKQEAgLTI1Miw3ICsyNTUsOCBAQAogICAqIEBicmllZiAgIEFGIDEyIHNlbGVjdGlvbgogICAqLwogI2RlZmluZSBHUElPX0FGMTJfTFBVQVJUMSAgICAgICgodWludDhfdCkweDBDKSAgLyogTFBVQVJUMSBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAqLwotI2RlZmluZSBHUElPX0FGMTJfVElNMV9DT01QMSAgICgodWludDhfdCkweDBDKSAgLyogVElNOC9DT01QMiBCcmVhayBpbiBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgKi8KKyNkZWZpbmUgR1BJT19BRjEyX1RJTTEgICAgICAgICAoKHVpbnQ4X3QpMHgwQykgIC8qIFRJTTEgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAgKi8KKyNkZWZpbmUgR1BJT19BRjEyX1RJTTFfQ09NUDEgICAoKHVpbnQ4X3QpMHgwQykgIC8qIFRJTTEvQ09NUDEgQnJlYWsgaW4gQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICovCiAjZGVmaW5lIEdQSU9fQUYxMl9USU0xX0NPTVAyICAgKCh1aW50OF90KTB4MEMpICAvKiBUSU0xL0NPTVAyIEJyZWFrIGluIEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICAqLwogI2lmIGRlZmluZWQoSFJUSU0xKQogI2RlZmluZSBHUElPX0FGMTJfSFJUSU0xICAgICAgICgodWludDhfdCkweDBDKSAgLyogSFJUSU0xIEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICAqLwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZzR4eF9oYWxfaHJ0aW0uaCBiL0luYy9zdG0zMmc0eHhfaGFsX2hydGltLmgKaW5kZXggMDg2ZWM0Zi4uMWU4YTg1ZSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZzR4eF9oYWxfaHJ0aW0uaAorKysgYi9JbmMvc3RtMzJnNHh4X2hhbF9ocnRpbS5oCkBAIC0xMjQ0LDggKzEyNDQsOCBAQAogI2RlZmluZSBIUlRJTV9PVVRQVVRTRVRfVElNQkVWOF9USU1FQ01QMiAgICAoSFJUSU1fU0VUMVJfVElNRVZOVDgpICAvKiE8IFRpbWVyIGV2ZW50IDggZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGFjdGl2ZSBzdGF0ZSAqLwogI2RlZmluZSBIUlRJTV9PVVRQVVRTRVRfVElNQkVWOV9USU1GQ01QMyAgICAoSFJUSU1fU0VUMVJfVElNRVZOVDkpICAvKiE8IFRpbWVyIGV2ZW50IDkgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGFjdGl2ZSBzdGF0ZSAqLwogLyogVGltZXIgRXZlbnRzIG1hcHBpbmcgZm9yIFRpbWVyIEMgKi8KLSNkZWZpbmUgSFJUSU1fT1VUUFVUU0VUX1RJTUNFVjFfVElNQUNNUDEgICAgKEhSVElNX1NFVDFSX1RJTUVWTlQxKSAgLyohPCBUaW1lciBldmVudCAxIGZvcmNlcyB0aGUgb3V0cHV0IHRvIGl0cyBhY3RpdmUgc3RhdGUgKi8KLSNkZWZpbmUgSFJUSU1fT1VUUFVUU0VUX1RJTUNFVjJfVElNQUNNUDIgICAgKEhSVElNX1NFVDFSX1RJTUVWTlQyKSAgLyohPCBUaW1lciBldmVudCAyIGZvcmNlcyB0aGUgb3V0cHV0IHRvIGl0cyBhY3RpdmUgc3RhdGUgKi8KKyNkZWZpbmUgSFJUSU1fT1VUUFVUU0VUX1RJTUNFVjFfVElNQUNNUDIgICAgKEhSVElNX1NFVDFSX1RJTUVWTlQxKSAgLyohPCBUaW1lciBldmVudCAxIGZvcmNlcyB0aGUgb3V0cHV0IHRvIGl0cyBhY3RpdmUgc3RhdGUgKi8KKyNkZWZpbmUgSFJUSU1fT1VUUFVUU0VUX1RJTUNFVjJfVElNQUNNUDMgICAgKEhSVElNX1NFVDFSX1RJTUVWTlQyKSAgLyohPCBUaW1lciBldmVudCAyIGZvcmNlcyB0aGUgb3V0cHV0IHRvIGl0cyBhY3RpdmUgc3RhdGUgKi8KICNkZWZpbmUgSFJUSU1fT1VUUFVUU0VUX1RJTUNFVjNfVElNQkNNUDIgICAgKEhSVElNX1NFVDFSX1RJTUVWTlQzKSAgLyohPCBUaW1lciBldmVudCAzIGZvcmNlcyB0aGUgb3V0cHV0IHRvIGl0cyBhY3RpdmUgc3RhdGUgKi8KICNkZWZpbmUgSFJUSU1fT1VUUFVUU0VUX1RJTUNFVjRfVElNQkNNUDMgICAgKEhSVElNX1NFVDFSX1RJTUVWTlQ0KSAgLyohPCBUaW1lciBldmVudCA0IGZvcmNlcyB0aGUgb3V0cHV0IHRvIGl0cyBhY3RpdmUgc3RhdGUgKi8KICNkZWZpbmUgSFJUSU1fT1VUUFVUU0VUX1RJTUNFVjVfVElNRENNUDIgICAgKEhSVElNX1NFVDFSX1RJTUVWTlQ1KSAgLyohPCBUaW1lciBldmVudCA1IGZvcmNlcyB0aGUgb3V0cHV0IHRvIGl0cyBhY3RpdmUgc3RhdGUgKi8KQEAgLTEyNjgsNyArMTI2OCw3IEBACiAjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1FRVYyX1RJTUJDTVAzICAgIChIUlRJTV9TRVQxUl9USU1FVk5UMikgIC8qITwgVGltZXIgZXZlbnQgMiBmb3JjZXMgdGhlIG91dHB1dCB0byBpdHMgYWN0aXZlIHN0YXRlICovCiAjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1FRVYzX1RJTUJDTVA0ICAgIChIUlRJTV9TRVQxUl9USU1FVk5UMykgIC8qITwgVGltZXIgZXZlbnQgMyBmb3JjZXMgdGhlIG91dHB1dCB0byBpdHMgYWN0aXZlIHN0YXRlICovCiAjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1FRVY0X1RJTUNDTVAxICAgIChIUlRJTV9TRVQxUl9USU1FVk5UNCkgIC8qITwgVGltZXIgZXZlbnQgNCBmb3JjZXMgdGhlIG91dHB1dCB0byBpdHMgYWN0aXZlIHN0YXRlICovCi0jZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1FRVY1X1RJTURDTVAyICAgIChIUlRJTV9TRVQxUl9USU1FVk5UNSkgIC8qITwgVGltZXIgZXZlbnQgNSBmb3JjZXMgdGhlIG91dHB1dCB0byBpdHMgYWN0aXZlIHN0YXRlICovCisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1FRVY1X1RJTUNDTVAyICAgIChIUlRJTV9TRVQxUl9USU1FVk5UNSkgIC8qITwgVGltZXIgZXZlbnQgNSBmb3JjZXMgdGhlIG91dHB1dCB0byBpdHMgYWN0aXZlIHN0YXRlICovCiAjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1FRVY2X1RJTURDTVAxICAgIChIUlRJTV9TRVQxUl9USU1FVk5UNikgIC8qITwgVGltZXIgZXZlbnQgNiBmb3JjZXMgdGhlIG91dHB1dCB0byBpdHMgYWN0aXZlIHN0YXRlICovCiAjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1FRVY3X1RJTURDTVAyICAgIChIUlRJTV9TRVQxUl9USU1FVk5UNykgIC8qITwgVGltZXIgZXZlbnQgNyBmb3JjZXMgdGhlIG91dHB1dCB0byBpdHMgYWN0aXZlIHN0YXRlICovCiAjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1FRVY4X1RJTUZDTVAzICAgIChIUlRJTV9TRVQxUl9USU1FVk5UOCkgIC8qITwgVGltZXIgZXZlbnQgOCBmb3JjZXMgdGhlIG91dHB1dCB0byBpdHMgYWN0aXZlIHN0YXRlICovCkBAIC0xMzM2LDggKzEzMzYsOCBAQAogI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1CRVY4X1RJTUVDTVAyICAgIChIUlRJTV9SU1QxUl9USU1FVk5UOCkgIC8qITwgVGltZXIgZXZlbnQgOCBmb3JjZXMgdGhlIG91dHB1dCB0byBpdHMgaW5hY3RpdmUgc3RhdGUgKi8KICNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNQkVWOV9USU1GQ01QMyAgICAoSFJUSU1fUlNUMVJfVElNRVZOVDkpICAvKiE8IFRpbWVyIGV2ZW50IDkgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGluYWN0aXZlIHN0YXRlICovCiAvKiBUaW1lciBFdmVudHMgbWFwcGluZyBmb3IgVGltZXIgQyAqLwotI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1DRVYxX1RJTUFDTVAxICAgIChIUlRJTV9SU1QxUl9USU1FVk5UMSkgIC8qITwgVGltZXIgZXZlbnQgMSBmb3JjZXMgdGhlIG91dHB1dCB0byBpdHMgaW5hY3RpdmUgc3RhdGUgKi8KLSNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNQ0VWMl9USU1BQ01QMiAgICAoSFJUSU1fUlNUMVJfVElNRVZOVDIpICAvKiE8IFRpbWVyIGV2ZW50IDIgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGluYWN0aXZlIHN0YXRlICovCisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUNFVjFfVElNQUNNUDIgICAgKEhSVElNX1JTVDFSX1RJTUVWTlQxKSAgLyohPCBUaW1lciBldmVudCAxIGZvcmNlcyB0aGUgb3V0cHV0IHRvIGl0cyBpbmFjdGl2ZSBzdGF0ZSAqLworI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1DRVYyX1RJTUFDTVAzICAgIChIUlRJTV9SU1QxUl9USU1FVk5UMikgIC8qITwgVGltZXIgZXZlbnQgMiBmb3JjZXMgdGhlIG91dHB1dCB0byBpdHMgaW5hY3RpdmUgc3RhdGUgKi8KICNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNQ0VWM19USU1CQ01QMiAgICAoSFJUSU1fUlNUMVJfVElNRVZOVDMpICAvKiE8IFRpbWVyIGV2ZW50IDMgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGluYWN0aXZlIHN0YXRlICovCiAjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUNFVjRfVElNQkNNUDMgICAgKEhSVElNX1JTVDFSX1RJTUVWTlQ0KSAgLyohPCBUaW1lciBldmVudCA0IGZvcmNlcyB0aGUgb3V0cHV0IHRvIGl0cyBpbmFjdGl2ZSBzdGF0ZSAqLwogI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1DRVY1X1RJTURDTVAyICAgIChIUlRJTV9SU1QxUl9USU1FVk5UNSkgIC8qITwgVGltZXIgZXZlbnQgNSBmb3JjZXMgdGhlIG91dHB1dCB0byBpdHMgaW5hY3RpdmUgc3RhdGUgKi8KQEAgLTEzNjAsNyArMTM2MCw3IEBACiAjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUVFVjJfVElNQkNNUDMgICAgKEhSVElNX1JTVDFSX1RJTUVWTlQyKSAgLyohPCBUaW1lciBldmVudCAyIGZvcmNlcyB0aGUgb3V0cHV0IHRvIGl0cyBpbmFjdGl2ZSBzdGF0ZSAqLwogI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1FRVYzX1RJTUJDTVA0ICAgIChIUlRJTV9SU1QxUl9USU1FVk5UMykgIC8qITwgVGltZXIgZXZlbnQgMyBmb3JjZXMgdGhlIG91dHB1dCB0byBpdHMgaW5hY3RpdmUgc3RhdGUgKi8KICNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNRUVWNF9USU1DQ01QMSAgICAoSFJUSU1fUlNUMVJfVElNRVZOVDQpICAvKiE8IFRpbWVyIGV2ZW50IDQgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGluYWN0aXZlIHN0YXRlICovCi0jZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUVFVjVfVElNRENNUDIgICAgKEhSVElNX1JTVDFSX1RJTUVWTlQ1KSAgLyohPCBUaW1lciBldmVudCA1IGZvcmNlcyB0aGUgb3V0cHV0IHRvIGl0cyBpbmFjdGl2ZSBzdGF0ZSAqLworI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1FRVY1X1RJTUNDTVAyICAgIChIUlRJTV9SU1QxUl9USU1FVk5UNSkgIC8qITwgVGltZXIgZXZlbnQgNSBmb3JjZXMgdGhlIG91dHB1dCB0byBpdHMgaW5hY3RpdmUgc3RhdGUgKi8KICNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNRUVWNl9USU1EQ01QMSAgICAoSFJUSU1fUlNUMVJfVElNRVZOVDYpICAvKiE8IFRpbWVyIGV2ZW50IDYgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGluYWN0aXZlIHN0YXRlICovCiAjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUVFVjdfVElNRENNUDIgICAgKEhSVElNX1JTVDFSX1RJTUVWTlQ3KSAgLyohPCBUaW1lciBldmVudCA3IGZvcmNlcyB0aGUgb3V0cHV0IHRvIGl0cyBpbmFjdGl2ZSBzdGF0ZSAqLwogI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1FRVY4X1RJTUZDTVAzICAgIChIUlRJTV9SU1QxUl9USU1FVk5UOCkgIC8qITwgVGltZXIgZXZlbnQgOCBmb3JjZXMgdGhlIG91dHB1dCB0byBpdHMgaW5hY3RpdmUgc3RhdGUgKi8KQEAgLTIzNjgsNyArMjM2OCw3IEBACiAgICogQHsKICAgKiBAYnJpZWYgQ29uc3RhbnRzIGRlZmluaW5nIHRoZSBETEwgY2FsaWJyYXRpb24gcGVyaW9kcyAoaW4gbWljcm8gc2Vjb25kcykKICAgKi8KLSNkZWZpbmUgSFJUSU1fU0lOR0xFX0NBTElCUkFUSU9OICAgIDB4RkZGRkZGRkZVICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBOb24gcGVyaW9kaWMgRExMIGNhbGlicmF0aW9uICovCisjZGVmaW5lIEhSVElNX1NJTkdMRV9DQUxJQlJBVElPTiAgICAweEZGRkZGRkZGVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTm9uIHBlcmlvZGljIERMTCBjYWxpYnJhdGlvbiAqLwogI2RlZmluZSBIUlRJTV9DQUxJQlJBVElPTlJBVEVfMCAgICAgMHgwMDAwMDAwMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBlcmlvZGljIERMTCBjYWxpYnJhdGlvbjogVCA9IDEwNDg1NzZVICogdEhSVElNICg2LjE2OCBtcykgKi8KICNkZWZpbmUgSFJUSU1fQ0FMSUJSQVRJT05SQVRFXzEgICAgIChIUlRJTV9ETExDUl9DQUxSVEVfMCkgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQZXJpb2RpYyBETEwgY2FsaWJyYXRpb246IFQgPSAxMzEwNzJVICogdEhSVElNICgwLjc3MSBtcykgKi8KICNkZWZpbmUgSFJUSU1fQ0FMSUJSQVRJT05SQVRFXzIgICAgIChIUlRJTV9ETExDUl9DQUxSVEVfMSkgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQZXJpb2RpYyBETEwgY2FsaWJyYXRpb246IFQgPSAxNjM4NFUgKiB0SFJUSU0gKDAuMDk2IG1zKSAqLwpAQCAtMzM2MSw0NyArMzM2MSw2NiBAQAogICAgICAgICAgICAgICAgKChTWU5DT1VUUFVUUE9MQVJJVFkpID09IEhSVElNX1NZTkNPVVRQVVRQT0xBUklUWV9QT1NJVElWRSkgIHx8IFwKICAgICAgICAgICAgICAgICgoU1lOQ09VVFBVVFBPTEFSSVRZKSA9PSBIUlRJTV9TWU5DT1VUUFVUUE9MQVJJVFlfTkVHQVRJVkUpKQogCi0jZGVmaW5lIElTX0hSVElNX0VWRU5UU1JDKEVWRU5UU1JDKVwKLSAgICAgICAgICAgICAgICAoKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWMVNSQ19HUElPICAgICAgKSAgIHx8IFwKLSAgICAgICAgICAgICAgICAgKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWMlNSQ19HUElPICAgICAgKSAgIHx8IFwKLSAgICAgICAgICAgICAgICAgKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWM1NSQ19HUElPICAgICAgKSAgIHx8IFwKLSAgICAgICAgICAgICAgICAgKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWNFNSQ19HUElPICAgICAgKSAgIHx8IFwKLSAgICAgICAgICAgICAgICAgKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWNVNSQ19HUElPICAgICAgKSAgIHx8IFwKLSAgICAgICAgICAgICAgICAgKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWNlNSQ19HUElPICAgICAgKSAgIHx8IFwKLSAgICAgICAgICAgICAgICAgKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWN1NSQ19HUElPICAgICAgKSAgIHx8IFwKLSAgICAgICAgICAgICAgICAgKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWOFNSQ19HUElPICAgICAgKSAgIHx8IFwKLSAgICAgICAgICAgICAgICAgKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWOVNSQ19HUElPICAgICAgKSAgIHx8IFwKLSAgICAgICAgICAgICAgICAgKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWMTBTUkNfR1BJTyAgICAgKSAgIHx8IFwKLSAgICAgICAgICAgICAgICAgKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWMVNSQ19DT01QMl9PVVQgKSAgIHx8IFwKLSAgICAgICAgICAgICAgICAgKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWMlNSQ19DT01QNF9PVVQgKSAgIHx8IFwKLSAgICAgICAgICAgICAgICAgKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWM1NSQ19DT01QNl9PVVQgKSAgIHx8IFwKLSAgICAgICAgICAgICAgICAgKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWNFNSQ19DT01QMV9PVVQgKSAgIHx8IFwKLSAgICAgICAgICAgICAgICAgKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWNVNSQ19DT01QM19PVVQgKSAgIHx8IFwKLSAgICAgICAgICAgICAgICAgKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWNlNSQ19DT01QMl9PVVQgKSAgIHx8IFwKLSAgICAgICAgICAgICAgICAgKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWN1NSQ19DT01QNF9PVVQgKSAgIHx8IFwKLSAgICAgICAgICAgICAgICAgKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWOFNSQ19DT01QNl9PVVQgKSAgIHx8IFwKLSAgICAgICAgICAgICAgICAgKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWOVNSQ19DT01QNV9PVVQgKSAgIHx8IFwKLSAgICAgICAgICAgICAgICAgKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWMTBTUkNfQ09NUDdfT1VUKSAgIHx8IFwKLSAgICAgICAgICAgICAgICAgKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWMVNSQ19USU0xX1RSR08gKSAgIHx8IFwKLSAgICAgICAgICAgICAgICAgKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWMlNSQ19USU0yX1RSR08gKSAgIHx8IFwKLSAgICAgICAgICAgICAgICAgKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWM1NSQ19USU0zX1RSR08gKSAgIHx8IFwKLSAgICAgICAgICAgICAgICAgKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWNFNSQ19DT01QNV9PVVQgKSAgIHx8IFwKLSAgICAgICAgICAgICAgICAgKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWNVNSQ19DT01QN19PVVQgKSAgIHx8IFwKLSAgICAgICAgICAgICAgICAgKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWNlNSQ19DT01QMV9PVVQgKSAgIHx8IFwKLSAgICAgICAgICAgICAgICAgKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWN1NSQ19USU03X1RSR08gKSAgIHx8IFwKLSAgICAgICAgICAgICAgICAgKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWOFNSQ19DT01QM19PVVQgKSAgIHx8IFwKLSAgICAgICAgICAgICAgICAgKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWOVNSQ19USU0xNV9UUkdPKSAgIHx8IFwKLSAgICAgICAgICAgICAgICAgKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWMTBTUkNfVElNNl9UUkdPKSAgIHx8IFwKLSAgICAgICAgICAgICAgICAgKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWMVNSQ19BREMxX0FXRDEgKSAgIHx8IFwKLSAgICAgICAgICAgICAgICAgKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWMlNSQ19BREMxX0FXRDIgKSAgIHx8IFwKLSAgICAgICAgICAgICAgICAgKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWM1NSQ19BREMxX0FXRDMgKSAgIHx8IFwKLSAgICAgICAgICAgICAgICAgKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWNFNSQ19BREMyX0FXRDEgKSAgIHx8IFwKLSAgICAgICAgICAgICAgICAgKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWNVNSQ19BREMyX0FXRDIgKSAgIHx8IFwKLSAgICAgICAgICAgICAgICAgKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWNlNSQ19BREMyX0FXRDMgKSAgIHx8IFwKLSAgICAgICAgICAgICAgICAgKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWN1NSQ19BREMzX0FXRDEgKSAgIHx8IFwKLSAgICAgICAgICAgICAgICAgKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWOFNSQ19BREM0X0FXRDEgKSAgIHx8IFwKLSAgICAgICAgICAgICAgICAgKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWOVNSQ19DT01QNF9PVVQgKSAgIHx8IFwKLSAgICAgICAgICAgICAgICAgKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWMTBTUkNfQURDNV9BV0QxKSkKKyNkZWZpbmUgSVNfSFJUSU1fRVZFTlRTUkMoRVZFTlQsIEVWRU5UU1JDKSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKCgoKEVWRU5UKSA9PSBIUlRJTV9FVkVOVF8xKSAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAoKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWMVNSQ19HUElPICAgICAgKSAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICgoRVZFTlRTUkMpID09IEhSVElNX0VFVjFTUkNfQ09NUDJfT1VUICkgICB8fCBcCisgICAgICAgICAgICAgICAgICAoKEVWRU5UU1JDKSA9PSBIUlRJTV9FRVYxU1JDX1RJTTFfVFJHTyApICAgfHwgXAorICAgICAgICAgICAgICAgICAgKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWMVNSQ19BREMxX0FXRDEgKSkpICAgIFwKKyAgICB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICgoKEVWRU5UKSA9PSBIUlRJTV9FVkVOVF8yKSAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAoKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWMlNSQ19HUElPICAgICAgKSAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICgoRVZFTlRTUkMpID09IEhSVElNX0VFVjJTUkNfQ09NUDRfT1VUICkgICB8fCBcCisgICAgICAgICAgICAgICAgICAoKEVWRU5UU1JDKSA9PSBIUlRJTV9FRVYyU1JDX1RJTTJfVFJHTyApICAgfHwgXAorICAgICAgICAgICAgICAgICAgKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWMlNSQ19BREMxX0FXRDIgKSkpICAgIFwKKyAgICB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICgoKEVWRU5UKSA9PSBIUlRJTV9FVkVOVF8zKSAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAoKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWM1NSQ19HUElPICAgICAgKSAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICgoRVZFTlRTUkMpID09IEhSVElNX0VFVjNTUkNfQ09NUDZfT1VUICkgICB8fCBcCisgICAgICAgICAgICAgICAgICAoKEVWRU5UU1JDKSA9PSBIUlRJTV9FRVYzU1JDX1RJTTNfVFJHTyApICAgfHwgXAorICAgICAgICAgICAgICAgICAgKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWM1NSQ19BREMxX0FXRDMgKSkpICAgIFwKKyAgICB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICgoKEVWRU5UKSA9PSBIUlRJTV9FVkVOVF80KSAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAoKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWNFNSQ19HUElPICAgICAgKSAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICgoRVZFTlRTUkMpID09IEhSVElNX0VFVjRTUkNfQ09NUDFfT1VUICkgICB8fCBcCisgICAgICAgICAgICAgICAgICAoKEVWRU5UU1JDKSA9PSBIUlRJTV9FRVY0U1JDX0NPTVA1X09VVCApICAgfHwgXAorICAgICAgICAgICAgICAgICAgKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWNFNSQ19BREMyX0FXRDEgKSkpICAgIFwKKyAgICB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICgoKEVWRU5UKSA9PSBIUlRJTV9FVkVOVF81KSAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAoKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWNVNSQ19HUElPICAgICAgKSAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICgoRVZFTlRTUkMpID09IEhSVElNX0VFVjVTUkNfQ09NUDNfT1VUICkgICB8fCBcCisgICAgICAgICAgICAgICAgICAoKEVWRU5UU1JDKSA9PSBIUlRJTV9FRVY1U1JDX0NPTVA3X09VVCApICAgfHwgXAorICAgICAgICAgICAgICAgICAgKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWNVNSQ19BREMyX0FXRDIgKSkpICAgIFwKKyAgICB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICgoKEVWRU5UKSA9PSBIUlRJTV9FVkVOVF82KSAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAoKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWNlNSQ19HUElPICAgICAgKSAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICgoRVZFTlRTUkMpID09IEhSVElNX0VFVjZTUkNfQ09NUDJfT1VUICkgICB8fCBcCisgICAgICAgICAgICAgICAgICAoKEVWRU5UU1JDKSA9PSBIUlRJTV9FRVY2U1JDX0NPTVAxX09VVCApICAgfHwgXAorICAgICAgICAgICAgICAgICAgKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWNlNSQ19BREMyX0FXRDMgKSkpICAgIFwKKyAgICB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICgoKEVWRU5UKSA9PSBIUlRJTV9FVkVOVF83KSAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAoKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWN1NSQ19HUElPICAgICAgKSAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICgoRVZFTlRTUkMpID09IEhSVElNX0VFVjdTUkNfQ09NUDRfT1VUICkgICB8fCBcCisgICAgICAgICAgICAgICAgICAoKEVWRU5UU1JDKSA9PSBIUlRJTV9FRVY3U1JDX1RJTTdfVFJHTyApICAgfHwgXAorICAgICAgICAgICAgICAgICAgKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWN1NSQ19BREMzX0FXRDEgKSkpICAgIFwKKyAgICB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICgoKEVWRU5UKSA9PSBIUlRJTV9FVkVOVF84KSAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAoKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWOFNSQ19HUElPICAgICAgKSAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICgoRVZFTlRTUkMpID09IEhSVElNX0VFVjhTUkNfQ09NUDZfT1VUICkgICB8fCBcCisgICAgICAgICAgICAgICAgICAoKEVWRU5UU1JDKSA9PSBIUlRJTV9FRVY4U1JDX0NPTVAzX09VVCApICAgfHwgXAorICAgICAgICAgICAgICAgICAgKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWOFNSQ19BREM0X0FXRDEgKSkpICAgIFwKKyAgICB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICgoKEVWRU5UKSA9PSBIUlRJTV9FVkVOVF85KSAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAoKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWOVNSQ19HUElPICAgICAgKSAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICgoRVZFTlRTUkMpID09IEhSVElNX0VFVjlTUkNfQ09NUDVfT1VUICkgICB8fCBcCisgICAgICAgICAgICAgICAgICAoKEVWRU5UU1JDKSA9PSBIUlRJTV9FRVY5U1JDX1RJTTE1X1RSR08pICAgfHwgXAorICAgICAgICAgICAgICAgICAgKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWOVNSQ19DT01QNF9PVVQgKSkpICAgIFwKKyAgICB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICgoKEVWRU5UKSA9PSBIUlRJTV9FVkVOVF8xMCkgJiYgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAoKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWMTBTUkNfR1BJTyAgICAgKSAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICgoRVZFTlRTUkMpID09IEhSVElNX0VFVjEwU1JDX0NPTVA3X09VVCkgICB8fCBcCisgICAgICAgICAgICAgICAgICAoKEVWRU5UU1JDKSA9PSBIUlRJTV9FRVYxMFNSQ19USU02X1RSR08pICAgfHwgXAorICAgICAgICAgICAgICAgICAgKChFVkVOVFNSQykgPT0gSFJUSU1fRUVWMTBTUkNfQURDNV9BV0QxKSkpKQogCiAjZGVmaW5lIElTX0hSVElNX0VWRU5UUE9MQVJJVFkoRVZFTlRTRU5TSVRJVklUWSwgRVZFTlRQT0xBUklUWSlcCiAgICAgKCgoKEVWRU5UU0VOU0lUSVZJVFkpID09IEhSVElNX0VWRU5UU0VOU0lUSVZJVFlfTEVWRUwpICAmJiAgICAgIFwKQEAgLTM2MjcsMjYgKzM2NDYsMTkgQEAKICAgICAgICAgICAgICAgKChBRENUUklHR0VSVVBEQVRFKSA9PSBIUlRJTV9BRENUUklHR0VSVVBEQVRFX1RJTUVSX0YpKQogCiAjZGVmaW5lIElTX0hSVElNX0NBTElCUkFUSU9OUkFURShDQUxJQlJBVElPTlJBVEUpXAotICAgICgoKENBTElCUkFUSU9OUkFURSkgPT0gSFJUSU1fU0lOR0xFX0NBTElCUkFUSU9OKSAgIHx8IFwKLSAgICAgKChDQUxJQlJBVElPTlJBVEUpID09IEhSVElNX0NBTElCUkFUSU9OUkFURV8wKSB8fCBcCisgICAgKCgoQ0FMSUJSQVRJT05SQVRFKSA9PSBIUlRJTV9TSU5HTEVfQ0FMSUJSQVRJT04pIHx8IFwKKyAgICAgKChDQUxJQlJBVElPTlJBVEUpID09IEhSVElNX0NBTElCUkFUSU9OUkFURV8wKSAgfHwgXAogICAgICAoKENBTElCUkFUSU9OUkFURSkgPT0gSFJUSU1fQ0FMSUJSQVRJT05SQVRFXzEpICB8fCBcCiAgICAgICgoQ0FMSUJSQVRJT05SQVRFKSA9PSBIUlRJTV9DQUxJQlJBVElPTlJBVEVfMikgIHx8IFwKICAgICAgKChDQUxJQlJBVElPTlJBVEUpID09IEhSVElNX0NBTElCUkFUSU9OUkFURV8zKSkKIAotI2RlZmluZSBJU19IUlRJTV9USU1FUl9CVVJTVERNQShUSU1FUiwgQlVSU1RETUEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgKCgoKFRJTUVSKSA9PSBIUlRJTV9USU1FUklOREVYX01BU1RFUikgJiYgKCgoQlVSU1RETUEpICYgMHhGRkZGRkMwMDBVKSA9PSAweDAwMDAwMDAwVSkpIFwKLSAgICB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAoKChUSU1FUikgPT0gSFJUSU1fVElNRVJJTkRFWF9USU1FUl9BKSAmJiAoKChCVVJTVERNQSkgJiAweEZGODAwMDAwVSkgPT0gMHgwMDAwMDAwMFUpKSBcCi0gICAgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKCgoVElNRVIpID09IEhSVElNX1RJTUVSSU5ERVhfVElNRVJfQikgJiYgKCgoQlVSU1RETUEpICYgMHhGRjgwMDAwMFUpID09IDB4MDAwMDAwMDBVKSkgXAotICAgIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICgoKFRJTUVSKSA9PSBIUlRJTV9USU1FUklOREVYX1RJTUVSX0MpICYmICgoKEJVUlNURE1BKSAmIDB4RkY4MDAwMDBVKSA9PSAweDAwMDAwMDAwVSkpIFwKLSAgICB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAoKChUSU1FUikgPT0gSFJUSU1fVElNRVJJTkRFWF9USU1FUl9EKSAmJiAoKChCVVJTVERNQSkgJiAweEZGODAwMDAwVSkgPT0gMHgwMDAwMDAwMFUpKSBcCi0gICAgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKCgoVElNRVIpID09IEhSVElNX1RJTUVSSU5ERVhfVElNRVJfRSkgJiYgKCgoQlVSU1RETUEpICYgMHhGRjgwMDAwMFUpID09IDB4MDAwMDAwMDBVKSkgXAotICAgIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICgoKFRJTUVSKSA9PSBIUlRJTV9USU1FUklOREVYX1RJTUVSX0YpICYmICgoKEJVUlNURE1BKSAmIDB4RkY4MDAwMDBVKSA9PSAweDAwMDAwMDAwVSkpKQorI2RlZmluZSBJU19IUlRJTV9USU1FUl9CVVJTVERNQShUSU1FUiwgQlVSU1RETUEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKCgoKFRJTUVSKSA9PSBIUlRJTV9USU1FUklOREVYX01BU1RFUikgICYmICgoKEJVUlNURE1BKSAmIDB4RkZGRkMwMDBVKSA9PSAweDAwMDAwMDAwVSkpIFwKKyAgfHwgKCgoVElNRVIpID09IEhSVElNX1RJTUVSSU5ERVhfVElNRVJfQSkgJiYgKCgoQlVSU1RETUEpICYgMHhGRjgwMDAwMFUpID09IDB4MDAwMDAwMDBVKSkgXAorICB8fCAoKChUSU1FUikgPT0gSFJUSU1fVElNRVJJTkRFWF9USU1FUl9CKSAmJiAoKChCVVJTVERNQSkgJiAweEZGODAwMDAwVSkgPT0gMHgwMDAwMDAwMFUpKSBcCisgIHx8ICgoKFRJTUVSKSA9PSBIUlRJTV9USU1FUklOREVYX1RJTUVSX0MpICYmICgoKEJVUlNURE1BKSAmIDB4RkY4MDAwMDBVKSA9PSAweDAwMDAwMDAwVSkpIFwKKyAgfHwgKCgoVElNRVIpID09IEhSVElNX1RJTUVSSU5ERVhfVElNRVJfRCkgJiYgKCgoQlVSU1RETUEpICYgMHhGRjgwMDAwMFUpID09IDB4MDAwMDAwMDBVKSkgXAorICB8fCAoKChUSU1FUikgPT0gSFJUSU1fVElNRVJJTkRFWF9USU1FUl9FKSAmJiAoKChCVVJTVERNQSkgJiAweEZGODAwMDAwVSkgPT0gMHgwMDAwMDAwMFUpKSkKIAogI2RlZmluZSBJU19IUlRJTV9CVVJTVE1PREVDVEwoQlVSU1RNT0RFQ1RMKVwKICAgICAoKChCVVJTVE1PREVDVEwpID09IEhSVElNX0JVUlNUTU9ERUNUTF9ESVNBQkxFRCkgIHx8IFwKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmc0eHhfaGFsX2kyY19leC5oIGIvSW5jL3N0bTMyZzR4eF9oYWxfaTJjX2V4LmgKaW5kZXggNjhhNDQzZC4uY2EwNGI3MiAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZzR4eF9oYWxfaTJjX2V4LmgKKysrIGIvSW5jL3N0bTMyZzR4eF9oYWxfaTJjX2V4LmgKQEAgLTEyMyw2ICsxMjMsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoX19DT05GSUdfXykgJiAoSTJDX0ZBU1RNT0RFUExVU19JMkMyKSkgPT0gSTJDX0ZBU1RNT0RFUExVU19JMkMyKSAgICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChfX0NPTkZJR19fKSAmIChJMkNfRkFTVE1PREVQTFVTX0kyQzMpKSA9PSBJMkNfRkFTVE1PREVQTFVTX0kyQzMpICAgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKF9fQ09ORklHX18pICYgKEkyQ19GQVNUTU9ERVBMVVNfSTJDNCkpID09IEkyQ19GQVNUTU9ERVBMVVNfSTJDNCkpKQorCisKKwogLyoqCiAgICogQH0KICAgKi8KZGlmZiAtLWdpdCBhL0luYy9zdG0zMmc0eHhfaGFsX2xwdGltLmggYi9JbmMvc3RtMzJnNHh4X2hhbF9scHRpbS5oCmluZGV4IGUzYmZkNTUuLjhlYmQ4YzAgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmc0eHhfaGFsX2xwdGltLmgKKysrIGIvSW5jL3N0bTMyZzR4eF9oYWxfbHB0aW0uaApAQCAtNCw3ICs0LDcgQEAKICAgKiBAYXV0aG9yICBNQ0QgQXBwbGljYXRpb24gVGVhbQogICAqIEBicmllZiAgIEhlYWRlciBmaWxlIG9mIExQVElNIEhBTCBtb2R1bGUuCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgICogQGF0dGVudGlvbgorICAqIEBhdHRlbnRpb24KICAgKgogICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KQEAgLTEzLDcgKzEzLDggQEAKICAgKiB0aGUgIkxpY2Vuc2UiOyBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlCiAgICogTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0OgogICAqICAgICAgICAgICAgICAgICAgICAgICAgb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlCi0gICogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqLwogCiAvKiBEZWZpbmUgdG8gcHJldmVudCByZWN1cnNpdmUgaW5jbHVzaW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtNDExLDYgKzQxMiw4IEBACiAgICogQG5vdGUgICBUaGUgZm9sbG93aW5nIHNlcXVlbmNlIGlzIHJlcXVpcmVkIHRvIHNvbHZlIExQVElNIGRpc2FibGUgSFcgbGltaXRhdGlvbi4KICAgKiAgICAgICAgIFBsZWFzZSBjaGVjayBFcnJhdGEgU2hlZXQgRVMwMzM1IGZvciBtb3JlIGRldGFpbHMgdW5kZXIgIk1DVSBtYXkgcmVtYWluCiAgICogICAgICAgICBzdHVjayBpbiBMUFRJTSBpbnRlcnJ1cHQgd2hlbiBlbnRlcmluZyBTdG9wIG1vZGUiIHNlY3Rpb24uCisgICogQG5vdGUgICBQbGVhc2UgY2FsbCBAcmVmIEhBTF9MUFRJTV9HZXRTdGF0ZSgpIGFmdGVyIGEgY2FsbCB0byBfX0hBTF9MUFRJTV9ESVNBQkxFIHRvCisgICogICAgICAgICBjaGVjayBmb3IgVElNRU9VVC4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KICNkZWZpbmUgX19IQUxfTFBUSU1fRElTQUJMRShfX0hBTkRMRV9fKSAgIExQVElNX0Rpc2FibGUoX19IQU5ETEVfXykKQEAgLTQ0Nyw2ICs0NTAsNyBAQAogICAqIEBwYXJhbSAgX19IQU5ETEVfXyBMUFRJTSBoYW5kbGUKICAgKiBAcGFyYW0gIF9fVkFMVUVfXyBBdXRvcmVsb2FkIHZhbHVlCiAgICogQHJldHZhbCBOb25lCisgICogQG5vdGUgICBUaGUgQVJSIHJlZ2lzdGVyIGNhbiBvbmx5IGJlIG1vZGlmaWVkIHdoZW4gdGhlIExQVElNIGluc3RhbmNlIGlzIGVuYWJsZWQuCiAgICovCiAjZGVmaW5lIF9fSEFMX0xQVElNX0FVVE9SRUxPQURfU0VUKF9fSEFORExFX18gLCBfX1ZBTFVFX18pICAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+QVJSID0gIChfX1ZBTFVFX18pKQogCkBAIC00NTUsNiArNDU5LDcgQEAKICAgKiBAcGFyYW0gIF9fSEFORExFX18gTFBUSU0gaGFuZGxlCiAgICogQHBhcmFtICBfX1ZBTFVFX18gQ29tcGFyZSB2YWx1ZQogICAqIEByZXR2YWwgTm9uZQorICAqIEBub3RlICAgVGhlIENNUCByZWdpc3RlciBjYW4gb25seSBiZSBtb2RpZmllZCB3aGVuIHRoZSBMUFRJTSBpbnN0YW5jZSBpcyBlbmFibGVkLgogICAqLwogI2RlZmluZSBfX0hBTF9MUFRJTV9DT01QQVJFX1NFVChfX0hBTkRMRV9fICwgX19WQUxVRV9fKSAgICAgKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNNUCA9ICAoX19WQUxVRV9fKSkKIApAQCAtNTAzLDYgKzUwOCw3IEBACiAgICogICAgICAgICAgICBAYXJnIExQVElNX0lUX0FSUk0gICAgOiBBdXRvcmVsb2FkIG1hdGNoIEludGVycnVwdC4KICAgKiAgICAgICAgICAgIEBhcmcgTFBUSU1fSVRfQ01QTSAgICA6IENvbXBhcmUgbWF0Y2ggSW50ZXJydXB0LgogICAqIEByZXR2YWwgTm9uZS4KKyAgKiBAbm90ZSAgIFRoZSBMUFRJTSBpbnRlcnJ1cHRzIGNhbiBvbmx5IGJlIGVuYWJsZWQgd2hlbiB0aGUgTFBUSU0gaW5zdGFuY2UgaXMgZGlzYWJsZWQuCiAgICovCiAjZGVmaW5lIF9fSEFMX0xQVElNX0VOQUJMRV9JVChfX0hBTkRMRV9fLCBfX0lOVEVSUlVQVF9fKSAgICAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+SUVSICB8PSAoX19JTlRFUlJVUFRfXykpCiAKQEAgLTUxOSw2ICs1MjUsNyBAQAogICAqICAgICAgICAgICAgQGFyZyBMUFRJTV9JVF9BUlJNICAgIDogQXV0b3JlbG9hZCBtYXRjaCBJbnRlcnJ1cHQuCiAgICogICAgICAgICAgICBAYXJnIExQVElNX0lUX0NNUE0gICAgOiBDb21wYXJlIG1hdGNoIEludGVycnVwdC4KICAgKiBAcmV0dmFsIE5vbmUuCisgICogQG5vdGUgICBUaGUgTFBUSU0gaW50ZXJydXB0cyBjYW4gb25seSBiZSBkaXNhYmxlZCB3aGVuIHRoZSBMUFRJTSBpbnN0YW5jZSBpcyBkaXNhYmxlZC4KICAgKi8KICNkZWZpbmUgX19IQUxfTFBUSU1fRElTQUJMRV9JVChfX0hBTkRMRV9fLCBfX0lOVEVSUlVQVF9fKSAgICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5JRVIgICY9ICh+KF9fSU5URVJSVVBUX18pKSkKIApAQCAtNTcyLDYgKzU3OSwxMCBAQAogICAqIEB7CiAgICovCiAKKy8qKiBAYWRkdG9ncm91cCBMUFRJTV9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAxCisgKiAgQGJyaWVmICAgIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucy4KKyAqIEB7CisgKi8KIC8qIEluaXRpYWxpemF0aW9uL2RlLWluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfTFBUSU1fSW5pdChMUFRJTV9IYW5kbGVUeXBlRGVmICpobHB0aW0pOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0xQVElNX0RlSW5pdChMUFRJTV9IYW5kbGVUeXBlRGVmICpobHB0aW0pOwpAQCAtNTc5LDcgKzU5MCwxNCBAQAogLyogTVNQIGZ1bmN0aW9ucyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHZvaWQgSEFMX0xQVElNX01zcEluaXQoTFBUSU1fSGFuZGxlVHlwZURlZiAqaGxwdGltKTsKIHZvaWQgSEFMX0xQVElNX01zcERlSW5pdChMUFRJTV9IYW5kbGVUeXBlRGVmICpobHB0aW0pOworLyoqCisgICogQH0KKyAgKi8KIAorLyoqIEBhZGR0b2dyb3VwIExQVElNX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDIKKyAqICBAYnJpZWYgICBTdGFydC1TdG9wIG9wZXJhdGlvbiBmdW5jdGlvbnMuCisgKiBAeworICovCiAvKiBTdGFydC9TdG9wIG9wZXJhdGlvbiBmdW5jdGlvbnMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBQV00gTW9kZSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyovCiAvKiBCbG9ja2luZyBtb2RlOiBQb2xsaW5nICovCkBAIC02MjgsMTIgKzY0NiwyNiBAQAogLyogTm9uLUJsb2NraW5nIG1vZGU6IEludGVycnVwdCAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0xQVElNX0NvdW50ZXJfU3RhcnRfSVQoTFBUSU1fSGFuZGxlVHlwZURlZiAqaGxwdGltLCB1aW50MzJfdCBQZXJpb2QpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0xQVElNX0NvdW50ZXJfU3RvcF9JVChMUFRJTV9IYW5kbGVUeXBlRGVmICpobHB0aW0pOworLyoqCisgICogQH0KKyAgKi8KIAorLyoqIEBhZGR0b2dyb3VwIExQVElNX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDMKKyAqICBAYnJpZWYgIFJlYWQgb3BlcmF0aW9uIGZ1bmN0aW9ucy4KKyAqIEB7CisgKi8KIC8qIFJlYWRpbmcgb3BlcmF0aW9uIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB1aW50MzJfdCBIQUxfTFBUSU1fUmVhZENvdW50ZXIoTFBUSU1fSGFuZGxlVHlwZURlZiAqaGxwdGltKTsKIHVpbnQzMl90IEhBTF9MUFRJTV9SZWFkQXV0b1JlbG9hZChMUFRJTV9IYW5kbGVUeXBlRGVmICpobHB0aW0pOwogdWludDMyX3QgSEFMX0xQVElNX1JlYWRDb21wYXJlKExQVElNX0hhbmRsZVR5cGVEZWYgKmhscHRpbSk7CisvKioKKyAgKiBAfQorICAqLwogCisvKiogQGFkZHRvZ3JvdXAgTFBUSU1fRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwNAorICogIEBicmllZiAgTFBUSU0gSVJRIGhhbmRsZXIgYW5kIGNhbGxiYWNrIGZ1bmN0aW9ucy4KKyAqIEB7CisgKi8KIC8qIExQVElNIElSUSBmdW5jdGlvbnMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB2b2lkIEhBTF9MUFRJTV9JUlFIYW5kbGVyKExQVElNX0hhbmRsZVR5cGVEZWYgKmhscHRpbSk7CiAKQEAgLTY1MSw5ICs2ODMsMTkgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9MUFRJTV9SZWdpc3RlckNhbGxiYWNrKExQVElNX0hhbmRsZVR5cGVEZWYgKmxwaHRpbSwgSEFMX0xQVElNX0NhbGxiYWNrSURUeXBlRGVmIENhbGxiYWNrSUQsIHBMUFRJTV9DYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9MUFRJTV9VblJlZ2lzdGVyQ2FsbGJhY2soTFBUSU1fSGFuZGxlVHlwZURlZiAqbHBodGltLCBIQUxfTFBUSU1fQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJRCk7CiAjZW5kaWYgLyogVVNFX0hBTF9MUFRJTV9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KKy8qKgorICAqIEB9CisgICovCiAKKy8qKiBAYWRkdG9ncm91cCBMUFRJTV9Hcm91cDUKKyAqICBAYnJpZWYgICBQZXJpcGhlcmFsIFN0YXRlIGZ1bmN0aW9ucy4KKyAqIEB7CisgKi8KIC8qIFBlcmlwaGVyYWwgU3RhdGUgZnVuY3Rpb25zICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBIQUxfTFBUSU1fU3RhdGVUeXBlRGVmIEhBTF9MUFRJTV9HZXRTdGF0ZShMUFRJTV9IYW5kbGVUeXBlRGVmICpobHB0aW0pOworLyoqCisgICogQH0KKyAgKi8KIAogLyoqCiAgICogQH0KQEAgLTc0NSw3ICs3ODcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19UUklHX18pID09IExQVElNX1RSSUdTT1VSQ0VfNykgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19UUklHX18pID09IExQVElNX1RSSUdTT1VSQ0VfOCkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19UUklHX18pID09IExQVElNX1RSSUdTT1VSQ0VfOSkpCi0jZW5kaWYgLyogU1RNMzJHNDczeHggfHwgU1RNMzJHNDgzeHggfHxTVE0zMkc0NzR4eCB8fCBTVE0zMkc0ODR4eCAgKi8KKyNlbmRpZiAvKiBTVE0zMkc0NzN4eCB8fCBTVE0zMkc0ODN4eCB8fCBTVE0zMkc0NzR4eCB8fCBTVE0zMkc0ODR4eCAgKi8KIAogI2RlZmluZSBJU19MUFRJTV9FWFRfVFJHX1BPTEFSSVRZKF9fUE9MQVJJVFlfXykgKCgoX19QT0xBUklUWV9fKSA9PSBMUFRJTV9BQ1RJVkVFREdFX1JJU0lORyAgICAgICAgICkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19QT0xBUklUWV9fKSA9PSBMUFRJTV9BQ1RJVkVFREdFX0ZBTExJTkcgICAgICAgICkgfHwgXApAQCAtODA3LDcgKzg0OSw3IEBACiAvKiogQGRlZmdyb3VwIExQVElNX1ByaXZhdGVfRnVuY3Rpb25zIExQVElNIFByaXZhdGUgRnVuY3Rpb25zCiAgICogQHsKICAgKi8KLXZvaWQgTFBUSU1fRGlzYWJsZShMUFRJTV9IYW5kbGVUeXBlRGVmICpscHRpbSk7Cit2b2lkIExQVElNX0Rpc2FibGUoTFBUSU1fSGFuZGxlVHlwZURlZiAqaGxwdGltKTsKIC8qKgogICAqIEB9CiAgICovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJnNHh4X2hhbF9vcGFtcC5oIGIvSW5jL3N0bTMyZzR4eF9oYWxfb3BhbXAuaAppbmRleCA4ZjE4NWMwLi4zZjUyZmRmIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJnNHh4X2hhbF9vcGFtcC5oCisrKyBiL0luYy9zdG0zMmc0eHhfaGFsX29wYW1wLmgKQEAgLTE3Miw4ICsxNzIsOCBAQAogICAqLwogdHlwZWRlZiBlbnVtCiB7Ci0gIEhBTF9PUEFNUF9NU1BfSU5JVF9DQl9JRCAgICAgICAgICAgICAgICAgICAgID0gMHgwMVVMLCAgLyohPCBPUEFNUCBNc3BJbml0IENhbGxiYWNrIElEICAgICAgICAgICAqLwotICBIQUxfT1BBTVBfTVNQX0RFSU5JVF9DQl9JRCAgICAgICAgICAgICAgICAgICA9IDB4MDJVTCwgIC8qITwgT1BBTVAgTXNwRGVJbml0IENhbGxiYWNrIElEICAgICAgICAgKi8KKyAgSEFMX09QQU1QX01TUElOSVRfQ0JfSUQgICAgICAgICAgICAgICAgICAgICA9IDB4MDFVTCwgIC8qITwgT1BBTVAgTXNwSW5pdCBDYWxsYmFjayBJRCAgICAgICAgICAgKi8KKyAgSEFMX09QQU1QX01TUERFSU5JVF9DQl9JRCAgICAgICAgICAgICAgICAgICA9IDB4MDJVTCwgIC8qITwgT1BBTVAgTXNwRGVJbml0IENhbGxiYWNrIElEICAgICAgICAgKi8KICAgSEFMX09QQU1QX0FMTF9DQl9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAzVUwgICAvKiE8IE9QQU1QIEFsbCBJRCAgICAgICAgICAgICAgICAgICAgICAgICovCiB9IEhBTF9PUEFNUF9DYWxsYmFja0lEVHlwZURlZjsKIApkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZzR4eF9oYWxfcGNkLmggYi9JbmMvc3RtMzJnNHh4X2hhbF9wY2QuaAppbmRleCBjZTYwYThhLi40Y2M2ZDBiIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJnNHh4X2hhbF9wY2QuaAorKysgYi9JbmMvc3RtMzJnNHh4X2hhbF9wY2QuaApAQCAtMTk2LDcgKzE5Niw3IEBACiAjZGVmaW5lIF9fSEFMX1BDRF9FTkFCTEUoX19IQU5ETEVfXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpVVNCX0VuYWJsZUdsb2JhbEludCAoKF9fSEFORExFX18pLT5JbnN0YW5jZSkKICNkZWZpbmUgX19IQUxfUENEX0RJU0FCTEUoX19IQU5ETEVfXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZClVU0JfRGlzYWJsZUdsb2JhbEludCAoKF9fSEFORExFX18pLT5JbnN0YW5jZSkKICNkZWZpbmUgX19IQUxfUENEX0dFVF9GTEFHKF9fSEFORExFX18sIF9fSU5URVJSVVBUX18pICAgICAgICAgICAgICAgICAoKFVTQl9SZWFkSW50ZXJydXB0cygoX19IQU5ETEVfXyktPkluc3RhbmNlKSAmIChfX0lOVEVSUlVQVF9fKSkgPT0gKF9fSU5URVJSVVBUX18pKQotI2RlZmluZSBfX0hBTF9QQ0RfQ0xFQVJfRkxBRyhfX0hBTkRMRV9fLCBfX0lOVEVSUlVQVF9fKSAgICAgICAgICAgICAgICgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+SVNUUikgJj0gfihfX0lOVEVSUlVQVF9fKSkKKyNkZWZpbmUgX19IQUxfUENEX0NMRUFSX0ZMQUcoX19IQU5ETEVfXywgX19JTlRFUlJVUFRfXykgICAgICAgICAgICAgICAoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPklTVFIpICY9ICh1aW50MTZfdCkofihfX0lOVEVSUlVQVF9fKSkpCiAKICNkZWZpbmUgX19IQUxfVVNCX1dBS0VVUF9FWFRJX0VOQUJMRV9JVCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFRJLT5JTVIxIHw9IFVTQl9XQUtFVVBfRVhUSV9MSU5FCiAjZGVmaW5lIF9fSEFMX1VTQl9XQUtFVVBfRVhUSV9ESVNBQkxFX0lUKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhUSS0+SU1SMSAmPSB+KFVTQl9XQUtFVVBfRVhUSV9MSU5FKQpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZzR4eF9oYWxfcmNjX2V4LmggYi9JbmMvc3RtMzJnNHh4X2hhbF9yY2NfZXguaAppbmRleCA4OTlkYmY3Li4wZjVlYjc1IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJnNHh4X2hhbF9yY2NfZXguaAorKysgYi9JbmMvc3RtMzJnNHh4X2hhbF9yY2NfZXguaApAQCAtMTM1NSw2ICsxMzU1LDcgQEAKICAgICAgICAgICAgICAgICAoKChfX1NFTEVDVElPTl9fKSAmIFJDQ19QRVJJUEhDTEtfTFBUSU0xKSAgICAgID09IFJDQ19QRVJJUEhDTEtfTFBUSU0xKSAgfHwgXAogICAgICAgICAgICAgICAgICgoKF9fU0VMRUNUSU9OX18pICYgUkNDX1BFUklQSENMS19TQUkxKSAgICAgICAgPT0gUkNDX1BFUklQSENMS19TQUkxKSAgICB8fCBcCiAgICAgICAgICAgICAgICAgKCgoX19TRUxFQ1RJT05fXykgJiBSQ0NfUEVSSVBIQ0xLX0kyUykgICAgICAgICA9PSBSQ0NfUEVSSVBIQ0xLX0kyUykgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAoKChfX1NFTEVDVElPTl9fKSAmIFJDQ19QRVJJUEhDTEtfRkRDQU4pICAgICAgID09IFJDQ19QRVJJUEhDTEtfRkRDQU4pICAgfHwgXAogICAgICAgICAgICAgICAgICgoKF9fU0VMRUNUSU9OX18pICYgUkNDX1BFUklQSENMS19VU0IpICAgICAgICAgPT0gUkNDX1BFUklQSENMS19VU0IpICAgICB8fCBcCiAgICAgICAgICAgICAgICAgKCgoX19TRUxFQ1RJT05fXykgJiBSQ0NfUEVSSVBIQ0xLX1JORykgICAgICAgICA9PSBSQ0NfUEVSSVBIQ0xLX1JORykgICAgIHx8IFwKICAgICAgICAgICAgICAgICAoKChfX1NFTEVDVElPTl9fKSAmIFJDQ19QRVJJUEhDTEtfQURDMTIpICAgICAgID09IFJDQ19QRVJJUEhDTEtfQURDMTIpICAgfHwgXApkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZzR4eF9oYWxfc21idXMuaCBiL0luYy9zdG0zMmc0eHhfaGFsX3NtYnVzLmgKaW5kZXggYzNhYmRiNi4uZjlhOWYzMSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZzR4eF9oYWxfc21idXMuaAorKysgYi9JbmMvc3RtMzJnNHh4X2hhbF9zbWJ1cy5oCkBAIC0xMzIsNyArMTMyLDExIEBACiAgICogQGJyaWVmICBTTUJVUyBoYW5kbGUgU3RydWN0dXJlIGRlZmluaXRpb24KICAgKiBAewogICAqLworI2lmIChVU0VfSEFMX1NNQlVTX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQogdHlwZWRlZiBzdHJ1Y3QgX19TTUJVU19IYW5kbGVUeXBlRGVmCisjZWxzZQordHlwZWRlZiBzdHJ1Y3QKKyNlbmRpZiAgLyogVVNFX0hBTF9TTUJVU19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KIHsKICAgSTJDX1R5cGVEZWYgICAgICAgICAgICAgICAgICAqSW5zdGFuY2U7ICAgICAgIC8qITwgU01CVVMgcmVnaXN0ZXJzIGJhc2UgYWRkcmVzcyAgICAgICAqLwogCkBAIC0zMjYsNiArMzMwLDcgQEAKICNkZWZpbmUgIFNNQlVTX05FWFRfRlJBTUUgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpKFNNQlVTX1JFTE9BRF9NT0RFIHwgU01CVVNfU09GVEVORF9NT0RFKSkKICNkZWZpbmUgIFNNQlVTX0ZJUlNUX0FORF9MQVNUX0ZSQU1FX05PX1BFQyAgICAgIFNNQlVTX0FVVE9FTkRfTU9ERQogI2RlZmluZSAgU01CVVNfTEFTVF9GUkFNRV9OT19QRUMgICAgICAgICAgICAgICAgU01CVVNfQVVUT0VORF9NT0RFCisjZGVmaW5lICBTTUJVU19GSVJTVF9GUkFNRV9XSVRIX1BFQyAgICAgICAgICAgICAoKHVpbnQzMl90KShTTUJVU19TT0ZURU5EX01PREUgfCBTTUJVU19TRU5EUEVDX01PREUpKQogI2RlZmluZSAgU01CVVNfRklSU1RfQU5EX0xBU1RfRlJBTUVfV0lUSF9QRUMgICAgKCh1aW50MzJfdCkoU01CVVNfQVVUT0VORF9NT0RFIHwgU01CVVNfU0VORFBFQ19NT0RFKSkKICNkZWZpbmUgIFNNQlVTX0xBU1RfRlJBTUVfV0lUSF9QRUMgICAgICAgICAgICAgICgodWludDMyX3QpKFNNQlVTX0FVVE9FTkRfTU9ERSB8IFNNQlVTX1NFTkRQRUNfTU9ERSkpCiAKQEAgLTU4MiwxMSArNTg3LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChSRVFVRVNUKSA9PSBTTUJVU19OT19TVEFSVFNUT1ApKQogCiAKLSNkZWZpbmUgSVNfU01CVVNfVFJBTlNGRVJfT1BUSU9OU19SRVFVRVNUKFJFUVVFU1QpICAgICAgKElTX1NNQlVTX1RSQU5TRkVSX09USEVSX09QVElPTlNfUkVRVUVTVChSRVFVRVNUKSAgICAgICB8fCBcCisjZGVmaW5lIElTX1NNQlVTX1RSQU5TRkVSX09QVElPTlNfUkVRVUVTVChSRVFVRVNUKSAgICAgIChJU19TTUJVU19UUkFOU0ZFUl9PVEhFUl9PUFRJT05TX1JFUVVFU1QoUkVRVUVTVCkgICAgICAgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFJFUVVFU1QpID09IFNNQlVTX0ZJUlNUX0ZSQU1FKSAgICAgICAgICAgICAgICAgICAgICAgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUkVRVUVTVCkgPT0gU01CVVNfTkVYVF9GUkFNRSkgICAgICAgICAgICAgICAgICAgICAgICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChSRVFVRVNUKSA9PSBTTUJVU19GSVJTVF9BTkRfTEFTVF9GUkFNRV9OT19QRUMpICAgICAgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFJFUVVFU1QpID09IFNNQlVTX0xBU1RfRlJBTUVfTk9fUEVDKSAgICAgICAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUkVRVUVTVCkgPT0gU01CVVNfRklSU1RfRlJBTUVfV0lUSF9QRUMpICAgICAgICAgICAgICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChSRVFVRVNUKSA9PSBTTUJVU19GSVJTVF9BTkRfTEFTVF9GUkFNRV9XSVRIX1BFQykgICAgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFJFUVVFU1QpID09IFNNQlVTX0xBU1RfRlJBTUVfV0lUSF9QRUMpKQogCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJnNHh4X2hhbF90aW0uaCBiL0luYy9zdG0zMmc0eHhfaGFsX3RpbS5oCmluZGV4IGZjZjA5NTAuLmFiZTc1OTYgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmc0eHhfaGFsX3RpbS5oCisrKyBiL0luYy9zdG0zMmc0eHhfaGFsX3RpbS5oCkBAIC0xNzQsNyArMTc0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFRJTV9FbmNvZGVyX01vZGUgKi8KIAogICB1aW50MzJfdCBJQzFQb2xhcml0eTsgICAvKiE8IFNwZWNpZmllcyB0aGUgYWN0aXZlIGVkZ2Ugb2YgdGhlIGlucHV0IHNpZ25hbC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFRJTV9JbnB1dF9DYXB0dXJlX1BvbGFyaXR5ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBUSU1fRW5jb2Rlcl9JbnB1dF9Qb2xhcml0eSAqLwogCiAgIHVpbnQzMl90IElDMVNlbGVjdGlvbjsgIC8qITwgU3BlY2lmaWVzIHRoZSBpbnB1dC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFRJTV9JbnB1dF9DYXB0dXJlX1NlbGVjdGlvbiAqLwpAQCAtMTg2LDcgKzE4Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAweDAgYW5kIE1heF9EYXRhID0gMHhGICovCiAKICAgdWludDMyX3QgSUMyUG9sYXJpdHk7ICAgLyohPCBTcGVjaWZpZXMgdGhlIGFjdGl2ZSBlZGdlIG9mIHRoZSBpbnB1dCBzaWduYWwuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBUSU1fSW5wdXRfQ2FwdHVyZV9Qb2xhcml0eSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgVElNX0VuY29kZXJfSW5wdXRfUG9sYXJpdHkgKi8KIAogICB1aW50MzJfdCBJQzJTZWxlY3Rpb247ICAvKiE8IFNwZWNpZmllcyB0aGUgaW5wdXQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFRJTV9JbnB1dF9DYXB0dXJlX1NlbGVjdGlvbiAqLwpAQCAtMzE2LDYgKzMxNiwyNiBAQAogfSBIQUxfVElNX1N0YXRlVHlwZURlZjsKIAogLyoqCisgICogQGJyaWVmICBUSU0gQ2hhbm5lbCBTdGF0ZXMgZGVmaW5pdGlvbgorICAqLwordHlwZWRlZiBlbnVtCit7CisgIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVCAgICAgICAgICAgICA9IDB4MDBVLCAgICAvKiE8IFRJTSBDaGFubmVsIGluaXRpYWwgc3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZICAgICAgICAgICAgID0gMHgwMVUsICAgIC8qITwgVElNIENoYW5uZWwgcmVhZHkgZm9yIHVzZSAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSAgICAgICAgICAgICAgPSAweDAyVSwgICAgLyohPCBBbiBpbnRlcm5hbCBwcm9jZXNzIGlzIG9uZ29pbmcgb24gdGhlIFRJTSBjaGFubmVsICovCit9IEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZjsKKworLyoqCisgICogQGJyaWVmICBETUEgQnVyc3QgU3RhdGVzIGRlZmluaXRpb24KKyAgKi8KK3R5cGVkZWYgZW51bQoreworICBIQUxfRE1BX0JVUlNUX1NUQVRFX1JFU0VUICAgICAgICAgICAgID0gMHgwMFUsICAgIC8qITwgRE1BIEJ1cnN0IGluaXRpYWwgc3RhdGUgKi8KKyAgSEFMX0RNQV9CVVJTVF9TVEFURV9SRUFEWSAgICAgICAgICAgICA9IDB4MDFVLCAgICAvKiE8IERNQSBCdXJzdCByZWFkeSBmb3IgdXNlICovCisgIEhBTF9ETUFfQlVSU1RfU1RBVEVfQlVTWSAgICAgICAgICAgICAgPSAweDAyVSwgICAgLyohPCBPbmdvaW5nIERNQSBCdXJzdCAgICAgICAqLworfSBIQUxfVElNX0RNQUJ1cnN0U3RhdGVUeXBlRGVmOworCisvKioKICAgKiBAYnJpZWYgIEhBTCBBY3RpdmUgY2hhbm5lbCBzdHJ1Y3R1cmVzIGRlZmluaXRpb24KICAgKi8KIHR5cGVkZWYgZW51bQpAQCAtMzM4LDEzICszNTgsMTYgQEAKIHR5cGVkZWYgc3RydWN0CiAjZW5kaWYgLyogVVNFX0hBTF9USU1fUkVHSVNURVJfQ0FMTEJBQ0tTICovCiB7Ci0gIFRJTV9UeXBlRGVmICAgICAgICAgICAgICAgICAqSW5zdGFuY2U7ICAgICAvKiE8IFJlZ2lzdGVyIGJhc2UgYWRkcmVzcyAgICAgICAgICAgICAqLwotICBUSU1fQmFzZV9Jbml0VHlwZURlZiAgICAgICAgSW5pdDsgICAgICAgICAgLyohPCBUSU0gVGltZSBCYXNlIHJlcXVpcmVkIHBhcmFtZXRlcnMgKi8KLSAgSEFMX1RJTV9BY3RpdmVDaGFubmVsICAgICAgIENoYW5uZWw7ICAgICAgIC8qITwgQWN0aXZlIGNoYW5uZWwgICAgICAgICAgICAgICAgICAgICovCi0gIERNQV9IYW5kbGVUeXBlRGVmICAgICAgICAgICAqaGRtYVs3XTsgICAgICAvKiE8IERNQSBIYW5kbGVycyBhcnJheQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGFycmF5IGlzIGFjY2Vzc2VkIGJ5IGEgQHJlZiBETUFfSGFuZGxlX2luZGV4ICovCi0gIEhBTF9Mb2NrVHlwZURlZiAgICAgICAgICAgICBMb2NrOyAgICAgICAgICAvKiE8IExvY2tpbmcgb2JqZWN0ICAgICAgICAgICAgICAgICAgICAqLwotICBfX0lPIEhBTF9USU1fU3RhdGVUeXBlRGVmICAgU3RhdGU7ICAgICAgICAgLyohPCBUSU0gb3BlcmF0aW9uIHN0YXRlICAgICAgICAgICAgICAgKi8KKyAgVElNX1R5cGVEZWYgICAgICAgICAgICAgICAgICAgICAgICAqSW5zdGFuY2U7ICAgICAgICAgLyohPCBSZWdpc3RlciBiYXNlIGFkZHJlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIFRJTV9CYXNlX0luaXRUeXBlRGVmICAgICAgICAgICAgICAgSW5pdDsgICAgICAgICAgICAgIC8qITwgVElNIFRpbWUgQmFzZSByZXF1aXJlZCBwYXJhbWV0ZXJzICAgICAgICAgICAgICAgICAqLworICBIQUxfVElNX0FjdGl2ZUNoYW5uZWwgICAgICAgICAgICAgIENoYW5uZWw7ICAgICAgICAgICAvKiE8IEFjdGl2ZSBjaGFubmVsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRE1BX0hhbmRsZVR5cGVEZWYgICAgICAgICAgICAgICAgICAqaGRtYVs3XTsgICAgICAgICAgLyohPCBETUEgSGFuZGxlcnMgYXJyYXkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGFycmF5IGlzIGFjY2Vzc2VkIGJ5IGEgQHJlZiBETUFfSGFuZGxlX2luZGV4ICovCisgIEhBTF9Mb2NrVHlwZURlZiAgICAgICAgICAgICAgICAgICAgTG9jazsgICAgICAgICAgICAgIC8qITwgTG9ja2luZyBvYmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIEhBTF9USU1fU3RhdGVUeXBlRGVmICAgICAgICAgIFN0YXRlOyAgICAgICAgICAgICAvKiE8IFRJTSBvcGVyYXRpb24gc3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgICBDaGFubmVsU3RhdGVbNl07ICAgLyohPCBUSU0gY2hhbm5lbCBvcGVyYXRpb24gc3RhdGUgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmICAgQ2hhbm5lbE5TdGF0ZVs0XTsgIC8qITwgVElNIGNvbXBsZW1lbnRhcnkgY2hhbm5lbCBvcGVyYXRpb24gc3RhdGUgICAgICAgICAqLworICBfX0lPIEhBTF9USU1fRE1BQnVyc3RTdGF0ZVR5cGVEZWYgIERNQUJ1cnN0U3RhdGU7ICAgICAvKiE8IERNQSBidXJzdCBvcGVyYXRpb24gc3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAogI2lmIChVU0VfSEFMX1RJTV9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKICAgdm9pZCAoKiBCYXNlX01zcEluaXRDYWxsYmFjaykoc3RydWN0IF9fVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0pOyAgICAgICAgICAgICAgLyohPCBUSU0gQmFzZSBNc3AgSW5pdCBDYWxsYmFjayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC01NTQsNiArNTc3LDE1IEBACiAgICogQH0KICAgKi8KIAorLyoqIEBkZWZncm91cCBUSU1fVXBkYXRlX0ludGVycnVwdF9GbGFnX1JlbWFwIFRJTSBVcGRhdGUgSW50ZXJydXB0IEZsYWcgUmVtYXAKKyAgKiBAeworICAqLworI2RlZmluZSBUSU1fVUlGUkVNQVBfRElTQUJMRSAgICAgICAgICAgICAgIDB4MDAwMDAwMDBVICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVwZGF0ZSBpbnRlcnJ1cHQgZmxhZyByZW1hcCBkaXNhYmxlZCAqLworI2RlZmluZSBUSU1fVUlGUkVNQVBfRU5BQkxFICAgICAgICAgICAgICAgIFRJTV9DUjFfVUlGUkVNQVAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVwZGF0ZSBpbnRlcnJ1cHQgZmxhZyByZW1hcCBlbmFibGVkICovCisvKioKKyAgKiBAfQorICAqLworCiAvKiogQGRlZmdyb3VwIFRJTV9DbG9ja0RpdmlzaW9uIFRJTSBDbG9jayBEaXZpc2lvbgogICAqIEB7CiAgICovCkBAIC02NDcsNiArNjc5LDE1IEBACiAgICogQH0KICAgKi8KIAorLyoqIEBkZWZncm91cCBUSU1fRW5jb2Rlcl9JbnB1dF9Qb2xhcml0eSBUSU0gRW5jb2RlciBJbnB1dCBQb2xhcml0eQorICAqIEB7CisgICovCisjZGVmaW5lICBUSU1fRU5DT0RFUklOUFVUUE9MQVJJVFlfUklTSU5HICAgVElNX0lOUFVUQ0hBTk5FTFBPTEFSSVRZX1JJU0lORyAgICAgIC8qITwgRW5jb2RlciBpbnB1dCB3aXRoIHJpc2luZyBlZGdlIHBvbGFyaXR5ICAqLworI2RlZmluZSAgVElNX0VOQ09ERVJJTlBVVFBPTEFSSVRZX0ZBTExJTkcgIFRJTV9JTlBVVENIQU5ORUxQT0xBUklUWV9GQUxMSU5HICAgICAvKiE8IEVuY29kZXIgaW5wdXQgd2l0aCBmYWxsaW5nIGVkZ2UgcG9sYXJpdHkgKi8KKy8qKgorICAqIEB9CisgICovCisKIC8qKiBAZGVmZ3JvdXAgVElNX0lucHV0X0NhcHR1cmVfU2VsZWN0aW9uIFRJTSBJbnB1dCBDYXB0dXJlIFNlbGVjdGlvbgogICAqIEB7CiAgICovCkBAIC0xMTgyLDI1ICsxMjIzLDQ5IEBACiAgICogQHJldHZhbCBOb25lCiAgICovCiAjaWYgKFVTRV9IQUxfVElNX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQotI2RlZmluZSBfX0hBTF9USU1fUkVTRVRfSEFORExFX1NUQVRFKF9fSEFORExFX18pIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+U3RhdGUgICAgICAgICAgICAgPSBIQUxfVElNX1NUQVRFX1JFU0VUOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPkJhc2VfTXNwSW5pdENhbGxiYWNrICAgICAgICAgPSBOVUxMOyAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5CYXNlX01zcERlSW5pdENhbGxiYWNrICAgICAgID0gTlVMTDsgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+SUNfTXNwSW5pdENhbGxiYWNrICAgICAgICAgICA9IE5VTEw7ICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPklDX01zcERlSW5pdENhbGxiYWNrICAgICAgICAgPSBOVUxMOyAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5PQ19Nc3BJbml0Q2FsbGJhY2sgICAgICAgICAgID0gTlVMTDsgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+T0NfTXNwRGVJbml0Q2FsbGJhY2sgICAgICAgICA9IE5VTEw7ICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPlBXTV9Nc3BJbml0Q2FsbGJhY2sgICAgICAgICAgPSBOVUxMOyAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5QV01fTXNwRGVJbml0Q2FsbGJhY2sgICAgICAgID0gTlVMTDsgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+T25lUHVsc2VfTXNwSW5pdENhbGxiYWNrICAgICA9IE5VTEw7ICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPk9uZVB1bHNlX01zcERlSW5pdENhbGxiYWNrICAgPSBOVUxMOyAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5FbmNvZGVyX01zcEluaXRDYWxsYmFjayAgICAgID0gTlVMTDsgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+RW5jb2Rlcl9Nc3BEZUluaXRDYWxsYmFjayAgICA9IE5VTEw7ICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPkhhbGxTZW5zb3JfTXNwSW5pdENhbGxiYWNrICAgPSBOVUxMOyAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5IYWxsU2Vuc29yX01zcERlSW5pdENhbGxiYWNrID0gTlVMTDsgICAgIFwKKyNkZWZpbmUgX19IQUxfVElNX1JFU0VUX0hBTkRMRV9TVEFURShfX0hBTkRMRV9fKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5TdGF0ZSAgICAgICAgICAgID0gSEFMX1RJTV9TVEFURV9SRVNFVDsgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPkNoYW5uZWxTdGF0ZVswXSAgPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVTRVQ7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+Q2hhbm5lbFN0YXRlWzFdICA9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVDsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5DaGFubmVsU3RhdGVbMl0gID0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFU0VUOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPkNoYW5uZWxTdGF0ZVszXSAgPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVTRVQ7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+Q2hhbm5lbFN0YXRlWzRdICA9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVDsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5DaGFubmVsU3RhdGVbNV0gID0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFU0VUOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPkNoYW5uZWxOU3RhdGVbMF0gPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVTRVQ7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+Q2hhbm5lbE5TdGF0ZVsxXSA9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVDsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5DaGFubmVsTlN0YXRlWzJdID0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFU0VUOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPkNoYW5uZWxOU3RhdGVbM10gPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVTRVQ7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+RE1BQnVyc3RTdGF0ZSAgICA9IEhBTF9ETUFfQlVSU1RfU1RBVEVfUkVTRVQ7ICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5CYXNlX01zcEluaXRDYWxsYmFjayAgICAgICAgID0gTlVMTDsgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPkJhc2VfTXNwRGVJbml0Q2FsbGJhY2sgICAgICAgPSBOVUxMOyAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+SUNfTXNwSW5pdENhbGxiYWNrICAgICAgICAgICA9IE5VTEw7ICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5JQ19Nc3BEZUluaXRDYWxsYmFjayAgICAgICAgID0gTlVMTDsgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPk9DX01zcEluaXRDYWxsYmFjayAgICAgICAgICAgPSBOVUxMOyAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+T0NfTXNwRGVJbml0Q2FsbGJhY2sgICAgICAgICA9IE5VTEw7ICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5QV01fTXNwSW5pdENhbGxiYWNrICAgICAgICAgID0gTlVMTDsgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPlBXTV9Nc3BEZUluaXRDYWxsYmFjayAgICAgICAgPSBOVUxMOyAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+T25lUHVsc2VfTXNwSW5pdENhbGxiYWNrICAgICA9IE5VTEw7ICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5PbmVQdWxzZV9Nc3BEZUluaXRDYWxsYmFjayAgID0gTlVMTDsgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPkVuY29kZXJfTXNwSW5pdENhbGxiYWNrICAgICAgPSBOVUxMOyAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+RW5jb2Rlcl9Nc3BEZUluaXRDYWxsYmFjayAgICA9IE5VTEw7ICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5IYWxsU2Vuc29yX01zcEluaXRDYWxsYmFjayAgID0gTlVMTDsgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPkhhbGxTZW5zb3JfTXNwRGVJbml0Q2FsbGJhY2sgPSBOVUxMOyAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQogI2Vsc2UKLSNkZWZpbmUgX19IQUxfVElNX1JFU0VUX0hBTkRMRV9TVEFURShfX0hBTkRMRV9fKSAoKF9fSEFORExFX18pLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVTRVQpCisjZGVmaW5lIF9fSEFMX1RJTV9SRVNFVF9IQU5ETEVfU1RBVEUoX19IQU5ETEVfXykgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+U3RhdGUgICAgICAgICAgICA9IEhBTF9USU1fU1RBVEVfUkVTRVQ7ICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5DaGFubmVsU3RhdGVbMF0gID0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFU0VUOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPkNoYW5uZWxTdGF0ZVsxXSAgPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVTRVQ7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+Q2hhbm5lbFN0YXRlWzJdICA9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVDsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5DaGFubmVsU3RhdGVbM10gID0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFU0VUOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPkNoYW5uZWxTdGF0ZVs0XSAgPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVTRVQ7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+Q2hhbm5lbFN0YXRlWzVdICA9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVDsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5DaGFubmVsTlN0YXRlWzBdID0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFU0VUOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPkNoYW5uZWxOU3RhdGVbMV0gPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVTRVQ7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+Q2hhbm5lbE5TdGF0ZVsyXSA9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVDsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5DaGFubmVsTlN0YXRlWzNdID0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFU0VUOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPkRNQUJ1cnN0U3RhdGUgICAgPSBIQUxfRE1BX0JVUlNUX1NUQVRFX1JFU0VUOyAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQogI2VuZGlmIC8qIFVTRV9IQUxfVElNX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogCiAvKioKQEAgLTE0MjcsNiArMTQ5MiwzMSBAQAogI2RlZmluZSBfX0hBTF9USU1fQ0xFQVJfSVQoX19IQU5ETEVfXywgX19JTlRFUlJVUFRfXykgICAgICAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+U1IgPSB+KF9fSU5URVJSVVBUX18pKQogCiAvKioKKyAgKiBAYnJpZWYgIEZvcmNlIGEgY29udGludW91cyBjb3B5IG9mIHRoZSB1cGRhdGUgaW50ZXJydXB0IGZsYWcgKFVJRikgaW50byB0aGUgdGltZXIgY291bnRlciByZWdpc3RlciAoYml0IDMxKS4KKyAgKiBAbm90ZSBUaGlzIGFsbG93cyBib3RoIHRoZSBjb3VudGVyIHZhbHVlIGFuZCBhIHBvdGVudGlhbCByb2xsLW92ZXIgY29uZGl0aW9uIHNpZ25hbGxlZCBieSB0aGUgVUlGQ1BZIGZsYWcgdG8gYmUgcmVhZCBpbiBhbiBhdG9taWMgd2F5LgorICAqIEBwYXJhbSAgX19IQU5ETEVfXyBUSU0gaGFuZGxlLgorICAqIEByZXR2YWwgTm9uZQorbW9kZS4KKyAgKi8KKyNkZWZpbmUgX19IQUxfVElNX1VJRlJFTUFQX0VOQUJMRShfX0hBTkRMRV9fKSAgICAoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNSMSB8PSBUSU1fQ1IxX1VJRlJFTUFQKSkKKworLyoqCisgICogQGJyaWVmICBEaXNhYmxlIHVwZGF0ZSBpbnRlcnJ1cHQgZmxhZyAoVUlGKSByZW1hcHBpbmcuCisgICogQHBhcmFtICBfX0hBTkRMRV9fIFRJTSBoYW5kbGUuCisgICogQHJldHZhbCBOb25lCittb2RlLgorICAqLworI2RlZmluZSBfX0hBTF9USU1fVUlGUkVNQVBfRElTQUJMRShfX0hBTkRMRV9fKSAgICAoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNSMSAmPSB+VElNX0NSMV9VSUZSRU1BUCkpCisKKy8qKgorICAqIEBicmllZiAgR2V0IHVwZGF0ZSBpbnRlcnJ1cHQgZmxhZyAoVUlGKSBjb3B5IHN0YXR1cy4KKyAgKiBAcGFyYW0gIF9fQ09VTlRFUl9fIENvdW50ZXIgdmFsdWUuCisgICogQHJldHZhbCBUaGUgc3RhdGUgb2YgVUlGQ1BZIChUUlVFIG9yIEZBTFNFKS4KK21vZGUuCisgICovCisjZGVmaW5lIF9fSEFMX1RJTV9HRVRfVUlGQ1BZKF9fQ09VTlRFUl9fKSAgICAoKChfX0NPVU5URVJfXykgJiAoVElNX0NOVF9VSUZDUFkpKSA9PSAoVElNX0NOVF9VSUZDUFkpKQorCisvKioKICAgKiBAYnJpZWYgIEluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgVElNIENvdW50ZXIgaXMgdXNlZCBhcyBkb3duY291bnRlci4KICAgKiBAcGFyYW0gIF9fSEFORExFX18gVElNIGhhbmRsZS4KICAgKiBAcmV0dmFsIEZhbHNlIChDb3VudGVyIHVzZWQgYXMgdXBjb3VudGVyKSBvciBUcnVlIChDb3VudGVyIHVzZWQgYXMgZG93bmNvdW50ZXIpCkBAIC0xNDQ1LDYgKzE1MzUsOCBAQAogCiAvKioKICAgKiBAYnJpZWYgIFNldCB0aGUgVElNIENvdW50ZXIgUmVnaXN0ZXIgdmFsdWUgb24gcnVudGltZS4KKyAgKiBOb3RlIFBsZWFzZSBjaGVjayBpZiB0aGUgYml0IDMxIG9mIENOVCByZWdpc3RlciBpcyB1c2VkIGFzIFVJRiBjb3B5IG9yIG5vdCwgdGhpcyBtYXkgYWZmZWN0IHRoZSBjb3VudGVyIHJhbmdlIGluIGNhc2Ugb2YgMzIgYml0cyBjb3VudGVyIFRJTSBpbnN0YW5jZS4KKyAgKiAgICAgIEJpdCAzMSBvZiBDTlQgY2FuIGJlIGVuYWJsZWQvZGlzYWJsZWQgdXNpbmcgX19IQUxfVElNX1VJRlJFTUFQX0VOQUJMRSgpL19fSEFMX1RJTV9VSUZSRU1BUF9ESVNBQkxFKCkgbWFjcm9zLgogICAqIEBwYXJhbSAgX19IQU5ETEVfXyBUSU0gaGFuZGxlLgogICAqIEBwYXJhbSAgX19DT1VOVEVSX18gc3BlY2lmaWVzIHRoZSBDb3VudGVyIHJlZ2lzdGVyIG5ldyB2YWx1ZS4KICAgKiBAcmV0dmFsIE5vbmUKQEAgLTE4MDQsNiArMTg5Niw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19NT0RFX18pID09IFRJTV9DT1VOVEVSTU9ERV9DRU5URVJBTElHTkVEMikgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX01PREVfXykgPT0gVElNX0NPVU5URVJNT0RFX0NFTlRFUkFMSUdORUQzKSkKIAorI2RlZmluZSBJU19USU1fVUlGUkVNQVBfTU9ERShfX01PREVfXykgICAgICgoKF9fTU9ERV9fKSA9PSBUSU1fVUlGUkVNQVBfRElTQUJMRSkgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fTU9ERV9fKSA9PSBUSU1fVUlGUkVNQVBfRU5BTEUpKQorCiAjZGVmaW5lIElTX1RJTV9DTE9DS0RJVklTSU9OX0RJVihfX0RJVl9fKSAgKCgoX19ESVZfXykgPT0gVElNX0NMT0NLRElWSVNJT05fRElWMSkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fRElWX18pID09IFRJTV9DTE9DS0RJVklTSU9OX0RJVjIpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0RJVl9fKSA9PSBUSU1fQ0xPQ0tESVZJU0lPTl9ESVY0KSkKQEAgLTE4MjYsNiArMTkyMSw5IEBACiAjZGVmaW5lIElTX1RJTV9PQ05JRExFX1NUQVRFKF9fU1RBVEVfXykgICAgKCgoX19TVEFURV9fKSA9PSBUSU1fT0NOSURMRVNUQVRFX1NFVCkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU1RBVEVfXykgPT0gVElNX09DTklETEVTVEFURV9SRVNFVCkpCiAKKyNkZWZpbmUgSVNfVElNX0VOQ09ERVJJTlBVVF9QT0xBUklUWShfX1BPTEFSSVRZX18pICAgKCgoX19QT0xBUklUWV9fKSA9PSBUSU1fRU5DT0RFUklOUFVUUE9MQVJJVFlfUklTSU5HKSAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19QT0xBUklUWV9fKSA9PSBUSU1fRU5DT0RFUklOUFVUUE9MQVJJVFlfRkFMTElORykpCisKICNkZWZpbmUgSVNfVElNX0lDX1BPTEFSSVRZKF9fUE9MQVJJVFlfXykgICAoKChfX1BPTEFSSVRZX18pID09IFRJTV9JQ1BPTEFSSVRZX1JJU0lORykgICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19QT0xBUklUWV9fKSA9PSBUSU1fSUNQT0xBUklUWV9GQUxMSU5HKSAgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUE9MQVJJVFlfXykgPT0gVElNX0lDUE9MQVJJVFlfQk9USEVER0UpKQpAQCAtMjA0NiwyMiArMjE0NCw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19NT0RFX18pID09IFRJTV9PQ01PREVfUFVMU0VfT05fQ09NUEFSRSkpCiAKICNpZiBkZWZpbmVkIChUSU01KSAmJiBkZWZpbmVkKFRJTTIwKQotI2RlZmluZSBJU19USU1fVFJJR0dFUl9TRUxFQ1RJT04oX19TRUxFQ1RJT05fXykgKCgoX19TRUxFQ1RJT05fXykgPT0gVElNX1RTX0lUUjApICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NFTEVDVElPTl9fKSA9PSBUSU1fVFNfSVRSMSkgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU0VMRUNUSU9OX18pID09IFRJTV9UU19JVFIyKSAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TRUxFQ1RJT05fXykgPT0gVElNX1RTX0lUUjMpICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NFTEVDVElPTl9fKSA9PSBUSU1fVFNfVEkxRl9FRCkgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU0VMRUNUSU9OX18pID09IFRJTV9UU19USTFGUDEpICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TRUxFQ1RJT05fXykgPT0gVElNX1RTX1RJMkZQMikgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NFTEVDVElPTl9fKSA9PSBUSU1fVFNfSVRSNCkgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU0VMRUNUSU9OX18pID09IFRJTV9UU19JVFI1KSAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TRUxFQ1RJT05fXykgPT0gVElNX1RTX0lUUjYpICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NFTEVDVElPTl9fKSA9PSBUSU1fVFNfSVRSNykgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU0VMRUNUSU9OX18pID09IFRJTV9UU19JVFI4KSAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TRUxFQ1RJT05fXykgPT0gVElNX1RTX0lUUjkpICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NFTEVDVElPTl9fKSA9PSBUSU1fVFNfSVRSMTApICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU0VMRUNUSU9OX18pID09IFRJTV9UU19JVFIxMSkgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TRUxFQ1RJT05fXykgPT0gVElNX1RTX0VUUkYpKQogCiAjZGVmaW5lIElTX1RJTV9JTlRFUk5BTF9UUklHR0VSRVZFTlRfU0VMRUNUSU9OKF9fU0VMRUNUSU9OX18pICgoKF9fU0VMRUNUSU9OX18pID09IFRJTV9UU19JVFIwKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU0VMRUNUSU9OX18pID09IFRJTV9UU19JVFIxKSB8fCBcCkBAIC0yMDc3LDIyICsyMTU5LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TRUxFQ1RJT05fXykgPT0gVElNX1RTX0lUUjExKXx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TRUxFQ1RJT05fXykgPT0gVElNX1RTX05PTkUpKQogI2VsaWYgZGVmaW5lZCAoVElNNSkKLSNkZWZpbmUgSVNfVElNX1RSSUdHRVJfU0VMRUNUSU9OKF9fU0VMRUNUSU9OX18pICgoKF9fU0VMRUNUSU9OX18pID09IFRJTV9UU19JVFIwKSAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TRUxFQ1RJT05fXykgPT0gVElNX1RTX0lUUjEpICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NFTEVDVElPTl9fKSA9PSBUSU1fVFNfSVRSMikgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU0VMRUNUSU9OX18pID09IFRJTV9UU19JVFIzKSAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TRUxFQ1RJT05fXykgPT0gVElNX1RTX1RJMUZfRUQpICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NFTEVDVElPTl9fKSA9PSBUSU1fVFNfVEkxRlAxKSAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU0VMRUNUSU9OX18pID09IFRJTV9UU19USTJGUDIpICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TRUxFQ1RJT05fXykgPT0gVElNX1RTX0lUUjQpICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NFTEVDVElPTl9fKSA9PSBUSU1fVFNfSVRSNSkgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU0VMRUNUSU9OX18pID09IFRJTV9UU19JVFI2KSAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TRUxFQ1RJT05fXykgPT0gVElNX1RTX0lUUjcpICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NFTEVDVElPTl9fKSA9PSBUSU1fVFNfSVRSOCkgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU0VMRUNUSU9OX18pID09IFRJTV9UU19JVFIxMCkgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TRUxFQ1RJT05fXykgPT0gVElNX1RTX0lUUjExKSAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NFTEVDVElPTl9fKSA9PSBUSU1fVFNfRVRSRikpCi0KICNkZWZpbmUgSVNfVElNX0lOVEVSTkFMX1RSSUdHRVJFVkVOVF9TRUxFQ1RJT04oX19TRUxFQ1RJT05fXykgKCgoX19TRUxFQ1RJT05fXykgPT0gVElNX1RTX0lUUjApIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TRUxFQ1RJT05fXykgPT0gVElNX1RTX0lUUjEpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TRUxFQ1RJT05fXykgPT0gVElNX1RTX0lUUjIpIHx8IFwKQEAgLTIxMDYsMjEgKzIxNzIsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NFTEVDVElPTl9fKSA9PSBUSU1fVFNfSVRSMTEpfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NFTEVDVElPTl9fKSA9PSBUSU1fVFNfTk9ORSkpCiAjZWxzZQotI2RlZmluZSBJU19USU1fVFJJR0dFUl9TRUxFQ1RJT04oX19TRUxFQ1RJT05fXykgKCgoX19TRUxFQ1RJT05fXykgPT0gVElNX1RTX0lUUjApICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU0VMRUNUSU9OX18pID09IFRJTV9UU19JVFIxKSAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NFTEVDVElPTl9fKSA9PSBUSU1fVFNfSVRSMikgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TRUxFQ1RJT05fXykgPT0gVElNX1RTX0lUUjMpICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU0VMRUNUSU9OX18pID09IFRJTV9UU19USTFGX0VEKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NFTEVDVElPTl9fKSA9PSBUSU1fVFNfVEkxRlAxKSAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TRUxFQ1RJT05fXykgPT0gVElNX1RTX1RJMkZQMikgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU0VMRUNUSU9OX18pID09IFRJTV9UU19JVFI1KSAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NFTEVDVElPTl9fKSA9PSBUSU1fVFNfSVRSNikgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TRUxFQ1RJT05fXykgPT0gVElNX1RTX0lUUjcpICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU0VMRUNUSU9OX18pID09IFRJTV9UU19JVFI4KSAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NFTEVDVElPTl9fKSA9PSBUSU1fVFNfSVRSMTApICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TRUxFQ1RJT05fXykgPT0gVElNX1RTX0lUUjExKSAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU0VMRUNUSU9OX18pID09IFRJTV9UU19FVFJGKSkKLQogI2RlZmluZSBJU19USU1fSU5URVJOQUxfVFJJR0dFUkVWRU5UX1NFTEVDVElPTihfX1NFTEVDVElPTl9fKSAoKChfX1NFTEVDVElPTl9fKSA9PSBUSU1fVFNfSVRSMCkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NFTEVDVElPTl9fKSA9PSBUSU1fVFNfSVRSMSkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NFTEVDVElPTl9fKSA9PSBUSU1fVFNfSVRSMikgfHwgXApAQCAtMjE1MCwxNSArMjIwMSwxNSBAQAogI2RlZmluZSBJU19USU1fVEkxU0VMRUNUSU9OKF9fVEkxU0VMRUNUSU9OX18pICAoKChfX1RJMVNFTEVDVElPTl9fKSA9PSBUSU1fVEkxU0VMRUNUSU9OX0NIMSkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1RJMVNFTEVDVElPTl9fKSA9PSBUSU1fVEkxU0VMRUNUSU9OX1hPUkNPTUJJTkFUSU9OKSkKIAotI2RlZmluZSBJU19USU1fRE1BX0xFTkdUSChfX0xFTkdUSF9fKSAgICAgICgoKF9fTEVOR1RIX18pID09IFRJTV9ETUFCVVJTVExFTkdUSF8xVFJBTlNGRVIpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0xFTkdUSF9fKSA9PSBUSU1fRE1BQlVSU1RMRU5HVEhfMlRSQU5TRkVSUykgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fTEVOR1RIX18pID09IFRJTV9ETUFCVVJTVExFTkdUSF8zVFJBTlNGRVJTKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19MRU5HVEhfXykgPT0gVElNX0RNQUJVUlNUTEVOR1RIXzRUUkFOU0ZFUlMpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0xFTkdUSF9fKSA9PSBUSU1fRE1BQlVSU1RMRU5HVEhfNVRSQU5TRkVSUykgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fTEVOR1RIX18pID09IFRJTV9ETUFCVVJTVExFTkdUSF82VFJBTlNGRVJTKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19MRU5HVEhfXykgPT0gVElNX0RNQUJVUlNUTEVOR1RIXzdUUkFOU0ZFUlMpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0xFTkdUSF9fKSA9PSBUSU1fRE1BQlVSU1RMRU5HVEhfOFRSQU5TRkVSUykgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fTEVOR1RIX18pID09IFRJTV9ETUFCVVJTVExFTkdUSF85VFJBTlNGRVJTKSB8fCBcCisjZGVmaW5lIElTX1RJTV9ETUFfTEVOR1RIKF9fTEVOR1RIX18pICAgICAgKCgoX19MRU5HVEhfXykgPT0gVElNX0RNQUJVUlNUTEVOR1RIXzFUUkFOU0ZFUikgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19MRU5HVEhfXykgPT0gVElNX0RNQUJVUlNUTEVOR1RIXzJUUkFOU0ZFUlMpICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19MRU5HVEhfXykgPT0gVElNX0RNQUJVUlNUTEVOR1RIXzNUUkFOU0ZFUlMpICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19MRU5HVEhfXykgPT0gVElNX0RNQUJVUlNUTEVOR1RIXzRUUkFOU0ZFUlMpICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19MRU5HVEhfXykgPT0gVElNX0RNQUJVUlNUTEVOR1RIXzVUUkFOU0ZFUlMpICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19MRU5HVEhfXykgPT0gVElNX0RNQUJVUlNUTEVOR1RIXzZUUkFOU0ZFUlMpICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19MRU5HVEhfXykgPT0gVElNX0RNQUJVUlNUTEVOR1RIXzdUUkFOU0ZFUlMpICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19MRU5HVEhfXykgPT0gVElNX0RNQUJVUlNUTEVOR1RIXzhUUkFOU0ZFUlMpICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19MRU5HVEhfXykgPT0gVElNX0RNQUJVUlNUTEVOR1RIXzlUUkFOU0ZFUlMpICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19MRU5HVEhfXykgPT0gVElNX0RNQUJVUlNUTEVOR1RIXzEwVFJBTlNGRVJTKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19MRU5HVEhfXykgPT0gVElNX0RNQUJVUlNUTEVOR1RIXzExVFJBTlNGRVJTKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19MRU5HVEhfXykgPT0gVElNX0RNQUJVUlNUTEVOR1RIXzEyVFJBTlNGRVJTKSB8fCBcCkBAIC0yMjE1LDYgKzIyNjYsNTAgQEAKICAgICgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzMpID8gKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNDRVIgJj0gfihUSU1fQ0NFUl9DQzNQIHwgVElNX0NDRVJfQ0MzTlApKSA6XAogICAgKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNDRVIgJj0gfihUSU1fQ0NFUl9DQzRQIHwgVElNX0NDRVJfQ0M0TlApKSkKIAorI2RlZmluZSBUSU1fQ0hBTk5FTF9TVEFURV9HRVQoX19IQU5ETEVfXywgX19DSEFOTkVMX18pXAorICAoKChfX0NIQU5ORUxfXykgPT0gVElNX0NIQU5ORUxfMSkgPyAoX19IQU5ETEVfXyktPkNoYW5uZWxTdGF0ZVswXSA6XAorICAgKChfX0NIQU5ORUxfXykgPT0gVElNX0NIQU5ORUxfMikgPyAoX19IQU5ETEVfXyktPkNoYW5uZWxTdGF0ZVsxXSA6XAorICAgKChfX0NIQU5ORUxfXykgPT0gVElNX0NIQU5ORUxfMykgPyAoX19IQU5ETEVfXyktPkNoYW5uZWxTdGF0ZVsyXSA6XAorICAgKChfX0NIQU5ORUxfXykgPT0gVElNX0NIQU5ORUxfNCkgPyAoX19IQU5ETEVfXyktPkNoYW5uZWxTdGF0ZVszXSA6XAorICAgKChfX0NIQU5ORUxfXykgPT0gVElNX0NIQU5ORUxfNSkgPyAoX19IQU5ETEVfXyktPkNoYW5uZWxTdGF0ZVs0XSA6XAorICAgKF9fSEFORExFX18pLT5DaGFubmVsU3RhdGVbNV0pCisgICAgCisjZGVmaW5lIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChfX0hBTkRMRV9fLCBfX0NIQU5ORUxfXywgX19DSEFOTkVMX1NUQVRFX18pIFwKKyAgKCgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzEpID8gKChfX0hBTkRMRV9fKS0+Q2hhbm5lbFN0YXRlWzBdID0gKF9fQ0hBTk5FTF9TVEFURV9fKSkgOlwKKyAgICgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzIpID8gKChfX0hBTkRMRV9fKS0+Q2hhbm5lbFN0YXRlWzFdID0gKF9fQ0hBTk5FTF9TVEFURV9fKSkgOlwKKyAgICgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzMpID8gKChfX0hBTkRMRV9fKS0+Q2hhbm5lbFN0YXRlWzJdID0gKF9fQ0hBTk5FTF9TVEFURV9fKSkgOlwKKyAgICgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzQpID8gKChfX0hBTkRMRV9fKS0+Q2hhbm5lbFN0YXRlWzNdID0gKF9fQ0hBTk5FTF9TVEFURV9fKSkgOlwKKyAgICgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzUpID8gKChfX0hBTkRMRV9fKS0+Q2hhbm5lbFN0YXRlWzRdID0gKF9fQ0hBTk5FTF9TVEFURV9fKSkgOlwKKyAgICgoX19IQU5ETEVfXyktPkNoYW5uZWxTdGF0ZVs1XSA9IChfX0NIQU5ORUxfU1RBVEVfXykpKQorCisjZGVmaW5lIFRJTV9DSEFOTkVMX1NUQVRFX1NFVF9BTEwoX19IQU5ETEVfXywgIF9fQ0hBTk5FTF9TVEFURV9fKSBkbyB7IFwKKyAgKF9fSEFORExFX18pLT5DaGFubmVsU3RhdGVbMF0gID0gKF9fQ0hBTk5FTF9TVEFURV9fKTsgIFwKKyAgKF9fSEFORExFX18pLT5DaGFubmVsU3RhdGVbMV0gID0gKF9fQ0hBTk5FTF9TVEFURV9fKTsgIFwKKyAgKF9fSEFORExFX18pLT5DaGFubmVsU3RhdGVbMl0gID0gKF9fQ0hBTk5FTF9TVEFURV9fKTsgIFwKKyAgKF9fSEFORExFX18pLT5DaGFubmVsU3RhdGVbM10gID0gKF9fQ0hBTk5FTF9TVEFURV9fKTsgIFwKKyAgKF9fSEFORExFX18pLT5DaGFubmVsU3RhdGVbNF0gID0gKF9fQ0hBTk5FTF9TVEFURV9fKTsgIFwKKyAgKF9fSEFORExFX18pLT5DaGFubmVsU3RhdGVbNV0gID0gKF9fQ0hBTk5FTF9TVEFURV9fKTsgIFwKKyB9IHdoaWxlKDApCisKKyNkZWZpbmUgVElNX0NIQU5ORUxfTl9TVEFURV9HRVQoX19IQU5ETEVfXywgX19DSEFOTkVMX18pXAorICAoKChfX0NIQU5ORUxfXykgPT0gVElNX0NIQU5ORUxfMSkgPyAoX19IQU5ETEVfXyktPkNoYW5uZWxOU3RhdGVbMF0gOlwKKyAgICgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzIpID8gKF9fSEFORExFX18pLT5DaGFubmVsTlN0YXRlWzFdIDpcCisgICAoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8zKSA/IChfX0hBTkRMRV9fKS0+Q2hhbm5lbE5TdGF0ZVsyXSA6XAorICAgKF9fSEFORExFX18pLT5DaGFubmVsTlN0YXRlWzNdKQorICAgIAorI2RlZmluZSBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChfX0hBTkRMRV9fLCBfX0NIQU5ORUxfXywgX19DSEFOTkVMX1NUQVRFX18pIFwKKyAgKCgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzEpID8gKChfX0hBTkRMRV9fKS0+Q2hhbm5lbE5TdGF0ZVswXSA9IChfX0NIQU5ORUxfU1RBVEVfXykpIDpcCisgICAoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8yKSA/ICgoX19IQU5ETEVfXyktPkNoYW5uZWxOU3RhdGVbMV0gPSAoX19DSEFOTkVMX1NUQVRFX18pKSA6XAorICAgKChfX0NIQU5ORUxfXykgPT0gVElNX0NIQU5ORUxfMykgPyAoKF9fSEFORExFX18pLT5DaGFubmVsTlN0YXRlWzJdID0gKF9fQ0hBTk5FTF9TVEFURV9fKSkgOlwKKyAgICgoX19IQU5ETEVfXyktPkNoYW5uZWxOU3RhdGVbM10gPSAoX19DSEFOTkVMX1NUQVRFX18pKSkKKworI2RlZmluZSBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVF9BTEwoX19IQU5ETEVfXywgIF9fQ0hBTk5FTF9TVEFURV9fKSBkbyB7IFwKKyAgKF9fSEFORExFX18pLT5DaGFubmVsTlN0YXRlWzBdID0gKF9fQ0hBTk5FTF9TVEFURV9fKTsgIFwKKyAgKF9fSEFORExFX18pLT5DaGFubmVsTlN0YXRlWzFdID0gKF9fQ0hBTk5FTF9TVEFURV9fKTsgIFwKKyAgKF9fSEFORExFX18pLT5DaGFubmVsTlN0YXRlWzJdID0gKF9fQ0hBTk5FTF9TVEFURV9fKTsgIFwKKyAgKF9fSEFORExFX18pLT5DaGFubmVsTlN0YXRlWzNdID0gKF9fQ0hBTk5FTF9TVEFURV9fKTsgIFwKKyB9IHdoaWxlKDApCisKIC8qKgogICAqIEB9CiAgICovCkBAIC0yNDQwLDYgKzI1MzUsMTEgQEAKIEhBTF9USU1fU3RhdGVUeXBlRGVmIEhBTF9USU1fSUNfR2V0U3RhdGUoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0pOwogSEFMX1RJTV9TdGF0ZVR5cGVEZWYgSEFMX1RJTV9PbmVQdWxzZV9HZXRTdGF0ZShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSk7CiBIQUxfVElNX1N0YXRlVHlwZURlZiBIQUxfVElNX0VuY29kZXJfR2V0U3RhdGUoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0pOworCisvKiBQZXJpcGhlcmFsIENoYW5uZWwgc3RhdGUgZnVuY3Rpb25zICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitIQUxfVElNX0FjdGl2ZUNoYW5uZWwgSEFMX1RJTV9HZXRBY3RpdmVDaGFubmVsKFRJTV9IYW5kbGVUeXBlRGVmICpodGltKTsKK0hBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBIQUxfVElNX0dldENoYW5uZWxTdGF0ZShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgIHVpbnQzMl90IENoYW5uZWwpOworSEFMX1RJTV9ETUFCdXJzdFN0YXRlVHlwZURlZiBIQUxfVElNX0RNQUJ1cnN0U3RhdGUoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0pOwogLyoqCiAgICogQH0KICAgKi8KQEAgLTI0NTksNyArMjU1OSw2IEBACiB2b2lkIFRJTV9FVFJfU2V0Q29uZmlnKFRJTV9UeXBlRGVmICpUSU14LCB1aW50MzJfdCBUSU1fRXh0VFJHUHJlc2NhbGVyLAogICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBUSU1fRXh0VFJHUG9sYXJpdHksIHVpbnQzMl90IEV4dFRSR0ZpbHRlcik7CiAKLXZvaWQgVElNX0RNQURlbGF5UHVsc2VDcGx0KERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKTsKIHZvaWQgVElNX0RNQURlbGF5UHVsc2VIYWxmQ3BsdChETUFfSGFuZGxlVHlwZURlZiAqaGRtYSk7CiB2b2lkIFRJTV9ETUFFcnJvcihETUFfSGFuZGxlVHlwZURlZiAqaGRtYSk7CiB2b2lkIFRJTV9ETUFDYXB0dXJlQ3BsdChETUFfSGFuZGxlVHlwZURlZiAqaGRtYSk7CmRpZmYgLS1naXQgYS9JbmMvc3RtMzJnNHh4X2hhbF90aW1fZXguaCBiL0luYy9zdG0zMmc0eHhfaGFsX3RpbV9leC5oCmluZGV4IDJkYjg0ODEuLmVmMGIzZTQgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmc0eHhfaGFsX3RpbV9leC5oCisrKyBiL0luYy9zdG0zMmc0eHhfaGFsX3RpbV9leC5oCkBAIC0xODM5LDYgKzE4MzksNyBAQAogICAqLwogLyogRXh0ZW5kZWQgUGVyaXBoZXJhbCBTdGF0ZSBmdW5jdGlvbnMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIEhBTF9USU1fU3RhdGVUeXBlRGVmIEhBTF9USU1FeF9IYWxsU2Vuc29yX0dldFN0YXRlKFRJTV9IYW5kbGVUeXBlRGVmICpodGltKTsKK0hBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBIQUxfVElNRXhfR2V0Q2hhbm5lbE5TdGF0ZShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgIHVpbnQzMl90IENoYW5uZWxOKTsKIC8qKgogICAqIEB9CiAgICovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJnNHh4X2hhbF91c2FydC5oIGIvSW5jL3N0bTMyZzR4eF9oYWxfdXNhcnQuaAppbmRleCA0ZTk0YWE0Li45OWQzNzAxIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJnNHh4X2hhbF91c2FydC5oCisrKyBiL0luYy9zdG0zMmc0eHhfaGFsX3VzYXJ0LmgKQEAgLTIyNiw2ICsyMjYsNyBAQAogI2lmIChVU0VfSEFMX1VTQVJUX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQogI2RlZmluZSBIQUxfVVNBUlRfRVJST1JfSU5WQUxJRF9DQUxMQkFDSyAoKHVpbnQzMl90KTB4MDAwMDAwNDBVKSAgICAvKiE8IEludmFsaWQgQ2FsbGJhY2sgZXJyb3IgICAgKi8KICNlbmRpZiAvKiBVU0VfSEFMX1VTQVJUX1JFR0lTVEVSX0NBTExCQUNLUyAqLworI2RlZmluZSAgSEFMX1VTQVJUX0VSUk9SX1JUTyAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDgwVSkgICAgLyohPCBSZWNlaXZlciBUaW1lb3V0IGVycm9yICAqLwogLyoqCiAgICogQH0KICAgKi8KQEAgLTM1MCw2ICszNTEsNyBAQAogI2RlZmluZSBVU0FSVF9GTEFHX1VEUiAgICAgICAgICAgICAgICAgICAgICBVU0FSVF9JU1JfVURSICAgICAgICAgICAvKiE8IFNQSSBzbGF2ZSB1bmRlcnJ1biBlcnJvciBmbGFnICAgICAgICAgICAgICAqLwogI2RlZmluZSBVU0FSVF9GTEFHX1RYRSAgICAgICAgICAgICAgICAgICAgICBVU0FSVF9JU1JfVFhFX1RYRk5GICAgICAvKiE8IFVTQVJUIHRyYW5zbWl0IGRhdGEgcmVnaXN0ZXIgZW1wdHkgICAgICAgICAqLwogI2RlZmluZSBVU0FSVF9GTEFHX1RYRk5GICAgICAgICAgICAgICAgICAgICBVU0FSVF9JU1JfVFhFX1RYRk5GICAgICAvKiE8IFVTQVJUIFRYRklGTyBub3QgZnVsbCAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0FSVF9GTEFHX1JUT0YgICAgICAgICAgICAgICAgICAgICBVU0FSVF9JU1JfUlRPRiAgICAgICAgICAvKiE8IFVTQVJUIHJlY2VpdmVyIHRpbWVvdXQgZmxhZyAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBVU0FSVF9GTEFHX1RDICAgICAgICAgICAgICAgICAgICAgICBVU0FSVF9JU1JfVEMgICAgICAgICAgICAvKiE8IFVTQVJUIHRyYW5zbWlzc2lvbiBjb21wbGV0ZSAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBVU0FSVF9GTEFHX1JYTkUgICAgICAgICAgICAgICAgICAgICBVU0FSVF9JU1JfUlhORV9SWEZORSAgICAvKiE8IFVTQVJUIHJlYWQgZGF0YSByZWdpc3RlciBub3QgZW1wdHkgICAgICAgICAqLwogI2RlZmluZSBVU0FSVF9GTEFHX1JYRk5FICAgICAgICAgICAgICAgICAgICBVU0FSVF9JU1JfUlhORV9SWEZORSAgICAvKiE8IFVTQVJUIFJYRklGTyBub3QgZW1wdHkgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtNDA0LDYgKzQwNiw3IEBACiAjZGVmaW5lIFVTQVJUX0NMRUFSX1RDRiAgICAgICAgICAgICAgICAgICAgICAgVVNBUlRfSUNSX1RDQ0YgICAgICAgICAgICAvKiE8IFRyYW5zbWlzc2lvbiBDb21wbGV0ZSBDbGVhciBGbGFnICAgICovCiAjZGVmaW5lIFVTQVJUX0NMRUFSX1VEUkYgICAgICAgICAgICAgICAgICAgICAgVVNBUlRfSUNSX1VEUkNGICAgICAgICAgICAvKiE8IFNQSSBzbGF2ZSB1bmRlcnJ1biBlcnJvciBDbGVhciBGbGFnICovCiAjZGVmaW5lIFVTQVJUX0NMRUFSX1RYRkVDRiAgICAgICAgICAgICAgICAgICAgVVNBUlRfSUNSX1RYRkVDRiAgICAgICAgICAvKiE8IFRYRklGTyBFbXB0eSBDbGVhciBGbGFnICAgICAgICAgICAgICovCisjZGVmaW5lIFVTQVJUX0NMRUFSX1JUT0YgICAgICAgICAgICAgICAgICAgICAgVVNBUlRfSUNSX1JUT0NGICAgICAgICAgICAvKiE8IFVTQVJUIHJlY2VpdmVyIHRpbWVvdXQgY2xlYXIgZmxhZyAgKi8KIC8qKgogICAqIEB9CiAgICovCkBAIC00NjAsNiArNDYzLDcgQEAKICAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBVU0FSVF9GTEFHX1RDICAgIFRyYW5zbWlzc2lvbiBDb21wbGV0ZSBmbGFnCiAgICogICAgICAgICAgICBAYXJnIEByZWYgVVNBUlRfRkxBR19SWE5FICBSZWNlaXZlIGRhdGEgcmVnaXN0ZXIgbm90IGVtcHR5IGZsYWcKICAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBVU0FSVF9GTEFHX1JYRk5FIFJYRklGTyBub3QgZW1wdHkgZmxhZworICAqICAgICAgICAgICAgQGFyZyBAcmVmIFVTQVJUX0ZMQUdfUlRPRiAgUmVjZWl2ZXIgVGltZW91dCBmbGFnCiAgICogICAgICAgICAgICBAYXJnIEByZWYgVVNBUlRfRkxBR19JRExFICBJZGxlIExpbmUgZGV0ZWN0aW9uIGZsYWcKICAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBVU0FSVF9GTEFHX09SRSAgIE92ZXJSdW4gRXJyb3IgZmxhZwogICAqICAgICAgICAgICAgQGFyZyBAcmVmIFVTQVJUX0ZMQUdfTkUgICAgTm9pc2UgRXJyb3IgZmxhZwpAQCAtNDgwLDYgKzQ4NCw3IEBACiAgICogICAgICAgICAgICBAYXJnIEByZWYgVVNBUlRfQ0xFQVJfSURMRUYgICAgSURMRSBsaW5lIGRldGVjdGVkIENsZWFyIEZsYWcKICAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBVU0FSVF9DTEVBUl9UWEZFQ0YgICBUWEZJRk8gZW1wdHkgY2xlYXIgRmxhZwogICAqICAgICAgICAgICAgQGFyZyBAcmVmIFVTQVJUX0NMRUFSX1RDRiAgICAgIFRyYW5zbWlzc2lvbiBDb21wbGV0ZSBDbGVhciBGbGFnCisgICogICAgICAgICAgICBAYXJnIEByZWYgVVNBUlRfQ0xFQVJfUlRPRiAgICAgUmVjZWl2ZXIgVGltZW91dCBjbGVhciBmbGFnCiAgICogICAgICAgICAgICBAYXJnIEByZWYgVVNBUlRfQ0xFQVJfVURSRiAgICAgU1BJIHNsYXZlIHVuZGVycnVuIGVycm9yIENsZWFyIEZsYWcKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KQEAgLTYzMCw2ICs2MzUsNyBAQAogICAqICAgICAgICAgICAgQGFyZyBAcmVmIFVTQVJUX0NMRUFSX05FRiAgICAgIE5vaXNlIGRldGVjdGVkIENsZWFyIEZsYWcKICAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBVU0FSVF9DTEVBUl9PUkVGICAgICBPdmVycnVuIEVycm9yIENsZWFyIEZsYWcKICAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBVU0FSVF9DTEVBUl9JRExFRiAgICBJRExFIGxpbmUgZGV0ZWN0ZWQgQ2xlYXIgRmxhZworICAqICAgICAgICAgICAgQGFyZyBAcmVmIFVTQVJUX0NMRUFSX1JUT0YgICAgIFJlY2VpdmVyIHRpbWVvdXQgY2xlYXIgZmxhZwogICAqICAgICAgICAgICAgQGFyZyBAcmVmIFVTQVJUX0NMRUFSX1RYRkVDRiAgIFRYRklGTyBlbXB0eSBjbGVhciBGbGFnCiAgICogICAgICAgICAgICBAYXJnIEByZWYgVVNBUlRfQ0xFQVJfVENGICAgICAgVHJhbnNtaXNzaW9uIENvbXBsZXRlIENsZWFyIEZsYWcKICAgKiBAcmV0dmFsIE5vbmUKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmc0eHhfaGFsX3VzYXJ0X2V4LmggYi9JbmMvc3RtMzJnNHh4X2hhbF91c2FydF9leC5oCmluZGV4IGJlNDVlNjAuLjk2YTY3Y2QgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmc0eHhfaGFsX3VzYXJ0X2V4LmgKKysrIGIvSW5jL3N0bTMyZzR4eF9oYWxfdXNhcnRfZXguaApAQCAtNDYsNyArNDYsNyBAQAogICAqIEB7CiAgICovCiAjZGVmaW5lIFVTQVJUX1dPUkRMRU5HVEhfN0IgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KVVTQVJUX0NSMV9NMSkgICAvKiE8IDctYml0IGxvbmcgVVNBUlQgZnJhbWUgKi8KLSNkZWZpbmUgVVNBUlRfV09SRExFTkdUSF84QiAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDBVICAgICAgICAgICAgICAgIC8qITwgOC1iaXQgbG9uZyBVU0FSVCBmcmFtZSAqLworI2RlZmluZSBVU0FSVF9XT1JETEVOR1RIXzhCICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDBVKSAgICAgICAgICAgICAgLyohPCA4LWJpdCBsb25nIFVTQVJUIGZyYW1lICovCiAjZGVmaW5lIFVTQVJUX1dPUkRMRU5HVEhfOUIgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KVVTQVJUX0NSMV9NMCkgICAvKiE8IDktYml0IGxvbmcgVVNBUlQgZnJhbWUgKi8KIC8qKgogICAqIEB9CkBAIC0xNjksNyArMTY5LDYgQEAKICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgIH0gd2hpbGUoMFUpCiAKLQogLyoqCiAgICogQGJyaWVmIEVuc3VyZSB0aGF0IFVTQVJUIGZyYW1lIGxlbmd0aCBpcyB2YWxpZC4KICAgKiBAcGFyYW0gX19MRU5HVEhfXyBVU0FSVCBmcmFtZSBsZW5ndGguCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJnNHh4X2hhbF93d2RnLmggYi9JbmMvc3RtMzJnNHh4X2hhbF93d2RnLmgKaW5kZXggMDI5OWQ3Zi4uNTc1YTFlMyAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZzR4eF9oYWxfd3dkZy5oCisrKyBiL0luYy9zdG0zMmc0eHhfaGFsX3d3ZGcuaApAQCAtMzAzLDYgKzMwMyw2IEBACiB9CiAjZW5kaWYKIAotI2VuZGlmIC8qIF9fU1RNMzJHNHh4X0hBTF9XV0RHX0ggKi8KKyNlbmRpZiAvKiBTVE0zMkc0eHhfSEFMX1dXREdfSCAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqIChDKSBDT1BZUklHSFQgU1RNaWNyb2VsZWN0cm9uaWNzICoqKioqRU5EIE9GIEZJTEUqKioqLwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZzR4eF9sbF9hZGMuaCBiL0luYy9zdG0zMmc0eHhfbGxfYWRjLmgKaW5kZXggZjY4NzBjOS4uOGJjZDljYSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZzR4eF9sbF9hZGMuaAorKysgYi9JbmMvc3RtMzJnNHh4X2xsX2FkYy5oCkBAIC0yNzM0LDExICsyNzM0LDEzIEBACiB9CiAKIC8qKgotICAqIEBicmllZiAgU2V0IHBhcmFtZXRlciBjb21tb24gdG8gc2V2ZXJhbCBBREM6IG1lYXN1cmVtZW50IHBhdGggdG8gaW50ZXJuYWwKLSAgKiAgICAgICAgIGNoYW5uZWxzIChWcmVmSW50LCB0ZW1wZXJhdHVyZSBzZW5zb3IsIC4uLikuCisgICogQGJyaWVmICBTZXQgcGFyYW1ldGVyIGNvbW1vbiB0byBzZXZlcmFsIEFEQzogbWVhc3VyZW1lbnQgcGF0aCB0bworICAqICAgICAgICAgaW50ZXJuYWwgY2hhbm5lbHMgKFZyZWZJbnQsIHRlbXBlcmF0dXJlIHNlbnNvciwgLi4uKS4KKyAgKiAgICAgICAgIENvbmZpZ3VyZSBhbGwgcGF0aHMgKG92ZXJ3cml0ZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24pLgogICAqIEBub3RlICAgT25lIG9yIHNldmVyYWwgdmFsdWVzIGNhbiBiZSBzZWxlY3RlZC4KICAgKiAgICAgICAgIEV4YW1wbGU6IChMTF9BRENfUEFUSF9JTlRFUk5BTF9WUkVGSU5UIHwKICAgKiAgICAgICAgICAgICAgICAgICBMTF9BRENfUEFUSF9JTlRFUk5BTF9URU1QU0VOU09SKQorICAqICAgICAgICAgVGhlIHZhbHVlcyBub3Qgc2VsZWN0ZWQgYXJlIHJlbW92ZWQgZnJvbSBjb25maWd1cmF0aW9uLgogICAqIEBub3RlICAgU3RhYmlsaXphdGlvbiB0aW1lIG9mIG1lYXN1cmVtZW50IHBhdGggdG8gaW50ZXJuYWwgY2hhbm5lbDoKICAgKiAgICAgICAgIEFmdGVyIGVuYWJsaW5nIGludGVybmFsIHBhdGhzLCBiZWZvcmUgc3RhcnRpbmcgQURDIGNvbnZlcnNpb24sCiAgICogICAgICAgICBhIGRlbGF5IGlzIHJlcXVpcmVkIGZvciBpbnRlcm5hbCB2b2x0YWdlIHJlZmVyZW5jZSBhbmQKQEAgLTI3NjgsNiArMjc3MCw2NSBAQAogfQogCiAvKioKKyAgKiBAYnJpZWYgIFNldCBwYXJhbWV0ZXIgY29tbW9uIHRvIHNldmVyYWwgQURDOiBtZWFzdXJlbWVudCBwYXRoIHRvCisgICogICAgICAgICBpbnRlcm5hbCBjaGFubmVscyAoVnJlZkludCwgdGVtcGVyYXR1cmUgc2Vuc29yLCAuLi4pLgorICAqICAgICAgICAgQWRkIHBhdGhzIHRvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uCisgICogQG5vdGUgICBPbmUgb3Igc2V2ZXJhbCB2YWx1ZXMgY2FuIGJlIHNlbGVjdGVkLgorICAqICAgICAgICAgRXhhbXBsZTogKExMX0FEQ19QQVRIX0lOVEVSTkFMX1ZSRUZJTlQgfAorICAqICAgICAgICAgICAgICAgICAgIExMX0FEQ19QQVRIX0lOVEVSTkFMX1RFTVBTRU5TT1IpCisgICogQG5vdGUgICBTdGFiaWxpemF0aW9uIHRpbWUgb2YgbWVhc3VyZW1lbnQgcGF0aCB0byBpbnRlcm5hbCBjaGFubmVsOgorICAqICAgICAgICAgQWZ0ZXIgZW5hYmxpbmcgaW50ZXJuYWwgcGF0aHMsIGJlZm9yZSBzdGFydGluZyBBREMgY29udmVyc2lvbiwKKyAgKiAgICAgICAgIGEgZGVsYXkgaXMgcmVxdWlyZWQgZm9yIGludGVybmFsIHZvbHRhZ2UgcmVmZXJlbmNlIGFuZAorICAqICAgICAgICAgdGVtcGVyYXR1cmUgc2Vuc29yIHN0YWJpbGl6YXRpb24gdGltZS4KKyAgKiAgICAgICAgIFJlZmVyIHRvIGRldmljZSBkYXRhc2hlZXQuCisgICogICAgICAgICBSZWZlciB0byBsaXRlcmFsIEByZWYgTExfQURDX0RFTEFZX1ZSRUZJTlRfU1RBQl9VUy4KKyAgKiAgICAgICAgIFJlZmVyIHRvIGxpdGVyYWwgQHJlZiBMTF9BRENfREVMQVlfVEVNUFNFTlNPUl9TVEFCX1VTLgorICAqIEBub3RlICAgQURDIGludGVybmFsIGNoYW5uZWwgc2FtcGxpbmcgdGltZSBjb25zdHJhaW50OgorICAqICAgICAgICAgRm9yIEFEQyBjb252ZXJzaW9uIG9mIGludGVybmFsIGNoYW5uZWxzLAorICAqICAgICAgICAgYSBzYW1wbGluZyB0aW1lIG1pbmltdW0gdmFsdWUgaXMgcmVxdWlyZWQuCisgICogICAgICAgICBSZWZlciB0byBkZXZpY2UgZGF0YXNoZWV0LgorICAqIEBybXRvbGwgQ0NSICAgICAgVlJFRkVOICAgICAgICAgTExfQURDX1NldENvbW1vblBhdGhJbnRlcm5hbENoQWRkXG4KKyAgKiAgICAgICAgIENDUiAgICAgIFZTRU5TRVNFTCAgICAgIExMX0FEQ19TZXRDb21tb25QYXRoSW50ZXJuYWxDaEFkZFxuCisgICogICAgICAgICBDQ1IgICAgICBWQkFUU0VMICAgICAgICBMTF9BRENfU2V0Q29tbW9uUGF0aEludGVybmFsQ2hBZGQKKyAgKiBAcGFyYW0gIEFEQ3h5X0NPTU1PTiBBREMgY29tbW9uIGluc3RhbmNlCisgICogICAgICAgICAoY2FuIGJlIHNldCBkaXJlY3RseSBmcm9tIENNU0lTIGRlZmluaXRpb24gb3IgYnkgdXNpbmcgaGVscGVyIG1hY3JvIEByZWYgX19MTF9BRENfQ09NTU9OX0lOU1RBTkNFKCkgKQorICAqIEBwYXJhbSAgUGF0aEludGVybmFsIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19QQVRIX0lOVEVSTkFMX05PTkUKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BRENfUEFUSF9JTlRFUk5BTF9WUkVGSU5UCisgICogICAgICAgICBAYXJnIEByZWYgTExfQURDX1BBVEhfSU5URVJOQUxfVEVNUFNFTlNPUgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19QQVRIX0lOVEVSTkFMX1ZCQVQKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIExMX0FEQ19TZXRDb21tb25QYXRoSW50ZXJuYWxDaEFkZChBRENfQ29tbW9uX1R5cGVEZWYgKkFEQ3h5X0NPTU1PTiwgdWludDMyX3QgUGF0aEludGVybmFsKQoreworICBTRVRfQklUKEFEQ3h5X0NPTU1PTi0+Q0NSLCBQYXRoSW50ZXJuYWwpOworfQorCisvKioKKyAgKiBAYnJpZWYgIFNldCBwYXJhbWV0ZXIgY29tbW9uIHRvIHNldmVyYWwgQURDOiBtZWFzdXJlbWVudCBwYXRoIHRvCisgICogICAgICAgICBpbnRlcm5hbCBjaGFubmVscyAoVnJlZkludCwgdGVtcGVyYXR1cmUgc2Vuc29yLCAuLi4pLgorICAqICAgICAgICAgUmVtb3ZlIHBhdGhzIHRvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uCisgICogQG5vdGUgICBPbmUgb3Igc2V2ZXJhbCB2YWx1ZXMgY2FuIGJlIHNlbGVjdGVkLgorICAqICAgICAgICAgRXhhbXBsZTogKExMX0FEQ19QQVRIX0lOVEVSTkFMX1ZSRUZJTlQgfAorICAqICAgICAgICAgICAgICAgICAgIExMX0FEQ19QQVRIX0lOVEVSTkFMX1RFTVBTRU5TT1IpCisgICogQHJtdG9sbCBDQ1IgICAgICBWUkVGRU4gICAgICAgICBMTF9BRENfU2V0Q29tbW9uUGF0aEludGVybmFsQ2hSZW1cbgorICAqICAgICAgICAgQ0NSICAgICAgVlNFTlNFU0VMICAgICAgTExfQURDX1NldENvbW1vblBhdGhJbnRlcm5hbENoUmVtXG4KKyAgKiAgICAgICAgIENDUiAgICAgIFZCQVRTRUwgICAgICAgIExMX0FEQ19TZXRDb21tb25QYXRoSW50ZXJuYWxDaFJlbQorICAqIEBwYXJhbSAgQURDeHlfQ09NTU9OIEFEQyBjb21tb24gaW5zdGFuY2UKKyAgKiAgICAgICAgIChjYW4gYmUgc2V0IGRpcmVjdGx5IGZyb20gQ01TSVMgZGVmaW5pdGlvbiBvciBieSB1c2luZyBoZWxwZXIgbWFjcm8gQHJlZiBfX0xMX0FEQ19DT01NT05fSU5TVEFOQ0UoKSApCisgICogQHBhcmFtICBQYXRoSW50ZXJuYWwgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICBAYXJnIEByZWYgTExfQURDX1BBVEhfSU5URVJOQUxfTk9ORQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19QQVRIX0lOVEVSTkFMX1ZSRUZJTlQKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BRENfUEFUSF9JTlRFUk5BTF9URU1QU0VOU09SCisgICogICAgICAgICBAYXJnIEByZWYgTExfQURDX1BBVEhfSU5URVJOQUxfVkJBVAorICAqIEByZXR2YWwgTm9uZQorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQURDX1NldENvbW1vblBhdGhJbnRlcm5hbENoUmVtKEFEQ19Db21tb25fVHlwZURlZiAqQURDeHlfQ09NTU9OLCB1aW50MzJfdCBQYXRoSW50ZXJuYWwpCit7CisgIENMRUFSX0JJVChBREN4eV9DT01NT04tPkNDUiwgUGF0aEludGVybmFsKTsKK30KKworLyoqCiAgICogQGJyaWVmICBHZXQgcGFyYW1ldGVyIGNvbW1vbiB0byBzZXZlcmFsIEFEQzogbWVhc3VyZW1lbnQgcGF0aCB0byBpbnRlcm5hbAogICAqICAgICAgICAgY2hhbm5lbHMgKFZyZWZJbnQsIHRlbXBlcmF0dXJlIHNlbnNvciwgLi4uKS4KICAgKiBAbm90ZSAgIE9uZSBvciBzZXZlcmFsIHZhbHVlcyBjYW4gYmUgc2VsZWN0ZWQuCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJnNHh4X2xsX2ZtYWMuaCBiL0luYy9zdG0zMmc0eHhfbGxfZm1hYy5oCmluZGV4IGIzZjMzNzEuLjVkODYwYzggMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmc0eHhfbGxfZm1hYy5oCisrKyBiL0luYy9zdG0zMmc0eHhfbGxfZm1hYy5oCkBAIC0zOCwyMCArMzgsNiBAQAogICAqIEB7CiAgICovCiAKLS8qIFByaXZhdGUgdmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIFByaXZhdGUgY29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIFByaXZhdGUgbWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0jaWYgZGVmaW5lZChVU0VfRlVMTF9MTF9EUklWRVIpCi0vKiogQGRlZmdyb3VwIEZNQUNfTExfUHJpdmF0ZV9NYWNyb3MgRk1BQyBQcml2YXRlIE1hY3JvcwotICAqIEB7Ci0gICovCi0vKioKLSAgKiBAfQotICAqLwotI2VuZGlmIC8qVVNFX0ZVTExfTExfRFJJVkVSKi8KLQogLyogRXhwb3J0ZWQgdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyogRXhwb3J0ZWQgY29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTYzLDExICs0OSwxMSBAQAogICAqIEBicmllZiAgICBGbGFnIGRlZmluZXMgd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBMTF9GTUFDX1JlYWRSZWcgZnVuY3Rpb24KICAgKiBAewogICAqLwotI2RlZmluZSBMTF9GTUFDX1NSX1NBVCAgICAgICAgICAgICAgICAgICAgIEZNQUNfU1JfU0FUCi0jZGVmaW5lIExMX0ZNQUNfU1JfVU5GTCAgICAgICAgICAgICAgICAgICAgRk1BQ19TUl9VTkZMCi0jZGVmaW5lIExMX0ZNQUNfU1JfT1ZGTCAgICAgICAgICAgICAgICAgICAgRk1BQ19TUl9PVkZMCi0jZGVmaW5lIExMX0ZNQUNfU1JfWDFGVUxMICAgICAgICAgICAgICAgICAgRk1BQ19TUl9YMUZVTEwKLSNkZWZpbmUgTExfRk1BQ19TUl9ZRU1QVFkgICAgICAgICAgICAgICAgICBGTUFDX1NSX1lFTVBUWQorI2RlZmluZSBMTF9GTUFDX1NSX1NBVCAgICAgICAgICAgICAgICAgICAgIEZNQUNfU1JfU0FUICAgIC8qITwgU2F0dXJhdGlvbiBFcnJvciBGbGFnICh0aGlzIGhlbHBzIGluIGRlYnVnZ2luZyBhIGZpbHRlcikgKi8KKyNkZWZpbmUgTExfRk1BQ19TUl9VTkZMICAgICAgICAgICAgICAgICAgICBGTUFDX1NSX1VORkwgICAvKiE8IFVuZGVyZmxvdyBFcnJvciBGbGFnICovCisjZGVmaW5lIExMX0ZNQUNfU1JfT1ZGTCAgICAgICAgICAgICAgICAgICAgRk1BQ19TUl9PVkZMICAgLyohPCBPdmVyZmxvdyBFcnJvciBGbGFnICovCisjZGVmaW5lIExMX0ZNQUNfU1JfWDFGVUxMICAgICAgICAgICAgICAgICAgRk1BQ19TUl9YMUZVTEwgLyohPCBYMSBCdWZmZXIgRnVsbCBGbGFnICovCisjZGVmaW5lIExMX0ZNQUNfU1JfWUVNUFRZICAgICAgICAgICAgICAgICAgRk1BQ19TUl9ZRU1QVFkgLyohPCBZIEJ1ZmZlciBFbXB0eSBGbGFnICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtNzYsMTEgKzYyLDExIEBACiAgICogQGJyaWVmICAgIElUIGRlZmluZXMgd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBMTF9GTUFDX1JlYWRSZWcgYW5kIExMX0ZNQUNfV3JpdGVSZWcgZnVuY3Rpb25zCiAgICogQHsKICAgKi8KLSNkZWZpbmUgTExfRk1BQ19DUl9TQVRJRU4gICAgICAgICAgICAgICAgICBGTUFDX0NSX1NBVElFTgotI2RlZmluZSBMTF9GTUFDX0NSX1VORkxJRU4gICAgICAgICAgICAgICAgIEZNQUNfQ1JfVU5GTElFTgotI2RlZmluZSBMTF9GTUFDX0NSX09WRkxJRU4gICAgICAgICAgICAgICAgIEZNQUNfQ1JfT1ZGTElFTgotI2RlZmluZSBMTF9GTUFDX0NSX1dJRU4gICAgICAgICAgICAgICAgICAgIEZNQUNfQ1JfV0lFTgotI2RlZmluZSBMTF9GTUFDX0NSX1JJRU4gICAgICAgICAgICAgICAgICAgIEZNQUNfQ1JfUklFTgorI2RlZmluZSBMTF9GTUFDX0NSX1NBVElFTiAgICAgICAgICAgICAgICAgIEZNQUNfQ1JfU0FUSUVOICAvKiE8IFNhdHVyYXRpb24gRXJyb3IgSW50ZXJydXB0IEVuYWJsZSAodGhpcyBoZWxwcyBpbiBkZWJ1Z2dpbmcgYSBmaWx0ZXIpICovCisjZGVmaW5lIExMX0ZNQUNfQ1JfVU5GTElFTiAgICAgICAgICAgICAgICAgRk1BQ19DUl9VTkZMSUVOIC8qITwgVW5kZXJmbG93IEVycm9yIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgTExfRk1BQ19DUl9PVkZMSUVOICAgICAgICAgICAgICAgICBGTUFDX0NSX09WRkxJRU4gLyohPCBPdmVyZmxvdyBFcnJvciBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIExMX0ZNQUNfQ1JfV0lFTiAgICAgICAgICAgICAgICAgICAgRk1BQ19DUl9XSUVOICAgIC8qITwgV3JpdGUgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBMTF9GTUFDX0NSX1JJRU4gICAgICAgICAgICAgICAgICAgIEZNQUNfQ1JfUklFTiAgICAvKiE8IFJlYWQgSW50ZXJydXB0IEVuYWJsZSAqLwogLyoqCiAgICogQH0KICAgKi8KQEAgLTg5LDEwICs3NSwxMCBAQAogICAqIEBicmllZiAgICBXYXRlcm1hcmsgZGVmaW5lcyB0aGF0IGNhbiBiZSB1c2VkIGZvciBidWZmZXIgZnVsbCAoaW5wdXQpIG9yIGJ1ZmZlciBlbXB0eSAob3V0cHV0KQogICAqIEB7CiAgICovCi0jZGVmaW5lIExMX0ZNQUNfV01fMF9USFJFU0hPTERfMSAgICAgICAgICAgMHgwMDAwMDAwMFVMIC8qITwgQnVmZmVyIGZ1bGwvZW1wdHkgZmxhZyBzZXQgaWYgdGhlcmUgaXMgbGVzcyB0aGFuIDEgZnJlZS91bnJlYWQgc3BhY2UuICovCi0jZGVmaW5lIExMX0ZNQUNfV01fMV9USFJFU0hPTERfMiAgICAgICAgICAgMHgwMTAwMDAwMFVMIC8qITwgQnVmZmVyIGZ1bGwvZW1wdHkgZmxhZyBzZXQgaWYgdGhlcmUgYXJlIGxlc3MgdGhhbiAyIGZyZWUvdW5yZWFkIHNwYWNlcy4gKi8KLSNkZWZpbmUgTExfRk1BQ19XTV8yX1RIUkVTSE9MRF80ICAgICAgICAgICAweDAyMDAwMDAwVUwgLyohPCBCdWZmZXIgZnVsbC9lbXB0eSBmbGFnIHNldCBpZiB0aGVyZSBhcmUgbGVzcyB0aGFuIDQgZnJlZS91bnJlYWQgc3BhY2VzLiAqLwotI2RlZmluZSBMTF9GTUFDX1dNXzNfVEhSRVNIT0xEXzggICAgICAgICAgIDB4MDMwMDAwMDBVTCAvKiE8IEJ1ZmZlciBmdWxsL2VtcHR5IGZsYWcgc2V0IGlmIHRoZXJlIGFyZSBsZXNzIHRoYW4gOCBmcmVlL2VtcHR5IHNwYWNlcy4gKi8KKyNkZWZpbmUgTExfRk1BQ19XTV8wX1RIUkVTSE9MRF8xICAgICAgICAgICAweDAwMDAwMDAwVSAvKiE8IEJ1ZmZlciBmdWxsL2VtcHR5IGZsYWcgc2V0IGlmIHRoZXJlIGlzIGxlc3MgdGhhbiAxIGZyZWUvdW5yZWFkIHNwYWNlLiAqLworI2RlZmluZSBMTF9GTUFDX1dNXzFfVEhSRVNIT0xEXzIgICAgICAgICAgIDB4MDEwMDAwMDBVIC8qITwgQnVmZmVyIGZ1bGwvZW1wdHkgZmxhZyBzZXQgaWYgdGhlcmUgYXJlIGxlc3MgdGhhbiAyIGZyZWUvdW5yZWFkIHNwYWNlcy4gKi8KKyNkZWZpbmUgTExfRk1BQ19XTV8yX1RIUkVTSE9MRF80ICAgICAgICAgICAweDAyMDAwMDAwVSAvKiE8IEJ1ZmZlciBmdWxsL2VtcHR5IGZsYWcgc2V0IGlmIHRoZXJlIGFyZSBsZXNzIHRoYW4gNCBmcmVlL3VucmVhZCBzcGFjZXMuICovCisjZGVmaW5lIExMX0ZNQUNfV01fM19USFJFU0hPTERfOCAgICAgICAgICAgMHgwMzAwMDAwMFUgLyohPCBCdWZmZXIgZnVsbC9lbXB0eSBmbGFnIHNldCBpZiB0aGVyZSBhcmUgbGVzcyB0aGFuIDggZnJlZS9lbXB0eSBzcGFjZXMuICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtMTAwLDExICs4NiwyMCBAQAogLyoqIEBkZWZncm91cCBGTUFDX0xMX0VDX0ZVTkMgRk1BQyBmdW5jdGlvbnMKICAgKiBAewogICAqLwotI2RlZmluZSBMTF9GTUFDX0ZVTkNfTE9BRF9YMSAgICAgICAgICAgICAgICgodWludDMyX3QpKEZNQUNfUEFSQU1fRlVOQ18wKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTG9hZCBYMSBidWZmZXIgKi8KLSNkZWZpbmUgTExfRk1BQ19GVU5DX0xPQURfWDIgICAgICAgICAgICAgICAoKHVpbnQzMl90KShGTUFDX1BBUkFNX0ZVTkNfMSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IExvYWQgWDIgYnVmZmVyICovCi0jZGVmaW5lIExMX0ZNQUNfRlVOQ19MT0FEX1kgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkoRk1BQ19QQVJBTV9GVU5DXzEgfCBGTUFDX1BBUkFNX0ZVTkNfMCkpICAgICAgICAgICAgICAgICAgICAgLyohPCBMb2FkIFkgYnVmZmVyICovCi0jZGVmaW5lIExMX0ZNQUNfRlVOQ19DT05WT19GSVIgICAgICAgICAgICAgKCh1aW50MzJfdCkoRk1BQ19QQVJBTV9GVU5DXzMpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb252b2x1dGlvbiAoRklSIGZpbHRlcikgKi8KLSNkZWZpbmUgTExfRk1BQ19GVU5DX0lJUl9ESVJFQ1RfRk9STV8xICAgICAoKHVpbnQzMl90KShGTUFDX1BBUkFNX0ZVTkNfMyB8IEZNQUNfUEFSQU1fRlVOQ18wKSkgICAgICAgICAgICAgICAgICAgICAvKiE8IElJUiBmaWx0ZXIgKGRpcmVjdCBmb3JtIDEpICovCisjZGVmaW5lIExMX0ZNQUNfRlVOQ19MT0FEX1gxICAgICAgICAgICAgICAgKEZNQUNfUEFSQU1fRlVOQ18wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBMb2FkIFgxIGJ1ZmZlciAqLworI2RlZmluZSBMTF9GTUFDX0ZVTkNfTE9BRF9YMiAgICAgICAgICAgICAgIChGTUFDX1BBUkFNX0ZVTkNfMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTG9hZCBYMiBidWZmZXIgKi8KKyNkZWZpbmUgTExfRk1BQ19GVU5DX0xPQURfWSAgICAgICAgICAgICAgICAoRk1BQ19QQVJBTV9GVU5DXzEgfCBGTUFDX1BBUkFNX0ZVTkNfMCkgICAgICAgICAgICAgICAgICAgICAvKiE8IExvYWQgWSBidWZmZXIgKi8KKyNkZWZpbmUgTExfRk1BQ19GVU5DX0NPTlZPX0ZJUiAgICAgICAgICAgICAoRk1BQ19QQVJBTV9GVU5DXzMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvbnZvbHV0aW9uIChGSVIgZmlsdGVyKSAqLworI2RlZmluZSBMTF9GTUFDX0ZVTkNfSUlSX0RJUkVDVF9GT1JNXzEgICAgIChGTUFDX1BBUkFNX0ZVTkNfMyB8IEZNQUNfUEFSQU1fRlVOQ18wKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSUlSIGZpbHRlciAoZGlyZWN0IGZvcm0gMSkgKi8KKy8qKgorICAqIEB9CisgICovCisKKy8qKiBAZGVmZ3JvdXAgRk1BQ19MTF9FQ19QUk9DRVNTSU5HIEZNQUMgcHJvY2Vzc2luZworICAqIEB7CisgICovCisjZGVmaW5lIExMX0ZNQUNfUFJPQ0VTU0lOR19TVE9QICAgICAgICAgICAgMHgwMFUgLyohPCBTdG9wIEZNQUMgUHJvY2Vzc2luZyAqLworI2RlZmluZSBMTF9GTUFDX1BST0NFU1NJTkdfU1RBUlQgICAgICAgICAgIDB4MDFVIC8qITwgU3RhcnQgRk1BQyBQcm9jZXNzaW5nICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtMTEzLDcgKzEwOCw4IEBACiAgICogQH0KICAgKi8KIAotLyogRXhwb3J0ZWQgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIEV4dGVybmFsIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBFeHBvcnRlZCBtYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyoqIEBkZWZncm91cCBGTUFDX0xMX0V4cG9ydGVkX01hY3JvcyBGTUFDIEV4cG9ydGVkIE1hY3JvcwogICAqIEB7CiAgICovCkBAIC0xNzcsNyArMTczLDcgQEAKICAgKiBAYnJpZWYgIFJldHVybiBYMSBmdWxsIHdhdGVybWFyay4KICAgKiBAcm10b2xsIFgxQlVGQ0ZHICAgICBGVUxMX1dNICAgICAgIExMX0ZNQUNfR2V0WDFGdWxsV2F0ZXJtYXJrCiAgICogQHBhcmFtICBGTUFDeCBGTUFDIGluc3RhbmNlCi0gICogQHJldHZhbCBSZXR1cm5lZCB2YWx1ZSBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqIEByZXR2YWwgdWludDMyX3QgUmV0dXJuZWQgdmFsdWUgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9GTUFDX1dNXzBfVEhSRVNIT0xEXzEKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9GTUFDX1dNXzFfVEhSRVNIT0xEXzIKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9GTUFDX1dNXzJfVEhSRVNIT0xEXzQKQEAgLTE5Miw3ICsxODgsOCBAQAogICAqIEBicmllZiAgQ29uZmlndXJlIFgxIGJ1ZmZlciBzaXplLgogICAqIEBybXRvbGwgWDFCVUZDRkcgICAgIFgxX0JVRl9TSVpFICAgTExfRk1BQ19TZXRYMUJ1ZmZlclNpemUKICAgKiBAcGFyYW0gIEZNQUN4IEZNQUMgaW5zdGFuY2UKLSAgKiBAcGFyYW0gIEJ1ZmZlclNpemUgMHgwMSAuLiAweEZGOiBOdW1iZXIgb2YgMTYtYml0IGFkZHJlc3NlcyBhbGxvY2F0ZWQgdG8gdGhlIGlucHV0IGJ1ZmZlciAoaW5jbHVkaW5nIHRoZSBvcHRpb25hbCAiaGVhZHJvb20iKS4KKyAgKiBAcGFyYW0gIEJ1ZmZlclNpemUgTnVtYmVyIG9mIDE2LWJpdCB3b3JkcyBhbGxvY2F0ZWQgdG8gdGhlIGlucHV0IGJ1ZmZlciAoaW5jbHVkaW5nIHRoZSBvcHRpb25hbCAiaGVhZHJvb20iKS4KKyAgKiAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIE1pbl9EYXRhPTB4MDEgYW5kIE1heF9EYXRhPTB4RkYuCiAgICogQHJldHZhbCBOb25lCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9GTUFDX1NldFgxQnVmZmVyU2l6ZShGTUFDX1R5cGVEZWYgKkZNQUN4LCB1aW50OF90IEJ1ZmZlclNpemUpCkBAIC0yMDQsNyArMjAxLDcgQEAKICAgKiBAYnJpZWYgIFJldHVybiBYMSBidWZmZXIgc2l6ZS4KICAgKiBAcm10b2xsIFgxQlVGQ0ZHICAgICBYMV9CVUZfU0laRSAgIExMX0ZNQUNfR2V0WDFCdWZmZXJTaXplCiAgICogQHBhcmFtICBGTUFDeCBGTUFDIGluc3RhbmNlCi0gICogQHJldHZhbCAweDAxIC4uIDB4RkY6IE51bWJlciBvZiAxNi1iaXQgYWRkcmVzc2VzIGFsbG9jYXRlZCB0byB0aGUgaW5wdXQgYnVmZmVyIChpbmNsdWRpbmcgdGhlIG9wdGlvbmFsICJoZWFkcm9vbSIpLgorICAqIEByZXR2YWwgdWludDhfdCBOdW1iZXIgb2YgMTYtYml0IHdvcmRzIGFsbG9jYXRlZCB0byB0aGUgaW5wdXQgYnVmZmVyIChpbmNsdWRpbmcgdGhlIG9wdGlvbmFsICJoZWFkcm9vbSIpICh2YWx1ZSBiZXR3ZWVuIE1pbl9EYXRhPTB4MDEgYW5kIE1heF9EYXRhPTB4RkYpLgogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQ4X3QgTExfRk1BQ19HZXRYMUJ1ZmZlclNpemUoRk1BQ19UeXBlRGVmICpGTUFDeCkKIHsKQEAgLTIxNSw3ICsyMTIsOCBAQAogICAqIEBicmllZiAgQ29uZmlndXJlIFgxIGJhc2UuCiAgICogQHJtdG9sbCBYMUJVRkNGRyAgICAgWDFfQkFTRSAgICAgICBMTF9GTUFDX1NldFgxQmFzZQogICAqIEBwYXJhbSAgRk1BQ3ggRk1BQyBpbnN0YW5jZQotICAqIEBwYXJhbSAgQmFzZSAweDAwIC4uIDB4RkY6IEJhc2UgYWRkcmVzcyBvZiB0aGUgaW5wdXQgYnVmZmVyIChYMSkgd2l0aGluIHRoZSBpbnRlcm5hbCBtZW1vcnkuCisgICogQHBhcmFtICBCYXNlIEJhc2UgYWRkcmVzcyBvZiB0aGUgaW5wdXQgYnVmZmVyIChYMSkgd2l0aGluIHRoZSBpbnRlcm5hbCBtZW1vcnkuCisgICogICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSB2YWx1ZSBiZXR3ZWVuIE1pbl9EYXRhPTB4MDAgYW5kIE1heF9EYXRhPTB4RkYuCiAgICogQHJldHZhbCBOb25lCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9GTUFDX1NldFgxQmFzZShGTUFDX1R5cGVEZWYgKkZNQUN4LCB1aW50OF90IEJhc2UpCkBAIC0yMjcsNyArMjI1LDcgQEAKICAgKiBAYnJpZWYgIFJldHVybiBYMSBiYXNlLgogICAqIEBybXRvbGwgWDFCVUZDRkcgICAgIFgxX0JBU0UgICAgICAgTExfRk1BQ19HZXRYMUJhc2UKICAgKiBAcGFyYW0gIEZNQUN4IEZNQUMgaW5zdGFuY2UKLSAgKiBAcmV0dmFsIDB4MDAgLi4gMHhGRjogQmFzZSBhZGRyZXNzIG9mIHRoZSBpbnB1dCBidWZmZXIgKFgxKSB3aXRoaW4gdGhlIGludGVybmFsIG1lbW9yeS4KKyAgKiBAcmV0dmFsIHVpbnQ4X3QgQmFzZSBhZGRyZXNzIG9mIHRoZSBpbnB1dCBidWZmZXIgKFgxKSB3aXRoaW4gdGhlIGludGVybmFsIG1lbW9yeSAodmFsdWUgYmV0d2VlbiBNaW5fRGF0YT0weDAwIGFuZCBNYXhfRGF0YT0weEZGKS4KICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50OF90IExMX0ZNQUNfR2V0WDFCYXNlKEZNQUNfVHlwZURlZiAqRk1BQ3gpCiB7CkBAIC0yMzgsNyArMjM2LDggQEAKICAgKiBAYnJpZWYgIENvbmZpZ3VyZSBYMiBidWZmZXIgc2l6ZS4KICAgKiBAcm10b2xsIFgyQlVGQ0ZHICAgICBYMl9CVUZfU0laRSAgIExMX0ZNQUNfU2V0WDJCdWZmZXJTaXplCiAgICogQHBhcmFtICBGTUFDeCBGTUFDIGluc3RhbmNlCi0gICogQHBhcmFtICBCdWZmZXJTaXplIDB4MDEgLi4gMHhGRjogTnVtYmVyIG9mIDE2LWJpdCBhZGRyZXNzZXMgYWxsb2NhdGVkIHRvIHRoZSBjb2VmZmljaWVudCBidWZmZXIuCisgICogQHBhcmFtICBCdWZmZXJTaXplIE51bWJlciBvZiAxNi1iaXQgd29yZHMgYWxsb2NhdGVkIHRvIHRoZSBjb2VmZmljaWVudCBidWZmZXIuCisgICogICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiBNaW5fRGF0YT0weDAxIGFuZCBNYXhfRGF0YT0weEZGLgogICAqIEByZXR2YWwgTm9uZQogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRk1BQ19TZXRYMkJ1ZmZlclNpemUoRk1BQ19UeXBlRGVmICpGTUFDeCwgdWludDhfdCBCdWZmZXJTaXplKQpAQCAtMjUwLDcgKzI0OSw3IEBACiAgICogQGJyaWVmICBSZXR1cm4gWDIgYnVmZmVyIHNpemUuCiAgICogQHJtdG9sbCBYMkJVRkNGRyAgICAgWDJfQlVGX1NJWkUgICBMTF9GTUFDX0dldFgyQnVmZmVyU2l6ZQogICAqIEBwYXJhbSAgRk1BQ3ggRk1BQyBpbnN0YW5jZQotICAqIEByZXR2YWwgMHgwMSAuLiAweEZGOiBOdW1iZXIgb2YgMTYtYml0IGFkZHJlc3NlcyBhbGxvY2F0ZWQgdG8gdGhlIGNvZWZmaWNpZW50IGJ1ZmZlci4KKyAgKiBAcmV0dmFsIHVpbnQ4X3QgTnVtYmVyIG9mIDE2LWJpdCB3b3JkcyBhbGxvY2F0ZWQgdG8gdGhlIGNvZWZmaWNpZW50IGJ1ZmZlciAodmFsdWUgYmV0d2VlbiBNaW5fRGF0YT0weDAxIGFuZCBNYXhfRGF0YT0weEZGKS4KICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50OF90IExMX0ZNQUNfR2V0WDJCdWZmZXJTaXplKEZNQUNfVHlwZURlZiAqRk1BQ3gpCiB7CkBAIC0yNjEsNyArMjYwLDggQEAKICAgKiBAYnJpZWYgIENvbmZpZ3VyZSBYMiBiYXNlLgogICAqIEBybXRvbGwgWDJCVUZDRkcgICAgIFgyX0JBU0UgICAgICAgTExfRk1BQ19TZXRYMkJhc2UKICAgKiBAcGFyYW0gIEZNQUN4IEZNQUMgaW5zdGFuY2UKLSAgKiBAcGFyYW0gIEJhc2UgMHgwMCAuLiAweEZGOiBCYXNlIGFkZHJlc3Mgb2YgdGhlIGNvZWZmaWNpZW50IGJ1ZmZlciAoWDIpIHdpdGhpbiB0aGUgaW50ZXJuYWwgbWVtb3J5LgorICAqIEBwYXJhbSAgQmFzZSBCYXNlIGFkZHJlc3Mgb2YgdGhlIGNvZWZmaWNpZW50IGJ1ZmZlciAoWDIpIHdpdGhpbiB0aGUgaW50ZXJuYWwgbWVtb3J5LgorICAqICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgdmFsdWUgYmV0d2VlbiBNaW5fRGF0YT0weDAwIGFuZCBNYXhfRGF0YT0weEZGLgogICAqIEByZXR2YWwgTm9uZQogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRk1BQ19TZXRYMkJhc2UoRk1BQ19UeXBlRGVmICpGTUFDeCwgdWludDhfdCBCYXNlKQpAQCAtMjczLDcgKzI3Myw3IEBACiAgICogQGJyaWVmICBSZXR1cm4gWDIgYmFzZS4KICAgKiBAcm10b2xsIFgyQlVGQ0ZHICAgICBYMl9CQVNFICAgICAgIExMX0ZNQUNfR2V0WDJCYXNlCiAgICogQHBhcmFtICBGTUFDeCBGTUFDIGluc3RhbmNlCi0gICogQHJldHZhbCAweDAwIC4uIDB4RkY6IEJhc2UgYWRkcmVzcyBvZiB0aGUgY29lZmZpY2llbnQgYnVmZmVyIChYMikgd2l0aGluIHRoZSBpbnRlcm5hbCBtZW1vcnkuCisgICogQHJldHZhbCB1aW50OF90IEJhc2UgYWRkcmVzcyBvZiB0aGUgY29lZmZpY2llbnQgYnVmZmVyIChYMikgd2l0aGluIHRoZSBpbnRlcm5hbCBtZW1vcnkgKHZhbHVlIGJldHdlZW4gTWluX0RhdGE9MHgwMCBhbmQgTWF4X0RhdGE9MHhGRikuCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDhfdCBMTF9GTUFDX0dldFgyQmFzZShGTUFDX1R5cGVEZWYgKkZNQUN4KQogewpAQCAtMzAwLDcgKzMwMCw3IEBACiAgICogQGJyaWVmICBSZXR1cm4gWSBlbXB0eSB3YXRlcm1hcmsuCiAgICogQHJtdG9sbCBZQlVGQ0ZHICAgICAgRU1QVFlfV00gICAgICBMTF9GTUFDX0dldFlFbXB0eVdhdGVybWFyawogICAqIEBwYXJhbSAgRk1BQ3ggRk1BQyBpbnN0YW5jZQotICAqIEByZXR2YWwgUmV0dXJuZWQgdmFsdWUgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiBAcmV0dmFsIHVpbnQzMl90IFJldHVybmVkIHZhbHVlIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfRk1BQ19XTV8wX1RIUkVTSE9MRF8xCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRk1BQ19XTV8xX1RIUkVTSE9MRF8yCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRk1BQ19XTV8yX1RIUkVTSE9MRF80CkBAIC0zMTUsNyArMzE1LDggQEAKICAgKiBAYnJpZWYgIENvbmZpZ3VyZSBZIGJ1ZmZlciBzaXplLgogICAqIEBybXRvbGwgWUJVRkNGRyAgICAgIFlfQlVGX1NJWkUgICAgTExfRk1BQ19TZXRZQnVmZmVyU2l6ZQogICAqIEBwYXJhbSAgRk1BQ3ggRk1BQyBpbnN0YW5jZQotICAqIEBwYXJhbSAgQnVmZmVyU2l6ZSAweDAxIC4uIDB4RkY6IE51bWJlciBvZiAxNi1iaXQgYWRkcmVzc2VzIGFsbG9jYXRlZCB0byB0aGUgb3V0cHV0IGJ1ZmZlciAoaW5jbHVkaW5nIHRoZSBvcHRpb25hbCAiaGVhZHJvb20iKS4KKyAgKiBAcGFyYW0gIEJ1ZmZlclNpemUgTnVtYmVyIG9mIDE2LWJpdCB3b3JkcyBhbGxvY2F0ZWQgdG8gdGhlIG91dHB1dCBidWZmZXIgKGluY2x1ZGluZyB0aGUgb3B0aW9uYWwgImhlYWRyb29tIikuCisgICogICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiBNaW5fRGF0YT0weDAxIGFuZCBNYXhfRGF0YT0weEZGLgogICAqIEByZXR2YWwgTm9uZQogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRk1BQ19TZXRZQnVmZmVyU2l6ZShGTUFDX1R5cGVEZWYgKkZNQUN4LCB1aW50OF90IEJ1ZmZlclNpemUpCkBAIC0zMjcsNyArMzI4LDcgQEAKICAgKiBAYnJpZWYgIFJldHVybiBZIGJ1ZmZlciBzaXplLgogICAqIEBybXRvbGwgWUJVRkNGRyAgICAgIFlfQlVGX1NJWkUgICAgTExfRk1BQ19HZXRZQnVmZmVyU2l6ZQogICAqIEBwYXJhbSAgRk1BQ3ggRk1BQyBpbnN0YW5jZQotICAqIEByZXR2YWwgMHgwMSAuLiAweEZGOiBOdW1iZXIgb2YgMTYtYml0IGFkZHJlc3NlcyBhbGxvY2F0ZWQgdG8gdGhlIG91dHB1dCBidWZmZXIgKGluY2x1ZGluZyB0aGUgb3B0aW9uYWwgImhlYWRyb29tIikuCisgICogQHJldHZhbCB1aW50OF90IE51bWJlciBvZiAxNi1iaXQgd29yZHMgYWxsb2NhdGVkIHRvIHRoZSBvdXRwdXQgYnVmZmVyIChpbmNsdWRpbmcgdGhlIG9wdGlvbmFsICJoZWFkcm9vbSIgLSB2YWx1ZSBiZXR3ZWVuIE1pbl9EYXRhPTB4MDEgYW5kIE1heF9EYXRhPTB4RkYpLgogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQ4X3QgTExfRk1BQ19HZXRZQnVmZmVyU2l6ZShGTUFDX1R5cGVEZWYgKkZNQUN4KQogewpAQCAtMzM4LDcgKzMzOSw4IEBACiAgICogQGJyaWVmICBDb25maWd1cmUgWSBiYXNlLgogICAqIEBybXRvbGwgWUJVRkNGRyAgICAgIFlfQkFTRSAgICAgICAgTExfRk1BQ19TZXRZQmFzZQogICAqIEBwYXJhbSAgRk1BQ3ggRk1BQyBpbnN0YW5jZQotICAqIEBwYXJhbSAgQmFzZSAweDAwIC4uIDB4RkY6IEJhc2UgYWRkcmVzcyBvZiB0aGUgb3V0cHV0IGJ1ZmZlciAoWSkgd2l0aGluIHRoZSBpbnRlcm5hbCBtZW1vcnkuCisgICogQHBhcmFtICBCYXNlIEJhc2UgYWRkcmVzcyBvZiB0aGUgb3V0cHV0IGJ1ZmZlciAoWSkgd2l0aGluIHRoZSBpbnRlcm5hbCBtZW1vcnkuCisgICogICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSB2YWx1ZSBiZXR3ZWVuIE1pbl9EYXRhPTB4MDAgYW5kIE1heF9EYXRhPTB4RkYuCiAgICogQHJldHZhbCBOb25lCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9GTUFDX1NldFlCYXNlKEZNQUNfVHlwZURlZiAqRk1BQ3gsIHVpbnQ4X3QgQmFzZSkKQEAgLTM1MCw3ICszNTIsNyBAQAogICAqIEBicmllZiAgUmV0dXJuIFkgYmFzZS4KICAgKiBAcm10b2xsIFlCVUZDRkcgICAgICBZX0JBU0UgICAgICAgIExMX0ZNQUNfR2V0WUJhc2UKICAgKiBAcGFyYW0gIEZNQUN4IEZNQUMgaW5zdGFuY2UKLSAgKiBAcmV0dmFsIDB4MDAgLi4gMHhGRjogQmFzZSBhZGRyZXNzIG9mIHRoZSBvdXRwdXQgYnVmZmVyIChZKSB3aXRoaW4gdGhlIGludGVybmFsIG1lbW9yeS4KKyAgKiBAcmV0dmFsIHVpbnQ4X3QgQmFzZSBhZGRyZXNzIG9mIHRoZSBvdXRwdXQgYnVmZmVyIChZKSB3aXRoaW4gdGhlIGludGVybmFsIG1lbW9yeSAodmFsdWUgYmV0d2VlbiBNaW5fRGF0YT0weDAwIGFuZCBNYXhfRGF0YT0weEZGKS4KICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50OF90IExMX0ZNQUNfR2V0WUJhc2UoRk1BQ19UeXBlRGVmICpGTUFDeCkKIHsKQEAgLTM4Myw3ICszODUsNyBAQAogICAqIEBicmllZiAgQ2hlY2sgdGhlIHN0YXRlIG9mIEZNQUMgcHJvY2Vzc2luZy4KICAgKiBAcm10b2xsIFBBUkFNICAgICAgICBTVEFSVCAgICAgICAgIExMX0ZNQUNfSXNFbmFibGVkU3RhcnQKICAgKiBAcGFyYW0gIEZNQUN4IEZNQUMgaW5zdGFuY2UKLSAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KKyAgKiBAcmV0dmFsIHVpbnQzMl90IFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9GTUFDX0lzRW5hYmxlZFN0YXJ0KEZNQUNfVHlwZURlZiAqRk1BQ3gpCiB7CkBAIC00MTEsNyArNDEzLDcgQEAKICAgKiBAYnJpZWYgIFJldHVybiBmdW5jdGlvbi4KICAgKiBAcm10b2xsIFBBUkFNICAgICAgICBGVU5DICAgICAgICAgIExMX0ZNQUNfR2V0RnVuY3Rpb24KICAgKiBAcGFyYW0gIEZNQUN4IEZNQUMgaW5zdGFuY2UKLSAgKiBAcmV0dmFsIFJldHVybmVkIHZhbHVlIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogQHJldHZhbCB1aW50MzJfdCBSZXR1cm5lZCB2YWx1ZSBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0ZNQUNfRlVOQ19MT0FEX1gxCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRk1BQ19GVU5DX0xPQURfWDIKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9GTUFDX0ZVTkNfTE9BRF9ZCkBAIC00MjcsNyArNDI5LDggQEAKICAgKiBAYnJpZWYgIENvbmZpZ3VyZSBpbnB1dCBwYXJhbWV0ZXIgUi4KICAgKiBAcm10b2xsIFBBUkFNICAgICAgICBSICAgICAgICAgICAgIExMX0ZNQUNfU2V0UGFyYW1SCiAgICogQHBhcmFtICBGTUFDeCBGTUFDIGluc3RhbmNlCi0gICogQHBhcmFtICBQYXJhbSAweDAwIC4uIDB4RkY6IFBhcmFtZXRlciBSIChnYWluLCBldGMuKS4KKyAgKiBAcGFyYW0gIFBhcmFtIFBhcmFtZXRlciBSIChnYWluLCBldGMuKS4KKyAgKiAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSB2YWx1ZSBiZXR3ZWVuIE1pbl9EYXRhPTB4MDAgYW5kIE1heF9EYXRhPTB4RkYuCiAgICogQHJldHZhbCBOb25lCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9GTUFDX1NldFBhcmFtUihGTUFDX1R5cGVEZWYgKkZNQUN4LCB1aW50OF90IFBhcmFtKQpAQCAtNDM5LDcgKzQ0Miw3IEBACiAgICogQGJyaWVmICBSZXR1cm4gaW5wdXQgcGFyYW1ldGVyIFIuCiAgICogQHJtdG9sbCBQQVJBTSAgICAgICAgUiAgICAgICAgICAgICBMTF9GTUFDX0dldFBhcmFtUgogICAqIEBwYXJhbSAgRk1BQ3ggRk1BQyBpbnN0YW5jZQotICAqIEByZXR2YWwgMHgwMCAuLiAweEZGOiBQYXJhbWV0ZXIgUiAoZ2FpbiwgZXRjLikuCisgICogQHJldHZhbCB1aW50OF90IFBhcmFtZXRlciBSIChnYWluLCBldGMuKSAodmFsdWUgYmV0d2VlbiBNaW5fRGF0YT0weDAwIGFuZCBNYXhfRGF0YT0weEZGKS4KICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50OF90IExMX0ZNQUNfR2V0UGFyYW1SKEZNQUNfVHlwZURlZiAqRk1BQ3gpCiB7CkBAIC00NTAsNyArNDUzLDggQEAKICAgKiBAYnJpZWYgIENvbmZpZ3VyZSBpbnB1dCBwYXJhbWV0ZXIgUS4KICAgKiBAcm10b2xsIFBBUkFNICAgICAgICBRICAgICAgICAgICAgIExMX0ZNQUNfU2V0UGFyYW1RCiAgICogQHBhcmFtICBGTUFDeCBGTUFDIGluc3RhbmNlCi0gICogQHBhcmFtICBQYXJhbSAweDAwIC4uIDB4RkY6IFBhcmFtZXRlciBRICh2ZWN0b3IgbGVuZ3RoLCBldGMuKS4KKyAgKiBAcGFyYW0gIFBhcmFtIFBhcmFtZXRlciBRICh2ZWN0b3IgbGVuZ3RoLCBldGMuKS4KKyAgKiAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSB2YWx1ZSBiZXR3ZWVuIE1pbl9EYXRhPTB4MDAgYW5kIE1heF9EYXRhPTB4RkYuCiAgICogQHJldHZhbCBOb25lCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9GTUFDX1NldFBhcmFtUShGTUFDX1R5cGVEZWYgKkZNQUN4LCB1aW50OF90IFBhcmFtKQpAQCAtNDYyLDcgKzQ2Niw3IEBACiAgICogQGJyaWVmICBSZXR1cm4gaW5wdXQgcGFyYW1ldGVyIFEuCiAgICogQHJtdG9sbCBQQVJBTSAgICAgICAgUSAgICAgICAgICAgICBMTF9GTUFDX0dldFBhcmFtUQogICAqIEBwYXJhbSAgRk1BQ3ggRk1BQyBpbnN0YW5jZQotICAqIEByZXR2YWwgMHgwMCAuLiAweEZGOiBQYXJhbWV0ZXIgUSAodmVjdG9yIGxlbmd0aCwgZXRjLikuCisgICogQHJldHZhbCB1aW50OF90IFBhcmFtZXRlciBRICh2ZWN0b3IgbGVuZ3RoLCBldGMuKSAodmFsdWUgYmV0d2VlbiBNaW5fRGF0YT0weDAwIGFuZCBNYXhfRGF0YT0weEZGKS4KICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50OF90IExMX0ZNQUNfR2V0UGFyYW1RKEZNQUNfVHlwZURlZiAqRk1BQ3gpCiB7CkBAIC00NzMsMjMgKzQ3NywyNCBAQAogICAqIEBicmllZiAgQ29uZmlndXJlIGlucHV0IHBhcmFtZXRlciBQLgogICAqIEBybXRvbGwgUEFSQU0gICAgICAgIFAgICAgICAgICAgICAgTExfRk1BQ19TZXRQYXJhbVAKICAgKiBAcGFyYW0gIEZNQUN4IEZNQUMgaW5zdGFuY2UKLSAgKiBAcGFyYW0gIFBhcmFtIDB4MDAgLi4gMHhGRjogUGFyYW1ldGVyIFAgKHZlY3RvciBsZW5ndGgsIG51bWJlciBvZiBmaWx0ZXIgdGFwcywgZXRjLikuCisgICogQHBhcmFtICBQYXJhbSBQYXJhbWV0ZXIgUCAodmVjdG9yIGxlbmd0aCwgbnVtYmVyIG9mIGZpbHRlciB0YXBzLCBldGMuKS4KKyAgKiAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSB2YWx1ZSBiZXR3ZWVuIE1pbl9EYXRhPTB4MDAgYW5kIE1heF9EYXRhPTB4RkYuCiAgICogQHJldHZhbCBOb25lCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9GTUFDX1NldFBhcmFtUChGTUFDX1R5cGVEZWYgKkZNQUN4LCB1aW50OF90IFBhcmFtKQogewotICBNT0RJRllfUkVHKEZNQUN4LT5QQVJBTSwgRk1BQ19QQVJBTV9QLCAoKHVpbnQzMl90KVBhcmFtKSA8PCBGTUFDX1BBUkFNX1BfUG9zKTsKKyAgTU9ESUZZX1JFRyhGTUFDeC0+UEFSQU0sIEZNQUNfUEFSQU1fUCwgKCh1aW50MzJfdClQYXJhbSkpOwogfQogCiAvKioKICAgKiBAYnJpZWYgIFJldHVybiBpbnB1dCBwYXJhbWV0ZXIgUC4KICAgKiBAcm10b2xsIFBBUkFNICAgICAgICBQICAgICAgICAgICAgIExMX0ZNQUNfR2V0UGFyYW1QCiAgICogQHBhcmFtICBGTUFDeCBGTUFDIGluc3RhbmNlCi0gICogQHJldHZhbCAweDAwIC4uIDB4RkY6IFBhcmFtZXRlciBQICh2ZWN0b3IgbGVuZ3RoLCBudW1iZXIgb2YgZmlsdGVyIHRhcHMsIGV0Yy4pLgorICAqIEByZXR2YWwgdWludDhfdCBQYXJhbWV0ZXIgUCAodmVjdG9yIGxlbmd0aCwgbnVtYmVyIG9mIGZpbHRlciB0YXBzLCBldGMuKSAodmFsdWUgYmV0d2VlbiBNaW5fRGF0YT0weDAwIGFuZCBNYXhfRGF0YT0weEZGKS4KICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50OF90IExMX0ZNQUNfR2V0UGFyYW1QKEZNQUNfVHlwZURlZiAqRk1BQ3gpCiB7Ci0gIHJldHVybiAodWludDhfdCkoUkVBRF9CSVQoRk1BQ3gtPlBBUkFNLCBGTUFDX1BBUkFNX1ApID4+IEZNQUNfUEFSQU1fUF9Qb3MpOworICByZXR1cm4gKHVpbnQ4X3QpKFJFQURfQklUKEZNQUN4LT5QQVJBTSwgRk1BQ19QQVJBTV9QKSk7CiB9CiAKIC8qKgpAQCAtNTEyLDIxICs1MTcsMTAgQEAKIH0KIAogLyoqCi0gICogQGJyaWVmICBJbnRlcnJ1cHQgdGhlIEZNQUMgcmVzZXQuCi0gICogQHJtdG9sbCBDUiAgICAgICAgICAgUkVTRVQgICAgICAgICBMTF9GTUFDX0Rpc2FibGVSZXNldAotICAqIEBwYXJhbSAgRk1BQ3ggRk1BQyBpbnN0YW5jZQotICAqIEByZXR2YWwgTm9uZQotICAqLwotX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRk1BQ19EaXNhYmxlUmVzZXQoRk1BQ19UeXBlRGVmICpGTUFDeCkKLXsKLSAgQ0xFQVJfQklUKEZNQUN4LT5DUiwgRk1BQ19DUl9SRVNFVCk7Ci19Ci0KLS8qKgogICAqIEBicmllZiAgQ2hlY2sgdGhlIHN0YXRlIG9mIHRoZSBGTUFDIHJlc2V0LgogICAqIEBybXRvbGwgQ1IgICAgICAgICAgIFJFU0VUICAgICAgICAgTExfRk1BQ19Jc0VuYWJsZWRSZXNldAogICAqIEBwYXJhbSAgRk1BQ3ggRk1BQyBpbnN0YW5jZQotICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgorICAqIEByZXR2YWwgdWludDMyX3QgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0ZNQUNfSXNFbmFibGVkUmVzZXQoRk1BQ19UeXBlRGVmICpGTUFDeCkKIHsKQEAgLTU2Nyw3ICs1NjEsNyBAQAogICAqIEBicmllZiAgQ2hlY2sgQ2xpcHBpbmcgU3RhdGUuCiAgICogQHJtdG9sbCBDUiAgICAgICAgICAgQ0xJUEVOICAgICAgICBMTF9GTUFDX0lzRW5hYmxlZENsaXBwaW5nCiAgICogQHBhcmFtICBGTUFDeCBGTUFDIGluc3RhbmNlCi0gICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCisgICogQHJldHZhbCB1aW50MzJfdCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfRk1BQ19Jc0VuYWJsZWRDbGlwcGluZyhGTUFDX1R5cGVEZWYgKkZNQUN4KQogewpAQCAtNjA4LDcgKzYwMiw3IEBACiAgICogQGJyaWVmICBDaGVjayBGTUFDIERNQSB3cml0ZSBjaGFubmVsIHJlcXVlc3Qgc3RhdGUuCiAgICogQHJtdG9sbCBDUiAgICAgICAgICAgRE1BV0VOICAgICAgICBMTF9GTUFDX0lzRW5hYmxlZERNQVJlcV9XUklURQogICAqIEBwYXJhbSAgRk1BQ3ggRk1BQyBpbnN0YW5jZQotICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgorICAqIEByZXR2YWwgdWludDMyX3QgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0ZNQUNfSXNFbmFibGVkRE1BUmVxX1dSSVRFKEZNQUNfVHlwZURlZiAqRk1BQ3gpCiB7CkBAIC02NDEsNyArNjM1LDcgQEAKICAgKiBAYnJpZWYgIENoZWNrIEZNQUMgRE1BIHJlYWQgY2hhbm5lbCByZXF1ZXN0IHN0YXRlLgogICAqIEBybXRvbGwgQ1IgICAgICAgICAgIERNQVJFTiAgICAgICAgTExfRk1BQ19Jc0VuYWJsZWRETUFSZXFfUkVBRAogICAqIEBwYXJhbSAgRk1BQ3ggRk1BQyBpbnN0YW5jZQotICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgorICAqIEByZXR2YWwgdWludDMyX3QgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0ZNQUNfSXNFbmFibGVkRE1BUmVxX1JFQUQoRk1BQ19UeXBlRGVmICpGTUFDeCkKIHsKQEAgLTY4Miw3ICs2NzYsNyBAQAogICAqIEBicmllZiAgQ2hlY2sgRk1BQyBzYXR1cmF0aW9uIGVycm9yIGludGVycnVwdCBzdGF0ZS4KICAgKiBAcm10b2xsIENSICAgICAgICAgICBTQVRJRU4gICAgICAgIExMX0ZNQUNfSXNFbmFibGVkSVRfU0FUCiAgICogQHBhcmFtICBGTUFDeCBGTUFDIGluc3RhbmNlCi0gICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCisgICogQHJldHZhbCB1aW50MzJfdCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfRk1BQ19Jc0VuYWJsZWRJVF9TQVQoRk1BQ19UeXBlRGVmICpGTUFDeCkKIHsKQEAgLTcxNSw3ICs3MDksNyBAQAogICAqIEBicmllZiAgQ2hlY2sgRk1BQyB1bmRlcmZsb3cgZXJyb3IgaW50ZXJydXB0IHN0YXRlLgogICAqIEBybXRvbGwgQ1IgICAgICAgICAgIFVORkxJRU4gICAgICAgTExfRk1BQ19Jc0VuYWJsZWRJVF9VTkZMCiAgICogQHBhcmFtICBGTUFDeCBGTUFDIGluc3RhbmNlCi0gICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCisgICogQHJldHZhbCB1aW50MzJfdCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfRk1BQ19Jc0VuYWJsZWRJVF9VTkZMKEZNQUNfVHlwZURlZiAqRk1BQ3gpCiB7CkBAIC03NDgsNyArNzQyLDcgQEAKICAgKiBAYnJpZWYgIENoZWNrIEZNQUMgb3ZlcmZsb3cgZXJyb3IgaW50ZXJydXB0IHN0YXRlLgogICAqIEBybXRvbGwgQ1IgICAgICAgICAgIE9WRkxJRU4gICAgICAgTExfRk1BQ19Jc0VuYWJsZWRJVF9PVkZMCiAgICogQHBhcmFtICBGTUFDeCBGTUFDIGluc3RhbmNlCi0gICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCisgICogQHJldHZhbCB1aW50MzJfdCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfRk1BQ19Jc0VuYWJsZWRJVF9PVkZMKEZNQUNfVHlwZURlZiAqRk1BQ3gpCiB7CkBAIC03ODEsNyArNzc1LDcgQEAKICAgKiBAYnJpZWYgIENoZWNrIEZNQUMgd3JpdGUgaW50ZXJydXB0IHN0YXRlLgogICAqIEBybXRvbGwgQ1IgICAgICAgICAgIFdJRU4gICAgICAgICAgTExfRk1BQ19Jc0VuYWJsZWRJVF9XUgogICAqIEBwYXJhbSAgRk1BQ3ggRk1BQyBpbnN0YW5jZQotICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgorICAqIEByZXR2YWwgdWludDMyX3QgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0ZNQUNfSXNFbmFibGVkSVRfV1IoRk1BQ19UeXBlRGVmICpGTUFDeCkKIHsKQEAgLTgxNCw3ICs4MDgsNyBAQAogICAqIEBicmllZiAgQ2hlY2sgRk1BQyByZWFkIGludGVycnVwdCBzdGF0ZS4KICAgKiBAcm10b2xsIENSICAgICAgICAgICBSSUVOICAgICAgICAgIExMX0ZNQUNfSXNFbmFibGVkSVRfUkQKICAgKiBAcGFyYW0gIEZNQUN4IEZNQUMgaW5zdGFuY2UKLSAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KKyAgKiBAcmV0dmFsIHVpbnQzMl90IFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9GTUFDX0lzRW5hYmxlZElUX1JEKEZNQUNfVHlwZURlZiAqRk1BQ3gpCiB7CkBAIC04MzMsNyArODI3LDcgQEAKICAgKiBAYnJpZWYgIENoZWNrIEZNQUMgc2F0dXJhdGlvbiBlcnJvciBmbGFnIHN0YXRlLgogICAqIEBybXRvbGwgU1IgICAgICAgICAgIFNBVCAgICAgICAgICAgTExfRk1BQ19Jc0FjdGl2ZUZsYWdfU0FUCiAgICogQHBhcmFtICBGTUFDeCBGTUFDIGluc3RhbmNlCi0gICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCisgICogQHJldHZhbCB1aW50MzJfdCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfRk1BQ19Jc0FjdGl2ZUZsYWdfU0FUKEZNQUNfVHlwZURlZiAqRk1BQ3gpCiB7CkBAIC04NDQsNyArODM4LDcgQEAKICAgKiBAYnJpZWYgIENoZWNrIEZNQUMgdW5kZXJmbG93IGVycm9yIGZsYWcgc3RhdGUuCiAgICogQHJtdG9sbCBTUiAgICAgICAgICAgVU5GTCAgICAgICAgICBMTF9GTUFDX0lzQWN0aXZlRmxhZ19VTkZMCiAgICogQHBhcmFtICBGTUFDeCBGTUFDIGluc3RhbmNlCi0gICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCisgICogQHJldHZhbCB1aW50MzJfdCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfRk1BQ19Jc0FjdGl2ZUZsYWdfVU5GTChGTUFDX1R5cGVEZWYgKkZNQUN4KQogewpAQCAtODU1LDcgKzg0OSw3IEBACiAgICogQGJyaWVmICBDaGVjayBGTUFDIG92ZXJmbG93IGVycm9yIGZsYWcgc3RhdGUuCiAgICogQHJtdG9sbCBTUiAgICAgICAgICAgT1ZGTCAgICAgICAgICBMTF9GTUFDX0lzQWN0aXZlRmxhZ19PVkZMCiAgICogQHBhcmFtICBGTUFDeCBGTUFDIGluc3RhbmNlCi0gICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCisgICogQHJldHZhbCB1aW50MzJfdCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfRk1BQ19Jc0FjdGl2ZUZsYWdfT1ZGTChGTUFDX1R5cGVEZWYgKkZNQUN4KQogewpAQCAtODY2LDcgKzg2MCw3IEBACiAgICogQGJyaWVmICBDaGVjayBGTUFDIFgxIGJ1ZmZlciBmdWxsIGZsYWcgc3RhdGUuCiAgICogQHJtdG9sbCBTUiAgICAgICAgICAgWDFGVUxMICAgICAgICBMTF9GTUFDX0lzQWN0aXZlRmxhZ19YMUZVTEwKICAgKiBAcGFyYW0gIEZNQUN4IEZNQUMgaW5zdGFuY2UKLSAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KKyAgKiBAcmV0dmFsIHVpbnQzMl90IFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9GTUFDX0lzQWN0aXZlRmxhZ19YMUZVTEwoRk1BQ19UeXBlRGVmICpGTUFDeCkKIHsKQEAgLTg3Nyw3ICs4NzEsNyBAQAogICAqIEBicmllZiAgQ2hlY2sgRk1BQyBZIGJ1ZmZlciBlbXB0eSBmbGFnIHN0YXRlLgogICAqIEBybXRvbGwgU1IgICAgICAgICAgIFlFTVBUWSAgICAgICAgTExfRk1BQ19Jc0FjdGl2ZUZsYWdfWUVNUFRZCiAgICogQHBhcmFtICBGTUFDeCBGTUFDIGluc3RhbmNlCi0gICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCisgICogQHJldHZhbCB1aW50MzJfdCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfRk1BQ19Jc0FjdGl2ZUZsYWdfWUVNUFRZKEZNQUNfVHlwZURlZiAqRk1BQ3gpCiB7CkBAIC04OTYsNyArODkwLDggQEAKICAgKiBAYnJpZWYgIFdyaXRlIDE2LWJpdCBpbnB1dCBkYXRhIGZvciB0aGUgRk1BQyBwcm9jZXNzaW5nLgogICAqIEBybXRvbGwgV0RBVEEgICAgICAgIFdEQVRBICAgICAgICAgTExfRk1BQ19Xcml0ZURhdGEKICAgKiBAcGFyYW0gIEZNQUN4IEZNQUMgaW5zdGFuY2UKLSAgKiBAcGFyYW0gIEluRGF0YSAweDAwMDAgLi4gMHhGRkZGOiAxNi1iaXQgdmFsdWUgdG8gYmUgcHJvdmlkZWQgYXMgaW5wdXQgZGF0YSBmb3IgRk1BQyBwcm9jZXNzaW5nLgorICAqIEBwYXJhbSAgSW5EYXRhIDE2LWJpdCB2YWx1ZSB0byBiZSBwcm92aWRlZCBhcyBpbnB1dCBkYXRhIGZvciBGTUFDIHByb2Nlc3NpbmcuCisgICogICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIE1pbl9EYXRhPTB4MDAwMCBhbmQgTWF4X0RhdGE9MHhGRkZGLgogICAqIEByZXR2YWwgTm9uZQogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRk1BQ19Xcml0ZURhdGEoRk1BQ19UeXBlRGVmICpGTUFDeCwgdWludDE2X3QgSW5EYXRhKQpAQCAtOTA4LDcgKzkwMyw3IEBACiAgICogQGJyaWVmICBSZXR1cm4gMTYtYml0IG91dHB1dCBkYXRhIG9mIEZNQUMgcHJvY2Vzc2luZy4KICAgKiBAcm10b2xsIFJEQVRBICAgICAgICBSREFUQSAgICAgICAgIExMX0ZNQUNfUmVhZERhdGEKICAgKiBAcGFyYW0gIEZNQUN4IEZNQUMgaW5zdGFuY2UKLSAgKiBAcmV0dmFsIDB4MDAwMCAuLiAweEZGRkY6IDE2LWJpdCBvdXRwdXQgZGF0YSBvZiBGTUFDIHByb2Nlc3NpbmcuCisgICogQHJldHZhbCB1aW50MTZfdCAxNi1iaXQgb3V0cHV0IGRhdGEgb2YgRk1BQyBwcm9jZXNzaW5nICh2YWx1ZSBiZXR3ZWVuIE1pbl9EYXRhPTB4MDAwMCBhbmQgTWF4X0RhdGE9MHhGRkZGKS4KICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MTZfdCBMTF9GTUFDX1JlYWREYXRhKEZNQUNfVHlwZURlZiAqRk1BQ3gpCiB7CkBAIC05MzQsOCArOTI5LDEwIEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfRk1BQ19XTV8xX1RIUkVTSE9MRF8yCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRk1BQ19XTV8yX1RIUkVTSE9MRF80CiAgICogICAgICAgICBAYXJnIEByZWYgTExfRk1BQ19XTV8zX1RIUkVTSE9MRF84Ci0gICogQHBhcmFtICBCYXNlIDB4MDAgLi4gMHhGRjogQmFzZSBhZGRyZXNzIG9mIHRoZSBpbnB1dCBidWZmZXIgKFgxKSB3aXRoaW4gdGhlIGludGVybmFsIG1lbW9yeS4KLSAgKiBAcGFyYW0gIEJ1ZmZlclNpemUgMHgwMSAuLiAweEZGOiBOdW1iZXIgb2YgMTYtYml0IGFkZHJlc3NlcyBhbGxvY2F0ZWQgdG8gdGhlIGlucHV0IGJ1ZmZlciAoaW5jbHVkaW5nIHRoZSBvcHRpb25hbCAiaGVhZHJvb20iKS4KKyAgKiBAcGFyYW0gIEJhc2UgQmFzZSBhZGRyZXNzIG9mIHRoZSBpbnB1dCBidWZmZXIgKFgxKSB3aXRoaW4gdGhlIGludGVybmFsIG1lbW9yeS4KKyAgKiAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIHZhbHVlIGJldHdlZW4gTWluX0RhdGE9MHgwMCBhbmQgTWF4X0RhdGE9MHhGRi4KKyAgKiBAcGFyYW0gIEJ1ZmZlclNpemUgTnVtYmVyIG9mIDE2LWJpdCB3b3JkcyBhbGxvY2F0ZWQgdG8gdGhlIGlucHV0IGJ1ZmZlciAoaW5jbHVkaW5nIHRoZSBvcHRpb25hbCAiaGVhZHJvb20iKS4KKyAgKiAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIE1pbl9EYXRhPTB4MDEgYW5kIE1heF9EYXRhPTB4RkYuCiAgICogQHJldHZhbCBOb25lCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9GTUFDX0NvbmZpZ1gxKEZNQUNfVHlwZURlZiAqRk1BQ3gsIHVpbnQzMl90IFdhdGVybWFyaywgdWludDhfdCBCYXNlLCB1aW50OF90IEJ1ZmZlclNpemUpCkBAIC05NDksOCArOTQ2LDEwIEBACiAgICogQHJtdG9sbCBYMkJVRkNGRyAgICAgWDJfQkFTRSAgICAgICBMTF9GTUFDX0NvbmZpZ1gyXG4KICAgKiAgICAgICAgIFgyQlVGQ0ZHICAgICBYMl9CVUZfU0laRSAgIExMX0ZNQUNfQ29uZmlnWDIKICAgKiBAcGFyYW0gIEZNQUN4IEZNQUMgaW5zdGFuY2UKLSAgKiBAcGFyYW0gIEJhc2UgMHgwMCAuLiAweEZGOiBCYXNlIGFkZHJlc3Mgb2YgdGhlIGNvZWZmaWNpZW50IGJ1ZmZlciAoWDIpIHdpdGhpbiB0aGUgaW50ZXJuYWwgbWVtb3J5LgotICAqIEBwYXJhbSAgQnVmZmVyU2l6ZSAweDAxIC4uIDB4RkY6IE51bWJlciBvZiAxNi1iaXQgYWRkcmVzc2VzIGFsbG9jYXRlZCB0byB0aGUgY29lZmZpY2llbnQgYnVmZmVyLgorICAqIEBwYXJhbSAgQmFzZSBCYXNlIGFkZHJlc3Mgb2YgdGhlIGNvZWZmaWNpZW50IGJ1ZmZlciAoWDIpIHdpdGhpbiB0aGUgaW50ZXJuYWwgbWVtb3J5LgorICAqICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgdmFsdWUgYmV0d2VlbiBNaW5fRGF0YT0weDAwIGFuZCBNYXhfRGF0YT0weEZGLgorICAqIEBwYXJhbSAgQnVmZmVyU2l6ZSBOdW1iZXIgb2YgMTYtYml0IHdvcmRzIGFsbG9jYXRlZCB0byB0aGUgY29lZmZpY2llbnQgYnVmZmVyLgorICAqICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGE9MHgwMSBhbmQgTWF4X0RhdGE9MHhGRi4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0ZNQUNfQ29uZmlnWDIoRk1BQ19UeXBlRGVmICpGTUFDeCwgdWludDhfdCBCYXNlLCB1aW50OF90IEJ1ZmZlclNpemUpCkBAIC05NzAsOCArOTY5LDEwIEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfRk1BQ19XTV8xX1RIUkVTSE9MRF8yCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRk1BQ19XTV8yX1RIUkVTSE9MRF80CiAgICogICAgICAgICBAYXJnIEByZWYgTExfRk1BQ19XTV8zX1RIUkVTSE9MRF84Ci0gICogQHBhcmFtICBCYXNlIDB4MDAgLi4gMHhGRjogQmFzZSBhZGRyZXNzIG9mIHRoZSBvdXRwdXQgYnVmZmVyIChZKSB3aXRoaW4gdGhlIGludGVybmFsIG1lbW9yeS4KLSAgKiBAcGFyYW0gIEJ1ZmZlclNpemUgMHgwMSAuLiAweEZGOiBOdW1iZXIgb2YgMTYtYml0IGFkZHJlc3NlcyBhbGxvY2F0ZWQgdG8gdGhlIG91dHB1dCBidWZmZXIgKGluY2x1ZGluZyB0aGUgb3B0aW9uYWwgImhlYWRyb29tIikuCisgICogQHBhcmFtICBCYXNlIEJhc2UgYWRkcmVzcyBvZiB0aGUgb3V0cHV0IGJ1ZmZlciAoWSkgd2l0aGluIHRoZSBpbnRlcm5hbCBtZW1vcnkuCisgICogICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSB2YWx1ZSBiZXR3ZWVuIE1pbl9EYXRhPTB4MDAgYW5kIE1heF9EYXRhPTB4RkYuCisgICogQHBhcmFtICBCdWZmZXJTaXplIE51bWJlciBvZiAxNi1iaXQgd29yZHMgYWxsb2NhdGVkIHRvIHRoZSBvdXRwdXQgYnVmZmVyIChpbmNsdWRpbmcgdGhlIG9wdGlvbmFsICJoZWFkcm9vbSIpLgorICAqICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGE9MHgwMSBhbmQgTWF4X0RhdGE9MHhGRi4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0ZNQUNfQ29uZmlnWShGTUFDX1R5cGVEZWYgKkZNQUN4LCB1aW50MzJfdCBXYXRlcm1hcmssIHVpbnQ4X3QgQmFzZSwgdWludDhfdCBCdWZmZXJTaXplKQpAQCAtOTg4LDE2ICs5ODksMjEgQEAKICAgKiAgICAgICAgIFBBUkFNICAgICAgICBRICAgICAgICAgICAgIExMX0ZNQUNfQ29uZmlnRnVuY1xuCiAgICogICAgICAgICBQQVJBTSAgICAgICAgUiAgICAgICAgICAgICBMTF9GTUFDX0NvbmZpZ0Z1bmMKICAgKiBAcGFyYW0gIEZNQUN4IEZNQUMgaW5zdGFuY2UKLSAgKiBAcGFyYW0gIFN0YXJ0IDB4MDAgLi4gMHgwMTogRW5hYmxlIG9yIGRpc2FibGUgRk1BQyBwcm9jZXNzaW5nLgorICAqIEBwYXJhbSAgU3RhcnQgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9GTUFDX1BST0NFU1NJTkdfU1RPUAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0ZNQUNfUFJPQ0VTU0lOR19TVEFSVAogICAqIEBwYXJhbSAgRnVuY3Rpb24gVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9GTUFDX0ZVTkNfTE9BRF9YMQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0ZNQUNfRlVOQ19MT0FEX1gyCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRk1BQ19GVU5DX0xPQURfWQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0ZNQUNfRlVOQ19DT05WT19GSVIKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9GTUFDX0ZVTkNfSUlSX0RJUkVDVF9GT1JNXzEKLSAgKiBAcGFyYW0gIFBhcmFtUCAweDAwIC4uIDB4RkY6IFBhcmFtZXRlciBQICh2ZWN0b3IgbGVuZ3RoLCBudW1iZXIgb2YgZmlsdGVyIHRhcHMsIGV0Yy4pLgotICAqIEBwYXJhbSAgUGFyYW1RIDB4MDAgLi4gMHhGRjogUGFyYW1ldGVyIFEgKHZlY3RvciBsZW5ndGgsIGV0Yy4pLgotICAqIEBwYXJhbSAgUGFyYW1SIDB4MDAgLi4gMHhGRjogUGFyYW1ldGVyIFIgKGdhaW4sIGV0Yy4pLgorICAqIEBwYXJhbSAgUGFyYW1QIFBhcmFtZXRlciBQICh2ZWN0b3IgbGVuZ3RoLCBudW1iZXIgb2YgZmlsdGVyIHRhcHMsIGV0Yy4pLgorICAqICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSB2YWx1ZSBiZXR3ZWVuIE1pbl9EYXRhPTB4MDAgYW5kIE1heF9EYXRhPTB4RkYuCisgICogQHBhcmFtICBQYXJhbVEgUGFyYW1ldGVyIFEgKHZlY3RvciBsZW5ndGgsIGV0Yy4pLgorICAqICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSB2YWx1ZSBiZXR3ZWVuIE1pbl9EYXRhPTB4MDAgYW5kIE1heF9EYXRhPTB4RkYuCisgICogQHBhcmFtICBQYXJhbVIgUGFyYW1ldGVyIFIgKGdhaW4sIGV0Yy4pLgorICAqICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSB2YWx1ZSBiZXR3ZWVuIE1pbl9EYXRhPTB4MDAgYW5kIE1heF9EYXRhPTB4RkYuCiAgICogQHJldHZhbCBOb25lCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9GTUFDX0NvbmZpZ0Z1bmMoRk1BQ19UeXBlRGVmICpGTUFDeCwgdWludDhfdCBTdGFydCwgdWludDMyX3QgRnVuY3Rpb24sIHVpbnQ4X3QgUGFyYW1QLApkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZzR4eF9sbF9ocnRpbS5oIGIvSW5jL3N0bTMyZzR4eF9sbF9ocnRpbS5oCmluZGV4IDk4NjVmMWUuLjk0YzEzNWYgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmc0eHhfbGxfaHJ0aW0uaAorKysgYi9JbmMvc3RtMzJnNHh4X2xsX2hydGltLmgKQEAgLTEyNDgsNyArMTI0OCw3IEBACiAjZGVmaW5lIExMX0hSVElNX0VFRkxUUl9XSU5ET1dJTkdDTVAyICAgICAgICAgICAgICAgICAgIChIUlRJTV9FRUZSMV9FRTFGTFRSXzMgfCBIUlRJTV9FRUZSMV9FRTFGTFRSXzIgfCBIUlRJTV9FRUZSMV9FRTFGTFRSXzApICAgLyohPCBXaW5kb3dpbmcgZnJvbSBjb3VudGVyIHJlc2V0L3JvbGwtb3ZlciB0byBDb21wYXJlIDJVICovCiAjZGVmaW5lIExMX0hSVElNX0VFRkxUUl9XSU5ET1dJTkdDTVAzICAgICAgICAgICAgICAgICAgIChIUlRJTV9FRUZSMV9FRTFGTFRSXzMgfCBIUlRJTV9FRUZSMV9FRTFGTFRSXzIgfCBIUlRJTV9FRUZSMV9FRTFGTFRSXzEpICAgLyohPCBXaW5kb3dpbmcgZnJvbSBjb3VudGVyIHJlc2V0L3JvbGwtb3ZlciB0byBDb21wYXJlIDNVICovCiAjZGVmaW5lIExMX0hSVElNX0VFRkxUUl9XSU5ET1dJTkdUSU0gICAgICAgICAgICAgICAgICAgIChIUlRJTV9FRUZSMV9FRTFGTFRSXzMgfCBIUlRJTV9FRUZSMV9FRTFGTFRSXzIgfCBIUlRJTV9FRUZSMV9FRTFGTFRSXzFcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEhSVElNX0VFRlIxX0VFMUZMVFJfMCkgICAvKiE8IFdpbmRvd2luZyBmcm9tIGFub3RoZXIgdGltaW5nIHVuaXQ6IFRJTVdJTiBzb3VyY2UgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEhSVElNX0VFRlIxX0VFMUZMVFJfMCkgICAvKiE8IFdpbmRvd2luZyBmcm9tIGFub3RoZXIgdGltaW5nIHVuaXQ6IFRJTVdJTiBzb3VyY2UgKi8KIC8qKgogICAqIEB9CiAgICovCkBAIC0xMzc5LDkgKzEzNzksOCBAQAogI2RlZmluZSBMTF9IUlRJTV9PVVRQVVRTRVRfTUFTVEVSQ01QMiAgICAgICAgICAoSFJUSU1fU0VUMVJfTVNUQ01QMikgICAvKiE8IE1hc3RlciBUaW1lciBjb21wYXJlIDIgZXZlbnQgZm9yY2VzIGFuIG91dHB1dCBsZXZlbCB0cmFuc2lzaW9uICovCiAjZGVmaW5lIExMX0hSVElNX09VVFBVVFNFVF9NQVNURVJDTVAzICAgICAgICAgIChIUlRJTV9TRVQxUl9NU1RDTVAzKSAgIC8qITwgTWFzdGVyIFRpbWVyIGNvbXBhcmUgMyBldmVudCBmb3JjZXMgYW4gb3V0cHV0IGxldmVsIHRyYW5zaXNpb24gKi8KICNkZWZpbmUgTExfSFJUSU1fT1VUUFVUU0VUX01BU1RFUkNNUDQgICAgICAgICAgKEhSVElNX1NFVDFSX01TVENNUDQpICAgLyohPCBNYXN0ZXIgVGltZXIgY29tcGFyZSA0IGV2ZW50IGZvcmNlcyBhbiBvdXRwdXQgbGV2ZWwgdHJhbnNpc2lvbiAqLwotCiAvKiBUaW1lciBFdmVudHMgbWFwcGluZyBmb3IgVGltZXIgQSAqLwotI2RlZmluZSBMTF9IUlRJTV9PVVRQVVRTRVRfVElNQUVWMV9USU1CQ01QMSAgICAoSFJUSU1fU0VUMVJfVElNRVZOVDEpICAvKiE8IFRpbWVyIGV2ZW50IDEgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGljdGl2ZSBzdGF0ZSAqLworI2RlZmluZSBMTF9IUlRJTV9PVVRQVVRTRVRfVElNQUVWMV9USU1CQ01QMSAgICAoSFJUSU1fU0VUMVJfVElNRVZOVDEpICAvKiE8IFRpbWVyIGV2ZW50IDEgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGFjdGl2ZSBzdGF0ZSAqLwogI2RlZmluZSBMTF9IUlRJTV9PVVRQVVRTRVRfVElNQUVWMl9USU1CQ01QMiAgICAoSFJUSU1fU0VUMVJfVElNRVZOVDIpICAvKiE8IFRpbWVyIGV2ZW50IDIgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGFjdGl2ZSBzdGF0ZSAqLwogI2RlZmluZSBMTF9IUlRJTV9PVVRQVVRTRVRfVElNQUVWM19USU1GQ01QNCAgICAoSFJUSU1fU0VUMVJfVElNRVZOVDMpICAvKiE8IFRpbWVyIGV2ZW50IDMgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGFjdGl2ZSBzdGF0ZSAqLwogI2RlZmluZSBMTF9IUlRJTV9PVVRQVVRTRVRfVElNQUVWNF9USU1DQ01QMiAgICAoSFJUSU1fU0VUMVJfVElNRVZOVDQpICAvKiE8IFRpbWVyIGV2ZW50IDQgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGFjdGl2ZSBzdGF0ZSAqLwpAQCAtODAzOCw3ICs4MDM3LDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9IUlRJTV9PVVRQVVRTRVRfRUVWXzkKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9IUlRJTV9PVVRQVVRTRVRfRUVWXzEwCiAgICogICAgICAgICBAYXJnIEByZWYgTExfSFJUSU1fT1VUUFVUU0VUX1VQREFURQotICAqICAgICAgICAoc291cmNlID0gVElNeSBhbmQgZGVzdGluYXRpb24gPSBUSU14LCBDb21wYXJlIFVuaXQgPSBDTVB6KS4KKyAgKiAgICAgICAgIChzb3VyY2UgPSBUSU15IGFuZCBkZXN0aW5hdGlvbiA9IFRJTXgsIENvbXBhcmUgVW5pdCA9IENNUHopLgogICAqIEByZXR2YWwgTm9uZQogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfSFJUSU1fT1VUX1NldE91dHB1dFNldFNyYyhIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IE91dHB1dCwgdWludDMyX3QgU2V0U3JjKQpAQCAtODU0NCw3ICs4NTQzLDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9IUlRJTV9PVVRQVVRSRVNFVF9FRVZfOQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0hSVElNX09VVFBVVFJFU0VUX0VFVl8xMAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0hSVElNX09VVFBVVFJFU0VUX1VQREFURQotICAqICAgICAgICAoc291cmNlID0gVElNeSBhbmQgZGVzdGluYXRpb24gPSBUSU14LCBDb21wYXJlIFVuaXQgPSBDTVB6KS4KKyAgKiAgICAgICAgIChzb3VyY2UgPSBUSU15IGFuZCBkZXN0aW5hdGlvbiA9IFRJTXgsIENvbXBhcmUgVW5pdCA9IENNUHopLgogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0hSVElNX09VVF9HZXRPdXRwdXRSZXNldFNyYyhIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IE91dHB1dCkKIHsKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmc0eHhfbGxfbHB0aW0uaCBiL0luYy9zdG0zMmc0eHhfbGxfbHB0aW0uaAppbmRleCA3ODc0OTAzLi5mNjY5ZGE2IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJnNHh4X2xsX2xwdGltLmgKKysrIGIvSW5jL3N0bTMyZzR4eF9sbF9scHRpbS5oCkBAIC00LDcgKzQsNyBAQAogICAqIEBhdXRob3IgIE1DRCBBcHBsaWNhdGlvbiBUZWFtCiAgICogQGJyaWVmICAgSGVhZGVyIGZpbGUgb2YgTFBUSU0gTEwgbW9kdWxlLgogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICAqIEBhdHRlbnRpb24KKyAgKiBAYXR0ZW50aW9uCiAgICoKICAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CkBAIC0zMDEsNyArMzAxLDYgQEAKICAgKiBAfQogICAqLwogCi0KIC8qKgogICAqIEB9CiAgICovCkBAIC0zODMsNyArMzgyLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFRJTV9Jc0VuYWJsZWQoTFBUSU1fVHlwZURlZiAqTFBUSU14KQogewotICByZXR1cm4gKCgoUkVBRF9CSVQoTFBUSU14LT5DUiwgTFBUSU1fQ1JfRU5BQkxFKSA9PSBMUFRJTV9DUl9FTkFCTEUpPyAxVUwgOiAwVUwpKTsKKyAgcmV0dXJuICgoKFJFQURfQklUKExQVElNeC0+Q1IsIExQVElNX0NSX0VOQUJMRSkgPT0gTFBUSU1fQ1JfRU5BQkxFKSA/IDFVTCA6IDBVTCkpOwogfQogCiAvKioKQEAgLTQzNiw3ICs0MzUsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0lzRW5hYmxlZFJlc2V0QWZ0ZXJSZWFkKExQVElNX1R5cGVEZWYgKkxQVElNeCkKIHsKLSAgcmV0dXJuICgoKFJFQURfQklUKExQVElNeC0+Q1IsIExQVElNX0NSX1JTVEFSRSkgPT0gTFBUSU1fQ1JfUlNUQVJFKT8gMVVMIDogMFVMKSk7CisgIHJldHVybiAoKChSRUFEX0JJVChMUFRJTXgtPkNSLCBMUFRJTV9DUl9SU1RBUkUpID09IExQVElNX0NSX1JTVEFSRSkgPyAxVUwgOiAwVUwpKTsKIH0KIAogLyoqCkBAIC00ODcsNyArNDg2LDcgQEAKICAgKiBAbm90ZSBUaGUgTFBUSU14X0FSUiByZWdpc3RlciBjb250ZW50IG11c3Qgb25seSBiZSBtb2RpZmllZCB3aGVuIHRoZSBMUFRJTSBpcyBlbmFibGVkCiAgICogQG5vdGUgQWZ0ZXIgYSB3cml0ZSB0byB0aGUgTFBUSU14X0FSUiByZWdpc3RlciBhIG5ldyB3cml0ZSBvcGVyYXRpb24gdG8gdGhlCiAgICogICAgICAgc2FtZSByZWdpc3RlciBjYW4gb25seSBiZSBwZXJmb3JtZWQgd2hlbiB0aGUgcHJldmlvdXMgd3JpdGUgb3BlcmF0aW9uCi0gICogICAgICAgaXMgY29tcGxldGVkLiBBbnkgc3VjY2Vzc2l2ZSB3cml0ZSBiZWZvcmUgIHRoZSBBUlJPSyBmbGFnIGJlIHNldCwgd2lsbAorICAqICAgICAgIGlzIGNvbXBsZXRlZC4gQW55IHN1Y2Nlc3NpdmUgd3JpdGUgYmVmb3JlICB0aGUgQVJST0sgZmxhZyBpcyBzZXQsIHdpbGwKICAgKiAgICAgICBsZWFkIHRvIHVucHJlZGljdGFibGUgcmVzdWx0cy4KICAgKiBAbm90ZSBhdXRvcmVsb2FkIHZhbHVlIGJlIHN0cmljdGx5IGdyZWF0ZXIgdGhhbiB0aGUgY29tcGFyZSB2YWx1ZS4KICAgKiBAcm10b2xsIEFSUiAgICAgICAgICBBUlIgICAgICAgICAgIExMX0xQVElNX1NldEF1dG9SZWxvYWQKQEAgLTUxNSw3ICs1MTQsNyBAQAogICAqIEBicmllZiAgU2V0IHRoZSBjb21wYXJlIHZhbHVlCiAgICogQG5vdGUgQWZ0ZXIgYSB3cml0ZSB0byB0aGUgTFBUSU14X0NNUCByZWdpc3RlciBhIG5ldyB3cml0ZSBvcGVyYXRpb24gdG8gdGhlCiAgICogICAgICAgc2FtZSByZWdpc3RlciBjYW4gb25seSBiZSBwZXJmb3JtZWQgd2hlbiB0aGUgcHJldmlvdXMgd3JpdGUgb3BlcmF0aW9uCi0gICogICAgICAgaXMgY29tcGxldGVkLiBBbnkgc3VjY2Vzc2l2ZSB3cml0ZSBiZWZvcmUgdGhlIENNUE9LIGZsYWcgYmUgc2V0LCB3aWxsCisgICogICAgICAgaXMgY29tcGxldGVkLiBBbnkgc3VjY2Vzc2l2ZSB3cml0ZSBiZWZvcmUgdGhlIENNUE9LIGZsYWcgaXMgc2V0LCB3aWxsCiAgICogICAgICAgbGVhZCB0byB1bnByZWRpY3RhYmxlIHJlc3VsdHMuCiAgICogQHJtdG9sbCBDTVAgICAgICAgICAgQ01QICAgICAgICAgICBMTF9MUFRJTV9TZXRDb21wYXJlCiAgICogQHBhcmFtICBMUFRJTXggTG93LVBvd2VyIFRpbWVyIGluc3RhbmNlCkBAIC03MDMsNyArNzAyLDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBTZXQgTFBUSU0gaW5wdXQgMSBzb3VyY2UgKGRlZmF1bHQgR1BJTykuCi0gICogQHJtdG9sbCBPUiAgICAgIElOMSAgICAgICAgICBMTF9MUFRJTV9TZXRJbnB1dDFTcmMKKyAgKiBAcm10b2xsIE9SICAgICAgSU4xICAgICAgIExMX0xQVElNX1NldElucHV0MVNyYwogICAqIEBwYXJhbSAgTFBUSU14IExvdy1Qb3dlciBUaW1lciBpbnN0YW5jZQogICAqIEBwYXJhbSAgU3JjIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfTFBUSU1fSU5QVVQxX1NSQ19HUElPCkBAIC03MTYsMTIgKzcxNSwxMiBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfTFBUSU1fU2V0SW5wdXQxU3JjKExQVElNX1R5cGVEZWYgKkxQVElNeCwgdWludDMyX3QgU3JjKQogewotICBXUklURV9SRUcoTFBUSU14LT5PUiwgU3JjKTsKKyAgTU9ESUZZX1JFRyhMUFRJTXgtPk9SLCBMUFRJTV9PUl9JTjEsIFNyYyk7CiB9CiAKIC8qKgogICAqIEBicmllZiAgU2V0IExQVElNIGlucHV0IDIgc291cmNlIChkZWZhdWx0IEdQSU8pLgotICAqIEBybXRvbGwgT1IgICAgICBJTjIgICAgICAgICAgTExfTFBUSU1fU2V0SW5wdXQyU3JjCisgICogQHJtdG9sbCBPUiAgICAgIElOMiAgICAgICBMTF9MUFRJTV9TZXRJbnB1dDJTcmMKICAgKiBAcGFyYW0gIExQVElNeCBMb3ctUG93ZXIgVGltZXIgaW5zdGFuY2UKICAgKiBAcGFyYW0gIFNyYyBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0xQVElNX0lOUFVUMl9TUkNfR1BJTwpAQCAtNzMzLDcgKzczMiw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9MUFRJTV9TZXRJbnB1dDJTcmMoTFBUSU1fVHlwZURlZiAqTFBUSU14LCB1aW50MzJfdCBTcmMpCiB7Ci0gIFdSSVRFX1JFRyhMUFRJTXgtPk9SLCBTcmMpOworICBNT0RJRllfUkVHKExQVElNeC0+T1IsIExQVElNX09SX0lOMiwgU3JjKTsKIH0KIAogLyoqCkBAIC03ODMsNyArNzgyLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFRJTV9Jc0VuYWJsZWRUaW1lb3V0KExQVElNX1R5cGVEZWYgKkxQVElNeCkKIHsKLSAgcmV0dXJuICgoKFJFQURfQklUKExQVElNeC0+Q0ZHUiwgTFBUSU1fQ0ZHUl9USU1PVVQpID09IExQVElNX0NGR1JfVElNT1VUKT8gMVVMIDogMFVMKSk7CisgIHJldHVybiAoKChSRUFEX0JJVChMUFRJTXgtPkNGR1IsIExQVElNX0NGR1JfVElNT1VUKSA9PSBMUFRJTV9DRkdSX1RJTU9VVCkgPyAxVUwgOiAwVUwpKTsKIH0KIAogLyoqCkBAIC0xMDYxLDcgKzEwNjAsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0lzRW5hYmxlZEVuY29kZXJNb2RlKExQVElNX1R5cGVEZWYgKkxQVElNeCkKIHsKLSAgcmV0dXJuICgoKFJFQURfQklUKExQVElNeC0+Q0ZHUiwgTFBUSU1fQ0ZHUl9FTkMpID09IExQVElNX0NGR1JfRU5DKT8gMVVMIDogMFVMKSk7CisgIHJldHVybiAoKChSRUFEX0JJVChMUFRJTXgtPkNGR1IsIExQVElNX0NGR1JfRU5DKSA9PSBMUFRJTV9DRkdSX0VOQykgPyAxVUwgOiAwVUwpKTsKIH0KIAogLyoqCkBAIC0xMDkxLDcgKzEwOTAsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0lzQWN0aXZlRmxhZ19DTVBNKExQVElNX1R5cGVEZWYgKkxQVElNeCkKIHsKLSAgcmV0dXJuICgoKFJFQURfQklUKExQVElNeC0+SVNSLCBMUFRJTV9JU1JfQ01QTSkgPT0gTFBUSU1fSVNSX0NNUE0pPyAxVUwgOiAwVUwpKTsKKyAgcmV0dXJuICgoKFJFQURfQklUKExQVElNeC0+SVNSLCBMUFRJTV9JU1JfQ01QTSkgPT0gTFBUSU1fSVNSX0NNUE0pID8gMVVMIDogMFVMKSk7CiB9CiAKIC8qKgpAQCAtMTEwNiwxNCArMTEwNSwxNCBAQAogfQogCiAvKioKLSAgKiBAYnJpZWYgIEluZm9ybSBhcHBsaWNhdGlvbiB3aGV0aGVyIGEgYXV0b3JlbG9hZCBtYXRjaCBpbnRlcnJ1cHQgaGFzIG9jY3VyZWQuCisgICogQGJyaWVmICBJbmZvcm0gYXBwbGljYXRpb24gd2hldGhlciBhIGF1dG9yZWxvYWQgbWF0Y2ggaW50ZXJydXB0IGhhcyBvY2N1cnJlZC4KICAgKiBAcm10b2xsIElTUiAgICAgICAgICBBUlJNICAgICAgICAgIExMX0xQVElNX0lzQWN0aXZlRmxhZ19BUlJNCiAgICogQHBhcmFtICBMUFRJTXggTG93LVBvd2VyIFRpbWVyIGluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBUSU1fSXNBY3RpdmVGbGFnX0FSUk0oTFBUSU1fVHlwZURlZiAqTFBUSU14KQogewotICByZXR1cm4gKCgoUkVBRF9CSVQoTFBUSU14LT5JU1IsIExQVElNX0lTUl9BUlJNKSA9PSBMUFRJTV9JU1JfQVJSTSk/IDFVTCA6IDBVTCkpOworICByZXR1cm4gKCgoUkVBRF9CSVQoTFBUSU14LT5JU1IsIExQVElNX0lTUl9BUlJNKSA9PSBMUFRJTV9JU1JfQVJSTSkgPyAxVUwgOiAwVUwpKTsKIH0KIAogLyoqCkBAIC0xMTM1LDcgKzExMzQsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0lzQWN0aXZlRmxhZ19FWFRUUklHKExQVElNX1R5cGVEZWYgKkxQVElNeCkKIHsKLSAgcmV0dXJuICgoKFJFQURfQklUKExQVElNeC0+SVNSLCBMUFRJTV9JU1JfRVhUVFJJRykgPT0gTFBUSU1fSVNSX0VYVFRSSUcpPyAxVUwgOiAwVUwpKTsKKyAgcmV0dXJuICgoKFJFQURfQklUKExQVElNeC0+SVNSLCBMUFRJTV9JU1JfRVhUVFJJRykgPT0gTFBUSU1fSVNSX0VYVFRSSUcpID8gMVVMIDogMFVMKSk7CiB9CiAKIC8qKgpAQCAtMTE1Nyw3ICsxMTU2LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFRJTV9Jc0FjdGl2ZUZsYWdfQ01QT0soTFBUSU1fVHlwZURlZiAqTFBUSU14KQogewotICByZXR1cm4gKCgoUkVBRF9CSVQoTFBUSU14LT5JU1IsIExQVElNX0lTUl9DTVBPSykgPT0gTFBUSU1fSVNSX0NNUE9LKT8gMVVMIDogMFVMKSk7CisgIHJldHVybiAoKChSRUFEX0JJVChMUFRJTXgtPklTUiwgTFBUSU1fSVNSX0NNUE9LKSA9PSBMUFRJTV9JU1JfQ01QT0spID8gMVVMIDogMFVMKSk7CiB9CiAKIC8qKgpAQCAtMTE3OSw3ICsxMTc4LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFRJTV9Jc0FjdGl2ZUZsYWdfQVJST0soTFBUSU1fVHlwZURlZiAqTFBUSU14KQogewotICByZXR1cm4gKCgoUkVBRF9CSVQoTFBUSU14LT5JU1IsIExQVElNX0lTUl9BUlJPSykgPT0gTFBUSU1fSVNSX0FSUk9LKT8gMVVMIDogMFVMKSk7CisgIHJldHVybiAoKChSRUFEX0JJVChMUFRJTXgtPklTUiwgTFBUSU1fSVNSX0FSUk9LKSA9PSBMUFRJTV9JU1JfQVJST0spID8gMVVMIDogMFVMKSk7CiB9CiAKIC8qKgpAQCAtMTIwMSw3ICsxMjAwLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFRJTV9Jc0FjdGl2ZUZsYWdfVVAoTFBUSU1fVHlwZURlZiAqTFBUSU14KQogewotICByZXR1cm4gKCgoUkVBRF9CSVQoTFBUSU14LT5JU1IsIExQVElNX0lTUl9VUCkgPT0gTFBUSU1fSVNSX1VQKT8gMVVMIDogMFVMKSk7CisgIHJldHVybiAoKChSRUFEX0JJVChMUFRJTXgtPklTUiwgTFBUSU1fSVNSX1VQKSA9PSBMUFRJTV9JU1JfVVApID8gMVVMIDogMFVMKSk7CiB9CiAKIC8qKgpAQCAtMTIyMyw3ICsxMjIyLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFRJTV9Jc0FjdGl2ZUZsYWdfRE9XTihMUFRJTV9UeXBlRGVmICpMUFRJTXgpCiB7Ci0gIHJldHVybiAoKChSRUFEX0JJVChMUFRJTXgtPklTUiwgTFBUSU1fSVNSX0RPV04pID09IExQVElNX0lTUl9ET1dOKT8gMVVMIDogMFVMKSk7CisgIHJldHVybiAoKChSRUFEX0JJVChMUFRJTXgtPklTUiwgTFBUSU1fSVNSX0RPV04pID09IExQVElNX0lTUl9ET1dOKSA/IDFVTCA6IDBVTCkpOwogfQogCiAvKioKQEAgLTEyNjQsNyArMTI2Myw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBUSU1fSXNFbmFibGVkSVRfQ01QTShMUFRJTV9UeXBlRGVmICpMUFRJTXgpCiB7Ci0gIHJldHVybiAoKChSRUFEX0JJVChMUFRJTXgtPklFUiwgTFBUSU1fSUVSX0NNUE1JRSkgPT0gTFBUSU1fSUVSX0NNUE1JRSk/IDFVTCA6IDBVTCkpOworICByZXR1cm4gKCgoUkVBRF9CSVQoTFBUSU14LT5JRVIsIExQVElNX0lFUl9DTVBNSUUpID09IExQVElNX0lFUl9DTVBNSUUpID8gMVVMIDogMFVMKSk7CiB9CiAKIC8qKgpAQCAtMTI5Nyw3ICsxMjk2LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFRJTV9Jc0VuYWJsZWRJVF9BUlJNKExQVElNX1R5cGVEZWYgKkxQVElNeCkKIHsKLSAgcmV0dXJuICgoKFJFQURfQklUKExQVElNeC0+SUVSLCBMUFRJTV9JRVJfQVJSTUlFKSA9PSBMUFRJTV9JRVJfQVJSTUlFKT8gMVVMIDogMFVMKSk7CisgIHJldHVybiAoKChSRUFEX0JJVChMUFRJTXgtPklFUiwgTFBUSU1fSUVSX0FSUk1JRSkgPT0gTFBUSU1fSUVSX0FSUk1JRSkgPyAxVUwgOiAwVUwpKTsKIH0KIAogLyoqCkBAIC0xMzMwLDcgKzEzMjksNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0lzRW5hYmxlZElUX0VYVFRSSUcoTFBUSU1fVHlwZURlZiAqTFBUSU14KQogewotICByZXR1cm4gKCgoUkVBRF9CSVQoTFBUSU14LT5JRVIsIExQVElNX0lFUl9FWFRUUklHSUUpID09IExQVElNX0lFUl9FWFRUUklHSUUpPyAxVUwgOiAwVUwpKTsKKyAgcmV0dXJuICgoKFJFQURfQklUKExQVElNeC0+SUVSLCBMUFRJTV9JRVJfRVhUVFJJR0lFKSA9PSBMUFRJTV9JRVJfRVhUVFJJR0lFKSA/IDFVTCA6IDBVTCkpOwogfQogCiAvKioKQEAgLTEzNjMsNyArMTM2Miw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBUSU1fSXNFbmFibGVkSVRfQ01QT0soTFBUSU1fVHlwZURlZiAqTFBUSU14KQogewotICByZXR1cm4gKCgoUkVBRF9CSVQoTFBUSU14LT5JRVIsIExQVElNX0lFUl9DTVBPS0lFKSA9PSBMUFRJTV9JRVJfQ01QT0tJRSk/IDFVTCA6IDBVTCkpOworICByZXR1cm4gKCgoUkVBRF9CSVQoTFBUSU14LT5JRVIsIExQVElNX0lFUl9DTVBPS0lFKSA9PSBMUFRJTV9JRVJfQ01QT0tJRSkgPyAxVUwgOiAwVUwpKTsKIH0KIAogLyoqCkBAIC0xMzkyLDExICsxMzkxLDExIEBACiAgICogQGJyaWVmICBJbmRpY2F0ZXMgd2hldGhlciB0aGUgYXV0b3JlbG9hZCByZWdpc3RlciB3cml0ZSBjb21wbGV0ZWQgaW50ZXJydXB0IChBUlJPS0lFKSBpcyBlbmFibGVkLgogICAqIEBybXRvbGwgSUVSICAgICAgICAgIEFSUk9LSUUgICAgICAgTExfTFBUSU1fSXNFbmFibGVkSVRfQVJST0sKICAgKiBAcGFyYW0gIExQVElNeCBMb3ctUG93ZXIgVGltZXIgaW5zdGFuY2UKLSAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KKyAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCgxIG9yIDApLgogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0lzRW5hYmxlZElUX0FSUk9LKExQVElNX1R5cGVEZWYgKkxQVElNeCkKIHsKLSAgcmV0dXJuICgoKFJFQURfQklUKExQVElNeC0+SUVSLCBMUFRJTV9JRVJfQVJST0tJRSkgPT0gTFBUSU1fSUVSX0FSUk9LSUUpPyAxVUwgOiAwVUwpKTsKKyAgcmV0dXJuICgoKFJFQURfQklUKExQVElNeC0+SUVSLCBMUFRJTV9JRVJfQVJST0tJRSkgPT0gTFBUSU1fSUVSX0FSUk9LSUUpID8gMVVMIDogMFVMKSk7CiB9CiAKIC8qKgpAQCAtMTQyNSwxMSArMTQyNCwxMSBAQAogICAqIEBicmllZiAgSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGRpcmVjdGlvbiBjaGFuZ2UgdG8gdXAgaW50ZXJydXB0IChVUElFKSBpcyBlbmFibGVkLgogICAqIEBybXRvbGwgSUVSICAgICAgICAgIFVQSUUgICAgICAgICAgTExfTFBUSU1fSXNFbmFibGVkSVRfVVAKICAgKiBAcGFyYW0gIExQVElNeCBMb3ctUG93ZXIgVGltZXIgaW5zdGFuY2UKLSAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KKyAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCgxIG9yIDApLgogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0lzRW5hYmxlZElUX1VQKExQVElNX1R5cGVEZWYgKkxQVElNeCkKIHsKLSAgcmV0dXJuICgoKFJFQURfQklUKExQVElNeC0+SUVSLCBMUFRJTV9JRVJfVVBJRSkgPT0gTFBUSU1fSUVSX1VQSUUpPyAxVUwgOiAwVUwpKTsKKyAgcmV0dXJuICgoKFJFQURfQklUKExQVElNeC0+SUVSLCBMUFRJTV9JRVJfVVBJRSkgPT0gTFBUSU1fSUVSX1VQSUUpID8gMVVMIDogMFVMKSk7CiB9CiAKIC8qKgpAQCAtMTQ1OCwxMSArMTQ1NywxMSBAQAogICAqIEBicmllZiAgSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGRpcmVjdGlvbiBjaGFuZ2UgdG8gZG93biBpbnRlcnJ1cHQgKERPV05JRSkgaXMgZW5hYmxlZC4KICAgKiBAcm10b2xsIElFUiAgICAgICAgICBET1dOSUUgICAgICAgIExMX0xQVElNX0lzRW5hYmxlZElUX0RPV04KICAgKiBAcGFyYW0gIExQVElNeCBMb3ctUG93ZXIgVGltZXIgaW5zdGFuY2UKLSAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KKyAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCgxIG9yIDApLgogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0lzRW5hYmxlZElUX0RPV04oTFBUSU1fVHlwZURlZiAqTFBUSU14KQogewotICByZXR1cm4gKChSRUFEX0JJVChMUFRJTXgtPklFUiwgTFBUSU1fSUVSX0RPV05JRSkgPT0gTFBUSU1fSUVSX0RPV05JRSk/IDFVTCA6IDBVTCk7CisgIHJldHVybiAoKFJFQURfQklUKExQVElNeC0+SUVSLCBMUFRJTV9JRVJfRE9XTklFKSA9PSBMUFRJTV9JRVJfRE9XTklFKSA/IDFVTCA6IDBVTCk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZzR4eF9sbF9wd3IuaCBiL0luYy9zdG0zMmc0eHhfbGxfcHdyLmgKaW5kZXggNTEzM2IwYy4uMWIyNDZjZiAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZzR4eF9sbF9wd3IuaAorKysgYi9JbmMvc3RtMzJnNHh4X2xsX3B3ci5oCkBAIC00NzAsNTAgKzQ3MCw0OCBAQAogCiAjaWYgZGVmaW5lZChQV1JfQ1IzX1VDUERfREJESVMpCiAvKioKLSAgKiBAYnJpZWYgIEVuYWJsZSAod3JpdGUgMCkgVVNCIFR5cGUtQyBkZWFkIGJhdHRlcnkgcHVsbC1kb3duIGJlaGF2aW9yCi0gICogb24gVUNQRDFfQ0MxIGFuZCBVQ1BEMV9DQzIgcGlucy4KLSAgKiBAbm90ZSBBZnRlciBleGl0aW5nIHJlc2V0LCB0aGUgVVNCIFR5cGUtQyDigJxkZWFkIGJhdHRlcnnigJ0gYmVoYXZpb3Igd2lsbCBiZSBlbmFibGVkLAotICAqIHdoaWNoIG1heSBoYXZlIGEgcHVsbC1kb3duIGVmZmVjdCBvbiBDQzEgYW5kIENDMiBwaW5zLiBJdCBpcyByZWNvbW1lbmRlZCB0byBkaXNhYmxlIGl0Ci0gICogaW4gYWxsIGNhc2VzLCBlaXRoZXIgdG8gc3RvcCB0aGlzIHB1bGwtZG93biBvciB0byBoYW5kIG92ZXIgY29udHJvbCB0byB0aGUgVUNQRDEKLSAgKiAod2hpY2ggc2hvdWxkIHRoZXJlZm9yZSBiZSBpbml0aWFsaXplZCBiZWZvcmUgZG9pbmcgdGhlIGRpc2FibGUpLgotICAqIEBybXRvbGwgQ1IzICAgICAgICAgIFBXUl9DUjNfVUNQRF9EQkRJUyAgICAgICAgICAgTExfUFdSX0VuYWJsZVVTQkRlYWRCYXR0ZXJ5CisgICogQGJyaWVmICBFbmFibGUgdGhlIFVTQiBUeXBlLUMgYW5kIHBvd2VyIGRlbGl2ZXJ5IGRlYWQgYmF0dGVyeSBwdWxsLWRvd24gYmVoYXZpb3IKKyAgKiAgICAgICAgIG9uIFVDUEQgQ0MxIGFuZCBDQzIgcGlucy4KKyAgKiBAbm90ZSAgIEFmdGVyIGV4aXRpbmcgcmVzZXQsIHRoZSBVU0IgVHlwZS1DIGRlYWQgYmF0dGVyeSBiZWhhdmlvciBpcyBlbmFibGVkLAorICAqICAgICAgICAgd2hpY2ggbWF5IGhhdmUgYSBwdWxsLWRvd24gZWZmZWN0IG9uIENDMSBhbmQgQ0MyIHBpbnMuIEl0IGlzIHJlY29tbWVuZGVkCisgICogICAgICAgICB0byBkaXNhYmxlIGl0IGluIGFsbCBjYXNlcywgZWl0aGVyIHRvIHN0b3AgdGhpcyBwdWxsLWRvd24gb3IgdG8gaGFuZCBvdmVyCisgICogICAgICAgICBjb250cm9sIHRvIHRoZSBVQ1BEICh3aGljaCBzaG91bGQgdGhlcmVmb3JlIGJlIGluaXRpYWxpemVkIGJlZm9yZSBkb2luZyB0aGUgZGlzYWJsZSkuCisgICogQHJtdG9sbCBDUjMgICAgICAgICAgVUNQRF9EQkRJUyAgICAgICAgICAgTExfUFdSX0VuYWJsZVVDUEREZWFkQmF0dGVyeQogICAqIEByZXR2YWwgTm9uZQogICAqLwotX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfUFdSX0VuYWJsZVVTQkRlYWRCYXR0ZXJ5KHZvaWQpCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9QV1JfRW5hYmxlVUNQRERlYWRCYXR0ZXJ5KHZvaWQpCiB7CiAgIENMRUFSX0JJVChQV1ItPkNSMywgUFdSX0NSM19VQ1BEX0RCRElTKTsKIH0KIAogLyoqCi0gICogQGJyaWVmICBEaXNhYmxlICh3cml0ZSAxKSBVU0IgVHlwZS1DIGRlYWQgYmF0dGVyeSBwdWxsLWRvd24gYmVoYXZpb3IKLSAgKiAgb24gVUNQRDFfQ0MxIGFuZCBVQ1BEMV9DQzIgcGlucy4KLSAgKiBAbm90ZSBBZnRlciBleGl0aW5nIHJlc2V0LCB0aGUgVVNCIFR5cGUtQyDigJxkZWFkIGJhdHRlcnnigJ0gYmVoYXZpb3Igd2lsbCBiZSBlbmFibGVkLAotICAqIHdoaWNoIG1heSBoYXZlIGEgcHVsbC1kb3duIGVmZmVjdCBvbiBDQzEgYW5kIENDMiBwaW5zLiBJdCBpcyByZWNvbW1lbmRlZCB0byBkaXNhYmxlIGl0Ci0gICogaW4gYWxsIGNhc2VzLCBlaXRoZXIgdG8gc3RvcCB0aGlzIHB1bGwtZG93biBvciB0byBoYW5kIG92ZXIgY29udHJvbCB0byB0aGUgVUNQRDEKLSAgKiAod2hpY2ggc2hvdWxkIHRoZXJlZm9yZSBiZSBpbml0aWFsaXplZCBiZWZvcmUgZG9pbmcgdGhlIGRpc2FibGUpLgotICAqIEBybXRvbGwgQ1IzICAgICAgICAgIFBXUl9DUjNfVUNQRF9EQkRJUyAgICAgICAgICAgTExfUFdSX0Rpc2FibGVVU0JEZWFkQmF0dGVyeQorICAqIEBicmllZiAgRGlzYWJsZSB0aGUgVVNCIFR5cGUtQyBhbmQgcG93ZXIgZGVsaXZlcnkgZGVhZCBiYXR0ZXJ5IHB1bGwtZG93biBiZWhhdmlvcgorICAqICAgICAgICAgb24gVUNQRCBDQzEgYW5kIENDMiBwaW5zLgorICAqIEBub3RlICAgQWZ0ZXIgZXhpdGluZyByZXNldCwgdGhlIFVTQiBUeXBlLUMgZGVhZCBiYXR0ZXJ5IGJlaGF2aW9yIGlzIGVuYWJsZWQsCisgICogICAgICAgICB3aGljaCBtYXkgaGF2ZSBhIHB1bGwtZG93biBlZmZlY3Qgb24gQ0MxIGFuZCBDQzIgcGlucy4gSXQgaXMgcmVjb21tZW5kZWQKKyAgKiAgICAgICAgIHRvIGRpc2FibGUgaXQgaW4gYWxsIGNhc2VzLCBlaXRoZXIgdG8gc3RvcCB0aGlzIHB1bGwtZG93biBvciB0byBoYW5kIG92ZXIKKyAgKiAgICAgICAgIGNvbnRyb2wgdG8gdGhlIFVDUEQgKHdoaWNoIHNob3VsZCB0aGVyZWZvcmUgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGRvaW5nIHRoZSBkaXNhYmxlKS4KKyAgKiBAcm10b2xsIENSMyAgICAgICAgICBVQ1BEX0RCRElTICAgICAgICAgICBMTF9QV1JfRGlzYWJsZVVDUEREZWFkQmF0dGVyeQogICAqIEByZXR2YWwgTm9uZQogICAqLwotX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfUFdSX0Rpc2FibGVVU0JEZWFkQmF0dGVyeSh2b2lkKQorX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfUFdSX0Rpc2FibGVVQ1BERGVhZEJhdHRlcnkodm9pZCkKIHsKICAgU0VUX0JJVChQV1ItPkNSMywgUFdSX0NSM19VQ1BEX0RCRElTKTsKIH0KIAogLyoqCi0gICogQGJyaWVmICBDaGVjayBVU0IgVHlwZS1DIGRlYWQgYmF0dGVyeSBwdWxsLWRvd24gYmVoYXZpb3IKLSAgKiAgICAgICAgIG9uIFVDUEQxX0NDMSBhbmQgVUNQRDFfQ0MyIHBpbnMuCi0gICogQG5vdGUgQWZ0ZXIgZXhpdGluZyByZXNldCwgdGhlIFVTQiBUeXBlLUMg4oCcZGVhZCBiYXR0ZXJ54oCdIGJlaGF2aW9yIHdpbGwgYmUgZW5hYmxlZCwKLSAgKiB3aGljaCBtYXkgaGF2ZSBhIHB1bGwtZG93biBlZmZlY3Qgb24gQ0MxIGFuZCBDQzIgcGlucy4gSXQgaXMgcmVjb21tZW5kZWQgdG8gZGlzYWJsZSBpdAotICAqIGluIGFsbCBjYXNlcywgZWl0aGVyIHRvIHN0b3AgdGhpcyBwdWxsLWRvd24gb3IgdG8gaGFuZCBvdmVyIGNvbnRyb2wgdG8gdGhlIFVDUEQxCi0gICogKHdoaWNoIHNob3VsZCB0aGVyZWZvcmUgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGRvaW5nIHRoZSBkaXNhYmxlKS4KLSAgKiBAcm10b2xsIENSMyAgICAgICAgICBQV1JfQ1IzX1VDUERfREJESVMgICAgICAgICAgIExMX1BXUl9Jc0VuYWJsZWRVU0JEZWFkQmF0dGVyeQotICAqIEByZXR2YWwgU3RhdGUgb2YgYml0LgorICAqIEBicmllZiAgQ2hlY2sgdGhlIFVTQiBUeXBlLUMgYW5kIHBvd2VyIGRlbGl2ZXJ5IGRlYWQgYmF0dGVyeSBwdWxsLWRvd24gYmVoYXZpb3IKKyAgKiAgICAgICAgIG9uIFVDUEQgQ0MxIGFuZCBDQzIgcGlucy4KKyAgKiBAbm90ZSAgIEFmdGVyIGV4aXRpbmcgcmVzZXQsIHRoZSBVU0IgVHlwZS1DIGRlYWQgYmF0dGVyeSBiZWhhdmlvciBpcyBlbmFibGVkLAorICAqICAgICAgICAgd2hpY2ggbWF5IGhhdmUgYSBwdWxsLWRvd24gZWZmZWN0IG9uIENDMSBhbmQgQ0MyIHBpbnMuIEl0IGlzIHJlY29tbWVuZGVkCisgICogICAgICAgICB0byBkaXNhYmxlIGl0IGluIGFsbCBjYXNlcywgZWl0aGVyIHRvIHN0b3AgdGhpcyBwdWxsLWRvd24gb3IgdG8gaGFuZCBvdmVyCisgICogICAgICAgICBjb250cm9sIHRvIHRoZSBVQ1BEICh3aGljaCBzaG91bGQgdGhlcmVmb3JlIGJlIGluaXRpYWxpemVkIGJlZm9yZSBkb2luZyB0aGUgZGlzYWJsZSkuCisgICogQHJtdG9sbCBDUjMgICAgICAgICAgVUNQRF9EQkRJUyAgICAgICAgICAgTExfUFdSX0lzRW5hYmxlZFVDUEREZWFkQmF0dGVyeQorICAqIEByZXR2YWwgU3RhdGUgb2YgZmVhdHVyZSAoMSA6IGVuYWJsZWQ7IDAgOiBkaXNhYmxlZCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfUFdSX0lzRW5hYmxlZFVTQkRlYWRCYXR0ZXJ5KHZvaWQpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfUFdSX0lzRW5hYmxlZFVDUEREZWFkQmF0dGVyeSh2b2lkKQogewotCi0gIHJldHVybiAoKFJFQURfQklUKFBXUi0+Q1IzLCBQV1JfQ1IzX1VDUERfREJESVMpID09IChQV1JfQ1IzX1VDUERfREJESVMpKT8xVUw6MFVMKTsKLQorICByZXR1cm4gKChSRUFEX0JJVChQV1ItPkNSMywgUFdSX0NSM19VQ1BEX0RCRElTKSA9PSAoUFdSX0NSM19VQ1BEX0RCRElTKSkgPyAwVUwgOiAxVUwpOwogfQogI2VuZGlmIC8qIFBXUl9DUjNfVUNQRF9EQkRJUyAqLwogCkBAIC03NTMsMjggKzc1MSw2IEBACiAgIHJldHVybiAoKFJFQURfQklUKFBXUi0+Q1IzLCBQV1JfQ1IzX0VJV0YpID09IChQV1JfQ1IzX0VJV0YpKT8xVUw6MFVMKTsKIH0KIAotI2lmIGRlZmluZWQgKFBXUl9DUjNfVUNQRF9EQkRJUykKLS8qKgotICAqIEBicmllZiAgRW5hYmxlIFVTQiBUeXBlLUMgYW5kIFBvd2VyIERlbGl2ZXJ5IERlYWQgQmF0dGVyeSBkaXNhYmxlCi0gICogQHJtdG9sbCBDUjMgICAgICAgICAgVUNQRF9EQkRJUyAgICAgICAgICBMTF9QV1JfRW5hYmxlRGVhZEJhdHRlcnlQRAotICAqIEByZXR2YWwgTm9uZQotICAqLwotX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfUFdSX0VuYWJsZURlYWRCYXR0ZXJ5UEQodm9pZCkKLXsKLSAgU0VUX0JJVChQV1ItPkNSMywgUFdSX0NSM19VQ1BEX0RCRElTKTsKLX0KLQotLyoqCi0gICogQGJyaWVmICBEaXNhYmxlIFVTQiBUeXBlLUMgYW5kIFBvd2VyIERlbGl2ZXJ5IERlYWQgQmF0dGVyeSBkaXNhYmxlCi0gICogQHJtdG9sbCBDUjMgICAgICAgICAgVUNQRF9EQkRJUyAgICAgICAgICBMTF9QV1JfRGlzYWJsZURlYWRCYXR0ZXJ5UEQKLSAgKiBAcmV0dmFsIE5vbmUKLSAgKi8KLV9fU1RBVElDX0lOTElORSB2b2lkIExMX1BXUl9EaXNhYmxlRGVhZEJhdHRlcnlQRCh2b2lkKQotewotICBDTEVBUl9CSVQoUFdSLT5DUjMsIFBXUl9DUjNfVUNQRF9EQkRJUyk7Ci19Ci0jZW5kaWYgLyogUFdSX0NSM19VQ1BEX0RCRElTICovCi0KICNpZiBkZWZpbmVkKFBXUl9DUjNfVUNQRF9TVERCWSkKIC8qKgogICAqIEBicmllZiAgRW5hYmxlIFVTQiBUeXBlLUMgYW5kIFBvd2VyIERlbGl2ZXJ5IHN0YW5kYnkgbW9kZS4KQEAgLTE2MTMsNiArMTU4OSwxMiBAQAogLyogT2xkIGZ1bmN0aW9ucyBuYW1lIGtlcHQgZm9yIGxlZ2FjeSBwdXJwb3NlLCB0byBiZSByZXBsYWNlZCBieSB0aGUgICAgICAgICAgKi8KIC8qIGN1cnJlbnQgZnVuY3Rpb25zIG5hbWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIExMX1BXUl9Jc0FjdGl2ZUZsYWdfVk9TRiAgTExfUFdSX0lzQWN0aXZlRmxhZ19WT1MKKyNkZWZpbmUgTExfUFdSX0VuYWJsZVVTQkRlYWRCYXR0ZXJ5ICAgICAgICAgICAgTExfUFdSX0VuYWJsZVVDUEREZWFkQmF0dGVyeQorI2RlZmluZSBMTF9QV1JfRGlzYWJsZVVTQkRlYWRCYXR0ZXJ5ICAgICAgICAgICBMTF9QV1JfRGlzYWJsZVVDUEREZWFkQmF0dGVyeQorI2RlZmluZSBMTF9QV1JfSXNFbmFibGVkVVNCRGVhZEJhdHRlcnkgICAgICAgICBMTF9QV1JfSXNFbmFibGVkVUNQRERlYWRCYXR0ZXJ5CisjZGVmaW5lIExMX1BXUl9FbmFibGVEZWFkQmF0dGVyeVBEICAgICAgICAgICAgIExMX1BXUl9FbmFibGVVQ1BERGVhZEJhdHRlcnkKKyNkZWZpbmUgTExfUFdSX0Rpc2FibGVEZWFkQmF0dGVyeVBEICAgICAgICAgICAgTExfUFdSX0Rpc2FibGVVQ1BERGVhZEJhdHRlcnkKKwogLyoqCiAgICogQH0KICAgKi8KZGlmZiAtLWdpdCBhL0luYy9zdG0zMmc0eHhfbGxfcnRjLmggYi9JbmMvc3RtMzJnNHh4X2xsX3J0Yy5oCmluZGV4IDNhNTJlOWIuLmI4Y2U0NDMgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmc0eHhfbGxfcnRjLmgKKysrIGIvSW5jL3N0bTMyZzR4eF9sbF9ydGMuaApAQCAtMzE4MCwxNSArMzE4MCwxNCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfUlRDX0JLUF9TZXRSZWdpc3RlcihSVENfVHlwZURlZiAqUlRDeCwgdWludDMyX3QgQmFja3VwUmVnaXN0ZXIsIHVpbnQzMl90IERhdGEpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IHRtcCA9IDBVOworICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICp0bXA7CiAKICAgVU5VU0VEKFJUQ3gpOwogCi0gIHRtcCA9ICh1aW50MzJfdCkoJihUQU1QLT5CS1AwUikpOwotICB0bXAgKz0gKEJhY2t1cFJlZ2lzdGVyICogNFUpOworICB0bXAgPSAmKFRBTVAtPkJLUDBSKSArIEJhY2t1cFJlZ2lzdGVyOwogCiAgIC8qIFdyaXRlIHRoZSBzcGVjaWZpZWQgcmVnaXN0ZXIgKi8KLSAgKihfX0lPIHVpbnQzMl90ICopdG1wID0gKHVpbnQzMl90KURhdGE7CisgICp0bXAgPSBEYXRhOwogfQogCiAvKioKQEAgLTMyMDUsMTUgKzMyMDQsMTQgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9SVENfQktQX0dldFJlZ2lzdGVyKFJUQ19UeXBlRGVmICpSVEN4LCB1aW50MzJfdCBCYWNrdXBSZWdpc3RlcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgdG1wID0gMFU7CisgIGNvbnN0IHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnRtcDsKIAogICBVTlVTRUQoUlRDeCk7CiAKLSAgdG1wID0gKHVpbnQzMl90KSgmKFRBTVAtPkJLUDBSKSk7Ci0gIHRtcCArPSAoQmFja3VwUmVnaXN0ZXIgKiA0VSk7CisgIHRtcCA9ICYoVEFNUC0+QktQMFIpICsgQmFja3VwUmVnaXN0ZXI7CiAKICAgLyogUmVhZCB0aGUgc3BlY2lmaWVkIHJlZ2lzdGVyICovCi0gIHJldHVybiAoKihfX0lPIHVpbnQzMl90ICopdG1wKTsKKyAgcmV0dXJuICp0bXA7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZzR4eF9sbF9zcGkuaCBiL0luYy9zdG0zMmc0eHhfbGxfc3BpLmgKaW5kZXggMTU5YWJhMS4uMzE2M2IyMCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZzR4eF9sbF9zcGkuaAorKysgYi9JbmMvc3RtMzJnNHh4X2xsX3NwaS5oCkBAIC0xMzE0LDcgKzEzMTQsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1NQSV9ETUFfR2V0UmVnQWRkcihTUElfVHlwZURlZiAqU1BJeCkKIHsKLSAgcmV0dXJuICh1aW50MzJfdCkgJihTUEl4LT5EUik7CisgIHJldHVybiAodWludDMyX3QpICYgKFNQSXgtPkRSKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJnNHh4X2xsX3N5c3RlbS5oIGIvSW5jL3N0bTMyZzR4eF9sbF9zeXN0ZW0uaAppbmRleCAyZjMyMDJjLi4wMTc4MTQwIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJnNHh4X2xsX3N5c3RlbS5oCisrKyBiL0luYy9zdG0zMmc0eHhfbGxfc3lzdGVtLmgKQEAgLTMwNSw3ICszMDUsNyBAQAogICAqLwogI2RlZmluZSBMTF9WUkVGQlVGX1ZPTFRBR0VfU0NBTEUwICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkgLyohPCBWb2x0YWdlIHJlZmVyZW5jZSBzY2FsZSAwIChWUkVGQlVGX09VVCA9IDIuMDQ4VikgKi8KICNkZWZpbmUgTExfVlJFRkJVRl9WT0xUQUdFX1NDQUxFMSAgICAgICAgICBWUkVGQlVGX0NTUl9WUlNfMCAgICAgIC8qITwgVm9sdGFnZSByZWZlcmVuY2Ugc2NhbGUgMSAoVlJFRkJVRl9PVVQgPSAyLjVWKSAgICovCi0jZGVmaW5lIExMX1ZSRUZCVUZfVk9MVEFHRV9TQ0FMRTIgICAgICAgICAgVlJFRkJVRl9DU1JfVlJTXzEgICAgICAvKiE8IFZvbHRhZ2UgcmVmZXJlbmNlIHNjYWxlIDIgKFZSRUZCVUZfT1VUID0gMi44VikgICAqLworI2RlZmluZSBMTF9WUkVGQlVGX1ZPTFRBR0VfU0NBTEUyICAgICAgICAgIFZSRUZCVUZfQ1NSX1ZSU18xICAgICAgLyohPCBWb2x0YWdlIHJlZmVyZW5jZSBzY2FsZSAyIChWUkVGQlVGX09VVCA9IDIuOVYpICAgKi8KIC8qKgogICAqIEB9CiAgICovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJnNHh4X2xsX3RpbS5oIGIvSW5jL3N0bTMyZzR4eF9sbF90aW0uaAppbmRleCA4OWI4NGNkLi4xN2UzOTVjIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJnNHh4X2xsX3RpbS5oCisrKyBiL0luYy9zdG0zMmc0eHhfbGxfdGltLmgKQEAgLTEyNiw0OCArMTI2LDkgQEAKICNkZWZpbmUgVElNX1BPU0lUSU9OX0JSS19TT1VSQ0UgICAgICAgICAgICAoUE9TSVRJT05fVkFMKFNvdXJjZSkgJiAweDFGVUwpCiAKIC8qIEdlbmVyaWMgYml0IGRlZmluaXRpb25zIGZvciBUSU14X0FGMSByZWdpc3RlciAqLwotI2RlZmluZSBUSU14X0FGMV9CS0lORSAgICAgVElNMV9BRjFfQktJTkUgICAgIC8qITwgQlJLIEJLSU4gaW5wdXQgZW5hYmxlICovCi0jZGVmaW5lIFRJTXhfQUYxX0JLQ09NUDFFICBUSU0xX0FGMV9CS0NNUDFFICAgLyohPCBCUksgQ09NUDEgZW5hYmxlICovCi0jZGVmaW5lIFRJTXhfQUYxX0JLQ09NUDJFICBUSU0xX0FGMV9CS0NNUDJFICAgLyohPCBCUksgQ09NUDIgZW5hYmxlICovCi0jZGVmaW5lIFRJTXhfQUYxX0JLQ09NUDNFICBUSU0xX0FGMV9CS0NNUDNFICAgLyohPCBCUksgQ09NUDMgZW5hYmxlICovCi0jZGVmaW5lIFRJTXhfQUYxX0JLQ09NUDRFICBUSU0xX0FGMV9CS0NNUDRFICAgLyohPCBCUksgQ09NUDQgZW5hYmxlICovCi0jaWYgZGVmaW5lZChDT01QNSkKLSNkZWZpbmUgVElNeF9BRjFfQktDT01QNUUgIFRJTTFfQUYxX0JLQ01QNUUgICAvKiE8IEJSSyBDT01QNSBlbmFibGUgKi8KLSNlbmRpZiAvKiBDT01QNSAqLwotI2lmIGRlZmluZWQoQ09NUDYpCi0jZGVmaW5lIFRJTXhfQUYxX0JLQ09NUDZFICBUSU0xX0FGMV9CS0NNUDZFICAgLyohPCBCUksgQ09NUDYgZW5hYmxlICovCi0jZW5kaWYgLyogQ09NUDYgKi8KLSNpZiBkZWZpbmVkKENPTVA3KQotI2RlZmluZSBUSU14X0FGMV9CS0NPTVA3RSAgVElNMV9BRjFfQktDTVA3RSAgIC8qITwgQlJLIENPTVA3IGVuYWJsZSAqLwotI2VuZGlmIC8qIENPTVA3ICovCiAjZGVmaW5lIFRJTXhfQUYxX0JLSU5QICAgICBUSU0xX0FGMV9CS0lOUCAgICAgLyohPCBCUksgQktJTiBpbnB1dCBwb2xhcml0eSAqLwotI2RlZmluZSBUSU14X0FGMV9CS0NPTVAxUCAgVElNMV9BRjFfQktDTVAxUCAgIC8qITwgQlJLIENPTVAxIGlucHV0IHBvbGFyaXR5ICovCi0jZGVmaW5lIFRJTXhfQUYxX0JLQ09NUDJQICBUSU0xX0FGMV9CS0NNUDJQICAgLyohPCBCUksgQ09NUDIgaW5wdXQgcG9sYXJpdHkgKi8KLSNkZWZpbmUgVElNeF9BRjFfQktDT01QM1AgIFRJTTFfQUYxX0JLQ01QM1AgICAvKiE8IEJSSyBDT01QMyBpbnB1dCBwb2xhcml0eSAqLwotI2RlZmluZSBUSU14X0FGMV9CS0NPTVA0UCAgVElNMV9BRjFfQktDTVA0UCAgIC8qITwgQlJLIENPTVA0IGlucHV0IHBvbGFyaXR5ICovCiAjZGVmaW5lIFRJTXhfQUYxX0VUUlNFTCAgICBUSU0xX0FGMV9FVFJTRUwgICAgLyohPCBUSU14IEVUUiBzb3VyY2Ugc2VsZWN0aW9uICovCiAKLS8qIEdlbmVyaWMgYml0IGRlZmluaXRpb25zIGZvciBUSU14X0FGMiByZWdpc3RlciAqLwotI2RlZmluZSBUSU14X0FGMl9CSzJJTkUgICAgVElNMV9BRjJfQksySU5FICAgICAgLyohPCBCUksyIEJLSU4yIGlucHV0IGVuYWJsZSAqLwotI2RlZmluZSBUSU14X0FGMl9CSzJDT01QMUUgVElNMV9BRjJfQksyQ01QMUUgICAgLyohPCBCUksyIENPTVAxIGVuYWJsZSAqLwotI2RlZmluZSBUSU14X0FGMl9CSzJDT01QMkUgVElNMV9BRjJfQksyQ01QMkUgICAgLyohPCBCUksyIENPTVAyIGVuYWJsZSAqLwotI2RlZmluZSBUSU14X0FGMl9CSzJDT01QM0UgVElNMV9BRjJfQksyQ01QM0UgICAgLyohPCBCUksyIENPTVAzIGVuYWJsZSAqLwotI2RlZmluZSBUSU14X0FGMl9CSzJDT01QNEUgVElNMV9BRjJfQksyQ01QNEUgICAgLyohPCBCUksyIENPTVA0IGVuYWJsZSAqLwotI2lmIGRlZmluZWQoQ09NUDUpCi0jZGVmaW5lIFRJTXhfQUYyX0JLMkNPTVA1RSBUSU0xX0FGMl9CSzJDTVA1RSAgICAvKiE8IEJSSzIgQ09NUDUgZW5hYmxlICovCi0jZW5kaWYgLyogQ09NUDUgKi8KLSNpZiBkZWZpbmVkKENPTVA2KQotI2RlZmluZSBUSU14X0FGMl9CSzJDT01QNkUgVElNMV9BRjJfQksyQ01QNkUgICAgLyohPCBCUksyIENPTVA2IGVuYWJsZSAqLwotI2VuZGlmIC8qIENPTVA2ICovCi0jaWYgZGVmaW5lZChDT01QNykKLSNkZWZpbmUgVElNeF9BRjJfQksyQ09NUDdFIFRJTTFfQUYyX0JLMkNNUDdFICAgIC8qITwgQlJLMiBDT01QNyBlbmFibGUgKi8KLSNlbmRpZiAvKiBDT01QNyAqLwotI2RlZmluZSBUSU14X0FGMl9CSzJJTlAgICAgVElNMV9BRjJfQksySU5QICAgICAgLyohPCBCUksyIEJLSU4yIGlucHV0IHBvbGFyaXR5ICovCi0jZGVmaW5lIFRJTXhfQUYyX0JLMkNPTVAxUCBUSU0xX0FGMl9CSzJDTVAxUCAgICAvKiE8IEJSSzIgQ09NUDEgaW5wdXQgcG9sYXJpdHkgKi8KLSNkZWZpbmUgVElNeF9BRjJfQksyQ09NUDJQIFRJTTFfQUYyX0JLMkNNUDJQICAgIC8qITwgQlJLMiBDT01QMiBpbnB1dCBwb2xhcml0eSAqLwotI2RlZmluZSBUSU14X0FGMl9CSzJDT01QM1AgVElNMV9BRjJfQksyQ01QM1AgICAgLyohPCBCUksyIENPTVAzIGlucHV0IHBvbGFyaXR5ICovCi0jZGVmaW5lIFRJTXhfQUYyX0JLMkNPTVA0UCBUSU0xX0FGMl9CSzJDTVA0UCAgICAvKiE8IEJSSzIgQ09NUDQgaW5wdXQgcG9sYXJpdHkgKi8KLQogCiAvKiBNYXNrIHVzZWQgdG8gc2V0IHRoZSBUREdbeDowXSBvZiB0aGUgRFRHIGJpdHMgb2YgdGhlIFRJTXhfQkRUUiByZWdpc3RlciAqLwogI2RlZmluZSBEVF9ERUxBWV8xICgodWludDhfdCkweDdGKQpAQCAtMjczLDEzICsyMzQsMTQgQEAKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGZlYXR1cmUgY2FuIGJlIG1vZGlmaWVkIGFmdGVyd2FyZHMgdXNpbmcgdW5pdGFyeSBmdW5jdGlvbiBAcmVmIExMX1RJTV9TZXRDbG9ja0RpdmlzaW9uKCkuKi8KIAotICB1aW50OF90IFJlcGV0aXRpb25Db3VudGVyOyAgLyohPCBTcGVjaWZpZXMgdGhlIHJlcGV0aXRpb24gY291bnRlciB2YWx1ZS4gRWFjaCB0aW1lIHRoZSBSQ1IgZG93bmNvdW50ZXIKKyAgdWludDMyX3QgUmVwZXRpdGlvbkNvdW50ZXI7ICAvKiE8IFNwZWNpZmllcyB0aGUgcmVwZXRpdGlvbiBjb3VudGVyIHZhbHVlLiBFYWNoIHRpbWUgdGhlIFJDUiBkb3duY291bnRlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFjaGVzIHplcm8sIGFuIHVwZGF0ZSBldmVudCBpcyBnZW5lcmF0ZWQgYW5kIGNvdW50aW5nIHJlc3RhcnRzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIFJDUiB2YWx1ZSAoTikuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgbWVhbnMgaW4gUFdNIG1vZGUgdGhhdCAoTisxKSBjb3JyZXNwb25kcyB0bzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSB0aGUgbnVtYmVyIG9mIFBXTSBwZXJpb2RzIGluIGVkZ2UtYWxpZ25lZCBtb2RlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gdGhlIG51bWJlciBvZiBoYWxmIFBXTSBwZXJpb2QgaW4gY2VudGVyLWFsaWduZWQgbW9kZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gMHgwMCBhbmQgMHhGRi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1AgdGltZXJzOiB0aGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAweDAwIGFuZCBNYXhfRGF0YSA9IDB4RkYuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkdmFuY2VkIHRpbWVyczogdGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIE1pbl9EYXRhID0gMHgwMDAwIGFuZCBNYXhfRGF0YSA9IDB4RkZGRi4KIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGZlYXR1cmUgY2FuIGJlIG1vZGlmaWVkIGFmdGVyd2FyZHMgdXNpbmcgdW5pdGFyeSBmdW5jdGlvbiBAcmVmIExMX1RJTV9TZXRSZXBldGl0aW9uQ291bnRlcigpLiovCiB9IExMX1RJTV9Jbml0VHlwZURlZjsKQEAgLTIzMTgsNyArMjI4MCw3IEBACiAgICogICAgICAgd2hldGhlciBvciBub3QgYSB0aW1lciBpbnN0YW5jZSBzdXBwb3J0cyBhIHJlcGV0aXRpb24gY291bnRlci4KICAgKiBAcm10b2xsIFJDUiAgICAgICAgICBSRVAgICAgICAgICAgIExMX1RJTV9TZXRSZXBldGl0aW9uQ291bnRlcgogICAqIEBwYXJhbSAgVElNeCBUaW1lciBpbnN0YW5jZQotICAqIEBwYXJhbSAgUmVwZXRpdGlvbkNvdW50ZXIgYmV0d2VlbiBNaW5fRGF0YT0wIGFuZCBNYXhfRGF0YT0yNTUKKyAgKiBAcGFyYW0gIFJlcGV0aXRpb25Db3VudGVyIGJldHdlZW4gTWluX0RhdGE9MCBhbmQgTWF4X0RhdGE9MjU1IG9yIDY1NTM1IGZvciBhZHZhbmNlZCB0aW1lci4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX1RJTV9TZXRSZXBldGl0aW9uQ291bnRlcihUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgUmVwZXRpdGlvbkNvdW50ZXIpCkBAIC0yMzYzLDYgKzIzMjUsMTYgQEAKIH0KIAogLyoqCisgICogQGJyaWVmICBJbmRpY2F0ZSB3aGV0aGVyIHVwZGF0ZSBpbnRlcnJ1cHQgZmxhZyAoVUlGKSBjb3B5IGlzIHNldC4KKyAgKiBAcGFyYW0gIENvdW50ZXIgQ291bnRlciB2YWx1ZQorICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgorICAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9Jc0FjdGl2ZVVJRkNQWSh1aW50MzJfdCBDb3VudGVyKQoreworICByZXR1cm4gKCgoQ291bnRlciAmIFRJTV9DTlRfVUlGQ1BZKSA9PSAoVElNX0NOVF9VSUZDUFkpKSA/IDFVTCA6IDBVTCk7Cit9CisKKy8qKgogICAqIEBicmllZiAgRW5hYmxlIGRpdGhlcmluZy4KICAgKiBAbm90ZSBNYWNybyBAcmVmICBJU19USU1fRElUSEVSSU5HX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgYSB0aW1lciBpbnN0YW5jZSBwcm92aWRlcyBkaXRoZXJpbmcuCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJnNHh4X2xsX3VjcGQuaCBiL0luYy9zdG0zMmc0eHhfbGxfdWNwZC5oCmluZGV4IGRmZWRkYzIuLmM5NmVlOTkgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmc0eHhfbGxfdWNwZC5oCisrKyBiL0luYy9zdG0zMmc0eHhfbGxfdWNwZC5oCkBAIC0xMjYsOCArMTI2LDcgQEAKICNkZWZpbmUgTExfVUNQRF9JTVJfUlhPUkRERVQgICAgICAgICBVQ1BEX0lNUl9SWE9SRERFVElFICAgICAgICAgIC8qITwgRW5hYmxlIFJ4IG9yZGVyZWQgc2V0ICg0IEstY29kZXMpIGRldGVjdGVkIGludGVycnVwdCAqLwogI2RlZmluZSBMTF9VQ1BEX0lNUl9SWEhSU1RERVQgICAgICAgIFVDUERfSU1SX1JYSFJTVERFVElFICAgICAgICAgLyohPCBFbmFibGUgUnggSGFyZCBSZXNldCBkZXRlY3QgaW50ZXJydXB0ICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIExMX1VDUERfSU1SX1JYT1ZSICAgICAgICAgICAgVUNQRF9JTVJfUlhPVlJJRSAgICAgICAgICAgICAvKiE8IEVuYWJsZSBSeCBkYXRhIG92ZXJmbG93IGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgTExfVUNQRF9JTVJfUlhNU0dFTkQgICAgICAgICBVQ1BEX0lNUl9SWE1TR0VORCAgICAgICAgICAgIC8qITwgRW5hYmxlIFJ4IG1lc3NhZ2UgcmVjZWl2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBMTF9VQ1BEX0lNUl9SWEVSUiAgICAgICAgICAgIFVDUERfSU1SX1JYTVNHRU5ESUUgICAgICAgICAgLyohPCBFbmFibGUgUnggZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIExMX1VDUERfSU1SX1JYTVNHRU5EICAgICAgICAgVUNQRF9JTVJfUlhNU0dFTkRJRSAgICAgICAgICAvKiE8IEVuYWJsZSBSeCBtZXNzYWdlIHJlY2VpdmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgTExfVUNQRF9JTVJfVFlQRUNFVlQxICAgICAgICBVQ1BEX0lNUl9UWVBFQ0VWVDFJRSAgICAgICAgIC8qITwgRW5hYmxlIFR5cGUgQyB2b2x0YWdlIGxldmVsIGV2ZW50IG9uIENDMSAgICAgICAgICAgICAqLwogI2RlZmluZSBMTF9VQ1BEX0lNUl9UWVBFQ0VWVDIgICAgICAgIFVDUERfSU1SX1RZUEVDRVZUMklFICAgICAgICAgLyohPCBFbmFibGUgVHlwZSBDIHZvbHRhZ2UgbGV2ZWwgZXZlbnQgb24gQ0MyICAgICAgICAgICAgICovCiAjZGVmaW5lIExMX1VDUERfSU1SX0ZSU0VWVCAgICAgICAgICAgVUNQRF9JTVJfRlJTRVZUSUUgICAgICAgICAgICAvKiE8IEVuYWJsZSBmYXN0IFJvbGUgU3dhcCBkZXRlY3Rpb24gZXZlbnQgICAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL0luYy9zdG0zMmc0eHhfbGxfdXNhcnQuaCBiL0luYy9zdG0zMmc0eHhfbGxfdXNhcnQuaAppbmRleCA0ZjFhZjczLi5iN2Q4NWQ5IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJnNHh4X2xsX3VzYXJ0LmgKKysrIGIvSW5jL3N0bTMyZzR4eF9sbF91c2FydC5oCkBAIC0yNjUxLDcgKzI2NTEsOCBAQAogewogICAvKiBJbiBBc3luY2hyb25vdXMgbW9kZSwgdGhlIGZvbGxvd2luZyBiaXRzIG11c3QgYmUga2VwdCBjbGVhcmVkOgogICAtIExJTkVOLCBDTEtFTiBiaXRzIGluIHRoZSBVU0FSVF9DUjIgcmVnaXN0ZXIsCi0gIC0gU0NFTiwgSVJFTiBhbmQgSERTRUwgYml0cyBpbiB0aGUgVVNBUlRfQ1IzIHJlZ2lzdGVyLiovCisgIC0gU0NFTiwgSVJFTiBhbmQgSERTRUwgYml0cyBpbiB0aGUgVVNBUlRfQ1IzIHJlZ2lzdGVyLgorICAqLwogICBDTEVBUl9CSVQoVVNBUlR4LT5DUjIsIChVU0FSVF9DUjJfTElORU4gfCBVU0FSVF9DUjJfQ0xLRU4pKTsKICAgQ0xFQVJfQklUKFVTQVJUeC0+Q1IzLCAoVVNBUlRfQ1IzX1NDRU4gfCBVU0FSVF9DUjNfSVJFTiB8IFVTQVJUX0NSM19IRFNFTCkpOwogfQpAQCAtMjY4Nyw3ICsyNjg4LDggQEAKIHsKICAgLyogSW4gU3luY2hyb25vdXMgbW9kZSwgdGhlIGZvbGxvd2luZyBiaXRzIG11c3QgYmUga2VwdCBjbGVhcmVkOgogICAtIExJTkVOIGJpdCBpbiB0aGUgVVNBUlRfQ1IyIHJlZ2lzdGVyLAotICAtIFNDRU4sIElSRU4gYW5kIEhEU0VMIGJpdHMgaW4gdGhlIFVTQVJUX0NSMyByZWdpc3Rlci4qLworICAtIFNDRU4sIElSRU4gYW5kIEhEU0VMIGJpdHMgaW4gdGhlIFVTQVJUX0NSMyByZWdpc3Rlci4KKyAgKi8KICAgQ0xFQVJfQklUKFVTQVJUeC0+Q1IyLCAoVVNBUlRfQ1IyX0xJTkVOKSk7CiAgIENMRUFSX0JJVChVU0FSVHgtPkNSMywgKFVTQVJUX0NSM19TQ0VOIHwgVVNBUlRfQ1IzX0lSRU4gfCBVU0FSVF9DUjNfSERTRUwpKTsKICAgLyogc2V0IHRoZSBVQVJUL1VTQVJUIGluIFN5bmNocm9ub3VzIG1vZGUgKi8KQEAgLTI3MjcsNyArMjcyOSw4IEBACiB7CiAgIC8qIEluIExJTiBtb2RlLCB0aGUgZm9sbG93aW5nIGJpdHMgbXVzdCBiZSBrZXB0IGNsZWFyZWQ6CiAgIC0gU1RPUCBhbmQgQ0xLRU4gYml0cyBpbiB0aGUgVVNBUlRfQ1IyIHJlZ2lzdGVyLAotICAtIElSRU4sIFNDRU4gYW5kIEhEU0VMIGJpdHMgaW4gdGhlIFVTQVJUX0NSMyByZWdpc3Rlci4qLworICAtIElSRU4sIFNDRU4gYW5kIEhEU0VMIGJpdHMgaW4gdGhlIFVTQVJUX0NSMyByZWdpc3Rlci4KKyAgKi8KICAgQ0xFQVJfQklUKFVTQVJUeC0+Q1IyLCAoVVNBUlRfQ1IyX0NMS0VOIHwgVVNBUlRfQ1IyX1NUT1ApKTsKICAgQ0xFQVJfQklUKFVTQVJUeC0+Q1IzLCAoVVNBUlRfQ1IzX0lSRU4gfCBVU0FSVF9DUjNfU0NFTiB8IFVTQVJUX0NSM19IRFNFTCkpOwogICAvKiBTZXQgdGhlIFVBUlQvVVNBUlQgaW4gTElOIG1vZGUgKi8KQEAgLTI3NjUsNyArMjc2OCw4IEBACiB7CiAgIC8qIEluIEhhbGYgRHVwbGV4IG1vZGUsIHRoZSBmb2xsb3dpbmcgYml0cyBtdXN0IGJlIGtlcHQgY2xlYXJlZDoKICAgLSBMSU5FTiBhbmQgQ0xLRU4gYml0cyBpbiB0aGUgVVNBUlRfQ1IyIHJlZ2lzdGVyLAotICAtIFNDRU4gYW5kIElSRU4gYml0cyBpbiB0aGUgVVNBUlRfQ1IzIHJlZ2lzdGVyLiovCisgIC0gU0NFTiBhbmQgSVJFTiBiaXRzIGluIHRoZSBVU0FSVF9DUjMgcmVnaXN0ZXIuCisgICovCiAgIENMRUFSX0JJVChVU0FSVHgtPkNSMiwgKFVTQVJUX0NSMl9MSU5FTiB8IFVTQVJUX0NSMl9DTEtFTikpOwogICBDTEVBUl9CSVQoVVNBUlR4LT5DUjMsIChVU0FSVF9DUjNfU0NFTiB8IFVTQVJUX0NSM19JUkVOKSk7CiAgIC8qIHNldCB0aGUgVUFSVC9VU0FSVCBpbiBIYWxmIER1cGxleCBtb2RlICovCkBAIC0yODA1LDcgKzI4MDksOCBAQAogewogICAvKiBJbiBTbWFydGNhcmQgbW9kZSwgdGhlIGZvbGxvd2luZyBiaXRzIG11c3QgYmUga2VwdCBjbGVhcmVkOgogICAtIExJTkVOIGJpdCBpbiB0aGUgVVNBUlRfQ1IyIHJlZ2lzdGVyLAotICAtIElSRU4gYW5kIEhEU0VMIGJpdHMgaW4gdGhlIFVTQVJUX0NSMyByZWdpc3Rlci4qLworICAtIElSRU4gYW5kIEhEU0VMIGJpdHMgaW4gdGhlIFVTQVJUX0NSMyByZWdpc3Rlci4KKyAgKi8KICAgQ0xFQVJfQklUKFVTQVJUeC0+Q1IyLCAoVVNBUlRfQ1IyX0xJTkVOKSk7CiAgIENMRUFSX0JJVChVU0FSVHgtPkNSMywgKFVTQVJUX0NSM19JUkVOIHwgVVNBUlRfQ1IzX0hEU0VMKSk7CiAgIC8qIENvbmZpZ3VyZSBTdG9wIGJpdHMgdG8gMS41IGJpdHMgKi8KQEAgLTI4NDgsNyArMjg1Myw4IEBACiB7CiAgIC8qIEluIElSREEgbW9kZSwgdGhlIGZvbGxvd2luZyBiaXRzIG11c3QgYmUga2VwdCBjbGVhcmVkOgogICAtIExJTkVOLCBTVE9QIGFuZCBDTEtFTiBiaXRzIGluIHRoZSBVU0FSVF9DUjIgcmVnaXN0ZXIsCi0gIC0gU0NFTiBhbmQgSERTRUwgYml0cyBpbiB0aGUgVVNBUlRfQ1IzIHJlZ2lzdGVyLiovCisgIC0gU0NFTiBhbmQgSERTRUwgYml0cyBpbiB0aGUgVVNBUlRfQ1IzIHJlZ2lzdGVyLgorICAqLwogICBDTEVBUl9CSVQoVVNBUlR4LT5DUjIsIChVU0FSVF9DUjJfTElORU4gfCBVU0FSVF9DUjJfQ0xLRU4gfCBVU0FSVF9DUjJfU1RPUCkpOwogICBDTEVBUl9CSVQoVVNBUlR4LT5DUjMsIChVU0FSVF9DUjNfU0NFTiB8IFVTQVJUX0NSM19IRFNFTCkpOwogICAvKiBzZXQgdGhlIFVBUlQvVVNBUlQgaW4gSVJEQSBtb2RlICovCkBAIC0yODg2LDcgKzI4OTIsOCBAQAogewogICAvKiBJbiBNdWx0aSBQcm9jZXNzb3IgbW9kZSwgdGhlIGZvbGxvd2luZyBiaXRzIG11c3QgYmUga2VwdCBjbGVhcmVkOgogICAtIExJTkVOIGFuZCBDTEtFTiBiaXRzIGluIHRoZSBVU0FSVF9DUjIgcmVnaXN0ZXIsCi0gIC0gSVJFTiwgU0NFTiBhbmQgSERTRUwgYml0cyBpbiB0aGUgVVNBUlRfQ1IzIHJlZ2lzdGVyLiovCisgIC0gSVJFTiwgU0NFTiBhbmQgSERTRUwgYml0cyBpbiB0aGUgVVNBUlRfQ1IzIHJlZ2lzdGVyLgorICAqLwogICBDTEVBUl9CSVQoVVNBUlR4LT5DUjIsIChVU0FSVF9DUjJfTElORU4gfCBVU0FSVF9DUjJfQ0xLRU4pKTsKICAgQ0xFQVJfQklUKFVTQVJUeC0+Q1IzLCAoVVNBUlRfQ1IzX1NDRU4gfCBVU0FSVF9DUjNfSERTRUwgfCBVU0FSVF9DUjNfSVJFTikpOwogfQpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZzR4eF9sbF91dGlscy5oIGIvSW5jL3N0bTMyZzR4eF9sbF91dGlscy5oCmluZGV4IGY4Y2QxYjkuLjU1NDNmY2UgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmc0eHhfbGxfdXRpbHMuaAorKysgYi9JbmMvc3RtMzJnNHh4X2xsX3V0aWxzLmgKQEAgLTI4OCw2ICsyODgsNyBAQAogICAqLwogCiB2b2lkICAgICAgICBMTF9TZXRTeXN0ZW1Db3JlQ2xvY2sodWludDMyX3QgSENMS0ZyZXF1ZW5jeSk7CitFcnJvclN0YXR1cyBMTF9TZXRGbGFzaExhdGVuY3kodWludDMyX3QgSENMS0ZyZXF1ZW5jeSk7CiBFcnJvclN0YXR1cyBMTF9QTExfQ29uZmlnU3lzdGVtQ2xvY2tfSFNJKExMX1VUSUxTX1BMTEluaXRUeXBlRGVmICpVVElMU19QTExJbml0U3RydWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMTF9VVElMU19DbGtJbml0VHlwZURlZiAqVVRJTFNfQ2xrSW5pdFN0cnVjdCk7CiBFcnJvclN0YXR1cyBMTF9QTExfQ29uZmlnU3lzdGVtQ2xvY2tfSFNFKHVpbnQzMl90IEhTRUZyZXF1ZW5jeSwgdWludDMyX3QgSFNFQnlwYXNzLApkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZzR4eF9sbF93d2RnLmggYi9JbmMvc3RtMzJnNHh4X2xsX3d3ZGcuaAppbmRleCAxMTk2NmI4Li42ZTMxNDM2IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJnNHh4X2xsX3d3ZGcuaAorKysgYi9JbmMvc3RtMzJnNHh4X2xsX3d3ZGcuaApAQCAtMzI2LDYgKzMyNiw2IEBACiB9CiAjZW5kaWYKIAotI2VuZGlmIC8qIF9fU1RNMzJHNHh4X0xMX1dXREdfSCAqLworI2VuZGlmIC8qIFNUTTMyRzR4eF9MTF9XV0RHX0ggKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKiAoQykgQ09QWVJJR0hUIFNUTWljcm9lbGVjdHJvbmljcyAqKioqKkVORCBPRiBGSUxFKioqKi8KZGlmZiAtLWdpdCBhL1JFQURNRS5tZCBiL1JFQURNRS5tZAppbmRleCBmMjEwMDZhLi44MGU5YjIxIDEwMDY0NAotLS0gYS9SRUFETUUubWQKKysrIGIvUkVBRE1FLm1kCkBAIC0zNiw2ICszNiw5IEBACiAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFRhZyB2MS4wLjAgfCBUYWcgdjEuMC4wIHwgVGFnIHY1LjQuMF9jbTQgfCBUYWcgdjEuMC4wIChhbmQgZm9sbG93aW5nLCBpZiBhbnksIHRpbGwgbmV4dCBuZXcgdGFnKQogVGFnIHYxLjEuMCB8IFRhZyB2MS4xLjAgfCBUYWcgdjUuNC4wX2NtNCB8IFRhZyB2MS4xLjAgKGFuZCBmb2xsb3dpbmcsIGlmIGFueSwgdGlsbCBuZXh0IG5ldyB0YWcpCitUYWcgdjEuMS4xIHwgVGFnIHYxLjEuMSB8IFRhZyB2NS40LjBfY200IHwgVGFnIHYxLjIuMCAoYW5kIGZvbGxvd2luZywgaWYgYW55LCB0aWxsIG5leHQgbmV3IHRhZykKKworRGV0YWlscyBhYm91dCB0aGUgY29udGVudCBvZiB0aGlzIHJlbGVhc2UgYXJlIGF2YWlsYWJsZSBpbiB0aGUgcmVsZWFzZSBub3RlIFtoZXJlXShodHRwczovL2h0bWxwcmV2aWV3LmdpdGh1Yi5pby8/aHR0cHM6Ly9naXRodWIuY29tL1NUTWljcm9lbGVjdHJvbmljcy9zdG0zMmc0eHhfaGFsX2RyaXZlci9ibG9iL21hc3Rlci9SZWxlYXNlX05vdGVzLmh0bWwpLiAKIAogVGhlIGZ1bGwgKipTVE0zMkN1YmVHNCoqIE1DVSBwYWNrYWdlIGlzIGF2YWlsYWJsZSBbaGVyZV0oaHR0cHM6Ly9naXRodWIuY29tL1NUTWljcm9lbGVjdHJvbmljcy9TVE0zMkN1YmVHNCkuCiAKZGlmZiAtLWdpdCBhL1JlbGVhc2VfTm90ZXMuaHRtbCBiL1JlbGVhc2VfTm90ZXMuaHRtbAppbmRleCBjYTE4NDk1Li44MjUwZDcwIDEwMDY0NAotLS0gYS9SZWxlYXNlX05vdGVzLmh0bWwKKysrIGIvUmVsZWFzZV9Ob3Rlcy5odG1sCkBAIC01LDcgKzUsNyBAQAogICA8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9InBhbmRvYyIgLz4KICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAsIHVzZXItc2NhbGFibGU9eWVzIiAvPgogICA8dGl0bGU+UmVsZWFzZSBOb3RlcyBmb3IgU1RNMzJHNHh4IEhBTCBEcml2ZXJzPC90aXRsZT4KLSAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKyAgPHN0eWxlPgogICAgICAgY29kZXt3aGl0ZS1zcGFjZTogcHJlLXdyYXA7fQogICAgICAgc3Bhbi5zbWFsbGNhcHN7Zm9udC12YXJpYW50OiBzbWFsbC1jYXBzO30KICAgICAgIHNwYW4udW5kZXJsaW5le3RleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO30KQEAgLTQ2LDEwICs0NiwyMTcgQEAKIDxkaXYgY2xhc3M9ImNvbC1zbS0xMiBjb2wtbGctOCI+CiA8aDEgaWQ9InVwZGF0ZS1oaXN0b3J5Ij5VcGRhdGUgSGlzdG9yeTwvaDE+CiA8ZGl2IGNsYXNzPSJjb2xsYXBzZSI+Ci08aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJjb2xsYXBzZS1zZWN0aW9uMiIgY2hlY2tlZCBhcmlhLWhpZGRlbj0idHJ1ZSI+IDxsYWJlbCBmb3I9ImNvbGxhcHNlLXNlY3Rpb24xIiBhcmlhLWhpZGRlbj0idHJ1ZSI+VjEuMS4wIC8gMjgtSnVuZS0yMDE5PC9sYWJlbD4KKzxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb24zIiBjaGVja2VkIGFyaWEtaGlkZGVuPSJ0cnVlIj4gPGxhYmVsIGZvcj0iY29sbGFwc2Utc2VjdGlvbjMiIGFyaWEtaGlkZGVuPSJ0cnVlIj5WMS4xLjEgLyAxNC1GZWJydWFyeS0yMDIwPC9sYWJlbD4KIDxkaXY+CiA8aDIgaWQ9Im1haW4tY2hhbmdlcyI+TWFpbiBDaGFuZ2VzPC9oMj4KIDxoMyBpZD0ibWFpbnRlbmFuY2UtcmVsZWFzZSI+TWFpbnRlbmFuY2UgUmVsZWFzZTwvaDM+Cis8dWw+Cis8bGk+PHA+R2VuZXJhbCB1cGRhdGVzIHRvIGZpeCBrbm93biBkZWZlY3RzIGFuZCBlbmhhbmNlbWVudHMgaW1wbGVtZW50YXRpb248L3A+PC9saT4KKzxsaT48cD48c3Ryb25nPkhBTC9MTCBDUllQPC9zdHJvbmc+IHVwZGF0ZTwvcD4KKzx1bD4KKzxsaT5Db3JyZWN0IE1JU1JBIEM6MjAxMiB3YXJuaW5ncyByZXBvcnRlZCBieSBydWxlcyAyLjJfYywgMTAuMV9SNiwgMTAuMywgMTAuNF9hLCAxMC42LCAxMi4xLCAxMy41IDE1Ljc8L2xpPgorPGxpPlBlcmZvcm0gYSBuZXcgY2hlY2sgbWVjaGFuaXNtIG9uIHRoZSBjcnlwIGJ1ZmZlciBzaXplIGluIEVuY3J5cHRpb24gZXQgRGVjcnlwdGlvbiBBUEkKKzx1bD4KKzxsaT5BZGQgSVNfQ1JZUF9CVUZGRVJTSVpFKCkgbWFjcm88L2xpPgorPC91bD48L2xpPgorPGxpPkNsZWFuIHVwIHRoZSBIQUxfQ1JZUF9SZXN1bWUoKSBBUEkgdG8gYXZvaWQgaW5maW5pdGUgbG9vcCBkdWUgdG8gYW4gZWFybHkgaW50ZXJydXB0aW9uIGR1cmluZyByZXN1bXB0aW9uIHByb2Nlc3MKKzx1bD4KKzxsaT5SZW1vdmUgX19IQUxfQ1JZUF9FTkFCTEVfSVQoKSBhbmQgX19IQUxfQ1JZUF9FTkFCTEUoKSBBUEkgLjwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+QWRkIG5ldyBwYXJhbWV0ZXIgaW4gdGhlIENSWVBfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUKKzx1bD4KKzxsaT5BZGQgU2l6ZXNTdW1fc2F2ZWQgdG8gc2F2ZSB0aGUgU2l6ZXNTdW0gd2hlbiBwcm9jZXNzaW5nIGlzIHN1c3BlbmRlZDwvbGk+Cis8bGk+VXBkYXRlIHRoZSBIQUxfQ1JZUF9TdXNwZW5kKCkgYW5kIEhBTF9DUllQX1Jlc3VtZSgpIEFQSSBieSBhZGRpbmcgdGhpcyBuZXcgcGFyYW1ldGVyPC9saT4KKzwvdWw+PC9saT4KKzxsaT5BZGQgbWlzc2luZyBpbnRlcnJ1cHRpb25zIHJlLWVuYWJsaW5nIG9wZXJhdGlvbnMgZm9sbG93aW5nIGFuIGFsbCBmbGFncyBjbGVhci11cCBpbiB0aGUgQ1JZUF9QaGFzZVByb2Nlc3NpbmdSZXN1bWUoKSBBUEk8L2xpPgorPGxpPlN1cHBvcnQgQUFEIHdpdGggYWxsIHBvc3NpYmxlIGJ5dGUgc2l6ZXMsIG5vdCBvbmx5IG11bHRpcGxlIG9mIDQgYnl0ZXMKKzx1bD4KKzxsaT5VcGRhdGUgQ1JZUF9HQ01DQ01fU2V0SGVhZGVyUGhhc2UoKSBBUEk8L2xpPgorPGxpPkFkZCBuZXcgcGFyYW1ldGVyIEhlYWRlcldpZHRoVW5pdCBpbiB0aGUgQ1JZUF9Db25maWdUeXBlRGVmIHN0cnVjdHVyZSB3aGljaCBjb250YWlucyB0aGUgQ3J5cCBIZWFkZXIgV2lkdGggVW5pdDwvbGk+Cis8bGk+QWRkIG5ldyBkZWZpbml0aW9uIG9mIHRoZSBDUllQIEhlYWRlciBzaXplIFVuaXQKKzx1bD4KKzxsaT5DUllQX0hFQURFUldJRFRIVU5JVF9XT1JEPC9saT4KKzxsaT5DUllQX0hFQURFUldJRFRIVU5JVF9CWVRFPC9saT4KKzwvdWw+PC9saT4KKzwvdWw+PC9saT4KKzxsaT5TdXBwb3J0IGRhdGEgZW5jcnlwdGlvbiBhbmQgZGVjcnlwdGlvbiB3aXRoIGxlbmd0aCBub3Qgb25seSBtdWx0aXBsZSBvZiAxNiBieXRlcworPHVsPgorPGxpPlVwZGF0ZSBJU19DUllQX0JVRkZFUlNJWkUoKSBtYWNybzwvbGk+Cis8bGk+VXBkYXRlIEFFUyBmdW5jdGlvbnMgOiBDUllQX0FFU19Qcm9jZXNzRGF0YSgpIC8gQ1JZUF9BRVNfSVQoKSAvIENSWVBfQUVTQ0NNX1Byb2Nlc3MoKSAvIENSWVBfQUVTR0NNX1Byb2Nlc3NfRE1BKCk8L2xpPgorPGxpPlVwZGF0ZSBDUllQX0dDTUNDTV9TZXRQYXlsb2FkUGhhc2VfSVQoKSBBUEk8L2xpPgorPC91bD48L2xpPgorPC91bD48L2xpPgorPGxpPjxwPjxzdHJvbmc+SEFML0xMIEZNQUM8L3N0cm9uZz4gdXBkYXRlPC9wPgorPHVsPgorPGxpPkdlbmVyYWwgdXBkYXRlcyB0byBjb21wbHkgdG8gaW50ZXJuYWwgY29kaW5nIHJ1bGVzLjwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+PHA+PHN0cm9uZz5IQUwgR1BJTzwvc3Ryb25nPiB1cGRhdGU8L3A+Cis8dWw+Cis8bGk+VXBkYXRlIHRoZSBHUElPIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIGluIEhBTF9HUElPX0luaXQoKSBBUEkgdG8gYXZvaWQgdW53YW50ZWQgZ2xpdGNoZXMgb24gR1BJTyBwaW5zLjwvbGk+Cis8bGk+QWRkIG1pc3NpbmcgR1BJTyBBbHRlcm5hdGUgRnVuY3Rpb24gZGVmaW5pdGlvbnM6Cis8dWw+Cis8bGk+R1BJT19BRjJfVElNMTYsIEdQSU9fQUY5X1RJTTgsIEdQSU9fQUYxMV9USU04LCBHUElPX0FGMTJfVElNMS48L2xpPgorPC91bD48L2xpPgorPC91bD48L2xpPgorPGxpPjxwPjxzdHJvbmc+SEFMIEhSVElNPC9zdHJvbmc+IHVwZGF0ZTwvcD4KKzx1bD4KKzxsaT5VcGRhdGUgSEFMX0hSVElNX1dhdmVmb3JtQ29tcGFyZUNvbmZpZygpIHRvIGNsZWFyIEhSVElNX1RJTXhDUi5ERUxDTVAgYml0ZmllbGQgd2hlbiB0aGUgYXV0by1kZWxheWVkIHByb3RlY3Rpb24gbW9kZSBpcyBkaXNhYmxlZC48L2xpPgorPGxpPkNvcnJlY3Qgc29tZSDigJxIUlRJTV9PVVRQVVRTRVRfVElNeHjigJ0gY29uc3RhbnQgbmFtZXMgd2hpY2ggYXJlIG5vdCBjb21wbGlhbnQgd2l0aCBUaW1lciBFdmVudHMgTWFwcGluZyBzcGVjaWZpZWQgaW4gdGhlIHJlZmVyZW5jZSBtYW51YWwKKzx1bD4KKzxsaT5SZW1vdmUgSFJUSU1fT1VUUFVUU0VUX1RJTUNFVjFfVElNQUNNUDEsIEhSVElNX09VVFBVVFNFVF9USU1FRVY1X1RJTURDTVAyICwgSFJUSU1fT1VUUFVUUkVTRVRfVElNQ0VWMV9USU1BQ01QMSBhbmQgSFJUSU1fT1VUUFVUUkVTRVRfVElNRUVWNV9USU1EQ01QMjwvbGk+Cis8bGk+QWRkIEhSVElNX09VVFBVVFNFVF9USU1FRVY1X1RJTUNDTVAyIGFuZCBIUlRJTV9PVVRQVVRTRVRfVElNQ0VWMl9USU1BQ01QMyAsIEhSVElNX09VVFBVVFJFU0VUX1RJTUNFVjJfVElNQUNNUDMgYW5kIEhSVElNX09VVFBVVFJFU0VUX1RJTUVFVjVfVElNQ0NNUDI8L2xpPgorPGxpPlVwZGF0ZSBIUlRJTV9PVVRQVVRTRVRfVElNQ0VWMl9USU1BQ01QMiBhbmQgSFJUSU1fT1VUUFVUUkVTRVRfVElNQ0VWMl9USU1BQ01QMiBkZWZpbml0aW9uczwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+VXBkYXRlIEhBTF9IUlRJTV9ETExDYWxpYnJhdGlvblN0YXJ0KCkgYW5kIEhBTF9IUlRJTV9ETExDYWxpYnJhdGlvblN0YXJ0X0lUKCkgQVBJIGJ5IHNldHRpbmcgSFJUSU0gc3RhdGUgcmVhZHkgdG8gYXZvaWQgc29tZSB1bnN0YWJsZSBiZWhhdmlvciBvZiB0aGUgVElNRVIgRS48L2xpPgorPGxpPkFkZCBuZXcgY2hlY2sgZmllbGQgaW4gdGhlIElTX0hSVElNX0VWRU5UU1JDKCkgbWFjcm8gdG8gY2hlY2sgYWxzbyBvbiBFVkVOVDwvbGk+Cis8bGk+QWRkIGEgbmV3IGNoZWNrIGluIHRoZSBIQUxfSFJUSU1fRXZlbnRDb25maWcoKSBBUEkgb24gZXZlbnQgYW5kIGV2ZW50IHNvdXJjZSB0aHJ1IHRoZSBJU19IUlRJTV9FVkVOVFNSQygpIG1hY3JvPC9saT4KKzxsaT5SZW1vdmUgVVBER0FUIGJpdHMgcmVzZXQgZnJvbSB0aGUgSFJUSU1fVGltaW5nVW5pdFdhdmVmb3JtX0NvbnRyb2woKSBBUEk8L2xpPgorPGxpPkFkZCBhIGxvY2sgYW5kIHVubG9jayBoYW5kbGUgcHJvY2VzcyBpbiB0aGUgSEFMX0hSVElNX1NpbXBsZU9DQ2hhbm5lbENvbmZpZygpIEFQSTwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+PHA+PHN0cm9uZz5IQUwgSTJDPC9zdHJvbmc+IHVwZGF0ZTwvcD4KKzx1bD4KKzxsaT5VcGRhdGUgSEFMIEkyQyBwcm9jZXNzZXMgdG8gcmVwb3J0IEVycm9yQ29kZSB3aGVuIHdyb25nIEkyQyBzdGFydCBjb25kaXRpb25vY2N1cnMKKzx1bD4KKzxsaT5BZGQgbmV3IEVycm9yQ29kZSBkZWZpbmU6IEhBTF9JMkNfV1JPTkdfU1RBUlQ8L2xpPgorPGxpPlNldCBFcnJvckNvZGUgcGFyYW1ldGVyIGluIEkyQyBoYW5kbGUgdG8gSEFMX0kyQ19XUk9OR19TVEFSVDwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+VXBkYXRlIEkyQ19ETUFBYm9ydCgpIEFQSXMgdG8gZml4IGhhcmRmYXVsdCBpc3N1ZSB3aGVuIGhkbWF0eCBhbmQgaGRtYXJ4IHBhcmFtZXRlcnMgaW4gaTJjIGhhbmRsZSBhcmVu4oCZdCBpbml0aWFsaXplZCAoTlVMTCBwb2ludGVyKS4KKzx1bD4KKzxsaT5BZGQgYWRkaXRpb25hbCBjaGVjayBvbiBoaTJjLSZndDtoZG10eCBhbmQgaGkyYy0mZ3Q7aGRtYXJ4IGJlZm9yZSByZXNldHRpbmcgRE1BIFR4L1J4IGNvbXBsZXRlIGNhbGxiYWNrczwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+Rml4IEhBTCBJMkMgc2xhdmUgaW50ZXJydXB0IGhhbmRsaW5nIGlzc3VlIHdpdGggSTJDIHNlcXVlbnRpYWwgdHJhbnNmZXJzLgorPHVsPgorPGxpPlVwZGF0ZSBJMkNfU2xhdmVfSVNSX0lUKCkgYW5kIEkyQ19TbGF2ZV9JU1JfRE1BKCkgQVBJcyB0byBjaGVjayBvbiBTVE9QIGNvbmRpdGlvbiBhbmQgaGFuZGxlIGl0IGJlZm9yZSBjbGVhcmluZyB0aGUgQUREUiBmbGFnPC9saT4KKzwvdWw+PC9saT4KKzwvdWw+PC9saT4KKzxsaT48cD48c3Ryb25nPkhBTCBMUFRJTTwvc3Ryb25nPiB1cGRhdGU8L3A+Cis8dWw+Cis8bGk+QWRkIGEgcG9sbGluZyBtZWNoYW5pc20gdG8gY2hlY2sgb24gTFBUSU1fRkxBR19YWE9LIGZsYWdzIGluIGRpZmZlcmVudCBBUEkKKzx1bD4KKzxsaT5BZGQgTFBUSU1fV2FpdEZvckZsYWcoKSBBUEkgdG8gd2FpdCBmb3IgZmxhZyBzZXQuPC9saT4KKzxsaT5QZXJmb3JtIG5ldyBjaGVja3Mgb24gSEFMX0xQVElNX1NUQVRFX1RJTUVPVVQuPC9saT4KKzwvdWw+PC9saT4KKzxsaT5BcHBseSBkaWdpdGFsIGZpbHRlciBmb3IgZXh0ZXJuYWwgY2xvY2sgZm9yIGFsbCBMUFRJTSBjbG9jayBzb3VyY2UuCis8dWw+Cis8bGk+VXBkYXRlIEhBTF9MUFRJTV9Jbml0KCkgQVBJPC9saT4KKzwvdWw+PC9saT4KKzxsaT5Db3JyZWN0IHRoZSBpbnB1dDFzb3VyY2UgYW5kIGlucHV0MnNvdXJjZSBzZWxlY3Rpb24KKzx1bD4KKzxsaT5VcGRhdGUgTExfTFBUSU1fU2V0SW5wdXQxU3JjIGFuZCBMTF9MUFRJTV9TZXRJbnB1dDJTcmMKKzx1bD4KKzxsaT5SZW1vdmUgV1JJVEVfUkVHIGFuZCByZXBsYWNlIGl0IGJ5IE1PRElGWV9SRUc8L2xpPgorPC91bD48L2xpPgorPC91bD48L2xpPgorPC91bD48L2xpPgorPGxpPjxwPjxzdHJvbmc+SEFML0xMIFJUQzwvc3Ryb25nPiB1cGRhdGU8L3A+Cis8dWw+Cis8bGk+VXBkYXRlIEFQSSBIQUxfUlRDX1NldEFsYXJtX0lUKCkgdG8gYWxsb3cgY2hhbmdpbmcgYWxhcm0gdGltZSDigJxvbiB0aGUgZmx54oCdIHNpbXBseSBieSBjYWxsaW5nIHRoZSBBUEkgYWdhaW4uPC9saT4KKzxsaT5VcGRhdGUgQVBJIExMX1JUQ19CS1BfU2V0UmVnaXN0ZXIoKSBhbmQgQVBJIExMX1JUQ19CS1BfR2V0UmVnaXN0ZXIoKSB0byBjb21wbHkgdG8gcnVsZXMgMi4yIGFuZCAxMy4yIG9mIE1JU1JBQy0yMDEyLjwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+PHA+PHN0cm9uZz5IQUwgU1BJPC9zdHJvbmc+IHVwZGF0ZTwvcD4KKzx1bD4KKzxsaT5VcGRhdGUgdGhlIOKAnFJ4IERNQSB0cmFuc2ZlciBjb21wbGV0ZSBjYWxsYmFja+KAncKgdG8gZGlzYWJsZSB0aGUgVHggRE1BIHJlcXVlc3Qgb25seSBpbiBjYXNlIG9mIGZ1bGwtZHVwbGV4IG1vZGUgYW5kIG5vdCBpdCBpbiBoYWxmLWR1cGxleCBtb2RlLjwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+PHA+PHN0cm9uZz5IQUwgVElNPC9zdHJvbmc+IHVwZGF0ZTwvcD4KKzx1bD4KKzxsaT5VcGRhdGUgRW5jb2RlciBpbnRlcmZhY2UgbW9kZSB0byBrZWVwIFRJTV9DQ0VSX0NDeE5QIGJpdHMgbG93Cis8dWw+Cis8bGk+QWRkIFRJTV9FTkNPREVSSU5QVVRQT0xBUklUWV9SSVNJTkcgYW5kIFRJTV9FTkNPREVSSU5QVVRQT0xBUklUWV9GQUxMSU5HIGRlZmluaXRpb25zIHRvIGRldGVybWluZSBlbmNvZGVyIGlucHV0IHBvbGFyaXR5LjwvbGk+Cis8bGk+QWRkIElTX1RJTV9FTkNPREVSSU5QVVRfUE9MQVJJVFkoKSBtYWNybyB0byBjaGVjayB0aGUgZW5jb2RlciBpbnB1dCBwb2xhcml0eS48L2xpPgorPGxpPlVwZGF0ZSBIQUxfVElNX0VuY29kZXJfSW5pdCgpIEFQSQorPHVsPgorPGxpPlJlcGxhY2UgSVNfVElNX0lDX1BPTEFSSVRZKCkgbWFjcm8gYnkgSVNfVElNX0VOQ09ERVJJTlBVVF9QT0xBUklUWSgpIG1hY3JvLjwvbGk+Cis8L3VsPjwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+UHJvdmlkZSBuZXcgQVBJIHRvIHNldCBhbmQgY2xlYXIgVUlGUkVNQVAKKzx1bD4KKzxsaT5BZGQgbmV3IGRlZmluaXRpb24gZm9yIFRJTSBVcGRhdGUgSW50ZXJydXB0IEZsYWcgUmVtYXAKKzx1bD4KKzxsaT5USU1fVUlGUkVNQVBfRElTQUJMRTwvbGk+Cis8bGk+VElNX1VJRlJFTUFQX0VOQUJMRTwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+QWRkIG5ldyBtYWNybyBpbiBIQUwgZHJpdmVyIHRvIGVuYWJsZSBhbmQgZGVzYWJsZSB0aGUgVXBkYXRlIEludGVycnVwdCBGbGFnIFJlbWFwCis8dWw+Cis8bGk+X19IQUxfVElNX1VJRlJFTUFQX0VOQUJMRSgpPC9saT4KKzxsaT5fX0hBTF9USU1fVUlGUkVNQVBfRElTQUJMRSgpL19fSEFMX1RJTV9HRVRfVUlGQ1BZIG1hY3JvPC9saT4KKzwvdWw+PC9saT4KKzxsaT5BZGQgbmV3IG1lY2FuaXNtIHRvIGNoZWNrIHdoZXRoZXIgdGhlIHVwZGF0ZSBpbnRlcnJ1cHQgZmxhZyAoVUlGKSBjb3B5IGlzIHNldCBvciBub3QKKzx1bD4KKzxsaT5BZGQgdGhlIF9fSEFMX1RJTV9HRVRfVUlGQ1BZKCkgbWFjcm8gaW4gdGhlIEhBTCBkcml2ZXI8L2xpPgorPGxpPkFkZCBMTF9USU1fSXNBY3RpdmVVSUZDUFkoKSBBUEkgaW4gdGhlIExMIGRyaXZlcjwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+QWRkIG5ldyBtYWNybyB0byBjaGVjayBvbiB0aGUgVXBkYXRlIEludGVycnVwdCBGbGFnIFJlbWFwIG1vZGUKKzx1bD4KKzxsaT5JU19USU1fVUlGUkVNQVBfTU9ERSgpPC9saT4KKzwvdWw+PC9saT4KKzwvdWw+PC9saT4KKzxsaT5SZW1vdmUgdXNlbGVzcyBUSU0gdHJpZ2dlciBzZWxlY3RvcjwvbGk+Cis8bGk+Rml4IGJ1ZyB3aGVuIHVzaW5nIG11bHRpcGxlIERNQSByZXF1ZXN0IHRvIGRpZmZlcmVudCBjaGFubmVscyBvZiBzYW1lIHRpbWVyCis8dWw+Cis8bGk+SW50cm9kdWNlIERNQSBidXJzdCBzdGF0ZSBtYW5hZ21lbnQgbWVjaGFuaXNtCis8dWw+Cis8bGk+QWRkIGEgbmV3IHN0dWN0dXJlIGZvciBETUEgQnVyc3QgU3RhdGVzIGRlZmluaXRpb24gOiBIQUxfVElNX0RNQUJ1cnN0U3RhdGVUeXBlRGVmPC9saT4KKzxsaT5VcGRhdGUgX19IQUxfVElNX1JFU0VUX0hBTkRMRV9TVEFURSB0byBzdXBwb3J0IERNQUJ1cnN0U3RhdGU8L2xpPgorPGxpPkFkZCBhIG5ldyBBUEkgSEFMX1RJTV9ETUFCdXJzdFN0YXRlKCkgdG8gZ2V0IHRoZSBhY3R1YWwgc3RhdGUgb2YgYSBETUEgYnVyc3Qgb3BlcmF0aW9uPC9saT4KKzxsaT5BZGQgRE1BQnVyc3RTdGF0ZSwgdGhlIERNQSBidXJzdCBvcGVyYXRpb24gc3RhdGUsIGluIHRoZSBUSU1fSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmU8L2xpPgorPGxpPkFkZCBuZXcgQVBJIFRJTV9ETUFFcnJvckNDeE4oKSBmb3IgVElNIERNQSBlcnJvciBjYWxsYmFjayAoY29tcGxlbWVudGFyeSBjaGFubmVsKTwvbGk+Cis8bGk+QWRkIG5ldyBBUEkgVElNX0RNQURlbGF5UHVsc2VOQ3BsdCgpIGZvciBUSU0gRE1BIERlbGF5IFB1bHNlIGNvbXBsZXRlIGNhbGxiYWNrIChjb21wbGVtZW50YXJ5IGNoYW5uZWwpPC9saT4KKzwvdWw+PC9saT4KKzwvdWw+PC9saT4KKzxsaT5JbXBsZW1lbnQgVElNIGNoYW5uZWwgc3RhdGUgbWFuYWdtZW50IG1lY2hhbmlzbQorPHVsPgorPGxpPkFkZCBuZXcgbWFjcm8KKzx1bD4KKzxsaT5USU1fQ0hBTk5FTF9TVEFURV9TRVRfQUxMIGFuZCBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVF9BTEw8L2xpPgorPGxpPlRJTV9DSEFOTkVMX1NUQVRFX1NFVCBhbmQgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQ8L2xpPgorPGxpPlRJTV9DSEFOTkVMX1NUQVRFX0dFVCBhbmQgVElNX0NIQU5ORUxfTl9TVEFURV9HRVQ8L2xpPgorPC91bD48L2xpPgorPGxpPkFkZCBuZXcgQVBJIEhBTF9USU1fR2V0QWN0aXZlQ2hhbm5lbCgpPC9saT4KKzxsaT5BZGQgbmV3IEFQSSBIQUxfVElNX0dldENoYW5uZWxTdGF0ZSgpIHRvIGdldCBhY3R1YWwgc3RhdGUgb2YgdGhlIFRJTSBjaGFubmVsPC9saT4KKzxsaT5BZGQgYSBuZXcgc3R1Y3R1cmUgZm9yIFRJTSBjaGFubmVsIFN0YXRlcyBkZWZpbml0aW9uIDogSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmPC9saT4KKzxsaT5VcGRhdGUgX19IQUxfVElNX1JFU0VUX0hBTkRMRV9TVEFURSB0byBzdXBwb3J0IENoYW5uZWxTdGF0ZSBhbmQgQ2hhbm5lbE5TdGF0ZTwvbGk+Cis8bGk+QWRkIGEgbmV3IGVsZW1lbnQgaW4gdGhlIFRJTV9IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSA6IENoYW5uZWxTdGF0ZSB0byBtYW5hZ2UgVElNIGNoYW5uZWwgb3BlcmF0aW9uIHN0YXQuPC9saT4KKzxsaT5BZGQgYSBuZXcgZWxlbWVudCBpbiB0aGUgVElNX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIDogQ2hhbm5lbE5TdGF0ZSB0byBtYW5hZ2UgVElNIGNvbXBsZW1lbnRhcnkgY2hhbm5lbCBvcGVyYXRpb24gc3RhdGU8L2xpPgorPC91bD48L2xpPgorPC91bD48L2xpPgorPGxpPjxwPjxzdHJvbmc+SEFML0xMIFVTQVJUPC9zdHJvbmc+IHVwZGF0ZTwvcD4KKzx1bD4KKzxsaT5BZGQgc3VwcG9ydCB0byB0aGUgUmVjZWl2ZXIgVGltZW91dCBJbnRlcnJ1cHQgaW4gdGhlIEhBTF9VU0FSVF9JUlFIYW5kbGVyPC9saT4KKzxsaT5GaXggd3JvbmcgdmFsdWUgZm9yIFNsYXZlTW9kZSBmaWVsZCBpbiBVU0FSVCBoYW5kbGUgYWZ0ZXIgSEFMX1VTQVJURXhfRGlzYWJsZVNsYXZlTW9kZSgpIGNhbGwKKzx1bD4KKzxsaT5TZXQgVVNBUlRfU0xBVkVNT0RFX0RJU0FCTEUgaW5zdGVhZCBvZiBVU0FSVF9TTEFWRU1PREVfRU5BQkxFPC9saT4KKzwvdWw+PC9saT4KKzwvdWw+PC9saT4KKzxsaT48cD48c3Ryb25nPkhBTCBVU0I8L3N0cm9uZz4gdXBkYXRlPC9wPgorPHVsPgorPGxpPkltcHJvdmUgVVNCIGVuZHBvaW50IG91dCByZS1lbmFibGluZyB3aXRoIGRvdWJsZS1idWZmZXIgbW9kZS48L2xpPgorPC91bD48L2xpPgorPGxpPjxwPjxzdHJvbmc+TEwgVVRJTFM8L3N0cm9uZz4gdXBkYXRlPC9wPgorPHVsPgorPGxpPkFQSSBVVElMU19TZXRGbGFzaExhdGVuY3koKSByZW5hbWVkIExMX1NldEZsYXNoTGF0ZW5jeSgpIGFuZCBzZXQgZXhwb3J0YWJsZS48L2xpPgorPGxpPkFQSSBMTF9QTExfQ29uZmlnU3lzdGVtQ2xvY2tfSFNJKCkgYW5kIEFQSSBMTF9QTExfQ29uZmlnU3lzdGVtQ2xvY2tfSFNFKCkgdXBkYXRlZCB0byBzZXQgYmFjayB0aGUgQUhCIHByZXNjYWxlciB0byAxIGFmdGVyIGl0IGhhcyBiZWVuIHRlbXBvcmFyaWx5IHNldCB0byAyIHRvIGF2b2lkIHVuZGVyc2hvb3Qgd2hlbiBjb25maWd1cmluZyBQTEwgYXQgaGlnaCBmcmVxdWVuY2llcy48L2xpPgorPC91bD48L2xpPgorPC91bD4KKzxoMiBpZD0iZGV2ZWxvcG1lbnQtdG9vbGNoYWlucy1hbmQtY29tcGlsZXJzIj5EZXZlbG9wbWVudCBUb29sY2hhaW5zIGFuZCBDb21waWxlcnM8L2gyPgorPHVsPgorPGxpPklBUiBFbWJlZGRlZCBXb3JrYmVuY2ggZm9yIEFSTSAoRVdBUk0pIHRvb2xjaGFpbiBWOC4zMi4zPC9saT4KKzxsaT5SZWFsVmlldyBNaWNyb2NvbnRyb2xsZXIgRGV2ZWxvcG1lbnQgS2l0IChNREstQVJNKSB0b29sY2hhaW4gVjUuMjcuMTwvbGk+Cis8bGk+U3lzdGVtIFdvcmtiZW5jaCBTVE0zMiAoU1c0U1RNMzIpIHRvb2xjaGFpbiBWMi45LjA8L2xpPgorPC91bD4KKzxoMiBpZD0ic3VwcG9ydGVkLWRldmljZXMiPlN1cHBvcnRlZCBEZXZpY2VzPC9oMj4KKzx1bD4KKzxsaT5TVE0zMkc0MzEvNDF4eDwvbGk+Cis8bGk+U1RNMzJHNDcxeHg8L2xpPgorPGxpPlNUTTMyRzQ3My88c3Ryb25nPjgzeHg8L3N0cm9uZz48L2xpPgorPGxpPlNUTTMyRzQ3NC84NHh4PC9saT4KKzwvdWw+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iY29sbGFwc2UiPgorPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iY29sbGFwc2Utc2VjdGlvbjIiIGNoZWNrZWQgYXJpYS1oaWRkZW49InRydWUiPiA8bGFiZWwgZm9yPSJjb2xsYXBzZS1zZWN0aW9uMiIgYXJpYS1oaWRkZW49InRydWUiPlYxLjEuMCAvIDI4LUp1bmUtMjAxOTwvbGFiZWw+Cis8ZGl2PgorPGgyIGlkPSJtYWluLWNoYW5nZXMtMSI+TWFpbiBDaGFuZ2VzPC9oMj4KKzxoMyBpZD0ibWFpbnRlbmFuY2UtcmVsZWFzZS0xIj5NYWludGVuYW5jZSBSZWxlYXNlPC9oMz4KIDxwPk1haW50ZW5hbmNlIHJlbGVhc2Ugb2YgSEFMIChIYXJkd2FyZSBBYnN0cmFjdGlvbiBMYXllcikgYW5kIExMIChMb3cgbGF5ZXJzKSBkcml2ZXJzIHRvIHN1cHBvcnQgU1RNMzJHNDMxLzQxeHgsIFNUTTMyRzQ3MXh4LCBTVE0zMkc0NzMvODN4eCBhbmQgU1RNMzJHNDc0Lzg0eHguPC9wPgogPGgyIGlkPSJjb250ZW50cyI+Q29udGVudHM8L2gyPgogPHRhYmxlPgpAQCAtMTMyLDEzICszMzksMTMgQEAKIDwvdHI+CiA8L3Rib2R5PgogPC90YWJsZT4KLTxoMiBpZD0iZGV2ZWxvcG1lbnQtdG9vbGNoYWlucy1hbmQtY29tcGlsZXJzIj5EZXZlbG9wbWVudCBUb29sY2hhaW5zIGFuZCBDb21waWxlcnM8L2gyPgorPGgyIGlkPSJkZXZlbG9wbWVudC10b29sY2hhaW5zLWFuZC1jb21waWxlcnMtMSI+RGV2ZWxvcG1lbnQgVG9vbGNoYWlucyBhbmQgQ29tcGlsZXJzPC9oMj4KIDx1bD4KIDxsaT5JQVIgRW1iZWRkZWQgV29ya2JlbmNoIGZvciBBUk0gKEVXQVJNKSB0b29sY2hhaW4gVjguMjAuMjwvbGk+CiA8bGk+UmVhbFZpZXcgTWljcm9jb250cm9sbGVyIERldmVsb3BtZW50IEtpdCAoTURLLUFSTSkgdG9vbGNoYWluIFY1LjI1PC9saT4KIDxsaT5TeXN0ZW0gV29ya2JlbmNoIFNUTTMyIChTVzRTVE0zMikgdG9vbGNoYWluIFYyLjcuMjwvbGk+CiA8L3VsPgotPGgyIGlkPSJzdXBwb3J0ZWQtZGV2aWNlcyI+U3VwcG9ydGVkIERldmljZXM8L2gyPgorPGgyIGlkPSJzdXBwb3J0ZWQtZGV2aWNlcy0xIj5TdXBwb3J0ZWQgRGV2aWNlczwvaDI+CiA8dWw+CiA8bGk+U1RNMzJHNDMxLzQxeHg8L2xpPgogPGxpPlNUTTMyRzQ3MXh4PC9saT4KQEAgLTE1MCwxNiArMzU3LDE2IEBACiA8ZGl2IGNsYXNzPSJjb2xsYXBzZSI+CiA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJjb2xsYXBzZS1zZWN0aW9uMSIgYXJpYS1oaWRkZW49InRydWUiPiA8bGFiZWwgZm9yPSJjb2xsYXBzZS1zZWN0aW9uMSIgYXJpYS1oaWRkZW49InRydWUiPlYxLjAuMCAvIDEyLUFwcmlsLTIwMTk8L2xhYmVsPgogPGRpdj4KLTxoMiBpZD0ibWFpbi1jaGFuZ2VzLTEiPk1haW4gQ2hhbmdlczwvaDI+Cis8aDIgaWQ9Im1haW4tY2hhbmdlcy0yIj5NYWluIENoYW5nZXM8L2gyPgogPGgzIGlkPSJmaXJzdC1yZWxlYXNlIj5GaXJzdCByZWxlYXNlPC9oMz4KIDxwPkZpcnN0IG9mZmljaWFsIHJlbGVhc2Ugb2YgSEFMIChIYXJkd2FyZSBBYnN0cmFjdGlvbiBMYXllcikgYW5kIExMIChMb3cgbGF5ZXJzKSBkcml2ZXJzIHRvIHN1cHBvcnQgU1RNMzJHNDMxLzQxeHgsIFNUTTMyRzQ3MXh4LCBTVE0zMkc0NzMvODN4eCBhbmQgU1RNMzJHNDc0Lzg0eHguPC9wPgotPGgyIGlkPSJkZXZlbG9wbWVudC10b29sY2hhaW5zLWFuZC1jb21waWxlcnMtMSI+RGV2ZWxvcG1lbnQgVG9vbGNoYWlucyBhbmQgQ29tcGlsZXJzPC9oMj4KKzxoMiBpZD0iZGV2ZWxvcG1lbnQtdG9vbGNoYWlucy1hbmQtY29tcGlsZXJzLTIiPkRldmVsb3BtZW50IFRvb2xjaGFpbnMgYW5kIENvbXBpbGVyczwvaDI+CiA8dWw+CiA8bGk+SUFSIEVtYmVkZGVkIFdvcmtiZW5jaCBmb3IgQVJNIChFV0FSTSkgdG9vbGNoYWluIFY4LjIwLjI8L2xpPgogPGxpPlJlYWxWaWV3IE1pY3JvY29udHJvbGxlciBEZXZlbG9wbWVudCBLaXQgKE1ESy1BUk0pIHRvb2xjaGFpbiBWNS4yNTwvbGk+CiA8bGk+U3lzdGVtIFdvcmtiZW5jaCBTVE0zMiAoU1c0U1RNMzIpIHRvb2xjaGFpbiBWMi43LjI8L2xpPgogPC91bD4KLTxoMiBpZD0ic3VwcG9ydGVkLWRldmljZXMtMSI+U3VwcG9ydGVkIERldmljZXM8L2gyPgorPGgyIGlkPSJzdXBwb3J0ZWQtZGV2aWNlcy0yIj5TdXBwb3J0ZWQgRGV2aWNlczwvaDI+CiA8dWw+CiA8bGk+U1RNMzJHNDMxLzQxeHg8L2xpPgogPGxpPlNUTTMyRzQ3MXh4PC9saT4KZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmc0eHhfaGFsLmMgYi9TcmMvc3RtMzJnNHh4X2hhbC5jCmluZGV4IGU4YThiMmEuLjNmYWQwZTAgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmc0eHhfaGFsLmMKKysrIGIvU3JjL3N0bTMyZzR4eF9oYWwuYwpAQCAtNDksMTEgKzQ5LDExIEBACiAvKiBQcml2YXRlIHR5cGVkZWYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogUHJpdmF0ZSBkZWZpbmUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qKgotICAqIEBicmllZiBTVE0zMkc0eHggSEFMIERyaXZlciB2ZXJzaW9uIG51bWJlciAkVkVSU0lPTiQKKyAgKiBAYnJpZWYgU1RNMzJHNHh4IEhBTCBEcml2ZXIgdmVyc2lvbiBudW1iZXIgVjEuMS4xCiAgICovCiAjZGVmaW5lIF9fU1RNMzJHNHh4X0hBTF9WRVJTSU9OX01BSU4gICAoMHgwMVUpIC8qITwgWzMxOjI0XSBtYWluIHZlcnNpb24gKi8KICNkZWZpbmUgX19TVE0zMkc0eHhfSEFMX1ZFUlNJT05fU1VCMSAgICgweDAxVSkgLyohPCBbMjM6MTZdIHN1YjEgdmVyc2lvbiAqLwotI2RlZmluZSBfX1NUTTMyRzR4eF9IQUxfVkVSU0lPTl9TVUIyICAgKDB4MDBVKSAvKiE8IFsxNTo4XSAgc3ViMiB2ZXJzaW9uICovCisjZGVmaW5lIF9fU1RNMzJHNHh4X0hBTF9WRVJTSU9OX1NVQjIgICAoMHgwMVUpIC8qITwgWzE1OjhdICBzdWIyIHZlcnNpb24gKi8KICNkZWZpbmUgX19TVE0zMkc0eHhfSEFMX1ZFUlNJT05fUkMgICAgICgweDAwVSkgLyohPCBbNzowXSAgcmVsZWFzZSBjYW5kaWRhdGUgKi8KICNkZWZpbmUgX19TVE0zMkc0eHhfSEFMX1ZFUlNJT04gICAgICAgICAoKF9fU1RNMzJHNHh4X0hBTF9WRVJTSU9OX01BSU4gPDwgMjRVKVwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfChfX1NUTTMyRzR4eF9IQUxfVkVSU0lPTl9TVUIxIDw8IDE2VSlcCkBAIC0zNTIsMTUgKzM1MiwyNSBAQAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NldFRpY2tGcmVxKHVpbnQzMl90IEZyZXEpCiB7CiAgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyAgPSBIQUxfT0s7CisgIHVpbnQzMl90IHByZXZUaWNrRnJlcTsKKwogICBhc3NlcnRfcGFyYW0oSVNfVElDS0ZSRVEoRnJlcSkpOwogCiAgIGlmICh1d1RpY2tGcmVxICE9IEZyZXEpCiAgIHsKKyAgICAvKiBCYWNrIHVwIHV3VGlja0ZyZXEgZnJlcXVlbmN5ICovCisgICAgcHJldlRpY2tGcmVxID0gdXdUaWNrRnJlcTsKKworICAgIC8qIFVwZGF0ZSB1d1RpY2tGcmVxIGdsb2JhbCB2YXJpYWJsZSB1c2VkIGJ5IEhBTF9Jbml0VGljaygpICovCisgICAgdXdUaWNrRnJlcSA9IEZyZXE7CisKICAgICAvKiBBcHBseSB0aGUgbmV3IHRpY2sgRnJlcSAgKi8KICAgICBzdGF0dXMgPSBIQUxfSW5pdFRpY2sodXdUaWNrUHJpbyk7Ci0gICAgaWYgKHN0YXR1cyA9PSBIQUxfT0spCisKKyAgICBpZiAoc3RhdHVzICE9IEhBTF9PSykKICAgICB7Ci0gICAgICB1d1RpY2tGcmVxID0gRnJlcTsKKyAgICAgIC8qIFJlc3RvcmUgcHJldmlvdXMgdGljayBmcmVxdWVuY3kgKi8KKyAgICAgIHV3VGlja0ZyZXEgPSBwcmV2VGlja0ZyZXE7CiAgICAgfQogICB9CiAKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmc0eHhfaGFsX2FkYy5jIGIvU3JjL3N0bTMyZzR4eF9oYWxfYWRjLmMKaW5kZXggMTkxY2ZjOC4uODY4YTZmMyAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZzR4eF9oYWxfYWRjLmMKKysrIGIvU3JjL3N0bTMyZzR4eF9oYWxfYWRjLmMKQEAgLTMyNSw5ICszMjUsOSBAQAogI2RlZmluZSBBRENfQ0ZHUl9GSUVMRFNfMSAgKChBRENfQ0ZHUl9SRVMgICAgfCBBRENfQ0ZHUl9BTElHTiAgIHxcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFEQ19DRkdSX0NPTlQgICB8IEFEQ19DRkdSX09WUk1PRCAgfFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURDX0NGR1JfRElTQ0VOIHwgQURDX0NGR1JfRElTQ05VTSB8XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRENfQ0ZHUl9FWFRFTiAgfCBBRENfQ0ZHUl9FWFRTRUwpKSAgIC8qITwgQURDX0NGR1IgZmllbGRzIG9mIHBhcmFtZXRlcnMgdGhhdCBjYW4gYmUgdXBkYXRlZCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURDX0NGR1JfRVhURU4gIHwgQURDX0NGR1JfRVhUU0VMKSkgICAvKiE8IEFEQ19DRkdSIGZpZWxkcyBvZiBwYXJhbWV0ZXJzIHRoYXQgY2FuIGJlIHVwZGF0ZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gbm8gcmVndWxhciBjb252ZXJzaW9uIGlzIG9uLWdvaW5nICovCi0gIAorCiAvKiBUaW1lb3V0IHZhbHVlcyBmb3IgQURDIG9wZXJhdGlvbnMgKGVuYWJsZSBzZXR0bGluZyB0aW1lLCAgICAgICAgICAgICAgICAgICAqLwogLyogICBkaXNhYmxlIHNldHRsaW5nIHRpbWUsIC4uLikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgVmFsdWVzIGRlZmluZWQgdG8gYmUgaGlnaGVyIHRoYW4gd29yc3QgY2FzZXM6IGxvdyBjbG9jayBmcmVxdWVuY3ksICAgICAgICovCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJnNHh4X2hhbF9jcnlwLmMgYi9TcmMvc3RtMzJnNHh4X2hhbF9jcnlwLmMKaW5kZXggOWVjZWQ3OS4uYjgxNWI3MCAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZzR4eF9oYWxfY3J5cC5jCisrKyBiL1NyYy9zdG0zMmc0eHhfaGFsX2NyeXAuYwpAQCAtMTU1LDgzICsxNTUsMjQgQEAKICAgICAgICAgICgjIykgRmluYWwgcGhhc2U6IHBlcmlwaGVyYWwgZ2VuZXJhdGVzIHRoZSBhdXRoZW50aWNhdGVkIHRhZyAoVCkgdXNpbmcgdGhlIGxhc3QgYmxvY2sgb2YgZGF0YS4KICAgICAgICgjKSAgc3RydWN0dXJlIG9mIG1lc3NhZ2UgY29uc3RydWN0aW9uIGluIEdDTSBpcyBkZWZpbmVkIGFzIGJlbG93ICA6CiAgICAgICAgICAoIyMpIDE2IGJ5dGVzIEluaXRpYWwgQ291bnRlciBCbG9jayAoSUNCKWNvbXBvc2VkIG9mIElWIGFuZCBjb3VudGVyCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJQ0IKLSAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICAgICAgICB8ICAgICAgIEluaXRpYWxpemF0aW9uIHZlY3RvciAoSVYpICAgICAgfCAgQ291bnRlciAgICAgIHwKLSAgICAgICAgICB8LS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLXwKLSAgICAgICAgIDEyNyAgICAgICAgICAgICAgOTUgICAgICAgICAgICAgICAgNjMgICAgICAgICAgICAzMSAgICAgICAwCi0KLQotICAgICAgICAgICAgICBCaXQgTnVtYmVyICAgIFJlZ2lzdGVyICAgICAgICAgICBDb250ZW50cwotICAgICAgICAgICAgICAtLS0tLS0tLS0tICAgLS0tLS0tLS0tLS0tLS0tICAgICAgIC0tLS0tLS0tLS0tCi0gICAgICAgICAgICAgIDEyNyAuLi45NiAgICBDUllQX0lWMVJbMzE6MF0gICAgIElDQlsxMjc6OTZdCi0gICAgICAgICAgICAgIDk1ICAuLi42NCAgICBDUllQX0lWMUxbMzE6MF0gICAgIEIwWzk1OjY0XQotICAgICAgICAgICAgICA2MyAuLi4gMzIgICAgQ1JZUF9JVjBSWzMxOjBdICAgICBJQ0JbNjM6MzJdCi0gICAgICAgICAgICAgIDMxIC4uLiAwICAgICBDUllQX0lWMExbMzE6MF0gICAgIElDQlszMTowXSwgd2hlcmUgMzItYml0IGNvdW50ZXI9IDB4MgotCi0KLQogICAgICAgICAgKCMjKSBUaGUgYXV0aGVudGljYXRlZCBoZWFkZXIgQSAoYWxzbyBrbm93cyBhcyBBZGRpdGlvbmFsIEF1dGhlbnRpY2F0aW9uIERhdGEgQUFEKQogICAgICAgICAgIHRoaXMgcGFydCBvZiB0aGUgbWVzc2FnZSBpcyBvbmx5IGF1dGhlbnRpY2F0ZWQsIG5vdCBlbmNyeXB0ZWQuCiAgICAgICAgICAoIyMpIFRoZSBwbGFpbnRleHQgbWVzc2FnZSBQIGlzIGJvdGggYXV0aGVudGljYXRlZCBhbmQgZW5jcnlwdGVkIGFzIGNpcGhlcnRleHQuCiAgICAgICAgICAgR0NNIHN0YW5kYXJkIHNwZWNpZmllcyB0aGF0IGNpcGhlcnRleHQgaGFzIHNhbWUgYml0IGxlbmd0aCBhcyB0aGUgcGxhaW50ZXh0LgogICAgICAgICAgKCMjKSBUaGUgbGFzdCBibG9jayBpcyBjb21wb3NlZCBvZiB0aGUgbGVuZ3RoIG9mIEEgKG9uIDY0IGJpdHMpIGFuZCB0aGUgbGVuZ3RoIG9mIGNpcGhlcnRleHQKICAgICAgICAgICAob24gNjQgYml0cykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDTSBsYXN0IGJsb2NrIGRlZmluaXRpb24KLSAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICAgICAgICB8ICBCaXRbMF0gICB8ICBCaXRbMzJdICAgICAgICAgICB8ICBCaXRbNjRdICB8IEJpdFs5Nl0gICAgICAgICAgICAgIHwKLSAgICAgICAgICB8LS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKLSAgICAgICAgICB8ICAgMHgwICAgICB8IEhlYWRlciBsZW5ndGhbMzE6MF18ICAgICAweDAgICB8IFBheWxvYWQgbGVuZ3RoWzMxOjBdIHwKLSAgICAgICAgICB8LS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKworICAgIFsuLl0gIEEgbW9yZSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUgR0NNIG1lc3NhZ2Ugc3RydWN0dXJlIGlzIGF2YWlsYWJsZSBiZWxvdy4KIAogICAgIFsuLl0gIFRoaXMgc2VjdGlvbiBkZXNjcmliZSBUaGUgQUVTIENvdW50ZXIgd2l0aCBDaXBoZXIgQmxvY2sgQ2hhaW5pbmctTWVzc2FnZQogICAgICAgICAgIEF1dGhlbnRpY2F0aW9uIENvZGUgKENDTSkgc3VwcG9ydGVkIGJ5IGJvdGggQ1JZUDEgYW5kIFRpbnlBRVMgcGVyaXBoZXJhbDoKICAgICAgICgjKSAgU3BlY2lmaWMgcGFyYW1ldGVycyBmb3IgQ0NNICA6CiAKLSAgICAgICAgICgjIykgQjAgYmxvY2sgIDogQWNjb3JkaW5nIHRvIE5JU1QgU3BlY2lhbCBQdWJsaWNhdGlvbiA4MDAtMzhDLAotICAgICAgICAgICAgVGhlIGZpcnN0IGJsb2NrIEIwIGlzIGZvcm1hdHRlZCBhcyBmb2xsb3dzLCB3aGVyZSBsKG0pIGlzIGVuY29kZWQgaW4KLSAgICAgICAgICAgIG1vc3Qtc2lnbmlmaWNhbnQtYnl0ZSBmaXJzdCBvcmRlcjoKLQotICAgICAgICAgICAgICAgIE9jdGV0IE51bWJlciAgIENvbnRlbnRzCi0gICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tICAgLS0tLS0tLS0tCi0gICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgRmxhZ3MKLSAgICAgICAgICAgICAgICAxIC4uLiAxNS1xICAgICBOb25jZSBOCi0gICAgICAgICAgICAgICAgMTYtcSAuLi4gMTUgICAgUQotCi0gICAgICAgICAgICB0aGUgRmxhZ3MgZmllbGQgaXMgZm9ybWF0dGVkIGFzIGZvbGxvd3M6Ci0KLSAgICAgICAgICAgICAgICBCaXQgTnVtYmVyICAgQ29udGVudHMKLSAgICAgICAgICAgICAgICAtLS0tLS0tLS0tICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgICAgIDcgICAgICAgICAgICBSZXNlcnZlZCAoYWx3YXlzIHplcm8pCi0gICAgICAgICAgICAgICAgNiAgICAgICAgICAgIEFkYXRhCi0gICAgICAgICAgICAgICAgNSAuLi4gMyAgICAgICh0LTIpLzIKLSAgICAgICAgICAgICAgICAyIC4uLiAwICAgICAgW3EtMV0zCi0KLSAgICAgICAgICAgICAgLSBROiBhIGJpdCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9jdGV0IGxlbmd0aCBvZiBQIChwbGFpbnRleHQpCi0gICAgICAgICAgICAgIC0gcSBUaGUgb2N0ZXQgbGVuZ3RoIG9mIHRoZSBiaW5hcnkgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9jdGV0IGxlbmd0aCBvZiB0aGUgcGF5bG9hZAotICAgICAgICAgICAgICAtIEEgbm9uY2UgKE4pLCBuIFRoZSBvY3RldCBsZW5ndGggb2YgdGhlIHdoZXJlIG4rcT0xNS4KLSAgICAgICAgICAgICAgLSBGbGFnczogbW9zdCBzaWduaWZpY2FudCBvY3RldCBjb250YWluaW5nIGZvdXIgZmxhZ3MgZm9yIGNvbnRyb2wgaW5mb3JtYXRpb24sCi0gICAgICAgICAgICAgIC0gdCBUaGUgb2N0ZXQgbGVuZ3RoIG9mIHRoZSBNQUMuCi0gICAgICAgICAoIyMpIEIxIGJsb2NrIChoZWFkZXIpIDogYXNzb2NpYXRlZCBkYXRhIGxlbmd0aChhKSBjb25jYXRlbmF0ZWQgd2l0aCBBc3NvY2lhdGVkIERhdGEgKEEpCi0gICAgICAgICAgICAgIHRoZSBhc3NvY2lhdGVkIGRhdGEgbGVuZ3RoIGV4cHJlc3NlZCBpbiBieXRlcyAoYSkgZGVmaW5lZCBhcyBiZWxvdzoKLSAgICAgICAgICAgIC0gSWYgMCA8IGEgPCAyMTYtMjgsIHRoZW4gaXQgaXMgZW5jb2RlZCBhcyBbYV0xNiwgaS5lLiB0d28gb2N0ZXRzCi0gICAgICAgICAgICAtIElmIDIxNi0yOCA8IGEgPCAyMzIsIHRoZW4gaXQgaXMgZW5jb2RlZCBhcyAweGZmIHx8IDB4ZmUgfHwgW2FdMzIsIGkuZS4gc2l4IG9jdGV0cwotICAgICAgICAgICAgLSBJZiAyMzIgPCBhIDwgMjY0LCB0aGVuIGl0IGlzIGVuY29kZWQgYXMgMHhmZiB8fCAweGZmIHx8IFthXTY0LCBpLmUuIHRlbiBvY3RldHMKKyAgICAgICAgICgjIykgQjAgYmxvY2sgIDogZm9sbG93cyBOSVNUIFNwZWNpYWwgUHVibGljYXRpb24gODAwLTM4QywKKyAgICAgICAgICgjIykgQjEgYmxvY2sgKGhlYWRlcikKICAgICAgICAgICgjIykgQ1RSeCBibG9jayAgOiBjb250cm9sIGJsb2NrcwotICAgICAgICAgICAgLSBHZW5lcmF0aW9uIG9mIENUUjEgZnJvbSBmaXJzdCBibG9jayBCMCBpbmZvcm1hdGlvbiA6Ci0gICAgICAgICAgICAgIGVxdWFsIHRvIEIwIHdpdGggZmlyc3QgNSBiaXRzIHplcm9lZCBhbmQgbW9zdCBzaWduaWZpY2FudCBiaXRzIHN0b3Jpbmcgb2N0ZXQKLSAgICAgICAgICAgICAgbGVuZ3RoIG9mIFAgYWxzbyB6ZXJvZWQsIHRoZW4gaW5jcmVtZW50ZWQgYnkgb25lCiAKLSAgICAgICAgICAgICAgICBCaXQgTnVtYmVyICAgIFJlZ2lzdGVyICAgICAgICAgICBDb250ZW50cwotICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0gICAtLS0tLS0tLS0tLS0tLS0gICAgICAgLS0tLS0tLS0tLS0KLSAgICAgICAgICAgICAgICAxMjcgLi4uOTYgICAgQ1JZUF9JVjFSWzMxOjBdICAgICBCMFsxMjc6OTZdLCB3aGVyZSBRIGxlbmd0aCBiaXRzIGFyZSBzZXQgdG8gMCwgZXhjZXB0IGZvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdCAwIHRoYXQgaXMgc2V0IHRvIDEKLSAgICAgICAgICAgICAgICA5NSAgLi4uNjQgICAgQ1JZUF9JVjFMWzMxOjBdICAgICBCMFs5NTo2NF0KLSAgICAgICAgICAgICAgICA2MyAuLi4gMzIgICAgQ1JZUF9JVjBSWzMxOjBdICAgICBCMFs2MzozMl0KLSAgICAgICAgICAgICAgICAzMSAuLi4gMCAgICAgQ1JZUF9JVjBMWzMxOjBdICAgICBCMFszMTowXSwgd2hlcmUgZmxhZyBiaXRzIHNldCB0byAwCi0KLSAgICAgICAgICAgIC0gR2VuZXJhdGlvbiBvZiBDVFIwOiBzYW1lIGFzIENUUjEgd2l0aCBiaXRbMF0gc2V0IHRvIHplcm8uCisgICAgWy4uXSAgQSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUgQ0NNIG1lc3NhZ2Ugc3RydWN0dXJlIGlzIGF2YWlsYWJsZSBiZWxvdy4KIAogICAgICAgKCMpICBGb3VyIHBoYXNlcyBhcmUgcGVyZm9ybWVkIGluIENDTSBmb3IgQ1JZUDEgcGVyaXBoZXJhbDoKICAgICAgICAgICgjIykgSW5pdCBwaGFzZTogcGVyaXBoZXJhbCBwcmVwYXJlcyB0aGUgR0NNIGhhc2ggc3Via2V5IChIKSBhbmQgZG8gdGhlIElWIHByb2Nlc3NpbmcKQEAgLTM0MCw3ICsyODEsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE4IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKQEAgLTk4MSwxMSArOTIyLDE1IEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfQ1JZUF9TdXNwZW5kKENSWVBfSGFuZGxlVHlwZURlZiAqaGNyeXApCiB7CisgIEhBTF9DUllQX1NUQVRFVHlwZURlZiBzdGF0ZTsKKwogICAvKiBSZXF1ZXN0IHN1c3BlbnNpb24gKi8KICAgSEFMX0NSWVBfUHJvY2Vzc1N1c3BlbmQoaGNyeXApOwogCi0gIHdoaWxlICgoSEFMX0NSWVBfR2V0U3RhdGUoaGNyeXApICE9IEhBTF9DUllQX1NUQVRFX1NVU1BFTkRFRCkgJiYgXAotICAgICAgICAgIChIQUxfQ1JZUF9HZXRTdGF0ZShoY3J5cCkgIT0gSEFMX0NSWVBfU1RBVEVfUkVBRFkpKTsKKyAgZG8KKyAgeworICAgIHN0YXRlID0gSEFMX0NSWVBfR2V0U3RhdGUoaGNyeXApOworICB9IHdoaWxlICgoc3RhdGUgIT0gSEFMX0NSWVBfU1RBVEVfU1VTUEVOREVEKSAmJiAoc3RhdGUgIT0gSEFMX0NSWVBfU1RBVEVfUkVBRFkpKTsKIAogICBpZiAoSEFMX0NSWVBfR2V0U3RhdGUoaGNyeXApID09IEhBTF9DUllQX1NUQVRFX1JFQURZKQogICB7CkBAIC0xMDE5LDcgKzk2NCw4IEBACiAgICAgaGNyeXAtPkNyeXBPdXRDb3VudF9zYXZlZCAgICAgID0gaGNyeXAtPkNyeXBPdXRDb3VudDsKICAgICBoY3J5cC0+UGhhc2Vfc2F2ZWQgICAgICAgICAgICAgPSBoY3J5cC0+UGhhc2U7CiAgICAgaGNyeXAtPlN0YXRlX3NhdmVkICAgICAgICAgICAgID0gaGNyeXAtPlN0YXRlOwotICAgIGhjcnlwLT5TaXplX3NhdmVkICAgICAgICAgICAgICA9ICggKGhjcnlwLT5Jbml0LkRhdGFXaWR0aFVuaXQgPT0gQ1JZUF9EQVRBV0lEVEhVTklUX1dPUkQpID8gaGNyeXAtPlNpemUgLzQgOiBoY3J5cC0+U2l6ZSk7CisgICAgaGNyeXAtPlNpemVfc2F2ZWQgICAgICAgICAgICAgID0gKCAoaGNyeXAtPkluaXQuRGF0YVdpZHRoVW5pdCA9PSBDUllQX0RBVEFXSURUSFVOSVRfV09SRCkgPyAoaGNyeXAtPlNpemUgLzRVKSA6IGhjcnlwLT5TaXplKTsKKyAgICBoY3J5cC0+U2l6ZXNTdW1fc2F2ZWQgICAgICAgICAgPSBoY3J5cC0+U2l6ZXNTdW07CiAgICAgaGNyeXAtPkF1dG9LZXlEZXJpdmF0aW9uX3NhdmVkID0gaGNyeXAtPkF1dG9LZXlEZXJpdmF0aW9uOwogICAgIGhjcnlwLT5DcnlwSGVhZGVyQ291bnRfc2F2ZWQgICA9IGhjcnlwLT5DcnlwSGVhZGVyQ291bnQ7CiAgICAgaGNyeXAtPlN1c3BlbmRSZXF1ZXN0ICAgICAgICAgID0gSEFMX0NSWVBfU1VTUEVORF9OT05FOwpAQCAtMTA0OSw2ICs5OTUsMTIgQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9DUllQX1Jlc3VtZShDUllQX0hhbmRsZVR5cGVEZWYgKmhjcnlwKQogeworICAvKiBDaGVjayB0aGUgQ1JZUCBoYW5kbGUgYWxsb2NhdGlvbiAqLworICBpZiAoaGNyeXAgPT0gTlVMTCkKKyAgeworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKwogICBpZiAoaGNyeXAtPlN0YXRlX3NhdmVkICE9IEhBTF9DUllQX1NUQVRFX1NVU1BFTkRFRCkKICAgewogICAgIC8qIENSWVAgd2FzIG5vdCBzdXNwZW5kZWQgKi8KQEAgLTEwNzUsMTYgKzEwMjcsMTQgQEAKICAgICAgICAgaGNyeXAtPkluaXQucEluaXRWZWN0ICAgICA9IGhjcnlwLT5JVl9zYXZlZDsKICAgICAgIH0KICAgICAgIF9fSEFMX0NSWVBfRElTQUJMRShoY3J5cCk7Ci0gICAgICBpZiAoSEFMX0NSWVBfSW5pdChoY3J5cCkgIT0gSEFMX09LKQotICAgICAgewotICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwotICAgICAgfQorICAgICAgKHZvaWQpIEhBTF9DUllQX0luaXQoaGNyeXApOwogICAgIH0KICAgICBlbHNlICAgIC8qIEF1dGhlbnRpY2F0aW9uIGFsZ29yaXRobXMgY2FzZSAqLwogICAgIHsKICAgICAgIC8qIFJlc3RvcmUgbG93LXByaW9yaXR5IGJsb2NrIENSWVAgaGFuZGxlIHBhcmFtZXRlcnMgKi8KICAgICAgIGhjcnlwLT5QaGFzZSAgICAgICAgICAgPSBoY3J5cC0+UGhhc2Vfc2F2ZWQ7CiAgICAgICBoY3J5cC0+Q3J5cEhlYWRlckNvdW50ID0gaGNyeXAtPkNyeXBIZWFkZXJDb3VudF9zYXZlZDsKKyAgICAgIGhjcnlwLT5TaXplc1N1bSAgICAgICAgPSBoY3J5cC0+U2l6ZXNTdW1fc2F2ZWQ7CiAKICAgICAgIC8qIERpc2FibGUgQUVTIGFuZCB3cml0ZS1iYWNrIFNVU1B4UiByZWdpc3RlcnMgKi87CiAgICAgICBfX0hBTF9DUllQX0RJU0FCTEUoaGNyeXApOwpAQCAtMTA5NCw4ICsxMDQ0LDYgQEAKICAgICAgIGhjcnlwLT5JbnN0YW5jZS0+Q1IgPSBoY3J5cC0+Q1Jfc2F2ZWQ7CiAgICAgICBDUllQX1dyaXRlX0tleVJlZ2lzdGVycyhoY3J5cCwgaGNyeXAtPktleV9zYXZlZCwgaGNyeXAtPkluaXQuS2V5U2l6ZSk7CiAgICAgICBDUllQX1dyaXRlX0lWUmVnaXN0ZXJzKGhjcnlwLCBoY3J5cC0+SVZfc2F2ZWQpOwotICAgICAgX19IQUxfQ1JZUF9FTkFCTEVfSVQoaGNyeXAsQ1JZUF9JVF9DQ0ZJRSB8IENSWVBfSVRfRVJSSUUpOwotICAgICAgX19IQUxfQ1JZUF9FTkFCTEUoaGNyeXApOwogCiAgICAgICAvKiBBdCB0aGUgc2FtZSB0aW1lLCBzZXQgaGFuZGxlIHN0YXRlIGJhY2sgdG8gUkVBRFkgdG8gYmUgYWJsZSB0byByZXN1bWUgdGhlIEFFUyBjYWxjdWxhdGlvbnMKICAgICAgIHdpdGhvdXQgdGhlIHByb2Nlc3NpbmcgQVBJcyByZXR1cm5pbmcgSEFMX0JVU1kgd2hlbiBjYWxsZWQuICovCkBAIC0xMTU3LDYgKzExMDUsODEgQEAKICAgKiBAewogICAqLwogCisvKiBHQ00gbWVzc2FnZSBzdHJ1Y3R1cmUgYWRkaXRpb25hbCBkZXRhaWxzCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJQ0IKKyAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICB8ICAgICAgIEluaXRpYWxpemF0aW9uIHZlY3RvciAoSVYpICAgICAgfCAgQ291bnRlciAgICAgIHwKKyAgICAgICAgICB8LS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLXwKKyAgICAgICAgIDEyNyAgICAgICAgICAgICAgOTUgICAgICAgICAgICAgICAgNjMgICAgICAgICAgICAzMSAgICAgICAwCisKKworICAgICAgICAgICAgICBCaXQgTnVtYmVyICAgIFJlZ2lzdGVyICAgICAgICAgICBDb250ZW50cworICAgICAgICAgICAgICAtLS0tLS0tLS0tICAgLS0tLS0tLS0tLS0tLS0tICAgICAgIC0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIDEyNyAuLi45NiAgICBDUllQX0lWMVJbMzE6MF0gICAgIElDQlsxMjc6OTZdCisgICAgICAgICAgICAgIDk1ICAuLi42NCAgICBDUllQX0lWMUxbMzE6MF0gICAgIEIwWzk1OjY0XQorICAgICAgICAgICAgICA2MyAuLi4gMzIgICAgQ1JZUF9JVjBSWzMxOjBdICAgICBJQ0JbNjM6MzJdCisgICAgICAgICAgICAgIDMxIC4uLiAwICAgICBDUllQX0lWMExbMzE6MF0gICAgIElDQlszMTowXSwgd2hlcmUgMzItYml0IGNvdW50ZXI9IDB4MgorCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NNIGxhc3QgYmxvY2sgZGVmaW5pdGlvbgorICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgIHwgIEJpdFswXSAgIHwgIEJpdFszMl0gICAgICAgICAgIHwgIEJpdFs2NF0gIHwgQml0Wzk2XSAgICAgICAgICAgICAgfAorICAgICAgICAgIHwtLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorICAgICAgICAgIHwgICAweDAgICAgIHwgSGVhZGVyIGxlbmd0aFszMTowXXwgICAgIDB4MCAgIHwgUGF5bG9hZCBsZW5ndGhbMzE6MF0gfAorICAgICAgICAgIHwtLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorCisqLworCisvKiBDQ00gbWVzc2FnZSBibG9ja3MgZGVzY3JpcHRpb24KKworICAgICAgICAgKCMjKSBCMCBibG9jayAgOiBBY2NvcmRpbmcgdG8gTklTVCBTcGVjaWFsIFB1YmxpY2F0aW9uIDgwMC0zOEMsCisgICAgICAgICAgICBUaGUgZmlyc3QgYmxvY2sgQjAgaXMgZm9ybWF0dGVkIGFzIGZvbGxvd3MsIHdoZXJlIGwobSkgaXMgZW5jb2RlZCBpbgorICAgICAgICAgICAgbW9zdC1zaWduaWZpY2FudC1ieXRlIGZpcnN0IG9yZGVyOgorCisgICAgICAgICAgICAgICAgT2N0ZXQgTnVtYmVyICAgQ29udGVudHMKKyAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0gICAtLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICBGbGFncworICAgICAgICAgICAgICAgIDEgLi4uIDE1LXEgICAgIE5vbmNlIE4KKyAgICAgICAgICAgICAgICAxNi1xIC4uLiAxNSAgICBRCisKKyAgICAgICAgICAgIHRoZSBGbGFncyBmaWVsZCBpcyBmb3JtYXR0ZWQgYXMgZm9sbG93czoKKworICAgICAgICAgICAgICAgIEJpdCBOdW1iZXIgICBDb250ZW50cworICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0gICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgNyAgICAgICAgICAgIFJlc2VydmVkIChhbHdheXMgemVybykKKyAgICAgICAgICAgICAgICA2ICAgICAgICAgICAgQWRhdGEKKyAgICAgICAgICAgICAgICA1IC4uLiAzICAgICAgKHQtMikvMgorICAgICAgICAgICAgICAgIDIgLi4uIDAgICAgICBbcS0xXTMKKworICAgICAgICAgICAgICAtIFE6IGEgYml0IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgb2N0ZXQgbGVuZ3RoIG9mIFAgKHBsYWludGV4dCkKKyAgICAgICAgICAgICAgLSBxIFRoZSBvY3RldCBsZW5ndGggb2YgdGhlIGJpbmFyeSByZXByZXNlbnRhdGlvbiBvZiB0aGUgb2N0ZXQgbGVuZ3RoIG9mIHRoZSBwYXlsb2FkCisgICAgICAgICAgICAgIC0gQSBub25jZSAoTiksIG4gVGhlIG9jdGV0IGxlbmd0aCBvZiB0aGUgd2hlcmUgbitxPTE1LgorICAgICAgICAgICAgICAtIEZsYWdzOiBtb3N0IHNpZ25pZmljYW50IG9jdGV0IGNvbnRhaW5pbmcgZm91ciBmbGFncyBmb3IgY29udHJvbCBpbmZvcm1hdGlvbiwKKyAgICAgICAgICAgICAgLSB0IFRoZSBvY3RldCBsZW5ndGggb2YgdGhlIE1BQy4KKyAgICAgICAgICgjIykgQjEgYmxvY2sgKGhlYWRlcikgOiBhc3NvY2lhdGVkIGRhdGEgbGVuZ3RoKGEpIGNvbmNhdGVuYXRlZCB3aXRoIEFzc29jaWF0ZWQgRGF0YSAoQSkKKyAgICAgICAgICAgICAgdGhlIGFzc29jaWF0ZWQgZGF0YSBsZW5ndGggZXhwcmVzc2VkIGluIGJ5dGVzIChhKSBkZWZpbmVkIGFzIGJlbG93OgorICAgICAgICAgICAgLSBJZiAwIDwgYSA8IDIxNi0yOCwgdGhlbiBpdCBpcyBlbmNvZGVkIGFzIFthXTE2LCBpLmUuIHR3byBvY3RldHMKKyAgICAgICAgICAgIC0gSWYgMjE2LTI4IDwgYSA8IDIzMiwgdGhlbiBpdCBpcyBlbmNvZGVkIGFzIDB4ZmYgfHwgMHhmZSB8fCBbYV0zMiwgaS5lLiBzaXggb2N0ZXRzCisgICAgICAgICAgICAtIElmIDIzMiA8IGEgPCAyNjQsIHRoZW4gaXQgaXMgZW5jb2RlZCBhcyAweGZmIHx8IDB4ZmYgfHwgW2FdNjQsIGkuZS4gdGVuIG9jdGV0cworICAgICAgICAgKCMjKSBDVFJ4IGJsb2NrICA6IGNvbnRyb2wgYmxvY2tzCisgICAgICAgICAgICAtIEdlbmVyYXRpb24gb2YgQ1RSMSBmcm9tIGZpcnN0IGJsb2NrIEIwIGluZm9ybWF0aW9uIDoKKyAgICAgICAgICAgICAgZXF1YWwgdG8gQjAgd2l0aCBmaXJzdCA1IGJpdHMgemVyb2VkIGFuZCBtb3N0IHNpZ25pZmljYW50IGJpdHMgc3RvcmluZyBvY3RldAorICAgICAgICAgICAgICBsZW5ndGggb2YgUCBhbHNvIHplcm9lZCwgdGhlbiBpbmNyZW1lbnRlZCBieSBvbmUKKworICAgICAgICAgICAgICAgIEJpdCBOdW1iZXIgICAgUmVnaXN0ZXIgICAgICAgICAgIENvbnRlbnRzCisgICAgICAgICAgICAgICAgLS0tLS0tLS0tLSAgIC0tLS0tLS0tLS0tLS0tLSAgICAgICAtLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgIDEyNyAuLi45NiAgICBDUllQX0lWMVJbMzE6MF0gICAgIEIwWzEyNzo5Nl0sIHdoZXJlIFEgbGVuZ3RoIGJpdHMgYXJlIHNldCB0byAwLCBleGNlcHQgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0IDAgdGhhdCBpcyBzZXQgdG8gMQorICAgICAgICAgICAgICAgIDk1ICAuLi42NCAgICBDUllQX0lWMUxbMzE6MF0gICAgIEIwWzk1OjY0XQorICAgICAgICAgICAgICAgIDYzIC4uLiAzMiAgICBDUllQX0lWMFJbMzE6MF0gICAgIEIwWzYzOjMyXQorICAgICAgICAgICAgICAgIDMxIC4uLiAwICAgICBDUllQX0lWMExbMzE6MF0gICAgIEIwWzMxOjBdLCB3aGVyZSBmbGFnIGJpdHMgc2V0IHRvIDAKKworICAgICAgICAgICAgLSBHZW5lcmF0aW9uIG9mIENUUjA6IHNhbWUgYXMgQ1RSMSB3aXRoIGJpdFswXSBzZXQgdG8gemVyby4KKworKi8KKwogLyoqCiAgICogQGJyaWVmICBFbmNyeXB0aW9uIG1vZGUuCiAgICogQHBhcmFtICBoY3J5cCBwb2ludGVyIHRvIGEgQ1JZUF9IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCkBAIC0xMTcxLDYgKzExOTQsMTIgQEAKIHsKICAgdWludDMyX3QgYWxnbzsKICAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzOworI2lmZGVmICBVU0VfRlVMTF9BU1NFUlQKKyAgdWludDMyX3QgYWxnb19hc3NlcnQgPSAoaGNyeXAtPkluc3RhbmNlLT5DUikgJiBBRVNfQ1JfQ0hNT0Q7CisKKyAgLyogQ2hlY2sgaW5wdXQgYnVmZmVyIHNpemUgKi8KKyAgYXNzZXJ0X3BhcmFtKElTX0NSWVBfQlVGRkVSU0laRShhbGdvX2Fzc2VydCwgaGNyeXAtPkluaXQuRGF0YVdpZHRoVW5pdCwgU2l6ZSkpOworI2VuZGlmCiAKICAgaWYgKGhjcnlwLT5TdGF0ZSA9PSBIQUxfQ1JZUF9TVEFURV9SRUFEWSkKICAgewpAQCAtMTI2NSw2ICsxMjk0LDEyIEBACiB7CiAgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1czsKICAgdWludDMyX3QgYWxnbzsKKyNpZmRlZiAgVVNFX0ZVTExfQVNTRVJUCisgIHVpbnQzMl90IGFsZ29fYXNzZXJ0ID0gKGhjcnlwLT5JbnN0YW5jZS0+Q1IpICYgQUVTX0NSX0NITU9EOworCisgIC8qIENoZWNrIGlucHV0IGJ1ZmZlciBzaXplICovCisgIGFzc2VydF9wYXJhbShJU19DUllQX0JVRkZFUlNJWkUoYWxnb19hc3NlcnQsIGhjcnlwLT5Jbml0LkRhdGFXaWR0aFVuaXQsIFNpemUpKTsKKyNlbmRpZgogCiAgIGlmIChoY3J5cC0+U3RhdGUgPT0gSEFMX0NSWVBfU1RBVEVfUkVBRFkpCiAgIHsKQEAgLTEzNTgsNiArMTM5MywxMiBAQAogewogICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXM7CiAgIHVpbnQzMl90IGFsZ287CisjaWZkZWYgIFVTRV9GVUxMX0FTU0VSVAorICB1aW50MzJfdCBhbGdvX2Fzc2VydCA9IChoY3J5cC0+SW5zdGFuY2UtPkNSKSAmIEFFU19DUl9DSE1PRDsKKworICAvKiBDaGVjayBpbnB1dCBidWZmZXIgc2l6ZSAqLworICBhc3NlcnRfcGFyYW0oSVNfQ1JZUF9CVUZGRVJTSVpFKGFsZ29fYXNzZXJ0LCBoY3J5cC0+SW5pdC5EYXRhV2lkdGhVbml0LCBTaXplKSk7CisjZW5kaWYKIAogICBpZiAoaGNyeXAtPlN0YXRlID09IEhBTF9DUllQX1NUQVRFX1JFQURZKQogICB7CkBAIC0xMzc0LDggKzE0MTUsOCBAQAogICAgICBoY3J5cC0+UmVzdW1pbmdGbGFnID0gMFU7CiAgICAgIGlmIChoY3J5cC0+UGhhc2UgIT0gQ1JZUF9QSEFTRV9IRUFERVJfU1VTUEVOREVEKQogICAgICB7Ci0gICAgICAgaGNyeXAtPkNyeXBJbkNvdW50ID0gaGNyeXAtPkNyeXBJbkNvdW50X3NhdmVkOwotICAgICAgIGhjcnlwLT5DcnlwT3V0Q291bnQgPSBoY3J5cC0+Q3J5cE91dENvdW50X3NhdmVkOworICAgICAgIGhjcnlwLT5DcnlwSW5Db3VudCA9ICh1aW50MTZfdCkgaGNyeXAtPkNyeXBJbkNvdW50X3NhdmVkOworICAgICAgIGhjcnlwLT5DcnlwT3V0Q291bnQgPSAodWludDE2X3QpIGhjcnlwLT5DcnlwT3V0Q291bnRfc2F2ZWQ7CiAgICAgIH0KICAgICAgZWxzZQogICAgICB7CkBAIC0xNDYyLDYgKzE1MDMsMTIgQEAKIHsKICAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzOwogICB1aW50MzJfdCBhbGdvOworI2lmZGVmICBVU0VfRlVMTF9BU1NFUlQKKyAgdWludDMyX3QgYWxnb19hc3NlcnQgPSAoaGNyeXAtPkluc3RhbmNlLT5DUikgJiBBRVNfQ1JfQ0hNT0Q7CisKKyAgLyogQ2hlY2sgaW5wdXQgYnVmZmVyIHNpemUgKi8KKyAgYXNzZXJ0X3BhcmFtKElTX0NSWVBfQlVGRkVSU0laRShhbGdvX2Fzc2VydCwgaGNyeXAtPkluaXQuRGF0YVdpZHRoVW5pdCwgU2l6ZSkpOworI2VuZGlmCiAKICAgaWYgKGhjcnlwLT5TdGF0ZSA9PSBIQUxfQ1JZUF9TVEFURV9SRUFEWSkKICAgewpAQCAtMTQ3OCw4ICsxNTI1LDggQEAKICAgICAgaGNyeXAtPlJlc3VtaW5nRmxhZyA9IDBVOwogICAgICBpZiAoaGNyeXAtPlBoYXNlICE9IENSWVBfUEhBU0VfSEVBREVSX1NVU1BFTkRFRCkKICAgICAgewotICAgICAgIGhjcnlwLT5DcnlwSW5Db3VudCA9IGhjcnlwLT5DcnlwSW5Db3VudF9zYXZlZDsKLSAgICAgICBoY3J5cC0+Q3J5cE91dENvdW50ID0gaGNyeXAtPkNyeXBPdXRDb3VudF9zYXZlZDsKKyAgICAgICBoY3J5cC0+Q3J5cEluQ291bnQgPSAodWludDE2X3QpIGhjcnlwLT5DcnlwSW5Db3VudF9zYXZlZDsKKyAgICAgICBoY3J5cC0+Q3J5cE91dENvdW50ID0gKHVpbnQxNl90KSBoY3J5cC0+Q3J5cE91dENvdW50X3NhdmVkOwogICAgICB9CiAgICAgIGVsc2UKICAgICAgewpAQCAtMTU2Niw2ICsxNjEzLDEyIEBACiAgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1czsKICAgdWludDMyX3QgYWxnbzsKICAgdWludDMyX3QgRG9LZXlJVkNvbmZpZyA9IDFVOyAvKiBCeSBkZWZhdWx0LCBjYXJyeSBvdXQgcGVyaXBoZXJhbCBLZXkgYW5kIElWIGNvbmZpZ3VyYXRpb24gKi8KKyNpZmRlZiAgVVNFX0ZVTExfQVNTRVJUCisgIHVpbnQzMl90IGFsZ29fYXNzZXJ0ID0gKGhjcnlwLT5JbnN0YW5jZS0+Q1IpICYgQUVTX0NSX0NITU9EOworCisgIC8qIENoZWNrIGlucHV0IGJ1ZmZlciBzaXplICovCisgIGFzc2VydF9wYXJhbShJU19DUllQX0JVRkZFUlNJWkUoYWxnb19hc3NlcnQsIGhjcnlwLT5Jbml0LkRhdGFXaWR0aFVuaXQsIFNpemUpKTsKKyNlbmRpZgogCiAgIGlmIChoY3J5cC0+U3RhdGUgPT0gSEFMX0NSWVBfU1RBVEVfUkVBRFkpCiAgIHsKQEAgLTE2ODYsNiArMTczOSwxMiBAQAogewogICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXM7CiAgIHVpbnQzMl90IGFsZ287CisjaWZkZWYgIFVTRV9GVUxMX0FTU0VSVAorICB1aW50MzJfdCBhbGdvX2Fzc2VydCA9IChoY3J5cC0+SW5zdGFuY2UtPkNSKSAmIEFFU19DUl9DSE1PRDsKKworICAvKiBDaGVjayBpbnB1dCBidWZmZXIgc2l6ZSAqLworICBhc3NlcnRfcGFyYW0oSVNfQ1JZUF9CVUZGRVJTSVpFKGFsZ29fYXNzZXJ0LCBoY3J5cC0+SW5pdC5EYXRhV2lkdGhVbml0LCBTaXplKSk7CisjZW5kaWYKIAogICBpZiAoaGNyeXAtPlN0YXRlID09IEhBTF9DUllQX1NUQVRFX1JFQURZKQogICB7CkBAIC0yNjg0LDcgKzI3NDMsOCBAQAogc3RhdGljIHZvaWQgQ1JZUF9BRVNfUHJvY2Vzc0RhdGEoQ1JZUF9IYW5kbGVUeXBlRGVmICpoY3J5cCwgdWludDMyX3QgVGltZW91dCkKIHsKIAotICB1aW50MzJfdCB0ZW1wOyAgLyogVGVtcG9yYXJ5IENyeXBPdXRCdWZmICovCisgIHVpbnQzMl90IHRlbXBbNF07ICAvKiBUZW1wb3JhcnkgQ3J5cE91dEJ1ZmYgKi8KKyAgdWludDMyX3QgaTsKIAogICAvKiBXcml0ZSB0aGUgaW5wdXQgYmxvY2sgaW4gdGhlIElOIEZJRk8gKi8KICAgaGNyeXAtPkluc3RhbmNlLT5ESU5SICA9ICoodWludDMyX3QgKikoaGNyeXAtPnBDcnlwSW5CdWZmUHRyICsgaGNyeXAtPkNyeXBJbkNvdW50KTsKQEAgLTI3MjEsMTkgKzI3ODEsMTcgQEAKICAgX19IQUxfQ1JZUF9DTEVBUl9GTEFHKGhjcnlwLCBDUllQX0NDRl9DTEVBUik7CiAKICAgLyogUmVhZCB0aGUgb3V0cHV0IGJsb2NrIGZyb20gdGhlIG91dHB1dCBGSUZPIGFuZCBwdXQgdGhlbSBpbiB0ZW1wb3JhcnkgYnVmZmVyIHRoZW4gZ2V0IENyeXBPdXRCdWZmIGZyb20gdGVtcG9yYXJ5IGJ1ZmZlciovCi0gIHRlbXAgID0gaGNyeXAtPkluc3RhbmNlLT5ET1VUUjsKLSAgKih1aW50MzJfdCAqKShoY3J5cC0+cENyeXBPdXRCdWZmUHRyICsgKGhjcnlwLT5DcnlwT3V0Q291bnQpKSA9IHRlbXA7Ci0gIGhjcnlwLT5DcnlwT3V0Q291bnQrKzsKLSAgdGVtcCAgPSBoY3J5cC0+SW5zdGFuY2UtPkRPVVRSOwotICAqKHVpbnQzMl90ICopKGhjcnlwLT5wQ3J5cE91dEJ1ZmZQdHIgKyBoY3J5cC0+Q3J5cE91dENvdW50KSAgID0gdGVtcDsKLSAgaGNyeXAtPkNyeXBPdXRDb3VudCsrOwotICB0ZW1wICA9IGhjcnlwLT5JbnN0YW5jZS0+RE9VVFI7Ci0gICoodWludDMyX3QgKikoaGNyeXAtPnBDcnlwT3V0QnVmZlB0ciArIChoY3J5cC0+Q3J5cE91dENvdW50KSkgPSB0ZW1wOwotICBoY3J5cC0+Q3J5cE91dENvdW50Kys7Ci0gIHRlbXAgID0gaGNyeXAtPkluc3RhbmNlLT5ET1VUUjsKLSAgKih1aW50MzJfdCAqKShoY3J5cC0+cENyeXBPdXRCdWZmUHRyICsgaGNyeXAtPkNyeXBPdXRDb3VudCkgICA9IHRlbXA7Ci0gIGhjcnlwLT5DcnlwT3V0Q291bnQrKzsKLQorICBmb3IgKGkgPSAwVTsgaSA8IDRVOyBpKyspCisgIHsKKyAgICB0ZW1wW2ldID0gaGNyeXAtPkluc3RhbmNlLT5ET1VUUjsKKyAgfQorICBpPSAwVTsKKyAgd2hpbGUoKGhjcnlwLT5DcnlwT3V0Q291bnQgPCAoKGhjcnlwLT5TaXplICsgM1UpLzRVKSkgJiYgKGk8NFUpKQorICB7CisgICAgKih1aW50MzJfdCAqKShoY3J5cC0+cENyeXBPdXRCdWZmUHRyICsgaGNyeXAtPkNyeXBPdXRDb3VudCkgPSB0ZW1wW2ldOworICAgIGhjcnlwLT5DcnlwT3V0Q291bnQrKzsKKyAgICBpKys7CisgIH0KIH0KIAogLyoqCkBAIC0yNzQ2LDI0ICsyODA0LDIzIEBACiAgICovCiBzdGF0aWMgdm9pZCBDUllQX0FFU19JVChDUllQX0hhbmRsZVR5cGVEZWYgKmhjcnlwKQogewotICB1aW50MzJfdCB0ZW1wOyAgLyogVGVtcG9yYXJ5IENyeXBPdXRCdWZmICovCisgIHVpbnQzMl90IHRlbXBbNF07ICAvKiBUZW1wb3JhcnkgQ3J5cE91dEJ1ZmYgKi8KKyAgdWludDMyX3QgaTsKIAogICBpZiAoaGNyeXAtPlN0YXRlID09IEhBTF9DUllQX1NUQVRFX0JVU1kpCiAgIHsKICAgICAvKiBSZWFkIHRoZSBvdXRwdXQgYmxvY2sgZnJvbSB0aGUgb3V0cHV0IEZJRk8gYW5kIHB1dCB0aGVtIGluIHRlbXBvcmFyeSBidWZmZXIgdGhlbiBnZXQgQ3J5cE91dEJ1ZmYgZnJvbSB0ZW1wb3JhcnkgYnVmZmVyKi8KLSAgICB0ZW1wICA9IGhjcnlwLT5JbnN0YW5jZS0+RE9VVFI7Ci0gICAgKih1aW50MzJfdCAqKShoY3J5cC0+cENyeXBPdXRCdWZmUHRyICsgKGhjcnlwLT5DcnlwT3V0Q291bnQpKSA9IHRlbXA7Ci0gICAgaGNyeXAtPkNyeXBPdXRDb3VudCsrOwotICAgIHRlbXAgID0gaGNyeXAtPkluc3RhbmNlLT5ET1VUUjsKLSAgICAqKHVpbnQzMl90ICopKGhjcnlwLT5wQ3J5cE91dEJ1ZmZQdHIgKyBoY3J5cC0+Q3J5cE91dENvdW50KSAgID0gdGVtcDsKLSAgICBoY3J5cC0+Q3J5cE91dENvdW50Kys7Ci0gICAgdGVtcCAgPSBoY3J5cC0+SW5zdGFuY2UtPkRPVVRSOwotICAgICoodWludDMyX3QgKikoaGNyeXAtPnBDcnlwT3V0QnVmZlB0ciArIChoY3J5cC0+Q3J5cE91dENvdW50KSkgPSB0ZW1wOwotICAgIGhjcnlwLT5DcnlwT3V0Q291bnQrKzsKLSAgICB0ZW1wICA9IGhjcnlwLT5JbnN0YW5jZS0+RE9VVFI7Ci0gICAgKih1aW50MzJfdCAqKShoY3J5cC0+cENyeXBPdXRCdWZmUHRyICsgaGNyeXAtPkNyeXBPdXRDb3VudCkgICA9IHRlbXA7Ci0gICAgaGNyeXAtPkNyeXBPdXRDb3VudCsrOwotCisgICAgZm9yIChpID0gMFU7IGkgPCA0VTsgaSsrKQorICAgIHsKKyAgICAgIHRlbXBbaV0gPSBoY3J5cC0+SW5zdGFuY2UtPkRPVVRSOworICAgIH0KKyAgICBpPSAwVTsKKyAgICB3aGlsZSgoaGNyeXAtPkNyeXBPdXRDb3VudCA8ICgoaGNyeXAtPlNpemUgKyAzVSkvNFUpKSAmJiAoaTw0VSkpCisgICAgeworICAgICAgKih1aW50MzJfdCAqKShoY3J5cC0+cENyeXBPdXRCdWZmUHRyICsgaGNyeXAtPkNyeXBPdXRDb3VudCkgPSB0ZW1wW2ldOworICAgICAgaGNyeXAtPkNyeXBPdXRDb3VudCsrOworICAgICAgaSsrOworICAgIH0KICAgICBpZiAoaGNyeXAtPkNyeXBPdXRDb3VudCA9PSAgKGhjcnlwLT5TaXplIC8gNFUpKQogICAgIHsKICAgICAgIC8qIERpc2FibGUgQ29tcHV0YXRpb24gQ29tcGxldGUgZmxhZyBhbmQgZXJyb3JzIGludGVycnVwdHMgKi8KQEAgLTI5MDAsNyArMjk1Nyw3IEBACiAgIHVpbnQzMl90IHRpY2tzdGFydDsKICAgdWludDMyX3Qgd29yZHNpemUgPSAoKHVpbnQzMl90KWhjcnlwLT5TaXplIC8gNFUpIDsKICAgdWludDMyX3QgbnBibGI7Ci0gIHVpbnQzMl90IHRlbXA7ICAvKiBUZW1wb3JhcnkgQ3J5cE91dEJ1ZmYgKi8KKyAgdWludDMyX3QgdGVtcFs0XTsgIC8qIFRlbXBvcmFyeSBDcnlwT3V0QnVmZiAqLwogICB1aW50MzJfdCBpbmRleDsKICAgdWludDMyX3QgbGFzdHdvcmRzaXplOwogICB1aW50MzJfdCBpbmNvdW50OyAgLyogVGVtcG9yYXJ5IENyeXBJbkNvdW50IFZhbHVlICovCkBAIC0zMDc5LDkgKzMxMzYsMTEgQEAKICAgICBmb3IgKGluZGV4ID0gMFU7IGluZGV4IDwgNFU7IGluZGV4KyspCiAgICAgewogICAgICAgLyogUmVhZCB0aGUgb3V0cHV0IGJsb2NrIGZyb20gdGhlIG91dHB1dCBGSUZPIGFuZCBwdXQgdGhlbSBpbiB0ZW1wb3JhcnkgYnVmZmVyIHRoZW4gZ2V0IENyeXBPdXRCdWZmIGZyb20gdGVtcG9yYXJ5IGJ1ZmZlciAqLwotICAgICAgdGVtcCA9IGhjcnlwLT5JbnN0YW5jZS0+RE9VVFI7Ci0KLSAgICAgICoodWludDMyX3QgKikoaGNyeXAtPnBDcnlwT3V0QnVmZlB0ciArIChoY3J5cC0+Q3J5cE91dENvdW50KSkgPSB0ZW1wOworICAgICAgdGVtcFtpbmRleF0gPSBoY3J5cC0+SW5zdGFuY2UtPkRPVVRSOworICAgIH0KKyAgICBmb3IgKGluZGV4ID0gMFU7IGluZGV4IDwgbGFzdHdvcmRzaXplOyBpbmRleCsrKQorICAgIHsKKyAgICAgICoodWludDMyX3QgKikoaGNyeXAtPnBDcnlwT3V0QnVmZlB0ciArIChoY3J5cC0+Q3J5cE91dENvdW50KSkgPSB0ZW1wW2luZGV4XTsKICAgICAgIGhjcnlwLT5DcnlwT3V0Q291bnQrKzsKICAgICB9CiAgIH0KQEAgLTM0MjgsNyArMzQ4Nyw3IEBACiAgIHVpbnQzMl90IGluZGV4OwogICB1aW50MzJfdCBucGJsYjsKICAgdWludDMyX3QgbGFzdHdvcmRzaXplOwotICB1aW50MzJfdCB0ZW1wOyAgLyogVGVtcG9yYXJ5IENyeXBPdXRCdWZmICovCisgIHVpbnQzMl90IHRlbXBbNF07ICAvKiBUZW1wb3JhcnkgQ3J5cE91dEJ1ZmYgKi8KICAgdWludDMyX3QgRG9LZXlJVkNvbmZpZyA9IDFVOyAvKiBCeSBkZWZhdWx0LCBjYXJyeSBvdXQgcGVyaXBoZXJhbCBLZXkgYW5kIElWIGNvbmZpZ3VyYXRpb24gKi8KIAogICBpZiAoaGNyeXAtPkluaXQuS2V5SVZDb25maWdTa2lwID09IENSWVBfS0VZSVZDT05GSUdfT05DRSkKQEAgLTM2MDgsOSArMzY2NywxMSBAQAogICAgIGZvciAoaW5kZXggPSAwVTsgaW5kZXggPCA0VTsgaW5kZXgrKykKICAgICB7CiAgICAgICAvKiBSZWFkIHRoZSBvdXRwdXQgYmxvY2sgZnJvbSB0aGUgb3V0cHV0IEZJRk8gYW5kIHB1dCB0aGVtIGluIHRlbXBvcmFyeSBidWZmZXIgdGhlbiBnZXQgQ3J5cE91dEJ1ZmYgZnJvbSB0ZW1wb3JhcnkgYnVmZmVyICovCi0gICAgICB0ZW1wID0gaGNyeXAtPkluc3RhbmNlLT5ET1VUUjsKLQotICAgICAgKih1aW50MzJfdCAqKShoY3J5cC0+cENyeXBPdXRCdWZmUHRyICsgKGhjcnlwLT5DcnlwT3V0Q291bnQpKSA9IHRlbXA7CisgICAgICB0ZW1wW2luZGV4XSA9IGhjcnlwLT5JbnN0YW5jZS0+RE9VVFI7CisgICAgfQorICAgIGZvciAoaW5kZXggPSAwVTsgaW5kZXggPCBsYXN0d29yZHNpemU7IGluZGV4KyspCisgICAgeworICAgICAgKih1aW50MzJfdCAqKShoY3J5cC0+cENyeXBPdXRCdWZmUHRyICsgaGNyeXAtPkNyeXBPdXRDb3VudCkgPSB0ZW1wW2luZGV4XTsKICAgICAgIGhjcnlwLT5DcnlwT3V0Q291bnQrKzsKICAgICB9CiAKQEAgLTM2NDEsNyArMzcwMiw3IEBACiAgIHVpbnQzMl90IGxvb3Bjb3VudGVyOwogICB1aW50MzJfdCBucGJsYjsKICAgdWludDMyX3QgbGFzdHdvcmRzaXplOwotICB1aW50MzJfdCB0ZW1wOyAgLyogVGVtcG9yYXJ5IENyeXBPdXRCdWZmICovCisgIHVpbnQzMl90IHRlbXBbNF0gOyAgLyogVGVtcG9yYXJ5IENyeXBPdXRCdWZmICovCiAgIHVpbnQzMl90IGluY291bnQ7ICAvKiBUZW1wb3JhcnkgQ3J5cEluQ291bnQgVmFsdWUgKi8KICAgdWludDMyX3Qgb3V0Y291bnQ7ICAvKiBUZW1wb3JhcnkgQ3J5cE91dENvdW50IFZhbHVlICovCiAgIHVpbnQzMl90IERvS2V5SVZDb25maWcgPSAxVTsgLyogQnkgZGVmYXVsdCwgY2Fycnkgb3V0IHBlcmlwaGVyYWwgS2V5IGFuZCBJViBjb25maWd1cmF0aW9uICovCkBAIC0zODEzLDkgKzM4NzQsMTEgQEAKICAgICBmb3IgKGxvb3Bjb3VudGVyID0gMFU7IGxvb3Bjb3VudGVyIDwgNFU7IGxvb3Bjb3VudGVyKyspCiAgICAgewogICAgICAgLyogUmVhZCB0aGUgb3V0cHV0IGJsb2NrIGZyb20gdGhlIG91dHB1dCBGSUZPIGFuZCBwdXQgdGhlbSBpbiB0ZW1wb3JhcnkgYnVmZmVyIHRoZW4gZ2V0IENyeXBPdXRCdWZmIGZyb20gdGVtcG9yYXJ5IGJ1ZmZlciAqLwotICAgICAgdGVtcCA9IGhjcnlwLT5JbnN0YW5jZS0+RE9VVFI7Ci0KLSAgICAgICoodWludDMyX3QgKikoaGNyeXAtPnBDcnlwT3V0QnVmZlB0ciArIChoY3J5cC0+Q3J5cE91dENvdW50KSkgPSB0ZW1wOworICAgICAgdGVtcFtsb29wY291bnRlcl0gPSBoY3J5cC0+SW5zdGFuY2UtPkRPVVRSOworICAgIH0KKyAgICBmb3IgKGxvb3Bjb3VudGVyID0gMFU7IGxvb3Bjb3VudGVyPGxhc3R3b3Jkc2l6ZTsgbG9vcGNvdW50ZXIrKykKKyAgICB7CisgICAgICAqKHVpbnQzMl90ICopKGhjcnlwLT5wQ3J5cE91dEJ1ZmZQdHIgKyBoY3J5cC0+Q3J5cE91dENvdW50KSA9IHRlbXBbbG9vcGNvdW50ZXJdOwogICAgICAgaGNyeXAtPkNyeXBPdXRDb3VudCsrOwogICAgIH0KICAgfQpAQCAtNDEzOCw3ICs0MjAxLDcgQEAKICAgdWludDMyX3QgaW5kZXg7CiAgIHVpbnQzMl90IG5wYmxiOwogICB1aW50MzJfdCBsYXN0d29yZHNpemU7Ci0gIHVpbnQzMl90IHRlbXA7ICAvKiBUZW1wb3JhcnkgQ3J5cE91dEJ1ZmYgKi8KKyAgdWludDMyX3QgdGVtcFs0XTsgIC8qIFRlbXBvcmFyeSBDcnlwT3V0QnVmZiAqLwogICB1aW50MzJfdCBEb0tleUlWQ29uZmlnID0gMVU7IC8qIEJ5IGRlZmF1bHQsIGNhcnJ5IG91dCBwZXJpcGhlcmFsIEtleSBhbmQgSVYgY29uZmlndXJhdGlvbiAqLwogCiAgIGlmIChoY3J5cC0+SW5pdC5LZXlJVkNvbmZpZ1NraXAgPT0gQ1JZUF9LRVlJVkNPTkZJR19PTkNFKQpAQCAtNDMxNyw5ICs0MzgwLDExIEBACiAgICAgZm9yIChpbmRleCA9IDBVOyBpbmRleCA8IDRVOyBpbmRleCsrKQogICAgIHsKICAgICAgIC8qIFJlYWQgdGhlIG91dHB1dCBibG9jayBmcm9tIHRoZSBvdXRwdXQgRklGTyBhbmQgcHV0IHRoZW0gaW4gdGVtcG9yYXJ5IGJ1ZmZlciB0aGVuIGdldCBDcnlwT3V0QnVmZiBmcm9tIHRlbXBvcmFyeSBidWZmZXIgKi8KLSAgICAgIHRlbXAgPSBoY3J5cC0+SW5zdGFuY2UtPkRPVVRSOwotCi0gICAgICAqKHVpbnQzMl90ICopKGhjcnlwLT5wQ3J5cE91dEJ1ZmZQdHIgKyAoaGNyeXAtPkNyeXBPdXRDb3VudCkpID0gdGVtcDsKKyAgICAgIHRlbXBbaW5kZXhdID0gaGNyeXAtPkluc3RhbmNlLT5ET1VUUjsKKyAgICB9CisgICAgZm9yIChpbmRleCA9IDBVOyBpbmRleCA8IGxhc3R3b3Jkc2l6ZTsgaW5kZXgrKykKKyAgICB7CisgICAgICAqKHVpbnQzMl90ICopKGhjcnlwLT5wQ3J5cE91dEJ1ZmZQdHIgKyBoY3J5cC0+Q3J5cE91dENvdW50KSA9IHRlbXBbaW5kZXhdOwogICAgICAgaGNyeXAtPkNyeXBPdXRDb3VudCsrOwogICAgIH0KIApAQCAtNDM0MywyOSArNDQwOCwyOCBAQAogc3RhdGljIHZvaWQgQ1JZUF9HQ01DQ01fU2V0UGF5bG9hZFBoYXNlX0lUKENSWVBfSGFuZGxlVHlwZURlZiAqaGNyeXApCiB7CiAgIHVpbnQzMl90IGxvb3Bjb3VudGVyOwotICB1aW50MzJfdCB0ZW1wOyAgLyogVGVtcG9yYXJ5IENyeXBPdXRCdWZmICovCisgIHVpbnQzMl90IHRlbXBbNF07ICAvKiBUZW1wb3JhcnkgQ3J5cE91dEJ1ZmYgKi8KICAgdWludDMyX3QgbGFzdHdvcmRzaXplOwogICB1aW50MzJfdCBucGJsYjsKICAgdWludDMyX3QgbW9kZTsKICAgdWludDE2X3QgaW5jb3VudDsgIC8qIFRlbXBvcmFyeSBDcnlwSW5Db3VudCBWYWx1ZSAqLwogICB1aW50MTZfdCBvdXRjb3VudDsgIC8qIFRlbXBvcmFyeSBDcnlwT3V0Q291bnQgVmFsdWUgKi8KKyAgdWludDMyX3QgaTsKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogUGF5bG9hZCBwaGFzZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAgIC8qIFJlYWQgdGhlIG91dHB1dCBibG9jayBmcm9tIHRoZSBvdXRwdXQgRklGTyBhbmQgcHV0IHRoZW0gaW4gdGVtcG9yYXJ5IGJ1ZmZlciB0aGVuIGdldCBDcnlwT3V0QnVmZiBmcm9tIHRlbXBvcmFyeSBidWZmZXIqLwotICB0ZW1wICA9IGhjcnlwLT5JbnN0YW5jZS0+RE9VVFI7Ci0gICoodWludDMyX3QgKikoaGNyeXAtPnBDcnlwT3V0QnVmZlB0ciArIChoY3J5cC0+Q3J5cE91dENvdW50KSkgPSB0ZW1wOwotICBoY3J5cC0+Q3J5cE91dENvdW50Kys7Ci0gIHRlbXAgID0gaGNyeXAtPkluc3RhbmNlLT5ET1VUUjsKLSAgKih1aW50MzJfdCAqKShoY3J5cC0+cENyeXBPdXRCdWZmUHRyICsgaGNyeXAtPkNyeXBPdXRDb3VudCkgICA9IHRlbXA7Ci0gIGhjcnlwLT5DcnlwT3V0Q291bnQrKzsKLSAgdGVtcCAgPSBoY3J5cC0+SW5zdGFuY2UtPkRPVVRSOwotICAqKHVpbnQzMl90ICopKGhjcnlwLT5wQ3J5cE91dEJ1ZmZQdHIgKyAoaGNyeXAtPkNyeXBPdXRDb3VudCkpID0gdGVtcDsKLSAgaGNyeXAtPkNyeXBPdXRDb3VudCsrOwotICB0ZW1wICA9IGhjcnlwLT5JbnN0YW5jZS0+RE9VVFI7Ci0gICoodWludDMyX3QgKikoaGNyeXAtPnBDcnlwT3V0QnVmZlB0ciArIGhjcnlwLT5DcnlwT3V0Q291bnQpICAgPSB0ZW1wOwotICBoY3J5cC0+Q3J5cE91dENvdW50Kys7Ci0KKyAgZm9yIChpID0gMFU7IGkgPCA0VTsgaSsrKQorICB7CisgICAgdGVtcFtpXSA9IGhjcnlwLT5JbnN0YW5jZS0+RE9VVFI7CisgIH0KKyAgaT0gMFU7CisgIHdoaWxlKChoY3J5cC0+Q3J5cE91dENvdW50IDwgKChoY3J5cC0+U2l6ZSArIDNVKS80VSkpICYmIChpPDRVKSkKKyAgeworICAgICoodWludDMyX3QgKikoaGNyeXAtPnBDcnlwT3V0QnVmZlB0ciArIGhjcnlwLT5DcnlwT3V0Q291bnQpID0gdGVtcFtpXTsKKyAgICBoY3J5cC0+Q3J5cE91dENvdW50Kys7CisgICAgaSsrOworICB9CiAgIGluY291bnQgPSBoY3J5cC0+Q3J5cEluQ291bnQ7CiAgIG91dGNvdW50ID0gaGNyeXAtPkNyeXBPdXRDb3VudDsKICAgaWYgKChvdXRjb3VudCA+PSAgKGhjcnlwLT5TaXplIC8gNFUpKSAmJiAoKGluY291bnQgKiA0VSkgPj0gIGhjcnlwLT5TaXplKSkKQEAgLTQ0OTEsMTAgKzQ1NTUsMjEgQEAKIHN0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBDUllQX0dDTUNDTV9TZXRIZWFkZXJQaGFzZShDUllQX0hhbmRsZVR5cGVEZWYgKmhjcnlwLCB1aW50MzJfdCBUaW1lb3V0KQogewogICB1aW50MzJfdCBsb29wY291bnRlcjsKKyAgdWludDMyX3Qgc2l6ZV9pbl9ieXRlczsKKyAgdWludDMyX3QgdG1wOworICB1aW50MzJfdCBtYXNrWzRdID0gezB4MFUsIDB4MEZGVSwgMHgwRkZGRlUsIDB4MEZGRkZGRlV9OwogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBIZWFkZXIgcGhhc2UgZm9yIEdDTS9HTUFDIG9yIENDTSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIGlmIChoY3J5cC0+SW5pdC5IZWFkZXJXaWR0aFVuaXQgPT0gQ1JZUF9IRUFERVJXSURUSFVOSVRfV09SRCkKKyAgeworICAgIHNpemVfaW5fYnl0ZXMgPSBoY3J5cC0+SW5pdC5IZWFkZXJTaXplICogNFU7CisgIH0KKyAgZWxzZQorICB7CisgICAgc2l6ZV9pbl9ieXRlcyA9IGhjcnlwLT5Jbml0LkhlYWRlclNpemU7CisgIH0KIAotICBpZiAoKGhjcnlwLT5Jbml0LkhlYWRlclNpemUgIT0gMFUpKQorICBpZiAoKHNpemVfaW5fYnl0ZXMgIT0gMFUpKQogICB7CiAgICAgLyogU2VsZWN0IGhlYWRlciBwaGFzZSAqLwogICAgIENSWVBfU0VUX1BIQVNFKGhjcnlwLCBDUllQX1BIQVNFX0hFQURFUik7CkBAIC00NTAyLDEwICs0NTc3LDExIEBACiAgICAgLyogRW5hYmxlIHRoZSBDUllQIHBlcmlwaGVyYWwgKi8KICAgICBfX0hBTF9DUllQX0VOQUJMRShoY3J5cCk7CiAKLSAgICBpZiAoKGhjcnlwLT5Jbml0LkhlYWRlclNpemUgJSA0VSkgPT0gMFUpCisgICAgLyogSWYgc2l6ZV9pbl9ieXRlcyBpcyBhIG11bHRpcGxlIG9mIGJsb2NrcyAoYSBtdWx0aXBsZSBvZiBmb3VyIDMyLWJpdHMgd29yZHMgKSAqLworICAgIGlmICgoc2l6ZV9pbl9ieXRlcyAlIDE2VSkgPT0gMFUpCiAgICAgewotICAgICAgLyogSGVhZGVyU2l6ZSAlNCwgbm8gcGFkZGluZyAqLwotICAgICAgZm9yIChsb29wY291bnRlciA9IDBVOyAobG9vcGNvdW50ZXIgPCBoY3J5cC0+SW5pdC5IZWFkZXJTaXplKTsgbG9vcGNvdW50ZXIgKz0gNFUpCisgICAgICAvKiAgTm8gcGFkZGluZyAqLworICAgICAgZm9yIChsb29wY291bnRlciA9IDBVOyAobG9vcGNvdW50ZXIgPCAoc2l6ZV9pbl9ieXRlcyAvIDRVKSk7IGxvb3Bjb3VudGVyICs9IDRVKQogICAgICAgewogICAgICAgICAvKiBXcml0ZSB0aGUgaW5wdXQgYmxvY2sgaW4gdGhlIGRhdGEgaW5wdXQgcmVnaXN0ZXIgKi8KICAgICAgICAgaGNyeXAtPkluc3RhbmNlLT5ESU5SID0gKih1aW50MzJfdCAqKShoY3J5cC0+SW5pdC5IZWFkZXIgKyBoY3J5cC0+Q3J5cEhlYWRlckNvdW50KTsKQEAgLTQ1MzYsOCArNDYxMiw4IEBACiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAvKldyaXRlIGhlYWRlciBibG9jayBpbiB0aGUgSU4gRklGTyB3aXRob3V0IGxhc3QgYmxvY2sgKi8KLSAgICAgIGZvciAobG9vcGNvdW50ZXIgPSAwVTsgKGxvb3Bjb3VudGVyIDwgKChoY3J5cC0+SW5pdC5IZWFkZXJTaXplKSAtIChoY3J5cC0+SW5pdC5IZWFkZXJTaXplICUgNFUpKSk7IGxvb3Bjb3VudGVyICs9IDRVKQorICAgICAgLyogV3JpdGUgaGVhZGVyIGJsb2NrIGluIHRoZSBJTiBGSUZPIHdpdGhvdXQgbGFzdCBibG9jayAqLworICAgICAgZm9yIChsb29wY291bnRlciA9IDBVOyAobG9vcGNvdW50ZXIgPCAoKHNpemVfaW5fYnl0ZXMgLyAxNlUpICogNFUpKTsgbG9vcGNvdW50ZXIgKz0gNFUpCiAgICAgICB7CiAgICAgICAgIC8qIFdyaXRlIHRoZSBpbnB1dCBibG9jayBpbiB0aGUgZGF0YSBpbnB1dCByZWdpc3RlciAqLwogICAgICAgICBoY3J5cC0+SW5zdGFuY2UtPkRJTlIgPSAqKHVpbnQzMl90ICopKGhjcnlwLT5Jbml0LkhlYWRlciArIGhjcnlwLT5DcnlwSGVhZGVyQ291bnQpOwpAQCAtNDU2NSwxNyArNDY0MSwzNSBAQAogICAgICAgICAvKiBDbGVhciBDQ0YgZmxhZyAqLwogICAgICAgICBfX0hBTF9DUllQX0NMRUFSX0ZMQUcoaGNyeXAsIENSWVBfQ0NGX0NMRUFSKTsKICAgICAgIH0KLSAgICAgIC8qICBMYXN0IGJsb2NrIG9wdGlvbmFsbHkgcGFkIHRoZSBkYXRhIHdpdGggemVyb3MqLwotICAgICAgZm9yIChsb29wY291bnRlciA9IDBVOyAobG9vcGNvdW50ZXIgPCAoaGNyeXAtPkluaXQuSGVhZGVyU2l6ZSAlIDRVKSk7IGxvb3Bjb3VudGVyKyspCisgICAgICAvKiBXcml0ZSBsYXN0IGNvbXBsZXRlIHdvcmRzICovCisgICAgICBmb3IgKGxvb3Bjb3VudGVyID0gMFU7IChsb29wY291bnRlciA8ICgoc2l6ZV9pbl9ieXRlcyAvIDRVKSAlIDRVKSk7IGxvb3Bjb3VudGVyKyspCiAgICAgICB7CiAgICAgICAgIGhjcnlwLT5JbnN0YW5jZS0+RElOUiA9ICoodWludDMyX3QgKikoaGNyeXAtPkluaXQuSGVhZGVyICsgaGNyeXAtPkNyeXBIZWFkZXJDb3VudCk7CiAgICAgICAgIGhjcnlwLT5DcnlwSGVhZGVyQ291bnQrKyA7CiAgICAgICB9Ci0gICAgICB3aGlsZSAobG9vcGNvdW50ZXIgPCA0VSkKKyAgICAgIC8qIElmIHRoZSBoZWFkZXIgc2l6ZSBpcyBhIG11bHRpcGxlIG9mIHdvcmRzICovCisgICAgICBpZiAoKHNpemVfaW5fYnl0ZXMgJSA0VSkgPT0gMFUpCiAgICAgICB7Ci0gICAgICAgIC8qUGFkIHRoZSBkYXRhIHdpdGggemVyb3MgdG8gaGF2ZSBhIGNvbXBsZXRlIGJsb2NrICovCi0gICAgICAgIGhjcnlwLT5JbnN0YW5jZS0+RElOUiA9IDB4MFU7Ci0gICAgICAgIGxvb3Bjb3VudGVyKys7CisgICAgICAgIC8qIFBhZCB0aGUgZGF0YSB3aXRoIHplcm9zIHRvIGhhdmUgYSBjb21wbGV0ZSBibG9jayAqLworICAgICAgICB3aGlsZSAobG9vcGNvdW50ZXIgPCA0VSkKKyAgICAgICAgeworICAgICAgICAgIGhjcnlwLT5JbnN0YW5jZS0+RElOUiA9IDB4MFU7CisgICAgICAgICAgbG9vcGNvdW50ZXIrKzsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICAgLyogRW50ZXIgbGFzdCBieXRlcywgcGFkZGVkIHdpdGggemVyb2VzICovCisgICAgICAgICB0bXAgPSAgKih1aW50MzJfdCAqKShoY3J5cC0+SW5pdC5IZWFkZXIgKyBoY3J5cC0+Q3J5cEhlYWRlckNvdW50KTsKKyAgICAgICAgIHRtcCAmPSBtYXNrW3NpemVfaW5fYnl0ZXMgJSA0VV07CisgICAgICAgICBoY3J5cC0+SW5zdGFuY2UtPkRJTlIgPSB0bXA7CisgICAgICAgICBsb29wY291bnRlcisrOworICAgICAgICAgLyogUGFkIHRoZSBkYXRhIHdpdGggemVyb3MgdG8gaGF2ZSBhIGNvbXBsZXRlIGJsb2NrICovCisgICAgICAgICB3aGlsZSAobG9vcGNvdW50ZXIgPCA0VSkKKyAgICAgICAgIHsKKyAgICAgICAgICAgaGNyeXAtPkluc3RhbmNlLT5ESU5SID0gMHgwVTsKKyAgICAgICAgICAgbG9vcGNvdW50ZXIrKzsKKyAgICAgICAgIH0KICAgICAgIH0KIAogICAgICAgaWYgKENSWVBfV2FpdE9uQ0NGbGFnKGhjcnlwLCBUaW1lb3V0KSAhPSBIQUxfT0spCkBAIC01MDA2LDcgKzUxMDAsNyBAQAogICBfX0lPIHVpbnQzMl90IGNvdW50ID0gMFU7CiAKICAgLyogSW4gY2FzZSBvZiBHQ00gcGF5bG9hZCBwaGFzZSBlbmNyeXB0aW9uLCBjaGVjayB0aGF0IHN1c3BlbnNpb24gY2FuIGJlIGNhcnJpZWQgb3V0ICovCi0gIGlmIChSRUFEX0JJVChoY3J5cC0+SW5zdGFuY2UtPkNSLCAoQUVTX0NSX0NITU9EfEFFU19DUl9HQ01QSHxBRVNfQ1JfTU9ERSkpID09IChDUllQX0FFU19HQ01fR01BQ3xBRVNfQ1JfR0NNUEhfMXwweDApKQorICBpZiAoUkVBRF9CSVQoaGNyeXAtPkluc3RhbmNlLT5DUiwgKEFFU19DUl9DSE1PRHxBRVNfQ1JfR0NNUEh8QUVTX0NSX01PREUpKSA9PSAoQ1JZUF9BRVNfR0NNX0dNQUN8QUVTX0NSX0dDTVBIXzF8MHgwVSkpCiAgIHsKIAogICAgICAgLyogV2FpdCBmb3IgQlVTWSBmbGFnIHRvIGJlIGNsZWFyZWQgKi8KQEAgLTUxNDQsMjEgKzUyMzgsMjEgQEAKICAgaWYgKEtleVNpemUgPT0gQ1JZUF9LRVlTSVpFXzI1NkIpCiAgIHsKICAgICBoY3J5cC0+SW5zdGFuY2UtPktFWVI3ID0gKih1aW50MzJfdCopKGtleWFkZHIpOwotICAgIGtleWFkZHIrPTQ7CisgICAga2V5YWRkcis9NFU7CiAgICAgaGNyeXAtPkluc3RhbmNlLT5LRVlSNiA9ICoodWludDMyX3QqKShrZXlhZGRyKTsKLSAgICBrZXlhZGRyKz00OworICAgIGtleWFkZHIrPTRVOwogICAgIGhjcnlwLT5JbnN0YW5jZS0+S0VZUjUgPSAqKHVpbnQzMl90Kikoa2V5YWRkcik7Ci0gICAga2V5YWRkcis9NDsKKyAgICBrZXlhZGRyKz00VTsKICAgICBoY3J5cC0+SW5zdGFuY2UtPktFWVI0ID0gKih1aW50MzJfdCopKGtleWFkZHIpOwotICAgIGtleWFkZHIrPTQ7CisgICAga2V5YWRkcis9NFU7CiAgIH0KIAogICAgIGhjcnlwLT5JbnN0YW5jZS0+S0VZUjMgPSAqKHVpbnQzMl90Kikoa2V5YWRkcik7Ci0gICAga2V5YWRkcis9NDsKKyAgICBrZXlhZGRyKz00VTsKICAgICBoY3J5cC0+SW5zdGFuY2UtPktFWVIyID0gKih1aW50MzJfdCopKGtleWFkZHIpOwotICAgIGtleWFkZHIrPTQ7CisgICAga2V5YWRkcis9NFU7CiAgICAgaGNyeXAtPkluc3RhbmNlLT5LRVlSMSA9ICoodWludDMyX3QqKShrZXlhZGRyKTsKLSAgICBrZXlhZGRyKz00OworICAgIGtleWFkZHIrPTRVOwogICAgIGhjcnlwLT5JbnN0YW5jZS0+S0VZUjAgPSAqKHVpbnQzMl90Kikoa2V5YWRkcik7CiB9CiAKQEAgLTUxNzAsOSArNTI2NCwxOSBAQAogICAqLwogc3RhdGljIHZvaWQgQ1JZUF9QaGFzZVByb2Nlc3NpbmdSZXN1bWUoQ1JZUF9IYW5kbGVUeXBlRGVmICpoY3J5cCkKIHsKLSAgdWludDMyX3QgbG9vcGNvdW50ZXIgPSAwVTsKLSAgdWludDMyX3QgbGFzdHdvcmRzaXplID0wOwotICB1aW50MzJfdCBucGJsYiA9IDBVIDsKKyAgdWludDMyX3QgbG9vcGNvdW50ZXI7CisgIHVpbnQxNl90IGxhc3R3b3Jkc2l6ZTsKKyAgdWludDE2X3QgbnBibGI7CisgIHVpbnQzMl90IGNyX3RlbXA7CisKKworICBfX0hBTF9DUllQX0NMRUFSX0ZMQUcoaGNyeXAsIENSWVBfRVJSX0NMRUFSIHwgQ1JZUF9DQ0ZfQ0xFQVIpOworCisgIC8qIEVuYWJsZSBjb21wdXRhdGlvbiBjb21wbGV0ZSBmbGFnIGFuZCBlcnJvciBpbnRlcnJ1cHRzICovCisgIF9fSEFMX0NSWVBfRU5BQkxFX0lUKGhjcnlwLCBDUllQX0lUX0NDRklFIHwgQ1JZUF9JVF9FUlJJRSk7CisKKyAgLyogRW5hYmxlIHRoZSBDUllQIHBlcmlwaGVyYWwgKi8KKyAgX19IQUxfQ1JZUF9FTkFCTEUoaGNyeXApOwogCiAgIC8qIENhc2Ugb2YgaGVhZGVyIHBoYXNlIHJlc3VtcHRpb24gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAgIGlmIChoY3J5cC0+UGhhc2UgPT0gQ1JZUF9QSEFTRV9IRUFERVJfU1VTUEVOREVEKQpAQCAtNTE4Myw3ICs1Mjg3LDcgQEAKICAgICAvKiBTZWxlY3QgaGVhZGVyIHBoYXNlICovCiAgICAgQ1JZUF9TRVRfUEhBU0UoaGNyeXAsIENSWVBfUEhBU0VfSEVBREVSKTsKIAotICAgIGlmICgoKGhjcnlwLT5Jbml0LkhlYWRlclNpemUpIC0gKGhjcnlwLT5DcnlwSGVhZGVyQ291bnQpID49IDRVKSkKKyAgICBpZiAoKCgoaGNyeXAtPkluaXQuSGVhZGVyU2l6ZSkgLSAoaGNyeXAtPkNyeXBIZWFkZXJDb3VudCkpID49IDRVKSkKICAgICB7CiAgICAgICAvKiBXcml0ZSB0aGUgaW5wdXQgYmxvY2sgaW4gdGhlIElOIEZJRk8gKi8KICAgICAgIGhjcnlwLT5JbnN0YW5jZS0+RElOUiAgPSAqKHVpbnQzMl90ICopKGhjcnlwLT5Jbml0LkhlYWRlciArIGhjcnlwLT5DcnlwSGVhZGVyQ291bnQgKTsKQEAgLTUyMTIsNzMgKzUzMTYsNzcgQEAKICAgICB9CiAgIH0KICAgLyogQ2FzZSBvZiBwYXlsb2FkIHBoYXNlIHJlc3VtcHRpb24gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0gIGVsc2UgaWYgKGhjcnlwLT5QaGFzZSA9PSBDUllQX1BIQVNFX1BBWUxPQURfU1VTUEVOREVEKQorICBlbHNlCiAgIHsKLQotICAgIC8qIFNldCB0aGUgcGhhc2UgKi8KLSAgICBoY3J5cC0+UGhhc2UgPSBDUllQX1BIQVNFX1BST0NFU1M7Ci0KLSAgIC8qIFNlbGVjdCBwYXlsb2FkIHBoYXNlIG9uY2UgdGhlIGhlYWRlciBwaGFzZSBpcyBwZXJmb3JtZWQgKi8KLSAgIE1PRElGWV9SRUcoaGNyeXAtPkluc3RhbmNlLT5DUiwgQUVTX0NSX0dDTVBILCBDUllQX1BIQVNFX1BBWUxPQUQpOwotCi0gICAvKiBTZXQgdG8gMCB0aGUgbnVtYmVyIG9mIG5vbi12YWxpZCBieXRlcyB1c2luZyBOUEJMQiByZWdpc3RlciovCi0gICBNT0RJRllfUkVHKGhjcnlwLT5JbnN0YW5jZS0+Q1IsIEFFU19DUl9OUEJMQiwgMFUpOwotCi0gICAgaWYgKChoY3J5cC0+U2l6ZS80KSAtIChoY3J5cC0+Q3J5cEluQ291bnQpID49IDRVKQorICAgIGlmIChoY3J5cC0+UGhhc2UgPT0gQ1JZUF9QSEFTRV9QQVlMT0FEX1NVU1BFTkRFRCkKICAgICB7Ci0gICAgICAvKiBXcml0ZSB0aGUgaW5wdXQgYmxvY2sgaW4gdGhlIElOIEZJRk8gKi8KLSAgICAgIGhjcnlwLT5JbnN0YW5jZS0+RElOUiAgPSAqKHVpbnQzMl90ICopKGhjcnlwLT5wQ3J5cEluQnVmZlB0ciArIGhjcnlwLT5DcnlwSW5Db3VudCApOwotICAgICAgaGNyeXAtPkNyeXBJbkNvdW50Kys7Ci0gICAgICBoY3J5cC0+SW5zdGFuY2UtPkRJTlIgID0gKih1aW50MzJfdCAqKShoY3J5cC0+cENyeXBJbkJ1ZmZQdHIgKyBoY3J5cC0+Q3J5cEluQ291bnQgKTsKLSAgICAgIGhjcnlwLT5DcnlwSW5Db3VudCsrOwotICAgICAgaGNyeXAtPkluc3RhbmNlLT5ESU5SICA9ICoodWludDMyX3QgKikoaGNyeXAtPnBDcnlwSW5CdWZmUHRyICsgaGNyeXAtPkNyeXBJbkNvdW50ICk7Ci0gICAgICBoY3J5cC0+Q3J5cEluQ291bnQrKzsKLSAgICAgIGhjcnlwLT5JbnN0YW5jZS0+RElOUiAgPSAqKHVpbnQzMl90ICopKGhjcnlwLT5wQ3J5cEluQnVmZlB0ciArIGhjcnlwLT5DcnlwSW5Db3VudCApOwotICAgICAgaGNyeXAtPkNyeXBJbkNvdW50Kys7Ci0gICAgICBpZigoaGNyeXAtPkNyeXBJbkNvdW50ID09ICBoY3J5cC0+U2l6ZSkgJiYgKGhjcnlwLT5Jbml0LkFsZ29yaXRobSA9PSBDUllQX0FFU19HQ01fR01BQykpCi0gICAgICB7Ci0gICAgICAgIC8qIENhbGwgb3V0cHV0IHRyYW5zZmVyIGNvbXBsZXRlIGNhbGxiYWNrICovCi0jaWYgKFVTRV9IQUxfQ1JZUF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKLSAgICAgICAgLypDYWxsIHJlZ2lzdGVyZWQgSW5wdXQgY29tcGxldGUgY2FsbGJhY2sqLwotICAgICAgICBoY3J5cC0+SW5DcGx0Q2FsbGJhY2soaGNyeXApOwotI2Vsc2UKLSAgICAgICAgLypDYWxsIGxlZ2FjeSB3ZWFrIElucHV0IGNvbXBsZXRlIGNhbGxiYWNrKi8KLSAgICAgICAgSEFMX0NSWVBfSW5DcGx0Q2FsbGJhY2soaGNyeXApOwotI2VuZGlmIC8qIFVTRV9IQUxfQ1JZUF9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSAvKiBMYXN0IGJsb2NrIG9mIHBheWxvYWQgPCAxMjhiaXQqLwotICAgIHsKLSAgICAgIC8qIENvbXB1dGUgdGhlIG51bWJlciBvZiBwYWRkaW5nIGJ5dGVzIGluIGxhc3QgYmxvY2sgb2YgcGF5bG9hZCAqLwotICAgICAgbnBibGIgPSAoKGhjcnlwLT5TaXplLzE2VSkrMVUpKjE2VS0gKGhjcnlwLT5TaXplKTsKLSAgICAgIGlmKCgoKGhjcnlwLT5JbnN0YW5jZS0+Q1IgJiBBRVNfQ1JfTU9ERSkgPT0gQ1JZUF9PUEVSQVRJTkdNT0RFX0VOQ1JZUFQpICYmIChoY3J5cC0+SW5pdC5BbGdvcml0aG0gPT0gQ1JZUF9BRVNfR0NNX0dNQUMpKSB8fAotICAgICAgICAgKCgoaGNyeXAtPkluc3RhbmNlLT5DUiAmIEFFU19DUl9NT0RFKSA9PSBDUllQX09QRVJBVElOR01PREVfREVDUllQVCkgJiYgKGhjcnlwLT5Jbml0LkFsZ29yaXRobSA9PSBDUllQX0FFU19DQ00pKSkKLSAgICAgIHsKLSAgICAgICAgLyogU3BlY2lmeSB0aGUgbnVtYmVyIG9mIG5vbi12YWxpZCBieXRlcyB1c2luZyBOUEJMQiByZWdpc3RlciovCi0gICAgICAgIE1PRElGWV9SRUcoaGNyeXAtPkluc3RhbmNlLT5DUiwgQUVTX0NSX05QQkxCLCBucGJsYjw8IDIwVSk7Ci0gICAgICB9CiAKLSAgICAgIC8qIE51bWJlciBvZiB2YWxpZCB3b3JkcyAobGFzdHdvcmRzaXplKSBpbiBsYXN0IGJsb2NrICovCi0gICAgICBpZiAobnBibGIgJSA0VSA9PTBVKQotICAgICAgewotICAgICAgICBsYXN0d29yZHNpemUgPSAoMTZVLW5wYmxiKS80VTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgbGFzdHdvcmRzaXplID0gKDE2VS1ucGJsYikvNFUgKzFVOwotICAgICAgfQorICAgICAgLyogU2V0IHRoZSBwaGFzZSAqLworICAgICAgaGNyeXAtPlBoYXNlID0gQ1JZUF9QSEFTRV9QUk9DRVNTOwogCi0gICAgICAvKiAgTGFzdCBibG9jayBvcHRpb25hbGx5IHBhZCB0aGUgZGF0YSB3aXRoIHplcm9zKi8KLSAgICAgIGZvcihsb29wY291bnRlciA9IDBVOyBsb29wY291bnRlciA8IGxhc3R3b3Jkc2l6ZTsgbG9vcGNvdW50ZXIrKykKKyAgICAgIC8qIFNlbGVjdCBwYXlsb2FkIHBoYXNlIG9uY2UgdGhlIGhlYWRlciBwaGFzZSBpcyBwZXJmb3JtZWQgKi8KKyAgICAgIE1PRElGWV9SRUcoaGNyeXAtPkluc3RhbmNlLT5DUiwgQUVTX0NSX0dDTVBILCBDUllQX1BIQVNFX1BBWUxPQUQpOworCisgICAgICAvKiBTZXQgdG8gMCB0aGUgbnVtYmVyIG9mIG5vbi12YWxpZCBieXRlcyB1c2luZyBOUEJMQiByZWdpc3RlciovCisgICAgICBNT0RJRllfUkVHKGhjcnlwLT5JbnN0YW5jZS0+Q1IsIEFFU19DUl9OUEJMQiwgMFUpOworCisgICAgICBpZiAoKChoY3J5cC0+U2l6ZS80VSkgLSAoaGNyeXAtPkNyeXBJbkNvdW50KSkgPj0gNFUpCiAgICAgICB7Ci0gICAgICAgIGhjcnlwLT5JbnN0YW5jZS0+RElOUiA9ICoodWludDMyX3QgKikoaGNyeXAtPnBDcnlwSW5CdWZmUHRyICsgaGNyeXAtPkNyeXBJbkNvdW50ICk7CisgICAgICAgIC8qIFdyaXRlIHRoZSBpbnB1dCBibG9jayBpbiB0aGUgSU4gRklGTyAqLworICAgICAgICBoY3J5cC0+SW5zdGFuY2UtPkRJTlIgID0gKih1aW50MzJfdCAqKShoY3J5cC0+cENyeXBJbkJ1ZmZQdHIgKyBoY3J5cC0+Q3J5cEluQ291bnQgKTsKICAgICAgICAgaGNyeXAtPkNyeXBJbkNvdW50Kys7CisgICAgICAgIGhjcnlwLT5JbnN0YW5jZS0+RElOUiAgPSAqKHVpbnQzMl90ICopKGhjcnlwLT5wQ3J5cEluQnVmZlB0ciArIGhjcnlwLT5DcnlwSW5Db3VudCApOworICAgICAgICBoY3J5cC0+Q3J5cEluQ291bnQrKzsKKyAgICAgICAgaGNyeXAtPkluc3RhbmNlLT5ESU5SICA9ICoodWludDMyX3QgKikoaGNyeXAtPnBDcnlwSW5CdWZmUHRyICsgaGNyeXAtPkNyeXBJbkNvdW50ICk7CisgICAgICAgIGhjcnlwLT5DcnlwSW5Db3VudCsrOworICAgICAgICBoY3J5cC0+SW5zdGFuY2UtPkRJTlIgID0gKih1aW50MzJfdCAqKShoY3J5cC0+cENyeXBJbkJ1ZmZQdHIgKyBoY3J5cC0+Q3J5cEluQ291bnQgKTsKKyAgICAgICAgaGNyeXAtPkNyeXBJbkNvdW50Kys7CisgICAgICAgIGlmKChoY3J5cC0+Q3J5cEluQ291bnQgPT0gIGhjcnlwLT5TaXplKSAmJiAoaGNyeXAtPkluaXQuQWxnb3JpdGhtID09IENSWVBfQUVTX0dDTV9HTUFDKSkKKyAgICAgICAgeworICAgICAgICAgIC8qIENhbGwgb3V0cHV0IHRyYW5zZmVyIGNvbXBsZXRlIGNhbGxiYWNrICovCisjaWYgKFVTRV9IQUxfQ1JZUF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKKyAgICAgICAgICAvKkNhbGwgcmVnaXN0ZXJlZCBJbnB1dCBjb21wbGV0ZSBjYWxsYmFjayovCisgICAgICAgICAgaGNyeXAtPkluQ3BsdENhbGxiYWNrKGhjcnlwKTsKKyNlbHNlCisgICAgICAgICAgLypDYWxsIGxlZ2FjeSB3ZWFrIElucHV0IGNvbXBsZXRlIGNhbGxiYWNrKi8KKyAgICAgICAgICBIQUxfQ1JZUF9JbkNwbHRDYWxsYmFjayhoY3J5cCk7CisjZW5kaWYgLyogVVNFX0hBTF9DUllQX1JFR0lTVEVSX0NBTExCQUNLUyAqLworICAgICAgICB9CiAgICAgICB9Ci0gICAgICB3aGlsZShsb29wY291bnRlciA8IDRVICkKKyAgICAgIGVsc2UgLyogTGFzdCBibG9jayBvZiBwYXlsb2FkIDwgMTI4Yml0Ki8KICAgICAgIHsKLSAgICAgICAgLyogcGFkIHRoZSBkYXRhIHdpdGggemVyb3MgdG8gaGF2ZSBhIGNvbXBsZXRlIGJsb2NrICovCi0gICAgICAgIGhjcnlwLT5JbnN0YW5jZS0+RElOUiA9IDB4MFU7Ci0gICAgICAgIGxvb3Bjb3VudGVyKys7CisgICAgICAgIC8qIENvbXB1dGUgdGhlIG51bWJlciBvZiBwYWRkaW5nIGJ5dGVzIGluIGxhc3QgYmxvY2sgb2YgcGF5bG9hZCAqLworICAgICAgICBucGJsYiA9ICgoKGhjcnlwLT5TaXplLzE2VSkrMVUpKjE2VSkgLSAoaGNyeXAtPlNpemUpOworICAgICAgICBjcl90ZW1wID0gaGNyeXAtPkluc3RhbmNlLT5DUjsKKyAgICAgICAgaWYoKCgoY3JfdGVtcCAmIEFFU19DUl9NT0RFKSA9PSBDUllQX09QRVJBVElOR01PREVfRU5DUllQVCkgJiYgKGhjcnlwLT5Jbml0LkFsZ29yaXRobSA9PSBDUllQX0FFU19HQ01fR01BQykpIHx8CisgICAgICAgICAgICgoKGNyX3RlbXAmIEFFU19DUl9NT0RFKSA9PSBDUllQX09QRVJBVElOR01PREVfREVDUllQVCkgJiYgKGhjcnlwLT5Jbml0LkFsZ29yaXRobSA9PSBDUllQX0FFU19DQ00pKSkKKyAgICAgICAgeworICAgICAgICAgIC8qIFNwZWNpZnkgdGhlIG51bWJlciBvZiBub24tdmFsaWQgYnl0ZXMgdXNpbmcgTlBCTEIgcmVnaXN0ZXIqLworICAgICAgICAgICAgTU9ESUZZX1JFRyhoY3J5cC0+SW5zdGFuY2UtPkNSLCBBRVNfQ1JfTlBCTEIsICgodWludDMyX3QpbnBibGIpPDwgMjBVKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIE51bWJlciBvZiB2YWxpZCB3b3JkcyAobGFzdHdvcmRzaXplKSBpbiBsYXN0IGJsb2NrICovCisgICAgICAgIGlmICgobnBibGIgJSA0VSkgPT0wVSkKKyAgICAgICAgeworICAgICAgICAgIGxhc3R3b3Jkc2l6ZSA9ICgxNlUtbnBibGIpLzRVOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGxhc3R3b3Jkc2l6ZSA9ICgoMTZVLW5wYmxiKS80VSkgKzFVOworICAgICAgICB9CisKKyAgICAgICAgLyogIExhc3QgYmxvY2sgb3B0aW9uYWxseSBwYWQgdGhlIGRhdGEgd2l0aCB6ZXJvcyovCisgICAgICAgIGZvcihsb29wY291bnRlciA9IDBVOyBsb29wY291bnRlciA8IGxhc3R3b3Jkc2l6ZTsgbG9vcGNvdW50ZXIrKykKKyAgICAgICAgeworICAgICAgICAgIGhjcnlwLT5JbnN0YW5jZS0+RElOUiA9ICoodWludDMyX3QgKikoaGNyeXAtPnBDcnlwSW5CdWZmUHRyICsgaGNyeXAtPkNyeXBJbkNvdW50ICk7CisgICAgICAgICAgaGNyeXAtPkNyeXBJbkNvdW50Kys7CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUobG9vcGNvdW50ZXIgPCA0VSApCisgICAgICAgIHsKKyAgICAgICAgICAvKiBwYWQgdGhlIGRhdGEgd2l0aCB6ZXJvcyB0byBoYXZlIGEgY29tcGxldGUgYmxvY2sgKi8KKyAgICAgICAgICBoY3J5cC0+SW5zdGFuY2UtPkRJTlIgPSAweDBVOworICAgICAgICAgIGxvb3Bjb3VudGVyKys7CisgICAgICAgIH0KICAgICAgIH0KICAgICB9CiAgIH0KZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmc0eHhfaGFsX2NyeXBfZXguYyBiL1NyYy9zdG0zMmc0eHhfaGFsX2NyeXBfZXguYwppbmRleCBkZGUyM2E2Li4xMDBkN2I1IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJnNHh4X2hhbF9jcnlwX2V4LmMKKysrIGIvU3JjL3N0bTMyZzR4eF9oYWxfY3J5cF9leC5jCkBAIC05LDcgKzksNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE4IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKQEAgLTk5LDEwICs5OSwxNyBAQAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0NSWVBFeF9BRVNHQ01fR2VuZXJhdGVBdXRoVEFHKENSWVBfSGFuZGxlVHlwZURlZiAqaGNyeXAsIHVpbnQzMl90ICpBdXRoVGFnLCB1aW50MzJfdCBUaW1lb3V0KQogewogICB1aW50MzJfdCB0aWNrc3RhcnQ7CisgIC8qIEFzc3VtZSBmaXJzdCBJbml0LkhlYWRlclNpemUgaXMgaW4gd29yZHMgKi8KICAgdWludDY0X3QgaGVhZGVybGVuZ3RoID0gKHVpbnQ2NF90KWhjcnlwLT5Jbml0LkhlYWRlclNpemUgKiAzMlU7IC8qIEhlYWRlciBsZW5ndGggaW4gYml0cyAqLwotICB1aW50NjRfdCBpbnB1dGxlbmd0aCA9ICh1aW50NjRfdCloY3J5cC0+U2l6ZXNTdW0gKiA4VTsgLyogaW5wdXQgbGVuZ3RoIGluIGJpdHMgKi8KKyAgdWludDY0X3QgaW5wdXRsZW5ndGggPSAodWludDY0X3QpaGNyeXAtPlNpemVzU3VtICogOFU7IC8qIElucHV0IGxlbmd0aCBpbiBiaXRzICovCiAgIHVpbnQzMl90IHRhZ2FkZHIgPSAodWludDMyX3QpQXV0aFRhZzsKIAorICAvKiBDb3JyZWN0IGhlYWRlcmxlbmd0aCBpZiBJbml0LkhlYWRlclNpemUgaXMgYWN0dWFsbHkgaW4gYnl0ZXMgKi8KKyAgaWYgKGhjcnlwLT5Jbml0LkhlYWRlcldpZHRoVW5pdCA9PSBDUllQX0hFQURFUldJRFRIVU5JVF9CWVRFKQorICB7CisgICAgaGVhZGVybGVuZ3RoIC89IDRVOworICB9CisKICAgaWYgKGhjcnlwLT5TdGF0ZSA9PSBIQUxfQ1JZUF9TVEFURV9SRUFEWSkKICAgewogICAgIC8qIFByb2Nlc3MgbG9ja2VkICovCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJnNHh4X2hhbF9mbWFjLmMgYi9TcmMvc3RtMzJnNHh4X2hhbF9mbWFjLmMKaW5kZXggZjU4MTZiYi4uOTg4NDI4YSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZzR4eF9oYWxfZm1hYy5jCisrKyBiL1NyYy9zdG0zMmc0eHhfaGFsX2ZtYWMuYwpAQCAtOSw3ICs5LDIwIEBACiAgICogICAgICAgICAgICsgUGVyaXBoZXJhbCBDb250cm9sIGZ1bmN0aW9ucwogICAqICAgICAgICAgICArIENhbGxiYWNrIGZ1bmN0aW9ucwogICAqICAgICAgICAgICArIElSUSBoYW5kbGVyIG1hbmFnZW1lbnQKLSAgKiAgICAgICAgICAgKyBQZXJpcGhlcmFsIFN0YXRlIGZ1bmN0aW9ucworICAqICAgICAgICAgICArIFBlcmlwaGVyYWwgU3RhdGUgYW5kIEVycm9yIGZ1bmN0aW9ucworICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBhdHRlbnRpb24KKyAgKgorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KKyAgKgorICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLAorICAqIHRoZSAiTGljZW5zZSI7IFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUKKyAgKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQ6CisgICogICAgICAgICAgICAgICAgICAgICAgICBvcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2UKKyAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKgogICAqICBAdmVyYmF0aW0KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0xOCwxNyArMzEsMTggQEAKICAgICBbLi5dCiAgICAgICBUaGUgRk1BQyBIQUwgZHJpdmVyIGNhbiBiZSB1c2VkIGFzIGZvbGxvd3M6CiAKLSAgICAgICgjKSBJbml0aWFsaXplIHRoZSBGTUFDIGxvdyBsZXZlbCByZXNvdXJjZXMgYnkgaW1wbGVtZW50aW5nIHRoZSBIQUxfRk1BQ19Nc3BJbml0KCk6Ci0gICAgICAgICAgKCsrKSBFbmFibGUgdGhlIEZNQUMgaW50ZXJmYWNlIGNsb2NrIHVzaW5nIF9fSEFMX1JDQ19GTUFDX0NMS19FTkFCTEUoKS4KKyAgICAgICgjKSBJbml0aWFsaXplIHRoZSBGTUFDIGxvdyBsZXZlbCByZXNvdXJjZXMgYnkgaW1wbGVtZW50aW5nIHRoZSBAcmVmIEhBTF9GTUFDX01zcEluaXQoKToKKyAgICAgICAgICAoKyspIEVuYWJsZSB0aGUgRk1BQyBpbnRlcmZhY2UgY2xvY2sgdXNpbmcgQHJlZiBfX0hBTF9SQ0NfRk1BQ19DTEtfRU5BQkxFKCkuCiAgICAgICAgICAgKCsrKSBJbiBjYXNlIG9mIHVzaW5nIGludGVycnVwdHMgKGUuZy4gYWNjZXNzIGNvbmZpZ3VyZWQgYXMgRk1BQ19CVUZGRVJfQUNDRVNTX0lUKToKLSAgICAgICAgICAgICAgICgrKyspIENvbmZpZ3VyZSB0aGUgRk1BQyBpbnRlcnJ1cHQgcHJpb3JpdHkgdXNpbmcgSEFMX05WSUNfU2V0UHJpb3JpdHkoKS4KLSAgICAgICAgICAgICAgICgrKyspIEVuYWJsZSB0aGUgRk1BQyBJUlEgaGFuZGxlciB1c2luZyBIQUxfTlZJQ19FbmFibGVJUlEoKS4KLSAgICAgICAgICAgICAgICgrKyspIEluIEZNQUMgSVJRIGhhbmRsZXIsIGNhbGwgSEFMX0ZNQUNfSVJRSGFuZGxlcigpLgorICAgICAgICAgICAgICAgKCsrKykgQ29uZmlndXJlIHRoZSBGTUFDIGludGVycnVwdCBwcmlvcml0eSB1c2luZyBAcmVmIEhBTF9OVklDX1NldFByaW9yaXR5KCkuCisgICAgICAgICAgICAgICAoKysrKSBFbmFibGUgdGhlIEZNQUMgSVJRIGhhbmRsZXIgdXNpbmcgQHJlZiBIQUxfTlZJQ19FbmFibGVJUlEoKS4KKyAgICAgICAgICAgICAgICgrKyspIEluIEZNQUMgSVJRIGhhbmRsZXIsIGNhbGwgQHJlZiBIQUxfRk1BQ19JUlFIYW5kbGVyKCkuCiAgICAgICAgICAgKCsrKSBJbiBjYXNlIG9mIHVzaW5nIERNQSB0byBjb250cm9sIGRhdGEgdHJhbnNmZXIgKGUuZy4gYWNjZXNzIGNvbmZpZ3VyZWQKICAgICAgICAgICAgICAgIGFzIEZNQUNfQlVGRkVSX0FDQ0VTU19ETUEpOgotICAgICAgICAgICAgICAgKCsrKykgRW5hYmxlIHRoZSBETUExIGludGVyZmFjZSBjbG9jayB1c2luZyBfX0hBTF9SQ0NfRE1BMV9DTEtfRU5BQkxFKCkuCi0gICAgICAgICAgICAgICAoKysrKSBFbmFibGUgdGhlIERNQU1VWDEgaW50ZXJmYWNlIGNsb2NrIHVzaW5nIF9fSEFMX1JDQ19ETUFNVVgxX0NMS19FTkFCTEUoKS4KLSAgICAgICAgICAgICAgICgrKyspIElmIHRoZSBpbml0aWFsaXNhdGlvbiBvZiB0aGUgaW50ZXJuYWwgYnVmZmVycyAoY29lZmZpY2llbnRzLCBpbnB1dCwKKyAgICAgICAgICAgICAgICgrKyspIEVuYWJsZSB0aGUgRE1BIGludGVyZmFjZSBjbG9jayB1c2luZyBAcmVmIF9fSEFMX1JDQ19ETUExX0NMS19FTkFCTEUoKQorICAgICAgICAgICAgICAgICAgICAgb3IgQHJlZiBfX0hBTF9SQ0NfRE1BMl9DTEtfRU5BQkxFKCkgZGVwZW5kaW5nIG9uIHRoZSB1c2VkIERNQSBpbnN0YW5jZS4KKyAgICAgICAgICAgICAgICgrKyspIEVuYWJsZSB0aGUgRE1BTVVYMSBpbnRlcmZhY2UgY2xvY2sgdXNpbmcgQHJlZiBfX0hBTF9SQ0NfRE1BTVVYMV9DTEtfRU5BQkxFKCkuCisgICAgICAgICAgICAgICAoKysrKSBJZiB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGludGVybmFsIGJ1ZmZlcnMgKGNvZWZmaWNpZW50cywgaW5wdXQsCiAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQpIGlzIGRvbmUgdmlhIERNQSwgY29uZmlndXJlIGFuZCBlbmFibGUgb25lIERNQSBjaGFubmVsIGZvcgogICAgICAgICAgICAgICAgICAgICAgbWFuYWdpbmcgZGF0YSB0cmFuc2ZlciBmcm9tIG1lbW9yeSB0byBtZW1vcnkgKHByZWxvYWQgY2hhbm5lbCkuCiAgICAgICAgICAgICAgICAoKysrKSBJZiB0aGUgaW5wdXQgYnVmZmVyIGlzIGFjY2Vzc2VkIHZpYSBETUEsIGNvbmZpZ3VyZSBhbmQgZW5hYmxlIG9uZQpAQCAtMzgsMTYgKzUyLDE2IEBACiAgICAgICAgICAgICAgICAgICAgICBvbmUgRE1BIGNoYW5uZWwgZm9yIG1hbmFnaW5nIGRhdGEgdHJhbnNmZXIgZnJvbSBwZXJpcGhlcmFsIHRvCiAgICAgICAgICAgICAgICAgICAgICBtZW1vcnkgKG91dHB1dCBjaGFubmVsKS4KICAgICAgICAgICAgICAgICgrKyspIEFzc29jaWF0ZSB0aGUgaW5pdGlhbGl6ZWQgRE1BIGhhbmRsZShzKSB0byB0aGUgRk1BQyBETUEgaGFuZGxlKHMpCi0gICAgICAgICAgICAgICAgICAgICB1c2luZyBfX0hBTF9MSU5LRE1BKCkuCisgICAgICAgICAgICAgICAgICAgICB1c2luZyBAcmVmIF9fSEFMX0xJTktETUEoKS4KICAgICAgICAgICAgICAgICgrKyspIENvbmZpZ3VyZSB0aGUgcHJpb3JpdHkgYW5kIGVuYWJsZSB0aGUgTlZJQyBmb3IgdGhlIHRyYW5zZmVyIGNvbXBsZXRlCi0gICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgb24gdGhlIGVuYWJsZWQgRE1BIGNoYW5uZWwocykgdXNpbmcgSEFMX05WSUNfU2V0UHJpb3JpdHkoKQotICAgICAgICAgICAgICAgICAgICAgYW5kIEhBTF9OVklDX0VuYWJsZUlSUSgpLgorICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0IG9uIHRoZSBlbmFibGVkIERNQSBjaGFubmVsKHMpIHVzaW5nIEByZWYgSEFMX05WSUNfU2V0UHJpb3JpdHkoKQorICAgICAgICAgICAgICAgICAgICAgYW5kIEByZWYgSEFMX05WSUNfRW5hYmxlSVJRKCkuCiAKLSAgICAgICgjKSBJbml0aWFsaXplIHRoZSBGTUFDIEhBTCB1c2luZyBIQUxfRk1BQ19Jbml0KCkuIFRoaXMgZnVuY3Rpb24KLSAgICAgICAgICByZXNvcnRzIHRvIEhBTF9GTUFDX01zcEluaXQoKSBmb3IgbG93LWxldmVsIGluaXRpYWxpemF0aW9uLgorICAgICAgKCMpIEluaXRpYWxpemUgdGhlIEZNQUMgSEFMIHVzaW5nIEByZWYgSEFMX0ZNQUNfSW5pdCgpLiBUaGlzIGZ1bmN0aW9uCisgICAgICAgICAgcmVzb3J0cyB0byBAcmVmIEhBTF9GTUFDX01zcEluaXQoKSBmb3IgbG93LWxldmVsIGluaXRpYWxpemF0aW9uLgogCi0gICAgICAoIykgQ29uZmlndXJlIHRoZSBGTUFDIHByb2Nlc3NpbmcgKGZpbHRlcikgdXNpbmcgSEFMX0ZNQUNfRmlsdGVyQ29uZmlnKCkKLSAgICAgICAgICBvciBIQUxfRk1BQ19GaWx0ZXJDb25maWdfRE1BKCkuCisgICAgICAoIykgQ29uZmlndXJlIHRoZSBGTUFDIHByb2Nlc3NpbmcgKGZpbHRlcikgdXNpbmcgQHJlZiBIQUxfRk1BQ19GaWx0ZXJDb25maWcoKQorICAgICAgICAgIG9yIEByZWYgSEFMX0ZNQUNfRmlsdGVyQ29uZmlnX0RNQSgpLgogICAgICAgICAgIFRoaXMgZnVuY3Rpb246CiAgICAgICAgICAgKCsrKSBEZWZpbmVzIHRoZSBtZW1vcnkgYXJlYSB3aXRoaW4gdGhlIEZNQUMgaW50ZXJuYWwgbWVtb3J5CiAgICAgICAgICAgICAgICAoaW5wdXQsIGNvZWZmaWNpZW50cywgb3V0cHV0KSBhbmQgdGhlIGFzc29jaWF0ZWQgdGhyZXNob2xkIChpbnB1dCwgb3V0cHV0KS4KQEAgLTYwLDYxICs3NCw2MSBAQAogICAgICAgICAgICgrKykgRW5hYmxlIHRoZSBlcnJvciBpbnRlcnJ1cHRpb25zIGluIHRoZSBpbnB1dCBhY2Nlc3MgYW5kL29yIHRoZSBvdXRwdXQKICAgICAgICAgICAgICAgIGFjY2VzcyBpcyBkb25lIHRocm91Z2ggSVQvRE1BLiBJZiBhbiBlcnJvciBvY2N1cnMsIHRoZSBpbnRlcnJ1cHRpb24KICAgICAgICAgICAgICAgIHdpbGwgYmUgdHJpZ2dlcmVkIGluIGxvb3AuIEluIG9yZGVyIHRvIHJlY292ZXIsIHRoZSB1c2VyIHdpbGwgaGF2ZQotICAgICAgICAgICAgICAgdG8gcmVzZXQgdGhlIElQIHdpdGggdGhlIHNlcXVlbmNlIEhBTF9GTUFDX0RlSW5pdCAvIEhBTF9GTUFDX0luaXQuCi0gICAgICAgICAgICAgICBPcHRpb25hbGx5LCBoZSBjYW4gYWxzbyBkaXNhYmxlIHRoZSBpbnRlcnJ1cHQgdXNpbmcgX19IQUxfRk1BQ19ESVNBQkxFX0lUOworICAgICAgICAgICAgICAgdG8gcmVzZXQgdGhlIElQIHdpdGggdGhlIHNlcXVlbmNlIEByZWYgSEFMX0ZNQUNfRGVJbml0IC8gQHJlZiBIQUxfRk1BQ19Jbml0LgorICAgICAgICAgICAgICAgT3B0aW9uYWxseSwgaGUgY2FuIGFsc28gZGlzYWJsZSB0aGUgaW50ZXJydXB0IHVzaW5nIEByZWYgX19IQUxfRk1BQ19ESVNBQkxFX0lUOwogICAgICAgICAgICAgICAgdGhlIGVycm9yIHN0YXR1cyB3aWxsIGJlIGtlcHQsIGJ1dCBubyBtb3JlIGludGVycnVwdCB3aWxsIGJlIHRyaWdnZXJlZC4KICAgICAgICAgICAoKyspIFdyaXRlIHRoZSBwcm92aWRlZCBjb2VmZmljaWVudHMgaW50byB0aGUgaW50ZXJuYWwgbWVtb3J5IHVzaW5nIHBvbGxpbmcKLSAgICAgICAgICAgICAgIG1vZGUgKEhBTF9GTUFDX0ZpbHRlckNvbmZpZygpKSBvciBETUEgKEhBTF9GTUFDX0ZpbHRlckNvbmZpZ19ETUEoKSkuCi0gICAgICAgICAgICAgICBJbiB0aGUgRE1BIGNhc2UsIEhBTF9GTUFDX0ZpbHRlckNvbmZpZ0NhbGxiYWNrKCkgaXMgY2FsbGVkIHdoZW4KKyAgICAgICAgICAgICAgIG1vZGUgKCBAcmVmIEhBTF9GTUFDX0ZpbHRlckNvbmZpZygpICkgb3IgRE1BICggQHJlZiBIQUxfRk1BQ19GaWx0ZXJDb25maWdfRE1BKCkgKS4KKyAgICAgICAgICAgICAgIEluIHRoZSBETUEgY2FzZSwgQHJlZiBIQUxfRk1BQ19GaWx0ZXJDb25maWdDYWxsYmFjaygpIGlzIGNhbGxlZCB3aGVuCiAgICAgICAgICAgICAgICB0aGUgaGFuZGxpbmcgaXMgb3Zlci4KIAogICAgICAgICgjKSBPcHRpb25hbGx5LCB0aGUgdXNlciBjYW4gZW5hYmxlIHRoZSBlcnJvciBpbnRlcnJ1cHRpb24gcmVsYXRlZCB0bwotICAgICAgICAgICBzYXR1cmF0aW9uIGJ5IGNhbGxpbmcgX19IQUxfRk1BQ19FTkFCTEVfSVQuIFRoaXMgaGVscHMgaW4gZGVidWdnaW5nIHRoZQorICAgICAgICAgICBzYXR1cmF0aW9uIGJ5IGNhbGxpbmcgQHJlZiBfX0hBTF9GTUFDX0VOQUJMRV9JVC4gVGhpcyBoZWxwcyBpbiBkZWJ1Z2dpbmcgdGhlCiAgICAgICAgICAgIGZpbHRlci4gSWYgYSBzYXR1cmF0aW9uIG9jY3VycywgdGhlIGludGVycnVwdGlvbiB3aWxsIGJlIHRyaWdnZXJlZCBpbiBsb29wLgogICAgICAgICAgICBJbiBvcmRlciB0byByZWNvdmVyLCB0aGUgdXNlciB3aWxsIGhhdmUgdG86Ci0gICAgICAgICAgICgrKykgRGlzYWJsZSB0aGUgaW50ZXJydXB0aW9uIGJ5IGNhbGxpbmcgX19IQUxfRk1BQ19ESVNBQkxFX0lUIGlmCi0gICAgICAgICAgICAgICAgaGUgd2lzaGVzIHRvIGNvbnRpbnVlIGFsbCB0aGUgc2FtZS4KLSAgICAgICAgICAgKCsrKSBSZXNldCB0aGUgSVAgd2l0aCB0aGUgc2VxdWVuY2UgSEFMX0ZNQUNfRGVJbml0IC8gSEFMX0ZNQUNfSW5pdC4KKyAgICAgICAgICAgKCsrKSBEaXNhYmxlIHRoZSBpbnRlcnJ1cHRpb24gYnkgY2FsbGluZyBAcmVmIF9fSEFMX0ZNQUNfRElTQUJMRV9JVCBpZgorICAgICAgICAgICAgICAgIHRoZSB1c2VyIHdpc2hlcyB0byBjb250aW51ZSBhbGwgdGhlIHNhbWUuCisgICAgICAgICAgICgrKykgUmVzZXQgdGhlIElQIHdpdGggdGhlIHNlcXVlbmNlIEByZWYgSEFMX0ZNQUNfRGVJbml0IC8gQHJlZiBIQUxfRk1BQ19Jbml0LgogCiAgICAgICAgKCMpIE9wdGlvbmFsbHksIHByZWxvYWQgaW5wdXQgKEZJUiwgSUlSKSBhbmQgb3V0cHV0IChJSVIpIGRhdGEgdXNpbmcKLSAgICAgICAgICAgSEFMX0ZNQUNfRmlsdGVyUHJlbG9hZCgpIG9yIEhBTF9GTUFDX0ZpbHRlclByZWxvYWRfRE1BKCkuCi0gICAgICAgICAgIEluIHRoZSBETUEgY2FzZSwgSEFMX0ZNQUNfRmlsdGVyUHJlbG9hZENhbGxiYWNrKCkgaXMgY2FsbGVkIHdoZW4KKyAgICAgICAgICAgQHJlZiBIQUxfRk1BQ19GaWx0ZXJQcmVsb2FkKCkgb3IgQHJlZiBIQUxfRk1BQ19GaWx0ZXJQcmVsb2FkX0RNQSgpLgorICAgICAgICAgICBJbiB0aGUgRE1BIGNhc2UsIEByZWYgSEFMX0ZNQUNfRmlsdGVyUHJlbG9hZENhbGxiYWNrKCkgaXMgY2FsbGVkIHdoZW4KICAgICAgICAgICAgdGhlIGhhbmRsaW5nIGlzIG92ZXIuCiAgICAgICAgICAgIFRoaXMgc3RlcCBpcyBvcHRpb25hbCBhcyB0aGUgZmlsdGVyIGNhbiBiZSBzdGFydGVkIHdpdGhvdXQgcHJlbG9hZGVkCiAgICAgICAgICAgIGRhdGEuCiAKLSAgICAgICAoIykgU3RhcnQgdGhlIEZNQUMgcHJvY2Vzc2luZyAoZmlsdGVyKSB1c2luZyBIQUxfRk1BQ19GaWx0ZXJTdGFydCgpLgorICAgICAgICgjKSBTdGFydCB0aGUgRk1BQyBwcm9jZXNzaW5nIChmaWx0ZXIpIHVzaW5nIEByZWYgSEFMX0ZNQUNfRmlsdGVyU3RhcnQoKS4KICAgICAgICAgICAgVGhpcyBmdW5jdGlvbiBhbHNvIGNvbmZpZ3VyZXMgdGhlIG91dHB1dCBidWZmZXIgdGhhdCB3aWxsIGJlIGZpbGxlZCBmcm9tCiAgICAgICAgICAgIHRoZSBjaXJjdWxhciBpbnRlcm5hbCBvdXRwdXQgYnVmZmVyLiBUaGUgZnVuY3Rpb24gcmV0dXJucyBpbW1lZGlhdGVseQogICAgICAgICAgICB3aXRob3V0IHVwZGF0aW5nIHRoZSBwcm92aWRlZCBidWZmZXIuIFRoZSBJUCBwcm9jZXNzaW5nIHdpbGwgYmUgYWN0aXZlIHVudGlsCi0gICAgICAgICAgIEhBTF9GTUFDX0ZpbHRlclN0b3AoKSBpcyBjYWxsZWQuCisgICAgICAgICAgIEByZWYgSEFMX0ZNQUNfRmlsdGVyU3RvcCgpIGlzIGNhbGxlZC4KIAotICAgICAgICgjKSBJZiB0aGUgaW5wdXQgaW50ZXJuYWwgYnVmZmVyIGlzIGFjY2Vzc2VkIHZpYSBETUEsIEhBTF9GTUFDX0hhbGZHZXREYXRhQ2FsbGJhY2soKQorICAgICAgICgjKSBJZiB0aGUgaW5wdXQgaW50ZXJuYWwgYnVmZmVyIGlzIGFjY2Vzc2VkIHZpYSBETUEsIEByZWYgSEFMX0ZNQUNfSGFsZkdldERhdGFDYWxsYmFjaygpCiAgICAgICAgICAgIHdpbGwgYmUgY2FsbGVkIHRvIGluZGljYXRlIHRoYXQgaGFsZiBvZiB0aGUgaW5wdXQgYnVmZmVyIGhhcyBiZWVuIGhhbmRsZWQuCiAKLSAgICAgICAoIykgSWYgdGhlIGlucHV0IGludGVybmFsIGJ1ZmZlciBpcyBhY2Nlc3NlZCB2aWEgRE1BIG9yIGludGVycnVwdCwgSEFMX0ZNQUNfR2V0RGF0YUNhbGxiYWNrKCkKKyAgICAgICAoIykgSWYgdGhlIGlucHV0IGludGVybmFsIGJ1ZmZlciBpcyBhY2Nlc3NlZCB2aWEgRE1BIG9yIGludGVycnVwdCwgQHJlZiBIQUxfRk1BQ19HZXREYXRhQ2FsbGJhY2soKQogICAgICAgICAgICB3aWxsIGJlIGNhbGxlZCB0byByZXF1aXJlIG5ldyBpbnB1dCBkYXRhLiBJdCB3aWxsIGJlIHByb3ZpZGVkIHRocm91Z2gKLSAgICAgICAgICAgSEFMX0ZNQUNfQXBwZW5kRmlsdGVyRGF0YSgpIGlmIHRoZSBETUEgaXNuJ3QgaW4gY2lyY3VsYXIgbW9kZS4KKyAgICAgICAgICAgQHJlZiBIQUxfRk1BQ19BcHBlbmRGaWx0ZXJEYXRhKCkgaWYgdGhlIERNQSBpc24ndCBpbiBjaXJjdWxhciBtb2RlLgogCi0gICAgICAgKCMpIElmIHRoZSBvdXRwdXQgaW50ZXJuYWwgYnVmZmVyIGlzIGFjY2Vzc2VkIHZpYSBETUEsIEhBTF9GTUFDX0hhbGZPdXRwdXREYXRhUmVhZHlDYWxsYmFjaygpCisgICAgICAgKCMpIElmIHRoZSBvdXRwdXQgaW50ZXJuYWwgYnVmZmVyIGlzIGFjY2Vzc2VkIHZpYSBETUEsIEByZWYgSEFMX0ZNQUNfSGFsZk91dHB1dERhdGFSZWFkeUNhbGxiYWNrKCkKICAgICAgICAgICAgd2lsbCBiZSBjYWxsZWQgdG8gaW5kaWNhdGUgdGhhdCBoYWxmIG9mIHRoZSBvdXRwdXQgYnVmZmVyIGhhcyBiZWVuIGhhbmRsZWQuCiAKICAgICAgICAoIykgSWYgdGhlIG91dHB1dCBpbnRlcm5hbCBidWZmZXIgaXMgYWNjZXNzZWQgdmlhIERNQSBvciBpbnRlcnJ1cHQsCi0gICAgICAgICAgIEhBTF9GTUFDX091dHB1dERhdGFSZWFkeUNhbGxiYWNrKCkgd2lsbCBiZSBjYWxsZWQgdG8gcmVxdWlyZSBhIG5ldyBvdXRwdXQKLSAgICAgICAgICAgYnVmZmVyLiBJdCB3aWxsIGJlIHByb3ZpZGVkIHRocm91Z2ggSEFMX0ZNQUNfQ29uZmlnRmlsdGVyT3V0cHV0QnVmZmVyKCkKKyAgICAgICAgICAgQHJlZiBIQUxfRk1BQ19PdXRwdXREYXRhUmVhZHlDYWxsYmFjaygpIHdpbGwgYmUgY2FsbGVkIHRvIHJlcXVpcmUgYSBuZXcgb3V0cHV0CisgICAgICAgICAgIGJ1ZmZlci4gSXQgd2lsbCBiZSBwcm92aWRlZCB0aHJvdWdoIEByZWYgSEFMX0ZNQUNfQ29uZmlnRmlsdGVyT3V0cHV0QnVmZmVyKCkKICAgICAgICAgICAgaWYgdGhlIERNQSBpc24ndCBpbiBjaXJjdWxhciBtb2RlLgogCi0gICAgICAgKCMpIEluIGFsbCBtb2RlcyBleGNlcHQgbm9uZSwgcHJvdmlkZSBuZXcgaW5wdXQgZGF0YSB0byBiZSBwcm9jZXNzZWQgdmlhIEhBTF9GTUFDX0FwcGVuZEZpbHRlckRhdGEoKS4KKyAgICAgICAoIykgSW4gYWxsIG1vZGVzIGV4Y2VwdCBub25lLCBwcm92aWRlIG5ldyBpbnB1dCBkYXRhIHRvIGJlIHByb2Nlc3NlZCB2aWEgQHJlZiBIQUxfRk1BQ19BcHBlbmRGaWx0ZXJEYXRhKCkuCiAgICAgICAgICAgIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uY2UgdGhlIHByZXZpb3VzIGlucHV0IGRhdGEgaGFzIGJlZW4gaGFuZGxlZAogICAgICAgICAgICAodGhlIHByZWxvYWRlZCBpbnB1dCBkYXRhIGlzbid0IGNvbmNlcm5lZCkuCiAKICAgICAgICAoIykgSW4gYWxsIG1vZGVzIGV4Y2VwdCBub25lLCBwcm92aWRlIGEgbmV3IG91dHB1dCBidWZmZXIgdG8gYmUgZmlsbGVkIHZpYQotICAgICAgICAgICBIQUxfRk1BQ19Db25maWdGaWx0ZXJPdXRwdXRCdWZmZXIoKS4gVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgb25jZSB0aGUgcHJldmlvdXMKKyAgICAgICAgICAgQHJlZiBIQUxfRk1BQ19Db25maWdGaWx0ZXJPdXRwdXRCdWZmZXIoKS4gVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgb25jZSB0aGUgcHJldmlvdXMKICAgICAgICAgICAgdXNlcidzIG91dHB1dCBidWZmZXIgaGFzIGJlZW4gZmlsbGVkLgogCi0gICAgICAgKCMpIEluIHBvbGxpbmcgbW9kZSwgaGFuZGxlIHRoZSBpbnB1dCBhbmQgb3V0cHV0IGRhdGEgdXNpbmcgSEFMX0ZNQUNfUG9sbEZpbHRlckRhdGEoKS4KKyAgICAgICAoIykgSW4gcG9sbGluZyBtb2RlLCBoYW5kbGUgdGhlIGlucHV0IGFuZCBvdXRwdXQgZGF0YSB1c2luZyBAcmVmIEhBTF9GTUFDX1BvbGxGaWx0ZXJEYXRhKCkuCiAgICAgICAgICAgIFRoaXMgZnVuY3Rpb246Ci0gICAgICAgICAgICgrKykgV3JpdGUgdGhlIHVzZXIncyBpbnB1dCBkYXRhIChwcm92aWRlZCB2aWEgSEFMX0ZNQUNfQXBwZW5kRmlsdGVyRGF0YSgpKQorICAgICAgICAgICAoKyspIFdyaXRlIHRoZSB1c2VyJ3MgaW5wdXQgZGF0YSAocHJvdmlkZWQgdmlhIEByZWYgSEFMX0ZNQUNfQXBwZW5kRmlsdGVyRGF0YSgpKQogICAgICAgICAgICAgICAgIGludG8gdGhlIEZNQUMgaW5wdXQgbWVtb3J5IGFyZWEuCiAgICAgICAgICAgICgrKykgUmVhZCB0aGUgRk1BQyBvdXRwdXQgbWVtb3J5IGFyZWEgYW5kIHdyaXRlIGl0IGludG8gdGhlIHVzZXIncyBvdXRwdXQgYnVmZmVyLgogICAgICAgICAgICBJdCB3aWxsIHJldHVybiBlaXRoZXIgd2hlbjoKQEAgLTEyNCwxMCArMTM4LDEwIEBACiAgICAgICAgICAgIFRoZSB1c2VyIHdpbGwgaGF2ZSB0byB1c2UgdGhlIHVwZGF0ZWQgaW5wdXQgYW5kIG91dHB1dCBzaXplcyB0byBrZWVwIHRyYWNrCiAgICAgICAgICAgIG9mIHRoZW0uCiAKLSAgICAgICAoIykgU3RvcCB0aGUgRk1BQyBwcm9jZXNzaW5nIChmaWx0ZXIpIHVzaW5nIEhBTF9GTUFDX0ZpbHRlclN0b3AoKS4KKyAgICAgICAoIykgU3RvcCB0aGUgRk1BQyBwcm9jZXNzaW5nIChmaWx0ZXIpIHVzaW5nIEByZWYgSEFMX0ZNQUNfRmlsdGVyU3RvcCgpLgogCi0gICAgICAgKCMpIENhbGwgSEFMX0ZNQUNfRGVJbml0KCkgdG8gZGUtaW5pdGlhbGl6ZSB0aGUgRk1BQyBwZXJpcGhlcmFsLiBUaGlzIGZ1bmN0aW9uCi0gICAgICAgICAgIHJlc29ydHMgdG8gSEFMX0ZNQUNfTXNwRGVJbml0KCkgZm9yIGxvdy1sZXZlbCBkZS1pbml0aWFsaXphdGlvbi4KKyAgICAgICAoIykgQ2FsbCBAcmVmIEhBTF9GTUFDX0RlSW5pdCgpIHRvIGRlLWluaXRpYWxpemUgdGhlIEZNQUMgcGVyaXBoZXJhbC4gVGhpcyBmdW5jdGlvbgorICAgICAgICAgICByZXNvcnRzIHRvIEByZWYgSEFMX0ZNQUNfTXNwRGVJbml0KCkgZm9yIGxvdy1sZXZlbCBkZS1pbml0aWFsaXphdGlvbi4KIAogICAjIyMjIyBDYWxsYmFjayByZWdpc3RyYXRpb24gIyMjIyMKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMTcwLDcgKzE4NCw3IEBACiAgICAgWy4uXQogICAgICAgQnkgZGVmYXVsdCwgYWZ0ZXIgdGhlIEByZWYgSEFMX0ZNQUNfSW5pdCgpIGFuZCB3aGVuIHRoZSBzdGF0ZSBpcyBIQUxfRk1BQ19TVEFURV9SRVNFVAogICAgICAgYWxsIGNhbGxiYWNrcyBhcmUgc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIHdlYWsgKHN1cmNoYXJnZWQpIGZ1bmN0aW9uczoKLSAgICAgIGV4YW1wbGVzIEByZWYgSEFMX0ZNQUNfVHhDcGx0Q2FsbGJhY2soKSwgQHJlZiBIQUxfRk1BQ19SeEhhbGZDcGx0Q2FsbGJhY2soKS4KKyAgICAgIGV4YW1wbGVzIEByZWYgR2V0RGF0YUNhbGxiYWNrKCksIEByZWYgT3V0cHV0RGF0YVJlYWR5Q2FsbGJhY2soKS4KICAgICAgIEV4Y2VwdGlvbiBkb25lIGZvciBNc3BJbml0IGFuZCBNc3BEZUluaXQgZnVuY3Rpb25zIHRoYXQgYXJlIHJlc3BlY3RpdmVseQogICAgICAgcmVzZXQgdG8gdGhlIGxlZ2FjeSB3ZWFrIChzdXJjaGFyZ2VkKSBmdW5jdGlvbnMgaW4gdGhlIEByZWYgSEFMX0ZNQUNfSW5pdCgpCiAgICAgICBhbmQgQHJlZiBIQUxfRk1BQ19EZUluaXQoKSBvbmx5IHdoZW4gdGhlc2UgY2FsbGJhY2tzIGFyZSBudWxsIChub3QgcmVnaXN0ZXJlZCBiZWZvcmVoYW5kKS4KQEAgLTE5NCwxOCArMjA4LDYgQEAKIAogICBAZW5kdmVyYmF0aW0KICAgKgotICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgKiBAYXR0ZW50aW9uCi0gICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KLSAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+Ci0gICoKLSAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKLSAgKiB0aGUgIkxpY2Vuc2UiOyBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlCi0gICogTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0OgotICAqICAgICAgICAgICAgICAgICAgICAgICAgb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlCi0gICoKLSAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICovCiAKIC8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0yMTgsMTEgKzIyMCwxMCBAQAogICAqLwogCiAvKiogQGRlZmdyb3VwIEZNQUMgRk1BQwotICAqIEBicmllZiAgICBGTUFDIEhBTCBkcml2ZXIgbW9kdWxlcworICAqIEBicmllZiAgICBGTUFDIEhBTCBkcml2ZXIgbW9kdWxlCiAgICogQHsKICAgKi8KIAotLyogRXh0ZXJuYWwgdmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgdHlwZWRlZiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBQcml2YXRlIGRlZmluZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyoqIEBkZWZncm91cCAgRk1BQ19Qcml2YXRlX0NvbnN0YW50cyAgIEZNQUMgUHJpdmF0ZSBDb25zdGFudHMKQEAgLTIzMCwxMiArMjMxLDI4IEBACiAgICovCiAKICNkZWZpbmUgTUFYX0ZJTFRFUl9EQVRBX1NJWkVfVE9fSEFORExFICgodWludDE2X3QpIDB4RkZVKQorI2RlZmluZSBNQVhfUFJFTE9BRF9JTkRFWCAgICAgIDB4RkZVCiAjZGVmaW5lIFBSRUxPQURfQUNDRVNTX0RNQSAgICAgMHgwMFUKICNkZWZpbmUgUFJFTE9BRF9BQ0NFU1NfUE9MTElORyAweDAxVQogI2RlZmluZSBQT0xMSU5HX0RJU0FCTEVEICAgICAgIDBVCiAjZGVmaW5lIFBPTExJTkdfRU5BQkxFRCAgICAgICAgMVUKICNkZWZpbmUgUE9MTElOR19OT1RfU1RPUFBFRCAgICAwVQogI2RlZmluZSBQT0xMSU5HX1NUT1BQRUQgICAgICAgIDFVCisvKiBGTUFDIHBvbGxpbmctYmFzZWQgY29tbXVuaWNhdGlvbnMgdGltZS1vdXQgdmFsdWUgKi8KKyNkZWZpbmUgSEFMX0ZNQUNfVElNRU9VVF9WQUxVRSAgICAgICAgIDEwMDBVCisvKiBGTUFDIHJlc2V0IHRpbWUtb3V0IHZhbHVlICovCisjZGVmaW5lIEhBTF9GTUFDX1JFU0VUX1RJTUVPVVRfVkFMVUUgICA1MDBVCisvKiBETUEgUmVhZCBSZXF1ZXN0cyBFbmFibGUgKi8KKyNkZWZpbmUgRk1BQ19ETUFfUkVOICAgICAgICAgICAgICAgICAgIEZNQUNfQ1JfRE1BUkVOCisvKiBETUEgV3JpdGUgQ2hhbm5lbCBFbmFibGUgKi8KKyNkZWZpbmUgRk1BQ19ETUFfV0VOICAgICAgICAgICAgICAgICAgIEZNQUNfQ1JfRE1BV0VOCisvKiBGTUFDIEV4ZWN1dGlvbiBFbmFibGUgKi8KKyNkZWZpbmUgRk1BQ19TVEFSVCAgICAgICAgICAgICAgICAgICAgIEZNQUNfUEFSQU1fU1RBUlQKKworLyoqCisgICogQH0KKyAgKi8KKwogCiAvKioKICAgKiBAfQpAQCAtMjk1LDQwICszMTIsMjcgQEAKICAgKCgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+UEFSQU0pICYgKEZNQUNfUEFSQU1fU1RBUlQpKSA+PiAoRk1BQ19QQVJBTV9TVEFSVF9Qb3MpKQogCiAvKioKLSAgKiBAYnJpZWYgIEdldCB0aGUgdGhyZXNob2xkIG1hdGNoaW5nIHRoZSB3YXRlcm1hay4KKyAgKiBAYnJpZWYgIEdldCB0aGUgdGhyZXNob2xkIG1hdGNoaW5nIHRoZSB3YXRlcm1hcmsuCiAgICogQHBhcmFtICBfX1dNX18gV2F0ZXJtYXJrIHZhbHVlLgogICAqIEByZXR2YWwgVEhSRVNIT0xECiAgICovCi0jZGVmaW5lIEZNQUNfR0VUX1RIUkVTSE9MRF9GUk9NX1dNKF9fV01fXykgKChfX1dNX18gPT0gRk1BQ19USFJFU0hPTERfMSk/IDFVOiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX1dNX18gPT0gRk1BQ19USFJFU0hPTERfMik/IDJVOiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX1dNX18gPT0gRk1BQ19USFJFU0hPTERfNCk/IDRVOjhVKQotCi0vKioKLSAgKiBAYnJpZWYgIENoZWNrIHdoZXRoZXIgdGhlIHRocmVzaG9sZCBpcyBhcHBsaWNhYmxlLgotICAqIEBwYXJhbSAgX19TSVpFX18gU2l6ZSBvZiB0aGUgbWF0Y2hpbmcgYnVmZmVyLgotICAqIEBwYXJhbSAgX19XTV9fIFdhdGVybWFyayB2YWx1ZS4KLSAgKiBAcGFyYW0gIF9fQUNDRVNTX18gQWNjZXNzIHRvIHRoZSBidWZmZXIgKHBvbGxpbmcsIGl0LCBkbWEsIG5vbmUpLgotICAqIEByZXR2YWwgVEhSRVNIT0xECi0gICovCi0jZGVmaW5lIElTX0ZNQUNfVEhSRVNIT0xEX0FQUExJQ0FCTEUoX19TSVpFX18sIF9fV01fXywgX19BQ0NFU1NfXykgKCggKF9fU0laRV9fKSA+PSAoKChfX1dNX18pID09IEZNQUNfVEhSRVNIT0xEXzEpPyAxVTogXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19XTV9fKSA9PSBGTUFDX1RIUkVTSE9MRF8yKT8gMlU6IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fV01fXykgPT0gRk1BQ19USFJFU0hPTERfNCk/IDRVOjhVKSkmJiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKChfX0FDQ0VTU19fKSA9PSBGTUFDX0JVRkZFUl9BQ0NFU1NfRE1BKSYmKChfX1dNX18pID09IEZNQUNfVEhSRVNIT0xEXzEpKXx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19BQ0NFU1NfXyApIT0gRk1BQ19CVUZGRVJfQUNDRVNTX0RNQSkpKQorI2RlZmluZSBGTUFDX0dFVF9USFJFU0hPTERfRlJPTV9XTShfX1dNX18pICgoKF9fV01fXykgPT0gRk1BQ19USFJFU0hPTERfMSk/IDFVOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19XTV9fKSA9PSBGTUFDX1RIUkVTSE9MRF8yKT8gMlU6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1dNX18pID09IEZNQUNfVEhSRVNIT0xEXzQpPyA0VTo4VSkKIAogLyoqCiAgICogQH0KICAgKi8KIAogLyogUHJpdmF0ZSB2YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQorLyogR2xvYmFsIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgZnVuY3Rpb24gcHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIHN0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBGTUFDX1Jlc2V0KEZNQUNfSGFuZGxlVHlwZURlZiAqaGZtYWMpOwogc3RhdGljIHZvaWQgRk1BQ19SZXNldERhdGFQb2ludGVycyhGTUFDX0hhbmRsZVR5cGVEZWYgKmhmbWFjKTsKIHN0YXRpYyB2b2lkIEZNQUNfUmVzZXRPdXRwdXRTdGF0ZUFuZERhdGFQb2ludGVycyhGTUFDX0hhbmRsZVR5cGVEZWYgKmhmbWFjKTsKIHN0YXRpYyB2b2lkIEZNQUNfUmVzZXRJbnB1dFN0YXRlQW5kRGF0YVBvaW50ZXJzKEZNQUNfSGFuZGxlVHlwZURlZiAqaGZtYWMpOwotc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIEZNQUNfRmlsdGVyQ29uZmlnKEZNQUNfSGFuZGxlVHlwZURlZiAqaGZtYWMsIEZNQUNfRmlsdGVyQ29uZmlnVHlwZURlZiAqc0NvbmZpZywKK3N0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBGTUFDX0ZpbHRlckNvbmZpZyhGTUFDX0hhbmRsZVR5cGVEZWYgKmhmbWFjLCBGTUFDX0ZpbHRlckNvbmZpZ1R5cGVEZWYgKnBDb25maWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBQcmVsb2FkQWNjZXNzKTsKIHN0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBGTUFDX0ZpbHRlclByZWxvYWQoRk1BQ19IYW5kbGVUeXBlRGVmICpoZm1hYywgaW50MTZfdCAqcElucHV0LCB1aW50OF90IElucHV0U2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MTZfdCAqcE91dHB1dCwgdWludDhfdCBPdXRwdXRTaXplLCB1aW50OF90IFByZWxvYWRBY2Nlc3MpOwpAQCAtMzQ4LDcgKzM1Miw3IEBACiBzdGF0aWMgdm9pZCBGTUFDX0RNQUZpbHRlclByZWxvYWQoRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpOwogc3RhdGljIHZvaWQgRk1BQ19ETUFFcnJvcihETUFfSGFuZGxlVHlwZURlZiAqaGRtYSk7CiAKLS8qIFByaXZhdGUgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBGdW5jdGlvbnMgRGVmaW5pdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKiogQGRlZmdyb3VwIEZNQUNfRXhwb3J0ZWRfRnVuY3Rpb25zIEZNQUMgRXhwb3J0ZWQgRnVuY3Rpb25zCiAgICogQHsKQEAgLTM2Niw2ICszNzAsOCBAQAogICAgICAgKCspIERlSW5pdGlhbGl6ZSB0aGUgRk1BQyBwZXJpcGhlcmFsCiAgICAgICAoKykgSW5pdGlhbGl6ZSB0aGUgRk1BQyBNU1AgKE1DVSBTcGVjaWZpYyBQYWNrYWdlKQogICAgICAgKCspIERlLUluaXRpYWxpemUgdGhlIEZNQUMgTVNQCisgICAgICAoKykgUmVnaXN0ZXIgYSBVc2VyIEZNQUMgQ2FsbGJhY2sKKyAgICAgICgrKSBVbnJlZ2lzdGVyIGEgRk1BQyBDYWxsQmFjawogCiAgICAgWy4uXQogCkBAIC0zNzYsMTAgKzM4MiwxMiBAQAogLyoqCiAgICogQGJyaWVmICBJbml0aWFsaXplIHRoZSBGTUFDIHBlcmlwaGVyYWwgYW5kIHRoZSBhc3NvY2lhdGVkIGhhbmRsZS4KICAgKiBAcGFyYW0gIGhmbWFjIHBvaW50ZXIgdG8gYSBGTUFDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlLgotICAqIEByZXR2YWwgSEFMIHN0YXR1cworICAqIEByZXR2YWwgSEFMX1N0YXR1c1R5cGVEZWYgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNQUNfSW5pdChGTUFDX0hhbmRsZVR5cGVEZWYgKmhmbWFjKQogeworICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXM7CisKICAgLyogQ2hlY2sgdGhlIEZNQUMgaGFuZGxlIGFsbG9jYXRpb24gKi8KICAgaWYgKGhmbWFjID09IE5VTEwpCiAgIHsKQEAgLTM5MSw3ICszOTksNyBAQAogCiAgIGlmIChoZm1hYy0+U3RhdGUgPT0gSEFMX0ZNQUNfU1RBVEVfUkVTRVQpCiAgIHsKLSAgICAvKiBBbGxvY2F0ZSBsb2NrIHJlc291cmNlIGFuZCBpbml0aWFsaXplIGl0ICovCisgICAgLyogSW5pdGlhbGl6ZSBsb2NrIHJlc291cmNlICovCiAgICAgaGZtYWMtPkxvY2sgPSBIQUxfVU5MT0NLRUQ7CiAKICNpZiAoVVNFX0hBTF9GTUFDX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQpAQCAtNDE4LDM2ICs0MjYsMzYgQEAKICAgfQogCiAgIC8qIFJlc2V0IHBJbnB1dCBhbmQgcE91dHB1dCAqLwotICBoZm1hYy0+RmlsdGVyUGFyYW0gPSAwVUw7CisgIGhmbWFjLT5GaWx0ZXJQYXJhbSA9IDBVOwogICBGTUFDX1Jlc2V0RGF0YVBvaW50ZXJzKGhmbWFjKTsKIAogICAvKiBSZXNldCBGTUFDIHVuaXQgKGludGVybmFsIHBvaW50ZXJzKSAqLwogICBpZiAoRk1BQ19SZXNldChoZm1hYykgPT0gSEFMX1RJTUVPVVQpCiAgIHsKICAgICAvKiBVcGRhdGUgRk1BQyBlcnJvciBjb2RlIGFuZCBGTUFDIHBlcmlwaGVyYWwgc3RhdGUgKi8KLSAgICBoZm1hYy0+RXJyb3JDb2RlID0gSEFMX0ZNQUNfRVJST1JfUkVTRVQ7CisgICAgaGZtYWMtPkVycm9yQ29kZSB8PSBIQUxfRk1BQ19FUlJPUl9SRVNFVDsKICAgICBoZm1hYy0+U3RhdGUgPSBIQUxfRk1BQ19TVEFURV9USU1FT1VUOwogCi0gICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLwotICAgIF9fSEFMX1VOTE9DSyhoZm1hYyk7CisgICAgc3RhdHVzID0gSEFMX1RJTUVPVVQ7CisgIH0KKyAgZWxzZQorICB7CisgICAgLyogVXBkYXRlIEZNQUMgZXJyb3IgY29kZSBhbmQgRk1BQyBwZXJpcGhlcmFsIHN0YXRlICovCisgICAgaGZtYWMtPkVycm9yQ29kZSA9IEhBTF9GTUFDX0VSUk9SX05PTkU7CisgICAgaGZtYWMtPlN0YXRlID0gSEFMX0ZNQUNfU1RBVEVfUkVBRFk7CiAKLSAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgICAgc3RhdHVzID0gSEFMX09LOwogICB9CiAKLSAgLyogVXBkYXRlIEZNQUMgZXJyb3IgY29kZSBhbmQgRk1BQyBwZXJpcGhlcmFsIHN0YXRlICovCi0gIGhmbWFjLT5FcnJvckNvZGUgPSBIQUxfRk1BQ19FUlJPUl9OT05FOwotICBoZm1hYy0+U3RhdGUgPSBIQUxfRk1BQ19TVEFURV9SRUFEWTsKLQotICAvKiBQcm9jZXNzIFVubG9ja2VkICovCiAgIF9fSEFMX1VOTE9DSyhoZm1hYyk7CiAKLSAgcmV0dXJuIEhBTF9PSzsKKyAgcmV0dXJuIHN0YXR1czsKIH0KIAogLyoqCiAgICogQGJyaWVmICBEZS1pbml0aWFsaXplIHRoZSBGTUFDIHBlcmlwaGVyYWwuCiAgICogQHBhcmFtICBoZm1hYyBwb2ludGVyIHRvIGEgRk1BQyBzdHJ1Y3R1cmUuCi0gICogQHJldHZhbCBIQUwgc3RhdHVzCisgICogQHJldHZhbCBIQUxfU3RhdHVzVHlwZURlZiBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfRk1BQ19EZUluaXQoRk1BQ19IYW5kbGVUeXBlRGVmICpoZm1hYykKIHsKQEAgLTQ2Nyw3ICs0NzUsNyBAQAogICBoZm1hYy0+RXJyb3JDb2RlID0gSEFMX0ZNQUNfRVJST1JfTk9ORTsKIAogICAvKiBSZXNldCBwSW5wdXQgYW5kIHBPdXRwdXQgKi8KLSAgaGZtYWMtPkZpbHRlclBhcmFtID0gMFVMOworICBoZm1hYy0+RmlsdGVyUGFyYW0gPSAwVTsKICAgRk1BQ19SZXNldERhdGFQb2ludGVycyhoZm1hYyk7CiAKICNpZiAoVVNFX0hBTF9GTUFDX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQpAQCAtNDg1LDEwICs0OTMsOSBAQAogICAvKiBDaGFuZ2UgRk1BQyBwZXJpcGhlcmFsIHN0YXRlICovCiAgIGhmbWFjLT5TdGF0ZSA9IEhBTF9GTUFDX1NUQVRFX1JFU0VUOwogCi0gIC8qIFJlbGVhc2UgTG9jayAqLworICAvKiBBbHdheXMgcmVsZWFzZSBMb2NrIGluIGNhc2Ugb2YgZGUtaW5pdGlhbGl6YXRpb24gKi8KICAgX19IQUxfVU5MT0NLKGhmbWFjKTsKIAotICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBIQUxfT0s7CiB9CiAKQEAgLTUyNCw4ICs1MzEsOCBAQAogCiAjaWYgKFVTRV9IQUxfRk1BQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKIC8qKgotICAqIEBicmllZiAgUmVnaXN0ZXIgYSBVc2VyIEZNQUMgQ2FsbGJhY2sKLSAgKiAgICAgICAgIHRvIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgd2VhayBwcmVkZWZpbmVkIGNhbGxiYWNrLgorICAqIEBicmllZiAgUmVnaXN0ZXIgYSBVc2VyIEZNQUMgQ2FsbGJhY2suCisgICogQG5vdGUgICBUaGUgVXNlciBGTUFDIENhbGxiYWNrIGlzIHRvIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgd2VhayBwcmVkZWZpbmVkIGNhbGxiYWNrLgogICAqIEBwYXJhbSAgaGZtYWMgcG9pbnRlciB0byBhIEZNQUNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwogICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIEZNQUMgbW9kdWxlLgogICAqIEBwYXJhbSAgQ2FsbGJhY2tJRCBJRCBvZiB0aGUgY2FsbGJhY2sgdG8gYmUgcmVnaXN0ZXJlZC4KQEAgLTU0MCwxMyArNTQ3LDE5IEBACiAgICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfRk1BQ19NU1BJTklUX0NCX0lEIEZNQUMgTXNwSW5pdCBJRAogICAqICAgICAgICAgICBAYXJnIEByZWYgSEFMX0ZNQUNfTVNQREVJTklUX0NCX0lEIEZNQUMgTXNwRGVJbml0IElECiAgICogQHBhcmFtICBwQ2FsbGJhY2sgcG9pbnRlciB0byB0aGUgQ2FsbGJhY2sgZnVuY3Rpb24uCi0gICogQHJldHZhbCBIQUwgc3RhdHVzCisgICogQHJldHZhbCBIQUxfU3RhdHVzVHlwZURlZiBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfRk1BQ19SZWdpc3RlckNhbGxiYWNrKEZNQUNfSGFuZGxlVHlwZURlZiAqaGZtYWMsIEhBTF9GTUFDX0NhbGxiYWNrSURUeXBlRGVmIENhbGxiYWNrSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBGTUFDX0NhbGxiYWNrVHlwZURlZiBwQ2FsbGJhY2spCiB7CiAgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKIAorICAvKiBDaGVjayB0aGUgRk1BQyBoYW5kbGUgYWxsb2NhdGlvbiAqLworICBpZiAoaGZtYWMgPT0gTlVMTCkKKyAgeworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKwogICBpZiAocENhbGxiYWNrID09IE5VTEwpCiAgIHsKICAgICAvKiBVcGRhdGUgdGhlIGVycm9yIGNvZGUgKi8KQEAgLTU1NCwxMCArNTY3LDkgQEAKIAogICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KLSAgLyogUHJvY2VzcyBsb2NrZWQgKi8KICAgX19IQUxfTE9DSyhoZm1hYyk7CiAKLSAgaWYgKEhBTF9GTUFDX1NUQVRFX1JFQURZID09IGhmbWFjLT5TdGF0ZSkKKyAgaWYgKGhmbWFjLT5TdGF0ZSA9PSBIQUxfRk1BQ19TVEFURV9SRUFEWSkKICAgewogICAgIHN3aXRjaCAoQ2FsbGJhY2tJRCkKICAgICB7CkBAIC02MDYsNyArNjE4LDcgQEAKICAgICAgICAgYnJlYWs7CiAgICAgfQogICB9Ci0gIGVsc2UgaWYgKEhBTF9GTUFDX1NUQVRFX1JFU0VUID09IGhmbWFjLT5TdGF0ZSkKKyAgZWxzZSBpZiAoaGZtYWMtPlN0YXRlID09IEhBTF9GTUFDX1NUQVRFX1JFU0VUKQogICB7CiAgICAgc3dpdGNoIChDYWxsYmFja0lEKQogICAgIHsKQEAgLTYzNiw3ICs2NDgsNiBAQAogICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7CiAgIH0KIAotICAvKiBSZWxlYXNlIExvY2sgKi8KICAgX19IQUxfVU5MT0NLKGhmbWFjKTsKIAogICByZXR1cm4gc3RhdHVzOwpAQCAtNjQ0LDcgKzY1NSw3IEBACiAKIC8qKgogICAqIEBicmllZiAgVW5yZWdpc3RlciBhIEZNQUMgQ2FsbEJhY2suCi0gICogICAgICAgICBGTUFDIGNhbGxiYWNrIGlzIHJlZGlyZWN0ZWQgdG8gdGhlIHdlYWsgcHJlZGVmaW5lZCBjYWxsYmFjay4KKyAgKiBAbm90ZSAgIFRoZSBGTUFDIGNhbGxiYWNrIGlzIHJlZGlyZWN0ZWQgdG8gdGhlIHdlYWsgcHJlZGVmaW5lZCBjYWxsYmFjay4KICAgKiBAcGFyYW0gIGhmbWFjIHBvaW50ZXIgdG8gYSBGTUFDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKICAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBGTUFDIG1vZHVsZQogICAqIEBwYXJhbSAgQ2FsbGJhY2tJRCBJRCBvZiB0aGUgY2FsbGJhY2sgdG8gYmUgdW5yZWdpc3RlcmVkLgpAQCAtNjU4LDE2ICs2NjksMjEgQEAKICAgKiAgICAgICAgICAgQGFyZyBAcmVmIEhBTF9GTUFDX0ZJTFRFUl9QUkVMT0FEX0NCX0lEIEZpbHRlciBQcmVsb2FkIENhbGxiYWNrIElECiAgICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfRk1BQ19NU1BJTklUX0NCX0lEIEZNQUMgTXNwSW5pdCBJRAogICAqICAgICAgICAgICBAYXJnIEByZWYgSEFMX0ZNQUNfTVNQREVJTklUX0NCX0lEIEZNQUMgTXNwRGVJbml0IElECi0gICogQHJldHZhbCBIQUwgc3RhdHVzCisgICogQHJldHZhbCBIQUxfU3RhdHVzVHlwZURlZiBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfRk1BQ19VblJlZ2lzdGVyQ2FsbGJhY2soRk1BQ19IYW5kbGVUeXBlRGVmICpoZm1hYywgSEFMX0ZNQUNfQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJRCkKIHsKICAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwogCi0gIC8qIFByb2Nlc3MgbG9ja2VkICovCisgIC8qIENoZWNrIHRoZSBGTUFDIGhhbmRsZSBhbGxvY2F0aW9uICovCisgIGlmIChoZm1hYyA9PSBOVUxMKQorICB7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCiAgIF9fSEFMX0xPQ0soaGZtYWMpOwogCi0gIGlmIChIQUxfRk1BQ19TVEFURV9SRUFEWSA9PSBoZm1hYy0+U3RhdGUpCisgIGlmIChoZm1hYy0+U3RhdGUgPT0gSEFMX0ZNQUNfU1RBVEVfUkVBRFkpCiAgIHsKICAgICBzd2l0Y2ggKENhbGxiYWNrSUQpCiAgICAgewpAQCAtNzE2LDcgKzczMiw3IEBACiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgfQotICBlbHNlIGlmIChIQUxfRk1BQ19TVEFURV9SRVNFVCA9PSBoZm1hYy0+U3RhdGUpCisgIGVsc2UgaWYgKGhmbWFjLT5TdGF0ZSA9PSBIQUxfRk1BQ19TVEFURV9SRVNFVCkKICAgewogICAgIHN3aXRjaCAoQ2FsbGJhY2tJRCkKICAgICB7CkBAIC03NDYsNyArNzYyLDYgQEAKICAgICBzdGF0dXMgPSBIQUxfRVJST1I7CiAgIH0KIAotICAvKiBSZWxlYXNlIExvY2sgKi8KICAgX19IQUxfVU5MT0NLKGhmbWFjKTsKIAogICByZXR1cm4gc3RhdHVzOwpAQCAtNzc3LDM4ICs3OTIsNDAgQEAKICAgKi8KIAogLyoqCi0gICogQGJyaWVmICBDb25maWd1cmUgdGhlIEZNQUMgZmlsdGVyIGFjY29yZGluZyB0byB0aGUgcGFyYW1ldGVycworICAqIEBicmllZiAgQ29uZmlndXJlIHRoZSBGTUFDIGZpbHRlci4KKyAgKiBAbm90ZSAgIFRoZSBjb25maWd1cmF0aW9uIGlzIGRvbmUgYWNjb3JkaW5nIHRvIHRoZSBwYXJhbWV0ZXJzCiAgICogICAgICAgICBzcGVjaWZpZWQgaW4gdGhlIEZNQUNfRmlsdGVyQ29uZmlnVHlwZURlZiBzdHJ1Y3R1cmUuCiAgICogICAgICAgICBUaGUgcHJvdmlkZWQgZGF0YSB3aWxsIGJlIGxvYWRlZCB1c2luZyBwb2xsaW5nIG1vZGUuCiAgICogQHBhcmFtICBoZm1hYyBwb2ludGVyIHRvIGEgRk1BQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgRk1BQyBtb2R1bGUuCi0gICogQHBhcmFtICBzQ29uZmlnIHBvaW50ZXIgdG8gYSBGTUFDX0ZpbHRlckNvbmZpZ1R5cGVEZWYgc3RydWN0dXJlIHRoYXQKKyAgKiBAcGFyYW0gIHBDb25maWcgcG9pbnRlciB0byBhIEZNQUNfRmlsdGVyQ29uZmlnVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdAogICAqICAgICAgICAgY29udGFpbnMgdGhlIEZNQUMgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4KLSAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKKyAgKiBAcmV0dmFsIEhBTF9TdGF0dXNUeXBlRGVmIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTUFDX0ZpbHRlckNvbmZpZyhGTUFDX0hhbmRsZVR5cGVEZWYgKmhmbWFjLCBGTUFDX0ZpbHRlckNvbmZpZ1R5cGVEZWYgKnNDb25maWcpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfRk1BQ19GaWx0ZXJDb25maWcoRk1BQ19IYW5kbGVUeXBlRGVmICpoZm1hYywgRk1BQ19GaWx0ZXJDb25maWdUeXBlRGVmICpwQ29uZmlnKQogewotICByZXR1cm4gKEZNQUNfRmlsdGVyQ29uZmlnKGhmbWFjLCBzQ29uZmlnLCBQUkVMT0FEX0FDQ0VTU19QT0xMSU5HKSk7CisgIHJldHVybiAoRk1BQ19GaWx0ZXJDb25maWcoaGZtYWMsIHBDb25maWcsIFBSRUxPQURfQUNDRVNTX1BPTExJTkcpKTsKIH0KIAogLyoqCi0gICogQGJyaWVmICBDb25maWd1cmUgdGhlIEZNQUMgZmlsdGVyIGFjY29yZGluZyB0byB0aGUgcGFyYW1ldGVycworICAqIEBicmllZiAgQ29uZmlndXJlIHRoZSBGTUFDIGZpbHRlci4KKyAgKiBAbm90ZSAgIFRoZSBjb25maWd1cmF0aW9uIGlzIGRvbmUgYWNjb3JkaW5nIHRvIHRoZSBwYXJhbWV0ZXJzCiAgICogICAgICAgICBzcGVjaWZpZWQgaW4gdGhlIEZNQUNfRmlsdGVyQ29uZmlnVHlwZURlZiBzdHJ1Y3R1cmUuCiAgICogICAgICAgICBUaGUgcHJvdmlkZWQgZGF0YSB3aWxsIGJlIGxvYWRlZCB1c2luZyBETUEuCiAgICogQHBhcmFtICBoZm1hYyBwb2ludGVyIHRvIGEgRk1BQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgRk1BQyBtb2R1bGUuCi0gICogQHBhcmFtICBzQ29uZmlnIHBvaW50ZXIgdG8gYSBGTUFDX0ZpbHRlckNvbmZpZ1R5cGVEZWYgc3RydWN0dXJlIHRoYXQKKyAgKiBAcGFyYW0gIHBDb25maWcgcG9pbnRlciB0byBhIEZNQUNfRmlsdGVyQ29uZmlnVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdAogICAqICAgICAgICAgY29udGFpbnMgdGhlIEZNQUMgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4KLSAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKKyAgKiBAcmV0dmFsIEhBTF9TdGF0dXNUeXBlRGVmIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTUFDX0ZpbHRlckNvbmZpZ19ETUEoRk1BQ19IYW5kbGVUeXBlRGVmICpoZm1hYywgRk1BQ19GaWx0ZXJDb25maWdUeXBlRGVmICpzQ29uZmlnKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNQUNfRmlsdGVyQ29uZmlnX0RNQShGTUFDX0hhbmRsZVR5cGVEZWYgKmhmbWFjLCBGTUFDX0ZpbHRlckNvbmZpZ1R5cGVEZWYgKnBDb25maWcpCiB7Ci0gIHJldHVybiAoRk1BQ19GaWx0ZXJDb25maWcoaGZtYWMsIHNDb25maWcsIFBSRUxPQURfQUNDRVNTX0RNQSkpOworICByZXR1cm4gKEZNQUNfRmlsdGVyQ29uZmlnKGhmbWFjLCBwQ29uZmlnLCBQUkVMT0FEX0FDQ0VTU19ETUEpKTsKIH0KIAogLyoqCiAgICogQGJyaWVmICBQcmVsb2FkIHRoZSBpbnB1dCAoRklSLCBJSVIpIGFuZCBvdXRwdXQgZGF0YSAoSUlSKSBvZiB0aGUgRk1BQyBmaWx0ZXIuCi0gICogICAgICAgICBUaGV5IHdpbGwgYmUgdXNlZCBieSBGTUFDIGFzIHNvb24gYXMgSEFMX0ZNQUNfRmlsdGVyU3RhcnQgaXMgY2FsbGVkLgorICAqIEBub3RlICAgVGhlIHNldChzKSBvZiBkYXRhIHdpbGwgYmUgdXNlZCBieSBGTUFDIGFzIHNvb24gYXMgQHJlZiBIQUxfRk1BQ19GaWx0ZXJTdGFydCBpcyBjYWxsZWQuCiAgICogICAgICAgICBUaGUgcHJvdmlkZWQgZGF0YSB3aWxsIGJlIGxvYWRlZCB1c2luZyBwb2xsaW5nIG1vZGUuCiAgICogQHBhcmFtICBoZm1hYyBwb2ludGVyIHRvIGEgRk1BQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgRk1BQyBtb2R1bGUuCkBAIC04MjAsMTAgKzgzNywxMCBAQAogICAqICAgICAgICAgSWYgbm90IG5lZWRlZCwgaXQgc2hvdWxkIGJlIHNldCB0byBOVUxMLgogICAqIEBwYXJhbSAgT3V0cHV0U2l6ZSBTaXplIG9mIHRoZSBvdXRwdXQgdmVjdG9yLgogICAqICAgICAgICAgQXMgcE91dHB1dCBpcyB1c2VkIGZvciBwcmVsb2FkaW5nIGRhdGEsIGl0IGNhbm5vdCBiZSBiaWdnZXIgdGhhbiB0aGUgb3V0cHV0IG1lbW9yeSBhcmVhLgotICAqIEBub3RlICAgVGhlIGlucHV0IGFuZCB0aGUgb3V0cHV0IGJ1ZmZlcnMgY2FuIGJlIGZpbGxlZCBieSBjYWxsaW5nIHNldmVyYWwgdGltZXMgSEFMX0ZNQUNfRmlsdGVyUHJlbG9hZAorICAqIEBub3RlICAgVGhlIGlucHV0IGFuZCB0aGUgb3V0cHV0IGJ1ZmZlcnMgY2FuIGJlIGZpbGxlZCBieSBjYWxsaW5nIHNldmVyYWwgdGltZXMgQHJlZiBIQUxfRk1BQ19GaWx0ZXJQcmVsb2FkCiAgICogICAgICAgICAoZWFjaCBjYWxsIGZpbGxpbmcgcGFydGx5IHRoZSBidWZmZXJzKS4gSW4gY2FzZSBvZiBvdmVyZmxvdyAodG9vIG11Y2ggZGF0YSBwcm92aWRlZCB0aHJvdWdoCiAgICogICAgICAgICBhbGwgdGhlc2UgY2FsbHMpLCBhbiBlcnJvciB3aWxsIGJlIHJldHVybmVkLgotICAqIEByZXR2YWwgSEFMIHN0YXR1cworICAqIEByZXR2YWwgSEFMX1N0YXR1c1R5cGVEZWYgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNQUNfRmlsdGVyUHJlbG9hZChGTUFDX0hhbmRsZVR5cGVEZWYgKmhmbWFjLCBpbnQxNl90ICpwSW5wdXQsIHVpbnQ4X3QgSW5wdXRTaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQxNl90ICpwT3V0cHV0LCB1aW50OF90IE91dHB1dFNpemUpCkBAIC04MzMsNyArODUwLDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBQcmVsb2FkIHRoZSBpbnB1dCAoRklSLCBJSVIpIGFuZCBvdXRwdXQgZGF0YSAoSUlSKSBvZiB0aGUgRk1BQyBmaWx0ZXIuCi0gICogICAgICAgICBUaGV5IHdpbGwgYmUgdXNlZCBieSBGTUFDIGFzIHNvb24gYXMgSEFMX0ZNQUNfRmlsdGVyU3RhcnQgaXMgY2FsbGVkLgorICAqIEBub3RlICAgVGhlIHNldChzKSBvZiBkYXRhIHdpbGwgYmUgdXNlZCBieSBGTUFDIGFzIHNvb24gYXMgQHJlZiBIQUxfRk1BQ19GaWx0ZXJTdGFydCBpcyBjYWxsZWQuCiAgICogICAgICAgICBUaGUgcHJvdmlkZWQgZGF0YSB3aWxsIGJlIGxvYWRlZCB1c2luZyBETUEuCiAgICogQHBhcmFtICBoZm1hYyBwb2ludGVyIHRvIGEgRk1BQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgRk1BQyBtb2R1bGUuCkBAIC04NDUsMTAgKzg2MiwxMCBAQAogICAqICAgICAgICAgSWYgbm90IG5lZWRlZCwgaXQgc2hvdWxkIGJlIHNldCB0byBOVUxMLgogICAqIEBwYXJhbSAgT3V0cHV0U2l6ZSBTaXplIG9mIHRoZSBvdXRwdXQgdmVjdG9yLgogICAqICAgICAgICAgQXMgcE91dHB1dCBpcyB1c2VkIGZvciBwcmVsb2FkaW5nIGRhdGEsIGl0IGNhbm5vdCBiZSBiaWdnZXIgdGhhbiB0aGUgb3V0cHV0IG1lbW9yeSBhcmVhLgotICAqIEBub3RlICAgVGhlIGlucHV0IGFuZCB0aGUgb3V0cHV0IGJ1ZmZlcnMgY2FuIGJlIGZpbGxlZCBieSBjYWxsaW5nIHNldmVyYWwgdGltZXMgSEFMX0ZNQUNfRmlsdGVyUHJlbG9hZAorICAqIEBub3RlICAgVGhlIGlucHV0IGFuZCB0aGUgb3V0cHV0IGJ1ZmZlcnMgY2FuIGJlIGZpbGxlZCBieSBjYWxsaW5nIHNldmVyYWwgdGltZXMgQHJlZiBIQUxfRk1BQ19GaWx0ZXJQcmVsb2FkCiAgICogICAgICAgICAoZWFjaCBjYWxsIGZpbGxpbmcgcGFydGx5IHRoZSBidWZmZXJzKS4gSW4gY2FzZSBvZiBvdmVyZmxvdyAodG9vIG11Y2ggZGF0YSBwcm92aWRlZCB0aHJvdWdoCiAgICogICAgICAgICBhbGwgdGhlc2UgY2FsbHMpLCBhbiBlcnJvciB3aWxsIGJlIHJldHVybmVkLgotICAqIEByZXR2YWwgSEFMIHN0YXR1cworICAqIEByZXR2YWwgSEFMX1N0YXR1c1R5cGVEZWYgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNQUNfRmlsdGVyUHJlbG9hZF9ETUEoRk1BQ19IYW5kbGVUeXBlRGVmICpoZm1hYywgaW50MTZfdCAqcElucHV0LCB1aW50OF90IElucHV0U2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDE2X3QgKnBPdXRwdXQsIHVpbnQ4X3QgT3V0cHV0U2l6ZSkKQEAgLTg2NiwyMSArODgzLDIxIEBACiAgICogICAgICAgICBJZiBpdCBpcyBzZXQgdG8gTlVMTCwgdGhlIG91dHB1dCB3aWxsIG5vdCBiZSByZWFkIGFuZCBpdCB3aWxsIGJlIHVwIHRvCiAgICogICAgICAgICBhbiBleHRlcm5hbCBJUCB0byBlbXB0eSB0aGUgb3V0cHV0IGJ1ZmZlci4KICAgKiBAcGFyYW0gIHBPdXRwdXRTaXplIHBvaW50ZXIgdG8gdGhlIHNpemUgb2YgdGhlIG91dHB1dCBidWZmZXIuIFRoZSBudW1iZXIgb2YgcmVhZCBkYXRhIHdpbGwgYmUgd3JpdHRlbiBoZXJlLgotICAqIEByZXR2YWwgSEFMIHN0YXR1cworICAqIEByZXR2YWwgSEFMX1N0YXR1c1R5cGVEZWYgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNQUNfRmlsdGVyU3RhcnQoRk1BQ19IYW5kbGVUeXBlRGVmICpoZm1hYywgaW50MTZfdCAqcE91dHB1dCwgdWludDE2X3QgKnBPdXRwdXRTaXplKQogewotICB1aW50MzJfdCB0bXBjciA9IDBVTDsKKyAgdWludDMyX3QgdG1wY3IgPSAwVTsKICAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzOwogCiAgIC8qIENoZWNrIHRoZSBTVEFSVCBiaXQgc3RhdGUgKi8KLSAgaWYgKEZNQUNfR0VUX1NUQVJUX0JJVChoZm1hYykgIT0gMFVMKQorICBpZiAoRk1BQ19HRVRfU1RBUlRfQklUKGhmbWFjKSAhPSAwVSkKICAgewogICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KIAogICAvKiBDaGVjayB0aGF0IGEgdmFsaWQgY29uZmlndXJhdGlvbiB3YXMgZG9uZSBwcmV2aW91c2x5ICovCi0gIGlmIChoZm1hYy0+RmlsdGVyUGFyYW0gPT0gMFVMKQorICBpZiAoaGZtYWMtPkZpbHRlclBhcmFtID09IDBVKQogICB7CiAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQpAQCAtOTM1LDM0ICs5NTIsMjcgQEAKIAogICAgIC8qIFJlc2V0IHRoZSBidXN5IGZsYWcgKGRvIG5vdCBvdmVyd3JpdGUgdGhlIHBvc3NpYmxlIHdyaXRlIGFuZCByZWFkIGZsYWcpICovCiAgICAgaGZtYWMtPlN0YXRlID0gSEFMX0ZNQUNfU1RBVEVfUkVBRFk7Ci0KLSAgICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCi0gICAgcmV0dXJuIHN0YXR1czsKICAgfQogICBlbHNlCiAgIHsKLSAgICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCi0gICAgcmV0dXJuIEhBTF9CVVNZOworICAgIHN0YXR1cyA9IEhBTF9CVVNZOwogICB9CisKKyAgcmV0dXJuIHN0YXR1czsKIH0KIAogLyoqCi0gICogQGJyaWVmICBQcm92aWRlIGEgbmV3IGlucHV0IGJ1ZmZlciB0aGF0IHdpbGwgYmUgbG9hZGVkIGludG8gdGhlIEZNQUMKLSAgKiAgICAgICAgIGlucHV0IG1lbW9yeSBhcmVhLgorICAqIEBicmllZiAgUHJvdmlkZSBhIG5ldyBpbnB1dCBidWZmZXIgdGhhdCB3aWxsIGJlIGxvYWRlZCBpbnRvIHRoZSBGTUFDIGlucHV0IG1lbW9yeSBhcmVhLgogICAqIEBwYXJhbSAgaGZtYWMgcG9pbnRlciB0byBhIEZNQUNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwogICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIEZNQUMgbW9kdWxlLgogICAqIEBwYXJhbSAgcElucHV0IE5ldyBpbnB1dCB2ZWN0b3IgKGFkZGl0aW9uYWwgaW5wdXQgZGF0YSkuCiAgICogQHBhcmFtICBwSW5wdXRTaXplIFNpemUgb2YgdGhlIGlucHV0IHZlY3RvciAoaWYgYWxsIHRoZSBkYXRhIGNhbid0IGJlCiAgICogICAgICAgICB3cml0dGVuLCBpdCB3aWxsIGJlIHVwZGF0ZWQgd2l0aCB0aGUgbnVtYmVyIG9mIGRhdGEgcmVhZCBmcm9tIEZNQUMpLgotICAqIEByZXR2YWwgSEFMIHN0YXR1cworICAqIEByZXR2YWwgSEFMX1N0YXR1c1R5cGVEZWYgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNQUNfQXBwZW5kRmlsdGVyRGF0YShGTUFDX0hhbmRsZVR5cGVEZWYgKmhmbWFjLCBpbnQxNl90ICpwSW5wdXQsIHVpbnQxNl90ICpwSW5wdXRTaXplKQogewotICAvKiBDaGVjayB0aGUgU1RBUlQgYml0IHN0YXRlICovCi0gIGlmIChGTUFDX0dFVF9TVEFSVF9CSVQoaGZtYWMpID09IDBVTCkKLSAgewotICAgIHJldHVybiBIQUxfRVJST1I7Ci0gIH0KKyAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzOwogCiAgIC8qIENoZWNrIHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXJzICovCiAgIGlmICgocElucHV0ID09IE5VTEwpIHx8IChwSW5wdXRTaXplID09IE5VTEwpKQpAQCAtOTc0LDYgKzk4NCwxMiBAQAogICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KIAorICAvKiBDaGVjayB0aGUgU1RBUlQgYml0IHN0YXRlICovCisgIGlmIChGTUFDX0dFVF9TVEFSVF9CSVQoaGZtYWMpID09IDBVKQorICB7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCiAgIC8qIENoZWNrIHRoZSBGTUFDIGNvbmZpZ3VyYXRpb24gKi8KICAgaWYgKGhmbWFjLT5JbnB1dEFjY2VzcyA9PSBGTUFDX0JVRkZFUl9BQ0NFU1NfTk9ORSkKICAgewpAQCAtOTkwLDMzICsxMDA2LDI5IEBACiAgIGlmIChoZm1hYy0+V3JTdGF0ZSA9PSBIQUxfRk1BQ19TVEFURV9SRUFEWSkKICAgewogICAgIC8qIFJlZ2lzdGVyIHRoZSBuZXcgaW5wdXQgYnVmZmVyICovCi0gICAgcmV0dXJuIChGTUFDX0FwcGVuZEZpbHRlckRhdGFVcGRhdGVTdGF0ZShoZm1hYywgcElucHV0LCBwSW5wdXRTaXplKSk7CisgICAgc3RhdHVzID0gRk1BQ19BcHBlbmRGaWx0ZXJEYXRhVXBkYXRlU3RhdGUoaGZtYWMsIHBJbnB1dCwgcElucHV0U2l6ZSk7CiAgIH0KICAgZWxzZQogICB7Ci0gICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwotICAgIHJldHVybiBIQUxfQlVTWTsKKyAgICBzdGF0dXMgPSBIQUxfQlVTWTsKICAgfQorCisgIHJldHVybiBzdGF0dXM7CiB9CiAKIC8qKgotICAqIEBicmllZiAgUHJvdmlkZSBhIG5ldyBvdXRwdXQgYnVmZmVyIHRvIGJlIGZpbGxlZCB3aXRoIHRoZSBkYXRhCi0gICogICAgICAgICBjb21wdXRlZCBieSBGTUFDIHVuaXQuCisgICogQGJyaWVmICBQcm92aWRlIGEgbmV3IG91dHB1dCBidWZmZXIgdG8gYmUgZmlsbGVkIHdpdGggdGhlIGRhdGEgY29tcHV0ZWQgYnkgRk1BQyB1bml0LgogICAqIEBwYXJhbSAgaGZtYWMgcG9pbnRlciB0byBhIEZNQUNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwogICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIEZNQUMgbW9kdWxlLgogICAqIEBwYXJhbSAgcE91dHB1dCBOZXcgb3V0cHV0IHZlY3Rvci4KICAgKiBAcGFyYW0gIHBPdXRwdXRTaXplIFNpemUgb2YgdGhlIG91dHB1dCB2ZWN0b3IgKGlmIHRoZSB2ZWN0b3IgY2FuJ3QKICAgKiAgICAgICAgIGJlIGVudGlyZWx5IGZpbGxlZCwgcE91dHB1dFNpemUgd2lsbCBiZSB1cGRhdGVkIHdpdGggdGhlIG51bWJlcgogICAqICAgICAgICAgb2YgZGF0YSByZWFkIGZyb20gRk1BQykuCi0gICogQHJldHZhbCBIQUwgc3RhdHVzCisgICogQHJldHZhbCBIQUxfU3RhdHVzVHlwZURlZiBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfRk1BQ19Db25maWdGaWx0ZXJPdXRwdXRCdWZmZXIoRk1BQ19IYW5kbGVUeXBlRGVmICpoZm1hYywgaW50MTZfdCAqcE91dHB1dCwgdWludDE2X3QgKnBPdXRwdXRTaXplKQogewotICAvKiBDaGVjayB0aGUgU1RBUlQgYml0IHN0YXRlICovCi0gIGlmIChGTUFDX0dFVF9TVEFSVF9CSVQoaGZtYWMpID09IDBVTCkKLSAgewotICAgIHJldHVybiBIQUxfRVJST1I7Ci0gIH0KKyAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzOwogCiAgIC8qIENoZWNrIHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXJzICovCiAgIGlmICgocE91dHB1dCA9PSBOVUxMKSB8fCAocE91dHB1dFNpemUgPT0gTlVMTCkpCkBAIC0xMDI4LDYgKzEwNDAsMTIgQEAKICAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CiAKKyAgLyogQ2hlY2sgdGhlIFNUQVJUIGJpdCBzdGF0ZSAqLworICBpZiAoRk1BQ19HRVRfU1RBUlRfQklUKGhmbWFjKSA9PSAwVSkKKyAgeworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKwogICAvKiBDaGVjayB0aGUgRk1BQyBjb25maWd1cmF0aW9uICovCiAgIGlmIChoZm1hYy0+T3V0cHV0QWNjZXNzID09IEZNQUNfQlVGRkVSX0FDQ0VTU19OT05FKQogICB7CkBAIC0xMDQ0LDE4ICsxMDYyLDIwIEBACiAgIGlmIChoZm1hYy0+UmRTdGF0ZSA9PSBIQUxfRk1BQ19TVEFURV9SRUFEWSkKICAgewogICAgIC8qIFJlZ2lzdGVyIHRoZSBuZXcgb3V0cHV0IGJ1ZmZlciAqLwotICAgIHJldHVybiAoRk1BQ19Db25maWdGaWx0ZXJPdXRwdXRCdWZmZXJVcGRhdGVTdGF0ZShoZm1hYywgcE91dHB1dCwgcE91dHB1dFNpemUpKTsKKyAgICBzdGF0dXMgPSBGTUFDX0NvbmZpZ0ZpbHRlck91dHB1dEJ1ZmZlclVwZGF0ZVN0YXRlKGhmbWFjLCBwT3V0cHV0LCBwT3V0cHV0U2l6ZSk7CiAgIH0KICAgZWxzZQogICB7Ci0gICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwotICAgIHJldHVybiBIQUxfQlVTWTsKKyAgICBzdGF0dXMgPSBIQUxfQlVTWTsKICAgfQorCisgIHJldHVybiBzdGF0dXM7CiB9CiAKIC8qKgotICAqIEBicmllZiAgV3JpdGUgdGhlIHByZXZpb3VzbHkgcHJvdmlkZWQgdXNlcidzIGlucHV0IGRhdGEgYW5kCi0gICogICAgICAgICBmaWxsIHRoZSBwcmV2aW91c2x5IHByb3ZpZGVkIHVzZXIncyBvdXRwdXQgYnVmZmVyLAorICAqIEBicmllZiAgSGFuZGxlIHRoZSBpbnB1dCBhbmQvb3Igb3V0cHV0IGRhdGEgaW4gcG9sbGluZyBtb2RlCisgICogQG5vdGUgICBUaGlzIGZ1bmN0aW9uIHdyaXRlcyB0aGUgcHJldmlvdXNseSBwcm92aWRlZCB1c2VyJ3MgaW5wdXQgZGF0YSBhbmQKKyAgKiAgICAgICAgIGZpbGxzIHRoZSBwcmV2aW91c2x5IHByb3ZpZGVkIHVzZXIncyBvdXRwdXQgYnVmZmVyLAogICAqICAgICAgICAgYWNjb3JkaW5nIHRvIHRoZSBleGlzdGluZyBGTUFDIGNvbmZpZ3VyYXRpb24gKHBvbGxpbmcgbW9kZSBvbmx5KS4KICAgKiAgICAgICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIHdoZW4gdGhlIGlucHV0IGRhdGEgaGFzIGJlZW4gaGFuZGxlZCBvcgogICAqICAgICAgICAgd2hlbiB0aGUgb3V0cHV0IGRhdGEgaXMgZmlsbGVkLiBUaGUgcG9zc2libGUgdW51c2VkIGRhdGEgaXNuJ3QKQEAgLTEwNjUsNyArMTA4NSw3IEBACiAgICogQHBhcmFtICBoZm1hYyBwb2ludGVyIHRvIGEgRk1BQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgRk1BQyBtb2R1bGUuCiAgICogQHBhcmFtICBUaW1lb3V0IHRpbWVvdXQgdmFsdWUuCi0gICogQHJldHZhbCBIQUwgc3RhdHVzCisgICogQHJldHZhbCBIQUxfU3RhdHVzVHlwZURlZiBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfRk1BQ19Qb2xsRmlsdGVyRGF0YShGTUFDX0hhbmRsZVR5cGVEZWYgKmhmbWFjLCB1aW50MzJfdCBUaW1lb3V0KQogewpAQCAtMTA3NCw5ICsxMDk0LDEwIEBACiAgIHVpbnQ4X3QgaW5wb2xsaW5nb3ZlciA9IFBPTExJTkdfTk9UX1NUT1BQRUQ7CiAgIHVpbnQ4X3Qgb3V0cG9sbGluZzsKICAgdWludDhfdCBvdXRwb2xsaW5nb3ZlciA9IFBPTExJTkdfTk9UX1NUT1BQRUQ7CisgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1czsKIAogICAvKiBDaGVjayB0aGUgU1RBUlQgYml0IHN0YXRlICovCi0gIGlmIChGTUFDX0dFVF9TVEFSVF9CSVQoaGZtYWMpID09IDBVTCkKKyAgaWYgKEZNQUNfR0VUX1NUQVJUX0JJVChoZm1hYykgPT0gMFUpCiAgIHsKICAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CkBAIC0xMTYxLDQxICsxMTgyLDQwIEBACiAgICAgLyogUmVzZXQgdGhlIGJ1c3kgZmxhZyAoZG8gbm90IG92ZXJ3cml0ZSB0aGUgcG9zc2libGUgd3JpdGUgYW5kIHJlYWQgZmxhZykgKi8KICAgICBoZm1hYy0+U3RhdGUgPSBIQUxfRk1BQ19TVEFURV9SRUFEWTsKIAotICAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgICBpZiAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID49IFRpbWVvdXQpCiAgICAgewotICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICAgICAgaGZtYWMtPkVycm9yQ29kZSB8PSBIQUxfRk1BQ19FUlJPUl9USU1FT1VUOworICAgICAgc3RhdHVzID0gSEFMX1RJTUVPVVQ7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICByZXR1cm4gSEFMX09LOworICAgICAgc3RhdHVzID0gSEFMX09LOwogICAgIH0KICAgfQogICBlbHNlCiAgIHsKLSAgICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCi0gICAgcmV0dXJuIEhBTF9CVVNZOworICAgIHN0YXR1cyA9IEhBTF9CVVNZOwogICB9CisKKyAgcmV0dXJuIHN0YXR1czsKIH0KIAogLyoqCiAgICogQGJyaWVmICBTdG9wIHRoZSBGTUFDIHByb2Nlc3NpbmcuCiAgICogQHBhcmFtICBoZm1hYyBwb2ludGVyIHRvIGEgRk1BQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgRk1BQyBtb2R1bGUuCi0gICogQHJldHZhbCBIQUwgc3RhdHVzCisgICogQHJldHZhbCBIQUxfU3RhdHVzVHlwZURlZiBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfRk1BQ19GaWx0ZXJTdG9wKEZNQUNfSGFuZGxlVHlwZURlZiAqaGZtYWMpCiB7Ci0KLSAgLyogQ2hlY2sgdGhlIFNUQVJUIGJpdCBzdGF0ZSAqLwotICBpZiAoRk1BQ19HRVRfU1RBUlRfQklUKGhmbWFjKSA9PSAwVUwpCi0gIHsKLSAgICByZXR1cm4gSEFMX0VSUk9SOwotICB9CisgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1czsKIAogICAvKiBDaGVjayBoYW5kbGUgc3RhdGUgaXMgcmVhZHkgKi8KICAgaWYgKGhmbWFjLT5TdGF0ZSA9PSBIQUxfRk1BQ19TVEFURV9SRUFEWSkKICAgeworICAgIC8qIENoYW5nZSB0aGUgRk1BQyBzdGF0ZSAqLworICAgIGhmbWFjLT5TdGF0ZSA9IEhBTF9GTUFDX1NUQVRFX0JVU1k7CisKICAgICAvKiBTZXQgdGhlIFNUQVJUIGJpdCB0byAwIChzdG9wIHRoZSBwcmV2aW91c2x5IGNvbmZpZ3VyZWQgZmlsdGVyKSAqLwogICAgIENMRUFSX0JJVChoZm1hYy0+SW5zdGFuY2UtPlBBUkFNLCBGTUFDX1BBUkFNX1NUQVJUKTsKIApAQCAtMTIxOCwyMCArMTIzOCwyNSBAQAogICAgICAgLyogVXBkYXRlIEZNQUMgZXJyb3IgY29kZSBhbmQgRk1BQyBwZXJpcGhlcmFsIHN0YXRlICovCiAgICAgICBoZm1hYy0+RXJyb3JDb2RlID0gSEFMX0ZNQUNfRVJST1JfUkVTRVQ7CiAgICAgICBoZm1hYy0+U3RhdGUgPSBIQUxfRk1BQ19TVEFURV9USU1FT1VUOwotICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICAgICAgc3RhdHVzID0gSEFMX1RJTUVPVVQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAvKiBSZXNldCB0aGUgZGF0YSBwb2ludGVycyAqLworICAgICAgRk1BQ19SZXNldERhdGFQb2ludGVycyhoZm1hYyk7CisKKyAgICAgIHN0YXR1cyA9IEhBTF9PSzsKICAgICB9CiAKLSAgICAvKiBSZXNldCB0aGUgZGF0YSBwb2ludGVycyAqLwotICAgIEZNQUNfUmVzZXREYXRhUG9pbnRlcnMoaGZtYWMpOwotCi0gICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwotICAgIHJldHVybiBIQUxfT0s7CisgICAgLyogUmVzZXQgdGhlIGJ1c3kgZmxhZyAqLworICAgIGhmbWFjLT5TdGF0ZSA9IEhBTF9GTUFDX1NUQVRFX1JFQURZOwogICB9CiAgIGVsc2UKICAgewotICAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KLSAgICByZXR1cm4gSEFMX0JVU1k7CisgICAgc3RhdHVzID0gSEFMX0JVU1k7CiAgIH0KKworICByZXR1cm4gc3RhdHVzOwogfQogCiAvKioKQEAgLTEzOTcsNyArMTQyMiw3IEBACiAKICAgLyogQ2hlY2sgaWYgdGhlIHJlYWQgaW50ZXJydXB0IGlzIGVuYWJsZWQgYW5kIGlmIFkgYnVmZmVyIGVtcHR5IGZsYWcgaXNuJ3Qgc2V0ICovCiAgIGl0c291cmNlID0gX19IQUxfRk1BQ19HRVRfSVRfU09VUkNFKGhmbWFjLCBGTUFDX0lUX1JJRU4pOwotICBpZiAoKF9fSEFMX0ZNQUNfR0VUX0ZMQUcoaGZtYWMsIEZNQUNfRkxBR19ZRU1QVFkpID09IDBVKSAmJiAoaXRzb3VyY2UgIT0gMFVMKSkKKyAgaWYgKChfX0hBTF9GTUFDX0dFVF9GTEFHKGhmbWFjLCBGTUFDX0ZMQUdfWUVNUFRZKSA9PSAwVSkgJiYgKGl0c291cmNlICE9IDBVKSkKICAgewogICAgIC8qIFJlYWQgc29tZSBkYXRhIGlmIHBvc3NpYmxlIChZIHNpemUgaXMgdXNlZCBhcyBhIHBzZXVkbyB0aW1lb3V0IGluIG9yZGVyCiAgICAgICAgdG8gbm90IGdldCBzdHVjayB0b28gbG9uZyB1bmRlciBJVCBpZiBGTUFDIGtlZXBzIG9uIHByb2Nlc3NpbmcgaW5wdXQKQEAgLTE0MjQsNyArMTQ0OSw3IEBACiAKICAgLyogQ2hlY2sgaWYgdGhlIHdyaXRlIGludGVycnVwdCBpcyBlbmFibGVkIGFuZCBpZiBYMSBidWZmZXIgZnVsbCBmbGFnIGlzbid0IHNldCAqLwogICBpdHNvdXJjZSA9IF9fSEFMX0ZNQUNfR0VUX0lUX1NPVVJDRShoZm1hYywgRk1BQ19JVF9XSUVOKTsKLSAgaWYgKChfX0hBTF9GTUFDX0dFVF9GTEFHKGhmbWFjLCBGTUFDX0ZMQUdfWDFGVUxMKSA9PSAwVSkgJiYgKGl0c291cmNlICE9IDBVTCkpCisgIGlmICgoX19IQUxfRk1BQ19HRVRfRkxBRyhoZm1hYywgRk1BQ19GTEFHX1gxRlVMTCkgPT0gMFUpICYmIChpdHNvdXJjZSAhPSAwVSkpCiAgIHsKICAgICAvKiBXcml0ZSBzb21lIGRhdGEgaWYgcG9zc2libGUgKFgxIHNpemUgaXMgdXNlZCBhcyBhIHBzZXVkbyB0aW1lb3V0IGluIG9yZGVyCiAgICAgICAgdG8gbm90IGdldCBzdHVjayB0b28gbG9uZyB1bmRlciBJVCBpZiBGTUFDIGtlZXAgb24gcHJvY2Vzc2luZyBpbnB1dApAQCAtMTQ1MSwyMSArMTQ3NiwyMSBAQAogCiAgIC8qIENoZWNrIGlmIHRoZSBvdmVyZmxvdyBlcnJvciBpbnRlcnJ1cHQgaXMgZW5hYmxlZCBhbmQgaWYgb3ZlcmZsb3cgZXJyb3IgZmxhZyBpcyByYWlzZWQgKi8KICAgaXRzb3VyY2UgPSBfX0hBTF9GTUFDX0dFVF9JVF9TT1VSQ0UoaGZtYWMsIEZNQUNfSVRfT1ZGTElFTik7Ci0gIGlmICgoX19IQUxfRk1BQ19HRVRfRkxBRyhoZm1hYywgRk1BQ19GTEFHX09WRkwpICE9IDBVKSAmJiAoaXRzb3VyY2UgIT0gMFVMKSkKKyAgaWYgKChfX0hBTF9GTUFDX0dFVF9GTEFHKGhmbWFjLCBGTUFDX0ZMQUdfT1ZGTCkgIT0gMFUpICYmIChpdHNvdXJjZSAhPSAwVSkpCiAgIHsKICAgICBoZm1hYy0+RXJyb3JDb2RlIHw9IEhBTF9GTUFDX0VSUk9SX09WRkw7CiAgIH0KIAogICAvKiBDaGVjayBpZiB0aGUgdW5kZXJmbG93IGVycm9yIGludGVycnVwdCBpcyBlbmFibGVkIGFuZCBpZiB1bmRlcmZsb3cgZXJyb3IgZmxhZyBpcyByYWlzZWQgKi8KICAgaXRzb3VyY2UgPSBfX0hBTF9GTUFDX0dFVF9JVF9TT1VSQ0UoaGZtYWMsIEZNQUNfSVRfVU5GTElFTik7Ci0gIGlmICgoX19IQUxfRk1BQ19HRVRfRkxBRyhoZm1hYywgRk1BQ19GTEFHX1VORkwpICE9IDBVKSAmJiAoaXRzb3VyY2UgIT0gMFVMKSkKKyAgaWYgKChfX0hBTF9GTUFDX0dFVF9GTEFHKGhmbWFjLCBGTUFDX0ZMQUdfVU5GTCkgIT0gMFUpICYmIChpdHNvdXJjZSAhPSAwVSkpCiAgIHsKICAgICBoZm1hYy0+RXJyb3JDb2RlIHw9IEhBTF9GTUFDX0VSUk9SX1VORkw7CiAgIH0KIAogICAvKiBDaGVjayBpZiB0aGUgc2F0dXJhdGlvbiBlcnJvciBpbnRlcnJ1cHQgaXMgZW5hYmxlZCBhbmQgaWYgc2F0dXJhdGlvbiBlcnJvciBmbGFnIGlzIHJhaXNlZCAqLwogICBpdHNvdXJjZSA9IF9fSEFMX0ZNQUNfR0VUX0lUX1NPVVJDRShoZm1hYywgRk1BQ19JVF9TQVRJRU4pOwotICBpZiAoKF9fSEFMX0ZNQUNfR0VUX0ZMQUcoaGZtYWMsIEZNQUNfRkxBR19TQVQpICE9IDBVKSAmJiAoaXRzb3VyY2UgIT0gMFVMKSkKKyAgaWYgKChfX0hBTF9GTUFDX0dFVF9GTEFHKGhmbWFjLCBGTUFDX0ZMQUdfU0FUKSAhPSAwVSkgJiYgKGl0c291cmNlICE9IDBVKSkKICAgewogICAgIGhmbWFjLT5FcnJvckNvZGUgfD0gSEFMX0ZNQUNfRVJST1JfU0FUOwogICB9CkBAIC0xNDg2LDI5ICsxNTExLDMwIEBACiAgICogQH0KICAgKi8KIAotLyoqIEBkZWZncm91cCBGTUFDX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDUgUGVyaXBoZXJhbCBTdGF0ZSBmdW5jdGlvbnMKLSAgKiBAYnJpZWYgICAgUGVyaXBoZXJhbCBTdGF0ZSBmdW5jdGlvbnMuCisvKiogQGRlZmdyb3VwIEZNQUNfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwNSBQZXJpcGhlcmFsIFN0YXRlIGFuZCBFcnJvciBmdW5jdGlvbnMKKyAgKiBAYnJpZWYgICAgUGVyaXBoZXJhbCBTdGF0ZSBhbmQgRXJyb3IgZnVuY3Rpb25zLgogICAqCiBAdmVyYmF0aW0KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICAgICAgICAgICAgICAgICAgIyMjIyMgUGVyaXBoZXJhbCBTdGF0ZSBmdW5jdGlvbnMgIyMjIyMKKyAgICAgICAgICAgICAgICAgIyMjIyMgUGVyaXBoZXJhbCBTdGF0ZSBhbmQgRXJyb3IgZnVuY3Rpb25zICMjIyMjCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgIFsuLl0KLSAgICBUaGlzIHN1YnNlY3Rpb24gcGVybWl0cyB0byBnZXQgaW4gcnVuLXRpbWUgdGhlIHN0YXR1cyBvZiB0aGUgcGVyaXBoZXJhbC4KKyAgICBbLi5dICBUaGlzIHN1YnNlY3Rpb24gcHJvdmlkZXMgZnVuY3Rpb25zIGFsbG93aW5nIHRvCisgICAgICAoKykgQ2hlY2sgdGhlIEZNQUMgc3RhdGUKKyAgICAgICgrKSBHZXQgZXJyb3IgY29kZQogCiBAZW5kdmVyYmF0aW0KICAgKiBAewogICAqLwogCiAvKioKLSAgKiBAYnJpZWYgIFJldHVybiB0aGUgRk1BQyBoYW5kbGUgc3RhdGUuCisgICogQGJyaWVmICBSZXR1cm4gdGhlIEZNQUMgc3RhdGUuCiAgICogQHBhcmFtICBoZm1hYyBwb2ludGVyIHRvIGEgRk1BQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgRk1BQyBtb2R1bGUuCi0gICogQHJldHZhbCBIQUwgc3RhdGUKKyAgKiBAcmV0dmFsIEhBTF9GTUFDX1N0YXRlVHlwZURlZiBGTUFDIHN0YXRlCiAgICovCiBIQUxfRk1BQ19TdGF0ZVR5cGVEZWYgSEFMX0ZNQUNfR2V0U3RhdGUoRk1BQ19IYW5kbGVUeXBlRGVmICpoZm1hYykKIHsKLSAgLyogUmV0dXJuIEZNQUMgaGFuZGxlIHN0YXRlICovCisgIC8qIFJldHVybiBGTUFDIHN0YXRlICovCiAgIHJldHVybiBoZm1hYy0+U3RhdGU7CiB9CiAKQEAgLTE1MTcsNyArMTU0Myw3IEBACiAgICogQHBhcmFtICBoZm1hYyBwb2ludGVyIHRvIGEgRk1BQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgRk1BQyBtb2R1bGUuCiAgICogQG5vdGUgICBUaGUgcmV0dXJuZWQgZXJyb3IgaXMgYSBiaXQtbWFwIGNvbWJpbmF0aW9uIG9mIHBvc3NpYmxlIGVycm9ycy4KLSAgKiBAcmV0dmFsIEVycm9yIGJpdC1tYXAKKyAgKiBAcmV0dmFsIHVpbnQzMl90IEVycm9yIGJpdC1tYXAgYmFzZWQgb24gQHJlZiBGTUFDX0Vycm9yX0NvZGUKICAgKi8KIHVpbnQzMl90IEhBTF9GTUFDX0dldEVycm9yKEZNQUNfSGFuZGxlVHlwZURlZiAqaGZtYWMpCiB7CkBAIC0xNTQ1LDcgKzE1NzEsNyBAQAogLyoqCiAgICogQGJyaWVmICBQZXJmb3JtIGEgcmVzZXQgb2YgdGhlIEZNQUMgdW5pdC4KICAgKiBAcGFyYW0gIGhmbWFjIEZNQUMgaGFuZGxlLgotICAqIEByZXR2YWwgRk1BQyBzdGF0dXMKKyAgKiBAcmV0dmFsIEhBTF9TdGF0dXNUeXBlRGVmIEhBTCBzdGF0dXMKICAgKi8KIHN0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBGTUFDX1Jlc2V0KEZNQUNfSGFuZGxlVHlwZURlZiAqaGZtYWMpCiB7CkBAIC0xNTU4LDEwICsxNTg0LDExIEBACiAgIFNFVF9CSVQoaGZtYWMtPkluc3RhbmNlLT5DUiwgRk1BQ19DUl9SRVNFVCk7CiAKICAgLyogV2FpdCB1bnRpbCBmbGFnIGlzIHJlc2V0ICovCi0gIHdoaWxlIChSRUFEX0JJVChoZm1hYy0+SW5zdGFuY2UtPkNSLCBGTUFDX0NSX1JFU0VUKSAhPSAwVUwpCisgIHdoaWxlIChSRUFEX0JJVChoZm1hYy0+SW5zdGFuY2UtPkNSLCBGTUFDX0NSX1JFU0VUKSAhPSAwVSkKICAgewogICAgIGlmICgoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCkgPiBIQUxfRk1BQ19SRVNFVF9USU1FT1VUX1ZBTFVFKQogICAgIHsKKyAgICAgIGhmbWFjLT5FcnJvckNvZGUgfD0gSEFMX0ZNQUNfRVJST1JfVElNRU9VVDsKICAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKICAgICB9CiAgIH0KQEAgLTE1NzMsNyArMTYwMCw3IEBACiAvKioKICAgKiBAYnJpZWYgIFJlc2V0IHRoZSBkYXRhIHBvaW50ZXJzIG9mIHRoZSBGTUFDIHVuaXQuCiAgICogQHBhcmFtICBoZm1hYyBGTUFDIGhhbmRsZS4KLSAgKiBAcmV0dmFsIEZNQUMgc3RhdHVzCisgICogQHJldHZhbCBOb25lCiAgICovCiBzdGF0aWMgdm9pZCBGTUFDX1Jlc2V0RGF0YVBvaW50ZXJzKEZNQUNfSGFuZGxlVHlwZURlZiAqaGZtYWMpCiB7CkBAIC0xNTg0LDcgKzE2MTEsNyBAQAogLyoqCiAgICogQGJyaWVmICBSZXNldCB0aGUgaW5wdXQgZGF0YSBwb2ludGVycyBvZiB0aGUgRk1BQyB1bml0LgogICAqIEBwYXJhbSAgaGZtYWMgRk1BQyBoYW5kbGUuCi0gICogQHJldHZhbCBGTUFDIHN0YXR1cworICAqIEByZXR2YWwgTm9uZQogICAqLwogc3RhdGljIHZvaWQgRk1BQ19SZXNldElucHV0U3RhdGVBbmREYXRhUG9pbnRlcnMoRk1BQ19IYW5kbGVUeXBlRGVmICpoZm1hYykKIHsKQEAgLTE1OTcsNyArMTYyNCw3IEBACiAvKioKICAgKiBAYnJpZWYgIFJlc2V0IHRoZSBvdXRwdXQgZGF0YSBwb2ludGVycyBvZiB0aGUgRk1BQyB1bml0LgogICAqIEBwYXJhbSAgaGZtYWMgRk1BQyBoYW5kbGUuCi0gICogQHJldHZhbCBGTUFDIHN0YXR1cworICAqIEByZXR2YWwgTm9uZQogICAqLwogc3RhdGljIHZvaWQgRk1BQ19SZXNldE91dHB1dFN0YXRlQW5kRGF0YVBvaW50ZXJzKEZNQUNfSGFuZGxlVHlwZURlZiAqaGZtYWMpCiB7CkBAIC0xNjA4LDE1ICsxNjM1LDE3IEBACiB9CiAKIC8qKgotICAqIEBicmllZiAgQ29uZmlndXJlIHRoZSBGTUFDIGZpbHRlciBhY2NvcmRpbmcgdG8gdGhlIHBhcmFtZXRlcnMKLSAgICAgICAgICAgIHNwZWNpZmllZCBpbiB0aGUgRk1BQ19GaWx0ZXJDb25maWdUeXBlRGVmIHN0cnVjdHVyZS4KKyAgKiBAYnJpZWYgIENvbmZpZ3VyZSB0aGUgRk1BQyBmaWx0ZXIuCisgICogQG5vdGUgICBUaGUgY29uZmlndXJhdGlvbiBpcyBkb25lIGFjY29yZGluZyB0byB0aGUgcGFyYW1ldGVycworICAqICAgICAgICAgc3BlY2lmaWVkIGluIHRoZSBGTUFDX0ZpbHRlckNvbmZpZ1R5cGVEZWYgc3RydWN0dXJlLgogICAqIEBwYXJhbSAgaGZtYWMgcG9pbnRlciB0byBhIEZNQUNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwogICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIEZNQUMgbW9kdWxlLgotICAqIEBwYXJhbSAgc0NvbmZpZyBwb2ludGVyIHRvIGEgRk1BQ19GaWx0ZXJDb25maWdUeXBlRGVmIHN0cnVjdHVyZSB0aGF0CisgICogQHBhcmFtICBwQ29uZmlnIHBvaW50ZXIgdG8gYSBGTUFDX0ZpbHRlckNvbmZpZ1R5cGVEZWYgc3RydWN0dXJlIHRoYXQKICAgKiAgICAgICAgIGNvbnRhaW5zIHRoZSBGTUFDIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uCi0gICogQHJldHZhbCBIQUwgc3RhdHVzCisgICogQHBhcmFtICBQcmVsb2FkQWNjZXNzIGFjY2VzcyBtb2RlIHVzZWQgZm9yIHRoZSBwcmVsb2FkIChwb2xsaW5nIG9yIERNQSkuCisgICogQHJldHZhbCBIQUxfU3RhdHVzVHlwZURlZiBIQUwgc3RhdHVzCiAgICovCi1zdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgRk1BQ19GaWx0ZXJDb25maWcoRk1BQ19IYW5kbGVUeXBlRGVmICpoZm1hYywgRk1BQ19GaWx0ZXJDb25maWdUeXBlRGVmICpzQ29uZmlnLAorc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIEZNQUNfRmlsdGVyQ29uZmlnKEZNQUNfSGFuZGxlVHlwZURlZiAqaGZtYWMsIEZNQUNfRmlsdGVyQ29uZmlnVHlwZURlZiAqcENvbmZpZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IFByZWxvYWRBY2Nlc3MpCiB7CiAgIHVpbnQzMl90IHRpY2tzdGFydDsKQEAgLTE2MjYsMTkzICsxNjU1LDE5MCBAQAogI2VuZGlmIC8qIFVTRV9GVUxMX0FTU0VSVCAqLwogCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCi0gIGFzc2VydF9wYXJhbShJU19GTUFDX1RIUkVTSE9MRChzQ29uZmlnLT5JbnB1dFRocmVzaG9sZCkpOwotICBhc3NlcnRfcGFyYW0oSVNfRk1BQ19USFJFU0hPTEQoc0NvbmZpZy0+T3V0cHV0VGhyZXNob2xkKSk7Ci0gIGFzc2VydF9wYXJhbShJU19GTUFDX0JVRkZFUl9BQ0NFU1Moc0NvbmZpZy0+SW5wdXRBY2Nlc3MpKTsKLSAgYXNzZXJ0X3BhcmFtKElTX0ZNQUNfQlVGRkVSX0FDQ0VTUyhzQ29uZmlnLT5PdXRwdXRBY2Nlc3MpKTsKLSAgYXNzZXJ0X3BhcmFtKElTX0ZNQUNfQ0xJUF9TVEFURShzQ29uZmlnLT5DbGlwKSk7Ci0gIGFzc2VydF9wYXJhbShJU19GTUFDX0ZJTFRFUl9GVU5DVElPTihzQ29uZmlnLT5GaWx0ZXIpKTsKLSAgYXNzZXJ0X3BhcmFtKElTX0ZNQUNfUEFSQU1fUChzQ29uZmlnLT5GaWx0ZXIsIHNDb25maWctPlApKTsKLSAgYXNzZXJ0X3BhcmFtKElTX0ZNQUNfUEFSQU1fUShzQ29uZmlnLT5GaWx0ZXIsIHNDb25maWctPlEpKTsKLSAgYXNzZXJ0X3BhcmFtKElTX0ZNQUNfUEFSQU1fUihzQ29uZmlnLT5GaWx0ZXIsIHNDb25maWctPlIpKTsKKyAgYXNzZXJ0X3BhcmFtKElTX0ZNQUNfVEhSRVNIT0xEKHBDb25maWctPklucHV0VGhyZXNob2xkKSk7CisgIGFzc2VydF9wYXJhbShJU19GTUFDX1RIUkVTSE9MRChwQ29uZmlnLT5PdXRwdXRUaHJlc2hvbGQpKTsKKyAgYXNzZXJ0X3BhcmFtKElTX0ZNQUNfQlVGRkVSX0FDQ0VTUyhwQ29uZmlnLT5JbnB1dEFjY2VzcykpOworICBhc3NlcnRfcGFyYW0oSVNfRk1BQ19CVUZGRVJfQUNDRVNTKHBDb25maWctPk91dHB1dEFjY2VzcykpOworICBhc3NlcnRfcGFyYW0oSVNfRk1BQ19DTElQX1NUQVRFKHBDb25maWctPkNsaXApKTsKKyAgYXNzZXJ0X3BhcmFtKElTX0ZNQUNfRklMVEVSX0ZVTkNUSU9OKHBDb25maWctPkZpbHRlcikpOworICBhc3NlcnRfcGFyYW0oSVNfRk1BQ19QQVJBTV9QKHBDb25maWctPkZpbHRlciwgcENvbmZpZy0+UCkpOworICBhc3NlcnRfcGFyYW0oSVNfRk1BQ19QQVJBTV9RKHBDb25maWctPkZpbHRlciwgcENvbmZpZy0+USkpOworICBhc3NlcnRfcGFyYW0oSVNfRk1BQ19QQVJBTV9SKHBDb25maWctPkZpbHRlciwgcENvbmZpZy0+UikpOwogCiAgIC8qIENoZWNrIHRoZSBTVEFSVCBiaXQgc3RhdGUgKi8KLSAgaWYgKEZNQUNfR0VUX1NUQVJUX0JJVChoZm1hYykgIT0gMFVMKQorICBpZiAoRk1BQ19HRVRfU1RBUlRfQklUKGhmbWFjKSAhPSAwVSkKICAgewogICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KIAogICAvKiBDaGVjayBoYW5kbGUgc3RhdGUgaXMgcmVhZHkgKi8KLSAgaWYgKGhmbWFjLT5TdGF0ZSA9PSBIQUxfRk1BQ19TVEFURV9SRUFEWSkKKyAgaWYgKGhmbWFjLT5TdGF0ZSAhPSBIQUxfRk1BQ19TVEFURV9SRUFEWSkKICAgewotICAgIC8qIENoYW5nZSB0aGUgRk1BQyBzdGF0ZSAqLwotICAgIGhmbWFjLT5TdGF0ZSA9IEhBTF9GTUFDX1NUQVRFX0JVU1k7CisgICAgcmV0dXJuIEhBTF9CVVNZOworICB9CiAKLSAgICAvKiBHZXQgdGljayAqLwotICAgIHRpY2tzdGFydCA9IEhBTF9HZXRUaWNrKCk7CisgIC8qIENoYW5nZSB0aGUgRk1BQyBzdGF0ZSAqLworICBoZm1hYy0+U3RhdGUgPSBIQUxfRk1BQ19TVEFURV9CVVNZOwogCi0gICAgLyogSW5kaWNhdGUgdGhhdCB0aGVyZSBpcyBubyB2YWxpZCBjb25maWd1cmF0aW9uIGRvbmUgKi8KLSAgICBoZm1hYy0+RmlsdGVyUGFyYW0gPSAwVUw7CisgIC8qIEdldCB0aWNrICovCisgIHRpY2tzdGFydCA9IEhBTF9HZXRUaWNrKCk7CiAKLSAgICAvKiBGTUFDX1gxQlVGQ0ZHOiBDb25maWd1cmUgdGhlIGlucHV0IGJ1ZmZlciB3aXRoaW4gdGhlIGludGVybmFsIG1lbW9yeSBpZiByZXF1aXJlZCAqLwotICAgIGlmIChzQ29uZmlnLT5JbnB1dEJ1ZmZlclNpemUgIT0gMFUpCi0gICAgewotICAgICAgTU9ESUZZX1JFRyhoZm1hYy0+SW5zdGFuY2UtPlgxQlVGQ0ZHLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgIChGTUFDX1gxQlVGQ0ZHX1gxX0JBU0UgfCBGTUFDX1gxQlVGQ0ZHX1gxX0JVRl9TSVpFKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgKCgoKCh1aW50MzJfdCkoc0NvbmZpZy0+SW5wdXRCYXNlQWRkcmVzcykpIDw8IEZNQUNfWDFCVUZDRkdfWDFfQkFTRV9Qb3MpICAgICAmIEZNQUNfWDFCVUZDRkdfWDFfQkFTRSkgfCBcCi0gICAgICAgICAgICAgICAgICAoKCgodWludDMyX3QpKHNDb25maWctPklucHV0QnVmZmVyU2l6ZSkpICA8PCBGTUFDX1gxQlVGQ0ZHX1gxX0JVRl9TSVpFX1BvcykgJiBGTUFDX1gxQlVGQ0ZHX1gxX0JVRl9TSVpFKSkpOwotICAgIH0KKyAgLyogSW5kaWNhdGUgdGhhdCB0aGVyZSBpcyBubyB2YWxpZCBjb25maWd1cmF0aW9uIGRvbmUgKi8KKyAgaGZtYWMtPkZpbHRlclBhcmFtID0gMFU7CiAKLSAgICAvKiBGTUFDX1gxQlVGQ0ZHOiBDb25maWd1cmUgdGhlIGlucHV0IHRocmVzaG9sZCBpZiB2YWxpZCB3aGVuIGNvbXBhcmVkIHRvIHRoZSBjb25maWd1cmVkIFgxIHNpemUgKi8KLSAgICBpZiAoc0NvbmZpZy0+SW5wdXRUaHJlc2hvbGQgIT0gRk1BQ19USFJFU0hPTERfTk9fVkFMVUUpCi0gICAgewotICAgICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlciAqLwotICAgICAgYXNzZXJ0X3BhcmFtKElTX0ZNQUNfVEhSRVNIT0xEX0FQUExJQ0FCTEUoRk1BQ19HRVRfWDFfU0laRShoZm1hYyksIHNDb25maWctPklucHV0VGhyZXNob2xkLCBzQ29uZmlnLT5JbnB1dEFjY2VzcykpOworICAvKiBGTUFDX1gxQlVGQ0ZHOiBDb25maWd1cmUgdGhlIGlucHV0IGJ1ZmZlciB3aXRoaW4gdGhlIGludGVybmFsIG1lbW9yeSBpZiByZXF1aXJlZCAqLworICBpZiAocENvbmZpZy0+SW5wdXRCdWZmZXJTaXplICE9IDBVKQorICB7CisgICAgTU9ESUZZX1JFRyhoZm1hYy0+SW5zdGFuY2UtPlgxQlVGQ0ZHLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAoRk1BQ19YMUJVRkNGR19YMV9CQVNFIHwgRk1BQ19YMUJVRkNGR19YMV9CVUZfU0laRSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAoKCgoKHVpbnQzMl90KShwQ29uZmlnLT5JbnB1dEJhc2VBZGRyZXNzKSkgPDwgRk1BQ19YMUJVRkNGR19YMV9CQVNFX1BvcykgICAgICYgRk1BQ19YMUJVRkNGR19YMV9CQVNFKSB8IFwKKyAgICAgICAgICAgICAgICAoKCgodWludDMyX3QpKHBDb25maWctPklucHV0QnVmZmVyU2l6ZSkpICA8PCBGTUFDX1gxQlVGQ0ZHX1gxX0JVRl9TSVpFX1BvcykgJiBGTUFDX1gxQlVGQ0ZHX1gxX0JVRl9TSVpFKSkpOworICB9CiAKLSAgICAgIE1PRElGWV9SRUcoaGZtYWMtPkluc3RhbmNlLT5YMUJVRkNGRywgXAotICAgICAgICAgICAgICAgICBGTUFDX1gxQlVGQ0ZHX0ZVTExfV00sICAgICBcCi0gICAgICAgICAgICAgICAgICgoc0NvbmZpZy0+SW5wdXRUaHJlc2hvbGQpICYgRk1BQ19YMUJVRkNGR19GVUxMX1dNKSk7Ci0gICAgfQorICAvKiBGTUFDX1gxQlVGQ0ZHOiBDb25maWd1cmUgdGhlIGlucHV0IHRocmVzaG9sZCBpZiB2YWxpZCB3aGVuIGNvbXBhcmVkIHRvIHRoZSBjb25maWd1cmVkIFgxIHNpemUgKi8KKyAgaWYgKHBDb25maWctPklucHV0VGhyZXNob2xkICE9IEZNQUNfVEhSRVNIT0xEX05PX1ZBTFVFKQorICB7CisgICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlciAqLworICAgIGFzc2VydF9wYXJhbShJU19GTUFDX1RIUkVTSE9MRF9BUFBMSUNBQkxFKEZNQUNfR0VUX1gxX1NJWkUoaGZtYWMpLCBwQ29uZmlnLT5JbnB1dFRocmVzaG9sZCwgcENvbmZpZy0+SW5wdXRBY2Nlc3MpKTsKIAotICAgIC8qIEZNQUNfWDJCVUZDRkc6IENvbmZpZ3VyZSB0aGUgY29lZmZpY2llbnQgYnVmZmVyIHdpdGhpbiB0aGUgaW50ZXJuYWwgbWVtb3J5ICovCi0gICAgaWYgKHNDb25maWctPkNvZWZmQnVmZmVyU2l6ZSAhPSAwVSkKLSAgICB7Ci0gICAgICBNT0RJRllfUkVHKGhmbWFjLT5JbnN0YW5jZS0+WDJCVUZDRkcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgKEZNQUNfWDJCVUZDRkdfWDJfQkFTRSB8IEZNQUNfWDJCVUZDRkdfWDJfQlVGX1NJWkUpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAoKCgoKHVpbnQzMl90KShzQ29uZmlnLT5Db2VmZkJhc2VBZGRyZXNzKSkgPDwgRk1BQ19YMkJVRkNGR19YMl9CQVNFX1BvcykgICAgICYgRk1BQ19YMkJVRkNGR19YMl9CQVNFKSB8IFwKLSAgICAgICAgICAgICAgICAgICgoKCh1aW50MzJfdCkoc0NvbmZpZy0+Q29lZmZCdWZmZXJTaXplKSkgIDw8IEZNQUNfWDJCVUZDRkdfWDJfQlVGX1NJWkVfUG9zKSAmIEZNQUNfWDJCVUZDRkdfWDJfQlVGX1NJWkUpKSk7Ci0gICAgfQorICAgIE1PRElGWV9SRUcoaGZtYWMtPkluc3RhbmNlLT5YMUJVRkNGRywgXAorICAgICAgICAgICAgICAgRk1BQ19YMUJVRkNGR19GVUxMX1dNLCAgICAgXAorICAgICAgICAgICAgICAgKChwQ29uZmlnLT5JbnB1dFRocmVzaG9sZCkgJiBGTUFDX1gxQlVGQ0ZHX0ZVTExfV00pKTsKKyAgfQogCi0gICAgLyogRk1BQ19ZQlVGQ0ZHOiBDb25maWd1cmUgdGhlIG91dHB1dCBidWZmZXIgd2l0aGluIHRoZSBpbnRlcm5hbCBtZW1vcnkgaWYgcmVxdWlyZWQgKi8KLSAgICBpZiAoc0NvbmZpZy0+T3V0cHV0QnVmZmVyU2l6ZSAhPSAwVSkKLSAgICB7Ci0gICAgICBNT0RJRllfUkVHKGhmbWFjLT5JbnN0YW5jZS0+WUJVRkNGRywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgKEZNQUNfWUJVRkNGR19ZX0JBU0UgfCBGTUFDX1lCVUZDRkdfWV9CVUZfU0laRSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAoKCgoKHVpbnQzMl90KShzQ29uZmlnLT5PdXRwdXRCYXNlQWRkcmVzcykpIDw8IEZNQUNfWUJVRkNGR19ZX0JBU0VfUG9zKSAgICAgJiBGTUFDX1lCVUZDRkdfWV9CQVNFKSB8ICAgIFwKLSAgICAgICAgICAgICAgICAgICgoKCh1aW50MzJfdCkoc0NvbmZpZy0+T3V0cHV0QnVmZmVyU2l6ZSkpICA8PCBGTUFDX1lCVUZDRkdfWV9CVUZfU0laRV9Qb3MpICYgRk1BQ19ZQlVGQ0ZHX1lfQlVGX1NJWkUpKSk7Ci0gICAgfQorICAvKiBGTUFDX1gyQlVGQ0ZHOiBDb25maWd1cmUgdGhlIGNvZWZmaWNpZW50IGJ1ZmZlciB3aXRoaW4gdGhlIGludGVybmFsIG1lbW9yeSAqLworICBpZiAocENvbmZpZy0+Q29lZmZCdWZmZXJTaXplICE9IDBVKQorICB7CisgICAgTU9ESUZZX1JFRyhoZm1hYy0+SW5zdGFuY2UtPlgyQlVGQ0ZHLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAoRk1BQ19YMkJVRkNGR19YMl9CQVNFIHwgRk1BQ19YMkJVRkNGR19YMl9CVUZfU0laRSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAoKCgoKHVpbnQzMl90KShwQ29uZmlnLT5Db2VmZkJhc2VBZGRyZXNzKSkgPDwgRk1BQ19YMkJVRkNGR19YMl9CQVNFX1BvcykgICAgICYgRk1BQ19YMkJVRkNGR19YMl9CQVNFKSB8IFwKKyAgICAgICAgICAgICAgICAoKCgodWludDMyX3QpKHBDb25maWctPkNvZWZmQnVmZmVyU2l6ZSkpICA8PCBGTUFDX1gyQlVGQ0ZHX1gyX0JVRl9TSVpFX1BvcykgJiBGTUFDX1gyQlVGQ0ZHX1gyX0JVRl9TSVpFKSkpOworICB9CiAKLSAgICAvKiBGTUFDX1lCVUZDRkc6IENvbmZpZ3VyZSB0aGUgb3V0cHV0IHRocmVzaG9sZCBpZiB2YWxpZCB3aGVuIGNvbXBhcmVkIHRvIHRoZSBjb25maWd1cmVkIFkgc2l6ZSAqLwotICAgIGlmIChzQ29uZmlnLT5PdXRwdXRUaHJlc2hvbGQgIT0gRk1BQ19USFJFU0hPTERfTk9fVkFMVUUpCi0gICAgewotICAgICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlciAqLwotICAgICAgYXNzZXJ0X3BhcmFtKElTX0ZNQUNfVEhSRVNIT0xEX0FQUExJQ0FCTEUoRk1BQ19HRVRfWV9TSVpFKGhmbWFjKSwgc0NvbmZpZy0+T3V0cHV0VGhyZXNob2xkLCBzQ29uZmlnLT5PdXRwdXRBY2Nlc3MpKTsKKyAgLyogRk1BQ19ZQlVGQ0ZHOiBDb25maWd1cmUgdGhlIG91dHB1dCBidWZmZXIgd2l0aGluIHRoZSBpbnRlcm5hbCBtZW1vcnkgaWYgcmVxdWlyZWQgKi8KKyAgaWYgKHBDb25maWctPk91dHB1dEJ1ZmZlclNpemUgIT0gMFUpCisgIHsKKyAgICBNT0RJRllfUkVHKGhmbWFjLT5JbnN0YW5jZS0+WUJVRkNGRywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgIChGTUFDX1lCVUZDRkdfWV9CQVNFIHwgRk1BQ19ZQlVGQ0ZHX1lfQlVGX1NJWkUpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICgoKCgodWludDMyX3QpKHBDb25maWctPk91dHB1dEJhc2VBZGRyZXNzKSkgPDwgRk1BQ19ZQlVGQ0ZHX1lfQkFTRV9Qb3MpICAgICAmIEZNQUNfWUJVRkNGR19ZX0JBU0UpIHwgICAgXAorICAgICAgICAgICAgICAgICgoKCh1aW50MzJfdCkocENvbmZpZy0+T3V0cHV0QnVmZmVyU2l6ZSkpICA8PCBGTUFDX1lCVUZDRkdfWV9CVUZfU0laRV9Qb3MpICYgRk1BQ19ZQlVGQ0ZHX1lfQlVGX1NJWkUpKSk7CisgIH0KIAotICAgICAgTU9ESUZZX1JFRyhoZm1hYy0+SW5zdGFuY2UtPllCVUZDRkcsIFwKLSAgICAgICAgICAgICAgICAgRk1BQ19ZQlVGQ0ZHX0VNUFRZX1dNLCAgICBcCi0gICAgICAgICAgICAgICAgICgoc0NvbmZpZy0+T3V0cHV0VGhyZXNob2xkKSAmIEZNQUNfWUJVRkNGR19FTVBUWV9XTSkpOwotICAgIH0KKyAgLyogRk1BQ19ZQlVGQ0ZHOiBDb25maWd1cmUgdGhlIG91dHB1dCB0aHJlc2hvbGQgaWYgdmFsaWQgd2hlbiBjb21wYXJlZCB0byB0aGUgY29uZmlndXJlZCBZIHNpemUgKi8KKyAgaWYgKHBDb25maWctPk91dHB1dFRocmVzaG9sZCAhPSBGTUFDX1RIUkVTSE9MRF9OT19WQUxVRSkKKyAgeworICAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXIgKi8KKyAgICBhc3NlcnRfcGFyYW0oSVNfRk1BQ19USFJFU0hPTERfQVBQTElDQUJMRShGTUFDX0dFVF9ZX1NJWkUoaGZtYWMpLCBwQ29uZmlnLT5PdXRwdXRUaHJlc2hvbGQsIHBDb25maWctPk91dHB1dEFjY2VzcykpOwogCi0gICAgLyogQ1I6IENvbmZpZ3VyZSB0aGUgY2xpcCBmZWF0dXJlICovCi0gICAgdG1wY3IgPSBzQ29uZmlnLT5DbGlwICYgRk1BQ19DUl9DTElQRU47CisgICAgTU9ESUZZX1JFRyhoZm1hYy0+SW5zdGFuY2UtPllCVUZDRkcsIFwKKyAgICAgICAgICAgICAgIEZNQUNfWUJVRkNGR19FTVBUWV9XTSwgICAgXAorICAgICAgICAgICAgICAgKChwQ29uZmlnLT5PdXRwdXRUaHJlc2hvbGQpICYgRk1BQ19ZQlVGQ0ZHX0VNUFRZX1dNKSk7CisgIH0KIAotICAgIC8qIENSOiBJZiBJVCBvciBETUEgd2lsbCBiZSB1c2VkLCBlbmFibGUgZXJyb3IgaW50ZXJydXB0cy4KLSAgICAgICogQmVpbmcgbW9yZSBhIGRlYnVnZ2luZyBmZWF0dXJlLCBGTUFDX0NSX1NBVElFTiBpc24ndCBlbmFibGVkIGJ5IGRlZmF1bHQuICovCi0gICAgaWYgKChzQ29uZmlnLT5JbnB1dEFjY2VzcyAgPT0gRk1BQ19CVUZGRVJfQUNDRVNTX0RNQSkgfHwgKHNDb25maWctPklucHV0QWNjZXNzICA9PSBGTUFDX0JVRkZFUl9BQ0NFU1NfSVQpIHx8Ci0gICAgICAgIChzQ29uZmlnLT5PdXRwdXRBY2Nlc3MgPT0gRk1BQ19CVUZGRVJfQUNDRVNTX0RNQSkgfHwgKHNDb25maWctPk91dHB1dEFjY2VzcyA9PSBGTUFDX0JVRkZFUl9BQ0NFU1NfSVQpKQotICAgIHsKLSAgICAgIHRtcGNyIHw9IEZNQUNfSVRfVU5GTElFTiB8IEZNQUNfSVRfT1ZGTElFTjsKLSAgICB9CisgIC8qIEZNQUNfQ1I6IENvbmZpZ3VyZSB0aGUgY2xpcCBmZWF0dXJlICovCisgIHRtcGNyID0gcENvbmZpZy0+Q2xpcCAmIEZNQUNfQ1JfQ0xJUEVOOwogCi0gICAgLyogQ1I6IHdyaXRlIHRoZSB2YWx1ZSAqLwotICAgIFdSSVRFX1JFRyhoZm1hYy0+SW5zdGFuY2UtPkNSLCB0bXBjcik7CisgIC8qIEZNQUNfQ1I6IElmIElUIG9yIERNQSB3aWxsIGJlIHVzZWQsIGVuYWJsZSBlcnJvciBpbnRlcnJ1cHRzLgorICAgICogQmVpbmcgbW9yZSBhIGRlYnVnZ2luZyBmZWF0dXJlLCBGTUFDX0NSX1NBVElFTiBpc24ndCBlbmFibGVkIGJ5IGRlZmF1bHQuICovCisgIGlmICgocENvbmZpZy0+SW5wdXRBY2Nlc3MgID09IEZNQUNfQlVGRkVSX0FDQ0VTU19ETUEpIHx8IChwQ29uZmlnLT5JbnB1dEFjY2VzcyAgPT0gRk1BQ19CVUZGRVJfQUNDRVNTX0lUKSB8fAorICAgICAgKHBDb25maWctPk91dHB1dEFjY2VzcyA9PSBGTUFDX0JVRkZFUl9BQ0NFU1NfRE1BKSB8fCAocENvbmZpZy0+T3V0cHV0QWNjZXNzID09IEZNQUNfQlVGRkVSX0FDQ0VTU19JVCkpCisgIHsKKyAgICB0bXBjciB8PSBGTUFDX0lUX1VORkxJRU4gfCBGTUFDX0lUX09WRkxJRU47CisgIH0KIAotICAgIC8qIFNhdmUgdGhlIGlucHV0L291dHB1dCBhY2Nlc3NlcyBpbiBvcmRlciB0byBjb25maWd1cmUgUklFTiwgV0lFTiwgRE1BUkVOIGFuZCBETUFXRU4gZHVyaW5nIGZpbHRlciBzdGFydCAqLwotICAgIGhmbWFjLT5JbnB1dEFjY2VzcyA9IHNDb25maWctPklucHV0QWNjZXNzOwotICAgIGhmbWFjLT5PdXRwdXRBY2Nlc3MgPSBzQ29uZmlnLT5PdXRwdXRBY2Nlc3M7CisgIC8qIEZNQUNfQ1I6IHdyaXRlIHRoZSB2YWx1ZSAqLworICBXUklURV9SRUcoaGZtYWMtPkluc3RhbmNlLT5DUiwgdG1wY3IpOwogCi0gICAgLyogQ2hlY2sgd2hldGhlciB0aGUgY29uZmlndXJlZCBYMiBpcyBiaWcgZW5vdWdoIGZvciB0aGUgZmlsdGVyICovCisgIC8qIFNhdmUgdGhlIGlucHV0L291dHB1dCBhY2Nlc3NlcyBpbiBvcmRlciB0byBjb25maWd1cmUgUklFTiwgV0lFTiwgRE1BUkVOIGFuZCBETUFXRU4gZHVyaW5nIGZpbHRlciBzdGFydCAqLworICBoZm1hYy0+SW5wdXRBY2Nlc3MgPSBwQ29uZmlnLT5JbnB1dEFjY2VzczsKKyAgaGZtYWMtPk91dHB1dEFjY2VzcyA9IHBDb25maWctPk91dHB1dEFjY2VzczsKKworICAvKiBDaGVjayB3aGV0aGVyIHRoZSBjb25maWd1cmVkIFgyIGlzIGJpZyBlbm91Z2ggZm9yIHRoZSBmaWx0ZXIgKi8KICNpZiBkZWZpbmVkKFVTRV9GVUxMX0FTU0VSVCkKLSAgICB4MnNpemUgPSBGTUFDX0dFVF9YMl9TSVpFKGhmbWFjKTsKKyAgeDJzaXplID0gRk1BQ19HRVRfWDJfU0laRShoZm1hYyk7CiAjZW5kaWYgLyogVVNFX0ZVTExfQVNTRVJUICovCi0gICAgYXNzZXJ0X3BhcmFtKCgoc0NvbmZpZy0+RmlsdGVyID09IEZNQUNfRlVOQ19DT05WT19GSVIpICYmICh4MnNpemUgPj0gc0NvbmZpZy0+UCkpIHx8IFwKLSAgICAgICAgICAgICAgICAgKChzQ29uZmlnLT5GaWx0ZXIgPT0gRk1BQ19GVU5DX0lJUl9ESVJFQ1RfRk9STV8xKSAmJiAoeDJzaXplID49ICgodWludDMyX3Qpc0NvbmZpZy0+UCArICh1aW50MzJfdClzQ29uZmlnLT5RKSkpKTsKKyAgYXNzZXJ0X3BhcmFtKCgocENvbmZpZy0+RmlsdGVyID09IEZNQUNfRlVOQ19DT05WT19GSVIpICYmICh4MnNpemUgPj0gcENvbmZpZy0+UCkpIHx8IFwKKyAgICAgICAgICAgICAgICgocENvbmZpZy0+RmlsdGVyID09IEZNQUNfRlVOQ19JSVJfRElSRUNUX0ZPUk1fMSkgJiYgKHgyc2l6ZSA+PSAoKHVpbnQzMl90KXBDb25maWctPlAgKyAodWludDMyX3QpcENvbmZpZy0+USkpKSk7CiAKLSAgICAvKiBCdWlsZCB0aGUgUEFSQU0gdmFsdWUgdGhhdCB3aWxsIGJlIHVzZWQgd2hlbiBzdGFydGluZyB0aGUgZmlsdGVyICovCi0gICAgaGZtYWMtPkZpbHRlclBhcmFtID0gKEZNQUNfUEFSQU1fU1RBUlQgfCBzQ29uZmlnLT5GaWx0ZXIgfCAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICgoKCh1aW50MzJfdCkoc0NvbmZpZy0+UCkpIDw8IEZNQUNfUEFSQU1fUF9Qb3MpICYgRk1BQ19QQVJBTV9QKSB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoKHVpbnQzMl90KShzQ29uZmlnLT5RKSkgPDwgRk1BQ19QQVJBTV9RX1BvcykgJiBGTUFDX1BBUkFNX1EpIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAoKCgodWludDMyX3QpKHNDb25maWctPlIpKSA8PCBGTUFDX1BBUkFNX1JfUG9zKSAmIEZNQUNfUEFSQU1fUikpOworICAvKiBCdWlsZCB0aGUgUEFSQU0gdmFsdWUgdGhhdCB3aWxsIGJlIHVzZWQgd2hlbiBzdGFydGluZyB0aGUgZmlsdGVyICovCisgIGhmbWFjLT5GaWx0ZXJQYXJhbSA9IChGTUFDX1BBUkFNX1NUQVJUIHwgcENvbmZpZy0+RmlsdGVyIHwgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgKCgoKHVpbnQzMl90KShwQ29uZmlnLT5QKSkgPDwgRk1BQ19QQVJBTV9QX1BvcykgJiBGTUFDX1BBUkFNX1ApIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgKCgoKHVpbnQzMl90KShwQ29uZmlnLT5RKSkgPDwgRk1BQ19QQVJBTV9RX1BvcykgJiBGTUFDX1BBUkFNX1EpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgKCgoKHVpbnQzMl90KShwQ29uZmlnLT5SKSkgPDwgRk1BQ19QQVJBTV9SX1BvcykgJiBGTUFDX1BBUkFNX1IpKTsKIAotICAgIC8qIEluaXRpYWxpemUgdGhlIGNvZWZmaWNpZW50IGJ1ZmZlciBpZiByZXF1aXJlZCAocENvZWZmQSBmb3IgRklSIG9ubHkpICovCi0gICAgaWYgKChzQ29uZmlnLT5wQ29lZmZCICE9IE5VTEwpICYmIChzQ29uZmlnLT5Db2VmZkJTaXplICE9IDBVKSkKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY29lZmZpY2llbnQgYnVmZmVyIGlmIHJlcXVpcmVkIChwQ29lZmZBIGZvciBGSVIgb25seSkgKi8KKyAgaWYgKChwQ29uZmlnLT5wQ29lZmZCICE9IE5VTEwpICYmIChwQ29uZmlnLT5Db2VmZkJTaXplICE9IDBVKSkKKyAgeworICAgIC8qIEZJUi9JSVI6IFRoZSBwcm92aWRlZCBjb2VmZmljaWVudHMgc2hvdWxkIG1hdGNoIFgyIHNpemUgKi8KKyAgICBhc3NlcnRfcGFyYW0oKCh1aW50MzJfdClwQ29uZmlnLT5Db2VmZkFTaXplICsgKHVpbnQzMl90KXBDb25maWctPkNvZWZmQlNpemUpIDw9IHgyc2l6ZSk7CisgICAgLyogRklSL0lJUjogVGhlIHNpemUgb2YgcENvZWZmQiBzaG91bGQgbWF0Y2ggdGhlIHBhcmFtZXRlciBQICovCisgICAgYXNzZXJ0X3BhcmFtKHBDb25maWctPkNvZWZmQlNpemUgPj0gcENvbmZpZy0+UCk7CisgICAgLyogcENvZWZmQSBzaG91bGQgYmUgcHJvdmlkZWQgZm9yIElJUiBidXQgbm90IGZvciBGSVIgKi8KKyAgICAvKiBJSVIgOiBpZiBwQ29lZmZCIGlzIHByb3ZpZGVkLCBwQ29lZmZBIHNob3VsZCBhbHNvIGJlIHRoZXJlICovCisgICAgLyogSUlSOiBUaGUgc2l6ZSBvZiBwQ29lZmZBIHNob3VsZCBtYXRjaCB0aGUgcGFyYW1ldGVyIFEgKi8KKyAgICBhc3NlcnRfcGFyYW0oKChwQ29uZmlnLT5GaWx0ZXIgPT0gRk1BQ19GVU5DX0NPTlZPX0ZJUikgJiYKKyAgICAgICAgICAgICAgICAgIChwQ29uZmlnLT5wQ29lZmZBID09IE5VTEwpICYmIChwQ29uZmlnLT5Db2VmZkFTaXplID09IDBVKSkgfHwKKyAgICAgICAgICAgICAgICAgKChwQ29uZmlnLT5GaWx0ZXIgPT0gRk1BQ19GVU5DX0lJUl9ESVJFQ1RfRk9STV8xKSAmJgorICAgICAgICAgICAgICAgICAgKHBDb25maWctPnBDb2VmZkEgIT0gTlVMTCkgJiYgKHBDb25maWctPkNvZWZmQVNpemUgIT0gMFUpICYmCisgICAgICAgICAgICAgICAgICAocENvbmZpZy0+Q29lZmZBU2l6ZSA+PSBwQ29uZmlnLT5RKSkpOworCisgICAgLyogV3JpdGUgbnVtYmVyIG9mIHZhbHVlcyB0byBiZSBsb2FkZWQsIHRoZSBkYXRhIGxvYWQgZnVuY3Rpb24gYW5kIHN0YXJ0IHRoZSBvcGVyYXRpb24gKi8KKyAgICBXUklURV9SRUcoaGZtYWMtPkluc3RhbmNlLT5QQVJBTSwgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAoKCh1aW50MzJfdCkocENvbmZpZy0+Q29lZmZCU2l6ZSkgPDwgRk1BQ19QQVJBTV9QX1BvcykgfCBcCisgICAgICAgICAgICAgICAoKHVpbnQzMl90KShwQ29uZmlnLT5Db2VmZkFTaXplKSA8PCBGTUFDX1BBUkFNX1FfUG9zKSB8IFwKKyAgICAgICAgICAgICAgIEZNQUNfRlVOQ19MT0FEX1gyIHwgRk1BQ19QQVJBTV9TVEFSVCkpOworCisgICAgaWYgKFByZWxvYWRBY2Nlc3MgPT0gUFJFTE9BRF9BQ0NFU1NfUE9MTElORykKICAgICB7Ci0gICAgICAvKiBGSVIvSUlSOiBUaGUgcHJvdmlkZWQgY29lZmZpY2llbnRzIHNob3VsZCBtYXRjaCBYMiBzaXplICovCi0gICAgICBhc3NlcnRfcGFyYW0oKCh1aW50MzJfdClzQ29uZmlnLT5Db2VmZkFTaXplICsgKHVpbnQzMl90KXNDb25maWctPkNvZWZmQlNpemUpIDw9IHgyc2l6ZSk7Ci0gICAgICAvKiBGSVIvSUlSOiBUaGUgc2l6ZSBvZiBwQ29lZmZCIHNob3VsZCBtYXRjaCB0aGUgcGFyYW1ldGVyIFAgKi8KLSAgICAgIGFzc2VydF9wYXJhbShzQ29uZmlnLT5Db2VmZkJTaXplID49IHNDb25maWctPlApOwotICAgICAgLyogcENvZWZmQSBzaG91bGQgYmUgcHJvdmlkZWQgZm9yIElJUiBidXQgbm90IGZvciBGSVIgKi8KLSAgICAgIC8qIElJUiA6IGlmIHBDb2VmZkIgaXMgcHJvdmlkZWQsIHBDb2VmZkEgc2hvdWxkIGFsc28gYmUgdGhlcmUgKi8KLSAgICAgIC8qIElJUjogVGhlIHNpemUgb2YgcENvZWZmQSBzaG91bGQgbWF0Y2ggdGhlIHBhcmFtZXRlciBRICovCi0gICAgICBhc3NlcnRfcGFyYW0oKChzQ29uZmlnLT5GaWx0ZXIgPT0gRk1BQ19GVU5DX0NPTlZPX0ZJUikgJiYKLSAgICAgICAgICAgICAgICAgICAgKHNDb25maWctPnBDb2VmZkEgPT0gTlVMTCkgJiYgKHNDb25maWctPkNvZWZmQVNpemUgPT0gMFUpKSB8fAotICAgICAgICAgICAgICAgICAgICgoc0NvbmZpZy0+RmlsdGVyID09IEZNQUNfRlVOQ19JSVJfRElSRUNUX0ZPUk1fMSkgJiYKLSAgICAgICAgICAgICAgICAgICAgKHNDb25maWctPnBDb2VmZkEgIT0gTlVMTCkgJiYgKHNDb25maWctPkNvZWZmQVNpemUgIT0gMFUpICYmCi0gICAgICAgICAgICAgICAgICAgIChzQ29uZmlnLT5Db2VmZkFTaXplID49IHNDb25maWctPlEpKSk7CisgICAgICAvKiBMb2FkIHRoZSBidWZmZXIgaW50byB0aGUgaW50ZXJuYWwgbWVtb3J5ICovCisgICAgICBGTUFDX1dyaXRlUHJlbG9hZERhdGFJbmNyZW1lbnRQdHIoaGZtYWMsICYocENvbmZpZy0+cENvZWZmQiksIHBDb25maWctPkNvZWZmQlNpemUpOwogCi0gICAgICAvKiBXcml0ZSBudW1iZXIgb2YgdmFsdWVzIHRvIGJlIGxvYWRlZCwgdGhlIGRhdGEgbG9hZCBmdW5jdGlvbiBhbmQgc3RhcnQgdGhlIG9wZXJhdGlvbiAqLwotICAgICAgV1JJVEVfUkVHKGhmbWFjLT5JbnN0YW5jZS0+UEFSQU0sICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoc0NvbmZpZy0+Q29lZmZCU2l6ZSkgPDwgRk1BQ19QQVJBTV9QX1BvcykgfCBcCi0gICAgICAgICAgICAgICAgICgodWludDMyX3QpKHNDb25maWctPkNvZWZmQVNpemUpIDw8IEZNQUNfUEFSQU1fUV9Qb3MpIHwgXAotICAgICAgICAgICAgICAgICBGTUFDX0ZVTkNfTE9BRF9YMiB8IEZNQUNfUEFSQU1fU1RBUlQpKTsKLQotICAgICAgaWYgKFByZWxvYWRBY2Nlc3MgPT0gUFJFTE9BRF9BQ0NFU1NfUE9MTElORykKKyAgICAgIC8qIExvYWQgcENvZWZmQSBpZiBuZWVkZWQgKi8KKyAgICAgIGlmICgocENvbmZpZy0+cENvZWZmQSAhPSBOVUxMKSAmJiAocENvbmZpZy0+Q29lZmZBU2l6ZSAhPSAwVSkpCiAgICAgICB7CiAgICAgICAgIC8qIExvYWQgdGhlIGJ1ZmZlciBpbnRvIHRoZSBpbnRlcm5hbCBtZW1vcnkgKi8KLSAgICAgICAgRk1BQ19Xcml0ZVByZWxvYWREYXRhSW5jcmVtZW50UHRyKGhmbWFjLCAmKHNDb25maWctPnBDb2VmZkIpLCBzQ29uZmlnLT5Db2VmZkJTaXplKTsKLQotICAgICAgICAvKiBMb2FkIHBDb2VmZkEgaWYgbmVlZGVkICovCi0gICAgICAgIGlmICgoc0NvbmZpZy0+cENvZWZmQSAhPSBOVUxMKSAmJiAoc0NvbmZpZy0+Q29lZmZBU2l6ZSAhPSAwVSkpCi0gICAgICAgIHsKLSAgICAgICAgICAvKiBMb2FkIHRoZSBidWZmZXIgaW50byB0aGUgaW50ZXJuYWwgbWVtb3J5ICovCi0gICAgICAgICAgRk1BQ19Xcml0ZVByZWxvYWREYXRhSW5jcmVtZW50UHRyKGhmbWFjLCAmKHNDb25maWctPnBDb2VmZkEpLCBzQ29uZmlnLT5Db2VmZkFTaXplKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIFdhaXQgZm9yIHRoZSBlbmQgb2YgdGhlIHdyaXRpbmcgKi8KLSAgICAgICAgaWYgKEZNQUNfV2FpdE9uU3RhcnRVbnRpbFRpbWVvdXQoaGZtYWMsIHRpY2tzdGFydCwgSEFMX0ZNQUNfVElNRU9VVF9WQUxVRSkgIT0gSEFMX09LKQotICAgICAgICB7Ci0gICAgICAgICAgaGZtYWMtPlN0YXRlID0gSEFMX0ZNQUNfU1RBVEVfVElNRU9VVDsKLSAgICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBDaGFuZ2UgdGhlIEZNQUMgc3RhdGUgKi8KLSAgICAgICAgaGZtYWMtPlN0YXRlID0gSEFMX0ZNQUNfU1RBVEVfUkVBRFk7CisgICAgICAgIEZNQUNfV3JpdGVQcmVsb2FkRGF0YUluY3JlbWVudFB0cihoZm1hYywgJihwQ29uZmlnLT5wQ29lZmZBKSwgcENvbmZpZy0+Q29lZmZBU2l6ZSk7CiAgICAgICB9Ci0gICAgICBlbHNlCisKKyAgICAgIC8qIFdhaXQgZm9yIHRoZSBlbmQgb2YgdGhlIHdyaXRpbmcgKi8KKyAgICAgIGlmIChGTUFDX1dhaXRPblN0YXJ0VW50aWxUaW1lb3V0KGhmbWFjLCB0aWNrc3RhcnQsIEhBTF9GTUFDX1RJTUVPVVRfVkFMVUUpICE9IEhBTF9PSykKICAgICAgIHsKLSAgICAgICAgaGZtYWMtPnBJbnB1dCA9IHNDb25maWctPnBDb2VmZkE7Ci0gICAgICAgIGhmbWFjLT5JbnB1dEN1cnJlbnRTaXplID0gc0NvbmZpZy0+Q29lZmZBU2l6ZTsKLQotICAgICAgICAvKiBTZXQgdGhlIEZNQUMgRE1BIHRyYW5zZmVyIGNvbXBsZXRlIGNhbGxiYWNrICovCi0gICAgICAgIGhmbWFjLT5oZG1hUHJlbG9hZC0+WGZlckhhbGZDcGx0Q2FsbGJhY2sgPSBOVUxMOwotICAgICAgICBoZm1hYy0+aGRtYVByZWxvYWQtPlhmZXJDcGx0Q2FsbGJhY2sgPSBGTUFDX0RNQUZpbHRlckNvbmZpZzsKLSAgICAgICAgLyogU2V0IHRoZSBETUEgZXJyb3IgY2FsbGJhY2sgKi8KLSAgICAgICAgaGZtYWMtPmhkbWFQcmVsb2FkLT5YZmVyRXJyb3JDYWxsYmFjayA9IEZNQUNfRE1BRXJyb3I7Ci0KLSAgICAgICAgLyogRW5hYmxlIHRoZSBETUEgc3RyZWFtIG1hbmFnaW5nIEZNQUMgcHJlbG9hZCBkYXRhIHdyaXRlICovCi0gICAgICAgIHJldHVybiAoSEFMX0RNQV9TdGFydF9JVChoZm1hYy0+aGRtYVByZWxvYWQsICh1aW50MzJfdClzQ29uZmlnLT5wQ29lZmZCLCAodWludDMyX3QpJmhmbWFjLT5JbnN0YW5jZS0+V0RBVEEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzQ29uZmlnLT5Db2VmZkJTaXplKSk7CisgICAgICAgIGhmbWFjLT5FcnJvckNvZGUgfD0gSEFMX0ZNQUNfRVJST1JfVElNRU9VVDsKKyAgICAgICAgaGZtYWMtPlN0YXRlID0gSEFMX0ZNQUNfU1RBVEVfVElNRU9VVDsKKyAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOwogICAgICAgfQorCisgICAgICAvKiBDaGFuZ2UgdGhlIEZNQUMgc3RhdGUgKi8KKyAgICAgIGhmbWFjLT5TdGF0ZSA9IEhBTF9GTUFDX1NUQVRFX1JFQURZOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgLyogQ2hhbmdlIHRoZSBGTUFDIHN0YXRlICovCi0gICAgICBoZm1hYy0+U3RhdGUgPSBIQUxfRk1BQ19TVEFURV9SRUFEWTsKKyAgICAgIGhmbWFjLT5wSW5wdXQgPSBwQ29uZmlnLT5wQ29lZmZBOworICAgICAgaGZtYWMtPklucHV0Q3VycmVudFNpemUgPSBwQ29uZmlnLT5Db2VmZkFTaXplOworCisgICAgICAvKiBTZXQgdGhlIEZNQUMgRE1BIHRyYW5zZmVyIGNvbXBsZXRlIGNhbGxiYWNrICovCisgICAgICBoZm1hYy0+aGRtYVByZWxvYWQtPlhmZXJIYWxmQ3BsdENhbGxiYWNrID0gTlVMTDsKKyAgICAgIGhmbWFjLT5oZG1hUHJlbG9hZC0+WGZlckNwbHRDYWxsYmFjayA9IEZNQUNfRE1BRmlsdGVyQ29uZmlnOworICAgICAgLyogU2V0IHRoZSBETUEgZXJyb3IgY2FsbGJhY2sgKi8KKyAgICAgIGhmbWFjLT5oZG1hUHJlbG9hZC0+WGZlckVycm9yQ2FsbGJhY2sgPSBGTUFDX0RNQUVycm9yOworCisgICAgICAvKiBFbmFibGUgdGhlIERNQSBzdHJlYW0gbWFuYWdpbmcgRk1BQyBwcmVsb2FkIGRhdGEgd3JpdGUgKi8KKyAgICAgIHJldHVybiAoSEFMX0RNQV9TdGFydF9JVChoZm1hYy0+aGRtYVByZWxvYWQsICh1aW50MzJfdClwQ29uZmlnLT5wQ29lZmZCLCAodWludDMyX3QpJmhmbWFjLT5JbnN0YW5jZS0+V0RBVEEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcENvbmZpZy0+Q29lZmZCU2l6ZSkpOwogICAgIH0KICAgfQogICBlbHNlCiAgIHsKLSAgICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCi0gICAgcmV0dXJuIEhBTF9CVVNZOworICAgIC8qIENoYW5nZSB0aGUgRk1BQyBzdGF0ZSAqLworICAgIGhmbWFjLT5TdGF0ZSA9IEhBTF9GTUFDX1NUQVRFX1JFQURZOwogICB9CiAKLSAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwogICByZXR1cm4gSEFMX09LOwogfQogCiAvKioKICAgKiBAYnJpZWYgIFByZWxvYWQgdGhlIGlucHV0IChGSVIsIElJUikgYW5kIG91dHB1dCBkYXRhIChJSVIpIG9mIHRoZSBGTUFDIGZpbHRlci4KLSAgKiAgICAgICAgIFRoZXkgd2lsbCBiZSB1c2VkIGJ5IEZNQUMgYXMgc29vbiBhcyBIQUxfRk1BQ19GaWx0ZXJTdGFydCBpcyBjYWxsZWQuCisgICogQG5vdGUgICBUaGUgc2V0KHMpIG9mIGRhdGEgd2lsbCBiZSB1c2VkIGJ5IEZNQUMgYXMgc29vbiBhcyBAcmVmIEhBTF9GTUFDX0ZpbHRlclN0YXJ0IGlzIGNhbGxlZC4KICAgKiBAcGFyYW0gIGhmbWFjIHBvaW50ZXIgdG8gYSBGTUFDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKICAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBGTUFDIG1vZHVsZS4KICAgKiBAcGFyYW0gIHBJbnB1dCBQcmVsb2FkaW5nIG9mIHRoZSBmaXJzdCBlbGVtZW50cyBvZiB0aGUgaW5wdXQgYnVmZmVyIChYMSkuCkBAIC0xODIzLDI0ICsxODQ5LDI2IEBACiAgICogICAgICAgICBJZiBub3QgbmVlZGVkLCBpdCBzaG91bGQgYmUgc2V0IHRvIE5VTEwuCiAgICogQHBhcmFtICBPdXRwdXRTaXplIFNpemUgb2YgdGhlIG91dHB1dCB2ZWN0b3IuCiAgICogICAgICAgICBBcyBwT3V0cHV0IGlzIHVzZWQgZm9yIHByZWxvYWRpbmcgZGF0YSwgaXQgY2Fubm90IGJlIGJpZ2dlciB0aGFuIHRoZSBvdXRwdXQgbWVtb3J5IGFyZWEuCi0gICogQG5vdGUgICBUaGUgaW5wdXQgYW5kIHRoZSBvdXRwdXQgYnVmZmVycyBjYW4gYmUgZmlsbGVkIGJ5IGNhbGxpbmcgc2V2ZXJhbCB0aW1lcyBIQUxfRk1BQ19GaWx0ZXJQcmVsb2FkCisgICogQHBhcmFtICBQcmVsb2FkQWNjZXNzIGFjY2VzcyBtb2RlIHVzZWQgZm9yIHRoZSBwcmVsb2FkIChwb2xsaW5nIG9yIERNQSkuCisgICogQG5vdGUgICBUaGUgaW5wdXQgYW5kIHRoZSBvdXRwdXQgYnVmZmVycyBjYW4gYmUgZmlsbGVkIGJ5IGNhbGxpbmcgc2V2ZXJhbCB0aW1lcyBAcmVmIEhBTF9GTUFDX0ZpbHRlclByZWxvYWQKICAgKiAgICAgICAgIChlYWNoIGNhbGwgZmlsbGluZyBwYXJ0bHkgdGhlIGJ1ZmZlcnMpLiBJbiBjYXNlIG9mIG92ZXJmbG93ICh0b28gbXVjaCBkYXRhIHByb3ZpZGVkIHRocm91Z2gKICAgKiAgICAgICAgIGFsbCB0aGVzZSBjYWxscyksIGFuIGVycm9yIHdpbGwgYmUgcmV0dXJuZWQuCi0gICogQHJldHZhbCBIQUwgc3RhdHVzCisgICogQHJldHZhbCBIQUxfU3RhdHVzVHlwZURlZiBIQUwgc3RhdHVzCiAgICovCiBzdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgRk1BQ19GaWx0ZXJQcmVsb2FkKEZNQUNfSGFuZGxlVHlwZURlZiAqaGZtYWMsIGludDE2X3QgKnBJbnB1dCwgdWludDhfdCBJbnB1dFNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDE2X3QgKnBPdXRwdXQsIHVpbnQ4X3QgT3V0cHV0U2l6ZSwgdWludDhfdCBQcmVsb2FkQWNjZXNzKQogewogICB1aW50MzJfdCB0aWNrc3RhcnQ7CisgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1czsKIAogICAvKiBDaGVjayB0aGUgU1RBUlQgYml0IHN0YXRlICovCi0gIGlmIChGTUFDX0dFVF9TVEFSVF9CSVQoaGZtYWMpICE9IDBVTCkKKyAgaWYgKEZNQUNfR0VUX1NUQVJUX0JJVChoZm1hYykgIT0gMFUpCiAgIHsKICAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CiAKICAgLyogQ2hlY2sgdGhhdCBhIHZhbGlkIGNvbmZpZ3VyYXRpb24gd2FzIGRvbmUgcHJldmlvdXNseSAqLwotICBpZiAoaGZtYWMtPkZpbHRlclBhcmFtID09IDBVTCkKKyAgaWYgKGhmbWFjLT5GaWx0ZXJQYXJhbSA9PSAwVSkKICAgewogICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KQEAgLTE4NTgsMTIyICsxODg2LDEyNiBAQAogICB9CiAKICAgLyogQ2hlY2sgaGFuZGxlIHN0YXRlIGlzIHJlYWR5ICovCi0gIGlmIChoZm1hYy0+U3RhdGUgPT0gSEFMX0ZNQUNfU1RBVEVfUkVBRFkpCisgIGlmIChoZm1hYy0+U3RhdGUgIT0gSEFMX0ZNQUNfU1RBVEVfUkVBRFkpCiAgIHsKLSAgICAvKiBDaGFuZ2UgdGhlIEZNQUMgc3RhdGUgKi8KLSAgICBoZm1hYy0+U3RhdGUgPSBIQUxfRk1BQ19TVEFURV9CVVNZOworICAgIHJldHVybiBIQUxfQlVTWTsKKyAgfQogCi0gICAgLyogR2V0IHRpY2sgKi8KLSAgICB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOworICAvKiBDaGFuZ2UgdGhlIEZNQUMgc3RhdGUgKi8KKyAgaGZtYWMtPlN0YXRlID0gSEFMX0ZNQUNfU1RBVEVfQlVTWTsKIAotICAgIC8qIFByZWxvYWQgdGhlIGlucHV0IGJ1ZmZlciBpZiByZXF1aXJlZCAqLwotICAgIGlmICgocElucHV0ICE9IE5VTEwpICYmIChJbnB1dFNpemUgIT0gMFUpKQorICAvKiBHZXQgdGljayAqLworICB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOworCisgIC8qIFByZWxvYWQgdGhlIGlucHV0IGJ1ZmZlciBpZiByZXF1aXJlZCAqLworICBpZiAoKHBJbnB1dCAhPSBOVUxMKSAmJiAoSW5wdXRTaXplICE9IDBVKSkKKyAgeworICAgIC8qIFdyaXRlIG51bWJlciBvZiB2YWx1ZXMgdG8gYmUgbG9hZGVkLCB0aGUgZGF0YSBsb2FkIGZ1bmN0aW9uIGFuZCBzdGFydCB0aGUgb3BlcmF0aW9uICovCisgICAgV1JJVEVfUkVHKGhmbWFjLT5JbnN0YW5jZS0+UEFSQU0sIFwKKyAgICAgICAgICAgICAgKCgodWludDMyX3QpSW5wdXRTaXplIDw8IEZNQUNfUEFSQU1fUF9Qb3MpIHwgRk1BQ19GVU5DX0xPQURfWDEgfCBGTUFDX1BBUkFNX1NUQVJUKSk7CisKKyAgICBpZiAoUHJlbG9hZEFjY2VzcyA9PSBQUkVMT0FEX0FDQ0VTU19QT0xMSU5HKQogICAgIHsKLSAgICAgIC8qIFdyaXRlIG51bWJlciBvZiB2YWx1ZXMgdG8gYmUgbG9hZGVkLCB0aGUgZGF0YSBsb2FkIGZ1bmN0aW9uIGFuZCBzdGFydCB0aGUgb3BlcmF0aW9uICovCi0gICAgICBXUklURV9SRUcoaGZtYWMtPkluc3RhbmNlLT5QQVJBTSwgXAotICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KUlucHV0U2l6ZSA8PCBGTUFDX1BBUkFNX1BfUG9zKSB8IEZNQUNfRlVOQ19MT0FEX1gxIHwgRk1BQ19QQVJBTV9TVEFSVCkpOworICAgICAgLyogTG9hZCB0aGUgYnVmZmVyIGludG8gdGhlIGludGVybmFsIG1lbW9yeSAqLworICAgICAgRk1BQ19Xcml0ZVByZWxvYWREYXRhSW5jcmVtZW50UHRyKGhmbWFjLCAmcElucHV0LCBJbnB1dFNpemUpOwogCi0gICAgICBpZiAoUHJlbG9hZEFjY2VzcyA9PSBQUkVMT0FEX0FDQ0VTU19QT0xMSU5HKQorICAgICAgLyogV2FpdCBmb3IgdGhlIGVuZCBvZiB0aGUgd3JpdGluZyAqLworICAgICAgaWYgKEZNQUNfV2FpdE9uU3RhcnRVbnRpbFRpbWVvdXQoaGZtYWMsIHRpY2tzdGFydCwgSEFMX0ZNQUNfVElNRU9VVF9WQUxVRSkgIT0gSEFMX09LKQogICAgICAgewotICAgICAgICAvKiBMb2FkIHRoZSBidWZmZXIgaW50byB0aGUgaW50ZXJuYWwgbWVtb3J5ICovCi0gICAgICAgIEZNQUNfV3JpdGVQcmVsb2FkRGF0YUluY3JlbWVudFB0cihoZm1hYywgJnBJbnB1dCwgSW5wdXRTaXplKTsKLQotICAgICAgICAvKiBXYWl0IGZvciB0aGUgZW5kIG9mIHRoZSB3cml0aW5nICovCi0gICAgICAgIGlmIChGTUFDX1dhaXRPblN0YXJ0VW50aWxUaW1lb3V0KGhmbWFjLCB0aWNrc3RhcnQsIEhBTF9GTUFDX1RJTUVPVVRfVkFMVUUpICE9IEhBTF9PSykKLSAgICAgICAgewotICAgICAgICAgIGhmbWFjLT5TdGF0ZSA9IEhBTF9GTUFDX1NUQVRFX1RJTUVPVVQ7Ci0gICAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOwotICAgICAgICB9CisgICAgICAgIGhmbWFjLT5FcnJvckNvZGUgfD0gSEFMX0ZNQUNfRVJST1JfVElNRU9VVDsKKyAgICAgICAgaGZtYWMtPlN0YXRlID0gSEFMX0ZNQUNfU1RBVEVfVElNRU9VVDsKKyAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOwogICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBoZm1hYy0+cElucHV0ID0gcE91dHB1dDsKLSAgICAgICAgaGZtYWMtPklucHV0Q3VycmVudFNpemUgPSBPdXRwdXRTaXplOwotCi0gICAgICAgIC8qIFNldCB0aGUgRk1BQyBETUEgdHJhbnNmZXIgY29tcGxldGUgY2FsbGJhY2sgKi8KLSAgICAgICAgaGZtYWMtPmhkbWFQcmVsb2FkLT5YZmVySGFsZkNwbHRDYWxsYmFjayA9IE5VTEw7Ci0gICAgICAgIGhmbWFjLT5oZG1hUHJlbG9hZC0+WGZlckNwbHRDYWxsYmFjayA9IEZNQUNfRE1BRmlsdGVyUHJlbG9hZDsKLSAgICAgICAgLyogU2V0IHRoZSBETUEgZXJyb3IgY2FsbGJhY2sgKi8KLSAgICAgICAgaGZtYWMtPmhkbWFQcmVsb2FkLT5YZmVyRXJyb3JDYWxsYmFjayA9IEZNQUNfRE1BRXJyb3I7Ci0KLSAgICAgICAgLyogRW5hYmxlIHRoZSBETUEgc3RyZWFtIG1hbmFnaW5nIEZNQUMgcHJlbG9hZCBkYXRhIHdyaXRlICovCi0gICAgICAgIHJldHVybiAoSEFMX0RNQV9TdGFydF9JVChoZm1hYy0+aGRtYVByZWxvYWQsICh1aW50MzJfdClwSW5wdXQsICh1aW50MzJfdCkmaGZtYWMtPkluc3RhbmNlLT5XREFUQSwgSW5wdXRTaXplKSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLyogUHJlbG9hZCB0aGUgb3V0cHV0IGJ1ZmZlciBpZiByZXF1aXJlZCAqLwotICAgIGlmICgocE91dHB1dCAhPSBOVUxMKSAmJiAoT3V0cHV0U2l6ZSAhPSAwVSkpCi0gICAgewotICAgICAgLyogV3JpdGUgbnVtYmVyIG9mIHZhbHVlcyB0byBiZSBsb2FkZWQsIHRoZSBkYXRhIGxvYWQgZnVuY3Rpb24gYW5kIHN0YXJ0IHRoZSBvcGVyYXRpb24gKi8KLSAgICAgIFdSSVRFX1JFRyhoZm1hYy0+SW5zdGFuY2UtPlBBUkFNLCBcCi0gICAgICAgICAgICAgICAgKCgodWludDMyX3QpT3V0cHV0U2l6ZSA8PCBGTUFDX1BBUkFNX1BfUG9zKSB8IEZNQUNfRlVOQ19MT0FEX1kgfCBGTUFDX1BBUkFNX1NUQVJUKSk7Ci0KLSAgICAgIGlmIChQcmVsb2FkQWNjZXNzID09IFBSRUxPQURfQUNDRVNTX1BPTExJTkcpCi0gICAgICB7Ci0gICAgICAgIC8qIExvYWQgdGhlIGJ1ZmZlciBpbnRvIHRoZSBpbnRlcm5hbCBtZW1vcnkgKi8KLSAgICAgICAgRk1BQ19Xcml0ZVByZWxvYWREYXRhSW5jcmVtZW50UHRyKGhmbWFjLCAmcE91dHB1dCwgT3V0cHV0U2l6ZSk7Ci0KLSAgICAgICAgLyogV2FpdCBmb3IgdGhlIGVuZCBvZiB0aGUgd3JpdGluZyAqLwotICAgICAgICBpZiAoRk1BQ19XYWl0T25TdGFydFVudGlsVGltZW91dChoZm1hYywgdGlja3N0YXJ0LCBIQUxfRk1BQ19USU1FT1VUX1ZBTFVFKSAhPSBIQUxfT0spCi0gICAgICAgIHsKLSAgICAgICAgICBoZm1hYy0+U3RhdGUgPSBIQUxfRk1BQ19TVEFURV9USU1FT1VUOwotICAgICAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBoZm1hYy0+cElucHV0ID0gTlVMTDsKLSAgICAgICAgaGZtYWMtPklucHV0Q3VycmVudFNpemUgPSAwVTsKLQotICAgICAgICAvKiBTZXQgdGhlIEZNQUMgRE1BIHRyYW5zZmVyIGNvbXBsZXRlIGNhbGxiYWNrICovCi0gICAgICAgIGhmbWFjLT5oZG1hUHJlbG9hZC0+WGZlckhhbGZDcGx0Q2FsbGJhY2sgPSBOVUxMOwotICAgICAgICBoZm1hYy0+aGRtYVByZWxvYWQtPlhmZXJDcGx0Q2FsbGJhY2sgPSBGTUFDX0RNQUZpbHRlclByZWxvYWQ7Ci0gICAgICAgIC8qIFNldCB0aGUgRE1BIGVycm9yIGNhbGxiYWNrICovCi0gICAgICAgIGhmbWFjLT5oZG1hUHJlbG9hZC0+WGZlckVycm9yQ2FsbGJhY2sgPSBGTUFDX0RNQUVycm9yOwotCi0gICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIHN0cmVhbSBtYW5hZ2luZyBGTUFDIHByZWxvYWQgZGF0YSB3cml0ZSAqLwotICAgICAgICByZXR1cm4gKEhBTF9ETUFfU3RhcnRfSVQoaGZtYWMtPmhkbWFQcmVsb2FkLCAodWludDMyX3QpcE91dHB1dCwgKHVpbnQzMl90KSZoZm1hYy0+SW5zdGFuY2UtPldEQVRBLCBPdXRwdXRTaXplKSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLyogVXBkYXRlIHRoZSBlcnJvciBjb2RlcyAqLwotICAgIGlmIChfX0hBTF9GTUFDX0dFVF9GTEFHKGhmbWFjLCBGTUFDX0ZMQUdfT1ZGTCkpCi0gICAgewotICAgICAgaGZtYWMtPkVycm9yQ29kZSB8PSBIQUxfRk1BQ19FUlJPUl9PVkZMOwotICAgIH0KLSAgICBpZiAoX19IQUxfRk1BQ19HRVRfRkxBRyhoZm1hYywgRk1BQ19GTEFHX1VORkwpKQotICAgIHsKLSAgICAgIGhmbWFjLT5FcnJvckNvZGUgfD0gSEFMX0ZNQUNfRVJST1JfVU5GTDsKLSAgICB9Ci0KLSAgICAvKiBDaGFuZ2UgdGhlIEZNQUMgc3RhdGUgKi8KLSAgICBoZm1hYy0+U3RhdGUgPSBIQUxfRk1BQ19TVEFURV9SRUFEWTsKLQotICAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KLSAgICBpZiAoaGZtYWMtPkVycm9yQ29kZSA9PSBIQUxfRk1BQ19FUlJPUl9OT05FKQotICAgIHsKLSAgICAgIHJldHVybiBIQUxfT0s7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgICAgaGZtYWMtPnBJbnB1dCA9IHBPdXRwdXQ7CisgICAgICBoZm1hYy0+SW5wdXRDdXJyZW50U2l6ZSA9IE91dHB1dFNpemU7CisKKyAgICAgIC8qIFNldCB0aGUgRk1BQyBETUEgdHJhbnNmZXIgY29tcGxldGUgY2FsbGJhY2sgKi8KKyAgICAgIGhmbWFjLT5oZG1hUHJlbG9hZC0+WGZlckhhbGZDcGx0Q2FsbGJhY2sgPSBOVUxMOworICAgICAgaGZtYWMtPmhkbWFQcmVsb2FkLT5YZmVyQ3BsdENhbGxiYWNrID0gRk1BQ19ETUFGaWx0ZXJQcmVsb2FkOworICAgICAgLyogU2V0IHRoZSBETUEgZXJyb3IgY2FsbGJhY2sgKi8KKyAgICAgIGhmbWFjLT5oZG1hUHJlbG9hZC0+WGZlckVycm9yQ2FsbGJhY2sgPSBGTUFDX0RNQUVycm9yOworCisgICAgICAvKiBFbmFibGUgdGhlIERNQSBzdHJlYW0gbWFuYWdpbmcgRk1BQyBwcmVsb2FkIGRhdGEgd3JpdGUgKi8KKyAgICAgIHJldHVybiAoSEFMX0RNQV9TdGFydF9JVChoZm1hYy0+aGRtYVByZWxvYWQsICh1aW50MzJfdClwSW5wdXQsICh1aW50MzJfdCkmaGZtYWMtPkluc3RhbmNlLT5XREFUQSwgSW5wdXRTaXplKSk7CiAgICAgfQogICB9CisKKyAgLyogUHJlbG9hZCB0aGUgb3V0cHV0IGJ1ZmZlciBpZiByZXF1aXJlZCAqLworICBpZiAoKHBPdXRwdXQgIT0gTlVMTCkgJiYgKE91dHB1dFNpemUgIT0gMFUpKQorICB7CisgICAgLyogV3JpdGUgbnVtYmVyIG9mIHZhbHVlcyB0byBiZSBsb2FkZWQsIHRoZSBkYXRhIGxvYWQgZnVuY3Rpb24gYW5kIHN0YXJ0IHRoZSBvcGVyYXRpb24gKi8KKyAgICBXUklURV9SRUcoaGZtYWMtPkluc3RhbmNlLT5QQVJBTSwgXAorICAgICAgICAgICAgICAoKCh1aW50MzJfdClPdXRwdXRTaXplIDw8IEZNQUNfUEFSQU1fUF9Qb3MpIHwgRk1BQ19GVU5DX0xPQURfWSB8IEZNQUNfUEFSQU1fU1RBUlQpKTsKKworICAgIGlmIChQcmVsb2FkQWNjZXNzID09IFBSRUxPQURfQUNDRVNTX1BPTExJTkcpCisgICAgeworICAgICAgLyogTG9hZCB0aGUgYnVmZmVyIGludG8gdGhlIGludGVybmFsIG1lbW9yeSAqLworICAgICAgRk1BQ19Xcml0ZVByZWxvYWREYXRhSW5jcmVtZW50UHRyKGhmbWFjLCAmcE91dHB1dCwgT3V0cHV0U2l6ZSk7CisKKyAgICAgIC8qIFdhaXQgZm9yIHRoZSBlbmQgb2YgdGhlIHdyaXRpbmcgKi8KKyAgICAgIGlmIChGTUFDX1dhaXRPblN0YXJ0VW50aWxUaW1lb3V0KGhmbWFjLCB0aWNrc3RhcnQsIEhBTF9GTUFDX1RJTUVPVVRfVkFMVUUpICE9IEhBTF9PSykKKyAgICAgIHsKKyAgICAgICAgaGZtYWMtPkVycm9yQ29kZSB8PSBIQUxfRk1BQ19FUlJPUl9USU1FT1VUOworICAgICAgICBoZm1hYy0+U3RhdGUgPSBIQUxfRk1BQ19TVEFURV9USU1FT1VUOworICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBoZm1hYy0+cElucHV0ID0gTlVMTDsKKyAgICAgIGhmbWFjLT5JbnB1dEN1cnJlbnRTaXplID0gMFU7CisKKyAgICAgIC8qIFNldCB0aGUgRk1BQyBETUEgdHJhbnNmZXIgY29tcGxldGUgY2FsbGJhY2sgKi8KKyAgICAgIGhmbWFjLT5oZG1hUHJlbG9hZC0+WGZlckhhbGZDcGx0Q2FsbGJhY2sgPSBOVUxMOworICAgICAgaGZtYWMtPmhkbWFQcmVsb2FkLT5YZmVyQ3BsdENhbGxiYWNrID0gRk1BQ19ETUFGaWx0ZXJQcmVsb2FkOworICAgICAgLyogU2V0IHRoZSBETUEgZXJyb3IgY2FsbGJhY2sgKi8KKyAgICAgIGhmbWFjLT5oZG1hUHJlbG9hZC0+WGZlckVycm9yQ2FsbGJhY2sgPSBGTUFDX0RNQUVycm9yOworCisgICAgICAvKiBFbmFibGUgdGhlIERNQSBzdHJlYW0gbWFuYWdpbmcgRk1BQyBwcmVsb2FkIGRhdGEgd3JpdGUgKi8KKyAgICAgIHJldHVybiAoSEFMX0RNQV9TdGFydF9JVChoZm1hYy0+aGRtYVByZWxvYWQsICh1aW50MzJfdClwT3V0cHV0LCAodWludDMyX3QpJmhmbWFjLT5JbnN0YW5jZS0+V0RBVEEsIE91dHB1dFNpemUpKTsKKyAgICB9CisgIH0KKworICAvKiBVcGRhdGUgdGhlIGVycm9yIGNvZGVzICovCisgIGlmIChfX0hBTF9GTUFDX0dFVF9GTEFHKGhmbWFjLCBGTUFDX0ZMQUdfT1ZGTCkpCisgIHsKKyAgICBoZm1hYy0+RXJyb3JDb2RlIHw9IEhBTF9GTUFDX0VSUk9SX09WRkw7CisgIH0KKyAgaWYgKF9fSEFMX0ZNQUNfR0VUX0ZMQUcoaGZtYWMsIEZNQUNfRkxBR19VTkZMKSkKKyAgeworICAgIGhmbWFjLT5FcnJvckNvZGUgfD0gSEFMX0ZNQUNfRVJST1JfVU5GTDsKKyAgfQorICBpZiAoX19IQUxfRk1BQ19HRVRfRkxBRyhoZm1hYywgRk1BQ19GTEFHX1NBVCkpCisgIHsKKyAgICBoZm1hYy0+RXJyb3JDb2RlIHw9IEhBTF9GTUFDX0VSUk9SX1NBVDsKKyAgfQorCisgIC8qIENoYW5nZSB0aGUgRk1BQyBzdGF0ZSAqLworICBoZm1hYy0+U3RhdGUgPSBIQUxfRk1BQ19TVEFURV9SRUFEWTsKKworICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCisgIGlmIChoZm1hYy0+RXJyb3JDb2RlID09IEhBTF9GTUFDX0VSUk9SX05PTkUpCisgIHsKKyAgICBzdGF0dXMgPSBIQUxfT0s7CisgIH0KICAgZWxzZQogICB7Ci0gICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwotICAgIHJldHVybiBIQUxfQlVTWTsKKyAgICBzdGF0dXMgPSBIQUxfRVJST1I7CiAgIH0KKyAgcmV0dXJuIHN0YXR1czsKIH0KIAogLyoqCiAgICogQGJyaWVmICBXcml0ZSBkYXRhIGludG8gRk1BQyBpbnRlcm5hbCBtZW1vcnkgdGhyb3VnaCBXREFUQSBhbmQgaW5jcmVtZW50IGlucHV0IGJ1ZmZlciBwb2ludGVyLgotICAqICAgICAgICAgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IHVzZWQgd2l0aCBwcmVsb2FkIGZ1bmN0aW9ucy4KKyAgKiBAbm90ZSAgIFRoaXMgZnVuY3Rpb24gaXMgb25seSB1c2VkIHdpdGggcHJlbG9hZCBmdW5jdGlvbnMuCiAgICogQHBhcmFtICBoZm1hYyBwb2ludGVyIHRvIGEgRk1BQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgRk1BQyBtb2R1bGUuCiAgICogQHBhcmFtICBwcERhdGEgcG9pbnRlciB0byBwb2ludGVyIHRvIHRoZSBkYXRhIGJ1ZmZlci4KICAgKiBAcGFyYW0gIFNpemUgc2l6ZSBvZiB0aGUgZGF0YSBidWZmZXIuCi0gICogQHJldHZhbCBub25lCisgICogQHJldHZhbCBOb25lCiAgICovCiBzdGF0aWMgdm9pZCBGTUFDX1dyaXRlUHJlbG9hZERhdGFJbmNyZW1lbnRQdHIoRk1BQ19IYW5kbGVUeXBlRGVmICpoZm1hYywgaW50MTZfdCAqKnBwRGF0YSwgdWludDhfdCBTaXplKQogewpAQCAtMTk5MiwxNyArMjAyNCwxNiBAQAogICAqIEBwYXJhbSAgaGZtYWMgRk1BQyBoYW5kbGUuCiAgICogQHBhcmFtICBUaWNrc3RhcnQgVGljayBzdGFydCB2YWx1ZS4KICAgKiBAcGFyYW0gIFRpbWVvdXQgVGltZW91dCBkdXJhdGlvbi4KLSAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKKyAgKiBAcmV0dmFsIEhBTF9TdGF0dXNUeXBlRGVmIEhBTCBzdGF0dXMKICAgKi8KIHN0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBGTUFDX1dhaXRPblN0YXJ0VW50aWxUaW1lb3V0KEZNQUNfSGFuZGxlVHlwZURlZiAqaGZtYWMsIHVpbnQzMl90IFRpY2tzdGFydCwgdWludDMyX3QgVGltZW91dCkKIHsKICAgLyogV2FpdCB1bnRpbCBmbGFnIGNoYW5nZXMgKi8KLSAgd2hpbGUgKFJFQURfQklUKGhmbWFjLT5JbnN0YW5jZS0+UEFSQU0sIEZNQUNfUEFSQU1fU1RBUlQpICE9IDBVTCkKKyAgd2hpbGUgKFJFQURfQklUKGhmbWFjLT5JbnN0YW5jZS0+UEFSQU0sIEZNQUNfUEFSQU1fU1RBUlQpICE9IDBVKQogICB7CiAgICAgaWYgKChIQUxfR2V0VGljaygpIC0gVGlja3N0YXJ0KSA+IFRpbWVvdXQpCiAgICAgewotICAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLwotICAgICAgX19IQUxfVU5MT0NLKGhmbWFjKTsKKyAgICAgIGhmbWFjLT5FcnJvckNvZGUgfD0gSEFMX0ZNQUNfRVJST1JfVElNRU9VVDsKIAogICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOwogICAgIH0KQEAgLTIwMTEsMTQgKzIwNDIsMTMgQEAKIH0KIAogLyoqCi0gICogQGJyaWVmICBSZWdpc3RlciB0aGUgbmV3IGlucHV0IGJ1ZmZlciwgdXBkYXRlIERNQSBjb25maWd1cmF0aW9uCi0gICogICAgICAgICBpZiBuZWVkZWQgYW5kIGNoYW5nZSB0aGUgRk1BQyBzdGF0ZS4KKyAgKiBAYnJpZWYgIFJlZ2lzdGVyIHRoZSBuZXcgaW5wdXQgYnVmZmVyLCB1cGRhdGUgRE1BIGNvbmZpZ3VyYXRpb24gaWYgbmVlZGVkIGFuZCBjaGFuZ2UgdGhlIEZNQUMgc3RhdGUuCiAgICogQHBhcmFtICBoZm1hYyBwb2ludGVyIHRvIGEgRk1BQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgRk1BQyBtb2R1bGUuCiAgICogQHBhcmFtICBwSW5wdXQgTmV3IGlucHV0IHZlY3RvciAoYWRkaXRpb25hbCBpbnB1dCBkYXRhKS4KICAgKiBAcGFyYW0gIHBJbnB1dFNpemUgU2l6ZSBvZiB0aGUgaW5wdXQgdmVjdG9yIChpZiBhbGwgdGhlIGRhdGEgY2FuJ3QgYmUKICAgKiAgICAgICAgIHdyaXR0ZW4sIGl0IHdpbGwgYmUgdXBkYXRlZCB3aXRoIHRoZSBudW1iZXIgb2YgZGF0YSByZWFkIGZyb20gRk1BQykuCi0gICogQHJldHZhbCBIQUwgc3RhdHVzCisgICogQHJldHZhbCBIQUxfU3RhdHVzVHlwZURlZiBIQUwgc3RhdHVzCiAgICovCiBzdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgRk1BQ19BcHBlbmRGaWx0ZXJEYXRhVXBkYXRlU3RhdGUoRk1BQ19IYW5kbGVUeXBlRGVmICpoZm1hYywgaW50MTZfdCAqcElucHV0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90ICpwSW5wdXRTaXplKQpAQCAtMjA1MSwyMCArMjA4MSwxOCBAQAogICAgIGhmbWFjLT5wSW5wdXRTaXplID0gcElucHV0U2l6ZTsKICAgfQogCi0gIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgcmV0dXJuIEhBTF9PSzsKIH0KIAogLyoqCi0gICogQGJyaWVmICBSZWdpc3RlciB0aGUgbmV3IG91dHB1dCBidWZmZXIsIHVwZGF0ZSBETUEgY29uZmlndXJhdGlvbgotICAqICAgICAgICAgaWYgbmVlZGVkIGFuZCBjaGFuZ2UgdGhlIEZNQUMgc3RhdGUuCisgICogQGJyaWVmICBSZWdpc3RlciB0aGUgbmV3IG91dHB1dCBidWZmZXIsIHVwZGF0ZSBETUEgY29uZmlndXJhdGlvbiBpZiBuZWVkZWQgYW5kIGNoYW5nZSB0aGUgRk1BQyBzdGF0ZS4KICAgKiBAcGFyYW0gIGhmbWFjIHBvaW50ZXIgdG8gYSBGTUFDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKICAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBGTUFDIG1vZHVsZS4KICAgKiBAcGFyYW0gIHBPdXRwdXQgTmV3IG91dHB1dCB2ZWN0b3IuCiAgICogQHBhcmFtICBwT3V0cHV0U2l6ZSBTaXplIG9mIHRoZSBvdXRwdXQgdmVjdG9yIChpZiB0aGUgdmVjdG9yIGNhbid0CiAgICogICAgICAgICBiZSBlbnRpcmVseSBmaWxsZWQsIHBPdXRwdXRTaXplIHdpbGwgYmUgdXBkYXRlZCB3aXRoIHRoZSBudW1iZXIKICAgKiAgICAgICAgIG9mIGRhdGEgcmVhZCBmcm9tIEZNQUMpLgotICAqIEByZXR2YWwgSEFMIHN0YXR1cworICAqIEByZXR2YWwgSEFMX1N0YXR1c1R5cGVEZWYgSEFMIHN0YXR1cwogICAqLwogc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIEZNQUNfQ29uZmlnRmlsdGVyT3V0cHV0QnVmZmVyVXBkYXRlU3RhdGUoRk1BQ19IYW5kbGVUeXBlRGVmICpoZm1hYywgaW50MTZfdCAqcE91dHB1dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90ICpwT3V0cHV0U2l6ZSkKQEAgLTIwNzMsNyArMjEwMSw3IEBACiAgIGhmbWFjLT5PdXRwdXRDdXJyZW50U2l6ZSA9IDBVOwogCiAgIC8qIENoZWNrIHdoZXRoZXIgYSB2YWxpZCBwb2ludGVyIHdhcyBwcm92aWRlZCAqLwotICBpZiAoKHBPdXRwdXQgPT0gTlVMTCkgfHwgKHBPdXRwdXRTaXplID09IE5VTEwpIHx8ICgqcE91dHB1dFNpemUgPT0gMFVMKSkKKyAgaWYgKChwT3V0cHV0ID09IE5VTEwpIHx8IChwT3V0cHV0U2l6ZSA9PSBOVUxMKSB8fCAoKnBPdXRwdXRTaXplID09IDBVKSkKICAgewogICAgIC8qIFRoZSB1c2VyIHdpbGwgaGF2ZSB0byBwcm92aWRlIGEgdmFsaWQgY29uZmlndXJhdGlvbiBsYXRlciAqLwogICAgIGhmbWFjLT5wT3V0cHV0ID0gTlVMTDsKQEAgLTIxMTAsNyArMjEzOCw2IEBACiAgICAgaGZtYWMtPlJkU3RhdGUgPSBIQUxfRk1BQ19TVEFURV9CVVNZX1JEOwogICB9CiAKLSAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwogICByZXR1cm4gSEFMX09LOwogfQogCkBAIC0yMTE5LDcgKzIxNDYsNyBAQAogICAqIEBwYXJhbSAgaGZtYWMgRk1BQyBoYW5kbGUuCiAgICogQHBhcmFtICBNYXhTaXplVG9SZWFkIE1heGltdW0gbnVtYmVyIG9mIGRhdGEgdG8gcmVhZCAodGhpcyBzZXJ2ZXMgYXMgYSB0aW1lb3V0CiAgICogICAgICAgICBpZiBGTUFDIGNvbnRpbnVvdXNseSB3cml0ZXMgaW50byB0aGUgb3V0cHV0IGJ1ZmZlcikuCi0gICogQHJldHZhbCBIQUwgc3RhdHVzCisgICogQHJldHZhbCBOb25lCiAgICovCiBzdGF0aWMgdm9pZCBGTUFDX1JlYWREYXRhSW5jcmVtZW50UHRyKEZNQUNfSGFuZGxlVHlwZURlZiAqaGZtYWMsIHVpbnQxNl90IE1heFNpemVUb1JlYWQpCiB7CkBAIC0yMTI4LDcgKzIxNTUsNyBAQAogICB1aW50MzJfdCB0bXB2YWx1ZTsKIAogICAvKiBDaGVjayBpZiB0aGVyZSBpcyBkYXRhIHRvIHJlYWQgKi8KLSAgaWYgKFJFQURfQklUKGhmbWFjLT5JbnN0YW5jZS0+U1IsIEZNQUNfU1JfWUVNUFRZKSAhPSAwVUwpCisgIGlmIChSRUFEX0JJVChoZm1hYy0+SW5zdGFuY2UtPlNSLCBGTUFDX1NSX1lFTVBUWSkgIT0gMFUpCiAgIHsKICAgICByZXR1cm47CiAgIH0KQEAgLTIxNTcsNyArMjE4NCw3IEBACiAgICAgKihoZm1hYy0+cE91dHB1dCkgPSAoaW50MTZfdCl0bXB2YWx1ZTsKICAgICBoZm1hYy0+cE91dHB1dCsrOwogICAgIGhmbWFjLT5PdXRwdXRDdXJyZW50U2l6ZSsrOwotICB9IHdoaWxlIChSRUFEX0JJVChoZm1hYy0+SW5zdGFuY2UtPlNSLCBGTUFDX1NSX1lFTVBUWSkgPT0gMFVMKTsKKyAgfSB3aGlsZSAoUkVBRF9CSVQoaGZtYWMtPkluc3RhbmNlLT5TUiwgRk1BQ19TUl9ZRU1QVFkpID09IDBVKTsKIAogICAvKiBZIGJ1ZmZlciBlbXB0eSBmbGFnIGhhcyBqdXN0IGJlIHJhaXNlZCwgcmVhZCB0aGUgdGhyZXNob2xkICovCiAgIHRocmVzaG9sZCA9ICh1aW50MTZfdClGTUFDX0dFVF9USFJFU0hPTERfRlJPTV9XTShGTUFDX0dFVF9ZX0VNUFRZX1dNKGhmbWFjKSkgLSAxVTsKQEAgLTIxODMsNyArMjIxMCw3IEBACiAgICogQHBhcmFtICBoZm1hYyBGTUFDIGhhbmRsZS4KICAgKiBAcGFyYW0gIE1heFNpemVUb1dyaXRlIE1heGltdW0gbnVtYmVyIG9mIGRhdGEgdG8gd3JpdGUgKHRoaXMgc2VydmVzIGFzIGEgdGltZW91dAogICAqICAgICAgICAgaWYgRk1BQyBjb250aW51b3VzbHkgZW1wdGllcyB0aGUgaW5wdXQgYnVmZmVyKS4KLSAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKKyAgKiBAcmV0dmFsIE5vbmUKICAgKi8KIHN0YXRpYyB2b2lkIEZNQUNfV3JpdGVEYXRhSW5jcmVtZW50UHRyKEZNQUNfSGFuZGxlVHlwZURlZiAqaGZtYWMsIHVpbnQxNl90IE1heFNpemVUb1dyaXRlKQogewpAQCAtMjE5MSw3ICsyMjE4LDcgQEAKICAgdWludDE2X3QgdGhyZXNob2xkOwogCiAgIC8qIENoZWNrIGlmIHRoZXJlIGlzIHJvb20gaW4gRk1BQyAqLwotICBpZiAoUkVBRF9CSVQoaGZtYWMtPkluc3RhbmNlLT5TUiwgRk1BQ19TUl9YMUZVTEwpICE9IDBVTCkKKyAgaWYgKFJFQURfQklUKGhmbWFjLT5JbnN0YW5jZS0+U1IsIEZNQUNfU1JfWDFGVUxMKSAhPSAwVSkKICAgewogICAgIHJldHVybjsKICAgfQpAQCAtMjIxOSw3ICsyMjQ2LDcgQEAKICAgICBXUklURV9SRUcoaGZtYWMtPkluc3RhbmNlLT5XREFUQSwgKCgodWludDMyX3QpKCooaGZtYWMtPnBJbnB1dCkpKSAmIEZNQUNfV0RBVEFfV0RBVEEpKTsKICAgICBoZm1hYy0+cElucHV0Kys7CiAgICAgaGZtYWMtPklucHV0Q3VycmVudFNpemUrKzsKLSAgfSB3aGlsZSAoUkVBRF9CSVQoaGZtYWMtPkluc3RhbmNlLT5TUiwgRk1BQ19TUl9YMUZVTEwpID09IDBVTCk7CisgIH0gd2hpbGUgKFJFQURfQklUKGhmbWFjLT5JbnN0YW5jZS0+U1IsIEZNQUNfU1JfWDFGVUxMKSA9PSAwVSk7CiAKICAgLyogWDEgYnVmZmVyIGZ1bGwgZmxhZyBoYXMganVzdCBiZSByYWlzZWQsIHJlYWQgdGhlIHRocmVzaG9sZCAqLwogICB0aHJlc2hvbGQgPSAodWludDE2X3QpRk1BQ19HRVRfVEhSRVNIT0xEX0ZST01fV00oRk1BQ19HRVRfWDFfRlVMTF9XTShoZm1hYykpIC0gMVU7CkBAIC0yMzQ4LDcgKzIzNzUsNyBAQAogICBlbHNlCiAgIHsKICAgICAvKiBXYWl0IGZvciB0aGUgZW5kIG9mIHRoZSB3cml0aW5nICovCi0gICAgZm9yIChpbmRleCA9IDBVOyBpbmRleCA8IDB4RkZVOyBpbmRleCsrKQorICAgIGZvciAoaW5kZXggPSAwVTsgaW5kZXggPCBNQVhfUFJFTE9BRF9JTkRFWDsgaW5kZXgrKykKICAgICB7CiAgICAgICBpZiAoUkVBRF9CSVQoaGZtYWMtPkluc3RhbmNlLT5QQVJBTSwgRk1BQ19QQVJBTV9TVEFSVCkgPT0gMFUpCiAgICAgICB7CkBAIC0yMzU2LDggKzIzODMsOCBAQAogICAgICAgfQogICAgIH0KIAotICAgIC8qIElmICdTVEFSVCcgaXMgc3RpbGwgc2V0LCB0aGVyZSB3YXMgYW4gZXJyb3I6IHNldCBGTUFDIGhhbmRsZSBzdGF0ZSB0byBlcnJvciAqLwotICAgIGlmIChSRUFEX0JJVChoZm1hYy0+SW5zdGFuY2UtPlBBUkFNLCBGTUFDX1BBUkFNX1NUQVJUKSAhPSAwVUwpCisgICAgLyogSWYgJ1NUQVJUJyBpcyBzdGlsbCBzZXQsIHRoZXJlIHdhcyBhIHRpbWVvdXQ6IHNldCBGTUFDIGhhbmRsZSBzdGF0ZSB0byB0aW1lb3V0ICovCisgICAgaWYgKFJFQURfQklUKGhmbWFjLT5JbnN0YW5jZS0+UEFSQU0sIEZNQUNfUEFSQU1fU1RBUlQpICE9IDBVKQogICAgIHsKICAgICAgIGhmbWFjLT5TdGF0ZSA9IEhBTF9GTUFDX1NUQVRFX1RJTUVPVVQ7CiAgICAgfQpAQCAtMjQwMCwxNiArMjQyNywxNiBAQAogICBGTUFDX0hhbmRsZVR5cGVEZWYgKmhmbWFjID0gKEZNQUNfSGFuZGxlVHlwZURlZiAqKSgoRE1BX0hhbmRsZVR5cGVEZWYgKiloZG1hKS0+UGFyZW50OwogCiAgIC8qIFdhaXQgZm9yIHRoZSBlbmQgb2YgdGhlIFgxIHdyaXRpbmcgKi8KLSAgZm9yIChpbmRleCA9IDBVOyBpbmRleCA8IDB4RkZVOyBpbmRleCsrKQorICBmb3IgKGluZGV4ID0gMFU7IGluZGV4IDwgTUFYX1BSRUxPQURfSU5ERVg7IGluZGV4KyspCiAgIHsKLSAgICBpZiAoUkVBRF9CSVQoaGZtYWMtPkluc3RhbmNlLT5QQVJBTSwgRk1BQ19QQVJBTV9TVEFSVCkgPT0gMFVMKQorICAgIGlmIChSRUFEX0JJVChoZm1hYy0+SW5zdGFuY2UtPlBBUkFNLCBGTUFDX1BBUkFNX1NUQVJUKSA9PSAwVSkKICAgICB7CiAgICAgICBicmVhazsKICAgICB9CiAgIH0KIAogICAvKiBJZiAnU1RBUlQnIGlzIHN0aWxsIHNldCwgdGhlcmUgd2FzIGFuIGVycm9yOiBzZXQgRk1BQyBoYW5kbGUgc3RhdGUgdG8gZXJyb3IgKi8KLSAgaWYgKFJFQURfQklUKGhmbWFjLT5JbnN0YW5jZS0+UEFSQU0sIEZNQUNfUEFSQU1fU1RBUlQpICE9IDBVTCkKKyAgaWYgKFJFQURfQklUKGhmbWFjLT5JbnN0YW5jZS0+UEFSQU0sIEZNQUNfUEFSQU1fU1RBUlQpICE9IDBVKQogICB7CiAgICAgaGZtYWMtPlN0YXRlID0gSEFMX0ZNQUNfU1RBVEVfVElNRU9VVDsKICAgICBoZm1hYy0+RXJyb3JDb2RlIHw9IEhBTF9GTUFDX0VSUk9SX1RJTUVPVVQ7CkBAIC0yNDQ1LDcgKzI0NzIsNiBAQAogICAgIC8qIG5vdGhpbmcgdG8gZG8gKi8KICAgfQogCi0gIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgaWYgKGhmbWFjLT5FcnJvckNvZGUgPT0gSEFMX0ZNQUNfRVJST1JfTk9ORSkKICAgewogICAgIC8qIENoYW5nZSB0aGUgRk1BQyBzdGF0ZSAqLwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZzR4eF9oYWxfZ3Bpby5jIGIvU3JjL3N0bTMyZzR4eF9oYWxfZ3Bpby5jCmluZGV4IDNhOGRmZDMuLjIzYTQ0NWUgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmc0eHhfaGFsX2dwaW8uYworKysgYi9TcmMvc3RtMzJnNHh4X2hhbF9ncGlvLmMKQEAgLTE4OCwyNiArMTg4LDYgQEAKICAgICBpZiAoaW9jdXJyZW50ICE9IDB4MDB1KQogICAgIHsKICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEdQSU8gTW9kZSBDb25maWd1cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0gICAgICAvKiBJbiBjYXNlIG9mIEFsdGVybmF0ZSBmdW5jdGlvbiBtb2RlIHNlbGVjdGlvbiAqLwotICAgICAgaWYgKChHUElPX0luaXQtPk1vZGUgPT0gR1BJT19NT0RFX0FGX1BQKSB8fCAoR1BJT19Jbml0LT5Nb2RlID09IEdQSU9fTU9ERV9BRl9PRCkpCi0gICAgICB7Ci0gICAgICAgIC8qIENoZWNrIHRoZSBBbHRlcm5hdGUgZnVuY3Rpb24gcGFyYW1ldGVycyAqLwotICAgICAgICBhc3NlcnRfcGFyYW0oSVNfR1BJT19BRl9JTlNUQU5DRShHUElPeCkpOwotICAgICAgICBhc3NlcnRfcGFyYW0oSVNfR1BJT19BRihHUElPX0luaXQtPkFsdGVybmF0ZSkpOwotCi0gICAgICAgIC8qIENvbmZpZ3VyZSBBbHRlcm5hdGUgZnVuY3Rpb24gbWFwcGVkIHdpdGggdGhlIGN1cnJlbnQgSU8gKi8KLSAgICAgICAgdGVtcCA9IEdQSU94LT5BRlJbcG9zaXRpb24gPj4gM1VdOwotICAgICAgICB0ZW1wICY9IH4oMHhGVSA8PCAoKHBvc2l0aW9uICYgMHgwN1UpICogNFUpKTsKLSAgICAgICAgdGVtcCB8PSAoKEdQSU9fSW5pdC0+QWx0ZXJuYXRlKSA8PCAoKHBvc2l0aW9uICYgMHgwN1UpICogNFUpKTsKLSAgICAgICAgR1BJT3gtPkFGUltwb3NpdGlvbiA+PiAzVV0gPSB0ZW1wOwotICAgICAgfQotCi0gICAgICAvKiBDb25maWd1cmUgSU8gRGlyZWN0aW9uIG1vZGUgKElucHV0LCBPdXRwdXQsIEFsdGVybmF0ZSBvciBBbmFsb2cpICovCi0gICAgICB0ZW1wID0gR1BJT3gtPk1PREVSOwotICAgICAgdGVtcCAmPSB+KEdQSU9fTU9ERVJfTU9ERTAgPDwgKHBvc2l0aW9uICogMlUpKTsKLSAgICAgIHRlbXAgfD0gKChHUElPX0luaXQtPk1vZGUgJiBHUElPX01PREUpIDw8IChwb3NpdGlvbiAqIDJVKSk7Ci0gICAgICBHUElPeC0+TU9ERVIgPSB0ZW1wOwotCiAgICAgICAvKiBJbiBjYXNlIG9mIE91dHB1dCBvciBBbHRlcm5hdGUgZnVuY3Rpb24gbW9kZSBzZWxlY3Rpb24gKi8KICAgICAgIGlmICgoR1BJT19Jbml0LT5Nb2RlID09IEdQSU9fTU9ERV9PVVRQVVRfUFApIHx8IChHUElPX0luaXQtPk1vZGUgPT0gR1BJT19NT0RFX0FGX1BQKSB8fAogICAgICAgICAgIChHUElPX0luaXQtPk1vZGUgPT0gR1BJT19NT0RFX09VVFBVVF9PRCkgfHwgKEdQSU9fSW5pdC0+TW9kZSA9PSBHUElPX01PREVfQUZfT0QpKQpAQCAtMjMzLDYgKzIxMywyNiBAQAogICAgICAgdGVtcCB8PSAoKEdQSU9fSW5pdC0+UHVsbCkgPDwgKHBvc2l0aW9uICogMlUpKTsKICAgICAgIEdQSU94LT5QVVBEUiA9IHRlbXA7CiAKKyAgICAgIC8qIEluIGNhc2Ugb2YgQWx0ZXJuYXRlIGZ1bmN0aW9uIG1vZGUgc2VsZWN0aW9uICovCisgICAgICBpZiAoKEdQSU9fSW5pdC0+TW9kZSA9PSBHUElPX01PREVfQUZfUFApIHx8IChHUElPX0luaXQtPk1vZGUgPT0gR1BJT19NT0RFX0FGX09EKSkKKyAgICAgIHsKKyAgICAgICAgLyogQ2hlY2sgdGhlIEFsdGVybmF0ZSBmdW5jdGlvbiBwYXJhbWV0ZXJzICovCisgICAgICAgIGFzc2VydF9wYXJhbShJU19HUElPX0FGX0lOU1RBTkNFKEdQSU94KSk7CisgICAgICAgIGFzc2VydF9wYXJhbShJU19HUElPX0FGKEdQSU9fSW5pdC0+QWx0ZXJuYXRlKSk7CisKKyAgICAgICAgLyogQ29uZmlndXJlIEFsdGVybmF0ZSBmdW5jdGlvbiBtYXBwZWQgd2l0aCB0aGUgY3VycmVudCBJTyAqLworICAgICAgICB0ZW1wID0gR1BJT3gtPkFGUltwb3NpdGlvbiA+PiAzVV07CisgICAgICAgIHRlbXAgJj0gfigweEZVIDw8ICgocG9zaXRpb24gJiAweDA3VSkgKiA0VSkpOworICAgICAgICB0ZW1wIHw9ICgoR1BJT19Jbml0LT5BbHRlcm5hdGUpIDw8ICgocG9zaXRpb24gJiAweDA3VSkgKiA0VSkpOworICAgICAgICBHUElPeC0+QUZSW3Bvc2l0aW9uID4+IDNVXSA9IHRlbXA7CisgICAgICB9CisKKyAgICAgIC8qIENvbmZpZ3VyZSBJTyBEaXJlY3Rpb24gbW9kZSAoSW5wdXQsIE91dHB1dCwgQWx0ZXJuYXRlIG9yIEFuYWxvZykgKi8KKyAgICAgIHRlbXAgPSBHUElPeC0+TU9ERVI7CisgICAgICB0ZW1wICY9IH4oR1BJT19NT0RFUl9NT0RFMCA8PCAocG9zaXRpb24gKiAyVSkpOworICAgICAgdGVtcCB8PSAoKEdQSU9fSW5pdC0+TW9kZSAmIEdQSU9fTU9ERSkgPDwgKHBvc2l0aW9uICogMlUpKTsKKyAgICAgIEdQSU94LT5NT0RFUiA9IHRlbXA7CisKICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVYVEkgTW9kZSBDb25maWd1cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgICAgICAvKiBDb25maWd1cmUgdGhlIEV4dGVybmFsIEludGVycnVwdCBvciBldmVudCBmb3IgdGhlIGN1cnJlbnQgSU8gKi8KICAgICAgIGlmICgoR1BJT19Jbml0LT5Nb2RlICYgRVhUSV9NT0RFKSA9PSBFWFRJX01PREUpCkBAIC0zMzQsMTYgKzMzNCwxNiBAQAogICAgICAgR1BJT3gtPk1PREVSIHw9IChHUElPX01PREVSX01PREUwIDw8IChwb3NpdGlvbiAqIDJ1KSk7CiAKICAgICAgIC8qIENvbmZpZ3VyZSB0aGUgZGVmYXVsdCBBbHRlcm5hdGUgRnVuY3Rpb24gaW4gY3VycmVudCBJTyAqLwotICAgICAgR1BJT3gtPkFGUltwb3NpdGlvbiA+PiAzdV0gJj0gfigweEZ1IDw8ICgocG9zaXRpb24gJiAweDA3dSkgKiA0dSkpIDsKLQotICAgICAgLyogQ29uZmlndXJlIHRoZSBkZWZhdWx0IHZhbHVlIGZvciBJTyBTcGVlZCAqLwotICAgICAgR1BJT3gtPk9TUEVFRFIgJj0gfihHUElPX09TUEVFRFJfT1NQRUVEMCA8PCAocG9zaXRpb24gKiAydSkpOwotCi0gICAgICAvKiBDb25maWd1cmUgdGhlIGRlZmF1bHQgdmFsdWUgSU8gT3V0cHV0IFR5cGUgKi8KLSAgICAgIEdQSU94LT5PVFlQRVIgICY9IH4oR1BJT19PVFlQRVJfT1QwIDw8IHBvc2l0aW9uKSA7CisgICAgICBHUElPeC0+QUZSW3Bvc2l0aW9uID4+IDN1XSAmPSB+KDB4RnUgPDwgKChwb3NpdGlvbiAmIDB4MDd1KSAqIDR1KSk7CiAKICAgICAgIC8qIERlYWN0aXZhdGUgdGhlIFB1bGwtdXAgYW5kIFB1bGwtZG93biByZXNpc3RvciBmb3IgdGhlIGN1cnJlbnQgSU8gKi8KICAgICAgIEdQSU94LT5QVVBEUiAmPSB+KEdQSU9fUFVQRFJfUFVQRDAgPDwgKHBvc2l0aW9uICogMnUpKTsKKworICAgICAgLyogQ29uZmlndXJlIHRoZSBkZWZhdWx0IHZhbHVlIElPIE91dHB1dCBUeXBlICovCisgICAgICBHUElPeC0+T1RZUEVSICAmPSB+KEdQSU9fT1RZUEVSX09UMCA8PCBwb3NpdGlvbik7CisKKyAgICAgIC8qIENvbmZpZ3VyZSB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgSU8gU3BlZWQgKi8KKyAgICAgIEdQSU94LT5PU1BFRURSICY9IH4oR1BJT19PU1BFRURSX09TUEVFRDAgPDwgKHBvc2l0aW9uICogMnUpKTsKICAgICB9CiAKICAgICBwb3NpdGlvbisrOwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZzR4eF9oYWxfaHJ0aW0uYyBiL1NyYy9zdG0zMmc0eHhfaGFsX2hydGltLmMKaW5kZXggN2FhNDhlOC4uYzRlNjc0NSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZzR4eF9oYWxfaHJ0aW0uYworKysgYi9TcmMvc3RtMzJnNHh4X2hhbF9ocnRpbS5jCkBAIC03OTMsNiArNzkzLDkgQEAKICAgICBTRVRfQklUKGhocnRpbS0+SW5zdGFuY2UtPnNDb21tb25SZWdzLkRMTENSLCBIUlRJTV9ETExDUl9DQUwpOwogICB9CiAKKyAgLyogU2V0IEhSVElNIHN0YXRlICovCisgIGhocnRpbS0+U3RhdGUgPSBIQUxfSFJUSU1fU1RBVEVfUkVBRFk7CisKICAgcmV0dXJuIEhBTF9PSzsKIH0KIApAQCAtODQzLDYgKzg0Niw5IEBACiAgICAgU0VUX0JJVChoaHJ0aW0tPkluc3RhbmNlLT5zQ29tbW9uUmVncy5ETExDUiwgSFJUSU1fRExMQ1JfQ0FMKTsKICAgfQogCisgIC8qIFNldCBIUlRJTSBzdGF0ZSAqLworICBoaHJ0aW0tPlN0YXRlID0gSEFMX0hSVElNX1NUQVRFX1JFQURZOworCiAgIHJldHVybiBIQUxfT0s7CiB9CiAKQEAgLTEzOTMsNiArMTM5OSw5IEBACiAgICAgIHJldHVybiBIQUxfQlVTWTsKICAgfQogCisgIC8qIFByb2Nlc3MgTG9ja2VkICovCisgIF9fSEFMX0xPQ0soaGhydGltKTsKKwogICAvKiBTZXQgSFJUSU0gc3RhdGUgKi8KICAgaGhydGltLT5TdGF0ZSA9IEhBTF9IUlRJTV9TVEFURV9CVVNZOwogCkBAIC0xNDkxLDYgKzE1MDAsOSBAQAogCiAgIGRlZmF1bHQ6CiAgICAgeworICAgICAgT3V0cHV0Q2ZnLlNldFNvdXJjZSA9IEhSVElNX09VVFBVVFNFVF9OT05FOworICAgICAgT3V0cHV0Q2ZnLlJlc2V0U291cmNlID0gSFJUSU1fT1VUUFVUUkVTRVRfTk9ORTsKKwogICAgICAgaGhydGltLT5TdGF0ZSA9IEhBTF9IUlRJTV9TVEFURV9FUlJPUjsKIAogICAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLwpAQCAtMTUxMyw2ICsxNTI1LDkgQEAKICAgLyogU2V0IEhSVElNIHN0YXRlICovCiAgIGhocnRpbS0+U3RhdGUgPSBIQUxfSFJUSU1fU1RBVEVfUkVBRFk7CiAKKyAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLworICBfX0hBTF9VTkxPQ0soaGhydGltKTsKKwogICByZXR1cm4gSEFMX09LOwogfQogCkBAIC0yMDU5LDYgKzIwNzQsOSBAQAogICAgIH0KICAgZGVmYXVsdDoKICAgICB7CisgICAgICBPdXRwdXRDZmcuU2V0U291cmNlID0gSFJUSU1fT1VUUFVUU0VUX05PTkU7CisgICAgICBPdXRwdXRDZmcuUmVzZXRTb3VyY2UgPSBIUlRJTV9PVVRQVVRSRVNFVF9OT05FOworCiAgICAgICBoaHJ0aW0tPlN0YXRlID0gSEFMX0hSVElNX1NUQVRFX0VSUk9SOwogCiAgICAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCkBAIC0zNDIyLDYgKzM0NDAsOSBAQAogCiAgIGRlZmF1bHQ6CiAgICAgeworICAgICAgT3V0cHV0Q2ZnLlNldFNvdXJjZSA9IEhSVElNX09VVFBVVFNFVF9OT05FOworICAgICAgT3V0cHV0Q2ZnLlJlc2V0U291cmNlID0gSFJUSU1fT1VUUFVUUkVTRVRfTk9ORTsKKwogICAgICAgaGhydGltLT5TdGF0ZSA9IEhBTF9IUlRJTV9TVEFURV9FUlJPUjsKIAogICAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLwpAQCAtMzg4OCw2ICszOTA5LDcgQEAKIHsKICAgLyogQ2hlY2sgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfSFJUSU1fRVZFTlQoRXZlbnQpKTsKKyAgYXNzZXJ0X3BhcmFtKElTX0hSVElNX0VWRU5UU1JDKEV2ZW50LCBwRXZlbnRDZmctPlNvdXJjZSkpOwogICBhc3NlcnRfcGFyYW0oSVNfSFJUSU1fRVZFTlRQT0xBUklUWShwRXZlbnRDZmctPlNlbnNpdGl2aXR5LCBwRXZlbnRDZmctPlBvbGFyaXR5KSk7CiAgIGFzc2VydF9wYXJhbShJU19IUlRJTV9FVkVOVFNFTlNJVElWSVRZKHBFdmVudENmZy0+U2Vuc2l0aXZpdHkpKTsKICAgYXNzZXJ0X3BhcmFtKElTX0hSVElNX0VWRU5URkFTVE1PREUoRXZlbnQsIHBFdmVudENmZy0+RmFzdE1vZGUpKTsKQEAgLTkzOTgsOSArOTQyMCw2IEBACiB7CiAgICB1aW50MzJfdCBocnRpbV90aW1jcjI7CiAKLSAgIC8qIFVQREdBVCBiaXRmaWVsZCBtdXN0IGJlIHJlc2V0IGJlZm9yZSBwcm9ncmFtbWluZyBhIG5ldyB2YWx1ZSAqLwotICAgaGhydGltLT5JbnN0YW5jZS0+c1RpbWVyeFJlZ3NbVGltZXJJZHhdLlRJTXhDUiAmPSB+KEhSVElNX1RJTUNSX1VQREdBVCk7Ci0KICAgIC8qIENvbmZpZ3VyZSB0aW1pbmcgdW5pdCAoVGltZXIgQSB0byBUaW1lciBGKSAqLwogICAgaHJ0aW1fdGltY3IyID0gaGhydGltLT5JbnN0YW5jZS0+c1RpbWVyeFJlZ3NbVGltZXJJZHhdLlRJTXhDUjI7CiAKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmc0eHhfaGFsX2kyYy5jIGIvU3JjL3N0bTMyZzR4eF9oYWxfaTJjLmMKaW5kZXggYmQzZWFjOS4uZGU0NzMwOSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZzR4eF9oYWxfaTJjLmMKKysrIGIvU3JjL3N0bTMyZzR4eF9oYWxfaTJjLmMKQEAgLTIyMywxMiArMjIzLDEyIEBACiAKICAgICAgKioqIENhbGxiYWNrIHJlZ2lzdHJhdGlvbiAqKioKICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KKyAgICBbLi5dCiAgICAgIFRoZSBjb21waWxhdGlvbiBmbGFnIFVTRV9IQUxfSTJDX1JFR0lTVEVSX0NBTExCQUNLUyB3aGVuIHNldCB0byAxCiAgICAgIGFsbG93cyB0aGUgdXNlciB0byBjb25maWd1cmUgZHluYW1pY2FsbHkgdGhlIGRyaXZlciBjYWxsYmFja3MuCiAgICAgIFVzZSBGdW5jdGlvbnMgQHJlZiBIQUxfSTJDX1JlZ2lzdGVyQ2FsbGJhY2soKSBvciBAcmVmIEhBTF9JMkNfUmVnaXN0ZXJBZGRyQ2FsbGJhY2soKQogICAgICB0byByZWdpc3RlciBhbiBpbnRlcnJ1cHQgY2FsbGJhY2suCi0KKyAgICBbLi5dCiAgICAgIEZ1bmN0aW9uIEByZWYgSEFMX0kyQ19SZWdpc3RlckNhbGxiYWNrKCkgYWxsb3dzIHRvIHJlZ2lzdGVyIGZvbGxvd2luZyBjYWxsYmFja3M6CiAgICAgICAgKCspIE1hc3RlclR4Q3BsdENhbGxiYWNrIDogY2FsbGJhY2sgZm9yIE1hc3RlciB0cmFuc21pc3Npb24gZW5kIG9mIHRyYW5zZmVyLgogICAgICAgICgrKSBNYXN0ZXJSeENwbHRDYWxsYmFjayA6IGNhbGxiYWNrIGZvciBNYXN0ZXIgcmVjZXB0aW9uIGVuZCBvZiB0cmFuc2Zlci4KQEAgLTI0Myw5ICsyNDMsOSBAQAogICAgICAgICgrKSBNc3BEZUluaXRDYWxsYmFjayAgICA6IGNhbGxiYWNrIGZvciBNc3AgRGVJbml0LgogICAgICBUaGlzIGZ1bmN0aW9uIHRha2VzIGFzIHBhcmFtZXRlcnMgdGhlIEhBTCBwZXJpcGhlcmFsIGhhbmRsZSwgdGhlIENhbGxiYWNrIElECiAgICAgIGFuZCBhIHBvaW50ZXIgdG8gdGhlIHVzZXIgY2FsbGJhY2sgZnVuY3Rpb24uCi0KKyAgICBbLi5dCiAgICAgIEZvciBzcGVjaWZpYyBjYWxsYmFjayBBZGRyQ2FsbGJhY2sgdXNlIGRlZGljYXRlZCByZWdpc3RlciBjYWxsYmFja3MgOiBAcmVmIEhBTF9JMkNfUmVnaXN0ZXJBZGRyQ2FsbGJhY2soKS4KLQorICAgIFsuLl0KICAgICAgVXNlIGZ1bmN0aW9uIEByZWYgSEFMX0kyQ19VblJlZ2lzdGVyQ2FsbGJhY2sgdG8gcmVzZXQgYSBjYWxsYmFjayB0byB0aGUgZGVmYXVsdAogICAgICB3ZWFrIGZ1bmN0aW9uLgogICAgICBAcmVmIEhBTF9JMkNfVW5SZWdpc3RlckNhbGxiYWNrIHRha2VzIGFzIHBhcmFtZXRlcnMgdGhlIEhBTCBwZXJpcGhlcmFsIGhhbmRsZSwKQEAgLTI2Miw5ICsyNjIsOSBAQAogICAgICAgICgrKSBBYm9ydENwbHRDYWxsYmFjayAgICA6IGNhbGxiYWNrIGZvciBhYm9ydCBjb21wbGV0aW9uIHByb2Nlc3MuCiAgICAgICAgKCspIE1zcEluaXRDYWxsYmFjayAgICAgIDogY2FsbGJhY2sgZm9yIE1zcCBJbml0LgogICAgICAgICgrKSBNc3BEZUluaXRDYWxsYmFjayAgICA6IGNhbGxiYWNrIGZvciBNc3AgRGVJbml0LgotCisgICAgWy4uXQogICAgICBGb3IgY2FsbGJhY2sgQWRkckNhbGxiYWNrIHVzZSBkZWRpY2F0ZWQgcmVnaXN0ZXIgY2FsbGJhY2tzIDogQHJlZiBIQUxfSTJDX1VuUmVnaXN0ZXJBZGRyQ2FsbGJhY2soKS4KLQorICAgIFsuLl0KICAgICAgQnkgZGVmYXVsdCwgYWZ0ZXIgdGhlIEByZWYgSEFMX0kyQ19Jbml0KCkgYW5kIHdoZW4gdGhlIHN0YXRlIGlzIEByZWYgSEFMX0kyQ19TVEFURV9SRVNFVAogICAgICBhbGwgY2FsbGJhY2tzIGFyZSBzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgd2VhayBmdW5jdGlvbnM6CiAgICAgIGV4YW1wbGVzIEByZWYgSEFMX0kyQ19NYXN0ZXJUeENwbHRDYWxsYmFjaygpLCBAcmVmIEhBTF9JMkNfTWFzdGVyUnhDcGx0Q2FsbGJhY2soKS4KQEAgLTI3Myw3ICsyNzMsNyBAQAogICAgICB0aGVzZSBjYWxsYmFja3MgYXJlIG51bGwgKG5vdCByZWdpc3RlcmVkIGJlZm9yZWhhbmQpLgogICAgICBJZiBNc3BJbml0IG9yIE1zcERlSW5pdCBhcmUgbm90IG51bGwsIHRoZSBAcmVmIEhBTF9JMkNfSW5pdCgpLyBAcmVmIEhBTF9JMkNfRGVJbml0KCkKICAgICAga2VlcCBhbmQgdXNlIHRoZSB1c2VyIE1zcEluaXQvTXNwRGVJbml0IGNhbGxiYWNrcyAocmVnaXN0ZXJlZCBiZWZvcmVoYW5kKSB3aGF0ZXZlciB0aGUgc3RhdGUuCi0KKyAgICBbLi5dCiAgICAgIENhbGxiYWNrcyBjYW4gYmUgcmVnaXN0ZXJlZC91bnJlZ2lzdGVyZWQgaW4gQHJlZiBIQUxfSTJDX1NUQVRFX1JFQURZIHN0YXRlIG9ubHkuCiAgICAgIEV4Y2VwdGlvbiBkb25lIE1zcEluaXQvTXNwRGVJbml0IGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSByZWdpc3RlcmVkL3VucmVnaXN0ZXJlZAogICAgICBpbiBAcmVmIEhBTF9JMkNfU1RBVEVfUkVBRFkgb3IgQHJlZiBIQUxfSTJDX1NUQVRFX1JFU0VUIHN0YXRlLApAQCAtMjgxLDcgKzI4MSw3IEBACiAgICAgIFRoZW4sIHRoZSB1c2VyIGZpcnN0IHJlZ2lzdGVycyB0aGUgTXNwSW5pdC9Nc3BEZUluaXQgdXNlciBjYWxsYmFja3MKICAgICAgdXNpbmcgQHJlZiBIQUxfSTJDX1JlZ2lzdGVyQ2FsbGJhY2soKSBiZWZvcmUgY2FsbGluZyBAcmVmIEhBTF9JMkNfRGVJbml0KCkKICAgICAgb3IgQHJlZiBIQUxfSTJDX0luaXQoKSBmdW5jdGlvbi4KLQorICAgIFsuLl0KICAgICAgV2hlbiB0aGUgY29tcGlsYXRpb24gZmxhZyBVU0VfSEFMX0kyQ19SRUdJU1RFUl9DQUxMQkFDS1MgaXMgc2V0IHRvIDAgb3IKICAgICAgbm90IGRlZmluZWQsIHRoZSBjYWxsYmFjayByZWdpc3RyYXRpb24gZmVhdHVyZSBpcyBub3QgYXZhaWxhYmxlIGFuZCBhbGwgY2FsbGJhY2tzCiAgICAgIGFyZSBzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgd2VhayBmdW5jdGlvbnMuCkBAIC0zNTEsMTMgKzM1MSwxMyBAQAogCiAKIC8qIFByaXZhdGUgZGVmaW5lIHRvIGNlbnRyYWxpemUgdGhlIGVuYWJsZS9kaXNhYmxlIG9mIEludGVycnVwdHMgKi8KLSNkZWZpbmUgSTJDX1hGRVJfVFhfSVQgICAgICAgICAgKDB4MDAwMDAwMDFVKQotI2RlZmluZSBJMkNfWEZFUl9SWF9JVCAgICAgICAgICAoMHgwMDAwMDAwMlUpCi0jZGVmaW5lIEkyQ19YRkVSX0xJU1RFTl9JVCAgICAgICgweDAwMDAwMDA0VSkKKyNkZWZpbmUgSTJDX1hGRVJfVFhfSVQgICAgICAgICAgKHVpbnQxNl90KSgweDAwMDFVKSAgIC8qIEJpdCBmaWVsZCBjYW4gYmUgY29tYmluYXRlZCB3aXRoIEByZWYgSTJDX1hGRVJfTElTVEVOX0lUICovCisjZGVmaW5lIEkyQ19YRkVSX1JYX0lUICAgICAgICAgICh1aW50MTZfdCkoMHgwMDAyVSkgICAvKiBCaXQgZmllbGQgY2FuIGJlIGNvbWJpbmF0ZWQgd2l0aCBAcmVmIEkyQ19YRkVSX0xJU1RFTl9JVCAqLworI2RlZmluZSBJMkNfWEZFUl9MSVNURU5fSVQgICAgICAodWludDE2X3QpKDB4ODAwMFUpICAgLyogQml0IGZpZWxkIGNhbiBiZSBjb21iaW5hdGVkIHdpdGggQHJlZiBJMkNfWEZFUl9UWF9JVCBhbmQgQHJlZiBJMkNfWEZFUl9SWF9JVCAqLwogCi0jZGVmaW5lIEkyQ19YRkVSX0VSUk9SX0lUICAgICAgICgweDAwMDAwMDExVSkKLSNkZWZpbmUgSTJDX1hGRVJfQ1BMVF9JVCAgICAgICAgKDB4MDAwMDAwMTJVKQotI2RlZmluZSBJMkNfWEZFUl9SRUxPQURfSVQgICAgICAoMHgwMDAwMDAxMlUpCisjZGVmaW5lIEkyQ19YRkVSX0VSUk9SX0lUICAgICAgICh1aW50MTZfdCkoMHgwMDEwVSkgICAvKiBCaXQgZGVmaW5pdGlvbiB0byBtYW5hZ2UgYWRkaXRpb24gb2YgZ2xvYmFsIEVycm9yIGFuZCBOQUNLIHRyZWF0bWVudCAqLworI2RlZmluZSBJMkNfWEZFUl9DUExUX0lUICAgICAgICAodWludDE2X3QpKDB4MDAyMFUpICAgLyogQml0IGRlZmluaXRpb24gdG8gbWFuYWdlIG9ubHkgU1RPUCBldmVuZW1lbnQgKi8KKyNkZWZpbmUgSTJDX1hGRVJfUkVMT0FEX0lUICAgICAgKHVpbnQxNl90KSgweDAwNDBVKSAgIC8qIEJpdCBkZWZpbml0aW9uIHRvIG1hbmFnZSBvbmx5IFJlbG9hZCBvZiBOQllURSAqLwogCiAvKiBQcml2YXRlIGRlZmluZSBTZXF1ZW50aWFsIFRyYW5zZmVyIE9wdGlvbnMgZGVmYXVsdC9yZXNldCB2YWx1ZSAqLwogI2RlZmluZSBJMkNfTk9fT1BUSU9OX0ZSQU1FICAgICAoMHhGRkZGMDAwMFUpCkBAIC00MTAsNiArNDEwLDkgQEAKIHN0YXRpYyB2b2lkIEkyQ19FbmFibGVfSVJRKEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjLCB1aW50MTZfdCBJbnRlcnJ1cHRSZXF1ZXN0KTsKIHN0YXRpYyB2b2lkIEkyQ19EaXNhYmxlX0lSUShJMkNfSGFuZGxlVHlwZURlZiAqaGkyYywgdWludDE2X3QgSW50ZXJydXB0UmVxdWVzdCk7CiAKKy8qIFByaXZhdGUgZnVuY3Rpb24gdG8gdHJlYXQgZGlmZmVyZW50IGVycm9yIGNhbGxiYWNrICovCitzdGF0aWMgdm9pZCBJMkNfVHJlYXRFcnJvckNhbGxiYWNrKEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjKTsKKwogLyogUHJpdmF0ZSBmdW5jdGlvbiB0byBmbHVzaCBUWERSIHJlZ2lzdGVyICovCiBzdGF0aWMgdm9pZCBJMkNfRmx1c2hfVFhEUihJMkNfSGFuZGxlVHlwZURlZiAqaGkyYyk7CiAKQEAgLTMyMDAsNyArMzIwMyw3IEBACiAgICAgICBJMkNfQ29udmVydE90aGVyWGZlck9wdGlvbnMoaGkyYyk7CiAKICAgICAgIC8qIFVwZGF0ZSB4ZmVybW9kZSBhY2NvcmRpbmdseSBpZiBubyByZWxvYWQgaXMgbmVjZXNzYXJ5ICovCi0gICAgICBpZiAoaGkyYy0+WGZlckNvdW50IDwgTUFYX05CWVRFX1NJWkUpCisgICAgICBpZiAoaGkyYy0+WGZlckNvdW50IDw9IE1BWF9OQllURV9TSVpFKQogICAgICAgewogICAgICAgICB4ZmVybW9kZSA9IGhpMmMtPlhmZXJPcHRpb25zOwogICAgICAgfQpAQCAtMzI4NSw3ICszMjg4LDcgQEAKICAgICAgIEkyQ19Db252ZXJ0T3RoZXJYZmVyT3B0aW9ucyhoaTJjKTsKIAogICAgICAgLyogVXBkYXRlIHhmZXJtb2RlIGFjY29yZGluZ2x5IGlmIG5vIHJlbG9hZCBpcyBuZWNlc3NhcnkgKi8KLSAgICAgIGlmIChoaTJjLT5YZmVyQ291bnQgPCBNQVhfTkJZVEVfU0laRSkKKyAgICAgIGlmIChoaTJjLT5YZmVyQ291bnQgPD0gTUFYX05CWVRFX1NJWkUpCiAgICAgICB7CiAgICAgICAgIHhmZXJtb2RlID0gaGkyYy0+WGZlck9wdGlvbnM7CiAgICAgICB9CkBAIC0zNDQ2LDcgKzM0NDksNyBAQAogICAgICAgSTJDX0NvbnZlcnRPdGhlclhmZXJPcHRpb25zKGhpMmMpOwogCiAgICAgICAvKiBVcGRhdGUgeGZlcm1vZGUgYWNjb3JkaW5nbHkgaWYgbm8gcmVsb2FkIGlzIG5lY2Vzc2FyeSAqLwotICAgICAgaWYgKGhpMmMtPlhmZXJDb3VudCA8IE1BWF9OQllURV9TSVpFKQorICAgICAgaWYgKGhpMmMtPlhmZXJDb3VudCA8PSBNQVhfTkJZVEVfU0laRSkKICAgICAgIHsKICAgICAgICAgeGZlcm1vZGUgPSBoaTJjLT5YZmVyT3B0aW9uczsKICAgICAgIH0KQEAgLTM1MzEsNyArMzUzNCw3IEBACiAgICAgICBJMkNfQ29udmVydE90aGVyWGZlck9wdGlvbnMoaGkyYyk7CiAKICAgICAgIC8qIFVwZGF0ZSB4ZmVybW9kZSBhY2NvcmRpbmdseSBpZiBubyByZWxvYWQgaXMgbmVjZXNzYXJ5ICovCi0gICAgICBpZiAoaGkyYy0+WGZlckNvdW50IDwgTUFYX05CWVRFX1NJWkUpCisgICAgICBpZiAoaGkyYy0+WGZlckNvdW50IDw9IE1BWF9OQllURV9TSVpFKQogICAgICAgewogICAgICAgICB4ZmVybW9kZSA9IGhpMmMtPlhmZXJPcHRpb25zOwogICAgICAgfQpAQCAtNDI1MSw5ICs0MjU0LDIxIEBACiAgICAgLyogUHJvY2VzcyBMb2NrZWQgKi8KICAgICBfX0hBTF9MT0NLKGhpMmMpOwogCi0gICAgLyogRGlzYWJsZSBJbnRlcnJ1cHRzICovCi0gICAgSTJDX0Rpc2FibGVfSVJRKGhpMmMsIEkyQ19YRkVSX1JYX0lUKTsKLSAgICBJMkNfRGlzYWJsZV9JUlEoaGkyYywgSTJDX1hGRVJfVFhfSVQpOworICAgIC8qIERpc2FibGUgSW50ZXJydXB0cyBhbmQgU3RvcmUgUHJldmlvdXMgc3RhdGUgKi8KKyAgICBpZiAoaGkyYy0+U3RhdGUgPT0gSEFMX0kyQ19TVEFURV9CVVNZX1RYKQorICAgIHsKKyAgICAgIEkyQ19EaXNhYmxlX0lSUShoaTJjLCBJMkNfWEZFUl9UWF9JVCk7CisgICAgICBoaTJjLT5QcmV2aW91c1N0YXRlID0gSTJDX1NUQVRFX01BU1RFUl9CVVNZX1RYOworICAgIH0KKyAgICBlbHNlIGlmIChoaTJjLT5TdGF0ZSA9PSBIQUxfSTJDX1NUQVRFX0JVU1lfUlgpCisgICAgeworICAgICAgSTJDX0Rpc2FibGVfSVJRKGhpMmMsIEkyQ19YRkVSX1JYX0lUKTsKKyAgICAgIGhpMmMtPlByZXZpb3VzU3RhdGUgPSBJMkNfU1RBVEVfTUFTVEVSX0JVU1lfUlg7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAvKiBEbyBub3RoaW5nICovCisgICAgfQogCiAgICAgLyogU2V0IFN0YXRlIGF0IEhBTF9JMkNfU1RBVEVfQUJPUlQgKi8KICAgICBoaTJjLT5TdGF0ZSA9IEhBTF9JMkNfU1RBVEVfQUJPUlQ7CkBAIC00NzM3LDYgKzQ3NTIsMTMgQEAKICAgLyogUHJvY2VzcyBsb2NrZWQgKi8KICAgX19IQUxfTE9DSyhoaTJjKTsKIAorICAvKiBDaGVjayBpZiBTVE9QRiBpcyBzZXQgKi8KKyAgaWYgKChJMkNfQ0hFQ0tfRkxBRyh0bXBJVEZsYWdzLCBJMkNfRkxBR19TVE9QRikgIT0gUkVTRVQpICYmIChJMkNfQ0hFQ0tfSVRfU09VUkNFKElUU291cmNlcywgSTJDX0lUX1NUT1BJKSAhPSBSRVNFVCkpCisgIHsKKyAgICAvKiBDYWxsIEkyQyBTbGF2ZSBjb21wbGV0ZSBwcm9jZXNzICovCisgICAgSTJDX0lUU2xhdmVDcGx0KGhpMmMsIHRtcElURmxhZ3MpOworICB9CisKICAgaWYgKChJMkNfQ0hFQ0tfRkxBRyh0bXBJVEZsYWdzLCBJMkNfRkxBR19BRikgIT0gUkVTRVQpICYmIChJMkNfQ0hFQ0tfSVRfU09VUkNFKElUU291cmNlcywgSTJDX0lUX05BQ0tJKSAhPSBSRVNFVCkpCiAgIHsKICAgICAvKiBDaGVjayB0aGF0IEkyQyB0cmFuc2ZlciBmaW5pc2hlZCAqLwpAQCAtNDc4OCw5ICs0ODEwLDYgQEAKICAgewogICAgIGlmIChoaTJjLT5YZmVyQ291bnQgPiAwVSkKICAgICB7Ci0gICAgICAvKiBSZW1vdmUgUlhORSBmbGFnIG9uIHRlbXBvcmFyeSB2YXJpYWJsZSBhcyByZWFkIGRvbmUgKi8KLSAgICAgIHRtcElURmxhZ3MgJj0gfkkyQ19GTEFHX1JYTkU7Ci0KICAgICAgIC8qIFJlYWQgZGF0YSBmcm9tIFJYRFIgKi8KICAgICAgICpoaTJjLT5wQnVmZlB0ciA9ICh1aW50OF90KWhpMmMtPkluc3RhbmNlLT5SWERSOwogCkBAIC00ODQ0LDEzICs0ODYzLDYgQEAKICAgICAvKiBOb3RoaW5nIHRvIGRvICovCiAgIH0KIAotICAvKiBDaGVjayBpZiBTVE9QRiBpcyBzZXQgKi8KLSAgaWYgKChJMkNfQ0hFQ0tfRkxBRyh0bXBJVEZsYWdzLCBJMkNfRkxBR19TVE9QRikgIT0gUkVTRVQpICYmIChJMkNfQ0hFQ0tfSVRfU09VUkNFKElUU291cmNlcywgSTJDX0lUX1NUT1BJKSAhPSBSRVNFVCkpCi0gIHsKLSAgICAvKiBDYWxsIEkyQyBTbGF2ZSBjb21wbGV0ZSBwcm9jZXNzICovCi0gICAgSTJDX0lUU2xhdmVDcGx0KGhpMmMsIHRtcElURmxhZ3MpOwotICB9Ci0KICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLwogICBfX0hBTF9VTkxPQ0soaGkyYyk7CiAKQEAgLTUwMDQsMTAgKzUwMTYsMTggQEAKIHsKICAgdWludDMyX3QgdG1wb3B0aW9ucyA9IGhpMmMtPlhmZXJPcHRpb25zOwogICB1aW50MzJfdCB0cmVhdGRtYW5hY2sgPSAwVTsKKyAgSEFMX0kyQ19TdGF0ZVR5cGVEZWYgdG1wc3RhdGU7CiAKICAgLyogUHJvY2VzcyBsb2NrZWQgKi8KICAgX19IQUxfTE9DSyhoaTJjKTsKIAorICAvKiBDaGVjayBpZiBTVE9QRiBpcyBzZXQgKi8KKyAgaWYgKChJMkNfQ0hFQ0tfRkxBRyhJVEZsYWdzLCBJMkNfRkxBR19TVE9QRikgIT0gUkVTRVQpICYmIChJMkNfQ0hFQ0tfSVRfU09VUkNFKElUU291cmNlcywgSTJDX0lUX1NUT1BJKSAhPSBSRVNFVCkpCisgIHsKKyAgICAvKiBDYWxsIEkyQyBTbGF2ZSBjb21wbGV0ZSBwcm9jZXNzICovCisgICAgSTJDX0lUU2xhdmVDcGx0KGhpMmMsIElURmxhZ3MpOworICB9CisKICAgaWYgKChJMkNfQ0hFQ0tfRkxBRyhJVEZsYWdzLCBJMkNfRkxBR19BRikgIT0gUkVTRVQpICYmIChJMkNfQ0hFQ0tfSVRfU09VUkNFKElUU291cmNlcywgSTJDX0lUX05BQ0tJKSAhPSBSRVNFVCkpCiAgIHsKICAgICAvKiBDaGVjayB0aGF0IEkyQyB0cmFuc2ZlciBmaW5pc2hlZCAqLwpAQCAtNTA3NSw4ICs1MDk1LDI0IEBACiAgICAgICAgIC8qIFNldCBFcnJvckNvZGUgY29ycmVzcG9uZGluZyB0byBhIE5vbi1BY2tub3dsZWRnZSAqLwogICAgICAgICBoaTJjLT5FcnJvckNvZGUgfD0gSEFMX0kyQ19FUlJPUl9BRjsKIAorICAgICAgICAvKiBTdG9yZSBjdXJyZW50IGhpMmMtPlN0YXRlLCBzb2x2ZSBNSVNSQTIwMTItUnVsZS0xMy41ICovCisgICAgICAgIHRtcHN0YXRlID0gaGkyYy0+U3RhdGU7CisKICAgICAgICAgaWYgKCh0bXBvcHRpb25zID09IEkyQ19GSVJTVF9GUkFNRSkgfHwgKHRtcG9wdGlvbnMgPT0gSTJDX05FWFRfRlJBTUUpKQogICAgICAgICB7CisgICAgICAgICAgaWYgKCh0bXBzdGF0ZSA9PSBIQUxfSTJDX1NUQVRFX0JVU1lfVFgpIHx8ICh0bXBzdGF0ZSA9PSBIQUxfSTJDX1NUQVRFX0JVU1lfVFhfTElTVEVOKSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBoaTJjLT5QcmV2aW91c1N0YXRlID0gSTJDX1NUQVRFX1NMQVZFX0JVU1lfVFg7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKCh0bXBzdGF0ZSA9PSBIQUxfSTJDX1NUQVRFX0JVU1lfUlgpIHx8ICh0bXBzdGF0ZSA9PSBIQUxfSTJDX1NUQVRFX0JVU1lfUlhfTElTVEVOKSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBoaTJjLT5QcmV2aW91c1N0YXRlID0gSTJDX1NUQVRFX1NMQVZFX0JVU1lfUlg7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgICAvKiBEbyBub3RoaW5nICovCisgICAgICAgICAgfQorCiAgICAgICAgICAgLyogQ2FsbCB0aGUgY29ycmVzcG9uZGluZyBjYWxsYmFjayB0byBpbmZvcm0gdXBwZXIgbGF5ZXIgb2YgRW5kIG9mIFRyYW5zZmVyICovCiAgICAgICAgICAgSTJDX0lURXJyb3IoaGkyYywgaGkyYy0+RXJyb3JDb2RlKTsKICAgICAgICAgfQpAQCAtNTA5MiwxMSArNTEyOCw2IEBACiAgIHsKICAgICBJMkNfSVRBZGRyQ3BsdChoaTJjLCBJVEZsYWdzKTsKICAgfQotICBlbHNlIGlmICgoSTJDX0NIRUNLX0ZMQUcoSVRGbGFncywgSTJDX0ZMQUdfU1RPUEYpICE9IFJFU0VUKSAmJiAoSTJDX0NIRUNLX0lUX1NPVVJDRShJVFNvdXJjZXMsIEkyQ19JVF9TVE9QSSkgIT0gUkVTRVQpKQotICB7Ci0gICAgLyogQ2FsbCBJMkMgU2xhdmUgY29tcGxldGUgcHJvY2VzcyAqLwotICAgIEkyQ19JVFNsYXZlQ3BsdChoaTJjLCBJVEZsYWdzKTsKLSAgfQogICBlbHNlCiAgIHsKICAgICAvKiBOb3RoaW5nIHRvIGRvICovCkBAIC01MzcwLDkgKzU0MDEsMjcgQEAKICAgKi8KIHN0YXRpYyB2b2lkIEkyQ19JVFNsYXZlU2VxQ3BsdChJMkNfSGFuZGxlVHlwZURlZiAqaGkyYykKIHsKKyAgdWludDMyX3QgdG1wY3IxdmFsdWUgPSBSRUFEX1JFRyhoaTJjLT5JbnN0YW5jZS0+Q1IxKTsKKwogICAvKiBSZXNldCBJMkMgaGFuZGxlIG1vZGUgKi8KICAgaGkyYy0+TW9kZSA9IEhBTF9JMkNfTU9ERV9OT05FOwogCisgIC8qIElmIGEgRE1BIGlzIG9uZ29pbmcsIFVwZGF0ZSBoYW5kbGUgc2l6ZSBjb250ZXh0ICovCisgIGlmIChJMkNfQ0hFQ0tfSVRfU09VUkNFKHRtcGNyMXZhbHVlLCBJMkNfQ1IxX1RYRE1BRU4pICE9IFJFU0VUKQorICB7CisgICAgLyogRGlzYWJsZSBETUEgUmVxdWVzdCAqLworICAgIGhpMmMtPkluc3RhbmNlLT5DUjEgJj0gfkkyQ19DUjFfVFhETUFFTjsKKyAgfQorICBlbHNlIGlmIChJMkNfQ0hFQ0tfSVRfU09VUkNFKHRtcGNyMXZhbHVlLCBJMkNfQ1IxX1JYRE1BRU4pICE9IFJFU0VUKQorICB7CisgICAgLyogRGlzYWJsZSBETUEgUmVxdWVzdCAqLworICAgIGhpMmMtPkluc3RhbmNlLT5DUjEgJj0gfkkyQ19DUjFfUlhETUFFTjsKKyAgfQorICBlbHNlCisgIHsKKyAgICAvKiBEbyBub3RoaW5nICovCisgIH0KKwogICBpZiAoaGkyYy0+U3RhdGUgPT0gSEFMX0kyQ19TVEFURV9CVVNZX1RYX0xJU1RFTikKICAgewogICAgIC8qIFJlbW92ZSBIQUxfSTJDX1NUQVRFX1NMQVZFX0JVU1lfVFgsIGtlZXAgb25seSBIQUxfSTJDX1NUQVRFX0xJU1RFTiAqLwpAQCAtNTQyNywxOSArNTQ3NiwzNiBAQAogc3RhdGljIHZvaWQgSTJDX0lUTWFzdGVyQ3BsdChJMkNfSGFuZGxlVHlwZURlZiAqaGkyYywgdWludDMyX3QgSVRGbGFncykKIHsKICAgdWludDMyX3QgdG1wZXJyb3I7CisgIHVpbnQzMl90IHRtcElURmxhZ3MgPSBJVEZsYWdzOworICBfX0lPIHVpbnQzMl90IHRtcHJlZzsKIAogICAvKiBDbGVhciBTVE9QIEZsYWcgKi8KICAgX19IQUxfSTJDX0NMRUFSX0ZMQUcoaGkyYywgSTJDX0ZMQUdfU1RPUEYpOwogCisgIC8qIERpc2FibGUgSW50ZXJydXB0cyBhbmQgU3RvcmUgUHJldmlvdXMgc3RhdGUgKi8KKyAgaWYgKGhpMmMtPlN0YXRlID09IEhBTF9JMkNfU1RBVEVfQlVTWV9UWCkKKyAgeworICAgIEkyQ19EaXNhYmxlX0lSUShoaTJjLCBJMkNfWEZFUl9UWF9JVCk7CisgICAgaGkyYy0+UHJldmlvdXNTdGF0ZSA9IEkyQ19TVEFURV9NQVNURVJfQlVTWV9UWDsKKyAgfQorICBlbHNlIGlmIChoaTJjLT5TdGF0ZSA9PSBIQUxfSTJDX1NUQVRFX0JVU1lfUlgpCisgIHsKKyAgICBJMkNfRGlzYWJsZV9JUlEoaGkyYywgSTJDX1hGRVJfUlhfSVQpOworICAgIGhpMmMtPlByZXZpb3VzU3RhdGUgPSBJMkNfU1RBVEVfTUFTVEVSX0JVU1lfUlg7CisgIH0KKyAgZWxzZQorICB7CisgICAgLyogRG8gbm90aGluZyAqLworICB9CisKICAgLyogQ2xlYXIgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAyICovCiAgIEkyQ19SRVNFVF9DUjIoaGkyYyk7CiAKICAgLyogUmVzZXQgaGFuZGxlIHBhcmFtZXRlcnMgKi8KLSAgaGkyYy0+UHJldmlvdXNTdGF0ZSA9IEkyQ19TVEFURV9OT05FOwogICBoaTJjLT5YZmVySVNSICAgICAgID0gTlVMTDsKICAgaGkyYy0+WGZlck9wdGlvbnMgICA9IEkyQ19OT19PUFRJT05fRlJBTUU7CiAKLSAgaWYgKEkyQ19DSEVDS19GTEFHKElURmxhZ3MsIEkyQ19GTEFHX0FGKSAhPSBSRVNFVCkKKyAgaWYgKEkyQ19DSEVDS19GTEFHKHRtcElURmxhZ3MsIEkyQ19GTEFHX0FGKSAhPSBSRVNFVCkKICAgewogICAgIC8qIENsZWFyIE5BQ0sgRmxhZyAqLwogICAgIF9fSEFMX0kyQ19DTEVBUl9GTEFHKGhpMmMsIEkyQ19GTEFHX0FGKTsKQEAgLTU0NDgsMTIgKzU1MTQsMTcgQEAKICAgICBoaTJjLT5FcnJvckNvZGUgfD0gSEFMX0kyQ19FUlJPUl9BRjsKICAgfQogCisgIC8qIEZldGNoIExhc3QgcmVjZWl2ZSBkYXRhIGlmIGFueSAqLworICBpZiAoKGhpMmMtPlN0YXRlID09IEhBTF9JMkNfU1RBVEVfQUJPUlQpICYmIChJMkNfQ0hFQ0tfRkxBRyh0bXBJVEZsYWdzLCBJMkNfRkxBR19SWE5FKSAhPSBSRVNFVCkpCisgIHsKKyAgICAvKiBSZWFkIGRhdGEgZnJvbSBSWERSICovCisgICAgdG1wcmVnID0gKHVpbnQ4X3QpaGkyYy0+SW5zdGFuY2UtPlJYRFI7CisgICAgVU5VU0VEKHRtcHJlZyk7CisgIH0KKwogICAvKiBGbHVzaCBUWCByZWdpc3RlciAqLwogICBJMkNfRmx1c2hfVFhEUihoaTJjKTsKIAotICAvKiBEaXNhYmxlIEludGVycnVwdHMgKi8KLSAgSTJDX0Rpc2FibGVfSVJRKGhpMmMsIEkyQ19YRkVSX1RYX0lUIHwgSTJDX1hGRVJfUlhfSVQpOwotCiAgIC8qIFN0b3JlIGN1cnJlbnQgdm9sYXRpbGUgaGkyYy0+RXJyb3JDb2RlLCBtaXNyYSBydWxlICovCiAgIHRtcGVycm9yID0gaGkyYy0+RXJyb3JDb2RlOwogCkBAIC01NDY3LDYgKzU1MzgsNyBAQAogICBlbHNlIGlmIChoaTJjLT5TdGF0ZSA9PSBIQUxfSTJDX1NUQVRFX0JVU1lfVFgpCiAgIHsKICAgICBoaTJjLT5TdGF0ZSA9IEhBTF9JMkNfU1RBVEVfUkVBRFk7CisgICAgaGkyYy0+UHJldmlvdXNTdGF0ZSA9IEkyQ19TVEFURV9OT05FOwogCiAgICAgaWYgKGhpMmMtPk1vZGUgPT0gSEFMX0kyQ19NT0RFX01FTSkKICAgICB7CkBAIC01NTAxLDYgKzU1NzMsNyBAQAogICBlbHNlIGlmIChoaTJjLT5TdGF0ZSA9PSBIQUxfSTJDX1NUQVRFX0JVU1lfUlgpCiAgIHsKICAgICBoaTJjLT5TdGF0ZSA9IEhBTF9JMkNfU1RBVEVfUkVBRFk7CisgICAgaGkyYy0+UHJldmlvdXNTdGF0ZSA9IEkyQ19TVEFURV9OT05FOwogCiAgICAgaWYgKGhpMmMtPk1vZGUgPT0gSEFMX0kyQ19NT0RFX01FTSkKICAgICB7CkBAIC01NTQ3LDEyICs1NjIwLDI2IEBACiB7CiAgIHVpbnQzMl90IHRtcGNyMXZhbHVlID0gUkVBRF9SRUcoaGkyYy0+SW5zdGFuY2UtPkNSMSk7CiAgIHVpbnQzMl90IHRtcElURmxhZ3MgPSBJVEZsYWdzOworICBIQUxfSTJDX1N0YXRlVHlwZURlZiB0bXBzdGF0ZSA9IGhpMmMtPlN0YXRlOwogCiAgIC8qIENsZWFyIFNUT1AgRmxhZyAqLwogICBfX0hBTF9JMkNfQ0xFQVJfRkxBRyhoaTJjLCBJMkNfRkxBR19TVE9QRik7CiAKLSAgLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cyAqLwotICBJMkNfRGlzYWJsZV9JUlEoaGkyYywgSTJDX1hGRVJfTElTVEVOX0lUIHwgSTJDX1hGRVJfVFhfSVQgfCBJMkNfWEZFUl9SWF9JVCk7CisgIC8qIERpc2FibGUgSW50ZXJydXB0cyBhbmQgU3RvcmUgUHJldmlvdXMgc3RhdGUgKi8KKyAgaWYgKCh0bXBzdGF0ZSA9PSBIQUxfSTJDX1NUQVRFX0JVU1lfVFgpIHx8ICh0bXBzdGF0ZSA9PSBIQUxfSTJDX1NUQVRFX0JVU1lfVFhfTElTVEVOKSkKKyAgeworICAgIEkyQ19EaXNhYmxlX0lSUShoaTJjLCBJMkNfWEZFUl9MSVNURU5fSVQgfCBJMkNfWEZFUl9UWF9JVCk7CisgICAgaGkyYy0+UHJldmlvdXNTdGF0ZSA9IEkyQ19TVEFURV9TTEFWRV9CVVNZX1RYOworICB9CisgIGVsc2UgaWYgKCh0bXBzdGF0ZSA9PSBIQUxfSTJDX1NUQVRFX0JVU1lfUlgpIHx8ICh0bXBzdGF0ZSA9PSBIQUxfSTJDX1NUQVRFX0JVU1lfUlhfTElTVEVOKSkKKyAgeworICAgIEkyQ19EaXNhYmxlX0lSUShoaTJjLCBJMkNfWEZFUl9MSVNURU5fSVQgfCBJMkNfWEZFUl9SWF9JVCk7CisgICAgaGkyYy0+UHJldmlvdXNTdGF0ZSA9IEkyQ19TVEFURV9TTEFWRV9CVVNZX1JYOworICB9CisgIGVsc2UKKyAgeworICAgIC8qIERvIG5vdGhpbmcgKi8KKyAgfQogCiAgIC8qIERpc2FibGUgQWRkcmVzcyBBY2tub3dsZWRnZSAqLwogICBoaTJjLT5JbnN0YW5jZS0+Q1IyIHw9IEkyQ19DUjJfTkFDSzsKQEAgLTU1NjYsNiArNTY1Myw5IEBACiAgIC8qIElmIGEgRE1BIGlzIG9uZ29pbmcsIFVwZGF0ZSBoYW5kbGUgc2l6ZSBjb250ZXh0ICovCiAgIGlmIChJMkNfQ0hFQ0tfSVRfU09VUkNFKHRtcGNyMXZhbHVlLCBJMkNfQ1IxX1RYRE1BRU4pICE9IFJFU0VUKQogICB7CisgICAgLyogRGlzYWJsZSBETUEgUmVxdWVzdCAqLworICAgIGhpMmMtPkluc3RhbmNlLT5DUjEgJj0gfkkyQ19DUjFfVFhETUFFTjsKKwogICAgIGlmIChoaTJjLT5oZG1hdHggIT0gTlVMTCkKICAgICB7CiAgICAgICBoaTJjLT5YZmVyQ291bnQgPSAodWludDE2X3QpX19IQUxfRE1BX0dFVF9DT1VOVEVSKGhpMmMtPmhkbWF0eCk7CkBAIC01NTczLDYgKzU2NjMsOSBAQAogICB9CiAgIGVsc2UgaWYgKEkyQ19DSEVDS19JVF9TT1VSQ0UodG1wY3IxdmFsdWUsIEkyQ19DUjFfUlhETUFFTikgIT0gUkVTRVQpCiAgIHsKKyAgICAvKiBEaXNhYmxlIERNQSBSZXF1ZXN0ICovCisgICAgaGkyYy0+SW5zdGFuY2UtPkNSMSAmPSB+STJDX0NSMV9SWERNQUVOOworCiAgICAgaWYgKGhpMmMtPmhkbWFyeCAhPSBOVUxMKQogICAgIHsKICAgICAgIGhpMmMtPlhmZXJDb3VudCA9ICh1aW50MTZfdClfX0hBTF9ETUFfR0VUX0NPVU5URVIoaGkyYy0+aGRtYXJ4KTsKQEAgLTU2MDksNyArNTcwMiw2IEBACiAgICAgaGkyYy0+RXJyb3JDb2RlIHw9IEhBTF9JMkNfRVJST1JfQUY7CiAgIH0KIAotICBoaTJjLT5QcmV2aW91c1N0YXRlID0gSTJDX1NUQVRFX05PTkU7CiAgIGhpMmMtPk1vZGUgPSBIQUxfSTJDX01PREVfTk9ORTsKICAgaGkyYy0+WGZlcklTUiA9IE5VTEw7CiAKQEAgLTU2MzIsNiArNTcyNCw3IEBACiAKICAgICBoaTJjLT5YZmVyT3B0aW9ucyA9IEkyQ19OT19PUFRJT05fRlJBTUU7CiAgICAgaGkyYy0+U3RhdGUgPSBIQUxfSTJDX1NUQVRFX1JFQURZOworICAgIGhpMmMtPlByZXZpb3VzU3RhdGUgPSBJMkNfU1RBVEVfTk9ORTsKIAogICAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KICAgICBfX0hBTF9VTkxPQ0soaGkyYyk7CkBAIC01NjQ3LDYgKzU3NDAsNyBAQAogICBlbHNlIGlmIChoaTJjLT5TdGF0ZSA9PSBIQUxfSTJDX1NUQVRFX0JVU1lfUlgpCiAgIHsKICAgICBoaTJjLT5TdGF0ZSA9IEhBTF9JMkNfU1RBVEVfUkVBRFk7CisgICAgaGkyYy0+UHJldmlvdXNTdGF0ZSA9IEkyQ19TVEFURV9OT05FOwogCiAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLwogICAgIF9fSEFMX1VOTE9DSyhoaTJjKTsKQEAgLTU2NjEsNiArNTc1NSw3IEBACiAgIGVsc2UKICAgewogICAgIGhpMmMtPlN0YXRlID0gSEFMX0kyQ19TVEFURV9SRUFEWTsKKyAgICBoaTJjLT5QcmV2aW91c1N0YXRlID0gSTJDX1NUQVRFX05PTkU7CiAKICAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCiAgICAgX19IQUxfVU5MT0NLKGhpMmMpOwpAQCAtNTczNCw2ICs1ODI5LDcgQEAKIHN0YXRpYyB2b2lkIEkyQ19JVEVycm9yKEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjLCB1aW50MzJfdCBFcnJvckNvZGUpCiB7CiAgIEhBTF9JMkNfU3RhdGVUeXBlRGVmIHRtcHN0YXRlID0gaGkyYy0+U3RhdGU7CisgIHVpbnQzMl90IHRtcHByZXZpb3Vzc3RhdGU7CiAKICAgLyogUmVzZXQgaGFuZGxlIHBhcmFtZXRlcnMgKi8KICAgaGkyYy0+TW9kZSAgICAgICAgICA9IEhBTF9JMkNfTU9ERV9OT05FOwpAQCAtNTc1Myw3ICs1ODQ5LDYgQEAKIAogICAgIC8qIGtlZXAgSEFMX0kyQ19TVEFURV9MSVNURU4gaWYgc2V0ICovCiAgICAgaGkyYy0+U3RhdGUgICAgICAgICA9IEhBTF9JMkNfU1RBVEVfTElTVEVOOwotICAgIGhpMmMtPlByZXZpb3VzU3RhdGUgPSBJMkNfU1RBVEVfTk9ORTsKICAgICBoaTJjLT5YZmVySVNSICAgICAgID0gSTJDX1NsYXZlX0lTUl9JVDsKICAgfQogICBlbHNlCkBAIC01NzY4LDE2ICs1ODYzLDE5IEBACiAgICAgICAvKiBTZXQgSEFMX0kyQ19TVEFURV9SRUFEWSAqLwogICAgICAgaGkyYy0+U3RhdGUgICAgICAgICA9IEhBTF9JMkNfU1RBVEVfUkVBRFk7CiAgICAgfQotICAgIGhpMmMtPlByZXZpb3VzU3RhdGUgPSBJMkNfU1RBVEVfTk9ORTsKICAgICBoaTJjLT5YZmVySVNSICAgICAgID0gTlVMTDsKICAgfQogCiAgIC8qIEFib3J0IERNQSBUWCB0cmFuc2ZlciBpZiBhbnkgKi8KLSAgaWYgKChoaTJjLT5JbnN0YW5jZS0+Q1IxICYgSTJDX0NSMV9UWERNQUVOKSA9PSBJMkNfQ1IxX1RYRE1BRU4pCisgIHRtcHByZXZpb3Vzc3RhdGUgPSBoaTJjLT5QcmV2aW91c1N0YXRlOworICBpZiAoKGhpMmMtPmhkbWF0eCAhPSBOVUxMKSAmJiAoKHRtcHByZXZpb3Vzc3RhdGUgPT0gSTJDX1NUQVRFX01BU1RFUl9CVVNZX1RYKSB8fCAodG1wcHJldmlvdXNzdGF0ZSA9PSBJMkNfU1RBVEVfU0xBVkVfQlVTWV9UWCkpKQogICB7Ci0gICAgaGkyYy0+SW5zdGFuY2UtPkNSMSAmPSB+STJDX0NSMV9UWERNQUVOOworICAgIGlmICgoaGkyYy0+SW5zdGFuY2UtPkNSMSAmIEkyQ19DUjFfVFhETUFFTikgPT0gSTJDX0NSMV9UWERNQUVOKQorICAgIHsKKyAgICAgIGhpMmMtPkluc3RhbmNlLT5DUjEgJj0gfkkyQ19DUjFfVFhETUFFTjsKKyAgICB9CiAKLSAgICBpZiAoaGkyYy0+aGRtYXR4ICE9IE5VTEwpCisgICAgaWYgKEhBTF9ETUFfR2V0U3RhdGUoaGkyYy0+aGRtYXR4KSAhPSBIQUxfRE1BX1NUQVRFX1JFQURZKQogICAgIHsKICAgICAgIC8qIFNldCB0aGUgSTJDIERNQSBBYm9ydCBjYWxsYmFjayA6CiAgICAgICAgd2lsbCBsZWFkIHRvIGNhbGwgSEFMX0kyQ19FcnJvckNhbGxiYWNrKCkgYXQgZW5kIG9mIERNQSBhYm9ydCBwcm9jZWR1cmUgKi8KQEAgLTU3OTMsMTMgKzU4OTEsMjAgQEAKICAgICAgICAgaGkyYy0+aGRtYXR4LT5YZmVyQWJvcnRDYWxsYmFjayhoaTJjLT5oZG1hdHgpOwogICAgICAgfQogICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgSTJDX1RyZWF0RXJyb3JDYWxsYmFjayhoaTJjKTsKKyAgICB9CiAgIH0KICAgLyogQWJvcnQgRE1BIFJYIHRyYW5zZmVyIGlmIGFueSAqLwotICBlbHNlIGlmICgoaGkyYy0+SW5zdGFuY2UtPkNSMSAmIEkyQ19DUjFfUlhETUFFTikgPT0gSTJDX0NSMV9SWERNQUVOKQorICBlbHNlIGlmICgoaGkyYy0+aGRtYXJ4ICE9IE5VTEwpICYmICgodG1wcHJldmlvdXNzdGF0ZSA9PSBJMkNfU1RBVEVfTUFTVEVSX0JVU1lfUlgpIHx8ICh0bXBwcmV2aW91c3N0YXRlID09IEkyQ19TVEFURV9TTEFWRV9CVVNZX1JYKSkpCiAgIHsKLSAgICBoaTJjLT5JbnN0YW5jZS0+Q1IxICY9IH5JMkNfQ1IxX1JYRE1BRU47CisgICAgaWYgKChoaTJjLT5JbnN0YW5jZS0+Q1IxICYgSTJDX0NSMV9SWERNQUVOKSA9PSBJMkNfQ1IxX1JYRE1BRU4pCisgICAgeworICAgICAgaGkyYy0+SW5zdGFuY2UtPkNSMSAmPSB+STJDX0NSMV9SWERNQUVOOworICAgIH0KIAotICAgIGlmIChoaTJjLT5oZG1hcnggIT0gTlVMTCkKKyAgICBpZiAoSEFMX0RNQV9HZXRTdGF0ZShoaTJjLT5oZG1hcngpICE9IEhBTF9ETUFfU1RBVEVfUkVBRFkpCiAgICAgewogICAgICAgLyogU2V0IHRoZSBJMkMgRE1BIEFib3J0IGNhbGxiYWNrIDoKICAgICAgICAgd2lsbCBsZWFkIHRvIGNhbGwgSEFMX0kyQ19FcnJvckNhbGxiYWNrKCkgYXQgZW5kIG9mIERNQSBhYm9ydCBwcm9jZWR1cmUgKi8KQEAgLTU4MTUsMTAgKzU5MjAsMjggQEAKICAgICAgICAgaGkyYy0+aGRtYXJ4LT5YZmVyQWJvcnRDYWxsYmFjayhoaTJjLT5oZG1hcngpOwogICAgICAgfQogICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgSTJDX1RyZWF0RXJyb3JDYWxsYmFjayhoaTJjKTsKKyAgICB9CiAgIH0KLSAgZWxzZSBpZiAoaGkyYy0+U3RhdGUgPT0gSEFMX0kyQ19TVEFURV9BQk9SVCkKKyAgZWxzZQorICB7CisgICAgSTJDX1RyZWF0RXJyb3JDYWxsYmFjayhoaTJjKTsKKyAgfQorfQorCisvKioKKyAgKiBAYnJpZWYgIEkyQyBFcnJvciBjYWxsYmFjayB0cmVhdG1lbnQuCisgICogQHBhcmFtICBoaTJjIEkyQyBoYW5kbGUuCisgICogQHJldHZhbCBOb25lCisgICovCitzdGF0aWMgdm9pZCBJMkNfVHJlYXRFcnJvckNhbGxiYWNrKEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjKQoreworICBpZiAoaGkyYy0+U3RhdGUgPT0gSEFMX0kyQ19TVEFURV9BQk9SVCkKICAgewogICAgIGhpMmMtPlN0YXRlID0gSEFMX0kyQ19TVEFURV9SRUFEWTsKKyAgICBoaTJjLT5QcmV2aW91c1N0YXRlID0gSTJDX1NUQVRFX05PTkU7CiAKICAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCiAgICAgX19IQUxfVU5MT0NLKGhpMmMpOwpAQCAtNTgzMiw2ICs1OTU1LDggQEAKICAgfQogICBlbHNlCiAgIHsKKyAgICBoaTJjLT5QcmV2aW91c1N0YXRlID0gSTJDX1NUQVRFX05PTkU7CisKICAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCiAgICAgX19IQUxfVU5MT0NLKGhpMmMpOwogCkBAIC02MDQyLDMwICs2MTY3LDE2IEBACiAgIEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjID0gKEkyQ19IYW5kbGVUeXBlRGVmICopKCgoRE1BX0hhbmRsZVR5cGVEZWYgKiloZG1hKS0+UGFyZW50KTsgLyogRGVyb2dhdGlvbiBNSVNSQUMyMDEyLVJ1bGUtMTEuNSAqLwogCiAgIC8qIFJlc2V0IEFib3J0Q3BsdENhbGxiYWNrICovCi0gIGhpMmMtPmhkbWF0eC0+WGZlckFib3J0Q2FsbGJhY2sgPSBOVUxMOwotICBoaTJjLT5oZG1hcngtPlhmZXJBYm9ydENhbGxiYWNrID0gTlVMTDsKLQotICAvKiBDaGVjayBpZiBjb21lIGZyb20gYWJvcnQgZnJvbSB1c2VyICovCi0gIGlmIChoaTJjLT5TdGF0ZSA9PSBIQUxfSTJDX1NUQVRFX0FCT1JUKQorICBpZiAoaGkyYy0+aGRtYXR4ICE9IE5VTEwpCiAgIHsKLSAgICBoaTJjLT5TdGF0ZSA9IEhBTF9JMkNfU1RBVEVfUkVBRFk7Ci0KLSAgICAvKiBDYWxsIHRoZSBjb3JyZXNwb25kaW5nIGNhbGxiYWNrIHRvIGluZm9ybSB1cHBlciBsYXllciBvZiBFbmQgb2YgVHJhbnNmZXIgKi8KLSNpZiAoVVNFX0hBTF9JMkNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCi0gICAgaGkyYy0+QWJvcnRDcGx0Q2FsbGJhY2soaGkyYyk7Ci0jZWxzZQotICAgIEhBTF9JMkNfQWJvcnRDcGx0Q2FsbGJhY2soaGkyYyk7Ci0jZW5kaWYgLyogVVNFX0hBTF9JMkNfUkVHSVNURVJfQ0FMTEJBQ0tTICovCisgICAgaGkyYy0+aGRtYXR4LT5YZmVyQWJvcnRDYWxsYmFjayA9IE5VTEw7CiAgIH0KLSAgZWxzZQorICBpZiAoaGkyYy0+aGRtYXJ4ICE9IE5VTEwpCiAgIHsKLSAgICAvKiBDYWxsIHRoZSBjb3JyZXNwb25kaW5nIGNhbGxiYWNrIHRvIGluZm9ybSB1cHBlciBsYXllciBvZiBFbmQgb2YgVHJhbnNmZXIgKi8KLSNpZiAoVVNFX0hBTF9JMkNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCi0gICAgaGkyYy0+RXJyb3JDYWxsYmFjayhoaTJjKTsKLSNlbHNlCi0gICAgSEFMX0kyQ19FcnJvckNhbGxiYWNrKGhpMmMpOwotI2VuZGlmIC8qIFVTRV9IQUxfSTJDX1JFR0lTVEVSX0NBTExCQUNLUyAqLworICAgIGhpMmMtPmhkbWFyeC0+WGZlckFib3J0Q2FsbGJhY2sgPSBOVUxMOwogICB9CisKKyAgSTJDX1RyZWF0RXJyb3JDYWxsYmFjayhoaTJjKTsKIH0KIAogLyoqCkBAIC02MzQyLDE5ICs2NDUzLDE5IEBACiAgICAgICB0bXBpc3IgfD0gSTJDX0lUX0FERFJJIHwgSTJDX0lUX1NUT1BJIHwgSTJDX0lUX05BQ0tJIHwgSTJDX0lUX0VSUkk7CiAgICAgfQogCi0gICAgaWYgKChJbnRlcnJ1cHRSZXF1ZXN0ICYgSTJDX1hGRVJfRVJST1JfSVQpID09IEkyQ19YRkVSX0VSUk9SX0lUKQorICAgIGlmIChJbnRlcnJ1cHRSZXF1ZXN0ID09IEkyQ19YRkVSX0VSUk9SX0lUKQogICAgIHsKICAgICAgIC8qIEVuYWJsZSBFUlIgYW5kIE5BQ0sgaW50ZXJydXB0cyAqLwogICAgICAgdG1waXNyIHw9IEkyQ19JVF9FUlJJIHwgSTJDX0lUX05BQ0tJOwogICAgIH0KIAotICAgIGlmICgoSW50ZXJydXB0UmVxdWVzdCAmIEkyQ19YRkVSX0NQTFRfSVQpID09IEkyQ19YRkVSX0NQTFRfSVQpCisgICAgaWYgKEludGVycnVwdFJlcXVlc3QgPT0gSTJDX1hGRVJfQ1BMVF9JVCkKICAgICB7CiAgICAgICAvKiBFbmFibGUgU1RPUCBpbnRlcnJ1cHRzICovCi0gICAgICB0bXBpc3IgfD0gSTJDX0lUX1NUT1BJOworICAgICAgdG1waXNyIHw9IChJMkNfSVRfU1RPUEkgfCBJMkNfSVRfVENJKTsKICAgICB9CiAKLSAgICBpZiAoKEludGVycnVwdFJlcXVlc3QgJiBJMkNfWEZFUl9SRUxPQURfSVQpID09IEkyQ19YRkVSX1JFTE9BRF9JVCkKKyAgICBpZiAoSW50ZXJydXB0UmVxdWVzdCA9PSBJMkNfWEZFUl9SRUxPQURfSVQpCiAgICAgewogICAgICAgLyogRW5hYmxlIFRDIGludGVycnVwdHMgKi8KICAgICAgIHRtcGlzciB8PSBJMkNfSVRfVENJOwpAQCAtNjM4MCw3ICs2NDkxLDcgQEAKICAgICAgIHRtcGlzciB8PSBJMkNfSVRfRVJSSSB8IEkyQ19JVF9UQ0kgfCBJMkNfSVRfU1RPUEkgfCBJMkNfSVRfTkFDS0kgfCBJMkNfSVRfUlhJOwogICAgIH0KIAotICAgIGlmICgoSW50ZXJydXB0UmVxdWVzdCAmIEkyQ19YRkVSX0NQTFRfSVQpID09IEkyQ19YRkVSX0NQTFRfSVQpCisgICAgaWYgKEludGVycnVwdFJlcXVlc3QgPT0gSTJDX1hGRVJfQ1BMVF9JVCkKICAgICB7CiAgICAgICAvKiBFbmFibGUgU1RPUCBpbnRlcnJ1cHRzICovCiAgICAgICB0bXBpc3IgfD0gSTJDX0lUX1NUT1BJOwpAQCAtNjQzNCwxOSArNjU0NSwxOSBAQAogICAgIHRtcGlzciB8PSBJMkNfSVRfQUREUkkgfCBJMkNfSVRfU1RPUEkgfCBJMkNfSVRfTkFDS0kgfCBJMkNfSVRfRVJSSTsKICAgfQogCi0gIGlmICgoSW50ZXJydXB0UmVxdWVzdCAmIEkyQ19YRkVSX0VSUk9SX0lUKSA9PSBJMkNfWEZFUl9FUlJPUl9JVCkKKyAgaWYgKEludGVycnVwdFJlcXVlc3QgPT0gSTJDX1hGRVJfRVJST1JfSVQpCiAgIHsKICAgICAvKiBFbmFibGUgRVJSIGFuZCBOQUNLIGludGVycnVwdHMgKi8KICAgICB0bXBpc3IgfD0gSTJDX0lUX0VSUkkgfCBJMkNfSVRfTkFDS0k7CiAgIH0KIAotICBpZiAoKEludGVycnVwdFJlcXVlc3QgJiBJMkNfWEZFUl9DUExUX0lUKSA9PSBJMkNfWEZFUl9DUExUX0lUKQorICBpZiAoSW50ZXJydXB0UmVxdWVzdCA9PSBJMkNfWEZFUl9DUExUX0lUKQogICB7CiAgICAgLyogRW5hYmxlIFNUT1AgaW50ZXJydXB0cyAqLwogICAgIHRtcGlzciB8PSBJMkNfSVRfU1RPUEk7CiAgIH0KIAotICBpZiAoKEludGVycnVwdFJlcXVlc3QgJiBJMkNfWEZFUl9SRUxPQURfSVQpID09IEkyQ19YRkVSX1JFTE9BRF9JVCkKKyAgaWYgKEludGVycnVwdFJlcXVlc3QgPT0gSTJDX1hGRVJfUkVMT0FEX0lUKQogICB7CiAgICAgLyogRW5hYmxlIFRDIGludGVycnVwdHMgKi8KICAgICB0bXBpc3IgfD0gSTJDX0lUX1RDSTsKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmc0eHhfaGFsX2kycy5jIGIvU3JjL3N0bTMyZzR4eF9oYWxfaTJzLmMKaW5kZXggOGQ0OTdlMy4uNTY1NDgwYSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZzR4eF9oYWxfaTJzLmMKKysrIGIvU3JjL3N0bTMyZzR4eF9oYWxfaTJzLmMKQEAgLTI2MSw3ICsyNjEsNyBAQAogICB1aW50MzJfdCBpMnNvZGQ7CiAgIHVpbnQzMl90IHBhY2tldGxlbmd0aDsKICAgdWludDMyX3QgdG1wOwotICB1aW50MzJfdCBpMnNjbGs7CisgIHVpbnQzMl90IGkyc2NsayA9IDBVOwogCiAgIC8qIENoZWNrIHRoZSBJMlMgaGFuZGxlIGFsbG9jYXRpb24gKi8KICAgaWYgKGhpMnMgPT0gTlVMTCkKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmc0eHhfaGFsX2xwdGltLmMgYi9TcmMvc3RtMzJnNHh4X2hhbF9scHRpbS5jCmluZGV4IGQ1MTUzOWQuLmU0Zjg4N2YgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmc0eHhfaGFsX2xwdGltLmMKKysrIGIvU3JjL3N0bTMyZzR4eF9oYWxfbHB0aW0uYwpAQCAtMTQzLDcgKzE0Myw3IEBACiAKICAgQGVuZHZlcmJhdGltCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgICogQGF0dGVudGlvbgorICAqIEBhdHRlbnRpb24KICAgKgogICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KQEAgLTE1Miw3ICsxNTIsOCBAQAogICAqIHRoZSAiTGljZW5zZSI7IFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUKICAgKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQ6CiAgICogICAgICAgICAgICAgICAgICAgICAgICBvcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2UKLSAgKiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICovCiAKIC8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xNzMsMTMgKzE3NCwyMSBAQAogCiAvKiBQcml2YXRlIHR5cGVkZWYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogUHJpdmF0ZSBkZWZpbmUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIFByaXZhdGUgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiogQGFkZHRvZ3JvdXAgTFBUSU1fUHJpdmF0ZV9Db25zdGFudHMKKyAgKiBAeworICAqLwogI2RlZmluZSBUSU1FT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDBVTCAvKiBUaW1lb3V0IGlzIDFzICovCisvKioKKyAgKiBAfQorICAqLworCisvKiBQcml2YXRlIG1hY3JvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogUHJpdmF0ZSB2YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgZnVuY3Rpb24gcHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAjaWYgKFVTRV9IQUxfTFBUSU1fUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCiBzdGF0aWMgdm9pZCBMUFRJTV9SZXNldENhbGxiYWNrKExQVElNX0hhbmRsZVR5cGVEZWYgKmxwdGltKTsKICNlbmRpZiAvKiBVU0VfSEFMX0xQVElNX1JFR0lTVEVSX0NBTExCQUNLUyAqLworc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIExQVElNX1dhaXRGb3JGbGFnKExQVElNX0hhbmRsZVR5cGVEZWYgKmhscHRpbSwgdWludDMyX3QgZmxhZyk7CiAKIC8qIEV4cG9ydGVkIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTIyNiwxNiArMjM1LDE5IEBACiAKICAgYXNzZXJ0X3BhcmFtKElTX0xQVElNX0NMT0NLX1NPVVJDRShobHB0aW0tPkluaXQuQ2xvY2suU291cmNlKSk7CiAgIGFzc2VydF9wYXJhbShJU19MUFRJTV9DTE9DS19QUkVTQ0FMRVIoaGxwdGltLT5Jbml0LkNsb2NrLlByZXNjYWxlcikpOwotICBpZiAoKGhscHRpbS0+SW5pdC5DbG9jay5Tb3VyY2UpID09IExQVElNX0NMT0NLU09VUkNFX1VMUFRJTSkKKyAgaWYgKGhscHRpbS0+SW5pdC5DbG9jay5Tb3VyY2UgPT0gTFBUSU1fQ0xPQ0tTT1VSQ0VfVUxQVElNKQogICB7CiAgICAgYXNzZXJ0X3BhcmFtKElTX0xQVElNX0NMT0NLX1BPTEFSSVRZKGhscHRpbS0+SW5pdC5VbHRyYUxvd1Bvd2VyQ2xvY2suUG9sYXJpdHkpKTsKLSAgICBhc3NlcnRfcGFyYW0oSVNfTFBUSU1fQ0xPQ0tfU0FNUExFX1RJTUUoaGxwdGltLT5Jbml0LlVsdHJhTG93UG93ZXJDbG9jay5TYW1wbGVUaW1lKSk7CiAgIH0KICAgYXNzZXJ0X3BhcmFtKElTX0xQVElNX1RSR19TT1VSQ0UoaGxwdGltLT5Jbml0LlRyaWdnZXIuU291cmNlKSk7Ci0gIGlmICgoaGxwdGltLT5Jbml0LlRyaWdnZXIuU291cmNlKSAhPSBMUFRJTV9UUklHU09VUkNFX1NPRlRXQVJFKQorICBpZiAoaGxwdGltLT5Jbml0LlRyaWdnZXIuU291cmNlICE9IExQVElNX1RSSUdTT1VSQ0VfU09GVFdBUkUpCisgIHsKKyAgICBhc3NlcnRfcGFyYW0oSVNfTFBUSU1fRVhUX1RSR19QT0xBUklUWShobHB0aW0tPkluaXQuVHJpZ2dlci5BY3RpdmVFZGdlKSk7CisgIH0KKyAgaWYgKGhscHRpbS0+SW5pdC5DbG9jay5Tb3VyY2UgPT0gTFBUSU1fQ0xPQ0tTT1VSQ0VfQVBCQ0xPQ0tfTFBPU0MpCiAgIHsKICAgICBhc3NlcnRfcGFyYW0oSVNfTFBUSU1fVFJJR19TQU1QTEVfVElNRShobHB0aW0tPkluaXQuVHJpZ2dlci5TYW1wbGVUaW1lKSk7Ci0gICAgYXNzZXJ0X3BhcmFtKElTX0xQVElNX0VYVF9UUkdfUE9MQVJJVFkoaGxwdGltLT5Jbml0LlRyaWdnZXIuQWN0aXZlRWRnZSkpOworICAgIGFzc2VydF9wYXJhbShJU19MUFRJTV9DTE9DS19TQU1QTEVfVElNRShobHB0aW0tPkluaXQuVWx0cmFMb3dQb3dlckNsb2NrLlNhbXBsZVRpbWUpKTsKICAgfQogICBhc3NlcnRfcGFyYW0oSVNfTFBUSU1fT1VUUFVUX1BPTEFSSVRZKGhscHRpbS0+SW5pdC5PdXRwdXRQb2xhcml0eSkpOwogICBhc3NlcnRfcGFyYW0oSVNfTFBUSU1fVVBEQVRFX01PREUoaGxwdGltLT5Jbml0LlVwZGF0ZU1vZGUpKTsKQEAgLTI2OSwxMyArMjgxLDE3IEBACiAgIC8qIEdldCB0aGUgTFBUSU14IENGR1IgdmFsdWUgKi8KICAgdG1wY2ZnciA9IGhscHRpbS0+SW5zdGFuY2UtPkNGR1I7CiAKLSAgaWYgKCgoaGxwdGltLT5Jbml0LkNsb2NrLlNvdXJjZSkgPT0gTFBUSU1fQ0xPQ0tTT1VSQ0VfVUxQVElNKSB8fCAoKGhscHRpbS0+SW5pdC5Db3VudGVyU291cmNlKSA9PSBMUFRJTV9DT1VOVEVSU09VUkNFX0VYVEVSTkFMKSkKKyAgaWYgKGhscHRpbS0+SW5pdC5DbG9jay5Tb3VyY2UgPT0gTFBUSU1fQ0xPQ0tTT1VSQ0VfVUxQVElNKQogICB7Ci0gICAgdG1wY2ZnciAmPSAodWludDMyX3QpKH4oTFBUSU1fQ0ZHUl9DS1BPTCB8IExQVElNX0NGR1JfQ0tGTFQpKTsKKyAgICB0bXBjZmdyICY9ICh1aW50MzJfdCkofihMUFRJTV9DRkdSX0NLUE9MKSk7CiAgIH0KLSAgaWYgKChobHB0aW0tPkluaXQuVHJpZ2dlci5Tb3VyY2UpICE9IExQVElNX1RSSUdTT1VSQ0VfU09GVFdBUkUpCisgIGlmIChobHB0aW0tPkluaXQuVHJpZ2dlci5Tb3VyY2UgIT0gTFBUSU1fVFJJR1NPVVJDRV9TT0ZUV0FSRSkKICAgewotICAgIHRtcGNmZ3IgJj0gKHVpbnQzMl90KSh+KExQVElNX0NGR1JfVFJHRkxUIHwgTFBUSU1fQ0ZHUl9UUklHU0VMKSk7CisgICAgdG1wY2ZnciAmPSAodWludDMyX3QpKH4oTFBUSU1fQ0ZHUl9UUklHU0VMKSk7CisgIH0KKyAgaWYgKGhscHRpbS0+SW5pdC5DbG9jay5Tb3VyY2UgPT0gTFBUSU1fQ0xPQ0tTT1VSQ0VfQVBCQ0xPQ0tfTFBPU0MpCisgIHsKKyAgICB0bXBjZmdyICY9ICh1aW50MzJfdCkofihMUFRJTV9DRkdSX1RSR0ZMVCB8IExQVElNX0NGR1JfQ0tGTFQpKTsKICAgfQogCiAgIC8qIENsZWFyIENLU0VMLCBDS1BPTCwgUFJFU0MsIFRSSUdFTiwgVFJHRkxULCBXQVZQT0wsIFBSRUxPQUQgJiBDT1VOVE1PREUgYml0cyAqLwpAQCAtMjg5LDE4ICszMDUsMjggQEAKICAgICAgICAgICAgICAgaGxwdGltLT5Jbml0LlVwZGF0ZU1vZGUgICAgICB8CiAgICAgICAgICAgICAgIGhscHRpbS0+SW5pdC5Db3VudGVyU291cmNlKTsKIAotICBpZiAoKChobHB0aW0tPkluaXQuQ2xvY2suU291cmNlKSA9PSBMUFRJTV9DTE9DS1NPVVJDRV9VTFBUSU0pIHx8ICgoaGxwdGltLT5Jbml0LkNvdW50ZXJTb3VyY2UpID09IExQVElNX0NPVU5URVJTT1VSQ0VfRVhURVJOQUwpKQorICAvKiBHbGl0Y2ggZmlsdGVycyBmb3IgaW50ZXJuYWwgdHJpZ2dlcnMgYW5kICBleHRlcm5hbCBpbnB1dHMgYXJlIGNvbmZpZ3VyZWQKKyAgICogb25seSBpZiBhbiBpbnRlcm5hbCBjbG9jayBzb3VyY2UgaXMgcHJvdmlkZWQgdG8gdGhlIExQVElNCisgICAqLworICBpZiAoaGxwdGltLT5Jbml0LkNsb2NrLlNvdXJjZSA9PSBMUFRJTV9DTE9DS1NPVVJDRV9BUEJDTE9DS19MUE9TQykKICAgewotICAgIHRtcGNmZ3IgfD0gKGhscHRpbS0+SW5pdC5VbHRyYUxvd1Bvd2VyQ2xvY2suUG9sYXJpdHkgfAorICAgIHRtcGNmZ3IgfD0gKGhscHRpbS0+SW5pdC5UcmlnZ2VyLlNhbXBsZVRpbWUgfAogICAgICAgICAgICAgICAgIGhscHRpbS0+SW5pdC5VbHRyYUxvd1Bvd2VyQ2xvY2suU2FtcGxlVGltZSk7CiAgIH0KIAotICBpZiAoKGhscHRpbS0+SW5pdC5UcmlnZ2VyLlNvdXJjZSkgIT0gTFBUSU1fVFJJR1NPVVJDRV9TT0ZUV0FSRSkKKyAgLyogQ29uZmlndXJlIHRoZSBhY3RpdmUgZWRnZSBvciBlZGdlcyB1c2VkIGJ5IHRoZSBjb3VudGVyIG9ubHkgaWYgTFBUSU0gaXMKKyAgICogY2xvY2tlZCBieSBhbiBleHRlcm5hbCBjbG9jayBzb3VyY2UKKyAgICovCisgIGlmIChobHB0aW0tPkluaXQuQ2xvY2suU291cmNlID09IExQVElNX0NMT0NLU09VUkNFX1VMUFRJTSkKKyAgeworICAgIHRtcGNmZ3IgfD0gKGhscHRpbS0+SW5pdC5VbHRyYUxvd1Bvd2VyQ2xvY2suUG9sYXJpdHkpOworICB9CisKKyAgaWYgKGhscHRpbS0+SW5pdC5UcmlnZ2VyLlNvdXJjZSAhPSBMUFRJTV9UUklHU09VUkNFX1NPRlRXQVJFKQogICB7CiAgICAgLyogRW5hYmxlIEV4dGVybmFsIHRyaWdnZXIgYW5kIHNldCB0aGUgdHJpZ2dlciBzb3VyY2UgKi8KLSAgICB0bXBjZmdyIHw9IChobHB0aW0tPkluaXQuVHJpZ2dlci5Tb3VyY2UgICAgIHwKLSAgICAgICAgICAgICAgICBobHB0aW0tPkluaXQuVHJpZ2dlci5BY3RpdmVFZGdlIHwKLSAgICAgICAgICAgICAgICBobHB0aW0tPkluaXQuVHJpZ2dlci5TYW1wbGVUaW1lKTsKKyAgICB0bXBjZmdyIHw9IChobHB0aW0tPkluaXQuVHJpZ2dlci5Tb3VyY2UgfAorICAgICAgICAgICAgICAgIGhscHRpbS0+SW5pdC5UcmlnZ2VyLkFjdGl2ZUVkZ2UpOwogICB9CiAKICAgLyogV3JpdGUgdG8gTFBUSU14IENGR1IgKi8KQEAgLTM0Myw2ICszNjksMTEgQEAKICAgLyogRGlzYWJsZSB0aGUgTFBUSU0gUGVyaXBoZXJhbCBDbG9jayAqLwogICBfX0hBTF9MUFRJTV9ESVNBQkxFKGhscHRpbSk7CiAKKyAgaWYgKEhBTF9MUFRJTV9HZXRTdGF0ZShobHB0aW0pID09IEhBTF9MUFRJTV9TVEFURV9USU1FT1VUKQorICB7CisgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICB9CisKICNpZiAoVVNFX0hBTF9MUFRJTV9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKICAgaWYgKGhscHRpbS0+TXNwRGVJbml0Q2FsbGJhY2sgPT0gTlVMTCkKICAgewpAQCAtNDUxLDEyICs0ODIsMzAgQEAKICAgLyogRW5hYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX0xQVElNX0VOQUJMRShobHB0aW0pOwogCisgIC8qIENsZWFyIGZsYWcgKi8KKyAgX19IQUxfTFBUSU1fQ0xFQVJfRkxBRyhobHB0aW0sIExQVElNX0ZMQUdfQVJST0spOworCiAgIC8qIExvYWQgdGhlIHBlcmlvZCB2YWx1ZSBpbiB0aGUgYXV0b3JlbG9hZCByZWdpc3RlciAqLwogICBfX0hBTF9MUFRJTV9BVVRPUkVMT0FEX1NFVChobHB0aW0sIFBlcmlvZCk7CiAKKyAgLyogV2FpdCBmb3IgdGhlIGNvbXBsZXRpb24gb2YgdGhlIHdyaXRlIG9wZXJhdGlvbiB0byB0aGUgTFBUSU1fQVJSIHJlZ2lzdGVyICovCisgIGlmIChMUFRJTV9XYWl0Rm9yRmxhZyhobHB0aW0sIExQVElNX0ZMQUdfQVJST0spID09IEhBTF9USU1FT1VUKQorICB7CisgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICB9CisKKyAgLyogQ2xlYXIgZmxhZyAqLworICBfX0hBTF9MUFRJTV9DTEVBUl9GTEFHKGhscHRpbSwgTFBUSU1fRkxBR19DTVBPSyk7CisKICAgLyogTG9hZCB0aGUgcHVsc2UgdmFsdWUgaW4gdGhlIGNvbXBhcmUgcmVnaXN0ZXIgKi8KICAgX19IQUxfTFBUSU1fQ09NUEFSRV9TRVQoaGxwdGltLCBQdWxzZSk7CiAKKyAgLyogV2FpdCBmb3IgdGhlIGNvbXBsZXRpb24gb2YgdGhlIHdyaXRlIG9wZXJhdGlvbiB0byB0aGUgTFBUSU1fQ01QIHJlZ2lzdGVyICovCisgIGlmIChMUFRJTV9XYWl0Rm9yRmxhZyhobHB0aW0sIExQVElNX0ZMQUdfQ01QT0spID09IEhBTF9USU1FT1VUKQorICB7CisgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICB9CisKICAgLyogU3RhcnQgdGltZXIgaW4gY29udGludW91cyBtb2RlICovCiAgIF9fSEFMX0xQVElNX1NUQVJUX0NPTlRJTlVPVVMoaGxwdGltKTsKIApAQCAtNDgzLDYgKzUzMiwxMSBAQAogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX0xQVElNX0RJU0FCTEUoaGxwdGltKTsKIAorICBpZiAoSEFMX0xQVElNX0dldFN0YXRlKGhscHRpbSkgPT0gSEFMX0xQVElNX1NUQVRFX1RJTUVPVVQpCisgIHsKKyAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgIH0KKwogICAvKiBDaGFuZ2UgdGhlIFRJTSBzdGF0ZSovCiAgIGhscHRpbS0+U3RhdGUgPSBIQUxfTFBUSU1fU1RBVEVfUkVBRFk7CiAKQEAgLTUxMiw2ICs1NjYsNDEgQEAKICAgLyogUmVzZXQgV0FWRSBiaXQgdG8gc2V0IFBXTSBtb2RlICovCiAgIGhscHRpbS0+SW5zdGFuY2UtPkNGR1IgJj0gfkxQVElNX0NGR1JfV0FWRTsKIAorICAvKiBFbmFibGUgdGhlIFBlcmlwaGVyYWwgKi8KKyAgX19IQUxfTFBUSU1fRU5BQkxFKGhscHRpbSk7CisKKyAgLyogQ2xlYXIgZmxhZyAqLworICBfX0hBTF9MUFRJTV9DTEVBUl9GTEFHKGhscHRpbSwgTFBUSU1fRkxBR19BUlJPSyk7CisKKyAgLyogTG9hZCB0aGUgcGVyaW9kIHZhbHVlIGluIHRoZSBhdXRvcmVsb2FkIHJlZ2lzdGVyICovCisgIF9fSEFMX0xQVElNX0FVVE9SRUxPQURfU0VUKGhscHRpbSwgUGVyaW9kKTsKKworICAvKiBXYWl0IGZvciB0aGUgY29tcGxldGlvbiBvZiB0aGUgd3JpdGUgb3BlcmF0aW9uIHRvIHRoZSBMUFRJTV9BUlIgcmVnaXN0ZXIgKi8KKyAgaWYgKExQVElNX1dhaXRGb3JGbGFnKGhscHRpbSwgTFBUSU1fRkxBR19BUlJPSykgPT0gSEFMX1RJTUVPVVQpCisgIHsKKyAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgIH0KKworICAvKiBDbGVhciBmbGFnICovCisgIF9fSEFMX0xQVElNX0NMRUFSX0ZMQUcoaGxwdGltLCBMUFRJTV9GTEFHX0NNUE9LKTsKKworICAvKiBMb2FkIHRoZSBwdWxzZSB2YWx1ZSBpbiB0aGUgY29tcGFyZSByZWdpc3RlciAqLworICBfX0hBTF9MUFRJTV9DT01QQVJFX1NFVChobHB0aW0sIFB1bHNlKTsKKworICAvKiBXYWl0IGZvciB0aGUgY29tcGxldGlvbiBvZiB0aGUgd3JpdGUgb3BlcmF0aW9uIHRvIHRoZSBMUFRJTV9DTVAgcmVnaXN0ZXIgKi8KKyAgaWYgKExQVElNX1dhaXRGb3JGbGFnKGhscHRpbSwgTFBUSU1fRkxBR19DTVBPSykgPT0gSEFMX1RJTUVPVVQpCisgIHsKKyAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgIH0KKworICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCisgIF9fSEFMX0xQVElNX0RJU0FCTEUoaGxwdGltKTsKKworICBpZiAoSEFMX0xQVElNX0dldFN0YXRlKGhscHRpbSkgPT0gSEFMX0xQVElNX1NUQVRFX1RJTUVPVVQpCisgIHsKKyAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgIH0KKwogICAvKiBFbmFibGUgQXV0b3JlbG9hZCB3cml0ZSBjb21wbGV0ZSBpbnRlcnJ1cHQgKi8KICAgX19IQUxfTFBUSU1fRU5BQkxFX0lUKGhscHRpbSwgTFBUSU1fSVRfQVJST0spOwogCkBAIC01MzQsMTIgKzYyMyw2IEBACiAgIC8qIEVuYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwogICBfX0hBTF9MUFRJTV9FTkFCTEUoaGxwdGltKTsKIAotICAvKiBMb2FkIHRoZSBwZXJpb2QgdmFsdWUgaW4gdGhlIGF1dG9yZWxvYWQgcmVnaXN0ZXIgKi8KLSAgX19IQUxfTFBUSU1fQVVUT1JFTE9BRF9TRVQoaGxwdGltLCBQZXJpb2QpOwotCi0gIC8qIExvYWQgdGhlIHB1bHNlIHZhbHVlIGluIHRoZSBjb21wYXJlIHJlZ2lzdGVyICovCi0gIF9fSEFMX0xQVElNX0NPTVBBUkVfU0VUKGhscHRpbSwgUHVsc2UpOwotCiAgIC8qIFN0YXJ0IHRpbWVyIGluIGNvbnRpbnVvdXMgbW9kZSAqLwogICBfX0hBTF9MUFRJTV9TVEFSVF9DT05USU5VT1VTKGhscHRpbSk7CiAKQEAgLTU2Niw2ICs2NDksMTEgQEAKICAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwogICBfX0hBTF9MUFRJTV9ESVNBQkxFKGhscHRpbSk7CiAKKyAgaWYgKEhBTF9MUFRJTV9HZXRTdGF0ZShobHB0aW0pID09IEhBTF9MUFRJTV9TVEFURV9USU1FT1VUKQorICB7CisgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICB9CisKICAgLyogRGlzYWJsZSBBdXRvcmVsb2FkIHdyaXRlIGNvbXBsZXRlIGludGVycnVwdCAqLwogICBfX0hBTF9MUFRJTV9ESVNBQkxFX0lUKGhscHRpbSwgTFBUSU1fSVRfQVJST0spOwogCkBAIC02MTcsMTIgKzcwNSwzMCBAQAogICAvKiBFbmFibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfTFBUSU1fRU5BQkxFKGhscHRpbSk7CiAKKyAgLyogQ2xlYXIgZmxhZyAqLworICBfX0hBTF9MUFRJTV9DTEVBUl9GTEFHKGhscHRpbSwgTFBUSU1fRkxBR19BUlJPSyk7CisKICAgLyogTG9hZCB0aGUgcGVyaW9kIHZhbHVlIGluIHRoZSBhdXRvcmVsb2FkIHJlZ2lzdGVyICovCiAgIF9fSEFMX0xQVElNX0FVVE9SRUxPQURfU0VUKGhscHRpbSwgUGVyaW9kKTsKIAorICAvKiBXYWl0IGZvciB0aGUgY29tcGxldGlvbiBvZiB0aGUgd3JpdGUgb3BlcmF0aW9uIHRvIHRoZSBMUFRJTV9BUlIgcmVnaXN0ZXIgKi8KKyAgaWYgKExQVElNX1dhaXRGb3JGbGFnKGhscHRpbSwgTFBUSU1fRkxBR19BUlJPSykgPT0gSEFMX1RJTUVPVVQpCisgIHsKKyAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgIH0KKworICAvKiBDbGVhciBmbGFnICovCisgIF9fSEFMX0xQVElNX0NMRUFSX0ZMQUcoaGxwdGltLCBMUFRJTV9GTEFHX0NNUE9LKTsKKwogICAvKiBMb2FkIHRoZSBwdWxzZSB2YWx1ZSBpbiB0aGUgY29tcGFyZSByZWdpc3RlciAqLwogICBfX0hBTF9MUFRJTV9DT01QQVJFX1NFVChobHB0aW0sIFB1bHNlKTsKIAorICAvKiBXYWl0IGZvciB0aGUgY29tcGxldGlvbiBvZiB0aGUgd3JpdGUgb3BlcmF0aW9uIHRvIHRoZSBMUFRJTV9DTVAgcmVnaXN0ZXIgKi8KKyAgaWYgKExQVElNX1dhaXRGb3JGbGFnKGhscHRpbSwgTFBUSU1fRkxBR19DTVBPSykgPT0gSEFMX1RJTUVPVVQpCisgIHsKKyAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgIH0KKwogICAvKiBTdGFydCB0aW1lciBpbiBzaW5nbGUgKG9uZSBzaG90KSBtb2RlICovCiAgIF9fSEFMX0xQVElNX1NUQVJUX1NJTkdMRShobHB0aW0pOwogCkBAIC02NDksNiArNzU1LDExIEBACiAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfTFBUSU1fRElTQUJMRShobHB0aW0pOwogCisgIGlmIChIQUxfTFBUSU1fR2V0U3RhdGUoaGxwdGltKSA9PSBIQUxfTFBUSU1fU1RBVEVfVElNRU9VVCkKKyAgeworICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgfQorCiAgIC8qIENoYW5nZSB0aGUgVElNIHN0YXRlKi8KICAgaGxwdGltLT5TdGF0ZSA9IEhBTF9MUFRJTV9TVEFURV9SRUFEWTsKIApAQCAtNjc4LDYgKzc4OSw0MSBAQAogICAvKiBSZXNldCBXQVZFIGJpdCB0byBzZXQgb25lIHB1bHNlIG1vZGUgKi8KICAgaGxwdGltLT5JbnN0YW5jZS0+Q0ZHUiAmPSB+TFBUSU1fQ0ZHUl9XQVZFOwogCisgIC8qIEVuYWJsZSB0aGUgUGVyaXBoZXJhbCAqLworICBfX0hBTF9MUFRJTV9FTkFCTEUoaGxwdGltKTsKKworICAvKiBDbGVhciBmbGFnICovCisgIF9fSEFMX0xQVElNX0NMRUFSX0ZMQUcoaGxwdGltLCBMUFRJTV9GTEFHX0FSUk9LKTsKKworICAvKiBMb2FkIHRoZSBwZXJpb2QgdmFsdWUgaW4gdGhlIGF1dG9yZWxvYWQgcmVnaXN0ZXIgKi8KKyAgX19IQUxfTFBUSU1fQVVUT1JFTE9BRF9TRVQoaGxwdGltLCBQZXJpb2QpOworCisgIC8qIFdhaXQgZm9yIHRoZSBjb21wbGV0aW9uIG9mIHRoZSB3cml0ZSBvcGVyYXRpb24gdG8gdGhlIExQVElNX0FSUiByZWdpc3RlciAqLworICBpZiAoTFBUSU1fV2FpdEZvckZsYWcoaGxwdGltLCBMUFRJTV9GTEFHX0FSUk9LKSA9PSBIQUxfVElNRU9VVCkKKyAgeworICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgfQorCisgIC8qIENsZWFyIGZsYWcgKi8KKyAgX19IQUxfTFBUSU1fQ0xFQVJfRkxBRyhobHB0aW0sIExQVElNX0ZMQUdfQ01QT0spOworCisgIC8qIExvYWQgdGhlIHB1bHNlIHZhbHVlIGluIHRoZSBjb21wYXJlIHJlZ2lzdGVyICovCisgIF9fSEFMX0xQVElNX0NPTVBBUkVfU0VUKGhscHRpbSwgUHVsc2UpOworCisgIC8qIFdhaXQgZm9yIHRoZSBjb21wbGV0aW9uIG9mIHRoZSB3cml0ZSBvcGVyYXRpb24gdG8gdGhlIExQVElNX0NNUCByZWdpc3RlciAqLworICBpZiAoTFBUSU1fV2FpdEZvckZsYWcoaGxwdGltLCBMUFRJTV9GTEFHX0NNUE9LKSA9PSBIQUxfVElNRU9VVCkKKyAgeworICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgfQorCisgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KKyAgX19IQUxfTFBUSU1fRElTQUJMRShobHB0aW0pOworCisgIGlmIChIQUxfTFBUSU1fR2V0U3RhdGUoaGxwdGltKSA9PSBIQUxfTFBUSU1fU1RBVEVfVElNRU9VVCkKKyAgeworICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgfQorCiAgIC8qIEVuYWJsZSBBdXRvcmVsb2FkIHdyaXRlIGNvbXBsZXRlIGludGVycnVwdCAqLwogICBfX0hBTF9MUFRJTV9FTkFCTEVfSVQoaGxwdGltLCBMUFRJTV9JVF9BUlJPSyk7CiAKQEAgLTcwMCwxMiArODQ2LDYgQEAKICAgLyogRW5hYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX0xQVElNX0VOQUJMRShobHB0aW0pOwogCi0gIC8qIExvYWQgdGhlIHBlcmlvZCB2YWx1ZSBpbiB0aGUgYXV0b3JlbG9hZCByZWdpc3RlciAqLwotICBfX0hBTF9MUFRJTV9BVVRPUkVMT0FEX1NFVChobHB0aW0sIFBlcmlvZCk7Ci0KLSAgLyogTG9hZCB0aGUgcHVsc2UgdmFsdWUgaW4gdGhlIGNvbXBhcmUgcmVnaXN0ZXIgKi8KLSAgX19IQUxfTFBUSU1fQ09NUEFSRV9TRVQoaGxwdGltLCBQdWxzZSk7Ci0KICAgLyogU3RhcnQgdGltZXIgaW4gc2luZ2xlIChvbmUgc2hvdCkgbW9kZSAqLwogICBfX0hBTF9MUFRJTV9TVEFSVF9TSU5HTEUoaGxwdGltKTsKIApAQCAtNzMyLDYgKzg3MiwxMSBAQAogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX0xQVElNX0RJU0FCTEUoaGxwdGltKTsKIAorICBpZiAoSEFMX0xQVElNX0dldFN0YXRlKGhscHRpbSkgPT0gSEFMX0xQVElNX1NUQVRFX1RJTUVPVVQpCisgIHsKKyAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgIH0KKwogICAvKiBEaXNhYmxlIEF1dG9yZWxvYWQgd3JpdGUgY29tcGxldGUgaW50ZXJydXB0ICovCiAgIF9fSEFMX0xQVElNX0RJU0FCTEVfSVQoaGxwdGltLCBMUFRJTV9JVF9BUlJPSyk7CiAKQEAgLTc4MywxMiArOTI4LDMwIEBACiAgIC8qIEVuYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwogICBfX0hBTF9MUFRJTV9FTkFCTEUoaGxwdGltKTsKIAorICAvKiBDbGVhciBmbGFnICovCisgIF9fSEFMX0xQVElNX0NMRUFSX0ZMQUcoaGxwdGltLCBMUFRJTV9GTEFHX0FSUk9LKTsKKwogICAvKiBMb2FkIHRoZSBwZXJpb2QgdmFsdWUgaW4gdGhlIGF1dG9yZWxvYWQgcmVnaXN0ZXIgKi8KICAgX19IQUxfTFBUSU1fQVVUT1JFTE9BRF9TRVQoaGxwdGltLCBQZXJpb2QpOwogCisgIC8qIFdhaXQgZm9yIHRoZSBjb21wbGV0aW9uIG9mIHRoZSB3cml0ZSBvcGVyYXRpb24gdG8gdGhlIExQVElNX0FSUiByZWdpc3RlciAqLworICBpZiAoTFBUSU1fV2FpdEZvckZsYWcoaGxwdGltLCBMUFRJTV9GTEFHX0FSUk9LKSA9PSBIQUxfVElNRU9VVCkKKyAgeworICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgfQorCisgIC8qIENsZWFyIGZsYWcgKi8KKyAgX19IQUxfTFBUSU1fQ0xFQVJfRkxBRyhobHB0aW0sIExQVElNX0ZMQUdfQ01QT0spOworCiAgIC8qIExvYWQgdGhlIHB1bHNlIHZhbHVlIGluIHRoZSBjb21wYXJlIHJlZ2lzdGVyICovCiAgIF9fSEFMX0xQVElNX0NPTVBBUkVfU0VUKGhscHRpbSwgUHVsc2UpOwogCisgIC8qIFdhaXQgZm9yIHRoZSBjb21wbGV0aW9uIG9mIHRoZSB3cml0ZSBvcGVyYXRpb24gdG8gdGhlIExQVElNX0NNUCByZWdpc3RlciAqLworICBpZiAoTFBUSU1fV2FpdEZvckZsYWcoaGxwdGltLCBMUFRJTV9GTEFHX0NNUE9LKSA9PSBIQUxfVElNRU9VVCkKKyAgeworICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgfQorCiAgIC8qIFN0YXJ0IHRpbWVyIGluIHNpbmdsZSAob25lIHNob3QpIG1vZGUgKi8KICAgX19IQUxfTFBUSU1fU1RBUlRfU0lOR0xFKGhscHRpbSk7CiAKQEAgLTgxNSw2ICs5NzgsMTEgQEAKICAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwogICBfX0hBTF9MUFRJTV9ESVNBQkxFKGhscHRpbSk7CiAKKyAgaWYgKEhBTF9MUFRJTV9HZXRTdGF0ZShobHB0aW0pID09IEhBTF9MUFRJTV9TVEFURV9USU1FT1VUKQorICB7CisgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICB9CisKICAgLyogQ2hhbmdlIHRoZSBUSU0gc3RhdGUqLwogICBobHB0aW0tPlN0YXRlID0gSEFMX0xQVElNX1NUQVRFX1JFQURZOwogCkBAIC04NDQsNiArMTAxMiw0MSBAQAogICAvKiBTZXQgV0FWRSBiaXQgdG8gZW5hYmxlIHRoZSBzZXQgb25jZSBtb2RlICovCiAgIGhscHRpbS0+SW5zdGFuY2UtPkNGR1IgfD0gTFBUSU1fQ0ZHUl9XQVZFOwogCisgIC8qIEVuYWJsZSB0aGUgUGVyaXBoZXJhbCAqLworICBfX0hBTF9MUFRJTV9FTkFCTEUoaGxwdGltKTsKKworICAvKiBDbGVhciBmbGFnICovCisgIF9fSEFMX0xQVElNX0NMRUFSX0ZMQUcoaGxwdGltLCBMUFRJTV9GTEFHX0FSUk9LKTsKKworICAvKiBMb2FkIHRoZSBwZXJpb2QgdmFsdWUgaW4gdGhlIGF1dG9yZWxvYWQgcmVnaXN0ZXIgKi8KKyAgX19IQUxfTFBUSU1fQVVUT1JFTE9BRF9TRVQoaGxwdGltLCBQZXJpb2QpOworCisgIC8qIFdhaXQgZm9yIHRoZSBjb21wbGV0aW9uIG9mIHRoZSB3cml0ZSBvcGVyYXRpb24gdG8gdGhlIExQVElNX0FSUiByZWdpc3RlciAqLworICBpZiAoTFBUSU1fV2FpdEZvckZsYWcoaGxwdGltLCBMUFRJTV9GTEFHX0FSUk9LKSA9PSBIQUxfVElNRU9VVCkKKyAgeworICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgfQorCisgIC8qIENsZWFyIGZsYWcgKi8KKyAgX19IQUxfTFBUSU1fQ0xFQVJfRkxBRyhobHB0aW0sIExQVElNX0ZMQUdfQ01QT0spOworCisgIC8qIExvYWQgdGhlIHB1bHNlIHZhbHVlIGluIHRoZSBjb21wYXJlIHJlZ2lzdGVyICovCisgIF9fSEFMX0xQVElNX0NPTVBBUkVfU0VUKGhscHRpbSwgUHVsc2UpOworCisgIC8qIFdhaXQgZm9yIHRoZSBjb21wbGV0aW9uIG9mIHRoZSB3cml0ZSBvcGVyYXRpb24gdG8gdGhlIExQVElNX0NNUCByZWdpc3RlciAqLworICBpZiAoTFBUSU1fV2FpdEZvckZsYWcoaGxwdGltLCBMUFRJTV9GTEFHX0NNUE9LKSA9PSBIQUxfVElNRU9VVCkKKyAgeworICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgfQorCisgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KKyAgX19IQUxfTFBUSU1fRElTQUJMRShobHB0aW0pOworCisgIGlmIChIQUxfTFBUSU1fR2V0U3RhdGUoaGxwdGltKSA9PSBIQUxfTFBUSU1fU1RBVEVfVElNRU9VVCkKKyAgeworICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgfQorCiAgIC8qIEVuYWJsZSBBdXRvcmVsb2FkIHdyaXRlIGNvbXBsZXRlIGludGVycnVwdCAqLwogICBfX0hBTF9MUFRJTV9FTkFCTEVfSVQoaGxwdGltLCBMUFRJTV9JVF9BUlJPSyk7CiAKQEAgLTg2NiwxMiArMTA2OSw2IEBACiAgIC8qIEVuYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwogICBfX0hBTF9MUFRJTV9FTkFCTEUoaGxwdGltKTsKIAotICAvKiBMb2FkIHRoZSBwZXJpb2QgdmFsdWUgaW4gdGhlIGF1dG9yZWxvYWQgcmVnaXN0ZXIgKi8KLSAgX19IQUxfTFBUSU1fQVVUT1JFTE9BRF9TRVQoaGxwdGltLCBQZXJpb2QpOwotCi0gIC8qIExvYWQgdGhlIHB1bHNlIHZhbHVlIGluIHRoZSBjb21wYXJlIHJlZ2lzdGVyICovCi0gIF9fSEFMX0xQVElNX0NPTVBBUkVfU0VUKGhscHRpbSwgUHVsc2UpOwotCiAgIC8qIFN0YXJ0IHRpbWVyIGluIHNpbmdsZSAob25lIHNob3QpIG1vZGUgKi8KICAgX19IQUxfTFBUSU1fU1RBUlRfU0lOR0xFKGhscHRpbSk7CiAKQEAgLTg5OCw2ICsxMDk1LDExIEBACiAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfTFBUSU1fRElTQUJMRShobHB0aW0pOwogCisgIGlmIChIQUxfTFBUSU1fR2V0U3RhdGUoaGxwdGltKSA9PSBIQUxfTFBUSU1fU1RBVEVfVElNRU9VVCkKKyAgeworICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgfQorCiAgIC8qIERpc2FibGUgQXV0b3JlbG9hZCB3cml0ZSBjb21wbGV0ZSBpbnRlcnJ1cHQgKi8KICAgX19IQUxfTFBUSU1fRElTQUJMRV9JVChobHB0aW0sIExQVElNX0lUX0FSUk9LKTsKIApAQCAtOTYzLDkgKzExNjUsMTggQEAKICAgLyogRW5hYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX0xQVElNX0VOQUJMRShobHB0aW0pOwogCisgIC8qIENsZWFyIGZsYWcgKi8KKyAgX19IQUxfTFBUSU1fQ0xFQVJfRkxBRyhobHB0aW0sIExQVElNX0ZMQUdfQVJST0spOworCiAgIC8qIExvYWQgdGhlIHBlcmlvZCB2YWx1ZSBpbiB0aGUgYXV0b3JlbG9hZCByZWdpc3RlciAqLwogICBfX0hBTF9MUFRJTV9BVVRPUkVMT0FEX1NFVChobHB0aW0sIFBlcmlvZCk7CiAKKyAgLyogV2FpdCBmb3IgdGhlIGNvbXBsZXRpb24gb2YgdGhlIHdyaXRlIG9wZXJhdGlvbiB0byB0aGUgTFBUSU1fQVJSIHJlZ2lzdGVyICovCisgIGlmIChMUFRJTV9XYWl0Rm9yRmxhZyhobHB0aW0sIExQVElNX0ZMQUdfQVJST0spID09IEhBTF9USU1FT1VUKQorICB7CisgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICB9CisKICAgLyogU3RhcnQgdGltZXIgaW4gY29udGludW91cyBtb2RlICovCiAgIF9fSEFMX0xQVElNX1NUQVJUX0NPTlRJTlVPVVMoaGxwdGltKTsKIApAQCAtOTkyLDYgKzEyMDMsMTEgQEAKICAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwogICBfX0hBTF9MUFRJTV9ESVNBQkxFKGhscHRpbSk7CiAKKyAgaWYgKEhBTF9MUFRJTV9HZXRTdGF0ZShobHB0aW0pID09IEhBTF9MUFRJTV9TVEFURV9USU1FT1VUKQorICB7CisgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICB9CisKICAgLyogUmVzZXQgRU5DIGJpdCB0byBkaXNhYmxlIHRoZSBlbmNvZGVyIGludGVyZmFjZSAqLwogICBobHB0aW0tPkluc3RhbmNlLT5DRkdSICY9IH5MUFRJTV9DRkdSX0VOQzsKIApAQCAtMTAzOSw2ICsxMjU1LDI5IEBACiAgIC8qIFNldCBFTkMgYml0IHRvIGVuYWJsZSB0aGUgZW5jb2RlciBpbnRlcmZhY2UgKi8KICAgaGxwdGltLT5JbnN0YW5jZS0+Q0ZHUiB8PSBMUFRJTV9DRkdSX0VOQzsKIAorICAvKiBFbmFibGUgdGhlIFBlcmlwaGVyYWwgKi8KKyAgX19IQUxfTFBUSU1fRU5BQkxFKGhscHRpbSk7CisKKyAgLyogQ2xlYXIgZmxhZyAqLworICBfX0hBTF9MUFRJTV9DTEVBUl9GTEFHKGhscHRpbSwgTFBUSU1fRkxBR19BUlJPSyk7CisKKyAgLyogTG9hZCB0aGUgcGVyaW9kIHZhbHVlIGluIHRoZSBhdXRvcmVsb2FkIHJlZ2lzdGVyICovCisgIF9fSEFMX0xQVElNX0FVVE9SRUxPQURfU0VUKGhscHRpbSwgUGVyaW9kKTsKKworICAvKiBXYWl0IGZvciB0aGUgY29tcGxldGlvbiBvZiB0aGUgd3JpdGUgb3BlcmF0aW9uIHRvIHRoZSBMUFRJTV9BUlIgcmVnaXN0ZXIgKi8KKyAgaWYgKExQVElNX1dhaXRGb3JGbGFnKGhscHRpbSwgTFBUSU1fRkxBR19BUlJPSykgPT0gSEFMX1RJTUVPVVQpCisgIHsKKyAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgIH0KKworICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCisgIF9fSEFMX0xQVElNX0RJU0FCTEUoaGxwdGltKTsKKworICBpZiAoSEFMX0xQVElNX0dldFN0YXRlKGhscHRpbSkgPT0gSEFMX0xQVElNX1NUQVRFX1RJTUVPVVQpCisgIHsKKyAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgIH0KKwogICAvKiBFbmFibGUgInN3aXRjaCB0byBkb3duIGRpcmVjdGlvbiIgaW50ZXJydXB0ICovCiAgIF9fSEFMX0xQVElNX0VOQUJMRV9JVChobHB0aW0sIExQVElNX0lUX0RPV04pOwogCkBAIC0xMDQ4LDkgKzEyODcsNiBAQAogICAvKiBFbmFibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfTFBUSU1fRU5BQkxFKGhscHRpbSk7CiAKLSAgLyogTG9hZCB0aGUgcGVyaW9kIHZhbHVlIGluIHRoZSBhdXRvcmVsb2FkIHJlZ2lzdGVyICovCi0gIF9fSEFMX0xQVElNX0FVVE9SRUxPQURfU0VUKGhscHRpbSwgUGVyaW9kKTsKLQogICAvKiBTdGFydCB0aW1lciBpbiBjb250aW51b3VzIG1vZGUgKi8KICAgX19IQUxfTFBUSU1fU1RBUlRfQ09OVElOVU9VUyhobHB0aW0pOwogCkBAIC0xMDc3LDYgKzEzMTMsMTEgQEAKICAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwogICBfX0hBTF9MUFRJTV9ESVNBQkxFKGhscHRpbSk7CiAKKyAgaWYgKEhBTF9MUFRJTV9HZXRTdGF0ZShobHB0aW0pID09IEhBTF9MUFRJTV9TVEFURV9USU1FT1VUKQorICB7CisgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICB9CisKICAgLyogUmVzZXQgRU5DIGJpdCB0byBkaXNhYmxlIHRoZSBlbmNvZGVyIGludGVyZmFjZSAqLwogICBobHB0aW0tPkluc3RhbmNlLT5DRkdSICY9IH5MUFRJTV9DRkdSX0VOQzsKIApAQCAtMTEyMCwxMiArMTM2MSwzMCBAQAogICAvKiBFbmFibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfTFBUSU1fRU5BQkxFKGhscHRpbSk7CiAKKyAgLyogQ2xlYXIgZmxhZyAqLworICBfX0hBTF9MUFRJTV9DTEVBUl9GTEFHKGhscHRpbSwgTFBUSU1fRkxBR19BUlJPSyk7CisKICAgLyogTG9hZCB0aGUgcGVyaW9kIHZhbHVlIGluIHRoZSBhdXRvcmVsb2FkIHJlZ2lzdGVyICovCiAgIF9fSEFMX0xQVElNX0FVVE9SRUxPQURfU0VUKGhscHRpbSwgUGVyaW9kKTsKIAorICAvKiBXYWl0IGZvciB0aGUgY29tcGxldGlvbiBvZiB0aGUgd3JpdGUgb3BlcmF0aW9uIHRvIHRoZSBMUFRJTV9BUlIgcmVnaXN0ZXIgKi8KKyAgaWYgKExQVElNX1dhaXRGb3JGbGFnKGhscHRpbSwgTFBUSU1fRkxBR19BUlJPSykgPT0gSEFMX1RJTUVPVVQpCisgIHsKKyAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgIH0KKworICAvKiBDbGVhciBmbGFnICovCisgIF9fSEFMX0xQVElNX0NMRUFSX0ZMQUcoaGxwdGltLCBMUFRJTV9GTEFHX0NNUE9LKTsKKwogICAvKiBMb2FkIHRoZSBUaW1lb3V0IHZhbHVlIGluIHRoZSBjb21wYXJlIHJlZ2lzdGVyICovCiAgIF9fSEFMX0xQVElNX0NPTVBBUkVfU0VUKGhscHRpbSwgVGltZW91dCk7CiAKKyAgLyogV2FpdCBmb3IgdGhlIGNvbXBsZXRpb24gb2YgdGhlIHdyaXRlIG9wZXJhdGlvbiB0byB0aGUgTFBUSU1fQ01QIHJlZ2lzdGVyICovCisgIGlmIChMUFRJTV9XYWl0Rm9yRmxhZyhobHB0aW0sIExQVElNX0ZMQUdfQ01QT0spID09IEhBTF9USU1FT1VUKQorICB7CisgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICB9CisKICAgLyogU3RhcnQgdGltZXIgaW4gY29udGludW91cyBtb2RlICovCiAgIF9fSEFMX0xQVElNX1NUQVJUX0NPTlRJTlVPVVMoaGxwdGltKTsKIApAQCAtMTE1Miw2ICsxNDExLDExIEBACiAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfTFBUSU1fRElTQUJMRShobHB0aW0pOwogCisgIGlmIChIQUxfTFBUSU1fR2V0U3RhdGUoaGxwdGltKSA9PSBIQUxfTFBUSU1fU1RBVEVfVElNRU9VVCkKKyAgeworICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgfQorCiAgIC8qIFJlc2V0IFRJTU9VVCBiaXQgdG8gZW5hYmxlIHRoZSB0aW1lb3V0IGZ1bmN0aW9uICovCiAgIGhscHRpbS0+SW5zdGFuY2UtPkNGR1IgJj0gfkxQVElNX0NGR1JfVElNT1VUOwogCkBAIC0xMTg5LDE4ICsxNDUzLDQ3IEBACiAgIC8qIFNldCBUSU1PVVQgYml0IHRvIGVuYWJsZSB0aGUgdGltZW91dCBmdW5jdGlvbiAqLwogICBobHB0aW0tPkluc3RhbmNlLT5DRkdSIHw9IExQVElNX0NGR1JfVElNT1VUOwogCisgIC8qIEVuYWJsZSB0aGUgUGVyaXBoZXJhbCAqLworICBfX0hBTF9MUFRJTV9FTkFCTEUoaGxwdGltKTsKKworICAvKiBDbGVhciBmbGFnICovCisgIF9fSEFMX0xQVElNX0NMRUFSX0ZMQUcoaGxwdGltLCBMUFRJTV9GTEFHX0FSUk9LKTsKKworICAvKiBMb2FkIHRoZSBwZXJpb2QgdmFsdWUgaW4gdGhlIGF1dG9yZWxvYWQgcmVnaXN0ZXIgKi8KKyAgX19IQUxfTFBUSU1fQVVUT1JFTE9BRF9TRVQoaGxwdGltLCBQZXJpb2QpOworCisgIC8qIFdhaXQgZm9yIHRoZSBjb21wbGV0aW9uIG9mIHRoZSB3cml0ZSBvcGVyYXRpb24gdG8gdGhlIExQVElNX0FSUiByZWdpc3RlciAqLworICBpZiAoTFBUSU1fV2FpdEZvckZsYWcoaGxwdGltLCBMUFRJTV9GTEFHX0FSUk9LKSA9PSBIQUxfVElNRU9VVCkKKyAgeworICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgfQorCisgIC8qIENsZWFyIGZsYWcgKi8KKyAgX19IQUxfTFBUSU1fQ0xFQVJfRkxBRyhobHB0aW0sIExQVElNX0ZMQUdfQ01QT0spOworCisgIC8qIExvYWQgdGhlIFRpbWVvdXQgdmFsdWUgaW4gdGhlIGNvbXBhcmUgcmVnaXN0ZXIgKi8KKyAgX19IQUxfTFBUSU1fQ09NUEFSRV9TRVQoaGxwdGltLCBUaW1lb3V0KTsKKworICAvKiBXYWl0IGZvciB0aGUgY29tcGxldGlvbiBvZiB0aGUgd3JpdGUgb3BlcmF0aW9uIHRvIHRoZSBMUFRJTV9DTVAgcmVnaXN0ZXIgKi8KKyAgaWYgKExQVElNX1dhaXRGb3JGbGFnKGhscHRpbSwgTFBUSU1fRkxBR19DTVBPSykgPT0gSEFMX1RJTUVPVVQpCisgIHsKKyAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgIH0KKworICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCisgIF9fSEFMX0xQVElNX0RJU0FCTEUoaGxwdGltKTsKKworICBpZiAoSEFMX0xQVElNX0dldFN0YXRlKGhscHRpbSkgPT0gSEFMX0xQVElNX1NUQVRFX1RJTUVPVVQpCisgIHsKKyAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgIH0KKwogICAvKiBFbmFibGUgQ29tcGFyZSBtYXRjaCBpbnRlcnJ1cHQgKi8KICAgX19IQUxfTFBUSU1fRU5BQkxFX0lUKGhscHRpbSwgTFBUSU1fSVRfQ01QTSk7CiAKICAgLyogRW5hYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX0xQVElNX0VOQUJMRShobHB0aW0pOwogCi0gIC8qIExvYWQgdGhlIHBlcmlvZCB2YWx1ZSBpbiB0aGUgYXV0b3JlbG9hZCByZWdpc3RlciAqLwotICBfX0hBTF9MUFRJTV9BVVRPUkVMT0FEX1NFVChobHB0aW0sIFBlcmlvZCk7Ci0KLSAgLyogTG9hZCB0aGUgVGltZW91dCB2YWx1ZSBpbiB0aGUgY29tcGFyZSByZWdpc3RlciAqLwotICBfX0hBTF9MUFRJTV9DT01QQVJFX1NFVChobHB0aW0sIFRpbWVvdXQpOwotCiAgIC8qIFN0YXJ0IHRpbWVyIGluIGNvbnRpbnVvdXMgbW9kZSAqLwogICBfX0hBTF9MUFRJTV9TVEFSVF9DT05USU5VT1VTKGhscHRpbSk7CiAKQEAgLTEyMzAsNiArMTUyMywxMSBAQAogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX0xQVElNX0RJU0FCTEUoaGxwdGltKTsKIAorICBpZiAoSEFMX0xQVElNX0dldFN0YXRlKGhscHRpbSkgPT0gSEFMX0xQVElNX1NUQVRFX1RJTUVPVVQpCisgIHsKKyAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgIH0KKwogICAvKiBSZXNldCBUSU1PVVQgYml0IHRvIGVuYWJsZSB0aGUgdGltZW91dCBmdW5jdGlvbiAqLwogICBobHB0aW0tPkluc3RhbmNlLT5DRkdSICY9IH5MUFRJTV9DRkdSX1RJTU9VVDsKIApAQCAtMTI3MSw5ICsxNTY5LDE4IEBACiAgIC8qIEVuYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwogICBfX0hBTF9MUFRJTV9FTkFCTEUoaGxwdGltKTsKIAorICAvKiBDbGVhciBmbGFnICovCisgIF9fSEFMX0xQVElNX0NMRUFSX0ZMQUcoaGxwdGltLCBMUFRJTV9GTEFHX0FSUk9LKTsKKwogICAvKiBMb2FkIHRoZSBwZXJpb2QgdmFsdWUgaW4gdGhlIGF1dG9yZWxvYWQgcmVnaXN0ZXIgKi8KICAgX19IQUxfTFBUSU1fQVVUT1JFTE9BRF9TRVQoaGxwdGltLCBQZXJpb2QpOwogCisgIC8qIFdhaXQgZm9yIHRoZSBjb21wbGV0aW9uIG9mIHRoZSB3cml0ZSBvcGVyYXRpb24gdG8gdGhlIExQVElNX0FSUiByZWdpc3RlciAqLworICBpZiAoTFBUSU1fV2FpdEZvckZsYWcoaGxwdGltLCBMUFRJTV9GTEFHX0FSUk9LKSA9PSBIQUxfVElNRU9VVCkKKyAgeworICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgfQorCiAgIC8qIFN0YXJ0IHRpbWVyIGluIGNvbnRpbnVvdXMgbW9kZSAqLwogICBfX0hBTF9MUFRJTV9TVEFSVF9DT05USU5VT1VTKGhscHRpbSk7CiAKQEAgLTEzMDAsNiArMTYwNywxMSBAQAogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX0xQVElNX0RJU0FCTEUoaGxwdGltKTsKIAorICBpZiAoSEFMX0xQVElNX0dldFN0YXRlKGhscHRpbSkgPT0gSEFMX0xQVElNX1NUQVRFX1RJTUVPVVQpCisgIHsKKyAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgIH0KKwogICAvKiBDaGFuZ2UgdGhlIFRJTSBzdGF0ZSovCiAgIGhscHRpbS0+U3RhdGUgPSBIQUxfTFBUSU1fU1RBVEVfUkVBRFk7CiAKQEAgLTEzMzUsNiArMTY0NywyOSBAQAogICAgIGhscHRpbS0+SW5zdGFuY2UtPkNGR1IgJj0gfkxQVElNX0NGR1JfUFJFU0M7CiAgIH0KIAorICAvKiBFbmFibGUgdGhlIFBlcmlwaGVyYWwgKi8KKyAgX19IQUxfTFBUSU1fRU5BQkxFKGhscHRpbSk7CisKKyAgLyogQ2xlYXIgZmxhZyAqLworICBfX0hBTF9MUFRJTV9DTEVBUl9GTEFHKGhscHRpbSwgTFBUSU1fRkxBR19BUlJPSyk7CisKKyAgLyogTG9hZCB0aGUgcGVyaW9kIHZhbHVlIGluIHRoZSBhdXRvcmVsb2FkIHJlZ2lzdGVyICovCisgIF9fSEFMX0xQVElNX0FVVE9SRUxPQURfU0VUKGhscHRpbSwgUGVyaW9kKTsKKworICAvKiBXYWl0IGZvciB0aGUgY29tcGxldGlvbiBvZiB0aGUgd3JpdGUgb3BlcmF0aW9uIHRvIHRoZSBMUFRJTV9BUlIgcmVnaXN0ZXIgKi8KKyAgaWYgKExQVElNX1dhaXRGb3JGbGFnKGhscHRpbSwgTFBUSU1fRkxBR19BUlJPSykgPT0gSEFMX1RJTUVPVVQpCisgIHsKKyAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgIH0KKworICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCisgIF9fSEFMX0xQVElNX0RJU0FCTEUoaGxwdGltKTsKKworICBpZiAoSEFMX0xQVElNX0dldFN0YXRlKGhscHRpbSkgPT0gSEFMX0xQVElNX1NUQVRFX1RJTUVPVVQpCisgIHsKKyAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgIH0KKwogICAvKiBFbmFibGUgQXV0b3JlbG9hZCB3cml0ZSBjb21wbGV0ZSBpbnRlcnJ1cHQgKi8KICAgX19IQUxfTFBUSU1fRU5BQkxFX0lUKGhscHRpbSwgTFBUSU1fSVRfQVJST0spOwogCkBAIC0xMzQ0LDkgKzE2NzksNiBAQAogICAvKiBFbmFibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfTFBUSU1fRU5BQkxFKGhscHRpbSk7CiAKLSAgLyogTG9hZCB0aGUgcGVyaW9kIHZhbHVlIGluIHRoZSBhdXRvcmVsb2FkIHJlZ2lzdGVyICovCi0gIF9fSEFMX0xQVElNX0FVVE9SRUxPQURfU0VUKGhscHRpbSwgUGVyaW9kKTsKLQogICAvKiBTdGFydCB0aW1lciBpbiBjb250aW51b3VzIG1vZGUgKi8KICAgX19IQUxfTFBUSU1fU1RBUlRfQ09OVElOVU9VUyhobHB0aW0pOwogCkBAIC0xMzc2LDEyICsxNzA4LDE2IEBACiAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfTFBUSU1fRElTQUJMRShobHB0aW0pOwogCisgIGlmIChIQUxfTFBUSU1fR2V0U3RhdGUoaGxwdGltKSA9PSBIQUxfTFBUSU1fU1RBVEVfVElNRU9VVCkKKyAgeworICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgfQorCiAgIC8qIERpc2FibGUgQXV0b3JlbG9hZCB3cml0ZSBjb21wbGV0ZSBpbnRlcnJ1cHQgKi8KICAgX19IQUxfTFBUSU1fRElTQUJMRV9JVChobHB0aW0sIExQVElNX0lUX0FSUk9LKTsKIAogICAvKiBEaXNhYmxlIEF1dG9yZWxvYWQgbWF0Y2ggaW50ZXJydXB0ICovCiAgIF9fSEFMX0xQVElNX0RJU0FCTEVfSVQoaGxwdGltLCBMUFRJTV9JVF9BUlJNKTsKLQogICAvKiBDaGFuZ2UgdGhlIFRJTSBzdGF0ZSovCiAgIGhscHRpbS0+U3RhdGUgPSBIQUxfTFBUSU1fU1RBVEVfUkVBRFk7CiAKQEAgLTE5NzksMTUgKzIzMTUsMzkgQEAKICNlbmRpZiAvKiBVU0VfSEFMX0xQVElNX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogCiAvKioKKyAgKiBAYnJpZWYgIExQVGltZXIgV2FpdCBmb3IgZmxhZyBzZXQKKyAgKiBAcGFyYW0gIGhscHRpbSBwb2ludGVyIHRvIGEgTFBUSU1fSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBMUFRJTSBtb2R1bGUuCisgICogQHBhcmFtICBmbGFnICAgVGhlIGxwdGltIGZsYWcKKyAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKKyAgKi8KK3N0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBMUFRJTV9XYWl0Rm9yRmxhZyhMUFRJTV9IYW5kbGVUeXBlRGVmICpobHB0aW0sIHVpbnQzMl90IGZsYWcpCit7CisgIEhBTF9TdGF0dXNUeXBlRGVmIHJlc3VsdCA9IEhBTF9PSzsKKyAgdWludDMyX3QgY291bnQgPSBUSU1FT1VUICogKFN5c3RlbUNvcmVDbG9jayAvIDIwVUwgLyAxMDAwVUwpOworICBkbworICB7CisgICAgY291bnQtLTsKKyAgICBpZiAoY291bnQgPT0gMFVMKQorICAgIHsKKyAgICAgIHJlc3VsdCA9IEhBTF9USU1FT1VUOworICAgIH0KKyAgfQorICB3aGlsZSAoKCEoX19IQUxfTFBUSU1fR0VUX0ZMQUcoKGhscHRpbSksIChmbGFnKSkpKSAmJiAoY291bnQgIT0gMFVMKSk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCiAgICogQGJyaWVmICBEaXNhYmxlIExQVElNIEhXIGluc3RhbmNlLgotICAqIEBwYXJhbSAgbHB0aW0gcG9pbnRlciB0byBhIExQVElNX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiBAcGFyYW0gIGhscHRpbSBwb2ludGVyIHRvIGEgTFBUSU1fSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwogICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBMUFRJTSBtb2R1bGUuCiAgICogQG5vdGUgICBUaGUgZm9sbG93aW5nIHNlcXVlbmNlIGlzIHJlcXVpcmVkIHRvIHNvbHZlIExQVElNIGRpc2FibGUgSFcgbGltaXRhdGlvbi4KICAgKiAgICAgICAgIFBsZWFzZSBjaGVjayBFcnJhdGEgU2hlZXQgRVMwMzM1IGZvciBtb3JlIGRldGFpbHMgdW5kZXIgIk1DVSBtYXkgcmVtYWluCiAgICogICAgICAgICBzdHVjayBpbiBMUFRJTSBpbnRlcnJ1cHQgd2hlbiBlbnRlcmluZyBTdG9wIG1vZGUiIHNlY3Rpb24uCiAgICogQHJldHZhbCBOb25lCiAgICovCi12b2lkIExQVElNX0Rpc2FibGUoTFBUSU1fSGFuZGxlVHlwZURlZiAqbHB0aW0pCit2b2lkIExQVElNX0Rpc2FibGUoTFBUSU1fSGFuZGxlVHlwZURlZiAqaGxwdGltKQogewogICB1aW50MzJfdCB0bXBjbGtzb3VyY2UgPSAwOwogICB1aW50MzJfdCB0bXBJRVI7CkBAIC0yMDAwLDk1ICsyMzYwLDkxIEBACiAKICAgLyoqKioqKioqKioqIFNhdmUgTFBUSU0gQ29uZmlnICoqKioqKioqKioqLwogICAvKiBTYXZlIExQVElNIHNvdXJjZSBjbG9jayAqLwotICBzd2l0Y2ggKCh1aW50MzJfdClscHRpbS0+SW5zdGFuY2UpCisgIHN3aXRjaCAoKHVpbnQzMl90KWhscHRpbS0+SW5zdGFuY2UpCiAgIHsKLSAgICAgY2FzZSBMUFRJTTFfQkFTRToKLSAgICAgICB0bXBjbGtzb3VyY2UgPSBfX0hBTF9SQ0NfR0VUX0xQVElNMV9TT1VSQ0UoKTsKLSAgICAgICBicmVhazsKLSAgICAgZGVmYXVsdDoKLSAgICAgICBicmVhazsKKyAgICBjYXNlIExQVElNMV9CQVNFOgorICAgICAgdG1wY2xrc291cmNlID0gX19IQUxfUkNDX0dFVF9MUFRJTTFfU09VUkNFKCk7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CiAgIH0KIAogICAvKiBTYXZlIExQVElNIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzICovCi0gIHRtcElFUiA9IGxwdGltLT5JbnN0YW5jZS0+SUVSOwotICB0bXBDRkdSID0gbHB0aW0tPkluc3RhbmNlLT5DRkdSOwotICB0bXBDTVAgPSBscHRpbS0+SW5zdGFuY2UtPkNNUDsKLSAgdG1wQVJSID0gbHB0aW0tPkluc3RhbmNlLT5BUlI7Ci0gIHRtcE9SID0gbHB0aW0tPkluc3RhbmNlLT5PUjsKKyAgdG1wSUVSID0gaGxwdGltLT5JbnN0YW5jZS0+SUVSOworICB0bXBDRkdSID0gaGxwdGltLT5JbnN0YW5jZS0+Q0ZHUjsKKyAgdG1wQ01QID0gaGxwdGltLT5JbnN0YW5jZS0+Q01QOworICB0bXBBUlIgPSBobHB0aW0tPkluc3RhbmNlLT5BUlI7CisgIHRtcE9SID0gaGxwdGltLT5JbnN0YW5jZS0+T1I7CiAKICAgLyoqKioqKioqKioqIFJlc2V0IExQVElNICoqKioqKioqKioqLwotICBzd2l0Y2ggKCh1aW50MzJfdClscHRpbS0+SW5zdGFuY2UpCisgIHN3aXRjaCAoKHVpbnQzMl90KWhscHRpbS0+SW5zdGFuY2UpCiAgIHsKLSAgICAgY2FzZSBMUFRJTTFfQkFTRToKLSAgICAgICBfX0hBTF9SQ0NfTFBUSU0xX0ZPUkNFX1JFU0VUKCk7Ci0gICAgICAgX19IQUxfUkNDX0xQVElNMV9SRUxFQVNFX1JFU0VUKCk7Ci0gICAgICAgYnJlYWs7Ci0gICAgIGRlZmF1bHQ6Ci0gICAgICAgYnJlYWs7CisgICAgY2FzZSBMUFRJTTFfQkFTRToKKyAgICAgIF9fSEFMX1JDQ19MUFRJTTFfRk9SQ0VfUkVTRVQoKTsKKyAgICAgIF9fSEFMX1JDQ19MUFRJTTFfUkVMRUFTRV9SRVNFVCgpOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOwogICB9CiAKICAgLyoqKioqKioqKioqIFJlc3RvcmUgTFBUSU0gQ29uZmlnICoqKioqKioqKioqLwotICB1aW50MzJfdCBSZWZfVGltZTsKLSAgdWludDMyX3QgVGltZV9FbGFwc2VkOwotCiAgIGlmICgodG1wQ01QICE9IDBVTCkgfHwgKHRtcEFSUiAhPSAwVUwpKQogICB7CiAgICAgLyogRm9yY2UgTFBUSU0gc291cmNlIGtlcm5lbCBjbG9jayBmcm9tIEFQQiAqLwotICAgIHN3aXRjaCAoKHVpbnQzMl90KWxwdGltLT5JbnN0YW5jZSkKKyAgICBzd2l0Y2ggKCh1aW50MzJfdClobHB0aW0tPkluc3RhbmNlKQogICAgIHsKLSAgICAgICBjYXNlIExQVElNMV9CQVNFOgotICAgICAgICAgX19IQUxfUkNDX0xQVElNMV9DT05GSUcoUkNDX0xQVElNMUNMS1NPVVJDRV9QQ0xLMSk7Ci0gICAgICAgICBicmVhazsKLSAgICAgICBkZWZhdWx0OgotICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIExQVElNMV9CQVNFOgorICAgICAgICBfX0hBTF9SQ0NfTFBUSU0xX0NPTkZJRyhSQ0NfTFBUSU0xQ0xLU09VUkNFX1BDTEsxKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBpZiAodG1wQ01QICE9IDBVTCkKICAgICB7CiAgICAgICAvKiBSZXN0b3JlIENNUCByZWdpc3RlciAoTFBUSU0gc2hvdWxkIGJlIGVuYWJsZWQgZmlyc3QpICovCi0gICAgICBscHRpbS0+SW5zdGFuY2UtPkNSIHw9IExQVElNX0NSX0VOQUJMRTsKLSAgICAgIGxwdGltLT5JbnN0YW5jZS0+Q01QID0gdG1wQ01QOwotICAgICAgLyogUG9sbGluZyBvbiBDTVAgd3JpdGUgb2sgc3RhdHVzIGFmdGVyIGFib3ZlIHJlc3RvcmUgb3BlcmF0aW9uICovCi0gICAgICBSZWZfVGltZSA9IEhBTF9HZXRUaWNrKCk7Ci0gICAgICBkbwotICAgICAgewotICAgICAgICBUaW1lX0VsYXBzZWQgPSBIQUxfR2V0VGljaygpIC0gUmVmX1RpbWU7Ci0gICAgICB9IHdoaWxlICgoIShfX0hBTF9MUFRJTV9HRVRfRkxBRyhscHRpbSwgTFBUSU1fRkxBR19DTVBPSykpKSAmJiAoVGltZV9FbGFwc2VkIDw9IFRJTUVPVVQpKTsKKyAgICAgIGhscHRpbS0+SW5zdGFuY2UtPkNSIHw9IExQVElNX0NSX0VOQUJMRTsKKyAgICAgIGhscHRpbS0+SW5zdGFuY2UtPkNNUCA9IHRtcENNUDsKIAotICAgICAgX19IQUxfTFBUSU1fQ0xFQVJfRkxBRyhscHRpbSwgTFBUSU1fRkxBR19DTVBPSyk7CisgICAgICAvKiBXYWl0IGZvciB0aGUgY29tcGxldGlvbiBvZiB0aGUgd3JpdGUgb3BlcmF0aW9uIHRvIHRoZSBMUFRJTV9DTVAgcmVnaXN0ZXIgKi8KKyAgICAgIGlmIChMUFRJTV9XYWl0Rm9yRmxhZyhobHB0aW0sIExQVElNX0ZMQUdfQ01QT0spID09IEhBTF9USU1FT1VUKQorICAgICAgeworICAgICAgICBobHB0aW0tPlN0YXRlID0gSEFMX0xQVElNX1NUQVRFX1RJTUVPVVQ7CisgICAgICB9CisgICAgICBfX0hBTF9MUFRJTV9DTEVBUl9GTEFHKGhscHRpbSwgTFBUSU1fRkxBR19DTVBPSyk7CiAgICAgfQogCiAgICAgaWYgKHRtcEFSUiAhPSAwVUwpCiAgICAgewogICAgICAgLyogUmVzdG9yZSBBUlIgcmVnaXN0ZXIgKExQVElNIHNob3VsZCBiZSBlbmFibGVkIGZpcnN0KSAqLwotICAgICAgbHB0aW0tPkluc3RhbmNlLT5DUiB8PSBMUFRJTV9DUl9FTkFCTEU7Ci0gICAgICBscHRpbS0+SW5zdGFuY2UtPkFSUiA9IHRtcEFSUjsKLSAgICAgIC8qIFBvbGxpbmcgb24gQVJSIHdyaXRlIG9rIHN0YXR1cyBhZnRlciBhYm92ZSByZXN0b3JlIG9wZXJhdGlvbiAqLwotICAgICAgUmVmX1RpbWUgPSBIQUxfR2V0VGljaygpOwotICAgICAgZG8KLSAgICAgIHsKLSAgICAgICAgVGltZV9FbGFwc2VkID0gSEFMX0dldFRpY2soKSAtIFJlZl9UaW1lOwotICAgICAgfSB3aGlsZSAoKCEoX19IQUxfTFBUSU1fR0VUX0ZMQUcobHB0aW0sIExQVElNX0ZMQUdfQVJST0spKSkgJiYgKFRpbWVfRWxhcHNlZCA8PSBUSU1FT1VUKSk7CisgICAgICBobHB0aW0tPkluc3RhbmNlLT5DUiB8PSBMUFRJTV9DUl9FTkFCTEU7CisgICAgICBobHB0aW0tPkluc3RhbmNlLT5BUlIgPSB0bXBBUlI7CiAKLSAgICAgIF9fSEFMX0xQVElNX0NMRUFSX0ZMQUcobHB0aW0sIExQVElNX0ZMQUdfQVJST0spOworICAgICAgLyogV2FpdCBmb3IgdGhlIGNvbXBsZXRpb24gb2YgdGhlIHdyaXRlIG9wZXJhdGlvbiB0byB0aGUgTFBUSU1fQVJSIHJlZ2lzdGVyICovCisgICAgICBpZiAoTFBUSU1fV2FpdEZvckZsYWcoaGxwdGltLCBMUFRJTV9GTEFHX0FSUk9LKSA9PSBIQUxfVElNRU9VVCkKKyAgICAgIHsKKyAgICAgICAgaGxwdGltLT5TdGF0ZSA9IEhBTF9MUFRJTV9TVEFURV9USU1FT1VUOworICAgICAgfQorCisgICAgICBfX0hBTF9MUFRJTV9DTEVBUl9GTEFHKGhscHRpbSwgTFBUSU1fRkxBR19BUlJPSyk7CiAgICAgfQogCiAgICAgLyogUmVzdG9yZSBMUFRJTSBzb3VyY2Uga2VybmVsIGNsb2NrICovCi0gICAgc3dpdGNoICgodWludDMyX3QpbHB0aW0tPkluc3RhbmNlKQorICAgIHN3aXRjaCAoKHVpbnQzMl90KWhscHRpbS0+SW5zdGFuY2UpCiAgICAgewotICAgICAgIGNhc2UgTFBUSU0xX0JBU0U6Ci0gICAgICAgICBfX0hBTF9SQ0NfTFBUSU0xX0NPTkZJRyh0bXBjbGtzb3VyY2UpOwotICAgICAgICAgYnJlYWs7Ci0gICAgICAgZGVmYXVsdDoKLSAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBMUFRJTTFfQkFTRToKKyAgICAgICAgX19IQUxfUkNDX0xQVElNMV9DT05GSUcodG1wY2xrc291cmNlKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKICAgICB9CiAgIH0KIAogICAvKiBSZXN0b3JlIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzIChMUFRJTSBzaG91bGQgYmUgZGlzYWJsZWQgZmlyc3QpICovCi0gIGxwdGltLT5JbnN0YW5jZS0+Q1IgJj0gfihMUFRJTV9DUl9FTkFCTEUpOwotICBscHRpbS0+SW5zdGFuY2UtPklFUiA9IHRtcElFUjsKLSAgbHB0aW0tPkluc3RhbmNlLT5DRkdSID0gdG1wQ0ZHUjsKLSAgbHB0aW0tPkluc3RhbmNlLT5PUiA9IHRtcE9SOworICBobHB0aW0tPkluc3RhbmNlLT5DUiAmPSB+KExQVElNX0NSX0VOQUJMRSk7CisgIGhscHRpbS0+SW5zdGFuY2UtPklFUiA9IHRtcElFUjsKKyAgaGxwdGltLT5JbnN0YW5jZS0+Q0ZHUiA9IHRtcENGR1I7CisgIGhscHRpbS0+SW5zdGFuY2UtPk9SID0gdG1wT1I7CiAKICAgX19lbmFibGVfaXJxKCk7CiB9CmRpZmYgLS1naXQgYS9TcmMvc3RtMzJnNHh4X2hhbF9vcGFtcC5jIGIvU3JjL3N0bTMyZzR4eF9oYWxfb3BhbXAuYwppbmRleCBkNzdkNGEwLi4yM2E3ZDcyIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJnNHh4X2hhbF9vcGFtcC5jCisrKyBiL1NyYy9zdG0zMmc0eHhfaGFsX29wYW1wLmMKQEAgLTEwNDgsOCArMTA0OCw4IEBACiAgICogQHBhcmFtIGhvcGFtcCA6IE9QQU1QIGhhbmRsZQogICAqIEBwYXJhbSBDYWxsYmFja0lEIDogSUQgb2YgdGhlIGNhbGxiYWNrIHRvIGJlIHJlZ2lzdGVyZWQKICAgKiAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKLSAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX09QQU1QX01TUF9JTklUX0NCX0lEICAgICAgIE9QQU1QIE1zcEluaXQgY2FsbGJhY2sgSUQKLSAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX09QQU1QX01TUF9ERUlOSVRfQ0JfSUQgICAgIE9QQU1QIE1zcERlSW5pdCBjYWxsYmFjayBJRAorICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfT1BBTVBfTVNQSU5JVF9DQl9JRCAgICAgICBPUEFNUCBNc3BJbml0IGNhbGxiYWNrIElECisgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9PUEFNUF9NU1BERUlOSVRfQ0JfSUQgICAgIE9QQU1QIE1zcERlSW5pdCBjYWxsYmFjayBJRAogICAqIEBwYXJhbSBwQ2FsbGJhY2sgOiBwb2ludGVyIHRvIHRoZSBDYWxsYmFjayBmdW5jdGlvbgogICAqIEByZXR2YWwgc3RhdHVzCiAgICovCkBAIC0xMDcwLDEwICsxMDcwLDEwIEBACiAgIHsKICAgICBzd2l0Y2ggKENhbGxiYWNrSWQpCiAgICAgewotICAgICAgY2FzZSBIQUxfT1BBTVBfTVNQX0lOSVRfQ0JfSUQgOgorICAgICAgY2FzZSBIQUxfT1BBTVBfTVNQSU5JVF9DQl9JRCA6CiAgICAgICAgIGhvcGFtcC0+TXNwSW5pdENhbGxiYWNrID0gcENhbGxiYWNrOwogICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgSEFMX09QQU1QX01TUF9ERUlOSVRfQ0JfSUQgOgorICAgICAgY2FzZSBIQUxfT1BBTVBfTVNQREVJTklUX0NCX0lEIDoKICAgICAgICAgaG9wYW1wLT5Nc3BEZUluaXRDYWxsYmFjayA9IHBDYWxsYmFjazsKICAgICAgICAgYnJlYWs7CiAgICAgICBkZWZhdWx0IDoKQEAgLTEwODYsMTAgKzEwODYsMTAgQEAKICAgewogICAgIHN3aXRjaCAoQ2FsbGJhY2tJZCkKICAgICB7Ci0gICAgICBjYXNlIEhBTF9PUEFNUF9NU1BfSU5JVF9DQl9JRCA6CisgICAgICBjYXNlIEhBTF9PUEFNUF9NU1BJTklUX0NCX0lEIDoKICAgICAgICAgaG9wYW1wLT5Nc3BJbml0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7CiAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBIQUxfT1BBTVBfTVNQX0RFSU5JVF9DQl9JRCA6CisgICAgICBjYXNlIEhBTF9PUEFNUF9NU1BERUlOSVRfQ0JfSUQgOgogICAgICAgICBob3BhbXAtPk1zcERlSW5pdENhbGxiYWNrID0gcENhbGxiYWNrOwogICAgICAgICBicmVhazsKICAgICAgIGRlZmF1bHQgOgpAQCAtMTExNSw4ICsxMTE1LDggQEAKICAgKiBAcGFyYW0gaG9wYW1wIDogT1BBTVAgaGFuZGxlCiAgICogQHBhcmFtIENhbGxiYWNrSUQgOiBJRCBvZiB0aGUgY2FsbGJhY2sgdG8gYmUgdW5yZWdpc3RlcmVkCiAgICogICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6Ci0gICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9PUEFNUF9NU1BfSU5JVF9DQl9JRCAgICAgICAgICAgICAgT1BBTVAgTVNQIEluaXQgQ2FsbGJhY2sgSUQKLSAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX09QQU1QX01TUF9ERUlOSVRfQ0JfSUQgICAgICAgICAgICBPUEFNUCBNU1AgRGVJbml0IENhbGxiYWNrIElECisgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9PUEFNUF9NU1BJTklUX0NCX0lEICAgICAgICAgICAgICBPUEFNUCBNU1AgSW5pdCBDYWxsYmFjayBJRAorICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfT1BBTVBfTVNQREVJTklUX0NCX0lEICAgICAgICAgICAgT1BBTVAgTVNQIERlSW5pdCBDYWxsYmFjayBJRAogICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfT1BBTVBfQUxMX0NCX0lEICAgICAgICAgICAgICAgICAgIE9QQU1QIEFsbCBDYWxsYmFja3MKICAgKiBAcmV0dmFsIHN0YXR1cwogICAqLwpAQCAtMTEzMiwxMCArMTEzMiwxMCBAQAogICB7CiAgICAgc3dpdGNoIChDYWxsYmFja0lkKQogICAgIHsKLSAgICAgIGNhc2UgSEFMX09QQU1QX01TUF9JTklUX0NCX0lEIDoKKyAgICAgIGNhc2UgSEFMX09QQU1QX01TUElOSVRfQ0JfSUQgOgogICAgICAgICBob3BhbXAtPk1zcEluaXRDYWxsYmFjayA9IEhBTF9PUEFNUF9Nc3BJbml0OwogICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgSEFMX09QQU1QX01TUF9ERUlOSVRfQ0JfSUQgOgorICAgICAgY2FzZSBIQUxfT1BBTVBfTVNQREVJTklUX0NCX0lEIDoKICAgICAgICAgaG9wYW1wLT5Nc3BEZUluaXRDYWxsYmFjayA9IEhBTF9PUEFNUF9Nc3BEZUluaXQ7CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBIQUxfT1BBTVBfQUxMX0NCX0lEIDoKQEAgLTExNTIsMTAgKzExNTIsMTAgQEAKICAgewogICAgIHN3aXRjaCAoQ2FsbGJhY2tJZCkKICAgICB7Ci0gICAgICBjYXNlIEhBTF9PUEFNUF9NU1BfSU5JVF9DQl9JRCA6CisgICAgICBjYXNlIEhBTF9PUEFNUF9NU1BJTklUX0NCX0lEIDoKICAgICAgICAgaG9wYW1wLT5Nc3BJbml0Q2FsbGJhY2sgPSBIQUxfT1BBTVBfTXNwSW5pdDsKICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEhBTF9PUEFNUF9NU1BfREVJTklUX0NCX0lEIDoKKyAgICAgIGNhc2UgSEFMX09QQU1QX01TUERFSU5JVF9DQl9JRCA6CiAgICAgICAgIGhvcGFtcC0+TXNwRGVJbml0Q2FsbGJhY2sgPSBIQUxfT1BBTVBfTXNwRGVJbml0OwogICAgICAgICBicmVhazsKICAgICAgIGRlZmF1bHQgOgpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZzR4eF9oYWxfcGNkLmMgYi9TcmMvc3RtMzJnNHh4X2hhbF9wY2QuYwppbmRleCBjNDM1YWM2Li44NTg5NzY0IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJnNHh4X2hhbF9wY2QuYworKysgYi9TcmMvc3RtMzJnNHh4X2hhbF9wY2QuYwpAQCAtMTA1MCwyMSArMTA1MCwxOCBAQAogICBpZiAoX19IQUxfUENEX0dFVF9GTEFHKGhwY2QsIFVTQl9JU1RSX1NVU1ApKQogICB7CiAgICAgLyogRm9yY2UgbG93LXBvd2VyIG1vZGUgaW4gdGhlIG1hY3JvY2VsbCAqLwotICAgIGhwY2QtPkluc3RhbmNlLT5DTlRSIHw9IFVTQl9DTlRSX0ZTVVNQOworICAgIGhwY2QtPkluc3RhbmNlLT5DTlRSIHw9ICh1aW50MTZfdClVU0JfQ05UUl9GU1VTUDsKIAogICAgIC8qIGNsZWFyIG9mIHRoZSBJU1RSIGJpdCBtdXN0IGJlIGRvbmUgYWZ0ZXIgc2V0dGluZyBvZiBDTlRSX0ZTVVNQICovCiAgICAgX19IQUxfUENEX0NMRUFSX0ZMQUcoaHBjZCwgVVNCX0lTVFJfU1VTUCk7CiAKLSAgICBocGNkLT5JbnN0YW5jZS0+Q05UUiB8PSBVU0JfQ05UUl9MUE1PREU7CisgICAgaHBjZC0+SW5zdGFuY2UtPkNOVFIgfD0gKHVpbnQxNl90KVVTQl9DTlRSX0xQTU9ERTsKIAotICAgIGlmIChfX0hBTF9QQ0RfR0VUX0ZMQUcoaHBjZCwgVVNCX0lTVFJfV0tVUCkgPT0gMFUpCi0gICAgewogI2lmIChVU0VfSEFMX1BDRF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCi0gICAgICBocGNkLT5TdXNwZW5kQ2FsbGJhY2soaHBjZCk7CisgICAgaHBjZC0+U3VzcGVuZENhbGxiYWNrKGhwY2QpOwogI2Vsc2UKLSAgICAgIEhBTF9QQ0RfU3VzcGVuZENhbGxiYWNrKGhwY2QpOworICAgIEhBTF9QQ0RfU3VzcGVuZENhbGxiYWNrKGhwY2QpOwogI2VuZGlmIC8qIFVTRV9IQUxfUENEX1JFR0lTVEVSX0NBTExCQUNLUyAqLwotICAgIH0KICAgfQogCiAgIC8qIEhhbmRsZSBMUE0gSW50ZXJydXB0ICovCkBAIC0xMDc0LDggKzEwNzEsOCBAQAogICAgIGlmIChocGNkLT5MUE1fU3RhdGUgPT0gTFBNX0wwKQogICAgIHsKICAgICAgIC8qIEZvcmNlIHN1c3BlbmQgYW5kIGxvdy1wb3dlciBtb2RlIGJlZm9yZSBnb2luZyB0byBMMSBzdGF0ZSovCi0gICAgICBocGNkLT5JbnN0YW5jZS0+Q05UUiB8PSBVU0JfQ05UUl9MUE1PREU7Ci0gICAgICBocGNkLT5JbnN0YW5jZS0+Q05UUiB8PSBVU0JfQ05UUl9GU1VTUDsKKyAgICAgIGhwY2QtPkluc3RhbmNlLT5DTlRSIHw9ICh1aW50MTZfdClVU0JfQ05UUl9MUE1PREU7CisgICAgICBocGNkLT5JbnN0YW5jZS0+Q05UUiB8PSAodWludDE2X3QpVVNCX0NOVFJfRlNVU1A7CiAKICAgICAgIGhwY2QtPkxQTV9TdGF0ZSA9IExQTV9MMTsKICAgICAgIGhwY2QtPkJFU0wgPSAoKHVpbnQzMl90KWhwY2QtPkluc3RhbmNlLT5MUE1DU1IgJiBVU0JfTFBNQ1NSX0JFU0wpID4+IDI7CkBAIC0xNjgwLDggKzE2NzcsOCBAQAogICAgICAgewogICAgICAgICAvKiBESVIgPSAwICovCiAKLSAgICAgICAgLyogRElSID0gMCAgICAgID0+IElOICBpbnQgKi8KLSAgICAgICAgLyogRElSID0gMCBpbXBsaWVzIHRoYXQgKEVQX0NUUl9UWCA9IDEpIGFsd2F5cyAgKi8KKyAgICAgICAgLyogRElSID0gMCA9PiBJTiAgaW50ICovCisgICAgICAgIC8qIERJUiA9IDAgaW1wbGllcyB0aGF0IChFUF9DVFJfVFggPSAxKSBhbHdheXMgKi8KICAgICAgICAgUENEX0NMRUFSX1RYX0VQX0NUUihocGNkLT5JbnN0YW5jZSwgUENEX0VORFAwKTsKICAgICAgICAgZXAgPSAmaHBjZC0+SU5fZXBbMF07CiAKQEAgLTE3MDUsMjAgKzE3MDIsMjAgQEAKICAgICAgIHsKICAgICAgICAgLyogRElSID0gMSAqLwogCi0gICAgICAgIC8qIERJUiA9IDEgJiBDVFJfUlggICAgICAgPT4gU0VUVVAgb3IgT1VUIGludCAqLworICAgICAgICAvKiBESVIgPSAxICYgQ1RSX1JYID0+IFNFVFVQIG9yIE9VVCBpbnQgKi8KICAgICAgICAgLyogRElSID0gMSAmIChDVFJfVFggfCBDVFJfUlgpID0+IDIgaW50IHBlbmRpbmcgKi8KICAgICAgICAgZXAgPSAmaHBjZC0+T1VUX2VwWzBdOwogICAgICAgICB3RVBWYWwgPSBQQ0RfR0VUX0VORFBPSU5UKGhwY2QtPkluc3RhbmNlLCBQQ0RfRU5EUDApOwogCiAgICAgICAgIGlmICgod0VQVmFsICYgVVNCX0VQX1NFVFVQKSAhPSAwVSkKICAgICAgICAgewotICAgICAgICAgIC8qIEdldCBTRVRVUCBQYWNrZXQqLworICAgICAgICAgIC8qIEdldCBTRVRVUCBQYWNrZXQgKi8KICAgICAgICAgICBlcC0+eGZlcl9jb3VudCA9IFBDRF9HRVRfRVBfUlhfQ05UKGhwY2QtPkluc3RhbmNlLCBlcC0+bnVtKTsKIAogICAgICAgICAgIFVTQl9SZWFkUE1BKGhwY2QtPkluc3RhbmNlLCAodWludDhfdCAqKWhwY2QtPlNldHVwLAogICAgICAgICAgICAgICAgICAgICAgIGVwLT5wbWFhZHJlc3MsICh1aW50MTZfdCllcC0+eGZlcl9jb3VudCk7CiAKLSAgICAgICAgICAvKiBTRVRVUCBiaXQga2VwdCBmcm96ZW4gd2hpbGUgQ1RSX1JYID0gMSovCisgICAgICAgICAgLyogU0VUVVAgYml0IGtlcHQgZnJvemVuIHdoaWxlIENUUl9SWCA9IDEgKi8KICAgICAgICAgICBQQ0RfQ0xFQVJfUlhfRVBfQ1RSKGhwY2QtPkluc3RhbmNlLCBQQ0RfRU5EUDApOwogCiAgICAgICAgICAgLyogUHJvY2VzcyBTRVRVUCBQYWNrZXQqLwpAQCAtMTczMyw3ICsxNzMwLDcgQEAKICAgICAgICAgewogICAgICAgICAgIFBDRF9DTEVBUl9SWF9FUF9DVFIoaHBjZC0+SW5zdGFuY2UsIFBDRF9FTkRQMCk7CiAKLSAgICAgICAgICAvKiBHZXQgQ29udHJvbCBEYXRhIE9VVCBQYWNrZXQqLworICAgICAgICAgIC8qIEdldCBDb250cm9sIERhdGEgT1VUIFBhY2tldCAqLwogICAgICAgICAgIGVwLT54ZmVyX2NvdW50ID0gUENEX0dFVF9FUF9SWF9DTlQoaHBjZC0+SW5zdGFuY2UsIGVwLT5udW0pOwogCiAgICAgICAgICAgaWYgKChlcC0+eGZlcl9jb3VudCAhPSAwVSkgJiYgKGVwLT54ZmVyX2J1ZmYgIT0gMFUpKQpAQCAtMTc0Myw3ICsxNzQwLDcgQEAKIAogICAgICAgICAgICAgZXAtPnhmZXJfYnVmZiArPSBlcC0+eGZlcl9jb3VudDsKIAotICAgICAgICAgICAgLyogUHJvY2VzcyBDb250cm9sIERhdGEgT1VUIFBhY2tldCovCisgICAgICAgICAgICAvKiBQcm9jZXNzIENvbnRyb2wgRGF0YSBPVVQgUGFja2V0ICovCiAjaWYgKFVTRV9IQUxfUENEX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVSkKICAgICAgICAgICAgIGhwY2QtPkRhdGFPdXRTdGFnZUNhbGxiYWNrKGhwY2QsIDBVKTsKICNlbHNlCkBAIC0xNzU4LDcgKzE3NTUsNyBAQAogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgLyogRGVjb2RlIGFuZCBzZXJ2aWNlIG5vbiBjb250cm9sIGVuZHBvaW50cyBpbnRlcnJ1cHQgICovCisgICAgICAvKiBEZWNvZGUgYW5kIHNlcnZpY2Ugbm9uIGNvbnRyb2wgZW5kcG9pbnRzIGludGVycnVwdCAqLwogCiAgICAgICAvKiBwcm9jZXNzIHJlbGF0ZWQgZW5kcG9pbnQgcmVnaXN0ZXIgKi8KICAgICAgIHdFUFZhbCA9IFBDRF9HRVRfRU5EUE9JTlQoaHBjZC0+SW5zdGFuY2UsIGVwaW5kZXgpOwpAQCAtMTc2OCw3ICsxNzY1LDcgQEAKICAgICAgICAgUENEX0NMRUFSX1JYX0VQX0NUUihocGNkLT5JbnN0YW5jZSwgZXBpbmRleCk7CiAgICAgICAgIGVwID0gJmhwY2QtPk9VVF9lcFtlcGluZGV4XTsKIAotICAgICAgICAvKiBPVVQgZG91YmxlIEJ1ZmZlcmluZyovCisgICAgICAgIC8qIE9VVCBkb3VibGUgQnVmZmVyaW5nICovCiAgICAgICAgIGlmIChlcC0+ZG91YmxlYnVmZmVyID09IDBVKQogICAgICAgICB7CiAgICAgICAgICAgY291bnQgPSAodWludDE2X3QpUENEX0dFVF9FUF9SWF9DTlQoaHBjZC0+SW5zdGFuY2UsIGVwLT5udW0pOwpAQCAtMTc3OSw5ICsxNzc2LDEyIEBACiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICB7CisgICAgICAgICAgLyogZnJlZSBFUCBPVVQgQnVmZmVyICovCisgICAgICAgICAgUENEX0ZyZWVVc2VyQnVmZmVyKGhwY2QtPkluc3RhbmNlLCBlcC0+bnVtLCAwVSk7CisKICAgICAgICAgICBpZiAoKFBDRF9HRVRfRU5EUE9JTlQoaHBjZC0+SW5zdGFuY2UsIGVwLT5udW0pICYgVVNCX0VQX0RUT0dfUlgpICE9IDBVKQogICAgICAgICAgIHsKLSAgICAgICAgICAgIC8qcmVhZCBmcm9tIGVuZHBvaW50IEJVRjBBZGRyIGJ1ZmZlciovCisgICAgICAgICAgICAvKiByZWFkIGZyb20gZW5kcG9pbnQgQlVGMEFkZHIgYnVmZmVyICovCiAgICAgICAgICAgICBjb3VudCA9ICh1aW50MTZfdClQQ0RfR0VUX0VQX0RCVUYwX0NOVChocGNkLT5JbnN0YW5jZSwgZXAtPm51bSk7CiAgICAgICAgICAgICBpZiAoY291bnQgIT0gMFUpCiAgICAgICAgICAgICB7CkBAIC0xNzkwLDE3ICsxNzkwLDE1IEBACiAgICAgICAgICAgfQogICAgICAgICAgIGVsc2UKICAgICAgICAgICB7Ci0gICAgICAgICAgICAvKnJlYWQgZnJvbSBlbmRwb2ludCBCVUYxQWRkciBidWZmZXIqLworICAgICAgICAgICAgLyogcmVhZCBmcm9tIGVuZHBvaW50IEJVRjFBZGRyIGJ1ZmZlciAqLwogICAgICAgICAgICAgY291bnQgPSAodWludDE2X3QpUENEX0dFVF9FUF9EQlVGMV9DTlQoaHBjZC0+SW5zdGFuY2UsIGVwLT5udW0pOwogICAgICAgICAgICAgaWYgKGNvdW50ICE9IDBVKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBVU0JfUmVhZFBNQShocGNkLT5JbnN0YW5jZSwgZXAtPnhmZXJfYnVmZiwgZXAtPnBtYWFkZHIxLCBjb3VudCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgfQotICAgICAgICAgIC8qIGZyZWUgRVAgT1VUIEJ1ZmZlciAqLwotICAgICAgICAgIFBDRF9GcmVlVXNlckJ1ZmZlcihocGNkLT5JbnN0YW5jZSwgZXAtPm51bSwgMFUpOwogICAgICAgICB9Ci0gICAgICAgIC8qbXVsdGktcGFja2V0IG9uIHRoZSBOT04gY29udHJvbCBPVVQgZW5kcG9pbnQqLworICAgICAgICAvKiBtdWx0aS1wYWNrZXQgb24gdGhlIE5PTiBjb250cm9sIE9VVCBlbmRwb2ludCAqLwogICAgICAgICBlcC0+eGZlcl9jb3VudCArPSBjb3VudDsKICAgICAgICAgZXAtPnhmZXJfYnVmZiArPSBjb3VudDsKIApAQCAtMTgyNyw3ICsxODI1LDcgQEAKICAgICAgICAgLyogY2xlYXIgaW50IGZsYWcgKi8KICAgICAgICAgUENEX0NMRUFSX1RYX0VQX0NUUihocGNkLT5JbnN0YW5jZSwgZXBpbmRleCk7CiAKLSAgICAgICAgLyptdWx0aS1wYWNrZXQgb24gdGhlIE5PTiBjb250cm9sIElOIGVuZHBvaW50Ki8KKyAgICAgICAgLyogbXVsdGktcGFja2V0IG9uIHRoZSBOT04gY29udHJvbCBJTiBlbmRwb2ludCAqLwogICAgICAgICBlcC0+eGZlcl9jb3VudCA9IFBDRF9HRVRfRVBfVFhfQ05UKGhwY2QtPkluc3RhbmNlLCBlcC0+bnVtKTsKICAgICAgICAgZXAtPnhmZXJfYnVmZiArPSBlcC0+eGZlcl9jb3VudDsKIApkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZzR4eF9oYWxfcnRjLmMgYi9TcmMvc3RtMzJnNHh4X2hhbF9ydGMuYwppbmRleCBiOWEyOTVjLi44NzllZmE2IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJnNHh4X2hhbF9ydGMuYworKysgYi9TcmMvc3RtMzJnNHh4X2hhbF9ydGMuYwpAQCAtMTE5OCw3ICsxMTk4LDcgQEAKICAgICAgICAgICAgICAgKCh1aW50MzJfdClzQWxhcm0tPkFsYXJtRGF0ZVdlZWtEYXlTZWwpIHwgXAogICAgICAgICAgICAgICAoKHVpbnQzMl90KXNBbGFybS0+QWxhcm1NYXNrKSk7CiAgIH0KLSAgZWxzZSAvKiBmb3JtYXQgQkNEICovCisgIGVsc2UgLyogRm9ybWF0IEJDRCAqLwogICB7CiAgICAgaWYgKFJFQURfQklUKFJUQy0+Q1IsIFJUQ19DUl9GTVQpICE9IDBVKQogICAgIHsKQEAgLTE0MjAsNiArMTQyMCw3IEBACiAgICAgICAgICAgICAgICgodWludDMyX3Qpc0FsYXJtLT5BbGFybURhdGVXZWVrRGF5U2VsKSB8IFwKICAgICAgICAgICAgICAgKCh1aW50MzJfdClzQWxhcm0tPkFsYXJtTWFzaykpOwogICB9CisKICAgLyogQ29uZmlndXJlIHRoZSBBbGFybSBBIG9yIEFsYXJtIEIgU3ViIFNlY29uZCByZWdpc3RlcnMgKi8KICAgc3Vic2Vjb25kdG1wcmVnID0gKHVpbnQzMl90KSgodWludDMyX3QpKHNBbGFybS0+QWxhcm1UaW1lLlN1YlNlY29uZHMpIHwgKHVpbnQzMl90KShzQWxhcm0tPkFsYXJtU3ViU2Vjb25kTWFzaykpOwogCkBAIC0xNDMwLDcgKzE0MzEsOCBAQAogICBpZiAoc0FsYXJtLT5BbGFybSA9PSBSVENfQUxBUk1fQSkKICAgewogICAgIC8qIERpc2FibGUgdGhlIEFsYXJtIEEgaW50ZXJydXB0ICovCi0gICAgQ0xFQVJfQklUKFJUQy0+Q1IsIFJUQ19DUl9BTFJBSUUpOworICAgIENMRUFSX0JJVChSVEMtPkNSLCAoUlRDX0NSX0FMUkFFIHwgUlRDX0NSX0FMUkFJRSkpOworCiAgICAgLyogQ2xlYXIgZmxhZyBhbGFybSBBICovCiAgICAgV1JJVEVfUkVHKFJUQy0+U0NSLCBSVENfU0NSX0NBTFJBRik7CiAgICAgX19IQUxfUlRDX0FMQVJNX0VYVElfQ0xFQVJfSVQoKTsKQEAgLTE0NjIsNyArMTQ2NCw4IEBACiAgIGVsc2UKICAgewogICAgIC8qIERpc2FibGUgdGhlIEFsYXJtIEIgaW50ZXJydXB0ICovCi0gICAgQ0xFQVJfQklUKFJUQy0+Q1IsIFJUQ19DUl9BTFJCSUUpOworICAgIENMRUFSX0JJVChSVEMtPkNSLCAoUlRDX0NSX0FMUkJFIHwgUlRDX0NSX0FMUkJJRSkpOworCiAgICAgLyogQ2xlYXIgZmxhZyBhbGFybSBCICovCiAgICAgV1JJVEVfUkVHKFJUQy0+U0NSLCBSVENfU0NSX0NBTFJCRik7CiAgICAgX19IQUxfUlRDX0FMQVJNX0VYVElfQ0xFQVJfSVQoKTsKQEAgLTE0OTksNiArMTUwMiw3IEBACiAgIC8qIEVuYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLwogICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0VOQUJMRShocnRjKTsKIAorICAvKiBDaGFuZ2UgUlRDIHN0YXRlICovCiAgIGhydGMtPlN0YXRlID0gSEFMX1JUQ19TVEFURV9SRUFEWTsKIAogICAvKiBQcm9jZXNzIFVubG9ja2VkICovCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJnNHh4X2hhbF9zbWJ1cy5jIGIvU3JjL3N0bTMyZzR4eF9oYWxfc21idXMuYwppbmRleCA4MjliMTJiLi5lNjYzMWNmIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJnNHh4X2hhbF9zbWJ1cy5jCisrKyBiL1NyYy9zdG0zMmc0eHhfaGFsX3NtYnVzLmMKQEAgLTg5LDEyICs4OSwxMiBAQAogCiAgICAgICoqKiBDYWxsYmFjayByZWdpc3RyYXRpb24gKioqCiAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCisgICAgWy4uXQogICAgICBUaGUgY29tcGlsYXRpb24gZmxhZyBVU0VfSEFMX1NNQlVTX1JFR0lTVEVSX0NBTExCQUNLUyB3aGVuIHNldCB0byAxCiAgICAgIGFsbG93cyB0aGUgdXNlciB0byBjb25maWd1cmUgZHluYW1pY2FsbHkgdGhlIGRyaXZlciBjYWxsYmFja3MuCiAgICAgIFVzZSBGdW5jdGlvbnMgQHJlZiBIQUxfU01CVVNfUmVnaXN0ZXJDYWxsYmFjaygpIG9yIEByZWYgSEFMX1NNQlVTX1JlZ2lzdGVyQWRkckNhbGxiYWNrKCkKICAgICAgdG8gcmVnaXN0ZXIgYW4gaW50ZXJydXB0IGNhbGxiYWNrLgotCisgICAgWy4uXQogICAgICBGdW5jdGlvbiBAcmVmIEhBTF9TTUJVU19SZWdpc3RlckNhbGxiYWNrKCkgYWxsb3dzIHRvIHJlZ2lzdGVyIGZvbGxvd2luZyBjYWxsYmFja3M6CiAgICAgICAgKCspIE1hc3RlclR4Q3BsdENhbGxiYWNrIDogY2FsbGJhY2sgZm9yIE1hc3RlciB0cmFuc21pc3Npb24gZW5kIG9mIHRyYW5zZmVyLgogICAgICAgICgrKSBNYXN0ZXJSeENwbHRDYWxsYmFjayA6IGNhbGxiYWNrIGZvciBNYXN0ZXIgcmVjZXB0aW9uIGVuZCBvZiB0cmFuc2Zlci4KQEAgLTEwNiw5ICsxMDYsOSBAQAogICAgICAgICgrKSBNc3BEZUluaXRDYWxsYmFjayAgICA6IGNhbGxiYWNrIGZvciBNc3AgRGVJbml0LgogICAgICBUaGlzIGZ1bmN0aW9uIHRha2VzIGFzIHBhcmFtZXRlcnMgdGhlIEhBTCBwZXJpcGhlcmFsIGhhbmRsZSwgdGhlIENhbGxiYWNrIElECiAgICAgIGFuZCBhIHBvaW50ZXIgdG8gdGhlIHVzZXIgY2FsbGJhY2sgZnVuY3Rpb24uCi0KKyAgICBbLi5dCiAgICAgIEZvciBzcGVjaWZpYyBjYWxsYmFjayBBZGRyQ2FsbGJhY2sgdXNlIGRlZGljYXRlZCByZWdpc3RlciBjYWxsYmFja3MgOiBAcmVmIEhBTF9TTUJVU19SZWdpc3RlckFkZHJDYWxsYmFjay4KLQorICAgIFsuLl0KICAgICAgVXNlIGZ1bmN0aW9uIEByZWYgSEFMX1NNQlVTX1VuUmVnaXN0ZXJDYWxsYmFjayB0byByZXNldCBhIGNhbGxiYWNrIHRvIHRoZSBkZWZhdWx0CiAgICAgIHdlYWsgZnVuY3Rpb24uCiAgICAgIEByZWYgSEFMX1NNQlVTX1VuUmVnaXN0ZXJDYWxsYmFjayB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsCkBAIC0xMjIsOSArMTIyLDkgQEAKICAgICAgICAoKykgRXJyb3JDYWxsYmFjayAgICAgICAgOiBjYWxsYmFjayBmb3IgZXJyb3IgZGV0ZWN0aW9uLgogICAgICAgICgrKSBNc3BJbml0Q2FsbGJhY2sgICAgICA6IGNhbGxiYWNrIGZvciBNc3AgSW5pdC4KICAgICAgICAoKykgTXNwRGVJbml0Q2FsbGJhY2sgICAgOiBjYWxsYmFjayBmb3IgTXNwIERlSW5pdC4KLQorICAgIFsuLl0KICAgICAgRm9yIGNhbGxiYWNrIEFkZHJDYWxsYmFjayB1c2UgZGVkaWNhdGVkIHJlZ2lzdGVyIGNhbGxiYWNrcyA6IEByZWYgSEFMX1NNQlVTX1VuUmVnaXN0ZXJBZGRyQ2FsbGJhY2suCi0KKyAgICBbLi5dCiAgICAgIEJ5IGRlZmF1bHQsIGFmdGVyIHRoZSBAcmVmIEhBTF9TTUJVU19Jbml0KCkgYW5kIHdoZW4gdGhlIHN0YXRlIGlzIEByZWYgSEFMX0kyQ19TVEFURV9SRVNFVAogICAgICBhbGwgY2FsbGJhY2tzIGFyZSBzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgd2VhayBmdW5jdGlvbnM6CiAgICAgIGV4YW1wbGVzIEByZWYgSEFMX1NNQlVTX01hc3RlclR4Q3BsdENhbGxiYWNrKCksIEByZWYgSEFMX1NNQlVTX01hc3RlclJ4Q3BsdENhbGxiYWNrKCkuCkBAIC0xMzMsNyArMTMzLDcgQEAKICAgICAgdGhlc2UgY2FsbGJhY2tzIGFyZSBudWxsIChub3QgcmVnaXN0ZXJlZCBiZWZvcmVoYW5kKS4KICAgICAgSWYgTXNwSW5pdCBvciBNc3BEZUluaXQgYXJlIG5vdCBudWxsLCB0aGUgQHJlZiBIQUxfU01CVVNfSW5pdCgpLyBAcmVmIEhBTF9TTUJVU19EZUluaXQoKQogICAgICBrZWVwIGFuZCB1c2UgdGhlIHVzZXIgTXNwSW5pdC9Nc3BEZUluaXQgY2FsbGJhY2tzIChyZWdpc3RlcmVkIGJlZm9yZWhhbmQpIHdoYXRldmVyIHRoZSBzdGF0ZS4KLQorICAgIFsuLl0KICAgICAgQ2FsbGJhY2tzIGNhbiBiZSByZWdpc3RlcmVkL3VucmVnaXN0ZXJlZCBpbiBAcmVmIEhBTF9JMkNfU1RBVEVfUkVBRFkgc3RhdGUgb25seS4KICAgICAgRXhjZXB0aW9uIGRvbmUgTXNwSW5pdC9Nc3BEZUluaXQgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHJlZ2lzdGVyZWQvdW5yZWdpc3RlcmVkCiAgICAgIGluIEByZWYgSEFMX0kyQ19TVEFURV9SRUFEWSBvciBAcmVmIEhBTF9JMkNfU1RBVEVfUkVTRVQgc3RhdGUsCkBAIC0xNDEsNyArMTQxLDcgQEAKICAgICAgVGhlbiwgdGhlIHVzZXIgZmlyc3QgcmVnaXN0ZXJzIHRoZSBNc3BJbml0L01zcERlSW5pdCB1c2VyIGNhbGxiYWNrcwogICAgICB1c2luZyBAcmVmIEhBTF9TTUJVU19SZWdpc3RlckNhbGxiYWNrKCkgYmVmb3JlIGNhbGxpbmcgQHJlZiBIQUxfU01CVVNfRGVJbml0KCkKICAgICAgb3IgQHJlZiBIQUxfU01CVVNfSW5pdCgpIGZ1bmN0aW9uLgotCisgICAgWy4uXQogICAgICBXaGVuIHRoZSBjb21waWxhdGlvbiBmbGFnIFVTRV9IQUxfU01CVVNfUkVHSVNURVJfQ0FMTEJBQ0tTIGlzIHNldCB0byAwIG9yCiAgICAgIG5vdCBkZWZpbmVkLCB0aGUgY2FsbGJhY2sgcmVnaXN0cmF0aW9uIGZlYXR1cmUgaXMgbm90IGF2YWlsYWJsZSBhbmQgYWxsIGNhbGxiYWNrcwogICAgICBhcmUgc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIHdlYWsgZnVuY3Rpb25zLgpAQCAtMjAzLDE4ICsyMDMsMTggQEAKIC8qKiBAYWRkdG9ncm91cCBTTUJVU19Qcml2YXRlX0Z1bmN0aW9ucyBTTUJVUyBQcml2YXRlIEZ1bmN0aW9ucwogICAqIEB7CiAgICovCi1zdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgU01CVVNfV2FpdE9uRmxhZ1VudGlsVGltZW91dChzdHJ1Y3QgX19TTUJVU19IYW5kbGVUeXBlRGVmICpoc21idXMsIHVpbnQzMl90IEZsYWcsIEZsYWdTdGF0dXMgU3RhdHVzLCB1aW50MzJfdCBUaW1lb3V0KTsKK3N0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBTTUJVU19XYWl0T25GbGFnVW50aWxUaW1lb3V0KFNNQlVTX0hhbmRsZVR5cGVEZWYgKmhzbWJ1cywgdWludDMyX3QgRmxhZywgRmxhZ1N0YXR1cyBTdGF0dXMsIHVpbnQzMl90IFRpbWVvdXQpOwogCi1zdGF0aWMgdm9pZCBTTUJVU19FbmFibGVfSVJRKHN0cnVjdCBfX1NNQlVTX0hhbmRsZVR5cGVEZWYgKmhzbWJ1cywgdWludDMyX3QgSW50ZXJydXB0UmVxdWVzdCk7Ci1zdGF0aWMgdm9pZCBTTUJVU19EaXNhYmxlX0lSUShzdHJ1Y3QgX19TTUJVU19IYW5kbGVUeXBlRGVmICpoc21idXMsIHVpbnQzMl90IEludGVycnVwdFJlcXVlc3QpOwotc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIFNNQlVTX01hc3Rlcl9JU1Ioc3RydWN0IF9fU01CVVNfSGFuZGxlVHlwZURlZiAqaHNtYnVzLCB1aW50MzJfdCBTdGF0dXNGbGFncyk7Ci1zdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgU01CVVNfU2xhdmVfSVNSKHN0cnVjdCBfX1NNQlVTX0hhbmRsZVR5cGVEZWYgKmhzbWJ1cywgdWludDMyX3QgU3RhdHVzRmxhZ3MpOworc3RhdGljIHZvaWQgU01CVVNfRW5hYmxlX0lSUShTTUJVU19IYW5kbGVUeXBlRGVmICpoc21idXMsIHVpbnQzMl90IEludGVycnVwdFJlcXVlc3QpOworc3RhdGljIHZvaWQgU01CVVNfRGlzYWJsZV9JUlEoU01CVVNfSGFuZGxlVHlwZURlZiAqaHNtYnVzLCB1aW50MzJfdCBJbnRlcnJ1cHRSZXF1ZXN0KTsKK3N0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBTTUJVU19NYXN0ZXJfSVNSKFNNQlVTX0hhbmRsZVR5cGVEZWYgKmhzbWJ1cywgdWludDMyX3QgU3RhdHVzRmxhZ3MpOworc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIFNNQlVTX1NsYXZlX0lTUihTTUJVU19IYW5kbGVUeXBlRGVmICpoc21idXMsIHVpbnQzMl90IFN0YXR1c0ZsYWdzKTsKIAotc3RhdGljIHZvaWQgU01CVVNfQ29udmVydE90aGVyWGZlck9wdGlvbnMoc3RydWN0IF9fU01CVVNfSGFuZGxlVHlwZURlZiAqaHNtYnVzKTsKK3N0YXRpYyB2b2lkIFNNQlVTX0NvbnZlcnRPdGhlclhmZXJPcHRpb25zKFNNQlVTX0hhbmRsZVR5cGVEZWYgKmhzbWJ1cyk7CiAKLXN0YXRpYyB2b2lkIFNNQlVTX0lURXJyb3JIYW5kbGVyKHN0cnVjdCBfX1NNQlVTX0hhbmRsZVR5cGVEZWYgKmhzbWJ1cyk7CitzdGF0aWMgdm9pZCBTTUJVU19JVEVycm9ySGFuZGxlcihTTUJVU19IYW5kbGVUeXBlRGVmICpoc21idXMpOwogCi1zdGF0aWMgdm9pZCBTTUJVU19UcmFuc2ZlckNvbmZpZyhzdHJ1Y3QgX19TTUJVU19IYW5kbGVUeXBlRGVmICpoc21idXMsICB1aW50MTZfdCBEZXZBZGRyZXNzLCB1aW50OF90IFNpemUsIHVpbnQzMl90IE1vZGUsIHVpbnQzMl90IFJlcXVlc3QpOworc3RhdGljIHZvaWQgU01CVVNfVHJhbnNmZXJDb25maWcoU01CVVNfSGFuZGxlVHlwZURlZiAqaHNtYnVzLCAgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDhfdCBTaXplLCB1aW50MzJfdCBNb2RlLCB1aW50MzJfdCBSZXF1ZXN0KTsKIC8qKgogICAqIEB9CiAgICovCkBAIC0xODAxLDcgKzE4MDEsNyBAQAogICAqIEBwYXJhbSAgU3RhdHVzRmxhZ3MgVmFsdWUgb2YgSW50ZXJydXB0IEZsYWdzLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIFNNQlVTX01hc3Rlcl9JU1Ioc3RydWN0IF9fU01CVVNfSGFuZGxlVHlwZURlZiAqaHNtYnVzLCB1aW50MzJfdCBTdGF0dXNGbGFncykKK3N0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBTTUJVU19NYXN0ZXJfSVNSKFNNQlVTX0hhbmRsZVR5cGVEZWYgKmhzbWJ1cywgdWludDMyX3QgU3RhdHVzRmxhZ3MpCiB7CiAgIHVpbnQxNl90IERldkFkZHJlc3M7CiAKQEAgLTIwODUsNyArMjA4NSw3IEBACiAgICogQHBhcmFtICBTdGF0dXNGbGFncyBWYWx1ZSBvZiBJbnRlcnJ1cHQgRmxhZ3MuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1zdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgU01CVVNfU2xhdmVfSVNSKHN0cnVjdCBfX1NNQlVTX0hhbmRsZVR5cGVEZWYgKmhzbWJ1cywgdWludDMyX3QgU3RhdHVzRmxhZ3MpCitzdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgU01CVVNfU2xhdmVfSVNSKFNNQlVTX0hhbmRsZVR5cGVEZWYgKmhzbWJ1cywgdWludDMyX3QgU3RhdHVzRmxhZ3MpCiB7CiAgIHVpbnQ4X3QgVHJhbnNmZXJEaXJlY3Rpb247CiAgIHVpbnQxNl90IFNsYXZlQWRkckNvZGU7CkBAIC0yMzQxLDcgKzIzNDEsNyBAQAogICAqIEBwYXJhbSAgSW50ZXJydXB0UmVxdWVzdCBWYWx1ZSBvZiBAcmVmIFNNQlVTX0ludGVycnVwdF9jb25maWd1cmF0aW9uX2RlZmluaXRpb24uCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1zdGF0aWMgdm9pZCBTTUJVU19FbmFibGVfSVJRKHN0cnVjdCBfX1NNQlVTX0hhbmRsZVR5cGVEZWYgKmhzbWJ1cywgdWludDMyX3QgSW50ZXJydXB0UmVxdWVzdCkKK3N0YXRpYyB2b2lkIFNNQlVTX0VuYWJsZV9JUlEoU01CVVNfSGFuZGxlVHlwZURlZiAqaHNtYnVzLCB1aW50MzJfdCBJbnRlcnJ1cHRSZXF1ZXN0KQogewogICB1aW50MzJfdCB0bXBpc3IgPSAwVUw7CiAKQEAgLTIzODEsNyArMjM4MSw3IEBACiAgICogQHBhcmFtICBJbnRlcnJ1cHRSZXF1ZXN0IFZhbHVlIG9mIEByZWYgU01CVVNfSW50ZXJydXB0X2NvbmZpZ3VyYXRpb25fZGVmaW5pdGlvbi4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLXN0YXRpYyB2b2lkIFNNQlVTX0Rpc2FibGVfSVJRKHN0cnVjdCBfX1NNQlVTX0hhbmRsZVR5cGVEZWYgKmhzbWJ1cywgdWludDMyX3QgSW50ZXJydXB0UmVxdWVzdCkKK3N0YXRpYyB2b2lkIFNNQlVTX0Rpc2FibGVfSVJRKFNNQlVTX0hhbmRsZVR5cGVEZWYgKmhzbWJ1cywgdWludDMyX3QgSW50ZXJydXB0UmVxdWVzdCkKIHsKICAgdWludDMyX3QgdG1waXNyID0gMFVMOwogICB1aW50MzJfdCB0bXBzdGF0ZSA9IGhzbWJ1cy0+U3RhdGU7CkBAIC0yNDUzLDcgKzI0NTMsNyBAQAogICAqIEBwYXJhbSAgaHNtYnVzIFNNQlVTIGhhbmRsZS4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KLXN0YXRpYyB2b2lkIFNNQlVTX0lURXJyb3JIYW5kbGVyKHN0cnVjdCBfX1NNQlVTX0hhbmRsZVR5cGVEZWYgKmhzbWJ1cykKK3N0YXRpYyB2b2lkIFNNQlVTX0lURXJyb3JIYW5kbGVyKFNNQlVTX0hhbmRsZVR5cGVEZWYgKmhzbWJ1cykKIHsKICAgdWludDMyX3QgaXRmbGFncyAgID0gUkVBRF9SRUcoaHNtYnVzLT5JbnN0YW5jZS0+SVNSKTsKICAgdWludDMyX3QgaXRzb3VyY2VzID0gUkVBRF9SRUcoaHNtYnVzLT5JbnN0YW5jZS0+Q1IxKTsKQEAgLTI1NTQsNyArMjU1NCw3IEBACiAgICogQHBhcmFtICBUaW1lb3V0IFRpbWVvdXQgZHVyYXRpb24KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLXN0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBTTUJVU19XYWl0T25GbGFnVW50aWxUaW1lb3V0KHN0cnVjdCBfX1NNQlVTX0hhbmRsZVR5cGVEZWYgKmhzbWJ1cywgdWludDMyX3QgRmxhZywgRmxhZ1N0YXR1cyBTdGF0dXMsIHVpbnQzMl90IFRpbWVvdXQpCitzdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgU01CVVNfV2FpdE9uRmxhZ1VudGlsVGltZW91dChTTUJVU19IYW5kbGVUeXBlRGVmICpoc21idXMsIHVpbnQzMl90IEZsYWcsIEZsYWdTdGF0dXMgU3RhdHVzLCB1aW50MzJfdCBUaW1lb3V0KQogewogICB1aW50MzJfdCB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOwogCkBAIC0yNjAzLDcgKzI2MDMsNyBAQAogICAqICAgICBAYXJnIEByZWYgU01CVVNfR0VORVJBVEVfU1RBUlRfV1JJVEUgR2VuZXJhdGUgUmVzdGFydCBmb3Igd3JpdGUgcmVxdWVzdC4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KLXN0YXRpYyB2b2lkIFNNQlVTX1RyYW5zZmVyQ29uZmlnKHN0cnVjdCBfX1NNQlVTX0hhbmRsZVR5cGVEZWYgKmhzbWJ1cywgIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQ4X3QgU2l6ZSwgdWludDMyX3QgTW9kZSwgdWludDMyX3QgUmVxdWVzdCkKK3N0YXRpYyB2b2lkIFNNQlVTX1RyYW5zZmVyQ29uZmlnKFNNQlVTX0hhbmRsZVR5cGVEZWYgKmhzbWJ1cywgIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQ4X3QgU2l6ZSwgdWludDMyX3QgTW9kZSwgdWludDMyX3QgUmVxdWVzdCkKIHsKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1NNQlVTX0FMTF9JTlNUQU5DRShoc21idXMtPkluc3RhbmNlKSk7CkBAIC0yNjIwLDcgKzI2MjAsNyBAQAogICAqIEBwYXJhbSAgaHNtYnVzIFNNQlVTIGhhbmRsZS4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KLXN0YXRpYyB2b2lkIFNNQlVTX0NvbnZlcnRPdGhlclhmZXJPcHRpb25zKHN0cnVjdCBfX1NNQlVTX0hhbmRsZVR5cGVEZWYgKmhzbWJ1cykKK3N0YXRpYyB2b2lkIFNNQlVTX0NvbnZlcnRPdGhlclhmZXJPcHRpb25zKFNNQlVTX0hhbmRsZVR5cGVEZWYgKmhzbWJ1cykKIHsKICAgLyogaWYgdXNlciBzZXQgWGZlck9wdGlvbnMgdG8gU01CVVNfT1RIRVJfRlJBTUVfTk9fUEVDICAgKi8KICAgLyogaXQgcmVxdWVzdCBpbXBsaWNpdGx5IHRvIGdlbmVyYXRlIGEgcmVzdGFydCBjb25kaXRpb24gKi8KZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmc0eHhfaGFsX3NwaS5jIGIvU3JjL3N0bTMyZzR4eF9oYWxfc3BpLmMKaW5kZXggZmE1ZTNlYS4uYTdlOGNkNiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZzR4eF9oYWxfc3BpLmMKKysrIGIvU3JjL3N0bTMyZzR4eF9oYWxfc3BpLmMKQEAgLTIyNzgsNyArMjI3OCw4IEBACiAgICAgICAgIGJyZWFrOwogICAgICAgfQogICAgICAgY291bnQtLTsKLSAgICB9IHdoaWxlIChoc3BpLT5TdGF0ZSAhPSBIQUxfU1BJX1NUQVRFX0FCT1JUKTsKKyAgICB9CisgICAgd2hpbGUgKGhzcGktPlN0YXRlICE9IEhBTF9TUElfU1RBVEVfQUJPUlQpOwogICAgIC8qIFJlc2V0IFRpbWVvdXQgQ291bnRlciAqLwogICAgIGNvdW50ID0gcmVzZXRjb3VudDsKICAgfQpAQCAtMjI5NSw3ICsyMjk2LDggQEAKICAgICAgICAgYnJlYWs7CiAgICAgICB9CiAgICAgICBjb3VudC0tOwotICAgIH0gd2hpbGUgKGhzcGktPlN0YXRlICE9IEhBTF9TUElfU1RBVEVfQUJPUlQpOworICAgIH0KKyAgICB3aGlsZSAoaHNwaS0+U3RhdGUgIT0gSEFMX1NQSV9TVEFURV9BQk9SVCk7CiAgICAgLyogUmVzZXQgVGltZW91dCBDb3VudGVyICovCiAgICAgY291bnQgPSByZXNldGNvdW50OwogICB9CkBAIC0yNDQwLDcgKzI0NDIsOCBAQAogICAgICAgICBicmVhazsKICAgICAgIH0KICAgICAgIGNvdW50LS07Ci0gICAgfSB3aGlsZSAoaHNwaS0+U3RhdGUgIT0gSEFMX1NQSV9TVEFURV9BQk9SVCk7CisgICAgfQorICAgIHdoaWxlIChoc3BpLT5TdGF0ZSAhPSBIQUxfU1BJX1NUQVRFX0FCT1JUKTsKICAgICAvKiBSZXNldCBUaW1lb3V0IENvdW50ZXIgKi8KICAgICBjb3VudCA9IHJlc2V0Y291bnQ7CiAgIH0KQEAgLTI0NTcsNyArMjQ2MCw4IEBACiAgICAgICAgIGJyZWFrOwogICAgICAgfQogICAgICAgY291bnQtLTsKLSAgICB9IHdoaWxlIChoc3BpLT5TdGF0ZSAhPSBIQUxfU1BJX1NUQVRFX0FCT1JUKTsKKyAgICB9CisgICAgd2hpbGUgKGhzcGktPlN0YXRlICE9IEhBTF9TUElfU1RBVEVfQUJPUlQpOwogICAgIC8qIFJlc2V0IFRpbWVvdXQgQ291bnRlciAqLwogICAgIGNvdW50ID0gcmVzZXRjb3VudDsKICAgfQpAQCAtMzA1MSw4ICszMDU1LDE3IEBACiAgICAgfQogI2VuZGlmIC8qIFVTRV9TUElfQ1JDICovCiAKLSAgICAvKiBEaXNhYmxlIFJ4L1R4IERNQSBSZXF1ZXN0IChkb25lIGJ5IGRlZmF1bHQgdG8gaGFuZGxlIHRoZSBjYXNlIG1hc3RlciByeCBkaXJlY3Rpb24gMiBsaW5lcykgKi8KLSAgICBDTEVBUl9CSVQoaHNwaS0+SW5zdGFuY2UtPkNSMiwgU1BJX0NSMl9UWERNQUVOIHwgU1BJX0NSMl9SWERNQUVOKTsKKyAgICAvKiBDaGVjayBpZiB3ZSBhcmUgaW4gTWFzdGVyIFJYIDIgbGluZSBtb2RlICovCisgICAgaWYgKChoc3BpLT5Jbml0LkRpcmVjdGlvbiA9PSBTUElfRElSRUNUSU9OXzJMSU5FUykgJiYgKGhzcGktPkluaXQuTW9kZSA9PSBTUElfTU9ERV9NQVNURVIpKQorICAgIHsKKyAgICAgIC8qIERpc2FibGUgUngvVHggRE1BIFJlcXVlc3QgKGRvbmUgYnkgZGVmYXVsdCB0byBoYW5kbGUgdGhlIGNhc2UgbWFzdGVyIHJ4IGRpcmVjdGlvbiAyIGxpbmVzKSAqLworICAgICAgQ0xFQVJfQklUKGhzcGktPkluc3RhbmNlLT5DUjIsIFNQSV9DUjJfVFhETUFFTiB8IFNQSV9DUjJfUlhETUFFTik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAvKiBOb3JtYWwgY2FzZSAqLworICAgICAgQ0xFQVJfQklUKGhzcGktPkluc3RhbmNlLT5DUjIsIFNQSV9DUjJfUlhETUFFTik7CisgICAgfQogCiAgICAgLyogQ2hlY2sgdGhlIGVuZCBvZiB0aGUgdHJhbnNhY3Rpb24gKi8KICAgICBpZiAoU1BJX0VuZFJ4VHJhbnNhY3Rpb24oaHNwaSwgU1BJX0RFRkFVTFRfVElNRU9VVCwgdGlja3N0YXJ0KSAhPSBIQUxfT0spCkBAIC00MTcxLDcgKzQxODQsOCBAQAogICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNvdW50LS07Ci0gIH0gd2hpbGUgKEhBTF9JU19CSVRfU0VUKGhzcGktPkluc3RhbmNlLT5DUjIsIFNQSV9DUjJfUlhORUlFKSk7CisgIH0KKyAgd2hpbGUgKEhBTF9JU19CSVRfU0VUKGhzcGktPkluc3RhbmNlLT5DUjIsIFNQSV9DUjJfUlhORUlFKSk7CiAKICAgLyogQ29udHJvbCB0aGUgQlNZIGZsYWcgKi8KICAgaWYgKFNQSV9XYWl0RmxhZ1N0YXRlVW50aWxUaW1lb3V0KGhzcGksIFNQSV9GTEFHX0JTWSwgUkVTRVQsIFNQSV9ERUZBVUxUX1RJTUVPVVQsIEhBTF9HZXRUaWNrKCkpICE9IEhBTF9PSykKQEAgLTQyMTIsNyArNDIyNiw4IEBACiAgICAgICBicmVhazsKICAgICB9CiAgICAgY291bnQtLTsKLSAgfSB3aGlsZSAoSEFMX0lTX0JJVF9TRVQoaHNwaS0+SW5zdGFuY2UtPkNSMiwgU1BJX0NSMl9UWEVJRSkpOworICB9CisgIHdoaWxlIChIQUxfSVNfQklUX1NFVChoc3BpLT5JbnN0YW5jZS0+Q1IyLCBTUElfQ1IyX1RYRUlFKSk7CiAKICAgaWYgKFNQSV9FbmRSeFR4VHJhbnNhY3Rpb24oaHNwaSwgU1BJX0RFRkFVTFRfVElNRU9VVCwgSEFMX0dldFRpY2soKSkgIT0gSEFMX09LKQogICB7CkBAIC00MjQzLDcgKzQyNTgsOCBAQAogICAgICAgICBicmVhazsKICAgICAgIH0KICAgICAgIGNvdW50LS07Ci0gICAgfSB3aGlsZSAoSEFMX0lTX0JJVF9TRVQoaHNwaS0+SW5zdGFuY2UtPkNSMiwgU1BJX0NSMl9SWE5FSUUpKTsKKyAgICB9CisgICAgd2hpbGUgKEhBTF9JU19CSVRfU0VUKGhzcGktPkluc3RhbmNlLT5DUjIsIFNQSV9DUjJfUlhORUlFKSk7CiAKICAgICAvKiBDb250cm9sIHRoZSBCU1kgZmxhZyAqLwogICAgIGlmIChTUElfV2FpdEZsYWdTdGF0ZVVudGlsVGltZW91dChoc3BpLCBTUElfRkxBR19CU1ksIFJFU0VULCBTUElfREVGQVVMVF9USU1FT1VULCBIQUxfR2V0VGljaygpKSAhPSBIQUxfT0spCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJnNHh4X2hhbF90aW0uYyBiL1NyYy9zdG0zMmc0eHhfaGFsX3RpbS5jCmluZGV4IDU4YWEzZTYuLjI1MGI2MGMgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmc0eHhfaGFsX3RpbS5jCisrKyBiL1NyYy9zdG0zMmc0eHhfaGFsX3RpbS5jCkBAIC0yMDUsNyArMjA1LDcgQEAKIC8qIFByaXZhdGUgZGVmaW5lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAjZGVmaW5lIFRJTXhfQUYyX09DUlNFTCBUSU0xX0FGMl9PQ1JTRUwKIAotLyogUHJpdmF0ZSBtYWNybyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFByaXZhdGUgbWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBQcml2YXRlIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogUHJpdmF0ZSBmdW5jdGlvbiBwcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qKiBAYWRkdG9ncm91cCBUSU1fUHJpdmF0ZV9GdW5jdGlvbnMKQEAgLTIyNyw2ICsyMjcsNyBAQAogc3RhdGljIHZvaWQgVElNX0lUUnhfU2V0Q29uZmlnKFRJTV9UeXBlRGVmICpUSU14LCB1aW50MzJfdCBJbnB1dFRyaWdnZXJTb3VyY2UpOwogc3RhdGljIHZvaWQgVElNX0RNQVBlcmlvZEVsYXBzZWRDcGx0KERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKTsKIHN0YXRpYyB2b2lkIFRJTV9ETUFQZXJpb2RFbGFwc2VkSGFsZkNwbHQoRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpOworc3RhdGljIHZvaWQgVElNX0RNQURlbGF5UHVsc2VDcGx0KERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKTsKIHN0YXRpYyB2b2lkIFRJTV9ETUFUcmlnZ2VyQ3BsdChETUFfSGFuZGxlVHlwZURlZiAqaGRtYSk7CiBzdGF0aWMgdm9pZCBUSU1fRE1BVHJpZ2dlckhhbGZDcGx0KERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKTsKIHN0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBUSU1fU2xhdmVUaW1lcl9TZXRDb25maWcoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sCkBAIC0zMTIsNiArMzEzLDEzIEBACiAgIC8qIFNldCB0aGUgVGltZSBCYXNlIGNvbmZpZ3VyYXRpb24gKi8KICAgVElNX0Jhc2VfU2V0Q29uZmlnKGh0aW0tPkluc3RhbmNlLCAmaHRpbS0+SW5pdCk7CiAKKyAgLyogSW5pdGlhbGl6ZSB0aGUgRE1BIGJ1cnN0IG9wZXJhdGlvbiBzdGF0ZSAqLworICBodGltLT5ETUFCdXJzdFN0YXRlID0gSEFMX0RNQV9CVVJTVF9TVEFURV9SRUFEWTsKKworICAvKiBJbml0aWFsaXplIHRoZSBUSU0gY2hhbm5lbHMgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUX0FMTChodGltLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVF9BTEwoaHRpbSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKwogICAvKiBJbml0aWFsaXplIHRoZSBUSU0gc3RhdGUqLwogICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVBRFk7CiAKQEAgLTM0NSw2ICszNTMsMTMgQEAKICAgSEFMX1RJTV9CYXNlX01zcERlSW5pdChodGltKTsKICNlbmRpZiAvKiBVU0VfSEFMX1RJTV9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KIAorICAvKiBDaGFuZ2UgdGhlIERNQSBidXJzdCBvcGVyYXRpb24gc3RhdGUgKi8KKyAgaHRpbS0+RE1BQnVyc3RTdGF0ZSA9IEhBTF9ETUFfQlVSU1RfU1RBVEVfUkVTRVQ7CisKKyAgLyogQ2hhbmdlIHRoZSBUSU0gY2hhbm5lbHMgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUX0FMTChodGltLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVTRVQpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVF9BTEwoaHRpbSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFU0VUKTsKKwogICAvKiBDaGFuZ2UgVElNIHN0YXRlICovCiAgIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRVNFVDsKIApAQCAtMzk3LDYgKzQxMiwxMiBAQAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CiAKKyAgLyogQ2hlY2sgdGhlIFRJTSBzdGF0ZSAqLworICBpZiAoaHRpbS0+U3RhdGUgIT0gSEFMX1RJTV9TVEFURV9SRUFEWSkKKyAgeworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKwogICAvKiBTZXQgdGhlIFRJTSBzdGF0ZSAqLwogICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfQlVTWTsKIApAQCAtNDA3LDkgKzQyOCw2IEBACiAgICAgX19IQUxfVElNX0VOQUJMRShodGltKTsKICAgfQogCi0gIC8qIENoYW5nZSB0aGUgVElNIHN0YXRlKi8KLSAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOwotCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgcmV0dXJuIEhBTF9PSzsKIH0KQEAgLTQyNCwxMyArNDQyLDEwIEBACiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKIAotICAvKiBTZXQgdGhlIFRJTSBzdGF0ZSAqLwotICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfQlVTWTsKLQogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOwogCi0gIC8qIENoYW5nZSB0aGUgVElNIHN0YXRlKi8KKyAgLyogU2V0IHRoZSBUSU0gc3RhdGUgKi8KICAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOwogCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KQEAgLTQ0OSw2ICs0NjQsMTUgQEAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOwogCisgIC8qIENoZWNrIHRoZSBUSU0gc3RhdGUgKi8KKyAgaWYgKGh0aW0tPlN0YXRlICE9IEhBTF9USU1fU1RBVEVfUkVBRFkpCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisKKyAgLyogU2V0IHRoZSBUSU0gc3RhdGUgKi8KKyAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX0JVU1k7CisKICAgLyogRW5hYmxlIHRoZSBUSU0gVXBkYXRlIGludGVycnVwdCAqLwogICBfX0hBTF9USU1fRU5BQkxFX0lUKGh0aW0sIFRJTV9JVF9VUERBVEUpOwogCkBAIC00NzIsMTIgKzQ5NiwxNiBAQAogewogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CisgIAogICAvKiBEaXNhYmxlIHRoZSBUSU0gVXBkYXRlIGludGVycnVwdCAqLwogICBfX0hBTF9USU1fRElTQUJMRV9JVChodGltLCBUSU1fSVRfVVBEQVRFKTsKIAogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOwogCisgIC8qIFNldCB0aGUgVElNIHN0YXRlICovCisgIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRUFEWTsKKwogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBIQUxfT0s7CiB9CkBAIC00OTYsNiArNTI0LDcgQEAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9ETUFfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKIAorICAvKiBTZXQgdGhlIFRJTSBzdGF0ZSAqLwogICBpZiAoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9CVVNZKQogICB7CiAgICAgcmV0dXJuIEhBTF9CVVNZOwpAQCAtNTEzLDcgKzU0Miw3IEBACiAgIH0KICAgZWxzZQogICB7Ci0gICAgLyogbm90aGluZyB0byBkbyAqLworICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KIAogICAvKiBTZXQgdGhlIERNQSBQZXJpb2QgZWxhcHNlZCBjYWxsYmFja3MgKi8KQEAgLTU2MSw3ICs1OTAsNyBAQAogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOwogCi0gIC8qIENoYW5nZSB0aGUgaHRpbSBzdGF0ZSAqLworICAvKiBTZXQgdGhlIFRJTSBzdGF0ZSAqLwogICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVBRFk7CiAKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwpAQCAtNjQ0LDYgKzY3MywxMyBAQAogICAvKiBJbml0IHRoZSBiYXNlIHRpbWUgZm9yIHRoZSBPdXRwdXQgQ29tcGFyZSAqLwogICBUSU1fQmFzZV9TZXRDb25maWcoaHRpbS0+SW5zdGFuY2UsICAmaHRpbS0+SW5pdCk7CiAKKyAgLyogSW5pdGlhbGl6ZSB0aGUgRE1BIGJ1cnN0IG9wZXJhdGlvbiBzdGF0ZSAqLworICBodGltLT5ETUFCdXJzdFN0YXRlID0gSEFMX0RNQV9CVVJTVF9TVEFURV9SRUFEWTsKKworICAvKiBJbml0aWFsaXplIHRoZSBUSU0gY2hhbm5lbHMgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUX0FMTChodGltLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVF9BTEwoaHRpbSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKwogICAvKiBJbml0aWFsaXplIHRoZSBUSU0gc3RhdGUqLwogICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVBRFk7CiAKQEAgLTY3Nyw2ICs3MTMsMTMgQEAKICAgSEFMX1RJTV9PQ19Nc3BEZUluaXQoaHRpbSk7CiAjZW5kaWYgLyogVVNFX0hBTF9USU1fUkVHSVNURVJfQ0FMTEJBQ0tTICovCiAKKyAgLyogQ2hhbmdlIHRoZSBETUEgYnVyc3Qgb3BlcmF0aW9uIHN0YXRlICovCisgIGh0aW0tPkRNQUJ1cnN0U3RhdGUgPSBIQUxfRE1BX0JVUlNUX1NUQVRFX1JFU0VUOworCisgIC8qIENoYW5nZSB0aGUgVElNIGNoYW5uZWxzIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVF9BTEwoaHRpbSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFU0VUKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVRfQUxMKGh0aW0sIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVCk7CisKICAgLyogQ2hhbmdlIFRJTSBzdGF0ZSAqLwogICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVTRVQ7CiAKQEAgLTczNiw2ICs3NzksMTUgQEAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DQ1hfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwpKTsKIAorICAvKiBDaGVjayB0aGUgVElNIGNoYW5uZWwgc3RhdGUgKi8KKyAgaWYgKFRJTV9DSEFOTkVMX1NUQVRFX0dFVChodGltLCBDaGFubmVsKSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbCBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworCiAgIC8qIEVuYWJsZSB0aGUgT3V0cHV0IGNvbXBhcmUgY2hhbm5lbCAqLwogICBUSU1fQ0N4Q2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCwgVElNX0NDeF9FTkFCTEUpOwogCkBAIC03ODYsNiArODM4LDkgQEAKICAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwogICBfX0hBTF9USU1fRElTQUJMRShodGltKTsKIAorICAvKiBTZXQgdGhlIFRJTSBjaGFubmVsIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgcmV0dXJuIEhBTF9PSzsKIH0KQEAgLTgwOCw2ICs4NjMsMTUgQEAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DQ1hfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwpKTsKIAorICAvKiBDaGVjayB0aGUgVElNIGNoYW5uZWwgc3RhdGUgKi8KKyAgaWYgKFRJTV9DSEFOTkVMX1NUQVRFX0dFVChodGltLCBDaGFubmVsKSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbCBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworCiAgIHN3aXRjaCAoQ2hhbm5lbCkKICAgewogICAgIGNhc2UgVElNX0NIQU5ORUxfMToKQEAgLTkyNCw2ICs5ODgsOSBAQAogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOwogCisgIC8qIFNldCB0aGUgVElNIGNoYW5uZWwgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwogICByZXR1cm4gSEFMX09LOwogfQpAQCAtOTQ4LDExICsxMDE1LDEyIEBACiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fQ0NYX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsKSk7CiAKLSAgaWYgKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfQlVTWSkKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbCBzdGF0ZSAqLworICBpZiAoVElNX0NIQU5ORUxfU1RBVEVfR0VUKGh0aW0sIENoYW5uZWwpID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKQogICB7CiAgICAgcmV0dXJuIEhBTF9CVVNZOwogICB9Ci0gIGVsc2UgaWYgKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfUkVBRFkpCisgIGVsc2UgaWYgKFRJTV9DSEFOTkVMX1NUQVRFX0dFVChodGltLCBDaGFubmVsKSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCiAgIHsKICAgICBpZiAoKHBEYXRhID09IE5VTEwpICYmIChMZW5ndGggPiAwVSkpCiAgICAgewpAQCAtOTYwLDEyICsxMDI4LDEyIEBACiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfQlVTWTsKKyAgICAgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CiAgICAgfQogICB9CiAgIGVsc2UKICAgewotICAgIC8qIG5vdGhpbmcgdG8gZG8gKi8KKyAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CiAKICAgc3dpdGNoIChDaGFubmVsKQpAQCAtMTEzOCw4ICsxMjA2LDggQEAKICAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwogICBfX0hBTF9USU1fRElTQUJMRShodGltKTsKIAotICAvKiBDaGFuZ2UgdGhlIGh0aW0gc3RhdGUgKi8KLSAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOworICAvKiBTZXQgdGhlIFRJTSBjaGFubmVsIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOwogCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgcmV0dXJuIEhBTF9PSzsKQEAgLTEyMjEsNiArMTI4OSwxMyBAQAogICAvKiBJbml0IHRoZSBiYXNlIHRpbWUgZm9yIHRoZSBQV00gKi8KICAgVElNX0Jhc2VfU2V0Q29uZmlnKGh0aW0tPkluc3RhbmNlLCAmaHRpbS0+SW5pdCk7CiAKKyAgLyogSW5pdGlhbGl6ZSB0aGUgRE1BIGJ1cnN0IG9wZXJhdGlvbiBzdGF0ZSAqLworICBodGltLT5ETUFCdXJzdFN0YXRlID0gSEFMX0RNQV9CVVJTVF9TVEFURV9SRUFEWTsKKworICAvKiBJbml0aWFsaXplIHRoZSBUSU0gY2hhbm5lbHMgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUX0FMTChodGltLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVF9BTEwoaHRpbSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKwogICAvKiBJbml0aWFsaXplIHRoZSBUSU0gc3RhdGUqLwogICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVBRFk7CiAKQEAgLTEyNTQsNiArMTMyOSwxMyBAQAogICBIQUxfVElNX1BXTV9Nc3BEZUluaXQoaHRpbSk7CiAjZW5kaWYgLyogVVNFX0hBTF9USU1fUkVHSVNURVJfQ0FMTEJBQ0tTICovCiAKKyAgLyogQ2hhbmdlIHRoZSBETUEgYnVyc3Qgb3BlcmF0aW9uIHN0YXRlICovCisgIGh0aW0tPkRNQUJ1cnN0U3RhdGUgPSBIQUxfRE1BX0JVUlNUX1NUQVRFX1JFU0VUOworCisgIC8qIENoYW5nZSB0aGUgVElNIGNoYW5uZWxzIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVF9BTEwoaHRpbSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFU0VUKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVRfQUxMKGh0aW0sIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVCk7CisKICAgLyogQ2hhbmdlIFRJTSBzdGF0ZSAqLwogICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVTRVQ7CiAKQEAgLTEzMTMsNiArMTM5NSwxNSBAQAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDWF9JTlNUQU5DRShodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCkpOwogCisgIC8qIENoZWNrIHRoZSBUSU0gY2hhbm5lbCBzdGF0ZSAqLworICBpZiAoVElNX0NIQU5ORUxfU1RBVEVfR0VUKGh0aW0sIENoYW5uZWwpICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKKyAgeworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKworICAvKiBTZXQgdGhlIFRJTSBjaGFubmVsIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisKICAgLyogRW5hYmxlIHRoZSBDYXB0dXJlIGNvbXBhcmUgY2hhbm5lbCAqLwogICBUSU1fQ0N4Q2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCwgVElNX0NDeF9FTkFCTEUpOwogCkBAIC0xMzYzLDggKzE0NTQsOCBAQAogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOwogCi0gIC8qIENoYW5nZSB0aGUgaHRpbSBzdGF0ZSAqLwotICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVBRFk7CisgIC8qIFNldCB0aGUgVElNIGNoYW5uZWwgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CiAKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwogICByZXR1cm4gSEFMX09LOwpAQCAtMTM4Nyw2ICsxNDc4LDE1IEBACiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fQ0NYX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsKSk7CiAKKyAgLyogQ2hlY2sgdGhlIFRJTSBjaGFubmVsIHN0YXRlICovCisgIGlmIChUSU1fQ0hBTk5FTF9TVEFURV9HRVQoaHRpbSwgQ2hhbm5lbCkgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICB7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCisgIC8qIFNldCB0aGUgVElNIGNoYW5uZWwgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKwogICBzd2l0Y2ggKENoYW5uZWwpCiAgIHsKICAgICBjYXNlIFRJTV9DSEFOTkVMXzE6CkBAIC0xNTAzLDYgKzE2MDMsOSBAQAogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOwogCisgIC8qIFNldCB0aGUgVElNIGNoYW5uZWwgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwogICByZXR1cm4gSEFMX09LOwogfQpAQCAtMTUyNywxMSArMTYzMCwxMiBAQAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDWF9JTlNUQU5DRShodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCkpOwogCi0gIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX0JVU1kpCisgIC8qIFNldCB0aGUgVElNIGNoYW5uZWwgc3RhdGUgKi8KKyAgaWYgKFRJTV9DSEFOTkVMX1NUQVRFX0dFVChodGltLCBDaGFubmVsKSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSkKICAgewogICAgIHJldHVybiBIQUxfQlVTWTsKICAgfQotICBlbHNlIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX1JFQURZKQorICBlbHNlIGlmIChUSU1fQ0hBTk5FTF9TVEFURV9HRVQoaHRpbSwgQ2hhbm5lbCkgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQogICB7CiAgICAgaWYgKChwRGF0YSA9PSBOVUxMKSAmJiAoTGVuZ3RoID4gMFUpKQogICAgIHsKQEAgLTE1MzksMTIgKzE2NDMsMTIgQEAKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9CVVNZOworICAgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKICAgICB9CiAgIH0KICAgZWxzZQogICB7Ci0gICAgLyogbm90aGluZyB0byBkbyAqLworICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KIAogICBzd2l0Y2ggKENoYW5uZWwpCkBAIC0xNzE2LDggKzE4MjAsOCBAQAogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOwogCi0gIC8qIENoYW5nZSB0aGUgaHRpbSBzdGF0ZSAqLwotICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVBRFk7CisgIC8qIFNldCB0aGUgVElNIGNoYW5uZWwgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CiAKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwogICByZXR1cm4gSEFMX09LOwpAQCAtMTc5OSw2ICsxOTAzLDEzIEBACiAgIC8qIEluaXQgdGhlIGJhc2UgdGltZSBmb3IgdGhlIGlucHV0IGNhcHR1cmUgKi8KICAgVElNX0Jhc2VfU2V0Q29uZmlnKGh0aW0tPkluc3RhbmNlLCAmaHRpbS0+SW5pdCk7CiAKKyAgLyogSW5pdGlhbGl6ZSB0aGUgRE1BIGJ1cnN0IG9wZXJhdGlvbiBzdGF0ZSAqLworICBodGltLT5ETUFCdXJzdFN0YXRlID0gSEFMX0RNQV9CVVJTVF9TVEFURV9SRUFEWTsKKworICAvKiBJbml0aWFsaXplIHRoZSBUSU0gY2hhbm5lbHMgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUX0FMTChodGltLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVF9BTEwoaHRpbSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKwogICAvKiBJbml0aWFsaXplIHRoZSBUSU0gc3RhdGUqLwogICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVBRFk7CiAKQEAgLTE4MzIsNiArMTk0MywxMyBAQAogICBIQUxfVElNX0lDX01zcERlSW5pdChodGltKTsKICNlbmRpZiAvKiBVU0VfSEFMX1RJTV9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KIAorICAvKiBDaGFuZ2UgdGhlIERNQSBidXJzdCBvcGVyYXRpb24gc3RhdGUgKi8KKyAgaHRpbS0+RE1BQnVyc3RTdGF0ZSA9IEhBTF9ETUFfQlVSU1RfU1RBVEVfUkVTRVQ7CisKKyAgLyogQ2hhbmdlIHRoZSBUSU0gY2hhbm5lbHMgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUX0FMTChodGltLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVTRVQpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVF9BTEwoaHRpbSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFU0VUKTsKKwogICAvKiBDaGFuZ2UgVElNIHN0YXRlICovCiAgIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRVNFVDsKIApAQCAtMTg4NSwxMCArMjAwMywyMyBAQAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9JQ19TdGFydChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQ2hhbm5lbCkKIHsKICAgdWludDMyX3QgdG1wc21jcjsKKyAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGNoYW5uZWxfc3RhdGUgPSBUSU1fQ0hBTk5FTF9TVEFURV9HRVQoaHRpbSwgQ2hhbm5lbCk7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjb21wbGVtZW50YXJ5X2NoYW5uZWxfc3RhdGUgPSBUSU1fQ0hBTk5FTF9OX1NUQVRFX0dFVChodGltLCBDaGFubmVsKTsKIAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDWF9JTlNUQU5DRShodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCkpOwogCisgIC8qIENoZWNrIHRoZSBUSU0gY2hhbm5lbCBzdGF0ZSAqLworICBpZiAoKGNoYW5uZWxfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgfHwgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpKQorICB7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCisgIC8qIFNldCB0aGUgVElNIGNoYW5uZWwgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworCiAgIC8qIEVuYWJsZSB0aGUgSW5wdXQgQ2FwdHVyZSBjaGFubmVsICovCiAgIFRJTV9DQ3hDaGFubmVsQ21kKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsLCBUSU1fQ0N4X0VOQUJMRSk7CiAKQEAgLTE5MjUsNiArMjA1NiwxMCBAQAogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOwogCisgIC8qIFNldCB0aGUgVElNIGNoYW5uZWwgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwogICByZXR1cm4gSEFMX09LOwogfQpAQCAtMTk0MywxMCArMjA3OCwyMyBAQAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9JQ19TdGFydF9JVChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQ2hhbm5lbCkKIHsKICAgdWludDMyX3QgdG1wc21jcjsKKyAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGNoYW5uZWxfc3RhdGUgPSBUSU1fQ0hBTk5FTF9TVEFURV9HRVQoaHRpbSwgQ2hhbm5lbCk7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjb21wbGVtZW50YXJ5X2NoYW5uZWxfc3RhdGUgPSBUSU1fQ0hBTk5FTF9OX1NUQVRFX0dFVChodGltLCBDaGFubmVsKTsKIAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDWF9JTlNUQU5DRShodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCkpOwogCisgIC8qIENoZWNrIHRoZSBUSU0gY2hhbm5lbCBzdGF0ZSAqLworICBpZiAoKGNoYW5uZWxfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgfHwgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpKQorICB7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCisgIC8qIFNldCB0aGUgVElNIGNoYW5uZWwgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworCiAgIHN3aXRjaCAoQ2hhbm5lbCkKICAgewogICAgIGNhc2UgVElNX0NIQU5ORUxfMToKQEAgLTIwNTAsNiArMjE5OCwxMCBAQAogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOwogCisgIC8qIFNldCB0aGUgVElNIGNoYW5uZWwgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwogICByZXR1cm4gSEFMX09LOwogfQpAQCAtMjA3MCwxNiArMjIyMiwyMSBAQAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9JQ19TdGFydF9ETUEoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IENoYW5uZWwsIHVpbnQzMl90ICpwRGF0YSwgdWludDE2X3QgTGVuZ3RoKQogewogICB1aW50MzJfdCB0bXBzbWNyOworICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgY2hhbm5lbF9zdGF0ZSA9IFRJTV9DSEFOTkVMX1NUQVRFX0dFVChodGltLCBDaGFubmVsKTsKKyAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGNvbXBsZW1lbnRhcnlfY2hhbm5lbF9zdGF0ZSA9IFRJTV9DSEFOTkVMX05fU1RBVEVfR0VUKGh0aW0sIENoYW5uZWwpOwogCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fQ0NYX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fRE1BX0NDX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CiAKLSAgaWYgKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfQlVTWSkKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbCBzdGF0ZSAqLworICBpZiAoKGNoYW5uZWxfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpCisgICB8fCAoY29tcGxlbWVudGFyeV9jaGFubmVsX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKSkKICAgewogICAgIHJldHVybiBIQUxfQlVTWTsKICAgfQotICBlbHNlIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX1JFQURZKQorICBlbHNlIGlmICgoY2hhbm5lbF9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgICAgICAgICYmIChjb21wbGVtZW50YXJ5X2NoYW5uZWxfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKSkKICAgewogICAgIGlmICgocERhdGEgPT0gTlVMTCkgJiYgKExlbmd0aCA+IDBVKSkKICAgICB7CkBAIC0yMDg3LDEyICsyMjQ0LDEzIEBACiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfQlVTWTsKKyAgICAgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgICAgICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CiAgICAgfQogICB9CiAgIGVsc2UKICAgewotICAgIC8qIG5vdGhpbmcgdG8gZG8gKi8KKyAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CiAKICAgc3dpdGNoIChDaGFubmVsKQpAQCAtMjI1Miw4ICsyNDEwLDkgQEAKICAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwogICBfX0hBTF9USU1fRElTQUJMRShodGltKTsKIAotICAvKiBDaGFuZ2UgdGhlIGh0aW0gc3RhdGUgKi8KLSAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOworICAvKiBTZXQgdGhlIFRJTSBjaGFubmVsIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOwogCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgcmV0dXJuIEhBTF9PSzsKQEAgLTIyOTAsNiArMjQ0OSw5IEBACiAgICogICAgICAgICByZXF1aXJlcyBhIHRpbWVyIHJlc2V0IHRvIGF2b2lkIHVuZXhwZWN0ZWQgZGlyZWN0aW9uCiAgICogICAgICAgICBkdWUgdG8gRElSIGJpdCByZWFkb25seSBpbiBjZW50ZXIgYWxpZ25lZCBtb2RlLgogICAqICAgICAgICAgRXg6IGNhbGwgQHJlZiBIQUxfVElNX09uZVB1bHNlX0RlSW5pdCgpIGJlZm9yZSBIQUxfVElNX09uZVB1bHNlX0luaXQoKQorICAqIEBub3RlICAgV2hlbiB0aGUgdGltZXIgaW5zdGFuY2UgaXMgaW5pdGlhbGl6ZWQgaW4gT25lIFB1bHNlIG1vZGUsIHRpbWVyCisgICogICAgICAgICBjaGFubmVscyAxIGFuZCBjaGFubmVsIDIgYXJlIHJlc2VydmVkIGFuZCBjYW5ub3QgYmUgdXNlZCBmb3Igb3RoZXIKKyAgKiAgICAgICAgIHB1cnBvc2UuCiAgICogQHBhcmFtICBodGltIFRJTSBPbmUgUHVsc2UgaGFuZGxlCiAgICogQHBhcmFtICBPbmVQdWxzZU1vZGUgU2VsZWN0IHRoZSBPbmUgcHVsc2UgbW9kZS4KICAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CkBAIC0yMzQ1LDYgKzI1MDcsMTUgQEAKICAgLyogQ29uZmlndXJlIHRoZSBPUE0gTW9kZSAqLwogICBodGltLT5JbnN0YW5jZS0+Q1IxIHw9IE9uZVB1bHNlTW9kZTsKIAorICAvKiBJbml0aWFsaXplIHRoZSBETUEgYnVyc3Qgb3BlcmF0aW9uIHN0YXRlICovCisgIGh0aW0tPkRNQUJ1cnN0U3RhdGUgPSBIQUxfRE1BX0JVUlNUX1NUQVRFX1JFQURZOworCisgIC8qIEluaXRpYWxpemUgdGhlIFRJTSBjaGFubmVscyBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisKICAgLyogSW5pdGlhbGl6ZSB0aGUgVElNIHN0YXRlKi8KICAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOwogCkBAIC0yMzc4LDYgKzI1NDksMTUgQEAKICAgSEFMX1RJTV9PbmVQdWxzZV9Nc3BEZUluaXQoaHRpbSk7CiAjZW5kaWYgLyogVVNFX0hBTF9USU1fUkVHSVNURVJfQ0FMTEJBQ0tTICovCiAKKyAgLyogQ2hhbmdlIHRoZSBETUEgYnVyc3Qgb3BlcmF0aW9uIHN0YXRlICovCisgIGh0aW0tPkRNQUJ1cnN0U3RhdGUgPSBIQUxfRE1BX0JVUlNUX1NUQVRFX1JFU0VUOworCisgIC8qIFNldCB0aGUgVElNIGNoYW5uZWwgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVCk7CisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVTRVQpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVTRVQpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVTRVQpOworCiAgIC8qIENoYW5nZSBUSU0gc3RhdGUgKi8KICAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFU0VUOwogCkBAIC0yNDI4LDkgKzI2MDgsMjkgQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fT25lUHVsc2VfU3RhcnQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IE91dHB1dENoYW5uZWwpCiB7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjaGFubmVsXzFfc3RhdGUgPSBUSU1fQ0hBTk5FTF9TVEFURV9HRVQoaHRpbSwgVElNX0NIQU5ORUxfMSk7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjaGFubmVsXzJfc3RhdGUgPSBUSU1fQ0hBTk5FTF9TVEFURV9HRVQoaHRpbSwgVElNX0NIQU5ORUxfMik7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjb21wbGVtZW50YXJ5X2NoYW5uZWxfMV9zdGF0ZSA9IFRJTV9DSEFOTkVMX05fU1RBVEVfR0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEpOworICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgY29tcGxlbWVudGFyeV9jaGFubmVsXzJfc3RhdGUgPSBUSU1fQ0hBTk5FTF9OX1NUQVRFX0dFVChodGltLCBUSU1fQ0hBTk5FTF8yKTsKKwogICAvKiBQcmV2ZW50IHVudXNlZCBhcmd1bWVudChzKSBjb21waWxhdGlvbiB3YXJuaW5nICovCiAgIFVOVVNFRChPdXRwdXRDaGFubmVsKTsKIAorICAvKiBDaGVjayB0aGUgVElNIGNoYW5uZWxzIHN0YXRlICovCisgIGlmICgoY2hhbm5lbF8xX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKKyAgIHx8IChjaGFubmVsXzJfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgfHwgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8xX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKKyAgIHx8IChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMl9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpKQorICB7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCisgIC8qIFNldCB0aGUgVElNIGNoYW5uZWxzIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworCiAgIC8qIEVuYWJsZSB0aGUgQ2FwdHVyZSBjb21wYXJlIGFuZCB0aGUgSW5wdXQgQ2FwdHVyZSBjaGFubmVscwogICAgIChpbiB0aGUgT1BNIE1vZGUgdGhlIHR3byBwb3NzaWJsZSBjaGFubmVscyB0aGF0IGNhbiBiZSB1c2VkIGFyZSBUSU1fQ0hBTk5FTF8xIGFuZCBUSU1fQ0hBTk5FTF8yKQogICAgIGlmIFRJTV9DSEFOTkVMXzEgaXMgdXNlZCBhcyBvdXRwdXQsIHRoZSBUSU1fQ0hBTk5FTF8yIHdpbGwgYmUgdXNlZCBhcyBpbnB1dCBhbmQKQEAgLTI0ODUsNiArMjY4NSwxMiBAQAogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOwogCisgIC8qIFNldCB0aGUgVElNIGNoYW5uZWxzIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKwogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBIQUxfT0s7CiB9CkBAIC0yNTAwLDkgKzI3MDYsMjkgQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fT25lUHVsc2VfU3RhcnRfSVQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IE91dHB1dENoYW5uZWwpCiB7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjaGFubmVsXzFfc3RhdGUgPSBUSU1fQ0hBTk5FTF9TVEFURV9HRVQoaHRpbSwgVElNX0NIQU5ORUxfMSk7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjaGFubmVsXzJfc3RhdGUgPSBUSU1fQ0hBTk5FTF9TVEFURV9HRVQoaHRpbSwgVElNX0NIQU5ORUxfMik7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjb21wbGVtZW50YXJ5X2NoYW5uZWxfMV9zdGF0ZSA9IFRJTV9DSEFOTkVMX05fU1RBVEVfR0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEpOworICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgY29tcGxlbWVudGFyeV9jaGFubmVsXzJfc3RhdGUgPSBUSU1fQ0hBTk5FTF9OX1NUQVRFX0dFVChodGltLCBUSU1fQ0hBTk5FTF8yKTsKKwogICAvKiBQcmV2ZW50IHVudXNlZCBhcmd1bWVudChzKSBjb21waWxhdGlvbiB3YXJuaW5nICovCiAgIFVOVVNFRChPdXRwdXRDaGFubmVsKTsKIAorICAvKiBDaGVjayB0aGUgVElNIGNoYW5uZWxzIHN0YXRlICovCisgIGlmICgoY2hhbm5lbF8xX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKKyAgIHx8IChjaGFubmVsXzJfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgfHwgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8xX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKKyAgIHx8IChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMl9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpKQorICB7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCisgIC8qIFNldCB0aGUgVElNIGNoYW5uZWxzIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworCiAgIC8qIEVuYWJsZSB0aGUgQ2FwdHVyZSBjb21wYXJlIGFuZCB0aGUgSW5wdXQgQ2FwdHVyZSBjaGFubmVscwogICAgIChpbiB0aGUgT1BNIE1vZGUgdGhlIHR3byBwb3NzaWJsZSBjaGFubmVscyB0aGF0IGNhbiBiZSB1c2VkIGFyZSBUSU1fQ0hBTk5FTF8xIGFuZCBUSU1fQ0hBTk5FTF8yKQogICAgIGlmIFRJTV9DSEFOTkVMXzEgaXMgdXNlZCBhcyBvdXRwdXQsIHRoZSBUSU1fQ0hBTk5FTF8yIHdpbGwgYmUgdXNlZCBhcyBpbnB1dCBhbmQKQEAgLTI1NjgsNiArMjc5NCwxMiBAQAogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOwogCisgIC8qIFNldCB0aGUgVElNIGNoYW5uZWxzIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKwogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBIQUxfT0s7CiB9CkBAIC0yNjA2LDYgKzI4MzgsOSBAQAogICAqIEBub3RlICAgRW5jb2RlciBtb2RlIGFuZCBFeHRlcm5hbCBjbG9jayBtb2RlIDIgYXJlIG5vdCBjb21wYXRpYmxlIGFuZCBtdXN0IG5vdCBiZSBzZWxlY3RlZCB0b2dldGhlcgogICAqICAgICAgICAgRXg6IEEgY2FsbCBmb3IgQHJlZiBIQUxfVElNX0VuY29kZXJfSW5pdCB3aWxsIGVyYXNlIHRoZSBzZXR0aW5ncyBvZiBAcmVmIEhBTF9USU1fQ29uZmlnQ2xvY2tTb3VyY2UKICAgKiAgICAgICAgIHVzaW5nIFRJTV9DTE9DS1NPVVJDRV9FVFJNT0RFMiBhbmQgdmljZSB2ZXJzYQorICAqIEBub3RlICAgV2hlbiB0aGUgdGltZXIgaW5zdGFuY2UgaXMgaW5pdGlhbGl6ZWQgaW4gRW5jb2RlciBtb2RlLCB0aW1lcgorICAqICAgICAgICAgY2hhbm5lbHMgMSBhbmQgY2hhbm5lbCAyIGFyZSByZXNlcnZlZCBhbmQgY2Fubm90IGJlIHVzZWQgZm9yIG90aGVyCisgICogICAgICAgICBwdXJwb3NlLgogICAqIEBwYXJhbSAgaHRpbSBUSU0gRW5jb2RlciBJbnRlcmZhY2UgaGFuZGxlCiAgICogQHBhcmFtICBzQ29uZmlnIFRJTSBFbmNvZGVyIEludGVyZmFjZSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZQogICAqIEByZXR2YWwgSEFMIHN0YXR1cwpAQCAtMjYyMywxNSArMjg1OCwxNSBAQAogICB9CiAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9FTkNPREVSX0lOVEVSRkFDRV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NPVU5URVJfTU9ERShodGltLT5Jbml0LkNvdW50ZXJNb2RlKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fQ0xPQ0tESVZJU0lPTl9ESVYoaHRpbS0+SW5pdC5DbG9ja0RpdmlzaW9uKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fQVVUT1JFTE9BRF9QUkVMT0FEKGh0aW0tPkluaXQuQXV0b1JlbG9hZFByZWxvYWQpKTsKLSAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DQzJfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9FTkNPREVSX01PREUoc0NvbmZpZy0+RW5jb2Rlck1vZGUpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9JQ19TRUxFQ1RJT04oc0NvbmZpZy0+SUMxU2VsZWN0aW9uKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fSUNfU0VMRUNUSU9OKHNDb25maWctPklDMlNlbGVjdGlvbikpOwotICBhc3NlcnRfcGFyYW0oSVNfVElNX0lDX1BPTEFSSVRZKHNDb25maWctPklDMVBvbGFyaXR5KSk7Ci0gIGFzc2VydF9wYXJhbShJU19USU1fSUNfUE9MQVJJVFkoc0NvbmZpZy0+SUMyUG9sYXJpdHkpKTsKKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9FTkNPREVSSU5QVVRfUE9MQVJJVFkoc0NvbmZpZy0+SUMxUG9sYXJpdHkpKTsKKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9FTkNPREVSSU5QVVRfUE9MQVJJVFkoc0NvbmZpZy0+SUMyUG9sYXJpdHkpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9JQ19QUkVTQ0FMRVIoc0NvbmZpZy0+SUMxUHJlc2NhbGVyKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fSUNfUFJFU0NBTEVSKHNDb25maWctPklDMlByZXNjYWxlcikpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0lDX0ZJTFRFUihzQ29uZmlnLT5JQzFGaWx0ZXIpKTsKQEAgLTI3MDMsNiArMjkzOCwxNSBAQAogICAvKiBXcml0ZSB0byBUSU14IENDRVIgKi8KICAgaHRpbS0+SW5zdGFuY2UtPkNDRVIgPSB0bXBjY2VyOwogCisgIC8qIEluaXRpYWxpemUgdGhlIERNQSBidXJzdCBvcGVyYXRpb24gc3RhdGUgKi8KKyAgaHRpbS0+RE1BQnVyc3RTdGF0ZSA9IEhBTF9ETUFfQlVSU1RfU1RBVEVfUkVBRFk7CisKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbHMgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworCiAgIC8qIEluaXRpYWxpemUgdGhlIFRJTSBzdGF0ZSovCiAgIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRUFEWTsKIApAQCAtMjczNyw2ICsyOTgxLDE1IEBACiAgIEhBTF9USU1fRW5jb2Rlcl9Nc3BEZUluaXQoaHRpbSk7CiAjZW5kaWYgLyogVVNFX0hBTF9USU1fUkVHSVNURVJfQ0FMTEJBQ0tTICovCiAKKyAgLyogQ2hhbmdlIHRoZSBETUEgYnVyc3Qgb3BlcmF0aW9uIHN0YXRlICovCisgIGh0aW0tPkRNQUJ1cnN0U3RhdGUgPSBIQUxfRE1BX0JVUlNUX1NUQVRFX1JFU0VUOworCisgIC8qIFNldCB0aGUgVElNIGNoYW5uZWxzIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVTRVQpOworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFU0VUKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFU0VUKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFU0VUKTsKKwogICAvKiBDaGFuZ2UgVElNIHN0YXRlICovCiAgIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRVNFVDsKIApAQCAtMjc4OCw4ICszMDQxLDU4IEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX0VuY29kZXJfU3RhcnQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IENoYW5uZWwpCiB7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjaGFubmVsXzFfc3RhdGUgPSBUSU1fQ0hBTk5FTF9TVEFURV9HRVQoaHRpbSwgVElNX0NIQU5ORUxfMSk7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjaGFubmVsXzJfc3RhdGUgPSBUSU1fQ0hBTk5FTF9TVEFURV9HRVQoaHRpbSwgVElNX0NIQU5ORUxfMik7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjb21wbGVtZW50YXJ5X2NoYW5uZWxfMV9zdGF0ZSA9IFRJTV9DSEFOTkVMX05fU1RBVEVfR0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEpOworICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgY29tcGxlbWVudGFyeV9jaGFubmVsXzJfc3RhdGUgPSBUSU1fQ0hBTk5FTF9OX1NUQVRFX0dFVChodGltLCBUSU1fQ0hBTk5FTF8yKTsKKwogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwotICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDMl9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOworICBhc3NlcnRfcGFyYW0oSVNfVElNX0VOQ09ERVJfSU5URVJGQUNFX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CisKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbChzKSBzdGF0ZSAqLworICBpZiAoQ2hhbm5lbCA9PSBUSU1fQ0hBTk5FTF8xKQorICB7CisgICAgaWYgKChjaGFubmVsXzFfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgICB8fCAoY29tcGxlbWVudGFyeV9jaGFubmVsXzFfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKSkKKyAgICB7CisgICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgICAgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgICB9CisgIH0KKyAgZWxzZSBpZiAoQ2hhbm5lbCA9PSBUSU1fQ0hBTk5FTF8yKQorICB7CisgICAgaWYgKChjaGFubmVsXzJfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgICB8fCAoY29tcGxlbWVudGFyeV9jaGFubmVsXzJfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKSkKKyAgICB7CisgICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgICAgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgICB9CisgIH0KKyAgZWxzZQorICB7CisgICAgaWYgKChjaGFubmVsXzFfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgICB8fCAoY2hhbm5lbF8yX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKKyAgICAgfHwgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8xX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKKyAgICAgfHwgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8yX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkpCisgICAgeworICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgICAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICAgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICAgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICAgIH0KKyAgfQogCiAgIC8qIEVuYWJsZSB0aGUgZW5jb2RlciBpbnRlcmZhY2UgY2hhbm5lbHMgKi8KICAgc3dpdGNoIChDaGFubmVsKQpAQCAtMjgzMyw3ICszMTM2LDcgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fRW5jb2Rlcl9TdG9wKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBDaGFubmVsKQogewogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwotICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDMl9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOworICBhc3NlcnRfcGFyYW0oSVNfVElNX0VOQ09ERVJfSU5URVJGQUNFX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CiAKICAgLyogRGlzYWJsZSB0aGUgSW5wdXQgQ2FwdHVyZSBjaGFubmVscyAxIGFuZCAyCiAgICAgKGluIHRoZSBFbmNvZGVySW50ZXJmYWNlIHRoZSB0d28gcG9zc2libGUgY2hhbm5lbHMgdGhhdCBjYW4gYmUgdXNlZCBhcmUgVElNX0NIQU5ORUxfMSBhbmQgVElNX0NIQU5ORUxfMikgKi8KQEAgLTI4NjIsNiArMzE2NSwyMCBAQAogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOwogCisgIC8qIFNldCB0aGUgVElNIGNoYW5uZWwocykgc3RhdGUgKi8KKyAgaWYgKChDaGFubmVsID09IFRJTV9DSEFOTkVMXzEpIHx8IChDaGFubmVsID09IFRJTV9DSEFOTkVMXzIpKQorICB7CisgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgfQorICBlbHNlIAorICB7CisgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICB9CisKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwogICByZXR1cm4gSEFMX09LOwogfQpAQCAtMjg3OCw4ICszMTk1LDU4IEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX0VuY29kZXJfU3RhcnRfSVQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IENoYW5uZWwpCiB7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjaGFubmVsXzFfc3RhdGUgPSBUSU1fQ0hBTk5FTF9TVEFURV9HRVQoaHRpbSwgVElNX0NIQU5ORUxfMSk7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjaGFubmVsXzJfc3RhdGUgPSBUSU1fQ0hBTk5FTF9TVEFURV9HRVQoaHRpbSwgVElNX0NIQU5ORUxfMik7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjb21wbGVtZW50YXJ5X2NoYW5uZWxfMV9zdGF0ZSA9IFRJTV9DSEFOTkVMX05fU1RBVEVfR0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEpOworICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgY29tcGxlbWVudGFyeV9jaGFubmVsXzJfc3RhdGUgPSBUSU1fQ0hBTk5FTF9OX1NUQVRFX0dFVChodGltLCBUSU1fQ0hBTk5FTF8yKTsKKwogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwotICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDMl9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOworICBhc3NlcnRfcGFyYW0oSVNfVElNX0VOQ09ERVJfSU5URVJGQUNFX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CisKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbChzKSBzdGF0ZSAqLworICBpZiAoQ2hhbm5lbCA9PSBUSU1fQ0hBTk5FTF8xKQorICB7CisgICAgaWYgKChjaGFubmVsXzFfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgICB8fCAoY29tcGxlbWVudGFyeV9jaGFubmVsXzFfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKSkKKyAgICB7CisgICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgICAgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgICB9CisgIH0KKyAgZWxzZSBpZiAoQ2hhbm5lbCA9PSBUSU1fQ0hBTk5FTF8yKQorICB7CisgICAgaWYgKChjaGFubmVsXzJfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgICB8fCAoY29tcGxlbWVudGFyeV9jaGFubmVsXzJfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKSkKKyAgICB7CisgICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgICAgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgICB9CisgIH0KKyAgZWxzZQorICB7CisgICAgaWYgKChjaGFubmVsXzFfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgICB8fCAoY2hhbm5lbF8yX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKKyAgICAgfHwgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8xX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKKyAgICAgfHwgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8yX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkpCisgICAgeworICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgICAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICAgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICAgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICAgIH0KKyAgfQogCiAgIC8qIEVuYWJsZSB0aGUgZW5jb2RlciBpbnRlcmZhY2UgY2hhbm5lbHMgKi8KICAgLyogRW5hYmxlIHRoZSBjYXB0dXJlIGNvbXBhcmUgSW50ZXJydXB0cyAxIGFuZC9vciAyICovCkBAIC0yOTI5LDcgKzMyOTYsNyBAQAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9FbmNvZGVyX1N0b3BfSVQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IENoYW5uZWwpCiB7CiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCi0gIGFzc2VydF9wYXJhbShJU19USU1fQ0MyX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CisgIGFzc2VydF9wYXJhbShJU19USU1fRU5DT0RFUl9JTlRFUkZBQ0VfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKIAogICAvKiBEaXNhYmxlIHRoZSBJbnB1dCBDYXB0dXJlIGNoYW5uZWxzIDEgYW5kIDIKICAgICAoaW4gdGhlIEVuY29kZXJJbnRlcmZhY2UgdGhlIHR3byBwb3NzaWJsZSBjaGFubmVscyB0aGF0IGNhbiBiZSB1c2VkIGFyZSBUSU1fQ0hBTk5FTF8xIGFuZCBUSU1fQ0hBTk5FTF8yKSAqLwpAQCAtMjk2MCw4ICszMzI3LDE5IEBACiAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfVElNX0RJU0FCTEUoaHRpbSk7CiAKLSAgLyogQ2hhbmdlIHRoZSBodGltIHN0YXRlICovCi0gIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRUFEWTsKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbChzKSBzdGF0ZSAqLworICBpZiAoKENoYW5uZWwgPT0gVElNX0NIQU5ORUxfMSkgfHwgKENoYW5uZWwgPT0gVElNX0NIQU5ORUxfMikpCisgIHsKKyAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICB9CisgIGVsc2UgCisgIHsKKyAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICAgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIH0KIAogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBIQUxfT0s7CkBAIC0yOTgzLDI3ICszMzYxLDk1IEBACiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX0VuY29kZXJfU3RhcnRfRE1BKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCAqcERhdGExLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqcERhdGEyLCB1aW50MTZfdCBMZW5ndGgpCiB7Ci0gIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCi0gIGFzc2VydF9wYXJhbShJU19USU1fRE1BX0NDX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjaGFubmVsXzFfc3RhdGUgPSBUSU1fQ0hBTk5FTF9TVEFURV9HRVQoaHRpbSwgVElNX0NIQU5ORUxfMSk7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjaGFubmVsXzJfc3RhdGUgPSBUSU1fQ0hBTk5FTF9TVEFURV9HRVQoaHRpbSwgVElNX0NIQU5ORUxfMik7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjb21wbGVtZW50YXJ5X2NoYW5uZWxfMV9zdGF0ZSA9IFRJTV9DSEFOTkVMX05fU1RBVEVfR0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEpOworICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgY29tcGxlbWVudGFyeV9jaGFubmVsXzJfc3RhdGUgPSBUSU1fQ0hBTk5FTF9OX1NUQVRFX0dFVChodGltLCBUSU1fQ0hBTk5FTF8yKTsKIAotICBpZiAoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9CVVNZKQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLworICBhc3NlcnRfcGFyYW0oSVNfVElNX0VOQ09ERVJfSU5URVJGQUNFX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CisKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbChzKSBzdGF0ZSAqLworICBpZiAoQ2hhbm5lbCA9PSBUSU1fQ0hBTk5FTF8xKQogICB7Ci0gICAgcmV0dXJuIEhBTF9CVVNZOwotICB9Ci0gIGVsc2UgaWYgKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfUkVBRFkpCi0gIHsKLSAgICBpZiAoKCgocERhdGExID09IE5VTEwpIHx8IChwRGF0YTIgPT0gTlVMTCkpKSAmJiAoTGVuZ3RoID4gMFUpKQorICAgIGlmICgoY2hhbm5lbF8xX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKQorICAgICB8fCAoY29tcGxlbWVudGFyeV9jaGFubmVsXzFfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpKQogICAgIHsKLSAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgICByZXR1cm4gSEFMX0JVU1k7CisgICAgfQorICAgIGVsc2UgaWYgKChjaGFubmVsXzFfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgICAgICAgICYmIChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMV9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpKQorICAgIHsKKyAgICAgIGlmICgocERhdGExID09IE5VTEwpICYmIChMZW5ndGggPiAwVSkpCisgICAgICB7CisgICAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgICAgICAgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgICAgIH0KICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9CVVNZOworICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICB9CisgIH0KKyAgZWxzZSBpZiAoQ2hhbm5lbCA9PSBUSU1fQ0hBTk5FTF8yKQorICB7CisgICAgaWYgKChjaGFubmVsXzJfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpCisgICAgIHx8IChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMl9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSkpCisgICAgeworICAgICAgcmV0dXJuIEhBTF9CVVNZOworICAgIH0KKyAgICBlbHNlIGlmICgoY2hhbm5lbF8yX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKKyAgICAgICAgICAmJiAoY29tcGxlbWVudGFyeV9jaGFubmVsXzJfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKSkKKyAgICB7CisgICAgICBpZiAoKHBEYXRhMiA9PSBOVUxMKSAmJiAoTGVuZ3RoID4gMFUpKQorICAgICAgeworICAgICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICAgICAgICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KICAgfQogICBlbHNlCiAgIHsKLSAgICAvKiBub3RoaW5nIHRvIGRvICovCisgICAgaWYgKChjaGFubmVsXzFfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpCisgICAgIHx8IChjaGFubmVsXzJfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpCisgICAgIHx8IChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMV9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSkKKyAgICAgfHwgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8yX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKSkKKyAgICB7CisgICAgICByZXR1cm4gSEFMX0JVU1k7CisgICAgfQorICAgIGVsc2UgaWYgKChjaGFubmVsXzFfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgICAgICAgICYmIChjaGFubmVsXzJfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgICAgICAgICYmIChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMV9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgICAgICAgICAgJiYgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8yX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkpCisgICAgeworICAgICAgaWYgKCgoKHBEYXRhMSA9PSBOVUxMKSB8fCAocERhdGEyID09IE5VTEwpKSkgJiYgKExlbmd0aCA+IDBVKSkKKyAgICAgIHsKKyAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgICAgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgICAgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICAgICAgICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgIH0KICAgfQogCiAgIHN3aXRjaCAoQ2hhbm5lbCkKQEAgLTMxMDEsNiArMzU0Nyw3IEBACiAgICAgZGVmYXVsdDoKICAgICAgIGJyZWFrOwogICB9CisKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwogICByZXR1cm4gSEFMX09LOwogfQpAQCAtMzExOCw3ICszNTY1LDcgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fRW5jb2Rlcl9TdG9wX0RNQShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQ2hhbm5lbCkKIHsKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KLSAgYXNzZXJ0X3BhcmFtKElTX1RJTV9ETUFfQ0NfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9FTkNPREVSX0lOVEVSRkFDRV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOwogCiAgIC8qIERpc2FibGUgdGhlIElucHV0IENhcHR1cmUgY2hhbm5lbHMgMSBhbmQgMgogICAgIChpbiB0aGUgRW5jb2RlckludGVyZmFjZSB0aGUgdHdvIHBvc3NpYmxlIGNoYW5uZWxzIHRoYXQgY2FuIGJlIHVzZWQgYXJlIFRJTV9DSEFOTkVMXzEgYW5kIFRJTV9DSEFOTkVMXzIpICovCkBAIC0zMTUzLDggKzM2MDAsMTkgQEAKICAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwogICBfX0hBTF9USU1fRElTQUJMRShodGltKTsKIAotICAvKiBDaGFuZ2UgdGhlIGh0aW0gc3RhdGUgKi8KLSAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOworICAvKiBTZXQgdGhlIFRJTSBjaGFubmVsKHMpIHN0YXRlICovCisgIGlmICgoQ2hhbm5lbCA9PSBUSU1fQ0hBTk5FTF8xKSB8fCAoQ2hhbm5lbCA9PSBUSU1fQ0hBTk5FTF8yKSkKKyAgeworICAgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICAgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIH0KKyAgZWxzZSAKKyAgeworICAgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICAgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICAgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgfQogCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgcmV0dXJuIEhBTF9PSzsKQEAgLTM0NzUsOCArMzkzMyw2IEBACiAgIC8qIFByb2Nlc3MgTG9ja2VkICovCiAgIF9fSEFMX0xPQ0soaHRpbSk7CiAKLSAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX0JVU1k7Ci0KICAgc3dpdGNoIChDaGFubmVsKQogICB7CiAgICAgY2FzZSBUSU1fQ0hBTk5FTF8xOgpAQCAtMzU0Myw4ICszOTk5LDYgQEAKICAgICAgIGJyZWFrOwogICB9CiAKLSAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOwotCiAgIF9fSEFMX1VOTE9DSyhodGltKTsKIAogICByZXR1cm4gSEFMX09LOwpAQCAtMzU3NSw4ICs0MDI5LDYgQEAKICAgLyogUHJvY2VzcyBMb2NrZWQgKi8KICAgX19IQUxfTE9DSyhodGltKTsKIAotICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfQlVTWTsKLQogICBpZiAoQ2hhbm5lbCA9PSBUSU1fQ0hBTk5FTF8xKQogICB7CiAgICAgLyogVEkxIENvbmZpZ3VyYXRpb24gKi8KQEAgLTM2NDAsOCArNDA5Miw2IEBACiAgICAgaHRpbS0+SW5zdGFuY2UtPkNDTVIyIHw9IChzQ29uZmlnLT5JQ1ByZXNjYWxlciA8PCA4VSk7CiAgIH0KIAotICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVBRFk7Ci0KICAgX19IQUxfVU5MT0NLKGh0aW0pOwogCiAgIHJldHVybiBIQUxfT0s7CkBAIC0zNjc1LDggKzQxMjUsNiBAQAogICAvKiBQcm9jZXNzIExvY2tlZCAqLwogICBfX0hBTF9MT0NLKGh0aW0pOwogCi0gIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9CVVNZOwotCiAgIHN3aXRjaCAoQ2hhbm5lbCkKICAgewogICAgIGNhc2UgVElNX0NIQU5ORUxfMToKQEAgLTM3ODUsOCArNDIzMyw2IEBACiAgICAgICBicmVhazsKICAgfQogCi0gIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRUFEWTsKLQogICBfX0hBTF9VTkxPQ0soaHRpbSk7CiAKICAgcmV0dXJuIEhBTF9PSzsKQEAgLTQwMjUsMTEgKzQ0NzEsMTEgQEAKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9ETUFfTEVOR1RIKEJ1cnN0TGVuZ3RoKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fRE1BX0RBVEFfTEVOR1RIKERhdGFMZW5ndGgpKTsKIAotICBpZiAoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9CVVNZKQorICBpZiAoaHRpbS0+RE1BQnVyc3RTdGF0ZSA9PSBIQUxfRE1BX0JVUlNUX1NUQVRFX0JVU1kpCiAgIHsKICAgICByZXR1cm4gSEFMX0JVU1k7CiAgIH0KLSAgZWxzZSBpZiAoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9SRUFEWSkKKyAgZWxzZSBpZiAoaHRpbS0+RE1BQnVyc3RTdGF0ZSA9PSBIQUxfRE1BX0JVUlNUX1NUQVRFX1JFQURZKQogICB7CiAgICAgaWYgKChCdXJzdEJ1ZmZlciA9PSBOVUxMKSAmJiAoQnVyc3RMZW5ndGggPiAwVSkpCiAgICAgewpAQCAtNDAzNyw3ICs0NDgzLDcgQEAKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9CVVNZOworICAgICAgaHRpbS0+RE1BQnVyc3RTdGF0ZSA9IEhBTF9ETUFfQlVSU1RfU1RBVEVfQlVTWTsKICAgICB9CiAgIH0KICAgZWxzZQpAQCAtNDE3NCw4ICs0NjIwLDYgQEAKICAgLyogRW5hYmxlIHRoZSBUSU0gRE1BIFJlcXVlc3QgKi8KICAgX19IQUxfVElNX0VOQUJMRV9ETUEoaHRpbSwgQnVyc3RSZXF1ZXN0U3JjKTsKIAotICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVBRFk7Ci0KICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwogICByZXR1cm4gSEFMX09LOwogfQpAQCAtNDI0MCw2ICs0Njg0LDkgQEAKICAgICBfX0hBTF9USU1fRElTQUJMRV9ETUEoaHRpbSwgQnVyc3RSZXF1ZXN0U3JjKTsKICAgfQogCisgIC8qIENoYW5nZSB0aGUgRE1BIGJ1cnN0IG9wZXJhdGlvbiBzdGF0ZSAqLworICBodGltLT5ETUFCdXJzdFN0YXRlID0gSEFMX0RNQV9CVVJTVF9TVEFURV9SRUFEWTsKKwogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBzdGF0dXM7CiB9CkBAIC00MzU3LDExICs0ODA0LDExIEBACiAgIGFzc2VydF9wYXJhbShJU19USU1fRE1BX0xFTkdUSChCdXJzdExlbmd0aCkpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0RNQV9EQVRBX0xFTkdUSChEYXRhTGVuZ3RoKSk7CiAKLSAgaWYgKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfQlVTWSkKKyAgaWYgKGh0aW0tPkRNQUJ1cnN0U3RhdGUgPT0gSEFMX0RNQV9CVVJTVF9TVEFURV9CVVNZKQogICB7CiAgICAgcmV0dXJuIEhBTF9CVVNZOwogICB9Ci0gIGVsc2UgaWYgKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfUkVBRFkpCisgIGVsc2UgaWYgKGh0aW0tPkRNQUJ1cnN0U3RhdGUgPT0gSEFMX0RNQV9CVVJTVF9TVEFURV9SRUFEWSkKICAgewogICAgIGlmICgoQnVyc3RCdWZmZXIgPT0gTlVMTCkgJiYgKEJ1cnN0TGVuZ3RoID4gMFUpKQogICAgIHsKQEAgLTQzNjksNyArNDgxNiw3IEBACiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfQlVTWTsKKyAgICAgIGh0aW0tPkRNQUJ1cnN0U3RhdGUgPSBIQUxfRE1BX0JVUlNUX1NUQVRFX0JVU1k7CiAgICAgfQogICB9CiAgIGVsc2UKQEAgLTQ1MDcsOCArNDk1NCw2IEBACiAgIC8qIEVuYWJsZSB0aGUgVElNIERNQSBSZXF1ZXN0ICovCiAgIF9fSEFMX1RJTV9FTkFCTEVfRE1BKGh0aW0sIEJ1cnN0UmVxdWVzdFNyYyk7CiAKLSAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOwotCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgcmV0dXJuIEhBTF9PSzsKIH0KQEAgLTQ1NzMsNiArNTAxOCw5IEBACiAgICAgX19IQUxfVElNX0RJU0FCTEVfRE1BKGh0aW0sIEJ1cnN0UmVxdWVzdFNyYyk7CiAgIH0KIAorICAvKiBDaGFuZ2UgdGhlIERNQSBidXJzdCBvcGVyYXRpb24gc3RhdGUgKi8KKyAgaHRpbS0+RE1BQnVyc3RTdGF0ZSA9IEhBTF9ETUFfQlVSU1RfU1RBVEVfUkVBRFk7CisKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwogICByZXR1cm4gc3RhdHVzOwogfQpAQCAtNTk1OCw2ICs2NDA2LDU0IEBACiB9CiAKIC8qKgorICAqIEBicmllZiAgUmV0dXJuIHRoZSBUSU0gRW5jb2RlciBNb2RlIGhhbmRsZSBzdGF0ZS4KKyAgKiBAcGFyYW0gIGh0aW0gVElNIGhhbmRsZQorICAqIEByZXR2YWwgQWN0aXZlIGNoYW5uZWwKKyAgKi8KK0hBTF9USU1fQWN0aXZlQ2hhbm5lbCBIQUxfVElNX0dldEFjdGl2ZUNoYW5uZWwoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0pCit7CisgIHJldHVybiBodGltLT5DaGFubmVsOworfQorCisvKioKKyAgKiBAYnJpZWYgIFJldHVybiBhY3R1YWwgc3RhdGUgb2YgdGhlIFRJTSBjaGFubmVsLgorICAqIEBwYXJhbSAgaHRpbSBUSU0gaGFuZGxlCisgICogQHBhcmFtICBDaGFubmVsIFRJTSBDaGFubmVsCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0NIQU5ORUxfMTogVElNIENoYW5uZWwgMQorICAqICAgICAgICAgICAgQGFyZyBUSU1fQ0hBTk5FTF8yOiBUSU0gQ2hhbm5lbCAyCisgICogICAgICAgICAgICBAYXJnIFRJTV9DSEFOTkVMXzM6IFRJTSBDaGFubmVsIDMKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0NIQU5ORUxfNDogVElNIENoYW5uZWwgNAorICAqICAgICAgICAgICAgQGFyZyBUSU1fQ0hBTk5FTF81OiBUSU0gQ2hhbm5lbCA1CisgICogICAgICAgICAgICBAYXJnIFRJTV9DSEFOTkVMXzY6IFRJTSBDaGFubmVsIDYKKyAgKiBAcmV0dmFsIFRJTSBDaGFubmVsIHN0YXRlCisgICovCitIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgSEFMX1RJTV9HZXRDaGFubmVsU3RhdGUoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sICB1aW50MzJfdCBDaGFubmVsKQoreworICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgY2hhbm5lbF9zdGF0ZTsKKyAgCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCisgIGFzc2VydF9wYXJhbShJU19USU1fQ0NYX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsKSk7CisKKyAgY2hhbm5lbF9zdGF0ZSA9IFRJTV9DSEFOTkVMX1NUQVRFX0dFVChodGltLCBDaGFubmVsKTsKKyAgICAKKyAgcmV0dXJuIGNoYW5uZWxfc3RhdGU7Cit9CisKKy8qKgorICAqIEBicmllZiAgUmV0dXJuIGFjdHVhbCBzdGF0ZSBvZiBhIERNQSBidXJzdCBvcGVyYXRpb24uCisgICogQHBhcmFtICBodGltIFRJTSBoYW5kbGUKKyAgKiBAcmV0dmFsIERNQSBidXJzdCBzdGF0ZQorICAqLworSEFMX1RJTV9ETUFCdXJzdFN0YXRlVHlwZURlZiBIQUxfVElNX0RNQUJ1cnN0U3RhdGUoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0pCit7CisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCisgIGFzc2VydF9wYXJhbShJU19USU1fRE1BQlVSU1RfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKKyAgCisgIHJldHVybiBodGltLT5ETUFCdXJzdFN0YXRlOworfQorCisvKioKICAgKiBAfQogICAqLwogCkBAIC01OTc4LDEzICs2NDc0LDM4IEBACiB7CiAgIFRJTV9IYW5kbGVUeXBlRGVmICpodGltID0gKFRJTV9IYW5kbGVUeXBlRGVmICopKChETUFfSGFuZGxlVHlwZURlZiAqKWhkbWEpLT5QYXJlbnQ7CiAKLSAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOworICBpZiAoaGRtYSA9PSBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MxXSkKKyAgeworICAgIGh0aW0tPkNoYW5uZWwgPSBIQUxfVElNX0FDVElWRV9DSEFOTkVMXzE7CisgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIH0KKyAgZWxzZSBpZiAoaGRtYSA9PSBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MyXSkKKyAgeworICAgIGh0aW0tPkNoYW5uZWwgPSBIQUxfVElNX0FDVElWRV9DSEFOTkVMXzI7CisgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIH0KKyAgZWxzZSBpZiAoaGRtYSA9PSBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MzXSkKKyAgeworICAgIGh0aW0tPkNoYW5uZWwgPSBIQUxfVElNX0FDVElWRV9DSEFOTkVMXzM7CisgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzMsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIH0KKyAgZWxzZSBpZiAoaGRtYSA9PSBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0M0XSkKKyAgeworICAgIGh0aW0tPkNoYW5uZWwgPSBIQUxfVElNX0FDVElWRV9DSEFOTkVMXzQ7CisgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzQsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIH0KKyAgZWxzZQorICB7CisgICAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOworICB9CiAKICNpZiAoVVNFX0hBTF9USU1fUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCiAgIGh0aW0tPkVycm9yQ2FsbGJhY2soaHRpbSk7CiAjZWxzZQogICBIQUxfVElNX0Vycm9yQ2FsbGJhY2soaHRpbSk7CiAjZW5kaWYgLyogVVNFX0hBTF9USU1fUkVHSVNURVJfQ0FMTEJBQ0tTICovCisKKyAgaHRpbS0+Q2hhbm5lbCA9IEhBTF9USU1fQUNUSVZFX0NIQU5ORUxfQ0xFQVJFRDsKIH0KIAogLyoqCkBAIC01OTk2LDIzICs2NTE3LDQxIEBACiB7CiAgIFRJTV9IYW5kbGVUeXBlRGVmICpodGltID0gKFRJTV9IYW5kbGVUeXBlRGVmICopKChETUFfSGFuZGxlVHlwZURlZiAqKWhkbWEpLT5QYXJlbnQ7CiAKLSAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOwotCiAgIGlmIChoZG1hID09IGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzFdKQogICB7CiAgICAgaHRpbS0+Q2hhbm5lbCA9IEhBTF9USU1fQUNUSVZFX0NIQU5ORUxfMTsKKyAgICAKKyAgICBpZiAoaGRtYS0+SW5pdC5Nb2RlID09IERNQV9OT1JNQUwpCisgICAgeworICAgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgICAgfQogICB9CiAgIGVsc2UgaWYgKGhkbWEgPT0gaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMl0pCiAgIHsKICAgICBodGltLT5DaGFubmVsID0gSEFMX1RJTV9BQ1RJVkVfQ0hBTk5FTF8yOworICAgIAorICAgIGlmIChoZG1hLT5Jbml0Lk1vZGUgPT0gRE1BX05PUk1BTCkKKyAgICB7CisgICAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgICB9CiAgIH0KICAgZWxzZSBpZiAoaGRtYSA9PSBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MzXSkKICAgewogICAgIGh0aW0tPkNoYW5uZWwgPSBIQUxfVElNX0FDVElWRV9DSEFOTkVMXzM7CisgICAgCisgICAgaWYgKGhkbWEtPkluaXQuTW9kZSA9PSBETUFfTk9STUFMKQorICAgIHsKKyAgICAgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8zLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICAgIH0KICAgfQogICBlbHNlIGlmIChoZG1hID09IGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzRdKQogICB7CiAgICAgaHRpbS0+Q2hhbm5lbCA9IEhBTF9USU1fQUNUSVZFX0NIQU5ORUxfNDsKKyAgICAKKyAgICBpZiAoaGRtYS0+SW5pdC5Nb2RlID09IERNQV9OT1JNQUwpCisgICAgeworICAgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzQsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgICAgfQogICB9CiAgIGVsc2UKICAgewpAQCAtNjAzNyw4ICs2NTc2LDYgQEAKIHsKICAgVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0gPSAoVElNX0hhbmRsZVR5cGVEZWYgKikoKERNQV9IYW5kbGVUeXBlRGVmICopaGRtYSktPlBhcmVudDsKIAotICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVBRFk7Ci0KICAgaWYgKGhkbWEgPT0gaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMV0pCiAgIHsKICAgICBodGltLT5DaGFubmVsID0gSEFMX1RJTV9BQ1RJVkVfQ0hBTk5FTF8xOwpAQCAtNjA3OCwyMyArNjYxNSw0NSBAQAogewogICBUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSA9IChUSU1fSGFuZGxlVHlwZURlZiAqKSgoRE1BX0hhbmRsZVR5cGVEZWYgKiloZG1hKS0+UGFyZW50OwogCi0gIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRUFEWTsKLQogICBpZiAoaGRtYSA9PSBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MxXSkKICAgewogICAgIGh0aW0tPkNoYW5uZWwgPSBIQUxfVElNX0FDVElWRV9DSEFOTkVMXzE7CisgICAgCisgICAgaWYgKGhkbWEtPkluaXQuTW9kZSA9PSBETUFfTk9STUFMKQorICAgIHsKKyAgICAgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICAgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgICB9CiAgIH0KICAgZWxzZSBpZiAoaGRtYSA9PSBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MyXSkKICAgewogICAgIGh0aW0tPkNoYW5uZWwgPSBIQUxfVElNX0FDVElWRV9DSEFOTkVMXzI7CisgICAgCisgICAgaWYgKGhkbWEtPkluaXQuTW9kZSA9PSBETUFfTk9STUFMKQorICAgIHsKKyAgICAgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICAgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgICB9CiAgIH0KICAgZWxzZSBpZiAoaGRtYSA9PSBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MzXSkKICAgewogICAgIGh0aW0tPkNoYW5uZWwgPSBIQUxfVElNX0FDVElWRV9DSEFOTkVMXzM7CisgICAgCisgICAgaWYgKGhkbWEtPkluaXQuTW9kZSA9PSBETUFfTk9STUFMKQorICAgIHsKKyAgICAgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8zLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICAgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMywgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgICB9CiAgIH0KICAgZWxzZSBpZiAoaGRtYSA9PSBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0M0XSkKICAgewogICAgIGh0aW0tPkNoYW5uZWwgPSBIQUxfVElNX0FDVElWRV9DSEFOTkVMXzQ7CisgICAgCisgICAgaWYgKGhkbWEtPkluaXQuTW9kZSA9PSBETUFfTk9STUFMKQorICAgIHsKKyAgICAgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF80LCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICAgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfNCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgICB9CiAgIH0KICAgZWxzZQogICB7CkBAIC02MTE5LDggKzY2NzgsNiBAQAogewogICBUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSA9IChUSU1fSGFuZGxlVHlwZURlZiAqKSgoRE1BX0hhbmRsZVR5cGVEZWYgKiloZG1hKS0+UGFyZW50OwogCi0gIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRUFEWTsKLQogICBpZiAoaGRtYSA9PSBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MxXSkKICAgewogICAgIGh0aW0tPkNoYW5uZWwgPSBIQUxfVElNX0FDVElWRV9DSEFOTkVMXzE7CkBAIC02MTYwLDcgKzY3MTcsMTAgQEAKIHsKICAgVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0gPSAoVElNX0hhbmRsZVR5cGVEZWYgKikoKERNQV9IYW5kbGVUeXBlRGVmICopaGRtYSktPlBhcmVudDsKIAotICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVBRFk7CisgIGlmIChodGltLT5oZG1hW1RJTV9ETUFfSURfVVBEQVRFXS0+SW5pdC5Nb2RlID09IERNQV9OT1JNQUwpCisgIHsKKyAgICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVBRFk7CisgIH0KIAogI2lmIChVU0VfSEFMX1RJTV9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKICAgaHRpbS0+UGVyaW9kRWxhcHNlZENhbGxiYWNrKGh0aW0pOwpAQCAtNjE3OCw4ICs2NzM4LDYgQEAKIHsKICAgVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0gPSAoVElNX0hhbmRsZVR5cGVEZWYgKikoKERNQV9IYW5kbGVUeXBlRGVmICopaGRtYSktPlBhcmVudDsKIAotICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVBRFk7Ci0KICNpZiAoVVNFX0hBTF9USU1fUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCiAgIGh0aW0tPlBlcmlvZEVsYXBzZWRIYWxmQ3BsdENhbGxiYWNrKGh0aW0pOwogI2Vsc2UKQEAgLTYxOTYsNyArNjc1NCwxMCBAQAogewogICBUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSA9IChUSU1fSGFuZGxlVHlwZURlZiAqKSgoRE1BX0hhbmRsZVR5cGVEZWYgKiloZG1hKS0+UGFyZW50OwogCi0gIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRUFEWTsKKyAgaWYgKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9UUklHR0VSXS0+SW5pdC5Nb2RlID09IERNQV9OT1JNQUwpCisgIHsKKyAgICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVBRFk7CisgIH0KIAogI2lmIChVU0VfSEFMX1RJTV9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKICAgaHRpbS0+VHJpZ2dlckNhbGxiYWNrKGh0aW0pOwpAQCAtNjIxNCw4ICs2Nzc1LDYgQEAKIHsKICAgVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0gPSAoVElNX0hhbmRsZVR5cGVEZWYgKikoKERNQV9IYW5kbGVUeXBlRGVmICopaGRtYSktPlBhcmVudDsKIAotICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVBRFk7Ci0KICNpZiAoVVNFX0hBTF9USU1fUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCiAgIGh0aW0tPlRyaWdnZXJIYWxmQ3BsdENhbGxiYWNrKGh0aW0pOwogI2Vsc2UKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmc0eHhfaGFsX3RpbV9leC5jIGIvU3JjL3N0bTMyZzR4eF9oYWxfdGltX2V4LmMKaW5kZXggYTZhNTA1Ny4uMDQ5YmIxMiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZzR4eF9oYWxfdGltX2V4LmMKKysrIGIvU3JjL3N0bTMyZzR4eF9oYWxfdGltX2V4LmMKQEAgLTYyLDcgKzYyLDcgQEAKIAogCiAgICAgICgjKSBBY3RpdmF0ZSB0aGUgVElNIHBlcmlwaGVyYWwgdXNpbmcgb25lIG9mIHRoZSBzdGFydCBmdW5jdGlvbnM6Ci0gICAgICAgICAgICgrKykgQ29tcGxlbWVudGFyeSBPdXRwdXQgQ29tcGFyZSA6IEhBTF9USU1FeF9PQ05fU3RhcnQoKSwgSEFMX1RJTUV4X09DTl9TdGFydF9ETUEoKSwgSEFMX1RJTUV4X09DX1N0YXJ0X0lUKCkKKyAgICAgICAgICAgKCsrKSBDb21wbGVtZW50YXJ5IE91dHB1dCBDb21wYXJlIDogSEFMX1RJTUV4X09DTl9TdGFydCgpLCBIQUxfVElNRXhfT0NOX1N0YXJ0X0RNQSgpLCBIQUxfVElNRXhfT0NOX1N0YXJ0X0lUKCkKICAgICAgICAgICAgKCsrKSBDb21wbGVtZW50YXJ5IFBXTSBnZW5lcmF0aW9uIDogSEFMX1RJTUV4X1BXTU5fU3RhcnQoKSwgSEFMX1RJTUV4X1BXTU5fU3RhcnRfRE1BKCksIEhBTF9USU1FeF9QV01OX1N0YXJ0X0lUKCkKICAgICAgICAgICAgKCsrKSBDb21wbGVtZW50YXJ5IE9uZS1wdWxzZSBtb2RlIG91dHB1dCA6IEhBTF9USU1FeF9PbmVQdWxzZU5fU3RhcnQoKSwgSEFMX1RJTUV4X09uZVB1bHNlTl9TdGFydF9JVCgpCiAgICAgICAgICAgICgrKykgSGFsbCBTZW5zb3Igb3V0cHV0IDogSEFMX1RJTUV4X0hhbGxTZW5zb3JfU3RhcnQoKSwgSEFMX1RJTUV4X0hhbGxTZW5zb3JfU3RhcnRfRE1BKCksIEhBTF9USU1FeF9IYWxsU2Vuc29yX1N0YXJ0X0lUKCkuCkBAIC0xMDksOSArMTA5LDExIEBACiAgICovCiAvKiBFbmQgb2YgcHJpdmF0ZSBjb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0vKiBQcml2YXRlIG1hY3JvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogUHJpdmF0ZSBtYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgdmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBQcml2YXRlIGZ1bmN0aW9uIHByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgVElNX0RNQURlbGF5UHVsc2VOQ3BsdChETUFfSGFuZGxlVHlwZURlZiAqaGRtYSk7CitzdGF0aWMgdm9pZCBUSU1fRE1BRXJyb3JDQ3hOKERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKTsKIHN0YXRpYyB2b2lkIFRJTV9DQ3hOQ2hhbm5lbENtZChUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgQ2hhbm5lbE5TdGF0ZSk7CiAKIC8qIEV4cG9ydGVkIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xNDIsNiArMTQ0LDkgQEAKICAgKi8KIC8qKgogICAqIEBicmllZiAgSW5pdGlhbGl6ZXMgdGhlIFRJTSBIYWxsIFNlbnNvciBJbnRlcmZhY2UgYW5kIGluaXRpYWxpemUgdGhlIGFzc29jaWF0ZWQgaGFuZGxlLgorICAqIEBub3RlICAgV2hlbiB0aGUgdGltZXIgaW5zdGFuY2UgaXMgaW5pdGlhbGl6ZWQgaW4gSGFsbCBTZW5zb3IgSW50ZXJmYWNlIG1vZGUsCisgICogICAgICAgICB0aW1lciBjaGFubmVscyAxIGFuZCBjaGFubmVsIDIgYXJlIHJlc2VydmVkIGFuZCBjYW5ub3QgYmUgdXNlZCBmb3IKKyAgKiAgICAgICAgIG90aGVyIHB1cnBvc2UuCiAgICogQHBhcmFtICBodGltIFRJTSBIYWxsIFNlbnNvciBJbnRlcmZhY2UgaGFuZGxlCiAgICogQHBhcmFtICBzQ29uZmlnIFRJTSBIYWxsIFNlbnNvciBjb25maWd1cmF0aW9uIHN0cnVjdHVyZQogICAqIEByZXR2YWwgSEFMIHN0YXR1cwpAQCAtMjI3LDYgKzIzMiwxNSBAQAogICBodGltLT5JbnN0YW5jZS0+Q1IyICY9IH5USU1fQ1IyX01NUzsKICAgaHRpbS0+SW5zdGFuY2UtPkNSMiB8PSBUSU1fVFJHT19PQzJSRUY7CiAKKyAgLyogSW5pdGlhbGl6ZSB0aGUgRE1BIGJ1cnN0IG9wZXJhdGlvbiBzdGF0ZSAqLworICBodGltLT5ETUFCdXJzdFN0YXRlID0gSEFMX0RNQV9CVVJTVF9TVEFURV9SRUFEWTsKKworICAvKiBJbml0aWFsaXplIHRoZSBUSU0gY2hhbm5lbHMgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworCiAgIC8qIEluaXRpYWxpemUgdGhlIFRJTSBzdGF0ZSovCiAgIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRUFEWTsKIApAQCAtMjYwLDYgKzI3NCwxNSBAQAogICBIQUxfVElNRXhfSGFsbFNlbnNvcl9Nc3BEZUluaXQoaHRpbSk7CiAjZW5kaWYgLyogVVNFX0hBTF9USU1fUkVHSVNURVJfQ0FMTEJBQ0tTICovCiAKKyAgLyogQ2hhbmdlIHRoZSBETUEgYnVyc3Qgb3BlcmF0aW9uIHN0YXRlICovCisgIGh0aW0tPkRNQUJ1cnN0U3RhdGUgPSBIQUxfRE1BX0JVUlNUX1NUQVRFX1JFU0VUOworCisgIC8qIENoYW5nZSB0aGUgVElNIGNoYW5uZWxzIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVTRVQpOworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFU0VUKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFU0VUKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFU0VUKTsKKwogICAvKiBDaGFuZ2UgVElNIHN0YXRlICovCiAgIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRVNFVDsKIApAQCAtMzA3LDEyICszMzAsMzEgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1FeF9IYWxsU2Vuc29yX1N0YXJ0KFRJTV9IYW5kbGVUeXBlRGVmICpodGltKQogewogICB1aW50MzJfdCB0bXBzbWNyOworICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgY2hhbm5lbF8xX3N0YXRlID0gVElNX0NIQU5ORUxfU1RBVEVfR0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEpOworICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgY2hhbm5lbF8yX3N0YXRlID0gVElNX0NIQU5ORUxfU1RBVEVfR0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIpOworICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgY29tcGxlbWVudGFyeV9jaGFubmVsXzFfc3RhdGUgPSBUSU1fQ0hBTk5FTF9OX1NUQVRFX0dFVChodGltLCBUSU1fQ0hBTk5FTF8xKTsKKyAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8yX3N0YXRlID0gVElNX0NIQU5ORUxfTl9TVEFURV9HRVQoaHRpbSwgVElNX0NIQU5ORUxfMik7CiAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9IQUxMX1NFTlNPUl9JTlRFUkZBQ0VfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKIAorICAvKiBDaGVjayB0aGUgVElNIGNoYW5uZWxzIHN0YXRlICovCisgIGlmICgoY2hhbm5lbF8xX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKKyAgIHx8IChjaGFubmVsXzJfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgfHwgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8xX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKKyAgIHx8IChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMl9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpKQorICB7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCisgIC8qIFNldCB0aGUgVElNIGNoYW5uZWxzIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICAKICAgLyogRW5hYmxlIHRoZSBJbnB1dCBDYXB0dXJlIGNoYW5uZWwgMQotICAgIChpbiB0aGUgSGFsbCBTZW5zb3IgSW50ZXJmYWNlIHRoZSB0aHJlZSBwb3NzaWJsZSBjaGFubmVscyB0aGF0IGNhbiBiZSB1c2VkIGFyZSBUSU1fQ0hBTk5FTF8xLCBUSU1fQ0hBTk5FTF8yIGFuZCBUSU1fQ0hBTk5FTF8zKSAqLworICAoaW4gdGhlIEhhbGwgU2Vuc29yIEludGVyZmFjZSB0aGUgdGhyZWUgcG9zc2libGUgY2hhbm5lbHMgdGhhdCBjYW4gYmUgdXNlZCBhcmUgVElNX0NIQU5ORUxfMSwgVElNX0NIQU5ORUxfMiBhbmQgVElNX0NIQU5ORUxfMykgKi8KICAgVElNX0NDeENoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIFRJTV9DSEFOTkVMXzEsIFRJTV9DQ3hfRU5BQkxFKTsKIAogICAvKiBFbmFibGUgdGhlIFBlcmlwaGVyYWwsIGV4Y2VwdCBpbiB0cmlnZ2VyIG1vZGUgd2hlcmUgZW5hYmxlIGlzIGF1dG9tYXRpY2FsbHkgZG9uZSB3aXRoIHRyaWdnZXIgKi8KQEAgLTM0Myw2ICszODUsMTIgQEAKICAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwogICBfX0hBTF9USU1fRElTQUJMRShodGltKTsKIAorICAvKiBTZXQgdGhlIFRJTSBjaGFubmVscyBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwogICByZXR1cm4gSEFMX09LOwogfQpAQCAtMzU1LDEwICs0MDMsMjkgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1FeF9IYWxsU2Vuc29yX1N0YXJ0X0lUKFRJTV9IYW5kbGVUeXBlRGVmICpodGltKQogewogICB1aW50MzJfdCB0bXBzbWNyOworICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgY2hhbm5lbF8xX3N0YXRlID0gVElNX0NIQU5ORUxfU1RBVEVfR0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEpOworICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgY2hhbm5lbF8yX3N0YXRlID0gVElNX0NIQU5ORUxfU1RBVEVfR0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIpOworICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgY29tcGxlbWVudGFyeV9jaGFubmVsXzFfc3RhdGUgPSBUSU1fQ0hBTk5FTF9OX1NUQVRFX0dFVChodGltLCBUSU1fQ0hBTk5FTF8xKTsKKyAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8yX3N0YXRlID0gVElNX0NIQU5ORUxfTl9TVEFURV9HRVQoaHRpbSwgVElNX0NIQU5ORUxfMik7CiAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9IQUxMX1NFTlNPUl9JTlRFUkZBQ0VfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKIAorICAvKiBDaGVjayB0aGUgVElNIGNoYW5uZWxzIHN0YXRlICovCisgIGlmICgoY2hhbm5lbF8xX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKKyAgIHx8IChjaGFubmVsXzJfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgfHwgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8xX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKKyAgIHx8IChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMl9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpKQorICB7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCisgIC8qIFNldCB0aGUgVElNIGNoYW5uZWxzIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworCiAgIC8qIEVuYWJsZSB0aGUgY2FwdHVyZSBjb21wYXJlIEludGVycnVwdHMgMSBldmVudCAqLwogICBfX0hBTF9USU1fRU5BQkxFX0lUKGh0aW0sIFRJTV9JVF9DQzEpOwogCkBAIC0zOTcsNiArNDY0LDEyIEBACiAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfVElNX0RJU0FCTEUoaHRpbSk7CiAKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbHMgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgcmV0dXJuIEhBTF9PSzsKIH0KQEAgLTQxMSwyOSArNDg0LDM2IEBACiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNRXhfSGFsbFNlbnNvcl9TdGFydF9ETUEoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90ICpwRGF0YSwgdWludDE2X3QgTGVuZ3RoKQogewogICB1aW50MzJfdCB0bXBzbWNyOworICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgY2hhbm5lbF8xX3N0YXRlID0gVElNX0NIQU5ORUxfU1RBVEVfR0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEpOworICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgY29tcGxlbWVudGFyeV9jaGFubmVsXzFfc3RhdGUgPSBUSU1fQ0hBTk5FTF9OX1NUQVRFX0dFVChodGltLCBUSU1fQ0hBTk5FTF8xKTsKIAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0hBTExfU0VOU09SX0lOVEVSRkFDRV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOwogCi0gIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX0JVU1kpCisgIC8qIFNldCB0aGUgVElNIGNoYW5uZWwgc3RhdGUgKi8KKyAgaWYgKChjaGFubmVsXzFfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpCisgICAgfHwoY29tcGxlbWVudGFyeV9jaGFubmVsXzFfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpKQogICB7CiAgICAgcmV0dXJuIEhBTF9CVVNZOwogICB9Ci0gIGVsc2UgaWYgKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfUkVBRFkpCisgIGVsc2UgaWYgKChjaGFubmVsXzFfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgICAgICAmJiAoY29tcGxlbWVudGFyeV9jaGFubmVsXzFfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKSkKICAgewotICAgIGlmICgoKHVpbnQzMl90KXBEYXRhID09IDBVKSAmJiAoTGVuZ3RoID4gMFUpKQorICAgIGlmICgocERhdGEgPT0gTlVMTCkgJiYgKExlbmd0aCA+IDBVKSkKICAgICB7CiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX0JVU1k7CisgICAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICAgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOwogICAgIH0KICAgfQogICBlbHNlCiAgIHsKLSAgICAvKiBub3RoaW5nIHRvIGRvICovCisgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQorCiAgIC8qIEVuYWJsZSB0aGUgSW5wdXQgQ2FwdHVyZSBjaGFubmVsIDEKICAgICAoaW4gdGhlIEhhbGwgU2Vuc29yIEludGVyZmFjZSB0aGUgdGhyZWUgcG9zc2libGUgY2hhbm5lbHMgdGhhdCBjYW4gYmUgdXNlZCBhcmUgVElNX0NIQU5ORUxfMSwgVElNX0NIQU5ORUxfMiBhbmQgVElNX0NIQU5ORUxfMykgKi8KICAgVElNX0NDeENoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIFRJTV9DSEFOTkVMXzEsIFRJTV9DQ3hfRU5BQkxFKTsKQEAgLTQ4Miw5ICs1NjIsMTQgQEAKICAgX19IQUxfVElNX0RJU0FCTEVfRE1BKGh0aW0sIFRJTV9ETUFfQ0MxKTsKIAogICAodm9pZClIQUxfRE1BX0Fib3J0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzFdKTsKKwogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOwogCisgIC8qIFNldCB0aGUgVElNIGNoYW5uZWwgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwogICByZXR1cm4gSEFMX09LOwogfQpAQCAtNTMyLDYgKzYxNywxNSBAQAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDWE5fSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwpKTsKIAorICAvKiBDaGVjayB0aGUgVElNIGNvbXBsZW1lbnRhcnkgY2hhbm5lbCBzdGF0ZSAqLworICBpZiAoVElNX0NIQU5ORUxfTl9TVEFURV9HRVQoaHRpbSwgQ2hhbm5lbCkgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICB7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorICAKKyAgLyogU2V0IHRoZSBUSU0gY29tcGxlbWVudGFyeSBjaGFubmVsIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKwogICAvKiBFbmFibGUgdGhlIENhcHR1cmUgY29tcGFyZSBjaGFubmVsIE4gKi8KICAgVElNX0NDeE5DaGFubmVsQ21kKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsLCBUSU1fQ0N4Tl9FTkFCTEUpOwogCkBAIC01NzUsNiArNjY5LDkgQEAKICAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwogICBfX0hBTF9USU1fRElTQUJMRShodGltKTsKIAorICAvKiBTZXQgdGhlIFRJTSBjb21wbGVtZW50YXJ5IGNoYW5uZWwgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKwogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBIQUxfT0s7CiB9CkBAIC01OTgsNiArNjk1LDE1IEBACiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fQ0NYTl9JTlNUQU5DRShodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCkpOwogCisgIC8qIENoZWNrIHRoZSBUSU0gY29tcGxlbWVudGFyeSBjaGFubmVsIHN0YXRlICovCisgIGlmIChUSU1fQ0hBTk5FTF9OX1NUQVRFX0dFVChodGltLCBDaGFubmVsKSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisKKyAgLyogU2V0IHRoZSBUSU0gY29tcGxlbWVudGFyeSBjaGFubmVsIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKwogICBzd2l0Y2ggKENoYW5uZWwpCiAgIHsKICAgICBjYXNlIFRJTV9DSEFOTkVMXzE6CkBAIC03MjEsNiArODI3LDkgQEAKICAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwogICBfX0hBTF9USU1fRElTQUJMRShodGltKTsKIAorICAvKiBTZXQgdGhlIFRJTSBjb21wbGVtZW50YXJ5IGNoYW5uZWwgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKwogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBIQUxfT0s7CiB9CkBAIC03NDYsMjQgKzg1NSwyNSBAQAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDWE5fSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwpKTsKIAotICBpZiAoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9CVVNZKQorICAvKiBTZXQgdGhlIFRJTSBjb21wbGVtZW50YXJ5IGNoYW5uZWwgc3RhdGUgKi8KKyAgaWYgKFRJTV9DSEFOTkVMX05fU1RBVEVfR0VUKGh0aW0sIENoYW5uZWwpID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKQogICB7CiAgICAgcmV0dXJuIEhBTF9CVVNZOwogICB9Ci0gIGVsc2UgaWYgKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfUkVBRFkpCisgIGVsc2UgaWYgKFRJTV9DSEFOTkVMX05fU1RBVEVfR0VUKGh0aW0sIENoYW5uZWwpID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKICAgewotICAgIGlmICgoKHVpbnQzMl90KXBEYXRhID09IDBVKSAmJiAoTGVuZ3RoID4gMFUpKQorICAgIGlmICgocERhdGEgPT0gTlVMTCkgJiYgKExlbmd0aCA+IDBVKSkKICAgICB7CiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX0JVU1k7CisgICAgICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CiAgICAgfQogICB9CiAgIGVsc2UKICAgewotICAgIC8qIG5vdGhpbmcgdG8gZG8gICovCisgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQogCiAgIHN3aXRjaCAoQ2hhbm5lbCkKQEAgLTc3MSwxMSArODgxLDExIEBACiAgICAgY2FzZSBUSU1fQ0hBTk5FTF8xOgogICAgIHsKICAgICAgIC8qIFNldCB0aGUgRE1BIGNvbXBhcmUgY2FsbGJhY2tzICovCi0gICAgICBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MxXS0+WGZlckNwbHRDYWxsYmFjayA9IFRJTV9ETUFEZWxheVB1bHNlQ3BsdDsKKyAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzFdLT5YZmVyQ3BsdENhbGxiYWNrID0gVElNX0RNQURlbGF5UHVsc2VOQ3BsdDsKICAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzFdLT5YZmVySGFsZkNwbHRDYWxsYmFjayA9IFRJTV9ETUFEZWxheVB1bHNlSGFsZkNwbHQ7CiAKICAgICAgIC8qIFNldCB0aGUgRE1BIGVycm9yIGNhbGxiYWNrICovCi0gICAgICBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MxXS0+WGZlckVycm9yQ2FsbGJhY2sgPSBUSU1fRE1BRXJyb3IgOworICAgICAgaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMV0tPlhmZXJFcnJvckNhbGxiYWNrID0gVElNX0RNQUVycm9yQ0N4TiA7CiAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIGNoYW5uZWwgKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzFdLCAodWludDMyX3QpcERhdGEsICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkNDUjEsIExlbmd0aCkgIT0gSEFMX09LKQpAQCAtNzkwLDExICs5MDAsMTEgQEAKICAgICBjYXNlIFRJTV9DSEFOTkVMXzI6CiAgICAgewogICAgICAgLyogU2V0IHRoZSBETUEgY29tcGFyZSBjYWxsYmFja3MgKi8KLSAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzJdLT5YZmVyQ3BsdENhbGxiYWNrID0gVElNX0RNQURlbGF5UHVsc2VDcGx0OworICAgICAgaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMl0tPlhmZXJDcGx0Q2FsbGJhY2sgPSBUSU1fRE1BRGVsYXlQdWxzZU5DcGx0OwogICAgICAgaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMl0tPlhmZXJIYWxmQ3BsdENhbGxiYWNrID0gVElNX0RNQURlbGF5UHVsc2VIYWxmQ3BsdDsKIAogICAgICAgLyogU2V0IHRoZSBETUEgZXJyb3IgY2FsbGJhY2sgKi8KLSAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzJdLT5YZmVyRXJyb3JDYWxsYmFjayA9IFRJTV9ETUFFcnJvciA7CisgICAgICBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MyXS0+WGZlckVycm9yQ2FsbGJhY2sgPSBUSU1fRE1BRXJyb3JDQ3hOIDsKIAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgY2hhbm5lbCAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMl0sICh1aW50MzJfdClwRGF0YSwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+Q0NSMiwgTGVuZ3RoKSAhPSBIQUxfT0spCkBAIC04MDksMTEgKzkxOSwxMSBAQAogICAgIGNhc2UgVElNX0NIQU5ORUxfMzoKICAgICB7CiAgICAgICAvKiBTZXQgdGhlIERNQSBjb21wYXJlIGNhbGxiYWNrcyAqLwotICAgICAgaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDM10tPlhmZXJDcGx0Q2FsbGJhY2sgPSBUSU1fRE1BRGVsYXlQdWxzZUNwbHQ7CisgICAgICBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MzXS0+WGZlckNwbHRDYWxsYmFjayA9IFRJTV9ETUFEZWxheVB1bHNlTkNwbHQ7CiAgICAgICBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MzXS0+WGZlckhhbGZDcGx0Q2FsbGJhY2sgPSBUSU1fRE1BRGVsYXlQdWxzZUhhbGZDcGx0OwogCiAgICAgICAvKiBTZXQgdGhlIERNQSBlcnJvciBjYWxsYmFjayAqLwotICAgICAgaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDM10tPlhmZXJFcnJvckNhbGxiYWNrID0gVElNX0RNQUVycm9yIDsKKyAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzNdLT5YZmVyRXJyb3JDYWxsYmFjayA9IFRJTV9ETUFFcnJvckNDeE4gOwogCiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBjaGFubmVsICovCiAgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MzXSwgKHVpbnQzMl90KXBEYXRhLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5DQ1IzLCBMZW5ndGgpICE9IEhBTF9PSykKQEAgLTgyOCwxMSArOTM4LDExIEBACiAgICAgY2FzZSBUSU1fQ0hBTk5FTF80OgogICAgIHsKICAgICAgIC8qIFNldCB0aGUgRE1BIGNvbXBhcmUgY2FsbGJhY2tzICovCi0gICAgICBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0M0XS0+WGZlckNwbHRDYWxsYmFjayA9IFRJTV9ETUFEZWxheVB1bHNlQ3BsdDsKKyAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzRdLT5YZmVyQ3BsdENhbGxiYWNrID0gVElNX0RNQURlbGF5UHVsc2VOQ3BsdDsKICAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzRdLT5YZmVySGFsZkNwbHRDYWxsYmFjayA9IFRJTV9ETUFEZWxheVB1bHNlSGFsZkNwbHQ7CiAKICAgICAgIC8qIFNldCB0aGUgRE1BIGVycm9yIGNhbGxiYWNrICovCi0gICAgICBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0M0XS0+WGZlckVycm9yQ2FsbGJhY2sgPSBUSU1fRE1BRXJyb3IgOworICAgICAgaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDNF0tPlhmZXJFcnJvckNhbGxiYWNrID0gVElNX0RNQUVycm9yQ0N4TiA7CiAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIGNoYW5uZWwgKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzRdLCAodWludDMyX3QpcERhdGEsICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkNDUjQsIExlbmd0aCkgIT0gSEFMX09LKQpAQCAtOTI5LDggKzEwMzksOCBAQAogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOwogCi0gIC8qIENoYW5nZSB0aGUgaHRpbSBzdGF0ZSAqLwotICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVBRFk7CisgIC8qIFNldCB0aGUgVElNIGNvbXBsZW1lbnRhcnkgY2hhbm5lbCBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOwogCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgcmV0dXJuIEhBTF9PSzsKQEAgLTk4OCw2ICsxMDk4LDE1IEBACiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fQ0NYTl9JTlNUQU5DRShodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCkpOwogCisgIC8qIENoZWNrIHRoZSBUSU0gY29tcGxlbWVudGFyeSBjaGFubmVsIHN0YXRlICovCisgIGlmIChUSU1fQ0hBTk5FTF9OX1NUQVRFX0dFVChodGltLCBDaGFubmVsKSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisKKyAgLyogU2V0IHRoZSBUSU0gY29tcGxlbWVudGFyeSBjaGFubmVsIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKwogICAvKiBFbmFibGUgdGhlIGNvbXBsZW1lbnRhcnkgUFdNIG91dHB1dCAgKi8KICAgVElNX0NDeE5DaGFubmVsQ21kKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsLCBUSU1fQ0N4Tl9FTkFCTEUpOwogCkBAIC0xMDMwLDYgKzExNDksOSBAQAogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOwogCisgIC8qIFNldCB0aGUgVElNIGNvbXBsZW1lbnRhcnkgY2hhbm5lbCBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgcmV0dXJuIEhBTF9PSzsKIH0KQEAgLTEwNTMsNiArMTE3NSwxNSBAQAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDWE5fSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwpKTsKIAorICAvKiBDaGVjayB0aGUgVElNIGNvbXBsZW1lbnRhcnkgY2hhbm5lbCBzdGF0ZSAqLworICBpZiAoVElNX0NIQU5ORUxfTl9TVEFURV9HRVQoaHRpbSwgQ2hhbm5lbCkgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICB7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCisgIC8qIFNldCB0aGUgVElNIGNvbXBsZW1lbnRhcnkgY2hhbm5lbCBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisKICAgc3dpdGNoIChDaGFubmVsKQogICB7CiAgICAgY2FzZSBUSU1fQ0hBTk5FTF8xOgpAQCAtMTE3Niw2ICsxMzA3LDkgQEAKICAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwogICBfX0hBTF9USU1fRElTQUJMRShodGltKTsKIAorICAvKiBTZXQgdGhlIFRJTSBjb21wbGVtZW50YXJ5IGNoYW5uZWwgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKwogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBIQUxfT0s7CiB9CkBAIC0xMjAxLDM1ICsxMzM1LDM3IEBACiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fQ0NYTl9JTlNUQU5DRShodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCkpOwogCi0gIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX0JVU1kpCisgIC8qIFNldCB0aGUgVElNIGNvbXBsZW1lbnRhcnkgY2hhbm5lbCBzdGF0ZSAqLworICBpZiAoVElNX0NIQU5ORUxfTl9TVEFURV9HRVQoaHRpbSwgQ2hhbm5lbCkgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpCiAgIHsKICAgICByZXR1cm4gSEFMX0JVU1k7CiAgIH0KLSAgZWxzZSBpZiAoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9SRUFEWSkKKyAgZWxzZSBpZiAoVElNX0NIQU5ORUxfTl9TVEFURV9HRVQoaHRpbSwgQ2hhbm5lbCkgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQogICB7Ci0gICAgaWYgKCgodWludDMyX3QpcERhdGEgPT0gMFUpICYmIChMZW5ndGggPiAwVSkpCisgICAgaWYgKChwRGF0YSA9PSBOVUxMKSAmJiAoTGVuZ3RoID4gMFUpKQogICAgIHsKICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfQlVTWTsKKyAgICAgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKICAgICB9CiAgIH0KICAgZWxzZQogICB7Ci0gICAgLyogbm90aGluZyB0byBkbyAqLworICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KKwogICBzd2l0Y2ggKENoYW5uZWwpCiAgIHsKICAgICBjYXNlIFRJTV9DSEFOTkVMXzE6CiAgICAgewogICAgICAgLyogU2V0IHRoZSBETUEgY29tcGFyZSBjYWxsYmFja3MgKi8KLSAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzFdLT5YZmVyQ3BsdENhbGxiYWNrID0gVElNX0RNQURlbGF5UHVsc2VDcGx0OworICAgICAgaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMV0tPlhmZXJDcGx0Q2FsbGJhY2sgPSBUSU1fRE1BRGVsYXlQdWxzZU5DcGx0OwogICAgICAgaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMV0tPlhmZXJIYWxmQ3BsdENhbGxiYWNrID0gVElNX0RNQURlbGF5UHVsc2VIYWxmQ3BsdDsKIAogICAgICAgLyogU2V0IHRoZSBETUEgZXJyb3IgY2FsbGJhY2sgKi8KLSAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzFdLT5YZmVyRXJyb3JDYWxsYmFjayA9IFRJTV9ETUFFcnJvciA7CisgICAgICBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MxXS0+WGZlckVycm9yQ2FsbGJhY2sgPSBUSU1fRE1BRXJyb3JDQ3hOIDsKIAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgY2hhbm5lbCAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMV0sICh1aW50MzJfdClwRGF0YSwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+Q0NSMSwgTGVuZ3RoKSAhPSBIQUxfT0spCkBAIC0xMjQ0LDExICsxMzgwLDExIEBACiAgICAgY2FzZSBUSU1fQ0hBTk5FTF8yOgogICAgIHsKICAgICAgIC8qIFNldCB0aGUgRE1BIGNvbXBhcmUgY2FsbGJhY2tzICovCi0gICAgICBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MyXS0+WGZlckNwbHRDYWxsYmFjayA9IFRJTV9ETUFEZWxheVB1bHNlQ3BsdDsKKyAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzJdLT5YZmVyQ3BsdENhbGxiYWNrID0gVElNX0RNQURlbGF5UHVsc2VOQ3BsdDsKICAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzJdLT5YZmVySGFsZkNwbHRDYWxsYmFjayA9IFRJTV9ETUFEZWxheVB1bHNlSGFsZkNwbHQ7CiAKICAgICAgIC8qIFNldCB0aGUgRE1BIGVycm9yIGNhbGxiYWNrICovCi0gICAgICBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MyXS0+WGZlckVycm9yQ2FsbGJhY2sgPSBUSU1fRE1BRXJyb3IgOworICAgICAgaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMl0tPlhmZXJFcnJvckNhbGxiYWNrID0gVElNX0RNQUVycm9yQ0N4TiA7CiAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIGNoYW5uZWwgKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzJdLCAodWludDMyX3QpcERhdGEsICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkNDUjIsIExlbmd0aCkgIT0gSEFMX09LKQpAQCAtMTI2MywxMSArMTM5OSwxMSBAQAogICAgIGNhc2UgVElNX0NIQU5ORUxfMzoKICAgICB7CiAgICAgICAvKiBTZXQgdGhlIERNQSBjb21wYXJlIGNhbGxiYWNrcyAqLwotICAgICAgaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDM10tPlhmZXJDcGx0Q2FsbGJhY2sgPSBUSU1fRE1BRGVsYXlQdWxzZUNwbHQ7CisgICAgICBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MzXS0+WGZlckNwbHRDYWxsYmFjayA9IFRJTV9ETUFEZWxheVB1bHNlTkNwbHQ7CiAgICAgICBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MzXS0+WGZlckhhbGZDcGx0Q2FsbGJhY2sgPSBUSU1fRE1BRGVsYXlQdWxzZUhhbGZDcGx0OwogCiAgICAgICAvKiBTZXQgdGhlIERNQSBlcnJvciBjYWxsYmFjayAqLwotICAgICAgaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDM10tPlhmZXJFcnJvckNhbGxiYWNrID0gVElNX0RNQUVycm9yIDsKKyAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzNdLT5YZmVyRXJyb3JDYWxsYmFjayA9IFRJTV9ETUFFcnJvckNDeE4gOwogCiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBjaGFubmVsICovCiAgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MzXSwgKHVpbnQzMl90KXBEYXRhLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5DQ1IzLCBMZW5ndGgpICE9IEhBTF9PSykKQEAgLTEyODIsMTEgKzE0MTgsMTEgQEAKICAgICBjYXNlIFRJTV9DSEFOTkVMXzQ6CiAgICAgewogICAgICAgLyogU2V0IHRoZSBETUEgY29tcGFyZSBjYWxsYmFja3MgKi8KLSAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzRdLT5YZmVyQ3BsdENhbGxiYWNrID0gVElNX0RNQURlbGF5UHVsc2VDcGx0OworICAgICAgaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDNF0tPlhmZXJDcGx0Q2FsbGJhY2sgPSBUSU1fRE1BRGVsYXlQdWxzZU5DcGx0OwogICAgICAgaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDNF0tPlhmZXJIYWxmQ3BsdENhbGxiYWNrID0gVElNX0RNQURlbGF5UHVsc2VIYWxmQ3BsdDsKIAogICAgICAgLyogU2V0IHRoZSBETUEgZXJyb3IgY2FsbGJhY2sgKi8KLSAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzRdLT5YZmVyRXJyb3JDYWxsYmFjayA9IFRJTV9ETUFFcnJvciA7CisgICAgICBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0M0XS0+WGZlckVycm9yQ2FsbGJhY2sgPSBUSU1fRE1BRXJyb3JDQ3hOIDsKIAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgY2hhbm5lbCAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDNF0sICh1aW50MzJfdClwRGF0YSwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+Q0NSNCwgTGVuZ3RoKSAhPSBIQUxfT0spCkBAIC0xMzgzLDggKzE1MTksOCBAQAogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOwogCi0gIC8qIENoYW5nZSB0aGUgaHRpbSBzdGF0ZSAqLwotICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVBRFk7CisgIC8qIFNldCB0aGUgVElNIGNvbXBsZW1lbnRhcnkgY2hhbm5lbCBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOwogCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgcmV0dXJuIEhBTF9PSzsKQEAgLTE0MjQsMTEgKzE1NjAsMjcgQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1FeF9PbmVQdWxzZU5fU3RhcnQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IE91dHB1dENoYW5uZWwpCiB7CisgIHVpbnQzMl90IGlucHV0X2NoYW5uZWwgPSAoT3V0cHV0Q2hhbm5lbCA9PSBUSU1fQ0hBTk5FTF8xKSA/IFRJTV9DSEFOTkVMXzIgOiBUSU1fQ0hBTk5FTF8xOworICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgaW5wdXRfY2hhbm5lbF9zdGF0ZSA9IFRJTV9DSEFOTkVMX1NUQVRFX0dFVChodGltLCBpbnB1dF9jaGFubmVsKTsKKyAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIG91dHB1dF9jaGFubmVsX3N0YXRlID0gVElNX0NIQU5ORUxfTl9TVEFURV9HRVQoaHRpbSwgT3V0cHV0Q2hhbm5lbCk7CisKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DQ1hOX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlLCBPdXRwdXRDaGFubmVsKSk7CiAKLSAgLyogRW5hYmxlIHRoZSBjb21wbGVtZW50YXJ5IE9uZSBQdWxzZSBvdXRwdXQgKi8KKyAgLyogQ2hlY2sgdGhlIFRJTSBjaGFubmVscyBzdGF0ZSAqLworICBpZiAoKG91dHB1dF9jaGFubmVsX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKKyAgIHx8IChpbnB1dF9jaGFubmVsX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkpCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbHMgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgT3V0cHV0Q2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgaW5wdXRfY2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworCisgIC8qIEVuYWJsZSB0aGUgY29tcGxlbWVudGFyeSBPbmUgUHVsc2Ugb3V0cHV0IGNoYW5uZWwgYW5kIHRoZSBJbnB1dCBDYXB0dXJlIGNoYW5uZWwgKi8KICAgVElNX0NDeE5DaGFubmVsQ21kKGh0aW0tPkluc3RhbmNlLCBPdXRwdXRDaGFubmVsLCBUSU1fQ0N4Tl9FTkFCTEUpOworICBUSU1fQ0N4Q2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgaW5wdXRfY2hhbm5lbCwgVElNX0NDeF9FTkFCTEUpOwogCiAgIC8qIEVuYWJsZSB0aGUgTWFpbiBPdXRwdXQgKi8KICAgX19IQUxfVElNX01PRV9FTkFCTEUoaHRpbSk7CkBAIC0xNDQ5LDEyICsxNjAxLDE0IEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNRXhfT25lUHVsc2VOX1N0b3AoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IE91dHB1dENoYW5uZWwpCiB7CisgIHVpbnQzMl90IGlucHV0X2NoYW5uZWwgPSAoT3V0cHV0Q2hhbm5lbCA9PSBUSU1fQ0hBTk5FTF8xKSA/IFRJTV9DSEFOTkVMXzIgOiBUSU1fQ0hBTk5FTF8xOwogCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fQ0NYTl9JTlNUQU5DRShodGltLT5JbnN0YW5jZSwgT3V0cHV0Q2hhbm5lbCkpOwogCi0gIC8qIERpc2FibGUgdGhlIGNvbXBsZW1lbnRhcnkgT25lIFB1bHNlIG91dHB1dCAqLworICAvKiBEaXNhYmxlIHRoZSBjb21wbGVtZW50YXJ5IE9uZSBQdWxzZSBvdXRwdXQgY2hhbm5lbCBhbmQgdGhlIElucHV0IENhcHR1cmUgY2hhbm5lbCAqLwogICBUSU1fQ0N4TkNoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIE91dHB1dENoYW5uZWwsIFRJTV9DQ3hOX0RJU0FCTEUpOworICBUSU1fQ0N4Q2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgaW5wdXRfY2hhbm5lbCwgVElNX0NDeF9ESVNBQkxFKTsKIAogICAvKiBEaXNhYmxlIHRoZSBNYWluIE91dHB1dCAqLwogICBfX0hBTF9USU1fTU9FX0RJU0FCTEUoaHRpbSk7CkBAIC0xNDYyLDYgKzE2MTYsMTAgQEAKICAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwogICBfX0hBTF9USU1fRElTQUJMRShodGltKTsKIAorICAvKiBTZXQgdGhlIFRJTSAgY2hhbm5lbHMgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgT3V0cHV0Q2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIGlucHV0X2NoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwogICByZXR1cm4gSEFMX09LOwogfQpAQCAtMTQ3OCwxNyArMTYzNiwzMyBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTUV4X09uZVB1bHNlTl9TdGFydF9JVChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgT3V0cHV0Q2hhbm5lbCkKIHsKKyAgdWludDMyX3QgaW5wdXRfY2hhbm5lbCA9IChPdXRwdXRDaGFubmVsID09IFRJTV9DSEFOTkVMXzEpID8gVElNX0NIQU5ORUxfMiA6IFRJTV9DSEFOTkVMXzE7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBpbnB1dF9jaGFubmVsX3N0YXRlID0gVElNX0NIQU5ORUxfU1RBVEVfR0VUKGh0aW0sIGlucHV0X2NoYW5uZWwpOworICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgb3V0cHV0X2NoYW5uZWxfc3RhdGUgPSBUSU1fQ0hBTk5FTF9OX1NUQVRFX0dFVChodGltLCBPdXRwdXRDaGFubmVsKTsKKwogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDWE5fSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UsIE91dHB1dENoYW5uZWwpKTsKIAorICAvKiBDaGVjayB0aGUgVElNIGNoYW5uZWxzIHN0YXRlICovCisgIGlmICgob3V0cHV0X2NoYW5uZWxfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgfHwgKGlucHV0X2NoYW5uZWxfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKSkKKyAgeworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKworICAvKiBTZXQgdGhlIFRJTSBjaGFubmVscyBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBPdXRwdXRDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBpbnB1dF9jaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisKICAgLyogRW5hYmxlIHRoZSBUSU0gQ2FwdHVyZS9Db21wYXJlIDEgaW50ZXJydXB0ICovCiAgIF9fSEFMX1RJTV9FTkFCTEVfSVQoaHRpbSwgVElNX0lUX0NDMSk7CiAKICAgLyogRW5hYmxlIHRoZSBUSU0gQ2FwdHVyZS9Db21wYXJlIDIgaW50ZXJydXB0ICovCiAgIF9fSEFMX1RJTV9FTkFCTEVfSVQoaHRpbSwgVElNX0lUX0NDMik7CiAKLSAgLyogRW5hYmxlIHRoZSBjb21wbGVtZW50YXJ5IE9uZSBQdWxzZSBvdXRwdXQgKi8KKyAgLyogRW5hYmxlIHRoZSBjb21wbGVtZW50YXJ5IE9uZSBQdWxzZSBvdXRwdXQgY2hhbm5lbCBhbmQgdGhlIElucHV0IENhcHR1cmUgY2hhbm5lbCAqLwogICBUSU1fQ0N4TkNoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIE91dHB1dENoYW5uZWwsIFRJTV9DQ3hOX0VOQUJMRSk7CisgIFRJTV9DQ3hDaGFubmVsQ21kKGh0aW0tPkluc3RhbmNlLCBpbnB1dF9jaGFubmVsLCBUSU1fQ0N4X0VOQUJMRSk7CiAKICAgLyogRW5hYmxlIHRoZSBNYWluIE91dHB1dCAqLwogICBfX0hBTF9USU1fTU9FX0VOQUJMRShodGltKTsKQEAgLTE1MDksNiArMTY4Myw4IEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNRXhfT25lUHVsc2VOX1N0b3BfSVQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IE91dHB1dENoYW5uZWwpCiB7CisgIHVpbnQzMl90IGlucHV0X2NoYW5uZWwgPSAoT3V0cHV0Q2hhbm5lbCA9PSBUSU1fQ0hBTk5FTF8xKSA/IFRJTV9DSEFOTkVMXzIgOiBUSU1fQ0hBTk5FTF8xOworCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fQ0NYTl9JTlNUQU5DRShodGltLT5JbnN0YW5jZSwgT3V0cHV0Q2hhbm5lbCkpOwogCkBAIC0xNTE4LDggKzE2OTQsOSBAQAogICAvKiBEaXNhYmxlIHRoZSBUSU0gQ2FwdHVyZS9Db21wYXJlIDIgaW50ZXJydXB0ICovCiAgIF9fSEFMX1RJTV9ESVNBQkxFX0lUKGh0aW0sIFRJTV9JVF9DQzIpOwogCi0gIC8qIERpc2FibGUgdGhlIGNvbXBsZW1lbnRhcnkgT25lIFB1bHNlIG91dHB1dCAqLworICAvKiBEaXNhYmxlIHRoZSBjb21wbGVtZW50YXJ5IE9uZSBQdWxzZSBvdXRwdXQgY2hhbm5lbCBhbmQgdGhlIElucHV0IENhcHR1cmUgY2hhbm5lbCAqLwogICBUSU1fQ0N4TkNoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIE91dHB1dENoYW5uZWwsIFRJTV9DQ3hOX0RJU0FCTEUpOworICBUSU1fQ0N4Q2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgaW5wdXRfY2hhbm5lbCwgVElNX0NDeF9ESVNBQkxFKTsKIAogICAvKiBEaXNhYmxlIHRoZSBNYWluIE91dHB1dCAqLwogICBfX0hBTF9USU1fTU9FX0RJU0FCTEUoaHRpbSk7CkBAIC0xNTI3LDYgKzE3MDQsMTAgQEAKICAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwogICBfX0hBTF9USU1fRElTQUJMRShodGltKTsKIAorICAvKiBTZXQgdGhlIFRJTSAgY2hhbm5lbHMgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgT3V0cHV0Q2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIGlucHV0X2NoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwogICByZXR1cm4gSEFMX09LOwogfQpAQCAtMTg0MCw3ICsyMDIxLDcgQEAKICAgdWludDMyX3QgdG1wc21jcjsKIAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwotICBhc3NlcnRfcGFyYW0oSVNfVElNX1NZTkNIUk9fSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9NQVNURVJfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9UUkdPX1NPVVJDRShzTWFzdGVyQ29uZmlnLT5NYXN0ZXJPdXRwdXRUcmlnZ2VyKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fTVNNX1NUQVRFKHNNYXN0ZXJDb25maWctPk1hc3RlclNsYXZlTW9kZSkpOwogCkBAIC0xODczLDE2ICsyMDU0LDE5IEBACiAgIC8qIFNlbGVjdCB0aGUgVFJHTyBzb3VyY2UgKi8KICAgdG1wY3IyIHw9ICBzTWFzdGVyQ29uZmlnLT5NYXN0ZXJPdXRwdXRUcmlnZ2VyOwogCi0gIC8qIFJlc2V0IHRoZSBNU00gQml0ICovCi0gIHRtcHNtY3IgJj0gflRJTV9TTUNSX01TTTsKLSAgLyogU2V0IG1hc3RlciBtb2RlICovCi0gIHRtcHNtY3IgfD0gc01hc3RlckNvbmZpZy0+TWFzdGVyU2xhdmVNb2RlOwotCiAgIC8qIFVwZGF0ZSBUSU14IENSMiAqLwogICBodGltLT5JbnN0YW5jZS0+Q1IyID0gdG1wY3IyOwogCi0gIC8qIFVwZGF0ZSBUSU14IFNNQ1IgKi8KLSAgaHRpbS0+SW5zdGFuY2UtPlNNQ1IgPSB0bXBzbWNyOworICBpZiAoSVNfVElNX1NMQVZFX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSkKKyAgeworICAgIC8qIFJlc2V0IHRoZSBNU00gQml0ICovCisgICAgdG1wc21jciAmPSB+VElNX1NNQ1JfTVNNOworICAgIC8qIFNldCBtYXN0ZXIgbW9kZSAqLworICAgIHRtcHNtY3IgfD0gc01hc3RlckNvbmZpZy0+TWFzdGVyU2xhdmVNb2RlOworCisgICAgLyogVXBkYXRlIFRJTXggU01DUiAqLworICAgIGh0aW0tPkluc3RhbmNlLT5TTUNSID0gdG1wc21jcjsKKyAgfQogCiAgIC8qIENoYW5nZSB0aGUgaHRpbSBzdGF0ZSAqLwogICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVBRFk7CkBAIC0zMTI2LDYgKzMzMTAsMjggQEAKIH0KIAogLyoqCisgICogQGJyaWVmICBSZXR1cm4gYWN0dWFsIHN0YXRlIG9mIHRoZSBUSU0gY29tcGxlbWVudGFyeSBjaGFubmVsLgorICAqIEBwYXJhbSAgaHRpbSBUSU0gaGFuZGxlCisgICogQHBhcmFtICBDaGFubmVsTiBUSU0gQ29tcGxlbWVudGFyeSBjaGFubmVsCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0NIQU5ORUxfMTogVElNIENoYW5uZWwgMQorICAqICAgICAgICAgICAgQGFyZyBUSU1fQ0hBTk5FTF8yOiBUSU0gQ2hhbm5lbCAyCisgICogICAgICAgICAgICBAYXJnIFRJTV9DSEFOTkVMXzM6IFRJTSBDaGFubmVsIDMKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0NIQU5ORUxfNDogVElNIENoYW5uZWwgNAorICAqIEByZXR2YWwgVElNIENvbXBsZW1lbnRhcnkgY2hhbm5lbCBzdGF0ZQorICAqLworSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIEhBTF9USU1FeF9HZXRDaGFubmVsTlN0YXRlKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCAgdWludDMyX3QgQ2hhbm5lbE4pCit7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjaGFubmVsX3N0YXRlOworICAKKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DQ1hOX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsTikpOworCisgIGNoYW5uZWxfc3RhdGUgPSBUSU1fQ0hBTk5FTF9OX1NUQVRFX0dFVChodGltLCBDaGFubmVsTik7CisgICAgCisgIHJldHVybiBjaGFubmVsX3N0YXRlOworfQorLyoqCiAgICogQH0KICAgKi8KIApAQCAtMzE3OCw2ICszMzg0LDEwMyBAQAogCiAKIC8qKgorICAqIEBicmllZiAgVElNIERNQSBEZWxheSBQdWxzZSBjb21wbGV0ZSBjYWxsYmFjayAoY29tcGxlbWVudGFyeSBjaGFubmVsKS4KKyAgKiBAcGFyYW0gIGhkbWEgcG9pbnRlciB0byBETUEgaGFuZGxlLgorICAqIEByZXR2YWwgTm9uZQorICAqLworc3RhdGljIHZvaWQgVElNX0RNQURlbGF5UHVsc2VOQ3BsdChETUFfSGFuZGxlVHlwZURlZiAqaGRtYSkKK3sKKyAgVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0gPSAoVElNX0hhbmRsZVR5cGVEZWYgKikoKERNQV9IYW5kbGVUeXBlRGVmICopaGRtYSktPlBhcmVudDsKKworICBpZiAoaGRtYSA9PSBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MxXSkKKyAgeworICAgIGh0aW0tPkNoYW5uZWwgPSBIQUxfVElNX0FDVElWRV9DSEFOTkVMXzE7CisgICAgCisgICAgaWYgKGhkbWEtPkluaXQuTW9kZSA9PSBETUFfTk9STUFMKQorICAgIHsKKyAgICAgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgICAgfQorICB9CisgIGVsc2UgaWYgKGhkbWEgPT0gaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMl0pCisgIHsKKyAgICBodGltLT5DaGFubmVsID0gSEFMX1RJTV9BQ1RJVkVfQ0hBTk5FTF8yOworICAgIAorICAgIGlmIChoZG1hLT5Jbml0Lk1vZGUgPT0gRE1BX05PUk1BTCkKKyAgICB7CisgICAgICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICAgIH0KKyAgfQorICBlbHNlIGlmIChoZG1hID09IGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzNdKQorICB7CisgICAgaHRpbS0+Q2hhbm5lbCA9IEhBTF9USU1fQUNUSVZFX0NIQU5ORUxfMzsKKyAgICAKKyAgICBpZiAoaGRtYS0+SW5pdC5Nb2RlID09IERNQV9OT1JNQUwpCisgICAgeworICAgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMywgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgICB9CisgIH0KKyAgZWxzZSBpZiAoaGRtYSA9PSBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0M0XSkKKyAgeworICAgIGh0aW0tPkNoYW5uZWwgPSBIQUxfVElNX0FDVElWRV9DSEFOTkVMXzQ7CisgICAgCisgICAgaWYgKGhkbWEtPkluaXQuTW9kZSA9PSBETUFfTk9STUFMKQorICAgIHsKKyAgICAgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzQsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgICAgfQorICB9CisgIGVsc2UKKyAgeworICAgIC8qIG5vdGhpbmcgdG8gZG8gKi8KKyAgfQorCisjaWYgKFVTRV9IQUxfVElNX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQorICBodGltLT5QV01fUHVsc2VGaW5pc2hlZENhbGxiYWNrKGh0aW0pOworI2Vsc2UKKyAgSEFMX1RJTV9QV01fUHVsc2VGaW5pc2hlZENhbGxiYWNrKGh0aW0pOworI2VuZGlmIC8qIFVTRV9IQUxfVElNX1JFR0lTVEVSX0NBTExCQUNLUyAqLworCisgIGh0aW0tPkNoYW5uZWwgPSBIQUxfVElNX0FDVElWRV9DSEFOTkVMX0NMRUFSRUQ7Cit9CisKKy8qKgorICAqIEBicmllZiAgVElNIERNQSBlcnJvciBjYWxsYmFjayAoY29tcGxlbWVudGFyeSBjaGFubmVsKQorICAqIEBwYXJhbSAgaGRtYSBwb2ludGVyIHRvIERNQSBoYW5kbGUuCisgICogQHJldHZhbCBOb25lCisgICovCit2b2lkIFRJTV9ETUFFcnJvckNDeE4oRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpCit7CisgIFRJTV9IYW5kbGVUeXBlRGVmICpodGltID0gKFRJTV9IYW5kbGVUeXBlRGVmICopKChETUFfSGFuZGxlVHlwZURlZiAqKWhkbWEpLT5QYXJlbnQ7CisKKyAgaWYgKGhkbWEgPT0gaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMV0pCisgIHsKKyAgICBodGltLT5DaGFubmVsID0gSEFMX1RJTV9BQ1RJVkVfQ0hBTk5FTF8xOworICAgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIH0KKyAgZWxzZSBpZiAoaGRtYSA9PSBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MyXSkKKyAgeworICAgIGh0aW0tPkNoYW5uZWwgPSBIQUxfVElNX0FDVElWRV9DSEFOTkVMXzI7CisgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgfQorICBlbHNlIGlmIChoZG1hID09IGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzNdKQorICB7CisgICAgaHRpbS0+Q2hhbm5lbCA9IEhBTF9USU1fQUNUSVZFX0NIQU5ORUxfMzsKKyAgICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8zLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICB9CisgIGVsc2UKKyAgeworICAgIC8qIG5vdGhpbmcgdG8gZG8gKi8KKyAgfQorICAKKyNpZiAoVVNFX0hBTF9USU1fUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCisgIGh0aW0tPkVycm9yQ2FsbGJhY2soaHRpbSk7CisjZWxzZQorICBIQUxfVElNX0Vycm9yQ2FsbGJhY2soaHRpbSk7CisjZW5kaWYgLyogVVNFX0hBTF9USU1fUkVHSVNURVJfQ0FMTEJBQ0tTICovCisgIAorICBodGltLT5DaGFubmVsID0gSEFMX1RJTV9BQ1RJVkVfQ0hBTk5FTF9DTEVBUkVEOworfQorCisvKioKICAgKiBAYnJpZWYgIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIFRJTSBDYXB0dXJlIENvbXBhcmUgQ2hhbm5lbCB4Ti4KICAgKiBAcGFyYW0gIFRJTXggdG8gc2VsZWN0IHRoZSBUSU0gcGVyaXBoZXJhbAogICAqIEBwYXJhbSAgQ2hhbm5lbCBzcGVjaWZpZXMgdGhlIFRJTSBDaGFubmVsCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJnNHh4X2hhbF90aW1lYmFzZV90aW1fdGVtcGxhdGUuYyBiL1NyYy9zdG0zMmc0eHhfaGFsX3RpbWViYXNlX3RpbV90ZW1wbGF0ZS5jCmluZGV4IDhlZTZkZGMuLjJkOWQxMjYgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmc0eHhfaGFsX3RpbWViYXNlX3RpbV90ZW1wbGF0ZS5jCisrKyBiL1NyYy9zdG0zMmc0eHhfaGFsX3RpbWViYXNlX3RpbV90ZW1wbGF0ZS5jCkBAIC03NCw2ICs3NCw3IEBACiAgIHVpbnQzMl90ICAgICAgICAgICAgICB1d0FQQjFQcmVzY2FsZXI7CiAgIHVpbnQzMl90ICAgICAgICAgICAgICB1d1ByZXNjYWxlclZhbHVlOwogICB1aW50MzJfdCAgICAgICAgICAgICAgcEZMYXRlbmN5OworICBIQUxfU3RhdHVzVHlwZURlZiAgICAgc3RhdHVzOwogCiAgIC8qIENvbmZpZ3VyZSB0aGUgVElNNiBJUlEgcHJpb3JpdHkgKi8KICAgSEFMX05WSUNfU2V0UHJpb3JpdHkoVElNNl9EQUNfSVJRbiwgVGlja1ByaW9yaXR5LCAwVSk7CkBAIC0xMTYsMTQgKzExNywyOSBAQAogICBUaW1IYW5kbGUuSW5pdC5QcmVzY2FsZXIgPSB1d1ByZXNjYWxlclZhbHVlOwogICBUaW1IYW5kbGUuSW5pdC5DbG9ja0RpdmlzaW9uID0gMDsKICAgVGltSGFuZGxlLkluaXQuQ291bnRlck1vZGUgPSBUSU1fQ09VTlRFUk1PREVfVVA7Ci0gIGlmIChIQUxfVElNX0Jhc2VfSW5pdCgmVGltSGFuZGxlKSA9PSBIQUxfT0spCisgIHN0YXR1cyA9IEhBTF9USU1fQmFzZV9Jbml0KCZUaW1IYW5kbGUpOworICBpZiAoc3RhdHVzID09IEhBTF9PSykKICAgewogICAgIC8qIFN0YXJ0IHRoZSBUSU0gdGltZSBCYXNlIGdlbmVyYXRpb24gaW4gaW50ZXJydXB0IG1vZGUgKi8KLSAgICByZXR1cm4gSEFMX1RJTV9CYXNlX1N0YXJ0X0lUKCZUaW1IYW5kbGUpOworICAgIHN0YXR1cyA9IEhBTF9USU1fQmFzZV9TdGFydF9JVCgmVGltSGFuZGxlKTsKKyAgICBpZiAoc3RhdHVzID09IEhBTF9PSykKKyAgICB7CisgICAgICAvKiBDb25maWd1cmUgdGhlIFN5c1RpY2sgSVJRIHByaW9yaXR5ICovCisgICAgICBpZiAoVGlja1ByaW9yaXR5IDwgKDFVTCA8PCBfX05WSUNfUFJJT19CSVRTKSkKKyAgICAgIHsKKyAgICAgICAgLyogQ29uZmlndXJlIHRoZSBUSU0gSVJRIHByaW9yaXR5ICovCisgICAgICAgIEhBTF9OVklDX1NldFByaW9yaXR5KFRJTTZfREFDX0lSUW4sIFRpY2tQcmlvcml0eSwgMFUpOworICAgICAgICB1d1RpY2tQcmlvID0gVGlja1ByaW9yaXR5OworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBzdGF0dXMgPSBIQUxfRVJST1I7CisgICAgICB9CisgICAgfQogICB9CiAKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwotICByZXR1cm4gSEFMX0VSUk9SOworICByZXR1cm4gc3RhdHVzOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmc0eHhfaGFsX3VzYXJ0LmMgYi9TcmMvc3RtMzJnNHh4X2hhbF91c2FydC5jCmluZGV4IGM5NDQ5ZDguLjYwMjBiZjIgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmc0eHhfaGFsX3VzYXJ0LmMKKysrIGIvU3JjL3N0bTMyZzR4eF9oYWxfdXNhcnQuYwpAQCAtMzE3LDcgKzMxNyw4IEBACiAKICAgLyogSW4gU3luY2hyb25vdXMgbW9kZSwgdGhlIGZvbGxvd2luZyBiaXRzIG11c3QgYmUga2VwdCBjbGVhcmVkOgogICAtIExJTkVOIGJpdCBpbiB0aGUgVVNBUlRfQ1IyIHJlZ2lzdGVyCi0gIC0gSERTRUwsIFNDRU4gYW5kIElSRU4gYml0cyBpbiB0aGUgVVNBUlRfQ1IzIHJlZ2lzdGVyLiovCisgIC0gSERTRUwsIFNDRU4gYW5kIElSRU4gYml0cyBpbiB0aGUgVVNBUlRfQ1IzIHJlZ2lzdGVyLgorICAqLwogICBodXNhcnQtPkluc3RhbmNlLT5DUjIgJj0gflVTQVJUX0NSMl9MSU5FTjsKICAgaHVzYXJ0LT5JbnN0YW5jZS0+Q1IzICY9IH4oVVNBUlRfQ1IzX1NDRU4gfCBVU0FSVF9DUjNfSERTRUwgfCBVU0FSVF9DUjNfSVJFTik7CiAKQEAgLTIwOTEsNyArMjA5Miw3IEBACiAgIHVpbnQzMl90IGVycm9yY29kZTsKIAogICAvKiBJZiBubyBlcnJvciBvY2N1cnMgKi8KLSAgZXJyb3JmbGFncyA9IChpc3JmbGFncyAmICh1aW50MzJfdCkoVVNBUlRfSVNSX1BFIHwgVVNBUlRfSVNSX0ZFIHwgVVNBUlRfSVNSX09SRSB8IFVTQVJUX0lTUl9ORSB8IFVTQVJUX0lTUl9VRFIpKTsKKyAgZXJyb3JmbGFncyA9IChpc3JmbGFncyAmICh1aW50MzJfdCkoVVNBUlRfSVNSX1BFIHwgVVNBUlRfSVNSX0ZFIHwgVVNBUlRfSVNSX09SRSB8IFVTQVJUX0lTUl9ORSB8IFVTQVJUX0lTUl9SVE9GIHwgVVNBUlRfSVNSX1VEUikpOwogICBpZiAoZXJyb3JmbGFncyA9PSAwVSkKICAgewogICAgIC8qIFVTQVJUIGluIG1vZGUgUmVjZWl2ZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTIxNDYsNiArMjE0NywxNCBAQAogICAgICAgaHVzYXJ0LT5FcnJvckNvZGUgfD0gSEFMX1VTQVJUX0VSUk9SX09SRTsKICAgICB9CiAKKyAgICAvKiBVU0FSVCBSZWNlaXZlciBUaW1lb3V0IGludGVycnVwdCBvY2N1cnJlZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworICAgIGlmICgoKGlzcmZsYWdzICYgVVNBUlRfSVNSX1JUT0YpICE9IDBVKSAmJiAoKGNyMWl0cyAmIFVTQVJUX0NSMV9SVE9JRSkgIT0gMFUpKQorICAgIHsKKyAgICAgIF9fSEFMX1VTQVJUX0NMRUFSX0lUKGh1c2FydCwgVVNBUlRfQ0xFQVJfUlRPRik7CisKKyAgICAgIGh1c2FydC0+RXJyb3JDb2RlIHw9IEhBTF9VU0FSVF9FUlJPUl9SVE87CisgICAgfQorCiAgICAgLyogVVNBUlQgU1BJIHNsYXZlIHVuZGVycnVuIGVycm9yIGludGVycnVwdCBvY2N1cnJlZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICAgICBpZiAoKChpc3JmbGFncyAmIFVTQVJUX0lTUl9VRFIpICE9IDBVKSAmJiAoKGNyM2l0cyAmIFVTQVJUX0NSM19FSUUpICE9IDBVKSkKICAgICB7CmRpZmYgLS1naXQgYS9TcmMvc3RtMzJnNHh4X2hhbF91c2FydF9leC5jIGIvU3JjL3N0bTMyZzR4eF9oYWxfdXNhcnRfZXguYwppbmRleCA2ZGE3NWJlLi45YTQyOWQxIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJnNHh4X2hhbF91c2FydF9leC5jCisrKyBiL1NyYy9zdG0zMmc0eHhfaGFsX3VzYXJ0X2V4LmMKQEAgLTU3LDEwICs1NywxMCBAQAogLyoqIEBkZWZncm91cCBVU0FSVEV4X1ByaXZhdGVfQ29uc3RhbnRzIFVTQVJURXggUHJpdmF0ZSBDb25zdGFudHMKICAgKiBAewogICAqLwotLyogVUFSVCBSWCBGSUZPIGRlcHRoICovCisvKiBVU0FSVCBSWCBGSUZPIGRlcHRoICovCiAjZGVmaW5lIFJYX0ZJRk9fREVQVEggOFUKIAotLyogVUFSVCBUWCBGSUZPIGRlcHRoICovCisvKiBVU0FSVCBUWCBGSUZPIGRlcHRoICovCiAjZGVmaW5lIFRYX0ZJRk9fREVQVEggOFUKIC8qKgogICAqIEB9CkBAIC0yNDMsNyArMjQzLDcgQEAKICAgLyogUmVzdG9yZSBVU0FSVCBjb25maWd1cmF0aW9uICovCiAgIFdSSVRFX1JFRyhodXNhcnQtPkluc3RhbmNlLT5DUjEsIHRtcGNyMSk7CiAKLSAgaHVzYXJ0LT5TbGF2ZU1vZGUgPSBVU0FSVF9TTEFWRU1PREVfRU5BQkxFOworICBodXNhcnQtPlNsYXZlTW9kZSA9IFVTQVJUX1NMQVZFTU9ERV9ESVNBQkxFOwogCiAgIGh1c2FydC0+U3RhdGUgPSBIQUxfVVNBUlRfU1RBVEVfUkVBRFk7CiAKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmc0eHhfaGFsX3d3ZGcuYyBiL1NyYy9zdG0zMmc0eHhfaGFsX3d3ZGcuYwppbmRleCA5MmY4ZWM1Li5jYjNiMDdjIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJnNHh4X2hhbF93d2RnLmMKKysrIGIvU3JjL3N0bTMyZzR4eF9oYWxfd3dkZy5jCkBAIC0zMiwxMCArMzIsMTAgQEAKICAgICAgICAgKCsrKSBtaW4gdGltZSAobVMpID0gMTAwMCAqIChDb3VudGVyIC0gV2luZG93KSAvIFdXREcgY2xvY2sKICAgICAgICAgKCsrKSBtYXggdGltZSAobVMpID0gMTAwMCAqIChDb3VudGVyIC0gMHg0MCkgLyBXV0RHIGNsb2NrCiAgICAgKCspIFR5cGljYWwgdmFsdWVzOgotICAgICAgICAoKyspIENvdW50ZXIgbWluIChUWzU7MF0gPSAweDAwKSBANTZNSHogKFBDTEsxKSB3aXRoIHplcm8gcHJlc2NhbGVyOgotICAgICAgICAgICAgIG1heCB0aW1lb3V0IGJlZm9yZSByZXNldDogfjczLjE0tXMKLSAgICAgICAgKCsrKSBDb3VudGVyIG1heCAoVFs1OzBdID0gMHgzRikgQDU2TUh6IChQQ0xLMSkgd2l0aCBwcmVzY2FsZXIgZGl2aWRpbmcgYnkgMTI4OgotICAgICAgICAgICAgIG1heCB0aW1lb3V0IGJlZm9yZSByZXNldDogfjU5OS4xOG1zCisgICAgICAgICgrKykgQ291bnRlciBtaW4gKFRbNTswXSA9IDB4MDApIEAxNzBNSHogKFBDTEsxKSB3aXRoIHplcm8gcHJlc2NhbGVyOgorICAgICAgICAgICAgIG1heCB0aW1lb3V0IGJlZm9yZSByZXNldDogYXBwcm94aW1hdGVseSAyNC4wObVzCisgICAgICAgICgrKykgQ291bnRlciBtYXggKFRbNTswXSA9IDB4M0YpIEAxNzBNSHogKFBDTEsxKSB3aXRoIHByZXNjYWxlciBkaXZpZGluZyBieSAxMjg6CisgICAgICAgICAgICAgbWF4IHRpbWVvdXQgYmVmb3JlIHJlc2V0OiBhcHByb3hpbWF0ZWx5IDE5Ny4zOG1zCiAKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICAgICAgICAjIyMjIyBIb3cgdG8gdXNlIHRoaXMgZHJpdmVyICMjIyMjCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJnNHh4X2xsX2FkYy5jIGIvU3JjL3N0bTMyZzR4eF9sbF9hZGMuYwppbmRleCA1MzFiN2Q4Li4xOWZjZTMyIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJnNHh4X2xsX2FkYy5jCisrKyBiL1NyYy9zdG0zMmc0eHhfbGxfYWRjLmMKQEAgLTk0Miw3ICs5NDIsNyBAQAogICAgIENMRUFSX0JJVChBREN4LT5PRlIzLCBBRENfT0ZSM19PRkZTRVQzX0VOIHwgQURDX09GUjNfT0ZGU0VUM19DSCB8IEFEQ19PRlIzX09GRlNFVDMgfCBBRENfT0ZSM19TQVRFTiB8IEFEQ19PRlIzX09GRlNFVFBPUyk7CiAgICAgLyogUmVzZXQgcmVnaXN0ZXIgT0ZSNCAqLwogICAgIENMRUFSX0JJVChBREN4LT5PRlI0LCBBRENfT0ZSNF9PRkZTRVQ0X0VOIHwgQURDX09GUjRfT0ZGU0VUNF9DSCB8IEFEQ19PRlI0X09GRlNFVDQgfCBBRENfT0ZSNF9TQVRFTiB8IEFEQ19PRlI0X09GRlNFVFBPUyk7Ci0gICAgCisKICAgICAvKiBSZXNldCByZWdpc3RlcnMgSkRSMSwgSkRSMiwgSkRSMywgSkRSNCAqLwogICAgIC8qIE5vdGU6IGJpdHMgaW4gYWNjZXNzIG1vZGUgcmVhZCBvbmx5LCBubyBkaXJlY3QgcmVzZXQgYXBwbGljYWJsZSAqLwogCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJnNHh4X2xsX2ZtYWMuYyBiL1NyYy9zdG0zMmc0eHhfbGxfZm1hYy5jCmluZGV4IDJhZDY3ODcuLjc0OTFiZTQgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmc0eHhfbGxfZm1hYy5jCisrKyBiL1NyYy9zdG0zMmc0eHhfbGxfZm1hYy5jCkBAIC0yLDcgKzIsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAZmlsZSAgICBzdG0zMmc0eHhfbGxfZm1hYy5jCiAgICogQGF1dGhvciAgTUNEIEFwcGxpY2F0aW9uIFRlYW0KLSAgKiBAYnJpZWYgICBGTUFDIExMIG1vZHVsZSBkcml2ZXIuCisgICogQGJyaWVmICAgSGVhZGVyIGZvciBzdG0zMmc0eHhfbGxfZm1hYy5jIG1vZHVsZQogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKQEAgLTM3LDQxICszNywxMyBAQAogICAqIEB7CiAgICovCiAKLS8qIFByaXZhdGUgdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiBQcml2YXRlIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogUHJpdmF0ZSBjb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFByaXZhdGUgdHlwZWRlZiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBQcml2YXRlIGRlZmluZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogUHJpdmF0ZSBtYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qKiBAYWRkdG9ncm91cCBGTUFDX0xMX1ByaXZhdGVfTWFjcm9zCi0gICogQHsKLSAgKi8KLQotLyoqIEBicmllZiAgQ2hlY2sgaWYgdGhlIHdhdGVybWFyayB2YWx1ZSBpcyBhIHZhbGlkIG9uZS4KLSAgKiBAcGFyYW0gIF9fVkFMVUVfXyBXYXRlcm1hayB2YWx1ZS4KLSAgKiBAcmV0dmFsIFNFVCAoX19WQUxVRV9fIGlzIGEgdmFsaWQgdmFsdWUpIG9yIFJFU0VUIChfX1ZBTFVFX18gaXMgaW52YWxpZCkKLSAgKi8KLSNkZWZpbmUgSVNfTExfRk1BQ19XTShfX1ZBTFVFX18pICgoKF9fVkFMVUVfXykgPT0gTExfRk1BQ19XTV8wX1RIUkVTSE9MRF8xKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX0ZNQUNfV01fMV9USFJFU0hPTERfMikgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9GTUFDX1dNXzJfVEhSRVNIT0xEXzQpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfRk1BQ19XTV8zX1RIUkVTSE9MRF84KSkKLQotLyoqIEBicmllZiAgQ2hlY2sgaWYgdGhlIGZ1bmN0aW9uIElEIGlzIGEgdmFsaWQgb25lLgotICAqIEBwYXJhbSAgX19WQUxVRV9fIEZ1bmN0aW9uIElELgotICAqIEByZXR2YWwgU0VUIChfX1ZBTFVFX18gaXMgYSB2YWxpZCB2YWx1ZSkgb3IgUkVTRVQgKF9fVkFMVUVfXyBpcyBpbnZhbGlkKQotICAqLwotI2RlZmluZSBJU19MTF9GTUFDX0ZVTkMoX19WQUxVRV9fKSAoKChfX1ZBTFVFX18pID09IExMX0ZNQUNfRlVOQ19MT0FEX1gxKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfRk1BQ19GVU5DX0xPQURfWDIpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9GTUFDX0ZVTkNfTE9BRF9ZKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfRk1BQ19GVU5DX0NPTlZPX0ZJUikgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX0ZNQUNfRlVOQ19JSVJfRElSRUNUX0ZPUk1fMSkpCi0KLQotLyoqCi0gICogQH0KLSAgKi8KLQorLyogUHJpdmF0ZSB2YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIEdsb2JhbCB2YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBQcml2YXRlIGZ1bmN0aW9uIHByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKiBFeHBvcnRlZCBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogRnVuY3Rpb25zIERlZmluaXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qKiBAYWRkdG9ncm91cCBGTUFDX0xMX0V4cG9ydGVkX0Z1bmN0aW9ucwogICAqIEB7CiAgICovCkBAIC04Myw3ICs1NSw3IEBACiAvKioKICAgKiBAYnJpZWYgIEluaXRpYWxpemUgRk1BQyBwZXJpcGhlcmFsIHJlZ2lzdGVycyB0byB0aGVpciBkZWZhdWx0IHJlc2V0IHZhbHVlcy4KICAgKiBAcGFyYW0gIEZNQUN4IEZNQUMgSW5zdGFuY2UKLSAgKiBAcmV0dmFsIEFuIEVycm9yU3RhdHVzIGVudW1lcmF0aW9uIHZhbHVlOgorICAqIEByZXR2YWwgRXJyb3JTdGF0dXMgZW51bWVyYXRpb24gdmFsdWU6CiAgICogICAgICAgICAgLSBTVUNDRVNTOiBGTUFDIHJlZ2lzdGVycyBhcmUgaW5pdGlhbGl6ZWQKICAgKiAgICAgICAgICAtIEVSUk9SOiBGTUFDIHJlZ2lzdGVycyBhcmUgbm90IGluaXRpYWxpemVkCiAgICovCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJnNHh4X2xsX2xwdGltLmMgYi9TcmMvc3RtMzJnNHh4X2xsX2xwdGltLmMKaW5kZXggYTA0YTQ1OC4uYzdkZThkMyAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZzR4eF9sbF9scHRpbS5jCisrKyBiL1NyYy9zdG0zMmc0eHhfbGxfbHB0aW0uYwpAQCAtNCw3ICs0LDcgQEAKICAgKiBAYXV0aG9yICBNQ0QgQXBwbGljYXRpb24gVGVhbQogICAqIEBicmllZiAgIExQVElNIExMIG1vZHVsZSBkcml2ZXIuCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgICogQGF0dGVudGlvbgorICAqIEBhdHRlbnRpb24KICAgKgogICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KQEAgLTEzLDcgKzEzLDggQEAKICAgKiB0aGUgIkxpY2Vuc2UiOyBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlCiAgICogTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0OgogICAqICAgICAgICAgICAgICAgICAgICAgICAgb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlCi0gICogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqLwogI2lmIGRlZmluZWQoVVNFX0ZVTExfTExfRFJJVkVSKQogCkBAIC0xNzIsMTQgKzE3Myw2IEBACiB9CiAKIC8qKgotICAqIEB9Ci0gICovCi0KLS8qKgotICAqIEB9Ci0gICovCi0KLS8qKgogICAqIEBicmllZiAgRGlzYWJsZSB0aGUgTFBUSU0gaW5zdGFuY2UKICAgKiBAcm10b2xsIENSICAgICAgICAgICBFTkFCTEUgICAgICAgIExMX0xQVElNX0Rpc2FibGUKICAgKiBAcGFyYW0gIExQVElNeCBMb3ctUG93ZXIgVGltZXIgaW5zdGFuY2UKQEAgLTIwNywxMSArMjAwLDExIEBACiAgIC8qIFNhdmUgTFBUSU0gc291cmNlIGNsb2NrICovCiAgIHN3aXRjaCAoKHVpbnQzMl90KUxQVElNeCkKICAgewotICAgICBjYXNlIExQVElNMV9CQVNFOgotICAgICAgIHRtcGNsa3NvdXJjZSA9IExMX1JDQ19HZXRMUFRJTUNsb2NrU291cmNlKExMX1JDQ19MUFRJTTFfQ0xLU09VUkNFKTsKLSAgICAgICBicmVhazsKLSAgICAgZGVmYXVsdDoKLSAgICAgICBicmVhazsKKyAgICBjYXNlIExQVElNMV9CQVNFOgorICAgICAgdG1wY2xrc291cmNlID0gTExfUkNDX0dldExQVElNQ2xvY2tTb3VyY2UoTExfUkNDX0xQVElNMV9DTEtTT1VSQ0UpOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOwogICB9CiAKICAgLyogU2F2ZSBMUFRJTSBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyAqLwpAQCAtMjMyLDExICsyMjUsMTEgQEAKICAgICAvKiBGb3JjZSBMUFRJTSBzb3VyY2Uga2VybmVsIGNsb2NrIGZyb20gQVBCICovCiAgICAgc3dpdGNoICgodWludDMyX3QpTFBUSU14KQogICAgIHsKLSAgICAgICBjYXNlIExQVElNMV9CQVNFOgotICAgICAgICAgTExfUkNDX1NldExQVElNQ2xvY2tTb3VyY2UoTExfUkNDX0xQVElNMV9DTEtTT1VSQ0VfUENMSzEpOwotICAgICAgICAgYnJlYWs7Ci0gICAgICAgZGVmYXVsdDoKLSAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBMUFRJTTFfQkFTRToKKyAgICAgICAgTExfUkNDX1NldExQVElNQ2xvY2tTb3VyY2UoTExfUkNDX0xQVElNMV9DTEtTT1VSQ0VfUENMSzEpOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGlmICh0bXBDTVAgIT0gMFVMKQpAQCAtMjQ5LDcgKzI0Miw4IEBACiAgICAgICBkbwogICAgICAgewogICAgICAgICByY2NfY2xvY2suU1lTQ0xLX0ZyZXF1ZW5jeS0tOyAvKiBVc2VkIGZvciB0aW1lb3V0ICovCi0gICAgICB9IHdoaWxlICgoKExMX0xQVElNX0lzQWN0aXZlRmxhZ19DTVBPSyhMUFRJTXgpICE9IDFVTCkpICYmICgocmNjX2Nsb2NrLlNZU0NMS19GcmVxdWVuY3kpID4gMFVMKSk7CisgICAgICB9CisgICAgICB3aGlsZSAoKChMTF9MUFRJTV9Jc0FjdGl2ZUZsYWdfQ01QT0soTFBUSU14KSAhPSAxVUwpKSAmJiAoKHJjY19jbG9jay5TWVNDTEtfRnJlcXVlbmN5KSA+IDBVTCkpOwogCiAgICAgICBMTF9MUFRJTV9DbGVhckZsYWdfQ01QT0soTFBUSU14KTsKICAgICB9CkBAIC0yNjQsMTEgKzI1OCwxMyBAQAogICAgICAgZG8KICAgICAgIHsKICAgICAgICAgcmNjX2Nsb2NrLlNZU0NMS19GcmVxdWVuY3ktLTsgLyogVXNlZCBmb3IgdGltZW91dCAqLwotICAgICAgfSB3aGlsZSAoKChMTF9MUFRJTV9Jc0FjdGl2ZUZsYWdfQVJST0soTFBUSU14KSAhPSAxVUwpKSAmJiAoKHJjY19jbG9jay5TWVNDTEtfRnJlcXVlbmN5KSA+IDBVTCkpOworICAgICAgfQorICAgICAgd2hpbGUgKCgoTExfTFBUSU1fSXNBY3RpdmVGbGFnX0FSUk9LKExQVElNeCkgIT0gMVVMKSkgJiYgKChyY2NfY2xvY2suU1lTQ0xLX0ZyZXF1ZW5jeSkgPiAwVUwpKTsKIAogICAgICAgTExfTFBUSU1fQ2xlYXJGbGFnX0FSUk9LKExQVElNeCk7CiAgICAgfQogCisKICAgICAvKiBSZXN0b3JlIExQVElNIHNvdXJjZSBrZXJuZWwgY2xvY2sgKi8KICAgICBMTF9SQ0NfU2V0TFBUSU1DbG9ja1NvdXJjZSh0bXBjbGtzb3VyY2UpOwogICB9CkBAIC0yODYsNiArMjgyLDE0IEBACiAgICogQH0KICAgKi8KIAorLyoqCisgICogQH0KKyAgKi8KKworLyoqCisgICogQH0KKyAgKi8KKwogCiAKIC8qKgpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZzR4eF9sbF90aW0uYyBiL1NyYy9zdG0zMmc0eHhfbGxfdGltLmMKaW5kZXggZTNlNWY0OS4uZjZmNDJkYSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZzR4eF9sbF90aW0uYworKysgYi9TcmMvc3RtMzJnNHh4X2xsX3RpbS5jCkBAIC0zMjAsNyArMzIwLDcgQEAKICAgVElNX0luaXRTdHJ1Y3QtPkNvdW50ZXJNb2RlICAgICAgID0gTExfVElNX0NPVU5URVJNT0RFX1VQOwogICBUSU1fSW5pdFN0cnVjdC0+QXV0b3JlbG9hZCAgICAgICAgPSAweEZGRkZGRkZGVTsKICAgVElNX0luaXRTdHJ1Y3QtPkNsb2NrRGl2aXNpb24gICAgID0gTExfVElNX0NMT0NLRElWSVNJT05fRElWMTsKLSAgVElNX0luaXRTdHJ1Y3QtPlJlcGV0aXRpb25Db3VudGVyID0gKHVpbnQ4X3QpMHgwMDsKKyAgVElNX0luaXRTdHJ1Y3QtPlJlcGV0aXRpb25Db3VudGVyID0gMHgwMDAwMDAwMFU7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZzR4eF9sbF91c2IuYyBiL1NyYy9zdG0zMmc0eHhfbGxfdXNiLmMKaW5kZXggZjJjZWY1YS4uOWMzNzFmZCAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZzR4eF9sbF91c2IuYworKysgYi9TcmMvc3RtMzJnNHh4X2xsX3VzYi5jCkBAIC04Myw3ICs4Myw3IEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBVU0JfRW5hYmxlR2xvYmFsSW50KFVTQl9UeXBlRGVmICpVU0J4KQogewotICB1aW50MTZfdCB3aW50ZXJydXB0bWFzazsKKyAgdWludDMyX3Qgd2ludGVycnVwdG1hc2s7CiAKICAgLyogU2V0IHdpbnRlcnJ1cHRtYXNrIHZhcmlhYmxlICovCiAgIHdpbnRlcnJ1cHRtYXNrID0gVVNCX0NOVFJfQ1RSTSAgfCBVU0JfQ05UUl9XS1VQTSB8CkBAIC05Miw3ICs5Miw3IEBACiAgICAgICAgICAgICAgICAgICAgVVNCX0NOVFJfUkVTRVRNIHwgVVNCX0NOVFJfTDFSRVFNOwogCiAgIC8qIFNldCBpbnRlcnJ1cHQgbWFzayAqLwotICBVU0J4LT5DTlRSIHw9IHdpbnRlcnJ1cHRtYXNrOworICBVU0J4LT5DTlRSIHw9ICh1aW50MTZfdCl3aW50ZXJydXB0bWFzazsKIAogICByZXR1cm4gSEFMX09LOwogfQpAQCAtMTA1LDcgKzEwNSw3IEBACiAqLwogSEFMX1N0YXR1c1R5cGVEZWYgVVNCX0Rpc2FibGVHbG9iYWxJbnQoVVNCX1R5cGVEZWYgKlVTQngpCiB7Ci0gIHVpbnQxNl90IHdpbnRlcnJ1cHRtYXNrOworICB1aW50MzJfdCB3aW50ZXJydXB0bWFzazsKIAogICAvKiBTZXQgd2ludGVycnVwdG1hc2sgdmFyaWFibGUgKi8KICAgd2ludGVycnVwdG1hc2sgPSBVU0JfQ05UUl9DVFJNICB8IFVTQl9DTlRSX1dLVVBNIHwKQEAgLTExNCw3ICsxMTQsNyBAQAogICAgICAgICAgICAgICAgICAgIFVTQl9DTlRSX1JFU0VUTSB8IFVTQl9DTlRSX0wxUkVRTTsKIAogICAvKiBDbGVhciBpbnRlcnJ1cHQgbWFzayAqLwotICBVU0J4LT5DTlRSICY9IH53aW50ZXJydXB0bWFzazsKKyAgVVNCeC0+Q05UUiAmPSAodWludDE2X3QpKH53aW50ZXJydXB0bWFzayk7CiAKICAgcmV0dXJuIEhBTF9PSzsKIH0KQEAgLTE1NSwxMyArMTU1LDEzIEBACiAKICAgLyogSW5pdCBEZXZpY2UgKi8KICAgLypDTlRSX0ZSRVMgPSAxKi8KLSAgVVNCeC0+Q05UUiA9IFVTQl9DTlRSX0ZSRVM7CisgIFVTQngtPkNOVFIgPSAodWludDE2X3QpVVNCX0NOVFJfRlJFUzsKIAogICAvKkNOVFJfRlJFUyA9IDAqLwotICBVU0J4LT5DTlRSID0gMDsKKyAgVVNCeC0+Q05UUiA9IDBVOwogCiAgIC8qQ2xlYXIgcGVuZGluZyBpbnRlcnJ1cHRzKi8KLSAgVVNCeC0+SVNUUiA9IDA7CisgIFVTQngtPklTVFIgPSAwVTsKIAogICAvKlNldCBCdGFibGUgQWRkcmVzcyovCiAgIFVTQngtPkJUQUJMRSA9IEJUQUJMRV9BRERSRVNTOwpAQCAtMjcwLDcgKzI3MCw3IEBACiAgICAgICBicmVhazsKICAgfQogCi0gIFBDRF9TRVRfRU5EUE9JTlQoVVNCeCwgZXAtPm51bSwgd0VwUmVnVmFsIHwgVVNCX0VQX0NUUl9SWCB8IFVTQl9FUF9DVFJfVFgpOworICBQQ0RfU0VUX0VORFBPSU5UKFVTQngsIGVwLT5udW0sICh3RXBSZWdWYWwgfCBVU0JfRVBfQ1RSX1JYIHwgVVNCX0VQX0NUUl9UWCkpOwogCiAgIFBDRF9TRVRfRVBfQUREUkVTUyhVU0J4LCBlcC0+bnVtLCBlcC0+bnVtKTsKIApAQCAtNTkxLDEzICs1OTEsMTMgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIFVTQl9TdG9wRGV2aWNlKFVTQl9UeXBlRGVmICpVU0J4KQogewogICAvKiBkaXNhYmxlIGFsbCBpbnRlcnJ1cHRzIGFuZCBmb3JjZSBVU0IgcmVzZXQgKi8KLSAgVVNCeC0+Q05UUiA9IFVTQl9DTlRSX0ZSRVM7CisgIFVTQngtPkNOVFIgPSAodWludDE2X3QpVVNCX0NOVFJfRlJFUzsKIAogICAvKiBjbGVhciBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyICovCi0gIFVTQngtPklTVFIgPSAwOworICBVU0J4LT5JU1RSID0gMFU7CiAKICAgLyogc3dpdGNoLW9mZiBkZXZpY2UgKi8KLSAgVVNCeC0+Q05UUiA9IChVU0JfQ05UUl9GUkVTIHwgVVNCX0NOVFJfUERXTik7CisgIFVTQngtPkNOVFIgPSAodWludDE2X3QpKFVTQl9DTlRSX0ZSRVMgfCBVU0JfQ05UUl9QRFdOKTsKIAogICByZXR1cm4gSEFMX09LOwogfQpAQCAtNjE0LDcgKzYxNCw3IEBACiAgIGlmIChhZGRyZXNzID09IDBVKQogICB7CiAgICAgLyogc2V0IGRldmljZSBhZGRyZXNzIGFuZCBlbmFibGUgZnVuY3Rpb24gKi8KLSAgICBVU0J4LT5EQUREUiA9IFVTQl9EQUREUl9FRjsKKyAgICBVU0J4LT5EQUREUiA9ICh1aW50MTZfdClVU0JfREFERFJfRUY7CiAgIH0KIAogICByZXR1cm4gSEFMX09LOwpAQCAtNjI4LDcgKzYyOCw3IEBACiBIQUxfU3RhdHVzVHlwZURlZiAgVVNCX0RldkNvbm5lY3QoVVNCX1R5cGVEZWYgKlVTQngpCiB7CiAgIC8qIEVuYWJsaW5nIERQIFB1bGwtVVAgYml0IHRvIENvbm5lY3QgaW50ZXJuYWwgUFUgcmVzaXN0b3Igb24gVVNCIERQIGxpbmUgKi8KLSAgVVNCeC0+QkNEUiB8PSBVU0JfQkNEUl9EUFBVOworICBVU0J4LT5CQ0RSIHw9ICh1aW50MTZfdClVU0JfQkNEUl9EUFBVOwogCiAgIHJldHVybiBIQUxfT0s7CiB9CkBAIC03NzEsNyArNzcxLDcgQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIFVTQl9BY3RpdmF0ZVJlbW90ZVdha2V1cChVU0JfVHlwZURlZiAqVVNCeCkKIHsKLSAgVVNCeC0+Q05UUiB8PSBVU0JfQ05UUl9SRVNVTUU7CisgIFVTQngtPkNOVFIgfD0gKHVpbnQxNl90KVVTQl9DTlRSX1JFU1VNRTsKIAogICByZXR1cm4gSEFMX09LOwogfQpAQCAtNzgzLDcgKzc4Myw3IEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBVU0JfRGVBY3RpdmF0ZVJlbW90ZVdha2V1cChVU0JfVHlwZURlZiAqVVNCeCkKIHsKLSAgVVNCeC0+Q05UUiAmPSB+KFVTQl9DTlRSX1JFU1VNRSk7CisgIFVTQngtPkNOVFIgJj0gKHVpbnQxNl90KSh+VVNCX0NOVFJfUkVTVU1FKTsKICAgcmV0dXJuIEhBTF9PSzsKIH0KIApkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZzR4eF9sbF91dGlscy5jIGIvU3JjL3N0bTMyZzR4eF9sbF91dGlscy5jCmluZGV4IGVhNzg5NDkuLmY2Y2JiOTIgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmc0eHhfbGxfdXRpbHMuYworKysgYi9TcmMvc3RtMzJnNHh4X2xsX3V0aWxzLmMKQEAgLTE0Miw3ICsxNDIsNiBAQAogICAqLwogc3RhdGljIHVpbnQzMl90ICAgIFVUSUxTX0dldFBMTE91dHB1dEZyZXF1ZW5jeSh1aW50MzJfdCBQTExfSW5wdXRGcmVxdWVuY3ksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExMX1VUSUxTX1BMTEluaXRUeXBlRGVmICpVVElMU19QTExJbml0U3RydWN0KTsKLXN0YXRpYyBFcnJvclN0YXR1cyBVVElMU19TZXRGbGFzaExhdGVuY3kodWludDMyX3QgSENMS19GcmVxdWVuY3kpOwogc3RhdGljIEVycm9yU3RhdHVzIFVUSUxTX0VuYWJsZVBMTEFuZFN3aXRjaFN5c3RlbSh1aW50MzJfdCBTWVNDTEtfRnJlcXVlbmN5LCBMTF9VVElMU19DbGtJbml0VHlwZURlZiAqVVRJTFNfQ2xrSW5pdFN0cnVjdCk7CiBzdGF0aWMgRXJyb3JTdGF0dXMgVVRJTFNfUExMX0lzQnVzeSh2b2lkKTsKIC8qKgpAQCAtMjY5LDYgKzI2OCwxMTggQEAKIH0KIAogLyoqCisgICogQGJyaWVmICBVcGRhdGUgbnVtYmVyIG9mIEZsYXNoIHdhaXQgc3RhdGVzIGluIGxpbmUgd2l0aCBuZXcgZnJlcXVlbmN5IGFuZCBjdXJyZW50CisgICAgICAgICAgICB2b2x0YWdlIHJhbmdlLgorICAqIEBwYXJhbSAgSENMS0ZyZXF1ZW5jeSAgSENMSyBmcmVxdWVuY3kKKyAgKiBAcmV0dmFsIEFuIEVycm9yU3RhdHVzIGVudW1lcmF0aW9uIHZhbHVlOgorICAqICAgICAgICAgIC0gU1VDQ0VTUzogTGF0ZW5jeSBoYXMgYmVlbiBtb2RpZmllZAorICAqICAgICAgICAgIC0gRVJST1I6IExhdGVuY3kgY2Fubm90IGJlIG1vZGlmaWVkCisgICovCitFcnJvclN0YXR1cyBMTF9TZXRGbGFzaExhdGVuY3kodWludDMyX3QgSENMS0ZyZXF1ZW5jeSkKK3sKKyAgdWludDMyX3QgdGltZW91dDsKKyAgdWludDMyX3QgZ2V0bGF0ZW5jeTsKKyAgRXJyb3JTdGF0dXMgc3RhdHVzID0gU1VDQ0VTUzsKKworICB1aW50MzJfdCBsYXRlbmN5ID0gTExfRkxBU0hfTEFURU5DWV8wOyAgLyogZGVmYXVsdCB2YWx1ZSAwV1MgKi8KKworICAvKiBGcmVxdWVuY3kgY2Fubm90IGJlIGVxdWFsIHRvIDAgb3IgZ3JlYXRlciB0aGFuIG1heCBjbG9jayAqLworICBpZigoSENMS0ZyZXF1ZW5jeSA9PSAwVSkgfHwgKEhDTEtGcmVxdWVuY3kgPiBVVElMU19TQ0FMRTFfTEFURU5DWTlfRlJFUSkpCisgIHsKKyAgICBzdGF0dXMgPSBFUlJPUjsKKyAgfQorICBlbHNlCisgIHsKKyAgICBpZihMTF9QV1JfR2V0UmVndWxWb2x0YWdlU2NhbGluZygpID09IExMX1BXUl9SRUdVX1ZPTFRBR0VfU0NBTEUxKQorICAgIHsKKyAgICAgIGlmKEhDTEtGcmVxdWVuY3kgPiBVVElMU19TQ0FMRTFfTEFURU5DWThfRlJFUSkKKyAgICAgIHsKKyAgICAgICAgLyogMTYwIDwgSENMSyA8PSAxNzAgPT4gOFdTICg5IENQVSBjeWNsZXMpICovCisgICAgICAgIGxhdGVuY3kgPSBMTF9GTEFTSF9MQVRFTkNZXzg7CisgICAgICB9CisgICAgICBlbHNlIGlmKEhDTEtGcmVxdWVuY3kgPiBVVElMU19TQ0FMRTFfTEFURU5DWTdfRlJFUSkKKyAgICAgIHsKKyAgICAgICAgLyogMTQwIDwgSENMSyA8PSAxNjAgPT4gN1dTICg4IENQVSBjeWNsZXMpICovCisgICAgICAgIGxhdGVuY3kgPSBMTF9GTEFTSF9MQVRFTkNZXzc7CisgICAgICB9CisgICAgICBlbHNlIGlmKEhDTEtGcmVxdWVuY3kgPiBVVElMU19TQ0FMRTFfTEFURU5DWTZfRlJFUSkKKyAgICAgIHsKKyAgICAgICAgLyogMTIwIDwgSENMSyA8PSAxNDAgPT4gNldTICg3IENQVSBjeWNsZXMpICovCisgICAgICAgIGxhdGVuY3kgPSBMTF9GTEFTSF9MQVRFTkNZXzY7CisgICAgICB9CisgICAgICBlbHNlIGlmKEhDTEtGcmVxdWVuY3kgPiBVVElMU19TQ0FMRTFfTEFURU5DWTVfRlJFUSkKKyAgICAgIHsKKyAgICAgICAgLyogMTAwIDwgSENMSyA8PSAxMjAgPT4gNVdTICg2IENQVSBjeWNsZXMpICovCisgICAgICAgIGxhdGVuY3kgPSBMTF9GTEFTSF9MQVRFTkNZXzU7CisgICAgICB9CisgICAgICBlbHNlIGlmKEhDTEtGcmVxdWVuY3kgPiBVVElMU19TQ0FMRTFfTEFURU5DWTRfRlJFUSkKKyAgICAgIHsKKyAgICAgICAgLyogODAgPCBIQ0xLIDw9IDEwMCA9PiA0V1MgKDUgQ1BVIGN5Y2xlcykgKi8KKyAgICAgICAgbGF0ZW5jeSA9IExMX0ZMQVNIX0xBVEVOQ1lfNDsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYoSENMS0ZyZXF1ZW5jeSA+IFVUSUxTX1NDQUxFMV9MQVRFTkNZM19GUkVRKQorICAgICAgeworICAgICAgICAvKiA2MCA8IEhDTEsgPD0gODAgPT4gM1dTICg0IENQVSBjeWNsZXMpICovCisgICAgICAgIGxhdGVuY3kgPSBMTF9GTEFTSF9MQVRFTkNZXzM7CisgICAgICB9CisgICAgICBlbHNlIGlmKEhDTEtGcmVxdWVuY3kgPiBVVElMU19TQ0FMRTFfTEFURU5DWTJfRlJFUSkKKyAgICAgIHsKKyAgICAgICAgLyogNDAgPCBIQ0xLIDw9IDYwID0+IDJXUyAoMyBDUFUgY3ljbGVzKSAqLworICAgICAgICBsYXRlbmN5ID0gTExfRkxBU0hfTEFURU5DWV8yOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBpZihIQ0xLRnJlcXVlbmN5ID4gVVRJTFNfU0NBTEUxX0xBVEVOQ1kxX0ZSRVEpCisgICAgICAgIHsKKyAgICAgICAgICAvKiAyMCA8IEhDTEsgPD0gNDAgPT4gMVdTICgyIENQVSBjeWNsZXMpICovCisgICAgICAgICAgbGF0ZW5jeSA9IExMX0ZMQVNIX0xBVEVOQ1lfMTsKKyAgICAgICAgfQorICAgICAgICAvKiBlbHNlIEhDTEtGcmVxdWVuY3kgPD0gMTBNSHogZGVmYXVsdCBMTF9GTEFTSF9MQVRFTkNZXzAgMFdTICovCisgICAgICB9CisgICAgfQorICAgIGVsc2UgLyogU0NBTEUyICovCisgICAgeworICAgICAgaWYoSENMS0ZyZXF1ZW5jeSA+IFVUSUxTX1NDQUxFMl9MQVRFTkNZMl9GUkVRKQorICAgICAgeworICAgICAgICAvKiAxNiA8IEhDTEsgPD0gMjYgPT4gMldTICgzIENQVSBjeWNsZXMpICovCisgICAgICAgIGxhdGVuY3kgPSBMTF9GTEFTSF9MQVRFTkNZXzI7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIGlmKEhDTEtGcmVxdWVuY3kgPiBVVElMU19TQ0FMRTJfTEFURU5DWTFfRlJFUSkKKyAgICAgICAgeworICAgICAgICAgIC8qIDggPCBIQ0xLIDw9IDE2ID0+IDFXUyAoMiBDUFUgY3ljbGVzKSAqLworICAgICAgICAgIGxhdGVuY3kgPSBMTF9GTEFTSF9MQVRFTkNZXzE7CisgICAgICAgIH0KKyAgICAgICAgLyogZWxzZSBIQ0xLRnJlcXVlbmN5IDw9IDhNSHogZGVmYXVsdCBMTF9GTEFTSF9MQVRFTkNZXzAgMFdTICovCisgICAgICB9CisgICAgfQorCisgICAgaWYgKHN0YXR1cyAhPSBFUlJPUikKKyAgICB7CisgICAgICBMTF9GTEFTSF9TZXRMYXRlbmN5KGxhdGVuY3kpOworCisgICAgICAvKiBDaGVjayB0aGF0IHRoZSBuZXcgbnVtYmVyIG9mIHdhaXQgc3RhdGVzIGlzIHRha2VuIGludG8gYWNjb3VudCB0byBhY2Nlc3MgdGhlIEZsYXNoCisgICAgICAgICBtZW1vcnkgYnkgcmVhZGluZyB0aGUgRkxBU0hfQUNSIHJlZ2lzdGVyICovCisgICAgICB0aW1lb3V0ID0gMlU7CisgICAgICBkbworICAgICAgeworICAgICAgICAvKiBXYWl0IGZvciBGbGFzaCBsYXRlbmN5IHRvIGJlIHVwZGF0ZWQgKi8KKyAgICAgICAgZ2V0bGF0ZW5jeSA9IExMX0ZMQVNIX0dldExhdGVuY3koKTsKKyAgICAgICAgdGltZW91dC0tOworICAgICAgfSB3aGlsZSAoKGdldGxhdGVuY3kgIT0gbGF0ZW5jeSkgJiYgKHRpbWVvdXQgPiAwVSkpOworCisgICAgICBpZihnZXRsYXRlbmN5ICE9IGxhdGVuY3kpCisgICAgICB7CisgICAgICAgIHN0YXR1cyA9IEVSUk9SOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiBzdGF0dXM7Cit9CisKKy8qKgogICAqIEBicmllZiAgVGhpcyBmdW5jdGlvbiBjb25maWd1cmVzIHN5c3RlbSBjbG9jayBhdCBtYXhpbXVtIGZyZXF1ZW5jeSB3aXRoIEhTSSBhcyBjbG9jayBzb3VyY2Ugb2YgdGhlIFBMTAogICAqIEBub3RlICAgVGhlIGFwcGxpY2F0aW9uIG5lZWQgdG8gZW5zdXJlIHRoYXQgUExMIGlzIGRpc2FibGVkLgogICAqIEBub3RlICAgRnVuY3Rpb24gaXMgYmFzZWQgb24gdGhlIGZvbGxvd2luZyBmb3JtdWxhOgpAQCAtMjg5LDcgKzQwMCw3IEBACiB7CiAgIEVycm9yU3RhdHVzIHN0YXR1czsKICAgdWludDMyX3QgcGxsZnJlcTsKLSAgdWludDMyX3QgaHByZSA9IDBVOworICB1aW50MzJfdCBocHJlID0gTExfUkNDX1NZU0NMS19ESVZfMTsKIAogICAvKiBDaGVjayBpZiBvbmUgb2YgdGhlIFBMTCBpcyBlbmFibGVkICovCiAgIGlmKFVUSUxTX1BMTF9Jc0J1c3koKSA9PSBTVUNDRVNTKQpAQCAtMzE0LDEwICs0MjUsMTAgQEAKICAgICAvKiBQcmV2ZW50IHVuZGVyc2hvb3QgYXQgaGlnaGVzdCBmcmVxdWVuY3kgYnkgYXBwbHlpbmcgaW50ZXJtZWRpYXRlIEFIQiBwcmVzY2FsZXIgMiAqLwogICAgIGlmKHBsbGZyZXEgPiA4MDAwMDAwMFUpCiAgICAgewotICAgICAgaHByZSA9IFVUSUxTX0Nsa0luaXRTdHJ1Y3QtPkFIQkNMS0RpdmlkZXI7Ci0gICAgICBpZihocHJlID09IExMX1JDQ19TWVNDTEtfRElWXzEpCisgICAgICBpZiAoVVRJTFNfQ2xrSW5pdFN0cnVjdC0+QUhCQ0xLRGl2aWRlciA9PSBMTF9SQ0NfU1lTQ0xLX0RJVl8xKQogICAgICAgewogICAgICAgICBVVElMU19DbGtJbml0U3RydWN0LT5BSEJDTEtEaXZpZGVyID0gTExfUkNDX1NZU0NMS19ESVZfMjsKKyAgICAgICAgaHByZSA9IExMX1JDQ19TWVNDTEtfRElWXzI7CiAgICAgICB9CiAgICAgfQogCkBAIC0zMjUsMTAgKzQzNiwxNiBAQAogICAgIHN0YXR1cyA9IFVUSUxTX0VuYWJsZVBMTEFuZFN3aXRjaFN5c3RlbShwbGxmcmVxLCBVVElMU19DbGtJbml0U3RydWN0KTsKIAogICAgIC8qIEFwcGx5IGRlZmluaXRpdmUgQUhCIHByZXNjYWxlciB2YWx1ZSBpZiBuZWNlc3NhcnkgKi8KLSAgICBpZigoc3RhdHVzID09IFNVQ0NFU1MpICYmIChocHJlICE9IDBVKSkKKyAgICBpZiAoKHN0YXR1cyA9PSBTVUNDRVNTKSAmJiAoaHByZSAhPSBMTF9SQ0NfU1lTQ0xLX0RJVl8xKSkKICAgICB7Ci0gICAgICBVVElMU19DbGtJbml0U3RydWN0LT5BSEJDTEtEaXZpZGVyID0gTExfUkNDX1NZU0NMS19ESVZfMTsKLSAgICAgIExMX1JDQ19TZXRBSEJQcmVzY2FsZXIoVVRJTFNfQ2xrSW5pdFN0cnVjdC0+QUhCQ0xLRGl2aWRlcik7CisgICAgICAvKiBTZXQgRkxBU0ggbGF0ZW5jeSB0byBoaWdoZXN0IGxhdGVuY3kgKi8KKyAgICAgIHN0YXR1cyA9IExMX1NldEZsYXNoTGF0ZW5jeShwbGxmcmVxKTsKKyAgICAgIGlmIChzdGF0dXMgPT0gU1VDQ0VTUykKKyAgICAgIHsKKyAgICAgICAgVVRJTFNfQ2xrSW5pdFN0cnVjdC0+QUhCQ0xLRGl2aWRlciA9IExMX1JDQ19TWVNDTEtfRElWXzE7CisgICAgICAgIExMX1JDQ19TZXRBSEJQcmVzY2FsZXIoVVRJTFNfQ2xrSW5pdFN0cnVjdC0+QUhCQ0xLRGl2aWRlcik7CisgICAgICAgIExMX1NldFN5c3RlbUNvcmVDbG9jayhwbGxmcmVxKTsKKyAgICAgIH0KICAgICB9CiAgIH0KICAgZWxzZQpAQCAtMzY1LDcgKzQ4Miw3IEBACiB7CiAgIEVycm9yU3RhdHVzIHN0YXR1czsKICAgdWludDMyX3QgcGxsZnJlcTsKLSAgdWludDMyX3QgaHByZSA9IDBVOworICB1aW50MzJfdCBocHJlID0gTExfUkNDX1NZU0NMS19ESVZfMTsKIAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfTExfVVRJTFNfSFNFX0ZSRVFVRU5DWShIU0VGcmVxdWVuY3kpKTsKQEAgLTQwNSwxMCArNTIyLDEwIEBACiAgICAgLyogUHJldmVudCB1bmRlcnNob290IGF0IGhpZ2hlc3QgZnJlcXVlbmN5IGJ5IGFwcGx5aW5nIGludGVybWVkaWF0ZSBBSEIgcHJlc2NhbGVyIDIgKi8KICAgICBpZihwbGxmcmVxID4gODAwMDAwMDBVKQogICAgIHsKLSAgICAgIGhwcmUgPSBVVElMU19DbGtJbml0U3RydWN0LT5BSEJDTEtEaXZpZGVyOwotICAgICAgaWYoaHByZSA9PSBMTF9SQ0NfU1lTQ0xLX0RJVl8xKQorICAgICAgaWYgKFVUSUxTX0Nsa0luaXRTdHJ1Y3QtPkFIQkNMS0RpdmlkZXIgPT0gTExfUkNDX1NZU0NMS19ESVZfMSkKICAgICAgIHsKICAgICAgICAgVVRJTFNfQ2xrSW5pdFN0cnVjdC0+QUhCQ0xLRGl2aWRlciA9IExMX1JDQ19TWVNDTEtfRElWXzI7CisgICAgICAgIGhwcmUgPSBMTF9SQ0NfU1lTQ0xLX0RJVl8yOwogICAgICAgfQogICAgIH0KIApAQCAtNDE2LDEwICs1MzMsMTYgQEAKICAgICBzdGF0dXMgPSBVVElMU19FbmFibGVQTExBbmRTd2l0Y2hTeXN0ZW0ocGxsZnJlcSwgVVRJTFNfQ2xrSW5pdFN0cnVjdCk7CiAKICAgICAvKiBBcHBseSBkZWZpbml0aXZlIEFIQiBwcmVzY2FsZXIgdmFsdWUgaWYgbmVjZXNzYXJ5ICovCi0gICAgaWYoKHN0YXR1cyA9PSBTVUNDRVNTKSAmJiAoaHByZSAhPSAwVSkpCisgICAgaWYgKChzdGF0dXMgPT0gU1VDQ0VTUykgJiYgKGhwcmUgIT0gTExfUkNDX1NZU0NMS19ESVZfMSkpCiAgICAgewotICAgICAgVVRJTFNfQ2xrSW5pdFN0cnVjdC0+QUhCQ0xLRGl2aWRlciA9IExMX1JDQ19TWVNDTEtfRElWXzE7Ci0gICAgICBMTF9SQ0NfU2V0QUhCUHJlc2NhbGVyKFVUSUxTX0Nsa0luaXRTdHJ1Y3QtPkFIQkNMS0RpdmlkZXIpOworICAgICAgLyogU2V0IEZMQVNIIGxhdGVuY3kgdG8gaGlnaGVzdCBsYXRlbmN5ICovCisgICAgICBzdGF0dXMgPSBMTF9TZXRGbGFzaExhdGVuY3kocGxsZnJlcSk7CisgICAgICBpZiAoc3RhdHVzID09IFNVQ0NFU1MpCisgICAgICB7CisgICAgICAgIFVUSUxTX0Nsa0luaXRTdHJ1Y3QtPkFIQkNMS0RpdmlkZXIgPSBMTF9SQ0NfU1lTQ0xLX0RJVl8xOworICAgICAgICBMTF9SQ0NfU2V0QUhCUHJlc2NhbGVyKFVUSUxTX0Nsa0luaXRTdHJ1Y3QtPkFIQkNMS0RpdmlkZXIpOworICAgICAgICBMTF9TZXRTeXN0ZW1Db3JlQ2xvY2socGxsZnJlcSk7CisgICAgICB9CiAgICAgfQogICB9CiAgIGVsc2UKQEAgLTQ0MiwxMDMgKzU2NSw2IEBACiAvKiogQGFkZHRvZ3JvdXAgVVRJTFNfTExfUHJpdmF0ZV9GdW5jdGlvbnMKICAgKiBAewogICAqLwotLyoqCi0gICogQGJyaWVmICBVcGRhdGUgbnVtYmVyIG9mIEZsYXNoIHdhaXQgc3RhdGVzIGluIGxpbmUgd2l0aCBuZXcgZnJlcXVlbmN5IGFuZCBjdXJyZW50Ci0gICAgICAgICAgICB2b2x0YWdlIHJhbmdlLgotICAqIEBwYXJhbSAgSENMS19GcmVxdWVuY3kgIEhDTEsgZnJlcXVlbmN5Ci0gICogQHJldHZhbCBBbiBFcnJvclN0YXR1cyBlbnVtZXJhdGlvbiB2YWx1ZToKLSAgKiAgICAgICAgICAtIFNVQ0NFU1M6IExhdGVuY3kgaGFzIGJlZW4gbW9kaWZpZWQKLSAgKiAgICAgICAgICAtIEVSUk9SOiBMYXRlbmN5IGNhbm5vdCBiZSBtb2RpZmllZAotICAqLwotc3RhdGljIEVycm9yU3RhdHVzIFVUSUxTX1NldEZsYXNoTGF0ZW5jeSh1aW50MzJfdCBIQ0xLX0ZyZXF1ZW5jeSkKLXsKLSAgRXJyb3JTdGF0dXMgc3RhdHVzID0gU1VDQ0VTUzsKLQotICB1aW50MzJfdCBsYXRlbmN5ID0gTExfRkxBU0hfTEFURU5DWV8wOyAgLyogZGVmYXVsdCB2YWx1ZSAwV1MgKi8KLQotICAvKiBGcmVxdWVuY3kgY2Fubm90IGJlIGVxdWFsIHRvIDAgKi8KLSAgaWYoSENMS19GcmVxdWVuY3kgPT0gMFUpCi0gIHsKLSAgICBzdGF0dXMgPSBFUlJPUjsKLSAgfQotICBlbHNlCi0gIHsKLSAgICBpZihMTF9QV1JfR2V0UmVndWxWb2x0YWdlU2NhbGluZygpID09IExMX1BXUl9SRUdVX1ZPTFRBR0VfU0NBTEUxKQotICAgIHsKLSAgICAgIGlmKEhDTEtfRnJlcXVlbmN5ID4gVVRJTFNfU0NBTEUxX0xBVEVOQ1k4X0ZSRVEpCi0gICAgICB7Ci0gICAgICAgIC8qIDE2MCA8IEhDTEsgPD0gMTcwID0+IDhXUyAoOSBDUFUgY3ljbGVzKSAqLwotICAgICAgICBsYXRlbmN5ID0gTExfRkxBU0hfTEFURU5DWV84OwotICAgICAgfQotICAgICAgZWxzZSBpZihIQ0xLX0ZyZXF1ZW5jeSA+IFVUSUxTX1NDQUxFMV9MQVRFTkNZN19GUkVRKQotICAgICAgewotICAgICAgICAvKiAxNDAgPCBIQ0xLIDw9IDE2MCA9PiA3V1MgKDggQ1BVIGN5Y2xlcykgKi8KLSAgICAgICAgbGF0ZW5jeSA9IExMX0ZMQVNIX0xBVEVOQ1lfNzsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYoSENMS19GcmVxdWVuY3kgPiBVVElMU19TQ0FMRTFfTEFURU5DWTZfRlJFUSkKLSAgICAgIHsKLSAgICAgICAgLyogMTIwIDwgSENMSyA8PSAxNDAgPT4gNldTICg3IENQVSBjeWNsZXMpICovCi0gICAgICAgIGxhdGVuY3kgPSBMTF9GTEFTSF9MQVRFTkNZXzY7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmKEhDTEtfRnJlcXVlbmN5ID4gVVRJTFNfU0NBTEUxX0xBVEVOQ1k1X0ZSRVEpCi0gICAgICB7Ci0gICAgICAgIC8qIDEwMCA8IEhDTEsgPD0gMTIwID0+IDVXUyAoNiBDUFUgY3ljbGVzKSAqLwotICAgICAgICBsYXRlbmN5ID0gTExfRkxBU0hfTEFURU5DWV81OwotICAgICAgfQotICAgICAgZWxzZSBpZihIQ0xLX0ZyZXF1ZW5jeSA+IFVUSUxTX1NDQUxFMV9MQVRFTkNZNF9GUkVRKQotICAgICAgewotICAgICAgICAvKiA4MCA8IEhDTEsgPD0gMTAwID0+IDRXUyAoNSBDUFUgY3ljbGVzKSAqLwotICAgICAgICBsYXRlbmN5ID0gTExfRkxBU0hfTEFURU5DWV80OwotICAgICAgfQotICAgICAgZWxzZSBpZihIQ0xLX0ZyZXF1ZW5jeSA+IFVUSUxTX1NDQUxFMV9MQVRFTkNZM19GUkVRKQotICAgICAgewotICAgICAgICAvKiA2MCA8IEhDTEsgPD0gODAgPT4gM1dTICg0IENQVSBjeWNsZXMpICovCi0gICAgICAgIGxhdGVuY3kgPSBMTF9GTEFTSF9MQVRFTkNZXzM7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmKEhDTEtfRnJlcXVlbmN5ID4gVVRJTFNfU0NBTEUxX0xBVEVOQ1kyX0ZSRVEpCi0gICAgICB7Ci0gICAgICAgIC8qIDQwIDwgSENMSyA8PSA2MCA9PiAyV1MgKDMgQ1BVIGN5Y2xlcykgKi8KLSAgICAgICAgbGF0ZW5jeSA9IExMX0ZMQVNIX0xBVEVOQ1lfMjsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgaWYoSENMS19GcmVxdWVuY3kgPiBVVElMU19TQ0FMRTFfTEFURU5DWTFfRlJFUSkKLSAgICAgICAgewotICAgICAgICAgIC8qIDIwIDwgSENMSyA8PSA0MCA9PiAxV1MgKDIgQ1BVIGN5Y2xlcykgKi8KLSAgICAgICAgICBsYXRlbmN5ID0gTExfRkxBU0hfTEFURU5DWV8xOwotICAgICAgICB9Ci0gICAgICAgIC8qIGVsc2UgSENMS19GcmVxdWVuY3kgPD0gMTBNSHogZGVmYXVsdCBMTF9GTEFTSF9MQVRFTkNZXzAgMFdTICovCi0gICAgICB9Ci0gICAgfQotICAgIGVsc2UgLyogU0NBTEUyICovCi0gICAgewotICAgICAgaWYoSENMS19GcmVxdWVuY3kgPiBVVElMU19TQ0FMRTJfTEFURU5DWTJfRlJFUSkKLSAgICAgIHsKLSAgICAgICAgLyogMTYgPCBIQ0xLIDw9IDI2ID0+IDJXUyAoMyBDUFUgY3ljbGVzKSAqLwotICAgICAgICBsYXRlbmN5ID0gTExfRkxBU0hfTEFURU5DWV8yOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBpZihIQ0xLX0ZyZXF1ZW5jeSA+IFVUSUxTX1NDQUxFMl9MQVRFTkNZMV9GUkVRKQotICAgICAgICB7Ci0gICAgICAgICAgLyogOCA8IEhDTEsgPD0gMTYgPT4gMVdTICgyIENQVSBjeWNsZXMpICovCi0gICAgICAgICAgbGF0ZW5jeSA9IExMX0ZMQVNIX0xBVEVOQ1lfMTsKLSAgICAgICAgfQotICAgICAgICAvKiBlbHNlIEhDTEtfRnJlcXVlbmN5IDw9IDhNSHogZGVmYXVsdCBMTF9GTEFTSF9MQVRFTkNZXzAgMFdTICovCi0gICAgICB9Ci0gICAgfQotCi0gICAgTExfRkxBU0hfU2V0TGF0ZW5jeShsYXRlbmN5KTsKLQotICAgIC8qIENoZWNrIHRoYXQgdGhlIG5ldyBudW1iZXIgb2Ygd2FpdCBzdGF0ZXMgaXMgdGFrZW4gaW50byBhY2NvdW50IHRvIGFjY2VzcyB0aGUgRmxhc2gKLSAgICAgICBtZW1vcnkgYnkgcmVhZGluZyB0aGUgRkxBU0hfQUNSIHJlZ2lzdGVyICovCi0gICAgaWYoTExfRkxBU0hfR2V0TGF0ZW5jeSgpICE9IGxhdGVuY3kpCi0gICAgewotICAgICAgc3RhdHVzID0gRVJST1I7Ci0gICAgfQotICB9Ci0gIHJldHVybiBzdGF0dXM7Ci19CiAKIC8qKgogICAqIEBicmllZiAgRnVuY3Rpb24gdG8gY2hlY2sgdGhhdCBQTEwgY2FuIGJlIG1vZGlmaWVkCkBAIC02MTcsNyArNjQzLDcgQEAKICAgaWYoU3lzdGVtQ29yZUNsb2NrIDwgaGNsa19mcmVxdWVuY3kpCiAgIHsKICAgICAvKiBTZXQgRkxBU0ggbGF0ZW5jeSB0byBoaWdoZXN0IGxhdGVuY3kgKi8KLSAgICBzdGF0dXMgPSBVVElMU19TZXRGbGFzaExhdGVuY3koaGNsa19mcmVxdWVuY3kpOworICAgIHN0YXR1cyA9IExMX1NldEZsYXNoTGF0ZW5jeShoY2xrX2ZyZXF1ZW5jeSk7CiAgIH0KIAogICAvKiBVcGRhdGUgc3lzdGVtIGNsb2NrIGNvbmZpZ3VyYXRpb24gKi8KQEAgLTY0OCw3ICs2NzQsNyBAQAogICBpZihTeXN0ZW1Db3JlQ2xvY2sgPiBoY2xrX2ZyZXF1ZW5jeSkKICAgewogICAgIC8qIFNldCBGTEFTSCBsYXRlbmN5IHRvIGxvd2VzdCBsYXRlbmN5ICovCi0gICAgc3RhdHVzID0gVVRJTFNfU2V0Rmxhc2hMYXRlbmN5KGhjbGtfZnJlcXVlbmN5KTsKKyAgICBzdGF0dXMgPSBMTF9TZXRGbGFzaExhdGVuY3koaGNsa19mcmVxdWVuY3kpOwogICB9CiAKICAgLyogVXBkYXRlIFN5c3RlbUNvcmVDbG9jayB2YXJpYWJsZSAqLwo=