MjAwMy0wMy0zMCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIGNvbmZpZ3VyZS5hYywgTkVXUzogVmVyc2lvbiA0LjQuOTYuCgkqIHN0cmFjZS5zcGVjLCBkZWJpYW4vY2hhbmdlbG9nOiA0LjQuOTYtMS4KCjIwMDMtMDItMjYgIFN0dWFydCBNZW5lZnkgPHN0dWFydC5tZW5lZnlAc3QuY29tPgoKCVZhcmlvdXMgZml4ZXMgZm9yIFN1cGVySCBbU0hdOgoJKiBtZW0uYyAoc3lzX29sZF9tbWFwKTogbW1hcCgpIHBhcmFtZXRlcnMgcGFzc2VkIGluIHJlZ2lzdGVycwoJKiBuZXQuYyAoc3lzX3BpcGUpLCBzeXNjYWxsLmMgKGdldHJ2YWwyKTogcGlwZSgpIHJlc3VsdHMgcmV0dXJuZWQKCWluIHJlZ2lzdGVycwoJKiBwcm9jZXNzLmMgKGNoYW5nZV9zeXNjYWxsKTogRml4ZWQgcmVnaXN0ZXIgd2hpY2ggaG9sZHMgc3lzdGVtCgljYWxsIG51bWJlcgoJKiB1dGlsLmMgKGFyZzBfb2Zmc2V0LCBhcmcxX29mZnNldCk6IHByb3ZpZGUgZGVmaW5pdGlvbgoJKiBNYWtlZmlsZS5hbTogQWRkZWQgbmV3IGZpbGVzIGluIGxpbnV4L3NoCgkqIGxpbnV4L3NoL3N5c2NhbGxlbnQuaDogTmV3IGZpbGUuCgkqIGxpbnV4L3NoL2Vycm5vZW50Lmg6IE5ldyBmaWxlLgoJKiBsaW51eC9zaC9pb2N0bGVudC5oOiBOZXcgZmlsZS4KCSogbGludXgvc2gvc2lnbmFsZW50Lmg6IE5ldyBmaWxlLgoKCSogbGludXgvaW9jdGxlbnQuc2g6IFRha2UgYW4gYXJnIGZvciBsb2NhdGlvbiBvZiBoZWFkZXIgZmlsZXMKCSogc3lzY2FsbGVudC5zaDogUmVwbGFjZWQgbG9zdCAkCgoyMDAzLTAzLTMwICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogdGltZS5jIFtMSU5VWF06IEhhbmRsZSBuZXcgTGludXggMi41IGNsb2NrL3RpbWVyIHN5c2NhbGxzLgoJKiBsaW51eC9zeXNjYWxsLmgsIGxpbnV4L3N5c2NhbGxlbnQuaCwgbGludXgvZHVtbXkuaDogTGlrZXdpc2UuCglGcm9tIFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LgoKCSogbGludXgvc3lzY2FsbGVudC5oOiBVc2Ugc3lzX2dldHJsaW1pdCBmb3IgMTkxLgoJVXNlIG5hbWUgIm9sZF9nZXRybGltaXQiIGZvciA3Ni4KCVJlcG9ydGVkIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LgoKMjAwMy0wMy0xOCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIHByb2Nlc3MuYyBbTElOVVhdIChzeXNfY2xvbmUpOiBEb24ndCBkZXJlZmVyZW5jZSBwYXJlbnRfdGlkIGFyZ3VtZW50LgoKMjAwMy0wMy0xNyAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIGxpbnV4L3g4Nl82NC9zeXNjYWxsZW50Lmg6IGNsb25lIHRha2VzIDUgYXJncy4KCSogcHJvY2Vzcy5jIFtMSU5VWF0gKHN5c19jbG9uZSkgW1g4Nl82NF06IEZpeCBhcmd1bWVudCBvcmRlci4KCjIwMDMtMDMtMTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBsaW51eC94ODZfNjQvc3lzY2FsbGVudC5oOiBBZGQgZXhpdF9ncm91cCBzeXNjYWxsIGF0IDIzMS4KCjIwMDMtMDMtMTQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBsaW51eC94ODZfNjQvc3lzY2FsbGVudC5oOiBVcGRhdGUgYW5kIGFkZCBtYW55IDIuNSBzeXNjYWxscy4KCgkqIGxpbnV4L2lhNjQvc3lzY2FsbGVudC5oOiBjbG9uZSB0YWtlcyA1IGFyZ3VtZW50cy4KCSogcHJvY2Vzcy5jIFtMSU5VWCAmJiBJQTY0XSAoQVJHXyopOiBVcGRhdGUgZm9yIDIuNSBjbG9uZSBjYWxscy4KCjIwMDMtMDMtMTIgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBsaW51eC9pYTY0L3N5c2NhbGxlbnQuaDogRml4IGFyZyBjb3VudHMgZm9yIGNsb25lIGFuZCBjbG9uZTIuCglVc2Ugc3lzX2Nsb25lIGZvciBjbG9uZTIuCgkqIGxpbnV4L3N5c2NhbGwuaDogRG9uJ3QgZGVjbGFyZSBzeXNfY2xvbmUyLgoJKiBwcm9jZXNzLmMgKHN5c19jbG9uZSk6IFJld3JpdHRlbiB0byBoYW5kbGUgYm90aCBmbGF2b3JzLAoJcHJpbnQgYWxsIGV4dHJhIGFyZ3MgZGVwZW5kaW5nIG9uIGZsYWcgYml0cy4KCShzeXNfY2xvbmUyKTogRnVuY3Rpb24gcmVtb3ZlZC4KCgkqIGxpbnV4L2lhNjQvc3lzY2FsbGVudC5oOiBBZGQgYSBidW5jaCBvZiAyLjUgc3lzY2FsbHMuCgoyMDAzLTAzLTA0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogc3lzY2FsbC5jIChnZXRfc2NubykgW0lBNjRdOiBEbyBUQ0JfV0FJVEVYRUNWRSBjaGVjayBvbmx5IHdoZW4KCVRDQl9JTlNZU0NBTEwgaXMgY2xlYXIsIGxpa2Ugb3RoZXIgcGxhdGZvcm1zIGRvLgoKMjAwMy0wMy0wNCAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CgoJKiBtZW0uYyBbTElOVVhdIChzeXNfcmVtYXBfZmlsZV9wYWdlcyk6IE5ldyBmdW5jdGlvbi4KCSogbGludXgvc3lzY2FsbC5oOiBEZWNsYXJlIGl0LgoJKiBsaW51eC9zeXNjYWxsZW50Lmg6IFVzZSBpdC4KCSogbGludXgvcG93ZXJwYy9zeXNjYWxsZW50Lmg6IExpa2V3aXNlLgoKCSogcHJvY2Vzcy5jIFtMSU5VWF0gKHN5c19mdXRleCk6IE9taXQgZmluYWwgaWYgb3AgaXMgbm90IEZVVEVYX1dBSVQuCgoyMDAzLTAyLTI2ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogY29uZmlndXJlLmFjOiBGaXggdHlwbyBpbiBuZXRpbmV0L2luLmggY2hlY2suCglBbHNvIGluY2x1ZGUgPHN5cy90eXBlcy5oPiBhbmQgPHN5cy9zb2NrZXQuaD4gYmVmb3JlIDxuZXRpbmV0L2luLmg+LgoJUmVwb3J0ZWQgYnkgQWxleCBTZW1lbnlha2EgPGFsZXhzQHNuYXJrLnJpbmV0LnJ1Pi4KCjIwMDMtMDItMjQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBjb25maWd1cmUuYWMsIE5FV1M6IFZlcnNpb24gNC40Ljk1LgoJKiBzdHJhY2Uuc3BlYywgZGViaWFuL2NoYW5nZWxvZzogNC40Ljk1LTEuCgoJKiBwcm9jZXNzLmMgKHN5c19nZXRyZXNnaWQpOiBGaXggdHlwb3MgaW4gYXJndW1lbnQgYWNjZXNzLgoKMjAwMy0wMi0yMyAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIHByb2Nlc3MuYyAoc3lzX2dldHJlc3VpZCk6IEZpeCB0eXBvcyBpbiBhcmd1bWVudCBhY2Nlc3MuCglSZXBvcnRlZCBieSBBbnRvbiBCbGFuY2hhcmQgPGFudG9uQHNhbWJhLm9yZz4uCgoyMDAzLTAyLTE5ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogY29uZmlndXJlLmFjLCBORVdTOiBWZXJzaW9uIDQuNC45NC4KCSogc3RyYWNlLnNwZWMsIGRlYmlhbi9jaGFuZ2Vsb2c6IDQuNC45NC0xLgoKCSogdmVyc2lvbi5jOiBSZW1vdmVkLgoJKiBNYWtlZmlsZS5hbSAoc3RyYWNlX1NPVVJDRVMpOiBSZW1vdmUgaXQuCgkqIHN0cmFjZS5jOiBVc2UgUEFDS0FHRV9OQU1FIGFuZCBWRVJTSU9OIG1hY3JvcyBpbnN0ZWFkIG9mIHZlcnNpb24gdmFyLgoKCUZyZWVCU0QgcmZvcmsgc3VwcG9ydCBjaGFuZ2VzIGZyb20gUnVzcyBDb3ggPHJzY0BwbGFuOS5iZWxsLWxhYnMuY29tPjoKCSogc3lzY2FsbC5jIChpbnRlcm5hbF9zeXNjYWxsKTogSGFuZGxlIFNZU19yZm9yayB3aXRoIGludGVybmFsX2ZvcmsuCgkqIHByb2Nlc3MuYyAoaW50ZXJuYWxfZm9yaykgW1NZU19yZm9ya106IEJhaWwgaWYgUkZQUk9DIGZsYWcgbm90IHNldC4KCjIwMDMtMDEtMjMgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBzaWduYWwuYzogUmVvcmRlciAjaWZkZWZzIHNvIEhBVkVfQVNNX1NJR0NPTlRFWFRfSCBkb2Vzbid0IG1hdHRlciBvbgoJU1BBUkMsIHdoaWNoIGRvZXNuJ3QgdXNlIHRoZSBoZWFkZXIgcmVnYXJkbGVzcy4KCgkqIHV0aWwuYyBbTElOVVggJiYgU1BBUkNdOiBEbyByZW5hbWluZyBrbHVkZ2VzIGFyb3VuZCA8YXNtL3JlZy5oPgoJbGlrZSBzaWduYWwuYyBkb2VzLgoKCSogbGludXgvc3BhcmMvc3lzY2FsbC5oOiBEZWNsYXJlIHN5c19nZXRkZW50czY0LCBzeXNfbGxzZWVrLgoKCSogbGludXgvZHVtbXkuaCBbISBTWVNfZ2V0cG1zZ10gKHN5c19nZXRwbXNnKTogI2RlZmluZSB0byBwcmludGFyZ3MuCglbISBTWVNfcHV0cG1zZ10gKHN5c19wdXRwbXNnKTogTGlrZXdpc2UuCgoJKiBwcm9jZXNzLmM6IFJlb3JkZXIgaW5jbHVkZXMgdG8gcHV0IHN5cy9yZWcuaCBiZWZvcmUgbGludXgvcHRyYWNlLmgsCglzaW5jZSB0aGV5IGNhbiBjb25mbGljdC4KCjIwMDMtMDEtMjEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBzdHJhY2UuYyAodXNhZ2UpOiBPbWl0IC16LCBzaW5jZSBpdCBoYXMgbmV2ZXIgd29ya2VkIHByb3Blcmx5LgoJKiBORVdTOiBMaWtld2lzZS4KCgkqIHN0cmFjZS5jIChtYWluKTogR3JvayBuZXcgb3B0aW9uIGAtRSB2YXI9dmFsJyBvciBgLUUgdmFyJyB0byBwdXQKCXZhcj12YWwgaW4gZW52aXJvbiBvciB0byByZW1vdmUgdmFyLCByZXNwZWN0aXZlbHkuCgkodXNhZ2UpOiBNZW50aW9uIGl0LgoJKiBzdHJhY2UuMSwgTkVXUzogRG9jdW1lbnQgaXQuCgoJKiBjb25maWd1cmUuYWMsIE5FV1M6IFZlcnNpb24gNC40LjkzLgoJKiBzdHJhY2Uuc3BlYywgZGViaWFuL2NoYW5nZWxvZzogNC40LjkzLTEuCgkqIHN0cmFjZS5zcGVjIChTb3VyY2UwKTogVXNlIHN0cmFjZS1WRVJTSU9OLnRhci5iejIgbm93LgoKMjAwMy0wMS0yMCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIGRlZnMuaCBbTElOVVhdIFtTMzkwIHx8IFMzOTBYXSAoVENCX1dBSVRFWEVDVkUpOiBEZWZpbmUgaXQuCgkqIHN5c2NhbGwuYyAoZ2V0X3Njbm8sIHN5c2NhbGxfZml4dXApIFtMSU5VWF0gW1MzOTAgfHwgUzM5MFhdOiBIYW5kbGUKCVRDQl9XQUlURVhFQ1ZFIHN0YXRlIHdpdGggc3BlY2lhbCBrbHVkZ2VzLgoKCSogcHJvY2Vzcy5jIFtMSU5VWF0gKHN5c19jbG9uZSkgW1MzOTAgfHwgUzM5MFhdOiBBcmd1bWVudCBvcmRlciBpcwoJcmV2ZXJzZWQgZnJvbSBvdGhlciBhcmNoaXRlY3R1cmVzLgoKCSogcHJvY2Vzcy5jIChzeXNfZXhlY3ZlKSBbTElOVVhdOiBNYWtlIHNldHRpbmcgVENCX1dBSVRFWEVDVkUgZmxhZwoJY29uZGl0aW9uYWwgb24gW1RDQl9XQUlURVhFQ1ZFXSBpbnN0ZWFkIG9mIGxpc3Qgb2YgcHJvY2Vzc29ycy4KCgkqIHV0aWwuYyAocmVzdG9yZV9hcmcwKTogRXZhbHVhdGUgYXJncyBpbiBuby1vcCBkZWZucy4KCgkqIHV0aWwuYyBbUzM5MCB8fCBTMzkwWF0gKGFyZzBfb2Zmc2V0LCBhcmcxX29mZnNldCk6IEZpeCBkZWZpbml0aW9ucwoJZm9yIGNsb25lIGNhbGwgb24gUzM5MC4gIEZyb20gTWljaGFlbCBIb2x6aGV1IDxob2x6aGV1QGRlLmlibS5jb20+LgoKMjAwMy0wMS0xNyAgQW50b24gQmxhbmNoYXJkIDxhbnRvbkBzYW1iYS5vcmc+CgoJKiB1dGlsLmMgW0xJTlVYXSAoc2V0YnB0KTogSGFuZGxlIFNZU192Zm9yayBsaWtlIFNZU19mb3JrLgoKCSogbGludXgvc3lzY2FsbC5oIChTWVNfc29ja2V0X3N1YmNhbGwpOiAyNTYgYWxzbyBmb3IgUE9XRVJQQy4KCjIwMDMtMDEtMTQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBsaW51eC9wb3dlcnBjL2Vycm5vZW50Lmg6IEFkZCBtaXNzaW5nIGVycm5vcy4KCSogbGludXgvcG93ZXJwYy9pb2N0bGVudC5oOiBVcGRhdGUgaW9jdGwgdmFsdWVzLgoJRnJvbSBBbnRvbiBCbGFuY2hhcmQgPGFudG9uQHNhbWJhLm9yZz4uCgoJKiBpby5jIFtMSU5VWF0gKHN5c19wcmVhZCwgc3lzX3B3cml0ZSk6IEZpeCBsYXN0IGNoYW5nZS4KCUZyb20gQW50b24gQmxhbmNoYXJkIDxhbnRvbkBzYW1iYS5vcmc+LgoKCSogbGludXgvaHBwYS9zeXNjYWxsZW50Lmg6IFVzZSBzeXNfZ2V0ZGVudHM2NCwgc3lzX3RydW5jYXRlNjQsCglzeXNfZnRydW5jYXRlNjQsIGluc3RlYWQgb2YgcHJpbnRhcmdzLCBmb3IgdGhvc2Ugc3lzY2FsbHMuCgkqIGxpbnV4L21pcHMvc3lzY2FsbGVudC5oOiBMaWtld2lzZS4KCSogbGludXgvcG93ZXJwYy9zeXNjYWxsZW50Lmg6IExpa2V3aXNlLgoJKiBsaW51eC9zMzkwL3N5c2NhbGxlbnQuaDogTGlrZXdpc2UuCgkqIGxpbnV4L3NwYXJjL3N5c2NhbGxlbnQuaDogTGlrZXdpc2UuCgoJKiBsaW51eC9zeXNjYWxsLmggKFNZU19zb2NrZXRfc3ViY2FsbCk6IE9ubHkgMjU2IGZvciBTMzkwLCBTMzkwWC4KCUFsbCBvdGhlcnMgYXQgdGhlIG1vbWVudCB1c2UgbGludXgvc3lzY2FsbGVudC5oLCB3aGVyZSBpdCdzIDMwMC4KCgkqIHN0cmFjZS4xOiBVcGRhdGUgYnVnIHJlcG9ydGluZyBpbmZvLgoKCSogcmVzb3VyY2UuYyBbTElOVVhdIChxdW90YWNtZHMpOiBHcm9rIG5ldyBjb21tYW5kIGVuY29kaW5ncy4KCUZyb20gTmF0aGFuIFNjb3R0IDxuYXRoYW5zQGRlYmlhbi5vcmc+LgoKCSogY29uZmlndXJlLmFjLCBORVdTOiBWZXJzaW9uIDQuNC45Mi4KCSogc3RyYWNlLnNwZWMsIGRlYmlhbi9jaGFuZ2Vsb2c6IDQuNC45Mi0xLgoKCSogY29uZmlndXJlLmFjOiBNYXRjaCBwb3dlcnBjKiAoaW5jbHVkZXMgcG93ZXJwYzY0KSwgYW5kIGRvbid0IG1hdGNoCglwcGMgKG5ldmVyIGNvbWVzIG91dCBvZiBjb25maWcuc3ViKS4KCgkqIHByb2Nlc3MuYyAoc3lzX3B0cmFjZSk6IFVzZSAjbHggZm9ybWF0IGZvciBhZGRyZXNzIGFyZ3VtZW50LgoJW1BPV0VSUENdOiBVc2Ugc2l6ZW9mKHVuc2lnbmVkIGxvbmcpIGluIHBsYWNlIG9mIDQgZm9yIG11bHRpcGxpZXJzLgoJKiBwcm9jZXNzLmMgW1BPV0VSUENdOiBMaWtld2lzZS4KCSogc2lnbmFsLmMgKHN5c19zaWdyZXR1cm4pIFtQT1dFUlBDXTogTGlrZXdpc2UuCgkqIHN5c2NhbGwuYyAoZ2V0X3Njbm8pIFtQT1dFUlBDXTogTGlrZXdpc2UuCgkqIHV0aWwuYyBbUE9XRVJQQ106IExpa2V3aXNlLgoJKHByaW50bnVtKTogVXNlIGxvbmcgZm9yIE5VTS4KCUZyb20gQW50b24gQmxhbmNoYXJkIDxhbnRvbkBzYW1iYS5vcmc+LgoKCSogZGVmcy5oIChBTElHTjY0KTogRml4IGRlZm4gZm9yIFBQQywgc2FtZSBhcyBGcmVlQlNEIG9uZS4KCgkqIHV0aWwuYyBbTElOVVhdIChyZXN0b3JlX2FyZzAsIHJlc3RvcmVfYXJnMSk6IE5ldyBtYWNyb3MsIGRlZmluZWQKCWFwcHJvcHJpYXRlbHkgdmlhIHNldF9hcmcwIG9yIG5vLW9wcyBmb3IgZWFjaCBhcmNoaXRlY3R1cmUuCgkoY2xlYXJicHQpOiBVc2UgdGhvc2UgaW5zdGVhZCBvZiBzZXRfYXJnMCBhbmQgc2V0X2FyZzEuCgoJKiBkZWZzLmggW19MQVJHRUZJTEU2NF9TT1VSQ0VdIChfTEZTNjRfTEFSR0VGSUxFKTogRGVmaW5lIGl0LgoJKiBsaW51eC9zeXNjYWxsZW50Lmg6IFVzZSBzeXNfZ2V0ZGVudHM2NCwgc3lzX3RydW5jYXRlNjQsCglzeXNfZnRydW5jYXRlNjQsIGluc3RlYWQgb2YgcHJpbnRhcmdzLCBmb3IgdGhvc2Ugc3lzY2FsbHMuCgoJKiBwcm9jZXNzLmM6IFVzZSA8bGludXgvcHRyYWNlLmg+IHJlZ2FyZGxlc3Mgb2YgPHN5cy9yZWcuaD4uCgkoc3lzX3B0cmFjZSk6IFVzZSBwcmludHh2YWwuCgkocHRyYWNlX2NtZHMpOiBNYWtlIFBUUkFDRV9HRVRSRUdTIGV0IGFsIGNvbmRpdGlvbmFsIG9uICNpZmRlZiBQVFJBQ0VfKgoJaW5zdGVhZCBvZiBvbmx5ICNpZmRlZiBTVU5PUzQuICBBZGQgUFRSQUNFX1tHU11FVEZQWFJFR1MuCgoJKiBpcGMuYyAoUFJJTlRDVEwpOiBOZXcgbWFjcm8uICAjaWZkZWYgSVBDXzY0LCBmYWN0b3Igb3V0IHRoZSBmbGFnIGFuZAoJcHJpbnQgaXQgYmVmb3JlIHVzaW5nIHByaW50eHZhbC4KCShzeXNfbXNnY3RsLCBzeXNfc2VtY3RsLCBzeXNfc2htY3RsKTogVXNlIGl0LgoKMjAwMy0wMS0xMyAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIGNvbmZpZy5ndWVzczogVXBkYXRlIGZyb20gZnRwOi8vZnRwLmdudS5vcmcvcHViL2dudS9jb25maWcvLAoJdGltZXN0YW1wIDIwMDMtMDEtMTAuCgkqIGNvbmZpZy5zdWI6IExpa2V3aXNlLCB0aW1lc3RhbXAgMjAwMy0wMS0wMy4KCSogaW5zdGFsbC1zaDogVXBkYXRlIGZyb20gQXV0b21ha2UgMS43LjIuCgoJKiBsaW51eC9wb3dlcnBjL3NpZ25hbGVudC5oOiBBZGQgU0lHUlRNSU4uCglGcm9tIEFudG9uIEJsYW5jaGFyZCA8YW50b25Ac2FtYmEub3JnPi4KCgkqIGxpbnV4L3Bvd2VycGMvc3lzY2FsbGVudC5oOiBBZGQgbWlzc2luZyBzeXN0ZW0gY2FsbHMuCglEZWNvZGUgbW9yZSBzeXN0ZW0gY2FsbHMsIHdlIHdlcmUganVzdCBwcmludGFyZ3MgZm9yIG1hbnkgdGhpbmdzLgoJUmVtb3ZlIHNvbWUgeDg2LXNwZWNpZmljIHN5c3RlbSBjYWxscy4KCVJlbW92ZSB0d28gc3lzY2FsbHMgYmV0d2VlbiB0aGUgc29ja2V0IGFuZCBpcGMgc3lzY2FsbHMsCglpdCB3YXMgcmVzdWx0aW5nIGluIGFsbCBJUEMgc3lzY2FsbHMgYmVpbmcgb2ZmIGJ5IHR3by4KCgkqIGlvY3RsLmMgKGlvY3RsX2RlY29kZSkgW1BPV0VSUENdOiBEZWNvZGUgdGVybSBpb2N0bHMgbGlrZSBBbHBoYS4KCUZyb20gQW50b24gQmxhbmNoYXJkIDxhbnRvbkBzYW1iYS5vcmc+LgoKCSogZGVmcy5oIFtQT1dFUlBDXSAoVUVTUCwgRUlQLCBFQVgsIE9SSUdfRUFYKTogUmVtb3ZlIHRoaXMgY3J1ZnQuCglbTElOVVggJiYgUE9XRVJQQyAmJiAhX19wb3dlcnBjNjRfX10gKEFMSUdONjQpOiBOZXcgbWFjcm8uCgkqIGlvLmMgKHN5c19wcmVhZCwgc3lzX3B3cml0ZSk6IFVzZSBBTElHTjY0LgoJRnJvbSBBbnRvbiBCbGFuY2hhcmQgPGFudG9uQHNhbWJhLm9yZz4uCgoJKiB0ZXJtLmMgW0xJTlVYXTogR2V0IGtlcm5lbCBkZWZpbml0aW9uIG9mIHN0cnVjdCB0ZXJtaW9zLgoJRnJvbSBBbnRvbiBCbGFuY2hhcmQgPGFudG9uQHNhbWJhLm9yZz4uCgoJKiBsaW51eC9pb2N0bGVudC5zaDogTG9vayBpbiBzb3VuZC8gZGlyZWN0b3J5IHRvby4KCUZyb20gQW50b24gQmxhbmNoYXJkIDxhbnRvbkBzYW1iYS5vcmc+LgoKCSogZGVzYy5jIChwcmludGZsb2NrNjQpOiBGaXggQUREUiBhcmd1bWVudCB0eXBlLgoJRnJvbSBBbnRvbiBCbGFuY2hhcmQgPGFudG9uQHNhbWJhLm9yZz4uCgoJKiBzdHJhY2UuYyBbISBIQVZFX1NUUlNJR05BTF06IENsZWFuIHVwICNpZmRlZnMgb24gZGVjbHMgZm9yCglzeXNfc2lnbGlzdCBhbmQgX3N5c19zaWdsaXN0LgoJUmVwb3J0ZWQgYnkgSm9obiBIdWdoZXMgPGpvaG5AQ2FsdmEuQ09NPi4KCgkqIG5ldC5jOiBIQVZFX09QVEhEUiAtPiBIQVZFX1NUUlVDVF9PUFRIRFIKCVJlcG9ydGVkIGJ5IEpvaG4gSHVnaGVzIDxqb2huQENhbHZhLkNPTT4uCgoJKiBsaW51eC9zeXNjYWxsLmggW0FSTV0gKFNZU19zb2NrZXRfc3ViY2FsbCk6IFNldCB0byAzMDAuCgoyMDAzLTAxLTEwICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogY29uZmlndXJlLmFjLCBORVdTOiBWZXJzaW9uIDQuNC45MS4KCSogc3RyYWNlLnNwZWMsIGRlYmlhbi9jaGFuZ2Vsb2c6IDQuNC45MS0xCgoJKiB1dGlsLmMgW0xJTlVYICYmIFg4Nl82NF0gKGFyZzBfb2Zmc2V0LCBhcmcxX29mZnNldCk6IFVzZSBjb3JyZWN0Cgl2YWx1ZXMgZm9yIHg4Ni02NCwgY29uZGl0aW9uYWwgb24gY3VycmVudF9wZXJzb25hbGl0eS4KCgkqIHN0cmFjZS5jIChkcm9wdGNiKTogQ2xlYXIgZmxhZ3Mgd29yZCBiZWZvcmUgY2FsbGluZyByZWJ1aWxkX3BvbGx2LgoKCSogY29uZmlndXJlLmFjOiBDaGVjayBzdHJ1Y3QgVF9jb25uX3JlcyBmb3IgUVVFVUVfcHRyIG9yIEFDQ0VQVE9SX2lkLgoJKiBzdHJlYW0uYyAocHJpbnRfdHJhbnNwb3J0X21lc3NhZ2UpOiBVc2UgI2lmZGVmcyBmb3IgdGhvc2UgbWVtYmVycy4KCgkqIHN0cmFjZS5jIChyZWJ1aWxkX3BvbGx2KTogRml4IHR5cG86IHN0cnVjdCBwb2xsIC0+IHN0cnVjdCBwb2xsZmQuCgoJKiBjb25maWd1cmUuYWM6IEZpeCBzaWdpbmZvX3Qvc2lnX2F0b21pY190IGNoZWNrcy4KCVVzZSBwcmVyZXF1aXNpdGUgI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4gZm9yIG5ldGluZXQvKi5oIGNoZWNrcy4KCgkqIHN0cmFjZS5jIChwZmQydGNiKTogRml4IGZvciBuZXcgdGNidGFiIHR5cGUuCgkocmVidWlsZF9wb2xsdik6IExpa2V3aXNlLgoJKGRldGFjaCk6IFB1dCB2YXJpYWJsZXMgdXNlZCB1bmRlciBbTElOVVhdIGluc2lkZSAjaWZkZWYuCgoJKiBwcm9jZXNzLmMgKGNoYW5nZV9zeXNjYWxsKSBbUE9XRVJQQ106IEFkZCBtaXNzaW5nIHJldHVybi4KCSogdXRpbC5jIFtQT1dFUlBDXSAoYXJnMF9vZmZzZXQpOiBTZXQgdG8gNCpQVF9SMywgbm90IDQqUFRfT1JJR19SMy4KCgkqIHN0cmFjZS5zcGVjOiBOZXcgZmlsZS4KCSogZGViaWFuL2NoYW5nZWxvZzogNC40LjkwLTEKCSogZGViaWFuL3J1bGVzIChiaW5hcnktYXJjaCk6IERlcGVuZCBvbiBidWlsZC4KCShjbGVhbik6IERvbid0IHRyeSB0byBydW4gTWFrZWZpbGUuaW4uCgkqIGRlYmlhbi9jb250cm9sIChTdGFuZGFyZHMtVmVyc2lvbik6IE5vdyAzLjUuOC4KCgkqIGNvbmZpZ3VyZS5hYzogRGlkZGxlIENGTEFHUyBhZnRlciBBQ19QUk9HX0NDLCBub3QgYmVmb3JlLgoKMjAwMy0wMS0wOSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIHN5c2NhbGwuYyAoZm9yY2VfcmVzdWx0KSBbUzM5MCB8fCBTMzkwWF06IEZpeCB0eXBvLgoKCSogZGViaWFuL2NvbnRyb2w6IFVwZGF0ZSBNYWludGFpbmVyOiBmaWVsZC4KCjIwMDMtMDEtMDggIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBORVdTOiBVcGRhdGUgZm9yIDQuNC45MCB0ZXN0IHJlbGVhc2UuCgoJU3VwcG9ydCBmb3IgbmV3IExpbnV4IDIuNSB0aHJlYWQgZmVhdHVyZXMuCgkqIGRlZnMuaCBbTElOVVhdOiBEZWZpbmUgX19OUl9leGl0X2dyb3VwIGlmIG5vdCBkZWZpbmVkLgoJKHN0cnVjdCB0Y2IpOiBOZXcgbWVtYmVycyBuY2xvbmVfdGhyZWFkcywgbmNsb25lX2RldGFjaGVkLAoJYW5kIG5jbG9uZV93YWl0aW5nLgoJKFRDQl9DTE9ORV9ERVRBQ0hFRCwgVENCX0NMT05FX1RIUkVBRCwgVENCX0dST1VQX0VYSVRJTkcpOiBOZXcgbWFjcm9zLgoJKHdhaXRpbmdfcGFyZW50KTogTWFjcm8gcmVtb3ZlZC4KCShwaWQydGNiKTogRGVjbGFyZSBpdC4KCSogcHJvY2Vzcy5jIChpbnRlcm5hbF9jbG9uZSkgW1RDQl9DTE9ORV9USFJFQURdOiBSZXBhcmVudCB0aGUgbmV3CgljaGlsZCB0byBvdXIgcGFyZW50IGlmIHdlIGFyZSBhIENMT05FX1RIUkVBRCBjaGlsZCBvdXJzZWx2ZXMuCglNYWludGFpbiBUQ0JfQ0xPTkVfVEhSRUFEIGFuZCBUQ0JfQ0xPTkVfREVUQUNIRUQgZmxhZ3MgYW5kIGNvdW50cy4KCShpbnRlcm5hbF93YWl0KSBbVENCX0NMT05FX1RIUkVBRF06IEZhY3RvciBvdXQgZGV0YWNoZWQgY2hpbGRyZW4gd2hlbgoJZGV0ZXJtaW5pbmcgaWYgd2UgaGF2ZSBhbnkuICBJZiBUQ0JfQ0xPTkVfVEhSRUFEIGlzIHNldCwgY2hlY2sKCXBhcmVudCdzIGNoaWxkcmVuIGluc3RlYWQgb2Ygb3VyIG93biwgYW5kIGJ1bXAgbmNsb25lX3dhaXRpbmcgY291bnQuCgkoaW50ZXJuYWxfZXhpdCkgW19fTlJfZXhpdF9ncm91cF06IFNldCB0aGUgVENCX0dST1VQX0VYSVRJTkcgZmxhZyBpZgoJdGhlIHN5c2NhbGwgd2FzIGV4aXRfZ3JvdXAuCgkqIHN5c2NhbGwuYyAoaW50ZXJuYWxfc3lzY2FsbCk6IFVzZSBpbnRlcm5hbF9leGl0IGZvciBleGl0X2dyb3VwLgoJKiBzdHJhY2UuYyAocGlkMnRjYik6IE5vIGxvbmdlciBzdGF0aWMuCgkoYWxsb2N0Y2IpIFtUQ0JfQ0xPTkVfVEhSRUFEXTogSW5pdGlhbGl6ZSBuZXcgZmllbGRzLgoJKGRyb3B0Y2IpIFtUQ0JfQ0xPTkVfVEhSRUFEXTogTWFpbnRhaW4gbmV3IGZpZWxkcy4KCUlmIHdlIGhhdmUgdGhyZWFkIGNoaWxkcmVuLCBzZXQgVENCX0VYSVRJTkcgYW5kIGRvbid0IGNsZWFyIHRoZSBUQ0IuCgkocmVzdW1lKSBbVENCX0NMT05FX1RIUkVBRF06IERlY3JlbWVudCBwYXJlbnQncyBuY2xvbmVfd2FpdGluZy4KCShkZXRhY2gpIFtUQ0JfQ0xPTkVfVEhSRUFEXTogV2hlbiBjYWxsaW5nIHJlc3VtZSwgY2hlY2sgYWxsIHRocmVhZAoJY2hpbGRyZW4gb2Ygb3VyIHBhcmVudCB0aGF0IG1pZ2h0IGJlIHdhaXRpbmcgZm9yIHVzIHRvby4KCVtUQ0JfR1JPVVBfRVhJVElOR10gKGhhbmRsZV9ncm91cF9leGl0KTogTmV3IGZ1bmN0aW9uLgoJKHRyYWNlKSBbVENCX0dST1VQX0VYSVRJTkddOiBVc2UgdGhhdCBpbiBwbGFjZSBvZiBkZXRhY2ggb3IgZHJvcHRjYi4KCglSZXZhbXAgLWYgc3VwcG9ydCBmb3IgTGludXguCgkqIHV0aWwuYyBbTElOVVhdIChzZXRicHQsIGNsZWFyYnB0KTogTmV3IGltcGxlbWVudGF0aW9ucyB0aGF0IHR3ZWFrCgl0aGUgc3lzdGVtIGNhbGwgdG8gYmUgY2xvbmUgd2l0aCBDTE9ORV9QVFJBQ0Ugc2V0LiAgVmFyaW91cyBuZXcgc3RhdGljCgloZWxwZXIgZnVuY3Rpb25zLgoJKiBwcm9jZXNzLmMgKGludGVybmFsX2Nsb25lKTogRGVmaW5lIGFsc28gI2lmZGVmIFNZU19jbG9uZTIuCglJbml0aWFsaXplIFRDUENISUxELT5wYXJlbnQgZmllbGQuCglbQ0xPTkVfUFRSQUNFXTogRG9uJ3QgZG8gUFRSQUNFX0FUVEFDSCBoZXJlLCBiZWNhdXNlIGl0J3MgcHJlYXR0YWNoZWQuCglDaGVjayBpbiBjYXNlIHRoZSBuZXcgY2hpbGQgaXMgaW4gdGhlIHRjYiBhbHJlYWR5LgoJKGludGVybmFsX2ZvcmspIFtMSU5VWF06IEp1c3QgY2FsbCBpbnRlcm5hbF9jbG9uZS4KCSogc3RyYWNlLmMgKHRyYWNlKSBbTElOVVhdOiBVbmRlciAtZi8tRiwgZ3JvayBhbiB1bmtub3duIHBpZAoJcmVwb3J0aW5nIHRvIHdhaXQsIHB1dCBpdCBpbiB0aGUgVENCIHdpdGggVENCX0FUVEFDSEVEfFRDQl9TVVNQRU5ERUQuCgoJKiBsaW51eC94ODZfNjQvc3lzY2FsbGVudDEuaCAoc3lzX29sZGxzdGF0KTogI2RlZmluZSBhcyBwcmludGFyZ3MuCgoJKiBmaWxlLmMgW0xJTlVYXTogI3VuZGVmIHN0X1thbWNddGltZSBpbiBjYXNlIHRoZXkgYXJlIG1hY3Jvcy4KCgkqIE1ha2VmaWxlLmFtIChBTV9DRkxBR1MpOiBOZXcgdmFyaWFibGUsIGRlZmluZSB0byAkKFdBUk5GTEFHUykuCgoJKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IFJlbW92ZSBkZWJpYW4vcG9zdGluc3QgYW5kIGRlYmlhbi9wcmVybS4KCjIwMDMtMDEtMDkgIFdpY2hlcnQgQWtrZXJtYW4gIDx3aWNoZXJ0QGRlZXBoYWNrbW9kZS5vcmc+CgoJKiBkZWJpYW4vcG9zdGluc3QsIGRlYmlhbi9wcmVybTogcmVtb3ZlZCwgL3Vzci9kb2Mgc3ltbGluayBpcyBubwoJbG9uZ2VyIHVzZWQKCSogZGViaWFuL3J1bGVzOiBubyBsb25nZXIgaW5zdGFsbCBwb3N0aW5zdCBhbmQgcHJlcm0KCSogZGViaWFuL2NvbnRyb2w6IGRvIG5vdCBlbmQgc3VtbWFyeSB3aXRoIGZ1bGwgc3RvcCAobGludGlhbikKCjIwMDItMTItMzAgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBNYWtlZmlsZS5hbSAoYmluX1NDUklQVFMpOiBOZXcgdmFyaWFibGUsIGxpc3Qgc3RyYWNlLWdyYXBoLgoJKEVYVFJBX0RJU1QpOiBBZGQgbWlzc2luZyBmaWxlcy4KCgkqIGNvbmZpZ3VyZS5hYzogRml4IGFzbS9zaWdjb250ZXh0LmggY2hlY2sgdG8gaW5jbHVkZSBwcmVyZXF1aXNpdGUuCgoJKiBzeXNjYWxsLmMgKHF1YWxpZnlfb25lKTogTmV3IGZ1bmN0aW9uLgoJKHF1YWxfb3B0aW9ucyk6IFJlcGxhY2UgbG9va3VwIGZpZWxkIHdpdGggcXVhbGlmeSwgdXBkYXRlIGluaXRpYWxpemVyLgoJKHF1YWxpZnkpOiBVcGRhdGUgY2FsbGVyLgoJKHF1YWxfc2lnbmFsLCBxdWFsX2ZhdWx0LCBxdWFsX2Rlc2MpOiBSZXdyaXR0ZW4gZnJvbSBsb29rdXBfKi4KCShxdWFsX3N5c2NhbGwpOiBSZXdyaXR0ZW4gbG9va3VwX3N5c2NhbGwsIG1hdGNoIG5hbWUgbW9yZSB0aGFuIG9uY2UuCglGaXhlcyBSSCM3MDU3OSwgYml0ZXMgSUE2NCAtZWZvbyB3aGVuIGZvbyBleGlzdHMgb24gSUEzMi4KCgkqIHZlcnNpb24uYyAodmVyc2lvbik6IE1ha2UgY29uc3QsIGJ1bXAgdG8gNC40LjkwLgoJKiBzdHJhY2UuYzogVXBkYXRlIGRlY2wuCgoJKiBNYWtlZmlsZS5hbSBbTElOVVggJiYgWDg2XzY0XTogUmVtb3ZlIGNydWZ0LgoJKiBsaW51eC94ODZfNjQvZXJybm9lbnQxLmg6IE5ldyBmaWxlLgoJKiBsaW51eC94ODZfNjQvaW9jdGxlbnQxLmg6IE5ldyBmaWxlLgoJKiBsaW51eC94ODZfNjQvc2lnbmFsZW50MS5oOiBOZXcgZmlsZS4KCSogbGludXgveDg2XzY0L3N5c2NhbGxlbnQxLmg6IE5ldyBmaWxlLgoJKiBsaW51eC94ODZfNjQvaTM4Ni1oZWFkZXJzLmRpZmY6IEZpbGUgcmVtb3ZlZC4KCSogbGludXgveDg2XzY0L21ha2VoZWFkZXJzLnNoOiBGaWxlIHJlbW92ZWQuCgkqIGxpbnV4L3g4Nl82NC9NYWtlZmlsZS5pbjogRmlsZSByZW1vdmVkLgoKCSogbGludXgvc3lzY2FsbGVudC5oIFtYODZfNjRdOiBEaXNhYmxlIHNhbml0eSBjaGVja3MsIHN1YmNhbGwgc3R1ZmYgaXMKCWFscmVhZHkgYnJva2VuIGZvciAzMi1iaXQgcGVyc29uYWxpdHkgb24geDg2LTY0LgoKMjAwMi0xMi0yOSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIGNvbmZpZ3VyZS5hYywgTWFrZWZpbGUuYW06IFB1bnQgc3ViZGlycywgaGFuZGxlIGV2ZXJ5dGhpbmcgaGVyZS4KCSogbGludXgvTWFrZWZpbGUuYW06IEZpbGUgcmVtb3ZlZC4KCSogZnJlZWJzZC9NYWtlZmlsZS5hbTogRmlsZSByZW1vdmVkLgoJKiBzdW5vczQvTWFrZWZpbGUuaW46IEZpbGUgcmVtb3ZlZC4KCSogc3ZyNC9NYWtlZmlsZS5pbjogRmlsZSByZW1vdmVkLgoKCSogbGludXgvYWxwaGEvTWFrZWZpbGUuaW46IEZpbGUgcmVtb3ZlZC4KCSogbGludXgvaHBwYS9NYWtlZmlsZS5pbjogRmlsZSByZW1vdmVkLgoJKiBsaW51eC9pYTY0L01ha2VmaWxlLmluOiBGaWxlIHJlbW92ZWQuCgkqIGxpbnV4L3Bvd2VycGMvTWFrZWZpbGUuaW46IEZpbGUgcmVtb3ZlZC4KCSogbGludXgvczM5MC9NYWtlZmlsZS5pbjogRmlsZSByZW1vdmVkLgoJKiBsaW51eC9zMzkweC9NYWtlZmlsZS5pbjogRmlsZSByZW1vdmVkLgoKMjAwMi0xMi0yNiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIHN5c2NhbGxlbnQuc2g6IEdyb2sgdGhyZWUgZmxhdm9ycyBvZiAjZGVmaW5lIGxpbmUsIHVuaXF1aWZ5LgoJKiBsaW51eC9ocHBhL3N5c2NhbGxlbnQuc2g6IEZpbGUgcmVtb3ZlZC4KCSogbGludXgvcG93ZXJwYy9zeXNjYWxsZW50LnNoOiBGaWxlIHJlbW92ZWQuCgoJKiBsaW51eC9NYWtlZmlsZS5hbTogTmV3IGZpbGUuCgkqIGxpbnV4L01ha2VmaWxlLmluOiBGaWxlIHJlbW92ZWQuCgkqIGZyZWVic2QvTWFrZWZpbGUuYW06IE5ldyBmaWxlLgoJKiBmcmVlYnNkL2kzODYvTWFrZWZpbGUuYW06IE5ldyBmaWxlLgoJKiBmcmVlYnNkL2kzODYvTWFrZWZpbGUuaW46IEZpbGUgcmVtb3ZlZC4KCjIwMDItMTItMjIgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJVXBkYXRlIHRvIEF1dG9jb25mIDIuNTcsIGFuZCBBdXRvbWFraWZ5IHdpdGggdmVyc2lvbiAxLjcuCgkqIE1ha2VmaWxlLmFtOiBOZXcgZmlsZS4KCSogTWFrZWZpbGUuaW46IEZpbGUgcmVtb3ZlZC4KCSogY29uZmlndXJlLmluOiBNb3ZlZCB0byAuLi4KCSogY29uZmlndXJlLmFjOiAuLi4gaGVyZS4gIFVwZGF0ZSBmb3IgQXV0b2NvbmYgMi41eCBhbmQgQXV0b21ha2UuCgkqIGFjbG9jYWwubTQ6IE1vdmVkIHRvIC4uLgoJKiBhY2luY2x1ZGUubTQ6IC4uLiBoZXJlLiAgVXBkYXRlIGZvciBBdXRvY29uZiAyLjV4LgoJKiBhY2NvbmZpZy5oOiBGaWxlIHJlbW92ZWQuCgkqIEFVVEhPUlM6IE5ldyBmaWxlLCBtYWtlcyBhdXRvbWFrZSBoYXBweS4KCSogYXV0b2dlbi5zaDogRmlsZSByZW1vdmVkLgoJKiBSRUFETUUtQ1ZTOiBVcGRhdGUgdG8gcmVjb21tZW5kIGF1dG9yZWNvbmYgaW5zdGVhZC4KCSogZmlsZS5jOiBIQVZFX1NUXyogLT4gSEFWRV9TVFJVQ1RfU1RBVF9TVF8qLgoJKiBuZXQuYzogSEFWRV9TSU42X1NDT1BFX0lEIC0+IEhBVkVfU1RSVUNUX1NPQ0tBRERSX0lONl9TSU42X1NDT1BFX0lELAoJSEFWRV9NU0dfQ09OVFJPTCAtPiBIQVZFX1NUUlVDVF9NU0dIRFJfTVNHX0NPTlRST0wuCgkqIHN0cmFjZS5jOiAqX0RFQ0xBUkVEIC0+IEhBVkVfREVDTF8qCgkqIHN0cmVhbS5jOiBIQVZFXyogLT4gSEFWRV9TVFJVQ1RfKgoKCSogbGludXgvTWFrZWZpbGUuaW4gKGlvY3RsZGVmcy5oIGlvY3Rscy5oKTogVXNlICQoU0hFTEwpIGluc3RlYWQgb2YKCXNoLCBhbmQgdXNlICQoc3JjZGlyKSB0byBmaW5kIHRoZSBzY3JpcHQuCgkqIGxpbnV4L3Bvd2VycGMvTWFrZWZpbGUuaW4gKGlvY3RsZW50LnJhdyk6IEZpbmQgaW9jdGxlbnQuc2ggaW4gLi4vLgoJKGlvY3Rsc29ydC5vKTogVXNlIC4uL2lvY3Rsc29ydC5jLCBub3QgLi4vLi4vaW9jdGxzb3J0LmMuCgkqIGxpbnV4L3g4Nl82NC9NYWtlZmlsZS5pbiAoaGVhZGVycyk6IFJlbmFtZWQgdG8gYWxsLgoJKiBsaW51eC9hbHBoYS9NYWtlZmlsZS5pbjogQWRkIGVtcHR5IGluc3RhbGwgdGFyZ2V0LgoJKiBsaW51eC94ODZfNjQvTWFrZWZpbGUuaW46IExpa2V3aXNlLgoJKiBsaW51eC9wb3dlcnBjL01ha2VmaWxlLmluOiBMaWtld2lzZS4KCSogbGludXgvTWFrZWZpbGUuaW46IExpa2V3aXNlLgoKMjAwMi0xMi0yNiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIGRlZnMuaCBbTElOVVggJiYgTUlQU10gKE1BWF9RVUFMUyk6IFNldCB0byA1MDAwLCBub3QgNDk5OS4KCUZyb20gRGFuaWVsIEphY29ib3dpdHogPGRyb3dAZmFsc2Uub3JnPi4KCjIwMDItMTItMjEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBsaW51eC9zeXNjYWxsZW50Lmg6IEFkZCBzb21lIG5ldyAyLjUgc3lzY2FsbCBuYW1lcy4KCU5vdyBjbG9uZSB0YWtlcyA1IGFyZ3MuCgkqIHByb2Nlc3MuYyBbTElOVVhdIChjbG9uZV9mbGFncyk6IFVwZGF0ZSB3aXRoIDIuNSBmbGFnIGJpdHMuCglbTElOVVhdIChzeXNfY2xvbmUpOiBQcmludCBuZXcgYXJncy4KCSogbWVtLmMgKHByaW50X2xkdF9lbnRyeSk6IE1ha2UgZ2xvYmFsLgoKCSogbGludXgvc3lzY2FsbC5oIFtJMzg2IHx8IElBNjRdIChTWVNfc29ja2V0X3N1YmNhbGwpOiBCdW1wIHRvIDMwMCBmb3IKCXNhZmV0eSwgc2luY2UgdXAgdG8gMjYwIGFyZSBhbHJlYWR5IHVzZWQgaW4gMi41IGtlcm5lbHMuCgkqIGxpbnV4L3N5c2NhbGxlbnQuaDogVXBkYXRlIHRoZSB0YWJsZS4KCSogbGludXgvaWE2NC9zeXNjYWxsZW50Lmg6IExpa2V3aXNlLgoKCSogc3lzY2FsbC5jIChmb3JjZV9yZXN1bHQpOiBOZXcgZnVuY3Rpb24uCgkqIHByb2Nlc3MuYyAoaW50ZXJuYWxfd2FpdCk6IEhhbmRsZSBFQ0hJTEQgZXhpdCBmcm9tIHdhaXQgY2FsbCB3aXRoCglXTk9IQU5HIGZsYWcgc2V0OyBmb3JjZSB0aGUgcmV0dXJuIHZhbHVlIHRvIDAgaW4gdGhlIGluZmVyaW9yIHdoZW4gaXQKCWhhcyBsaXZlIGNoaWxkcmVuIHdlIGFyZSB0cmFjaW5nLgoJKiBORVdTOiBNZW50aW9uIHRoZSBidWcgZml4LgoKMjAwMi0xMi0xNyAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIGxpbnV4L2lhNjQvc3lzY2FsbGVudC5oOiBSZW1vdmUgcGxhY2Vob2xkZXJzIDI3NS0yOTggdG8gY2F0Y2ggdXAKCXdpdGggbGludXgvc3lzY2FsbGVudC5oIGFkZGl0aW9ucy4KCgkqIHN0cmFjZS5jICh0Y2J0YWIpOiBNYWtlIHRoaXMgYSBwb2ludGVyIHRvIHBvaW50ZXJzLCBub3QgYW4gYXJyYXkuCgkodGNidGFic2l6ZSk6IE5ldyB2YXJpYWJsZS4KCShtYWluKTogSW5pdGlhbGl6ZSB0aGVtIHVzaW5nIGR5bmFtaWMgYWxsb2NhdGlvbi4KCShhbGxvY3RjYiwgbWFpbik6IFVzZSB0Y2J0YWJzaXplIGluIHBsYWNlIG9mIE1BWF9QUk9DUzsgaW5kaXJlY3QuCgkocGlkMnRjYiwgY2xlYW51cCk6IExpa2V3aXNlLgoJW1VTRV9QUk9DRlNdIChwb2xsdik6IE1ha2UgdGhpcyBhIHBvaW50ZXIsIG5vdCBhbiBhcnJheTsgbWFrZSBzdGF0aWMuCgkocmVidWlsZF9wb2xsdik6IER5bmFtaWNhbGx5IGFsbG9jYXRlIHRoZSB2ZWN0b3IuCgkqIGRlZnMuaCAodGNidGFiKTogVXBkYXRlIGRlY2xzLgoJKE1BWF9QUk9DUyk6IE1hY3JvIHJlbW92ZWQsIG5vIG1vcmUgc3RhdGljIGxpbWl0IG9uIHRoaXMuCgkqIHByb2Nlc3MuYyAoZm9ya190Y2IpOiBOZXcgZnVuY3Rpb24uCgkoaW50ZXJuYWxfY2xvbmUsIGludGVybmFsX2ZvcmspOiBVc2UgaXQgaW5zdGVhZCBvZiBjaGVja2luZyBucHJvY3MuCgoJKiBzdHJhY2UuYyAoZGV0YWNoKSBbTElOVVhdOiBVc2UgX19XQUxMIChvciBhIHNlY29uZCB0cnkgd2l0aCBfX1dDTE9ORSkKCWluIHdhaXQgYWZ0ZXIgc2VuZGluZyBTSUdTVE9QLgoKMjAwMi0xMi0xNiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIHNpZ25hbC5jIChzcHJpbnRzaWdtYXNrKTogSW5jcmVhc2Ugc3RhdGljIGJ1ZmZlciBzaXplIHRvIGFjY291bnQgZm9yCgl3b3JzdCBwb3NzaWJsZSBjYXNlLiAgUmVwb3J0ZWQgYnkgRGFuaWVsIEphY29ib3dpdHogPGRyb3dAZmFsc2Uub3JnPi4KCgkqIHByb2Nlc3MuYyBbTElOVVhdICh3YWl0NF9vcHRpb25zKTogRml4IF9fV0NMT05FIHZhbHVlLiAgQWRkCglfX1dOT1RIUkVBRCBhbmQgX19XQUxMLgoKCSogc3RyYWNlLmMgKHRyYWNlKSBbTElOVVhdOiBPbmx5IGNoZWNrIGVycm5vIGlmIHdhaXQ0IGFjdHVhbGx5IGZhaWxzLAoJc28gd2UgZG9uJ3QgcmVwZWF0IGEgd2FpdCBhbmQgdGh1cyBkcm9wIGEgc3RhdHVzLiAgRml4ZXMgUkgjNjI1OTEuCgoyMDAyLTEyLTE1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogcHJvY2Vzcy5jIChzZXRhcmcpIFtQT1dFUlBDXTogU3VwcG9ydCBpdC4KCgkqIHV0aWwuYyBbUE9XRVJQQ10gKExPT1ApOiBGaXggdmFsdWUsIG5vdyAweDQ4MDAwMDAwICgwOiBiIDBiKS4KCU9sZCB2YWx1ZSB3YXMgYm9ndXMsIG5vdCBldmVuIGEgcHJvcGVyIGluc3RydWN0aW9uLgoJRnJvbSBHdXkgTS4gU3RyZWV0ZXIgPHN0cmVldGVyQHJlZGhhdC5jb20+LgoKCSogc3RyYWNlLmMgKG1haW4pIFshIFVTRV9QUk9DRlNdOiBBbHdheXMgcmVzZXQgU0lHQ0hMRCB0byBTSUdfREZMLgoKCSogY29uZmlndXJlLmluOiBEb24ndCBjaGVjayBmb3IgcHV0cG1zZy4KCSogc3RyZWFtLmMgKHN5c19nZXRwbXNnLCBzeXNfcHV0cG1zZyk6IE1ha2UgdGhlc2UgY29uZGl0aW9uYWwgb24KCSNpZmRlZiBTWVNfKiwgcmF0aGVyIHRoYW4gb24gSEFWRV9QVVRQTVNHLgoKCSogYWNsb2NhbC5tNCAoQUNfU1RBVDY0KTogSW5jbHVkZSA8bGludXgvdHlwZXMuaD4gYmVmb3JlIDxhc20vc3RhdC5oPgoJaW4gdGVzdC4gIFRlc3Qgb3VyIG93biAjaWZkZWYgTElOVVggcmF0aGVyIHRoYW4gcHJlZGVmaW5lZCBgbGludXgnLgoKCSogbGludXgvcG93ZXJwYy9zeXNjYWxsZW50Lmg6IFVzZSBzeXNfbGxzZWVrIGZvciBfbGxzZWVrLgoJKiBsaW51eC9zcGFyYy9zeXNjYWxsZW50Lmg6IExpa2V3aXNlLgoJKiBsaW51eC9ocHBhL3N5c2NhbGxlbnQuaDogTGlrZXdpc2UuCgoJKiBzeXNjYWxsLmMgKHN5c2NhbGxfZW50ZXIpIFtMSU5VWCAmJiBQT1dFUlBDXTogRGVmaW5lIFBUX09SSUdfUjMgaWYKCW5vdCBkZWZpbmVkLCBzaW5jZSA8YXNtL3B0cmFjZS5oPiBkZWZpbmVzIGl0IG9ubHkgI2lmZGVmIF9fS0VSTkVMX18uCgkqIHByb2Nlc3MuYzogTGlrZXdpc2UuCgoJKiBkZXNjLmMgKHN5c19vc2Zfc2VsZWN0KTogQWRkIG1pc3NpbmcgcmV0dXJuIHR5cGUuCgoJKiBzeXNjYWxsLmMgKHRyYWNlX3N5c2NhbGwpOiBVc2Ugc3RyZXJyb3IsIG5vdCBzeXNfZXJybGlzdC9zeXNfbmVyci4KCgkqIGxpbnV4L2lhNjQvc3lzY2FsbGVudC5oOiBSZW1vdmUgbWFjcm9zIGZvciBzeXNfZGVsZXRlX21vZHVsZSwKCXN5c19uYW5vc2xlZXAsIGJvdGggYWxyZWFkeSBpbiBsaW51eC9kdW1teS5oLgoKCSogc3lzY2FsbC5jIChnZXRfc2Nubyk6IE1vdmUgc3RhdGljIGBjdXJycGVycycgaW5zaWRlICNpZmRlZiBYODZfNjQuCgkodHJhY2Vfc3lzY2FsbCk6IEZpeCByZXR1cm4gd2l0aG91dCB2YWx1ZS4KCgkqIGxpbnV4L3N5c2NhbGxlbnQuaDogVXBkYXRlIHRhYmxlIHdpdGggbmFtZXMgb2YgbmV3IHN5c2NhbGxzCglpb19zZXR1cCwgaW9fZGVzdHJveSwgaW9fZ2V0dmVudHMsIGlvX3N1Ym1pdCwgaW9fY2FuY2VsLgoJKiBsaW51eC9pYTY0L3N5c2NhbGxlbnQuaDogTGlrZXdpc2UuCgkqIGxpbnV4L3Bvd2VycGMvc3lzY2FsbGVudC5oOiBMaWtld2lzZS4KCgkqIHNpZ25hbC5jIFtMSU5VWCAmJiBJMzg2XTogUHJvdmlkZSBTQV9SRVNUT1JFUiBjb25zdGFudCBpZiBub3QKCWRlZmluZWQuICBJZiB0aGUgYml0IGlzIHNldCwgcHJpbnQgdGhlIHNhX3Jlc3RvcmVyIGZpZWxkIG9mIHNpZ2FjdGlvbi4KCgkqIG1lbS5jOiBBZGQgc3lzX3tnZXQsc2V0fV90aHJlYWRfYXJlYS4KCSogbGludXgvc3lzY2FsbC5oOiBEZWNsYXJlIHRoZW0uCgkqIGxpbnV4L3N5c2NhbGxlbnQuaDogVXBkYXRlIHRoZSB0YWJsZSBmb3IgdGhlc2UuCgkqIGxpbnV4L2R1bW15LmggKHN5c19tb2RpZnlfbGR0KTogRGVmaW5lIG9ubHkgI2lmbmRlZiBJMzg2LgoJKHN5c19nZXRfdGhyZWFkX2FyZWEsIHN5c19zZXRfdGhyZWFkX2FyZWEpOiBOZXcgbWFjcm9zICNpZm5kZWYgSTM4Ni4KCgkqIGNvbmZpZ3VyZS5pbjogQ2hlY2sgZm9yIGxpbnV4L3hhdHRyLmggYW5kIGxpbnV4L2Z1dGV4LmggaGVhZGVycy4KCSogbGludXgvc3lzY2FsbC5oOiBBZGQgc3lzXyogZGVjbHMgZm9yIG5ldyBzeXNjYWxscyBnZXRwbXNnLCBwdXRwbXNnLAoJcmVhZGFoZWFkLCBzZW5kZmlsZTY0LCBzZXR4YXR0ciwgZnNldHhhdHRyLCBnZXR4YXR0ciwgZmdldHhhdHRyLCBpbnQKCWxpc3R4YXR0ciwgZmxpc3R4YXR0ciwgcmVtb3ZleGF0dHIsIGZyZW1vdmV4YXR0ciwgc2NoZWRfc2V0YWZmaW5pdHksCglzY2hlZF9nZXRhZmZpbml0eSwgZnV0ZXguCgkqIGxpbnV4L3N5c2NhbGxlbnQuaDogVXBkYXRlIHRoZSB0YWJsZS4KCSogaW8uYzogQWRkIHN5c19zZW5kZmlsZTY0LgoJKiBmaWxlLmM6IEFkZCBzeXNfcmVhZGFoZWFkLCBzeXNfKnhhdHRyLgoJKiBwcm9jZXNzLmM6IEFkZCBzeXNfZnV0ZXgsIHN5c18qYWZmaW5pdHkuCgoJKiBsaW51eC9zeXNjYWxsLmggKFNZU19zb2NrZXRfc3ViY2FsbCk6IERlZmluZSB0byAyNTYgb24gYWxsIG1hY2hpbmVzLgoJKFNZU19pcGNfc3ViY2FsbCk6IEFsd2F5cyBTWVNfc29ja2V0X3N1YmNhbGwgKyBTWVNfc29ja2V0X25zdWJjYWxscy4KCSogbGludXgvc3lzY2FsbGVudC5oOiBVcGRhdGUgdGhlIHRhYmxlIGZvciBzb2NrZXQgYW5kIGlwYyBzdWJjYWxscy4KCjIwMDItMTEtMDkgIEhlaWtvIENhcnN0ZW5zIDxoZWlrby5jYXJzdGVuc0BkZS5pYm0uY29tPgoKCUJ1Z2ZpeCBmb3IgczM5MC9zMzkweDoKCSogc3lzY2FsbC5jOiBGaXhlZCBzY25vIGRlcml2YXRpb24gZm9yIHMzOTAvczM5MHguCgoyMDAyLTExLTA2ICBNaWNoYWwgTHVkdmlnICA8bWx1ZHZpZ0BzdXNlLmN6PgoKCU1lcmdlZCBwYXRjaCBmcm9tIFN0ZXZlbiBKLiBIaWxsIDxzamhpbGxAcmVhbGl0eWRpbHV0ZWQuY29tPgoJdG8gYWxsb3cgdGhlIGNvbXBpbGF0aW9uIG9mIGEgbmF0aXZlIE1JUFMgc3RyYWNlLgoKMjAwMi0xMS0wNiAgTWljaGFsIEx1ZHZpZyAgPG1sdWR2aWdAc3VzZS5jej4KCglGcm9tIE1hcnR5IExlaXNuZXIgPGxlaXNuZXJAcm9jaGVzdGVyLnJyLmNvbT4sCglyZXdyaXR0ZW4gYnkgbWx1ZHZpZzoKCSogc3RyYWNlLmMgKG5vdF9mYWlsaW5nX29ubHkpOiBOZXcuCgkodXNhZ2UpOiBBZGRlZCAteiBzd2l0Y2ggZGVzY3JpcHRpb24uCgkobWFpbik6IEFkZGVkIC16IHN3aXRjaCBwYXJzaW5nIHRvIG5vdF9mYWlsaW5nX29ubHkgdmFyaWFibGUuCgkqIHN5c2NhbGwuYyAodHJhY2Vfc3lzY2FsbCk6IEFkZGVkIG5vdF9mYWlsaW5nX29ubHkgaGFuZGxpbmcuCgoyMDAyLTEwLTA4ICBIZWlrbyBDYXJzdGVucyA8aGVpa28uY2Fyc3RlbnNAZGUuaWJtLmNvbT4KCglNaXNzaW5nIGNvbXBsZXRlIGNoYW5nZWxvZyBmb3IgMjAwMi0xMC0wNyBjb21taXQ6CgkqIE1ha2VmaWxlLmluOiBBZGRlZCBsaW51eC9zMzkwLCBsaW51eC9zMzkweCB0byBBTExfU1VCRElSUy4KCSogYWNjb25maWcuaDogTmV3IGRlZmluZSBmb3IgczM5MHguCgkqIGNvbmZpZy5zdWI6IEFkZGVkIG1pc3NpbmcgZGVmaW5lIGZvciBzMzkwIGFuZCBuZXcgb25lIGZvciBzMzkweC4KCSogY29uZmlndXJlLmluOiBBZGRlZCBuZXcgZGVmaW5lIGZvciBzMzkweC4KCSogZmlsZS5jOiBBZGRlZCBtaXNzaW5nICN1bmRlZiBkaXJlbnQ2NCBhbmQgbmV3IGRlZmluZXMgZm9yIHMzOTB4LgoJKiBsaW51eC9zMzkwOiBOZXcgZGlyZWN0b3J5LgoJKiBsaW51eC9zMzkwL01ha2VmaWxlLmluOiBOZXcgZmlsZS4KCSogbGludXgvczM5MC9lcnJub2VudC5oOiBOZXcgZmlsZS4KCSogbGludXgvczM5MC9pb2N0bGVudC5oOiBOZXcgZmlsZS4KCSogbGludXgvczM5MC9zaWduYWxlbnQuaDogTmV3IGZpbGUuCgkqIGxpbnV4L3MzOTAvc3lzY2FsbGVudC5oOiBOZXcgZmlsZS4KCSogbGludXgvczM5MHg6IE5ldyBkaXJlY3RveS4KCSogbGludXgvczM5MHgvTWFrZWZpbGUuaW46IE5ldyBmaWxlLgoJKiBsaW51eC9zMzkweC9lcnJub2VudC5oOiBOZXcgZmlsZS4KCSogbGludXgvczM5MHgvaW9jdGxlbnQuaDogTmV3IGZpbGUuCgkqIGxpbnV4L3MzOTB4L3NpZ25hbGVudC5oOiBOZXcgZmlsZS4KCSogbGludXgvczM5MHgvc3lzY2FsbGVudC5oOiBOZXcgZmlsZS4KCSogbGludXgvc3lzY2FsbC5oOiBBZGRlZCBzeXNfbWluY29yZSgpIHByb3RvdHlwZSBhbmQgYWRkZWQgbmV3CglzMzkweCBkZWZpbmVzLgoJKiBwcm9jZXNzLmM6IEFkZGVkIHMzOTB4IGRlZmluZXMuCgkoY2hhbmdlX3N5c2NhbGwpOiBDaGFuZ2VkIGhhbmRsaW5nIGZvciBzMzkwLgoJKHNldGFyZyk6IEFkZGVkIG1pc3NpbmcgczM5MC9zMzkweCBjb2RlIGluIHNldGFyZygpLgoJKiBzaWduYWwuYzogQWRkZWQgczM5MHggZGVmaW5lLgoJKHN5c19zaWdyZXR1cm4pOiBCdWdmaXggaW4gczM5MC9zMzkweCBjb2RlICh3cm9uZyBudW1iZXIgb2YKCWFyZ3VtZW50cyB0byBzcHJpbnRzaWdtYXNrKCkpLgoJKiBzdHJlYW0uYyAoaW50ZXJuYWxfc3RyZWFtX2lvY3RsKTogQ2hhbmdlZCBpbnQgY2FzdCB0byBsb25nIGNhc3QsCglzaW5jZSBwcmludHN0cigpIGV4cGVjdHMgYSBsb25nLgoJKiBzeXNjYWxsLmMgKGRlY29kZV9zdWJjYWxsKTogQ2hhbmdlZCBzZXZlcmFsIHZhcmlhYmxlcyB0byBiZSBsb25nCglpbnN0ZWFkIG9mIGludCB0byBtYXRjaCA2NCBiaXQgcmVxdWlyZW1lbnRzLiBBZGRlZCBzMzkweCBkZWZpbmVzLgoJKHN5c2NhbGxfZW50ZXIpOiBDaGFuZ2VkIHVwZWVrKCkgY2FsbCB0byBtYXRjaCBzMzkwIGFuZCBzMzkweAoJcmVxdWlyZW1lbnRzLgoJKiB1dGlsLmM6IEFkZGVkIHMzOTB4IGRlZmluZXMuCgoyMDAyLTEwLTA3ICBNaWNoYWwgTHVkdmlnICA8bWx1ZHZpZ0BzdXNlLmN6PgoKCU1lcmdlZCBzMzkweCBwb3J0IGJ5IEhlaWtvIENhcnN0ZW5zIDxIZWlrby5DYXJzdGVuc0BkZS5pYm0uY29tPgoJYW5kIGJ1Z2ZpeGVzIHRvIHMzOTAgYnkgRC5KLiBCYXJyb3cuCgoyMDAyLTA5LTIzICBNaWNoYWwgTHVkdmlnICA8bWx1ZHZpZ0BzdXNlLmN6PgoKCU1lcmdlZCB4ODYtNjQgcG9ydCBieSBBbmRpIEtsZWVuIDxha0BzdXNlLmRlPgoJYW5kIE1pY2hhbCBMdWR2aWcgPG1sdWR2aWdAc3VzZS5jej4KCSogTWFrZWZpbGUuaW46IE5ldyB0YXJnZXQgJ2hlYWRlcnMnLiBGYWlsdXJlIGlnbm9yZWQuCgkqIGFjY29uZmlnLmg6IE5ldyBkZWZpbmVzIGZvciB4ODYtNjQuCgkqIGNvbmZpZ3VyZS5pbjogRGl0dG8uCgkqIGRlZnMuaDogRGl0dG8uCgkqIGZpbGUuYzogRGl0dG8uCgkqIHNpZ25hbC5jOiBEaXR0by4KCSogcHJvY2Vzcy5jOiBBZGRlZCBzdXBwb3J0IGZvciB4ODYtNjQuCgkqIHV0aWwuYzogRGl0dG8uCgkqIHN5c2NhbGwuYzogRGl0dG8gKyBhZGRlZCBhdXRvbWF0aWMgcGVyc29uYWxpdHkgc3dpdGNoaW5nLgoJKiBsaW51eC9zeXNjYWxsLmg6IERpdHRvLgoJKiBsaW51eC94ODZfNjQ6IE5ldyBkaXJlY3RvcnkuCgkqIGxpbnV4L3g4Nl82NC9NYWtlZmlsZS5pbjogTmV3IGZpbGUuCgkqIGxpbnV4L3g4Nl82NC9nZW50YWIucGw6IERpdHRvLgoJKiBsaW51eC94ODZfNjQvaTM4Ni1oZWFkZXJzLmRpZmY6IERpdHRvLgoJKiBsaW51eC94ODZfNjQvbWFrZWhlYWRlcnMuc2g6IERpdHRvLgoJKiBsaW51eC94ODZfNjQvc3lzY2FsbGVudC5oOiBEaXR0by4KCSogbWVtLmMgKHByaW50X21tYXApOiBBbHdheXMgcHJpbnQgYXJnWzRdIGFzIGludC4KCjIwMDItMDktMjMgIE1pY2hhbCBMdWR2aWcgIDxtbHVkdmlnQHN1c2UuY3o+CgoJKiBjb25maWd1cmUuaW46IEZpeCByZWd1bGFyIGV4cHJlc3Npb25zLgoJKiBsaW51eC9zeXNjYWxsLmg6IEFkZGVkIG1pc3NpbmcgYnJhY2VzIGluIHByb3RvdHlwZSBvZgoJc3lzX2dldGRlbnRzNjQoKS4KCSogZmlsZS5jOiBVc2UgJyNpZmRlZiBMSU5VWCcgaW5zdGVhZCBvZiAnI2lmZGVmIGxpbnV4Jy4KCShzdHJ1Y3QgZmlsZWZsYWdzKTogTWFkZSBleHRlcm4gdG8gaW5oaWJpdCBjb21waWF0aW9uIHdhcm5pbmdzLgoJKHN5c19nZXRkZW50czY0KTogTWVyZ2VkIExJTlVYIGFuZCBTVlI0IHBhcnQuCgkqIHN5c2NhbGwuYyAoZ2V0X3Njbm8pOiBTcGxpdCBtdWx0aWxpbmUgc3RyaW5nIGludG8gdHdvIGRpc3RpbmN0CglzdHJpbmdzLgoKMjAwMi0wNS0yNCAgSm9obiBIdWdoZXMgPGpvaG5AY2FsdmEuY29tPgoKCSogc3RyZWFtLmgsIG5ldC5oOiBBdm9pZCBwb3NzaWJsZSBpbmZpbml0ZSBsb29wIGNhdXNlZCBieQoJdW5zaWduZWQgYXJpdGhtZXRpYyBpbiBwcmVjZWVkaW5nIGNoYW5nZS4KCjIwMDItMDUtMjMgIEpvaG4gSHVnaGVzIDxqb2huQGNhbHZhLmNvbT4KCgkqIGFjY29uZmlnLmg6IEFkZCBIQVZFX09QVEhEUiBhbmQgSEFWRV9UX09QVEhEUiBkZWZpbmVzLgoKCSogYWNsb2NhbC5tNDogQWRkIHRlc3RzIGZvciBzdHJ1Y3Qgb3B0aGRyIGluIHN5cy9zb2NrZXQuaCBhbmQKCXN0cnVjdCB0X29wdGhkciBpbiBzeXMvdGl1c2VyLmgsIGRlZmluZSBIQVZFX09QVEhEUiBhbmQgSEFWRV9UX09QVEhEUgoJaWYgZm91bmQuCgoJKiBjb25maWd1cmUuaW46IHVzZSB0ZXN0cyBmb3Igc3RydWN0IG9wdGhkciBhbmQgc3RydWN0IHRfb3B0aGRyLgoKCSogZGVmcy5oOiBhZGQgbmV3IGZ1bmN0aW9uIHByaW50X3NvY2tfb3B0bWdtdC4KCgkqIGlvLmM6IGFkZCBoYWNrIHRoYXQgbGV0cyBpb2N0bCBkZWNvZGUgZnVuY3Rpb25zIHNldCBhdXhpbGxpYXJ5CglzdHJpbmcgcmV0dXJuLgoKCSogc3RyZWFtLmM6IGJldHRlciBkZWNvZGluZyBmb3IgdGltb2QgaW9jdGxzLgoKCSogbmV0LmM6IGFkZCBmdW5jdGlvbiBwcmludF9zb2NrX29wdG1nbXQsIHVzZWQgYnkgdGltb2QgaW9jdGwKCWRlY29kaW5nIGZ1bmN0aW9ucyBpbiBzdHJlYW0uYy4KCjIwMDItMDUtMjMgIEpvaG4gSHVnaGVzIDxqb2huQGNhbHZhLmNvbT4KCgkqIGFjY29uZmlnLmg6IE1ha2UgYXV0b2hlYWRlciBoYXBweSBhYm91dCBMaW51eC9TdXBlckgKCjIwMDItMDUtMjMgIEpvaG4gSHVnaGVzIDxqb2huQGNhbHZhLmNvbT4KCgkqIHN0cmFjZS5jOiBHZXQgcmlkIG9mIHdhcm5pbmcgaWYgbm90IHVzaW5nIFBPTExfSEFDSwoKMjAwMi0wNS0yMiAgSm9obiBIdWdoZXMgPGpvaG5AY2FsdmEuY29tPgoKCSogbmV0LmM6IFNpbXBsaWZ5IHtnZXQsc2V0fXNvY2tvcHQsIGRlY29kZSBTT19MSU5HRVIsIGNvcGUgd2l0aAoJb3B0aW9ucyB0aGF0IGFyZSBub3QganVzdCBpbnRzLCBjb3BlIHdpdGggc3lzdGVtcyB0aGF0IGRvbid0CgkjZGVmaW5lIFNPTF9UQ1AgYW5kIHNvIG9uLgoKMjAwMi0wNS0yMSAgSm9obiBIdWdoZXMgPGpvaG5AY2FsdmEuY29tPgoKCSogc3RyYWNlLmM6IEZpeCB3YXJuaW5nIGlmIFBPTExfSEFDSyBpcyB1c2VkLgoKMjAwMi0wNS0xNyAgSm9obiBIdWdoZXMgPGpvaG5AY2FsdmEuY29tPgoKCSogc3ZyNC9pb2N0bGVudC5zaDogU29tZSBkZWZpbmVzIG9uIFVXIGNvbWUgd2l0aCB0b28gbWFueSBzcGFjZXMuCgoyMDAyLTA1LTE3ICBKb2huIEh1Z2hlcyA8am9obkBjYWx2YS5jb20+CgoJKiBzdnI0L2lvY3RsZW50LnNoOiBDb3BlIHdpdGggI2RlZmluZXMgd3JhcHBlZCBpbiAjaWZkZWZzLgoKMjAwMi0wNS0xNyAgSm9obiBIdWdoZXMgPGpvaG5AY2FsdmEuY29tPgoKCSogc3RyZWFtLmM6IHRpZHkgdXAgb3V0cHV0IGEgbGl0dGxlLgoKMjAwMi0wNS0xNyAgSm9obiBIdWdoZXMgPGpvaG5AY2FsdmEuY29tPgoKCSogcHJvY2Vzcy5jLCBzdnI0L2R1bW15LmgsIHN2cjQvc3lzY2FsbC5oOiBkZWNvZGUgYXJndW1lbnRzCgl0byBwcm9jcHJpdiBzeXNjYWxsLgoKMjAwMi0wNS0wMSAgV2ljaGVydCBBa2tlcm1hbiA8d2ljaGVydEBkZWVwaGFja21vZGUub3JnPgoKCSogY29uZmlndXJlLmluLCBkZWZzLmgsIHByb2Nlc3MuYywgc29jay5jLCBzeXNjYWxsLmMsIHV0aWwuYzogbWVyZ2UKCSAgcGF0Y2ggZnJvbSBHcmVnIEJhbmtzIDxnYmFua3NAcG9ja2V0cGVuZ3VpbnMuY29tPiBmb3IgTGludXgvU3VwZXJICgkgIHN1cHBvcnQKCjIwMDItMDQtMDEgIFdpY2hlcnQgQWtrZXJtYW4gPHdpY2hlcnRAZGVlcGhhY2ttb2RlLm9yZz4KCgkqIHN0cmFjZS5jOiBjbG9zZSB0Y3AtPm91dGYgaW4gZHJvcHRjYigpCgoyMDAyLTA0LTAxICBXaWNoZXJ0IEFra2VybWFuIDx3aWNoZXJ0QGRlZXBoYWNrbW9kZS5vcmc+CgoJKiBuZXQuYzogZGVjb2RlIHBhY2tldCBvcHRpb25zCgoyMDAyLTAzLTMxICBXaWNoZXJ0IEFra2VybWFuIDx3aWNoZXJ0QGRlZXBoYWNrbW9kZS5vcmc+CgoJKiBsaW51eC97YWxwaGEsaHBwYSxpYTY0LG1pcHMscG93ZXJwYyxzcGFyY30vc3lzY2FsbGVudC5oOiByZWdlbmVyYXRlZAoKMjAwMi0wMy0zMSAgV2ljaGVydCBBa2tlcm1hbiA8d2ljaGVydEBkZWVwaGFja21vZGUub3JnPgoKCSogZGViaWFuLyo6IGFkZGVkCgkqIGxpbnV4L3N5c2NhbGxlbnQuaDogZml4IHR5cG8gYW5kIGFkZCB0aGUgcmVzZXJ2ZWQgc3RyZWFtIHN5c2NhbGxzCgkqIGRlZnMuaCwgZmlsZS5jLCBpby5jOiBmaXggc2lnbmVkL3Vuc2lnbmVkIGlzc3VlcwoJKiBzeXNjYWxsLmM6IGNoZWNrIGZvciBuZWdhdGl2ZSB1X2Vycm9ycwoJKiBjdnNidWlsZDogcmVuYW1lZCB0byBhdXRvZ2VuLnNoCgoyMDAxLTEyLTE3ICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKCSogbmV0LmM6IGFkZCBuZXcgVENQIHNvY2tldCBvcHRpb25zCgoyMDAxLTEwLTI2ICBKb2huIEh1Z2hlcyA8am9obkBjYWx2YS5jb20+CgoJKiBzdnI0L2lvY3RsZW50LnNoOiBDb3BlIHdpdGggI2RlZmluZSBsaW5lcyBjb250YWluaW5nCgljb21tZW50cyB0aGF0IHRlcm1pbmF0ZSBvbiBzdWJzZXF1ZW50IGxpbmVzLiAgVXNlZCB0bwoJY29tbWVudCBvdXQgc3Vic2VxdWVudCBpb2N0bHMhCgoyMDAxLTEwLTI1ICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKCSogbGludXgvaW9jdGxlbnQuaDogcmVnZW5lcmF0ZWQgdXNpbmcgY3VycmVudCBzY3JpcHRzIHNvCgkgIHRlcm0gaW9jdGxzIGFyZSBpbmNsdWRlZAoKMjAwMS0xMC0xOSAgSm9obiBIdWdoZXMgIDxqb2huQENhbHZhLkNPTT4KCgkqIHN0cmFjZS5jKHByb2Nfb3Blbik6IE9uIFNWUjQgb25seSB0cmFjZSB0aGUgc3lzY2FsbHMsCglzaWduYWxzIGFuZCBmYXVsdHMgd2UgY2FyZSBhYm91dC4KCjIwMDEtMTAtMTggIEpvaG4gSHVnaGVzICA8am9obkBDYWx2YS5DT00+CgoJKiBhY2NvbmZpZy5oOiBBZGQgSEFTX1NJR0lORk9fVC4KCSogYWNsb2NhbC5tNDogYWRkIGNoZWNrIGZvciBzaWdpbmZvX3QgaW4gc2lnbmFsLmguCgkqIGNvbmZpZ3VyZS5pbjogdXNlIGNoZWNrIGZvciBzaWdpbmZvX3QuCgkqIGRlZnMuaDogaWYgSEFWRV9TSUdJTkZPX1QgdGhlIGRlY2xhcmUgcHJpbnRzaWdpbmZvLiAgT24gU1ZSNAoJICBhbGxvdyBhY2Nlc3MgdG8gc2lnaW5mbyB3aGVuIHNpZ25hbCByZWNpZXZlZC4KCSogcHJvY2Vzcy5jOiBSZW1vdmUgU1ZSNCBvbmx5IHZlcnNpb24gb2YgcHJpbnRzaWdpbmZvLgoJKiBzaWduYWwuYzogbWVyZ2UgU1ZSNCBhbmQgTElOVVggdmVyc2lvbnMgb2YgcHJpbnRzaWdpbmZvLgoJKiBzdHJhY2UuYzogb24gU1ZSNCBwcmludCBzaWdpbmZvIHdoZW4gc2lnbmFsIHJlY2lldmVkLgoKMjAwMS0xMC0xOCAgSm9obiBIdWdoZXMgIDxqb2huQENhbHZhLkNPTT4KCgkqIHN5c3RlbS5jKHN5c19zc2lzeXMpOiBoYW5kbGUgcmV0dXJuIHZhbHVlcyBmb3Igc3Npc3lzCgoyMDAxLTEwLTE4ICBKb2huIEh1Z2hlcyAgPGpvaG5AQ2FsdmEuQ09NPgoKCSogc2lnbmFsLmM6IGhhbmRsZSBzaWd3YWl0CgkqIHN2cjQvZHVtbXkuYzogTW92ZSBzaWd3YWl0IHRvIGRvbmUKCSogc3ZyNC9zeXNjYWxsLmg6IGhhbmRsZSBzaWd3YWl0CgoyMDAxLTEwLTE2ICBKb2huIEh1Z2hlcyAgPGpvaG5AQ2FsdmEuQ09NPgoKCSogc3lzdGVtLmMoc3lzX3NzaXN5cyk6IGRlY29kZSBzb21lIGFyZ3MgZm9yIHNzaXN5cy4KCjIwMDEtMTAtMTYgIEpvaG4gSHVnaGVzICA8am9obkBDYWx2YS5DT00+CgoJKiBtZW0uYzogTVNfU1lOQyBpcyB6ZXJvLCBzbyBtdXN0IGJlIGZpcnN0IGluIHhsYXQgbGlzdC4KCgkqIHN2cjQvZHVtbXkuaDogbWVtY250bCBpcyBtdWNoIGxpa2UgbWN0bC4KCjIwMDEtMTAtMTYgIEpvaG4gSHVnaGVzICA8am9obkBDYWx2YS5DT00+CgoJKiB1dGlsLmMgKHVtb3Zlc3RyKTogVW5peFdhcmUgKHN2cjQ/KSByZXR1cm5zIDAgd2hlbiB0cnlpbmcKCXRvIHJlYWQgdW5tYXBwZWQgcGFnZS4gIE1ha2UgaXQgcG9zc2libGUgdG8gc3RyYWNlIGtzaC4KCjIwMDEtMTAtMDMgIERhdmlkIE1vc2JlcmdlciAgPGRhdmlkbUBocGwuaHAuY29tPgoKCSogcHJvY2Vzcy5jIChpbnRlcm5hbF9jbG9uZSk6IEF2b2lkIHJhY2UgY29uZGl0aW9uIGJ5IGNsZWFyaW5nCglicmVha3BvaW50IGFmdGVyIGF0dGFjaGluZyB0byBjaGlsZC4KCjIwMDEtMTAtMDIgIERhdmlkIE1vc2JlcmdlciAgPGRhdmlkbUBocGwuaHAuY29tPgoKCSogbGludXgvaWE2NC9zeXNjYWxsZW50Lmg6IERlZmluZSBpYTMyIHN5c2NhbGwgbnVtYmVycyAob3JpZ2luYWxseQoJYnkgRG9uIER1Z2dlciwgd2l0aCBteSByZWZpbmVtZW50cykuCgoJKiBsaW51eC9pYTY0L2lvY3RsZW50Lmg6IFJlZ2VuZXJhdGUgYW5kIG1hbnVhbGx5IG1lcmdlIGNvbmZsaWN0aW5nCglpb2N0bHMgKFRDR0VUUyAmIFNORENUTF9UTVJfVElNRUJBU0UsIGV0Yy4pLgoKCSogbGludXgvaWE2NC9NYWtlZmlsZS5pbiAoaW9jdGxkZWZzLmggaW9jdGxzLmgpOiBVcGRhdGUgZm9yCgluZXcgaW9jdGxlbnQuaCBnZW5lcmF0aW9uIHNjaGVtZS4KCgkqIGxpbnV4L3N5c2NhbGwuaCAoc3lzX2Nsb25lMik6IERlY2xhcmUuCglbSUE2NF0gRGVmaW5lIGlhMzIgc29ja2V0LCBpcGMsIGFuZCBleHRyYSBzeXNjYWxsIG51bWJlcnMuCgoJKiBsaW51eC9pb2N0bGVudC5zaCAocmVnZXhwKTogQWxzbyBoYW5kbGUgPGFzbS9pb2N0bHMuaD4gc28gd2UKCWRvbid0IG1pc3MgdGhlIHR0eSBpb2N0bHMgKHVuZm9ydHVuYXRlbHksIHNvbWUgb2YgdGhlIHNvdW5kIHRpbWVyCglpb2N0bHMgYXJlIGluIGNvbmZsaWN0IHdpdGggdGhlbSEpLgoKCSogdXRpbC5jIChzZXRicHQpIFtJQTY0XTogQWRkIGlhMzIgc3VwcG9ydCAoYnkgRG9uIER1Z2dlcikuCgkoY2xyYnB0KSBbSUE2NF06IERpdHRvLgoKCSogc3lzY2FsbC5jIChpbnRlcm5hbF9zeXNjYWxsKTogSGFuZGxlIFNZU19jbG9uZTIsIFNZUzMyX3dhaXQ0LAoJYW5kIFNZUzMyX2V4aXQuCgkoZ2V0X3Njbm8pOiBHZXQgaWEzMiBzeXNjYWxsIG51bWJlciBmcm9tIHIxIChvcmlnIGVheCkgaW5zdGVhZCBvZgoJcjggKGVheCkuICBIYW5kbGUgVENCX1dBSVRFWEVDVkUuCgkoc3lzY2FsbF9maXh1cCk6IEhhbmRsZSBpYTY0LgoJKHN5c2NhbGxfZW50ZXIpOiBGaXggYXJndW1lbnQgZmV0Y2hpbmcgZm9yIGlhNjQuCgoJKiBzdHJhY2UuYyBbSUE2NCAmJiBMSU5VWF06IEluY2x1ZGUgPGFzbS9wdHJhY2Vfb2Zmc2V0cy5oPi4KCSh0cmFjZSkgW1BUX0dFVFNJR0lORk9dOiBQcmludCBzaWduYWwgYWRkcmVzcyBhbmQgcGMgaWYgcG9zc2libGUuCgoJKiBwcm9jZXNzLmMgKHRjcCk6IE5ldyBmdW5jdGlvbi4KCShjaGFuZ2Vfc3lzY2FsbCk6IEFkZCBzdXBwb3J0IGZvciBpYTY0IGxpbnV4LgoJKHN5c19leGVjdmUpOiBUdXJuIG9uIFRDQl9XQUlURVhFQ1ZFIGZvciBpYTY0IGxpbnV4LgoKCSogZGVzYy5jIChnZXRsayk6IENhc3QgbF9sZW4gdG8gImxvbmcgbG9uZyIgdG8gYXZvaWQgd2FybmluZ3Mgd2hlbgoJdHlwZSBpcyBuYXJyb3dlci4KCSogcmVzb3VyY2UuYyAoc3ByaW50cmxpbTY0KTogRGl0dG8uCgoJKiBkZWZzLmggKFRDQl9XQUlURVhFQ1ZFKSBbSUE2NF06IERlZmluZS4KCVtJQTY0XTogRGVjbGFyZSAiaWEzMiIgdmFyaWFibGUuCgoJKiBiam0uYzogRG8gbm90IGluY2x1ZGUgPGxpbnV4L21vZHVsZS5oPi4gIEl0J3Mgbm90IHNhZmUgdG8gaW5jbHVkZQoJa2VybmVsIGhlYWRlcnMuICBEZWNsYXJlIHRoZSBuZWNlc3NhcnkgY29uc3RhbnRzIGFuZCBzdHJ1Y3R1cmVzCglkaXJlY3RseSBpbnN0ZWFkLgoKMjAwMS0xMC0wMSAgRGF2aWQgTW9zYmVyZ2VyICA8ZGF2aWRtQGhwbC5ocC5jb20+CgoJKiBzaWduYWwuYyAocGFyc2Vfc2lnc2V0X3QpOiBOZXcgZnVuY3Rpb24uCgkoc2lnaXNoYW5kbGVkKTogRml4IG9mZi1ieS1vbmUgYnVnIGJ5IHVzaW5nIHBhcnNlX3NpZ3NldF90KCkgYW5kCglhdm9pZGluZyByZWx5aW5nIG9uIGludGVybmFsIGxheW91dCBvZiBzaWdzZXRfdCBkYXRhc3RydWN0dXJlLgoKMjAwMS0wNC0yNiAgRGF2aWQgTW9zYmVyZ2VyICA8ZGF2aWRtQGhwbC5ocC5jb20+CgoJKiBsaW51eC9pYTY0L3N5c2NhbGxlbnQuaDogQWRkIGdldHVud2luZCgpLgoKMjAwMS0wNC0xMSAgRGF2aWQgTW9zYmVyZ2VyICA8ZGF2aWRtQGhwbC5ocC5jb20+CgoJKiBzeXNjYWxsLmMgKHN5c2NhbGxfZW50ZXIpOiBVc2UgUFRfUkJTX0VORCBpbnN0ZWFkIG9mIGRlcHJlY2F0ZWQKCVBUX0FSX0JTUC4gIFBpY2sgdXAgYXJndW1lbnRzIHN0YXJ0aW5nIHdpdGggb3V0MCwgd2hpY2ggaXMgbm90CglhbHdheXMgdGhlIHNhbWUgYXMgcjMyIChlLmcuLCBjb25zaWRlciBpbmxpbmVkIHN5c2NhbGxzKS4KCjIwMDEtMDktMjggICBKb2huIEh1Z2hlcyA8am9obkBDYWx2YS5DT00+CgogICogcHJvY2Vzcy5jOiBGcmVlQlNELUNVUlJFTlQgbm8gbG9uZ2VyIGhhcyBQVF9SRUFEX1UsIGFuZCBhbnl3YXkgd2UKICAgIHdlcmUgc2hvd2luZyBpdCBhcyBQVF9XUklURV9VISAgRml4IGZyb20gTWF4aW1lIEhlbnJpb24uCgoyMDAxLTA5LTE4ICAgSm9obiBIdWdoZXMgPGpvaG5AQ2FsdmEuQ09NPgoKICAqIG5ldC5jOiBmaXggZGlzcGxheSBvZiBzb2NrYWRkciBzdHJ1Y3R1cmVzLCBzb21ldGltZXMgdG9vIG1hbnkgIn0iLAogICAgc29tZXRpbWVzIHRvbyBmZXcuICBGaXggc3VnZ2VzdGVkIGJ5IFJpY2hhcmQgS2V0dGxld2VsbC4KCjIwMDEtMDgtMTkgICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIHNpZ25hbC5jOiBkbyBub3QgaW5jbHVkZSBhc20vc2lnY29udGV4dC5oIG9uIElBNjQgc2luY2UgaXQgZ2V0cwogICAgdGhlIHN0cnVjdCBmcm9tIGJpdHMvc2lnY29udGV4dC5oIGFscmVhZHkgd2hpY2ggc2lnbmFsLmggaW5jbHVkZXMuCgoyMDAxLTA4LTAzICAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBsaW51eC9pb2N0bGVudC5zaDogY2hhbmdlIHJlZ2V4cHMgc28gd2UgY2F0Y2ggc291bmQgaW9jdGxzIGFzIHdlbGwgaW4KICAgIExpbnV4CiAgKiBsaW51eC9NYWtlZmlsZS5pbjogZml4IGEgZmV3IHRoaW5ncyBzbyB0aGUgaW9jdGwgbGlzdCBpcyBnZW5lcmF0ZWQKICAgIHByb3Blcmx5CiAgKiBpb2N0bC5jOiByZW1lbWJlciB0byBzaGlmdCBpb2N0bCBtYXNrcyBhcyB3ZWxsCgoyMDAxLTA4LTAzICAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBMaW51eC8qKi9zeXNjYWxsZW50Lmg6IHN5bmNocm9uaXplIHNlY3Rpb24gZm9yIGZjbnRsIGFuZCB1c2Ugc3lzX2ZjbnRsCiAgICBmb3Igc3lzX2ZjbnRsIGFzIHdlbGwKCjIwMDEtMDgtMDMgICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIGxpbnV4L2hwcGEvc3lzY2FsbGVudC5oOiB1cGRhdGVkIGZyb20gTWF0dGhldyBXaWxjb3gKCjIwMDEtMDgtMDMgICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIHByb2Nlc3MuYzogc2VlbXMgTGludXgvSUE2NCBjaGFuZ2VkIHJlZ2lzdGVyIG5hbWVzIG9uIHVzLCBzd2l0Y2ggdG8KICAgIHVzaW5nIG5ldyBuYW1lcy4KCjIwMDEtMDgtMDMgICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIHN0cmFjZS5jOiBzZXQgQ0xPRVhFQyAgZmxhZyBmb3Igb3V0cHV0ZmlsZQoKMjAwMS0wOC0wMyAgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogbGludXgvc3BhcmMvc3lzY2FsbC5oLCBsaW51eC9zcGFyYy9zeXNjYWxsZW50Lmg6IGFkZCBzb21lIExGUyBjYWxscwoKMjAwMS0wNy0yMyAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBjb25maWd1cmUuaW46IFN1cHBvcnQgY3Jvc3MtY29tcGlsaW5nIGJldHdlZW4gYXJjaGl0ZWN0dXJlcwoKMjAwMS0wNy0xMyAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBjb25maWd1cmUuaW46IGFkZCBTMzkwIHRvIGFyY2hpdGVjdHVyZSBsaXN0CgoyMDAxLTA3LTEwICBKb2huIEh1Z2hlcyA8am9obkBDYWx2YS5DT00+CgogICogVE9ETywgZGVmcy5oLCBpby5oLCBuZXQuYywgc3RyYWNlLmMsIHN5c2NhbGwuYywgdXRpbC5jOiBNZXJnZSBmaXhlcwogICAgZnJvbSBSaWNoYXJkIEtldHRsZXdlbGwgPHJrZXR0bGV3ZWxsQHpldXMuY29tPiB3aGljaCBhZGQgSS9PIGR1bXBpbmcKICAgIG9mIGFyZ3MgdG8gcmVhZHYvd3JpdGV2LiAgQWxzbyBnZXRzIHJpZCBvZiByZWR1bmRhbnQgcHJpbnRpb3ZlYwogICAgcm91dGluZSBmcm9tIG5ldC5jIChkdXBsaWNhdGUgb2YgdHByaW50X2lvdiBpbiB1dGlsLmMpLgoKMjAwMS0wNy0wMiAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBjb25maWcue2d1ZXNzLHN1Yn06IHVwZGF0ZWQKCjIwMDEtMDUtMTUgIEpvaG4gSHVnaGVzIDxqb2huQENhbHZhLkNPTT4KCiAgKiBzaWduYWwuYzogcGFzcyBhIHBvaW50ZXIgdG8gc2lnbWFzayB0byBwcmludHNpZ21hc2sgZnJvbSBwcmludGNvbnRleHQsCiAgICBpdCB3YXMganVzdCBwYXNzaW5nIHRoZSBzaWdtYXNrICh1Y3AtPnVjX3NpZ21hc2spLgoKMjAwMS0wNS0xNSAgSm9obiBIdWdoZXMgPGpvaG5AQ2FsdmEuQ09NPgoKICAqIHV0aWwuYzogRG9uJ3QgcnVuIG9mZiB0aGUgZW5kIG9mIHZhbGlkIG1lbW9yeSBpbiB1bW92ZXN0ciB3aGVuCiAgICBVU0VfUFJPQ0ZTLiAgSW1wb3J0YW50IGZvciBGUkVFQlNEIHN5c3RlbXMgKHdoaWNoIHNlZW0gdG8gaGF2ZSBhbgogICAgdW5tYXBwZWQgcGFnZSBqdXN0IGFmdGVyIHRoZSBhcmdzL2VudiBhcmVhKS4KCjIwMDEtMDQtMTggIEpvaG4gSHVnaGVzIDxqb2huQENhbHZhLkNPTT4KCiAgKiBjb25maWd1cmUuaW46IHRlc3QgZm9yIHN5cy9uc2NzeXMuaCwgdGhlIG5vbi1zdG9wIGNsdXN0ZXJzIGluY2x1ZGVzLgogICogcHJvY2Vzcy5jOiBoYW5kbGUgcmZvcmt7MSxhbGx9IGFuZCByZXhlY3ZlIGNhbGxzIG9uIG5vbi1zdG9wIGNsdXN0ZXJzLgogICogc3lzY2FsbC5jOiB0cmVhdCByZm9ya3sxLGFsbH0gYW5kIGZvcmt7MSxhbGx9IGFzIGZvcmsgbGlrZSBjYWxscy4KICAgIFRyZWF0IHJleGVjdmUgYXMgYW4gZXhlYy4KICAqIHN5c3RlbS5jOiBkZWNvZGUgYXJndW1lbnRzIHRvIHNzaXN5cyBjYWxsIG9uIG5zYyBzeXN0ZW1zLgogICogc3ZyNC9kdW1teS5oLCBzdnI0L3N5c2NhbGwuaDogbm93IHdlIGhhbmRsZSByZm9ya3sxLGFsbH0sIHNzaXN5cyBhbmQKICAgIHJleGVjdmUgY2FsbHMuCgoyMDAxLTA0LTEyICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIHByb2Nlc3MuYzogZml4IGNhc3QgZm9yIHBvd2VycGMgY29kZQogICogbGludXgvcG93ZXJwYy9zeXNjYWxsZW50Lmg6IHVwZGF0ZSBzeXNjYWxsIGxpc3QKICAqIFJFQURNRTogZml4IGFkZHJlc3MgZm9yIHRoZSBzdHJhY2UgbWFpbGluZ2xpc3QKICAqIHNpZ25hbC5jOiBzd2l0Y2ggdG8gdXNpbmcgL3Byb2MvPHBpZD4vc3RhdHVzIG9uIExpbnV4IHNvIHdlIGNhbiBnZXQKICAgIHRoZSByZWFsdGltZSBzaWduYWxzIGFzIHdlbGwKCjIwMDEtMDQtMTAgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogTWVyZ2UgcGF0Y2hlcyBmcm9tIE1hY2llaiBXLiBSb3p5Y2tpOgogICAgKyB1dGlsLmM6IGFkZCBjb2RlIHRvIHByaW50IFBDIGZvciBNSVBTCiAgICArIGxpbnV4L21pcHMvc3lzY2FsbGVudC5oOiB1cGRhdGVkCiAgICArIHN5c3RlbS5jOiBmb3JtYXRpbmcgZml4ZXMgZm9yIHN5c19zeXNtaXBzCiAgICArIGNvbmZpZ3VyZS5pbjogdGVzdCBmb3IgeWV0IG1vcmUgaGVhZGVycwogICAgKyBzdHJlYW0uYzogdXNlIGNvbmZpZ3VyZS1oZWFkZXJ0ZXN0cyBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gT1MgaGludHMKCjIwMDEtMDQtMDcgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogTkVXUzogc3RhcnQgNC4zLjEgaXRlbXMKICAqIHZlcnNpb24uYzogdXBkYXRlZCB0byBzYXkgNC4zLjEgKHdhcyBzdGlsbCA0LjIsIG9vcHMhKQoKMjAwMS0wNC0wNyAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBjb25maWd1cmUuaW46IHRlc3QgZm9yIGFzbS9zeXNtaXBzLmggYW5kIGxpbnV4L3V0c25hbWUuaAogICogbGludXgvc3lzY2FsbC5oOiBmaXggYSB0eXBvIGZvciBzeXNfc3lzbWlwcwogICogc3lzdGVtLmM6IGluY2x1ZGUgYXNtL3N5c21pcHMuaCBhbmQgbGludXgvdXRzbmFtZS5oIGlmIHRoZXkgZXhpc3QsCiAgICBmaXggdHlwbwoKMjAwMS0wMy0zMSAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBsaW51eC9taXBzL2lvY3RsZW50Lmg6IHVwZGF0ZWQgdXNpbmcgbmV3IExpbnV4IGlvY3RsIHNldHVwCgoyMDAxLTAzLTMxICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIGxpbnV4L2lhNjQvaW9jdGxlbnQuaDogcmVnZW5lcmF0ZWQKCjIwMDEtMDMtMzEgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogbGludXgve2FscGhhLGlhNjQscG93ZXJwY30vaW9jdGxlbnQuc2g6IHJlbW92ZWQsIGFsbCBhcmNocyB1c2UgdGhlCiAgICBnZW5lcmFsIExpbnV4IGlvY3RsZW50LnNoCgoyMDAxLTAzLTMxICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIGxpbnV4L2lvY3RsZW50LnNoOiBhZGQgZGlyIHZhcmlhYmxlIGZvciBsb2NhdGlvbiBvZiBrZXJuZWwgaGVhZGVycwoKMjAwMS0wMy0yOSAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBsaW51eC9pYTY0L2lvY3RsZW50Lmg6IHVwZGF0ZWQgdXNpbmcgbmV3IExpbnV4IGlvY3RsIHNldHVwCgoyMDAxLTAzLTI5ICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIGxpbnV4L3Bvd2VycGMvaW9jdGxlbnQuaDogdXBkYXRlZCB1c2luZyBuZXcgTGludXggaW9jdGwgc2V0dXAKCjIwMDEtMDMtMjkgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogbGludXgvaHBwYS9pb2N0bGVudC5oOiB1cGRhdGVkIHVzaW5nIG5ldyBMaW51eCBpb2N0bCBzZXR1cAoKMjAwMS0wMy0yOSAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBsaW51eC9hbHBoYS9pb2N0bGVudC5oOiB1cGRhdGVkIHVzaW5nIG5ldyBMaW51eCBpb2N0bCBzZXR1cAoKMjAwMS0wMy0yOCAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBjb25maWd1cmUuaW46IHVzZSBzcGFyYyogc28gd2UgY2FuIGNvbXBpbGUgb24gc3BhcmM2NCBhcyB3ZWxsCiAgKiBwcm9jZXNzLmMsIHN5c2NhbGwuYzogd29yayBhcm91bmQgZG91YmxlIGRlZmluZSBvZiBmcHEsIGZxIGFuZCBmcHUKICAgIHN0cnVjdHMgb24gTGludXgvc3BhcmMsIGFuZCB1c2UgcmVncyBpbnN0ZWFkIG9mIHB0X3JlZ3MKICAqIGRvbid0IHVzZSBhc20vc2lnY29udGV4dC5oIG9uIExpbnV4L3NwYXJjCgoyMDAxLTAzLTI4ICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIGxpbnV4L3NwYXJjL2lvY3RsZW50Lmg6IHVwZGF0ZWQgdXNpbmcgbmV3IExpbnV4IGlvY3RsIHNldHVwCgoyMDAxLTAzLTI4ICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIHN0cmFjZS5jOiB1c2UgX19XQUxMIGFzIHdhaXQ0IGZsYWcgaWYgaXQgZXhpc3RzIHNvIHdlIGNhbiBwcm9wZXJseQogICAgdHJhY2UgdGhyZWFkZWQgcHJvZ3JhbXMKCjIwMDEtMDMtMjcgIEpvaG4gSHVnaGVzIDxqb2huQENhbHZhLkNPTT4KCiAgKiBhY2xvY2FsLm00OiBhZGQgY2hlY2sgZm9yIGVuZGlhbm5lc3Mgb2YgbG9uZyBsb25nLgogICogYWNjb25maWcuaDogYWRkICNkZWZpbmUgZm9yIExJVFRMRV9FTkRJQU5fTE9OR19MT05HLgogICogY29uZmlndXJlLmluOiBjaGVjayBmb3IgZW5kaWFubmVzcyBvZiBsb25nIGxvbmcuCiAgKiBkZWZzLmg6IGNoYW5nZSBMT05HX0xPTkcgbWFjcm8gdG8gd29yayB3aXRoIGVpdGhlciBlbmRpYW5uZXNzIG9mCiAgICBsb25nIGxvbmcuCgoyMDAxLTAzLTI3ICBKb2huIEh1Z2hlcyA8am9obkBDYWx2YS5DT00+CgogICogbmV0LmM6IE1ha2UgY29tcGlsYWJsZSBieSBTQ08gVURLIGNvbXBpbGVyIChkb2Vzbid0IGxpa2UgZW1wdHkKICAgIGluaXRpYWxpc2F0aW9uIGxpc3QgZm9yIGFycmF5KS4KCjIwMDEtMDMtMjcgIEpvaG4gSHVnaGVzIDxqb2huQENhbHZhLkNPTT4KCiAgKiBzdnI0L3N5c2NhbGxlbnQuaDogbnRwX2FkanRpbWUgZW50cnkgd2FzIGR1cGxpY2F0ZWQgb24gU29sYXJpcwogICAgc3lzdGVtcyAtIGJhZCBtZXJnZSBvZiBIYXJhbGQgQm9laG1lJ3MgcGF0Y2ggYnkgbWUuCgoyMDAxLTAzLTI3ICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIGxvdHMgb2YgZmlsZXM6IGFkZCBMaW51eC9ocHBhIHN1cHBvcnQKCjIwMDEtMDMtMTkgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogbGludXgvbWlwcy9zeXNjYWxsZW50Lmg6IHdlIGNhbid0IGhhdmUgLTEgbmFyZ3MsIGNoYW5nZSB0byAwCiAgKiBsaW51eC9zeXNjYWxsZW50Lmg6IG5vdCB0aGF0IHN5c2NhbGxzIDIyMCBhbmQgMjIxIGFyZSB1c2VkIG5vdwogICogY29uZmlnLmd1ZXNzOiB1cGRhdGVkCgoyMDAxLTAzLTE3ICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIGxpbnV4L2lvY2xzb3J0LmM6IG5ldyBmaWxlCiAgKiBsaW51eC9pb2N0bGVudC5zaDogY29tcGxldGUgcmV3cml0ZSB0byB1c2UgYSBtb3JlIHNhbmUgYXBwcm9hY2ggdG8gZ2V0CiAgICB0aGUgaW9jdGwgbGlzdCB0aGF0IGRvZXNuJ3QgaW52b2x2ZSBhdHRlbXB0aW5nIHRvICNpbmNsdWRlIGFsbCBrZXJuZWwKICAgIGhlYWRlcnMKICAqIGxpbnV4Ly5jdnNpZ25vcmU6IGFkZGVkIGlvY3RkZWZzLmggYW5kIGlvY3Rscy5oIHdoaWNoIGFyZSBnZW5lcmF0ZWQKICAgIGJ5IHRoZSBuZXcgaW9jdGxlbnQuc2gKICAqIGlvY3RsLmM6IG9ubHkgbG9vayBhdCB0aGUgbnVtYmVyIGFuZCB0eXBlIGJpdHMgZm9yIGxpbnV4LCBzaW5jZQogICAgaW9jdGxlbnQuc2ggbm8gbG9uZ2VyIHN1cHBsaWVzIHRoZSBvdGhlcnMKCjIwMDEtMDMtMDggIEpvaG4gSHVnaGVzIDxqb2huQENhbHZhLkNPTT4KCiAgKiBmcmVlYnNkL3N5c2NhbGxzLnBsOiBPbiBGcmVlQlNEIHdlIG11c3QgY29wZSB3aXRoIENPTVBBVGliaWxpdHkgc3lzY2FsbHMsCiAgICBwcmV0ZW5kIHRoZXkgaGF2ZSBuYW1lcyBlbmRpbmcgd2l0aCAiPyIgc28gdGhhdCAtZSB0cmFjZT1zdGF0IChmb3IKICAgIGV4YW1wbGUpIHdpbGwgd29yay4KICAqIGZyZWVic2QvaTM4Ni9zeXNjYWxsZW50Lmg6IGFkZCA/IHRvIGNvbXBhdGFiaWxpdHkgc3lzY2FsbHMuCiAgKiBmcmVlYnNkL2kzODYvc3lzY2FsbC5oOiBjb25zaXN0ZW5jeS4KCjIwMDEtMDMtMDggIEpvaG4gSHVnaGVzIDxqb2huQENhbHZhLkNPTT4KCiAgKiBhY2NvbmZpZy5oOiBhZGQgbmV3IFNUX3h4eCBkZWZpbmVzLgogICogYWNsb2NhbC5tNDogbWFjcm9zIHRvIGNoZWNrIGZvciBtb3JlIGZpZWxkcyBpbiBzdHJ1Y3Qgc3RhdC4KICAqIGNvbmZpZ3VyZS5pbjogdXNlIG5ldyBtYWNyb3MgdG8gY2hlY2sgZm9yIGZpZWxkcyBpbiBzdHJ1Y3Qgc3RhdC4KICAqIGZpbGUuYzogdXNlIG5ldyBkZWZpbmVzIHRvIHJlcGxhY2UgI2lmZGVmIEZSRUVCU0QgYnkgI2lmIEhBVkVfU1RfeHh4LgoKMjAwMS0wMy0wOCAgSm9obiBIdWdoZXMgPGpvaG5AQ2FsdmEuQ09NPgoKICAqIGRlZnMuaDogcmVuYW1lIHdpbXB5IGdldDY0IGFzIHBvd2VyZnVsIG5ldyBMT05HX0xPTkcKICAqIGZpbGUuYzogdXNlIExPTkdfTE9ORwogICogaW8uYzogdXNlIExPTkdfTE9ORwogICogbWVtLmMgdXNlIExPTkdfTE9ORwoKMjAwMS0wMy0wOCAgSm9obiBIdWdoZXMgPGpvaG5AQ2FsdmEuQ09NPgoKICAqIGFjY29uZmlnLmg6IG5ldyAjZGVmaW5lcyBIQVZFX0xPTkdfTE9OR19PRkZfVCBhbmQgSEFWRV9MT05HX0xPTkdfUkxJTV9ULgogICogYWNsb2NhbC5tNDogcm91dGluZXMgdG8gY2hlY2sgZm9yIGxvbmcgbG9uZyBvZmZfdCBhbmQgcmxpbV90LgogICogY29uZmlndXJlLmluOiBjaGVjayBmb3IgbG9uZyBsb25nIG9mZl90IGFuZCBybGltX3QuCiAgKiBkZXNjLmM6IGlmIEhBVkVfTE9OR19MT05HX09GRl9UIHRyZWF0IGZsb2NrIGFzIGZsb2NrNjQKICAqIGZpbGUuYzogaWYgSEFWRV9MT05HX0xPTkdfT0ZGX1QgdHJlYXQgc3RhdCxsc3RhdCxmc3RhdCBhbmQgbHNlZWsgYXMgNjQKICAgIGJpdCB2ZXJzaW9ucy4KICAqIGlvLmM6IGlmIEhBVkVfTE9OR19MT05HX09GRl9UIHVzZSA2NCBiaXQgdmVyc2lvbnMgb2YgcHJlYWQgYW5kIHB3cml0ZS4KICAqIG1lbS5jOiBpZiBIQVZFX0xPTkdfTE9OR19PRkZfVCB1c2UgNjQgYml0IHZlcnNpb24gb2YgbW1hcAogICogcmVzb3VyY2UuYzogaWYgSEFWRV9MT05HX0xPTkdfT0ZGX1QgdXNlIDY0IGJpdCB2ZXJzaW9ucyBvZiBnZXRybGltaXQKICAgIGFuZCBzZXRybGltaXQuCiAgKiBmcmVlYnNkL3N5c2NhbGxzLnByaW50OiBkb24ndCBleHBsaWNpdGx5IHVzZSA2NCBiaXQgdmVyc2lvbnMgb2YgY2FsbHMsCiAgICBub3cgZG9uZSBhdXRvbWF0aWNhbHkgZm9yIHVzLgogICogZnJlZWJzZC9pMzg2L3N5c2NhbGwuaDogZGl0dG8uCiAgKiBmcmVlYnNkL2kzODYvc3lzY2FsbGVudC5oIGRpdHRvLgoKMjAwMS0wMy0wNyAgSm9obiBIdWdoZXMgPGpvaG5AQ2FsdmEuQ09NPgoKICAqIGRlc2MuYzogT24gRnJlZUJTRCBmbG9jayBzdHJ1Y3R1cmUgdXNlcyA2NCBiaXQgb2Zmc2V0cy4KICAqIGZpbGUuYzogT24gRnJlZUJTRCB1c2Ugc3RhdDY0IGFuZCBwYWxzIGluc3RlYWQgb2Ygc3RhdC4KICAqIGZyZWVic2Qvc3lzY2FsbHMucHJpbnQ6IHVzZSBzdGF0NjQsIGxzdGF0NjQgYW5kIGZzdGF0NjQuCiAgKiBmcmVlYnNkL2kzODYvc3lzY2FsbC5oOiBkaXR0by4KICAqIGZyZWVic2QvaTM4Ni9zeXNjYWxsZW50Lmg6IGRpdHRvLgoKMjAwMS0wMy0wNyAgSm9obiBIdWdoZXMgPGpvaG5AQ2FsdmEuQ09NPgoKICAqIGZpbGUuYzogbWVyZ2UgbWlzc2luZyBwYXJ0IG9mIEhhcmFsZCBC9mhtZSdzIHNvbGFyaXMgcGF0Y2hlcywKICAgIHdhcyBvbmx5IGRlY2xhcmluZyBzeXNfe3N0YXQ2NCxsc3RhdDY0LGZzdGF0NjR9IG9uIGxpbnV4IQoKMjAwMS0wMy0wNyAgSm9obiBIdWdoZXMgPGpvaG5AQ2FsdmEuQ09NPgoKICAqIHN2cjQvZHVtbXkuaDogZml4IG11bHRpcGxlIGRlZmluZSB3YXJuaW5nIG9uIG5vbiBMRlM2NCBzeXN0ZW1zLgogICogc3ZyNC9zeXNjYWxsZW50Lmg6IHByZWFkL3B3cml0ZSBhcmUgVEYgY2FsbHMuCgoyMDAxLTAzLTA3ICBKb2huIEh1Z2hlcyA8am9obkBDYWx2YS5DT00+CgogICogZGVmcy5oOiBhZGQgQUxJR042NCBtYWNybyB0byBjb3BlIHdpdGggRnJlZUJTRCdzIHN0cmFuZ2UgaW5zaXN0ZW5jZQogICAgb24gYWxpZ25tZW50IGZvciBvZmZfdCAoNjQgYml0KSBhcmd1bWVudHMuICBBbHNvIHNpbXBsaWZ5IGdldDY0IHNvCiAgICB3ZSBkb24ndCBuZWVkIHRvIGtub3cgZW5kaWFubmVzcyBvZiBsb25nIGxvbmcuCiAgKiBmaWxlLmM6IEZyZWVCU0Qgbm93IHVzZXMgNjQgYml0IHZlcnNpb25zIG9mIGxzZWVrLCB0cnVuY2F0ZSwKICAgIGZ0cnVuY2F0ZSwgYWxsb3dzIHJlZHVjdGlvbiBpbiBudW12YmVyIG9mIGhvcnJpZCAjaWYncwogICogaW8uYzogRnJlZUJTRCBub3cgdXNlcyA2NCBiaXQgdmVyc2lvbnMgb2YgcHJlYWQsIHB3cml0ZS4KICAqIG1lbS5jOiBGcmVlQlNEIG5vdyB1c2VzIDY0IGJpdCB2ZXJzaW9uIG9mIG1tYXAuCiAgKiBmcmVlYnNkL3N5c2NhbGxzLnByaW50OiB1c2UgNjQgYml0IHZlcnNpb25zIG9mIHZhcmlvdXMgc3lzY2FsbHMuCiAgKiBmcmVlYnNkL2kzODYvc3lzY2FsbC5oOiB1c2UgNjQgYml0IHZlcnNpb25zIG9mIHZhcmlvdXMgc3lzY2FsbHMuCiAgKiBmcmVlYnNkL2kzODYvc3lzY2FsbGVudC5oOiB1c2UgNjQgYml0IHZlcnNpb25zIG9mIHZhcmlvdXMgc3lzY2FsbHMuCgoyMDAxLTAzLTA2ICBKb2huIEh1Z2hlcyA8am9obkBDYWx2YS5DT00+CgogICogZmlsZS5jOiBJbXBsZW1lbnQgdHJ1bmNhdGU2NCBhbmQgZnRydW5jYXRlNjQKICAqIHN2cjQvZHVtbXkuaDogYWRkIGR1bW1pZXMgZm9yIHRydW5jYXRlNjQgYW5kIGZ0cnVuY2F0ZTY0IGZvciBub24KICAgIExGUzY0IHN5c3RlbXMuCiAgKiBzdnI0L3N5c2NhbGwuaDogYWRkIGRlY2xhcmF0aW9ucyBmb3IgdHJ1bmNhdGU2NCBhbmQgZnRydW5jYXRlNjQuCgoyMDAxLTAzLTA2ICBKb2huIEh1Z2hlcyA8am9obkBDYWx2YS5DT00+CgogICogZnJlZWJzZC9zeXNjYWxscy5wbDogZml4IGZvciBGcmVlQlNEIDQuMSAobmV3IG9wdGlvbmFsIGZpZWxkIGluCiAgICBzeXNjYWxsIG1hc3RlciBmaWxlKS4KCjIwMDEtMDMtMDYgIEpvaG4gSHVnaGVzIDxqb2huQENhbHZhLkNPTT4KCiAgKiBzeXNjYWxsLmM6IGZpeCBmb3IgRnJlZUJTRCA0LjEgKFNZU19zZW1jb25maWcgaGFzIGRpc2FwcGVhcmVkKS4gIEFsc28KICAgIHphcCBpbmNvcnJlY3Qgc3lzY2FsbCBzdWJhcmcgcmFuZ2UgY2hlY2suCgoyMDAxLTAzLTA2ICBKb2huIEh1Z2hlcyA8am9obkBDYWx2YS5DT00+CgogICogY29uZmlndXJlLmluLCBkZWZzLmgsIGRlc2MuYywgZmlsZS5jLCBpby5jLCBtZW0uYywgbmV0LmMsIHJlc291cmNlLmMsCiAgICBzaWduYWwuYywgc3lzY2FsbC5jLCBzdnI0L2R1bW15LmgsIHN2cjQvc3lzY2FsbC5oLCBzdnI0L3N5c2NhbGxlbnQuaDoKICAgIG1lcmdlIEhhcmFsZCBC9mhtZSdzIHNvbGFyaXMgcGF0Y2hlcyAoX0xGUzY0X0xBUkdFRklMRSBhbmQga2VybmVsIGFpbwogICAgbW9zdGx5KS4KCjIwMDEtMDMtMDYgIEpvaG4gSHVnaGVzIDxqb2huQENhbHZhLkNPTT4KCiAgKiBkdW1teS5oOiBhZGQgdW5pbXBsZW1lbnRlZCBVVyBzeWNhbGxzCiAgKiBzeXNjYWxsLmg6IHdlIGNhbiBkbyBzZXR0aW1lb2ZkYXkgZm9yIFVXLCB3aG9wZWUhCiAgKiBzeXNjYWxsZW50Lmg6IGZpeCB1bmltcGxlbWVudGVkIFVXIHN5c2NhbGxzCgoyMDAxLTAzLTA2ICBKb2huIEh1Z2hlcyA8am9obkBDYWx2YS5DT00+CgogICogYWNsb2NhbC5tNDogbG9vayBmb3IgcHJfc3lzY2FsbCBpbiBwcl9sd3AgaWYgd2UgSEFWRV9NUF9QUk9DRlMKICAqIGRlZnMuaDogYWRkIFBSX1NZU0NBTEwgdG8gYWxsb3cgdXNlIG9mIHByX2x3cC5wcl9zeXNjYWxsIGlmIGl0IGV4aXN0cy4KICAqIHN5c2NhbGwuYzogdXNlIFBSX1NZU0NBTEwgaW5zdGVhZCBvZiBwcl9zeXNjYWxsLCBmaXggdXAgVW5peFdhcmUgY29kZQogICAgc28gaXQgZG9lc24ndCB0cnkgdG8gdXNlIHByX3N5c2FyZy4KCjIwMDEtMDMtMDYgIEpvaG4gSHVnaGVzIDxqb2huQENhbHZhLkNPTT4KCiAgKiBhY2xvY2FsLm00OiBvbiBzeXN0ZW1zIG90aGVyIHRoYW4gbGludXggbG9vayBmb3Igc3RhdDY0IGluIHN5cy9zdGF0LmgKICAqIGZpbGUuYzogaGFuZGxlIHhzdGF0IHZlcnNpb24gX1NUQVQ2NF9WRVIsIGFrYSBzdGF0NjQuCgoyMDAxLTAzLTA2ICBKb2huIEh1Z2hlcyA8am9obkBDYWx2YS5DT00+CgogICogbmV0LmM6IG1ha2Ugc3VyZSBTT0xfIG9wdGlvbnMgYXJlIGRlZmluZWQgYmVmb3JlIHVzaW5nLgogICogc2lnbmFsLmM6IGRlY2xhcmUgc2lnc2V0IHZhcmlhYmxlLCBvbmx5IHVzZWQgb24gbGludXgsIGluc2lkZSAjaWZkZWYuCgoyMDAxLTAyLTIxICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIG5ldC5jOiBmaXggZm9ybWF0IGZvciBwcmludGluZyBVbml4IGRvbWFpbiBzb2NrZXRzCgoyMDAxLTAyLTE5ICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIGxpbnV4L21pcHMvc3lzY2FsbGVudC5oOiB1c2UgbmV3IHN5c19zeXNtaXBzCiAgKiBzeXN0ZW0uYzogYWRkIHN5c19zeXNtaXBzIGRlY29kaW5nCgoyMDAxLTAyLTE2ICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIENSRURJVFM6IGFkZCBBcmthZGl1c3ogTWlza2lld2ljeiA8bWlzaWVrQHBsZC5vcmcucGw+IHdobwogICAgc3VibWl0dGVkIHRoZSBJUDYgc2NvcGUgSUQgdXBkYXRlcwogICogYWNjb25maWcuaDogYWRkIEhBVkVfU0lONl9TQ09QRV9JRCBhbmQgSEFWRV9TSU42X1NDT1BFX0lEX0xJTlVYCiAgKiBhY2xvY2FsLm00OiBhZGQgQUNfU0lONl9TQ09QRV9JRCB0byBjaGVjayBpZiBzaW42X3Njb3BlX2lkIGlzCiAgICBhdmFpbGFibGUKICAqIGNvbmZpZ3VyZS5pbjogY2hlY2sgZm9yIGlmX2luZGV4dG9uYW1lIGZ1bmN0aW9uIGFuZCBzaW42X3Njb3BlX2lkCiAgKiBuZXQuYzogdGVhY2ggcHJpbnRzb2NrIGFib3V0IElQNiBzY29wZSBpZHMKCjIwMDEtMDItMTYgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogY29uZmlndXJlLmluOiB0ZXN0IGZvciBuZXRpbmV0L3RjcC5oIGFuZCBuZXRpbmV0L3VkcC5oIGV4aXN0YW5jZQogICogbmV0LmM6IGluY2x1ZGUgbmV0aW5ldC90Y3AuaCBhbmQgbmV0aW5ldC91ZHAuaCBpZiB0aGV5IGV4aXN0CiAgKiBNYWtlZmlsZS5pbjogdXNlIEBtYW5kaXJAIGFuZCBAYmluZGlyQAoKMjAwMC0xMS0yNiAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiAgbmV0LmM6IGZpeCBmb3JtYXRpbmcgZXJyb3IgaW4gc3lzX3NldHNvY2tvcHQKICAqICBuZXQuYzogYWRkIGxpc3Qgb2Ygc29ja2V0bGF5ZXJzIGFuZCB1c2UgdGhhdCBmb3IgW2dzXWV0c29ja29wdAoKMjAwMC0xMC0xMiAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiB0aW1lLmM6IHVzZSBzeXMvdGltZXguaCBzbyB0aGluZ3MgY29tcGlsZSB3aXRoIDIuMiBrZXJuZWxzCiAgKiBzdHJlYW0uYzogdGVzdCBpZiBNU0dfKiBjb25zdGFudHMgYXJlICNkZWZpbmVkCgoyMDAwLTA5LTAzICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIHByb2Nlc3MuYzogcGVyZm9ybSBicHQgdHJpY2sgZm9yIGNsb25lIGFzIHdlbGwgc28gd2UgY2FuIGdldCB0aGUKICAgIHBpZCBvZiB0aGUgY2hpbGQgYmVmb3JlIGl0IHN0YXJ0cyBkb2luZyBzb21ldGhpbmcKICAqIGZpbGUuYzogcmVuYW1lIGRpcmVudDY0IHN0cnVjdCB0byBrZXJuZWxfZGlyZW50NjQgc28gdGhpbmdzIGNvbXBpbGUKICAgIGFnYWluIHdpdGggbmV3ZXIgbGliY3MKICAqIHRlc3QvY2xvbmUuYzogaW1wcm92ZSBvdXIgdGVzdGNhc2UgYSBiaXQKICAqIE1lcmdlIGFub3RoZXIgcGF0Y2ggZnJvbSBH5GVsIFJvdWFsbGFuZCB3aXRoIEZyZWVCU0QgdXBkYXRlcwoKMjAwMC0wOS0wMSAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBsb3RzIG9mIGZpbGVzOiBtZXJnZSBwYXRjaCBmcm9tIEdh62wgUm91YWxsYW5kIHRvIGFkZAogICAgc3VwcG9ydCBmb3IgRnJlZUJTRC4KCjIwMDAtMDgtMDkgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogZmlsZS5jOiB1cGRhdGUgdG8gcmVmbGVjdCB0aGF0IHN0X2lubyBzdWRkZW5seSBiZWNhbWUgYSBsb25nIGxvbmcKICAgIGluIHRoZSBpbiBMaW51eCAyLjQuMC10ZXN0NgoKMjAwMC0wOC0wOSAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiB0ZXN0L2Nsb25lLmM6IG1pbm9yIGZpeHVwCiAgKiBBbm90aGVyIGJ1bmNoIG9mIHBhdGNoZXMgZnJvbSBKb2huIEh1Z2hlcyBtZXJnZWQ6CiAgKiBzaWduYWwuYzoKICAgICsgU1ZSNCBwcmludGNvbnRleHQoKTogc2lnc2V0X3QgIT0gc2lnc2V0X3QqCiAgICArIGdldGNvbnRleHQgcmV0dXJucyBhIHZhbHVlLCBzbyBwcmludCBvbiBleGl0IG9mIHN5c2NhbGwKICAgICsgYWRkIFVDX0ZQIHRvIHVjb250ZXh0X2ZsYWdzIGZvciBPUyB3cml0ZXJzIHRoYXQgY2FuJ3Qgc3BlbGwKICAgICsgc3lzX3NpZ25hbCgpOiBzcGVjaWFsIGNhc2UgU0lHX3tFUlIsREZMLElHTn0KICAgICsgZGVjb2RlX3N1YmNhbGwoKTogb25seSBkbyBzdWJjYWxsIHJhbmdlIGNoZWNraW5nIHdoZW4gbmVlZGVkCiAgKiBidW5jaCBvZiBVbml4V2FyZSB1cGRhdGVzCiAgKiBhY2xvY2FsLm00LCBhY2NvbmZpZy5oLCBjb25maWd1cmUuaW46IGFkZCB0ZXN0IGZvciBsb25nIGxvbmcgdHlwZQoKMjAwMC0wNy0wNCAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBuZXQuYzogYWRkIFNPTF9QQUNLRVQgYW5kIFNPTF9SQVcgc29ja2V0IG9wdGlvbnMsIHVwZGF0ZQogICAgU09MX0lQIGFuZCBTT0xfVENQCgoyMDAwLTA2LTIzICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIHN0cmFjZS5jOiBjbG9zZSBvdXRmIGJlZm9yZSB3ZSBleGVjIGEgY2hpbGQgcHJvY2VzcwoKMjAwMC0wNi0wOSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CgogICogY29uZmlndXJlLmluOiBEb24ndCBsaW5rIGFnYWluc3QgbGlibnNsIG9uIExpbnV4LCBpdCdzIHVubmVjZXNzYXJ5LgogICogZGVmcy5oIChzdHJ1Y3QgdGNiKTogTWFrZSBhdXhzdHIgbWVtYmVyIGNvbnN0LgogICogZmlsZS5jIChmc21hZ2ljKTogQW5kIG1hbnkgbW9yZSBtYWdpYyBudW1iZXJzLgogICogdXRpbC5jOiBEb24ndCBpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4gZm9yIGdsaWJjIDIuMSBhbmQgdXAuCgoyMDAwLTA0LTI2ICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIGRlZnMuaDogYmFsYW5jZSAjaWYvI2VuZGlmIGFnYWluCiAgKiBzeXN0ZW0uYzogZml4IHJldHVybiBzdGF0ZW1lbnRzIGluIHN5c19jYXBnZXQoKQogICogTWVyZ2UgdXBkYXRlcyBmcm9tIFRvcGkgTWlldHRpbmVuIDxUb3BpLk1pZXR0aW5lbkBuaWMuZmk+OgogICAgKyBmaWxlLmM6IGFkZCBGX1tTR11FVFNJRyB0byBmY250bCBmbGFncwogICAgKyBzdHJhY2UuYzogZG9uJ3Qgc2V0cmVbZ3VdaWQgaWYgbm90IG5lZWRlZAogICAgKyBzeXN0ZW0uYzogaGFuZGxlIHN5c19yZWJvb3QgZm9yIExpbnV4CiAgICArIHRlcm0uYzogYWRkIGJhdWRyYXRlIGNvbnN0YW50cyB1cCB0byBCNDAwMDAwMAogICAgKyBsaW51eC8qKi9zeXNjYWxsZW50Lmg6IG5vdGUgdGhhdCBtdW5sb2NrYWxsIGhhcyBubyBhcmd1bWVudHMKCjIwMDAtMDQtMjUgIERhdmlkIE1vc2JlcmdlciAgPGRhdmlkbUBocGwuaHAuY29tPgoKICAqIENSRURJVFM6IGZpeCBlbWFpbCBhZGRyZXNzCiAgKiBwcm9jZXNzLmM6IGhhbmRsZSBQUl9bR1NdRVRfVU5BTElHTiBhbmQgUFJfW0dTXUVUX0tFRVBDQVBTCiAgKiBzaWduYWwuYzogaG9ub3VyIG9mZnNldCBvZiBzaWdjb25maWcgaW4gc2lnZnJhbWUgc3RydWN0dXJlIGZvcgogICAgTGludXgvaWE2NAogICogbGludXgvaWE2NC9zeXNjYWxsZW50Lmg6IEFkZCBwZXJmbW9uY3RsLCBwaXZvdHJvb3QsIG1pbmNvcmUsIGFuZAogICAgbWFkdmlzZSBzeXNjYWxscy4KICAqIHN5c2NhbGwuYyAoc3lzY2FsbF9lbnRlcik6IFdpdGggS2V2aW4ncyBsYXRlc3QgcHRyYWNlIHBhdGNoZXMsCiAgICBBUl9CU1AgcG9pbnRzIHRvIHRoZSBfZW5kXyBvZiB0aGUgYWN0aXZlIHJlZ2lzdGVyIGZyYW1lLCBzbyB3ZSBuZWVkCiAgICB0byBhZGp1c3QgYnNwIGJ5IG1vdmluZyBpdCBiYWNrIGJ5IHRoZSBzaXplIG9mIHRoZSBhY3RpdmUgZnJhbWUKICAgIGJlZm9yZSB1c2luZyBpdC4KCjIwMDAtMDQtMjQgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogcHJvY2Vzcy5jOiBhZGQgc3BhcmMgc3VwcG9ydCB0byBjaGFuZ2Vfc3lzY2FsbAoKMjAwMC0wNC0yMiAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBsaW51eC9taXBzL3N5c2NhbGxlbnQuaDogZml4IHNvbWUgdHlwb3MKCjIwMDAtMDQtMTQgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogbGludXgvbWlwcy9zeXNjYWxsZW50Lmg6IGFkZGVkIG5hbWVzIGZvciBTVlI0LCBTWVNWLCBCU0Q0LjMgYW5kIFBPU0lYCiAgICBzeXNjYWxscwoKMjAwMC0wNC0xMyAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBkZWZzLmg6IExpbnV4L01JUFMgdXNlcyBzeXNjYWxscyB1cCB0byA+NGssIHNvIHNldCBNQVhfUVVBTFMgdG8KICAgIDQ5OTkKCjIwMDAtMDQtMDkgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogUkVBRE1FLWxpbnV4OiB1cGRhdGVkIHRvIG5vdGUgdGhhdCBzdHJhY2UgbWlnaHQgbm90IGNvbXBpbGUKICAgIHdpdGggZGV2ZWxvcG1lbnQga2VybmVscwogICogYmptLmM6IHN5c19xdWVyeV9tb2R1bGU6IGNoZWNrIGlmIG1hbGxvYyBzdWNjZWVkcwogICogc3lzdGVtLmM6IHN5c19jYXBbZ3NdZXQoKTogY2hlY2sgaWYgbWFsbG9jIHN1Y2NlZWRzLCBvbmx5IG1hbGxvYyBvbmNlCiAgKiBsaW51eC9zeXNjYWxsZW50Lmg6IHVwZGF0ZWQgZm9yIDIuMy45OXByZTMKICAqIGxpbnV4L2FscGhhL3N5c2NhbGxlbnQuaDogdXBkYXRlZCBmb3IgMi4zLjk5cHJlMywgYWRkIGFsbCBvc2Ygc3lzY2FsbHMKICAgIGV2ZW4gdGhvdWdoIExpbnV4IGRvZXNuJ3QgaW1wbGVtZW50IHRoZW0KICAqIHN5c2NhbGwuYzogYWRkIGdsb2JhbCB2YXJpYWJsZXMgZm9yIE1JUFMgcmVnaXN0ZXJzIGFzIHdlbGwKICAqIHN5c2NhbGwuYzogbW92ZSBnbG9iYWwgdmFyaWFibGVzIHRvIGJlZm9yZSBnZXRfc2NubyBzaW5jZSB0aGF0IHVzZXMgdGhlbQogICogdXRpbC5jOiBvb3BzLCBtaXNzcGVsbGVkIGRlZmluZWQKICAqIHByb2Nlc3MuYzogZml4IHB0cmFjZSBjYWxscyBpbiBjaGFuZ2Vfc3lzY2FsbAogICogbWVtLmM6IGRlY29kZSBzeXNfbWFkdmlzZQogICogTWVyZ2UgcGF0Y2ggZnJvbSBUb3BpIE1pZXR0aW5lbiA8VG9waS5NaWV0dGluZW5AbmljLmZpPgogICAgKyBhZGQgc3VwcG9ydCBmb3IgcXVvdGFjdGwsIGZkYXRhc3luYywgbWxvY2ssIG1sb2NrYWxsLCBtdW5sb2NrYWxsICYgYWNjdAogICAgKyBzbWFsbCBmaXggZm9yIFJMSU1JVF8qIGFuZCBSVVNBR0VfQk9USAogICAgKyBlbmhhY2Ugc3VwcG9ydCBmb3IgY2FwZ2V0IGFuZCBjYXBzZXQKCjIwMDAtMDItMTkgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiB0ZXN0L3Zmb3JrLmM6IG5ldyBmaWxlIHRvIHRlc3QgdmZvcmsgdHJhY2VzCiAgKiB0ZXN0Ly5jdnNpZ25vcmU6IG5ldyBmaWxlCiAgKiBkZWZzLmg6IFVwIG1heGltdW0gbnVtYmVyIG9mIHRyYWNlZCBwcm9jZXNzZWQgdG8gNjQKICAqIHN0cmFjZS5jOiBEaXNhYmxlIHNvbWUgZGVidWdnaW5nIGNvZGUgZnJvbSBkYXZpZG0KICAqIGltcGxlbWVudCBzZXRhcmcgZm9yIG1vcmUgYXJjaGl0ZWN0dXJlcwogICogaW1wbGVtZW50IGNoYW5nZV9zeXNjYWxsCgoxOTk5LTEyLTI3ICBNb3J0ZW4gV2VsaW5kZXIgIDx0ZXJyYUBkaWt1LmRrPgoKCSogc3lzY2FsbC5jIChsb29rdXBfc2lnbmFsLCBsb29rdXBfZGVzYyk6IGlzZGlnaXQgcmVxdWlyZXMgYW4KIAlfdW5zaWduZWRfIGNoYXIgcGFyYW1ldGVyLgoKMjAwMC0wMi0xNCBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIFMzOTAgdXBkYXRlcwoKMjAwMC0wMi0wMyBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIE1lcmdlIExpbnV4L2lhNjQgcGF0Y2hlcwoKMjAwMC0wMS0wMiBQYXZlbCBNYWNoZWsJICAgICA8cGF2ZWxAdWN3LmN6PgoKICAqIHByb2JlIGlmIHN5cy9wb2xsLmggZXhpc3RzIGluIGNvbmZpZ3VyZSArIG1pbm9yIGNsZWFudXBzCgogICogc3lzY2FsbC5jOiBzcGxpdCB0cmFjZV9zeXNjYWxsIGludG8gZmV3IHBpZWNlcyB0byBtYWtlIGNvZGUgcmVhZGFibGUKCjIwMDAtMDEtMjEgV2ljaGVydCBBa2tlcm1hbiAgPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogUmVsZWFzZSB2ZXJzaW9uIDQuMiB0byBnZXQgdGhlIGN1cnJlbnQgdXBkYXRlcyBvdXQgYW5kIHNvCiAgICB3ZSBjYW4gY29uY2VudHJhdGUgaW4gZmluaXNoaW5nIHRoZSBjbG9uZSBzdXBwb3J0LgoKMjAwMC0wMS0xMSBXaWNoZXJ0IEFra2VybWFuICA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBBZGQgMTkwMCB0byB0bV95ZWFyIGluIHNwcmludHRpbWUKCjE5OTktMTItMjQgIFdpY2hlcnQgQWtrZXJtYW4gIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICogZmlsZS5jOiBwcm90ZWN0IHByaW50c3RhdDY0IHdpdGggU1RBVDY0IGluc3RlYWQgb2YgbGludXggc28gd2UgY2FuCiAgIGNvbXBpbGUgb24gTGludXggYXJjaGl0ZWN0dXJlcyB0aGF0IGRvbid0IGhhdmUgaXQKICogdXRpbC5jOiBmaXggTE9PUCBmb3IgQVJNCgpGcmkgRGVjIDI0IDE4OjA1OjAwIEVTVCAxOTk5CgoxOTk5LTEyLTIzICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KCiAqIGZpbGUuYzogVXNlIHVnbHkgbGliY19zdGF0IHRyaWNrIGFsc28gZm9yIHN0YXQ2NC4KICAgSW1wbGVtZW50IHN5c19zdGF0NjQsIHN5c19mc3RhdDY0LCBzeXNfbHN0YXQ2NCwgYW5kIHByaW50c3RhdDY0LgogKiBwcm9jZXNzLmMgKGludGVybmFsX2Nsb25lKTogRml4IGEgZmV3IHR5cG9zIGFuZCBhZGQgZGVmaW5pdGlvbnMgdG8gbWFrZQogICBpdCBhdCBsZWFzdCBjb21waWxlLgogKiBsaW51eC9zeXNjYWxsLmg6IERlY2xhcmUgc3lzX3N0YXQ2NCwgc3lzX2xzdGF0NjQsIGFuZCBzeXNfZnN0YXQ2NC4KICogbGludXgvc3lzY2FsbGVudC5oOiBEZWZpbmUgdGFibGUgZW50cmllcyBmb3Igc3lzX3N0YXQ2NCwgc3lzX2xzdGF0NjQsCiAgIGFuZCBzeXNfZnN0YXQ2NC4KICogYWNsb2NhbC5tNDogRGVmaW5lIEFDX1NUQVQ2NC4KICogYWNjb25maWcuaDogRGVmaW5lIEhBVkVfU1RBVDY0LgogKiBjb25maWd1cmUuaW46IEFkZCBBQ19TVEFUNjQuCgpUaHUgRGVjIDIzIDE1OjAxOjM3IENFVCAxOTk5IFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogTWVyZ2UgcGF0Y2ggZnJvbSBmdHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9saW51eDM5MC8gdG8gYWRkCiAgICBzdXBwb3J0IGZvciBMaW51eCBvbiB0aGUgSUJNIFMvMzkwIGFyY2hpdGVjdHVyZQogICogcHJvY2Vzcy5jOiBhZGQgaW50ZXJuYWxfY2xvbmUoKSwgY3VycmVudGx5IG9ubHkgc2hvd3MgdGhlIG9wdGlvbnMKICAqIHN5c2NhbGwuYzogdXNlIGludGVybmFsX2Nsb25lIHRvIGhhbmRsZSBTWVNfY2xvbmUKCk1vbiBEZWMgMjAgMDA6Mjc6NTAgQ0VUIDE5OTkgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBSZXdyaXRlIG1tYXAtaGFuZGxpbmcgdG8gc3VwcG9ydCBtbWFwMiBvbiBMaW51eAoKVHVlIERlYyAxNCAxMTozNToxNiBDRVQgMTk5OSBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIE5vdGUgdGhhdCBMaW51eCBjYW4gaGFuZGxlIHN5c19zZW1vcCgpIGFzIHdlbGwKClR1ZSBOb3YgMzAgMTE6MDU6MjYgQ0VUIDE5OTkgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBJbmNsdWRlIGxpbnV4L2luNi5oIGZvciBnbGliYzIuMCBhbmQgb2xkZXIKCk1vbiBOb3YgMjkgMTY6MzM6MDQgQ0VUIDE5OTkgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBNZXJnZSBwYXRjaGVzIGZyb20gSm9obiBIdWdoZXMgdG8gbWFrZSBjb25maWd1cmUgc3VwcG9ydCBVbml4V2FyZQoKU2F0IE5vdiAyNyAyMTozODoxNyBDRVQgMTk5OSBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIEVuaGFuY2Ugc3lzX3F1ZXJ5X21vZHVsZQoKRnJpIE5vdiAyNiAxMDo1MTo1NSBDRVQgMTk5OSBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIFBhdGNoZXMgZnJvbSBKb2huIEh1Z2hlczoKICAgICsgY29zbWVjdGljIGZpeCBpbiBzeXNfZ2V0cG1zZwogICAgKyBhbGxvdyBuZXQuYyB0byBjb21waWxlIG9uIHN5c3RlbXMgd2l0aG91dCBBRl9JTkVUNgogICAgKyBPbmx5IHVzZSBsb25nX3RvX3NpZ3NldCBvbiBMaW51eCBzeXN0ZW1zCiAgICArIFVuaXhXYXJlIHRyZWF0cyBzaWdtYXNrX3QgYW5kIHNpZ21hc2tfdCogYXMgdGhlIHNhbWUgdGhpbmcKICAgICsgQWRkIHBvbGxoYWNrCiAgICArIFBhcnNlIG1vdW50IGFyZ3VtZW50cyBmb3IgVW5peFdhcmUKICAgICsgQUNMIGZpeGVzIGZvciBVbml4V2FyZQoKRnJpIE5vdiAyNiAwMToyODowOSBDRVQgMTk5OSBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIFJlbGVhc2UgNC4xIHRvIGdldCBhbGwgdGhlIGNoYW5nZXMgbWFkZSBvdXQgdGhlcmUKClRodSBOb3YgMTggMTg6MDQ6MDQgQ0VUIDE5OTkgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBNZXJnZSBzdHJhY2Vmb3JrIGZyb20gQWxleGV5IEt1em5ldHNvdiA8a3V6bmV0QG1zMi5pbnIuYWMucnU+CiAgICArIFNvY2tldCBjYWxscyBwYXJzZWQgYmV0dGVyCgkrIGJ1bmNoIG9mIGFscGhhIE9TRiBzeXNjYWxscyBhZGRlZAoJKyBGaXggYWxwaGEgMzIvNjQgYml0IGlzc3VlcwoKTW9uIE5vdiAgMSAyMDo1MjowOCBDRVQgMTk5OSBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIE1vdmUgTGludXgga2VybmVsbW9kdWxlLWZ1bmN0aW9ucyBmcm9tIHN5c3RlbS5jIHRvIGJqbS5jIGFuZAogICAgcmVtb3ZlIGR1cGxpY2F0ZSBmb3Igc3lzX2NyZWF0ZV9tb2R1bGUKICAqIExpbnV4IE1JUFMgdXBkYXRlczoKICAgICsgUGxheSB3aXRoICNpZmRlZidzIGluIG5ldC5jIHRvIGdldCBJUHY2IHJpZ2h0CiAgICArIFVzZSBwcmludGFyZ3MgZm9yIHZtODYtc3lzY2FsbAoKU3VuIE9jdCAzMSAyMjowMzowMCBDRVQgMTk5OSBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIE1lcmdlIExpbnV4IG1pcHMgcGF0Y2ggZnJvbSBGbG9yaWFuIExvaG9mZiA8ZmxvQHJmYzgyMi5vcmc+CgpNb24gT2N0IDExIDAwOjM2OjI1IENFU1QgMTk5OSBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIE1lcmdlIHBhdGNoIGZyb20gS2VpdGggT3dlbnMgPGthb3NAb2NzLmNvbS5hdT4gdG8gc3lzX3F1ZXJ5X21vZHVsZQogICAgYW5kIHN5c19kZWxldGVfbW9kdWxlIGNvcnJlY3RseQoKV2VkIE9jdCAgNiAwMjowMDozMyBDRVNUIDE5OTkgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBVcGRhdGUgY3ZzYnVpbGQgdG8gZ2l2ZSBhIGJldHRlciBlcnJvciBpZiBhdXRvY29uZiBpc24ndCBpbnN0YWxsZWQKICAqIEFkZCB0ZXN0IGZvciBsaW51eC9wdHJhY2UuaCB0byBjb25maWd1cmUKICAqIFNpbmNlIHdlIGRlZmluZSBHTlVfU09VUkNFIGluIHRoZSBNYWtlZmlsZSB3ZSBkb24ndCBuZWVkIHRvIGRlZmluZQogICAgVVNFX0dOVSBpbiBmaWxlLmMgYW55bW9yZQoKRnJpIFNlcCAxMCAwNDozNToxNiBDRVNUIDE5OTkgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiAjZGVmaW5lIFVTRV9HTlUgYmVmb3JlIGluY2x1ZGluZyBmaWxlLmMgc28gd2UgZ2V0IHNvbWUgZXh0cmEgT18qIGZsYWdzCgpUdWUgQXVnIDMxIDE2OjI3OjIxIENFU1QgMTk5OSBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIEFkZCBtaXNzaW5nIH0gaW4gSVB2NiBvdXRwdXQKClR1ZSBBdWcgMzEgMDE6MjM6MDggQ0VTVCAxOTk5ICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIFVwZGF0ZSBjb3B5cmlnaHQgZm9yIHN0cmFjZS1ncmFwaCB0byBCU0QgdG8gYmUgY29uc2lzdGVudCB3aXRoCiAgICB0aGUgcmVzdCBvZiBzdHJhY2UKCk1vbiBBdWcgMzAgMDA6NTM6NTcgQ0VTVCAxOTk5IFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogTWVyZ2UgcGF0Y2ggZnJvbSBEYW5pZWwgSmFjb2Jvd2l0ejogS0VSTl9KQVZBXyogYW5kIEtFUk5fU0VDVVJFTFZMIGFyZW4ndAogICAgZGVmaW5lZCBmb3IgYWxsIGtlcm5lbHZlcnNpb25zCiAgKiBBZGQgc3RyYWNlLWdyYXBoLCB3cml0dGVuIGJ5IFJpY2hhcmQgQnJhYWttYW4gPGRhcmtAeHM0YWxsLm5sPgoKVGh1IEF1ZyAxOSAxMzoxMDoxNSBDRVNUIDE5OTkgSmFrdWIgSmVsaW5layA8ampAdWx0cmEubGludXguY3o+CgogICogbGludXgvc3BhcmMvc3lzY2FsbC5oOiBEZWNsYXJlIGNyZWF0ZV9tb2R1bGUvaW5pdF9tb2R1bGUuCiAgKiBjb25maWd1cmUuaW46IEFsbG93IGNvbXBpbGF0aW9uIGluIGEgZGlmZmVyZW50IGRpcmVjdG9yeQogICAgdGhhbiB0aGUgc291cmNlIG9uZS4KICAqIHNpZ25hbC5jOiBVc2UgYXNtL3JlZy5oIGFuZCBzdHJ1Y3QgcmVncyBpbnN0ZWFkIG9mIHB0X3JlZ3MKICAgIHNvIHRoYXQgd2UgZG9uJ3QgZGVwZW5kIG9uIGFzbS9wdHJhY2UuaCB3aGljaCBjbGFzaGVzIHdpdGgKICAgIGdsaWJjIHN5cy9wdHJhY2UuaC4KICAqIHV0aWwuYzogTGlrZXdpc2UuCiAgKiBzeXNjYWxsLmM6IExpa2V3aXNlLgoKV2VkIEF1ZyAgNCAxODowMTo1MCBDRVNUIDE5OTkgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBTeXNjYWxsIDk0IG9uIExpbnV4IGFscGhhIGlzIHN5c19wb2xsCgpTdW4gSnVsIDI1IDE0OjM4OjMzIENFU1QgMTk5OSBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIE1lcmdlIGluIFVuaXhXYXJlIHBhdGNoZXMgZnJvbSBKb2huIEh1Z2hlcyA8am9obkBDYWx2YS5DT00+CgpUaHUgSnVsIDE1IDIzOjAwOjMyIENFU1QgMTk5OSBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIE1lcmdlIHBhdGNoIGZyb20gTWFjaWVqIFcuIFJvenlja2kgPG1hY3JvQGRzMi5wZy5nZGEucGw+OgogICAgKyBDb3JyZWN0bHkgaW1wbGVtZW50IGZpeCBzeXNfY3JlYXRlbW9kdWxlIChMaW51eCkKICAgICsgQWRkIGxpbWl0ZWQgaGFuZGxpZyBvZiBzeXNfaW5pdG1vZHVsZSAoTGludXgpCgpUdWUgSnVsIDEzIDE3OjA3OjUwIENFU1QgMTk5OSBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIEFkZCBjb25maWd1cmUtdGVzdCBmb3Igc3lzL3JlZy5oIGFuZCB1c2UgdGhhdAogICogVXNlIHN5cy9yZWcuaCBpbnN0ZWFkIG9mIGFzbS9wdHJhY2UuaAoKU2F0IEp1bCAxMCAwMTo0NjoxMCBDRVNUIDE5OTkgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBSZW1vdmUgaGFjayBpbiBzaWduYWwuYyBmb3IgYXJtIGFyY2hpdGVjdHVyZQogICogQWRkIGhhY2sgc28gd2UgY29tcGlsZSBjb3JyZWN0bHkgb24gcG93ZXJwYwoKRnJpIEp1bCAgOSAwMjoyODoxNiBDRVNUIDE5OTkgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBBZGQgYSBjb3JyZWN0ZWQgcGF0Y2ggZnJvbSBEYW5pZWwgSmFjb2Jvd2l0egoKVGh1IEp1bCAgOCAxNjowMDowNCBDRVNUIDE5OTkgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBNZXJnZSBwYXRjaCBmcm9tIERhbmllbCBKYWNvYm93aXR6IHRvIGFsbG93IHVzIHRvIHVzZSB0aGUga2VybmVsIHR5cGVzCiAgICBmb3IgdGhlIHN0YXQgc3RydWN0dXJlCgpUaHUgSnVuIDI0IDE1OjU0OjE4IENFU1QgMTk5OSBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIEZpeCB0ZXN0IGZvciBzeXMvcmVnIGluY2x1ZGUKClR1ZSBKdW4gMjIgMTc6MjY6MzMgQ0VTVCAxOTk5IFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogRml4ZWQgc29tZSBMaW51eC9wb3dlcnBjIHNpbGx5bmVzcywgdGhhbmtzIHRvIERhbmllbCBKYWNvYm93aXR6CiAgKiBGaXhlZCBzb21lIFN1bk9TIGNvbXBpbGUgcHJvYmxlbXMgZWFybGllciB0aGF0IEkgZm9yZ290IHRvIGluY2x1ZGUKICAgIGhlcmUKCk1vbiBKdW4gMTQgMTI6NDQ6MjUgQ0VTVCAxOTk5CgogICogQXZvaWQgbGVha2ludCBmZCBpbnRvIGNoaWxkIHdoZW4gZm9ya2luZywgcGF0Y2ggZnJvbQogICAgSm9obiBIdWdoZXMgPGpvaG5AQ2FsdmEuQ09NPgoKRnJpIEp1biAxMSAxNDo1NDo0NyBDRVNUIDE5OTkKCiAgKiBBcHBsaWVkIElSSVg2NCBwYXRjaCBmcm9tIFRob21hcyBFLiBEaWNrZXkgPGRpY2tleUBjbGFyay5uZXQ+CiAgKiBBcHBsaWVkIFNvbGFyaXMgYW5kIG1hbnBhZ2UgdXBkYXRlcyBmcm9tIEd1eSBIYXJyaXMgPGd1eUBuZXRhcHAuY29tPgoKV2VkIEp1biAgOSAxNDo0ODo0OSBDRVNUIDE5OTkgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBCcm91Z2h0IHN5c2NhbGwgbGlzdCBmb3IgYWxwaGEgdXAgdG8gZGF0ZQoKV2VkIEp1biAgMiAxODozMDoxMiBDRVNUIDE5OTkgSmFrdWIgSmVsaW5layA8ampAdWx0cmEubGludXguY3o+CgogICogc3lzdGVtLmM6IHN5c191bW91bnQyIHN5c2NhbGwgc3VwcG9ydC4KICAqIGxpbnV4L3NwYXJjL2Vycm5vZW50Lmg6IFVwZGF0ZSBzcGFyYy1saW51eCBlcnJub3MuCiAgKiBsaW51eC9zcGFyYy9zeXNjYWxsLmg6IFVwZGF0ZSB1c2VkIHNwYXJjLWxpbnV4IHN5c2NhbGxzLgogICogbGludXgvc3BhcmMvc3lzY2FsbGVudC5oOiBNYXRjaCAyLjIuOSBzeXN0ZW0gY2FsbHMuCiAgKiBmaWxlLmM6IHNwYXJjLWxpbnV4IGFzbS9zdGF0LmggdXNlcyBkZXZfdCBldGMuIHR5cGVzLAogICAgc28gaXQgbmVlZHMgc3RyYWNlJ3Mgb3duIGNvcHkgb2YgdGhlIHN0YXQgc3RydWN0dXJlLgogICogdXRpbC5jOiBNYWtlIGl0IGNvbXBpbGUgb24gc3BhcmMtbGludXguCiAgKiBzdHJhY2UuYzogRml4IHN0cmFjZSAtZiBhbmQgLWZmIG9wZXJhdGlvbiBvbiBzcGFyYy1saW51eC4KICAqIHNpZ25hbC5jOiBydF9zaWdhY3Rpb24gaGFzIGRpZmZlcmVudCBhcmd1bWVudHMgb24gc3BhcmMqLWxpbnV4CiAgICBhbmQgYWxwaGEtbGludXguCiAgKiBzeXNjYWxsLmM6IFJlY29nbml6ZSBzcGFyYzY0LWxpbnV4IGJpbmFyaWVzLgoKRnJpIE1heSAyOCAyMTowOTowMCBQU1QgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4KCiAgKiBjb25maWd1cmUuaW46IEZpeCB0eXBvIChDRkxBRyAtPiBDRkxBR1MpLgoKICAqIHN5c2NhbGwuYzogRG9uJ3QgaW5jbHVkZSBsaW51eC9wdHJhY2UuaCBleHBsaWNpdGx5IGZvciBnbGliYy4KClRodSBNYXkgMjcgMTM6NTk6MjcgQ0VTVCAxOTk5IFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogQWRkIHNvbWUgc3lzY3RsIHN1cHBvcnQsIHBhdGNoIGZyb20gVWxyaWNoIERyZXBwZXIKCldlZCBNYXkgMjYgMDE6MDQ6MzQgQ0VTVCAxOTk5IFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogVXNlIGtlcm5lbCBkaXJlbnQgc3RydWN0dXJlIGZvciBMaW51eAoKU3VuIE1heSAgOSAwMjoxODozMCBDRVNUIDE5OTkgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBNZXJnZSBpbiBwYXRjaGVzIGZyb20gQW5kcmVhcyBTY2h3YWIgPHNjaHdhYkBpc3Nhbi5jcy51bmktZG9ydG11bmQuZGU+CiAgICArIHNvbWUgbGF5b3V0IGFuZCBvdGhlciBtaW5vciBmaXhlcwogICAgKyBhZGQgc29tZSBtNjhrLXNwZWNpZmljIHRoaW5ncyB0byBsaW51eC9zeXNjYWxsZW50LmguIE5vdGUgdGhhdCBtNjhrCiAgICAgIGlzIHNpbWlsYXIgZW5vdWdoIHRvIGkzODYgdG8gbm90IG5lZWQgaXQncyBvd24gc3ViZGlyZWN0b3J5CiAgICArIGFkZCBzdXBwb3J0IGZvciBzZW5kZmlsZSBhbmQgbXJlbWFwIHN5c2NhbGxzIGZvciBMaW51eAogICogTWVyZ2UgaW4gcGF0Y2hlcyBmcm9tIFNhc2NoYSBTY2h1bWFubiA8c2FzY2hhQHNjaHVtYW5uLjJucy5kZT4KICAgICsgaW9jdGxzLmggdnMgc3lzL2lvY3RsLmggb24gQWxwaGEgcGxhdGZvcm0KICAgICsgcG9pbnRlciB3YXMgY2FzdGVkIHRvIGFuIGludCBpbiBzdHJlYW0uYwogICAgKyBzdHJzaWduYWwoKSBuZWVkcyAtRF9HTlVfU09VUkNFIGluIENGTEFHUwogICAgKyBzZXZlcmFsIG90aGVyIGNhc3RzIGNoYW5nZWQKICAgICsgY29ycmVjdCBBUk0vUE9XRVJQQyBhcmNoaXRlY3R1cmUgZGVmaW5lcyBpbiBhY2NvbmZpZy5oCiAgKiBNZXJnZSBpbiBwYXRjaGVzIGZyb20gTW9ydGVuIFdlbGluZGVyIDx0ZXJyYUBkaWt1LmRrPgogICAgKyBhZGQgc29tZSBhdXRvY29uZi10ZXN0cyBmb3IgaW5jbHVkZWZpbGVzCiAgICArIGhhbmRsZSBzb2xhcmlzIHZlcnNpb24gb2Ygc2lnY29udGV4dCBzdHJ1Y3QgKGFjdHVhbGx5IEkgaGFja2VkIHRoaXMKICAgICAgdXAgYWdhaW4sIGJ1dCB0aGUgaWRlYSBpcyBoaXMgOikKClN1biBBcHIgMTggMjI6MzI6NDIgQ0VTVCAxOTk5IFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogVXBkYXRlIHN5c2NhbGxzIGZvciBsaW51eCBhbHBoYSwgcGF0Y2ggZnJvbSBCYXJ0IFdhcm1lcmRhbQogICAgPGJhcnR3QGRlYmlhbi5vcmc+CiAgKiBVcGRhdGUgc3BhcmMgY29kZSBzbyBpdCBhY3R1YWxseSBjb21waWxlcwoKRnJpIEFwciAxNiAwMjoxODowNSBDRVNUIDE5OTkgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBBZGQgc3VwcG9ydCBmb3Igb2xkXypzdGF0IGZ1bmN0aW9ucyBmb3IgTGludXguIFBsZWFzZSBub3RlIHlvdSBuZWVkCiAgICB0byB1c2UgcmVhc29uYWJseSByZWNlbnQga2VybmVsIGhlYWRlcnMgdG8gY29tcGlsZSBzdHJhY2Ugbm93LgogICogQ2hhbmdlIHJlZmVyZW5jZXMgdG8gTElOVVggaW50byBsaW51eCBpbiBmaWxlLmMKICAqIEZpeCBpbmNsdWRlIGZvciBMRFQgaW4gbWVtLmMKClRodSBBcHIgMTUgMjI6Mjg6MTUgQ0VTVCAxOTk5IFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogQ2hhbmdlIGluIHN0cmFjZSBtYWludGFpbmVyc2hpcCwganJzIHBhc3NlZCB0aGUgdG9yY2ggdG8gbWUuCiAgKiBVc2UgYXV0b2NvbmYgMi4xMwogICogSW5jb3Jwb3JhdGUgYWxsIGNoYW5nZXMgYWxyZWFkeSBtYWRlIGluIHRoZSBEZWJpYW4gc3RyYWNlIHBhY2thZ2U6CiAgICArIGNvbXBpbGVzIHdpdGggbW9yZSBMaW51eCBrZXJuZWxzCiAgICArIGFkZGVkIHN1cHBvcnQgZm9yIG1vcmUgTGludXggYXJjaGl0ZWN0dXJlcwogICAgKyBhZGQgc3VwcG9ydCBmb3IgYSBsb3Qgb2YgZXh0cmEgc3lzY2FsbHMKICAgICsgZml4IHNvbWUgcHJvYmxlbXMgd2l0aCBoYW5naW5nIGNoaWxkcmVuCiAgICArIGNoZWNrIHN0cmF5IHN5c2NhbGwgYWZ0ZXIgZXhlY3YKICAgICsgZGVjb2RlIGNhcGdldCBhbmQgY2Fwc2V0IGFyZ3VtZW50cwogICAgKyBhZGQgbW9yZSBjb25zdGFudHMgdG8gbmV0LmMKICAgICsgZGV0ZWN0IFJPU0UgbmV0d29ya2luZwogICAgKyBhZGQgbW9yZSBwcm90b2NvbCBmYW1pbGllcyB0byBkb21haW5zCiAgICArIGFkZCBJUElQIHByb3RvY29sCiAgICArIGFkZGVkIE1TR19QUk9YWSBhbmQgTVNHX0NUUlVOQyB0byBtc2dfZmxhZ3MKICAgICsgYWRkZWQgU09fQlNEQ09NUEFUIGFuZCBTT19SRVVTRVBPUlQgdG8gc29ja29wdGlvbnMKICAgICsgYWRkZWQgSVAsIElQWCBhbmQgVENQLW9wdGlvbnMKICAgICsgYWRkZWQgSVAsIElQWCBhbmQgVENQIHN1cHBvcnQgdG8gZ2V0LS9zZXRzb2Nrb3B0KCkKICAgICsgYWRkZWQgSVBYIHN1cHBvcnQKICAgICsgdXBkYXRlZCBoYW5kbGluZyBvZiBzaWduYWxzCgpTdW4gT2N0IDI3IDIyOjI4OjAwIDE5OTYgIEouIFJpY2hhcmQgU2xhZGtleSAgPGpyc0B3b3JsZC5zdGQuY29tPgoKCSogdXRpbC5jICh1bW92ZXN0cikgW0xJTlVYXTogSGFuZGxlIExpbnV4IGxpa2UgU3VuT1M0CglpbnN0ZWFkIG9mIFNWUjQuICBUaGF0IGlzLCByZWFkIGEgZmV3IGJ5dGVzIGF0IGEgdGltZQoJdG8gYXZvaWQgb3ZlcnJ1bm5pbmcgdGhlIGVuZCBvZiB0aGUgc3RhY2suCgpGcmkgTWF5IDMxIDAxOjQ4OjQ5IDE5OTYgIEouIFJpY2hhcmQgU2xhZGtleSAgPGpyc0B3b3JsZC5zdGQuY29tPgoKCSogdmVyc2lvbi5jOiBWZXJzaW9uIDMuMSBpcyByZWxlYXNlZC4KClRodSBNYXkgMjMgMDE6MDQ6NDMgMTk5NiAgSi4gUmljaGFyZCBTbGFka2V5ICA8anJzQHdvcmxkLnN0ZC5jb20+CgoJKiBhY2xvY2FsLm00IChBQ19ERUNMX1NZU19FUlJMSVNUKTogVHJ5IGxvb2tpbmcgaW4gc3RkaW8uaAoJYXMgd2VsbCBzaW5jZSB0aGF0J3Mgd2hlcmUgZ2xpYmMgZGVjbGFyZXMgaXQuICBHbyBmaWd1cmUuCgkqIHNpZ25hbC5jIChzeXNfc2lncmV0dXJuKSBbQUxQSEFdOiBVc2Ugc2lnY29udGV4dAoJaW5zdGVhZCBvZiBzaWdjb250ZXh0X3N0cnVjdCBzaW5jZSBnbGliYyB2NSsgYXBwYXJlbnRseQoJcGxheXMgZ2FtZXMgd2l0aCB0aGUgbmF0aXZlIE9TIG5hbWVzcGFjZS4KCUZyb20gRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBBWlN0YXJOZXQuY29tPi4KCk1vbiBNYXkgMjAgMjM6MTc6MTQgMTk5NiAgSi4gUmljaGFyZCBTbGFka2V5ICA8anJzQHdvcmxkLnN0ZC5jb20+CgoJKiB2ZXJzaW9uLmM6IFZlcnNpb24gMy4wLjE0IGlzIHJlbGVhc2VkLgoKCSogYWNsb2NhbC5tNCAoQUNfU1RSVUNUX01TR19DT05UUk9MKTogTmV3IG1hY3JvLgoJKiBjb25maWd1cmUuaW46IEFkZCBjYWxsIHRvIEFDX1NUUlVDVF9NU0dfQ09OVFJPTC4KCSogbmV0LmMgKHByaW50bXNnaGRyKTogSGFuZGxlIEJTRCA0LjMgYW5kIDQuNCBtc2doZHIgbWVtYmVycwogCWRpZmZlcmVudGx5LgoJUmVwb3J0ZWQgYnkgSGVucmlrIFN0b3JuZXIgPHN0b3JuZXJAb3NpcmlzLnBpbmcuZGs+LgoKCSogY29uZmlndXJlLmluOiAoQUNfQ0hFQ0tfe0hFQURFUlMsRlVOQ1N9KTogQWRkIGNoZWNrcyBmb3IKIAlzeXMvZmlsaW8uaCBhbmQgc3lzL3N0cmVhbS5oIGFuZCByZW1vdmUgY2hlY2sgZm9yIHBvbGwuCgkqIGRlc2MuYyAoZGVjb2RlX3NlbGVjdCwgc3lzX3NlbGVjdCwgc3lzX29sZHNlbGVjdCkgW0xJTlVYXToKIAlIYW5kbGUgb2xkIGFuZCBuZXcgc3R5bGVzIG9mIGFyZ3VtZW50IHBhc3NpbmcgZm9yIHNlbGVjdCBvbiBMaW51eC4KCSogaW9jdGwuYywgc3RyZWFtLmM6IENvbmRpdGlvbmFsaXplIHN0cmVhbSBjb2RlIG9uIHByZXNlbmNlIG9mCglzeXMvc3RyZWFtLmggaW5zdGVhZCBvZiBwb2xsIGJlY2F1c2UgZ2xpYmMgaW1wbGVtZW50cyBwb2xsIGJ1dAoJbm90IHRoZSByZXN0IG9mIHRoZSBzdHJlYW0gaW50ZXJmYWNlLgoJKiBzaWduYWwuYyBbTElOVVhdOiBTdGFuZGFyZGl6ZSBvbiB0aGUgbmFtZSBzaWdjb250ZXh0X3N0cnVjdC4KCShzeXNfc2lncHJvY21hc2spIFtBTFBIQV06IEhhbmRsZSBPU0YgZmxhdm9yIHdoaWNoIGlzIG1vcmUgbGlrZQoJc2lnc2V0bWFzay4KCSogdGVybS5jICh0ZXJtX2lvY3RsKTogVXNlIF9WTUlOLCBpZiBwcmVzZW50LCBmb3IgVEN7RyxTfUVUQSouCgkqIHV0aWwuYyAodW1vdmVuLCB1bW92ZXN0cik6IE1vdmUgZGF0YSBpbiBsb25nLXNpemVkIGNodW5rcwoJYXQgYSB0aW1lLCBpbnN0ZWFkIG9mIGhhcmQgY29kaW5nIGl0IHRvIGJlIDQuCglGcm9tIERhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AQVpTdGFyTmV0LmNvbT4uCgpNb24gTWF5IDIwIDAxOjE5OjM2IDE5OTYgIEouIFJpY2hhcmQgU2xhZGtleSAgPGpyc0B3b3JsZC5zdGQuY29tPgoKCSogdmVyc2lvbi5jOiBWZXJzaW9uIDMuMC4xMyBpcyByZWxlYXNlZC4KCgkqIGNvbmZpZ3VyZS5pbiAoQUNfQ0hFQ0tfSEVBREVSUyk6IEFkZCBjaGVjayBmb3IgYXNtL3NpZ2NvbnRleHQuaC4KCSogc2lnbmFsLmMgW0hBVkVfQVNNX1NJR0NPTlRFWFRfSF06IENvbmRpdGlvbmFsbHkgaW5jbHVkZQoJYXNtL3NpZ2NvbnRleHQuaCB0byBkZWZpbmUgc2lnY29udGV4dF9zdHJ1Y3QgYW5kIGRvbid0IGRlZmluZSBpdAoJbG9jYWxseSBpZiB0aGUgaGVhZGVyIGlzIHByZXNlbnQuCgoJKiBzeXNjYWxsLmMgKG5lcnJub3N7MCwyfSk6IENvcnJlY3Qgc2l6ZSBjb21wdXRhdGlvbi4KCgkqIE1ha2VmaWxlLmluOiBSZW1vdmUgZGVwZW5kZW5jaWVzIGFuZCBydWxlcyByZWxhdGluZyB0byBmaWxlcwogCW5vcm1hbGx5IGZvdW5kIGluIHRoZSBvcyBkaXJlY3RvcnkuICBCZWNhdXNlIG9mIHRoZSBuZXcgc2NoZW1lIHdlCiAJZG9uJ3Qga25vdyBwcmVjaXNlbHkgd2hlcmUgdGhleSBjb21lIGZyb20uICBTaWdoLgoJKiBzaWduYWxlbnQuc2g6IE1ha2UgaXQgd29yayBmb3Igc3Vub3M0LCBsaW51eCwgYW5kIHN2cjQuCgkqIHtzdW5vczQsbGludXh7LC9hbHBoYX0sc3ZyNH0vTWFrZWZpbGUuaW46IE1ha2UgcnVsZXMgY29ycmVzcG9uZAogCXRvIHRyYWRpdGlvbmFsIG1ha2Ugc3ludGF4LiAgQWRkIHNpZ25hbGVudC5oIHRvIGZpbGVzIHdoaWNoIGNhbgogCXVuY29uZGl0aW9uYWxseSBiZSByZWJ1aWx0LiAgUHJldmVudCBzaWduYWxlbnQuaCBmcm9tIGJlaW5nCiAJdW5jb25kaXRpb25hbGx5IGJlaW5nIHJlYnVpbHQgc2luY2UgaXQncyBjdXN0b21pemVkLgoJKiB7c3Vub3M0LGxpbnV4eywvYWxwaGF9LHN2cjR9L3tpb2N0bGVudCxlcnJub2VudCxzaWduYWxlbnR9Lmg6CiAJVXNlIHZlcnNpb25zIGJ1aWx0IGJ5IHtpb2N0bGVudCxlcnJub2VudCxzaWduYWx0ZW50fS5zaC4KICAJKiBzdW5vczQvaW9jdGxlbnQuc2g6IFdvcmsgYXJvdW5kIHNwcmludGYgdHJvdWJsZXMgd2l0aCBTdW5PUwogCTQuMS40IGFuZCBnY2MgMi43LjIuCgpTdW4gTWF5IDE5IDE3OjE0OjA5IDE5OTYgIEouIFJpY2hhcmQgU2xhZGtleSAgPGpyc0B3b3JsZC5zdGQuY29tPgoKCSogY29uZmlndXJlLmluLCBNYWtlZmlsZS5pbjogQWRkIE9TQVJDSCBjb25jZXB0IHRvIGZpbmlzaAoJYnVpbGQgc3VwcG9ydCBmb3IgdGhlIGFscGhhLgoJKiBNYWtlZmlsZS5pbiwgbGludXgvTWFrZWZpbGUuaW46IFJld3JpdGUgY2xlYW4sIGRpc3RjbGVhbiwKCWFuZCBtYWludGFpbmVyLWNsZWFuIHJ1bGVzLgoJKiBkZWZzLmgsIGlvY3Rsc29ydC5jOiBNYWtlIGlvY3RsIGNvZGUgbWVtYmVyIHVuc2lnbmVkLgoJKiBpb2N0bC5jLCBpb2N0bHNvcnQuYyAoY29tcGFyZSk6IFBlcmZvcm0gZXhwbGljaXQgY2hlY2tpbmcKCWZvciBsZXNzLCBncmVhdGVyLCBhbmQgZXF1YWwgc2luY2Ugc3VidHJhY3Rpb24gb24gdHdvJ3MKCWNvbXBsZW1lbnQgbnVtYmVycyBpc24ndCBhbiBvcmRlciByZWxhdGlvbiAoaXQgaXNuJ3QgdHJhbnNpdGl2ZSkhCgkqIGxpbnV4L01ha2VmaWxlLmluOiBBZGQgcnVsZXMgZm9yIHRoZSBzaWduYWxlbnQuaCBmaWxlLgoJKiBsaW51eC9hbHBoYS9NYWtlZmlsZS5pbjogTmV3IGZpbGUuCgpTdW4gTWF5IDE5IDAxOjEyOjI4IDE5OTYgIEouIFJpY2hhcmQgU2xhZGtleSAgPGpyc0B3b3JsZC5zdGQuY29tPgoKCSogdmVyc2lvbi5jOiBWZXJzaW9uIDMuMC4xMiBpcyByZWxlYXNlZC4KCgkqIGxpbnV4eyxhbHBoYX0vaW9jdGxlbnQuc2g6IFR3ZWFrIGZvciByZWNlbnQga2VybmVscy4KCUZyb20gTWljaGFlbCBFIENoYXN0YWluIDxtZWNAZHVyYWNlZi5zaG91dC5uZXQ+LgoKCSogZGVmcy5oIChTVVBQT1JURURfUEVSU09OQUxJVEVTLCBERUZBVUxUX1BFUlNPTkFMSVRZKTogTmV3LgoJKiBzeXNjYWxsLmMgKHNldF9wZXJzb25hbGl0eSk6IE5ldy4KCSogc3RyYWNlLmMgKG1haW4pOiBDYWxsIHNldF9wZXJzb25hbGl0eS4KIAkqIGRlZnMuaCwgc3lzY2FsbC5jLCBpb2N0bC5jLCBzaWduYWwuYzogTWFrZSBzeXNlbnQsIGVycm5vZW50LAogCWlvY3RsZW50LCBhbmQgc2lnbmFsZW50IGluZGlyZWN0IHBvaW50ZXJzIGFuZCByZWRpcmVjdCB0aGVtCgliYXNlZCBvbiBwZXJzb25hbGl0eS4KCSoge3N1bm9zNCxzdnI0LGxpbnV4eywvYWxwaGF9fS9zaWduYWxlbnQuaDogTmV3IGZpbGVzLgoJU3VnZ2VzdGVkIGJ5IFRvbSBEeWFzIDx0ZHlhc0BlZGVuLnJ1dGdlcnMuZWR1Pi4KCgkqIHV0aWwuYyAodXBlZWspOiBIYW5kbGUgY2FzZSB3aGVyZSBwdHJhY2UgcmV0dXJucyBhIGxvbmcKCWFuZCBzaXplb2YobG9uZykgIT0gc2l6ZW9mKGludCkuCglGcm9tIFJpY2hhcmQgSGVuZGVyc29uIDxyaWNoYXJkQHR3aWRkbGUudGFtdS5lZHU+CgpGcmkgTWF5IDE3IDIxOjAzOjM2IDE5OTYgIEouIFJpY2hhcmQgU2xhZGtleSAgPGpyc0B3b3JsZC5zdGQuY29tPgoKCSogdmVyc2lvbi5jOiBWZXJzaW9uIDMuMC4xMSBpcyByZWxlYXNlZC4KCgkqIG1hbnkgZmlsZXM6IEZpeCBtb3JlIHByaW50ZiB3YXJuaW5ncyBmb3Igb3RoZXIgcGxhdGZvcm1zLgoKCSogaXBjLmMgKHN5c19tc2dyY3YpIFtMSU5VWF06IENvbmRpdGlvbmFsaXplIGRlZmluaXRpb24gb2YgaXBjX3dyYXBwZXIuCgoJKiBsaW51eC9kdW1teS5oOiBIYW5kbGUgbWlzc2luZyBsaWJyYXJ5IHN1cHBvcnQgZm9yIHtzZW5kLHJlY3Z9bXNnLgoJUmVwb3J0ZWQgYnkgVGhvbWFzIEJvZ2VuZG9lcmZlciA8dHNib2dlbmRAYmlnYnVnLmZyYW5rZW4uZGU+LgoKCSogbGludXgvc3lzY2FsbC5oIChzeXNfdXRpbWVzKTogRml4IGEgdHlwbyBpbiB0aGUgZGVjbGFyYXRpb24uCglGcm9tIFRob21hcyBCb2dlbmRvZXJmZXIgPHRzYm9nZW5kQGJpZ2J1Zy5mcmFua2VuLmRlPi4KCkZyaSBNYXkgMTcgMDA6NTA6MDYgMTk5NiAgSi4gUmljaGFyZCBTbGFka2V5ICA8anJzQHdvcmxkLnN0ZC5jb20+CgoJKiB2ZXJzaW9uLmM6IFZlcnNpb24gMy4wLjEwIGlzIHJlbGVhc2VkLgoKCSogTWFrZmlsZS5pbjogQWRkIG9zL2FyY2ggdG8gaW5jbHVkZXMgc28gdGhhdCBhIGdpdmVuIGFyY2gKCShsaWtlIGFscGhhKSBjYW4gb3ZlcnJpZGUgdGhlIG5hdGl2ZSBhcmNoIChsaWtlIGkzODYpLgoJKiBjb25maWd1cmUuaW46IENoZWNrIGZvciBzZW5kbXNnLgoKCSogbmV0LmM6IE1ha2Ugc2VuZG1zZyBhbmQgcmVjdm1zZyBkZXBlbmRlbnQgb24gYW4gYXV0b2NvbmYKCXRlc3QuICBSZXBvcnRlZCBieSBNaWNoYWVsIEUgQ2hhc3RhaW4gPG1lY0BkdXJhY2VmLnNob3V0Lm5ldD4uCgoJKiBhY2NvbmZpZy5oLCBjb25maWd1cmUuaW46IERldGVjdCB0aGUgYWxwaGEuCgkqIGlvY3RsLmM6IEhhbmRsZSB0aGUgYWxwaGEuCgkqIGRlZnMuaDogTWFrZSBzb21lIG1lbWJlcnMgbG9uZyBmb3IgdGhlIGFscGhhLiAgRGVmaW5lCglzb21lIHJlZ2lzdGVyIG5pY2tuYW1lcy4gIEFkZCBzdXBwb3J0IGZvciBXQUlURVhFQ1ZFLgoJKiBmaWxlLmMgW0FMUEhBXTogU3VwcG9ydCB0aGUgYWxwaGEgZm9yIHN0YXRmcy4gIEFkZAoJb3NmX3N0YXRmcyBhbmQgb3NmX2ZzdGF0ZnMgZm9yIHRoZSBhbHBoYS4gIE1ha2UgZGFtbiBzdXJlCgltYWpvciBhbmQgbWlub3IgcmVzdWx0cyBhcmUgc3VpdGFibGUgZm9yIHBhc3NpbmcgdG8gcHJpbnRmLgoJKiBzaWduYWwuYywgc3lzY2FsbC5jOiBTdXBwb3J0IHRoZSBhbHBoYS4KCSogcHJvY2Vzcy5jOiBBZGQgYWxwaGEgdXNlciBvZmZzZXRzLgoJKiBtb3N0IGZpbGVzOiBVc2UgJWw/IGZvciBwcmludGYgYXJndW1lbnRzIHNpbmNlCgltb3N0IGFyZSBub3cgbG9uZ3MgZm9yIHRoZSBhbHBoYS4KCSogbGludXgvYWxwaGEve2Vycm5vZW50LmgsaW9jdGxlbnQue2gsc2h9LHN5c2NhbGxlbnQuaH06CglOZXcgZm9yIHRoZSBhbHBoYS4KCUZyb20gVGhvbWFzIEJvZ2VuZG9lcmZlciA8dHNib2dlbmRAYmlnYnVnLmZyYW5rZW4uZGU+LgoKV2VkIE1heSAxNSAwMDoyOTozNyAxOTk2ICBKLiBSaWNoYXJkIFNsYWRrZXkgIDxqcnNAd29ybGQuc3RkLmNvbT4KCgkqIHZlcnNpb24uYzogVmVyc2lvbiAzLjAuOSBpcyByZWxlYXNlZC4KCgkqIGNvbmZpZy5pbiwgY29uZmlnLnN1YiwgaW5zdGFsbC1zaDogVXBncmFkZSB0byBhdXRvY29uZiAyLjEwLgoKCSogbGludXgvZHVtbXkuaCwgbGludXgvc3lzY2FsbGVudC5oLCBsaW51eC9zeXNjYWxsLmg6IEFkZCByZWNlbnQKCUxpbnV4IGtlcm5lbCB2ZXJzaW9uIHN5c3RlbSBjYWxscy4KCldlZCBNYXIgMTMgMDE6MDM6MzggMTk5NiAgSi4gUmljaGFyZCBTbGFka2V5ICA8anJzQHdvcmxkLnN0ZC5jb20+CgoJKiBpcGMuYyBbU1VOT1M0XTogQWRkIFN1bk9TIHN1cHBvcnQgZm9yIGRlY29kaW5nIElQQyBjYWxscy4KCSogc3lzY2FsbC5jIFtTVU5PUzRdOiBDb21waWxlIGRlY29kZV9zdWJjYWxsIG9uIFN1bk9TIGFuZAoJZGVjb2RlIElQQyBjYWxscyB1c2luZyBpdC4KCSogc3Vub3M0L2R1bW15Lmg6IEFsaWFzIHN5c19zZW1vcCB0byBwcmludGFyZ3MuCgkqIHN1bm9zNC9zeXNjYWxsLmg6IEFkZCBuZXcgcHNldWRvIHN5c2NhbGxzIGZvciBJUEMuCgkqIHN1bm9zNC9zeXNjYWxsZW50Lmg6IEluY2x1ZGUgbmV3IHN1YmNhbGxzIGZvciBJUEMuCglGcm9tIE1hdHRoaWFzIFBmYWxsZXIgPGxlb0BkYWNoYXUubWFyY28uZGU+LgoKVHVlIEZlYiAxMyAyMjowODoyNSAxOTk2ICBKLiBSaWNoYXJkIFNsYWRrZXkgIDxqcnNAd29ybGQuc3RkLmNvbT4KCgkqIHZlcnNpb24uYzogVmVyc2lvbiAzLjAuOCBpcyByZWxlYXNlZC4KCgkqIHRpbWUuYyBbTElOVVhdOiBFeHBsaWNpdGx5IGluY2x1ZGUgbGludXgvdmVyc2lvbi5oLgoKCSogc3RyYWNlLmMgKG1haW4pOiBEb24ndCBsZXQgdGhlbSBldmVuICp0cnkqIHRvCglnZXQgc3RyYWNlIHRvIGF0dGFjaCB0byBpdHNlbGYgc2luY2Ugc29tZSBzeXN0ZW1zCglkb24ndCBoYW5kbGUgdGhpcyBjYXNlIHZlcnkgZ3JhY2VmdWxseS4KCVJlcG9ydGVkIGJ5IERhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdT4uCgoJKiBNYWtlZmlsZS5pbiAoZGlzdGNsZWFuKTogRml4IGl0IGZvciBzdWJkaXJlY3Rvcmllcy4KCgkqIHN1bm9zNC9zeXNjYWxsZW50LmgsIHN2cjQvc3lzY2FsbGVudC5oOiBGaWxsIGluIHRoZSBuZXcKCXN5c19mbGFncyBtZW1iZXIgZm9yIGVhY2ggZGVmaW5lZCBzeXN0ZW0gY2FsbC4KCkZyaSBEZWMgIDggMDE6MTc6MjggMTk5NSAgUmljayBTbGFka2V5ICA8anJzQHdvcmxkLnN0ZC5jb20+CgoJKiBkZWZzLmggKFRSQUNFXyopOiBOZXcgZmxhZ3MgdG8gZGVzY3JpYmUgd2hhdCBjbGFzcwoJb2Ygc3lzdGVtIGNhbGwgZWFjaCBzeXN0ZW0gY2FsbCBpcy4KCShzeXNlbnQpOiBBZGQgc3lzX2ZsYWdzIG1lbWJlci4KCSogc3lzY2FsbC5jIChzeXNlbnQpOiBEZWZpbmUgKGFuZCBsYXRlciB1bmRlZikgYWJicmV2aWF0aW9ucwoJZm9yIHRoZSBzeXN0ZW0gY2FsbCBjbGFzcyBmbGFncy4KCShsb29rdXBfY2xhc3MpOiBOZXcgZnVuY3Rpb24gdG8gdHJhbnNsYXRlIHN0cmluZ3MgdG8KCXN5c3RlbSBjYWxsIGNsYXNzIGZsYWdzLgoJKHF1YWxpZnkpOiBIYW5kbGUgbmV3IHN5c3RlbSBjYWxsIGNsYXNzIG1lY2hhbmlzbS4KCSogbGludXgvc3lzY2FsbGVudC5oOiBGaWxsIGluIHRoZSBuZXcgc3lzX2ZsYWdzIG1lbWJlcgoJZm9yIGVhY2ggZGVmaW5lZCBzeXN0ZW0gY2FsbC4KCgkqIGRlZnMuaCAocHJpbnRfc29jayk6IFJlbW92ZSByZWR1bmRhbnQgYW5kIG5vbi1LJlIgQwoJY29tcGF0aWJsZSBwcm90b3R5cGUuICBGcm9tIEp1ZXJnZW4gV2VpZ2VydAoJPGpud2VpZ2VyQGltbWQ0LmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPi4KClRodSBEZWMgIDcgMDE6MTc6NDAgMTk5NSAgUmljayBTbGFka2V5ICA8anJzQHdvcmxkLnN0ZC5jb20+CgoJKiBsaW51eC9pb2N0bGVudC5zaDogVHdlYWsgdG8gaW1wcm92ZSBpb2N0bCBhY2N1cmFjeS4KCUZyb20gTWljaGFlbCBFIENoYXN0YWluIDxtZWNAZHVyYWNlZi5zaG91dC5uZXQ+LgoKCSogc3lzdGVtLmMgKGluY2x1ZGVzKSBbTElOVVhdOiBBZGQgbGludXgvbmZzLmggZm9yIHJlY2VudAoJa2VybmVscy4gIEZyb20gTWljaGFlbCBFIENoYXN0YWluIDxtZWNAZHVyYWNlZi5zaG91dC5uZXQ+LgoKV2VkIERlYyAgNiAyMTo1MjoyOCAxOTk1ICBSaWNrIFNsYWRrZXkgIDxqcnNAd29ybGQuc3RkLmNvbT4KCgkqIGZpbGUuYyAoc3ByaW50ZnN0eXBlKTogRW5jbG9zZSBzdHJpbmcgcmVzdWx0IGluIGRvdWJsZQoJcXVvdGVzLgoKCSogdGltZS5jIChzeXNfYWRqdGltZXgpIFtMSU5VWF06IENvbmRpdGlvbmFsaXplCgljb25zdGFudGx5IGV2b2x2aW5nIHRpbWV4IHN0cnVjdHVyZS4KCUZyb20gQWFyb24gVWNrbyA8VUNLT0BWQVgxLlJPQ0tIVVJTVC5FRFU+LgoKCSogZGVmcy5oLCBzeXNjYWxsLmMsIHN0cmFjZS5jOiBSZW5hbWUgc3lzY2FsbCB0bwoJdHJhY2Vfc3lzY2FsbCBhbmQgY2hhbmdlIHByb3RvdHlwZSBhbmQgYWxsIGNhbGxlcnMKCWJlY2F1c2Ugb2YgYnJva2VuIExpbnV4IHNoYXJlZCBsaWJyYXJpZXMuCglGcm9tIEFhcm9uIFVja28gPFVDS09AVkFYMS5ST0NLSFVSU1QuRURVPi4KCgkqIE1ha2VmaWxlLmluIChjbGVhbik6IENoZWNrIGZvciBhIGZpbGUgd2l0aCB0ZXN0IC1mIG5vdAoJdGVzdCAtZC4gIEZyb20gQWFyb24gVWNrbyA8VUNLT0BWQVgxLlJPQ0tIVVJTVC5FRFU+LgoKVHVlIFNlcCAyNiAwMjozMjozMSAxOTk1ICBSaWNrIFNsYWRrZXkgIDxqcnNAd29ybGQuc3RkLmNvbT4KCgkqIHZlcnNpb24uYzogVmVyc2lvbiAzLjAuNyBpcyByZWxlYXNlZC4KCgkqIHV0aWwuYyAoc3RyaW5nX3F1b3RlKTogRml4IHRoaW5rbyB3aGljaCBjYXVzZWQgY29yZQoJZHVtcHMgZm9yIHN0cmluZ3Mgd2l0aCBxdW90ZXMgaW4gdGhlbS4KCVJlcG9ydGVkIGJ5IE1hcnR5IExlaXNuZXIgPGxlaXNuZXJAc2RzcC5tYy54ZXJveC5jb20+LgoKCSogbGludXgvTWFrZWZpbGUuaW4gKGVycm5vZW50LmggcnVsZSk6IEdyYWIgYWxsIGVycm5vLmgKCWZpbGVzIGZyb20gL3Vzci9pbmNsdWRlLCBub3QganVzdCB0aGUgbGludXggb25lLgoJRnJvbSBNaWNoYWVsIEUgQ2hhc3RhaW4gPG1lY0BkdXJhY2VmLnNob3V0Lm5ldD4uCgoJKiBsaW51eC9lcnJub2VudC5zaDogVG90YWwgcmV3cml0ZSB0byBoYW5kbGUgbW9yZSBpb2N0bHMgd2l0aAoJZmV3ZXIgZmFsc2UgcG9zaXRpdmVzIG9uIG1vcmUga2VybmVsIGZsYXZvcnMuCglGcm9tIE1pY2hhZWwgRSBDaGFzdGFpbiA8bWVjQGR1cmFjZWYuc2hvdXQubmV0Pi4KCk1vbiBTZXAgIDQgMDE6Mjk6MjIgMTk5NSAgUmljayBTbGFka2V5ICA8anJzQHdvcmxkLnN0ZC5jb20+CgoJKiB2ZXJzaW9uLmM6IFZlcnNpb24gMy4wLjYgaXMgcmVsZWFzZWQuCgoJKiBsaW51eC9kdW1teS5oLCBsaW51eC9zeXNjYWxsLmgsIGxpbnV4L3N5c2NhbGxlbnQuaDogQWRkCglzeXNfbXN5bmMuCgkqIG1lbS5jIChtY3RsX2Z1bmNzLCBtY3RsX2xvY2thcywgc3lzX21jdGwpOiBDb25kaXRpb25hbGl6ZQoJb24gTUNfU1lOQyBpbnN0ZWFkIG9mIEhBVkVfTUNUTC4KCShtY3RsX3N5bmMpOiBDb25kaXRpb25hbGl6ZSBvbiBNU19BU1lOQyBpbnN0ZWFkIG9mIEhBVkVfTUNUTC4KCShzeXNfbXN5bmMpOiBOZXcgZnVuY3Rpb24uCgpTYXQgU2VwICAyIDEyOjA2OjA0IDE5OTUgIFJpY2sgU2xhZGtleSAgPGpyc0B3b3JsZC5zdGQuY29tPgoKCSogbGludXgvZHVtbXkuaCwgbGludXgvc3lzY2FsbC5oLCBsaW51eC9zeXNjYWxsZW50Lmg6IEFkZAoJc3lzX2Zsb2NrIGFuZCBzeXNfZ2V0ZGVudHMuCgkqIGRlc2MuYyAoZmxvY2tjbWRzLCBzeXNfZmxvY2spOiBDb25kaXRpb25hbGl6ZSBvbiBMT0NLX1NICglub3QgU1VOT1M0LgoJKiBmaWxlLmMgKHN5c19nZXRkZW50cyk6IERlZmluZSB1bmNvbmRpdGlvbmFsbHkgYW5kIGhhbmRsZQoJTElOVVggY2FzZS4KCSogc3RyYWNlLmMgKG1haW4pOiBEaXNhbGxvdyB1c2VybmFtZSBvcHRpb24gdW5sZXNzIGJvdGggcmVhbAoJYW5kIGVmZmVjdGl2ZSB1aWRzIGFyZSByb290LgoKV2VkIEF1ZyAzMCAwMToyOTo1OCAxOTk1ICBSaWNrIFNsYWRrZXkgIDxqcnNAd29ybGQuc3RkLmNvbT4KCgkqIHN0cmFjZS5jIChtYWluKTogRW5zdXJlIHRoYXQgcnVuX3VpZCBhbmQgcnVuX2dpZCBhcmUKCWFsd2F5cyBzZXQgdG8gc29tZXRoaW5nIG1lYW5pbmdmdWwuCgkobWFpbiwgbmV3b3V0ZikgWyFTVlI0XTogU3dhcCByZWFsIGFuZCBlZmZlY3RpdmUgdWlkcyB3aGlsZQoJb3BlbmluZyBhbnkgb3V0cHV0IGZpbGVzLgoJKG1haW4pIFshU1ZSNF06IFRyZWF0IGVmZmVjdGl2ZSB1aWQgb2Ygcm9vdCBhcyBhIHJlcXVlc3QKCXRvIGhhbmRsZSBzdWlkIGJpbmFyaWVzIGNvcnJlY3RseSB1c2luZyB0aGUgcmVhbCB1aWQgb2YKCXRoZSBpbnZva2luZyB1c2VyLgoKU2F0IEF1ZyAxOSAwMDowNjowOCAxOTk1ICBSaWNrIFNsYWRrZXkgIDxqcnNAd29ybGQuc3RkLmNvbT4KCgkqIE1ha2VmaWxlLmluOiBBZGQgYHx8IHRydWUnIHRvIGNsZWFuIHJ1bGUgYmVjYXVzZQoJYWx0aG91Z2ggR05VIG1ha2UgMy43NCB1c2VzIGBzaCAtYycgdG8gaW52b2tlIGNvbW1hbmRzCglldmVyeSBvdGhlciBtYWtlIGluIHRoZSB3b3JsZCB1c2VzIGBzaCAtZWMnLgoKCSogc3lzY2FsbC5jIChzeXNjYWxsKSBbU1ZSNCwgTUlQU106IFRoZSBmaWZ0aCBhbmQgc3Vic2VxdWVudAoJYXJndW1lbnRzIGFwcGVhciB0byBiZSBzdG9yZWQgb24gdGhlIHN0YWNrLCBub3QgaW4gdGhlCglyZWdpc3RlcnMgZm9sbG93aW5nIEEzIChlbXBpcmljYWwgcmVzdWx0KS4KCgkqIGRlZnMuaDogQWRkIHByb3RvdHlwZSBmb3IgcHJpbnRzb2NrLgoJKiBzdnI0L2R1bW15Lmg6IFJlbW92ZSBnZW5lcmljIGhhbmRsaW5nIG9mIHN5c19tb3VudC4KCSogc3lzdGVtLmMgW1NWUjQsIE1JUFNdOiBJbmNsdWRlIHNldmVyYWwgc3lzdGVtIGhlYWRlcnMgdG8gY2xlYW5seQoJZ2V0IGFjY2VzcyB0byBTR0kgbW91bnQgaW5mb3JtYXRpb24uCgkobW91bnRfZmxhZ3MsIG5mc19mbGFncykgW1NWUjQsIE1JUFNdOiBOZXcgb2JqZWN0cy4KCShzeXNfbW91bnQpIFtTVlI0LCBNSVBTXTogTmV3IGZ1bmN0aW9uLgoJKHN5c19tb3VudCkgW1NWUjQsICFNSVBTXTogTmV3IGZ1bmN0aW9uLgoKVHVlIEp1bCAgNCAwMDozMDozNCAxOTk1ICBSaWNrIFNsYWRrZXkgIDxqcnNAd29ybGQuc3RkLmNvbT4KCgkqIHZlcnNpb24uYzogVmVyc2lvbiAzLjAuNSBpcyByZWxlYXNlZC4KCgkqIGRlc2MuYywgcmVzb3VyY2UuYywgc3RyYWNlLmMsIHN5c2NhbGwuYywgdGltZS5jOiBDYXN0IHR2X3NlYyBhbmQKIAl0dl91c2VjIG1lbWJlcnMgdG8gbG9uZyB3aGVuIHVzaW5nIHByaW50Zi4KCgkqIGlwYy5jOiBPbWl0IGRlZmluZSBvZiBfX0tFUk5FTF9fLgoJKHtNU0csU0VNLFNITX1fe1NUQVQsSU5GT30pOiBFeHBsaWNpdGx5IGRlZmluZSB0aG9zZSB0aGluZ3Mgd2UKIAl3YW50IHdoaWNoIF9fS0VSTkVMX18gdXNlZCB0byBwcm92aWRlLgoJKHN5c19tc2dyY3YpOiBDaGFuZ2UgcmVmZXJlbmNlIHRvIGlwY19rbHVkZ2Ugc3RydWN0dXJlIHRvCglsb29rLWFsaWtlIGlwY193cmFwcGVyIHRvIGF2b2lkIGRlcGVuZGVuY2Ugb24gX19LRVJORUxfXy4KCgltZW0uYyAobW1hcF9mbGFncykgW01BUF97R1JPV1NET1dOLERFTllXUklURSxFWEVDVVRBQkxFfV06IEFkZAogCUxpbnV4IHNwZWNpZmljIG9wdGlvbnMuCgoJc3lzY2FsbC5jOiBVc2UgU1lTX0VSUkxJU1RfREVDTEFSRUQgaW5zdGVhZCBvZiBndWVzc2luZy4KICAJW0V7UkVTVEFSVHtTWVMsTk97SU5UUixIQU5EfX0sTk9JT0NUTENNRH1dOiBFeHBsaWNpdGx5IGRlZmluZQogCWluc3RlYWQgb2YgZGVwZW5kaW5nIG9mIF9fS0VSTkVMX18uCgoJdGVybS5jOiBDYXN0IGNfe2ksbyxjLGx9ZmxhZyB0byBsb25nIHdoZW4gdXNpbmcgcHJpbnRmLgoKVHVlIEp1biAgNiAwMDoyNzo0OCAxOTk1ICBSaWNrIFNsYWRrZXkgIDxqcnNAd29ybGQuc3RkLmNvbT4KCgkqIGFjbG9jYWwubTQgKEFDX0RFQ0xfU1lTX0VSUkxJU1QsIEFDX0RFQ0xfX1NZU19TSUdMSVNUKTogTmV3LgoJKiBjb25maWd1cmUuaW46IENhbGwgQUNfREVDTF9TWVNfRVJSTElTVCwgQUNfREVDTF9TWVNfU0lHTElTVCwKCWFuZCBBQ19ERUNMX19TWVNfU0lHTElTVC4KCSogYWNjb25maWcuaCAoU1lTX0VSUkxJU1RfREVDTEFSRUQpOiBOZXcuCgkqIHN0cmFjZS5jIChzdHJlcnJvcik6IFVzZSBTWVNfRVJSTElTVF9ERUNMQVJFRC4KCShzdHJzaWduYWwpOiBVc2UgU1lTX1NJR0xJU1RfREVDTEFSRUQuCgoJbmV0LmMgKHN5c19zb2NrZXQpOiBPbWl0IGluYWR2ZXJ0ZW50IHN1cnBsdXMgY29tbWEgd2hlbgoJcHJvdG9jb2wgZmFtaWx5IGlzbid0IFBGX0lORVQuCgoJdXRpbC5jIChkdW1wc3RyKTogRml4IGluY29ycmVjdCBwcmludGluZyBvZiBvbmUgdG9vIG1hbnkKCWNoYXJhY3RlcnMgd2hlbiB0aGUgbGVuZ3RoIGlzIG5vdCBhbiBldmVuIG11bHRpcGxlIG9mIDE2IGJ5dGVzLgoJUmVwb3J0ZWQgYnkgSnVlcmdlbiBXZWlnZXJ0Cgk8am53ZWlnZXJAaW1tZDQuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+LgoKVGh1IE1heSAgNCAyMzozNzo0NyAxOTk1ICBSaWNrIFNsYWRrZXkgIDxqcnNAd29ybGQuc3RkLmNvbT4KCgkqIGlvY3RsLmMgKGNvbXBhcmUpOiBDaGFuZ2UgcHJvdG90eXBlIHRvIG1hdGNoIFBPU0lYIHFzb3J0LgoJKiBzaWduYWwuYyAoc2lnaXNoYW5kbGVkKSBbU1ZSNF06IE9taXQgZXZlcnl0aGluZyBhZnRlciByZXR1cm4uCgkqIHN0cmFjZS5jICh0cmFjZSkgW1NWUjRdOiBCcmVhayBvdXQgb2YgZm9yIGxvb3AgaW5zdGVhZCBvZgoJcmV0dXJuaW5nIHdoZW4gZmluaXNoZWQgc28gZmluYWwgcmV0dXJuIHN0YXRlbWVudCBpcyBleGVjdXRlZC4KCSogc3lzY2FsbC5jIChpbnRlcm5hbF9zeXNjYWxsKTogQWRkIG1vcmUgU1lTX3dhaXQqIHZhcmlhdGlvbnMuCgkoc3lzY2FsbCkgW0xJTlVYXTogQ29ycmVjdCB0eXBvIHdoaWNoIGNvbW1lbnRlZCBvdXQgdGhlIE02OEsKCWFyZ3VtZW50IHRvIGlmZGVmLgoJKiB1dGlsLmMgKHByaW50c3RyKTogQ2FzdCB1bnNpZ25lZCBjaGFyIHBvaW50ZXIgYXJndW1lbnQKCXRvIGNoYXIgcG9pbnRlciBpbiB1bW92ZXN0ciBjYWxsLgoJKGR1bXBzdHIpOiBMaWtld2lzZSBmb3IgdW1vdmVuLgoKV2VkIE1heSAgMyAwMToxMDo1NiAxOTk1ICBSaWNrIFNsYWRrZXkgIDxqcnNAd29ybGQuc3RkLmNvbT4KCgkqIHZlcnNpb24uYzogVmVyc2lvbiAzLjAuNCBpcyByZWxlYXNlZC4KCgkqIHNpZ25hbC5jIChzeXNfc2lnYmxvY2spOiBNb3ZlIGFmdGVyIHRoZSBkZWZpbml0aW9uIG9mCglzeXNfc2lnc2V0bWFzayB0aGF0IGl0IGNhbGxzIHRvIGF2b2lkIGFuIGltcGxpY2l0IGRlY2xhcmF0aW9uLgoJKiBzdHJlYW0uYyAodHJhbnNwb3J0X3VzZXJfb3B0aW9ucywgdHJhbnNwb3J0X3NlcnZlcl9vcHRpb25zKToKCU9ubHkgbmVlZGVkIGlmIFRJX0JJTkQgaXMgZGVmaW5lZC4KCSogY29uZmlndXJlLmluOiBBZGQgLVduby1pbXBsaWNpdCB0byBXQVJORkxBR1Mgb24gU3VuT1MgNC54LgoKCSogcHJvY2Vzcy5jIChpbnRlcm5hbF9mb3JrKSBbU1ZSNF06IEZpeCBhIHR5cG8gdGhhdCBvbWl0dGVkCgl0aGUgdGNwIGFyZ3VlbWVudCBmcm9tIHRoZSBjYWxsIHRvIGV4aXRpbmcuICBBZGQgZ2V0cnZhbDIKCWNoZWNrIHNvIG5vIGZvcmsgcHJvY2Vzc2luZyBpcyBkb25lIGluIHRoZSBjaGlsZC4KCShwcmludHdhaXRuKTogSW5pdGlhbGl6ZSBleGl0ZWQgc28gdGhhdCBpdHMgdmFsdWUgaXMgZGVmaW5lZAoJZm9yIGFsbCBmbG93cyBvZiBleGVjdXRpb24uCgpUdWUgTWF5ICAyIDIyOjM5OjQyIDE5OTUgIFJpY2sgU2xhZGtleSAgPGpyc0B3b3JsZC5zdGQuY29tPgoKCSogbGludXgvZHVtbXkuaDogQWRkIGFsaWFzZXMgZm9yIHN5c2ZzLCBwZXJzb25hbGl0eSwgYWZzX3N5c2NhbGwsCglzZXRmc3VpZCwgc2V0ZnNnaWQsIGFuZCBfbGxzZWVrIHN5c2NhbGxzLgoJKiBsaW51eC9zeXNjYWxsLmg6IEFkZCBwcm90b3R5cGVzIGZvciB0aGVtLgoJKiBsaW51eC9zeXNjYWxsZW50Lmg6IEFkZCB0aGVtIHRvIHRoZSBzeXNjYWxsIGVudHJpZXMgdGFibGUuCgkqIHN5c3RlbS5jIChoZWFkZXJzKSBbTElOVVhdOiBJbmNsdWRlIGxpbnV4L3VuaXN0ZC5oIHRvIGdldCBfX05SXyoKCWRlZmluZXMgYW5kIGNvbmRpdGlvbmFsbHkgaW5jbHVkZSBsaW51eC9wZXJzb25hbGl0eS5oIGlmCglfX05SX3BlcnNvbmFsaXR5IGlzIGRlZmluZWQuCgkocGVyc29uYWxpdHlfb3B0aW9ucykgW0xJTlVYXTogTmV3IHRhYmxlLgoJKHN5c19wZXJzb25hbGl0eSkgW0xJTlVYXTogTmV3IGZ1bmN0aW9uLgoKVHVlIE1heSAgMiAwMDoyMDozOSAxOTk1ICBSaWNrIFNsYWRrZXkgIDxqcnNAd29ybGQuc3RkLmNvbT4KCgkqIHN0cmFjZS5jICh0cmFjZSkgWyFTVlI0XTogQ2hhbmdlIGZvcmV2ZXIgbG9vcCB0byBvbmUgcHJlZGljYXRlZAoJb24gdGhlIG51bWJlciBvZiB0cmFjZWQgcHJvY2Vzc2VzIHNvIHRoYXQgd2UgY2FuIGhhdmUgdW50cmFjZWQKCWNoaWxkcmVuIChlLmcuIHZpYSBwb3BlbikuCgoJKiBzdHJhY2UgKG1haW4pIFshU1ZSNF06IENhbGwgZmFrZV9leGVjdmUgdG8gZ2V0IHRoZSBhY3R1YWwKCWV4ZWMgYW5kIGl0cyBhcmd1bWVudHMgaW50byB0aGUgdHJhY2UuCgkoZW52aXJvbik6IERlY2xhcmUgaXQuCgkqIHByb2Nlc3MuYyAoZmFrZV9leGVjdmUpOiBOZXcgZnVuY3Rpb24uCgkoaGVhZGVycyk6IEluY2x1ZGUgc3lzL3N5c2NhbGwuaCB0byBnZXQgU1lTXyogZGVmaW5lcy4KCgkqIHByb2Nlc3MuYyAoc3lzX2V4ZWN2LCBzeXNfZXhlY3ZlKTogU3Vycm91bmQgYXJndW1lbnQgYW5ub3RhdGlvbnMKCXdpdGggQyBjb21tZW50IGRlbGltaXRlcnMuCgkocHJpbnRhcmd2LCBwcmludGFyZ2MpOiBUaGUgYXJnIHZlY3RvciBpcyBhbiBhcnJheSBvZiBjaGFyIHBvaW50ZXJzCglub3QgaW50cy4KCgkqIHN0cmFjZS5jIChwcmludGxlYWRlcik6IEFsc28gY2hlY2sgZm9yIG11bHRpcGxlIC1wIGFyZ3VtZW50cwoJd2hlbiBkZWNpZGluZyB3aGV0aGVyIHRvIHByaW50IHRoZSBwaWQgZmllbGQuCgoJKiBzdHJhY2UuYyAoc3RyZXJyb3IpIFshSEFWRV9TVFJFUlJPUl06IE5ldyBmdW5jdGlvbi4KCSogZGVmcy5oIChzdHJlcnJvciwgc3Ryc2lnbmFsKTogQWRkIHRoZXNlIHByb3RvdHlwZXMgaWYgd2UgcHJvdmlkZQoJdGhlIGZ1bmN0aW9ucy4KCSogY29uZmlndXJlLmluIChBQ19DSEVDS19GVU5DUyk6IEFkZCBzdHJlcnJvci4KCgkqIHN0cmFjZS5jIChtYWluLCBwcm9jX3BvbGxlcik6IEFkZCBTSUdQSVBFIHRvIHRoZSBsaXN0IG9mIGNhdWdodAoJYW5kIGJsb2NrZWQgc2lnbmFscy4KCgkqIHN0cmFjZS5jIChtYWluKTogQWRkIHVzZXJuYW1lIG9wdGlvbi4gIFZlcmlmeSB0aGV5IGFyZSByb290IGJlZm9yZQoJbGV0dGluZyB0aGVtIHVzZSBpdC4gIExvb2sgdXAgdGhlIGlkcyBpbiB0aGUgcGFzc3dvcmQgZmlsZS4gIFNldAoJdGhlbSBqdXN0IGJlZm9yZSBleGVjdXRpbmcgdGhlIHByb2dyYW0uCglGcm9tIFJldWJlbiBTdW1uZXIgPHJhc3VtbmVyQHVuZGVyZ3JhZC5tYXRoLnV3YXRlcmxvby5jYT4uCgpTYXQgQXByIDI5IDAwOjA5OjU2IDE5OTUgIFJpY2sgU2xhZGtleSAgPGpyc0B3b3JsZC5zdGQuY29tPgoKCSogdmVyc2lvbi5jOiBWZXJzaW9uIDMuMC4zIGlzIHJlbGVhc2VkLgoKCSogc3lzdGVtLmMgKG1vdW50X2ZsYWdzKSBbTElOVVhdOiBPbWl0IGR1cGxpY2F0ZWQgTVNfTk9TVUlEIGVudHJ5LgoJRnJvbSBSZXViZW4gU3VtbmVyIDxyYXN1bW5lckB1bmRlcmdyYWQubWF0aC51d2F0ZXJsb28uY2E+LgoKCSogc3RyYWNlLmMgKG91dGZuYW1lKTogSW5pdGlhbGl6ZSB0byBOVUxMLgoJKG1haW4pOiBEZWZlciBvdXRwdXQgZmlsZSBwcm9jZXNzaW5nIHVudGlsIGFmdGVyIGFyZ3VtZW50cy4KCUFsbG93IGVpdGhlciBhIHBpcGUgb3IgYSBiYW5nIGZvciBjb21tYW5kIGFyZ3VtZW50cy4KCUNoZWNrIGlmIG91dGZuYW1lIGlzIE5VTEwgaW5zdGVhZCBvZiBjaGVja2luZyBvdXRmIGZvciBzdGRlcnIuCglSZWluaXRpYWxpemUgZWFjaCBzdGFydHVwIFRDQidzIG91dGYgdG8gZml4IC1wLy1vIG9yZGVyaW5nIGJ1Zy4KCShkcm9wdGNiKTogUmVzZXQgY2xvc2UgVENCJ3Mgb3V0ZiB0byBOVUxMIGluc3RlYWQgb2Ygc3RkZXJyLgoJKHRwcmludGYpOiBBdm9pZCBjYWxsaW5nIHZmcHJpbnRmIGlmIG91dGYgaXMgTlVMTC4KCgkqIHN0cmFjZS5jIChtYWluKTogVXNlIHBvcGVuIGlmIC1vIGFyZ3VtZW50IGJlZ2lucyB3aXRoIGEgcGlwZS4KCUZyb20gTWFydHkgTGVpc25lciA8bGVpc25lckBzZHNwLm1jLnhlcm94LmNvbT4uCgoJKiBwcm9jZXNzLmMgKHByaW50c3RhdHVzKTogRml4IGEgdHlwbyB3aGVyZSBXSUZTSUdOQUxFRCB3YXMgbWVhbnQKCWJ1dCBXSUZTVE9QUEVEIHdhcyB1c2VkLgoKCSogTWFrZWZpbGUuaW46IEFkZCBhbiBFWFRSQV9ERUZTIHZhcmlhYmxlIGFuZCB1c2UgaXQgaW4gdGhlIC5jLm8KCXJ1bGUgdG8gcHJldmVudCB0aGUgY29tbWVudCBmcm9tIGJlaW5nIHVudHJ1ZS4KCkZyaSBBcHIgMjggMjI6MDE6NTYgMTk5NSAgUmljayBTbGFka2V5ICA8anJzQHdvcmxkLnN0ZC5jb20+CgoJKiBzdHJhY2UuYyAoc3lzX2V4aXQpOiBNb3ZlIGZvbGxvdyBmb3JrIGNvZGUgdG8gaW50ZXJuYWxfZXhpdC4KCShzeXNfZm9yayk6IE1vdmUgZm9sbG93IGZvcmsgY29kZSB0byBpbnRlcm5hbF9mb3JrLgoJKHN5c19leGVjdiwgc3lzX2V4ZWN2ZSk6IE1vdmUgZm9sbG93IGZvcmsgY29kZSB0byBpbnRlcm5hbF9leGVjLgoJKHN5c193YWl0cGlkLCBzeXNfd2FpdDQpOiBNb3ZlIGZvbGxvdyBmb3JrIGNvZGUgdG8gaW50ZXJuYWxfd2FpdC4KCSh2Zm9ya2luZyk6IFJlbW92ZSB0aGlzIHN0YXRpYyB2YXJpYWJsZSBhbmQgY2hlY2sgc2NubyBpbgoJaW50ZXJuYWxfZm9yayBpbnN0ZWFkLgoJKGludGVybmFsX2V4aXQsIGludGVybmFsX2ZvcmssIGludGVybmFsX2V4ZWMsIGludGVybmFsX3dhaXQpOiBOZXcKCWZ1bmN0aW9ucy4KCSogZGVmcy5oOiBBZGQgcHJvdG90eXBlcyBmb3IgdGhlIG5ldyBpbnRlcm5hbF8qIGZ1bmN0aW9ucy4KCSogc3lzY2FsbC5jIChzeXNjYWxsKTogTW92ZSBzeXNjYWxsIGVudGVyaW5nIHRyYWNlIHF1YWxpZmllciBjaGVjawoJYW5kIHJlcHJpbnQgY2hlY2tpbmcgYWZ0ZXIgY29udGV4dCBkZWNvZGluZyBhbmQgcHJlY2VkZSB0aGVtIHdpdGgKCWEgY2FsbCB0byBpbnRlcm5hbF9zeXNjYWxsLiAgUHJlY2VkZSBzeXNjYWxsIGV4aXRpbmcgdHJhY2UKCXF1YWxpZmllciBjaGVjayB3aXRoIGEgY2FsbCB0byBpbnRlcm5hbF9zeXNjYWxsLgoJKGludGVybmFsX3N5c2NhbGwpOiBOZXcgZnVuY3Rpb24uCgoJKiBkZWZzLmggKHN0cnVjdCB0Y2IpOiBNYWtlIHNjbm8gc2lnbmVkLgoJKiBzdHJhY2UuYyAoc3lzY2FsbCkgTWFrZSB1X2Vycm9yIHNpZ25lZC4KCVtMSU5VWCwgSTM4Nl06IEF2b2lkIHVuc2lnbmVkIGNhc3QgaW4gZWF4IGNoZWNrLgoJKiBzeXNjYWxsLmMgKHN5c19pbmRpcik6IE1ha2UgaSwgc2NubywgYW5kIG5hcmdzIHNpZ25lZC4KCSogZGVzYy5jIChzeXNfc2VsZWN0KTogTWFrZSBjdW1sZW4gdW5zaWduZWQKCk1vbiBBcHIgMjQgMjM6NTI6NDcgMTk5NSAgUmljayBTbGFka2V5ICA8anJzQHdvcmxkLnN0ZC5jb20+CgoJKiBuZXQuYyAoc29ja3R5cGVzKTogQWRkIFNPQ0tfUEFDS0VULgoKU3VuIEFwciAgMiAyMzo1MDozOSAxOTk1ICBSaWNrIFNsYWRrZXkgIDxqcnNAd29ybGQuc3RkLmNvbT4KCgkqIE1ha2VmaWxlIChjbGVhbik6IENoZWNrIGV4cGxpY2l0bHkgZm9yIGEgTWFrZWZpbGUgaW4gc3ViZGlycwoJYmVmb3JlIHJ1bm5pbmcgbWFrZSBpbiB0aGVtLgoKU3VuIE1hciAyNiAxMjozNzoyMSAxOTk1ICBSaWNrIFNsYWRrZXkgIDxqcnNAd29ybGQuc3RkLmNvbT4KCgkqIHN0cmFjZS5jIFtNSVBTXSAocHJvY19vcGVuKTogQ29uZGl0aW9uYWxpemUgcnVuIG9uIE1JUFMuCglbTUlQU10gKGRldGFjaCk6IEluaXRpYWxpemUgZXJyb3IgZm9yIE1JUFMgY2FzZS4KCSh0cmFjZSk6IEluaXRpYWxpemUgaW9jdGxfcmVzdWx0IGFuZCBpb2N0bF9lcnJubyBmb3Igb3Zlcmx5IGhlbHBmdWwKCWNvbXBpbGVycy4KCSogc3lzY2FsbC5jIChkZWNvZGVfc3ViY2FsbCk6IE1vdmUgdmFyaWFibGUgaSBpbnRvIGNvbmRpdGlvbmFscwoJdGhhdCB1c2UgdXNlIGl0LgoJKiBzeXN0ZW0uYyAoc3lzc2dpX29wdGlvbnMpOiBDb25kaXRpb25hbGl6ZSBTR0lfUkVDVkxNU0cgYW5kCglTR0lfU0VUX0ZQREVCVUcgdGhhdCBTR0kgZGVjaWRlZCB0byBkcm9wLiAgSSBkb24ndCBoYXZlIHRoZSBzdG9tYWNoCgl0byBjaGFuZ2UgdGhlbSBhbGwuCgkqIHRlcm0uYyAodGVybV9pb2N0bCk6IEZvcmNlIFtjX1tpb2NsXWZsYWdzIG1lbWJlcnMgdG8gbG9uZyBiZWZvcmUKCXByaW50aW5nIHNpbmNlIHdlIGRvbid0IGtub3cgd2hhdCB0aGUgc2l6ZSBvZiB0aGVpciB0eXBlIGlzLgoJKiB1dGlsLmMgW1NWUjQsIE1JUFNdICh1bW92ZW4pOiBQcmV2ZW50IE1JUFMgZnJvbSB1c2luZyBwcmVhZCBldmVuCglpZiBhdXRvY29uZiBkZXRlY3RzIGl0IHNpbmNlIGl0IHNlZW1zIHRvIGVpdGhlciBub3Qgd29yayBvciBkbwoJc29tZXRoaW5nIGVsc2UgZW50aXJlbHkgb24gSXJpeCA1LjMuCgpTdW4gTWFyIDI2IDAwOjAxOjExIDE5OTUgIFJpY2sgU2xhZGtleSAgPGpyc0B3b3JsZC5zdGQuY29tPgoKCSogdmVyc2lvbi5jOiBWZXJzaW9uIDMuMC4yIGlzIHJlbGVhc2VkLgoJKiBsaW51eC9kdW1teS5oOiBNYWtlIHN5c19mY2hkaXIgbGlrZSBzeXNfY2xvc2UgaW5zdGVhZCBvZiBwcmludGFyZ3MKCXNvIHRoYXQgdGhlIGZpbGUgZGVzY3JpcHRvciBhcmcgaXMgZGVjaW1hbC4KClNhdCBNYXIgMjUgMjI6NTA6MTMgMTk5NSAgUmljayBTbGFka2V5ICA8anJzQHdvcmxkLnN0ZC5jb20+CgoJKiBuZXQuYyBbTElOVVhdIChwcm90b2NvbHMpOiBFeHBsaWNpdGx5IGRlZmluZSBhbGwgSVBQUk9UT18qIGVudHJpZXMKCWJlY2F1c2Ugb24gTGludXggdGhleSBhcmUgZW51bWVyYXRvcnMuCgoJKiBzeXN0ZW0uYyBbTElOVVhdIChtb3VudF9mbGFncyk6IEhhbmRsZSByZW5hbWluZyBvZiBNU19TWU5DIHRvCglNU19TWU5DSFJPTk9VUy4KCgkqIHV0aWwuYyAocHJpbnR4dmFsKTogV2hlbiB0aGVyZSBpcyBubyB0cmFuc2xhdGlvbiwgcHJpbnQgdGhlIGFjdHVhbAoJbnVtYmVyIGZpcnN0IGFuZCB0aGUgdGhlIGRlZmF1bHQgdmFsdWUgYXMgYSBDIGNvbW1lbnQuCgoJKiBuZXQuYyAoc3lzX3NlbmQsIHN5c19zZW5kdG8sIHN5c19zZW5kbXNnLCBzeXNfZ2V0c29ja29wdCwKCXN5c19zZXRzb2Nrb3B0KTogQ2hhbmdlIGZpcnN0IGFyZ3VtZW50IGZyb20gdW5zaWduZWQgdG8gc2lnbmVkIHRvCgljYXRlciB0byB0aGUgZnJlcXVlbnQgcHJhY3RpY2Ugb2YgY2FsbGluZyBzeXN0ZW0gY2FsbHMgd2l0aCBhIGZpbGUKCWRlc2NyaXB0b3Igb2YgLTEuCgkqIG1lbS5jIChzeXNfbW1hcCk6IExpa2V3aXNlLgoKU3VuIE1hciAxOSAxMzo1Mzo1MiAxOTk1ICBSaWNrIFNsYWRrZXkgIDxqcnNAd29ybGQuc3RkLmNvbT4KCgkqIHNpZ25hbC5jIFtMSU5VWF0gKHNpZ25hbGVudCk6IEhhbmRsZSBvbGQgYW5kIG5ldyB2YWx1ZXMgb2YgU0lHSU8uCgpTdW4gRGVjIDExIDIyOjUxOjUxIDE5OTQgIFJpY2sgU2xhZGtleSAgPGpyc0B3b3JsZC5zdGQuY29tPgoKCSogdmVyc2lvbi5jOiBWZXJzaW9uIDMuMC4xIGlzIHJlbGVhc2VkLgoJKiBNYWtlZmlsZS5pbiwgY29uZmlndXJlLmluLCBhY2xvY2FsLm00OiBDaGFuZ2VzIGZvciBhdXRvY29uZiAyLjAuCgkqIGNvbmZpZy5ndWVzcywgY29uZmlnLmd1ZXNzOiBVcGRhdGUgZnJvbSB0aGUgRlNGLgoJKiBpbnN0YWxsLXNoOiBOZXcgZnJvbSB0aGUgRlNGLgoKTW9uIERlYyAgNSAyMDo1MToyOSAxOTk0ICBSaWNrIFNsYWRrZXkgIDxqcnNAd29ybGQuc3RkLmNvbT4KCgkqIE1ha2VmaWxlLmluOiBBZGQgbTY4ayBhcmNoLgoJKiBhY2NvbmZpZy5oIChNNjhLKTogQWRkIG02OGsgZGVmaW5lLgoJKiBjb25maWd1cmUuaW46IEFkZCBkZXRlY3Rpb24gb2YgYXJjaCBtNjhrLgoJKiBwcm9jZXNzLmMgW002OEtdIChzdHJ1Y3RfdXNlcl9vZmZzZXRzKTogU3VwcG9ydCBtNjhrIHJlZ2lzdGVycyBhbmQKCW9mZnNldHMuCgkqIHNpZ25hbC5jIFtNNjhLXSAoc2lnY29udGV4dF9zdHJ1Y3QpOiBTdXBwb3J0IG02OGsgc2lnY29udGV4dAoJc3RydWN0dXJlLgoJW002OEtdIChzeXNfc2lncmV0dXJuKTogU3VwcG9ydCBtNjhrIHNpZ3JldHVybiBoYW5kbGluZy4KCSogc3lzY2FsbC5jIFtNNjhLXSAoc3lzY2FsbCk6IFN1cHBvcnQgbTY4ayBzeXNjYWxsIG51bWJlciByZWdpc3RlcgoJYW5kIGVycm5vIGluIGQwIGluc3RlYWQgb2YgZWF4LgoJKiB1dGlsLmMgW002OEtdIChnZXRwYywgcHJpbnRjYWxsLCBzZXRicHQsIGNsZWFyYnB0KTogU3VwcG9ydCBtNjhrCglwcm9ncmFtIGNvdW50ZXIgaW4gUFRfUEMgaW5zdGVhZCBvZiBFSVAuCglbTTY4S10gKExPT1ApOiBTdXBwb3J0IG02OGsgbG9vcCBpbnN0cnVjdGlvbi4KCUZyb20gQW5kcmVhcyBTY2h3YWIgPHNjaHdhYkBpc3Nhbi5pbmZvcm1hdGlrLnVuaS1kb3J0bXVuZC5kZT4uCgoJKiBtZW0uYyBbTUFQX0FOT05ZTU9VU10gKG1tYXBfZmxhZ3MpOiBDb3JyZWN0IGluYWR2ZXJ0ZW50IHJlZmVyZW5jZQoJdG8gTUFQX0ZJWEVEIGluc3RlYWQgb2YgTUFQX0FOT05ZTU9VUy4KCUZyb20gQW5kcmVhcyBTY2h3YWIgPHNjaHdhYkBpc3Nhbi5pbmZvcm1hdGlrLnVuaS1kb3J0bXVuZC5kZT4uCgoJKiBzaWduYWwuYyBbTElOVVhdIChzaWduYWxlbnQpOiBTaWduYWwgMzAgaXMgbm93IFNJR1BXUi4KCUZyb20gQW5kcmVhcyBTY2h3YWIgPHNjaHdhYkBpc3Nhbi5pbmZvcm1hdGlrLnVuaS1kb3J0bXVuZC5kZT4uCgpNb24gRGVjICA1IDAxOjA1OjQ2IDE5OTQgIFJpY2sgU2xhZGtleSAgPGpyc0B3b3JsZC5zdGQuY29tPgoKCSogZGVmcy5oICh0cHJpbnRmKTogRml4IHR5cG8gaW4gbm9uLWdjYyBhbnNpIHByb3RvdHlwZSBmb3IgdHByaW50Zi4KCVJlcG9ydGVkIGJ5IFRoYW5oIE1hIDx0bWFAZW5jb3JlLmNvbT4uCgoJKiBzdHJhY2UuYyAoY2xlYW51cCk6IFNlbmQgU0lHQ09OVCBiZWZvcmUgU0lHVEVSTSBiZWNhdXNlIExpbnV4CgkxLjEuNjIgZG9lc24ndCBjb250aW51ZSBhIHRyYWNlZCBjaGlsZCB3aGVuIHRoZSBwYXJlbnQgZXhpdHMuCglSZXBvcnRlZCBieSBNYXR0IERheSA8bWRheUBhcnRpc29mdC5jb20+LgoKCSogc3lzdGVtLmMgW0xJTlVYXTogSW5jbHVkZSBuZXRpbmV0L2luLmggYmVmb3JlIGFycGEvaW5ldC5oLgoKCSogdXRpbC5jIChwcmludHN0cik6IEZpeCBsb25nc3RhbmRpbmcgYnVnIGluIG5vdGF0aW5nIHN0cmluZwoJY29udGludWF0aW9uLgoKCSogc3RyYWNlLmMgW1NWUjRdIChwcm9jX29wZW4pOiBTcGVjaWZpY2FsbHkgd2FpdCBmb3IgdGhlIGNoaWxkIHRoZQoJY2hpbGQgdG8gZ28gaW50byB0aGUgZXhlY3ZlIHN5c2NhbGwgdG8gYXZvaWQgc3B1cmlvdXMgdHJhY2VzLgoJW0xJTlVYXSAoZGV0YWNoKTogQ29uZGl0aW9uYWxpemUgdGhlIHN0YXR1cyB2YXJpYWJsZS4KClN1biBEZWMgIDQgMjM6MjE6NDIgMTk5NCAgUmljayBTbGFka2V5ICA8anJzQHdvcmxkLnN0ZC5jb20+CgoJKiBNYWtlZmlsZS5pbjogQWRkIG1pcHMgYXJjaC4KCSogYWNjb25maWcuaCAoTUlQUyk6IEFkZCBtaXBzIGRlZmluZS4KCSogY29uZmlndXJlLmluOiBBZGQgZGV0ZWN0aW9uIG9mIG9wc3lzIGlyaXg1IGFuZCBhcmNoIG1pcHMuICBDaGVjawoJZm9yIHByY3RsIGZ1bmN0aW9uLgoJQ2hlY2sgZm9yIHN5cy9zeXNjb25maWcuaCBoZWFkZXIuCgkqIGRlZnMuaCAoTUFYX0FSR1MpOiBCdW1wIG1heGltdW0gc3lzY2FsbCBhcmd1bWVudHMgZnJvbSA4IHRvIDMyLgoJKiBmaWxlLmMgW1NWUjRdOiBJbmNsdWRlIHN5cy9jcmVkLmguCgkoYWNjZXNzX2ZsYWdzKTogVXBkYXRlIGFjY2VzcyBmbGFncyBmb3IgU0dJLgoJKHNwcmludHRpbWUpOiBDaGFuZ2UgdHlwZSBvZiBzcHJpbnR0aW1lIGFyZ3VtZW50IGZyb20gdW5zaWduZWQKCWxvbmcgdG8gdGltZV90LgoJKiBwcm9jZXNzLmMgW0hBVkVfUFJDVExdOiBJbmNsdWRlIHN5cy9wcmN0bC5oLgoJW0hBVkVfUFJDVExdIChwcmN0bF9vcHRpb25zLCBzeXNfcHJjdGwpOiBOZXcgZm9yIFNHSS4KCShwcmludHNpZ2luZm8pOiBDb25kaXRpb25hbGx5IGNvbXBpbGUgU0lfVElNRVIgYW5kIFNJX01FU0dRLgoJQ2FzdCBzaV9iYW5kIG1lbWJlciB0byBsb25nIGJlZm9yZSBwcmludGluZy4KCSogc2lnbmFsLmMgKHNpZ2FjdF9mbGFncyk6IEFkZCBfU0FfQlNEQ0FMTCBmb3IgU0dJLgoJKHNpZ3Byb2NtYXNrY21kcyk6IEFkZCBTSUdfU0VUTUFTSzMyIGZvciBTR0kuCgkqIHN0cmFjZS5jIFtTVlI0XSBbTUlQU106CgkoZm9vYmFyKTogTmV3IGR1bW15IHNpZ25hbCBoYW5kbGVyLgoJKG1haW4pOiBJbnN0YWxsIGEgZHVtbXkgc2lnbmFsIGhhbmRsZXIgaW4gdGhlIGNoaWxkIGJlZm9yZSBwYXVzaW5nCgl0byB3b3JrIGFyb3VuZCBhbiBTR0kgYnVnIGluIFBSU0FCT1JULgoJKHByb2Nfb3Blbik6IFNlbmQgYSBpbnRlcnJ1cHQgdG8gdGhlIGNoaWxkIGluc3RlYWQgb2YgYWJvcnRpbmcgdGhlCglzeXNjYWxsIHdoaWNoIGRvZXNuJ3Qgd29yayBvbiBJcml4NS4yLgoJKiBzdnI0L2R1bW15Lmg6IEFkZCBuZXcgdW5maW5pc2hlZCBTR0kgc3lzY2FsbHMKCShlLmcuIHN5c19zeXNtcCwgc3lzX3NnaW5hcCwgZXRjLikuICBIYW5kbGUgc29tZSBTR0kgc3lzY2FsbHMgbGlrZQoJZXhpc3RpbmcgY2FsbHMgKGUuZy4gc3lzX2tzaWdhY3Rpb24gbGlrZSBzeXNfc2lnYWN0aW9uKS4KCVByaW50YXJncyBkb2VzIHRoZSBwcmludCB0aGluZyBmb3Igc3lzX3NldGhvc3RpZC4KCSogc3ZyNC9zeXNjYWxsLmg6IERlY2xhcmUgYWxsIG5ldyBTR0kgc3lzY2FsbHMuCgkoU0dJX0tMVURHRSk6IERlZmluZSBzeXNjYWxsIHRhYmxlIHN0YXJ0aW5nIGluZGV4IHRvIGJlIDEgZm9yIFNHSQoJYW5kIGFkZCBpdCB0byBhbGwgc3ViY2FsbCBlbnRyeSBwb2ludHMuCgkoU1lTX3BncnBzeXNfc3ViY2FsbCwgU1lTX3NpZ2NhbGxfc3ViY2FsbCwgU1lTX2NvbnRleHQpOiBEb24ndAoJZGVjb2RlIGFzIHN1YmNhbGxzIG9uIE1JUFMuIEluc3RlYWQsIHVzZSB0aGUgbm9ybWFsIHN5c2NhbGxzLgoJKiBzdnI0L3N5c2NhbGxlbnQuaCBbTUlQU106IExlYWQgc3lzY2FsbCB0YWJsZSB3aXRoIGEgZHVtbXkgZW50cnkKCXNpbmNlIFNHSSBzeXNjYWxsIG51bWJlcnMgYXJlIG9mZiBieSBvbmUuCglbTUlQU10gKHN5c19wZ3Jwc3lzKTogUmVuYW1lIHRvIHN5c19zZXRwZ3JwIG9uIFNHSS4KCVtNSVBTXSAoc3lzX3hlbml4KTogUmVuYW1lIHRvIHN5c19zeXNzZ2kgb24gU0dJLgoJW01JUFNdIChzeXNfc3lzbWFjaGluZSk6IFJlbmFtZSB0byBzeXNfc3lzbWlwcyBvbiBTR0kuCglbTUlQU106IENvbmRpdGlvbmFsaXplIFNWUjQgZXh0ZW5zaW9uIGludG8gU0dJIGFuZCBTb2xhcmlzIGNsYXNzZXMuCgkqIHN5c2NhbGwuYyAoZHVtcGlvKTogVmFsaWRhdGUgZGVzY3JpcHRvciBhZ2FpbnN0IE1BWF9RVUFMUy4KCVtIQVZFX1BSX1NZU0NBTExdIChzeXNjYWxsKTogQ29uZGl0aW9uYWxpemUgU1lTX3Zmb3JrLgoJW01JUFNdIChzeXNjYWxsKTogQWRkIFNHSSBzZWN0aW9uIGZvciBkZWNvZGluZyB1X2Vycm9yIGFuZCB1X3J2YWwuCglBZGQgd29ya2Fyb3VuZCBmb3IgYnJva2VuIFNHSSBwcl9zeXNhcmcgb24gc3lzY2FsbCBlbnRyeS4KCVtTVlI0XSAoc3lzY2FsbCk6IENvbmRpdGlvbmFsaXplIHN1YmNhbGwgZGVjb2RpbmcgZm9yCglTWVNfcHRycHN5c19zdWJjYWxsLCBTWVNfc2lnY2FsbF9zdWJjYWxsIGFuZCBTWVNfY29udGV4dF9zdWJjYWxsLgoJW1NWUjRdIFtNSVBTXSAoZ2V0cnZhbDIpOiBIYW5kbGUgU0dJLgoJKiBzeXNjYWxsZW50LnNoOiBEb3JrIHRoZSBzZWQgbGluZSB0byBiZSBjaG9vc2llciBhYm91dCBTWVNfIGxpbmVzLgoJKiBzeXN0ZW0uYyBbSEFWRV9TWVNDT05GSUdfSF06IEluY2x1ZGUgc3lzL3N5c2NvbmZpZy5oLgoJW01JUFNdIChzeXNzZ2lfb3B0aW9ucywgc3lzX3N5c3NnaSk6IE5ldyBmb3IgU0dJLgo=