IyEvdXNyL2Jpbi9lbnYgcGVybAojCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBXcml0dGVuIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPiBmb3IgdGhlIE9wZW5TU0wKIyBwcm9qZWN0LiBUaGUgbW9kdWxlIGlzLCBob3dldmVyLCBkdWFsIGxpY2Vuc2VkIHVuZGVyIE9wZW5TU0wgYW5kCiMgQ1JZUFRPR0FNUyBsaWNlbnNlcyBkZXBlbmRpbmcgb24gd2hlcmUgeW91IG9idGFpbiBpdC4gRm9yIGZ1cnRoZXIKIyBkZXRhaWxzIHNlZSBodHRwOi8vd3d3Lm9wZW5zc2wub3JnL35hcHByby9jcnlwdG9nYW1zLy4KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojCiMgVmVyc2lvbiA0LjMuCiMKIyBZb3UgbWlnaHQgZmFpbCB0byBhcHByZWNpYXRlIHRoaXMgbW9kdWxlIHBlcmZvcm1hbmNlIGZyb20gdGhlIGZpcnN0CiMgdHJ5LiBJZiBjb21wYXJlZCB0byAidmFuaWxsYSIgbGludXgtaWEzMi1pY2MgdGFyZ2V0LCBpLmUuIGNvbnNpZGVyZWQKIyB0byBiZSAqdGhlKiBiZXN0IEludGVsIEMgY29tcGlsZXIgd2l0aG91dCAtS1BJQywgcGVyZm9ybWFuY2UgYXBwZWFycwojIHRvIGJlIHZpcnR1YWxseSBpZGVudGljYWwuLi4gQnV0IHRyeSB0byByZS1jb25maWd1cmUgd2l0aCBzaGFyZWQKIyBsaWJyYXJ5IHN1cHBvcnQuLi4gQWhhISBJbnRlbCBjb21waWxlciAic3VkZGVubHkiIGxhZ3MgYmVoaW5kIGJ5IDMwJQojIFtvbiBQNCwgbW9yZSBvbiBvdGhlcnNdOi0pIEFuZCBpZiBjb21wYXJlZCB0byBwb3NpdGlvbi1pbmRlcGVuZGVudAojIGNvZGUgZ2VuZXJhdGVkIGJ5IEdOVSBDLCB0aGlzIGNvZGUgcGVyZm9ybXMgKm1vcmUqIHRoYW4gKnR3aWNlKiBhcwojIGZhc3QhIFllcywgYWxsIHRoaXMgYnV6eiBhYm91dCBQSUMgbWVhbnMgdGhhdCB1bmxpa2Ugb3RoZXIgaGFuZC0KIyBjb2RlZCBpbXBsZW1lbnRhdGlvbnMsIHRoaXMgb25lIHdhcyBleHBsaWNpdGx5IGRlc2lnbmVkIHRvIGJlIHNhZmUKIyB0byB1c2UgZXZlbiBpbiBzaGFyZWQgbGlicmFyeSBjb250ZXh0Li4uIFRoaXMgYWxzbyBtZWFucyB0aGF0IHRoaXMKIyBjb2RlIGlzbid0IG5lY2Vzc2FyaWx5IGFic29sdXRlbHkgZmFzdGVzdCAiZXZlciwiIGJlY2F1c2UgaW4gb3JkZXIKIyB0byBhY2hpZXZlIHBvc2l0aW9uIGluZGVwZW5kZW5jZSBhbiBleHRyYSByZWdpc3RlciBoYXMgdG8gYmUKIyBvZmYtbG9hZGVkIHRvIHN0YWNrLCB3aGljaCBhZmZlY3RzIHRoZSBiZW5jaG1hcmsgcmVzdWx0LgojCiMgU3BlY2lhbCBub3RlIGFib3V0IGluc3RydWN0aW9uIGNob2ljZS4gRG8geW91IHJlY2FsbCBSQzRfSU5UIGNvZGUKIyBwZXJmb3JtaW5nIHBvb3JseSBvbiBQND8gSXQgbWlnaHQgYmUgdGhlIHRpbWUgdG8gZmlndXJlIG91dCB3aHkuCiMgUkM0X0lOVCBjb2RlIGltcGxpZXMgZWZmZWN0aXZlIGFkZHJlc3MgY2FsY3VsYXRpb25zIGluIGJhc2Urb2Zmc2V0KjQKIyBmb3JtLiBUcm91YmxlIGlzIHRoYXQgaXQgc2VlbXMgdGhhdCBvZmZzZXQgc2NhbGluZyB0dXJuZWQgdG8gYmUKIyBjcml0aWNhbCBwYXRoLi4uIEF0IGxlYXN0IGVsaW1pbmF0aW5nIHNjYWxpbmcgcmVzdWx0ZWQgaW4gMi44eCBSQzQKIyBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBbYXMgeW91IG1pZ2h0IHJlY2FsbF0uIEFzIEFFUyBjb2RlIGlzIGh1bmdyeQojIGZvciBzY2FsaW5nIHRvbywgSSBbdHJ5IHRvXSBhdm9pZCB0aGUgbGF0dGVyIGJ5IGZhdm9yaW5nIG9mZi1ieS0yCiMgc2hpZnRzIGFuZCBtYXNraW5nIHRoZSByZXN1bHQgd2l0aCAweEZGPDwyIGluc3RlYWQgb2YgImJvcmluZyIgMHhGRi4KIwojIEFzIHdhcyBzaG93biBieSBEZWFuIEdhdWRldCA8ZGVhbkBhcmN0aWMub3JnPiwgdGhlIGFib3ZlIG5vdGUgdHVybmVkCiMgdm9pZC4gUGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgd2l0aCBvZmYtYnktMiBzaGlmdHMgd2FzIG9ic2VydmVkIG9uCiMgaW50ZXJtZWRpYXRlIGltcGxlbWVudGF0aW9uLCB3aGljaCB3YXMgc3BpbGxpbmcgeWV0IGFub3RoZXIgcmVnaXN0ZXIKIyB0byBzdGFjay4uLiBGaW5hbCBvZmZzZXQqNCBjb2RlIGJlbG93IHJ1bnMganVzdCBhIHRhZCBmYXN0ZXIgb24gUDQsCiMgYnV0IGV4aGliaXRzIHVwIHRvIDEwJSBpbXByb3ZlbWVudCBvbiBvdGhlciBjb3Jlcy4KIwojIFNlY29uZCB2ZXJzaW9uIGlzICJtb25vbGl0aGljIiByZXBsYWNlbWVudCBmb3IgYWVzX2NvcmUuYywgd2hpY2ggaW4KIyBhZGRpdGlvbiB0byBBRVNfW2RlfGVuXWNyeXB0IGltcGxlbWVudHMgQUVTX3NldF9bZGV8ZW5dY3J5cHRpb25fa2V5LgojIFRoaXMgbWFkZSBpdCBwb3NzaWJsZSB0byBpbXBsZW1lbnQgbGl0dGxlLWVuZGlhbiB2YXJpYW50IG9mIHRoZQojIGFsZ29yaXRobSB3aXRob3V0IG1vZGlmeWluZyB0aGUgYmFzZSBDIGNvZGUuIE1vdGl2YXRpbmcgZmFjdG9yIGZvcgojIHRoZSB1bmRlcnRha2VuIGVmZm9ydCB3YXMgdGhhdCBpdCBhcHBlYXJlZCB0aGF0IGluIHRpZ2h0IElBLTMyCiMgcmVnaXN0ZXIgd2luZG93IGxpdHRsZS1lbmRpYW4gZmxhdm9yIGNvdWxkIGFjaGlldmUgc2xpZ2h0bHkgaGlnaGVyCiMgSW5zdHJ1Y3Rpb24gTGV2ZWwgUGFyYWxsZWxpc20sIGFuZCBpdCBpbmRlZWQgcmVzdWx0ZWQgaW4gdXAgdG8gMTUlCiMgYmV0dGVyIHBlcmZvcm1hbmNlIG9uIG1vc3QgcmVjZW50ILUtYXJjaHMuLi4KIwojIFRoaXJkIHZlcnNpb24gYWRkcyBBRVNfY2JjX2VuY3J5cHQgaW1wbGVtZW50YXRpb24sIHdoaWNoIHJlc3VsdGVkIGluCiMgdXAgdG8gNDAlIHBlcmZvcm1hbmNlIGltcm92ZW1lbnQgb2YgQ0JDIGJlbmNobWFyayByZXN1bHRzLiA0MCUgd2FzCiMgb2JzZXJ2ZWQgb24gUDQgY29yZSwgd2hlcmUgIm92ZXJhbGwiIGltcm92ZW1lbnQgY29lZmZpY2llbnQsIGkuZS4gaWYKIyBjb21wYXJlZCB0byBQSUMgZ2VuZXJhdGVkIGJ5IEdDQyBhbmQgaW4gQ0JDIG1vZGUsIHdhcyBvYnNlcnZlZCB0byBiZQojIGFzIGxhcmdlIGFzIDR4Oi0pIENCQyBwZXJmb3JtYW5jZSBpcyB2aXJ0dWFsbHkgaWRlbnRpY2FsIHRvIEVDQiBub3cKIyBhbmQgb24gc29tZSBwbGF0Zm9ybXMgZXZlbiBiZXR0ZXIsIGUuZy4gMTcuNiAic21hbGwiIGN5Y2xlcy9ieXRlIG9uCiMgT3B0ZXJvbiwgYmVjYXVzZSBjZXJ0YWluIGZ1bmN0aW9uIHByb2xvZ3VlcyBhbmQgZXBpbG9ndWVzIGFyZQojIGVmZmVjdGl2ZWx5IHRha2VuIG91dCBvZiB0aGUgbG9vcC4uLgojCiMgVmVyc2lvbiAzLjIgaW1wbGVtZW50cyBjb21wcmVzc2VkIHRhYmxlcyBhbmQgcHJlZmV0Y2ggb2YgdGhlc2UgdGFibGVzCiMgaW4gQ0JDWyFdIG1vZGUuIEZvcm1lciBtZWFucyB0aGF0IDMvNCBvZiB0YWJsZSByZWZlcmVuY2VzIGFyZSBub3cKIyBtaXNhbGlnbmVkLCB3aGljaCB1bmZvcnR1bmF0ZWx5IGhhcyBuZWdhdGl2ZSBpbXBhY3Qgb24gZWxkZXIgSUEtMzIKIyBpbXBsZW1lbnRhdGlvbnMsIFBlbnRpdW0gc3VmZmVyZWQgMzAlIHBlbmFsdHksIFBJSUkgLSAxMCUuCiMKIyBWZXJzaW9uIDMuMyBhdm9pZHMgTDEgY2FjaGUgYWxpYXNpbmcgYmV0d2VlbiBzdGFjayBmcmFtZSBhbmQKIyBTLWJveGVzLCBhbmQgMy40IC0gTDEgY2FjaGUgYWxpYXNpbmcgZXZlbiBiZXR3ZWVuIGtleSBzY2hlZHVsZS4gVGhlCiMgbGF0dGVyIGlzIGFjaGlldmVkIGJ5IGNvcHlpbmcgdGhlIGtleSBzY2hlZHVsZSB0byBjb250cm9sbGVkIHBsYWNlIGluCiMgc3RhY2suIFRoaXMgdW5mb3J0dW5hdGVseSBoYXMgcmF0aGVyIHN0cm9uZyBpbXBhY3Qgb24gc21hbGwgYmxvY2sgQ0JDCiMgcGVyZm9ybWFuY2UsIH4yeCBkZXRlcmlvcmF0aW9uIG9uIDE2LWJ5dGUgYmxvY2sgaWYgY29tcGFyZWQgdG8gMy4zLgojCiMgVmVyc2lvbiAzLjUgY2hlY2tzIGlmIHRoZXJlIGlzIEwxIGNhY2hlIGFsaWFzaW5nIGJldHdlZW4gdXNlci1zdXBwbGllZAojIGtleSBzY2hlZHVsZSBhbmQgUy1ib3hlcyBhbmQgYWJzdGFpbnMgZnJvbSBjb3B5aW5nIHRoZSBmb3JtZXIgaWYKIyB0aGVyZSBpcyBuby4gVGhpcyBhbGxvd3MgZW5kLXVzZXIgdG8gY29uc2Npb3VzbHkgcmV0YWluIHNtYWxsIGJsb2NrCiMgcGVyZm9ybWFuY2UgYnkgYWxpZ25pbmcga2V5IHNjaGVkdWxlIGluIHNwZWNpZmljIG1hbm5lci4KIwojIFZlcnNpb24gMy42IGNvbXByZXNzZXMgVGQ0IHRvIDI1NiBieXRlcyBhbmQgcHJlZmV0Y2hlcyBpdCBpbiBFQ0IuCiMKIyBDdXJyZW50IEVDQiBwZXJmb3JtYW5jZSBudW1iZXJzIGZvciAxMjgtYml0IGtleSBpbiBDUFUgY3ljbGVzIHBlcgojIHByb2Nlc3NlZCBieXRlIFttZWFzdXJlIGNvbW1vbmx5IHVzZWQgYnkgQUVTIGJlbmNobWFya2Vyc10gYXJlOgojCiMJCXNtYWxsIGZvb3RwcmludAkJZnVsbHkgdW5yb2xsZWQKIyBQNAkJMjQJCQkyMgojIEFNRCBLOAkyMAkJCTE5CiMgUElJSQkJMjUJCQkyMwojIFBlbnRpdW0JODEJCQk3OAojCiMgVmVyc2lvbiAzLjcgcmVpbXBsZW1lbnRzIG91dGVyIHJvdW5kcyBhcyAiY29tcGFjdC4iIE1lYW5pbmcgdGhhdAojIGZpcnN0IGFuZCBsYXN0IHJvdW5kcyByZWZlcmVuY2UgY29tcGFjdCAyNTYgYnl0ZXMgUy1ib3guIFRoaXMgbWVhbnMKIyB0aGF0IGZpcnN0IHJvdW5kIGNvbnN1bWVzIGEgbG90IG1vcmUgQ1BVIGN5Y2xlcyBhbmQgdGhhdCBlbmNyeXB0CiMgYW5kIGRlY3J5cHQgcGVyZm9ybWFuY2UgYmVjb21lcyBhc3ltbWV0cmljLiBFbmNyeXB0IHBlcmZvcm1hbmNlCiMgZHJvcHMgYnkgMTAtMTIlLCB3aGlsZSBkZWNyeXB0IC0gYnkgMjAtMjUlOi0oIDI1NiBieXRlcyBTLWJveCBpcwojIGFnZ3Jlc3NpdmVseSBwcmUtZmV0Y2hlZC4KIwojIFZlcnNpb24gNC4wIGVmZmVjdGl2ZWx5IHJvbGxzIGJhY2sgdG8gMy42IGFuZCBpbnN0ZWFkIGltcGxlbWVudHMKIyBhZGRpdGlvbmFsIHNldCBvZiBmdW5jdGlvbnMsIF9beDg2fHNzZV1fQUVTX1tlbnxkZV1jcnlwdF9jb21wYWN0LAojIHdoaWNoIHVzZSBleGNsdXNpdmVseSAyNTYgYnl0ZSBTLWJveC4gVGhlc2UgZnVuY3Rpb25zIGFyZSB0byBiZQojIGNhbGxlZCBpbiBtb2RlcyBub3QgY29uY2VhbGluZyBwbGFpbiB0ZXh0LCBzdWNoIGFzIEVDQiwgb3Igd2hlbgojIHdlJ3JlIGFza2VkIHRvIHByb2Nlc3Mgc21hbGxlciBhbW91bnQgb2YgZGF0YSBbb3IgdW5jb25kaXRpb25hbGx5CiMgb24gaHlwZXItdGhyZWFkaW5nIENQVV0uIEN1cnJlbnRseSBpdCdzIGNhbGxlZCB1bmNvbmRpdGlvbmFsbHkgZnJvbQojIEFFU19bZW58ZGVdY3J5cHQsIHdoaWNoIGFmZmVjdHMgYWxsIG1vZGVzLCBidXQgQ0JDLiBDQkMgcm91dGluZQojIHN0aWxsIG5lZWRzIHRvIGJlIG1vZGlmaWVkIHRvIHN3aXRjaCBiZXR3ZWVuIHNsb3dlciBhbmQgZmFzdGVyCiMgbW9kZSB3aGVuIGFwcHJvcHJpYXRlLi4uIEJ1dCBpbiBlaXRoZXIgY2FzZSBiZW5jaG1hcmsgbGFuZHNjYXBlCiMgY2hhbmdlcyBkcmFtYXRpY2FsbHkgYW5kIGJlbG93IG51bWJlcnMgYXJlIENQVSBjeWNsZXMgcGVyIHByb2Nlc3NlZAojIGJ5dGUgZm9yIDEyOC1iaXQga2V5LgojCiMJCUVDQiBlbmNyeXB0CUVDQiBkZWNyeXB0CUNCQyBsYXJnZSBjaHVuawojIFA0CQk1Nls2MF0JCTg0WzEwMF0JCTIzCiMgQU1EIEs4CTQ4WzQ0XQkJNzBbNzldCQkxOAojIFBJSUkJCTQxWzUwXQkJNjFbOTFdCQkyNAojIENvcmUgMgkzMlszOF0JCTQ1WzcwXQkJMTguNQojIFBlbnRpdW0JMTIwCQkxNjAJCTc3CiMKIyBWZXJzaW9uIDQuMSBzd2l0Y2hlcyB0byBjb21wYWN0IFMtYm94IGV2ZW4gaW4ga2V5IHNjaGVkdWxlIHNldHVwLgojCiMgVmVyc2lvbiA0LjIgcHJlZmV0Y2hlcyBjb21wYWN0IFMtYm94IGluIGV2ZXJ5IFNTRSByb3VuZCBvciBpbiBvdGhlcgojIHdvcmRzIGV2ZXJ5IGNhY2hlLWxpbmUgaXMgKmd1YXJhbnRlZWQqIHRvIGJlIGFjY2Vzc2VkIHdpdGhpbiB+NTAKIyBjeWNsZXMgd2luZG93LiBXaHkganVzdCBTU0U/IEJlY2F1c2UgaXQncyBuZWVkZWQgb24gaHlwZXItdGhyZWFkaW5nCiMgQ1BVISBXaGljaCBpcyBhbHNvIHdoeSBpdCdzIHByZWZldGNoZWQgd2l0aCA2NCBieXRlIHN0cmlkZS4gQmVzdAojIHBhcnQgaXMgdGhhdCBpdCBoYXMgbm8gbmVnYXRpdmUgZWZmZWN0IG9uIHBlcmZvcm1hbmNlOi0pICAKIwojIFZlcnNpb24gNC4zIGltcGxlbWVudHMgc3dpdGNoIGJldHdlZW4gY29tcGFjdCBhbmQgbm9uLWNvbXBhY3QgYmxvY2sKIyBmdW5jdGlvbnMgaW4gQUVTX2NiY19lbmNyeXB0IGRlcGVuZGluZyBvbiBob3cgbXVjaCBkYXRhIHdhcyBhc2tlZAojIHRvIGJlIHByb2Nlc3NlZCBpbiBvbmUgc3Ryb2tlLgojCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBUaW1pbmcgYXR0YWNrcyBhcmUgY2xhc3NpZmllZCBpbiB0d28gY2xhc3Nlczogc3luY2hyb25vdXMgd2hlbgojIGF0dGFja2VyIGNvbnNjaW91c2x5IGluaXRpYXRlcyBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbiBhbmQgY29sbGVjdHMKIyB0aW1pbmcgZGF0YSBvZiB2YXJpb3VzIGNoYXJhY3RlciBhZnRlcndhcmRzLCBhbmQgYXN5bmNocm9ub3VzIHdoZW4KIyBtYWxpY2lvdXMgY29kZSBpcyBleGVjdXRlZCBvbiBzYW1lIENQVSBzaW11bHRhbmVvdXNseSB3aXRoIEFFUywKIyBpbnN0cnVtZW50cyBpdHNlbGYgYW5kIHBlcmZvcm1zIHN0YXRpc3RpY2FsIGFuYWx5c2lzIG9mIHRoaXMgZGF0YS4KIwojIEFzIGZhciBhcyBzeW5jaHJvbm91cyBhdHRhY2tzIGdvIHRoZSByb290IHRvIHRoZSBBRVMgdGltaW5nCiMgdnVsbmVyYWJpbGl0eSBpcyB0d29mb2xkLiBGaXJzdGx5LCBvZiAyNTYgUy1ib3ggZWxlbWVudHMgYXQgbW9zdCAxNjAKIyBhcmUgcmVmZXJyZWQgdG8gaW4gc2luZ2xlIDEyOC1iaXQgYmxvY2sgb3BlcmF0aW9uLiBXZWxsLCBpbiBDCiMgaW1wbGVtZW50YXRpb24gd2l0aCA0IGRpc3RpbmN0IHRhYmxlcyBpdCdzIGFjdHVhbGx5IGFzIGxpdHRsZSBhcyA0MAojIHJlZmVyZW5jZXMgcGVyIDI1NiBlbGVtZW50cyB0YWJsZSwgYnV0IGFueXdheS4uLiBTZWNvbmRseSwgZXZlbgojIHRob3VnaCBTLWJveCBlbGVtZW50cyBhcmUgY2x1c3RlcmVkIGludG8gc21hbGxlciBhbW91bnQgb2YgY2FjaGUtCiMgbGluZXMsIHNtYWxsZXIgdGhhbiAxNjAgYW5kIGV2ZW4gNDAsIGl0IHR1cm5lZCBvdXQgdGhhdCBmb3IgY2VydGFpbgojIHBsYWluLXRleHQgcGF0dGVybltzXSBvciBzaW1wbHkgcHV0IGNob3NlbiBwbGFpbi10ZXh0IGFuZCBnaXZlbiBrZXkKIyBmZXcgY2FjaGUtbGluZXMgcmVtYWluIHVuYWNjZXNzZWQgZHVyaW5nIGJsb2NrIG9wZXJhdGlvbi4gTm93LCBpZgojIGF0dGFja2VyIGNhbiBmaWd1cmUgb3V0IHRoaXMgYWNjZXNzIHBhdHRlcm4sIGhlIGNhbiBkZWR1Y3QgdGhlIGtleQojIFtvciBhdCBsZWFzdCBwYXJ0IG9mIGl0XS4gVGhlIG5hdHVyYWwgd2F5IHRvIG1pdGlnYXRlIHRoaXMga2luZCBvZgojIGF0dGFja3MgaXMgdG8gbWluaW1pemUgdGhlIGFtb3VudCBvZiBjYWNoZS1saW5lcyBpbiBTLWJveCBhbmQvb3IKIyBwcmVmZXRjaCB0aGVtIHRvIGVuc3VyZSB0aGF0IGV2ZXJ5IG9uZSBpcyBhY2Nlc3NlZCBmb3IgbW9yZSB1bmlmb3JtCiMgdGltaW5nLiBCdXQgbm90ZSB0aGF0ICppZiogcGxhaW4tdGV4dCB3YXMgY29uY2VhbGVkIGluIHN1Y2ggd2F5IHRoYXQKIyBpbnB1dCB0byBibG9jayBmdW5jdGlvbiBpcyBkaXN0cmlidXRlZCAqdW5pZm9ybWx5KiwgdGhlbiBhdHRhY2sKIyB3b3VsZG4ndCBhcHBseS4gTm93IG5vdGUgdGhhdCBzb21lIGVuY3J5cHRpb24gbW9kZXMsIG1vc3Qgbm90YWJseQojIENCQywgZG8gbWFzayB0aGUgcGxhaW4tdGV4dCBpbiB0aGlzIGV4YWN0IHdheSBbc2VjdXJlIGNpcGhlciBvdXRwdXQKIyBpcyBkaXN0cmlidXRlZCB1bmlmb3JtbHldLiBZZXMsIG9uZSBzdGlsbCBtaWdodCBmaW5kIGlucHV0IHRoYXQKIyB3b3VsZCByZXZlYWwgdGhlIGluZm9ybWF0aW9uIGFib3V0IGdpdmVuIGtleSwgYnV0IGlmIGFtb3VudCBvZgojIGNhbmRpZGF0ZSBpbnB1dHMgdG8gYmUgdHJpZWQgaXMgbGFyZ2VyIHRoYW4gYW1vdW50IG9mIHBvc3NpYmxlIGtleQojIGNvbWJpbmF0aW9ucyB0aGVuIGF0dGFjayBiZWNvbWVzIGluZmVhc2libGUuIFRoaXMgaXMgd2h5IHJldmlzZWQKIyBBRVNfY2JjX2VuY3J5cHQgImRhcmVzIiB0byBzd2l0Y2ggdG8gbGFyZ2VyIFMtYm94IHdoZW4gbGFyZ2VyIGNodW5rCiMgb2YgZGF0YSBpcyB0byBiZSBwcm9jZXNzZWQgaW4gb25lIHN0cm9rZS4gVGhlIGN1cnJlbnQgc2l6ZSBsaW1pdCBvZgojIDUxMiBieXRlcyBpcyBjaG9zZW4gdG8gcHJvdmlkZSBzYW1lIFtkaW1pbmlzaGlnbHkgbG93XSBwcm9iYWJpbGl0eQojIGZvciBjYWNoZS1saW5lIHRvIHJlbWFpbiB1bnRvdWNoZWQgaW4gbGFyZ2UgY2h1bmsgb3BlcmF0aW9uIHdpdGgKIyBsYXJnZSBTLWJveCBhcyBmb3Igc2luZ2xlIGJsb2NrIG9wZXJhdGlvbiB3aXRoIGNvbXBhY3QgUy1ib3ggYW5kCiMgc3VyZWx5IG5lZWRzIG1vcmUgY2FyZWZ1bCBjb25zaWRlcmF0aW9uLi4uCiMKIyBBcyBmb3IgYXN5bmNocm9ub3VzIGF0dGFja3MuIFRoZXJlIGFyZSB0d28gZmxhdm91cnM6IGF0dGFja2VyIGNvZGUKIyBiZWluZyBpbnRlcmxlYXZlZCB3aXRoIEFFUyBvbiBoeXBlci10aHJlYWRpbmcgQ1BVIGF0ICppbnN0cnVjdGlvbioKIyBsZXZlbCwgYW5kIHR3byBwcm9jZXNzZXMgdGltZSBzaGFyaW5nIHNpbmdsZSBjb3JlLiBBcyBmb3IgbGF0dGVyLgojIFR3byB2ZWN0b3JzLiAxLiBHaXZlbiB0aGF0IGF0dGFja2VyIHByb2Nlc3MgaGFzIGhpZ2hlciBwcmlvcml0eSwKIyB5aWVsZCBleGVjdXRpb24gdG8gcHJvY2VzcyBwZXJmb3JtaW5nIEFFUyBqdXN0IGJlZm9yZSB0aW1lciBmaXJlcwojIG9mZiB0aGUgc2NoZWR1bGVyLCBpbW1lZGlhdGVseSByZWdhaW4gY29udHJvbCBvZiBDUFUgYW5kIGFuYWx5emUgdGhlCiMgY2FjaGUgc3RhdGUuIEZvciB0aGlzIGF0dGFjayB0byBiZSBlZmZpY2llbnQgYXR0YWNrZXIgd291bGQgaGF2ZSB0bwojIGVmZmVjdGl2ZWx5IHNsb3cgZG93biB0aGUgb3BlcmF0aW9uIGJ5IHNldmVyYWwgKm9yZGVycyogb2YgbWFnbml0dXRlLAojIGJ5IHJhdGlvIG9mIHRpbWUgc2xpY2UgdG8gZHVyYXRpb24gb2YgaGFuZGZ1bCBvZiBBRVMgcm91bmRzLCB3aGljaAojIHVubGlrZWx5IHRvIHJlbWFpbiB1bm5vdGljZWQuIE5vdCB0byBtZW50aW9uIHRoYXQgdGhpcyBhbHNvIG1lYW5zCiMgdGhhdCBoZSB3b3VsZCBzcGVuZCBjb3JyZXNwb25kaWdseSBtb3JlIHRpbWUgdG8gY29sbGVjdCBlbm91Z2gKIyBzdGF0aXN0aWNhbCBkYXRhIHRvIG1vdW50IHRoZSBhdHRhY2suIEl0J3MgcHJvYmFibHkgYXBwcm9wcmlhdGUgdG8KIyBzYXkgdGhhdCBpZiBhZGV2ZXJzYXJ5IHJlY2tvbnMgdGhhdCB0aGlzIGF0dGFjayBpcyBiZW5lZmljaWFsIGFuZAojIHJpc2tzIHRvIGJlIG5vdGljZWQsIHlvdSBwcm9iYWJseSBoYXZlIGxhcmdlciBwcm9ibGVtcyBoYXZpbmcgaGltCiMgbWVyZSBvcHBvcnR1bml0eS4gSW4gb3RoZXIgd29yZHMgc3VnZ2VzdGVkIGNvZGUgZGVzaWduIGV4cGVjdHMgeW91CiMgdG8gcHJlY2x1ZGUvbWl0aWdhdGUgdGhpcyBhdHRhY2sgYnkgb3ZlcmFsbCBzeXN0ZW0gc2VjdXJpdHkgZGVzaWduLgojIDIuIEF0dGFja2VyIG1hbmFnZXMgdG8gbWFrZSBoaXMgY29kZSBpbnRlcnJ1cHQgZHJpdmVuLiBJbiBvcmRlciBmb3IKIyB0aGlzIGtpbmQgb2YgYXR0YWNrIHRvIGJlIGZlYXNpYmxlLCBpbnRlcnJ1cHQgcmF0ZSBoYXMgdG8gYmUgaGlnaAojIGVub3VnaCwgYWdhaW4gY29tcGFyYWJsZSB0byBkdXJhdGlvbiBvZiBoYW5kZnVsIG9mIEFFUyByb3VuZHMuIEJ1dAojIGlzIHRoZXJlIGludGVycnVwdCBzb3VyY2Ugb2Ygc3VjaCByYXRlPyBIYXJkbHksIG5vdCBldmVuIDFHYnBzIE5JQwojIGdlbmVyYXRlcyBpbnRlcnJ1cHRzIGF0IHN1Y2ggcmFnaW5nIHJhdGUuLi4KIwojIEFuZCBub3cgYmFjayB0byB0aGUgZm9ybWVyLCBoeXBlci10aHJlYWRpbmcgQ1BVIG9yIG1vcmUgc3BlY2lmaWNhbGx5CiMgSW50ZWwgUDQuIFJlY2FsbCB0aGF0IGFzeW5jaHJvbm91cyBhdHRhY2sgaW1wbGllcyB0aGF0IG1hbGljaW91cwojIGNvZGUgaW5zdHJ1bWVudHMgaXRzZWxmLiBBbmQgbmF0dXJhbGx5IGluc3RydW1lbnRhdGlvbiBncmFudWxhcml0eQojIGhhcyBiZSBub3RpY2VhYmx5IGxvd2VyIHRoYW4gZHVyYXRpb24gb2YgY29kZXBhdGggYWNjZXNzaW5nIFMtYm94LgojIEdpdmVuIHRoYXQgYWxsIGNhY2hlLWxpbmVzIGFyZSBhY2Nlc3NlZCBkdXJpbmcgdGhhdCB0aW1lIHRoYXQgaXMuCiMgQ3VycmVudCBpbXBsZW1lbnRhdGlvbiBhY2Nlc3NlcyAqYWxsKiBjYWNoZS1saW5lcyB3aXRoaW4gfjUwIGN5Y2xlcwojIHdpbmRvdywgd2hpY2ggaXMgYWN0dWFsbHkgKmxlc3MqIHRoYW4gUkRUU0MgbGF0ZW5jeSBvbiBJbnRlbCBQNCEKCiQwID1+IG0vKC4qW1wvXFxdKVteXC9cXF0rJC87ICRkaXI9JDE7CnB1c2goQElOQywiJHtkaXJ9IiwiJHtkaXJ9Li4vLi4vcGVybGFzbSIpOwpyZXF1aXJlICJ4ODZhc20ucGwiOwoKJmFzbV9pbml0KCRBUkdWWzBdLCJhZXMtNTg2LnBsIiwkeDg2b25seSA9ICRBUkdWWyQjQVJHVl0gZXEgIjM4NiIpOwomc3RhdGljX2xhYmVsKCJBRVNfVGUiKTsKJnN0YXRpY19sYWJlbCgiQUVTX1RkIik7CgokczA9ImVheCI7CiRzMT0iZWJ4IjsKJHMyPSJlY3giOwokczM9ImVkeCI7CiRrZXk9ImVkaSI7CiRhY2M9ImVzaSI7CiR0Ymw9ImVicCI7CgojIHN0YWNrIGZyYW1lIGxheW91dCBpbiBfW3g4Nnxzc2VdX0FFU18qIHJvdXRpbmVzLCBmcmFtZSBpcyBhbGxvY2F0ZWQKIyBieSBjYWxsZXIKJF9fcmE9JkRXUCgwLCJlc3AiKTsJIyByZXR1cm4gYWRkcmVzcwokX19zMD0mRFdQKDQsImVzcCIpOwkjIHMwIGJhY2tpbmcgc3RvcmUKJF9fczE9JkRXUCg4LCJlc3AiKTsJIyBzMSBiYWNraW5nIHN0b3JlCiRfX3MyPSZEV1AoMTIsImVzcCIpOwkjIHMyIGJhY2tpbmcgc3RvcmUKJF9fczM9JkRXUCgxNiwiZXNwIik7CSMgczMgYmFja2luZyBzdG9yZQokX19rZXk9JkRXUCgyMCwiZXNwIik7CSMgcG9pbnRlciB0byBrZXkgc2NoZWR1bGUKJF9fZW5kPSZEV1AoMjQsImVzcCIpOwkjIHBvaW50ZXIgdG8gZW5kIG9mIGtleSBzY2hlZHVsZQokX190Ymw9JkRXUCgyOCwiZXNwIik7CSMgJWVicCBiYWNraW5nIHN0b3JlCgojIHN0YWNrIGZyYW1lIGxheW91dCBpbiBBRVNfW2VufGNyeXB0XSByb3V0aW5lcywgd2hpY2ggZGlmZmVycyBmcm9tCiMgYWJvdmUgYnkgNCBhbmQgb3ZlcmxhcHMgYnkgJWVicCBiYWNraW5nIHN0b3JlCiRfdGJsPSZEV1AoMjQsImVzcCIpOwokX2VzcD0mRFdQKDI4LCJlc3AiKTsKCnN1YiBfZGF0YV93b3JkKCkgeyBteSAkaTsgd2hpbGUoZGVmaW5lZCgkaT1zaGlmdCkpIHsgJmRhdGFfd29yZCgkaSwkaSk7IH0gfQoKJHNwZWVkX2xpbWl0PTUxMjsJIyBjaHVua3Mgc21hbGxlciB0aGFuICRzcGVlZF9saW1pdCBhcmUKCQkJIyBwcm9jZXNzZWQgd2l0aCBjb21wYWN0IHJvdXRpbmUgaW4gQ0JDIG1vZGUKJHNtYWxsX2Zvb3RwcmludD0xOwkjICRzbWFsbF9mb290cHJpbnQ9MSBjb2RlIGlzIH41JSBzbG93ZXIgW29uCgkJCSMgcmVjZW50ILUtYXJjaHNdLCBidXQgfjUgdGltZXMgc21hbGxlciEKCQkJIyBJIGZhdm9yIGNvbXBhY3QgY29kZSB0byBtaW5pbWl6ZSBjYWNoZQoJCQkjIGNvbnRlbnRpb24gYW5kIGluIGhvcGUgdG8gImNvbGxlY3QiIDUlIGJhY2sKCQkJIyBpbiByZWFsLWxpZmUgYXBwbGljYXRpb25zLi4uCgokdmVydGljYWxfc3Bpbj0wOwkjIHNoaWZ0ICJ2ZXJ0aWNhbHkiIGRlZmF1bHRzIHRvIDAsIGJlY2F1c2Ugb2YKCQkJIyBpdHMgcHJvb2Ytb2YtY29uY2VwdCBzdGF0dXMuLi4KIyBOb3RlIHRoYXQgdGhlcmUgaXMgbm8gZGVjdmVydCgpLCBhcyB3ZWxsIGFzIGxhc3QgZW5jcnlwdGlvbiByb3VuZCBpcwojIHBlcmZvcm1lZCB3aXRoICJob3Jpem9udGFsIiBzaGlmdHMuIFRoaXMgaXMgYmVjYXVzZSB0aGlzICJ2ZXJ0aWNhbCIKIyBpbXBsZW1lbnRhdGlvbiBbb25lIHdoaWNoIGdyb3VwcyBzaGlmdHMgb24gYSBnaXZlbiAkc1tpXSB0byBmb3JtIGEKIyAiY29sdW1uLCIgdW5saWtlICJob3Jpem9udGFsIiBvbmUsIHdoaWNoIGdyb3VwcyBzaGlmdHMgb24gZGlmZmVyZW50CiMgJHNbaV0gdG8gZm9ybSBhICJyb3ciXSBpcyB3b3JrIGluIHByb2dyZXNzLiBJdCB3YXMgb2JzZXJ2ZWQgdG8gcnVuCiMgZmV3IHBlcmNlbnRzIGZhc3RlciBvbiBJbnRlbCBjb3JlcywgYnV0IG5vdCBBTUQuIE9uIEFNRCBLOCBjb3JlIGl0J3MKIyB3aG9sZSAxMiUgc2xvd2VyOi0oIFNvIHdlIGZhY2UgYSB0cmFkZS1vZmYuLi4gU2hhbGwgaXQgYmUgcmVzb2x2ZWQKIyBzb21lIGRheT8gVGlsbCB0aGVuIHRoZSBjb2RlIGlzIGNvbnNpZGVyZWQgZXhwZXJpbWVudGFsIGFuZCBieQojIGRlZmF1bHQgcmVtYWlucyBkb3JtYW50Li4uCgpzdWIgZW5jdmVydCgpCnsgbXkgKCR0ZSxAcykgPSBAXzsKICBteSAkdjAgPSAkYWNjLCAkdjEgPSAka2V5OwoKCSZtb3YJKCR2MCwkc1szXSk7CQkJCSMgY29weSBzMwoJJm1vdgkoJkRXUCg0LCJlc3AiKSwkc1syXSk7CQkJIyBzYXZlIHMyCgkmbW92CSgkdjEsJHNbMF0pOwkJCQkjIGNvcHkgczAKCSZtb3YJKCZEV1AoOCwiZXNwIiksJHNbMV0pOwkJCSMgc2F2ZSBzMQoKCSZtb3Z6CSgkc1syXSwmSEIoJHNbMF0pKTsKCSZhbmQJKCRzWzBdLDB4RkYpOwoJJm1vdgkoJHNbMF0sJkRXUCgwLCR0ZSwkc1swXSw4KSk7CQkjIHMwPj4wCgkmc2hyCSgkdjEsMTYpOwoJJm1vdgkoJHNbM10sJkRXUCgzLCR0ZSwkc1syXSw4KSk7CQkjIHMwPj44CgkmbW92egkoJHNbMV0sJkhCKCR2MSkpOwoJJmFuZAkoJHYxLDB4RkYpOwoJJm1vdgkoJHNbMl0sJkRXUCgyLCR0ZSwkdjEsOCkpOwkJIyBzMD4+MTYKCSAmbW92CSgkdjEsJHYwKTsKCSZtb3YJKCRzWzFdLCZEV1AoMSwkdGUsJHNbMV0sOCkpOwkJIyBzMD4+MjQKCgkmYW5kCSgkdjAsMHhGRik7CgkmeG9yCSgkc1szXSwmRFdQKDAsJHRlLCR2MCw4KSk7CQkjIHMzPj4wCgkmbW92egkoJHYwLCZIQigkdjEpKTsKCSZzaHIJKCR2MSwxNik7CgkmeG9yCSgkc1syXSwmRFdQKDMsJHRlLCR2MCw4KSk7CQkjIHMzPj44CgkmbW92egkoJHYwLCZIQigkdjEpKTsKCSZhbmQJKCR2MSwweEZGKTsKCSZ4b3IJKCRzWzFdLCZEV1AoMiwkdGUsJHYxLDgpKTsJCSMgczM+PjE2CgkgJm1vdgkoJHYxLCZEV1AoNCwiZXNwIikpOwkJCSMgcmVzdG9yZSBzMgoJJnhvcgkoJHNbMF0sJkRXUCgxLCR0ZSwkdjAsOCkpOwkJIyBzMz4+MjQKCgkmbW92CSgkdjAsJHYxKTsKCSZhbmQJKCR2MSwweEZGKTsKCSZ4b3IJKCRzWzJdLCZEV1AoMCwkdGUsJHYxLDgpKTsJCSMgczI+PjAKCSZtb3Z6CSgkdjEsJkhCKCR2MCkpOwoJJnNocgkoJHYwLDE2KTsKCSZ4b3IJKCRzWzFdLCZEV1AoMywkdGUsJHYxLDgpKTsJCSMgczI+PjgKCSZtb3Z6CSgkdjEsJkhCKCR2MCkpOwoJJmFuZAkoJHYwLDB4RkYpOwoJJnhvcgkoJHNbMF0sJkRXUCgyLCR0ZSwkdjAsOCkpOwkJIyBzMj4+MTYKCSAmbW92CSgkdjAsJkRXUCg4LCJlc3AiKSk7CQkJIyByZXN0b3JlIHMxCgkmeG9yCSgkc1szXSwmRFdQKDEsJHRlLCR2MSw4KSk7CQkjIHMyPj4yNAoKCSZtb3YJKCR2MSwkdjApOwoJJmFuZAkoJHYwLDB4RkYpOwoJJnhvcgkoJHNbMV0sJkRXUCgwLCR0ZSwkdjAsOCkpOwkJIyBzMT4+MAoJJm1vdnoJKCR2MCwmSEIoJHYxKSk7Cgkmc2hyCSgkdjEsMTYpOwoJJnhvcgkoJHNbMF0sJkRXUCgzLCR0ZSwkdjAsOCkpOwkJIyBzMT4+OAoJJm1vdnoJKCR2MCwmSEIoJHYxKSk7CgkmYW5kCSgkdjEsMHhGRik7CgkmeG9yCSgkc1szXSwmRFdQKDIsJHRlLCR2MSw4KSk7CQkjIHMxPj4xNgoJICZtb3YJKCRrZXksJF9fa2V5KTsJCQkJIyByZWluY2FybmF0ZSB2MSBhcyBrZXkKCSZ4b3IJKCRzWzJdLCZEV1AoMSwkdGUsJHYwLDgpKTsJCSMgczE+PjI0Cn0KCiMgQW5vdGhlciBleHBlcmltZW50YWwgcm91dGluZSwgd2hpY2ggZmVhdHVyZXMgImhvcml6b250YWwgc3BpbiwiIGJ1dAojIGVsaW1pbmF0ZXMgb25lIHJlZmVyZW5jZSB0byBzdGFjay4gU3RyYW5nZWx5IGVub3VnaCBydW5zIHNsb3dlci4uLgpzdWIgZW5jaG9yaXooKQp7IG15ICR2MCA9ICRrZXksICR2MSA9ICRhY2M7CgoJJm1vdnoJKCR2MCwmTEIoJHMwKSk7CQkJIyAgMywgMiwgMSwgMCoKCSZyb3RyCSgkczIsOCk7CQkJIyAgOCwxMSwxMCwgOQoJJm1vdgkoJHYxLCZEV1AoMCwkdGUsJHYwLDgpKTsJIyAgMAoJJm1vdnoJKCR2MCwmSEIoJHMxKSk7CQkJIyAgNywgNiwgNSosIDQKCSZyb3RyCSgkczMsMTYpOwkJCSMgMTMsMTIsMTUsMTQKCSZ4b3IJKCR2MSwmRFdQKDMsJHRlLCR2MCw4KSk7CSMgIDUKCSZtb3Z6CSgkdjAsJkhCKCRzMikpOwkJCSMgIDgsMTEsMTAqLCA5Cgkmcm90cgkoJHMwLDE2KTsJCQkjICAxLCAwLCAzLCAyCgkmeG9yCSgkdjEsJkRXUCgyLCR0ZSwkdjAsOCkpOwkjIDEwCgkmbW92egkoJHYwLCZIQigkczMpKTsJCQkjIDEzLDEyLDE1KiwxNAoJJnhvcgkoJHYxLCZEV1AoMSwkdGUsJHYwLDgpKTsJIyAxNSwgdFswXSBjb2xsZWN0ZWQKCSZtb3YJKCRfX3MwLCR2MSk7CQkJIyB0WzBdIHNhdmVkCgoJJm1vdnoJKCR2MCwmTEIoJHMxKSk7CQkJIyAgNywgNiwgNSwgNCoKCSZzaHIJKCRzMSwxNik7CQkJIyAgLSwgLSwgNywgNgoJJm1vdgkoJHYxLCZEV1AoMCwkdGUsJHYwLDgpKTsJIyAgNAoJJm1vdnoJKCR2MCwmTEIoJHMzKSk7CQkJIyAxMywxMiwxNSwxNCoKCSZ4b3IJKCR2MSwmRFdQKDIsJHRlLCR2MCw4KSk7CSMgMTQKCSZtb3Z6CSgkdjAsJkhCKCRzMCkpOwkJCSMgIDEsIDAsIDMqLCAyCgkmYW5kCSgkczMsMHhmZmZmMDAwMCk7CQkjIDEzLDEyLCAtLCAtCgkmeG9yCSgkdjEsJkRXUCgxLCR0ZSwkdjAsOCkpOwkjICAzCgkmbW92egkoJHYwLCZMQigkczIpKTsJCQkjICA4LDExLDEwLCA5KgoJJm9yCSgkczMsJHMxKTsJCQkjIDEzLDEyLCA3LCA2CgkmeG9yCSgkdjEsJkRXUCgzLCR0ZSwkdjAsOCkpOwkjICA5LCB0WzFdIGNvbGxlY3RlZAoJJm1vdgkoJHMxLCR2MSk7CQkJIyAgc1sxXT10WzFdCgoJJm1vdnoJKCR2MCwmTEIoJHMwKSk7CQkJIyAgMSwgMCwgMywgMioKCSZzaHIJKCRzMiwxNik7CQkJIyAgLSwgLSwgOCwxMQoJJm1vdgkoJHYxLCZEV1AoMiwkdGUsJHYwLDgpKTsJIyAgMgoJJm1vdnoJKCR2MCwmSEIoJHMzKSk7CQkJIyAxMywxMiwgNyosIDYKCSZ4b3IJKCR2MSwmRFdQKDEsJHRlLCR2MCw4KSk7CSMgIDcKCSZtb3Z6CSgkdjAsJkhCKCRzMikpOwkJCSMgIC0sIC0sIDgqLDExCgkmeG9yCSgkdjEsJkRXUCgwLCR0ZSwkdjAsOCkpOwkjICA4CgkmbW92CSgkdjAsJHMzKTsKCSZzaHIJKCR2MCwyNCk7CQkJIyAxMwoJJnhvcgkoJHYxLCZEV1AoMywkdGUsJHYwLDgpKTsJIyAxMywgdFsyXSBjb2xsZWN0ZWQKCgkmbW92egkoJHYwLCZMQigkczIpKTsJCQkjICAtLCAtLCA4LDExKgoJJnNocgkoJHMwLDI0KTsJCQkjICAxKgoJJm1vdgkoJHMyLCZEV1AoMSwkdGUsJHYwLDgpKTsJIyAxMQoJJnhvcgkoJHMyLCZEV1AoMywkdGUsJHMwLDgpKTsJIyAgMQoJJm1vdgkoJHMwLCRfX3MwKTsJCQkjIHNbMF09dFswXQoJJm1vdnoJKCR2MCwmTEIoJHMzKSk7CQkJIyAxMywxMiwgNywgNioKCSZzaHIJKCRzMywxNik7CQkJIyAgICwgICwxMywxMgoJJnhvcgkoJHMyLCZEV1AoMiwkdGUsJHYwLDgpKTsJIyAgNgoJJm1vdgkoJGtleSwkX19rZXkpOwkJCSMgcmVpbmNhcm5hdGUgdjAgYXMga2V5CgkmYW5kCSgkczMsMHhmZik7CQkJIyAgICwgICwxMywxMioKCSZtb3YJKCRzMywmRFdQKDAsJHRlLCRzMyw4KSk7CSMgMTIKCSZ4b3IJKCRzMywkczIpOwkJCSMgc1syXT10WzNdIGNvbGxlY3RlZAoJJm1vdgkoJHMyLCR2MSk7CQkJIyBzWzJdPXRbMl0KfQoKIyBNb3JlIGV4cGVyaW1lbnRhbCBjb2RlLi4uIFNTRSBvbmUuLi4gRXZlbiB0aG91Z2ggdGhpcyBvbmUgZWxpbWluYXRlcwojICphbGwqIHJlZmVyZW5jZXMgdG8gc3RhY2ssIGl0J3Mgbm90IGZhc3Rlci4uLgpzdWIgc3NlX2VuY2JvZHkoKQp7CgkmbW92egkoJGFjYywmTEIoImVheCIpKTsJCSMgIDAKCSZtb3YJKCJlY3giLCZEV1AoMCwkdGJsLCRhY2MsOCkpOwkjICAwCgkmcHNodWZ3CSgibW0yIiwibW0wIiwweDBkKTsJCSMgIDcsIDYsIDMsIDIKCSZtb3Z6CSgiZWR4IiwmSEIoImVheCIpKTsJCSMgIDEKCSZtb3YJKCJlZHgiLCZEV1AoMywkdGJsLCJlZHgiLDgpKTsJIyAgMQoJJnNocgkoImVheCIsMTYpOwkJCSMgIDUsIDQKCgkmbW92egkoJGFjYywmTEIoImVieCIpKTsJCSMgMTAKCSZ4b3IJKCJlY3giLCZEV1AoMiwkdGJsLCRhY2MsOCkpOwkjIDEwCgkmcHNodWZ3CSgibW02IiwibW00IiwweDA4KTsJCSMgMTMsMTIsIDksIDgKCSZtb3Z6CSgkYWNjLCZIQigiZWJ4IikpOwkJIyAxMQoJJnhvcgkoImVkeCIsJkRXUCgxLCR0YmwsJGFjYyw4KSk7CSMgMTEKCSZzaHIJKCJlYngiLDE2KTsJCQkjIDE1LDE0CgoJJm1vdnoJKCRhY2MsJkhCKCJlYXgiKSk7CQkjICA1CgkmeG9yCSgiZWN4IiwmRFdQKDMsJHRibCwkYWNjLDgpKTsJIyAgNQoJJm1vdnEJKCJtbTMiLFFXUCgxNiwka2V5KSk7CgkmbW92egkoJGFjYywmSEIoImVieCIpKTsJCSMgMTUKCSZ4b3IJKCJlY3giLCZEV1AoMSwkdGJsLCRhY2MsOCkpOwkjIDE1CgkmbW92ZAkoIm1tMCIsImVjeCIpOwkJCSMgdFswXSBjb2xsZWN0ZWQKCgkmbW92egkoJGFjYywmTEIoImVheCIpKTsJCSMgIDQKCSZtb3YJKCJlY3giLCZEV1AoMCwkdGJsLCRhY2MsOCkpOwkjICA0CgkmbW92ZAkoImVheCIsIm1tMiIpOwkJCSMgIDcsIDYsIDMsIDIKCSZtb3Z6CSgkYWNjLCZMQigiZWJ4IikpOwkJIyAxNAoJJnhvcgkoImVjeCIsJkRXUCgyLCR0YmwsJGFjYyw4KSk7CSMgMTQKCSZtb3ZkCSgiZWJ4IiwibW02Iik7CQkJIyAxMywxMiwgOSwgOAoKCSZtb3Z6CSgkYWNjLCZIQigiZWF4IikpOwkJIyAgMwoJJnhvcgkoImVjeCIsJkRXUCgxLCR0YmwsJGFjYyw4KSk7CSMgIDMKCSZtb3Z6CSgkYWNjLCZIQigiZWJ4IikpOwkJIyAgOQoJJnhvcgkoImVjeCIsJkRXUCgzLCR0YmwsJGFjYyw4KSk7CSMgIDkKCSZtb3ZkCSgibW0xIiwiZWN4Iik7CQkJIyB0WzFdIGNvbGxlY3RlZAoKCSZtb3Z6CSgkYWNjLCZMQigiZWF4IikpOwkJIyAgMgoJJm1vdgkoImVjeCIsJkRXUCgyLCR0YmwsJGFjYyw4KSk7CSMgIDIKCSZzaHIJKCJlYXgiLDE2KTsJCQkjICA3LCA2CgkmcHVucGNrbGRxCSgibW0wIiwibW0xIik7CQkjIHRbMCwxXSBjb2xsZWN0ZWQKCSZtb3Z6CSgkYWNjLCZMQigiZWJ4IikpOwkJIyAgOAoJJnhvcgkoImVjeCIsJkRXUCgwLCR0YmwsJGFjYyw4KSk7CSMgIDgKCSZzaHIJKCJlYngiLDE2KTsJCQkjIDEzLDEyCgoJJm1vdnoJKCRhY2MsJkhCKCJlYXgiKSk7CQkjICA3CgkmeG9yCSgiZWN4IiwmRFdQKDEsJHRibCwkYWNjLDgpKTsJIyAgNwoJJnB4b3IJKCJtbTAiLCJtbTMiKTsKCSZtb3Z6CSgiZWF4IiwmTEIoImVheCIpKTsJCSMgIDYKCSZ4b3IJKCJlZHgiLCZEV1AoMiwkdGJsLCJlYXgiLDgpKTsJIyAgNgoJJnBzaHVmdwkoIm1tMSIsIm1tMCIsMHgwOCk7CQkjICA1LCA0LCAxLCAwCgkmbW92egkoJGFjYywmSEIoImVieCIpKTsJCSMgMTMKCSZ4b3IJKCJlY3giLCZEV1AoMywkdGJsLCRhY2MsOCkpOwkjIDEzCgkmeG9yCSgiZWN4IiwmRFdQKDI0LCRrZXkpKTsJCSMgdFsyXQoJJm1vdmQJKCJtbTQiLCJlY3giKTsJCQkjIHRbMl0gY29sbGVjdGVkCgkmbW92egkoImVieCIsJkxCKCJlYngiKSk7CQkjIDEyCgkmeG9yCSgiZWR4IiwmRFdQKDAsJHRibCwiZWJ4Iiw4KSk7CSMgMTIKCSZzaHIJKCJlY3giLDE2KTsKCSZtb3ZkCSgiZWF4IiwibW0xIik7CQkJIyAgNSwgNCwgMSwgMAoJJm1vdgkoImVieCIsJkRXUCgyOCwka2V5KSk7CQkjIHRbM10KCSZ4b3IJKCJlYngiLCJlZHgiKTsKCSZtb3ZkCSgibW01IiwiZWJ4Iik7CQkJIyB0WzNdIGNvbGxlY3RlZAoJJmFuZAkoImVieCIsMHhmZmZmMDAwMCk7Cgkmb3IJKCJlYngiLCJlY3giKTsKCgkmcHVucGNrbGRxCSgibW00IiwibW01Iik7CQkjIHRbMiwzXSBjb2xsZWN0ZWQKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojICJDb21wYWN0IiBibG9jayBmdW5jdGlvbgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgpzdWIgZW5jY29tcGFjdCgpCnsgbXkgJEZuID0gbW92OwogIHdoaWxlICgkI18+NSkgeyBwb3AoQF8pOyAkRm49c3Vie307IH0KICBteSAoJGksJHRlLEBzKT1AXzsKICBteSAkdG1wID0gJGtleTsKICBteSAkb3V0ID0gJGk9PTM/JHNbMF06JGFjYzsKCgkjICRGbiBpcyB1c2VkIGluIGZpcnN0IGNvbXBhY3Qgcm91bmQgYW5kIGl0cyBwdXJwb3NlIGlzIHRvCgkjIHZvaWQgcmVzdG9yYXRpb24gb2Ygc29tZSB2YWx1ZXMgZnJvbSBzdGFjaywgc28gdGhhdCBhZnRlcgoJIyA0eGVuY2NvbXBhY3Qgd2l0aCBleHRyYSBhcmd1bWVudCAka2V5IHZhbHVlIGlzIGxlZnQgdGhlcmUuLi4KCWlmICgkaT09MykgIHsJJiRGbgkoJGtleSwkX19rZXkpOwkJCX0jIyVlZHgKCWVsc2UgICAgICAgIHsJJm1vdgkoJG91dCwkc1swXSk7CQkJfQoJCQkmYW5kCSgkb3V0LDB4RkYpOwoJaWYgKCRpPT0xKSAgewkmc2hyCSgkc1swXSwxNik7CQkJfSMlZWJ4WzFdCglpZiAoJGk9PTIpICB7CSZzaHIJKCRzWzBdLDI0KTsJCQl9IyVlY3hbMl0KCQkJJm1vdnoJKCRvdXQsJkJQKC0xMjgsJHRlLCRvdXQsMSkpOwoKCWlmICgkaT09MykgIHsJJHRtcD0kc1sxXTsJCQkJfSMjJWVheAoJCQkmbW92egkoJHRtcCwmSEIoJHNbMV0pKTsKCQkJJm1vdnoJKCR0bXAsJkJQKC0xMjgsJHRlLCR0bXAsMSkpOwoJCQkmc2hsCSgkdG1wLDgpOwoJCQkmeG9yCSgkb3V0LCR0bXApOwoKCWlmICgkaT09MykgIHsJJHRtcD0kc1syXTsgJm1vdiAoJHNbMV0sJF9fczApOwkJfSMjJWVieAoJZWxzZSAgICAgICAgewkmbW92CSgkdG1wLCRzWzJdKTsKCQkJJnNocgkoJHRtcCwxNik7CQkJfQoJaWYgKCRpPT0yKSAgewkmYW5kCSgkc1sxXSwweEZGKTsJCQl9IyVlZHhbMl0KCQkJJmFuZAkoJHRtcCwweEZGKTsKCQkJJm1vdnoJKCR0bXAsJkJQKC0xMjgsJHRlLCR0bXAsMSkpOwoJCQkmc2hsCSgkdG1wLDE2KTsKCQkJJnhvcgkoJG91dCwkdG1wKTsKCglpZiAoJGk9PTMpICB7CSR0bXA9JHNbM107ICZtb3YgKCRzWzJdLCRfX3MxKTsJCX0jIyVlY3gKCWVsc2lmKCRpPT0yKXsJJm1vdnoJKCR0bXAsJkhCKCRzWzNdKSk7CQl9IyVlYnhbMl0KCWVsc2UgICAgICAgIHsJJm1vdgkoJHRtcCwkc1szXSk7CgkJCSZzaHIJKCR0bXAsMjQpOwkJCX0KCQkJJm1vdnoJKCR0bXAsJkJQKC0xMjgsJHRlLCR0bXAsMSkpOwoJCQkmc2hsCSgkdG1wLDI0KTsKCQkJJnhvcgkoJG91dCwkdG1wKTsKCWlmICgkaTwyKSAgIHsJJm1vdgkoJkRXUCg0KzQqJGksImVzcCIpLCRvdXQpOwl9CglpZiAoJGk9PTMpICB7CSZtb3YJKCRzWzNdLCRhY2MpOwkJCX0KCSZjb21tZW50KCk7Cn0KCnN1YiBlbmN0cmFuc2Zvcm0oKQp7IG15IEBzID0gKCRzMCwkczEsJHMyLCRzMyk7CiAgbXkgJGkgPSBzaGlmdDsKICBteSAkdG1wID0gJHRibDsKICBteSAkcjIgID0gJGtleSA7CgoJJm1vdgkoJGFjYywkc1skaV0pOwoJJmFuZAkoJGFjYywweDgwODA4MDgwKTsKCSZtb3YJKCR0bXAsJGFjYyk7Cgkmc2hyCSgkdG1wLDcpOwoJJmxlYQkoJHIyLCZEV1AoMCwkc1skaV0sJHNbJGldKSk7Cgkmc3ViCSgkYWNjLCR0bXApOwoJJmFuZAkoJHIyLDB4ZmVmZWZlZmUpOwoJJmFuZAkoJGFjYywweDFiMWIxYjFiKTsKCSZtb3YJKCR0bXAsJHNbJGldKTsKCSZ4b3IJKCRhY2MsJHIyKTsJIyByMgoKCSZ4b3IJKCRzWyRpXSwkYWNjKTsJIyByMCBeIHIyCgkmcm90bAkoJHNbJGldLDI0KTsKCSZ4b3IJKCRzWyRpXSwkYWNjKQkjIFJPVEFURShyMl5yMCwyNCkgXiByMgoJJnJvdHIJKCR0bXAsMTYpOwoJJnhvcgkoJHNbJGldLCR0bXApOwoJJnJvdHIJKCR0bXAsOCk7CgkmeG9yCSgkc1skaV0sJHRtcCk7Cn0KCiZmdW5jdGlvbl9iZWdpbl9CKCJfeDg2X0FFU19lbmNyeXB0X2NvbXBhY3QiKTsKCSMgbm90ZSB0aGF0IGNhbGxlciBpcyBleHBlY3RlZCB0byBhbGxvY2F0ZSBzdGFjayBmcmFtZSBmb3IgbWUhCgkmbW92CSgkX19rZXksJGtleSk7CQkJIyBzYXZlIGtleQoKCSZ4b3IJKCRzMCwmRFdQKDAsJGtleSkpOwkJIyB4b3Igd2l0aCBrZXkKCSZ4b3IJKCRzMSwmRFdQKDQsJGtleSkpOwoJJnhvcgkoJHMyLCZEV1AoOCwka2V5KSk7CgkmeG9yCSgkczMsJkRXUCgxMiwka2V5KSk7CgoJJm1vdgkoJGFjYywmRFdQKDI0MCwka2V5KSk7CQkjIGxvYWQga2V5LT5yb3VuZHMKCSZsZWEJKCRhY2MsJkRXUCgtMiwkYWNjLCRhY2MpKTsKCSZsZWEJKCRhY2MsJkRXUCgwLCRrZXksJGFjYyw4KSk7CgkmbW92CSgkX19lbmQsJGFjYyk7CQkJIyBlbmQgb2Yga2V5IHNjaGVkdWxlCgoJIyBwcmVmZXRjaCBUZTQKCSZtb3YJKCRrZXksJkRXUCgwLTEyOCwkdGJsKSk7CgkmbW92CSgkYWNjLCZEV1AoMzItMTI4LCR0YmwpKTsKCSZtb3YJKCRrZXksJkRXUCg2NC0xMjgsJHRibCkpOwoJJm1vdgkoJGFjYywmRFdQKDk2LTEyOCwkdGJsKSk7CgkmbW92CSgka2V5LCZEV1AoMTI4LTEyOCwkdGJsKSk7CgkmbW92CSgkYWNjLCZEV1AoMTYwLTEyOCwkdGJsKSk7CgkmbW92CSgka2V5LCZEV1AoMTkyLTEyOCwkdGJsKSk7CgkmbW92CSgkYWNjLCZEV1AoMjI0LTEyOCwkdGJsKSk7CgoJJnNldF9sYWJlbCgibG9vcCIsMTYpOwoKCQkmZW5jY29tcGFjdCgwLCR0YmwsJHMwLCRzMSwkczIsJHMzLDEpOwoJCSZlbmNjb21wYWN0KDEsJHRibCwkczEsJHMyLCRzMywkczAsMSk7CgkJJmVuY2NvbXBhY3QoMiwkdGJsLCRzMiwkczMsJHMwLCRzMSwxKTsKCQkmZW5jY29tcGFjdCgzLCR0YmwsJHMzLCRzMCwkczEsJHMyLDEpOwoJCSZlbmN0cmFuc2Zvcm0oMik7CgkJJmVuY3RyYW5zZm9ybSgzKTsKCQkmZW5jdHJhbnNmb3JtKDApOwoJCSZlbmN0cmFuc2Zvcm0oMSk7CgkJJm1vdiAJKCRrZXksJF9fa2V5KTsKCQkmbW92CSgkdGJsLCRfX3RibCk7CgkJJmFkZAkoJGtleSwxNik7CQkjIGFkdmFuY2UgcmRfa2V5CgkJJnhvcgkoJHMwLCZEV1AoMCwka2V5KSk7CgkJJnhvcgkoJHMxLCZEV1AoNCwka2V5KSk7CgkJJnhvcgkoJHMyLCZEV1AoOCwka2V5KSk7CgkJJnhvcgkoJHMzLCZEV1AoMTIsJGtleSkpOwoKCSZjbXAJKCRrZXksJF9fZW5kKTsKCSZtb3YJKCRfX2tleSwka2V5KTsKCSZqYgkoJmxhYmVsKCJsb29wIikpOwoKCSZlbmNjb21wYWN0KDAsJHRibCwkczAsJHMxLCRzMiwkczMpOwoJJmVuY2NvbXBhY3QoMSwkdGJsLCRzMSwkczIsJHMzLCRzMCk7CgkmZW5jY29tcGFjdCgyLCR0YmwsJHMyLCRzMywkczAsJHMxKTsKCSZlbmNjb21wYWN0KDMsJHRibCwkczMsJHMwLCRzMSwkczIpOwoKCSZ4b3IJKCRzMCwmRFdQKDE2LCRrZXkpKTsKCSZ4b3IJKCRzMSwmRFdQKDIwLCRrZXkpKTsKCSZ4b3IJKCRzMiwmRFdQKDI0LCRrZXkpKTsKCSZ4b3IJKCRzMywmRFdQKDI4LCRrZXkpKTsKCgkmcmV0CSgpOwomZnVuY3Rpb25fZW5kX0IoIl94ODZfQUVTX2VuY3J5cHRfY29tcGFjdCIpOwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojICJDb21wYWN0IiBTU0UgYmxvY2sgZnVuY3Rpb24uCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIwojIFBlcmZvcm1hbmNlIGlzIG5vdCBhY3R1YWxseSBleHRyYW9yZGluYXJ5IGluIGNvbXBhcmlzb24gdG8gcHVyZQojIHg4NiBjb2RlLiBJbiBwYXJ0aWN1bGFyIGVuY3J5cHQgcGVyZm9ybWFuY2UgaXMgdmlydHVhbGx5IHRoZSBzYW1lLgojIERlY3J5cHQgcGVyZm9ybWFuY2Ugb24gdGhlIG90aGVyIGhhbmQgaXMgMTUtMjAlIGJldHRlciBvbiBuZXdlcgojILUtYXJjaHMgW2J1dCB3ZSdyZSB0aGFua2Z1bCBmb3IgKmFueSogaW1wcm92ZW1lbnQgaGVyZV0sIGFuZCB+NTAlCiMgYmV0dGVyIG9uIFBJSUk6LSkgQW5kIGFkZGl0aW9uYWxseSBvbiB0aGUgcHJvcyBzaWRlIHRoaXMgY29kZQojIGVsaW1pbmF0ZXMgcmVkdW5kYW50IHJlZmVyZW5jZXMgdG8gc3RhY2sgYW5kIHRodXMgcmVsaWV2ZXMvCiMgbWluaW1pemVzIHRoZSBwcmVzc3VyZSBvbiB0aGUgbWVtb3J5IGJ1cy4KIwojIE1NWCByZWdpc3RlciBsYXlvdXQgICAgICAgICAgICAgICAgICAgICAgICAgICBsc2IKIyArLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rCiMgfCAgICAgICAgICBtbTQgICAgICAgICAgfCAgICAgICAgICBtbTAgICAgICAgICAgfAojICstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSsKIyB8ICAgICBzMyAgICB8ICAgICBzMiAgICB8ICAgICBzMSAgICB8ICAgICBzMCAgICB8ICAgIAojICstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSsKIyB8MTV8MTR8MTN8MTJ8MTF8MTB8IDl8IDh8IDd8IDZ8IDV8IDR8IDN8IDJ8IDF8IDB8CiMgKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKwojCiMgSW5kZXhlcyB0cmFuc2xhdGUgYXMgc1tOLzRdPj4oOCooTiU0KSksIGUuZy4gNSBtZWFucyBzMT4+OC4KIyBJbiB0aGlzIHRlcm1zIGVuY3J5cHRpb24gYW5kIGRlY3J5cHRpb24gImNvbXBhY3QiIHBlcm11dGF0aW9uCiMgbWF0cmljZXMgY2FuIGJlIGRlcGljdGVkIGFzIGZvbGxvd2luZzoKIwojIGVuY3J5cHRpb24gICAgICAgICAgICAgIGxzYgkjIGRlY3J5cHRpb24gICAgICAgICAgICAgIGxzYgojICstLS0tKystLS0tKy0tLS0rLS0tLSstLS0tKwkjICstLS0tKystLS0tKy0tLS0rLS0tLSstLS0tKwojIHwgdDAgfHwgMTUgfCAxMCB8ICA1IHwgIDAgfAkjIHwgdDAgfHwgIDcgfCAxMCB8IDEzIHwgIDAgfAojICstLS0tKystLS0tKy0tLS0rLS0tLSstLS0tKwkjICstLS0tKystLS0tKy0tLS0rLS0tLSstLS0tKwojIHwgdDEgfHwgIDMgfCAxNCB8ICA5IHwgIDQgfAkjIHwgdDEgfHwgMTEgfCAxNCB8ICAxIHwgIDQgfAojICstLS0tKystLS0tKy0tLS0rLS0tLSstLS0tKwkjICstLS0tKystLS0tKy0tLS0rLS0tLSstLS0tKwojIHwgdDIgfHwgIDcgfCAgMiB8IDEzIHwgIDggfAkjIHwgdDIgfHwgMTUgfCAgMiB8ICA1IHwgIDggfAojICstLS0tKystLS0tKy0tLS0rLS0tLSstLS0tKwkjICstLS0tKystLS0tKy0tLS0rLS0tLSstLS0tKwojIHwgdDMgfHwgMTEgfCAgNiB8ICAxIHwgMTIgfAkjIHwgdDMgfHwgIDMgfCAgNiB8ICA5IHwgMTIgfAojICstLS0tKystLS0tKy0tLS0rLS0tLSstLS0tKwkjICstLS0tKystLS0tKy0tLS0rLS0tLSstLS0tKwojCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBXaHkgbm90IHhtbSByZWdpc3RlcnM/IFNob3J0IGFuc3dlci4gSXQgd2FzIGFjdHVhbGx5IHRlc3RlZCBhbmQKIyB3YXMgbm90IGFueSBmYXN0ZXIsIGJ1dCAqY29udHJhcnkqLCBtb3N0IG5vdGFibHkgb24gSW50ZWwgQ1BVcy4KIyBMb25nZXIgYW5zd2VyLiBNYWluIGFkdmFudGFnZSBvZiB1c2luZyBtbSByZWdpc3RlcnMgaXMgdGhhdCBtb3ZkCiMgbGF0ZW5jeSBpcyBsb3dlciwgZXNwZWNpYWxseSBvbiBJbnRlbCBQNC4gV2hpbGUgYXJpdGhtZXRpYwojIGluc3RydWN0aW9ucyBhcmUgdHdpY2UgYXMgbWFueSwgdGhleSBjYW4gYmUgc2NoZWR1bGVkIGV2ZXJ5IGN5Y2xlCiMgYW5kIG5vdCBldmVyeSBzZWNvbmQgb25lIHdoZW4gdGhleSBhcmUgb3BlcmF0aW5nIG9uIHhtbSByZWdpc3RlciwKIyBzbyB0aGF0ICJhcml0aG1ldGljIHRocm91Z2hwdXQiIHJlbWFpbnMgdmlydHVhbGx5IHRoZSBzYW1lLiBBbmQKIyBmaW5hbGx5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCBldmVuIG9uIGVsZGVyIFNTRS1vbmx5IENQVXM6LSkKCnN1YiBzc2VfZW5jY29tcGFjdCgpCnsKCSZwc2h1ZncJKCJtbTEiLCJtbTAiLDB4MDgpOwkJIyAgNSwgNCwgMSwgMAoJJnBzaHVmdwkoIm1tNSIsIm1tNCIsMHgwZCk7CQkjIDE1LDE0LDExLDEwCgkmbW92ZAkoImVheCIsIm1tMSIpOwkJCSMgIDUsIDQsIDEsIDAKCSZtb3ZkCSgiZWJ4IiwibW01Iik7CQkJIyAxNSwxNCwxMSwxMAoKCSZtb3Z6CSgkYWNjLCZMQigiZWF4IikpOwkJIyAgMAoJJm1vdnoJKCJlY3giLCZCUCgtMTI4LCR0YmwsJGFjYywxKSk7CSMgIDAKCSZwc2h1ZncJKCJtbTIiLCJtbTAiLDB4MGQpOwkJIyAgNywgNiwgMywgMgoJJm1vdnoJKCJlZHgiLCZIQigiZWF4IikpOwkJIyAgMQoJJm1vdnoJKCJlZHgiLCZCUCgtMTI4LCR0YmwsImVkeCIsMSkpOwkjICAxCgkmc2hsCSgiZWR4Iiw4KTsJCQkjICAxCgkmc2hyCSgiZWF4IiwxNik7CQkJIyAgNSwgNAoKCSZtb3Z6CSgkYWNjLCZMQigiZWJ4IikpOwkJIyAxMAoJJm1vdnoJKCRhY2MsJkJQKC0xMjgsJHRibCwkYWNjLDEpKTsJIyAxMAoJJnNobAkoJGFjYywxNik7CQkJIyAxMAoJJm9yCSgiZWN4IiwkYWNjKTsJCQkjIDEwCgkmcHNodWZ3CSgibW02IiwibW00IiwweDA4KTsJCSMgMTMsMTIsIDksIDgKCSZtb3Z6CSgkYWNjLCZIQigiZWJ4IikpOwkJIyAxMQoJJm1vdnoJKCRhY2MsJkJQKC0xMjgsJHRibCwkYWNjLDEpKTsJIyAxMQoJJnNobAkoJGFjYywyNCk7CQkJIyAxMQoJJm9yCSgiZWR4IiwkYWNjKTsJCQkjIDExCgkmc2hyCSgiZWJ4IiwxNik7CQkJIyAxNSwxNAoKCSZtb3Z6CSgkYWNjLCZIQigiZWF4IikpOwkJIyAgNQoJJm1vdnoJKCRhY2MsJkJQKC0xMjgsJHRibCwkYWNjLDEpKTsJIyAgNQoJJnNobAkoJGFjYyw4KTsJCQkjICA1Cgkmb3IJKCJlY3giLCRhY2MpOwkJCSMgIDUKCSZtb3Z6CSgkYWNjLCZIQigiZWJ4IikpOwkJIyAxNQoJJm1vdnoJKCRhY2MsJkJQKC0xMjgsJHRibCwkYWNjLDEpKTsJIyAxNQoJJnNobAkoJGFjYywyNCk7CQkJIyAxNQoJJm9yCSgiZWN4IiwkYWNjKTsJCQkjIDE1CgkmbW92ZAkoIm1tMCIsImVjeCIpOwkJCSMgdFswXSBjb2xsZWN0ZWQKCgkmbW92egkoJGFjYywmTEIoImVheCIpKTsJCSMgIDQKCSZtb3Z6CSgiZWN4IiwmQlAoLTEyOCwkdGJsLCRhY2MsMSkpOwkjICA0CgkmbW92ZAkoImVheCIsIm1tMiIpOwkJCSMgIDcsIDYsIDMsIDIKCSZtb3Z6CSgkYWNjLCZMQigiZWJ4IikpOwkJIyAxNAoJJm1vdnoJKCRhY2MsJkJQKC0xMjgsJHRibCwkYWNjLDEpKTsJIyAxNAoJJnNobAkoJGFjYywxNik7CQkJIyAxNAoJJm9yCSgiZWN4IiwkYWNjKTsJCQkjIDE0CgoJJm1vdmQJKCJlYngiLCJtbTYiKTsJCQkjIDEzLDEyLCA5LCA4CgkmbW92egkoJGFjYywmSEIoImVheCIpKTsJCSMgIDMKCSZtb3Z6CSgkYWNjLCZCUCgtMTI4LCR0YmwsJGFjYywxKSk7CSMgIDMKCSZzaGwJKCRhY2MsMjQpOwkJCSMgIDMKCSZvcgkoImVjeCIsJGFjYyk7CQkJIyAgMwoJJm1vdnoJKCRhY2MsJkhCKCJlYngiKSk7CQkjICA5CgkmbW92egkoJGFjYywmQlAoLTEyOCwkdGJsLCRhY2MsMSkpOwkjICA5Cgkmc2hsCSgkYWNjLDgpOwkJCSMgIDkKCSZvcgkoImVjeCIsJGFjYyk7CQkJIyAgOQoJJm1vdmQJKCJtbTEiLCJlY3giKTsJCQkjIHRbMV0gY29sbGVjdGVkCgoJJm1vdnoJKCRhY2MsJkxCKCJlYngiKSk7CQkjICA4CgkmbW92egkoImVjeCIsJkJQKC0xMjgsJHRibCwkYWNjLDEpKTsJIyAgOAoJJnNocgkoImVieCIsMTYpOwkJCSMgMTMsMTIKCSZtb3Z6CSgkYWNjLCZMQigiZWF4IikpOwkJIyAgMgoJJm1vdnoJKCRhY2MsJkJQKC0xMjgsJHRibCwkYWNjLDEpKTsJIyAgMgoJJnNobAkoJGFjYywxNik7CQkJIyAgMgoJJm9yCSgiZWN4IiwkYWNjKTsJCQkjICAyCgkmc2hyCSgiZWF4IiwxNik7CQkJIyAgNywgNgoKCSZwdW5wY2tsZHEJKCJtbTAiLCJtbTEiKTsJCSMgdFswLDFdIGNvbGxlY3RlZAoKCSZtb3Z6CSgkYWNjLCZIQigiZWF4IikpOwkJIyAgNwoJJm1vdnoJKCRhY2MsJkJQKC0xMjgsJHRibCwkYWNjLDEpKTsJIyAgNwoJJnNobAkoJGFjYywyNCk7CQkJIyAgNwoJJm9yCSgiZWN4IiwkYWNjKTsJCQkjICA3CgkmYW5kCSgiZWF4IiwweGZmKTsJCQkjICA2CgkmbW92egkoImVheCIsJkJQKC0xMjgsJHRibCwiZWF4IiwxKSk7CSMgIDYKCSZzaGwJKCJlYXgiLDE2KTsJCQkjICA2Cgkmb3IJKCJlZHgiLCJlYXgiKTsJCQkjICA2CgkmbW92egkoJGFjYywmSEIoImVieCIpKTsJCSMgMTMKCSZtb3Z6CSgkYWNjLCZCUCgtMTI4LCR0YmwsJGFjYywxKSk7CSMgMTMKCSZzaGwJKCRhY2MsOCk7CQkJIyAxMwoJJm9yCSgiZWN4IiwkYWNjKTsJCQkjIDEzCgkmbW92ZAkoIm1tNCIsImVjeCIpOwkJCSMgdFsyXSBjb2xsZWN0ZWQKCSZhbmQJKCJlYngiLDB4ZmYpOwkJCSMgMTIKCSZtb3Z6CSgiZWJ4IiwmQlAoLTEyOCwkdGJsLCJlYngiLDEpKTsJIyAxMgoJJm9yCSgiZWR4IiwiZWJ4Iik7CQkJIyAxMgoJJm1vdmQJKCJtbTUiLCJlZHgiKTsJCQkjIHRbM10gY29sbGVjdGVkCgoJJnB1bnBja2xkcQkoIm1tNCIsIm1tNSIpOwkJIyB0WzIsM10gY29sbGVjdGVkCn0KCgkJCQkJaWYgKCEkeDg2b25seSkgewomZnVuY3Rpb25fYmVnaW5fQigiX3NzZV9BRVNfZW5jcnlwdF9jb21wYWN0Iik7CgkmcHhvcgkoIm1tMCIsJlFXUCgwLCRrZXkpKTsJIyAgNywgNiwgNSwgNCwgMywgMiwgMSwgMAoJJnB4b3IJKCJtbTQiLCZRV1AoOCwka2V5KSk7CSMgMTUsMTQsMTMsMTIsMTEsMTAsIDksIDgKCgkjIG5vdGUgdGhhdCBjYWxsZXIgaXMgZXhwZWN0ZWQgdG8gYWxsb2NhdGUgc3RhY2sgZnJhbWUgZm9yIG1lIQoJJm1vdgkoJGFjYywmRFdQKDI0MCwka2V5KSk7CQkjIGxvYWQga2V5LT5yb3VuZHMKCSZsZWEJKCRhY2MsJkRXUCgtMiwkYWNjLCRhY2MpKTsKCSZsZWEJKCRhY2MsJkRXUCgwLCRrZXksJGFjYyw4KSk7CgkmbW92CSgkX19lbmQsJGFjYyk7CQkJIyBlbmQgb2Yga2V5IHNjaGVkdWxlCgoJJm1vdgkoJHMwLDB4MWIxYjFiMWIpOwkJIyBtYWdpYyBjb25zdGFudAoJJm1vdgkoJkRXUCg4LCJlc3AiKSwkczApOwoJJm1vdgkoJkRXUCgxMiwiZXNwIiksJHMwKTsKCgkjIHByZWZldGNoIFRlNAoJJm1vdgkoJHMwLCZEV1AoMC0xMjgsJHRibCkpOwoJJm1vdgkoJHMxLCZEV1AoMzItMTI4LCR0YmwpKTsKCSZtb3YJKCRzMiwmRFdQKDY0LTEyOCwkdGJsKSk7CgkmbW92CSgkczMsJkRXUCg5Ni0xMjgsJHRibCkpOwoJJm1vdgkoJHMwLCZEV1AoMTI4LTEyOCwkdGJsKSk7CgkmbW92CSgkczEsJkRXUCgxNjAtMTI4LCR0YmwpKTsKCSZtb3YJKCRzMiwmRFdQKDE5Mi0xMjgsJHRibCkpOwoJJm1vdgkoJHMzLCZEV1AoMjI0LTEyOCwkdGJsKSk7CgoJJnNldF9sYWJlbCgibG9vcCIsMTYpOwoJCSZzc2VfZW5jY29tcGFjdCgpOwoJCSZhZGQJKCRrZXksMTYpOwoJCSZjbXAJKCRrZXksJF9fZW5kKTsKCQkmamEJKCZsYWJlbCgib3V0IikpOwoKCQkmbW92cQkoIm1tMiIsJlFXUCg4LCJlc3AiKSk7CgkJJnB4b3IJKCJtbTMiLCJtbTMiKTsJCSZweG9yCSgibW03IiwibW03Iik7CgkJJm1vdnEJKCJtbTEiLCJtbTAiKTsJCSZtb3ZxCSgibW01IiwibW00Iik7CSMgcjAKCQkmcGNtcGd0YigibW0zIiwibW0wIik7CQkmcGNtcGd0YigibW03IiwibW00Iik7CgkJJnBhbmQJKCJtbTMiLCJtbTIiKTsJCSZwYW5kCSgibW03IiwibW0yIik7CgkJJnBzaHVmdwkoIm1tMiIsIm1tMCIsMHhiMSk7CSZwc2h1ZncJKCJtbTYiLCJtbTQiLDB4YjEpOyMgUk9UQVRFKHIwLDE2KQoJCSZwYWRkYgkoIm1tMCIsIm1tMCIpOwkJJnBhZGRiCSgibW00IiwibW00Iik7CgkJJnB4b3IJKCJtbTAiLCJtbTMiKTsJCSZweG9yCSgibW00IiwibW03Iik7CSMgPSByMgoJCSZwc2h1ZncJKCJtbTMiLCJtbTIiLDB4YjEpOwkmcHNodWZ3CSgibW03IiwibW02IiwweGIxKTsjIHIwCgkJJnB4b3IJKCJtbTEiLCJtbTAiKTsJCSZweG9yCSgibW01IiwibW00Iik7CSMgcjBecjIKCQkmcHhvcgkoIm1tMCIsIm1tMiIpOwkJJnB4b3IJKCJtbTQiLCJtbTYiKTsJIyBePSBST1RBVEUocjAsMTYpCgoJCSZtb3ZxCSgibW0yIiwibW0zIik7CQkmbW92cQkoIm1tNiIsIm1tNyIpOwoJCSZwc2xsZAkoIm1tMyIsOCk7CQkmcHNsbGQJKCJtbTciLDgpOwoJCSZwc3JsZAkoIm1tMiIsMjQpOwkJJnBzcmxkCSgibW02IiwyNCk7CgkJJnB4b3IJKCJtbTAiLCJtbTMiKTsJCSZweG9yCSgibW00IiwibW03Iik7CSMgXj0gcjA8PDgKCQkmcHhvcgkoIm1tMCIsIm1tMiIpOwkJJnB4b3IJKCJtbTQiLCJtbTYiKTsJIyBePSByMD4+MjQKCgkJJm1vdnEJKCJtbTMiLCJtbTEiKTsJCSZtb3ZxCSgibW03IiwibW01Iik7CgkJJm1vdnEJKCJtbTIiLCZRV1AoMCwka2V5KSk7CSZtb3ZxCSgibW02IiwmUVdQKDgsJGtleSkpOwoJCSZwc3JsZAkoIm1tMSIsOCk7CQkmcHNybGQJKCJtbTUiLDgpOwoJCSZtb3YJKCRzMCwmRFdQKDAtMTI4LCR0YmwpKTsKCQkmcHNsbGQJKCJtbTMiLDI0KTsJCSZwc2xsZAkoIm1tNyIsMjQpOwoJCSZtb3YJKCRzMSwmRFdQKDY0LTEyOCwkdGJsKSk7CgkJJnB4b3IJKCJtbTAiLCJtbTEiKTsJCSZweG9yCSgibW00IiwibW01Iik7CSMgXj0gKHIyXnIwKTw8OAoJCSZtb3YJKCRzMiwmRFdQKDEyOC0xMjgsJHRibCkpOwoJCSZweG9yCSgibW0wIiwibW0zIik7CQkmcHhvcgkoIm1tNCIsIm1tNyIpOwkjIF49IChyMl5yMCk+PjI0CgkJJm1vdgkoJHMzLCZEV1AoMTkyLTEyOCwkdGJsKSk7CgoJCSZweG9yCSgibW0wIiwibW0yIik7CQkmcHhvcgkoIm1tNCIsIm1tNiIpOwoJJmptcAkoJmxhYmVsKCJsb29wIikpOwoKCSZzZXRfbGFiZWwoIm91dCIsMTYpOwoJJnB4b3IJKCJtbTAiLCZRV1AoMCwka2V5KSk7CgkmcHhvcgkoIm1tNCIsJlFXUCg4LCRrZXkpKTsKCgkmcmV0CSgpOwomZnVuY3Rpb25fZW5kX0IoIl9zc2VfQUVTX2VuY3J5cHRfY29tcGFjdCIpOwoJCQkJCX0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBWYW5pbGxhIGJsb2NrIGZ1bmN0aW9uLgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgpzdWIgZW5jc3RlcCgpCnsgbXkgKCRpLCR0ZSxAcykgPSBAXzsKICBteSAkdG1wID0gJGtleTsKICBteSAkb3V0ID0gJGk9PTM/JHNbMF06JGFjYzsKCgkjIGxpbmVzIG1hcmtlZCB3aXRoICMlZT94W2ldIGRlbm90ZSAicmVvcmRlcmVkIiBpbnN0cnVjdGlvbnMuLi4KCWlmICgkaT09MykgIHsJJm1vdgkoJGtleSwkX19rZXkpOwkJCX0jIyVlZHgKCWVsc2UgICAgICAgIHsJJm1vdgkoJG91dCwkc1swXSk7CgkJCSZhbmQJKCRvdXQsMHhGRik7CQkJfQoJaWYgKCRpPT0xKSAgewkmc2hyCSgkc1swXSwxNik7CQkJfSMlZWJ4WzFdCglpZiAoJGk9PTIpICB7CSZzaHIJKCRzWzBdLDI0KTsJCQl9IyVlY3hbMl0KCQkJJm1vdgkoJG91dCwmRFdQKDAsJHRlLCRvdXQsOCkpOwoKCWlmICgkaT09MykgIHsJJHRtcD0kc1sxXTsJCQkJfSMjJWVheAoJCQkmbW92egkoJHRtcCwmSEIoJHNbMV0pKTsKCQkJJnhvcgkoJG91dCwmRFdQKDMsJHRlLCR0bXAsOCkpOwoKCWlmICgkaT09MykgIHsJJHRtcD0kc1syXTsgJm1vdiAoJHNbMV0sJF9fczApOwkJfSMjJWVieAoJZWxzZSAgICAgICAgewkmbW92CSgkdG1wLCRzWzJdKTsKCQkJJnNocgkoJHRtcCwxNik7CQkJfQoJaWYgKCRpPT0yKSAgewkmYW5kCSgkc1sxXSwweEZGKTsJCQl9IyVlZHhbMl0KCQkJJmFuZAkoJHRtcCwweEZGKTsKCQkJJnhvcgkoJG91dCwmRFdQKDIsJHRlLCR0bXAsOCkpOwoKCWlmICgkaT09MykgIHsJJHRtcD0kc1szXTsgJm1vdiAoJHNbMl0sJF9fczEpOwkJfSMjJWVjeAoJZWxzaWYoJGk9PTIpewkmbW92egkoJHRtcCwmSEIoJHNbM10pKTsJCX0jJWVieFsyXQoJZWxzZSAgICAgICAgewkmbW92CSgkdG1wLCRzWzNdKTsgCgkJCSZzaHIJKCR0bXAsMjQpCQkJfQoJCQkmeG9yCSgkb3V0LCZEV1AoMSwkdGUsJHRtcCw4KSk7CglpZiAoJGk8MikgICB7CSZtb3YJKCZEV1AoNCs0KiRpLCJlc3AiKSwkb3V0KTsJfQoJaWYgKCRpPT0zKSAgewkmbW92CSgkc1szXSwkYWNjKTsJCQl9CgkJCSZjb21tZW50KCk7Cn0KCnN1YiBlbmNsYXN0KCkKeyBteSAoJGksJHRlLEBzKT1AXzsKICBteSAkdG1wID0gJGtleTsKICBteSAkb3V0ID0gJGk9PTM/JHNbMF06JGFjYzsKCglpZiAoJGk9PTMpICB7CSZtb3YJKCRrZXksJF9fa2V5KTsJCQl9IyMlZWR4CgllbHNlICAgICAgICB7CSZtb3YJKCRvdXQsJHNbMF0pOwkJCX0KCQkJJmFuZAkoJG91dCwweEZGKTsKCWlmICgkaT09MSkgIHsJJnNocgkoJHNbMF0sMTYpOwkJCX0jJWVieFsxXQoJaWYgKCRpPT0yKSAgewkmc2hyCSgkc1swXSwyNCk7CQkJfSMlZWN4WzJdCgkJCSZtb3YJKCRvdXQsJkRXUCgyLCR0ZSwkb3V0LDgpKTsKCQkJJmFuZAkoJG91dCwweDAwMDAwMGZmKTsKCglpZiAoJGk9PTMpICB7CSR0bXA9JHNbMV07CQkJCX0jIyVlYXgKCQkJJm1vdnoJKCR0bXAsJkhCKCRzWzFdKSk7CgkJCSZtb3YJKCR0bXAsJkRXUCgwLCR0ZSwkdG1wLDgpKTsKCQkJJmFuZAkoJHRtcCwweDAwMDBmZjAwKTsKCQkJJnhvcgkoJG91dCwkdG1wKTsKCglpZiAoJGk9PTMpICB7CSR0bXA9JHNbMl07ICZtb3YgKCRzWzFdLCRfX3MwKTsJCX0jIyVlYngKCWVsc2UgICAgICAgIHsJJm1vdgkoJHRtcCwkc1syXSk7CgkJCSZzaHIJKCR0bXAsMTYpOwkJCX0KCWlmICgkaT09MikgIHsJJmFuZAkoJHNbMV0sMHhGRik7CQkJfSMlZWR4WzJdCgkJCSZhbmQJKCR0bXAsMHhGRik7CgkJCSZtb3YJKCR0bXAsJkRXUCgwLCR0ZSwkdG1wLDgpKTsKCQkJJmFuZAkoJHRtcCwweDAwZmYwMDAwKTsKCQkJJnhvcgkoJG91dCwkdG1wKTsKCglpZiAoJGk9PTMpICB7CSR0bXA9JHNbM107ICZtb3YgKCRzWzJdLCRfX3MxKTsJCX0jIyVlY3gKCWVsc2lmKCRpPT0yKXsJJm1vdnoJKCR0bXAsJkhCKCRzWzNdKSk7CQl9IyVlYnhbMl0KCWVsc2UgICAgICAgIHsJJm1vdgkoJHRtcCwkc1szXSk7CgkJCSZzaHIJKCR0bXAsMjQpOwkJCX0KCQkJJm1vdgkoJHRtcCwmRFdQKDIsJHRlLCR0bXAsOCkpOwoJCQkmYW5kCSgkdG1wLDB4ZmYwMDAwMDApOwoJCQkmeG9yCSgkb3V0LCR0bXApOwoJaWYgKCRpPDIpICAgewkmbW92CSgmRFdQKDQrNCokaSwiZXNwIiksJG91dCk7CX0KCWlmICgkaT09MykgIHsJJm1vdgkoJHNbM10sJGFjYyk7CQkJfQp9CgomZnVuY3Rpb25fYmVnaW5fQigiX3g4Nl9BRVNfZW5jcnlwdCIpOwoJaWYgKCR2ZXJ0aWNhbF9zcGluKSB7CgkJIyBJIG5lZWQgaGlnaCBwYXJ0cyBvZiB2b2xhdGlsZSByZWdpc3RlcnMgdG8gYmUgYWNjZXNzaWJsZS4uLgoJCSZleGNoCSgkczE9ImVkaSIsJGtleT0iZWJ4Iik7CgkJJm1vdgkoJHMyPSJlc2kiLCRhY2M9ImVjeCIpOwoJfQoKCSMgbm90ZSB0aGF0IGNhbGxlciBpcyBleHBlY3RlZCB0byBhbGxvY2F0ZSBzdGFjayBmcmFtZSBmb3IgbWUhCgkmbW92CSgkX19rZXksJGtleSk7CQkJIyBzYXZlIGtleQoKCSZ4b3IJKCRzMCwmRFdQKDAsJGtleSkpOwkJIyB4b3Igd2l0aCBrZXkKCSZ4b3IJKCRzMSwmRFdQKDQsJGtleSkpOwoJJnhvcgkoJHMyLCZEV1AoOCwka2V5KSk7CgkmeG9yCSgkczMsJkRXUCgxMiwka2V5KSk7CgoJJm1vdgkoJGFjYywmRFdQKDI0MCwka2V5KSk7CQkjIGxvYWQga2V5LT5yb3VuZHMKCglpZiAoJHNtYWxsX2Zvb3RwcmludCkgewoJICAgICZsZWEJKCRhY2MsJkRXUCgtMiwkYWNjLCRhY2MpKTsKCSAgICAmbGVhCSgkYWNjLCZEV1AoMCwka2V5LCRhY2MsOCkpOwoJICAgICZtb3YJKCRfX2VuZCwkYWNjKTsJCSMgZW5kIG9mIGtleSBzY2hlZHVsZQoKCSAgICAmc2V0X2xhYmVsKCJsb29wIiwxNik7CgkJaWYgKCR2ZXJ0aWNhbF9zcGluKSB7CgkJICAgICZlbmN2ZXJ0KCR0YmwsJHMwLCRzMSwkczIsJHMzKTsKCQl9IGVsc2UgewoJCSAgICAmZW5jc3RlcCgwLCR0YmwsJHMwLCRzMSwkczIsJHMzKTsKCQkgICAgJmVuY3N0ZXAoMSwkdGJsLCRzMSwkczIsJHMzLCRzMCk7CgkJICAgICZlbmNzdGVwKDIsJHRibCwkczIsJHMzLCRzMCwkczEpOwoJCSAgICAmZW5jc3RlcCgzLCR0YmwsJHMzLCRzMCwkczEsJHMyKTsKCQl9CgkJJmFkZAkoJGtleSwxNik7CQkjIGFkdmFuY2UgcmRfa2V5CgkJJnhvcgkoJHMwLCZEV1AoMCwka2V5KSk7CgkJJnhvcgkoJHMxLCZEV1AoNCwka2V5KSk7CgkJJnhvcgkoJHMyLCZEV1AoOCwka2V5KSk7CgkJJnhvcgkoJHMzLCZEV1AoMTIsJGtleSkpOwoJICAgICZjbXAJKCRrZXksJF9fZW5kKTsKCSAgICAmbW92CSgkX19rZXksJGtleSk7CgkgICAgJmpiCQkoJmxhYmVsKCJsb29wIikpOwoJfQoJZWxzZSB7CgkgICAgJmNtcAkoJGFjYywxMCk7CgkgICAgJmpsZQkoJmxhYmVsKCIxMHJvdW5kcyIpKTsKCSAgICAmY21wCSgkYWNjLDEyKTsKCSAgICAmamxlCSgmbGFiZWwoIjEycm91bmRzIikpOwoKCSZzZXRfbGFiZWwoIjE0cm91bmRzIiw0KTsKCSAgICBmb3IgKCRpPTE7JGk8MzskaSsrKSB7CgkJaWYgKCR2ZXJ0aWNhbF9zcGluKSB7CgkJICAgICZlbmN2ZXJ0KCR0YmwsJHMwLCRzMSwkczIsJHMzKTsKCQl9IGVsc2UgewoJCSAgICAmZW5jc3RlcCgwLCR0YmwsJHMwLCRzMSwkczIsJHMzKTsKCQkgICAgJmVuY3N0ZXAoMSwkdGJsLCRzMSwkczIsJHMzLCRzMCk7CgkJICAgICZlbmNzdGVwKDIsJHRibCwkczIsJHMzLCRzMCwkczEpOwoJCSAgICAmZW5jc3RlcCgzLCR0YmwsJHMzLCRzMCwkczEsJHMyKTsKCQl9CgkJJnhvcgkoJHMwLCZEV1AoMTYqJGkrMCwka2V5KSk7CgkJJnhvcgkoJHMxLCZEV1AoMTYqJGkrNCwka2V5KSk7CgkJJnhvcgkoJHMyLCZEV1AoMTYqJGkrOCwka2V5KSk7CgkJJnhvcgkoJHMzLCZEV1AoMTYqJGkrMTIsJGtleSkpOwoJICAgIH0KCSAgICAmYWRkCSgka2V5LDMyKTsKCSAgICAmbW92CSgkX19rZXksJGtleSk7CQkjIGFkdmFuY2UgcmRfa2V5Cgkmc2V0X2xhYmVsKCIxMnJvdW5kcyIsNCk7CgkgICAgZm9yICgkaT0xOyRpPDM7JGkrKykgewoJCWlmICgkdmVydGljYWxfc3BpbikgewoJCSAgICAmZW5jdmVydCgkdGJsLCRzMCwkczEsJHMyLCRzMyk7CgkJfSBlbHNlIHsKCQkgICAgJmVuY3N0ZXAoMCwkdGJsLCRzMCwkczEsJHMyLCRzMyk7CgkJICAgICZlbmNzdGVwKDEsJHRibCwkczEsJHMyLCRzMywkczApOwoJCSAgICAmZW5jc3RlcCgyLCR0YmwsJHMyLCRzMywkczAsJHMxKTsKCQkgICAgJmVuY3N0ZXAoMywkdGJsLCRzMywkczAsJHMxLCRzMik7CgkJfQoJCSZ4b3IJKCRzMCwmRFdQKDE2KiRpKzAsJGtleSkpOwoJCSZ4b3IJKCRzMSwmRFdQKDE2KiRpKzQsJGtleSkpOwoJCSZ4b3IJKCRzMiwmRFdQKDE2KiRpKzgsJGtleSkpOwoJCSZ4b3IJKCRzMywmRFdQKDE2KiRpKzEyLCRrZXkpKTsKCSAgICB9CgkgICAgJmFkZAkoJGtleSwzMik7CgkgICAgJm1vdgkoJF9fa2V5LCRrZXkpOwkJIyBhZHZhbmNlIHJkX2tleQoJJnNldF9sYWJlbCgiMTByb3VuZHMiLDQpOwoJICAgIGZvciAoJGk9MTskaTwxMDskaSsrKSB7CgkJaWYgKCR2ZXJ0aWNhbF9zcGluKSB7CgkJICAgICZlbmN2ZXJ0KCR0YmwsJHMwLCRzMSwkczIsJHMzKTsKCQl9IGVsc2UgewoJCSAgICAmZW5jc3RlcCgwLCR0YmwsJHMwLCRzMSwkczIsJHMzKTsKCQkgICAgJmVuY3N0ZXAoMSwkdGJsLCRzMSwkczIsJHMzLCRzMCk7CgkJICAgICZlbmNzdGVwKDIsJHRibCwkczIsJHMzLCRzMCwkczEpOwoJCSAgICAmZW5jc3RlcCgzLCR0YmwsJHMzLCRzMCwkczEsJHMyKTsKCQl9CgkJJnhvcgkoJHMwLCZEV1AoMTYqJGkrMCwka2V5KSk7CgkJJnhvcgkoJHMxLCZEV1AoMTYqJGkrNCwka2V5KSk7CgkJJnhvcgkoJHMyLCZEV1AoMTYqJGkrOCwka2V5KSk7CgkJJnhvcgkoJHMzLCZEV1AoMTYqJGkrMTIsJGtleSkpOwoJICAgIH0KCX0KCglpZiAoJHZlcnRpY2FsX3NwaW4pIHsKCSAgICAjICJyZWluY2FybmF0ZSIgc29tZSByZWdpc3RlcnMgZm9yICJob3Jpem9udGFsIiBzcGluLi4uCgkgICAgJm1vdgkoJHMxPSJlYngiLCRrZXk9ImVkaSIpOwoJICAgICZtb3YJKCRzMj0iZWN4IiwkYWNjPSJlc2kiKTsKCX0KCSZlbmNsYXN0KDAsJHRibCwkczAsJHMxLCRzMiwkczMpOwoJJmVuY2xhc3QoMSwkdGJsLCRzMSwkczIsJHMzLCRzMCk7CgkmZW5jbGFzdCgyLCR0YmwsJHMyLCRzMywkczAsJHMxKTsKCSZlbmNsYXN0KDMsJHRibCwkczMsJHMwLCRzMSwkczIpOwoKCSZhZGQJKCRrZXksJHNtYWxsX2Zvb3RwcmludD8xNjoxNjApOwoJJnhvcgkoJHMwLCZEV1AoMCwka2V5KSk7CgkmeG9yCSgkczEsJkRXUCg0LCRrZXkpKTsKCSZ4b3IJKCRzMiwmRFdQKDgsJGtleSkpOwoJJnhvcgkoJHMzLCZEV1AoMTIsJGtleSkpOwoKCSZyZXQJKCk7Cgomc2V0X2xhYmVsKCJBRVNfVGUiLDY0KTsJIyBZZXMhIEkga2VlcCBpdCBpbiB0aGUgY29kZSBzZWdtZW50IQoJJl9kYXRhX3dvcmQoMHhhNTYzNjNjNiwgMHg4NDdjN2NmOCwgMHg5OTc3NzdlZSwgMHg4ZDdiN2JmNik7CgkmX2RhdGFfd29yZCgweDBkZjJmMmZmLCAweGJkNmI2YmQ2LCAweGIxNmY2ZmRlLCAweDU0YzVjNTkxKTsKCSZfZGF0YV93b3JkKDB4NTAzMDMwNjAsIDB4MDMwMTAxMDIsIDB4YTk2NzY3Y2UsIDB4N2QyYjJiNTYpOwoJJl9kYXRhX3dvcmQoMHgxOWZlZmVlNywgMHg2MmQ3ZDdiNSwgMHhlNmFiYWI0ZCwgMHg5YTc2NzZlYyk7CgkmX2RhdGFfd29yZCgweDQ1Y2FjYThmLCAweDlkODI4MjFmLCAweDQwYzljOTg5LCAweDg3N2Q3ZGZhKTsKCSZfZGF0YV93b3JkKDB4MTVmYWZhZWYsIDB4ZWI1OTU5YjIsIDB4Yzk0NzQ3OGUsIDB4MGJmMGYwZmIpOwoJJl9kYXRhX3dvcmQoMHhlY2FkYWQ0MSwgMHg2N2Q0ZDRiMywgMHhmZGEyYTI1ZiwgMHhlYWFmYWY0NSk7CgkmX2RhdGFfd29yZCgweGJmOWM5YzIzLCAweGY3YTRhNDUzLCAweDk2NzI3MmU0LCAweDViYzBjMDliKTsKCSZfZGF0YV93b3JkKDB4YzJiN2I3NzUsIDB4MWNmZGZkZTEsIDB4YWU5MzkzM2QsIDB4NmEyNjI2NGMpOwoJJl9kYXRhX3dvcmQoMHg1YTM2MzY2YywgMHg0MTNmM2Y3ZSwgMHgwMmY3ZjdmNSwgMHg0ZmNjY2M4Myk7CgkmX2RhdGFfd29yZCgweDVjMzQzNDY4LCAweGY0YTVhNTUxLCAweDM0ZTVlNWQxLCAweDA4ZjFmMWY5KTsKCSZfZGF0YV93b3JkKDB4OTM3MTcxZTIsIDB4NzNkOGQ4YWIsIDB4NTMzMTMxNjIsIDB4M2YxNTE1MmEpOwoJJl9kYXRhX3dvcmQoMHgwYzA0MDQwOCwgMHg1MmM3Yzc5NSwgMHg2NTIzMjM0NiwgMHg1ZWMzYzM5ZCk7CgkmX2RhdGFfd29yZCgweDI4MTgxODMwLCAweGExOTY5NjM3LCAweDBmMDUwNTBhLCAweGI1OWE5YTJmKTsKCSZfZGF0YV93b3JkKDB4MDkwNzA3MGUsIDB4MzYxMjEyMjQsIDB4OWI4MDgwMWIsIDB4M2RlMmUyZGYpOwoJJl9kYXRhX3dvcmQoMHgyNmViZWJjZCwgMHg2OTI3Mjc0ZSwgMHhjZGIyYjI3ZiwgMHg5Zjc1NzVlYSk7CgkmX2RhdGFfd29yZCgweDFiMDkwOTEyLCAweDllODM4MzFkLCAweDc0MmMyYzU4LCAweDJlMWExYTM0KTsKCSZfZGF0YV93b3JkKDB4MmQxYjFiMzYsIDB4YjI2ZTZlZGMsIDB4ZWU1YTVhYjQsIDB4ZmJhMGEwNWIpOwoJJl9kYXRhX3dvcmQoMHhmNjUyNTJhNCwgMHg0ZDNiM2I3NiwgMHg2MWQ2ZDZiNywgMHhjZWIzYjM3ZCk7CgkmX2RhdGFfd29yZCgweDdiMjkyOTUyLCAweDNlZTNlM2RkLCAweDcxMmYyZjVlLCAweDk3ODQ4NDEzKTsKCSZfZGF0YV93b3JkKDB4ZjU1MzUzYTYsIDB4NjhkMWQxYjksIDB4MDAwMDAwMDAsIDB4MmNlZGVkYzEpOwoJJl9kYXRhX3dvcmQoMHg2MDIwMjA0MCwgMHgxZmZjZmNlMywgMHhjOGIxYjE3OSwgMHhlZDViNWJiNik7CgkmX2RhdGFfd29yZCgweGJlNmE2YWQ0LCAweDQ2Y2JjYjhkLCAweGQ5YmViZTY3LCAweDRiMzkzOTcyKTsKCSZfZGF0YV93b3JkKDB4ZGU0YTRhOTQsIDB4ZDQ0YzRjOTgsIDB4ZTg1ODU4YjAsIDB4NGFjZmNmODUpOwoJJl9kYXRhX3dvcmQoMHg2YmQwZDBiYiwgMHgyYWVmZWZjNSwgMHhlNWFhYWE0ZiwgMHgxNmZiZmJlZCk7CgkmX2RhdGFfd29yZCgweGM1NDM0Mzg2LCAweGQ3NGQ0ZDlhLCAweDU1MzMzMzY2LCAweDk0ODU4NTExKTsKCSZfZGF0YV93b3JkKDB4Y2Y0NTQ1OGEsIDB4MTBmOWY5ZTksIDB4MDYwMjAyMDQsIDB4ODE3ZjdmZmUpOwoJJl9kYXRhX3dvcmQoMHhmMDUwNTBhMCwgMHg0NDNjM2M3OCwgMHhiYTlmOWYyNSwgMHhlM2E4YTg0Yik7CgkmX2RhdGFfd29yZCgweGYzNTE1MWEyLCAweGZlYTNhMzVkLCAweGMwNDA0MDgwLCAweDhhOGY4ZjA1KTsKCSZfZGF0YV93b3JkKDB4YWQ5MjkyM2YsIDB4YmM5ZDlkMjEsIDB4NDgzODM4NzAsIDB4MDRmNWY1ZjEpOwoJJl9kYXRhX3dvcmQoMHhkZmJjYmM2MywgMHhjMWI2YjY3NywgMHg3NWRhZGFhZiwgMHg2MzIxMjE0Mik7CgkmX2RhdGFfd29yZCgweDMwMTAxMDIwLCAweDFhZmZmZmU1LCAweDBlZjNmM2ZkLCAweDZkZDJkMmJmKTsKCSZfZGF0YV93b3JkKDB4NGNjZGNkODEsIDB4MTQwYzBjMTgsIDB4MzUxMzEzMjYsIDB4MmZlY2VjYzMpOwoJJl9kYXRhX3dvcmQoMHhlMTVmNWZiZSwgMHhhMjk3OTczNSwgMHhjYzQ0NDQ4OCwgMHgzOTE3MTcyZSk7CgkmX2RhdGFfd29yZCgweDU3YzRjNDkzLCAweGYyYTdhNzU1LCAweDgyN2U3ZWZjLCAweDQ3M2QzZDdhKTsKCSZfZGF0YV93b3JkKDB4YWM2NDY0YzgsIDB4ZTc1ZDVkYmEsIDB4MmIxOTE5MzIsIDB4OTU3MzczZTYpOwoJJl9kYXRhX3dvcmQoMHhhMDYwNjBjMCwgMHg5ODgxODExOSwgMHhkMTRmNGY5ZSwgMHg3ZmRjZGNhMyk7CgkmX2RhdGFfd29yZCgweDY2MjIyMjQ0LCAweDdlMmEyYTU0LCAweGFiOTA5MDNiLCAweDgzODg4ODBiKTsKCSZfZGF0YV93b3JkKDB4Y2E0NjQ2OGMsIDB4MjllZWVlYzcsIDB4ZDNiOGI4NmIsIDB4M2MxNDE0MjgpOwoJJl9kYXRhX3dvcmQoMHg3OWRlZGVhNywgMHhlMjVlNWViYywgMHgxZDBiMGIxNiwgMHg3NmRiZGJhZCk7CgkmX2RhdGFfd29yZCgweDNiZTBlMGRiLCAweDU2MzIzMjY0LCAweDRlM2EzYTc0LCAweDFlMGEwYTE0KTsKCSZfZGF0YV93b3JkKDB4ZGI0OTQ5OTIsIDB4MGEwNjA2MGMsIDB4NmMyNDI0NDgsIDB4ZTQ1YzVjYjgpOwoJJl9kYXRhX3dvcmQoMHg1ZGMyYzI5ZiwgMHg2ZWQzZDNiZCwgMHhlZmFjYWM0MywgMHhhNjYyNjJjNCk7CgkmX2RhdGFfd29yZCgweGE4OTE5MTM5LCAweGE0OTU5NTMxLCAweDM3ZTRlNGQzLCAweDhiNzk3OWYyKTsKCSZfZGF0YV93b3JkKDB4MzJlN2U3ZDUsIDB4NDNjOGM4OGIsIDB4NTkzNzM3NmUsIDB4Yjc2ZDZkZGEpOwoJJl9kYXRhX3dvcmQoMHg4YzhkOGQwMSwgMHg2NGQ1ZDViMSwgMHhkMjRlNGU5YywgMHhlMGE5YTk0OSk7CgkmX2RhdGFfd29yZCgweGI0NmM2Y2Q4LCAweGZhNTY1NmFjLCAweDA3ZjRmNGYzLCAweDI1ZWFlYWNmKTsKCSZfZGF0YV93b3JkKDB4YWY2NTY1Y2EsIDB4OGU3YTdhZjQsIDB4ZTlhZWFlNDcsIDB4MTgwODA4MTApOwoJJl9kYXRhX3dvcmQoMHhkNWJhYmE2ZiwgMHg4ODc4NzhmMCwgMHg2ZjI1MjU0YSwgMHg3MjJlMmU1Yyk7CgkmX2RhdGFfd29yZCgweDI0MWMxYzM4LCAweGYxYTZhNjU3LCAweGM3YjRiNDczLCAweDUxYzZjNjk3KTsKCSZfZGF0YV93b3JkKDB4MjNlOGU4Y2IsIDB4N2NkZGRkYTEsIDB4OWM3NDc0ZTgsIDB4MjExZjFmM2UpOwoJJl9kYXRhX3dvcmQoMHhkZDRiNGI5NiwgMHhkY2JkYmQ2MSwgMHg4NjhiOGIwZCwgMHg4NThhOGEwZik7CgkmX2RhdGFfd29yZCgweDkwNzA3MGUwLCAweDQyM2UzZTdjLCAweGM0YjViNTcxLCAweGFhNjY2NmNjKTsKCSZfZGF0YV93b3JkKDB4ZDg0ODQ4OTAsIDB4MDUwMzAzMDYsIDB4MDFmNmY2ZjcsIDB4MTIwZTBlMWMpOwoJJl9kYXRhX3dvcmQoMHhhMzYxNjFjMiwgMHg1ZjM1MzU2YSwgMHhmOTU3NTdhZSwgMHhkMGI5Yjk2OSk7CgkmX2RhdGFfd29yZCgweDkxODY4NjE3LCAweDU4YzFjMTk5LCAweDI3MWQxZDNhLCAweGI5OWU5ZTI3KTsKCSZfZGF0YV93b3JkKDB4MzhlMWUxZDksIDB4MTNmOGY4ZWIsIDB4YjM5ODk4MmIsIDB4MzMxMTExMjIpOwoJJl9kYXRhX3dvcmQoMHhiYjY5NjlkMiwgMHg3MGQ5ZDlhOSwgMHg4OThlOGUwNywgMHhhNzk0OTQzMyk7CgkmX2RhdGFfd29yZCgweGI2OWI5YjJkLCAweDIyMWUxZTNjLCAweDkyODc4NzE1LCAweDIwZTllOWM5KTsKCSZfZGF0YV93b3JkKDB4NDljZWNlODcsIDB4ZmY1NTU1YWEsIDB4NzgyODI4NTAsIDB4N2FkZmRmYTUpOwoJJl9kYXRhX3dvcmQoMHg4ZjhjOGMwMywgMHhmOGExYTE1OSwgMHg4MDg5ODkwOSwgMHgxNzBkMGQxYSk7CgkmX2RhdGFfd29yZCgweGRhYmZiZjY1LCAweDMxZTZlNmQ3LCAweGM2NDI0Mjg0LCAweGI4Njg2OGQwKTsKCSZfZGF0YV93b3JkKDB4YzM0MTQxODIsIDB4YjA5OTk5MjksIDB4NzcyZDJkNWEsIDB4MTEwZjBmMWUpOwoJJl9kYXRhX3dvcmQoMHhjYmIwYjA3YiwgMHhmYzU0NTRhOCwgMHhkNmJiYmI2ZCwgMHgzYTE2MTYyYyk7CgojVGU0CSMgZm91ciBjb3BpZXMgb2YgVGU0IHRvIGNob29zZSBmcm9tIHRvIGF2b2lkIEwxIGFsaWFzaW5nCgkmZGF0YV9ieXRlKDB4NjMsIDB4N2MsIDB4NzcsIDB4N2IsIDB4ZjIsIDB4NmIsIDB4NmYsIDB4YzUpOwoJJmRhdGFfYnl0ZSgweDMwLCAweDAxLCAweDY3LCAweDJiLCAweGZlLCAweGQ3LCAweGFiLCAweDc2KTsKCSZkYXRhX2J5dGUoMHhjYSwgMHg4MiwgMHhjOSwgMHg3ZCwgMHhmYSwgMHg1OSwgMHg0NywgMHhmMCk7CgkmZGF0YV9ieXRlKDB4YWQsIDB4ZDQsIDB4YTIsIDB4YWYsIDB4OWMsIDB4YTQsIDB4NzIsIDB4YzApOwoJJmRhdGFfYnl0ZSgweGI3LCAweGZkLCAweDkzLCAweDI2LCAweDM2LCAweDNmLCAweGY3LCAweGNjKTsKCSZkYXRhX2J5dGUoMHgzNCwgMHhhNSwgMHhlNSwgMHhmMSwgMHg3MSwgMHhkOCwgMHgzMSwgMHgxNSk7CgkmZGF0YV9ieXRlKDB4MDQsIDB4YzcsIDB4MjMsIDB4YzMsIDB4MTgsIDB4OTYsIDB4MDUsIDB4OWEpOwoJJmRhdGFfYnl0ZSgweDA3LCAweDEyLCAweDgwLCAweGUyLCAweGViLCAweDI3LCAweGIyLCAweDc1KTsKCSZkYXRhX2J5dGUoMHgwOSwgMHg4MywgMHgyYywgMHgxYSwgMHgxYiwgMHg2ZSwgMHg1YSwgMHhhMCk7CgkmZGF0YV9ieXRlKDB4NTIsIDB4M2IsIDB4ZDYsIDB4YjMsIDB4MjksIDB4ZTMsIDB4MmYsIDB4ODQpOwoJJmRhdGFfYnl0ZSgweDUzLCAweGQxLCAweDAwLCAweGVkLCAweDIwLCAweGZjLCAweGIxLCAweDViKTsKCSZkYXRhX2J5dGUoMHg2YSwgMHhjYiwgMHhiZSwgMHgzOSwgMHg0YSwgMHg0YywgMHg1OCwgMHhjZik7CgkmZGF0YV9ieXRlKDB4ZDAsIDB4ZWYsIDB4YWEsIDB4ZmIsIDB4NDMsIDB4NGQsIDB4MzMsIDB4ODUpOwoJJmRhdGFfYnl0ZSgweDQ1LCAweGY5LCAweDAyLCAweDdmLCAweDUwLCAweDNjLCAweDlmLCAweGE4KTsKCSZkYXRhX2J5dGUoMHg1MSwgMHhhMywgMHg0MCwgMHg4ZiwgMHg5MiwgMHg5ZCwgMHgzOCwgMHhmNSk7CgkmZGF0YV9ieXRlKDB4YmMsIDB4YjYsIDB4ZGEsIDB4MjEsIDB4MTAsIDB4ZmYsIDB4ZjMsIDB4ZDIpOwoJJmRhdGFfYnl0ZSgweGNkLCAweDBjLCAweDEzLCAweGVjLCAweDVmLCAweDk3LCAweDQ0LCAweDE3KTsKCSZkYXRhX2J5dGUoMHhjNCwgMHhhNywgMHg3ZSwgMHgzZCwgMHg2NCwgMHg1ZCwgMHgxOSwgMHg3Myk7CgkmZGF0YV9ieXRlKDB4NjAsIDB4ODEsIDB4NGYsIDB4ZGMsIDB4MjIsIDB4MmEsIDB4OTAsIDB4ODgpOwoJJmRhdGFfYnl0ZSgweDQ2LCAweGVlLCAweGI4LCAweDE0LCAweGRlLCAweDVlLCAweDBiLCAweGRiKTsKCSZkYXRhX2J5dGUoMHhlMCwgMHgzMiwgMHgzYSwgMHgwYSwgMHg0OSwgMHgwNiwgMHgyNCwgMHg1Yyk7CgkmZGF0YV9ieXRlKDB4YzIsIDB4ZDMsIDB4YWMsIDB4NjIsIDB4OTEsIDB4OTUsIDB4ZTQsIDB4NzkpOwoJJmRhdGFfYnl0ZSgweGU3LCAweGM4LCAweDM3LCAweDZkLCAweDhkLCAweGQ1LCAweDRlLCAweGE5KTsKCSZkYXRhX2J5dGUoMHg2YywgMHg1NiwgMHhmNCwgMHhlYSwgMHg2NSwgMHg3YSwgMHhhZSwgMHgwOCk7CgkmZGF0YV9ieXRlKDB4YmEsIDB4NzgsIDB4MjUsIDB4MmUsIDB4MWMsIDB4YTYsIDB4YjQsIDB4YzYpOwoJJmRhdGFfYnl0ZSgweGU4LCAweGRkLCAweDc0LCAweDFmLCAweDRiLCAweGJkLCAweDhiLCAweDhhKTsKCSZkYXRhX2J5dGUoMHg3MCwgMHgzZSwgMHhiNSwgMHg2NiwgMHg0OCwgMHgwMywgMHhmNiwgMHgwZSk7CgkmZGF0YV9ieXRlKDB4NjEsIDB4MzUsIDB4NTcsIDB4YjksIDB4ODYsIDB4YzEsIDB4MWQsIDB4OWUpOwoJJmRhdGFfYnl0ZSgweGUxLCAweGY4LCAweDk4LCAweDExLCAweDY5LCAweGQ5LCAweDhlLCAweDk0KTsKCSZkYXRhX2J5dGUoMHg5YiwgMHgxZSwgMHg4NywgMHhlOSwgMHhjZSwgMHg1NSwgMHgyOCwgMHhkZik7CgkmZGF0YV9ieXRlKDB4OGMsIDB4YTEsIDB4ODksIDB4MGQsIDB4YmYsIDB4ZTYsIDB4NDIsIDB4NjgpOwoJJmRhdGFfYnl0ZSgweDQxLCAweDk5LCAweDJkLCAweDBmLCAweGIwLCAweDU0LCAweGJiLCAweDE2KTsKCgkmZGF0YV9ieXRlKDB4NjMsIDB4N2MsIDB4NzcsIDB4N2IsIDB4ZjIsIDB4NmIsIDB4NmYsIDB4YzUpOwoJJmRhdGFfYnl0ZSgweDMwLCAweDAxLCAweDY3LCAweDJiLCAweGZlLCAweGQ3LCAweGFiLCAweDc2KTsKCSZkYXRhX2J5dGUoMHhjYSwgMHg4MiwgMHhjOSwgMHg3ZCwgMHhmYSwgMHg1OSwgMHg0NywgMHhmMCk7CgkmZGF0YV9ieXRlKDB4YWQsIDB4ZDQsIDB4YTIsIDB4YWYsIDB4OWMsIDB4YTQsIDB4NzIsIDB4YzApOwoJJmRhdGFfYnl0ZSgweGI3LCAweGZkLCAweDkzLCAweDI2LCAweDM2LCAweDNmLCAweGY3LCAweGNjKTsKCSZkYXRhX2J5dGUoMHgzNCwgMHhhNSwgMHhlNSwgMHhmMSwgMHg3MSwgMHhkOCwgMHgzMSwgMHgxNSk7CgkmZGF0YV9ieXRlKDB4MDQsIDB4YzcsIDB4MjMsIDB4YzMsIDB4MTgsIDB4OTYsIDB4MDUsIDB4OWEpOwoJJmRhdGFfYnl0ZSgweDA3LCAweDEyLCAweDgwLCAweGUyLCAweGViLCAweDI3LCAweGIyLCAweDc1KTsKCSZkYXRhX2J5dGUoMHgwOSwgMHg4MywgMHgyYywgMHgxYSwgMHgxYiwgMHg2ZSwgMHg1YSwgMHhhMCk7CgkmZGF0YV9ieXRlKDB4NTIsIDB4M2IsIDB4ZDYsIDB4YjMsIDB4MjksIDB4ZTMsIDB4MmYsIDB4ODQpOwoJJmRhdGFfYnl0ZSgweDUzLCAweGQxLCAweDAwLCAweGVkLCAweDIwLCAweGZjLCAweGIxLCAweDViKTsKCSZkYXRhX2J5dGUoMHg2YSwgMHhjYiwgMHhiZSwgMHgzOSwgMHg0YSwgMHg0YywgMHg1OCwgMHhjZik7CgkmZGF0YV9ieXRlKDB4ZDAsIDB4ZWYsIDB4YWEsIDB4ZmIsIDB4NDMsIDB4NGQsIDB4MzMsIDB4ODUpOwoJJmRhdGFfYnl0ZSgweDQ1LCAweGY5LCAweDAyLCAweDdmLCAweDUwLCAweDNjLCAweDlmLCAweGE4KTsKCSZkYXRhX2J5dGUoMHg1MSwgMHhhMywgMHg0MCwgMHg4ZiwgMHg5MiwgMHg5ZCwgMHgzOCwgMHhmNSk7CgkmZGF0YV9ieXRlKDB4YmMsIDB4YjYsIDB4ZGEsIDB4MjEsIDB4MTAsIDB4ZmYsIDB4ZjMsIDB4ZDIpOwoJJmRhdGFfYnl0ZSgweGNkLCAweDBjLCAweDEzLCAweGVjLCAweDVmLCAweDk3LCAweDQ0LCAweDE3KTsKCSZkYXRhX2J5dGUoMHhjNCwgMHhhNywgMHg3ZSwgMHgzZCwgMHg2NCwgMHg1ZCwgMHgxOSwgMHg3Myk7CgkmZGF0YV9ieXRlKDB4NjAsIDB4ODEsIDB4NGYsIDB4ZGMsIDB4MjIsIDB4MmEsIDB4OTAsIDB4ODgpOwoJJmRhdGFfYnl0ZSgweDQ2LCAweGVlLCAweGI4LCAweDE0LCAweGRlLCAweDVlLCAweDBiLCAweGRiKTsKCSZkYXRhX2J5dGUoMHhlMCwgMHgzMiwgMHgzYSwgMHgwYSwgMHg0OSwgMHgwNiwgMHgyNCwgMHg1Yyk7CgkmZGF0YV9ieXRlKDB4YzIsIDB4ZDMsIDB4YWMsIDB4NjIsIDB4OTEsIDB4OTUsIDB4ZTQsIDB4NzkpOwoJJmRhdGFfYnl0ZSgweGU3LCAweGM4LCAweDM3LCAweDZkLCAweDhkLCAweGQ1LCAweDRlLCAweGE5KTsKCSZkYXRhX2J5dGUoMHg2YywgMHg1NiwgMHhmNCwgMHhlYSwgMHg2NSwgMHg3YSwgMHhhZSwgMHgwOCk7CgkmZGF0YV9ieXRlKDB4YmEsIDB4NzgsIDB4MjUsIDB4MmUsIDB4MWMsIDB4YTYsIDB4YjQsIDB4YzYpOwoJJmRhdGFfYnl0ZSgweGU4LCAweGRkLCAweDc0LCAweDFmLCAweDRiLCAweGJkLCAweDhiLCAweDhhKTsKCSZkYXRhX2J5dGUoMHg3MCwgMHgzZSwgMHhiNSwgMHg2NiwgMHg0OCwgMHgwMywgMHhmNiwgMHgwZSk7CgkmZGF0YV9ieXRlKDB4NjEsIDB4MzUsIDB4NTcsIDB4YjksIDB4ODYsIDB4YzEsIDB4MWQsIDB4OWUpOwoJJmRhdGFfYnl0ZSgweGUxLCAweGY4LCAweDk4LCAweDExLCAweDY5LCAweGQ5LCAweDhlLCAweDk0KTsKCSZkYXRhX2J5dGUoMHg5YiwgMHgxZSwgMHg4NywgMHhlOSwgMHhjZSwgMHg1NSwgMHgyOCwgMHhkZik7CgkmZGF0YV9ieXRlKDB4OGMsIDB4YTEsIDB4ODksIDB4MGQsIDB4YmYsIDB4ZTYsIDB4NDIsIDB4NjgpOwoJJmRhdGFfYnl0ZSgweDQxLCAweDk5LCAweDJkLCAweDBmLCAweGIwLCAweDU0LCAweGJiLCAweDE2KTsKCgkmZGF0YV9ieXRlKDB4NjMsIDB4N2MsIDB4NzcsIDB4N2IsIDB4ZjIsIDB4NmIsIDB4NmYsIDB4YzUpOwoJJmRhdGFfYnl0ZSgweDMwLCAweDAxLCAweDY3LCAweDJiLCAweGZlLCAweGQ3LCAweGFiLCAweDc2KTsKCSZkYXRhX2J5dGUoMHhjYSwgMHg4MiwgMHhjOSwgMHg3ZCwgMHhmYSwgMHg1OSwgMHg0NywgMHhmMCk7CgkmZGF0YV9ieXRlKDB4YWQsIDB4ZDQsIDB4YTIsIDB4YWYsIDB4OWMsIDB4YTQsIDB4NzIsIDB4YzApOwoJJmRhdGFfYnl0ZSgweGI3LCAweGZkLCAweDkzLCAweDI2LCAweDM2LCAweDNmLCAweGY3LCAweGNjKTsKCSZkYXRhX2J5dGUoMHgzNCwgMHhhNSwgMHhlNSwgMHhmMSwgMHg3MSwgMHhkOCwgMHgzMSwgMHgxNSk7CgkmZGF0YV9ieXRlKDB4MDQsIDB4YzcsIDB4MjMsIDB4YzMsIDB4MTgsIDB4OTYsIDB4MDUsIDB4OWEpOwoJJmRhdGFfYnl0ZSgweDA3LCAweDEyLCAweDgwLCAweGUyLCAweGViLCAweDI3LCAweGIyLCAweDc1KTsKCSZkYXRhX2J5dGUoMHgwOSwgMHg4MywgMHgyYywgMHgxYSwgMHgxYiwgMHg2ZSwgMHg1YSwgMHhhMCk7CgkmZGF0YV9ieXRlKDB4NTIsIDB4M2IsIDB4ZDYsIDB4YjMsIDB4MjksIDB4ZTMsIDB4MmYsIDB4ODQpOwoJJmRhdGFfYnl0ZSgweDUzLCAweGQxLCAweDAwLCAweGVkLCAweDIwLCAweGZjLCAweGIxLCAweDViKTsKCSZkYXRhX2J5dGUoMHg2YSwgMHhjYiwgMHhiZSwgMHgzOSwgMHg0YSwgMHg0YywgMHg1OCwgMHhjZik7CgkmZGF0YV9ieXRlKDB4ZDAsIDB4ZWYsIDB4YWEsIDB4ZmIsIDB4NDMsIDB4NGQsIDB4MzMsIDB4ODUpOwoJJmRhdGFfYnl0ZSgweDQ1LCAweGY5LCAweDAyLCAweDdmLCAweDUwLCAweDNjLCAweDlmLCAweGE4KTsKCSZkYXRhX2J5dGUoMHg1MSwgMHhhMywgMHg0MCwgMHg4ZiwgMHg5MiwgMHg5ZCwgMHgzOCwgMHhmNSk7CgkmZGF0YV9ieXRlKDB4YmMsIDB4YjYsIDB4ZGEsIDB4MjEsIDB4MTAsIDB4ZmYsIDB4ZjMsIDB4ZDIpOwoJJmRhdGFfYnl0ZSgweGNkLCAweDBjLCAweDEzLCAweGVjLCAweDVmLCAweDk3LCAweDQ0LCAweDE3KTsKCSZkYXRhX2J5dGUoMHhjNCwgMHhhNywgMHg3ZSwgMHgzZCwgMHg2NCwgMHg1ZCwgMHgxOSwgMHg3Myk7CgkmZGF0YV9ieXRlKDB4NjAsIDB4ODEsIDB4NGYsIDB4ZGMsIDB4MjIsIDB4MmEsIDB4OTAsIDB4ODgpOwoJJmRhdGFfYnl0ZSgweDQ2LCAweGVlLCAweGI4LCAweDE0LCAweGRlLCAweDVlLCAweDBiLCAweGRiKTsKCSZkYXRhX2J5dGUoMHhlMCwgMHgzMiwgMHgzYSwgMHgwYSwgMHg0OSwgMHgwNiwgMHgyNCwgMHg1Yyk7CgkmZGF0YV9ieXRlKDB4YzIsIDB4ZDMsIDB4YWMsIDB4NjIsIDB4OTEsIDB4OTUsIDB4ZTQsIDB4NzkpOwoJJmRhdGFfYnl0ZSgweGU3LCAweGM4LCAweDM3LCAweDZkLCAweDhkLCAweGQ1LCAweDRlLCAweGE5KTsKCSZkYXRhX2J5dGUoMHg2YywgMHg1NiwgMHhmNCwgMHhlYSwgMHg2NSwgMHg3YSwgMHhhZSwgMHgwOCk7CgkmZGF0YV9ieXRlKDB4YmEsIDB4NzgsIDB4MjUsIDB4MmUsIDB4MWMsIDB4YTYsIDB4YjQsIDB4YzYpOwoJJmRhdGFfYnl0ZSgweGU4LCAweGRkLCAweDc0LCAweDFmLCAweDRiLCAweGJkLCAweDhiLCAweDhhKTsKCSZkYXRhX2J5dGUoMHg3MCwgMHgzZSwgMHhiNSwgMHg2NiwgMHg0OCwgMHgwMywgMHhmNiwgMHgwZSk7CgkmZGF0YV9ieXRlKDB4NjEsIDB4MzUsIDB4NTcsIDB4YjksIDB4ODYsIDB4YzEsIDB4MWQsIDB4OWUpOwoJJmRhdGFfYnl0ZSgweGUxLCAweGY4LCAweDk4LCAweDExLCAweDY5LCAweGQ5LCAweDhlLCAweDk0KTsKCSZkYXRhX2J5dGUoMHg5YiwgMHgxZSwgMHg4NywgMHhlOSwgMHhjZSwgMHg1NSwgMHgyOCwgMHhkZik7CgkmZGF0YV9ieXRlKDB4OGMsIDB4YTEsIDB4ODksIDB4MGQsIDB4YmYsIDB4ZTYsIDB4NDIsIDB4NjgpOwoJJmRhdGFfYnl0ZSgweDQxLCAweDk5LCAweDJkLCAweDBmLCAweGIwLCAweDU0LCAweGJiLCAweDE2KTsKCgkmZGF0YV9ieXRlKDB4NjMsIDB4N2MsIDB4NzcsIDB4N2IsIDB4ZjIsIDB4NmIsIDB4NmYsIDB4YzUpOwoJJmRhdGFfYnl0ZSgweDMwLCAweDAxLCAweDY3LCAweDJiLCAweGZlLCAweGQ3LCAweGFiLCAweDc2KTsKCSZkYXRhX2J5dGUoMHhjYSwgMHg4MiwgMHhjOSwgMHg3ZCwgMHhmYSwgMHg1OSwgMHg0NywgMHhmMCk7CgkmZGF0YV9ieXRlKDB4YWQsIDB4ZDQsIDB4YTIsIDB4YWYsIDB4OWMsIDB4YTQsIDB4NzIsIDB4YzApOwoJJmRhdGFfYnl0ZSgweGI3LCAweGZkLCAweDkzLCAweDI2LCAweDM2LCAweDNmLCAweGY3LCAweGNjKTsKCSZkYXRhX2J5dGUoMHgzNCwgMHhhNSwgMHhlNSwgMHhmMSwgMHg3MSwgMHhkOCwgMHgzMSwgMHgxNSk7CgkmZGF0YV9ieXRlKDB4MDQsIDB4YzcsIDB4MjMsIDB4YzMsIDB4MTgsIDB4OTYsIDB4MDUsIDB4OWEpOwoJJmRhdGFfYnl0ZSgweDA3LCAweDEyLCAweDgwLCAweGUyLCAweGViLCAweDI3LCAweGIyLCAweDc1KTsKCSZkYXRhX2J5dGUoMHgwOSwgMHg4MywgMHgyYywgMHgxYSwgMHgxYiwgMHg2ZSwgMHg1YSwgMHhhMCk7CgkmZGF0YV9ieXRlKDB4NTIsIDB4M2IsIDB4ZDYsIDB4YjMsIDB4MjksIDB4ZTMsIDB4MmYsIDB4ODQpOwoJJmRhdGFfYnl0ZSgweDUzLCAweGQxLCAweDAwLCAweGVkLCAweDIwLCAweGZjLCAweGIxLCAweDViKTsKCSZkYXRhX2J5dGUoMHg2YSwgMHhjYiwgMHhiZSwgMHgzOSwgMHg0YSwgMHg0YywgMHg1OCwgMHhjZik7CgkmZGF0YV9ieXRlKDB4ZDAsIDB4ZWYsIDB4YWEsIDB4ZmIsIDB4NDMsIDB4NGQsIDB4MzMsIDB4ODUpOwoJJmRhdGFfYnl0ZSgweDQ1LCAweGY5LCAweDAyLCAweDdmLCAweDUwLCAweDNjLCAweDlmLCAweGE4KTsKCSZkYXRhX2J5dGUoMHg1MSwgMHhhMywgMHg0MCwgMHg4ZiwgMHg5MiwgMHg5ZCwgMHgzOCwgMHhmNSk7CgkmZGF0YV9ieXRlKDB4YmMsIDB4YjYsIDB4ZGEsIDB4MjEsIDB4MTAsIDB4ZmYsIDB4ZjMsIDB4ZDIpOwoJJmRhdGFfYnl0ZSgweGNkLCAweDBjLCAweDEzLCAweGVjLCAweDVmLCAweDk3LCAweDQ0LCAweDE3KTsKCSZkYXRhX2J5dGUoMHhjNCwgMHhhNywgMHg3ZSwgMHgzZCwgMHg2NCwgMHg1ZCwgMHgxOSwgMHg3Myk7CgkmZGF0YV9ieXRlKDB4NjAsIDB4ODEsIDB4NGYsIDB4ZGMsIDB4MjIsIDB4MmEsIDB4OTAsIDB4ODgpOwoJJmRhdGFfYnl0ZSgweDQ2LCAweGVlLCAweGI4LCAweDE0LCAweGRlLCAweDVlLCAweDBiLCAweGRiKTsKCSZkYXRhX2J5dGUoMHhlMCwgMHgzMiwgMHgzYSwgMHgwYSwgMHg0OSwgMHgwNiwgMHgyNCwgMHg1Yyk7CgkmZGF0YV9ieXRlKDB4YzIsIDB4ZDMsIDB4YWMsIDB4NjIsIDB4OTEsIDB4OTUsIDB4ZTQsIDB4NzkpOwoJJmRhdGFfYnl0ZSgweGU3LCAweGM4LCAweDM3LCAweDZkLCAweDhkLCAweGQ1LCAweDRlLCAweGE5KTsKCSZkYXRhX2J5dGUoMHg2YywgMHg1NiwgMHhmNCwgMHhlYSwgMHg2NSwgMHg3YSwgMHhhZSwgMHgwOCk7CgkmZGF0YV9ieXRlKDB4YmEsIDB4NzgsIDB4MjUsIDB4MmUsIDB4MWMsIDB4YTYsIDB4YjQsIDB4YzYpOwoJJmRhdGFfYnl0ZSgweGU4LCAweGRkLCAweDc0LCAweDFmLCAweDRiLCAweGJkLCAweDhiLCAweDhhKTsKCSZkYXRhX2J5dGUoMHg3MCwgMHgzZSwgMHhiNSwgMHg2NiwgMHg0OCwgMHgwMywgMHhmNiwgMHgwZSk7CgkmZGF0YV9ieXRlKDB4NjEsIDB4MzUsIDB4NTcsIDB4YjksIDB4ODYsIDB4YzEsIDB4MWQsIDB4OWUpOwoJJmRhdGFfYnl0ZSgweGUxLCAweGY4LCAweDk4LCAweDExLCAweDY5LCAweGQ5LCAweDhlLCAweDk0KTsKCSZkYXRhX2J5dGUoMHg5YiwgMHgxZSwgMHg4NywgMHhlOSwgMHhjZSwgMHg1NSwgMHgyOCwgMHhkZik7CgkmZGF0YV9ieXRlKDB4OGMsIDB4YTEsIDB4ODksIDB4MGQsIDB4YmYsIDB4ZTYsIDB4NDIsIDB4NjgpOwoJJmRhdGFfYnl0ZSgweDQxLCAweDk5LCAweDJkLCAweDBmLCAweGIwLCAweDU0LCAweGJiLCAweDE2KTsKI3Jjb246CgkmZGF0YV93b3JkKDB4MDAwMDAwMDEsIDB4MDAwMDAwMDIsIDB4MDAwMDAwMDQsIDB4MDAwMDAwMDgpOwoJJmRhdGFfd29yZCgweDAwMDAwMDEwLCAweDAwMDAwMDIwLCAweDAwMDAwMDQwLCAweDAwMDAwMDgwKTsKCSZkYXRhX3dvcmQoMHgwMDAwMDAxYiwgMHgwMDAwMDAzNiwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCk7CgkmZGF0YV93b3JkKDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDApOwomZnVuY3Rpb25fZW5kX0IoIl94ODZfQUVTX2VuY3J5cHQiKTsKCiMgdm9pZCBBRVNfZW5jcnlwdCAoY29uc3Qgdm9pZCAqaW5wLHZvaWQgKm91dCxjb25zdCBBRVNfS0VZICprZXkpOwomZnVuY3Rpb25fYmVnaW4oIkFFU19lbmNyeXB0Iik7CgkmbW92CSgkYWNjLCZ3cGFyYW0oMCkpOwkJIyBsb2FkIGlucAoJJm1vdgkoJGtleSwmd3BhcmFtKDIpKTsJCSMgbG9hZCBrZXkKCgkmbW92CSgkczAsImVzcCIpOwoJJnN1YgkoImVzcCIsMzYpOwoJJmFuZAkoImVzcCIsLTY0KTsJCQkjIGFsaWduIHRvIGNhY2hlLWxpbmUKCgkjIHBsYWNlIHN0YWNrIGZyYW1lIGp1c3QgImFib3ZlIiB0aGUga2V5IHNjaGVkdWxlCgkmbGVhCSgkczEsJkRXUCgtNjQtNjMsJGtleSkpOwoJJnN1YgkoJHMxLCJlc3AiKTsKCSZuZWcJKCRzMSk7CgkmYW5kCSgkczEsMHgzQzApOwkjIG1vZHVsbyAxMDI0LCBidXQgYWxpZ25lZCB0byBjYWNoZS1saW5lCgkmc3ViCSgiZXNwIiwkczEpOwoJJmFkZAkoImVzcCIsNCk7CSMgNCBpcyByZXNlcnZlZCBmb3IgY2FsbGVyJ3MgcmV0dXJuIGFkZHJlc3MKCSZtb3YJKCRfZXNwLCRzMCk7CQkJIyBzYXZlIHN0YWNrIHBvaW50ZXIKCgkmY2FsbCAgICgmbGFiZWwoInBpY19wb2ludCIpKTsgICAgICAgICAgIyBtYWtlIGl0IFBJQyEKCSZzZXRfbGFiZWwoInBpY19wb2ludCIpOwoJJmJsaW5kcG9wKCR0YmwpOwoJJnBpY21ldXAoJHMwLCJPUEVOU1NMX2lhMzJjYXBfUCIsJHRibCwmbGFiZWwoInBpY19wb2ludCIpKSBpZiAoISR4ODZvbmx5KTsKCSZsZWEgICAgKCR0YmwsJkRXUCgmbGFiZWwoIkFFU19UZSIpLiItIi4mbGFiZWwoInBpY19wb2ludCIpLCR0YmwpKTsKCgkjIHBpY2sgVGU0IGNvcHkgd2hpY2ggY2FuJ3QgIm92ZXJsYXAiIHdpdGggc3RhY2sgZnJhbWUgb3Iga2V5IHNjaGVkdWxlCgkmbGVhCSgkczEsJkRXUCg3NjgtNCwiZXNwIikpOwoJJnN1YgkoJHMxLCR0YmwpOwoJJmFuZAkoJHMxLDB4MzAwKTsKCSZsZWEJKCR0YmwsJkRXUCgyMDQ4KzEyOCwkdGJsLCRzMSkpOwoKCQkJCQlpZiAoISR4ODZvbmx5KSB7CgkmYnQJKCZEV1AoMCwkczApLDI1KTsJIyBjaGVjayBmb3IgU1NFIGJpdAoJJmpuYwkoJmxhYmVsKCJ4ODYiKSk7CgoJJm1vdnEJKCJtbTAiLCZRV1AoMCwkYWNjKSk7CgkmbW92cQkoIm1tNCIsJlFXUCg4LCRhY2MpKTsKCSZjYWxsCSgiX3NzZV9BRVNfZW5jcnlwdF9jb21wYWN0Iik7CgkmbW92CSgiZXNwIiwkX2VzcCk7CQkJIyByZXN0b3JlIHN0YWNrIHBvaW50ZXIKCSZtb3YJKCRhY2MsJndwYXJhbSgxKSk7CQkjIGxvYWQgb3V0CgkmbW92cQkoJlFXUCgwLCRhY2MpLCJtbTAiKTsJCSMgd3JpdGUgb3V0cHV0IGRhdGEKCSZtb3ZxCSgmUVdQKDgsJGFjYyksIm1tNCIpOwoJJmVtbXMJKCk7CgkmZnVuY3Rpb25fZW5kX0EoKTsKCQkJCQl9Cgkmc2V0X2xhYmVsKCJ4ODYiLDE2KTsKCSZtb3YJKCRfdGJsLCR0YmwpOwoJJm1vdgkoJHMwLCZEV1AoMCwkYWNjKSk7CQkjIGxvYWQgaW5wdXQgZGF0YQoJJm1vdgkoJHMxLCZEV1AoNCwkYWNjKSk7CgkmbW92CSgkczIsJkRXUCg4LCRhY2MpKTsKCSZtb3YJKCRzMywmRFdQKDEyLCRhY2MpKTsKCSZjYWxsCSgiX3g4Nl9BRVNfZW5jcnlwdF9jb21wYWN0Iik7CgkmbW92CSgiZXNwIiwkX2VzcCk7CQkJIyByZXN0b3JlIHN0YWNrIHBvaW50ZXIKCSZtb3YJKCRhY2MsJndwYXJhbSgxKSk7CQkjIGxvYWQgb3V0CgkmbW92CSgmRFdQKDAsJGFjYyksJHMwKTsJCSMgd3JpdGUgb3V0cHV0IGRhdGEKCSZtb3YJKCZEV1AoNCwkYWNjKSwkczEpOwoJJm1vdgkoJkRXUCg4LCRhY2MpLCRzMik7CgkmbW92CSgmRFdQKDEyLCRhY2MpLCRzMyk7CiZmdW5jdGlvbl9lbmQoIkFFU19lbmNyeXB0Iik7CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgIkNvbXBhY3QiIGJsb2NrIGZ1bmN0aW9uCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCnN1YiBkZWNjb21wYWN0KCkKeyBteSAkRm4gPSBtb3Y7CiAgd2hpbGUgKCQjXz41KSB7IHBvcChAXyk7ICRGbj1zdWJ7fTsgfQogIG15ICgkaSwkdGQsQHMpPUBfOwogIG15ICR0bXAgPSAka2V5OwogIG15ICRvdXQgPSAkaT09Mz8kc1swXTokYWNjOwoKCSMgJEZuIGlzIHVzZWQgaW4gZmlyc3QgY29tcGFjdCByb3VuZCBhbmQgaXRzIHB1cnBvc2UgaXMgdG8KCSMgdm9pZCByZXN0b3JhdGlvbiBvZiBzb21lIHZhbHVlcyBmcm9tIHN0YWNrLCBzbyB0aGF0IGFmdGVyCgkjIDR4ZGVjY29tcGFjdCB3aXRoIGV4dHJhIGFyZ3VtZW50ICRrZXksICRzMCBhbmQgJHMxIHZhbHVlcwoJIyBhcmUgbGVmdCB0aGVyZS4uLgoJaWYoJGk9PTMpICAgewkmJEZuCSgka2V5LCRfX2tleSk7CQkJfQoJZWxzZSAgICAgICAgewkmbW92CSgkb3V0LCRzWzBdKTsJCQl9CgkJCSZhbmQJKCRvdXQsMHhGRik7CgkJCSZtb3Z6CSgkb3V0LCZCUCgtMTI4LCR0ZCwkb3V0LDEpKTsKCglpZiAoJGk9PTMpICB7CSR0bXA9JHNbMV07CQkJCX0KCQkJJm1vdnoJKCR0bXAsJkhCKCRzWzFdKSk7CgkJCSZtb3Z6CSgkdG1wLCZCUCgtMTI4LCR0ZCwkdG1wLDEpKTsKCQkJJnNobAkoJHRtcCw4KTsKCQkJJnhvcgkoJG91dCwkdG1wKTsKCglpZiAoJGk9PTMpICB7CSR0bXA9JHNbMl07ICZtb3YgKCRzWzFdLCRhY2MpOwkJfQoJZWxzZSAgICAgICAgewltb3YJKCR0bXAsJHNbMl0pOwkJCX0KCQkJJnNocgkoJHRtcCwxNik7CgkJCSZhbmQJKCR0bXAsMHhGRik7CgkJCSZtb3Z6CSgkdG1wLCZCUCgtMTI4LCR0ZCwkdG1wLDEpKTsKCQkJJnNobAkoJHRtcCwxNik7CgkJCSZ4b3IJKCRvdXQsJHRtcCk7CgoJaWYgKCRpPT0zKSAgewkkdG1wPSRzWzNdOyAmJEZuICgkc1syXSwkX19zMSk7CQl9CgllbHNlICAgICAgICB7CSZtb3YJKCR0bXAsJHNbM10pOwkJCX0KCQkJJnNocgkoJHRtcCwyNCk7CgkJCSZtb3Z6CSgkdG1wLCZCUCgtMTI4LCR0ZCwkdG1wLDEpKTsKCQkJJnNobAkoJHRtcCwyNCk7CgkJCSZ4b3IJKCRvdXQsJHRtcCk7CglpZiAoJGk8MikgICB7CSZtb3YJKCZEV1AoNCs0KiRpLCJlc3AiKSwkb3V0KTsJfQoJaWYgKCRpPT0zKSAgewkmJEZuCSgkc1szXSwkX19zMCk7CQkJfQp9CgojIG11c3QgYmUgY2FsbGVkIHdpdGggMiwzLDAsMSBhcyBhcmd1bWVudCBzZXF1ZW5jZSEhIQpzdWIgZGVjdHJhbnNmb3JtKCkKeyBteSBAcyA9ICgkczAsJHMxLCRzMiwkczMpOwogIG15ICRpID0gc2hpZnQ7CiAgbXkgJHRtcCA9ICRrZXk7CiAgbXkgJHRwMiA9IEBzWygkaSsyKSU0XTsgJHRwMiA9IEBzWzJdIGlmICgkaT09MSk7CiAgbXkgJHRwNCA9IEBzWygkaSszKSU0XTsgJHRwNCA9IEBzWzNdIGlmICgkaT09MSk7CiAgbXkgJHRwOCA9ICR0Ymw7CgoJJm1vdgkoJGFjYywkc1skaV0pOwoJJmFuZAkoJGFjYywweDgwODA4MDgwKTsKCSZtb3YJKCR0bXAsJGFjYyk7Cgkmc2hyCSgkdG1wLDcpOwoJJmxlYQkoJHRwMiwmRFdQKDAsJHNbJGldLCRzWyRpXSkpOwoJJnN1YgkoJGFjYywkdG1wKTsKCSZhbmQJKCR0cDIsMHhmZWZlZmVmZSk7CgkmYW5kCSgkYWNjLDB4MWIxYjFiMWIpOwoJJnhvcgkoJGFjYywkdHAyKTsKCSZtb3YJKCR0cDIsJGFjYyk7CgoJJmFuZAkoJGFjYywweDgwODA4MDgwKTsKCSZtb3YJKCR0bXAsJGFjYyk7Cgkmc2hyCSgkdG1wLDcpOwoJJmxlYQkoJHRwNCwmRFdQKDAsJHRwMiwkdHAyKSk7Cgkmc3ViCSgkYWNjLCR0bXApOwoJJmFuZAkoJHRwNCwweGZlZmVmZWZlKTsKCSZhbmQJKCRhY2MsMHgxYjFiMWIxYik7CgkgJnhvcgkoJHRwMiwkc1skaV0pOwkjIHRwMl50cDEKCSZ4b3IJKCRhY2MsJHRwNCk7CgkmbW92CSgkdHA0LCRhY2MpOwoKCSZhbmQJKCRhY2MsMHg4MDgwODA4MCk7CgkmbW92CSgkdG1wLCRhY2MpOwoJJnNocgkoJHRtcCw3KTsKCSZsZWEJKCR0cDgsJkRXUCgwLCR0cDQsJHRwNCkpOwoJJnN1YgkoJGFjYywkdG1wKTsKCSZhbmQJKCR0cDgsMHhmZWZlZmVmZSk7CgkmYW5kCSgkYWNjLDB4MWIxYjFiMWIpOwoJICZ4b3IJKCR0cDQsJHNbJGldKTsJIyB0cDRedHAxCgkgJnJvdGwJKCRzWyRpXSw4KTsJIyA9IFJPVEFURSh0cDEsOCkKCSZ4b3IJKCR0cDgsJGFjYyk7CgoJJnhvcgkoJHNbJGldLCR0cDIpOwoJJnhvcgkoJHRwMiwkdHA4KTsKCSZyb3RsCSgkdHAyLDI0KTsKCSZ4b3IJKCRzWyRpXSwkdHA0KTsKCSZ4b3IJKCR0cDQsJHRwOCk7Cgkmcm90bAkoJHRwNCwxNik7CgkmeG9yCSgkc1skaV0sJHRwOCk7CSMgXj0gdHA4Xih0cDRedHAxKV4odHAyXnRwMSkKCSZyb3RsCSgkdHA4LDgpOwoJJnhvcgkoJHNbJGldLCR0cDIpOwkjIF49IFJPVEFURSh0cDhedHAyXnRwMSwyNCkKCSZ4b3IJKCRzWyRpXSwkdHA0KTsJIyBePSBST1RBVEUodHA4XnRwNF50cDEsMTYpCgkgJm1vdgkoJHNbMF0sJF9fczApCQkJaWYoJGk9PTIpOyAjcHJlZmV0Y2ggJHMwCgkgJm1vdgkoJHNbMV0sJF9fczEpCQkJaWYoJGk9PTMpOyAjcHJlZmV0Y2ggJHMxCgkgJm1vdgkoJHNbMl0sJF9fczIpCQkJaWYoJGk9PTEpOwoJJnhvcgkoJHNbJGldLCR0cDgpOwkjIF49IFJPVEFURSh0cDgsOCkKCgkmbW92CSgkc1szXSwkX19zMykJCQlpZigkaT09MSk7CgkmbW92CSgmRFdQKDQrNCokaSwiZXNwIiksJHNbJGldKQlpZigkaT49Mik7Cn0KCiZmdW5jdGlvbl9iZWdpbl9CKCJfeDg2X0FFU19kZWNyeXB0X2NvbXBhY3QiKTsKCSMgbm90ZSB0aGF0IGNhbGxlciBpcyBleHBlY3RlZCB0byBhbGxvY2F0ZSBzdGFjayBmcmFtZSBmb3IgbWUhCgkmbW92CSgkX19rZXksJGtleSk7CQkJIyBzYXZlIGtleQoKCSZ4b3IJKCRzMCwmRFdQKDAsJGtleSkpOwkJIyB4b3Igd2l0aCBrZXkKCSZ4b3IJKCRzMSwmRFdQKDQsJGtleSkpOwoJJnhvcgkoJHMyLCZEV1AoOCwka2V5KSk7CgkmeG9yCSgkczMsJkRXUCgxMiwka2V5KSk7CgoJJm1vdgkoJGFjYywmRFdQKDI0MCwka2V5KSk7CQkjIGxvYWQga2V5LT5yb3VuZHMKCgkmbGVhCSgkYWNjLCZEV1AoLTIsJGFjYywkYWNjKSk7CgkmbGVhCSgkYWNjLCZEV1AoMCwka2V5LCRhY2MsOCkpOwoJJm1vdgkoJF9fZW5kLCRhY2MpOwkJCSMgZW5kIG9mIGtleSBzY2hlZHVsZQoKCSMgcHJlZmV0Y2ggVGQ0CgkmbW92CSgka2V5LCZEV1AoMC0xMjgsJHRibCkpOwoJJm1vdgkoJGFjYywmRFdQKDMyLTEyOCwkdGJsKSk7CgkmbW92CSgka2V5LCZEV1AoNjQtMTI4LCR0YmwpKTsKCSZtb3YJKCRhY2MsJkRXUCg5Ni0xMjgsJHRibCkpOwoJJm1vdgkoJGtleSwmRFdQKDEyOC0xMjgsJHRibCkpOwoJJm1vdgkoJGFjYywmRFdQKDE2MC0xMjgsJHRibCkpOwoJJm1vdgkoJGtleSwmRFdQKDE5Mi0xMjgsJHRibCkpOwoJJm1vdgkoJGFjYywmRFdQKDIyNC0xMjgsJHRibCkpOwoKCSZzZXRfbGFiZWwoImxvb3AiLDE2KTsKCgkJJmRlY2NvbXBhY3QoMCwkdGJsLCRzMCwkczMsJHMyLCRzMSwxKTsKCQkmZGVjY29tcGFjdCgxLCR0YmwsJHMxLCRzMCwkczMsJHMyLDEpOwoJCSZkZWNjb21wYWN0KDIsJHRibCwkczIsJHMxLCRzMCwkczMsMSk7CgkJJmRlY2NvbXBhY3QoMywkdGJsLCRzMywkczIsJHMxLCRzMCwxKTsKCQkmZGVjdHJhbnNmb3JtKDIpOwoJCSZkZWN0cmFuc2Zvcm0oMyk7CgkJJmRlY3RyYW5zZm9ybSgwKTsKCQkmZGVjdHJhbnNmb3JtKDEpOwoJCSZtb3YgCSgka2V5LCRfX2tleSk7CgkJJm1vdgkoJHRibCwkX190YmwpOwoJCSZhZGQJKCRrZXksMTYpOwkJIyBhZHZhbmNlIHJkX2tleQoJCSZ4b3IJKCRzMCwmRFdQKDAsJGtleSkpOwoJCSZ4b3IJKCRzMSwmRFdQKDQsJGtleSkpOwoJCSZ4b3IJKCRzMiwmRFdQKDgsJGtleSkpOwoJCSZ4b3IJKCRzMywmRFdQKDEyLCRrZXkpKTsKCgkmY21wCSgka2V5LCRfX2VuZCk7CgkmbW92CSgkX19rZXksJGtleSk7CgkmamIJKCZsYWJlbCgibG9vcCIpKTsKCgkmZGVjY29tcGFjdCgwLCR0YmwsJHMwLCRzMywkczIsJHMxKTsKCSZkZWNjb21wYWN0KDEsJHRibCwkczEsJHMwLCRzMywkczIpOwoJJmRlY2NvbXBhY3QoMiwkdGJsLCRzMiwkczEsJHMwLCRzMyk7CgkmZGVjY29tcGFjdCgzLCR0YmwsJHMzLCRzMiwkczEsJHMwKTsKCgkmeG9yCSgkczAsJkRXUCgxNiwka2V5KSk7CgkmeG9yCSgkczEsJkRXUCgyMCwka2V5KSk7CgkmeG9yCSgkczIsJkRXUCgyNCwka2V5KSk7CgkmeG9yCSgkczMsJkRXUCgyOCwka2V5KSk7CgoJJnJldAkoKTsKJmZ1bmN0aW9uX2VuZF9CKCJfeDg2X0FFU19kZWNyeXB0X2NvbXBhY3QiKTsKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyAiQ29tcGFjdCIgU1NFIGJsb2NrIGZ1bmN0aW9uLgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgpzdWIgc3NlX2RlY2NvbXBhY3QoKQp7CgkmcHNodWZ3CSgibW0xIiwibW0wIiwweDBjKTsJCSMgIDcsIDYsIDEsIDAKCSZtb3ZkCSgiZWF4IiwibW0xIik7CQkJIyAgNywgNiwgMSwgMAoKCSZwc2h1ZncJKCJtbTUiLCJtbTQiLDB4MDkpOwkJIyAxMywxMiwxMSwxMAoJJm1vdnoJKCRhY2MsJkxCKCJlYXgiKSk7CQkjICAwCgkmbW92egkoImVjeCIsJkJQKC0xMjgsJHRibCwkYWNjLDEpKTsJIyAgMAoJJm1vdmQJKCJlYngiLCJtbTUiKTsJCQkjIDEzLDEyLDExLDEwCgkmbW92egkoImVkeCIsJkhCKCJlYXgiKSk7CQkjICAxCgkmbW92egkoImVkeCIsJkJQKC0xMjgsJHRibCwiZWR4IiwxKSk7CSMgIDEKCSZzaGwJKCJlZHgiLDgpOwkJCSMgIDEKCgkmcHNodWZ3CSgibW0yIiwibW0wIiwweDA2KTsJCSMgIDMsIDIsIDUsIDQKCSZtb3Z6CSgkYWNjLCZMQigiZWJ4IikpOwkJIyAxMAoJJm1vdnoJKCRhY2MsJkJQKC0xMjgsJHRibCwkYWNjLDEpKTsJIyAxMAoJJnNobAkoJGFjYywxNik7CQkJIyAxMAoJJm9yCSgiZWN4IiwkYWNjKTsJCQkjIDEwCgkmc2hyCSgiZWF4IiwxNik7CQkJIyAgNywgNgoJJm1vdnoJKCRhY2MsJkhCKCJlYngiKSk7CQkjIDExCgkmbW92egkoJGFjYywmQlAoLTEyOCwkdGJsLCRhY2MsMSkpOwkjIDExCgkmc2hsCSgkYWNjLDI0KTsJCQkjIDExCgkmb3IJKCJlZHgiLCRhY2MpOwkJCSMgMTEKCSZzaHIJKCJlYngiLDE2KTsJCQkjIDEzLDEyCgoJJnBzaHVmdwkoIm1tNiIsIm1tNCIsMHgwMyk7CQkjIDksIDgsMTUsMTQKCSZtb3Z6CSgkYWNjLCZIQigiZWF4IikpOwkJIyAgNwoJJm1vdnoJKCRhY2MsJkJQKC0xMjgsJHRibCwkYWNjLDEpKTsJIyAgNwoJJnNobAkoJGFjYywyNCk7CQkJIyAgNwoJJm9yCSgiZWN4IiwkYWNjKTsJCQkjICA3CgkmbW92egkoJGFjYywmSEIoImVieCIpKTsJCSMgMTMKCSZtb3Z6CSgkYWNjLCZCUCgtMTI4LCR0YmwsJGFjYywxKSk7CSMgMTMKCSZzaGwJKCRhY2MsOCk7CQkJIyAxMwoJJm9yCSgiZWN4IiwkYWNjKTsJCQkjIDEzCgkmbW92ZAkoIm1tMCIsImVjeCIpOwkJCSMgdFswXSBjb2xsZWN0ZWQKCgkmbW92egkoJGFjYywmTEIoImVheCIpKTsJCSMgIDYKCSZtb3ZkCSgiZWF4IiwibW0yIik7CQkJIyAgMywgMiwgNSwgNAoJJm1vdnoJKCJlY3giLCZCUCgtMTI4LCR0YmwsJGFjYywxKSk7CSMgIDYKCSZzaGwJKCJlY3giLDE2KTsJCQkjICA2CgkmbW92egkoJGFjYywmTEIoImVieCIpKTsJCSMgMTIKCSZtb3ZkCSgiZWJ4IiwibW02Iik7CQkJIyAgOSwgOCwxNSwxNAoJJm1vdnoJKCRhY2MsJkJQKC0xMjgsJHRibCwkYWNjLDEpKTsJIyAxMgoJJm9yCSgiZWN4IiwkYWNjKTsJCQkjIDEyCgoJJm1vdnoJKCRhY2MsJkxCKCJlYXgiKSk7CQkjICA0CgkmbW92egkoJGFjYywmQlAoLTEyOCwkdGJsLCRhY2MsMSkpOwkjICA0Cgkmb3IJKCJlZHgiLCRhY2MpOwkJCSMgIDQKCSZtb3Z6CSgkYWNjLCZMQigiZWJ4IikpOwkJIyAxNAoJJm1vdnoJKCRhY2MsJkJQKC0xMjgsJHRibCwkYWNjLDEpKTsJIyAxNAoJJnNobAkoJGFjYywxNik7CQkJIyAxNAoJJm9yCSgiZWR4IiwkYWNjKTsJCQkjIDE0CgkmbW92ZAkoIm1tMSIsImVkeCIpOwkJCSMgdFsxXSBjb2xsZWN0ZWQKCgkmbW92egkoJGFjYywmSEIoImVheCIpKTsJCSMgIDUKCSZtb3Z6CSgiZWR4IiwmQlAoLTEyOCwkdGJsLCRhY2MsMSkpOwkjICA1Cgkmc2hsCSgiZWR4Iiw4KTsJCQkjICA1CgkmbW92egkoJGFjYywmSEIoImVieCIpKTsJCSMgMTUKCSZzaHIJKCJlYXgiLDE2KTsJCQkjICAzLCAyCgkmbW92egkoJGFjYywmQlAoLTEyOCwkdGJsLCRhY2MsMSkpOwkjIDE1Cgkmc2hsCSgkYWNjLDI0KTsJCQkjIDE1Cgkmb3IJKCJlZHgiLCRhY2MpOwkJCSMgMTUKCSZzaHIJKCJlYngiLDE2KTsJCQkjICA5LCA4CgoJJnB1bnBja2xkcQkoIm1tMCIsIm1tMSIpOwkJIyB0WzAsMV0gY29sbGVjdGVkCgoJJm1vdnoJKCRhY2MsJkhCKCJlYngiKSk7CQkjICA5CgkmbW92egkoJGFjYywmQlAoLTEyOCwkdGJsLCRhY2MsMSkpOwkjICA5Cgkmc2hsCSgkYWNjLDgpOwkJCSMgIDkKCSZvcgkoImVjeCIsJGFjYyk7CQkJIyAgOQoJJmFuZAkoImVieCIsMHhmZik7CQkJIyAgOAoJJm1vdnoJKCJlYngiLCZCUCgtMTI4LCR0YmwsImVieCIsMSkpOwkjICA4Cgkmb3IJKCJlZHgiLCJlYngiKTsJCQkjICA4CgkmbW92egkoJGFjYywmTEIoImVheCIpKTsJCSMgIDIKCSZtb3Z6CSgkYWNjLCZCUCgtMTI4LCR0YmwsJGFjYywxKSk7CSMgIDIKCSZzaGwJKCRhY2MsMTYpOwkJCSMgIDIKCSZvcgkoImVkeCIsJGFjYyk7CQkJIyAgMgoJJm1vdmQJKCJtbTQiLCJlZHgiKTsJCQkjIHRbMl0gY29sbGVjdGVkCgkmbW92egkoImVheCIsJkhCKCJlYXgiKSk7CQkjICAzCgkmbW92egkoImVheCIsJkJQKC0xMjgsJHRibCwiZWF4IiwxKSk7CSMgIDMKCSZzaGwJKCJlYXgiLDI0KTsJCQkjICAzCgkmb3IJKCJlY3giLCJlYXgiKTsJCQkjICAzCgkmbW92ZAkoIm1tNSIsImVjeCIpOwkJCSMgdFszXSBjb2xsZWN0ZWQKCgkmcHVucGNrbGRxCSgibW00IiwibW01Iik7CQkjIHRbMiwzXSBjb2xsZWN0ZWQKfQoKCQkJCQlpZiAoISR4ODZvbmx5KSB7CiZmdW5jdGlvbl9iZWdpbl9CKCJfc3NlX0FFU19kZWNyeXB0X2NvbXBhY3QiKTsKCSZweG9yCSgibW0wIiwmUVdQKDAsJGtleSkpOwkjICA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwCgkmcHhvcgkoIm1tNCIsJlFXUCg4LCRrZXkpKTsJIyAxNSwxNCwxMywxMiwxMSwxMCwgOSwgOAoKCSMgbm90ZSB0aGF0IGNhbGxlciBpcyBleHBlY3RlZCB0byBhbGxvY2F0ZSBzdGFjayBmcmFtZSBmb3IgbWUhCgkmbW92CSgkYWNjLCZEV1AoMjQwLCRrZXkpKTsJCSMgbG9hZCBrZXktPnJvdW5kcwoJJmxlYQkoJGFjYywmRFdQKC0yLCRhY2MsJGFjYykpOwoJJmxlYQkoJGFjYywmRFdQKDAsJGtleSwkYWNjLDgpKTsKCSZtb3YJKCRfX2VuZCwkYWNjKTsJCQkjIGVuZCBvZiBrZXkgc2NoZWR1bGUKCgkmbW92CSgkczAsMHgxYjFiMWIxYik7CQkjIG1hZ2ljIGNvbnN0YW50CgkmbW92CSgmRFdQKDgsImVzcCIpLCRzMCk7CgkmbW92CSgmRFdQKDEyLCJlc3AiKSwkczApOwoKCSMgcHJlZmV0Y2ggVGQ0CgkmbW92CSgkczAsJkRXUCgwLTEyOCwkdGJsKSk7CgkmbW92CSgkczEsJkRXUCgzMi0xMjgsJHRibCkpOwoJJm1vdgkoJHMyLCZEV1AoNjQtMTI4LCR0YmwpKTsKCSZtb3YJKCRzMywmRFdQKDk2LTEyOCwkdGJsKSk7CgkmbW92CSgkczAsJkRXUCgxMjgtMTI4LCR0YmwpKTsKCSZtb3YJKCRzMSwmRFdQKDE2MC0xMjgsJHRibCkpOwoJJm1vdgkoJHMyLCZEV1AoMTkyLTEyOCwkdGJsKSk7CgkmbW92CSgkczMsJkRXUCgyMjQtMTI4LCR0YmwpKTsKCgkmc2V0X2xhYmVsKCJsb29wIiwxNik7CgkJJnNzZV9kZWNjb21wYWN0KCk7CgkJJmFkZAkoJGtleSwxNik7CgkJJmNtcAkoJGtleSwkX19lbmQpOwoJCSZqYQkoJmxhYmVsKCJvdXQiKSk7CgoJCSMgUk9UQVRFKHheeSxOKSA9PSBST1RBVEUoeCxOKV5ST1RBVEUoeSxOKQoJCSZtb3ZxCSgibW0zIiwibW0wIik7CQkmbW92cQkoIm1tNyIsIm1tNCIpOwoJCSZtb3ZxCSgibW0yIiwibW0wIiwxKTsJJm1vdnEJKCJtbTYiLCJtbTQiLDEpOwoJCSZtb3ZxCSgibW0xIiwibW0wIik7CQkmbW92cQkoIm1tNSIsIm1tNCIpOwoJCSZwc2h1ZncJKCJtbTAiLCJtbTAiLDB4YjEpOwkmcHNodWZ3CSgibW00IiwibW00IiwweGIxKTsjID0gUk9UQVRFKHRwMCwxNikKCQkmcHNsbGQJKCJtbTIiLDgpOwkJJnBzbGxkCSgibW02Iiw4KTsKCQkmcHNybGQJKCJtbTMiLDgpOwkJJnBzcmxkCSgibW03Iiw4KTsKCQkmcHhvcgkoIm1tMCIsIm1tMiIpOwkJJnB4b3IJKCJtbTQiLCJtbTYiKTsJIyBePSB0cDA8PDgKCQkmcHhvcgkoIm1tMCIsIm1tMyIpOwkJJnB4b3IJKCJtbTQiLCJtbTciKTsJIyBePSB0cDA+PjgKCQkmcHNsbGQJKCJtbTIiLDE2KTsJCSZwc2xsZAkoIm1tNiIsMTYpOwoJCSZwc3JsZAkoIm1tMyIsMTYpOwkJJnBzcmxkCSgibW03IiwxNik7CgkJJnB4b3IJKCJtbTAiLCJtbTIiKTsJCSZweG9yCSgibW00IiwibW02Iik7CSMgXj0gdHAwPDwyNAoJCSZweG9yCSgibW0wIiwibW0zIik7CQkmcHhvcgkoIm1tNCIsIm1tNyIpOwkjIF49IHRwMD4+MjQKCgkJJm1vdnEJKCJtbTMiLCZRV1AoOCwiZXNwIikpOwoJCSZweG9yCSgibW0yIiwibW0yIik7CQkmcHhvcgkoIm1tNiIsIm1tNiIpOwoJCSZwY21wZ3RiKCJtbTIiLCJtbTEiKTsJCSZwY21wZ3RiKCJtbTYiLCJtbTUiKTsKCQkmcGFuZAkoIm1tMiIsIm1tMyIpOwkJJnBhbmQJKCJtbTYiLCJtbTMiKTsKCQkmcGFkZGIJKCJtbTEiLCJtbTEiKTsJCSZwYWRkYgkoIm1tNSIsIm1tNSIpOwoJCSZweG9yCSgibW0xIiwibW0yIik7CQkmcHhvcgkoIm1tNSIsIm1tNiIpOwkjIHRwMgoJCSZtb3ZxCSgibW0zIiwibW0xIik7CQkmbW92cQkoIm1tNyIsIm1tNSIpOwoJCSZtb3ZxCSgibW0yIiwibW0xIik7CQkmbW92cQkoIm1tNiIsIm1tNSIpOwoJCSZweG9yCSgibW0wIiwibW0xIik7CQkmcHhvcgkoIm1tNCIsIm1tNSIpOwkjIF49IHRwMgoJCSZwc2xsZAkoIm1tMyIsMjQpOwkJJnBzbGxkCSgibW03IiwyNCk7CgkJJnBzcmxkCSgibW0yIiw4KTsJCSZwc3JsZAkoIm1tNiIsOCk7CgkJJnB4b3IJKCJtbTAiLCJtbTMiKTsJCSZweG9yCSgibW00IiwibW03Iik7CSMgXj0gdHAyPDwyNAoJCSZweG9yCSgibW0wIiwibW0yIik7CQkmcHhvcgkoIm1tNCIsIm1tNiIpOwkjIF49IHRwMj4+OAoKCQkmbW92cQkoIm1tMiIsJlFXUCg4LCJlc3AiKSk7CgkJJnB4b3IJKCJtbTMiLCJtbTMiKTsJCSZweG9yCSgibW03IiwibW03Iik7CgkJJnBjbXBndGIoIm1tMyIsIm1tMSIpOwkJJnBjbXBndGIoIm1tNyIsIm1tNSIpOwoJCSZwYW5kCSgibW0zIiwibW0yIik7CQkmcGFuZAkoIm1tNyIsIm1tMiIpOwoJCSZwYWRkYgkoIm1tMSIsIm1tMSIpOwkJJnBhZGRiCSgibW01IiwibW01Iik7CgkJJnB4b3IJKCJtbTEiLCJtbTMiKTsJCSZweG9yCSgibW01IiwibW03Iik7CSMgdHA0CgkJJnBzaHVmdwkoIm1tMyIsIm1tMSIsMHhiMSk7CSZwc2h1ZncJKCJtbTciLCJtbTUiLDB4YjEpOwoJCSZweG9yCSgibW0wIiwibW0xIik7CQkmcHhvcgkoIm1tNCIsIm1tNSIpOwkjIF49IHRwNAoJCSZweG9yCSgibW0wIiwibW0zIik7CQkmcHhvcgkoIm1tNCIsIm1tNyIpOwkjIF49IFJPVEFURSh0cDQsMTYpCQoKCQkmcHhvcgkoIm1tMyIsIm1tMyIpOwkJJnB4b3IJKCJtbTciLCJtbTciKTsKCQkmcGNtcGd0YigibW0zIiwibW0xIik7CQkmcGNtcGd0YigibW03IiwibW01Iik7CgkJJnBhbmQJKCJtbTMiLCJtbTIiKTsJCSZwYW5kCSgibW03IiwibW0yIik7CgkJJnBhZGRiCSgibW0xIiwibW0xIik7CQkmcGFkZGIJKCJtbTUiLCJtbTUiKTsKCQkmcHhvcgkoIm1tMSIsIm1tMyIpOwkJJnB4b3IJKCJtbTUiLCJtbTciKTsJIyB0cDgKCQkmcHhvcgkoIm1tMCIsIm1tMSIpOwkJJnB4b3IJKCJtbTQiLCJtbTUiKTsJIyBePSB0cDgKCQkmbW92cQkoIm1tMyIsIm1tMSIpOwkJJm1vdnEJKCJtbTciLCJtbTUiKTsKCQkmcHNodWZ3CSgibW0yIiwibW0xIiwweGIxKTsJJnBzaHVmdwkoIm1tNiIsIm1tNSIsMHhiMSk7CgkJJnB4b3IJKCJtbTAiLCJtbTIiKTsJCSZweG9yCSgibW00IiwibW02Iik7CSMgXj0gUk9UQVRFKHRwOCwxNikKCQkmcHNsbGQJKCJtbTEiLDgpOwkJJnBzbGxkCSgibW01Iiw4KTsKCQkmcHNybGQJKCJtbTMiLDgpOwkJJnBzcmxkCSgibW03Iiw4KTsKCQkmbW92cQkoIm1tMiIsJlFXUCgwLCRrZXkpKTsJJm1vdnEJKCJtbTYiLCZRV1AoOCwka2V5KSk7CgkJJnB4b3IJKCJtbTAiLCJtbTEiKTsJCSZweG9yCSgibW00IiwibW01Iik7CSMgXj0gdHA4PDw4CgkJJnB4b3IJKCJtbTAiLCJtbTMiKTsJCSZweG9yCSgibW00IiwibW03Iik7CSMgXj0gdHA4Pj44CgkJJm1vdgkoJHMwLCZEV1AoMC0xMjgsJHRibCkpOwoJCSZwc2xsZAkoIm1tMSIsMTYpOwkJJnBzbGxkCSgibW01IiwxNik7CgkJJm1vdgkoJHMxLCZEV1AoNjQtMTI4LCR0YmwpKTsKCQkmcHNybGQJKCJtbTMiLDE2KTsJCSZwc3JsZAkoIm1tNyIsMTYpOwoJCSZtb3YJKCRzMiwmRFdQKDEyOC0xMjgsJHRibCkpOwoJCSZweG9yCSgibW0wIiwibW0xIik7CQkmcHhvcgkoIm1tNCIsIm1tNSIpOwkjIF49IHRwODw8MjQKCQkmbW92CSgkczMsJkRXUCgxOTItMTI4LCR0YmwpKTsKCQkmcHhvcgkoIm1tMCIsIm1tMyIpOwkJJnB4b3IJKCJtbTQiLCJtbTciKTsJIyBePSB0cDg+PjI0CgoJCSZweG9yCSgibW0wIiwibW0yIik7CQkmcHhvcgkoIm1tNCIsIm1tNiIpOwoJJmptcAkoJmxhYmVsKCJsb29wIikpOwoKCSZzZXRfbGFiZWwoIm91dCIsMTYpOwoJJnB4b3IJKCJtbTAiLCZRV1AoMCwka2V5KSk7CgkmcHhvcgkoIm1tNCIsJlFXUCg4LCRrZXkpKTsKCgkmcmV0CSgpOwomZnVuY3Rpb25fZW5kX0IoIl9zc2VfQUVTX2RlY3J5cHRfY29tcGFjdCIpOwoJCQkJCX0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBWYW5pbGxhIGJsb2NrIGZ1bmN0aW9uLgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgpzdWIgZGVjc3RlcCgpCnsgbXkgKCRpLCR0ZCxAcykgPSBAXzsKICBteSAkdG1wID0gJGtleTsKICBteSAkb3V0ID0gJGk9PTM/JHNbMF06JGFjYzsKCgkjIG5vIGluc3RydWN0aW9ucyBhcmUgcmVvcmRlcmVkLCBhcyBwZXJmb3JtYW5jZSBhcHBlYXJzCgkjIG9wdGltYWwuLi4gb3IgcmF0aGVyIHRoYXQgYWxsIGF0dGVtcHRzIHRvIHJlb3JkZXIgZGlkbid0CgkjIHJlc3VsdCBpbiBiZXR0ZXIgcGVyZm9ybWFuY2UgW3doaWNoIGJ5IHRoZSB3YXkgaXMgbm90IGEKCSMgYml0IGxvd2VyIHRoYW4gZWNyeXB0aW9uXS4KCWlmKCRpPT0zKSAgIHsJJm1vdgkoJGtleSwkX19rZXkpOwkJCX0KCWVsc2UgICAgICAgIHsJJm1vdgkoJG91dCwkc1swXSk7CQkJfQoJCQkmYW5kCSgkb3V0LDB4RkYpOwoJCQkmbW92CSgkb3V0LCZEV1AoMCwkdGQsJG91dCw4KSk7CgoJaWYgKCRpPT0zKSAgewkkdG1wPSRzWzFdOwkJCQl9CgkJCSZtb3Z6CSgkdG1wLCZIQigkc1sxXSkpOwoJCQkmeG9yCSgkb3V0LCZEV1AoMywkdGQsJHRtcCw4KSk7CgoJaWYgKCRpPT0zKSAgewkkdG1wPSRzWzJdOyAmbW92ICgkc1sxXSwkYWNjKTsJCX0KCWVsc2UgICAgICAgIHsJJm1vdgkoJHRtcCwkc1syXSk7CQkJfQoJCQkmc2hyCSgkdG1wLDE2KTsKCQkJJmFuZAkoJHRtcCwweEZGKTsKCQkJJnhvcgkoJG91dCwmRFdQKDIsJHRkLCR0bXAsOCkpOwoKCWlmICgkaT09MykgIHsJJHRtcD0kc1szXTsgJm1vdiAoJHNbMl0sJF9fczEpOwkJfQoJZWxzZSAgICAgICAgewkmbW92CSgkdG1wLCRzWzNdKTsJCQl9CgkJCSZzaHIJKCR0bXAsMjQpOwoJCQkmeG9yCSgkb3V0LCZEV1AoMSwkdGQsJHRtcCw4KSk7CglpZiAoJGk8MikgICB7CSZtb3YJKCZEV1AoNCs0KiRpLCJlc3AiKSwkb3V0KTsJfQoJaWYgKCRpPT0zKSAgewkmbW92CSgkc1szXSwkX19zMCk7CQkJfQoJCQkmY29tbWVudCgpOwp9CgpzdWIgZGVjbGFzdCgpCnsgbXkgKCRpLCR0ZCxAcyk9QF87CiAgbXkgJHRtcCA9ICRrZXk7CiAgbXkgJG91dCA9ICRpPT0zPyRzWzBdOiRhY2M7CgoJaWYoJGk9PTApICAgewkmbGVhCSgkdGQsJkRXUCgyMDQ4KzEyOCwkdGQpKTsKCQkJJm1vdgkoJHRtcCwmRFdQKDAtMTI4LCR0ZCkpOwoJCQkmbW92CSgkYWNjLCZEV1AoMzItMTI4LCR0ZCkpOwoJCQkmbW92CSgkdG1wLCZEV1AoNjQtMTI4LCR0ZCkpOwoJCQkmbW92CSgkYWNjLCZEV1AoOTYtMTI4LCR0ZCkpOwoJCQkmbW92CSgkdG1wLCZEV1AoMTI4LTEyOCwkdGQpKTsKCQkJJm1vdgkoJGFjYywmRFdQKDE2MC0xMjgsJHRkKSk7CgkJCSZtb3YJKCR0bXAsJkRXUCgxOTItMTI4LCR0ZCkpOwoJCQkmbW92CSgkYWNjLCZEV1AoMjI0LTEyOCwkdGQpKTsKCQkJJmxlYQkoJHRkLCZEV1AoLTEyOCwkdGQpKTsJCX0KCWlmKCRpPT0zKSAgIHsJJm1vdgkoJGtleSwkX19rZXkpOwkJCX0KCWVsc2UgICAgICAgIHsJJm1vdgkoJG91dCwkc1swXSk7CQkJfQoJCQkmYW5kCSgkb3V0LDB4RkYpOwoJCQkmbW92egkoJG91dCwmQlAoMCwkdGQsJG91dCwxKSk7CgoJaWYgKCRpPT0zKSAgewkkdG1wPSRzWzFdOwkJCQl9CgkJCSZtb3Z6CSgkdG1wLCZIQigkc1sxXSkpOwoJCQkmbW92egkoJHRtcCwmQlAoMCwkdGQsJHRtcCwxKSk7CgkJCSZzaGwJKCR0bXAsOCk7CgkJCSZ4b3IJKCRvdXQsJHRtcCk7CgoJaWYgKCRpPT0zKSAgewkkdG1wPSRzWzJdOyAmbW92ICgkc1sxXSwkYWNjKTsJCX0KCWVsc2UgICAgICAgIHsJbW92CSgkdG1wLCRzWzJdKTsJCQl9CgkJCSZzaHIJKCR0bXAsMTYpOwoJCQkmYW5kCSgkdG1wLDB4RkYpOwoJCQkmbW92egkoJHRtcCwmQlAoMCwkdGQsJHRtcCwxKSk7CgkJCSZzaGwJKCR0bXAsMTYpOwoJCQkmeG9yCSgkb3V0LCR0bXApOwoKCWlmICgkaT09MykgIHsJJHRtcD0kc1szXTsgJm1vdiAoJHNbMl0sJF9fczEpOwkJfQoJZWxzZSAgICAgICAgewkmbW92CSgkdG1wLCRzWzNdKTsJCQl9CgkJCSZzaHIJKCR0bXAsMjQpOwoJCQkmbW92egkoJHRtcCwmQlAoMCwkdGQsJHRtcCwxKSk7CgkJCSZzaGwJKCR0bXAsMjQpOwoJCQkmeG9yCSgkb3V0LCR0bXApOwoJaWYgKCRpPDIpICAgewkmbW92CSgmRFdQKDQrNCokaSwiZXNwIiksJG91dCk7CX0KCWlmICgkaT09MykgIHsJJm1vdgkoJHNbM10sJF9fczApOwoJCQkmbGVhCSgkdGQsJkRXUCgtMjA0OCwkdGQpKTsJCX0KfQoKJmZ1bmN0aW9uX2JlZ2luX0IoIl94ODZfQUVTX2RlY3J5cHQiKTsKCSMgbm90ZSB0aGF0IGNhbGxlciBpcyBleHBlY3RlZCB0byBhbGxvY2F0ZSBzdGFjayBmcmFtZSBmb3IgbWUhCgkmbW92CSgkX19rZXksJGtleSk7CQkJIyBzYXZlIGtleQoKCSZ4b3IJKCRzMCwmRFdQKDAsJGtleSkpOwkJIyB4b3Igd2l0aCBrZXkKCSZ4b3IJKCRzMSwmRFdQKDQsJGtleSkpOwoJJnhvcgkoJHMyLCZEV1AoOCwka2V5KSk7CgkmeG9yCSgkczMsJkRXUCgxMiwka2V5KSk7CgoJJm1vdgkoJGFjYywmRFdQKDI0MCwka2V5KSk7CQkjIGxvYWQga2V5LT5yb3VuZHMKCglpZiAoJHNtYWxsX2Zvb3RwcmludCkgewoJICAgICZsZWEJKCRhY2MsJkRXUCgtMiwkYWNjLCRhY2MpKTsKCSAgICAmbGVhCSgkYWNjLCZEV1AoMCwka2V5LCRhY2MsOCkpOwoJICAgICZtb3YJKCRfX2VuZCwkYWNjKTsJCSMgZW5kIG9mIGtleSBzY2hlZHVsZQoJICAgICZzZXRfbGFiZWwoImxvb3AiLDE2KTsKCQkmZGVjc3RlcCgwLCR0YmwsJHMwLCRzMywkczIsJHMxKTsKCQkmZGVjc3RlcCgxLCR0YmwsJHMxLCRzMCwkczMsJHMyKTsKCQkmZGVjc3RlcCgyLCR0YmwsJHMyLCRzMSwkczAsJHMzKTsKCQkmZGVjc3RlcCgzLCR0YmwsJHMzLCRzMiwkczEsJHMwKTsKCQkmYWRkCSgka2V5LDE2KTsJCSMgYWR2YW5jZSByZF9rZXkKCQkmeG9yCSgkczAsJkRXUCgwLCRrZXkpKTsKCQkmeG9yCSgkczEsJkRXUCg0LCRrZXkpKTsKCQkmeG9yCSgkczIsJkRXUCg4LCRrZXkpKTsKCQkmeG9yCSgkczMsJkRXUCgxMiwka2V5KSk7CgkgICAgJmNtcAkoJGtleSwkX19lbmQpOwoJICAgICZtb3YJKCRfX2tleSwka2V5KTsKCSAgICAmamIJCSgmbGFiZWwoImxvb3AiKSk7Cgl9CgllbHNlIHsKCSAgICAmY21wCSgkYWNjLDEwKTsKCSAgICAmamxlCSgmbGFiZWwoIjEwcm91bmRzIikpOwoJICAgICZjbXAJKCRhY2MsMTIpOwoJICAgICZqbGUJKCZsYWJlbCgiMTJyb3VuZHMiKSk7CgoJJnNldF9sYWJlbCgiMTRyb3VuZHMiLDQpOwoJICAgIGZvciAoJGk9MTskaTwzOyRpKyspIHsKCQkmZGVjc3RlcCgwLCR0YmwsJHMwLCRzMywkczIsJHMxKTsKCQkmZGVjc3RlcCgxLCR0YmwsJHMxLCRzMCwkczMsJHMyKTsKCQkmZGVjc3RlcCgyLCR0YmwsJHMyLCRzMSwkczAsJHMzKTsKCQkmZGVjc3RlcCgzLCR0YmwsJHMzLCRzMiwkczEsJHMwKTsKCQkmeG9yCSgkczAsJkRXUCgxNiokaSswLCRrZXkpKTsKCQkmeG9yCSgkczEsJkRXUCgxNiokaSs0LCRrZXkpKTsKCQkmeG9yCSgkczIsJkRXUCgxNiokaSs4LCRrZXkpKTsKCQkmeG9yCSgkczMsJkRXUCgxNiokaSsxMiwka2V5KSk7CgkgICAgfQoJICAgICZhZGQJKCRrZXksMzIpOwoJICAgICZtb3YJKCRfX2tleSwka2V5KTsJCSMgYWR2YW5jZSByZF9rZXkKCSZzZXRfbGFiZWwoIjEycm91bmRzIiw0KTsKCSAgICBmb3IgKCRpPTE7JGk8MzskaSsrKSB7CgkJJmRlY3N0ZXAoMCwkdGJsLCRzMCwkczMsJHMyLCRzMSk7CgkJJmRlY3N0ZXAoMSwkdGJsLCRzMSwkczAsJHMzLCRzMik7CgkJJmRlY3N0ZXAoMiwkdGJsLCRzMiwkczEsJHMwLCRzMyk7CgkJJmRlY3N0ZXAoMywkdGJsLCRzMywkczIsJHMxLCRzMCk7CgkJJnhvcgkoJHMwLCZEV1AoMTYqJGkrMCwka2V5KSk7CgkJJnhvcgkoJHMxLCZEV1AoMTYqJGkrNCwka2V5KSk7CgkJJnhvcgkoJHMyLCZEV1AoMTYqJGkrOCwka2V5KSk7CgkJJnhvcgkoJHMzLCZEV1AoMTYqJGkrMTIsJGtleSkpOwoJICAgIH0KCSAgICAmYWRkCSgka2V5LDMyKTsKCSAgICAmbW92CSgkX19rZXksJGtleSk7CQkjIGFkdmFuY2UgcmRfa2V5Cgkmc2V0X2xhYmVsKCIxMHJvdW5kcyIsNCk7CgkgICAgZm9yICgkaT0xOyRpPDEwOyRpKyspIHsKCQkmZGVjc3RlcCgwLCR0YmwsJHMwLCRzMywkczIsJHMxKTsKCQkmZGVjc3RlcCgxLCR0YmwsJHMxLCRzMCwkczMsJHMyKTsKCQkmZGVjc3RlcCgyLCR0YmwsJHMyLCRzMSwkczAsJHMzKTsKCQkmZGVjc3RlcCgzLCR0YmwsJHMzLCRzMiwkczEsJHMwKTsKCQkmeG9yCSgkczAsJkRXUCgxNiokaSswLCRrZXkpKTsKCQkmeG9yCSgkczEsJkRXUCgxNiokaSs0LCRrZXkpKTsKCQkmeG9yCSgkczIsJkRXUCgxNiokaSs4LCRrZXkpKTsKCQkmeG9yCSgkczMsJkRXUCgxNiokaSsxMiwka2V5KSk7CgkgICAgfQoJfQoKCSZkZWNsYXN0KDAsJHRibCwkczAsJHMzLCRzMiwkczEpOwoJJmRlY2xhc3QoMSwkdGJsLCRzMSwkczAsJHMzLCRzMik7CgkmZGVjbGFzdCgyLCR0YmwsJHMyLCRzMSwkczAsJHMzKTsKCSZkZWNsYXN0KDMsJHRibCwkczMsJHMyLCRzMSwkczApOwoKCSZhZGQJKCRrZXksJHNtYWxsX2Zvb3RwcmludD8xNjoxNjApOwoJJnhvcgkoJHMwLCZEV1AoMCwka2V5KSk7CgkmeG9yCSgkczEsJkRXUCg0LCRrZXkpKTsKCSZ4b3IJKCRzMiwmRFdQKDgsJGtleSkpOwoJJnhvcgkoJHMzLCZEV1AoMTIsJGtleSkpOwoKCSZyZXQJKCk7Cgomc2V0X2xhYmVsKCJBRVNfVGQiLDY0KTsJIyBZZXMhIEkga2VlcCBpdCBpbiB0aGUgY29kZSBzZWdtZW50IQoJJl9kYXRhX3dvcmQoMHg1MGE3ZjQ1MSwgMHg1MzY1NDE3ZSwgMHhjM2E0MTcxYSwgMHg5NjVlMjczYSk7CgkmX2RhdGFfd29yZCgweGNiNmJhYjNiLCAweGYxNDU5ZDFmLCAweGFiNThmYWFjLCAweDkzMDNlMzRiKTsKCSZfZGF0YV93b3JkKDB4NTVmYTMwMjAsIDB4ZjY2ZDc2YWQsIDB4OTE3NmNjODgsIDB4MjU0YzAyZjUpOwoJJl9kYXRhX3dvcmQoMHhmY2Q3ZTU0ZiwgMHhkN2NiMmFjNSwgMHg4MDQ0MzUyNiwgMHg4ZmEzNjJiNSk7CgkmX2RhdGFfd29yZCgweDQ5NWFiMWRlLCAweDY3MWJiYTI1LCAweDk4MGVlYTQ1LCAweGUxYzBmZTVkKTsKCSZfZGF0YV93b3JkKDB4MDI3NTJmYzMsIDB4MTJmMDRjODEsIDB4YTM5NzQ2OGQsIDB4YzZmOWQzNmIpOwoJJl9kYXRhX3dvcmQoMHhlNzVmOGYwMywgMHg5NTljOTIxNSwgMHhlYjdhNmRiZiwgMHhkYTU5NTI5NSk7CgkmX2RhdGFfd29yZCgweDJkODNiZWQ0LCAweGQzMjE3NDU4LCAweDI5NjllMDQ5LCAweDQ0YzhjOThlKTsKCSZfZGF0YV93b3JkKDB4NmE4OWMyNzUsIDB4Nzg3OThlZjQsIDB4NmIzZTU4OTksIDB4ZGQ3MWI5MjcpOwoJJl9kYXRhX3dvcmQoMHhiNjRmZTFiZSwgMHgxN2FkODhmMCwgMHg2NmFjMjBjOSwgMHhiNDNhY2U3ZCk7CgkmX2RhdGFfd29yZCgweDE4NGFkZjYzLCAweDgyMzExYWU1LCAweDYwMzM1MTk3LCAweDQ1N2Y1MzYyKTsKCSZfZGF0YV93b3JkKDB4ZTA3NzY0YjEsIDB4ODRhZTZiYmIsIDB4MWNhMDgxZmUsIDB4OTQyYjA4ZjkpOwoJJl9kYXRhX3dvcmQoMHg1ODY4NDg3MCwgMHgxOWZkNDU4ZiwgMHg4NzZjZGU5NCwgMHhiN2Y4N2I1Mik7CgkmX2RhdGFfd29yZCgweDIzZDM3M2FiLCAweGUyMDI0YjcyLCAweDU3OGYxZmUzLCAweDJhYWI1NTY2KTsKCSZfZGF0YV93b3JkKDB4MDcyOGViYjIsIDB4MDNjMmI1MmYsIDB4OWE3YmM1ODYsIDB4YTUwODM3ZDMpOwoJJl9kYXRhX3dvcmQoMHhmMjg3MjgzMCwgMHhiMmE1YmYyMywgMHhiYTZhMDMwMiwgMHg1YzgyMTZlZCk7CgkmX2RhdGFfd29yZCgweDJiMWNjZjhhLCAweDkyYjQ3OWE3LCAweGYwZjIwN2YzLCAweGExZTI2OTRlKTsKCSZfZGF0YV93b3JkKDB4Y2RmNGRhNjUsIDB4ZDViZTA1MDYsIDB4MWY2MjM0ZDEsIDB4OGFmZWE2YzQpOwoJJl9kYXRhX3dvcmQoMHg5ZDUzMmUzNCwgMHhhMDU1ZjNhMiwgMHgzMmUxOGEwNSwgMHg3NWViZjZhNCk7CgkmX2RhdGFfd29yZCgweDM5ZWM4MzBiLCAweGFhZWY2MDQwLCAweDA2OWY3MTVlLCAweDUxMTA2ZWJkKTsKCSZfZGF0YV93b3JkKDB4Zjk4YTIxM2UsIDB4M2QwNmRkOTYsIDB4YWUwNTNlZGQsIDB4NDZiZGU2NGQpOwoJJl9kYXRhX3dvcmQoMHhiNThkNTQ5MSwgMHgwNTVkYzQ3MSwgMHg2ZmQ0MDYwNCwgMHhmZjE1NTA2MCk7CgkmX2RhdGFfd29yZCgweDI0ZmI5ODE5LCAweDk3ZTliZGQ2LCAweGNjNDM0MDg5LCAweDc3OWVkOTY3KTsKCSZfZGF0YV93b3JkKDB4YmQ0MmU4YjAsIDB4ODg4Yjg5MDcsIDB4Mzg1YjE5ZTcsIDB4ZGJlZWM4NzkpOwoJJl9kYXRhX3dvcmQoMHg0NzBhN2NhMSwgMHhlOTBmNDI3YywgMHhjOTFlODRmOCwgMHgwMDAwMDAwMCk7CgkmX2RhdGFfd29yZCgweDgzODY4MDA5LCAweDQ4ZWQyYjMyLCAweGFjNzAxMTFlLCAweDRlNzI1YTZjKTsKCSZfZGF0YV93b3JkKDB4ZmJmZjBlZmQsIDB4NTYzODg1MGYsIDB4MWVkNWFlM2QsIDB4MjczOTJkMzYpOwoJJl9kYXRhX3dvcmQoMHg2NGQ5MGYwYSwgMHgyMWE2NWM2OCwgMHhkMTU0NWI5YiwgMHgzYTJlMzYyNCk7CgkmX2RhdGFfd29yZCgweGIxNjcwYTBjLCAweDBmZTc1NzkzLCAweGQyOTZlZWI0LCAweDllOTE5YjFiKTsKCSZfZGF0YV93b3JkKDB4NGZjNWMwODAsIDB4YTIyMGRjNjEsIDB4Njk0Yjc3NWEsIDB4MTYxYTEyMWMpOwoJJl9kYXRhX3dvcmQoMHgwYWJhOTNlMiwgMHhlNTJhYTBjMCwgMHg0M2UwMjIzYywgMHgxZDE3MWIxMik7CgkmX2RhdGFfd29yZCgweDBiMGQwOTBlLCAweGFkYzc4YmYyLCAweGI5YThiNjJkLCAweGM4YTkxZTE0KTsKCSZfZGF0YV93b3JkKDB4ODUxOWYxNTcsIDB4NGMwNzc1YWYsIDB4YmJkZDk5ZWUsIDB4ZmQ2MDdmYTMpOwoJJl9kYXRhX3dvcmQoMHg5ZjI2MDFmNywgMHhiY2Y1NzI1YywgMHhjNTNiNjY0NCwgMHgzNDdlZmI1Yik7CgkmX2RhdGFfd29yZCgweDc2Mjk0MzhiLCAweGRjYzYyM2NiLCAweDY4ZmNlZGI2LCAweDYzZjFlNGI4KTsKCSZfZGF0YV93b3JkKDB4Y2FkYzMxZDcsIDB4MTA4NTYzNDIsIDB4NDAyMjk3MTMsIDB4MjAxMWM2ODQpOwoJJl9kYXRhX3dvcmQoMHg3ZDI0NGE4NSwgMHhmODNkYmJkMiwgMHgxMTMyZjlhZSwgMHg2ZGExMjljNyk7CgkmX2RhdGFfd29yZCgweDRiMmY5ZTFkLCAweGYzMzBiMmRjLCAweGVjNTI4NjBkLCAweGQwZTNjMTc3KTsKCSZfZGF0YV93b3JkKDB4NmMxNmIzMmIsIDB4OTliOTcwYTksIDB4ZmE0ODk0MTEsIDB4MjI2NGU5NDcpOwoJJl9kYXRhX3dvcmQoMHhjNDhjZmNhOCwgMHgxYTNmZjBhMCwgMHhkODJjN2Q1NiwgMHhlZjkwMzMyMik7CgkmX2RhdGFfd29yZCgweGM3NGU0OTg3LCAweGMxZDEzOGQ5LCAweGZlYTJjYThjLCAweDM2MGJkNDk4KTsKCSZfZGF0YV93b3JkKDB4Y2Y4MWY1YTYsIDB4MjhkZTdhYTUsIDB4MjY4ZWI3ZGEsIDB4YTRiZmFkM2YpOwoJJl9kYXRhX3dvcmQoMHhlNDlkM2EyYywgMHgwZDkyNzg1MCwgMHg5YmNjNWY2YSwgMHg2MjQ2N2U1NCk7CgkmX2RhdGFfd29yZCgweGMyMTM4ZGY2LCAweGU4YjhkODkwLCAweDVlZjczOTJlLCAweGY1YWZjMzgyKTsKCSZfZGF0YV93b3JkKDB4YmU4MDVkOWYsIDB4N2M5M2QwNjksIDB4YTkyZGQ1NmYsIDB4YjMxMjI1Y2YpOwoJJl9kYXRhX3dvcmQoMHgzYjk5YWNjOCwgMHhhNzdkMTgxMCwgMHg2ZTYzOWNlOCwgMHg3YmJiM2JkYik7CgkmX2RhdGFfd29yZCgweDA5NzgyNmNkLCAweGY0MTg1OTZlLCAweDAxYjc5YWVjLCAweGE4OWE0ZjgzKTsKCSZfZGF0YV93b3JkKDB4NjU2ZTk1ZTYsIDB4N2VlNmZmYWEsIDB4MDhjZmJjMjEsIDB4ZTZlODE1ZWYpOwoJJl9kYXRhX3dvcmQoMHhkOTliZTdiYSwgMHhjZTM2NmY0YSwgMHhkNDA5OWZlYSwgMHhkNjdjYjAyOSk7CgkmX2RhdGFfd29yZCgweGFmYjJhNDMxLCAweDMxMjMzZjJhLCAweDMwOTRhNWM2LCAweGMwNjZhMjM1KTsKCSZfZGF0YV93b3JkKDB4MzdiYzRlNzQsIDB4YTZjYTgyZmMsIDB4YjBkMDkwZTAsIDB4MTVkOGE3MzMpOwoJJl9kYXRhX3dvcmQoMHg0YTk4MDRmMSwgMHhmN2RhZWM0MSwgMHgwZTUwY2Q3ZiwgMHgyZmY2OTExNyk7CgkmX2RhdGFfd29yZCgweDhkZDY0ZDc2LCAweDRkYjBlZjQzLCAweDU0NGRhYWNjLCAweGRmMDQ5NmU0KTsKCSZfZGF0YV93b3JkKDB4ZTNiNWQxOWUsIDB4MWI4ODZhNGMsIDB4YjgxZjJjYzEsIDB4N2Y1MTY1NDYpOwoJJl9kYXRhX3dvcmQoMHgwNGVhNWU5ZCwgMHg1ZDM1OGMwMSwgMHg3Mzc0ODdmYSwgMHgyZTQxMGJmYik7CgkmX2RhdGFfd29yZCgweDVhMWQ2N2IzLCAweDUyZDJkYjkyLCAweDMzNTYxMGU5LCAweDEzNDdkNjZkKTsKCSZfZGF0YV93b3JkKDB4OGM2MWQ3OWEsIDB4N2EwY2ExMzcsIDB4OGUxNGY4NTksIDB4ODkzYzEzZWIpOwoJJl9kYXRhX3dvcmQoMHhlZTI3YTljZSwgMHgzNWM5NjFiNywgMHhlZGU1MWNlMSwgMHgzY2IxNDc3YSk7CgkmX2RhdGFfd29yZCgweDU5ZGZkMjljLCAweDNmNzNmMjU1LCAweDc5Y2UxNDE4LCAweGJmMzdjNzczKTsKCSZfZGF0YV93b3JkKDB4ZWFjZGY3NTMsIDB4NWJhYWZkNWYsIDB4MTQ2ZjNkZGYsIDB4ODZkYjQ0NzgpOwoJJl9kYXRhX3dvcmQoMHg4MWYzYWZjYSwgMHgzZWM0NjhiOSwgMHgyYzM0MjQzOCwgMHg1ZjQwYTNjMik7CgkmX2RhdGFfd29yZCgweDcyYzMxZDE2LCAweDBjMjVlMmJjLCAweDhiNDkzYzI4LCAweDQxOTUwZGZmKTsKCSZfZGF0YV93b3JkKDB4NzEwMWE4MzksIDB4ZGViMzBjMDgsIDB4OWNlNGI0ZDgsIDB4OTBjMTU2NjQpOwoJJl9kYXRhX3dvcmQoMHg2MTg0Y2I3YiwgMHg3MGI2MzJkNSwgMHg3NDVjNmM0OCwgMHg0MjU3YjhkMCk7CgojVGQ0OgkjIGZvdXIgY29waWVzIG9mIFRkNCB0byBjaG9vc2UgZnJvbSB0byBhdm9pZCBMMSBhbGlhc2luZwoJJmRhdGFfYnl0ZSgweDUyLCAweDA5LCAweDZhLCAweGQ1LCAweDMwLCAweDM2LCAweGE1LCAweDM4KTsKCSZkYXRhX2J5dGUoMHhiZiwgMHg0MCwgMHhhMywgMHg5ZSwgMHg4MSwgMHhmMywgMHhkNywgMHhmYik7CgkmZGF0YV9ieXRlKDB4N2MsIDB4ZTMsIDB4MzksIDB4ODIsIDB4OWIsIDB4MmYsIDB4ZmYsIDB4ODcpOwoJJmRhdGFfYnl0ZSgweDM0LCAweDhlLCAweDQzLCAweDQ0LCAweGM0LCAweGRlLCAweGU5LCAweGNiKTsKCSZkYXRhX2J5dGUoMHg1NCwgMHg3YiwgMHg5NCwgMHgzMiwgMHhhNiwgMHhjMiwgMHgyMywgMHgzZCk7CgkmZGF0YV9ieXRlKDB4ZWUsIDB4NGMsIDB4OTUsIDB4MGIsIDB4NDIsIDB4ZmEsIDB4YzMsIDB4NGUpOwoJJmRhdGFfYnl0ZSgweDA4LCAweDJlLCAweGExLCAweDY2LCAweDI4LCAweGQ5LCAweDI0LCAweGIyKTsKCSZkYXRhX2J5dGUoMHg3NiwgMHg1YiwgMHhhMiwgMHg0OSwgMHg2ZCwgMHg4YiwgMHhkMSwgMHgyNSk7CgkmZGF0YV9ieXRlKDB4NzIsIDB4ZjgsIDB4ZjYsIDB4NjQsIDB4ODYsIDB4NjgsIDB4OTgsIDB4MTYpOwoJJmRhdGFfYnl0ZSgweGQ0LCAweGE0LCAweDVjLCAweGNjLCAweDVkLCAweDY1LCAweGI2LCAweDkyKTsKCSZkYXRhX2J5dGUoMHg2YywgMHg3MCwgMHg0OCwgMHg1MCwgMHhmZCwgMHhlZCwgMHhiOSwgMHhkYSk7CgkmZGF0YV9ieXRlKDB4NWUsIDB4MTUsIDB4NDYsIDB4NTcsIDB4YTcsIDB4OGQsIDB4OWQsIDB4ODQpOwoJJmRhdGFfYnl0ZSgweDkwLCAweGQ4LCAweGFiLCAweDAwLCAweDhjLCAweGJjLCAweGQzLCAweDBhKTsKCSZkYXRhX2J5dGUoMHhmNywgMHhlNCwgMHg1OCwgMHgwNSwgMHhiOCwgMHhiMywgMHg0NSwgMHgwNik7CgkmZGF0YV9ieXRlKDB4ZDAsIDB4MmMsIDB4MWUsIDB4OGYsIDB4Y2EsIDB4M2YsIDB4MGYsIDB4MDIpOwoJJmRhdGFfYnl0ZSgweGMxLCAweGFmLCAweGJkLCAweDAzLCAweDAxLCAweDEzLCAweDhhLCAweDZiKTsKCSZkYXRhX2J5dGUoMHgzYSwgMHg5MSwgMHgxMSwgMHg0MSwgMHg0ZiwgMHg2NywgMHhkYywgMHhlYSk7CgkmZGF0YV9ieXRlKDB4OTcsIDB4ZjIsIDB4Y2YsIDB4Y2UsIDB4ZjAsIDB4YjQsIDB4ZTYsIDB4NzMpOwoJJmRhdGFfYnl0ZSgweDk2LCAweGFjLCAweDc0LCAweDIyLCAweGU3LCAweGFkLCAweDM1LCAweDg1KTsKCSZkYXRhX2J5dGUoMHhlMiwgMHhmOSwgMHgzNywgMHhlOCwgMHgxYywgMHg3NSwgMHhkZiwgMHg2ZSk7CgkmZGF0YV9ieXRlKDB4NDcsIDB4ZjEsIDB4MWEsIDB4NzEsIDB4MWQsIDB4MjksIDB4YzUsIDB4ODkpOwoJJmRhdGFfYnl0ZSgweDZmLCAweGI3LCAweDYyLCAweDBlLCAweGFhLCAweDE4LCAweGJlLCAweDFiKTsKCSZkYXRhX2J5dGUoMHhmYywgMHg1NiwgMHgzZSwgMHg0YiwgMHhjNiwgMHhkMiwgMHg3OSwgMHgyMCk7CgkmZGF0YV9ieXRlKDB4OWEsIDB4ZGIsIDB4YzAsIDB4ZmUsIDB4NzgsIDB4Y2QsIDB4NWEsIDB4ZjQpOwoJJmRhdGFfYnl0ZSgweDFmLCAweGRkLCAweGE4LCAweDMzLCAweDg4LCAweDA3LCAweGM3LCAweDMxKTsKCSZkYXRhX2J5dGUoMHhiMSwgMHgxMiwgMHgxMCwgMHg1OSwgMHgyNywgMHg4MCwgMHhlYywgMHg1Zik7CgkmZGF0YV9ieXRlKDB4NjAsIDB4NTEsIDB4N2YsIDB4YTksIDB4MTksIDB4YjUsIDB4NGEsIDB4MGQpOwoJJmRhdGFfYnl0ZSgweDJkLCAweGU1LCAweDdhLCAweDlmLCAweDkzLCAweGM5LCAweDljLCAweGVmKTsKCSZkYXRhX2J5dGUoMHhhMCwgMHhlMCwgMHgzYiwgMHg0ZCwgMHhhZSwgMHgyYSwgMHhmNSwgMHhiMCk7CgkmZGF0YV9ieXRlKDB4YzgsIDB4ZWIsIDB4YmIsIDB4M2MsIDB4ODMsIDB4NTMsIDB4OTksIDB4NjEpOwoJJmRhdGFfYnl0ZSgweDE3LCAweDJiLCAweDA0LCAweDdlLCAweGJhLCAweDc3LCAweGQ2LCAweDI2KTsKCSZkYXRhX2J5dGUoMHhlMSwgMHg2OSwgMHgxNCwgMHg2MywgMHg1NSwgMHgyMSwgMHgwYywgMHg3ZCk7CgoJJmRhdGFfYnl0ZSgweDUyLCAweDA5LCAweDZhLCAweGQ1LCAweDMwLCAweDM2LCAweGE1LCAweDM4KTsKCSZkYXRhX2J5dGUoMHhiZiwgMHg0MCwgMHhhMywgMHg5ZSwgMHg4MSwgMHhmMywgMHhkNywgMHhmYik7CgkmZGF0YV9ieXRlKDB4N2MsIDB4ZTMsIDB4MzksIDB4ODIsIDB4OWIsIDB4MmYsIDB4ZmYsIDB4ODcpOwoJJmRhdGFfYnl0ZSgweDM0LCAweDhlLCAweDQzLCAweDQ0LCAweGM0LCAweGRlLCAweGU5LCAweGNiKTsKCSZkYXRhX2J5dGUoMHg1NCwgMHg3YiwgMHg5NCwgMHgzMiwgMHhhNiwgMHhjMiwgMHgyMywgMHgzZCk7CgkmZGF0YV9ieXRlKDB4ZWUsIDB4NGMsIDB4OTUsIDB4MGIsIDB4NDIsIDB4ZmEsIDB4YzMsIDB4NGUpOwoJJmRhdGFfYnl0ZSgweDA4LCAweDJlLCAweGExLCAweDY2LCAweDI4LCAweGQ5LCAweDI0LCAweGIyKTsKCSZkYXRhX2J5dGUoMHg3NiwgMHg1YiwgMHhhMiwgMHg0OSwgMHg2ZCwgMHg4YiwgMHhkMSwgMHgyNSk7CgkmZGF0YV9ieXRlKDB4NzIsIDB4ZjgsIDB4ZjYsIDB4NjQsIDB4ODYsIDB4NjgsIDB4OTgsIDB4MTYpOwoJJmRhdGFfYnl0ZSgweGQ0LCAweGE0LCAweDVjLCAweGNjLCAweDVkLCAweDY1LCAweGI2LCAweDkyKTsKCSZkYXRhX2J5dGUoMHg2YywgMHg3MCwgMHg0OCwgMHg1MCwgMHhmZCwgMHhlZCwgMHhiOSwgMHhkYSk7CgkmZGF0YV9ieXRlKDB4NWUsIDB4MTUsIDB4NDYsIDB4NTcsIDB4YTcsIDB4OGQsIDB4OWQsIDB4ODQpOwoJJmRhdGFfYnl0ZSgweDkwLCAweGQ4LCAweGFiLCAweDAwLCAweDhjLCAweGJjLCAweGQzLCAweDBhKTsKCSZkYXRhX2J5dGUoMHhmNywgMHhlNCwgMHg1OCwgMHgwNSwgMHhiOCwgMHhiMywgMHg0NSwgMHgwNik7CgkmZGF0YV9ieXRlKDB4ZDAsIDB4MmMsIDB4MWUsIDB4OGYsIDB4Y2EsIDB4M2YsIDB4MGYsIDB4MDIpOwoJJmRhdGFfYnl0ZSgweGMxLCAweGFmLCAweGJkLCAweDAzLCAweDAxLCAweDEzLCAweDhhLCAweDZiKTsKCSZkYXRhX2J5dGUoMHgzYSwgMHg5MSwgMHgxMSwgMHg0MSwgMHg0ZiwgMHg2NywgMHhkYywgMHhlYSk7CgkmZGF0YV9ieXRlKDB4OTcsIDB4ZjIsIDB4Y2YsIDB4Y2UsIDB4ZjAsIDB4YjQsIDB4ZTYsIDB4NzMpOwoJJmRhdGFfYnl0ZSgweDk2LCAweGFjLCAweDc0LCAweDIyLCAweGU3LCAweGFkLCAweDM1LCAweDg1KTsKCSZkYXRhX2J5dGUoMHhlMiwgMHhmOSwgMHgzNywgMHhlOCwgMHgxYywgMHg3NSwgMHhkZiwgMHg2ZSk7CgkmZGF0YV9ieXRlKDB4NDcsIDB4ZjEsIDB4MWEsIDB4NzEsIDB4MWQsIDB4MjksIDB4YzUsIDB4ODkpOwoJJmRhdGFfYnl0ZSgweDZmLCAweGI3LCAweDYyLCAweDBlLCAweGFhLCAweDE4LCAweGJlLCAweDFiKTsKCSZkYXRhX2J5dGUoMHhmYywgMHg1NiwgMHgzZSwgMHg0YiwgMHhjNiwgMHhkMiwgMHg3OSwgMHgyMCk7CgkmZGF0YV9ieXRlKDB4OWEsIDB4ZGIsIDB4YzAsIDB4ZmUsIDB4NzgsIDB4Y2QsIDB4NWEsIDB4ZjQpOwoJJmRhdGFfYnl0ZSgweDFmLCAweGRkLCAweGE4LCAweDMzLCAweDg4LCAweDA3LCAweGM3LCAweDMxKTsKCSZkYXRhX2J5dGUoMHhiMSwgMHgxMiwgMHgxMCwgMHg1OSwgMHgyNywgMHg4MCwgMHhlYywgMHg1Zik7CgkmZGF0YV9ieXRlKDB4NjAsIDB4NTEsIDB4N2YsIDB4YTksIDB4MTksIDB4YjUsIDB4NGEsIDB4MGQpOwoJJmRhdGFfYnl0ZSgweDJkLCAweGU1LCAweDdhLCAweDlmLCAweDkzLCAweGM5LCAweDljLCAweGVmKTsKCSZkYXRhX2J5dGUoMHhhMCwgMHhlMCwgMHgzYiwgMHg0ZCwgMHhhZSwgMHgyYSwgMHhmNSwgMHhiMCk7CgkmZGF0YV9ieXRlKDB4YzgsIDB4ZWIsIDB4YmIsIDB4M2MsIDB4ODMsIDB4NTMsIDB4OTksIDB4NjEpOwoJJmRhdGFfYnl0ZSgweDE3LCAweDJiLCAweDA0LCAweDdlLCAweGJhLCAweDc3LCAweGQ2LCAweDI2KTsKCSZkYXRhX2J5dGUoMHhlMSwgMHg2OSwgMHgxNCwgMHg2MywgMHg1NSwgMHgyMSwgMHgwYywgMHg3ZCk7CgoJJmRhdGFfYnl0ZSgweDUyLCAweDA5LCAweDZhLCAweGQ1LCAweDMwLCAweDM2LCAweGE1LCAweDM4KTsKCSZkYXRhX2J5dGUoMHhiZiwgMHg0MCwgMHhhMywgMHg5ZSwgMHg4MSwgMHhmMywgMHhkNywgMHhmYik7CgkmZGF0YV9ieXRlKDB4N2MsIDB4ZTMsIDB4MzksIDB4ODIsIDB4OWIsIDB4MmYsIDB4ZmYsIDB4ODcpOwoJJmRhdGFfYnl0ZSgweDM0LCAweDhlLCAweDQzLCAweDQ0LCAweGM0LCAweGRlLCAweGU5LCAweGNiKTsKCSZkYXRhX2J5dGUoMHg1NCwgMHg3YiwgMHg5NCwgMHgzMiwgMHhhNiwgMHhjMiwgMHgyMywgMHgzZCk7CgkmZGF0YV9ieXRlKDB4ZWUsIDB4NGMsIDB4OTUsIDB4MGIsIDB4NDIsIDB4ZmEsIDB4YzMsIDB4NGUpOwoJJmRhdGFfYnl0ZSgweDA4LCAweDJlLCAweGExLCAweDY2LCAweDI4LCAweGQ5LCAweDI0LCAweGIyKTsKCSZkYXRhX2J5dGUoMHg3NiwgMHg1YiwgMHhhMiwgMHg0OSwgMHg2ZCwgMHg4YiwgMHhkMSwgMHgyNSk7CgkmZGF0YV9ieXRlKDB4NzIsIDB4ZjgsIDB4ZjYsIDB4NjQsIDB4ODYsIDB4NjgsIDB4OTgsIDB4MTYpOwoJJmRhdGFfYnl0ZSgweGQ0LCAweGE0LCAweDVjLCAweGNjLCAweDVkLCAweDY1LCAweGI2LCAweDkyKTsKCSZkYXRhX2J5dGUoMHg2YywgMHg3MCwgMHg0OCwgMHg1MCwgMHhmZCwgMHhlZCwgMHhiOSwgMHhkYSk7CgkmZGF0YV9ieXRlKDB4NWUsIDB4MTUsIDB4NDYsIDB4NTcsIDB4YTcsIDB4OGQsIDB4OWQsIDB4ODQpOwoJJmRhdGFfYnl0ZSgweDkwLCAweGQ4LCAweGFiLCAweDAwLCAweDhjLCAweGJjLCAweGQzLCAweDBhKTsKCSZkYXRhX2J5dGUoMHhmNywgMHhlNCwgMHg1OCwgMHgwNSwgMHhiOCwgMHhiMywgMHg0NSwgMHgwNik7CgkmZGF0YV9ieXRlKDB4ZDAsIDB4MmMsIDB4MWUsIDB4OGYsIDB4Y2EsIDB4M2YsIDB4MGYsIDB4MDIpOwoJJmRhdGFfYnl0ZSgweGMxLCAweGFmLCAweGJkLCAweDAzLCAweDAxLCAweDEzLCAweDhhLCAweDZiKTsKCSZkYXRhX2J5dGUoMHgzYSwgMHg5MSwgMHgxMSwgMHg0MSwgMHg0ZiwgMHg2NywgMHhkYywgMHhlYSk7CgkmZGF0YV9ieXRlKDB4OTcsIDB4ZjIsIDB4Y2YsIDB4Y2UsIDB4ZjAsIDB4YjQsIDB4ZTYsIDB4NzMpOwoJJmRhdGFfYnl0ZSgweDk2LCAweGFjLCAweDc0LCAweDIyLCAweGU3LCAweGFkLCAweDM1LCAweDg1KTsKCSZkYXRhX2J5dGUoMHhlMiwgMHhmOSwgMHgzNywgMHhlOCwgMHgxYywgMHg3NSwgMHhkZiwgMHg2ZSk7CgkmZGF0YV9ieXRlKDB4NDcsIDB4ZjEsIDB4MWEsIDB4NzEsIDB4MWQsIDB4MjksIDB4YzUsIDB4ODkpOwoJJmRhdGFfYnl0ZSgweDZmLCAweGI3LCAweDYyLCAweDBlLCAweGFhLCAweDE4LCAweGJlLCAweDFiKTsKCSZkYXRhX2J5dGUoMHhmYywgMHg1NiwgMHgzZSwgMHg0YiwgMHhjNiwgMHhkMiwgMHg3OSwgMHgyMCk7CgkmZGF0YV9ieXRlKDB4OWEsIDB4ZGIsIDB4YzAsIDB4ZmUsIDB4NzgsIDB4Y2QsIDB4NWEsIDB4ZjQpOwoJJmRhdGFfYnl0ZSgweDFmLCAweGRkLCAweGE4LCAweDMzLCAweDg4LCAweDA3LCAweGM3LCAweDMxKTsKCSZkYXRhX2J5dGUoMHhiMSwgMHgxMiwgMHgxMCwgMHg1OSwgMHgyNywgMHg4MCwgMHhlYywgMHg1Zik7CgkmZGF0YV9ieXRlKDB4NjAsIDB4NTEsIDB4N2YsIDB4YTksIDB4MTksIDB4YjUsIDB4NGEsIDB4MGQpOwoJJmRhdGFfYnl0ZSgweDJkLCAweGU1LCAweDdhLCAweDlmLCAweDkzLCAweGM5LCAweDljLCAweGVmKTsKCSZkYXRhX2J5dGUoMHhhMCwgMHhlMCwgMHgzYiwgMHg0ZCwgMHhhZSwgMHgyYSwgMHhmNSwgMHhiMCk7CgkmZGF0YV9ieXRlKDB4YzgsIDB4ZWIsIDB4YmIsIDB4M2MsIDB4ODMsIDB4NTMsIDB4OTksIDB4NjEpOwoJJmRhdGFfYnl0ZSgweDE3LCAweDJiLCAweDA0LCAweDdlLCAweGJhLCAweDc3LCAweGQ2LCAweDI2KTsKCSZkYXRhX2J5dGUoMHhlMSwgMHg2OSwgMHgxNCwgMHg2MywgMHg1NSwgMHgyMSwgMHgwYywgMHg3ZCk7CgoJJmRhdGFfYnl0ZSgweDUyLCAweDA5LCAweDZhLCAweGQ1LCAweDMwLCAweDM2LCAweGE1LCAweDM4KTsKCSZkYXRhX2J5dGUoMHhiZiwgMHg0MCwgMHhhMywgMHg5ZSwgMHg4MSwgMHhmMywgMHhkNywgMHhmYik7CgkmZGF0YV9ieXRlKDB4N2MsIDB4ZTMsIDB4MzksIDB4ODIsIDB4OWIsIDB4MmYsIDB4ZmYsIDB4ODcpOwoJJmRhdGFfYnl0ZSgweDM0LCAweDhlLCAweDQzLCAweDQ0LCAweGM0LCAweGRlLCAweGU5LCAweGNiKTsKCSZkYXRhX2J5dGUoMHg1NCwgMHg3YiwgMHg5NCwgMHgzMiwgMHhhNiwgMHhjMiwgMHgyMywgMHgzZCk7CgkmZGF0YV9ieXRlKDB4ZWUsIDB4NGMsIDB4OTUsIDB4MGIsIDB4NDIsIDB4ZmEsIDB4YzMsIDB4NGUpOwoJJmRhdGFfYnl0ZSgweDA4LCAweDJlLCAweGExLCAweDY2LCAweDI4LCAweGQ5LCAweDI0LCAweGIyKTsKCSZkYXRhX2J5dGUoMHg3NiwgMHg1YiwgMHhhMiwgMHg0OSwgMHg2ZCwgMHg4YiwgMHhkMSwgMHgyNSk7CgkmZGF0YV9ieXRlKDB4NzIsIDB4ZjgsIDB4ZjYsIDB4NjQsIDB4ODYsIDB4NjgsIDB4OTgsIDB4MTYpOwoJJmRhdGFfYnl0ZSgweGQ0LCAweGE0LCAweDVjLCAweGNjLCAweDVkLCAweDY1LCAweGI2LCAweDkyKTsKCSZkYXRhX2J5dGUoMHg2YywgMHg3MCwgMHg0OCwgMHg1MCwgMHhmZCwgMHhlZCwgMHhiOSwgMHhkYSk7CgkmZGF0YV9ieXRlKDB4NWUsIDB4MTUsIDB4NDYsIDB4NTcsIDB4YTcsIDB4OGQsIDB4OWQsIDB4ODQpOwoJJmRhdGFfYnl0ZSgweDkwLCAweGQ4LCAweGFiLCAweDAwLCAweDhjLCAweGJjLCAweGQzLCAweDBhKTsKCSZkYXRhX2J5dGUoMHhmNywgMHhlNCwgMHg1OCwgMHgwNSwgMHhiOCwgMHhiMywgMHg0NSwgMHgwNik7CgkmZGF0YV9ieXRlKDB4ZDAsIDB4MmMsIDB4MWUsIDB4OGYsIDB4Y2EsIDB4M2YsIDB4MGYsIDB4MDIpOwoJJmRhdGFfYnl0ZSgweGMxLCAweGFmLCAweGJkLCAweDAzLCAweDAxLCAweDEzLCAweDhhLCAweDZiKTsKCSZkYXRhX2J5dGUoMHgzYSwgMHg5MSwgMHgxMSwgMHg0MSwgMHg0ZiwgMHg2NywgMHhkYywgMHhlYSk7CgkmZGF0YV9ieXRlKDB4OTcsIDB4ZjIsIDB4Y2YsIDB4Y2UsIDB4ZjAsIDB4YjQsIDB4ZTYsIDB4NzMpOwoJJmRhdGFfYnl0ZSgweDk2LCAweGFjLCAweDc0LCAweDIyLCAweGU3LCAweGFkLCAweDM1LCAweDg1KTsKCSZkYXRhX2J5dGUoMHhlMiwgMHhmOSwgMHgzNywgMHhlOCwgMHgxYywgMHg3NSwgMHhkZiwgMHg2ZSk7CgkmZGF0YV9ieXRlKDB4NDcsIDB4ZjEsIDB4MWEsIDB4NzEsIDB4MWQsIDB4MjksIDB4YzUsIDB4ODkpOwoJJmRhdGFfYnl0ZSgweDZmLCAweGI3LCAweDYyLCAweDBlLCAweGFhLCAweDE4LCAweGJlLCAweDFiKTsKCSZkYXRhX2J5dGUoMHhmYywgMHg1NiwgMHgzZSwgMHg0YiwgMHhjNiwgMHhkMiwgMHg3OSwgMHgyMCk7CgkmZGF0YV9ieXRlKDB4OWEsIDB4ZGIsIDB4YzAsIDB4ZmUsIDB4NzgsIDB4Y2QsIDB4NWEsIDB4ZjQpOwoJJmRhdGFfYnl0ZSgweDFmLCAweGRkLCAweGE4LCAweDMzLCAweDg4LCAweDA3LCAweGM3LCAweDMxKTsKCSZkYXRhX2J5dGUoMHhiMSwgMHgxMiwgMHgxMCwgMHg1OSwgMHgyNywgMHg4MCwgMHhlYywgMHg1Zik7CgkmZGF0YV9ieXRlKDB4NjAsIDB4NTEsIDB4N2YsIDB4YTksIDB4MTksIDB4YjUsIDB4NGEsIDB4MGQpOwoJJmRhdGFfYnl0ZSgweDJkLCAweGU1LCAweDdhLCAweDlmLCAweDkzLCAweGM5LCAweDljLCAweGVmKTsKCSZkYXRhX2J5dGUoMHhhMCwgMHhlMCwgMHgzYiwgMHg0ZCwgMHhhZSwgMHgyYSwgMHhmNSwgMHhiMCk7CgkmZGF0YV9ieXRlKDB4YzgsIDB4ZWIsIDB4YmIsIDB4M2MsIDB4ODMsIDB4NTMsIDB4OTksIDB4NjEpOwoJJmRhdGFfYnl0ZSgweDE3LCAweDJiLCAweDA0LCAweDdlLCAweGJhLCAweDc3LCAweGQ2LCAweDI2KTsKCSZkYXRhX2J5dGUoMHhlMSwgMHg2OSwgMHgxNCwgMHg2MywgMHg1NSwgMHgyMSwgMHgwYywgMHg3ZCk7CiZmdW5jdGlvbl9lbmRfQigiX3g4Nl9BRVNfZGVjcnlwdCIpOwoKIyB2b2lkIEFFU19kZWNyeXB0IChjb25zdCB2b2lkICppbnAsdm9pZCAqb3V0LGNvbnN0IEFFU19LRVkgKmtleSk7CiZmdW5jdGlvbl9iZWdpbigiQUVTX2RlY3J5cHQiKTsKCSZtb3YJKCRhY2MsJndwYXJhbSgwKSk7CQkjIGxvYWQgaW5wCgkmbW92CSgka2V5LCZ3cGFyYW0oMikpOwkJIyBsb2FkIGtleQoKCSZtb3YJKCRzMCwiZXNwIik7Cgkmc3ViCSgiZXNwIiwzNik7CgkmYW5kCSgiZXNwIiwtNjQpOwkJCSMgYWxpZ24gdG8gY2FjaGUtbGluZQoKCSMgcGxhY2Ugc3RhY2sgZnJhbWUganVzdCAiYWJvdmUiIHRoZSBrZXkgc2NoZWR1bGUKCSZsZWEJKCRzMSwmRFdQKC02NC02Mywka2V5KSk7Cgkmc3ViCSgkczEsImVzcCIpOwoJJm5lZwkoJHMxKTsKCSZhbmQJKCRzMSwweDNDMCk7CSMgbW9kdWxvIDEwMjQsIGJ1dCBhbGlnbmVkIHRvIGNhY2hlLWxpbmUKCSZzdWIJKCJlc3AiLCRzMSk7CgkmYWRkCSgiZXNwIiw0KTsJIyA0IGlzIHJlc2VydmVkIGZvciBjYWxsZXIncyByZXR1cm4gYWRkcmVzcwoJJm1vdgkoJF9lc3AsJHMwKTsJIyBzYXZlIHN0YWNrIHBvaW50ZXIKCgkmY2FsbCAgICgmbGFiZWwoInBpY19wb2ludCIpKTsgICAgICAgICAgIyBtYWtlIGl0IFBJQyEKCSZzZXRfbGFiZWwoInBpY19wb2ludCIpOwoJJmJsaW5kcG9wKCR0YmwpOwoJJnBpY21ldXAoJHMwLCJPUEVOU1NMX2lhMzJjYXBfUCIsJHRibCwmbGFiZWwoInBpY19wb2ludCIpKSBpZighJHg4Nm9ubHkpOwoJJmxlYSAgICAoJHRibCwmRFdQKCZsYWJlbCgiQUVTX1RkIikuIi0iLiZsYWJlbCgicGljX3BvaW50IiksJHRibCkpOwoKCSMgcGljayBUZDQgY29weSB3aGljaCBjYW4ndCAib3ZlcmxhcCIgd2l0aCBzdGFjayBmcmFtZSBvciBrZXkgc2NoZWR1bGUKCSZsZWEJKCRzMSwmRFdQKDc2OC00LCJlc3AiKSk7Cgkmc3ViCSgkczEsJHRibCk7CgkmYW5kCSgkczEsMHgzMDApOwoJJmxlYQkoJHRibCwmRFdQKDIwNDgrMTI4LCR0YmwsJHMxKSk7CgoJCQkJCWlmICghJHg4Nm9ubHkpIHsKCSZidAkoJkRXUCgwLCRzMCksMjUpOwkjIGNoZWNrIGZvciBTU0UgYml0Cgkmam5jCSgmbGFiZWwoIng4NiIpKTsKCgkmbW92cQkoIm1tMCIsJlFXUCgwLCRhY2MpKTsKCSZtb3ZxCSgibW00IiwmUVdQKDgsJGFjYykpOwoJJmNhbGwJKCJfc3NlX0FFU19kZWNyeXB0X2NvbXBhY3QiKTsKCSZtb3YJKCJlc3AiLCRfZXNwKTsJCQkjIHJlc3RvcmUgc3RhY2sgcG9pbnRlcgoJJm1vdgkoJGFjYywmd3BhcmFtKDEpKTsJCSMgbG9hZCBvdXQKCSZtb3ZxCSgmUVdQKDAsJGFjYyksIm1tMCIpOwkJIyB3cml0ZSBvdXRwdXQgZGF0YQoJJm1vdnEJKCZRV1AoOCwkYWNjKSwibW00Iik7CgkmZW1tcwkoKTsKCSZmdW5jdGlvbl9lbmRfQSgpOwoJCQkJCX0KCSZzZXRfbGFiZWwoIng4NiIsMTYpOwoJJm1vdgkoJF90YmwsJHRibCk7CgkmbW92CSgkczAsJkRXUCgwLCRhY2MpKTsJCSMgbG9hZCBpbnB1dCBkYXRhCgkmbW92CSgkczEsJkRXUCg0LCRhY2MpKTsKCSZtb3YJKCRzMiwmRFdQKDgsJGFjYykpOwoJJm1vdgkoJHMzLCZEV1AoMTIsJGFjYykpOwoJJmNhbGwJKCJfeDg2X0FFU19kZWNyeXB0X2NvbXBhY3QiKTsKCSZtb3YJKCJlc3AiLCRfZXNwKTsJCQkjIHJlc3RvcmUgc3RhY2sgcG9pbnRlcgoJJm1vdgkoJGFjYywmd3BhcmFtKDEpKTsJCSMgbG9hZCBvdXQKCSZtb3YJKCZEV1AoMCwkYWNjKSwkczApOwkJIyB3cml0ZSBvdXRwdXQgZGF0YQoJJm1vdgkoJkRXUCg0LCRhY2MpLCRzMSk7CgkmbW92CSgmRFdQKDgsJGFjYyksJHMyKTsKCSZtb3YJKCZEV1AoMTIsJGFjYyksJHMzKTsKJmZ1bmN0aW9uX2VuZCgiQUVTX2RlY3J5cHQiKTsKCiMgdm9pZCBBRVNfY2JjX2VuY3J5cHQgKGNvbnN0IHZvaWQgY2hhciAqaW5wLCB1bnNpZ25lZCBjaGFyICpvdXQsCiMJCQlzaXplX3QgbGVuZ3RoLCBjb25zdCBBRVNfS0VZICprZXksCiMJCQl1bnNpZ25lZCBjaGFyICppdnAsY29uc3QgaW50IGVuYyk7CnsKIyBzdGFjayBmcmFtZSBsYXlvdXQKIyAgICAgICAgICAgICAtNCglZXNwKQkJIyByZXR1cm4gYWRkcmVzcwkgMCglZXNwKQojICAgICAgICAgICAgICAwKCVlc3ApCQkjIHMwIGJhY2tpbmcgc3RvcmUJIDQoJWVzcCkJCiMgICAgICAgICAgICAgIDQoJWVzcCkJCSMgczEgYmFja2luZyBzdG9yZQkgOCglZXNwKQojICAgICAgICAgICAgICA4KCVlc3ApCQkjIHMyIGJhY2tpbmcgc3RvcmUJMTIoJWVzcCkKIyAgICAgICAgICAgICAxMiglZXNwKQkJIyBzMyBiYWNraW5nIHN0b3JlCTE2KCVlc3ApCiMgICAgICAgICAgICAgMTYoJWVzcCkJCSMga2V5IGJhY2t1cAkJMjAoJWVzcCkKIyAgICAgICAgICAgICAyMCglZXNwKQkJIyBlbmQgb2Yga2V5IHNjaGVkdWxlCTI0KCVlc3ApCiMgICAgICAgICAgICAgMjQoJWVzcCkJCSMgJWVicCBiYWNrdXAJCTI4KCVlc3ApCiMgICAgICAgICAgICAgMjgoJWVzcCkJCSMgJWVzcCBiYWNrdXAKbXkgJF9pbnA9JkRXUCgzMiwiZXNwIik7CSMgY29weSBvZiB3cGFyYW0oMCkKbXkgJF9vdXQ9JkRXUCgzNiwiZXNwIik7CSMgY29weSBvZiB3cGFyYW0oMSkKbXkgJF9sZW49JkRXUCg0MCwiZXNwIik7CSMgY29weSBvZiB3cGFyYW0oMikKbXkgJF9rZXk9JkRXUCg0NCwiZXNwIik7CSMgY29weSBvZiB3cGFyYW0oMykKbXkgJF9pdnA9JkRXUCg0OCwiZXNwIik7CSMgY29weSBvZiB3cGFyYW0oNCkKbXkgJF90bXA9JkRXUCg1MiwiZXNwIik7CSMgdm9sYXRpbGUgdmFyaWFibGUKIwpteSAkaXZlYz0mRFdQKDYwLCJlc3AiKTsJIyBpdmVjWzE2XQpteSAkYWVzX2tleT0mRFdQKDc2LCJlc3AiKTsJIyBjb3B5IG9mIGFlc19rZXkKbXkgJG1hcms9JkRXUCg3NisyNDAsImVzcCIpOwkjIGNvcHkgb2YgYWVzX2tleS0+cm91bmRzCgomZnVuY3Rpb25fYmVnaW4oIkFFU19jYmNfZW5jcnlwdCIpOwoJJm1vdgkoJHMyIGVxICJlY3giPyAkczIgOiAiIiwmd3BhcmFtKDIpKTsJIyBsb2FkIGxlbgoJJmNtcAkoJHMyLDApOwoJJmplCSgmbGFiZWwoImRyb3Bfb3V0IikpOwoKCSZjYWxsICAgKCZsYWJlbCgicGljX3BvaW50IikpOwkJIyBtYWtlIGl0IFBJQyEKCSZzZXRfbGFiZWwoInBpY19wb2ludCIpOwoJJmJsaW5kcG9wKCR0YmwpOwoJJnBpY21ldXAoJHMwLCJPUEVOU1NMX2lhMzJjYXBfUCIsJHRibCwmbGFiZWwoInBpY19wb2ludCIpKSBpZighJHg4Nm9ubHkpOwoKCSZjbXAJKCZ3cGFyYW0oNSksMCk7CgkmbGVhICAgICgkdGJsLCZEV1AoJmxhYmVsKCJBRVNfVGUiKS4iLSIuJmxhYmVsKCJwaWNfcG9pbnQiKSwkdGJsKSk7Cgkmam5lCSgmbGFiZWwoInBpY2tlZF90ZSIpKTsKCSZsZWEJKCR0YmwsJkRXUCgmbGFiZWwoIkFFU19UZCIpLiItIi4mbGFiZWwoIkFFU19UZSIpLCR0YmwpKTsKCSZzZXRfbGFiZWwoInBpY2tlZF90ZSIpOwoKCSMgb25lIGNhbiBhcmd1ZSBpZiB0aGlzIGlzIHJlcXVpcmVkCgkmcHVzaGYJKCk7CgkmY2xkCSgpOwoKCSZjbXAJKCRzMiwkc3BlZWRfbGltaXQpOwoJJmpiCSgmbGFiZWwoInNsb3dfd2F5IikpOwoJJnRlc3QJKCRzMiwxNSk7Cgkmam56CSgmbGFiZWwoInNsb3dfd2F5IikpOwoJCQkJCWlmICghJHg4Nm9ubHkpIHsKCSZidAkoJkRXUCgwLCRzMCksMjgpOwkjIGNoZWNrIGZvciBoeXBlci10aHJlYWRpbmcgYml0CgkmamMJKCZsYWJlbCgic2xvd193YXkiKSk7CgkJCQkJfQoJIyBwcmUtYWxsb2NhdGUgYWxpZ25lZCBzdGFjayBmcmFtZS4uLgoJJmxlYQkoJGFjYywmRFdQKC04MC0yNDQsImVzcCIpKTsKCSZhbmQJKCRhY2MsLTY0KTsKCgkjIC4uLiBhbmQgbWFrZSBzdXJlIGl0IGRvZXNuJ3QgYWxpYXMgd2l0aCAkdGJsIG1vZHVsbyA0MDk2CgkmbW92CSgkczAsJHRibCk7CgkmbGVhCSgkczEsJkRXUCgyMDQ4KzI1NiwkdGJsKSk7CgkmbW92CSgkczMsJGFjYyk7CgkmYW5kCSgkczAsMHhmZmYpOwkJIyBzID0gJWVicCYweGZmZgoJJmFuZAkoJHMxLDB4ZmZmKTsJCSMgZSA9ICglZWJwKzIwNDgrMjU2KSYweGZmZgoJJmFuZAkoJHMzLDB4ZmZmKTsJCSMgcCA9ICVlc3AmMHhmZmYKCgkmY21wCSgkczMsJHMxKTsJCSMgaWYgKHA+PWUpICVlc3AgPS0gKHAtZSk7CgkmamIJKCZsYWJlbCgidGJsX2JyZWFrX291dCIpKTsKCSZzdWIJKCRzMywkczEpOwoJJnN1YgkoJGFjYywkczMpOwoJJmptcAkoJmxhYmVsKCJ0Ymxfb2siKSk7Cgkmc2V0X2xhYmVsKCJ0YmxfYnJlYWtfb3V0Iiw0KTsJIyBlbHNlICVlc3AgLT0gKHAtcykmMHhmZmYgKyBmcmFtZXN6OwoJJnN1YgkoJHMzLCRzMCk7CgkmYW5kCSgkczMsMHhmZmYpOwoJJmFkZAkoJHMzLDM4NCk7Cgkmc3ViCSgkYWNjLCRzMyk7Cgkmc2V0X2xhYmVsKCJ0Ymxfb2siLDQpOwoKCSZsZWEJKCRzMywmd3BhcmFtKDApKTsJIyBvYnRhaW4gcG9pbnRlciB0byBwYXJhbWV0ZXIgYmxvY2sKCSZleGNoCSgiZXNwIiwkYWNjKTsJCSMgYWxsb2NhdGUgc3RhY2sgZnJhbWUKCSZhZGQJKCJlc3AiLDQpOwkJIyByZXNlcnZlIGZvciByZXR1cm4gYWRkcmVzcyEKCSZtb3YJKCRfdGJsLCR0YmwpOwkJIyBzYXZlICVlYnAKCSZtb3YJKCRfZXNwLCRhY2MpOwkJIyBzYXZlICVlc3AKCgkmbW92CSgkczAsJkRXUCgwLCRzMykpOwkjIGxvYWQgaW5wCgkmbW92CSgkczEsJkRXUCg0LCRzMykpOwkjIGxvYWQgb3V0CgkjJm1vdgkoJHMyLCZEV1AoOCwkczMpKTsJIyBsb2FkIGxlbgoJJm1vdgkoJGtleSwmRFdQKDEyLCRzMykpOwkjIGxvYWQga2V5CgkmbW92CSgkYWNjLCZEV1AoMTYsJHMzKSk7CSMgbG9hZCBpdnAKCSZtb3YJKCRzMywmRFdQKDIwLCRzMykpOwkjIGxvYWQgZW5jIGZsYWcKCgkmbW92CSgkX2lucCwkczApOwkJIyBzYXZlIGNvcHkgb2YgaW5wCgkmbW92CSgkX291dCwkczEpOwkJIyBzYXZlIGNvcHkgb2Ygb3V0CgkmbW92CSgkX2xlbiwkczIpOwkJIyBzYXZlIGNvcHkgb2YgbGVuCgkmbW92CSgkX2tleSwka2V5KTsJCSMgc2F2ZSBjb3B5IG9mIGtleQoJJm1vdgkoJF9pdnAsJGFjYyk7CQkjIHNhdmUgY29weSBvZiBpdnAKCgkmbW92CSgkbWFyaywwKTsJCSMgY29weSBvZiBhZXNfa2V5LT5yb3VuZHMgPSAwOwoJIyBkbyB3ZSBjb3B5IGtleSBzY2hlZHVsZSB0byBzdGFjaz8KCSZtb3YJKCRzMSBlcSAiZWJ4IiA/ICRzMSA6ICIiLCRrZXkpOwoJJm1vdgkoJHMyIGVxICJlY3giID8gJHMyIDogIiIsMjQ0LzQpOwoJJnN1YgkoJHMxLCR0YmwpOwoJJm1vdgkoImVzaSIsJGtleSk7CgkmYW5kCSgkczEsMHhmZmYpOwoJJmxlYQkoImVkaSIsJGFlc19rZXkpOwoJJmNtcAkoJHMxLDIwNDgrMjU2KTsKCSZqYgkoJmxhYmVsKCJkb19jb3B5IikpOwoJJmNtcAkoJHMxLDQwOTYtMjQ0KTsKCSZqYgkoJmxhYmVsKCJza2lwX2NvcHkiKSk7Cgkmc2V0X2xhYmVsKCJkb19jb3B5Iiw0KTsKCQkmbW92CSgkX2tleSwiZWRpIik7CgkJJmRhdGFfd29yZCgweEE1RjNGNjg5KTsJIyByZXAgbW92c2QKCSZzZXRfbGFiZWwoInNraXBfY29weSIpOwoKCSZtb3YJKCRrZXksMTYpOwoJJnNldF9sYWJlbCgicHJlZmV0Y2hfdGJsIiw0KTsKCQkmbW92CSgkczAsJkRXUCgwLCR0YmwpKTsKCQkmbW92CSgkczEsJkRXUCgzMiwkdGJsKSk7CgkJJm1vdgkoJHMyLCZEV1AoNjQsJHRibCkpOwoJCSZtb3YJKCRhY2MsJkRXUCg5NiwkdGJsKSk7CgkJJmxlYQkoJHRibCwmRFdQKDEyOCwkdGJsKSk7CgkJJnN1YgkoJGtleSwxKTsKCSZqbnoJKCZsYWJlbCgicHJlZmV0Y2hfdGJsIikpOwoJJnN1YgkoJHRibCwyMDQ4KTsKCgkmbW92CSgkYWNjLCRfaW5wKTsKCSZtb3YJKCRrZXksJF9pdnApOwoKCSZjbXAJKCRzMywwKTsKCSZqZQkoJmxhYmVsKCJmYXN0X2RlY3J5cHQiKSk7CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRU5DUllQVCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKCSZtb3YJKCRzMCwmRFdQKDAsJGtleSkpOwkJIyBsb2FkIGl2CgkmbW92CSgkczEsJkRXUCg0LCRrZXkpKTsKCgkmc2V0X2xhYmVsKCJmYXN0X2VuY19sb29wIiwxNik7CgkJJm1vdgkoJHMyLCZEV1AoOCwka2V5KSk7CgkJJm1vdgkoJHMzLCZEV1AoMTIsJGtleSkpOwoKCQkmeG9yCSgkczAsJkRXUCgwLCRhY2MpKTsJIyB4b3IgaW5wdXQgZGF0YQoJCSZ4b3IJKCRzMSwmRFdQKDQsJGFjYykpOwoJCSZ4b3IJKCRzMiwmRFdQKDgsJGFjYykpOwoJCSZ4b3IJKCRzMywmRFdQKDEyLCRhY2MpKTsKCgkJJm1vdgkoJGtleSwkX2tleSk7CQkjIGxvYWQga2V5CgkJJmNhbGwJKCJfeDg2X0FFU19lbmNyeXB0Iik7CgoJCSZtb3YJKCRhY2MsJF9pbnApOwkJIyBsb2FkIGlucAoJCSZtb3YJKCRrZXksJF9vdXQpOwkJIyBsb2FkIG91dAoKCQkmbW92CSgmRFdQKDAsJGtleSksJHMwKTsJIyBzYXZlIG91dHB1dCBkYXRhCgkJJm1vdgkoJkRXUCg0LCRrZXkpLCRzMSk7CgkJJm1vdgkoJkRXUCg4LCRrZXkpLCRzMik7CgkJJm1vdgkoJkRXUCgxMiwka2V5KSwkczMpOwoKCQkmbGVhCSgkYWNjLCZEV1AoMTYsJGFjYykpOwkjIGFkdmFuY2UgaW5wCgkJJm1vdgkoJHMyLCRfbGVuKTsJCSMgbG9hZCBsZW4KCQkmbW92CSgkX2lucCwkYWNjKTsJCSMgc2F2ZSBpbnAKCQkmbGVhCSgkczMsJkRXUCgxNiwka2V5KSk7CSMgYWR2YW5jZSBvdXQKCQkmbW92CSgkX291dCwkczMpOwkJIyBzYXZlIG91dAoJCSZzdWIJKCRzMiwxNik7CQkjIGRlY3JlYXNlIGxlbgoJCSZtb3YJKCRfbGVuLCRzMik7CQkjIHNhdmUgbGVuCgkmam56CSgmbGFiZWwoImZhc3RfZW5jX2xvb3AiKSk7CgkmbW92CSgkYWNjLCRfaXZwKTsJCSMgbG9hZCBpdnAKCSZtb3YJKCRzMiwmRFdQKDgsJGtleSkpOwkjIHJlc3RvcmUgbGFzdCAyIGR3b3JkcwoJJm1vdgkoJHMzLCZEV1AoMTIsJGtleSkpOwoJJm1vdgkoJkRXUCgwLCRhY2MpLCRzMCk7CSMgc2F2ZSBpdmVjCgkmbW92CSgmRFdQKDQsJGFjYyksJHMxKTsKCSZtb3YJKCZEV1AoOCwkYWNjKSwkczIpOwoJJm1vdgkoJkRXUCgxMiwkYWNjKSwkczMpOwoKCSZjbXAJKCRtYXJrLDApOwkJIyB3YXMgdGhlIGtleSBzY2hlZHVsZSBjb3BpZWQ/CgkmbW92CSgiZWRpIiwkX2tleSk7CgkmamUJKCZsYWJlbCgic2tpcF9lemVybyIpKTsKCSMgemVybyBjb3B5IG9mIGtleSBzY2hlZHVsZQoJJm1vdgkoImVjeCIsMjQwLzQpOwoJJnhvcgkoImVheCIsImVheCIpOwoJJmFsaWduCSg0KTsKCSZkYXRhX3dvcmQoMHhBQkYzRjY4OSk7CSMgcmVwIHN0b3NkCgkmc2V0X2xhYmVsKCJza2lwX2V6ZXJvIikKCSZtb3YJKCJlc3AiLCRfZXNwKTsKCSZwb3BmCSgpOwogICAgJnNldF9sYWJlbCgiZHJvcF9vdXQiKTsKCSZmdW5jdGlvbl9lbmRfQSgpOwoJJnB1c2hmCSgpOwkJCSMga2x1ZGdlLCBuZXZlciBleGVjdXRlZAoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERFQ1JZUFQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCiZzZXRfbGFiZWwoImZhc3RfZGVjcnlwdCIsMTYpOwoKCSZjbXAJKCRhY2MsJF9vdXQpOwoJJmplCSgmbGFiZWwoImZhc3RfZGVjX2luX3BsYWNlIikpOwkjIGluLXBsYWNlIHByb2Nlc3NpbmcuLi4KCgkmbW92CSgkX3RtcCwka2V5KTsKCgkmYWxpZ24JKDQpOwoJJnNldF9sYWJlbCgiZmFzdF9kZWNfbG9vcCIsMTYpOwoJCSZtb3YJKCRzMCwmRFdQKDAsJGFjYykpOwkjIHJlYWQgaW5wdXQKCQkmbW92CSgkczEsJkRXUCg0LCRhY2MpKTsKCQkmbW92CSgkczIsJkRXUCg4LCRhY2MpKTsKCQkmbW92CSgkczMsJkRXUCgxMiwkYWNjKSk7CgoJCSZtb3YJKCRrZXksJF9rZXkpOwkJIyBsb2FkIGtleQoJCSZjYWxsCSgiX3g4Nl9BRVNfZGVjcnlwdCIpOwoKCQkmbW92CSgka2V5LCRfdG1wKTsJCSMgbG9hZCBpdnAKCQkmbW92CSgkYWNjLCRfbGVuKTsJCSMgbG9hZCBsZW4KCQkmeG9yCSgkczAsJkRXUCgwLCRrZXkpKTsJIyB4b3IgaXYKCQkmeG9yCSgkczEsJkRXUCg0LCRrZXkpKTsKCQkmeG9yCSgkczIsJkRXUCg4LCRrZXkpKTsKCQkmeG9yCSgkczMsJkRXUCgxMiwka2V5KSk7CgoJCSZtb3YJKCRrZXksJF9vdXQpOwkJIyBsb2FkIG91dAoJCSZtb3YJKCRhY2MsJF9pbnApOwkJIyBsb2FkIGlucAoKCQkmbW92CSgmRFdQKDAsJGtleSksJHMwKTsJIyB3cml0ZSBvdXRwdXQKCQkmbW92CSgmRFdQKDQsJGtleSksJHMxKTsKCQkmbW92CSgmRFdQKDgsJGtleSksJHMyKTsKCQkmbW92CSgmRFdQKDEyLCRrZXkpLCRzMyk7CgoJCSZtb3YJKCRzMiwkX2xlbik7CQkjIGxvYWQgbGVuCgkJJm1vdgkoJF90bXAsJGFjYyk7CQkjIHNhdmUgaXZwCgkJJmxlYQkoJGFjYywmRFdQKDE2LCRhY2MpKTsJIyBhZHZhbmNlIGlucAoJCSZtb3YJKCRfaW5wLCRhY2MpOwkJIyBzYXZlIGlucAoJCSZsZWEJKCRrZXksJkRXUCgxNiwka2V5KSk7CSMgYWR2YW5jZSBvdXQKCQkmbW92CSgkX291dCwka2V5KTsJCSMgc2F2ZSBvdXQKCQkmc3ViCSgkczIsMTYpOwkJIyBkZWNyZWFzZSBsZW4KCQkmbW92CSgkX2xlbiwkczIpOwkJIyBzYXZlIGxlbgoJJmpuegkoJmxhYmVsKCJmYXN0X2RlY19sb29wIikpOwoJJm1vdgkoJGtleSwkX3RtcCk7CQkjIGxvYWQgdGVtcCBpdnAKCSZtb3YJKCRhY2MsJF9pdnApOwkJIyBsb2FkIHVzZXIgaXZwCgkmbW92CSgkczAsJkRXUCgwLCRrZXkpKTsJIyBsb2FkIGl2CgkmbW92CSgkczEsJkRXUCg0LCRrZXkpKTsKCSZtb3YJKCRzMiwmRFdQKDgsJGtleSkpOwoJJm1vdgkoJHMzLCZEV1AoMTIsJGtleSkpOwoJJm1vdgkoJkRXUCgwLCRhY2MpLCRzMCk7CSMgY29weSBiYWNrIHRvIHVzZXIKCSZtb3YJKCZEV1AoNCwkYWNjKSwkczEpOwoJJm1vdgkoJkRXUCg4LCRhY2MpLCRzMik7CgkmbW92CSgmRFdQKDEyLCRhY2MpLCRzMyk7Cgkmam1wCSgmbGFiZWwoImZhc3RfZGVjX291dCIpKTsKCiAgICAmc2V0X2xhYmVsKCJmYXN0X2RlY19pbl9wbGFjZSIsMTYpOwoJJnNldF9sYWJlbCgiZmFzdF9kZWNfaW5fcGxhY2VfbG9vcCIpOwoJCSZtb3YJKCRzMCwmRFdQKDAsJGFjYykpOwkjIHJlYWQgaW5wdXQKCQkmbW92CSgkczEsJkRXUCg0LCRhY2MpKTsKCQkmbW92CSgkczIsJkRXUCg4LCRhY2MpKTsKCQkmbW92CSgkczMsJkRXUCgxMiwkYWNjKSk7CgoJCSZsZWEJKCRrZXksJGl2ZWMpOwoJCSZtb3YJKCZEV1AoMCwka2V5KSwkczApOwkjIGNvcHkgdG8gdGVtcAoJCSZtb3YJKCZEV1AoNCwka2V5KSwkczEpOwoJCSZtb3YJKCZEV1AoOCwka2V5KSwkczIpOwoJCSZtb3YJKCZEV1AoMTIsJGtleSksJHMzKTsKCgkJJm1vdgkoJGtleSwkX2tleSk7CQkjIGxvYWQga2V5CgkJJmNhbGwJKCJfeDg2X0FFU19kZWNyeXB0Iik7CgoJCSZtb3YJKCRrZXksJF9pdnApOwkJIyBsb2FkIGl2cAoJCSZtb3YJKCRhY2MsJF9vdXQpOwkJIyBsb2FkIG91dAoJCSZ4b3IJKCRzMCwmRFdQKDAsJGtleSkpOwkjIHhvciBpdgoJCSZ4b3IJKCRzMSwmRFdQKDQsJGtleSkpOwoJCSZ4b3IJKCRzMiwmRFdQKDgsJGtleSkpOwoJCSZ4b3IJKCRzMywmRFdQKDEyLCRrZXkpKTsKCgkJJm1vdgkoJkRXUCgwLCRhY2MpLCRzMCk7CSMgd3JpdGUgb3V0cHV0CgkJJm1vdgkoJkRXUCg0LCRhY2MpLCRzMSk7CgkJJm1vdgkoJkRXUCg4LCRhY2MpLCRzMik7CgkJJm1vdgkoJkRXUCgxMiwkYWNjKSwkczMpOwoKCQkmbGVhCSgkYWNjLCZEV1AoMTYsJGFjYykpOwkjIGFkdmFuY2Ugb3V0CgkJJm1vdgkoJF9vdXQsJGFjYyk7CQkjIHNhdmUgb3V0CgoJCSZsZWEJKCRhY2MsJGl2ZWMpOwoJCSZtb3YJKCRzMCwmRFdQKDAsJGFjYykpOwkjIHJlYWQgdGVtcAoJCSZtb3YJKCRzMSwmRFdQKDQsJGFjYykpOwoJCSZtb3YJKCRzMiwmRFdQKDgsJGFjYykpOwoJCSZtb3YJKCRzMywmRFdQKDEyLCRhY2MpKTsKCgkJJm1vdgkoJkRXUCgwLCRrZXkpLCRzMCk7CSMgY29weSBpdgoJCSZtb3YJKCZEV1AoNCwka2V5KSwkczEpOwoJCSZtb3YJKCZEV1AoOCwka2V5KSwkczIpOwoJCSZtb3YJKCZEV1AoMTIsJGtleSksJHMzKTsKCgkJJm1vdgkoJGFjYywkX2lucCk7CQkjIGxvYWQgaW5wCgkJJm1vdgkoJHMyLCRfbGVuKTsJCSMgbG9hZCBsZW4KCQkmbGVhCSgkYWNjLCZEV1AoMTYsJGFjYykpOwkjIGFkdmFuY2UgaW5wCgkJJm1vdgkoJF9pbnAsJGFjYyk7CQkjIHNhdmUgaW5wCgkJJnN1YgkoJHMyLDE2KTsJCSMgZGVjcmVhc2UgbGVuCgkJJm1vdgkoJF9sZW4sJHMyKTsJCSMgc2F2ZSBsZW4KCSZqbnoJKCZsYWJlbCgiZmFzdF9kZWNfaW5fcGxhY2VfbG9vcCIpKTsKCiAgICAmc2V0X2xhYmVsKCJmYXN0X2RlY19vdXQiLDQpOwoJJmNtcAkoJG1hcmssMCk7CQkjIHdhcyB0aGUga2V5IHNjaGVkdWxlIGNvcGllZD8KCSZtb3YJKCJlZGkiLCRfa2V5KTsKCSZqZQkoJmxhYmVsKCJza2lwX2R6ZXJvIikpOwoJIyB6ZXJvIGNvcHkgb2Yga2V5IHNjaGVkdWxlCgkmbW92CSgiZWN4IiwyNDAvNCk7CgkmeG9yCSgiZWF4IiwiZWF4Iik7CgkmYWxpZ24JKDQpOwoJJmRhdGFfd29yZCgweEFCRjNGNjg5KTsJIyByZXAgc3Rvc2QKCSZzZXRfbGFiZWwoInNraXBfZHplcm8iKQoJJm1vdgkoImVzcCIsJF9lc3ApOwoJJnBvcGYJKCk7CgkmZnVuY3Rpb25fZW5kX0EoKTsKCSZwdXNoZgkoKTsJCQkjIGtsdWRnZSwgbmV2ZXIgZXhlY3V0ZWQKCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU0xPVyBST1VUSU5FIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKJnNldF9sYWJlbCgic2xvd193YXkiLDE2KTsKCgkmbW92CSgkczAsJkRXUCgwLCRzMCkpIGlmICghJHg4Nm9ubHkpOyMgbG9hZCBPUEVOU1NMX2lhMzJjYXAKCSZtb3YJKCRrZXksJndwYXJhbSgzKSk7CSMgbG9hZCBrZXkKCgkjIHByZS1hbGxvY2F0ZSBhbGlnbmVkIHN0YWNrIGZyYW1lLi4uCgkmbGVhCSgkYWNjLCZEV1AoLTgwLCJlc3AiKSk7CgkmYW5kCSgkYWNjLC02NCk7CgoJIyAuLi4gYW5kIG1ha2Ugc3VyZSBpdCBkb2Vzbid0IGFsaWFzIHdpdGggJGtleSBtb2R1bG8gMTAyNAoJJmxlYQkoJHMxLCZEV1AoLTgwLTYzLCRrZXkpKTsKCSZzdWIJKCRzMSwkYWNjKTsKCSZuZWcJKCRzMSk7CgkmYW5kCSgkczEsMHgzQzApOwkjIG1vZHVsbyAxMDI0LCBidXQgYWxpZ25lZCB0byBjYWNoZS1saW5lCgkmc3ViCSgkYWNjLCRzMSk7CgoJIyBwaWNrIFMtYm94IGNvcHkgd2hpY2ggY2FuJ3Qgb3ZlcmxhcCB3aXRoIHN0YWNrIGZyYW1lIG9yICRrZXkKCSZsZWEJKCRzMSwmRFdQKDc2OCwkYWNjKSk7Cgkmc3ViCSgkczEsJHRibCk7CgkmYW5kCSgkczEsMHgzMDApOwoJJmxlYQkoJHRibCwmRFdQKDIwNDgrMTI4LCR0YmwsJHMxKSk7CgoJJmxlYQkoJHMzLCZ3cGFyYW0oMCkpOwkjIHBvaW50ZXIgdG8gcGFyYW1ldGVyIGJsb2NrCgoJJmV4Y2gJKCJlc3AiLCRhY2MpOwoJJmFkZAkoImVzcCIsNCk7CQkjIHJlc2VydmUgZm9yIHJldHVybiBhZGRyZXNzIQoJJm1vdgkoJF90YmwsJHRibCk7CQkjIHNhdmUgJWVicAoJJm1vdgkoJF9lc3AsJGFjYyk7CQkjIHNhdmUgJWVzcAoJJm1vdgkoJF90bXAsJHMwKTsJCSMgc2F2ZSBPUEVOU1NMX2lhMzJjYXAKCgkmbW92CSgkczAsJkRXUCgwLCRzMykpOwkjIGxvYWQgaW5wCgkmbW92CSgkczEsJkRXUCg0LCRzMykpOwkjIGxvYWQgb3V0CgkjJm1vdgkoJHMyLCZEV1AoOCwkczMpKTsJIyBsb2FkIGxlbgoJIyZtb3YJKCRrZXksJkRXUCgxMiwkczMpKTsJIyBsb2FkIGtleQoJJm1vdgkoJGFjYywmRFdQKDE2LCRzMykpOwkjIGxvYWQgaXZwCgkmbW92CSgkczMsJkRXUCgyMCwkczMpKTsJIyBsb2FkIGVuYyBmbGFnCgoJJm1vdgkoJF9pbnAsJHMwKTsJCSMgc2F2ZSBjb3B5IG9mIGlucAoJJm1vdgkoJF9vdXQsJHMxKTsJCSMgc2F2ZSBjb3B5IG9mIG91dAoJJm1vdgkoJF9sZW4sJHMyKTsJCSMgc2F2ZSBjb3B5IG9mIGxlbgoJJm1vdgkoJF9rZXksJGtleSk7CQkjIHNhdmUgY29weSBvZiBrZXkKCSZtb3YJKCRfaXZwLCRhY2MpOwkJIyBzYXZlIGNvcHkgb2YgaXZwCgoJJm1vdgkoJGtleSwkYWNjKTsKCSZtb3YJKCRhY2MsJHMwKTsKCgkmY21wCSgkczMsMCk7CgkmamUJKCZsYWJlbCgic2xvd19kZWNyeXB0IikpOwoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTTE9XIEVOQ1JZUFQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIwoJJmNtcAkoJHMyLDE2KTsKCSZtb3YJKCRzMywkczEpOwoJJmpiCSgmbGFiZWwoInNsb3dfZW5jX3RhaWwiKSk7CgoJCQkJCWlmICghJHg4Nm9ubHkpIHsKCSZidAkoJF90bXAsMjUpOwkJIyBjaGVjayBmb3IgU1NFIGJpdAoJJmpuYwkoJmxhYmVsKCJzbG93X2VuY194ODYiKSk7CgoJJm1vdnEJKCJtbTAiLCZRV1AoMCwka2V5KSk7CSMgbG9hZCBpdgoJJm1vdnEJKCJtbTQiLCZRV1AoOCwka2V5KSk7CgoJJnNldF9sYWJlbCgic2xvd19lbmNfbG9vcF9zc2UiLDE2KTsKCQkmcHhvcgkoIm1tMCIsJlFXUCgwLCRhY2MpKTsJIyB4b3IgaW5wdXQgZGF0YQoJCSZweG9yCSgibW00IiwmUVdQKDgsJGFjYykpOwoKCQkmbW92CSgka2V5LCRfa2V5KTsKCQkmY2FsbAkoIl9zc2VfQUVTX2VuY3J5cHRfY29tcGFjdCIpOwoKCQkmbW92CSgkYWNjLCRfaW5wKTsJCSMgbG9hZCBpbnAKCQkmbW92CSgka2V5LCRfb3V0KTsJCSMgbG9hZCBvdXQKCQkmbW92CSgkczIsJF9sZW4pOwkJIyBsb2FkIGxlbgoKCQkmbW92cQkoJlFXUCgwLCRrZXkpLCJtbTAiKTsJIyBzYXZlIG91dHB1dCBkYXRhCgkJJm1vdnEJKCZRV1AoOCwka2V5KSwibW00Iik7CgoJCSZsZWEJKCRhY2MsJkRXUCgxNiwkYWNjKSk7CSMgYWR2YW5jZSBpbnAKCQkmbW92CSgkX2lucCwkYWNjKTsJCSMgc2F2ZSBpbnAKCQkmbGVhCSgkczMsJkRXUCgxNiwka2V5KSk7CSMgYWR2YW5jZSBvdXQKCQkmbW92CSgkX291dCwkczMpOwkJIyBzYXZlIG91dAoJCSZzdWIJKCRzMiwxNik7CQkjIGRlY3JlYXNlIGxlbgoJCSZjbXAJKCRzMiwxNik7CgkJJm1vdgkoJF9sZW4sJHMyKTsJCSMgc2F2ZSBsZW4KCSZqYWUJKCZsYWJlbCgic2xvd19lbmNfbG9vcF9zc2UiKSk7CgkmdGVzdAkoJHMyLDE1KTsKCSZqbnoJKCZsYWJlbCgic2xvd19lbmNfdGFpbCIpKTsKCSZtb3YJKCRhY2MsJF9pdnApOwkJIyBsb2FkIGl2cAoJJm1vdnEJKCZRV1AoMCwkYWNjKSwibW0wIik7CSMgc2F2ZSBpdmVjCgkmbW92cQkoJlFXUCg4LCRhY2MpLCJtbTQiKTsKCSZlbW1zCSgpOwoJJm1vdgkoImVzcCIsJF9lc3ApOwoJJnBvcGYJKCk7CgkmZnVuY3Rpb25fZW5kX0EoKTsKCSZwdXNoZgkoKTsJCQkjIGtsdWRnZSwgbmV2ZXIgZXhlY3V0ZWQKCQkJCQl9CiAgICAmc2V0X2xhYmVsKCJzbG93X2VuY194ODYiLDE2KTsKCSZtb3YJKCRzMCwmRFdQKDAsJGtleSkpOwkjIGxvYWQgaXYKCSZtb3YJKCRzMSwmRFdQKDQsJGtleSkpOwoKCSZzZXRfbGFiZWwoInNsb3dfZW5jX2xvb3BfeDg2Iiw0KTsKCQkmbW92CSgkczIsJkRXUCg4LCRrZXkpKTsKCQkmbW92CSgkczMsJkRXUCgxMiwka2V5KSk7CgoJCSZ4b3IJKCRzMCwmRFdQKDAsJGFjYykpOwkjIHhvciBpbnB1dCBkYXRhCgkJJnhvcgkoJHMxLCZEV1AoNCwkYWNjKSk7CgkJJnhvcgkoJHMyLCZEV1AoOCwkYWNjKSk7CgkJJnhvcgkoJHMzLCZEV1AoMTIsJGFjYykpOwoKCQkmbW92CSgka2V5LCRfa2V5KTsJCSMgbG9hZCBrZXkKCQkmY2FsbAkoIl94ODZfQUVTX2VuY3J5cHRfY29tcGFjdCIpOwoKCQkmbW92CSgkYWNjLCRfaW5wKTsJCSMgbG9hZCBpbnAKCQkmbW92CSgka2V5LCRfb3V0KTsJCSMgbG9hZCBvdXQKCgkJJm1vdgkoJkRXUCgwLCRrZXkpLCRzMCk7CSMgc2F2ZSBvdXRwdXQgZGF0YQoJCSZtb3YJKCZEV1AoNCwka2V5KSwkczEpOwoJCSZtb3YJKCZEV1AoOCwka2V5KSwkczIpOwoJCSZtb3YJKCZEV1AoMTIsJGtleSksJHMzKTsKCgkJJm1vdgkoJHMyLCRfbGVuKTsJCSMgbG9hZCBsZW4KCQkmbGVhCSgkYWNjLCZEV1AoMTYsJGFjYykpOwkjIGFkdmFuY2UgaW5wCgkJJm1vdgkoJF9pbnAsJGFjYyk7CQkjIHNhdmUgaW5wCgkJJmxlYQkoJHMzLCZEV1AoMTYsJGtleSkpOwkjIGFkdmFuY2Ugb3V0CgkJJm1vdgkoJF9vdXQsJHMzKTsJCSMgc2F2ZSBvdXQKCQkmc3ViCSgkczIsMTYpOwkJIyBkZWNyZWFzZSBsZW4KCQkmY21wCSgkczIsMTYpOwoJCSZtb3YJKCRfbGVuLCRzMik7CQkjIHNhdmUgbGVuCgkmamFlCSgmbGFiZWwoInNsb3dfZW5jX2xvb3BfeDg2IikpOwoJJnRlc3QJKCRzMiwxNSk7Cgkmam56CSgmbGFiZWwoInNsb3dfZW5jX3RhaWwiKSk7CgkmbW92CSgkYWNjLCRfaXZwKTsJCSMgbG9hZCBpdnAKCSZtb3YJKCRzMiwmRFdQKDgsJGtleSkpOwkjIHJlc3RvcmUgbGFzdCBkd29yZHMKCSZtb3YJKCRzMywmRFdQKDEyLCRrZXkpKTsKCSZtb3YJKCZEV1AoMCwkYWNjKSwkczApOwkjIHNhdmUgaXZlYwoJJm1vdgkoJkRXUCg0LCRhY2MpLCRzMSk7CgkmbW92CSgmRFdQKDgsJGFjYyksJHMyKTsKCSZtb3YJKCZEV1AoMTIsJGFjYyksJHMzKTsKCgkmbW92CSgiZXNwIiwkX2VzcCk7CgkmcG9wZgkoKTsKCSZmdW5jdGlvbl9lbmRfQSgpOwoJJnB1c2hmCSgpOwkJCSMga2x1ZGdlLCBuZXZlciBleGVjdXRlZAoKICAgICZzZXRfbGFiZWwoInNsb3dfZW5jX3RhaWwiLDE2KTsKCSZlbW1zCSgpCWlmICghJHg4Nm9ubHkpOwoJJm1vdgkoJGtleSBlcSAiZWRpIj8gJGtleToiIiwkczMpOwkjIGxvYWQgb3V0IHRvIGVkaQoJJm1vdgkoJHMxLDE2KTsKCSZzdWIJKCRzMSwkczIpOwoJJmNtcAkoJGtleSwkYWNjIGVxICJlc2kiPyAkYWNjOiIiKTsJIyBjb21wYXJlIHdpdGggaW5wCgkmamUJKCZsYWJlbCgiZW5jX2luX3BsYWNlIikpOwoJJmFsaWduCSg0KTsKCSZkYXRhX3dvcmQoMHhBNEYzRjY4OSk7CSMgcmVwIG1vdnNiCSMgY29weSBpbnB1dAoJJmptcAkoJmxhYmVsKCJlbmNfc2tpcF9pbl9wbGFjZSIpKTsKICAgICZzZXRfbGFiZWwoImVuY19pbl9wbGFjZSIpOwoJJmxlYQkoJGtleSwmRFdQKDAsJGtleSwkczIpKTsKICAgICZzZXRfbGFiZWwoImVuY19za2lwX2luX3BsYWNlIik7CgkmbW92CSgkczIsJHMxKTsKCSZ4b3IJKCRzMCwkczApOwoJJmFsaWduCSg0KTsKCSZkYXRhX3dvcmQoMHhBQUYzRjY4OSk7CSMgcmVwIHN0b3NiCSMgemVybyB0YWlsCgoJJm1vdgkoJGtleSwkX2l2cCk7CQkJIyByZXN0b3JlIGl2cAoJJm1vdgkoJGFjYywkczMpOwkJCSMgb3V0cHV0IGFzIGlucHV0CgkmbW92CSgkczAsJkRXUCgwLCRrZXkpKTsKCSZtb3YJKCRzMSwmRFdQKDQsJGtleSkpOwoJJm1vdgkoJF9sZW4sMTYpOwkJCSMgbGVuPTE2Cgkmam1wCSgmbGFiZWwoInNsb3dfZW5jX2xvb3BfeDg2IikpOwkjIG9uZSBtb3JlIHNwaW4uLi4KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU0xPVyBERUNSWVBUIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKJnNldF9sYWJlbCgic2xvd19kZWNyeXB0IiwxNik7CgkJCQkJaWYgKCEkeDg2b25seSkgewoJJmJ0CSgkX3RtcCwyNSk7CQkjIGNoZWNrIGZvciBTU0UgYml0Cgkmam5jCSgmbGFiZWwoInNsb3dfZGVjX2xvb3BfeDg2IikpOwoKCSZzZXRfbGFiZWwoInNsb3dfZGVjX2xvb3Bfc3NlIiw0KTsKCQkmbW92cQkoIm1tMCIsJlFXUCgwLCRhY2MpKTsJIyByZWFkIGlucHV0CgkJJm1vdnEJKCJtbTQiLCZRV1AoOCwkYWNjKSk7CgoJCSZtb3YJKCRrZXksJF9rZXkpOwoJCSZjYWxsCSgiX3NzZV9BRVNfZGVjcnlwdF9jb21wYWN0Iik7CgoJCSZtb3YJKCRhY2MsJF9pbnApOwkJIyBsb2FkIGlucAoJCSZsZWEJKCRzMCwkaXZlYyk7CgkJJm1vdgkoJHMxLCRfb3V0KTsJCSMgbG9hZCBvdXQKCQkmbW92CSgkczIsJF9sZW4pOwkJIyBsb2FkIGxlbgoJCSZtb3YJKCRrZXksJF9pdnApOwkJIyBsb2FkIGl2cAoKCQkmbW92cQkoIm1tMSIsJlFXUCgwLCRhY2MpKTsJIyByZS1yZWFkIGlucHV0CgkJJm1vdnEJKCJtbTUiLCZRV1AoOCwkYWNjKSk7CgoJCSZweG9yCSgibW0wIiwmUVdQKDAsJGtleSkpOwkjIHhvciBpdgoJCSZweG9yCSgibW00IiwmUVdQKDgsJGtleSkpOwoKCQkmbW92cQkoJlFXUCgwLCRrZXkpLCJtbTEiKTsJIyBjb3B5IGlucHV0IHRvIGl2CgkJJm1vdnEJKCZRV1AoOCwka2V5KSwibW01Iik7CgoJCSZzdWIJKCRzMiwxNik7CQkjIGRlY3JlYXNlIGxlbgoJCSZqYwkoJmxhYmVsKCJzbG93X2RlY19wYXJ0aWFsX3NzZSIpKTsKCgkJJm1vdnEJKCZRV1AoMCwkczEpLCJtbTAiKTsJIyB3cml0ZSBvdXRwdXQKCQkmbW92cQkoJlFXUCg4LCRzMSksIm1tNCIpOwoKCQkmbGVhCSgkczEsJkRXUCgxNiwkczEpKTsJIyBhZHZhbmNlIG91dAoJCSZtb3YJKCRfb3V0LCRzMSk7CQkjIHNhdmUgb3V0CgkJJmxlYQkoJGFjYywmRFdQKDE2LCRhY2MpKTsJIyBhZHZhbmNlIGlucAoJCSZtb3YJKCRfaW5wLCRhY2MpOwkJIyBzYXZlIGlucAoJCSZtb3YJKCRfbGVuLCRzMik7CQkjIHNhdmUgbGVuCgkmam56CSgmbGFiZWwoInNsb3dfZGVjX2xvb3Bfc3NlIikpOwoJJmVtbXMJKCk7CgkmbW92CSgiZXNwIiwkX2VzcCk7CgkmcG9wZgkoKTsKCSZmdW5jdGlvbl9lbmRfQSgpOwoJJnB1c2hmCSgpOwkJCSMga2x1ZGdlLCBuZXZlciBleGVjdXRlZAoKICAgICZzZXRfbGFiZWwoInNsb3dfZGVjX3BhcnRpYWxfc3NlIiwxNik7CgkmbW92cQkoJlFXUCgwLCRzMCksIm1tMCIpOwkjIHNhdmUgb3V0cHV0IHRvIHRlbXAKCSZtb3ZxCSgmUVdQKDgsJHMwKSwibW00Iik7CgkmZW1tcwkoKTsKCgkmYWRkCSgkczIgZXEgImVjeCIgPyAiZWN4IjoiIiwxNik7CgkmbW92CSgiZWRpIiwkczEpOwkJIyBvdXQKCSZtb3YJKCJlc2kiLCRzMCk7CQkjIHRlbXAKCSZhbGlnbgkoNCk7CgkmZGF0YV93b3JkKDB4QTRGM0Y2ODkpOwkJIyByZXAgbW92c2IgIyBjb3B5IHBhcnRpYWwgb3V0cHV0CgoJJm1vdgkoImVzcCIsJF9lc3ApOwoJJnBvcGYJKCk7CgkmZnVuY3Rpb25fZW5kX0EoKTsKCSZwdXNoZgkoKTsJCQkjIGtsdWRnZSwgbmV2ZXIgZXhlY3V0ZWQKCQkJCQl9Cgkmc2V0X2xhYmVsKCJzbG93X2RlY19sb29wX3g4NiIsMTYpOwoJCSZtb3YJKCRzMCwmRFdQKDAsJGFjYykpOwkjIHJlYWQgaW5wdXQKCQkmbW92CSgkczEsJkRXUCg0LCRhY2MpKTsKCQkmbW92CSgkczIsJkRXUCg4LCRhY2MpKTsKCQkmbW92CSgkczMsJkRXUCgxMiwkYWNjKSk7CgoJCSZsZWEJKCRrZXksJGl2ZWMpOwoJCSZtb3YJKCZEV1AoMCwka2V5KSwkczApOwkjIGNvcHkgdG8gdGVtcAoJCSZtb3YJKCZEV1AoNCwka2V5KSwkczEpOwoJCSZtb3YJKCZEV1AoOCwka2V5KSwkczIpOwoJCSZtb3YJKCZEV1AoMTIsJGtleSksJHMzKTsKCgkJJm1vdgkoJGtleSwkX2tleSk7CQkjIGxvYWQga2V5CgkJJmNhbGwJKCJfeDg2X0FFU19kZWNyeXB0X2NvbXBhY3QiKTsKCgkJJm1vdgkoJGtleSwkX2l2cCk7CQkjIGxvYWQgaXZwCgkJJm1vdgkoJGFjYywkX2xlbik7CQkjIGxvYWQgbGVuCgkJJnhvcgkoJHMwLCZEV1AoMCwka2V5KSk7CSMgeG9yIGl2CgkJJnhvcgkoJHMxLCZEV1AoNCwka2V5KSk7CgkJJnhvcgkoJHMyLCZEV1AoOCwka2V5KSk7CgkJJnhvcgkoJHMzLCZEV1AoMTIsJGtleSkpOwoKCQkmc3ViCSgkYWNjLDE2KTsKCQkmamMJKCZsYWJlbCgic2xvd19kZWNfcGFydGlhbF94ODYiKSk7CgoJCSZtb3YJKCRfbGVuLCRhY2MpOwkJIyBzYXZlIGxlbgoJCSZtb3YJKCRhY2MsJF9vdXQpOwkJIyBsb2FkIG91dAoKCQkmbW92CSgmRFdQKDAsJGFjYyksJHMwKTsJIyB3cml0ZSBvdXRwdXQKCQkmbW92CSgmRFdQKDQsJGFjYyksJHMxKTsKCQkmbW92CSgmRFdQKDgsJGFjYyksJHMyKTsKCQkmbW92CSgmRFdQKDEyLCRhY2MpLCRzMyk7CgoJCSZsZWEJKCRhY2MsJkRXUCgxNiwkYWNjKSk7CSMgYWR2YW5jZSBvdXQKCQkmbW92CSgkX291dCwkYWNjKTsJCSMgc2F2ZSBvdXQKCgkJJmxlYQkoJGFjYywkaXZlYyk7CgkJJm1vdgkoJHMwLCZEV1AoMCwkYWNjKSk7CSMgcmVhZCB0ZW1wCgkJJm1vdgkoJHMxLCZEV1AoNCwkYWNjKSk7CgkJJm1vdgkoJHMyLCZEV1AoOCwkYWNjKSk7CgkJJm1vdgkoJHMzLCZEV1AoMTIsJGFjYykpOwoKCQkmbW92CSgmRFdQKDAsJGtleSksJHMwKTsJIyBjb3B5IGl0IHRvIGl2CgkJJm1vdgkoJkRXUCg0LCRrZXkpLCRzMSk7CgkJJm1vdgkoJkRXUCg4LCRrZXkpLCRzMik7CgkJJm1vdgkoJkRXUCgxMiwka2V5KSwkczMpOwoKCQkmbW92CSgkYWNjLCRfaW5wKTsJCSMgbG9hZCBpbnAKCQkmbGVhCSgkYWNjLCZEV1AoMTYsJGFjYykpOwkjIGFkdmFuY2UgaW5wCgkJJm1vdgkoJF9pbnAsJGFjYyk7CQkjIHNhdmUgaW5wCgkmam56CSgmbGFiZWwoInNsb3dfZGVjX2xvb3BfeDg2IikpOwoJJm1vdgkoImVzcCIsJF9lc3ApOwoJJnBvcGYJKCk7CgkmZnVuY3Rpb25fZW5kX0EoKTsKCSZwdXNoZgkoKTsJCQkjIGtsdWRnZSwgbmV2ZXIgZXhlY3V0ZWQKCiAgICAmc2V0X2xhYmVsKCJzbG93X2RlY19wYXJ0aWFsX3g4NiIsMTYpOwoJJmxlYQkoJGFjYywkaXZlYyk7CgkmbW92CSgmRFdQKDAsJGFjYyksJHMwKTsJIyBzYXZlIG91dHB1dCB0byB0ZW1wCgkmbW92CSgmRFdQKDQsJGFjYyksJHMxKTsKCSZtb3YJKCZEV1AoOCwkYWNjKSwkczIpOwoJJm1vdgkoJkRXUCgxMiwkYWNjKSwkczMpOwoKCSZtb3YJKCRhY2MsJF9pbnApOwoJJm1vdgkoJHMwLCZEV1AoMCwkYWNjKSk7CSMgcmUtcmVhZCBpbnB1dAoJJm1vdgkoJHMxLCZEV1AoNCwkYWNjKSk7CgkmbW92CSgkczIsJkRXUCg4LCRhY2MpKTsKCSZtb3YJKCRzMywmRFdQKDEyLCRhY2MpKTsKCgkmbW92CSgmRFdQKDAsJGtleSksJHMwKTsJIyBjb3B5IGl0IHRvIGl2CgkmbW92CSgmRFdQKDQsJGtleSksJHMxKTsKCSZtb3YJKCZEV1AoOCwka2V5KSwkczIpOwoJJm1vdgkoJkRXUCgxMiwka2V5KSwkczMpOwoKCSZtb3YJKCJlY3giLCRfbGVuKTsKCSZtb3YJKCJlZGkiLCRfb3V0KTsKCSZsZWEJKCJlc2kiLCRpdmVjKTsKCSZhbGlnbgkoNCk7CgkmZGF0YV93b3JkKDB4QTRGM0Y2ODkpOwkJIyByZXAgbW92c2IgIyBjb3B5IHBhcnRpYWwgb3V0cHV0CgoJJm1vdgkoImVzcCIsJF9lc3ApOwoJJnBvcGYJKCk7CiZmdW5jdGlvbl9lbmQoIkFFU19jYmNfZW5jcnlwdCIpOwp9CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIwoKc3ViIGVuY2tleSgpCnsKCSZtb3Z6CSgiZXNpIiwmTEIoImVkeCIpKTsJCSMgcmtbaV0+PjAKCSZtb3Z6CSgiZWJ4IiwmQlAoLTEyOCwkdGJsLCJlc2kiLDEpKTsKCSZtb3Z6CSgiZXNpIiwmSEIoImVkeCIpKTsJCSMgcmtbaV0+PjgKCSZzaGwJKCJlYngiLDI0KTsKCSZ4b3IJKCJlYXgiLCJlYngiKTsKCgkmbW92egkoImVieCIsJkJQKC0xMjgsJHRibCwiZXNpIiwxKSk7Cgkmc2hyCSgiZWR4IiwxNik7CgkmbW92egkoImVzaSIsJkxCKCJlZHgiKSk7CQkjIHJrW2ldPj4xNgoJJnhvcgkoImVheCIsImVieCIpOwoKCSZtb3Z6CSgiZWJ4IiwmQlAoLTEyOCwkdGJsLCJlc2kiLDEpKTsKCSZtb3Z6CSgiZXNpIiwmSEIoImVkeCIpKTsJCSMgcmtbaV0+PjI0Cgkmc2hsCSgiZWJ4Iiw4KTsKCSZ4b3IJKCJlYXgiLCJlYngiKTsKCgkmbW92egkoImVieCIsJkJQKC0xMjgsJHRibCwiZXNpIiwxKSk7Cgkmc2hsCSgiZWJ4IiwxNik7CgkmeG9yCSgiZWF4IiwiZWJ4Iik7CgoJJnhvcgkoImVheCIsJkRXUCgxMDI0LTEyOCwkdGJsLCJlY3giLDQpKTsJIyByY29uCn0KCiZmdW5jdGlvbl9iZWdpbigiX3g4Nl9BRVNfc2V0X2VuY3J5cHRfa2V5Iik7CgkmbW92CSgiZXNpIiwmd3BhcmFtKDEpKTsJCSMgdXNlciBzdXBwbGllZCBrZXkKCSZtb3YJKCJlZGkiLCZ3cGFyYW0oMykpOwkJIyBwcml2YXRlIGtleSBzY2hlZHVsZQoKCSZ0ZXN0CSgiZXNpIiwtMSk7CgkmanoJKCZsYWJlbCgiYmFkcG9pbnRlciIpKTsKCSZ0ZXN0CSgiZWRpIiwtMSk7CgkmanoJKCZsYWJlbCgiYmFkcG9pbnRlciIpKTsKCgkmY2FsbAkoJmxhYmVsKCJwaWNfcG9pbnQiKSk7Cgkmc2V0X2xhYmVsKCJwaWNfcG9pbnQiKTsKCSZibGluZHBvcCgkdGJsKTsKCSZsZWEJKCR0YmwsJkRXUCgmbGFiZWwoIkFFU19UZSIpLiItIi4mbGFiZWwoInBpY19wb2ludCIpLCR0YmwpKTsKCSZsZWEJKCR0YmwsJkRXUCgyMDQ4KzEyOCwkdGJsKSk7CgoJIyBwcmVmZXRjaCBUZTQKCSZtb3YJKCJlYXgiLCZEV1AoMC0xMjgsJHRibCkpOwoJJm1vdgkoImVieCIsJkRXUCgzMi0xMjgsJHRibCkpOwoJJm1vdgkoImVjeCIsJkRXUCg2NC0xMjgsJHRibCkpOwoJJm1vdgkoImVkeCIsJkRXUCg5Ni0xMjgsJHRibCkpOwoJJm1vdgkoImVheCIsJkRXUCgxMjgtMTI4LCR0YmwpKTsKCSZtb3YJKCJlYngiLCZEV1AoMTYwLTEyOCwkdGJsKSk7CgkmbW92CSgiZWN4IiwmRFdQKDE5Mi0xMjgsJHRibCkpOwoJJm1vdgkoImVkeCIsJkRXUCgyMjQtMTI4LCR0YmwpKTsKCgkmbW92CSgiZWN4Iiwmd3BhcmFtKDIpKTsJCSMgbnVtYmVyIG9mIGJpdHMgaW4ga2V5CgkmY21wCSgiZWN4IiwxMjgpOwoJJmplCSgmbGFiZWwoIjEwcm91bmRzIikpOwoJJmNtcAkoImVjeCIsMTkyKTsKCSZqZQkoJmxhYmVsKCIxMnJvdW5kcyIpKTsKCSZjbXAJKCJlY3giLDI1Nik7CgkmamUJKCZsYWJlbCgiMTRyb3VuZHMiKSk7CgkmbW92CSgiZWF4IiwtMik7CQkJIyBpbnZhbGlkIG51bWJlciBvZiBiaXRzCgkmam1wCSgmbGFiZWwoImV4aXQiKSk7CgogICAgJnNldF9sYWJlbCgiMTByb3VuZHMiKTsKCSZtb3YJKCJlYXgiLCZEV1AoMCwiZXNpIikpOwkJIyBjb3B5IGZpcnN0IDQgZHdvcmRzCgkmbW92CSgiZWJ4IiwmRFdQKDQsImVzaSIpKTsKCSZtb3YJKCJlY3giLCZEV1AoOCwiZXNpIikpOwoJJm1vdgkoImVkeCIsJkRXUCgxMiwiZXNpIikpOwoJJm1vdgkoJkRXUCgwLCJlZGkiKSwiZWF4Iik7CgkmbW92CSgmRFdQKDQsImVkaSIpLCJlYngiKTsKCSZtb3YJKCZEV1AoOCwiZWRpIiksImVjeCIpOwoJJm1vdgkoJkRXUCgxMiwiZWRpIiksImVkeCIpOwoKCSZ4b3IJKCJlY3giLCJlY3giKTsKCSZqbXAJKCZsYWJlbCgiMTBzaG9ydGN1dCIpKTsKCgkmYWxpZ24JKDQpOwoJJnNldF9sYWJlbCgiMTBsb29wIik7CgkJJm1vdgkoImVheCIsJkRXUCgwLCJlZGkiKSk7CQkjIHJrWzBdCgkJJm1vdgkoImVkeCIsJkRXUCgxMiwiZWRpIikpOwkJIyBya1szXQoJJnNldF9sYWJlbCgiMTBzaG9ydGN1dCIpOwoJCSZlbmNrZXkJKCk7CgoJCSZtb3YJKCZEV1AoMTYsImVkaSIpLCJlYXgiKTsJCSMgcmtbNF0KCQkmeG9yCSgiZWF4IiwmRFdQKDQsImVkaSIpKTsKCQkmbW92CSgmRFdQKDIwLCJlZGkiKSwiZWF4Iik7CQkjIHJrWzVdCgkJJnhvcgkoImVheCIsJkRXUCg4LCJlZGkiKSk7CgkJJm1vdgkoJkRXUCgyNCwiZWRpIiksImVheCIpOwkJIyBya1s2XQoJCSZ4b3IJKCJlYXgiLCZEV1AoMTIsImVkaSIpKTsKCQkmbW92CSgmRFdQKDI4LCJlZGkiKSwiZWF4Iik7CQkjIHJrWzddCgkJJmluYwkoImVjeCIpOwoJCSZhZGQJKCJlZGkiLDE2KTsKCQkmY21wCSgiZWN4IiwxMCk7CgkmamwJKCZsYWJlbCgiMTBsb29wIikpOwoKCSZtb3YJKCZEV1AoODAsImVkaSIpLDEwKTsJCSMgc2V0dXAgbnVtYmVyIG9mIHJvdW5kcwoJJnhvcgkoImVheCIsImVheCIpOwoJJmptcAkoJmxhYmVsKCJleGl0IikpOwoJCQogICAgJnNldF9sYWJlbCgiMTJyb3VuZHMiKTsKCSZtb3YJKCJlYXgiLCZEV1AoMCwiZXNpIikpOwkJIyBjb3B5IGZpcnN0IDYgZHdvcmRzCgkmbW92CSgiZWJ4IiwmRFdQKDQsImVzaSIpKTsKCSZtb3YJKCJlY3giLCZEV1AoOCwiZXNpIikpOwoJJm1vdgkoImVkeCIsJkRXUCgxMiwiZXNpIikpOwoJJm1vdgkoJkRXUCgwLCJlZGkiKSwiZWF4Iik7CgkmbW92CSgmRFdQKDQsImVkaSIpLCJlYngiKTsKCSZtb3YJKCZEV1AoOCwiZWRpIiksImVjeCIpOwoJJm1vdgkoJkRXUCgxMiwiZWRpIiksImVkeCIpOwoJJm1vdgkoImVjeCIsJkRXUCgxNiwiZXNpIikpOwoJJm1vdgkoImVkeCIsJkRXUCgyMCwiZXNpIikpOwoJJm1vdgkoJkRXUCgxNiwiZWRpIiksImVjeCIpOwoJJm1vdgkoJkRXUCgyMCwiZWRpIiksImVkeCIpOwoKCSZ4b3IJKCJlY3giLCJlY3giKTsKCSZqbXAJKCZsYWJlbCgiMTJzaG9ydGN1dCIpKTsKCgkmYWxpZ24JKDQpOwoJJnNldF9sYWJlbCgiMTJsb29wIik7CgkJJm1vdgkoImVheCIsJkRXUCgwLCJlZGkiKSk7CQkjIHJrWzBdCgkJJm1vdgkoImVkeCIsJkRXUCgyMCwiZWRpIikpOwkJIyBya1s1XQoJJnNldF9sYWJlbCgiMTJzaG9ydGN1dCIpOwoJCSZlbmNrZXkJKCk7CgoJCSZtb3YJKCZEV1AoMjQsImVkaSIpLCJlYXgiKTsJCSMgcmtbNl0KCQkmeG9yCSgiZWF4IiwmRFdQKDQsImVkaSIpKTsKCQkmbW92CSgmRFdQKDI4LCJlZGkiKSwiZWF4Iik7CQkjIHJrWzddCgkJJnhvcgkoImVheCIsJkRXUCg4LCJlZGkiKSk7CgkJJm1vdgkoJkRXUCgzMiwiZWRpIiksImVheCIpOwkJIyBya1s4XQoJCSZ4b3IJKCJlYXgiLCZEV1AoMTIsImVkaSIpKTsKCQkmbW92CSgmRFdQKDM2LCJlZGkiKSwiZWF4Iik7CQkjIHJrWzldCgoJCSZjbXAJKCJlY3giLDcpOwoJCSZqZQkoJmxhYmVsKCIxMmJyZWFrIikpOwoJCSZpbmMJKCJlY3giKTsKCgkJJnhvcgkoImVheCIsJkRXUCgxNiwiZWRpIikpOwoJCSZtb3YJKCZEV1AoNDAsImVkaSIpLCJlYXgiKTsJCSMgcmtbMTBdCgkJJnhvcgkoImVheCIsJkRXUCgyMCwiZWRpIikpOwoJCSZtb3YJKCZEV1AoNDQsImVkaSIpLCJlYXgiKTsJCSMgcmtbMTFdCgoJCSZhZGQJKCJlZGkiLDI0KTsKCSZqbXAJKCZsYWJlbCgiMTJsb29wIikpOwoKCSZzZXRfbGFiZWwoIjEyYnJlYWsiKTsKCSZtb3YJKCZEV1AoNzIsImVkaSIpLDEyKTsJCSMgc2V0dXAgbnVtYmVyIG9mIHJvdW5kcwoJJnhvcgkoImVheCIsImVheCIpOwoJJmptcAkoJmxhYmVsKCJleGl0IikpOwoKICAgICZzZXRfbGFiZWwoIjE0cm91bmRzIik7CgkmbW92CSgiZWF4IiwmRFdQKDAsImVzaSIpKTsJCSMgY29weSBmaXJzdCA4IGR3b3JkcwoJJm1vdgkoImVieCIsJkRXUCg0LCJlc2kiKSk7CgkmbW92CSgiZWN4IiwmRFdQKDgsImVzaSIpKTsKCSZtb3YJKCJlZHgiLCZEV1AoMTIsImVzaSIpKTsKCSZtb3YJKCZEV1AoMCwiZWRpIiksImVheCIpOwoJJm1vdgkoJkRXUCg0LCJlZGkiKSwiZWJ4Iik7CgkmbW92CSgmRFdQKDgsImVkaSIpLCJlY3giKTsKCSZtb3YJKCZEV1AoMTIsImVkaSIpLCJlZHgiKTsKCSZtb3YJKCJlYXgiLCZEV1AoMTYsImVzaSIpKTsKCSZtb3YJKCJlYngiLCZEV1AoMjAsImVzaSIpKTsKCSZtb3YJKCJlY3giLCZEV1AoMjQsImVzaSIpKTsKCSZtb3YJKCJlZHgiLCZEV1AoMjgsImVzaSIpKTsKCSZtb3YJKCZEV1AoMTYsImVkaSIpLCJlYXgiKTsKCSZtb3YJKCZEV1AoMjAsImVkaSIpLCJlYngiKTsKCSZtb3YJKCZEV1AoMjQsImVkaSIpLCJlY3giKTsKCSZtb3YJKCZEV1AoMjgsImVkaSIpLCJlZHgiKTsKCgkmeG9yCSgiZWN4IiwiZWN4Iik7Cgkmam1wCSgmbGFiZWwoIjE0c2hvcnRjdXQiKSk7CgoJJmFsaWduCSg0KTsKCSZzZXRfbGFiZWwoIjE0bG9vcCIpOwoJCSZtb3YJKCJlZHgiLCZEV1AoMjgsImVkaSIpKTsJCSMgcmtbN10KCSZzZXRfbGFiZWwoIjE0c2hvcnRjdXQiKTsKCQkmbW92CSgiZWF4IiwmRFdQKDAsImVkaSIpKTsJCSMgcmtbMF0KCgkJJmVuY2tleQkoKTsKCgkJJm1vdgkoJkRXUCgzMiwiZWRpIiksImVheCIpOwkJIyBya1s4XQoJCSZ4b3IJKCJlYXgiLCZEV1AoNCwiZWRpIikpOwoJCSZtb3YJKCZEV1AoMzYsImVkaSIpLCJlYXgiKTsJCSMgcmtbOV0KCQkmeG9yCSgiZWF4IiwmRFdQKDgsImVkaSIpKTsKCQkmbW92CSgmRFdQKDQwLCJlZGkiKSwiZWF4Iik7CQkjIHJrWzEwXQoJCSZ4b3IJKCJlYXgiLCZEV1AoMTIsImVkaSIpKTsKCQkmbW92CSgmRFdQKDQ0LCJlZGkiKSwiZWF4Iik7CQkjIHJrWzExXQoKCQkmY21wCSgiZWN4Iiw2KTsKCQkmamUJKCZsYWJlbCgiMTRicmVhayIpKTsKCQkmaW5jCSgiZWN4Iik7CgoJCSZtb3YJKCJlZHgiLCJlYXgiKTsKCQkmbW92CSgiZWF4IiwmRFdQKDE2LCJlZGkiKSk7CQkjIHJrWzRdCgkJJm1vdnoJKCJlc2kiLCZMQigiZWR4IikpOwkJIyBya1sxMV0+PjAKCQkmbW92egkoImVieCIsJkJQKC0xMjgsJHRibCwiZXNpIiwxKSk7CgkJJm1vdnoJKCJlc2kiLCZIQigiZWR4IikpOwkJIyBya1sxMV0+PjgKCQkmeG9yCSgiZWF4IiwiZWJ4Iik7CgoJCSZtb3Z6CSgiZWJ4IiwmQlAoLTEyOCwkdGJsLCJlc2kiLDEpKTsKCQkmc2hyCSgiZWR4IiwxNik7CgkJJnNobAkoImVieCIsOCk7CgkJJm1vdnoJKCJlc2kiLCZMQigiZWR4IikpOwkJIyBya1sxMV0+PjE2CgkJJnhvcgkoImVheCIsImVieCIpOwoKCQkmbW92egkoImVieCIsJkJQKC0xMjgsJHRibCwiZXNpIiwxKSk7CgkJJm1vdnoJKCJlc2kiLCZIQigiZWR4IikpOwkJIyBya1sxMV0+PjI0CgkJJnNobAkoImVieCIsMTYpOwoJCSZ4b3IJKCJlYXgiLCJlYngiKTsKCgkJJm1vdnoJKCJlYngiLCZCUCgtMTI4LCR0YmwsImVzaSIsMSkpOwoJCSZzaGwJKCJlYngiLDI0KTsKCQkmeG9yCSgiZWF4IiwiZWJ4Iik7CgoJCSZtb3YJKCZEV1AoNDgsImVkaSIpLCJlYXgiKTsJCSMgcmtbMTJdCgkJJnhvcgkoImVheCIsJkRXUCgyMCwiZWRpIikpOwoJCSZtb3YJKCZEV1AoNTIsImVkaSIpLCJlYXgiKTsJCSMgcmtbMTNdCgkJJnhvcgkoImVheCIsJkRXUCgyNCwiZWRpIikpOwoJCSZtb3YJKCZEV1AoNTYsImVkaSIpLCJlYXgiKTsJCSMgcmtbMTRdCgkJJnhvcgkoImVheCIsJkRXUCgyOCwiZWRpIikpOwoJCSZtb3YJKCZEV1AoNjAsImVkaSIpLCJlYXgiKTsJCSMgcmtbMTVdCgoJCSZhZGQJKCJlZGkiLDMyKTsKCSZqbXAJKCZsYWJlbCgiMTRsb29wIikpOwoKCSZzZXRfbGFiZWwoIjE0YnJlYWsiKTsKCSZtb3YJKCZEV1AoNDgsImVkaSIpLDE0KTsJCSMgc2V0dXAgbnVtYmVyIG9mIHJvdW5kcwoJJnhvcgkoImVheCIsImVheCIpOwoJJmptcAkoJmxhYmVsKCJleGl0IikpOwoKICAgICZzZXRfbGFiZWwoImJhZHBvaW50ZXIiKTsKCSZtb3YJKCJlYXgiLC0xKTsKICAgICZzZXRfbGFiZWwoImV4aXQiKTsKJmZ1bmN0aW9uX2VuZCgiX3g4Nl9BRVNfc2V0X2VuY3J5cHRfa2V5Iik7CgojIGludCBBRVNfc2V0X2VuY3J5cHRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXksIGNvbnN0IGludCBiaXRzLAojICAgICAgICAgICAgICAgICAgICAgICAgQUVTX0tFWSAqa2V5KQomZnVuY3Rpb25fYmVnaW5fQigiQUVTX3NldF9lbmNyeXB0X2tleSIpOwoJJmNhbGwJKCJfeDg2X0FFU19zZXRfZW5jcnlwdF9rZXkiKTsKCSZyZXQJKCk7CiZmdW5jdGlvbl9lbmRfQigiQUVTX3NldF9lbmNyeXB0X2tleSIpOwoKc3ViIGRlY2tleSgpCnsgbXkgKCRpLCRrZXksJHRwMSwkdHAyLCR0cDQsJHRwOCkgPSBAXzsKICBteSAkdG1wID0gJHRibDsKCgkmbW92CSgkYWNjLCR0cDEpOwoJJmFuZAkoJGFjYywweDgwODA4MDgwKTsKCSZtb3YJKCR0bXAsJGFjYyk7Cgkmc2hyCSgkdG1wLDcpOwoJJmxlYQkoJHRwMiwmRFdQKDAsJHRwMSwkdHAxKSk7Cgkmc3ViCSgkYWNjLCR0bXApOwoJJmFuZAkoJHRwMiwweGZlZmVmZWZlKTsKCSZhbmQJKCRhY2MsMHgxYjFiMWIxYik7CgkmeG9yCSgkYWNjLCR0cDIpOwoJJm1vdgkoJHRwMiwkYWNjKTsKCgkmYW5kCSgkYWNjLDB4ODA4MDgwODApOwoJJm1vdgkoJHRtcCwkYWNjKTsKCSZzaHIJKCR0bXAsNyk7CgkmbGVhCSgkdHA0LCZEV1AoMCwkdHAyLCR0cDIpKTsKCSZzdWIJKCRhY2MsJHRtcCk7CgkmYW5kCSgkdHA0LDB4ZmVmZWZlZmUpOwoJJmFuZAkoJGFjYywweDFiMWIxYjFiKTsKCSAmeG9yCSgkdHAyLCR0cDEpOwkjIHRwMl50cDEKCSZ4b3IJKCRhY2MsJHRwNCk7CgkmbW92CSgkdHA0LCRhY2MpOwoKCSZhbmQJKCRhY2MsMHg4MDgwODA4MCk7CgkmbW92CSgkdG1wLCRhY2MpOwoJJnNocgkoJHRtcCw3KTsKCSZsZWEJKCR0cDgsJkRXUCgwLCR0cDQsJHRwNCkpOwoJICZ4b3IJKCR0cDQsJHRwMSk7CSMgdHA0XnRwMQoJJnN1YgkoJGFjYywkdG1wKTsKCSZhbmQJKCR0cDgsMHhmZWZlZmVmZSk7CgkmYW5kCSgkYWNjLDB4MWIxYjFiMWIpOwoJICZyb3RsCSgkdHAxLDgpOwkjID0gUk9UQVRFKHRwMSw4KQoJJnhvcgkoJHRwOCwkYWNjKTsKCgkmbW92CSgkdG1wLCZEV1AoNCooJGkrMSksJGtleSkpOwkjIG1vZHVsby1zY2hlZHVsZWQgbG9hZAoKCSZ4b3IJKCR0cDEsJHRwMik7CgkmeG9yCSgkdHAyLCR0cDgpOwoJJnhvcgkoJHRwMSwkdHA0KTsKCSZyb3RsCSgkdHAyLDI0KTsKCSZ4b3IJKCR0cDQsJHRwOCk7CgkmeG9yCSgkdHAxLCR0cDgpOwkjIF49IHRwOF4odHA0XnRwMSleKHRwMl50cDEpCgkmcm90bAkoJHRwNCwxNik7CgkmeG9yCSgkdHAxLCR0cDIpOwkjIF49IFJPVEFURSh0cDhedHAyXnRwMSwyNCkKCSZyb3RsCSgkdHA4LDgpOwoJJnhvcgkoJHRwMSwkdHA0KTsJIyBePSBST1RBVEUodHA4XnRwNF50cDEsMTYpCgkmbW92CSgkdHAyLCR0bXApOwoJJnhvcgkoJHRwMSwkdHA4KTsJIyBePSBST1RBVEUodHA4LDgpCgoJJm1vdgkoJkRXUCg0KiRpLCRrZXkpLCR0cDEpOwp9CgojIGludCBBRVNfc2V0X2RlY3J5cHRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXksIGNvbnN0IGludCBiaXRzLAojICAgICAgICAgICAgICAgICAgICAgICAgQUVTX0tFWSAqa2V5KQomZnVuY3Rpb25fYmVnaW5fQigiQUVTX3NldF9kZWNyeXB0X2tleSIpOwoJJmNhbGwJKCJfeDg2X0FFU19zZXRfZW5jcnlwdF9rZXkiKTsKCSZjbXAJKCJlYXgiLDApOwoJJmplCSgmbGFiZWwoInByb2NlZWQiKSk7CgkmcmV0CSgpOwoKICAgICZzZXRfbGFiZWwoInByb2NlZWQiKTsKCSZwdXNoCSgiZWJwIik7CgkmcHVzaAkoImVieCIpOwoJJnB1c2gJKCJlc2kiKTsKCSZwdXNoCSgiZWRpIik7CgoJJm1vdgkoImVzaSIsJndwYXJhbSgyKSk7CgkmbW92CSgiZWN4IiwmRFdQKDI0MCwiZXNpIikpOwkjIHB1bGwgbnVtYmVyIG9mIHJvdW5kcwoJJmxlYQkoImVjeCIsJkRXUCgwLCIiLCJlY3giLDQpKTsKCSZsZWEJKCJlZGkiLCZEV1AoMCwiZXNpIiwiZWN4Iiw0KSk7CSMgcG9pbnRlciB0byBsYXN0IGNodW5rCgoJJnNldF9sYWJlbCgiaW52ZXJ0Iiw0KTsJCQkjIGludmVydCBvcmRlciBvZiBjaHVua3MKCQkmbW92CSgiZWF4IiwmRFdQKDAsImVzaSIpKTsKCQkmbW92CSgiZWJ4IiwmRFdQKDQsImVzaSIpKTsKCQkmbW92CSgiZWN4IiwmRFdQKDAsImVkaSIpKTsKCQkmbW92CSgiZWR4IiwmRFdQKDQsImVkaSIpKTsKCQkmbW92CSgmRFdQKDAsImVkaSIpLCJlYXgiKTsKCQkmbW92CSgmRFdQKDQsImVkaSIpLCJlYngiKTsKCQkmbW92CSgmRFdQKDAsImVzaSIpLCJlY3giKTsKCQkmbW92CSgmRFdQKDQsImVzaSIpLCJlZHgiKTsKCQkmbW92CSgiZWF4IiwmRFdQKDgsImVzaSIpKTsKCQkmbW92CSgiZWJ4IiwmRFdQKDEyLCJlc2kiKSk7CgkJJm1vdgkoImVjeCIsJkRXUCg4LCJlZGkiKSk7CgkJJm1vdgkoImVkeCIsJkRXUCgxMiwiZWRpIikpOwoJCSZtb3YJKCZEV1AoOCwiZWRpIiksImVheCIpOwoJCSZtb3YJKCZEV1AoMTIsImVkaSIpLCJlYngiKTsKCQkmbW92CSgmRFdQKDgsImVzaSIpLCJlY3giKTsKCQkmbW92CSgmRFdQKDEyLCJlc2kiKSwiZWR4Iik7CgkJJmFkZAkoImVzaSIsMTYpOwoJCSZzdWIJKCJlZGkiLDE2KTsKCQkmY21wCSgiZXNpIiwiZWRpIik7Cgkmam5lCSgmbGFiZWwoImludmVydCIpKTsKCgkmbW92CSgka2V5LCZ3cGFyYW0oMikpOwoJJm1vdgkoJGFjYywmRFdQKDI0MCwka2V5KSk7CQkjIHB1bGwgbnVtYmVyIG9mIHJvdW5kcwoJJmxlYQkoJGFjYywmRFdQKC0yLCRhY2MsJGFjYykpOwoJJmxlYQkoJGFjYywmRFdQKDAsJGtleSwkYWNjLDgpKTsKCSZtb3YJKCZ3cGFyYW0oMiksJGFjYyk7CgoJJm1vdgkoJHMwLCZEV1AoMTYsJGtleSkpOwkJIyBtb2R1bG8tc2NoZWR1bGVkIGxvYWQKCSZzZXRfbGFiZWwoInBlcm11dGUiLDQpOwkJIyBwZXJtdXRlIHRoZSBrZXkgc2NoZWR1bGUKCQkmYWRkCSgka2V5LDE2KTsKCQkmZGVja2V5CSgwLCRrZXksJHMwLCRzMSwkczIsJHMzKTsKCQkmZGVja2V5CSgxLCRrZXksJHMxLCRzMiwkczMsJHMwKTsKCQkmZGVja2V5CSgyLCRrZXksJHMyLCRzMywkczAsJHMxKTsKCQkmZGVja2V5CSgzLCRrZXksJHMzLCRzMCwkczEsJHMyKTsKCQkmY21wCSgka2V5LCZ3cGFyYW0oMikpOwoJJmpiCSgmbGFiZWwoInBlcm11dGUiKSk7CgoJJnhvcgkoImVheCIsImVheCIpOwkJCSMgcmV0dXJuIHN1Y2Nlc3MKJmZ1bmN0aW9uX2VuZCgiQUVTX3NldF9kZWNyeXB0X2tleSIpOwomYXNjaXooIkFFUyBmb3IgeDg2LCBDUllQVE9HQU1TIGJ5IDxhcHByb1xAb3BlbnNzbC5vcmc+Iik7CgomYXNtX2ZpbmlzaCgpOwo=