LyoKICogIFUtYm9vdCAtIGkzODYgU3RhcnR1cCBDb2RlCiAqCiAqICBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDMgT21pY3JvbiBDZXRpIEFCLCBEYW5pZWwgRW5nc3Ry9m0gPGRlbmFpZWxAb21pY3Jvbi5zZT4KICoKICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKICogcHJvamVjdC4KICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwogKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgogKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKICogTUEgMDIxMTEtMTMwNyBVU0EKICovCgoKI2RlZmluZSBCT09UX1NFRwkweGZmZmYwMDAwCS8qIGxpbmVhciBzZWdtZW50IG9mIGJvb3QgY29kZSAqLwojZGVmaW5lIGEzMgkJLmJ5dGUgMHg2NzsKI2RlZmluZSBvMzIJCS5ieXRlIDB4NjY7Cgouc2VjdGlvbiAuc3RhcnQxNiwgImF4IgouY29kZTE2Ci5nbG9ibCBzdGFydDE2CnN0YXJ0MTY6CgkvKiBGaXJzdCB3ZSBsZXQgdGhlIEJTUCBkbyBzb21lIGVhcmx5IGluaXRpYWxpemF0aW9uCgkgKiB0aGlzIGNvZGUgaGF2ZSB0byBtYXAgdGhlIGZsYXNoIHRvIGl0cyBmaW5hbCBwb3NpdGlvbgoJICovCgltb3YJJGJvYXJkX2luaXQxNl9yZXQsICVicAoJam1wCWJvYXJkX2luaXQxNgpib2FyZF9pbml0MTZfcmV0OgoKCS8qIFR1cm4gb2YgY2FjaGUgKHRoaXMgbWlnaHQgcmVxdWlyZSBhIDQ4Ni1jbGFzcyBDUFUpICovCgltb3ZsCSVjcjAsICVlYXgKCW9ybAkkMHg2MDAwMDAwMCwlZWF4Cgltb3ZsCSVlYXgsICVjcjAKCXdiaW52ZAoKCS8qIGxvYWQgdGhlIHRlbXBvcmFyeSBHbG9iYWwgRGVzY3JpcHRvciBUYWJsZSAqLwpvMzIgY3MJbGdkdAlnZHRfcHRyCgoJLyogTm93LCB3ZSBlbnRlciBwcm90ZWN0ZWQgbW9kZSAqLwoJbW92bAklY3IwLCAlZWF4CglvcmwJJDEsJWVheAoJbW92bAklZWF4LCAlY3IwCgoJLyogRmx1c2ggdGhlIHByZWZldGNoIHF1ZXVlICovCglqbXAJZmYKZmY6CgkvKiBUZWxsIDMyLWJpdCBjb2RlIGl0IGlzIGJlaW5nIGVudGVyZWQgZnJvbSBoYXJkLXJlc2V0ICovCgltb3Z3CSQweDAwMDEsICVieAoKCS8qIEZpbmFsbHkganVtcCB0byB0aGUgMzJiaXQgaW5pdGlhbGl6YXRpb24gY29kZSAqLwoJbW92dwkkY29kZTMyc3RhcnQsICVheAoJbW92dwklYXgsJWJwCm8zMiBjcwlsam1wCSooJWJwKQoKCS8qIDQ4LWJpdCBmYXIgcG9pbnRlciAqLwpjb2RlMzJzdGFydDoKCS5sb25nCV9zdGFydAkJLyogb2Zmc2V0ICovCgkud29yZAkweDEwCQkvKiBzZWdtZW50ICovCgovKgogKiBUaGUgZm9sbG93aW5nIEdsb2JhbCBEZXNjcmlwdG9yIFRhYmxlIGlzIGp1c3QgZW5vdWdoIHRvIGdldCB1cyBpbnRvCiAqICdGbGF0IFByb3RlY3RlZCBNb2RlJyAtIEl0IHdpbGwgYmUgZGlzY2FyZGVkIGFzIHNvb24gYXMgdGhlIGZpbmFsCiAqIEdEVCBpcyBzZXR1cCBpbiBhIHNhZmUgbG9jYXRpb24gaW4gUkFNCiAqLwpnZHRfcHRyOgoJLndvcmQJMHgyMAkJLyogbGltaXQgKDMyIGJ5dGVzID0gNCBHRFQgZW50cmllcykgKi8KCS5sb25nCUJPT1RfU0VHICsgZ2R0CS8qIGJhc2UgKi8KCgkvKiBUaGUgR0RUIHRhYmxlIC4uLgoJICoKCSAqCSBTZWxlY3RvcglUeXBlCgkgKgkgMHgwMAkJTlVMTAoJICoJIDB4MDgJCVVudXNlZAoJICoJIDB4MTAJCTMyYml0IGNvZGUKCSAqCSAweDE4CQkzMmJpdCBkYXRhL3N0YWNrCgkgKi8KCmdkdDoKCS53b3JkCTAsIDAsIDAsIDAJLyogTlVMTCAgKi8KCS53b3JkCTAsIDAsIDAsIDAJLyogdW51c2VkICovCgoJLndvcmQJMHhGRkZGCQkvKiA0R2IgLSAoMHgxMDAwMDAqMHgxMDAwID0gNEdiKSAqLwoJLndvcmQJMAkJLyogYmFzZSBhZGRyZXNzID0gMCAqLwoJLndvcmQJMHg5QjAwCQkvKiBjb2RlIHJlYWQvZXhlYyAqLwoJLndvcmQJMHgwMENGCQkvKiBncmFudWxhcml0eSA9IDQwOTYsIDM4NiAoKzV0aCBuaWJibGUgb2YgbGltaXQpICovCgoJLndvcmQJMHhGRkZGCQkvKiA0R2IgLSAoMHgxMDAwMDAqMHgxMDAwID0gNEdiKSAqLwoJLndvcmQJMHgwCQkvKiBiYXNlIGFkZHJlc3MgPSAwICovCgkud29yZAkweDkzMDAJCS8qIGRhdGEgcmVhZC93cml0ZSAqLwoJLndvcmQJMHgwMENGCQkvKiBncmFudWxhcml0eSA9IDQwOTYsIDM4NiAoKzV0aCBuaWJibGUgb2YgbGltaXQpICovCg==