SElTVE9SWQoKKENWUyBIRUFEKQoKICAqIFtFbnRlciBuZXcgY2hhbmdlcyBqdXN0IGFmdGVyIHRoaXMgbGluZSAtIGRvIG5vdCByZW1vdmUgdGhpcyBsaW5lXQoKICsrIE5ldyBmZWF0dXJlczoKCiAgMjAxMi0wMS0xNjogU2ltb24gR29sZHNjaG1pZHQKICAqIG9wdC5oLCBpY21wLmM6IEFkZGVkIG9wdGlvbiBDSEVDS1NVTV9HRU5fSUNNUAoKICAyMDExLTEyLTE3OiBTaW1vbiBHb2xkc2NobWlkdAogICogaXAuaDogaW1wbGVtZW50ZWQgQVBJIGZ1bmN0aW9ucyB0byBhY2Nlc3Mgc29fb3B0aW9ucyBvZiBJUCBwY2JzIChVRFAsIFRDUCwgUkFXKQogICAgKGZpeGVzIGJ1ZyAjMzUwNjEpCgogIDIwMTEtMDktMjc6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBvcHQuaCwgdGNwLmMsIHRjcF9pbi5jOiBJbXBsZW1lbnRlZCBsaW1pdGluZyBkYXRhIG9uIG9vc2VxIHF1ZXVlICh0YXNrICM5OTg5KQogICAgKGRlZmluZSBUQ1BfT09TRVFfTUFYX0JZVEVTIC8gVENQX09PU0VRX01BWF9QQlVGUyBpbiBsd2lwb3B0cy5oKQoKICAyMDExLTA5LTIxOiBTaW1vbiBHb2xkc2NobWlkdAogICogb3B0LmgsIGFwaS5oLCBhcGlfbGliLmMsIGFwaV9tc2cuaC8uYywgc29ja2V0cy5jOiBJbXBsZW1lbnRlZCB0aW1lb3V0IG9uCiAgICBzZW5kIChUQ1Agb25seSwgYnVnICMzMzgyMCkKCiAgMjAxMS0wOS0yMTogU2ltb24gR29sZHNjaG1pZHQKICAqIGluaXQuYzogQ29udmVydGVkIHJ1bnRpbWUtc2FuaXR5LWNoZWNrcyBpbnRvIGNvbXBpbGUtdGltZSBjaGVja3MgdGhhdCBjYW4KICAgIGJlIGRpc2FibGVkIChzaW5jZSBydW50aW1lIGNoZWNrcyBjYW4gb2Z0ZW4gbm90IGJlIHNlZW4gb24gZW1iZWRkZWQgdGFyZ2V0cykKCiAgMjAxMS0wOS0xMTogU2ltb24gR29sZHNjaG1pZHQKICAqIHBwcC5oLCBwcHBfaW1wbC5oOiBzcGxpdHRlZCBwcHAuaCB0byBhbiBpbnRlcm5hbCBhbmQgZXh0ZXJuYWwgaGVhZGVyIGZpbGUKICAgIHRvIGdldCBhIGNsZWFyIHNlcGFyYXRpb24gb2Ygd2hpY2ggZnVuY3Rpb25zIGFuIGFwcGxpY2F0aW9uIG9yIHBvcnQgbWF5IHVzZQogICAgKHRhc2sgIzExMjgxKQoKIDIwMTEtMDktMTE6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBvcHQuaCwgdGNwX2ltcGwuaCwgdGNwLmMsIHVkcC5oLy5jOiBBZGRlZCBhIGNvbmZpZyBvcHRpb24gdG8gcmFuZG9taXplCiAgICBpbml0aWFsIGxvY2FsIFRDUC9VRFAgcG9ydHMgKHNvIHRoYXQgZGlmZmVyZW50IHBvcnQgcmFuZ2VzIGFyZSB1c2VkIGFmdGVyCiAgICBhIHJlYm9vdDsgYnVnICMzMzgxODsgdGhpcyBvbmUgYWRkZWQgdGNwX2luaXQvdWRwX2luaXQgZnVuY3Rpb25zIGFnYWluKQoKICAyMDExLTA5LTAzOiBTaW1vbiBHb2xkc2NobWlkdAogICogZGhjcC5jOiBESENQIHVzZXMgTFdJUF9SQU5EKCkgZm9yIHhpZCdzIChidWcgIzMwMzAyKQoKICAyMDExLTA4LTI0OiBTaW1vbiBHb2xkc2NobWlkdAogICogb3B0LmgsIG5ldGlmLmgvLmM6IGFkZGVkIG5ldGlmIHJlbW92ZSBjYWxsYmFjayAoYnVnICMzMjM5NykKCiAgMjAxMS0wNy0yNjogU2ltb24gR29sZHNjaG1pZHQKICAqIGV0aGFycC5jOiBFVEhBUlBfU1VQUE9SVF9WTEFOOiBhZGQgc3VwcG9ydCBmb3IgYW4gZXh0ZXJuYWwgVkxBTiBmaWx0ZXIKICAgIGZ1bmN0aW9uIGluc3RlYWQgb2Ygb25seSBjaGVja2luZyBmb3Igb25lIFZMQU4gKGRlZmluZSBFVEhBUlBfVkxBTl9DSEVDS19GTikKCiAgMjAxMS0wNy0yMTogU2ltb24gR29sZHNjaG1pZHQgKHBhdGNoIGJ5IGhhbmh1aSkKICAqIGlwNC5jLCBldGhhcnAuYywgcGJ1Zi5oOiBidWcgIzMzNjM0IGlwX2ZvcndhcmQoKSBoYXZlIGEgZmF1bHR5IGJlaGF2aW91cjoKICAgIEFkZGVkIHBidWYgZmxhZ3MgdG8gbWFyayBpbmNvbWluZyBwYWNrZXRzIGFzIGxpbmstbGF5ZXIgYnJvYWRjYXN0L211bHRpY2FzdC4KICAgIEFsc28gYWRkZWQgY29kZSB0byBhbGxvdyBpcF9mb3J3YXJkKCkgdG8gZm9yd2FyZCBub24tYnJvYWRjYXN0IHBhY2tldHMgdG8KICAgIHRoZSBpbnB1dCBuZXRpZiAoc2V0IElQX0ZPUldBUkRfQUxMT1dfVFhfT05fUlhfTkVUSUY9PTEpLgoKICAyMDExLTA2LTI2OiBTaW1vbiBHb2xkc2NobWlkdCAocGF0Y2ggYnkgQ2FtZXJvbiBHdXRtYW4pCiAgKiB0Y3AuYywgdGNwX291dC5jOiBidWcgIzMzNjA0OiBhZGRlZCBzb21lIG1vcmUgYXNzZXJ0cyB0byBjaGVjayB0aGF0CiAgICBwY2ItPnN0YXRlICE9IExJU1RFTgoKICAgMjAxMS0wNS0xNDogU2ltb24gR29sZHNjaG1pZHQgKHBhdGNoIGJ5IFN06XBoYW5lIExlc2FnZSkKICAqIHRjcGlwLmMvLmg6IHBhdGNoICM3NDQ5IGFsbG93IHRjcGlwIGNhbGxiYWNrIGZyb20gaW50ZXJydXB0IHdpdGggc3RhdGljCiAgICBtZW1vcnkgbWVzc2FnZQoKCiArKyBCdWdmaXhlczoKCiAgMjAxMi0wMy0xMjogU2ltb24gR29sZHNjaG1pZHQgKHBhdGNoIGJ5IEJvc3RqYW4gTWVnbGljKQogICogcHBwLmM6IGZpeGVkIGJ1ZyAjMzU4MDk6IFBQUCBHZXRNYXNrKCk6IENvbXBpbGVyIHdhcm5pbmcgb24gYmlnIGVuZGlhbiwKICAgIHBvc3NpYmxlIGJ1ZyBvbiBsaXR0bGUgZW5kaWFuIHN5c3RlbQoKICAyMDEyLTAyLTIzOiBTaW1vbiBHb2xkc2NobWlkdAogICogZXRoYXJwLmM6IGZpeGVkIGJ1ZyAjMzU1OTU6IEltcG9zc2libGUgdG8gc2VuZCBicm9hZGNhc3Qgd2l0aG91dCBhIGdhdGV3YXkKICAgIChpbnRyb2R1Y2VkIHdoZW4gZml4aW5nIGJ1ZyMgMzM1NTEpCgogIDIwMTItMDItMTY6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBwcHAuYzogZml4ZWQgcGJ1ZiBsZWFrIHdoZW4gUFBQIHNlc3Npb24gaXMgYWJvcnRlZCB0aHJvdWdoIHBwcFNpZ0hVUCgpCiAgICAoYnVnICMzNTU0MTogUFBQIE1lbW9yeSBMZWFrKQoKICAyMDEyLTAyLTE2OiBTaW1vbiBHb2xkc2NobWlkdAogICogZXRoYXJwLmM6IGZpeGVkIGJ1ZyAjMzU1MzE6IEltcG9zc2libGUgdG8gc2VuZCBtdWx0aWNhc3Qgd2l0aG91dCBhIGdhdGV3YXkKICAgIChpbnRyb2R1Y2VkIHdoZW4gZml4aW5nIGJ1ZyMgMzM1NTEpCgogIDIwMTItMDItMTY6IFNpbW9uIEdvbGRzY2htaWR0IChwYXRjaCBieSBTdOlwaGFuZSBMZXNhZ2UpCiAgKiBtc2dfaW4uYywgbXNnX291dC5jOiBmaXhlZCBidWcgIzM1NTM2IFNOTVA6IGVycm9yIHRvbyBiaWcgcmVzcG9uc2UgaXMgbWFsZm9ybWVkCgogIDIwMTItMDItMTU6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBpbml0LmM6IGZpeGVkIGJ1ZyAjMzU1Mzc6IE1FTVBfTlVNXyogc2FuaXR5IGNoZWNrcyBzaG91bGQgYmUgZGlzYWJsZWQgd2l0aAogICAgTUVNUF9NRU1fTUFMTE9DPT0xCgogIDIwMTItMDItMTI6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3AuaCwgdGNwX2luLmMsIHRjcF9vdXQuYzogcGFydGx5IGZpeGVkIGJ1ZyAjMjU4ODI6IFRDUCBoYW5ncyBvbgogICAgTVNTID4gcGNiLT5zbmRfd25kIChieSBub3QgY3JlYXRpbmcgc2VnbWVudHMgYmlnZ2VyIHRoYW4gaGFsZiB0aGUgd2luZG93KQoKICAyMDEyLTAyLTExOiBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwLmM6IGZpeGVkIGJ1ZyAjMzU0MzU6IE5vIHBjYiBzdGF0ZSBjaGVjayBiZWZvcmUgYWRkaW5nIGl0IHRvIHRpbWUtd2FpdAogICAgcXVldWUgd2hpbGUgY2xvc2luZwoKICAyMDEyLTAxLTIyOiBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwLmMsIHRjcF9pbi5jOiBmaXhlZCBidWcgIzM1MzA1OiBwY2IgbWF5IGJlIGZyZWVkIHRvbyBlYXJseSBvbiBzaHV0ZG93bihXUikKCiAgMjAxMi0wMS0yMTogU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcC5jOiBmaXhlZCBidWcgIzM0NjM2OiBGSU5fV0FJVF8yIC0gSW5jb3JyZWN0IHNodXRkb3duIG9mIFRDUCBwY2IKCiAgMjAxMi0wMS0yMDogU2ltb24gR29sZHNjaG1pZHQKICAqIGRoY3AuYzogZml4ZWQgYnVnICMzNTE1MTogREhDUCBhc3NlcnRzIG9uIGluY29taW5nIG9wdGlvbiBsZW5ndGhzCgogMjAxMi0wMS0yMDogU2ltb24gR29sZHNjaG1pZHQKICAqIHBidWYuYzogZml4ZWQgYnVnICMzNTI5MTogTlVMTCBwb2ludGVyIGluIHBidWZfY29weQoKICAyMDExLTExLTI1OiBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwLmgvLmMsIHRjcF9pbXBsLmgsIHRjcF9pbi5jOiBmaXhlZCBidWcgIzMxMTc3OiB0Y3AgdGltZXJzIGNhbiBjb3JydXB0CiAgICB0Y3BfYWN0aXZlX3BjYnMgaW4gc29tZSBjYXNlcwoKICAyMDExLTExLTIzOiBTaW1vbiBHb2xkc2NobWlkdAogICogc3lzLmM6IGZpeGVkIGJ1ZyAjMzQ4ODQ6IHN5c19tc2xlZXAoKSBib2R5IG5lZWRzIHRvIGJlIHN1cnJvdW5kZWQgd2l0aAogICAgJyNpZm5kZWYgc3lzX21zbGVlcCcKCiAgMjAxMS0xMS0yMjogU2ltb24gR29sZHNjaG1pZHQKICAqIG5ldGlmLmMsIGV0aGFycC5oLy5jOiBmaXhlZCBidWcgIzM0Njg0OiBDbGVhciB0aGUgYXJwIHRhYmxlIGNhY2hlIHdoZW4KICAgIG5ldGlmIGlzIGJyb3VnaHQgZG93bgoKICAyMDExLTEwLTI4OiBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwX2luLmM6IGZpeGVkIGJ1ZyAjMzQ2Mzg6IERlYWQgY29kZSBpbiB0Y3BfcmVjZWl2ZSAtIHBjYi0+ZHVwYWNrcwoKICAyMDExLTEwLTIzOiBTaW1vbiBHb2xkc2NobWlkdAogICogbWVtLmM6IGZpeGVkIGJ1ZyAjMzQ0Mjk6IHBvc3NpYmxlIG1lbW9yeSBjb3JydXB0aW9uIHdpdGgKICAgIExXSVBfQUxMT1dfTUVNX0ZSRUVfRlJPTV9PVEhFUl9DT05URVhUIHNldCB0byAxCgogIDIwMTEtMTAtMTg6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBhcmNoLmgsIG5ldGRiLmM6IGZpeGVkIGJ1ZyAjMzQ1OTI6IGx3aXBfZ2V0aG9zdGJ5bmFtZV9yIHVzZXMgbm9uc3RhbmRhcmQKICAgIGVycm9yIHZhbHVlCgogIDIwMTEtMTAtMTg6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBvcHQuaDogZml4ZWQgZGVmYXVsdCB2YWx1ZXMgb2YgVENQX1NORExPV0FUIGFuZCBUQ1BfU05EUVVFVUVMT1dBVCBmb3Igc21hbGwKICAgIHdpbmRvd3MgKGJ1ZyAjMzQxNzYgc2VsZWN0IGFmdGVyIG5vbi1ibG9ja2luZyBzZW5kIHRpbWVzIG91dCkKCiAgMjAxMS0xMC0xODogU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcF9pbXBsLmgsIHRjcF9vdXQuYzogZml4ZWQgYnVnICMzNDU4NzogVENQX0JVSUxEX01TU19PUFRJT04gZG9lc24ndAogICAgY29uc2lkZXIgbmV0aWYtPm10dSwgY2F1c2VzIHNsb3cgbmV0d29yawoKICAyMDExLTEwLTE4OiBTaW1vbiBHb2xkc2NobWlkdAogICogc29ja2V0cy5jOiBmaXhlZCBidWcgIzM0NTgxIG1pc3NpbmcgcGFyZW50aGVzZXMgaW4gdWRwbGl0ZSBzb2NrZXRzIGNvZGUKCiAgMjAxMS0xMC0xODogU2ltb24gR29sZHNjaG1pZHQKICAqIHNvY2tldHMuaDogZml4ZWQgYnVnICMzNDU4MCBmY250bCgpIGlzIG1pc3NpbmcgaW4gTFdJUF9DT01QQVRfU09DS0VUUwoKICAyMDExLTEwLTE3OiBTaW1vbiBHb2xkc2NobWlkdAogICogYXBpX21zZy5jOiBmaXhlZCBidWcgIzM0NTY5OiBzaHV0ZG93bihTSFVUX1dSKSBjcmFzaGVzIG5ldGNvbm4vc29ja2V0IGFwaQoKICAyMDExLTEwLTEzOiBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwX2luLmMsIHRjcF9vdXQuYzogZml4ZWQgYnVnICMzNDUxNyAocGVyc2lzdCB0aW1lciBpcyBzdGFydGVkIGFsdGhvdWdoIG5vCiAgICB6ZXJvIHdpbmRvdyBpcyByZWNlaXZlZCkgYnkgc3RhcnRpbmcgdGhlIHBlcnNpc3QgdGltZXIgd2hlbiBhIHplcm8gd2luZG93IGlzCiAgICByZWNlaXZlZCwgbm90IHdoZW4gd2UgaGF2ZSBtb3JlIGRhdGEgcXVldWVkIGZvciBzZW5kaW5nIHRoYW4gZml0cyBpbnRvIHRoZQogICAgd2luZG93CgogIDIwMTEtMTAtMTM6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBkZWYuaCwgdGltZXJzLmM6IGZpeGVkIGJ1ZyAjMzQ1NDE6IExXSVBfVTMyX0RJRkYgaXMgdW5uZWNlc3NhcmlseSBjb21wbGV4CgogIDIwMTEtMTAtMTM6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBzb2NrZXRzLmMsIGFwaV9saWIuYzogZml4ZWQgYnVnICMzNDU0MDogY29tcGlsZXIgZXJyb3Igd2hlbiBDT1JFX0xPQ0tJTkcgaXMKICAgIHVzZWQgYW5kIG5vdCBhbGwgcHJvdG9jb2xzIGFyZSBlbmFibGVkCgogIDIwMTEtMTAtMTI6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBwYnVmLmM6IGZpeGVkIGJ1ZyAjMzQ1MzQ6IEVycm9yIGluIHNlbmRpbmcgZnJhZ21lbnRlZCBJUCBpZiBNRU1fQUxJR05NRU5UID4gNAoKICAyMDExLTEwLTA5OiBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwX291dC5jOiBmaXhlZCBidWcgIzM0NDI2OiB0Y3BfemVyb193aW5kb3dfcHJvYmUoKSB0cmFuc21pdHMgaW5jb3JyZWN0CiAgICBieXRlIHZhbHVlIHdoZW4gcGNiLT51bmFja2VkICE9IE5VTEwKCiAgMjAxMS0xMC0wOTogU2ltb24gR29sZHNjaG1pZHQKICAqIGlwNC5jOiBmaXhlZCBidWcgIzM0NDQ3IExXSVBfSVBfQUNDRVBUX1VEUF9QT1JUKGRzdF9wb3J0KSB3cm9uZwoKICAyMDExLTA5LTI3OiBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwX2luLmMsIHRjcF9vdXQuYzogUmVzZXQgcGNiLT51bnNlbnRfb3ZlcnNpemUgaW4gMiBtb3JlIHBsYWNlcy4uLgoKICAyMDExLTA5LTI3OiBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwX2luLmM6IGZpeGVkIGJ1ZyAjMjgyODg6IERhdGEgYWZ0ZXIgRklOIGluIG9vcyBxdWV1ZQoKICAyMDExLTA5LTI3OiBTaW1vbiBHb2xkc2NobWlkdAogICogZGhjcC5jOiBmaXhlZCBidWcgIzM0NDA2IGRoY3Bfb3B0aW9uX2hvc3RuYW1lKCkgY2FuIG92ZXJmbG93IHRoZSBwYnVmCgogIDIwMTEtMDktMjQ6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBtZW0uaDogZml4ZWQgYnVnICMzNDM3NyBNRU1fU0laRV9GIGlzIG5vdCBkZWZpbmVkIGlmIE1FTV9MSUJDX01BTExPQz09MQoKICAyMDExLTA5LTIzOiBTaW1vbiBHb2xkc2NobWlkdAogICogcGJ1Zi5oLCB0Y3AuYywgdGNwX2luLmM6IGZpeGVkIGJ1ZyAjMzM4NzE6IHJlamVjdGluZyBUQ1BfRVZFTlRfUkVDVigpIGZvcgogICAgdGhlIGxhc3QgcGFja2V0IGluY2x1ZGluZyBGSU4gY2FuIGxvc2UgZGF0YQoKICAyMDExLTA5LTIyOiBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwX2ltcGwuaDogZml4ZWQgYnVnICMzNDM1NTogbmFnbGUgZG9lcyBub3QgdGFrZSBzbmRfYnVmL3NuZF9xdWV1ZWxlbiBpbnRvCiAgICBhY2NvdW50CgogIDIwMTEtMDktMjE6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBvcHQuaDogZml4ZWQgZGVmYXVsdCB2YWx1ZSBvZiBUQ1BfU05EX0JVRiB0byBub3QgdmlvbGF0ZSB0aGUgc2FuaXR5IGNoZWNrcwogICAgaW4gaW5pdC5jCgogIDIwMTEtMDktMjA6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0aW1lcnMuYzogZml4ZWQgYnVnICMzNDMzNyAocG9zc2libGUgTlVMTCBwb2ludGVyIGluIHN5c19jaGVja190aW1lb3V0cykKCiAgMjAxMS0wOS0xMTogU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcF9vdXQuYzogdXNlIHBjYi0+bXNzIGluc3RlYWQgb2YgVENQX01TUyBmb3IgcHJlYWxsb2NhdGUgbXNzLXNpemVkIHBidWZzCiAgICAoYnVnICMzNDAxOSkKCiAgMjAxMS0wOS0wOTogU2ltb24gR29sZHNjaG1pZHQKICAqIHVkcC5jOiBmaXhlZCBidWcgIzM0MDcyOiBVRFAgYnJvYWRjYXN0IGlzIHJlY2VpdmVkIGZyb20gd3JvbmcgVURQIHBjYiBpZgogICAgdWRwIHBvcnQgbWF0Y2hlcwoKICAyMDExLTA5LTAzOiBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwX2luLmM6IGZpeGVkIGJ1ZyAjMzM5NTIgUFVTSCBmbGFnIGluIGluY29taW5nIHBhY2tldCBpcyBsb3N0IHdoZW4gcGFja2V0CiAgICBpcyBhZ2dyZWdhdGVkIGFuZCBzZW50IHRvIGFwcGxpY2F0aW9uCgogIDIwMTEtMDktMDE6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBvcHQuaDogZml4ZWQgYnVnICMzMTgwOSBMV0lQX0VWRU5UX0FQSSBpbiBvcHRzLmggaXMgaW5jb25zaXN0ZW50IGNvbXBhcmVkCiAgICB0byBvdGhlciBvcHRpb25zCgogIDIwMTEtMDktMDE6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3BfaW4uYzogZml4ZWQgYnVnICMzNDExMSBSU1QgZm9yIEFDSyB0byBsaXN0ZW5pbmcgcGNiIGhhcyB3cm9uZyBzZXFubwoKICAyMDExLTA4LTI0OiBTaW1vbiBHb2xkc2NobWlkdAogICogYXBpX21zZy5jLCBzb2NrZXRzLmM6IGZpeGVkIGJ1ZyAjMzM5NTYgV3JvbmcgZXJyb3IgcmV0dXJuZWQgd2hlbiBjYWxsaW5nCiAgICBhY2NlcHQoKSBvbiBVRFAgY29ubmVjdGlvbnMKCiAgMjAxMS0wOC0yNDogU2ltb24gR29sZHNjaG1pZHQKICAqIHNvY2tldHMuaDogZml4ZWQgYnVnICMzNDA1NyBzb2NrbGVuX3Qgc2hvdWxkIGJlIGEgdHlwZWRlZgoKICAyMDExLTA4LTI0OiBTaW1vbiBHb2xkc2NobWlkdAogICogcGJ1Zi5jOiBmaXhlZCBidWcgIzM0MTEyIE9kZCBjaGVjayBpbiBwYnVmX2FsbG9jZWRfY3VzdG9tICh0eXBvKQoKICAyMDExLTA4LTI0OiBTaW1vbiBHb2xkc2NobWlkdAogICogZGhjcC5jOiBmaXhlZCBidWcgIzM0MTIyIGRoY3A6IGhvc3RuYW1lIGNhbiBvdmVyZmxvdwoKICAyMDExLTA4LTI0OiBTaW1vbiBHb2xkc2NobWlkdAogICogbmV0aWYuYzogZml4ZWQgYnVnICMzNDEyMSBuZXRpZl9hZGQvbmV0aWZfc2V0X2lwYWRkciBmYWlsIG9uIE5VTEwgaXBhZGRyCgogIDIwMTEtMDgtMjI6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3Bfb3V0LmM6IGZpeGVkIGJ1ZyAjMzM5NjIgVEZfRklOIG5vdCBhbHdheXMgc2V0IGFmdGVyIEZJTiBpcyBzZW50LiAoVGhpcwogICAgbWVyZWx5IHByZXZlbnRzIG5hZ2xlIGZyb20gbm90IHRyYW5zbWl0dGluZyBmYXN0IGFmdGVyIGNsb3NpbmcuKQoKICAyMDExLTA3LTIyOiBTaW1vbiBHb2xkc2NobWlkdAogICogYXBpX2xpYi5jLCBhcGlfbXNnLmMsIHNvY2tldHMuYywgYXBpLmg6IGZpeGVkIGJ1ZyAjMzEwODQgKHNvY2tldCBBUEkgcmV0dXJucwogICAgYWx3YXlzIEVNU0dTSVpFIG9uIG5vbi1ibG9ja2luZyBzb2NrZXRzIGlmIGRhdGEgc2l6ZSA+IHNlbmQgYnVmZmVycykgLT4gbm93CiAgICBsd2lwX3NlbmQoKSBzZW5kcyBhcyBtdWNoIGFzIHBvc3NpYmxlIGZvciBub24tYmxvY2tpbmcgc29ja2V0cwoKICAyMDExLTA3LTIyOiBTaW1vbiBHb2xkc2NobWlkdAogICogcGJ1Zi5jLy5oLCB0aW1lcnMuYzogZnJlZWluZyBvb3NlcSBwYnVmcyB3aGVuIHRoZSBwYnVmIHBvb2wgaXMgZW1wdHkgaW1wbGVtZW50ZWQKICAgIGZvciBOT19TWVM9PTE6IHdoZW4gbm90IHVzaW5nIHN5c19jaGVja190aW1lb3V0cygpLCBjYWxsIFBCVUZfQ0hFQ0tfRlJFRV9PT1NFUSgpCiAgICBhdCByZWd1bGFyIGludGVydmFscyBmcm9tIG1haW4gbGV2ZWwuCgogIDIwMTEtMDctMjE6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBldGhhcnAuYzogZml4ZWQgYnVnICMzMzU1MSAoQVJQIGVudHJpZXMgbWF5IHRpbWUgb3V0IGFsdGhvdWdoIGluIHVzZSkgYnkKICAgIHNlbmRpbmcgYW4gQVJQIHJlcXVlc3Qgd2hlbiBhbiBBUlAgZW50cnkgaXMgdXNlZCBpbiB0aGUgbGFzdCBtaW51dGUgYmVmb3JlCiAgICBpdCB3b3VsZCB0aW1lIG91dC4KCiAgMjAxMS0wNy0wNDogU2ltb24gR29sZHNjaG1pZHQKICAqIHN5c19hcmNoLnR4dDogRml4ZWQgZG9jdW1lbnRhdGlvbiBhZnRlciBjaGFuZ2luZyBzeXMgYXJjaCBwcm90b3R5cGVzIGZvciAxLjQuMC4KCiAgMjAxMS0wNi0yNjogU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcC5jOiBmaXhlZCBidWcgIzMxNzIzICh0Y3Bfa2lsbF9wcmlvKCkga2lsbHMgcGNicyB3aXRoIHRoZSBzYW1lIHByaW8pIGJ5CiAgICB1cGRhdGluZyBpdHMgZG9jdW1lbnRhdGlvbiBvbmx5LgoKIDIwMTEtMDYtMjY6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBtZW0uYzogZml4ZWQgYnVnICMzMzU0NTogV2l0aCBNRU1fVVNFX1BPT0xTPT0xLCBtZW1fbWFsbG9jIGNhbiByZXR1cm4gYW4KICAgIHVuYWxpZ25lZCBwb2ludGVyLgoKICAyMDExLTA2LTI2OiBTaW1vbiBHb2xkc2NobWlkdAogICogbWVtLmM6IGZpeGVkIGJ1ZyAjMzM1NDQgIndhcm5pbmcgaW4gbWVtLmMgaW4gbHdpcCAxLjQuMCB3aXRoIE5PX1NZUz0xIgoKICAgMjAxMS0wNS0yNTogU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcC5jOiBmaXhlZCBidWcgIzMzMzk4IChwb2ludGxlc3MgY29udmVyc2lvbiB3aGVuIGNoZWNraW5nIFRDUCBwb3J0IHJhbmdlKQoKCgooU1RBQkxFLTEuNC4wKQoKICArKyBOZXcgZmVhdHVyZXM6CgogIDIwMTEtMDMtMjc6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3BfaW1wbC5oLCB0Y3BfaW4uYywgdGNwX291dC5jOiBSZW1vdmVkICdkYXRhcHRyJyBmcm9tICdzdHJ1Y3QgdGNwX3NlZycgYW5kCiAgICBjYWxjdWxhdGUgaXQgaW4gdGNwX3plcm9fd2luZG93X3Byb2JlICh0aGUgb25seSBwbGFjZSB3aGVyZSBpdCB3YXMgdXNlZCkuCgogIDIwMTAtMTEtMjE6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBkaGNwLmMvLmg6IEFkZGVkIGEgZnVuY3Rpb24gdG8gZGVhbGxvY2F0ZSB0aGUgc3RydWN0IGRoY3AgZnJvbSBhIG5ldGlmCiAgICAoZml4ZXMgYnVnICMzMTUyNSkuCgogIDIwMTAtMDctMTI6IFNpbW9uIEdvbGRzY2htaWR0IChwYXRjaCBieSBTdGVwaGFuZSBMZXNhZ2UpCiAgKiBpcC5jLCB1ZHAuYy8uaCwgcGJ1Zi5oLCBzb2NrZXRzLmM6IHRhc2sgIzEwNDk1OiBBZGRlZCBzdXBwb3J0IGZvcgogICAgSVBfTVVMVElDQVNUX0xPT1AgYXQgc29ja2V0LSBhbmQgcmF3LUFQSSBsZXZlbC4KCiAgMjAxMC0wNi0xNjogU2ltb24gR29sZHNjaG1pZHQKICAqIGlwLmM6IEFkZGVkIGFuIG9wdGlvbmFsIGRlZmluZSAoTFdJUF9JUF9BQ0NFUFRfVURQX1BPUlQpIHRoYXQgY2FuIGFsbG93CiAgICBsaW5rLWxheWVyLWFkZHJlc3NlZCBVRFAgdHJhZmZpYyB0byBiZSByZWNlaXZlZCB3aGlsZSBhIG5ldGlmIGlzIGRvd24gKGp1c3QKICAgIGxpa2UgREhDUCBkdXJpbmcgY29uZmlndXJhdGlvbikKCiAgMjAxMC0wNS0yMjogU2ltb24gR29sZHNjaG1pZHQKICAqIG1hbnkgbWFueSBmaWxlczogYnVnICMyNzM1MjogcmVtb3ZlZCBwYWNraW5nIGZyb20gaXBfYWRkcl90LCB0aGUgcGFja2VkCiAgICB2ZXJzaW9uIGlzIG5vdyBvbmx5IHVzZWQgaW4gcHJvdG9jb2wgaGVhZGVycy4gQWRkZWQgZ2xvYmFsIHN0b3JhZ2UgZm9yCiAgICBjdXJyZW50IHNyYy9kZXN0IElQIGFkZHJlc3Mgd2hpbGUgaW4gaW5wdXQgZnVuY3Rpb25zLgoKICAyMDEwLTA1LTE2OiBTaW1vbiBHb2xkc2NobWlkdAogICogZGVmLmg6IHRhc2sgIzEwMzkxOiBBZGQgcHJlcHJvY2Vzc29yLW1hY3JvcyBmb3IgY29tcGlsZS10aW1lIGh0b25sCiAgICBjYWxjdWxhdGlvbiAoYW5kIHVzZSB0aGVtIHRocm91Z2hvdXQgdGhlIHN0YWNrIHdoZXJlIGFwcGxpY2FibGUpCgogIDIwMTAtMDUtMTY6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBvcHQuaCwgbWVtcF9zdGQuaCwgbWVtcC5jLCBwcHBfb2UuaC8uYzogUFBQb0Ugbm93IHVzZXMgaXRzIG93biBNRU1QIHBvb2wKICAgIGluc3RlYWQgb2YgdGhlIGhlYXAgKG1vdmVkIHN0cnVjdCBwcHBvZV9zb2Z0YyBmcm9tIHBwcF9vZS5jIHRvIHBwcF9vZS5oKQoKICAyMDEwLTA1LTE2OiBTaW1vbiBHb2xkc2NobWlkdAogICogb3B0LmgsIG1lbXBfc3RkLmgsIGRucy5oLy5jOiBETlNfTE9DQUxfSE9TVExJU1RfSVNfRFlOQU1JQyB1c2VzIGl0cyBvd24KICAgIE1FTVAgcG9vbCBpbnN0ZWFkIG9mIHRoZSBoZWFwCgogIDIwMTAtMDUtMTM6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3AuYywgdWRwLmM6IHRhc2sgIzY5OTU6IEltcGxlbWVudCBTT19SRVVTRUFERFIgKGNvcnJlY3RseSksIGFkZGVkCiAgICBuZXcgb3B0aW9uIFNPX1JFVVNFX1JYVE9BTEwgdG8gcGFzcyByZWNlaXZlZCBVRFAgYnJvYWRjYXN0L211bHRpY2FzdAogICAgcGFja2V0cyB0byBtb3JlIHRoYW4gb25lIHBjYi4KCiAgMjAxMC0wNS0wMjogU2ltb24gR29sZHNjaG1pZHQKICAqIG5ldGJ1Zi5oLy5jLCBzb2NrZXRzLmMsIGFwaV9tc2cuYzogdXNlIGNoZWNrc3VtLW9uLWNvcHkgZm9yIHNlbmRpbmcKICAgIFVEUCBkYXRhIGZvciBMV0lQX05FVElGX1RYX1NJTkdMRV9QQlVGPT0xCgogIDIwMTAtMDQtMzA6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiB1ZHAuaC8uYywgcGJ1Zi5oLy5jOiB0YXNrICM2ODQ5OiBhZGRlZCB1ZHBfc2VuZChfdG8vX2lmKSBmdW5jdGlvbnMgdGhhdAogICAgdGFrZSBhIHByZWNhbGN1bGF0ZWQgY2hlY2tzdW0sIGFkZGVkIHBidWZfZmlsbF9jaGtzdW0oKSB0byBjb3B5IGRhdGEKICAgIGludG8gYSBwYnVmIGFuZCBhdCB0aGUgc2FtZSB0aW1lIGNhbGN1bGF0aW5nIHRoZSBjaGVja3N1bSBmb3IgdGhhdCBkYXRhCgogIDIwMTAtMDQtMjk6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBpcF9hZGRyLmgsIGV0aGFycC5oLy5jLCBhdXRvaXAuYzogQ3JlYXRlIG92ZXJyaWRhYmxlIG1hY3JvcyBmb3IgY29weWluZwogICAgMi1ieXRlLWFsaWduZWQgSVAgYWRkcmVzc2VzIGFuZCBNQUMgYWRkcmVzc2VzCgogIDIwMTAtMDQtMjg6IFBhdGNoIGJ5IEJpbGwgQXVlcmJhY2gKICAqIGlwLmM6IElubGluZSBnZW5lcmF0aW5nIElQIGNoZWNrc3VtIHRvIHNhdmUgYSBmdW5jdGlvbiBjYWxsCgogIDIwMTAtMDQtMTQ6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3BpcC5oLy5jLCB0aW1lcnMuYzogQWRkZWQgYW4gb3ZlcnJpZGFibGUgZGVmaW5lIHRvIGdldCBpbmZvcm1lZCB3aGVuIHRoZQogICAgdGNwaXBfdGhyZWFkIHByb2Nlc3NlcyBtZXNzYWdlcyBvciB0aW1lb3V0cyB0byBpbXBsZW1lbnQgYSB3YXRjaGRvZy4KCiAgMjAxMC0wMy0yODogU2ltb24gR29sZHNjaG1pZHQKICAqIGlwX2ZyYWcuYzogY3JlYXRlIGEgbmV3IChjb250aWd1b3VzKSBQQlVGX1JBTSBmb3IgZXZlcnkgb3V0Z29pbmcKICAgIGZyYWdtZW50IGlmIExXSVBfTkVUSUZfVFhfU0lOR0xFX1BCVUY9PTEKCiAgMjAxMC0wMy0yNzogU2ltb24gR29sZHNjaG1pZHQKICAqIGV0aGFycC5jOiBTcGVlZHVwIFRYIGJ5IG1vdmluZyBjb2RlIGZyb20gZmluZF9lbnRyeSB0byBldGhhcnBfb3V0cHV0LwogICAgZXRoYXJwX3F1ZXJ5IHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgZnVuY3Rpb24gY2FsbHMgKGluc3BpcmVkIGJ5CiAgICBwYXRjaCAjNzEzNSkuCgogIDIwMTAtMDMtMjA6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBvcHQuaCwgdGNwaXAuYy8uaDogQWRkZWQgYW4gb3B0aW9uIHRvIGRpc2FibGUgdGNwaXBfKHVuKXRpbWVvdXQgY29kZQogICAgc2luY2UgdGhlIGxpbmtlciBjYW5ub3QgZG8gdGhpcyBhdXRvbWF0aWNhbGx5IHRvIHNhdmUgc3BhY2UuCgogIDIwMTAtMDMtMjA6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBvcHQuaCwgZXRoYXJwLmMvLmg6IEFkZGVkIHN1cHBvcnQgZm9yIHN0YXRpYyBBUlAgdGFibGUgZW50cmllcwoKICAyMDEwLTAzLTE0OiBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwX2ltcGwuaCwgdGNwX291dC5jLCBpbmV0X2Noa3N1bS5oLy5jOiB0YXNrICM2ODQ5OiBDYWxjdWxhdGUgY2hlY2tzdW0KICAgIHdoZW4gY3JlYXRpbmcgVENQIHNlZ21lbnRzLCBub3Qgd2hlbiAocmUtKXRyYW5zbWl0dGluZyB0aGVtLgoKICAyMDEwLTAzLTA3OiBTaW1vbiBHb2xkc2NobWlkdAogICogc29ja2V0cy5jOiBidWcgIzI4Nzc1IChzZWxlY3QvZXZlbnRfY2FsbGJhY2s6IG9ubHkgY2hlY2sgc2VsZWN0X2NiX2xpc3QKICAgIG9uIGNoYW5nZSkgcGx1cyB1c2UgU1lTX0xJR0hUV0VJR0hUX1BST1QgdG8gcHJvdGVjdCB0aGUgc2VsZWN0IGNvZGUuCiAgICBUaGlzIHNob3VsZCBzcGVlZCB1cCByZWNlaXZpbmcgZGF0YSBvbiBzb2NrZXRzIGFzIHRoZSBzZWxlY3QgY29kZSBpbgogICAgZXZlbnRfY2FsbGJhY2sgaXMgb25seSBleGVjdXRlZCB3aGVuIHNlbGVjdCBpcyB3YWl0aW5nLgoKICAyMDEwLTAzLTA2OiBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwX291dC5jOiB0YXNrICM3MDEzIChDcmVhdGUgb3B0aW9uIHRvIGhhdmUgYWxsIHBhY2tldHMgZGVsaXZlcmVkIHRvCiAgICBuZXRpZi0+b3V0cHV0IGluIG9uZSBwaWVjZSk6IEFsd2F5cyBjb3B5IHRvIHRyeSB0byBjcmVhdGUgc2luZ2xlIHBidWZzCiAgICBpbiB0Y3Bfd3JpdGUuCgogIDIwMTAtMDMtMDY6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBhcGkuaCwgYXBpX2xpYi5jLCBzb2NrZXRzLmM6IHRhc2sgIzEwMTY3IChzb2NrZXRzOiBzcGVlZCB1cCBUQ1AgcmVjdgogICAgYnkgbm90IGFsbG9jYXRpbmcgYSBuZXRidWYpOiBhZGRlZCBmdW5jdGlvbiBuZXRjb25uX3JlY3ZfdGNwX3BidWYoKQogICAgZm9yIHRjcCBuZXRjb25ucyB0byByZWNlaXZlIHBidWZzLCBub3QgbmV0YnVmczsgdXNlIHRoYXQgZnVuY3Rpb24KICAgIGZvciB0Y3Agc29ja2V0cy4KCiAgMjAxMC0wMy0wNTogSmFrb2IgT2xlIFN0b2tsdW5kc2VuIC8gU2ltb24gR29sZHNjaG1pZHQKICAqIG9wdC5oLCB0Y3AuaCwgdGNwX2ltcGwuaCwgdGNwLmMsIHRjcF9pbi5jLCB0Y3Bfb3V0LmM6IHRhc2sgIzcwNDA6CiAgICBXb3JrIG9uIHRjcF9lbnF1ZXVlOiBEb24ndCB3YXN0ZSBtZW1vcnkgd2hlbiBjaGFpbmluZyBzZWdtZW50cywKICAgIGFkZGVkIG9wdGlvbiBUQ1BfT1ZFUlNJWkUgdG8gcHJldmVudCBjcmVhdGluZyBtYW55IHNtYWxsIHBidWZzIHdoZW4KICAgIGNhbGxpbmcgdGNwX3dyaXRlIHdpdGggbWFueSBzbWFsbCBibG9ja3Mgb2YgZGF0YS4gSW5zdGVhZCwgcGJ1ZnMgYXJlCiAgICBhbGxvY2F0ZWQgbGFyZ2VyIHRoYW4gbmVlZGVkIGFuZCB0aGUgc3BhY2UgaXMgdXNlZCBmb3IgbGF0ZXIgY2FsbHMgdG8KICAgIHRjcF93cml0ZS4KCiAgMjAxMC0wMi0yMTogU2ltb24gR29sZHNjaG1pZHQKICAqIHN0YXRzLmMvLmg6IEFkZGVkIGNvbnN0IGNoYXIqIG5hbWUgdG8gbWVtLSBhbmQgbWVtcC1zdGF0cyBmb3IgZWFzaWVyCiAgICBkZWJ1Z2dpbmcuCgogIDIwMTAtMDItMjE6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3AuaCAoYW5kIHVzYWdlcyksIGFkZGVkIHRjcF9pbXBsLmg6IFNwbGl0dGVkIEFQSSBhbmQgaW50ZXJuYWwKICAgIGltcGxlbWVudGF0aW9uIG9mIHRjcCB0byBtYWtlIEFQSSB1c2FnZSBjbGVhcmUgdG8gYXBwbGljYXRpb24gcHJvZ3JhbW1lcnMKCiAgMjAxMC0wMi0xNDogU2ltb24gR29sZHNjaG1pZHQvU3RlcGhhbmUgTGVzYWdlCiAgKiBpcF9hZGRyLmg6IEltcHJvdmVkIHNvbWUgZGVmaW5lcyB3b3JraW5nIG9uIGlwIGFkZHJlc3NlcywgYWRkZWQgZmFzdGVyCiAgICBtYWNybyB0byBjb3B5IGFkZHJlc3NlcyB0aGF0IGNhbm5vdCBiZSBOVUxMCgogIDIwMTAtMDItMTM6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBhcGkuaCwgYXBpX2xpYi5jLCBhcGlfbXNnLmMsIHNvY2tldHMuYzogdGFzayAjNzg2NSAoaW1wbGVtZW50IG5vbi0KICAgIGJsb2NraW5nIHNlbmQgb3BlcmF0aW9uKQoKICAyMDEwLTAyLTEyOiBTaW1vbiBHb2xkc2NobWlkdAogICogc29ja2V0cy5jLy5oOiBBZGRlZCBhIG1pbmltYWwgdmVyc2lvbiBvZiBwb3NpeCBmY3RsKCkgdG8gaGF2ZSBhCiAgICBzdGFuZGFyZGlzZWQgd2F5IHRvIHNldCBPX05PTkJMT0NLIGZvciBub25ibG9ja2luZyBzb2NrZXRzLgoKICAyMDEwLTAyLTEyOiBTaW1vbiBHb2xkc2NobWlkdAogICogZGhjcC5jLy5oLCBhdXRvaXAuYy8uaDogdGFzayAjMTAxMzkgKFByZWZlciBzdGF0aWNhbGx5IGFsbG9jYXRlZAogICAgbWVtb3J5KTogYWRkZWQgYXV0b2lwX3NldF9zdHJ1Y3QoKSBhbmQgZGhjcF9zZXRfc3RydWN0KCkgdG8gbGV0IGF1dG9pcAogICAgYW5kIGRoY3Agd29yayB3aXRoIHVzZXItYWxsb2NhdGVkIHN0cnVjdHMgaW5zdGVhZCBvZiBjYWxsaW4gbWVtX21hbGxvYwoKICAyMDEwLTAyLTEyOiBTaW1vbiBHb2xkc2NobWlkdC9KZWZmIEJhcmJlcgogICogdGNwLmMvaDogcGF0Y2ggIzY4NjUgKFNPX1JFVVNFQUREUiBmb3IgVENQKTogaWYgcGNiLnNvX29wdGlvbnMgaGFzCiAgICBTT0ZfUkVVU0VBRERSIHNldCwgYWxsb3cgYmluZGluZyB0byBlbmRwb2ludCBpbiBUSU1FX1dBSVQKCiAgMjAxMC0wMi0xMjogU2ltb24gR29sZHNjaG1pZHQKICAqIHN5cyBsYXllcjogdGFzayAjMTAxMzkgKFByZWZlciBzdGF0aWNhbGx5IGFsbG9jYXRlZCBtZW1vcnkpOiBjb252ZXJ0ZWQKICAgIG1ib3ggYW5kIHNlbWFwaG9yZSBmdW5jdGlvbnMgdG8gdGFrZSBwb2ludGVycyB0byBzeXNfbWJveF90L3N5c19zZW1fdDsKICAgIGNvbnZlcnRlZCBzeXNfbWJveF9uZXcvc3lzX3NlbV9uZXcgdG8gdGFrZSBwb2ludGVycyBhbmQgcmV0dXJuIGVycl90OwogICAgdGFzayAjNzIxMjogQWRkIE11dGV4IGNvbmNlcHQgaW4gc3lzX2FyY2ggKGRlZmluZSBMV0lQX0NPTVBBVF9NVVRFWAogICAgdG8gbGV0IHN5cy5oIHVzZSBiaW5hcnkgc2VtYXBob3JlcyBpbnN0ZWFkIG9mIG11dGV4ZXMgLSBhcyBiZWZvcmUpCgogIDIwMTAtMDItMDk6IFNpbW9uIEdvbGRzY2htaWR0IChTaW1vbiBLYWxsd2VpdCkKICAqIHRpbWVycy5jLy5oOiBBZGRlZCBmdW5jdGlvbiBzeXNfcmVzdGFydF90aW1lb3V0cygpIGZyb20gcGF0Y2ggIzcwODUKICAgIChSZXN0YXJ0IHN5c3RlbSB0aW1lb3V0IGhhbmRsaW5nKQoKICAyMDEwLTAyLTA5OiBTaW1vbiBHb2xkc2NobWlkdAogICogbmV0aWYuYy8uaCwgcmVtb3ZlZCBsb29waWYuYy8uaDogdGFzayAjMTAxNTMgKEludGVncmF0ZSBsb29waWYgaW50bwogICAgbmV0aWYuYykgLSBsb29waWYgZG9lcyBub3QgaGF2ZSB0byBiZSBjcmVhdGVkIGJ5IHRoZSBwb3J0IGFueSBtb3JlLAogICAganVzdCBkZWZpbmUgTFdJUF9IQVZFX0xPT1BJRiB0byAxLgoKICAyMDEwLTAyLTA4OiBTaW1vbiBHb2xkc2NobWlkdAogICogaW5ldC5oLCBpcF9hZGRyLmMvLmg6IEFkZGVkIHJlZW50cmFudCB2ZXJzaW9ucyBvZiBpbmV0X250b2EvaXBhZGRyX250b2EKICAgIGluZXRfbnRvYV9yL2lwYWRkcl9udG9hX3IKCiAgMjAxMC0wMi0wODogU2ltb24gR29sZHNjaG1pZHQKICAqIG5ldGlmLmg6IEFkZGVkIG5ldGlmX3MvZ2V0X2lnbXBfbWFjX2ZpbHRlcigpIG1hY3JvcwoKICAyMDEwLTAyLTA1OiBTaW1vbiBHb2xkc2NobWlkdAogICogbmV0aWYuaDogQWRkZWQgZnVuY3Rpb24tbGlrZSBtYWNyb3MgdG8gZ2V0L3NldCB0aGUgaG9zdG5hbWUgb24gYSBuZXRpZgoKICAyMDEwLTAyLTA0OiBTaW1vbiBHb2xkc2NobWlkdAogICogbmVhcmx5IGV2ZXJ5IGZpbGU6IFJlcGxhY2VkIHN0cnVjdCBpcF9hZGRyIGJ5IHR5cGVkZWYgaXBfYWRkcl90IHRvCiAgICBtYWtlIGNoYW5naW5nIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gYmVoaW5kIHRoZSB0eXBlZGVmIGVhc2llci4KCiAgMjAxMC0wMi0wMTogU2ltb24gR29sZHNjaG1pZHQKICAqIG9wdC5oLCBtZW1wX3N0ZC5oLCBkbnMuaCwgbmV0ZGIuYywgbWVtcC5jOiBMZXQgbmV0ZGIgdXNlIGEgbWVtcCBwb29sCiAgICBmb3IgYWxsb2NhdGluZyBtZW1vcnkgd2hlbiBnZXRhZGRyaW5mbygpIGlzIGNhbGxlZC4KCiAgMjAxMC0wMS0zMTogU2ltb24gR29sZHNjaG1pZHQKICAqIGRoY3AuaCwgZGhjcC5jOiBSZXdvcmtlZCB0aGUgY29kZSB0aGF0IHBhcnNlcyBESENQIG9wdGlvbnM6IHBhcnNlCiAgICB0aGVtIG9uY2UgaW5zdGVhZCBvZiBwYXJzaW5nIGZvciBldmVyeSBvcHRpb24uIFRoaXMgYWxzbyByZW1vdmVzCiAgICB0aGUgbmVlZCBmb3IgbWVtX21hbGxvYyBmcm9tIGRoY3BfcmVjdiBhbmQgbWFrZXMgaXQgcG9zc2libGUgdG8KICAgIGNvcnJlY3RseSByZXRyaWV2ZSB0aGUgQk9PVFAgZmlsZS4KCiAgMjAxMC0wMS0zMDogc2ltb24gR29sZHNjaG1pZHQKICAqIHNvY2tldHMuYzogVXNlIFNZU19MSUdIVFdFSUdIVF9QUk9UIGluc3RlYWQgb2YgYSBzZW1hcGhvcmUgdG8gcHJvdGVjdAogICAgdGhlIHNvY2tldHMgYXJyYXkuCgogIDIwMTAtMDEtMjk6IFNpbW9uIEdvbGRzY2htaWR0IChwYXRjaCBieSBMYXVyYSBHYXJyZXR0KQogICogYXBpLmgsIGFwaV9tc2cuYywgc29ja2V0cy5jOiBBZGRlZCBleGNlcHQgc2V0IHN1cHBvcnQgaW4gc2VsZWN0CiAgICAocGF0Y2ggIzY4NjApCgogIDIwMTAtMDEtMjk6IFNpbW9uIEdvbGRzY2htaWR0IChwYXRjaCBieSBMYXVyYSBHYXJyZXR0KQogICogYXBpLmgsIHNvY2tldHMuaCwgZXJyLmgsIGFwaV9saWIuYywgYXBpX21zZy5jLCBzb2NrZXRzLmMsIGVyci5jOgogICAgQWRkIG5vbi1ibG9ja2luZyBzdXBwb3J0IGZvciBjb25uZWN0IChwYXJ0bHkgZnJvbSBwYXRjaCAjNjg2MCksCiAgICBwbHVzIG1hbnkgY2xlYW51cHMgaW4gc29ja2V0ICYgbmV0Y29ubiBBUEkuCgogIDIwMTAtMDEtMjc6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBvcHQuaCwgdGNwLmgsIGluaXQuYywgYXBpX21zZy5jOiBBZGRlZCBUQ1BfU05EUVVFVUVMT1dBVCBjb3JyZXNwb25kaW5nCiAgICB0byBUQ1BfU05ETE9XQVQgYW5kIGFkZGVkIHRjcF9zbmRxdWV1ZWxlbigpIC0gdGhpcyBmaXhlcyBidWcgIzI4NjA1CgogIDIwMTAtMDEtMjY6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBzbm1wOiBVc2UgbWVtcCBwb29scyBmb3Igc25tcCBpbnN0ZWFkIG9mIHRoZSBoZWFwOyBhZGRlZCA0IG5ldyBwb29scy4KCiAgMjAxMC0wMS0xNDogU2ltb24gR29sZHNjaG1pZHQKICAqIHBwcC5jLy5oOiBGaXhlZCBidWcgIzI3ODU2OiBQUFA6IFNldCBuZXRpZiBsaW5rLSBhbmQgc3RhdHVzLWNhbGxiYWNrCiAgICBieSBhZGRpbmcgcHBwX3NldF9uZXRpZl9zdGF0dXNjYWxsYmFjaygpL3BwcF9zZXRfbmV0aWZfbGlua2NhbGxiYWNrKCkKCiAgMjAxMC0wMS0xMzogU2ltb24gR29sZHNjaG1pZHQKICAqIG1lbS5jOiBUaGUgaGVhcCBub3cgbWF5IGJlIG1vdmVkIHRvIHVzZXItZGVmaW5lZCBtZW1vcnkgYnkgZGVmaW5pbmcKICAgIExXSVBfUkFNX0hFQVBfUE9JTlRFUiBhcyBhIHZvaWQgcG9pbnRlciB0byB0aGF0IG1lbW9yeSdzIGFkZHJlc3MKICAgIChwYXRjaCAjNjk2NiBhbmQgYnVnICMyNjEzMykKCiAgMjAxMC0wMS0xMDogU2ltb24gR29sZHNjaG1pZHQgKEJpbGwgQXVlcmJhY2gpCiAgKiBvcHQuaCwgbWVtcC5jOiBwYXRjaCAjNjgyMiAoQWRkIG9wdGlvbiB0byBwbGFjZSBtZW1vcnkgcG9vbHMgaW4KICAgIHNlcGFyYXRlIGFycmF5cykKCiAgMjAxMC0wMS0xMDogU2ltb24gR29sZHNjaG1pZHQKICAqIGluaXQuYywgaWdtcC5jOiBwYXRjaCAjNjQ2MyAoSUdNUCAtIEFkZGluZyBSYW5kb20gRGVsYXkpOiBhZGRlZCBkZWZpbmUKICAgIExXSVBfUkFORCgpIGZvciBsd2lwLXdpZGUgcmFuZG9taXphdGlvbiAodG8gYmUgZGVmaW5lZCBpbiBjYy5oKQoKICAyMDA5LTEyLTMxOiBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwaXAuYywgaW5pdC5jLCBtZW1wLmMsIHN5cy5jLCBtZW1wX3N0ZC5oLCBzeXMuaCwgdGNwaXAuaAogICAgYWRkZWQgdGltZXJzLmMvLmg6IFNlcGFyYXRlZCB0aW1lciBpbXBsZW1lbnRhdGlvbiBmcm9tIHNlbWFwaG9yZS9tYm94CiAgICBpbXBsZW1lbnRhdGlvbiwgbW92ZWQgdGltZXIgaW1wbGVtZW50YXRpb24gdG8gdGltZXJzLmMvLmgsIHRpbWVycyBhcmUKICAgIG5vdyBvbmx5IGNhbGxlZCBmcm9tIHRjcGlwX3RocmVhZCBvciBieSBleHBsaWNpdGx5IGNoZWNraW5nIHRoZW0uCiAgICAoVEFTSyM3MjM1KQoKICAyMDA5LTEyLTI3OiBTaW1vbiBHb2xkc2NobWlkdAogICogb3B0LmgsIGV0aGFycC5oLy5jLCBpbml0LmMsIHRjcGlwLmM6IEFkZGVkIGFuIGFkZGl0aW9uYWwgb3B0aW9uCiAgICBMV0lQX0VUSEVSTkVUIHRvIHN1cHBvcnQgZXRoZXJuZXQgd2l0aG91dCBBUlAgKG5lY2Vzc2FyeSBmb3IgcHVyZSBQUFBvRSkKCgogICsrIEJ1Z2ZpeGVzOgoKICAyMDExLTA0LTIwOiBTaW1vbiBHb2xkc2NobWlkdAogICogc3lzX2FyY2gudHh0OiBzeXNfYXJjaF90aW1lb3V0cygpIGlzIG5vdCBuZWVkZWQgYW55IG1vcmUuCgogIDIwMTEtMDQtMTM6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3AuYywgdWRwLmM6IEZpeGVkIGJ1ZyAjMzMwNDggKEJhZCByYW5nZSBmb3IgSVAgc291cmNlIHBvcnQgbnVtYmVycykgYnkKICAgIHVzaW5nIHBvcnRzIGluIHRoZSBJQU5BIHByaXZhdGUvZHluYW1pYyByYW5nZSAoNDkxNTIgdGhyb3VnaCA2NTUzNSkuCgogIDIwMTEtMDMtMjk6IFNpbW9uIEdvbGRzY2htaWR0LCBwYXRjaCBieSBFbWlsIExodW5nZGFobDoKICAqIGV0aGFycC5oLy5jOiBGaXhlZCBicm9rZW4gVkxBTiBzdXBwb3J0LgoKICAyMDExLTAzLTI3OiBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwLmM6IEZpeGVkIGJ1ZyAjMzI5MjYgKFRDUF9STVYoJnRjcF9ib3VuZF9wY2JzKSBpcyBjYWxsZWQgb24gdW5ib3VuZCB0Y3AKICAgIHBjYnMpIGJ5IGNoZWNraW5nIGlmIHRoZSBwY2Igd2FzIGJvdW5kIChsb2NhbF9wb3J0ICE9IDApLgoKICAyMDExLTAzLTI3OiBTaW1vbiBHb2xkc2NobWlkdAogICogcHBwLmM6IEZpeGVkIGJ1ZyAjMzIyODAgKHBwcDogYSBwYnVmIGlzIGZyZWVkIHR3aWNlKQoKICAyMDExLTAzLTI3OiBTaW1vbiBHb2xkc2NobWlkdAogICogc29ja2V0cy5jOiBGaXhlZCBidWcgIzMyOTA2OiBsd2lwX2Nvbm5lY3QrbHdpcF9zZW5kIGRpZCBub3Qgd29yayBmb3IgdWRwIGFuZAogICAgcmF3IHBjYnMgd2l0aCBMV0lQX1RDUElQX0NPUkVfTE9DS0lORz09MS4KICAKICAyMDExLTAzLTI3OiBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwX291dC5jOiBGaXhlZCBidWcgIzMyODIwIChPdXRnb2luZyBUQ1AgY29ubmVjdGlvbnMgY3JlYXRlZCBiZWZvcmUgcm91dGUKICAgIGlzIHByZXNlbnQgbmV2ZXIgdGltZXMgb3V0KSBieSBzdGFydGluZyByZXRyYW5zbWlzc2lvbiB0aW1lciBiZWZvcmUgY2hlY2tpbmcKICAgIHJvdXRlLgoKICAyMDExLTAzLTIyOiBTaW1vbiBHb2xkc2NobWlkdAogICogcHBwLmM6IEZpeGVkIGJ1ZyAjMzI2NDggKFBQUCBjb2RlIGNyYXNoZXMgd2hlbiB0ZXJtaW5hdGluZyBhIGxpbmspIGJ5IG9ubHkKICAgIGNhbGxpbmcgc2lvX3JlYWRfYWJvcnQoKSBpZiB0aGUgZmlsZSBkZXNjcmlwdG9yIGlzIHZhbGlkLgoKICAyMDExLTAzLTE0OiBTaW1vbiBHb2xkc2NobWlkdAogICogZXJyLmgvLmMsIHNvY2tldHMuYywgYXBpX21zZy5jOiBmaXhlZCBidWcgIzMxNzQ4IChDYWxsaW5nIG5vbi1ibG9ja2luZyBjb25uZWN0CiAgICBtb3JlIHRoYW4gb25jZSBjYW4gcmVuZGVyIGEgc29ja2V0IHVzZWxlc3MpIHNpbmNlIGl0IG1haW5seSBpbnZvbHZlcyBjaGFuZ2luZwogICAgIkZBVEFMIiBjbGFzc2lmaWNhdGlvbiBvZiBlcnJvciBjb2RlczogRVJSX1VTRSBhbmQgRVJSX0lTQ09OTiBqdXN0IGFyZW4ndCBmYXRhbC4KCiAgMjAxMS0wMy0xMzogU2ltb24gR29sZHNjaG1pZHQKICAqIHNvY2tldHMuYzogZml4ZWQgYnVnICMzMjc2OSAoRVNIVVRET1dOIGlzIGxpbnV4LXNwZWNpZmljKSBieSBmaXhpbmcKICAgIGVycl90b19lcnJub190YWJsZSAoRVJSX0NMU0Q6IEVOT1RDT05OIGluc3RlYWQgb2YgRVNIVVRET1dOKSwgRVJSX0lTQ09OTjoKICAgIHVzZSBFQUxSQURZIGluc3RlYWQgb2YgLTEKCiAgMjAxMS0wMy0xMzogU2ltb24gR29sZHNjaG1pZHQKICAqIGFwaV9saWIuYzogbmV0Y29ubl9hY2NlcHQ6IHJldHVybiBFUlJfQUJSVCBpbnN0ZWFkIG9mIEVSUl9DTFNEIGlmIHRoZQogICAgY29ubmVjdGlvbiBoYXMgYmVlbiBhYm9ydGVkIGJ5IGVycl90Y3AgKHNpbmNlIHRoaXMgaXMgbm90IGEgbm9ybWFsIGNsb3NpbmcKICAgIHByb2NlZHVyZSkuCgogIDIwMTEtMDMtMTM6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3AuYzogdGNwX2JpbmQ6IHJldHVybiBFUlJfVkFMIGluc3RlYWQgb2YgRVJSX0lTQ09OTiB3aGVuIHRyeWluZyB0byBiaW5kCiAgICB3aXRoIHBjYi0+c3RhdGUgIT0gQ0xPU0VECgogIDIwMTEtMDItMTc6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiByYXdhcGkudHh0OiBGaXhlZCBidWcgIzMyNTYxIHRjcF9wb2xsIGFyZ3VtZW50IGRlZmluaXRpb24gb3V0LW9mLW9yZGVyIGluCiAgICBkb2N1bWVudGF0aW9uCgogIDIwMTEtMDItMTc6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBtYW55IGZpbGVzOiBBZGRlZCBtaXNzaW5nIFUvVUwgbW9kaWZpZXJzIHRvIGZpeCAxNi1iaXQtYXJjaCBwb3J0YWJpbGl0eS4KCiAgMjAxMS0wMS0yNDogU2ltb24gR29sZHNjaG1pZHQKICAqIHNvY2tldHMuYzogRml4ZWQgYnVnICMzMTc0MTogbHdpcF9zZWxlY3Qgc2VlbXMgdG8gaGF2ZSB0aHJlYWRpbmcgcHJvYmxlbXMKCiAgMjAxMC0xMi0wMjogU2ltb24gR29sZHNjaG1pZHQKICAqIGVyci5oOiBGaXhlZCBFUlJfSVNfRkFUQUwgc28gdGhhdCBFUlJfV09VTERCTE9DSyBpcyBub3QgZmF0YWwuCgogIDIwMTAtMTEtMjM6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBhcGkuaCwgYXBpX2xpYi5jLCBhcGlfbXNnLmMsIHNvY2tldHMuYzogbmV0Y29ubi5yZWN2X2F2YWlsIGlzIG9ubHkgdXNlZCBmb3IKICAgIExXSVBfU09fUkNWQlVGIGFuZCBpb2N0bC9GSU9OUkVBRC4KCiAgMjAxMC0xMS0yMzogU2ltb24gR29sZHNjaG1pZHQKICAqIGV0aGFycC5jOiBGaXhlZCBidWcgIzMxNzIwOiBBUlAtcXVldWVpbmc6IFJGQyAxMTIyIHJlY29tbWVuZHMgdG8gcXVldWUgYXQKICAgIGxlYXN0IDEgcGFja2V0IC0+IEFSUF9RVUVVRUlORz09MCBub3cgcXVldWVzIHRoZSBtb3N0IHJlY2VudCBwYWNrZXQuCgogIDIwMTAtMTEtMjM6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3BfaW4uYzogRml4ZWQgYnVnICMzMDU3NzogdGNwX2lucHV0OiBkb24ndCBkaXNjYXJkIEFDSy1vbmx5IHBhY2tldHMgYWZ0ZXIKICAgIHJlZnVzaW5nICdyZWZ1c2VkX2RhdGEnIGFnYWluLgogIAogIDIwMTAtMTEtMjI6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBzb2NrZXRzLmM6IEZpeGVkIGJ1ZyAjMzE1OTA6IGdldHNvY2tvcHQoLi4uIFNPX0VSUk9SIC4uLikgZ2l2ZXMgRUlOUFJPR1JFU1MKICAgIGFmdGVyIGEgc3VjY2Vzc2Z1bCBub25ibG9ja2luZyBjb25uZWN0aW9uLgoKICAyMDEwLTExLTIyOiBTaW1vbiBHb2xkc2NobWlkdAogICogZXRoYXJwLmM6IEZpeGVkIGJ1ZyAjMzE3MjI6IElQIHBhY2tldHMgc2VudCB3aXRoIGFuIEF1dG9JUCBzb3VyY2UgYWRkcgogICAgbXVzdCBiZSBzZW50IGxpbmstbG9jYWwKCiAgMjAxMC0xMS0yMjogU2ltb24gR29sZHNjaG1pZHQKICAqIHRpbWVycy5jOiBwYXRjaCAjNzMyOTogdGNwX3RpbWVyX25lZWRlZCBwcm90b3R5cGUgd2FzIGlmZGVmJ2VkIG91dCBmb3IKICAgIExXSVBfVElNRVJTPT0wCgogIDIwMTAtMTEtMjA6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBzb2NrZXRzLmM6IEZpeGVkIGJ1ZyAjMzExNzA6IGx3aXBfc2V0c29ja29wdCgpIGRvZXMgbm90IHNldCBzb2NrZXQgbnVtYmVyCgogIDIwMTAtMTEtMjA6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBzb2NrZXRzLmg6IEZpeGVkIGJ1ZyAjMzEzMDQ6IENoYW5nZWQgU0hVVF9SRCwgU0hVVF9XUiBhbmQgU0hVVF9SRFdSIHRvCiAgICByZXNlbWJsZSBvdGhlciBzdGFja3MuCgogIDIwMTAtMTEtMjA6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBkbnMuYzogRml4ZWQgYnVnICMzMTUzNTogVENQX1NORF9RVUVVRUxFTiBtdXN0IGJlIGF0IGxlYXN0IDIgb3IgZWxzZQogICAgbm8tY29weSBUQ1Agd3JpdGVzIHdpbGwgbmV2ZXIgc3VjY2VlZC4KCiAgMjAxMC0xMS0yMDogU2ltb24gR29sZHNjaG1pZHQKICAqIGRucy5jOiBGaXhlZCBidWcgIzMxNzAxOiBFcnJvciByZXR1cm4gdmFsdWUgZnJvbSBkbnNfZ2V0aG9zdGJ5bmFtZSgpIGRvZXMKICAgIG5vdCBtYXRjaCBkb2N1bWVudGF0aW9uOiByZXR1cm4gRVJSX0FSRyBpbnN0ZWFkIG9mIEVSUl9WQUwgaWYgbm90CiAgICBpbml0aWFsaXplZCBvciB3cm9uZyBhcmd1bWVudC4KCiAgMjAxMC0xMC0yMDogU2ltb24gR29sZHNjaG1pZHQKICAqIHNvY2tldHMuaDogRml4ZWQgYnVnICMzMTM4NTogc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikgaXMgMzAgYnV0IHNob3VsZCBiZSAxNgoKICAyMDEwLTEwLTA1OiBTaW1vbiBHb2xkc2NobWlkdAogICogZGhjcC5jOiBPbmNlIGFnYWluIGZpeGVkICMzMDAzODogREhDUC9BdXRvSVAgY29vcGVyYXRpb24gZmFpbGVkIHdoZW4KICAgIHJlcGx1Z2dpbmcgdGhlIG5ldHdvcmsgY2FibGUgYWZ0ZXIgYW4gQXV0b0lQIGFkZHJlc3Mgd2FzIGFzc2lnbmVkLgoKICAyMDEwLTA4LTEwOiBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwLmM6IEZpeGVkIGJ1ZyAjMzA3Mjg6IHRjcF9uZXdfcG9ydCgpIGRpZCBub3QgY2hlY2sgbGlzdGVuIHBjYnMKCiAgMjAxMC0wOC0wMzogU2ltb24gR29sZHNjaG1pZHQKICAqIHVkcC5jLCByYXcuYzogRG9uJ3QgY2hhaW4gZW1wdHkgcGJ1ZnMgd2hlbiBzZW5kaW5nIHRoZW0gKGZpeGVzIGJ1ZyAjMzA2MjUpCgogIDIwMTAtMDgtMDE6IFNpbW9uIEdvbGRzY2htaWR0IChwYXRjaCBieSBHcmVnIFJlbmRhKQogICogcHBwLmM6IEFwcGxpZWQgcGF0Y2ggIzcyNjQgKFBQUCBwcm90b2NvbHMgYXJlIHJlamVjdGVkIGluY29ycmVjdGx5IG9uIGJpZwogICAgZW5kaWFuIGFyY2hpdGVjdHVyZXMpCiAgCiAgMjAxMC0wNy0yODogU2ltb24gR29sZHNjaG1pZHQKICAqIGFwaV9saWIuYywgYXBpX21zZy5jLCBzb2NrZXRzLmMsIG1pYjIuYzogRml4ZWQgY29tcGlsYXRpb24gd2l0aCBUQ1Agb3IgVURQCiAgICBkaXNhYmxlZC4KICAKICAyMDEwLTA3LTI3OiBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwLmM6IEZpeGVkIGJ1ZyAjMzA1NjUgKHRjcF9jb25uZWN0KCkgY2hlY2sgYm91bmQgbGlzdCk6IHRoYXQgY2hlY2sgZGlkIG5vCiAgICBoYXJtIGJ1dCBuZXZlciBkaWQgYW55dGhpbmcKICAKICAyMDEwLTA3LTIxOiBTaW1vbiBHb2xkc2NobWlkdAogICogaXAuYzogRml4ZWQgaW52YWxpZCBmaXggZm9yIGJ1ZyAjMzA0MDIgKENIRUNLU1VNX0dFTl9JUF9JTkxJTkUgZG9lcyBub3QKICAgIGFkZCBJUCBvcHRpb25zKQoKICAyMDEwLTA3LTE2OiBLaWVyYW4gTWFuc2xleQogICogbXNnX2luLmM6IEZpeGVkIFNOTVAgQVNOIGNvbnN0YW50IGRlZmluZXMgdG8gbm90IHVzZSAhIG9wZXJhdG9yIAoKICAyMDEwLTA3LTEwOiBTaW1vbiBHb2xkc2NobWlkdAogICogaXAuYzogRml4ZWQgYnVnICMzMDQwMjogQ0hFQ0tTVU1fR0VOX0lQX0lOTElORSBkb2VzIG5vdCBhZGQgSVAgb3B0aW9ucwoKICAyMDEwLTA2LTMwOiBTaW1vbiBHb2xkc2NobWlkdAogICogYXBpX21zZy5jOiBmaXhlZCBidWcgIzMwMzAwIChzaHV0ZG93biBwYXJhbWV0ZXIgd2FzIG5vdCBpbml0aWFsaXplZCBpbgogICAgbmV0Y29ubl9kZWxldGUpCgogIDIwMTAtMDYtMjg6IEtpZXJhbiBNYW5zbGV5CiAgKiB0aW1lcnMuYyByZW1vdmUgdW5wb3J0YWJsZSBwcmludGluZyBvZiBDIGZ1bmN0aW9uIHBvaW50ZXJzCgogIDIwMTAtMDYtMjQ6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBpbml0LmMsIHRpbWVycy5jLy5oLCBvcHQuaCwgbWVtcF9zdGQuaDogRnJvbSBwYXRjaCAjNzIyMTogYWRkZWQgZmxhZwogICAgTk9fU1lTX05PX1RJTUVSUyB0byBkcm9wIHRpbWVyIHN1cHBvcnQgZm9yIE5PX1NZUz09MSBmb3IgZWFzaWVyIHVwZ3JhZGluZwoKICAyMDEwLTA2LTI0OiBTaW1vbiBHb2xkc2NobWlkdAogICogYXBpKF9saWIpLmMvLmgsIGFwaV9tc2cuYy8uaCwgc29ja2V0cy5jLy5oOiBGaXhlZCBidWcgIzEwMDg4OiBDb3JyZWN0bHkKICAgIGltcGxlbWVudGVkIHNodXRkb3duIGF0IHNvY2tldCBsZXZlbC4KCiAgMjAxMC0wNi0yMTogU2ltb24gR29sZHNjaG1pZHQKICAqIHBidWYuYy8uaCwgaXBfZnJhZy5jLy5oLCBvcHQuaCwgbWVtcF9zdGQuaDogRml4ZWQgYnVnICMyOTM2MSAoaXBfZnJhZyBoYXMKICAgIHByb2JsZW1zIHdpdGggemVyby1jb3B5IERNQSBNQUNzKSBieSBhZGRpbmcgY3VzdG9tIHBidWZzIGFuZCBpbXBsZW1lbnRpbmcKICAgIGN1c3RvbSBwYnVmcyB0aGF0IHJlZmVyZW5jZSBvdGhlciAob3JpZ2luYWwpIHBidWZzLiBBZGRpdGlvbmFsbHkgc2V0CiAgICBJUF9GUkFHX1VTRVNfU1RBVElDX0JVRj0wIGFzIGRlZmF1bHQgdG8gYmUgb24gdGhlIHNhZmUgc2lkZS4KCiAgMjAxMC0wNi0xNTogU2ltb24gR29sZHNjaG1pZHQKICAqIGRoY3AuYzogRml4ZWQgYnVnICMyOTk3MDogREhDUCBlbmRpYW4gaXNzdWUgcGFyc2luZyBvcHRpb24gcmVzcG9uc2VzCgogIDIwMTAtMDYtMTQ6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBhdXRvaXAuYzogRml4ZWQgYnVnICMzMDAzOTogQXV0b0lQIGRvZXMgbm90IHJldXNlIHByZXZpb3VzIGFkZHJlc3NlcwoKICAyMDEwLTA2LTEyOiBTaW1vbiBHb2xkc2NobWlkdAogICogZGhjcC5jOiBGaXhlZCBidWcgIzMwMDM4OiBkaGNwX25ldHdvcmtfY2hhbmdlZCBkb2Vzbid0IHJlc2V0IEFVVE9JUCBjb29wCiAgICBzdGF0ZQoKICAyMDEwLTA1LTE3OiBTaW1vbiBHb2xkc2NobWlkdAogICogbmV0ZGIuYzogQ29ycmVjdGx5IE5VTEwtdGVybWluYXRlIGhfYWRkcl9saXN0CgogIDIwMTAtMDUtMTY6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBkZWYuaC8uYzogY2hhbmdlZCB0aGUgc2VtYW50aWNzIG9mIExXSVBfUFJFRklYX0JZVEVPUkRFUl9GVU5DUyB0byBwcmV2ZW50CiAgICAic3ltYm9sIGFscmVhZHkgZGVmaW5lZCIgaS5lLiB3aGVuIGxpbmtpbmcgdG8gd2luc29jawoKICAyMDEwLTA1LTA1OiBTaW1vbiBHb2xkc2NobWlkdAogICogZGVmLmgsIHRpbWVycy5jOiBGaXhlZCBidWcgIzI5NzY5IChzeXNfY2hlY2tfdGltZW91dHM6IHN5c19ub3coKSBtYXkKICAgIG92ZXJmbG93KQoKICAyMDEwLTA0LTIxOiBTaW1vbiBHb2xkc2NobWlkdAogICogYXBpX21zZy5jOiBGaXhlZCBidWcgIzI5NjE3IChzb21ldGltZSBjYXVzZSBzdGFsbCBvbiBkZWxldGUgbGlzdGVuaW5nCiAgICBjb25uZWN0aW9uKQoKICAyMDEwLTAzLTI4OiBMdWNhIENlcmVzb2xpCiAgKiBpcF9hZGRyLmMvLmg6IHBhdGNoICM3MTQzOiBBZGQgYSBmZXcgbWlzc2luZyBjb25zdCBxdWFsaWZpZXJzCgogIDIwMTAtMDMtMjc6IEx1Y2EgQ2VyZXNvbGkKICAqIG1pYjIuYzogcGF0Y2ggIzcxMzA6IHJlbW92ZSBtZWFuaW5nbGVzcyBjb25zdCBxdWFsaWZpZXJzCgogIDIwMTAtMDMtMjY6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3Bfb3V0LmM6IE1ha2UgTFdJUF9ORVRJRl9UWF9TSU5HTEVfUEJVRiB3b3JrIGZvciBUQ1AsIHRvbwoKICAyMDEwLTAzLTI2OiBTaW1vbiBHb2xkc2NobWlkdAogICogdmFyaW91cyBmaWxlczogRml4ZWQgY29tcGlsaW5nIHdpdGggZGlmZmVyZW50IG9wdGlvbnMgZGlzYWJsZWQgKFRDUC9VRFApLAogICAgdHJpZ2dlcmVkIGJ5IGJ1ZyAjMjkzNDU7IGRvbid0IGFsbG9jYXRlIGFjY2VwdG1ib3ggaWYgTFdJUF9UQ1AgaXMgZGlzYWJsZWQKCiAgMjAxMC0wMy0yNTogU2ltb24gR29sZHNjaG1pZHQKICAqIHNvY2tldHMuYzogRml4ZWQgYnVnICMyOTMzMjogbHdpcF9zZWxlY3QoKSBwcm9jZXNzZXMgcmVhZHNldCBpbmNvcnJlY3RseQoKICAyMDEwLTAzLTI1OiBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwX2luLmMsIHRlc3RfdGNwX29vcy5jOiBGaXhlZCBidWcgIzI5MDgwOiBDb3JyZWN0bHkgaGFuZGxlIHJlbW90ZSBzaWRlCiAgICBvdmVycnVubmluZyBvdXIgcmN2X3duZCBpbiBvb3NlcSBjYXNlLgoKICAyMDEwLTAzLTIyOiBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwLmM6IHRjcF9saXN0ZW4oKSBkaWQgbm90IGNvcHkgdGhlIHBjYidzIHByaW8uCgogIDIwMTAtMDMtMTk6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBzbm1wX21zZy5jOiBGaXhlZCBidWcgIzI5MjU2OiBTTk1QIFRyYXAgYWRkcmVzcyB3YXMgbm90IGNvcnJlY3RseSBzZXQKCiAgMjAxMC0wMy0xNDogU2ltb24gR29sZHNjaG1pZHQKICAqIG9wdC5oLCBldGhhcnAuaDogRml4ZWQgYnVnICMyOTE0OCAoSW5jb3JyZWN0IFBCVUZfUE9PTF9CVUZTSVpFIGZvciBwb3J0cwogICAgd2hlcmUgRVRIX1BBRF9TSVpFID4gMCkgYnkgbW92aW5nIGRlZmluaXRpb24gb2YgRVRIX1BBRF9TSVpFIHRvIG9wdC5oCiAgICBhbmQgYmFzaW5nIFBCVUZfTElOS19ITEVOIG9uIGl0LgoKICAyMDEwLTAzLTA4OiBTaW1vbiBHb2xkc2NobWlkdAogICogbmV0aWYuYywgaXB2NC9pcC5jOiB0YXNrICMxMDI0MSAoQXV0b0lQOiBkb24ndCBicmVhayBleGlzdGluZyBjb25uZWN0aW9ucwogICAgd2hlbiBhc3NpZ2luZyByb3V0YWJsZSBhZGRyZXNzKTogd2hlbiBjaGVja2luZyBpbmNvbWluZyBwYWNrZXRzIGFuZAogICAgYWJvcnRpbmcgZXhpc3RpbmcgY29ubmVjdGlvbiBvbiBhZGRyZXNzIGNoYW5nZSwgZmlsdGVyIG91dCBsaW5rLWxvY2FsCiAgICBhZGRyZXNzZXMuCgogIDIwMTAtMDMtMDY6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBzb2NrZXRzLmM6IEZpeGVkIExXSVBfTkVUSUZfVFhfU0lOR0xFX1BCVUYgZm9yIExXSVBfVENQSVBfQ09SRV9MT0NLSU5HCgogIDIwMTAtMDMtMDY6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBpcHY0L2lwLmM6IERvbid0IHRyeSB0byBmb3J3YXJkIGxpbmstbG9jYWwgYWRkcmVzc2VzCgogIDIwMTAtMDMtMDY6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBldGhhcnAuYzogRml4ZWQgYnVnICMyOTA4NzogZXRoYXJwOiBkb24ndCBzZW5kIHBhY2tldHMgZm9yIExpbmtMb2NhbC0KICAgIGFkZHJlc3NlcyB0byBndwoKICAyMDEwLTAzLTA1OiBTaW1vbiBHb2xkc2NobWlkdAogICogZGhjcC5jOiBGaXhlZCBidWcgIzI5MDcyOiBDb3JyZWN0bHkgc2V0IGNpYWRkciBiYXNlZCBvbiBtZXNzYWdlLXR5cGUKICAgIGFuZCBzdGF0ZS4KCiAgMjAxMC0wMy0wNTogU2ltb24gR29sZHNjaG1pZHQKICAqIGFwaV9tc2cuYzogQ29ycmVjdGx5IHNldCBUQ1BfV1JJVEVfRkxBR19NT1JFIHdoZW4gbmV0Y29ubl93cml0ZSBpcyBzcGxpdAogICAgaW50byBtdWx0aXBsZSBjYWxscyB0byB0Y3Bfd3JpdGUuICAgIAoKICAyMDEwLTAyLTIxOiBTaW1vbiBHb2xkc2NobWlkdAogICogb3B0LmgsIG1lbS5oLCBkbnMuYzogdGFzayAjMTAxNDA6IFJlbW92ZSBETlNfVVNFU19TVEFUSUNfQlVGIChrZWVwCiAgICB0aGUgaW1wbGVtZW50YXRpb24gb2YgRE5TX1VTRVNfU1RBVElDX0JVRj09MSkKCiAgMjAxMC0wMi0yMDogU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcC5oLCB0Y3AuYywgdGNwX2luLmMsIHRjcF9vdXQuYzogVGFzayAjMTAwODg6IENvcnJlY3RseSBpbXBsZW1lbnQKICAgIGNsb3NlKCkgdnMuIHNodXRkb3duKCkuIE5vdyB0aGUgYXBwbGljYXRpb24gZG9lcyBub3QgZ2V0IGFueSBtb3JlCiAgICByZWN2IGNhbGxiYWNrcyBhZnRlciBjYWxsaW5nIHRjcF9jbG9zZSgpLiBBZGRlZCB0Y3Bfc2h1dGRvd24oKS4KCiAgMjAxMC0wMi0xOTogU2ltb24gR29sZHNjaG1pZHQKICAqIG1lbS5jLy5oLCBwYnVmLmM6IFJlbmFtZWQgbWVtX3JlYWxsb2MoKSB0byBtZW1fdHJpbSgpIHRvIHByZXZlbnQKICAgIGNvbmZ1c2lvbiB3aXRoIHJlYWxsb2MoKQoKICAyMDEwLTAyLTE1OiBTaW1vbiBHb2xkc2NobWlkdC9TdGVwaGFuZSBMZXNhZ2UKICAqIG5ldGlmLmMvLmg6IExpbmsgc3RhdHVzIGRvZXMgbm90IGRlcGVuZCBvbiBMV0lQX05FVElGX0xJTktfQ0FMTEJBQ0sKICAgIChmaXhlcyBidWcgIzI4ODk5KQoKICAyMDEwLTAyLTE0OiBTaW1vbiBHb2xkc2NobWlkdAogICogbmV0aWYuYzogRml4ZWQgYnVnICMyODg3NyAoRHVwbGljYXRlIEFSUCBncmF0dWl0b3VzIHBhY2tldCB3aXRoCiAgICBMV0lQX05FVElGX0xJTktfQ0FMTEJBQ0sgc2V0IG9uKSBieSBvbmx5IHNlbmRpbmcgaWYgYm90aCBsaW5rLSBhbmQKICAgIGFkbWluLXN0YXR1cyBvZiBhIG5ldGlmIGFyZSB1cAoKICAyMDEwLTAyLTE0OiBTaW1vbiBHb2xkc2NobWlkdAogICogb3B0Lmg6IERpc2FibGUgRVRIQVJQX1RSVVNUX0lQX01BQyBieSBkZWZhdWx0IHNpbmNlIGl0IHNsb3dzIGRvd24gcGFja2V0CiAgICByZWNlcHRpb24gYW5kIGlzIG5vdCByZWFsbHkgbmVjZXNzYXJ5CgogIDIwMTAtMDItMTQ6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBldGhhcnAuYy8uaDogRml4ZWQgQVJQIGlucHV0IHByb2Nlc3Npbmc6IG9ubHkgYWRkIGEgbmV3IGVudHJ5IGlmIGEKICAgIHJlcXVlc3Qgd2FzIGRpcmVjdGVkIGFzIHVzIChSRkMgODI2LCBQYWNrZXQgUmVjZXB0aW9uKSwgb3RoZXJ3aXNlCiAgICBvbmx5IHVwZGF0ZSBleGlzdGluZyBlbnRyaWVzOyBpbnRlcm5hbGl6ZWQgc29tZSBmdW5jdGlvbnMKCiAgMjAxMC0wMi0xNDogU2ltb24gR29sZHNjaG1pZHQKICAqIG5ldGlmLmgsIGV0aGFycC5jLCB0Y3BpcC5jOiBGaXhlZCBidWcgIzI4MTgzIChBUlAgYW5kIFRDUC9JUCBjYW5ub3QgYmUKICAgIGRpc2FibGVkIG9uIG5ldGlmIHVzZWQgZm9yIFBQUG9FKSBieSBhZGRpbmcgYSBuZXcgbmV0aWYgZmxhZwogICAgKE5FVElGX0ZMQUdfRVRIRVJORVQpIHRoYXQgdGVsbHMgdGhlIHN0YWNrIHRoZSBkZXZpY2UgaXMgYW4gZXRoZXJuZXQKICAgIGRldmljZSBidXQgcHJldmVudHMgdXNhZ2Ugb2YgQVJQIChzbyB0aGF0IGV0aGVybmV0X2lucHV0IGNhbiBiZSB1c2VkCiAgICBmb3IgUFBQb0UpLgoKICAyMDEwLTAyLTEyOiBTaW1vbiBHb2xkc2NobWlkdAogICogbmV0aWYuYzogbmV0aWZfc2V0X2xpbmtfdXAvZG93bjogb25seSBkbyBzb21ldGhpbmcgaWYgdGhlIGxpbmsgc3RhdGUKICAgIGFjdHVhbGx5IGNoYW5nZXMKCiAgMjAxMC0wMi0xMjogU2ltb24gR29sZHNjaG1pZHQvU3RlcGhhbmUgTGVzYWdlCiAgKiBhcGlfbXNnLmM6IEZpeGVkIGJ1ZyAjMjg4NjUgKENhbm5vdCBjbG9zZSBzb2NrZXQvbmV0Y29ubiBpbiBub24tYmxvY2tpbmcKICAgIGNvbm5lY3QpCgogIDIwMTAtMDItMTI6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBtZW0uaDogRml4ZWQgYnVnICMyODg2NiAobWVtX3JlYWxsb2MgZnVuY3Rpb24gZGVmaW5lZCBpbiBtZW0uaCkKCiAgMjAxMC0wMi0wOTogU2ltb24gR29sZHNjaG1pZHQKICAqIGFwaV9saWIuYywgYXBpX21zZy5jLCBzb2NrZXRzLmMsIGFwaS5oLCBhcGlfbXNnLmg6IEZpeGVkIGJ1ZyAjMjIxMTAKICAgKHJlY3YoKSBtYWtlcyByZWNlaXZlIHdpbmRvdyB1cGRhdGUgZm9yIGRhdGEgdGhhdCB3YXNuJ3QgcmVjZWl2ZWQgYnkKICAgIGFwcGxpY2F0aW9uKQoKICAyMDEwLTAyLTA5OiBTaW1vbiBHb2xkc2NobWlkdC9TdGVwaGFuZSBMZXNhZ2UKICAqIHNvY2tldHMuYzogRml4ZWQgYnVnICMyODg1MyAobHdpcF9yZWN2ZnJvbSgpIHJldHVybnMgMCBvbiByZWNlaXZlIHRpbWUtb3V0CiAgICBvciBhbnkgbmV0Y29ubl9yZWN2KCkgZXJyb3IpCgogIDIwMTAtMDItMDk6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBwcHAuYzogdGFzayAjMTAxNTQgKFBQUDogVXBkYXRlIHNubXAgaW4vb3V0IGNvdW50ZXJzIGZvciB0eC9yeCBwYWNrZXRzKQoKICAyMDEwLTAyLTA5OiBTaW1vbiBHb2xkc2NobWlkdAogICogbmV0aWYuYzogRm9yIGxvb3BiYWNrIHBhY2tldHMsIGFkanVzdCB0aGUgc3RhdHMtIGFuZCBzbm1wLWNvdW50ZXJzCiAgICBmb3IgdGhlIGxvb3BiYWNrIG5ldGlmLgoKICAyMDEwLTAyLTA4OiBTaW1vbiBHb2xkc2NobWlkdAogICogaWdtcC5jLy5oLCBpcC5oOiBNb3ZlZCBtb3N0IGRlZmluZXMgZnJvbSBpZ21wLmggdG8gaWdtcC5jIGZvciBjbGFyaXR5CiAgICBzaW5jZSB0aGV5IGFyZSBub3QgdXNlZCBhbnl3aGVyZSBlbHNlLgoKICAyMDEwLTAyLTA4OiBTaW1vbiBHb2xkc2NobWlkdCAoU3TpcGhhbmUgTGVzYWdlKQogICogaWdtcC5jLCBpZ21wLmgsIHN0YXRzLmMsIHN0YXRzLmg6IEltcHJvdmVkIElHTVAgc3RhdHMKICAgIChwYXRjaCBmcm9tIGJ1ZyAjMjg3OTgpCgogIDIwMTAtMDItMDg6IFNpbW9uIEdvbGRzY2htaWR0IChTdOlwaGFuZSBMZXNhZ2UpCiAgKiBpZ21wLmM6IEZpeGVkIGJ1ZyAjMjg3OTggKEVycm9yIGluICJNYXggUmVzcG9uc2UgVGltZSIgcHJvY2Vzc2luZykgYW5kCiAgICBhbm90aGVyIGJ1ZyB3aGVuIExXSVBfUkFORCgpIHJldHVybnMgemVyby4KCiAgMjAxMC0wMi0wNDogU2ltb24gR29sZHNjaG1pZHQKICAqIG5lYXJseSBldmVyeSBmaWxlOiBVc2UgbWFjcm9zIGRlZmluZWQgaW4gaXBfYWRkci5oIChzb21lIG9mIHRoZW0gbmV3KQogICAgdG8gd29yayB3aXRoIElQIGFkZHJlc3NlcyAocHJlcGFyYXRpb24gZm9yIGJ1ZyAjMjczNTIgLSBDaGFuZ2UgaXBfYWRkcgogICAgZnJvbSBzdHJ1Y3QgdG8gdHlwZWRlZiAodTMyX3QpIC0gYW5kIGJldHRlciBjb2RlKS4KCiAgMjAxMC0wMS0zMTogU2ltb24gR29sZHNjaG1pZHQKICAqIG5ldGlmLmM6IERvbid0IGNhbGwgdGhlIGxpbmstY2FsbGJhY2sgZnJvbSBuZXRpZl9zZXRfdXAvZG93bigpIHNpbmNlCiAgICB0aGlzIGludmFsaWRseSByZXRyaWdnZXJzIERIQ1AuCgogIDIwMTAtMDEtMjk6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBpcF9hZGRyLmgsIGluZXQuaCwgZGVmLmgsIGluZXQuYywgZGVmLmMsIG1vcmU6IENsZWFubHkgc2VwYXJhdGUgdGhlCiAgICBwb3J0YWJpbGl0eSBmaWxlIGluZXQuaCBhbmQgaXRzIGNvbnRlbnRzIGZyb20gdGhlIHN0YWNrOiBtb3ZlZCBodG9uWC0KICAgIGZ1bmN0aW9ucyB0byBkZWYuaCAoYW5kIHRoZSBuZXcgZGVmLmMgLSB0aGV5IGFyZSBub3QgaXB2NCBkZXBlbmRlbnQpLAogICAgbGV0IGluZXQuaCBkZXBlbmQgb24gaXBfYWRkci5oIGFuZCBub3QgdGhlIG90aGVyIHdheSByb3VuZC4KICAgIFRoaXMgZml4ZXMgYnVnICMyODczMi4KCiAgMjAxMC0wMS0yODogS2llcmFuIE1hbnNsZXkKICAqIHRjcC5jOiBFbnN1cmUgc3N0aHJlc2ggPj0gMipNU1MKCiAgMjAxMC0wMS0yNzogU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcC5oLCB0Y3AuYywgdGNwX2luLmM6IEZpeGVkIGJ1ZyAjMjc4NzE6IENhbGxpbmcgdGNwX2Fib3J0KCkgaW4gcmVjdgogICAgY2FsbGJhY2sgY2FuIGxlYWQgdG8gYWNjZXNzaW5nIHVuYWxsb2NhdGVkIG1lbW9yeS4gQXMgYSBjb25zZXF1ZW5jZSwKICAgIEVSUl9BQlJUIG1lYW5zIHRoZSBhcHBsaWNhdGlvbiBoYXMgY2FsbGVkIHRjcF9hYm9ydCgpIQoKICAyMDEwLTAxLTI1OiBTaW1vbiBHb2xkc2NobWlkdAogICogc25tcF9zdHJ1Y3RzLmgsIG1zZ19pbi5jOiBQYXJ0bHkgZml4ZWQgYnVnICMyMjA3MCAoTUlCX09CSkVDVF9XUklURV9PTkxZCiAgICBub3QgaW1wbGVtZW50ZWQgaW4gU05NUCk6IHdyaXRlLW9ubHkgb3Igbm90LWFjY2Vzc2libGUgYXJlIHN0aWxsCiAgICByZXR1cm5lZCBieSBnZXRuZXh0ICh0aG91Z2ggbm90IGJ5IGdldCkKCiAgMjAxMC0wMS0yNDogU2ltb24gR29sZHNjaG1pZHQKICAqIHNubXA6IFJlbmFtZWQgdGhlIHByaXZhdGUgbWliIG5vZGUgZnJvbSAncHJpdmF0ZScgdG8gJ21pYl9wcml2YXRlJyB0bwogICAgbm90IHVzZSByZXNlcnZlZCBDL0MrKyBrZXl3b3JkcwoKICAyMDEwLTAxLTIzOiBTaW1vbiBHb2xkc2NobWlkdAogICogc29ja2V0cy5jOiBGaXhlZCBidWcgIzI4NzE2OiBzZWxlY3QoKSByZXR1cm5zIDAgYWZ0ZXIgd2FpdGluZyBmb3IgbGVzcwogICAgdGhhbiAxIG1zCgogIDIwMTAtMDEtMjE6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3AuYywgYXBpX21zZy5jOiBGaXhlZCBidWcgIzI4NjUxICh0Y3BfY29ubmVjdDogbm8gY2FsbGJhY2tzIGNhbGxlZAogICAgaWYgdGNwX2VucXVldWUgZmFpbHMpIGJvdGggaW4gcmF3LSBhbmQgbmV0Y29ubi1BUEkKCiAgMjAxMC0wMS0xOTogU2ltb24gR29sZHNjaG1pZHQKICAqIGFwaV9tc2cuYzogRml4ZWQgYnVnICMyNzMxNjogbmV0Y29ubjogUG9zc2libGUgZGVhZGxvY2sgaW4gZXJyX3RjcAoKICAyMDEwLTAxLTE4OiBJb3JkYW4gTmVzaGV2L1NpbW9uIEdvbGRzY2htaWR0CiAgKiBzcmMvbmV0aWYvcHBwOiByZW9yZ2FuaXNlZCBQUFAgc291cmNlY29kZSB0byAyLjMuMTEgaW5jbHVkaW5nIHNvbWUKICAgIGJ1Z2ZpeCBiYWNrcG9ydHMgZnJvbSAyLjQueC4KCiAgMjAxMC0wMS0xODogU2ltb24gR29sZHNjaG1pZHQKICAqIG1lbS5jOiBGaXhlZCBidWcgIzI4Njc5OiBtZW1fcmVhbGxvYyBjYWxjdWxhdGVzIG1lbV9zdGF0cyB3cm9uZwoKICAyMDEwLTAxLTE3OiBTaW1vbiBHb2xkc2NobWlkdAogICogYXBpX2xpYi5jLCBhcGlfbXNnLmMsIChhcGlfbXNnLmgsIGFwaS5oLCBzb2NrZXRzLmMsIHRjcGlwLmMpOgogICAgdGFzayAjMTAxMDI6ICJuZXRjb25uOiBjbGVhbiB1cCBjb25uLT5lcnIgdGhyZWFkaW5nIGlzc3VlcyIgYnkgYWRkaW5nCiAgICBlcnJvciByZXR1cm4gdmFsdWUgdG8gc3RydWN0IGFwaV9tc2dfbXNnCgogIDIwMTAtMDEtMTc6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBhcGkuaCwgYXBpX2xpYi5jLCBzb2NrZXRzLmM6IENoYW5nZWQgbmV0Y29ubl9yZWN2KCkgYW5kIG5ldGNvbm5fYWNjZXB0KCkKICAgIHRvIHJldHVybiBlcnJfdCAoYnVncyAjMjc3MDkgYW5kICMyODA4NykKCiAgMjAxMC0wMS0xNDogU2ltb24gR29sZHNjaG1pZHQKICAqIC4uLjogVXNlIHR5cGVkZWYgZm9yIGZ1bmN0aW9uIHByb3RvdHlwZXMgdGhyb3VnaG91dCB0aGUgc3RhY2suCgogIDIwMTAtMDEtMTM6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBhcGlfbXNnLmgvLmMsIGFwaV9saWIuYzogRml4ZWQgYnVnICMyNjY3MiAoY2xvc2UgY29ubmVjdGlvbiB3aGVuIHJlY2VpdmUKICAgIHdpbmRvdyA9IDApIGJ5IGNvcnJlY3RseSBkcmFpbmluZyByZWN2bWJveC9hY2NlcHRtYm94CgogIDIwMTAtMDEtMTE6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBwYXAuYzogRml4ZWQgYnVnICMxMzMxNSAoUFBQIFBBUCBhdXRoZW50aWNhdGlvbiBjYW4gcmVzdWx0IGluCiAgICBlcnJvbmVvdXMgY2FsbGJhY2tzKSBieSBjb3B5aW5nIHRoZSBjb2RlIGZyb20gcmVjZW50IHBwcGQKCiAgMjAxMC0wMS0xMDogU2ltb24gR29sZHNjaG1pZHQKICAqIHJhdy5jOiBGaXhlZCBidWcgIzI4NTA2IChyYXdfYmluZCBzaG91bGQgZmlsdGVyIHJlY2VpdmVkIHBhY2tldHMpCgogIDIwMTAtMDEtMTA6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3AuaC8uYzogYnVnICMyODEyNyAocmVtb3ZlIGNhbGwgdG8gdGNwX291dHB1dCgpIGZyb20gdGNwX2Fjayhfbm93KSgpKQoKICAyMDEwLTAxLTA4OiBTaW1vbiBHb2xkc2NobWlkdAogICogc29ja2V0cy5jOiBGaXhlZCBidWcgIzI4NTE5IChsd2lwX3JlY3Zmcm9tIGJ1ZyB3aXRoIGxlbiA+IDY1NTM1KQoKICAyMDEwLTAxLTA4OiBTaW1vbiBHb2xkc2NobWlkdAogICogZG5zLmM6IENvcHkgaG9zdG5hbWUgZm9yIEROU19MT0NBTF9IT1NUTElTVF9JU19EWU5BTUlDPT0xIHNpbmNlIHN0cmluZwogICAgcGFzc2VkIHRvIGRuc19sb2NhbF9hZGRob3N0KCkgbWlnaHQgYmUgdm9sYXRpbGUKCiAgMjAxMC0wMS0wNzogU2ltb24gR29sZHNjaG1pZHQKICAqIHRpbWVycy5jLCB0Y3AuaDogQ2FsbCB0Y3BfdGltZXJfbmVlZGVkKCkgd2l0aCBOT19TWVM9PTEsIHRvbwoKICAyMDEwLTAxLTA2OiBTaW1vbiBHb2xkc2NobWlkdAogICogbmV0ZGIuaDogRml4ZWQgYnVnICMyODQ5NjogbWlzc2luZyBpbmNsdWRlIGd1YXJkcyBpbiBuZXRkYi5oCgogIDIwMDktMTItMzE6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBtYW55IHBwcCBmaWxlczogUmVvcmdhbmlzZWQgUFBQIHNvdXJjZSBjb2RlIGZyb20gdWNpcCBzdHJ1Y3R1cmUgdG8gcHBwZAogICAgc3RydWN0dXJlIHRvIGVhc2lseSBjb21wYXJlIG91ciBjb2RlIGFnYWluc3QgdGhlIHBwcGQgY29kZSAoYXJvdW5kIHYyLjMuMSkKCiAgMjAwOS0xMi0yNzogU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcF9pbi5jOiBBbm90aGVyIGZpeCBmb3IgYnVnICMyODI0MSAob29zZXEgcHJvY2Vzc2luZykgYW5kIGFkYXB0ZWQKICAgIHVuaXQgdGVzdAoKCihTVEFCTEUtMS4zLjIpCgogICsrIE5ldyBmZWF0dXJlczoKCiAgMjAwOS0xMC0yNyBTaW1vbiBHb2xkc2NobWlkdC9TdGVwaGFuIExlc2FnZQogICogbmV0aWZhcGkuYy8uaDogQWRkZWQgbmV0aWZhcGlfbmV0aWZfc2V0X2FkZHIoKQoKICAyMDA5LTEwLTA3IFNpbW9uIEdvbGRzY2htaWR0L0ZhYmlhbiBLb2NoCiAgKiBhcGlfbXNnLmMsIG5ldGJ1Zi5jLy5oLCBvcHQuaDogcGF0Y2ggIzY4ODg6IFBhdGNoIGZvciBVRFAgTmV0YnVmcyB0bwogICAgc3VwcG9ydCBkZXN0LWFkZHIgYW5kIGRlc3QtcG9ydCAob3B0aW9uYWw6IExXSVBfTkVUQlVGX1JFQ1ZJTkZPKQoKICAyMDA5LTA4LTI2IFNpbW9uIEdvbGRzY2htaWR0L1NpbW9uIEthbGx3ZWl0CiAgKiBzbGlwaWYuYy8uaDogYnVnICMyNjM5NzogU0xJUCBwb2xsaW5nIHN1cHBvcnQKCiAgMjAwOS0wOC0yNSBTaW1vbiBHb2xkc2NobWlkdAogICogb3B0LmgsIGV0aGFycC5oLy5jOiB0YXNrICM5MDMzOiBTdXBwb3J0IElFRUUgODAyLjFxIHRhZ2dlZCBmcmFtZSAoVkxBTiksCiAgICBOZXcgY29uZmlndXJhdGlvbiBvcHRpb25zIEVUSEFSUF9TVVBQT1JUX1ZMQU4gYW5kIEVUSEFSUF9WTEFOX0NIRUNLLgoKICAyMDA5LTA4LTI1IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBpcF9hZGRyLmgsIG5ldGRiLmM6IHBhdGNoICM2OTAwOiBhZGRlZCBkZWZpbmUgaXBfbnRvYShzdHJ1Y3QgaXBfYWRkciopCgogIDIwMDktMDgtMjQgSmFrb2IgU3Rva2x1bmQgT2xlc2VuCiAgKiBhdXRvaXAuYywgZGhjcC5jLCBuZXRpZi5jOiBwYXRjaCAjNjcyNTogVGVhY2ggQXV0b0lQIGFuZCBESENQIHRvIHJlc3BvbmQKICAgIHRvIG5ldGlmX3NldF9saW5rX3VwKCkuCgogIDIwMDktMDgtMjMgU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcC5oLy5jOiBBZGRlZCBmdW5jdGlvbiB0Y3BfZGVidWdfc3RhdGVfc3RyKCkgdG8gY29udmVydCBhIHRjcCBzdGF0ZQogICAgdG8gYSBodW1hbi1yZWFkYWJsZSBzdHJpbmcuCgogICsrIEJ1Z2ZpeGVzOgoKICAyMDA5LTEyLTI0OiBLaWVyYW4gTWFuc2xleQogICogdGNwX2luLmMgQXBwbHkgcGF0Y2hlcyBmcm9tIE9sZWcgVHlzaGV2IHRvIGltcHJvdmUgT09TIHByb2Nlc3NpbmcKICAgIChCVUcjMjgyNDEpCgogIDIwMDktMTItMDY6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBwcHAuaC8uYzogRml4ZWQgYnVnICMyNzA3OSAoWWV0IGFub3RoZXIgbGVhayBpbiBQUFApOiBvdXRwYWNrZXRfYnVmIGNhbgogICAgYmUgc3RhdGljYWxseSBhbGxvY2F0ZWQgKGxpa2UgaW4gdWNpcCkKCiAgMjAwOS0xMi0wNDogU2ltb24gR29sZHNjaG1pZHQgKHBhdGNoIGJ5IElvYXJkYW4gTmVzaGV2KQogICogcGFwLmM6IHBhdGNoICM2OTY5OiBQUFA6IG1pc3NpbmcgUEFQIGF1dGhlbnRpY2F0aW9uIFVOVElNRU9VVAoKICAyMDA5LTEyLTAzOiBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwLmgsIHRjcF9pbi5jLCB0Y3Bfb3V0LmM6IEZpeGVkIGJ1ZyAjMjgxMDY6IGR1cCBhY2sgZm9yIGZhc3QgcmV0cmFuc21pdAogICAgY291bGQgaGF2ZSBub24temVybyBsZW5ndGgKCiAgMjAwOS0xMi0wMjogU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcF9pbi5jOiBGaXhlZCBidWcgIzI3OTA0OiBUQ1Agc2VuZHMgdG9vIG1hbnkgQUNLczogZGVsYXkgcmVzZXR0aW5nCiAgICB0Y3BfaW5wdXRfcGNiIHVudGlsIGFmdGVyIGNhbGxpbmcgdGhlIHBjYidzIGNhbGxiYWNrcwoKICAyMDA5LTExLTI5OiBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwX2luLmM6IEZpeGVkIGJ1ZyAjMjgwNTQ6IFR3byBzZWdtZW50cyB3aXRoIEZJTiBmbGFnIG9uIHRoZSBvdXQtb2YtCiAgICBzZXF1ZW5jZSBxdWV1ZSwgYWxzbyBmaXhlZCBQQlVGX1BPT0wgbGVhayBpbiB0aGUgb3V0LW9mLXNlcXVlbmNlIGNvZGUKCiAgMjAwOS0xMS0yOTogU2ltb24gR29sZHNjaG1pZHQKICAqIHBidWYuYzogRml4ZWQgYnVnICMyODA2NDogcGJ1Zl9hbGxvYyhQQlVGX1BPT0wpIGlzIG5vdCB0aHJlYWQtc2FmZSBieQogICAgcXVldWVpbmcgYSBjYWxsIGludG8gdGNwaXBfdGhyZWFkIHRvIGZyZWUgb29zZXEtYnVmcyBpZiB0aGUgcG9vbCBpcyBlbXB0eQoKICAyMDA5LTExLTI2OiBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwLmg6IEZpeGVkIGJ1ZyAjMjgwOTg6IE5hZ2xlIGNhbiBwcmV2ZW50IGZhc3QgcmV0cmFuc21pdCBmcm9tIHNlbmRpbmcKICAgIHNlZ21lbnQKCiAgMjAwOS0xMS0yNjogU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcC5oLCBzb2NrZXRzLmM6IEZpeGVkIGJ1ZyAjMjgwOTk6IEFQSSByZXF1aXJlZCB0byBkaXNhYmxlIE5hZ2xlCiAgICBhbGdvcml0aG0gYXQgUENCIGxldmVsCgogIDIwMDktMTEtMjI6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3Bfb3V0LmM6IEZpeGVkIGJ1ZyAjMjc5MDU6IEZJTiBpc24ndCBjb21iaW5lZCB3aXRoIGRhdGEgb24gdW5zZW50CgogIDIwMDktMTEtMjI6IFNpbW9uIEdvbGRzY2htaWR0IChzdWdnZXN0ZWQgYnkgQmlsbCBBdWVyYmFjaCkKICAqIHRjcC5jOiB0Y3BfYWxsb2M6IHByZXZlbnQgaW5jcmVhc2luZyBzdGF0cy5lcnIgZm9yIE1FTVBfVENQX1BDQiB3aGVuCiAgICByZXVzaW5nIHRpbWUtd2FpdCBwY2IKCiAgMjAwOS0xMS0yMDogU2ltb24gR29sZHNjaG1pZHQgKHBhdGNoIGJ5IEFsYmVydCBCYXJ0ZWwpCiAgKiBzb2NrZXRzLmM6IEZpeGVkIGJ1ZyAjMjgwNjI6IERhdGEgcmVjZWl2ZWQgZGlyZWN0bHkgYWZ0ZXIgYWNjZXB0aW5nCiAgICBkb2VzIG5vdCB3YWtlIHVwIHNlbGVjdAoKICAyMDA5LTExLTExOiBTaW1vbiBHb2xkc2NobWlkdAogICogbmV0ZGIuaDogRml4ZWQgYnVnICMyNzk5NDogaW5jb3JyZWN0IGRlZmluZSBmb3IgZnJlZWFkZHJpbmZvKGFkZHJpbmZvKQoKICAyMDA5LTEwLTMwOiBTaW1vbiBHb2xkc2NobWlkdAogICogb3B0Lmg6IEluY3JlYXNlZCBkZWZhdWx0IHZhbHVlIGZvciBUQ1BfTVNTIHRvIDUzNiwgdXBkYXRlZCBkZWZhdWx0CiAgICB2YWx1ZSBmb3IgVENQX1dORCB0byA0KlRDUF9NU1MgdG8ga2VlcCBkZWxheWVkIEFDSyB3b3JraW5nLgoKICAyMDA5LTEwLTI4OiBLaWVyYW4gTWFuc2xleQogICogdGNwX2luLmMsIHRjcF9vdXQuYywgdGNwLmg6IHJlLXdvcmsgdGhlIGZhc3QgcmV0cmFuc21pc3Npb24gY29kZQogICAgdG8gZm9sbG93IGFsZ29yaXRobSBmcm9tIFRDUC9JUCBJbGx1c3RyYXRlZAoKICAyMDA5LTEwLTI3OiBLaWVyYW4gTWFuc2xleQogICogdGNwX2luLmM6IGZpeCBCVUcjMjc0NDU6IGdyb3cgY3duZCB3aXRoIGV2ZXJ5IGR1cGxpY2F0ZSBBQ0sKCiAgMjAwOS0xMC0yNTogU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcC5oOiBidWctZml4IGluIHRoZSBUQ1BfRVZFTlRfUkVDViBtYWNybyAoaGFzIHRvIGNhbGwgdGNwX3JlY3ZlZCBpZgogICAgcGNiLT5yZWN2IGlzIE5VTEwgdG8ga2VlcCByY3Zfd25kIGNvcnJlY3QpCgogIDIwMDktMTAtMjU6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3BfaW4uYzogRml4ZWQgYnVnICMyNjI1MTogUlNUIHByb2Nlc3MgaW4gVElNRV9XQUlUIFRDUCBzdGF0ZQoKICAyMDA5LTEwLTIzOiBTaW1vbiBHb2xkc2NobWlkdCAoRGF2aWQgRW1wc29uKQogICogdGNwLmM6IEZpeGVkIGJ1ZyAjMjc3ODM6IFNpbGx5IHdpbmRvdyBhdm9pZGFuY2UgZm9yIHNtYWxsIHdpbmRvdyBzaXplcwoKICAyMDA5LTEwLTIxOiBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwX2luLmM6IEZpeGVkIGJ1ZyAjMjcyMTU6IFRDUCBzZW50KCkgY2FsbGJhY2sgZ2l2ZXMgbGVhZGluZyBhbmQKICAgIHRyYWlsaW5nIDEgYnl0ZSBsZW4gKFNZTi9GSU4pCgogIDIwMDktMTAtMjE6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3Bfb3V0LmM6IEZpeGVkIGJ1ZyAjMjczMTU6IHplcm8gd2luZG93IHByb2JlIGFuZCBGSU4KCiAgMjAwOS0xMC0xOTogU2ltb24gR29sZHNjaG1pZHQKICAqIGRoY3AuYy8uaDogTWlub3IgY29kZSBzaW1wbGlmaWNhdGlvbiAoZG9uJ3Qgc3RvcmUgcmVjZWl2ZWQgcGJ1ZiwgY2hhbmdlCiAgICBjb25kaXRpb25hbCBjb2RlIHRvIGFzc2VydCB3aGVyZSBhcHBsaWNhYmxlKSwgY2hlY2sgcGJ1ZiBsZW5ndGggYmVmb3JlCiAgICB0ZXN0aW5nIGZvciB2YWxpZCByZXBseQoKICAyMDA5LTEwLTE5OiBTaW1vbiBHb2xkc2NobWlkdAogICogZGhjcC5jOiBSZW1vdmVkIG1vc3QgY2FsbHMgdG8gdWRwX2Nvbm5lY3Qgc2luY2UgdGhleSBhcmVuJ3QgbmVjZXNzYXJ5CiAgICB3aGVuIHVzaW5nIHVkcF9zZW5kdG9faWYoKSAtIGFsd2F5cyBzdGF5IGNvbm5lY3RlZCB0byBJUF9BRERSX0FOWS4KCiAgMjAwOS0xMC0xNjogU2ltb24gR29sZHNjaG1pZHQKICAqIGlwLmM6IEZpeGVkIGJ1ZyAjMjczOTA6IFNvdXJjZSBJUCBjaGVjayBpbiBpcF9pbnB1dCgpIGNhdXNlcyBpdCB0byBkcm9wCiAgICB2YWxpZCBESENQIHBhY2tldHMgLT4gYWxsb3cgMC4wLjAuMCBhcyBzb3VyY2UgYWRkcmVzcyB3aGVuIExXSVBfREhDUCBpcwogICAgZW5hYmxlZAoKICAyMDA5LTEwLTE1OiBTaW1vbiBHb2xkc2NobWlkdCAoT2xlZyBUeXNoZXYpCiAgKiB0Y3BfaW4uYzogRml4ZWQgYnVnICMyNzMyOTogZHVwYWNrcyBieSB1bmlkaXJlY3Rpb25hbCBkYXRhIHRyYW5zbWl0CgogIDIwMDktMTAtMTU6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBhcGlfbGliLmM6IEZpeGVkIGJ1ZyAjMjc3MDk6IGNvbm4tPmVyciByYWNlIGNvbmRpdGlvbiBvbiBuZXRjb25uX3JlY3YoKQogICAgdGltZW91dAoKICAyMDA5LTEwLTE1OiBTaW1vbiBHb2xkc2NobWlkdAogICogYXV0b2lwLmM6IEZpeGVkIGJ1ZyAjMjc3MDQ6IGF1dG9pcCBzdGFydHMgd2l0aCB3cm9uZyBhZGRyZXNzCiAgICBMV0lQX0FVVE9JUF9DUkVBVEVfU0VFRF9BRERSKCkgcmV0dXJuZWQgYWRkcmVzcyBpbiBob3N0IGJ5dGUgb3JkZXIgaW5zdGVhZAogICAgb2YgbmV0d29yayBieXRlIG9yZGVyCgogIDIwMDktMTAtMTEgU2ltb24gR29sZHNjaG1pZHQgKEr2cmcgS2VzdGVuKQogICogdGNwX291dC5jOiBGaXhlZCBidWcgIzI3NTA0OiB0Y3BfZW5xdWV1ZSB3cm9uZ2x5IGNvbmNhdGVuYXRlcyBzZWdtZW50cwogICAgd2hpY2ggYXJlIG5vdCBjb25zZWN1dGl2ZSB3aGVuIHJldHJhbnNtaXR0aW5nIHVuYWNrZWQgc2VnbWVudHMKCiAgMjAwOS0xMC0wOSBTaW1vbiBHb2xkc2NobWlkdAogICogb3B0Lmg6IEZpeGVkIGRlZmF1bHQgdmFsdWVzIG9mIHNvbWUgc3RhdHMgdG8gb25seSBiZSBlbmFibGVkIGlmIHVzZWQKICAgIEZpeGVzIGJ1ZyAjMjczMzg6IHN5c19zdGF0cyBpcyBkZWZpbmVkIHdoZW4gTk9fU1lTID0gMQoKICAyMDA5LTA4LTMwIFNpbW9uIEdvbGRzY2htaWR0CiAgKiBpcC5jOiBGaXhlZCBidWcgYnVnICMyNzM0NTogImlwX2ZyYWcoKSBkb2VzIG5vdCB1c2UgdGhlIExXSVBfTkVUSUZfTE9PUEJBQ0sKICAgIGZ1bmN0aW9uIiBieSBjaGVja2luZyBmb3IgbG9vcGJhY2sgYmVmb3JlIGNhbGxpbmcgaXBfZnJhZwoKICAyMDA5LTA4LTI1IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBkaGNwLmM6IGZpeGVkIGludmFsaWQgZGVwZW5kZW5jeSB0byBldGhhcnBfcXVlcnkgaWYgREhDUF9ET0VTX0FSUF9DSEVDSz09MAoKICAyMDA5LTA4LTIzIFNpbW9uIEdvbGRzY2htaWR0CiAgKiBwcHAuYzogYnVnICMyNzA3ODogUG9zc2libGUgbWVtb3J5IGxlYWsgaW4gcHBwSW5pdCgpCgogIDIwMDktMDgtMjMgU2ltb24gR29sZHNjaG1pZHQKICAqIG5ldGRiLmMsIGRucy5jOiBidWcgIzI2NjU3OiBETlMsIGlmIGhvc3QgbmFtZSBpcyAibG9jYWxob3N0IiwgcmVzdWx0CiAgICBpcyBlcnJvci4KCiAgMjAwOS0wOC0yMyBTaW1vbiBHb2xkc2NobWlkdAogICogb3B0LmgsIGluaXQuYzogYnVnICMyNjY0OTogVENQIGZhaWxzIHdoZW4gVENQX01TUyA+IFRDUF9TTkRfQlVGCiAgICBGaXhlZCB3cm9uZyBwYXJlbnRoZXNpcywgYWRkZWQgY2hlY2sgaW4gaW5pdC5jCgogIDIwMDktMDgtMjMgU2ltb24gR29sZHNjaG1pZHQKICAqIHBwcC5jOiBidWcgIzI3MjY2OiB3YWl0LXN0YXRlIGRlYnVnIG1lc3NhZ2UgaW4gcHBwTWFpbiBvY2N1cnMgZXZlcnkgbXMKCiAgMjAwOS0wOC0yMyBTaW1vbiBHb2xkc2NobWlkdAogICogbWFueSBwcHAgZmlsZXM6IGJ1ZyAjMjcyNjc6IEFkZGVkIGluY2x1ZGUgdG8gc3RyaW5nLmggd2hlcmUgbmVlZGVkCgogIDIwMDktMDgtMjMgU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcC5oOiBwYXRjaCAjNjg0MzogdGNwLmggbWFjcm8gb3B0aW1pemF0aW9uIHBhdGNoIChmb3IgbGl0dGxlIGVuZGlhbikKCgooU1RBQkxFLTEuMy4xKQoKICArKyBOZXcgZmVhdHVyZXM6CgogIDIwMDktMDUtMTAgU2ltb24gR29sZHNjaG1pZHQKICAqIG9wdC5oLCBzb2NrZXRzLmMsIHBidWYuYywgbmV0YnVmLmgsIHBidWYuaDogdGFzayAjNzAxMzogQWRkZWQgb3B0aW9uCiAgICBMV0lQX05FVElGX1RYX1NJTkdMRV9QQlVGIHRvIHRyeSB0byBjcmVhdGUgdHJhbnNtaXQgcGFja2V0cyBmcm9tIG9ubHkKICAgIG9uZSBwYnVmIHRvIGhlbHAgTUFDcyB0aGF0IGRvbid0IHN1cHBvcnQgc2NhdHRlci1nYXRoZXIgRE1BLgoKICAyMDA5LTA1LTA5IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBpY21wLmgsIGljbXAuYzogU2hyaW5rZWQgSUNNUCBjb2RlLCBhZGRlZCBvcHRpb24gdG8gTk9UIGNoZWNrIGljb21pbmcKICAgIEVDSE8gcGJ1ZiBmb3Igc2l6ZSAoanVzdCB1c2UgaXQpOiBMV0lQX0lDTVBfRUNIT19DSEVDS19JTlBVVF9QQlVGX0xFTgoKICAyMDA5LTA1LTA1IFNpbW9uIEdvbGRzY2htaWR0LCBKYWtvYiBTdG9rbHVuZCBPbGVzZW4KICAqIGlwLmgsIGlwLmM6IEFkZGVkIGlwX2N1cnJlbnRfbmV0aWYoKSAmIGlwX2N1cnJlbnRfaGVhZGVyKCkgdG8gcmVjZWl2ZQogICAgZXh0ZW5kZWQgaW5mbyBhYm91dCB0aGUgY3VycmVudGx5IHJlY2VpdmVkIHBhY2tldC4KCiAgMjAwOS0wNC0yNyBTaW1vbiBHb2xkc2NobWlkdAogICogc3lzLmg6IE1hZGUgU1lTX0xJR0hUV0VJR0hUX1BST1QgYW5kIHN5c19ub3coKSB3b3JrIHdpdGggTk9fU1lTPTEKCiAgMjAwOS0wNC0yNSBTaW1vbiBHb2xkc2NobWlkdAogICogbWVtLmMsIG9wdC5oOiBBZGRlZCBvcHRpb24gTUVNX1VTRV9QT09MU19UUllfQklHR0VSX1BPT0wgdG8gdHJ5IHRoZSBuZXh0CiAgICBiaWdnZXIgbWFsbG9jIHBvb2wgaWYgb25lIGlzIGVtcHR5IChvbmx5IHVzYWJsZSB3aXRoIE1FTV9VU0VfUE9PTFMpLgoKICAyMDA5LTA0LTIxIFNpbW9uIEdvbGRzY2htaWR0CiAgKiBkbnMuYywgaW5pdC5jLCBkbnMuaCwgb3B0Lmg6IHRhc2sgIzc1MDcsIHBhdGNoICM2Nzg2OiBETlMgc3VwcG9ydHMgc3RhdGljCiAgICBob3N0cyB0YWJsZS4gTmV3IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBETlNfTE9DQUxfSE9TVExJU1QgYW5kCiAgICBETlNfTE9DQUxfSE9TVExJU1RfSVNfRFlOQU1JQy4gQWxzbywgRE5TX0xPT0tVUF9MT0NBTF9FWFRFUk4oKSBjYW4gYmUgZGVmaW5lZAogICAgYXMgYW4gZXh0ZXJuYWwgZnVuY3Rpb24gZm9yIGxvb2t1cC4KCiAgMjAwOS0wNC0xNSBTaW1vbiBHb2xkc2NobWlkdAogICogZGhjcC5jOiBwYXRjaCAjNjc2MzogR2xvYmFsIERIQ1AgWElEIGNhbiBiZSByZWRlZmluZWQgdG8gc29tZXRoaW5nIG1vcmUgdW5pcXVlCgogIDIwMDktMDMtMzEgS2llcmFuIE1hbnNsZXkKICAqIHRjcC5jLCB0Y3Bfb3V0LmMsIHRjcF9pbi5jLCBzeXMuaCwgdGNwLmgsIG9wdHMuaDogYWRkIHN1cHBvcnQgZm9yCiAgICBUQ1AgdGltZXN0YW1wIG9wdGlvbnMsIG9mZiBieSBkZWZhdWx0LiAgUmV3b3JrIHRjcF9lbnF1ZXVlKCkgdG8KICAgIHRha2Ugb3B0aW9uIGZsYWdzIHJhdGhlciB0aGFuIHNwZWNpZmllZCBvcHRpb24gZGF0YQoKICAyMDA5LTAyLTE4IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBjYy5oOiBBZGRlZCBwcmludGYgZm9ybWF0dGVyIGZvciBzaXplX3Q6IFNaVF9GCgogIDIwMDktMDItMTYgU2ltb24gR29sZHNjaG1pZHQgKHBhdGNoIGJ5IFJpc2hpIEtoYW4pCiAgKiBpY21wLmMsIG9wdC5oOiBwYXRjaCAjNjUzOTogKGNvbmZpZ3VyYWJsZSkgcmVzcG9uc2UgdG8gYnJvYWRjYXN0LSBhbmQgbXVsdGljYXN0CiAgICBwaW5ncwoKICAyMDA5LTAyLTEyIFNpbW9uIEdvbGRzY2htaWR0CiAgKiBpbml0Lmg6IEFkZGVkIExXSVBfVkVSU0lPTiB0byBnZXQgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgc3RhY2sKCiAgMjAwOS0wMi0xMSBTaW1vbiBHb2xkc2NobWlkdCAoc3VnZ2VzdGVkIGJ5IEdvdHRmcmllZCBTcGl0YWxlcikKICAqIG9wdC5oLCBtZW1wLmgvLmM6IGFkZGVkIE1FTVBfTUVNX01BTExPQyB0byB1c2UgbWVtX21hbGxvYy9tZW1fZnJlZSBpbnN0ZWFkCiAgICBvZiB0aGUgcG9vbCBhbGxvY2F0b3IgKGNhbiBzYXZlIGNvZGUgc2l6ZSB3aXRoIE1FTV9MSUJDX01BTExPQyBpZiBsaWJjLW1hbGxvYwogICAgaXMgb3RoZXJ3aXNlIHVzZWQpCgogIDIwMDktMDEtMjggSm9uYXRoYW4gTGFybW91ciAoc3VnZ2VzdGVkIGJ5IEJpbGwgQmF1ZXJiYWNoKQogICogaXB2NC9pbmV0X2Noa3N1bS5jLCBpcHY0L2x3aXAvaW5ldF9jaGtzdW0uaDogaW5ldF9jaGtzdW1fcHNldWRvX3BhcnRpYWwoKQogIGlzIG9ubHkgdXNlZCBieSBVRFBMSVRFIGF0IHByZXNlbnQsIHNvIGNvbmRpdGlvbmFsaXNlIGl0LgoKICAyMDA4LTEyLTAzIFNpbW9uIEdvbGRzY2htaWR0IChiYXNlIG9uIHBhdGNoIGZyb20gTHVjYSBDZXJlc29saSkKICAqIGF1dG9pcC5jOiBjaGVja2VkIGluIChzbGlnaHRseSBtb2RpZmllZCkgcGF0Y2ggIzY2ODM6IEN1c3RvbWl6YWJsZSBBVVRPSVAKICAgICJzZWVkIiBhZGRyZXNzLiBUaGlzIHNob3VsZCByZWR1Y2UgQVVUT0lQIGNvbmZsaWN0cyBpZgogICAgTFdJUF9BVVRPSVBfQ1JFQVRFX1NFRURfQUREUiBpcyBvdmVycmlkZGVuLgoKICAyMDA4LTEwLTAyIEpvbmF0aGFuIExhcm1vdXIgYW5kIFJpc2hpIEtoYW4KICAqIHNvY2tldHMuYyAobHdpcF9hY2NlcHQpOiBSZXR1cm4gRVdPVUxEQkxPQ0sgaWYgd291bGQgYmxvY2sgb24gbm9uLWJsb2NraW5nCiAgICBzb2NrZXQuCgogIDIwMDgtMDYtMzAgU2ltb24gR29sZHNjaG1pZHQKICAqIG1lbS5jLCBvcHQuaCwgc3RhdHMuaDogZml4ZWQgYnVnICMyMTQzMzogQ2FsbGluZyBtZW1fZnJlZS9wYnVmX2ZyZWUgZnJvbQogICAgaW50ZXJydXB0IGNvbnRleHQgaXNuJ3Qgc2FmZTogTFdJUF9BTExPV19NRU1fRlJFRV9GUk9NX09USEVSX0NPTlRFWFQgYWxsb3dzCiAgICBtZW1fZnJlZSB0byBydW4gYmV0d2VlbiBtZW1fbWFsbG9jIGl0ZXJhdGlvbnMuIEFkZGVkIGlsbGVnYWwgY291bnRlciBmb3IKICAgIG1lbSBzdGF0cy4KCiAgMjAwOC0wNi0yNyBTaW1vbiBHb2xkc2NobWlkdAogICogc3RhdHMuaC8uYywgc29tZSBvdGhlciBmaWxlczogcGF0Y2ggIzY0ODM6IHN0YXRzIG1vZHVsZSBpbXByb3ZlbWVudDoKICAgIEFkZGVkIGRlZmluZXMgdG8gZGlzcGxheSBlYWNoIG1vZHVsZSdzIHN0YXRpc3RpYyBpbmRpdmlkdWFsbHksIGFkZGVkIHN0YXRzCiAgICBkZWZpbmVzIGZvciBNRU0sIE1FTVAgYW5kIFNZUyBtb2R1bGVzLCByZW1vdmVkICh1bnVzZWQpIHJleG1pdCBjb3VudGVyLgoKICAyMDA4LTA2LTE3IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBlcnIuaDogcGF0Y2ggIzY0NTk6IE1hZGUgZXJyX3Qgb3ZlcnJpZGFibGUgdG8gdXNlIGEgbW9yZSBlZmZpY2llbnQgdHlwZQogICAgKGRlZmluZSBMV0lQX0VSUl9UIGluIGNjLmgpCgogIDIwMDgtMDYtMTcgU2ltb24gR29sZHNjaG1pZHQKICAqIHNsaXBpZi5jOiBwYXRjaCAjNjQ4MDogQWRkZWQgYSBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3Igc2xpcGlmIGZvciBzeW1tZXRyeQogICAgdG8gbG9vcGlmCgogIDIwMDgtMDYtMTcgU2ltb24gR29sZHNjaG1pZHQgKHBhdGNoIGJ5IEx1Y2EgQ2VyZXNvbGkpCiAgKiBuZXRpZi5jLCBsb29waWYuYywgaXAuYywgbmV0aWYuaCwgbG9vcGlmLmgsIG9wdC5oOiBDaGVja2VkIGluIHNsaWdodGx5CiAgICBtb2RpZmllZCB2ZXJzaW9uIG9mIHBhdGNoICMgNjM3MDogTW92ZWQgbG9vcGlmIGNvZGUgdG8gbmV0aWYuYyBzbyB0aGF0CiAgICBsb29wYmFjayB0cmFmZmljIGlzIHN1cHBvcnRlZCBvbiBhbGwgbmV0aWZzIChhbGwgbG9jYWwgSVBzKS4KICAgIEFkZGVkIG9wdGlvbiB0byBsaW1pdCBsb29wYmFjayBwYWNrZXRzIGZvciBlYWNoIG5ldGlmcy4KCgogICsrIEJ1Z2ZpeGVzOgogIDIwMDktMDgtMTIgS2llcmFuIE1hbnNsZXkKICAqIHRjcF9pbi5jLCB0Y3AuYzogRml4IGJ1ZyAjMjcyMDk6IGhhbmRsZSB0cmltbWluZyBvZiBzZWdtZW50cyB3aGVuCiAgICBvdXQgb2Ygd2luZG93IG9yIG91dCBvZiBvcmRlciBwcm9wZXJseQoKICAyMDA5LTA4LTEyIEtpZXJhbiBNYW5zbGV5CiAgKiB0Y3BfaW4uYzogRml4IGJ1ZyAjMjcxOTk6IHVzZSBzbmRfd2wyIGluc3RlYWQgb2Ygc25kX3dsMQoKICAyMDA5LTA3LTI4IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBtZW0uaDogRml4ZWQgYnVnICMyNzEwNTogInJlYWxsb2MoKSBjYW5ub3QgcmVwbGFjZSBtZW1fcmVhbGxvYygpInMKCiAgMjAwOS0wNy0yNyBLaWVyYW4gTWFuc2xleQogICogYXBpLmggYXBpX21zZy5oIG5ldGRiLmggc29ja2V0cy5oOiBhZGQgbWlzc2luZyAjaW5jbHVkZSBkaXJlY3RpdmVzCgogIDIwMDktMDctMDkgS2llcmFuIE1hbnNsZXkKICAqIGFwaV9tc2cuYywgc29ja2V0cy5jLCBhcGkuaDogQlVHMjMyNDAgdXNlIHNpZ25lZCBjb3VudGVycyBmb3IKICAgIHJlY3ZfYXZhaWwgYW5kIGRvbid0IGluY3JlbWVudCBjb3VudGVycyB1bnRpbCBtZXNzYWdlIHN1Y2Nlc3NmdWxseQogICAgc2VudCB0byBtYm94CgogIDIwMDktMDYtMjUgS2llcmFuIE1hbnNsZXkKICAqIGFwaV9tc2cuYyBhcGkuaDogQlVHMjY3MjI6IGluaXRpYWxpc2UgbmV0Y29ubiB3cml0ZSB2YXJpYWJsZXMgCiAgICBpbiBuZXRjb25uX2FsbG9jCgogIDIwMDktMDYtMjUgS2llcmFuIE1hbnNsZXkKICAqIHRjcC5oOiBCVUcyNjg3OTogc2V0IHJldCB2YWx1ZSBpbiBUQ1BfRVZFTlQgbWFjcm9zIHdoZW4gZnVuY3Rpb24gaXMgbm90IHNldAoKICAyMDA5LTA2LTI1IEtpZXJhbiBNYW5zbGV5CiAgKiB0Y3AuYywgdGNwX2luLmMsIHRjcF9vdXQuYywgdGNwLmg6IEJVRzI2MzAxIGFuZCBCVUcyNjI2NzogY29ycmVjdAogICAgc2ltdWx0YW5lb3VzIGNsb3NlIGJlaGF2aW91ciwgYW5kIG1ha2Ugc25kX254dCBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgCiAgICBhcyBpbiB0aGUgUkZDcy4KCiAgMjAwOS0wNS0xMiBTaW1vbiBHb2xkc2NobWlkdAogICogZXRoYXJwLmgsIGV0aGFycC5jLCBuZXRpZi5jOiBmaXhlZCBidWcgIzI2NTA3OiAiR3JhdHVpdG91cyBBUlAgZGVwZW5kcyBvbgogICAgYXJwX3RhYmxlIC8gdXNlcyBldGhhcnBfcXVlcnkiIGJ5IGFkZGluZyBldGhhcnBfZ3JhdHVpdG91cygpCgogIDIwMDktMDUtMTIgU2ltb24gR29sZHNjaG1pZHQKICAqIGlwLmgsIGlwLmMsIGlnbXAuYzogYnVnICMyNjQ4NzogQWRkZWQgaXBfb3V0cHV0X2lmX29wdCB0aGF0IGNhbiBhZGQgSVAgb3B0aW9ucwogICAgdG8gdGhlIElQIGhlYWRlciAodXNlZCBieSBpZ21wX2lwX291dHB1dF9pZikKCiAgMjAwOS0wNS0wNiBTaW1vbiBHb2xkc2NobWlkdAogICogaW5ldF9jaGtzdW0uYzogT24gbGl0dGxlIGVuZGlhbiBhcmNoaXRlY3R1cmVzLCB1c2UgTFdJUF9QTEFURk9STV9IVE9OUyAoaWYKICAgIGRlZmluZWQpIGZvciBTV0FQX0JZVEVTX0lOX1dPUkQgdG8gc3BlZWQgdXAgY2hlY2tzdW1taW5nLgoKICAyMDA5LTA1LTA1IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBzb2NrZXRzLmM6IGJ1ZyAjMjY0MDU6IFByZW1hdHVyZWx5IHJlbGVhc2VkIHNlbWFwaG9yZSBjYXVzZXMgbHdpcF9zZWxlY3QoKQogICAgdG8gY3Jhc2gKCiAgMjAwOS0wNS0wNCBTaW1vbiBHb2xkc2NobWlkdAogICogaW5pdC5jOiBzbm1wIHdhcyBub3QgaW5pdGlhbGl6ZWQgaW4gbHdpcF9pbml0KCkKCiAgMjAwOS0wNS0wNCBGculk6XJpYyBCZXJub24KICAqIGRoY3AuYywgbmV0Ymlvcy5jOiBDaGFuZ2VzIGlmIElQX1NPRl9CUk9BRENBU1QgaXMgZW5hYmxlZC4KCiAgMjAwOS0wNS0wMyBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwLmg6IGJ1ZyAjMjYzNDk6IE5hZ2xlIGFsZ29yaXRobSBkb2Vzbid0IHNlbmQgYWx0aG91Z2ggc2VnbWVudCBpcyBmdWxsCiAgICAoYW5kIHVuc2VudC0+bmV4dCA9PSBOVUxMKQoKICAyMDA5LTA1LTAyIFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3BpcC5oLCB0Y3BpcC5jOiBmaXhlZCB0Y3BpcF91bnRpbWVvdXQgKGRvZXMgbm90IG5lZWQgdGhlIHRpbWUsIGJyb2tlbiBhZnRlcgogICAgMS4zLjAgaW4gQ1ZTIG9ubHkpIC0gZml4ZXMgY29tcGlsYXRpb24gb2YgcHBwX29lLmMKCiAgMjAwOS0wNS0wMiBTaW1vbiBHb2xkc2NobWlkdAogICogbXNnX2luLmM6IGZpeGVkIGJ1ZyAjMjU2MzY6IFNOTVBTRVQgdmFsdWUgaXMgaWdub3JlZCBmb3IgaW50ZWdlciBmaWVsZHMKCiAgMjAwOS0wNS0wMSBTaW1vbiBHb2xkc2NobWlkdAogICogcGFwLmM6IGJ1ZyAjMjE2ODA6IFBQUCB1cGFwX3JhdXRobmFrKCkgZHJvcHMgbGVnYWwgTkFLIHBhY2tldHMKCiAgMjAwOS0wNS0wMSBTaW1vbiBHb2xkc2NobWlkdAogICogcHBwLmM6IGJ1ZyAjMjQyMjg6IE1lbW9yeSBjb3JydXB0aW9uIHdpdGggUFBQIGFuZCBESENQCgogIDIwMDktMDQtMjkgRnLpZOlyaWMgQmVybm9uCiAgKiByYXcuYywgdWRwLmMsIGluaXQuYywgb3B0LmgsIGlwLmgsIHNvY2tldHMuaDogYnVnICMyNjMwOTogSW1wbGVtZW50IHRoZQogICAgU08oRilfQlJPQURDQVNUIGZpbHRlciBmb3IgYWxsIEFQSSBsYXllcnMuIEF2b2lkIHRoZSB1bmluZGVudGVkIHJlY2VwdGlvbgogICAgb2YgYnJvYWRjYXN0IHBhY2tldHMgZXZlbiB3aGVuIHRoaXMgb3B0aW9uIHdhc24ndCBzZXQuIFBvcnQgbWFpbnRhaW5lcnMKICAgIHdoaWNoIHdhbnQgdG8gZW5hYmxlIHRoaXMgZmlsdGVyIGhhdmUgdG8gc2V0IElQX1NPRl9CUk9BRENBU1Q9MSBpbiBvcHQuaC4KICAgIElmIHlvdSB3YW50IHRoaXMgb3B0aW9uIGFsc28gZmlsdGVyIGJyb2FkY2FzdCBvbiByZWN2IG9wZXJhdGlvbnMsIHlvdSBhbHNvCiAgICBoYXZlIHRvIHNldCBJUF9TT0ZfQlJPQURDQVNUX1JFQ1Y9MSBpbiBvcHQuaC4KCiAgMjAwOS0wNC0yOCBTaW1vbiBHb2xkc2NobWlkdCwgSmFrb2IgU3Rva2x1bmQgT2xlc2VuCiAgKiBkaGNwLmM6IHBhdGNoICM2NzIxLCBidWdzICMyNTU3NSwgIzI1NTc2OiBTb21lIHNtYWxsIGZpeGVzIHRvIERIQ1AgYW5kCiAgICBESENQL0FVVE9JUCBjb29wZXJhdGlvbgoKICAyMDA5LTA0LTI1IFNpbW9uIEdvbGRzY2htaWR0LCBPbGVnIFR5c2hldgogICogdGNwX291dC5jOiBidWcgIzI0MjEyOiBEZWFkbG9ja2VkIHRjcF9yZXRyYW5zbWl0IGR1ZSB0byBleGNlZWRlZCBwY2ItPmN3bmQKICAgIEZpeGVkIGJ5IHNvcnRpbmcgdGhlIHVuc2VudCBhbmQgdW5hY2tlZCBxdWV1ZXMgKHNlZ21lbnRzIGFyZSBpbnNlcnRlZCBhdCB0aGUKICAgIHJpZ2h0IHBsYWNlIGluIHRjcF9vdXRwdXQgYW5kIHRjcF9yZXhtaXQpLgoKICAyMDA5LTA0LTI1IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBtZW1wLmMsIG1lbS5jLCBtZW1wLmgsIG1lbV9zdGQuaDogYnVnICMyNjIxMyAiUHJvYmxlbSB3aXRoIG1lbW9yeSBhbGxvY2F0aW9uCiAgICB3aGVuIGRlYnVnZ2luZyI6IG1lbXBfc2l6ZXMgY29udGFpbmVkIHRoZSB3cm9uZyBzaXplcyAoaW5jbHVkaW5nIHNhbml0eQogICAgcmVnaW9ucyk7IG1lbXAgcG9vbHMgZm9yIE1FTV9VU0VfUE9PTFMgd2VyZSB0b28gc21hbGwKCiAgMjAwOS0wNC0yNCBTaW1vbiBHb2xkc2NobWlkdCwgRnLpZOlyaWMgQmVybm9uCiAgKiBpbmV0LmM6IHBhdGNoICM2NzY1OiBGaXggYSBzbWFsbCBwcm9ibGVtIHdpdGggdGhlIGxhc3QgY2hhbmdlcyAoaW5jb3JyZWN0CiAgICBiZWhhdmlvciwgd2l0aCB3aXRoIGlwIGFkZHJlc3Mgc3RyaW5nIG5vdCBlbmRlZCBieSBhICdcMCcsIGEgc3BhY2Ugb3IgYQogICAgZW5kIG9mIGxpbmUpCgogIDIwMDktMDQtMTkgU2ltb24gR29sZHNjaG1pZHQKICAqIHJhd2FwaS50eHQ6IEZpeGVkIGJ1ZyAjMjYwNjk6IENvcnJlY3RlZCBkb2N1bWVudGF0aW9uOiBpZiB0Y3BfY29ubmVjdCBmYWlscywKICAgIHBjYi0+ZXJyIGlzIGNhbGxlZCwgbm90IHBjYi0+Y29ubmVjdGVkICh3aXRoIGFuIGVycm9yIGNvZGUpLgoKICAyMDA5LTA0LTE5IFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3Bfb3V0LmM6IEZpeGVkIGJ1ZyAjMjYyMzY6ICJUQ1Agb3B0aW9ucyAodGltZXN0YW1wKSBkb24ndCB3b3JrIHdpdGgKICAgIG5vLWNvcHktdGNwd3JpdGUiOiBkZWFsbG9jYXRlIG9wdGlvbiBkYXRhLCBvbmx5IGNvbmNhdCBzZWdtZW50cyB3aXRoIHNhbWUgZmxhZ3MKCiAgMjAwOS0wNC0xOSBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwX291dC5jOiBGaXhlZCBidWcgIzI1MDk0OiAiWmVyby1sZW5ndGggcGJ1ZiIgKG9wdGlvbnMgYXJlIG5vdyBhbGxvY2F0ZWQKICAgIGluIHRoZSBoZWFkZXIgcGJ1Ziwgbm90IHRoZSBkYXRhIHBidWYpCgogIDIwMDktMDQtMTggU2ltb24gR29sZHNjaG1pZHQKICAqIGFwaV9tc2cuYzogZml4ZWQgYnVnICMyNTY5NTogU2VnbWVudGF0aW9uIGZhdWx0IGluIGRvX3dyaXRlbW9yZSgpCgogIDIwMDktMDQtMTUgU2ltb24gR29sZHNjaG1pZHQKICAqIHNvY2tldHMuYzogdHJpZWQgdG8gZml4IGJ1ZyAjMjM1NTk6IGx3aXBfcmVjdmZyb20gcHJvYmxlbSB3aXRoIHRjcAoKICAyMDA5LTA0LTE1IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBkaGNwLmM6IHRhc2sgIzkxOTI6IG1lbV9mcmVlIG9mIGRoY3AtPm9wdGlvbnNfaW4gYW5kIGRoY3AtPm1zZ19pbgoKICAyMDA5LTA0LTE1IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBpcC5jLCBpcDYuYywgdGNwX291dC5jLCBpcC5oOiBwYXRjaCAjNjgwODogQWRkIGEgdXRpbGl0eSBmdW5jdGlvbgogICAgaXBfaGludGVkX291dHB1dCgpIChmb3Igc21hbGxlciBjb2RlIG1haW5seSkKCiAgMjAwOS0wNC0xNSBTaW1vbiBHb2xkc2NobWlkdAogICogaW5ldC5jOiBwYXRjaCAjNjc2NTogU3VwcG9ydGluZyBuZXcgbGluZSBjaGFyYWN0ZXJzIGluIGluZXRfYXRvbigpCgogIDIwMDktMDQtMTUgU2ltb24gR29sZHNjaG1pZHQKICAqIGRoY3AuYzogcGF0Y2ggIzY3NjQ6IERIQ1AgcmViaW5kIGFuZCByZW5ldyBkaWQgbm90IHNlbmQgaG9zdG5hbSBvcHRpb247CiAgICBDb252ZXJ0ZWQgY29uc3RhbnQgT1BUSU9OX01BWF9NU0dfU0laRSB0byBuZXRpZi0+bXR1LCBjaGVjayBpZiBuZXRpZi0+bXR1CiAgICBpcyBiaWcgZW5vdWdoIGluIGRoY3Bfc3RhcnQKCiAgMjAwOS0wNC0xNSBTaW1vbiBHb2xkc2NobWlkdAogICogbmV0YnVmLmM6IGJ1ZyAjMjYwMjc6IG5ldGJ1Zl9jaGFpbiByZXN1bHRlZCBpbiBwYnVmIG1lbW9yeSBsZWFrCgogIDIwMDktMDQtMTUgU2ltb24gR29sZHNjaG1pZHQKICAqIHNvY2tldHMuYywgcHBwLmM6IGJ1ZyAjMjU3NjM6IGNvcnJlY3RlZCA0IG9jY3VycmVuY2VzIG9mIFNNRU1DUFkgdG8gTUVNQ1BZCgogIDIwMDktMDQtMTUgU2ltb24gR29sZHNjaG1pZHQKICAqIHNvY2tldHMuYzogYnVnICMyNjEyMTogc2V0X2Vycm5vIGNhbiBiZSBvdmVycmlkZGVuCgogIDIwMDktMDQtMDkgS2llcmFuIE1hbnNsZXkgKHBhdGNoIGZyb20gTHVjYSBDZXJlc29saSA8bHVjYWNlcmVzb2xpPikKICAqIGluaXQuYywgb3B0Lmg6IFBhdGNoIzY3NzQgVENQX1FVRVVFX09PU0VRIGJyZWFrcyBjb21waWxhdGlvbiB3aGVuCiAgICBMV0lQX1RDUD09MAoKICAyMDA5LTA0LTA5IEtpZXJhbiBNYW5zbGV5IChwYXRjaCBmcm9tIFJveSBMZWUgPHJveWxlZTE3PikKICAqIHRjcC5oOiBQYXRjaCM2ODAyIEFkZCBkby13aGlsZS1jbGF1c2VzIHRvIHRob3NlIGZ1bmN0aW9uIGxpa2UKICAgIG1hY3JvcyBpbiB0Y3AuaAoKICAyMDA5LTAzLTMxIEtpZXJhbiBNYW5zbGV5CiAgKiB0Y3AuYywgdGNwX2luLmMsIHRjcF9vdXQuYywgdGNwLmgsIG9wdC5oOiBSZXdvcmsgdGhlIHdheSB3aW5kb3cKICAgIHVwZGF0ZXMgYXJlIGNhbGN1bGF0ZWQgYW5kIHNlbnQgKEJVRzIwNTE1KQoKICAqIHRjcF9pbi5jOiBjb3BlIHdpdGggU1lOIHBhY2tldHMgcmVjZWl2ZWQgZHVyaW5nIGVzdGFibGlzaGVkIHN0YXRlcywKICAgIGFuZCByZXRyYW5zbWlzc2lvbiBvZiBpbml0aWFsIFNZTi4KCiAgKiB0Y3Bfb3V0LmM6IHNldCBwdXNoIGJpdCBjb3JyZWN0bHkgd2hlbiB0Y3Agc2VnbWVudHMgYXJlIG1lcmdlZAoKICAyMDA5LTAzLTI3IEtpZXJhbiBNYW5zbGV5CiAgKiB0Y3Bfb3V0LmMgc2V0IHdpbmRvdyBjb3JyZWN0bHkgb24gcHJvYmVzIChjb3JyZWN0aW5nIGNoYW5nZSBtYWRlCiAgICB5ZXN0ZXJkYXkpCgogIDIwMDktMDMtMjYgS2llcmFuIE1hbnNsZXkKICAqIHRjcC5jLCB0Y3BfaW4uYywgdGNwLmg6IGFkZCB0Y3BfYWJhbmRvbigpIHRvIGNvcGUgd2l0aCBkcm9wcGluZwogICAgY29ubmVjdGlvbnMgd2hlcmUgbm8gcmVzZXQgcmVxdWlyZWQgKGJ1ZyAjMjU2MjIpCgogICogdGNwX291dC5jOiBzZXQgVENQX0FDSyBmbGFnIG9uIGtlZXBhbGl2ZSBhbmQgemVybyB3aW5kb3cgcHJvYmVzIAogICAgKGJ1ZyAjMjA3NzkpCgogIDIwMDktMDItMTggU2ltb24gR29sZHNjaG1pZHQgKEpvbmF0aGFuIExhcm1vdXIgYW5kIEJpbGwgQXVlcmJhY2gpCiAgKiBpcF9mcmFnLmM6IHBhdGNoICM2NTI4OiB0aGUgYnVmZmVyIHVzZWQgZm9yIElQX0ZSQUdfVVNFU19TVEFUSUNfQlVGIGNvdWxkIGJlCiAgICB0b28gc21hbGwgZGVwZW5kaW5nIG9uIE1FTV9BTElHTk1FTlQKCiAgMjAwOS0wMi0xNiBTaW1vbiBHb2xkc2NobWlkdAogICogc29ja2V0cy5oLy5jLCBhcGlfKi5oLy5jOiBmaXhlZCBhcmd1bWVudHMgb2Ygc29ja2V0IGZ1bmN0aW9ucyB0byBtYXRjaCB0aGUgc3RhbmRhcmQ7CiAgICBjb252ZXJ0ZWQgc2l6ZSBhcmd1bWVudCBvZiBuZXRjb25uX3dyaXRlIHRvICdzaXplX3QnCgogIDIwMDktMDItMTYgU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcC5oLCB0Y3AuYzogZml4ZWQgYnVnICMyNDQ0MDogVENQIGNvbm5lY3Rpb24gY2xvc2UgcHJvYmxlbSBvbiA2NC1iaXQgaG9zdAogICAgYnkgbW92aW5nIGFjY2VwdCBjYWxsYmFjayBmdW5jdGlvbiBwb2ludGVyIHRvIFRDUF9QQ0JfQ09NTU9OCgogIDIwMDktMDItMTIgU2ltb24gR29sZHNjaG1pZHQKICAqIGRoY3AuYzogZml4ZWQgYnVnICMyNTM0NSAoREhDUERFQ0xJTkUgaXMgc2VudCB3aXRoICJNYXhpbXVtIG1lc3NhZ2Ugc2l6ZSIKICAgIG9wdGlvbikKCiAgMjAwOS0wMi0xMSBTaW1vbiBHb2xkc2NobWlkdAogICogZGhjcC5jOiBmaXhlZCBidWcgIzI0NDgwIChyZWxlYXNpbmcgb2xkIHVkcF9wZGIgYW5kIHBidWYgaW4gZGhjcF9zdGFydCkKCiAgMjAwOS0wMi0xMSBTaW1vbiBHb2xkc2NobWlkdAogICogb3B0LmgsIGFwaV9tc2cuYzogYWRkZWQgY29uZmlndXJhYmxlIGRlZmF1bHQgdmFsdWQgZm9yIG5ldGNvbm4tPnJlY3ZfYnVmc2l6ZToKICAgIFJFQ1ZfQlVGU0laRV9ERUZBVUxUIChmaXhlcyBidWcgIzIzNzI2OiBwYnVmIHBvb2wgZXhoYXVzdGlvbiBvbiBzbG93IHJlY3YoKSkKCiAgMjAwOS0wMi0xMCBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwLmM6IGZpeGVkIGJ1ZyAjMjU0Njc6IExpc3RlbiBiYWNrbG9nIGlzIG5vdCByZXNldCBvbiB0aW1lb3V0IGluIFNZTl9SQ1ZEOgogICAgQWNjZXB0c19wZW5kaW5nIGlzIGRlY3JlYXNlIG9uIGEgY29ycmVzcG9uZGluZyBsaXN0ZW4gcGNiIHdoZW4gYSBjb25uZWN0aW9uCiAgICBpbiBzdGF0ZSBTWU5fUkNWRCBpcyBjbG9zZS4KCiAgMjAwOS0wMS0yOCBKb25hdGhhbiBMYXJtb3VyCiAgKiBwYnVmLmM6IHJlY2xhaW0gcGJ1ZnMgZnJvbSBUQ1Agb3V0LW9mLXNlcXVlbmNlIHNlZ21lbnRzIGlmIHdlIHJ1bgogICAgb3V0IG9mIHBvb2wgcGJ1ZnMuCgogIDIwMDgtMTItMTkgU2ltb24gR29sZHNjaG1pZHQKICAqIG1hbnkgZmlsZXM6IHBhdGNoICM2Njk5OiBmaXhlZCBzb21lIHdhcm5pbmdzIG9uIHBsYXRmb3JtIHdoZXJlIHNpemVvZihpbnQpID09IDIgCgogIDIwMDgtMTItMTAgVGFtYXMgU29tb2d5aSwgRnLpZOlyaWMgQmVybm9uCiAgKiBzb2NrZXRzLmM6IGZpeGVkIGJ1ZyAjMjUwNTE6IGx3aXBfcmVjdmZyb20gcHJvYmxlbSB3aXRoIHVkcDogZnJvbWFkZHIgYW5kCiAgICBwb3J0IHVzZXMgZGVsZXRlZCBuZXRidWYuCgogIDIwMDgtMTAtMTggU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcF9pbi5jOiBmaXhlZCBidWcgIyMyNDU5NjogVnVsbmVyYWJpbGl0eSBvbiBmYXVsdHkgVENQIG9wdGlvbnMgbGVuZ3RoCiAgICBpbiB0Y3BfcGFyc2VvcHQKCiAgMjAwOC0xMC0xNSBTaW1vbiBHb2xkc2NobWlkdAogICogaXBfZnJhZy5jOiBmaXhlZCBidWcgIzI0NTE3OiBJUCByZWFzc2VtYmx5IGNyYXNoZXMgb24gdW5hbGlnbmVkIElQIGhlYWRlcnMKICAgIGJ5IHBhY2tpbmcgdGhlIHN0cnVjdCBpcF9yZWFzc19oZWxwZXIuCgogIDIwMDgtMTAtMDMgRGF2aWQgV29vZGhvdXNlLCBKb25hdGhhbiBMYXJtb3VyCiAgKiBldGhhcnAuYyAoZXRoYXJwX2FycF9pbnB1dCk6IEZpeCB0eXBlIGFsaWFzaW5nIHByb2JsZW0gY29weWluZyBpcCBhZGRyZXNzLgoKICAyMDA4LTEwLTAyIEpvbmF0aGFuIExhcm1vdXIKICAqIGRucy5jOiBIYXJkLWNvZGUgc3RydWN0dXJlIHNpemVzLCB0byBhdm9pZCBpc3N1ZXMgb24gc29tZSBjb21waWxlcnMgd2hlcmUKICAgIHBhZGRpbmcgaXMgaW5jbHVkZWQuCgogIDIwMDgtMDktMzAgSm9uYXRoYW4gTGFybW91cgogICogc29ja2V0cy5jIChsd2lwX2FjY2VwdCk6IGNoZWNrIGFkZHIgaXNuJ3QgTlVMTC4gSWYgaXQncyB2YWxpZCwgZG8gYW4KICAgIGFzc2VydGlvbiBjaGVjayB0aGF0IGFkZHJsZW4gaXNuJ3QgTlVMTC4KCiAgMjAwOC0wOS0zMCBKb25hdGhhbiBMYXJtb3VyCiAgKiB0Y3AuYzogRml4IGJ1ZyAjMjQyMjcsIHdyb25nIGVycm9yIG1lc3NhZ2UgaW4gdGNwX2JpbmQuCgogIDIwMDgtMDgtMjYgU2ltb24gR29sZHNjaG1pZHQKICAqIGluZXQuaCwgaXBfYWRkci5oOiBmaXhlZCBidWcgIzI0MTMyOiBDcm9zcy1kZXBlbmRlbmN5IGJldHdlZW4gaXBfYWRkci5oIGFuZAogICAgaW5ldC5oIC0+IG1vdmVkIGRlY2xhcmF0aW9uIG9mIHN0cnVjdCBpbl9hZGRyIGZyb20gaXBfYWRkci5oIHRvIGluZXQuaAoKICAyMDA4LTA4LTE0IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBhcGlfbXNnLmM6IGZpeGVkIGJ1ZyAjMjM4NDc6IGRvX2Nsb3NlX2ludGVybmFsIHJlZmVyZW5jZXMgZnJlZWQgbWVtb3J5ICh3aGVuCiAgICB0Y3BfY2xvc2UgcmV0dXJucyAhPSBFUlJfT0spCgogIDIwMDgtMDctMDggRnLpZOlyaWMgQmVybm9uCiAgKiBzdGF0cy5oOiBGaXggc29tZSBidWlsZCBidWdzIGludHJvZHVjZWQgd2l0aCBwYXRjaCAjNjQ4MyAobWlzc2luZyBzb21lIHBhcmFtZXRlcnMKICAgIGluIG1hY3JvcywgbWFpbmx5IGlmIE1FTV9TVEFUUz0wIGFuZCBNRU1QX1NUQVRTPTApLgoKICAyMDA4LTA2LTI0IEpvbmF0aGFuIExhcm1vdXIKICAqIHRjcF9pbi5jOiBGaXggZm9yIGJ1ZyAjMjM2OTMgYXMgc3VnZ2VzdGVkIGJ5IEFydCBSLiBFbnN1cmUgY3NlZyBpcyB1bnVzZWQKICAgIGlmIHRjcF9zZWdfY29weSBmYWlscy4KCiAgMjAwOC0wNi0xNyBTaW1vbiBHb2xkc2NobWlkdAogICogaW5ldF9jaGtzdW0uYzogQ2hlY2tlZCBpbiBzb21lIGlkZWFzIG9mIHBhdGNoICM2NDYwIChsb29wIG9wdGltaXphdGlvbnMpCiAgICBhbmQgY3JlYXRlZCBkZWZpbmVzIGZvciBzd2FwcGluZyBieXRlcyBhbmQgZm9sZGluZyB1MzIgdG8gdTE2LgoKICAyMDA4LTA1LTMwIEtpZXJhbiBNYW5zbGV5CiAgKiB0Y3BfaW4uYyBSZW1vdmUgcmVkdW5kYW50ICJpZiIgc3RhdGVtZW50LCBhbmQgdXNlIHJlYWwgcmN2X3duZAogICAgcmF0aGVyIHRoYW4gcmN2X2Fubl93bmQgd2hlbiBkZWNpZGluZyBpZiBwYWNrZXRzIGFyZSBpbi13aW5kb3cuCiAgICBDb250cmlidXRlZCBieSA8YXJhc211c3NlbkBjb25zdWx0YW50LmRhdGFzeXMuc3dyaS5lZHU+CgogIDIwMDgtMDUtMzAgS2llcmFuIE1hbnNsZXkKICAqIG1lbS5oOiBGaXggQlVHIzIzMjU0LiAgQ2hhbmdlIG1hY3JvIGRlZmluaXRpb24gb2YgbWVtXyogdG8gYWxsb3cKICAgIHBhc3NpbmcgYXMgZnVuY3Rpb24gcG9pbnRlcnMgd2hlbiBNRU1fTElCQ19NQUxMT0MgaXMgZGVmaW5lZC4KCiAgMjAwOC0wNS0wOSBKb25hdGhhbiBMYXJtb3VyCiAgKiBlcnIuaCwgZXJyLmMsIHNvY2tldHMuYzogRml4IGJ1ZyAjMjMxMTk6IFJlb3JkZXIgdGltZW91dCBlcnJvciBjb2RlIHRvCiAgICBzdG9wIGl0IGJlaW5nIHRyZWF0ZWQgYXMgYSBmYXRhbCBlcnJvci4KCiAgMjAwOC0wNC0xNSBTaW1vbiBHb2xkc2NobWlkdAogICogZGhjcC5jOiBmaXhlZCBidWcgIzIyODA0OiBkaGNwX3N0b3AgZG9lc24ndCBjbGVhciBORVRJRl9GTEFHX0RIQ1AKICAgIChmbGFnIG5vdyBjbGVhcmVkKQoKICAyMDA4LTAzLTI3IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBtZW0uYywgdGNwaXAuYywgdGNwaXAuaCwgb3B0Lmg6IGZpeGVkIGJ1ZyAjMjE0MzMgKENhbGxpbmcgbWVtX2ZyZWUvcGJ1Zl9mcmVlCiAgICBmcm9tIGludGVycnVwdCBjb250ZXh0IGlzbid0IHNhZmUpOiBzZXQgTFdJUF9VU0VfSEVBUF9GUk9NX0lOVEVSUlVQVCB0byAxCiAgICBpbiBsd2lwb3B0cy5oIG9yIHVzZSBwYnVmX2ZyZWVfY2FsbGJhY2socCkvbWVtX2ZyZWVfY2FsbGJhY2sobSkgdG8gZnJlZSBwYnVmcwogICAgb3IgaGVhcCBtZW1vcnkgZnJvbSBpbnRlcnJ1cHQgY29udGV4dAoKICAyMDA4LTAzLTI2IFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3BfaW4uYywgdGNwLmM6IGZpeGVkIGJ1ZyAjMjIyNDk6IGRpdmlzaW9uIGJ5IHplcm8gY291bGQgb2NjdXIgaWYgYSByZW1vdGUKICAgIGhvc3Qgc2VudCBhIHplcm8gbXNzIGFzIFRDUCBvcHRpb24uCgoKKFNUQUJMRS0xLjMuMCkKCiAgKysgTmV3IGZlYXR1cmVzOgoKICAyMDA4LTAzLTEwIEpvbmF0aGFuIExhcm1vdXIKICAqIGluZXRfY2hrc3VtLmM6IEFsbG93IGNob2ljZSBvZiBvbmUgb2YgdGhlIHNhbXBsZSBhbGdvcml0aG1zIHRvIGJlCiAgICBtYWRlIGZyb20gbHdpcG9wdHMuaC4gRml4IGNvbW1lbnQgb24gaG93IHRvIG92ZXJyaWRlIExXSVBfQ0hLU1VNLgoKICAyMDA4LTAxLTIyIEZy6WTpcmljIEJlcm5vbgogICogdGNwLmMsIHRjcF9pbi5jLCB0Y3AuaCwgb3B0Lmg6IFJlbmFtZSBMV0lQX0NBTENVTEFURV9FRkZfU0VORF9NU1MgaW4gCiAgICBUQ1BfQ0FMQ1VMQVRFX0VGRl9TRU5EX01TUyB0byBoYXZlIGNvaGVyZW50IFRDUCBvcHRpb25zIG5hbWVzLgoKICAyMDA4LTAxLTE0IEZy6WTpcmljIEJlcm5vbgogICogcmF3YXBpLnR4dCwgYXBpX21zZy5jLCB0Y3AuYywgdGNwX2luLmMsIHRjcC5oOiBjaGFuZ2VzIGZvciB0YXNrICM3Njc1ICJFbmFibGUKICAgIHRvIHJlZnVzZSBkYXRhIG9uIGEgVENQX0VWRU5UX1JFQ1YgY2FsbCIuIEltcG9ydGFudCwgYmVoYXZpb3IgY2hhbmdlcyBmb3IgdGhlCiAgICB0Y3BfcmVjdiBjYWxsYmFjayAoc2VlIHJhd2FwaS50eHQpLgoKICAyMDA4LTAxLTE0IEZy6WTpcmljIEJlcm5vbiwgTWFyYyBDaGFsYW5kCiAgKiBpcC5jOiBJbnRlZ3JhdGUgcGF0Y2ggIzYzNjkiIGlwX2lucHV0IDogY2hlY2tpbmcgYmVmb3JlIHJlYWxsb2MiLgogIAogIDIwMDgtMDEtMTIgRnLpZOlyaWMgQmVybm9uCiAgKiB0Y3BpcC5oLCB0Y3BpcC5jLCBhcGkuaCwgYXBpX2xpYi5jLCBhcGlfbXNnLmMsIHNvY2tldHMuYzogcmVwbGFjZSB0aGUgZmllbGQKICAgIG5ldGNvbm46OnNlbSBwZXIgbmV0Y29ubjo6b3BfY29tcGxldGVkIGxpa2Ugc3VnZ2VzdGVkIGZvciB0aGUgdGFzayAjNzQ5MAogICAgIkFkZCByZXR1cm4gdmFsdWUgdG8gc3lzX21ib3hfcG9zdCIuCgogIDIwMDgtMDEtMTIgRnLpZOlyaWMgQmVybm9uCiAgKiBhcGlfbXNnLmMsIG9wdC5oOiByZXBsYWNlIERFRkFVTFRfUkVDVk1CT1hfU0laRSBwZXIgREVGQVVMVF9UQ1BfUkVDVk1CT1hfU0laRSwKICAgIERFRkFVTFRfVURQX1JFQ1ZNQk9YX1NJWkUgYW5kIERFRkFVTFRfUkFXX1JFQ1ZNQk9YX1NJWkUgKHRvIG9wdGltaXplIHF1ZXVlcwogICAgc2l6ZXMpLCBsaWtlIHN1Z2dlc3RlZCBmb3IgdGhlIHRhc2sgIzc0OTAgIkFkZCByZXR1cm4gdmFsdWUgdG8gc3lzX21ib3hfcG9zdCIuCgogIDIwMDgtMDEtMTAgRnLpZOlyaWMgQmVybm9uCiAgKiB0Y3BpcC5oLCB0Y3BpcC5jOiBhZGQgdGNwaXBfY2FsbGJhY2tfd2l0aF9ibG9jayBmdW5jdGlvbiBmb3IgdGhlIHRhc2sgIzc0OTAKICAgICJBZGQgcmV0dXJuIHZhbHVlIHRvIHN5c19tYm94X3Bvc3QiLiB0Y3BpcF9jYWxsYmFjayBpcyBhbHdheXMgZGVmaW5lZCBhcwogICAgImJsb2NraW5nIiAoImJsb2NrIiBwYXJhbWV0ZXIgPSAxKS4KCiAgMjAwOC0wMS0xMCBGculk6XJpYyBCZXJub24KICAqIHRjcGlwLmgsIHRjcGlwLmMsIGFwaS5oLCBhcGlfbGliLmMsIGFwaV9tc2cuYywgc29ja2V0cy5jOiByZXBsYWNlIHRoZSBmaWVsZAogICAgbmV0Y29ubjo6bWJveCAoc3lzX21ib3hfdCkgcGVyIG5ldGNvbm46OnNlbSAoc3lzX3NlbV90KSBmb3IgdGhlIHRhc2sgIzc0OTAKICAgICJBZGQgcmV0dXJuIHZhbHVlIHRvIHN5c19tYm94X3Bvc3QiLgoKICAyMDA4LTAxLTA1IEZy6WTpcmljIEJlcm5vbgogICogc3lzX2FyY2gudHh0LCBhcGkuaCwgYXBpX2xpYi5jLCBhcGlfbXNnLmgsIGFwaV9tc2cuYywgdGNwaXAuYywgc3lzLmgsIG9wdC5oOgogICAgSW50cm9kdWNlIGNoYW5nZXMgZm9yIHRhc2sgIzc0OTAgIkFkZCByZXR1cm4gdmFsdWUgdG8gc3lzX21ib3hfcG9zdCIgd2l0aCBzb21lCiAgICBtb2RpZmljYXRpb25zIGluIHRoZSBzeXNfbWJveCBhcGk6IHN5c19tYm94X25ldyB0YWtlIGEgInNpemUiIHBhcmFtZXRlcnMgd2hpY2gKICAgIGluZGljYXRlIHRoZSBudW1iZXIgb2YgcG9pbnRlcnMgcXVlcnkgYnkgdGhlIG1haWxib3guIFRoZXJlIGlzIHRocmVlIGRlZmluZXMKICAgIGluIG9wdC5oIHRvIGluZGljYXRlIHNpemVzIGZvciB0Y3BpcDo6bWJveCwgbmV0Y29ubjo6cmVjdm1ib3gsIGFuZCBmb3IgdGhlIAogICAgbmV0Y29ubjo6YWNjZXB0bWJveC4gUG9ydCBtYWludGFpbmVycywgeW91IGNhbiBkZWNpZGUgdG8ganVzdCBhZGQgdGhpcyBuZXcgCiAgICBwYXJhbWV0ZXIgaW4geW91ciBpbXBsZW1lbnRhdGlvbiwgYnV0IHRvIGlnbm9yZSBpdCB0byBrZWVwIHRoZSBwcmV2aW91cyBiZWhhdmlvci4KICAgIFRoZSBuZXcgc3lzX21ib3hfdHJ5cG9zdCBmdW5jdGlvbiByZXR1cm4gYSB2YWx1ZSB0byBrbm93IGlmIHRoZSBtYWlsYm94IGlzCiAgICBmdWxsIG9yIGlmIHRoZSBtZXNzYWdlIGlzIHBvc3RlZC4gVGFrZSBhIGxvb2sgdG8gc3lzX2FyY2gudHh0IGZvciBtb3JlIGRldGFpbHMuCiAgICBUaGlzIG5ldyBmdW5jdGlvbiBpcyB1c2VkIGluIHRjcGlwX2lucHV0IChzbywgY2FuIGJlIGNhbGxlZCBpbiBhbiBpbnRlcnJ1cHQKICAgIGNvbnRleHQgc2luY2UgdGhlIGZ1bmN0aW9uIGlzIG5vdCBibG9ja2luZyksIGFuZCBpbiByZWN2X3VkcCBhbmQgcmVjdl9yYXcuCgogIDIwMDgtMDEtMDQgRnLpZOlyaWMgQmVybm9uLCBTaW1vbiBHb2xkc2NobWlkdCwgSm9uYXRoYW4gTGFybW91cgogICogcmF3YXBpLnR4dCwgYXBpLmgsIGFwaV9saWIuYywgYXBpX21zZy5oLCBhcGlfbXNnLmMsIHNvY2tldHMuYywgdGNwLmgsIHRjcC5jLAogICAgdGNwX2luLmMsIGluaXQuYywgb3B0Lmg6IHJlbmFtZSBiYWNrbG9nIG9wdGlvbnMgd2l0aCBUQ1BfIHByZWZpeCwgbGltaXQgdGhlCiAgICAiYmFja2xvZyIgcGFyYW1ldGVyIGluIGFuIHU4X3QsIDAgaXMgaW50ZXJwcmV0ZWQgYXMgInNtYWxsZXN0IHF1ZXVlIiwgYWRkCiAgICBkb2N1bWVudGF0aW9uIGluIHRoZSByYXdhcGkudHh0IGZpbGUuCgogIDIwMDctMTItMzEgS2llcmFuIE1hbnNsZXkgKGJhc2VkIG9uIHBhdGNoIGZyb20gUGVyLUhlbnJpayBMdW5kYm9sbSkKICAqIHRjcC5jLCB0Y3BfaW4uYywgdGNwX291dC5jLCB0Y3AuaDogQWRkIFRDUCBwZXJzaXN0IHRpbWVyCgogIDIwMDctMTItMzEgRnLpZOlyaWMgQmVybm9uLCBMdWNhIENlcmVzb2xpCiAgKiBhdXRvaXAuYywgZXRoYXJwLmM6IGlwX2FkZHIuaDogSW50ZWdyYXRlIHBhdGNoICM2MzQ4OiAiQnJvYWRjYXN0IEFSUCBwYWNrZXRzCiAgICBpbiBhdXRvaXAiLiBUaGUgY2hhbmdlIGluIGV0aGFycF9yYXcgY291bGQgYmUgcmVtb3ZlZCwgc2luY2UgYWxsIGNhbGxzIHRvCiAgICBldGhhcnBfcmF3IHVzZSBldGhicm9hZGNhc3QgZm9yIHRoZSAiZXRoZHN0X2FkZHIiIHBhcmFtZXRlci4gQnV0IGl0IGNvdWxkIGJlCiAgICB3cm9uZyBpbiB0aGUgZnV0dXJlLgoKICAyMDA3LTEyLTMwIEZy6WTpcmljIEJlcm5vbiwgVG9tIEV2YW5zCiAgKiBpcC5jOiBGaXggYnVnICMyMTg0NiAiTHdJUCBkb2Vzbid0IGFwcGVhciB0byBwZXJmb3JtIGFueSBJUCBTb3VyY2UgQWRkcmVzcwogICAgRmlsdGVyaW5nIiByZXBvcnRlZCBieSBUb20gRXZhbnMuCgogIDIwMDctMTItMjEgRnLpZOlyaWMgQmVybm9uLCBTaW1vbiBHb2xkc2NobWlkdCwgSm9uYXRoYW4gTGFybW91cgogICogdGNwLmgsIG9wdC5oLCBhcGkuaCwgYXBpX21zZy5oLCB0Y3AuYywgdGNwX2luLmMsIGFwaV9saWIuYywgYXBpX21zZy5jLAogICAgc29ja2V0cy5jLCBpbml0LmM6IHRhc2sgIzcyNTI6IEltcGxlbWVudCBUQ1AgbGlzdGVuIGJhY2tsb2c6IFdhcm5pbmc6IHJhdyBBUEkKICAgIGFwcGxpY2F0aW9ucyBoYXZlIHRvIGNhbGwgJ3RjcF9hY2NlcHRlZChwY2IpJyBpbiB0aGVpciBhY2NlcHQgY2FsbGJhY2sgdG8KICAgIGtlZXAgYWNjZXB0aW5nIG5ldyBjb25uZWN0aW9ucy4KCiAgMjAwNy0xMi0xMyBGculk6XJpYyBCZXJub24KICAqIGFwaV9tc2cuYywgZXJyLmgsIGVyci5jLCBzb2NrZXRzLmMsIGRucy5jLCBkbnMuaDogcmVwbGFjZSAiZW51bSBkbnNfcmVzdWx0IgogICAgYnkgZXJyX3QgdHlwZS4gQWRkIGEgbmV3IGVycl90IGNvZGUgIkVSUl9JTlBST0dSRVNTIi4KCiAgMjAwNy0xMi0xMiBGculk6XJpYyBCZXJub24KICAqIGRucy5oLCBkbnMuYywgb3B0Lmg6IG1vdmUgRE5TIG9wdGlvbnMgdG8gdGhlICJyaWdodCIgcGxhY2UuIE1vc3QgdmlzaWJsZXMKICAgIGFyZSB0aGUgb25lIHdoaWNoIGhhdmUgcmFtIHVzYWdlLgoKICAyMDA3LTEyLTA1IEZy6WTpcmljIEJlcm5vbgogICogbmV0ZGIuYzogYWRkIGEgTFdJUF9ETlNfQVBJX0hPU1RFTlRfU1RPUkFHRSBvcHRpb24gdG8gZGVjaWRlIHRvIHVzZSBhIHN0YXRpYwogICAgc2V0IG9mIHZhcmlhYmxlcyAoPTApIG9yIGEgbG9jYWwgb25lICg9MSkuIEluIHRoaXMgbGFzdCBjYXNlLCB5b3VyIHBvcnQgc2hvdWxkCiAgICBwcm92aWRlIGEgZnVuY3Rpb24gInN0cnVjdCBob3N0ZW50KiBzeXNfdGhyZWFkX2hvc3RlbnQoIHN0cnVjdCBob3N0ZW50KiBoKSIKICAgIHdoaWNoIGhhdmUgdG8gZG8gYSBjb3B5IG9mICJoIiBhbmQgcmV0dXJuIGEgcG9pbnRlciBvbnQgdGhlICJwZXItdGhyZWFkIiBjb3B5LgoKICAyMDA3LTEyLTAzIFNpbW9uIEdvbGRzY2htaWR0CiAgKiBpcC5jOiBpcF9pbnB1dDogY2hlY2sgaWYgYSBwYWNrZXQgaXMgZm9yIGlucCBmaXJzdCBiZWZvcmUgY2hlY2tpbmcgYWxsIG90aGVyCiAgICBuZXRpZnMgb24gbmV0aWZfbGlzdCAoc3BlZWRzIHVwIHBhY2tldCByZWNlaXZpbmcgaW4gbW9zdCBjYXNlcykKCiAgMjAwNy0xMS0zMCBTaW1vbiBHb2xkc2NobWlkdAogICogdWRwLmMsIHJhdy5jOiB0YXNrICM3NDk3OiBTb3J0IGxpc3RzIChwY2IsIG5ldGlmLCAuLi4pIGZvciBmYXN0ZXIgYWNjZXNzCiAgICBVRFA6IG1vdmUgYSAoY29ubmVjdGVkKSBwY2Igc2VsZWN0ZWQgZm9yIGlucHV0IHRvIHRoZSBmcm9udCBvZiB0aGUgbGlzdCBvZgogICAgcGNicyBzbyB0aGF0IGl0IGlzIGZvdW5kIGZhc3RlciBuZXh0IHRpbWUuIFNhbWUgZm9yIFJBVyBwY2JzIHRoYXQgaGF2ZSBlYXRlbgogICAgYSBwYWNrZXQuCgogIDIwMDctMTEtMjggU2ltb24gR29sZHNjaG1pZHQKICAqIGV0aGFycC5jLCBzdGF0cy5jLCBzdGF0cy5oLCBvcHQuaDogSW50cm9kdWNlZCBFVEhBUlBfU1RBVFMKCiAgMjAwNy0xMS0yNSBTaW1vbiBHb2xkc2NobWlkdAogICogZGhjcC5jOiBkaGNwX3VuZm9sZF9yZXBseSgpIHVzZXMgcGJ1Zl9jb3B5X3BhcnRpYWwgaW5zdGVhZCBvZiBpdHMgb3duIGNvcHkKICAgIGFsZ29yaXRobS4KCiAgMjAwNy0xMS0yNCBTaW1vbiBHb2xkc2NobWlkdAogICogbmV0ZGIuaCwgbmV0ZGIuYywgc29ja2V0cy5oLy5jOiBNb3ZlZCBsd2lwX2dldGhvc3RieW5hbWUgZnJvbSBzb2NrZXRzLmMKICAgIHRvIHRoZSBuZXcgZmlsZSBuZXRkYi5jOyBpbmNsdWRlZCBsd2lwX2dldGFkZHJpbmZvLgoKICAyMDA3LTExLTIxIFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3AuaCwgb3B0LmgsIHRjcC5jLCB0Y3BfaW4uYzogaW1wbGVtZW50ZWQgY2FsY3VsYXRpbmcgdGhlIGVmZmVjdGl2ZSBzZW5kLW1zcwogICAgYmFzZWQgb24gdGhlIE1UVSBvZiB0aGUgbmV0aWYgdXNlZCB0byBzZW5kLiBFbmFibGVkIGJ5IGRlZmF1bHQuIERpc2FibGUgYnkKICAgIHNldHRpbmcgTFdJUF9DQUxDVUxBVEVfRUZGX1NFTkRfTVNTIHRvIDAuIFRoaXMgZml4ZXMgYnVnICMyMTQ5Mi4KCiAgMjAwNy0xMS0xOSBGculk6XJpYyBCZXJub24KICAqIGFwaV9tc2cuYywgZG5zLmgsIGRucy5jOiBJbXBsZW1lbnQgRE5TX0RPRVNfTkFNRV9DSEVDSyBvcHRpb24gKGNoZWNrIGlmIG5hbWUKICAgIHJlY2VpdmVkIG1hdGNoIHRoZSBuYW1lIHF1ZXJ5KSwgaW1wbGVtZW50IEROU19VU0VTX1NUQVRJQ19CVUYgKHRoZSBwbGFjZSB3aGVyZQogICAgY29weSBkbnMgcGF5bG9hZCB0byBwYXJzZSB0aGUgcmVzcG9uc2UpLCByZXR1cm4gYW4gZXJyb3IgaWYgdGhlcmUgaXMgbm8gcGxhY2UKICAgIGZvciBhIG5ldyBxdWVyeSwgYW5kIGZpeCBzb21lIG1pbm9yIHByb2JsZW1zLgoKICAyMDA3LTExLTE2IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBuZXcgZmlsZXM6IGlwdjQvaW5ldC5jLCBpcHY0L2luZXRfY2hrc3VtLmMsIGlwdjYvaW5ldDYuYwogICAgcmVtb3ZlZCBmaWxlczogY29yZS9pbmV0LmMsIGNvcmUvaW5ldDYuYwogICAgTW92ZWQgaW5ldCBmaWxlcyBpbnRvIGlwdjQvaXB2NiBkaXJlY3Rvcnk7IHNwbGl0dGVkIGluZXQuYy9pbmV0LmggaW50bwogICAgaW5ldCBhbmQgY2hrc3VtIHBhcnQ7IGNoYW5nZWQgaW5jbHVkZXMgaW4gYWxsIGx3SVAgZmlsZXMgYXMgYXBwcm9wcmlhdGUKCiAgMjAwNy0xMS0xNiBTaW1vbiBHb2xkc2NobWlkdAogICogYXBpLmgsIGFwaV9tc2cuaCwgYXBpX2xpYi5jLCBhcGlfbXNnLmMsIHNvY2tldC5oLCBzb2NrZXQuYzogQWRkZWQgc2VxdWVudGlhbAogICAgZG5zIHJlc29sdmVyIGZ1bmN0aW9uIGZvciBuZXRjb25uIGFwaSAobmV0Y29ubl9nZXRob3N0YnluYW1lKSBhbmQgc29ja2V0IGFwaQogICAgKGdldGhvc3RieW5hbWUvZ2V0aG9zdGJ5bmFtZV9yKS4KCiAgMjAwNy0xMS0xNSBKaW0gUGV0dGluYXRvLCBGculk6XJpYyBCZXJub24KICAqIG9wdC5oLCBpbml0LmMsIHRjcGlwLmMsIGRoY3AuYywgZG5zLmgsIGRucy5jOiBhZGQgRE5TIGNsaWVudCBmb3Igc2ltcGxlIG5hbWUKICAgIHJlcXVlc3RzIHdpdGggUkFXIGFwaSBpbnRlcmZhY2UuIEluaXRpYWxpemF0aW9uIGlzIGRvbmUgaW4gbHdpcF9pbml0KCkgd2l0aAogICAgYnVpbGQgdGltZSBvcHRpb25zLiBETlMgdGltZXIgaXMgYWRkZWQgaW4gdGNwaXBfdGhyZWFkIGNvbnRleHQuIERIQ1AgY2FuIHNldAogICAgRE5TIHNlcnZlciBpcCBhZGRyZXNzZXMgd2hlbiBvcHRpb25zIGFyZSByZWNlaXZlZC4gWW91IG5lZWQgdG8gc2V0IExXSVBfRE5TPTEKICAgIGluIHlvdXIgbHdpcG9wdHMuaCBmaWxlIChMV0lQX0ROUz0wIGluIG9wdC5oKS4gRE5TX0RFQlVHIGNhbiBiZSBzZXQgdG8gZ2V0CiAgICBzb21lIHRyYWNlcyB3aXRoIExXSVBfREVCVUdGLiBTYW5pdHkgY2hlY2sgaGF2ZSBiZWVuIGFkZGVkLiBUaGVyZSBpcyBhICJ0b2RvIgogICAgbGlzdCB3aXRoIHBvaW50cyB0byBpbXByb3ZlLgoKICAyMDA3LTExLTA2IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBvcHQuaCwgbWliMi5jOiBQYXRjaCAjNjIxNTogYWRkZWQgaWZBZG1pblN0YXR1cyB3cml0ZSBzdXBwb3J0IChpZiBleHBsaWNpdGx5CiAgICBlbmFibGVkIGJ5IGRlZmluaW5nIFNOTVBfU0FGRV9SRVFVRVNUUyB0byAwKTsgYWRkZWQgY29kZSB0byBjaGVjayBsaW5rIHN0YXR1cwogICAgZm9yIGlmT3BlclN0YXR1cyBpZiBMV0lQX05FVElGX0xJTktfQ0FMTEJBQ0sgaXMgZGVmaW5lZC4KCiAgMjAwNy0xMS0wNiBTaW1vbiBHb2xkc2NobWlkdAogICogYXBpLmgsIGFwaV9tc2cuaCBhbmQgZGVwZW5kZW50IGZpbGVzOiBUYXNrICM3NDEwOiBSZW1vdmVkIHRoZSBuZWVkIHRvIGluY2x1ZGUKICAgIGNvcmUgaGVhZGVyIGZpbGVzIGluIGFwaS5oIChpcC90Y3AvdWRwL3Jhdy5oKSB0byBoaWRlIHRoZSBpbnRlcm5hbAogICAgaW1wbGVtZW50YXRpb24gZnJvbSBuZXRjb25uIGFwaSBhcHBsaWNhdGlvbnMuCgogIDIwMDctMTEtMDMgRnLpZOlyaWMgQmVybm9uCiAgKiBhcGkuaCwgYXBpX2xpYi5jLCBhcGlfbXNnLmMsIHNvY2tldHMuYywgb3B0Lmg6IGFkZCBTT19SQ1ZCVUYgb3B0aW9uIGZvciBVRFAgJgogICAgUkFXIG5ldGNvbm4uIFlvdSBuZWVkIHRvIHNldCBMV0lQX1NPX1JDVkJVRj0xIGluIHlvdXIgbHdpcG9wdHMuaCAoaXQncyBkaXNhYmxlZAogICAgYnkgZGVmYXVsdCkuIE5ldGNvbm4gQVBJIHVzZXJzIGNhbiB1c2UgdGhlIG5ldGNvbm5fcmVjdl9idWZzaXplIG1hY3JvIHRvIGFjY2VzcwogICAgaXQuIFRoaXMgaXMgYSBmaXJzdCByZWxlYXNlIHdoaWNoIGhhdmUgdG8gYmUgaW1wcm92ZSBmb3IgVENQLiBOb3RlIGl0IHVzZWQgdGhlCiAgICBuZXRjb25uOjpyZWN2X2F2YWlsIHdoaWNoIG5lZWQgdG8gYmUgbW9yZSAidGhyZWFkLXNhZmUiIChub3RlIHRoZXJlIGlzIGFscmVhZHkKICAgIHRoZSBwcm9ibGVtIGZvciBGSU9OUkVBRCB3aXRoIGx3aXBfaW9jdGwvaW9jdGxzb2NrZXQpLgoKICAyMDA3LTExLTAxIEZy6WTpcmljIEJlcm5vbiwgTWFyYyBDaGFsYW5kCiAgKiBzb2NrZXRzLmgsIHNvY2tldHMuYywgYXBpLmgsIGFwaV9saWIuYywgYXBpX21zZy5oLCBhcGlfbXNnLmMsIHRjcC5oLCB0Y3Bfb3V0LmM6CiAgICBJbnRlZ3JhdGUgInBhdGNoICM2MjUwIDogTVNHX01PUkUgZmxhZyBmb3Igc2VuZCIuIE1TR19NT1JFIGlzIHVzZWQgYXQgc29ja2V0IGFwaQogICAgbGF5ZXIsIE5FVENPTk5fTU9SRSBhdCBuZXRjb25uIGFwaSBsYXllciwgYW5kIFRDUF9XUklURV9GTEFHX01PUkUgYXQgcmF3IGFwaQogICAgbGF5ZXIuIFRoaXMgb3B0aW9uIGVuYWJsZSB0byBkZWxheWVkIFRDUCBQVVNIIGZsYWcgb24gbXVsdGlwbGUgIndyaXRlIiBjYWxscy4KICAgIE5vdGUgdGhhdCBwcmV2aW91cyAiY29weSIgcGFyYW1ldGVyIGZvciAid3JpdGUiIEFQSXMgaXMgbm93IGNhbGxlZCAiYXBpZmxhZ3MiLgoKICAyMDA3LTEwLTI0IEZy6WTpcmljIEJlcm5vbgogICogYXBpLmgsIGFwaV9saWIuYywgYXBpX21zZy5jOiBBZGQgbWFjcm8gQVBJX0VWRU5UIGluIHRoZSBzYW1lIHNwaXJpdCB0aGFuIAogICAgVENQX0VWRU5UX3h4eCBtYWNyb3MgdG8gZ2V0IGEgY29kZSBtb3JlIHJlYWRhYmxlLiBJdCBjb3VsZCBhbHNvIGhlbHAgdG8gcmVtb3ZlCiAgICBzb21lIGNvZGUgKGxpa2Ugd2UgaGF2ZSB0YWxrIGluICJwYXRjaCAjNTkxOSA6IENyZWF0ZSBjb21waWxlIHN3aXRjaCB0byByZW1vdmUKICAgIHNlbGVjdCBjb2RlIiksIGJ1dCBpdCBjb3VsZCBiZSBkb25lIGxhdGVyLgoKICAyMDA3LTEwLTA4IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBtYW55IGZpbGVzOiBDaGFuZ2VkIGluaXRpYWxpemF0aW9uOiBtYW55IGluaXQgZnVuY3Rpb25zIGFyZSBub3QgbmVlZGVkIGFueQogICAgbW9yZSBzaW5jZSB3ZSBub3cgcmVseSBvbiB0aGUgY29tcGlsZXIgaW5pdGlhbGl6aW5nIGdsb2JhbCBhbmQgc3RhdGljCiAgICB2YXJpYWJsZXMgdG8gemVybyEKCiAgMjAwNy0xMC0wNiBTaW1vbiBHb2xkc2NobWlkdAogICogaXBfZnJhZy5jLCBtZW1wLmMsIG1pYjIuYywgaXBfZnJhZy5oLCBtZW1wX3N0ZC5oLCBvcHQuaDogQ2hhbmdlZCBJUF9SRUFTU0VNQkxZCiAgICB0byBlbnF1ZXVlIHRoZSByZWNlaXZlZCBwYnVmcyBzbyB0aGF0IG11bHRpcGxlIHBhY2tldHMgY2FuIGJlIHJlYXNzZW1ibGVkCiAgICBzaW11bHRhbmVvdXNseSBhbmQgbm8gc3RhdGljIHJlYXNzZW1ibHkgYnVmZmVyIGlzIG5lZWRlZC4KCiAgMjAwNy0xMC0wNSBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwaXAuYywgZXRoYXJwLmgsIGV0aGFycC5jOiBtb3ZlZCBldGhlcm5ldF9pbnB1dCBmcm9tIHRjcGlwLmMgdG8gZXRoYXJwLmMgc28KICAgIGFsbCBuZXRpZnMgKG9yIHBvcnRzKSBjYW4gdXNlIGl0LgoKICAyMDA3LTEwLTA1IEZy6WTpcmljIEJlcm5vbgogICogbmV0aWZhcGkuaCwgbmV0aWZhcGkuYzogYWRkIGZ1bmN0aW9uIG5ldGlmYXBpX25ldGlmX3NldF9kZWZhdWx0LiBDaGFuZ2UgdGhlIAogICAgY29tbW9uIGZ1bmN0aW9uIHRvIHJlZHVjZSBhIGxpdHRsZSBiaXQgdGhlIGZvb3RwcmludCAoZm9yIGFsbCBmdW5jdGlvbnMgdXNpbmcKICAgIG9ubHkgdGhlICJuZXRpZiIgcGFyYW1ldGVyKS4KCiAgMjAwNy0xMC0wMyBGculk6XJpYyBCZXJub24KICAqIG5ldGlmYXBpLmgsIG5ldGlmYXBpLmM6IGFkZCBmdW5jdGlvbnMgbmV0aWZhcGlfbmV0aWZfc2V0X3VwLCBuZXRpZmFwaV9uZXRpZl9zZXRfZG93biwKICAgIG5ldGlmYXBpX2F1dG9pcF9zdGFydCBhbmQgbmV0aWZhcGlfYXV0b2lwX3N0b3AuIFVzZSBhIGNvbW1vbiBmdW5jdGlvbiB0byByZWR1Y2UKICAgIGEgbGl0dGxlIGJpdCB0aGUgZm9vdHByaW50IChmb3IgYWxsIGZ1bmN0aW9ucyB1c2luZyBvbmx5IHRoZSAibmV0aWYiIHBhcmFtZXRlcikuCgogIDIwMDctMDktMTUgRnLpZOlyaWMgQmVybm9uCiAgKiB1ZHAuaCwgdWRwLmMsIHNvY2tldHMuYzogQ2hhbmdlcyBmb3IgIiMyMDUwMyBJR01QIEltcHJvdmVtZW50Ii4gQWRkIElQX01VTFRJQ0FTVF9JRgogICAgb3B0aW9uIGluIHNvY2tldCBBUEksIGFuZCBhIG5ldyBmaWVsZCAibXVsdGljYXN0X2lwIiBpbiAic3RydWN0IHVkcF9wY2IiIChmb3IKICAgIG5ldGNvbm4gYW5kIHJhdyBBUEkgdXNlcnMpLCBvbmx5IGlmIExXSVBfSUdNUD0xLiBBZGQgZ2V0c29ja29wdCBwcm9jZXNzaW5nIGZvcgogICAgSVBfTVVMVElDQVNUX1RUTCBhbmQgSVBfTVVMVElDQVNUX0lGLgoKICAyMDA3LTA5LTEwIEZy6WTpcmljIEJlcm5vbgogICogc25tcC5oLCBtaWIyLmM6IGVuYWJsZSB0byByZW1vdmUgU05NUCB0aW1lciAod2hpY2ggY29uc3VtbmUgc2V2ZXJhbCBjeWNsZXMKICAgIGV2ZW4gd2hlbiBpdCdzIG5vdCBuZWNlc3NhcnkpLiBzbm1wX2FnZW50LnR4dCB0ZWxsIHRvIGNhbGwgc25tcF9pbmNfc3lzdXB0aW1lKCkKICAgIGVhY2ggMTBtcyAoYnV0LCBpdCdzIGludHJ1c2l2ZSBpZiB5b3UgdXNlIHN5c190aW1lb3V0IGZlYXR1cmUpLiBOb3csIHlvdSBjYW4KICAgIGRlY2lkZSB0byBjYWxsIHNubXBfYWRkX3N5c3VwdGltZSgxMDApIGVhY2ggMTAwMG1zICh3aGljaCBpcyBiaWdnZXIgInN0ZXAiLCBidXQKICAgIGNhbGwgdG8gYSBsb3dlciBmcmVxdWVuY3kpLiBPciwgeW91IGNhbiBkZWNpZGUgdG8gbm90IGNhbGwgc25tcF9pbmNfc3lzdXB0aW1lKCkKICAgIG9yIHNubXBfYWRkX3N5c3VwdGltZSgpLCBhbmQgdG8gZGVmaW5lIHRoZSBTTk1QX0dFVF9TWVNVUFRJTUUoc3lzdXB0aW1lKSBtYWNyby4KICAgIFRoaXMgb25lIGlzIHVuZGVmaW5lZCBieSBkZWZhdWx0IGluIG1pYjIuYy4gU05NUF9HRVRfU1lTVVBUSU1FIGlzIGNhbGxlZCBpbnNpZGUKICAgIHNubXBfZ2V0X3N5c3VwdGltZSh1MzJfdCAqdmFsdWUpLCBhbmQgZW5hYmxlIHRvIGNoYW5nZSAic3lzdXB0aW1lIiB2YWx1ZSBvbmx5CiAgICB3aGVuIGl0J3MgcXVlcmllZCAoYW55IGRpcmVjdCBjYWxsIHRvICJzeXN1cHRpbWUiIGlzIGNoYW5nZWQgYnkgYSBjYWxsIHRvIAogICAgc25tcF9nZXRfc3lzdXB0aW1lKS4KCiAgMjAwNy0wOS0wOSBGculk6XJpYyBCZXJub24sIEJpbGwgRmxvcmFjCiAgKiBpZ21wLmgsIGlnbXAuYywgbmV0aWYuaCwgbmV0aWYuYywgaXAuYzogVG8gZW5hYmxlIHRvIGhhdmUgaW50ZXJmYWNlcyB3aXRoIElHTVAsCiAgICBhbmQgb3RoZXJzIHdpdGhvdXQgaXQsIHRoZXJlIGlzIGEgbmV3IE5FVElGX0ZMQUdfSUdNUCBmbGFnIHRvIHNldCBpbiBuZXRpZi0+ZmxhZ3MKICAgIGlmIHlvdSB3YW50IElHTVAgb24gYW4gaW50ZXJmYWNlLiBpZ21wX3N0b3AoKSBpcyBub3cgY2FsbGVkIGluc2lkZSBuZXRpZl9yZW1vdmUoKS4KICAgIGlnbXBfcmVwb3J0X2dyb3VwcygpIGlzIG5vdyBjYWxsZWQgaW5zaWRlIG5ldGlmX3NldF9saW5rX3VwKCkgKG5lZWQgdG8gaGF2ZQogICAgTFdJUF9ORVRJRl9MSU5LX0NBTExCQUNLPTEpIHRvIHJlc2VuZCByZXBvcnRzIG9uY2UgdGhlIGxpbmsgaXMgdXAgKGF2b2lkIHRvIHdhaXQKICAgIHRoZSBuZXh0IHF1ZXJ5IG1lc3NhZ2UgdG8gcmVjZWl2ZSB0aGUgbWF0Y2hpbmcgbXVsdGljYXN0IHN0cmVhbXMpLgoKICAyMDA3LTA5LTA4IEZy6WTpcmljIEJlcm5vbgogICogc29ja2V0cy5jLCBpcC5oLCBhcGkuaCwgdGNwLmg6IGRlY2xhcmUgYSAic3RydWN0IGlwX3BjYiIgd2hpY2ggb25seSBjb250YWlucwogICAgSVBfUENCLiBBZGQgaW4gdGhlIG5ldGNvbm4ncyAicGNiIiB1bmlvbiBhICJzdHJ1Y3QgaXBfcGNiICppcDsiIChubyBzaXplIGNoYW5nZSkuCiAgICBVc2UgdGhpcyBuZXcgZmllbGQgdG8gYWNjZXNzIHRvIGNvbW1vbiBwY2IgZmllbGRzICh0dGwsIHRvcywgc29fb3B0aW9ucywgZXRjLi4uKS4KICAgIEVuYWJsZSB0byBhY2Nlc3MgdG8gdGhlc2UgZmllbGRzIHdpdGggTFdJUF9UQ1A9MC4KCiAgMjAwNy0wOS0wNSBGculk6XJpYyBCZXJub24KICAqIHVkcC5jLCBpcHY0L2ljbXAuYywgaXB2NC9pcC5jLCBpcHY2L2ljbXAuYywgaXB2Ni9pcDYuYywgaXB2NC9pY21wLmgsCiAgICBpcHY2L2ljbXAuaCwgb3B0Lmg6IEludGVncmF0ZSAidGFzayAjNzI3MiA6IExXSVBfSUNNUCBvcHRpb24iLiBUaGUgbmV3IG9wdGlvbgogICAgTFdJUF9JQ01QIGVuYWJsZS9kaXNhYmxlIElDTVAgbW9kdWxlIGluc2lkZSB0aGUgSVAgc3RhY2sgKGVuYWJsZSBwZXIgZGVmYXVsdCkuCiAgICBCZSBjYXJlZnVsLCBkaXNhYmxpbmcgSUNNUCBtYWtlIHlvdXIgcHJvZHVjdCBub24tY29tcGxpYW50IHRvIFJGQzExMjIsIGJ1dAogICAgaGVscCB0byByZWR1Y2UgZm9vdHByaW50LCBhbmQgdG8gcmVkdWNlICJ2aXNpYmlsaXR5IiBvbiB0aGUgSW50ZXJuZXQuCgogIDIwMDctMDktMDUgRnLpZOlyaWMgQmVybm9uLCBCaWxsIEZsb3JhYwogICogb3B0LmgsIHN5cy5oLCB0Y3BpcC5jLCBzbGlwaWYuYywgcHBwLmMsIHN5c19hcmNoLnR4dDogQ2hhbmdlIHBhcmFtZXRlcnMgbGlzdAogICAgZm9yIHN5c190aHJlYWRfbmV3IChzZWUgInRhc2sgIzcyNTIgOiBDcmVhdGUgc3lzX3RocmVhZF9uZXdfZXgoKSIpLiBUd28gbmV3CiAgICBwYXJhbWV0ZXJzIGhhdmUgdG8gYmUgcHJvdmlkZWQ6IGEgdGFzayBuYW1lLCBhbmQgYSB0YXNrIHN0YWNrIHNpemUuIEZvciB0aGlzCiAgICBvbmUsIHNpbmNlIGl0J3MgcGxhdGZvcm0gZGVwZW5kYW50LCB5b3UgY291bGQgZGVmaW5lIHRoZSBiZXN0IG9uZSBmb3IgeW91IGluCiAgICB5b3VyIGx3aXBvcHRzLmguIEZvciBwb3J0IG1haW50YWluZXJzLCB5b3UgY2FuIGp1c3QgYWRkIHRoZXNlIG5ldyBwYXJhbWV0ZXJzCiAgICBpbiB5b3VyIHN5c19hcmNoLmMgZmlsZSwgYW5kIGJ1dCBpdCdzIG5vdCBtYW5kYXRvcnksIHVzZSB0aGVtIGluIHlvdXIgT1MKICAgIHNwZWNpZmljIGZ1bmN0aW9ucy4KCiAgMjAwNy0wOS0wNSBGculk6XJpYyBCZXJub24KICAqIGluZXQuYywgYXV0b2lwLmMsIG1zZ19pbi5jLCBtc2dfb3V0LmMsIGluaXQuYzogTW92ZSBzb21lIGJ1aWxkIHRpbWUgY2hlY2tpbmdzCiAgICBpbnNpZGUgaW5pdC5jIGZvciB0YXNrICM3MTQyICJTYW5pdHkgY2hlY2sgdXNlci1jb25maWd1cmFibGUgdmFsdWVzIi4KCiAgMjAwNy0wOS0wNCBGculk6XJpYyBCZXJub24sIEJpbGwgRmxvcmFjCiAgKiBpZ21wLmgsIGlnbXAuYywgbWVtcF9zdGQuaCwgbWVtcC5jLCBpbml0LmMsIG9wdC5oOiBSZXBsYWNlIG1lbV9tYWxsb2MgY2FsbCBieQogICAgbWVtcF9tYWxsb2MsIGFuZCB1c2UgYSBuZXcgTUVNUF9OVU1fSUdNUF9HUk9VUCBvcHRpb24gKHNlZSBvcHQuaCB0byBkZWZpbmUgdGhlCiAgICB2YWx1ZSkuIEl0IHdpbGwgYXZvaWQgcG90ZW50aWFsIGZyYWdtZW50YXRpb24gcHJvYmxlbXMsIHVzZSBhIGNvdW50ZXIgdG8ga25vdwogICAgaG93IG1hbnkgdGltZXMgYSBncm91cCBpcyB1c2VkIG9uIGFuIG5ldGlmLCBhbmQgZnJlZSBpdCB3aGVuIGFsbCBhcHBsaWNhdGlvbnMKICAgIGxlYXZlIGl0LiBNRU1QX05VTV9JR01QX0dST1VQIGdvdCA4IGFzIGRlZmF1bHQgdmFsdWUgKGFuZCBpbml0LmMgZ290IGEgc2FuaXR5CiAgICBjaGVjayBpZiBMV0lQX0lHTVAhPTApLgoKICAyMDA3LTA5LTAzIEZy6WTpcmljIEJlcm5vbgogICogaWdtcC5oLCBpZ21wLmMsIHNvY2tldHMuYywgYXBpX21zZy5jOiBDaGFuZ2VzIGZvciAiIzIwNTAzIElHTVAgSW1wcm92ZW1lbnQiLgogICAgSW5pdGlhbGl6ZSBpZ21wX21hY19maWx0ZXIgdG8gTlVMTCBpbiBuZXRpZl9hZGQgKHRoaXMgZmllbGQgc2hvdWxkIGJlIHNldCBpbgogICAgdGhlIG5ldGlmJ3MgImluaXQiIGZ1bmN0aW9uKS4gVXNlIHRoZSAiaW1yX2ludGVyZmFjZSIgZmllbGQgKGZvciBzb2NrZXQgbGF5ZXIpCiAgICBhbmQvb3IgdGhlICJpbnRlcmZhY2UiIGZpZWxkIChmb3IgbmV0Y29ubiBsYXllciksIGZvciBqb2luL2xlYXZlIG9wZXJhdGlvbnMuCiAgICBUaGUgaWdtcF9qb2luL2xlYXZlZ3JvdXAgZmlyc3QgcGFyYW1ldGVyIGNoYW5nZSBmcm9tIGEgbmV0aWYgdG8gYW4gaXBhZGRyLgogICAgVGhpcyBmaWVsZCBjb3VsZCBiZSBhIG5ldGlmJ3MgaXBhZGRyLCBvciAiYW55IiAoc2FtZSBtZWFuaW5nIHRoYW4gaXBfYWRkcl9pc2FueSkuCgogIDIwMDctMDgtMzAgRnLpZOlyaWMgQmVybm9uCiAgKiBBZGQgbmV0YnVmLmgsIG5ldGJ1Zi5jLCBDaGFuZ2UgYXBpLmgsIGFwaV9saWIuYzogIzcyNDkgIlNwbGl0IG5ldGJ1ZiBmdW5jdGlvbnMKICAgIGZyb20gYXBpL2FwaV9saWIiLiBOb3cgbmV0YnVmIEFQSSBpcyBpbmRlcGVuZGFudCBvZiBuZXRjb25uLCBhbmQgY2FuIGJlIHVzZWQKICAgIHdpdGggb3RoZXIgQVBJIChhcHBsaWNhdGlvbiBiYXNlZCBvbiByYXcgQVBJLCBvciBmdXR1cmUgInNvY2tldDIiIEFQSSkuIFBvcnRzCiAgICBtYWludGFpbmVycyBqdXN0IGhhdmUgdG8gYWRkIHNyYy9hcGkvbmV0YnVmLmMgaW4gdGhlaXIgbWFrZWZpbGUvcHJvamVjdHMuCgogIDIwMDctMDgtMzAgRnLpZOlyaWMgQmVybm9uLCBKb25hdGhhbiBMYXJtb3VyCiAgKiBpbml0LmM6IEFkZCBmaXJzdCB2ZXJzaW9uIG9mIGx3aXBfc2FuaXR5X2NoZWNrIGZvciB0YXNrICM3MTQyICJTYW5pdHkgY2hlY2sKICAgIHVzZXItY29uZmlndXJhYmxlIHZhbHVlcyIuCgogIDIwMDctMDgtMjkgRnLpZOlyaWMgQmVybm9uCiAgKiBpZ21wLmgsIGlnbXAuYywgdGNwaXAuYywgaW5pdC5jLCBuZXRpZi5jOiBjaGFuZ2UgaWdtcF9pbml0IGFuZCBhZGQgaWdtcF9zdGFydC4KICAgIGlnbXBfc3RhcnQgaXMgY2FsbCBpbnNpZGUgbmV0aWZfYWRkLiBOb3csIGlnbXAgaW5pdGlhbGl6YXRpb24gaXMgaW4gdGhlIHNhbWUKICAgIHNwaXJpdCB0aGFuIHRoZSBvdGhlcnMgbW9kdWxlcy4gTW9kaWZ5IHNvbWUgSUdNUCBkZWJ1ZyB0cmFjZXMuCgogIDIwMDctMDgtMjkgRnLpZOlyaWMgQmVybm9uCiAgKiBBZGQgaW5pdC5oLCBpbml0LmMsIENoYW5nZSBvcHQuaCwgdGNwaXAuYzogVGFzayAgIzcyMTMgIkFkZCBhIGx3aXBfaW5pdCBmdW5jdGlvbiIKICAgIEFkZCBsd2lwX2luaXQgZnVuY3Rpb24gdG8gcmVncm91cCBhbGwgbW9kdWxlcyBpbml0aWFsaXphdGlvbnMsIGFuZCB0byBwcm92aWRlCiAgICBhIHBsYWNlIHRvIGFkZCBjb2RlIGZvciB0YXNrICM3MTQyICJTYW5pdHkgY2hlY2sgdXNlci1jb25maWd1cmFibGUgdmFsdWVzIi4KICAgIFBvcnRzIG1haW50YWluZXJzIHNob3VsZCByZW1vdmUgZGlyZWN0IGluaXRpYWxpemF0aW9ucyBjYWxscyBmcm9tIHRoZWlyIGNvZGUsCiAgICBhbmQgYWRkIGluaXQuYyBpbiB0aGVpciBtYWtlZmlsZXMuIE5vdGUgdGhhdCBsd2lwX2luaXQoKSBmdW5jdGlvbiBpcyBjYWxsZWQKICAgIGluc2lkZSB0Y3BpcF9pbml0LCBidXQgY2FuIGFsc28gYmUgdXNlZCBieSByYXcgYXBpIHVzZXJzIHNpbmNlIGFsbCBjYWxscyBhcmUKICAgIGRpc2FibGVkIHdoZW4gbWF0Y2hpbmcgb3B0aW9ucyBhcmUgZGlzYWJsZWQuIEFsc28gbm90ZSB0aGF0IHRoZWlyIGlzIG5ldyBvcHRpb25zCiAgICBpbiBvcHQuaCwgeW91IHNob3VsZCBjb25maWd1cmUgaW4geW91ciBsd2lwb3B0cy5oICh0aGV5IGFyZSBlbmFibGVkIHBlciBkZWZhdWx0KS4KCiAgMjAwNy0wOC0yNiBNYXJjIEJvdWNoZXIKICAqIGFwaV9tc2cuYzogZG9fY2xvc2VfaW50ZXJuYWwoKTogUmVzZXQgdGhlIGNhbGxiYWNrcyBhbmQgYXJnIChjb25uKSB0byBOVUxMCiAgICBzaW5jZSB0aGV5IGNhbiB1bmRlciBjZXJ0YWluIGNpcmN1bXN0YW5jZXMgYmUgY2FsbGVkIHdpdGggYW4gaW52YWxpZCBjb25uCiAgICBwb2ludGVyIGFmdGVyIHRoZSBjb25uZWN0aW9uIGhhcyBiZWVuIGNsb3NlZCAoYW5kIGNvbm4gaGFzIGJlZW4gZnJlZWQpLiAKCiAgMjAwNy0wOC0yNSBGculk6XJpYyBCZXJub24gKEFydGVtIE1pZ2FldidzIFBhdGNoKQogICogbmV0aWYuaCwgbmV0aWYuYzogSW50ZWdyYXRlICJwYXRjaCAjNjE2MyA6IEZ1bmN0aW9uIHRvIGNoZWNrIGlmIGxpbmsgbGF5ZXIgaXMgdXAiLgogICAgQWRkIGEgbmV0aWZfaXNfbGlua191cCgpIGZ1bmN0aW9uIGlmIExXSVBfTkVUSUZfTElOS19DQUxMQkFDSyBvcHRpb24gaXMgc2V0LgoKICAyMDA3LTA4LTIyIEZy6WTpcmljIEJlcm5vbgogICogbmV0aWYuaCwgbmV0aWYuYywgb3B0Lmg6IFJlbmFtZSBMV0lQX05FVElGX0NBTExCQUNLIGluIExXSVBfTkVUSUZfU1RBVFVTX0NBTExCQUNLCiAgICB0byBiZSBjb2hlcmVudCB3aXRoIG5ldyBMV0lQX05FVElGX0xJTktfQ0FMTEJBQ0sgb3B0aW9uIGJlZm9yZSBuZXh0IHJlbGVhc2UuCgogIDIwMDctMDgtMjIgRnLpZOlyaWMgQmVybm9uCiAgKiB0Y3BpcC5oLCB0Y3BpcC5jLCBldGhlcm5ldGlmLmMsIG9wdC5oOiByZW1vdmUgb3B0aW9ucyBFVEhBUlBfVENQSVBfSU5QVVQgJgogICAgRVRIQVJQX1RDUElQX0VUSElOUFVULCBub3csIG9ubHkgImV0aGlucHV0IiBjb2RlIGlzIHN1cHBvcnRlZCwgZXZlbiBpZiB0aGUgCiAgICBuYW1lIGlzIHRjcGlwX2lucHV0ICh3ZSBrZWVwIHRoZSBuYW1lIG9mIDEuMi4wIGZ1bmN0aW9uKS4KCiAgMjAwNy0wOC0xNyBKYXJlZCBHcnViYgogICogbWVtcF9zdGQuaCwgbWVtcC5oLCBtZW1wLmMsIG1lbS5jLCBzdGF0cy5jOiAoVGFzayAjNzEzNikgQ2VudHJhbGl6ZSBtZW1wb29sIAogICAgc2V0dGluZ3MgaW50byBuZXcgbWVtcF9zdGQuaCBhbmQgb3B0aW9uYWwgdXNlciBmaWxlIGx3aXBwb29scy5oLiBUaGlzIGFkZHMKICAgIG1vcmUgZHluYW1pYyBtZW1wb29scywgYW5kIGFsbG93cyB0aGUgdXNlciB0byBjcmVhdGUgYW4gYXJiaXRyYXJ5IG51bWJlciBvZgogICAgbWVtcG9vbHMgZm9yIG1lbV9tYWxsb2MuCgogIDIwMDctMDgtMTYgTWFyYyBCb3VjaGVyCiAgKiBhcGlfbXNnLmM6IEluaXRpYWxpemUgbmV3Y29ubi0+c3RhdGUgdG8gTkVUQ09OTl9OT05FIGluIGFjY2VwdF9mdW5jdGlvbjsKICAgIG90aGVyd2lzZSBpdCB3YXMgbGVmdCB0byBORVRDT05OX0NMT1NFIGFuZCBzZW50X3RjcCgpIGNvdWxkIHByZW1hdHVyZWx5CiAgICBjbG9zZSB0aGUgY29ubmVjdGlvbi4KCiAgMjAwNy0wOC0xNiBNYXJjIEJvdWNoZXIKICAqIHNvY2tldHMuYzogbHdpcF9hY2NlcHQoKTogY2hlY2sgbmV0Y29ubl9wZWVyKCkgZXJyb3IgcmV0dXJuLgoKICAyMDA3LTA4LTE2IE1hcmMgQm91Y2hlcgogICogbWVtLmMsIG1lbS5oOiBBZGRlZCBtZW1fY2FsbG9jKCkuCgogIDIwMDctMDgtMTYgTWFyYyBCb3VjaGVyCiAgKiB0Y3BpcC5jLCB0Y3BpcC5oIG1lbXAuYywgbWVtcC5oOiBBZGRlZCBkaXN0aW5jdCBtZW1wIChNRU1QX1RDUElQX01TR19JTlBLVCkKICAgIGZvciBpbnB1dCBwYWNrZXRzIHRvIHByZXZlbnQgZmxvb2RzIGZyb20gY29uc3VtaW5nIGFsbCBvZiBNRU1QX1RDUElQX01TRwogICAgYW5kIHN0YXJ2aW5nIG90aGVyIG1lc3NhZ2UgdHlwZXMuCiAgICBSZW5hbWVkIE1FTVBfVENQSVBfTVNHIHRvIE1FTVBfVENQSVBfTVNHX0FQSQoKICAyMDA3LTA4LTE2IE1hcmMgQm91Y2hlcgogICogcGJ1Zi5jLCBwYnVmLmgsIGV0aGFycC5jLCB0Y3BfaW4uYywgc29ja2V0cy5jOiBTcGxpdCBwYnVmIGZsYWdzIGluIHBidWYKICAgIHR5cGUgYW5kIGZsZ3MgKGxhdGVyIHJlbmFtZWQgdG8gZmxhZ3MpLgogICAgVXNlIGVudW0gcGJ1Zl9mbGFnIGFzIHBidWZfdHlwZS4gIFJlbnVtYmVyIFBCVUZfRkxBR18qLgogICAgSW1wcm92ZWQgbHdpcF9yZWN2ZnJvbSgpLiAgVENQIHB1c2ggbm93IHByb3BhZ2F0ZWQuCgogIDIwMDctMDgtMTYgTWFyYyBCb3VjaGVyCiAgKiBldGhlcm5ldGlmLmMsIGNvbnRyaWIvcG9ydHMvdmFyaW91czogZXRoYnJvYWRjYXN0IG5vdyBhIHNoYXJlZCBnbG9iYWwKICAgIHByb3ZpZGVkIGJ5IGV0aGFycC4KCiAgMjAwNy0wOC0xNiBNYXJjIEJvdWNoZXIKICAqIHBwcF9vZS5jIHBwcF9vZS5oLCBhdXRoLmMgY2hhcC5jIGZzbS5jIGxjcC5jIHBwcC5jIHBwcC5oLAogICAgZXRoYXJwLmMgZXRoZXJuZXRpZi5jLCBldGhhcnAuaCwgb3B0LmggdGNwaXAuaCwgdGNwaXAuYzoKICAgIEFkZGVkIFBQUG9FIHN1cHBvcnQgYW5kIHZhcmlvdXMgUFBQIGltcHJvdmVtZW50cy4KCiAgMjAwNy0wNy0yNSBTaW1vbiBHb2xkc2NobWlkdAogICogYXBpX2xpYi5jLCBpcF9mcmFnLmMsIHBidWYuYywgYXBpLmgsIHBidWYuaDogSW50cm9kdWNlZCBwYnVmX2NvcHlfcGFydGlhbCwKICAgIG1ha2luZyBuZXRidWZfY29weV9wYXJ0aWFsIHVzZSB0aGlzIGZ1bmN0aW9uLgoKICAyMDA3LTA3LTI1IFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3BfaW4uYzogRml4IGJ1ZyAjMjA1MDY6IFNsb3cgc3RhcnQgLyBpbml0aWFsIGNvbmdlc3Rpb24gd2luZG93IHN0YXJ0cyB3aXRoCiAgICAyICogbXNzIChpbnN0ZWFkIG9mIDEgKiBtc3MgcHJldmlvdXNseSkgdG8gY29tcGx5IHdpdGggc29tZSBuZXdlciBSRkNzIGFuZAogICAgb3RoZXIgc3RhY2tzLgoKICAyMDA3LTA3LTEzIEphcmVkIEdydWJiIChpbnRlZ3JhdGVkIGJ5IEZy6WTpcmljIEJlcm5vbikKICAqIG9wdC5oLCBuZXRpZi5oLCBuZXRpZi5jLCBldGhlcm5ldGlmLmM6IEFkZCBuZXcgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gYWRkCiAgICBhIGxpbmsgY2FsbGJhY2sgaW4gdGhlIG5ldGlmIHN0cnVjdCwgYW5kIGZ1bmN0aW9ucyB0byBoYW5kbGUgaXQuIEJlIGNhcmVmdWxsCiAgICBmb3IgcG9ydCBtYWludGFpbmVycyB0byBhZGQgdGhlIE5FVElGX0ZMQUdfTElOS19VUCBmbGFnIChsaWtlIGluIGV0aGVybmV0aWYuYykKICAgIGlmIHlvdSB3YW50IHRvIGJlIHN1cmUgdG8gYmUgY29tcGF0aWJsZSB3aXRoIGZ1dHVyZSBjaGFuZ2VzLi4uCgogIDIwMDctMDYtMzAgRnLpZOlyaWMgQmVybm9uCiAgKiBzb2NrZXRzLmgsIHNvY2tldHMuYzogSW1wbGVtZW50IE1TR19QRUVLIGZsYWcgZm9yIHJlY3YvcmVjdmZyb20gZnVuY3Rpb25zLgoKICAyMDA3LTA2LTIxIFNpbW9uIEdvbGRzY2htaWR0CiAgKiBldGhhcnAuaCwgZXRoYXJwLmM6IENvbWJpbmVkIGV0aGFycF9yZXF1ZXN0IHdpdGggZXRoYXJwX3JhdyBmb3IgYm90aAogICAgTFdJUF9BVVRPSVAgPTAgYW5kID0xIHRvIHJlbW92ZSByZWR1bmRhbnQgY29kZS4KCiAgMjAwNy0wNi0yMSBTaW1vbiBHb2xkc2NobWlkdAogICogbWVtLmMsIG1lbXAuYywgbWVtLmgsIG1lbXAuaCwgb3B0Lmg6IHRhc2sgIzY4NjM6IEludHJvZHVjZWQgdGhlIG9wdGlvbgogICAgTUVNX1VTRV9QT09MUyB0byB1c2UgNCBwb29scyB3aXRoIGRpZmZlcmVudCBzaXplZCBlbGVtZW50cyBpbnN0ZWFkIG9mIGEKICAgIGhlYXAuIFRoaXMgYm90aCBwcmV2ZW50cyBtZW1vcnkgZnJhZ21lbnRhdGlvbiBhbmQgZ2l2ZXMgYSBoaWdoZXIgc3BlZWQKICAgIGF0IHRoZSBjb3N0IG9mIG1vcmUgbWVtb3J5IGNvbnN1bXB0aW9uLiBUdXJuZWQgb2ZmIGJ5IGRlZmF1bHQuCgogIDIwMDctMDYtMjEgU2ltb24gR29sZHNjaG1pZHQKICAqIGFwaV9saWIuYywgYXBpX21zZy5jLCBhcGkuaCwgYXBpX21zZy5oOiBDb252ZXJ0ZWQgdGhlIGxlbmd0aCBhcmd1bWVudCBvZgogICAgbmV0Y29ubl93cml0ZSAoYW5kIHRoZXJlZm9yZSBhbHNvIGFwaV9tc2dfbXNnLm1zZy53LmxlbikgZnJvbSB1MTZfdCBpbnRvCiAgICBpbnQgdG8gYmUgYWJsZSB0byBzZW5kIGEgYmlnZ2VyIGJ1ZmZlciB0aGFuIDY0SyB3aXRoIG9uZSB0aW1lIChtYWlubHkKICAgIHVzZWQgZnJvbSBsd2lwX3NlbmQpLgoKICAyMDA3LTA2LTIxIFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3AuaCwgYXBpX21zZy5jOiBNb3ZlZCB0aGUgbmFnbGUgYWxnb3JpdGhtIGZyb20gbmV0Y29ubl93cml0ZS9kb193cml0ZQogICAgaW50byBhIGRlZmluZSAodGNwX291dHB1dF9uYWdsZSkgaW4gdGNwLmggdG8gcHJvdmlkZSBpdCB0byByYXcgYXBpIHVzZXJzLCB0b28uCgogIDIwMDctMDYtMjEgU2ltb24gR29sZHNjaG1pZHQKICAqIGFwaS5oLCBhcGlfbGliLmMsIGFwaV9tc2cuYzogRml4ZWQgYnVnICMyMDAyMTogTW92ZWQgc2VuZGJ1Zi1wcm9jZXNzaW5nIGluCiAgICBuZXRjb25uX3dyaXRlIGZyb20gYXBpX2xpYi5jIHRvIGFwaV9tc2cuYyB0byBhbHNvIHByZXZlbnQgbXVsdGlwbGUgY29udGV4dC0KICAgIGNoYW5nZXMgb24gbG93IG1lbW9yeSBvciBlbXB0eSBzZW5kLWJ1ZmZlci4KCiAgMjAwNy0wNi0xOCBTaW1vbiBHb2xkc2NobWlkdAogICogZXRoYXJwLmMsIGV0aGFycC5oOiBDaGFuZ2VkIGV0aGFycCB0byB1c2UgYSBkZWZpbmVkIGhhcmR3YXJlIGFkZHJlc3MgbGVuZ3RoCiAgICBvZiA2IHRvIGF2b2lkIGxvYWRpbmcgbmV0aWYtPmh3YWRkcl9sZW4gZXZlcnkgdGltZSAoc2luY2UgdGhpcyBmaWxlIGlzIG9ubHkKICAgIHVzZWQgZm9yIGV0aGVybmV0IGFuZCBzdHJ1Y3QgZXRoX2FkZHIgYWxyZWFkeSBoYWQgYSBkZWZpbmVkIGxlbmd0aCBvZiA2KS4KCiAgMjAwNy0wNi0xNyBTaW1vbiBHb2xkc2NobWlkdAogICogc29ja2V0cy5jLCBzb2NrZXRzLmg6IEltcGxlbWVudGVkIHNvY2tldCBvcHRpb25zIFNPX05PX0NIRUNLIGZvciBVRFAgc29ja2V0cwogICAgdG8gZGlzYWJsZSBVRFAgY2hlY2tzdW0gZ2VuZXJhdGlvbiBvbiB0cmFuc21pdC4KCiAgMjAwNy0wNi0xMyBGculk6XJpYyBCZXJub24sIFNpbW9uIEdvbGRzY2htaWR0CiAgKiBkZWJ1Zy5oLCBhcGlfbXNnLmM6IGNoYW5nZSBMV0lQX0VSUk9SIHRvIHVzZSBpdCB0byBjaGVjayBlcnJvcnMgbGlrZSBpbnZhbGlkCiAgICBwb2ludGVycyBvciBwYXJhbWV0ZXJzLCBhbmQgbGV0IHRoZSBwb3NzaWJpbGl0eSB0byByZWRlZmluZWQgaXQgaW4gY2MuaC4gVXNlCiAgICB0aGlzIG1hY3JvIHRvIGNoZWNrICJjb25uIiBwYXJhbWV0ZXIgaW4gYXBpX21zZy5jIGZ1bmN0aW9ucy4KCiAgMjAwNy0wNi0xMSBTaW1vbiBHb2xkc2NobWlkdAogICogc29ja2V0cy5jLCBzb2NrZXRzLmg6IEFkZGVkIFVEUCBsaXRlIHN1cHBvcnQgZm9yIHNvY2tldHMKCiAgMjAwNy0wNi0xMCBTaW1vbiBHb2xkc2NobWlkdAogICogdWRwLmgsIG9wdC5oLCBhcGlfbXNnLmMsIGlwLmMsIHVkcC5jOiBJbmNsdWRlZCBzd2l0Y2ggTFdJUF9VRFBMSVRFIChlbmFibGVkCiAgICBieSBkZWZhdWx0KSB0byBzd2l0Y2ggb2ZmIFVEUC1MaXRlIHN1cHBvcnQgaWYgbm90IG5lZWRlZCAocmVkdWNlcyB1ZHAuYyBjb2RlCiAgICBzaXplKQoKICAyMDA3LTA2LTA5IERvbWluaWsgU3BpZXMgKGludGVncmF0ZWQgYnkgRnLpZOlyaWMgQmVybm9uKQogICogYXV0b2lwLmgsIGF1dG9pcC5jLCBkaGNwLmgsIGRoY3AuYywgbmV0aWYuaCwgbmV0aWYuYywgZXRoYXJwLmgsIGV0aGFycC5jLCBvcHQuaDoKICAgIEF1dG9JUCBpbXBsZW1lbnRhdGlvbiBhdmFpbGFibGUgZm9yIElQdjQsIHdpdGggbmV3IG9wdGlvbnMgTFdJUF9BVVRPSVAgYW5kCiAgICBMV0lQX0RIQ1BfQVVUT0lQX0NPT1AgaWYgeW91IHdhbnQgdG8gY29vcGVyYXRlIHdpdGggREhDUC4gU29tZSB0aXBzIHRvIGFkYXB0CiAgICAoc2VlIFRPRE8gbWFyayBpbiB0aGUgc291cmNlIGNvZGUpLgoKICAyMDA3LTA2LTA5IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBldGhhcnAuaCwgZXRoYXJwLmMsIGV0aGVybmV0aWYuYzogTW9kaWZpZWQgb3JkZXIgb2YgcGFyYW1ldGVycyBmb3IKICAgIGV0aGFycF9vdXRwdXQoKSB0byBtYXRjaCBuZXRpZi0+b3V0cHV0IHNvIGV0aGFycF9vdXRwdXQoKSBjYW4gYmUgdXNlZAogICAgZGlyZWN0bHkgYXMgbmV0aWYtPm91dHB1dCB0byBzYXZlIG9uZSBmdW5jdGlvbiBjYWxsLgoKICAyMDA3LTA2LTA4IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBuZXRpZi5oLCBldGhlcm5ldGlmLmMsIHNsaXBpZi5jLCBsb29waWYuYzogQWRkZWQgZGVmaW5lCiAgICBORVRJRl9JTklUX1NOTVAobmV0aWYsIHR5cGUsIHNwZWVkKSB0byBpbml0aWFsaXplIHBlci1uZXRpZiBzbm1wIHZhcmlhYmxlcywKICAgIGFkZGVkIGluaXRpYWxpemF0aW9uIG9mIHRob3NlIHRvIGV0aGVybmV0aWYsIHNsaXBpZiBhbmQgbG9vcGlmLgoKICAyMDA3LTA1LTE4IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBvcHQuaCwgaXBfZnJhZy5jLCBpcF9mcmFnLmgsIGlwLmM6IEFkZGVkIG9wdGlvbiBJUF9GUkFHX1VTRVNfU1RBVElDX0JVRgogICAgKGRlZmF1bHRpbmcgdG8gb2ZmIGZvciBub3cpIHRoYXQgY2FuIGJlIHNldCB0byAwIHRvIHNlbmQgZnJhZ21lbnRlZAogICAgcGFja2V0cyBieSBwYXNzaW5nIFBCVUZfUkVGcyBkb3duIHRoZSBzdGFjay4KCiAgMjAwNy0wNS0yMyBGculk6XJpYyBCZXJub24KICAqIGFwaV9saWIuYzogSW1wbGVtZW50IFNPX1JDVlRJTUVPIGZvciBhY2NlcHQgYW5kIHJlY3Ygb24gVENQCiAgICBjb25uZWN0aW9ucywgc3VjaCBwcmVzZW50IGluIHBhdGNoICM1OTU5LgoKICAyMDA3LTA1LTIzIEZy6WTpcmljIEJlcm5vbgogICogYXBpLmgsIGFwaV9saWIuYywgYXBpX21zZy5jLCBzb2NrZXRzLmM6IGdyb3VwIHRoZSBkaWZmZXJlbnQgTkVUQ09OTl9VRFB4eHgKICAgIGNvZGUgaW4gb25seSBvbmUgcGFydC4uLgoKICAyMDA3LTA1LTE4IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBvcHQuaCwgbWVtcC5oLCBtZW1wLmM6IEFkZGVkIG9wdGlvbiBNRU1QX09WRVJGTE9XX0NIRUNLIHRvIGNoZWNrIGZvciBtZW1wCiAgICBlbGVtZW50cyB0byBvdmVyZmxvdy4gVGhpcyBpcyBhY2hpZXZlZCBieSBhZGRpbmcgc29tZSBieXRlcyBiZWZvcmUgYW5kIGFmdGVyCiAgICBlYWNoIHBvb2wgZWxlbWVudCAoaW5jcmVhc2luZyB0aGVpciBzaXplLCBvZiBjb3Vyc2UpLCBmaWxsaW5nIHRoZW0gd2l0aCBhCiAgICBwcm9taW5lbnQgdmFsdWUgYW5kIGNoZWNraW5nIHRoZW0gb24gZnJlZWluZyB0aGUgZWxlbWVudC4KICAgIFNldCBpdCB0byAyIHRvIGFsc28gY2hlY2sgZXZlcnkgZWxlbWVudCBpbiBldmVyeSBwb29sIGVhY2ggdGltZSBtZW1wX21hbGxvYygpCiAgICBvciBtZW1wX2ZyZWUoKSBpcyBjYWxsZWQgKHNsb3dlciBidXQgbW9yZSBoZWxwZnVsKS4KCiAgMjAwNy0wNS0xMCBTaW1vbiBHb2xkc2NobWlkdAogICogb3B0LmgsIG1lbXAuaCwgbWVtcC5jLCBwYnVmLmMgKHNlZSB0YXNrICM2ODMxKTogdXNlIGEgbmV3IG1lbXAgcG9vbCBmb3IKICAgIFBCVUZfUE9PTCBwYnVmcyBpbnN0ZWFkIG9mIHRoZSBvbGQgcG9vbCBpbXBsZW1lbnRhdGlvbiBpbiBwYnVmLmMgdG8gcmVkdWNlCiAgICBjb2RlIHNpemUuCgogIDIwMDctMDUtMTEgRnLpZOlyaWMgQmVybm9uCiAgKiBzb2NrZXRzLmMsIGFwaV9saWIuYywgYXBpX21zZy5oLCBhcGlfbXNnLmMsIG5ldGlmYXBpLmgsIG5ldGlmYXBpLmMsIHRjcGlwLmM6CiAgICBJbmNsdWRlIGEgZnVuY3Rpb24gcG9pbnRlciBpbnN0ZWFkIG9mIGEgdGFibGUgaW5kZXggaW4gdGhlIG1lc3NhZ2UgdG8gcmVkdWNlCiAgICBmb290cHJpbnQuIERpc2FibGUgc29tZSBwYXJ0IG9mIGx3aXBfc2VuZCBhbmQgbHdpcF9zZW5kdG8gaWYgc29tZSBvcHRpb25zIGFyZQogICAgbm90IHNldCAoTFdJUF9UQ1AsIExXSVBfVURQLCBMV0lQX1JBVykuCgogIDIwMDctMDUtMTAgU2ltb24gR29sZHNjaG1pZHQKICAqICouaCAoZXhjZXB0IG5ldGlmL3BwcC8qLmgpOiBJbmNsdWRlZCBwYXRjaCAjNTQ0ODogaW5jbHVkZSAnI2lmZGVmIF9fY3BsdXNwbHVzCiAgICBcIGV4dGVybiAiQyIgeycgaW4gYWxsIGhlYWRlciBmaWxlcy4gTm93IHlvdSBjYW4gd3JpdGUgeW91ciBhcHBsaWNhdGlvbiB1c2luZwogICAgdGhlIGx3SVAgc3RhY2sgaW4gQysrIGFuZCBzaW1wbHkgI2luY2x1ZGUgdGhlIGNvcmUgZmlsZXMuIE5vdGUgSSBoYXZlIGxlZnQKICAgIG91dCB0aGUgbmV0aWYvcHBwLypoIGhlYWRlciBmaWxlcyBmb3Igbm93LCBzaW5jZSBJIGRvbid0IGtub3cgd2hpY2ggZmlsZXMgYXJlCiAgICBpbmNsdWRlZCBieSBhcHBsaWNhdGlvbnMgYW5kIHdoaWNoIGFyZSBmb3IgaW50ZXJuYWwgdXNlIG9ubHkuCgogIDIwMDctMDUtMDkgU2ltb24gR29sZHNjaG1pZHQKICAqIG9wdC5oLCAqLmMvKi5oOiBJbmNsdWRlZCBwYXRjaCAjNTkyMDogQ3JlYXRlIGRlZmluZSB0byBvdmVycmlkZSBDLWxpYnJhcnkKICAgIG1lbWNweS4gMiBEZWZpbmVzIGFyZSBjcmVhdGVkOiBNRU1DUFkoKSBmb3Igbm9ybWFsIG1lbWNweSwgU01FTUNQWSgpIGZvcgogICAgc2l0dWF0aW9ucyB3aGVyZSBzb21lIGNvbXBpbGVycyBtaWdodCBpbmxpbmUgdGhlIGNvcHkgYW5kIHNhdmUgYSBmdW5jdGlvbgogICAgY2FsbC4gQWxzbyByZXBsYWNlZCBhbGwgY2FsbHMgdG8gbWVtY3B5KCkgd2l0aCBjYWxscyB0byAoUylNRU1DUFkoKS4KCiAgMjAwNy0wNS0wOCBTaW1vbiBHb2xkc2NobWlkdAogICogbWVtLmg6IElmIE1FTV9MSUJDX01BTExPQz09MSwgYWxsb3cgdGhlIGRlZmluZXMgKGUuZy4gbWVtX21hbGxvYygpIC0+IG1hbGxvYygpKQogICAgdG8gYmUgb3ZlcnJpZGVuIGluIGNhc2UgdGhlIEMtbGlicmFyeSBtYWxsb2MgaW1wbGVtZW50YXRpb24gaXMgbm90IHByb3RlY3RlZAogICAgYWdhaW5zdCBjb25jdXJyZW50IGFjY2Vzcy4KCiAgMjAwNy0wNS0wNCBTaW1vbiBHb2xkc2NobWlkdCAoQXR0ZSBLb2pvKQogICogZXRoYXJwLmM6IEludHJvZHVjZWQgZmFzdCBvbmUtZW50cnktY2FjaGUgdG8gc3BlZWQgdXAgQVJQIGxvb2t1cCB3aGVuIHNlbmRpbmcKICAgIG11bHRpcGxlIHBhY2tldHMgdG8gdGhlIHNhbWUgaG9zdC4KCiAgMjAwNy0wNS0wNCBGculk6XJpYyBCZXJub24sIEpvbmF0aGFuIExhcm1vdXIKICAqIHNvY2tldHMuYywgYXBpLmgsIGFwaV9saWIuYywgYXBpX21zZy5oLCBhcGlfbXNnLmM6IEZpeCBidWcgIzE5MTYyICJsd2lwX3NlbnRvOiBhIHBvc3NpYmxlCiAgICB0byBjb3JydXB0IHJlbW90ZSBhZGRyL3BvcnQgY29ubmVjdGlvbiBzdGF0ZSIuIFJlZHVjZSBwcm9ibGVtcyAibm90IGVub3VnaHQgbWVtb3J5IiB3aXRoCiAgICBuZXRidWYgKGlmIHdlIHJlY2VpdmUgbG90IG9mIGRhdGFncmFtcykuIEltcHJvdmUgbHdpcF9zZW5kdG8gKG9ubHkgb25lIGV4Y2hhbmdlIGJldHdlZW4KICAgIHNvY2tldHMgYXBpIGFuZCBhcGlfbXNnIHdoaWNoIHJ1biBpbiB0Y3BpcF90aHJlYWQgY29udGV4dCkuIEFkZCBuZXRjb25uX3NlbnRvIGZ1bmN0aW9uLgogICAgV2FybmluZywgaWYgeW91IGRpcmVjdGx5IGFjY2VzcyB0byAiZnJvbWFkZHIiICYgImZyb21wb3J0IiBmaWVsZCBmcm9tIG5ldGJ1ZiBzdHJ1Y3QsCiAgICB0aGVzZSBmaWVsZHMgYXJlIG5vdyByZW5hbWVkICJhZGRyIiAmICJwb3J0Ii4KCiAgMjAwNy0wNC0xMSBKb25hdGhhbiBMYXJtb3VyCiAgKiBzeXMuaCwgYXBpX2xpYi5jOiBQcm92aWRlIG5ldyBzeXNfbWJveF90cnlmZXRjaCBmdW5jdGlvbi4gUmVxdWlyZSBwb3J0cyB0byBwcm92aWRlIG5ldwogICAgc3lzX2FyY2hfbWJveF90cnlmZXRjaCBmdW5jdGlvbiB0byBnZXQgYSBtZXNzYWdlIGlmIG9uZSBpcyB0aGVyZSwgb3RoZXJ3aXNlIHJldHVybgogICAgd2l0aCBTWVNfTUJPWF9FTVBUWS4gc3lzX2FyY2hfbWJveF90cnlmZXRjaCBjYW4gYmUgaW1wbGVtZW50ZWQgYXMgYSBmdW5jdGlvbi1saWtlIG1hY3JvCiAgICBieSB0aGUgcG9ydCBpbiBzeXNfYXJjaC5oIGlmIGRlc2lyZWQuCgogIDIwMDctMDQtMDYgRnLpZOlyaWMgQmVybm9uLCBTaW1vbiBHb2xkc2NobWlkdAogICogb3B0LmgsIHRjcGlwLmgsIHRjcGlwLmMsIG5ldGlmYXBpLmgsIG5ldGlmYXBpLmM6IE5ldyBjb25maWd1cmF0aW9uIG9wdGlvbiBMV0lQX05FVElGX0FQSQogICAgYWxsb3cgdG8gdXNlIHRocmVhZC1zYWZlIGZ1bmN0aW9ucyB0byBhZGQvcmVtb3ZlIG5ldGlmIGluIGxpc3QsIGFuZCB0byBzdGFydC9zdG9wIGRoY3AKICAgIGNsaWVudHMsIHVzaW5nIG5ldyBmdW5jdGlvbnMgZnJvbSBuZXRpZmFwaS5oLiBEaXNhYmxlIGFzIGRlZmF1bHQgKG5vIHBvcnQgY2hhbmdlIHRvIGRvKS4KCiAgMjAwNy0wNC0wNSBGculk6XJpYyBCZXJub24KICAqIHNvY2tldHMuYzogcmVtcGxhY2UgRU5PQlVGUyBlcnJvcnMgb24gYWxsb2Nfc29ja2V0IGJ5IEVORklMRSB0byBiZSBtb3JlIEJTRCBjb21wbGlhbnQuCgogIDIwMDctMDQtMDQgU2ltb24gR29sZHNjaG1pZHQKICAqIGFyY2guaCwgYXBpX21zZy5jLCBkaGNwLmMsIG1zZ19pbi5jLCBzb2NrZXRzLmM6IEludHJvZHVjZWQgI2RlZmluZSBMV0lQX1VOVVNFRF9BUkcoeCkKICAgIHVzZSB0aGlzIGZvciBhbmQgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGZvcm0gdG8gdGVsbCB0aGUgY29tcGlsZXIgeW91IGludGVudGlvbmFsbHkKICAgIGFyZSBub3QgdXNpbmcgdGhpcyB2YXJpYWJsZS4gQ2FuIGJlIG92ZXJyaWRlbiBpbiBjYy5oLgoKICAyMDA3LTAzLTI4IEZy6WTpcmljIEJlcm5vbgogICogb3B0LmgsIG5ldGlmLmgsIGRoY3AuaCwgZGhjcC5jOiBOZXcgY29uZmlndXJhdGlvbiBvcHRpb24gTFdJUF9ORVRJRl9IT1NUTkFNRSBhbGxvdyB0bwogICAgZGVmaW5lIGEgaG9zdG5hbWUgaW4gbmV0aWYgc3RydWN0ICh0aGlzIGlzIGp1c3QgYSBwb2ludGVyLCBzbywgeW91IGNhbiB1c2UgYSBoYXJkY29kZWQKICAgIHN0cmluZywgcG9pbnQgb24gb25lIG9mIHlvdXIncyBldGhlcm5ldGlmIGZpZWxkLCBvciBhbGxvYyBhIHN0cmluZyB5b3Ugd2lsbCBmcmVlIHlvdXJzZWxmKS4KICAgIEl0IHdpbGwgYmUgdXNlZCBieSBESENQIHRvIHJlZ2lzdGVyIGEgY2xpZW50IGhvc3RuYW1lLCBidXQgY2FuIGFsc28gYmUgdXNlIHdoZW4geW91IGNhbGwKICAgIHNubXBfc2V0X3N5c25hbWUuCgogIDIwMDctMDMtMjggRnLpZOlyaWMgQmVybm9uCiAgKiBuZXRpZi5oLCBuZXRpZi5jOiBBIG5ldyBORVRJRl9GTEFHX0VUSEFSUCBmbGFnIGlzIGRlZmluZWQgaW4gbmV0aWYuaCwgdG8gYWxsb3cgdG8gCiAgICBpbml0aWFsaXplIGEgbmV0d29yayBpbnRlcmZhY2UncyBmbGFnIHdpdGguIEl0IHRlbGwgdGhpcyBpbnRlcmZhY2UgaXMgYW4gZXRoZXJuZXQKICAgIGRldmljZSwgYW5kIHdlIGNhbiB1c2UgQVJQIHdpdGggaXQgdG8gZG8gYSAiZ3JhdHVpdG91cyBBUlAiIChSRkMgMzIyMCAiSVAgTW9iaWxpdHkKICAgIFN1cHBvcnQgZm9yIElQdjQiIHNlY3Rpb24gNC42KSB3aGVuIGludGVyZmFjZSBpcyAidXAiIHdpdGggbmV0aWZfc2V0X3VwKCkuCgogIDIwMDctMDMtMjYgRnLpZOlyaWMgQmVybm9uLCBKb25hdGhhbiBMYXJtb3VyCiAgKiBvcHQuaCwgdGNwaXAuYzogTmV3IGNvbmZpZ3VyYXRpb24gb3B0aW9uIExXSVBfQVJQIGFsbG93IHRvIGRpc2FibGUgQVJQIGluaXQgYXQgYnVpbGQKICAgIHRpbWUgaWYgeW91IG9ubHkgdXNlIFBQUCBvciBTTElQLiBUaGUgZGVmYXVsdCBpcyBlbmFibGUuIE5vdGUgd2UgZG9uJ3QgaGF2ZSB0byBjYWxsIAogICAgZXRoYXJwX2luaXQgaW4geW91ciBwb3J0J3MgaW5pdGlsaXphdGlvbiBzZXF1ZW5jZSBpZiB5b3UgdXNlIHRjcGlwLmMsIGJlY2F1c2UgdGhpcyBjYWxsCiAgICBpcyBkb25lIGluIHRjcGlwX2luaXQgZnVuY3Rpb24uCgogIDIwMDctMDMtMjIgRnLpZOlyaWMgQmVybm9uCiAgKiBzdGF0cy5oLCBzdGF0cy5jLCBtc2dfaW4uYzogU3RhdHMgY291bnRlcnMgY2FuIGJlIGNoYW5nZSB0byB1MzJfdCBpZiBuZWNlc3Nhcnkgd2l0aCB0aGUKICAgIG5ldyBvcHRpb24gTFdJUF9TVEFUU19MQVJHRS4gSWYgeW91IG5lZWQgdGhpcyBvcHRpb24sIGRlZmluZSBMV0lQX1NUQVRTX0xBUkdFIHRvIDEgaW4KICAgIHlvdXIgbHdpcG9wdHMuaC4gTW9yZSwgdW51c2VkIGNvdW50ZXJzIGFyZSBub3QgZGVmaW5lZCBpbiB0aGUgc3RhdHMgc3RydWN0cywgYW5kIG5vdCAKICAgIGRpc3BsYXkgYnkgc3RhdHNfZGlzcGxheSgpLiBOb3RlIHRoYXQgc29tZSBvcHRpb25zIChTWVNfU1RBVFMgYW5kIFJBV19TVEFUUykgYXJlIGRlZmluZWQKICAgIGJ1dCBuZXZlciB1c2VkLiBGaXggbXNnX2luLmMgd2l0aCB0aGUgY29ycmVjdCAjaWYgdGVzdCBmb3IgYSBzdGF0IGRpc3BsYXkuCgogIDIwMDctMDMtMjEgS2llcmFuIE1hbnNsZXkKICAqIG5ldGlmLmMsIG5ldGlmLmg6IEFwcGx5IHBhdGNoIzQxOTcgd2l0aCBzb21lIGNoYW5nZXMgKG9yaWdpbmF0b3I6IHJpcmVsYW5kQGhtZ3NsLmNvbSkuIAogICAgUHJvdmlkZXMgY2FsbGJhY2sgb24gbmV0aWYgdXAvZG93biBzdGF0ZSBjaGFuZ2UuCgogIDIwMDctMDMtMTEgRnLpZOlyaWMgQmVybm9uLCBNYWNlIEdhZWwsIFN0ZXZlIFJleW5vbGRzCiAgKiBzb2NrZXRzLmgsIHNvY2tldHMuYywgYXBpLmgsIGFwaV9saWIuYywgYXBpX21zZy5oLCBhcGlfbXNnLmMsIGlnbXAuaCwgaWdtcC5jLAogICAgaXAuYywgbmV0aWYuaCwgdGNwaXAuYywgb3B0Lmg6CiAgICBOZXcgY29uZmlndXJhdGlvbiBvcHRpb24gTFdJUF9JR01QIHRvIGVuYWJsZSBJR01QIHByb2Nlc3NpbmcuIEJhc2VkIG9uIG9ubHkgb25lIAogICAgZmlsdGVyIHBlciBhbGwgbmV0d29yayBpbnRlcmZhY2VzLiBEZWNsYXJlIGEgbmV3IGZ1bmN0aW9uIGluIG5ldGlmIHRvIGVuYWJsZSB0bwogICAgY29udHJvbCB0aGUgTUFDIGZpbHRlciAodG8gcmVkdWNlIGx3SVAgdHJhZmZpYyBwcm9jZXNzaW5nKS4KCiAgMjAwNy0wMy0xMSBGculk6XJpYyBCZXJub24KICAqIHRjcC5oLCB0Y3AuYywgc29ja2V0cy5jLCB0Y3Bfb3V0LmMsIHRjcF9pbi5jLCBvcHQuaDogS2VlcGFsaXZlIHZhbHVlcyBjYW4KICAgIGJlIGNvbmZpZ3VyZWQgYXQgcnVuIHRpbWUgd2l0aCBMV0lQX1RDUF9LRUVQQUxJVkUsIGJ1dCBkb24ndCBjaGFuZ2UgdGhpcwogICAgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91J3JlIGRvaW5nIChkZWZhdWx0IGFyZSBSRkMxMTIyIGNvbXBsaWFudCkuIE5vdGUKICAgIHRoYXQgVENQX0tFRVBJRExFIGFuZCBUQ1BfS0VFUElOVFZMIGhhdmUgdG8gYmUgc2V0IGluIHNlY29uZHMuCgogIDIwMDctMDMtMDggRnLpZOlyaWMgQmVybm9uCiAgKiB0Y3AuaDogS2VlcGFsaXZlIHZhbHVlcyBjYW4gYmUgY29uZmlndXJlZCBhdCBjb21waWxlIHRpbWUsIGJ1dCBkb24ndCBjaGFuZ2UKICAgIHRoaXMgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91J3JlIGRvaW5nIChkZWZhdWx0IGFyZSBSRkMxMTIyIGNvbXBsaWFudCkuCgogIDIwMDctMDMtMDggRnLpZOlyaWMgQmVybm9uCiAgKiBzb2NrZXRzLmMsIGFwaS5oLCBhcGlfbGliLmMsIHRjcGlwLmMsIHN5cy5oLCBzeXMuYywgZXJyLmMsIG9wdC5oOgogICAgSW1wbGVtZW50IExXSVBfU09fUkNWVElNRU8gY29uZmlndXJhdGlvbiBvcHRpb24gdG8gZW5hYmxlL2Rpc2FibGUgU09fUkNWVElNRU8KICAgIG9uIFVEUCBzb2NrZXRzL25ldGNvbm4uCgogIDIwMDctMDMtMDggU2ltb24gR29sZHNjaG1pZHQKICAqIHNubXBfbXNnLmgsIG1zZ19pbi5jOiBTTk1QIFVEUCBwb3J0cyBjYW4gYmUgY29uZmlndXJlZCBhdCBjb21waWxlIHRpbWUuCgogIDIwMDctMDMtMDYgRnLpZOlyaWMgQmVybm9uCiAgKiBhcGkuaCwgYXBpX2xpYi5jLCBzb2NrZXRzLmgsIHNvY2tldHMuYywgdGNwaXAuYywgc3lzLmgsIHN5cy5jLCBlcnIuaDogCiAgICBJbXBsZW1lbnQgU09fUkNWVElNRU8gb24gVURQIHNvY2tldHMvbmV0Y29ubi4KCiAgMjAwNy0wMi0yOCBLaWVyYW4gTWFuc2xleSAoYmFzZWQgb24gcGF0Y2ggZnJvbSBTaW1vbiBHb2xkc2NobWlkdCkKICAqIGFwaV9saWIuYywgdGNwaXAuYywgbWVtcC5jLCBtZW1wLmg6IG1ha2UgQVBJIG1zZyBzdHJ1Y3RzIGFsbG9jYXRlZAogICAgb24gdGhlIHN0YWNrIGFuZCByZW1vdmUgdGhlIEFQSSBtc2cgdHlwZSBmcm9tIG1lbXAKCiAgMjAwNy0wMi0yNiBKb25hdGhhbiBMYXJtb3VyIChiYXNlZCBvbiBwYXRjaCBmcm9tIFNpbW9uIEdvbGRzY2htaWR0KQogICogc29ja2V0cy5oLCBzb2NrZXRzLmM6IE1vdmUgc29ja2V0IGluaXRpYWxpemF0aW9uIHRvIG5ldwogICAgbHdpcF9zb2NrZXRfaW5pdCgpIGZ1bmN0aW9uLgogICAgTk9URTogdGhpcyBjaGFuZ2VzIHRoZSBBUEkgd2l0aCBwb3J0cy4gUG9ydHMgd2lsbCBoYXZlIHRvIGJlCiAgICB1cGRhdGVkIHRvIGNhbGwgbHdpcF9zb2NrZXRfaW5pdCgpIG5vdy4KCiAgMjAwNy0wMi0yNiBKb25hdGhhbiBMYXJtb3VyIChiYXNlZCBvbiBwYXRjaCBmcm9tIFNpbW9uIEdvbGRzY2htaWR0KQogICogYXBpX2xpYi5jOiBVc2UgbWVtY3B5IGluIG5ldGJ1Zl9jb3B5X3BhcnRpYWwuCgoKICArKyBCdWcgZml4ZXM6CgogIDIwMDgtMDMtMTcgRnLpZOlyaWMgQmVybm9uLCBFZCBLZXJla2VzCiAgKiBpZ21wLmgsIGlnbXAuYzogRml4IGJ1ZyAjMjI2MTMgIklHTVAgaXBoZHIgcHJvYmxlbSIgKGNvdWxkIGhhdmUKICAgIHNvbWUgcHJvYmxlbXMgdG8gZmlsbCB0aGUgSVAgaGVhZGVyIG9uIHNvbWUgdGFyZ2V0cywgdXNlIG5vdyB0aGUKICAgIGlwLmggbWFjcm9zIHRvIGRvIGl0KS4KCiAgMjAwOC0wMy0xMyBGculk6XJpYyBCZXJub24KICAqIHNvY2tldHMuYzogRml4IGJ1ZyAjMjI0MzUgImx3aXBfcmVjdmZyb20gd2l0aCBUQ1AgYnJlYWs7Ii4gVXNpbmcKICAgIChsd2lwXylyZWN2ZnJvbSB3aXRoIHZhbGlkICJmcm9tIiBhbmQgImZyb21sZW4iIHBhcmFtZXRlcnMsIG9uIGEKICAgIFRDUCBjb25uZWN0aW9uIGNhdXNlZCBhIGNyYXNoLiBOb3RlIHRoYXQgdXNpbmcgKGx3aXBfKXJlY3Zmcm9tCiAgICBsaWtlIHRoaXMgaXMgYSBiaXQgc2xvdyBhbmQgdGhhdCB1c2luZyAobHdpcClnZXRwZWVybmFtZSBpcyB0aGUKICAgIGdvb2QgbHdpcCB3YXkgdG8gZG8gaXQgKHNvLCB1c2luZyByZWN2IGlzIGZhc3RlciBvbiB0Y3Agc29ja2V0cykuCgogIDIwMDgtMDMtMTIgRnLpZOlyaWMgQmVybm9uLCBKb25hdGhhbiBMYXJtb3VyCiAgKiBhcGlfbXNnLmMsIGNvbnRyaWIvYXBwcy9waW5nLmM6IEZpeCBidWcgIzIyNTMwICJhcGlfbXNnLmMncwogICAgcmVjdl9yYXcoKSBkb2VzIG5vdCBjb25zdW1lIGRhdGEiLCBhbmQgdGhlIHBpbmcgc2FtcGxlICh3aXRoCiAgICBMV0lQX1NPQ0tFVD0xLCB0aGUgY29kZSBkaWQgdGhlIHdyb25nIHN1cHBvc2l0aW9uIHRoYXQgbHdpcF9yZWN2ZnJvbQogICAgcmV0dXJuZWQgdGhlIElQIHBheWxvYWQsIHdpdGhvdXQgdGhlIElQIGhlYWRlcikuCgogIDIwMDgtMDMtMDQgSm9uYXRoYW4gTGFybW91cgogICogbWVtLmMsIHN0YXRzLmMsIG1lbS5oOiBhcHBseSBwYXRjaCAjNjQxNCB0byBhdm9pZCBjb21waWxlciBlcnJvcnMKICBhbmQvb3Igd2FybmluZ3Mgb24gc29tZSBzeXN0ZW1zIHdoZXJlIG1lbV9zaXplX3QgYW5kIHNpemVfdCBkaWZmZXIuCiAgKiBwYnVmLmMsIHBwcC5jOiBGaXggd2FybmluZ3Mgb24gc29tZSBzeXN0ZW1zIHdpdGggbWVtX21hbGxvYy4KCiAgMjAwOC0wMy0wNCBLaWVyYW4gTWFuc2xleSAoY29udHJpYnV0aW9ucyBieSBvdGhlcnMpIAogICogTnVtZXJvdXMgc21hbGwgY29tcGlsZXIgZXJyb3Ivd2FybmluZyBmaXhlcyBmcm9tIGNvbnRyaWJ1dGlvbnMgdG8KICAgIG1haWxpbmcgbGlzdCBhZnRlciAxLjMuMCByZWxlYXNlIGNhbmRpZGF0ZSBtYWRlLgoKICAyMDA4LTAxLTI1IEN1aSBoZW5nYmluIChpbnRlZ3JhdGVkIGJ5IEZy6WTpcmljIEJlcm5vbikKICAqIGRucy5jOiBGaXggYnVnICMyMjEwOCAiRE5TIHByb2JsZW0iIGNhdXNlZCBieSB1bmFsaWduZWQgc3RydWN0dXJlcy4KCiAgMjAwOC0wMS0xNSBLaWVyYW4gTWFuc2xleQogICogdGNwX291dC5jOiBCVUcyMDUxMS4gIE1vZGlmeSBwZXJzaXN0IHRpbWVyIHRvIHN0YXJ0IHdoZW4gd2UgYXJlCiAgICBwcmV2ZW50ZWQgZnJvbSBzZW5kaW5nIGJ5IGEgc21hbGwgc2VuZCB3aW5kb3csIG5vdCBqdXN0IGEgemVybwogICAgc2VuZCB3aW5kb3cuCgogIDIwMDgtMDEtMDkgSm9uYXRoYW4gTGFybW91cgogICogb3B0LmgsIGlwLmM6IFJlbmFtZSBJUF9PUFRJT05TIGRlZmluZSB0byBJUF9PUFRJT05TX0FMTE9XRUQgdG8gYXZvaWQKICAgIGNvbmZsaWN0IHdpdGggTGludXggc3lzdGVtIGhlYWRlcnMuCgogIDIwMDgtMDEtMDYgSm9uYXRoYW4gTGFybW91cgogICogZGhjcC5jOiBmaXggYnVnICMxOTkyNzogIkRIQ1AgTkFDSyBwcm9ibGVtIiBieSBjbGVhcmluZyBhbnkgZXhpc3Rpbmcgc2V0IElQCiAgICBhZGRyZXNzIGVudGlyZWx5IG9uIHJlY2VpdmluZyBhIERIQ1BOQUssIGFuZCByZXN0YXJ0aW5nIGRpc2NvdmVyeS4KCiAgMjAwNy0xMi0yMSBTaW1vbiBHb2xkc2NobWlkdAogICogc3lzLmgsIGFwaV9saWIuYywgYXBpX21zZy5jLCBzb2NrZXRzLmM6IGZpeCBidWcgIzIxNjk4OiAibmV0Y29ubi0+cmVjdl9hdmFpbAogICAgaXMgbm90IHByb3RlY3RlZCIgYnkgdXNpbmcgbmV3IG1hY3JvcyBmb3IgaW50ZXJsb2NrZWQgYWNjZXNzIHRvIG1vZGlmeS90ZXN0CiAgICBuZXRjb25uLT5yZWN2X2F2YWlsLgoKICAyMDA3LTEyLTIwIEtpZXJhbiBNYW5zbGV5IChiYXNlZCBvbiBwYXRjaCBmcm9tIE9sZWcgVHlzaGV2KQogICogdGNwX2luLmM6IGZpeCBidWcjIDIxNTM1IChucnR4IG5vdCByZXNldCBjb3JyZWN0bHkgaW4gU1lOX1NFTlQgc3RhdGUpCgogIDIwMDctMTItMjAgS2llcmFuIE1hbnNsZXkgKGJhc2VkIG9uIHBhdGNoIGZyb20gUGVyLUhlbnJpayBMdW5kYm9sbSkKICAqIHRjcC5jLCB0Y3BfaW4uYywgdGNwX291dC5jLCB0Y3AuaDogZml4IGJ1ZyAjMjAxOTkgKGJldHRlciBoYW5kbGluZwogICAgb2Ygc2lsbHkgd2luZG93IGF2b2lkYW5jZSBhbmQgcHJldmVudCBsd0lQIGZyb20gc2hyaW5raW5nIHRoZSB3aW5kb3cpCgogIDIwMDctMTItMDQgU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcC5jLCB0Y3BfaW4uYzogZml4IGJ1ZyAjMjE2OTkgKHNlZ21lbnQgbGVhayBpbiBvb3NlcSBwcm9jZXNzaW5nIHdoZW4gbGFzdAogICAgZGF0YSBwYWNrZXQgd2FzIGxvc3QpOiBhZGQgYXNzZXJ0IHRoYXQgYWxsIHNlZ21lbnQgbGlzdHMgYXJlIGVtcHR5IGluCiAgICB0Y3BfcGNiX3JlbW92ZSBiZWZvcmUgc2V0dGluZyBwY2IgdG8gQ0xPU0VEIHN0YXRlOyBkb24ndCBkaXJlY3RseSBzZXQgQ0xPU0VECiAgICBzdGF0ZSBmcm9tIExBU1RfQUNLIGluIHRjcF9wcm9jZXNzCgogIDIwMDctMTItMDIgU2ltb24gR29sZHNjaG1pZHQKICAqIHNvY2tldHMuaDogZml4IGJ1ZyAjMjE2NTQ6IGV4Y2x1ZGUgZGVmaW5pdGlvbiBvZiBzdHJ1Y3QgdGltZXZhbCBmcm9tICNpZm5kZWYgRkRfU0VUCiAgICBJZiBpbmNsdWRpbmcgPHN5cy90aW1lLmg+IGZvciBzeXN0ZW0tc3RydWN0IHRpbWV2YWwsIExXSVBfVElNRVZBTF9QUklWQVRFIG5vdwogICAgaGFzIHRvIGJlIHNldCB0byAwIGluIGx3aXBvcHRzLmgKCiAgMjAwNy0xMi0wMiBTaW1vbiBHb2xkc2NobWlkdAogICogYXBpX21zZy5jLCBhcGlfbGliLmM6IGZpeCBidWcgIzIxNjU2IChyZWN2bWJveCBwcm9ibGVtIGluIG5ldGNvbm4gQVBJKTogYWx3YXlzCiAgICBhbGxvY2F0ZSBhIHJlY3ZtYm94IGluIG5ldGNvbm5fbmV3X3dpdGhfcHJvdG9fYW5kX2NhbGxiYWNrLiBGb3IgYSB0Y3AtbGlzdGVuCiAgICBuZXRjb25uLCB0aGlzIHJlY3ZtYm94IGlzIGxhdGVyIGZyZWVkIGFuZCBhIG5ldyBtYm94IGlzIGFsbG9jYXRlZCBmb3IgYWNjZXB0bWJveC4KICAgIFRoaXMgaXMgYSBmaXggZm9yIHRocmVhZC1zYWZldHkgYW5kIGFsbG9jYXRlcyBhbGwgaXRlbXMgbmVlZGVkIGZvciBhIG5ldGNvbm4KICAgIHdoZW4gdGhlIG5ldGNvbm4gaXMgY3JlYXRlZC4KCiAgMjAwNy0xMS0zMCBTaW1vbiBHb2xkc2NobWlkdAogICogdWRwLmM6IGZpcnN0IGF0dGVtcHQgdG8gZml4IGJ1ZyAjMjE2NTUgKERIQ1AgZG9lc24ndCB3b3JrIHJlbGlhYmx5IHdpdGggbXVsdGlwbGUKICAgIG5ldGlmcyk6IGlmIExXSVBfREhDUCBpcyBlbmFibGVkLCBVRFAgcGFja2V0cyB0byBESENQX0NMSUVOVF9QT1JUIGFyZSBwYXNzZWQKICAgIHRvIG5ldGlmLT5kaGNwLT5wY2Igb25seSAoaWYgdGhhdCBleGlzdHMpIGFuZCBub3QgdG8gYW55IG90aGVyIHBjYiBmb3IgdGhlIHNhbWUKICAgIHBvcnQgKG9ubHkgc29sdXRpb24gdG8gbGV0IFVEUCBwY2JzICdiaW5kJyB0byBhIG5ldGlmIGluc3RlYWQgb2YgYW4gSVAgYWRkcmVzcykKCiAgMjAwNy0xMS0yNyBTaW1vbiBHb2xkc2NobWlkdAogICogaXAuYzogZml4ZWQgYnVnICMyMTY0MyAodWRwX3NlbmQvcmF3X3NlbmQgZG9uJ3QgZmFpbCBpZiBuZXRpZiBpcyBkb3duKSBieQogICAgbGV0dGluZyBpcF9yb3V0ZSBvbmx5IHVzZSBuZXRpZnMgdGhhdCBhcmUgdXAuCgogIDIwMDctMTEtMjcgU2ltb24gR29sZHNjaG1pZHQKICAqIGVyci5oLCBhcGlfbGliLmMsIGFwaV9tc2cuYywgc29ja2V0cy5jOiBDaGFuZ2VkIGVycm9yIGhhbmRsaW5nOiBFUlJfTUVNLCBFUlJfQlVGCiAgICBhbmQgRVJSX1JURSBhcmUgc2VlbiBhcyBub24tZmF0YWwsIGFsbCBvdGhlciBlcnJvcnMgYXJlIGZhdGFsLiBuZXRjb25ucyBhbmQKICAgIHNvY2tldHMgYmxvY2sgbW9zdCBvcGVyYXRpb25zIG9uY2UgdGhleSBoYXZlIHNlZW4gYSBmYXRhbCBlcnJvci4KCiAgMjAwNy0xMS0yNyBTaW1vbiBHb2xkc2NobWlkdAogICogdWRwLmgsIHVkcC5jLCBkaGNwLmM6IEltcGxlbWVudGVkIG5ldyBmdW5jdGlvbiB1ZHBfc2VuZHRvX2lmIHdoaWNoIHRha2VzIHRoZQogICAgbmV0aWYgdG8gc2VuZCBhcyBhbiBhcmd1bWVudCAodG8gYmUgYWJsZSB0byBzZW5kIG9uIG5ldGlmcyB0aGF0IGFyZSBkb3duKS4KCiAgMjAwNy0xMS0yNiBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwX2luLmM6IEZpeGVkIGJ1ZyAjMjE1ODI6IHBjYi0+YWNrZWQgYWNjb3VudGluZyBjYW4gYmUgd3Jvbmcgd2hlbiBBQ0tzCiAgICBhcnJpdmUgb3V0LW9mLW9yZGVyCgogIDIwMDctMTEtMjEgU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcC5oLCB0Y3Bfb3V0LmMsIGFwaV9tc2cuYzogRml4ZWQgYnVnICMyMDI4NzogdGNwX291dHB1dF9uYWdsZSBzZW5kcyB0b28gZWFybHkKICAgIEZpeGVkIHRoZSBuYWdsZSBhbGdvcml0aG07IG5hZ2xlIG5vdyBhbHNvIHdvcmtzIGZvciBhbGwgcmF3IEFQSSBhcHBsaWNhdGlvbnMKICAgIGFuZCBoYXMgdG8gYmUgZXhwbGljaXRseSBkaXNhYmxlZCB3aXRoICd0Y3BfcGNiLT5mbGFncyB8PSBURl9OT0RFTEFZJwoKICAyMDA3LTExLTEyIEZy6WTpcmljIEJlcm5vbgogICogc29ja2V0cy5jLCBhcGkuaCwgYXBpX2xpYi5jLCBhcGlfbXNnLmgsIGFwaV9tc2cuYzogRml4ZWQgYnVnICMyMDkwMC4gTm93LCBtb3N0CiAgICBvZiB0aGUgbmV0Y29ubl9wZWVyIGFuZCBuZXRjb25uX2FkZHIgcHJvY2Vzc2luZyBpcyBkb25lIGluc2lkZSB0Y3BpcF90aHJlYWQKICAgIGNvbnRleHQgaW4gZG9fZ2V0YWRkci4KCiAgMjAwNy0xMS0xMCBTaW1vbiBHb2xkc2NobWlkdAogICogZXRoYXJwLmM6IEZpeGVkIGJ1ZzogYXNzZXJ0IGZpcmVkIHdoZW4gTUVNUF9BUlBfUVVFVUUgd2FzIGVtcHR5ICh3aGljaCBjYW4KICAgIGhhcHBlbiBhbnkgdGltZSkuIE5vdyB0aGUgcGFja2V0IHNpbXBseSBpc24ndCBlbnF1ZXVlZCB3aGVuIG91dCBvZiBtZW1vcnkuCgogIDIwMDctMTEtMDEgU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcC5jLCB0Y3BfaW4uYzogRml4ZWQgYnVnICMyMTQ5NDogVGhlIHNlbmQgbXNzIChwY2ItPm1zcykgaXMgc2V0IHRvIDUzNiAob3IKICAgIFRDUF9NU1MgaWYgdGhhdCBpcyBzbWFsbGVyKSBhcyBsb25nIGFzIG5vIE1TUyBvcHRpb24gaXMgcmVjZWl2ZWQgZnJvbSB0aGUKICAgIHJlbW90ZSBob3N0LgoKICAyMDA3LTExLTAxIFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3AuaCwgdGNwLmMsIHRjcF9pbi5jOiBGaXhlZCBidWcgIzIxNDkxOiBUaGUgTVNTIG9wdGlvbiBzZW50ICh3aXRoIFNZTikKICAgIGlzIG5vdyBiYXNlZCBvbiBUQ1BfTVNTIGluc3RlYWQgb2YgcGNiLT5tc3MgKG9uIHBhc3NpdmUgb3BlbiBub3cgZWZmZWN0aXZlbHkKICAgIHNlbmRpbmcgb3VyIGNvbmZpZ3VyZWQgVENQX01TUyBpbnN0ZWFkIG9mIHRoZSBvbmUgcmVjZWl2ZWQpLgoKICAyMDA3LTExLTAxIFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3BfaW4uYzogRml4ZWQgYnVnICMyMTE4MTogT24gYWN0aXZlIG9wZW4sIHRoZSBpbml0aWFsIGNvbmdlc3Rpb24gd2luZG93IHdhcwogICAgY2FsY3VsYXRlZCBiYXNlZCBvbiB0aGUgY29uZmlndXJlZCBUQ1BfTVNTLCBub3Qgb24gdGhlIE1TUyBvcHRpb24gcmVjZWl2ZWQKICAgIHdpdGggU1lOK0FDSy4KCiAgMjAwNy0xMC0wOSBTaW1vbiBHb2xkc2NobWlkdAogICogdWRwLmMsIGluZXQuYywgaW5ldC5oOiBGaXhlZCBVRFBMaXRlOiBzZW5kOiBDaGVja3N1bSB3YXMgYWx3YXlzIGdlbmVyYXRlZCB0b28KICAgIHNob3J0IGFuZCBhbHNvIHdhcyBnZW5lcmF0ZWQgd3JvbmcgaWYgY2hlY2tzdW0gY292ZXJhZ2UgIT0gdG90X2xlbjsKICAgIHJlY2VpdmU6IGNoZWNrc3VtIHdhcyBjYWxjdWxhdGVkIHdyb25nIGlmIGNoZWNrc3VtIGNvdmVyYWdlICE9IHRvdF9sZW4KCiAgMjAwNy0xMC0wOCBTaW1vbiBHb2xkc2NobWlkdAogICogbWVtLmM6IGxmcmVlIHdhcyBub3QgdXBkYXRlZCBpbiBtZW1fcmVhbGxvYyEKCiAgMjAwNy0xMC0wNyBGculk6XJpYyBCZXJub24KICAqIHNvY2tldHMuYywgYXBpLmgsIGFwaV9saWIuYzogRmlyc3Qgc3RlcCB0byBmaXggImJ1ZyAjMjA5MDAgOiBQb3RlbnRpYWwKICAgIGNyYXNoIGVycm9yIHByb2JsZW0gd2l0aCBuZXRjb25uX3BlZXIgJiBuZXRjb25uX2FkZHIiLiBWRVJZIElNUE9SVEFOVDoKICAgIHRoaXMgY2hhbmdlIGNhdXNlIGFuIEFQSSBicmVha2FnZSBmb3IgbmV0Y29ubl9hZGRyLCBzaW5jZSBhIHBhcmFtZXRlcgogICAgdHlwZSBjaGFuZ2UuIEFueSBjb21waWxlciBzaG91bGQgY2F1c2UgYW4gZXJyb3Igd2l0aG91dCBhbnkgY2hhbmdlcyBpbgogICAgeW91cnMgbmV0Y29ubl9wZWVyIGNhbGxzIChzbywgaXQgY2FuJ3QgYmUgYSAic2lsZW50IGNoYW5nZSIpLiBJdCBhbHNvCiAgICByZWR1Y2UgYSBsaXR0bGUgYml0IHRoZSBmb290cHJpbnQgZm9yIHNvY2tldCBsYXllciAobHdpcF9nZXRwZWVybmFtZSAmCiAgICBsd2lwX2dldHNvY2tuYW1lIHVzZSBub3cgYSBjb21tb24gbHdpcF9nZXRhZGRybmFtZSBmdW5jdGlvbiBzaW5jZSAKICAgIG5ldGNvbm5fcGVlciAmIG5ldGNvbm5fYWRkciBoYXZlIHRoZSBzYW1lIHBhcmFtZXRlcnMpLgoKICAyMDA3LTA5LTIwIFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3AuYzogRml4ZWQgYnVnICMyMTA4MCAodGNwX2JpbmQgd2l0aG91dCBjaGVjayBwY2JzIGluIFRJTUVfV0FJVCBzdGF0ZSkKICAgIGJ5IGNoZWNraW5nICB0Y3BfdHdfcGNicyBhbHNvCgogIDIwMDctMDktMTkgU2ltb24gR29sZHNjaG1pZHQKICAqIGljbXAuYzogRml4ZWQgYnVnICMyMTEwNyAoZGlkbid0IHJlc2V0IElQIFRUTCBpbiBJQ01QIGVjaG8gcmVwbGllcykKCiAgMjAwNy0wOS0xNSBNaWtlIEtsZXNob3YKICAqIG1lbS5jOiBGaXhlZCBidWcgIzIxMDc3IChpbmFjY3VyYWN5IGluIGNhbGN1bGF0aW9uIG9mIGx3aXBfc3RhdC5tZW0udXNlZCkKCiAgMjAwNy0wOS0wNiBGculk6XJpYyBCZXJub24KICAqIHNldmVyYWwtZmlsZXM6IHJlcGxhY2Ugc29tZSAjaW5jbHVkZSAiYXJjaC9jYy5oIiBieSAibHdpcC9hcmNoLmgiLCBvciBzaW1wbHkgcmVtb3ZlCiAgICBpdCBhcyBsb25nIGFzICJsd2lwL29wdC5oIiBpcyBpbmNsdWRlZCBiZWZvcmUgKHRoaXMgb25lIGluY2x1ZGUgImx3aXAvZGVidWcuaCIgd2hpY2gKICAgIGFscmVhZHkgaW5jbHVkZSAibHdpcC9hcmNoLmgiKS4gTGlrZSB0aGF0LCBkZWZhdWx0IGRlZmluZXMgYXJlIHByb3ZpZGVkIGJ5ICJsd2lwL2FyY2guaCIKICAgIGlmIHRoZXkgYXJlIG5vdCBkZWZpbmVkIGluIGNjLmgsIGluIHRoZSBzYW1lIHNwaXJpdCB0aGFuICJsd2lwL29wdC5oIiBmb3IgbHdpcG9wdHMuaC4KCiAgMjAwNy0wOC0zMCBGculk6XJpYyBCZXJub24KICAqIGlnbXAuaCwgaWdtcC5jOiBTb21lIGNoYW5nZXMgdG8gcmVtb3ZlIHNvbWUgcmVkdW5kYW50IGNvZGUsIGFkZCBzb21lIHRyYWNlcywgCiAgICBhbmQgZml4IHNvbWUgY29kaW5nIHN0eWxlLgoKICAyMDA3LTA4LTI4IEZy6WTpcmljIEJlcm5vbgogICogdGNwaXAuYzogRml4IFRDUElQX01TR19JTlBLVCBwcm9jZXNzaW5nOiBub3csIHRjcGlwX2lucHV0IGNhbiBiZSB1c2VkIGZvciBhbnkKICAgIGtpbmQgb2YgcGFja2V0cy4gVGhlc2UgcGFja2V0cyBhcmUgY29uc2lkZXJlZCBsaWtlIEV0aGVybmV0IHBhY2tldHMgKHBheWxvYWQgCiAgICBwb2ludGluZyB0byBldGhoZHIpIGlmIHRoZSBuZXRpZiBnb3QgdGhlIE5FVElGX0ZMQUdfRVRIQVJQIGZsYWcuIEVsc2UsIHBhY2tldHMgCiAgICBhcmUgY29uc2lkZXJlZCBsaWtlIElQIHBhY2tldHMgKHBheWxvYWQgcG9pbnRpbmcgdG8gaXBoZHIpLgoKICAyMDA3LTA4LTI3IEZy6WTpcmljIEJlcm5vbgogICogYXBpLmgsIGFwaV9saWIuYywgYXBpX21zZy5jOiBGaXJzdCBmaXggZm9yICJidWcgIzIwOTAwIDogUG90ZW50aWFsIGNyYXNoIGVycm9yCiAgICBwcm9ibGVtIHdpdGggbmV0Y29ubl9wZWVyICYgbmV0Y29ubl9hZGRyIi4gSW50cm9kdWNlIE5FVENPTk5fTElTVEVOIG5ldGNvbm5fc3RhdGUKICAgIGFuZCByZW1vdmUgb2Jzb2xldGUgb25lcyAoTkVUQ09OTl9SRUNWICYgTkVUQ09OTl9BQ0NFUFQpLgoKICAyMDA3LTA4LTI0IEtpZXJhbiBNYW5zbGV5CiAgKiBpbmV0LmMgTW9kaWZ5IChhY2MgPj4gMTYpIHRlc3QgdG8gKChhY2MgPj4gMTYpICE9IDApIHRvIGhlbHAgYnVnZ3kKICAgIGNvbXBpbGVyIChQYXJhZGlnbSBDKyspCgogIDIwMDctMDgtMDkgRnLpZOlyaWMgQmVybm9uLCBCaWxsIEZsb3JhYwogICogc3RhdHMuaCwgc3RhdHMuYywgaWdtcC5oLCBpZ21wLmMsIG9wdC5oOiBGaXggZm9yIGJ1ZyAjMjA1MDMgOiBJR01QIEltcHJvdmVtZW50LgogICAgSW50cm9kdWNlIElHTVBfU1RBVFMgdG8gY2VudHJhbGl6ZSBzdGF0aXN0aWNzIG1hbmFnZW1lbnQuCgogIDIwMDctMDgtMDkgRnLpZOlyaWMgQmVybm9uLCBCaWxsIEZsb3JhYwogICogdWRwLmM6IEZpeCBmb3IgYnVnICMyMDUwMyA6IElHTVAgSW1wcm92ZW1lbnQuIEVuYWJsZSB0byByZWNlaXZlIGEgbXVsdGljYXN0CiAgICBwYWNrZXQgb24gYSB1ZHAgcGNiIGJpbmRlZCBvbiBhbiBuZXRpZidzIElQIGFkZHJlc3MsIGFuZCBub3Qgb24gImFueSIuCgogIDIwMDctMDgtMDkgRnLpZOlyaWMgQmVybm9uLCBCaWxsIEZsb3JhYwogICogaWdtcC5oLCBpZ21wLmMsIGlwLmM6IEZpeCBtaW5vciBjaGFuZ2VzIGZyb20gYnVnICMyMDUwMyA6IElHTVAgSW1wcm92ZW1lbnQuCiAgICBUaGlzIGlzIG1haW5seSBvbiB1c2luZyBsb29rdXAvbG9va2ZvciwgYW5kIHNvbWUgY29kaW5nIHN0eWxlcy4uLgoKICAyMDA3LTA3LTI2IEZy6WTpcmljIEJlcm5vbiAoYW5kICJ0aGVkb2N0b3IiKQogICogaWdtcC5jOiBGaXggYnVnICMyMDU5NSB0byBhY2NlcHQgSUdNUHYzICJRdWVyeSIgbWVzc2FnZXMuCgogIDIwMDctMDctMjUgU2ltb24gR29sZHNjaG1pZHQKICAqIGFwaV9tc2cuYywgdGNwLmM6IEFub3RoZXIgZml4IGZvciBidWcgIzIwMDIxOiBieSBub3QgcmV0dXJuaW5nIGFuIGVycm9yIGlmCiAgICB0Y3Bfb3V0cHV0IGZhaWxzIGluIHRjcF9jbG9zZSwgdGhlIGNvZGUgaW4gZG9fY2xvc2VfaW50ZXJuYWwgZ2V0cyBzaW1wbGVyCiAgICAodGNwX291dHB1dCBpcyBjYWxsZWQgYWdhaW4gbGF0ZXIgZnJvbSB0Y3AgdGltZXJzKS4KCiAgMjAwNy0wNy0yNSBTaW1vbiBHb2xkc2NobWlkdAogICogaXBfZnJhZy5jOiBGaXhlZCBidWcgIzIwNDI5OiB1c2UgdGhlIG5ldyBwYnVmX2NvcHlfcGFydGlhbCBpbnN0ZWFkIG9mIHRoZSBvbGQKICAgIGNvcHlfZnJvbV9wYnVmLCB3aGljaCBpbGxlZ2FsbHkgbW9kaWZpZWQgdGhlIGdpdmVuIHBidWYuCgogIDIwMDctMDctMjUgU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcF9vdXQuYzogdGNwX2VucXVldWU6IHBjYi0+c25kX3F1ZXVlbGVuIGRpZG4ndCB3b3JrIGZvciBjaGFpbmUgUEJVRl9SQU1zOgogICAgY2hhbmdlZCBzbmRfcXVldWVsZW4rKyB0byBzbmRfcXVldWVsZW4gKz0gcGJ1Zl9jbGVuKHApLgoKICAyMDA3LTA3LTI0IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBhcGlfbXNnLmMsIHRjcC5jOiBGaXggYnVnICMyMDQ4MDogQ2hlY2sgdGhlIHBjYiBwYXNzZWQgdG8gdGNwX2xpc3RlbigpIGZvciB0aGUKICAgIGNvcnJlY3Qgc3RhdGUgKG11c3QgYmUgQ0xPU0VEKS4KCiAgMjAwNy0wNy0xMyBUaG9tYXMgVGFyYW5vd3NraSAoY29tbWl0ZWQgYnkgSmFyZWQgR3J1YmIpCiAgKiBtZW1wLmM6IEZpeCBidWcgIzIwNDc4OiBtZW1wX21hbGxvYyByZXR1cm5lZCBOVUxMK01FTVBfU0laRSBvbiBmYWlsZWQKICAgIGFsbG9jYXRpb24uIEl0IG5vdyByZXR1cm5zIE5VTEwuCgogIDIwMDctMDctMTMgRnLpZOlyaWMgQmVybm9uCiAgKiBhcGlfbXNnLmM6IEZpeCBidWcgIzIwMzE4OiBhcGlfbXNnICJyZWN2IiBjYWxsYmFja3MgZG9uJ3QgY2FsbCBwYnVmX2ZyZWUgaW4KICAgIGFsbCBlcnJvciBjYXNlcy4KCiAgMjAwNy0wNy0xMyBGculk6XJpYyBCZXJub24KICAqIGFwaV9tc2cuYzogRml4IGJ1ZyAjMjAzMTU6IHBvc3NpYmxlIG1lbW9yeSBsZWFrIHByb2JsZW0gaWYgdGNwX2xpc3RlbiBmYWlsZWQsCiAgICBiZWNhdXNlIGN1cnJlbnQgY29kZSBkb2Vzbid0IGZvbGxvdyByYXdhcGkudHh0IGRvY3VtZW50YXRpb24uCgogIDIwMDctMDctMTMgS2llcmFuIE1hbnNsZXkKICAqIHNyYy9jb3JlL3RjcF9pbi5jIEFwcGx5IHBhdGNoIzU3NDEgZnJvbSBPbGVnIFR5c2hldiB0byBmaXggYnVnIGluCiAgICBvdXQgb2Ygc2VxdWVuY2UgcHJvY2Vzc2luZyBvZiByZWNlaXZlZCBwYWNrZXRzCgogIDIwMDctMDctMDMgU2ltb24gR29sZHNjaG1pZHQKICAqIG5lYXJseS1hbGwtZmlsZXM6IEFkZGVkIGFzc2VydGlvbnMgd2hlcmUgUEJVRl9SQU0gcGJ1ZnMgYXJlIHVzZWQgYW5kIGFuCiAgICBhc3N1bXB0aW9uIGlzIG1hZGUgdGhhdCB0aGlzIHBidWYgaXMgaW4gb25lIHBpZWNlIChpLmUuIG5vdCBjaGFpbmVkKS4gVGhlc2UKICAgIGFzc3VtcHRpb25zIGNsYXNoIHdpdGggdGhlIHBvc3NpYmlsaXR5IG9mIGNvbnZlcnRpbmcgdG8gZnVsbHkgcG9vbC1iYXNlZAogICAgcGJ1ZiBpbXBsZW1lbnRhdGlvbnMsIHdoZXJlIFBCVUZfUkFNIHBidWZzIG1pZ2h0IGJlIGNoYWluZWQuCgogIDIwMDctMDctMDMgU2ltb24gR29sZHNjaG1pZHQKICAqIGFwaS5oLCBhcGlfbGliLmMsIGFwaV9tc2cuYzogRmluYWwgZml4IGZvciBidWcgIzIwMDIxIGFuZCBzb21lIG90aGVyIHByb2JsZW1zCiAgICB3aGVuIGNsb3NpbmcgdGNwIG5ldGNvbm5zOiByZW1vdmVkIGNvbm4tPnNlbSwgbGVzcyBjb250ZXh0IHN3aXRjaGVzIHdoZW4KICAgIGNsb3NpbmcsIGJvdGggbmV0Y29ubl9jbG9zZSBhbmQgbmV0Y29ubl9kZWxldGUgc2hvdWxkIHNhZmVseSBjbG9zZSB0Y3AKICAgIGNvbm5lY3Rpb25zLgoKICAyMDA3LTA3LTAyIFNpbW9uIEdvbGRzY2htaWR0CiAgKiBpcHY0L2lwLmgsIGlwdjYvaXAuaCwgb3B0LmgsIG5ldGlmLmgsIGV0aGFycC5oLCBpcHY0L2lwLmMsIG5ldGlmLmMsIHJhdy5jLAogICAgdGNwX291dC5jLCB1ZHAuYywgZXRoYXJwLmM6IEFkZGVkIG9wdGlvbiBMV0lQX05FVElGX0hXQUREUkhJTlQgKGRlZmF1bHQ9b2ZmKQogICAgdG8gY2FjaGUgQVJQIHRhYmxlIGluZGljZXMgd2l0aCBlYWNoIHBjYiBpbnN0ZWFkIG9mIHNpbmdsZS1lbnRyeSBjYWNoZSBmb3IKICAgIHRoZSBjb21wbGV0ZSBzdGFjay4KCiAgMjAwNy0wNy0wMiBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwLmgsIHRjcC5jLCB0Y3BfaW4uYywgdGNwX291dC5jOiBBZGRlZCBzb21lIEFTU0VSVFMgYW5kIGNhc3RzIHRvIHByZXZlbnQKICAgIHdhcm5pbmdzIHdoZW4gYXNzaWduaW5nIHRvIHNtYWxsZXIgdHlwZXMuCgogIDIwMDctMDYtMjggU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcF9vdXQuYzogQWRkZWQgY2hlY2sgdG8gcHJldmVudCB0Y3BfcGNiLT5zbmRfcXVldWVsZW4gZnJvbSBvdmVyZmxvd2luZy4KCiAgMjAwNy0wNi0yOCBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwLmg6IEZpeGVkIGJ1ZyAjMjAyODc6IEZpeGVkIG5hZ2xlIGFsZ29yaXRobSAoc2VuZGluZyB3YXMgZG9uZSB0b28gZWFybHkgaWYKICAgIGEgc2VnbWVudCBjb250YWluZWQgY2hhaW5lZCBwYnVmcykKCiAgMjAwNy0wNi0yOCBGculk6XJpYyBCZXJub24KICAqIGF1dG9pcC5jOiByZXBsYWNlIG1vc3Qgb2YgcmFuZCgpIGNhbGxzIGJ5IGEgbWFjcm8gTFdJUF9BVVRPSVBfUkFORCB3aGljaCBjb21wdXRlCiAgICBhICJwc2V1ZG8tcmFuZG9tIiB2YWx1ZSBiYXNlZCBvbiBuZXRpZidzIE1BQyBhbmQgc29tZSBhdXRvaXAgZmllbGRzLiBJdCdzIGFsd2F5cwogICAgcG9zc2libGUgdG8gZGVmaW5lIHRoaXMgbWFjcm8gaW4geW91ciBvd24gbHdpcG9wdHMuaCB0byBhbHdheXMgdXNlIEMgbGlicmFyeSdzCiAgICByYW5kKCkuIE5vdGUgdGhhdCBhdXRvaXBfY3JlYXRlX3JhbmRfYWRkciBkb2Vzbid0IHVzZSB0aGlzIG1hY3JvLgoKICAyMDA3LTA2LTI4IEZy6WTpcmljIEJlcm5vbgogICogbmV0aWZhcGkuaCwgbmV0aWZhcGkuYywgdGNwaXAuaCwgdGNwaXAuYzogVXBkYXRlIGNvZGUgdG8gaGFuZGxlIHRoZSBvcHRpb24KICAgIExXSVBfVENQSVBfQ09SRV9MT0NLSU5HLCBhbmQgZG8gc29tZSBjaGFuZ2VzIHRvIGJlIGNvaGVyZW50IHdpdGggbGFzdCBtb2RpZmljYXRpb25zCiAgICBpbiBhcGlfbGliL2FwaV9tc2cgKHVzZSBwb2ludGVycyBhbmQgbm90IHR5cGUgd2l0aCB0YWJsZSwgZXRjLi4uKSAKCiAgMjAwNy0wNi0yNiBTaW1vbiBHb2xkc2NobWlkdAogICogdWRwLmg6IEZpeGVkIGJ1ZyAjMjAyNTk6IHN0cnVjdCB1ZHBfaGRyIHdhcyBsYWNraW5nIHRoZSBwYWNraW4gZGVmaW5lcy4KCiAgMjAwNy0wNi0yNSBTaW1vbiBHb2xkc2NobWlkdAogICogdWRwLmM6IEZpeGVkIGJ1ZyAjMjAyNTM6IGljbXBfZGVzdF91bnJlYWNoIHdhcyBjYWxsZWQgd2l0aCBhIHdyb25nIHAtPnBheWxvYWQKICAgIGZvciB1ZHAgcGFja2V0cyB3aXRoIG5vIG1hdGNoaW5nIHBjYi4KCiAgMjAwNy0wNi0yNSBTaW1vbiBHb2xkc2NobWlkdAogICogdWRwLmM6IEZpeGVkIGJ1ZyAjMjAyMjA6IFVEUCBQQ0Igc2VhcmNoIGluIHVkcF9pbnB1dCgpOiBhIG5vbi1sb2NhbCBtYXRjaAogICAgY291bGQgZ2V0IHVkcCBpbnB1dCBwYWNrZXRzIGlmIHRoZSByZW1vdGUgc2lkZSBtYXRjaGVkLgoKICAyMDA3LTA2LTEzIFNpbW9uIEdvbGRzY2htaWR0CiAgKiBuZXRpZi5jOiBGaXhlZCBidWcgIzIwMTgwIChUQ1AgcGNicyBsaXN0ZW5pbmcgb24gSVBfQUREUl9BTlkgY291bGQgZ2V0CiAgICBjaGFuZ2VkIGluIG5ldGlmX3NldF9pcGFkZHIgaWYgcHJldmlvdXMgbmV0aWYtPmlwX2FkZHIuYWRkciB3YXMgMC4KCiAgMjAwNy0wNi0xMyBTaW1vbiBHb2xkc2NobWlkdAogICogYXBpX21zZy5jOiBwY2JfbmV3IHNldHMgY29ubi0+ZXJyIGlmIHByb3RvY29sIGlzIG5vdCBpbXBsZW1lbnRlZAogICAgLT4gbmV0Y29ubl9uZXdfLi4oKSBkb2VzIG5vdCBhbGxvY2F0ZSBhIG5ldyBjb25uZWN0aW9uIGZvciB1bnN1cHBvcnRlZAogICAgcHJvdG9jb2xzLgoKICAyMDA3LTA2LTEzIEZy6WTpcmljIEJlcm5vbiwgU2ltb24gR29sZHNjaG1pZHQKICAqIGFwaV9saWIuYzogY2hhbmdlIHJldHVybiBleHByZXNzaW9uIGluIG5ldGNvbm5fYWRkciBhbmQgbmV0Y29ubl9wZWVyLCBiZWNhdXNlCiAgICBjb25uLT5lcnIgd2FzIHJlc2V0IHRvIEVSUl9PSyB3aXRob3V0IGFueSByZWFzb25zIChhbmQgZXJyb3Igd2FzIGxvc3QpLi4uCgogIDIwMDctMDYtMTMgRnLpZOlyaWMgQmVybm9uLCBNYXR0aGlhcyBXZWlzc2VyCiAgKiBvcHQuaCwgbWVtLmgsIG1lbS5jLCBtZW1wLmMsIHBidWYuYywgaXBfZnJhZy5jLCB2ai5jOiBGaXggYnVnICMyMDE2Mi4gUmVuYW1lCiAgICBNRU1fQUxJR04gaW4gTFdJUF9NRU1fQUxJR04gYW5kIE1FTV9BTElHTl9TSVpFIGluIExXSVBfTUVNX0FMSUdOX1NJWkUgdG8gYXZvaWQKICAgIHNvbWUgbWFjcm8gbmFtZXMgY29sbGlzaW9uIHdpdGggc29tZSBPUyBtYWNyb3MuCgogIDIwMDctMDYtMTEgU2ltb24gR29sZHNjaG1pZHQKICAqIHVkcC5jOiBVRFAgTGl0ZTogY29ycmVjdGVkIHRoZSB1c2Ugb2YgY2hrc3VtX2xlbiAoYmFzZWQgb24gUkZDMzgyODogaWYgaXQncyAwLAogICAgY3JlYXRlIGNoZWNrc3VtIG92ZXIgdGhlIGNvbXBsZXRlIHBhY2tldC4gT24gUlgsIGlmIGl0J3MgPCA4IChhbmQgbm90IDApLAogICAgZGlzY2FyZCB0aGUgcGFja2V0LiBBbHNvIHJlbW92ZWQgdGhlIGR1cGxpY2F0ZSAndWRwaGRyLT5jaGtzdW0gPSAwJyBmb3IgYm90aAogICAgVURQICYgVURQIExpdGUuCgogIDIwMDctMDYtMTEgU3Jpbml2YXMgR29sbGFrb3RhICYgT2xlZyBUeXNoZXYKICAqIHRjcF9vdXQuYzogRml4IGZvciBidWcgIzIwMDc1IDogIkEgcHJvYmxlbSB3aXRoIGtlZXAtYWxpdmUgdGltZXIgYW5kIFRDUCBmbGFncyIKICAgIHdoZXJlIFRDUCBmbGFncyB3YXNuJ3QgaW5pdGlhbGl6ZWQgaW4gdGNwX2tlZXBhbGl2ZS4KCiAgMjAwNy0wNi0wMyBTaW1vbiBHb2xkc2NobWlkdAogICogdWRwLmM6IHVkcF9pbnB1dCgpOiBJbnB1dCBwYnVmIHdhcyBub3QgZnJlZWQgaWYgcGNiIGhhZCBubyByZWN2IGZ1bmN0aW9uCiAgICByZWdpc3RlcmVkLCBwLT5wYXlsb2FkIHdhcyBtb2RpZmllZCB3aXRob3V0IG1vZGlmeWluZyBwLT5sZW4gaWYgc2VuZGluZwogICAgaWNtcF9kZXN0X3VucmVhY2goKSAoaGFkIG5vIG5lZ2F0aXZlIGVmZmVjdCBidXQgd2FzIGRlZmluaXRpdmVseSB3cm9uZykuCgogIDIwMDctMDYtMDMgU2ltb24gR29sZHNjaG1pZHQKICAqIGljbXAuYzogQ29ycmVjdGVkIGJ1ZyAjMTk5Mzc6IEZvciByZXNwb25kaW5nIHRvIGFuIGljbXAgZWNobyByZXF1ZXN0LCBpY21wCiAgICByZS11c2VkIHRoZSBpbnB1dCBwYnVmIGV2ZW4gaWYgdGhhdCBkaWRuJ3QgaGF2ZSBlbm91Z2ggc3BhY2UgdG8gaW5jbHVkZSB0aGUKICAgIGxpbmsgaGVhZGVycy4gTm93IHRoZSBzcGFjZSBpcyB0ZXN0ZWQgYW5kIGEgbmV3IHBidWYgaXMgYWxsb2NhdGVkIGZvciB0aGUKICAgIGVjaG8gcmVzcG9uc2UgcGFja2V0IGlmIHRoZSBlY2hvIHJlcXVlc3QgcGJ1ZiBpc24ndCBiaWcgZW5vdWdoLgoKICAyMDA3LTA2LTAxIFNpbW9uIEdvbGRzY2htaWR0CiAgKiBzb2NrZXRzLmM6IENoZWNrZWQgaW4gcGF0Y2ggIzU5MTQ6IE1vdmVkIHNvY2tvcHQgcHJvY2Vzc2luZyBpbnRvIHRjcGlwX3RocmVhZC4KCiAgMjAwNy0wNS0yMyBGculk6XJpYyBCZXJub24KICAqIGFwaV9saWIuYywgc29ja2V0cy5jOiBGaXhlZCBidWcgIzU5NTggZm9yIG5ldGNvbm5fbGlzdGVuIChhY2NlcHRtYm94IG9ubHkKICAgIGFsbG9jYXRlZCBieSBkb19saXN0ZW4gaWYgc3VjY2VzcykgYW5kIG5ldGNvbm5fYWNjZXB0IGVycm9ycyBoYW5kbGluZy4gSW4KICAgIG1vc3Qgb2YgYXBpX2xpYiBmdW5jdGlvbnMsIHdlIHJlcGxhY2Ugc29tZSBlcnJvcnMgY2hlY2tpbmdzIGxpa2UgImlmIChjb25uPT1OVUxMKSIKICAgIGJ5IEFTU0VSVCwgZXhjZXB0IGZvciBuZXRjb25uX2RlbGV0ZS4KCiAgMjAwNy0wNS0yMyBGculk6XJpYyBCZXJub24KICAqIGFwaV9saWIuYzogRml4ZWQgYnVnICM1OTU3ICJTYWZlLXRocmVhZCBwcm9ibGVtIGluc2lkZSBuZXRjb25uX3JlY3YiIHRvIHJldHVybgogICAgYW4gZXJyb3IgY29kZSBpZiBpdCdzIGltcG9zc2libGUgdG8gZmV0Y2ggYSBwYnVmIG9uIGEgVENQIGNvbm5lY3Rpb24gKGFuZCBub3QKICAgIGRpcmVjdGx5IGNsb3NlIHRoZSByZWN2bWJveCkuCgogIDIwMDctMDUtMjIgU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcC5jOiBGaXhlZCBidWcgIzE4OTUgKHRjcF9iaW5kIG5vdCBjb3JyZWN0KSBieSBpbnRyb2R1Y2luZyBhIGxpc3Qgb2YKICAgIGJvdW5kIGJ1dCB1bmNvbm5lY3RlZCAoYW5kIG5vbi1saXN0ZW5pbmcpIHRjcF9wY2JzLgoKICAyMDA3LTA1LTIyIEZy6WTpcmljIEJlcm5vbgogICogc3lzLmgsIHN5cy5jLCBhcGlfbGliLmMsIHRjcGlwLmM6IHJlbW92ZSBzeXNfbWJveF9mZXRjaF90aW1lb3V0KCkgKHdhcyBvbmx5CiAgICB1c2VkIGZvciBMV0lQX1NPX1JDVlRJTUVPIG9wdGlvbikgYW5kIHVzZSBzeXNfYXJjaF9tYm94X2ZldGNoKCkgaW5zdGVhZCBvZgogICAgc3lzX21ib3hfZmV0Y2goKSBpbiBhcGkgZmlsZXMuIE5vdywgdXNlcnMgU0hPVUxEIE5PVCB1c2UgaW50ZXJuYWwgbHdJUCBmZWF0dXJlcwogICAgbGlrZSAic3lzX3RpbWVvdXQiIGluIHRoZWlyIGFwcGxpY2F0aW9uIHRocmVhZHMuCgogIDIwMDctMDUtMjIgRnLpZOlyaWMgQmVybm9uCiAgKiBhcGkuaCwgYXBpX2xpYi5jLCBhcGlfbXNnLmgsIGFwaV9tc2cuYzogY2hhbmdlIHRoZSBzdHJ1Y3QgYXBpX21zZ19tc2cgdG8gc2VlCiAgICB3aGljaCBwYXJhbWV0ZXJzIGFyZSB1c2VkIGJ5IHdoaWNoIGRvX3h4eCBmdW5jdGlvbiwgYW5kIHRvIGF2b2lkICJtaXN1c2luZyIKICAgIHBhcmFtZXRlcnMgKHBhdGNoICM1OTM4KS4KCiAgMjAwNy0wNS0yMiBTaW1vbiBHb2xkc2NobWlkdAogICogYXBpX2xpYi5jLCBhcGlfbXNnLmMsIHJhdy5jLCBhcGkuaCwgYXBpX21zZy5oLCByYXcuaDogSW5jbHVkZWQgcGF0Y2ggIzU5Mzg6CiAgICBjaGFuZ2VkIHJhd19wY2IucHJvdG9jb2wgZnJvbSB1MTZfdCB0byB1OF90IHNpbmNlIGZvciBJUHY0IGFuZCBJUHY2LCBwcm90bwogICAgaXMgb25seSA4IGJpdHMgd2lkZS4gVGhpcyBhZmZlY3RzIHRoZSBhcGksIGFzIHRoZXJlLCB0aGUgcHJvdG9jb2wgd2FzCiAgICB1MTZfdCwgdG9vLgoKICAyMDA3LTA1LTE4IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBtZW1wLmM6IGFkZGl0aW9uIHRvIHBhdGNoICM1OTEzOiBzbWFsbGVyIHBvaW50ZXIgd2FzIHJldHVybmVkIGJ1dAogICAgbWVtcF9tZW1vcnkgd2FzIHRoZSBzYW1lIHNpemUgLT4gZGlkIG5vdCBzYXZlIG1lbW9yeS4KCiAgMjAwNy0wNS0xNiBTaW1vbiBHb2xkc2NobWlkdAogICogbG9vcGlmLmMsIHNsaXBpZi5jOiBGaXggYnVnICMxOTcyOTogZnJlZSBwYnVmIGlmIG5ldGlmLT5pbnB1dCgpIHJldHVybnMKICAgICE9IEVSUl9PSy4KCiAgMjAwNy0wNS0xNiBTaW1vbiBHb2xkc2NobWlkdAogICogYXBpX21zZy5jLCB1ZHAuYzogSWYgYSB1ZHBfcGNiIGhhcyBhIGxvY2FsX2lwIHNldCwgY2hlY2sgaWYgaXQgaXMgdGhlIHNhbWUKICAgIGFzIHRoZSBvbmUgb2YgdGhlIG5ldGlmIHVzZWQgZm9yIHNlbmRpbmcgdG8gcHJldmVudCBzZW5kaW5nIGZyb20gb2xkCiAgICBhZGRyZXNzZXMgYWZ0ZXIgYSBuZXRpZiBhZGRyZXNzIGdldHMgY2hhbmdlZCAocGFydGx5IGZpeGVzIGJ1ZyAjMzE2OCkuCgogIDIwMDctMDUtMTYgRnLpZOlyaWMgQmVybm9uCiAgKiB0Y3BpcC5jLCBpZ21wLmgsIGlnbXAuYzogRml4ZWQgYnVnICIjMTk4MDAgOiBJR01QOiBpZ21wX3RpY2soKSB3aWxsIG5vdCB3b3JrCiAgICB3aXRoIE5PX1NZUz0xIi4gTm90ZSB0aGF0IGlnbXBfaW5pdCBpcyBhbHdheXMgaW4gdGNwaXBfdGhyZWFkIChhbmQgbm90IGluIAogICAgdGNwaXBfaW5pdCkgYmVjYXVzZSB3ZSBoYXZlIHRvIGJlIHN1cmUgdGhhdCBuZXR3b3JrIGludGVyZmFjZXMgYXJlIGFscmVhZHkKICAgIGFkZGVkIChtYWMgZmlsdGVyIGlzIHVwZGF0ZWQgb25seSBpbiBpZ21wX2luaXQgZm9yIHRoZSBtb21lbnQpLgoKICAyMDA3LTA1LTE2IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBtZW0uYywgbWVtcC5jOiBSZW1vdmVkIHNlbWFwaG9yZXMgZnJvbSBtZW1wLCBjaGFuZ2VkIHN5c19zZW1fd2FpdCBjYWxscwogICAgaW50byBzeXNfYXJjaF9zZW1fd2FpdCBjYWxscyB0byBwcmV2ZW50IHRpbWVycyBmcm9tIHJ1bm5pbmcgd2hpbGUgd2FpdGluZwogICAgZm9yIHRoZSBoZWFwLiBUaGlzIGZpeGVzIGJ1ZyAjMTkxNjcuCgogIDIwMDctMDUtMTMgU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcC5oLCBzb2NrZXRzLmgsIHNvY2tldHMuYzogRml4ZWQgYnVnIGZyb20gcGF0Y2ggIzU4NjUgYnkgbW92aW5nIHRoZSBkZWZpbmVzCiAgICBmb3Igc29ja2V0IG9wdGlvbnMgKGx3aXBfc2V0Ly1nZXRzb2Nrb3B0KSB1c2VkIHdpdGggbGV2ZWwgSVBQUk9UT19UQ1AgZnJvbQogICAgdGNwLmggdG8gc29ja2V0cy5oLgoKICAyMDA3LTA1LTA3IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBtZW0uYzogQW5vdGhlciBhdHRlbXB0IHRvIGZpeCBidWcgIzE3OTIyLgoKICAyMDA3LTA1LTA0IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBwYnVmLmMsIHBidWYuaCwgZXRoYXJwLmM6IEZ1cnRoZXIgdXBkYXRlIHRvIEFSUCBxdWV1ZWluZzogQ2hhbmdlZCBwYnVmX2NvcHkoKQogICAgaW1wbGVtZW50YXRpb24gc28gdGhhdCBpdCBjYW4gYmUgcmV1c2VkIChkb24ndCBhbGxvY2F0ZSB0aGUgdGFyZ2V0CiAgICBwYnVmIGluc2lkZSBwYnVmX2NvcHkoKSkuCgogIDIwMDctMDUtMDQgU2ltb24gR29sZHNjaG1pZHQKICAqIG1lbXAuYzogY2hlY2tlZCBpbiBwYXRjaCAjNTkxMzogaW4gbWVtcF9tYWxsb2MoKSB3ZSBjYW4gcmV0dXJuIG1lbXAgYXMgbWVtCiAgICB0byBzYXZlIGEgbGl0dGxlIFJBTSAobmV4dCBwb2ludGVyIG9mIG1lbXAgaXMgbm90IHVzZWQgd2hpbGUgbm90IGluIHBvb2wpLgoKICAyMDA3LTA1LTAzICJtYXEiCiAgKiBzb2NrZXRzLmM6IEZpeCBpb2N0bCBGSU9OUkVBRCB3aGVuIHNvbWUgZGF0YSByZW1haW5zIGZyb20gbGFzdCByZWN2LgogICAgKHBhdGNoICMzNTc0KS4KCiAgMjAwNy0wNC0yMyBTaW1vbiBHb2xkc2NobWlkdAogICogbG9vcGlmLmMsIGxvb3BpZi5oLCBvcHQuaCwgc3JjL25ldGlmL0ZJTEVTOiBmaXggYnVnICMyNTk1OiAibG9vcGlmIHJlc3VsdHMKICAgIGluIE5VTEwgcmVmZXJlbmNlIGZvciBpbmNvbWluZyBUQ1AgcGFja2V0cyIuIExvb3BpZiBoYXMgdG8gYmUgY29uZmlndXJlZAogICAgKHVzaW5nIExXSVBfTE9PUElGX01VTFRJVEhSRUFESU5HKSB0byBkaXJlY3RseSBjYWxsIG5ldGlmLT5pbnB1dCgpCiAgICAobXVsdGl0aHJlYWRpbmcgZW52aXJvbm1lbnRzLCBlLmcuIG5ldGlmLT5pbnB1dCgpID0gdGNwaXBfaW5wdXQoKSkgb3IKICAgIHB1dHRpbmcgcGFja2V0cyBvbiBhIGxpc3QgdGhhdCBpcyBmZWQgdG8gdGhlIHN0YWNrIGJ5IGNhbGxpbmcgbG9vcGlmX3BvbGwoKQogICAgKHNpbmdsZS10aHJlYWQgLyBOT19TWVMgLyBwb2xsaW5nIGVudmlyb25tZW50IHdoZXJlIGUuZy4KICAgIG5ldGlmLT5pbnB1dCgpID0gaXBfaW5wdXQpLgoKICAyMDA3LTA0LTE3IEpvbmF0aGFuIExhcm1vdXIKICAqIHBidWYuYzogVXNlIHMzMl90IGluIHBidWZfcmVhbGxvYygpLCBhcyBhbiBzMTZfdCBjYW4ndCByZWxpYWJseSBob2xkCiAgICB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byB1MTZfdCdzLgogICogc29ja2V0cy5oOiBGRF9TRVRTSVpFIG5lZWRzIHRvIG1hdGNoIG51bWJlciBvZiBzb2NrZXRzLCB3aGljaCBpcwogICAgTUVNUF9OVU1fTkVUQ09OTiBpbiBzb2NrZXRzLmMgcmlnaHQgbm93LgoKICAyMDA3LTA0LTEyIEpvbmF0aGFuIExhcm1vdXIKICAqIGljbXAuYzogUmVzZXQgSVAgaGVhZGVyIFRUTCBpbiBJQ01QIEVDSE8gcmVzcG9uc2VzIChidWcgIzE5NTgwKS4KCiAgMjAwNy0wNC0xMiBLaWVyYW4gTWFuc2xleQogICogdGNwLmMsIHRjcF9pbi5jLCB0Y3Bfb3V0LmMsIHRjcC5oOiBNb2RpZnkgd2F5IHRoZSByZXRyYW5zbWlzc2lvbgogICAgdGltZXIgaXMgcmVzZXQgdG8gZml4IGJ1ZyMxOTQzNCwgd2l0aCBoZWxwIGZyb20gT2xlZyBUeXNoZXYuCgogIDIwMDctMDQtMTEgU2ltb24gR29sZHNjaG1pZHQKICAqIGV0aGFycC5jLCBwYnVmLmMsIHBidWYuaDogM3JkIGZpeCBmb3IgYnVnICMxMTQwMCAoYXJwLXF1ZXVpbmcpOiBNb3JlIHBidWZzIHRoYW4KICAgIHByZXZpb3VzbHkgdGhvdWdodCBuZWVkIHRvIGJlIGNvcGllZCAoZXZlcnl0aGluZyBidXQgUEJVRl9ST00hKS4gQ2xlYW5lZCB1cAogICAgcGJ1Zi5jOiByZW1vdmVkIGZ1bmN0aW9ucyBubyBuZWVkZWQgYW55IG1vcmUgKGJ5IGV0aGFycCkuCgogIDIwMDctMDQtMTEgS2llcmFuIE1hbnNsZXkKICAqIGluZXQuYywgaXBfYWRkci5oLCBzb2NrZXRzLmgsIHN5cy5oLCB0Y3AuaDogQXBwbHkgcGF0Y2ggIzU3NDU6IEZpeAogICAgIkNvbnN0YW50IGlzIGxvbmciIHdhcm5pbmdzIHdpdGggMTZiaXQgY29tcGlsZXJzLiAgQ29udHJpYnV0ZWQgYnkKICAgIGF2YXRhckBtbWxhYi5jc2UueXp1LmVkdS50dwoKICAyMDA3LTA0LTA1IEZy6WTpcmljIEJlcm5vbiwgSm9uYXRoYW4gTGFybW91cgogICogYXBpX21zZy5jOiBGaXggYnVnICMxNjgzMDogImVycl90Y3AoKSBwb3N0cyB0byBjb25uZWN0aW9uIG1haWxib3ggd2hlbiBubyBwZW5kIG9uCiAgICB0aGUgbWFpbGJveCBpcyBhY3RpdmUiLiBOb3csIHRoZSBwb3N0IGlzIG9ubHkgZG9uZSBkdXJpbmcgYSBjb25uZWN0LCBhbmQgZG9fc2VuZCwKICAgIGRvX3dyaXRlIGFuZCBkb19qb2luX2xlYXZlX2dyb3VwIGRvbid0IGRvIGFueXRoaW5nIGlmIGEgcHJldmlvdXMgZXJyb3Igd2FzIHNpZ25hbGVkLgoKICAyMDA3LTA0LTAzIEZy6WTpcmljIEJlcm5vbgogICogaXAuYzogRG9uJ3Qgc2V0IHRoZSBJUF9ERiAoIkRvbid0IGZyYWdtZW50IikgZmxhZyBpbiB0aGUgSVAgaGVhZGVyIGluIElQIG91dHB1dAogICAgcGFja2V0cy4gU2VlIHBhdGNoICM1ODM0LgoKICAyMDA3LTAzLTMwIEZy6WTpcmljIEJlcm5vbgogICogYXBpX21zZy5jOiBhZGQgYSAicGNiX25ldyIgaGVscGVyIGZ1bmN0aW9uIHRvIGF2b2lkIHJlZHVuZGFudCBjb2RlLCBhbmQgdG8gYWRkCiAgICBtaXNzaW5nICBwY2IgYWxsb2NhdGlvbnMgY2hlY2tpbmcgKGluIGRvX2JpbmQsIGFuZCBmb3IgZWFjaCByYXdfbmV3KS4gRml4IHN0eWxlLgoKICAyMDA3LTAzLTMwIEZy6WTpcmljIEJlcm5vbgogICogbW9zdCBvZiBmaWxlczogcHJlZml4IGFsbCBkZWJ1Zy5oIGRlZmluZSB3aXRoICJMV0lQXyIgdG8gYXZvaWQgYW55IGNvbmZsaWN0IHdpdGgKICAgIG90aGVycyBlbnZpcm9ubWVudCBkZWZpbmVzICh0aGVzZSB3ZXJlIHRvbyAiZ2VuZXJpYyIpLgoKICAyMDA3LTAzLTI4IEZy6WTpcmljIEJlcm5vbgogICogYXBpLmgsIGFwaV9saWIuYywgc29ja2V0cy5jOiBuZXRidWZfcmVmIGRvZXNuJ3QgY2hlY2sgaXRzIGludGVybmFsIHBidWZfYWxsb2MgY2FsbAogICAgcmVzdWx0IGFuZCBjYW4gY2F1c2UgYSBjcmFzaC4gbHdpcF9zZW5kIG5vdyBjaGVjayBuZXRidWZfcmVmIHJlc3VsdC4KCiAgMjAwNy0wMy0yOCBTaW1vbiBHb2xkc2NobWlkdAogICogc29ja2V0cy5jIFJlbW92ZSAiI2luY2x1ZGUgPGVycm5vLmg+IiBmcm9tIHNvY2tldHMuYyB0byBhdm9pZCBtdWx0aXBsZQogICAgZGVmaW5pdGlvbiBvZiBtYWNyb3MgKGluIGVycm5vLmggYW5kIGx3aXAvYXJjaC5oKSBpZiBMV0lQX1BST1ZJREVfRVJSTk8gaXMKICAgIGRlZmluZWQuIFRoaXMgaXMgdGhlIHdheSBpdCBzaG91bGQgaGF2ZSBiZWVuIGFscmVhZHkgKGxvb2tpbmcgYXQKICAgIGRvYy9zeXNfYXJjaC50eHQpCgogIDIwMDctMDMtMjggS2llcmFuIE1hbnNsZXkKICAqIG9wdC5oIENoYW5nZSBkZWZhdWx0IFBCVUZfUE9PTF9CVUZTSVpFIChhZ2FpbikgdG8gYWNjb21vZGF0ZSBkZWZhdWx0IE1TUyArCiAgICBJUCBhbmQgVENQIGhlYWRlcnMgKmFuZCogcGh5c2ljYWwgbGluayBoZWFkZXJzCgogIDIwMDctMDMtMjYgRnLpZOlyaWMgQmVybm9uIChiYXNlZCBvbiBwYXRjaCBmcm9tIERtaXRyeSBQb3RhcG92KQogICogYXBpX2xpYi5jOiBwYXRjaCBmb3IgbmV0Y29ubl93cml0ZSgpLCBmaXhlcyBhIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9uIHdoaWNoIGNhdXNlCiAgICB0byBzZW5kIHNvbWUgZ2FyYmFnZS4gSXQgaXMgbm90IGEgZGVmaW5pdGl2ZSBzb2x1dGlvbiwgYnV0IHRoZSBwYXRjaCBkb2VzIHNvbHZlCiAgICB0aGUgcHJvYmxlbSBmb3IgbW9zdCBjYXNlcy4KCiAgMjAwNy0wMy0yMiBGculk6XJpYyBCZXJub24KICAqIGFwaV9tc2cuaCwgYXBpX21zZy5jOiBSZW1vdmUgb2Jzb2xldGUgQVBJX01TR19BQ0NFUFQgYW5kIGRvX2FjY2VwdCAobmV2ZXIgdXNlZCkuCgogIDIwMDctMDMtMjIgRnLpZOlyaWMgQmVybm9uCiAgKiBhcGlfbGliLmM6IHNvbWVzIHJlc291cmNlcyBjb3VsZG4ndCBiZSBmcmVlZCBpZiB0aGVyZSB3YXMgZXJyb3JzIGR1cmluZwogICAgbmV0Y29ubl9uZXdfd2l0aF9wcm90b19hbmRfY2FsbGJhY2suCgogIDIwMDctMDMtMjIgRnLpZOlyaWMgQmVybm9uCiAgKiBldGhlcm5ldGlmLmM6IHVwZGF0ZSBuZXRpZi0+aW5wdXQgY2FsbHMgdG8gY2hlY2sgcmV0dXJuIHZhbHVlLiBJbiBvbGRlciBwb3J0cywKICAgIGl0J3MgYSBnb29kIGlkZWEgdG8gdXBncmFkZSB0aGVtLCBldmVuIGlmIGJlZm9yZSwgdGhlcmUgY291bGQgYmUgYW5vdGhlciBwcm9ibGVtCiAgICAoYWNjZXNzIHRvIGFuIHVuaW5pdGlhbGl6ZWQgbWFpbGJveCkuCgogIDIwMDctMDMtMjEgU2ltb24gR29sZHNjaG1pZHQKICAqIHNvY2tldHMuYzogZml4ZWQgYnVnICM1MDY3IChlc3NlbnRpYWx5IGEgc2lnbmVkL3Vuc2lnbmVkIHdhcm5pbmcgZml4ZWQKICAgIGJ5IGNhc3RpbmcgdG8gdW5zaWduZWQpLgoKICAyMDA3LTAzLTIxIEZy6WTpcmljIEJlcm5vbgogICogYXBpX2xpYi5jLCBhcGlfbXNnLmMsIHRjcGlwLmM6IGludGVncmF0ZSBzeXNfbWJveF9mZXRjaChjb25uLT5tYm94LCBOVUxMKSBjYWxscyBmcm9tCiAgICBhcGlfbGliLmMgdG8gdGNwaXAuYydzIHRjcGlwX2FwaW1zZygpLiBOb3csIHVzZSBhIGxvY2FsIHZhcmlhYmxlIGFuZCBub3QgYQogICAgZHluYW1pYyBvbmUgZnJvbSBtZW1wIHRvIHNlbmQgdGNwaXBfbXNnIHRvIHRjcGlwX3RocmVhZCBpbiBhIHN5bmNocm9uZSBjYWxsLgogICAgRnJlZSB0Y3BpcF9tc2cgZnJvbSB0Y3BpcF9hcGltc2cgaXMgbm90IGRvbmUgaW4gdGNwaXBfdGhyZWFkLiBUaGlzIGdpdmUgYQogICAgZmFzdGVyIGFuZCBtb3JlIHJlbGlhYmxlIGNvbW11bmljYXRpb24gYmV0d2VlbiBhcGlfbGliIGFuZCB0Y3BpcC4KCiAgMjAwNy0wMy0yMSBGculk6XJpYyBCZXJub24KICAqIG9wdC5oOiBBZGQgTFdJUF9ORVRJRl9DQUxMQkFDSyAodG8gYXZvaWQgY29tcGlsZXIgd2FybmluZykgYW5kIHNldCBpdCB0byAwLgoKICAyMDA3LTAzLTIxIEZy6WTpcmljIEJlcm5vbgogICogYXBpX21zZy5jLCBpZ21wLmMsIGlnbXAuaDogRml4IEMrKyBzdHlsZSBjb21tZW50cwoKICAyMDA3LTAzLTIxIEtpZXJhbiBNYW5zbGV5CiAgKiBvcHQuaCBDaGFuZ2UgZGVmYXVsdCBQQlVGX1BPT0xfQlVGU0laRSB0byBhY2NvbW9kYXRlIGRlZmF1bHQgTVNTICsKICAgIElQIGFuZCBUQ1AgaGVhZGVycwoKICAyMDA3LTAzLTIxIEtpZXJhbiBNYW5zbGV5CiAgKiBGaXggYWxsIHVzZXMgb2YgcGJ1Zl9oZWFkZXIgdG8gY2hlY2sgdGhlIHJldHVybiB2YWx1ZS4gIEluIHNvbWUKICAgIGNhc2VzIGp1c3QgYXNzZXJ0IGlmIGl0IGZhaWxzIGFzIEknbSBub3Qgc3VyZSBob3cgdG8gZml4IHRoZW0sIGJ1dAogICAgdGhpcyBpcyBubyB3b3JzZSB0aGFuIGJlZm9yZSB3aGVuIHRoZXkgd291bGQgY2Fycnkgb24gcmVnYXJkbGVzcwogICAgb2YgdGhlIGZhaWx1cmUuCgogIDIwMDctMDMtMjEgS2llcmFuIE1hbnNsZXkKICAqIHNvY2tldHMuYywgaWdtcC5jLCBpZ21wLmgsIG1lbXAuaDogRml4IEMrKyBzdHlsZSBjb21tZW50cyBhbmQKICAgIGNvbW1lbnQgb3V0IG1pc3NpbmcgaGVhZGVyIGluY2x1ZGUgaW4gaWNtcC5jCgogIDIwMDctMDMtMjAgRnLpZOlyaWMgQmVybm9uCiAgKiBtZW1wLmgsIHN0YXRzLmM6IEZpeCBzdGF0c19kaXNwbGF5IGZ1bmN0aW9uIHdoZXJlIG1lbXBfbmFtZXMgdGFibGUgd2Fzbid0CiAgICBzeW5jaHJvbml6ZWQgd2l0aCBtZW1wLmguCgogIDIwMDctMDMtMjAgRnLpZOlyaWMgQmVybm9uCiAgKiB0Y3BpcC5jOiBJbml0aWFsaXplIHRjcGlwJ3MgbWJveCwgYW5kIHZlcmlmeSBpZiBpbml0aWFsaXplZCBpbiB0Y3BpcF9pbnB1dCwKICAgIHRjcGlwX2V0aGlucHV0LCB0Y3BpcF9jYWxsYmFjaywgdGNwaXBfYXBpbXNnLCB0byBmaXggYSBpbml0IHByb2JsZW0gd2l0aCAKICAgIG5ldHdvcmsgaW50ZXJmYWNlcy4gQWxzbyBmaXggYSBjb21waWxlciB3YXJuaW5nLgoKICAyMDA3LTAzLTIwIEtpZXJhbiBNYW5zbGV5CiAgKiB1ZHAuYzogT25seSB0cnkgYW5kIHVzZSBwYnVmX2hlYWRlcigpIHRvIG1ha2Ugc3BhY2UgZm9yIGhlYWRlcnMgaWYKICAgIG5vdCBhIFJPTSBvciBSRUYgcGJ1Zi4KCiAgMjAwNy0wMy0xOSBGculk6XJpYyBCZXJub24KICAqIGFwaV9tc2cuaCwgYXBpX21zZy5jLCB0Y3BpcC5oLCB0Y3BpcC5jOiBBZGQgcmV0dXJuIHR5cGVzIHRvIHRjcGlwX2FwaW1zZygpCiAgICBhbmQgYXBpX21zZ19wb3N0KCkuCgogIDIwMDctMDMtMTkgRnLpZOlyaWMgQmVybm9uCiAgKiBSZW1vdmUgdW5pbXBsZW1lbnRlZCAibWVtcF9yZWFsbG9jIiBmdW5jdGlvbiBmcm9tIG1lbXAuaC4KCiAgMjAwNy0wMy0xMSBTaW1vbiBHb2xkc2NobWlkdAogICogcGJ1Zi5jOiBjaGVja2VkIGluIHBhdGNoICM1Nzk2OiBwYnVmX2FsbG9jOiBsZW4gZmllbGQgY2xhY3VsYXRpb24gY2F1c2VkCiAgICBtZW1vcnkgY29ycnVwdGlvbi4KCiAgMjAwNy0wMy0xMSBTaW1vbiBHb2xkc2NobWlkdCAoYmFzZWQgb24gcGF0Y2ggZnJvbSBEbWl0cnkgUG90YXBvdikKICAqIGFwaV9saWIuYywgc29ja2V0cy5jLCBhcGkuaCwgYXBpX21zZy5oLCBzb2NrZXRzLmg6IEZpeGVkIGJ1ZyAjMTkyNTEKICAgIChtaXNzaW5nIGBjb25zdCcgcXVhbGlmaWVyIGluIHNvY2tldCBmdW5jdGlvbnMpLCB0byBnZXQgbW9yZSBjb21wYXRpYmxlIHRvCiAgICBzdGFuZGFyZCBQT1NJWCBzb2NrZXRzLgoKICAyMDA3LTAzLTExIEZy6WTpcmljIEJlcm5vbiAoYmFzZWQgb24gcGF0Y2ggZnJvbSBEbWl0cnkgUG90YXBvdikKICAqIHNvY2tldHMuYzogQWRkIGFzc2VydHMgaW5zaWRlIGJpbmQsIGNvbm5lY3QgYW5kIHNlbmR0byB0byBjaGVjayBpbnB1dAogICAgcGFyYW1ldGVycy4gUmVtb3ZlIGV4Y2Vzc2l2ZSBzZXRfZXJybm8oKSBjYWxscyBhZnRlciBnZXRfc29ja2V0KCksIGJlY2F1c2UKICAgIGVycm5vIGlzIHNldCBpbnNpZGUgb2YgZ2V0X3NvY2tldCgpLiBNb3ZlIGxhc3Qgc29ja19zZXRfZXJybm8oKSBpbnNpZGUKICAgIGx3aXBfY2xvc2UuCgogIDIwMDctMDMtMDkgU2ltb24gR29sZHNjaG1pZHQKICAqIG1lbXAuYzogRml4ZWQgYnVnICMxMTQwMDogTmV3IGV0aGFycCBxdWV1ZWluZyBpbnRyb2R1Y2VkIGJ1ZzogbWVtcF9tZW1vcnkKICAgIHdhcyBhbGxvY2F0ZWQgdG9vIHNtYWxsLgoKICAyMDA3LTAzLTA2IFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3BpcC5jOiBJbml0aWFsaXplIGRoY3AgdGltZXJzIGluIHRjcGlwX3RocmVhZCAoaWYgTFdJUF9ESENQKSB0byBwcm90ZWN0CiAgICB0aGUgc3RhY2sgZnJvbSBjb25jdXJyZW50IGFjY2Vzcy4KCiAgMjAwNy0wMy0wNiBGculk6XJpYyBCZXJub24sIERtaXRyeSBQb3RhcG92CiAgKiB0Y3BpcC5jLCBpcF9mcmFnLmMsIGV0aGVybmV0aWYuYzogRml4IHNvbWUgYnVpbGQgcHJvYmxlbXMsIGFuZCBhIHJlZHVuZGFuY3kKICAgIGNhbGwgdG8gImx3aXBfc3RhdHMubGluay5yZWN2Kys7IiBpbiBsb3dfbGV2ZWxfaW5wdXQoKSAmIGV0aGVybmV0aWZfaW5wdXQoKS4KCiAgMjAwNy0wMy0wNiBTaW1vbiBHb2xkc2NobWlkdAogICogaXBfZnJhZy5jLCBpcF9mcmFnLmg6IFJlZHVjZSBjb2RlIHNpemU6IGRvbid0IGluY2x1ZGUgY29kZSBpbiB0aG9zZSBmaWxlcwogICAgaWYgSVBfRlJBRyA9PSAwIGFuZCBJUF9SRUFTU0VNQkxZID09IDAKCiAgMjAwNy0wMy0wNiBGculk6XJpYyBCZXJub24sIFNpbW9uIEdvbGRzY2htaWR0CiAgKiBvcHQuaCwgaXBfZnJhZy5oLCB0Y3BpcC5oLCB0Y3BpcC5jLCBldGhlcm5ldGlmLmM6IGFkZCBuZXcgY29uZmlndXJhdGlvbgogICAgb3B0aW9uIG5hbWVkIEVUSEFSUF9UQ1BJUF9FVEhJTlBVVCwgd2hpY2ggZW5hYmxlIHRoZSBuZXcgdGNwaXBfZXRoaW5wdXQuCiAgICBBbGxvdyB0byBkbyBBUlAgcHJvY2Vzc2luZyBmb3IgaW5jb21pbmcgcGFja2V0cyBpbnNpZGUgdGNwaXBfdGhyZWFkCiAgICAocHJvdGVjdGluZyBBUlAgbGF5ZXIgYWdhaW5zdCBjb25jdXJyZW50IGFjY2VzcykuIFlvdSBjYW4gYWxzbyBkaXNhYmxlCiAgICBvbGQgY29kZSB1c2luZyB0Y3BfaW5wdXQgd2l0aCBuZXcgZGVmaW5lIEVUSEFSUF9UQ1BJUF9JTlBVVCBzZXQgdG8gMC4KICAgIE9sZGVyIHBvcnRzIGhhdmUgdG8gdXNlIHRjcGlwX2V0aGlucHV0LgoKICAyMDA3LTAzLTA2IFNpbW9uIEdvbGRzY2htaWR0IChiYXNlZCBvbiBwYXRjaCBmcm9tIERtaXRyeSBQb3RhcG92KQogICogZXJyLmgsIGVyci5jOiBmaXhlZCBjb21waWxlciB3YXJuaW5nICJpbml0aWFsaXphdGlvbiBkaXJjYXJkcyBxdWFsaWZpZXJzCiAgICBmcm9tIHBvaW50ZXIgdGFyZ2V0IHR5cGUiCgogIDIwMDctMDMtMDUgRnLpZOlyaWMgQmVybm9uCiAgKiBvcHQuaCwgc29ja2V0cy5oOiBhZGQgbmV3IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyAoTFdJUF9QT1NJWF9TT0NLRVRTX0lPX05BTUVTLAogICAgRVRIQVJQX1RSVVNUX0lQX01BQywgcmV2aWV3IFNPX1JFVVNFKQoKICAyMDA3LTAzLTA0IEZy6WTpcmljIEJlcm5vbgogICogYXBpX21zZy5jOiBSZW1vdmUgc29tZSBjb21waWxlciB3YXJuaW5ncyA6IHBhcmFtZXRlciAicGNiIiB3YXMgbmV2ZXIKICAgIHJlZmVyZW5jZWQuCgogIDIwMDctMDMtMDQgRnLpZOlyaWMgQmVybm9uCiAgKiBhcGlfbGliLmM6IEZpeCAiW3BhdGNoICM1NzY0XSBhcGlfbGliLmMgY2xlYW51cDogYWZ0ZXIgcGF0Y2ggIzU2ODciIChmcm9tCiAgICBEbWl0cnkgUG90YXBvdikuCiAgICBUaGUgYXBpX21zZyBzdHJ1Y3Qgc3RheSBvbiB0aGUgc3RhY2sgKG5vdCBtb3ZlZCB0byBuZXRjb25uIHN0cnVjdCkuCgogIDIwMDctMDMtMDQgU2ltb24gR29sZHNjaG1pZHQgKGJhc2VkIG9uIHBhdGNoIGZyb20gRG1pdHJ5IFBvdGFwb3YpCiAgKiBwYnVmLmM6IEZpeCBCVUcjMTkxNjggLSBwYnVmX2ZyZWUgY2FuIGNhdXNlIGRlYWRsb2NrIChpZgogICAgU1lTX0xJR0hUV0VJR0hUX1BST1Q9MSAmIGZyZWVpbmcgUEJVRl9SQU0gd2hlbiBtZW1fc2VtIGlzIG5vdCBhdmFpbGFibGUpCiAgICBBbHNvIGZpeGVkIGNhc3Qgd2FybmluZyBpbiBwYnVmX2FsbG9jKCkKCiAgMjAwNy0wMy0wNCBTaW1vbiBHb2xkc2NobWlkdAogICogZXRoYXJwLmMsIGV0aGFycC5oLCBtZW1wLmMsIG1lbXAuaCwgb3B0Lmg6IEZpeCBCVUcjMTE0MDAgLSBkb24ndCBjb3JydXB0CiAgICBleGlzdGluZyBwYnVmIGNoYWluIHdoZW4gZW5xdWV1aW5nIG11bHRpcGxlIHBidWZzIHRvIGEgcGVuZGluZyBBUlAgcmVxdWVzdAoKICAyMDA3LTAzLTAzIEZy6WTpcmljIEJlcm5vbgogICogdWRwLmM6IHJlbW92ZSBvYnNvbGV0ZSBsaW5lICJzdGF0aWMgc3RydWN0IHVkcF9wY2IgKnBjYl9jYWNoZSA9IE5VTEw7IgogICAgSXQgaXMgc3RhdGljLCBhbmQgbmV2ZXIgdXNlZCBpbiB1ZHAuYyBleGNlcHQgdWRwX2luaXQoKS4KCiAgMjAwNy0wMy0wMiBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwaXAuYzogTW92ZWQgY2FsbCB0byBpcF9pbml0KCksIHVkcF9pbml0KCkgYW5kIHRjcF9pbml0KCkgZnJvbQogICAgdGNwaXBfdGhyZWFkKCkgdG8gdGNwaXBfaW5pdCgpLiBUaGlzIHdheSwgcmF3IEFQSSBjb25uZWN0aW9ucyBjYW4gYmUKICAgIGluaXRpYWxpemVkIGJlZm9yZSB0Y3BpcF90aHJlYWQgaXMgcnVubmluZyAoZS5nLiBiZWZvcmUgT1MgaXMgc3RhcnRlZCkKCiAgMjAwNy0wMy0wMiBGculk6XJpYyBCZXJub24KICAqIHJhd2FwaS50eHQ6IEZpeCBkb2N1bWVudGF0aW9uIG1pc21hdGNoIHdpdGggZXRoYXJwLmggYWJvdXQgZXRoYXJwX3RtcidzIGNhbGwKICAgIGludGVydmFsLgoKICAyMDA3LTAyLTI4IEtpZXJhbiBNYW5zbGV5IAogICogcGJ1Zi5jOiBGaXggQlVHIzE3NjQ1IC0gZW5zdXJlIHBidWYgcGF5bG9hZCBwb2ludGVyIGlzIG5vdCBtb3ZlZAogICAgb3V0c2lkZSB0aGUgcmVnaW9uIG9mIHRoZSBwYnVmIGJ5IHBidWZfaGVhZGVyKCkKCiAgMjAwNy0wMi0yOCBLaWVyYW4gTWFuc2xleSAKICAqIHNvY2tldHMuYzogRml4IEJVRyMxOTE2MSAtIGVuc3VyZSBtaWxsaXNlY29uZHMgdGltZW91dCBpcyBub24temVybwogICAgd2hlbiBzdXBwbGllZCB0aW1lb3V0IGlzIGFsc28gbm9uLXplcm8gCgooU1RBQkxFLTEuMi4wKQoKICAyMDA2LTEyLTA1IExlb24gV29lc3RlbmJlcmcKICAqIENIQU5HRUxPRzogTWVudGlvbiBTVEFCTEUtMS4yLjAgcmVsZWFzZS4KCiAgKysgTmV3IGZlYXR1cmVzOgoKICAyMDA2LTEyLTAxIENocmlzdGlhYW4gU2ltb25zCiAgKiBtZW0uaCwgb3B0Lmg6IEFkZGVkIE1FTV9MSUJDX01BTExPQyBvcHRpb24uCiAgICBOb3RlIHRoaXMgaXMgYSB3b3JrYXJvdW5kLiBDdXJyZW50bHkgSSBoYXZlIG5vIG90aGVyIG9wdGlvbnMgbGVmdC4KCiAgMjAwNi0xMC0yNiBDaHJpc3RpYWFuIFNpbW9ucyAoYWNjZXB0ZWQgcGF0Y2ggYnkgSm9uYXRoYW4gTGFybW91cikKICAqIGlwdjQvaXBfZnJhZy5jOiByZW5hbWUgTUFYX01UVSB0byBJUF9GUkFHX01BWF9NVFUgYW5kIG1vdmUgZGVmaW5lCiAgICB0byBpbmNsdWRlL2x3aXAvb3B0LmguCiAgKiBpcHY0L2x3aXAvaXBfZnJhZy5oOiBSZW1vdmUgdW51c2VkIElQX1JFQVNTX0lOVEVSVkFMLgogICAgTW92ZSBJUF9SRUFTU19NQVhBR0UgYW5kIElQX1JFQVNTX0JVRlNJWkUgdG8gaW5jbHVkZS9sd2lwL29wdC5oLgogICogb3B0Lmg6IEFkZCBhYm92ZSBuZXcgb3B0aW9ucy4KCiAgMjAwNi0wOC0xOCBDaHJpc3RpYWFuIFNpbW9ucwogICogdGNwX3tpbixvdXR9LmM6IGFkZGVkIFNOTVAgY291bnRlcnMuCiAgKiBpcHY0L2lwLmM6IGFkZGVkIFNOTVAgY291bnRlcnMuCiAgKiBpcHY0L2lwX2ZyYWcuYzogYWRkZWQgU05NUCBjb3VudGVycy4KCiAgMjAwNi0wOC0wOCBDaHJpc3RpYWFuIFNpbW9ucwogICogZXRoYXJwLntjLGh9OiBhZGRlZCBldGhhcnBfZmluZF9hZGRyKCkgdG8gcmVhZAogICAgKHN0YWJsZSkgZXRoZXJuZXQvSVAgYWRkcmVzcyBwYWlyIGZyb20gQVJQIHRhYmxlCgogIDIwMDYtMDctMTQgQ2hyaXN0aWFhbiBTaW1vbnMKICAqIG1pYl9zdHJ1Y3RzLmM6IGFkZGVkCiAgKiBpbmNsdWRlL2x3aXAvc25tcF9zdHJ1Y3RzLmg6IGFkZGVkCiAgKiBuZXRpZi57YyxofSwgbmV0aWYvZXRoZXJuZXRpZi5jOiBhZGRlZCBTTk1QIHN0YXRpc3RpY3MgdG8gbmV0aWYgc3RydWN0CgogIDIwMDYtMDctMDYgQ2hyaXN0aWFhbiBTaW1vbnMKICAqIHNubXAvYXNuMV97ZW5jLGRlY30uYyBhZGRlZAogICogc25tcC9taWIyLmMgYWRkZWQKICAqIHNubXAvbXNnX3tpbixvdXR9LmMgYWRkZWQKICAqIGluY2x1ZGUvbHdpcC9zbm1wX2FzbjEuaCBhZGRlZAogICogaW5jbHVkZS9sd2lwL3NubXBfbXNnLmggYWRkZWQKICAqIGRvYy9zbm1wX2FnZW50LnR4dCBhZGRlZAoKICAyMDA2LTAzLTI5IENocmlzdGlhYW4gU2ltb25zCiAgKiBpbmV0LmMsIGluZXQuaDogQWRkZWQgcGxhdGZvcm0gYnl0ZXN3YXAgc3VwcG9ydC4KICAgIEFkZGVkIExXSVBfUExBVEZPUk1fQllURVNXQVAgZGVmaW5lIChkZWZhdWx0cyB0byAwKSBhbmQKICAgIG9wdGlvbmFsIExXSVBfUExBVEZPUk1fSFRPTlMoKSwgTFdJUF9QTEFURk9STV9IVE9OTCgpIG1hY3Jvcy4KCiAgKysgQnVnIGZpeGVzOgoKICAyMDA2LTExLTMwIENocmlzdGlhYW4gU2ltb25zCiAgKiBkaGNwLmM6IEZpeGVkIGZhbHNlIHRyaWdnZXJzIG9mIHJlcXVlc3RfdGltZW91dC4KCiAgMjAwNi0xMS0yOCBDaHJpc3RpYWFuIFNpbW9ucwogICogbmV0aWYuYzogSW4gbmV0aWZfYWRkKCkgZml4ZWQgbWlzc2luZyBjbGVhciBvZiBpcF9hZGRyLCBuZXRtYXNrLCBndyBhbmQgZmxhZ3MuCgogIDIwMDYtMTAtMTEgQ2hyaXN0aWFhbiBTaW1vbnMKICAqIGFwaV9saWIuYyBldGhhcnAuYywgaXAuYywgbWVtcC5jLCBzdGF0cy5jLCBzeXMue2MsaH0gdGNwLmg6CiAgICBQYXJ0aWFsbHkgYWNjZXB0ZWQgcGF0Y2ggIzU0NDkgZm9yIEFOU0kgQyBjb21wYXRpYmlsaXR5IC8gYnVpbGQgZml4ZXMuCiAgKiBpcHY0L2x3aXAvaXAuaCBpcHY2L2x3aXAvaXAuaDogQ29ycmVjdGVkIFVEUC1MaXRlIHByb3RvY29sCiAgICBpZGVudGlmaWVyIGZyb20gMTcwIHRvIDEzNiAoYnVnICMxNzU3NCkuCgogIDIwMDYtMTAtMTAgQ2hyaXN0aWFhbiBTaW1vbnMKICAqIGFwaV9tc2cuYzogRml4ZWQgTmFnbGUgYWxnb3JpdGhtIGFzIHJlcG9ydGVkIGJ5IEJvYiBHcmljZS4KCiAgMjAwNi0wOC0xNyBDaHJpc3RpYWFuIFNpbW9ucwogICogdWRwLmM6IEZpeGVkIGJ1ZyAjMTcyMDAsIGFkZGVkIGNoZWNrIGZvciBicm9hZGNhc3QKICAgIGRlc3RpbmF0aW9ucyBmb3IgUENCcyBib3VuZCB0byBhIHVuaWNhc3QgYWRkcmVzcy4KCiAgMjAwNi0wOC0wNyBDaHJpc3RpYWFuIFNpbW9ucwogICogYXBpX21zZy5jOiBGbHVzaGluZyBUQ1Agb3V0cHV0IGluIGRvX2Nsb3NlKCkgKGJ1ZyAjMTU5MjYpLgoKICAyMDA2LTA2LTI3IENocmlzdGlhYW4gU2ltb25zCiAgKiBhcGlfbXNnLmM6IEFwcGxpZWQgcGF0Y2ggZm9yIGNvbGQgY2FzZSAoYnVnICMxMTEzNSkuCiAgICBJbiBhY2NlcHRfZnVuY3Rpb24oKSBlbnN1cmUgbmV3Y29ubi0+Y2FsbGJhY2sgaXMgYWx3YXlzIGluaXRpYWxpemVkLgoKICAyMDA2LTA2LTE1IENocmlzdGlhYW4gU2ltb25zCiAgKiBtZW0uaDogYWRkZWQgTUVNX1NJWkVfRiBhbGlhcyB0byBmaXggYW4gYW5jaWVudCBjb2xkIGNhc2UgKGJ1ZyAjMTc0OCksCiAgICBmYWNpbGl0YXRlIHByaW50aW5nIG9mIG1lbV9zaXplX3QgYW5kIHUxNl90IHN0YXRpc3RpY3MuCgogIDIwMDYtMDYtMTQgQ2hyaXN0aWFhbiBTaW1vbnMKICAqIGFwaV9tc2cuYzogQXBwbGllZCBwYXRjaCAjNTE0NiB0byBoYW5kbGUgYWxsb2NhdGlvbiBmYWlsdXJlcwogICAgaW4gYWNjZXB0KCkgYnkgS2V2aW4gTGF3c29uLgoKICAyMDA2LTA1LTI2IENocmlzdGlhYW4gU2ltb25zCiAgKiBhcGlfbGliLmM6IFJlbW92ZWQgY29ubi0+c2VtIGNyZWF0aW9uIGFuZCBkZXN0cnVjdGlvbiAKICAgIGZyb20gbmV0Y29ubl93cml0ZSgpIGFuZCBhZGRlZCBzeXNfc2VtX25ldyB0byBuZXRjb25uX25ld18qLgoKKFNUQUJMRS0xXzFfMSkKCiAgMjAwNi0wMy0wMyAgQ2hyaXN0aWFhbiBTaW1vbnMKICAqIGlwdjQvaXBfZnJhZy5jOiBBZGRlZCBib3VuZC1jaGVja2luZyBhc3NlcnRpb25zIG9uIGlwX3JlYXNzYml0bWFwCiAgICBhY2Nlc3MgYW5kIGFkZGVkIHBidWZfYWxsb2MoKSByZXR1cm4gdmFsdWUgY2hlY2tzLgoKICAyMDA2LTAxLTAxICBMZW9uIFdvZXN0ZW5iZXJnIDxsZW9uLndvZXN0ZW5iZXJnQGdteC5uZXQ+CiAgKiB0Y3Bfe2luLG91dH0uYywgdGNwX291dC5jOiBSZW1vdmVkICdldmVuIHNuZGJ1ZicgZml4IGluIFRDUCwgd2hpY2ggaXMKICAgIG5vdyBoYW5kbGVkIGJ5IHRoZSBjaGVja3N1bSByb3V0aW5lIHByb3Blcmx5LgoKICAyMDA2LTAyLTI3ICBMZW9uIFdvZXN0ZW5iZXJnIDxsZW9uLndvZXN0ZW5iZXJnQGdteC5uZXQ+CiAgICogcGJ1Zi5jOiBGaXggYWxpZ25tZW50OyBwYnVmX2luaXQoKSB3b3VsZCBub3Qgd29yayB1bmxlc3MKICAgICBwYnVmX3Bvb2xfbWVtb3J5W10gd2FzIHByb3Blcmx5IGFsaWduZWQuIChQYXRjaCBieSBDdXJ0IE1jRG93ZWxsLikKCiAgMjAwNS0xMi0yMCAgTGVvbiBXb2VzdGVuYmVyZyA8bGVvbi53b2VzdGVuYmVyZ0BnbXgubmV0PgogICogdGNwLmM6IFJlbW92ZSBQQ0JzIHdoaWNoIHN0YXkgaW4gTEFTVF9BQ0sgc3RhdGUgdG9vIGxvbmcuIFBhdGNoCiAgICBzdWJtaXR0ZWQgYnkgTWl0cmFuaSBIaXJvc2hpLgoKICAyMDA1LTEyLTE1ICBDaHJpc3RpYWFuIFNpbW9ucwogICogaW5ldC5jOiBEaXNhYmxlZCB0aGUgYWRkZWQgc3VtbWluZyByb3V0aW5lIHRvIHByZXNlcnZlIGNvZGUgc3BhY2UuCgogIDIwMDUtMTItMTQgIExlb24gV29lc3RlbmJlcmcgPGxlb24ud29lc3RlbmJlcmdAZ214Lm5ldD4KICAqIHRjcF9pbi5jOiBEdXBsaWNhdGUgRklOIEFDSyByYWNlIGNvbmRpdGlvbiBmaXggYnkgS2VsdmluIExhd3Nvbi4KICAgIEFkZGVkIEN1cnQgTWNEb3dlbGwncyBvcHRpbWl6ZWQgY2hlY2tzdW1taW5nIHJvdXRpbmUgZm9yIGZ1dHVyZQogICAgaW5jbHVzaW9uLiBOZWVkIHRvIGNyZWF0ZSB0ZXN0IGNhc2UgZm9yIHVuYWxpZ2VkLCBhbGlnbmVkLCBvZGQsCiAgICBldmVuIGxlbmd0aCBjb21iaW5hdGlvbiBvZiBjYXNlcyBvbiB2YXJpb3VzIGVuZGlhbmVzcyBtYWNoaW5lcy4KCiAgMjAwNS0xMi0wOSAgQ2hyaXN0aWFhbiBTaW1vbnMKICAqIGluZXQuYzogUmV3cm90ZSBzdGFuZGFyZCBjaGVja3N1bSByb3V0aW5lIGluIHByb3BlciBwb3J0YWJsZSBDLgoKICAyMDA1LTExLTI1ICBDaHJpc3RpYWFuIFNpbW9ucwogICogdWRwLmMgdGNwLmM6IFJlbW92ZWQgU09fUkVVU0UgaGFjay4gU2hvdWxkIHJlc2lkZSBpbiBzb2NrZXQgY29kZSBvbmx5LgogICogKi5jOiBpbnRyb2R1Y2VkIGNjLmggTFdJUF9ERUJVRyBmb3JtYXR0ZXJzIG1hdGNoaW5nIHRoZSB1MTZfdCwgczE2X3QsCiAgICB1MzJfdCwgczMyX3QgdHlwZWRlZnMuIFRoaXMgc29sdmVzIG1vc3QgZGVidWcgd29yZC1sZW5ndGggYXNzdW1lcy4KCiAgMjAwNS0wNy0xNyBMZW9uIFdvZXN0ZW5iZXJnIDxsZW9uLndvZXN0ZW5iZXJnQGdteC5uZXQ+CiAgKiBpbmV0LmM6IEZpeGVkIHVuYWxpZ25lZCAxNi1iaXQgYWNjZXNzIGluIHRoZSBzdGFuZGFyZCBjaGVja3N1bQogICAgcm91dGluZSBieSBQZXRlciBKb2xhc3Nvbi4KICAqIHNsaXBpZi5jOiBGaXhlZCBpbXBsZW1lbnRhdGlvbiBhc3N1bXB0aW9uIG9mIHNpbmdsZS1wYnVmIGRhdGFncmFtcy4KCiAgMjAwNS0wMi0wNCBMZW9uIFdvZXN0ZW5iZXJnIDxsZW9uLndvZXN0ZW5iZXJnQGdteC5uZXQ+CiAgKiB0Y3Bfb3V0LmM6IEZpeGVkIHVuaW5pdGlhbGl6ZWQgJ3F1ZXVlJyByZWZlcmVuY2VkIGluIG1lbWVyciBicmFuY2guCiAgKiB0Y3Bfe291dHxpbn0uYzogQXBwbGllZCBwYXRjaCBmaXhpbmcgdW5hbGlnbmVkIGFjY2Vzcy4KCiAgMjAwNS0wMS0wNCBMZW9uIFdvZXN0ZW5iZXJnIDxsZW9uLndvZXN0ZW5iZXJnQGdteC5uZXQ+CiAgKiBwYnVmLmM6IEZpeGVkIG1pc3Npbmcgc2VtaWNvbG9uIGFmdGVyIExXSVBfREVCVUcgc3RhdGVtZW50LgoKICAyMDA1LTAxLTAzIExlb24gV29lc3RlbmJlcmcgPGxlb24ud29lc3RlbmJlcmdAZ214Lm5ldD4KICAqIHVkcC5jOiBVRFAgcGNiLT5yZWN2KCkgd2FzIGNhbGxlZCBldmVuIHdoZW4gaXQgd2FzIE5VTEwuCgooU1RBQkxFLTFfMV8wKQoKICAyMDA0LTEyLTI4IExlb24gV29lc3RlbmJlcmcgPGxlb24ud29lc3RlbmJlcmdAZ214Lm5ldD4KICAqIGV0aGFycC4qOiBEaXNhYmxlZCBtdWx0aXBsZSBwYWNrZXRzIG9uIHRoZSBBUlAgcXVldWUuCiAgICBUaGlzIGNsYXNoZXMgd2l0aCBUQ1AgcXVldWVpbmcuCgogIDIwMDQtMTEtMjggTGVvbiBXb2VzdGVuYmVyZyA8bGVvbi53b2VzdGVuYmVyZ0BnbXgubmV0PgogICogZXRoYXJwLio6IEZpeGVkIHJhY2UgY29uZGl0aW9uIGZyb20gQVJQIHJlcXVlc3QgdG8gQVJQIHRpbWVvdXQuCiAgICBIYWx2ZWQgdGhlIEFSUCBwZXJpb2QsIGRvdWJsZWQgdGhlIHBlcmlvZCBjb3VudHMuCiAgICBFVEhBUlBfTUFYX1BFTkRJTkcgbm93IHNob3VsZCBiZSBhdCBsZWFzdCAyLiBUaGlzIHByZXZlbnRzCiAgICB0aGUgY291bnRlciBmcm9tIHJlYWNoaW5nIDAgcmlnaHQgYXdheSAod2hpY2ggd291bGQgYWxsb3cKICAgIHRvbyBsaXR0bGUgdGltZSBmb3IgQVJQIHJlc3BvbnNlcyB0byBiZSByZWNlaXZlZCkuCgogIDIwMDQtMTEtMjUgTGVvbiBXb2VzdGVuYmVyZyA8bGVvbi53b2VzdGVuYmVyZ0BnbXgubmV0PgogICogZGhjcC5jOiBEZWNsaW5lIG1lc3NhZ2VzIHdlcmUgbm90IG11bHRpY2FzdCBidXQgdW5pY2FzdC4KICAqIGV0aGFycC5jOiBFVEhBUlBfQ1JFQVRFIGlzIHJlbmFtZWQgdG8gRVRIQVJQX1RSWV9IQVJELgogICAgRG8gbm90IHRyeSBoYXJkIHRvIGluc2VydCBhcmJpdHJhcnkgcGFja2V0J3Mgc291cmNlIGFkZHJlc3MsCiAgICBldGhhcnBfaXBfaW5wdXQoKSBub3cgY2FsbHMgZXRoYXJwX3VwZGF0ZSgpIHdpdGhvdXQgRVRIQVJQX1RSWV9IQVJELiAKICAgIGV0aGFycF9xdWVyeSgpIG5vdyBhbHdheXMgRE9FUyBjYWxsIEVUSEFSUF9UUllfSEFSRCBzbyB0aGF0IHVzZXJzCiAgICBxdWVyeWluZyBhbiBhZGRyZXNzIHdpbGwgc2VlIGl0IGFwcGVhciBpbiB0aGUgY2FjaGUgKERIQ1AgY291bGQKICAgIHN1ZmZlciBmcm9tIHRoaXMgd2hlbiBhIHNlcnZlciBpbnZhbGlkbHkgZ2F2ZSBhbiBpbi11c2UgYWRkcmVzcy4pCiAgKiBpcHY0L2lwX2FkZHIuaDogUmVuYW1lZCBpcF9hZGRyX21hc2tjbXAoKSB0byBfbmV0Y21wKCkgYXMgd2UgYXJlCiAgICBjb21wYXJpbmcgbmV0d29yayBhZGRyZXNzZXMgKGlkZW50aWZpZXJzKSwgbm90IHRoZSBuZXR3b3JrIG1hc2tzCiAgICB0aGVtc2VsdmVzLgogICogaXB2NC9pcF9hZGRyLmM6IGlwX2FkZHJfaXNicm9hZGNhc3QoKSBub3cgY2hlY2tzIHRoYXQgdGhlIGdpdmVuCiAgICBJUCBhZGRyZXNzIGFjdHVhbGx5IGJlbG9uZ3MgdG8gdGhlIG5ldHdvcmsgb2YgdGhlIGdpdmVuIGludGVyZmFjZS4KCiAgMjAwNC0xMS0yNCBLaWVyYW4gTWFuc2xleSA8a2ptMjVAY2FtLmFjLnVrPgogICogdGNwLmM6IEluY3JlbWVudCBwY2ItPnNuZF9idWYgd2hlbiBBQ0sgaXMgcmVjZWl2ZWQgaW4gU1lOX1NFTlQgc3RhdGUuCgooU1RBQkxFLTFfMV8wLVJDMSkKCiAgMjAwNC0xMC0xNiBLaWVyYW4gTWFuc2xleSA8a2ptMjVAY2FtLmFjLnVrPgogICogdGNwLmM6IEFkZCBjb2RlIHRvIHRjcF9yZWN2ZWQoKSB0byBzZW5kIGFuIEFDSyAod2luZG93IHVwZGF0ZSkgaW1tZWRpYXRlbHksCiAgICBldmVuIGlmIG9uZSBpcyBhbHJlYWR5IHBlbmRpbmcsIGlmIHRoZSByY3Zfd25kIGlzIGFib3ZlIGEgdGhyZXNob2xkCiAgICAoY3VycmVudGx5IFRDUF9XTkQvMikuIFRoaXMgYXZvaWRzIHdhaXRpbmcgZm9yIGEgdGltZXIgdG8gZXhwaXJlIHRvIHNlbmQgYQogICAgZGVsYXllZCBBQ0sgaW4gb3JkZXIgdG8gb3BlbiB0aGUgd2luZG93IGlmIHRoZSBzdGFjayBpcyBvbmx5IHJlY2VpdmluZyBkYXRhLgoKICAyMDA0LTA5LTEyIEtpZXJhbiBNYW5zbGV5IDxram0yNUBjYW0uYWMudWs+CiAgKiB0Y3AqLio6IFJldHJhbnNtaXQgdGltZS1vdXQgaGFuZGxpbmcgaW1wcm92ZW1lbnQgYnkgU2FtIEphbnNlbi4KCiAgMjAwNC0wOC0yMCBUb255IE1vdW50aWZpZWxkIDx0b255QHNvZnRpbnMuY28udWs+CiAgKiBldGhhcnAuYzogTWFrZSBzdXJlIHRoZSBmaXJzdCBwYnVmIHF1ZXVlZCBvbiBhbiBBUlAgZW50cnkKICAgIGlzIHByb3Blcmx5IHJlZiBjb3VudGVkLgoKICAyMDA0LTA3LTI3IFRvbnkgTW91bnRpZmllbGQgPHRvbnlAc29mdGlucy5jby51az4KICAqIGRlYnVnLmg6IEFkZGVkIChpbnQpIGNhc3QgaW4gTFdJUF9ERUJVR0YoKSB0byBhdm9pZCBjb21waWxlcgogICAgd2FybmluZ3MgYWJvdXQgY29tcGFyaXNvbi4KICAqIHBidWYuYzogU3RvcHBlZCBjb21waWxlciBjb21wbGFpbmluZyBvZiBlbXB0eSBpZiBzdGF0ZW1lbnQKICAgIHdoZW4gTFdJUF9ERUJVR0YoKSBlbXB0eS4gIENsb3NlZCBhbiB1bmNsb3NlZCBjb21tZW50LgogICogdGNwLmM6IFN0b3BwZWQgY29tcGlsZXIgY29tcGxhaW5pbmcgb2YgZW1wdHkgaWYgc3RhdGVtZW50CiAgICB3aGVuIExXSVBfREVCVUdGKCkgZW1wdHkuCiAgKiBpcC5oIENvcnJlY3RlZCBJUEhfVE9TKCkgbWFjcm86IHJldHVybnMgYSBieXRlLCBzbyBkb2Vzbid0IG5lZWQgaHRvbnMoKS4KICAqIGluZXQuYzogQWRkZWQgYSBjb3VwbGUgb2YgY2FzdHMgdG8gcXVpZXQgdGhlIGNvbXBpbGVyLgogICAgTm8gbmVlZCB0byB0ZXN0IGlzYXNjaWkoYykgYmVmb3JlIGlzZGlnaXQoYykgb3IgaXN4ZGlnaXQoYykuCgogIDIwMDQtMDctMjIgVG9ueSBNb3VudGlmaWVsZCA8dG9ueUBzb2Z0aW5zLmNvLnVrPgogICogaW5ldC5jOiBNYWRlIGRhdGEgdHlwZXMgY29uc2lzdGVudCBpbiBpbmV0X250b2EoKS4KICAgIEFkZGVkIGNhc3RzIGZvciByZXR1cm4gdmFsdWVzIG9mIGNoZWNrc3VtIHJvdXRpbmVzLCB0byBwYWNpZnkgY29tcGlsZXIuCiAgKiBpcF9mcmFnLmMsIHRjcF9vdXQuYywgc29ja2V0cy5jLCBwYnVmLmMKICAgIFNtYWxsIGNvcnJlY3Rpb25zIHRvIHNvbWUgZGVidWdnaW5nIHN0YXRlbWVudHMsIHRvIHBhY2lmeSBjb21waWxlci4KCiAgMjAwNC0wNy0yMSBUb255IE1vdW50aWZpZWxkIDx0b255QHNvZnRpbnMuY28udWs+CiAgKiBldGhhcnAuYzogUmVtb3ZlZCBzcHVyaW91cyBzZW1pY29sb24gYW5kIGFkZGVkIG1pc3NpbmcgZW5kLW9mLWNvbW1lbnQuCiAgKiBldGhlcm5ldGlmLmMgVXBkYXRlZCBsb3dfbGV2ZWxfb3V0cHV0KCkgdG8gbWF0Y2ggcHJvdG90eXBlIGZvcgogICAgbmV0aWYtPmxpbmtvdXRwdXQgYW5kIGNoYW5nZWQgbG93X2xldmVsX2lucHV0KCkgc2ltaWxhcmx5IGZvciBjb25zaXN0ZW5jeS4KICAqIGFwaV9tc2cuYzogQ2hhbmdlZCByZWN2X3JhdygpIGZyb20gaW50IHRvIHU4X3QsIHRvIG1hdGNoIHByb3RvdHlwZQogICAgb2YgcmF3X3JlY3YoKSBpbiByYXcuaCBhbmQgc28gYXZvaWQgY29tcGlsZXIgZXJyb3IuCiAgKiBzb2NrZXRzLmM6IEFkZGVkIHRyaXZpYWwgKGludCkgY2FzdCB0byBrZWVwIGNvbXBpbGVyIGhhcHBpZXIuCiAgKiBpcC5jLCBuZXRpZi5jIENoYW5nZWQgZGVidWcgc3RhdGVtZW50cyB0byB1c2UgdGhlIHRpZGllciBpcDRfYWRkck4oKSBtYWNyb3MuCgooU1RBQkxFLTFfMF8wKQoKICArKyBDaGFuZ2VzOgoKICAyMDA0LTA3LTA1IExlb24gV29lc3RlbmJlcmcgPGxlb24ud29lc3RlbmJlcmdAZ214Lm5ldD4KICAqIHNvY2tldHMuKjogUmVzdHJ1Y3R1cmVkIExXSVBfUFJJVkFURV9USU1FVkFMLiBNYWtlIHN1cmUKICAgIHlvdXIgY2MuaCBmaWxlIGRlZmluZXMgdGhpcyBlaXRoZXIgMSBvciAwLiBJZiBub24tZGVmaW5lZCwKICAgIGRlZmF1bHRzIHRvIDEuCiAgKiAuYzogQWRkZWQgPHN0cmluZy5oPiBhbmQgPGVycm5vLmg+IGluY2x1ZGVzIHdoZXJlIHVzZWQuCiAgKiBldGhhcnAuYzogTWFkZSBzb21lIGFycmF5IGluZGljZXMgdW5zaWduZWQuCgogIDIwMDQtMDYtMjcgTGVvbiBXb2VzdGVuYmVyZyA8bGVvbi53b2VzdGVuYmVyZ0BnbXgubmV0PgogICogbmV0aWYuKjogQWRkZWQgbmV0aWZfc2V0X3VwKCkvZG93bigpLgogICogZGhjcC5jOiBDaGFuZ2VzIHRvIHJlc3RhcnQgcHJvZ3JhbSBmbG93LgoKICAyMDA0LTA1LTA3IExlb24gV29lc3RlbmJlcmcgPGxlb24ud29lc3RlbmJlcmdAZ214Lm5ldD4KICAqIGV0aGFycC5jOiBJbiBmaW5kX2VudHJ5KCksIGluc3RlYWQgb2YgYSBsaXN0IHRyYXZlcnNhbCBwZXIgY2FuZGlkYXRlLCBkbyBhCiAgICBzaW5nbGUtcGFzcyBsb29rdXAgZm9yIGRpZmZlcmVudCBjYW5kaWRhdGVzLiBTaG91bGQgZXhwbG9pdCBsb2NhbGl0eS4KCiAgMjAwNC0wNC0yOSBMZW9uIFdvZXN0ZW5iZXJnIDxsZW9uLndvZXN0ZW5iZXJnQGdteC5uZXQ+CiAgKiB0Y3AqLmM6IENsZWFuZWQgdXAgc291cmNlIGNvbW1lbnQgZG9jdW1lbnRhdGlvbiBmb3IgRG94eWdlbiBwcm9jZXNzaW5nLgogICogb3B0Lmg6IEVUSEFSUF9BTFdBWVNfSU5TRVJUIG9wdGlvbiByZW1vdmVkIHRvIGNvbXBseSB3aXRoIEFSUCBSRkMuCiAgKiBldGhhcnAuYzogdXBkYXRlX2FycF9lbnRyeSgpIG9ubHkgYWRkcyBuZXcgQVJQIGVudHJpZXMgd2hlbiBhZHZpY2VkIHRvIGJ5CiAgICB0aGUgY2FsbGVyLiBUaGlzIGRlcHJlY2F0ZXMgdGhlIEVUSEFSUF9BTFdBWVNfSU5TRVJUIG92ZXJydWxlIG9wdGlvbi4KCiAgKysgQnVnIGZpeGVzOgoKICAyMDA0LTA0LTI3IExlb24gV29lc3RlbmJlcmcgPGxlb24ud29lc3RlbmJlcmdAZ214Lm5ldD4KICAqIGV0aGFycC5jOiBBcHBsaWVkIHBhdGNoIG9mIGJ1ZyAjODcwOCBieSBUb25pIE1vdW50aWZpZWxkIHdpdGggYSBzb2x1dGlvbgogICAgc3VnZ2VzdGVkIGJ5IFRpbW15IEJyb2xpbi4gRml4IGZvciAzMi1iaXQgcHJvY2Vzc29ycyB0aGF0IGNhbm5vdCBhY2Nlc3MKICAgIG5vbi1hbGlnbmVkIDMyLWJpdCB3b3Jkcywgc3VjaCBhcyBzb21zIDMyLWJpdCBUQ1AvSVAgaGVhZGVyIGZpZWxkcy4gRml4CiAgICBpcyB0byBwcmVmaXggdGhlIDE0LWJpdCBFdGhlcm5ldCBoZWFkZXJzIHdpdGggdHdvIHBhZGRpbmcgYnl0ZXMuCgogIDIwMDQtMDQtMjMgTGVvbiBXb2VzdGVuYmVyZyA8bGVvbi53b2VzdGVuYmVyZ0BnbXgubmV0PgogICogaXBfYWRkci5jOiBGaXggaW4gdGhlIGlwX2FkZHJfaXNicm9hZGNhc3QoKSBjaGVjay4KICAqIGV0aGFycC5jOiBGaXhlZCB0aGUgY2FzZSB3aGVyZSB0aGUgcGFja2V0IHRoYXQgaW5pdGlhdGVzIHRoZSBBUlAgcmVxdWVzdAogICAgaXMgbm90IHF1ZXVlZCwgYW5kIGdldHMgbG9zdC4gRml4ZWQgdGhlIGNhc2Ugd2hlcmUgdGhlIHBhY2tldHMgZGVzdGluYXRpb24KICAgIGFkZHJlc3MgaXMgYWxyZWFkeSBrbm93bjsgd2Ugbm93IGFsd2F5cyBxdWV1ZSB0aGUgcGFja2V0IGFuZCBwZXJmb3JtIGFuIEFSUAogICAgcmVxdWVzdC4KCihTVEFCTEUtMF83XzApCgogICsrIEJ1ZyBmaXhlczoKCiAgKiBGaXhlZCBUQ1AgYnVnIGZvciBTWU5fU0VOVCB0byBFU1RBQkxJU0hFRCBzdGF0ZSB0cmFuc2l0aW9uLgogICogRml4ZWQgVENQIGJ1ZyBpbiBkZXF1ZXVlaW5nIG9mIEZJTiBmcm9tIG91dCBvZiBvcmRlciBzZWdtZW50IHF1ZXVlLgogICogRml4ZWQgdHdvIHBvc3NpYmxlIE5VTEwgcmVmZXJlbmNlcyBpbiByYXJlIGNhc2VzLgoKKFNUQUJMRS0wXzZfNikKCiAgKysgQnVnIGZpeGVzOgoKICAqIEZpeGVkIERIQ1Agd2hpY2ggZGlkIG5vdCBpbmNsdWRlIHRoZSBJUCBhZGRyZXNzIGluIERFQ0xJTkUgbWVzc2FnZXMuCgogICsrIENoYW5nZXM6CgogICogZXRoYXJwLmMgaGFzIGJlZW4gaGF1bGVkIG92ZXIgYSBiaXQuCgooU1RBQkxFLTBfNl81KQoKICArKyBCdWcgZml4ZXM6CgogICogRml4ZWQgVENQIGJ1ZyBpbmR1Y2VkIGJ5IGJhZCB3aW5kb3cgcmVzaXppbmcgd2l0aCB1bmlkaXJlY3Rpb25hbCBUQ1AgdHJhZmZpYy4KICAqIFBhY2tldHMgc2VudCBmcm9tIEFSUCBxdWV1ZSBoYWQgaW52YWxpZCBzb3VyY2UgaGFyZHdhcmUgYWRkcmVzcy4KCiAgKysgQ2hhbmdlczoKCiAgKiBQYXNzLWJ5IEFSUCByZXF1ZXN0cyBkbyBub3cgdXBkYXRlIHRoZSBjYWNoZS4KCiAgKysgTmV3IGZlYXR1cmVzOgoKICAqIE5vIGxvbmdlciBkZXBlbmRlbnQgb24gY3R5cGUuaC4KICAqIE5ldyBzb2NrZXQgb3B0aW9ucy4KICAqIFJhdyBJUCBwY2Igc3VwcG9ydC4KCihTVEFCTEUtMF82XzQpCgogICsrIEJ1ZyBmaXhlczoKCiAgKiBTb21lIGRlYnVnIGZvcm1hdHRlcnMgYW5kIGNhc3RzIGZpeGVkLgogICogTnVtZXJlb3VzIGZpeGVzIGluIFBQUC4KCiAgKysgQ2hhbmdlczoKCiAgKiBERUJVR0Ygbm93IGlzIExXSVBfREVCVUdGCiAgKiBwYnVmX2RlY2hhaW4oKSBoYXMgYmVlbiByZS1lbmFibGVkLgogICogTWVudGlvbmVkIHRoZSBjaGFuZ2VkIHVzZSBvZiBDVlMgYnJhbmNoZXMgaW4gUkVBRE1FLgoKKFNUQUJMRS0wXzZfMykKCiAgKysgQnVnIGZpeGVzOgoKICAqIEZpeGVkIHBvb2wgcGJ1ZiBtZW1vcnkgbGVhayBpbiBwYnVmX2FsbG9jKCkuCiAgICBPY2N1cmVkIGlmIG5vdCBlbm91Z2ggUEJVRl9QT09MIHBidWZzIGZvciBhIHBhY2tldCBwYnVmIGNoYWluLgogICAgUmVwb3J0ZWQgYnkgU2F2aW4gWmxvYmVjLgoKICAqIFBCVUZfUE9PTCBjaGFpbnMgaGFkIHRoZWlyIHRvdF9sZW4gZmllbGQgbm90IHNldCBmb3Igbm9uLWZpcnN0CiAgICBwYnVmcy4gRml4ZWQgaW4gcGJ1Zl9hbGxvYygpLgoKICArKyBOZXcgZmVhdHVyZXM6CgogICogQWRkZWQgUFBQIHN0YWNrIGNvbnRyaWJ1dGVkIGJ5IE1hcmMgQm91Y2hlcgoKICArKyBDaGFuZ2VzOgoKICAqIE5vdyBkcm9wcyBzaG9ydCBwYWNrZXRzIGZvciBJQ01QL1VEUC9UQ1AgcHJvdG9jb2xzLiBNb3JlIHJvYnVzdC4KCiAgKiBBUlAgcXVldWV1aW5nIG5vdyBxdWV1ZXMgdGhlIGxhdGVzdCBwYWNrZXQgaW5zdGVhZCBvZiB0aGUgZmlyc3QuCiAgICBUaGlzIGlzIHRoZSBSRkMgcmVjb21tZW5kZWQgYmVoYXZpb3VyLCBidXQgY2FuIGJlIG92ZXJyaWRkZW4gaW4KICAgIGx3aXBvcHRzLmguCgooMC42LjIpCgogICsrIEJ1Z2ZpeGVzOgoKICAqIFRDUCBoYXMgYmVlbiBmaXhlZCB0byBkZWFsIHdpdGggdGhlIG5ldyB1c2Ugb2YgdGhlIHBidWYtPnJlZgogICAgY291bnRlci4KCiAgKiBESENQIGRoY3BfaW5mb3JtKCkgY3Jhc2ggYnVnIGZpeGVkLgoKICArKyBDaGFuZ2VzOgoKICAqIFJlbW92ZWQgcGJ1Zl9wb29sX2ZyZWVfY2FjaGUgYW5kIHBidWZfcG9vbF9hbGxvY19jYWNoZS4gQWxzbyByZW1vdmVkCiAgICBwYnVmX3JlZnJlc2goKS4gVGhpcyBoYXMgc3BlZCB1cCBwYnVmIHBvb2wgb3BlcmF0aW9ucyBjb25zaWRlcmFibHkuCiAgICBJbXBsZW1lbnRlZCBieSBEYXZpZCBIYWFzLgoKKDAuNi4xKQoKICArKyBOZXcgZmVhdHVyZXM6CgogICogVGhlIHBhY2tldCBidWZmZXIgaW1wbGVtZW50YXRpb24gaGFzIGJlZW4gZW5oYW5jZWQgdG8gc3VwcG9ydAogICAgemVyby1jb3B5IGFuZCBjb3B5LW9uLWRlbWFuZCBmb3IgcGFja2V0IGJ1ZmZlcnMgd2hpY2ggaGF2ZSB0aGVpcgogICAgcGF5bG9hZHMgaW4gYXBwbGljYXRpb24tbWFuYWdlZCBtZW1vcnkuCiAgICBJbXBsZW1lbnRlZCBieSBEYXZpZCBIYWFzLgoKICAgIFVzZSBQQlVGX1JFRiB0byBtYWtlIGEgcGJ1ZiByZWZlciB0byBSQU0uIGx3SVAgd2lsbCB1c2UgemVyby1jb3B5CiAgICBpZiBhbiBvdXRnb2luZyBwYWNrZXQgY2FuIGJlIGRpcmVjdGx5IHNlbnQgb24gdGhlIGxpbmssIG9yIHBlcmZvcm0KICAgIGEgY29weS1vbi1kZW1hbmQgd2hlbiBuZWNlc3NhcnkuCgogICAgVGhlIGFwcGxpY2F0aW9uIGNhbiBzYWZlbHkgYXNzdW1lIHRoZSBwYWNrZXQgaXMgc2VudCwgYW5kIHRoZSBSQU0KICAgIGlzIGF2YWlsYWJsZSB0byB0aGUgYXBwbGljYXRpb24gZGlyZWN0bHkgYWZ0ZXIgY2FsbGluZyB1ZHBfc2VuZCgpCiAgICBvciBzaW1pbGFyIGZ1bmN0aW9uLgoKICArKyBCdWdmaXhlczoKCiAgKiBBUlBfUVVFVUVJTkcgc2hvdWxkIG5vdyBjb3JyZWN0bHkgd29yayBmb3IgYWxsIGNhc2VzLCBpbmNsdWRpbmcKICAgIFBCVUZfUkVGLgogICAgSW1wbGVtZW50ZWQgYnkgTGVvbiBXb2VzdGVuYmVyZy4KCiAgKysgQ2hhbmdlczoKCiAgKiBJUF9BRERSX0FOWSBpcyBubyBsb25nZXIgYSBOVUxMIHBvaW50ZXIuIEluc3RlYWQsIGl0IGlzIGEgcG9pbnRlcgogICAgdG8gYSAnMC4wLjAuMCcgSVAgYWRkcmVzcy4KCiAgKiBUaGUgcGFja2V0IGJ1ZmZlciBpbXBsZW1lbnRhdGlvbiBpcyBjaGFuZ2VkLiBUaGUgcGJ1Zi0+cmVmIGNvdW50ZXIKICAgIG1lYW5pbmcgaGFzIGNoYW5nZWQsIGFuZCBzZXZlcmFsIHBidWYgZnVuY3Rpb25zIGhhdmUgYmVlbgogICAgYWRhcHRlZCBhY2NvcmRpbmdseS4KCiAgKiBuZXRpZiBkcml2ZXJzIGhhdmUgdG8gYmUgY2hhbmdlZCB0byBzZXQgdGhlIGhhcmR3YXJlIGFkZHJlc3MgbGVuZ3RoIGZpZWxkCiAgICB0aGF0IG11c3QgYmUgaW5pdGlhbGl6ZWQgY29ycmVjdGx5IGJ5IHRoZSBkcml2ZXIgKGhpbnQ6IDYgZm9yIEV0aGVybmV0IE1BQykuCiAgICBTZWUgdGhlIGNvbnRyaWIvcG9ydHMvYzE2eCBjczg5MDAgZHJpdmVyIGFzIGEgZHJpdmVyIGV4YW1wbGUuCgogICogbmV0aWYncyBoYXZlIGEgZGhjcCBmaWVsZCB0aGF0IG11c3QgYmUgaW5pdGlhbGl6ZWQgdG8gTlVMTCBieSB0aGUgZHJpdmVyLgogICAgU2VlIHRoZSBjb250cmliL3BvcnRzL2MxNnggY3M4OTAwIGRyaXZlciBhcyBhIGRyaXZlciBleGFtcGxlLgoKKDAuNS54KSBUaGlzIGZpbGUgaGFzIGJlZW4gdW5tYWludGFpbmVkIHVwIHRvIDAuNi4xLiBBbGwgY2hhbmdlcyBhcmUKICBsb2dnZWQgaW4gQ1ZTIGJ1dCBoYXZlIG5vdCBiZWVuIGV4cGxhaW5lZCBoZXJlLgoKKDAuNS4zKSBDaGFuZ2VzIHNpbmNlIHZlcnNpb24gMC41LjIKCiAgKysgQnVnZml4ZXM6CgogICogbWVtcF9tYWxsb2MoTUVNUF9BUElfTVNHKSBjb3VsZCBmYWlsIHdpdGggbXVsdGlwbGUgYXBwbGljYXRpb24KICAgIHRocmVhZHMgYmVjYXVzZSBpdCB3YXNuJ3QgcHJvdGVjdGVkIGJ5IHNlbWFwaG9yZXMuCgogICsrIE90aGVyIGNoYW5nZXM6CgogICogc3RydWN0IGlwX2FkZHIgbm93IHBhY2tlZC4KCiAgKiBUaGUgbmFtZSBvZiB0aGUgdGltZSB2YXJpYWJsZSBpbiBhcnAuYyBoYXMgYmVlbiBjaGFuZ2VkIHRvIGN0aW1lCiAgICB0byBhdm9pZCBjb25mbGljdHMgd2l0aCB0aGUgdGltZSgpIGZ1bmN0aW9uLgoKKDAuNS4yKSBDaGFuZ2VzIHNpbmNlIHZlcnNpb24gMC41LjEKCiAgKysgTmV3IGZlYXR1cmVzOgoKICAqIEEgbmV3IFRDUCBmdW5jdGlvbiwgdGNwX3RtcigpLCBub3cgaGFuZGxlcyBib3RoIFRDUCB0aW1lcnMuCgogICsrIEJ1Z2ZpeGVzOgoKICAqIEEgYnVnIGluIHRjcF9wYXJzZW9wdCgpIGNvdWxkIGNhdXNlIHRoZSBzdGFjayB0byBoYW5nIGJlY2F1c2Ugb2YgYQogICAgbWFsZm9ybWVkIFRDUCBvcHRpb24uCgogICogVGhlIGFkZHJlc3Mgb2YgbmV3IGNvbm5lY3Rpb25zIGluIHRoZSBhY2NlcHQoKSBmdW5jdGlvbiBpbiB0aGUgQlNECiAgICBzb2NrZXQgbGlicmFyeSB3YXMgbm90IGhhbmRsZWQgY29ycmVjdGx5LgoKICAqIHBidWZfZGVjaGFpbigpIGRpZCBub3QgdXBkYXRlIHRoZSAtPnRvdF9sZW4gZmllbGQgb2YgdGhlIHRhaWwuCgogICogQWJvcnRlZCBUQ1AgY29ubmVjdGlvbnMgd2VyZSBub3QgaGFuZGxlZCBjb3JyZWN0bHkgaW4gYWxsCiAgICBzaXR1YXRpb25zLgoKICArKyBPdGhlciBjaGFuZ2VzOgoKICAqIEFsbCBwcm90b2NvbCBoZWFkZXIgc3RydWN0cyBhcmUgbm93IHBhY2tlZC4KCiAgKiBUaGUgLT5sZW4gZmllbGQgaW4gdGhlIHRjcF9zZWcgc3RydWN0dXJlIG5vdyBjb3VudHMgdGhlIGFjdHVhbAogICAgYW1vdW50IG9mIGRhdGEsIGFuZCBkb2VzIG5vdCBhZGQgb25lIGZvciBTWU4gYW5kIEZJTiBzZWdtZW50cy4KCigwLjUuMSkgQ2hhbmdlcyBzaW5jZSB2ZXJzaW9uIDAuNS4wCgogICsrIE5ldyBmZWF0dXJlczoKCiAgKiBQb3NzaWJsZSB0byBydW4gYXMgYSB1c2VyIHByb2Nlc3MgdW5kZXIgTGludXguCgogICogUHJlbGltaW5hcnkgc3VwcG9ydCBmb3IgY3Jvc3MgcGxhdGZvcm0gcGFja2VkIHN0cnVjdHMuCgogICogQVJQIHRpbWVyIG5vdyBpbXBsZW1lbnRlZC4KCiAgKysgQnVnZml4ZXM6CgogICogVENQIG91dHB1dCBxdWV1ZSBsZW5ndGggd2FzIGJhZGx5IGluaXRpYWxpemVkIHdoZW4gb3BlbmluZwogICAgY29ubmVjdGlvbnMuCgogICogVENQIGRlbGF5ZWQgQUNLcyB3ZXJlIG5vdCBzZW50IGNvcnJlY3RseS4KCiAgKiBFeHBsaWNpdCBpbml0aWFsaXphdGlvbiBvZiBCU1Mgc2VnbWVudCB2YXJpYWJsZXMuCgogICogcmVhZCgpIGluIEJTRCBzb2NrZXQgbGlicmFyeSBjb3VsZCBkcm9wIGRhdGEuCgogICogUHJvYmxlbXMgd2l0aCBtZW1vcnkgYWxpZ25tZW50LgoKICAqIFNpdHVhdGlvbnMgd2hlbiBhbGwgVENQIGJ1ZmZlcnMgd2VyZSB1c2VkIGNvdWxkIGxlYWQgdG8KICAgIHN0YXJ2YXRpb24uCgogICogVENQIE1TUyBvcHRpb24gd2Fzbid0IHBhcnNlZCBjb3JyZWN0bHkuCgogICogUHJvYmxlbXMgd2l0aCBVRFAgY2hlY2tzdW0gY2FsY3VsYXRpb24uCgogICogSVAgbXVsdGljYXN0IGFkZHJlc3MgdGVzdHMgaGFkIGVuZGlhbmVzcyBwcm9ibGVtcy4KCiAgKiBBUlAgcmVxdWVzdHMgaGFkIHdyb25nIGRlc3RpbmF0aW9uIGhhcmR3YXJlIGFkZHJlc3MuCgogICsrIE90aGVyIGNoYW5nZXM6CgogICogc3RydWN0IGV0aF9hZGRyIGNoYW5nZWQgZnJvbSB1MTZfdFszXSBhcnJheSB0byB1OF90WzZdLgoKICAqIEEgLT5saW5rb3V0cHV0KCkgbWVtYmVyIHdhcyBhZGRlZCB0byBzdHJ1Y3QgbmV0aWYuCgogICogVENQIGFuZCBVRFAgLT5kZXN0Xyogc3RydWN0IG1lbWJlcnMgd2hlcmUgY2hhbmdlZCB0byAtPnJlbW90ZV8qLgoKICAqIG50b2gqIG1hY3JvcyBhcmUgbm93IG51bGwgZGVmaW5pdGlvbnMgZm9yIGJpZyBlbmRpYW4gQ1BVcy4KCigwLjUuMCkgQ2hhbmdlcyBzaW5jZSB2ZXJzaW9uIDAuNC4yCgogICsrIE5ldyBmZWF0dXJlczoKCiAgKiBSZWRlc2lnbmVkIG9wZXJhdGluZyBzeXN0ZW0gZW11bGF0aW9uIGxheWVyIHRvIG1ha2UgcG9ydGluZyBlYXNpZXIuCgogICogQmV0dGVyIGNvbnRyb2wgb3ZlciBUQ1Agb3V0cHV0IGJ1ZmZlcnMuCgogICogRG9jdW1lbmF0aW9uIGFkZGVkLgoKICArKyBCdWdmaXhlczoKCiAgKiBMb2NraW5nIGlzc3VlcyBpbiBidWZmZXIgbWFuYWdlbWVudC4KCiAgKiBCdWdmaXhlcyBpbiB0aGUgc2VxdWVudGlhbCBBUEkuCgogICogSVAgZm9yd2FyZGluZyBjb3VsZCBjYXVzZSBtZW1vcnkgbGVha2FnZS4gVGhpcyBoYXMgYmVlbiBmaXhlZC4KCiAgKysgT3RoZXIgY2hhbmdlczoKCiAgKiBEaXJlY3Rvcnkgc3RydWN0dXJlIHNvbWV3aGF0IGNoYW5nZWQ7IHRoZSBjb3JlLyB0cmVlIGhhcyBiZWVuCiAgICBjb2xsYXBzZWQuCgooMC40LjIpIENoYW5nZXMgc2luY2UgdmVyc2lvbiAwLjQuMQoKICArKyBOZXcgZmVhdHVyZXM6CgogICogRXhwZXJpbWVudGFsIEFSUCBpbXBsZW1lbnRhdGlvbiBhZGRlZC4KCiAgKiBTa2VsZXRvbiBFdGhlcm5ldCBkcml2ZXIgYWRkZWQuCgogICogRXhwZXJpbWVudGFsIEJTRCBzb2NrZXQgQVBJIGxpYnJhcnkgYWRkZWQuCgogICsrIEJ1Z2ZpeGVzOgoKICAqIEluIHZlcnkgaW50ZW5zZSBzaXR1YXRpb25zLCBtZW1vcnkgbGVha2FnZSBjb3VsZCBvY2N1ci4gVGhpcyBoYXMKICAgIGJlZW4gZml4ZWQuCgogICsrIE90aGVyIGNoYW5nZXM6CgogICogVmFyaWFibGVzIG5hbWVkICJkYXRhIiBhbmQgImNvZGUiIGhhdmUgYmVlbiByZW5hbWVkIGluIG9yZGVyIHRvCiAgICBhdm9pZCBuYW1lIGNvbmZsaWN0cyBpbiBjZXJ0YWluIGNvbXBpbGVycy4KCiAgKiBWYXJpYWJsZSsrIGhhdmUgaW4gYXBwbGljaWFibGUgY2FzZXMgYmVlbiB0cmFuc2xhdGVkIHRvICsrdmFyaWFibGUKICAgIHNpbmNlIHNvbWUgY29tcGlsZXJzIGdlbmVyYXRlIGJldHRlciBjb2RlIGluIHRoZSBsYXR0ZXIgY2FzZS4KCigwLjQuMSkgQ2hhbmdlcyBzaW5jZSB2ZXJzaW9uIDAuNAoKICArKyBOZXcgZmVhdHVyZXM6CgogICogVENQOiBDb25uZWN0aW9uIGF0dGVtcHRzIHRpbWUgb3V0IGVhcmxpZXIgdGhhbiBkYXRhCiAgICB0cmFuc21pc3Npb25zLiBOYWdsZSBhbGdvcml0aG0gaW1wbGVtZW50ZWQuIFB1c2ggZmxhZyBzZXQgb24gdGhlCiAgICBsYXN0IHNlZ21lbnQgaW4gYSBidXJzdC4KCiAgKiBVRFA6IGV4cGVyaW1lbnRhbCBzdXBwb3J0IGZvciBVRFAtTGl0ZSBleHRlbnNpb25zLgoKICArKyBCdWdmaXhlczoKCiAgKiBUQ1A6IG91dCBvZiBvcmRlciBzZWdtZW50cyB3ZXJlIGluIHNvbWUgY2FzZXMgaGFuZGxlZCBpbmNvcnJlY3RseSwKICAgIGFuZCB0aGlzIGhhcyBub3cgYmVlbiBmaXhlZC4gRGVsYXllZCBhY2tub3dsZWRnZW1lbnRzIHdhcyBicm9rZW4KICAgIGluIDAuNCwgaGFzIG5vdyBiZWVuIGZpeGVkLiBCaW5kaW5nIHRvIGFuIGFkZHJlc3MgdGhhdCBpcyBpbiB1c2UKICAgIG5vdyByZXN1bHRzIGluIGFuIGVycm9yLiBSZXNldCBjb25uZWN0aW9ucyBzb21ldGltZXMgaHVuZyBhbgogICAgYXBwbGljYXRpb247IHRoaXMgaGFzIGJlZW4gZml4ZWQuCgogICogQ2hlY2tzdW0gY2FsY3VsYXRpb24gc29tZXRpbWVzIGZhaWxlZCBmb3IgY2hhaW5lZCBwYnVmcyB3aXRoIG9kZAogICAgbGVuZ3Rocy4gVGhpcyBoYXMgYmVlbiBmaXhlZC4KCiAgKiBBUEk6IGEgbG90IG9mIGJ1ZyBmaXhlcyBpbiB0aGUgQVBJLiBUaGUgVURQIEFQSSBoYXMgYmVlbiBpbXByb3ZlZAogICAgYW5kIHRlc3RlZC4gRXJyb3IgcmVwb3J0aW5nIGFuZCBoYW5kbGluZyBoYXMgYmVlbgogICAgaW1wcm92ZWQuIExvZ2ljYWwgZmxhd3MgYW5kIHJhY2UgY29uZGl0aW9ucyBmb3IgaW5jb21pbmcgVENQCiAgICBjb25uZWN0aW9ucyBoYXMgYmVlbiBmb3VuZCBhbmQgcmVtb3ZlZC4KCiAgKiBNZW1vcnkgbWFuYWdlcjogYWxpZ25tZW50IGlzc3Vlcy4gUmVhbGxvY2F0aW5nIG1lbW9yeSBzb21ldGltZXMKICAgIGZhaWxlZCwgdGhpcyBoYXMgYmVlbiBmaXhlZC4KCiAgKiBHZW5lcmljIGxpYnJhcnk6IGJjb3B5IHdhcyBmbGF3ZWQgYW5kIGhhcyBiZWVuIGZpeGVkLgoKICArKyBPdGhlciBjaGFuZ2VzOgoKICAqIEFQSTogYWxsIGRhdGF0eXBlcyBoYXMgYmVlbiBjaGFuZ2VkIGZyb20gZ2VuZXJpYyBvbmVzIHN1Y2ggYXMKICAgIGludHMsIHRvIHNwZWNpZmllZCBvbmVzIHN1Y2ggYXMgdTE2X3QuIEZ1bmN0aW9ucyB0aGF0IHJldHVybgogICAgZXJyb3JzIG5vdyBoYXZlIHRoZSBjb3JyZWN0IHR5cGUgKGVycl90KS4KCiAgKiBHZW5lcmFsOiBBIGxvdCBvZiBjb2RlIGNsZWFuZWQgdXAgYW5kIGRlYnVnZ2luZyBjb2RlIHJlbW92ZWQuIE1hbnkKICAgIHBvcnRhYmlsaXR5IGlzc3VlcyBoYXZlIGJlZW4gZml4ZWQuCgogICogVGhlIGxpY2Vuc2Ugd2FzIGNoYW5nZWQ7IHRoZSBhZHZlcnRpc2luZyBjbGF1c2Ugd2FzIHJlbW92ZWQuCgogICogQzY0IHBvcnQgYWRkZWQuCgogICogVGhhbmtzOiBIdWdlIHRoYW5rcyBnbyB0byBEYWdhbiBHYWxhcm5lYXUsIEhvcnN0IEdhcm5ldHprZSwgUGV0cmkKICAgIEtvc3VuZW4sIE1pa2FlbCBDYWxlcmVzLCBhbmQgRnJpdHMgV2lsbWluayBmb3IgcmVwb3J0aW5nIGFuZAogICAgZml4aW5nIGJ1Z3MhCgooMC40KSBDaGFuZ2VzIHNpbmNlIHZlcnNpb24gMC4zLjEKCiAgKiBNZW1vcnkgbWFuYWdlbWVudCBoYXMgYmVlbiByYWRpY2FsbHkgY2hhbmdlZDsgaW5zdGVhZCBvZgogICAgYWxsb2NhdGluZyBtZW1vcnkgZnJvbSBhIHNoYXJlZCBoZWFwLCBtZW1vcnkgZm9yIG9iamVjdHMgdGhhdCBhcmUKICAgIHJhcGlkbHkgYWxsb2NhdGVkIGFuZCBkZWFsbG9jYXRlZCBpcyBub3cga2VwdCBpbiBwb29scy4gQWxsb2NhdGlvbgogICAgYW5kIGRlYWxsb2NhdGlvbiBmcm9tIHRob3NlIG1lbW9yeSBwb29scyBpcyB2ZXJ5IGZhc3QuIFRoZSBzaGFyZWQKICAgIGhlYXAgaXMgc3RpbGwgcHJlc2VudCBidXQgaXMgdXNlZCBsZXNzIGZyZXF1ZW50bHkuCgogICogVGhlIG1lbW9yeSwgbWVtb3J5IHBvb2wsIGFuZCBwYWNrZXQgYnVmZmVyIHN1YnN5c3RlbXMgbm93IHN1cHBvcnQKICAgIDQtLCAyLSwgb3IgMS1ieXRlIGFsaWdubWVudC4KCiAgKiAiT3V0IG9mIG1lbW9yeSIgc2l0dWF0aW9ucyBhcmUgaGFuZGxlZCBpbiBhIG1vcmUgcm9idXN0IHdheS4KCiAgKiBTdGFjayB1c2FnZSBoYXMgYmVlbiByZWR1Y2VkLgoKICAqIEVhc2llciBjb25maWd1cmF0aW9uIG9mIGx3SVAgcGFyYW1ldGVycyBzdWNoIGFzIG1lbW9yeSB1c2FnZSwKICAgIFRUTHMsIHN0YXRpc3RpY3MgZ2F0aGVyaW5nLCBldGMuIEFsbCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYXJlCiAgICBub3cga2VwdCBpbiBhIHNpbmdsZSBoZWFkZXIgZmlsZSAibHdpcG9wdHMuaCIuCgogICogVGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgaGFzIGJlZW4gY2hhbmdlZCBzbGlnaHRseSBzbyB0aGF0IGFsbAogICAgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGZpbGVzIGFyZSBrZXB0IHVuZGVyIHRoZSBzcmMvYXJjaAogICAgaGllcmFyY2h5LgoKICAqIEVycm9yIHByb3BhZ2F0aW9uIGhhcyBiZWVuIGltcHJvdmVkLCBib3RoIGluIHRoZSBwcm90b2NvbCBtb2R1bGVzCiAgICBhbmQgaW4gdGhlIEFQSS4KCiAgKiBUaGUgY29kZSBmb3IgdGhlIFJUWEMgYXJjaGl0ZWN0dXJlIGhhcyBiZWVuIGltcGxlbWVudGVkLCB0ZXN0ZWQKICAgIGFuZCBwdXQgdG8gdXNlLgoKICAqIEJ1Z3MgaGF2ZSBiZWVuIGZvdW5kIGFuZCBjb3JyZWN0ZWQgaW4gdGhlIFRDUCwgVURQLCBJUCwgQVBJLCBhbmQKICAgIHRoZSBJbnRlcm5ldCBjaGVja3N1bSBtb2R1bGVzLgoKICAqIEJ1Z3MgcmVsYXRlZCB0byBwb3J0aW5nIGJldHdlZW4gYSAzMi1iaXQgYW5kIGEgMTYtYml0IGFyY2hpdGVjdHVyZQogICAgaGF2ZSBiZWVuIGZvdW5kIGFuZCBjb3JyZWN0ZWQuCgogICogVGhlIGxpY2Vuc2UgaGFzIGJlZW4gY2hhbmdlZCBzbGlnaHRseSB0byBjb25mb3JtIG1vcmUgd2l0aCB0aGUKICAgIG9yaWdpbmFsIEJTRCBsaWNlbnNlLCBpbmNsdWRpbmcgdGhlIGFkdmVydGlzZW1lbnQgY2xhdXNlLgoKKDAuMy4xKSBDaGFuZ2VzIHNpbmNlIHZlcnNpb24gMC4zCgogICogRml4IG9mIGEgZmF0YWwgYnVnIGluIHRoZSBidWZmZXIgbWFuYWdlbWVudC4gUGJ1ZnMgd2l0aCBhbGxvY2F0ZWQKICAgIFJBTSBuZXZlciByZXR1cm5lZCB0aGUgUkFNIHdoZW4gdGhlIHBidWYgd2FzIGRlYWxsb2NhdGVkLgoKICAqIFRDUCBjb25nZXN0aW9uIGNvbnRyb2wsIHdpbmRvdyB1cGRhdGVzIGFuZCByZXRyYW5zbWlzc2lvbnMgZGlkIG5vdAogICAgd29yayBjb3JyZWN0bHkuIFRoaXMgaGFzIG5vdyBiZWVuIGZpeGVkLgoKICAqIEJ1Z2ZpeGVzIGluIHRoZSBBUEkuCgooMC4zKSBDaGFuZ2VzIHNpbmNlIHZlcnNpb24gMC4yCgogICogTmV3IGFuZCBpbXByb3ZlZCBkaXJlY3Rvcnkgc3RydWN0dXJlLiBBbGwgaW5jbHVkZSBmaWxlcyBhcmUgbm93CiAgICBrZXB0IGluIGEgZGVkaWNhdGVkIGluY2x1ZGUvIGRpcmVjdG9yeS4KCiAgKiBUaGUgQVBJIG5vdyBoYXMgcHJvcGVyIGVycm9yIGhhbmRsaW5nLiBBIG5ldyBmdW5jdGlvbiwKICAgIG5ldGNvbm5fZXJyKCksIG5vdyByZXR1cm5zIGFuIGVycm9yIGNvZGUgZm9yIHRoZSBjb25uZWN0aW9uIGluCiAgICBjYXNlIG9mIGVycm9ycy4KCiAgKiBJbXByb3ZlbWVudHMgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gVGhlIHN5c3RlbSBub3cKICAgIGtlZXBzIGEgcG9pbnRlciB0byB0aGUgbG93ZXN0IGZyZWUgbWVtb3J5IGJsb2NrLiBBIG5ldyBmdW5jdGlvbiwKICAgIG1lbV9tYWxsb2MyKCkgdHJpZXMgdG8gYWxsb2NhdGUgbWVtb3J5IG9uY2UsIGFuZCBpZiBpdCBmYWlscyB0cmllcwogICAgdG8gZnJlZSBzb21lIG1lbW9yeSBhbmQgcmV0cnkgdGhlIGFsbG9jYXRpb24uCgogICogTXVjaCB0ZXN0aW5nIGhhcyBiZWVuIGRvbmUgd2l0aCBsaW1pdGVkIG1lbW9yeQogICAgY29uZmlndXJhdGlvbnMuIGx3SVAgbm93IGRvZXMgYSBiZXR0ZXIgam9iIHdoZW4gb3ZlcmxvYWRlZC4KCiAgKiBTb21lIGJ1Z2ZpeGVzIGFuZCBpbXByb3ZlbWVudHMgdG8gdGhlIGJ1ZmZlciAocGJ1Zikgc3Vic3lzdGVtLgoKICAqIE1hbnkgYnVnZml4ZXMgaW4gdGhlIFRDUCBjb2RlOgoKICAgIC0gRml4ZWQgYSBidWcgaW4gdGNwX2Nsb3NlKCkuCgogICAgLSBUaGUgVENQIHJlY2VpdmUgd2luZG93IHdhcyBpbmNvcnJlY3RseSBjbG9zZWQgd2hlbiBvdXQgb2YKICAgICAgc2VxdWVuY2Ugc2VnbWVudHMgd2FzIHJlY2VpdmVkLiBUaGlzIGhhcyBiZWVuIGZpeGVkLgoKICAgIC0gQ29ubmVjdGlvbnMgYXJlIG5vdyB0aW1lZC1vdXQgb2YgdGhlIEZJTi1XQUlULTIgc3RhdGUuCgogICAgLSBUaGUgaW5pdGlhbCBjb25nZXN0aW9uIHdpbmRvdyBjb3VsZCBpbiBzb21lIGNhc2VzIGJlIHRvbwogICAgICBsYXJnZS4gVGhpcyBoYXMgYmVlbiBmaXhlZC4KCiAgICAtIFRoZSByZXRyYW5zbWlzc2lvbiBxdWV1ZSBjb3VsZCBpbiBzb21lIGNhc2VzIGJlIHNjcmV3ZWQgdXAuIFRoaXMKICAgICAgaGFzIGJlZW4gZml4ZWQuCgogICAgLSBUQ1AgUlNUIGZsYWcgbm93IGhhbmRsZWQgY29ycmVjdGx5LgoKICAgIC0gT3V0IG9mIHNlcXVlbmNlIGRhdGEgd2FzIGluIHNvbWUgY2FzZXMgbmV2ZXIgZGVsaXZlcmVkIHRvIHRoZQogICAgICBhcHBsaWNhdGlvbi4gVGhpcyBoYXMgYmVlbiBmaXhlZC4KCiAgICAtIFJldHJhbnNtaXR0ZWQgc2VnbWVudHMgbm93IGNvbnRhaW4gdGhlIGNvcnJlY3QgYWNrbm93bGVkZ21lbnQKICAgICAgbnVtYmVyIGFuZCBhZHZlcnRpc2VkIHdpbmRvdy4KCiAgICAtIFRDUCByZXRyYW5zbWlzc2lvbiB0aW1lb3V0IGJhY2tvZmZzIGFyZSBub3QgY29ycmVjdGx5IGNvbXB1dGVkCiAgICAgIChhbGEgQlNEKS4gQWZ0ZXIgYSBudW1iZXIgb2YgcmV0cmFuc21pc3Npb25zLCBUQ1Agbm93IGdpdmVzIHVwCiAgICAgIHRoZSBjb25uZWN0aW9uLgoKICAqIFRDUCBjb25uZWN0aW9ucyBub3cgYXJlIGtlcHQgb24gdGhyZWUgbGlzdHMsIG9uZSBmb3IgYWN0aXZlCiAgICBjb25uZWN0aW9ucywgb25lIGZvciBsaXN0ZW5pbmcgY29ubmVjdGlvbnMsIGFuZCBvbmUgZm9yCiAgICBjb25uZWN0aW9ucyB0aGF0IGFyZSBpbiBUSU1FLVdBSVQuIFRoaXMgZ3JlYXRseSBzcGVlZHMgdXAgdGhlIGZhc3QKICAgIHRpbWVvdXQgcHJvY2Vzc2luZyBmb3Igc2VuZGluZyBkZWxheWVkIEFDS3MuCgogICogVENQIG5vdyBwcm92aWRlcyBwcm9wZXIgZmVlZGJhY2sgdG8gdGhlIGFwcGxpY2F0aW9uIHdoZW4gYQogICAgY29ubmVjdGlvbiBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgc2V0IHVwLgoKICAqIE1vcmUgY29tbWVudHMgaGF2ZSBiZWVuIGFkZGVkIHRvIHRoZSBjb2RlLiBUaGUgY29kZSBoYXMgYWxzbyBiZWVuCiAgICBzb21ld2hhdCBjbGVhbmVkIHVwLgoKKDAuMikgSW5pdGlhbCBwdWJsaWMgcmVsZWFzZS4K