IyBMb2NhbGUgbmFtZSBhbGlhcyBkYXRhIGJhc2UuCiMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDEsMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAojIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKIyBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKIyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIwojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCiMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwKIyBVU0EuCgojIFRoZSBmb3JtYXQgb2YgdGhpcyBmaWxlIGlzIHRoZSBzYW1lIGFzIGZvciB0aGUgY29ycmVzcG9uZGluZyBmaWxlIG9mCiMgdGhlIFggV2luZG93IFN5c3RlbSwgd2hpY2ggbm9ybWFsbHkgY2FuIGJlIGZvdW5kIGluCiMJL3Vzci9saWIvWDExL2xvY2FsZS9sb2NhbGUuYWxpYXMKIyBBIHNpbmdsZSBsaW5lIGNvbnRhaW5zIHR3byBmaWVsZHM6IGFuIGFsaWFzIGFuZCBhIHN1YnN0aXR1dGlvbiB2YWx1ZS4KIyBBbGwgZW50cmllcyBhcmUgY2FzZSBpbmRlcGVuZGVudC4KCiMgTm90ZTogVGhpcyBmaWxlIGlzIGZhciBmcm9tIGJlaW5nIGNvbXBsZXRlLiAgSWYgeW91IGhhdmUgYSB2YWx1ZSBmb3IKIyB5b3VyIG93biBzaXRlIHdoaWNoIHlvdSB0aGluayBtaWdodCBiZSB1c2VmdWwgZm9yIG90aGVycyB0b28sIHNoYXJlCiMgaXQgd2l0aCB0aGUgcmVzdCBvZiB1cy4gIFNlbmQgaXQgdXNpbmcgdGhlIGBnbGliY2J1Zycgc2NyaXB0IHRvCiMgYnVnc0BnbnUub3JnLgoKIyBQYWNrYWdlcyB1c2luZyB0aGlzIGZpbGU6IAoKYm9rbWFsCQluYl9OTy5JU08tODg1OS0xCmJva23lbAkJbmJfTk8uSVNPLTg4NTktMQpjYXRhbGFuCQljYV9FUy5JU08tODg1OS0xCmNyb2F0aWFuCWhyX0hSLklTTy04ODU5LTIKY3plY2gJCWNzX0NaLklTTy04ODU5LTIKZGFuaXNoICAgICAgICAgIGRhX0RLLklTTy04ODU5LTEKZGFuc2sJCWRhX0RLLklTTy04ODU5LTEKZGV1dHNjaAkJZGVfREUuSVNPLTg4NTktMQpkdXRjaAkJbmxfTkwuSVNPLTg4NTktMQplZXN0aQkJZXRfRUUuSVNPLTg4NTktMQplc3RvbmlhbglldF9FRS5JU08tODg1OS0xCmZpbm5pc2ggICAgICAgICBmaV9GSS5JU08tODg1OS0xCmZyYW7nYWlzCWZyX0ZSLklTTy04ODU5LTEKZnJlbmNoCQlmcl9GUi5JU08tODg1OS0xCmdhbGVnbwkJZ2xfRVMuSVNPLTg4NTktMQpnYWxpY2lhbglnbF9FUy5JU08tODg1OS0xCmdlcm1hbgkJZGVfREUuSVNPLTg4NTktMQpncmVlayAgICAgICAgICAgZWxfR1IuSVNPLTg4NTktNwpoZWJyZXcgICAgICAgICAgaGVfSUwuSVNPLTg4NTktOApocnZhdHNraQlocl9IUi5JU08tODg1OS0yCmh1bmdhcmlhbiAgICAgICBodV9IVS5JU08tODg1OS0yCmljZWxhbmRpYyAgICAgICBpc19JUy5JU08tODg1OS0xCml0YWxpYW4gICAgICAgICBpdF9JVC5JU08tODg1OS0xCmphcGFuZXNlCWphX0pQLmV1Y0pQCmphcGFuZXNlLmV1YwlqYV9KUC5ldWNKUApqYV9KUAkJamFfSlAuZXVjSlAKamFfSlAudWppcwlqYV9KUC5ldWNKUApqYXBhbmVzZS5zamlzCWphX0pQLlNKSVMKa29yZWFuCQlrb19LUi5ldWNLUgprb3JlYW4uZXVjIAlrb19LUi5ldWNLUgprb19LUgkJa29fS1IuZXVjS1IKbGl0aHVhbmlhbiAgICAgIGx0X0xULklTTy04ODU5LTEzCm5vX05PCQluYl9OTy5JU08tODg1OS0xCm5vX05PLklTTy04ODU5LTEgbmJfTk8uSVNPLTg4NTktMQpub3J3ZWdpYW4gICAgICAgbmJfTk8uSVNPLTg4NTktMQpueW5vcnNrCQlubl9OTy5JU08tODg1OS0xCnBvbGlzaCAgICAgICAgICBwbF9QTC5JU08tODg1OS0yCnBvcnR1Z3Vlc2UgICAgICBwdF9QVC5JU08tODg1OS0xCnJvbWFuaWFuICAgICAgICByb19STy5JU08tODg1OS0yCnJ1c3NpYW4gICAgICAgICBydV9SVS5JU08tODg1OS01CnNsb3ZhayAgICAgICAgICBza19TSy5JU08tODg1OS0yCnNsb3ZlbmUgICAgICAgICBzbF9TSS5JU08tODg1OS0yCnNsb3ZlbmlhbiAgICAgICBzbF9TSS5JU08tODg1OS0yCnNwYW5pc2ggICAgICAgICBlc19FUy5JU08tODg1OS0xCnN3ZWRpc2ggICAgICAgICBzdl9TRS5JU08tODg1OS0xCnRoYWkJCXRoX1RILlRJUy02MjAKdHVya2lzaCAgICAgICAgIHRyX1RSLklTTy04ODU5LTkK