ZGlmZiAtLWdpdCBhL2FyY2gvYXJtL253ZnBlL2Zwb3Bjb2RlLmggYi9hcmNoL2FybS9ud2ZwZS9mcG9wY29kZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMzVmNGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ud2ZwZS9mcG9wY29kZS5oCkBAIC0wLDAgKzEsNDc5IEBACisvKgorICAgIE5ldFdpbmRlciBGbG9hdGluZyBQb2ludCBFbXVsYXRvcgorICAgIChjKSBSZWJlbC5DT00sIDE5OTgsMTk5OQorICAgIChjKSBQaGlsaXAgQmx1bmRlbGwsIDIwMDEKKworICAgIERpcmVjdCBxdWVzdGlvbnMsIGNvbW1lbnRzIHRvIFNjb3R0IEJhbWJyb3VnaCA8c2NvdHRiQG5ldHdpbmRlci5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyovCisKKyNpZm5kZWYgX19GUE9QQ09ERV9IX18KKyNkZWZpbmUgX19GUE9QQ09ERV9IX18KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisvKgorQVJNIEZsb2F0aW5nIFBvaW50IEluc3RydWN0aW9uIENsYXNzZXMKK3wgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IAorfGMgbyBuIGR8MSAxIDAgUHxVfHV8V3xMfCAgIFJuICB8dnwgIEZkIHwwfDB8MHwxfCAgbyBmIGYgcyBlIHQgIHwgQ1BEVAorfGMgbyBuIGR8MSAxIDAgUHxVfHd8V3xMfCAgIFJuICB8eHwgIEZkIHwwfDB8MXwwfCAgbyBmIGYgcyBlIHQgIHwgQ1BEVCAoY29wcm8gMikKK3wgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IAorfGMgbyBuIGR8MSAxIDEgMHxhfGJ8Y3xkfGV8ICBGbiB8anwgIEZkIHwwfDB8MHwxfGZ8Z3xofDB8aXwgIEZtIHwgQ1BETworfGMgbyBuIGR8MSAxIDEgMHxhfGJ8Y3xMfGV8ICBGbiB8ICAgUmQgIHwwfDB8MHwxfGZ8Z3xofDF8aXwgIEZtIHwgQ1BSVAorfGMgbyBuIGR8MSAxIDEgMHxhfGJ8Y3wxfGV8ICBGbiB8MXwxfDF8MXwwfDB8MHwxfGZ8Z3xofDF8aXwgIEZtIHwgY29tcGFyaXNvbnMKK3wgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IAorCitDUERUCQlkYXRhIHRyYW5zZmVyIGluc3RydWN0aW9ucworCQlMREYsIFNURiwgTEZNIChjb3BybyAyKSwgU0ZNIChjb3BybyAyKQorCQkKK0NQRE8JCWR5YWRpYyBhcml0aG1ldGljIGluc3RydWN0aW9ucworCQlBREYsIE1VRiwgU1VGLCBSU0YsIERWRiwgUkRGLAorCQlQT1csIFJQVywgUk1GLCBGTUwsIEZEViwgRlJELCBQT0wKKworQ1BETwkJbW9uYWRpYyBhcml0aG1ldGljIGluc3RydWN0aW9ucworCQlNVkYsIE1ORiwgQUJTLCBSTkQsIFNRVCwgTE9HLCBMR04sIEVYUCwKKwkJU0lOLCBDT1MsIFRBTiwgQVNOLCBBQ1MsIEFUTiwgVVJELCBOUk0KKwkJCitDUFJUCQlqb2ludCBhcml0aG1ldGljL2RhdGEgdHJhbnNmZXIgaW5zdHJ1Y3Rpb25zCisJCUZJWCAoYXJpdGhtZXRpYyBmb2xsb3dlZCBieSBsb2FkL3N0b3JlKQorCQlGTFQgKGxvYWQvc3RvcmUgZm9sbG93ZWQgYnkgYXJpdGhtZXRpYykKKwkJQ01GLCBDTkYgQ01GRSwgQ05GRSAoY29tcGFyaXNvbnMpCisJCVdGUywgUkZTICh3cml0ZS9yZWFkIGZsb2F0aW5nIHBvaW50IHN0YXR1cyByZWdpc3RlcikKKwkJV0ZDLCBSRkMgKHdyaXRlL3JlYWQgZmxvYXRpbmcgcG9pbnQgY29udHJvbCByZWdpc3RlcikKKworY29uZAkJY29uZGl0aW9uIGNvZGVzCitQCQlwcmUvcG9zdCBpbmRleCBiaXQ6IDAgPSBwb3N0aW5kZXgsIDEgPSBwcmVpbmRleAorVQkJdXAvZG93biBiaXQ6IDAgPSBzdGFjayBncm93cyBkb3duLCAxID0gc3RhY2sgZ3Jvd3MgdXAKK1cJCXdyaXRlIGJhY2sgYml0OiAxID0gdXBkYXRlIGJhc2UgcmVnaXN0ZXIgKFJuKQorTAkJbG9hZC9zdG9yZSBiaXQ6IDAgPSBzdG9yZSwgMSA9IGxvYWQKK1JuCQliYXNlIHJlZ2lzdGVyCitSZAkJZGVzdGluYXRpb24vc291cmNlIHJlZ2lzdGVyCQkKK0ZkCQlmbG9hdGluZyBwb2ludCBkZXN0aW5hdGlvbiByZWdpc3RlcgorRm4JCWZsb2F0aW5nIHBvaW50IHNvdXJjZSByZWdpc3RlcgorRm0JCWZsb2F0aW5nIHBvaW50IHNvdXJjZSByZWdpc3RlciBvciBmbG9hdGluZyBwb2ludCBjb25zdGFudAorCit1dgkJdHJhbnNmZXIgbGVuZ3RoIChUQUJMRSAxKQord3gJCXJlZ2lzdGVyIGNvdW50IChUQUJMRSAyKQorYWJjZAkJYXJpdGhtZXRpYyBvcGNvZGUgKFRBQkxFUyAzICYgNCkKK2VmCQlkZXN0aW5hdGlvbiBzaXplIChyb3VuZGluZyBwcmVjaXNpb24pIChUQUJMRSA1KQorZ2gJCXJvdW5kaW5nIG1vZGUgKFRBQkxFIDYpCitqCQlkeWFkaWMvbW9uYWRpYyBiaXQ6IDAgPSBkeWFkaWMsIDEgPSBtb25hZGljCitpIAkJY29uc3RhbnQgYml0OiAxID0gY29uc3RhbnQgKFRBQkxFIDYpCisqLworCisvKgorVEFCTEUgMQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tKy0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKworfCAgUHJlY2lzaW9uICAgICAgICAgICAgICB8IHUgfCB2IHwgRlBTUi5FUCB8IGxlbmd0aCAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tKy0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKworfCBTaW5nbGUgICAgICAgICAgICAgICAgICB8IDAg/CAwIHwgICAgeCAgICB8IDEgd29yZHMgfAorfCBEb3VibGUgICAgICAgICAgICAgICAgICB8IDEg/CAxIHwgICAgeCAgICB8IDIgd29yZHMgfAorfCBFeHRlbmRlZCAgICAgICAgICAgICAgICB8IDEg/CAxIHwgICAgeCAgICB8IDMgd29yZHMgfAorfCBQYWNrZWQgZGVjaW1hbCAgICAgICAgICB8IDEg/CAxIHwgICAgMCAgICB8IDMgd29yZHMgfAorfCBFeHBhbmRlZCBwYWNrZWQgZGVjaW1hbCB8IDEg/CAxIHwgICAgMSAgICB8IDQgd29yZHMgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tKy0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKworTm90ZTogeCA9IGRvbid0IGNhcmUKKyovCisKKy8qCitUQUJMRSAyCisrLS0tKy0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IHcgfCB4IHwgTnVtYmVyIG9mIHJlZ2lzdGVycyB0byB0cmFuc2ZlciB8CisrLS0tKy0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IDAg/CAxIHwgIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDEg/CAwIHwgIDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDEg/CAxIHwgIDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDAg/CAwIHwgIDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tKy0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisvKgorVEFCTEUgMzogRHlhZGljIEZsb2F0aW5nIFBvaW50IE9wY29kZXMKKystLS0rLS0tKy0tLSstLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgYSB8IGIgfCBjIHwgZCB8IE1uZW1vbmljIHwgRGVzY3JpcHRpb24gICAgICAgICAgIHwgT3BlcmF0aW9uICAgICAgICAgICAgIHwKKystLS0rLS0tKy0tLSstLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgMCB8IDAgfCAwIHwgMCB8IEFERiAgICAgIHwgQWRkICAgICAgICAgICAgICAgICAgIHwgRmQgOj0gRm4gKyBGbSAgICAgICAgIHwKK3wgMCB8IDAgfCAwIHwgMSB8IE1VRiAgICAgIHwgTXVsdGlwbHkgICAgICAgICAgICAgIHwgRmQgOj0gRm4gKiBGbSAgICAgICAgIHwKK3wgMCB8IDAgfCAxIHwgMCB8IFNVRiAgICAgIHwgU3VidHJhY3QgICAgICAgICAgICAgIHwgRmQgOj0gRm4gLSBGbSAgICAgICAgIHwKK3wgMCB8IDAgfCAxIHwgMSB8IFJTRiAgICAgIHwgUmV2ZXJzZSBzdWJ0cmFjdCAgICAgIHwgRmQgOj0gRm0gLSBGbiAgICAgICAgIHwKK3wgMCB8IDEgfCAwIHwgMCB8IERWRiAgICAgIHwgRGl2aWRlICAgICAgICAgICAgICAgIHwgRmQgOj0gRm4gLyBGbSAgICAgICAgIHwKK3wgMCB8IDEgfCAwIHwgMSB8IFJERiAgICAgIHwgUmV2ZXJzZSBkaXZpZGUgICAgICAgIHwgRmQgOj0gRm0gLyBGbiAgICAgICAgIHwKK3wgMCB8IDEgfCAxIHwgMCB8IFBPVyAgICAgIHwgUG93ZXIgICAgICAgICAgICAgICAgIHwgRmQgOj0gRm4gXiBGbSAgICAgICAgIHwKK3wgMCB8IDEgfCAxIHwgMSB8IFJQVyAgICAgIHwgUmV2ZXJzZSBwb3dlciAgICAgICAgIHwgRmQgOj0gRm0gXiBGbiAgICAgICAgIHwKK3wgMSB8IDAgfCAwIHwgMCB8IFJNRiAgICAgIHwgUmVtYWluZGVyICAgICAgICAgICAgIHwgRmQgOj0gSUVFRSByZW0oRm4vRm0pIHwKK3wgMSB8IDAgfCAwIHwgMSB8IEZNTCAgICAgIHwgRmFzdCBNdWx0aXBseSAgICAgICAgIHwgRmQgOj0gRm4gKiBGbSAgICAgICAgIHwKK3wgMSB8IDAgfCAxIHwgMCB8IEZEViAgICAgIHwgRmFzdCBEaXZpZGUgICAgICAgICAgIHwgRmQgOj0gRm4gLyBGbSAgICAgICAgIHwKK3wgMSB8IDAgfCAxIHwgMSB8IEZSRCAgICAgIHwgRmFzdCByZXZlcnNlIGRpdmlkZSAgIHwgRmQgOj0gRm0gLyBGbiAgICAgICAgIHwKK3wgMSB8IDEgfCAwIHwgMCB8IFBPTCAgICAgIHwgUG9sYXIgYW5nbGUgKEFyY1RhbjIpIHwgRmQgOj0gYXJjdGFuMihGbixGbSkgIHwKK3wgMSB8IDEgfCAwIHwgMSB8ICAgICAgICAgIHwgdW5kZWZpbmVkIGluc3RydWN0aW9uIHwgdHJhcCAgICAgICAgICAgICAgICAgIHwKK3wgMSB8IDEgfCAxIHwgMCB8ICAgICAgICAgIHwgdW5kZWZpbmVkIGluc3RydWN0aW9uIHwgdHJhcCAgICAgICAgICAgICAgICAgIHwKK3wgMSB8IDEgfCAxIHwgMSB8ICAgICAgICAgIHwgdW5kZWZpbmVkIGluc3RydWN0aW9uIHwgdHJhcCAgICAgICAgICAgICAgICAgIHwKKystLS0rLS0tKy0tLSstLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK05vdGU6IFBPVywgUlBXLCBQT0wgYXJlIGRlcHJlY2F0ZWQsIGFuZCBhcmUgYXZhaWxhYmxlIGZvciBiYWNrd2FyZHMKKyAgICAgIGNvbXBhdGliaWxpdHkgb25seS4KKyovCisKKy8qCitUQUJMRSA0OiBNb25hZGljIEZsb2F0aW5nIFBvaW50IE9wY29kZXMKKystLS0rLS0tKy0tLSstLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgYSB8IGIgfCBjIHwgZCB8IE1uZW1vbmljIHwgRGVzY3JpcHRpb24gICAgICAgICAgIHwgT3BlcmF0aW9uICAgICAgICAgICAgIHwKKystLS0rLS0tKy0tLSstLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgMCB8IDAgfCAwIHwgMCB8IE1WRiAgICAgIHwgTW92ZSAgICAgICAgICAgICAgICAgIHwgRmQgOj0gRm0gICAgICAgICAgICAgIHwKK3wgMCB8IDAgfCAwIHwgMSB8IE1ORiAgICAgIHwgTW92ZSBuZWdhdGVkICAgICAgICAgIHwgRmQgOj0gLSBGbSAgICAgICAgICAgIHwKK3wgMCB8IDAgfCAxIHwgMCB8IEFCUyAgICAgIHwgQWJzb2x1dGUgdmFsdWUgICAgICAgIHwgRmQgOj0gYWJzKEZtKSAgICAgICAgIHwKK3wgMCB8IDAgfCAxIHwgMSB8IFJORCAgICAgIHwgUm91bmQgdG8gaW50ZWdlciAgICAgIHwgRmQgOj0gaW50KEZtKSAgICAgICAgIHwKK3wgMCB8IDEgfCAwIHwgMCB8IFNRVCAgICAgIHwgU3F1YXJlIHJvb3QgICAgICAgICAgIHwgRmQgOj0gc3FydChGbSkgICAgICAgIHwKK3wgMCB8IDEgfCAwIHwgMSB8IExPRyAgICAgIHwgTG9nIGJhc2UgMTAgICAgICAgICAgIHwgRmQgOj0gbG9nMTAoRm0pICAgICAgIHwKK3wgMCB8IDEgfCAxIHwgMCB8IExHTiAgICAgIHwgTG9nIGJhc2UgZSAgICAgICAgICAgIHwgRmQgOj0gbG4oRm0pICAgICAgICAgIHwKK3wgMCB8IDEgfCAxIHwgMSB8IEVYUCAgICAgIHwgRXhwb25lbnQgICAgICAgICAgICAgIHwgRmQgOj0gZSBeIEZtICAgICAgICAgIHwKK3wgMSB8IDAgfCAwIHwgMCB8IFNJTiAgICAgIHwgU2luZSAgICAgICAgICAgICAgICAgIHwgRmQgOj0gc2luKEZtKSAgICAgICAgIHwKK3wgMSB8IDAgfCAwIHwgMSB8IENPUyAgICAgIHwgQ29zaW5lICAgICAgICAgICAgICAgIHwgRmQgOj0gY29zKEZtKSAgICAgICAgIHwKK3wgMSB8IDAgfCAxIHwgMCB8IFRBTiAgICAgIHwgVGFuZ2VudCAgICAgICAgICAgICAgIHwgRmQgOj0gdGFuKEZtKSAgICAgICAgIHwKK3wgMSB8IDAgfCAxIHwgMSB8IEFTTiAgICAgIHwgQXJjIFNpbmUgICAgICAgICAgICAgIHwgRmQgOj0gYXJjc2luKEZtKSAgICAgIHwKK3wgMSB8IDEgfCAwIHwgMCB8IEFDUyAgICAgIHwgQXJjIENvc2luZSAgICAgICAgICAgIHwgRmQgOj0gYXJjY29zKEZtKSAgICAgIHwKK3wgMSB8IDEgfCAwIHwgMSB8IEFUTiAgICAgIHwgQXJjIFRhbmdlbnQgICAgICAgICAgIHwgRmQgOj0gYXJjdGFuKEZtKSAgICAgIHwKK3wgMSB8IDEgfCAxIHwgMCB8IFVSRCAgICAgIHwgVW5ub3JtYWxpemVkIHJvdW5kICAgIHwgRmQgOj0gaW50KEZtKSAgICAgICAgIHwKK3wgMSB8IDEgfCAxIHwgMSB8IE5STSAgICAgIHwgTm9ybWFsaXplICAgICAgICAgICAgIHwgRmQgOj0gbm9ybShGbSkgICAgICAgIHwKKystLS0rLS0tKy0tLSstLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK05vdGU6IExPRywgTEdOLCBFWFAsIFNJTiwgQ09TLCBUQU4sIEFTTiwgQUNTLCBBVE4gYXJlIGRlcHJlY2F0ZWQsIGFuZCBhcmUKKyAgICAgIGF2YWlsYWJsZSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgb25seS4KKyovCisKKy8qCitUQUJMRSA1CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0rLS0tKworfCAgUm91bmRpbmcgUHJlY2lzaW9uICAgICB8IGUgfCBmIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLSstLS0rCit8IElFRUUgU2luZ2xlIHByZWNpc2lvbiAgIHwgMCD8IDAgfAorfCBJRUVFIERvdWJsZSBwcmVjaXNpb24gICB8IDAg/CAxIHwKK3wgSUVFRSBFeHRlbmRlZCBwcmVjaXNpb24gfCAxIPwgMCB8Cit8IHVuZGVmaW5lZCAodHJhcCkgICAgICAgIHwgMSD8IDEgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tKy0tLSsKKyovCisKKy8qCitUQUJMRSA1CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLSstLS0rCit8ICBSb3VuZGluZyBNb2RlICAgICAgICAgICAgICAgICAgfCBnIHwgaCB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLSstLS0rCit8IFJvdW5kIHRvIG5lYXJlc3QgKGRlZmF1bHQpICAgICAgfCAwIPwgMCB8Cit8IFJvdW5kIHRvd2FyZCBwbHVzIGluZmluaXR5ICAgICAgfCAwIPwgMSB8Cit8IFJvdW5kIHRvd2FyZCBuZWdhdGl2ZSBpbmZpbml0eSAgfCAxIPwgMCB8Cit8IFJvdW5kIHRvd2FyZCB6ZXJvICAgICAgICAgICAgICAgfCAxIPwgMSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLSstLS0rCisqLworCisvKgorPT09Cis9PT0gRGVmaW5pdGlvbnMgZm9yIGxvYWQgYW5kIHN0b3JlIGluc3RydWN0aW9ucworPT09CisqLworCisvKiBiaXQgbWFza3MgKi8KKyNkZWZpbmUgQklUX1BSRUlOREVYCTB4MDEwMDAwMDAKKyNkZWZpbmUgQklUX1VQCQkweDAwODAwMDAwCisjZGVmaW5lIEJJVF9XUklURV9CQUNLCTB4MDAyMDAwMDAKKyNkZWZpbmUgQklUX0xPQUQJMHgwMDEwMDAwMAorCisvKiBtYXNrcyBmb3IgbG9hZC9zdG9yZSAqLworI2RlZmluZSBNQVNLX0NQRFQJCTB4MGMwMDAwMDAJLyogZGF0YSBwcm9jZXNzaW5nIG9wY29kZSAqLworI2RlZmluZSBNQVNLX09GRlNFVAkJMHgwMDAwMDBmZgorI2RlZmluZSBNQVNLX1RSQU5TRkVSX0xFTkdUSAkweDAwNDA4MDAwCisjZGVmaW5lIE1BU0tfUkVHSVNURVJfQ09VTlQJTUFTS19UUkFOU0ZFUl9MRU5HVEgKKyNkZWZpbmUgTUFTS19DT1BST0NFU1NPUgkweDAwMDAwZjAwCisKKy8qIFRlc3RzIGZvciB0cmFuc2ZlciBsZW5ndGggKi8KKyNkZWZpbmUgVFJBTlNGRVJfU0lOR0xFCQkweDAwMDAwMDAwCisjZGVmaW5lIFRSQU5TRkVSX0RPVUJMRQkJMHgwMDAwODAwMAorI2RlZmluZSBUUkFOU0ZFUl9FWFRFTkRFRAkweDAwNDAwMDAwCisjZGVmaW5lIFRSQU5TRkVSX1BBQ0tFRAkJTUFTS19UUkFOU0ZFUl9MRU5HVEgKKworLyogR2V0IHRoZSBjb3Byb2Nlc3NvciBudW1iZXIgZnJvbSB0aGUgb3Bjb2RlLiAqLworI2RlZmluZSBnZXRDb3Byb2Nlc3Nvck51bWJlcihvcGNvZGUpCSgob3Bjb2RlICYgTUFTS19DT1BST0NFU1NPUikgPj4gOCkKKworLyogR2V0IHRoZSBvZmZzZXQgZnJvbSB0aGUgb3Bjb2RlLiAqLworI2RlZmluZSBnZXRPZmZzZXQob3Bjb2RlKQkJKG9wY29kZSAmIE1BU0tfT0ZGU0VUKQorCisvKiBUZXN0cyBmb3Igc3BlY2lmaWMgZGF0YSB0cmFuc2ZlciBsb2FkL3N0b3JlIG9wY29kZXMuICovCisjZGVmaW5lIFRFU1RfT1BDT0RFKG9wY29kZSxtYXNrKQkoKChvcGNvZGUpICYgKG1hc2spKSA9PSAobWFzaykpCisKKyNkZWZpbmUgTE9BRF9PUChvcGNvZGUpICAgVEVTVF9PUENPREUoKG9wY29kZSksTUFTS19DUERUIHwgQklUX0xPQUQpCisjZGVmaW5lIFNUT1JFX09QKG9wY29kZSkgICgob3Bjb2RlICYgKE1BU0tfQ1BEVCB8IEJJVF9MT0FEKSkgPT0gTUFTS19DUERUKQorCisjZGVmaW5lIExERl9PUChvcGNvZGUpCShMT0FEX09QKG9wY29kZSkgJiYgKGdldENvcHJvY2Vzc29yTnVtYmVyKG9wY29kZSkgPT0gMSkpCisjZGVmaW5lIExGTV9PUChvcGNvZGUpCShMT0FEX09QKG9wY29kZSkgJiYgKGdldENvcHJvY2Vzc29yTnVtYmVyKG9wY29kZSkgPT0gMikpCisjZGVmaW5lIFNURl9PUChvcGNvZGUpCShTVE9SRV9PUChvcGNvZGUpICYmIChnZXRDb3Byb2Nlc3Nvck51bWJlcihvcGNvZGUpID09IDEpKQorI2RlZmluZSBTRk1fT1Aob3Bjb2RlKQkoU1RPUkVfT1Aob3Bjb2RlKSAmJiAoZ2V0Q29wcm9jZXNzb3JOdW1iZXIob3Bjb2RlKSA9PSAyKSkKKworI2RlZmluZSBQUkVJTkRFWEVEKG9wY29kZSkJCSgob3Bjb2RlICYgQklUX1BSRUlOREVYKSAhPSAwKQorI2RlZmluZSBQT1NUSU5ERVhFRChvcGNvZGUpCQkoKG9wY29kZSAmIEJJVF9QUkVJTkRFWCkgPT0gMCkKKyNkZWZpbmUgQklUX1VQX1NFVChvcGNvZGUpCQkoKG9wY29kZSAmIEJJVF9VUCkgIT0gMCkKKyNkZWZpbmUgQklUX1VQX0NMRUFSKG9wY29kZSkJCSgob3Bjb2RlICYgQklUX0RPV04pID09IDApCisjZGVmaW5lIFdSSVRFX0JBQ0sob3Bjb2RlKQkJKChvcGNvZGUgJiBCSVRfV1JJVEVfQkFDSykgIT0gMCkKKyNkZWZpbmUgTE9BRChvcGNvZGUpCQkJKChvcGNvZGUgJiBCSVRfTE9BRCkgIT0gMCkKKyNkZWZpbmUgU1RPUkUob3Bjb2RlKQkJCSgob3Bjb2RlICYgQklUX0xPQUQpID09IDApCisKKy8qCis9PT0KKz09PSBEZWZpbml0aW9ucyBmb3IgYXJpdGhtZXRpYyBpbnN0cnVjdGlvbnMKKz09PQorKi8KKy8qIGJpdCBtYXNrcyAqLworI2RlZmluZSBCSVRfTU9OQURJQwkweDAwMDA4MDAwCisjZGVmaW5lIEJJVF9DT05TVEFOVAkweDAwMDAwMDA4CisKKyNkZWZpbmUgQ09OU1RBTlRfRk0ob3Bjb2RlKQkJKChvcGNvZGUgJiBCSVRfQ09OU1RBTlQpICE9IDApCisjZGVmaW5lIE1PTkFESUNfSU5TVFJVQ1RJT04ob3Bjb2RlKQkoKG9wY29kZSAmIEJJVF9NT05BRElDKSAhPSAwKQorCisvKiBpbnN0cnVjdGlvbiBpZGVudGlmaWNhdGlvbiBtYXNrcyAqLworI2RlZmluZSBNQVNLX0NQRE8JCTB4MGUwMDAwMDAJLyogYXJpdGhtZXRpYyBvcGNvZGUgKi8KKyNkZWZpbmUgTUFTS19BUklUSE1FVElDX09QQ09ERQkweDAwZjA4MDAwCisjZGVmaW5lIE1BU0tfREVTVElOQVRJT05fU0laRQkweDAwMDgwMDgwCisKKy8qIGR5YWRpYyBhcml0aG1ldGljIG9wY29kZXMuICovCisjZGVmaW5lIEFERl9DT0RFCTB4MDAwMDAwMDAKKyNkZWZpbmUgTVVGX0NPREUJMHgwMDEwMDAwMAorI2RlZmluZSBTVUZfQ09ERQkweDAwMjAwMDAwCisjZGVmaW5lIFJTRl9DT0RFCTB4MDAzMDAwMDAKKyNkZWZpbmUgRFZGX0NPREUJMHgwMDQwMDAwMAorI2RlZmluZSBSREZfQ09ERQkweDAwNTAwMDAwCisjZGVmaW5lIFBPV19DT0RFCTB4MDA2MDAwMDAKKyNkZWZpbmUgUlBXX0NPREUJMHgwMDcwMDAwMAorI2RlZmluZSBSTUZfQ09ERQkweDAwODAwMDAwCisjZGVmaW5lIEZNTF9DT0RFCTB4MDA5MDAwMDAKKyNkZWZpbmUgRkRWX0NPREUJMHgwMGEwMDAwMAorI2RlZmluZSBGUkRfQ09ERQkweDAwYjAwMDAwCisjZGVmaW5lIFBPTF9DT0RFCTB4MDBjMDAwMDAKKy8qIDB4MDBkMDAwMDAgaXMgYW4gaW52YWxpZCBkeWFkaWMgYXJpdGhtZXRpYyBvcGNvZGUgKi8KKy8qIDB4MDBlMDAwMDAgaXMgYW4gaW52YWxpZCBkeWFkaWMgYXJpdGhtZXRpYyBvcGNvZGUgKi8KKy8qIDB4MDBmMDAwMDAgaXMgYW4gaW52YWxpZCBkeWFkaWMgYXJpdGhtZXRpYyBvcGNvZGUgKi8KKworLyogbW9uYWRpYyBhcml0aG1ldGljIG9wY29kZXMuICovCisjZGVmaW5lIE1WRl9DT0RFCTB4MDAwMDgwMDAKKyNkZWZpbmUgTU5GX0NPREUJMHgwMDEwODAwMAorI2RlZmluZSBBQlNfQ09ERQkweDAwMjA4MDAwCisjZGVmaW5lIFJORF9DT0RFCTB4MDAzMDgwMDAKKyNkZWZpbmUgU1FUX0NPREUJMHgwMDQwODAwMAorI2RlZmluZSBMT0dfQ09ERQkweDAwNTA4MDAwCisjZGVmaW5lIExHTl9DT0RFCTB4MDA2MDgwMDAKKyNkZWZpbmUgRVhQX0NPREUJMHgwMDcwODAwMAorI2RlZmluZSBTSU5fQ09ERQkweDAwODA4MDAwCisjZGVmaW5lIENPU19DT0RFCTB4MDA5MDgwMDAKKyNkZWZpbmUgVEFOX0NPREUJMHgwMGEwODAwMAorI2RlZmluZSBBU05fQ09ERQkweDAwYjA4MDAwCisjZGVmaW5lIEFDU19DT0RFCTB4MDBjMDgwMDAKKyNkZWZpbmUgQVROX0NPREUJMHgwMGQwODAwMAorI2RlZmluZSBVUkRfQ09ERQkweDAwZTA4MDAwCisjZGVmaW5lIE5STV9DT0RFCTB4MDBmMDgwMDAKKworLyoKKz09PQorPT09IERlZmluaXRpb25zIGZvciByZWdpc3RlciB0cmFuc2ZlciBhbmQgY29tcGFyaXNvbiBpbnN0cnVjdGlvbnMKKz09PQorKi8KKworI2RlZmluZSBNQVNLX0NQUlQJCTB4MGUwMDAwMTAJLyogcmVnaXN0ZXIgdHJhbnNmZXIgb3Bjb2RlICovCisjZGVmaW5lIE1BU0tfQ1BSVF9DT0RFCQkweDAwZjAwMDAwCisjZGVmaW5lIEZMVF9DT0RFCQkweDAwMDAwMDAwCisjZGVmaW5lIEZJWF9DT0RFCQkweDAwMTAwMDAwCisjZGVmaW5lIFdGU19DT0RFCQkweDAwMjAwMDAwCisjZGVmaW5lIFJGU19DT0RFCQkweDAwMzAwMDAwCisjZGVmaW5lIFdGQ19DT0RFCQkweDAwNDAwMDAwCisjZGVmaW5lIFJGQ19DT0RFCQkweDAwNTAwMDAwCisjZGVmaW5lIENNRl9DT0RFCQkweDAwOTAwMDAwCisjZGVmaW5lIENORl9DT0RFCQkweDAwYjAwMDAwCisjZGVmaW5lIENNRkVfQ09ERQkJMHgwMGQwMDAwMAorI2RlZmluZSBDTkZFX0NPREUJCTB4MDBmMDAwMDAKKworLyoKKz09PQorPT09IENvbW1vbiBkZWZpbml0aW9ucworPT09CisqLworCisvKiByZWdpc3RlciBtYXNrcyAqLworI2RlZmluZSBNQVNLX1JkCQkweDAwMDBmMDAwCisjZGVmaW5lIE1BU0tfUm4JCTB4MDAwZjAwMDAKKyNkZWZpbmUgTUFTS19GZAkJMHgwMDAwNzAwMAorI2RlZmluZSBNQVNLX0ZtCQkweDAwMDAwMDA3CisjZGVmaW5lIE1BU0tfRm4JCTB4MDAwNzAwMDAKKworLyogY29uZGl0aW9uIGNvZGUgbWFza3MgKi8KKyNkZWZpbmUgQ0NfTUFTSwkJMHhmMDAwMDAwMAorI2RlZmluZSBDQ19ORUdBVElWRQkweDgwMDAwMDAwCisjZGVmaW5lIENDX1pFUk8JCTB4NDAwMDAwMDAKKyNkZWZpbmUgQ0NfQ0FSUlkJMHgyMDAwMDAwMAorI2RlZmluZSBDQ19PVkVSRkxPVwkweDEwMDAwMDAwCisjZGVmaW5lIENDX0VRCQkweDAwMDAwMDAwCisjZGVmaW5lIENDX05FCQkweDEwMDAwMDAwCisjZGVmaW5lIENDX0NTCQkweDIwMDAwMDAwCisjZGVmaW5lIENDX0hTCQlDQ19DUworI2RlZmluZSBDQ19DQwkJMHgzMDAwMDAwMAorI2RlZmluZSBDQ19MTwkJQ0NfQ0MKKyNkZWZpbmUgQ0NfTUkJCTB4NDAwMDAwMDAKKyNkZWZpbmUgQ0NfUEwJCTB4NTAwMDAwMDAKKyNkZWZpbmUgQ0NfVlMJCTB4NjAwMDAwMDAKKyNkZWZpbmUgQ0NfVkMJCTB4NzAwMDAwMDAKKyNkZWZpbmUgQ0NfSEkJCTB4ODAwMDAwMDAKKyNkZWZpbmUgQ0NfTFMJCTB4OTAwMDAwMDAKKyNkZWZpbmUgQ0NfR0UJCTB4YTAwMDAwMDAKKyNkZWZpbmUgQ0NfTFQJCTB4YjAwMDAwMDAKKyNkZWZpbmUgQ0NfR1QJCTB4YzAwMDAwMDAKKyNkZWZpbmUgQ0NfTEUJCTB4ZDAwMDAwMDAKKyNkZWZpbmUgQ0NfQUwJCTB4ZTAwMDAwMDAKKyNkZWZpbmUgQ0NfTlYJCTB4ZjAwMDAwMDAKKworLyogcm91bmRpbmcgbWFza3MvdmFsdWVzICovCisjZGVmaW5lIE1BU0tfUk9VTkRJTkdfTU9ERQkweDAwMDAwMDYwCisjZGVmaW5lIFJPVU5EX1RPX05FQVJFU1QJMHgwMDAwMDAwMAorI2RlZmluZSBST1VORF9UT19QTFVTX0lORklOSVRZCTB4MDAwMDAwMjAKKyNkZWZpbmUgUk9VTkRfVE9fTUlOVVNfSU5GSU5JVFkJMHgwMDAwMDA0MAorI2RlZmluZSBST1VORF9UT19aRVJPCQkweDAwMDAwMDYwCisKKyNkZWZpbmUgTUFTS19ST1VORElOR19QUkVDSVNJT04JMHgwMDA4MDA4MAorI2RlZmluZSBST1VORF9TSU5HTEUJCTB4MDAwMDAwMDAKKyNkZWZpbmUgUk9VTkRfRE9VQkxFCQkweDAwMDAwMDgwCisjZGVmaW5lIFJPVU5EX0VYVEVOREVECQkweDAwMDgwMDAwCisKKy8qIEdldCB0aGUgY29uZGl0aW9uIGNvZGUgZnJvbSB0aGUgb3Bjb2RlLiAqLworI2RlZmluZSBnZXRDb25kaXRpb24ob3Bjb2RlKQkJKG9wY29kZSA+PiAyOCkKKworLyogR2V0IHRoZSBzb3VyY2UgcmVnaXN0ZXIgZnJvbSB0aGUgb3Bjb2RlLiAqLworI2RlZmluZSBnZXRSbihvcGNvZGUpCQkJKChvcGNvZGUgJiBNQVNLX1JuKSA+PiAxNikKKworLyogR2V0IHRoZSBkZXN0aW5hdGlvbiBmbG9hdGluZyBwb2ludCByZWdpc3RlciBmcm9tIHRoZSBvcGNvZGUuICovCisjZGVmaW5lIGdldEZkKG9wY29kZSkJCQkoKG9wY29kZSAmIE1BU0tfRmQpID4+IDEyKQorCisvKiBHZXQgdGhlIGZpcnN0IHNvdXJjZSBmbG9hdGluZyBwb2ludCByZWdpc3RlciBmcm9tIHRoZSBvcGNvZGUuICovCisjZGVmaW5lIGdldEZuKG9wY29kZSkJCSgob3Bjb2RlICYgTUFTS19GbikgPj4gMTYpCisKKy8qIEdldCB0aGUgc2Vjb25kIHNvdXJjZSBmbG9hdGluZyBwb2ludCByZWdpc3RlciBmcm9tIHRoZSBvcGNvZGUuICovCisjZGVmaW5lIGdldEZtKG9wY29kZSkJCShvcGNvZGUgJiBNQVNLX0ZtKQorCisvKiBHZXQgdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGZyb20gdGhlIG9wY29kZS4gKi8KKyNkZWZpbmUgZ2V0UmQob3Bjb2RlKQkJKChvcGNvZGUgJiBNQVNLX1JkKSA+PiAxMikKKworLyogR2V0IHRoZSByb3VuZGluZyBtb2RlIGZyb20gdGhlIG9wY29kZS4gKi8KKyNkZWZpbmUgZ2V0Um91bmRpbmdNb2RlKG9wY29kZSkJCSgob3Bjb2RlICYgTUFTS19ST1VORElOR19NT0RFKSA+PiA1KQorCisjaWZkZWYgQ09ORklHX0ZQRV9OV0ZQRV9YUAorc3RhdGljIGlubGluZSBjb25zdCBmbG9hdHg4MCBnZXRFeHRlbmRlZENvbnN0YW50KGNvbnN0IHVuc2lnbmVkIGludCBuSW5kZXgpCit7CisJZXh0ZXJuIGNvbnN0IGZsb2F0eDgwIGZsb2F0eDgwQ29uc3RhbnRbXTsKKwlyZXR1cm4gZmxvYXR4ODBDb25zdGFudFtuSW5kZXhdOworfQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgY29uc3QgZmxvYXQ2NCBnZXREb3VibGVDb25zdGFudChjb25zdCB1bnNpZ25lZCBpbnQgbkluZGV4KQoreworCWV4dGVybiBjb25zdCBmbG9hdDY0IGZsb2F0NjRDb25zdGFudFtdOworCXJldHVybiBmbG9hdDY0Q29uc3RhbnRbbkluZGV4XTsKK30KKworc3RhdGljIGlubGluZSBjb25zdCBmbG9hdDMyIGdldFNpbmdsZUNvbnN0YW50KGNvbnN0IHVuc2lnbmVkIGludCBuSW5kZXgpCit7CisJZXh0ZXJuIGNvbnN0IGZsb2F0MzIgZmxvYXQzMkNvbnN0YW50W107CisJcmV0dXJuIGZsb2F0MzJDb25zdGFudFtuSW5kZXhdOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZXRUcmFuc2Zlckxlbmd0aChjb25zdCB1bnNpZ25lZCBpbnQgb3Bjb2RlKQoreworCXVuc2lnbmVkIGludCBuUmM7CisKKwlzd2l0Y2ggKG9wY29kZSAmIE1BU0tfVFJBTlNGRVJfTEVOR1RIKSB7CisJY2FzZSAweDAwMDAwMDAwOgorCQluUmMgPSAxOworCQlicmVhazsJCS8qIHNpbmdsZSBwcmVjaXNpb24gKi8KKwljYXNlIDB4MDAwMDgwMDA6CisJCW5SYyA9IDI7CisJCWJyZWFrOwkJLyogZG91YmxlIHByZWNpc2lvbiAqLworCWNhc2UgMHgwMDQwMDAwMDoKKwkJblJjID0gMzsKKwkJYnJlYWs7CQkvKiBleHRlbmRlZCBwcmVjaXNpb24gKi8KKwlkZWZhdWx0OgorCQluUmMgPSAwOworCX0KKworCXJldHVybiAoblJjKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0UmVnaXN0ZXJDb3VudChjb25zdCB1bnNpZ25lZCBpbnQgb3Bjb2RlKQoreworCXVuc2lnbmVkIGludCBuUmM7CisKKwlzd2l0Y2ggKG9wY29kZSAmIE1BU0tfUkVHSVNURVJfQ09VTlQpIHsKKwljYXNlIDB4MDAwMDAwMDA6CisJCW5SYyA9IDQ7CisJCWJyZWFrOworCWNhc2UgMHgwMDAwODAwMDoKKwkJblJjID0gMTsKKwkJYnJlYWs7CisJY2FzZSAweDAwNDAwMDAwOgorCQluUmMgPSAyOworCQlicmVhazsKKwljYXNlIDB4MDA0MDgwMDA6CisJCW5SYyA9IDM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCW5SYyA9IDA7CisJfQorCisJcmV0dXJuIChuUmMpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZXRSb3VuZGluZ1ByZWNpc2lvbihjb25zdCB1bnNpZ25lZCBpbnQgb3Bjb2RlKQoreworCXVuc2lnbmVkIGludCBuUmM7CisKKwlzd2l0Y2ggKG9wY29kZSAmIE1BU0tfUk9VTkRJTkdfUFJFQ0lTSU9OKSB7CisJY2FzZSAweDAwMDAwMDAwOgorCQluUmMgPSAxOworCQlicmVhazsKKwljYXNlIDB4MDAwMDAwODA6CisJCW5SYyA9IDI7CisJCWJyZWFrOworCWNhc2UgMHgwMDA4MDAwMDoKKwkJblJjID0gMzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJblJjID0gMDsKKwl9CisKKwlyZXR1cm4gKG5SYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldERlc3RpbmF0aW9uU2l6ZShjb25zdCB1bnNpZ25lZCBpbnQgb3Bjb2RlKQoreworCXVuc2lnbmVkIGludCBuUmM7CisKKwlzd2l0Y2ggKG9wY29kZSAmIE1BU0tfREVTVElOQVRJT05fU0laRSkgeworCWNhc2UgMHgwMDAwMDAwMDoKKwkJblJjID0gdHlwZVNpbmdsZTsKKwkJYnJlYWs7CisJY2FzZSAweDAwMDAwMDgwOgorCQluUmMgPSB0eXBlRG91YmxlOworCQlicmVhazsKKwljYXNlIDB4MDAwODAwMDA6CisJCW5SYyA9IHR5cGVFeHRlbmRlZDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJblJjID0gdHlwZU5vbmU7CisJfQorCisJcmV0dXJuIChuUmMpOworfQorCisjZW5kaWYK