LyogCiAqIENyeXB0b2dyYXBoaWMgQVBJLgogKgogKiBERVMgJiBUcmlwbGUgREVTIEVERSBDaXBoZXIgQWxnb3JpdGhtcy4KICoKICogT3JpZ2luYWxseSByZWxlYXNlZCBhcyBkZXNjb3JlIGJ5IERhbmEgTC4gSG93IDxob3dAaXNsLnN0YW5mb3JkLmVkdT4uCiAqIE1vZGlmaWVkIGJ5IFJhaW1hciBGYWxrZSA8cmYxM0BpbmYudHUtZHJlc2Rlbi5kZT4gZm9yIHRoZSBMaW51eC1LZXJuZWwuCiAqIERlcml2ZWQgZnJvbSBDcnlwdG9hcGkgYW5kIE5ldHRsZSBpbXBsZW1lbnRhdGlvbnMsIGFkYXB0ZWQgZm9yIGluLXBsYWNlCiAqIHNjYXR0ZXJsaXN0IGludGVyZmFjZS4gIENoYW5nZWQgTEdQTCB0byBHUEwgcGVyIHNlY3Rpb24gMyBvZiB0aGUgTEdQTC4KICoKICogQ29weXJpZ2h0IChjKSAxOTkyIERhbmEgTC4gSG93LgogKiBDb3B5cmlnaHQgKGMpIFJhaW1hciBGYWxrZSA8cmYxM0BpbmYudHUtZHJlc2Rlbi5kZT4gCiAqIENvcHlyaWdodCAoYykgR2lzbGUgU+ZsZW5zbWluZGUgPGdpc2xlQGlpLnVpYi5ubz4KICogQ29weXJpZ2h0IChDKSAyMDAxIE5pZWxzIE32bGxlci4KICogQ29weXJpZ2h0IChjKSAyMDAyIEphbWVzIE1vcnJpcyA8am1vcnJpc0BpbnRlcmNvZGUuY29tLmF1PgogKgogKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKi8KI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgojaW5jbHVkZSA8bGludXgvbW0uaD4KI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgoKI2RlZmluZSBERVNfS0VZX1NJWkUJCTgKI2RlZmluZSBERVNfRVhQS0VZX1dPUkRTCTMyCiNkZWZpbmUgREVTX0JMT0NLX1NJWkUJCTgKCiNkZWZpbmUgREVTM19FREVfS0VZX1NJWkUJKDMgKiBERVNfS0VZX1NJWkUpCiNkZWZpbmUgREVTM19FREVfRVhQS0VZX1dPUkRTCSgzICogREVTX0VYUEtFWV9XT1JEUykKI2RlZmluZSBERVMzX0VERV9CTE9DS19TSVpFCURFU19CTE9DS19TSVpFCgojZGVmaW5lIFJPUihkLGMsbykJKChkKSA9IChkKSA+PiAoYykgfCAoZCkgPDwgKG8pKQoKc3RydWN0IGRlc19jdHggewoJdTggaXZbREVTX0JMT0NLX1NJWkVdOwoJdTMyIGV4cGtleVtERVNfRVhQS0VZX1dPUkRTXTsKfTsKCnN0cnVjdCBkZXMzX2VkZV9jdHggewoJdTggaXZbREVTX0JMT0NLX1NJWkVdOwoJdTMyIGV4cGtleVtERVMzX0VERV9FWFBLRVlfV09SRFNdOwp9OwoKc3RhdGljIGNvbnN0IHUzMiBkZXNfa2V5bWFwW10gPSB7CgkweDAyMDgwMDA4LCAweDAyMDgyMDAwLCAweDAwMDAyMDA4LCAweDAwMDAwMDAwLAoJMHgwMjAwMjAwMCwgMHgwMDA4MDAwOCwgMHgwMjA4MDAwMCwgMHgwMjA4MjAwOCwKCTB4MDAwMDAwMDgsIDB4MDIwMDAwMDAsIDB4MDAwODIwMDAsIDB4MDAwMDIwMDgsCgkweDAwMDgyMDA4LCAweDAyMDAyMDA4LCAweDAyMDAwMDA4LCAweDAyMDgwMDAwLAoJMHgwMDAwMjAwMCwgMHgwMDA4MjAwOCwgMHgwMDA4MDAwOCwgMHgwMjAwMjAwMCwKCTB4MDIwODIwMDgsIDB4MDIwMDAwMDgsIDB4MDAwMDAwMDAsIDB4MDAwODIwMDAsCgkweDAyMDAwMDAwLCAweDAwMDgwMDAwLCAweDAyMDAyMDA4LCAweDAyMDgwMDA4LAoJMHgwMDA4MDAwMCwgMHgwMDAwMjAwMCwgMHgwMjA4MjAwMCwgMHgwMDAwMDAwOCwKCTB4MDAwODAwMDAsIDB4MDAwMDIwMDAsIDB4MDIwMDAwMDgsIDB4MDIwODIwMDgsCgkweDAwMDAyMDA4LCAweDAyMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDgyMDAwLAoJMHgwMjA4MDAwOCwgMHgwMjAwMjAwOCwgMHgwMjAwMjAwMCwgMHgwMDA4MDAwOCwKCTB4MDIwODIwMDAsIDB4MDAwMDAwMDgsIDB4MDAwODAwMDgsIDB4MDIwMDIwMDAsCgkweDAyMDgyMDA4LCAweDAwMDgwMDAwLCAweDAyMDgwMDAwLCAweDAyMDAwMDA4LAoJMHgwMDA4MjAwMCwgMHgwMDAwMjAwOCwgMHgwMjAwMjAwOCwgMHgwMjA4MDAwMCwKCTB4MDAwMDAwMDgsIDB4MDIwODIwMDAsIDB4MDAwODIwMDgsIDB4MDAwMDAwMDAsCgkweDAyMDAwMDAwLCAweDAyMDgwMDA4LCAweDAwMDAyMDAwLCAweDAwMDgyMDA4LAoKCTB4MDgwMDAwMDQsIDB4MDAwMjAwMDQsIDB4MDAwMDAwMDAsIDB4MDgwMjAyMDAsCgkweDAwMDIwMDA0LCAweDAwMDAwMjAwLCAweDA4MDAwMjA0LCAweDAwMDIwMDAwLAoJMHgwMDAwMDIwNCwgMHgwODAyMDIwNCwgMHgwMDAyMDIwMCwgMHgwODAwMDAwMCwKCTB4MDgwMDAyMDAsIDB4MDgwMDAwMDQsIDB4MDgwMjAwMDAsIDB4MDAwMjAyMDQsCgkweDAwMDIwMDAwLCAweDA4MDAwMjA0LCAweDA4MDIwMDA0LCAweDAwMDAwMDAwLAoJMHgwMDAwMDIwMCwgMHgwMDAwMDAwNCwgMHgwODAyMDIwMCwgMHgwODAyMDAwNCwKCTB4MDgwMjAyMDQsIDB4MDgwMjAwMDAsIDB4MDgwMDAwMDAsIDB4MDAwMDAyMDQsCgkweDAwMDAwMDA0LCAweDAwMDIwMjAwLCAweDAwMDIwMjA0LCAweDA4MDAwMjAwLAoJMHgwMDAwMDIwNCwgMHgwODAwMDAwMCwgMHgwODAwMDIwMCwgMHgwMDAyMDIwNCwKCTB4MDgwMjAyMDAsIDB4MDAwMjAwMDQsIDB4MDAwMDAwMDAsIDB4MDgwMDAyMDAsCgkweDA4MDAwMDAwLCAweDAwMDAwMjAwLCAweDA4MDIwMDA0LCAweDAwMDIwMDAwLAoJMHgwMDAyMDAwNCwgMHgwODAyMDIwNCwgMHgwMDAyMDIwMCwgMHgwMDAwMDAwNCwKCTB4MDgwMjAyMDQsIDB4MDAwMjAyMDAsIDB4MDAwMjAwMDAsIDB4MDgwMDAyMDQsCgkweDA4MDAwMDA0LCAweDA4MDIwMDAwLCAweDAwMDIwMjA0LCAweDAwMDAwMDAwLAoJMHgwMDAwMDIwMCwgMHgwODAwMDAwNCwgMHgwODAwMDIwNCwgMHgwODAyMDIwMCwKCTB4MDgwMjAwMDAsIDB4MDAwMDAyMDQsIDB4MDAwMDAwMDQsIDB4MDgwMjAwMDQsCgoJMHg4MDA0MDEwMCwgMHgwMTAwMDEwMCwgMHg4MDAwMDAwMCwgMHg4MTA0MDEwMCwKCTB4MDAwMDAwMDAsIDB4MDEwNDAwMDAsIDB4ODEwMDAxMDAsIDB4ODAwNDAwMDAsCgkweDAxMDQwMTAwLCAweDgxMDAwMDAwLCAweDAxMDAwMDAwLCAweDgwMDAwMTAwLAoJMHg4MTAwMDAwMCwgMHg4MDA0MDEwMCwgMHgwMDA0MDAwMCwgMHgwMTAwMDAwMCwKCTB4ODEwNDAwMDAsIDB4MDAwNDAxMDAsIDB4MDAwMDAxMDAsIDB4ODAwMDAwMDAsCgkweDAwMDQwMTAwLCAweDgxMDAwMTAwLCAweDAxMDQwMDAwLCAweDAwMDAwMTAwLAoJMHg4MDAwMDEwMCwgMHgwMDAwMDAwMCwgMHg4MDA0MDAwMCwgMHgwMTA0MDEwMCwKCTB4MDEwMDAxMDAsIDB4ODEwNDAwMDAsIDB4ODEwNDAxMDAsIDB4MDAwNDAwMDAsCgkweDgxMDQwMDAwLCAweDgwMDAwMTAwLCAweDAwMDQwMDAwLCAweDgxMDAwMDAwLAoJMHgwMDA0MDEwMCwgMHgwMTAwMDEwMCwgMHg4MDAwMDAwMCwgMHgwMTA0MDAwMCwKCTB4ODEwMDAxMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAxMDAsIDB4ODAwNDAwMDAsCgkweDAwMDAwMDAwLCAweDgxMDQwMDAwLCAweDAxMDQwMTAwLCAweDAwMDAwMTAwLAoJMHgwMTAwMDAwMCwgMHg4MTA0MDEwMCwgMHg4MDA0MDEwMCwgMHgwMDA0MDAwMCwKCTB4ODEwNDAxMDAsIDB4ODAwMDAwMDAsIDB4MDEwMDAxMDAsIDB4ODAwNDAxMDAsCgkweDgwMDQwMDAwLCAweDAwMDQwMTAwLCAweDAxMDQwMDAwLCAweDgxMDAwMTAwLAoJMHg4MDAwMDEwMCwgMHgwMTAwMDAwMCwgMHg4MTAwMDAwMCwgMHgwMTA0MDEwMCwKCgkweDA0MDEwODAxLCAweDAwMDAwMDAwLCAweDAwMDEwODAwLCAweDA0MDEwMDAwLAoJMHgwNDAwMDAwMSwgMHgwMDAwMDgwMSwgMHgwNDAwMDgwMCwgMHgwMDAxMDgwMCwKCTB4MDAwMDA4MDAsIDB4MDQwMTAwMDEsIDB4MDAwMDAwMDEsIDB4MDQwMDA4MDAsCgkweDAwMDEwMDAxLCAweDA0MDEwODAwLCAweDA0MDEwMDAwLCAweDAwMDAwMDAxLAoJMHgwMDAxMDAwMCwgMHgwNDAwMDgwMSwgMHgwNDAxMDAwMSwgMHgwMDAwMDgwMCwKCTB4MDAwMTA4MDEsIDB4MDQwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTAwMDEsCgkweDA0MDAwODAxLCAweDAwMDEwODAxLCAweDA0MDEwODAwLCAweDA0MDAwMDAxLAoJMHgwNDAwMDAwMCwgMHgwMDAxMDAwMCwgMHgwMDAwMDgwMSwgMHgwNDAxMDgwMSwKCTB4MDAwMTAwMDEsIDB4MDQwMTA4MDAsIDB4MDQwMDA4MDAsIDB4MDAwMTA4MDEsCgkweDA0MDEwODAxLCAweDAwMDEwMDAxLCAweDA0MDAwMDAxLCAweDAwMDAwMDAwLAoJMHgwNDAwMDAwMCwgMHgwMDAwMDgwMSwgMHgwMDAxMDAwMCwgMHgwNDAxMDAwMSwKCTB4MDAwMDA4MDAsIDB4MDQwMDAwMDAsIDB4MDAwMTA4MDEsIDB4MDQwMDA4MDEsCgkweDA0MDEwODAwLCAweDAwMDAwODAwLCAweDAwMDAwMDAwLCAweDA0MDAwMDAxLAoJMHgwMDAwMDAwMSwgMHgwNDAxMDgwMSwgMHgwMDAxMDgwMCwgMHgwNDAxMDAwMCwKCTB4MDQwMTAwMDEsIDB4MDAwMTAwMDAsIDB4MDAwMDA4MDEsIDB4MDQwMDA4MDAsCgkweDA0MDAwODAxLCAweDAwMDAwMDAxLCAweDA0MDEwMDAwLCAweDAwMDEwODAwLAoKCTB4MDAwMDA0MDAsIDB4MDAwMDAwMjAsIDB4MDAxMDAwMjAsIDB4NDAxMDAwMDAsCgkweDQwMTAwNDIwLCAweDQwMDAwNDAwLCAweDAwMDAwNDIwLCAweDAwMDAwMDAwLAoJMHgwMDEwMDAwMCwgMHg0MDEwMDAyMCwgMHg0MDAwMDAyMCwgMHgwMDEwMDQwMCwKCTB4NDAwMDAwMDAsIDB4MDAxMDA0MjAsIDB4MDAxMDA0MDAsIDB4NDAwMDAwMjAsCgkweDQwMTAwMDIwLCAweDAwMDAwNDAwLCAweDQwMDAwNDAwLCAweDQwMTAwNDIwLAoJMHgwMDAwMDAwMCwgMHgwMDEwMDAyMCwgMHg0MDEwMDAwMCwgMHgwMDAwMDQyMCwKCTB4NDAxMDA0MDAsIDB4NDAwMDA0MjAsIDB4MDAxMDA0MjAsIDB4NDAwMDAwMDAsCgkweDQwMDAwNDIwLCAweDQwMTAwNDAwLCAweDAwMDAwMDIwLCAweDAwMTAwMDAwLAoJMHg0MDAwMDQyMCwgMHgwMDEwMDQwMCwgMHg0MDEwMDQwMCwgMHg0MDAwMDAyMCwKCTB4MDAwMDA0MDAsIDB4MDAwMDAwMjAsIDB4MDAxMDAwMDAsIDB4NDAxMDA0MDAsCgkweDQwMTAwMDIwLCAweDQwMDAwNDIwLCAweDAwMDAwNDIwLCAweDAwMDAwMDAwLAoJMHgwMDAwMDAyMCwgMHg0MDEwMDAwMCwgMHg0MDAwMDAwMCwgMHgwMDEwMDAyMCwKCTB4MDAwMDAwMDAsIDB4NDAxMDAwMjAsIDB4MDAxMDAwMjAsIDB4MDAwMDA0MjAsCgkweDQwMDAwMDIwLCAweDAwMDAwNDAwLCAweDQwMTAwNDIwLCAweDAwMTAwMDAwLAoJMHgwMDEwMDQyMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDQwMCwgMHg0MDEwMDQyMCwKCTB4NDAxMDAwMDAsIDB4MDAxMDA0MjAsIDB4MDAxMDA0MDAsIDB4NDAwMDA0MDAsCgoJMHgwMDgwMDAwMCwgMHgwMDAwMTAwMCwgMHgwMDAwMDA0MCwgMHgwMDgwMTA0MiwKCTB4MDA4MDEwMDIsIDB4MDA4MDAwNDAsIDB4MDAwMDEwNDIsIDB4MDA4MDEwMDAsCgkweDAwMDAxMDAwLCAweDAwMDAwMDAyLCAweDAwODAwMDAyLCAweDAwMDAxMDQwLAoJMHgwMDgwMDA0MiwgMHgwMDgwMTAwMiwgMHgwMDgwMTA0MCwgMHgwMDAwMDAwMCwKCTB4MDAwMDEwNDAsIDB4MDA4MDAwMDAsIDB4MDAwMDEwMDIsIDB4MDAwMDAwNDIsCgkweDAwODAwMDQwLCAweDAwMDAxMDQyLCAweDAwMDAwMDAwLCAweDAwODAwMDAyLAoJMHgwMDAwMDAwMiwgMHgwMDgwMDA0MiwgMHgwMDgwMTA0MiwgMHgwMDAwMTAwMiwKCTB4MDA4MDEwMDAsIDB4MDAwMDAwNDAsIDB4MDAwMDAwNDIsIDB4MDA4MDEwNDAsCgkweDAwODAxMDQwLCAweDAwODAwMDQyLCAweDAwMDAxMDAyLCAweDAwODAxMDAwLAoJMHgwMDAwMTAwMCwgMHgwMDAwMDAwMiwgMHgwMDgwMDAwMiwgMHgwMDgwMDA0MCwKCTB4MDA4MDAwMDAsIDB4MDAwMDEwNDAsIDB4MDA4MDEwNDIsIDB4MDAwMDAwMDAsCgkweDAwMDAxMDQyLCAweDAwODAwMDAwLCAweDAwMDAwMDQwLCAweDAwMDAxMDAyLAoJMHgwMDgwMDA0MiwgMHgwMDAwMDA0MCwgMHgwMDAwMDAwMCwgMHgwMDgwMTA0MiwKCTB4MDA4MDEwMDIsIDB4MDA4MDEwNDAsIDB4MDAwMDAwNDIsIDB4MDAwMDEwMDAsCgkweDAwMDAxMDQwLCAweDAwODAxMDAyLCAweDAwODAwMDQwLCAweDAwMDAwMDQyLAoJMHgwMDAwMDAwMiwgMHgwMDAwMTA0MiwgMHgwMDgwMTAwMCwgMHgwMDgwMDAwMiwKCgkweDEwNDAwMDAwLCAweDAwNDA0MDEwLCAweDAwMDAwMDEwLCAweDEwNDAwMDEwLAoJMHgxMDAwNDAwMCwgMHgwMDQwMDAwMCwgMHgxMDQwMDAxMCwgMHgwMDAwNDAxMCwKCTB4MDA0MDAwMTAsIDB4MDAwMDQwMDAsIDB4MDA0MDQwMDAsIDB4MTAwMDAwMDAsCgkweDEwNDA0MDEwLCAweDEwMDAwMDEwLCAweDEwMDAwMDAwLCAweDEwNDA0MDAwLAoJMHgwMDAwMDAwMCwgMHgxMDAwNDAwMCwgMHgwMDQwNDAxMCwgMHgwMDAwMDAxMCwKCTB4MTAwMDAwMTAsIDB4MTA0MDQwMTAsIDB4MDAwMDQwMDAsIDB4MTA0MDAwMDAsCgkweDEwNDA0MDAwLCAweDAwNDAwMDEwLCAweDEwMDA0MDEwLCAweDAwNDA0MDAwLAoJMHgwMDAwNDAxMCwgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgxMDAwNDAxMCwKCTB4MDA0MDQwMTAsIDB4MDAwMDAwMTAsIDB4MTAwMDAwMDAsIDB4MDAwMDQwMDAsCgkweDEwMDAwMDEwLCAweDEwMDA0MDAwLCAweDAwNDA0MDAwLCAweDEwNDAwMDEwLAoJMHgwMDAwMDAwMCwgMHgwMDQwNDAxMCwgMHgwMDAwNDAxMCwgMHgxMDQwNDAwMCwKCTB4MTAwMDQwMDAsIDB4MDA0MDAwMDAsIDB4MTA0MDQwMTAsIDB4MTAwMDAwMDAsCgkweDEwMDA0MDEwLCAweDEwNDAwMDAwLCAweDAwNDAwMDAwLCAweDEwNDA0MDEwLAoJMHgwMDAwNDAwMCwgMHgwMDQwMDAxMCwgMHgxMDQwMDAxMCwgMHgwMDAwNDAxMCwKCTB4MDA0MDAwMTAsIDB4MDAwMDAwMDAsIDB4MTA0MDQwMDAsIDB4MTAwMDAwMTAsCgkweDEwNDAwMDAwLCAweDEwMDA0MDEwLCAweDAwMDAwMDEwLCAweDAwNDA0MDAwLAoKCTB4MDAyMDgwODAsIDB4MDAwMDgwMDAsIDB4MjAyMDAwMDAsIDB4MjAyMDgwODAsCgkweDAwMjAwMDAwLCAweDIwMDA4MDgwLCAweDIwMDA4MDAwLCAweDIwMjAwMDAwLAoJMHgyMDAwODA4MCwgMHgwMDIwODA4MCwgMHgwMDIwODAwMCwgMHgyMDAwMDA4MCwKCTB4MjAyMDAwODAsIDB4MDAyMDAwMDAsIDB4MDAwMDAwMDAsIDB4MjAwMDgwMDAsCgkweDAwMDA4MDAwLCAweDIwMDAwMDAwLCAweDAwMjAwMDgwLCAweDAwMDA4MDgwLAoJMHgyMDIwODA4MCwgMHgwMDIwODAwMCwgMHgyMDAwMDA4MCwgMHgwMDIwMDA4MCwKCTB4MjAwMDAwMDAsIDB4MDAwMDAwODAsIDB4MDAwMDgwODAsIDB4MjAyMDgwMDAsCgkweDAwMDAwMDgwLCAweDIwMjAwMDgwLCAweDIwMjA4MDAwLCAweDAwMDAwMDAwLAoJMHgwMDAwMDAwMCwgMHgyMDIwODA4MCwgMHgwMDIwMDA4MCwgMHgyMDAwODAwMCwKCTB4MDAyMDgwODAsIDB4MDAwMDgwMDAsIDB4MjAwMDAwODAsIDB4MDAyMDAwODAsCgkweDIwMjA4MDAwLCAweDAwMDAwMDgwLCAweDAwMDA4MDgwLCAweDIwMjAwMDAwLAoJMHgyMDAwODA4MCwgMHgyMDAwMDAwMCwgMHgyMDIwMDAwMCwgMHgwMDIwODAwMCwKCTB4MjAyMDgwODAsIDB4MDAwMDgwODAsIDB4MDAyMDgwMDAsIDB4MjAyMDAwODAsCgkweDAwMjAwMDAwLCAweDIwMDAwMDgwLCAweDIwMDA4MDAwLCAweDAwMDAwMDAwLAoJMHgwMDAwODAwMCwgMHgwMDIwMDAwMCwgMHgyMDIwMDA4MCwgMHgwMDIwODA4MCwKCTB4MjAwMDAwMDAsIDB4MjAyMDgwMDAsIDB4MDAwMDAwODAsIDB4MjAwMDgwODAsCn07CgpzdGF0aWMgY29uc3QgdTggcm90b3JzW10gPSB7CgkzNCwgMTMsICA1LCA0NiwgNDcsIDE4LCAzMiwgNDEsIDExLCA1MywgMzMsIDIwLAoJMTQsIDM2LCAzMCwgMjQsIDQ5LCAgMiwgMTUsIDM3LCA0MiwgNTAsICAwLCAyMSwKCTM4LCA0OCwgIDYsIDI2LCAzOSwgIDQsIDUyLCAyNSwgMTIsIDI3LCAzMSwgNDAsCgkxLCAxNywgMjgsIDI5LCAyMywgNTEsIDM1LCAgNywgIDMsIDIyLCAgOSwgNDMsCgoJNDEsIDIwLCAxMiwgNTMsIDU0LCAyNSwgMzksIDQ4LCAxOCwgMzEsIDQwLCAyNywKCTIxLCA0MywgMzcsICAwLCAgMSwgIDksIDIyLCA0NCwgNDksICAyLCAgNywgMjgsCgk0NSwgNTUsIDEzLCAzMywgNDYsIDExLCAgNiwgMzIsIDE5LCAzNCwgMzgsIDQ3LAoJOCwgMjQsIDM1LCAzNiwgMzAsICAzLCA0MiwgMTQsIDEwLCAyOSwgMTYsIDUwLAoKCTU1LCAzNCwgMjYsIDM4LCAxMSwgMzksIDUzLCAgNSwgMzIsIDQ1LCA1NCwgNDEsCgkzNSwgIDIsIDUxLCAxNCwgMTUsIDIzLCAzNiwgIDMsICA4LCAxNiwgMjEsIDQyLAoJNiwgMTIsIDI3LCA0NywgMzEsIDI1LCAyMCwgNDYsIDMzLCA0OCwgNTIsICA0LAoJMjIsICA3LCA0OSwgNTAsIDQ0LCAxNywgIDEsIDI4LCAyNCwgNDMsIDMwLCAgOSwKCgkxMiwgNDgsIDQwLCA1MiwgMjUsIDUzLCAzOCwgMTksIDQ2LCAgNiwgMTEsIDU1LAoJNDksIDE2LCAxMCwgMjgsIDI5LCAzNywgNTAsIDE3LCAyMiwgMzAsIDM1LCAgMSwKCTIwLCAyNiwgNDEsICA0LCA0NSwgMzksIDM0LCAzMSwgNDcsICA1LCAxMywgMTgsCgkzNiwgMjEsICA4LCAgOSwgIDMsICAwLCAxNSwgNDIsICA3LCAgMiwgNDQsIDIzLAoKCTI2LCAgNSwgNTQsIDEzLCAzOSwgMzgsIDUyLCAzMywgMzEsIDIwLCAyNSwgMTIsCgk4LCAzMCwgMjQsIDQyLCA0MywgNTEsICA5LCAgMCwgMzYsIDQ0LCA0OSwgMTUsCgkzNCwgNDAsIDU1LCAxOCwgIDYsIDUzLCA0OCwgNDUsICA0LCAxOSwgMjcsIDMyLAoJNTAsIDM1LCAyMiwgMjMsIDE3LCAxNCwgMjksICAxLCAyMSwgMTYsICAzLCAzNywKCgk0MCwgMTksIDExLCAyNywgNTMsIDUyLCAxMywgNDcsIDQ1LCAzNCwgMzksIDI2LAoJMjIsIDQ0LCAgNywgIDEsICAyLCAxMCwgMjMsIDE0LCA1MCwgIDMsICA4LCAyOSwKCTQ4LCA1NCwgMTIsIDMyLCAyMCwgMzgsICA1LCAgNiwgMTgsIDMzLCA0MSwgNDYsCgk5LCA0OSwgMzYsIDM3LCAgMCwgMjgsIDQzLCAxNSwgMzUsIDMwLCAxNywgNTEsCgoJNTQsIDMzLCAyNSwgNDEsIDM4LCAxMywgMjcsICA0LCAgNiwgNDgsIDUzLCA0MCwKCTM2LCAgMywgMjEsIDE1LCAxNiwgMjQsIDM3LCAyOCwgIDksIDE3LCAyMiwgNDMsCgk1LCAxMSwgMjYsIDQ2LCAzNCwgNTIsIDE5LCAyMCwgMzIsIDQ3LCA1NSwgMzEsCgkyMywgIDgsIDUwLCA1MSwgMTQsIDQyLCAgMiwgMjksIDQ5LCA0NCwgIDAsIDEwLAoKCTExLCA0NywgMzksIDU1LCA1MiwgMjcsIDQxLCAxOCwgMjAsICA1LCAzOCwgNTQsCgk1MCwgMTcsIDM1LCAyOSwgMzAsICA3LCA1MSwgNDIsIDIzLCAgMCwgMzYsICAyLAoJMTksIDI1LCA0MCwgMzEsIDQ4LCAxMywgMzMsIDM0LCA0NiwgIDQsIDEyLCA0NSwKCTM3LCAyMiwgIDksIDEwLCAyOCwgIDEsIDE2LCA0MywgIDgsICAzLCAxNCwgMjQsCgoJMTgsIDU0LCA0NiwgIDUsICA2LCAzNCwgNDgsIDI1LCAyNywgMTIsIDQ1LCAgNCwKCTIsIDI0LCA0MiwgMzYsIDM3LCAxNCwgIDMsIDQ5LCAzMCwgIDcsIDQzLCAgOSwKCTI2LCAzMiwgNDcsIDM4LCA1NSwgMjAsIDQwLCA0MSwgNTMsIDExLCAxOSwgNTIsCgk0NCwgMjksIDE2LCAxNywgMzUsICA4LCAyMywgNTAsIDE1LCAxMCwgMjEsICAwLAoKCTMyLCAxMSwgMzEsIDE5LCAyMCwgNDgsICA1LCAzOSwgNDEsIDI2LCAgNiwgMTgsCgkxNiwgIDcsICAxLCA1MCwgNTEsIDI4LCAxNywgIDgsIDQ0LCAyMSwgIDIsIDIzLAoJNDAsIDQ2LCAgNCwgNTIsIDEyLCAzNCwgNTQsIDU1LCAzOCwgMjUsIDMzLCAxMywKCTMsIDQzLCAzMCwgIDAsIDQ5LCAyMiwgMzcsICA5LCAyOSwgMjQsIDM1LCAxNCwKCgk0NiwgMjUsIDQ1LCAzMywgMzQsICA1LCAxOSwgNTMsIDU1LCA0MCwgMjAsIDMyLAoJMzAsIDIxLCAxNSwgIDksIDEwLCA0MiwgIDAsIDIyLCAgMywgMzUsIDE2LCAzNywKCTU0LCAzMSwgMTgsIDEzLCAyNiwgNDgsIDExLCAxMiwgNTIsIDM5LCA0NywgMjcsCgkxNywgIDIsIDQ0LCAxNCwgIDgsIDM2LCA1MSwgMjMsIDQzLCAgNywgNDksIDI4LAoKCTMxLCAzOSwgIDYsIDQ3LCA0OCwgMTksIDMzLCAzOCwgMTIsIDU0LCAzNCwgNDYsCgk0NCwgMzUsIDI5LCAyMywgMjQsICAxLCAxNCwgMzYsIDE3LCA0OSwgMzAsIDUxLAoJMTEsIDQ1LCAzMiwgMjcsIDQwLCAgNSwgMjUsIDI2LCAxMywgNTMsICA0LCA0MSwKCTAsIDE2LCAgMywgMjgsIDIyLCA1MCwgMTAsIDM3LCAgMiwgMjEsICA4LCA0MiwKCgk0NSwgNTMsIDIwLCAgNCwgIDUsIDMzLCA0NywgNTIsIDI2LCAxMSwgNDgsIDMxLAoJMywgNDksIDQzLCAzNywgIDcsIDE1LCAyOCwgNTAsICAwLCAgOCwgNDQsIDEwLAoJMjUsICA2LCA0NiwgNDEsIDU0LCAxOSwgMzksIDQwLCAyNywgMzgsIDE4LCA1NSwKCTE0LCAzMCwgMTcsIDQyLCAzNiwgIDksIDI0LCA1MSwgMTYsIDM1LCAyMiwgIDEsCgoJNiwgMzgsIDM0LCAxOCwgMTksIDQ3LCAgNCwgMTMsIDQwLCAyNSwgIDUsIDQ1LAoJMTcsICA4LCAgMiwgNTEsIDIxLCAyOSwgNDIsICA5LCAxNCwgMjIsICAzLCAyNCwKCTM5LCAyMCwgMzEsIDU1LCAxMSwgMzMsIDUzLCA1NCwgNDEsIDUyLCAzMiwgMTIsCgkyOCwgNDQsICAwLCAgMSwgNTAsIDIzLCAgNywgMTAsIDMwLCA0OSwgMzYsIDE1LAoKCTIwLCA1MiwgNDgsIDMyLCAzMywgIDQsIDE4LCAyNywgNTQsIDM5LCAxOSwgIDYsCgkwLCAyMiwgMTYsIDEwLCAzNSwgNDMsICAxLCAyMywgMjgsIDM2LCAxNywgIDcsCgk1MywgMzQsIDQ1LCAxMiwgMjUsIDQ3LCAzOCwgMTEsIDU1LCAxMywgNDYsIDI2LAoJNDIsICAzLCAxNCwgMTUsICA5LCAzNywgMjEsIDI0LCA0NCwgIDgsIDUwLCAyOSwKCgkyNywgIDYsIDU1LCAzOSwgNDAsIDExLCAyNSwgMzQsICA0LCA0NiwgMjYsIDEzLAoJNywgMjksIDIzLCAxNywgNDIsIDUwLCAgOCwgMzAsIDM1LCA0MywgMjQsIDE0LAoJMzEsIDQxLCA1MiwgMTksIDMyLCA1NCwgNDUsIDE4LCAgNSwgMjAsIDUzLCAzMywKCTQ5LCAxMCwgMjEsIDIyLCAxNiwgNDQsIDI4LCAgMCwgNTEsIDE1LCAgMiwgMzYsCn07CgpzdGF0aWMgY29uc3QgdTggcGFyaXR5W10gPSB7Cgk4LDEsMCw4LDAsOCw4LDAsMCw4LDgsMCw4LDAsMiw4LDAsOCw4LDAsOCwwLDAsOCw4LDAsMCw4LDAsOCw4LDMsCgkwLDgsOCwwLDgsMCwwLDgsOCwwLDAsOCwwLDgsOCwwLDgsMCwwLDgsMCw4LDgsMCwwLDgsOCwwLDgsMCwwLDgsCgkwLDgsOCwwLDgsMCwwLDgsOCwwLDAsOCwwLDgsOCwwLDgsMCwwLDgsMCw4LDgsMCwwLDgsOCwwLDgsMCwwLDgsCgk4LDAsMCw4LDAsOCw4LDAsMCw4LDgsMCw4LDAsMCw4LDAsOCw4LDAsOCwwLDAsOCw4LDAsMCw4LDAsOCw4LDAsCgkwLDgsOCwwLDgsMCwwLDgsOCwwLDAsOCwwLDgsOCwwLDgsMCwwLDgsMCw4LDgsMCwwLDgsOCwwLDgsMCwwLDgsCgk4LDAsMCw4LDAsOCw4LDAsMCw4LDgsMCw4LDAsMCw4LDAsOCw4LDAsOCwwLDAsOCw4LDAsMCw4LDAsOCw4LDAsCgk4LDAsMCw4LDAsOCw4LDAsMCw4LDgsMCw4LDAsMCw4LDAsOCw4LDAsOCwwLDAsOCw4LDAsMCw4LDAsOCw4LDAsCgk0LDgsOCwwLDgsMCwwLDgsOCwwLDAsOCwwLDgsOCwwLDgsNSwwLDgsMCw4LDgsMCwwLDgsOCwwLDgsMCw2LDgsCn07CgoKc3RhdGljIHZvaWQgZGVzX3NtYWxsX2ZpcHNfZW5jcnlwdCh1MzIgKmV4cGtleSwgdTggKmRzdCwgY29uc3QgdTggKnNyYykKewoJdTMyIHgsIHksIHo7CgkKCXggID0gc3JjWzddOwoJeCA8PD0gODsKCXggfD0gc3JjWzZdOwoJeCA8PD0gODsKCXggfD0gc3JjWzVdOwoJeCA8PD0gODsKCXggfD0gc3JjWzRdOwoJeSAgPSBzcmNbM107Cgl5IDw8PSA4OwoJeSB8PSBzcmNbMl07Cgl5IDw8PSA4OwoJeSB8PSBzcmNbMV07Cgl5IDw8PSA4OwoJeSB8PSBzcmNbMF07Cgl6ICA9ICgoeCA+PiAwMDQpIF4geSkgJiAweDBGMEYwRjBGTDsKCXggXj0geiA8PCAwMDQ7Cgl5IF49IHo7Cgl6ICA9ICgoeSA+PiAwMjApIF4geCkgJiAweDAwMDBGRkZGTDsKCXkgXj0geiA8PCAwMjA7Cgl4IF49IHo7Cgl6ICA9ICgoeCA+PiAwMDIpIF4geSkgJiAweDMzMzMzMzMzTDsKCXggXj0geiA8PCAwMDI7Cgl5IF49IHo7Cgl6ICA9ICgoeSA+PiAwMTApIF4geCkgJiAweDAwRkYwMEZGTDsKCXkgXj0geiA8PCAwMTA7Cgl4IF49IHo7Cgl4ICA9IHggPj4gMSB8IHggPDwgMzE7Cgl6ICA9ICh4IF4geSkgJiAweDU1NTU1NTU1TDsKCXkgXj0gejsKCXggXj0gejsKCXkgID0geSA+PiAxIHwgeSA8PCAzMTsKCXogID0gZXhwa2V5WzBdOwoJeiBePSB5OwoJeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDE5MikgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMTI4KSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyA2NCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl4IF49ICogKHUzMiAqKSAoKHU4ICopIGRlc19rZXltYXAgKyAoMHhGQyAmIHopKTsKCXogID0gZXhwa2V5WzFdOwoJeiBePSB5OwoJeiAgPSB6IDw8IDQgfCB6ID4+IDI4OwoJeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDQ0OCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMzg0KSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAzMjApICsgKDB4RkMgJiB6KSk7Cgl6ID4+PSA4OwoJeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDI1NikgKyAoMHhGQyAmIHopKTsKCXogID0gZXhwa2V5WzJdOwoJeiBePSB4OwoJeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDE5MikgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMTI4KSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyA2NCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl5IF49ICogKHUzMiAqKSAoKHU4ICopIGRlc19rZXltYXAgKyAoMHhGQyAmIHopKTsKCXogID0gZXhwa2V5WzNdOwoJeiBePSB4OwoJeiAgPSB6IDw8IDQgfCB6ID4+IDI4OwoJeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDQ0OCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMzg0KSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAzMjApICsgKDB4RkMgJiB6KSk7Cgl6ID4+PSA4OwoJeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDI1NikgKyAoMHhGQyAmIHopKTsKCXogID0gZXhwa2V5WzRdOwoJeiBePSB5OwoJeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDE5MikgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMTI4KSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyA2NCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl4IF49ICogKHUzMiAqKSAoKHU4ICopIGRlc19rZXltYXAgKyAoMHhGQyAmIHopKTsKCXogID0gZXhwa2V5WzVdOwoJeiBePSB5OwoJeiAgPSB6IDw8IDQgfCB6ID4+IDI4OwoJeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDQ0OCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMzg0KSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAzMjApICsgKDB4RkMgJiB6KSk7Cgl6ID4+PSA4OwoJeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDI1NikgKyAoMHhGQyAmIHopKTsKCXogID0gZXhwa2V5WzZdOwoJeiBePSB4OwoJeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDE5MikgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMTI4KSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyA2NCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl5IF49ICogKHUzMiAqKSAoKHU4ICopIGRlc19rZXltYXAgKyAoMHhGQyAmIHopKTsKCXogID0gZXhwa2V5WzddOwoJeiBePSB4OwoJeiAgPSB6IDw8IDQgfCB6ID4+IDI4OwoJeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDQ0OCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMzg0KSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAzMjApICsgKDB4RkMgJiB6KSk7Cgl6ID4+PSA4OwoJeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDI1NikgKyAoMHhGQyAmIHopKTsKCXogID0gZXhwa2V5WzhdOwoJeiBePSB5OwoJeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDE5MikgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMTI4KSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyA2NCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl4IF49ICogKHUzMiAqKSAoKHU4ICopIGRlc19rZXltYXAgKyAoMHhGQyAmIHopKTsKCXogID0gZXhwa2V5WzldOwoJeiBePSB5OwoJeiAgPSB6IDw8IDQgfCB6ID4+IDI4OwoJeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDQ0OCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMzg0KSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAzMjApICsgKDB4RkMgJiB6KSk7Cgl6ID4+PSA4OwoJeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDI1NikgKyAoMHhGQyAmIHopKTsKCXogID0gZXhwa2V5WzEwXTsKCXogXj0geDsKCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAxOTIpICsgKDB4RkMgJiB6KSk7Cgl6ID4+PSA4OwoJeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDEyOCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgNjQpICsgKDB4RkMgJiB6KSk7Cgl6ID4+PSA4OwoJeSBePSAqICh1MzIgKikgKCh1OCAqKSBkZXNfa2V5bWFwICsgKDB4RkMgJiB6KSk7Cgl6ICA9IGV4cGtleVsxMV07Cgl6IF49IHg7Cgl6ICA9IHogPDwgNCB8IHogPj4gMjg7Cgl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgNDQ4KSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAzODQpICsgKDB4RkMgJiB6KSk7Cgl6ID4+PSA4OwoJeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDMyMCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMjU2KSArICgweEZDICYgeikpOwoJeiAgPSBleHBrZXlbMTJdOwoJeiBePSB5OwoJeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDE5MikgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMTI4KSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyA2NCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl4IF49ICogKHUzMiAqKSAoKHU4ICopIGRlc19rZXltYXAgKyAoMHhGQyAmIHopKTsKCXogID0gZXhwa2V5WzEzXTsKCXogXj0geTsKCXogID0geiA8PCA0IHwgeiA+PiAyODsKCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyA0NDgpICsgKDB4RkMgJiB6KSk7Cgl6ID4+PSA4OwoJeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDM4NCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMzIwKSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAyNTYpICsgKDB4RkMgJiB6KSk7Cgl6ICA9IGV4cGtleVsxNF07Cgl6IF49IHg7Cgl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMTkyKSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAxMjgpICsgKDB4RkMgJiB6KSk7Cgl6ID4+PSA4OwoJeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDY0KSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXkgXj0gKiAodTMyICopICgodTggKikgZGVzX2tleW1hcCArICgweEZDICYgeikpOwoJeiAgPSBleHBrZXlbMTVdOwoJeiBePSB4OwoJeiAgPSB6IDw8IDQgfCB6ID4+IDI4OwoJeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDQ0OCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMzg0KSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAzMjApICsgKDB4RkMgJiB6KSk7Cgl6ID4+PSA4OwoJeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDI1NikgKyAoMHhGQyAmIHopKTsKCXogID0gZXhwa2V5WzE2XTsKCXogXj0geTsKCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAxOTIpICsgKDB4RkMgJiB6KSk7Cgl6ID4+PSA4OwoJeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDEyOCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgNjQpICsgKDB4RkMgJiB6KSk7Cgl6ID4+PSA4OwoJeCBePSAqICh1MzIgKikgKCh1OCAqKSBkZXNfa2V5bWFwICsgKDB4RkMgJiB6KSk7Cgl6ICA9IGV4cGtleVsxN107Cgl6IF49IHk7Cgl6ICA9IHogPDwgNCB8IHogPj4gMjg7Cgl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgNDQ4KSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAzODQpICsgKDB4RkMgJiB6KSk7Cgl6ID4+PSA4OwoJeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDMyMCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMjU2KSArICgweEZDICYgeikpOwoJeiAgPSBleHBrZXlbMThdOwoJeiBePSB4OwoJeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDE5MikgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMTI4KSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyA2NCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl5IF49ICogKHUzMiAqKSAoKHU4ICopIGRlc19rZXltYXAgKyAoMHhGQyAmIHopKTsKCXogID0gZXhwa2V5WzE5XTsKCXogXj0geDsKCXogID0geiA8PCA0IHwgeiA+PiAyODsKCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyA0NDgpICsgKDB4RkMgJiB6KSk7Cgl6ID4+PSA4OwoJeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDM4NCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMzIwKSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAyNTYpICsgKDB4RkMgJiB6KSk7Cgl6ICA9IGV4cGtleVsyMF07Cgl6IF49IHk7Cgl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMTkyKSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAxMjgpICsgKDB4RkMgJiB6KSk7Cgl6ID4+PSA4OwoJeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDY0KSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXggXj0gKiAodTMyICopICgodTggKikgZGVzX2tleW1hcCArICgweEZDICYgeikpOwoJeiAgPSBleHBrZXlbMjFdOwoJeiBePSB5OwoJeiAgPSB6IDw8IDQgfCB6ID4+IDI4OwoJeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDQ0OCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMzg0KSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAzMjApICsgKDB4RkMgJiB6KSk7Cgl6ID4+PSA4OwoJeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDI1NikgKyAoMHhGQyAmIHopKTsKCXogID0gZXhwa2V5WzIyXTsKCXogXj0geDsKCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAxOTIpICsgKDB4RkMgJiB6KSk7Cgl6ID4+PSA4OwoJeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDEyOCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgNjQpICsgKDB4RkMgJiB6KSk7Cgl6ID4+PSA4OwoJeSBePSAqICh1MzIgKikgKCh1OCAqKSBkZXNfa2V5bWFwICsgKDB4RkMgJiB6KSk7Cgl6ICA9IGV4cGtleVsyM107Cgl6IF49IHg7Cgl6ICA9IHogPDwgNCB8IHogPj4gMjg7Cgl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgNDQ4KSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAzODQpICsgKDB4RkMgJiB6KSk7Cgl6ID4+PSA4OwoJeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDMyMCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMjU2KSArICgweEZDICYgeikpOwoJeiAgPSBleHBrZXlbMjRdOwoJeiBePSB5OwoJeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDE5MikgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMTI4KSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyA2NCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl4IF49ICogKHUzMiAqKSAoKHU4ICopIGRlc19rZXltYXAgKyAoMHhGQyAmIHopKTsKCXogID0gZXhwa2V5WzI1XTsKCXogXj0geTsKCXogID0geiA8PCA0IHwgeiA+PiAyODsKCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyA0NDgpICsgKDB4RkMgJiB6KSk7Cgl6ID4+PSA4OwoJeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDM4NCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMzIwKSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAyNTYpICsgKDB4RkMgJiB6KSk7Cgl6ICA9IGV4cGtleVsyNl07Cgl6IF49IHg7Cgl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMTkyKSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAxMjgpICsgKDB4RkMgJiB6KSk7Cgl6ID4+PSA4OwoJeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDY0KSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXkgXj0gKiAodTMyICopICgodTggKikgZGVzX2tleW1hcCArICgweEZDICYgeikpOwoJeiAgPSBleHBrZXlbMjddOwoJeiBePSB4OwoJeiAgPSB6IDw8IDQgfCB6ID4+IDI4OwoJeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDQ0OCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMzg0KSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAzMjApICsgKDB4RkMgJiB6KSk7Cgl6ID4+PSA4OwoJeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDI1NikgKyAoMHhGQyAmIHopKTsKCXogID0gZXhwa2V5WzI4XTsKCXogXj0geTsKCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAxOTIpICsgKDB4RkMgJiB6KSk7Cgl6ID4+PSA4OwoJeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDEyOCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgNjQpICsgKDB4RkMgJiB6KSk7Cgl6ID4+PSA4OwoJeCBePSAqICh1MzIgKikgKCh1OCAqKSBkZXNfa2V5bWFwICsgKDB4RkMgJiB6KSk7Cgl6ICA9IGV4cGtleVsyOV07Cgl6IF49IHk7Cgl6ICA9IHogPDwgNCB8IHogPj4gMjg7Cgl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgNDQ4KSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAzODQpICsgKDB4RkMgJiB6KSk7Cgl6ID4+PSA4OwoJeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDMyMCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMjU2KSArICgweEZDICYgeikpOwoJeiAgPSBleHBrZXlbMzBdOwoJeiBePSB4OwoJeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDE5MikgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMTI4KSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyA2NCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl5IF49ICogKHUzMiAqKSAoKHU4ICopIGRlc19rZXltYXAgKyAoMHhGQyAmIHopKTsKCXogID0gZXhwa2V5WzMxXTsKCXogXj0geDsKCXogID0geiA8PCA0IHwgeiA+PiAyODsKCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyA0NDgpICsgKDB4RkMgJiB6KSk7Cgl6ID4+PSA4OwoJeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDM4NCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMzIwKSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAyNTYpICsgKDB4RkMgJiB6KSk7Cgl4ICA9IHggPDwgMSB8IHggPj4gMzE7Cgl6ICA9ICh4IF4geSkgJiAweDU1NTU1NTU1TDsKCXkgXj0gejsKCXggXj0gejsKCXkgID0geSA8PCAxIHwgeSA+PiAzMTsKCXogID0gKCh4ID4+IDAxMCkgXiB5KSAmIDB4MDBGRjAwRkZMOwoJeCBePSB6IDw8IDAxMDsKCXkgXj0gejsKCXogID0gKCh5ID4+IDAwMikgXiB4KSAmIDB4MzMzMzMzMzNMOwoJeSBePSB6IDw8IDAwMjsKCXggXj0gejsKCXogID0gKCh4ID4+IDAyMCkgXiB5KSAmIDB4MDAwMEZGRkZMOwoJeCBePSB6IDw8IDAyMDsKCXkgXj0gejsKCXogID0gKCh5ID4+IDAwNCkgXiB4KSAmIDB4MEYwRjBGMEZMOwoJeSBePSB6IDw8IDAwNDsKCXggXj0gejsKCWRzdFswXSA9IHg7Cgl4ID4+PSA4OwoJZHN0WzFdID0geDsKCXggPj49IDg7Cglkc3RbMl0gPSB4OwoJeCA+Pj0gODsKCWRzdFszXSA9IHg7Cglkc3RbNF0gPSB5OwoJeSA+Pj0gODsKCWRzdFs1XSA9IHk7Cgl5ID4+PSA4OwoJZHN0WzZdID0geTsKCXkgPj49IDg7Cglkc3RbN10gPSB5Owp9CgpzdGF0aWMgdm9pZCBkZXNfc21hbGxfZmlwc19kZWNyeXB0KHUzMiAqZXhwa2V5LCB1OCAqZHN0LCBjb25zdCB1OCAqc3JjKQp7Cgl1MzIgeCwgeSwgejsKCQoJeCAgPSBzcmNbN107Cgl4IDw8PSA4OwoJeCB8PSBzcmNbNl07Cgl4IDw8PSA4OwoJeCB8PSBzcmNbNV07Cgl4IDw8PSA4OwoJeCB8PSBzcmNbNF07Cgl5ICA9IHNyY1szXTsKCXkgPDw9IDg7Cgl5IHw9IHNyY1syXTsKCXkgPDw9IDg7Cgl5IHw9IHNyY1sxXTsKCXkgPDw9IDg7Cgl5IHw9IHNyY1swXTsKCXogID0gKCh4ID4+IDAwNCkgXiB5KSAmIDB4MEYwRjBGMEZMOwoJeCBePSB6IDw8IDAwNDsKCXkgXj0gejsKCXogID0gKCh5ID4+IDAyMCkgXiB4KSAmIDB4MDAwMEZGRkZMOwoJeSBePSB6IDw8IDAyMDsKCXggXj0gejsKCXogID0gKCh4ID4+IDAwMikgXiB5KSAmIDB4MzMzMzMzMzNMOwoJeCBePSB6IDw8IDAwMjsKCXkgXj0gejsKCXogID0gKCh5ID4+IDAxMCkgXiB4KSAmIDB4MDBGRjAwRkZMOwoJeSBePSB6IDw8IDAxMDsKCXggXj0gejsKCXggID0geCA+PiAxIHwgeCA8PCAzMTsKCXogID0gKHggXiB5KSAmIDB4NTU1NTU1NTVMOwoJeSBePSB6OwoJeCBePSB6OwoJeSAgPSB5ID4+IDEgfCB5IDw8IDMxOwoJeiAgPSBleHBrZXlbMzFdOwoJeiBePSB5OwoJeiAgPSB6IDw8IDQgfCB6ID4+IDI4OwoJeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDQ0OCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMzg0KSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAzMjApICsgKDB4RkMgJiB6KSk7Cgl6ID4+PSA4OwoJeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDI1NikgKyAoMHhGQyAmIHopKTsKCXogID0gZXhwa2V5WzMwXTsKCXogXj0geTsKCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAxOTIpICsgKDB4RkMgJiB6KSk7Cgl6ID4+PSA4OwoJeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDEyOCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgNjQpICsgKDB4RkMgJiB6KSk7Cgl6ID4+PSA4OwoJeCBePSAqICh1MzIgKikgKCh1OCAqKSBkZXNfa2V5bWFwICsgKDB4RkMgJiB6KSk7Cgl6ICA9IGV4cGtleVsyOV07Cgl6IF49IHg7Cgl6ICA9IHogPDwgNCB8IHogPj4gMjg7Cgl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgNDQ4KSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAzODQpICsgKDB4RkMgJiB6KSk7Cgl6ID4+PSA4OwoJeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDMyMCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMjU2KSArICgweEZDICYgeikpOwoJeiAgPSBleHBrZXlbMjhdOwoJeiBePSB4OwoJeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDE5MikgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMTI4KSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyA2NCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl5IF49ICogKHUzMiAqKSAoKHU4ICopIGRlc19rZXltYXAgKyAoMHhGQyAmIHopKTsKCXogID0gZXhwa2V5WzI3XTsKCXogXj0geTsKCXogID0geiA8PCA0IHwgeiA+PiAyODsKCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyA0NDgpICsgKDB4RkMgJiB6KSk7Cgl6ID4+PSA4OwoJeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDM4NCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMzIwKSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAyNTYpICsgKDB4RkMgJiB6KSk7Cgl6ICA9IGV4cGtleVsyNl07Cgl6IF49IHk7Cgl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMTkyKSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAxMjgpICsgKDB4RkMgJiB6KSk7Cgl6ID4+PSA4OwoJeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDY0KSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXggXj0gKiAodTMyICopICgodTggKikgZGVzX2tleW1hcCArICgweEZDICYgeikpOwoJeiAgPSBleHBrZXlbMjVdOwoJeiBePSB4OwoJeiAgPSB6IDw8IDQgfCB6ID4+IDI4OwoJeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDQ0OCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMzg0KSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAzMjApICsgKDB4RkMgJiB6KSk7Cgl6ID4+PSA4OwoJeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDI1NikgKyAoMHhGQyAmIHopKTsKCXogID0gZXhwa2V5WzI0XTsKCXogXj0geDsKCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAxOTIpICsgKDB4RkMgJiB6KSk7Cgl6ID4+PSA4OwoJeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDEyOCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgNjQpICsgKDB4RkMgJiB6KSk7Cgl6ID4+PSA4OwoJeSBePSAqICh1MzIgKikgKCh1OCAqKSBkZXNfa2V5bWFwICsgKDB4RkMgJiB6KSk7Cgl6ICA9IGV4cGtleVsyM107Cgl6IF49IHk7Cgl6ICA9IHogPDwgNCB8IHogPj4gMjg7Cgl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgNDQ4KSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAzODQpICsgKDB4RkMgJiB6KSk7Cgl6ID4+PSA4OwoJeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDMyMCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMjU2KSArICgweEZDICYgeikpOwoJeiAgPSBleHBrZXlbMjJdOwoJeiBePSB5OwoJeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDE5MikgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMTI4KSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyA2NCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl4IF49ICogKHUzMiAqKSAoKHU4ICopIGRlc19rZXltYXAgKyAoMHhGQyAmIHopKTsKCXogID0gZXhwa2V5WzIxXTsKCXogXj0geDsKCXogID0geiA8PCA0IHwgeiA+PiAyODsKCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyA0NDgpICsgKDB4RkMgJiB6KSk7Cgl6ID4+PSA4OwoJeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDM4NCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMzIwKSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAyNTYpICsgKDB4RkMgJiB6KSk7Cgl6ICA9IGV4cGtleVsyMF07Cgl6IF49IHg7Cgl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMTkyKSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAxMjgpICsgKDB4RkMgJiB6KSk7Cgl6ID4+PSA4OwoJeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDY0KSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXkgXj0gKiAodTMyICopICgodTggKikgZGVzX2tleW1hcCArICgweEZDICYgeikpOwoJeiAgPSBleHBrZXlbMTldOwoJeiBePSB5OwoJeiAgPSB6IDw8IDQgfCB6ID4+IDI4OwoJeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDQ0OCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMzg0KSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAzMjApICsgKDB4RkMgJiB6KSk7Cgl6ID4+PSA4OwoJeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDI1NikgKyAoMHhGQyAmIHopKTsKCXogID0gZXhwa2V5WzE4XTsKCXogXj0geTsKCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAxOTIpICsgKDB4RkMgJiB6KSk7Cgl6ID4+PSA4OwoJeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDEyOCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgNjQpICsgKDB4RkMgJiB6KSk7Cgl6ID4+PSA4OwoJeCBePSAqICh1MzIgKikgKCh1OCAqKSBkZXNfa2V5bWFwICsgKDB4RkMgJiB6KSk7Cgl6ICA9IGV4cGtleVsxN107Cgl6IF49IHg7Cgl6ICA9IHogPDwgNCB8IHogPj4gMjg7Cgl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgNDQ4KSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAzODQpICsgKDB4RkMgJiB6KSk7Cgl6ID4+PSA4OwoJeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDMyMCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMjU2KSArICgweEZDICYgeikpOwoJeiAgPSBleHBrZXlbMTZdOwoJeiBePSB4OwoJeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDE5MikgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMTI4KSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyA2NCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl5IF49ICogKHUzMiAqKSAoKHU4ICopIGRlc19rZXltYXAgKyAoMHhGQyAmIHopKTsKCXogID0gZXhwa2V5WzE1XTsKCXogXj0geTsKCXogID0geiA8PCA0IHwgeiA+PiAyODsKCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyA0NDgpICsgKDB4RkMgJiB6KSk7Cgl6ID4+PSA4OwoJeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDM4NCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMzIwKSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAyNTYpICsgKDB4RkMgJiB6KSk7Cgl6ICA9IGV4cGtleVsxNF07Cgl6IF49IHk7Cgl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMTkyKSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAxMjgpICsgKDB4RkMgJiB6KSk7Cgl6ID4+PSA4OwoJeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDY0KSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXggXj0gKiAodTMyICopICgodTggKikgZGVzX2tleW1hcCArICgweEZDICYgeikpOwoJeiAgPSBleHBrZXlbMTNdOwoJeiBePSB4OwoJeiAgPSB6IDw8IDQgfCB6ID4+IDI4OwoJeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDQ0OCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMzg0KSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAzMjApICsgKDB4RkMgJiB6KSk7Cgl6ID4+PSA4OwoJeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDI1NikgKyAoMHhGQyAmIHopKTsKCXogID0gZXhwa2V5WzEyXTsKCXogXj0geDsKCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAxOTIpICsgKDB4RkMgJiB6KSk7Cgl6ID4+PSA4OwoJeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDEyOCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgNjQpICsgKDB4RkMgJiB6KSk7Cgl6ID4+PSA4OwoJeSBePSAqICh1MzIgKikgKCh1OCAqKSBkZXNfa2V5bWFwICsgKDB4RkMgJiB6KSk7Cgl6ICA9IGV4cGtleVsxMV07Cgl6IF49IHk7Cgl6ICA9IHogPDwgNCB8IHogPj4gMjg7Cgl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgNDQ4KSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAzODQpICsgKDB4RkMgJiB6KSk7Cgl6ID4+PSA4OwoJeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDMyMCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMjU2KSArICgweEZDICYgeikpOwoJeiAgPSBleHBrZXlbMTBdOwoJeiBePSB5OwoJeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDE5MikgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMTI4KSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyA2NCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl4IF49ICogKHUzMiAqKSAoKHU4ICopIGRlc19rZXltYXAgKyAoMHhGQyAmIHopKTsKCXogID0gZXhwa2V5WzldOwoJeiBePSB4OwoJeiAgPSB6IDw8IDQgfCB6ID4+IDI4OwoJeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDQ0OCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMzg0KSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAzMjApICsgKDB4RkMgJiB6KSk7Cgl6ID4+PSA4OwoJeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDI1NikgKyAoMHhGQyAmIHopKTsKCXogID0gZXhwa2V5WzhdOwoJeiBePSB4OwoJeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDE5MikgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMTI4KSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyA2NCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl5IF49ICogKHUzMiAqKSAoKHU4ICopIGRlc19rZXltYXAgKyAoMHhGQyAmIHopKTsKCXogID0gZXhwa2V5WzddOwoJeiBePSB5OwoJeiAgPSB6IDw8IDQgfCB6ID4+IDI4OwoJeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDQ0OCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMzg0KSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAzMjApICsgKDB4RkMgJiB6KSk7Cgl6ID4+PSA4OwoJeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDI1NikgKyAoMHhGQyAmIHopKTsKCXogID0gZXhwa2V5WzZdOwoJeiBePSB5OwoJeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDE5MikgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMTI4KSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyA2NCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl4IF49ICogKHUzMiAqKSAoKHU4ICopIGRlc19rZXltYXAgKyAoMHhGQyAmIHopKTsKCXogID0gZXhwa2V5WzVdOwoJeiBePSB4OwoJeiAgPSB6IDw8IDQgfCB6ID4+IDI4OwoJeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDQ0OCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMzg0KSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAzMjApICsgKDB4RkMgJiB6KSk7Cgl6ID4+PSA4OwoJeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDI1NikgKyAoMHhGQyAmIHopKTsKCXogID0gZXhwa2V5WzRdOwoJeiBePSB4OwoJeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDE5MikgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMTI4KSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyA2NCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl5IF49ICogKHUzMiAqKSAoKHU4ICopIGRlc19rZXltYXAgKyAoMHhGQyAmIHopKTsKCXogID0gZXhwa2V5WzNdOwoJeiBePSB5OwoJeiAgPSB6IDw8IDQgfCB6ID4+IDI4OwoJeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDQ0OCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMzg0KSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAzMjApICsgKDB4RkMgJiB6KSk7Cgl6ID4+PSA4OwoJeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDI1NikgKyAoMHhGQyAmIHopKTsKCXogID0gZXhwa2V5WzJdOwoJeiBePSB5OwoJeCBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDE5MikgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl4IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMTI4KSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXggXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyA2NCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl4IF49ICogKHUzMiAqKSAoKHU4ICopIGRlc19rZXltYXAgKyAoMHhGQyAmIHopKTsKCXogID0gZXhwa2V5WzFdOwoJeiBePSB4OwoJeiAgPSB6IDw8IDQgfCB6ID4+IDI4OwoJeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDQ0OCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMzg0KSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyAzMjApICsgKDB4RkMgJiB6KSk7Cgl6ID4+PSA4OwoJeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDI1NikgKyAoMHhGQyAmIHopKTsKCXogID0gZXhwa2V5WzBdOwoJeiBePSB4OwoJeSBePSAqICh1MzIgKikgKCh1OCAqKSAoZGVzX2tleW1hcCArIDE5MikgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl5IF49ICogKHUzMiAqKSAoKHU4ICopIChkZXNfa2V5bWFwICsgMTI4KSArICgweEZDICYgeikpOwoJeiA+Pj0gODsKCXkgXj0gKiAodTMyICopICgodTggKikgKGRlc19rZXltYXAgKyA2NCkgKyAoMHhGQyAmIHopKTsKCXogPj49IDg7Cgl5IF49ICogKHUzMiAqKSAoKHU4ICopIGRlc19rZXltYXAgKyAoMHhGQyAmIHopKTsKCXggID0geCA8PCAxIHwgeCA+PiAzMTsKCXogID0gKHggXiB5KSAmIDB4NTU1NTU1NTVMOwoJeSBePSB6OwoJeCBePSB6OwoJeSAgPSB5IDw8IDEgfCB5ID4+IDMxOwoJeiAgPSAoKHggPj4gMDEwKSBeIHkpICYgMHgwMEZGMDBGRkw7Cgl4IF49IHogPDwgMDEwOwoJeSBePSB6OwoJeiAgPSAoKHkgPj4gMDAyKSBeIHgpICYgMHgzMzMzMzMzM0w7Cgl5IF49IHogPDwgMDAyOwoJeCBePSB6OwoJeiAgPSAoKHggPj4gMDIwKSBeIHkpICYgMHgwMDAwRkZGRkw7Cgl4IF49IHogPDwgMDIwOwoJeSBePSB6OwoJeiAgPSAoKHkgPj4gMDA0KSBeIHgpICYgMHgwRjBGMEYwRkw7Cgl5IF49IHogPDwgMDA0OwoJeCBePSB6OwoJZHN0WzBdID0geDsKCXggPj49IDg7Cglkc3RbMV0gPSB4OwoJeCA+Pj0gODsKCWRzdFsyXSA9IHg7Cgl4ID4+PSA4OwoJZHN0WzNdID0geDsKCWRzdFs0XSA9IHk7Cgl5ID4+PSA4OwoJZHN0WzVdID0geTsKCXkgPj49IDg7Cglkc3RbNl0gPSB5OwoJeSA+Pj0gODsKCWRzdFs3XSA9IHk7Cn0KCi8qCiAqIFJGQzI0NTE6IFdlYWsga2V5IGNoZWNrcyBTSE9VTEQgYmUgcGVyZm9ybWVkLgogKi8Kc3RhdGljIGludCBzZXRrZXkodTMyICpleHBrZXksIGNvbnN0IHU4ICprZXksIHVuc2lnbmVkIGludCBrZXlsZW4sIHUzMiAqZmxhZ3MpCnsKCWNvbnN0IHU4ICprOwoJdTggKmIwLCAqYjE7Cgl1MzIgbiwgdzsKCXU4IGJpdHMwWzU2XSwgYml0czFbNTZdOwoKCW4gID0gcGFyaXR5W2tleVswXV07IG4gPDw9IDQ7CgluIHw9IHBhcml0eVtrZXlbMV1dOyBuIDw8PSA0OwoJbiB8PSBwYXJpdHlba2V5WzJdXTsgbiA8PD0gNDsKCW4gfD0gcGFyaXR5W2tleVszXV07IG4gPDw9IDQ7CgluIHw9IHBhcml0eVtrZXlbNF1dOyBuIDw8PSA0OwoJbiB8PSBwYXJpdHlba2V5WzVdXTsgbiA8PD0gNDsKCW4gfD0gcGFyaXR5W2tleVs2XV07IG4gPDw9IDQ7CgluIHw9IHBhcml0eVtrZXlbN11dOwoJdyA9IDB4ODg4ODg4ODhMOwoJCglpZiAoKCpmbGFncyAmIENSWVBUT19URk1fUkVRX1dFQUtfS0VZKQoJICAgICYmICEoKG4gLSAodyA+PiAzKSkgJiB3KSkgeyAgLyogMSBpbiAxMF4xMCBrZXlzIHBhc3NlcyB0aGlzIHRlc3QgKi8KCQlpZiAobiA8IDB4NDE0MTUxNTEpIHsKCQkJaWYgKG4gPCAweDMxMzEyMTIxKSB7CgkJCQlpZiAobiA8IDB4MTQxNDE1MTUpIHsKCQkJCQkvKiAwMSAwMSAwMSAwMSAwMSAwMSAwMSAwMSAqLwoJCQkJCWlmIChuID09IDB4MTExMTExMTEpIGdvdG8gd2VhazsKCQkJCQkvKiAwMSAxRiAwMSAxRiAwMSAwRSAwMSAwRSAqLwoJCQkJCWlmIChuID09IDB4MTMxMzEyMTIpIGdvdG8gd2VhazsKCQkJCX0gZWxzZSB7CgkJCQkJLyogMDEgRTAgMDEgRTAgMDEgRjEgMDEgRjEgKi8KCQkJCQlpZiAobiA9PSAweDE0MTQxNTE1KSBnb3RvIHdlYWs7CgkJCQkJLyogMDEgRkUgMDEgRkUgMDEgRkUgMDEgRkUgKi8KCQkJCQlpZiAobiA9PSAweDE2MTYxNjE2KSBnb3RvIHdlYWs7CgkJCQl9CgkJCX0gZWxzZSB7CgkJCQlpZiAobiA8IDB4MzQzNDI1MjUpIHsKCQkJCQkvKiAxRiAwMSAxRiAwMSAwRSAwMSAwRSAwMSAqLwoJCQkJCWlmIChuID09IDB4MzEzMTIxMjEpIGdvdG8gd2VhazsKCQkJCQkvKiAxRiAxRiAxRiAxRiAwRSAwRSAwRSAwRSAoPykgKi8KCQkJCQlpZiAobiA9PSAweDMzMzMyMjIyKSBnb3RvIHdlYWs7CgkJCQl9IGVsc2UgewoJCQkJCS8qIDFGIEUwIDFGIEUwIDBFIEYxIDBFIEYxICovCgkJCQkJaWYgKG4gPT0gMHgzNDM0MjUyNSkgZ290byB3ZWFrOwoJCQkJCS8qIDFGIEZFIDFGIEZFIDBFIEZFIDBFIEZFICovCgkJCQkJaWYgKG4gPT0gMHgzNjM2MjYyNikgZ290byB3ZWFrOwoJCQkJfQoJCQl9CgkJfSBlbHNlIHsKCQkJaWYgKG4gPCAweDYxNjE2MTYxKSB7CgkJCQlpZiAobiA8IDB4NDQ0NDU1NTUpIHsKCQkJCQkvKiBFMCAwMSBFMCAwMSBGMSAwMSBGMSAwMSAqLwoJCQkJCWlmIChuID09IDB4NDE0MTUxNTEpIGdvdG8gd2VhazsKCQkJCQkvKiBFMCAxRiBFMCAxRiBGMSAwRSBGMSAwRSAqLwoJCQkJCWlmIChuID09IDB4NDM0MzUyNTIpIGdvdG8gd2VhazsKCQkJCX0gZWxzZSB7CgkJCQkJLyogRTAgRTAgRTAgRTAgRjEgRjEgRjEgRjEgKD8pICovCgkJCQkJaWYgKG4gPT0gMHg0NDQ0NTU1NSkgZ290byB3ZWFrOwoJCQkJCS8qIEUwIEZFIEUwIEZFIEYxIEZFIEYxIEZFICovCgkJCQkJaWYgKG4gPT0gMHg0NjQ2NTY1NikgZ290byB3ZWFrOwoJCQkJfQoJCQl9IGVsc2UgewoJCQkJaWYgKG4gPCAweDY0NjQ2NTY1KSB7CgkJCQkJLyogRkUgMDEgRkUgMDEgRkUgMDEgRkUgMDEgKi8KCQkJCQlpZiAobiA9PSAweDYxNjE2MTYxKSBnb3RvIHdlYWs7CgkJCQkJLyogRkUgMUYgRkUgMUYgRkUgMEUgRkUgMEUgKi8KCQkJCQlpZiAobiA9PSAweDYzNjM2MjYyKSBnb3RvIHdlYWs7CgkJCQl9IGVsc2UgewoJCQkJCS8qIEZFIEUwIEZFIEUwIEZFIEYxIEZFIEYxICovCgkJCQkJaWYgKG4gPT0gMHg2NDY0NjU2NSkgZ290byB3ZWFrOwoJCQkJCS8qIEZFIEZFIEZFIEZFIEZFIEZFIEZFIEZFICovCgkJCQkJaWYgKG4gPT0gMHg2NjY2NjY2NikgZ290byB3ZWFrOwoJCQkJfQoJCQl9CgkJfQoJCgkJZ290byBub3Rfd2VhazsKd2VhazoKCQkqZmxhZ3MgfD0gQ1JZUFRPX1RGTV9SRVNfV0VBS19LRVk7CgkJcmV0dXJuIC1FSU5WQUw7Cgl9Cgpub3Rfd2VhazoKCgkvKiBleHBsb2RlIHRoZSBiaXRzICovCgluID0gNTY7CgliMCA9IGJpdHMwOwoJYjEgPSBiaXRzMTsKCQoJZG8gewoJCXcgPSAoMjU2IHwgKmtleSsrKSA8PCAyOwoJCWRvIHsKCQkJLS1uOwoJCQliMVtuXSA9IDggJiB3OwoJCQl3ID4+PSAxOwoJCQliMFtuXSA9IDQgJiB3OwoJCX0gd2hpbGUgKCB3ID49IDE2ICk7Cgl9IHdoaWxlICggbiApOwoJCgkvKiBwdXQgdGhlIGJpdHMgaW4gdGhlIGNvcnJlY3QgcGxhY2VzICovCgluID0gMTY7CglrID0gcm90b3JzOwoJCglkbyB7CgkJdyAgID0gKGIxW2tbIDAgICBdXSB8IGIwW2tbIDEgICBdXSkgPDwgNDsKCQl3ICB8PSAoYjFba1sgMiAgIF1dIHwgYjBba1sgMyAgIF1dKSA8PCAyOwoJCXcgIHw9ICBiMVtrWyA0ICAgXV0gfCBiMFtrWyA1ICAgXV07CgkJdyA8PD0gODsKCQl3ICB8PSAoYjFba1sgNiAgIF1dIHwgYjBba1sgNyAgIF1dKSA8PCA0OwoJCXcgIHw9IChiMVtrWyA4ICAgXV0gfCBiMFtrWyA5ICAgXV0pIDw8IDI7CgkJdyAgfD0gIGIxW2tbMTAgICBdXSB8IGIwW2tbMTEgICBdXTsKCQl3IDw8PSA4OwoJCXcgIHw9IChiMVtrWzEyICAgXV0gfCBiMFtrWzEzICAgXV0pIDw8IDQ7CgkJdyAgfD0gKGIxW2tbMTQgICBdXSB8IGIwW2tbMTUgICBdXSkgPDwgMjsKCQl3ICB8PSAgYjFba1sxNiAgIF1dIHwgYjBba1sxNyAgIF1dOwoJCXcgPDw9IDg7CgkJdyAgfD0gKGIxW2tbMTggICBdXSB8IGIwW2tbMTkgICBdXSkgPDwgNDsKCQl3ICB8PSAoYjFba1syMCAgIF1dIHwgYjBba1syMSAgIF1dKSA8PCAyOwoJCXcgIHw9ICBiMVtrWzIyICAgXV0gfCBiMFtrWzIzICAgXV07CgkJZXhwa2V5WzBdID0gdzsKCQkKCQl3ICAgPSAoYjFba1sgMCsyNF1dIHwgYjBba1sgMSsyNF1dKSA8PCA0OwoJCXcgIHw9IChiMVtrWyAyKzI0XV0gfCBiMFtrWyAzKzI0XV0pIDw8IDI7CgkJdyAgfD0gIGIxW2tbIDQrMjRdXSB8IGIwW2tbIDUrMjRdXTsKCQl3IDw8PSA4OwoJCXcgIHw9IChiMVtrWyA2KzI0XV0gfCBiMFtrWyA3KzI0XV0pIDw8IDQ7CgkJdyAgfD0gKGIxW2tbIDgrMjRdXSB8IGIwW2tbIDkrMjRdXSkgPDwgMjsKCQl3ICB8PSAgYjFba1sxMCsyNF1dIHwgYjBba1sxMSsyNF1dOwoJCXcgPDw9IDg7CgkJdyAgfD0gKGIxW2tbMTIrMjRdXSB8IGIwW2tbMTMrMjRdXSkgPDwgNDsKCQl3ICB8PSAoYjFba1sxNCsyNF1dIHwgYjBba1sxNSsyNF1dKSA8PCAyOwoJCXcgIHw9ICBiMVtrWzE2KzI0XV0gfCBiMFtrWzE3KzI0XV07CgkJdyA8PD0gODsKCQl3ICB8PSAoYjFba1sxOCsyNF1dIHwgYjBba1sxOSsyNF1dKSA8PCA0OwoJCXcgIHw9IChiMVtrWzIwKzI0XV0gfCBiMFtrWzIxKzI0XV0pIDw8IDI7CgkJdyAgfD0gIGIxW2tbMjIrMjRdXSB8IGIwW2tbMjMrMjRdXTsKCQkKCQlST1IodywgNCwgMjgpOyAgICAgIC8qIGNvdWxkIGJlIGVsaW1pbmF0ZWQgKi8KCQlleHBrZXlbMV0gPSB3OwoKCQlrICs9IDQ4OwoJCWV4cGtleSArPSAyOwoJfSB3aGlsZSAoLS1uKTsKCglyZXR1cm4gMDsKfQoKc3RhdGljIGludCBkZXNfc2V0a2V5KHZvaWQgKmN0eCwgY29uc3QgdTggKmtleSwgdW5zaWduZWQgaW50IGtleWxlbiwgdTMyICpmbGFncykKewoJcmV0dXJuIHNldGtleSgoKHN0cnVjdCBkZXNfY3R4ICopY3R4KS0+ZXhwa2V5LCBrZXksIGtleWxlbiwgZmxhZ3MpOwp9CgpzdGF0aWMgdm9pZCBkZXNfZW5jcnlwdCh2b2lkICpjdHgsIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMpCnsKCWRlc19zbWFsbF9maXBzX2VuY3J5cHQoKChzdHJ1Y3QgZGVzX2N0eCAqKWN0eCktPmV4cGtleSwgZHN0LCBzcmMpOwp9CgpzdGF0aWMgdm9pZCBkZXNfZGVjcnlwdCh2b2lkICpjdHgsIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMpCnsKCWRlc19zbWFsbF9maXBzX2RlY3J5cHQoKChzdHJ1Y3QgZGVzX2N0eCAqKWN0eCktPmV4cGtleSwgZHN0LCBzcmMpOwp9CgovKiAKICogUkZDMjQ1MToKICoKICogICBGb3IgREVTLUVERTMsIHRoZXJlIGlzIG5vIGtub3duIG5lZWQgdG8gcmVqZWN0IHdlYWsgb3IKICogICBjb21wbGVtZW50YXRpb24ga2V5cy4gIEFueSB3ZWFrbmVzcyBpcyBvYnZpYXRlZCBieSB0aGUgdXNlIG9mCiAqICAgbXVsdGlwbGUga2V5cy4KICoKICogICBIb3dldmVyLCBpZiB0aGUgZmlyc3QgdHdvIG9yIGxhc3QgdHdvIGluZGVwZW5kZW50IDY0LWJpdCBrZXlzIGFyZQogKiAgIGVxdWFsIChrMSA9PSBrMiBvciBrMiA9PSBrMyksIHRoZW4gdGhlIERFUzMgb3BlcmF0aW9uIGlzIHNpbXBseSB0aGUKICogICBzYW1lIGFzIERFUy4gIEltcGxlbWVudGVycyBNVVNUIHJlamVjdCBrZXlzIHRoYXQgZXhoaWJpdCB0aGlzCiAqICAgcHJvcGVydHkuCiAqCiAqLwpzdGF0aWMgaW50IGRlczNfZWRlX3NldGtleSh2b2lkICpjdHgsIGNvbnN0IHU4ICprZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBrZXlsZW4sIHUzMiAqZmxhZ3MpCnsKCXVuc2lnbmVkIGludCBpLCBvZmY7CglzdHJ1Y3QgZGVzM19lZGVfY3R4ICpkY3R4ID0gY3R4OwoKCWlmICghKG1lbWNtcChrZXksICZrZXlbREVTX0tFWV9TSVpFXSwgREVTX0tFWV9TSVpFKSAmJiAKCSAgICBtZW1jbXAoJmtleVtERVNfS0VZX1NJWkVdLCAma2V5W0RFU19LRVlfU0laRSAqIDJdLAoJICAgIAkJCQkJREVTX0tFWV9TSVpFKSkpIHsKCgkJKmZsYWdzIHw9IENSWVBUT19URk1fUkVTX0JBRF9LRVlfU0NIRUQ7CgkJcmV0dXJuIC1FSU5WQUw7Cgl9CgkKCWZvciAoaSA9IDAsIG9mZiA9IDA7IGkgPCAzOyBpKyssIG9mZiArPSBERVNfRVhQS0VZX1dPUkRTLAoJCQkJCQkJa2V5ICs9IERFU19LRVlfU0laRSkgewoJCWludCByZXQgPSBzZXRrZXkoJmRjdHgtPmV4cGtleVtvZmZdLCBrZXksIERFU19LRVlfU0laRSwgZmxhZ3MpOwoJCWlmIChyZXQgPCAwKQoJCQlyZXR1cm4gcmV0OwoJfQkKCXJldHVybiAwOwp9CgpzdGF0aWMgdm9pZCBkZXMzX2VkZV9lbmNyeXB0KHZvaWQgKmN0eCwgdTggKmRzdCwgY29uc3QgdTggKnNyYykKewoJc3RydWN0IGRlczNfZWRlX2N0eCAqZGN0eCA9IGN0eDsKCQoJZGVzX3NtYWxsX2ZpcHNfZW5jcnlwdChkY3R4LT5leHBrZXksIGRzdCwgc3JjKTsKCWRlc19zbWFsbF9maXBzX2RlY3J5cHQoJmRjdHgtPmV4cGtleVtERVNfRVhQS0VZX1dPUkRTXSwgZHN0LCBkc3QpOwoJZGVzX3NtYWxsX2ZpcHNfZW5jcnlwdCgmZGN0eC0+ZXhwa2V5W0RFU19FWFBLRVlfV09SRFMgKiAyXSwgZHN0LCBkc3QpOwp9CgpzdGF0aWMgdm9pZCBkZXMzX2VkZV9kZWNyeXB0KHZvaWQgKmN0eCwgdTggKmRzdCwgY29uc3QgdTggKnNyYykKewoJc3RydWN0IGRlczNfZWRlX2N0eCAqZGN0eCA9IGN0eDsKCglkZXNfc21hbGxfZmlwc19kZWNyeXB0KCZkY3R4LT5leHBrZXlbREVTX0VYUEtFWV9XT1JEUyAqIDJdLCBkc3QsIHNyYyk7CglkZXNfc21hbGxfZmlwc19lbmNyeXB0KCZkY3R4LT5leHBrZXlbREVTX0VYUEtFWV9XT1JEU10sIGRzdCwgZHN0KTsKCWRlc19zbWFsbF9maXBzX2RlY3J5cHQoZGN0eC0+ZXhwa2V5LCBkc3QsIGRzdCk7Cn0KCnN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBkZXNfYWxnID0gewoJLmNyYV9uYW1lCQk9CSJkZXMiLAoJLmNyYV9mbGFncwkJPQlDUllQVE9fQUxHX1RZUEVfQ0lQSEVSLAoJLmNyYV9ibG9ja3NpemUJCT0JREVTX0JMT0NLX1NJWkUsCgkuY3JhX2N0eHNpemUJCT0Jc2l6ZW9mKHN0cnVjdCBkZXNfY3R4KSwKCS5jcmFfbW9kdWxlCQk9CVRISVNfTU9EVUxFLAoJLmNyYV9saXN0CQk9CUxJU1RfSEVBRF9JTklUKGRlc19hbGcuY3JhX2xpc3QpLAoJLmNyYV91CQkJPQl7IC5jaXBoZXIgPSB7CgkuY2lhX21pbl9rZXlzaXplCT0JREVTX0tFWV9TSVpFLAoJLmNpYV9tYXhfa2V5c2l6ZQk9CURFU19LRVlfU0laRSwKCS5jaWFfc2V0a2V5CQk9IAlkZXNfc2V0a2V5LAoJLmNpYV9lbmNyeXB0CQk9CWRlc19lbmNyeXB0LAoJLmNpYV9kZWNyeXB0CQk9CWRlc19kZWNyeXB0IH0gfQp9OwoKc3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnIGRlczNfZWRlX2FsZyA9IHsKCS5jcmFfbmFtZQkJPQkiZGVzM19lZGUiLAoJLmNyYV9mbGFncwkJPQlDUllQVE9fQUxHX1RZUEVfQ0lQSEVSLAoJLmNyYV9ibG9ja3NpemUJCT0JREVTM19FREVfQkxPQ0tfU0laRSwKCS5jcmFfY3R4c2l6ZQkJPQlzaXplb2Yoc3RydWN0IGRlczNfZWRlX2N0eCksCgkuY3JhX21vZHVsZQkJPQlUSElTX01PRFVMRSwKCS5jcmFfbGlzdAkJPQlMSVNUX0hFQURfSU5JVChkZXMzX2VkZV9hbGcuY3JhX2xpc3QpLAoJLmNyYV91CQkJPQl7IC5jaXBoZXIgPSB7CgkuY2lhX21pbl9rZXlzaXplCT0JREVTM19FREVfS0VZX1NJWkUsCgkuY2lhX21heF9rZXlzaXplCT0JREVTM19FREVfS0VZX1NJWkUsCgkuY2lhX3NldGtleQkgICAJPSAJZGVzM19lZGVfc2V0a2V5LAoJLmNpYV9lbmNyeXB0CSAJPQlkZXMzX2VkZV9lbmNyeXB0LAoJLmNpYV9kZWNyeXB0CSAgCT0JZGVzM19lZGVfZGVjcnlwdCB9IH0KfTsKCk1PRFVMRV9BTElBUygiZGVzM19lZGUiKTsKCnN0YXRpYyBpbnQgX19pbml0IGluaXQodm9pZCkKewoJaW50IHJldCA9IDA7CgkKCXJldCA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJmRlc19hbGcpOwoJaWYgKHJldCA8IDApCgkJZ290byBvdXQ7CgoJcmV0ID0gY3J5cHRvX3JlZ2lzdGVyX2FsZygmZGVzM19lZGVfYWxnKTsKCWlmIChyZXQgPCAwKQoJCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmZGVzX2FsZyk7Cm91dDoJCglyZXR1cm4gcmV0Owp9CgpzdGF0aWMgdm9pZCBfX2V4aXQgZmluaSh2b2lkKQp7CgljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmRlczNfZWRlX2FsZyk7CgljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmRlc19hbGcpOwp9Cgptb2R1bGVfaW5pdChpbml0KTsKbW9kdWxlX2V4aXQoZmluaSk7CgpNT0RVTEVfTElDRU5TRSgiR1BMIik7Ck1PRFVMRV9ERVNDUklQVElPTigiREVTICYgVHJpcGxlIERFUyBFREUgQ2lwaGVyIEFsZ29yaXRobXMiKTsK