IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojICAgICAgICAgICAgICAgICAgICAgICBDQURFTkNFIENPUFlSSUdIVCBOT1RJQ0UKIyAgICAgICAgIKkgMjAwOC0yMDEzIENhZGVuY2UgRGVzaWduIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBGb3VuZGF0aW9uIEZsb3cgaXMgcHJvdmlkZWQgYXMgYW4gZXhhbXBsZSBvZiBob3cgdG8gcGVyZm9ybSBzcGVjaWFsaXplZAojIHRhc2tzLgojCiMgVGhpcyB3b3JrIG1heSBub3QgYmUgY29waWVkLCByZS1wdWJsaXNoZWQsIHVwbG9hZGVkLCBvciBkaXN0cmlidXRlZCBpbiBhbnkgd2F5LAojIGluIGFueSBtZWRpdW0sIHdoZXRoZXIgaW4gd2hvbGUgb3IgaW4gcGFydCwgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24KIyBmcm9tIENhZGVuY2UuIE5vdHdpdGhzdGFuZGluZyBhbnkgcmVzdHJpY3Rpb25zIGhlcmVpbiwgc3ViamVjdCB0byBjb21wbGlhbmNlCiMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIENhZGVuY2Ugc29mdHdhcmUgbGljZW5zZSBhZ3JlZW1lbnQgdW5kZXIKIyB3aGljaCB0aGlzIG1hdGVyaWFsIHdhcyBwcm92aWRlZCwgdGhpcyBtYXRlcmlhbCBtYXkgYmUgY29waWVkIGFuZCBpbnRlcm5hbGx5CiMgZGlzdHJpYnV0ZWQgc29sZWx5IGZvciBpbnRlcm5hbCBwdXJwb3NlcyBmb3IgdXNlIHdpdGggQ2FkZW5jZSB0b29scy4KIwojIFRoaXMgd29yayBpcyBDYWRlbmNlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBhbmQgbWF5IHVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgYmUKIyBnaXZlbiB0byB0aGlyZCBwYXJ0aWVzLCBuZWl0aGVyIGluIG9yaWdpbmFsIG5vciBpbiBtb2RpZmllZCB2ZXJzaW9ucywgd2l0aG91dAojIGV4cGxpY2l0IHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIENhZGVuY2UuIFRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgaGVyZWluIGlzCiMgdGhlIHByb3ByaWV0YXJ5IGFuZCBjb25maWRlbnRpYWwgaW5mb3JtYXRpb24gb2YgQ2FkZW5jZSBvciBpdHMgbGljZW5zb3JzLCBhbmQKIyBpcyBzdXBwbGllZCBzdWJqZWN0IHRvLCBhbmQgbWF5IGJlIHVzZWQgb25seSBieSBDYWRlbmNlJ3MgY3VycmVudCBjdXN0b21lcnMKIyBpbiBhY2NvcmRhbmNlIHdpdGgsIGEgcHJldmlvdXNseSBleGVjdXRlZCBsaWNlbnNlIGFncmVlbWVudCBiZXR3ZWVuIENhZGVuY2UKIyBhbmQgaXRzIGN1c3RvbWVyLgojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUSElTIE1BVEVSSUFMIElTIFBST1ZJREVEIEJZIENBREVOQ0UgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAojIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCiMgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KIyBJTiBOTyBFVkVOVCBTSEFMTCBDQURFTkNFIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwKIyBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAojIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgojIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgIE1BVEVSSUFMLCBFVkVOIElGCiMgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCmlmICB7W2luZm8gZXhpc3RzIHZhcnMoY2hlY2tfdmFycyldICYmICR2YXJzKGNoZWNrX3ZhcnMpfSB7CgogICBzZXQgb3AgW29wZW4gJHZhcnMoc2NyaXB0X2RpcikvY2hlY2tfdmFycy5ycHQgd10KICAgCiAgIGlmIHshW2luZm8gZXhpc3RzIHZhcnMob3Bjb25kcyldfSB7CiAgICAgIHNldCB2YXJzKG9wY29uZHMpICIiCiAgIH0gICAKCiAgIHNldCB2YWxpZF9wcmVmaXhlcyAiXAogICAgICAkdmFycyhsaWJyYXJ5X3NldHMpIFwKICAgICAgJHZhcnMocmNfY29ybmVycykgXAogICAgICAkdmFycyhvcGNvbmRzKSBcCiAgICAgICR2YXJzKGRlbGF5X2Nvcm5lcnMpIFwKICAgICAgJHZhcnMoY29uc3RyYWludF9tb2RlcykgXAogICAgICAkdmFycyhzZXR1cF9hbmFseXNpc192aWV3cykgXAogICAgICAkdmFycyhob2xkX2FuYWx5c2lzX3ZpZXdzKSBcCiAgICAgIGxpYnJhcnlfc2V0IFwKICAgICAgY2RiX2ZpbGUgXAogICAgICBlY2hvX2ZpbGUgXAogICAgICB0aW1lbGliIFwKICAgICAgcmNfY29ybmVyIFwKICAgICAgZGVsYXlfY29ybmVyIFwKICAgICAgY29uc3RyYWludF9tb2RlIFwKICAgICAgd2VsbHRhcHMgXAogICAgICBmaWxsZXJfY2VsbHMgXAogICAgICBtYWlsIFwKICAgICAgcGFydGl0aW9uIFwKICAgICAgaW5pdCBcCiAgICAgIHBsYWNlIFwKICAgICAgcHJlY3RzIFwKICAgICAgY3RzIFwKICAgICAgcG9zdGN0cyBcCiAgICAgIHBvc3RjdHNfaG9sZCBcCiAgICAgIHJvdXRlIFwKICAgICAgcG9zdHJvdXRlIFwKICAgICAgcG9zdHJvdXRlX2hvbGQgIFwKICAgICAgcG9zdHJvdXRlX3NpIFwKICAgICAgcG9zdHJvdXRlX3NpX2hvbGQgXAogICAgICBzaWdub2ZmIFwKICAgICAgYXNzZW1ibGUgXCAKICAgICAgdGllX2NlbGxzIFwKICAgICAgZmlsbGVyX2NlbGxzIFwKICAgICAgd2VsbHRhcHMgXAogICAgICBzZWNvbmRhcnlfcGcgXAogICAgICBhbHdheXNfb25fbmV0cyBcCiAgICAgIGxzZiBjdXN0b20gcnNoIFwgCiAgICAgIHRhZ3MgXAogICAiCiAgIAogICBzZXQgdmFsaWRfc3VmZml4ZXMgIlwKICAgICAgdGltaW5nIHNpIG1pbiBtYXhcCiAgICAgIGxpYnJhcnlfc2V0IFwKICAgICAgcmNfY29ybmVyIFwKICAgICAgUCBWIFQgY2FwX3RhYmxlIHF4X3RlY2hfZmlsZSBxeF9saWJfZGlyXAogICAgICBkZWZfcmVzX2ZhY3RvciBkZWZfY2FwX2ZhY3RvciBkZWZfY2xrX2NhcF9mYWN0b3IgXAogICAgICBkZXRfcmVzX2ZhY3RvciBkZXRfY2FwX2ZhY3RvciBkZXRfY2xrX2NhcF9mYWN0b3IgXAogICAgICB4Y2FwX2ZhY3RvciBcCiAgICAgIHByZV9yb3V0ZV9yZXNfZmFjdG9yIHByZV9yb3V0ZV9jbGtfcmVzX2ZhY3RvciAgcHJlX3JvdXRlX2NhcF9mYWN0b3IgIHByZV9yb3V0ZV9jbGtfY2FwX2ZhY3RvciAgXAogICAgICBwb3N0X3JvdXRlX3Jlc19mYWN0b3IgcG9zdF9yb3V0ZV9jbGtfcmVzX2ZhY3RvciAgcG9zdF9yb3V0ZV9jYXBfZmFjdG9yICBwb3N0X3JvdXRlX2Nsa19jYXBfZmFjdG9yICAKICAgICAgcG9zdF9yb3V0ZV94Y2FwX2ZhY3RvciAgXAogICAgICBzY2FsZV90Y2wgXCAKICAgICAgZGVsYXlfY29ybmVyIFwKICAgICAgZGF0YV9jZWxsX2xhdGUgZGF0YV9jZWxsX2Vhcmx5IGRhdGFfbmV0X2xhdGUgZGF0YV9uZXRfZWFybHkgXAogICAgICBjbG9ja19jZWxsX2xhdGUgY2xvY2tfY2VsbF9lYXJseSBjbG9ja19uZXRfbGF0ZSBjbG9ja19uZXRfZWFybHkgXAogICAgICBjZWxsX2NoZWNrX2xhdGUgY2VsbF9jaGVja19lYXJseSBcCiAgICAgIG9wY29uZCAgb3Bjb25kX2xpYnJhcnkgcG93ZXJfZG9tYWlucyBcCiAgICAgIGNvbnN0cmFpbnRfbW9kZSBcCiAgICAgIGRlcmF0ZV90Y2wgXAogICAgICBwcmVfY3RzX3NkYyBwb3N0X2N0c19zZGMgIGluY3JfY3RzX3NkYyBcIAogICAgICBhY3RpdmVfc2V0dXBfdmlld3MgYWN0aXZlX2hvbGRfdmlld3MgXAogICAgICBwcmVfZW5kY2FwIHBvc3RfZW5kY2FwIFwKICAgICAgY2VsbF9pbnRlcnZhbCByb3dfb2Zmc2V0IGNoZWNrZXJib2FyZCB2ZXJpZnlfcnVsZSBcCiAgICAgIG1heF9nYXAgY2VsbF9pbnRlcnZhbCBjaGVja2VyX2JvYXJkICBcCiAgICAgIG1heF9kaXN0YW5jZSBtYXhfZmFub3V0IG1heF90cmFuIG1heF9kZWxheSBcIAogICAgICBhbHdheXNfb25fYnVmZmVycyBjZWxsX3Bpbl9wYWlycyBuZXRzIG5vbl9kZWZhdWx0X3J1bGUgXAogICAgICBzd2l0Y2hhYmxlIHN3aXRjaF90eXBlIGNoZWNrZXJfYm9hcmQgYmFja190b19iYWNrX2NoYWluIFwKICAgICAgbG9vcF9iYWNrX2F0X2VuZCBjaGVja19oZWlnaHQgdmVyaWZ5X3Jvd3MgZW5hYmxlX2NoYWluIFwKICAgICAgcHJlX3RjbCBwb3N0X3RjbCByZXBsYWNlX3RjbCBza2lwIFwKICAgICAgdG8gc3RlcHMgbGlicmFyeV9maWxlIFwKICAgICAgc2NyaXB0IHF1ZXVlIGhvc3RfbGlzdCBhcmdzIHJlc291cmNlIFwKICAgICAgdmVyYm9zZSB2ZXJib3NpdHlfbGV2ZWwgXAogICAgICB3ZWxsdGFwcywgdGllX2NlbGxzLCBmaWxsZXJfY2VsbHMgXAogICAgICBwYWNfbW9kZSBpbG1fZGlyIGxlZl9maWxlIFwKICAgICAgc3RhcnRpbmdfZGJzIGFzc2VtYmxlX2RicyBcCiAgICAgIGxhdGVuY3lfc2RjIGN0c19zcGVjIFwKICAgICAgZWRpX2NvbmZpZ190Y2wgcW9yX3RjbCBcCiAgICAgIHJwdF9kaXIgc2tpcCBwcmVfdGNsIHBvc3RfdGNsIFwKICAgIgoKICAgaWYge1tpbmZvIGV4aXN0cyB2YXJzKHBvd2VyX2RvbWFpbnMpXX0gewogICAgICBhcHBlbmQgdmFsaWRfcHJlZml4ZXMgJHZhcnMocG93ZXJfZG9tYWlucykKICAgICAgYXBwZW5kIHZhbGlkX3N1ZmZpeGVzICJiYm94IG1heF9nYXAgcnNfZXh0cyIKICAgfQoKICAgc2V0IHZhbGlkX21pZGZpeGVzICJcCiAgICAgIHNldF9kaXN0cmlidXRlX2hvc3QgXAogICAgICBzZXRfbXVsdGlfY3B1X3VzYWdlIFwKICAgICAgc2V0X2Rpc3RyaWJ1dGVfaG9zdCBcCiAgICAgIHNldF9tdWx0aV9jcHVfdXNhZ2UgXAogICAgICBzZXRfcmNfZmFjdG9yIFwKICAgICAgZGVyYXRlX3RpbWluZyBcCiAgICAgIGNyZWF0ZV9yY19jb3JuZXIgXAogICAgICBjcmVhdGVfbGlicmFyeV9zZXQgXAogICAgICBjcmVhdGVfZGVsYXlfY29ybmVyIFwKICAgICAgY3JlYXRlX2NvbnN0cmFpbnRfbW9kZSBcCiAgICAgIGNyZWF0ZV9hbmFseXNpc192aWV3IFwKICAgICAgdXBkYXRlX2RlbGF5X2Nvcm5lciBcCiAgICAgIHVwZGF0ZV9saWJyYXJ5X3NldCBcCiAgICAgIGRlcmF0ZV90aW1pbmcgXAogICAgICBzZXRfZGVmYXVsdF92aWV3IFwKICAgICAgc2V0X3Bvd2VyX2FuYWx5c2lzX21vZGUgXAogICAgICBsb2FkX2NvbmZpZyBcCiAgICAgIGxvYWRfZmxvb3JwbGFuIFwKICAgICAgZ2VuZXJhdGVfdHJhY2tzIFwKICAgICAgbG9hZF9jcGYgXAogICAgICBjb21taXRfY3BmIFwKICAgICAgcmVhZF9hY3Rpdml0eV9maWxlIFwKICAgICAgc3BlY2lmeV9pbG0gXAogICAgICBsb2FkX2lsbV9ub25fc2RjX2ZpbGUgXAogICAgICBpbml0aWFsaXplX3RpbWluZyBcCiAgICAgIGxvYWRfc2NhbiBcCiAgICAgIHNwZWNpZnlfc3BhcmVfZ2F0ZXMgXAogICAgICBzZXRfZG9udF91c2UgXAogICAgICBzZXRfbWF4X3JvdXRlX2xheWVyIFwKICAgICAgc2V0X2Rlc2lnbl9tb2RlIFwKICAgICAgaW5zZXJ0X3dlbGx0YXBzX2VuZGNhcHMgXAogICAgICBsb2FkX2NvbmZpZyBcCiAgICAgIHRpbWVfZGVzaWduIFwKICAgICAgY2hlY2tfZGVzaWduIFwKICAgICAgY2hlY2tfdGltaW5nIFwKICAgICAgcmVwb3J0X3Bvd2VyX2RvbWFpbnMgXAogICAgICBzZXRfZGlzdHJpYnV0ZV9ob3N0IFwKICAgICAgc2V0X211bHRpX2NwdV91c2FnZSBcCiAgICAgIHJlc3RvcmVfZGVzaWduIFwKICAgICAgaW5pdGlhbGl6ZV9zdGVwIFwKICAgICAgICAgc2V0X2Rlc2lnbl9tb2RlIFwKICAgICAgICAgc2V0X2RlbGF5X2NhbF9tb2RlIFwKICAgICAgICAgc2V0X3BsYWNlX21vZGUgXAogICAgICAgICBzZXRfb3B0X21vZGUgXAogICAgICAgICBjbGVhbnVwX3NwZWNpZnlfY2xvY2tfdHJlZSBcCiAgICAgICAgIHNwZWNpZnlfY2xvY2tfdHJlZSBcCiAgICAgIHNwZWNpZnlfanRhZyBcCiAgICAgIHBsYWNlX2p0YWcgXAogICAgICBwbGFjZV9kZXNpZ24gXAogICAgICBhZGRfdGllX2NlbGxzIFwKICAgICAgdGltZV9kZXNpZ24gXAogICAgICBzYXZlX2Rlc2lnbiBcCiAgICAgIHJlcG9ydF9wb3dlciBcCiAgICAgIHZlcmlmeV9wb3dlcl9kb21haW4gXAogICAgICBydW5fY2xwIFwKICAgICAgc2V0X2Rpc3RyaWJ1dGVfaG9zdCBcCiAgICAgIHNldF9tdWx0aV9jcHVfdXNhZ2UgXAogICAgICBpbml0aWFsaXplX3N0ZXAgXAogICAgICAgICBzZXRfZGVzaWduX21vZGUgXAogICAgICAgICBzZXRfaWxtX3R5cGUgXAogICAgICAgICBjbGVhbnVwX3NwZWNpZnlfY2xvY2tfdHJlZSBcCiAgICAgICAgIGNyZWF0ZV9jbG9ja190cmVlX3NwZWMgXAogICAgICAgICBzcGVjaWZ5X2Nsb2NrX3RyZWUgXAogICAgICAgICBzZXRfdXNlZnVsX3NrZXdfbW9kZSBcCiAgICAgICAgIHNldF9vcHRfbW9kZSBcCiAgICAgICAgIHNldF9kZXNpZ25fbW9kZSBcCiAgICAgICAgIHNldF9kZWxheV9jYWxfbW9kZSBcCiAgICAgICAgIHNldF9kb250X3VzZSBcCiAgICAgIG9wdF9kZXNpZ24gXAogICAgICBja19jbG9uZV9nYXRlIFwKICAgICAgc2F2ZV9kZXNpZ24gXAogICAgICByZXBvcnRfcG93ZXIgXAogICAgICB2ZXJpZnlfcG93ZXJfZG9tYWluIFwKICAgICAgcnVuX2NscCBcCiAgICAgIHNldF9kaXN0cmlidXRlX2hvc3QgXAogICAgICBzZXRfbXVsdGlfY3B1X3VzYWdlIFwKICAgICAgaW5pdGlhbGl6ZV9zdGVwIFwKICAgICAgICAgc2V0X2Rlc2lnbl9tb2RlIFwKICAgICAgICAgc2V0X2N0c19tb2RlIFwKICAgICAgICAgc2V0X25hbm9yb3V0ZV9tb2RlIFwKICAgICAgZW5hYmxlX2Nsb2NrX2dhdGVfY2VsbHMgXAogICAgICBjbG9ja19kZXNpZ24gXAogICAgICBkaXNhYmxlX2Nsb2NrX2dhdGVfY2VsbHMgXAogICAgICBydW5fY2xvY2tfZWNvIFwKICAgICAgdXBkYXRlX3RpbWluZyBcCiAgICAgIHRpbWVfZGVzaWduIFwKICAgICAgc2F2ZV9kZXNpZ24gXAogICAgICByZXBvcnRfcG93ZXIgXAogICAgICB2ZXJpZnlfcG93ZXJfZG9tYWluIFwKICAgICAgcnVuX2NscCBcCiAgICAgIHNldF9kaXN0cmlidXRlX2hvc3QgXAogICAgICBzZXRfbXVsdGlfY3B1X3VzYWdlIFwKICAgICAgaW5pdGlhbGl6ZV9zdGVwIFwKICAgICAgICAgc2V0X2Rlc2lnbl9tb2RlIFwKICAgICAgICAgc2V0X2RlbGF5X2NhbF9tb2RlIFwKICAgICAgICAgc2V0X2FuYWx5c2lzX21vZGUgXAogICAgICAgICBzZXRfb3B0X21vZGUgXAogICAgICBvcHRfZGVzaWduIFwKICAgICAgc2F2ZV9kZXNpZ24gXAogICAgICByZXBvcnRfcG93ZXIgXAogICAgICB2ZXJpZnlfcG93ZXJfZG9tYWluIFwKICAgICAgcnVuX2NscCBcCiAgICAgIHNldF9kaXN0cmlidXRlX2hvc3QgXAogICAgICBzZXRfbXVsdGlfY3B1X3VzYWdlIFwKICAgICAgaW5pdGlhbGl6ZV9zdGVwIFwKICAgICAgICAgc2V0X2RvbnRfdXNlIFwKICAgICAgICAgc2V0X29wdF9tb2RlIFwKICAgICAgb3B0X2Rlc2lnbiBcCiAgICAgIHNhdmVfZGVzaWduIFwKICAgICAgcmVwb3J0X3Bvd2VyIFwKICAgICAgdmVyaWZ5X3Bvd2VyX2RvbWFpbiBcCiAgICAgIHJ1bl9jbHAgXAogICAgICBzZXRfZGlzdHJpYnV0ZV9ob3N0IFwKICAgICAgc2V0X211bHRpX2NwdV91c2FnZSBcCiAgICAgIGluaXRpYWxpemVfc3RlcCBcCiAgICAgICAgIHNldF9uYW5vcm91dGVfbW9kZSBcCiAgICAgICAgIGFkZF9maWxsZXJfY2VsbHMgXAogICAgICByb3V0ZV9zZWNvbmRhcnlfcGdfbmV0cyBcCiAgICAgIGNoZWNrX3BsYWNlIFwKICAgICAgcm91dGVfZGVzaWduIFwKICAgICAgcnVuX2Nsb2NrX2VjbyBcCiAgICAgIHNwcmVhZF93aXJlcyBcCiAgICAgIGluaXRpYWxpemVfdGltaW5nIFwKICAgICAgdGltZV9kZXNpZ24gXAogICAgICBzYXZlX2Rlc2lnbiBcCiAgICAgIHJlcG9ydF9wb3dlciBcCiAgICAgIHZlcmlmeV9wb3dlcl9kb21haW4gXAogICAgICBydW5fY2xwIFwKICAgICAgc2V0X2Rpc3RyaWJ1dGVfaG9zdCBcCiAgICAgIHNldF9tdWx0aV9jcHVfdXNhZ2UgXAogICAgICBpbml0aWFsaXplX3N0ZXAgXAogICAgICAgICBzZXRfZGVzaWduX21vZGUgXAogICAgICAgICBzZXRfZXh0cmFjdF9yY19tb2RlIFwKICAgICAgICAgc2V0X2FuYWx5c2lzX21vZGUgXAogICAgICAgICBzZXRfZGVsYXlfY2FsX21vZGUgXAogICAgICBhZGRfbWV0YWxmaWxsIFwKICAgICAgZGVsZXRlX2ZpbGxlcl9jZWxscyBcCiAgICAgIG9wdF9kZXNpZ24gXAogICAgICBhZGRfZmlsbGVyX2NlbGxzIFwKICAgICAgdHJpbV9tZXRhbGZpbGwgXAogICAgICBzYXZlX2Rlc2lnbiBcCiAgICAgIHJlcG9ydF9wb3dlciBcCiAgICAgIHZlcmlmeV9wb3dlcl9kb21haW4gXAogICAgICBydW5fY2xwIFwKICAgICAgc2V0X2Rpc3RyaWJ1dGVfaG9zdCBcCiAgICAgIHNldF9tdWx0aV9jcHVfdXNhZ2UgXAogICAgICBpbml0aWFsaXplX3N0ZXAgXAogICAgICAgICBzZXRfZG9udF91c2VfbW9kZSBcCiAgICAgICAgIHNldF9vcHRfbW9kZSBcCiAgICAgIGRlbGV0ZV9maWxsZXJfY2VsbHMgXAogICAgICBvcHRfZGVzaWduIFwKICAgICAgYWRkX2ZpbGxlcl9jZWxscyBcCiAgICAgIHRyaW1fbWV0YWxmaWxsIFwKICAgICAgc2F2ZV9kZXNpZ24gXAogICAgICByZXBvcnRfcG93ZXIgXAogICAgICB2ZXJpZnlfcG93ZXJfZG9tYWluIFwKICAgICAgcnVuX2NscCBcCiAgICAgIHNldF9kaXN0cmlidXRlX2hvc3QgXAogICAgICBzZXRfbXVsdGlfY3B1X3VzYWdlIFwKICAgICAgaW5pdGlhbGl6ZV9zdGVwIFwKICAgICAgICAgc2V0X2Rlc2lnbl9tb2RlIFwKICAgICAgICAgc2V0X2V4dHJhY3RfcmNfbW9kZSBcCiAgICAgICAgIHNldF9zaV9tb2RlIFwKICAgICAgICAgc2V0X2FuYWx5c2lzX21vZGUgXAogICAgICAgICBzZXRfZGVsYXlfY2FsX21vZGUgXAogICAgICBhZGRfbWV0YWxmaWxsIFwKICAgICAgZGVsZXRlX2ZpbGxlcl9jZWxscyBcCiAgICAgIG9wdF9kZXNpZ24gXAogICAgICBhZGRfZmlsbGVyX2NlbGxzIFwKICAgICAgdHJpbV9tZXRhbGZpbGwgXAogICAgICBzYXZlX2Rlc2lnbiBcCiAgICAgIHJlcG9ydF9wb3dlciBcCiAgICAgIHZlcmlmeV9wb3dlcl9kb21haW4gXAogICAgICBydW5fY2xwIFwKICAgICAgc2V0X2Rpc3RyaWJ1dGVfaG9zdCBcCiAgICAgIHNldF9tdWx0aV9jcHVfdXNhZ2UgXAogICAgICBpbml0aWFsaXplX3N0ZXAgXAogICAgICAgICBzZXRfZGVzaWduX21vZGUgXAogICAgICAgICBzZXRfZG9udF91c2UgXAogICAgICAgICBzZXRfb3B0X21vZGUgXAogICAgICAgICBzZXRfZXh0cmFjdF9yY19tb2RlIFwKICAgICAgICAgc2V0X3NpX21vZGUgXAogICAgICAgICBzZXRfZGVsYXlfY2FsX21vZGUgXAogICAgICAgICBzZXRfYW5hbHlzaXNfbW9kZSBcCiAgICAgIGFkZF9tZXRhbGZpbGwgXAogICAgICBkZWxldGVfZmlsbGVyX2NlbGxzIFwKICAgICAgb3B0X2Rlc2lnbiBcCiAgICAgIGFkZF9maWxsZXJfY2VsbHMgXAogICAgICB0cmltX21ldGFsZmlsbCBcCiAgICAgIHNhdmVfZGVzaWduIFwKICAgICAgcmVwb3J0X3Bvd2VyIFwKICAgICAgdmVyaWZ5X3Bvd2VyX2RvbWFpbiBcCiAgICAgIHJ1bl9jbHAgXAogICAgICBzZXRfZGlzdHJpYnV0ZV9ob3N0IFwKICAgICAgc2V0X211bHRpX2NwdV91c2FnZSBcCiAgICAgIGluaXRpYWxpemVfdGltaW5nIFwKICAgICAgaW5pdGlhbGl6ZV9zdGVwIFwKICAgICAgICAgc2V0X2FuYWx5c2lzX21vZGUgXAogICAgICAgICBzZXRfZXh0cmFjdF9yY19tb2RlIFwKICAgICAgZXh0cmFjdF9yYyBcCiAgICAgIGR1bXBfc3BlZiBcCiAgICAgIHRpbWVfZGVzaWduX3NldHVwIFwKICAgICAgdGltZV9kZXNpZ25faG9sZCBcCiAgICAgIHN0cmVhbV9vdXQgXAogICAgICBzYXZlX29hX2Rlc2lnbiBcCiAgICAgIGNyZWF0ZV9pbG0gXAogICAgICBzdW1tYXJ5X3JlcG9ydCBcCiAgICAgIHZlcmlmeV9jb25uZWN0aXZpdHkgXAogICAgICB2ZXJpZnlfZ2VvbWV0cnkgXAogICAgICB2ZXJpZnlfbWV0YWxfZGVuc2l0eSBcCiAgICAgIHZlcmlmeV9wcm9jZXNzX2FudGVubmEgXAogICAgICBzYXZlX2Rlc2lnbiBcCiAgICAgIHJlcG9ydF9wb3dlciBcCiAgICAgIHZlcmlmeV9wb3dlcl9kb21haW4gXAogICAgICBydW5fY2xwIFwKICAgICAgaW5pdGlhbGl6ZV90aW1pbmcgXAogICAgICBsb2FkX2NwZiBcCiAgICAgIGNvbW1pdF9jcGYgXAogICAgICBydW5fY2xwX2luaXQgXAogICAgICBzYXZlX2luaXRfZGJzIFwKICAgICAgc2V0X2J1ZGdldGluZ19tb2RlIFwKICAgICAgdXBkYXRlX2NvbnN0cmFpbnRfbW9kZSBcCiAgICAgIHNldF9wdG5fdXNlcl9jbnNfZmlsZSBcCiAgICAgIHNldF9wbGFjZV9tb2RlIFwKICAgICAgcGxhY2VfZGVzaWduIFwKICAgICAgc2F2ZV9wbGFjZV9kYnMgXAogICAgICB0cmlhbF9yb3V0ZSBcCiAgICAgIGFzc2lnbl9wdG5fcGlucyBcCiAgICAgIGNoZWNrX3Bpbl9hc3NpZ25tZW50IFwKICAgICAgcmVwb3J0X3VuYWxpZ25lZF9uZXRzIFwKICAgICAgc2V0X3B0bl9waW5fc3RhdHVzIFwKICAgICAgZGVyaXZlX3RpbWluZ19idWRnZXQgXAogICAgICBzYXZlX2J1ZGdldF9kYnMgXAogICAgICBydW5fY2xwIFwKICAgICAgcGFydGl0aW9uIFwKICAgICAgc2F2ZV9wYXJ0aXRpb24gXAogICAgICBhc3NlbWJsZV9kZXNpZ24gXAogICAgICBzcGVjaWZ5X2lsbSBcCiAgICAgIGxvYWRfaWxtX25vbl9zZGNfZmlsZSBcCiAgICAgIGxvYWRfY3BmIFwKICAgICAgY29tbWl0X2NwZiBcCiAgICAgIGluaXRpYWxpemVfdGltaW5nIFwKICAgICAgdXBkYXRlX3RpbWluZyBcCiAgICAgIHByZV9wYWNfdmVyaWZ5X2Nvbm5lY3Rpdml0eSBcCiAgICAgIHByZV9wYWNfdmVyaWZ5X2dlb21ldHJ5IFwKICAgICAgc2V0X21vZHVsZV92aWV3IFwKICAgICAgZGVsZXRlX2ZpbGxlcl9jZWxscyBcCiAgICAgIG9wdF9kZXNpZ24gXAogICAgICBhZGRfZmlsbGVyX2NlbGxzIFwKICAgICAgcG9zdF9wYWNfdmVyaWZ5X2Nvbm5lY3Rpdml0eSBcCiAgICAgIHBvc3RfcGFjX3ZlcmlmeV9nZW9tZXRyeSBcCiAgICIKICAgCiAgIHNldCBwcmVmaXhfY291bnQgMAogICBzZXQgbWlkZml4X2NvdW50IDAKICAgc2V0IHN1ZmZpeF9jb3VudCAwCiAgIAogICBmb3JlYWNoIHZhcmlhYmxlIFthcnJheSBuYW1lcyB2YXJzXSB7CiAgICAgIHNldCBzcGxpdCBbc3BsaXQgJHZhcmlhYmxlICIsIl0KICAgICAgaWYge1tsbGVuZ3RoICRzcGxpdF0gPT0gMX0gewogICAgICAgICBjb250aW51ZQogICAgICB9IGVsc2VpZiB7W2xsZW5ndGggJHNwbGl0XSA9PSAyfSB7CiAgICAgICAgIHNldCBwcmVmaXggW2xpbmRleCAkc3BsaXQgMF0KICAgICAgICAgc2V0IHN1ZmZpeCBbbGluZGV4ICRzcGxpdCAxXQogICAgICAgICBwdXRzICRvcCAiQ2hlY2tpbmcgJHByZWZpeCArICRzdWZmaXgiCiAgICAgICAgIGlmIHtbbHNlYXJjaCAkdmFsaWRfcHJlZml4ZXMgJHByZWZpeF0gPT0gLTF9IHsKICAgICAgICAgICAgaW5jciBwcmVmaXhfY291bnQKICAgICAgICAgICAgcHV0cyAkb3AgIjxGRj4gRVJST1IgVW5rbm93biBwcmVmaXggLT4gJHByZWZpeCAoJHZhcmlhYmxlKSIKICAgICAgICAgICAgcHV0cyAiPEZGPiBFUlJPUiBVbmtub3duIHByZWZpeCAtPiAkcHJlZml4ICgkdmFyaWFibGUpIgogICAjICAgICAgICAgYXBwZW5kIGNvbW1hbmRzICIjICBFUlJPUjogQSB2ZXJpbG9nIG5ldGxpc3QgZmlsZSBtdXN0IGJlIGRlZmluZWRcbiIKICAgICAgICAgICAgc2V0IGVycm9ycygkZXJyb3JfY291bnQpICJVbmtub3duIHByZWZpeCAtPiAkcHJlZml4ICgkdmFyaWFibGUpIgogICAgICAgICAgICBpbmNyIGVycm9yX2NvdW50CiAgICAgICAgIH0gCiAgICAgICAgIGlmIHtbbHNlYXJjaCAkdmFsaWRfc3VmZml4ZXMgJHN1ZmZpeF0gPT0gLTF9IHsKICAgICAgICAgICAgaW5jciBzdWZmaXhfY291bnQKICAgICAgICAgICAgcHV0cyAkb3AgIjxGRj4gRVJST1IgVW5rbm93biBzdWZmaXggLT4gJHN1ZmZpeCAoJHZhcmlhYmxlKSIKICAgICAgICAgICAgcHV0cyAiPEZGPiBFUlJPUiBVbmtub3duIHN1ZmZpeCAtPiAkc3VmZml4ICgkdmFyaWFibGUpIgogICAgICAgICAgICBzZXQgZXJyb3JzKCRlcnJvcl9jb3VudCkgIlVua25vd24gc3VmZml4IC0+ICRwcmVmaXggKCR2YXJpYWJsZSkiCiAgICAgICAgICAgIGluY3IgZXJyb3JfY291bnQKICAgICAgICAgfQogICAgICB9IGVsc2VpZiB7W2xsZW5ndGggJHNwbGl0XSA9PSAzfSB7CiAgICAgICAgIHNldCBwcmVmaXggW2xpbmRleCAkc3BsaXQgMF0KICAgICAgICAgc2V0IG1pZGZpeCBbbGluZGV4ICRzcGxpdCAxXQogICAgICAgICBzZXQgc3VmZml4IFtsaW5kZXggJHNwbGl0IDJdCiAgICAgICAgIHB1dHMgJG9wICJDaGVja2luZyAkcHJlZml4ICsgJG1pZGZpeCArICRzdWZmaXgiCiAgICAgICAgIGlmIHtbbHNlYXJjaCAkdmFsaWRfcHJlZml4ZXMgJHByZWZpeF0gPT0gLTF9IHsKICAgICAgICAgICAgaW5jciBwcmVmaXhfY291bnQKICAgICAgICAgICAgcHV0cyAkb3AgIjxGRj4gRVJST1IgVW5rbm93biBwcmVmaXggLT4gJHByZWZpeCAoJHZhcmlhYmxlKSIKICAgICAgICAgICAgcHV0cyAiPEZGPiBFUlJPUiBVbmtub3duIHByZWZpeCAtPiAkcHJlZml4ICgkdmFyaWFibGUpIgogICAgICAgICAgICBzZXQgZXJyb3JzKCRlcnJvcl9jb3VudCkgIlVua25vd24gcHJlZml4IC0+ICRwcmVmaXggKCR2YXJpYWJsZSkiCiAgICAgICAgICAgIGluY3IgZXJyb3JfY291bnQKICAgICAgICAgfSAKICAgICAgICAgaWYge1tsc2VhcmNoICR2YWxpZF9taWRmaXhlcyAkbWlkZml4XSA9PSAtMX0gewogICAgICAgICAgICBpbmNyIG1pZGZpeF9jb3VudAogICAgICAgICAgICBwdXRzICRvcCAiPEZGPiBFUlJPUiBVbmtub3duIG1pZGZpeCAtPiAkcHJlZml4ICgkdmFyaWFibGUpIgogICAgICAgICAgICBwdXRzICI8RkY+IEVSUk9SIFVua25vd24gbWlkZml4IC0+ICRwcmVmaXggKCR2YXJpYWJsZSkiCiAgICAgICAgICAgIHNldCBlcnJvcnMoJGVycm9yX2NvdW50KSAiVW5rbm93biBtaWRmaXggLT4gJG1pZGZpeCAoJHZhcmlhYmxlKSIKICAgICAgICAgICAgaW5jciBlcnJvcl9jb3VudAogICAgICAgICB9IAogICAgICAgICBpZiB7W2xzZWFyY2ggJHZhbGlkX3N1ZmZpeGVzICRzdWZmaXhdID09IC0xfSB7CiAgICAgICAgICAgIGluY3Igc3VmZml4X2NvdW50CiAgICAgICAgICAgIHB1dHMgJG9wICI8RkY+IFdBUk5JTkcgVW5rbm93biBzdWZmaXggLT4gJHN1ZmZpeCAoJHZhcmlhYmxlKSIKICAgICAgICAgICAgcHV0cyAiPEZGPiBXQVJOSU5HIFVua25vd24gc3VmZml4IC0+ICRzdWZmaXggKCR2YXJpYWJsZSkiCiAgICAgICAgICAgIHNldCBlcnJvcnMoJGVycm9yX2NvdW50KSAiVW5rbm93biBzdWZmaXggLT4gJHByZWZpeCAoJHZhcmlhYmxlKSIKICAgICAgICAgICAgaW5jciBlcnJvcl9jb3VudAogICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgIGNvbnRpbnVlCiAgICAgIH0KICAgfQogICAKICAgY2xvc2UgJG9wCgp9Cg==