MjAwMy0wNi0wMiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIHN0cmFjZS5jIChtYWluKTogU2V0IC1xIHdoZW4gZ2l2ZW4gLW8gYW5kIG5vdCAtcCwgYW5kIG5vdCB3aGVuIG5vdAoJZ2l2ZW4gLW8sIHRvIG1hdGNoIHdoYXQgdGhlIG1hbiBwYWdlIGFsd2F5cyBzYWlkLgoJRml4ZXMgRGViaWFuIGJ1ZyAjNDcxMTMsICMxNTM2NzguCgoJKiBjb25maWd1cmUuYWMsIE5FV1M6IFZlcnNpb24gNC40Ljk3LgoJKiBzdHJhY2Uuc3BlYywgZGViaWFuL2NoYW5nZWxvZzogNC40Ljk3LTEuCgoJKiBkZWJpYW4vY29udHJvbCAoQXJjaGl0ZWN0dXJlKTogQWRkIHNobWVkaWEuCgoJKiBjb25maWd1cmUuYWMsIGRlZnMuaCwgbWVtLmMsIHByb2Nlc3MuYywgc29jay5jLCBzeXNjYWxsLmMsIHV0aWwuYzoKCU1lcmdlZCBpbiBTSG1lZGlhIHBvcnQgZnJvbSBTdGVwaGVuIFRob21hcyA8c3RlcGhlbi50aG9tYXNAc3VwZXJoLmNvbT4uCgoJKiBjb25maWcuZ3Vlc3M6IFVwZGF0ZSBmcm9tIGZ0cDovL2Z0cC5nbnUub3JnL3B1Yi9nbnUvY29uZmlnLywKCXRpbWVzdGFtcCAyMDAzLTA1LTIyLgoJKiBjb25maWcuc3ViOiBMaWtld2lzZSwgdGltZXN0YW1wIDIwMDMtMDUtMjQuCgoyMDAzLTA1LTIyICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogZGVmcy5oIChzdHJ1Y3QgdGNiKTogTmV3IG1lbWJlciBgbnpvbWJpZXMnLgoJKiBzdHJhY2UuYyAoYWxsb2N0Y2IpOiBJbml0aWFsaXplIGl0LgoJKGRyb3B0Y2IpOiBJbmNyZW1lbnQgb3VyIHBhcmVudCdzIHpvbWJpZSBjb3VudC4KCSogcHJvY2Vzcy5jIChpbnRlcm5hbF93YWl0KTogRG9uJ3QgZ28gaW50byBUQ0JfU1VTUEVOREVEIGlmIHRoZQoJcHJvY2VzcyBoYXMgem9tYmllcyBpdCBjYW4gcmVhcC4gIE9uIHRoZSB3YXkgb3V0LCBpZiB3ZSByZWFwZWQKCWFuIHVudHJhY2VkIHByb2Nlc3MsIGRlY3JlbWVudCB0aGUgem9tYmllIGNvdW50LgoKCSogcHJvY2Vzcy5jIChzeXNfY2xvbmUpOiBNYXNrIENTSUdOQUwgb3V0IG9mIGZsYWdzIGFuZCBwcmludCB0aGF0CglzZXBhcmF0ZWx5IHVzaW5nIHNpZ25hbWUuCgoJKiBwcm9jZXNzLmMgKGludGVybmFsX2Nsb25lKSBbVENCX0NMT05FX1RIUkVBRF06IFVzZSBBUkdfRkxBR1MgaW5zdGVhZAoJb2YgbGl0ZXJhbCAwIGZvciBpbmRleC4gIENvbnN1bHQgdGhlIHJpZ2h0IGZsYWdzIHdpdGhvdXQgY2xvYmJlcmluZwoJYW55dGhpbmcgd2hlbiB3ZSByZXBhcmVudCB0aGUgbmV3IGNoaWxkIHRvIHRoZSBjYWxsZXIncyBwYXJlbnQgdGhyZWFkLgoKCSogbGludXgvczM5MC9zeXNjYWxsZW50Lmg6IEZpeCBzeXNfY2xvbmUgYXJndW1lbnQgY291bnQuCgkqIGxpbnV4L3MzOTB4L3N5c2NhbGxlbnQuaDogTGlrZXdpc2UuCgkqIGxpbnV4L21pcHMvc3lzY2FsbGVudC5oOiBMaWtld2lzZS4KCSogbGludXgvYWxwaGEvc3lzY2FsbGVudC5oOiBMaWtld2lzZS4KCSogbGludXgvcG93ZXJwYy9zeXNjYWxsZW50Lmg6IExpa2V3aXNlLgoJKiBsaW51eC9zaC9zeXNjYWxsZW50Lmg6IExpa2V3aXNlLgoJKiBsaW51eC9zcGFyYy9zeXNjYWxsZW50Lmg6IExpa2V3aXNlLgoJKiBsaW51eC9ocHBhL3N5c2NhbGxlbnQuaDogTGlrZXdpc2UuCgoJKiBwcm9jZXNzLmMgW0xJTlVYXSBbUzM5MCB8fCBTMzkwWF0gKEFSR19DVElELCBBUkdfVExTKTogRml4IHN3YXBwZWQKCWluZGljZXMuICBSZXBvcnRlZCBieSBKYWt1YiBKZWxpbmVrIDxqYWt1YkByZWRoYXQuY29tPi4KCgkqIHNpZ25hbC5jIFtMSU5VWF0gKFNJX1NJR0lPLCBTSV9US0lMTCk6IE5ldyBtYWNyb3MuCglbTElOVVggfHwgU1ZSNF0gKHNpZ2luZm9fY29kZXMpOiBBZGQgc3RyaW5ncyBmb3IgdGhlbS4KCgkqIHByb2Nlc3MuYyAocHJpbnRfYWZmaW5pdHlsaXN0KTogRml4IGxvb3AgY29uZGl0aW9uLgoJUmVwb3J0ZWQgYnkgSWFuIFdpZW5hbmQgPGlhbndAZ2VsYXRvLnVuc3cuZWR1LmF1Pi4KCjIwMDMtMDQtMTAgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBzeXNjYWxsLmMgKHF1YWxfZGVzYyk6IFJldHVybiB6ZXJvIGFmdGVyIHBhcnNpbmcgbnVtYmVyLgoJRnJvbSBSb2IgTGVzbGllIDxyb2JAbWFycy5vcmc+LCBmaXhlcyBEZWJpYW4gYnVnICMxODgzNzkuCgoyMDAzLTA0LTA3ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogbGludXgvc3lzY2FsbGVudC5oOiBIYW5kbGUgc2VtdGltZWRvcCBzdWJjYWxsIG9mIGlwYyBzeXNjYWxsLgoJKiBsaW51eC9zeXNjYWxsLmg6IExpa2V3aXNlLgoJKiBpcGMuYyBbTElOVVhdIChzeXNfc2VtdGltZWRvcCk6IE5ldyBmdW5jdGlvbi4KCUZyb20gVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4uCgoJKiBpcGMuYyAoc3lzX3NlbWdldCk6IE1hc2sgb2ZmIHBlcm1pc3Npb24gYml0cyBmb3IgcmVzb3VyY2VfZmxhZ3MuCglGcm9tIFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LgoKMjAwMy0wNC0wMSAgUGhpbGlwcGUgRGUgTXV5dGVyICA8cGhkbUBtYWNxZWwuYmU+CgoJKiBzb2NrLmMsIHN0cmVhbS5jOiBDaGVjayAjaWZkZWYgTElOVVgsIG5vdCBsaW51eC4KCSogZmlsZS5jOiBBbHdheXMgcHJvdmlkZSBzeXNfKmF0dHIsIHJlZ2FyZGxlc3Mgb2YgI2lmZGVmIFhBVFRSX0NSRUFURS4KCjIwMDMtMDMtMzAgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBjb25maWd1cmUuYWMsIE5FV1M6IFZlcnNpb24gNC40Ljk2LgoJKiBzdHJhY2Uuc3BlYywgZGViaWFuL2NoYW5nZWxvZzogNC40Ljk2LTEuCgoyMDAzLTAyLTI2ICBTdHVhcnQgTWVuZWZ5IDxzdHVhcnQubWVuZWZ5QHN0LmNvbT4KCglWYXJpb3VzIGZpeGVzIGZvciBTdXBlckggW1NIXToKCSogbWVtLmMgKHN5c19vbGRfbW1hcCk6IG1tYXAoKSBwYXJhbWV0ZXJzIHBhc3NlZCBpbiByZWdpc3RlcnMKCSogbmV0LmMgKHN5c19waXBlKSwgc3lzY2FsbC5jIChnZXRydmFsMik6IHBpcGUoKSByZXN1bHRzIHJldHVybmVkCglpbiByZWdpc3RlcnMKCSogcHJvY2Vzcy5jIChjaGFuZ2Vfc3lzY2FsbCk6IEZpeGVkIHJlZ2lzdGVyIHdoaWNoIGhvbGRzIHN5c3RlbQoJY2FsbCBudW1iZXIKCSogdXRpbC5jIChhcmcwX29mZnNldCwgYXJnMV9vZmZzZXQpOiBwcm92aWRlIGRlZmluaXRpb24KCSogTWFrZWZpbGUuYW06IEFkZGVkIG5ldyBmaWxlcyBpbiBsaW51eC9zaAoJKiBsaW51eC9zaC9zeXNjYWxsZW50Lmg6IE5ldyBmaWxlLgoJKiBsaW51eC9zaC9lcnJub2VudC5oOiBOZXcgZmlsZS4KCSogbGludXgvc2gvaW9jdGxlbnQuaDogTmV3IGZpbGUuCgkqIGxpbnV4L3NoL3NpZ25hbGVudC5oOiBOZXcgZmlsZS4KCgkqIGxpbnV4L2lvY3RsZW50LnNoOiBUYWtlIGFuIGFyZyBmb3IgbG9jYXRpb24gb2YgaGVhZGVyIGZpbGVzCgkqIHN5c2NhbGxlbnQuc2g6IFJlcGxhY2VkIGxvc3QgJAoKMjAwMy0wMy0zMCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIHRpbWUuYyBbTElOVVhdOiBIYW5kbGUgbmV3IExpbnV4IDIuNSBjbG9jay90aW1lciBzeXNjYWxscy4KCSogbGludXgvc3lzY2FsbC5oLCBsaW51eC9zeXNjYWxsZW50LmgsIGxpbnV4L2R1bW15Lmg6IExpa2V3aXNlLgoJRnJvbSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPi4KCgkqIGxpbnV4L3N5c2NhbGxlbnQuaDogVXNlIHN5c19nZXRybGltaXQgZm9yIDE5MS4KCVVzZSBuYW1lICJvbGRfZ2V0cmxpbWl0IiBmb3IgNzYuCglSZXBvcnRlZCBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPi4KCjIwMDMtMDMtMTggIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBwcm9jZXNzLmMgW0xJTlVYXSAoc3lzX2Nsb25lKTogRG9uJ3QgZGVyZWZlcmVuY2UgcGFyZW50X3RpZCBhcmd1bWVudC4KCjIwMDMtMDMtMTcgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBsaW51eC94ODZfNjQvc3lzY2FsbGVudC5oOiBjbG9uZSB0YWtlcyA1IGFyZ3MuCgkqIHByb2Nlc3MuYyBbTElOVVhdIChzeXNfY2xvbmUpIFtYODZfNjRdOiBGaXggYXJndW1lbnQgb3JkZXIuCgoyMDAzLTAzLTE1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogbGludXgveDg2XzY0L3N5c2NhbGxlbnQuaDogQWRkIGV4aXRfZ3JvdXAgc3lzY2FsbCBhdCAyMzEuCgoyMDAzLTAzLTE0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogbGludXgveDg2XzY0L3N5c2NhbGxlbnQuaDogVXBkYXRlIGFuZCBhZGQgbWFueSAyLjUgc3lzY2FsbHMuCgoJKiBsaW51eC9pYTY0L3N5c2NhbGxlbnQuaDogY2xvbmUgdGFrZXMgNSBhcmd1bWVudHMuCgkqIHByb2Nlc3MuYyBbTElOVVggJiYgSUE2NF0gKEFSR18qKTogVXBkYXRlIGZvciAyLjUgY2xvbmUgY2FsbHMuCgoyMDAzLTAzLTEyICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogbGludXgvaWE2NC9zeXNjYWxsZW50Lmg6IEZpeCBhcmcgY291bnRzIGZvciBjbG9uZSBhbmQgY2xvbmUyLgoJVXNlIHN5c19jbG9uZSBmb3IgY2xvbmUyLgoJKiBsaW51eC9zeXNjYWxsLmg6IERvbid0IGRlY2xhcmUgc3lzX2Nsb25lMi4KCSogcHJvY2Vzcy5jIChzeXNfY2xvbmUpOiBSZXdyaXR0ZW4gdG8gaGFuZGxlIGJvdGggZmxhdm9ycywKCXByaW50IGFsbCBleHRyYSBhcmdzIGRlcGVuZGluZyBvbiBmbGFnIGJpdHMuCgkoc3lzX2Nsb25lMik6IEZ1bmN0aW9uIHJlbW92ZWQuCgoJKiBsaW51eC9pYTY0L3N5c2NhbGxlbnQuaDogQWRkIGEgYnVuY2ggb2YgMi41IHN5c2NhbGxzLgoKMjAwMy0wMy0wNCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIHN5c2NhbGwuYyAoZ2V0X3Njbm8pIFtJQTY0XTogRG8gVENCX1dBSVRFWEVDVkUgY2hlY2sgb25seSB3aGVuCglUQ0JfSU5TWVNDQUxMIGlzIGNsZWFyLCBsaWtlIG90aGVyIHBsYXRmb3JtcyBkby4KCjIwMDMtMDMtMDQgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgoKCSogbWVtLmMgW0xJTlVYXSAoc3lzX3JlbWFwX2ZpbGVfcGFnZXMpOiBOZXcgZnVuY3Rpb24uCgkqIGxpbnV4L3N5c2NhbGwuaDogRGVjbGFyZSBpdC4KCSogbGludXgvc3lzY2FsbGVudC5oOiBVc2UgaXQuCgkqIGxpbnV4L3Bvd2VycGMvc3lzY2FsbGVudC5oOiBMaWtld2lzZS4KCgkqIHByb2Nlc3MuYyBbTElOVVhdIChzeXNfZnV0ZXgpOiBPbWl0IGZpbmFsIGlmIG9wIGlzIG5vdCBGVVRFWF9XQUlULgoKMjAwMy0wMi0yNiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIGNvbmZpZ3VyZS5hYzogRml4IHR5cG8gaW4gbmV0aW5ldC9pbi5oIGNoZWNrLgoJQWxzbyBpbmNsdWRlIDxzeXMvdHlwZXMuaD4gYW5kIDxzeXMvc29ja2V0Lmg+IGJlZm9yZSA8bmV0aW5ldC9pbi5oPi4KCVJlcG9ydGVkIGJ5IEFsZXggU2VtZW55YWthIDxhbGV4c0BzbmFyay5yaW5ldC5ydT4uCgoyMDAzLTAyLTI0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogY29uZmlndXJlLmFjLCBORVdTOiBWZXJzaW9uIDQuNC45NS4KCSogc3RyYWNlLnNwZWMsIGRlYmlhbi9jaGFuZ2Vsb2c6IDQuNC45NS0xLgoKCSogcHJvY2Vzcy5jIChzeXNfZ2V0cmVzZ2lkKTogRml4IHR5cG9zIGluIGFyZ3VtZW50IGFjY2Vzcy4KCjIwMDMtMDItMjMgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBwcm9jZXNzLmMgKHN5c19nZXRyZXN1aWQpOiBGaXggdHlwb3MgaW4gYXJndW1lbnQgYWNjZXNzLgoJUmVwb3J0ZWQgYnkgQW50b24gQmxhbmNoYXJkIDxhbnRvbkBzYW1iYS5vcmc+LgoKMjAwMy0wMi0xOSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIGNvbmZpZ3VyZS5hYywgTkVXUzogVmVyc2lvbiA0LjQuOTQuCgkqIHN0cmFjZS5zcGVjLCBkZWJpYW4vY2hhbmdlbG9nOiA0LjQuOTQtMS4KCgkqIHZlcnNpb24uYzogUmVtb3ZlZC4KCSogTWFrZWZpbGUuYW0gKHN0cmFjZV9TT1VSQ0VTKTogUmVtb3ZlIGl0LgoJKiBzdHJhY2UuYzogVXNlIFBBQ0tBR0VfTkFNRSBhbmQgVkVSU0lPTiBtYWNyb3MgaW5zdGVhZCBvZiB2ZXJzaW9uIHZhci4KCglGcmVlQlNEIHJmb3JrIHN1cHBvcnQgY2hhbmdlcyBmcm9tIFJ1c3MgQ294IDxyc2NAcGxhbjkuYmVsbC1sYWJzLmNvbT46CgkqIHN5c2NhbGwuYyAoaW50ZXJuYWxfc3lzY2FsbCk6IEhhbmRsZSBTWVNfcmZvcmsgd2l0aCBpbnRlcm5hbF9mb3JrLgoJKiBwcm9jZXNzLmMgKGludGVybmFsX2ZvcmspIFtTWVNfcmZvcmtdOiBCYWlsIGlmIFJGUFJPQyBmbGFnIG5vdCBzZXQuCgoyMDAzLTAxLTIzICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogc2lnbmFsLmM6IFJlb3JkZXIgI2lmZGVmcyBzbyBIQVZFX0FTTV9TSUdDT05URVhUX0ggZG9lc24ndCBtYXR0ZXIgb24KCVNQQVJDLCB3aGljaCBkb2Vzbid0IHVzZSB0aGUgaGVhZGVyIHJlZ2FyZGxlc3MuCgoJKiB1dGlsLmMgW0xJTlVYICYmIFNQQVJDXTogRG8gcmVuYW1pbmcga2x1ZGdlcyBhcm91bmQgPGFzbS9yZWcuaD4KCWxpa2Ugc2lnbmFsLmMgZG9lcy4KCgkqIGxpbnV4L3NwYXJjL3N5c2NhbGwuaDogRGVjbGFyZSBzeXNfZ2V0ZGVudHM2NCwgc3lzX2xsc2Vlay4KCgkqIGxpbnV4L2R1bW15LmggWyEgU1lTX2dldHBtc2ddIChzeXNfZ2V0cG1zZyk6ICNkZWZpbmUgdG8gcHJpbnRhcmdzLgoJWyEgU1lTX3B1dHBtc2ddIChzeXNfcHV0cG1zZyk6IExpa2V3aXNlLgoKCSogcHJvY2Vzcy5jOiBSZW9yZGVyIGluY2x1ZGVzIHRvIHB1dCBzeXMvcmVnLmggYmVmb3JlIGxpbnV4L3B0cmFjZS5oLAoJc2luY2UgdGhleSBjYW4gY29uZmxpY3QuCgoyMDAzLTAxLTIxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogc3RyYWNlLmMgKHVzYWdlKTogT21pdCAteiwgc2luY2UgaXQgaGFzIG5ldmVyIHdvcmtlZCBwcm9wZXJseS4KCSogTkVXUzogTGlrZXdpc2UuCgoJKiBzdHJhY2UuYyAobWFpbik6IEdyb2sgbmV3IG9wdGlvbiBgLUUgdmFyPXZhbCcgb3IgYC1FIHZhcicgdG8gcHV0Cgl2YXI9dmFsIGluIGVudmlyb24gb3IgdG8gcmVtb3ZlIHZhciwgcmVzcGVjdGl2ZWx5LgoJKHVzYWdlKTogTWVudGlvbiBpdC4KCSogc3RyYWNlLjEsIE5FV1M6IERvY3VtZW50IGl0LgoKCSogY29uZmlndXJlLmFjLCBORVdTOiBWZXJzaW9uIDQuNC45My4KCSogc3RyYWNlLnNwZWMsIGRlYmlhbi9jaGFuZ2Vsb2c6IDQuNC45My0xLgoJKiBzdHJhY2Uuc3BlYyAoU291cmNlMCk6IFVzZSBzdHJhY2UtVkVSU0lPTi50YXIuYnoyIG5vdy4KCjIwMDMtMDEtMjAgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBkZWZzLmggW0xJTlVYXSBbUzM5MCB8fCBTMzkwWF0gKFRDQl9XQUlURVhFQ1ZFKTogRGVmaW5lIGl0LgoJKiBzeXNjYWxsLmMgKGdldF9zY25vLCBzeXNjYWxsX2ZpeHVwKSBbTElOVVhdIFtTMzkwIHx8IFMzOTBYXTogSGFuZGxlCglUQ0JfV0FJVEVYRUNWRSBzdGF0ZSB3aXRoIHNwZWNpYWwga2x1ZGdlcy4KCgkqIHByb2Nlc3MuYyBbTElOVVhdIChzeXNfY2xvbmUpIFtTMzkwIHx8IFMzOTBYXTogQXJndW1lbnQgb3JkZXIgaXMKCXJldmVyc2VkIGZyb20gb3RoZXIgYXJjaGl0ZWN0dXJlcy4KCgkqIHByb2Nlc3MuYyAoc3lzX2V4ZWN2ZSkgW0xJTlVYXTogTWFrZSBzZXR0aW5nIFRDQl9XQUlURVhFQ1ZFIGZsYWcKCWNvbmRpdGlvbmFsIG9uIFtUQ0JfV0FJVEVYRUNWRV0gaW5zdGVhZCBvZiBsaXN0IG9mIHByb2Nlc3NvcnMuCgoJKiB1dGlsLmMgKHJlc3RvcmVfYXJnMCk6IEV2YWx1YXRlIGFyZ3MgaW4gbm8tb3AgZGVmbnMuCgoJKiB1dGlsLmMgW1MzOTAgfHwgUzM5MFhdIChhcmcwX29mZnNldCwgYXJnMV9vZmZzZXQpOiBGaXggZGVmaW5pdGlvbnMKCWZvciBjbG9uZSBjYWxsIG9uIFMzOTAuICBGcm9tIE1pY2hhZWwgSG9semhldSA8aG9semhldUBkZS5pYm0uY29tPi4KCjIwMDMtMDEtMTcgIEFudG9uIEJsYW5jaGFyZCA8YW50b25Ac2FtYmEub3JnPgoKCSogdXRpbC5jIFtMSU5VWF0gKHNldGJwdCk6IEhhbmRsZSBTWVNfdmZvcmsgbGlrZSBTWVNfZm9yay4KCgkqIGxpbnV4L3N5c2NhbGwuaCAoU1lTX3NvY2tldF9zdWJjYWxsKTogMjU2IGFsc28gZm9yIFBPV0VSUEMuCgoyMDAzLTAxLTE0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogbGludXgvcG93ZXJwYy9lcnJub2VudC5oOiBBZGQgbWlzc2luZyBlcnJub3MuCgkqIGxpbnV4L3Bvd2VycGMvaW9jdGxlbnQuaDogVXBkYXRlIGlvY3RsIHZhbHVlcy4KCUZyb20gQW50b24gQmxhbmNoYXJkIDxhbnRvbkBzYW1iYS5vcmc+LgoKCSogaW8uYyBbTElOVVhdIChzeXNfcHJlYWQsIHN5c19wd3JpdGUpOiBGaXggbGFzdCBjaGFuZ2UuCglGcm9tIEFudG9uIEJsYW5jaGFyZCA8YW50b25Ac2FtYmEub3JnPi4KCgkqIGxpbnV4L2hwcGEvc3lzY2FsbGVudC5oOiBVc2Ugc3lzX2dldGRlbnRzNjQsIHN5c190cnVuY2F0ZTY0LAoJc3lzX2Z0cnVuY2F0ZTY0LCBpbnN0ZWFkIG9mIHByaW50YXJncywgZm9yIHRob3NlIHN5c2NhbGxzLgoJKiBsaW51eC9taXBzL3N5c2NhbGxlbnQuaDogTGlrZXdpc2UuCgkqIGxpbnV4L3Bvd2VycGMvc3lzY2FsbGVudC5oOiBMaWtld2lzZS4KCSogbGludXgvczM5MC9zeXNjYWxsZW50Lmg6IExpa2V3aXNlLgoJKiBsaW51eC9zcGFyYy9zeXNjYWxsZW50Lmg6IExpa2V3aXNlLgoKCSogbGludXgvc3lzY2FsbC5oIChTWVNfc29ja2V0X3N1YmNhbGwpOiBPbmx5IDI1NiBmb3IgUzM5MCwgUzM5MFguCglBbGwgb3RoZXJzIGF0IHRoZSBtb21lbnQgdXNlIGxpbnV4L3N5c2NhbGxlbnQuaCwgd2hlcmUgaXQncyAzMDAuCgoJKiBzdHJhY2UuMTogVXBkYXRlIGJ1ZyByZXBvcnRpbmcgaW5mby4KCgkqIHJlc291cmNlLmMgW0xJTlVYXSAocXVvdGFjbWRzKTogR3JvayBuZXcgY29tbWFuZCBlbmNvZGluZ3MuCglGcm9tIE5hdGhhbiBTY290dCA8bmF0aGFuc0BkZWJpYW4ub3JnPi4KCgkqIGNvbmZpZ3VyZS5hYywgTkVXUzogVmVyc2lvbiA0LjQuOTIuCgkqIHN0cmFjZS5zcGVjLCBkZWJpYW4vY2hhbmdlbG9nOiA0LjQuOTItMS4KCgkqIGNvbmZpZ3VyZS5hYzogTWF0Y2ggcG93ZXJwYyogKGluY2x1ZGVzIHBvd2VycGM2NCksIGFuZCBkb24ndCBtYXRjaAoJcHBjIChuZXZlciBjb21lcyBvdXQgb2YgY29uZmlnLnN1YikuCgoJKiBwcm9jZXNzLmMgKHN5c19wdHJhY2UpOiBVc2UgI2x4IGZvcm1hdCBmb3IgYWRkcmVzcyBhcmd1bWVudC4KCVtQT1dFUlBDXTogVXNlIHNpemVvZih1bnNpZ25lZCBsb25nKSBpbiBwbGFjZSBvZiA0IGZvciBtdWx0aXBsaWVycy4KCSogcHJvY2Vzcy5jIFtQT1dFUlBDXTogTGlrZXdpc2UuCgkqIHNpZ25hbC5jIChzeXNfc2lncmV0dXJuKSBbUE9XRVJQQ106IExpa2V3aXNlLgoJKiBzeXNjYWxsLmMgKGdldF9zY25vKSBbUE9XRVJQQ106IExpa2V3aXNlLgoJKiB1dGlsLmMgW1BPV0VSUENdOiBMaWtld2lzZS4KCShwcmludG51bSk6IFVzZSBsb25nIGZvciBOVU0uCglGcm9tIEFudG9uIEJsYW5jaGFyZCA8YW50b25Ac2FtYmEub3JnPi4KCgkqIGRlZnMuaCAoQUxJR042NCk6IEZpeCBkZWZuIGZvciBQUEMsIHNhbWUgYXMgRnJlZUJTRCBvbmUuCgoJKiB1dGlsLmMgW0xJTlVYXSAocmVzdG9yZV9hcmcwLCByZXN0b3JlX2FyZzEpOiBOZXcgbWFjcm9zLCBkZWZpbmVkCglhcHByb3ByaWF0ZWx5IHZpYSBzZXRfYXJnMCBvciBuby1vcHMgZm9yIGVhY2ggYXJjaGl0ZWN0dXJlLgoJKGNsZWFyYnB0KTogVXNlIHRob3NlIGluc3RlYWQgb2Ygc2V0X2FyZzAgYW5kIHNldF9hcmcxLgoKCSogZGVmcy5oIFtfTEFSR0VGSUxFNjRfU09VUkNFXSAoX0xGUzY0X0xBUkdFRklMRSk6IERlZmluZSBpdC4KCSogbGludXgvc3lzY2FsbGVudC5oOiBVc2Ugc3lzX2dldGRlbnRzNjQsIHN5c190cnVuY2F0ZTY0LAoJc3lzX2Z0cnVuY2F0ZTY0LCBpbnN0ZWFkIG9mIHByaW50YXJncywgZm9yIHRob3NlIHN5c2NhbGxzLgoKCSogcHJvY2Vzcy5jOiBVc2UgPGxpbnV4L3B0cmFjZS5oPiByZWdhcmRsZXNzIG9mIDxzeXMvcmVnLmg+LgoJKHN5c19wdHJhY2UpOiBVc2UgcHJpbnR4dmFsLgoJKHB0cmFjZV9jbWRzKTogTWFrZSBQVFJBQ0VfR0VUUkVHUyBldCBhbCBjb25kaXRpb25hbCBvbiAjaWZkZWYgUFRSQUNFXyoKCWluc3RlYWQgb2Ygb25seSAjaWZkZWYgU1VOT1M0LiAgQWRkIFBUUkFDRV9bR1NdRVRGUFhSRUdTLgoKCSogaXBjLmMgKFBSSU5UQ1RMKTogTmV3IG1hY3JvLiAgI2lmZGVmIElQQ182NCwgZmFjdG9yIG91dCB0aGUgZmxhZyBhbmQKCXByaW50IGl0IGJlZm9yZSB1c2luZyBwcmludHh2YWwuCgkoc3lzX21zZ2N0bCwgc3lzX3NlbWN0bCwgc3lzX3NobWN0bCk6IFVzZSBpdC4KCjIwMDMtMDEtMTMgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBjb25maWcuZ3Vlc3M6IFVwZGF0ZSBmcm9tIGZ0cDovL2Z0cC5nbnUub3JnL3B1Yi9nbnUvY29uZmlnLywKCXRpbWVzdGFtcCAyMDAzLTAxLTEwLgoJKiBjb25maWcuc3ViOiBMaWtld2lzZSwgdGltZXN0YW1wIDIwMDMtMDEtMDMuCgkqIGluc3RhbGwtc2g6IFVwZGF0ZSBmcm9tIEF1dG9tYWtlIDEuNy4yLgoKCSogbGludXgvcG93ZXJwYy9zaWduYWxlbnQuaDogQWRkIFNJR1JUTUlOLgoJRnJvbSBBbnRvbiBCbGFuY2hhcmQgPGFudG9uQHNhbWJhLm9yZz4uCgoJKiBsaW51eC9wb3dlcnBjL3N5c2NhbGxlbnQuaDogQWRkIG1pc3Npbmcgc3lzdGVtIGNhbGxzLgoJRGVjb2RlIG1vcmUgc3lzdGVtIGNhbGxzLCB3ZSB3ZXJlIGp1c3QgcHJpbnRhcmdzIGZvciBtYW55IHRoaW5ncy4KCVJlbW92ZSBzb21lIHg4Ni1zcGVjaWZpYyBzeXN0ZW0gY2FsbHMuCglSZW1vdmUgdHdvIHN5c2NhbGxzIGJldHdlZW4gdGhlIHNvY2tldCBhbmQgaXBjIHN5c2NhbGxzLAoJaXQgd2FzIHJlc3VsdGluZyBpbiBhbGwgSVBDIHN5c2NhbGxzIGJlaW5nIG9mZiBieSB0d28uCgoJKiBpb2N0bC5jIChpb2N0bF9kZWNvZGUpIFtQT1dFUlBDXTogRGVjb2RlIHRlcm0gaW9jdGxzIGxpa2UgQWxwaGEuCglGcm9tIEFudG9uIEJsYW5jaGFyZCA8YW50b25Ac2FtYmEub3JnPi4KCgkqIGRlZnMuaCBbUE9XRVJQQ10gKFVFU1AsIEVJUCwgRUFYLCBPUklHX0VBWCk6IFJlbW92ZSB0aGlzIGNydWZ0LgoJW0xJTlVYICYmIFBPV0VSUEMgJiYgIV9fcG93ZXJwYzY0X19dIChBTElHTjY0KTogTmV3IG1hY3JvLgoJKiBpby5jIChzeXNfcHJlYWQsIHN5c19wd3JpdGUpOiBVc2UgQUxJR042NC4KCUZyb20gQW50b24gQmxhbmNoYXJkIDxhbnRvbkBzYW1iYS5vcmc+LgoKCSogdGVybS5jIFtMSU5VWF06IEdldCBrZXJuZWwgZGVmaW5pdGlvbiBvZiBzdHJ1Y3QgdGVybWlvcy4KCUZyb20gQW50b24gQmxhbmNoYXJkIDxhbnRvbkBzYW1iYS5vcmc+LgoKCSogbGludXgvaW9jdGxlbnQuc2g6IExvb2sgaW4gc291bmQvIGRpcmVjdG9yeSB0b28uCglGcm9tIEFudG9uIEJsYW5jaGFyZCA8YW50b25Ac2FtYmEub3JnPi4KCgkqIGRlc2MuYyAocHJpbnRmbG9jazY0KTogRml4IEFERFIgYXJndW1lbnQgdHlwZS4KCUZyb20gQW50b24gQmxhbmNoYXJkIDxhbnRvbkBzYW1iYS5vcmc+LgoKCSogc3RyYWNlLmMgWyEgSEFWRV9TVFJTSUdOQUxdOiBDbGVhbiB1cCAjaWZkZWZzIG9uIGRlY2xzIGZvcgoJc3lzX3NpZ2xpc3QgYW5kIF9zeXNfc2lnbGlzdC4KCVJlcG9ydGVkIGJ5IEpvaG4gSHVnaGVzIDxqb2huQENhbHZhLkNPTT4uCgoJKiBuZXQuYzogSEFWRV9PUFRIRFIgLT4gSEFWRV9TVFJVQ1RfT1BUSERSCglSZXBvcnRlZCBieSBKb2huIEh1Z2hlcyA8am9obkBDYWx2YS5DT00+LgoKCSogbGludXgvc3lzY2FsbC5oIFtBUk1dIChTWVNfc29ja2V0X3N1YmNhbGwpOiBTZXQgdG8gMzAwLgoKMjAwMy0wMS0xMCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIGNvbmZpZ3VyZS5hYywgTkVXUzogVmVyc2lvbiA0LjQuOTEuCgkqIHN0cmFjZS5zcGVjLCBkZWJpYW4vY2hhbmdlbG9nOiA0LjQuOTEtMQoKCSogdXRpbC5jIFtMSU5VWCAmJiBYODZfNjRdIChhcmcwX29mZnNldCwgYXJnMV9vZmZzZXQpOiBVc2UgY29ycmVjdAoJdmFsdWVzIGZvciB4ODYtNjQsIGNvbmRpdGlvbmFsIG9uIGN1cnJlbnRfcGVyc29uYWxpdHkuCgoJKiBzdHJhY2UuYyAoZHJvcHRjYik6IENsZWFyIGZsYWdzIHdvcmQgYmVmb3JlIGNhbGxpbmcgcmVidWlsZF9wb2xsdi4KCgkqIGNvbmZpZ3VyZS5hYzogQ2hlY2sgc3RydWN0IFRfY29ubl9yZXMgZm9yIFFVRVVFX3B0ciBvciBBQ0NFUFRPUl9pZC4KCSogc3RyZWFtLmMgKHByaW50X3RyYW5zcG9ydF9tZXNzYWdlKTogVXNlICNpZmRlZnMgZm9yIHRob3NlIG1lbWJlcnMuCgoJKiBzdHJhY2UuYyAocmVidWlsZF9wb2xsdik6IEZpeCB0eXBvOiBzdHJ1Y3QgcG9sbCAtPiBzdHJ1Y3QgcG9sbGZkLgoKCSogY29uZmlndXJlLmFjOiBGaXggc2lnaW5mb190L3NpZ19hdG9taWNfdCBjaGVja3MuCglVc2UgcHJlcmVxdWlzaXRlICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+IGZvciBuZXRpbmV0LyouaCBjaGVja3MuCgoJKiBzdHJhY2UuYyAocGZkMnRjYik6IEZpeCBmb3IgbmV3IHRjYnRhYiB0eXBlLgoJKHJlYnVpbGRfcG9sbHYpOiBMaWtld2lzZS4KCShkZXRhY2gpOiBQdXQgdmFyaWFibGVzIHVzZWQgdW5kZXIgW0xJTlVYXSBpbnNpZGUgI2lmZGVmLgoKCSogcHJvY2Vzcy5jIChjaGFuZ2Vfc3lzY2FsbCkgW1BPV0VSUENdOiBBZGQgbWlzc2luZyByZXR1cm4uCgkqIHV0aWwuYyBbUE9XRVJQQ10gKGFyZzBfb2Zmc2V0KTogU2V0IHRvIDQqUFRfUjMsIG5vdCA0KlBUX09SSUdfUjMuCgoJKiBzdHJhY2Uuc3BlYzogTmV3IGZpbGUuCgkqIGRlYmlhbi9jaGFuZ2Vsb2c6IDQuNC45MC0xCgkqIGRlYmlhbi9ydWxlcyAoYmluYXJ5LWFyY2gpOiBEZXBlbmQgb24gYnVpbGQuCgkoY2xlYW4pOiBEb24ndCB0cnkgdG8gcnVuIE1ha2VmaWxlLmluLgoJKiBkZWJpYW4vY29udHJvbCAoU3RhbmRhcmRzLVZlcnNpb24pOiBOb3cgMy41LjguCgoJKiBjb25maWd1cmUuYWM6IERpZGRsZSBDRkxBR1MgYWZ0ZXIgQUNfUFJPR19DQywgbm90IGJlZm9yZS4KCjIwMDMtMDEtMDkgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBzeXNjYWxsLmMgKGZvcmNlX3Jlc3VsdCkgW1MzOTAgfHwgUzM5MFhdOiBGaXggdHlwby4KCgkqIGRlYmlhbi9jb250cm9sOiBVcGRhdGUgTWFpbnRhaW5lcjogZmllbGQuCgoyMDAzLTAxLTA4ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogTkVXUzogVXBkYXRlIGZvciA0LjQuOTAgdGVzdCByZWxlYXNlLgoKCVN1cHBvcnQgZm9yIG5ldyBMaW51eCAyLjUgdGhyZWFkIGZlYXR1cmVzLgoJKiBkZWZzLmggW0xJTlVYXTogRGVmaW5lIF9fTlJfZXhpdF9ncm91cCBpZiBub3QgZGVmaW5lZC4KCShzdHJ1Y3QgdGNiKTogTmV3IG1lbWJlcnMgbmNsb25lX3RocmVhZHMsIG5jbG9uZV9kZXRhY2hlZCwKCWFuZCBuY2xvbmVfd2FpdGluZy4KCShUQ0JfQ0xPTkVfREVUQUNIRUQsIFRDQl9DTE9ORV9USFJFQUQsIFRDQl9HUk9VUF9FWElUSU5HKTogTmV3IG1hY3Jvcy4KCSh3YWl0aW5nX3BhcmVudCk6IE1hY3JvIHJlbW92ZWQuCgkocGlkMnRjYik6IERlY2xhcmUgaXQuCgkqIHByb2Nlc3MuYyAoaW50ZXJuYWxfY2xvbmUpIFtUQ0JfQ0xPTkVfVEhSRUFEXTogUmVwYXJlbnQgdGhlIG5ldwoJY2hpbGQgdG8gb3VyIHBhcmVudCBpZiB3ZSBhcmUgYSBDTE9ORV9USFJFQUQgY2hpbGQgb3Vyc2VsdmVzLgoJTWFpbnRhaW4gVENCX0NMT05FX1RIUkVBRCBhbmQgVENCX0NMT05FX0RFVEFDSEVEIGZsYWdzIGFuZCBjb3VudHMuCgkoaW50ZXJuYWxfd2FpdCkgW1RDQl9DTE9ORV9USFJFQURdOiBGYWN0b3Igb3V0IGRldGFjaGVkIGNoaWxkcmVuIHdoZW4KCWRldGVybWluaW5nIGlmIHdlIGhhdmUgYW55LiAgSWYgVENCX0NMT05FX1RIUkVBRCBpcyBzZXQsIGNoZWNrCglwYXJlbnQncyBjaGlsZHJlbiBpbnN0ZWFkIG9mIG91ciBvd24sIGFuZCBidW1wIG5jbG9uZV93YWl0aW5nIGNvdW50LgoJKGludGVybmFsX2V4aXQpIFtfX05SX2V4aXRfZ3JvdXBdOiBTZXQgdGhlIFRDQl9HUk9VUF9FWElUSU5HIGZsYWcgaWYKCXRoZSBzeXNjYWxsIHdhcyBleGl0X2dyb3VwLgoJKiBzeXNjYWxsLmMgKGludGVybmFsX3N5c2NhbGwpOiBVc2UgaW50ZXJuYWxfZXhpdCBmb3IgZXhpdF9ncm91cC4KCSogc3RyYWNlLmMgKHBpZDJ0Y2IpOiBObyBsb25nZXIgc3RhdGljLgoJKGFsbG9jdGNiKSBbVENCX0NMT05FX1RIUkVBRF06IEluaXRpYWxpemUgbmV3IGZpZWxkcy4KCShkcm9wdGNiKSBbVENCX0NMT05FX1RIUkVBRF06IE1haW50YWluIG5ldyBmaWVsZHMuCglJZiB3ZSBoYXZlIHRocmVhZCBjaGlsZHJlbiwgc2V0IFRDQl9FWElUSU5HIGFuZCBkb24ndCBjbGVhciB0aGUgVENCLgoJKHJlc3VtZSkgW1RDQl9DTE9ORV9USFJFQURdOiBEZWNyZW1lbnQgcGFyZW50J3MgbmNsb25lX3dhaXRpbmcuCgkoZGV0YWNoKSBbVENCX0NMT05FX1RIUkVBRF06IFdoZW4gY2FsbGluZyByZXN1bWUsIGNoZWNrIGFsbCB0aHJlYWQKCWNoaWxkcmVuIG9mIG91ciBwYXJlbnQgdGhhdCBtaWdodCBiZSB3YWl0aW5nIGZvciB1cyB0b28uCglbVENCX0dST1VQX0VYSVRJTkddIChoYW5kbGVfZ3JvdXBfZXhpdCk6IE5ldyBmdW5jdGlvbi4KCSh0cmFjZSkgW1RDQl9HUk9VUF9FWElUSU5HXTogVXNlIHRoYXQgaW4gcGxhY2Ugb2YgZGV0YWNoIG9yIGRyb3B0Y2IuCgoJUmV2YW1wIC1mIHN1cHBvcnQgZm9yIExpbnV4LgoJKiB1dGlsLmMgW0xJTlVYXSAoc2V0YnB0LCBjbGVhcmJwdCk6IE5ldyBpbXBsZW1lbnRhdGlvbnMgdGhhdCB0d2VhawoJdGhlIHN5c3RlbSBjYWxsIHRvIGJlIGNsb25lIHdpdGggQ0xPTkVfUFRSQUNFIHNldC4gIFZhcmlvdXMgbmV3IHN0YXRpYwoJaGVscGVyIGZ1bmN0aW9ucy4KCSogcHJvY2Vzcy5jIChpbnRlcm5hbF9jbG9uZSk6IERlZmluZSBhbHNvICNpZmRlZiBTWVNfY2xvbmUyLgoJSW5pdGlhbGl6ZSBUQ1BDSElMRC0+cGFyZW50IGZpZWxkLgoJW0NMT05FX1BUUkFDRV06IERvbid0IGRvIFBUUkFDRV9BVFRBQ0ggaGVyZSwgYmVjYXVzZSBpdCdzIHByZWF0dGFjaGVkLgoJQ2hlY2sgaW4gY2FzZSB0aGUgbmV3IGNoaWxkIGlzIGluIHRoZSB0Y2IgYWxyZWFkeS4KCShpbnRlcm5hbF9mb3JrKSBbTElOVVhdOiBKdXN0IGNhbGwgaW50ZXJuYWxfY2xvbmUuCgkqIHN0cmFjZS5jICh0cmFjZSkgW0xJTlVYXTogVW5kZXIgLWYvLUYsIGdyb2sgYW4gdW5rbm93biBwaWQKCXJlcG9ydGluZyB0byB3YWl0LCBwdXQgaXQgaW4gdGhlIFRDQiB3aXRoIFRDQl9BVFRBQ0hFRHxUQ0JfU1VTUEVOREVELgoKCSogbGludXgveDg2XzY0L3N5c2NhbGxlbnQxLmggKHN5c19vbGRsc3RhdCk6ICNkZWZpbmUgYXMgcHJpbnRhcmdzLgoKCSogZmlsZS5jIFtMSU5VWF06ICN1bmRlZiBzdF9bYW1jXXRpbWUgaW4gY2FzZSB0aGV5IGFyZSBtYWNyb3MuCgoJKiBNYWtlZmlsZS5hbSAoQU1fQ0ZMQUdTKTogTmV3IHZhcmlhYmxlLCBkZWZpbmUgdG8gJChXQVJORkxBR1MpLgoKCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBSZW1vdmUgZGViaWFuL3Bvc3RpbnN0IGFuZCBkZWJpYW4vcHJlcm0uCgoyMDAzLTAxLTA5ICBXaWNoZXJ0IEFra2VybWFuICA8d2ljaGVydEBkZWVwaGFja21vZGUub3JnPgoKCSogZGViaWFuL3Bvc3RpbnN0LCBkZWJpYW4vcHJlcm06IHJlbW92ZWQsIC91c3IvZG9jIHN5bWxpbmsgaXMgbm8KCWxvbmdlciB1c2VkCgkqIGRlYmlhbi9ydWxlczogbm8gbG9uZ2VyIGluc3RhbGwgcG9zdGluc3QgYW5kIHByZXJtCgkqIGRlYmlhbi9jb250cm9sOiBkbyBub3QgZW5kIHN1bW1hcnkgd2l0aCBmdWxsIHN0b3AgKGxpbnRpYW4pCgoyMDAyLTEyLTMwICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogTWFrZWZpbGUuYW0gKGJpbl9TQ1JJUFRTKTogTmV3IHZhcmlhYmxlLCBsaXN0IHN0cmFjZS1ncmFwaC4KCShFWFRSQV9ESVNUKTogQWRkIG1pc3NpbmcgZmlsZXMuCgoJKiBjb25maWd1cmUuYWM6IEZpeCBhc20vc2lnY29udGV4dC5oIGNoZWNrIHRvIGluY2x1ZGUgcHJlcmVxdWlzaXRlLgoKCSogc3lzY2FsbC5jIChxdWFsaWZ5X29uZSk6IE5ldyBmdW5jdGlvbi4KCShxdWFsX29wdGlvbnMpOiBSZXBsYWNlIGxvb2t1cCBmaWVsZCB3aXRoIHF1YWxpZnksIHVwZGF0ZSBpbml0aWFsaXplci4KCShxdWFsaWZ5KTogVXBkYXRlIGNhbGxlci4KCShxdWFsX3NpZ25hbCwgcXVhbF9mYXVsdCwgcXVhbF9kZXNjKTogUmV3cml0dGVuIGZyb20gbG9va3VwXyouCgkocXVhbF9zeXNjYWxsKTogUmV3cml0dGVuIGxvb2t1cF9zeXNjYWxsLCBtYXRjaCBuYW1lIG1vcmUgdGhhbiBvbmNlLgoJRml4ZXMgUkgjNzA1NzksIGJpdGVzIElBNjQgLWVmb28gd2hlbiBmb28gZXhpc3RzIG9uIElBMzIuCgoJKiB2ZXJzaW9uLmMgKHZlcnNpb24pOiBNYWtlIGNvbnN0LCBidW1wIHRvIDQuNC45MC4KCSogc3RyYWNlLmM6IFVwZGF0ZSBkZWNsLgoKCSogTWFrZWZpbGUuYW0gW0xJTlVYICYmIFg4Nl82NF06IFJlbW92ZSBjcnVmdC4KCSogbGludXgveDg2XzY0L2Vycm5vZW50MS5oOiBOZXcgZmlsZS4KCSogbGludXgveDg2XzY0L2lvY3RsZW50MS5oOiBOZXcgZmlsZS4KCSogbGludXgveDg2XzY0L3NpZ25hbGVudDEuaDogTmV3IGZpbGUuCgkqIGxpbnV4L3g4Nl82NC9zeXNjYWxsZW50MS5oOiBOZXcgZmlsZS4KCSogbGludXgveDg2XzY0L2kzODYtaGVhZGVycy5kaWZmOiBGaWxlIHJlbW92ZWQuCgkqIGxpbnV4L3g4Nl82NC9tYWtlaGVhZGVycy5zaDogRmlsZSByZW1vdmVkLgoJKiBsaW51eC94ODZfNjQvTWFrZWZpbGUuaW46IEZpbGUgcmVtb3ZlZC4KCgkqIGxpbnV4L3N5c2NhbGxlbnQuaCBbWDg2XzY0XTogRGlzYWJsZSBzYW5pdHkgY2hlY2tzLCBzdWJjYWxsIHN0dWZmIGlzCglhbHJlYWR5IGJyb2tlbiBmb3IgMzItYml0IHBlcnNvbmFsaXR5IG9uIHg4Ni02NC4KCjIwMDItMTItMjkgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBjb25maWd1cmUuYWMsIE1ha2VmaWxlLmFtOiBQdW50IHN1YmRpcnMsIGhhbmRsZSBldmVyeXRoaW5nIGhlcmUuCgkqIGxpbnV4L01ha2VmaWxlLmFtOiBGaWxlIHJlbW92ZWQuCgkqIGZyZWVic2QvTWFrZWZpbGUuYW06IEZpbGUgcmVtb3ZlZC4KCSogc3Vub3M0L01ha2VmaWxlLmluOiBGaWxlIHJlbW92ZWQuCgkqIHN2cjQvTWFrZWZpbGUuaW46IEZpbGUgcmVtb3ZlZC4KCgkqIGxpbnV4L2FscGhhL01ha2VmaWxlLmluOiBGaWxlIHJlbW92ZWQuCgkqIGxpbnV4L2hwcGEvTWFrZWZpbGUuaW46IEZpbGUgcmVtb3ZlZC4KCSogbGludXgvaWE2NC9NYWtlZmlsZS5pbjogRmlsZSByZW1vdmVkLgoJKiBsaW51eC9wb3dlcnBjL01ha2VmaWxlLmluOiBGaWxlIHJlbW92ZWQuCgkqIGxpbnV4L3MzOTAvTWFrZWZpbGUuaW46IEZpbGUgcmVtb3ZlZC4KCSogbGludXgvczM5MHgvTWFrZWZpbGUuaW46IEZpbGUgcmVtb3ZlZC4KCjIwMDItMTItMjYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBzeXNjYWxsZW50LnNoOiBHcm9rIHRocmVlIGZsYXZvcnMgb2YgI2RlZmluZSBsaW5lLCB1bmlxdWlmeS4KCSogbGludXgvaHBwYS9zeXNjYWxsZW50LnNoOiBGaWxlIHJlbW92ZWQuCgkqIGxpbnV4L3Bvd2VycGMvc3lzY2FsbGVudC5zaDogRmlsZSByZW1vdmVkLgoKCSogbGludXgvTWFrZWZpbGUuYW06IE5ldyBmaWxlLgoJKiBsaW51eC9NYWtlZmlsZS5pbjogRmlsZSByZW1vdmVkLgoJKiBmcmVlYnNkL01ha2VmaWxlLmFtOiBOZXcgZmlsZS4KCSogZnJlZWJzZC9pMzg2L01ha2VmaWxlLmFtOiBOZXcgZmlsZS4KCSogZnJlZWJzZC9pMzg2L01ha2VmaWxlLmluOiBGaWxlIHJlbW92ZWQuCgoyMDAyLTEyLTIyICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCVVwZGF0ZSB0byBBdXRvY29uZiAyLjU3LCBhbmQgQXV0b21ha2lmeSB3aXRoIHZlcnNpb24gMS43LgoJKiBNYWtlZmlsZS5hbTogTmV3IGZpbGUuCgkqIE1ha2VmaWxlLmluOiBGaWxlIHJlbW92ZWQuCgkqIGNvbmZpZ3VyZS5pbjogTW92ZWQgdG8gLi4uCgkqIGNvbmZpZ3VyZS5hYzogLi4uIGhlcmUuICBVcGRhdGUgZm9yIEF1dG9jb25mIDIuNXggYW5kIEF1dG9tYWtlLgoJKiBhY2xvY2FsLm00OiBNb3ZlZCB0byAuLi4KCSogYWNpbmNsdWRlLm00OiAuLi4gaGVyZS4gIFVwZGF0ZSBmb3IgQXV0b2NvbmYgMi41eC4KCSogYWNjb25maWcuaDogRmlsZSByZW1vdmVkLgoJKiBBVVRIT1JTOiBOZXcgZmlsZSwgbWFrZXMgYXV0b21ha2UgaGFwcHkuCgkqIGF1dG9nZW4uc2g6IEZpbGUgcmVtb3ZlZC4KCSogUkVBRE1FLUNWUzogVXBkYXRlIHRvIHJlY29tbWVuZCBhdXRvcmVjb25mIGluc3RlYWQuCgkqIGZpbGUuYzogSEFWRV9TVF8qIC0+IEhBVkVfU1RSVUNUX1NUQVRfU1RfKi4KCSogbmV0LmM6IEhBVkVfU0lONl9TQ09QRV9JRCAtPiBIQVZFX1NUUlVDVF9TT0NLQUREUl9JTjZfU0lONl9TQ09QRV9JRCwKCUhBVkVfTVNHX0NPTlRST0wgLT4gSEFWRV9TVFJVQ1RfTVNHSERSX01TR19DT05UUk9MLgoJKiBzdHJhY2UuYzogKl9ERUNMQVJFRCAtPiBIQVZFX0RFQ0xfKgoJKiBzdHJlYW0uYzogSEFWRV8qIC0+IEhBVkVfU1RSVUNUXyoKCgkqIGxpbnV4L01ha2VmaWxlLmluIChpb2N0bGRlZnMuaCBpb2N0bHMuaCk6IFVzZSAkKFNIRUxMKSBpbnN0ZWFkIG9mCglzaCwgYW5kIHVzZSAkKHNyY2RpcikgdG8gZmluZCB0aGUgc2NyaXB0LgoJKiBsaW51eC9wb3dlcnBjL01ha2VmaWxlLmluIChpb2N0bGVudC5yYXcpOiBGaW5kIGlvY3RsZW50LnNoIGluIC4uLy4KCShpb2N0bHNvcnQubyk6IFVzZSAuLi9pb2N0bHNvcnQuYywgbm90IC4uLy4uL2lvY3Rsc29ydC5jLgoJKiBsaW51eC94ODZfNjQvTWFrZWZpbGUuaW4gKGhlYWRlcnMpOiBSZW5hbWVkIHRvIGFsbC4KCSogbGludXgvYWxwaGEvTWFrZWZpbGUuaW46IEFkZCBlbXB0eSBpbnN0YWxsIHRhcmdldC4KCSogbGludXgveDg2XzY0L01ha2VmaWxlLmluOiBMaWtld2lzZS4KCSogbGludXgvcG93ZXJwYy9NYWtlZmlsZS5pbjogTGlrZXdpc2UuCgkqIGxpbnV4L01ha2VmaWxlLmluOiBMaWtld2lzZS4KCjIwMDItMTItMjYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBkZWZzLmggW0xJTlVYICYmIE1JUFNdIChNQVhfUVVBTFMpOiBTZXQgdG8gNTAwMCwgbm90IDQ5OTkuCglGcm9tIERhbmllbCBKYWNvYm93aXR6IDxkcm93QGZhbHNlLm9yZz4uCgoyMDAyLTEyLTIxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgoKCSogbGludXgvc3lzY2FsbGVudC5oOiBBZGQgc29tZSBuZXcgMi41IHN5c2NhbGwgbmFtZXMuCglOb3cgY2xvbmUgdGFrZXMgNSBhcmdzLgoJKiBwcm9jZXNzLmMgW0xJTlVYXSAoY2xvbmVfZmxhZ3MpOiBVcGRhdGUgd2l0aCAyLjUgZmxhZyBiaXRzLgoJW0xJTlVYXSAoc3lzX2Nsb25lKTogUHJpbnQgbmV3IGFyZ3MuCgkqIG1lbS5jIChwcmludF9sZHRfZW50cnkpOiBNYWtlIGdsb2JhbC4KCgkqIGxpbnV4L3N5c2NhbGwuaCBbSTM4NiB8fCBJQTY0XSAoU1lTX3NvY2tldF9zdWJjYWxsKTogQnVtcCB0byAzMDAgZm9yCglzYWZldHksIHNpbmNlIHVwIHRvIDI2MCBhcmUgYWxyZWFkeSB1c2VkIGluIDIuNSBrZXJuZWxzLgoJKiBsaW51eC9zeXNjYWxsZW50Lmg6IFVwZGF0ZSB0aGUgdGFibGUuCgkqIGxpbnV4L2lhNjQvc3lzY2FsbGVudC5oOiBMaWtld2lzZS4KCgkqIHN5c2NhbGwuYyAoZm9yY2VfcmVzdWx0KTogTmV3IGZ1bmN0aW9uLgoJKiBwcm9jZXNzLmMgKGludGVybmFsX3dhaXQpOiBIYW5kbGUgRUNISUxEIGV4aXQgZnJvbSB3YWl0IGNhbGwgd2l0aAoJV05PSEFORyBmbGFnIHNldDsgZm9yY2UgdGhlIHJldHVybiB2YWx1ZSB0byAwIGluIHRoZSBpbmZlcmlvciB3aGVuIGl0CgloYXMgbGl2ZSBjaGlsZHJlbiB3ZSBhcmUgdHJhY2luZy4KCSogTkVXUzogTWVudGlvbiB0aGUgYnVnIGZpeC4KCjIwMDItMTItMTcgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBsaW51eC9pYTY0L3N5c2NhbGxlbnQuaDogUmVtb3ZlIHBsYWNlaG9sZGVycyAyNzUtMjk4IHRvIGNhdGNoIHVwCgl3aXRoIGxpbnV4L3N5c2NhbGxlbnQuaCBhZGRpdGlvbnMuCgoJKiBzdHJhY2UuYyAodGNidGFiKTogTWFrZSB0aGlzIGEgcG9pbnRlciB0byBwb2ludGVycywgbm90IGFuIGFycmF5LgoJKHRjYnRhYnNpemUpOiBOZXcgdmFyaWFibGUuCgkobWFpbik6IEluaXRpYWxpemUgdGhlbSB1c2luZyBkeW5hbWljIGFsbG9jYXRpb24uCgkoYWxsb2N0Y2IsIG1haW4pOiBVc2UgdGNidGFic2l6ZSBpbiBwbGFjZSBvZiBNQVhfUFJPQ1M7IGluZGlyZWN0LgoJKHBpZDJ0Y2IsIGNsZWFudXApOiBMaWtld2lzZS4KCVtVU0VfUFJPQ0ZTXSAocG9sbHYpOiBNYWtlIHRoaXMgYSBwb2ludGVyLCBub3QgYW4gYXJyYXk7IG1ha2Ugc3RhdGljLgoJKHJlYnVpbGRfcG9sbHYpOiBEeW5hbWljYWxseSBhbGxvY2F0ZSB0aGUgdmVjdG9yLgoJKiBkZWZzLmggKHRjYnRhYik6IFVwZGF0ZSBkZWNscy4KCShNQVhfUFJPQ1MpOiBNYWNybyByZW1vdmVkLCBubyBtb3JlIHN0YXRpYyBsaW1pdCBvbiB0aGlzLgoJKiBwcm9jZXNzLmMgKGZvcmtfdGNiKTogTmV3IGZ1bmN0aW9uLgoJKGludGVybmFsX2Nsb25lLCBpbnRlcm5hbF9mb3JrKTogVXNlIGl0IGluc3RlYWQgb2YgY2hlY2tpbmcgbnByb2NzLgoKCSogc3RyYWNlLmMgKGRldGFjaCkgW0xJTlVYXTogVXNlIF9fV0FMTCAob3IgYSBzZWNvbmQgdHJ5IHdpdGggX19XQ0xPTkUpCglpbiB3YWl0IGFmdGVyIHNlbmRpbmcgU0lHU1RPUC4KCjIwMDItMTItMTYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CgoJKiBzaWduYWwuYyAoc3ByaW50c2lnbWFzayk6IEluY3JlYXNlIHN0YXRpYyBidWZmZXIgc2l6ZSB0byBhY2NvdW50IGZvcgoJd29yc3QgcG9zc2libGUgY2FzZS4gIFJlcG9ydGVkIGJ5IERhbmllbCBKYWNvYm93aXR6IDxkcm93QGZhbHNlLm9yZz4uCgoJKiBwcm9jZXNzLmMgW0xJTlVYXSAod2FpdDRfb3B0aW9ucyk6IEZpeCBfX1dDTE9ORSB2YWx1ZS4gIEFkZAoJX19XTk9USFJFQUQgYW5kIF9fV0FMTC4KCgkqIHN0cmFjZS5jICh0cmFjZSkgW0xJTlVYXTogT25seSBjaGVjayBlcnJubyBpZiB3YWl0NCBhY3R1YWxseSBmYWlscywKCXNvIHdlIGRvbid0IHJlcGVhdCBhIHdhaXQgYW5kIHRodXMgZHJvcCBhIHN0YXR1cy4gIEZpeGVzIFJIIzYyNTkxLgoKMjAwMi0xMi0xNSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KCgkqIHByb2Nlc3MuYyAoc2V0YXJnKSBbUE9XRVJQQ106IFN1cHBvcnQgaXQuCgoJKiB1dGlsLmMgW1BPV0VSUENdIChMT09QKTogRml4IHZhbHVlLCBub3cgMHg0ODAwMDAwMCAoMDogYiAwYikuCglPbGQgdmFsdWUgd2FzIGJvZ3VzLCBub3QgZXZlbiBhIHByb3BlciBpbnN0cnVjdGlvbi4KCUZyb20gR3V5IE0uIFN0cmVldGVyIDxzdHJlZXRlckByZWRoYXQuY29tPi4KCgkqIHN0cmFjZS5jIChtYWluKSBbISBVU0VfUFJPQ0ZTXTogQWx3YXlzIHJlc2V0IFNJR0NITEQgdG8gU0lHX0RGTC4KCgkqIGNvbmZpZ3VyZS5pbjogRG9uJ3QgY2hlY2sgZm9yIHB1dHBtc2cuCgkqIHN0cmVhbS5jIChzeXNfZ2V0cG1zZywgc3lzX3B1dHBtc2cpOiBNYWtlIHRoZXNlIGNvbmRpdGlvbmFsIG9uCgkjaWZkZWYgU1lTXyosIHJhdGhlciB0aGFuIG9uIEhBVkVfUFVUUE1TRy4KCgkqIGFjbG9jYWwubTQgKEFDX1NUQVQ2NCk6IEluY2x1ZGUgPGxpbnV4L3R5cGVzLmg+IGJlZm9yZSA8YXNtL3N0YXQuaD4KCWluIHRlc3QuICBUZXN0IG91ciBvd24gI2lmZGVmIExJTlVYIHJhdGhlciB0aGFuIHByZWRlZmluZWQgYGxpbnV4Jy4KCgkqIGxpbnV4L3Bvd2VycGMvc3lzY2FsbGVudC5oOiBVc2Ugc3lzX2xsc2VlayBmb3IgX2xsc2Vlay4KCSogbGludXgvc3BhcmMvc3lzY2FsbGVudC5oOiBMaWtld2lzZS4KCSogbGludXgvaHBwYS9zeXNjYWxsZW50Lmg6IExpa2V3aXNlLgoKCSogc3lzY2FsbC5jIChzeXNjYWxsX2VudGVyKSBbTElOVVggJiYgUE9XRVJQQ106IERlZmluZSBQVF9PUklHX1IzIGlmCglub3QgZGVmaW5lZCwgc2luY2UgPGFzbS9wdHJhY2UuaD4gZGVmaW5lcyBpdCBvbmx5ICNpZmRlZiBfX0tFUk5FTF9fLgoJKiBwcm9jZXNzLmM6IExpa2V3aXNlLgoKCSogZGVzYy5jIChzeXNfb3NmX3NlbGVjdCk6IEFkZCBtaXNzaW5nIHJldHVybiB0eXBlLgoKCSogc3lzY2FsbC5jICh0cmFjZV9zeXNjYWxsKTogVXNlIHN0cmVycm9yLCBub3Qgc3lzX2Vycmxpc3Qvc3lzX25lcnIuCgoJKiBsaW51eC9pYTY0L3N5c2NhbGxlbnQuaDogUmVtb3ZlIG1hY3JvcyBmb3Igc3lzX2RlbGV0ZV9tb2R1bGUsCglzeXNfbmFub3NsZWVwLCBib3RoIGFscmVhZHkgaW4gbGludXgvZHVtbXkuaC4KCgkqIHN5c2NhbGwuYyAoZ2V0X3Njbm8pOiBNb3ZlIHN0YXRpYyBgY3VycnBlcnMnIGluc2lkZSAjaWZkZWYgWDg2XzY0LgoJKHRyYWNlX3N5c2NhbGwpOiBGaXggcmV0dXJuIHdpdGhvdXQgdmFsdWUuCgoJKiBsaW51eC9zeXNjYWxsZW50Lmg6IFVwZGF0ZSB0YWJsZSB3aXRoIG5hbWVzIG9mIG5ldyBzeXNjYWxscwoJaW9fc2V0dXAsIGlvX2Rlc3Ryb3ksIGlvX2dldHZlbnRzLCBpb19zdWJtaXQsIGlvX2NhbmNlbC4KCSogbGludXgvaWE2NC9zeXNjYWxsZW50Lmg6IExpa2V3aXNlLgoJKiBsaW51eC9wb3dlcnBjL3N5c2NhbGxlbnQuaDogTGlrZXdpc2UuCgoJKiBzaWduYWwuYyBbTElOVVggJiYgSTM4Nl06IFByb3ZpZGUgU0FfUkVTVE9SRVIgY29uc3RhbnQgaWYgbm90CglkZWZpbmVkLiAgSWYgdGhlIGJpdCBpcyBzZXQsIHByaW50IHRoZSBzYV9yZXN0b3JlciBmaWVsZCBvZiBzaWdhY3Rpb24uCgoJKiBtZW0uYzogQWRkIHN5c197Z2V0LHNldH1fdGhyZWFkX2FyZWEuCgkqIGxpbnV4L3N5c2NhbGwuaDogRGVjbGFyZSB0aGVtLgoJKiBsaW51eC9zeXNjYWxsZW50Lmg6IFVwZGF0ZSB0aGUgdGFibGUgZm9yIHRoZXNlLgoJKiBsaW51eC9kdW1teS5oIChzeXNfbW9kaWZ5X2xkdCk6IERlZmluZSBvbmx5ICNpZm5kZWYgSTM4Ni4KCShzeXNfZ2V0X3RocmVhZF9hcmVhLCBzeXNfc2V0X3RocmVhZF9hcmVhKTogTmV3IG1hY3JvcyAjaWZuZGVmIEkzODYuCgoJKiBjb25maWd1cmUuaW46IENoZWNrIGZvciBsaW51eC94YXR0ci5oIGFuZCBsaW51eC9mdXRleC5oIGhlYWRlcnMuCgkqIGxpbnV4L3N5c2NhbGwuaDogQWRkIHN5c18qIGRlY2xzIGZvciBuZXcgc3lzY2FsbHMgZ2V0cG1zZywgcHV0cG1zZywKCXJlYWRhaGVhZCwgc2VuZGZpbGU2NCwgc2V0eGF0dHIsIGZzZXR4YXR0ciwgZ2V0eGF0dHIsIGZnZXR4YXR0ciwgaW50CglsaXN0eGF0dHIsIGZsaXN0eGF0dHIsIHJlbW92ZXhhdHRyLCBmcmVtb3ZleGF0dHIsIHNjaGVkX3NldGFmZmluaXR5LAoJc2NoZWRfZ2V0YWZmaW5pdHksIGZ1dGV4LgoJKiBsaW51eC9zeXNjYWxsZW50Lmg6IFVwZGF0ZSB0aGUgdGFibGUuCgkqIGlvLmM6IEFkZCBzeXNfc2VuZGZpbGU2NC4KCSogZmlsZS5jOiBBZGQgc3lzX3JlYWRhaGVhZCwgc3lzXyp4YXR0ci4KCSogcHJvY2Vzcy5jOiBBZGQgc3lzX2Z1dGV4LCBzeXNfKmFmZmluaXR5LgoKCSogbGludXgvc3lzY2FsbC5oIChTWVNfc29ja2V0X3N1YmNhbGwpOiBEZWZpbmUgdG8gMjU2IG9uIGFsbCBtYWNoaW5lcy4KCShTWVNfaXBjX3N1YmNhbGwpOiBBbHdheXMgU1lTX3NvY2tldF9zdWJjYWxsICsgU1lTX3NvY2tldF9uc3ViY2FsbHMuCgkqIGxpbnV4L3N5c2NhbGxlbnQuaDogVXBkYXRlIHRoZSB0YWJsZSBmb3Igc29ja2V0IGFuZCBpcGMgc3ViY2FsbHMuCgoyMDAyLTExLTA5ICBIZWlrbyBDYXJzdGVucyA8aGVpa28uY2Fyc3RlbnNAZGUuaWJtLmNvbT4KCglCdWdmaXggZm9yIHMzOTAvczM5MHg6CgkqIHN5c2NhbGwuYzogRml4ZWQgc2NubyBkZXJpdmF0aW9uIGZvciBzMzkwL3MzOTB4LgoKMjAwMi0xMS0wNiAgTWljaGFsIEx1ZHZpZyAgPG1sdWR2aWdAc3VzZS5jej4KCglNZXJnZWQgcGF0Y2ggZnJvbSBTdGV2ZW4gSi4gSGlsbCA8c2poaWxsQHJlYWxpdHlkaWx1dGVkLmNvbT4KCXRvIGFsbG93IHRoZSBjb21waWxhdGlvbiBvZiBhIG5hdGl2ZSBNSVBTIHN0cmFjZS4KCjIwMDItMTEtMDYgIE1pY2hhbCBMdWR2aWcgIDxtbHVkdmlnQHN1c2UuY3o+CgoJRnJvbSBNYXJ0eSBMZWlzbmVyIDxsZWlzbmVyQHJvY2hlc3Rlci5yci5jb20+LAoJcmV3cml0dGVuIGJ5IG1sdWR2aWc6CgkqIHN0cmFjZS5jIChub3RfZmFpbGluZ19vbmx5KTogTmV3LgoJKHVzYWdlKTogQWRkZWQgLXogc3dpdGNoIGRlc2NyaXB0aW9uLgoJKG1haW4pOiBBZGRlZCAteiBzd2l0Y2ggcGFyc2luZyB0byBub3RfZmFpbGluZ19vbmx5IHZhcmlhYmxlLgoJKiBzeXNjYWxsLmMgKHRyYWNlX3N5c2NhbGwpOiBBZGRlZCBub3RfZmFpbGluZ19vbmx5IGhhbmRsaW5nLgoKMjAwMi0xMC0wOCAgSGVpa28gQ2Fyc3RlbnMgPGhlaWtvLmNhcnN0ZW5zQGRlLmlibS5jb20+CgoJTWlzc2luZyBjb21wbGV0ZSBjaGFuZ2Vsb2cgZm9yIDIwMDItMTAtMDcgY29tbWl0OgoJKiBNYWtlZmlsZS5pbjogQWRkZWQgbGludXgvczM5MCwgbGludXgvczM5MHggdG8gQUxMX1NVQkRJUlMuCgkqIGFjY29uZmlnLmg6IE5ldyBkZWZpbmUgZm9yIHMzOTB4LgoJKiBjb25maWcuc3ViOiBBZGRlZCBtaXNzaW5nIGRlZmluZSBmb3IgczM5MCBhbmQgbmV3IG9uZSBmb3IgczM5MHguCgkqIGNvbmZpZ3VyZS5pbjogQWRkZWQgbmV3IGRlZmluZSBmb3IgczM5MHguCgkqIGZpbGUuYzogQWRkZWQgbWlzc2luZyAjdW5kZWYgZGlyZW50NjQgYW5kIG5ldyBkZWZpbmVzIGZvciBzMzkweC4KCSogbGludXgvczM5MDogTmV3IGRpcmVjdG9yeS4KCSogbGludXgvczM5MC9NYWtlZmlsZS5pbjogTmV3IGZpbGUuCgkqIGxpbnV4L3MzOTAvZXJybm9lbnQuaDogTmV3IGZpbGUuCgkqIGxpbnV4L3MzOTAvaW9jdGxlbnQuaDogTmV3IGZpbGUuCgkqIGxpbnV4L3MzOTAvc2lnbmFsZW50Lmg6IE5ldyBmaWxlLgoJKiBsaW51eC9zMzkwL3N5c2NhbGxlbnQuaDogTmV3IGZpbGUuCgkqIGxpbnV4L3MzOTB4OiBOZXcgZGlyZWN0b3kuCgkqIGxpbnV4L3MzOTB4L01ha2VmaWxlLmluOiBOZXcgZmlsZS4KCSogbGludXgvczM5MHgvZXJybm9lbnQuaDogTmV3IGZpbGUuCgkqIGxpbnV4L3MzOTB4L2lvY3RsZW50Lmg6IE5ldyBmaWxlLgoJKiBsaW51eC9zMzkweC9zaWduYWxlbnQuaDogTmV3IGZpbGUuCgkqIGxpbnV4L3MzOTB4L3N5c2NhbGxlbnQuaDogTmV3IGZpbGUuCgkqIGxpbnV4L3N5c2NhbGwuaDogQWRkZWQgc3lzX21pbmNvcmUoKSBwcm90b3R5cGUgYW5kIGFkZGVkIG5ldwoJczM5MHggZGVmaW5lcy4KCSogcHJvY2Vzcy5jOiBBZGRlZCBzMzkweCBkZWZpbmVzLgoJKGNoYW5nZV9zeXNjYWxsKTogQ2hhbmdlZCBoYW5kbGluZyBmb3IgczM5MC4KCShzZXRhcmcpOiBBZGRlZCBtaXNzaW5nIHMzOTAvczM5MHggY29kZSBpbiBzZXRhcmcoKS4KCSogc2lnbmFsLmM6IEFkZGVkIHMzOTB4IGRlZmluZS4KCShzeXNfc2lncmV0dXJuKTogQnVnZml4IGluIHMzOTAvczM5MHggY29kZSAod3JvbmcgbnVtYmVyIG9mCglhcmd1bWVudHMgdG8gc3ByaW50c2lnbWFzaygpKS4KCSogc3RyZWFtLmMgKGludGVybmFsX3N0cmVhbV9pb2N0bCk6IENoYW5nZWQgaW50IGNhc3QgdG8gbG9uZyBjYXN0LAoJc2luY2UgcHJpbnRzdHIoKSBleHBlY3RzIGEgbG9uZy4KCSogc3lzY2FsbC5jIChkZWNvZGVfc3ViY2FsbCk6IENoYW5nZWQgc2V2ZXJhbCB2YXJpYWJsZXMgdG8gYmUgbG9uZwoJaW5zdGVhZCBvZiBpbnQgdG8gbWF0Y2ggNjQgYml0IHJlcXVpcmVtZW50cy4gQWRkZWQgczM5MHggZGVmaW5lcy4KCShzeXNjYWxsX2VudGVyKTogQ2hhbmdlZCB1cGVlaygpIGNhbGwgdG8gbWF0Y2ggczM5MCBhbmQgczM5MHgKCXJlcXVpcmVtZW50cy4KCSogdXRpbC5jOiBBZGRlZCBzMzkweCBkZWZpbmVzLgoKMjAwMi0xMC0wNyAgTWljaGFsIEx1ZHZpZyAgPG1sdWR2aWdAc3VzZS5jej4KCglNZXJnZWQgczM5MHggcG9ydCBieSBIZWlrbyBDYXJzdGVucyA8SGVpa28uQ2Fyc3RlbnNAZGUuaWJtLmNvbT4KCWFuZCBidWdmaXhlcyB0byBzMzkwIGJ5IEQuSi4gQmFycm93LgoKMjAwMi0wOS0yMyAgTWljaGFsIEx1ZHZpZyAgPG1sdWR2aWdAc3VzZS5jej4KCglNZXJnZWQgeDg2LTY0IHBvcnQgYnkgQW5kaSBLbGVlbiA8YWtAc3VzZS5kZT4KCWFuZCBNaWNoYWwgTHVkdmlnIDxtbHVkdmlnQHN1c2UuY3o+CgkqIE1ha2VmaWxlLmluOiBOZXcgdGFyZ2V0ICdoZWFkZXJzJy4gRmFpbHVyZSBpZ25vcmVkLgoJKiBhY2NvbmZpZy5oOiBOZXcgZGVmaW5lcyBmb3IgeDg2LTY0LgoJKiBjb25maWd1cmUuaW46IERpdHRvLgoJKiBkZWZzLmg6IERpdHRvLgoJKiBmaWxlLmM6IERpdHRvLgoJKiBzaWduYWwuYzogRGl0dG8uCgkqIHByb2Nlc3MuYzogQWRkZWQgc3VwcG9ydCBmb3IgeDg2LTY0LgoJKiB1dGlsLmM6IERpdHRvLgoJKiBzeXNjYWxsLmM6IERpdHRvICsgYWRkZWQgYXV0b21hdGljIHBlcnNvbmFsaXR5IHN3aXRjaGluZy4KCSogbGludXgvc3lzY2FsbC5oOiBEaXR0by4KCSogbGludXgveDg2XzY0OiBOZXcgZGlyZWN0b3J5LgoJKiBsaW51eC94ODZfNjQvTWFrZWZpbGUuaW46IE5ldyBmaWxlLgoJKiBsaW51eC94ODZfNjQvZ2VudGFiLnBsOiBEaXR0by4KCSogbGludXgveDg2XzY0L2kzODYtaGVhZGVycy5kaWZmOiBEaXR0by4KCSogbGludXgveDg2XzY0L21ha2VoZWFkZXJzLnNoOiBEaXR0by4KCSogbGludXgveDg2XzY0L3N5c2NhbGxlbnQuaDogRGl0dG8uCgkqIG1lbS5jIChwcmludF9tbWFwKTogQWx3YXlzIHByaW50IGFyZ1s0XSBhcyBpbnQuCgoyMDAyLTA5LTIzICBNaWNoYWwgTHVkdmlnICA8bWx1ZHZpZ0BzdXNlLmN6PgoKCSogY29uZmlndXJlLmluOiBGaXggcmVndWxhciBleHByZXNzaW9ucy4KCSogbGludXgvc3lzY2FsbC5oOiBBZGRlZCBtaXNzaW5nIGJyYWNlcyBpbiBwcm90b3R5cGUgb2YKCXN5c19nZXRkZW50czY0KCkuCgkqIGZpbGUuYzogVXNlICcjaWZkZWYgTElOVVgnIGluc3RlYWQgb2YgJyNpZmRlZiBsaW51eCcuCgkoc3RydWN0IGZpbGVmbGFncyk6IE1hZGUgZXh0ZXJuIHRvIGluaGliaXQgY29tcGlhdGlvbiB3YXJuaW5ncy4KCShzeXNfZ2V0ZGVudHM2NCk6IE1lcmdlZCBMSU5VWCBhbmQgU1ZSNCBwYXJ0LgoJKiBzeXNjYWxsLmMgKGdldF9zY25vKTogU3BsaXQgbXVsdGlsaW5lIHN0cmluZyBpbnRvIHR3byBkaXN0aW5jdAoJc3RyaW5ncy4KCjIwMDItMDUtMjQgIEpvaG4gSHVnaGVzIDxqb2huQGNhbHZhLmNvbT4KCgkqIHN0cmVhbS5oLCBuZXQuaDogQXZvaWQgcG9zc2libGUgaW5maW5pdGUgbG9vcCBjYXVzZWQgYnkKCXVuc2lnbmVkIGFyaXRobWV0aWMgaW4gcHJlY2VlZGluZyBjaGFuZ2UuCgoyMDAyLTA1LTIzICBKb2huIEh1Z2hlcyA8am9obkBjYWx2YS5jb20+CgoJKiBhY2NvbmZpZy5oOiBBZGQgSEFWRV9PUFRIRFIgYW5kIEhBVkVfVF9PUFRIRFIgZGVmaW5lcy4KCgkqIGFjbG9jYWwubTQ6IEFkZCB0ZXN0cyBmb3Igc3RydWN0IG9wdGhkciBpbiBzeXMvc29ja2V0LmggYW5kCglzdHJ1Y3QgdF9vcHRoZHIgaW4gc3lzL3RpdXNlci5oLCBkZWZpbmUgSEFWRV9PUFRIRFIgYW5kIEhBVkVfVF9PUFRIRFIKCWlmIGZvdW5kLgoKCSogY29uZmlndXJlLmluOiB1c2UgdGVzdHMgZm9yIHN0cnVjdCBvcHRoZHIgYW5kIHN0cnVjdCB0X29wdGhkci4KCgkqIGRlZnMuaDogYWRkIG5ldyBmdW5jdGlvbiBwcmludF9zb2NrX29wdG1nbXQuCgoJKiBpby5jOiBhZGQgaGFjayB0aGF0IGxldHMgaW9jdGwgZGVjb2RlIGZ1bmN0aW9ucyBzZXQgYXV4aWxsaWFyeQoJc3RyaW5nIHJldHVybi4KCgkqIHN0cmVhbS5jOiBiZXR0ZXIgZGVjb2RpbmcgZm9yIHRpbW9kIGlvY3Rscy4KCgkqIG5ldC5jOiBhZGQgZnVuY3Rpb24gcHJpbnRfc29ja19vcHRtZ210LCB1c2VkIGJ5IHRpbW9kIGlvY3RsCglkZWNvZGluZyBmdW5jdGlvbnMgaW4gc3RyZWFtLmMuCgoyMDAyLTA1LTIzICBKb2huIEh1Z2hlcyA8am9obkBjYWx2YS5jb20+CgoJKiBhY2NvbmZpZy5oOiBNYWtlIGF1dG9oZWFkZXIgaGFwcHkgYWJvdXQgTGludXgvU3VwZXJICgoyMDAyLTA1LTIzICBKb2huIEh1Z2hlcyA8am9obkBjYWx2YS5jb20+CgoJKiBzdHJhY2UuYzogR2V0IHJpZCBvZiB3YXJuaW5nIGlmIG5vdCB1c2luZyBQT0xMX0hBQ0sKCjIwMDItMDUtMjIgIEpvaG4gSHVnaGVzIDxqb2huQGNhbHZhLmNvbT4KCgkqIG5ldC5jOiBTaW1wbGlmeSB7Z2V0LHNldH1zb2Nrb3B0LCBkZWNvZGUgU09fTElOR0VSLCBjb3BlIHdpdGgKCW9wdGlvbnMgdGhhdCBhcmUgbm90IGp1c3QgaW50cywgY29wZSB3aXRoIHN5c3RlbXMgdGhhdCBkb24ndAoJI2RlZmluZSBTT0xfVENQIGFuZCBzbyBvbi4KCjIwMDItMDUtMjEgIEpvaG4gSHVnaGVzIDxqb2huQGNhbHZhLmNvbT4KCgkqIHN0cmFjZS5jOiBGaXggd2FybmluZyBpZiBQT0xMX0hBQ0sgaXMgdXNlZC4KCjIwMDItMDUtMTcgIEpvaG4gSHVnaGVzIDxqb2huQGNhbHZhLmNvbT4KCgkqIHN2cjQvaW9jdGxlbnQuc2g6IFNvbWUgZGVmaW5lcyBvbiBVVyBjb21lIHdpdGggdG9vIG1hbnkgc3BhY2VzLgoKMjAwMi0wNS0xNyAgSm9obiBIdWdoZXMgPGpvaG5AY2FsdmEuY29tPgoKCSogc3ZyNC9pb2N0bGVudC5zaDogQ29wZSB3aXRoICNkZWZpbmVzIHdyYXBwZWQgaW4gI2lmZGVmcy4KCjIwMDItMDUtMTcgIEpvaG4gSHVnaGVzIDxqb2huQGNhbHZhLmNvbT4KCgkqIHN0cmVhbS5jOiB0aWR5IHVwIG91dHB1dCBhIGxpdHRsZS4KCjIwMDItMDUtMTcgIEpvaG4gSHVnaGVzIDxqb2huQGNhbHZhLmNvbT4KCgkqIHByb2Nlc3MuYywgc3ZyNC9kdW1teS5oLCBzdnI0L3N5c2NhbGwuaDogZGVjb2RlIGFyZ3VtZW50cwoJdG8gcHJvY3ByaXYgc3lzY2FsbC4KCjIwMDItMDUtMDEgIFdpY2hlcnQgQWtrZXJtYW4gPHdpY2hlcnRAZGVlcGhhY2ttb2RlLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbiwgZGVmcy5oLCBwcm9jZXNzLmMsIHNvY2suYywgc3lzY2FsbC5jLCB1dGlsLmM6IG1lcmdlCgkgIHBhdGNoIGZyb20gR3JlZyBCYW5rcyA8Z2JhbmtzQHBvY2tldHBlbmd1aW5zLmNvbT4gZm9yIExpbnV4L1N1cGVySAoJICBzdXBwb3J0CgoyMDAyLTA0LTAxICBXaWNoZXJ0IEFra2VybWFuIDx3aWNoZXJ0QGRlZXBoYWNrbW9kZS5vcmc+CgoJKiBzdHJhY2UuYzogY2xvc2UgdGNwLT5vdXRmIGluIGRyb3B0Y2IoKQoKMjAwMi0wNC0wMSAgV2ljaGVydCBBa2tlcm1hbiA8d2ljaGVydEBkZWVwaGFja21vZGUub3JnPgoKCSogbmV0LmM6IGRlY29kZSBwYWNrZXQgb3B0aW9ucwoKMjAwMi0wMy0zMSAgV2ljaGVydCBBa2tlcm1hbiA8d2ljaGVydEBkZWVwaGFja21vZGUub3JnPgoKCSogbGludXgve2FscGhhLGhwcGEsaWE2NCxtaXBzLHBvd2VycGMsc3BhcmN9L3N5c2NhbGxlbnQuaDogcmVnZW5lcmF0ZWQKCjIwMDItMDMtMzEgIFdpY2hlcnQgQWtrZXJtYW4gPHdpY2hlcnRAZGVlcGhhY2ttb2RlLm9yZz4KCgkqIGRlYmlhbi8qOiBhZGRlZAoJKiBsaW51eC9zeXNjYWxsZW50Lmg6IGZpeCB0eXBvIGFuZCBhZGQgdGhlIHJlc2VydmVkIHN0cmVhbSBzeXNjYWxscwoJKiBkZWZzLmgsIGZpbGUuYywgaW8uYzogZml4IHNpZ25lZC91bnNpZ25lZCBpc3N1ZXMKCSogc3lzY2FsbC5jOiBjaGVjayBmb3IgbmVnYXRpdmUgdV9lcnJvcnMKCSogY3ZzYnVpbGQ6IHJlbmFtZWQgdG8gYXV0b2dlbi5zaAoKMjAwMS0xMi0xNyAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCgkqIG5ldC5jOiBhZGQgbmV3IFRDUCBzb2NrZXQgb3B0aW9ucwoKMjAwMS0xMC0yNiAgSm9obiBIdWdoZXMgPGpvaG5AY2FsdmEuY29tPgoKCSogc3ZyNC9pb2N0bGVudC5zaDogQ29wZSB3aXRoICNkZWZpbmUgbGluZXMgY29udGFpbmluZwoJY29tbWVudHMgdGhhdCB0ZXJtaW5hdGUgb24gc3Vic2VxdWVudCBsaW5lcy4gIFVzZWQgdG8KCWNvbW1lbnQgb3V0IHN1YnNlcXVlbnQgaW9jdGxzIQoKMjAwMS0xMC0yNSAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCgkqIGxpbnV4L2lvY3RsZW50Lmg6IHJlZ2VuZXJhdGVkIHVzaW5nIGN1cnJlbnQgc2NyaXB0cyBzbwoJICB0ZXJtIGlvY3RscyBhcmUgaW5jbHVkZWQKCjIwMDEtMTAtMTkgIEpvaG4gSHVnaGVzICA8am9obkBDYWx2YS5DT00+CgoJKiBzdHJhY2UuYyhwcm9jX29wZW4pOiBPbiBTVlI0IG9ubHkgdHJhY2UgdGhlIHN5c2NhbGxzLAoJc2lnbmFscyBhbmQgZmF1bHRzIHdlIGNhcmUgYWJvdXQuCgoyMDAxLTEwLTE4ICBKb2huIEh1Z2hlcyAgPGpvaG5AQ2FsdmEuQ09NPgoKCSogYWNjb25maWcuaDogQWRkIEhBU19TSUdJTkZPX1QuCgkqIGFjbG9jYWwubTQ6IGFkZCBjaGVjayBmb3Igc2lnaW5mb190IGluIHNpZ25hbC5oLgoJKiBjb25maWd1cmUuaW46IHVzZSBjaGVjayBmb3Igc2lnaW5mb190LgoJKiBkZWZzLmg6IGlmIEhBVkVfU0lHSU5GT19UIHRoZSBkZWNsYXJlIHByaW50c2lnaW5mby4gIE9uIFNWUjQKCSAgYWxsb3cgYWNjZXNzIHRvIHNpZ2luZm8gd2hlbiBzaWduYWwgcmVjaWV2ZWQuCgkqIHByb2Nlc3MuYzogUmVtb3ZlIFNWUjQgb25seSB2ZXJzaW9uIG9mIHByaW50c2lnaW5mby4KCSogc2lnbmFsLmM6IG1lcmdlIFNWUjQgYW5kIExJTlVYIHZlcnNpb25zIG9mIHByaW50c2lnaW5mby4KCSogc3RyYWNlLmM6IG9uIFNWUjQgcHJpbnQgc2lnaW5mbyB3aGVuIHNpZ25hbCByZWNpZXZlZC4KCjIwMDEtMTAtMTggIEpvaG4gSHVnaGVzICA8am9obkBDYWx2YS5DT00+CgoJKiBzeXN0ZW0uYyhzeXNfc3Npc3lzKTogaGFuZGxlIHJldHVybiB2YWx1ZXMgZm9yIHNzaXN5cwoKMjAwMS0xMC0xOCAgSm9obiBIdWdoZXMgIDxqb2huQENhbHZhLkNPTT4KCgkqIHNpZ25hbC5jOiBoYW5kbGUgc2lnd2FpdAoJKiBzdnI0L2R1bW15LmM6IE1vdmUgc2lnd2FpdCB0byBkb25lCgkqIHN2cjQvc3lzY2FsbC5oOiBoYW5kbGUgc2lnd2FpdAoKMjAwMS0xMC0xNiAgSm9obiBIdWdoZXMgIDxqb2huQENhbHZhLkNPTT4KCgkqIHN5c3RlbS5jKHN5c19zc2lzeXMpOiBkZWNvZGUgc29tZSBhcmdzIGZvciBzc2lzeXMuCgoyMDAxLTEwLTE2ICBKb2huIEh1Z2hlcyAgPGpvaG5AQ2FsdmEuQ09NPgoKCSogbWVtLmM6IE1TX1NZTkMgaXMgemVybywgc28gbXVzdCBiZSBmaXJzdCBpbiB4bGF0IGxpc3QuCgoJKiBzdnI0L2R1bW15Lmg6IG1lbWNudGwgaXMgbXVjaCBsaWtlIG1jdGwuCgoyMDAxLTEwLTE2ICBKb2huIEh1Z2hlcyAgPGpvaG5AQ2FsdmEuQ09NPgoKCSogdXRpbC5jICh1bW92ZXN0cik6IFVuaXhXYXJlIChzdnI0PykgcmV0dXJucyAwIHdoZW4gdHJ5aW5nCgl0byByZWFkIHVubWFwcGVkIHBhZ2UuICBNYWtlIGl0IHBvc3NpYmxlIHRvIHN0cmFjZSBrc2guCgoyMDAxLTEwLTAzICBEYXZpZCBNb3NiZXJnZXIgIDxkYXZpZG1AaHBsLmhwLmNvbT4KCgkqIHByb2Nlc3MuYyAoaW50ZXJuYWxfY2xvbmUpOiBBdm9pZCByYWNlIGNvbmRpdGlvbiBieSBjbGVhcmluZwoJYnJlYWtwb2ludCBhZnRlciBhdHRhY2hpbmcgdG8gY2hpbGQuCgoyMDAxLTEwLTAyICBEYXZpZCBNb3NiZXJnZXIgIDxkYXZpZG1AaHBsLmhwLmNvbT4KCgkqIGxpbnV4L2lhNjQvc3lzY2FsbGVudC5oOiBEZWZpbmUgaWEzMiBzeXNjYWxsIG51bWJlcnMgKG9yaWdpbmFsbHkKCWJ5IERvbiBEdWdnZXIsIHdpdGggbXkgcmVmaW5lbWVudHMpLgoKCSogbGludXgvaWE2NC9pb2N0bGVudC5oOiBSZWdlbmVyYXRlIGFuZCBtYW51YWxseSBtZXJnZSBjb25mbGljdGluZwoJaW9jdGxzIChUQ0dFVFMgJiBTTkRDVExfVE1SX1RJTUVCQVNFLCBldGMuKS4KCgkqIGxpbnV4L2lhNjQvTWFrZWZpbGUuaW4gKGlvY3RsZGVmcy5oIGlvY3Rscy5oKTogVXBkYXRlIGZvcgoJbmV3IGlvY3RsZW50LmggZ2VuZXJhdGlvbiBzY2hlbWUuCgoJKiBsaW51eC9zeXNjYWxsLmggKHN5c19jbG9uZTIpOiBEZWNsYXJlLgoJW0lBNjRdIERlZmluZSBpYTMyIHNvY2tldCwgaXBjLCBhbmQgZXh0cmEgc3lzY2FsbCBudW1iZXJzLgoKCSogbGludXgvaW9jdGxlbnQuc2ggKHJlZ2V4cCk6IEFsc28gaGFuZGxlIDxhc20vaW9jdGxzLmg+IHNvIHdlCglkb24ndCBtaXNzIHRoZSB0dHkgaW9jdGxzICh1bmZvcnR1bmF0ZWx5LCBzb21lIG9mIHRoZSBzb3VuZCB0aW1lcgoJaW9jdGxzIGFyZSBpbiBjb25mbGljdCB3aXRoIHRoZW0hKS4KCgkqIHV0aWwuYyAoc2V0YnB0KSBbSUE2NF06IEFkZCBpYTMyIHN1cHBvcnQgKGJ5IERvbiBEdWdnZXIpLgoJKGNscmJwdCkgW0lBNjRdOiBEaXR0by4KCgkqIHN5c2NhbGwuYyAoaW50ZXJuYWxfc3lzY2FsbCk6IEhhbmRsZSBTWVNfY2xvbmUyLCBTWVMzMl93YWl0NCwKCWFuZCBTWVMzMl9leGl0LgoJKGdldF9zY25vKTogR2V0IGlhMzIgc3lzY2FsbCBudW1iZXIgZnJvbSByMSAob3JpZyBlYXgpIGluc3RlYWQgb2YKCXI4IChlYXgpLiAgSGFuZGxlIFRDQl9XQUlURVhFQ1ZFLgoJKHN5c2NhbGxfZml4dXApOiBIYW5kbGUgaWE2NC4KCShzeXNjYWxsX2VudGVyKTogRml4IGFyZ3VtZW50IGZldGNoaW5nIGZvciBpYTY0LgoKCSogc3RyYWNlLmMgW0lBNjQgJiYgTElOVVhdOiBJbmNsdWRlIDxhc20vcHRyYWNlX29mZnNldHMuaD4uCgkodHJhY2UpIFtQVF9HRVRTSUdJTkZPXTogUHJpbnQgc2lnbmFsIGFkZHJlc3MgYW5kIHBjIGlmIHBvc3NpYmxlLgoKCSogcHJvY2Vzcy5jICh0Y3ApOiBOZXcgZnVuY3Rpb24uCgkoY2hhbmdlX3N5c2NhbGwpOiBBZGQgc3VwcG9ydCBmb3IgaWE2NCBsaW51eC4KCShzeXNfZXhlY3ZlKTogVHVybiBvbiBUQ0JfV0FJVEVYRUNWRSBmb3IgaWE2NCBsaW51eC4KCgkqIGRlc2MuYyAoZ2V0bGspOiBDYXN0IGxfbGVuIHRvICJsb25nIGxvbmciIHRvIGF2b2lkIHdhcm5pbmdzIHdoZW4KCXR5cGUgaXMgbmFycm93ZXIuCgkqIHJlc291cmNlLmMgKHNwcmludHJsaW02NCk6IERpdHRvLgoKCSogZGVmcy5oIChUQ0JfV0FJVEVYRUNWRSkgW0lBNjRdOiBEZWZpbmUuCglbSUE2NF06IERlY2xhcmUgImlhMzIiIHZhcmlhYmxlLgoKCSogYmptLmM6IERvIG5vdCBpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4uICBJdCdzIG5vdCBzYWZlIHRvIGluY2x1ZGUKCWtlcm5lbCBoZWFkZXJzLiAgRGVjbGFyZSB0aGUgbmVjZXNzYXJ5IGNvbnN0YW50cyBhbmQgc3RydWN0dXJlcwoJZGlyZWN0bHkgaW5zdGVhZC4KCjIwMDEtMTAtMDEgIERhdmlkIE1vc2JlcmdlciAgPGRhdmlkbUBocGwuaHAuY29tPgoKCSogc2lnbmFsLmMgKHBhcnNlX3NpZ3NldF90KTogTmV3IGZ1bmN0aW9uLgoJKHNpZ2lzaGFuZGxlZCk6IEZpeCBvZmYtYnktb25lIGJ1ZyBieSB1c2luZyBwYXJzZV9zaWdzZXRfdCgpIGFuZAoJYXZvaWRpbmcgcmVseWluZyBvbiBpbnRlcm5hbCBsYXlvdXQgb2Ygc2lnc2V0X3QgZGF0YXN0cnVjdHVyZS4KCjIwMDEtMDQtMjYgIERhdmlkIE1vc2JlcmdlciAgPGRhdmlkbUBocGwuaHAuY29tPgoKCSogbGludXgvaWE2NC9zeXNjYWxsZW50Lmg6IEFkZCBnZXR1bndpbmQoKS4KCjIwMDEtMDQtMTEgIERhdmlkIE1vc2JlcmdlciAgPGRhdmlkbUBocGwuaHAuY29tPgoKCSogc3lzY2FsbC5jIChzeXNjYWxsX2VudGVyKTogVXNlIFBUX1JCU19FTkQgaW5zdGVhZCBvZiBkZXByZWNhdGVkCglQVF9BUl9CU1AuICBQaWNrIHVwIGFyZ3VtZW50cyBzdGFydGluZyB3aXRoIG91dDAsIHdoaWNoIGlzIG5vdAoJYWx3YXlzIHRoZSBzYW1lIGFzIHIzMiAoZS5nLiwgY29uc2lkZXIgaW5saW5lZCBzeXNjYWxscykuCgoyMDAxLTA5LTI4ICAgSm9obiBIdWdoZXMgPGpvaG5AQ2FsdmEuQ09NPgoKICAqIHByb2Nlc3MuYzogRnJlZUJTRC1DVVJSRU5UIG5vIGxvbmdlciBoYXMgUFRfUkVBRF9VLCBhbmQgYW55d2F5IHdlCiAgICB3ZXJlIHNob3dpbmcgaXQgYXMgUFRfV1JJVEVfVSEgIEZpeCBmcm9tIE1heGltZSBIZW5yaW9uLgoKMjAwMS0wOS0xOCAgIEpvaG4gSHVnaGVzIDxqb2huQENhbHZhLkNPTT4KCiAgKiBuZXQuYzogZml4IGRpc3BsYXkgb2Ygc29ja2FkZHIgc3RydWN0dXJlcywgc29tZXRpbWVzIHRvbyBtYW55ICJ9IiwKICAgIHNvbWV0aW1lcyB0b28gZmV3LiAgRml4IHN1Z2dlc3RlZCBieSBSaWNoYXJkIEtldHRsZXdlbGwuCgoyMDAxLTA4LTE5ICAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBzaWduYWwuYzogZG8gbm90IGluY2x1ZGUgYXNtL3NpZ2NvbnRleHQuaCBvbiBJQTY0IHNpbmNlIGl0IGdldHMKICAgIHRoZSBzdHJ1Y3QgZnJvbSBiaXRzL3NpZ2NvbnRleHQuaCBhbHJlYWR5IHdoaWNoIHNpZ25hbC5oIGluY2x1ZGVzLgoKMjAwMS0wOC0wMyAgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogbGludXgvaW9jdGxlbnQuc2g6IGNoYW5nZSByZWdleHBzIHNvIHdlIGNhdGNoIHNvdW5kIGlvY3RscyBhcyB3ZWxsIGluCiAgICBMaW51eAogICogbGludXgvTWFrZWZpbGUuaW46IGZpeCBhIGZldyB0aGluZ3Mgc28gdGhlIGlvY3RsIGxpc3QgaXMgZ2VuZXJhdGVkCiAgICBwcm9wZXJseQogICogaW9jdGwuYzogcmVtZW1iZXIgdG8gc2hpZnQgaW9jdGwgbWFza3MgYXMgd2VsbAoKMjAwMS0wOC0wMyAgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogTGludXgvKiovc3lzY2FsbGVudC5oOiBzeW5jaHJvbml6ZSBzZWN0aW9uIGZvciBmY250bCBhbmQgdXNlIHN5c19mY250bAogICAgZm9yIHN5c19mY250bCBhcyB3ZWxsCgoyMDAxLTA4LTAzICAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBsaW51eC9ocHBhL3N5c2NhbGxlbnQuaDogdXBkYXRlZCBmcm9tIE1hdHRoZXcgV2lsY294CgoyMDAxLTA4LTAzICAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBwcm9jZXNzLmM6IHNlZW1zIExpbnV4L0lBNjQgY2hhbmdlZCByZWdpc3RlciBuYW1lcyBvbiB1cywgc3dpdGNoIHRvCiAgICB1c2luZyBuZXcgbmFtZXMuCgoyMDAxLTA4LTAzICAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBzdHJhY2UuYzogc2V0IENMT0VYRUMgIGZsYWcgZm9yIG91dHB1dGZpbGUKCjIwMDEtMDgtMDMgICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIGxpbnV4L3NwYXJjL3N5c2NhbGwuaCwgbGludXgvc3BhcmMvc3lzY2FsbGVudC5oOiBhZGQgc29tZSBMRlMgY2FsbHMKCjIwMDEtMDctMjMgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogY29uZmlndXJlLmluOiBTdXBwb3J0IGNyb3NzLWNvbXBpbGluZyBiZXR3ZWVuIGFyY2hpdGVjdHVyZXMKCjIwMDEtMDctMTMgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogY29uZmlndXJlLmluOiBhZGQgUzM5MCB0byBhcmNoaXRlY3R1cmUgbGlzdAoKMjAwMS0wNy0xMCAgSm9obiBIdWdoZXMgPGpvaG5AQ2FsdmEuQ09NPgoKICAqIFRPRE8sIGRlZnMuaCwgaW8uaCwgbmV0LmMsIHN0cmFjZS5jLCBzeXNjYWxsLmMsIHV0aWwuYzogTWVyZ2UgZml4ZXMKICAgIGZyb20gUmljaGFyZCBLZXR0bGV3ZWxsIDxya2V0dGxld2VsbEB6ZXVzLmNvbT4gd2hpY2ggYWRkIEkvTyBkdW1waW5nCiAgICBvZiBhcmdzIHRvIHJlYWR2L3dyaXRldi4gIEFsc28gZ2V0cyByaWQgb2YgcmVkdW5kYW50IHByaW50aW92ZWMKICAgIHJvdXRpbmUgZnJvbSBuZXQuYyAoZHVwbGljYXRlIG9mIHRwcmludF9pb3YgaW4gdXRpbC5jKS4KCjIwMDEtMDctMDIgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogY29uZmlnLntndWVzcyxzdWJ9OiB1cGRhdGVkCgoyMDAxLTA1LTE1ICBKb2huIEh1Z2hlcyA8am9obkBDYWx2YS5DT00+CgogICogc2lnbmFsLmM6IHBhc3MgYSBwb2ludGVyIHRvIHNpZ21hc2sgdG8gcHJpbnRzaWdtYXNrIGZyb20gcHJpbnRjb250ZXh0LAogICAgaXQgd2FzIGp1c3QgcGFzc2luZyB0aGUgc2lnbWFzayAodWNwLT51Y19zaWdtYXNrKS4KCjIwMDEtMDUtMTUgIEpvaG4gSHVnaGVzIDxqb2huQENhbHZhLkNPTT4KCiAgKiB1dGlsLmM6IERvbid0IHJ1biBvZmYgdGhlIGVuZCBvZiB2YWxpZCBtZW1vcnkgaW4gdW1vdmVzdHIgd2hlbgogICAgVVNFX1BST0NGUy4gIEltcG9ydGFudCBmb3IgRlJFRUJTRCBzeXN0ZW1zICh3aGljaCBzZWVtIHRvIGhhdmUgYW4KICAgIHVubWFwcGVkIHBhZ2UganVzdCBhZnRlciB0aGUgYXJncy9lbnYgYXJlYSkuCgoyMDAxLTA0LTE4ICBKb2huIEh1Z2hlcyA8am9obkBDYWx2YS5DT00+CgogICogY29uZmlndXJlLmluOiB0ZXN0IGZvciBzeXMvbnNjc3lzLmgsIHRoZSBub24tc3RvcCBjbHVzdGVycyBpbmNsdWRlcy4KICAqIHByb2Nlc3MuYzogaGFuZGxlIHJmb3JrezEsYWxsfSBhbmQgcmV4ZWN2ZSBjYWxscyBvbiBub24tc3RvcCBjbHVzdGVycy4KICAqIHN5c2NhbGwuYzogdHJlYXQgcmZvcmt7MSxhbGx9IGFuZCBmb3JrezEsYWxsfSBhcyBmb3JrIGxpa2UgY2FsbHMuCiAgICBUcmVhdCByZXhlY3ZlIGFzIGFuIGV4ZWMuCiAgKiBzeXN0ZW0uYzogZGVjb2RlIGFyZ3VtZW50cyB0byBzc2lzeXMgY2FsbCBvbiBuc2Mgc3lzdGVtcy4KICAqIHN2cjQvZHVtbXkuaCwgc3ZyNC9zeXNjYWxsLmg6IG5vdyB3ZSBoYW5kbGUgcmZvcmt7MSxhbGx9LCBzc2lzeXMgYW5kCiAgICByZXhlY3ZlIGNhbGxzLgoKMjAwMS0wNC0xMiAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBwcm9jZXNzLmM6IGZpeCBjYXN0IGZvciBwb3dlcnBjIGNvZGUKICAqIGxpbnV4L3Bvd2VycGMvc3lzY2FsbGVudC5oOiB1cGRhdGUgc3lzY2FsbCBsaXN0CiAgKiBSRUFETUU6IGZpeCBhZGRyZXNzIGZvciB0aGUgc3RyYWNlIG1haWxpbmdsaXN0CiAgKiBzaWduYWwuYzogc3dpdGNoIHRvIHVzaW5nIC9wcm9jLzxwaWQ+L3N0YXR1cyBvbiBMaW51eCBzbyB3ZSBjYW4gZ2V0CiAgICB0aGUgcmVhbHRpbWUgc2lnbmFscyBhcyB3ZWxsCgoyMDAxLTA0LTEwICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIE1lcmdlIHBhdGNoZXMgZnJvbSBNYWNpZWogVy4gUm96eWNraToKICAgICsgdXRpbC5jOiBhZGQgY29kZSB0byBwcmludCBQQyBmb3IgTUlQUwogICAgKyBsaW51eC9taXBzL3N5c2NhbGxlbnQuaDogdXBkYXRlZAogICAgKyBzeXN0ZW0uYzogZm9ybWF0aW5nIGZpeGVzIGZvciBzeXNfc3lzbWlwcwogICAgKyBjb25maWd1cmUuaW46IHRlc3QgZm9yIHlldCBtb3JlIGhlYWRlcnMKICAgICsgc3RyZWFtLmM6IHVzZSBjb25maWd1cmUtaGVhZGVydGVzdHMgaW5zdGVhZCBvZiByZWx5aW5nIG9uIE9TIGhpbnRzCgoyMDAxLTA0LTA3ICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIE5FV1M6IHN0YXJ0IDQuMy4xIGl0ZW1zCiAgKiB2ZXJzaW9uLmM6IHVwZGF0ZWQgdG8gc2F5IDQuMy4xICh3YXMgc3RpbGwgNC4yLCBvb3BzISkKCjIwMDEtMDQtMDcgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogY29uZmlndXJlLmluOiB0ZXN0IGZvciBhc20vc3lzbWlwcy5oIGFuZCBsaW51eC91dHNuYW1lLmgKICAqIGxpbnV4L3N5c2NhbGwuaDogZml4IGEgdHlwbyBmb3Igc3lzX3N5c21pcHMKICAqIHN5c3RlbS5jOiBpbmNsdWRlIGFzbS9zeXNtaXBzLmggYW5kIGxpbnV4L3V0c25hbWUuaCBpZiB0aGV5IGV4aXN0LAogICAgZml4IHR5cG8KCjIwMDEtMDMtMzEgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogbGludXgvbWlwcy9pb2N0bGVudC5oOiB1cGRhdGVkIHVzaW5nIG5ldyBMaW51eCBpb2N0bCBzZXR1cAoKMjAwMS0wMy0zMSAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBsaW51eC9pYTY0L2lvY3RsZW50Lmg6IHJlZ2VuZXJhdGVkCgoyMDAxLTAzLTMxICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIGxpbnV4L3thbHBoYSxpYTY0LHBvd2VycGN9L2lvY3RsZW50LnNoOiByZW1vdmVkLCBhbGwgYXJjaHMgdXNlIHRoZQogICAgZ2VuZXJhbCBMaW51eCBpb2N0bGVudC5zaAoKMjAwMS0wMy0zMSAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBsaW51eC9pb2N0bGVudC5zaDogYWRkIGRpciB2YXJpYWJsZSBmb3IgbG9jYXRpb24gb2Yga2VybmVsIGhlYWRlcnMKCjIwMDEtMDMtMjkgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogbGludXgvaWE2NC9pb2N0bGVudC5oOiB1cGRhdGVkIHVzaW5nIG5ldyBMaW51eCBpb2N0bCBzZXR1cAoKMjAwMS0wMy0yOSAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBsaW51eC9wb3dlcnBjL2lvY3RsZW50Lmg6IHVwZGF0ZWQgdXNpbmcgbmV3IExpbnV4IGlvY3RsIHNldHVwCgoyMDAxLTAzLTI5ICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIGxpbnV4L2hwcGEvaW9jdGxlbnQuaDogdXBkYXRlZCB1c2luZyBuZXcgTGludXggaW9jdGwgc2V0dXAKCjIwMDEtMDMtMjkgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogbGludXgvYWxwaGEvaW9jdGxlbnQuaDogdXBkYXRlZCB1c2luZyBuZXcgTGludXggaW9jdGwgc2V0dXAKCjIwMDEtMDMtMjggIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogY29uZmlndXJlLmluOiB1c2Ugc3BhcmMqIHNvIHdlIGNhbiBjb21waWxlIG9uIHNwYXJjNjQgYXMgd2VsbAogICogcHJvY2Vzcy5jLCBzeXNjYWxsLmM6IHdvcmsgYXJvdW5kIGRvdWJsZSBkZWZpbmUgb2YgZnBxLCBmcSBhbmQgZnB1CiAgICBzdHJ1Y3RzIG9uIExpbnV4L3NwYXJjLCBhbmQgdXNlIHJlZ3MgaW5zdGVhZCBvZiBwdF9yZWdzCiAgKiBkb24ndCB1c2UgYXNtL3NpZ2NvbnRleHQuaCBvbiBMaW51eC9zcGFyYwoKMjAwMS0wMy0yOCAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBsaW51eC9zcGFyYy9pb2N0bGVudC5oOiB1cGRhdGVkIHVzaW5nIG5ldyBMaW51eCBpb2N0bCBzZXR1cAoKMjAwMS0wMy0yOCAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBzdHJhY2UuYzogdXNlIF9fV0FMTCBhcyB3YWl0NCBmbGFnIGlmIGl0IGV4aXN0cyBzbyB3ZSBjYW4gcHJvcGVybHkKICAgIHRyYWNlIHRocmVhZGVkIHByb2dyYW1zCgoyMDAxLTAzLTI3ICBKb2huIEh1Z2hlcyA8am9obkBDYWx2YS5DT00+CgogICogYWNsb2NhbC5tNDogYWRkIGNoZWNrIGZvciBlbmRpYW5uZXNzIG9mIGxvbmcgbG9uZy4KICAqIGFjY29uZmlnLmg6IGFkZCAjZGVmaW5lIGZvciBMSVRUTEVfRU5ESUFOX0xPTkdfTE9ORy4KICAqIGNvbmZpZ3VyZS5pbjogY2hlY2sgZm9yIGVuZGlhbm5lc3Mgb2YgbG9uZyBsb25nLgogICogZGVmcy5oOiBjaGFuZ2UgTE9OR19MT05HIG1hY3JvIHRvIHdvcmsgd2l0aCBlaXRoZXIgZW5kaWFubmVzcyBvZgogICAgbG9uZyBsb25nLgoKMjAwMS0wMy0yNyAgSm9obiBIdWdoZXMgPGpvaG5AQ2FsdmEuQ09NPgoKICAqIG5ldC5jOiBNYWtlIGNvbXBpbGFibGUgYnkgU0NPIFVESyBjb21waWxlciAoZG9lc24ndCBsaWtlIGVtcHR5CiAgICBpbml0aWFsaXNhdGlvbiBsaXN0IGZvciBhcnJheSkuCgoyMDAxLTAzLTI3ICBKb2huIEh1Z2hlcyA8am9obkBDYWx2YS5DT00+CgogICogc3ZyNC9zeXNjYWxsZW50Lmg6IG50cF9hZGp0aW1lIGVudHJ5IHdhcyBkdXBsaWNhdGVkIG9uIFNvbGFyaXMKICAgIHN5c3RlbXMgLSBiYWQgbWVyZ2Ugb2YgSGFyYWxkIEJvZWhtZSdzIHBhdGNoIGJ5IG1lLgoKMjAwMS0wMy0yNyAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBsb3RzIG9mIGZpbGVzOiBhZGQgTGludXgvaHBwYSBzdXBwb3J0CgoyMDAxLTAzLTE5ICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIGxpbnV4L21pcHMvc3lzY2FsbGVudC5oOiB3ZSBjYW4ndCBoYXZlIC0xIG5hcmdzLCBjaGFuZ2UgdG8gMAogICogbGludXgvc3lzY2FsbGVudC5oOiBub3QgdGhhdCBzeXNjYWxscyAyMjAgYW5kIDIyMSBhcmUgdXNlZCBub3cKICAqIGNvbmZpZy5ndWVzczogdXBkYXRlZAoKMjAwMS0wMy0xNyAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBsaW51eC9pb2Nsc29ydC5jOiBuZXcgZmlsZQogICogbGludXgvaW9jdGxlbnQuc2g6IGNvbXBsZXRlIHJld3JpdGUgdG8gdXNlIGEgbW9yZSBzYW5lIGFwcHJvYWNoIHRvIGdldAogICAgdGhlIGlvY3RsIGxpc3QgdGhhdCBkb2Vzbid0IGludm9sdmUgYXR0ZW1wdGluZyB0byAjaW5jbHVkZSBhbGwga2VybmVsCiAgICBoZWFkZXJzCiAgKiBsaW51eC8uY3ZzaWdub3JlOiBhZGRlZCBpb2N0ZGVmcy5oIGFuZCBpb2N0bHMuaCB3aGljaCBhcmUgZ2VuZXJhdGVkCiAgICBieSB0aGUgbmV3IGlvY3RsZW50LnNoCiAgKiBpb2N0bC5jOiBvbmx5IGxvb2sgYXQgdGhlIG51bWJlciBhbmQgdHlwZSBiaXRzIGZvciBsaW51eCwgc2luY2UKICAgIGlvY3RsZW50LnNoIG5vIGxvbmdlciBzdXBwbGllcyB0aGUgb3RoZXJzCgoyMDAxLTAzLTA4ICBKb2huIEh1Z2hlcyA8am9obkBDYWx2YS5DT00+CgogICogZnJlZWJzZC9zeXNjYWxscy5wbDogT24gRnJlZUJTRCB3ZSBtdXN0IGNvcGUgd2l0aCBDT01QQVRpYmlsaXR5IHN5c2NhbGxzLAogICAgcHJldGVuZCB0aGV5IGhhdmUgbmFtZXMgZW5kaW5nIHdpdGggIj8iIHNvIHRoYXQgLWUgdHJhY2U9c3RhdCAoZm9yCiAgICBleGFtcGxlKSB3aWxsIHdvcmsuCiAgKiBmcmVlYnNkL2kzODYvc3lzY2FsbGVudC5oOiBhZGQgPyB0byBjb21wYXRhYmlsaXR5IHN5c2NhbGxzLgogICogZnJlZWJzZC9pMzg2L3N5c2NhbGwuaDogY29uc2lzdGVuY3kuCgoyMDAxLTAzLTA4ICBKb2huIEh1Z2hlcyA8am9obkBDYWx2YS5DT00+CgogICogYWNjb25maWcuaDogYWRkIG5ldyBTVF94eHggZGVmaW5lcy4KICAqIGFjbG9jYWwubTQ6IG1hY3JvcyB0byBjaGVjayBmb3IgbW9yZSBmaWVsZHMgaW4gc3RydWN0IHN0YXQuCiAgKiBjb25maWd1cmUuaW46IHVzZSBuZXcgbWFjcm9zIHRvIGNoZWNrIGZvciBmaWVsZHMgaW4gc3RydWN0IHN0YXQuCiAgKiBmaWxlLmM6IHVzZSBuZXcgZGVmaW5lcyB0byByZXBsYWNlICNpZmRlZiBGUkVFQlNEIGJ5ICNpZiBIQVZFX1NUX3h4eC4KCjIwMDEtMDMtMDggIEpvaG4gSHVnaGVzIDxqb2huQENhbHZhLkNPTT4KCiAgKiBkZWZzLmg6IHJlbmFtZSB3aW1weSBnZXQ2NCBhcyBwb3dlcmZ1bCBuZXcgTE9OR19MT05HCiAgKiBmaWxlLmM6IHVzZSBMT05HX0xPTkcKICAqIGlvLmM6IHVzZSBMT05HX0xPTkcKICAqIG1lbS5jIHVzZSBMT05HX0xPTkcKCjIwMDEtMDMtMDggIEpvaG4gSHVnaGVzIDxqb2huQENhbHZhLkNPTT4KCiAgKiBhY2NvbmZpZy5oOiBuZXcgI2RlZmluZXMgSEFWRV9MT05HX0xPTkdfT0ZGX1QgYW5kIEhBVkVfTE9OR19MT05HX1JMSU1fVC4KICAqIGFjbG9jYWwubTQ6IHJvdXRpbmVzIHRvIGNoZWNrIGZvciBsb25nIGxvbmcgb2ZmX3QgYW5kIHJsaW1fdC4KICAqIGNvbmZpZ3VyZS5pbjogY2hlY2sgZm9yIGxvbmcgbG9uZyBvZmZfdCBhbmQgcmxpbV90LgogICogZGVzYy5jOiBpZiBIQVZFX0xPTkdfTE9OR19PRkZfVCB0cmVhdCBmbG9jayBhcyBmbG9jazY0CiAgKiBmaWxlLmM6IGlmIEhBVkVfTE9OR19MT05HX09GRl9UIHRyZWF0IHN0YXQsbHN0YXQsZnN0YXQgYW5kIGxzZWVrIGFzIDY0CiAgICBiaXQgdmVyc2lvbnMuCiAgKiBpby5jOiBpZiBIQVZFX0xPTkdfTE9OR19PRkZfVCB1c2UgNjQgYml0IHZlcnNpb25zIG9mIHByZWFkIGFuZCBwd3JpdGUuCiAgKiBtZW0uYzogaWYgSEFWRV9MT05HX0xPTkdfT0ZGX1QgdXNlIDY0IGJpdCB2ZXJzaW9uIG9mIG1tYXAKICAqIHJlc291cmNlLmM6IGlmIEhBVkVfTE9OR19MT05HX09GRl9UIHVzZSA2NCBiaXQgdmVyc2lvbnMgb2YgZ2V0cmxpbWl0CiAgICBhbmQgc2V0cmxpbWl0LgogICogZnJlZWJzZC9zeXNjYWxscy5wcmludDogZG9uJ3QgZXhwbGljaXRseSB1c2UgNjQgYml0IHZlcnNpb25zIG9mIGNhbGxzLAogICAgbm93IGRvbmUgYXV0b21hdGljYWx5IGZvciB1cy4KICAqIGZyZWVic2QvaTM4Ni9zeXNjYWxsLmg6IGRpdHRvLgogICogZnJlZWJzZC9pMzg2L3N5c2NhbGxlbnQuaCBkaXR0by4KCjIwMDEtMDMtMDcgIEpvaG4gSHVnaGVzIDxqb2huQENhbHZhLkNPTT4KCiAgKiBkZXNjLmM6IE9uIEZyZWVCU0QgZmxvY2sgc3RydWN0dXJlIHVzZXMgNjQgYml0IG9mZnNldHMuCiAgKiBmaWxlLmM6IE9uIEZyZWVCU0QgdXNlIHN0YXQ2NCBhbmQgcGFscyBpbnN0ZWFkIG9mIHN0YXQuCiAgKiBmcmVlYnNkL3N5c2NhbGxzLnByaW50OiB1c2Ugc3RhdDY0LCBsc3RhdDY0IGFuZCBmc3RhdDY0LgogICogZnJlZWJzZC9pMzg2L3N5c2NhbGwuaDogZGl0dG8uCiAgKiBmcmVlYnNkL2kzODYvc3lzY2FsbGVudC5oOiBkaXR0by4KCjIwMDEtMDMtMDcgIEpvaG4gSHVnaGVzIDxqb2huQENhbHZhLkNPTT4KCiAgKiBmaWxlLmM6IG1lcmdlIG1pc3NpbmcgcGFydCBvZiBIYXJhbGQgQvZobWUncyBzb2xhcmlzIHBhdGNoZXMsCiAgICB3YXMgb25seSBkZWNsYXJpbmcgc3lzX3tzdGF0NjQsbHN0YXQ2NCxmc3RhdDY0fSBvbiBsaW51eCEKCjIwMDEtMDMtMDcgIEpvaG4gSHVnaGVzIDxqb2huQENhbHZhLkNPTT4KCiAgKiBzdnI0L2R1bW15Lmg6IGZpeCBtdWx0aXBsZSBkZWZpbmUgd2FybmluZyBvbiBub24gTEZTNjQgc3lzdGVtcy4KICAqIHN2cjQvc3lzY2FsbGVudC5oOiBwcmVhZC9wd3JpdGUgYXJlIFRGIGNhbGxzLgoKMjAwMS0wMy0wNyAgSm9obiBIdWdoZXMgPGpvaG5AQ2FsdmEuQ09NPgoKICAqIGRlZnMuaDogYWRkIEFMSUdONjQgbWFjcm8gdG8gY29wZSB3aXRoIEZyZWVCU0QncyBzdHJhbmdlIGluc2lzdGVuY2UKICAgIG9uIGFsaWdubWVudCBmb3Igb2ZmX3QgKDY0IGJpdCkgYXJndW1lbnRzLiAgQWxzbyBzaW1wbGlmeSBnZXQ2NCBzbwogICAgd2UgZG9uJ3QgbmVlZCB0byBrbm93IGVuZGlhbm5lc3Mgb2YgbG9uZyBsb25nLgogICogZmlsZS5jOiBGcmVlQlNEIG5vdyB1c2VzIDY0IGJpdCB2ZXJzaW9ucyBvZiBsc2VlaywgdHJ1bmNhdGUsCiAgICBmdHJ1bmNhdGUsIGFsbG93cyByZWR1Y3Rpb24gaW4gbnVtdmJlciBvZiBob3JyaWQgI2lmJ3MKICAqIGlvLmM6IEZyZWVCU0Qgbm93IHVzZXMgNjQgYml0IHZlcnNpb25zIG9mIHByZWFkLCBwd3JpdGUuCiAgKiBtZW0uYzogRnJlZUJTRCBub3cgdXNlcyA2NCBiaXQgdmVyc2lvbiBvZiBtbWFwLgogICogZnJlZWJzZC9zeXNjYWxscy5wcmludDogdXNlIDY0IGJpdCB2ZXJzaW9ucyBvZiB2YXJpb3VzIHN5c2NhbGxzLgogICogZnJlZWJzZC9pMzg2L3N5c2NhbGwuaDogdXNlIDY0IGJpdCB2ZXJzaW9ucyBvZiB2YXJpb3VzIHN5c2NhbGxzLgogICogZnJlZWJzZC9pMzg2L3N5c2NhbGxlbnQuaDogdXNlIDY0IGJpdCB2ZXJzaW9ucyBvZiB2YXJpb3VzIHN5c2NhbGxzLgoKMjAwMS0wMy0wNiAgSm9obiBIdWdoZXMgPGpvaG5AQ2FsdmEuQ09NPgoKICAqIGZpbGUuYzogSW1wbGVtZW50IHRydW5jYXRlNjQgYW5kIGZ0cnVuY2F0ZTY0CiAgKiBzdnI0L2R1bW15Lmg6IGFkZCBkdW1taWVzIGZvciB0cnVuY2F0ZTY0IGFuZCBmdHJ1bmNhdGU2NCBmb3Igbm9uCiAgICBMRlM2NCBzeXN0ZW1zLgogICogc3ZyNC9zeXNjYWxsLmg6IGFkZCBkZWNsYXJhdGlvbnMgZm9yIHRydW5jYXRlNjQgYW5kIGZ0cnVuY2F0ZTY0LgoKMjAwMS0wMy0wNiAgSm9obiBIdWdoZXMgPGpvaG5AQ2FsdmEuQ09NPgoKICAqIGZyZWVic2Qvc3lzY2FsbHMucGw6IGZpeCBmb3IgRnJlZUJTRCA0LjEgKG5ldyBvcHRpb25hbCBmaWVsZCBpbgogICAgc3lzY2FsbCBtYXN0ZXIgZmlsZSkuCgoyMDAxLTAzLTA2ICBKb2huIEh1Z2hlcyA8am9obkBDYWx2YS5DT00+CgogICogc3lzY2FsbC5jOiBmaXggZm9yIEZyZWVCU0QgNC4xIChTWVNfc2VtY29uZmlnIGhhcyBkaXNhcHBlYXJlZCkuICBBbHNvCiAgICB6YXAgaW5jb3JyZWN0IHN5c2NhbGwgc3ViYXJnIHJhbmdlIGNoZWNrLgoKMjAwMS0wMy0wNiAgSm9obiBIdWdoZXMgPGpvaG5AQ2FsdmEuQ09NPgoKICAqIGNvbmZpZ3VyZS5pbiwgZGVmcy5oLCBkZXNjLmMsIGZpbGUuYywgaW8uYywgbWVtLmMsIG5ldC5jLCByZXNvdXJjZS5jLAogICAgc2lnbmFsLmMsIHN5c2NhbGwuYywgc3ZyNC9kdW1teS5oLCBzdnI0L3N5c2NhbGwuaCwgc3ZyNC9zeXNjYWxsZW50Lmg6CiAgICBtZXJnZSBIYXJhbGQgQvZobWUncyBzb2xhcmlzIHBhdGNoZXMgKF9MRlM2NF9MQVJHRUZJTEUgYW5kIGtlcm5lbCBhaW8KICAgIG1vc3RseSkuCgoyMDAxLTAzLTA2ICBKb2huIEh1Z2hlcyA8am9obkBDYWx2YS5DT00+CgogICogZHVtbXkuaDogYWRkIHVuaW1wbGVtZW50ZWQgVVcgc3ljYWxscwogICogc3lzY2FsbC5oOiB3ZSBjYW4gZG8gc2V0dGltZW9mZGF5IGZvciBVVywgd2hvcGVlIQogICogc3lzY2FsbGVudC5oOiBmaXggdW5pbXBsZW1lbnRlZCBVVyBzeXNjYWxscwoKMjAwMS0wMy0wNiAgSm9obiBIdWdoZXMgPGpvaG5AQ2FsdmEuQ09NPgoKICAqIGFjbG9jYWwubTQ6IGxvb2sgZm9yIHByX3N5c2NhbGwgaW4gcHJfbHdwIGlmIHdlIEhBVkVfTVBfUFJPQ0ZTCiAgKiBkZWZzLmg6IGFkZCBQUl9TWVNDQUxMIHRvIGFsbG93IHVzZSBvZiBwcl9sd3AucHJfc3lzY2FsbCBpZiBpdCBleGlzdHMuCiAgKiBzeXNjYWxsLmM6IHVzZSBQUl9TWVNDQUxMIGluc3RlYWQgb2YgcHJfc3lzY2FsbCwgZml4IHVwIFVuaXhXYXJlIGNvZGUKICAgIHNvIGl0IGRvZXNuJ3QgdHJ5IHRvIHVzZSBwcl9zeXNhcmcuCgoyMDAxLTAzLTA2ICBKb2huIEh1Z2hlcyA8am9obkBDYWx2YS5DT00+CgogICogYWNsb2NhbC5tNDogb24gc3lzdGVtcyBvdGhlciB0aGFuIGxpbnV4IGxvb2sgZm9yIHN0YXQ2NCBpbiBzeXMvc3RhdC5oCiAgKiBmaWxlLmM6IGhhbmRsZSB4c3RhdCB2ZXJzaW9uIF9TVEFUNjRfVkVSLCBha2Egc3RhdDY0LgoKMjAwMS0wMy0wNiAgSm9obiBIdWdoZXMgPGpvaG5AQ2FsdmEuQ09NPgoKICAqIG5ldC5jOiBtYWtlIHN1cmUgU09MXyBvcHRpb25zIGFyZSBkZWZpbmVkIGJlZm9yZSB1c2luZy4KICAqIHNpZ25hbC5jOiBkZWNsYXJlIHNpZ3NldCB2YXJpYWJsZSwgb25seSB1c2VkIG9uIGxpbnV4LCBpbnNpZGUgI2lmZGVmLgoKMjAwMS0wMi0yMSAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBuZXQuYzogZml4IGZvcm1hdCBmb3IgcHJpbnRpbmcgVW5peCBkb21haW4gc29ja2V0cwoKMjAwMS0wMi0xOSAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBsaW51eC9taXBzL3N5c2NhbGxlbnQuaDogdXNlIG5ldyBzeXNfc3lzbWlwcwogICogc3lzdGVtLmM6IGFkZCBzeXNfc3lzbWlwcyBkZWNvZGluZwoKMjAwMS0wMi0xNiAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBDUkVESVRTOiBhZGQgQXJrYWRpdXN6IE1pc2tpZXdpY3ogPG1pc2lla0BwbGQub3JnLnBsPiB3aG8KICAgIHN1Ym1pdHRlZCB0aGUgSVA2IHNjb3BlIElEIHVwZGF0ZXMKICAqIGFjY29uZmlnLmg6IGFkZCBIQVZFX1NJTjZfU0NPUEVfSUQgYW5kIEhBVkVfU0lONl9TQ09QRV9JRF9MSU5VWAogICogYWNsb2NhbC5tNDogYWRkIEFDX1NJTjZfU0NPUEVfSUQgdG8gY2hlY2sgaWYgc2luNl9zY29wZV9pZCBpcwogICAgYXZhaWxhYmxlCiAgKiBjb25maWd1cmUuaW46IGNoZWNrIGZvciBpZl9pbmRleHRvbmFtZSBmdW5jdGlvbiBhbmQgc2luNl9zY29wZV9pZAogICogbmV0LmM6IHRlYWNoIHByaW50c29jayBhYm91dCBJUDYgc2NvcGUgaWRzCgoyMDAxLTAyLTE2ICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIGNvbmZpZ3VyZS5pbjogdGVzdCBmb3IgbmV0aW5ldC90Y3AuaCBhbmQgbmV0aW5ldC91ZHAuaCBleGlzdGFuY2UKICAqIG5ldC5jOiBpbmNsdWRlIG5ldGluZXQvdGNwLmggYW5kIG5ldGluZXQvdWRwLmggaWYgdGhleSBleGlzdAogICogTWFrZWZpbGUuaW46IHVzZSBAbWFuZGlyQCBhbmQgQGJpbmRpckAKCjIwMDAtMTEtMjYgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogIG5ldC5jOiBmaXggZm9ybWF0aW5nIGVycm9yIGluIHN5c19zZXRzb2Nrb3B0CiAgKiAgbmV0LmM6IGFkZCBsaXN0IG9mIHNvY2tldGxheWVycyBhbmQgdXNlIHRoYXQgZm9yIFtnc11ldHNvY2tvcHQKCjIwMDAtMTAtMTIgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogdGltZS5jOiB1c2Ugc3lzL3RpbWV4Lmggc28gdGhpbmdzIGNvbXBpbGUgd2l0aCAyLjIga2VybmVscwogICogc3RyZWFtLmM6IHRlc3QgaWYgTVNHXyogY29uc3RhbnRzIGFyZSAjZGVmaW5lZAoKMjAwMC0wOS0wMyAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBwcm9jZXNzLmM6IHBlcmZvcm0gYnB0IHRyaWNrIGZvciBjbG9uZSBhcyB3ZWxsIHNvIHdlIGNhbiBnZXQgdGhlCiAgICBwaWQgb2YgdGhlIGNoaWxkIGJlZm9yZSBpdCBzdGFydHMgZG9pbmcgc29tZXRoaW5nCiAgKiBmaWxlLmM6IHJlbmFtZSBkaXJlbnQ2NCBzdHJ1Y3QgdG8ga2VybmVsX2RpcmVudDY0IHNvIHRoaW5ncyBjb21waWxlCiAgICBhZ2FpbiB3aXRoIG5ld2VyIGxpYmNzCiAgKiB0ZXN0L2Nsb25lLmM6IGltcHJvdmUgb3VyIHRlc3RjYXNlIGEgYml0CiAgKiBNZXJnZSBhbm90aGVyIHBhdGNoIGZyb20gR+RlbCBSb3VhbGxhbmQgd2l0aCBGcmVlQlNEIHVwZGF0ZXMKCjIwMDAtMDktMDEgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogbG90cyBvZiBmaWxlczogbWVyZ2UgcGF0Y2ggZnJvbSBHYetsIFJvdWFsbGFuZCB0byBhZGQKICAgIHN1cHBvcnQgZm9yIEZyZWVCU0QuCgoyMDAwLTA4LTA5ICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIGZpbGUuYzogdXBkYXRlIHRvIHJlZmxlY3QgdGhhdCBzdF9pbm8gc3VkZGVubHkgYmVjYW1lIGEgbG9uZyBsb25nCiAgICBpbiB0aGUgaW4gTGludXggMi40LjAtdGVzdDYKCjIwMDAtMDgtMDkgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogdGVzdC9jbG9uZS5jOiBtaW5vciBmaXh1cAogICogQW5vdGhlciBidW5jaCBvZiBwYXRjaGVzIGZyb20gSm9obiBIdWdoZXMgbWVyZ2VkOgogICogc2lnbmFsLmM6CiAgICArIFNWUjQgcHJpbnRjb250ZXh0KCk6IHNpZ3NldF90ICE9IHNpZ3NldF90KgogICAgKyBnZXRjb250ZXh0IHJldHVybnMgYSB2YWx1ZSwgc28gcHJpbnQgb24gZXhpdCBvZiBzeXNjYWxsCiAgICArIGFkZCBVQ19GUCB0byB1Y29udGV4dF9mbGFncyBmb3IgT1Mgd3JpdGVycyB0aGF0IGNhbid0IHNwZWxsCiAgICArIHN5c19zaWduYWwoKTogc3BlY2lhbCBjYXNlIFNJR197RVJSLERGTCxJR059CiAgICArIGRlY29kZV9zdWJjYWxsKCk6IG9ubHkgZG8gc3ViY2FsbCByYW5nZSBjaGVja2luZyB3aGVuIG5lZWRlZAogICogYnVuY2ggb2YgVW5peFdhcmUgdXBkYXRlcwogICogYWNsb2NhbC5tNCwgYWNjb25maWcuaCwgY29uZmlndXJlLmluOiBhZGQgdGVzdCBmb3IgbG9uZyBsb25nIHR5cGUKCjIwMDAtMDctMDQgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogbmV0LmM6IGFkZCBTT0xfUEFDS0VUIGFuZCBTT0xfUkFXIHNvY2tldCBvcHRpb25zLCB1cGRhdGUKICAgIFNPTF9JUCBhbmQgU09MX1RDUAoKMjAwMC0wNi0yMyAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBzdHJhY2UuYzogY2xvc2Ugb3V0ZiBiZWZvcmUgd2UgZXhlYyBhIGNoaWxkIHByb2Nlc3MKCjIwMDAtMDYtMDkgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgoKICAqIGNvbmZpZ3VyZS5pbjogRG9uJ3QgbGluayBhZ2FpbnN0IGxpYm5zbCBvbiBMaW51eCwgaXQncyB1bm5lY2Vzc2FyeS4KICAqIGRlZnMuaCAoc3RydWN0IHRjYik6IE1ha2UgYXV4c3RyIG1lbWJlciBjb25zdC4KICAqIGZpbGUuYyAoZnNtYWdpYyk6IEFuZCBtYW55IG1vcmUgbWFnaWMgbnVtYmVycy4KICAqIHV0aWwuYzogRG9uJ3QgaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+IGZvciBnbGliYyAyLjEgYW5kIHVwLgoKMjAwMC0wNC0yNiAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBkZWZzLmg6IGJhbGFuY2UgI2lmLyNlbmRpZiBhZ2FpbgogICogc3lzdGVtLmM6IGZpeCByZXR1cm4gc3RhdGVtZW50cyBpbiBzeXNfY2FwZ2V0KCkKICAqIE1lcmdlIHVwZGF0ZXMgZnJvbSBUb3BpIE1pZXR0aW5lbiA8VG9waS5NaWV0dGluZW5AbmljLmZpPjoKICAgICsgZmlsZS5jOiBhZGQgRl9bU0ddRVRTSUcgdG8gZmNudGwgZmxhZ3MKICAgICsgc3RyYWNlLmM6IGRvbid0IHNldHJlW2d1XWlkIGlmIG5vdCBuZWVkZWQKICAgICsgc3lzdGVtLmM6IGhhbmRsZSBzeXNfcmVib290IGZvciBMaW51eAogICAgKyB0ZXJtLmM6IGFkZCBiYXVkcmF0ZSBjb25zdGFudHMgdXAgdG8gQjQwMDAwMDAKICAgICsgbGludXgvKiovc3lzY2FsbGVudC5oOiBub3RlIHRoYXQgbXVubG9ja2FsbCBoYXMgbm8gYXJndW1lbnRzCgoyMDAwLTA0LTI1ICBEYXZpZCBNb3NiZXJnZXIgIDxkYXZpZG1AaHBsLmhwLmNvbT4KCiAgKiBDUkVESVRTOiBmaXggZW1haWwgYWRkcmVzcwogICogcHJvY2Vzcy5jOiBoYW5kbGUgUFJfW0dTXUVUX1VOQUxJR04gYW5kIFBSX1tHU11FVF9LRUVQQ0FQUwogICogc2lnbmFsLmM6IGhvbm91ciBvZmZzZXQgb2Ygc2lnY29uZmlnIGluIHNpZ2ZyYW1lIHN0cnVjdHVyZSBmb3IKICAgIExpbnV4L2lhNjQKICAqIGxpbnV4L2lhNjQvc3lzY2FsbGVudC5oOiBBZGQgcGVyZm1vbmN0bCwgcGl2b3Ryb290LCBtaW5jb3JlLCBhbmQKICAgIG1hZHZpc2Ugc3lzY2FsbHMuCiAgKiBzeXNjYWxsLmMgKHN5c2NhbGxfZW50ZXIpOiBXaXRoIEtldmluJ3MgbGF0ZXN0IHB0cmFjZSBwYXRjaGVzLAogICAgQVJfQlNQIHBvaW50cyB0byB0aGUgX2VuZF8gb2YgdGhlIGFjdGl2ZSByZWdpc3RlciBmcmFtZSwgc28gd2UgbmVlZAogICAgdG8gYWRqdXN0IGJzcCBieSBtb3ZpbmcgaXQgYmFjayBieSB0aGUgc2l6ZSBvZiB0aGUgYWN0aXZlIGZyYW1lCiAgICBiZWZvcmUgdXNpbmcgaXQuCgoyMDAwLTA0LTI0ICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIHByb2Nlc3MuYzogYWRkIHNwYXJjIHN1cHBvcnQgdG8gY2hhbmdlX3N5c2NhbGwKCjIwMDAtMDQtMjIgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogbGludXgvbWlwcy9zeXNjYWxsZW50Lmg6IGZpeCBzb21lIHR5cG9zCgoyMDAwLTA0LTE0ICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIGxpbnV4L21pcHMvc3lzY2FsbGVudC5oOiBhZGRlZCBuYW1lcyBmb3IgU1ZSNCwgU1lTViwgQlNENC4zIGFuZCBQT1NJWAogICAgc3lzY2FsbHMKCjIwMDAtMDQtMTMgIFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogZGVmcy5oOiBMaW51eC9NSVBTIHVzZXMgc3lzY2FsbHMgdXAgdG8gPjRrLCBzbyBzZXQgTUFYX1FVQUxTIHRvCiAgICA0OTk5CgoyMDAwLTA0LTA5ICBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIFJFQURNRS1saW51eDogdXBkYXRlZCB0byBub3RlIHRoYXQgc3RyYWNlIG1pZ2h0IG5vdCBjb21waWxlCiAgICB3aXRoIGRldmVsb3BtZW50IGtlcm5lbHMKICAqIGJqbS5jOiBzeXNfcXVlcnlfbW9kdWxlOiBjaGVjayBpZiBtYWxsb2Mgc3VjY2VlZHMKICAqIHN5c3RlbS5jOiBzeXNfY2FwW2dzXWV0KCk6IGNoZWNrIGlmIG1hbGxvYyBzdWNjZWVkcywgb25seSBtYWxsb2Mgb25jZQogICogbGludXgvc3lzY2FsbGVudC5oOiB1cGRhdGVkIGZvciAyLjMuOTlwcmUzCiAgKiBsaW51eC9hbHBoYS9zeXNjYWxsZW50Lmg6IHVwZGF0ZWQgZm9yIDIuMy45OXByZTMsIGFkZCBhbGwgb3NmIHN5c2NhbGxzCiAgICBldmVuIHRob3VnaCBMaW51eCBkb2Vzbid0IGltcGxlbWVudCB0aGVtCiAgKiBzeXNjYWxsLmM6IGFkZCBnbG9iYWwgdmFyaWFibGVzIGZvciBNSVBTIHJlZ2lzdGVycyBhcyB3ZWxsCiAgKiBzeXNjYWxsLmM6IG1vdmUgZ2xvYmFsIHZhcmlhYmxlcyB0byBiZWZvcmUgZ2V0X3Njbm8gc2luY2UgdGhhdCB1c2VzIHRoZW0KICAqIHV0aWwuYzogb29wcywgbWlzc3BlbGxlZCBkZWZpbmVkCiAgKiBwcm9jZXNzLmM6IGZpeCBwdHJhY2UgY2FsbHMgaW4gY2hhbmdlX3N5c2NhbGwKICAqIG1lbS5jOiBkZWNvZGUgc3lzX21hZHZpc2UKICAqIE1lcmdlIHBhdGNoIGZyb20gVG9waSBNaWV0dGluZW4gPFRvcGkuTWlldHRpbmVuQG5pYy5maT4KICAgICsgYWRkIHN1cHBvcnQgZm9yIHF1b3RhY3RsLCBmZGF0YXN5bmMsIG1sb2NrLCBtbG9ja2FsbCwgbXVubG9ja2FsbCAmIGFjY3QKICAgICsgc21hbGwgZml4IGZvciBSTElNSVRfKiBhbmQgUlVTQUdFX0JPVEgKICAgICsgZW5oYWNlIHN1cHBvcnQgZm9yIGNhcGdldCBhbmQgY2Fwc2V0CgoyMDAwLTAyLTE5IFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogdGVzdC92Zm9yay5jOiBuZXcgZmlsZSB0byB0ZXN0IHZmb3JrIHRyYWNlcwogICogdGVzdC8uY3ZzaWdub3JlOiBuZXcgZmlsZQogICogZGVmcy5oOiBVcCBtYXhpbXVtIG51bWJlciBvZiB0cmFjZWQgcHJvY2Vzc2VkIHRvIDY0CiAgKiBzdHJhY2UuYzogRGlzYWJsZSBzb21lIGRlYnVnZ2luZyBjb2RlIGZyb20gZGF2aWRtCiAgKiBpbXBsZW1lbnQgc2V0YXJnIGZvciBtb3JlIGFyY2hpdGVjdHVyZXMKICAqIGltcGxlbWVudCBjaGFuZ2Vfc3lzY2FsbAoKMTk5OS0xMi0yNyAgTW9ydGVuIFdlbGluZGVyICA8dGVycmFAZGlrdS5kaz4KCgkqIHN5c2NhbGwuYyAobG9va3VwX3NpZ25hbCwgbG9va3VwX2Rlc2MpOiBpc2RpZ2l0IHJlcXVpcmVzIGFuCiAJX3Vuc2lnbmVkXyBjaGFyIHBhcmFtZXRlci4KCjIwMDAtMDItMTQgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBTMzkwIHVwZGF0ZXMKCjIwMDAtMDItMDMgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBNZXJnZSBMaW51eC9pYTY0IHBhdGNoZXMKCjIwMDAtMDEtMDIgUGF2ZWwgTWFjaGVrCSAgICAgPHBhdmVsQHVjdy5jej4KCiAgKiBwcm9iZSBpZiBzeXMvcG9sbC5oIGV4aXN0cyBpbiBjb25maWd1cmUgKyBtaW5vciBjbGVhbnVwcwoKICAqIHN5c2NhbGwuYzogc3BsaXQgdHJhY2Vfc3lzY2FsbCBpbnRvIGZldyBwaWVjZXMgdG8gbWFrZSBjb2RlIHJlYWRhYmxlCgoyMDAwLTAxLTIxIFdpY2hlcnQgQWtrZXJtYW4gIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIFJlbGVhc2UgdmVyc2lvbiA0LjIgdG8gZ2V0IHRoZSBjdXJyZW50IHVwZGF0ZXMgb3V0IGFuZCBzbwogICAgd2UgY2FuIGNvbmNlbnRyYXRlIGluIGZpbmlzaGluZyB0aGUgY2xvbmUgc3VwcG9ydC4KCjIwMDAtMDEtMTEgV2ljaGVydCBBa2tlcm1hbiAgPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogQWRkIDE5MDAgdG8gdG1feWVhciBpbiBzcHJpbnR0aW1lCgoxOTk5LTEyLTI0ICBXaWNoZXJ0IEFra2VybWFuICA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAqIGZpbGUuYzogcHJvdGVjdCBwcmludHN0YXQ2NCB3aXRoIFNUQVQ2NCBpbnN0ZWFkIG9mIGxpbnV4IHNvIHdlIGNhbgogICBjb21waWxlIG9uIExpbnV4IGFyY2hpdGVjdHVyZXMgdGhhdCBkb24ndCBoYXZlIGl0CiAqIHV0aWwuYzogZml4IExPT1AgZm9yIEFSTQoKRnJpIERlYyAyNCAxODowNTowMCBFU1QgMTk5OQoKMTk5OS0xMi0yMyAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CgogKiBmaWxlLmM6IFVzZSB1Z2x5IGxpYmNfc3RhdCB0cmljayBhbHNvIGZvciBzdGF0NjQuCiAgIEltcGxlbWVudCBzeXNfc3RhdDY0LCBzeXNfZnN0YXQ2NCwgc3lzX2xzdGF0NjQsIGFuZCBwcmludHN0YXQ2NC4KICogcHJvY2Vzcy5jIChpbnRlcm5hbF9jbG9uZSk6IEZpeCBhIGZldyB0eXBvcyBhbmQgYWRkIGRlZmluaXRpb25zIHRvIG1ha2UKICAgaXQgYXQgbGVhc3QgY29tcGlsZS4KICogbGludXgvc3lzY2FsbC5oOiBEZWNsYXJlIHN5c19zdGF0NjQsIHN5c19sc3RhdDY0LCBhbmQgc3lzX2ZzdGF0NjQuCiAqIGxpbnV4L3N5c2NhbGxlbnQuaDogRGVmaW5lIHRhYmxlIGVudHJpZXMgZm9yIHN5c19zdGF0NjQsIHN5c19sc3RhdDY0LAogICBhbmQgc3lzX2ZzdGF0NjQuCiAqIGFjbG9jYWwubTQ6IERlZmluZSBBQ19TVEFUNjQuCiAqIGFjY29uZmlnLmg6IERlZmluZSBIQVZFX1NUQVQ2NC4KICogY29uZmlndXJlLmluOiBBZGQgQUNfU1RBVDY0LgoKVGh1IERlYyAyMyAxNTowMTozNyBDRVQgMTk5OSBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIE1lcmdlIHBhdGNoIGZyb20gZnRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vbGludXgzOTAvIHRvIGFkZAogICAgc3VwcG9ydCBmb3IgTGludXggb24gdGhlIElCTSBTLzM5MCBhcmNoaXRlY3R1cmUKICAqIHByb2Nlc3MuYzogYWRkIGludGVybmFsX2Nsb25lKCksIGN1cnJlbnRseSBvbmx5IHNob3dzIHRoZSBvcHRpb25zCiAgKiBzeXNjYWxsLmM6IHVzZSBpbnRlcm5hbF9jbG9uZSB0byBoYW5kbGUgU1lTX2Nsb25lCgpNb24gRGVjIDIwIDAwOjI3OjUwIENFVCAxOTk5IFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogUmV3cml0ZSBtbWFwLWhhbmRsaW5nIHRvIHN1cHBvcnQgbW1hcDIgb24gTGludXgKClR1ZSBEZWMgMTQgMTE6MzU6MTYgQ0VUIDE5OTkgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBOb3RlIHRoYXQgTGludXggY2FuIGhhbmRsZSBzeXNfc2Vtb3AoKSBhcyB3ZWxsCgpUdWUgTm92IDMwIDExOjA1OjI2IENFVCAxOTk5IFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogSW5jbHVkZSBsaW51eC9pbjYuaCBmb3IgZ2xpYmMyLjAgYW5kIG9sZGVyCgpNb24gTm92IDI5IDE2OjMzOjA0IENFVCAxOTk5IFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogTWVyZ2UgcGF0Y2hlcyBmcm9tIEpvaG4gSHVnaGVzIHRvIG1ha2UgY29uZmlndXJlIHN1cHBvcnQgVW5peFdhcmUKClNhdCBOb3YgMjcgMjE6Mzg6MTcgQ0VUIDE5OTkgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBFbmhhbmNlIHN5c19xdWVyeV9tb2R1bGUKCkZyaSBOb3YgMjYgMTA6NTE6NTUgQ0VUIDE5OTkgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBQYXRjaGVzIGZyb20gSm9obiBIdWdoZXM6CiAgICArIGNvc21lY3RpYyBmaXggaW4gc3lzX2dldHBtc2cKICAgICsgYWxsb3cgbmV0LmMgdG8gY29tcGlsZSBvbiBzeXN0ZW1zIHdpdGhvdXQgQUZfSU5FVDYKICAgICsgT25seSB1c2UgbG9uZ190b19zaWdzZXQgb24gTGludXggc3lzdGVtcwogICAgKyBVbml4V2FyZSB0cmVhdHMgc2lnbWFza190IGFuZCBzaWdtYXNrX3QqIGFzIHRoZSBzYW1lIHRoaW5nCiAgICArIEFkZCBwb2xsaGFjawogICAgKyBQYXJzZSBtb3VudCBhcmd1bWVudHMgZm9yIFVuaXhXYXJlCiAgICArIEFDTCBmaXhlcyBmb3IgVW5peFdhcmUKCkZyaSBOb3YgMjYgMDE6Mjg6MDkgQ0VUIDE5OTkgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBSZWxlYXNlIDQuMSB0byBnZXQgYWxsIHRoZSBjaGFuZ2VzIG1hZGUgb3V0IHRoZXJlCgpUaHUgTm92IDE4IDE4OjA0OjA0IENFVCAxOTk5IFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogTWVyZ2Ugc3RyYWNlZm9yayBmcm9tIEFsZXhleSBLdXpuZXRzb3YgPGt1em5ldEBtczIuaW5yLmFjLnJ1PgogICAgKyBTb2NrZXQgY2FsbHMgcGFyc2VkIGJldHRlcgoJKyBidW5jaCBvZiBhbHBoYSBPU0Ygc3lzY2FsbHMgYWRkZWQKCSsgRml4IGFscGhhIDMyLzY0IGJpdCBpc3N1ZXMKCk1vbiBOb3YgIDEgMjA6NTI6MDggQ0VUIDE5OTkgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBNb3ZlIExpbnV4IGtlcm5lbG1vZHVsZS1mdW5jdGlvbnMgZnJvbSBzeXN0ZW0uYyB0byBiam0uYyBhbmQKICAgIHJlbW92ZSBkdXBsaWNhdGUgZm9yIHN5c19jcmVhdGVfbW9kdWxlCiAgKiBMaW51eCBNSVBTIHVwZGF0ZXM6CiAgICArIFBsYXkgd2l0aCAjaWZkZWYncyBpbiBuZXQuYyB0byBnZXQgSVB2NiByaWdodAogICAgKyBVc2UgcHJpbnRhcmdzIGZvciB2bTg2LXN5c2NhbGwKClN1biBPY3QgMzEgMjI6MDM6MDAgQ0VUIDE5OTkgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBNZXJnZSBMaW51eCBtaXBzIHBhdGNoIGZyb20gRmxvcmlhbiBMb2hvZmYgPGZsb0ByZmM4MjIub3JnPgoKTW9uIE9jdCAxMSAwMDozNjoyNSBDRVNUIDE5OTkgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBNZXJnZSBwYXRjaCBmcm9tIEtlaXRoIE93ZW5zIDxrYW9zQG9jcy5jb20uYXU+IHRvIHN5c19xdWVyeV9tb2R1bGUKICAgIGFuZCBzeXNfZGVsZXRlX21vZHVsZSBjb3JyZWN0bHkKCldlZCBPY3QgIDYgMDI6MDA6MzMgQ0VTVCAxOTk5IFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogVXBkYXRlIGN2c2J1aWxkIHRvIGdpdmUgYSBiZXR0ZXIgZXJyb3IgaWYgYXV0b2NvbmYgaXNuJ3QgaW5zdGFsbGVkCiAgKiBBZGQgdGVzdCBmb3IgbGludXgvcHRyYWNlLmggdG8gY29uZmlndXJlCiAgKiBTaW5jZSB3ZSBkZWZpbmUgR05VX1NPVVJDRSBpbiB0aGUgTWFrZWZpbGUgd2UgZG9uJ3QgbmVlZCB0byBkZWZpbmUKICAgIFVTRV9HTlUgaW4gZmlsZS5jIGFueW1vcmUKCkZyaSBTZXAgMTAgMDQ6MzU6MTYgQ0VTVCAxOTk5IFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogI2RlZmluZSBVU0VfR05VIGJlZm9yZSBpbmNsdWRpbmcgZmlsZS5jIHNvIHdlIGdldCBzb21lIGV4dHJhIE9fKiBmbGFncwoKVHVlIEF1ZyAzMSAxNjoyNzoyMSBDRVNUIDE5OTkgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBBZGQgbWlzc2luZyB9IGluIElQdjYgb3V0cHV0CgpUdWUgQXVnIDMxIDAxOjIzOjA4IENFU1QgMTk5OSAgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBVcGRhdGUgY29weXJpZ2h0IGZvciBzdHJhY2UtZ3JhcGggdG8gQlNEIHRvIGJlIGNvbnNpc3RlbnQgd2l0aAogICAgdGhlIHJlc3Qgb2Ygc3RyYWNlCgpNb24gQXVnIDMwIDAwOjUzOjU3IENFU1QgMTk5OSBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIE1lcmdlIHBhdGNoIGZyb20gRGFuaWVsIEphY29ib3dpdHo6IEtFUk5fSkFWQV8qIGFuZCBLRVJOX1NFQ1VSRUxWTCBhcmVuJ3QKICAgIGRlZmluZWQgZm9yIGFsbCBrZXJuZWx2ZXJzaW9ucwogICogQWRkIHN0cmFjZS1ncmFwaCwgd3JpdHRlbiBieSBSaWNoYXJkIEJyYWFrbWFuIDxkYXJrQHhzNGFsbC5ubD4KClRodSBBdWcgMTkgMTM6MTA6MTUgQ0VTVCAxOTk5IEpha3ViIEplbGluZWsgPGpqQHVsdHJhLmxpbnV4LmN6PgoKICAqIGxpbnV4L3NwYXJjL3N5c2NhbGwuaDogRGVjbGFyZSBjcmVhdGVfbW9kdWxlL2luaXRfbW9kdWxlLgogICogY29uZmlndXJlLmluOiBBbGxvdyBjb21waWxhdGlvbiBpbiBhIGRpZmZlcmVudCBkaXJlY3RvcnkKICAgIHRoYW4gdGhlIHNvdXJjZSBvbmUuCiAgKiBzaWduYWwuYzogVXNlIGFzbS9yZWcuaCBhbmQgc3RydWN0IHJlZ3MgaW5zdGVhZCBvZiBwdF9yZWdzCiAgICBzbyB0aGF0IHdlIGRvbid0IGRlcGVuZCBvbiBhc20vcHRyYWNlLmggd2hpY2ggY2xhc2hlcyB3aXRoCiAgICBnbGliYyBzeXMvcHRyYWNlLmguCiAgKiB1dGlsLmM6IExpa2V3aXNlLgogICogc3lzY2FsbC5jOiBMaWtld2lzZS4KCldlZCBBdWcgIDQgMTg6MDE6NTAgQ0VTVCAxOTk5IFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogU3lzY2FsbCA5NCBvbiBMaW51eCBhbHBoYSBpcyBzeXNfcG9sbAoKU3VuIEp1bCAyNSAxNDozODozMyBDRVNUIDE5OTkgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBNZXJnZSBpbiBVbml4V2FyZSBwYXRjaGVzIGZyb20gSm9obiBIdWdoZXMgPGpvaG5AQ2FsdmEuQ09NPgoKVGh1IEp1bCAxNSAyMzowMDozMiBDRVNUIDE5OTkgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBNZXJnZSBwYXRjaCBmcm9tIE1hY2llaiBXLiBSb3p5Y2tpIDxtYWNyb0BkczIucGcuZ2RhLnBsPjoKICAgICsgQ29ycmVjdGx5IGltcGxlbWVudCBmaXggc3lzX2NyZWF0ZW1vZHVsZSAoTGludXgpCiAgICArIEFkZCBsaW1pdGVkIGhhbmRsaWcgb2Ygc3lzX2luaXRtb2R1bGUgKExpbnV4KQoKVHVlIEp1bCAxMyAxNzowNzo1MCBDRVNUIDE5OTkgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBBZGQgY29uZmlndXJlLXRlc3QgZm9yIHN5cy9yZWcuaCBhbmQgdXNlIHRoYXQKICAqIFVzZSBzeXMvcmVnLmggaW5zdGVhZCBvZiBhc20vcHRyYWNlLmgKClNhdCBKdWwgMTAgMDE6NDY6MTAgQ0VTVCAxOTk5IFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogUmVtb3ZlIGhhY2sgaW4gc2lnbmFsLmMgZm9yIGFybSBhcmNoaXRlY3R1cmUKICAqIEFkZCBoYWNrIHNvIHdlIGNvbXBpbGUgY29ycmVjdGx5IG9uIHBvd2VycGMKCkZyaSBKdWwgIDkgMDI6Mjg6MTYgQ0VTVCAxOTk5IFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogQWRkIGEgY29ycmVjdGVkIHBhdGNoIGZyb20gRGFuaWVsIEphY29ib3dpdHoKClRodSBKdWwgIDggMTY6MDA6MDQgQ0VTVCAxOTk5IFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogTWVyZ2UgcGF0Y2ggZnJvbSBEYW5pZWwgSmFjb2Jvd2l0eiB0byBhbGxvdyB1cyB0byB1c2UgdGhlIGtlcm5lbCB0eXBlcwogICAgZm9yIHRoZSBzdGF0IHN0cnVjdHVyZQoKVGh1IEp1biAyNCAxNTo1NDoxOCBDRVNUIDE5OTkgV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KCiAgKiBGaXggdGVzdCBmb3Igc3lzL3JlZyBpbmNsdWRlCgpUdWUgSnVuIDIyIDE3OjI2OjMzIENFU1QgMTk5OSBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIEZpeGVkIHNvbWUgTGludXgvcG93ZXJwYyBzaWxseW5lc3MsIHRoYW5rcyB0byBEYW5pZWwgSmFjb2Jvd2l0egogICogRml4ZWQgc29tZSBTdW5PUyBjb21waWxlIHByb2JsZW1zIGVhcmxpZXIgdGhhdCBJIGZvcmdvdCB0byBpbmNsdWRlCiAgICBoZXJlCgpNb24gSnVuIDE0IDEyOjQ0OjI1IENFU1QgMTk5OQoKICAqIEF2b2lkIGxlYWtpbnQgZmQgaW50byBjaGlsZCB3aGVuIGZvcmtpbmcsIHBhdGNoIGZyb20KICAgIEpvaG4gSHVnaGVzIDxqb2huQENhbHZhLkNPTT4KCkZyaSBKdW4gMTEgMTQ6NTQ6NDcgQ0VTVCAxOTk5CgogICogQXBwbGllZCBJUklYNjQgcGF0Y2ggZnJvbSBUaG9tYXMgRS4gRGlja2V5IDxkaWNrZXlAY2xhcmsubmV0PgogICogQXBwbGllZCBTb2xhcmlzIGFuZCBtYW5wYWdlIHVwZGF0ZXMgZnJvbSBHdXkgSGFycmlzIDxndXlAbmV0YXBwLmNvbT4KCldlZCBKdW4gIDkgMTQ6NDg6NDkgQ0VTVCAxOTk5IFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogQnJvdWdodCBzeXNjYWxsIGxpc3QgZm9yIGFscGhhIHVwIHRvIGRhdGUKCldlZCBKdW4gIDIgMTg6MzA6MTIgQ0VTVCAxOTk5IEpha3ViIEplbGluZWsgPGpqQHVsdHJhLmxpbnV4LmN6PgoKICAqIHN5c3RlbS5jOiBzeXNfdW1vdW50MiBzeXNjYWxsIHN1cHBvcnQuCiAgKiBsaW51eC9zcGFyYy9lcnJub2VudC5oOiBVcGRhdGUgc3BhcmMtbGludXggZXJybm9zLgogICogbGludXgvc3BhcmMvc3lzY2FsbC5oOiBVcGRhdGUgdXNlZCBzcGFyYy1saW51eCBzeXNjYWxscy4KICAqIGxpbnV4L3NwYXJjL3N5c2NhbGxlbnQuaDogTWF0Y2ggMi4yLjkgc3lzdGVtIGNhbGxzLgogICogZmlsZS5jOiBzcGFyYy1saW51eCBhc20vc3RhdC5oIHVzZXMgZGV2X3QgZXRjLiB0eXBlcywKICAgIHNvIGl0IG5lZWRzIHN0cmFjZSdzIG93biBjb3B5IG9mIHRoZSBzdGF0IHN0cnVjdHVyZS4KICAqIHV0aWwuYzogTWFrZSBpdCBjb21waWxlIG9uIHNwYXJjLWxpbnV4LgogICogc3RyYWNlLmM6IEZpeCBzdHJhY2UgLWYgYW5kIC1mZiBvcGVyYXRpb24gb24gc3BhcmMtbGludXguCiAgKiBzaWduYWwuYzogcnRfc2lnYWN0aW9uIGhhcyBkaWZmZXJlbnQgYXJndW1lbnRzIG9uIHNwYXJjKi1saW51eAogICAgYW5kIGFscGhhLWxpbnV4LgogICogc3lzY2FsbC5jOiBSZWNvZ25pemUgc3BhcmM2NC1saW51eCBiaW5hcmllcy4KCkZyaSBNYXkgMjggMjE6MDk6MDAgUFNUIFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGN5Z251cy5jb20+CgogICogY29uZmlndXJlLmluOiBGaXggdHlwbyAoQ0ZMQUcgLT4gQ0ZMQUdTKS4KCiAgKiBzeXNjYWxsLmM6IERvbid0IGluY2x1ZGUgbGludXgvcHRyYWNlLmggZXhwbGljaXRseSBmb3IgZ2xpYmMuCgpUaHUgTWF5IDI3IDEzOjU5OjI3IENFU1QgMTk5OSBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIEFkZCBzb21lIHN5c2N0bCBzdXBwb3J0LCBwYXRjaCBmcm9tIFVscmljaCBEcmVwcGVyCgpXZWQgTWF5IDI2IDAxOjA0OjM0IENFU1QgMTk5OSBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIFVzZSBrZXJuZWwgZGlyZW50IHN0cnVjdHVyZSBmb3IgTGludXgKClN1biBNYXkgIDkgMDI6MTg6MzAgQ0VTVCAxOTk5IFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogTWVyZ2UgaW4gcGF0Y2hlcyBmcm9tIEFuZHJlYXMgU2Nod2FiIDxzY2h3YWJAaXNzYW4uY3MudW5pLWRvcnRtdW5kLmRlPgogICAgKyBzb21lIGxheW91dCBhbmQgb3RoZXIgbWlub3IgZml4ZXMKICAgICsgYWRkIHNvbWUgbTY4ay1zcGVjaWZpYyB0aGluZ3MgdG8gbGludXgvc3lzY2FsbGVudC5oLiBOb3RlIHRoYXQgbTY4awogICAgICBpcyBzaW1pbGFyIGVub3VnaCB0byBpMzg2IHRvIG5vdCBuZWVkIGl0J3Mgb3duIHN1YmRpcmVjdG9yeQogICAgKyBhZGQgc3VwcG9ydCBmb3Igc2VuZGZpbGUgYW5kIG1yZW1hcCBzeXNjYWxscyBmb3IgTGludXgKICAqIE1lcmdlIGluIHBhdGNoZXMgZnJvbSBTYXNjaGEgU2NodW1hbm4gPHNhc2NoYUBzY2h1bWFubi4ybnMuZGU+CiAgICArIGlvY3Rscy5oIHZzIHN5cy9pb2N0bC5oIG9uIEFscGhhIHBsYXRmb3JtCiAgICArIHBvaW50ZXIgd2FzIGNhc3RlZCB0byBhbiBpbnQgaW4gc3RyZWFtLmMKICAgICsgc3Ryc2lnbmFsKCkgbmVlZHMgLURfR05VX1NPVVJDRSBpbiBDRkxBR1MKICAgICsgc2V2ZXJhbCBvdGhlciBjYXN0cyBjaGFuZ2VkCiAgICArIGNvcnJlY3QgQVJNL1BPV0VSUEMgYXJjaGl0ZWN0dXJlIGRlZmluZXMgaW4gYWNjb25maWcuaAogICogTWVyZ2UgaW4gcGF0Y2hlcyBmcm9tIE1vcnRlbiBXZWxpbmRlciA8dGVycmFAZGlrdS5kaz4KICAgICsgYWRkIHNvbWUgYXV0b2NvbmYtdGVzdHMgZm9yIGluY2x1ZGVmaWxlcwogICAgKyBoYW5kbGUgc29sYXJpcyB2ZXJzaW9uIG9mIHNpZ2NvbnRleHQgc3RydWN0IChhY3R1YWxseSBJIGhhY2tlZCB0aGlzCiAgICAgIHVwIGFnYWluLCBidXQgdGhlIGlkZWEgaXMgaGlzIDopCgpTdW4gQXByIDE4IDIyOjMyOjQyIENFU1QgMTk5OSBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIFVwZGF0ZSBzeXNjYWxscyBmb3IgbGludXggYWxwaGEsIHBhdGNoIGZyb20gQmFydCBXYXJtZXJkYW0KICAgIDxiYXJ0d0BkZWJpYW4ub3JnPgogICogVXBkYXRlIHNwYXJjIGNvZGUgc28gaXQgYWN0dWFsbHkgY29tcGlsZXMKCkZyaSBBcHIgMTYgMDI6MTg6MDUgQ0VTVCAxOTk5IFdpY2hlcnQgQWtrZXJtYW4gPHdha2tlcm1hQGRlYmlhbi5vcmc+CgogICogQWRkIHN1cHBvcnQgZm9yIG9sZF8qc3RhdCBmdW5jdGlvbnMgZm9yIExpbnV4LiBQbGVhc2Ugbm90ZSB5b3UgbmVlZAogICAgdG8gdXNlIHJlYXNvbmFibHkgcmVjZW50IGtlcm5lbCBoZWFkZXJzIHRvIGNvbXBpbGUgc3RyYWNlIG5vdy4KICAqIENoYW5nZSByZWZlcmVuY2VzIHRvIExJTlVYIGludG8gbGludXggaW4gZmlsZS5jCiAgKiBGaXggaW5jbHVkZSBmb3IgTERUIGluIG1lbS5jCgpUaHUgQXByIDE1IDIyOjI4OjE1IENFU1QgMTk5OSBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgoKICAqIENoYW5nZSBpbiBzdHJhY2UgbWFpbnRhaW5lcnNoaXAsIGpycyBwYXNzZWQgdGhlIHRvcmNoIHRvIG1lLgogICogVXNlIGF1dG9jb25mIDIuMTMKICAqIEluY29ycG9yYXRlIGFsbCBjaGFuZ2VzIGFscmVhZHkgbWFkZSBpbiB0aGUgRGViaWFuIHN0cmFjZSBwYWNrYWdlOgogICAgKyBjb21waWxlcyB3aXRoIG1vcmUgTGludXgga2VybmVscwogICAgKyBhZGRlZCBzdXBwb3J0IGZvciBtb3JlIExpbnV4IGFyY2hpdGVjdHVyZXMKICAgICsgYWRkIHN1cHBvcnQgZm9yIGEgbG90IG9mIGV4dHJhIHN5c2NhbGxzCiAgICArIGZpeCBzb21lIHByb2JsZW1zIHdpdGggaGFuZ2luZyBjaGlsZHJlbgogICAgKyBjaGVjayBzdHJheSBzeXNjYWxsIGFmdGVyIGV4ZWN2CiAgICArIGRlY29kZSBjYXBnZXQgYW5kIGNhcHNldCBhcmd1bWVudHMKICAgICsgYWRkIG1vcmUgY29uc3RhbnRzIHRvIG5ldC5jCiAgICArIGRldGVjdCBST1NFIG5ldHdvcmtpbmcKICAgICsgYWRkIG1vcmUgcHJvdG9jb2wgZmFtaWxpZXMgdG8gZG9tYWlucwogICAgKyBhZGQgSVBJUCBwcm90b2NvbAogICAgKyBhZGRlZCBNU0dfUFJPWFkgYW5kIE1TR19DVFJVTkMgdG8gbXNnX2ZsYWdzCiAgICArIGFkZGVkIFNPX0JTRENPTVBBVCBhbmQgU09fUkVVU0VQT1JUIHRvIHNvY2tvcHRpb25zCiAgICArIGFkZGVkIElQLCBJUFggYW5kIFRDUC1vcHRpb25zCiAgICArIGFkZGVkIElQLCBJUFggYW5kIFRDUCBzdXBwb3J0IHRvIGdldC0vc2V0c29ja29wdCgpCiAgICArIGFkZGVkIElQWCBzdXBwb3J0CiAgICArIHVwZGF0ZWQgaGFuZGxpbmcgb2Ygc2lnbmFscwoKU3VuIE9jdCAyNyAyMjoyODowMCAxOTk2ICBKLiBSaWNoYXJkIFNsYWRrZXkgIDxqcnNAd29ybGQuc3RkLmNvbT4KCgkqIHV0aWwuYyAodW1vdmVzdHIpIFtMSU5VWF06IEhhbmRsZSBMaW51eCBsaWtlIFN1bk9TNAoJaW5zdGVhZCBvZiBTVlI0LiAgVGhhdCBpcywgcmVhZCBhIGZldyBieXRlcyBhdCBhIHRpbWUKCXRvIGF2b2lkIG92ZXJydW5uaW5nIHRoZSBlbmQgb2YgdGhlIHN0YWNrLgoKRnJpIE1heSAzMSAwMTo0ODo0OSAxOTk2ICBKLiBSaWNoYXJkIFNsYWRrZXkgIDxqcnNAd29ybGQuc3RkLmNvbT4KCgkqIHZlcnNpb24uYzogVmVyc2lvbiAzLjEgaXMgcmVsZWFzZWQuCgpUaHUgTWF5IDIzIDAxOjA0OjQzIDE5OTYgIEouIFJpY2hhcmQgU2xhZGtleSAgPGpyc0B3b3JsZC5zdGQuY29tPgoKCSogYWNsb2NhbC5tNCAoQUNfREVDTF9TWVNfRVJSTElTVCk6IFRyeSBsb29raW5nIGluIHN0ZGlvLmgKCWFzIHdlbGwgc2luY2UgdGhhdCdzIHdoZXJlIGdsaWJjIGRlY2xhcmVzIGl0LiAgR28gZmlndXJlLgoJKiBzaWduYWwuYyAoc3lzX3NpZ3JldHVybikgW0FMUEhBXTogVXNlIHNpZ2NvbnRleHQKCWluc3RlYWQgb2Ygc2lnY29udGV4dF9zdHJ1Y3Qgc2luY2UgZ2xpYmMgdjUrIGFwcGFyZW50bHkKCXBsYXlzIGdhbWVzIHdpdGggdGhlIG5hdGl2ZSBPUyBuYW1lc3BhY2UuCglGcm9tIERhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AQVpTdGFyTmV0LmNvbT4uCgpNb24gTWF5IDIwIDIzOjE3OjE0IDE5OTYgIEouIFJpY2hhcmQgU2xhZGtleSAgPGpyc0B3b3JsZC5zdGQuY29tPgoKCSogdmVyc2lvbi5jOiBWZXJzaW9uIDMuMC4xNCBpcyByZWxlYXNlZC4KCgkqIGFjbG9jYWwubTQgKEFDX1NUUlVDVF9NU0dfQ09OVFJPTCk6IE5ldyBtYWNyby4KCSogY29uZmlndXJlLmluOiBBZGQgY2FsbCB0byBBQ19TVFJVQ1RfTVNHX0NPTlRST0wuCgkqIG5ldC5jIChwcmludG1zZ2hkcik6IEhhbmRsZSBCU0QgNC4zIGFuZCA0LjQgbXNnaGRyIG1lbWJlcnMKIAlkaWZmZXJlbnRseS4KCVJlcG9ydGVkIGJ5IEhlbnJpayBTdG9ybmVyIDxzdG9ybmVyQG9zaXJpcy5waW5nLmRrPi4KCgkqIGNvbmZpZ3VyZS5pbjogKEFDX0NIRUNLX3tIRUFERVJTLEZVTkNTfSk6IEFkZCBjaGVja3MgZm9yCiAJc3lzL2ZpbGlvLmggYW5kIHN5cy9zdHJlYW0uaCBhbmQgcmVtb3ZlIGNoZWNrIGZvciBwb2xsLgoJKiBkZXNjLmMgKGRlY29kZV9zZWxlY3QsIHN5c19zZWxlY3QsIHN5c19vbGRzZWxlY3QpIFtMSU5VWF06CiAJSGFuZGxlIG9sZCBhbmQgbmV3IHN0eWxlcyBvZiBhcmd1bWVudCBwYXNzaW5nIGZvciBzZWxlY3Qgb24gTGludXguCgkqIGlvY3RsLmMsIHN0cmVhbS5jOiBDb25kaXRpb25hbGl6ZSBzdHJlYW0gY29kZSBvbiBwcmVzZW5jZSBvZgoJc3lzL3N0cmVhbS5oIGluc3RlYWQgb2YgcG9sbCBiZWNhdXNlIGdsaWJjIGltcGxlbWVudHMgcG9sbCBidXQKCW5vdCB0aGUgcmVzdCBvZiB0aGUgc3RyZWFtIGludGVyZmFjZS4KCSogc2lnbmFsLmMgW0xJTlVYXTogU3RhbmRhcmRpemUgb24gdGhlIG5hbWUgc2lnY29udGV4dF9zdHJ1Y3QuCgkoc3lzX3NpZ3Byb2NtYXNrKSBbQUxQSEFdOiBIYW5kbGUgT1NGIGZsYXZvciB3aGljaCBpcyBtb3JlIGxpa2UKCXNpZ3NldG1hc2suCgkqIHRlcm0uYyAodGVybV9pb2N0bCk6IFVzZSBfVk1JTiwgaWYgcHJlc2VudCwgZm9yIFRDe0csU31FVEEqLgoJKiB1dGlsLmMgKHVtb3ZlbiwgdW1vdmVzdHIpOiBNb3ZlIGRhdGEgaW4gbG9uZy1zaXplZCBjaHVua3MKCWF0IGEgdGltZSwgaW5zdGVhZCBvZiBoYXJkIGNvZGluZyBpdCB0byBiZSA0LgoJRnJvbSBEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQEFaU3Rhck5ldC5jb20+LgoKTW9uIE1heSAyMCAwMToxOTozNiAxOTk2ICBKLiBSaWNoYXJkIFNsYWRrZXkgIDxqcnNAd29ybGQuc3RkLmNvbT4KCgkqIHZlcnNpb24uYzogVmVyc2lvbiAzLjAuMTMgaXMgcmVsZWFzZWQuCgoJKiBjb25maWd1cmUuaW4gKEFDX0NIRUNLX0hFQURFUlMpOiBBZGQgY2hlY2sgZm9yIGFzbS9zaWdjb250ZXh0LmguCgkqIHNpZ25hbC5jIFtIQVZFX0FTTV9TSUdDT05URVhUX0hdOiBDb25kaXRpb25hbGx5IGluY2x1ZGUKCWFzbS9zaWdjb250ZXh0LmggdG8gZGVmaW5lIHNpZ2NvbnRleHRfc3RydWN0IGFuZCBkb24ndCBkZWZpbmUgaXQKCWxvY2FsbHkgaWYgdGhlIGhlYWRlciBpcyBwcmVzZW50LgoKCSogc3lzY2FsbC5jIChuZXJybm9zezAsMn0pOiBDb3JyZWN0IHNpemUgY29tcHV0YXRpb24uCgoJKiBNYWtlZmlsZS5pbjogUmVtb3ZlIGRlcGVuZGVuY2llcyBhbmQgcnVsZXMgcmVsYXRpbmcgdG8gZmlsZXMKIAlub3JtYWxseSBmb3VuZCBpbiB0aGUgb3MgZGlyZWN0b3J5LiAgQmVjYXVzZSBvZiB0aGUgbmV3IHNjaGVtZSB3ZQogCWRvbid0IGtub3cgcHJlY2lzZWx5IHdoZXJlIHRoZXkgY29tZSBmcm9tLiAgU2lnaC4KCSogc2lnbmFsZW50LnNoOiBNYWtlIGl0IHdvcmsgZm9yIHN1bm9zNCwgbGludXgsIGFuZCBzdnI0LgoJKiB7c3Vub3M0LGxpbnV4eywvYWxwaGF9LHN2cjR9L01ha2VmaWxlLmluOiBNYWtlIHJ1bGVzIGNvcnJlc3BvbmQKIAl0byB0cmFkaXRpb25hbCBtYWtlIHN5bnRheC4gIEFkZCBzaWduYWxlbnQuaCB0byBmaWxlcyB3aGljaCBjYW4KIAl1bmNvbmRpdGlvbmFsbHkgYmUgcmVidWlsdC4gIFByZXZlbnQgc2lnbmFsZW50LmggZnJvbSBiZWluZwogCXVuY29uZGl0aW9uYWxseSBiZWluZyByZWJ1aWx0IHNpbmNlIGl0J3MgY3VzdG9taXplZC4KCSoge3N1bm9zNCxsaW51eHssL2FscGhhfSxzdnI0fS97aW9jdGxlbnQsZXJybm9lbnQsc2lnbmFsZW50fS5oOgogCVVzZSB2ZXJzaW9ucyBidWlsdCBieSB7aW9jdGxlbnQsZXJybm9lbnQsc2lnbmFsdGVudH0uc2guCiAgCSogc3Vub3M0L2lvY3RsZW50LnNoOiBXb3JrIGFyb3VuZCBzcHJpbnRmIHRyb3VibGVzIHdpdGggU3VuT1MKIAk0LjEuNCBhbmQgZ2NjIDIuNy4yLgoKU3VuIE1heSAxOSAxNzoxNDowOSAxOTk2ICBKLiBSaWNoYXJkIFNsYWRrZXkgIDxqcnNAd29ybGQuc3RkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiwgTWFrZWZpbGUuaW46IEFkZCBPU0FSQ0ggY29uY2VwdCB0byBmaW5pc2gKCWJ1aWxkIHN1cHBvcnQgZm9yIHRoZSBhbHBoYS4KCSogTWFrZWZpbGUuaW4sIGxpbnV4L01ha2VmaWxlLmluOiBSZXdyaXRlIGNsZWFuLCBkaXN0Y2xlYW4sCglhbmQgbWFpbnRhaW5lci1jbGVhbiBydWxlcy4KCSogZGVmcy5oLCBpb2N0bHNvcnQuYzogTWFrZSBpb2N0bCBjb2RlIG1lbWJlciB1bnNpZ25lZC4KCSogaW9jdGwuYywgaW9jdGxzb3J0LmMgKGNvbXBhcmUpOiBQZXJmb3JtIGV4cGxpY2l0IGNoZWNraW5nCglmb3IgbGVzcywgZ3JlYXRlciwgYW5kIGVxdWFsIHNpbmNlIHN1YnRyYWN0aW9uIG9uIHR3bydzCgljb21wbGVtZW50IG51bWJlcnMgaXNuJ3QgYW4gb3JkZXIgcmVsYXRpb24gKGl0IGlzbid0IHRyYW5zaXRpdmUpIQoJKiBsaW51eC9NYWtlZmlsZS5pbjogQWRkIHJ1bGVzIGZvciB0aGUgc2lnbmFsZW50LmggZmlsZS4KCSogbGludXgvYWxwaGEvTWFrZWZpbGUuaW46IE5ldyBmaWxlLgoKU3VuIE1heSAxOSAwMToxMjoyOCAxOTk2ICBKLiBSaWNoYXJkIFNsYWRrZXkgIDxqcnNAd29ybGQuc3RkLmNvbT4KCgkqIHZlcnNpb24uYzogVmVyc2lvbiAzLjAuMTIgaXMgcmVsZWFzZWQuCgoJKiBsaW51eHssYWxwaGF9L2lvY3RsZW50LnNoOiBUd2VhayBmb3IgcmVjZW50IGtlcm5lbHMuCglGcm9tIE1pY2hhZWwgRSBDaGFzdGFpbiA8bWVjQGR1cmFjZWYuc2hvdXQubmV0Pi4KCgkqIGRlZnMuaCAoU1VQUE9SVEVEX1BFUlNPTkFMSVRFUywgREVGQVVMVF9QRVJTT05BTElUWSk6IE5ldy4KCSogc3lzY2FsbC5jIChzZXRfcGVyc29uYWxpdHkpOiBOZXcuCgkqIHN0cmFjZS5jIChtYWluKTogQ2FsbCBzZXRfcGVyc29uYWxpdHkuCiAJKiBkZWZzLmgsIHN5c2NhbGwuYywgaW9jdGwuYywgc2lnbmFsLmM6IE1ha2Ugc3lzZW50LCBlcnJub2VudCwKIAlpb2N0bGVudCwgYW5kIHNpZ25hbGVudCBpbmRpcmVjdCBwb2ludGVycyBhbmQgcmVkaXJlY3QgdGhlbQoJYmFzZWQgb24gcGVyc29uYWxpdHkuCgkqIHtzdW5vczQsc3ZyNCxsaW51eHssL2FscGhhfX0vc2lnbmFsZW50Lmg6IE5ldyBmaWxlcy4KCVN1Z2dlc3RlZCBieSBUb20gRHlhcyA8dGR5YXNAZWRlbi5ydXRnZXJzLmVkdT4uCgoJKiB1dGlsLmMgKHVwZWVrKTogSGFuZGxlIGNhc2Ugd2hlcmUgcHRyYWNlIHJldHVybnMgYSBsb25nCglhbmQgc2l6ZW9mKGxvbmcpICE9IHNpemVvZihpbnQpLgoJRnJvbSBSaWNoYXJkIEhlbmRlcnNvbiA8cmljaGFyZEB0d2lkZGxlLnRhbXUuZWR1PgoKRnJpIE1heSAxNyAyMTowMzozNiAxOTk2ICBKLiBSaWNoYXJkIFNsYWRrZXkgIDxqcnNAd29ybGQuc3RkLmNvbT4KCgkqIHZlcnNpb24uYzogVmVyc2lvbiAzLjAuMTEgaXMgcmVsZWFzZWQuCgoJKiBtYW55IGZpbGVzOiBGaXggbW9yZSBwcmludGYgd2FybmluZ3MgZm9yIG90aGVyIHBsYXRmb3Jtcy4KCgkqIGlwYy5jIChzeXNfbXNncmN2KSBbTElOVVhdOiBDb25kaXRpb25hbGl6ZSBkZWZpbml0aW9uIG9mIGlwY193cmFwcGVyLgoKCSogbGludXgvZHVtbXkuaDogSGFuZGxlIG1pc3NpbmcgbGlicmFyeSBzdXBwb3J0IGZvciB7c2VuZCxyZWN2fW1zZy4KCVJlcG9ydGVkIGJ5IFRob21hcyBCb2dlbmRvZXJmZXIgPHRzYm9nZW5kQGJpZ2J1Zy5mcmFua2VuLmRlPi4KCgkqIGxpbnV4L3N5c2NhbGwuaCAoc3lzX3V0aW1lcyk6IEZpeCBhIHR5cG8gaW4gdGhlIGRlY2xhcmF0aW9uLgoJRnJvbSBUaG9tYXMgQm9nZW5kb2VyZmVyIDx0c2JvZ2VuZEBiaWdidWcuZnJhbmtlbi5kZT4uCgpGcmkgTWF5IDE3IDAwOjUwOjA2IDE5OTYgIEouIFJpY2hhcmQgU2xhZGtleSAgPGpyc0B3b3JsZC5zdGQuY29tPgoKCSogdmVyc2lvbi5jOiBWZXJzaW9uIDMuMC4xMCBpcyByZWxlYXNlZC4KCgkqIE1ha2ZpbGUuaW46IEFkZCBvcy9hcmNoIHRvIGluY2x1ZGVzIHNvIHRoYXQgYSBnaXZlbiBhcmNoCgkobGlrZSBhbHBoYSkgY2FuIG92ZXJyaWRlIHRoZSBuYXRpdmUgYXJjaCAobGlrZSBpMzg2KS4KCSogY29uZmlndXJlLmluOiBDaGVjayBmb3Igc2VuZG1zZy4KCgkqIG5ldC5jOiBNYWtlIHNlbmRtc2cgYW5kIHJlY3Ztc2cgZGVwZW5kZW50IG9uIGFuIGF1dG9jb25mCgl0ZXN0LiAgUmVwb3J0ZWQgYnkgTWljaGFlbCBFIENoYXN0YWluIDxtZWNAZHVyYWNlZi5zaG91dC5uZXQ+LgoKCSogYWNjb25maWcuaCwgY29uZmlndXJlLmluOiBEZXRlY3QgdGhlIGFscGhhLgoJKiBpb2N0bC5jOiBIYW5kbGUgdGhlIGFscGhhLgoJKiBkZWZzLmg6IE1ha2Ugc29tZSBtZW1iZXJzIGxvbmcgZm9yIHRoZSBhbHBoYS4gIERlZmluZQoJc29tZSByZWdpc3RlciBuaWNrbmFtZXMuICBBZGQgc3VwcG9ydCBmb3IgV0FJVEVYRUNWRS4KCSogZmlsZS5jIFtBTFBIQV06IFN1cHBvcnQgdGhlIGFscGhhIGZvciBzdGF0ZnMuICBBZGQKCW9zZl9zdGF0ZnMgYW5kIG9zZl9mc3RhdGZzIGZvciB0aGUgYWxwaGEuICBNYWtlIGRhbW4gc3VyZQoJbWFqb3IgYW5kIG1pbm9yIHJlc3VsdHMgYXJlIHN1aXRhYmxlIGZvciBwYXNzaW5nIHRvIHByaW50Zi4KCSogc2lnbmFsLmMsIHN5c2NhbGwuYzogU3VwcG9ydCB0aGUgYWxwaGEuCgkqIHByb2Nlc3MuYzogQWRkIGFscGhhIHVzZXIgb2Zmc2V0cy4KCSogbW9zdCBmaWxlczogVXNlICVsPyBmb3IgcHJpbnRmIGFyZ3VtZW50cyBzaW5jZQoJbW9zdCBhcmUgbm93IGxvbmdzIGZvciB0aGUgYWxwaGEuCgkqIGxpbnV4L2FscGhhL3tlcnJub2VudC5oLGlvY3RsZW50LntoLHNofSxzeXNjYWxsZW50Lmh9OgoJTmV3IGZvciB0aGUgYWxwaGEuCglGcm9tIFRob21hcyBCb2dlbmRvZXJmZXIgPHRzYm9nZW5kQGJpZ2J1Zy5mcmFua2VuLmRlPi4KCldlZCBNYXkgMTUgMDA6Mjk6MzcgMTk5NiAgSi4gUmljaGFyZCBTbGFka2V5ICA8anJzQHdvcmxkLnN0ZC5jb20+CgoJKiB2ZXJzaW9uLmM6IFZlcnNpb24gMy4wLjkgaXMgcmVsZWFzZWQuCgoJKiBjb25maWcuaW4sIGNvbmZpZy5zdWIsIGluc3RhbGwtc2g6IFVwZ3JhZGUgdG8gYXV0b2NvbmYgMi4xMC4KCgkqIGxpbnV4L2R1bW15LmgsIGxpbnV4L3N5c2NhbGxlbnQuaCwgbGludXgvc3lzY2FsbC5oOiBBZGQgcmVjZW50CglMaW51eCBrZXJuZWwgdmVyc2lvbiBzeXN0ZW0gY2FsbHMuCgpXZWQgTWFyIDEzIDAxOjAzOjM4IDE5OTYgIEouIFJpY2hhcmQgU2xhZGtleSAgPGpyc0B3b3JsZC5zdGQuY29tPgoKCSogaXBjLmMgW1NVTk9TNF06IEFkZCBTdW5PUyBzdXBwb3J0IGZvciBkZWNvZGluZyBJUEMgY2FsbHMuCgkqIHN5c2NhbGwuYyBbU1VOT1M0XTogQ29tcGlsZSBkZWNvZGVfc3ViY2FsbCBvbiBTdW5PUyBhbmQKCWRlY29kZSBJUEMgY2FsbHMgdXNpbmcgaXQuCgkqIHN1bm9zNC9kdW1teS5oOiBBbGlhcyBzeXNfc2Vtb3AgdG8gcHJpbnRhcmdzLgoJKiBzdW5vczQvc3lzY2FsbC5oOiBBZGQgbmV3IHBzZXVkbyBzeXNjYWxscyBmb3IgSVBDLgoJKiBzdW5vczQvc3lzY2FsbGVudC5oOiBJbmNsdWRlIG5ldyBzdWJjYWxscyBmb3IgSVBDLgoJRnJvbSBNYXR0aGlhcyBQZmFsbGVyIDxsZW9AZGFjaGF1Lm1hcmNvLmRlPi4KClR1ZSBGZWIgMTMgMjI6MDg6MjUgMTk5NiAgSi4gUmljaGFyZCBTbGFka2V5ICA8anJzQHdvcmxkLnN0ZC5jb20+CgoJKiB2ZXJzaW9uLmM6IFZlcnNpb24gMy4wLjggaXMgcmVsZWFzZWQuCgoJKiB0aW1lLmMgW0xJTlVYXTogRXhwbGljaXRseSBpbmNsdWRlIGxpbnV4L3ZlcnNpb24uaC4KCgkqIHN0cmFjZS5jIChtYWluKTogRG9uJ3QgbGV0IHRoZW0gZXZlbiAqdHJ5KiB0bwoJZ2V0IHN0cmFjZSB0byBhdHRhY2ggdG8gaXRzZWxmIHNpbmNlIHNvbWUgc3lzdGVtcwoJZG9uJ3QgaGFuZGxlIHRoaXMgY2FzZSB2ZXJ5IGdyYWNlZnVsbHkuCglSZXBvcnRlZCBieSBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQGNhaXAucnV0Z2Vycy5lZHU+LgoKCSogTWFrZWZpbGUuaW4gKGRpc3RjbGVhbik6IEZpeCBpdCBmb3Igc3ViZGlyZWN0b3JpZXMuCgoJKiBzdW5vczQvc3lzY2FsbGVudC5oLCBzdnI0L3N5c2NhbGxlbnQuaDogRmlsbCBpbiB0aGUgbmV3CglzeXNfZmxhZ3MgbWVtYmVyIGZvciBlYWNoIGRlZmluZWQgc3lzdGVtIGNhbGwuCgpGcmkgRGVjICA4IDAxOjE3OjI4IDE5OTUgIFJpY2sgU2xhZGtleSAgPGpyc0B3b3JsZC5zdGQuY29tPgoKCSogZGVmcy5oIChUUkFDRV8qKTogTmV3IGZsYWdzIHRvIGRlc2NyaWJlIHdoYXQgY2xhc3MKCW9mIHN5c3RlbSBjYWxsIGVhY2ggc3lzdGVtIGNhbGwgaXMuCgkoc3lzZW50KTogQWRkIHN5c19mbGFncyBtZW1iZXIuCgkqIHN5c2NhbGwuYyAoc3lzZW50KTogRGVmaW5lIChhbmQgbGF0ZXIgdW5kZWYpIGFiYnJldmlhdGlvbnMKCWZvciB0aGUgc3lzdGVtIGNhbGwgY2xhc3MgZmxhZ3MuCgkobG9va3VwX2NsYXNzKTogTmV3IGZ1bmN0aW9uIHRvIHRyYW5zbGF0ZSBzdHJpbmdzIHRvCglzeXN0ZW0gY2FsbCBjbGFzcyBmbGFncy4KCShxdWFsaWZ5KTogSGFuZGxlIG5ldyBzeXN0ZW0gY2FsbCBjbGFzcyBtZWNoYW5pc20uCgkqIGxpbnV4L3N5c2NhbGxlbnQuaDogRmlsbCBpbiB0aGUgbmV3IHN5c19mbGFncyBtZW1iZXIKCWZvciBlYWNoIGRlZmluZWQgc3lzdGVtIGNhbGwuCgoJKiBkZWZzLmggKHByaW50X3NvY2spOiBSZW1vdmUgcmVkdW5kYW50IGFuZCBub24tSyZSIEMKCWNvbXBhdGlibGUgcHJvdG90eXBlLiAgRnJvbSBKdWVyZ2VuIFdlaWdlcnQKCTxqbndlaWdlckBpbW1kNC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4uCgpUaHUgRGVjICA3IDAxOjE3OjQwIDE5OTUgIFJpY2sgU2xhZGtleSAgPGpyc0B3b3JsZC5zdGQuY29tPgoKCSogbGludXgvaW9jdGxlbnQuc2g6IFR3ZWFrIHRvIGltcHJvdmUgaW9jdGwgYWNjdXJhY3kuCglGcm9tIE1pY2hhZWwgRSBDaGFzdGFpbiA8bWVjQGR1cmFjZWYuc2hvdXQubmV0Pi4KCgkqIHN5c3RlbS5jIChpbmNsdWRlcykgW0xJTlVYXTogQWRkIGxpbnV4L25mcy5oIGZvciByZWNlbnQKCWtlcm5lbHMuICBGcm9tIE1pY2hhZWwgRSBDaGFzdGFpbiA8bWVjQGR1cmFjZWYuc2hvdXQubmV0Pi4KCldlZCBEZWMgIDYgMjE6NTI6MjggMTk5NSAgUmljayBTbGFka2V5ICA8anJzQHdvcmxkLnN0ZC5jb20+CgoJKiBmaWxlLmMgKHNwcmludGZzdHlwZSk6IEVuY2xvc2Ugc3RyaW5nIHJlc3VsdCBpbiBkb3VibGUKCXF1b3Rlcy4KCgkqIHRpbWUuYyAoc3lzX2FkanRpbWV4KSBbTElOVVhdOiBDb25kaXRpb25hbGl6ZQoJY29uc3RhbnRseSBldm9sdmluZyB0aW1leCBzdHJ1Y3R1cmUuCglGcm9tIEFhcm9uIFVja28gPFVDS09AVkFYMS5ST0NLSFVSU1QuRURVPi4KCgkqIGRlZnMuaCwgc3lzY2FsbC5jLCBzdHJhY2UuYzogUmVuYW1lIHN5c2NhbGwgdG8KCXRyYWNlX3N5c2NhbGwgYW5kIGNoYW5nZSBwcm90b3R5cGUgYW5kIGFsbCBjYWxsZXJzCgliZWNhdXNlIG9mIGJyb2tlbiBMaW51eCBzaGFyZWQgbGlicmFyaWVzLgoJRnJvbSBBYXJvbiBVY2tvIDxVQ0tPQFZBWDEuUk9DS0hVUlNULkVEVT4uCgoJKiBNYWtlZmlsZS5pbiAoY2xlYW4pOiBDaGVjayBmb3IgYSBmaWxlIHdpdGggdGVzdCAtZiBub3QKCXRlc3QgLWQuICBGcm9tIEFhcm9uIFVja28gPFVDS09AVkFYMS5ST0NLSFVSU1QuRURVPi4KClR1ZSBTZXAgMjYgMDI6MzI6MzEgMTk5NSAgUmljayBTbGFka2V5ICA8anJzQHdvcmxkLnN0ZC5jb20+CgoJKiB2ZXJzaW9uLmM6IFZlcnNpb24gMy4wLjcgaXMgcmVsZWFzZWQuCgoJKiB1dGlsLmMgKHN0cmluZ19xdW90ZSk6IEZpeCB0aGlua28gd2hpY2ggY2F1c2VkIGNvcmUKCWR1bXBzIGZvciBzdHJpbmdzIHdpdGggcXVvdGVzIGluIHRoZW0uCglSZXBvcnRlZCBieSBNYXJ0eSBMZWlzbmVyIDxsZWlzbmVyQHNkc3AubWMueGVyb3guY29tPi4KCgkqIGxpbnV4L01ha2VmaWxlLmluIChlcnJub2VudC5oIHJ1bGUpOiBHcmFiIGFsbCBlcnJuby5oCglmaWxlcyBmcm9tIC91c3IvaW5jbHVkZSwgbm90IGp1c3QgdGhlIGxpbnV4IG9uZS4KCUZyb20gTWljaGFlbCBFIENoYXN0YWluIDxtZWNAZHVyYWNlZi5zaG91dC5uZXQ+LgoKCSogbGludXgvZXJybm9lbnQuc2g6IFRvdGFsIHJld3JpdGUgdG8gaGFuZGxlIG1vcmUgaW9jdGxzIHdpdGgKCWZld2VyIGZhbHNlIHBvc2l0aXZlcyBvbiBtb3JlIGtlcm5lbCBmbGF2b3JzLgoJRnJvbSBNaWNoYWVsIEUgQ2hhc3RhaW4gPG1lY0BkdXJhY2VmLnNob3V0Lm5ldD4uCgpNb24gU2VwICA0IDAxOjI5OjIyIDE5OTUgIFJpY2sgU2xhZGtleSAgPGpyc0B3b3JsZC5zdGQuY29tPgoKCSogdmVyc2lvbi5jOiBWZXJzaW9uIDMuMC42IGlzIHJlbGVhc2VkLgoKCSogbGludXgvZHVtbXkuaCwgbGludXgvc3lzY2FsbC5oLCBsaW51eC9zeXNjYWxsZW50Lmg6IEFkZAoJc3lzX21zeW5jLgoJKiBtZW0uYyAobWN0bF9mdW5jcywgbWN0bF9sb2NrYXMsIHN5c19tY3RsKTogQ29uZGl0aW9uYWxpemUKCW9uIE1DX1NZTkMgaW5zdGVhZCBvZiBIQVZFX01DVEwuCgkobWN0bF9zeW5jKTogQ29uZGl0aW9uYWxpemUgb24gTVNfQVNZTkMgaW5zdGVhZCBvZiBIQVZFX01DVEwuCgkoc3lzX21zeW5jKTogTmV3IGZ1bmN0aW9uLgoKU2F0IFNlcCAgMiAxMjowNjowNCAxOTk1ICBSaWNrIFNsYWRrZXkgIDxqcnNAd29ybGQuc3RkLmNvbT4KCgkqIGxpbnV4L2R1bW15LmgsIGxpbnV4L3N5c2NhbGwuaCwgbGludXgvc3lzY2FsbGVudC5oOiBBZGQKCXN5c19mbG9jayBhbmQgc3lzX2dldGRlbnRzLgoJKiBkZXNjLmMgKGZsb2NrY21kcywgc3lzX2Zsb2NrKTogQ29uZGl0aW9uYWxpemUgb24gTE9DS19TSAoJbm90IFNVTk9TNC4KCSogZmlsZS5jIChzeXNfZ2V0ZGVudHMpOiBEZWZpbmUgdW5jb25kaXRpb25hbGx5IGFuZCBoYW5kbGUKCUxJTlVYIGNhc2UuCgkqIHN0cmFjZS5jIChtYWluKTogRGlzYWxsb3cgdXNlcm5hbWUgb3B0aW9uIHVubGVzcyBib3RoIHJlYWwKCWFuZCBlZmZlY3RpdmUgdWlkcyBhcmUgcm9vdC4KCldlZCBBdWcgMzAgMDE6Mjk6NTggMTk5NSAgUmljayBTbGFka2V5ICA8anJzQHdvcmxkLnN0ZC5jb20+CgoJKiBzdHJhY2UuYyAobWFpbik6IEVuc3VyZSB0aGF0IHJ1bl91aWQgYW5kIHJ1bl9naWQgYXJlCglhbHdheXMgc2V0IHRvIHNvbWV0aGluZyBtZWFuaW5nZnVsLgoJKG1haW4sIG5ld291dGYpIFshU1ZSNF06IFN3YXAgcmVhbCBhbmQgZWZmZWN0aXZlIHVpZHMgd2hpbGUKCW9wZW5pbmcgYW55IG91dHB1dCBmaWxlcy4KCShtYWluKSBbIVNWUjRdOiBUcmVhdCBlZmZlY3RpdmUgdWlkIG9mIHJvb3QgYXMgYSByZXF1ZXN0Cgl0byBoYW5kbGUgc3VpZCBiaW5hcmllcyBjb3JyZWN0bHkgdXNpbmcgdGhlIHJlYWwgdWlkIG9mCgl0aGUgaW52b2tpbmcgdXNlci4KClNhdCBBdWcgMTkgMDA6MDY6MDggMTk5NSAgUmljayBTbGFka2V5ICA8anJzQHdvcmxkLnN0ZC5jb20+CgoJKiBNYWtlZmlsZS5pbjogQWRkIGB8fCB0cnVlJyB0byBjbGVhbiBydWxlIGJlY2F1c2UKCWFsdGhvdWdoIEdOVSBtYWtlIDMuNzQgdXNlcyBgc2ggLWMnIHRvIGludm9rZSBjb21tYW5kcwoJZXZlcnkgb3RoZXIgbWFrZSBpbiB0aGUgd29ybGQgdXNlcyBgc2ggLWVjJy4KCgkqIHN5c2NhbGwuYyAoc3lzY2FsbCkgW1NWUjQsIE1JUFNdOiBUaGUgZmlmdGggYW5kIHN1YnNlcXVlbnQKCWFyZ3VtZW50cyBhcHBlYXIgdG8gYmUgc3RvcmVkIG9uIHRoZSBzdGFjaywgbm90IGluIHRoZQoJcmVnaXN0ZXJzIGZvbGxvd2luZyBBMyAoZW1waXJpY2FsIHJlc3VsdCkuCgoJKiBkZWZzLmg6IEFkZCBwcm90b3R5cGUgZm9yIHByaW50c29jay4KCSogc3ZyNC9kdW1teS5oOiBSZW1vdmUgZ2VuZXJpYyBoYW5kbGluZyBvZiBzeXNfbW91bnQuCgkqIHN5c3RlbS5jIFtTVlI0LCBNSVBTXTogSW5jbHVkZSBzZXZlcmFsIHN5c3RlbSBoZWFkZXJzIHRvIGNsZWFubHkKCWdldCBhY2Nlc3MgdG8gU0dJIG1vdW50IGluZm9ybWF0aW9uLgoJKG1vdW50X2ZsYWdzLCBuZnNfZmxhZ3MpIFtTVlI0LCBNSVBTXTogTmV3IG9iamVjdHMuCgkoc3lzX21vdW50KSBbU1ZSNCwgTUlQU106IE5ldyBmdW5jdGlvbi4KCShzeXNfbW91bnQpIFtTVlI0LCAhTUlQU106IE5ldyBmdW5jdGlvbi4KClR1ZSBKdWwgIDQgMDA6MzA6MzQgMTk5NSAgUmljayBTbGFka2V5ICA8anJzQHdvcmxkLnN0ZC5jb20+CgoJKiB2ZXJzaW9uLmM6IFZlcnNpb24gMy4wLjUgaXMgcmVsZWFzZWQuCgoJKiBkZXNjLmMsIHJlc291cmNlLmMsIHN0cmFjZS5jLCBzeXNjYWxsLmMsIHRpbWUuYzogQ2FzdCB0dl9zZWMgYW5kCiAJdHZfdXNlYyBtZW1iZXJzIHRvIGxvbmcgd2hlbiB1c2luZyBwcmludGYuCgoJKiBpcGMuYzogT21pdCBkZWZpbmUgb2YgX19LRVJORUxfXy4KCSh7TVNHLFNFTSxTSE19X3tTVEFULElORk99KTogRXhwbGljaXRseSBkZWZpbmUgdGhvc2UgdGhpbmdzIHdlCiAJd2FudCB3aGljaCBfX0tFUk5FTF9fIHVzZWQgdG8gcHJvdmlkZS4KCShzeXNfbXNncmN2KTogQ2hhbmdlIHJlZmVyZW5jZSB0byBpcGNfa2x1ZGdlIHN0cnVjdHVyZSB0bwoJbG9vay1hbGlrZSBpcGNfd3JhcHBlciB0byBhdm9pZCBkZXBlbmRlbmNlIG9uIF9fS0VSTkVMX18uCgoJbWVtLmMgKG1tYXBfZmxhZ3MpIFtNQVBfe0dST1dTRE9XTixERU5ZV1JJVEUsRVhFQ1VUQUJMRX1dOiBBZGQKIAlMaW51eCBzcGVjaWZpYyBvcHRpb25zLgoKCXN5c2NhbGwuYzogVXNlIFNZU19FUlJMSVNUX0RFQ0xBUkVEIGluc3RlYWQgb2YgZ3Vlc3NpbmcuCiAgCVtFe1JFU1RBUlR7U1lTLE5Pe0lOVFIsSEFORH19LE5PSU9DVExDTUR9XTogRXhwbGljaXRseSBkZWZpbmUKIAlpbnN0ZWFkIG9mIGRlcGVuZGluZyBvZiBfX0tFUk5FTF9fLgoKCXRlcm0uYzogQ2FzdCBjX3tpLG8sYyxsfWZsYWcgdG8gbG9uZyB3aGVuIHVzaW5nIHByaW50Zi4KClR1ZSBKdW4gIDYgMDA6Mjc6NDggMTk5NSAgUmljayBTbGFka2V5ICA8anJzQHdvcmxkLnN0ZC5jb20+CgoJKiBhY2xvY2FsLm00IChBQ19ERUNMX1NZU19FUlJMSVNULCBBQ19ERUNMX19TWVNfU0lHTElTVCk6IE5ldy4KCSogY29uZmlndXJlLmluOiBDYWxsIEFDX0RFQ0xfU1lTX0VSUkxJU1QsIEFDX0RFQ0xfU1lTX1NJR0xJU1QsCglhbmQgQUNfREVDTF9fU1lTX1NJR0xJU1QuCgkqIGFjY29uZmlnLmggKFNZU19FUlJMSVNUX0RFQ0xBUkVEKTogTmV3LgoJKiBzdHJhY2UuYyAoc3RyZXJyb3IpOiBVc2UgU1lTX0VSUkxJU1RfREVDTEFSRUQuCgkoc3Ryc2lnbmFsKTogVXNlIFNZU19TSUdMSVNUX0RFQ0xBUkVELgoKCW5ldC5jIChzeXNfc29ja2V0KTogT21pdCBpbmFkdmVydGVudCBzdXJwbHVzIGNvbW1hIHdoZW4KCXByb3RvY29sIGZhbWlseSBpc24ndCBQRl9JTkVULgoKCXV0aWwuYyAoZHVtcHN0cik6IEZpeCBpbmNvcnJlY3QgcHJpbnRpbmcgb2Ygb25lIHRvbyBtYW55CgljaGFyYWN0ZXJzIHdoZW4gdGhlIGxlbmd0aCBpcyBub3QgYW4gZXZlbiBtdWx0aXBsZSBvZiAxNiBieXRlcy4KCVJlcG9ydGVkIGJ5IEp1ZXJnZW4gV2VpZ2VydAoJPGpud2VpZ2VyQGltbWQ0LmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPi4KClRodSBNYXkgIDQgMjM6Mzc6NDcgMTk5NSAgUmljayBTbGFka2V5ICA8anJzQHdvcmxkLnN0ZC5jb20+CgoJKiBpb2N0bC5jIChjb21wYXJlKTogQ2hhbmdlIHByb3RvdHlwZSB0byBtYXRjaCBQT1NJWCBxc29ydC4KCSogc2lnbmFsLmMgKHNpZ2lzaGFuZGxlZCkgW1NWUjRdOiBPbWl0IGV2ZXJ5dGhpbmcgYWZ0ZXIgcmV0dXJuLgoJKiBzdHJhY2UuYyAodHJhY2UpIFtTVlI0XTogQnJlYWsgb3V0IG9mIGZvciBsb29wIGluc3RlYWQgb2YKCXJldHVybmluZyB3aGVuIGZpbmlzaGVkIHNvIGZpbmFsIHJldHVybiBzdGF0ZW1lbnQgaXMgZXhlY3V0ZWQuCgkqIHN5c2NhbGwuYyAoaW50ZXJuYWxfc3lzY2FsbCk6IEFkZCBtb3JlIFNZU193YWl0KiB2YXJpYXRpb25zLgoJKHN5c2NhbGwpIFtMSU5VWF06IENvcnJlY3QgdHlwbyB3aGljaCBjb21tZW50ZWQgb3V0IHRoZSBNNjhLCglhcmd1bWVudCB0byBpZmRlZi4KCSogdXRpbC5jIChwcmludHN0cik6IENhc3QgdW5zaWduZWQgY2hhciBwb2ludGVyIGFyZ3VtZW50Cgl0byBjaGFyIHBvaW50ZXIgaW4gdW1vdmVzdHIgY2FsbC4KCShkdW1wc3RyKTogTGlrZXdpc2UgZm9yIHVtb3Zlbi4KCldlZCBNYXkgIDMgMDE6MTA6NTYgMTk5NSAgUmljayBTbGFka2V5ICA8anJzQHdvcmxkLnN0ZC5jb20+CgoJKiB2ZXJzaW9uLmM6IFZlcnNpb24gMy4wLjQgaXMgcmVsZWFzZWQuCgoJKiBzaWduYWwuYyAoc3lzX3NpZ2Jsb2NrKTogTW92ZSBhZnRlciB0aGUgZGVmaW5pdGlvbiBvZgoJc3lzX3NpZ3NldG1hc2sgdGhhdCBpdCBjYWxscyB0byBhdm9pZCBhbiBpbXBsaWNpdCBkZWNsYXJhdGlvbi4KCSogc3RyZWFtLmMgKHRyYW5zcG9ydF91c2VyX29wdGlvbnMsIHRyYW5zcG9ydF9zZXJ2ZXJfb3B0aW9ucyk6CglPbmx5IG5lZWRlZCBpZiBUSV9CSU5EIGlzIGRlZmluZWQuCgkqIGNvbmZpZ3VyZS5pbjogQWRkIC1Xbm8taW1wbGljaXQgdG8gV0FSTkZMQUdTIG9uIFN1bk9TIDQueC4KCgkqIHByb2Nlc3MuYyAoaW50ZXJuYWxfZm9yaykgW1NWUjRdOiBGaXggYSB0eXBvIHRoYXQgb21pdHRlZAoJdGhlIHRjcCBhcmd1ZW1lbnQgZnJvbSB0aGUgY2FsbCB0byBleGl0aW5nLiAgQWRkIGdldHJ2YWwyCgljaGVjayBzbyBubyBmb3JrIHByb2Nlc3NpbmcgaXMgZG9uZSBpbiB0aGUgY2hpbGQuCgkocHJpbnR3YWl0bik6IEluaXRpYWxpemUgZXhpdGVkIHNvIHRoYXQgaXRzIHZhbHVlIGlzIGRlZmluZWQKCWZvciBhbGwgZmxvd3Mgb2YgZXhlY3V0aW9uLgoKVHVlIE1heSAgMiAyMjozOTo0MiAxOTk1ICBSaWNrIFNsYWRrZXkgIDxqcnNAd29ybGQuc3RkLmNvbT4KCgkqIGxpbnV4L2R1bW15Lmg6IEFkZCBhbGlhc2VzIGZvciBzeXNmcywgcGVyc29uYWxpdHksIGFmc19zeXNjYWxsLAoJc2V0ZnN1aWQsIHNldGZzZ2lkLCBhbmQgX2xsc2VlayBzeXNjYWxscy4KCSogbGludXgvc3lzY2FsbC5oOiBBZGQgcHJvdG90eXBlcyBmb3IgdGhlbS4KCSogbGludXgvc3lzY2FsbGVudC5oOiBBZGQgdGhlbSB0byB0aGUgc3lzY2FsbCBlbnRyaWVzIHRhYmxlLgoJKiBzeXN0ZW0uYyAoaGVhZGVycykgW0xJTlVYXTogSW5jbHVkZSBsaW51eC91bmlzdGQuaCB0byBnZXQgX19OUl8qCglkZWZpbmVzIGFuZCBjb25kaXRpb25hbGx5IGluY2x1ZGUgbGludXgvcGVyc29uYWxpdHkuaCBpZgoJX19OUl9wZXJzb25hbGl0eSBpcyBkZWZpbmVkLgoJKHBlcnNvbmFsaXR5X29wdGlvbnMpIFtMSU5VWF06IE5ldyB0YWJsZS4KCShzeXNfcGVyc29uYWxpdHkpIFtMSU5VWF06IE5ldyBmdW5jdGlvbi4KClR1ZSBNYXkgIDIgMDA6MjA6MzkgMTk5NSAgUmljayBTbGFka2V5ICA8anJzQHdvcmxkLnN0ZC5jb20+CgoJKiBzdHJhY2UuYyAodHJhY2UpIFshU1ZSNF06IENoYW5nZSBmb3JldmVyIGxvb3AgdG8gb25lIHByZWRpY2F0ZWQKCW9uIHRoZSBudW1iZXIgb2YgdHJhY2VkIHByb2Nlc3NlcyBzbyB0aGF0IHdlIGNhbiBoYXZlIHVudHJhY2VkCgljaGlsZHJlbiAoZS5nLiB2aWEgcG9wZW4pLgoKCSogc3RyYWNlIChtYWluKSBbIVNWUjRdOiBDYWxsIGZha2VfZXhlY3ZlIHRvIGdldCB0aGUgYWN0dWFsCglleGVjIGFuZCBpdHMgYXJndW1lbnRzIGludG8gdGhlIHRyYWNlLgoJKGVudmlyb24pOiBEZWNsYXJlIGl0LgoJKiBwcm9jZXNzLmMgKGZha2VfZXhlY3ZlKTogTmV3IGZ1bmN0aW9uLgoJKGhlYWRlcnMpOiBJbmNsdWRlIHN5cy9zeXNjYWxsLmggdG8gZ2V0IFNZU18qIGRlZmluZXMuCgoJKiBwcm9jZXNzLmMgKHN5c19leGVjdiwgc3lzX2V4ZWN2ZSk6IFN1cnJvdW5kIGFyZ3VtZW50IGFubm90YXRpb25zCgl3aXRoIEMgY29tbWVudCBkZWxpbWl0ZXJzLgoJKHByaW50YXJndiwgcHJpbnRhcmdjKTogVGhlIGFyZyB2ZWN0b3IgaXMgYW4gYXJyYXkgb2YgY2hhciBwb2ludGVycwoJbm90IGludHMuCgoJKiBzdHJhY2UuYyAocHJpbnRsZWFkZXIpOiBBbHNvIGNoZWNrIGZvciBtdWx0aXBsZSAtcCBhcmd1bWVudHMKCXdoZW4gZGVjaWRpbmcgd2hldGhlciB0byBwcmludCB0aGUgcGlkIGZpZWxkLgoKCSogc3RyYWNlLmMgKHN0cmVycm9yKSBbIUhBVkVfU1RSRVJST1JdOiBOZXcgZnVuY3Rpb24uCgkqIGRlZnMuaCAoc3RyZXJyb3IsIHN0cnNpZ25hbCk6IEFkZCB0aGVzZSBwcm90b3R5cGVzIGlmIHdlIHByb3ZpZGUKCXRoZSBmdW5jdGlvbnMuCgkqIGNvbmZpZ3VyZS5pbiAoQUNfQ0hFQ0tfRlVOQ1MpOiBBZGQgc3RyZXJyb3IuCgoJKiBzdHJhY2UuYyAobWFpbiwgcHJvY19wb2xsZXIpOiBBZGQgU0lHUElQRSB0byB0aGUgbGlzdCBvZiBjYXVnaHQKCWFuZCBibG9ja2VkIHNpZ25hbHMuCgoJKiBzdHJhY2UuYyAobWFpbik6IEFkZCB1c2VybmFtZSBvcHRpb24uICBWZXJpZnkgdGhleSBhcmUgcm9vdCBiZWZvcmUKCWxldHRpbmcgdGhlbSB1c2UgaXQuICBMb29rIHVwIHRoZSBpZHMgaW4gdGhlIHBhc3N3b3JkIGZpbGUuICBTZXQKCXRoZW0ganVzdCBiZWZvcmUgZXhlY3V0aW5nIHRoZSBwcm9ncmFtLgoJRnJvbSBSZXViZW4gU3VtbmVyIDxyYXN1bW5lckB1bmRlcmdyYWQubWF0aC51d2F0ZXJsb28uY2E+LgoKU2F0IEFwciAyOSAwMDowOTo1NiAxOTk1ICBSaWNrIFNsYWRrZXkgIDxqcnNAd29ybGQuc3RkLmNvbT4KCgkqIHZlcnNpb24uYzogVmVyc2lvbiAzLjAuMyBpcyByZWxlYXNlZC4KCgkqIHN5c3RlbS5jIChtb3VudF9mbGFncykgW0xJTlVYXTogT21pdCBkdXBsaWNhdGVkIE1TX05PU1VJRCBlbnRyeS4KCUZyb20gUmV1YmVuIFN1bW5lciA8cmFzdW1uZXJAdW5kZXJncmFkLm1hdGgudXdhdGVybG9vLmNhPi4KCgkqIHN0cmFjZS5jIChvdXRmbmFtZSk6IEluaXRpYWxpemUgdG8gTlVMTC4KCShtYWluKTogRGVmZXIgb3V0cHV0IGZpbGUgcHJvY2Vzc2luZyB1bnRpbCBhZnRlciBhcmd1bWVudHMuCglBbGxvdyBlaXRoZXIgYSBwaXBlIG9yIGEgYmFuZyBmb3IgY29tbWFuZCBhcmd1bWVudHMuCglDaGVjayBpZiBvdXRmbmFtZSBpcyBOVUxMIGluc3RlYWQgb2YgY2hlY2tpbmcgb3V0ZiBmb3Igc3RkZXJyLgoJUmVpbml0aWFsaXplIGVhY2ggc3RhcnR1cCBUQ0IncyBvdXRmIHRvIGZpeCAtcC8tbyBvcmRlcmluZyBidWcuCgkoZHJvcHRjYik6IFJlc2V0IGNsb3NlIFRDQidzIG91dGYgdG8gTlVMTCBpbnN0ZWFkIG9mIHN0ZGVyci4KCSh0cHJpbnRmKTogQXZvaWQgY2FsbGluZyB2ZnByaW50ZiBpZiBvdXRmIGlzIE5VTEwuCgoJKiBzdHJhY2UuYyAobWFpbik6IFVzZSBwb3BlbiBpZiAtbyBhcmd1bWVudCBiZWdpbnMgd2l0aCBhIHBpcGUuCglGcm9tIE1hcnR5IExlaXNuZXIgPGxlaXNuZXJAc2RzcC5tYy54ZXJveC5jb20+LgoKCSogcHJvY2Vzcy5jIChwcmludHN0YXR1cyk6IEZpeCBhIHR5cG8gd2hlcmUgV0lGU0lHTkFMRUQgd2FzIG1lYW50CglidXQgV0lGU1RPUFBFRCB3YXMgdXNlZC4KCgkqIE1ha2VmaWxlLmluOiBBZGQgYW4gRVhUUkFfREVGUyB2YXJpYWJsZSBhbmQgdXNlIGl0IGluIHRoZSAuYy5vCglydWxlIHRvIHByZXZlbnQgdGhlIGNvbW1lbnQgZnJvbSBiZWluZyB1bnRydWUuCgpGcmkgQXByIDI4IDIyOjAxOjU2IDE5OTUgIFJpY2sgU2xhZGtleSAgPGpyc0B3b3JsZC5zdGQuY29tPgoKCSogc3RyYWNlLmMgKHN5c19leGl0KTogTW92ZSBmb2xsb3cgZm9yayBjb2RlIHRvIGludGVybmFsX2V4aXQuCgkoc3lzX2ZvcmspOiBNb3ZlIGZvbGxvdyBmb3JrIGNvZGUgdG8gaW50ZXJuYWxfZm9yay4KCShzeXNfZXhlY3YsIHN5c19leGVjdmUpOiBNb3ZlIGZvbGxvdyBmb3JrIGNvZGUgdG8gaW50ZXJuYWxfZXhlYy4KCShzeXNfd2FpdHBpZCwgc3lzX3dhaXQ0KTogTW92ZSBmb2xsb3cgZm9yayBjb2RlIHRvIGludGVybmFsX3dhaXQuCgkodmZvcmtpbmcpOiBSZW1vdmUgdGhpcyBzdGF0aWMgdmFyaWFibGUgYW5kIGNoZWNrIHNjbm8gaW4KCWludGVybmFsX2ZvcmsgaW5zdGVhZC4KCShpbnRlcm5hbF9leGl0LCBpbnRlcm5hbF9mb3JrLCBpbnRlcm5hbF9leGVjLCBpbnRlcm5hbF93YWl0KTogTmV3CglmdW5jdGlvbnMuCgkqIGRlZnMuaDogQWRkIHByb3RvdHlwZXMgZm9yIHRoZSBuZXcgaW50ZXJuYWxfKiBmdW5jdGlvbnMuCgkqIHN5c2NhbGwuYyAoc3lzY2FsbCk6IE1vdmUgc3lzY2FsbCBlbnRlcmluZyB0cmFjZSBxdWFsaWZpZXIgY2hlY2sKCWFuZCByZXByaW50IGNoZWNraW5nIGFmdGVyIGNvbnRleHQgZGVjb2RpbmcgYW5kIHByZWNlZGUgdGhlbSB3aXRoCglhIGNhbGwgdG8gaW50ZXJuYWxfc3lzY2FsbC4gIFByZWNlZGUgc3lzY2FsbCBleGl0aW5nIHRyYWNlCglxdWFsaWZpZXIgY2hlY2sgd2l0aCBhIGNhbGwgdG8gaW50ZXJuYWxfc3lzY2FsbC4KCShpbnRlcm5hbF9zeXNjYWxsKTogTmV3IGZ1bmN0aW9uLgoKCSogZGVmcy5oIChzdHJ1Y3QgdGNiKTogTWFrZSBzY25vIHNpZ25lZC4KCSogc3RyYWNlLmMgKHN5c2NhbGwpIE1ha2UgdV9lcnJvciBzaWduZWQuCglbTElOVVgsIEkzODZdOiBBdm9pZCB1bnNpZ25lZCBjYXN0IGluIGVheCBjaGVjay4KCSogc3lzY2FsbC5jIChzeXNfaW5kaXIpOiBNYWtlIGksIHNjbm8sIGFuZCBuYXJncyBzaWduZWQuCgkqIGRlc2MuYyAoc3lzX3NlbGVjdCk6IE1ha2UgY3VtbGVuIHVuc2lnbmVkCgpNb24gQXByIDI0IDIzOjUyOjQ3IDE5OTUgIFJpY2sgU2xhZGtleSAgPGpyc0B3b3JsZC5zdGQuY29tPgoKCSogbmV0LmMgKHNvY2t0eXBlcyk6IEFkZCBTT0NLX1BBQ0tFVC4KClN1biBBcHIgIDIgMjM6NTA6MzkgMTk5NSAgUmljayBTbGFka2V5ICA8anJzQHdvcmxkLnN0ZC5jb20+CgoJKiBNYWtlZmlsZSAoY2xlYW4pOiBDaGVjayBleHBsaWNpdGx5IGZvciBhIE1ha2VmaWxlIGluIHN1YmRpcnMKCWJlZm9yZSBydW5uaW5nIG1ha2UgaW4gdGhlbS4KClN1biBNYXIgMjYgMTI6Mzc6MjEgMTk5NSAgUmljayBTbGFka2V5ICA8anJzQHdvcmxkLnN0ZC5jb20+CgoJKiBzdHJhY2UuYyBbTUlQU10gKHByb2Nfb3Blbik6IENvbmRpdGlvbmFsaXplIHJ1biBvbiBNSVBTLgoJW01JUFNdIChkZXRhY2gpOiBJbml0aWFsaXplIGVycm9yIGZvciBNSVBTIGNhc2UuCgkodHJhY2UpOiBJbml0aWFsaXplIGlvY3RsX3Jlc3VsdCBhbmQgaW9jdGxfZXJybm8gZm9yIG92ZXJseSBoZWxwZnVsCgljb21waWxlcnMuCgkqIHN5c2NhbGwuYyAoZGVjb2RlX3N1YmNhbGwpOiBNb3ZlIHZhcmlhYmxlIGkgaW50byBjb25kaXRpb25hbHMKCXRoYXQgdXNlIHVzZSBpdC4KCSogc3lzdGVtLmMgKHN5c3NnaV9vcHRpb25zKTogQ29uZGl0aW9uYWxpemUgU0dJX1JFQ1ZMTVNHIGFuZAoJU0dJX1NFVF9GUERFQlVHIHRoYXQgU0dJIGRlY2lkZWQgdG8gZHJvcC4gIEkgZG9uJ3QgaGF2ZSB0aGUgc3RvbWFjaAoJdG8gY2hhbmdlIHRoZW0gYWxsLgoJKiB0ZXJtLmMgKHRlcm1faW9jdGwpOiBGb3JjZSBbY19baW9jbF1mbGFncyBtZW1iZXJzIHRvIGxvbmcgYmVmb3JlCglwcmludGluZyBzaW5jZSB3ZSBkb24ndCBrbm93IHdoYXQgdGhlIHNpemUgb2YgdGhlaXIgdHlwZSBpcy4KCSogdXRpbC5jIFtTVlI0LCBNSVBTXSAodW1vdmVuKTogUHJldmVudCBNSVBTIGZyb20gdXNpbmcgcHJlYWQgZXZlbgoJaWYgYXV0b2NvbmYgZGV0ZWN0cyBpdCBzaW5jZSBpdCBzZWVtcyB0byBlaXRoZXIgbm90IHdvcmsgb3IgZG8KCXNvbWV0aGluZyBlbHNlIGVudGlyZWx5IG9uIElyaXggNS4zLgoKU3VuIE1hciAyNiAwMDowMToxMSAxOTk1ICBSaWNrIFNsYWRrZXkgIDxqcnNAd29ybGQuc3RkLmNvbT4KCgkqIHZlcnNpb24uYzogVmVyc2lvbiAzLjAuMiBpcyByZWxlYXNlZC4KCSogbGludXgvZHVtbXkuaDogTWFrZSBzeXNfZmNoZGlyIGxpa2Ugc3lzX2Nsb3NlIGluc3RlYWQgb2YgcHJpbnRhcmdzCglzbyB0aGF0IHRoZSBmaWxlIGRlc2NyaXB0b3IgYXJnIGlzIGRlY2ltYWwuCgpTYXQgTWFyIDI1IDIyOjUwOjEzIDE5OTUgIFJpY2sgU2xhZGtleSAgPGpyc0B3b3JsZC5zdGQuY29tPgoKCSogbmV0LmMgW0xJTlVYXSAocHJvdG9jb2xzKTogRXhwbGljaXRseSBkZWZpbmUgYWxsIElQUFJPVE9fKiBlbnRyaWVzCgliZWNhdXNlIG9uIExpbnV4IHRoZXkgYXJlIGVudW1lcmF0b3JzLgoKCSogc3lzdGVtLmMgW0xJTlVYXSAobW91bnRfZmxhZ3MpOiBIYW5kbGUgcmVuYW1pbmcgb2YgTVNfU1lOQyB0bwoJTVNfU1lOQ0hST05PVVMuCgoJKiB1dGlsLmMgKHByaW50eHZhbCk6IFdoZW4gdGhlcmUgaXMgbm8gdHJhbnNsYXRpb24sIHByaW50IHRoZSBhY3R1YWwKCW51bWJlciBmaXJzdCBhbmQgdGhlIHRoZSBkZWZhdWx0IHZhbHVlIGFzIGEgQyBjb21tZW50LgoKCSogbmV0LmMgKHN5c19zZW5kLCBzeXNfc2VuZHRvLCBzeXNfc2VuZG1zZywgc3lzX2dldHNvY2tvcHQsCglzeXNfc2V0c29ja29wdCk6IENoYW5nZSBmaXJzdCBhcmd1bWVudCBmcm9tIHVuc2lnbmVkIHRvIHNpZ25lZCB0bwoJY2F0ZXIgdG8gdGhlIGZyZXF1ZW50IHByYWN0aWNlIG9mIGNhbGxpbmcgc3lzdGVtIGNhbGxzIHdpdGggYSBmaWxlCglkZXNjcmlwdG9yIG9mIC0xLgoJKiBtZW0uYyAoc3lzX21tYXApOiBMaWtld2lzZS4KClN1biBNYXIgMTkgMTM6NTM6NTIgMTk5NSAgUmljayBTbGFka2V5ICA8anJzQHdvcmxkLnN0ZC5jb20+CgoJKiBzaWduYWwuYyBbTElOVVhdIChzaWduYWxlbnQpOiBIYW5kbGUgb2xkIGFuZCBuZXcgdmFsdWVzIG9mIFNJR0lPLgoKU3VuIERlYyAxMSAyMjo1MTo1MSAxOTk0ICBSaWNrIFNsYWRrZXkgIDxqcnNAd29ybGQuc3RkLmNvbT4KCgkqIHZlcnNpb24uYzogVmVyc2lvbiAzLjAuMSBpcyByZWxlYXNlZC4KCSogTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZS5pbiwgYWNsb2NhbC5tNDogQ2hhbmdlcyBmb3IgYXV0b2NvbmYgMi4wLgoJKiBjb25maWcuZ3Vlc3MsIGNvbmZpZy5ndWVzczogVXBkYXRlIGZyb20gdGhlIEZTRi4KCSogaW5zdGFsbC1zaDogTmV3IGZyb20gdGhlIEZTRi4KCk1vbiBEZWMgIDUgMjA6NTE6MjkgMTk5NCAgUmljayBTbGFka2V5ICA8anJzQHdvcmxkLnN0ZC5jb20+CgoJKiBNYWtlZmlsZS5pbjogQWRkIG02OGsgYXJjaC4KCSogYWNjb25maWcuaCAoTTY4Syk6IEFkZCBtNjhrIGRlZmluZS4KCSogY29uZmlndXJlLmluOiBBZGQgZGV0ZWN0aW9uIG9mIGFyY2ggbTY4ay4KCSogcHJvY2Vzcy5jIFtNNjhLXSAoc3RydWN0X3VzZXJfb2Zmc2V0cyk6IFN1cHBvcnQgbTY4ayByZWdpc3RlcnMgYW5kCglvZmZzZXRzLgoJKiBzaWduYWwuYyBbTTY4S10gKHNpZ2NvbnRleHRfc3RydWN0KTogU3VwcG9ydCBtNjhrIHNpZ2NvbnRleHQKCXN0cnVjdHVyZS4KCVtNNjhLXSAoc3lzX3NpZ3JldHVybik6IFN1cHBvcnQgbTY4ayBzaWdyZXR1cm4gaGFuZGxpbmcuCgkqIHN5c2NhbGwuYyBbTTY4S10gKHN5c2NhbGwpOiBTdXBwb3J0IG02OGsgc3lzY2FsbCBudW1iZXIgcmVnaXN0ZXIKCWFuZCBlcnJubyBpbiBkMCBpbnN0ZWFkIG9mIGVheC4KCSogdXRpbC5jIFtNNjhLXSAoZ2V0cGMsIHByaW50Y2FsbCwgc2V0YnB0LCBjbGVhcmJwdCk6IFN1cHBvcnQgbTY4awoJcHJvZ3JhbSBjb3VudGVyIGluIFBUX1BDIGluc3RlYWQgb2YgRUlQLgoJW002OEtdIChMT09QKTogU3VwcG9ydCBtNjhrIGxvb3AgaW5zdHJ1Y3Rpb24uCglGcm9tIEFuZHJlYXMgU2Nod2FiIDxzY2h3YWJAaXNzYW4uaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGU+LgoKCSogbWVtLmMgW01BUF9BTk9OWU1PVVNdIChtbWFwX2ZsYWdzKTogQ29ycmVjdCBpbmFkdmVydGVudCByZWZlcmVuY2UKCXRvIE1BUF9GSVhFRCBpbnN0ZWFkIG9mIE1BUF9BTk9OWU1PVVMuCglGcm9tIEFuZHJlYXMgU2Nod2FiIDxzY2h3YWJAaXNzYW4uaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGU+LgoKCSogc2lnbmFsLmMgW0xJTlVYXSAoc2lnbmFsZW50KTogU2lnbmFsIDMwIGlzIG5vdyBTSUdQV1IuCglGcm9tIEFuZHJlYXMgU2Nod2FiIDxzY2h3YWJAaXNzYW4uaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGU+LgoKTW9uIERlYyAgNSAwMTowNTo0NiAxOTk0ICBSaWNrIFNsYWRrZXkgIDxqcnNAd29ybGQuc3RkLmNvbT4KCgkqIGRlZnMuaCAodHByaW50Zik6IEZpeCB0eXBvIGluIG5vbi1nY2MgYW5zaSBwcm90b3R5cGUgZm9yIHRwcmludGYuCglSZXBvcnRlZCBieSBUaGFuaCBNYSA8dG1hQGVuY29yZS5jb20+LgoKCSogc3RyYWNlLmMgKGNsZWFudXApOiBTZW5kIFNJR0NPTlQgYmVmb3JlIFNJR1RFUk0gYmVjYXVzZSBMaW51eAoJMS4xLjYyIGRvZXNuJ3QgY29udGludWUgYSB0cmFjZWQgY2hpbGQgd2hlbiB0aGUgcGFyZW50IGV4aXRzLgoJUmVwb3J0ZWQgYnkgTWF0dCBEYXkgPG1kYXlAYXJ0aXNvZnQuY29tPi4KCgkqIHN5c3RlbS5jIFtMSU5VWF06IEluY2x1ZGUgbmV0aW5ldC9pbi5oIGJlZm9yZSBhcnBhL2luZXQuaC4KCgkqIHV0aWwuYyAocHJpbnRzdHIpOiBGaXggbG9uZ3N0YW5kaW5nIGJ1ZyBpbiBub3RhdGluZyBzdHJpbmcKCWNvbnRpbnVhdGlvbi4KCgkqIHN0cmFjZS5jIFtTVlI0XSAocHJvY19vcGVuKTogU3BlY2lmaWNhbGx5IHdhaXQgZm9yIHRoZSBjaGlsZCB0aGUKCWNoaWxkIHRvIGdvIGludG8gdGhlIGV4ZWN2ZSBzeXNjYWxsIHRvIGF2b2lkIHNwdXJpb3VzIHRyYWNlcy4KCVtMSU5VWF0gKGRldGFjaCk6IENvbmRpdGlvbmFsaXplIHRoZSBzdGF0dXMgdmFyaWFibGUuCgpTdW4gRGVjICA0IDIzOjIxOjQyIDE5OTQgIFJpY2sgU2xhZGtleSAgPGpyc0B3b3JsZC5zdGQuY29tPgoKCSogTWFrZWZpbGUuaW46IEFkZCBtaXBzIGFyY2guCgkqIGFjY29uZmlnLmggKE1JUFMpOiBBZGQgbWlwcyBkZWZpbmUuCgkqIGNvbmZpZ3VyZS5pbjogQWRkIGRldGVjdGlvbiBvZiBvcHN5cyBpcml4NSBhbmQgYXJjaCBtaXBzLiAgQ2hlY2sKCWZvciBwcmN0bCBmdW5jdGlvbi4KCUNoZWNrIGZvciBzeXMvc3lzY29uZmlnLmggaGVhZGVyLgoJKiBkZWZzLmggKE1BWF9BUkdTKTogQnVtcCBtYXhpbXVtIHN5c2NhbGwgYXJndW1lbnRzIGZyb20gOCB0byAzMi4KCSogZmlsZS5jIFtTVlI0XTogSW5jbHVkZSBzeXMvY3JlZC5oLgoJKGFjY2Vzc19mbGFncyk6IFVwZGF0ZSBhY2Nlc3MgZmxhZ3MgZm9yIFNHSS4KCShzcHJpbnR0aW1lKTogQ2hhbmdlIHR5cGUgb2Ygc3ByaW50dGltZSBhcmd1bWVudCBmcm9tIHVuc2lnbmVkCglsb25nIHRvIHRpbWVfdC4KCSogcHJvY2Vzcy5jIFtIQVZFX1BSQ1RMXTogSW5jbHVkZSBzeXMvcHJjdGwuaC4KCVtIQVZFX1BSQ1RMXSAocHJjdGxfb3B0aW9ucywgc3lzX3ByY3RsKTogTmV3IGZvciBTR0kuCgkocHJpbnRzaWdpbmZvKTogQ29uZGl0aW9uYWxseSBjb21waWxlIFNJX1RJTUVSIGFuZCBTSV9NRVNHUS4KCUNhc3Qgc2lfYmFuZCBtZW1iZXIgdG8gbG9uZyBiZWZvcmUgcHJpbnRpbmcuCgkqIHNpZ25hbC5jIChzaWdhY3RfZmxhZ3MpOiBBZGQgX1NBX0JTRENBTEwgZm9yIFNHSS4KCShzaWdwcm9jbWFza2NtZHMpOiBBZGQgU0lHX1NFVE1BU0szMiBmb3IgU0dJLgoJKiBzdHJhY2UuYyBbU1ZSNF0gW01JUFNdOgoJKGZvb2Jhcik6IE5ldyBkdW1teSBzaWduYWwgaGFuZGxlci4KCShtYWluKTogSW5zdGFsbCBhIGR1bW15IHNpZ25hbCBoYW5kbGVyIGluIHRoZSBjaGlsZCBiZWZvcmUgcGF1c2luZwoJdG8gd29yayBhcm91bmQgYW4gU0dJIGJ1ZyBpbiBQUlNBQk9SVC4KCShwcm9jX29wZW4pOiBTZW5kIGEgaW50ZXJydXB0IHRvIHRoZSBjaGlsZCBpbnN0ZWFkIG9mIGFib3J0aW5nIHRoZQoJc3lzY2FsbCB3aGljaCBkb2Vzbid0IHdvcmsgb24gSXJpeDUuMi4KCSogc3ZyNC9kdW1teS5oOiBBZGQgbmV3IHVuZmluaXNoZWQgU0dJIHN5c2NhbGxzCgkoZS5nLiBzeXNfc3lzbXAsIHN5c19zZ2luYXAsIGV0Yy4pLiAgSGFuZGxlIHNvbWUgU0dJIHN5c2NhbGxzIGxpa2UKCWV4aXN0aW5nIGNhbGxzIChlLmcuIHN5c19rc2lnYWN0aW9uIGxpa2Ugc3lzX3NpZ2FjdGlvbikuCglQcmludGFyZ3MgZG9lcyB0aGUgcHJpbnQgdGhpbmcgZm9yIHN5c19zZXRob3N0aWQuCgkqIHN2cjQvc3lzY2FsbC5oOiBEZWNsYXJlIGFsbCBuZXcgU0dJIHN5c2NhbGxzLgoJKFNHSV9LTFVER0UpOiBEZWZpbmUgc3lzY2FsbCB0YWJsZSBzdGFydGluZyBpbmRleCB0byBiZSAxIGZvciBTR0kKCWFuZCBhZGQgaXQgdG8gYWxsIHN1YmNhbGwgZW50cnkgcG9pbnRzLgoJKFNZU19wZ3Jwc3lzX3N1YmNhbGwsIFNZU19zaWdjYWxsX3N1YmNhbGwsIFNZU19jb250ZXh0KTogRG9uJ3QKCWRlY29kZSBhcyBzdWJjYWxscyBvbiBNSVBTLiBJbnN0ZWFkLCB1c2UgdGhlIG5vcm1hbCBzeXNjYWxscy4KCSogc3ZyNC9zeXNjYWxsZW50LmggW01JUFNdOiBMZWFkIHN5c2NhbGwgdGFibGUgd2l0aCBhIGR1bW15IGVudHJ5CglzaW5jZSBTR0kgc3lzY2FsbCBudW1iZXJzIGFyZSBvZmYgYnkgb25lLgoJW01JUFNdIChzeXNfcGdycHN5cyk6IFJlbmFtZSB0byBzeXNfc2V0cGdycCBvbiBTR0kuCglbTUlQU10gKHN5c194ZW5peCk6IFJlbmFtZSB0byBzeXNfc3lzc2dpIG9uIFNHSS4KCVtNSVBTXSAoc3lzX3N5c21hY2hpbmUpOiBSZW5hbWUgdG8gc3lzX3N5c21pcHMgb24gU0dJLgoJW01JUFNdOiBDb25kaXRpb25hbGl6ZSBTVlI0IGV4dGVuc2lvbiBpbnRvIFNHSSBhbmQgU29sYXJpcyBjbGFzc2VzLgoJKiBzeXNjYWxsLmMgKGR1bXBpbyk6IFZhbGlkYXRlIGRlc2NyaXB0b3IgYWdhaW5zdCBNQVhfUVVBTFMuCglbSEFWRV9QUl9TWVNDQUxMXSAoc3lzY2FsbCk6IENvbmRpdGlvbmFsaXplIFNZU192Zm9yay4KCVtNSVBTXSAoc3lzY2FsbCk6IEFkZCBTR0kgc2VjdGlvbiBmb3IgZGVjb2RpbmcgdV9lcnJvciBhbmQgdV9ydmFsLgoJQWRkIHdvcmthcm91bmQgZm9yIGJyb2tlbiBTR0kgcHJfc3lzYXJnIG9uIHN5c2NhbGwgZW50cnkuCglbU1ZSNF0gKHN5c2NhbGwpOiBDb25kaXRpb25hbGl6ZSBzdWJjYWxsIGRlY29kaW5nIGZvcgoJU1lTX3B0cnBzeXNfc3ViY2FsbCwgU1lTX3NpZ2NhbGxfc3ViY2FsbCBhbmQgU1lTX2NvbnRleHRfc3ViY2FsbC4KCVtTVlI0XSBbTUlQU10gKGdldHJ2YWwyKTogSGFuZGxlIFNHSS4KCSogc3lzY2FsbGVudC5zaDogRG9yayB0aGUgc2VkIGxpbmUgdG8gYmUgY2hvb3NpZXIgYWJvdXQgU1lTXyBsaW5lcy4KCSogc3lzdGVtLmMgW0hBVkVfU1lTQ09ORklHX0hdOiBJbmNsdWRlIHN5cy9zeXNjb25maWcuaC4KCVtNSVBTXSAoc3lzc2dpX29wdGlvbnMsIHN5c19zeXNzZ2kpOiBOZXcgZm9yIFNHSS4K