LyoKICogc3lzY3RsLmMgLSBDb2RlIGZvciBzeXNjdGwgaGFuZGxpbmcgaW4gTlRGUyBMaW51eCBrZXJuZWwgZHJpdmVyLiBQYXJ0IG9mCiAqCSAgICAgIHRoZSBMaW51eC1OVEZTIHByb2plY3QuIEFkYXB0ZWQgZnJvbSB0aGUgb2xkIE5URlMgZHJpdmVyLAogKgkgICAgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFydGluIHZvbiBM9ndpcywgUulnaXMgRHVjaGVzbmUKICoKICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDQgQW50b24gQWx0YXBhcm1ha292CiAqCiAqIFRoaXMgcHJvZ3JhbS9pbmNsdWRlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAogKiBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIHByb2dyYW0vaW5jbHVkZSBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZQogKiB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5CiAqIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0gKGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGUgTGludXgtTlRGUwogKiBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgQ09QWUlORyk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbixJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwoKI2lmZGVmIERFQlVHCgojaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CgojaWZkZWYgQ09ORklHX1NZU0NUTAoKI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgoKI2luY2x1ZGUgInN5c2N0bC5oIgojaW5jbHVkZSAiZGVidWcuaCIKCiNkZWZpbmUgRlNfTlRGUwkxCgovKiBEZWZpbml0aW9uIG9mIHRoZSBudGZzIHN5c2N0bC4gKi8Kc3RhdGljIGN0bF90YWJsZSBudGZzX3N5c2N0bHNbXSA9IHsKCXsgRlNfTlRGUywgIm50ZnMtZGVidWciLAkJLyogQmluYXJ5IGFuZCB0ZXh0IElEcy4gKi8KCSAgJmRlYnVnX21zZ3Msc2l6ZW9mKGRlYnVnX21zZ3MpLAkvKiBEYXRhIHBvaW50ZXIgYW5kIHNpemUuICovCgkgIDA2NDQsCU5VTEwsICZwcm9jX2RvaW50dmVjIH0sCQkvKiBNb2RlLCBjaGlsZCwgcHJvYyBoYW5kbGVyLiAqLwoJeyAwIH0KfTsKCi8qIERlZmluZSB0aGUgcGFyZW50IGRpcmVjdG9yeSAvcHJvYy9zeXMvZnMuICovCnN0YXRpYyBjdGxfdGFibGUgc3lzY3Rsc19yb290W10gPSB7Cgl7IENUTF9GUywgImZzIiwgTlVMTCwgMCwgMDU1NSwgbnRmc19zeXNjdGxzIH0sCgl7IDAgfQp9OwoKLyogU3RvcmFnZSBmb3IgdGhlIHN5c2N0bHMgaGVhZGVyLiAqLwpzdGF0aWMgc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKnN5c2N0bHNfcm9vdF90YWJsZSA9IE5VTEw7CgovKioKICogbnRmc19zeXNjdGwgLSBhZGQgb3IgcmVtb3ZlIHRoZSBkZWJ1ZyBzeXNjdGwKICogQGFkZDoJYWRkICgxKSBvciByZW1vdmUgKDApIHRoZSBzeXNjdGwKICoKICogQWRkIG9yIHJlbW92ZSB0aGUgZGVidWcgc3lzY3RsLiBSZXR1cm4gMCBvbiBzdWNjZXNzIG9yIC1lcnJubyBvbiBlcnJvci4KICovCmludCBudGZzX3N5c2N0bChpbnQgYWRkKQp7CglpZiAoYWRkKSB7CgkJQlVHX09OKHN5c2N0bHNfcm9vdF90YWJsZSk7CgkJc3lzY3Rsc19yb290X3RhYmxlID0gcmVnaXN0ZXJfc3lzY3RsX3RhYmxlKHN5c2N0bHNfcm9vdCwgMCk7CgkJaWYgKCFzeXNjdGxzX3Jvb3RfdGFibGUpCgkJCXJldHVybiAtRU5PTUVNOwojaWZkZWYgQ09ORklHX1BST0NfRlMKCQkvKgoJCSAqIElmIHRoZSBwcm9jIGZpbGUgc3lzdGVtIGlzIGluIHVzZSBhbmQgd2UgYXJlIGEgbW9kdWxlLCBuZWVkCgkJICogdG8gc2V0IHRoZSBvd25lciBvZiBvdXIgcHJvYyBlbnRyeSB0byBvdXIgbW9kdWxlLiBJbiB0aGUKCQkgKiBub24tbW9kdWxhciBjYXNlLCBUSElTX01PRFVMRSBpcyBOVUxMLCBzbyB0aGlzIGlzIG9rLgoJCSAqLwoJCW50ZnNfc3lzY3Rsc1swXS5kZS0+b3duZXIgPSBUSElTX01PRFVMRTsKI2VuZGlmCgl9IGVsc2UgewoJCUJVR19PTighc3lzY3Rsc19yb290X3RhYmxlKTsKCQl1bnJlZ2lzdGVyX3N5c2N0bF90YWJsZShzeXNjdGxzX3Jvb3RfdGFibGUpOwoJCXN5c2N0bHNfcm9vdF90YWJsZSA9IE5VTEw7Cgl9CglyZXR1cm4gMDsKfQoKI2VuZGlmIC8qIENPTkZJR19TWVNDVEwgKi8KI2VuZGlmIC8qIERFQlVHICovCg==