IyEvdXNyL2Jpbi9lbnYgcGVybAojCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBXcml0dGVuIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPiBmb3IgdGhlIE9wZW5TU0wKIyBwcm9qZWN0LiBUaGUgbW9kdWxlIGlzLCBob3dldmVyLCBkdWFsIGxpY2Vuc2VkIHVuZGVyIE9wZW5TU0wgYW5kCiMgQ1JZUFRPR0FNUyBsaWNlbnNlcyBkZXBlbmRpbmcgb24gd2hlcmUgeW91IG9idGFpbiBpdC4gRm9yIGZ1cnRoZXIKIyBkZXRhaWxzIHNlZSBodHRwOi8vd3d3Lm9wZW5zc2wub3JnL35hcHByby9jcnlwdG9nYW1zLy4KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojCiMgVmVyc2lvbiA0LjMuCiMKIyBZb3UgbWlnaHQgZmFpbCB0byBhcHByZWNpYXRlIHRoaXMgbW9kdWxlIHBlcmZvcm1hbmNlIGZyb20gdGhlIGZpcnN0CiMgdHJ5LiBJZiBjb21wYXJlZCB0byAidmFuaWxsYSIgbGludXgtaWEzMi1pY2MgdGFyZ2V0LCBpLmUuIGNvbnNpZGVyZWQKIyB0byBiZSAqdGhlKiBiZXN0IEludGVsIEMgY29tcGlsZXIgd2l0aG91dCAtS1BJQywgcGVyZm9ybWFuY2UgYXBwZWFycwojIHRvIGJlIHZpcnR1YWxseSBpZGVudGljYWwuLi4gQnV0IHRyeSB0byByZS1jb25maWd1cmUgd2l0aCBzaGFyZWQKIyBsaWJyYXJ5IHN1cHBvcnQuLi4gQWhhISBJbnRlbCBjb21waWxlciAic3VkZGVubHkiIGxhZ3MgYmVoaW5kIGJ5IDMwJQojIFtvbiBQNCwgbW9yZSBvbiBvdGhlcnNdOi0pIEFuZCBpZiBjb21wYXJlZCB0byBwb3NpdGlvbi1pbmRlcGVuZGVudAojIGNvZGUgZ2VuZXJhdGVkIGJ5IEdOVSBDLCB0aGlzIGNvZGUgcGVyZm9ybXMgKm1vcmUqIHRoYW4gKnR3aWNlKiBhcwojIGZhc3QhIFllcywgYWxsIHRoaXMgYnV6eiBhYm91dCBQSUMgbWVhbnMgdGhhdCB1bmxpa2Ugb3RoZXIgaGFuZC0KIyBjb2RlZCBpbXBsZW1lbnRhdGlvbnMsIHRoaXMgb25lIHdhcyBleHBsaWNpdGx5IGRlc2lnbmVkIHRvIGJlIHNhZmUKIyB0byB1c2UgZXZlbiBpbiBzaGFyZWQgbGlicmFyeSBjb250ZXh0Li4uIFRoaXMgYWxzbyBtZWFucyB0aGF0IHRoaXMKIyBjb2RlIGlzbid0IG5lY2Vzc2FyaWx5IGFic29sdXRlbHkgZmFzdGVzdCAiZXZlciwiIGJlY2F1c2UgaW4gb3JkZXIKIyB0byBhY2hpZXZlIHBvc2l0aW9uIGluZGVwZW5kZW5jZSBhbiBleHRyYSByZWdpc3RlciBoYXMgdG8gYmUKIyBvZmYtbG9hZGVkIHRvIHN0YWNrLCB3aGljaCBhZmZlY3RzIHRoZSBiZW5jaG1hcmsgcmVzdWx0LgojCiMgU3BlY2lhbCBub3RlIGFib3V0IGluc3RydWN0aW9uIGNob2ljZS4gRG8geW91IHJlY2FsbCBSQzRfSU5UIGNvZGUKIyBwZXJmb3JtaW5nIHBvb3JseSBvbiBQND8gSXQgbWlnaHQgYmUgdGhlIHRpbWUgdG8gZmlndXJlIG91dCB3aHkuCiMgUkM0X0lOVCBjb2RlIGltcGxpZXMgZWZmZWN0aXZlIGFkZHJlc3MgY2FsY3VsYXRpb25zIGluIGJhc2Urb2Zmc2V0KjQKIyBmb3JtLiBUcm91YmxlIGlzIHRoYXQgaXQgc2VlbXMgdGhhdCBvZmZzZXQgc2NhbGluZyB0dXJuZWQgdG8gYmUKIyBjcml0aWNhbCBwYXRoLi4uIEF0IGxlYXN0IGVsaW1pbmF0aW5nIHNjYWxpbmcgcmVzdWx0ZWQgaW4gMi44eCBSQzQKIyBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBbYXMgeW91IG1pZ2h0IHJlY2FsbF0uIEFzIEFFUyBjb2RlIGlzIGh1bmdyeQojIGZvciBzY2FsaW5nIHRvbywgSSBbdHJ5IHRvXSBhdm9pZCB0aGUgbGF0dGVyIGJ5IGZhdm9yaW5nIG9mZi1ieS0yCiMgc2hpZnRzIGFuZCBtYXNraW5nIHRoZSByZXN1bHQgd2l0aCAweEZGPDwyIGluc3RlYWQgb2YgImJvcmluZyIgMHhGRi4KIwojIEFzIHdhcyBzaG93biBieSBEZWFuIEdhdWRldCA8ZGVhbkBhcmN0aWMub3JnPiwgdGhlIGFib3ZlIG5vdGUgdHVybmVkCiMgdm9pZC4gUGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgd2l0aCBvZmYtYnktMiBzaGlmdHMgd2FzIG9ic2VydmVkIG9uCiMgaW50ZXJtZWRpYXRlIGltcGxlbWVudGF0aW9uLCB3aGljaCB3YXMgc3BpbGxpbmcgeWV0IGFub3RoZXIgcmVnaXN0ZXIKIyB0byBzdGFjay4uLiBGaW5hbCBvZmZzZXQqNCBjb2RlIGJlbG93IHJ1bnMganVzdCBhIHRhZCBmYXN0ZXIgb24gUDQsCiMgYnV0IGV4aGliaXRzIHVwIHRvIDEwJSBpbXByb3ZlbWVudCBvbiBvdGhlciBjb3Jlcy4KIwojIFNlY29uZCB2ZXJzaW9uIGlzICJtb25vbGl0aGljIiByZXBsYWNlbWVudCBmb3IgYWVzX2NvcmUuYywgd2hpY2ggaW4KIyBhZGRpdGlvbiB0byBBRVNfW2RlfGVuXWNyeXB0IGltcGxlbWVudHMgcHJpdmF0ZV9BRVNfc2V0X1tkZXxlbl1jcnlwdGlvbl9rZXkuCiMgVGhpcyBtYWRlIGl0IHBvc3NpYmxlIHRvIGltcGxlbWVudCBsaXR0bGUtZW5kaWFuIHZhcmlhbnQgb2YgdGhlCiMgYWxnb3JpdGhtIHdpdGhvdXQgbW9kaWZ5aW5nIHRoZSBiYXNlIEMgY29kZS4gTW90aXZhdGluZyBmYWN0b3IgZm9yCiMgdGhlIHVuZGVydGFrZW4gZWZmb3J0IHdhcyB0aGF0IGl0IGFwcGVhcmVkIHRoYXQgaW4gdGlnaHQgSUEtMzIKIyByZWdpc3RlciB3aW5kb3cgbGl0dGxlLWVuZGlhbiBmbGF2b3IgY291bGQgYWNoaWV2ZSBzbGlnaHRseSBoaWdoZXIKIyBJbnN0cnVjdGlvbiBMZXZlbCBQYXJhbGxlbGlzbSwgYW5kIGl0IGluZGVlZCByZXN1bHRlZCBpbiB1cCB0byAxNSUKIyBiZXR0ZXIgcGVyZm9ybWFuY2Ugb24gbW9zdCByZWNlbnQgtS1hcmNocy4uLgojCiMgVGhpcmQgdmVyc2lvbiBhZGRzIEFFU19jYmNfZW5jcnlwdCBpbXBsZW1lbnRhdGlvbiwgd2hpY2ggcmVzdWx0ZWQgaW4KIyB1cCB0byA0MCUgcGVyZm9ybWFuY2UgaW1yb3ZlbWVudCBvZiBDQkMgYmVuY2htYXJrIHJlc3VsdHMuIDQwJSB3YXMKIyBvYnNlcnZlZCBvbiBQNCBjb3JlLCB3aGVyZSAib3ZlcmFsbCIgaW1yb3ZlbWVudCBjb2VmZmljaWVudCwgaS5lLiBpZgojIGNvbXBhcmVkIHRvIFBJQyBnZW5lcmF0ZWQgYnkgR0NDIGFuZCBpbiBDQkMgbW9kZSwgd2FzIG9ic2VydmVkIHRvIGJlCiMgYXMgbGFyZ2UgYXMgNHg6LSkgQ0JDIHBlcmZvcm1hbmNlIGlzIHZpcnR1YWxseSBpZGVudGljYWwgdG8gRUNCIG5vdwojIGFuZCBvbiBzb21lIHBsYXRmb3JtcyBldmVuIGJldHRlciwgZS5nLiAxNy42ICJzbWFsbCIgY3ljbGVzL2J5dGUgb24KIyBPcHRlcm9uLCBiZWNhdXNlIGNlcnRhaW4gZnVuY3Rpb24gcHJvbG9ndWVzIGFuZCBlcGlsb2d1ZXMgYXJlCiMgZWZmZWN0aXZlbHkgdGFrZW4gb3V0IG9mIHRoZSBsb29wLi4uCiMKIyBWZXJzaW9uIDMuMiBpbXBsZW1lbnRzIGNvbXByZXNzZWQgdGFibGVzIGFuZCBwcmVmZXRjaCBvZiB0aGVzZSB0YWJsZXMKIyBpbiBDQkNbIV0gbW9kZS4gRm9ybWVyIG1lYW5zIHRoYXQgMy80IG9mIHRhYmxlIHJlZmVyZW5jZXMgYXJlIG5vdwojIG1pc2FsaWduZWQsIHdoaWNoIHVuZm9ydHVuYXRlbHkgaGFzIG5lZ2F0aXZlIGltcGFjdCBvbiBlbGRlciBJQS0zMgojIGltcGxlbWVudGF0aW9ucywgUGVudGl1bSBzdWZmZXJlZCAzMCUgcGVuYWx0eSwgUElJSSAtIDEwJS4KIwojIFZlcnNpb24gMy4zIGF2b2lkcyBMMSBjYWNoZSBhbGlhc2luZyBiZXR3ZWVuIHN0YWNrIGZyYW1lIGFuZAojIFMtYm94ZXMsIGFuZCAzLjQgLSBMMSBjYWNoZSBhbGlhc2luZyBldmVuIGJldHdlZW4ga2V5IHNjaGVkdWxlLiBUaGUKIyBsYXR0ZXIgaXMgYWNoaWV2ZWQgYnkgY29weWluZyB0aGUga2V5IHNjaGVkdWxlIHRvIGNvbnRyb2xsZWQgcGxhY2UgaW4KIyBzdGFjay4gVGhpcyB1bmZvcnR1bmF0ZWx5IGhhcyByYXRoZXIgc3Ryb25nIGltcGFjdCBvbiBzbWFsbCBibG9jayBDQkMKIyBwZXJmb3JtYW5jZSwgfjJ4IGRldGVyaW9yYXRpb24gb24gMTYtYnl0ZSBibG9jayBpZiBjb21wYXJlZCB0byAzLjMuCiMKIyBWZXJzaW9uIDMuNSBjaGVja3MgaWYgdGhlcmUgaXMgTDEgY2FjaGUgYWxpYXNpbmcgYmV0d2VlbiB1c2VyLXN1cHBsaWVkCiMga2V5IHNjaGVkdWxlIGFuZCBTLWJveGVzIGFuZCBhYnN0YWlucyBmcm9tIGNvcHlpbmcgdGhlIGZvcm1lciBpZgojIHRoZXJlIGlzIG5vLiBUaGlzIGFsbG93cyBlbmQtdXNlciB0byBjb25zY2lvdXNseSByZXRhaW4gc21hbGwgYmxvY2sKIyBwZXJmb3JtYW5jZSBieSBhbGlnbmluZyBrZXkgc2NoZWR1bGUgaW4gc3BlY2lmaWMgbWFubmVyLgojCiMgVmVyc2lvbiAzLjYgY29tcHJlc3NlcyBUZDQgdG8gMjU2IGJ5dGVzIGFuZCBwcmVmZXRjaGVzIGl0IGluIEVDQi4KIwojIEN1cnJlbnQgRUNCIHBlcmZvcm1hbmNlIG51bWJlcnMgZm9yIDEyOC1iaXQga2V5IGluIENQVSBjeWNsZXMgcGVyCiMgcHJvY2Vzc2VkIGJ5dGUgW21lYXN1cmUgY29tbW9ubHkgdXNlZCBieSBBRVMgYmVuY2htYXJrZXJzXSBhcmU6CiMKIwkJc21hbGwgZm9vdHByaW50CQlmdWxseSB1bnJvbGxlZAojIFA0CQkyNAkJCTIyCiMgQU1EIEs4CTIwCQkJMTkKIyBQSUlJCQkyNQkJCTIzCiMgUGVudGl1bQk4MQkJCTc4CiMKIyBWZXJzaW9uIDMuNyByZWltcGxlbWVudHMgb3V0ZXIgcm91bmRzIGFzICJjb21wYWN0LiIgTWVhbmluZyB0aGF0CiMgZmlyc3QgYW5kIGxhc3Qgcm91bmRzIHJlZmVyZW5jZSBjb21wYWN0IDI1NiBieXRlcyBTLWJveC4gVGhpcyBtZWFucwojIHRoYXQgZmlyc3Qgcm91bmQgY29uc3VtZXMgYSBsb3QgbW9yZSBDUFUgY3ljbGVzIGFuZCB0aGF0IGVuY3J5cHQKIyBhbmQgZGVjcnlwdCBwZXJmb3JtYW5jZSBiZWNvbWVzIGFzeW1tZXRyaWMuIEVuY3J5cHQgcGVyZm9ybWFuY2UKIyBkcm9wcyBieSAxMC0xMiUsIHdoaWxlIGRlY3J5cHQgLSBieSAyMC0yNSU6LSggMjU2IGJ5dGVzIFMtYm94IGlzCiMgYWdncmVzc2l2ZWx5IHByZS1mZXRjaGVkLgojCiMgVmVyc2lvbiA0LjAgZWZmZWN0aXZlbHkgcm9sbHMgYmFjayB0byAzLjYgYW5kIGluc3RlYWQgaW1wbGVtZW50cwojIGFkZGl0aW9uYWwgc2V0IG9mIGZ1bmN0aW9ucywgX1t4ODZ8c3NlXV9BRVNfW2VufGRlXWNyeXB0X2NvbXBhY3QsCiMgd2hpY2ggdXNlIGV4Y2x1c2l2ZWx5IDI1NiBieXRlIFMtYm94LiBUaGVzZSBmdW5jdGlvbnMgYXJlIHRvIGJlCiMgY2FsbGVkIGluIG1vZGVzIG5vdCBjb25jZWFsaW5nIHBsYWluIHRleHQsIHN1Y2ggYXMgRUNCLCBvciB3aGVuCiMgd2UncmUgYXNrZWQgdG8gcHJvY2VzcyBzbWFsbGVyIGFtb3VudCBvZiBkYXRhIFtvciB1bmNvbmRpdGlvbmFsbHkKIyBvbiBoeXBlci10aHJlYWRpbmcgQ1BVXS4gQ3VycmVudGx5IGl0J3MgY2FsbGVkIHVuY29uZGl0aW9uYWxseSBmcm9tCiMgQUVTX1tlbnxkZV1jcnlwdCwgd2hpY2ggYWZmZWN0cyBhbGwgbW9kZXMsIGJ1dCBDQkMuIENCQyByb3V0aW5lCiMgc3RpbGwgbmVlZHMgdG8gYmUgbW9kaWZpZWQgdG8gc3dpdGNoIGJldHdlZW4gc2xvd2VyIGFuZCBmYXN0ZXIKIyBtb2RlIHdoZW4gYXBwcm9wcmlhdGUuLi4gQnV0IGluIGVpdGhlciBjYXNlIGJlbmNobWFyayBsYW5kc2NhcGUKIyBjaGFuZ2VzIGRyYW1hdGljYWxseSBhbmQgYmVsb3cgbnVtYmVycyBhcmUgQ1BVIGN5Y2xlcyBwZXIgcHJvY2Vzc2VkCiMgYnl0ZSBmb3IgMTI4LWJpdCBrZXkuCiMKIwkJRUNCIGVuY3J5cHQJRUNCIGRlY3J5cHQJQ0JDIGxhcmdlIGNodW5rCiMgUDQJCTU2WzYwXQkJODRbMTAwXQkJMjMKIyBBTUQgSzgJNDhbNDRdCQk3MFs3OV0JCTE4CiMgUElJSQkJNDFbNTBdCQk2MVs5MV0JCTI0CiMgQ29yZSAyCTMyWzM4XQkJNDVbNzBdCQkxOC41CiMgUGVudGl1bQkxMjAJCTE2MAkJNzcKIwojIFZlcnNpb24gNC4xIHN3aXRjaGVzIHRvIGNvbXBhY3QgUy1ib3ggZXZlbiBpbiBrZXkgc2NoZWR1bGUgc2V0dXAuCiMKIyBWZXJzaW9uIDQuMiBwcmVmZXRjaGVzIGNvbXBhY3QgUy1ib3ggaW4gZXZlcnkgU1NFIHJvdW5kIG9yIGluIG90aGVyCiMgd29yZHMgZXZlcnkgY2FjaGUtbGluZSBpcyAqZ3VhcmFudGVlZCogdG8gYmUgYWNjZXNzZWQgd2l0aGluIH41MAojIGN5Y2xlcyB3aW5kb3cuIFdoeSBqdXN0IFNTRT8gQmVjYXVzZSBpdCdzIG5lZWRlZCBvbiBoeXBlci10aHJlYWRpbmcKIyBDUFUhIFdoaWNoIGlzIGFsc28gd2h5IGl0J3MgcHJlZmV0Y2hlZCB3aXRoIDY0IGJ5dGUgc3RyaWRlLiBCZXN0CiMgcGFydCBpcyB0aGF0IGl0IGhhcyBubyBuZWdhdGl2ZSBlZmZlY3Qgb24gcGVyZm9ybWFuY2U6LSkgIAojCiMgVmVyc2lvbiA0LjMgaW1wbGVtZW50cyBzd2l0Y2ggYmV0d2VlbiBjb21wYWN0IGFuZCBub24tY29tcGFjdCBibG9jawojIGZ1bmN0aW9ucyBpbiBBRVNfY2JjX2VuY3J5cHQgZGVwZW5kaW5nIG9uIGhvdyBtdWNoIGRhdGEgd2FzIGFza2VkCiMgdG8gYmUgcHJvY2Vzc2VkIGluIG9uZSBzdHJva2UuCiMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFRpbWluZyBhdHRhY2tzIGFyZSBjbGFzc2lmaWVkIGluIHR3byBjbGFzc2VzOiBzeW5jaHJvbm91cyB3aGVuCiMgYXR0YWNrZXIgY29uc2Npb3VzbHkgaW5pdGlhdGVzIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9uIGFuZCBjb2xsZWN0cwojIHRpbWluZyBkYXRhIG9mIHZhcmlvdXMgY2hhcmFjdGVyIGFmdGVyd2FyZHMsIGFuZCBhc3luY2hyb25vdXMgd2hlbgojIG1hbGljaW91cyBjb2RlIGlzIGV4ZWN1dGVkIG9uIHNhbWUgQ1BVIHNpbXVsdGFuZW91c2x5IHdpdGggQUVTLAojIGluc3RydW1lbnRzIGl0c2VsZiBhbmQgcGVyZm9ybXMgc3RhdGlzdGljYWwgYW5hbHlzaXMgb2YgdGhpcyBkYXRhLgojCiMgQXMgZmFyIGFzIHN5bmNocm9ub3VzIGF0dGFja3MgZ28gdGhlIHJvb3QgdG8gdGhlIEFFUyB0aW1pbmcKIyB2dWxuZXJhYmlsaXR5IGlzIHR3b2ZvbGQuIEZpcnN0bHksIG9mIDI1NiBTLWJveCBlbGVtZW50cyBhdCBtb3N0IDE2MAojIGFyZSByZWZlcnJlZCB0byBpbiBzaW5nbGUgMTI4LWJpdCBibG9jayBvcGVyYXRpb24uIFdlbGwsIGluIEMKIyBpbXBsZW1lbnRhdGlvbiB3aXRoIDQgZGlzdGluY3QgdGFibGVzIGl0J3MgYWN0dWFsbHkgYXMgbGl0dGxlIGFzIDQwCiMgcmVmZXJlbmNlcyBwZXIgMjU2IGVsZW1lbnRzIHRhYmxlLCBidXQgYW55d2F5Li4uIFNlY29uZGx5LCBldmVuCiMgdGhvdWdoIFMtYm94IGVsZW1lbnRzIGFyZSBjbHVzdGVyZWQgaW50byBzbWFsbGVyIGFtb3VudCBvZiBjYWNoZS0KIyBsaW5lcywgc21hbGxlciB0aGFuIDE2MCBhbmQgZXZlbiA0MCwgaXQgdHVybmVkIG91dCB0aGF0IGZvciBjZXJ0YWluCiMgcGxhaW4tdGV4dCBwYXR0ZXJuW3NdIG9yIHNpbXBseSBwdXQgY2hvc2VuIHBsYWluLXRleHQgYW5kIGdpdmVuIGtleQojIGZldyBjYWNoZS1saW5lcyByZW1haW4gdW5hY2Nlc3NlZCBkdXJpbmcgYmxvY2sgb3BlcmF0aW9uLiBOb3csIGlmCiMgYXR0YWNrZXIgY2FuIGZpZ3VyZSBvdXQgdGhpcyBhY2Nlc3MgcGF0dGVybiwgaGUgY2FuIGRlZHVjdCB0aGUga2V5CiMgW29yIGF0IGxlYXN0IHBhcnQgb2YgaXRdLiBUaGUgbmF0dXJhbCB3YXkgdG8gbWl0aWdhdGUgdGhpcyBraW5kIG9mCiMgYXR0YWNrcyBpcyB0byBtaW5pbWl6ZSB0aGUgYW1vdW50IG9mIGNhY2hlLWxpbmVzIGluIFMtYm94IGFuZC9vcgojIHByZWZldGNoIHRoZW0gdG8gZW5zdXJlIHRoYXQgZXZlcnkgb25lIGlzIGFjY2Vzc2VkIGZvciBtb3JlIHVuaWZvcm0KIyB0aW1pbmcuIEJ1dCBub3RlIHRoYXQgKmlmKiBwbGFpbi10ZXh0IHdhcyBjb25jZWFsZWQgaW4gc3VjaCB3YXkgdGhhdAojIGlucHV0IHRvIGJsb2NrIGZ1bmN0aW9uIGlzIGRpc3RyaWJ1dGVkICp1bmlmb3JtbHkqLCB0aGVuIGF0dGFjawojIHdvdWxkbid0IGFwcGx5LiBOb3cgbm90ZSB0aGF0IHNvbWUgZW5jcnlwdGlvbiBtb2RlcywgbW9zdCBub3RhYmx5CiMgQ0JDLCBkbyBtYXNrIHRoZSBwbGFpbi10ZXh0IGluIHRoaXMgZXhhY3Qgd2F5IFtzZWN1cmUgY2lwaGVyIG91dHB1dAojIGlzIGRpc3RyaWJ1dGVkIHVuaWZvcm1seV0uIFllcywgb25lIHN0aWxsIG1pZ2h0IGZpbmQgaW5wdXQgdGhhdAojIHdvdWxkIHJldmVhbCB0aGUgaW5mb3JtYXRpb24gYWJvdXQgZ2l2ZW4ga2V5LCBidXQgaWYgYW1vdW50IG9mCiMgY2FuZGlkYXRlIGlucHV0cyB0byBiZSB0cmllZCBpcyBsYXJnZXIgdGhhbiBhbW91bnQgb2YgcG9zc2libGUga2V5CiMgY29tYmluYXRpb25zIHRoZW4gYXR0YWNrIGJlY29tZXMgaW5mZWFzaWJsZS4gVGhpcyBpcyB3aHkgcmV2aXNlZAojIEFFU19jYmNfZW5jcnlwdCAiZGFyZXMiIHRvIHN3aXRjaCB0byBsYXJnZXIgUy1ib3ggd2hlbiBsYXJnZXIgY2h1bmsKIyBvZiBkYXRhIGlzIHRvIGJlIHByb2Nlc3NlZCBpbiBvbmUgc3Ryb2tlLiBUaGUgY3VycmVudCBzaXplIGxpbWl0IG9mCiMgNTEyIGJ5dGVzIGlzIGNob3NlbiB0byBwcm92aWRlIHNhbWUgW2RpbWluaXNoaWdseSBsb3ddIHByb2JhYmlsaXR5CiMgZm9yIGNhY2hlLWxpbmUgdG8gcmVtYWluIHVudG91Y2hlZCBpbiBsYXJnZSBjaHVuayBvcGVyYXRpb24gd2l0aAojIGxhcmdlIFMtYm94IGFzIGZvciBzaW5nbGUgYmxvY2sgb3BlcmF0aW9uIHdpdGggY29tcGFjdCBTLWJveCBhbmQKIyBzdXJlbHkgbmVlZHMgbW9yZSBjYXJlZnVsIGNvbnNpZGVyYXRpb24uLi4KIwojIEFzIGZvciBhc3luY2hyb25vdXMgYXR0YWNrcy4gVGhlcmUgYXJlIHR3byBmbGF2b3VyczogYXR0YWNrZXIgY29kZQojIGJlaW5nIGludGVybGVhdmVkIHdpdGggQUVTIG9uIGh5cGVyLXRocmVhZGluZyBDUFUgYXQgKmluc3RydWN0aW9uKgojIGxldmVsLCBhbmQgdHdvIHByb2Nlc3NlcyB0aW1lIHNoYXJpbmcgc2luZ2xlIGNvcmUuIEFzIGZvciBsYXR0ZXIuCiMgVHdvIHZlY3RvcnMuIDEuIEdpdmVuIHRoYXQgYXR0YWNrZXIgcHJvY2VzcyBoYXMgaGlnaGVyIHByaW9yaXR5LAojIHlpZWxkIGV4ZWN1dGlvbiB0byBwcm9jZXNzIHBlcmZvcm1pbmcgQUVTIGp1c3QgYmVmb3JlIHRpbWVyIGZpcmVzCiMgb2ZmIHRoZSBzY2hlZHVsZXIsIGltbWVkaWF0ZWx5IHJlZ2FpbiBjb250cm9sIG9mIENQVSBhbmQgYW5hbHl6ZSB0aGUKIyBjYWNoZSBzdGF0ZS4gRm9yIHRoaXMgYXR0YWNrIHRvIGJlIGVmZmljaWVudCBhdHRhY2tlciB3b3VsZCBoYXZlIHRvCiMgZWZmZWN0aXZlbHkgc2xvdyBkb3duIHRoZSBvcGVyYXRpb24gYnkgc2V2ZXJhbCAqb3JkZXJzKiBvZiBtYWduaXR1dGUsCiMgYnkgcmF0aW8gb2YgdGltZSBzbGljZSB0byBkdXJhdGlvbiBvZiBoYW5kZnVsIG9mIEFFUyByb3VuZHMsIHdoaWNoCiMgdW5saWtlbHkgdG8gcmVtYWluIHVubm90aWNlZC4gTm90IHRvIG1lbnRpb24gdGhhdCB0aGlzIGFsc28gbWVhbnMKIyB0aGF0IGhlIHdvdWxkIHNwZW5kIGNvcnJlc3BvbmRpZ2x5IG1vcmUgdGltZSB0byBjb2xsZWN0IGVub3VnaAojIHN0YXRpc3RpY2FsIGRhdGEgdG8gbW91bnQgdGhlIGF0dGFjay4gSXQncyBwcm9iYWJseSBhcHByb3ByaWF0ZSB0bwojIHNheSB0aGF0IGlmIGFkZXZlcnNhcnkgcmVja29ucyB0aGF0IHRoaXMgYXR0YWNrIGlzIGJlbmVmaWNpYWwgYW5kCiMgcmlza3MgdG8gYmUgbm90aWNlZCwgeW91IHByb2JhYmx5IGhhdmUgbGFyZ2VyIHByb2JsZW1zIGhhdmluZyBoaW0KIyBtZXJlIG9wcG9ydHVuaXR5LiBJbiBvdGhlciB3b3JkcyBzdWdnZXN0ZWQgY29kZSBkZXNpZ24gZXhwZWN0cyB5b3UKIyB0byBwcmVjbHVkZS9taXRpZ2F0ZSB0aGlzIGF0dGFjayBieSBvdmVyYWxsIHN5c3RlbSBzZWN1cml0eSBkZXNpZ24uCiMgMi4gQXR0YWNrZXIgbWFuYWdlcyB0byBtYWtlIGhpcyBjb2RlIGludGVycnVwdCBkcml2ZW4uIEluIG9yZGVyIGZvcgojIHRoaXMga2luZCBvZiBhdHRhY2sgdG8gYmUgZmVhc2libGUsIGludGVycnVwdCByYXRlIGhhcyB0byBiZSBoaWdoCiMgZW5vdWdoLCBhZ2FpbiBjb21wYXJhYmxlIHRvIGR1cmF0aW9uIG9mIGhhbmRmdWwgb2YgQUVTIHJvdW5kcy4gQnV0CiMgaXMgdGhlcmUgaW50ZXJydXB0IHNvdXJjZSBvZiBzdWNoIHJhdGU/IEhhcmRseSwgbm90IGV2ZW4gMUdicHMgTklDCiMgZ2VuZXJhdGVzIGludGVycnVwdHMgYXQgc3VjaCByYWdpbmcgcmF0ZS4uLgojCiMgQW5kIG5vdyBiYWNrIHRvIHRoZSBmb3JtZXIsIGh5cGVyLXRocmVhZGluZyBDUFUgb3IgbW9yZSBzcGVjaWZpY2FsbHkKIyBJbnRlbCBQNC4gUmVjYWxsIHRoYXQgYXN5bmNocm9ub3VzIGF0dGFjayBpbXBsaWVzIHRoYXQgbWFsaWNpb3VzCiMgY29kZSBpbnN0cnVtZW50cyBpdHNlbGYuIEFuZCBuYXR1cmFsbHkgaW5zdHJ1bWVudGF0aW9uIGdyYW51bGFyaXR5CiMgaGFzIGJlIG5vdGljZWFibHkgbG93ZXIgdGhhbiBkdXJhdGlvbiBvZiBjb2RlcGF0aCBhY2Nlc3NpbmcgUy1ib3guCiMgR2l2ZW4gdGhhdCBhbGwgY2FjaGUtbGluZXMgYXJlIGFjY2Vzc2VkIGR1cmluZyB0aGF0IHRpbWUgdGhhdCBpcy4KIyBDdXJyZW50IGltcGxlbWVudGF0aW9uIGFjY2Vzc2VzICphbGwqIGNhY2hlLWxpbmVzIHdpdGhpbiB+NTAgY3ljbGVzCiMgd2luZG93LCB3aGljaCBpcyBhY3R1YWxseSAqbGVzcyogdGhhbiBSRFRTQyBsYXRlbmN5IG9uIEludGVsIFA0IQoKJDAgPX4gbS8oLipbXC9cXF0pW15cL1xcXSskLzsgJGRpcj0kMTsKcHVzaChASU5DLCIke2Rpcn0iLCIke2Rpcn0uLi8uLi9wZXJsYXNtIik7CnJlcXVpcmUgIng4NmFzbS5wbCI7CgomYXNtX2luaXQoJEFSR1ZbMF0sImFlcy01ODYucGwiLCR4ODZvbmx5ID0gJEFSR1ZbJCNBUkdWXSBlcSAiMzg2Iik7CiZzdGF0aWNfbGFiZWwoIkFFU19UZSIpOwomc3RhdGljX2xhYmVsKCJBRVNfVGQiKTsKCiRzMD0iZWF4IjsKJHMxPSJlYngiOwokczI9ImVjeCI7CiRzMz0iZWR4IjsKJGtleT0iZWRpIjsKJGFjYz0iZXNpIjsKJHRibD0iZWJwIjsKCiMgc3RhY2sgZnJhbWUgbGF5b3V0IGluIF9beDg2fHNzZV1fQUVTXyogcm91dGluZXMsIGZyYW1lIGlzIGFsbG9jYXRlZAojIGJ5IGNhbGxlcgokX19yYT0mRFdQKDAsImVzcCIpOwkjIHJldHVybiBhZGRyZXNzCiRfX3MwPSZEV1AoNCwiZXNwIik7CSMgczAgYmFja2luZyBzdG9yZQokX19zMT0mRFdQKDgsImVzcCIpOwkjIHMxIGJhY2tpbmcgc3RvcmUKJF9fczI9JkRXUCgxMiwiZXNwIik7CSMgczIgYmFja2luZyBzdG9yZQokX19zMz0mRFdQKDE2LCJlc3AiKTsJIyBzMyBiYWNraW5nIHN0b3JlCiRfX2tleT0mRFdQKDIwLCJlc3AiKTsJIyBwb2ludGVyIHRvIGtleSBzY2hlZHVsZQokX19lbmQ9JkRXUCgyNCwiZXNwIik7CSMgcG9pbnRlciB0byBlbmQgb2Yga2V5IHNjaGVkdWxlCiRfX3RibD0mRFdQKDI4LCJlc3AiKTsJIyAlZWJwIGJhY2tpbmcgc3RvcmUKCiMgc3RhY2sgZnJhbWUgbGF5b3V0IGluIEFFU19bZW58Y3J5cHRdIHJvdXRpbmVzLCB3aGljaCBkaWZmZXJzIGZyb20KIyBhYm92ZSBieSA0IGFuZCBvdmVybGFwcyBieSAlZWJwIGJhY2tpbmcgc3RvcmUKJF90Ymw9JkRXUCgyNCwiZXNwIik7CiRfZXNwPSZEV1AoMjgsImVzcCIpOwoKc3ViIF9kYXRhX3dvcmQoKSB7IG15ICRpOyB3aGlsZShkZWZpbmVkKCRpPXNoaWZ0KSkgeyAmZGF0YV93b3JkKCRpLCRpKTsgfSB9Cgokc3BlZWRfbGltaXQ9NTEyOwkjIGNodW5rcyBzbWFsbGVyIHRoYW4gJHNwZWVkX2xpbWl0IGFyZQoJCQkjIHByb2Nlc3NlZCB3aXRoIGNvbXBhY3Qgcm91dGluZSBpbiBDQkMgbW9kZQokc21hbGxfZm9vdHByaW50PTE7CSMgJHNtYWxsX2Zvb3RwcmludD0xIGNvZGUgaXMgfjUlIHNsb3dlciBbb24KCQkJIyByZWNlbnQgtS1hcmNoc10sIGJ1dCB+NSB0aW1lcyBzbWFsbGVyIQoJCQkjIEkgZmF2b3IgY29tcGFjdCBjb2RlIHRvIG1pbmltaXplIGNhY2hlCgkJCSMgY29udGVudGlvbiBhbmQgaW4gaG9wZSB0byAiY29sbGVjdCIgNSUgYmFjawoJCQkjIGluIHJlYWwtbGlmZSBhcHBsaWNhdGlvbnMuLi4KCiR2ZXJ0aWNhbF9zcGluPTA7CSMgc2hpZnQgInZlcnRpY2FseSIgZGVmYXVsdHMgdG8gMCwgYmVjYXVzZSBvZgoJCQkjIGl0cyBwcm9vZi1vZi1jb25jZXB0IHN0YXR1cy4uLgojIE5vdGUgdGhhdCB0aGVyZSBpcyBubyBkZWN2ZXJ0KCksIGFzIHdlbGwgYXMgbGFzdCBlbmNyeXB0aW9uIHJvdW5kIGlzCiMgcGVyZm9ybWVkIHdpdGggImhvcml6b250YWwiIHNoaWZ0cy4gVGhpcyBpcyBiZWNhdXNlIHRoaXMgInZlcnRpY2FsIgojIGltcGxlbWVudGF0aW9uIFtvbmUgd2hpY2ggZ3JvdXBzIHNoaWZ0cyBvbiBhIGdpdmVuICRzW2ldIHRvIGZvcm0gYQojICJjb2x1bW4sIiB1bmxpa2UgImhvcml6b250YWwiIG9uZSwgd2hpY2ggZ3JvdXBzIHNoaWZ0cyBvbiBkaWZmZXJlbnQKIyAkc1tpXSB0byBmb3JtIGEgInJvdyJdIGlzIHdvcmsgaW4gcHJvZ3Jlc3MuIEl0IHdhcyBvYnNlcnZlZCB0byBydW4KIyBmZXcgcGVyY2VudHMgZmFzdGVyIG9uIEludGVsIGNvcmVzLCBidXQgbm90IEFNRC4gT24gQU1EIEs4IGNvcmUgaXQncwojIHdob2xlIDEyJSBzbG93ZXI6LSggU28gd2UgZmFjZSBhIHRyYWRlLW9mZi4uLiBTaGFsbCBpdCBiZSByZXNvbHZlZAojIHNvbWUgZGF5PyBUaWxsIHRoZW4gdGhlIGNvZGUgaXMgY29uc2lkZXJlZCBleHBlcmltZW50YWwgYW5kIGJ5CiMgZGVmYXVsdCByZW1haW5zIGRvcm1hbnQuLi4KCnN1YiBlbmN2ZXJ0KCkKeyBteSAoJHRlLEBzKSA9IEBfOwogIG15ICR2MCA9ICRhY2MsICR2MSA9ICRrZXk7CgoJJm1vdgkoJHYwLCRzWzNdKTsJCQkJIyBjb3B5IHMzCgkmbW92CSgmRFdQKDQsImVzcCIpLCRzWzJdKTsJCQkjIHNhdmUgczIKCSZtb3YJKCR2MSwkc1swXSk7CQkJCSMgY29weSBzMAoJJm1vdgkoJkRXUCg4LCJlc3AiKSwkc1sxXSk7CQkJIyBzYXZlIHMxCgoJJm1vdnoJKCRzWzJdLCZIQigkc1swXSkpOwoJJmFuZAkoJHNbMF0sMHhGRik7CgkmbW92CSgkc1swXSwmRFdQKDAsJHRlLCRzWzBdLDgpKTsJCSMgczA+PjAKCSZzaHIJKCR2MSwxNik7CgkmbW92CSgkc1szXSwmRFdQKDMsJHRlLCRzWzJdLDgpKTsJCSMgczA+PjgKCSZtb3Z6CSgkc1sxXSwmSEIoJHYxKSk7CgkmYW5kCSgkdjEsMHhGRik7CgkmbW92CSgkc1syXSwmRFdQKDIsJHRlLCR2MSw4KSk7CQkjIHMwPj4xNgoJICZtb3YJKCR2MSwkdjApOwoJJm1vdgkoJHNbMV0sJkRXUCgxLCR0ZSwkc1sxXSw4KSk7CQkjIHMwPj4yNAoKCSZhbmQJKCR2MCwweEZGKTsKCSZ4b3IJKCRzWzNdLCZEV1AoMCwkdGUsJHYwLDgpKTsJCSMgczM+PjAKCSZtb3Z6CSgkdjAsJkhCKCR2MSkpOwoJJnNocgkoJHYxLDE2KTsKCSZ4b3IJKCRzWzJdLCZEV1AoMywkdGUsJHYwLDgpKTsJCSMgczM+PjgKCSZtb3Z6CSgkdjAsJkhCKCR2MSkpOwoJJmFuZAkoJHYxLDB4RkYpOwoJJnhvcgkoJHNbMV0sJkRXUCgyLCR0ZSwkdjEsOCkpOwkJIyBzMz4+MTYKCSAmbW92CSgkdjEsJkRXUCg0LCJlc3AiKSk7CQkJIyByZXN0b3JlIHMyCgkmeG9yCSgkc1swXSwmRFdQKDEsJHRlLCR2MCw4KSk7CQkjIHMzPj4yNAoKCSZtb3YJKCR2MCwkdjEpOwoJJmFuZAkoJHYxLDB4RkYpOwoJJnhvcgkoJHNbMl0sJkRXUCgwLCR0ZSwkdjEsOCkpOwkJIyBzMj4+MAoJJm1vdnoJKCR2MSwmSEIoJHYwKSk7Cgkmc2hyCSgkdjAsMTYpOwoJJnhvcgkoJHNbMV0sJkRXUCgzLCR0ZSwkdjEsOCkpOwkJIyBzMj4+OAoJJm1vdnoJKCR2MSwmSEIoJHYwKSk7CgkmYW5kCSgkdjAsMHhGRik7CgkmeG9yCSgkc1swXSwmRFdQKDIsJHRlLCR2MCw4KSk7CQkjIHMyPj4xNgoJICZtb3YJKCR2MCwmRFdQKDgsImVzcCIpKTsJCQkjIHJlc3RvcmUgczEKCSZ4b3IJKCRzWzNdLCZEV1AoMSwkdGUsJHYxLDgpKTsJCSMgczI+PjI0CgoJJm1vdgkoJHYxLCR2MCk7CgkmYW5kCSgkdjAsMHhGRik7CgkmeG9yCSgkc1sxXSwmRFdQKDAsJHRlLCR2MCw4KSk7CQkjIHMxPj4wCgkmbW92egkoJHYwLCZIQigkdjEpKTsKCSZzaHIJKCR2MSwxNik7CgkmeG9yCSgkc1swXSwmRFdQKDMsJHRlLCR2MCw4KSk7CQkjIHMxPj44CgkmbW92egkoJHYwLCZIQigkdjEpKTsKCSZhbmQJKCR2MSwweEZGKTsKCSZ4b3IJKCRzWzNdLCZEV1AoMiwkdGUsJHYxLDgpKTsJCSMgczE+PjE2CgkgJm1vdgkoJGtleSwkX19rZXkpOwkJCQkjIHJlaW5jYXJuYXRlIHYxIGFzIGtleQoJJnhvcgkoJHNbMl0sJkRXUCgxLCR0ZSwkdjAsOCkpOwkJIyBzMT4+MjQKfQoKIyBBbm90aGVyIGV4cGVyaW1lbnRhbCByb3V0aW5lLCB3aGljaCBmZWF0dXJlcyAiaG9yaXpvbnRhbCBzcGluLCIgYnV0CiMgZWxpbWluYXRlcyBvbmUgcmVmZXJlbmNlIHRvIHN0YWNrLiBTdHJhbmdlbHkgZW5vdWdoIHJ1bnMgc2xvd2VyLi4uCnN1YiBlbmNob3JpeigpCnsgbXkgJHYwID0gJGtleSwgJHYxID0gJGFjYzsKCgkmbW92egkoJHYwLCZMQigkczApKTsJCQkjICAzLCAyLCAxLCAwKgoJJnJvdHIJKCRzMiw4KTsJCQkjICA4LDExLDEwLCA5CgkmbW92CSgkdjEsJkRXUCgwLCR0ZSwkdjAsOCkpOwkjICAwCgkmbW92egkoJHYwLCZIQigkczEpKTsJCQkjICA3LCA2LCA1KiwgNAoJJnJvdHIJKCRzMywxNik7CQkJIyAxMywxMiwxNSwxNAoJJnhvcgkoJHYxLCZEV1AoMywkdGUsJHYwLDgpKTsJIyAgNQoJJm1vdnoJKCR2MCwmSEIoJHMyKSk7CQkJIyAgOCwxMSwxMCosIDkKCSZyb3RyCSgkczAsMTYpOwkJCSMgIDEsIDAsIDMsIDIKCSZ4b3IJKCR2MSwmRFdQKDIsJHRlLCR2MCw4KSk7CSMgMTAKCSZtb3Z6CSgkdjAsJkhCKCRzMykpOwkJCSMgMTMsMTIsMTUqLDE0CgkmeG9yCSgkdjEsJkRXUCgxLCR0ZSwkdjAsOCkpOwkjIDE1LCB0WzBdIGNvbGxlY3RlZAoJJm1vdgkoJF9fczAsJHYxKTsJCQkjIHRbMF0gc2F2ZWQKCgkmbW92egkoJHYwLCZMQigkczEpKTsJCQkjICA3LCA2LCA1LCA0KgoJJnNocgkoJHMxLDE2KTsJCQkjICAtLCAtLCA3LCA2CgkmbW92CSgkdjEsJkRXUCgwLCR0ZSwkdjAsOCkpOwkjICA0CgkmbW92egkoJHYwLCZMQigkczMpKTsJCQkjIDEzLDEyLDE1LDE0KgoJJnhvcgkoJHYxLCZEV1AoMiwkdGUsJHYwLDgpKTsJIyAxNAoJJm1vdnoJKCR2MCwmSEIoJHMwKSk7CQkJIyAgMSwgMCwgMyosIDIKCSZhbmQJKCRzMywweGZmZmYwMDAwKTsJCSMgMTMsMTIsIC0sIC0KCSZ4b3IJKCR2MSwmRFdQKDEsJHRlLCR2MCw4KSk7CSMgIDMKCSZtb3Z6CSgkdjAsJkxCKCRzMikpOwkJCSMgIDgsMTEsMTAsIDkqCgkmb3IJKCRzMywkczEpOwkJCSMgMTMsMTIsIDcsIDYKCSZ4b3IJKCR2MSwmRFdQKDMsJHRlLCR2MCw4KSk7CSMgIDksIHRbMV0gY29sbGVjdGVkCgkmbW92CSgkczEsJHYxKTsJCQkjICBzWzFdPXRbMV0KCgkmbW92egkoJHYwLCZMQigkczApKTsJCQkjICAxLCAwLCAzLCAyKgoJJnNocgkoJHMyLDE2KTsJCQkjICAtLCAtLCA4LDExCgkmbW92CSgkdjEsJkRXUCgyLCR0ZSwkdjAsOCkpOwkjICAyCgkmbW92egkoJHYwLCZIQigkczMpKTsJCQkjIDEzLDEyLCA3KiwgNgoJJnhvcgkoJHYxLCZEV1AoMSwkdGUsJHYwLDgpKTsJIyAgNwoJJm1vdnoJKCR2MCwmSEIoJHMyKSk7CQkJIyAgLSwgLSwgOCosMTEKCSZ4b3IJKCR2MSwmRFdQKDAsJHRlLCR2MCw4KSk7CSMgIDgKCSZtb3YJKCR2MCwkczMpOwoJJnNocgkoJHYwLDI0KTsJCQkjIDEzCgkmeG9yCSgkdjEsJkRXUCgzLCR0ZSwkdjAsOCkpOwkjIDEzLCB0WzJdIGNvbGxlY3RlZAoKCSZtb3Z6CSgkdjAsJkxCKCRzMikpOwkJCSMgIC0sIC0sIDgsMTEqCgkmc2hyCSgkczAsMjQpOwkJCSMgIDEqCgkmbW92CSgkczIsJkRXUCgxLCR0ZSwkdjAsOCkpOwkjIDExCgkmeG9yCSgkczIsJkRXUCgzLCR0ZSwkczAsOCkpOwkjICAxCgkmbW92CSgkczAsJF9fczApOwkJCSMgc1swXT10WzBdCgkmbW92egkoJHYwLCZMQigkczMpKTsJCQkjIDEzLDEyLCA3LCA2KgoJJnNocgkoJHMzLDE2KTsJCQkjICAgLCAgLDEzLDEyCgkmeG9yCSgkczIsJkRXUCgyLCR0ZSwkdjAsOCkpOwkjICA2CgkmbW92CSgka2V5LCRfX2tleSk7CQkJIyByZWluY2FybmF0ZSB2MCBhcyBrZXkKCSZhbmQJKCRzMywweGZmKTsJCQkjICAgLCAgLDEzLDEyKgoJJm1vdgkoJHMzLCZEV1AoMCwkdGUsJHMzLDgpKTsJIyAxMgoJJnhvcgkoJHMzLCRzMik7CQkJIyBzWzJdPXRbM10gY29sbGVjdGVkCgkmbW92CSgkczIsJHYxKTsJCQkjIHNbMl09dFsyXQp9CgojIE1vcmUgZXhwZXJpbWVudGFsIGNvZGUuLi4gU1NFIG9uZS4uLiBFdmVuIHRob3VnaCB0aGlzIG9uZSBlbGltaW5hdGVzCiMgKmFsbCogcmVmZXJlbmNlcyB0byBzdGFjaywgaXQncyBub3QgZmFzdGVyLi4uCnN1YiBzc2VfZW5jYm9keSgpCnsKCSZtb3Z6CSgkYWNjLCZMQigiZWF4IikpOwkJIyAgMAoJJm1vdgkoImVjeCIsJkRXUCgwLCR0YmwsJGFjYyw4KSk7CSMgIDAKCSZwc2h1ZncJKCJtbTIiLCJtbTAiLDB4MGQpOwkJIyAgNywgNiwgMywgMgoJJm1vdnoJKCJlZHgiLCZIQigiZWF4IikpOwkJIyAgMQoJJm1vdgkoImVkeCIsJkRXUCgzLCR0YmwsImVkeCIsOCkpOwkjICAxCgkmc2hyCSgiZWF4IiwxNik7CQkJIyAgNSwgNAoKCSZtb3Z6CSgkYWNjLCZMQigiZWJ4IikpOwkJIyAxMAoJJnhvcgkoImVjeCIsJkRXUCgyLCR0YmwsJGFjYyw4KSk7CSMgMTAKCSZwc2h1ZncJKCJtbTYiLCJtbTQiLDB4MDgpOwkJIyAxMywxMiwgOSwgOAoJJm1vdnoJKCRhY2MsJkhCKCJlYngiKSk7CQkjIDExCgkmeG9yCSgiZWR4IiwmRFdQKDEsJHRibCwkYWNjLDgpKTsJIyAxMQoJJnNocgkoImVieCIsMTYpOwkJCSMgMTUsMTQKCgkmbW92egkoJGFjYywmSEIoImVheCIpKTsJCSMgIDUKCSZ4b3IJKCJlY3giLCZEV1AoMywkdGJsLCRhY2MsOCkpOwkjICA1CgkmbW92cQkoIm1tMyIsUVdQKDE2LCRrZXkpKTsKCSZtb3Z6CSgkYWNjLCZIQigiZWJ4IikpOwkJIyAxNQoJJnhvcgkoImVjeCIsJkRXUCgxLCR0YmwsJGFjYyw4KSk7CSMgMTUKCSZtb3ZkCSgibW0wIiwiZWN4Iik7CQkJIyB0WzBdIGNvbGxlY3RlZAoKCSZtb3Z6CSgkYWNjLCZMQigiZWF4IikpOwkJIyAgNAoJJm1vdgkoImVjeCIsJkRXUCgwLCR0YmwsJGFjYyw4KSk7CSMgIDQKCSZtb3ZkCSgiZWF4IiwibW0yIik7CQkJIyAgNywgNiwgMywgMgoJJm1vdnoJKCRhY2MsJkxCKCJlYngiKSk7CQkjIDE0CgkmeG9yCSgiZWN4IiwmRFdQKDIsJHRibCwkYWNjLDgpKTsJIyAxNAoJJm1vdmQJKCJlYngiLCJtbTYiKTsJCQkjIDEzLDEyLCA5LCA4CgoJJm1vdnoJKCRhY2MsJkhCKCJlYXgiKSk7CQkjICAzCgkmeG9yCSgiZWN4IiwmRFdQKDEsJHRibCwkYWNjLDgpKTsJIyAgMwoJJm1vdnoJKCRhY2MsJkhCKCJlYngiKSk7CQkjICA5CgkmeG9yCSgiZWN4IiwmRFdQKDMsJHRibCwkYWNjLDgpKTsJIyAgOQoJJm1vdmQJKCJtbTEiLCJlY3giKTsJCQkjIHRbMV0gY29sbGVjdGVkCgoJJm1vdnoJKCRhY2MsJkxCKCJlYXgiKSk7CQkjICAyCgkmbW92CSgiZWN4IiwmRFdQKDIsJHRibCwkYWNjLDgpKTsJIyAgMgoJJnNocgkoImVheCIsMTYpOwkJCSMgIDcsIDYKCSZwdW5wY2tsZHEJKCJtbTAiLCJtbTEiKTsJCSMgdFswLDFdIGNvbGxlY3RlZAoJJm1vdnoJKCRhY2MsJkxCKCJlYngiKSk7CQkjICA4CgkmeG9yCSgiZWN4IiwmRFdQKDAsJHRibCwkYWNjLDgpKTsJIyAgOAoJJnNocgkoImVieCIsMTYpOwkJCSMgMTMsMTIKCgkmbW92egkoJGFjYywmSEIoImVheCIpKTsJCSMgIDcKCSZ4b3IJKCJlY3giLCZEV1AoMSwkdGJsLCRhY2MsOCkpOwkjICA3CgkmcHhvcgkoIm1tMCIsIm1tMyIpOwoJJm1vdnoJKCJlYXgiLCZMQigiZWF4IikpOwkJIyAgNgoJJnhvcgkoImVkeCIsJkRXUCgyLCR0YmwsImVheCIsOCkpOwkjICA2CgkmcHNodWZ3CSgibW0xIiwibW0wIiwweDA4KTsJCSMgIDUsIDQsIDEsIDAKCSZtb3Z6CSgkYWNjLCZIQigiZWJ4IikpOwkJIyAxMwoJJnhvcgkoImVjeCIsJkRXUCgzLCR0YmwsJGFjYyw4KSk7CSMgMTMKCSZ4b3IJKCJlY3giLCZEV1AoMjQsJGtleSkpOwkJIyB0WzJdCgkmbW92ZAkoIm1tNCIsImVjeCIpOwkJCSMgdFsyXSBjb2xsZWN0ZWQKCSZtb3Z6CSgiZWJ4IiwmTEIoImVieCIpKTsJCSMgMTIKCSZ4b3IJKCJlZHgiLCZEV1AoMCwkdGJsLCJlYngiLDgpKTsJIyAxMgoJJnNocgkoImVjeCIsMTYpOwoJJm1vdmQJKCJlYXgiLCJtbTEiKTsJCQkjICA1LCA0LCAxLCAwCgkmbW92CSgiZWJ4IiwmRFdQKDI4LCRrZXkpKTsJCSMgdFszXQoJJnhvcgkoImVieCIsImVkeCIpOwoJJm1vdmQJKCJtbTUiLCJlYngiKTsJCQkjIHRbM10gY29sbGVjdGVkCgkmYW5kCSgiZWJ4IiwweGZmZmYwMDAwKTsKCSZvcgkoImVieCIsImVjeCIpOwoKCSZwdW5wY2tsZHEJKCJtbTQiLCJtbTUiKTsJCSMgdFsyLDNdIGNvbGxlY3RlZAp9CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgIkNvbXBhY3QiIGJsb2NrIGZ1bmN0aW9uCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCnN1YiBlbmNjb21wYWN0KCkKeyBteSAkRm4gPSBtb3Y7CiAgd2hpbGUgKCQjXz41KSB7IHBvcChAXyk7ICRGbj1zdWJ7fTsgfQogIG15ICgkaSwkdGUsQHMpPUBfOwogIG15ICR0bXAgPSAka2V5OwogIG15ICRvdXQgPSAkaT09Mz8kc1swXTokYWNjOwoKCSMgJEZuIGlzIHVzZWQgaW4gZmlyc3QgY29tcGFjdCByb3VuZCBhbmQgaXRzIHB1cnBvc2UgaXMgdG8KCSMgdm9pZCByZXN0b3JhdGlvbiBvZiBzb21lIHZhbHVlcyBmcm9tIHN0YWNrLCBzbyB0aGF0IGFmdGVyCgkjIDR4ZW5jY29tcGFjdCB3aXRoIGV4dHJhIGFyZ3VtZW50ICRrZXkgdmFsdWUgaXMgbGVmdCB0aGVyZS4uLgoJaWYgKCRpPT0zKSAgewkmJEZuCSgka2V5LCRfX2tleSk7CQkJfSMjJWVkeAoJZWxzZSAgICAgICAgewkmbW92CSgkb3V0LCRzWzBdKTsJCQl9CgkJCSZhbmQJKCRvdXQsMHhGRik7CglpZiAoJGk9PTEpICB7CSZzaHIJKCRzWzBdLDE2KTsJCQl9IyVlYnhbMV0KCWlmICgkaT09MikgIHsJJnNocgkoJHNbMF0sMjQpOwkJCX0jJWVjeFsyXQoJCQkmbW92egkoJG91dCwmQlAoLTEyOCwkdGUsJG91dCwxKSk7CgoJaWYgKCRpPT0zKSAgewkkdG1wPSRzWzFdOwkJCQl9IyMlZWF4CgkJCSZtb3Z6CSgkdG1wLCZIQigkc1sxXSkpOwoJCQkmbW92egkoJHRtcCwmQlAoLTEyOCwkdGUsJHRtcCwxKSk7CgkJCSZzaGwJKCR0bXAsOCk7CgkJCSZ4b3IJKCRvdXQsJHRtcCk7CgoJaWYgKCRpPT0zKSAgewkkdG1wPSRzWzJdOyAmbW92ICgkc1sxXSwkX19zMCk7CQl9IyMlZWJ4CgllbHNlICAgICAgICB7CSZtb3YJKCR0bXAsJHNbMl0pOwoJCQkmc2hyCSgkdG1wLDE2KTsJCQl9CglpZiAoJGk9PTIpICB7CSZhbmQJKCRzWzFdLDB4RkYpOwkJCX0jJWVkeFsyXQoJCQkmYW5kCSgkdG1wLDB4RkYpOwoJCQkmbW92egkoJHRtcCwmQlAoLTEyOCwkdGUsJHRtcCwxKSk7CgkJCSZzaGwJKCR0bXAsMTYpOwoJCQkmeG9yCSgkb3V0LCR0bXApOwoKCWlmICgkaT09MykgIHsJJHRtcD0kc1szXTsgJm1vdiAoJHNbMl0sJF9fczEpOwkJfSMjJWVjeAoJZWxzaWYoJGk9PTIpewkmbW92egkoJHRtcCwmSEIoJHNbM10pKTsJCX0jJWVieFsyXQoJZWxzZSAgICAgICAgewkmbW92CSgkdG1wLCRzWzNdKTsKCQkJJnNocgkoJHRtcCwyNCk7CQkJfQoJCQkmbW92egkoJHRtcCwmQlAoLTEyOCwkdGUsJHRtcCwxKSk7CgkJCSZzaGwJKCR0bXAsMjQpOwoJCQkmeG9yCSgkb3V0LCR0bXApOwoJaWYgKCRpPDIpICAgewkmbW92CSgmRFdQKDQrNCokaSwiZXNwIiksJG91dCk7CX0KCWlmICgkaT09MykgIHsJJm1vdgkoJHNbM10sJGFjYyk7CQkJfQoJJmNvbW1lbnQoKTsKfQoKc3ViIGVuY3RyYW5zZm9ybSgpCnsgbXkgQHMgPSAoJHMwLCRzMSwkczIsJHMzKTsKICBteSAkaSA9IHNoaWZ0OwogIG15ICR0bXAgPSAkdGJsOwogIG15ICRyMiAgPSAka2V5IDsKCgkmbW92CSgkYWNjLCRzWyRpXSk7CgkmYW5kCSgkYWNjLDB4ODA4MDgwODApOwoJJm1vdgkoJHRtcCwkYWNjKTsKCSZzaHIJKCR0bXAsNyk7CgkmbGVhCSgkcjIsJkRXUCgwLCRzWyRpXSwkc1skaV0pKTsKCSZzdWIJKCRhY2MsJHRtcCk7CgkmYW5kCSgkcjIsMHhmZWZlZmVmZSk7CgkmYW5kCSgkYWNjLDB4MWIxYjFiMWIpOwoJJm1vdgkoJHRtcCwkc1skaV0pOwoJJnhvcgkoJGFjYywkcjIpOwkjIHIyCgoJJnhvcgkoJHNbJGldLCRhY2MpOwkjIHIwIF4gcjIKCSZyb3RsCSgkc1skaV0sMjQpOwoJJnhvcgkoJHNbJGldLCRhY2MpCSMgUk9UQVRFKHIyXnIwLDI0KSBeIHIyCgkmcm90cgkoJHRtcCwxNik7CgkmeG9yCSgkc1skaV0sJHRtcCk7Cgkmcm90cgkoJHRtcCw4KTsKCSZ4b3IJKCRzWyRpXSwkdG1wKTsKfQoKJmZ1bmN0aW9uX2JlZ2luX0IoIl94ODZfQUVTX2VuY3J5cHRfY29tcGFjdCIpOwoJIyBub3RlIHRoYXQgY2FsbGVyIGlzIGV4cGVjdGVkIHRvIGFsbG9jYXRlIHN0YWNrIGZyYW1lIGZvciBtZSEKCSZtb3YJKCRfX2tleSwka2V5KTsJCQkjIHNhdmUga2V5CgoJJnhvcgkoJHMwLCZEV1AoMCwka2V5KSk7CQkjIHhvciB3aXRoIGtleQoJJnhvcgkoJHMxLCZEV1AoNCwka2V5KSk7CgkmeG9yCSgkczIsJkRXUCg4LCRrZXkpKTsKCSZ4b3IJKCRzMywmRFdQKDEyLCRrZXkpKTsKCgkmbW92CSgkYWNjLCZEV1AoMjQwLCRrZXkpKTsJCSMgbG9hZCBrZXktPnJvdW5kcwoJJmxlYQkoJGFjYywmRFdQKC0yLCRhY2MsJGFjYykpOwoJJmxlYQkoJGFjYywmRFdQKDAsJGtleSwkYWNjLDgpKTsKCSZtb3YJKCRfX2VuZCwkYWNjKTsJCQkjIGVuZCBvZiBrZXkgc2NoZWR1bGUKCgkjIHByZWZldGNoIFRlNAoJJm1vdgkoJGtleSwmRFdQKDAtMTI4LCR0YmwpKTsKCSZtb3YJKCRhY2MsJkRXUCgzMi0xMjgsJHRibCkpOwoJJm1vdgkoJGtleSwmRFdQKDY0LTEyOCwkdGJsKSk7CgkmbW92CSgkYWNjLCZEV1AoOTYtMTI4LCR0YmwpKTsKCSZtb3YJKCRrZXksJkRXUCgxMjgtMTI4LCR0YmwpKTsKCSZtb3YJKCRhY2MsJkRXUCgxNjAtMTI4LCR0YmwpKTsKCSZtb3YJKCRrZXksJkRXUCgxOTItMTI4LCR0YmwpKTsKCSZtb3YJKCRhY2MsJkRXUCgyMjQtMTI4LCR0YmwpKTsKCgkmc2V0X2xhYmVsKCJsb29wIiwxNik7CgoJCSZlbmNjb21wYWN0KDAsJHRibCwkczAsJHMxLCRzMiwkczMsMSk7CgkJJmVuY2NvbXBhY3QoMSwkdGJsLCRzMSwkczIsJHMzLCRzMCwxKTsKCQkmZW5jY29tcGFjdCgyLCR0YmwsJHMyLCRzMywkczAsJHMxLDEpOwoJCSZlbmNjb21wYWN0KDMsJHRibCwkczMsJHMwLCRzMSwkczIsMSk7CgkJJmVuY3RyYW5zZm9ybSgyKTsKCQkmZW5jdHJhbnNmb3JtKDMpOwoJCSZlbmN0cmFuc2Zvcm0oMCk7CgkJJmVuY3RyYW5zZm9ybSgxKTsKCQkmbW92IAkoJGtleSwkX19rZXkpOwoJCSZtb3YJKCR0YmwsJF9fdGJsKTsKCQkmYWRkCSgka2V5LDE2KTsJCSMgYWR2YW5jZSByZF9rZXkKCQkmeG9yCSgkczAsJkRXUCgwLCRrZXkpKTsKCQkmeG9yCSgkczEsJkRXUCg0LCRrZXkpKTsKCQkmeG9yCSgkczIsJkRXUCg4LCRrZXkpKTsKCQkmeG9yCSgkczMsJkRXUCgxMiwka2V5KSk7CgoJJmNtcAkoJGtleSwkX19lbmQpOwoJJm1vdgkoJF9fa2V5LCRrZXkpOwoJJmpiCSgmbGFiZWwoImxvb3AiKSk7CgoJJmVuY2NvbXBhY3QoMCwkdGJsLCRzMCwkczEsJHMyLCRzMyk7CgkmZW5jY29tcGFjdCgxLCR0YmwsJHMxLCRzMiwkczMsJHMwKTsKCSZlbmNjb21wYWN0KDIsJHRibCwkczIsJHMzLCRzMCwkczEpOwoJJmVuY2NvbXBhY3QoMywkdGJsLCRzMywkczAsJHMxLCRzMik7CgoJJnhvcgkoJHMwLCZEV1AoMTYsJGtleSkpOwoJJnhvcgkoJHMxLCZEV1AoMjAsJGtleSkpOwoJJnhvcgkoJHMyLCZEV1AoMjQsJGtleSkpOwoJJnhvcgkoJHMzLCZEV1AoMjgsJGtleSkpOwoKCSZyZXQJKCk7CiZmdW5jdGlvbl9lbmRfQigiX3g4Nl9BRVNfZW5jcnlwdF9jb21wYWN0Iik7CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgIkNvbXBhY3QiIFNTRSBibG9jayBmdW5jdGlvbi4KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojCiMgUGVyZm9ybWFuY2UgaXMgbm90IGFjdHVhbGx5IGV4dHJhb3JkaW5hcnkgaW4gY29tcGFyaXNvbiB0byBwdXJlCiMgeDg2IGNvZGUuIEluIHBhcnRpY3VsYXIgZW5jcnlwdCBwZXJmb3JtYW5jZSBpcyB2aXJ0dWFsbHkgdGhlIHNhbWUuCiMgRGVjcnlwdCBwZXJmb3JtYW5jZSBvbiB0aGUgb3RoZXIgaGFuZCBpcyAxNS0yMCUgYmV0dGVyIG9uIG5ld2VyCiMgtS1hcmNocyBbYnV0IHdlJ3JlIHRoYW5rZnVsIGZvciAqYW55KiBpbXByb3ZlbWVudCBoZXJlXSwgYW5kIH41MCUKIyBiZXR0ZXIgb24gUElJSTotKSBBbmQgYWRkaXRpb25hbGx5IG9uIHRoZSBwcm9zIHNpZGUgdGhpcyBjb2RlCiMgZWxpbWluYXRlcyByZWR1bmRhbnQgcmVmZXJlbmNlcyB0byBzdGFjayBhbmQgdGh1cyByZWxpZXZlcy8KIyBtaW5pbWl6ZXMgdGhlIHByZXNzdXJlIG9uIHRoZSBtZW1vcnkgYnVzLgojCiMgTU1YIHJlZ2lzdGVyIGxheW91dCAgICAgICAgICAgICAgICAgICAgICAgICAgIGxzYgojICstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSstLSsKIyB8ICAgICAgICAgIG1tNCAgICAgICAgICB8ICAgICAgICAgIG1tMCAgICAgICAgICB8CiMgKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKwojIHwgICAgIHMzICAgIHwgICAgIHMyICAgIHwgICAgIHMxICAgIHwgICAgIHMwICAgIHwgICAgCiMgKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKy0tKwojIHwxNXwxNHwxM3wxMnwxMXwxMHwgOXwgOHwgN3wgNnwgNXwgNHwgM3wgMnwgMXwgMHwKIyArLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rLS0rCiMKIyBJbmRleGVzIHRyYW5zbGF0ZSBhcyBzW04vNF0+Pig4KihOJTQpKSwgZS5nLiA1IG1lYW5zIHMxPj44LgojIEluIHRoaXMgdGVybXMgZW5jcnlwdGlvbiBhbmQgZGVjcnlwdGlvbiAiY29tcGFjdCIgcGVybXV0YXRpb24KIyBtYXRyaWNlcyBjYW4gYmUgZGVwaWN0ZWQgYXMgZm9sbG93aW5nOgojCiMgZW5jcnlwdGlvbiAgICAgICAgICAgICAgbHNiCSMgZGVjcnlwdGlvbiAgICAgICAgICAgICAgbHNiCiMgKy0tLS0rKy0tLS0rLS0tLSstLS0tKy0tLS0rCSMgKy0tLS0rKy0tLS0rLS0tLSstLS0tKy0tLS0rCiMgfCB0MCB8fCAxNSB8IDEwIHwgIDUgfCAgMCB8CSMgfCB0MCB8fCAgNyB8IDEwIHwgMTMgfCAgMCB8CiMgKy0tLS0rKy0tLS0rLS0tLSstLS0tKy0tLS0rCSMgKy0tLS0rKy0tLS0rLS0tLSstLS0tKy0tLS0rCiMgfCB0MSB8fCAgMyB8IDE0IHwgIDkgfCAgNCB8CSMgfCB0MSB8fCAxMSB8IDE0IHwgIDEgfCAgNCB8CiMgKy0tLS0rKy0tLS0rLS0tLSstLS0tKy0tLS0rCSMgKy0tLS0rKy0tLS0rLS0tLSstLS0tKy0tLS0rCiMgfCB0MiB8fCAgNyB8ICAyIHwgMTMgfCAgOCB8CSMgfCB0MiB8fCAxNSB8ICAyIHwgIDUgfCAgOCB8CiMgKy0tLS0rKy0tLS0rLS0tLSstLS0tKy0tLS0rCSMgKy0tLS0rKy0tLS0rLS0tLSstLS0tKy0tLS0rCiMgfCB0MyB8fCAxMSB8ICA2IHwgIDEgfCAxMiB8CSMgfCB0MyB8fCAgMyB8ICA2IHwgIDkgfCAxMiB8CiMgKy0tLS0rKy0tLS0rLS0tLSstLS0tKy0tLS0rCSMgKy0tLS0rKy0tLS0rLS0tLSstLS0tKy0tLS0rCiMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFdoeSBub3QgeG1tIHJlZ2lzdGVycz8gU2hvcnQgYW5zd2VyLiBJdCB3YXMgYWN0dWFsbHkgdGVzdGVkIGFuZAojIHdhcyBub3QgYW55IGZhc3RlciwgYnV0ICpjb250cmFyeSosIG1vc3Qgbm90YWJseSBvbiBJbnRlbCBDUFVzLgojIExvbmdlciBhbnN3ZXIuIE1haW4gYWR2YW50YWdlIG9mIHVzaW5nIG1tIHJlZ2lzdGVycyBpcyB0aGF0IG1vdmQKIyBsYXRlbmN5IGlzIGxvd2VyLCBlc3BlY2lhbGx5IG9uIEludGVsIFA0LiBXaGlsZSBhcml0aG1ldGljCiMgaW5zdHJ1Y3Rpb25zIGFyZSB0d2ljZSBhcyBtYW55LCB0aGV5IGNhbiBiZSBzY2hlZHVsZWQgZXZlcnkgY3ljbGUKIyBhbmQgbm90IGV2ZXJ5IHNlY29uZCBvbmUgd2hlbiB0aGV5IGFyZSBvcGVyYXRpbmcgb24geG1tIHJlZ2lzdGVyLAojIHNvIHRoYXQgImFyaXRobWV0aWMgdGhyb3VnaHB1dCIgcmVtYWlucyB2aXJ0dWFsbHkgdGhlIHNhbWUuIEFuZAojIGZpbmFsbHkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkIGV2ZW4gb24gZWxkZXIgU1NFLW9ubHkgQ1BVczotKQoKc3ViIHNzZV9lbmNjb21wYWN0KCkKewoJJnBzaHVmdwkoIm1tMSIsIm1tMCIsMHgwOCk7CQkjICA1LCA0LCAxLCAwCgkmcHNodWZ3CSgibW01IiwibW00IiwweDBkKTsJCSMgMTUsMTQsMTEsMTAKCSZtb3ZkCSgiZWF4IiwibW0xIik7CQkJIyAgNSwgNCwgMSwgMAoJJm1vdmQJKCJlYngiLCJtbTUiKTsJCQkjIDE1LDE0LDExLDEwCgoJJm1vdnoJKCRhY2MsJkxCKCJlYXgiKSk7CQkjICAwCgkmbW92egkoImVjeCIsJkJQKC0xMjgsJHRibCwkYWNjLDEpKTsJIyAgMAoJJnBzaHVmdwkoIm1tMiIsIm1tMCIsMHgwZCk7CQkjICA3LCA2LCAzLCAyCgkmbW92egkoImVkeCIsJkhCKCJlYXgiKSk7CQkjICAxCgkmbW92egkoImVkeCIsJkJQKC0xMjgsJHRibCwiZWR4IiwxKSk7CSMgIDEKCSZzaGwJKCJlZHgiLDgpOwkJCSMgIDEKCSZzaHIJKCJlYXgiLDE2KTsJCQkjICA1LCA0CgoJJm1vdnoJKCRhY2MsJkxCKCJlYngiKSk7CQkjIDEwCgkmbW92egkoJGFjYywmQlAoLTEyOCwkdGJsLCRhY2MsMSkpOwkjIDEwCgkmc2hsCSgkYWNjLDE2KTsJCQkjIDEwCgkmb3IJKCJlY3giLCRhY2MpOwkJCSMgMTAKCSZwc2h1ZncJKCJtbTYiLCJtbTQiLDB4MDgpOwkJIyAxMywxMiwgOSwgOAoJJm1vdnoJKCRhY2MsJkhCKCJlYngiKSk7CQkjIDExCgkmbW92egkoJGFjYywmQlAoLTEyOCwkdGJsLCRhY2MsMSkpOwkjIDExCgkmc2hsCSgkYWNjLDI0KTsJCQkjIDExCgkmb3IJKCJlZHgiLCRhY2MpOwkJCSMgMTEKCSZzaHIJKCJlYngiLDE2KTsJCQkjIDE1LDE0CgoJJm1vdnoJKCRhY2MsJkhCKCJlYXgiKSk7CQkjICA1CgkmbW92egkoJGFjYywmQlAoLTEyOCwkdGJsLCRhY2MsMSkpOwkjICA1Cgkmc2hsCSgkYWNjLDgpOwkJCSMgIDUKCSZvcgkoImVjeCIsJGFjYyk7CQkJIyAgNQoJJm1vdnoJKCRhY2MsJkhCKCJlYngiKSk7CQkjIDE1CgkmbW92egkoJGFjYywmQlAoLTEyOCwkdGJsLCRhY2MsMSkpOwkjIDE1Cgkmc2hsCSgkYWNjLDI0KTsJCQkjIDE1Cgkmb3IJKCJlY3giLCRhY2MpOwkJCSMgMTUKCSZtb3ZkCSgibW0wIiwiZWN4Iik7CQkJIyB0WzBdIGNvbGxlY3RlZAoKCSZtb3Z6CSgkYWNjLCZMQigiZWF4IikpOwkJIyAgNAoJJm1vdnoJKCJlY3giLCZCUCgtMTI4LCR0YmwsJGFjYywxKSk7CSMgIDQKCSZtb3ZkCSgiZWF4IiwibW0yIik7CQkJIyAgNywgNiwgMywgMgoJJm1vdnoJKCRhY2MsJkxCKCJlYngiKSk7CQkjIDE0CgkmbW92egkoJGFjYywmQlAoLTEyOCwkdGJsLCRhY2MsMSkpOwkjIDE0Cgkmc2hsCSgkYWNjLDE2KTsJCQkjIDE0Cgkmb3IJKCJlY3giLCRhY2MpOwkJCSMgMTQKCgkmbW92ZAkoImVieCIsIm1tNiIpOwkJCSMgMTMsMTIsIDksIDgKCSZtb3Z6CSgkYWNjLCZIQigiZWF4IikpOwkJIyAgMwoJJm1vdnoJKCRhY2MsJkJQKC0xMjgsJHRibCwkYWNjLDEpKTsJIyAgMwoJJnNobAkoJGFjYywyNCk7CQkJIyAgMwoJJm9yCSgiZWN4IiwkYWNjKTsJCQkjICAzCgkmbW92egkoJGFjYywmSEIoImVieCIpKTsJCSMgIDkKCSZtb3Z6CSgkYWNjLCZCUCgtMTI4LCR0YmwsJGFjYywxKSk7CSMgIDkKCSZzaGwJKCRhY2MsOCk7CQkJIyAgOQoJJm9yCSgiZWN4IiwkYWNjKTsJCQkjICA5CgkmbW92ZAkoIm1tMSIsImVjeCIpOwkJCSMgdFsxXSBjb2xsZWN0ZWQKCgkmbW92egkoJGFjYywmTEIoImVieCIpKTsJCSMgIDgKCSZtb3Z6CSgiZWN4IiwmQlAoLTEyOCwkdGJsLCRhY2MsMSkpOwkjICA4Cgkmc2hyCSgiZWJ4IiwxNik7CQkJIyAxMywxMgoJJm1vdnoJKCRhY2MsJkxCKCJlYXgiKSk7CQkjICAyCgkmbW92egkoJGFjYywmQlAoLTEyOCwkdGJsLCRhY2MsMSkpOwkjICAyCgkmc2hsCSgkYWNjLDE2KTsJCQkjICAyCgkmb3IJKCJlY3giLCRhY2MpOwkJCSMgIDIKCSZzaHIJKCJlYXgiLDE2KTsJCQkjICA3LCA2CgoJJnB1bnBja2xkcQkoIm1tMCIsIm1tMSIpOwkJIyB0WzAsMV0gY29sbGVjdGVkCgoJJm1vdnoJKCRhY2MsJkhCKCJlYXgiKSk7CQkjICA3CgkmbW92egkoJGFjYywmQlAoLTEyOCwkdGJsLCRhY2MsMSkpOwkjICA3Cgkmc2hsCSgkYWNjLDI0KTsJCQkjICA3Cgkmb3IJKCJlY3giLCRhY2MpOwkJCSMgIDcKCSZhbmQJKCJlYXgiLDB4ZmYpOwkJCSMgIDYKCSZtb3Z6CSgiZWF4IiwmQlAoLTEyOCwkdGJsLCJlYXgiLDEpKTsJIyAgNgoJJnNobAkoImVheCIsMTYpOwkJCSMgIDYKCSZvcgkoImVkeCIsImVheCIpOwkJCSMgIDYKCSZtb3Z6CSgkYWNjLCZIQigiZWJ4IikpOwkJIyAxMwoJJm1vdnoJKCRhY2MsJkJQKC0xMjgsJHRibCwkYWNjLDEpKTsJIyAxMwoJJnNobAkoJGFjYyw4KTsJCQkjIDEzCgkmb3IJKCJlY3giLCRhY2MpOwkJCSMgMTMKCSZtb3ZkCSgibW00IiwiZWN4Iik7CQkJIyB0WzJdIGNvbGxlY3RlZAoJJmFuZAkoImVieCIsMHhmZik7CQkJIyAxMgoJJm1vdnoJKCJlYngiLCZCUCgtMTI4LCR0YmwsImVieCIsMSkpOwkjIDEyCgkmb3IJKCJlZHgiLCJlYngiKTsJCQkjIDEyCgkmbW92ZAkoIm1tNSIsImVkeCIpOwkJCSMgdFszXSBjb2xsZWN0ZWQKCgkmcHVucGNrbGRxCSgibW00IiwibW01Iik7CQkjIHRbMiwzXSBjb2xsZWN0ZWQKfQoKCQkJCQlpZiAoISR4ODZvbmx5KSB7CiZmdW5jdGlvbl9iZWdpbl9CKCJfc3NlX0FFU19lbmNyeXB0X2NvbXBhY3QiKTsKCSZweG9yCSgibW0wIiwmUVdQKDAsJGtleSkpOwkjICA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwCgkmcHhvcgkoIm1tNCIsJlFXUCg4LCRrZXkpKTsJIyAxNSwxNCwxMywxMiwxMSwxMCwgOSwgOAoKCSMgbm90ZSB0aGF0IGNhbGxlciBpcyBleHBlY3RlZCB0byBhbGxvY2F0ZSBzdGFjayBmcmFtZSBmb3IgbWUhCgkmbW92CSgkYWNjLCZEV1AoMjQwLCRrZXkpKTsJCSMgbG9hZCBrZXktPnJvdW5kcwoJJmxlYQkoJGFjYywmRFdQKC0yLCRhY2MsJGFjYykpOwoJJmxlYQkoJGFjYywmRFdQKDAsJGtleSwkYWNjLDgpKTsKCSZtb3YJKCRfX2VuZCwkYWNjKTsJCQkjIGVuZCBvZiBrZXkgc2NoZWR1bGUKCgkmbW92CSgkczAsMHgxYjFiMWIxYik7CQkjIG1hZ2ljIGNvbnN0YW50CgkmbW92CSgmRFdQKDgsImVzcCIpLCRzMCk7CgkmbW92CSgmRFdQKDEyLCJlc3AiKSwkczApOwoKCSMgcHJlZmV0Y2ggVGU0CgkmbW92CSgkczAsJkRXUCgwLTEyOCwkdGJsKSk7CgkmbW92CSgkczEsJkRXUCgzMi0xMjgsJHRibCkpOwoJJm1vdgkoJHMyLCZEV1AoNjQtMTI4LCR0YmwpKTsKCSZtb3YJKCRzMywmRFdQKDk2LTEyOCwkdGJsKSk7CgkmbW92CSgkczAsJkRXUCgxMjgtMTI4LCR0YmwpKTsKCSZtb3YJKCRzMSwmRFdQKDE2MC0xMjgsJHRibCkpOwoJJm1vdgkoJHMyLCZEV1AoMTkyLTEyOCwkdGJsKSk7CgkmbW92CSgkczMsJkRXUCgyMjQtMTI4LCR0YmwpKTsKCgkmc2V0X2xhYmVsKCJsb29wIiwxNik7CgkJJnNzZV9lbmNjb21wYWN0KCk7CgkJJmFkZAkoJGtleSwxNik7CgkJJmNtcAkoJGtleSwkX19lbmQpOwoJCSZqYQkoJmxhYmVsKCJvdXQiKSk7CgoJCSZtb3ZxCSgibW0yIiwmUVdQKDgsImVzcCIpKTsKCQkmcHhvcgkoIm1tMyIsIm1tMyIpOwkJJnB4b3IJKCJtbTciLCJtbTciKTsKCQkmbW92cQkoIm1tMSIsIm1tMCIpOwkJJm1vdnEJKCJtbTUiLCJtbTQiKTsJIyByMAoJCSZwY21wZ3RiKCJtbTMiLCJtbTAiKTsJCSZwY21wZ3RiKCJtbTciLCJtbTQiKTsKCQkmcGFuZAkoIm1tMyIsIm1tMiIpOwkJJnBhbmQJKCJtbTciLCJtbTIiKTsKCQkmcHNodWZ3CSgibW0yIiwibW0wIiwweGIxKTsJJnBzaHVmdwkoIm1tNiIsIm1tNCIsMHhiMSk7IyBST1RBVEUocjAsMTYpCgkJJnBhZGRiCSgibW0wIiwibW0wIik7CQkmcGFkZGIJKCJtbTQiLCJtbTQiKTsKCQkmcHhvcgkoIm1tMCIsIm1tMyIpOwkJJnB4b3IJKCJtbTQiLCJtbTciKTsJIyA9IHIyCgkJJnBzaHVmdwkoIm1tMyIsIm1tMiIsMHhiMSk7CSZwc2h1ZncJKCJtbTciLCJtbTYiLDB4YjEpOyMgcjAKCQkmcHhvcgkoIm1tMSIsIm1tMCIpOwkJJnB4b3IJKCJtbTUiLCJtbTQiKTsJIyByMF5yMgoJCSZweG9yCSgibW0wIiwibW0yIik7CQkmcHhvcgkoIm1tNCIsIm1tNiIpOwkjIF49IFJPVEFURShyMCwxNikKCgkJJm1vdnEJKCJtbTIiLCJtbTMiKTsJCSZtb3ZxCSgibW02IiwibW03Iik7CgkJJnBzbGxkCSgibW0zIiw4KTsJCSZwc2xsZAkoIm1tNyIsOCk7CgkJJnBzcmxkCSgibW0yIiwyNCk7CQkmcHNybGQJKCJtbTYiLDI0KTsKCQkmcHhvcgkoIm1tMCIsIm1tMyIpOwkJJnB4b3IJKCJtbTQiLCJtbTciKTsJIyBePSByMDw8OAoJCSZweG9yCSgibW0wIiwibW0yIik7CQkmcHhvcgkoIm1tNCIsIm1tNiIpOwkjIF49IHIwPj4yNAoKCQkmbW92cQkoIm1tMyIsIm1tMSIpOwkJJm1vdnEJKCJtbTciLCJtbTUiKTsKCQkmbW92cQkoIm1tMiIsJlFXUCgwLCRrZXkpKTsJJm1vdnEJKCJtbTYiLCZRV1AoOCwka2V5KSk7CgkJJnBzcmxkCSgibW0xIiw4KTsJCSZwc3JsZAkoIm1tNSIsOCk7CgkJJm1vdgkoJHMwLCZEV1AoMC0xMjgsJHRibCkpOwoJCSZwc2xsZAkoIm1tMyIsMjQpOwkJJnBzbGxkCSgibW03IiwyNCk7CgkJJm1vdgkoJHMxLCZEV1AoNjQtMTI4LCR0YmwpKTsKCQkmcHhvcgkoIm1tMCIsIm1tMSIpOwkJJnB4b3IJKCJtbTQiLCJtbTUiKTsJIyBePSAocjJecjApPDw4CgkJJm1vdgkoJHMyLCZEV1AoMTI4LTEyOCwkdGJsKSk7CgkJJnB4b3IJKCJtbTAiLCJtbTMiKTsJCSZweG9yCSgibW00IiwibW03Iik7CSMgXj0gKHIyXnIwKT4+MjQKCQkmbW92CSgkczMsJkRXUCgxOTItMTI4LCR0YmwpKTsKCgkJJnB4b3IJKCJtbTAiLCJtbTIiKTsJCSZweG9yCSgibW00IiwibW02Iik7Cgkmam1wCSgmbGFiZWwoImxvb3AiKSk7CgoJJnNldF9sYWJlbCgib3V0IiwxNik7CgkmcHhvcgkoIm1tMCIsJlFXUCgwLCRrZXkpKTsKCSZweG9yCSgibW00IiwmUVdQKDgsJGtleSkpOwoKCSZyZXQJKCk7CiZmdW5jdGlvbl9lbmRfQigiX3NzZV9BRVNfZW5jcnlwdF9jb21wYWN0Iik7CgkJCQkJfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFZhbmlsbGEgYmxvY2sgZnVuY3Rpb24uCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCnN1YiBlbmNzdGVwKCkKeyBteSAoJGksJHRlLEBzKSA9IEBfOwogIG15ICR0bXAgPSAka2V5OwogIG15ICRvdXQgPSAkaT09Mz8kc1swXTokYWNjOwoKCSMgbGluZXMgbWFya2VkIHdpdGggIyVlP3hbaV0gZGVub3RlICJyZW9yZGVyZWQiIGluc3RydWN0aW9ucy4uLgoJaWYgKCRpPT0zKSAgewkmbW92CSgka2V5LCRfX2tleSk7CQkJfSMjJWVkeAoJZWxzZSAgICAgICAgewkmbW92CSgkb3V0LCRzWzBdKTsKCQkJJmFuZAkoJG91dCwweEZGKTsJCQl9CglpZiAoJGk9PTEpICB7CSZzaHIJKCRzWzBdLDE2KTsJCQl9IyVlYnhbMV0KCWlmICgkaT09MikgIHsJJnNocgkoJHNbMF0sMjQpOwkJCX0jJWVjeFsyXQoJCQkmbW92CSgkb3V0LCZEV1AoMCwkdGUsJG91dCw4KSk7CgoJaWYgKCRpPT0zKSAgewkkdG1wPSRzWzFdOwkJCQl9IyMlZWF4CgkJCSZtb3Z6CSgkdG1wLCZIQigkc1sxXSkpOwoJCQkmeG9yCSgkb3V0LCZEV1AoMywkdGUsJHRtcCw4KSk7CgoJaWYgKCRpPT0zKSAgewkkdG1wPSRzWzJdOyAmbW92ICgkc1sxXSwkX19zMCk7CQl9IyMlZWJ4CgllbHNlICAgICAgICB7CSZtb3YJKCR0bXAsJHNbMl0pOwoJCQkmc2hyCSgkdG1wLDE2KTsJCQl9CglpZiAoJGk9PTIpICB7CSZhbmQJKCRzWzFdLDB4RkYpOwkJCX0jJWVkeFsyXQoJCQkmYW5kCSgkdG1wLDB4RkYpOwoJCQkmeG9yCSgkb3V0LCZEV1AoMiwkdGUsJHRtcCw4KSk7CgoJaWYgKCRpPT0zKSAgewkkdG1wPSRzWzNdOyAmbW92ICgkc1syXSwkX19zMSk7CQl9IyMlZWN4CgllbHNpZigkaT09Mil7CSZtb3Z6CSgkdG1wLCZIQigkc1szXSkpOwkJfSMlZWJ4WzJdCgllbHNlICAgICAgICB7CSZtb3YJKCR0bXAsJHNbM10pOyAKCQkJJnNocgkoJHRtcCwyNCkJCQl9CgkJCSZ4b3IJKCRvdXQsJkRXUCgxLCR0ZSwkdG1wLDgpKTsKCWlmICgkaTwyKSAgIHsJJm1vdgkoJkRXUCg0KzQqJGksImVzcCIpLCRvdXQpOwl9CglpZiAoJGk9PTMpICB7CSZtb3YJKCRzWzNdLCRhY2MpOwkJCX0KCQkJJmNvbW1lbnQoKTsKfQoKc3ViIGVuY2xhc3QoKQp7IG15ICgkaSwkdGUsQHMpPUBfOwogIG15ICR0bXAgPSAka2V5OwogIG15ICRvdXQgPSAkaT09Mz8kc1swXTokYWNjOwoKCWlmICgkaT09MykgIHsJJm1vdgkoJGtleSwkX19rZXkpOwkJCX0jIyVlZHgKCWVsc2UgICAgICAgIHsJJm1vdgkoJG91dCwkc1swXSk7CQkJfQoJCQkmYW5kCSgkb3V0LDB4RkYpOwoJaWYgKCRpPT0xKSAgewkmc2hyCSgkc1swXSwxNik7CQkJfSMlZWJ4WzFdCglpZiAoJGk9PTIpICB7CSZzaHIJKCRzWzBdLDI0KTsJCQl9IyVlY3hbMl0KCQkJJm1vdgkoJG91dCwmRFdQKDIsJHRlLCRvdXQsOCkpOwoJCQkmYW5kCSgkb3V0LDB4MDAwMDAwZmYpOwoKCWlmICgkaT09MykgIHsJJHRtcD0kc1sxXTsJCQkJfSMjJWVheAoJCQkmbW92egkoJHRtcCwmSEIoJHNbMV0pKTsKCQkJJm1vdgkoJHRtcCwmRFdQKDAsJHRlLCR0bXAsOCkpOwoJCQkmYW5kCSgkdG1wLDB4MDAwMGZmMDApOwoJCQkmeG9yCSgkb3V0LCR0bXApOwoKCWlmICgkaT09MykgIHsJJHRtcD0kc1syXTsgJm1vdiAoJHNbMV0sJF9fczApOwkJfSMjJWVieAoJZWxzZSAgICAgICAgewkmbW92CSgkdG1wLCRzWzJdKTsKCQkJJnNocgkoJHRtcCwxNik7CQkJfQoJaWYgKCRpPT0yKSAgewkmYW5kCSgkc1sxXSwweEZGKTsJCQl9IyVlZHhbMl0KCQkJJmFuZAkoJHRtcCwweEZGKTsKCQkJJm1vdgkoJHRtcCwmRFdQKDAsJHRlLCR0bXAsOCkpOwoJCQkmYW5kCSgkdG1wLDB4MDBmZjAwMDApOwoJCQkmeG9yCSgkb3V0LCR0bXApOwoKCWlmICgkaT09MykgIHsJJHRtcD0kc1szXTsgJm1vdiAoJHNbMl0sJF9fczEpOwkJfSMjJWVjeAoJZWxzaWYoJGk9PTIpewkmbW92egkoJHRtcCwmSEIoJHNbM10pKTsJCX0jJWVieFsyXQoJZWxzZSAgICAgICAgewkmbW92CSgkdG1wLCRzWzNdKTsKCQkJJnNocgkoJHRtcCwyNCk7CQkJfQoJCQkmbW92CSgkdG1wLCZEV1AoMiwkdGUsJHRtcCw4KSk7CgkJCSZhbmQJKCR0bXAsMHhmZjAwMDAwMCk7CgkJCSZ4b3IJKCRvdXQsJHRtcCk7CglpZiAoJGk8MikgICB7CSZtb3YJKCZEV1AoNCs0KiRpLCJlc3AiKSwkb3V0KTsJfQoJaWYgKCRpPT0zKSAgewkmbW92CSgkc1szXSwkYWNjKTsJCQl9Cn0KCiZmdW5jdGlvbl9iZWdpbl9CKCJfeDg2X0FFU19lbmNyeXB0Iik7CglpZiAoJHZlcnRpY2FsX3NwaW4pIHsKCQkjIEkgbmVlZCBoaWdoIHBhcnRzIG9mIHZvbGF0aWxlIHJlZ2lzdGVycyB0byBiZSBhY2Nlc3NpYmxlLi4uCgkJJmV4Y2gJKCRzMT0iZWRpIiwka2V5PSJlYngiKTsKCQkmbW92CSgkczI9ImVzaSIsJGFjYz0iZWN4Iik7Cgl9CgoJIyBub3RlIHRoYXQgY2FsbGVyIGlzIGV4cGVjdGVkIHRvIGFsbG9jYXRlIHN0YWNrIGZyYW1lIGZvciBtZSEKCSZtb3YJKCRfX2tleSwka2V5KTsJCQkjIHNhdmUga2V5CgoJJnhvcgkoJHMwLCZEV1AoMCwka2V5KSk7CQkjIHhvciB3aXRoIGtleQoJJnhvcgkoJHMxLCZEV1AoNCwka2V5KSk7CgkmeG9yCSgkczIsJkRXUCg4LCRrZXkpKTsKCSZ4b3IJKCRzMywmRFdQKDEyLCRrZXkpKTsKCgkmbW92CSgkYWNjLCZEV1AoMjQwLCRrZXkpKTsJCSMgbG9hZCBrZXktPnJvdW5kcwoKCWlmICgkc21hbGxfZm9vdHByaW50KSB7CgkgICAgJmxlYQkoJGFjYywmRFdQKC0yLCRhY2MsJGFjYykpOwoJICAgICZsZWEJKCRhY2MsJkRXUCgwLCRrZXksJGFjYyw4KSk7CgkgICAgJm1vdgkoJF9fZW5kLCRhY2MpOwkJIyBlbmQgb2Yga2V5IHNjaGVkdWxlCgoJICAgICZzZXRfbGFiZWwoImxvb3AiLDE2KTsKCQlpZiAoJHZlcnRpY2FsX3NwaW4pIHsKCQkgICAgJmVuY3ZlcnQoJHRibCwkczAsJHMxLCRzMiwkczMpOwoJCX0gZWxzZSB7CgkJICAgICZlbmNzdGVwKDAsJHRibCwkczAsJHMxLCRzMiwkczMpOwoJCSAgICAmZW5jc3RlcCgxLCR0YmwsJHMxLCRzMiwkczMsJHMwKTsKCQkgICAgJmVuY3N0ZXAoMiwkdGJsLCRzMiwkczMsJHMwLCRzMSk7CgkJICAgICZlbmNzdGVwKDMsJHRibCwkczMsJHMwLCRzMSwkczIpOwoJCX0KCQkmYWRkCSgka2V5LDE2KTsJCSMgYWR2YW5jZSByZF9rZXkKCQkmeG9yCSgkczAsJkRXUCgwLCRrZXkpKTsKCQkmeG9yCSgkczEsJkRXUCg0LCRrZXkpKTsKCQkmeG9yCSgkczIsJkRXUCg4LCRrZXkpKTsKCQkmeG9yCSgkczMsJkRXUCgxMiwka2V5KSk7CgkgICAgJmNtcAkoJGtleSwkX19lbmQpOwoJICAgICZtb3YJKCRfX2tleSwka2V5KTsKCSAgICAmamIJCSgmbGFiZWwoImxvb3AiKSk7Cgl9CgllbHNlIHsKCSAgICAmY21wCSgkYWNjLDEwKTsKCSAgICAmamxlCSgmbGFiZWwoIjEwcm91bmRzIikpOwoJICAgICZjbXAJKCRhY2MsMTIpOwoJICAgICZqbGUJKCZsYWJlbCgiMTJyb3VuZHMiKSk7CgoJJnNldF9sYWJlbCgiMTRyb3VuZHMiLDQpOwoJICAgIGZvciAoJGk9MTskaTwzOyRpKyspIHsKCQlpZiAoJHZlcnRpY2FsX3NwaW4pIHsKCQkgICAgJmVuY3ZlcnQoJHRibCwkczAsJHMxLCRzMiwkczMpOwoJCX0gZWxzZSB7CgkJICAgICZlbmNzdGVwKDAsJHRibCwkczAsJHMxLCRzMiwkczMpOwoJCSAgICAmZW5jc3RlcCgxLCR0YmwsJHMxLCRzMiwkczMsJHMwKTsKCQkgICAgJmVuY3N0ZXAoMiwkdGJsLCRzMiwkczMsJHMwLCRzMSk7CgkJICAgICZlbmNzdGVwKDMsJHRibCwkczMsJHMwLCRzMSwkczIpOwoJCX0KCQkmeG9yCSgkczAsJkRXUCgxNiokaSswLCRrZXkpKTsKCQkmeG9yCSgkczEsJkRXUCgxNiokaSs0LCRrZXkpKTsKCQkmeG9yCSgkczIsJkRXUCgxNiokaSs4LCRrZXkpKTsKCQkmeG9yCSgkczMsJkRXUCgxNiokaSsxMiwka2V5KSk7CgkgICAgfQoJICAgICZhZGQJKCRrZXksMzIpOwoJICAgICZtb3YJKCRfX2tleSwka2V5KTsJCSMgYWR2YW5jZSByZF9rZXkKCSZzZXRfbGFiZWwoIjEycm91bmRzIiw0KTsKCSAgICBmb3IgKCRpPTE7JGk8MzskaSsrKSB7CgkJaWYgKCR2ZXJ0aWNhbF9zcGluKSB7CgkJICAgICZlbmN2ZXJ0KCR0YmwsJHMwLCRzMSwkczIsJHMzKTsKCQl9IGVsc2UgewoJCSAgICAmZW5jc3RlcCgwLCR0YmwsJHMwLCRzMSwkczIsJHMzKTsKCQkgICAgJmVuY3N0ZXAoMSwkdGJsLCRzMSwkczIsJHMzLCRzMCk7CgkJICAgICZlbmNzdGVwKDIsJHRibCwkczIsJHMzLCRzMCwkczEpOwoJCSAgICAmZW5jc3RlcCgzLCR0YmwsJHMzLCRzMCwkczEsJHMyKTsKCQl9CgkJJnhvcgkoJHMwLCZEV1AoMTYqJGkrMCwka2V5KSk7CgkJJnhvcgkoJHMxLCZEV1AoMTYqJGkrNCwka2V5KSk7CgkJJnhvcgkoJHMyLCZEV1AoMTYqJGkrOCwka2V5KSk7CgkJJnhvcgkoJHMzLCZEV1AoMTYqJGkrMTIsJGtleSkpOwoJICAgIH0KCSAgICAmYWRkCSgka2V5LDMyKTsKCSAgICAmbW92CSgkX19rZXksJGtleSk7CQkjIGFkdmFuY2UgcmRfa2V5Cgkmc2V0X2xhYmVsKCIxMHJvdW5kcyIsNCk7CgkgICAgZm9yICgkaT0xOyRpPDEwOyRpKyspIHsKCQlpZiAoJHZlcnRpY2FsX3NwaW4pIHsKCQkgICAgJmVuY3ZlcnQoJHRibCwkczAsJHMxLCRzMiwkczMpOwoJCX0gZWxzZSB7CgkJICAgICZlbmNzdGVwKDAsJHRibCwkczAsJHMxLCRzMiwkczMpOwoJCSAgICAmZW5jc3RlcCgxLCR0YmwsJHMxLCRzMiwkczMsJHMwKTsKCQkgICAgJmVuY3N0ZXAoMiwkdGJsLCRzMiwkczMsJHMwLCRzMSk7CgkJICAgICZlbmNzdGVwKDMsJHRibCwkczMsJHMwLCRzMSwkczIpOwoJCX0KCQkmeG9yCSgkczAsJkRXUCgxNiokaSswLCRrZXkpKTsKCQkmeG9yCSgkczEsJkRXUCgxNiokaSs0LCRrZXkpKTsKCQkmeG9yCSgkczIsJkRXUCgxNiokaSs4LCRrZXkpKTsKCQkmeG9yCSgkczMsJkRXUCgxNiokaSsxMiwka2V5KSk7CgkgICAgfQoJfQoKCWlmICgkdmVydGljYWxfc3BpbikgewoJICAgICMgInJlaW5jYXJuYXRlIiBzb21lIHJlZ2lzdGVycyBmb3IgImhvcml6b250YWwiIHNwaW4uLi4KCSAgICAmbW92CSgkczE9ImVieCIsJGtleT0iZWRpIik7CgkgICAgJm1vdgkoJHMyPSJlY3giLCRhY2M9ImVzaSIpOwoJfQoJJmVuY2xhc3QoMCwkdGJsLCRzMCwkczEsJHMyLCRzMyk7CgkmZW5jbGFzdCgxLCR0YmwsJHMxLCRzMiwkczMsJHMwKTsKCSZlbmNsYXN0KDIsJHRibCwkczIsJHMzLCRzMCwkczEpOwoJJmVuY2xhc3QoMywkdGJsLCRzMywkczAsJHMxLCRzMik7CgoJJmFkZAkoJGtleSwkc21hbGxfZm9vdHByaW50PzE2OjE2MCk7CgkmeG9yCSgkczAsJkRXUCgwLCRrZXkpKTsKCSZ4b3IJKCRzMSwmRFdQKDQsJGtleSkpOwoJJnhvcgkoJHMyLCZEV1AoOCwka2V5KSk7CgkmeG9yCSgkczMsJkRXUCgxMiwka2V5KSk7CgoJJnJldAkoKTsKCiZzZXRfbGFiZWwoIkFFU19UZSIsNjQpOwkjIFllcyEgSSBrZWVwIGl0IGluIHRoZSBjb2RlIHNlZ21lbnQhCgkmX2RhdGFfd29yZCgweGE1NjM2M2M2LCAweDg0N2M3Y2Y4LCAweDk5Nzc3N2VlLCAweDhkN2I3YmY2KTsKCSZfZGF0YV93b3JkKDB4MGRmMmYyZmYsIDB4YmQ2YjZiZDYsIDB4YjE2ZjZmZGUsIDB4NTRjNWM1OTEpOwoJJl9kYXRhX3dvcmQoMHg1MDMwMzA2MCwgMHgwMzAxMDEwMiwgMHhhOTY3NjdjZSwgMHg3ZDJiMmI1Nik7CgkmX2RhdGFfd29yZCgweDE5ZmVmZWU3LCAweDYyZDdkN2I1LCAweGU2YWJhYjRkLCAweDlhNzY3NmVjKTsKCSZfZGF0YV93b3JkKDB4NDVjYWNhOGYsIDB4OWQ4MjgyMWYsIDB4NDBjOWM5ODksIDB4ODc3ZDdkZmEpOwoJJl9kYXRhX3dvcmQoMHgxNWZhZmFlZiwgMHhlYjU5NTliMiwgMHhjOTQ3NDc4ZSwgMHgwYmYwZjBmYik7CgkmX2RhdGFfd29yZCgweGVjYWRhZDQxLCAweDY3ZDRkNGIzLCAweGZkYTJhMjVmLCAweGVhYWZhZjQ1KTsKCSZfZGF0YV93b3JkKDB4YmY5YzljMjMsIDB4ZjdhNGE0NTMsIDB4OTY3MjcyZTQsIDB4NWJjMGMwOWIpOwoJJl9kYXRhX3dvcmQoMHhjMmI3Yjc3NSwgMHgxY2ZkZmRlMSwgMHhhZTkzOTMzZCwgMHg2YTI2MjY0Yyk7CgkmX2RhdGFfd29yZCgweDVhMzYzNjZjLCAweDQxM2YzZjdlLCAweDAyZjdmN2Y1LCAweDRmY2NjYzgzKTsKCSZfZGF0YV93b3JkKDB4NWMzNDM0NjgsIDB4ZjRhNWE1NTEsIDB4MzRlNWU1ZDEsIDB4MDhmMWYxZjkpOwoJJl9kYXRhX3dvcmQoMHg5MzcxNzFlMiwgMHg3M2Q4ZDhhYiwgMHg1MzMxMzE2MiwgMHgzZjE1MTUyYSk7CgkmX2RhdGFfd29yZCgweDBjMDQwNDA4LCAweDUyYzdjNzk1LCAweDY1MjMyMzQ2LCAweDVlYzNjMzlkKTsKCSZfZGF0YV93b3JkKDB4MjgxODE4MzAsIDB4YTE5Njk2MzcsIDB4MGYwNTA1MGEsIDB4YjU5YTlhMmYpOwoJJl9kYXRhX3dvcmQoMHgwOTA3MDcwZSwgMHgzNjEyMTIyNCwgMHg5YjgwODAxYiwgMHgzZGUyZTJkZik7CgkmX2RhdGFfd29yZCgweDI2ZWJlYmNkLCAweDY5MjcyNzRlLCAweGNkYjJiMjdmLCAweDlmNzU3NWVhKTsKCSZfZGF0YV93b3JkKDB4MWIwOTA5MTIsIDB4OWU4MzgzMWQsIDB4NzQyYzJjNTgsIDB4MmUxYTFhMzQpOwoJJl9kYXRhX3dvcmQoMHgyZDFiMWIzNiwgMHhiMjZlNmVkYywgMHhlZTVhNWFiNCwgMHhmYmEwYTA1Yik7CgkmX2RhdGFfd29yZCgweGY2NTI1MmE0LCAweDRkM2IzYjc2LCAweDYxZDZkNmI3LCAweGNlYjNiMzdkKTsKCSZfZGF0YV93b3JkKDB4N2IyOTI5NTIsIDB4M2VlM2UzZGQsIDB4NzEyZjJmNWUsIDB4OTc4NDg0MTMpOwoJJl9kYXRhX3dvcmQoMHhmNTUzNTNhNiwgMHg2OGQxZDFiOSwgMHgwMDAwMDAwMCwgMHgyY2VkZWRjMSk7CgkmX2RhdGFfd29yZCgweDYwMjAyMDQwLCAweDFmZmNmY2UzLCAweGM4YjFiMTc5LCAweGVkNWI1YmI2KTsKCSZfZGF0YV93b3JkKDB4YmU2YTZhZDQsIDB4NDZjYmNiOGQsIDB4ZDliZWJlNjcsIDB4NGIzOTM5NzIpOwoJJl9kYXRhX3dvcmQoMHhkZTRhNGE5NCwgMHhkNDRjNGM5OCwgMHhlODU4NThiMCwgMHg0YWNmY2Y4NSk7CgkmX2RhdGFfd29yZCgweDZiZDBkMGJiLCAweDJhZWZlZmM1LCAweGU1YWFhYTRmLCAweDE2ZmJmYmVkKTsKCSZfZGF0YV93b3JkKDB4YzU0MzQzODYsIDB4ZDc0ZDRkOWEsIDB4NTUzMzMzNjYsIDB4OTQ4NTg1MTEpOwoJJl9kYXRhX3dvcmQoMHhjZjQ1NDU4YSwgMHgxMGY5ZjllOSwgMHgwNjAyMDIwNCwgMHg4MTdmN2ZmZSk7CgkmX2RhdGFfd29yZCgweGYwNTA1MGEwLCAweDQ0M2MzYzc4LCAweGJhOWY5ZjI1LCAweGUzYThhODRiKTsKCSZfZGF0YV93b3JkKDB4ZjM1MTUxYTIsIDB4ZmVhM2EzNWQsIDB4YzA0MDQwODAsIDB4OGE4ZjhmMDUpOwoJJl9kYXRhX3dvcmQoMHhhZDkyOTIzZiwgMHhiYzlkOWQyMSwgMHg0ODM4Mzg3MCwgMHgwNGY1ZjVmMSk7CgkmX2RhdGFfd29yZCgweGRmYmNiYzYzLCAweGMxYjZiNjc3LCAweDc1ZGFkYWFmLCAweDYzMjEyMTQyKTsKCSZfZGF0YV93b3JkKDB4MzAxMDEwMjAsIDB4MWFmZmZmZTUsIDB4MGVmM2YzZmQsIDB4NmRkMmQyYmYpOwoJJl9kYXRhX3dvcmQoMHg0Y2NkY2Q4MSwgMHgxNDBjMGMxOCwgMHgzNTEzMTMyNiwgMHgyZmVjZWNjMyk7CgkmX2RhdGFfd29yZCgweGUxNWY1ZmJlLCAweGEyOTc5NzM1LCAweGNjNDQ0NDg4LCAweDM5MTcxNzJlKTsKCSZfZGF0YV93b3JkKDB4NTdjNGM0OTMsIDB4ZjJhN2E3NTUsIDB4ODI3ZTdlZmMsIDB4NDczZDNkN2EpOwoJJl9kYXRhX3dvcmQoMHhhYzY0NjRjOCwgMHhlNzVkNWRiYSwgMHgyYjE5MTkzMiwgMHg5NTczNzNlNik7CgkmX2RhdGFfd29yZCgweGEwNjA2MGMwLCAweDk4ODE4MTE5LCAweGQxNGY0ZjllLCAweDdmZGNkY2EzKTsKCSZfZGF0YV93b3JkKDB4NjYyMjIyNDQsIDB4N2UyYTJhNTQsIDB4YWI5MDkwM2IsIDB4ODM4ODg4MGIpOwoJJl9kYXRhX3dvcmQoMHhjYTQ2NDY4YywgMHgyOWVlZWVjNywgMHhkM2I4Yjg2YiwgMHgzYzE0MTQyOCk7CgkmX2RhdGFfd29yZCgweDc5ZGVkZWE3LCAweGUyNWU1ZWJjLCAweDFkMGIwYjE2LCAweDc2ZGJkYmFkKTsKCSZfZGF0YV93b3JkKDB4M2JlMGUwZGIsIDB4NTYzMjMyNjQsIDB4NGUzYTNhNzQsIDB4MWUwYTBhMTQpOwoJJl9kYXRhX3dvcmQoMHhkYjQ5NDk5MiwgMHgwYTA2MDYwYywgMHg2YzI0MjQ0OCwgMHhlNDVjNWNiOCk7CgkmX2RhdGFfd29yZCgweDVkYzJjMjlmLCAweDZlZDNkM2JkLCAweGVmYWNhYzQzLCAweGE2NjI2MmM0KTsKCSZfZGF0YV93b3JkKDB4YTg5MTkxMzksIDB4YTQ5NTk1MzEsIDB4MzdlNGU0ZDMsIDB4OGI3OTc5ZjIpOwoJJl9kYXRhX3dvcmQoMHgzMmU3ZTdkNSwgMHg0M2M4Yzg4YiwgMHg1OTM3Mzc2ZSwgMHhiNzZkNmRkYSk7CgkmX2RhdGFfd29yZCgweDhjOGQ4ZDAxLCAweDY0ZDVkNWIxLCAweGQyNGU0ZTljLCAweGUwYTlhOTQ5KTsKCSZfZGF0YV93b3JkKDB4YjQ2YzZjZDgsIDB4ZmE1NjU2YWMsIDB4MDdmNGY0ZjMsIDB4MjVlYWVhY2YpOwoJJl9kYXRhX3dvcmQoMHhhZjY1NjVjYSwgMHg4ZTdhN2FmNCwgMHhlOWFlYWU0NywgMHgxODA4MDgxMCk7CgkmX2RhdGFfd29yZCgweGQ1YmFiYTZmLCAweDg4Nzg3OGYwLCAweDZmMjUyNTRhLCAweDcyMmUyZTVjKTsKCSZfZGF0YV93b3JkKDB4MjQxYzFjMzgsIDB4ZjFhNmE2NTcsIDB4YzdiNGI0NzMsIDB4NTFjNmM2OTcpOwoJJl9kYXRhX3dvcmQoMHgyM2U4ZThjYiwgMHg3Y2RkZGRhMSwgMHg5Yzc0NzRlOCwgMHgyMTFmMWYzZSk7CgkmX2RhdGFfd29yZCgweGRkNGI0Yjk2LCAweGRjYmRiZDYxLCAweDg2OGI4YjBkLCAweDg1OGE4YTBmKTsKCSZfZGF0YV93b3JkKDB4OTA3MDcwZTAsIDB4NDIzZTNlN2MsIDB4YzRiNWI1NzEsIDB4YWE2NjY2Y2MpOwoJJl9kYXRhX3dvcmQoMHhkODQ4NDg5MCwgMHgwNTAzMDMwNiwgMHgwMWY2ZjZmNywgMHgxMjBlMGUxYyk7CgkmX2RhdGFfd29yZCgweGEzNjE2MWMyLCAweDVmMzUzNTZhLCAweGY5NTc1N2FlLCAweGQwYjliOTY5KTsKCSZfZGF0YV93b3JkKDB4OTE4Njg2MTcsIDB4NThjMWMxOTksIDB4MjcxZDFkM2EsIDB4Yjk5ZTllMjcpOwoJJl9kYXRhX3dvcmQoMHgzOGUxZTFkOSwgMHgxM2Y4ZjhlYiwgMHhiMzk4OTgyYiwgMHgzMzExMTEyMik7CgkmX2RhdGFfd29yZCgweGJiNjk2OWQyLCAweDcwZDlkOWE5LCAweDg5OGU4ZTA3LCAweGE3OTQ5NDMzKTsKCSZfZGF0YV93b3JkKDB4YjY5YjliMmQsIDB4MjIxZTFlM2MsIDB4OTI4Nzg3MTUsIDB4MjBlOWU5YzkpOwoJJl9kYXRhX3dvcmQoMHg0OWNlY2U4NywgMHhmZjU1NTVhYSwgMHg3ODI4Mjg1MCwgMHg3YWRmZGZhNSk7CgkmX2RhdGFfd29yZCgweDhmOGM4YzAzLCAweGY4YTFhMTU5LCAweDgwODk4OTA5LCAweDE3MGQwZDFhKTsKCSZfZGF0YV93b3JkKDB4ZGFiZmJmNjUsIDB4MzFlNmU2ZDcsIDB4YzY0MjQyODQsIDB4Yjg2ODY4ZDApOwoJJl9kYXRhX3dvcmQoMHhjMzQxNDE4MiwgMHhiMDk5OTkyOSwgMHg3NzJkMmQ1YSwgMHgxMTBmMGYxZSk7CgkmX2RhdGFfd29yZCgweGNiYjBiMDdiLCAweGZjNTQ1NGE4LCAweGQ2YmJiYjZkLCAweDNhMTYxNjJjKTsKCiNUZTQJIyBmb3VyIGNvcGllcyBvZiBUZTQgdG8gY2hvb3NlIGZyb20gdG8gYXZvaWQgTDEgYWxpYXNpbmcKCSZkYXRhX2J5dGUoMHg2MywgMHg3YywgMHg3NywgMHg3YiwgMHhmMiwgMHg2YiwgMHg2ZiwgMHhjNSk7CgkmZGF0YV9ieXRlKDB4MzAsIDB4MDEsIDB4NjcsIDB4MmIsIDB4ZmUsIDB4ZDcsIDB4YWIsIDB4NzYpOwoJJmRhdGFfYnl0ZSgweGNhLCAweDgyLCAweGM5LCAweDdkLCAweGZhLCAweDU5LCAweDQ3LCAweGYwKTsKCSZkYXRhX2J5dGUoMHhhZCwgMHhkNCwgMHhhMiwgMHhhZiwgMHg5YywgMHhhNCwgMHg3MiwgMHhjMCk7CgkmZGF0YV9ieXRlKDB4YjcsIDB4ZmQsIDB4OTMsIDB4MjYsIDB4MzYsIDB4M2YsIDB4ZjcsIDB4Y2MpOwoJJmRhdGFfYnl0ZSgweDM0LCAweGE1LCAweGU1LCAweGYxLCAweDcxLCAweGQ4LCAweDMxLCAweDE1KTsKCSZkYXRhX2J5dGUoMHgwNCwgMHhjNywgMHgyMywgMHhjMywgMHgxOCwgMHg5NiwgMHgwNSwgMHg5YSk7CgkmZGF0YV9ieXRlKDB4MDcsIDB4MTIsIDB4ODAsIDB4ZTIsIDB4ZWIsIDB4MjcsIDB4YjIsIDB4NzUpOwoJJmRhdGFfYnl0ZSgweDA5LCAweDgzLCAweDJjLCAweDFhLCAweDFiLCAweDZlLCAweDVhLCAweGEwKTsKCSZkYXRhX2J5dGUoMHg1MiwgMHgzYiwgMHhkNiwgMHhiMywgMHgyOSwgMHhlMywgMHgyZiwgMHg4NCk7CgkmZGF0YV9ieXRlKDB4NTMsIDB4ZDEsIDB4MDAsIDB4ZWQsIDB4MjAsIDB4ZmMsIDB4YjEsIDB4NWIpOwoJJmRhdGFfYnl0ZSgweDZhLCAweGNiLCAweGJlLCAweDM5LCAweDRhLCAweDRjLCAweDU4LCAweGNmKTsKCSZkYXRhX2J5dGUoMHhkMCwgMHhlZiwgMHhhYSwgMHhmYiwgMHg0MywgMHg0ZCwgMHgzMywgMHg4NSk7CgkmZGF0YV9ieXRlKDB4NDUsIDB4ZjksIDB4MDIsIDB4N2YsIDB4NTAsIDB4M2MsIDB4OWYsIDB4YTgpOwoJJmRhdGFfYnl0ZSgweDUxLCAweGEzLCAweDQwLCAweDhmLCAweDkyLCAweDlkLCAweDM4LCAweGY1KTsKCSZkYXRhX2J5dGUoMHhiYywgMHhiNiwgMHhkYSwgMHgyMSwgMHgxMCwgMHhmZiwgMHhmMywgMHhkMik7CgkmZGF0YV9ieXRlKDB4Y2QsIDB4MGMsIDB4MTMsIDB4ZWMsIDB4NWYsIDB4OTcsIDB4NDQsIDB4MTcpOwoJJmRhdGFfYnl0ZSgweGM0LCAweGE3LCAweDdlLCAweDNkLCAweDY0LCAweDVkLCAweDE5LCAweDczKTsKCSZkYXRhX2J5dGUoMHg2MCwgMHg4MSwgMHg0ZiwgMHhkYywgMHgyMiwgMHgyYSwgMHg5MCwgMHg4OCk7CgkmZGF0YV9ieXRlKDB4NDYsIDB4ZWUsIDB4YjgsIDB4MTQsIDB4ZGUsIDB4NWUsIDB4MGIsIDB4ZGIpOwoJJmRhdGFfYnl0ZSgweGUwLCAweDMyLCAweDNhLCAweDBhLCAweDQ5LCAweDA2LCAweDI0LCAweDVjKTsKCSZkYXRhX2J5dGUoMHhjMiwgMHhkMywgMHhhYywgMHg2MiwgMHg5MSwgMHg5NSwgMHhlNCwgMHg3OSk7CgkmZGF0YV9ieXRlKDB4ZTcsIDB4YzgsIDB4MzcsIDB4NmQsIDB4OGQsIDB4ZDUsIDB4NGUsIDB4YTkpOwoJJmRhdGFfYnl0ZSgweDZjLCAweDU2LCAweGY0LCAweGVhLCAweDY1LCAweDdhLCAweGFlLCAweDA4KTsKCSZkYXRhX2J5dGUoMHhiYSwgMHg3OCwgMHgyNSwgMHgyZSwgMHgxYywgMHhhNiwgMHhiNCwgMHhjNik7CgkmZGF0YV9ieXRlKDB4ZTgsIDB4ZGQsIDB4NzQsIDB4MWYsIDB4NGIsIDB4YmQsIDB4OGIsIDB4OGEpOwoJJmRhdGFfYnl0ZSgweDcwLCAweDNlLCAweGI1LCAweDY2LCAweDQ4LCAweDAzLCAweGY2LCAweDBlKTsKCSZkYXRhX2J5dGUoMHg2MSwgMHgzNSwgMHg1NywgMHhiOSwgMHg4NiwgMHhjMSwgMHgxZCwgMHg5ZSk7CgkmZGF0YV9ieXRlKDB4ZTEsIDB4ZjgsIDB4OTgsIDB4MTEsIDB4NjksIDB4ZDksIDB4OGUsIDB4OTQpOwoJJmRhdGFfYnl0ZSgweDliLCAweDFlLCAweDg3LCAweGU5LCAweGNlLCAweDU1LCAweDI4LCAweGRmKTsKCSZkYXRhX2J5dGUoMHg4YywgMHhhMSwgMHg4OSwgMHgwZCwgMHhiZiwgMHhlNiwgMHg0MiwgMHg2OCk7CgkmZGF0YV9ieXRlKDB4NDEsIDB4OTksIDB4MmQsIDB4MGYsIDB4YjAsIDB4NTQsIDB4YmIsIDB4MTYpOwoKCSZkYXRhX2J5dGUoMHg2MywgMHg3YywgMHg3NywgMHg3YiwgMHhmMiwgMHg2YiwgMHg2ZiwgMHhjNSk7CgkmZGF0YV9ieXRlKDB4MzAsIDB4MDEsIDB4NjcsIDB4MmIsIDB4ZmUsIDB4ZDcsIDB4YWIsIDB4NzYpOwoJJmRhdGFfYnl0ZSgweGNhLCAweDgyLCAweGM5LCAweDdkLCAweGZhLCAweDU5LCAweDQ3LCAweGYwKTsKCSZkYXRhX2J5dGUoMHhhZCwgMHhkNCwgMHhhMiwgMHhhZiwgMHg5YywgMHhhNCwgMHg3MiwgMHhjMCk7CgkmZGF0YV9ieXRlKDB4YjcsIDB4ZmQsIDB4OTMsIDB4MjYsIDB4MzYsIDB4M2YsIDB4ZjcsIDB4Y2MpOwoJJmRhdGFfYnl0ZSgweDM0LCAweGE1LCAweGU1LCAweGYxLCAweDcxLCAweGQ4LCAweDMxLCAweDE1KTsKCSZkYXRhX2J5dGUoMHgwNCwgMHhjNywgMHgyMywgMHhjMywgMHgxOCwgMHg5NiwgMHgwNSwgMHg5YSk7CgkmZGF0YV9ieXRlKDB4MDcsIDB4MTIsIDB4ODAsIDB4ZTIsIDB4ZWIsIDB4MjcsIDB4YjIsIDB4NzUpOwoJJmRhdGFfYnl0ZSgweDA5LCAweDgzLCAweDJjLCAweDFhLCAweDFiLCAweDZlLCAweDVhLCAweGEwKTsKCSZkYXRhX2J5dGUoMHg1MiwgMHgzYiwgMHhkNiwgMHhiMywgMHgyOSwgMHhlMywgMHgyZiwgMHg4NCk7CgkmZGF0YV9ieXRlKDB4NTMsIDB4ZDEsIDB4MDAsIDB4ZWQsIDB4MjAsIDB4ZmMsIDB4YjEsIDB4NWIpOwoJJmRhdGFfYnl0ZSgweDZhLCAweGNiLCAweGJlLCAweDM5LCAweDRhLCAweDRjLCAweDU4LCAweGNmKTsKCSZkYXRhX2J5dGUoMHhkMCwgMHhlZiwgMHhhYSwgMHhmYiwgMHg0MywgMHg0ZCwgMHgzMywgMHg4NSk7CgkmZGF0YV9ieXRlKDB4NDUsIDB4ZjksIDB4MDIsIDB4N2YsIDB4NTAsIDB4M2MsIDB4OWYsIDB4YTgpOwoJJmRhdGFfYnl0ZSgweDUxLCAweGEzLCAweDQwLCAweDhmLCAweDkyLCAweDlkLCAweDM4LCAweGY1KTsKCSZkYXRhX2J5dGUoMHhiYywgMHhiNiwgMHhkYSwgMHgyMSwgMHgxMCwgMHhmZiwgMHhmMywgMHhkMik7CgkmZGF0YV9ieXRlKDB4Y2QsIDB4MGMsIDB4MTMsIDB4ZWMsIDB4NWYsIDB4OTcsIDB4NDQsIDB4MTcpOwoJJmRhdGFfYnl0ZSgweGM0LCAweGE3LCAweDdlLCAweDNkLCAweDY0LCAweDVkLCAweDE5LCAweDczKTsKCSZkYXRhX2J5dGUoMHg2MCwgMHg4MSwgMHg0ZiwgMHhkYywgMHgyMiwgMHgyYSwgMHg5MCwgMHg4OCk7CgkmZGF0YV9ieXRlKDB4NDYsIDB4ZWUsIDB4YjgsIDB4MTQsIDB4ZGUsIDB4NWUsIDB4MGIsIDB4ZGIpOwoJJmRhdGFfYnl0ZSgweGUwLCAweDMyLCAweDNhLCAweDBhLCAweDQ5LCAweDA2LCAweDI0LCAweDVjKTsKCSZkYXRhX2J5dGUoMHhjMiwgMHhkMywgMHhhYywgMHg2MiwgMHg5MSwgMHg5NSwgMHhlNCwgMHg3OSk7CgkmZGF0YV9ieXRlKDB4ZTcsIDB4YzgsIDB4MzcsIDB4NmQsIDB4OGQsIDB4ZDUsIDB4NGUsIDB4YTkpOwoJJmRhdGFfYnl0ZSgweDZjLCAweDU2LCAweGY0LCAweGVhLCAweDY1LCAweDdhLCAweGFlLCAweDA4KTsKCSZkYXRhX2J5dGUoMHhiYSwgMHg3OCwgMHgyNSwgMHgyZSwgMHgxYywgMHhhNiwgMHhiNCwgMHhjNik7CgkmZGF0YV9ieXRlKDB4ZTgsIDB4ZGQsIDB4NzQsIDB4MWYsIDB4NGIsIDB4YmQsIDB4OGIsIDB4OGEpOwoJJmRhdGFfYnl0ZSgweDcwLCAweDNlLCAweGI1LCAweDY2LCAweDQ4LCAweDAzLCAweGY2LCAweDBlKTsKCSZkYXRhX2J5dGUoMHg2MSwgMHgzNSwgMHg1NywgMHhiOSwgMHg4NiwgMHhjMSwgMHgxZCwgMHg5ZSk7CgkmZGF0YV9ieXRlKDB4ZTEsIDB4ZjgsIDB4OTgsIDB4MTEsIDB4NjksIDB4ZDksIDB4OGUsIDB4OTQpOwoJJmRhdGFfYnl0ZSgweDliLCAweDFlLCAweDg3LCAweGU5LCAweGNlLCAweDU1LCAweDI4LCAweGRmKTsKCSZkYXRhX2J5dGUoMHg4YywgMHhhMSwgMHg4OSwgMHgwZCwgMHhiZiwgMHhlNiwgMHg0MiwgMHg2OCk7CgkmZGF0YV9ieXRlKDB4NDEsIDB4OTksIDB4MmQsIDB4MGYsIDB4YjAsIDB4NTQsIDB4YmIsIDB4MTYpOwoKCSZkYXRhX2J5dGUoMHg2MywgMHg3YywgMHg3NywgMHg3YiwgMHhmMiwgMHg2YiwgMHg2ZiwgMHhjNSk7CgkmZGF0YV9ieXRlKDB4MzAsIDB4MDEsIDB4NjcsIDB4MmIsIDB4ZmUsIDB4ZDcsIDB4YWIsIDB4NzYpOwoJJmRhdGFfYnl0ZSgweGNhLCAweDgyLCAweGM5LCAweDdkLCAweGZhLCAweDU5LCAweDQ3LCAweGYwKTsKCSZkYXRhX2J5dGUoMHhhZCwgMHhkNCwgMHhhMiwgMHhhZiwgMHg5YywgMHhhNCwgMHg3MiwgMHhjMCk7CgkmZGF0YV9ieXRlKDB4YjcsIDB4ZmQsIDB4OTMsIDB4MjYsIDB4MzYsIDB4M2YsIDB4ZjcsIDB4Y2MpOwoJJmRhdGFfYnl0ZSgweDM0LCAweGE1LCAweGU1LCAweGYxLCAweDcxLCAweGQ4LCAweDMxLCAweDE1KTsKCSZkYXRhX2J5dGUoMHgwNCwgMHhjNywgMHgyMywgMHhjMywgMHgxOCwgMHg5NiwgMHgwNSwgMHg5YSk7CgkmZGF0YV9ieXRlKDB4MDcsIDB4MTIsIDB4ODAsIDB4ZTIsIDB4ZWIsIDB4MjcsIDB4YjIsIDB4NzUpOwoJJmRhdGFfYnl0ZSgweDA5LCAweDgzLCAweDJjLCAweDFhLCAweDFiLCAweDZlLCAweDVhLCAweGEwKTsKCSZkYXRhX2J5dGUoMHg1MiwgMHgzYiwgMHhkNiwgMHhiMywgMHgyOSwgMHhlMywgMHgyZiwgMHg4NCk7CgkmZGF0YV9ieXRlKDB4NTMsIDB4ZDEsIDB4MDAsIDB4ZWQsIDB4MjAsIDB4ZmMsIDB4YjEsIDB4NWIpOwoJJmRhdGFfYnl0ZSgweDZhLCAweGNiLCAweGJlLCAweDM5LCAweDRhLCAweDRjLCAweDU4LCAweGNmKTsKCSZkYXRhX2J5dGUoMHhkMCwgMHhlZiwgMHhhYSwgMHhmYiwgMHg0MywgMHg0ZCwgMHgzMywgMHg4NSk7CgkmZGF0YV9ieXRlKDB4NDUsIDB4ZjksIDB4MDIsIDB4N2YsIDB4NTAsIDB4M2MsIDB4OWYsIDB4YTgpOwoJJmRhdGFfYnl0ZSgweDUxLCAweGEzLCAweDQwLCAweDhmLCAweDkyLCAweDlkLCAweDM4LCAweGY1KTsKCSZkYXRhX2J5dGUoMHhiYywgMHhiNiwgMHhkYSwgMHgyMSwgMHgxMCwgMHhmZiwgMHhmMywgMHhkMik7CgkmZGF0YV9ieXRlKDB4Y2QsIDB4MGMsIDB4MTMsIDB4ZWMsIDB4NWYsIDB4OTcsIDB4NDQsIDB4MTcpOwoJJmRhdGFfYnl0ZSgweGM0LCAweGE3LCAweDdlLCAweDNkLCAweDY0LCAweDVkLCAweDE5LCAweDczKTsKCSZkYXRhX2J5dGUoMHg2MCwgMHg4MSwgMHg0ZiwgMHhkYywgMHgyMiwgMHgyYSwgMHg5MCwgMHg4OCk7CgkmZGF0YV9ieXRlKDB4NDYsIDB4ZWUsIDB4YjgsIDB4MTQsIDB4ZGUsIDB4NWUsIDB4MGIsIDB4ZGIpOwoJJmRhdGFfYnl0ZSgweGUwLCAweDMyLCAweDNhLCAweDBhLCAweDQ5LCAweDA2LCAweDI0LCAweDVjKTsKCSZkYXRhX2J5dGUoMHhjMiwgMHhkMywgMHhhYywgMHg2MiwgMHg5MSwgMHg5NSwgMHhlNCwgMHg3OSk7CgkmZGF0YV9ieXRlKDB4ZTcsIDB4YzgsIDB4MzcsIDB4NmQsIDB4OGQsIDB4ZDUsIDB4NGUsIDB4YTkpOwoJJmRhdGFfYnl0ZSgweDZjLCAweDU2LCAweGY0LCAweGVhLCAweDY1LCAweDdhLCAweGFlLCAweDA4KTsKCSZkYXRhX2J5dGUoMHhiYSwgMHg3OCwgMHgyNSwgMHgyZSwgMHgxYywgMHhhNiwgMHhiNCwgMHhjNik7CgkmZGF0YV9ieXRlKDB4ZTgsIDB4ZGQsIDB4NzQsIDB4MWYsIDB4NGIsIDB4YmQsIDB4OGIsIDB4OGEpOwoJJmRhdGFfYnl0ZSgweDcwLCAweDNlLCAweGI1LCAweDY2LCAweDQ4LCAweDAzLCAweGY2LCAweDBlKTsKCSZkYXRhX2J5dGUoMHg2MSwgMHgzNSwgMHg1NywgMHhiOSwgMHg4NiwgMHhjMSwgMHgxZCwgMHg5ZSk7CgkmZGF0YV9ieXRlKDB4ZTEsIDB4ZjgsIDB4OTgsIDB4MTEsIDB4NjksIDB4ZDksIDB4OGUsIDB4OTQpOwoJJmRhdGFfYnl0ZSgweDliLCAweDFlLCAweDg3LCAweGU5LCAweGNlLCAweDU1LCAweDI4LCAweGRmKTsKCSZkYXRhX2J5dGUoMHg4YywgMHhhMSwgMHg4OSwgMHgwZCwgMHhiZiwgMHhlNiwgMHg0MiwgMHg2OCk7CgkmZGF0YV9ieXRlKDB4NDEsIDB4OTksIDB4MmQsIDB4MGYsIDB4YjAsIDB4NTQsIDB4YmIsIDB4MTYpOwoKCSZkYXRhX2J5dGUoMHg2MywgMHg3YywgMHg3NywgMHg3YiwgMHhmMiwgMHg2YiwgMHg2ZiwgMHhjNSk7CgkmZGF0YV9ieXRlKDB4MzAsIDB4MDEsIDB4NjcsIDB4MmIsIDB4ZmUsIDB4ZDcsIDB4YWIsIDB4NzYpOwoJJmRhdGFfYnl0ZSgweGNhLCAweDgyLCAweGM5LCAweDdkLCAweGZhLCAweDU5LCAweDQ3LCAweGYwKTsKCSZkYXRhX2J5dGUoMHhhZCwgMHhkNCwgMHhhMiwgMHhhZiwgMHg5YywgMHhhNCwgMHg3MiwgMHhjMCk7CgkmZGF0YV9ieXRlKDB4YjcsIDB4ZmQsIDB4OTMsIDB4MjYsIDB4MzYsIDB4M2YsIDB4ZjcsIDB4Y2MpOwoJJmRhdGFfYnl0ZSgweDM0LCAweGE1LCAweGU1LCAweGYxLCAweDcxLCAweGQ4LCAweDMxLCAweDE1KTsKCSZkYXRhX2J5dGUoMHgwNCwgMHhjNywgMHgyMywgMHhjMywgMHgxOCwgMHg5NiwgMHgwNSwgMHg5YSk7CgkmZGF0YV9ieXRlKDB4MDcsIDB4MTIsIDB4ODAsIDB4ZTIsIDB4ZWIsIDB4MjcsIDB4YjIsIDB4NzUpOwoJJmRhdGFfYnl0ZSgweDA5LCAweDgzLCAweDJjLCAweDFhLCAweDFiLCAweDZlLCAweDVhLCAweGEwKTsKCSZkYXRhX2J5dGUoMHg1MiwgMHgzYiwgMHhkNiwgMHhiMywgMHgyOSwgMHhlMywgMHgyZiwgMHg4NCk7CgkmZGF0YV9ieXRlKDB4NTMsIDB4ZDEsIDB4MDAsIDB4ZWQsIDB4MjAsIDB4ZmMsIDB4YjEsIDB4NWIpOwoJJmRhdGFfYnl0ZSgweDZhLCAweGNiLCAweGJlLCAweDM5LCAweDRhLCAweDRjLCAweDU4LCAweGNmKTsKCSZkYXRhX2J5dGUoMHhkMCwgMHhlZiwgMHhhYSwgMHhmYiwgMHg0MywgMHg0ZCwgMHgzMywgMHg4NSk7CgkmZGF0YV9ieXRlKDB4NDUsIDB4ZjksIDB4MDIsIDB4N2YsIDB4NTAsIDB4M2MsIDB4OWYsIDB4YTgpOwoJJmRhdGFfYnl0ZSgweDUxLCAweGEzLCAweDQwLCAweDhmLCAweDkyLCAweDlkLCAweDM4LCAweGY1KTsKCSZkYXRhX2J5dGUoMHhiYywgMHhiNiwgMHhkYSwgMHgyMSwgMHgxMCwgMHhmZiwgMHhmMywgMHhkMik7CgkmZGF0YV9ieXRlKDB4Y2QsIDB4MGMsIDB4MTMsIDB4ZWMsIDB4NWYsIDB4OTcsIDB4NDQsIDB4MTcpOwoJJmRhdGFfYnl0ZSgweGM0LCAweGE3LCAweDdlLCAweDNkLCAweDY0LCAweDVkLCAweDE5LCAweDczKTsKCSZkYXRhX2J5dGUoMHg2MCwgMHg4MSwgMHg0ZiwgMHhkYywgMHgyMiwgMHgyYSwgMHg5MCwgMHg4OCk7CgkmZGF0YV9ieXRlKDB4NDYsIDB4ZWUsIDB4YjgsIDB4MTQsIDB4ZGUsIDB4NWUsIDB4MGIsIDB4ZGIpOwoJJmRhdGFfYnl0ZSgweGUwLCAweDMyLCAweDNhLCAweDBhLCAweDQ5LCAweDA2LCAweDI0LCAweDVjKTsKCSZkYXRhX2J5dGUoMHhjMiwgMHhkMywgMHhhYywgMHg2MiwgMHg5MSwgMHg5NSwgMHhlNCwgMHg3OSk7CgkmZGF0YV9ieXRlKDB4ZTcsIDB4YzgsIDB4MzcsIDB4NmQsIDB4OGQsIDB4ZDUsIDB4NGUsIDB4YTkpOwoJJmRhdGFfYnl0ZSgweDZjLCAweDU2LCAweGY0LCAweGVhLCAweDY1LCAweDdhLCAweGFlLCAweDA4KTsKCSZkYXRhX2J5dGUoMHhiYSwgMHg3OCwgMHgyNSwgMHgyZSwgMHgxYywgMHhhNiwgMHhiNCwgMHhjNik7CgkmZGF0YV9ieXRlKDB4ZTgsIDB4ZGQsIDB4NzQsIDB4MWYsIDB4NGIsIDB4YmQsIDB4OGIsIDB4OGEpOwoJJmRhdGFfYnl0ZSgweDcwLCAweDNlLCAweGI1LCAweDY2LCAweDQ4LCAweDAzLCAweGY2LCAweDBlKTsKCSZkYXRhX2J5dGUoMHg2MSwgMHgzNSwgMHg1NywgMHhiOSwgMHg4NiwgMHhjMSwgMHgxZCwgMHg5ZSk7CgkmZGF0YV9ieXRlKDB4ZTEsIDB4ZjgsIDB4OTgsIDB4MTEsIDB4NjksIDB4ZDksIDB4OGUsIDB4OTQpOwoJJmRhdGFfYnl0ZSgweDliLCAweDFlLCAweDg3LCAweGU5LCAweGNlLCAweDU1LCAweDI4LCAweGRmKTsKCSZkYXRhX2J5dGUoMHg4YywgMHhhMSwgMHg4OSwgMHgwZCwgMHhiZiwgMHhlNiwgMHg0MiwgMHg2OCk7CgkmZGF0YV9ieXRlKDB4NDEsIDB4OTksIDB4MmQsIDB4MGYsIDB4YjAsIDB4NTQsIDB4YmIsIDB4MTYpOwojcmNvbjoKCSZkYXRhX3dvcmQoMHgwMDAwMDAwMSwgMHgwMDAwMDAwMiwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwOCk7CgkmZGF0YV93b3JkKDB4MDAwMDAwMTAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwNDAsIDB4MDAwMDAwODApOwoJJmRhdGFfd29yZCgweDAwMDAwMDFiLCAweDAwMDAwMDM2LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwKTsKCSZkYXRhX3dvcmQoMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCk7CiZmdW5jdGlvbl9lbmRfQigiX3g4Nl9BRVNfZW5jcnlwdCIpOwoKIyB2b2lkIEFFU19lbmNyeXB0IChjb25zdCB2b2lkICppbnAsdm9pZCAqb3V0LGNvbnN0IEFFU19LRVkgKmtleSk7CiZmdW5jdGlvbl9iZWdpbigiQUVTX2VuY3J5cHQiKTsKCSZtb3YJKCRhY2MsJndwYXJhbSgwKSk7CQkjIGxvYWQgaW5wCgkmbW92CSgka2V5LCZ3cGFyYW0oMikpOwkJIyBsb2FkIGtleQoKCSZtb3YJKCRzMCwiZXNwIik7Cgkmc3ViCSgiZXNwIiwzNik7CgkmYW5kCSgiZXNwIiwtNjQpOwkJCSMgYWxpZ24gdG8gY2FjaGUtbGluZQoKCSMgcGxhY2Ugc3RhY2sgZnJhbWUganVzdCAiYWJvdmUiIHRoZSBrZXkgc2NoZWR1bGUKCSZsZWEJKCRzMSwmRFdQKC02NC02Mywka2V5KSk7Cgkmc3ViCSgkczEsImVzcCIpOwoJJm5lZwkoJHMxKTsKCSZhbmQJKCRzMSwweDNDMCk7CSMgbW9kdWxvIDEwMjQsIGJ1dCBhbGlnbmVkIHRvIGNhY2hlLWxpbmUKCSZzdWIJKCJlc3AiLCRzMSk7CgkmYWRkCSgiZXNwIiw0KTsJIyA0IGlzIHJlc2VydmVkIGZvciBjYWxsZXIncyByZXR1cm4gYWRkcmVzcwoJJm1vdgkoJF9lc3AsJHMwKTsJCQkjIHNhdmUgc3RhY2sgcG9pbnRlcgoKCSZjYWxsICAgKCZsYWJlbCgicGljX3BvaW50IikpOyAgICAgICAgICAjIG1ha2UgaXQgUElDIQoJJnNldF9sYWJlbCgicGljX3BvaW50Iik7CgkmYmxpbmRwb3AoJHRibCk7CgkmcGljbWV1cCgkczAsIk9QRU5TU0xfaWEzMmNhcF9QIiwkdGJsLCZsYWJlbCgicGljX3BvaW50IikpIGlmICghJHg4Nm9ubHkpOwoJJmxlYSAgICAoJHRibCwmRFdQKCZsYWJlbCgiQUVTX1RlIikuIi0iLiZsYWJlbCgicGljX3BvaW50IiksJHRibCkpOwoKCSMgcGljayBUZTQgY29weSB3aGljaCBjYW4ndCAib3ZlcmxhcCIgd2l0aCBzdGFjayBmcmFtZSBvciBrZXkgc2NoZWR1bGUKCSZsZWEJKCRzMSwmRFdQKDc2OC00LCJlc3AiKSk7Cgkmc3ViCSgkczEsJHRibCk7CgkmYW5kCSgkczEsMHgzMDApOwoJJmxlYQkoJHRibCwmRFdQKDIwNDgrMTI4LCR0YmwsJHMxKSk7CgoJCQkJCWlmICghJHg4Nm9ubHkpIHsKCSZidAkoJkRXUCgwLCRzMCksMjUpOwkjIGNoZWNrIGZvciBTU0UgYml0Cgkmam5jCSgmbGFiZWwoIng4NiIpKTsKCgkmbW92cQkoIm1tMCIsJlFXUCgwLCRhY2MpKTsKCSZtb3ZxCSgibW00IiwmUVdQKDgsJGFjYykpOwoJJmNhbGwJKCJfc3NlX0FFU19lbmNyeXB0X2NvbXBhY3QiKTsKCSZtb3YJKCJlc3AiLCRfZXNwKTsJCQkjIHJlc3RvcmUgc3RhY2sgcG9pbnRlcgoJJm1vdgkoJGFjYywmd3BhcmFtKDEpKTsJCSMgbG9hZCBvdXQKCSZtb3ZxCSgmUVdQKDAsJGFjYyksIm1tMCIpOwkJIyB3cml0ZSBvdXRwdXQgZGF0YQoJJm1vdnEJKCZRV1AoOCwkYWNjKSwibW00Iik7CgkmZW1tcwkoKTsKCSZmdW5jdGlvbl9lbmRfQSgpOwoJCQkJCX0KCSZzZXRfbGFiZWwoIng4NiIsMTYpOwoJJm1vdgkoJF90YmwsJHRibCk7CgkmbW92CSgkczAsJkRXUCgwLCRhY2MpKTsJCSMgbG9hZCBpbnB1dCBkYXRhCgkmbW92CSgkczEsJkRXUCg0LCRhY2MpKTsKCSZtb3YJKCRzMiwmRFdQKDgsJGFjYykpOwoJJm1vdgkoJHMzLCZEV1AoMTIsJGFjYykpOwoJJmNhbGwJKCJfeDg2X0FFU19lbmNyeXB0X2NvbXBhY3QiKTsKCSZtb3YJKCJlc3AiLCRfZXNwKTsJCQkjIHJlc3RvcmUgc3RhY2sgcG9pbnRlcgoJJm1vdgkoJGFjYywmd3BhcmFtKDEpKTsJCSMgbG9hZCBvdXQKCSZtb3YJKCZEV1AoMCwkYWNjKSwkczApOwkJIyB3cml0ZSBvdXRwdXQgZGF0YQoJJm1vdgkoJkRXUCg0LCRhY2MpLCRzMSk7CgkmbW92CSgmRFdQKDgsJGFjYyksJHMyKTsKCSZtb3YJKCZEV1AoMTIsJGFjYyksJHMzKTsKJmZ1bmN0aW9uX2VuZCgiQUVTX2VuY3J5cHQiKTsKCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyAiQ29tcGFjdCIgYmxvY2sgZnVuY3Rpb24KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKc3ViIGRlY2NvbXBhY3QoKQp7IG15ICRGbiA9IG1vdjsKICB3aGlsZSAoJCNfPjUpIHsgcG9wKEBfKTsgJEZuPXN1Ynt9OyB9CiAgbXkgKCRpLCR0ZCxAcyk9QF87CiAgbXkgJHRtcCA9ICRrZXk7CiAgbXkgJG91dCA9ICRpPT0zPyRzWzBdOiRhY2M7CgoJIyAkRm4gaXMgdXNlZCBpbiBmaXJzdCBjb21wYWN0IHJvdW5kIGFuZCBpdHMgcHVycG9zZSBpcyB0bwoJIyB2b2lkIHJlc3RvcmF0aW9uIG9mIHNvbWUgdmFsdWVzIGZyb20gc3RhY2ssIHNvIHRoYXQgYWZ0ZXIKCSMgNHhkZWNjb21wYWN0IHdpdGggZXh0cmEgYXJndW1lbnQgJGtleSwgJHMwIGFuZCAkczEgdmFsdWVzCgkjIGFyZSBsZWZ0IHRoZXJlLi4uCglpZigkaT09MykgICB7CSYkRm4JKCRrZXksJF9fa2V5KTsJCQl9CgllbHNlICAgICAgICB7CSZtb3YJKCRvdXQsJHNbMF0pOwkJCX0KCQkJJmFuZAkoJG91dCwweEZGKTsKCQkJJm1vdnoJKCRvdXQsJkJQKC0xMjgsJHRkLCRvdXQsMSkpOwoKCWlmICgkaT09MykgIHsJJHRtcD0kc1sxXTsJCQkJfQoJCQkmbW92egkoJHRtcCwmSEIoJHNbMV0pKTsKCQkJJm1vdnoJKCR0bXAsJkJQKC0xMjgsJHRkLCR0bXAsMSkpOwoJCQkmc2hsCSgkdG1wLDgpOwoJCQkmeG9yCSgkb3V0LCR0bXApOwoKCWlmICgkaT09MykgIHsJJHRtcD0kc1syXTsgJm1vdiAoJHNbMV0sJGFjYyk7CQl9CgllbHNlICAgICAgICB7CW1vdgkoJHRtcCwkc1syXSk7CQkJfQoJCQkmc2hyCSgkdG1wLDE2KTsKCQkJJmFuZAkoJHRtcCwweEZGKTsKCQkJJm1vdnoJKCR0bXAsJkJQKC0xMjgsJHRkLCR0bXAsMSkpOwoJCQkmc2hsCSgkdG1wLDE2KTsKCQkJJnhvcgkoJG91dCwkdG1wKTsKCglpZiAoJGk9PTMpICB7CSR0bXA9JHNbM107ICYkRm4gKCRzWzJdLCRfX3MxKTsJCX0KCWVsc2UgICAgICAgIHsJJm1vdgkoJHRtcCwkc1szXSk7CQkJfQoJCQkmc2hyCSgkdG1wLDI0KTsKCQkJJm1vdnoJKCR0bXAsJkJQKC0xMjgsJHRkLCR0bXAsMSkpOwoJCQkmc2hsCSgkdG1wLDI0KTsKCQkJJnhvcgkoJG91dCwkdG1wKTsKCWlmICgkaTwyKSAgIHsJJm1vdgkoJkRXUCg0KzQqJGksImVzcCIpLCRvdXQpOwl9CglpZiAoJGk9PTMpICB7CSYkRm4JKCRzWzNdLCRfX3MwKTsJCQl9Cn0KCiMgbXVzdCBiZSBjYWxsZWQgd2l0aCAyLDMsMCwxIGFzIGFyZ3VtZW50IHNlcXVlbmNlISEhCnN1YiBkZWN0cmFuc2Zvcm0oKQp7IG15IEBzID0gKCRzMCwkczEsJHMyLCRzMyk7CiAgbXkgJGkgPSBzaGlmdDsKICBteSAkdG1wID0gJGtleTsKICBteSAkdHAyID0gQHNbKCRpKzIpJTRdOyAkdHAyID0gQHNbMl0gaWYgKCRpPT0xKTsKICBteSAkdHA0ID0gQHNbKCRpKzMpJTRdOyAkdHA0ID0gQHNbM10gaWYgKCRpPT0xKTsKICBteSAkdHA4ID0gJHRibDsKCgkmbW92CSgkYWNjLCRzWyRpXSk7CgkmYW5kCSgkYWNjLDB4ODA4MDgwODApOwoJJm1vdgkoJHRtcCwkYWNjKTsKCSZzaHIJKCR0bXAsNyk7CgkmbGVhCSgkdHAyLCZEV1AoMCwkc1skaV0sJHNbJGldKSk7Cgkmc3ViCSgkYWNjLCR0bXApOwoJJmFuZAkoJHRwMiwweGZlZmVmZWZlKTsKCSZhbmQJKCRhY2MsMHgxYjFiMWIxYik7CgkmeG9yCSgkYWNjLCR0cDIpOwoJJm1vdgkoJHRwMiwkYWNjKTsKCgkmYW5kCSgkYWNjLDB4ODA4MDgwODApOwoJJm1vdgkoJHRtcCwkYWNjKTsKCSZzaHIJKCR0bXAsNyk7CgkmbGVhCSgkdHA0LCZEV1AoMCwkdHAyLCR0cDIpKTsKCSZzdWIJKCRhY2MsJHRtcCk7CgkmYW5kCSgkdHA0LDB4ZmVmZWZlZmUpOwoJJmFuZAkoJGFjYywweDFiMWIxYjFiKTsKCSAmeG9yCSgkdHAyLCRzWyRpXSk7CSMgdHAyXnRwMQoJJnhvcgkoJGFjYywkdHA0KTsKCSZtb3YJKCR0cDQsJGFjYyk7CgoJJmFuZAkoJGFjYywweDgwODA4MDgwKTsKCSZtb3YJKCR0bXAsJGFjYyk7Cgkmc2hyCSgkdG1wLDcpOwoJJmxlYQkoJHRwOCwmRFdQKDAsJHRwNCwkdHA0KSk7Cgkmc3ViCSgkYWNjLCR0bXApOwoJJmFuZAkoJHRwOCwweGZlZmVmZWZlKTsKCSZhbmQJKCRhY2MsMHgxYjFiMWIxYik7CgkgJnhvcgkoJHRwNCwkc1skaV0pOwkjIHRwNF50cDEKCSAmcm90bAkoJHNbJGldLDgpOwkjID0gUk9UQVRFKHRwMSw4KQoJJnhvcgkoJHRwOCwkYWNjKTsKCgkmeG9yCSgkc1skaV0sJHRwMik7CgkmeG9yCSgkdHAyLCR0cDgpOwoJJnJvdGwJKCR0cDIsMjQpOwoJJnhvcgkoJHNbJGldLCR0cDQpOwoJJnhvcgkoJHRwNCwkdHA4KTsKCSZyb3RsCSgkdHA0LDE2KTsKCSZ4b3IJKCRzWyRpXSwkdHA4KTsJIyBePSB0cDheKHRwNF50cDEpXih0cDJedHAxKQoJJnJvdGwJKCR0cDgsOCk7CgkmeG9yCSgkc1skaV0sJHRwMik7CSMgXj0gUk9UQVRFKHRwOF50cDJedHAxLDI0KQoJJnhvcgkoJHNbJGldLCR0cDQpOwkjIF49IFJPVEFURSh0cDhedHA0XnRwMSwxNikKCSAmbW92CSgkc1swXSwkX19zMCkJCQlpZigkaT09Mik7ICNwcmVmZXRjaCAkczAKCSAmbW92CSgkc1sxXSwkX19zMSkJCQlpZigkaT09Myk7ICNwcmVmZXRjaCAkczEKCSAmbW92CSgkc1syXSwkX19zMikJCQlpZigkaT09MSk7CgkmeG9yCSgkc1skaV0sJHRwOCk7CSMgXj0gUk9UQVRFKHRwOCw4KQoKCSZtb3YJKCRzWzNdLCRfX3MzKQkJCWlmKCRpPT0xKTsKCSZtb3YJKCZEV1AoNCs0KiRpLCJlc3AiKSwkc1skaV0pCWlmKCRpPj0yKTsKfQoKJmZ1bmN0aW9uX2JlZ2luX0IoIl94ODZfQUVTX2RlY3J5cHRfY29tcGFjdCIpOwoJIyBub3RlIHRoYXQgY2FsbGVyIGlzIGV4cGVjdGVkIHRvIGFsbG9jYXRlIHN0YWNrIGZyYW1lIGZvciBtZSEKCSZtb3YJKCRfX2tleSwka2V5KTsJCQkjIHNhdmUga2V5CgoJJnhvcgkoJHMwLCZEV1AoMCwka2V5KSk7CQkjIHhvciB3aXRoIGtleQoJJnhvcgkoJHMxLCZEV1AoNCwka2V5KSk7CgkmeG9yCSgkczIsJkRXUCg4LCRrZXkpKTsKCSZ4b3IJKCRzMywmRFdQKDEyLCRrZXkpKTsKCgkmbW92CSgkYWNjLCZEV1AoMjQwLCRrZXkpKTsJCSMgbG9hZCBrZXktPnJvdW5kcwoKCSZsZWEJKCRhY2MsJkRXUCgtMiwkYWNjLCRhY2MpKTsKCSZsZWEJKCRhY2MsJkRXUCgwLCRrZXksJGFjYyw4KSk7CgkmbW92CSgkX19lbmQsJGFjYyk7CQkJIyBlbmQgb2Yga2V5IHNjaGVkdWxlCgoJIyBwcmVmZXRjaCBUZDQKCSZtb3YJKCRrZXksJkRXUCgwLTEyOCwkdGJsKSk7CgkmbW92CSgkYWNjLCZEV1AoMzItMTI4LCR0YmwpKTsKCSZtb3YJKCRrZXksJkRXUCg2NC0xMjgsJHRibCkpOwoJJm1vdgkoJGFjYywmRFdQKDk2LTEyOCwkdGJsKSk7CgkmbW92CSgka2V5LCZEV1AoMTI4LTEyOCwkdGJsKSk7CgkmbW92CSgkYWNjLCZEV1AoMTYwLTEyOCwkdGJsKSk7CgkmbW92CSgka2V5LCZEV1AoMTkyLTEyOCwkdGJsKSk7CgkmbW92CSgkYWNjLCZEV1AoMjI0LTEyOCwkdGJsKSk7CgoJJnNldF9sYWJlbCgibG9vcCIsMTYpOwoKCQkmZGVjY29tcGFjdCgwLCR0YmwsJHMwLCRzMywkczIsJHMxLDEpOwoJCSZkZWNjb21wYWN0KDEsJHRibCwkczEsJHMwLCRzMywkczIsMSk7CgkJJmRlY2NvbXBhY3QoMiwkdGJsLCRzMiwkczEsJHMwLCRzMywxKTsKCQkmZGVjY29tcGFjdCgzLCR0YmwsJHMzLCRzMiwkczEsJHMwLDEpOwoJCSZkZWN0cmFuc2Zvcm0oMik7CgkJJmRlY3RyYW5zZm9ybSgzKTsKCQkmZGVjdHJhbnNmb3JtKDApOwoJCSZkZWN0cmFuc2Zvcm0oMSk7CgkJJm1vdiAJKCRrZXksJF9fa2V5KTsKCQkmbW92CSgkdGJsLCRfX3RibCk7CgkJJmFkZAkoJGtleSwxNik7CQkjIGFkdmFuY2UgcmRfa2V5CgkJJnhvcgkoJHMwLCZEV1AoMCwka2V5KSk7CgkJJnhvcgkoJHMxLCZEV1AoNCwka2V5KSk7CgkJJnhvcgkoJHMyLCZEV1AoOCwka2V5KSk7CgkJJnhvcgkoJHMzLCZEV1AoMTIsJGtleSkpOwoKCSZjbXAJKCRrZXksJF9fZW5kKTsKCSZtb3YJKCRfX2tleSwka2V5KTsKCSZqYgkoJmxhYmVsKCJsb29wIikpOwoKCSZkZWNjb21wYWN0KDAsJHRibCwkczAsJHMzLCRzMiwkczEpOwoJJmRlY2NvbXBhY3QoMSwkdGJsLCRzMSwkczAsJHMzLCRzMik7CgkmZGVjY29tcGFjdCgyLCR0YmwsJHMyLCRzMSwkczAsJHMzKTsKCSZkZWNjb21wYWN0KDMsJHRibCwkczMsJHMyLCRzMSwkczApOwoKCSZ4b3IJKCRzMCwmRFdQKDE2LCRrZXkpKTsKCSZ4b3IJKCRzMSwmRFdQKDIwLCRrZXkpKTsKCSZ4b3IJKCRzMiwmRFdQKDI0LCRrZXkpKTsKCSZ4b3IJKCRzMywmRFdQKDI4LCRrZXkpKTsKCgkmcmV0CSgpOwomZnVuY3Rpb25fZW5kX0IoIl94ODZfQUVTX2RlY3J5cHRfY29tcGFjdCIpOwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojICJDb21wYWN0IiBTU0UgYmxvY2sgZnVuY3Rpb24uCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCnN1YiBzc2VfZGVjY29tcGFjdCgpCnsKCSZwc2h1ZncJKCJtbTEiLCJtbTAiLDB4MGMpOwkJIyAgNywgNiwgMSwgMAoJJm1vdmQJKCJlYXgiLCJtbTEiKTsJCQkjICA3LCA2LCAxLCAwCgoJJnBzaHVmdwkoIm1tNSIsIm1tNCIsMHgwOSk7CQkjIDEzLDEyLDExLDEwCgkmbW92egkoJGFjYywmTEIoImVheCIpKTsJCSMgIDAKCSZtb3Z6CSgiZWN4IiwmQlAoLTEyOCwkdGJsLCRhY2MsMSkpOwkjICAwCgkmbW92ZAkoImVieCIsIm1tNSIpOwkJCSMgMTMsMTIsMTEsMTAKCSZtb3Z6CSgiZWR4IiwmSEIoImVheCIpKTsJCSMgIDEKCSZtb3Z6CSgiZWR4IiwmQlAoLTEyOCwkdGJsLCJlZHgiLDEpKTsJIyAgMQoJJnNobAkoImVkeCIsOCk7CQkJIyAgMQoKCSZwc2h1ZncJKCJtbTIiLCJtbTAiLDB4MDYpOwkJIyAgMywgMiwgNSwgNAoJJm1vdnoJKCRhY2MsJkxCKCJlYngiKSk7CQkjIDEwCgkmbW92egkoJGFjYywmQlAoLTEyOCwkdGJsLCRhY2MsMSkpOwkjIDEwCgkmc2hsCSgkYWNjLDE2KTsJCQkjIDEwCgkmb3IJKCJlY3giLCRhY2MpOwkJCSMgMTAKCSZzaHIJKCJlYXgiLDE2KTsJCQkjICA3LCA2CgkmbW92egkoJGFjYywmSEIoImVieCIpKTsJCSMgMTEKCSZtb3Z6CSgkYWNjLCZCUCgtMTI4LCR0YmwsJGFjYywxKSk7CSMgMTEKCSZzaGwJKCRhY2MsMjQpOwkJCSMgMTEKCSZvcgkoImVkeCIsJGFjYyk7CQkJIyAxMQoJJnNocgkoImVieCIsMTYpOwkJCSMgMTMsMTIKCgkmcHNodWZ3CSgibW02IiwibW00IiwweDAzKTsJCSMgOSwgOCwxNSwxNAoJJm1vdnoJKCRhY2MsJkhCKCJlYXgiKSk7CQkjICA3CgkmbW92egkoJGFjYywmQlAoLTEyOCwkdGJsLCRhY2MsMSkpOwkjICA3Cgkmc2hsCSgkYWNjLDI0KTsJCQkjICA3Cgkmb3IJKCJlY3giLCRhY2MpOwkJCSMgIDcKCSZtb3Z6CSgkYWNjLCZIQigiZWJ4IikpOwkJIyAxMwoJJm1vdnoJKCRhY2MsJkJQKC0xMjgsJHRibCwkYWNjLDEpKTsJIyAxMwoJJnNobAkoJGFjYyw4KTsJCQkjIDEzCgkmb3IJKCJlY3giLCRhY2MpOwkJCSMgMTMKCSZtb3ZkCSgibW0wIiwiZWN4Iik7CQkJIyB0WzBdIGNvbGxlY3RlZAoKCSZtb3Z6CSgkYWNjLCZMQigiZWF4IikpOwkJIyAgNgoJJm1vdmQJKCJlYXgiLCJtbTIiKTsJCQkjICAzLCAyLCA1LCA0CgkmbW92egkoImVjeCIsJkJQKC0xMjgsJHRibCwkYWNjLDEpKTsJIyAgNgoJJnNobAkoImVjeCIsMTYpOwkJCSMgIDYKCSZtb3Z6CSgkYWNjLCZMQigiZWJ4IikpOwkJIyAxMgoJJm1vdmQJKCJlYngiLCJtbTYiKTsJCQkjICA5LCA4LDE1LDE0CgkmbW92egkoJGFjYywmQlAoLTEyOCwkdGJsLCRhY2MsMSkpOwkjIDEyCgkmb3IJKCJlY3giLCRhY2MpOwkJCSMgMTIKCgkmbW92egkoJGFjYywmTEIoImVheCIpKTsJCSMgIDQKCSZtb3Z6CSgkYWNjLCZCUCgtMTI4LCR0YmwsJGFjYywxKSk7CSMgIDQKCSZvcgkoImVkeCIsJGFjYyk7CQkJIyAgNAoJJm1vdnoJKCRhY2MsJkxCKCJlYngiKSk7CQkjIDE0CgkmbW92egkoJGFjYywmQlAoLTEyOCwkdGJsLCRhY2MsMSkpOwkjIDE0Cgkmc2hsCSgkYWNjLDE2KTsJCQkjIDE0Cgkmb3IJKCJlZHgiLCRhY2MpOwkJCSMgMTQKCSZtb3ZkCSgibW0xIiwiZWR4Iik7CQkJIyB0WzFdIGNvbGxlY3RlZAoKCSZtb3Z6CSgkYWNjLCZIQigiZWF4IikpOwkJIyAgNQoJJm1vdnoJKCJlZHgiLCZCUCgtMTI4LCR0YmwsJGFjYywxKSk7CSMgIDUKCSZzaGwJKCJlZHgiLDgpOwkJCSMgIDUKCSZtb3Z6CSgkYWNjLCZIQigiZWJ4IikpOwkJIyAxNQoJJnNocgkoImVheCIsMTYpOwkJCSMgIDMsIDIKCSZtb3Z6CSgkYWNjLCZCUCgtMTI4LCR0YmwsJGFjYywxKSk7CSMgMTUKCSZzaGwJKCRhY2MsMjQpOwkJCSMgMTUKCSZvcgkoImVkeCIsJGFjYyk7CQkJIyAxNQoJJnNocgkoImVieCIsMTYpOwkJCSMgIDksIDgKCgkmcHVucGNrbGRxCSgibW0wIiwibW0xIik7CQkjIHRbMCwxXSBjb2xsZWN0ZWQKCgkmbW92egkoJGFjYywmSEIoImVieCIpKTsJCSMgIDkKCSZtb3Z6CSgkYWNjLCZCUCgtMTI4LCR0YmwsJGFjYywxKSk7CSMgIDkKCSZzaGwJKCRhY2MsOCk7CQkJIyAgOQoJJm9yCSgiZWN4IiwkYWNjKTsJCQkjICA5CgkmYW5kCSgiZWJ4IiwweGZmKTsJCQkjICA4CgkmbW92egkoImVieCIsJkJQKC0xMjgsJHRibCwiZWJ4IiwxKSk7CSMgIDgKCSZvcgkoImVkeCIsImVieCIpOwkJCSMgIDgKCSZtb3Z6CSgkYWNjLCZMQigiZWF4IikpOwkJIyAgMgoJJm1vdnoJKCRhY2MsJkJQKC0xMjgsJHRibCwkYWNjLDEpKTsJIyAgMgoJJnNobAkoJGFjYywxNik7CQkJIyAgMgoJJm9yCSgiZWR4IiwkYWNjKTsJCQkjICAyCgkmbW92ZAkoIm1tNCIsImVkeCIpOwkJCSMgdFsyXSBjb2xsZWN0ZWQKCSZtb3Z6CSgiZWF4IiwmSEIoImVheCIpKTsJCSMgIDMKCSZtb3Z6CSgiZWF4IiwmQlAoLTEyOCwkdGJsLCJlYXgiLDEpKTsJIyAgMwoJJnNobAkoImVheCIsMjQpOwkJCSMgIDMKCSZvcgkoImVjeCIsImVheCIpOwkJCSMgIDMKCSZtb3ZkCSgibW01IiwiZWN4Iik7CQkJIyB0WzNdIGNvbGxlY3RlZAoKCSZwdW5wY2tsZHEJKCJtbTQiLCJtbTUiKTsJCSMgdFsyLDNdIGNvbGxlY3RlZAp9CgoJCQkJCWlmICghJHg4Nm9ubHkpIHsKJmZ1bmN0aW9uX2JlZ2luX0IoIl9zc2VfQUVTX2RlY3J5cHRfY29tcGFjdCIpOwoJJnB4b3IJKCJtbTAiLCZRV1AoMCwka2V5KSk7CSMgIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDAKCSZweG9yCSgibW00IiwmUVdQKDgsJGtleSkpOwkjIDE1LDE0LDEzLDEyLDExLDEwLCA5LCA4CgoJIyBub3RlIHRoYXQgY2FsbGVyIGlzIGV4cGVjdGVkIHRvIGFsbG9jYXRlIHN0YWNrIGZyYW1lIGZvciBtZSEKCSZtb3YJKCRhY2MsJkRXUCgyNDAsJGtleSkpOwkJIyBsb2FkIGtleS0+cm91bmRzCgkmbGVhCSgkYWNjLCZEV1AoLTIsJGFjYywkYWNjKSk7CgkmbGVhCSgkYWNjLCZEV1AoMCwka2V5LCRhY2MsOCkpOwoJJm1vdgkoJF9fZW5kLCRhY2MpOwkJCSMgZW5kIG9mIGtleSBzY2hlZHVsZQoKCSZtb3YJKCRzMCwweDFiMWIxYjFiKTsJCSMgbWFnaWMgY29uc3RhbnQKCSZtb3YJKCZEV1AoOCwiZXNwIiksJHMwKTsKCSZtb3YJKCZEV1AoMTIsImVzcCIpLCRzMCk7CgoJIyBwcmVmZXRjaCBUZDQKCSZtb3YJKCRzMCwmRFdQKDAtMTI4LCR0YmwpKTsKCSZtb3YJKCRzMSwmRFdQKDMyLTEyOCwkdGJsKSk7CgkmbW92CSgkczIsJkRXUCg2NC0xMjgsJHRibCkpOwoJJm1vdgkoJHMzLCZEV1AoOTYtMTI4LCR0YmwpKTsKCSZtb3YJKCRzMCwmRFdQKDEyOC0xMjgsJHRibCkpOwoJJm1vdgkoJHMxLCZEV1AoMTYwLTEyOCwkdGJsKSk7CgkmbW92CSgkczIsJkRXUCgxOTItMTI4LCR0YmwpKTsKCSZtb3YJKCRzMywmRFdQKDIyNC0xMjgsJHRibCkpOwoKCSZzZXRfbGFiZWwoImxvb3AiLDE2KTsKCQkmc3NlX2RlY2NvbXBhY3QoKTsKCQkmYWRkCSgka2V5LDE2KTsKCQkmY21wCSgka2V5LCRfX2VuZCk7CgkJJmphCSgmbGFiZWwoIm91dCIpKTsKCgkJIyBST1RBVEUoeF55LE4pID09IFJPVEFURSh4LE4pXlJPVEFURSh5LE4pCgkJJm1vdnEJKCJtbTMiLCJtbTAiKTsJCSZtb3ZxCSgibW03IiwibW00Iik7CgkJJm1vdnEJKCJtbTIiLCJtbTAiLDEpOwkmbW92cQkoIm1tNiIsIm1tNCIsMSk7CgkJJm1vdnEJKCJtbTEiLCJtbTAiKTsJCSZtb3ZxCSgibW01IiwibW00Iik7CgkJJnBzaHVmdwkoIm1tMCIsIm1tMCIsMHhiMSk7CSZwc2h1ZncJKCJtbTQiLCJtbTQiLDB4YjEpOyMgPSBST1RBVEUodHAwLDE2KQoJCSZwc2xsZAkoIm1tMiIsOCk7CQkmcHNsbGQJKCJtbTYiLDgpOwoJCSZwc3JsZAkoIm1tMyIsOCk7CQkmcHNybGQJKCJtbTciLDgpOwoJCSZweG9yCSgibW0wIiwibW0yIik7CQkmcHhvcgkoIm1tNCIsIm1tNiIpOwkjIF49IHRwMDw8OAoJCSZweG9yCSgibW0wIiwibW0zIik7CQkmcHhvcgkoIm1tNCIsIm1tNyIpOwkjIF49IHRwMD4+OAoJCSZwc2xsZAkoIm1tMiIsMTYpOwkJJnBzbGxkCSgibW02IiwxNik7CgkJJnBzcmxkCSgibW0zIiwxNik7CQkmcHNybGQJKCJtbTciLDE2KTsKCQkmcHhvcgkoIm1tMCIsIm1tMiIpOwkJJnB4b3IJKCJtbTQiLCJtbTYiKTsJIyBePSB0cDA8PDI0CgkJJnB4b3IJKCJtbTAiLCJtbTMiKTsJCSZweG9yCSgibW00IiwibW03Iik7CSMgXj0gdHAwPj4yNAoKCQkmbW92cQkoIm1tMyIsJlFXUCg4LCJlc3AiKSk7CgkJJnB4b3IJKCJtbTIiLCJtbTIiKTsJCSZweG9yCSgibW02IiwibW02Iik7CgkJJnBjbXBndGIoIm1tMiIsIm1tMSIpOwkJJnBjbXBndGIoIm1tNiIsIm1tNSIpOwoJCSZwYW5kCSgibW0yIiwibW0zIik7CQkmcGFuZAkoIm1tNiIsIm1tMyIpOwoJCSZwYWRkYgkoIm1tMSIsIm1tMSIpOwkJJnBhZGRiCSgibW01IiwibW01Iik7CgkJJnB4b3IJKCJtbTEiLCJtbTIiKTsJCSZweG9yCSgibW01IiwibW02Iik7CSMgdHAyCgkJJm1vdnEJKCJtbTMiLCJtbTEiKTsJCSZtb3ZxCSgibW03IiwibW01Iik7CgkJJm1vdnEJKCJtbTIiLCJtbTEiKTsJCSZtb3ZxCSgibW02IiwibW01Iik7CgkJJnB4b3IJKCJtbTAiLCJtbTEiKTsJCSZweG9yCSgibW00IiwibW01Iik7CSMgXj0gdHAyCgkJJnBzbGxkCSgibW0zIiwyNCk7CQkmcHNsbGQJKCJtbTciLDI0KTsKCQkmcHNybGQJKCJtbTIiLDgpOwkJJnBzcmxkCSgibW02Iiw4KTsKCQkmcHhvcgkoIm1tMCIsIm1tMyIpOwkJJnB4b3IJKCJtbTQiLCJtbTciKTsJIyBePSB0cDI8PDI0CgkJJnB4b3IJKCJtbTAiLCJtbTIiKTsJCSZweG9yCSgibW00IiwibW02Iik7CSMgXj0gdHAyPj44CgoJCSZtb3ZxCSgibW0yIiwmUVdQKDgsImVzcCIpKTsKCQkmcHhvcgkoIm1tMyIsIm1tMyIpOwkJJnB4b3IJKCJtbTciLCJtbTciKTsKCQkmcGNtcGd0YigibW0zIiwibW0xIik7CQkmcGNtcGd0YigibW03IiwibW01Iik7CgkJJnBhbmQJKCJtbTMiLCJtbTIiKTsJCSZwYW5kCSgibW03IiwibW0yIik7CgkJJnBhZGRiCSgibW0xIiwibW0xIik7CQkmcGFkZGIJKCJtbTUiLCJtbTUiKTsKCQkmcHhvcgkoIm1tMSIsIm1tMyIpOwkJJnB4b3IJKCJtbTUiLCJtbTciKTsJIyB0cDQKCQkmcHNodWZ3CSgibW0zIiwibW0xIiwweGIxKTsJJnBzaHVmdwkoIm1tNyIsIm1tNSIsMHhiMSk7CgkJJnB4b3IJKCJtbTAiLCJtbTEiKTsJCSZweG9yCSgibW00IiwibW01Iik7CSMgXj0gdHA0CgkJJnB4b3IJKCJtbTAiLCJtbTMiKTsJCSZweG9yCSgibW00IiwibW03Iik7CSMgXj0gUk9UQVRFKHRwNCwxNikJCgoJCSZweG9yCSgibW0zIiwibW0zIik7CQkmcHhvcgkoIm1tNyIsIm1tNyIpOwoJCSZwY21wZ3RiKCJtbTMiLCJtbTEiKTsJCSZwY21wZ3RiKCJtbTciLCJtbTUiKTsKCQkmcGFuZAkoIm1tMyIsIm1tMiIpOwkJJnBhbmQJKCJtbTciLCJtbTIiKTsKCQkmcGFkZGIJKCJtbTEiLCJtbTEiKTsJCSZwYWRkYgkoIm1tNSIsIm1tNSIpOwoJCSZweG9yCSgibW0xIiwibW0zIik7CQkmcHhvcgkoIm1tNSIsIm1tNyIpOwkjIHRwOAoJCSZweG9yCSgibW0wIiwibW0xIik7CQkmcHhvcgkoIm1tNCIsIm1tNSIpOwkjIF49IHRwOAoJCSZtb3ZxCSgibW0zIiwibW0xIik7CQkmbW92cQkoIm1tNyIsIm1tNSIpOwoJCSZwc2h1ZncJKCJtbTIiLCJtbTEiLDB4YjEpOwkmcHNodWZ3CSgibW02IiwibW01IiwweGIxKTsKCQkmcHhvcgkoIm1tMCIsIm1tMiIpOwkJJnB4b3IJKCJtbTQiLCJtbTYiKTsJIyBePSBST1RBVEUodHA4LDE2KQoJCSZwc2xsZAkoIm1tMSIsOCk7CQkmcHNsbGQJKCJtbTUiLDgpOwoJCSZwc3JsZAkoIm1tMyIsOCk7CQkmcHNybGQJKCJtbTciLDgpOwoJCSZtb3ZxCSgibW0yIiwmUVdQKDAsJGtleSkpOwkmbW92cQkoIm1tNiIsJlFXUCg4LCRrZXkpKTsKCQkmcHhvcgkoIm1tMCIsIm1tMSIpOwkJJnB4b3IJKCJtbTQiLCJtbTUiKTsJIyBePSB0cDg8PDgKCQkmcHhvcgkoIm1tMCIsIm1tMyIpOwkJJnB4b3IJKCJtbTQiLCJtbTciKTsJIyBePSB0cDg+PjgKCQkmbW92CSgkczAsJkRXUCgwLTEyOCwkdGJsKSk7CgkJJnBzbGxkCSgibW0xIiwxNik7CQkmcHNsbGQJKCJtbTUiLDE2KTsKCQkmbW92CSgkczEsJkRXUCg2NC0xMjgsJHRibCkpOwoJCSZwc3JsZAkoIm1tMyIsMTYpOwkJJnBzcmxkCSgibW03IiwxNik7CgkJJm1vdgkoJHMyLCZEV1AoMTI4LTEyOCwkdGJsKSk7CgkJJnB4b3IJKCJtbTAiLCJtbTEiKTsJCSZweG9yCSgibW00IiwibW01Iik7CSMgXj0gdHA4PDwyNAoJCSZtb3YJKCRzMywmRFdQKDE5Mi0xMjgsJHRibCkpOwoJCSZweG9yCSgibW0wIiwibW0zIik7CQkmcHhvcgkoIm1tNCIsIm1tNyIpOwkjIF49IHRwOD4+MjQKCgkJJnB4b3IJKCJtbTAiLCJtbTIiKTsJCSZweG9yCSgibW00IiwibW02Iik7Cgkmam1wCSgmbGFiZWwoImxvb3AiKSk7CgoJJnNldF9sYWJlbCgib3V0IiwxNik7CgkmcHhvcgkoIm1tMCIsJlFXUCgwLCRrZXkpKTsKCSZweG9yCSgibW00IiwmUVdQKDgsJGtleSkpOwoKCSZyZXQJKCk7CiZmdW5jdGlvbl9lbmRfQigiX3NzZV9BRVNfZGVjcnlwdF9jb21wYWN0Iik7CgkJCQkJfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFZhbmlsbGEgYmxvY2sgZnVuY3Rpb24uCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCnN1YiBkZWNzdGVwKCkKeyBteSAoJGksJHRkLEBzKSA9IEBfOwogIG15ICR0bXAgPSAka2V5OwogIG15ICRvdXQgPSAkaT09Mz8kc1swXTokYWNjOwoKCSMgbm8gaW5zdHJ1Y3Rpb25zIGFyZSByZW9yZGVyZWQsIGFzIHBlcmZvcm1hbmNlIGFwcGVhcnMKCSMgb3B0aW1hbC4uLiBvciByYXRoZXIgdGhhdCBhbGwgYXR0ZW1wdHMgdG8gcmVvcmRlciBkaWRuJ3QKCSMgcmVzdWx0IGluIGJldHRlciBwZXJmb3JtYW5jZSBbd2hpY2ggYnkgdGhlIHdheSBpcyBub3QgYQoJIyBiaXQgbG93ZXIgdGhhbiBlY3J5cHRpb25dLgoJaWYoJGk9PTMpICAgewkmbW92CSgka2V5LCRfX2tleSk7CQkJfQoJZWxzZSAgICAgICAgewkmbW92CSgkb3V0LCRzWzBdKTsJCQl9CgkJCSZhbmQJKCRvdXQsMHhGRik7CgkJCSZtb3YJKCRvdXQsJkRXUCgwLCR0ZCwkb3V0LDgpKTsKCglpZiAoJGk9PTMpICB7CSR0bXA9JHNbMV07CQkJCX0KCQkJJm1vdnoJKCR0bXAsJkhCKCRzWzFdKSk7CgkJCSZ4b3IJKCRvdXQsJkRXUCgzLCR0ZCwkdG1wLDgpKTsKCglpZiAoJGk9PTMpICB7CSR0bXA9JHNbMl07ICZtb3YgKCRzWzFdLCRhY2MpOwkJfQoJZWxzZSAgICAgICAgewkmbW92CSgkdG1wLCRzWzJdKTsJCQl9CgkJCSZzaHIJKCR0bXAsMTYpOwoJCQkmYW5kCSgkdG1wLDB4RkYpOwoJCQkmeG9yCSgkb3V0LCZEV1AoMiwkdGQsJHRtcCw4KSk7CgoJaWYgKCRpPT0zKSAgewkkdG1wPSRzWzNdOyAmbW92ICgkc1syXSwkX19zMSk7CQl9CgllbHNlICAgICAgICB7CSZtb3YJKCR0bXAsJHNbM10pOwkJCX0KCQkJJnNocgkoJHRtcCwyNCk7CgkJCSZ4b3IJKCRvdXQsJkRXUCgxLCR0ZCwkdG1wLDgpKTsKCWlmICgkaTwyKSAgIHsJJm1vdgkoJkRXUCg0KzQqJGksImVzcCIpLCRvdXQpOwl9CglpZiAoJGk9PTMpICB7CSZtb3YJKCRzWzNdLCRfX3MwKTsJCQl9CgkJCSZjb21tZW50KCk7Cn0KCnN1YiBkZWNsYXN0KCkKeyBteSAoJGksJHRkLEBzKT1AXzsKICBteSAkdG1wID0gJGtleTsKICBteSAkb3V0ID0gJGk9PTM/JHNbMF06JGFjYzsKCglpZigkaT09MCkgICB7CSZsZWEJKCR0ZCwmRFdQKDIwNDgrMTI4LCR0ZCkpOwoJCQkmbW92CSgkdG1wLCZEV1AoMC0xMjgsJHRkKSk7CgkJCSZtb3YJKCRhY2MsJkRXUCgzMi0xMjgsJHRkKSk7CgkJCSZtb3YJKCR0bXAsJkRXUCg2NC0xMjgsJHRkKSk7CgkJCSZtb3YJKCRhY2MsJkRXUCg5Ni0xMjgsJHRkKSk7CgkJCSZtb3YJKCR0bXAsJkRXUCgxMjgtMTI4LCR0ZCkpOwoJCQkmbW92CSgkYWNjLCZEV1AoMTYwLTEyOCwkdGQpKTsKCQkJJm1vdgkoJHRtcCwmRFdQKDE5Mi0xMjgsJHRkKSk7CgkJCSZtb3YJKCRhY2MsJkRXUCgyMjQtMTI4LCR0ZCkpOwoJCQkmbGVhCSgkdGQsJkRXUCgtMTI4LCR0ZCkpOwkJfQoJaWYoJGk9PTMpICAgewkmbW92CSgka2V5LCRfX2tleSk7CQkJfQoJZWxzZSAgICAgICAgewkmbW92CSgkb3V0LCRzWzBdKTsJCQl9CgkJCSZhbmQJKCRvdXQsMHhGRik7CgkJCSZtb3Z6CSgkb3V0LCZCUCgwLCR0ZCwkb3V0LDEpKTsKCglpZiAoJGk9PTMpICB7CSR0bXA9JHNbMV07CQkJCX0KCQkJJm1vdnoJKCR0bXAsJkhCKCRzWzFdKSk7CgkJCSZtb3Z6CSgkdG1wLCZCUCgwLCR0ZCwkdG1wLDEpKTsKCQkJJnNobAkoJHRtcCw4KTsKCQkJJnhvcgkoJG91dCwkdG1wKTsKCglpZiAoJGk9PTMpICB7CSR0bXA9JHNbMl07ICZtb3YgKCRzWzFdLCRhY2MpOwkJfQoJZWxzZSAgICAgICAgewltb3YJKCR0bXAsJHNbMl0pOwkJCX0KCQkJJnNocgkoJHRtcCwxNik7CgkJCSZhbmQJKCR0bXAsMHhGRik7CgkJCSZtb3Z6CSgkdG1wLCZCUCgwLCR0ZCwkdG1wLDEpKTsKCQkJJnNobAkoJHRtcCwxNik7CgkJCSZ4b3IJKCRvdXQsJHRtcCk7CgoJaWYgKCRpPT0zKSAgewkkdG1wPSRzWzNdOyAmbW92ICgkc1syXSwkX19zMSk7CQl9CgllbHNlICAgICAgICB7CSZtb3YJKCR0bXAsJHNbM10pOwkJCX0KCQkJJnNocgkoJHRtcCwyNCk7CgkJCSZtb3Z6CSgkdG1wLCZCUCgwLCR0ZCwkdG1wLDEpKTsKCQkJJnNobAkoJHRtcCwyNCk7CgkJCSZ4b3IJKCRvdXQsJHRtcCk7CglpZiAoJGk8MikgICB7CSZtb3YJKCZEV1AoNCs0KiRpLCJlc3AiKSwkb3V0KTsJfQoJaWYgKCRpPT0zKSAgewkmbW92CSgkc1szXSwkX19zMCk7CgkJCSZsZWEJKCR0ZCwmRFdQKC0yMDQ4LCR0ZCkpOwkJfQp9CgomZnVuY3Rpb25fYmVnaW5fQigiX3g4Nl9BRVNfZGVjcnlwdCIpOwoJIyBub3RlIHRoYXQgY2FsbGVyIGlzIGV4cGVjdGVkIHRvIGFsbG9jYXRlIHN0YWNrIGZyYW1lIGZvciBtZSEKCSZtb3YJKCRfX2tleSwka2V5KTsJCQkjIHNhdmUga2V5CgoJJnhvcgkoJHMwLCZEV1AoMCwka2V5KSk7CQkjIHhvciB3aXRoIGtleQoJJnhvcgkoJHMxLCZEV1AoNCwka2V5KSk7CgkmeG9yCSgkczIsJkRXUCg4LCRrZXkpKTsKCSZ4b3IJKCRzMywmRFdQKDEyLCRrZXkpKTsKCgkmbW92CSgkYWNjLCZEV1AoMjQwLCRrZXkpKTsJCSMgbG9hZCBrZXktPnJvdW5kcwoKCWlmICgkc21hbGxfZm9vdHByaW50KSB7CgkgICAgJmxlYQkoJGFjYywmRFdQKC0yLCRhY2MsJGFjYykpOwoJICAgICZsZWEJKCRhY2MsJkRXUCgwLCRrZXksJGFjYyw4KSk7CgkgICAgJm1vdgkoJF9fZW5kLCRhY2MpOwkJIyBlbmQgb2Yga2V5IHNjaGVkdWxlCgkgICAgJnNldF9sYWJlbCgibG9vcCIsMTYpOwoJCSZkZWNzdGVwKDAsJHRibCwkczAsJHMzLCRzMiwkczEpOwoJCSZkZWNzdGVwKDEsJHRibCwkczEsJHMwLCRzMywkczIpOwoJCSZkZWNzdGVwKDIsJHRibCwkczIsJHMxLCRzMCwkczMpOwoJCSZkZWNzdGVwKDMsJHRibCwkczMsJHMyLCRzMSwkczApOwoJCSZhZGQJKCRrZXksMTYpOwkJIyBhZHZhbmNlIHJkX2tleQoJCSZ4b3IJKCRzMCwmRFdQKDAsJGtleSkpOwoJCSZ4b3IJKCRzMSwmRFdQKDQsJGtleSkpOwoJCSZ4b3IJKCRzMiwmRFdQKDgsJGtleSkpOwoJCSZ4b3IJKCRzMywmRFdQKDEyLCRrZXkpKTsKCSAgICAmY21wCSgka2V5LCRfX2VuZCk7CgkgICAgJm1vdgkoJF9fa2V5LCRrZXkpOwoJICAgICZqYgkJKCZsYWJlbCgibG9vcCIpKTsKCX0KCWVsc2UgewoJICAgICZjbXAJKCRhY2MsMTApOwoJICAgICZqbGUJKCZsYWJlbCgiMTByb3VuZHMiKSk7CgkgICAgJmNtcAkoJGFjYywxMik7CgkgICAgJmpsZQkoJmxhYmVsKCIxMnJvdW5kcyIpKTsKCgkmc2V0X2xhYmVsKCIxNHJvdW5kcyIsNCk7CgkgICAgZm9yICgkaT0xOyRpPDM7JGkrKykgewoJCSZkZWNzdGVwKDAsJHRibCwkczAsJHMzLCRzMiwkczEpOwoJCSZkZWNzdGVwKDEsJHRibCwkczEsJHMwLCRzMywkczIpOwoJCSZkZWNzdGVwKDIsJHRibCwkczIsJHMxLCRzMCwkczMpOwoJCSZkZWNzdGVwKDMsJHRibCwkczMsJHMyLCRzMSwkczApOwoJCSZ4b3IJKCRzMCwmRFdQKDE2KiRpKzAsJGtleSkpOwoJCSZ4b3IJKCRzMSwmRFdQKDE2KiRpKzQsJGtleSkpOwoJCSZ4b3IJKCRzMiwmRFdQKDE2KiRpKzgsJGtleSkpOwoJCSZ4b3IJKCRzMywmRFdQKDE2KiRpKzEyLCRrZXkpKTsKCSAgICB9CgkgICAgJmFkZAkoJGtleSwzMik7CgkgICAgJm1vdgkoJF9fa2V5LCRrZXkpOwkJIyBhZHZhbmNlIHJkX2tleQoJJnNldF9sYWJlbCgiMTJyb3VuZHMiLDQpOwoJICAgIGZvciAoJGk9MTskaTwzOyRpKyspIHsKCQkmZGVjc3RlcCgwLCR0YmwsJHMwLCRzMywkczIsJHMxKTsKCQkmZGVjc3RlcCgxLCR0YmwsJHMxLCRzMCwkczMsJHMyKTsKCQkmZGVjc3RlcCgyLCR0YmwsJHMyLCRzMSwkczAsJHMzKTsKCQkmZGVjc3RlcCgzLCR0YmwsJHMzLCRzMiwkczEsJHMwKTsKCQkmeG9yCSgkczAsJkRXUCgxNiokaSswLCRrZXkpKTsKCQkmeG9yCSgkczEsJkRXUCgxNiokaSs0LCRrZXkpKTsKCQkmeG9yCSgkczIsJkRXUCgxNiokaSs4LCRrZXkpKTsKCQkmeG9yCSgkczMsJkRXUCgxNiokaSsxMiwka2V5KSk7CgkgICAgfQoJICAgICZhZGQJKCRrZXksMzIpOwoJICAgICZtb3YJKCRfX2tleSwka2V5KTsJCSMgYWR2YW5jZSByZF9rZXkKCSZzZXRfbGFiZWwoIjEwcm91bmRzIiw0KTsKCSAgICBmb3IgKCRpPTE7JGk8MTA7JGkrKykgewoJCSZkZWNzdGVwKDAsJHRibCwkczAsJHMzLCRzMiwkczEpOwoJCSZkZWNzdGVwKDEsJHRibCwkczEsJHMwLCRzMywkczIpOwoJCSZkZWNzdGVwKDIsJHRibCwkczIsJHMxLCRzMCwkczMpOwoJCSZkZWNzdGVwKDMsJHRibCwkczMsJHMyLCRzMSwkczApOwoJCSZ4b3IJKCRzMCwmRFdQKDE2KiRpKzAsJGtleSkpOwoJCSZ4b3IJKCRzMSwmRFdQKDE2KiRpKzQsJGtleSkpOwoJCSZ4b3IJKCRzMiwmRFdQKDE2KiRpKzgsJGtleSkpOwoJCSZ4b3IJKCRzMywmRFdQKDE2KiRpKzEyLCRrZXkpKTsKCSAgICB9Cgl9CgoJJmRlY2xhc3QoMCwkdGJsLCRzMCwkczMsJHMyLCRzMSk7CgkmZGVjbGFzdCgxLCR0YmwsJHMxLCRzMCwkczMsJHMyKTsKCSZkZWNsYXN0KDIsJHRibCwkczIsJHMxLCRzMCwkczMpOwoJJmRlY2xhc3QoMywkdGJsLCRzMywkczIsJHMxLCRzMCk7CgoJJmFkZAkoJGtleSwkc21hbGxfZm9vdHByaW50PzE2OjE2MCk7CgkmeG9yCSgkczAsJkRXUCgwLCRrZXkpKTsKCSZ4b3IJKCRzMSwmRFdQKDQsJGtleSkpOwoJJnhvcgkoJHMyLCZEV1AoOCwka2V5KSk7CgkmeG9yCSgkczMsJkRXUCgxMiwka2V5KSk7CgoJJnJldAkoKTsKCiZzZXRfbGFiZWwoIkFFU19UZCIsNjQpOwkjIFllcyEgSSBrZWVwIGl0IGluIHRoZSBjb2RlIHNlZ21lbnQhCgkmX2RhdGFfd29yZCgweDUwYTdmNDUxLCAweDUzNjU0MTdlLCAweGMzYTQxNzFhLCAweDk2NWUyNzNhKTsKCSZfZGF0YV93b3JkKDB4Y2I2YmFiM2IsIDB4ZjE0NTlkMWYsIDB4YWI1OGZhYWMsIDB4OTMwM2UzNGIpOwoJJl9kYXRhX3dvcmQoMHg1NWZhMzAyMCwgMHhmNjZkNzZhZCwgMHg5MTc2Y2M4OCwgMHgyNTRjMDJmNSk7CgkmX2RhdGFfd29yZCgweGZjZDdlNTRmLCAweGQ3Y2IyYWM1LCAweDgwNDQzNTI2LCAweDhmYTM2MmI1KTsKCSZfZGF0YV93b3JkKDB4NDk1YWIxZGUsIDB4NjcxYmJhMjUsIDB4OTgwZWVhNDUsIDB4ZTFjMGZlNWQpOwoJJl9kYXRhX3dvcmQoMHgwMjc1MmZjMywgMHgxMmYwNGM4MSwgMHhhMzk3NDY4ZCwgMHhjNmY5ZDM2Yik7CgkmX2RhdGFfd29yZCgweGU3NWY4ZjAzLCAweDk1OWM5MjE1LCAweGViN2E2ZGJmLCAweGRhNTk1Mjk1KTsKCSZfZGF0YV93b3JkKDB4MmQ4M2JlZDQsIDB4ZDMyMTc0NTgsIDB4Mjk2OWUwNDksIDB4NDRjOGM5OGUpOwoJJl9kYXRhX3dvcmQoMHg2YTg5YzI3NSwgMHg3ODc5OGVmNCwgMHg2YjNlNTg5OSwgMHhkZDcxYjkyNyk7CgkmX2RhdGFfd29yZCgweGI2NGZlMWJlLCAweDE3YWQ4OGYwLCAweDY2YWMyMGM5LCAweGI0M2FjZTdkKTsKCSZfZGF0YV93b3JkKDB4MTg0YWRmNjMsIDB4ODIzMTFhZTUsIDB4NjAzMzUxOTcsIDB4NDU3ZjUzNjIpOwoJJl9kYXRhX3dvcmQoMHhlMDc3NjRiMSwgMHg4NGFlNmJiYiwgMHgxY2EwODFmZSwgMHg5NDJiMDhmOSk7CgkmX2RhdGFfd29yZCgweDU4Njg0ODcwLCAweDE5ZmQ0NThmLCAweDg3NmNkZTk0LCAweGI3Zjg3YjUyKTsKCSZfZGF0YV93b3JkKDB4MjNkMzczYWIsIDB4ZTIwMjRiNzIsIDB4NTc4ZjFmZTMsIDB4MmFhYjU1NjYpOwoJJl9kYXRhX3dvcmQoMHgwNzI4ZWJiMiwgMHgwM2MyYjUyZiwgMHg5YTdiYzU4NiwgMHhhNTA4MzdkMyk7CgkmX2RhdGFfd29yZCgweGYyODcyODMwLCAweGIyYTViZjIzLCAweGJhNmEwMzAyLCAweDVjODIxNmVkKTsKCSZfZGF0YV93b3JkKDB4MmIxY2NmOGEsIDB4OTJiNDc5YTcsIDB4ZjBmMjA3ZjMsIDB4YTFlMjY5NGUpOwoJJl9kYXRhX3dvcmQoMHhjZGY0ZGE2NSwgMHhkNWJlMDUwNiwgMHgxZjYyMzRkMSwgMHg4YWZlYTZjNCk7CgkmX2RhdGFfd29yZCgweDlkNTMyZTM0LCAweGEwNTVmM2EyLCAweDMyZTE4YTA1LCAweDc1ZWJmNmE0KTsKCSZfZGF0YV93b3JkKDB4MzllYzgzMGIsIDB4YWFlZjYwNDAsIDB4MDY5ZjcxNWUsIDB4NTExMDZlYmQpOwoJJl9kYXRhX3dvcmQoMHhmOThhMjEzZSwgMHgzZDA2ZGQ5NiwgMHhhZTA1M2VkZCwgMHg0NmJkZTY0ZCk7CgkmX2RhdGFfd29yZCgweGI1OGQ1NDkxLCAweDA1NWRjNDcxLCAweDZmZDQwNjA0LCAweGZmMTU1MDYwKTsKCSZfZGF0YV93b3JkKDB4MjRmYjk4MTksIDB4OTdlOWJkZDYsIDB4Y2M0MzQwODksIDB4Nzc5ZWQ5NjcpOwoJJl9kYXRhX3dvcmQoMHhiZDQyZThiMCwgMHg4ODhiODkwNywgMHgzODViMTllNywgMHhkYmVlYzg3OSk7CgkmX2RhdGFfd29yZCgweDQ3MGE3Y2ExLCAweGU5MGY0MjdjLCAweGM5MWU4NGY4LCAweDAwMDAwMDAwKTsKCSZfZGF0YV93b3JkKDB4ODM4NjgwMDksIDB4NDhlZDJiMzIsIDB4YWM3MDExMWUsIDB4NGU3MjVhNmMpOwoJJl9kYXRhX3dvcmQoMHhmYmZmMGVmZCwgMHg1NjM4ODUwZiwgMHgxZWQ1YWUzZCwgMHgyNzM5MmQzNik7CgkmX2RhdGFfd29yZCgweDY0ZDkwZjBhLCAweDIxYTY1YzY4LCAweGQxNTQ1YjliLCAweDNhMmUzNjI0KTsKCSZfZGF0YV93b3JkKDB4YjE2NzBhMGMsIDB4MGZlNzU3OTMsIDB4ZDI5NmVlYjQsIDB4OWU5MTliMWIpOwoJJl9kYXRhX3dvcmQoMHg0ZmM1YzA4MCwgMHhhMjIwZGM2MSwgMHg2OTRiNzc1YSwgMHgxNjFhMTIxYyk7CgkmX2RhdGFfd29yZCgweDBhYmE5M2UyLCAweGU1MmFhMGMwLCAweDQzZTAyMjNjLCAweDFkMTcxYjEyKTsKCSZfZGF0YV93b3JkKDB4MGIwZDA5MGUsIDB4YWRjNzhiZjIsIDB4YjlhOGI2MmQsIDB4YzhhOTFlMTQpOwoJJl9kYXRhX3dvcmQoMHg4NTE5ZjE1NywgMHg0YzA3NzVhZiwgMHhiYmRkOTllZSwgMHhmZDYwN2ZhMyk7CgkmX2RhdGFfd29yZCgweDlmMjYwMWY3LCAweGJjZjU3MjVjLCAweGM1M2I2NjQ0LCAweDM0N2VmYjViKTsKCSZfZGF0YV93b3JkKDB4NzYyOTQzOGIsIDB4ZGNjNjIzY2IsIDB4NjhmY2VkYjYsIDB4NjNmMWU0YjgpOwoJJl9kYXRhX3dvcmQoMHhjYWRjMzFkNywgMHgxMDg1NjM0MiwgMHg0MDIyOTcxMywgMHgyMDExYzY4NCk7CgkmX2RhdGFfd29yZCgweDdkMjQ0YTg1LCAweGY4M2RiYmQyLCAweDExMzJmOWFlLCAweDZkYTEyOWM3KTsKCSZfZGF0YV93b3JkKDB4NGIyZjllMWQsIDB4ZjMzMGIyZGMsIDB4ZWM1Mjg2MGQsIDB4ZDBlM2MxNzcpOwoJJl9kYXRhX3dvcmQoMHg2YzE2YjMyYiwgMHg5OWI5NzBhOSwgMHhmYTQ4OTQxMSwgMHgyMjY0ZTk0Nyk7CgkmX2RhdGFfd29yZCgweGM0OGNmY2E4LCAweDFhM2ZmMGEwLCAweGQ4MmM3ZDU2LCAweGVmOTAzMzIyKTsKCSZfZGF0YV93b3JkKDB4Yzc0ZTQ5ODcsIDB4YzFkMTM4ZDksIDB4ZmVhMmNhOGMsIDB4MzYwYmQ0OTgpOwoJJl9kYXRhX3dvcmQoMHhjZjgxZjVhNiwgMHgyOGRlN2FhNSwgMHgyNjhlYjdkYSwgMHhhNGJmYWQzZik7CgkmX2RhdGFfd29yZCgweGU0OWQzYTJjLCAweDBkOTI3ODUwLCAweDliY2M1ZjZhLCAweDYyNDY3ZTU0KTsKCSZfZGF0YV93b3JkKDB4YzIxMzhkZjYsIDB4ZThiOGQ4OTAsIDB4NWVmNzM5MmUsIDB4ZjVhZmMzODIpOwoJJl9kYXRhX3dvcmQoMHhiZTgwNWQ5ZiwgMHg3YzkzZDA2OSwgMHhhOTJkZDU2ZiwgMHhiMzEyMjVjZik7CgkmX2RhdGFfd29yZCgweDNiOTlhY2M4LCAweGE3N2QxODEwLCAweDZlNjM5Y2U4LCAweDdiYmIzYmRiKTsKCSZfZGF0YV93b3JkKDB4MDk3ODI2Y2QsIDB4ZjQxODU5NmUsIDB4MDFiNzlhZWMsIDB4YTg5YTRmODMpOwoJJl9kYXRhX3dvcmQoMHg2NTZlOTVlNiwgMHg3ZWU2ZmZhYSwgMHgwOGNmYmMyMSwgMHhlNmU4MTVlZik7CgkmX2RhdGFfd29yZCgweGQ5OWJlN2JhLCAweGNlMzY2ZjRhLCAweGQ0MDk5ZmVhLCAweGQ2N2NiMDI5KTsKCSZfZGF0YV93b3JkKDB4YWZiMmE0MzEsIDB4MzEyMzNmMmEsIDB4MzA5NGE1YzYsIDB4YzA2NmEyMzUpOwoJJl9kYXRhX3dvcmQoMHgzN2JjNGU3NCwgMHhhNmNhODJmYywgMHhiMGQwOTBlMCwgMHgxNWQ4YTczMyk7CgkmX2RhdGFfd29yZCgweDRhOTgwNGYxLCAweGY3ZGFlYzQxLCAweDBlNTBjZDdmLCAweDJmZjY5MTE3KTsKCSZfZGF0YV93b3JkKDB4OGRkNjRkNzYsIDB4NGRiMGVmNDMsIDB4NTQ0ZGFhY2MsIDB4ZGYwNDk2ZTQpOwoJJl9kYXRhX3dvcmQoMHhlM2I1ZDE5ZSwgMHgxYjg4NmE0YywgMHhiODFmMmNjMSwgMHg3ZjUxNjU0Nik7CgkmX2RhdGFfd29yZCgweDA0ZWE1ZTlkLCAweDVkMzU4YzAxLCAweDczNzQ4N2ZhLCAweDJlNDEwYmZiKTsKCSZfZGF0YV93b3JkKDB4NWExZDY3YjMsIDB4NTJkMmRiOTIsIDB4MzM1NjEwZTksIDB4MTM0N2Q2NmQpOwoJJl9kYXRhX3dvcmQoMHg4YzYxZDc5YSwgMHg3YTBjYTEzNywgMHg4ZTE0Zjg1OSwgMHg4OTNjMTNlYik7CgkmX2RhdGFfd29yZCgweGVlMjdhOWNlLCAweDM1Yzk2MWI3LCAweGVkZTUxY2UxLCAweDNjYjE0NzdhKTsKCSZfZGF0YV93b3JkKDB4NTlkZmQyOWMsIDB4M2Y3M2YyNTUsIDB4NzljZTE0MTgsIDB4YmYzN2M3NzMpOwoJJl9kYXRhX3dvcmQoMHhlYWNkZjc1MywgMHg1YmFhZmQ1ZiwgMHgxNDZmM2RkZiwgMHg4NmRiNDQ3OCk7CgkmX2RhdGFfd29yZCgweDgxZjNhZmNhLCAweDNlYzQ2OGI5LCAweDJjMzQyNDM4LCAweDVmNDBhM2MyKTsKCSZfZGF0YV93b3JkKDB4NzJjMzFkMTYsIDB4MGMyNWUyYmMsIDB4OGI0OTNjMjgsIDB4NDE5NTBkZmYpOwoJJl9kYXRhX3dvcmQoMHg3MTAxYTgzOSwgMHhkZWIzMGMwOCwgMHg5Y2U0YjRkOCwgMHg5MGMxNTY2NCk7CgkmX2RhdGFfd29yZCgweDYxODRjYjdiLCAweDcwYjYzMmQ1LCAweDc0NWM2YzQ4LCAweDQyNTdiOGQwKTsKCiNUZDQ6CSMgZm91ciBjb3BpZXMgb2YgVGQ0IHRvIGNob29zZSBmcm9tIHRvIGF2b2lkIEwxIGFsaWFzaW5nCgkmZGF0YV9ieXRlKDB4NTIsIDB4MDksIDB4NmEsIDB4ZDUsIDB4MzAsIDB4MzYsIDB4YTUsIDB4MzgpOwoJJmRhdGFfYnl0ZSgweGJmLCAweDQwLCAweGEzLCAweDllLCAweDgxLCAweGYzLCAweGQ3LCAweGZiKTsKCSZkYXRhX2J5dGUoMHg3YywgMHhlMywgMHgzOSwgMHg4MiwgMHg5YiwgMHgyZiwgMHhmZiwgMHg4Nyk7CgkmZGF0YV9ieXRlKDB4MzQsIDB4OGUsIDB4NDMsIDB4NDQsIDB4YzQsIDB4ZGUsIDB4ZTksIDB4Y2IpOwoJJmRhdGFfYnl0ZSgweDU0LCAweDdiLCAweDk0LCAweDMyLCAweGE2LCAweGMyLCAweDIzLCAweDNkKTsKCSZkYXRhX2J5dGUoMHhlZSwgMHg0YywgMHg5NSwgMHgwYiwgMHg0MiwgMHhmYSwgMHhjMywgMHg0ZSk7CgkmZGF0YV9ieXRlKDB4MDgsIDB4MmUsIDB4YTEsIDB4NjYsIDB4MjgsIDB4ZDksIDB4MjQsIDB4YjIpOwoJJmRhdGFfYnl0ZSgweDc2LCAweDViLCAweGEyLCAweDQ5LCAweDZkLCAweDhiLCAweGQxLCAweDI1KTsKCSZkYXRhX2J5dGUoMHg3MiwgMHhmOCwgMHhmNiwgMHg2NCwgMHg4NiwgMHg2OCwgMHg5OCwgMHgxNik7CgkmZGF0YV9ieXRlKDB4ZDQsIDB4YTQsIDB4NWMsIDB4Y2MsIDB4NWQsIDB4NjUsIDB4YjYsIDB4OTIpOwoJJmRhdGFfYnl0ZSgweDZjLCAweDcwLCAweDQ4LCAweDUwLCAweGZkLCAweGVkLCAweGI5LCAweGRhKTsKCSZkYXRhX2J5dGUoMHg1ZSwgMHgxNSwgMHg0NiwgMHg1NywgMHhhNywgMHg4ZCwgMHg5ZCwgMHg4NCk7CgkmZGF0YV9ieXRlKDB4OTAsIDB4ZDgsIDB4YWIsIDB4MDAsIDB4OGMsIDB4YmMsIDB4ZDMsIDB4MGEpOwoJJmRhdGFfYnl0ZSgweGY3LCAweGU0LCAweDU4LCAweDA1LCAweGI4LCAweGIzLCAweDQ1LCAweDA2KTsKCSZkYXRhX2J5dGUoMHhkMCwgMHgyYywgMHgxZSwgMHg4ZiwgMHhjYSwgMHgzZiwgMHgwZiwgMHgwMik7CgkmZGF0YV9ieXRlKDB4YzEsIDB4YWYsIDB4YmQsIDB4MDMsIDB4MDEsIDB4MTMsIDB4OGEsIDB4NmIpOwoJJmRhdGFfYnl0ZSgweDNhLCAweDkxLCAweDExLCAweDQxLCAweDRmLCAweDY3LCAweGRjLCAweGVhKTsKCSZkYXRhX2J5dGUoMHg5NywgMHhmMiwgMHhjZiwgMHhjZSwgMHhmMCwgMHhiNCwgMHhlNiwgMHg3Myk7CgkmZGF0YV9ieXRlKDB4OTYsIDB4YWMsIDB4NzQsIDB4MjIsIDB4ZTcsIDB4YWQsIDB4MzUsIDB4ODUpOwoJJmRhdGFfYnl0ZSgweGUyLCAweGY5LCAweDM3LCAweGU4LCAweDFjLCAweDc1LCAweGRmLCAweDZlKTsKCSZkYXRhX2J5dGUoMHg0NywgMHhmMSwgMHgxYSwgMHg3MSwgMHgxZCwgMHgyOSwgMHhjNSwgMHg4OSk7CgkmZGF0YV9ieXRlKDB4NmYsIDB4YjcsIDB4NjIsIDB4MGUsIDB4YWEsIDB4MTgsIDB4YmUsIDB4MWIpOwoJJmRhdGFfYnl0ZSgweGZjLCAweDU2LCAweDNlLCAweDRiLCAweGM2LCAweGQyLCAweDc5LCAweDIwKTsKCSZkYXRhX2J5dGUoMHg5YSwgMHhkYiwgMHhjMCwgMHhmZSwgMHg3OCwgMHhjZCwgMHg1YSwgMHhmNCk7CgkmZGF0YV9ieXRlKDB4MWYsIDB4ZGQsIDB4YTgsIDB4MzMsIDB4ODgsIDB4MDcsIDB4YzcsIDB4MzEpOwoJJmRhdGFfYnl0ZSgweGIxLCAweDEyLCAweDEwLCAweDU5LCAweDI3LCAweDgwLCAweGVjLCAweDVmKTsKCSZkYXRhX2J5dGUoMHg2MCwgMHg1MSwgMHg3ZiwgMHhhOSwgMHgxOSwgMHhiNSwgMHg0YSwgMHgwZCk7CgkmZGF0YV9ieXRlKDB4MmQsIDB4ZTUsIDB4N2EsIDB4OWYsIDB4OTMsIDB4YzksIDB4OWMsIDB4ZWYpOwoJJmRhdGFfYnl0ZSgweGEwLCAweGUwLCAweDNiLCAweDRkLCAweGFlLCAweDJhLCAweGY1LCAweGIwKTsKCSZkYXRhX2J5dGUoMHhjOCwgMHhlYiwgMHhiYiwgMHgzYywgMHg4MywgMHg1MywgMHg5OSwgMHg2MSk7CgkmZGF0YV9ieXRlKDB4MTcsIDB4MmIsIDB4MDQsIDB4N2UsIDB4YmEsIDB4NzcsIDB4ZDYsIDB4MjYpOwoJJmRhdGFfYnl0ZSgweGUxLCAweDY5LCAweDE0LCAweDYzLCAweDU1LCAweDIxLCAweDBjLCAweDdkKTsKCgkmZGF0YV9ieXRlKDB4NTIsIDB4MDksIDB4NmEsIDB4ZDUsIDB4MzAsIDB4MzYsIDB4YTUsIDB4MzgpOwoJJmRhdGFfYnl0ZSgweGJmLCAweDQwLCAweGEzLCAweDllLCAweDgxLCAweGYzLCAweGQ3LCAweGZiKTsKCSZkYXRhX2J5dGUoMHg3YywgMHhlMywgMHgzOSwgMHg4MiwgMHg5YiwgMHgyZiwgMHhmZiwgMHg4Nyk7CgkmZGF0YV9ieXRlKDB4MzQsIDB4OGUsIDB4NDMsIDB4NDQsIDB4YzQsIDB4ZGUsIDB4ZTksIDB4Y2IpOwoJJmRhdGFfYnl0ZSgweDU0LCAweDdiLCAweDk0LCAweDMyLCAweGE2LCAweGMyLCAweDIzLCAweDNkKTsKCSZkYXRhX2J5dGUoMHhlZSwgMHg0YywgMHg5NSwgMHgwYiwgMHg0MiwgMHhmYSwgMHhjMywgMHg0ZSk7CgkmZGF0YV9ieXRlKDB4MDgsIDB4MmUsIDB4YTEsIDB4NjYsIDB4MjgsIDB4ZDksIDB4MjQsIDB4YjIpOwoJJmRhdGFfYnl0ZSgweDc2LCAweDViLCAweGEyLCAweDQ5LCAweDZkLCAweDhiLCAweGQxLCAweDI1KTsKCSZkYXRhX2J5dGUoMHg3MiwgMHhmOCwgMHhmNiwgMHg2NCwgMHg4NiwgMHg2OCwgMHg5OCwgMHgxNik7CgkmZGF0YV9ieXRlKDB4ZDQsIDB4YTQsIDB4NWMsIDB4Y2MsIDB4NWQsIDB4NjUsIDB4YjYsIDB4OTIpOwoJJmRhdGFfYnl0ZSgweDZjLCAweDcwLCAweDQ4LCAweDUwLCAweGZkLCAweGVkLCAweGI5LCAweGRhKTsKCSZkYXRhX2J5dGUoMHg1ZSwgMHgxNSwgMHg0NiwgMHg1NywgMHhhNywgMHg4ZCwgMHg5ZCwgMHg4NCk7CgkmZGF0YV9ieXRlKDB4OTAsIDB4ZDgsIDB4YWIsIDB4MDAsIDB4OGMsIDB4YmMsIDB4ZDMsIDB4MGEpOwoJJmRhdGFfYnl0ZSgweGY3LCAweGU0LCAweDU4LCAweDA1LCAweGI4LCAweGIzLCAweDQ1LCAweDA2KTsKCSZkYXRhX2J5dGUoMHhkMCwgMHgyYywgMHgxZSwgMHg4ZiwgMHhjYSwgMHgzZiwgMHgwZiwgMHgwMik7CgkmZGF0YV9ieXRlKDB4YzEsIDB4YWYsIDB4YmQsIDB4MDMsIDB4MDEsIDB4MTMsIDB4OGEsIDB4NmIpOwoJJmRhdGFfYnl0ZSgweDNhLCAweDkxLCAweDExLCAweDQxLCAweDRmLCAweDY3LCAweGRjLCAweGVhKTsKCSZkYXRhX2J5dGUoMHg5NywgMHhmMiwgMHhjZiwgMHhjZSwgMHhmMCwgMHhiNCwgMHhlNiwgMHg3Myk7CgkmZGF0YV9ieXRlKDB4OTYsIDB4YWMsIDB4NzQsIDB4MjIsIDB4ZTcsIDB4YWQsIDB4MzUsIDB4ODUpOwoJJmRhdGFfYnl0ZSgweGUyLCAweGY5LCAweDM3LCAweGU4LCAweDFjLCAweDc1LCAweGRmLCAweDZlKTsKCSZkYXRhX2J5dGUoMHg0NywgMHhmMSwgMHgxYSwgMHg3MSwgMHgxZCwgMHgyOSwgMHhjNSwgMHg4OSk7CgkmZGF0YV9ieXRlKDB4NmYsIDB4YjcsIDB4NjIsIDB4MGUsIDB4YWEsIDB4MTgsIDB4YmUsIDB4MWIpOwoJJmRhdGFfYnl0ZSgweGZjLCAweDU2LCAweDNlLCAweDRiLCAweGM2LCAweGQyLCAweDc5LCAweDIwKTsKCSZkYXRhX2J5dGUoMHg5YSwgMHhkYiwgMHhjMCwgMHhmZSwgMHg3OCwgMHhjZCwgMHg1YSwgMHhmNCk7CgkmZGF0YV9ieXRlKDB4MWYsIDB4ZGQsIDB4YTgsIDB4MzMsIDB4ODgsIDB4MDcsIDB4YzcsIDB4MzEpOwoJJmRhdGFfYnl0ZSgweGIxLCAweDEyLCAweDEwLCAweDU5LCAweDI3LCAweDgwLCAweGVjLCAweDVmKTsKCSZkYXRhX2J5dGUoMHg2MCwgMHg1MSwgMHg3ZiwgMHhhOSwgMHgxOSwgMHhiNSwgMHg0YSwgMHgwZCk7CgkmZGF0YV9ieXRlKDB4MmQsIDB4ZTUsIDB4N2EsIDB4OWYsIDB4OTMsIDB4YzksIDB4OWMsIDB4ZWYpOwoJJmRhdGFfYnl0ZSgweGEwLCAweGUwLCAweDNiLCAweDRkLCAweGFlLCAweDJhLCAweGY1LCAweGIwKTsKCSZkYXRhX2J5dGUoMHhjOCwgMHhlYiwgMHhiYiwgMHgzYywgMHg4MywgMHg1MywgMHg5OSwgMHg2MSk7CgkmZGF0YV9ieXRlKDB4MTcsIDB4MmIsIDB4MDQsIDB4N2UsIDB4YmEsIDB4NzcsIDB4ZDYsIDB4MjYpOwoJJmRhdGFfYnl0ZSgweGUxLCAweDY5LCAweDE0LCAweDYzLCAweDU1LCAweDIxLCAweDBjLCAweDdkKTsKCgkmZGF0YV9ieXRlKDB4NTIsIDB4MDksIDB4NmEsIDB4ZDUsIDB4MzAsIDB4MzYsIDB4YTUsIDB4MzgpOwoJJmRhdGFfYnl0ZSgweGJmLCAweDQwLCAweGEzLCAweDllLCAweDgxLCAweGYzLCAweGQ3LCAweGZiKTsKCSZkYXRhX2J5dGUoMHg3YywgMHhlMywgMHgzOSwgMHg4MiwgMHg5YiwgMHgyZiwgMHhmZiwgMHg4Nyk7CgkmZGF0YV9ieXRlKDB4MzQsIDB4OGUsIDB4NDMsIDB4NDQsIDB4YzQsIDB4ZGUsIDB4ZTksIDB4Y2IpOwoJJmRhdGFfYnl0ZSgweDU0LCAweDdiLCAweDk0LCAweDMyLCAweGE2LCAweGMyLCAweDIzLCAweDNkKTsKCSZkYXRhX2J5dGUoMHhlZSwgMHg0YywgMHg5NSwgMHgwYiwgMHg0MiwgMHhmYSwgMHhjMywgMHg0ZSk7CgkmZGF0YV9ieXRlKDB4MDgsIDB4MmUsIDB4YTEsIDB4NjYsIDB4MjgsIDB4ZDksIDB4MjQsIDB4YjIpOwoJJmRhdGFfYnl0ZSgweDc2LCAweDViLCAweGEyLCAweDQ5LCAweDZkLCAweDhiLCAweGQxLCAweDI1KTsKCSZkYXRhX2J5dGUoMHg3MiwgMHhmOCwgMHhmNiwgMHg2NCwgMHg4NiwgMHg2OCwgMHg5OCwgMHgxNik7CgkmZGF0YV9ieXRlKDB4ZDQsIDB4YTQsIDB4NWMsIDB4Y2MsIDB4NWQsIDB4NjUsIDB4YjYsIDB4OTIpOwoJJmRhdGFfYnl0ZSgweDZjLCAweDcwLCAweDQ4LCAweDUwLCAweGZkLCAweGVkLCAweGI5LCAweGRhKTsKCSZkYXRhX2J5dGUoMHg1ZSwgMHgxNSwgMHg0NiwgMHg1NywgMHhhNywgMHg4ZCwgMHg5ZCwgMHg4NCk7CgkmZGF0YV9ieXRlKDB4OTAsIDB4ZDgsIDB4YWIsIDB4MDAsIDB4OGMsIDB4YmMsIDB4ZDMsIDB4MGEpOwoJJmRhdGFfYnl0ZSgweGY3LCAweGU0LCAweDU4LCAweDA1LCAweGI4LCAweGIzLCAweDQ1LCAweDA2KTsKCSZkYXRhX2J5dGUoMHhkMCwgMHgyYywgMHgxZSwgMHg4ZiwgMHhjYSwgMHgzZiwgMHgwZiwgMHgwMik7CgkmZGF0YV9ieXRlKDB4YzEsIDB4YWYsIDB4YmQsIDB4MDMsIDB4MDEsIDB4MTMsIDB4OGEsIDB4NmIpOwoJJmRhdGFfYnl0ZSgweDNhLCAweDkxLCAweDExLCAweDQxLCAweDRmLCAweDY3LCAweGRjLCAweGVhKTsKCSZkYXRhX2J5dGUoMHg5NywgMHhmMiwgMHhjZiwgMHhjZSwgMHhmMCwgMHhiNCwgMHhlNiwgMHg3Myk7CgkmZGF0YV9ieXRlKDB4OTYsIDB4YWMsIDB4NzQsIDB4MjIsIDB4ZTcsIDB4YWQsIDB4MzUsIDB4ODUpOwoJJmRhdGFfYnl0ZSgweGUyLCAweGY5LCAweDM3LCAweGU4LCAweDFjLCAweDc1LCAweGRmLCAweDZlKTsKCSZkYXRhX2J5dGUoMHg0NywgMHhmMSwgMHgxYSwgMHg3MSwgMHgxZCwgMHgyOSwgMHhjNSwgMHg4OSk7CgkmZGF0YV9ieXRlKDB4NmYsIDB4YjcsIDB4NjIsIDB4MGUsIDB4YWEsIDB4MTgsIDB4YmUsIDB4MWIpOwoJJmRhdGFfYnl0ZSgweGZjLCAweDU2LCAweDNlLCAweDRiLCAweGM2LCAweGQyLCAweDc5LCAweDIwKTsKCSZkYXRhX2J5dGUoMHg5YSwgMHhkYiwgMHhjMCwgMHhmZSwgMHg3OCwgMHhjZCwgMHg1YSwgMHhmNCk7CgkmZGF0YV9ieXRlKDB4MWYsIDB4ZGQsIDB4YTgsIDB4MzMsIDB4ODgsIDB4MDcsIDB4YzcsIDB4MzEpOwoJJmRhdGFfYnl0ZSgweGIxLCAweDEyLCAweDEwLCAweDU5LCAweDI3LCAweDgwLCAweGVjLCAweDVmKTsKCSZkYXRhX2J5dGUoMHg2MCwgMHg1MSwgMHg3ZiwgMHhhOSwgMHgxOSwgMHhiNSwgMHg0YSwgMHgwZCk7CgkmZGF0YV9ieXRlKDB4MmQsIDB4ZTUsIDB4N2EsIDB4OWYsIDB4OTMsIDB4YzksIDB4OWMsIDB4ZWYpOwoJJmRhdGFfYnl0ZSgweGEwLCAweGUwLCAweDNiLCAweDRkLCAweGFlLCAweDJhLCAweGY1LCAweGIwKTsKCSZkYXRhX2J5dGUoMHhjOCwgMHhlYiwgMHhiYiwgMHgzYywgMHg4MywgMHg1MywgMHg5OSwgMHg2MSk7CgkmZGF0YV9ieXRlKDB4MTcsIDB4MmIsIDB4MDQsIDB4N2UsIDB4YmEsIDB4NzcsIDB4ZDYsIDB4MjYpOwoJJmRhdGFfYnl0ZSgweGUxLCAweDY5LCAweDE0LCAweDYzLCAweDU1LCAweDIxLCAweDBjLCAweDdkKTsKCgkmZGF0YV9ieXRlKDB4NTIsIDB4MDksIDB4NmEsIDB4ZDUsIDB4MzAsIDB4MzYsIDB4YTUsIDB4MzgpOwoJJmRhdGFfYnl0ZSgweGJmLCAweDQwLCAweGEzLCAweDllLCAweDgxLCAweGYzLCAweGQ3LCAweGZiKTsKCSZkYXRhX2J5dGUoMHg3YywgMHhlMywgMHgzOSwgMHg4MiwgMHg5YiwgMHgyZiwgMHhmZiwgMHg4Nyk7CgkmZGF0YV9ieXRlKDB4MzQsIDB4OGUsIDB4NDMsIDB4NDQsIDB4YzQsIDB4ZGUsIDB4ZTksIDB4Y2IpOwoJJmRhdGFfYnl0ZSgweDU0LCAweDdiLCAweDk0LCAweDMyLCAweGE2LCAweGMyLCAweDIzLCAweDNkKTsKCSZkYXRhX2J5dGUoMHhlZSwgMHg0YywgMHg5NSwgMHgwYiwgMHg0MiwgMHhmYSwgMHhjMywgMHg0ZSk7CgkmZGF0YV9ieXRlKDB4MDgsIDB4MmUsIDB4YTEsIDB4NjYsIDB4MjgsIDB4ZDksIDB4MjQsIDB4YjIpOwoJJmRhdGFfYnl0ZSgweDc2LCAweDViLCAweGEyLCAweDQ5LCAweDZkLCAweDhiLCAweGQxLCAweDI1KTsKCSZkYXRhX2J5dGUoMHg3MiwgMHhmOCwgMHhmNiwgMHg2NCwgMHg4NiwgMHg2OCwgMHg5OCwgMHgxNik7CgkmZGF0YV9ieXRlKDB4ZDQsIDB4YTQsIDB4NWMsIDB4Y2MsIDB4NWQsIDB4NjUsIDB4YjYsIDB4OTIpOwoJJmRhdGFfYnl0ZSgweDZjLCAweDcwLCAweDQ4LCAweDUwLCAweGZkLCAweGVkLCAweGI5LCAweGRhKTsKCSZkYXRhX2J5dGUoMHg1ZSwgMHgxNSwgMHg0NiwgMHg1NywgMHhhNywgMHg4ZCwgMHg5ZCwgMHg4NCk7CgkmZGF0YV9ieXRlKDB4OTAsIDB4ZDgsIDB4YWIsIDB4MDAsIDB4OGMsIDB4YmMsIDB4ZDMsIDB4MGEpOwoJJmRhdGFfYnl0ZSgweGY3LCAweGU0LCAweDU4LCAweDA1LCAweGI4LCAweGIzLCAweDQ1LCAweDA2KTsKCSZkYXRhX2J5dGUoMHhkMCwgMHgyYywgMHgxZSwgMHg4ZiwgMHhjYSwgMHgzZiwgMHgwZiwgMHgwMik7CgkmZGF0YV9ieXRlKDB4YzEsIDB4YWYsIDB4YmQsIDB4MDMsIDB4MDEsIDB4MTMsIDB4OGEsIDB4NmIpOwoJJmRhdGFfYnl0ZSgweDNhLCAweDkxLCAweDExLCAweDQxLCAweDRmLCAweDY3LCAweGRjLCAweGVhKTsKCSZkYXRhX2J5dGUoMHg5NywgMHhmMiwgMHhjZiwgMHhjZSwgMHhmMCwgMHhiNCwgMHhlNiwgMHg3Myk7CgkmZGF0YV9ieXRlKDB4OTYsIDB4YWMsIDB4NzQsIDB4MjIsIDB4ZTcsIDB4YWQsIDB4MzUsIDB4ODUpOwoJJmRhdGFfYnl0ZSgweGUyLCAweGY5LCAweDM3LCAweGU4LCAweDFjLCAweDc1LCAweGRmLCAweDZlKTsKCSZkYXRhX2J5dGUoMHg0NywgMHhmMSwgMHgxYSwgMHg3MSwgMHgxZCwgMHgyOSwgMHhjNSwgMHg4OSk7CgkmZGF0YV9ieXRlKDB4NmYsIDB4YjcsIDB4NjIsIDB4MGUsIDB4YWEsIDB4MTgsIDB4YmUsIDB4MWIpOwoJJmRhdGFfYnl0ZSgweGZjLCAweDU2LCAweDNlLCAweDRiLCAweGM2LCAweGQyLCAweDc5LCAweDIwKTsKCSZkYXRhX2J5dGUoMHg5YSwgMHhkYiwgMHhjMCwgMHhmZSwgMHg3OCwgMHhjZCwgMHg1YSwgMHhmNCk7CgkmZGF0YV9ieXRlKDB4MWYsIDB4ZGQsIDB4YTgsIDB4MzMsIDB4ODgsIDB4MDcsIDB4YzcsIDB4MzEpOwoJJmRhdGFfYnl0ZSgweGIxLCAweDEyLCAweDEwLCAweDU5LCAweDI3LCAweDgwLCAweGVjLCAweDVmKTsKCSZkYXRhX2J5dGUoMHg2MCwgMHg1MSwgMHg3ZiwgMHhhOSwgMHgxOSwgMHhiNSwgMHg0YSwgMHgwZCk7CgkmZGF0YV9ieXRlKDB4MmQsIDB4ZTUsIDB4N2EsIDB4OWYsIDB4OTMsIDB4YzksIDB4OWMsIDB4ZWYpOwoJJmRhdGFfYnl0ZSgweGEwLCAweGUwLCAweDNiLCAweDRkLCAweGFlLCAweDJhLCAweGY1LCAweGIwKTsKCSZkYXRhX2J5dGUoMHhjOCwgMHhlYiwgMHhiYiwgMHgzYywgMHg4MywgMHg1MywgMHg5OSwgMHg2MSk7CgkmZGF0YV9ieXRlKDB4MTcsIDB4MmIsIDB4MDQsIDB4N2UsIDB4YmEsIDB4NzcsIDB4ZDYsIDB4MjYpOwoJJmRhdGFfYnl0ZSgweGUxLCAweDY5LCAweDE0LCAweDYzLCAweDU1LCAweDIxLCAweDBjLCAweDdkKTsKJmZ1bmN0aW9uX2VuZF9CKCJfeDg2X0FFU19kZWNyeXB0Iik7CgojIHZvaWQgQUVTX2RlY3J5cHQgKGNvbnN0IHZvaWQgKmlucCx2b2lkICpvdXQsY29uc3QgQUVTX0tFWSAqa2V5KTsKJmZ1bmN0aW9uX2JlZ2luKCJBRVNfZGVjcnlwdCIpOwoJJm1vdgkoJGFjYywmd3BhcmFtKDApKTsJCSMgbG9hZCBpbnAKCSZtb3YJKCRrZXksJndwYXJhbSgyKSk7CQkjIGxvYWQga2V5CgoJJm1vdgkoJHMwLCJlc3AiKTsKCSZzdWIJKCJlc3AiLDM2KTsKCSZhbmQJKCJlc3AiLC02NCk7CQkJIyBhbGlnbiB0byBjYWNoZS1saW5lCgoJIyBwbGFjZSBzdGFjayBmcmFtZSBqdXN0ICJhYm92ZSIgdGhlIGtleSBzY2hlZHVsZQoJJmxlYQkoJHMxLCZEV1AoLTY0LTYzLCRrZXkpKTsKCSZzdWIJKCRzMSwiZXNwIik7CgkmbmVnCSgkczEpOwoJJmFuZAkoJHMxLDB4M0MwKTsJIyBtb2R1bG8gMTAyNCwgYnV0IGFsaWduZWQgdG8gY2FjaGUtbGluZQoJJnN1YgkoImVzcCIsJHMxKTsKCSZhZGQJKCJlc3AiLDQpOwkjIDQgaXMgcmVzZXJ2ZWQgZm9yIGNhbGxlcidzIHJldHVybiBhZGRyZXNzCgkmbW92CSgkX2VzcCwkczApOwkjIHNhdmUgc3RhY2sgcG9pbnRlcgoKCSZjYWxsICAgKCZsYWJlbCgicGljX3BvaW50IikpOyAgICAgICAgICAjIG1ha2UgaXQgUElDIQoJJnNldF9sYWJlbCgicGljX3BvaW50Iik7CgkmYmxpbmRwb3AoJHRibCk7CgkmcGljbWV1cCgkczAsIk9QRU5TU0xfaWEzMmNhcF9QIiwkdGJsLCZsYWJlbCgicGljX3BvaW50IikpIGlmKCEkeDg2b25seSk7CgkmbGVhICAgICgkdGJsLCZEV1AoJmxhYmVsKCJBRVNfVGQiKS4iLSIuJmxhYmVsKCJwaWNfcG9pbnQiKSwkdGJsKSk7CgoJIyBwaWNrIFRkNCBjb3B5IHdoaWNoIGNhbid0ICJvdmVybGFwIiB3aXRoIHN0YWNrIGZyYW1lIG9yIGtleSBzY2hlZHVsZQoJJmxlYQkoJHMxLCZEV1AoNzY4LTQsImVzcCIpKTsKCSZzdWIJKCRzMSwkdGJsKTsKCSZhbmQJKCRzMSwweDMwMCk7CgkmbGVhCSgkdGJsLCZEV1AoMjA0OCsxMjgsJHRibCwkczEpKTsKCgkJCQkJaWYgKCEkeDg2b25seSkgewoJJmJ0CSgmRFdQKDAsJHMwKSwyNSk7CSMgY2hlY2sgZm9yIFNTRSBiaXQKCSZqbmMJKCZsYWJlbCgieDg2IikpOwoKCSZtb3ZxCSgibW0wIiwmUVdQKDAsJGFjYykpOwoJJm1vdnEJKCJtbTQiLCZRV1AoOCwkYWNjKSk7CgkmY2FsbAkoIl9zc2VfQUVTX2RlY3J5cHRfY29tcGFjdCIpOwoJJm1vdgkoImVzcCIsJF9lc3ApOwkJCSMgcmVzdG9yZSBzdGFjayBwb2ludGVyCgkmbW92CSgkYWNjLCZ3cGFyYW0oMSkpOwkJIyBsb2FkIG91dAoJJm1vdnEJKCZRV1AoMCwkYWNjKSwibW0wIik7CQkjIHdyaXRlIG91dHB1dCBkYXRhCgkmbW92cQkoJlFXUCg4LCRhY2MpLCJtbTQiKTsKCSZlbW1zCSgpOwoJJmZ1bmN0aW9uX2VuZF9BKCk7CgkJCQkJfQoJJnNldF9sYWJlbCgieDg2IiwxNik7CgkmbW92CSgkX3RibCwkdGJsKTsKCSZtb3YJKCRzMCwmRFdQKDAsJGFjYykpOwkJIyBsb2FkIGlucHV0IGRhdGEKCSZtb3YJKCRzMSwmRFdQKDQsJGFjYykpOwoJJm1vdgkoJHMyLCZEV1AoOCwkYWNjKSk7CgkmbW92CSgkczMsJkRXUCgxMiwkYWNjKSk7CgkmY2FsbAkoIl94ODZfQUVTX2RlY3J5cHRfY29tcGFjdCIpOwoJJm1vdgkoImVzcCIsJF9lc3ApOwkJCSMgcmVzdG9yZSBzdGFjayBwb2ludGVyCgkmbW92CSgkYWNjLCZ3cGFyYW0oMSkpOwkJIyBsb2FkIG91dAoJJm1vdgkoJkRXUCgwLCRhY2MpLCRzMCk7CQkjIHdyaXRlIG91dHB1dCBkYXRhCgkmbW92CSgmRFdQKDQsJGFjYyksJHMxKTsKCSZtb3YJKCZEV1AoOCwkYWNjKSwkczIpOwoJJm1vdgkoJkRXUCgxMiwkYWNjKSwkczMpOwomZnVuY3Rpb25fZW5kKCJBRVNfZGVjcnlwdCIpOwoKIyB2b2lkIEFFU19jYmNfZW5jcnlwdCAoY29uc3Qgdm9pZCBjaGFyICppbnAsIHVuc2lnbmVkIGNoYXIgKm91dCwKIwkJCXNpemVfdCBsZW5ndGgsIGNvbnN0IEFFU19LRVkgKmtleSwKIwkJCXVuc2lnbmVkIGNoYXIgKml2cCxjb25zdCBpbnQgZW5jKTsKewojIHN0YWNrIGZyYW1lIGxheW91dAojICAgICAgICAgICAgIC00KCVlc3ApCQkjIHJldHVybiBhZGRyZXNzCSAwKCVlc3ApCiMgICAgICAgICAgICAgIDAoJWVzcCkJCSMgczAgYmFja2luZyBzdG9yZQkgNCglZXNwKQkKIyAgICAgICAgICAgICAgNCglZXNwKQkJIyBzMSBiYWNraW5nIHN0b3JlCSA4KCVlc3ApCiMgICAgICAgICAgICAgIDgoJWVzcCkJCSMgczIgYmFja2luZyBzdG9yZQkxMiglZXNwKQojICAgICAgICAgICAgIDEyKCVlc3ApCQkjIHMzIGJhY2tpbmcgc3RvcmUJMTYoJWVzcCkKIyAgICAgICAgICAgICAxNiglZXNwKQkJIyBrZXkgYmFja3VwCQkyMCglZXNwKQojICAgICAgICAgICAgIDIwKCVlc3ApCQkjIGVuZCBvZiBrZXkgc2NoZWR1bGUJMjQoJWVzcCkKIyAgICAgICAgICAgICAyNCglZXNwKQkJIyAlZWJwIGJhY2t1cAkJMjgoJWVzcCkKIyAgICAgICAgICAgICAyOCglZXNwKQkJIyAlZXNwIGJhY2t1cApteSAkX2lucD0mRFdQKDMyLCJlc3AiKTsJIyBjb3B5IG9mIHdwYXJhbSgwKQpteSAkX291dD0mRFdQKDM2LCJlc3AiKTsJIyBjb3B5IG9mIHdwYXJhbSgxKQpteSAkX2xlbj0mRFdQKDQwLCJlc3AiKTsJIyBjb3B5IG9mIHdwYXJhbSgyKQpteSAkX2tleT0mRFdQKDQ0LCJlc3AiKTsJIyBjb3B5IG9mIHdwYXJhbSgzKQpteSAkX2l2cD0mRFdQKDQ4LCJlc3AiKTsJIyBjb3B5IG9mIHdwYXJhbSg0KQpteSAkX3RtcD0mRFdQKDUyLCJlc3AiKTsJIyB2b2xhdGlsZSB2YXJpYWJsZQojCm15ICRpdmVjPSZEV1AoNjAsImVzcCIpOwkjIGl2ZWNbMTZdCm15ICRhZXNfa2V5PSZEV1AoNzYsImVzcCIpOwkjIGNvcHkgb2YgYWVzX2tleQpteSAkbWFyaz0mRFdQKDc2KzI0MCwiZXNwIik7CSMgY29weSBvZiBhZXNfa2V5LT5yb3VuZHMKCiZmdW5jdGlvbl9iZWdpbigiQUVTX2NiY19lbmNyeXB0Iik7CgkmbW92CSgkczIgZXEgImVjeCI/ICRzMiA6ICIiLCZ3cGFyYW0oMikpOwkjIGxvYWQgbGVuCgkmY21wCSgkczIsMCk7CgkmamUJKCZsYWJlbCgiZHJvcF9vdXQiKSk7CgoJJmNhbGwgICAoJmxhYmVsKCJwaWNfcG9pbnQiKSk7CQkjIG1ha2UgaXQgUElDIQoJJnNldF9sYWJlbCgicGljX3BvaW50Iik7CgkmYmxpbmRwb3AoJHRibCk7CgkmcGljbWV1cCgkczAsIk9QRU5TU0xfaWEzMmNhcF9QIiwkdGJsLCZsYWJlbCgicGljX3BvaW50IikpIGlmKCEkeDg2b25seSk7CgoJJmNtcAkoJndwYXJhbSg1KSwwKTsKCSZsZWEgICAgKCR0YmwsJkRXUCgmbGFiZWwoIkFFU19UZSIpLiItIi4mbGFiZWwoInBpY19wb2ludCIpLCR0YmwpKTsKCSZqbmUJKCZsYWJlbCgicGlja2VkX3RlIikpOwoJJmxlYQkoJHRibCwmRFdQKCZsYWJlbCgiQUVTX1RkIikuIi0iLiZsYWJlbCgiQUVTX1RlIiksJHRibCkpOwoJJnNldF9sYWJlbCgicGlja2VkX3RlIik7CgoJIyBvbmUgY2FuIGFyZ3VlIGlmIHRoaXMgaXMgcmVxdWlyZWQKCSZwdXNoZgkoKTsKCSZjbGQJKCk7CgoJJmNtcAkoJHMyLCRzcGVlZF9saW1pdCk7CgkmamIJKCZsYWJlbCgic2xvd193YXkiKSk7CgkmdGVzdAkoJHMyLDE1KTsKCSZqbnoJKCZsYWJlbCgic2xvd193YXkiKSk7CgkJCQkJaWYgKCEkeDg2b25seSkgewoJJmJ0CSgmRFdQKDAsJHMwKSwyOCk7CSMgY2hlY2sgZm9yIGh5cGVyLXRocmVhZGluZyBiaXQKCSZqYwkoJmxhYmVsKCJzbG93X3dheSIpKTsKCQkJCQl9CgkjIHByZS1hbGxvY2F0ZSBhbGlnbmVkIHN0YWNrIGZyYW1lLi4uCgkmbGVhCSgkYWNjLCZEV1AoLTgwLTI0NCwiZXNwIikpOwoJJmFuZAkoJGFjYywtNjQpOwoKCSMgLi4uIGFuZCBtYWtlIHN1cmUgaXQgZG9lc24ndCBhbGlhcyB3aXRoICR0YmwgbW9kdWxvIDQwOTYKCSZtb3YJKCRzMCwkdGJsKTsKCSZsZWEJKCRzMSwmRFdQKDIwNDgrMjU2LCR0YmwpKTsKCSZtb3YJKCRzMywkYWNjKTsKCSZhbmQJKCRzMCwweGZmZik7CQkjIHMgPSAlZWJwJjB4ZmZmCgkmYW5kCSgkczEsMHhmZmYpOwkJIyBlID0gKCVlYnArMjA0OCsyNTYpJjB4ZmZmCgkmYW5kCSgkczMsMHhmZmYpOwkJIyBwID0gJWVzcCYweGZmZgoKCSZjbXAJKCRzMywkczEpOwkJIyBpZiAocD49ZSkgJWVzcCA9LSAocC1lKTsKCSZqYgkoJmxhYmVsKCJ0YmxfYnJlYWtfb3V0IikpOwoJJnN1YgkoJHMzLCRzMSk7Cgkmc3ViCSgkYWNjLCRzMyk7Cgkmam1wCSgmbGFiZWwoInRibF9vayIpKTsKCSZzZXRfbGFiZWwoInRibF9icmVha19vdXQiLDQpOwkjIGVsc2UgJWVzcCAtPSAocC1zKSYweGZmZiArIGZyYW1lc3o7Cgkmc3ViCSgkczMsJHMwKTsKCSZhbmQJKCRzMywweGZmZik7CgkmYWRkCSgkczMsMzg0KTsKCSZzdWIJKCRhY2MsJHMzKTsKCSZzZXRfbGFiZWwoInRibF9vayIsNCk7CgoJJmxlYQkoJHMzLCZ3cGFyYW0oMCkpOwkjIG9idGFpbiBwb2ludGVyIHRvIHBhcmFtZXRlciBibG9jawoJJmV4Y2gJKCJlc3AiLCRhY2MpOwkJIyBhbGxvY2F0ZSBzdGFjayBmcmFtZQoJJmFkZAkoImVzcCIsNCk7CQkjIHJlc2VydmUgZm9yIHJldHVybiBhZGRyZXNzIQoJJm1vdgkoJF90YmwsJHRibCk7CQkjIHNhdmUgJWVicAoJJm1vdgkoJF9lc3AsJGFjYyk7CQkjIHNhdmUgJWVzcAoKCSZtb3YJKCRzMCwmRFdQKDAsJHMzKSk7CSMgbG9hZCBpbnAKCSZtb3YJKCRzMSwmRFdQKDQsJHMzKSk7CSMgbG9hZCBvdXQKCSMmbW92CSgkczIsJkRXUCg4LCRzMykpOwkjIGxvYWQgbGVuCgkmbW92CSgka2V5LCZEV1AoMTIsJHMzKSk7CSMgbG9hZCBrZXkKCSZtb3YJKCRhY2MsJkRXUCgxNiwkczMpKTsJIyBsb2FkIGl2cAoJJm1vdgkoJHMzLCZEV1AoMjAsJHMzKSk7CSMgbG9hZCBlbmMgZmxhZwoKCSZtb3YJKCRfaW5wLCRzMCk7CQkjIHNhdmUgY29weSBvZiBpbnAKCSZtb3YJKCRfb3V0LCRzMSk7CQkjIHNhdmUgY29weSBvZiBvdXQKCSZtb3YJKCRfbGVuLCRzMik7CQkjIHNhdmUgY29weSBvZiBsZW4KCSZtb3YJKCRfa2V5LCRrZXkpOwkJIyBzYXZlIGNvcHkgb2Yga2V5CgkmbW92CSgkX2l2cCwkYWNjKTsJCSMgc2F2ZSBjb3B5IG9mIGl2cAoKCSZtb3YJKCRtYXJrLDApOwkJIyBjb3B5IG9mIGFlc19rZXktPnJvdW5kcyA9IDA7CgkjIGRvIHdlIGNvcHkga2V5IHNjaGVkdWxlIHRvIHN0YWNrPwoJJm1vdgkoJHMxIGVxICJlYngiID8gJHMxIDogIiIsJGtleSk7CgkmbW92CSgkczIgZXEgImVjeCIgPyAkczIgOiAiIiwyNDQvNCk7Cgkmc3ViCSgkczEsJHRibCk7CgkmbW92CSgiZXNpIiwka2V5KTsKCSZhbmQJKCRzMSwweGZmZik7CgkmbGVhCSgiZWRpIiwkYWVzX2tleSk7CgkmY21wCSgkczEsMjA0OCsyNTYpOwoJJmpiCSgmbGFiZWwoImRvX2NvcHkiKSk7CgkmY21wCSgkczEsNDA5Ni0yNDQpOwoJJmpiCSgmbGFiZWwoInNraXBfY29weSIpKTsKCSZzZXRfbGFiZWwoImRvX2NvcHkiLDQpOwoJCSZtb3YJKCRfa2V5LCJlZGkiKTsKCQkmZGF0YV93b3JkKDB4QTVGM0Y2ODkpOwkjIHJlcCBtb3ZzZAoJJnNldF9sYWJlbCgic2tpcF9jb3B5Iik7CgoJJm1vdgkoJGtleSwxNik7Cgkmc2V0X2xhYmVsKCJwcmVmZXRjaF90YmwiLDQpOwoJCSZtb3YJKCRzMCwmRFdQKDAsJHRibCkpOwoJCSZtb3YJKCRzMSwmRFdQKDMyLCR0YmwpKTsKCQkmbW92CSgkczIsJkRXUCg2NCwkdGJsKSk7CgkJJm1vdgkoJGFjYywmRFdQKDk2LCR0YmwpKTsKCQkmbGVhCSgkdGJsLCZEV1AoMTI4LCR0YmwpKTsKCQkmc3ViCSgka2V5LDEpOwoJJmpuegkoJmxhYmVsKCJwcmVmZXRjaF90YmwiKSk7Cgkmc3ViCSgkdGJsLDIwNDgpOwoKCSZtb3YJKCRhY2MsJF9pbnApOwoJJm1vdgkoJGtleSwkX2l2cCk7CgoJJmNtcAkoJHMzLDApOwoJJmplCSgmbGFiZWwoImZhc3RfZGVjcnlwdCIpKTsKCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFTkNSWVBUIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIwoJJm1vdgkoJHMwLCZEV1AoMCwka2V5KSk7CQkjIGxvYWQgaXYKCSZtb3YJKCRzMSwmRFdQKDQsJGtleSkpOwoKCSZzZXRfbGFiZWwoImZhc3RfZW5jX2xvb3AiLDE2KTsKCQkmbW92CSgkczIsJkRXUCg4LCRrZXkpKTsKCQkmbW92CSgkczMsJkRXUCgxMiwka2V5KSk7CgoJCSZ4b3IJKCRzMCwmRFdQKDAsJGFjYykpOwkjIHhvciBpbnB1dCBkYXRhCgkJJnhvcgkoJHMxLCZEV1AoNCwkYWNjKSk7CgkJJnhvcgkoJHMyLCZEV1AoOCwkYWNjKSk7CgkJJnhvcgkoJHMzLCZEV1AoMTIsJGFjYykpOwoKCQkmbW92CSgka2V5LCRfa2V5KTsJCSMgbG9hZCBrZXkKCQkmY2FsbAkoIl94ODZfQUVTX2VuY3J5cHQiKTsKCgkJJm1vdgkoJGFjYywkX2lucCk7CQkjIGxvYWQgaW5wCgkJJm1vdgkoJGtleSwkX291dCk7CQkjIGxvYWQgb3V0CgoJCSZtb3YJKCZEV1AoMCwka2V5KSwkczApOwkjIHNhdmUgb3V0cHV0IGRhdGEKCQkmbW92CSgmRFdQKDQsJGtleSksJHMxKTsKCQkmbW92CSgmRFdQKDgsJGtleSksJHMyKTsKCQkmbW92CSgmRFdQKDEyLCRrZXkpLCRzMyk7CgoJCSZsZWEJKCRhY2MsJkRXUCgxNiwkYWNjKSk7CSMgYWR2YW5jZSBpbnAKCQkmbW92CSgkczIsJF9sZW4pOwkJIyBsb2FkIGxlbgoJCSZtb3YJKCRfaW5wLCRhY2MpOwkJIyBzYXZlIGlucAoJCSZsZWEJKCRzMywmRFdQKDE2LCRrZXkpKTsJIyBhZHZhbmNlIG91dAoJCSZtb3YJKCRfb3V0LCRzMyk7CQkjIHNhdmUgb3V0CgkJJnN1YgkoJHMyLDE2KTsJCSMgZGVjcmVhc2UgbGVuCgkJJm1vdgkoJF9sZW4sJHMyKTsJCSMgc2F2ZSBsZW4KCSZqbnoJKCZsYWJlbCgiZmFzdF9lbmNfbG9vcCIpKTsKCSZtb3YJKCRhY2MsJF9pdnApOwkJIyBsb2FkIGl2cAoJJm1vdgkoJHMyLCZEV1AoOCwka2V5KSk7CSMgcmVzdG9yZSBsYXN0IDIgZHdvcmRzCgkmbW92CSgkczMsJkRXUCgxMiwka2V5KSk7CgkmbW92CSgmRFdQKDAsJGFjYyksJHMwKTsJIyBzYXZlIGl2ZWMKCSZtb3YJKCZEV1AoNCwkYWNjKSwkczEpOwoJJm1vdgkoJkRXUCg4LCRhY2MpLCRzMik7CgkmbW92CSgmRFdQKDEyLCRhY2MpLCRzMyk7CgoJJmNtcAkoJG1hcmssMCk7CQkjIHdhcyB0aGUga2V5IHNjaGVkdWxlIGNvcGllZD8KCSZtb3YJKCJlZGkiLCRfa2V5KTsKCSZqZQkoJmxhYmVsKCJza2lwX2V6ZXJvIikpOwoJIyB6ZXJvIGNvcHkgb2Yga2V5IHNjaGVkdWxlCgkmbW92CSgiZWN4IiwyNDAvNCk7CgkmeG9yCSgiZWF4IiwiZWF4Iik7CgkmYWxpZ24JKDQpOwoJJmRhdGFfd29yZCgweEFCRjNGNjg5KTsJIyByZXAgc3Rvc2QKCSZzZXRfbGFiZWwoInNraXBfZXplcm8iKQoJJm1vdgkoImVzcCIsJF9lc3ApOwoJJnBvcGYJKCk7CiAgICAmc2V0X2xhYmVsKCJkcm9wX291dCIpOwoJJmZ1bmN0aW9uX2VuZF9BKCk7CgkmcHVzaGYJKCk7CQkJIyBrbHVkZ2UsIG5ldmVyIGV4ZWN1dGVkCgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gREVDUllQVCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKJnNldF9sYWJlbCgiZmFzdF9kZWNyeXB0IiwxNik7CgoJJmNtcAkoJGFjYywkX291dCk7CgkmamUJKCZsYWJlbCgiZmFzdF9kZWNfaW5fcGxhY2UiKSk7CSMgaW4tcGxhY2UgcHJvY2Vzc2luZy4uLgoKCSZtb3YJKCRfdG1wLCRrZXkpOwoKCSZhbGlnbgkoNCk7Cgkmc2V0X2xhYmVsKCJmYXN0X2RlY19sb29wIiwxNik7CgkJJm1vdgkoJHMwLCZEV1AoMCwkYWNjKSk7CSMgcmVhZCBpbnB1dAoJCSZtb3YJKCRzMSwmRFdQKDQsJGFjYykpOwoJCSZtb3YJKCRzMiwmRFdQKDgsJGFjYykpOwoJCSZtb3YJKCRzMywmRFdQKDEyLCRhY2MpKTsKCgkJJm1vdgkoJGtleSwkX2tleSk7CQkjIGxvYWQga2V5CgkJJmNhbGwJKCJfeDg2X0FFU19kZWNyeXB0Iik7CgoJCSZtb3YJKCRrZXksJF90bXApOwkJIyBsb2FkIGl2cAoJCSZtb3YJKCRhY2MsJF9sZW4pOwkJIyBsb2FkIGxlbgoJCSZ4b3IJKCRzMCwmRFdQKDAsJGtleSkpOwkjIHhvciBpdgoJCSZ4b3IJKCRzMSwmRFdQKDQsJGtleSkpOwoJCSZ4b3IJKCRzMiwmRFdQKDgsJGtleSkpOwoJCSZ4b3IJKCRzMywmRFdQKDEyLCRrZXkpKTsKCgkJJm1vdgkoJGtleSwkX291dCk7CQkjIGxvYWQgb3V0CgkJJm1vdgkoJGFjYywkX2lucCk7CQkjIGxvYWQgaW5wCgoJCSZtb3YJKCZEV1AoMCwka2V5KSwkczApOwkjIHdyaXRlIG91dHB1dAoJCSZtb3YJKCZEV1AoNCwka2V5KSwkczEpOwoJCSZtb3YJKCZEV1AoOCwka2V5KSwkczIpOwoJCSZtb3YJKCZEV1AoMTIsJGtleSksJHMzKTsKCgkJJm1vdgkoJHMyLCRfbGVuKTsJCSMgbG9hZCBsZW4KCQkmbW92CSgkX3RtcCwkYWNjKTsJCSMgc2F2ZSBpdnAKCQkmbGVhCSgkYWNjLCZEV1AoMTYsJGFjYykpOwkjIGFkdmFuY2UgaW5wCgkJJm1vdgkoJF9pbnAsJGFjYyk7CQkjIHNhdmUgaW5wCgkJJmxlYQkoJGtleSwmRFdQKDE2LCRrZXkpKTsJIyBhZHZhbmNlIG91dAoJCSZtb3YJKCRfb3V0LCRrZXkpOwkJIyBzYXZlIG91dAoJCSZzdWIJKCRzMiwxNik7CQkjIGRlY3JlYXNlIGxlbgoJCSZtb3YJKCRfbGVuLCRzMik7CQkjIHNhdmUgbGVuCgkmam56CSgmbGFiZWwoImZhc3RfZGVjX2xvb3AiKSk7CgkmbW92CSgka2V5LCRfdG1wKTsJCSMgbG9hZCB0ZW1wIGl2cAoJJm1vdgkoJGFjYywkX2l2cCk7CQkjIGxvYWQgdXNlciBpdnAKCSZtb3YJKCRzMCwmRFdQKDAsJGtleSkpOwkjIGxvYWQgaXYKCSZtb3YJKCRzMSwmRFdQKDQsJGtleSkpOwoJJm1vdgkoJHMyLCZEV1AoOCwka2V5KSk7CgkmbW92CSgkczMsJkRXUCgxMiwka2V5KSk7CgkmbW92CSgmRFdQKDAsJGFjYyksJHMwKTsJIyBjb3B5IGJhY2sgdG8gdXNlcgoJJm1vdgkoJkRXUCg0LCRhY2MpLCRzMSk7CgkmbW92CSgmRFdQKDgsJGFjYyksJHMyKTsKCSZtb3YJKCZEV1AoMTIsJGFjYyksJHMzKTsKCSZqbXAJKCZsYWJlbCgiZmFzdF9kZWNfb3V0IikpOwoKICAgICZzZXRfbGFiZWwoImZhc3RfZGVjX2luX3BsYWNlIiwxNik7Cgkmc2V0X2xhYmVsKCJmYXN0X2RlY19pbl9wbGFjZV9sb29wIik7CgkJJm1vdgkoJHMwLCZEV1AoMCwkYWNjKSk7CSMgcmVhZCBpbnB1dAoJCSZtb3YJKCRzMSwmRFdQKDQsJGFjYykpOwoJCSZtb3YJKCRzMiwmRFdQKDgsJGFjYykpOwoJCSZtb3YJKCRzMywmRFdQKDEyLCRhY2MpKTsKCgkJJmxlYQkoJGtleSwkaXZlYyk7CgkJJm1vdgkoJkRXUCgwLCRrZXkpLCRzMCk7CSMgY29weSB0byB0ZW1wCgkJJm1vdgkoJkRXUCg0LCRrZXkpLCRzMSk7CgkJJm1vdgkoJkRXUCg4LCRrZXkpLCRzMik7CgkJJm1vdgkoJkRXUCgxMiwka2V5KSwkczMpOwoKCQkmbW92CSgka2V5LCRfa2V5KTsJCSMgbG9hZCBrZXkKCQkmY2FsbAkoIl94ODZfQUVTX2RlY3J5cHQiKTsKCgkJJm1vdgkoJGtleSwkX2l2cCk7CQkjIGxvYWQgaXZwCgkJJm1vdgkoJGFjYywkX291dCk7CQkjIGxvYWQgb3V0CgkJJnhvcgkoJHMwLCZEV1AoMCwka2V5KSk7CSMgeG9yIGl2CgkJJnhvcgkoJHMxLCZEV1AoNCwka2V5KSk7CgkJJnhvcgkoJHMyLCZEV1AoOCwka2V5KSk7CgkJJnhvcgkoJHMzLCZEV1AoMTIsJGtleSkpOwoKCQkmbW92CSgmRFdQKDAsJGFjYyksJHMwKTsJIyB3cml0ZSBvdXRwdXQKCQkmbW92CSgmRFdQKDQsJGFjYyksJHMxKTsKCQkmbW92CSgmRFdQKDgsJGFjYyksJHMyKTsKCQkmbW92CSgmRFdQKDEyLCRhY2MpLCRzMyk7CgoJCSZsZWEJKCRhY2MsJkRXUCgxNiwkYWNjKSk7CSMgYWR2YW5jZSBvdXQKCQkmbW92CSgkX291dCwkYWNjKTsJCSMgc2F2ZSBvdXQKCgkJJmxlYQkoJGFjYywkaXZlYyk7CgkJJm1vdgkoJHMwLCZEV1AoMCwkYWNjKSk7CSMgcmVhZCB0ZW1wCgkJJm1vdgkoJHMxLCZEV1AoNCwkYWNjKSk7CgkJJm1vdgkoJHMyLCZEV1AoOCwkYWNjKSk7CgkJJm1vdgkoJHMzLCZEV1AoMTIsJGFjYykpOwoKCQkmbW92CSgmRFdQKDAsJGtleSksJHMwKTsJIyBjb3B5IGl2CgkJJm1vdgkoJkRXUCg0LCRrZXkpLCRzMSk7CgkJJm1vdgkoJkRXUCg4LCRrZXkpLCRzMik7CgkJJm1vdgkoJkRXUCgxMiwka2V5KSwkczMpOwoKCQkmbW92CSgkYWNjLCRfaW5wKTsJCSMgbG9hZCBpbnAKCQkmbW92CSgkczIsJF9sZW4pOwkJIyBsb2FkIGxlbgoJCSZsZWEJKCRhY2MsJkRXUCgxNiwkYWNjKSk7CSMgYWR2YW5jZSBpbnAKCQkmbW92CSgkX2lucCwkYWNjKTsJCSMgc2F2ZSBpbnAKCQkmc3ViCSgkczIsMTYpOwkJIyBkZWNyZWFzZSBsZW4KCQkmbW92CSgkX2xlbiwkczIpOwkJIyBzYXZlIGxlbgoJJmpuegkoJmxhYmVsKCJmYXN0X2RlY19pbl9wbGFjZV9sb29wIikpOwoKICAgICZzZXRfbGFiZWwoImZhc3RfZGVjX291dCIsNCk7CgkmY21wCSgkbWFyaywwKTsJCSMgd2FzIHRoZSBrZXkgc2NoZWR1bGUgY29waWVkPwoJJm1vdgkoImVkaSIsJF9rZXkpOwoJJmplCSgmbGFiZWwoInNraXBfZHplcm8iKSk7CgkjIHplcm8gY29weSBvZiBrZXkgc2NoZWR1bGUKCSZtb3YJKCJlY3giLDI0MC80KTsKCSZ4b3IJKCJlYXgiLCJlYXgiKTsKCSZhbGlnbgkoNCk7CgkmZGF0YV93b3JkKDB4QUJGM0Y2ODkpOwkjIHJlcCBzdG9zZAoJJnNldF9sYWJlbCgic2tpcF9kemVybyIpCgkmbW92CSgiZXNwIiwkX2VzcCk7CgkmcG9wZgkoKTsKCSZmdW5jdGlvbl9lbmRfQSgpOwoJJnB1c2hmCSgpOwkJCSMga2x1ZGdlLCBuZXZlciBleGVjdXRlZAoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTTE9XIFJPVVRJTkUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIwomc2V0X2xhYmVsKCJzbG93X3dheSIsMTYpOwoKCSZtb3YJKCRzMCwmRFdQKDAsJHMwKSkgaWYgKCEkeDg2b25seSk7IyBsb2FkIE9QRU5TU0xfaWEzMmNhcAoJJm1vdgkoJGtleSwmd3BhcmFtKDMpKTsJIyBsb2FkIGtleQoKCSMgcHJlLWFsbG9jYXRlIGFsaWduZWQgc3RhY2sgZnJhbWUuLi4KCSZsZWEJKCRhY2MsJkRXUCgtODAsImVzcCIpKTsKCSZhbmQJKCRhY2MsLTY0KTsKCgkjIC4uLiBhbmQgbWFrZSBzdXJlIGl0IGRvZXNuJ3QgYWxpYXMgd2l0aCAka2V5IG1vZHVsbyAxMDI0CgkmbGVhCSgkczEsJkRXUCgtODAtNjMsJGtleSkpOwoJJnN1YgkoJHMxLCRhY2MpOwoJJm5lZwkoJHMxKTsKCSZhbmQJKCRzMSwweDNDMCk7CSMgbW9kdWxvIDEwMjQsIGJ1dCBhbGlnbmVkIHRvIGNhY2hlLWxpbmUKCSZzdWIJKCRhY2MsJHMxKTsKCgkjIHBpY2sgUy1ib3ggY29weSB3aGljaCBjYW4ndCBvdmVybGFwIHdpdGggc3RhY2sgZnJhbWUgb3IgJGtleQoJJmxlYQkoJHMxLCZEV1AoNzY4LCRhY2MpKTsKCSZzdWIJKCRzMSwkdGJsKTsKCSZhbmQJKCRzMSwweDMwMCk7CgkmbGVhCSgkdGJsLCZEV1AoMjA0OCsxMjgsJHRibCwkczEpKTsKCgkmbGVhCSgkczMsJndwYXJhbSgwKSk7CSMgcG9pbnRlciB0byBwYXJhbWV0ZXIgYmxvY2sKCgkmZXhjaAkoImVzcCIsJGFjYyk7CgkmYWRkCSgiZXNwIiw0KTsJCSMgcmVzZXJ2ZSBmb3IgcmV0dXJuIGFkZHJlc3MhCgkmbW92CSgkX3RibCwkdGJsKTsJCSMgc2F2ZSAlZWJwCgkmbW92CSgkX2VzcCwkYWNjKTsJCSMgc2F2ZSAlZXNwCgkmbW92CSgkX3RtcCwkczApOwkJIyBzYXZlIE9QRU5TU0xfaWEzMmNhcAoKCSZtb3YJKCRzMCwmRFdQKDAsJHMzKSk7CSMgbG9hZCBpbnAKCSZtb3YJKCRzMSwmRFdQKDQsJHMzKSk7CSMgbG9hZCBvdXQKCSMmbW92CSgkczIsJkRXUCg4LCRzMykpOwkjIGxvYWQgbGVuCgkjJm1vdgkoJGtleSwmRFdQKDEyLCRzMykpOwkjIGxvYWQga2V5CgkmbW92CSgkYWNjLCZEV1AoMTYsJHMzKSk7CSMgbG9hZCBpdnAKCSZtb3YJKCRzMywmRFdQKDIwLCRzMykpOwkjIGxvYWQgZW5jIGZsYWcKCgkmbW92CSgkX2lucCwkczApOwkJIyBzYXZlIGNvcHkgb2YgaW5wCgkmbW92CSgkX291dCwkczEpOwkJIyBzYXZlIGNvcHkgb2Ygb3V0CgkmbW92CSgkX2xlbiwkczIpOwkJIyBzYXZlIGNvcHkgb2YgbGVuCgkmbW92CSgkX2tleSwka2V5KTsJCSMgc2F2ZSBjb3B5IG9mIGtleQoJJm1vdgkoJF9pdnAsJGFjYyk7CQkjIHNhdmUgY29weSBvZiBpdnAKCgkmbW92CSgka2V5LCRhY2MpOwoJJm1vdgkoJGFjYywkczApOwoKCSZjbXAJKCRzMywwKTsKCSZqZQkoJmxhYmVsKCJzbG93X2RlY3J5cHQiKSk7CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFNMT1cgRU5DUllQVCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCgkmY21wCSgkczIsMTYpOwoJJm1vdgkoJHMzLCRzMSk7CgkmamIJKCZsYWJlbCgic2xvd19lbmNfdGFpbCIpKTsKCgkJCQkJaWYgKCEkeDg2b25seSkgewoJJmJ0CSgkX3RtcCwyNSk7CQkjIGNoZWNrIGZvciBTU0UgYml0Cgkmam5jCSgmbGFiZWwoInNsb3dfZW5jX3g4NiIpKTsKCgkmbW92cQkoIm1tMCIsJlFXUCgwLCRrZXkpKTsJIyBsb2FkIGl2CgkmbW92cQkoIm1tNCIsJlFXUCg4LCRrZXkpKTsKCgkmc2V0X2xhYmVsKCJzbG93X2VuY19sb29wX3NzZSIsMTYpOwoJCSZweG9yCSgibW0wIiwmUVdQKDAsJGFjYykpOwkjIHhvciBpbnB1dCBkYXRhCgkJJnB4b3IJKCJtbTQiLCZRV1AoOCwkYWNjKSk7CgoJCSZtb3YJKCRrZXksJF9rZXkpOwoJCSZjYWxsCSgiX3NzZV9BRVNfZW5jcnlwdF9jb21wYWN0Iik7CgoJCSZtb3YJKCRhY2MsJF9pbnApOwkJIyBsb2FkIGlucAoJCSZtb3YJKCRrZXksJF9vdXQpOwkJIyBsb2FkIG91dAoJCSZtb3YJKCRzMiwkX2xlbik7CQkjIGxvYWQgbGVuCgoJCSZtb3ZxCSgmUVdQKDAsJGtleSksIm1tMCIpOwkjIHNhdmUgb3V0cHV0IGRhdGEKCQkmbW92cQkoJlFXUCg4LCRrZXkpLCJtbTQiKTsKCgkJJmxlYQkoJGFjYywmRFdQKDE2LCRhY2MpKTsJIyBhZHZhbmNlIGlucAoJCSZtb3YJKCRfaW5wLCRhY2MpOwkJIyBzYXZlIGlucAoJCSZsZWEJKCRzMywmRFdQKDE2LCRrZXkpKTsJIyBhZHZhbmNlIG91dAoJCSZtb3YJKCRfb3V0LCRzMyk7CQkjIHNhdmUgb3V0CgkJJnN1YgkoJHMyLDE2KTsJCSMgZGVjcmVhc2UgbGVuCgkJJmNtcAkoJHMyLDE2KTsKCQkmbW92CSgkX2xlbiwkczIpOwkJIyBzYXZlIGxlbgoJJmphZQkoJmxhYmVsKCJzbG93X2VuY19sb29wX3NzZSIpKTsKCSZ0ZXN0CSgkczIsMTUpOwoJJmpuegkoJmxhYmVsKCJzbG93X2VuY190YWlsIikpOwoJJm1vdgkoJGFjYywkX2l2cCk7CQkjIGxvYWQgaXZwCgkmbW92cQkoJlFXUCgwLCRhY2MpLCJtbTAiKTsJIyBzYXZlIGl2ZWMKCSZtb3ZxCSgmUVdQKDgsJGFjYyksIm1tNCIpOwoJJmVtbXMJKCk7CgkmbW92CSgiZXNwIiwkX2VzcCk7CgkmcG9wZgkoKTsKCSZmdW5jdGlvbl9lbmRfQSgpOwoJJnB1c2hmCSgpOwkJCSMga2x1ZGdlLCBuZXZlciBleGVjdXRlZAoJCQkJCX0KICAgICZzZXRfbGFiZWwoInNsb3dfZW5jX3g4NiIsMTYpOwoJJm1vdgkoJHMwLCZEV1AoMCwka2V5KSk7CSMgbG9hZCBpdgoJJm1vdgkoJHMxLCZEV1AoNCwka2V5KSk7CgoJJnNldF9sYWJlbCgic2xvd19lbmNfbG9vcF94ODYiLDQpOwoJCSZtb3YJKCRzMiwmRFdQKDgsJGtleSkpOwoJCSZtb3YJKCRzMywmRFdQKDEyLCRrZXkpKTsKCgkJJnhvcgkoJHMwLCZEV1AoMCwkYWNjKSk7CSMgeG9yIGlucHV0IGRhdGEKCQkmeG9yCSgkczEsJkRXUCg0LCRhY2MpKTsKCQkmeG9yCSgkczIsJkRXUCg4LCRhY2MpKTsKCQkmeG9yCSgkczMsJkRXUCgxMiwkYWNjKSk7CgoJCSZtb3YJKCRrZXksJF9rZXkpOwkJIyBsb2FkIGtleQoJCSZjYWxsCSgiX3g4Nl9BRVNfZW5jcnlwdF9jb21wYWN0Iik7CgoJCSZtb3YJKCRhY2MsJF9pbnApOwkJIyBsb2FkIGlucAoJCSZtb3YJKCRrZXksJF9vdXQpOwkJIyBsb2FkIG91dAoKCQkmbW92CSgmRFdQKDAsJGtleSksJHMwKTsJIyBzYXZlIG91dHB1dCBkYXRhCgkJJm1vdgkoJkRXUCg0LCRrZXkpLCRzMSk7CgkJJm1vdgkoJkRXUCg4LCRrZXkpLCRzMik7CgkJJm1vdgkoJkRXUCgxMiwka2V5KSwkczMpOwoKCQkmbW92CSgkczIsJF9sZW4pOwkJIyBsb2FkIGxlbgoJCSZsZWEJKCRhY2MsJkRXUCgxNiwkYWNjKSk7CSMgYWR2YW5jZSBpbnAKCQkmbW92CSgkX2lucCwkYWNjKTsJCSMgc2F2ZSBpbnAKCQkmbGVhCSgkczMsJkRXUCgxNiwka2V5KSk7CSMgYWR2YW5jZSBvdXQKCQkmbW92CSgkX291dCwkczMpOwkJIyBzYXZlIG91dAoJCSZzdWIJKCRzMiwxNik7CQkjIGRlY3JlYXNlIGxlbgoJCSZjbXAJKCRzMiwxNik7CgkJJm1vdgkoJF9sZW4sJHMyKTsJCSMgc2F2ZSBsZW4KCSZqYWUJKCZsYWJlbCgic2xvd19lbmNfbG9vcF94ODYiKSk7CgkmdGVzdAkoJHMyLDE1KTsKCSZqbnoJKCZsYWJlbCgic2xvd19lbmNfdGFpbCIpKTsKCSZtb3YJKCRhY2MsJF9pdnApOwkJIyBsb2FkIGl2cAoJJm1vdgkoJHMyLCZEV1AoOCwka2V5KSk7CSMgcmVzdG9yZSBsYXN0IGR3b3JkcwoJJm1vdgkoJHMzLCZEV1AoMTIsJGtleSkpOwoJJm1vdgkoJkRXUCgwLCRhY2MpLCRzMCk7CSMgc2F2ZSBpdmVjCgkmbW92CSgmRFdQKDQsJGFjYyksJHMxKTsKCSZtb3YJKCZEV1AoOCwkYWNjKSwkczIpOwoJJm1vdgkoJkRXUCgxMiwkYWNjKSwkczMpOwoKCSZtb3YJKCJlc3AiLCRfZXNwKTsKCSZwb3BmCSgpOwoJJmZ1bmN0aW9uX2VuZF9BKCk7CgkmcHVzaGYJKCk7CQkJIyBrbHVkZ2UsIG5ldmVyIGV4ZWN1dGVkCgogICAgJnNldF9sYWJlbCgic2xvd19lbmNfdGFpbCIsMTYpOwoJJmVtbXMJKCkJaWYgKCEkeDg2b25seSk7CgkmbW92CSgka2V5IGVxICJlZGkiPyAka2V5OiIiLCRzMyk7CSMgbG9hZCBvdXQgdG8gZWRpCgkmbW92CSgkczEsMTYpOwoJJnN1YgkoJHMxLCRzMik7CgkmY21wCSgka2V5LCRhY2MgZXEgImVzaSI/ICRhY2M6IiIpOwkjIGNvbXBhcmUgd2l0aCBpbnAKCSZqZQkoJmxhYmVsKCJlbmNfaW5fcGxhY2UiKSk7CgkmYWxpZ24JKDQpOwoJJmRhdGFfd29yZCgweEE0RjNGNjg5KTsJIyByZXAgbW92c2IJIyBjb3B5IGlucHV0Cgkmam1wCSgmbGFiZWwoImVuY19za2lwX2luX3BsYWNlIikpOwogICAgJnNldF9sYWJlbCgiZW5jX2luX3BsYWNlIik7CgkmbGVhCSgka2V5LCZEV1AoMCwka2V5LCRzMikpOwogICAgJnNldF9sYWJlbCgiZW5jX3NraXBfaW5fcGxhY2UiKTsKCSZtb3YJKCRzMiwkczEpOwoJJnhvcgkoJHMwLCRzMCk7CgkmYWxpZ24JKDQpOwoJJmRhdGFfd29yZCgweEFBRjNGNjg5KTsJIyByZXAgc3Rvc2IJIyB6ZXJvIHRhaWwKCgkmbW92CSgka2V5LCRfaXZwKTsJCQkjIHJlc3RvcmUgaXZwCgkmbW92CSgkYWNjLCRzMyk7CQkJIyBvdXRwdXQgYXMgaW5wdXQKCSZtb3YJKCRzMCwmRFdQKDAsJGtleSkpOwoJJm1vdgkoJHMxLCZEV1AoNCwka2V5KSk7CgkmbW92CSgkX2xlbiwxNik7CQkJIyBsZW49MTYKCSZqbXAJKCZsYWJlbCgic2xvd19lbmNfbG9vcF94ODYiKSk7CSMgb25lIG1vcmUgc3Bpbi4uLgoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTTE9XIERFQ1JZUFQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIwomc2V0X2xhYmVsKCJzbG93X2RlY3J5cHQiLDE2KTsKCQkJCQlpZiAoISR4ODZvbmx5KSB7CgkmYnQJKCRfdG1wLDI1KTsJCSMgY2hlY2sgZm9yIFNTRSBiaXQKCSZqbmMJKCZsYWJlbCgic2xvd19kZWNfbG9vcF94ODYiKSk7CgoJJnNldF9sYWJlbCgic2xvd19kZWNfbG9vcF9zc2UiLDQpOwoJCSZtb3ZxCSgibW0wIiwmUVdQKDAsJGFjYykpOwkjIHJlYWQgaW5wdXQKCQkmbW92cQkoIm1tNCIsJlFXUCg4LCRhY2MpKTsKCgkJJm1vdgkoJGtleSwkX2tleSk7CgkJJmNhbGwJKCJfc3NlX0FFU19kZWNyeXB0X2NvbXBhY3QiKTsKCgkJJm1vdgkoJGFjYywkX2lucCk7CQkjIGxvYWQgaW5wCgkJJmxlYQkoJHMwLCRpdmVjKTsKCQkmbW92CSgkczEsJF9vdXQpOwkJIyBsb2FkIG91dAoJCSZtb3YJKCRzMiwkX2xlbik7CQkjIGxvYWQgbGVuCgkJJm1vdgkoJGtleSwkX2l2cCk7CQkjIGxvYWQgaXZwCgoJCSZtb3ZxCSgibW0xIiwmUVdQKDAsJGFjYykpOwkjIHJlLXJlYWQgaW5wdXQKCQkmbW92cQkoIm1tNSIsJlFXUCg4LCRhY2MpKTsKCgkJJnB4b3IJKCJtbTAiLCZRV1AoMCwka2V5KSk7CSMgeG9yIGl2CgkJJnB4b3IJKCJtbTQiLCZRV1AoOCwka2V5KSk7CgoJCSZtb3ZxCSgmUVdQKDAsJGtleSksIm1tMSIpOwkjIGNvcHkgaW5wdXQgdG8gaXYKCQkmbW92cQkoJlFXUCg4LCRrZXkpLCJtbTUiKTsKCgkJJnN1YgkoJHMyLDE2KTsJCSMgZGVjcmVhc2UgbGVuCgkJJmpjCSgmbGFiZWwoInNsb3dfZGVjX3BhcnRpYWxfc3NlIikpOwoKCQkmbW92cQkoJlFXUCgwLCRzMSksIm1tMCIpOwkjIHdyaXRlIG91dHB1dAoJCSZtb3ZxCSgmUVdQKDgsJHMxKSwibW00Iik7CgoJCSZsZWEJKCRzMSwmRFdQKDE2LCRzMSkpOwkjIGFkdmFuY2Ugb3V0CgkJJm1vdgkoJF9vdXQsJHMxKTsJCSMgc2F2ZSBvdXQKCQkmbGVhCSgkYWNjLCZEV1AoMTYsJGFjYykpOwkjIGFkdmFuY2UgaW5wCgkJJm1vdgkoJF9pbnAsJGFjYyk7CQkjIHNhdmUgaW5wCgkJJm1vdgkoJF9sZW4sJHMyKTsJCSMgc2F2ZSBsZW4KCSZqbnoJKCZsYWJlbCgic2xvd19kZWNfbG9vcF9zc2UiKSk7CgkmZW1tcwkoKTsKCSZtb3YJKCJlc3AiLCRfZXNwKTsKCSZwb3BmCSgpOwoJJmZ1bmN0aW9uX2VuZF9BKCk7CgkmcHVzaGYJKCk7CQkJIyBrbHVkZ2UsIG5ldmVyIGV4ZWN1dGVkCgogICAgJnNldF9sYWJlbCgic2xvd19kZWNfcGFydGlhbF9zc2UiLDE2KTsKCSZtb3ZxCSgmUVdQKDAsJHMwKSwibW0wIik7CSMgc2F2ZSBvdXRwdXQgdG8gdGVtcAoJJm1vdnEJKCZRV1AoOCwkczApLCJtbTQiKTsKCSZlbW1zCSgpOwoKCSZhZGQJKCRzMiBlcSAiZWN4IiA/ICJlY3giOiIiLDE2KTsKCSZtb3YJKCJlZGkiLCRzMSk7CQkjIG91dAoJJm1vdgkoImVzaSIsJHMwKTsJCSMgdGVtcAoJJmFsaWduCSg0KTsKCSZkYXRhX3dvcmQoMHhBNEYzRjY4OSk7CQkjIHJlcCBtb3ZzYiAjIGNvcHkgcGFydGlhbCBvdXRwdXQKCgkmbW92CSgiZXNwIiwkX2VzcCk7CgkmcG9wZgkoKTsKCSZmdW5jdGlvbl9lbmRfQSgpOwoJJnB1c2hmCSgpOwkJCSMga2x1ZGdlLCBuZXZlciBleGVjdXRlZAoJCQkJCX0KCSZzZXRfbGFiZWwoInNsb3dfZGVjX2xvb3BfeDg2IiwxNik7CgkJJm1vdgkoJHMwLCZEV1AoMCwkYWNjKSk7CSMgcmVhZCBpbnB1dAoJCSZtb3YJKCRzMSwmRFdQKDQsJGFjYykpOwoJCSZtb3YJKCRzMiwmRFdQKDgsJGFjYykpOwoJCSZtb3YJKCRzMywmRFdQKDEyLCRhY2MpKTsKCgkJJmxlYQkoJGtleSwkaXZlYyk7CgkJJm1vdgkoJkRXUCgwLCRrZXkpLCRzMCk7CSMgY29weSB0byB0ZW1wCgkJJm1vdgkoJkRXUCg0LCRrZXkpLCRzMSk7CgkJJm1vdgkoJkRXUCg4LCRrZXkpLCRzMik7CgkJJm1vdgkoJkRXUCgxMiwka2V5KSwkczMpOwoKCQkmbW92CSgka2V5LCRfa2V5KTsJCSMgbG9hZCBrZXkKCQkmY2FsbAkoIl94ODZfQUVTX2RlY3J5cHRfY29tcGFjdCIpOwoKCQkmbW92CSgka2V5LCRfaXZwKTsJCSMgbG9hZCBpdnAKCQkmbW92CSgkYWNjLCRfbGVuKTsJCSMgbG9hZCBsZW4KCQkmeG9yCSgkczAsJkRXUCgwLCRrZXkpKTsJIyB4b3IgaXYKCQkmeG9yCSgkczEsJkRXUCg0LCRrZXkpKTsKCQkmeG9yCSgkczIsJkRXUCg4LCRrZXkpKTsKCQkmeG9yCSgkczMsJkRXUCgxMiwka2V5KSk7CgoJCSZzdWIJKCRhY2MsMTYpOwoJCSZqYwkoJmxhYmVsKCJzbG93X2RlY19wYXJ0aWFsX3g4NiIpKTsKCgkJJm1vdgkoJF9sZW4sJGFjYyk7CQkjIHNhdmUgbGVuCgkJJm1vdgkoJGFjYywkX291dCk7CQkjIGxvYWQgb3V0CgoJCSZtb3YJKCZEV1AoMCwkYWNjKSwkczApOwkjIHdyaXRlIG91dHB1dAoJCSZtb3YJKCZEV1AoNCwkYWNjKSwkczEpOwoJCSZtb3YJKCZEV1AoOCwkYWNjKSwkczIpOwoJCSZtb3YJKCZEV1AoMTIsJGFjYyksJHMzKTsKCgkJJmxlYQkoJGFjYywmRFdQKDE2LCRhY2MpKTsJIyBhZHZhbmNlIG91dAoJCSZtb3YJKCRfb3V0LCRhY2MpOwkJIyBzYXZlIG91dAoKCQkmbGVhCSgkYWNjLCRpdmVjKTsKCQkmbW92CSgkczAsJkRXUCgwLCRhY2MpKTsJIyByZWFkIHRlbXAKCQkmbW92CSgkczEsJkRXUCg0LCRhY2MpKTsKCQkmbW92CSgkczIsJkRXUCg4LCRhY2MpKTsKCQkmbW92CSgkczMsJkRXUCgxMiwkYWNjKSk7CgoJCSZtb3YJKCZEV1AoMCwka2V5KSwkczApOwkjIGNvcHkgaXQgdG8gaXYKCQkmbW92CSgmRFdQKDQsJGtleSksJHMxKTsKCQkmbW92CSgmRFdQKDgsJGtleSksJHMyKTsKCQkmbW92CSgmRFdQKDEyLCRrZXkpLCRzMyk7CgoJCSZtb3YJKCRhY2MsJF9pbnApOwkJIyBsb2FkIGlucAoJCSZsZWEJKCRhY2MsJkRXUCgxNiwkYWNjKSk7CSMgYWR2YW5jZSBpbnAKCQkmbW92CSgkX2lucCwkYWNjKTsJCSMgc2F2ZSBpbnAKCSZqbnoJKCZsYWJlbCgic2xvd19kZWNfbG9vcF94ODYiKSk7CgkmbW92CSgiZXNwIiwkX2VzcCk7CgkmcG9wZgkoKTsKCSZmdW5jdGlvbl9lbmRfQSgpOwoJJnB1c2hmCSgpOwkJCSMga2x1ZGdlLCBuZXZlciBleGVjdXRlZAoKICAgICZzZXRfbGFiZWwoInNsb3dfZGVjX3BhcnRpYWxfeDg2IiwxNik7CgkmbGVhCSgkYWNjLCRpdmVjKTsKCSZtb3YJKCZEV1AoMCwkYWNjKSwkczApOwkjIHNhdmUgb3V0cHV0IHRvIHRlbXAKCSZtb3YJKCZEV1AoNCwkYWNjKSwkczEpOwoJJm1vdgkoJkRXUCg4LCRhY2MpLCRzMik7CgkmbW92CSgmRFdQKDEyLCRhY2MpLCRzMyk7CgoJJm1vdgkoJGFjYywkX2lucCk7CgkmbW92CSgkczAsJkRXUCgwLCRhY2MpKTsJIyByZS1yZWFkIGlucHV0CgkmbW92CSgkczEsJkRXUCg0LCRhY2MpKTsKCSZtb3YJKCRzMiwmRFdQKDgsJGFjYykpOwoJJm1vdgkoJHMzLCZEV1AoMTIsJGFjYykpOwoKCSZtb3YJKCZEV1AoMCwka2V5KSwkczApOwkjIGNvcHkgaXQgdG8gaXYKCSZtb3YJKCZEV1AoNCwka2V5KSwkczEpOwoJJm1vdgkoJkRXUCg4LCRrZXkpLCRzMik7CgkmbW92CSgmRFdQKDEyLCRrZXkpLCRzMyk7CgoJJm1vdgkoImVjeCIsJF9sZW4pOwoJJm1vdgkoImVkaSIsJF9vdXQpOwoJJmxlYQkoImVzaSIsJGl2ZWMpOwoJJmFsaWduCSg0KTsKCSZkYXRhX3dvcmQoMHhBNEYzRjY4OSk7CQkjIHJlcCBtb3ZzYiAjIGNvcHkgcGFydGlhbCBvdXRwdXQKCgkmbW92CSgiZXNwIiwkX2VzcCk7CgkmcG9wZgkoKTsKJmZ1bmN0aW9uX2VuZCgiQUVTX2NiY19lbmNyeXB0Iik7Cn0KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCgpzdWIgZW5ja2V5KCkKewoJJm1vdnoJKCJlc2kiLCZMQigiZWR4IikpOwkJIyBya1tpXT4+MAoJJm1vdnoJKCJlYngiLCZCUCgtMTI4LCR0YmwsImVzaSIsMSkpOwoJJm1vdnoJKCJlc2kiLCZIQigiZWR4IikpOwkJIyBya1tpXT4+OAoJJnNobAkoImVieCIsMjQpOwoJJnhvcgkoImVheCIsImVieCIpOwoKCSZtb3Z6CSgiZWJ4IiwmQlAoLTEyOCwkdGJsLCJlc2kiLDEpKTsKCSZzaHIJKCJlZHgiLDE2KTsKCSZtb3Z6CSgiZXNpIiwmTEIoImVkeCIpKTsJCSMgcmtbaV0+PjE2CgkmeG9yCSgiZWF4IiwiZWJ4Iik7CgoJJm1vdnoJKCJlYngiLCZCUCgtMTI4LCR0YmwsImVzaSIsMSkpOwoJJm1vdnoJKCJlc2kiLCZIQigiZWR4IikpOwkJIyBya1tpXT4+MjQKCSZzaGwJKCJlYngiLDgpOwoJJnhvcgkoImVheCIsImVieCIpOwoKCSZtb3Z6CSgiZWJ4IiwmQlAoLTEyOCwkdGJsLCJlc2kiLDEpKTsKCSZzaGwJKCJlYngiLDE2KTsKCSZ4b3IJKCJlYXgiLCJlYngiKTsKCgkmeG9yCSgiZWF4IiwmRFdQKDEwMjQtMTI4LCR0YmwsImVjeCIsNCkpOwkjIHJjb24KfQoKJmZ1bmN0aW9uX2JlZ2luKCJfeDg2X0FFU19zZXRfZW5jcnlwdF9rZXkiKTsKCSZtb3YJKCJlc2kiLCZ3cGFyYW0oMSkpOwkJIyB1c2VyIHN1cHBsaWVkIGtleQoJJm1vdgkoImVkaSIsJndwYXJhbSgzKSk7CQkjIHByaXZhdGUga2V5IHNjaGVkdWxlCgoJJnRlc3QJKCJlc2kiLC0xKTsKCSZqegkoJmxhYmVsKCJiYWRwb2ludGVyIikpOwoJJnRlc3QJKCJlZGkiLC0xKTsKCSZqegkoJmxhYmVsKCJiYWRwb2ludGVyIikpOwoKCSZjYWxsCSgmbGFiZWwoInBpY19wb2ludCIpKTsKCSZzZXRfbGFiZWwoInBpY19wb2ludCIpOwoJJmJsaW5kcG9wKCR0YmwpOwoJJmxlYQkoJHRibCwmRFdQKCZsYWJlbCgiQUVTX1RlIikuIi0iLiZsYWJlbCgicGljX3BvaW50IiksJHRibCkpOwoJJmxlYQkoJHRibCwmRFdQKDIwNDgrMTI4LCR0YmwpKTsKCgkjIHByZWZldGNoIFRlNAoJJm1vdgkoImVheCIsJkRXUCgwLTEyOCwkdGJsKSk7CgkmbW92CSgiZWJ4IiwmRFdQKDMyLTEyOCwkdGJsKSk7CgkmbW92CSgiZWN4IiwmRFdQKDY0LTEyOCwkdGJsKSk7CgkmbW92CSgiZWR4IiwmRFdQKDk2LTEyOCwkdGJsKSk7CgkmbW92CSgiZWF4IiwmRFdQKDEyOC0xMjgsJHRibCkpOwoJJm1vdgkoImVieCIsJkRXUCgxNjAtMTI4LCR0YmwpKTsKCSZtb3YJKCJlY3giLCZEV1AoMTkyLTEyOCwkdGJsKSk7CgkmbW92CSgiZWR4IiwmRFdQKDIyNC0xMjgsJHRibCkpOwoKCSZtb3YJKCJlY3giLCZ3cGFyYW0oMikpOwkJIyBudW1iZXIgb2YgYml0cyBpbiBrZXkKCSZjbXAJKCJlY3giLDEyOCk7CgkmamUJKCZsYWJlbCgiMTByb3VuZHMiKSk7CgkmY21wCSgiZWN4IiwxOTIpOwoJJmplCSgmbGFiZWwoIjEycm91bmRzIikpOwoJJmNtcAkoImVjeCIsMjU2KTsKCSZqZQkoJmxhYmVsKCIxNHJvdW5kcyIpKTsKCSZtb3YJKCJlYXgiLC0yKTsJCQkjIGludmFsaWQgbnVtYmVyIG9mIGJpdHMKCSZqbXAJKCZsYWJlbCgiZXhpdCIpKTsKCiAgICAmc2V0X2xhYmVsKCIxMHJvdW5kcyIpOwoJJm1vdgkoImVheCIsJkRXUCgwLCJlc2kiKSk7CQkjIGNvcHkgZmlyc3QgNCBkd29yZHMKCSZtb3YJKCJlYngiLCZEV1AoNCwiZXNpIikpOwoJJm1vdgkoImVjeCIsJkRXUCg4LCJlc2kiKSk7CgkmbW92CSgiZWR4IiwmRFdQKDEyLCJlc2kiKSk7CgkmbW92CSgmRFdQKDAsImVkaSIpLCJlYXgiKTsKCSZtb3YJKCZEV1AoNCwiZWRpIiksImVieCIpOwoJJm1vdgkoJkRXUCg4LCJlZGkiKSwiZWN4Iik7CgkmbW92CSgmRFdQKDEyLCJlZGkiKSwiZWR4Iik7CgoJJnhvcgkoImVjeCIsImVjeCIpOwoJJmptcAkoJmxhYmVsKCIxMHNob3J0Y3V0IikpOwoKCSZhbGlnbgkoNCk7Cgkmc2V0X2xhYmVsKCIxMGxvb3AiKTsKCQkmbW92CSgiZWF4IiwmRFdQKDAsImVkaSIpKTsJCSMgcmtbMF0KCQkmbW92CSgiZWR4IiwmRFdQKDEyLCJlZGkiKSk7CQkjIHJrWzNdCgkmc2V0X2xhYmVsKCIxMHNob3J0Y3V0Iik7CgkJJmVuY2tleQkoKTsKCgkJJm1vdgkoJkRXUCgxNiwiZWRpIiksImVheCIpOwkJIyBya1s0XQoJCSZ4b3IJKCJlYXgiLCZEV1AoNCwiZWRpIikpOwoJCSZtb3YJKCZEV1AoMjAsImVkaSIpLCJlYXgiKTsJCSMgcmtbNV0KCQkmeG9yCSgiZWF4IiwmRFdQKDgsImVkaSIpKTsKCQkmbW92CSgmRFdQKDI0LCJlZGkiKSwiZWF4Iik7CQkjIHJrWzZdCgkJJnhvcgkoImVheCIsJkRXUCgxMiwiZWRpIikpOwoJCSZtb3YJKCZEV1AoMjgsImVkaSIpLCJlYXgiKTsJCSMgcmtbN10KCQkmaW5jCSgiZWN4Iik7CgkJJmFkZAkoImVkaSIsMTYpOwoJCSZjbXAJKCJlY3giLDEwKTsKCSZqbAkoJmxhYmVsKCIxMGxvb3AiKSk7CgoJJm1vdgkoJkRXUCg4MCwiZWRpIiksMTApOwkJIyBzZXR1cCBudW1iZXIgb2Ygcm91bmRzCgkmeG9yCSgiZWF4IiwiZWF4Iik7Cgkmam1wCSgmbGFiZWwoImV4aXQiKSk7CgkJCiAgICAmc2V0X2xhYmVsKCIxMnJvdW5kcyIpOwoJJm1vdgkoImVheCIsJkRXUCgwLCJlc2kiKSk7CQkjIGNvcHkgZmlyc3QgNiBkd29yZHMKCSZtb3YJKCJlYngiLCZEV1AoNCwiZXNpIikpOwoJJm1vdgkoImVjeCIsJkRXUCg4LCJlc2kiKSk7CgkmbW92CSgiZWR4IiwmRFdQKDEyLCJlc2kiKSk7CgkmbW92CSgmRFdQKDAsImVkaSIpLCJlYXgiKTsKCSZtb3YJKCZEV1AoNCwiZWRpIiksImVieCIpOwoJJm1vdgkoJkRXUCg4LCJlZGkiKSwiZWN4Iik7CgkmbW92CSgmRFdQKDEyLCJlZGkiKSwiZWR4Iik7CgkmbW92CSgiZWN4IiwmRFdQKDE2LCJlc2kiKSk7CgkmbW92CSgiZWR4IiwmRFdQKDIwLCJlc2kiKSk7CgkmbW92CSgmRFdQKDE2LCJlZGkiKSwiZWN4Iik7CgkmbW92CSgmRFdQKDIwLCJlZGkiKSwiZWR4Iik7CgoJJnhvcgkoImVjeCIsImVjeCIpOwoJJmptcAkoJmxhYmVsKCIxMnNob3J0Y3V0IikpOwoKCSZhbGlnbgkoNCk7Cgkmc2V0X2xhYmVsKCIxMmxvb3AiKTsKCQkmbW92CSgiZWF4IiwmRFdQKDAsImVkaSIpKTsJCSMgcmtbMF0KCQkmbW92CSgiZWR4IiwmRFdQKDIwLCJlZGkiKSk7CQkjIHJrWzVdCgkmc2V0X2xhYmVsKCIxMnNob3J0Y3V0Iik7CgkJJmVuY2tleQkoKTsKCgkJJm1vdgkoJkRXUCgyNCwiZWRpIiksImVheCIpOwkJIyBya1s2XQoJCSZ4b3IJKCJlYXgiLCZEV1AoNCwiZWRpIikpOwoJCSZtb3YJKCZEV1AoMjgsImVkaSIpLCJlYXgiKTsJCSMgcmtbN10KCQkmeG9yCSgiZWF4IiwmRFdQKDgsImVkaSIpKTsKCQkmbW92CSgmRFdQKDMyLCJlZGkiKSwiZWF4Iik7CQkjIHJrWzhdCgkJJnhvcgkoImVheCIsJkRXUCgxMiwiZWRpIikpOwoJCSZtb3YJKCZEV1AoMzYsImVkaSIpLCJlYXgiKTsJCSMgcmtbOV0KCgkJJmNtcAkoImVjeCIsNyk7CgkJJmplCSgmbGFiZWwoIjEyYnJlYWsiKSk7CgkJJmluYwkoImVjeCIpOwoKCQkmeG9yCSgiZWF4IiwmRFdQKDE2LCJlZGkiKSk7CgkJJm1vdgkoJkRXUCg0MCwiZWRpIiksImVheCIpOwkJIyBya1sxMF0KCQkmeG9yCSgiZWF4IiwmRFdQKDIwLCJlZGkiKSk7CgkJJm1vdgkoJkRXUCg0NCwiZWRpIiksImVheCIpOwkJIyBya1sxMV0KCgkJJmFkZAkoImVkaSIsMjQpOwoJJmptcAkoJmxhYmVsKCIxMmxvb3AiKSk7CgoJJnNldF9sYWJlbCgiMTJicmVhayIpOwoJJm1vdgkoJkRXUCg3MiwiZWRpIiksMTIpOwkJIyBzZXR1cCBudW1iZXIgb2Ygcm91bmRzCgkmeG9yCSgiZWF4IiwiZWF4Iik7Cgkmam1wCSgmbGFiZWwoImV4aXQiKSk7CgogICAgJnNldF9sYWJlbCgiMTRyb3VuZHMiKTsKCSZtb3YJKCJlYXgiLCZEV1AoMCwiZXNpIikpOwkJIyBjb3B5IGZpcnN0IDggZHdvcmRzCgkmbW92CSgiZWJ4IiwmRFdQKDQsImVzaSIpKTsKCSZtb3YJKCJlY3giLCZEV1AoOCwiZXNpIikpOwoJJm1vdgkoImVkeCIsJkRXUCgxMiwiZXNpIikpOwoJJm1vdgkoJkRXUCgwLCJlZGkiKSwiZWF4Iik7CgkmbW92CSgmRFdQKDQsImVkaSIpLCJlYngiKTsKCSZtb3YJKCZEV1AoOCwiZWRpIiksImVjeCIpOwoJJm1vdgkoJkRXUCgxMiwiZWRpIiksImVkeCIpOwoJJm1vdgkoImVheCIsJkRXUCgxNiwiZXNpIikpOwoJJm1vdgkoImVieCIsJkRXUCgyMCwiZXNpIikpOwoJJm1vdgkoImVjeCIsJkRXUCgyNCwiZXNpIikpOwoJJm1vdgkoImVkeCIsJkRXUCgyOCwiZXNpIikpOwoJJm1vdgkoJkRXUCgxNiwiZWRpIiksImVheCIpOwoJJm1vdgkoJkRXUCgyMCwiZWRpIiksImVieCIpOwoJJm1vdgkoJkRXUCgyNCwiZWRpIiksImVjeCIpOwoJJm1vdgkoJkRXUCgyOCwiZWRpIiksImVkeCIpOwoKCSZ4b3IJKCJlY3giLCJlY3giKTsKCSZqbXAJKCZsYWJlbCgiMTRzaG9ydGN1dCIpKTsKCgkmYWxpZ24JKDQpOwoJJnNldF9sYWJlbCgiMTRsb29wIik7CgkJJm1vdgkoImVkeCIsJkRXUCgyOCwiZWRpIikpOwkJIyBya1s3XQoJJnNldF9sYWJlbCgiMTRzaG9ydGN1dCIpOwoJCSZtb3YJKCJlYXgiLCZEV1AoMCwiZWRpIikpOwkJIyBya1swXQoKCQkmZW5ja2V5CSgpOwoKCQkmbW92CSgmRFdQKDMyLCJlZGkiKSwiZWF4Iik7CQkjIHJrWzhdCgkJJnhvcgkoImVheCIsJkRXUCg0LCJlZGkiKSk7CgkJJm1vdgkoJkRXUCgzNiwiZWRpIiksImVheCIpOwkJIyBya1s5XQoJCSZ4b3IJKCJlYXgiLCZEV1AoOCwiZWRpIikpOwoJCSZtb3YJKCZEV1AoNDAsImVkaSIpLCJlYXgiKTsJCSMgcmtbMTBdCgkJJnhvcgkoImVheCIsJkRXUCgxMiwiZWRpIikpOwoJCSZtb3YJKCZEV1AoNDQsImVkaSIpLCJlYXgiKTsJCSMgcmtbMTFdCgoJCSZjbXAJKCJlY3giLDYpOwoJCSZqZQkoJmxhYmVsKCIxNGJyZWFrIikpOwoJCSZpbmMJKCJlY3giKTsKCgkJJm1vdgkoImVkeCIsImVheCIpOwoJCSZtb3YJKCJlYXgiLCZEV1AoMTYsImVkaSIpKTsJCSMgcmtbNF0KCQkmbW92egkoImVzaSIsJkxCKCJlZHgiKSk7CQkjIHJrWzExXT4+MAoJCSZtb3Z6CSgiZWJ4IiwmQlAoLTEyOCwkdGJsLCJlc2kiLDEpKTsKCQkmbW92egkoImVzaSIsJkhCKCJlZHgiKSk7CQkjIHJrWzExXT4+OAoJCSZ4b3IJKCJlYXgiLCJlYngiKTsKCgkJJm1vdnoJKCJlYngiLCZCUCgtMTI4LCR0YmwsImVzaSIsMSkpOwoJCSZzaHIJKCJlZHgiLDE2KTsKCQkmc2hsCSgiZWJ4Iiw4KTsKCQkmbW92egkoImVzaSIsJkxCKCJlZHgiKSk7CQkjIHJrWzExXT4+MTYKCQkmeG9yCSgiZWF4IiwiZWJ4Iik7CgoJCSZtb3Z6CSgiZWJ4IiwmQlAoLTEyOCwkdGJsLCJlc2kiLDEpKTsKCQkmbW92egkoImVzaSIsJkhCKCJlZHgiKSk7CQkjIHJrWzExXT4+MjQKCQkmc2hsCSgiZWJ4IiwxNik7CgkJJnhvcgkoImVheCIsImVieCIpOwoKCQkmbW92egkoImVieCIsJkJQKC0xMjgsJHRibCwiZXNpIiwxKSk7CgkJJnNobAkoImVieCIsMjQpOwoJCSZ4b3IJKCJlYXgiLCJlYngiKTsKCgkJJm1vdgkoJkRXUCg0OCwiZWRpIiksImVheCIpOwkJIyBya1sxMl0KCQkmeG9yCSgiZWF4IiwmRFdQKDIwLCJlZGkiKSk7CgkJJm1vdgkoJkRXUCg1MiwiZWRpIiksImVheCIpOwkJIyBya1sxM10KCQkmeG9yCSgiZWF4IiwmRFdQKDI0LCJlZGkiKSk7CgkJJm1vdgkoJkRXUCg1NiwiZWRpIiksImVheCIpOwkJIyBya1sxNF0KCQkmeG9yCSgiZWF4IiwmRFdQKDI4LCJlZGkiKSk7CgkJJm1vdgkoJkRXUCg2MCwiZWRpIiksImVheCIpOwkJIyBya1sxNV0KCgkJJmFkZAkoImVkaSIsMzIpOwoJJmptcAkoJmxhYmVsKCIxNGxvb3AiKSk7CgoJJnNldF9sYWJlbCgiMTRicmVhayIpOwoJJm1vdgkoJkRXUCg0OCwiZWRpIiksMTQpOwkJIyBzZXR1cCBudW1iZXIgb2Ygcm91bmRzCgkmeG9yCSgiZWF4IiwiZWF4Iik7Cgkmam1wCSgmbGFiZWwoImV4aXQiKSk7CgogICAgJnNldF9sYWJlbCgiYmFkcG9pbnRlciIpOwoJJm1vdgkoImVheCIsLTEpOwogICAgJnNldF9sYWJlbCgiZXhpdCIpOwomZnVuY3Rpb25fZW5kKCJfeDg2X0FFU19zZXRfZW5jcnlwdF9rZXkiKTsKCiMgaW50IHByaXZhdGVfQUVTX3NldF9lbmNyeXB0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5LCBjb25zdCBpbnQgYml0cywKIyAgICAgICAgICAgICAgICAgICAgICAgIEFFU19LRVkgKmtleSkKJmZ1bmN0aW9uX2JlZ2luX0IoInByaXZhdGVfQUVTX3NldF9lbmNyeXB0X2tleSIpOwoJJmNhbGwJKCJfeDg2X0FFU19zZXRfZW5jcnlwdF9rZXkiKTsKCSZyZXQJKCk7CiZmdW5jdGlvbl9lbmRfQigicHJpdmF0ZV9BRVNfc2V0X2VuY3J5cHRfa2V5Iik7CgpzdWIgZGVja2V5KCkKeyBteSAoJGksJGtleSwkdHAxLCR0cDIsJHRwNCwkdHA4KSA9IEBfOwogIG15ICR0bXAgPSAkdGJsOwoKCSZtb3YJKCRhY2MsJHRwMSk7CgkmYW5kCSgkYWNjLDB4ODA4MDgwODApOwoJJm1vdgkoJHRtcCwkYWNjKTsKCSZzaHIJKCR0bXAsNyk7CgkmbGVhCSgkdHAyLCZEV1AoMCwkdHAxLCR0cDEpKTsKCSZzdWIJKCRhY2MsJHRtcCk7CgkmYW5kCSgkdHAyLDB4ZmVmZWZlZmUpOwoJJmFuZAkoJGFjYywweDFiMWIxYjFiKTsKCSZ4b3IJKCRhY2MsJHRwMik7CgkmbW92CSgkdHAyLCRhY2MpOwoKCSZhbmQJKCRhY2MsMHg4MDgwODA4MCk7CgkmbW92CSgkdG1wLCRhY2MpOwoJJnNocgkoJHRtcCw3KTsKCSZsZWEJKCR0cDQsJkRXUCgwLCR0cDIsJHRwMikpOwoJJnN1YgkoJGFjYywkdG1wKTsKCSZhbmQJKCR0cDQsMHhmZWZlZmVmZSk7CgkmYW5kCSgkYWNjLDB4MWIxYjFiMWIpOwoJICZ4b3IJKCR0cDIsJHRwMSk7CSMgdHAyXnRwMQoJJnhvcgkoJGFjYywkdHA0KTsKCSZtb3YJKCR0cDQsJGFjYyk7CgoJJmFuZAkoJGFjYywweDgwODA4MDgwKTsKCSZtb3YJKCR0bXAsJGFjYyk7Cgkmc2hyCSgkdG1wLDcpOwoJJmxlYQkoJHRwOCwmRFdQKDAsJHRwNCwkdHA0KSk7CgkgJnhvcgkoJHRwNCwkdHAxKTsJIyB0cDRedHAxCgkmc3ViCSgkYWNjLCR0bXApOwoJJmFuZAkoJHRwOCwweGZlZmVmZWZlKTsKCSZhbmQJKCRhY2MsMHgxYjFiMWIxYik7CgkgJnJvdGwJKCR0cDEsOCk7CSMgPSBST1RBVEUodHAxLDgpCgkmeG9yCSgkdHA4LCRhY2MpOwoKCSZtb3YJKCR0bXAsJkRXUCg0KigkaSsxKSwka2V5KSk7CSMgbW9kdWxvLXNjaGVkdWxlZCBsb2FkCgoJJnhvcgkoJHRwMSwkdHAyKTsKCSZ4b3IJKCR0cDIsJHRwOCk7CgkmeG9yCSgkdHAxLCR0cDQpOwoJJnJvdGwJKCR0cDIsMjQpOwoJJnhvcgkoJHRwNCwkdHA4KTsKCSZ4b3IJKCR0cDEsJHRwOCk7CSMgXj0gdHA4Xih0cDRedHAxKV4odHAyXnRwMSkKCSZyb3RsCSgkdHA0LDE2KTsKCSZ4b3IJKCR0cDEsJHRwMik7CSMgXj0gUk9UQVRFKHRwOF50cDJedHAxLDI0KQoJJnJvdGwJKCR0cDgsOCk7CgkmeG9yCSgkdHAxLCR0cDQpOwkjIF49IFJPVEFURSh0cDhedHA0XnRwMSwxNikKCSZtb3YJKCR0cDIsJHRtcCk7CgkmeG9yCSgkdHAxLCR0cDgpOwkjIF49IFJPVEFURSh0cDgsOCkKCgkmbW92CSgmRFdQKDQqJGksJGtleSksJHRwMSk7Cn0KCiMgaW50IHByaXZhdGVfQUVTX3NldF9kZWNyeXB0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5LCBjb25zdCBpbnQgYml0cywKIyAgICAgICAgICAgICAgICAgICAgICAgIEFFU19LRVkgKmtleSkKJmZ1bmN0aW9uX2JlZ2luX0IoInByaXZhdGVfQUVTX3NldF9kZWNyeXB0X2tleSIpOwoJJmNhbGwJKCJfeDg2X0FFU19zZXRfZW5jcnlwdF9rZXkiKTsKCSZjbXAJKCJlYXgiLDApOwoJJmplCSgmbGFiZWwoInByb2NlZWQiKSk7CgkmcmV0CSgpOwoKICAgICZzZXRfbGFiZWwoInByb2NlZWQiKTsKCSZwdXNoCSgiZWJwIik7CgkmcHVzaAkoImVieCIpOwoJJnB1c2gJKCJlc2kiKTsKCSZwdXNoCSgiZWRpIik7CgoJJm1vdgkoImVzaSIsJndwYXJhbSgyKSk7CgkmbW92CSgiZWN4IiwmRFdQKDI0MCwiZXNpIikpOwkjIHB1bGwgbnVtYmVyIG9mIHJvdW5kcwoJJmxlYQkoImVjeCIsJkRXUCgwLCIiLCJlY3giLDQpKTsKCSZsZWEJKCJlZGkiLCZEV1AoMCwiZXNpIiwiZWN4Iiw0KSk7CSMgcG9pbnRlciB0byBsYXN0IGNodW5rCgoJJnNldF9sYWJlbCgiaW52ZXJ0Iiw0KTsJCQkjIGludmVydCBvcmRlciBvZiBjaHVua3MKCQkmbW92CSgiZWF4IiwmRFdQKDAsImVzaSIpKTsKCQkmbW92CSgiZWJ4IiwmRFdQKDQsImVzaSIpKTsKCQkmbW92CSgiZWN4IiwmRFdQKDAsImVkaSIpKTsKCQkmbW92CSgiZWR4IiwmRFdQKDQsImVkaSIpKTsKCQkmbW92CSgmRFdQKDAsImVkaSIpLCJlYXgiKTsKCQkmbW92CSgmRFdQKDQsImVkaSIpLCJlYngiKTsKCQkmbW92CSgmRFdQKDAsImVzaSIpLCJlY3giKTsKCQkmbW92CSgmRFdQKDQsImVzaSIpLCJlZHgiKTsKCQkmbW92CSgiZWF4IiwmRFdQKDgsImVzaSIpKTsKCQkmbW92CSgiZWJ4IiwmRFdQKDEyLCJlc2kiKSk7CgkJJm1vdgkoImVjeCIsJkRXUCg4LCJlZGkiKSk7CgkJJm1vdgkoImVkeCIsJkRXUCgxMiwiZWRpIikpOwoJCSZtb3YJKCZEV1AoOCwiZWRpIiksImVheCIpOwoJCSZtb3YJKCZEV1AoMTIsImVkaSIpLCJlYngiKTsKCQkmbW92CSgmRFdQKDgsImVzaSIpLCJlY3giKTsKCQkmbW92CSgmRFdQKDEyLCJlc2kiKSwiZWR4Iik7CgkJJmFkZAkoImVzaSIsMTYpOwoJCSZzdWIJKCJlZGkiLDE2KTsKCQkmY21wCSgiZXNpIiwiZWRpIik7Cgkmam5lCSgmbGFiZWwoImludmVydCIpKTsKCgkmbW92CSgka2V5LCZ3cGFyYW0oMikpOwoJJm1vdgkoJGFjYywmRFdQKDI0MCwka2V5KSk7CQkjIHB1bGwgbnVtYmVyIG9mIHJvdW5kcwoJJmxlYQkoJGFjYywmRFdQKC0yLCRhY2MsJGFjYykpOwoJJmxlYQkoJGFjYywmRFdQKDAsJGtleSwkYWNjLDgpKTsKCSZtb3YJKCZ3cGFyYW0oMiksJGFjYyk7CgoJJm1vdgkoJHMwLCZEV1AoMTYsJGtleSkpOwkJIyBtb2R1bG8tc2NoZWR1bGVkIGxvYWQKCSZzZXRfbGFiZWwoInBlcm11dGUiLDQpOwkJIyBwZXJtdXRlIHRoZSBrZXkgc2NoZWR1bGUKCQkmYWRkCSgka2V5LDE2KTsKCQkmZGVja2V5CSgwLCRrZXksJHMwLCRzMSwkczIsJHMzKTsKCQkmZGVja2V5CSgxLCRrZXksJHMxLCRzMiwkczMsJHMwKTsKCQkmZGVja2V5CSgyLCRrZXksJHMyLCRzMywkczAsJHMxKTsKCQkmZGVja2V5CSgzLCRrZXksJHMzLCRzMCwkczEsJHMyKTsKCQkmY21wCSgka2V5LCZ3cGFyYW0oMikpOwoJJmpiCSgmbGFiZWwoInBlcm11dGUiKSk7CgoJJnhvcgkoImVheCIsImVheCIpOwkJCSMgcmV0dXJuIHN1Y2Nlc3MKJmZ1bmN0aW9uX2VuZCgicHJpdmF0ZV9BRVNfc2V0X2RlY3J5cHRfa2V5Iik7CiZhc2NpeigiQUVTIGZvciB4ODYsIENSWVBUT0dBTVMgYnkgPGFwcHJvXEBvcGVuc3NsLm9yZz4iKTsKCiZhc21fZmluaXNoKCk7Cg==