LyoqDQogKiBcZmlsZQ0KICoNCiAqIFxicmllZiBDb21tb25seSB1c2VkIGluY2x1ZGVzLCB0eXBlcyBhbmQgbWFjcm9zLg0KICoNCiAqIENvcHlyaWdodCAoYykgMjAxMC0yMDEyIEF0bWVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KICoNCiAqIFxhc2ZfbGljZW5zZV9zdGFydA0KICoNCiAqIFxwYWdlIExpY2Vuc2UNCiAqDQogKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KICoNCiAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCiAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQogKg0KICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbg0KICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQogKg0KICogMy4gVGhlIG5hbWUgb2YgQXRtZWwgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkDQogKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQogKg0KICogNC4gVGhpcyBzb2Z0d2FyZSBtYXkgb25seSBiZSByZWRpc3RyaWJ1dGVkIGFuZCB1c2VkIGluIGNvbm5lY3Rpb24gd2l0aCBhbg0KICogICAgQXRtZWwgbWljcm9jb250cm9sbGVyIHByb2R1Y3QuDQogKg0KICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBVE1FTCAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEDQogKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRg0KICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVCBBUkUNCiAqIEVYUFJFU1NMWSBBTkQgU1BFQ0lGSUNBTExZIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFUTUVMIEJFIExJQUJMRSBGT1INCiAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwNCiAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTDQogKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikNCiAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwNCiAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTg0KICogQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFDQogKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCiAqDQogKiBcYXNmX2xpY2Vuc2Vfc3RvcA0KICoNCiAqLw0KDQojaWZuZGVmIFVUSUxTX0NPTVBJTEVSX0gNCiNkZWZpbmUgVVRJTFNfQ09NUElMRVJfSA0KDQovKioNCiAqIFxkZWZncm91cCBncm91cF9zYW1fdXRpbHMgQ29tcGlsZXIgYWJzdHJhY3Rpb24gbGF5ZXIgYW5kIGNvZGUgdXRpbGl0aWVzDQogKg0KICogQ29tcGlsZXIgYWJzdHJhY3Rpb24gbGF5ZXIgYW5kIGNvZGUgdXRpbGl0aWVzIGZvciBBVDkxU0FNLg0KICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdmFyaW91cyBhYnN0cmFjdGlvbiBsYXllcnMgYW5kIHV0aWxpdGllcyB0byBtYWtlIGNvZGUgY29tcGF0aWJsZSBiZXR3ZWVuIGRpZmZlcmVudCBjb21waWxlcnMuDQogKg0KICogXHsNCiAqLw0KI2luY2x1ZGUgPHN0ZGRlZi5oPg0KDQojaWYgKGRlZmluZWQgX19JQ0NBUk1fXykNCiMgIGluY2x1ZGUgPGludHJpbnNpY3MuaD4NCiNlbmRpZg0KDQojaW5jbHVkZSA8cGFydHMuaD4NCiNpbmNsdWRlICJwcmVwcm9jZXNzb3IuaCINCg0KI2luY2x1ZGUgPGlvLmg+DQoNCi8vX19fX18gRCBFIEMgTCBBIFIgQSBUIEkgTyBOIFMgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18NCg0KI2lmbmRlZiBfX0FTU0VNQkxZX18gLy8gTm90IGRlZmluZWQgZm9yIGFzc2VtYmxpbmcuDQoNCiNpbmNsdWRlIDxzdGRpby5oPg0KI2luY2x1ZGUgPHN0ZGJvb2wuaD4NCiNpbmNsdWRlIDxzdGRpbnQuaD4NCiNpbmNsdWRlIDxzdGRsaWIuaD4NCg0KI2lmZGVmIF9fSUNDQVJNX18NCi8qISBcbmFtZSBDb21waWxlciBLZXl3b3Jkcw0KICoNCiAqIFBvcnQgb2Ygc29tZSBrZXl3b3JkcyBmcm9tIEdDQyB0byBJQVIgRW1iZWRkZWQgV29ya2JlbmNoLg0KICovDQovLyEgQHsNCiNkZWZpbmUgX19hc21fXyAgICAgICAgICAgICBhc20NCiNkZWZpbmUgX19pbmxpbmVfXyAgICAgICAgICBpbmxpbmUNCiNkZWZpbmUgX192b2xhdGlsZV9fDQovLyEgQH0NCg0KI2VuZGlmDQoNCi8qKg0KICogXGRlZiBVTlVTRUQNCiAqIFxicmllZiBNYXJraW5nIFxhIHYgYXMgYSB1bnVzZWQgcGFyYW1ldGVyIG9yIHZhbHVlLg0KICovDQojZGVmaW5lIFVOVVNFRCh2KSAgICAgICAgICAodm9pZCkodikNCg0KLyoqDQogKiBcZGVmIHVudXNlZA0KICogXGJyaWVmIE1hcmtpbmcgXGEgdiBhcyBhIHVudXNlZCBwYXJhbWV0ZXIgb3IgdmFsdWUuDQogKi8NCiNkZWZpbmUgdW51c2VkKHYpICAgICAgICAgIGRvIHsgKHZvaWQpKHYpOyB9IHdoaWxlKDApDQoNCi8qKg0KICogXGRlZiBiYXJyaWVyDQogKiBcYnJpZWYgTWVtb3J5IGJhcnJpZXINCiAqLw0KI2RlZmluZSBiYXJyaWVyKCkgICAgICAgICAgX19ETUIoKQ0KDQovKioNCiAqIFxicmllZiBFbWl0IHRoZSBjb21waWxlciBwcmFnbWEgXGEgYXJnLg0KICoNCiAqIFxwYXJhbSBhcmcgVGhlIHByYWdtYSBkaXJlY3RpdmUgYXMgaXQgd291bGQgYXBwZWFyIGFmdGVyIFxlIFwjcHJhZ21hDQogKiAoaS5lLiBub3Qgc3RyaW5naWZpZWQpLg0KICovDQojZGVmaW5lIENPTVBJTEVSX1BSQUdNQShhcmcpICAgICAgICAgICAgX1ByYWdtYSgjYXJnKQ0KDQovKioNCiAqIFxkZWYgQ09NUElMRVJfUEFDS19TRVQoYWxpZ25tZW50KQ0KICogXGJyaWVmIFNldCBtYXhpbXVtIGFsaWdubWVudCBmb3Igc3Vic2VxdWVudCBzdHJ1Y3QgYW5kIHVuaW9uDQogKiBkZWZpbml0aW9ucyB0byBcYSBhbGlnbm1lbnQuDQogKi8NCiNkZWZpbmUgQ09NUElMRVJfUEFDS19TRVQoYWxpZ25tZW50KSAgIENPTVBJTEVSX1BSQUdNQShwYWNrKGFsaWdubWVudCkpDQoNCi8qKg0KICogXGRlZiBDT01QSUxFUl9QQUNLX1JFU0VUKCkNCiAqIFxicmllZiBTZXQgZGVmYXVsdCBhbGlnbm1lbnQgZm9yIHN1YnNlcXVlbnQgc3RydWN0IGFuZCB1bmlvbg0KICogZGVmaW5pdGlvbnMuDQogKi8NCiNkZWZpbmUgQ09NUElMRVJfUEFDS19SRVNFVCgpICAgICAgICAgIENPTVBJTEVSX1BSQUdNQShwYWNrKCkpDQoNCg0KLyoqDQogKiBcYnJpZWYgU2V0IGFsaWduZWQgYm91bmRhcnkuDQogKi8NCiNpZiAoZGVmaW5lZCBfX0dOVUNfXykgfHwgKGRlZmluZWQgX19DQ19BUk0pDQojICAgZGVmaW5lIENPTVBJTEVSX0FMSUdORUQoYSkgICAgX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oYSkpKQ0KI2VsaWYgKGRlZmluZWQgX19JQ0NBUk1fXykNCiMgICBkZWZpbmUgQ09NUElMRVJfQUxJR05FRChhKSAgICBDT01QSUxFUl9QUkFHTUEoZGF0YV9hbGlnbm1lbnQgPSBhKQ0KI2VuZGlmDQoNCi8qKg0KICogXGJyaWVmIFNldCB3b3JkLWFsaWduZWQgYm91bmRhcnkuDQogKi8NCiNpZiAoZGVmaW5lZCBfX0dOVUNfXykgfHwgZGVmaW5lZChfX0NDX0FSTSkNCiNkZWZpbmUgQ09NUElMRVJfV09SRF9BTElHTkVEICAgIF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKDQpKSkNCiNlbGlmIChkZWZpbmVkIF9fSUNDQVJNX18pDQojZGVmaW5lIENPTVBJTEVSX1dPUkRfQUxJR05FRCAgICBDT01QSUxFUl9QUkFHTUEoZGF0YV9hbGlnbm1lbnQgPSA0KQ0KI2VuZGlmDQoNCi8qKg0KICogXGRlZiBfX2Fsd2F5c19pbmxpbmUNCiAqIFxicmllZiBUaGUgZnVuY3Rpb24gc2hvdWxkIGFsd2F5cyBiZSBpbmxpbmVkLg0KICoNCiAqIFRoaXMgYW5ub3RhdGlvbiBpbnN0cnVjdHMgdGhlIGNvbXBpbGVyIHRvIGlnbm9yZSBpdHMgaW5saW5pbmcNCiAqIGhldXJpc3RpY3MgYW5kIGlubGluZSB0aGUgZnVuY3Rpb24gbm8gbWF0dGVyIGhvdyBiaWcgaXQgdGhpbmtzIGl0DQogKiBiZWNvbWVzLg0KICovDQojaWYgZGVmaW5lZChfX0NDX0FSTSkNCiMgICAgICAgZGVmaW5lIF9fYWx3YXlzX2lubGluZSAgIF9fZm9yY2VpbmxpbmUNCiNlbGlmIChkZWZpbmVkIF9fR05VQ19fKQ0KIwlkZWZpbmUgX19hbHdheXNfaW5saW5lICAgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKSBpbmxpbmUNCiNlbGlmIChkZWZpbmVkIF9fSUNDQVJNX18pDQojCWRlZmluZSBfX2Fsd2F5c19pbmxpbmUgICBfUHJhZ21hKCJpbmxpbmU9Zm9yY2VkIikNCiNlbmRpZg0KDQovKiEgXGJyaWVmIFRoaXMgbWFjcm8gaXMgdXNlZCB0byB0ZXN0IGZhdGFsIGVycm9ycy4NCiAqDQogKiBUaGUgbWFjcm8gdGVzdHMgaWYgdGhlIGV4cHJlc3Npb24gaXMgZmFsc2UuIElmIGl0IGlzLCBhIGZhdGFsIGVycm9yIGlzDQogKiBkZXRlY3RlZCBhbmQgdGhlIGFwcGxpY2F0aW9uIGhhbmdzIHVwLiBJZiBURVNUX1NVSVRFX0RFRklORV9BU1NFUlRfTUFDUk8NCiAqIGlzIGRlZmluZWQsIGEgdW5pdCB0ZXN0IHZlcnNpb24gb2YgdGhlIG1hY3JvIGlzIHVzZWQsIHRvIGFsbG93IGV4ZWN1dGlvbg0KICogb2YgZnVydGhlciB0ZXN0cyBhZnRlciBhIGZhbHNlIGV4cHJlc3Npb24uDQogKg0KICogXHBhcmFtIGV4cHIgIEV4cHJlc3Npb24gdG8gZXZhbHVhdGUgYW5kIHN1cHBvc2VkIHRvIGJlIG5vbnplcm8uDQogKi8NCiNpZiBkZWZpbmVkKF9BU1NFUlRfRU5BQkxFXykNCiMgIGlmIGRlZmluZWQoVEVTVF9TVUlURV9ERUZJTkVfQVNTRVJUX01BQ1JPKQ0KICAgICAvLyBBc3NlcnQoKSBpcyBkZWZpbmVkIGluIHVuaXRfdGVzdC9zdWl0ZS5oDQojICAgIGluY2x1ZGUgInVuaXRfdGVzdC9zdWl0ZS5oIg0KIyAgZWxzZQ0KI3VuZGVmIFRFU1RfU1VJVEVfREVGSU5FX0FTU0VSVF9NQUNSTw0KIyAgICBkZWZpbmUgQXNzZXJ0KGV4cHIpIFwNCgl7XA0KCQlpZiAoIShleHByKSkgd2hpbGUgKHRydWUpO1wNCgl9DQojICBlbmRpZg0KI2Vsc2UNCiMgIGRlZmluZSBBc3NlcnQoZXhwcikgKCh2b2lkKSAwKQ0KI2VuZGlmDQoNCi8qIERlZmluZSBhdHRyaWJ1dGUgKi8NCiNpZiBkZWZpbmVkICAgKCBfX0NDX0FSTSAgICkgLyogS2VpbCC1VmlzaW9uIDQgKi8NCiMgICBkZWZpbmUgV0VBSyBfX2F0dHJpYnV0ZV9fICgod2VhaykpDQojZWxpZiBkZWZpbmVkICggX19JQ0NBUk1fXyApIC8qIElBUiBFd2FybSA1LjQxKyAqLw0KIyAgIGRlZmluZSBXRUFLIF9fd2Vhaw0KI2VsaWYgZGVmaW5lZCAoICBfX0dOVUNfXyAgKSAvKiBHQ0MgQ1MzIDIwMDlxMy02OCAqLw0KIyAgIGRlZmluZSBXRUFLIF9fYXR0cmlidXRlX18gKCh3ZWFrKSkNCiNlbmRpZg0KDQovKiBEZWZpbmUgTk9fSU5JVCBhdHRyaWJ1dGUgKi8NCiNpZiBkZWZpbmVkICAgKCBfX0NDX0FSTSAgICkNCiMgICBkZWZpbmUgTk9fSU5JVCBfX2F0dHJpYnV0ZV9fKCh6ZXJvX2luaXQpKQ0KI2VsaWYgZGVmaW5lZCAoIF9fSUNDQVJNX18gKQ0KIyAgIGRlZmluZSBOT19JTklUIF9fbm9faW5pdA0KI2VsaWYgZGVmaW5lZCAoICBfX0dOVUNfXyAgKQ0KIyAgIGRlZmluZSBOT19JTklUIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5ub19pbml0IikpKQ0KI2VuZGlmDQoNCiNpbmNsdWRlICJpbnRlcnJ1cHQuaCINCg0KLyohIFxuYW1lIFVzdWFsIFR5cGVzDQogKi8NCi8vISBAew0KdHlwZWRlZiB1bnNpZ25lZCBjaGFyICAgICAgICAgICBCb29sOyAvLyE8IEJvb2xlYW4uDQojaWZuZGVmIF9fY3BsdXNwbHVzDQojaWYgIWRlZmluZWQoX19ib29sX3RydWVfZmFsc2VfYXJlX2RlZmluZWQpDQp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgICAgICAgICAgIGJvb2w7IC8vITwgQm9vbGVhbi4NCiNlbmRpZg0KI2VuZGlmDQp0eXBlZGVmIGludDhfdCAgICAgICAgICAgICAgICAgIFM4IDsgIC8vITwgOC1iaXQgc2lnbmVkIGludGVnZXIuDQp0eXBlZGVmIHVpbnQ4X3QgICAgICAgICAgICAgICAgIFU4IDsgIC8vITwgOC1iaXQgdW5zaWduZWQgaW50ZWdlci4NCnR5cGVkZWYgaW50MTZfdCAgICAgICAgICAgICAgICAgUzE2OyAgLy8hPCAxNi1iaXQgc2lnbmVkIGludGVnZXIuDQp0eXBlZGVmIHVpbnQxNl90ICAgICAgICAgICAgICAgIFUxNjsgIC8vITwgMTYtYml0IHVuc2lnbmVkIGludGVnZXIuDQp0eXBlZGVmIHVpbnQxNl90ICAgICAgICAgICAgICAgIGxlMTZfdDsNCnR5cGVkZWYgdWludDE2X3QgICAgICAgICAgICAgICAgYmUxNl90Ow0KdHlwZWRlZiBpbnQzMl90ICAgICAgICAgICAgICAgICBTMzI7ICAvLyE8IDMyLWJpdCBzaWduZWQgaW50ZWdlci4NCnR5cGVkZWYgdWludDMyX3QgICAgICAgICAgICAgICAgVTMyOyAgLy8hPCAzMi1iaXQgdW5zaWduZWQgaW50ZWdlci4NCnR5cGVkZWYgdWludDMyX3QgICAgICAgICAgICAgICAgbGUzMl90Ow0KdHlwZWRlZiB1aW50MzJfdCAgICAgICAgICAgICAgICBiZTMyX3Q7DQp0eXBlZGVmIGludDY0X3QgICAgICAgICAgICAgICAgIFM2NDsgIC8vITwgNjQtYml0IHNpZ25lZCBpbnRlZ2VyLg0KdHlwZWRlZiB1aW50NjRfdCAgICAgICAgICAgICAgICBVNjQ7ICAvLyE8IDY0LWJpdCB1bnNpZ25lZCBpbnRlZ2VyLg0KdHlwZWRlZiBmbG9hdCAgICAgICAgICAgICAgICAgICBGMzI7ICAvLyE8IDMyLWJpdCBmbG9hdGluZy1wb2ludCBudW1iZXIuDQp0eXBlZGVmIGRvdWJsZSAgICAgICAgICAgICAgICAgIEY2NDsgIC8vITwgNjQtYml0IGZsb2F0aW5nLXBvaW50IG51bWJlci4NCnR5cGVkZWYgdWludDMyX3QgICAgICAgICAgICAgICAgaXJhbV9zaXplX3Q7DQovLyEgQH0NCg0KDQovKiEgXG5hbWUgU3RhdHVzIFR5cGVzDQogKi8NCi8vISBAew0KdHlwZWRlZiBib29sICAgICAgICAgICAgICAgIFN0YXR1c19ib29sX3Q7ICAvLyE8IEJvb2xlYW4gc3RhdHVzLg0KdHlwZWRlZiBVOCAgICAgICAgICAgICAgICAgIFN0YXR1c190OyAgICAgICAvLyE8IDgtYml0LWNvZGVkIHN0YXR1cy4NCi8vISBAfQ0KDQoNCi8qISBcbmFtZSBBbGlhc2luZyBBZ2dyZWdhdGUgVHlwZXMNCiAqLw0KLy8hIEB7DQoNCi8vISAxNi1iaXQgdW5pb24uDQp0eXBlZGVmIHVuaW9uDQp7DQogIFMxNiBzMTYgICA7DQogIFUxNiB1MTYgICA7DQogIFM4ICBzOCBbMl07DQogIFU4ICB1OCBbMl07DQp9IFVuaW9uMTY7DQoNCi8vISAzMi1iaXQgdW5pb24uDQp0eXBlZGVmIHVuaW9uDQp7DQogIFMzMiBzMzIgICA7DQogIFUzMiB1MzIgICA7DQogIFMxNiBzMTZbMl07DQogIFUxNiB1MTZbMl07DQogIFM4ICBzOCBbNF07DQogIFU4ICB1OCBbNF07DQp9IFVuaW9uMzI7DQoNCi8vISA2NC1iaXQgdW5pb24uDQp0eXBlZGVmIHVuaW9uDQp7DQogIFM2NCBzNjQgICA7DQogIFU2NCB1NjQgICA7DQogIFMzMiBzMzJbMl07DQogIFUzMiB1MzJbMl07DQogIFMxNiBzMTZbNF07DQogIFUxNiB1MTZbNF07DQogIFM4ICBzOCBbOF07DQogIFU4ICB1OCBbOF07DQp9IFVuaW9uNjQ7DQoNCi8vISBVbmlvbiBvZiBwb2ludGVycyB0byA2NC0sIDMyLSwgMTYtIGFuZCA4LWJpdCB1bnNpZ25lZCBpbnRlZ2Vycy4NCnR5cGVkZWYgdW5pb24NCnsNCiAgUzY0ICpzNjRwdHI7DQogIFU2NCAqdTY0cHRyOw0KICBTMzIgKnMzMnB0cjsNCiAgVTMyICp1MzJwdHI7DQogIFMxNiAqczE2cHRyOw0KICBVMTYgKnUxNnB0cjsNCiAgUzggICpzOHB0ciA7DQogIFU4ICAqdThwdHIgOw0KfSBVbmlvblB0cjsNCg0KLy8hIFVuaW9uIG9mIHBvaW50ZXJzIHRvIHZvbGF0aWxlIDY0LSwgMzItLCAxNi0gYW5kIDgtYml0IHVuc2lnbmVkIGludGVnZXJzLg0KdHlwZWRlZiB1bmlvbg0Kew0KICB2b2xhdGlsZSBTNjQgKnM2NHB0cjsNCiAgdm9sYXRpbGUgVTY0ICp1NjRwdHI7DQogIHZvbGF0aWxlIFMzMiAqczMycHRyOw0KICB2b2xhdGlsZSBVMzIgKnUzMnB0cjsNCiAgdm9sYXRpbGUgUzE2ICpzMTZwdHI7DQogIHZvbGF0aWxlIFUxNiAqdTE2cHRyOw0KICB2b2xhdGlsZSBTOCAgKnM4cHRyIDsNCiAgdm9sYXRpbGUgVTggICp1OHB0ciA7DQp9IFVuaW9uVlB0cjsNCg0KLy8hIFVuaW9uIG9mIHBvaW50ZXJzIHRvIGNvbnN0YW50IDY0LSwgMzItLCAxNi0gYW5kIDgtYml0IHVuc2lnbmVkIGludGVnZXJzLg0KdHlwZWRlZiB1bmlvbg0Kew0KICBjb25zdCBTNjQgKnM2NHB0cjsNCiAgY29uc3QgVTY0ICp1NjRwdHI7DQogIGNvbnN0IFMzMiAqczMycHRyOw0KICBjb25zdCBVMzIgKnUzMnB0cjsNCiAgY29uc3QgUzE2ICpzMTZwdHI7DQogIGNvbnN0IFUxNiAqdTE2cHRyOw0KICBjb25zdCBTOCAgKnM4cHRyIDsNCiAgY29uc3QgVTggICp1OHB0ciA7DQp9IFVuaW9uQ1B0cjsNCg0KLy8hIFVuaW9uIG9mIHBvaW50ZXJzIHRvIGNvbnN0YW50IHZvbGF0aWxlIDY0LSwgMzItLCAxNi0gYW5kIDgtYml0IHVuc2lnbmVkIGludGVnZXJzLg0KdHlwZWRlZiB1bmlvbg0Kew0KICBjb25zdCB2b2xhdGlsZSBTNjQgKnM2NHB0cjsNCiAgY29uc3Qgdm9sYXRpbGUgVTY0ICp1NjRwdHI7DQogIGNvbnN0IHZvbGF0aWxlIFMzMiAqczMycHRyOw0KICBjb25zdCB2b2xhdGlsZSBVMzIgKnUzMnB0cjsNCiAgY29uc3Qgdm9sYXRpbGUgUzE2ICpzMTZwdHI7DQogIGNvbnN0IHZvbGF0aWxlIFUxNiAqdTE2cHRyOw0KICBjb25zdCB2b2xhdGlsZSBTOCAgKnM4cHRyIDsNCiAgY29uc3Qgdm9sYXRpbGUgVTggICp1OHB0ciA7DQp9IFVuaW9uQ1ZQdHI7DQoNCi8vISBTdHJ1Y3R1cmUgb2YgcG9pbnRlcnMgdG8gNjQtLCAzMi0sIDE2LSBhbmQgOC1iaXQgdW5zaWduZWQgaW50ZWdlcnMuDQp0eXBlZGVmIHN0cnVjdA0Kew0KICBTNjQgKnM2NHB0cjsNCiAgVTY0ICp1NjRwdHI7DQogIFMzMiAqczMycHRyOw0KICBVMzIgKnUzMnB0cjsNCiAgUzE2ICpzMTZwdHI7DQogIFUxNiAqdTE2cHRyOw0KICBTOCAgKnM4cHRyIDsNCiAgVTggICp1OHB0ciA7DQp9IFN0cnVjdFB0cjsNCg0KLy8hIFN0cnVjdHVyZSBvZiBwb2ludGVycyB0byB2b2xhdGlsZSA2NC0sIDMyLSwgMTYtIGFuZCA4LWJpdCB1bnNpZ25lZCBpbnRlZ2Vycy4NCnR5cGVkZWYgc3RydWN0DQp7DQogIHZvbGF0aWxlIFM2NCAqczY0cHRyOw0KICB2b2xhdGlsZSBVNjQgKnU2NHB0cjsNCiAgdm9sYXRpbGUgUzMyICpzMzJwdHI7DQogIHZvbGF0aWxlIFUzMiAqdTMycHRyOw0KICB2b2xhdGlsZSBTMTYgKnMxNnB0cjsNCiAgdm9sYXRpbGUgVTE2ICp1MTZwdHI7DQogIHZvbGF0aWxlIFM4ICAqczhwdHIgOw0KICB2b2xhdGlsZSBVOCAgKnU4cHRyIDsNCn0gU3RydWN0VlB0cjsNCg0KLy8hIFN0cnVjdHVyZSBvZiBwb2ludGVycyB0byBjb25zdGFudCA2NC0sIDMyLSwgMTYtIGFuZCA4LWJpdCB1bnNpZ25lZCBpbnRlZ2Vycy4NCnR5cGVkZWYgc3RydWN0DQp7DQogIGNvbnN0IFM2NCAqczY0cHRyOw0KICBjb25zdCBVNjQgKnU2NHB0cjsNCiAgY29uc3QgUzMyICpzMzJwdHI7DQogIGNvbnN0IFUzMiAqdTMycHRyOw0KICBjb25zdCBTMTYgKnMxNnB0cjsNCiAgY29uc3QgVTE2ICp1MTZwdHI7DQogIGNvbnN0IFM4ICAqczhwdHIgOw0KICBjb25zdCBVOCAgKnU4cHRyIDsNCn0gU3RydWN0Q1B0cjsNCg0KLy8hIFN0cnVjdHVyZSBvZiBwb2ludGVycyB0byBjb25zdGFudCB2b2xhdGlsZSA2NC0sIDMyLSwgMTYtIGFuZCA4LWJpdCB1bnNpZ25lZCBpbnRlZ2Vycy4NCnR5cGVkZWYgc3RydWN0DQp7DQogIGNvbnN0IHZvbGF0aWxlIFM2NCAqczY0cHRyOw0KICBjb25zdCB2b2xhdGlsZSBVNjQgKnU2NHB0cjsNCiAgY29uc3Qgdm9sYXRpbGUgUzMyICpzMzJwdHI7DQogIGNvbnN0IHZvbGF0aWxlIFUzMiAqdTMycHRyOw0KICBjb25zdCB2b2xhdGlsZSBTMTYgKnMxNnB0cjsNCiAgY29uc3Qgdm9sYXRpbGUgVTE2ICp1MTZwdHI7DQogIGNvbnN0IHZvbGF0aWxlIFM4ICAqczhwdHIgOw0KICBjb25zdCB2b2xhdGlsZSBVOCAgKnU4cHRyIDsNCn0gU3RydWN0Q1ZQdHI7DQoNCi8vISBAfQ0KDQojZW5kaWYgIC8vICNpZm5kZWYgX19BU1NFTUJMWV9fDQoNCi8qISBcbmFtZSBVc3VhbCBDb25zdGFudHMNCiAqLw0KLy8hIEB7DQojZGVmaW5lIERJU0FCTEUgICAwDQojZGVmaW5lIEVOQUJMRSAgICAxDQojaWZuZGVmIF9fY3BsdXNwbHVzDQojaWYgIWRlZmluZWQoX19ib29sX3RydWVfZmFsc2VfYXJlX2RlZmluZWQpDQojZGVmaW5lIGZhbHNlICAgICAwDQojZGVmaW5lIHRydWUgICAgICAxDQojZW5kaWYNCiNlbmRpZg0KI2RlZmluZSBQQVNTICAgICAgMA0KI2RlZmluZSBGQUlMICAgICAgMQ0KI2RlZmluZSBMT1cgICAgICAgMA0KI2RlZmluZSBISUdIICAgICAgMQ0KLy8hIEB9DQoNCg0KI2lmbmRlZiBfX0FTU0VNQkxZX18gLy8gbm90IGZvciBhc3NlbWJsaW5nLg0KDQovLyEgXG5hbWUgT3B0aW1pemF0aW9uIENvbnRyb2wNCi8vQHsNCg0KLyoqDQogKiBcZGVmIGxpa2VseShleHApDQogKiBcYnJpZWYgVGhlIGV4cHJlc3Npb24gXGEgZXhwIGlzIGxpa2VseSB0byBiZSB0cnVlDQogKi8NCiNpZm5kZWYgbGlrZWx5DQojICAgZGVmaW5lIGxpa2VseShleHApICAgIChleHApDQojZW5kaWYNCg0KLyoqDQogKiBcZGVmIHVubGlrZWx5KGV4cCkNCiAqIFxicmllZiBUaGUgZXhwcmVzc2lvbiBcYSBleHAgaXMgdW5saWtlbHkgdG8gYmUgdHJ1ZQ0KICovDQojaWZuZGVmIHVubGlrZWx5DQojICAgZGVmaW5lIHVubGlrZWx5KGV4cCkgIChleHApDQojZW5kaWYNCg0KLyoqDQogKiBcZGVmIGlzX2NvbnN0YW50KGV4cCkNCiAqIFxicmllZiBEZXRlcm1pbmUgaWYgYW4gZXhwcmVzc2lvbiBldmFsdWF0ZXMgdG8gYSBjb25zdGFudCB2YWx1ZS4NCiAqDQogKiBccGFyYW0gZXhwIEFueSBleHByZXNzaW9uDQogKg0KICogXHJldHVybiB0cnVlIGlmIFxhIGV4cCBpcyBjb25zdGFudCwgZmFsc2Ugb3RoZXJ3aXNlLg0KICovDQojaWYgKGRlZmluZWQgX19HTlVDX18pIHx8IChkZWZpbmVkIF9fQ0NfQVJNKQ0KIyAgIGRlZmluZSBpc19jb25zdGFudChleHApICAgICAgIF9fYnVpbHRpbl9jb25zdGFudF9wKGV4cCkNCiNlbHNlDQojICAgZGVmaW5lIGlzX2NvbnN0YW50KGV4cCkgICAgICAgKDApDQojZW5kaWYNCg0KLy8hIEB9DQoNCi8qISBcbmFtZSBCaXQtRmllbGQgSGFuZGxpbmcNCiAqLw0KLy8hIEB7DQoNCi8qISBcYnJpZWYgUmVhZHMgdGhlIGJpdHMgb2YgYSB2YWx1ZSBzcGVjaWZpZWQgYnkgYSBnaXZlbiBiaXQtbWFzay4NCiAqDQogKiBccGFyYW0gdmFsdWUgVmFsdWUgdG8gcmVhZCBiaXRzIGZyb20uDQogKiBccGFyYW0gbWFzayAgQml0LW1hc2sgaW5kaWNhdGluZyBiaXRzIHRvIHJlYWQuDQogKg0KICogXHJldHVybiBSZWFkIGJpdHMuDQogKi8NCiNkZWZpbmUgUmRfYml0cyggdmFsdWUsIG1hc2spICAgICAgICAoKHZhbHVlKSAmIChtYXNrKSkNCg0KLyohIFxicmllZiBXcml0ZXMgdGhlIGJpdHMgb2YgYSBDIGx2YWx1ZSBzcGVjaWZpZWQgYnkgYSBnaXZlbiBiaXQtbWFzay4NCiAqDQogKiBccGFyYW0gbHZhbHVlICBDIGx2YWx1ZSB0byB3cml0ZSBiaXRzIHRvLg0KICogXHBhcmFtIG1hc2sgICAgQml0LW1hc2sgaW5kaWNhdGluZyBiaXRzIHRvIHdyaXRlLg0KICogXHBhcmFtIGJpdHMgICAgQml0cyB0byB3cml0ZS4NCiAqDQogKiBccmV0dXJuIFJlc3VsdGluZyB2YWx1ZSB3aXRoIHdyaXR0ZW4gYml0cy4NCiAqLw0KI2RlZmluZSBXcl9iaXRzKGx2YWx1ZSwgbWFzaywgYml0cykgICgobHZhbHVlKSA9ICgobHZhbHVlKSAmIH4obWFzaykpIHxcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChiaXRzICApICYgIChtYXNrKSkpDQoNCi8qISBcYnJpZWYgVGVzdHMgdGhlIGJpdHMgb2YgYSB2YWx1ZSBzcGVjaWZpZWQgYnkgYSBnaXZlbiBiaXQtbWFzay4NCiAqDQogKiBccGFyYW0gdmFsdWUgVmFsdWUgb2Ygd2hpY2ggdG8gdGVzdCBiaXRzLg0KICogXHBhcmFtIG1hc2sgIEJpdC1tYXNrIGluZGljYXRpbmcgYml0cyB0byB0ZXN0Lg0KICoNCiAqIFxyZXR1cm4gXGMgMSBpZiBhdCBsZWFzdCBvbmUgb2YgdGhlIHRlc3RlZCBiaXRzIGlzIHNldCwgZWxzZSBcYyAwLg0KICovDQojZGVmaW5lIFRzdF9iaXRzKCB2YWx1ZSwgbWFzaykgIChSZF9iaXRzKHZhbHVlLCBtYXNrKSAhPSAwKQ0KDQovKiEgXGJyaWVmIENsZWFycyB0aGUgYml0cyBvZiBhIEMgbHZhbHVlIHNwZWNpZmllZCBieSBhIGdpdmVuIGJpdC1tYXNrLg0KICoNCiAqIFxwYXJhbSBsdmFsdWUgIEMgbHZhbHVlIG9mIHdoaWNoIHRvIGNsZWFyIGJpdHMuDQogKiBccGFyYW0gbWFzayAgICBCaXQtbWFzayBpbmRpY2F0aW5nIGJpdHMgdG8gY2xlYXIuDQogKg0KICogXHJldHVybiBSZXN1bHRpbmcgdmFsdWUgd2l0aCBjbGVhcmVkIGJpdHMuDQogKi8NCiNkZWZpbmUgQ2xyX2JpdHMobHZhbHVlLCBtYXNrKSAgKChsdmFsdWUpICY9IH4obWFzaykpDQoNCi8qISBcYnJpZWYgU2V0cyB0aGUgYml0cyBvZiBhIEMgbHZhbHVlIHNwZWNpZmllZCBieSBhIGdpdmVuIGJpdC1tYXNrLg0KICoNCiAqIFxwYXJhbSBsdmFsdWUgIEMgbHZhbHVlIG9mIHdoaWNoIHRvIHNldCBiaXRzLg0KICogXHBhcmFtIG1hc2sgICAgQml0LW1hc2sgaW5kaWNhdGluZyBiaXRzIHRvIHNldC4NCiAqDQogKiBccmV0dXJuIFJlc3VsdGluZyB2YWx1ZSB3aXRoIHNldCBiaXRzLg0KICovDQojZGVmaW5lIFNldF9iaXRzKGx2YWx1ZSwgbWFzaykgICgobHZhbHVlKSB8PSAgKG1hc2spKQ0KDQovKiEgXGJyaWVmIFRvZ2dsZXMgdGhlIGJpdHMgb2YgYSBDIGx2YWx1ZSBzcGVjaWZpZWQgYnkgYSBnaXZlbiBiaXQtbWFzay4NCiAqDQogKiBccGFyYW0gbHZhbHVlICBDIGx2YWx1ZSBvZiB3aGljaCB0byB0b2dnbGUgYml0cy4NCiAqIFxwYXJhbSBtYXNrICAgIEJpdC1tYXNrIGluZGljYXRpbmcgYml0cyB0byB0b2dnbGUuDQogKg0KICogXHJldHVybiBSZXN1bHRpbmcgdmFsdWUgd2l0aCB0b2dnbGVkIGJpdHMuDQogKi8NCiNkZWZpbmUgVGdsX2JpdHMobHZhbHVlLCBtYXNrKSAgKChsdmFsdWUpIF49ICAobWFzaykpDQoNCi8qISBcYnJpZWYgUmVhZHMgdGhlIGJpdC1maWVsZCBvZiBhIHZhbHVlIHNwZWNpZmllZCBieSBhIGdpdmVuIGJpdC1tYXNrLg0KICoNCiAqIFxwYXJhbSB2YWx1ZSBWYWx1ZSB0byByZWFkIGEgYml0LWZpZWxkIGZyb20uDQogKiBccGFyYW0gbWFzayAgQml0LW1hc2sgaW5kaWNhdGluZyB0aGUgYml0LWZpZWxkIHRvIHJlYWQuDQogKg0KICogXHJldHVybiBSZWFkIGJpdC1maWVsZC4NCiAqLw0KI2RlZmluZSBSZF9iaXRmaWVsZCggdmFsdWUsIG1hc2spICAgICAgICAgICAoUmRfYml0cyggdmFsdWUsIG1hc2spID4+IGN0eihtYXNrKSkNCg0KLyohIFxicmllZiBXcml0ZXMgdGhlIGJpdC1maWVsZCBvZiBhIEMgbHZhbHVlIHNwZWNpZmllZCBieSBhIGdpdmVuIGJpdC1tYXNrLg0KICoNCiAqIFxwYXJhbSBsdmFsdWUgICAgQyBsdmFsdWUgdG8gd3JpdGUgYSBiaXQtZmllbGQgdG8uDQogKiBccGFyYW0gbWFzayAgICAgIEJpdC1tYXNrIGluZGljYXRpbmcgdGhlIGJpdC1maWVsZCB0byB3cml0ZS4NCiAqIFxwYXJhbSBiaXRmaWVsZCAgQml0LWZpZWxkIHRvIHdyaXRlLg0KICoNCiAqIFxyZXR1cm4gUmVzdWx0aW5nIHZhbHVlIHdpdGggd3JpdHRlbiBiaXQtZmllbGQuDQogKi8NCiNkZWZpbmUgV3JfYml0ZmllbGQobHZhbHVlLCBtYXNrLCBiaXRmaWVsZCkgKFdyX2JpdHMobHZhbHVlLCBtYXNrLCAoVTMyKShiaXRmaWVsZCkgPDwgY3R6KG1hc2spKSkNCg0KLy8hIEB9DQoNCg0KLyohIFxuYW1lIFplcm8tQml0IENvdW50aW5nDQogKg0KICogVW5kZXIgR0NDLCBfX2J1aWx0aW5fY2x6IGFuZCBfX2J1aWx0aW5fY3R6IGJlaGF2ZSBsaWtlIG1hY3JvcyB3aGVuDQogKiBhcHBsaWVkIHRvIGNvbnN0YW50IGV4cHJlc3Npb25zICh2YWx1ZXMga25vd24gYXQgY29tcGlsZSB0aW1lKSwgc28gdGhleSBhcmUNCiAqIG1vcmUgb3B0aW1pemVkIHRoYW4gdGhlIHVzZSBvZiB0aGUgY29ycmVzcG9uZGluZyBhc3NlbWJseSBpbnN0cnVjdGlvbnMgYW5kDQogKiB0aGV5IGNhbiBiZSB1c2VkIGFzIGNvbnN0YW50IGV4cHJlc3Npb25zIGUuZy4gdG8gaW5pdGlhbGl6ZSBvYmplY3RzIGhhdmluZw0KICogc3RhdGljIHN0b3JhZ2UgZHVyYXRpb24sIGFuZCBsaWtlIHRoZSBjb3JyZXNwb25kaW5nIGFzc2VtYmx5IGluc3RydWN0aW9ucw0KICogd2hlbiBhcHBsaWVkIHRvIG5vbi1jb25zdGFudCBleHByZXNzaW9ucyAodmFsdWVzIHVua25vd24gYXQgY29tcGlsZSB0aW1lKSwgc28NCiAqIHRoZXkgYXJlIG1vcmUgb3B0aW1pemVkIHRoYW4gYW4gYXNzZW1ibHkgcGVyaXBocmFzaXMuIEhlbmNlLCBjbHogYW5kIGN0eg0KICogZW5zdXJlIGEgcG9zc2libGUgYW5kIG9wdGltaXplZCBiZWhhdmlvciBmb3IgYm90aCBjb25zdGFudCBhbmQgbm9uLWNvbnN0YW50DQogKiBleHByZXNzaW9ucy4NCiAqLw0KLy8hIEB7DQoNCi8qISBcYnJpZWYgQ291bnRzIHRoZSBsZWFkaW5nIHplcm8gYml0cyBvZiB0aGUgZ2l2ZW4gdmFsdWUgY29uc2lkZXJlZCBhcyBhIDMyLWJpdCBpbnRlZ2VyLg0KICoNCiAqIFxwYXJhbSB1IFZhbHVlIG9mIHdoaWNoIHRvIGNvdW50IHRoZSBsZWFkaW5nIHplcm8gYml0cy4NCiAqDQogKiBccmV0dXJuIFRoZSBjb3VudCBvZiBsZWFkaW5nIHplcm8gYml0cyBpbiBcYSB1Lg0KICovDQojaWYgKGRlZmluZWQgX19HTlVDX18pIHx8IChkZWZpbmVkIF9fQ0NfQVJNKQ0KIyAgIGRlZmluZSBjbHoodSkgICAgICAgICAgICAgIF9fYnVpbHRpbl9jbHoodSkNCiNlbGlmIChkZWZpbmVkIF9fSUNDQVJNX18pDQojICAgZGVmaW5lIGNseih1KSAgICAgICAgICAgICAgX19DTFoodSkNCiNlbHNlDQojICAgZGVmaW5lIGNseih1KSAgICAgICAgICAgICAgKCgodSkgPT0gMCkgICAgICAgICAgPyAzMiA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1KSAmICgxdWwgPDwgMzEpKSA/ICAwIDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHUpICYgKDF1bCA8PCAzMCkpID8gIDEgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodSkgJiAoMXVsIDw8IDI5KSkgPyAgMiA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1KSAmICgxdWwgPDwgMjgpKSA/ICAzIDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHUpICYgKDF1bCA8PCAyNykpID8gIDQgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodSkgJiAoMXVsIDw8IDI2KSkgPyAgNSA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1KSAmICgxdWwgPDwgMjUpKSA/ICA2IDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHUpICYgKDF1bCA8PCAyNCkpID8gIDcgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodSkgJiAoMXVsIDw8IDIzKSkgPyAgOCA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1KSAmICgxdWwgPDwgMjIpKSA/ICA5IDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHUpICYgKDF1bCA8PCAyMSkpID8gMTAgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodSkgJiAoMXVsIDw8IDIwKSkgPyAxMSA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1KSAmICgxdWwgPDwgMTkpKSA/IDEyIDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHUpICYgKDF1bCA8PCAxOCkpID8gMTMgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodSkgJiAoMXVsIDw8IDE3KSkgPyAxNCA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1KSAmICgxdWwgPDwgMTYpKSA/IDE1IDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHUpICYgKDF1bCA8PCAxNSkpID8gMTYgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodSkgJiAoMXVsIDw8IDE0KSkgPyAxNyA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1KSAmICgxdWwgPDwgMTMpKSA/IDE4IDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHUpICYgKDF1bCA8PCAxMikpID8gMTkgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodSkgJiAoMXVsIDw8IDExKSkgPyAyMCA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1KSAmICgxdWwgPDwgMTApKSA/IDIxIDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHUpICYgKDF1bCA8PCAgOSkpID8gMjIgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodSkgJiAoMXVsIDw8ICA4KSkgPyAyMyA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1KSAmICgxdWwgPDwgIDcpKSA/IDI0IDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHUpICYgKDF1bCA8PCAgNikpID8gMjUgOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodSkgJiAoMXVsIDw8ICA1KSkgPyAyNiA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1KSAmICgxdWwgPDwgIDQpKSA/IDI3IDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHUpICYgKDF1bCA8PCAgMykpID8gMjggOiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodSkgJiAoMXVsIDw8ICAyKSkgPyAyOSA6IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1KSAmICgxdWwgPDwgIDEpKSA/IDMwIDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMSkNCiNlbmRpZg0KDQovKiEgXGJyaWVmIENvdW50cyB0aGUgdHJhaWxpbmcgemVybyBiaXRzIG9mIHRoZSBnaXZlbiB2YWx1ZSBjb25zaWRlcmVkIGFzIGEgMzItYml0IGludGVnZXIuDQogKg0KICogXHBhcmFtIHUgVmFsdWUgb2Ygd2hpY2ggdG8gY291bnQgdGhlIHRyYWlsaW5nIHplcm8gYml0cy4NCiAqDQogKiBccmV0dXJuIFRoZSBjb3VudCBvZiB0cmFpbGluZyB6ZXJvIGJpdHMgaW4gXGEgdS4NCiAqLw0KI2lmIChkZWZpbmVkIF9fR05VQ19fKSB8fCAoZGVmaW5lZCBfX0NDX0FSTSkNCiMgICBkZWZpbmUgY3R6KHUpICAgICAgICAgICAgICBfX2J1aWx0aW5fY3R6KHUpDQojZWxzZQ0KIyAgIGRlZmluZSBjdHoodSkgICAgICAgICAgICAgICgodSkgJiAoMXVsIDw8ICAwKSA/ICAwIDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodSkgJiAoMXVsIDw8ICAxKSA/ICAxIDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodSkgJiAoMXVsIDw8ICAyKSA/ICAyIDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodSkgJiAoMXVsIDw8ICAzKSA/ICAzIDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodSkgJiAoMXVsIDw8ICA0KSA/ICA0IDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodSkgJiAoMXVsIDw8ICA1KSA/ICA1IDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodSkgJiAoMXVsIDw8ICA2KSA/ICA2IDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodSkgJiAoMXVsIDw8ICA3KSA/ICA3IDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodSkgJiAoMXVsIDw8ICA4KSA/ICA4IDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodSkgJiAoMXVsIDw8ICA5KSA/ICA5IDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodSkgJiAoMXVsIDw8IDEwKSA/IDEwIDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodSkgJiAoMXVsIDw8IDExKSA/IDExIDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodSkgJiAoMXVsIDw8IDEyKSA/IDEyIDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodSkgJiAoMXVsIDw8IDEzKSA/IDEzIDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodSkgJiAoMXVsIDw8IDE0KSA/IDE0IDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodSkgJiAoMXVsIDw8IDE1KSA/IDE1IDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodSkgJiAoMXVsIDw8IDE2KSA/IDE2IDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodSkgJiAoMXVsIDw8IDE3KSA/IDE3IDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodSkgJiAoMXVsIDw8IDE4KSA/IDE4IDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodSkgJiAoMXVsIDw8IDE5KSA/IDE5IDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodSkgJiAoMXVsIDw8IDIwKSA/IDIwIDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodSkgJiAoMXVsIDw8IDIxKSA/IDIxIDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodSkgJiAoMXVsIDw8IDIyKSA/IDIyIDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodSkgJiAoMXVsIDw8IDIzKSA/IDIzIDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodSkgJiAoMXVsIDw8IDI0KSA/IDI0IDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodSkgJiAoMXVsIDw8IDI1KSA/IDI1IDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodSkgJiAoMXVsIDw8IDI2KSA/IDI2IDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodSkgJiAoMXVsIDw8IDI3KSA/IDI3IDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodSkgJiAoMXVsIDw8IDI4KSA/IDI4IDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodSkgJiAoMXVsIDw8IDI5KSA/IDI5IDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodSkgJiAoMXVsIDw8IDMwKSA/IDMwIDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodSkgJiAoMXVsIDw8IDMxKSA/IDMxIDogXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMikNCiNlbmRpZg0KDQovLyEgQH0NCg0KDQovKiEgXG5hbWUgQml0IFJldmVyc2luZw0KICovDQovLyEgQHsNCg0KLyohIFxicmllZiBSZXZlcnNlcyB0aGUgYml0cyBvZiBcYSB1OC4NCiAqDQogKiBccGFyYW0gdTggIFU4IG9mIHdoaWNoIHRvIHJldmVyc2UgdGhlIGJpdHMuDQogKg0KICogXHJldHVybiBWYWx1ZSByZXN1bHRpbmcgZnJvbSBcYSB1OCB3aXRoIHJldmVyc2VkIGJpdHMuDQogKi8NCiNkZWZpbmUgYml0X3JldmVyc2U4KHU4KSAgICAoKFU4KShiaXRfcmV2ZXJzZTMyKChVOCkodTgpKSA+PiAyNCkpDQoNCi8qISBcYnJpZWYgUmV2ZXJzZXMgdGhlIGJpdHMgb2YgXGEgdTE2Lg0KICoNCiAqIFxwYXJhbSB1MTYgVTE2IG9mIHdoaWNoIHRvIHJldmVyc2UgdGhlIGJpdHMuDQogKg0KICogXHJldHVybiBWYWx1ZSByZXN1bHRpbmcgZnJvbSBcYSB1MTYgd2l0aCByZXZlcnNlZCBiaXRzLg0KICovDQojZGVmaW5lIGJpdF9yZXZlcnNlMTYodTE2KSAgKChVMTYpKGJpdF9yZXZlcnNlMzIoKFUxNikodTE2KSkgPj4gMTYpKQ0KDQovKiEgXGJyaWVmIFJldmVyc2VzIHRoZSBiaXRzIG9mIFxhIHUzMi4NCiAqDQogKiBccGFyYW0gdTMyIFUzMiBvZiB3aGljaCB0byByZXZlcnNlIHRoZSBiaXRzLg0KICoNCiAqIFxyZXR1cm4gVmFsdWUgcmVzdWx0aW5nIGZyb20gXGEgdTMyIHdpdGggcmV2ZXJzZWQgYml0cy4NCiAqLw0KI2RlZmluZSBiaXRfcmV2ZXJzZTMyKHUzMikgICBfX1JCSVQodTMyKQ0KDQovKiEgXGJyaWVmIFJldmVyc2VzIHRoZSBiaXRzIG9mIFxhIHU2NC4NCiAqDQogKiBccGFyYW0gdTY0IFU2NCBvZiB3aGljaCB0byByZXZlcnNlIHRoZSBiaXRzLg0KICoNCiAqIFxyZXR1cm4gVmFsdWUgcmVzdWx0aW5nIGZyb20gXGEgdTY0IHdpdGggcmV2ZXJzZWQgYml0cy4NCiAqLw0KI2RlZmluZSBiaXRfcmV2ZXJzZTY0KHU2NCkgICgoVTY0KSgoKFU2NCliaXRfcmV2ZXJzZTMyKChVNjQpKHU2NCkgPj4gMzIpKSB8XA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFU2NCliaXRfcmV2ZXJzZTMyKChVNjQpKHU2NCkpIDw8IDMyKSkpDQoNCi8vISBAfQ0KDQoNCi8qISBcbmFtZSBBbGlnbm1lbnQNCiAqLw0KLy8hIEB7DQoNCi8qISBcYnJpZWYgVGVzdHMgYWxpZ25tZW50IG9mIHRoZSBudW1iZXIgXGEgdmFsIHdpdGggdGhlIFxhIG4gYm91bmRhcnkuDQogKg0KICogXHBhcmFtIHZhbCBJbnB1dCB2YWx1ZS4NCiAqIFxwYXJhbSBuICAgQm91bmRhcnkuDQogKg0KICogXHJldHVybiBcYyAxIGlmIHRoZSBudW1iZXIgXGEgdmFsIGlzIGFsaWduZWQgd2l0aCB0aGUgXGEgbiBib3VuZGFyeSwgZWxzZSBcYyAwLg0KICovDQojZGVmaW5lIFRlc3RfYWxpZ24odmFsLCBuICAgICApICghVHN0X2JpdHMoIHZhbCwgKG4pIC0gMSAgICAgKSAgICkNCg0KLyohIFxicmllZiBHZXRzIGFsaWdubWVudCBvZiB0aGUgbnVtYmVyIFxhIHZhbCB3aXRoIHJlc3BlY3QgdG8gdGhlIFxhIG4gYm91bmRhcnkuDQogKg0KICogXHBhcmFtIHZhbCBJbnB1dCB2YWx1ZS4NCiAqIFxwYXJhbSBuICAgQm91bmRhcnkuDQogKg0KICogXHJldHVybiBBbGlnbm1lbnQgb2YgdGhlIG51bWJlciBcYSB2YWwgd2l0aCByZXNwZWN0IHRvIHRoZSBcYSBuIGJvdW5kYXJ5Lg0KICovDQojZGVmaW5lIEdldF9hbGlnbiggdmFsLCBuICAgICApICggIFJkX2JpdHMoIHZhbCwgKG4pIC0gMSAgICAgKSAgICkNCg0KLyohIFxicmllZiBTZXRzIGFsaWdubWVudCBvZiB0aGUgbHZhbHVlIG51bWJlciBcYSBsdmFsIHRvIFxhIGFsZyB3aXRoIHJlc3BlY3QgdG8gdGhlIFxhIG4gYm91bmRhcnkuDQogKg0KICogXHBhcmFtIGx2YWwgIElucHV0L291dHB1dCBsdmFsdWUuDQogKiBccGFyYW0gbiAgICAgQm91bmRhcnkuDQogKiBccGFyYW0gYWxnICAgQWxpZ25tZW50Lg0KICoNCiAqIFxyZXR1cm4gTmV3IHZhbHVlIG9mIFxhIGx2YWwgcmVzdWx0aW5nIGZyb20gaXRzIGFsaWdubWVudCBzZXQgdG8gXGEgYWxnIHdpdGggcmVzcGVjdCB0byB0aGUgXGEgbiBib3VuZGFyeS4NCiAqLw0KI2RlZmluZSBTZXRfYWxpZ24obHZhbCwgbiwgYWxnKSAoICBXcl9iaXRzKGx2YWwsIChuKSAtIDEsIGFsZykgICApDQoNCi8qISBcYnJpZWYgQWxpZ25zIHRoZSBudW1iZXIgXGEgdmFsIHdpdGggdGhlIHVwcGVyIFxhIG4gYm91bmRhcnkuDQogKg0KICogXHBhcmFtIHZhbCBJbnB1dCB2YWx1ZS4NCiAqIFxwYXJhbSBuICAgQm91bmRhcnkuDQogKg0KICogXHJldHVybiBWYWx1ZSByZXN1bHRpbmcgZnJvbSB0aGUgbnVtYmVyIFxhIHZhbCBhbGlnbmVkIHdpdGggdGhlIHVwcGVyIFxhIG4gYm91bmRhcnkuDQogKi8NCiNkZWZpbmUgQWxpZ25fdXAoICB2YWwsIG4gICAgICkgKCgodmFsKSArICgobikgLSAxKSkgJiB+KChuKSAtIDEpKQ0KDQovKiEgXGJyaWVmIEFsaWducyB0aGUgbnVtYmVyIFxhIHZhbCB3aXRoIHRoZSBsb3dlciBcYSBuIGJvdW5kYXJ5Lg0KICoNCiAqIFxwYXJhbSB2YWwgSW5wdXQgdmFsdWUuDQogKiBccGFyYW0gbiAgIEJvdW5kYXJ5Lg0KICoNCiAqIFxyZXR1cm4gVmFsdWUgcmVzdWx0aW5nIGZyb20gdGhlIG51bWJlciBcYSB2YWwgYWxpZ25lZCB3aXRoIHRoZSBsb3dlciBcYSBuIGJvdW5kYXJ5Lg0KICovDQojZGVmaW5lIEFsaWduX2Rvd24odmFsLCBuICAgICApICggKHZhbCkgICAgICAgICAgICAgICYgfigobikgLSAxKSkNCg0KLy8hIEB9DQoNCg0KLyohIFxuYW1lIE1hdGhlbWF0aWNzDQogKg0KICogVGhlIHNhbWUgY29uc2lkZXJhdGlvbnMgYXMgZm9yIGNseiBhbmQgY3R6IGFwcGx5IGhlcmUgYnV0IEdDQyBkb2VzIG5vdA0KICogcHJvdmlkZSBidWlsdC1pbiBmdW5jdGlvbnMgdG8gYWNjZXNzIHRoZSBhc3NlbWJseSBpbnN0cnVjdGlvbnMgYWJzLCBtaW4gYW5kDQogKiBtYXggYW5kIGl0IGRvZXMgbm90IHByb2R1Y2UgdGhlbSBieSBpdHNlbGYgaW4gbW9zdCBjYXNlcywgc28gdHdvIHNldHMgb2YNCiAqIG1hY3JvcyBhcmUgZGVmaW5lZCBoZXJlOg0KICogICAtIEFicywgTWluIGFuZCBNYXggdG8gYXBwbHkgdG8gY29uc3RhbnQgZXhwcmVzc2lvbnMgKHZhbHVlcyBrbm93biBhdA0KICogICAgIGNvbXBpbGUgdGltZSk7DQogKiAgIC0gYWJzLCBtaW4gYW5kIG1heCB0byBhcHBseSB0byBub24tY29uc3RhbnQgZXhwcmVzc2lvbnMgKHZhbHVlcyB1bmtub3duIGF0DQogKiAgICAgY29tcGlsZSB0aW1lKSwgYWJzIGlzIGZvdW5kIGluIHN0ZGxpYi5oLg0KICovDQovLyEgQHsNCg0KLyohIFxicmllZiBUYWtlcyB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgXGEgYS4NCiAqDQogKiBccGFyYW0gYSBJbnB1dCB2YWx1ZS4NCiAqDQogKiBccmV0dXJuIEFic29sdXRlIHZhbHVlIG9mIFxhIGEuDQogKg0KICogXG5vdGUgTW9yZSBvcHRpbWl6ZWQgaWYgb25seSB1c2VkIHdpdGggdmFsdWVzIGtub3duIGF0IGNvbXBpbGUgdGltZS4NCiAqLw0KI2RlZmluZSBBYnMoYSkgICAgICAgICAgICAgICgoKGEpIDwgIDAgKSA/IC0oYSkgOiAoYSkpDQoNCi8qISBcYnJpZWYgVGFrZXMgdGhlIG1pbmltYWwgdmFsdWUgb2YgXGEgYSBhbmQgXGEgYi4NCiAqDQogKiBccGFyYW0gYSBJbnB1dCB2YWx1ZS4NCiAqIFxwYXJhbSBiIElucHV0IHZhbHVlLg0KICoNCiAqIFxyZXR1cm4gTWluaW1hbCB2YWx1ZSBvZiBcYSBhIGFuZCBcYSBiLg0KICoNCiAqIFxub3RlIE1vcmUgb3B0aW1pemVkIGlmIG9ubHkgdXNlZCB3aXRoIHZhbHVlcyBrbm93biBhdCBjb21waWxlIHRpbWUuDQogKi8NCiNkZWZpbmUgTWluKGEsIGIpICAgICAgICAgICAoKChhKSA8IChiKSkgPyAgKGEpIDogKGIpKQ0KDQovKiEgXGJyaWVmIFRha2VzIHRoZSBtYXhpbWFsIHZhbHVlIG9mIFxhIGEgYW5kIFxhIGIuDQogKg0KICogXHBhcmFtIGEgSW5wdXQgdmFsdWUuDQogKiBccGFyYW0gYiBJbnB1dCB2YWx1ZS4NCiAqDQogKiBccmV0dXJuIE1heGltYWwgdmFsdWUgb2YgXGEgYSBhbmQgXGEgYi4NCiAqDQogKiBcbm90ZSBNb3JlIG9wdGltaXplZCBpZiBvbmx5IHVzZWQgd2l0aCB2YWx1ZXMga25vd24gYXQgY29tcGlsZSB0aW1lLg0KICovDQojZGVmaW5lIE1heChhLCBiKSAgICAgICAgICAgKCgoYSkgPiAoYikpID8gIChhKSA6IChiKSkNCg0KLy8gYWJzKCkgaXMgYWxyZWFkeSBkZWZpbmVkIGJ5IHN0ZGxpYi5oDQoNCi8qISBcYnJpZWYgVGFrZXMgdGhlIG1pbmltYWwgdmFsdWUgb2YgXGEgYSBhbmQgXGEgYi4NCiAqDQogKiBccGFyYW0gYSBJbnB1dCB2YWx1ZS4NCiAqIFxwYXJhbSBiIElucHV0IHZhbHVlLg0KICoNCiAqIFxyZXR1cm4gTWluaW1hbCB2YWx1ZSBvZiBcYSBhIGFuZCBcYSBiLg0KICoNCiAqIFxub3RlIE1vcmUgb3B0aW1pemVkIGlmIG9ubHkgdXNlZCB3aXRoIHZhbHVlcyB1bmtub3duIGF0IGNvbXBpbGUgdGltZS4NCiAqLw0KI2RlZmluZSBtaW4oYSwgYikgICBNaW4oYSwgYikNCg0KLyohIFxicmllZiBUYWtlcyB0aGUgbWF4aW1hbCB2YWx1ZSBvZiBcYSBhIGFuZCBcYSBiLg0KICoNCiAqIFxwYXJhbSBhIElucHV0IHZhbHVlLg0KICogXHBhcmFtIGIgSW5wdXQgdmFsdWUuDQogKg0KICogXHJldHVybiBNYXhpbWFsIHZhbHVlIG9mIFxhIGEgYW5kIFxhIGIuDQogKg0KICogXG5vdGUgTW9yZSBvcHRpbWl6ZWQgaWYgb25seSB1c2VkIHdpdGggdmFsdWVzIHVua25vd24gYXQgY29tcGlsZSB0aW1lLg0KICovDQojZGVmaW5lIG1heChhLCBiKSAgIE1heChhLCBiKQ0KDQovLyEgQH0NCg0KDQovKiEgXGJyaWVmIENhbGxzIHRoZSByb3V0aW5lIGF0IGFkZHJlc3MgXGEgYWRkci4NCiAqDQogKiBJdCBnZW5lcmF0ZXMgYSBsb25nIGNhbGwgb3Bjb2RlLg0KICoNCiAqIEZvciBleGFtcGxlLCBgTG9uZ19jYWxsKDB4ODAwMDAwMDApJyBnZW5lcmF0ZXMgYSBzb2Z0d2FyZSByZXNldCBvbiBhIFVDMyBpZg0KICogaXQgaXMgaW52b2tlZCBmcm9tIHRoZSBDUFUgc3VwZXJ2aXNvciBtb2RlLg0KICoNCiAqIFxwYXJhbSBhZGRyICBBZGRyZXNzIG9mIHRoZSByb3V0aW5lIHRvIGNhbGwuDQogKg0KICogXG5vdGUgSXQgbWF5IGJlIHVzZWQgYXMgYSBsb25nIGp1bXAgb3Bjb2RlIGluIHNvbWUgc3BlY2lhbCBjYXNlcy4NCiAqLw0KI2RlZmluZSBMb25nX2NhbGwoYWRkcikgICAgICAgICAgICAgICAgICAgKCgqKHZvaWQgKCopKHZvaWQpKShhZGRyKSkoKSkNCg0KDQovKiEgXG5hbWUgTUNVIEVuZGlhbmlzbSBIYW5kbGluZw0KICogQVJNIGlzIE1DVSBsaXR0bGUgZW5kaWFuaXNtLg0KICovDQovLyEgQHsNCiNkZWZpbmUgIE1TQih1MTYpICAgICAgICgoKFU4ICAqKSYodTE2KSlbMV0pIC8vITwgTW9zdCBzaWduaWZpY2FudCBieXRlIG9mIFxhIHUxNi4NCiNkZWZpbmUgIExTQih1MTYpICAgICAgICgoKFU4ICAqKSYodTE2KSlbMF0pIC8vITwgTGVhc3Qgc2lnbmlmaWNhbnQgYnl0ZSBvZiBcYSB1MTYuDQoNCiNkZWZpbmUgIE1TSCh1MzIpICAgICAgICgoKFUxNiAqKSYodTMyKSlbMV0pIC8vITwgTW9zdCBzaWduaWZpY2FudCBoYWxmLXdvcmQgb2YgXGEgdTMyLg0KI2RlZmluZSAgTFNIKHUzMikgICAgICAgKCgoVTE2ICopJih1MzIpKVswXSkgLy8hPCBMZWFzdCBzaWduaWZpY2FudCBoYWxmLXdvcmQgb2YgXGEgdTMyLg0KI2RlZmluZSAgTVNCMFcodTMyKSAgICAgKCgoVTggICopJih1MzIpKVszXSkgLy8hPCBNb3N0IHNpZ25pZmljYW50IGJ5dGUgb2YgMXN0IHJhbmsgb2YgXGEgdTMyLg0KI2RlZmluZSAgTVNCMVcodTMyKSAgICAgKCgoVTggICopJih1MzIpKVsyXSkgLy8hPCBNb3N0IHNpZ25pZmljYW50IGJ5dGUgb2YgMm5kIHJhbmsgb2YgXGEgdTMyLg0KI2RlZmluZSAgTVNCMlcodTMyKSAgICAgKCgoVTggICopJih1MzIpKVsxXSkgLy8hPCBNb3N0IHNpZ25pZmljYW50IGJ5dGUgb2YgM3JkIHJhbmsgb2YgXGEgdTMyLg0KI2RlZmluZSAgTVNCM1codTMyKSAgICAgKCgoVTggICopJih1MzIpKVswXSkgLy8hPCBNb3N0IHNpZ25pZmljYW50IGJ5dGUgb2YgNHRoIHJhbmsgb2YgXGEgdTMyLg0KI2RlZmluZSAgTFNCM1codTMyKSAgICAgTVNCMFcodTMyKSAgICAgICAgICAgLy8hPCBMZWFzdCBzaWduaWZpY2FudCBieXRlIG9mIDR0aCByYW5rIG9mIFxhIHUzMi4NCiNkZWZpbmUgIExTQjJXKHUzMikgICAgIE1TQjFXKHUzMikgICAgICAgICAgIC8vITwgTGVhc3Qgc2lnbmlmaWNhbnQgYnl0ZSBvZiAzcmQgcmFuayBvZiBcYSB1MzIuDQojZGVmaW5lICBMU0IxVyh1MzIpICAgICBNU0IyVyh1MzIpICAgICAgICAgICAvLyE8IExlYXN0IHNpZ25pZmljYW50IGJ5dGUgb2YgMm5kIHJhbmsgb2YgXGEgdTMyLg0KI2RlZmluZSAgTFNCMFcodTMyKSAgICAgTVNCM1codTMyKSAgICAgICAgICAgLy8hPCBMZWFzdCBzaWduaWZpY2FudCBieXRlIG9mIDFzdCByYW5rIG9mIFxhIHUzMi4NCiAgICAgICAgDQojZGVmaW5lICBNU1codTY0KSAgICAgICAoKChVMzIgKikmKHU2NCkpWzFdKSAvLyE8IE1vc3Qgc2lnbmlmaWNhbnQgd29yZCBvZiBcYSB1NjQuDQojZGVmaW5lICBMU1codTY0KSAgICAgICAoKChVMzIgKikmKHU2NCkpWzBdKSAvLyE8IExlYXN0IHNpZ25pZmljYW50IHdvcmQgb2YgXGEgdTY0Lg0KI2RlZmluZSAgTVNIMCh1NjQpICAgICAgKCgoVTE2ICopJih1NjQpKVszXSkgLy8hPCBNb3N0IHNpZ25pZmljYW50IGhhbGYtd29yZCBvZiAxc3QgcmFuayBvZiBcYSB1NjQuDQojZGVmaW5lICBNU0gxKHU2NCkgICAgICAoKChVMTYgKikmKHU2NCkpWzJdKSAvLyE8IE1vc3Qgc2lnbmlmaWNhbnQgaGFsZi13b3JkIG9mIDJuZCByYW5rIG9mIFxhIHU2NC4NCiNkZWZpbmUgIE1TSDIodTY0KSAgICAgICgoKFUxNiAqKSYodTY0KSlbMV0pIC8vITwgTW9zdCBzaWduaWZpY2FudCBoYWxmLXdvcmQgb2YgM3JkIHJhbmsgb2YgXGEgdTY0Lg0KI2RlZmluZSAgTVNIMyh1NjQpICAgICAgKCgoVTE2ICopJih1NjQpKVswXSkgLy8hPCBNb3N0IHNpZ25pZmljYW50IGhhbGYtd29yZCBvZiA0dGggcmFuayBvZiBcYSB1NjQuDQojZGVmaW5lICBMU0gzKHU2NCkgICAgICBNU0gwKHU2NCkgICAgICAgICAgICAvLyE8IExlYXN0IHNpZ25pZmljYW50IGhhbGYtd29yZCBvZiA0dGggcmFuayBvZiBcYSB1NjQuDQojZGVmaW5lICBMU0gyKHU2NCkgICAgICBNU0gxKHU2NCkgICAgICAgICAgICAvLyE8IExlYXN0IHNpZ25pZmljYW50IGhhbGYtd29yZCBvZiAzcmQgcmFuayBvZiBcYSB1NjQuDQojZGVmaW5lICBMU0gxKHU2NCkgICAgICBNU0gyKHU2NCkgICAgICAgICAgICAvLyE8IExlYXN0IHNpZ25pZmljYW50IGhhbGYtd29yZCBvZiAybmQgcmFuayBvZiBcYSB1NjQuDQojZGVmaW5lICBMU0gwKHU2NCkgICAgICBNU0gzKHU2NCkgICAgICAgICAgICAvLyE8IExlYXN0IHNpZ25pZmljYW50IGhhbGYtd29yZCBvZiAxc3QgcmFuayBvZiBcYSB1NjQuDQojZGVmaW5lICBNU0IwRCh1NjQpICAgICAoKChVOCAgKikmKHU2NCkpWzddKSAvLyE8IE1vc3Qgc2lnbmlmaWNhbnQgYnl0ZSBvZiAxc3QgcmFuayBvZiBcYSB1NjQuDQojZGVmaW5lICBNU0IxRCh1NjQpICAgICAoKChVOCAgKikmKHU2NCkpWzZdKSAvLyE8IE1vc3Qgc2lnbmlmaWNhbnQgYnl0ZSBvZiAybmQgcmFuayBvZiBcYSB1NjQuDQojZGVmaW5lICBNU0IyRCh1NjQpICAgICAoKChVOCAgKikmKHU2NCkpWzVdKSAvLyE8IE1vc3Qgc2lnbmlmaWNhbnQgYnl0ZSBvZiAzcmQgcmFuayBvZiBcYSB1NjQuDQojZGVmaW5lICBNU0IzRCh1NjQpICAgICAoKChVOCAgKikmKHU2NCkpWzRdKSAvLyE8IE1vc3Qgc2lnbmlmaWNhbnQgYnl0ZSBvZiA0dGggcmFuayBvZiBcYSB1NjQuDQojZGVmaW5lICBNU0I0RCh1NjQpICAgICAoKChVOCAgKikmKHU2NCkpWzNdKSAvLyE8IE1vc3Qgc2lnbmlmaWNhbnQgYnl0ZSBvZiA1dGggcmFuayBvZiBcYSB1NjQuDQojZGVmaW5lICBNU0I1RCh1NjQpICAgICAoKChVOCAgKikmKHU2NCkpWzJdKSAvLyE8IE1vc3Qgc2lnbmlmaWNhbnQgYnl0ZSBvZiA2dGggcmFuayBvZiBcYSB1NjQuDQojZGVmaW5lICBNU0I2RCh1NjQpICAgICAoKChVOCAgKikmKHU2NCkpWzFdKSAvLyE8IE1vc3Qgc2lnbmlmaWNhbnQgYnl0ZSBvZiA3dGggcmFuayBvZiBcYSB1NjQuDQojZGVmaW5lICBNU0I3RCh1NjQpICAgICAoKChVOCAgKikmKHU2NCkpWzBdKSAvLyE8IE1vc3Qgc2lnbmlmaWNhbnQgYnl0ZSBvZiA4dGggcmFuayBvZiBcYSB1NjQuDQojZGVmaW5lICBMU0I3RCh1NjQpICAgICBNU0IwRCh1NjQpICAgICAgICAgICAvLyE8IExlYXN0IHNpZ25pZmljYW50IGJ5dGUgb2YgOHRoIHJhbmsgb2YgXGEgdTY0Lg0KI2RlZmluZSAgTFNCNkQodTY0KSAgICAgTVNCMUQodTY0KSAgICAgICAgICAgLy8hPCBMZWFzdCBzaWduaWZpY2FudCBieXRlIG9mIDd0aCByYW5rIG9mIFxhIHU2NC4NCiNkZWZpbmUgIExTQjVEKHU2NCkgICAgIE1TQjJEKHU2NCkgICAgICAgICAgIC8vITwgTGVhc3Qgc2lnbmlmaWNhbnQgYnl0ZSBvZiA2dGggcmFuayBvZiBcYSB1NjQuDQojZGVmaW5lICBMU0I0RCh1NjQpICAgICBNU0IzRCh1NjQpICAgICAgICAgICAvLyE8IExlYXN0IHNpZ25pZmljYW50IGJ5dGUgb2YgNXRoIHJhbmsgb2YgXGEgdTY0Lg0KI2RlZmluZSAgTFNCM0QodTY0KSAgICAgTVNCNEQodTY0KSAgICAgICAgICAgLy8hPCBMZWFzdCBzaWduaWZpY2FudCBieXRlIG9mIDR0aCByYW5rIG9mIFxhIHU2NC4NCiNkZWZpbmUgIExTQjJEKHU2NCkgICAgIE1TQjVEKHU2NCkgICAgICAgICAgIC8vITwgTGVhc3Qgc2lnbmlmaWNhbnQgYnl0ZSBvZiAzcmQgcmFuayBvZiBcYSB1NjQuDQojZGVmaW5lICBMU0IxRCh1NjQpICAgICBNU0I2RCh1NjQpICAgICAgICAgICAvLyE8IExlYXN0IHNpZ25pZmljYW50IGJ5dGUgb2YgMm5kIHJhbmsgb2YgXGEgdTY0Lg0KI2RlZmluZSAgTFNCMEQodTY0KSAgICAgTVNCN0QodTY0KSAgICAgICAgICAgLy8hPCBMZWFzdCBzaWduaWZpY2FudCBieXRlIG9mIDFzdCByYW5rIG9mIFxhIHU2NC4NCg0KI2RlZmluZSAgQkUxNih4KSAgICAgICAgU3dhcDE2KHgpDQojZGVmaW5lICBMRTE2KHgpICAgICAgICAoeCkNCg0KI2RlZmluZSAgbGUxNl90b19jcHUoeCkgKHgpDQojZGVmaW5lICBjcHVfdG9fbGUxNih4KSAoeCkNCiNkZWZpbmUgIExFMTZfVE9fQ1BVKHgpICh4KQ0KI2RlZmluZSAgQ1BVX1RPX0xFMTYoeCkgKHgpDQoNCiNkZWZpbmUgIGJlMTZfdG9fY3B1KHgpIFN3YXAxNih4KQ0KI2RlZmluZSAgY3B1X3RvX2JlMTYoeCkgU3dhcDE2KHgpDQojZGVmaW5lICBCRTE2X1RPX0NQVSh4KSBTd2FwMTYoeCkNCiNkZWZpbmUgIENQVV9UT19CRTE2KHgpIFN3YXAxNih4KQ0KDQojZGVmaW5lICBsZTMyX3RvX2NwdSh4KSAoeCkNCiNkZWZpbmUgIGNwdV90b19sZTMyKHgpICh4KQ0KI2RlZmluZSAgTEUzMl9UT19DUFUoeCkgKHgpDQojZGVmaW5lICBDUFVfVE9fTEUzMih4KSAoeCkNCg0KI2RlZmluZSAgYmUzMl90b19jcHUoeCkgc3dhcDMyKHgpDQojZGVmaW5lICBjcHVfdG9fYmUzMih4KSBzd2FwMzIoeCkNCiNkZWZpbmUgIEJFMzJfVE9fQ1BVKHgpIHN3YXAzMih4KQ0KI2RlZmluZSAgQ1BVX1RPX0JFMzIoeCkgc3dhcDMyKHgpDQovLyEgQH0NCg0KDQovKiEgXG5hbWUgRW5kaWFuaXNtIENvbnZlcnNpb24NCiAqDQogKiBUaGUgc2FtZSBjb25zaWRlcmF0aW9ucyBhcyBmb3IgY2x6IGFuZCBjdHogYXBwbHkgaGVyZSBidXQgR0NDJ3MNCiAqIF9fYnVpbHRpbl9ic3dhcF8zMiBhbmQgX19idWlsdGluX2Jzd2FwXzY0IGRvIG5vdCBiZWhhdmUgbGlrZSBtYWNyb3Mgd2hlbg0KICogYXBwbGllZCB0byBjb25zdGFudCBleHByZXNzaW9ucywgc28gdHdvIHNldHMgb2YgbWFjcm9zIGFyZSBkZWZpbmVkIGhlcmU6DQogKiAgIC0gU3dhcDE2LCBTd2FwMzIgYW5kIFN3YXA2NCB0byBhcHBseSB0byBjb25zdGFudCBleHByZXNzaW9ucyAodmFsdWVzIGtub3duDQogKiAgICAgYXQgY29tcGlsZSB0aW1lKTsNCiAqICAgLSBzd2FwMTYsIHN3YXAzMiBhbmQgc3dhcDY0IHRvIGFwcGx5IHRvIG5vbi1jb25zdGFudCBleHByZXNzaW9ucyAodmFsdWVzDQogKiAgICAgdW5rbm93biBhdCBjb21waWxlIHRpbWUpLg0KICovDQovLyEgQHsNCg0KLyohIFxicmllZiBUb2dnbGVzIHRoZSBlbmRpYW5pc20gb2YgXGEgdTE2IChieSBzd2FwcGluZyBpdHMgYnl0ZXMpLg0KICoNCiAqIFxwYXJhbSB1MTYgVTE2IG9mIHdoaWNoIHRvIHRvZ2dsZSB0aGUgZW5kaWFuaXNtLg0KICoNCiAqIFxyZXR1cm4gVmFsdWUgcmVzdWx0aW5nIGZyb20gXGEgdTE2IHdpdGggdG9nZ2xlZCBlbmRpYW5pc20uDQogKg0KICogXG5vdGUgTW9yZSBvcHRpbWl6ZWQgaWYgb25seSB1c2VkIHdpdGggdmFsdWVzIGtub3duIGF0IGNvbXBpbGUgdGltZS4NCiAqLw0KI2RlZmluZSBTd2FwMTYodTE2KSAoKFUxNikoKChVMTYpKHUxNikgPj4gOCkgfFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVTE2KSh1MTYpIDw8IDgpKSkNCg0KLyohIFxicmllZiBUb2dnbGVzIHRoZSBlbmRpYW5pc20gb2YgXGEgdTMyIChieSBzd2FwcGluZyBpdHMgYnl0ZXMpLg0KICoNCiAqIFxwYXJhbSB1MzIgVTMyIG9mIHdoaWNoIHRvIHRvZ2dsZSB0aGUgZW5kaWFuaXNtLg0KICoNCiAqIFxyZXR1cm4gVmFsdWUgcmVzdWx0aW5nIGZyb20gXGEgdTMyIHdpdGggdG9nZ2xlZCBlbmRpYW5pc20uDQogKg0KICogXG5vdGUgTW9yZSBvcHRpbWl6ZWQgaWYgb25seSB1c2VkIHdpdGggdmFsdWVzIGtub3duIGF0IGNvbXBpbGUgdGltZS4NCiAqLw0KI2RlZmluZSBTd2FwMzIodTMyKSAoKFUzMikoKChVMzIpU3dhcDE2KChVMzIpKHUzMikgPj4gMTYpKSB8XA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgKChVMzIpU3dhcDE2KChVMzIpKHUzMikpIDw8IDE2KSkpDQoNCi8qISBcYnJpZWYgVG9nZ2xlcyB0aGUgZW5kaWFuaXNtIG9mIFxhIHU2NCAoYnkgc3dhcHBpbmcgaXRzIGJ5dGVzKS4NCiAqDQogKiBccGFyYW0gdTY0IFU2NCBvZiB3aGljaCB0byB0b2dnbGUgdGhlIGVuZGlhbmlzbS4NCiAqDQogKiBccmV0dXJuIFZhbHVlIHJlc3VsdGluZyBmcm9tIFxhIHU2NCB3aXRoIHRvZ2dsZWQgZW5kaWFuaXNtLg0KICoNCiAqIFxub3RlIE1vcmUgb3B0aW1pemVkIGlmIG9ubHkgdXNlZCB3aXRoIHZhbHVlcyBrbm93biBhdCBjb21waWxlIHRpbWUuDQogKi8NCiNkZWZpbmUgU3dhcDY0KHU2NCkgKChVNjQpKCgoVTY0KVN3YXAzMigoVTY0KSh1NjQpID4+IDMyKSkgfFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVTY0KVN3YXAzMigoVTY0KSh1NjQpKSA8PCAzMikpKQ0KDQovKiEgXGJyaWVmIFRvZ2dsZXMgdGhlIGVuZGlhbmlzbSBvZiBcYSB1MTYgKGJ5IHN3YXBwaW5nIGl0cyBieXRlcykuDQogKg0KICogXHBhcmFtIHUxNiBVMTYgb2Ygd2hpY2ggdG8gdG9nZ2xlIHRoZSBlbmRpYW5pc20uDQogKg0KICogXHJldHVybiBWYWx1ZSByZXN1bHRpbmcgZnJvbSBcYSB1MTYgd2l0aCB0b2dnbGVkIGVuZGlhbmlzbS4NCiAqDQogKiBcbm90ZSBNb3JlIG9wdGltaXplZCBpZiBvbmx5IHVzZWQgd2l0aCB2YWx1ZXMgdW5rbm93biBhdCBjb21waWxlIHRpbWUuDQogKi8NCiNkZWZpbmUgc3dhcDE2KHUxNikgU3dhcDE2KHUxNikNCg0KLyohIFxicmllZiBUb2dnbGVzIHRoZSBlbmRpYW5pc20gb2YgXGEgdTMyIChieSBzd2FwcGluZyBpdHMgYnl0ZXMpLg0KICoNCiAqIFxwYXJhbSB1MzIgVTMyIG9mIHdoaWNoIHRvIHRvZ2dsZSB0aGUgZW5kaWFuaXNtLg0KICoNCiAqIFxyZXR1cm4gVmFsdWUgcmVzdWx0aW5nIGZyb20gXGEgdTMyIHdpdGggdG9nZ2xlZCBlbmRpYW5pc20uDQogKg0KICogXG5vdGUgTW9yZSBvcHRpbWl6ZWQgaWYgb25seSB1c2VkIHdpdGggdmFsdWVzIHVua25vd24gYXQgY29tcGlsZSB0aW1lLg0KICovDQojaWYgKGRlZmluZWQgX19HTlVDX18pDQojICAgZGVmaW5lIHN3YXAzMih1MzIpICgoVTMyKV9fYnVpbHRpbl9ic3dhcDMyKChVMzIpKHUzMikpKQ0KI2Vsc2UNCiMgICBkZWZpbmUgc3dhcDMyKHUzMikgU3dhcDMyKHUzMikNCiNlbmRpZg0KDQovKiEgXGJyaWVmIFRvZ2dsZXMgdGhlIGVuZGlhbmlzbSBvZiBcYSB1NjQgKGJ5IHN3YXBwaW5nIGl0cyBieXRlcykuDQogKg0KICogXHBhcmFtIHU2NCBVNjQgb2Ygd2hpY2ggdG8gdG9nZ2xlIHRoZSBlbmRpYW5pc20uDQogKg0KICogXHJldHVybiBWYWx1ZSByZXN1bHRpbmcgZnJvbSBcYSB1NjQgd2l0aCB0b2dnbGVkIGVuZGlhbmlzbS4NCiAqDQogKiBcbm90ZSBNb3JlIG9wdGltaXplZCBpZiBvbmx5IHVzZWQgd2l0aCB2YWx1ZXMgdW5rbm93biBhdCBjb21waWxlIHRpbWUuDQogKi8NCiNpZiAoZGVmaW5lZCBfX0dOVUNfXykNCiMgICBkZWZpbmUgc3dhcDY0KHU2NCkgKChVNjQpX19idWlsdGluX2Jzd2FwNjQoKFU2NCkodTY0KSkpDQojZWxzZQ0KIyAgIGRlZmluZSBzd2FwNjQodTY0KSAoKFU2NCkoKChVNjQpc3dhcDMyKChVNjQpKHU2NCkgPj4gMzIpKSB8XA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgKChVNjQpc3dhcDMyKChVNjQpKHU2NCkpIDw8IDMyKSkpDQojZW5kaWYNCg0KLy8hIEB9DQoNCg0KLyohIFxuYW1lIFRhcmdldCBBYnN0cmFjdGlvbg0KICovDQovLyEgQHsNCg0KI2RlZmluZSBfR0xPQkVYVF8gICAgICAgICAgIGV4dGVybiAgICAgIC8vITwgZXh0ZXJuIHN0b3JhZ2UtY2xhc3Mgc3BlY2lmaWVyLg0KI2RlZmluZSBfQ09OU1RfVFlQRV8gICAgICAgIGNvbnN0ICAgICAgIC8vITwgY29uc3QgdHlwZSBxdWFsaWZpZXIuDQojZGVmaW5lIF9NRU1fVFlQRV9TTE9XXyAgICAgICAgICAgICAgICAgLy8hPCBTbG93IG1lbW9yeSB0eXBlLg0KI2RlZmluZSBfTUVNX1RZUEVfTUVERkFTVF8gICAgICAgICAgICAgIC8vITwgRmFpcmx5IGZhc3QgbWVtb3J5IHR5cGUuDQojZGVmaW5lIF9NRU1fVFlQRV9GQVNUXyAgICAgICAgICAgICAgICAgLy8hPCBGYXN0IG1lbW9yeSB0eXBlLg0KDQp0eXBlZGVmIFU4ICAgICAgICAgICAgICAgICAgQnl0ZTsgICAgICAgLy8hPCA4LWJpdCB1bnNpZ25lZCBpbnRlZ2VyLg0KDQojZGVmaW5lIG1lbWNtcF9yYW0ycmFtICAgICAgbWVtY21wICAgICAgLy8hPCBUYXJnZXQtc3BlY2lmaWMgbWVtY21wIG9mIFJBTSB0byBSQU0uDQojZGVmaW5lIG1lbWNtcF9jb2RlMnJhbSAgICAgbWVtY21wICAgICAgLy8hPCBUYXJnZXQtc3BlY2lmaWMgbWVtY21wIG9mIFJBTSB0byBOVlJBTS4NCiNkZWZpbmUgbWVtY3B5X3JhbTJyYW0gICAgICBtZW1jcHkgICAgICAvLyE8IFRhcmdldC1zcGVjaWZpYyBtZW1jcHkgZnJvbSBSQU0gdG8gUkFNLg0KI2RlZmluZSBtZW1jcHlfY29kZTJyYW0gICAgIG1lbWNweSAgICAgIC8vITwgVGFyZ2V0LXNwZWNpZmljIG1lbWNweSBmcm9tIE5WUkFNIHRvIFJBTS4NCg0KI2RlZmluZSBMU0IwKHUzMikgICAgICAgICAgIExTQjBXKHUzMikgIC8vITwgTGVhc3Qgc2lnbmlmaWNhbnQgYnl0ZSBvZiAxc3QgcmFuayBvZiBcYSB1MzIuDQojZGVmaW5lIExTQjEodTMyKSAgICAgICAgICAgTFNCMVcodTMyKSAgLy8hPCBMZWFzdCBzaWduaWZpY2FudCBieXRlIG9mIDJuZCByYW5rIG9mIFxhIHUzMi4NCiNkZWZpbmUgTFNCMih1MzIpICAgICAgICAgICBMU0IyVyh1MzIpICAvLyE8IExlYXN0IHNpZ25pZmljYW50IGJ5dGUgb2YgM3JkIHJhbmsgb2YgXGEgdTMyLg0KI2RlZmluZSBMU0IzKHUzMikgICAgICAgICAgIExTQjNXKHUzMikgIC8vITwgTGVhc3Qgc2lnbmlmaWNhbnQgYnl0ZSBvZiA0dGggcmFuayBvZiBcYSB1MzIuDQojZGVmaW5lIE1TQjModTMyKSAgICAgICAgICAgTVNCM1codTMyKSAgLy8hPCBNb3N0IHNpZ25pZmljYW50IGJ5dGUgb2YgNHRoIHJhbmsgb2YgXGEgdTMyLg0KI2RlZmluZSBNU0IyKHUzMikgICAgICAgICAgIE1TQjJXKHUzMikgIC8vITwgTW9zdCBzaWduaWZpY2FudCBieXRlIG9mIDNyZCByYW5rIG9mIFxhIHUzMi4NCiNkZWZpbmUgTVNCMSh1MzIpICAgICAgICAgICBNU0IxVyh1MzIpICAvLyE8IE1vc3Qgc2lnbmlmaWNhbnQgYnl0ZSBvZiAybmQgcmFuayBvZiBcYSB1MzIuDQojZGVmaW5lIE1TQjAodTMyKSAgICAgICAgICAgTVNCMFcodTMyKSAgLy8hPCBNb3N0IHNpZ25pZmljYW50IGJ5dGUgb2YgMXN0IHJhbmsgb2YgXGEgdTMyLg0KDQovLyEgQH0NCg0KLyoqDQogKiBcYnJpZWYgQ2FsY3VsYXRlIFxmJCBcbGVmdFxsY2VpbCBcZnJhY3thfXtifSBccmlnaHRccmNlaWwgXGYkIHVzaW5nDQogKiBpbnRlZ2VyIGFyaXRobWV0aWMuDQogKg0KICogXHBhcmFtIGEgQW4gaW50ZWdlcg0KICogXHBhcmFtIGIgQW5vdGhlciBpbnRlZ2VyDQogKg0KICogXHJldHVybiAoXGEgYSAvIFxhIGIpIHJvdW5kZWQgdXAgdG8gdGhlIG5lYXJlc3QgaW50ZWdlci4NCiAqLw0KI2RlZmluZSBkaXZfY2VpbChhLCBiKSAgICAgICgoKGEpICsgKGIpIC0gMSkgLyAoYikpDQoNCiNlbmRpZiAgLy8gI2lmbmRlZiBfX0FTU0VNQkxZX18NCg0KLyoqDQogKiBcfQ0KICovDQoNCiNlbmRpZiAvKiBVVElMU19DT01QSUxFUl9IICovDQo=