ZGlmZiAtLWdpdCBhL0FOTk9VTkNFIGIvQU5OT1VOQ0UKaW5kZXggMTMyNWIzMC4uMzAyY2YzYSAxMDA2NDQKLS0tIGEvQU5OT1VOQ0UKKysrIGIvQU5OT1VOQ0UKQEAgLTEsMTUgKzEsMTUgQEAKLVRoaXMgaXMgcmVsZWFzZSA5ODA5Mjcgb2YgV2luZSwgdGhlIE1TIFdpbmRvd3MgZW11bGF0b3IuICBUaGlzIGlzIHN0aWxsIGEKK1RoaXMgaXMgcmVsZWFzZSA5ODEwMTggb2YgV2luZSwgdGhlIE1TIFdpbmRvd3MgZW11bGF0b3IuICBUaGlzIGlzIHN0aWxsIGEKIGRldmVsb3BlcidzIG9ubHkgcmVsZWFzZS4gIFRoZXJlIGFyZSBtYW55IGJ1Z3MgYW5kIG1hbnkgdW5pbXBsZW1lbnRlZCBBUEkKIGZlYXR1cmVzLiAgTW9zdCBhcHBsaWNhdGlvbnMgc3RpbGwgZG8gbm90IHdvcmsgY29ycmVjdGx5LgogCiBQYXRjaGVzIHNob3VsZCBiZSBzdWJtaXR0ZWQgdG8gImp1bGxpYXJkQGxyYy5lcGZsLmNoIi4gIFBsZWFzZSBkb24ndAogZm9yZ2V0IHRvIGluY2x1ZGUgYSBDaGFuZ2VMb2cgZW50cnkuCiAKLVdIQVQnUyBORVcgd2l0aCBXaW5lLTk4MDkyNzogKHNlZSBDaGFuZ2VMb2cgZm9yIGRldGFpbHMpCitXSEFUJ1MgTkVXIHdpdGggV2luZS05ODEwMTg6IChzZWUgQ2hhbmdlTG9nIGZvciBkZXRhaWxzKQorCS0gRUxGIERMTCBsb2FkZXIuCisJLSBTb21lIG1vcmUgRE9TIHN1cHBvcnQuCiAJLSBTdGlsbCBtb3JlIGNvbW1vbiBjb250cm9scyBhbmQgU0hFTEwzMiBmZWF0dXJlcy4KLQktIE1JREkgSS9PIHN1cHBvcnQuCi0JLSBTZXZlcmFsIG5ldyB1bmRvY3VtZW50ZWQgS0VSTkVMIGZ1bmN0aW9ucy4KLQktIE1vcmUgRE9TIGV4ZSBzdHVmZiBpbmNsdWRpbmcgc29tZSBkZWJ1Z2dlciBzdXBwb3J0LgorCS0gVXNpbmcgV2luZG93cyBuYXRpdmUgVVNFUi5ETEwgbWF5IHdvcmsuCiAJLSBMb3RzIG9mIGJ1ZyBmaXhlcy4KIAogU2VlIHRoZSBSRUFETUUgZmlsZSBpbiB0aGUgZGlzdHJpYnV0aW9uIGZvciBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zLgpAQCAtMTgsMTMgKzE4LDE2IEBACiB0aGUgcmVsZWFzZSBpcyBhdmFpbGFibGUgYXQgdGhlIGZ0cCBzaXRlcy4gIFRoZSBzb3VyY2VzIHdpbGwgYmUgYXZhaWxhYmxlCiBmcm9tIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOgogCi0gIGZ0cDovL3N1bnNpdGUudW5jLmVkdS9wdWIvTGludXgvQUxQSEEvd2luZS9kZXZlbG9wbWVudC9XaW5lLTk4MDkyNy50YXIuZ3oKLSAgZnRwOi8vdHN4LTExLm1pdC5lZHUvcHViL2xpbnV4L0FMUEhBL1dpbmUvZGV2ZWxvcG1lbnQvV2luZS05ODA5MjcudGFyLmd6Ci0gIGZ0cDovL2Z0cC5pbmZvbWFnaWMuY29tL3B1Yi9taXJyb3JzL2xpbnV4L3N1bnNpdGUvQUxQSEEvd2luZS9kZXZlbG9wbWVudC9XaW5lLTk4MDkyNy50YXIuZ3oKLSAgZnRwOi8vZnRwLnByb2dzb2MudXRzLmVkdS5hdS9wdWIvV2luZS9kZXZlbG9wbWVudC9XaW5lLTk4MDkyNy50YXIuZ3oKKyAgZnRwOi8vc3Vuc2l0ZS51bmMuZWR1L3B1Yi9MaW51eC9BTFBIQS93aW5lL2RldmVsb3BtZW50L1dpbmUtOTgxMDE4LnRhci5negorICBmdHA6Ly90c3gtMTEubWl0LmVkdS9wdWIvbGludXgvQUxQSEEvV2luZS9kZXZlbG9wbWVudC9XaW5lLTk4MTAxOC50YXIuZ3oKKyAgZnRwOi8vZnRwLmluZm9tYWdpYy5jb20vcHViL21pcnJvcnMvbGludXgvc3Vuc2l0ZS9BTFBIQS93aW5lL2RldmVsb3BtZW50L1dpbmUtOTgxMDE4LnRhci5negorICBmdHA6Ly9mdHAucHJvZ3NvYy51dHMuZWR1LmF1L3B1Yi9XaW5lL2RldmVsb3BtZW50L1dpbmUtOTgxMDE4LnRhci5negogCiBJdCBzaG91bGQgYWxzbyBiZSBhdmFpbGFibGUgZnJvbSBhbnkgc2l0ZSB0aGF0IG1pcnJvcnMgdHN4LTExIG9yIHN1bnNpdGUuCiAKK1lvdSBjYW4gYWxzbyBnZXQgdGhlIGN1cnJlbnQgc291cmNlIGRpcmVjdGx5IGZyb20gdGhlIENWUyB0cmVlLiBDaGVjaworaHR0cDovL3d3dy53aW5laHEuY29tL2N2cy5odG1sIGZvciBkZXRhaWxzLgorCiBJZiB5b3Ugc3VibWl0dGVkIGEgcGF0Y2gsIHBsZWFzZSBjaGVjayB0byBtYWtlIHN1cmUgaXQgaGFzIGJlZW4KIGluY2x1ZGVkIGluIHRoZSBuZXcgcmVsZWFzZS4KIApkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IDUwOGMzYWEuLjliMGY5OGMgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMTgwMTUgKzEsNTI1IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1TdW4gU2VwIDI3IDE0OjI1OjM4IDE5OTggIFBldHRlciBSZWluaG9sZHRzZW4gPHBlcmVAdGQub3JnLnVpdC5ubz4KK1N1biBPY3QgMTggMTQ6NDg6MzEgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KIAotCSogW2ZpbGVzL2RyaXZlLmNdCi0JTWFrZSBzdXJlIEdldERyaXZlVHlwZTMyQSgpIGhhbmRsZXMgcGFyYW0gTlVMTC4gIEFkZGVkIHNvbWUKLQlkb2Mgb24gZnVuY3Rpb24uCisJKiBmaWxlcy9maWxlLmM6IFV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KKwlUcnkgdG8gaW1wbGVtZW50IHRoZSBPRl9TSEFSRV9YWFggb3B0aW9ucy4KKwlNb3ZlIHRoZSBtb2RlIHRyYW5zbGF0aW9ucyB0byBmdW5jdGlvbnMuCiAKLVN1biBTZXAgMjcgMTQ6MDc6MjYgMTk5OCAgSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CisJKiBpbmNsdWRlL21haW4uaCwgb2xlL2NvbXBvYmouYywgb2xlL2lmcy5jLCBvbGUvb2xlMmRpc3AuYywgb2xlL29sZTJubHMuYywgb2xlL29sZXN2ci5jLCBvbGUvc3RvcmFnZS5jOgorCU1hdHRoZXcgQmVja2VyIDxtYmVja2VyQGdsYXNzY2l0eS5uZXQ+CisJRG9jdW1lbnRhdGlvbiB1cGRhdGVzLgogCi0JKiBbY29udHJvbHMvZWRpdC5jXSBbd2luZG93cy93aW4uY10KLQlEb24ndCBjYWxsIFNldFdpbmRvd0xvbmcoKSBpbiBFRElUX1dNX05DUkVBVEUuCi0JRml4IFNldFdpbmRvd0xvbmcoR1dMX1tFWF1TVFlMRSkgdG8gd29yayBmb3IgMTZiaXQgd2luZG93cy4gUmVtb3ZlCi0JVXBkYXRlV2luZG93KCkgY2FsbC4gCisJKiBvbGUvY29tcG9iai5jLCByZWxheTMyL29sZTMyLnNwZWM6CisJVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgorCUFkZGVkIHN0dWIgZm9yIENvU2V0U3RhdGUzMi4KIAotU3VuIFNlcCAyNyAxMzo0MToyMiAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KKwkqIG1pc2NlbXUvbWFpbi5jOiBDaGFkIFBvd2VsbCA8cHhweEB1c2EubmV0PgorCUFkZGVkIGFiaWxpdHkgdG8gcmVhZCBhIHN0YXJ0dXAgcHJvZ3JhbSBmcm9tIHdpbmUuaW5pIGZpbGUuCisJUHV0IGl0IGluIHNlY3Rpb24gW3Byb2dyYW1zXSBrZXkgU3RhcnR1cC4KIAotCSogW3NjaGVkdWxlci8qLmNdIFtzZXJ2ZXIvZXZlbnQuY10gW3NlcnZlci9tdXRleC5jXQotCSAgW3NlcnZlci9zZW1hcGhvcmUuY10KLQlJbXBsZW1lbnRlZCBzZXJ2ZXItc2lkZSBzeW5jaHJvbmlzYXRpb24gb2JqZWN0cy4KKwkqIGluY2x1ZGUvdHJhY2tiYXIuaCwgaW5jbHVkZS90cmVldmlldy5oLCBkbGxzL2NvbWN0bDMyL3RyYWNrYmFyLmMsIGRsbHMvY29tY3RsMzIvdHJlZXZpZXcuYzoKKwlBbGV4IFByaWVtIDxhbGV4cEBzY2kua3VuLm5sPgorCUZ1cnRoZXIgaW1wcm92ZW1lbnRzLgogCi1TdW4gU2VwIDI3IDEwOjA1OjIwIDE5OTggIEFuZHJlYXMgTW9ociA8MTAwLjMwOTM2QGdlcm1hbnkubmV0PgorCSogaW5jbHVkZS9jdXJzb3JpY29uLmgsIG9iamVjdHMvY3Vyc29yaWNvbi5jOgorCVR1cmNoYW5vdiBTZXJnZXkgPHR1cmNoYW5vdkB1c2EubmV0PgorCUltcGxlbWVudGVkIExvYWRDdXJzb3JGcm9tRmlsZSwgZml4ZWQgRHJhd0ljb25FeCB0byBzdXBwb3J0IG9mZnNjcmVlbgorCWRyYXdpbmcsIGZpeGVkIENVUlNPUklDT05fQ3JlYXRlRnJvbVJlc291cmNlIHRvIHN1cHBvcnQgTFJfIHNlbWFudGljcy4KIAotCSogW2RlYnVnZ2VyL2JyZWFrLmNdIFtpZjE2MzIvYnVpbHRpbi5jXSBbaW5jbHVkZS9tb2R1bGUuaF0KLQkgIFtsb2FkZXIvbmUvbW9kdWxlLmNdIFtsb2FkZXIvbmUvc2VnbWVudC5jXSBbbG9hZGVyL3Rhc2suY10KLQkgIFttZW1vcnkvbG9jYWwuY10gW3Rvb2xzL2J1aWxkLmNdCi0JRml4ZWQgdGhlIGxhc3QgcHJvYmxlbSB3aXRoIEJMSU5LRVIgcHJvZ3JhbXMuCi0JU0VHVEFCTEVFTlRSWS5zZWxlY3RvciBjYW4gYmUgYm90aCBzZWxlY3RvciBfb3JfIGhhbmRsZSwKLQlkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgc2VnbWVudCBpcyBmaXhlZCBvciBub3QuCisJKiBpbmNsdWRlL2JpdG1hcC5oLCBvYmplY3RzL2JpdG1hcC5jOgorCVR1cmNoYW5vdiBTZXJnZXkgPHR1cmNoYW5vdkB1c2EubmV0PgorCUZpeGVkIExvYWRJbWFnZSB0byBzdXBwb3J0IGFsbW9zdCBhbGwgTFJfIGZsYWdzLgogCi0JKiBbZGxscy9NYWtlZmlsZS5pbl0gW2RsbHMvd2luYXNwaS9NYWtlZmlsZS5pbl0KLQkgIFtkbGxzL3dpbmFzcGkvd2luYXNwaTE2LmNdIFtkbGxzL3duYXNwaTMyL01ha2VmaWxlLmluXQotCSAgW2RsbHMvd25hc3BpMzIvd2luYXNwaTMyLmNdIFtpZjE2MzIvd2luYXNwaS5zcGVjXSBbaW5jbHVkZS9hc3BpLmhdCi0JICBbaW5jbHVkZS93aW5hc3BpLmhdIFtpbmNsdWRlL3duYXNwaTMyLmhdIFttaXNjL2FzcGkuY10KLQkgIFtyZWxheTMyL3duYXNwaTMyLnNwZWNdCi0JQWRkZWQgQVNQSTMyIHN1cHBvcnQsIGdlbmVyYWwgQVNQSSBjaGFuZ2VzLgorCSogb2JqZWN0cy9kaWIuYzogVHVyY2hhbm92IFNlcmdleSA8dHVyY2hhbm92QHVzYS5uZXQ+CisJRml4ZWQgYnVnIGluIERJQl9TZXRJbWFnZUJpdHNfUkxFOCAoYmVjYXVzZSAnY29sb3InIHZhciB3YXMgV09SRCwgYWxsCisJQ09MT1JFRnMgaGFkIHJlZCBwYXJ0IHplcm9lZCkgdGhhdCBtYWRlIHBsZW50eSBvZiBjeWFuIGNvbG9ycywgbWlub3IKKwlidWcgZml4ZXMsIGNoYW5nZXMgdG8gc3VwcG9ydCBMUl8gZmxhZ3MuCiAKLQkqIFtpZjE2MzIvYXZpZmlsZS5zcGVjXSBbaWYxNjMyL2J1aWx0aW4uY10gW2lmMTYzMi9NYWtlZmlsZS5pbl0KLQlBZGRlZCBidWlsdC1pbiBBVklGSUxFLgorCSogaW5jbHVkZS9nbG9iYWwuaCwgbWVtb3J5L3ZpcnR1YWwuYzoKKwlUdXJjaGFub3YgU2VyZ2V5IDx0dXJjaGFub3ZAdXNhLm5ldD4KKwlBZGRlZCBWSVJUVUFMX01hcEZpbGVXIHRvIG1hcCBmaWxlIHRvIG1lbW9yeSBpbiBvbmUgZnVuY3Rpb24gY2FsbC4KIAotU3VuIFNlcCAyNyAwMToxMzozNSAxOTk4ICBBbGV4IFByaWVtIDxhbGV4cEBzY2kua3VuLm5sPgorCSogaW5jbHVkZS9kZHJhdy5oLCBpbmNsdWRlL3dpbmRvd3MuaCwgaW5jbHVkZS93aW50eXBlcy5oLCB3aW5kb3dzL211bHRpbW9uLmM6CisJVHVyY2hhbm92IFNlcmdleSA8dHVyY2hhbm92QHVzYS5uZXQ+CisJTW92ZWQgTXVsdGltb25pdG9yIEFQSSBkZWNsYXJhdGlvbnMgdG8gd2luZG93cy5oLgogCi0JKiBbZGxscy9jb21jdGwzMi90cmVldmlldy5jXSBbaW5jbHVkZS90cmVldmlldy5oXSBbaW5jbHVkZS9jb21jdGwuaF0KLQlUcmVldmlldyBpbXBsZW1lbnRhdGlvbi4KKwkqIGlmMTYzMi91c2VyLnNwZWMsIGluY2x1ZGUvZHJpdmVyLmgsIG11bHRpbWVkaWEvYXVkaW8uYywgbXVsdGltZWRpYS9tY2lhbmltLmMsIG11bHRpbWVkaWEvbWNpY2RhLmMsIG11bHRpbWVkaWEvbWlkaS5jLCBtdWx0aW1lZGlhL21tc3lzdGVtLmMsIHJlbGF5MzIvd2lubW0uc3BlYywgd2luZG93cy9kcml2ZXIuYzoKKwlUdXJjaGFub3YgU2VyZ2V5IDx0dXJjaGFub3ZAdXNhLm5ldD4KKwlJbXBsZW1lbnRlZCBEZWZEcml2ZXJQcm9jMzIgZnJvbSB3aW5tbS5kbGwuCiAKLQkqIFtkbGxzL2NvbWN0bDMyL3RyYWNrYmFyLmNdIFtpbmNsdWRlL3RyYWNrYmFyLmhdIAotCVRyYWNrYmFyIGltcGxlbWVudGF0aW9uLgorCSogY29udHJvbHMvc2Nyb2xsLmMsIGluY2x1ZGUvc2Nyb2xsLmgsIHdpbmRvd3MvbWRpLmMsIHdpbmRvd3Mvbm9uY2xpZW50LmM6CisJQWxleCBLb3JvYmthIDxrb3JvYmthQGFtcy5zdW55c2IuZWR1PgorCUdvdCByaWQgb2YgZmxpY2tlcmluZyBzY3JvbGxiYXIgYXJyb3dzLiBNREkgc2Nyb2xsaW5nIHNwZWVkZWQgdXAgYQorCWJpdC4KIAotU2F0IFNlcCAyNiAyMDo0OToxMyAxOTk4ICBVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KKwkqIGluY2x1ZGUvd2lubmxzLmgsIG9sZS9ubHMvZGV1Lm5scywgb2xlL29sZTJubHMuYzoKKwlKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KKwlHZXRMb2NhbGVJbmZvMzJBIGNhbiBoYW5kbGUgbGVuPTAgbm93LCBzZXRzIExhc3RFcnJvciBhbmQgdG91Y2hlcworCWJ1ZmZlciBvbmx5IHdoZW4gbmVjZXNzYXJ5LgorCVVwZGF0ZWQgZGV1Lm5scyBhbmQgc29tZSBMQ1RZUEVTIGluIHdpbm5scy5oLgogCi0JKiBbaWYxNjMyL3RodW5rLmNdIFt0b29scy9idWlsZC5jXSBbd2luMzIva2VybmVsMzIuY10KLQlCdWdmaXg6IHNldmVyYWwgcHJvYmxlbXMgd2l0aCBmbGF0IHRodW5rcyBmaXhlZC4KKwkqIGlmMTYzMi9yZWxheS5jOiBSZWluIEtsYXplcyA8cmtsYXplc0BjYXNlbWEubmV0PgorCUNhbGxQcm9jW0V4XTMyVyBjYWxsZWQgd2l0aCBscFByb2NBZGRyZXNzPT1OVUxMIHNob3VsZCByZXR1cm4gemVybyBhbmQKKwlub3QgY3Jhc2guCiAKLQkqIFttZW1vcnkvc2VsZWN0b3IuY10KLQlCdWdmaXg6IElzQmFkLi4uUHRyMTYgZGlkbid0IHdvcmsgZm9yIGxpbWl0X2luX3BhZ2VzIHNlZ21lbnRzLgorU2F0IE9jdCAxNyAxMzowNzo0OCAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgogCi0JKiBbc2NoZWR1bGVyL3RocmVhZC5jXQotCUJ1Z2ZpeDogQ3JlYXRlVGhyZWFkOiBBbGxvdyBpZCBwYXJhbWV0ZXIgPT0gTlVMTC4KKwkqIGRsbHMvY29tY3RsMzIvY29tbWN0cmwuYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CisJUmVkdWNlZCBodWdlICgxR0IpIGhlYXAgY3JlYXRpb24gdGhhdCBjYXVzZWQgU3RhcmNyYWZ0IHRvIGZhaWwuCiAKLQkqIFtvYmplY3RzL2dkaW9iai5jXQotCUJ1Z2ZpeDogSXNHRElPYmplY3Q6IFJldHVybiBjb3JyZWN0IG9iamVjdCB0eXBlIGZvciBzdG9jayBvYmplY3RzLgorCSogaW5jbHVkZS9kb3NleGUuaCwgaW5jbHVkZS9tb2R1bGUuaCwgbG9hZGVyL2Rvcy9kb3N2bS5jLCBtdWx0aW1lZGlhL2RwbGF5LmMsIHdpbmRvd3MvZGlhbG9nLmM6CisJUGF0cmlrIFN0cmlkdmFsbCA8cHNAbGVpc3NuZXIuc2U+CisJQ29tcGlsZSBmaXggZm9yIFNvbGFyaXMuCiAKLQkqIFttc2Rvcy9kcG1pLmNdCi0JQnVnZml4OiBmaXhlZCB0eXBvIGluIElOVF9Eb1JlYWxNb2RlSW50LgorCSogbXVsdGltZWRpYS9taWRpLmM6IFBhdHJpayBTdHJpZHZhbGwgPHBzQGxlaXNzbmVyLnNlPgorCUNvbXBpbGUgZml4IGZvciBub24gT1NTIHN5c3RlbXMuCiAKLQkqIFttc2Rvcy9pbnQyMS5jXQotCUJ1Z2ZpeDogaW50MjEgUkVBRCAqbXVzdCogdXNlIFdJTjE2X2hyZWFkLCBub3QgX2hyZWFkMTYuCisJKiBncmFwaGljcy9kZHJhdy5jOiBQYXRyaWsgU3RyaWR2YWxsIDxwc0BsZWlzc25lci5zZT4KKwlDb21waWxlIGZpeCBmb3Igbm9uIFhGODYtREdBIHN5c3RlbXMuCiAKLQkqIFtpZjE2MzIva2VybmVsLnNwZWNdIFtpZjE2MzIvZHVtbXkuY10gW2lmMTYzMi90aHVuay5jXQotCSAgW2xvYWRlci9uZS9tb2R1bGUuY10gW3NjaGVkdWxlci9ldmVudC5jXSBbc2NoZWR1bGVyL3N5bmNocm8uY10KLQkgIFtzY2hlZHVsZXIvdGhyZWFkLmNdIFt3aW4zMi9rZXJuZWwzMi5jXSBbd2luMzIvb3JkaW5hbHMuY10KLQlBZGRlZCBuYW1lcy9zdHVicyBmb3IgYWxsIHVuZG9jdW1lbnRlZCBLRVJORUwgcm91dGluZXMgKFdpbjk1KS4KLQlBZGRlZCB0aGUgZm9sbG93aW5nIHVuZG9jLiAxNi1iaXQgZXF1aXZhbGVudHMgdG8gV2luMzIgcm91dGluZXM6Ci0JS0VSTkVMLjQ0MS00NDMsNDQ5LTQ1Myw0NTYtNDYyLDQ3MS00NzYsNDc5LTQ4Niw0ODguCi0JQWRkZWQgc3R1YnMgZm9yIHNvbWUgb3RoZXIgS0VSTkVMIHJvdXRpbmVzLgorCSogbGlidGVzdC9NYWtlZmlsZS5pbiwgbGlidGVzdC92b2xpbmZvLmM6CisJUGV0dGVyIFJlaW5ob2xkdHNlbiA8cGVyZUB0ZC5vcmcudWl0Lm5vPgorCU5ldyBmaWxlIHRvIHRlc3QgRFJJVkVfR2V0TGFiZWwuCiAKLQkqIFttZW1vcnkvaGVhcC5jXSBbbWVtb3J5L2dsb2JhbC5jXSBbaW5jbHVkZS9nbG9iYWwuaF0KLQlJbXBsZW1lbnRlZCBMb2NhbDMyLi4uIDMyLWJpdCBsb2NhbCBoZWFwIHJvdXRpbmVzIChLRVJORUwuMjA4LTIxNSwgMjI5KS4KKwkqIG11bHRpbWVkaWEvbWNpY2RhLmM6IFBldGVyIEh1bm5pc2V0dCA8aHVubmlzZUBub3J0ZWwuY2E+CisJU21hbGwsIHN1Ym9wdGltYWwsIGZpeCBmb3IgMzIgYml0IGNkYXVkaW8gb3BlbiByb3V0aW5lcy4gTmVlZHMgcHJvcGVyCisJMzJiaXQgY2RhdWRpbyBiaXQgc3VwcG9ydCBiZWZvcmUgaXQgY2FuIGJlIHJlbW92ZWQuLi4KIAotCSogW21pc2NlbXUvaW5zdHIuY10gW2xvYWRlci9tb2R1bGUuY10gW2luY2x1ZGUvbW9kdWxlLmhdCi0JSW1wbGVtZW50ZWQgX19HUCBmYXVsdCBoYW5kbGluZyBhbmQgSGFzR1BIYW5kbGVyIChLRVJORUwuMzM4KS4KKwkqIGdyYXBoaWNzL2RkcmF3LmM6IFBldGVyIEh1bm5pc2V0dCA8aHVubmlzZUBub3J0ZWwuY2E+CisJQWRkZWQgYSBidW5jaCBvZiBzdHVicyBmb3IgZGRyYXcgc3VmYWNlIHJvdXRpbmVzLiBBbGwgc3R1YnMgZm9yCisJc3VyZmFjZSBwcmVzZW50IG5vdy4KKwlDb21tZW50ZWQgb3V0IG1lc3NhZ2UgcHVtcCBjYWxscy4gSSBkb24ndCBzZWUgYSByZWFzb24gZm9yIHRoZW0gYmVpbmcKKwl0aGVyZS4gRXZlcnl0aGluZyB3b3JrcyBmaW5lIHdpdGggLWRlc2t0b3AgYW5kIC1tYW5hZ2VkIHN0aWxsIGhhcworCXByb2JsZW1zLiBEaXNhZ3JlZW1lbnRzPwogCi0JKiBbbWlzYy9lcnJvci5jXQotCUltcGxlbWVudGVkIExvZ1BhcmFtRXJyb3JSZWdzIChLRVJORUwuMzI3KS4KKwkqIG9sZS9vbGUybmxzLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgorCUZpeGVkIEdldExvY2FsZUluZm8zMkEgZm9yIG90aGVyIGxhbmd1YWdlcyB0aGFuIGVuX3VrLgorCU1hZGUgaXQgcmVjb2duaXNlIExPQ0FMRV9TWVNURU1fREVGQVVMVCwgTE9DQUxFX1NZU1RFTV9ERUZBVUxUIGFuZAorCWxhc3QgYnV0IG5vdCBsZWFzdCB0aGUgZmlyc3QgYXJndW1lbnQgbGNpZCB3aGVyZSBpcyBhbGwgYWJvdXQuLi4KIAotCSogW2xvYWRlci90YXNrLmNdIFtpbmNsdWRlL3dpbmRvd3MuaF0KLQlJbXBsZW1lbnRlZCBHZXRDb2RlSW5mbyAoS0VSTkVMLjEwNCkuCisJKiBpbmNsdWRlL3N5c2xldmVsLmgsIG1pc2MvcmVnaXN0cnkuYywgbXVsdGltZWRpYS9kcGxheS5jLCBtdWx0aW1lZGlhL2Rzb3VuZC5jLCBtdWx0aW1lZGlhL21tc3lzdGVtLmMsIG11bHRpbWVkaWEvdGltZS5jLCB3aW5kb3dzL2NhcmV0LmMsIGRsbHMvbXNhY20zMi9idWlsdGluLmM6CisJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CisJRml4ZWQgc29tZSBtb3JlIG1pc3NpbmcgV0lOQVBJcyAoaG9wZWZ1bGx5IGNvcnJlY3QpLgogCi0JKiBbbG9hZGVyL3Rhc2suY10gW3NjaGVkdWxlci90aHJlYWQuY10gW2luY2x1ZGUvdGhyZWFkLmhdCi0JSW1wbGVtZW50ZWQgW0dTXWV0VGhyZWFkUXVldWUgYW5kIFtHU11ldEZhc3RRdWV1ZSAoS0VSTkVMLjQ2My80LCA2MjQvNSkuCisJKiBvbGUvb2xlMm5scy5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KKwlGaXhlZCB0aGUgPSAtPiA9PSBidWcuCiAKLQkqIFtpZjE2MzIvZ2RpLnNwZWNdIFtvYmplY3RzL2RjLmNdIFtvYmplY3RzL2RpYi5jXQotCSAgW29iamVjdHMvYml0bWFwLmNdIFtpbmNsdWRlL3dpbmRvd3MuaF0KLQlCdWdmaXg6IGZpeGVkIHdyb25nIHBhcmFtZXRlciBmb3IgQ3JlYXRlRElCU2VjdGlvbjE2LgotCUFkZGVkIFtHU11ldERJQkNvbG9yVGFibGUxNiwgc3R1YiBmb3IgR2V0Qm91bmRzUmVjdDE2LgotCVBhcnRpYWxseSBpbXBsZW1lbnRlZCBCSVRNQVBfR2V0T2JqZWN0MTYgZm9yIERJQnMuCisJKiBtc2Rvcy9pbnQyZi5jOiBKb3NlcGggUHJhbmV2aWNoIDxrbmlnaHRAYmFsdGltb3JlLnd3YXZlcy5jb20+CisJU2hlbGwgcGFyYW1ldGVycyAoY29uZmlnLnN5cykgYW5kIEFOU0kgc3VwcG9ydCBzdHVicy4KIAotCSogW2lmMTYzMi9nZGkuc3BlY10gW3JlbGF5MzIvZ2RpMzIuc3BlY10gW29iamVjdHMvcGFsZXR0ZS5jXQotCUFkZGVkIHNvbWUgR0RJIHN0dWJzLgorCSogbXNkb3MvTWFrZWZpbGUuaW46IEpvc2VwaCBQcmFuZXZpY2ggPGtuaWdodEBiYWx0aW1vcmUud3dhdmVzLmNvbT4KKwlBZGRlZCBpbnQxNi5jIGFuZCBpbnQyOS5jLgogCi0JKiBbaWYxNjMyL01ha2VmaWxlLmluXSBbaWYxNjMyL2Rpc3BsYXkuc3BlY10gW2lmMTYzMi9tb3VzZS5zcGVjXQotCSAgW2lmMTYzMi9rZXlib2FyZC5zcGVjXSBbaWYxNjMyL2J1aWx0aW4uY10gW3dpbmRvd3Mva2V5Ym9hcmQuY10KLQlBZGRlZCBzb21lIHN0dWJzIGZvciBXaW4xNiBkcml2ZXJzOiBLRVlCT0FSRCwgTU9VU0UsIERJU1BMQVkuCisJKiBpbmNsdWRlL21pc2NlbXUuaCwgbXNkb3MvaW50ZXJydXB0cy5jOgorCUpvc2VwaCBQcmFuZXZpY2ggPGtuaWdodEBiYWx0aW1vcmUud3dhdmVzLmNvbT4KKwlNb3JlIGludGVycnVwdHMgdGhhdCBjYW4gYmUgZG9uZSBmcm9tIERPUyBtb2RlLgogCi0JKiBbaWYxNjMyL3dwcm9jcy5zcGVjXSBbbXNkb3MvdnhkLmNdCi0JQWRkZWQgc29tZSBzdHVicyBmb3IgVnhEczogVk1NLCBDb25maWdNRywgVGltZXJBUEkuCisJKiBtc2Rvcy9pbnQyOS5jOiBKb3NlcGggUHJhbmV2aWNoIDxrbmlnaHRAYmFsdGltb3JlLnd3YXZlcy5jb20+CisJQWRkZWQgaW50MjkgKEZhc3QgV3JpdGUgdG8gU2NyZWVuKSBzdXBwb3J0LgogCi0JKiBbbXNkb3MvaW50MmYuY10KLQlBZGRlZCBzb21lIHN0dWJzIGZvciByZWFsLW1vZGUgbmV0d29yayBkcml2ZXJzLgorCSogbXNkb3MvaW50MTYuYywgaW5jbHVkZS9kZWJ1Zy5oLCBpbmNsdWRlL2RlYnVnZGVmcy5oOgorCUpvc2VwaCBQcmFuZXZpY2ggPGtuaWdodEBiYWx0aW1vcmUud3dhdmVzLmNvbT4KKwlBZGRlZCBpbnQxNiAoS2V5Ym9hcmQpIHN1cHBvcnQsIG1vc3RseSBzdHVicy4KIAotU2F0IFNlcCAyNiAxODoxODoxOCAxOTk4ICBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KK0ZyaSBPY3QgMTYgMTU6NDA6MjEgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KIAotCSogW2NvbmZpZ3VyZS5pbl0KLQlNZXJnZWQgaW4gc29tZSBtb3JlIG9mIHRoZSBGcmVlQlNEIHBvcnRzL2VtdWxhdG9ycy93aW5lIHBhdGNoZXMuIAotCShNYWludGFpbmVyKHMpIG9mIHRoaXMgcG9ydDogWW91IGNhbiBqdXN0IHN1Ym1pdCB0aGVzZQotCXBhdGNoZXMgdG8gQWxleGFuZHJlIGRpcmVjdGx5LikKKwkqIHJlbGF5MzIvc2hlbGwzMi5zcGVjLCBkbGxzL3NoZWxsMzIvcGlkbC5jLCBkbGxzL3NoZWxsMzIvc2hlbGwzMl9tYWluLmMsIGRsbHMvc2hlbGwzMi9zaGVsbG9yZC5jLCBkbGxzL3NoZWxsMzIvc2hsZm9sZGVyLmMsIGRsbHMvc2hlbGwzMi9zaGx2aWV3LmMsIGluY2x1ZGUvc2hsb2JqLmg6CisJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CisJTWFueSBidWdmaXhlcywgbmV3IHN0dWJzIFNIR2V0UmVhbElETCwgU0hSZWdRdWVyeVZhbHVlMzJXLAorCVNIUmVnUXVlcnlWYWx1ZUV4MzJXLCBTdHJSZXRUb1N0ck4sIFN0ckNoclcsIFNIQWxsb2NTaGFyZWQsCisJU0hMb2NrU2hhcmVkLCBTSFVubG9ja1NoYXJlZCwgU0hGcmVlU2hhcmVkLCBTZXRBcHBTdGFydGluZ0N1cnNvcjMyLAorCVNITG9hZE9MRTMyLCBTaGVsbF9NZXJnZU1lbnVzMzIsIFBhdGhHZXREcml2ZU51bWJlcjMyLCBEcml2ZVR5cGUzMiwKKwlTSEFib3J0SW52b2tlQ29tbWFuZCwgU0hPdXRPZk1lbW9yeU1lc3NhZ2VCb3gsIFNIRmx1c2hDbGlwYm9hcmQuCiAKLQkgKiBbbG9hZGVyL3BlX2ltYWdlLmNdCi0JQ2hlY2sgZmlsZXNpemUgb2YgaW1hZ2UgYWdhaW5zdCBzaXplIGRlcml2ZWQgZnJvbSBoZWFkZXIKLQl0byBzcG90IHRydW5jYXRlZCBleGVjdXRlYWJsZXMgd2l0aG91dCBjcmFzaGluZy4KKwkqIG1pc2MvbnRkbGwuYywgcmVsYXkzMi9udGRsbC5zcGVjOgorCURpZXRtYXIgS2xpbmcgPGRpZXRtYXIua2xpbmdAdXNhLm5ldD4KKwlBZGRlZCB1bmRvY3VtZW50ZWQgZnVuY3Rpb24gUnRsT3BlbkN1cnJlbnRVc2VyLgogCi0JKiBbZmlsZXMvZGlyZWN0b3J5LmNdCi0JU2V0IGVudnZhciAiQ09NU1BFQyIuIE9uZSB3aW4zMighISkgcHJvZ3JhbSBjcmFzaGVzIHdpdGhvdXQgaXQuCisJKiBvYmplY3RzL2N1cnNvcmljb24uYywgbWlzYy9zaGVsbC5jLCBtaXNjL3Zlci5jLCBtaXNjL3ZlcnNpb24uYywgbG9hZGVyL2VsZi5jLCBsb2FkZXIvbW9kdWxlLmMsIGxvYWRlci9wZV9pbWFnZS5jLCBsb2FkZXIvcGVfcmVzb3VyY2UuYywgaW5jbHVkZS9uZWV4ZS5oLCBpbmNsdWRlL3BlX2ltYWdlLmgsIGluY2x1ZGUvcGVleGUuaCwgZGVidWdnZXIvZGJnbWFpbi5jLCBkZWJ1Z2dlci9tc2MuYzoKKwlVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CisJUmVuYW1lZCBhbGwgTFBJTUFHRV8qIHR5cGVzIHRvIFBJTUFHRV8qLgogCi0JKiBbbXVsdGltZWRpYS9tbWlvLmNdCi0JQWRkZWQgbW1pb1NldEluZm8zMi4KK1RodSBPY3QgMTUgMTM6MDM6MTAgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KIAotCSogW2luY2x1ZGUvZmlsZS5oXQotCVJldHVybiBTVERfRVJST1JfSEFORExFIGZvciBBVVggYW5kIFBSVCBkb3MgaGFuZGxlcy4KLQotCSogW2xvYWRlci9tb2R1bGUuY10KLQlIYW5kbGUgZXhlY3V0ZWFibGVzIHdpdGggc3BhY2VzIGluIHRoZWlyIG5hbWVzIGEgYml0IGJldHRlciBpbgotCUNyZWF0ZVByb2Nlc3MuCi0KLQkqIFtyZWxheTMyL21zdmZ3MzIuc3BlY11baWYxNjMyL21zdmlkZW8uc3BlY11bbXVsdGltZWRpYS9tc3ZpZGVvLmNdW2luY2x1ZGUvdmZ3LmhdCi0JU3RhcnRlZCBvbiBNUyBWaWRlbyBzdXBwb3J0IChjYW4gbG9hZCBXaW4zMiBJQ01zKS4KLQotCSogW3Rvb2xzL3Rlc3RydW5dCi0JQSBiaXQgc21hcnRlciB1c2Ugb2YgcHMuCi0KLQkqIFttZW1vcnkvdmlydHVhbC5jXQotCVJlcG9ydCBQQUdFX0dVQVJEZWQgcGFnZXMgYXMgUEFHRV9QUk9URUNURUQgKEF1dG9DQUQgTFQgUjE3IGZhaWxzCi0Jd2l0aG91dCB0aGF0IGNoZWNrIChzaW5jZSBXaW45NSBkb2Vzbid0IGtub3cgYWJvdXQgUEFHRV9HVUFSRCkpLgotCi1TYXQgU2VwIDI2IDE1OjA0OjA1IDE5OTggIE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgotCi0JKiBbaW5jbHVkZS9taXNjZW11LmhdIFtpZjE2MzIvYnVpbHRpbi5jXSBbbG9hZGVyL3Rhc2suY10KLQkgIFttaXNjZW11L2luc3RyLmNdIFttc2Rvcy9kcG1pLmNdIFttc2Rvcy9pbnQyMS5jXQotCSAgW21zZG9zL2ludGVycnVwdHMuY10gW3dpbmRvd3MvdXNlci5jXQotCUlOVF9bU3xHXWV0SGFuZGxlciB3YXMgcmVuYW1lZCB0byBJTlRfW1N8R11ldFBNSGFuZGxlci4KLQlBZGRlZCBoYW5kbGVycyB0byBkZWFsIHdpdGggcmVhbC1tb2RlIGludGVycnVwdHM7IERPUwotCXByb2dyYW1zIGFyZSBub3cgYWJsZSB0byBob29rIHJlYWwtbW9kZSBpbnRlcnJ1cHRzLgotCi0JKiBbbG9hZGVyL2Rvcy9tb2R1bGUuY10gW21zZG9zL2Rvc21lbS5jXSBbbXNkb3MvaW50MjEuY10KLQlNb3ZlZCByZWFsLW1vZGUgaW50ZXJydXB0IHRhYmxlIGluaXRpYWxpemF0aW9uIHRvCi0JbXNkb3MvZG9zbWVtLmMsIGFuZCBtYWRlIG5ldyBWODYgdGFza3MgZ2V0IGEgZnVsbCBjb3B5Ci0Jb2YgdGhlIGV4aXN0aW5nICJzeXN0ZW0gbWVtb3J5IiBpbnN0ZWFkIG9mIGFsbW9zdCBlbXB0eQotCXNwYWNlLiBNaXNjIGZpeGVzLgotCi0JKiBbaW5jbHVkZS9kb3NleGUuaF0gW2xvYWRlci9kb3MvbW9kdWxlLmNdIFttc2Rvcy9kcG1pLmNdCi0JICBbbXNkb3MvaW50MmYuY10KLQlGaXJzdCBzaG90IGF0IGxldHRpbmcgRE9TIHByb2dyYW1zIHN0YXJ0IHVwIERQTUkgKGJ1dCBEUE1JCi0JaXMgc3RpbGwgZGlzYWJsZWQgZm9yIERPUyBwcm9ncmFtcywgZm9yIHBrdW56aXAncyBzYWtlKS4KLQotCSogW2luY2x1ZGUvZGVidWdnZXIuaF0gW2RlYnVnZ2VyL2JyZWFrLmNdIFtkZWJ1Z2dlci9kYmcueV0KLQkgIFtkZWJ1Z2dlci9yZWdpc3RlcnMuY10gW2RlYnVnZ2VyL21lbW9yeS5jXSBbZGVidWdnZXIvaW5mby5jXQotCSAgW2xvYWRlci9kb3MvZG9zdm0uY10KLQlGaXJzdCBzaG90IGF0IG1ha2luZyBXaW5lJ3MgZGVidWdnZXIgd29yayBmb3IgRE9TIHByb2dyYW1zLgotCVRoZSAtZGVidWcgZmxhZyB3b3JrcywgYXMgZG8gIm5leHRpIiBhbmQgInN0ZXBpIi4KLQotU2F0IFNlcCAyNiAxMzoxMzoxMyAxOTk4ICBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KLQotCSogW2RsbHMvc2hlbGwzMi9kYXRhb2JqZWN0LmNdCi0JTmV3IGNsYXNzZXMgSUVudW1GT1JNQVRFVEMgaW1wbGVtZW50ZWQsIElEYXRhT2JqZWN0IHN0dWJzLgotCQotCSogW2RsbHMvc2hlbGwzMi8qLipdW3JlbGF5MzIvc2hlbGwzMi5zcGVjXQotCUJ1Z2ZpeGVzLgotCU5ldzogSUNNX0luc2VydEl0ZW0oKSwgSUxDcmVhdGVGcm9tUGF0aCgpLgotCUltcGxlbWVudGVkOiBJTENsb25lRmlyc3QoKS4KLQlTdHViczogSUxJc0VxdWFsKCksIElMRmluZENoaWxkKCksIFNITG9nSUxGcm9tRlNJTCgpLAotCSAgUGF0aE1hdGNoU3BlYygpLCBQYXRoSXNFeGUoKS4KLQlDaGFuZ2VkOiBJTEdldFNpemUoKSwgX0lMSXNEZXNrdG9wKCksIFBhdGhDb21iaW5lKCkuCi0KLQkqIFtpbmNsdWRlL3NobG9iai5oXQotCU5ldyBTSExHVUlEJ3MKLQlOZXcgc3RydWN0dXJlczogRFZUQVJHRVRERVZJQ0UzMiwgU1RHTUVESVVNMzIsIEZPUk1BVEVUQzMyLAotCUNMSVBGT1JNQVQzMi4KLQlOZXcgaW50ZXJmYWNlczogSUVudW1GT1JNQVRFVEMsIElEYXRhT2JqZWN0LCBJQ29tbURsZ0Jyb3dzZXIKLQlJRG9ja2luZ1dpbmRvd0ZyYW1lLCBJU2VydmljZVByb3ZpZGVyLgotCi0JKiBbZGxscy9zaGVsbDMyL2ZvbGRlcnMuY10KLQlTdHVicyBmb3IgSVNoZWxsTGluay4KLQotCSogW2xvYWRlci9yZXNvdXJjZS5jXQotCVNtYWxsIGZpeGVzLgotCi0JKiBbbWlzYy9jcnRkbGwuY11bcmVsYXkzMi9jcnRkbGwuc3BlY10KLQlOZXcgX19kbGxvbmV4aXQoKS4KLQotCSogW3dpbmRvd3MvbWVzc2FnZS5jXQotCVNlbmROb3RpZnlNZXNzYWdlQSwgU2VuZE1lc3NhZ2VDYWxsQmFjazMyQSBoYWxmIGltcGxlbWVudGVkLgotCi0JKiBbY29udHJvbHMvZWRpdC5jXQotCUVESVRfV01fU2V0VGV4dCBzZXQgRUZfVVBEQVRFIGZsYWcgbm90IGZvciBFU19NVUxUSUxJTkUuCi0KLQkqIFtmaWxlcy9maWxlLmNdCi0JSGFuZGxpbmcgb2YgZmlsZXBvc2l0aW9uIGZpeGVkLgotCi1GcmkgU2VwIDI1IDE4OjEzOjMwIDE5OTggIFBhdHJpayBTdHJpZHZhbGwgPHBzQGxlaXNzbmVyLnNlPgotCi0JKiBbaW5jbHVkZS93aW5kb3dzLmhdIFtpbmNsdWRlL3dpbnR5cGVzLmhdCi0JICBbb2xlL29sZTJubHMuaF0gW3JlbGF5MzIva2VybmVsMzIuc3BlY10KLQlJbXBsZW1lbnRlZCBFbnVtRGF0ZUZvcm1hdHMgYW5kIEVudW1UaW1lRm9ybWF0cy4KLQlPbmx5IGFkZHMgVVMgRW5nbGlzaCBzdXBwb3J0LgotCi0JKiBbTWFrZWZpbGUuaW5dIFtjb25maWd1cmUuaW5dIAotCSAgW2RsbHMvTWFrZWZpbGUuaW5dIFtkbGxzL3BzYXBpL01ha2VmaWxlLmluXSAKLQkgIFtkbGxzL3BzYXBpL3BzYXBpX21haW4uY10gCi0JTmV3IGZpbGVzIHRvIGltcGxlbWVudCBzdHVicyBmb3IgUFNBUEkuRExMIChOVCBvbmx5KS4KLQotCSogW3JlbGF5MzIvTWFrZWZpbGUuaW5dIFtyZWxheTMyL2J1aWx0aW4zMi5jXSAKLQkgIFtyZWxheTMyL3BzYXBpLnNwZWNdCi0JTmV3IHNwZWMgZmlsZSBmb3IgUFNBUEkuRExMIChOVCBvbmx5KS4KLQotCSogW3NjaGVkdWxlci9oYW5kbGUuY10KLQlIQU5ETEVfR2V0T2JqUHRyIHNob3VsZCBvbmx5IGludGVycHJldCB0aGUgcHNldWRvIGhhbmRsZXMgYXMgdGhlCi0JY3VycmVudCB0aHJlYWQgb3IgdGhlIGN1cnJlbnQgcHJvY2VzcyBpZiBhIHRocmVhZCBvciBhIHByb2Nlc3MgaXMKLQlyZXF1ZXN0ZWQuCi0KLQkqIFtpbmNsdWRlL3dpbnZlcnNpb24uaF0gW21pc2MvdmVyc2lvbi5jXQotCUFkZHMgdGhlIGdsb2JhbCBmdW5jdGlvbiBWRVJTSU9OX0dldFZlcnNpb24oKSBzbyBmdW5jdGlvbnMgY2FuCi0JaGF2ZSBkaWZmZXJlbnQgYmVoYXZpb3IgZGVwZW5kaW5nIG9uIHRoZSAtd2ludmVyIGZsYWcuCi0KLQkqIFtpbmNsdWRlL29sZWRsZy5oXSBbb2xlL29sZWRsZy5jXQotCU1pbm9yIGZpeGVzLiAKLQotCSogW3dpbmRvd3Mvd2lucHJvYy5jXQotCU1pbm9yIGNoYW5nZXMuCi0KLQkqIFtpbmNsdWRlL2ltbS5oXSBbbWlzYy9pbW0uY10KLQlOb3cgcmV0dXJucyBjb3JyZWN0IHZhbHVlcyB1bmRlciBib3RoIFdpbmRvd3MgOTUgYW5kIE5UIDQuMC4KLQotVGh1IFNlcCAyNCAyMjoxMTo0NCAxOTk4ICBLcmlzdGlhbiBOaWVsc2VuICA8a3Jpc3RpYW4ubmllbHNlbkByaXNvZS5kaz4KLQotCSogW2NvbmZpZ3VyZS5pbl0gW2luY2x1ZGUvYWNjb25maWcuaF0gW2luY2x1ZGUvdGhyZWFkLmhdCi0JICBbc2NoZWR1bGVyL3N5c2RlcHMuY10KLQlBdXRvY29uZmlnIHRlc3QgZm9yIG5vbi1yZWVudHJhbnQgbGliYy4KLQotV2VkIFNlcCAyMyAxOTo1MjoxMiAxOTk4ICBNYXR0aGV3IEJlY2tlciA8bWJlY2tlckBnbGFzc2NpdHkubmV0PgotCi0JKiBbKi8qLmNdCi0JTWlzY2VsbGFuZW91cyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIGRlYnVnZ2luZyBvdXRwdXQgCi0Jc3RhbmRhcmRpemF0aW9ucy4KLQotCSogW29iamVjdHMvY2xpcHBpbmcuY10KLQlBZGRlZCBFeHRTZWxlY3RDbGlwUmduLgotCi1XZWQgU2VwIDIzIDAwOjAzOjI4IEVEVCAxOTk4ICBQZXRlIFJhdHpsYWZmIDxwcmF0emxhZmZAY2ZhLmhhcnZhcmQuZWR1PgotCi0JKiBbaW5jbHVkZS93aW5kb3dzLmhdIFtpZjE2MzIvdXNlci5zcGVjXSBbcmVsYXkzMi91c2VyMzIuc3BlY10KLQkgIFt3aW5kb3dzL2tleWJvYXJkLmNdCi0JQWRkZWQsIG1hcmdpbmFsbHkgaW1wbGVtZW50ZWQsIEdldEtleWJvYXJkTGF5b3V0TmFtZSgpLgotCU9ubHkgcmV0dXJucyBVUyBFbmdsaXNoIGtleWJvYXJkIG5hbWUuCi0KLVR1ZSBTZXAgMjIgMTY6MzI6NDEgMTk5OCAgTWFyY2VsIEJhdXIgPG1iYXVyQGlpaWMuZXRoei5jaD4KLQotCSogW3Byb2dyYW1zL2NvbnRyb2wvKl0KLQlOZXcgV2luZWxpYiBhcHBsaWNhdGlvbi4KLQotTW9uIFNlcCAyMSAwMDoyOToxOCAxOTk4ICBQZXRlciBIdW5uaXNldHQgPGh1bm5pc2VAbm9ydGVsLmNhPgotCi0JKiBbaW5jbHVkZS9kcGxheS5oXVttdWx0aW1lZGlhL2RwbGF5LmNdW29sZS9jb21wb2JqLmNdCi0JQWRkZWQgYWxsIERpcmVjdFBsYXlMb2JieSBpbnRlcmZhY2VzIGFuZCBlbmhhbmNlZCBEaXJlY3RQbGF5Ci0JYW5kIERpcmVjdFBsYXlMb2JieSBzdXBwb3J0LiBTdGlsbCBub3QgYWxsIHRoYXQgbXVjaC4gVXNlZnVsCi0JZW5vdWdoIGlmIHlvdSBqdXN0IG5lZWQgdG8gc3RhcnQgYSBwcm9ncmFtLCBkb24ndCB0cnkgYW55Ci0JcmVhbCBkcGxheS9sb2JieSBzdHVmZi4KLQotCSogW2RvY3VtZW50YXRpb24vc3RhdHVzL2RpcmVjdHBsYXldCi0JQWRkZWQgYSB2ZXJ5IGxpdHRsZSBiaXQuCi0KLQkqIFtncmFwaGljcy9kZHJhdy5jXQotCS0gQ2FsbCB0byBTZXRXaW5kb3dMb25nMzJBIHdhc24ndCB3b3JraW5nIGJlY2F1c2UgdGhlcmUgd2FzIG5vCi0JICBtZW1vcnkgc2V0IGFzaWRlIHdoZW4gdGhlIHdpbmRvdyBjbGFzcyB3YXMgcmVnaXN0ZXJlZC4KLQktIEZpeGVkIHNvbWUgeGxpYiByZWZlcmVuY2UgY291bnRpbmcgYW5kIGNoYW5nZSB0aGUgYmVoYXZpb3VyCi0JICBvZiBEaXJlY3REcmF3U3VyZmFjZTNfU2V0UGFsZXR0ZSB0byBtaW1pYyBvYnNlcnZlZCBiZWhhdmlvdXIKLQkgIChwYWxldHRlIGlzIGFzc29jaWF0ZWQgd2lsbCBhbGwgYmFja2J1ZmZlcnMpCi0JLSBBbHNvIHN0b3JlZCBhbGwgcGFsZXR0ZSBjb2xvdXIgZmllbGRzIGFuZCBzcGl0IGJhY2sgb3VyIHNhdmVkCi0JICBjb2xvdXIgZmllbGRzIHJhdGhlciB0aGFuIHF1ZXJ5IFggZm9yIHRoZW0uCi0JLSBBZGRlZCBwbGVudHkgb2YgQWRkUmVmIGFuZCBSZWxlYXNlIHRyYWNlcy4KLQktIEFkZGVkIFhsaWIgc3VwcG9ydCBmb3IgdXNpbmcgLWRlc2t0b3Agb3B0aW9uLgotCS0gRml4ZWQgWGxpYiBtZXNzYWdlIGhhbmRsaW5nLiBNZXNzYWdlcyB3ZXJlbid0IGJlaW5nIHBhc3NlZCB0bwotCSAgdGhlIGFwcGxpY2F0aW9uLiBGaXhlcyBtb3VzZSBtb3ZlbWVudHMgaW4gc29tZSB4bGliIEREcmF3IGdhbWVzLgotCS0gQWRkZWQgYSBmZXcgc3R1YnMuCi0KLQkqIFt3aW5kb3dzL3dpbi5jXVtpbmNsdWRlL3dpbmVycm9yLmhdCi0JRml4ZWQgdXAgc29tZSBlcnJvciBoYW5kbGluZyBpbiBXSU5fU2V0V2luZG93TG9uZy4gU2V0TGFzdEVycm9yCi0Jd2Fzbid0IGJlaW5nIHVzZWQuIENvdWxkIGNhdXNlIHByb2JsZW1zIHdpdGggMCByZXR1cm4gY29kZXMuCi0JQWRkZWQgbmV3IGVycm9yIGluIHdpbmVycm9yICgxNDAwKS4KLQotCSogW0FVVEhPUlNdIFtpbmNsdWRlL2F1dGhvcnMuaF0KLQlBZGRlZCBteXNlbGYgYXMgYSBXaW5lIGF1dGhvci4KLQotU3VuIFNlcCAyMCAyMToyMjo0NCAxOTk4ICBBbGV4YW5kZXIgTGFyc3NvbiAgPGFsbGFAbHlzYXRvci5saXUuc2U+Ci0KLQkqIFtsb2FkZXIvbW9kdWxlLmNdCi0JQ2hhbmdlZCBHZXRNb2R1bGVGaWxlTmFtZTMyQSBzbyB0aGF0IGlzIHJldHVybnMgdGhlCi0JbG9uZyB2ZXJzaW9uIG9mIHRoZSBmaWxlbmFtZS4gTm90ZSB0aGF0IGp1c3QgdGhlIG5hbWUKLQlpcyBsb25nLCBub3QgdGhlIGRpcmVjdG9yaWVzLgotCi1TYXQgU2VwIDE5IDIwOjA1OjMwIDE5OTggUGVyIMVuZ3N0cvZtIDxwYW5nQG1pbmQubnU+IAotCi0JKiBbY29udHJvbHMvbWVudS5jXQotCU1hZGUgYSBjb3VwbGUgb2YgZml4ZXMgdG8gbWFrZSBsaWZlIGVhc2llciBmb3IgYXBwbGljYXRpb25zIHRoYXQgYWx0ZXIKLQl0aGVpciBtZW51cyBhdCBydW50aW1lLgotCi0JKiBbd2luZG93cy9kZWZkbGcuY10KLQlSZW1vdmVkIHRoZSBjYXN0IG9mIHRoZSByZXR1cm4gdmFsdWUgZnJvbSBkaWFsb2cgcHJvY2VkdXJlcyB0byBhIDE2LWJpdAotCWJvb2wuIFRoZSByZXR1cm4gdmFsdWUgbmVlZHMgdG8gcmV0YWluIGFsbCBpdHMgMzIgYml0cywgc2luY2UgaXQgaXMgbm90IAotCWFsd2F5cyBhIGJvb2wsIHN1Y2ggYXMgd2hlbiByZXNwb25kaW5nIHRvIHRoZSBXTV9OQ0hJVFRFU1QgbWVzc2FnZS4KLQotRnJpIFNlcCAxOCAxMTozMDozOCAxOTk4ICBTZXJnZXkgVHVyY2hhbm92IDx0dXJjaGFub3ZAdXNhLm5ldD4KLQotCSogW2xvYWRlci9yZXNvdXJjZS5jXQotCUZpeGVkIHZlcnkgZnVubnkgYnVnICh0aG91Z2ggZ3JhdmVseSBhZmZlY3RpbmcgZnVydGhlciBleGNlY3V0aW9uKQotCXdpdGggRmluZFJlc291cmNlW0V4XTMyIGZ1bmN0aW9ucy4KLQotCSogW2luY2x1ZGUvbXVsdGltb24uaF0gW3dpbmRvd3MvbXVsdGltb24uY10gW3JlbGF5MzIvdXNlcjMyLnNwZWNdCi0JICBbaW5jbHVkZS93aW5kb3dzLmhdIFt3aW5kb3dzL3N5c21ldHJpY3MuY10KLQlEZWZhdWx0IGltcGxlbWVudGF0aW9uIGZvciBNdWx0aW1vbml0b3IgQVBJLgotCi0JKiBbaW5jbHVkZS93aW5kb3dzLmhdIFt3aW5kb3dzL3dpbnBvcy5jXQotCUZpeGVkIGluY29ycmVjdCBkZWNsYXJhdGlvbiAoYW5kIGJlaGF2aW91cikgb2YgR2V0V2luZG93UmVjdDMyLgotCi1XZWQgU2VwIDE2IDEwOjIxOjE1IDE5OTggIEdlcmFyZCBQYXRlbCA8Ry5QYXRlbEBXYW5hZG9vLmZyPgotCi0JKiBbY29udHJvbHMvZWRpdC5jXQotCUZpeGVkIEVESVRfRU1fR2V0TGluZSB0byB1c2UgY29ycmVjdGx5IGxlbmd0aCBvZiBsaW5lcy4KLQotVHVlIFNlcCAxNSAyMDo0MDoxNiAxOTk4ICBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgotCi0JKiBbbWlzYy90d2Vhay5jXVtpbmNsdWRlL3R3ZWFrLmhdW2NvbnRyb2xzL21lbnUuY10KLQlSZXBsYWNlZCB0aGUgdHdlYWsgZ3JhcGhpYyByb3V0aW5lcyBieSBjYWxscyB0byBEcmF3RWRnZTMyKCkuCi0KLQkqIFttaXNjL3R3ZWFrLmNdW2luY2x1ZGUvdHdlYWsuaF1bZG9jdW1lbnRhdGlvbi93aW45NWxvb2tdCi0JICBbd2luZS5pbmldWyovKl0KLQlDaGFuZ2VkICJsb29rIGFuZCBmZWVsIiBzZWxlY3Rpb24uIEFsbG93cyBXaW4zLjEsIFdpbjk1IGFuZAotCVdpbjk4IChubyBHVUkgY29kZSBpbXBsZW1lbnRlZCkgbG9vayBhbmQgZmVlbC4KLQotCSogW2RsbHMvY29tY3RsMzIvaGVhZGVyLmNdW2luY2x1ZGUvaGVhZGVyLmhdW2luY2x1ZGUvY29tbWN0cmwuaF0KLQlTdGFydGVkIGNhbGxiYWNrIGl0ZW0gc3VwcG9ydCBhbmQgZGlkIHNvbWUgbWlub3IgaW1wcm92ZW1lbnRzLgotCi0JKiBbZGxscy9jb21jdGwzMi9pbWFnZWxpc3QuY10KLQlGaXhlZCBidWcgaW4gdHJhbnNwYXJlbnQgaW1hZ2UgZGlzcGxheS4KLQlJbWFnZUxpc3RfR2V0SWNvbiBpcyBzdGlsbCBidWdneSA6LSgKLQotCSogW2RsbHMvY29tY3RsMzIvdG9vbGJhci5jXQotCUZpeGVkIGJ1dHRvbiBkcmF3aW5nIChwYXJ0aWFsIGhhY2spLgotCi0JKiBbZGxscy9jb21jdGwzMi9jb21tY3RybC5jXQotCUZpeGVkIE1lbnVIZWxwKCkuCi0KLQkqIFtjb250cm9scy9idXR0b24uY10KLQlBZGRlZCAzZCBlZmZlY3QgZm9yIGdyb3VwYm94LgotCi0JKiBbd2luZG93cy9tc2dib3guY10KLQlBZGRlZCBmb250IHN1cHBvcnQgZm9yIG1lc3NhZ2UgYm94ZXMuCi0KLQkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQotCUZpeGVkIHdpbmRvdyBtb3ZpbmcgYnVnLgotCi0JKiBbZGxscy9jb21jdGwzMi8qLmNdCi0JVmFyaW91cyBpbXByb3ZlbWVudHMuCi0KLQkqIFtkbGxzL2NvbWN0bDMyL2xpc3R2aWV3LmNdW2RsbHMvY29tY3RsMzIvcmViYXIuY10KLQkgIFtpbmNsdWRlL2NvbW1jdHJsLmhdCi0JTW9yZSBtZXNzYWdlcy4KLQotCSogW3dpbmRvd3Mvc3lzY29sb3IuY11baW5jbHVkZS93aW5kb3dzLmhdCi0JSW50cm9kdWNlZCBuZXcgV2luOTggc3lzdGVtIGNvbG9ycy4KLQotVHVlIFNlcCAxNSAxODoyOTo0NSAxOTk4IFdlc2xleSBGaWxhcmRvIDxlaWdodGtub3RzQGFvbC5jb20+Ci0KLQkqIFtmaWxlcy9wcm9maWxlLmNdCi0JQWRkZWQgc3VwcG9ydCBpbiBQUk9GSUxFX0xvYWRXaW5lSW5pIGZvciAtY29uZmlnIG9wdGlvbgotCi0JKiBbbWlzYy9tYWluLmNdIFtpbmNsdWRlL29wdGlvbnMuaF0KLQlBZGRlZCAtY29uZmlnIG9wdGlvbi4KLQotVHVlIFNlcCAxNSAxODoyMjoyNiAxOTk4ICBQZXR0ZXIgUmVpbmhvbGR0c2VuIDxwZXJlQHRkLm9yZy51aXQubm8+Ci0KLQkqIFtkb2N1bWVudGF0aW9uL01ha2VmaWxlLmluXQotCU1ha2Ugc3VyZSBkaXJlY3RvcnkgZXhpc3RzIGJlZm9yZSBpbnN0YWxsaW5nIGludG8gaXQuCi0KLVR1ZSBTZXAgMTUgMDE6NDc6MzMgMTk5OCAgUGFibG8gU2FyYXR4YWdhIDxwYWJsby5zYXJhY2hhZ2FAcGluZy5iZT4KLQotCSogW29sZS9ubHMvKl0gW29sZS9vbGUybmxzLmNdIFtpbmNsdWRlL3dpbm5scy5oXQotCUZpeGVkIGEgZmV3IGVycm9ycyBhbmQgY29tcGxldGVkIHNvbWUgTkxTIGZpbGVzLgotCi1Nb24gU2VwIDE0IDAxOjIzOjQ1IDE5OTggIEpvc2VwaCBQcmFuZXZpY2ggPGtuaWdodEBiYWx0aW1vcmUud3dhdmVzLmNvbT4KLQotCSogW2luY2x1ZGUvbWlzY2VtdS5oXSBbbXNkb3MvaW50ZXJydXB0cy5jXQotCVJlbW92ZWQgYSBjb21waWxhdGlvbiB3YXJuaW5nLCBhZGRlZCBJTlQgMjUgdG8gdGhlIGxpc3Qgb2YgaW50ZXJydXB0cwotCWNhbGxhYmxlIGZyb20gRE9TIGFwcGxpY2F0aW9ucywgYWRkZWQgYSBkZWJ1ZyBtZXNzYWdlIHdoZW4gdW5zdXBwb3J0ZWQKLQlpbnRlcnJ1cHRzIGFyZSB1c2VkLgotCi1TdW4gU2VwIDEzIDE5OjU1OjIyIDE5OTggIExhd3NvbiBXaGl0bmV5IDxsYXdzb25fd2hpdG5leUBqdW5vLmNvbT4KLQotCSogW2lmMTYzMi9yZWxheS5jXQotCUNhbGxQcm9jRXgzMlcgc2hvdWxkIG5vdCByZXZlcnNlIGFyZ3VtZW50cy4KLQotU3VuIEF1ZyAxNyAyMToxODoxMiAxOTk4ICBFcmljIFBvdWVjaCAgPGVyaWMucG91ZWNoQGxlbWVsLmZyPgotCi0JKiBbbXVsdGltZWRpYS9taWRpLmNdIFttdWx0aW1lZGlhL2luaXQuY10gW211bHRpbWVkaWEvbW1zeXMuY10gCi0JICBbaW5jbHVkZS9tdWx0aW1lZGlhLmhdIFtpbmNsdWRlL21tc3lzdGVtLmhdIAotCSAgW211bHRpbWVkaWEvTWFrZWZpbGUuaW5dIFttdWx0aW1lZGlhL21pZGlwYXRjaC5jXQotCSAgW2lmMTYzMi9tdWx0aW1lZGlhLnNwZWNdCi0JTWFkZSBNSURJIGlucHV0IGFuZCBvdXRwdXQgZnVuY3Rpb25hbCBvbiBPU1MgY2FwYWJsZSBzeXN0ZW1zLgotCi0JKiBbbXVsdGltZWRpYS90aW1lci5jXQotCUNoYW5nZXMgdG8gdHJpZ2dlciBjYWxsYmFja3MgYXQgdGhlIGFjY3VyYXRlIHBhY2UgZXZlbiB3aGVuCi0JZmFrZSB0aW1lcnMgYXJlIHVzZWQuCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUZyaSBTZXAgMTEgMTM6MTQ6MzUgMTk5OCAgQW5kcmVhcyBNb2hyIDwxMDAuMzA5MzZAZ2VybWFueS5uZXQ+Ci0KLQkqIFtmaWxlcy9maWxlLmNdIFtpbmNsdWRlL2ZpbGUuaF0KLQlGaXhlZCBTZXRGaWxlUG9pbnRlciB0byBhbGxvdyBuZWdhdGl2ZSBwb3NpdGlvbnMgYXMgaW4gRE9TLgotCi0JKiBbZ3JhcGhpY3MvZGRyYXcuY10KLQlBZGRlZCBzb21lIG1ldGhvZHMgdG8gSURpcmVjdDNELgotCi0JKiBbb2xlL2NvbXBvYmouY10gW2lmMTYzMi9jb21wb2JqLnNwZWNdCi0JQWRkZWQvaW1wbGVtZW50ZWQgQ29DcmVhdGVTdGFuZGFyZE1hbGxvYzE2LAotCUNvR2V0Q2xhc3NPYmplY3QsIENvQ3JlYXRlSW5zdGFuY2UsCi0JTG9va3VwRVRhc2ssIFNldEVUYXNrLCBDb0dldFN0YXRlMTYuCi0KLQkqIFtsb2FkZXIvdGFzay5jXQotCU1ha2VQcm9jSW5zdGFuY2U6IHJldHVybiAwIGlmIGZ1bmMgPT0gTlVMTC4KLQotCSogWyovKl0gW3Rvb2xzL3dpbmFwaS1jaGVja10KLQlBZGRlZCB6aWxsaW9ucyBvZiBtaXNzaW5nIFdJTkFQSSdzIGFuZCBfX2NkZWNsJ3MuCi0JKG9vcHMsIHNldmVyYWwgY2F1c2VkIGJ5IG15c2VsZikKLQlXcm90ZSBzY3JpcHQgZm9yIGF1dG9tYXRlZCBjaGVja2luZy4KLQotCSogW2lmMTYzMi9jb21wb2JqLnNwZWNdCi0JTWFueSBzdHViIG5hbWVzLgotCi0JKiBbbWlzYy9kZGVtbC5jXSBbb2xlL2NvbXBvYmouY10KLQlTb21lIHN0dWJzLgotCi1UdWUgU2VwICA5IDIxOjM2OjQ4IDE5OTggIEFuZGVycyBDYXJsc3NvbiA8YW5kZXJzLmNhcmxzc29uQGxpbnV4Lm51PgotCi0JKiBbZGxscy9jb21jdGwzMi9NYWtlZmlsZS5pbl0gW2RsbHMvY29tY3RsMzIvY29tbWN0cmwuY10KLQkgIFtkbGxzL2NvbWN0bDMyL3RhYi5jXSBbaW5jbHVkZS9jb21tY3RybC5oXSBbaW5jbHVkZS90YWIuaF0KLSAgICAgICAgQWRkZWQgcHJlbGltaW5hcnkgdGFiIGNvbnRyb2wgc3VwcG9ydC4KLQotU2F0IFNlcCAgNSAxNjoyNzoyMCAxOTk4ICBIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KLQotCSogW2dyYXBoaWNzL3BzZHJ2LypdCi0JTW9yZSBjaGFuZ2VzIHRvIHRoZSBQb3N0U2NyaXB0IGRyaXZlcjoKLQlJbXBsZW1lbnRlZCBwZW5zIGFuZCBzb2xpZCBicnVzaGVzLgotCUNvbG91ci9ncmV5c2NhbGUgZm9yIGZvbnRzLCBwZW5zIGFuZCBicnVzaGVzLgotCVRvIGdldCBjb2xvdXJlZCBvdXRwdXQgeW91IG5lZWQgdG8gaGF2ZSAqQ29sb3JEZXZpY2Ugc2V0IHRvIHRydWUKLQlpbiB5b3VyIFBQRCwgb3RoZXJ3aXNlIHlvdSdsbCBnZXQgZ3JleXNjYWxlLgotCUxhbmRzY2FwZSBtb2RlIG5vdyB3b3JrcywgYXMgZG9lcyBub24tQTQgcGFnZSBzaXplcy4KLQlFbmNvZGluZyBvZiBmb250cyB0byBBTlNJIGlzIGJldHRlciwgU3ltYm9sIHdvcmtzIGFnYWluLgotCi0JKiBbb2JqZWN0cy9kYy5jXSBbaW5jbHVkZS9nZGkuaF0gWyovKl0KLQlNb3ZlZCBkYy0+dy57dGV4dCxiYWNrZ3JvdW5kfVBpeGVsIHRvIFgxMURSVl9QREVWSUNFIHdoZXJlIHRoZXkKLQliZWxvbmcuCi0KLVNhdCBTZXAgIDUgMDU6MTI6MDkgMTk5OCAgT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+Ci0KLQkqIFtpbmNsdWRlL2Rvc2V4ZS5oXSBbaW5jbHVkZS9taXNjZW11LmhdIFtpbmNsdWRlL21zZG9zLmhdCi0JICBbbG9hZGVyL2Rvcy9kb3N2bS5jXSBbbG9hZGVyL2Rvcy9tb2R1bGUuY10gW21zZG9zL2RwbWkuY10KLQkgIFttc2Rvcy9pbnQyZi5jXSBbbXNkb3MvaW50ZXJydXB0cy5jXQotCUZpeGVkIHBvcnRhYmlsaXR5LiBBZGFwdGVkIHNvbWUgY29kZSB0byBtYWtlIGl0IGVhc2llciB0bwotCWludGVncmF0ZSB0aGUgRE9TIHN1YnN5c3RlbSB3aXRoIHRoZSBEUE1JIHN1YnN5c3RlbSwgbWFkZQotCXRoZSBEUE1JIHNpbXVsYXRlZCByZWFsLW1vZGUgaW50ZXJydXB0cyBiZSBoYW5kbGVkIHRoZSBWODYKLQl3YXkuIEFkZGVkIHN1cHBvcnQgZm9yIC5DT00gZmlsZXMuIE1hZGUgaW50MmYgRFBNSSBjaGVjawotCWZhaWwsIHRvIGF2b2lkIHBrdW56aXAgY3Jhc2hpbmcgaW4gYXR0ZW1wdGluZyB0byB1c2UgRFBNSS4KLQlHZW5lcmFsbHkgbW92ZWQgc3R1ZmYgYXJvdW5kIGEgbGl0dGxlLgotCUl0IGlzIG5vdyB0ZWNobmljYWxseSBwb3NzaWJsZSB0byBsb2FkIHNldmVyYWwgRE9TIHByb2dyYW1zCi0JaW50byB0aGUgc2FtZSBtZW1vcnkgc3BhY2UuIE5vdCB0ZXN0ZWQsIHRob3VnaC4KLQotRnJpIFNlcCAgNCAyMTo0MDo0NSAxOTk4ICBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KLQotCSogW2lmMTYzMi9rZXJuZWwuc3BlY10KLQlDaGFuZ2VkIDUwMC01M3ggc3R1Ym5hbWVzIGFjY29yZGluZ2x5IHRvIG50My41MSBrcm5sMzg2LmV4ZS4KLQotCSogW3dpbjMyL2V4Y2VwdC5jXQotCUZpeGVkIG9uZSBiYWQgcHJvZ3JhbSBiZWhhdmlvdXIsIChkZWxldGluZyBTRUggd2hpbGUgaW4gCi0JZmlyc3Qgd2FsaykuIFJ0bFVud2luZCBpcyBicm9rZW4gdG9vIEkgdGhpbmsgKGl0IHNob3VsZCB1bndpbmQKLQlvbiBzdWNjZXNzLCBub3Qgd2hpbGUgd2Fsa2luZyB0aGUgZXhjZXB0aW9uIGNoYWluKS4KLQotCSogW29sZS9vbGUybmxzLmNdCi0JR2V0KkRlZmF1bHRMQ0lEICByZXR1cm5zIDB4NDAwfGlkLiBleHBlY3RlZCBieSBvbmUgYXBwbGljYXRpb24uCi0KLQkqIFtpZjE2MzIvc25vb3AuY10KLQlIYW5kbGUgbm9uLXN0YW5kYXJkIFNQIHJldHVybnMgbW9yZSBncmFjZWZ1bC4KLQotCSogW3dpbmRvd3MvY2xhc3MuY10KLQloaW5zdGFuY2VzIGFyZSBtb3N0bHkgaXJyZWxldmFudCBmb3Igd2luMzIuCi0KLQkqIFttZW1vcnkvc3RyaW5nLmNdIFttaXNjL3JlZ2lzdHJ5LmNdCi0JbHN0cmNtcGkzMlc6IHVzZSB0b3VwcGVyIGZvciBjaGFyYWN0ZXJzIDwgMHgxMDAuIChzcGVlZHVwIGhhY2sKLQlmb3IgcmVnaXN0cnkuYykKLQlTb21lIHNtYWxsIHNwZWVkdXAgaGFja3MgZm9yIHJlZ2lzdHJ5LmMKLQotVGh1IFNlcCAgMyAyMDo0MDoxNiAxOTk4ICBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgotCi0JKiBbTWFrZWZpbGUuaW5dW2NvbmZpZ3VyZV1bY29uZmlndXJlLmluXVtkbGxzL01ha2VmaWxlLmluXQotCSAgW2RsbHMvY29tY3RsMzIvTWFrZWZpbGUuaW5dCi0JQ3JlYXRlZCBkbGxzL2NvbWN0bDMyIGFuZCBtb3ZlZCB0aGUgY29tbW9uIGNvbnRyb2xzIHN0dWZmIHRvIGl0LgotCi0JKiBbbWlzYy92ZXJzaW9uLmNdCi0JUmVtb3ZlZCBDT01DVEwzMl9EbGxHZXRWZXJzaW9uLiBUaGUgZml4ZWQgZnVuY3Rpb24gaXMgcGFydAotCW9mIHRoZSBjb21tb24gY29udHJvbHMgc3R1ZmYuCi0KLQkqIFtkbGxzL2NvbWN0bDMyLyouY11baW5jbHVkZS9jb21tY3RybC5oXQotCUFkZGVkIHN0cnVjdHVyZSBzaXplIHRlc3RzLgotCi0JKiBbZGxscy9jb21jdGwzMi90b29sYmFyLmNdCi0JRml4ZWQgYSBidWcgaW4gVE9PTEJBUl9HZXRNYXhXaWR0aCgpLgotCi0JKiBbZGxscy9jb21jdGwzMi9hbmltYXRlLmNdW2luY2x1ZGUvYW5pbWF0ZS5oXQotCSAgW2RsbHMvY29tY3RsMzIvY29tYm9leC5jXVtpbmNsdWRlL2NvbWJvZXguaF0KLQkgIFtkbGxzL2NvbWN0bDMyL2hvdGtleS5jXVtpbmNsdWRlL2hvdGtleS5oXQotCSAgW2RsbHMvY29tY3RsMzIvbGlzdHZpZXcuY11baW5jbHVkZS9saXN0dmlldy5oXQotCSAgW2RsbHMvY29tY3RsMzIvY29tbWN0cmwuY11baW5jbHVkZS9jb21tY3RybC5oXQotCU5ldyBmaWxlcy4gQWRkZWQgQW5pbWF0aW9uLCBDb21ib0JveEV4LCBIb3RrZXkgYW5kCi0JTGlzdHZpZXcgY29udHJvbCBkdW1taWVzLgotCi0JKiBbZGxscy9jb21jdGwzMi90b29sdGlwcy5jXQotCUZpeGVkIGEgZGlzcGxheSBidWcgYW5kIGZvbnQgc2VsZWN0aW9uLgotCi0JKiBbZGxscy9jb21jdGwzMi9jb21jdGwzMnVuZG9jLmNdW2luY2x1ZGUvY29tbWN0cmwuaF0KLQlBZGRlZCBtaXNzaW5nIERQQSBmdW5jdGlvbnMuIEZpeGVkIGJ1Z3MgYW5kIHB1Ymxpc2hlZCB0aGUKLQlmdW5jdGlvbiBwcm90b3R5cGVzLgotCi0JKiBbZG9jdW1lbnRhdGlvbi9jb21tb25fY29udHJvbHNdCi0JVXBkYXRlZC4KLQotV2VkIFNlcCAgMiAxNTo0Mzo0NSAxOTk4ICBQYXRyaWsgU3RyaWR2YWxsIDxwc0BsZWlzc25lci5zZT4KLQotCSogW0FVVEhPUlNdIFtpbmNsdWRlL2F1dGhvcnMuaF0KLQlBZGRlZCBteXNlbGYgYXMgYSBXaW5lIGF1dGhvci4KLQotCSogW21lbW9yeS92aXJ0dWFsLmNdIFtvYmplY3RzL2RjLmNdCi0JRml4ZWQgcnVudGltZSBlcnJvcnMgZm9yIFNvbGFyaXMuCi0KLQkqIFttaXNjL2RkZW1sLmNdIFtvYmplY3RzL2dkaW9iai5jXQotCU1pbm9yIGZpeGVzLgotCi0JKiBbd2luMzIvZGV2aWNlLmNdCi0JQWRkZWQgc3R1YnMgZm9yIElGU01nciBWeERDYWxsIGFuZAotCWEgcGFydGlhbCBpbXBsZW1lbnRhdGlvbiBvZiBJRlNNZ3IgRGV2aWNlSW8uCi0KLQkqIFtyZWxheTMyL01ha2VmaWxlLmluXSBbcmVsYXkzMi9idWlsdGluMzIuY10gW3JlbGF5MzIvaW1tMzIuc3BlY10gCi0JICBbcmVsYXkzMi9tc25ldDMyLnNwZWNdIFtyZWxheTMyL29sZWRsZy5zcGVjXQotCUFkZGVkIG5ldyBzcGVjIGZpbGVzIGZvciBJTU0zMi5ETEwsIE1TTkVUMzIuRExMLCBPTEVETEcuRExMLgotCi0JKiBbbWlzYy9NYWtlZmlsZS5pbl0gW21pc2MvaW1tLmNdIFtpbmNsdWRlL2ltbS5oXQotCUFkZGVkIG5ld3MgZmlsZXMgZm9yIGltcGxlbWVudGF0aW9uIG9mIElNTTMyLkRMTC4gCi0JQWxsIGZ1bmN0aW9ucyByZXR1cm4gMCBhcyBpcyBjb3JyZWN0IGZvciBhbGwgV2VzdGVybiBMYW5ndWFnZXMuCi0KLQkqIFtvbGUvTWFrZWZpbGUuaW5dIFtvbGUvb2xlZGxnLmNdIFtpbmNsdWRlL29sZWRsZy5oXQotCUFkZGVkIG5ldyBmaWxlcyBmb3IgaW1wbGVtZW50YXRpb24gb2YgT0xFRExHLkRMTC4KLQlBZGRlZCBzdHVicyB3aXRoIEZJWE1FOnMgZm9yIGFsbCBmdW5jdGlvbnMuCi0KLVdlZCBTZXAgIDIgMTA6NTA6MDAgMTk5OCAgSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+Ci0KLQkqIFtkbGxzL3NoZWxsMzIvY29udG1lbnUuY11bZGxscy9zaGVsbDMyL3NoZWxsb2xlLmNdCi0JICBbZGxscy9zaGVsbDMyL3NobGZvbGRlci5jXVtkbGxzL3NoZWxsMzIvc2hsdmlldy5jXQotCSAgW2RvY3VtZW50YXRpb24vc2hlbGwzMl1baW5jbHVkZS9zaGVsbC5oXQotCUNsZWFuIHVwLCBidWdmaXhlcy4KLQkKLQkqIFtkbGxzL3NoZWxsMzIvZW51bWlkbGlzdC5jXQotCUZpbGVhdHRyaWJ1dGVzIGltcGxlbWVudGVkLgotCQotCSogW2RsbHMvc2hlbGwzMi9waWRsLmNdCi0JQ2xhc3MgcGlkbG1nciBzcGxpdGVkIGludG8gZnVuY3Rpb25zLCBzdHJ1Y3R1cmVzIGNoYW5nZWQsIAotCXNvbWUgZnVuY3Rpb25zIHJld3JpdHRlbi4KLQotCSogW2RsbHMvc2hlbGwzMi9zaGVsbDMyX21haW4uY10KLQlTbWFsbCBjaGFuZ2VzIGFuZCBidWdmaXhlcyBTSEdldEZpbGVJbmZvQSwgU0hHZXRTcGVjaWFsRm9sZGVyTG9jYXRpb24uCi0JCi0JKiBbZGxscy9zaGVsbDMyL3NoZWxsb3JkLmNdW3JlbGF5MzIvc2hlbGwzMi5zcGVjXQotCVBhcmFtZXRlciBkb2N1bWVudGVkLCBpbXBsZW1lbnRlZCBTSENsb25lU3BlY2lhbElETGlzdC4KLQlTdHViIGltcHJvdmVkIFNoZWxsRXhlY3V0ZUV4MzJBLgotCU5ldyBzdHVicyBTSEZpbmRfSW5pdE1lbnVQb3B1cCwgRmlsZU1lbnVfSW5pdE1lbnVQb3B1cCwgCi0JRmlsZU1lbnVfQ3JlYXRlLCBGaWxlTWVudV9UcmFja1BvcHVwTWVudUV4LCBTSFdpbkhlbHAsCi0JU0hSdW5Db25yb2xQYW5lbCwgREFEX1Nob3dEcmFnSW1hZ2UsIEZpbGVNZW51X0Rlc3Ryb3ksCi0JU0hHZXREYXRhRnJvbUlETGlzdEEsIFNIRmlsZU9wZXJhdGlvbkEuCi0JCi0JKiBbaW5jbHVkZS93aW5ubHMuaF1baW5jbHVkZS9vbGUybmxzLmNdCi0JVElNRV9GT1JDRTI0SE9VUkZPUk1BVCwgVElNRV9OT1RJTUVNQVJLRVIgaW1wbGVtZW50ZWQKLQlpbiBPTEVfR2V0Rm9ybWF0QSwgR2V0VGltZUZvcm1hdDMyQS4KLQkKLQkqIFt3aW4zMi9jb2RlX3BhZ2UuY10KLQlXaWRlQ2hhclRvTXVsdGlCeXRlOiBwYXJhbWV0ZXIgY2hlY2tpbmcgYW5kIHJldHVybmluZyBvZiBzdHJsZW4KLQlpbXBsZW1lbnRlZC4KLQkKLQkqIFt3aW5kb3dzL2tleWJvYXJkLmNdW3dpbmRvd3MvZGVmd25kLmNdCi0JRGVidWcgbWVzc2FnZXMgYWRkZWQuCi0JCi0JKiBbd2luZG93cy93aW4uY10KLQlXSU5fU2V0V2luZG93TG9uZyBHV0xfU1RZTEUgYW5kIEdXTF9FWFNUWUxFIGltcGxlbWVudGVkLgotCi0JKiBbY29udHJvbHMvbWVudS5jXQotCU1pc3NpbmcgbGluZSBhZGRlZC4KLQotCSogW2luY2x1ZGUvd2luZXJyb3IuaF0KLQlNYWNyb3MgZm9yIFNVQ0NFRURFRCBhbmQgRkFJTEVEIGFkZGVkLgotCi1Nb24gQXVnIDMxIDAwOjU1OjMxIDE5OTggIFVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgotCi0JKiBbbG9hZGVyL21vZHVsZS5jXQotCUJ1Z2ZpeDogTG9hZE1vZHVsZTE2IHNob3VsZCAqbm90KiBjYWxsIExvYWRNb2R1bGUzMi4KLQotCSogW2ZpbGVzL2Rvc19mcy5jXQotCUJ1Z2ZpeDogZG9uJ3QgY3Jhc2ggaWYgZ2l2ZW4gZGlyZWN0b3J5IGRvZXNuJ3QgZXhpc3QuCi0KLVNhdCBBdWcgMjkgMTU6MDA6NDkgMTk5OCAgVHVyY2hhbm92IFNlcmdleSA8dHVyY2hhbm92QHVzYS5uZXQ+Ci0KLQkqIFtpbmNsdWRlL21tc3lzdGVtLmhdW211bHRpbWVkaWEvbW1zeXN0ZW0uY11bcmVsYXkzMi93aW5tbS5zcGVjXQotCUFsbW9zdCBjb21wbGV0ZWQgaW1wbGVtZW50YXRpb24gb2YgW3NuZF1QbGF5U291bmQgKGV4Y2VwdAotCWZsYWdzIFNORF9BTElBU19JRCBhbmQgU05EX0FQUExJQ0FUSU9OKS4KLQotCSogW2lmMTYzMi91c2VyLnNwZWNdW3dpbmRvd3Mvd2lucG9zLmNdCi0JQWRkZWQgU2V0V2luZG93UmduMTYgc3R1Yi4KLQotU2F0IEF1ZyAyOSAwMjo1MzozMSAxOTk4ICBBbGV4YW5kZXIgTHVreWFub3YgPGxhdkBsb25nLnlhci5ydT4KLQotCSogW2ZpbGVzL2RyaXZlLmNdCi0JR2V0RHJpdmVUeXBlMzJBOiByZXR1cm4gRFJJVkVfRE9FU05PVEVYSVNUIGluIGNhc2Ugb2Ygbm9uCi0JZXhpc3RlbnQgZHJpdmUuCi0KLQkqIFttc2Rvcy9pbnQyMS5jXQotCUlOVDIxX0ZpbmRGaXJzdEZDQjogY2hlY2sgZHJpdmUgdmFsaWRpdHkgdG8gcHJldmVudCBvb3BzLgotCi0JKiBbd2luMzIvZmlsZS5jXQotCUNyZWF0ZUZpbGUzMkE6IGR1cGxpY2F0ZSBTVERfe0lOUFVULE9VVFBVVH1fSEFORExFLgotCi0JKiBbZmlsZXMvZG9zX2ZzLmNdCi0JTWFrZSBET1NGU19PcGVuRGlyIHRyZWF0ICIiIGFzICIvIi4KLQlET1NGU19PcGVuRGV2aWNlOiBkdXBsaWNhdGUgU1REX3tJTlBVVCxPVVRQVVR9X0hBTkRMRS4KLQotCSogW3dpbmRvd3MvZGlhbG9nLmNdCi0JR2V0TmV4dERsZ1RhYkl0ZW0zMjogdXNlIGxhc3QvZmlyc3QgaXRlbSBpbnN0ZWFkIG9mIGZpcnN0L2xhc3QKLQl3aGVuIGh3bmRDdHJsPT0wLiBUaGlzIGZpeGVzIGluaXRpYWwgZm9jdXMuCi0KLVNhdCBBdWcgMjkgMDI6NDY6MzIgMTk5OCAgQWRyaWFuIEhhcnZleSA8YWRyaWFuQHNlbGVjdC5jb20uYXU+Ci0KLQkqIFtpbmNsdWRlL3Byb2Nlc3MuaF0gW2luY2x1ZGUvcHJvY2Vzcy5jXQotCVJlbmFtZWQgUFJPQ0VTU19TRUxGIHRvIENVUlJFTlRfUFJPQ0VTU19QU0VVRE9IQU5ETEUgaW4gbGluZQotCXdpdGggdGhyZWFkIGNvbnN0YW50LCBhbmQgV2luMzIgZG9jdW1lbnRhdGlvbiAod2hpY2ggY2FsbHMgaXQKLQlhIHBzZXVkb2hhbmRsZS4pICBNYWRlIEdldEN1cnJlbnRQcm9jZXNzIGFjdHVhbGx5IHVzZSB0aGlzCi0JY29uc3RhbnQgaW5zdGVhZCBvZiB0aGUgdmFsdWUuCi0KLQkqIFtpbmNsdWRlL3Byb2Nlc3MuaF0gW2luY2x1ZGUvdGhyZWFkLmhdIFtzY2hlZHVsZXIvdGhyZWFkLmNdCi0JICBbc2NoZWR1bGVyL3Byb2Nlc3MuY10gW3NjaGVkdWxlci9oYW5kbGUuY10KLQlNb2RpZnkgSEFORExFX0dldE9ialB0ciB0byB1bmRlcnN0YW5kIGFib3V0Ci0JQ1VSUkVOVF9USFJFQURfUFNFVURPSEFORExFIGFuZCBDVVJSRU5UX1BST0NFU1NfUFNFVURPSEFORExFLgotCVRoaXMgYWxsb3dzIER1cGxpY2F0ZUhhbmRsZSB0byBkbyB0aGUgY29ycmVjdCB0aGluZyB3aXRoIHRoZXNlCi0JaGFuZGxlcy4gIFJlbW92ZWQgbm93IGR1cGxpY2F0ZSBmdW5jdGlvbmFsaXR5IGZyb20gVEhSRUFEX0dldFB0cgotCWFuZCBQUk9DRVNTX0dldFB0ci4KLQotCSogW2xvYWRlci9uZS9zZWdtZW50LmNdCi0JRml4ZWQgdHdvIHBsYWNlcyB3aGVyZSBIRklMRTMycyB3ZXJlIGJlaW5nIGNyZWF0ZWQgYW5kIHBhc3NlZCB0bwotCTE2LWJpdCBjb2RlLiBUaGlzIHNob3VsZCB1bmJyZWFrIE5FIHNlbGYtbG9hZGluZyBjb2RlLgotCUFkZGVkIHR3byBjYXN0cyB0byByZW1vdmUgY29tcGlsZSB0aW1lIHdhcm5pbmdzLgotCi1GcmkgQXVnIDI4IDIxOjA0OjEzIDE5OTggIEpvc2VwaCBQcmFuZXZpY2ggPGtuaWdodEBiYWx0aW1vcmUud3dhdmVzLmNvbT4KLQotCSogW21zZG9zL2Rvc21lbS5jXSBbbXNkb3MvaW50MmYuY10KLQlBZGRlZCBiZWdpbm5pbmdzIG9mIERPUyBlcnJvciB0YWJsZS4KLQotCSogW21zZG9zL2ludDFhLmNdCi0JU3R1YiBmb3Igc3ViZnVuY3Rpb24gMHhiMC4KLQotCSogW21zZG9zL2ludDEwLmNdIFtsb2FkZXIvZG9zL2Rvc3ZtLmNdCi0JSU5UIDEwIHN1cHBvcnQgY29tcGxldGVseSByZXdyaXR0ZW4gYW5kIGxvdHMgb2YgZGVidWdnaW5nCi0JYWRkZWQuIE5vdywgRE9TIGFwcHMgdGhhdCB1c2UgSU5UIDEwIHRvIHdyaXRlIHRvIHRoZSBzY3JlZW4gd2lsbAotCXdvcmsuIChCZXlvbmQgWm9yayBkb2VzLCBhdCBsZWFzdC4gU29tZXdoYXQuKQotCi0JKiBbaW5jbHVkZS9taXNjZW11LmhdIFttc2Rvcy9kb3NtZW0uY10gW21zZG9zL2ludDIxLmNdCi0JQW5vdGhlciBzaG90IGF0IGdldHRpbmcgTVMncyBnZW5lcmljIGVycm9yIG1lc3NhZ2UgZmFjaWxpdHkKLQlyaWdodC4KLQotCSogW21zZG9zL2ludDIxLmNdCi0JQ29tbWFuZC5Db20gd2FudGVkIHRvIHNldCBpdHMgb3duIFBTUCBhZGRyZXNzLiBJIGxldCBpdC4KLQotV2VkIEF1ZyAyNiAxMjoyNjoyMCAxOTk4ICBNYXR0aGV3IFRvc2VsYW5kIDxNYXR0aGV3LlRvc2VsYW5kQGJ0aW50ZXJuZXQuY29tPgotCi0JKiBbaW5jbHVkZS9maWxlLmhdIFttaXNjL2x6ZXhwYW5kLmNdCi0JRml4ZWQgTFpDb3B5MTYgYnkgZml4aW5nIEhGSUxFMTYvSEZJTEUzMiBjb252ZXJ0b3IgbWFjcm9zIHNvIGRvbid0Ci0JY29udmVydCBsencgaGFuZGxlcy4KLQotVHVlIEF1ZyAyNSAyMjoyMjo1NSAxOTk4ICBVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+Ci0KLQkqIFttaXNjL3JlZ2lzdHJ5LmNdCi0JSW4gUmVnRW51bXZhbHVlLCBpdmFsdWUgPT0gMCBpcyBhIGxlZ2FsIHJlcXVlc3QgYW5kIHNob3VsZAotCXJldHVybiB0aGUgZmlyc3QgZW50cnkuCi0KLQkqIFttc2Rvcy9pbnQyMS5jXQotCUFkZCBoYW5kbGluZyBmb3IgSW50MjEtNDgvNDkgaW4gV2luMTYuIE1ha2VzIGJsaW5rZXIgZGVtbyB3b3JrLgotCi0JKiBbd2luZG93cy93aW5wcm9jLmNdCi0JQWRkIE1zZzMyQTwtPk1zZzMyVyB0cmFuc2xhdGlvbiBmb3IgTEJfQUREU1RSSU5HLgotCi1UdWUgQXVnIDI1IDIxOjAzOjMxIDE5OTggIEtyaXN0aWFuIE5pZWxzZW4gIDxrcmlzdGlhbi5uaWVsc2VuQHJpc29lLmRrPgotCi0JKiBbd2luZG93cy93aW4uY10KLQlGaXggZm9yIFNldFBhcmVudCgpOiBNUyBXaW5kb3dzIDMuMTEgZG9lcyBub3QgY2xlYXIgdGhlIFdTX0NISUxECi0JZmxhZyB3aGVuIGEgY2hpbGQgd2luZG93IGlzIHJlcGFyZW50ZWQgdG8gdGhlIGRlc2t0b3Agd2luZG93LgotCi1Nb24gQXVnIDI0IDIwOjU1OjIyIDE5OTggIEJlcmVuZCBSZWl0c21hIDxiZXJlbmQgYXQgYXNzZXQtY29udHJvbCBkb3QgY29tPgotCi0JKiBbY29udHJvbHMvbWVudS5jXQotCU1lbnVzIGNyZWF0ZWQgd2l0aCBTZXRNZW51SXRlbUluZm8gYW5kIEluc2VydE1lbnVJdGVtIHNob3VsZAotCXdvcmsgbm93LgotCi1TdW4gQXVnIDIzIDIzOjIzOjIzIDE5OTggIEFsZXggS29yb2JrYSA8a29yb2JrYUBhbXMuc3VueXNiLmVkdT4KLQotCSogW2NvbnRyb2xzL2NvbWJvLmNdCi0JQWRkZWQgQ0JfR0VUSVRFTUhFSUdIVC4KLQotCSogW3dpbmRvd3Mvd2lucG9zLmNdIAotCVdNX05DSElUVEVTVCwgU1dQX0ZSQU1FQ0hBTkdFRCBidWdmaXhlcy4KLQotU2F0IEF1ZyAyMiAyMToxNToyOSAxOTk4IEFsZXggUHJpZW0gPGFsZXhwQHNjaS5rdW4ubmw+Ci0KLQkqIFtmaWxlcy9wcm9maWxlLmNdIFtpbmNsdWRlL3dpbmRvd3MuaF0KLQlBZGRlZCBHZXRQcml2YXRlUHJvZmlsZVNlY3Rpb25OYW1lc1tBV10sR2V0UHJpdmF0ZVByb2ZpbGVTZWN0aW9uVywKLQlHZXRQcml2YXRlUHJvZmlsZVN0cnVjdFcsIEdldFByb2ZpbGVTZWN0aW9uVywKLQlXcml0ZVByb2ZpbGVTZWN0aW9uW0FXXSwgV3JpdGVQcml2YXRlUHJvZmlsZVN0cnVjdFcuIAotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1TYXQgQXVnIDIyIDE3OjQ2OjE5IDE5OTggIFVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgotCi0JKiBbaW5jbHVkZS9kb3NleGUuaF0gW2luY2x1ZGUvbW9kdWxlLmhdIFtpbmNsdWRlL3BlX2ltYWdlLmhdIAotCSAgW2luY2x1ZGUvcHJvY2Vzcy5oXSBbaW5jbHVkZS93aW5kb3dzLmhdIFtsb2FkZXIvZG9zL21vZHVsZS5jXQotCSAgW2xvYWRlci9tb2R1bGUuY10gW2xvYWRlci9uZS9tb2R1bGUuY10gW2xvYWRlci9wZV9pbWFnZS5jXQotCSAgW3NjaGVkdWxlci9wcm9jZXNzLmNdIFt3aW4zMi9wcm9jZXNzLmNdCi0JUGFydGlhbGx5IGltcGxlbWVudGVkIENyZWF0ZVByb2Nlc3MzMi4KLQotCSogW3dpbjMyL2RldmljZS5jXSBbcmVsYXkzMi9rZXJuZWwzMi5zcGVjXSBbc2NoZWR1bGVyL2szMm9iai5jXQotCSAgW21pc2MvcmVnaXN0cnkuY10gW3dpbjMyL2ZpbGUuY10KLQlQYXJ0aWFsbHkgaW1wbGVtZW50ZWQgVnhEQ2FsbCAoVk1NIHJlZ2lzdHJ5IHNlcnZpY2VzKS4KLQotCSogW2ZpbGVzL2Rvc19mcy5jXQotCURPU0ZTX0ZpbmROZXh0IG1hZGUgdGhyZWFkLXNhZmUuCi0KLQkqIFtpbmNsdWRlL3NpZ19jb250ZXh0LmhdIFtpbmNsdWRlL3N5c2xldmVsLmhdIFtsb2FkZXIvc2lnbmFsLmNdCi0JICBbc2NoZWR1bGVyL3N5c2xldmVsLmNdIFt0b29scy9idWlsZC5jXQotCVJlcGxhY2VkIENBTExUTzE2X0N1cnJlbnRfZnMgYnkgU1lTTEVWRUxfV2luMTZDdXJyZW50VGViLgotCi0JKiBbd2luMzIva2VybmVsMzIuY10KLQlCdWdmaXg6IFFUX1RodW5rL0ZUX1RodW5rIHNob3VsZCByZXR1cm4gJ2xvbmcnIGluIERYOkFYLCBub3QgRUFYLgotCi0JKiBbaWYxNjMyL3JlbGF5LmNdIFtyZWxheTMyL2J1aWx0aW4zMi5jXSBbd2luZG93cy9tc2dib3guY10KLQkgIFttc2Rvcy9pbnQyMC5jXSBbbXNkb3MvaW50MjEuY10KLQlVc2UgRXhpdFByb2Nlc3MgaW5zdGVhZCBvZiBUQVNLX0tpbGxDdXJyZW50VGFzay4KLQotCSogW2luY2x1ZGUvdGFzay5oXSBbaW5jbHVkZS90aHJlYWQuaF0gW2xvYWRlci90YXNrLmNdIAotCSAgW3NjaGVkdWxlci90aHJlYWQuY10gW2luY2x1ZGUvcXVldWUuaF0gW3dpbmRvd3MvbWVzc2FnZS5jXSAKLQkgIFt3aW5kb3dzL3F1ZXVlLmNdIFt3aW5kb3dzL3dpbi5jXQotCVByZXZlbnQgV2luMzIgdGhyZWFkcyBmcm9tIGVudGVyaW5nIHRoZSBUQVNLX1Jlc2NoZWR1bGUgbG9vcC4KLQkoTm90ZTogV2luMzIgbWVzc2FnaW5nIHN0aWxsIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHk7IHRoaXMgcGF0Y2gKLQlpcyBqdXN0IHByZXZlbnRpbmcgdGhlIHN5c3RlbSBmcm9tIGNyYXNoaW5nIHdoZW4gV2luMzIgdGhyZWFkcwotCWNhbGwgbWVzc2FnaW5nIGZ1bmN0aW9ucy4gTWVzc2FnZXMgd2lsbCBwcm9iYWJseSBzdGlsbCBnZXQgbG9zdC4pCi0KLQkqIFtzY2hlZHVsZXIvY3JpdHNlY3Rpb24uY10KLQlEZWFjdGl2YXRlZCB0aGUgdXNlIG9mIFNFTV9VTkRPIGZvciB0aGUgU1lTVEVNX0xPQ0sgc2VtYXBob3JlOwotCWZvciBzb21lIHJlYXNvbiwgdGhpcyBsZWFkcyB0byBwcm9ibGVtcyBhZnRlciB0aHJlYWRzIHRlcm1pbmF0ZS4uLiAKLQotU2F0IEF1ZyAyMiAxNTowMDowMCAxOTk4ICBK/HJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgotCi0JKiBbaW5jbHVkZS9hdXRob3JzLmhdCi0JTmV3IGZpbGUsIGluY2x1ZGVzIGFsbCBuYW1lcyBvZiB0aGUgZGV2ZWxvcGVyIChmb3JtZXIgc2hlbGwuYykKLQotCSogW01ha2VmaWxlLmluXVtjb25maWd1cmVdW2NvbmZpZ3VyZS5pbl1bZGxscy9NYWtlZmlsZS5pbl0KLQkgIFtkbGxzL3NoZWxsMzIvTWFrZWZpbGUuaW5dW3NocmVzLnJjXQotCUNyZWF0ZWQgZGxscy9zaGVsbDMyIGFuZCBtb3ZlZCB0aGUgc2hlbGwzMiBzdHVmZiBpbiBpdC4KLQlTdGFydGVkIHRvIGNyZWF0ZSBpbnRlcm5hbCByZXNvdXJjZXMuCi0KLQkqIFtkbGxzL3NoZWxsMzIvKl0KLQlTcGxpdCB0aGUgc2hlbGwzMiBpbXBsZW1lbnRhdGlvbiBpbnRvIHNtYWxsZXIgZmlsZXMuCi0JTmV3IGNsYXNzZXM6IElDb250ZXh0TWVudSwgSUV4dHJhY3RJY29uLCBJU2hlbGxWaWV3LgotCUltcGxlbWVudGVkIFNoZWxsX0dldEltYWdlTGlzdCgpLgotCXNoZWxsMzIgbGlua3MgdG8gY29tY3RsMzIgbm93IGR5bmFtaWNhbGx5IHNvIGl0IGNhbiB1c2UKLQlpbnRlcm5hbC9leHRlcm5hbCBpbXBsZW1lbnRhdGlvbnMuCi0KLQkqIFtkb2N1bWVudGF0aW9uL2ludGVybmFsLWRsbF0gW2RvY3VtZW50YXRpb24vc2hlbGwzMl0KLQlOZXcsIGNvdWxkIGFueWJvZHkgZG8gYSBzcGVsbGNoZWNrPwotCi0JKiBbaW5jbHVkZS9jb21tY3RybC5oXQotCU1hbnkgbmV3IExWIGNvbnN0YW50cywgc3RydWN0dXJlcywgZnVuY3Rpb25zLgotCi0JKiBbY29udHJvbHMvY29tY3RsMzJ1bmRvYy5jXQotCVJld3JvdGUgdGhlIERTQSogZnVuY3Rpb25zLgotCi0JKiBbd2luZG93cy93aW5wb3MuY10KLQlTZXRTaGVsbFdpbmRvdzMyLCBHZXRTaGVsbFdpbmRvdzMyLgotCi1TYXQgQXVnIDIyIDE0OjAyOjE1IDE5OTggIEFsZXhhbmRlciBMdWt5YW5vdiA8bGF2QGxvbmcueWFyLnJ1PgotCi0JKiBbbG9hZGVyL3Jlc291cmNlLmNdCi0JTWFyayBsYXN0IGFjY2VsZXJhdG9yIGFzIHN1Y2ggaW4gTG9hZEFjY2VsZXJhdG9yczMyVy4KLQotCSogW3JlbGF5MzIvc2hlbGwzMi5zcGVjXSBbbWlzYy9zaGVsbC5jXQotCUFkZCBzdHVicyBmb3IgU0hHZXRTcGVjaWFsRm9sZGVyUGF0aFtBV10uCi0KLVNhdCBBdWcgMjIgMDI6MDc6NDIgMTk5OCAgQWRyaWFuIEhhcnZleSA8YWRyaWFuQHNlbGVjdC5jb20uYXU+Ci0KLQkqIFtpbmNsdWRlL2ZpbGUuaF0gW2ZpbGUvZmlsZS5jXSBbbXNkb3MvaW50MjEuY10gW21zZG9zL3Z4ZC5jXQotCSAgW21pc2MvbHpleHBhbmQuY10gW3dpbjMyL2tlcm5lbDMyLmNdIFtkb2N1bWVudGF0aW9uL2ZpbGVoYW5kbGVzXQotCUZpeGVkIGZpbGUgaGFuZGxlIGhhbmRsaW5nLiAgQ3JlYXRlZCB1bml2ZXJzYWwgSEZJTEUxNiB0byBIRklMRTMyCi0JdHJhbnNsYXRpb24gbWFjcm8gZnJvbSBtc2Rvcy9pbnQyMSBjb2RlIGJ5IE92ZSBLYWF2ZW4uCi0JVXNlZCBtYWNybyBpbiBhbGwgV2luMTYgZnVuY3Rpb25zIHNvIHRoYXQgd2luMzIgaGFuZGxlcyBhcmUgdHJhbnNsYXRlZAotCXRvIGF2b2lkIERPUy9XaW4xNiBzdGR4eCBoYW5kbGVzLgotCVJlbW92ZWQgaGFuZGxlIHRyYW5zbGF0aW9uIGZyb20gaW50MjEuYyB3aGVyZSBXaW4xNiBmdW5jdGlvbnMgYXJlCi0JY2FsbGVkLiAgQ2hhbmdlZCByZW1haW5pbmcgY2FsbHMgdG8gdXNlIG5ldyBtYWNybyBuYW1lcy4KLQlEb2N1bWVudGVkIGZpbGVoYW5kbGUgaGFuZGxpbmcgYW5kIGRpZmZlcmVuY2VzIGJldHdlZW4gd2luIDE2ICYgMzIuCi0KLUZyaSBBdWcgMjEgMjA6MzI6NDkgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+Ci0KLQkqIFtzZXJ2ZXIvcHJvY2Vzcy5jXSBbc2VydmVyL3RocmVhZC5jXQotCUltcGxlbWVudGVkIG9iamVjdCB3YWl0IHF1ZXVlcyBhbmQgc3luY2hyb25pemF0aW9uLgotCi1GcmkgQXVnIDIxIDE4OjQwOjAyIDE5OTggIEh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgotCi0JKiBbZ3JhcGhpY3MvcHNkcnYvKl0KLQlERVZNT0RFIGRtUGFwZXJ7V2lkdGh8TGVuZ3RofSBmaWVsZHMgYXJlIGluIDAuMW1tLgotCVNlbGVjdCBhIDEwMCBwaXhlbCBkZWZhdWx0IGZvbnQgaW4gQ3JlYXRlREMuCi0KLVRodSBBdWcgMjAgMjI6NDc6MzkgMTk5OCAgVXdlIEJvbm5lcyAgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KLQotCSogW29iamVjdHMvYml0bWFwLmNdCi0JSGFuZGxlIGJpdHM9MzIgaW4gU2V0Qml0bWFwQml0czMyIGFuZCBHZXRCaXRtYXBCaXRzMzIuCi0KLQkqIFttc2Rvcy9pbnQyMS5jXQotCUFkZCBoYW5kbGluZyBvZiBJbnQyMSAwQSBhbmQgMzcuCi0KLQkqIFttaXNjL2NvbW1kbGcuY10KLQlVc2UgTWFwSE1vZHVsZUxTIGFuZCBNYXBITW9kdWxlU0wgd2hlbiB0cmFuc2xhdGluZyBISU5TVEFOQ0UxNiB0bwotCUhJTlNUQU5DRTMyIGFuZCB2aWNlIHZlcnNhLgotCi0JKiBbd2luMzIvZmlsZS5jXQotCUNyZWF0ZUZpbGUzMkE6IEFib3J0IGlmIGZpbGVuYW1lID09IE5VTEwuCi0KLVRodSBBdWcgMjAgMTI6Mjg6MzEgMTk5OCAgTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+Ci0KLQkqIFsqLypdCi0JTG90cyBvZiBtaXNzaW5nIHByb3RvdHlwZXMgYWRkZWQsIHNvbWUgcGFyYW1ldGVyIHR5cGVzIGFkYXB0ZWQgdG8gbWF0Y2gKLQlTREsuCi0KLQkqIFtkZWJ1Z2dlci9zdGFicy5jXQotCURvbid0IGxvb3AgZm9yZXZlciBpZiB3ZSBkb24ndCBmaW5kIHdpbmUgb3Igb25lIG9mIHRoZSBsaWJ4eHguc28uCi0KLQkqIFtsb2FkZXIvbmUvbW9kdWxlLmNdCi0JSW1wbGVtZW50ZWQgTWFwSE1vZHVsZUxTLE1hcEhNb2R1bGVTTCxNYXBIaW5zdExTLE1hcEhpbnN0U0wuCi0KLQkqIFttaXNjL25ldHdvcmsuY10KLQlJbXBsZW1lbnRlZCBXTmV0R2V0VXNlcjMyQS4KLQotCSogW21pc2Mvc2hlbGxvcmQuY10KLQlJbXBsZW1lbnRlZCBJTFJlbW92ZUxhc3RJRC4KLQotCSogW211bHRpbWVkaWEvZHNvdW5kLmNdCi0JRml4ZWQgU3RhckNyYWZ0IG1lbW9yeSBsZWFrLgotCi0JKiBbZ3JhcGhpY3MvZGRyYXcuY10KLQlSZW1vdmVkIHNvbWUgdW5uZWNlc3Nhcnkgc2ltcGxlIHJlbGF5aW5nIGZ1bmN0aW9ucywgdHJpZWQgcG9saXNoaW5nCi0JdXAgdGhlIFhsaWIgaW1wbGVtZW50YXRpb24gKHN0aWxsIGRvZXNuJ3Qgd29yayksIHRlbXAuIHJlbW92ZWQgWHNobQotCWNvZGUgKHRvIGJlIHJlbWVyZ2VkIHdpdGggd29ya2luZyBYbGliIGNvZGUpLgotCi1UdWUgQXVnIDE4IDIyOjI5OjE3IDE5OTggIE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgotCi0JKiBbbXVsdGltZWRpYS9tbWlvLmNdIFttdWx0aW1lZGlhL21tc3lzdGVtLmNdCi0JRml4ZWQgbW9zdCBtbWlvIGJ1Z3MsIGZ1bGx5IGltcGxlbWVudGluZyBtbWlvU2V0QnVmZmVyCi0JYnVmZmVyaW5nLCBhYmlsaXR5IHRvIHJlYWQgbWVtb3J5IGZpbGVzLCBhbmQgdGhlCi0Jc25kUGxheVNvdW5kKCkgU05EX01FTU9SWSBmbGFnLiBNb3N0IG1taW8tdXNpbmcgcHJvZ3JhbXMKLQlub3cgd29yayBmaW5lLgotCi0JKiBbaW5jbHVkZS9kb3NleGUuaF0gW2luY2x1ZGUvbWlzY2VtdS5oXSBbaW5jbHVkZS9tb2R1bGUuaF0KLQkgIFtsb2FkZXIvbW9kdWxlLmNdIFtsb2FkZXIvdGFzay5jXSBbbXNkb3MvZG9zbWVtLmNdCi0JSW1wcm92ZWQgRE9TIFZNIGZsZXhpYmlsaXR5IGFuZCBwb3J0YWJpbGl0eSBzb21ld2hhdC4gKERpZAotCUkgZ2V0IHRoZSAjaWZkZWZzIHJpZ2h0IHRoaXMgdGltZSwgQlNELWVycz8pCi0KLQkqIFttc2Rvcy9pbnQyMS5jXQotCU1hZGUgIkdldCBDdXJyZW50IFBTUCBhZGRyZXNzIiB3b3JrIGFzIGV4cGVjdGVkIGluIGEgRE9TIFZNLgotCi0JKiBbbG9hZGVyL2Rvcy8qXQotCUJlZ2FuIGltcHJvdmluZyBmbGV4aWJpbGl0eSBhbmQgcG9ydGFiaWxpdHkgc29tZXdoYXQuIEl0Ci0Jc2hvdWxkIGJlIGVhc2llciB0byBhZGQgRFBNSSBSTUNCIGNhbGxiYWNrcyBub3cuIFRoZQotCURPUyBWTSBubyBsb25nZXIgbGVhdmVzIGJpZyBmaWxlcyBseWluZyBhcm91bmQgaW4gL3RtcAotCWFmdGVyIGEgY3Jhc2guCi0KLVR1ZSBBdWcgMTggMTI6Mzg6MzEgMTk5OCBUdXJjaGFub3YgU2VyZ2V5IDx0dXJjaGFub3ZAdXNhLm5ldD4KLQotCSogW3JlbGF5MzIvd2lubW0uc3BlY10KLQlUaGlzIHBhdGNoIGFsbG93cyBXaW5BbXAgdG8gcGxheSBXQVYgZmlsZXMgKGF0IGxlYXN0IGluIFBDTQotCWZvcm1hdCkuCi0KLVN1biBBdWcgMTYgMDU6MzQ6MTMgMTk5OCAgUGFibG8gU2FyYXR4YWdhIDxzcnR4Z0BjaGFuYWUuYWxwaGFuZXQuY2g+Ci0KLQkqIFt3aW5kb3dzL2tleWJvYXJkLmNdCi0JQ29ycmVjdGVkIGtleWJvYXJkIGNvZGUgdG8gcHJvcGVybHkgaGFuZGxlIGtleXMgOiA/IH4gYW5kICIKLQlvbiBub24gVVMga2V5Ym9hcmRzLgotCi1TYXQgQXVnIDE1IDE4OjQ3OjE0IDE5OTggIEJyaWFuIENyYWZ0IDxiY2JveUBkb3JvdGh5LndhbmdsYWIuYnJhbmRlaXMuZWR1PgotCi0JKiBbd2luZG93cy93aW4uY10KLQlGaXhlZCBzZXZlcmUgYnVnIGluIEVudW1DaGlsZFdpbmR3b3MoKS4KLQotVGh1IEF1ZyAxMyAyMTowNTozNSAxOTk4ICBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgotCi0JKiBbY29udHJvbHMvdG9vbHRpcHMuY10KLQlGaXhlZCBzb21lIGJ1Z3MuIEFkZGVkIHN1YmNsYXNzaW5nIHN1cHBvcnQuCi0KLQkqIFtjb250cm9scy90b29sYmFyLmNdCi0JSW1wcm92ZWQgdG9vbHRpcCBpbnRlZ3JhdGlvbi4gRml4ZWQgc29tZSBidWdzLgotCi0JKiBbY29udHJvbHMvY29tbWN0cmwuY10KLQlDaGFuZ2VkIGNvbnRyb2wgcmVnaXN0cmF0aW9uIGFuZCBhZGRlZCBzb21lIGRvY3VtZW50YXRpb24uCi0JRml4ZWQgU2hvd0hpZGVNZW51Q3RsLgotCi0JKiBbY29udHJvbHMvcmViYXIuY11baW5jbHVkZS9yZWJhci5oXVtpbmNsdWRlL2NvbW1jdHJsLmhdCi0JSW1wcm92ZWQgcmViYXIgaW1wbGVtZW50YXRpb24gKHN0aWxsIG5vIGRpc3BsYXkpLgotCi0JKiBbY29udHJvbHMvcGFnZXIuY11baW5jbHVkZS9wYWdlci5oXVtpbmNsdWRlL2NvbW1jdHJsLmhdCi0JSW1wcm92ZWQgcGFnZXIgaW1wbGVtZW50YXRpb24gKHN0aWxsIG5vIGRpc3BsYXkpLgotCi0JKiBbbWlzYy9pbWFnZWxpc3QuY10KLQlGaXhlZCBhIGJ1Zy4KLQotCSogW2RvY3VtZW50YXRpb24vY29tbW9uX2NvbnRyb2xzXQotCVVwZGF0ZWQuCi0KLVN1biBBdWcgIDkgMTk6NTA6MjAgMTk5OCAgSmFtZXMgSnVyYW4gPGpyajEyMEBwc3UuZWR1PgotCi0JKiBbTWFrZWZpbGUuaW5dIFtkb2N1bWVudGF0aW9uL01ha2VmaWxlLmluXSAKLQkgIFtwcm9ncmFtcy9NYWtlZmlsZS5pbl0gW3Byb2dyYW1zLyovTWFrZWZpbGUuaW5dCi0JQWRkZWQgdW5pbnN0YWxsIHJ1bGVzLCBjbGVhbmVkIHVwIGluc3RhbGwgcnVsZXMgYSBsaXR0bGUgYml0LgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1TdW4gQXVnICA5IDEzOjIxOjM1IDE5OTggIEFuZHJlYXMgTW9ociA8MTAwLjMwOTM2QGdlcm1hbnkubmV0PgotCi0JKiBbbG9hZGVyL25lL21vZHVsZS5jXSBbaWYxNjMyL2tlcm5lbC5zcGVjXQotCUFkZGVkIHRoZSB1bmRvY3VtZW50ZWQgSElXT1JEIG9mIEdldE1vZHVsZUhhbmRsZSAoaEZpcnN0TW9kdWxlKS4KLQotCSogW2xvYWRlci9uZS9zZWdtZW50LmNdCi0JV2luZSBmb3Jnb3QgdG8gc2V0IHNvbWUgTkVfU0VHRkxBR1NfKi4KLQlDb21iaW5lZCB3aXRoIGFub3RoZXIgbG9hZGVyIGNoYW5nZSwgdGhpcyBmaXhlZCB0aGUKLQkiQkxJTktFUiAtLSBlcnJvciBpbiBsb2FkaW5nIG1vZHVsZSIgb3IgZ2hvc3QgTWVzc2FnZUJveCBwcm9ibGVtCi0JdGhhdCBhYm91dCAxJSBvZiBhbGwgV2luZG93cyBwcm9ncmFtcyBoYXZlLgotCVNvbWUgQkxJTktFUiBwcm9ncmFtcyBzdGlsbCBkb24ndCB3b3JrLCB0aG91Z2guCi0JQnV0IEknbSB3b3JraW5nIG9uIGl0LCB3aXRoIGdyZWF0IGhlbHAgZnJvbSBCbGlua2luYy4KLQotCSogW2xvYWRlci90YXNrLmNdCi0JSW5pdFRhc2sgbmVlZHMgdG8gZGVjcmVtZW50IHRoZSBTUCByZWdpc3RlciBieSB0d28gYXMgV2luOTUgZG9lcy4KLQotU3VuIEF1ZyAgOSAwMjo0MToyOCAxOTk4ICBVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KLQotCSogW2lmMTYzMi9rZXJuZWwuc3BlY10gW3JlbGF5MzIva2VybmVsMzIuc3BlY10gW3NjaGVkdWxlci9zeXNsZXZlbC5jXQotCSAgW2xvYWRlci9tYWluLmNdIFt3aW4zMi9vcmRpbmFscy5jXSBbaW5jbHVkZS9zeXNsZXZlbC5oXSAKLQkgIFtzY2hlZHVsZXIvTWFrZWZpbGUuaW5dCi0JSW1wbGVtZW50ZWQgV2luOTUgJ3N5c2xldmVsJyByb3V0aW5lcyAoaW5jbHVkaW5nIFdpbjE2TG9jaykuCi0KLQkqIFtpZjE2MzIvcmVsYXkuY10gW2lmMTYzMi90aHVuay5jXSBbdG9vbHMvYnVpbGQuY10gW2xvYWRlci90YXNrLmNdCi0JICBbbG9hZGVyL25lL3NlZ21lbnQuY10gW3dpbjMyL2tlcm5lbDMyLmNdIFttZW1vcnkvc2VsZWN0b3IuY10KLQkgIFtpbmNsdWRlL3N0YWNrZnJhbWUuaF0gW2luY2x1ZGUvdGhyZWFkLmhdCi0JMTYtYml0ICVmcyBoYW5kbGluZyByZXZpc2VkLiAgVXNlIFdpbjE2TG9jayB3aGVyZSBhcHByb3ByaWF0ZS4KLQotCSogW2luY2x1ZGUvdGhyZWFkLmhdIFtzY2hlZHVsZXIvc3luY2hyby5jXSBbd2luZG93cy9tZXNzYWdlLmNdIAotCSAgW3dpbmRvd3MvcXVldWUuY10gW3dpbjMyL3Byb2Nlc3MuY10KLQlJbXBsZW1lbnRlZCBNc2dXYWl0Rm9yTXVsdGlwbGVPYmplY3RzLgotCi0JKiBbZmlsZXMvY2hhbmdlLmNdIFtmaWxlcy9NYWtlZmlsZS5pbl0gW3NjaGVkdWxlci9rMzJvYmouY10gCi0JICBbd2luMzIvbmV3Zm5zLmNdCi0JSW1wbGVtZW50ZWQgKGR1bW15KSBmaWxlIGNoYW5nZSBub3RpZmljYXRpb24gb2JqZWN0cy4KLQotCSogW2RlYnVnZ2VyL2RiZy55XSBbc2NoZWR1bGVyL3Byb2Nlc3MuY10gW3NjaGVkdWxlci90aHJlYWQuY10KLQkgIFtpbmNsdWRlL3Byb2Nlc3MuaF0gW2luY2x1ZGUvdGhyZWFkLmhdCi0JU3VzcGVuZCBhbGwgdGhyZWFkcyBleGNlcHQgY3VycmVudCB3aGVuIGhpdHRpbmcgZGVidWdnZXIgYnJlYWsgcG9pbnQuCi0KLQkqIFtvYmplY3RzL2RpYi5jXQotCUJ1Z2ZpeCBmb3IgQ3JlYXRlRElCU2VjdGlvbi4KLQotU2F0IEF1ZyAgOCAxOToxMTo0NiAxOTk4ICBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KLQotIAkqIFsqLypdCi0JQWRkZWQgc29tZSBtaXNzaW5nIFdJTkFQSSBhbmQgc29tZSBtaXNzaW5nIHByb3RvdHlwZXMgZm9yCi0JZnVuY3Rpb25zLgotCi0JKiBbY29udHJvbHMvc3RhdGljLmNdCi0JR290IHJpZCBvZiB0aGUgTU9EVUxFMzJfTG9va3VwSE1PRFVMRSBlcnJvciBzaG93aW5nIHVwIGZvciBldmVyeQotCW1lc3NhZ2UgYm94LgotCi0JKiBbd2luZG93cy93aW5wcm9jLmNdCi0JV01fTk9USUZZIDE2LT4zMiBtYXBwaW5nIChBT0wgSW5zdGFudCBNZXNzZW5nZXIgb3IgaG93ZXZlciBpdCBpcyBjYWxsZWQpLgotCi0JKiBbbWlzYy93aW5zb2NrLmNdCi0JaG9zdGVudC9zZXJ2ZW50L3Byb3RvZW50IHNob3VsZCBub3QgdXNlIHRoZSBzYW1lIHN0YXRpYyBidWZmZXJzLgotCShoYXMgYnJva2VuIG50My4xNSBmaW5nZXIuZXhlIHdoaWNoIGRvZXMgaHA9Z2V0aG9zdGJ5bmFtZSgpLCB0aGVuCi0JZ2V0c2VydmJ5bmFtZSgiZmluZ2VyIiwidGNwIikgYW5kIHRoZSByZWZlcmVuY2VzIGhwLT5oX2FkZHJfbGlzdFswXSkuCi0KLVNhdCBBdWcgIDggMTM6MjE6MjQgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+Ci0KLQkqIFtpbmNsdWRlL3NlcnZlci5oXSBbdG9vbHMvbWFrZV9yZXF1ZXN0c10gW3NlcnZlci9yZXF1ZXN0LmNdCi0JICBbc2VydmVyL3RyYWNlLmNdCi0JQXV0b21hdGVkIHBhcnQgb2YgdGhlIGNsaWVudC9zZXJ2ZXIgcmVxdWVzdCBjb2RlIGdlbmVyYXRpb24uCi0JQWRkZWQgdHJhY2luZyBvZiBjbGllbnQvc2VydmVyIGNvbW11bmljYXRpb24uCi0KLQkqIFtzY2hlZHVsZXIvKi5jXSBbc2VydmVyL3Byb2Nlc3MuY10KLQlBZGRlZCBzdXBwb3J0IGZvciBzZXJ2ZXItc2lkZSBoYW5kbGVzLgotCi0JKiBbc2NoZWR1bGVyL3RocmVhZC5jXQotCUFkZGVkIERMTF9USFJFQURfQVRUQUNIL0RFVEFDSCBub3RpZmljYXRpb25zLgotCi0JKiBbY29uZmlndXJlLmluXQotCUFkZGVkIGNoZWNrIGZvciAtbHNvY2tldC4KLQotCSogW3dpbmRvd3Mvd2lucHJvYy5jXQotCVJldHVybiB0aGUgdGh1bmsgYWRkcmVzcyBpbiBXSU5QUk9DX0dldFByb2MgaWYgdGhlIGZ1bmN0aW9uIHR5cGVzCi0JZG9uJ3QgbWF0Y2guCi0KLVNhdCBBdWcgIDggMDI6NDQ6MDQgMTk5OCAgRG91Z2xhcyBSaWRnd2F5ICA8cmlkZ3dheUB3aW5laHEuY29tPgotCi0JKiBbd2luZG93cy93aW5wcm9jLmNdW3dpbmRvd3Mvd2luLmNdW3dpbmRvd3MvbWVzc2FnZS5jXSAgCi0JRG9jdW1lbnRhdGlvbiBmb3IgQ2FsbFdpbmRvd1Byb2MsIFNldFdpbmRvd0xvbmcsIERpc3BhdGNoTWVzc2FnZSwKLQlXYWl0TWVzc2FnZSwgR2V0TWVzc2FnZSwgYW5kIFBlZWtNZXNzYWdlLgotCi1TYXQgQXVnICA4IDAxOjAwOjAwIDE5OTggIEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgotCi0JKiBbY29udHJvbHMvY29tbWN0cmwuY11bY29udHJvbHMvd2lkZ2V0cy5jXVtpbmNsdWRlL2J1aWx0aW4zMi5oXQotCSAgW2luY2x1ZGUvY29tbWN0cmwuaF1bcmVsYXkzMi9idWlsdGluMzIuY11bcmVsYXkzMi9jb21jdGwzMi5zcGVjXQotCSAgW3Rvb2xzL2J1aWxkLmNdIFtyZWxheTMyL3NoZWxsMzIuc3BlY10KLQlBZGRlZCB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgTGliTWFpbiBmdW5jdGlvbi4gVGhlIGNvbW1vbiAKLQljb250cm9scyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgbm93LgotCi0JKiBbY29udHJvbHMvdHJlZXZpZXcuY11bbWVtb3J5L2F0b20uY11bc2NoZWR1bGVyL3RocmVhZC5jXVt3aW5kb3dzL2NsYXNzLmNdCi0JICBbd2luZG93cy9tc2dib3guY11bd2luZG93cy93aW4uY10KLQlQdXQgVFJBQ0UgaW4sIHB1dCBTZXRMYXN0RXJyb3IoKSBpbi4KLQotCSogW2luY2x1ZGUvaW50ZXJmYWNlcy5oXQotCUFkZGVkIElDbGFzc0ZhY3Rvcnk6OkxvY2tTZXJ2ZXIuCi0KLQkqIFtpbmNsdWRlL29sZTIuaF0KLQlBZGRlZCBzdHJ1Y3QgZm9yIExQT0xFTUVOVUdST1VQV0lEVEhTMzIsIEhPTEVNRU5VMzIuCi0KLQkqIFtpbmNsdWRlL3NoZWxsLmhdW2luY2x1ZGUvc2hsb2JqLmhdW21pc2Mvc2hlbGwuY11bb2xlL2ZvbGRlcnMuY10KLQlSZW9yZ2FuaXplZCBhbmQgbWFueSBzdHJ1Y3RzIGFuZCBjbGFzc2VzIChJU2hlbGxCcm93c2VyLElTaGVsbFZpZXcpCi0JYWRkZWQuIHNoZWxsMzIuZGxsIHNob3VsZCB3b3JrIGluIG1hbnkgY2FzZXMgbm93LgotCVN0YXJ0ZWQgU0hHZXRGaWxlSW5mb0EgaW1wbGVtZW50ZWF0aW9uLCByZXdyb3RlIFNIR2V0UGF0aEZyb21JRExpc3QzMkEuCi0JTmV3IFNoZWxsMzJMaWJNYWluIHN0YXJ0ZWQgU2hlbGxJY29uQ2FjaGUgSW1wbGVtZW50YXRpb24uCi0KLQkqIFttaXNjL3NoZWxsb3JkLmNdCi0JUmV3cm90ZSBJTENvbWJpbmUsIElMR2V0U2l6ZQotCU5ldyBzdHVicyBTSEZpbmRfSW5pdE1lbnVQb3B1cCwgRmlsZU1lbnVfQ3JlYXRlLCBTaGVsbEV4ZWN1dGVFeCwKLQlTSFNldEluc3RhbmNlRXhwbG9yZXIsIFNIR2V0SW5zdGFuY2VFeHBsb3JlciwgU0hGcmVlVW51c2VkTGlicmFyaWVzLgotCi0JKiBbaW5jbHVkZS93aW5lcnJvci5oXQotCUNsYXNzIGFuZCB3aW5kb3cgcmVsYXRlZCBlcnJvciBjb2RlcyBhZGRlZC4KLQotCSogW21lbW9yeS9oZWFwLmNdCi0JQ2hhbmdlZCBsc3RybGVuMzJBIHRvIHN0cmxlbiB0byBnZXQgcmlkIG9mIG1pbGlvbnMgb2YgVFJBQ0UgbGluZXMuCi0KLQkqIFttaXNjL2RkZW1sLmNdCi0JRmlyc3QgbGluZXMgZm9yIERkZUNyZWF0ZVN0cmluZ0hhbmRsZTMyQSAvIERkZUZyZWVTdHJpbmdIYW5kbGUzMi4KLQotCSogW21pc2MvbmV0d29yay5jXVtyZWxheTMyL21wci5zcGVjXQotCUZpeGVkIHNvbWUgYnVncywgY2hhbmdlZCBvcmRpbmFscy4KLQotCSogW3dpbmRvd3MvY2xhc3MuY10KLQlXb3JrYXJvdW5kcyBmb3IgaW5jb3JyZWN0IGhJbnN0YW5jZSBoYW5kbGluZy4gRml4ZXMgcGFydHMgb2YKLQlNU1dvcmQ5NS9FeGNlbDk1IGFuZCBNb25leTk1LgotCi1UaHUgQXVnICA2IDIxOjA1OjM1IDE5OTggIEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+Ci0KLQkqIFt3aW5kb3dzL25vbmNsaWVudC5jXVttaXNjL3R3ZWFrLmNdW2luY2x1ZGUvdHdlYWsuaF0KLQkgIFtkb2N1bWVudGF0aW9uL3dpbjk1bG9va10KLQlSZW1vdmVkIHNvbWUgdHdlYWsgdmFyaWFibGVzLiBUaGV5IGFyZSBubyBsb25nZXIgbmVlZGVkLgotCi0JKiBbZmlsZXMvZG9zX2ZzLmNdCi0JQWRkZWQgY2hlY2sgZm9yIG51bGwgcG9pbnRlciBpbiBET1NGU19HZXREZXZpY2UoKS4KLQotCSogW2NvbnRyb2xzL3Rvb2x0aXBzLmNdW2luY2x1ZGUvY29tbWN0cmwuaF0KLQlJbXByb3ZlZCB0b29sdGlwcy4KLQotCSogW2NvbnRyb2xzL3N0YXR1cy5jXVtpbmNsdWRlL2NvbW1jdHJsLmhdCi0JQ2xlYW5lZCB1cCBjb2RlIGFuZCBhZGRlZCB0b29sdGlwIHN1cHBvcnQuCi0KLQkqIFtjb250cm9scy90b29sYmFyLmNdW2luY2x1ZGUvY29tbWN0cmwuaF0KLQlBZGRlZCB0b29sdGlwIHN1cHBvcnQuCi0KLQkqIFtkb2N1bWVudGF0aW9uL2NvbW1vbl9jb250cm9sc10KLQlVcGRhdGVkLgotCi1UaHUgQXVnICA2IDAwOjA1OjIyIDE5OTggIFV3ZSBCb25uZXMgIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+Ci0KLQkqIFtpbmNsdWRlL3Zlci5oXSBbbWlzYy92ZXIuY10KLQlXcml0ZSBWSUZfQlVGRlRPT1NNQUxMLCBub3QgVklGX0JVRlRPU01BTEwuCi0KLQkqIFtkZWJ1Z2dlci9oYXNoLmNdIFtkZWJ1Z2dlci9zdGFicy5jXQotCU1ha2UgZGVidWcgb3V0cHV0IG1vcmUgZnJpZW5kbHkgZm9yIHBvc3RpbmcuCi0KLQkqIFtmaWxlcy9maWxlLmNdCi0JUGFydGlhbCBpbXBsZW1lbnRhdGlvbiBvZiBPRl9TSEFSRV9FWENMVVNJVkUuCi0JTmVlZGVkIGZvciBRdWlja2xvZ2ljL1F1aWNrQ2hpcCAoSW5zdGFsbFNoaWVsZCkuCi0KLQkqIFtmaWxlcy9wcm9maWxlLmNdCi0JV2hlbiBhIGNhY2hlZC1vbmx5IGVudHJ5IGlzIGZvdW5kLCByZXR1cm4gaXQuCi0KLQkqIFtncmFwaGljcy94MTFkcnYveGZvbnQuY10KLQlBY2NlcHQgYSBzcGFjZSBhcyBkZWxpbWl0ZXIgZm9yIGEgZm9udG5hbWUgYW5kIGluaGliaXQgb3ZlcnJ1bgotCShNYWtlIHhwbGFzaW0uZXggZnJvbSB0aGUgUGhpbGxpcHMgQ29vbHJ1bm5lciBDUExEIHN1aXRlIHByb2NlZWQpLgotCi0JKiBbbWlzY2VtdS9tYWluLmNdCi0JRGVsYXkgc2V0dGluZyBJRjE2MzJfQ2FsbExhcmdlU3RhY2sgYWZ0ZXIgbG9hZGluZyB0aGUgZXhlY3V0YWJsZXMuCi0JU3RvcHMgZnBnYWV4cC5leGUgZnJvbSB0aGUgVmlld2xvZ2ljIEZQR0Egc3VpdGUgZnJvbSBjcmFzaGluZyB3aGVuCi0gCXNob3dpbmcgdGhlIEJsaW5rZXIgZXJyb3IgTWVzc2FnZSBCb3guCi0KLQkqIFttaXNjL25ldHdvcmsuY10KLQlNYWtlIFdOZXRHZXRDb25uZWN0aW9uMTYgcmVjb2duaXNlIGEgQ0RST00gYXMgYSBsb2NhbCBkcml2ZS4KLQotCSogW211bHRpbWVkaWEvbW1zeXN0ZW0uY10KLQlQcmVsaW1pbmFyeSBjaGVjayBmb3IgTUNJX0FMTF9ERVZJQ0VfSUQgaW4gTUNJX0Nsb3NlIGJ5IGEgRklYTUUuCi0KLQotVHVlIEF1ZyA0IDIxOjE1OjIzIDE5OTggIEphbWVzIEp1cmFuIDxqcmoxMjBAcHN1LmVkdT4KLQotCSogW29sZS9vbGUybmxzLmNdCi0JRml4ZWQgYnVnIGluIENvbXBhcmVTdHJpbmczMkEuICBzdHJjbXAoKSBkb2Vzbid0IG5lY2Vzc2FyaWx5Ci0JcmV0dXJuIC0xLCAwLCBvciAxLCB3aGljaCB0aGUgcHJldmlvdXMgY29kZSBkZXBlbmRlZCBvbi4KLQlDaGFuZ2VkIG5hbWUgb2YgaXNfcHVuY3R1YXRpb24gdG8gT0xFMk5MU19pc1B1bmN0dWF0aW9uLgotCU1hZGUgTk9STV9JR05PUkVXSURUSCBub3QgcHJpbnQgYSBGSVhNRSBtZXNzYWdlIGluIAotCUxDTWFwU3RyaW5nMzJBLgotCU90aGVyIGRlYnVnZ2luZyBtZXNzYWdlcywgZG9jdW1lbnRhdGlvbiwgYW5kIGNvZGUgY2xlYW51cHMuCi0KLQkqIFtvYmplY3RzL2ZvbnQuY10gW3JlbGF5MzIvZ2RpMzIuc3BlY10gW2luY2x1ZGUvd2luZXJyb3IuaF0KLQlBZGRlZCBzdHViIGZvciBHZXRGb250RGF0YTMyLCBhbmQgYWRkZWQgR0RJX0VSUk9SIGNvbnN0YW50IAotCXRvIHdpbmVycm9yLmguCi0KLVR1ZSBBdWcgIDQgMDc6NDQ6NDMgMTk5OCAgT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+Ci0KLQkqIFttdWx0aW1lZGlhL21taW8uY10KLQlJbXBsZW1lbnRlZCBtbWlvU2V0QnVmZmVyLCBtbWlvQWR2YW5jZSwgbW1pb0FzY2VuZCwgYW5kCi0JbW1pb0NyZWF0ZUNodW5rIHRvIHRoZSBiZXN0IG9mIG15IGtub3dsZWRnZS4gQnV0IHdhdGNoIG91dCwKLQl0aGVyZSdzIGJvdW5kIHRvIGJlIGJ1Z3MgaW4gdGhlcmUuLi4KLQotCSogW2luY2x1ZGUvbW1zeXN0ZW0uaF0gW211bHRpbWVkaWEvbW1zeXN0ZW0uY10KLQlIYWNrZWQgaW4gc3VwcG9ydCBmb3IgMzItYml0IG11bHRpbWVkaWEgZnVuY3Rpb24gY2FsbGJhY2tzLgotCi0JKiBbQVVUSE9SU10gW21pc2Mvc2hlbGwuY10KLQlTZWxmaXNobHkgY3JlZGl0ZWQgbXkgYXV0aG9yc2hpcC4gSG9wZWZ1bGx5IEknbSBleGN1c2VkLgotCi0JKiBbaW5jbHVkZS9kb3NleGUuaF0gW2luY2x1ZGUvbW9kdWxlLmhdIFtsb2FkZXIvZG9zLypdCi0JICBbbG9hZGVyL21vZHVsZS5jXSBbbG9hZGVyL3Rhc2suY10gW01ha2VmaWxlLmluXQotCSAgW2NvbmZpZ3VyZS5pbl0gW01ha2VmaWxlLmluXQotCUFkZGVkIERPUyBFWEUgKE1aKSBsb2FkZXIgYW5kIHZpcnR1YWwgbWFjaGluZS4gVGFzawotCXN0cnVjdHVyZSBpbnRlZ3JhdGlvbiB0aGFua3MgdG8gVWxyaWNoIFdlaWdhbmQuCi0KLQkqIFtmaWxlcy9kb3NfZnMuY10KLQlXb3JrIGFyb3VuZCBhIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBpZiBpb2N0bEdldERldmljZUluZm8taW5nCi0JYSBGSUxFX0R1cFVuaXhIYW5kbGUnZCBmaWxlIChpLmUuIEdldFN0ZEhhbmRsZSdkKS4KLQotCSogW2luY2x1ZGUvbWlzY2VtdS5oXSBbaW5jbHVkZS93aW5udC5oXSBbbG9hZGVyL21haW4uY10KLQkgIFttZW1vcnkvZ2xvYmFsLmNdIFttc2Rvcy9kcG1pLmNdIFttc2Rvcy9kb3NtZW0uY10KLQlBZGRlZCBzdXBwb3J0IGZvciBET1MgbWVtb3J5IGltYWdlcywgYW5kIGFkZGVkCi0JRE9TTUVNX1Jlc2l6ZUJsb2NrKCkgYW5kIERPU01FTV9BdmFpbGFibGUoKS4KLQotCSogW21zZG9zL2ludDIxLmNdCi0JQWRkZWQgc3VwcG9ydCBmb3IgdGhlIERPUyB2aXJ0dWFsIG1hY2hpbmUsIHR3ZWFrZWQgaGFuZGxlCi0JYXNzaWdubWVudCB0byBhdm9pZCBzdGRpbyBjbGFzaGVzLCBmb3JjZWQgSU5UMjFfRmluZE5leHQgdG8gZXhpdAotCXdpbGRjYXJkbGVzcyBzZWFyY2hlcyBhZnRlciBmaW5kaW5nIG9uZSBlbnRyeSwgYWRkZWQgQUg9NywgOCwgOSwKLQlDLCA0OCwgNDksIDRBLCBhbmQgNzE2MCBDTD0xIChHZXQgU2hvcnQgRmlsZW5hbWUpLCBhbmQgbWFkZSB0aGUKLQlsb25nIGZpbGVuYW1lIGNhbGxzIG9ubHkgcmVzcG9uZCBpZiBydW5uaW5nIHdpdGggd2l0aCAtd2ludmVyCi0Jd2luOTUuCi0KLQkqIFtvYmplY3RzL2N1cnNvcmljb24uY10KLQlEZXN0cm95Q3Vyc29yMzIgYW5kIERlc3Ryb3lJY29uMzIgc2hvdWxkIG5vdyBmcmVlIHRoZSBvYmplY3RzCi0JKGhvcGVmdWxseSkgY29ycmVjdGx5LgotCi1TdW4gQXVnICAyIDIxOjQyOjA5IDE5OTggIEh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgotCi0JKiBbZ3JhcGhpY3MvcHNkcnYvKl0gW2luY2x1ZGUvcHNkcnYuaF0KLQlBZGRlZCBQUEQgZmlsZSBwYXJzaW5nIC0gYXQgdGhlIG1vbWVudCBpdCByZWFkcyBhIGZpbGUgY2FsbGVkCi0JZGVmYXVsdC5wcGQgZnJvbSB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIHlvdSBzdGFydCBXaW5lLiBQYWdlIHNpemVzCi0Jb3RoZXIgdGhhbiBBNCBzaG91bGQgbm93IHdvcmsgKGxhbmRzY2FwZSBtYXkgbm90KS4gQWxsIGZvbnRzIHRoYXQgYXJlCi0JcHJlc2VudCBvbiB5b3VyIHByaW50ZXIgKGFjY29yZGluZyB0byB0aGUgUFBEKSBzaG91bGQgYmUgYXZhaWxhYmxlLAotCXByb3ZpZGluZyB5b3UgaGF2ZSB0aGUgQUZNIGZpbGVzLiBGb250cyBzaG91bGQgbm93IGJlIHRoZSBjb3JyZWN0IHNpemUuCi0JR3JhcGhpY3MgaXMgc3RpbGwgYmFzaWNhbGx5IGxpbmVzIG9ubHkuIFNlZSBncmFwaGljcy9wc2Rydi9SRUFETUUgLgotCi0JKiBbbWlzYy9wcmludGRydi5jXQotCVlldCBtb3JlIERydltHZXQvU2V0XVByaW50ZXJEYXRhIGZpeGVzLgotCi1GcmkgSnVsIDMxIDIxOjMzOjIyIDE5OTggIFBlciBMaW5kc3Ry9m0gPHBlbGluc3RyQGFsZ29uZXQuc2U+Ci0KLQkqIFtyZWxheTMyL2NydGRsbC5zcGVjXSBbbWlzYy9jcnRkbGwuY10KLQlBZGRlZCBzdHViIGZvciBmcmVvcGVuLCBfZmluZGZpcnN0LCBfZmluZG5leHQsIF9mc3RhdCBhbmQgX3JlYWQuCi0KLQkqIFtmaWxlcy9kaXJlY3RvcnkuY10KLQlNb2RpZmllZCB3YXJuaW5nIG1lc3NhZ2UuCi0KLVdlZCBKdWwgMjkgMTE6MjU6MjggMTk5OCAgTHVpeiBPdGF2aW8gTC4gWm9yemVsbGEgIDx6b3J6ZWxsYUBuci5jb25leHdhcmUuY29tPgotCi0JKiBbb2JqZWN0cy9mb250LmNdCi0JQWRkZWQgc3R1YiBmb3IgR2V0Rm9udERhdGEuCi0KLQkqIFttdWx0aW1lZGlhL21zdmlkZW8uY10KLQlDcmVhdGVkIHRoaXMgZmlsZSB0byBob2xkIHRoZSBtc3ZpZGVvLmRsbCBjYWxscyAoYW5kIG1heWJlIGFsc28KLQltc3ZmdzMyLmRsbCkuIAotCi0JKiBbb2JqZWN0cy9jdXJzb3JpY29uLmNdCi0JQWRkZWQgc2VhcmNoIGluIEdsb2JhbCBIZWFwIGZvciBjdXJzb3Igd2hlbiB0cnlpbmcgdG8gZGVzdHJveSBpdAotCXdpdGggRGVzdHJveUN1cnNvcjE2LiBUaGlzIHRlc3Qgc2hvdWxkIGJlIGRvbmUgaW4gbWFueSAoYWxsPykKLQlvdGhlciBmdW5jdGlvbnMgdGhhdCB1c2UgRnJlZVJlc291cmNlLgotCi0JKiBbY29udHJvbHMvdHJlZXZpZXcuY10gW2luY2x1ZGUvY29tbWN0cmwuaF0KLQlNaW5vciBjb3JyZWN0aW9uIGluIG5hbWUgYW5kIGFkZGl0aW9uIG9mIG1hbnkgcGxhY2Vob2xkZXJzIGZvciBUVk0KLQltZXNzYWdlcyBpbiBUUkVFVklFV19XaW5kb3dQcm9jLgotCi0JKiBbbXNkb3MvZHBtaS5jXQotCUZpeGVkIGEgYnVnIGluIERQTUlfeHJlYWxsb2Mgd2hlcmUgaW4gYSBjb3B5IG9mIGEgbWVtb3J5IHJlZ2lvbgotCSJBIiBvZiBzaXplICJhIiB0byBhIHJlZ2lvbiAiQiIgb2Ygc2l6ZSAiYiIsICJiIiBieXRlcyB3ZXJlIGJlaW5nCi0JY29waWVkLCBpbnN0ZWFkIG9mICJhIiwgYXMgdGhlIG5ldyB2ZXJzaW9uIGRvZXMuIFRoaXMgYm90aAotCWluY3JlYXNlcyBzcGVlZCwgYXMgd2VsbCBhcyBhdm9pZHMgc2VnZmF1bHRzLgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1TYXQgSnVsIDI1IDE5OjQ1OjQ1IDE5OTggIEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgotCi0JKiBbaW5jbHVkZS9zaGxvYmouaF1bbWlzYy9zaGVsbC5jXVttaXNjL3NoZWxsb3JkLmNdW29sZS9mb2xkZXJzLmNdCi0JW3NoZWxsMzIuc3BlY10KLQlBZGRlZCBTSEZJTEVPUFNUUlVDVDMyW0F8V10gYW5kIGNvbnN0YW50cywgcHJvdG90eXBlcy4KLQlJbXBsZW1lbnRlZCBTSEdldFNwZWNpYWxGb2xkZXJMb2NhdGlvbiwgU0hHZXRQYXRoRnJvbUlETGlzdDMyW0FdLgotCU1hbnkgSVNoZWxsRm9sZGVyLCBwaWRsLCBzaGVsbCAtcmVsYXRlZCBjaGFuZ2VzLgotCi0JU0hDaGFuZ2VOb3RpZnlSZWdpc3RlciwgU0hDaGFuZ2VOb3RpZnlEZXJlZ2lzdGVyLAotCVNIU2hlbGxGb2xkZXJWaWV3X01lc3NhZ2UsIFNITWFwUElETFRvU3lzdGVtSW1hZ2VMaXN0SW5kZXgsCi0JU0hBZGRUb1JlY2VudERvY3MzMiwgU0hGaWxlT3BlcmF0aW9uLCBTSENoYW5nZU5vdGlmeSwgCi0JU0hDcmVhdGVTaGVsbEZvbGRlclZpZXdFeCBzdHVicy4KLQotU2F0IEp1bCAyNSAxNzoxNjoyNSAxOTk4ICBIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KLQotCSogW2ZpbGVzL3Byb2ZpbGUuY10KLQlGaXggcmV0dXJuIHZhbHVlIG9mIFBST0ZJTEVfR2V0U2VjdGlvbigpLgotCi1GcmkgSnVsIDI0IDIyOjQ1OjE5IDE5OTggIE92ZSBLYWF2ZW4gPG92ZWtAaXNmbGFrLmFyY3RpY25ldC5ubz4KLQotCSogW2NvbnRyb2xzL2VkaXQuY10KLQlLaWxsZWQgdGhlIG1vZGlmaWVkIGZsYWcgb24gV01fU0VUVEVYVC4gRXVkb3JhIHNob3VsZCBubyBsb25nZXIKLQlib3RoZXIgYXNraW5nIHdoZXRoZXIgeW91IHdhbnQgdG8gc2F2ZSBhbiB1bmNoYW5nZWQgbWVzc2FnZS4KLQotRnJpIEp1bCAyNCAyMToyMTozNSAxOTk4ICBBbmRyZWFzIE1vaHIgPDEwMC4zMDkzNkBnZXJtYW55Lm5ldD4KLQotCSogW2NvbnRyb2xzL21lbnUuY10KLQlGaXhlZCBidWcgaW4gR2V0TWVudVN0YXRlMzIuCi0JRG9lc24ndCBmaXggRnJlZSBBZ2VudCAzMiA6KCgKLQotCSogW2RvY3VtZW50YXRpb24vZGVidWdnaW5nXQotCUhpbnRzIGFkZGVkLgotCi0JKiBbZmlsZXMvZG9zX2ZzLmNdIFtpbmNsdWRlL21zZG9zLmhdIFttc2Rvcy9pbnQyMS5jXQotCUVuaGFuY2VkIERPUyBkZXZpY2Ugc3VwcG9ydC4KLQotCSogW2lmMTYzMi9NYWtlZmlsZS5pbl0gW2lmMTYzMi9idWlsdGluLmNdIFtpZjE2MzIvcmFzYXBpMTYuc3BlY10KLQkgIFtyZWxheTMyL01ha2VmaWxlLmluXSBbcmVsYXkzMi9idWlsdGluMzIuY10gW3JlbGF5MzIvcmFzYXBpMzIuc3BlY10KLQlBZGRlZCBSQVNBUEkxNi8zMi5ETEwuCi0KLQkqIFttaXNjL2FzcGkuY10gW3JlbGF5MzIvd25hc3BpMzIuc3BlY10KLQlJbXBsZW1lbnRlZCBHZXRBU1BJMzJTdXBwb3J0SW5mby4KLQotCSogW211bHRpbWVkaWEvbW1zeXN0ZW0uY10KLQlJbXBsZW1lbnRlZCBtbVRhc2tDcmVhdGUuCi0KLUZyaSBKdWwgMjQgMjA6NTU6MzEgMTk5OCAgRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KLQotCSogW2NvbnRyb2xzL3Rvb2xiYXIuY10KLQlGaXhlZCBzb21lIGJ1Z3MgYW5kIGFkZGVkIG5ldyBmZWF0dXJlcy4KLQotCSogW2NvbnRyb2xzL3Rvb2x0aXBzLmNdW2luY2x1ZGUvdG9vbHRpcHMuaF0KLQlBZGRlZCBtb3JlIG1lc3NhZ2VzIGFuZCBzdGFydGVkIGRpc3BsYXkgY29kZS4KLQotCSogW21pc2Mvc2hlbGwuY11bbWlzYy9zaGVsbG9yZC5jXVtyZWxheTMyL3NoZWxsLnNwZWNdCi0JRml4ZWQgU3RyVG9PbGVTdHJOIChTSEVMTDMyXzc5KSBhbmQgYWRkZWQgT2xlU3RyVG9TdHJOIChTSEVMTDMyXzc4KS4KLQlBZGRlZCBzb21lIG5ldyBzdHVicy4KLQotCSogW29iamVjdHMvY3Vyc29yaWNvbi5jXVttaXNjL2ltYWdlbGlzdC5jXVtpbmNsdWRlL3dpbmRvd3MuaF0KLQlGaXhlZCBHZXRJY29uSW5mbyBhbmQgcmVtb3ZlZCB0aGUgR2V0SWNvbkluZm8gaGFjayBmcm9tIHRoZQotCWltYWdlIGxpc3QgY29kZS4KLQotCSogW2NvbnRyb2xzL3BhZ2VyLmNdW2luY2x1ZGUvcGFnZXIuaF1bY29udHJvbHMvdHJlZXZpZXcuY10KLQkgIFtpbmNsdWRlL3RyZWV2aWV3LmhdCi0JQWRkZWQgc29tZSBtZXNzYWdlcy4KLQotCSogW21pc2MvdHdlYWsuY11bd2lub3dzL25vbmNsaWVudC5jXVtkb2N1bWVudGF0aW9uL3dpbjk1bG9va10KLQlSZW1vdmVkIHVudXNlZCB0d2VhayB2YXJpYWJsZXMuCi0KLQkqIFtkb2N1bWVudGF0aW9uL2NvbW1vbl9jb250cm9sc10KLQlVcGRhdGVkLgotCi1GcmkgSnVsIDI0IDE4OjM2OjMyIDE5OTggIEphbWVzIE1vb2R5IDwwMTMyNjNtQGRyYWdvbi5hY2FkaWF1LmNhPgotCi0JKiBbb2JqZWN0cy9mb250LmNdCi0JRml4ZWQgYSBidWcgaW4gR2V0VGV4dEZhY2UuCi0KLUZyaSBKdWwgMjQgMTc6MDk6MzMgMTk5OCAgTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+Ci0KLQkqIFttaXNjL2NvbW1kbGcuY10KLQlGaXhlZCBzdGFja3NtYXNoaW5nIGJ1ZyBkdWUgdG8gaW52YWxpZCBzcGVjaWZpZWQgZnVuY3Rpb24KLQlwb2ludGVycy4KLQotCSogW2ZpbGVzL2Rvc19mcy5jXQotCVNtYWxsIGNoYW5nZSBpbiBjYXNlIGhhbmRsaW5nLi4uIGJlIGFibGUgdG8gY3JlYXRlIGZpbGVzIHdpdGgKLQl1cHBlcmNhc2UgaW4gdGhlbSAobGlrZSBQcm9ncmFtIEZpbGVzLykuCi0KLQkqIFtncmFwaGljcy9kZHJhdy5jXQotCVhGODZER0Egc3VwcG9ydCBtYWRlIHRocmVhZHNhZmUsIGFkZGVkIG1vcmUgWGxpYiBkZXBlbmRlbnQgc3R1ZmYKLQkoY3JlYXRlIFdpbmRvdyB1c2luZyBDcmVhdGVXaW5kb3coKSwgZHJhdyBpbnRvIGl0KS4geGxpYiBzdXBwb3J0Ci0JaXMgbm90IHNhdGlzZnlpbmcuCi0KLQkqIFtzY2hlZHVsZXIvY3JpdHNlY3Rpb24uY10KLQlEb24ndCByZWN1cnNlIG9uIEhlYXBMb2NrIHdpdGggc2VtYXBob3JlIGlkIDAuCi0KLQkqIFt3aW4zMi91c2VyMzIuY11bd2luZG93cy9tZXNzYWdlLmNdW3dpbmRvd3MvZXZlbnQuY10KLQlNb3ZlZCB3aW4zMiAqTWVzc2FnZSBmdW5jdGlvbnMgd2hlcmUgdGhleSBiZWxvbmcuCi0JUmVtb3ZlZCBzb21lIHBvdGVudGlhbCByYWNlcyBiZXR3ZWVuIFhQZW5kaW5nIGFuZCBYTmV4dEV2ZW50IGJ5Ci0JYSBiaXQgbW9yZSBsb2NraW5nLgotCi1GcmkgSnVsIDI0IDEzOjU4OjE5IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgotCi0JKiBbbG9hZGVyL3BlX2ltYWdlLmNdIFtsb2FkZXIvbmUvc2VnbWVudC5jXQotCVVzZSBib2d1cyBwb2ludGVyIHZhbHVlIGluc3RlYWQgb2YgTlVMTCBmb3IgdW5yZXNvbHZlZCBleHRlcm5hbHMuCi0KLQkqIFttZW1vcnkvc2VsZWN0b3IuY10KLQlDbGVhciBzYXZlZF9mcyBvbiBzZWxlY3RvciBmcmVlLgotCi0JKiBbbXNkb3MvY2Ryb20uY10gW2NvbmZpZ3VyZS5pbl0KLQlBZGRlZCBjaGVjayBmb3IgbGludXgvdWNkcm9tLmguCi0KLQkqIFtzY2hlZHVsZXIvY2xpZW50LmNdIFtzZXJ2ZXIvc29ja2V0LmNdCi0JRml4IGZvciBtaXNzaW5nIHN0cnVjdCBjbXNnaGRyLgotCUF0dGVtcHQgdG8gc3VwcG9ydCBtc2dfYWNjcmlnaHRzIGZkIHBhc3NpbmcgKGNvbXBsZXRlbHkgdW50ZXN0ZWQpLgotCi0JKiBbd2luZG93cy9ldmVudC5jXQotCURvIG5vdCBncmFiIHRoZSBwb2ludGVyIGluIFNldENhcHR1cmUgKFdpbjMyIGJlaGF2aW9yKS4KLQotVHVlIEp1bCAyMSAyMjoyODoxMyAxOTk4ICBKYW1lcyBKdXJhbiAgPGpyajEyMEBwc3UuZWR1PgotCi0JKiBbTWFrZS5ydWxlcy5pbl0KLQlDaGFuZ2VkICQoTUtESVIpIG1hY3JvIHRvIHVzZSAtcCBvcHRpb24gKG1ha2UgcGFyZW50IGRpcmVjdG9yaWVzCi0JaWYgdGhleSBkb24ndCBhbHJlYWR5IGV4aXN0LiAgVGhpcyBmaXhlcyBhbiBlcnJvciBpbiAnbWFrZSBpbnN0YWxsJwotCWlmIC91c3IvbG9jYWwvaW5jbHVkZSBkb2Vzbid0IGFscmVhZHkgZXhpc3QuCi0KLVR1ZSBKdWwgMjEgMTM6Mzc6MDQgUmVpbiBLbGF6ZXMgPHJrbGF6ZXNAY2FzZW1hLm5ldD4KLQotCSogW2luY2x1ZGUvaGVhcC5oXQotCVJlcGxhY2VkIG1hY3JvIFNFR1BUUl9HRVQgYnkgaW5saW5lIGZ1bmN0aW9uIHRvIGF2b2lkICpsb3RzKgotCW9mIHdyb25nIHVzZSBvZiB0aGlzIG1hY3JvLgotCi0JKiBbcmVsYXkzMi9jb21kbGczMi5zcGVjXQotCUNvcnJlY3RlZCBHZXRTYXZlRmlsZU5hbWVXIGVudHJ5LgotCi0JKiBbcmVsYXkzMi9hZHZhcGkzMi5zcGVjXSBbd2luMzIvYWR2YXBpLmNdCi0JICBbcmVsYXkzMi9vbGUzMi5zcGVjXSBbIG9sZS9tb25pa2VyLmNdCi0JQWRkZWQgc3R1YnMgZm9yIFNldEZpbGVTZWN1cml0eVtBV10gYW5kIENyZWF0ZUZpbGVNb25pa2VyMzIKLQotCSogW2dyYXBoaWNzL3gxMWRydi9ncmFwaGljcy5jXQotCUZpbmlzaGVkIGltcGxlbWVudGF0aW9uIG9mIGJlemllciBkcmF3aW5nIGNvZGUuCi0KLVR1ZSBKdWwgMjEgMTE6MDA6NTEgMTk5OCAgQ2xhdXMgRmlzY2hlciA8Y2Zpc2NoZXJAdGQyY2FkLmludGVsLmNvbT4KLQotCSogW2ZpbGVzL2RyaXZlLmNdCi0JUmVtb3ZlIGxhYmVsIHRyYWlsaW5nIGJsYW5rcyBpbiBHZXRWb2x1bWVJbmZvcm1hdGlvbjMyQS4KLQotCSogW2RvY3VtZW50YXRpb24vY2Ryb20tbGFiZWxzXQotCUFkZGVkIGRvY3VtZW50YXRpb24gb24gaG93IHRvIGZpbmQgb3V0IGEgQ0QtUk9NIGxhYmVsLgotCi1TdW4gSnVsIDE5IDIzOjE2OjQxIDE5OTggIFBhc2NhbCBDdW9xIDxwY3VvcUBlbnMtbHlvbi5mcj4KLQotCSogW2luY2x1ZGUvd2luZG93cy5oXQotCUFkZGVkIHNvbWUgRE1fKiBhbmQgRElTUF9DSEFOR0VfKiBmbGFncy4KLQotCSogW3JlbGF5MzIvdXNlcjMyLnNwZWNdIFt3aW5kb3dzL3VzZXIuY10KLQlBZGRlZCBzdHViIGZvciBDaGFuZ2VEaXNwbGF5U2V0dGluZ0EuCi0KLQkqIFtvbGUvb2xlMm5scy5jXQotCWlzX3B1bmN0dWF0aW9uOiByZXVzZSBpbmZvcm1hdGlvbiBmcm9tIGFub3RoZXIgdGFibGUuCi0KLVN1biBKdWwgMTkgMjI6MDQ6NDYgMTk5OCAgRG91Z2xhcyBSaWRnd2F5ICA8cmlkZ3dheUB3aW5laHEuY29tPgotCi0JKiBbTWFrZS5ydWxlcy5pbl0KLQlVcGRhdGVkIGF1dG9tYXRpYyBkb2N1bWVudGF0aW9uIHJ1bGVzLgotCi0JKiBbZ3JhcGhpY3MvcGF0aC5jXSBbbWlzYy9hc3BpLmNdIFttaXNjL250ZGxsLmNdIFttaXNjL3dpbnNvY2tfZG5zLmNdCi0JW29sZS9vbGUyZHNwLmNdIFtyZWxheTMyL3VzZXIzMi5zcGVjXQotCUNvbW1lbnQgZm9ybWF0IGZ1dHppbmcgdG8ga2VlcCBjMm1hbiBoYXBweS4KLQotCSogW2RvY3VtZW50YXRpb24vUkVBRE1FLmRvY3VtZW50YXRpb25dCi0JVXBkYXRlZCBkZXNjcmlwdGlvbiBvZiBhdXRvbWF0aWMgZG9jdW1lbnRhdGlvbi4KLQotV2VkIEp1bCAxNSAxOToxMDowOSAxOTk4ICAgQW5kcmV3IE0uIEJpc2hvcCA8YW1iQGdlZGFua2VuLmRlbW9uLmNvLnVrPgotCi0JKiBbZmlsZXMvcHJvZmlsZS5jXQotCUNhY2hlIHRoZSAxMCBtb3N0IHJlY2VudGx5IHVzZWQgLmluaSBmaWxlcy4KLQotVHVlIE1heSAyMCAxOToyMDoyMyAxOTk3ICBQYWJsbyBTYXJhdHhhZ2EgPHNydHhnQGNoYW5hZS5hbHBoYW5ldC5jaD4KLQotCSogW21pc2MvY29tbWRsZy5jXQotCU1ha2VzIFByaW50RGxnMzJBKCkgcmV0dXJuIFRSVUUgZXZlbiBpZiBpdCBpcyBhbiBlbXB0eQotCXN0dWIsIHNvIG1vc3QgcHJvZ3JhbXMgYXJlIGhhcHB5IGFuZCBydW4gYW55d2F5IGluc3RlYWQgb2YKLQlhYm9ydGluZyBhdCBzdGFydHVwLgotCi0JKiBbZ3JhcGhpY3MveDExZHJ2L3hmb250LmNdCi0JSW5jcmVhc2VkIHRoZSBtYXhpbXVtIGZvbnQgZmFtaWxpZXMgYXMgKFgxMSkgZm9udCBhbGlhc2VzCi0JZWF0ZWQgdXAgYSBsb3Qgb2YgZmFtaWxpZXMgY2F1c2luZyB3aW5lIHRvIHN0b3AgcmVhZGluZyBmb250cy4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotU3VuIEp1bCAxMiAxNjoyMzozNiAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KLQotCSogW3NlcnZlci8qXSBbc2NoZWR1bGVyL2NsaWVudC5jXSAobmV3IGZpbGVzKQotCSAgW3NjaGVkdWxlci9zeXNkZXBzLmNdIFtzY2hlZHVsZXIvdGhyZWFkLmNdIFtzY2hlZHVsZXIvcHJvY2Vzcy5jXQotCUJlZ2lubmluZ3Mgb2YgY2xpZW50L3NlcnZlciBjb21tdW5pY2F0aW9uIGZvciBpbnRlci1wcm9jZXNzCi0Jc3luY2hyb25pc2F0aW9uLgotCi1TYXQgSnVsIDExIDE5OjQ1OjQ1IDE5OTggIFVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgotCi0JKiBbaW5jbHVkZS9iaXRtYXAuaF0gW29iamVjdHMvYml0bWFwLmNdIFtvYmplY3RzL2RpYi5jXSAKLQkgIFtvYmplY3RzL29lbWJpdG1hcC5jXQotCVNwZWVkIHVwIERJQiBzZWN0aW9uIGhhbmRsaW5nIGJ5IHVzaW5nIHByZS1hbGxvY2F0ZWQgY29sb3JtYXAgYW5kIAotCVhJbWFnZS4gTW92ZWQgRElCIHNlY3Rpb24gZGF0YSBvdXQgb2YgZ2VuZXJhbCBCSVRNQVBPQkogc3RydWN0dXJlLgotCUJ1Z2ZpeDogR2V0RElCaXRzMzIgd291bGQgb3ZlcndyaXRlIG9uZSBieXRlIGJleW9uZCBiaXRtYXAgZGF0YS4KLQotCSogW2lmMTYzMi9zaGVsbC5zcGVjXSBbaWYxNjMyL2tlcm5lbC5zcGVjXSBbd2luMzIva2VybmVsMzIuY10KLQlNb3JlIHZlcmJvc2UgZXJyb3IgbWVzc2FnZSBpZiBUaHVua0Nvbm5lY3QgZmFpbHMuCi0JSW1wbGVtZW50ZWQgS0VSTkVMXzQ3NS4KLQotCSogW2ZpbGVzL3Byb2ZpbGUuY10gW29sZS9vbGUybmxzLmNdCi0JTWlub3IgYnVnZml4ZXMuCi0KLQkqIFtpZjE2MzIvYnVpbHRpbi5jXSBbaWYxNjMyL2tlcm5lbC5zcGVjXSBbaW5jbHVkZS90YXNrLmhdCi0JICBbbG9hZGVyL25lL21vZHVsZS5jXSBbbG9hZGVyL3Rhc2suY10KLQlJbXBsZW1lbnRlZCBLRVJORUwuVEhIT09LLgotCi0JKiBbaWYxNjMyL3dwcm9jcy5zcGVjXSBbaW5jbHVkZS9wcm9jZXNzLmhdIFttc2Rvcy9kcG1pLmNdIFttc2Rvcy92eGQuY10KLQlJbXBsZW1lbnRlZCBXaW4zMnMgVnhEIHNlcnZpY2VzIChXMzJTLjM4NikuCi0KLVNhdCBKdWwgMTEgMTc6NTI6MjMgMTk5OCAgSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+Ci0KLQkqIFtncmFwaGljcy94MTFkcnYveGZvbnQuY10gW2dyYXBoaWNzL3gxMWRydi90ZXh0LmNdIAotCSAgW2luY2x1ZGUveDExZm9udC5oXQotCUltcHJvdmUgaGFuZGxpbmcgb2Ygcm90YXRlZCBYMTEgZm9udHMuIE1ldHJpY3MvZXh0ZW50cyBzaG91bGQgbm93IGJlCi0JY29ycmVjdC4gRXh0VGV4dE91dCBzaG91bGQgYmVoYXZlIGJldHRlciAoc3RpbGwgZG9lc24ndCBoYW5kbGUgbHBEeCkuCi0KLQkqIFtncmFwaGljcy9wYWludGluZy5jXQotCURyYXdGb2N1c1JlY3QzMjogRG9uJ3QgZG8gYW55dGhpbmcgaWYgd2lkdGggb3IgaGVpZ2h0IGFyZSB6ZXJvLgotCi1TYXQgSnVsIDExIDE1OjIxOjM1IDE5OTggIEFuZHJlYXMgTW9ociA8MTAwLjMwOTM2QGdlcm1hbnkubmV0PgotCi0JKiBbZmlsZXMvcHJvZmlsZS5jXSBbaW5jbHVkZS93aW5kb3dzLmhdCi0JVGhlIGxlbmd0aCBhcmd1bWVudHMgb2YgKlByb2ZpbGUqKCkgbmVlZCB0byBiZSB0cmVhdGVkCi0JYXMgVUlOVHh4IGluc3RlYWQgb2YgSU5UeHguCi0KLQkqIFtncmFwaGljcy9lbnYuY10gW2dyYXBoaWNzL3dpbjE2ZHJ2L2luaXQuY10gW2luY2x1ZGUvcHJpbnQuaF0KLQkgIFttaXNjL3ByaW50ZHJ2LmNdCi0JTWFueSBwcmludGVyIGRyaXZlciBmaXhlcy9jaGFuZ2VzIChtYW55IHRoYW5rcyBnbyB0byBIdXcgISkuCi0JTW9zdCBwcmludGVycyBzaG91bGQgd29yayBhZ2FpbiA7KQotCi0JKiBbbWVtb3J5L2F0b20uY10KLQlGaXhlZCBBVE9NX0FkZEF0b20gdG8gc3RvcmUgYXRvbXMgZXhhY3RseSBsaWtlIFdpbmRvd3MuCi0KLQkqIFsqLypdCi0JRml4ZWQgbWlzYyBjb21waWxlciB3YXJuaW5ncy4KLQotRnJpIEp1bCAxMCAxNTo1ODozNiAxOTk4ICBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KLQotCSogW2ZpbGVzL2RyaXZlLmNdCi0JRml4ZWQgR2V0RHJpdmVUeXBlMTYgdG8gcmV0dXJuIERSSVZFX1JFTU9URSBhZ2Fpbi4KLQotCSogW2xvYWRlci9wZV9pbWFnZS5jXVtsb2FkZXIvbW9kdWxlLmNdCi0JTG9vayBmb3IgbW9kdWxlcyB0aGF0IGhhdmUgdGhlIHNhbWUgbW9kdWxlbmFtZSBvciB0aGUgc2FtZQotCWZpbGVuYW1lICh0aGV5IHNvbWV0aW1lcyBkaWZmZXIpLgotCUZpeGVkIHVwIGZpeHVwX2ltcG9ydHMsIHJlbW92ZWQgb25lIG9mIHRoZSBsb29wcy4KLQotCSogW3dpbmRvd3Mvd2lucG9zLmNdCi0JQWRkZWQgc29tZSBOVUxMIHB0ciBjaGVja3MuIE5lZWRzIG1vcmUuCi0KLQkqIFtncmFwaGljcy9kZHJhdy5jXQotCVNvbWUgc3R1YnMgYWRkZWQuCi0KLQkqIFtpZjE2MzIvc25vb3AuY10KLQlVcGRhdGVkLCBtYWRlIFdJTkVMSUIgY29tcGF0aWJsZS4KLQotRnJpIEp1bCAxMCAwNDozOTo1NiAxOTk4ICBEb3VnbGFzIFJpZGd3YXkgIDxyaWRnd2F5QHdpbmVocS5jb20+Ci0KLQkqIFtvYmplY3RzL2VuaG1ldGFmaWxlLmNdIFtyZWxheTMyL2dkaTMyLnNwZWNdCi0JU21hbGwgdHdlYWtzIGZvciBkb2N1bWVudGF0aW9uIHN5c3RlbS4KLQotVGh1IEp1bCAgOSAyMjowMDoxOCAxOTk4ICBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgotCi0JKiBbY29udHJvbHMvY29tbWN0cmwuY11baW5jbHVkZS9jb21tY3RybC5oXVtyZWxheTMyL2NvbWN0bDMyLnNwZWNdCi0JRml4ZWQgR2V0RWZmZWN0aXZlQ2xpZW50UmVjdCwgQ3JlYXRlVG9vbGJhckV4IGFuZCBDcmVhdGVNYXBwZWRCaXRtYXAuCi0JQWRkZWQgc3R1YiBmb3IgU2hvd0hpZGVNZW51Q3RsLiBBZGRlZCBzb21lIGRvY3VtZW50YXRpb24uCi0KLQkqIFtkb2N1bWVudGF0aW9uL2NvbW1vbl9jb250cm9sc10KLQlBZGRlZCBhbmQgdXBkYXRlZCBzb21lIGluZm9ybWF0aW9uLgotCi0JKiBbY29udHJvbHMvdG9vbGJhci5jXVtpbmNsdWRlL3Rvb2xiYXIuaF0KLQlBZGRlZCBzdHJpbmcgc3VwcG9ydC4KLQotCSogW21pc2Mvc2hlbGwuY11bbWlzYy9zaGVsbG9yZC5jXVtyZWxheTMyL3NoZWxsLnNwZWNdCi0JQ2hhbmdlZCBuYW1lcyBvZiB1bmRvY3VtZW50ZWQgZnVuY3Rpb25zIHRvIHRoZWlyIHJlYWwgbmFtZXMgYW5kCi0JZml4ZWQgdGhlIGV4cG9ydCB0YWJsZS4KLQotCSogW2NvbnRyb2xzL2ltYWdlbGlzdC5jXVtyZWxheTMyL2NvbWN0bDMyLnNwZWNdCi0JQWRkZWQgc3R1YiBmb3IgSW1hZ2VMaXN0X1NldEZpbHRlci4KLQlGaXhlZCBzb21lIG1pbm9yIGJ1Z3MgYW5kIHR5cG9zLgotCi0JKiBbb2JqZWN0cy9mb250LmNdW2luY2x1ZGUvd2luZG93cy5oXVtyZWxheTMyL2dkaTMyLnNwZWNdCi0JQWRkZWQgc3R1YnMgZm9yIEdldENoYXJhY3RlclBsYWNlbWVudDMyW0EvV10uCi0KLQkqIFtvYmplY3RzL3JlZ2lvbi5jXVtyZWxheTMyL2dkaTMyLnNwZWNdCi0JQWRkZWQgc3R1YiBmb3IgVU5ET0NVTUVOVEVEIEdldFJhbmRvbVJnbi4KLQotCSogW2NvbnRyb2xzL2NvbW1jdHJsLmNdW2NvbnRyb2xzLyouY11baW5jbHVkZS8qLmhdCi0JQWRkZWQgZHVtbXkgbGlzdHZpZXcsIHBhZ2VyLCByZWJhciwgdG9vbHRpcHMsIHRyYWNrYmFyIGFuZAotCXRyZWV2aWV3IGNvbnRyb2wuIFRoaXMga2VlcHMgc29tZSBwcm9ncmFtcyBmcm9tIGNvbXBsYWluaW5nLgotCi1UaHUgSnVsICA5IDExOjIzOjU4IDE5OTggIFJlaW4gS2xhemVzIDxya2xhemVzQGNhc2VtYS5uZXQ+Ci0KLQkqIFtncmFwaGljcy9wYWludGluZy5jXSBbZ3JhcGhpY3MvKi9pbml0LmNdCi0JICBbZ3JhcGhpY3MveDExZHJ2L2dyYXBoaWNzLmNdIFtyZWxheTMyL2dkaTMyLnNwZWNdCi0JICBbaWYxNjMyL2dkaS5zcGVjXSBbaW5jbHVkZS9nZGkuaF0gW2luY2x1ZGUveDExZHJ2LmhdCi0JSW1wbGVtZW50ZWQgZHJhd2luZyBiZXppZXIgY3VydmVzOiBQb2x5QmV6aWVyMTYvMzIgYW5kCi0JUG9seUJlemllclRvMTYvMzIuCi0KLQkqIFtncmFwaGljcy94MTFkcnYvZ3JhcGhpY3MuY10KLQlJbXByb3ZlZCBhY2N1cmFjeSBvZiBzZXZlcmFsIGdyYXBoaWMgcm91dGluZXMsIGVzcGVjaWFsbHkgdGhlCi0JZHJhd2luZyBvZiBwaWUncy4KLQotCSogW2luY2x1ZGUvd2luZG93cy5oXSBbbWlzYy9zcHkuY10KLQlBZGRlZCAyNSB3aW5kb3cgbWVzc2FnZXMgcmVsYXRlZCB0byBwcm9ncmFtcyBiYXNlZCBvbiBNRkMgYW5kL29yIE9MRS4KLQotV2VkIEp1bCAgOCAyMjowMDowMCAxOTk4ICBKYW1lcyBKdXJhbiAgPGpyajEyMEBwc3UuZWR1PgotCi0JKiBbZG9jdW1lbnRhdGlvbi93aW5lLm1hbl0KLQlVcGRhdGVkIG1hbnBhZ2UuCi0KLQkqIFt3aW5lLmluaV0KLQlBZGRlZCBzZWN0aW9uIGZvciBXaW45NUxvb2s9dHJ1ZSAoY29tbWVudGVkIG91dCBieSBkZWZhdWx0KS4KLQotV2VkIEp1bCAgOCAwNjoyMzoxOSAxOTk4ICBNYXR0aGV3IEJlY2tlciA8bWJlY2tlckBnbGFzc2NpdHkubmV0PgotCi0JKiBbbWlzYy9yZWdpc3RyeS5jXQotCUZpeGVkIGEgY3Jhc2ggaW4gUmVnRW51bVZhbHVlMzJBIHdoZW4gdGhlIGR3VHlwZSBwYXJhbWV0ZXIgaXMKLQlOVUxMLgotCi0JKiBbcHJvZ3JhbXMvcmVndGVzdC9yZWd0ZXN0LmNdCi0JSW1wcm92ZWQgdGhlIHByaW50aW5nIG9mIGVycm9ycy4KLQotCSogW21pc2MvbnRkbGwuY10KLQlBZGRlZCBzdHViIGZvciBSdGxGb3JtYXRDdXJyZW50VXNlcktleVBhdGguCi0KLQkqIFt3aW4zMi9jb25zb2xlLmNdCi0JQWRkZWQgc3R1YiBmb3IgU2Nyb2xsQ29uc29sZVNjcmVlbkJ1ZmZlci4KLQotTW9uIEp1bCAgNiAxNjo0MTo0NyAxOTk4ICBQZXIgTGluZHN0cvZtIDxwZWxpbnN0ckBhbGdvbmV0LnNlPgotCi0JKiBbaW5jbHVkZS93aW5kb3dzLmhdIFtyZWxheTMyL2tlcm5lbC5zcGVjXSBbd2luMzIvbmV3Zm5zLmNdCi0JQWRkZWQgc3R1YnMgZm9yIFNsZWVwRXggYW5kIFRlcm1pbmF0ZVByb2Nlc3MuCi0KLQkqIFtyYy9SRUFETUVdCi0JQ29ycmVjdGVkIGEgZ3JhbW1hdGljYWwgZXJyb3IuCi0KLU1vbiBKdWwgIDMgMTI6MDA6MDAgMTk5OCAgSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+Ci0KLQkqIFttaXNjL3NoZWxsb3JkLmNdCi0JUHV0IHNvbWUgVFJBQ0UgaW4uCi0KLQkqIFttZW1vcnkvc3RyaW5nLmNdCi0JRGVsZXRlZCB1bnVzZWQgdmFyaWFibGUgaW4gbHN0cmNtcGkzMkEuCi0KLQkqIFtpbmNsdWRlL3dpbmRvd3MuaF1bbWVtb3J5L3N0cmluZy5jXQotCUFkZGVkIGZ1bmN0aW9ucyBXaWRlQ2hhclRvTG9jYWwzMiBMb2NhbFRvV2lkZUNoYXIzMiBmb3IKLQlPTEUtc3RyaW5ncwotCi0JKiBbaW5jbHVkZS9zaGxvYmouaF1baW5jbHVkZS93aW5lcnJvci5oXVttaXNjL3NoZWxsLmNdCi0JICBbb2xlL2ZvbGRlcnMuY10KLQlBZGRlZCBkZWZpbml0aW9uIG9mIGludGVybmFsIGNsYXNzIHBpZGxtZ3IuCi0JQ2hhbmdlZCBkZWZpbml0aW9ucyBvZiBFbnVtSURMaXN0LCBJU2hlbGxGb2xkZXIuCi0JQWRkZWQgc29tZSBPTEUgZXJyb3IgY29uc3RhbnRzLgotCUltcGxlbWVudGVkIEVudW1JRExpc3QsIElTaGVsbEZvbGRlciwgSUNsYXNzRmFjdG9yeSwKLQlQaWRsTWdyLCBTSEVMTDMyX0RsbEdldENsYXNzT2JqZWN0LCBTSEdldERlc2t0b3BGb2xkZXIsCi0JU0hHZXRTcGVjaWFsRm9sZGVyTG9jYXRpb24gKGhhbGYpLCBTSEdldFBhdGhGcm9tSURMaXN0Ci0JKCEhVGhpcyBzdHVmZiBpcyBub3QgZmluaXNoZWQgeWV0ISEpCi0KLQkqIFtpbmNsdWRlL3dpbmRvd3MuaF1bbWlzYy9uZXR3b3JrXVtyZWxleTMyL21wci5zcGVjXQotCUFkZGVkIHN0dWJzIGZvciBXTmV0Q29ubmVjdGlvbkRpYWxvZzMyW0F8V3xBUEldLgotCUFkZGVkIHN0cnVjdCBMUENPTk5FQ1RETEdTVFJVQ1QzMltBfFddIGFuZCBzb21lIGNvbnN0YW50cy4KLQlBZGRlZCBzb21lIFNldExhc3RFcnJvcihXTl9OT19ORVRXT1JLKSB0byB0aGUgc3R1YnMuCi0JRml4ZWQgYnVmZmVyaGFuZGxpbmcgaW4gV05ldENhbmNlbENvbm5lY3Rpb24KLQlBZGRlZCBzdHViIGZvciBNdWx0aW5ldEdldEVycm9yVGV4dFtBfFddCi0KLQkqIFtvbGUvb2xlMm5scy5jXQotCVJld3JvdGUgR2V0VGltZUZvcm1hdDMyQS4KLQotRnJpIEp1bCAgMyAxMDoyNzozMCAxOTk4ICBNaWNoYWVsIFBvb2xlIDxwb29sZStAYW5kcmV3LmNtdS5lZHU+Ci0KLQkqIFtncmFwaGljcy9kZHJhdy5jXSBbdHN4MTEvWDExX2NhbGxzXQotCUltcGxlbWVudCBJRGlyZWN0RHJhd1BhbGV0dGVfR2V0RW50cmllcy4KLQlVc2UgQ29weUNvbG9ybWFwQW5kRnJlZSB0byBhdm9pZCBlcmFzaW5nIHByZXZpb3VzbHktc2V0Ci0JcGFsZXR0ZSBlbnRyaWVzLgotCi0JKiBbZ3JhcGhpY3MvZGRyYXcuY10gW2luY2x1ZGUvZGRyYXcuaF0KLQkgIFt0b29scy9tYWtlX1gxMXdyYXBwZXJzXSBbdHN4MTEvWDExX2NhbGxzXQotCVByb3ZpZGUgYSBwcmVsaW1pbmFyeSwgbm90LXlldC13b3JraW5nIGZyYW1ld29yayBmb3IgZG9pbmcKLQlEaXJlY3REcmF3IHZpYSBYbGliIG9yIFhTaG0gYXMgd2VsbCBhcyBER0EuCi0KLVR1ZSBKdW4gMzAgMDA6MTY6MDkgMTk5OCAgTWFyY2VsIEJhdXIgPG1iYXVyQGcyNi5ldGh6LmNoPgotCi0JKiBbb2xlL25scy8qLm5sc10KLQlBZGRlZCByZW1haW5pbmcgMjIgbG9jYWxlcyAoaW5jbHVkaW5nIGFyYWJpYyBsb2NhbGVzKS4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotU3VuIEp1biAyOCAxODozNzowMiAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KLQotCSogW2lmMTYzMi9zaWduYWwuY10gW21pc2NlbXUvaW5zdHIuY10gW21lbW9yeS92aXJ0dWFsLmNdCi0JTW92ZWQgcGFnZS1mYXVsdCBoYW5kbGluZyB0byBJTlNUUl9FbXVsYXRlSW5zdHJ1Y3Rpb24uCi0KLQkqIFtzY2hlZHVsZXIvdGhyZWFkLmNdCi0JQWRkZWQgbG9ja2luZyBhbmQgY2hlY2sgZm9yIG93biB0aHJlYWQgaW4gU3VzcGVuZC9SZXN1bWVUaHJlYWQuCi0KLVNhdCBKdW4gMjcgMjE6MjU6MjEgMTk5OCAgVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+Ci0KLQkqIFtvYmplY3RzL2RpYi5jXSBbb2JqZWN0cy9iaXRtYXAuY10gW29iamVjdHMvb2VtYml0bWFwLmNdIAotCSAgW2dyYXBoaWNzL3gxMWRydi9iaXRibHQuY10gW2luY2x1ZGUvYml0bWFwLmhdCi0JSW1wcm92ZWQgRElCIHNlY3Rpb24gaGFuZGxpbmcgdXNpbmcgcGFnZSBmYXVsdCBoYW5kbGVycy4KLQkoTm90ZTogVGhpcyBwYXRjaCBpbmNsdWRlcyBjb2RlIGNvbnRyaWJ1dGVkIGJ5IE1hdHRoZXcgSi4gRnJhbmNpcy4pCi0KLQkqIFttZW1vcnkvdmlydHVhbC5jXSBbaWYxNjMyL3NpZ25hbC5jXSBbaW5jbHVkZS9nbG9iYWwuaF0KLQlQYWdlIEZhdWx0IGhhbmRsZXIgc3VwcG9ydCBhZGRlZC4KLQotCSogW2lmMTYzMi9zaWduYWwuY10gW2xvYWRlci9zaWduYWwuY10gW3Rvb2xzL2J1aWxkLmNdIFttaXNjL3N5c3RlbS5jXQotCSAgW21pc2Mvd2luc29ja19kbnMuY10gW2luY2x1ZGUvc2lnX2NvbnRleHQuaF0gW2luY2x1ZGUvdGhyZWFkLmhdCi0JMTYtYml0ICVmcyBoYW5kbGluZyBpbXByb3ZlZDogQWx3YXlzIHByZXNlcnZlIDE2LWJpdCAlZnMgdmFsdWUsCi0JYWx3YXlzIHJlc3RvcmUgMzItYml0ICVmcyB2YWx1ZSBmb3Igc2lnbmFsIGhhbmRsZXJzLgotCi0JKiBbaWYxNjMyL3RodW5rLmNdIFtsb2FkZXIvbW9kdWxlLmNdIFttaXNjL2NhbGxiYWNrLmNdIFt3aW5kb3dzL3VzZXIuY10KLQkgIFtsb2FkZXIvbmUvcmVzb3VyY2UuY10gW2luY2x1ZGUvY2FsbGJhY2suaF0gW2luY2x1ZGUvbW9kdWxlLmhdCi0JICBbaWYxNjMyL2tlcm5lbC5zcGVjXSBbaWYxNjMyL3dwcm9jcy5zcGVjXQotCVJlc291cmNlIEhhbmRsZXIgZnVuY3Rpb24gcG9pbnRlciBzdG9yZWQgYXMgMTYtYml0IFNFR1BUUi4KLQotCSogW2xvYWRlci90YXNrLmNdIFt3aW5kb3dzL3dpbi5jXSBbd2luZG93cy93aW5wb3MuY10gW2lmMTYzMi91c2VyLnNwZWNdCi0JICBbaWYxNjMyL2tlcm5lbC5zcGVjXSBbbG9hZGVyL25lL21vZHVsZS5jXQotCVNvbWUgbWlub3IgaW5jb21wYXRpYmlsaXRpZXMgZml4ZWQgKFdpbjMycyByZWxpZXMgb24gdGhvc2UpOgotCUdldEV4ZVB0ciwgSXNXaW5kb3cxNiBzaG91bGQgc2V0IEVTIG9uIHJldHVybjsgV0lOUE9TX1NlbmROQ0NhbGNTaXplCi0Jc2hvdWxkIGNvcGUgd2l0aCBoYXZpbmcgdGhlIFdJTkRPV1BPUyBzdHJ1Y3R1cmUgdHJhc2hlZDsKLQl0aGUgT0ZTVFJVQ1QgaW4gdGhlIE5FIG1vZHVsZSBpbWFnZSBzaG91bGQgYmUgcGxhY2VkICpsYXN0Ki4KLQotCSogW2luY2x1ZGUvd2luZG93cy5oXQotCU1pc3NpbmcgcHJvdG90eXBlIGZvciBGbHVzaFZpZXdPZkZpbGUuCi0KLQkqIFtsb2FkZXIvdGFzay5jXQotCUJ1Z2ZpeDogQ29tbWFuZCBsaW5lIHNob3VsZCAqbm90KiBzdGFydCB3aXRoIGEgYmxhbmsuCi0JCi0JKiBbbG9hZGVyL25lL3NlZ21lbnQuY10KLQlCdWdmaXg6IEZpeHVwcyB0byBvZmZzZXQgMCB3ZXJlIG5ldmVyIGFwcGxpZWQuCi0KLQkqIFttaXNjL2xzdHIuY10KLQlVc2UgZGVidWdzdHJfYSBpbiBPdXRwdXREZWJ1Z1N0cmluZzE2LgotCi0JKiBbbXNkb3MvZHBtaS5jXQotCVN0dWIgZm9yIGludCAzMSBCTD0yZiBBWD03YTIwIChOZXRXYXJlOiBHZXQgVkxNIENhbGwgQWRkcmVzcykgYWRkZWQuCi0KLQkqIFttc2Rvcy9pbnQyMS5jXQotCVN0dWIgZm9yIGludCAyMSBBWD00NDBkIENMPTZmIChnZXQgZHJpdmUgbWFwIGluZm9ybWF0aW9uKSBhZGRlZC4KLQotRnJpIEp1biAyNiAxODowODozMCAxOTk4ICBSZWluIEtsYXplcyA8cmtsYXplc0BjYXNlbWEubmV0PgotCi0JKiBbd2luZG93cy93aW5wb3MuY10KLQlGaXggc21hbGwgYnVnbGV0IHRoYXQgbWl4ZWQgdXAgbWF4aW1pemVkIGFuZCBtaW5pbWl6ZWQgd2luZG93cy4KLQotCSogW2luY2x1ZGUveDExZHJ2LmhdIFtvYmplY3RzL2RjLmNdIFtncmFwaGljcy94MTFkcnYvcGVuLmNdCi0JICBbZ3JhcGhpY3MveDExZHJ2L2dyYXBoaWNzLmNdCi0JRml4IHNvbWUgYnVncyB3aXRoIGxpbmVzIGpvaW5pbmcgc3R5bGVzLiBEcmF3cyByZWN0YW5nbGVzCi0Jd2l0aCB0aGljayBwZW5zIG5vdyBjb3JyZWN0bHkuCi0KLUZyaSBKdW4gMjYgMTY6MjI6MjMgMTk5OCAgSmFtZXMgSnVyYW4gPGpyajEyMEBwc3UuZWR1PgotCi0JKiBbbWlzYy9zaGVsbC5jXQotCUZpeGVkIGJ1ZyBJIGludHJvZHVjZWQgbGFzdCByZWxlYXNlIGluIEludGVybmFsRXh0cmFjdEljb24uCi0KLQkqIFt3aW4zMi9maWxlLmNdCi0JQWRkZWQgZG9jdW1lbnRhdGlvbiBmb3IgQ3JlYXRlRmlsZTMyQS4KLQotCSogW2RvY3VtZW50YXRpb24vd2luZS5tYW5dCi0JVXBkYXRlZCBtYW5wYWdlLgkKLQotCSogW0NoYW5nZUxvZ10KLQlBZGRlZCBteSBlbnRyeSBmcm9tIGxhc3QgcmVsZWFzZS4KLQotRnJpIEp1biAyNiAxMzozMzozMCAxOTk4ICBIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KLQotCSogW2dyYXBoaWNzL3BzZHJ2LypdIFtpZjE2MzIvd2luZXBzLnNwZWNdIFtpbmNsdWRlL3BzZHJ2LmhdCi0JICBbaW5jbHVkZS9wcmludC5oXSBbb2JqZWN0cy9nZGlvYmouY10KLQlGaXJzdCBzdGFnZXMgb2YgYW4gaW50ZXJuYWwgUG9zdHNjcmlwdCBkcml2ZXIuIFNlZQotCWdyYXBoaWNzL3BzZHJ2L1JFQURNRSAuIFNob3VsZCBwcmludCB0ZXh0IChiYWRseSkgZnJvbSB3aW4zLjEgbm90ZXBhZCwKLQl3cml0ZSBhbmQgd2lud29yZDYuCi0KLQkqIFtkb2N1bWVudGF0aW9uL3ByaW50aW5nXQotCVNvbWUgbm90ZXMgb24gcHJpbnRpbmcuCi0KLQkqIFtjb250cm9scy9lZGl0LmNdCi0JU3RyaXAgb2ZmIFdTX0JPUkRFUiBpbiBXTV9OQ1JFQVRFLCBlZGl0IGRyYXdzIGl0cyBvd24gcmVjdGFuZ2xlLgotCUVDX1VTRUZPTlRJTkZPIHNlZW1zIHRvIGJlIHVzZWQgYXMgYSBsZWZ0L3JpZ2h0IHZhbHVlIGZvciBFTV9TRVRNQVJHSU5TCi0JYW5kIG5vdCBhcyBhbiBhY3Rpb24gYXMgdGhlIGRvY3Mgc2F5LiBUaGlzIGFjdHVhbGx5IG1ha2VzIG1vcmUgc2Vuc2UuCi0JU2Nyb2xsIHRoZSBjYXJldCBiYWNrIHRvIHplcm8gYWZ0ZXIgYSBXTV9TRVRURVhULgotCi1GcmkgSnVuIDI2IDEwOjU2OjI1IDE5OTggIE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgotCi0JKiBbaWYxNjMyL3Nub29wLmNdCi0JQWRkZWQgd2luMTYgaW50ZXItZGxsIHNub29waW5nLgotCi0JKiBbd2luMzIvb3JkaW5hbHMuY10KLQlLRVJORUxfNDg1IGlzIEdldFByb2Nlc3NEd29yZC4KLQotCSogW2luY2x1ZGUveG1hbGxvYy5oXVtpbmNsdWRlL2JpdG1hcC5oXVttaXNjL3htYWxsb2MuY10KLQlBZGRlZCB4Y2FsbG9jIHNvIHdlIDAgaW5pdGlhbGl6ZSBYSW1hZ2VzLiAKLQlGaXhlcy9IaWRlcyB0aGUgJ2p1bmsgYXJvdW5kIE1PUFlGaXNoJy4KLQotCSogW21pc2MvbnRkbGwuY10KLQlTb21lIHN0dWJzIGFkZGVkLgotCi1UaHUgSnVuIDI1IDE1OjIyOjQzIDE5OTggIEFkcmlhbiBIYXJ2ZXkgPGFkcmlhbkBzZWxlY3QuY29tLmF1PgotCi0JKiBbc2NoZWR1bGVyL3RocmVhZC5jXSAKLQlJbXBsZW1lbnRlZCBTdXNwZW5kVGhyZWFkIGFuZCBSZXN1bWVUaHJlYWQuCi0KLVRodSBKdW4gMjUgMDA6NTU6MDMgMTk5OCAgUGV0ZXIgSHVubmlzZXR0IDxodW5uaXNlQG5vcnRlbC5jYT4KLQotCSogW2luY2x1ZGUvZGVidWcuaCxkcGxheS5oLGRzb3VuZC5oXVttdWx0aW1lZGlhL2Rzb3VuZC5jLGRwbGF5LmNdCi0JICBbcmVsYXkzMi9kcGxheXguc3BlYyxkcGxheS5zcGVjXVttdWx0aW1lZGlhL01ha2VmaWxlLmluXQotCSAgW2RvY3VtZW50YXRpb24vc3RhdHVzL2RpcmVjdHBsYXldCi0JQWRkZWQgcHJlbGltaW5hcnkgc3VwcG9ydCBmb3IgRGlyZWN0UGxheSAmIERpcmVjdFBsYXlMb2JieS4gTW92ZWQgdGhlCi0JcHJlbGltaW5hcnkgc3R1YnMgcHV0IGluIHRoZSBkc291bmQgZmlsZXMgaW50byB0d28gbmV3IGZpbGVzCi0JZHBsYXkuaCBhbmQgZHBsYXkuYy4KLQlBZGRlZCBuZXcgZGVidWcgY2hhbm5lbCAoZHBsYXkpIGZvciB0aGlzLgotCUNyZWF0ZWQgbmV3IGRvY3VtZW50IHRvIGtlZXAgdHJhY2sgb2YgaW1wbGVtZW50YXRpb24uCi0KLQkqIFtpbmNsdWRlL3dpbmlvY3RsLmhdW3dpbjMyL2RldmljZS5jXQotCUFkZGVkIHNvbWUgZnJhbWV3b3JrIGluIERldmljZUlvQ29udHJvbCB0bywgaW4gdGhlIGZ1dHVyZSwgc3VwcG9ydAotCXRoZSAiYnVpbHRpbiIgd2luZG93cyBkd0lvQ29udHJvbENvZGVzLiBBZGRlZCBuZXcgaGVhZGVyIGZpbGUKLQl3aW5pb2N0bC5oIC4gCi0KLQkqIFttdWx0aW1lZGlhL21tc3lzdGVtLmNdCi0JQWRkZWQgc2xpZ2h0bHkgaW1wcm92ZWQgZGVidWdnaW5nIGluZm9ybWF0aW9uIGZvciBQbGF5U291bmQuCi0KLVdlZCBKdW4gMjQgMTI6MDA6MDAgMTk5OCAgSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+IAotCi0JKiBbZmlsZXMvcHJvZmlsZS5jXVtncmFwaGljcy94MTFkcnYveGZvbnQuY11bbG9hZGVyL21vZHVsZS5jXQotCUNoYW5nZWQgbHN0cmNtcGkzMkEgdG8gc3RyY2FzZWNtcCwgbHN0cm5jbXBpMzJBIHRvIHN0cm5jYXNlY21wLAotCWxzdHJjcHkzMkEgdG8gc3RyY3B5LCBsc3RybGVuMzJBIHRvIHN0cmxlbiwgbHN0cmNtcDMyQSB0byBzdHJjbXAKLQliZWNhdXNlIGl0J3Mgbm90IG5lY2Vzc2FyeSB0byBzdXBwb3J0IGxvY2FsZSBvbiBzdWNoIHBsYWNlcy4KLQlJdCBjYXVzZXMgYSBodWdlIG92ZXJoZWFkIGFuZCBldmVuIGZhaWxzIHNvbWV0aW1lcyAKLQotCSogW2luY2x1ZGUvb2xlYXV0by5oXVtpbmNsdWRlL3dpbmVycm9yLmhdCi0JQWRkZWQgc29tZSBvbGUtcmVsYXRlZCBjb25zdGFudHMuCi0KLQkqIFttaXNjL3NoZWxsLmNdCi0JU0hFTEwzMl9EbGxHZXRDbGFzc09iamVjdCwgU0hHZXRTcGVjaWFsRm9sZGVyTG9jYXRpb24sCi0JU0hHZXRQYXRoRnJvbUlETGlzdCBpbXByb3ZlZCB0aGUgc3R1YnMKLQotCSogW29sZS9mb2xkZXJzLmNdCi0JSVNoZWxsRm9sZGVyKiBmdW5jdGlvbnMgcmV3cm90ZSB0aGUgc3R1YnMgc28gZG9uJ3QgY3Jhc2ggYW5kIGdpdmUKLQlzb21ldGhpbmcgc2Vuc2libGUgYmFjaywgc3RhcnRlZCBpbXBsZW1lbnRhdGlvbiBvZi4KLQotCSogW29sZS90eXBlbGliLmNdW3JlbGF5MzIvb2xlYXV0MzIuc3BlY10KLQlMb2FkVHlwZUxpYjMyLCBSZWdpc3RlclR5cGVMaWIgc3R1Yi4KLQotCSogW29sZS9vbGUybmxzLmNdCi0JRml4ZWQgYSBidWZmZXIgb3ZlcnJ1biBpbiBDb21wYXJlU3RyaW5nMzJBLgotCVRlc3QgZm9yIGEgYmFkIHBvaW50ZXIgaW4gTENNYXBTdHJpbmczMkEgKGhhcHBlbnMKLQlpbiB3aW5obHAzMiB3aGlsZSBidWlsZGluZyBhIGluZGV4IGZvciBzZWFyY2hpbmcpLiAKLQotCSogW3JlbGF5MzIvb2xlYXV0MzIuc3BlY10gW29sZS90eXBlbGliLmNdCi0JQWRkZWQgc3R1YiBmb3IgTG9hZFR5cGVMaWIgKG9sZTMyKSB0byBtYWtlIGV4Y2VsOTUgaGFwcHkuCi0KLVR1ZSBKdW4gMjMgMjI6NDc6MDkgMTk5OCAgQWxleCBQcmllbSA8YWxleHBAc2NpLmt1bi5ubD4KLQotCSogW2ZpbGVzL3Byb2ZpbGUuY10gW3JlbGF5MzIva2VybmVsMzIuc3BlY10KLQlBZGRlZCBXcml0ZVByaXZhdGVQcm9maWxlU3RydWN0QSwgR2V0UHJpdmF0ZVByb2ZpbGVTdHJ1Y3RBLAotCUdldFByaXZhdGVQcm9maWxlU2VjdGlvbk5hbWVzMTYuCi0KLVR1ZSBKdW4gMjMgMDE6MzQ6NDMgMTk5OCAgUGFzY2FsIEN1b3EgPHBjdW9xQGVucy1seW9uLmZyPgotCi0JKiBbb2xlL29sZTJubHMuY10KLQlHZXRTdHJpbmdUeXBlRXgzMkE6IEltcGxlbWVudGVkIENUX0NUWVBFMiBhbmQgQ1RfQ1RZUEUzIGNhc2VzLgotCUxDTWFwU3RyaW5nMzJBOiBNYXAgZmluYWwgJ1wwJyBmb3IgJ1wwJy10ZXJtaW5hdGVkIHN0cmluZ3MuCi0KLQkqIFttaXNjL3NoZWxsb3JkLmNdIFtmaWxlcy9wcm9maWxlLmNdIFtncmFwaGljcy9kcml2ZXIuY10gCi0JICBbbG9hZGVyL21vZHVsZS5jXSBbbXNkb3MvaW50MjEuY10gW3dpbmRvd3MvZHJpdmVyLmNdIFtmaWxlcy9kcml2ZS5jXQotCUNoYW5nZWQgbHN0cmNtcGkzMkEgLT4gc3RyY2FzZWNtcC4gIFNob3VsZCBiZSBPSyBpbiB0aGVzZSBwbGFjZXMuCi0KLVNhdCBKdW4gMjAgMjM6NDA6MDAgMTk5OCAgQmVydGhvIFN0dWx0aWVucyA8YmVydGhvQGFraHBoZC5hdS5kaz4KLQotCSogW3Rvb2xzL3dyYy9dCi0JV3JjIHZlcnNpb24gMS4wLjIgKDIwLUp1bi0xOTk4KS4gUGxlYXNlIHJldmVydCB0byAKLQl0aGUgZmlsZSB0b29scy93cmMvQ0hBTkdFUyBmb3IgZGV0YWlscy4KLQotU2F0IEp1biAyMCAxNDo1ODowMCAxOTk4ICBNYXJjZWwgQmF1ciAgPG1iYXVyQGcyNi5ldGh6LmNoPgotCi0JKiBbb2xlL29sZTJubHMuY10gW29sZS9ubHMvKl0KLQlBZGRlZCB0aGUgZmlyc3QgNTcgbmxzIGZpbGVzLCBtb3N0IGFyZSBub3QgeWV0IGNvbXBsZXRlLgotCi1XZWQgSnVuIDE3IDExOjE2OjU0IDE5OTggIERhdmlkIEx1eWVyIDxsdXllckB1Y3MudXdhLmVkdS5hdT4KLQotCSogW3JlbGF5MzIvcmVsYXkzODYuY10gW2lmMTYzMi9yZWxheS5jXQotCU1vdmUgZGVidWdfcmVsYXlfKGluY2x1ZGV8ZXhjbHVkZSlfbGlzdCBoYW5kbGluZyBpbnRvCi0Jc2VwZXJhdGUgZnVuY3Rpb24gUkVMQVlfU2hvd0RlYnVnbXNnc1JlbGF5KCkuICBJbmNsdWRlCi0JY2hlY2tpbmcgb2YgdGhpcyBmb3IgMTYgYml0IGNhbGxzIChvcmlnaW5hbGx5IG9ubHkKLQkzMi1iaXQgY2FsbHMpLgotCi0JKiBbcmVsYXkzMi9zbm9vcC5jXSBbbWlzYy9tYWluLmNdCi0JQWRkIGRlYnVnX3Nub29wXyhpbmNsdWRlfGV4Y2x1ZGUpX2xpc3QgYXMgcGVyIHRoZSByZWxheSBzdHVmZi4KLQlGaXggdHlwbyBhbmQgYWRkIGluZm9ybWF0aW9uIG9uIC1kZWJ1Z21zZyArLy1yZWxheT0uLi4gaW4KLQloZWxwIG9uIC1kZWJ1Z21zZy4gIFJlZmVyIHRvIGF2YWlsYWJpbGl0eSBvZiBzbm9vcCB0b28uCi0KLVR1ZSBKdW4gMTAgMjI6MDA6MTggMTk5OCAgRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KLQotCSogW2NvbnRyb2xzL2hlYWRlci5jXVtpbmNsdWRlL2hlYWRlci5oXVtpbmNsdWRlL2NvbW1jdHJsLmhdCi0JQWRkZWQgb3duZXIgZHJhdyBzdXBwb3J0LgotCi0JKiBbd2luZG93cy9ub25jbGllbnQuY11bd2luZG93cy9zeXNtZXRpY3MuY10KLQlGaXhlZCBtZW51IGJhciBoZWlnaHQgZm9yIFdpbjk1IGxvb2suCi0JU3BsaXQgTkNfQWRqdXN0UmVjdDk1KCkgaW50byBOQ19BZGp1c3RSZWN0T3V0ZXI5NSgpIGFuZAotCU5DX0FkanVzdFJlY3RJbm5lcjk1IHRvIGZpeCBhIG1lbnUgYmFyIGJ1Zy4KLQlJbXByb3ZlZCBXaW45NSBsb29rLgotCi0JKiBbY29udHJvbHMvcHJvZ3Jlc3MuY10KLQlJbXByb3ZlZCBkcmF3aW5nIGNvZGUuIEJvcmRlcnMgd2lsbCBiZSBkcmF3biBieSBub24tY2xpZW50IGNvZGUuCi0KLQkqIFtjb250cm9scy91cGRvd24uY10KLQlDaGFuZ2VkIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBmaXhlZCBzb21lIGJ1Z3MuCi0KLQkqIFtjb250cm9scy90b29sYmFyLmNdCi0JRml4ZWQgVEJfQlVUVE9OU1RSVUNUU0laRSBidWcgaW4gTUZDIHByb2dyYW1zLgotCVNldmVyYWwgaW1wcm92ZW1lbnRzLgotCi0JKiBbbWlzYy9zaGVsbC5jXQotCUFkZGVkIHN0dWIgZm9yIEJyb3dzZUZvckZvbGRlcnNBKCkuCi0KLQkqIFttaXNjL3NoZWxsb3JkLmNdCi0JQWRkZWQgc3R1YiBmb3IgU0hFTEwzMl8xNDcoKS4KLQotCSogW2NvbnRyb2xzL2NvbWN0bDMydW5kb2MuY10KLQlNaW5vciBjaGFuZ2VzLgotCi0JKiBbZG9jdW1lbnRhdGlvbi9jb21tb25fY29udHJvbHNdCi0JTmV3IEZpbGU6IERvY3VtZW50YXRpb24gYWJvdXQgZGV2ZWxvcG1lbnQgc3RhdHVzLCB1bmRvY3VtZW50ZWQKLQlmZWF0dXJlcyBhbmQgZnVuY3Rpb25zIG9mIHRoZSBjb21tb24gY29udHJvbHMuCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVN1biBKdW4gMTUgMTA6MzA6MzUgMTk5OCAgQW5kcmVhcyBNb2hyIDwxMDAuMzA5MzZAZ2VybWFueS5uZXQ+Ci0KLQkqIFtmaWxlcy9kb3NfZnMuY10gW2ZpbGVzL2ZpbGUuY10gW2lmMTYzMi93cHJvY3Muc3BlY10KLQkgIFttaXNjL2FzcGkuY10KLQlBZGRlZCBzdXBwb3J0IGZvciBzY2FubmVycyB0aGF0IG5lZWQgQWRhcHRlYydzIEFTUEkyRE9TLgotCi0JKiBbZ3JhcGhpY3MvZW52LmNdIFttaXNjL3ByaW50ZXJkcnYuY10gW2dyYXBoaWNzL3dpbjE2ZHJ2L2luaXQuY10KLQkgIFtpZjE2MzIvZ2RpLnNwZWNdIFtpbmNsdWRlL2dkaS5oXQotCUVuaGFuY2VkIHByaW50ZXIgc3VwcG9ydCAoZXNwZWNpYWxseSBXaW45NSk6Ci0JRHJ2W0dTXWV0UHJpbnRlckRhdGEsIFtHU11ldEVudmlyb25tZW50OyBhZGRlZCBBYm9ydFByb2MgaGFuZGxpbmcuCi0KLQkqIFttaXNjL3RhcGkzMi5jXSBbcmVsYXkzMi90YXBpMzIuc3BlY10KLQlBZGRlZCBzb21lIHN0dWJzLgotCi0JKiBbY29uZmlndXJlLmluXSBbZ3JhcGhpY3MvZm9udGVuZ2luZS5jXSBbaW5jbHVkZS93aW5kb3dzLmhdCi0JICBbbWlzYy9jb21tLmNdIFttaXNjL3czMnNrcm5sLmNdIFttaXNjL3dpbjMyczE2LmNdCi0JTWFkZSBXaW5lIGNvbXBpbGUgb24gSFAtVVggKGp1c3QgZm9yIGZ1biA7KQotCi0JKiBbY29udHJvbHMvbWVudS5jXSBbaW5jbHVkZS93aW5kb3dzLmhdCi0JQ29tcGxldGUgcmV3cml0ZSBvZiBFbmFibGVNZW51SXRlbTMyLgotCUZyZWUgQWdlbnQgMzIgc3RpbGwgZG9lc24ndCB3b3JrIDooCi0KLQkqIFttaXNjL3ZlcnNpb24uY10gW2lmMTYzMi9rZXJuZWwuc3BlY10gW2luY2x1ZGUvd2luYmFzZS5oXQotCUltcGxlbWVudGVkIEdldFZlcnNpb25FeDE2LgotCi0JKiBbbWlzYy9uZXR3b3JrLmNdIFtpZjE2MzIvdXNlci5zcGVjXQotCUZpeGVkIGFyZ3VtZW50cyBvZiBXTmV0R2V0UHJvcGVydHlUZXh0LgotCi0JKiBbbWlzYy92ZXJzaW9uLmNdIFtyZWxheTMyL2NvbWN0bDMyLnNwZWNdIFtyZWxheTMyL29sZWF1dDMyLnNwZWNdCi0JSW1wbGVtZW50ZWQgQ09NQ1RMMzJfRGxsR2V0VmVyc2lvbiwgT2FCdWlsZFZlcnNpb24uCi0KLQkqIFt3aW4zMi9maWxlLmNdCi0JRml4ZWQgVU5DIGhhbmRsaW5nIG9mIENyZWF0ZUZpbGUzMi4KLQotU2F0IEp1biAxMyAyMjozNToxMiAxOTk4ICBEb3VnbGFzIFJpZGd3YXkgIDxyaWRnd2F5QHdpbmVocS5jb20+Ci0KLQkqIFtNYWtlZmlsZS5pbl0gW01ha2UucnVsZXMuaW5dCi0JQWRkZWQgcGF0dGVybiBmb3IgQ1ZTIG1lcmdlIGZpbGVzIHRvICdtYWtlIGNsZWFuJwotCi0JKiBbb2xlL29sZWNsaS5jXSBbd2luZG93cy9zY3JvbGwuY10gW3dpbmRvd3MvZ3JhaGljcy5jXQotCUFkZCBzb21lIERDIGhhbmRsZSB1bmxvY2tpbmcuIChXaGVuIGhkYydzIGFyZSBhbHdheXMgdW5sb2NrZWQsCi0JdGhleSBjYW4gYmUgbWFkZSBtb3ZlYWJsZS4pCi0KLQkqIFtkb2N1bWVudGF0aW9uL3dpbmUudGV4aW5mb10gCi0JU3RhcnRlZCBhIFdpbmUgRGVzaWduIGNoYXB0ZXIgd2l0aCBkaXNjdXNzaW9uIG9mIAotCWdyYXBoaWNzIGRyaXZlciBtb2RlbC4KLQotU2F0IEp1biAxMyAxMToxOToyNSAxOTk4ICBEYXZpZCBMdXllciA8bHV5ZXJAdWNzLnV3YS5lZHUuYXU+Ci0KLQkqIFttaXNjL21haW4uY10gW3JlbGF5MzIvcmVsYXkzODYuY10KLQlBZGRlZCBuZXcgb3B0aW9uIC1kZWJ1Z21zZyArcmVsYXk9Li4uLiBvciAtZGVidWdtc2cgLXJlbGF5PS4uLgotCi1GcmkgSnVuIDEyIDIyOjU2OjA5IDE5OTggIE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgotCi0JKiBbcmVsYXkzMi9zbm9vcC5jXVtyZWxheTMyL2J1aWx0aW4uY11bbG9hZGVyL3BlX2ltYWdlLmNdCi0JQWRkZWQgaW50ZXIgd2luMzIgZGxsIHNub29waW5nLiBVc2UgLWRlYnVnbXNnICtzbm9vcC4KLQlOdW1iZXIgb2YgYXJndW1lbnRzIGFuZCBzdHJpbmcgcmVmZXJlbmNlcyBhcmUgYXV0b2RldGVjdGVkLgotCVNvbWUgc21hbGwgYnVnZml4ZXMgaW4gdGhlIFBFIGxvYWRlci4KLQotCSogW21pc2Mvc3lzdGVtLmNdCi0JRGlzYWJsZWQgU3lzdGVtVGltZXJzLiBUaGV5IGRvIG5vdCB3b3JrIHdpdGggdGhlIGN1cnJlbnQKLQklZnMgaGFuZGxpbmcgaW4gdGhlIDMyLT4xNiByZWxheWNvZGUuIChoZWxwcyBsYWJ2aWV3KQotCi0JKiBbbXNkb3MvZHBtaS5jXVttc2Rvcy9pbnQyZi5jXVtmaWxlcy9kcml2ZS5jXQotCUFkZGVkIGEgbW9ub3RvbiBsaW5lYXIgaW5jcmVhc2luZyBtZW1vcnkgYWxsb2NhdG9yIGZvciBEUE1JIChyZXF1aXJlZAotCWZvciBMYWJWaWV3LCBIQUZBUywgLi4uKQotCW1zY2RleCBoYW5kbGluZyBpbiBlbXVsYXRlZCByZWFsbW9kZSBpbnRlcnJ1cHRzIChmb3IgbWNpY2RhLmRydikKLQlhbGxvY2F0ZSBsb2dpY2FsIGRyaXZlcyBvbmx5IG9uY2UuIChoZWxwcyBNeXN0KQotCi0JKiBbZmlsZXMvcHJvZmlsZS5jXQotCUhhbmRsZSBeWiBhcyBzcGFjZS4gRm91bmQgb24gQ0RST01TIChoZWxwcyBNeXN0IEluc3RhbGxlcikuCi0KLQkqIFttdWx0aW1lZGlhL21taW8uY10KLQltbWlvKiBwYXJ0aWFsbHkgdXBkYXRlZCB0byB3aW4zMi4gTm8gZnVubnkgYWRkaXRpb25zLgotCi0JKiBbd2luZG93cy9kcml2ZXIuY10KLQlBZGRlZCB3aW4zMiBkcml2ZXIgaGFuZGxpbmcgKHdpbGwgYmUgdXNlZCBmb3Igd2luMzIgbXVsdGltZWRpYS8KLQltc3ZpZGVvIGRyaXZlcnMpLgotCi0JKiBbd2luMzIvZGV2aWNlLmNdCi0JQWRkZWQgZGV2aWNlIGhhbmRsaW5nIChLMzJPQkpfREVWSUNFX0lPQ1RMKS4gSW1wbGVtZW50ZWQgCi0JVlREQVBJLjUgKHVzZWQgYnkgd2luOTUnIFdJTk1NLnRpbWVHZXRUaW1lKCkpCi0KLUZyaSBKdW4gMTIgMTg6MDE6MTggMTk5OCBSZWluIEtsYXplcyA8cmtsYXplc0BjYXNlbWEubmV0PgotCi0JKiBbb2xlL2NvbXBvYmouYyByZWxheTMyL29sZTMyLnNwZWNdCi0JQWRkIGEgc3R1YiBmb3IgQ29Mb2NrT2JqZWN0RXh0ZXJuYWwzMi4KLQotCSogW29iamVjdHMvY2xpcHBpbmcuY10KLQlGaXggaW4gSW50ZXJzZWN0Q2xpcFJlY3QoKSwgd2hlbiB0aGVyZSBpcyBubyBpbml0aWFsIGNsaXBwaW5nCi0JcmVnaW9uLgotCi0JKiBbZ3JhcGhpY3MveDExZHJ2L2dyYXBoaWNzLmNdCi0JQ29ycmVjdGVkIHNldmVyYWwgIm9uZS1vZmYiIGVycm9ycyBmb3IgdGhlIEVsbGlwc2UsIFJlY3RhbmdsZQotCWFuZCBSb3VuZFJlY3RhbmdsZSAoZXNwZWNpYWxseSBzbWFsbCBvbmVzKSBkcmF3IHJvdXRpbmVzLiAKLQlBcmMgYW5kIGZyaWVuZHMgc3RpbGwgaGF2ZSB0byBiZSBkb25lLgotCi1GcmkgSnVuIDEyIDA2OjIzOjE5IDE5OTggIE1hdHRoZXcgQmVja2VyIDxtYmVja2VyQGdsYXNzY2l0eS5uZXQ+Ci0KLQkqIFttaXNjL250ZGxsLmNdCi0JRml4ZWQgc29tZSBvZiB0aGUgcGFyYW1ldGVyIGNvdW50cy4KLQotCSogW21pc2MvcmVnaXN0cnkuY10KLQlHZW5lcmFsIGNsZWFudXAsIGRvY3VtZW50YXRpb24uCi0JU3RhbmRhcmQga2V5cyBhcmUgYWxsb3dlZCB0byBiZSAnY2xvc2VkJyBhbmQgc3VjY2VlZC4KLQotCSogW21pc2Mvc2hlbGwuY10KLQlDaGVjayBmb3IgY29ycmVjdCByZXR1cm4gdmFsdWVzIGZyb20gUmVnKiBmdW5jdGlvbnMuCi0KLQkqIFt3aW4zMi9uZXdmbnMuY10KLQlBZGRlZCBzdHVicyBmb3IgT3BlbkRlc2t0b3BBLCBTZXRUaHJlYWREZXNrdG9wLCBhbmQKLQlTZXRVc2VyT2JqZWN0SW5mb3JtYXRpb25BLgotCi1XZWQgSnVuIDEwICAyMDoyODowOCAxOTk4ICBKYW1lcyBKdXJhbiAgPGpyajEyMEBwc3UuZWR1PgotCi0JKiBbZGVidWdnZXIvYnJlYWsuY10KLQlGaXhlZCBidWcgaW50cm9kdWNlZCBpbiA5ODA1MDMgdGhhdCBicm9rZSB0aGUgLWRlYnVnIGNvbW1hbmQgCi0JbGluZSBvcHRpb24gZm9yIFBFIGV4ZWN1dGFibGUgZmlsZXMuCi0KLQkqIFtjb25maWd1cmUuaW5dIFtpbmNsdWRlL2FjY29uZmlnLmhdIFtpbmNsdWRlL2RlYnVndG9vbHMuaF0KLQkgIFtkb2N1bWVudGF0aW9uL2RlYnVnLW1zZ3NdCi0JQWRkZWQgJ2NvbmZpZ3VyZScgb3B0aW9ucyB0byBjb21waWxlIG91dCBkZWJ1Z2dpbmcgbWVzc2FnZXMuCi0JVXNlIC0tZGlzYWJsZS1kZWJ1ZyB0byBkaXNhYmxlIGFsbCBkZWJ1Z2dpbmcgbWVzc2FnZXMsIGFuZAotCS0tZGlzYWJsZS10cmFjZSB0byBqdXN0IGRpc2FibGUgVFJBQ0UgbWVzc2FnZXMuICBUaGlzIHJlc3VsdHMKLQlpbiBhIHN0cmlwcGVkIGV4ZWN1dGFibGUgdGhhdCBpcyAxNS0yMCUgc21hbGxlci4gIFRoaXMgb3B0aW9uCi0JaXMgdmVyeSBtdWNoIHVudGVzdGVkLS1kb24ndCBleHBlY3QgaXQgdG8gd29yay4KLQotCSogW2RvY3VtZW50YXRpb24vZGVidWctbXNnc10gW2RvY3VtZW50YXRpb24vZGVidWdnaW5nXQotCU1pbm9yIHVwZGF0ZXMuCi0KLQkqIFsqLyouY10KLQlGaXhlZCBzb21lIGNvbXBpbGUgd2FybmluZ3MuICBUaGlzIGFsc28gaW5jbHVkZXMgdGhlCi0JY29tcGlsZV93YXJuaW5nc190cml2aWFsIHBhdGNoIGZyb20gV2luZUhRLgotCi1UdWUgSnVuIDEwIDIyOjAwOjE4IDE5OTggIEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+Ci0KLQkqIFt3aW5kb3dzL3N5c21ldHJpY3MuY11baW5jbHVkZS9zeXNtZXRyaWNzLmhdCi0JRml4ZWQgc29tZSBXaW45NSB2YWx1ZXMuCi0KLQkqIFt3aW5kb3dzL25vbmNsaWVudC5jXVtpbmNsdWRlL3dpbmRvd3MuaF0KLQlGaXhlZCBzb21lIFdpbjk1IGRyYXdpbmcgYnVncy4KLQlBZGRlZCBleHRlbmRlZCB3aW5kb3cgc3R5bGUgZmxhZ3MgKFdTX0VYX3h4eCkuCi0KLQkqIFttaXNjL3ByaW50ZHJ2LmNdW3JlbGF5MzIvd2luc3Bvb2wuc3BlY10KLQlBZGRlZCBzdHVicyBmb3IgRGVsZXRlUHJpbnRlckRyaXZlcjMyQSwgRGVsZXRlTW9uaXRvcjMyQQotCWFuZCBEZWxldGVQb3J0MzJBLgotCi0JKiBbd2luZG93cy9tZGkuY11baW5jbHVkZS93aW5kb3dzLmhdW3JlbGF5MzIvdXNlcjMyLnNwZWNdCi0JQWRkZWQgc3R1YnMgZm9yIENhc2NhZGVXaW5kb3dzIGFuZCBUaWxlV2luZG93cy4KLQotCSogW2NvbnRyb2xzL3Rvb2xiYXIuY11baW5jbHVkZS90b29sYmFyLmhdCi0JRml4ZWQgYSBmZXcgYnVncyBhbmQgaW1wbGVtZW50ZWQgbmV3IGZlYXR1cmVzLgotCi0JKiBbbWlzYy9zaGVsbG9yZC5jXVtyZWxheTMyL3NoZWxsMzIuc3BlY10KLQlBZGRlZCBzdHVicyBmb3IgU0hFTEwzMl82MCwgU0hFTEwzMl82MSBhbmQgU0hFTEwzMl8xODQuCi0KLQkqIFtjb250cm9scy9jb21jdGwzMnVuZG9jLmNdW3JlbGF5MzIvY29tY3RsMzIuc3BlY10KLQlOZXcgZmlsZSBjb21jdGwzMnVuZG9jLmMuIENvbnRhaW5zIHVuZG9jdW1lbnRlZCBmdW5jdGlvbnMKLQlvZiBDT01DVEwzMi5ETEwuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgbmVlZGVkIHRvIHJ1biBFWFBMT1JFUi5FWEUKLQlJRVhQTE9SRS5FWEUgYW5kIFRBU0tNQU4uRVhFLgotCi0JKiBbY29udHJvbHMvc3RhdHVzLmNdCi0JQWRkZWQgdGV4dCBhbGlnbm1lbnQuCi0KLVR1ZSBKdW4gIDggMjI6MDA6MDAgMTk5OCAgQmVydGhvIFN0dWx0aWVucyA8YmVydGhvQGFraHBoZC5hdS5kaz4KLQotCSogW3Byb2dyYW1zLyovTWFrZWZpbGUuaW5dCi0JQ2hhbmdlZCB0aGUgcnVsZXMgdG8gdXNlIHdyYyBhcyByZXNvdXJjZSBjb21waWxlciBidXQKLQlwYXNzaW5nIHRoZSBzb3VyY2UgdGhyb3VnaCBnY2MgZmlyc3QgZm9yIG1hY3JvIGV4cGFuc2lvbi4KLQotCSogW3Byb2dyYW1zLyovKi5yY10KLQlBZGRlZCAjaW5jbHVkZSAid2luZG93cy5oIiBmb3IgdGhlIHJlc291cmNlIGNvbXBpbGVyIGluIHRoZQotCWFwcHJvcHJpYXRlIGZpbGVzLgotCi0JKiBbdG9vbHMvd3JjL3dyYy5bY2hdXSBbdG9vbHMvd3JjL3dyaXRlcmVzLmNdCi0JQWRkZWQgY29tbWFuZGxpbmUgb3B0aW9uIC1BIGZvciBhdXRvcmVnaXN0ZXIgY29kZS4KLQlDb3JyZWN0ZWQgdGhlIHVuZGVyc2NvcmUgcHJvYmxlbSBieSBjaGVja2luZyB0aGUgcHJvcGVyIGRlZmluZQotCWZyb20gY29uZmlnLmguCi0KLVN1biBKdW4gIDcgMjI6MDk6MjkgMTk5OCAgUGFzY2FsIEN1b3EgPHBjdW9xQGVucy1seW9uLmZyPgotCi0JKiBbb2xlL29sZTJubHMuY10gW21lbW9yeS9zdHJpbmcuY10KLQlJbXByb3ZlZCBMQ01hcFN0cmluZzMyQSwgYW5kIGNoYW5nZWQgQ29tcGFyZVN0cmluZzMyQSwKLQlsc3RyY21wLCBsc3RyY21waSB0byB1c2UgaXQuCi0KLVNhdCBKdW4gIDYgMTk6MDA6NTAgMTk5OCAgTWFydGluIFN0cvZtYmVyZyA8YW1zQGx1ZGQubHV0aC5zZT4KLQotCSogW2luY2x1ZGUvd2lubnQuaF0KLQlBZGRlZCB0eXBlZGVmcyBmb3Igc2VjdXJpdHkgYW5kIHRva2Vucy4KLQotU2F0IEp1biAgNiAxMjoyNjozMSAxOTk4ICBNb3J0ZW4gV2VsaW5kZXIgIDx0ZXJyYUBkaWt1LmRrPgotCi0JKiBbb2JqZWN0cy90ZXh0LmNdCi0JVXNlIGRlYnVnc3RyX2FuIGluIERyYXdUZXh0MTYuCi0KLQkqIFtsb2FkZXIvcmVzb3VyY2UuY10KLQlVc2UgZGVidWdyZXNfdyBpbiBGaW5kUmVzb3VyY2VFeDMyVy4gIEF2b2lkIGNyYXNoaW5nIGR1cmluZwotCWRlYnVnIHdoZW4gd20gaXMgTlVMTC4KLQotCSogW2lmMTYzMi9yZWxheS5jXQotCUluIFJFTEFZX0RlYnVnQ2FsbFRvMTYsIHNlbmQgb3V0cHV0IHRvIHRoZSByaWdodCBwbGFjZSBhbmQKLQlhdm9pZCBzaWRlIGVmZmVjdHMgaW4gbWFjcm8gYXJndW1lbnRzLgotCi1XZWQgSnVuICAzIDIwOjU2OjAzIDE5OTggIEh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgotCi0JKiBbY29udHJvbHMvc2Nyb2xsLmNdIFt3aW5kb3dzL25vbmNsaWVudC5jXQotCUZpeCBzZXZlcmFsIG9mZiBieSBvbmUgZXJyb3JzIGluIHNjcm9sbGJhciBwYWludGluZy4KLQotVHVlIEp1biAgMiAyMzo1ODo1OSAxOTk4ICBJbnNvbW5pYSAoU3RlYSBHcmVlbmUpIDxpbnNvbW5pYUBjb3JlLmJpbmdoYW10b24uZWR1PgotCi0JKiBbZ3JhcGhpY3MvZHNvdW5kLmNdCi0JUmV3cm90ZSBtaXhlciBjb2RlIHRvIGhhbmRsZSBwYW5uaW5nIGFuZCB2b2x1bWUgZm9yIDE2LT4xNiwgMTYtPjgsCi0JOC0+MTYsIGFuZCA4LT44IGJpdCBtaXhlcy4gIENvbmZvcm1zIHRvIERpcmVjdFgncyAibG9nYXJpdGhtaWMKLQloZWFyaW5nIHNjYWxlIiBhcyBzcGVjaWZpZWQgaW4gTSRWQyBkb2NzLiAgU3RpbGwgZG9lcyBub3QgaGFuZGxlCi0JbWl4aW5nIG9mIGRpZmZlcmVudCBmcmVxdWVuY2llcyAoSSBhbSBzdGlsbCB3b3JraW5nIG9uIHRoYXQpLiAKLQlUZXN0ZWQgMTYtPjE2IGV4dGVuc2l2ZWx5IHdpdGggU3RhckNyYWZ0LiAgT3RoZXIgbWl4aW5nIGNvbWJpbmF0aW9ucwotCXVudGVzdGVkIGJ1dCBzaG91bGQgd29yayBmaW5lLiAgU3RpbGwga2luZCBvZiBhIHdvcmsgaW4gcHJvZ3Jlc3MsCi0Jc28gYmUgd2FybmVkLgotCi1UdWUgSnVuICAyIDAzOjMxOjMzIDE5OTggIEFsZXhhbmRlciBWLiBMdWt5YW5vdiA8bGF2QGxvbmcueWFyLnJ1PgotCi0JKiBbdG9vbHMvd3JjL3V0aWxzLmNdCi0JZHVwX2Jhc2VuYW1lOiBmaXggdG8gc3RyaXAgZGlyZWN0b3J5LgotCi1Nb24gSnVuICAxIDIwOjAwOjAwIDE5OTggIEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgotCi0JKiBbaW5jbHVkZS93aW5kb3dzLmhdIFtvYmplY3RzL2N1cnNvcmljb24uY10gW3JlbGF5MzIvdXNlcjMyLnNwZWNdCi0JQWRkZWQgc3R1YnMgTG9hZEN1cnNvckZyb21GaWxlVyBhbmQgTG9hZEN1cnNvckZyb21GaWxlQS4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotU3VuIE1heSAzMSAxMzo0MDoxMyAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KLQotCSogW2lmMTYzMi9zaWduYWwuY10KLQlBZGRlZCBkaXNwbGF5IG9mIGV4Y2VwdGlvbiBuYW1lLgotCi0JKiBbbG9hZGVyL3Rhc2suY10KLQlZZXQgYW5vdGhlciBhdHRlbXB0IGF0IGZpeGluZyBTd2l0Y2hTdGFja1RvL1N3aXRjaFN0YWNrQmFjay4KLQotCSogW21lbW9yeS9zZWxlY3Rvci5jXSBbcmVsYXkzMi9idWlsdGluMzIuY10gW3Rvb2xzL2J1aWxkLmNdCi0JICBbd2luMzIva2VybmVsMzIuY10KLQlHZW5lcmF0ZSBhbiBhc3NlbWJseSBzdHViIGZvciBXaW4zMiByZWdpc3RlciBmdW5jdGlvbnMgdG8gbWFrZQotCXRoZWlyIG5hbWVzIGF2YWlsYWJsZSBhdCBsaW5rIHRpbWUuCi0KLQkqIFtwcm9ncmFtcy8qL01ha2VmaWxlLmluXQotCUFkZGVkIGhhY2tzIHRvIHN1cHBvcnQgb2xkIHJlc291cmNlIGNvbXBpbGVyLgotCi1GcmkgTWF5IDI5IDE2OjI3OjE0IDE5OTggIE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgotCi0JKiBbdG9vbHMvdGVzdHJ1bl0KLQlNZXJnZSBvZiBteSB0ZXN0c2NyaXB0cyBhdCBob21lIGludG8gb25lIHNpbmdsZSBwZXJsIHByb2dyYW0KLQkodGVzdGVkIHdpdGggcGVybDUpLiBXb3JrcyBvbmx5IG9uIExpbnV4IGR1ZSB0byAncHMnIGFuZCAnaXBjcycKLQltYWdpYy4KLQotCSogW2NvbnRyb2xzL21lbnUuY10KLQlBZGRlZCBzb21lIERlZmF1bHRNZW51SXRlbSBzdHVicy4KLQotCSogW2RlYnVnZ2VyL3N0YWJzLmNdCi0JRml4ZWQgc3RhYnMgbG9hZGluZywgbm93IHN1cHBvcnRzIChpbnQsaW50KSB0eXBlaW5mbyBmb3JtYXQgdXNlZAotCWJ5IGdjYy0yLjggYW5kIGVnY3MtMS4gSWYgaXQgc3RpbGwgY3Jhc2hlcywgcGxlYXNlIG1haWwgbWUuCi0KLQkqIFtpZjE2MzIvXVtyZWxheTMyL10KLQlBZGRlZCBtc3ZpZGVvLmRsbCAoc3R1YnMgb25seSkKLQlSZXBsYWNlZCBzb21lIHB0ciBieSBzdHIgZm9yIHN0cmluZ2Nhc2VzCi0JQWRkZWQgc29tZSBuZXcgc3R1YnMgKFZ4RENhbGwsIEZpbmRDbG9zZU5vdGlmLi4uLikKLQotCSogW21pc2MvbmV0d29yay5jXQotCVNvbWUgYXJndW1lbnQgZml4ZXMuCi0KLQkqIFttaXNjL3JlZ2lzdHJ5LmNdW21pc2MvY3B1LmNdCi0JUmVnaXN0cnkgaW5pdGlhbGl6YXRpb24gcGFydGlhbGx5IHJld3JpdHRlbiBhbmQgZW5oYW5jZWQuCi0KLQkqIFtzY2hlZHVsZXIvKi5jXQotCVNvbWUgYWRkaXRpb25zIHNvIHdlIGRvbid0IGRvIGtpbGwoMCxTSUdVU1IxKSAoa2lsbCBwcm9jZXNzZ3JvdXAKLQlpbnN0ZWFkIG9mIHRhcmdldGVkIHRocmVhZCkKLQlBZGRlZCBTZXRUaHJlYWRDb250ZXh0LgotCi1UaHUgTWF5IDI4IDIzOjU5OjU5IDE5OTggIEJlcnRobyBTdHVsdGllbnMgPGJlcnRob0Bha2hwaGQuYXUuZGs+Ci0KLQkqIFt0b29scy93cmMvKl0KLQlOZXcgcmVzb3VyY2UgY29tcGlsZXIgdmVyc2lvbiAxLjAuMCAoMjgtTWF5LTE5OTgpCi0KLQkqIFtNYWtlLnJ1bGVzLmluXSBbTWFrZWZpbGUuaW5dCi0JQ2hhbmdlZCBhbmQgYWRkZWQgcmMgcnVsZXMgdG8gcG9pbnQgdG8gdG9vbHMvd3JjL3dyYy4KLQotCSogW2NvbmZpZ3VyZS5pbl0gW2luY2x1ZGUvY29uZmlnLmguaW5dCi0JQWRkZWQgY2hlY2sgZm9yIGZ1bmN0aW9uICdzdHJpY21wJy4KLQotCSogW2luY2x1ZGUvcmVzb3VyY2UuaF0KLQlDb21tZW50ZWQgb3V0IHRoZSBvbGQgcmVzb3VyY2Ugc3RydWN0dXJlIHRvIGNhdGNoIHJlZmVyZW5jZXMuCi0JSXQgYWxzbyBpbmNsdWRlcyB3cmNfcnNjLmguCi0KLQkqIFtpbmNsdWRlL3dyY19yc2MuaF0KLQlOZXcgZmlsZS4gRGVmaW5pdGlvbnMgZm9yIHRoZSByZXNvdXJjZXMgZ2VuZXJhdGVkIHdpdGggd3JjLgotCi0JKiBbaW5jbHVkZS93aW5kb3dzLmhdCi0JQWRkZWQgI2lmZGVmIFJDX0lOVk9LRUQgdG8gZXhjbHVkZSBzdGRhcmcuaC4KLQlBZGRlZCBTU19OT1RJRlkgZmxhZy4KLQotCSogW2luY2x1ZGUvd2lubmxzLmhdCi0JQWRkZWQgU1VCTEFOR18qIGRlZmluaXRpb25zIGFuZCBjb3JyZWN0ZWQgc29tZSBkZWZhdWx0cy4KLQotCSogW2xvYWRlci9saWJyZXMuY10KLQlDaGFuZ2VkIHRoZSBzeXNyZXMgbG9hZCBmdW5jdGlvbnMgdG8gc3VwcG9ydCB3cmMgZ2VuZXJhdGVkCi0JcmVzb3VyY2VzLgotCi0JKiBbcmVzb3VyY2Uvc3lzcmVzXyoucmNdCi0JQWRkZWQgI2luY2x1ZGUgPHdpbmRvd3MuaD4KLQotCSogW3Jlc291cmNlL3N5c3Jlcy5jXQotCUNoYW5nZWQgZGVjbGFyYXRpb25zIHRvIG1hdGNoIHdyYydzIG91dHB1dAotCi0JKiBbcmVzb3VyY2UvTWFrZWZpbGUuaW5dCi0JQ2hhbmdlZCBydWxlcyB0byB3b3JrIHdpdGggd3JjLgotCi0JKiBbdG9vbHMvbWFrZWRlcC5jXQotCUNoYW5nZWQgZ2VuZXJhdGlvbiBvZiAucmMgZmlsZSBkZXBlbmRlbmNpZXMgdG8gLnMgdGFyZ2V0LgotCi1UaHUgTWF5IDI4IDIyOjI4OjM5IDE5OTggIEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+Ci0KLQkqIFtmaWxlcy9maWxlLmNdW2luY2x1ZGUvd2luZG93cy5jXVtyZWxheTMyL2tlcm5lbDMyLnNwZWNdCi0JSW1wbGVtZW50ZWQgR2V0RmlsZUF0dHJpYnV0ZXNFeDMyQS9XLgotCi0JKiBbbWlzYy9pbWFnZWxpc3QuaF1baW5jbHVkZS9jb21tY3RybC5oXVtyZWxheTMyL2NvbWN0bDMyLnNwZWNdCi0JQWRkZWQgSW1hZ2VMaXN0X1JlYWQgYW5kIEltYWdlTGlzdF9Xcml0ZSBzdHVicy4KLQlBZGRlZCBJbWFnZUxpc3RfQWRkSWNvbiBmdW5jdGlvbi4KLQlBZGRlZCBJbWFnZUxpc3RfTG9hZEltYWdlLiBJdCBpcyB0aGUgc2FtZSBhcyBJbWFnZUxpc3RfTG9hZEltYWdlMzJBLgotCi0JKiBbY29udHJvbHMvaGVhZGVyLmNdCi0JRml4ZWQgYml0bWFwIGRyYXdpbmcgYnVnLgotCUFkZGVkIGZ1bGwgYml0bWFwIHN1cHBvcnQuCi0KLQkqIFtpbmNsdWRlL2NvbW1jdHJsLmhdCi0JQWRkZWQgbWlzc2luZyBoZWFkZXIgbWFjcm9zLgotCi0JKiBbY29udHJvbHMvdG9vbGJhci5jXVtpbmNsdWRlL3Rvb2xiYXIuaF1baW5jbHVkZS9jb21tY3RybC5oXQotCSAgW2NvbnRyb2xzL2NvbW1jdHJsLmNdIFtyZWxheTMyL2NvbWN0bDMyLnNwZWNdCi0JRmlyc3QgaW1wbGVtZW50YXRpb24gb2YgdG9vbGJhciBjb250cm9sLgotCUltcGxlbWVudGVkIENyZWF0ZVRvb2xiYXIsIENyZWF0ZVRvb2xiYXJFeCBhbmQgQ3JlYXRlTWFwcGVkQml0bWFwLgotCi0JKiBbY29udHJvbHMvcHJvZ3Jlc3MuY11bY29udHJvbHMvc3RhdHVzLmNdCi0JU29tZSBjb2RlIGNsZWFudXAuCi0KLQkqIFtjb250cm9scy9jb21tY3RybC5jXVtpbmNsdWRlL2NvbW1jdHJsLmhdW3JlbGF5MzIvY29tY3RsMzIuc3BlY10KLQlSZW1vdmVkIENyZWF0ZVN0YXR1c1dpbmRvdzE2IGFuZCBEcmF3U3RhdHVzVGV4dDE2LgotCUNyZWF0ZVN0YXR1c1dpbmRvdyBpcyB0aGUgc2FtZSBhcyBDcmVhdGVTdGF0dXNXaW5kb3czMkEuCi0JRHJhd1N0YXR1c1RleHQgaXMgdGhlIHNhbWUgYXMgRHJhd1N0YXR1c1RleHQzMkEuCi0KLVRodSBNYXkgMjggMTY6MDE6MjggMTk5OCAgTWF0dGhldyBKLiBGcmFuY2lzICA8YXNiZWxAZGlhbC5waXBleC5jb20+Ci0KLQkqIFtvYmplY3RzL2JpdG1hcC5jXSBbb2JqZWN0cy9iaXRtYXAuaF0gW29iamVjdHMvb2VtYml0bWFwLmNdCi0JICBbb2JqZWN0cy9kYy5jXSBbZ3JhcGhpY3MveDExZHJ2L2JpdGJsdC5jXQotCUFkZGVkIHBhcnRpYWwgaW1wbGVtZW50YXRpb24gb2YgQ3JlYXRlRElCU2VjdGlvbiwgd2l0aCBncmVhdCB0aGFua3MKLQl0byBVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4gZm9yCi0JY29udHJpYnV0aW5nIHRoZSBidWxrIG9mIHRoZSBwYXRjaC4KLQotV2VkIE1heSAyNyAxOTowNDozMSAxOTk4ICBVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KLQotCSogW3dpbjMyL2tlcm5lbDMyLmNdIFtpZjE2MzIvdGh1bmsuY10gW2luY2x1ZGUvZmxhdHRodW5rLmhdCi0JVGh1bmtDb25uZWN0MTYgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIG1vdmVkIHRvIGVtdWxhdG9yLgotCi0JKiBbbG9hZGVyL25lL3NlZ21lbnQuY10KLQlDYWxsIERsbEVudHJ5UG9pbnQgd2l0aCBjb3JyZWN0IGFyZ3VtZW50cy4KLQotCSogW3JlbGF5MzIvYnVpbHRpbjMyLmNdCi0JQnVnZml4OiBSZWxheSBkZWJ1Z2dpbmcgZGlkIG5vdCB3b3JrIGZvciBtdWx0aXBsZSBwcm9jZXNzZXMuCi0KLQkqIFtjb250cm9scy9tZW51LmNdCi0JQnVnZml4OiBkd0l0ZW1EYXRhIHdhcyBub3Qgc2V0IGZvciBNRl9PV05FUkRSQVcgbWVudXMuCi0KLQkqIFtpZjE2MzIvcmVsYXkuY10gW3JlbGF5MzIvcmVsYXkzODYuY10KLQlSZWxheSBtZXNzYWdlcyBjb252ZXJ0ZWQgdG8gdXNlIERQUklOVEYuCi0KLQkqIFtjb250cm9scy9kZXNrdG9wLmNdIFtyZWxheTMyL3VzZXIzMi5zcGVjXQotCUltcGxlbWVudGVkIFBhaW50RGVza3RvcC4KLQotCSogW2ZpbGVzL3Byb2ZpbGUuY10gW2lmMTYzMi9rZXJuZWwuc3BlY10gW21pc2MvbmV0d29yay5jXQotCSAgW21pc2MvcHJpbnRkcnYuY10gW3JlbGF5MzIvd2luc3Bvb2wuc3BlY10gCi0JICBbd2luMzIvb3JkaW5hbHMuY10gW3JlbGF5MzIva2VybmVsMzIuc3BlY10KLQlTb21lIHN0dWJzIGFkZGVkLgotCi0JKiBbcmVsYXkzMi9tcHIuc3BlY10KLQlBbGwgb3JkaW5hbHMgd2VyZSBvZmYgYnkgb25lLgotCi1UdWUgTWF5IDI2IDEzOjMyOjU3IDE5OTggIEJpbGwgSGF3ZXMgPHdoYXdlc0BzdGFyLm5ldD4KLQotCSogW21pc2MvbHN0ci5jXSBbaW5jbHVkZS9jYXNlbWFwLmhdIFt0b29scy91bmltYXAucGxdCi0JQWRkZWQgVW5pY29kZSBjYXNlIGNvbnZlcnNpb24gcm91dGluZXMgdG93dXBwZXIvdG93bG93ZXIsCi0Jd2l0aCBtYXBwaW5nIHRhYmxlcyBjYXNlbWFwLmggY3JlYXRlZCBieSB0b29scy91bmltYXAucGwuCi0KLQkqIFttaXNjL250ZGxsLmNdIFtpbmNsdWRlL3dpbm5scy5oXSBbcmVsYXkzMi9udGRsbC5zcGVjXQotCSAgW3JlbGF5MzIvYWR2YXBpLnNwZWNdCi0JTWluaW1hbCBpbXBsZW1lbnRhdGlvbiBvZiBJc1RleHRVbmljb2RlLCBqdXN0IGVub3VnaCB0byBnZXQKLQlOVDQgbm90ZXBhZCB0byBvcGVuIGFzY2lpL3VuaWNvZGUgZmlsZXMuCi0KLQkqIFtNYWtlLnJ1bGVzLmluXSBbcmVzb3VyY2VzL3N5c3Jlc19Fbi5yY10KLQlBZGRlZCBpbmNsdWRlIGZpbGUgZGxncy5oIGZvciBidWlsZGluZyByZXNvdXJjZSBmaWxlcywgc28gdGhhdAotCXJlc291cmNlcyBjYW4gcmVmZXIgdG8gZGVmaW5lZCB2YWx1ZXMgKGUuZy4gcHNoSGVscCkuCi0KLQkqIFttaXNjL2NydGRsbC5jXSBbcmVsYXkzMi9jcnRkbGwuc3BlY10KLQlVc2UgdG93dXBwZXIvdG93bG93ZXIgZm9yIDMyVyBjYXNlIGNvbnZlcnNpb25zLgotCi0JKiBbbWVtb3J5L3N0cmluZy5jXQotCVVzZSB0b3d1cHBlciBmb3IgMzJXIGNhc2UgY29udmVyc2lvbnMuCi0KLQkqIFtvbGUvb2xlMm5scy5jXQotCVVzZSB0b3d1cHBlciBmb3IgMzJXIGNhc2UgY29udmVyc2lvbnM7IGZpeCBtZW0gbGVhazsgbWlub3IgY2xlYW51cAotCi0JKiBbY29udHJvbHMvZWRpdC5jXQotCUFkZGVkIHNvZnQgYnJlYWsgZmxhZyB0byBlZGl0IHN0YXRlLiBQcmludCB1bmtub3duIGFjdGlvbiB2YWx1ZXMKLQlmb3IgV01fVlNDUk9MTCAoYWN0aW9uIDE5MCBvY2N1cnMgd2hlbiBydW5uaW5nIE5UNCBub3RlcGFkLikKLQotTW9uIE1heSAyNSAyMjo0Mjo0MCAxOTk4ICBVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+Ci0KLQkqIFtmaWxlcy9maWxlLmNdCi0JQ2FyZSBmb3IgYSBwYXRob2xvZ2ljYWwgY2FzZSBpbiBTZXRGaWxlUG9pbnRlci4KLQotCSogW2dyYXBoaWNzL3gxMWRydi94Zm9udC5jXQotCUhhbmRsZSBsb25nZXIgRm9udCBuYW1lcyBpbiBMRkRfQ29tcG9zZUxGRCBhbmQgdHJ5IHRvIGNhdGNoIGVycm9ycy4KLQotCSogW2xvYWRlci9wZV9pbWFnZS5jXQotCVVubG9hZCBEdW1teW1vZHVsZSB3aGVuIFBFX0xvYWRMaWJyYXJ5RXgzMkEgZmFpbHMgd2l0aAotCVBFX0xvYWRJbWFnZSAobWFrZXMgRW5jYXJ0YSA5OCBpbnN0YWxsZXIgcHJvY2VlZCkuCi0KLQkqIFttaXNjL3JlZ2lzdHJ5LmNdCi0JTW92ZSBhIGNoZWNrIGZvciBhIHNwZWNpYWwgY2FzZSBpbiBSZWdDcmVhdGVLZXlFeDMyVyBhZnRlciB0aGUKLQljaGVjayBmb3IgZXhpc3RlbmNlLgotCi1UdWUgTWF5IDI1IDIwOjE4OjI2IDE5OTggIE1hdHRoZXcgQmVja2VyIDxtYmVja2VyQGdsYXNzY2l0eS5uZXQ+Ci0KLQkqIFttaXNjL250ZGxsLmNdCi0JQWRkZWQgc29tZSBzdHVicywganVzdCBndWVzc2luZyBhdCB0aGUgc2l6ZSBvZiB0aGVpciBwYXJhbSBsaXN0cy4KLQotCSogW21pc2MvcmVnaXN0cnkuY10KLQlBZGRlZCBzdHVicyBmb3IgUmVnVW5Mb2FkS2V5LCBSZWdTZXRLZXlTZWN1cml0eSwgUmVnU2F2ZUtleSwKLQlSZWdSZXN0b3JlS2V5LCBhbmQgUmVnUmVwbGFjZUtleQotCi0JKiBbcHJvZ3JhbXMvcmVndGVzdC9yZWd0ZXN0LmNdCi0JVXBkYXRlZCByZWdpc3RyeSB0ZXN0aW5nIHByb2dyYW0uCi0KLVN1biBNYXkgMjQgMTg6MTE6NDAgMTk5OCAgQWxleCBQcmllbSA8YWxleHBAc2NpLmt1bi5ubD4KLQotCSogW2ZpbGUvcHJvZmlsZS5jXQotCUFkZGVkIGZsYWcgJ3JldHVybl92YWx1ZXMnIHRvIFBST0ZJTEVfR2V0U2VjdGlvbi4KLQotU3VuIE1heSAyNCAxMzo0MToxMCAxOTk4ICBKYW1lcyBKdXJhbiA8anJqMTIwQHBzdS5lZHU+Ci0KLQkqIFttaXNjL3NoZWxsLmNdIFtmaWxlcy9kaXJlY3RvcnkuY10KLQlEb2N1bWVudGF0aW9uL2RlYnVnZ2luZyBpbmZvIGFkZGl0aW9ucy4KLQotCSogWyovKi5jXSBbaW5jbHVkZS8qLmhdCi0JTW92ZWQgbWFueSBleHRlcm4gZnVuY3Rpb24gZGVmaW5pdGlvbnMgdG8gYXBwcm9wcmlhdGUgaGVhZGVyIGZpbGVzLgotCUNsZWFuZWQgdXAgYSBmZXcgY29tcGlsZSB3YXJuaW5ncy4KLQlJZiAjaW5jbHVkZSAiZGVidWcuaCIgaXMgcHJlc2VudCwgcmVtb3ZlZCAjaW5jbHVkZSA8c3RkaW8uaD4uCi0JZGVidWcuaCBpbmNsdWRlcyBzdGRpby5oLCBzbyBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGluY2x1ZGUgYm90aC4KLQotCSogW2dyYXBoaWNzLyouY10gW2lmMTYzMi9zaWduYWwuY10gW2lwYy8qLmNdIFtzY2hlZHVsZXIvKi5jXQotCSAgW3dpbjMyLyouY10gW3dpbmRvd3MvKi5jXQotCUZpbmFsIHBhdGNoIHRvIGNvbnZlcnQgZnByaW50ZiBzdGF0ZW1lbnRzIHRvIG5ldyBkZWJ1Z2dpbmcgaW50ZXJmYWNlLgotCVNvbWUgZnByaW50ZnMgYXJlIHN0aWxsIGxlZnQsIGVzcGVjaWFsbHkgaW4gdGhlIGRlYnVnZ2VyLyBkaXJlY3RvcnkuCi0JSG93ZXZlciwgSU1ITywgaXQncyBub3Qgd29ydGggdGhlIGVmZm9ydCB0byBjaGFuZ2UgdGhlIHJlc3QuCi0KLUZyaSBNYXkgMjIgMjE6NTg6MzUgMTk5OCAgTW9ydGVuIFdlbGluZGVyICA8dGVycmFAZGlrdS5kaz4KLQotCSogW3dpbmRvd3Mva2V5Ym9hcmQuY10KLQlDb3JyZWN0IGhhbmRsaW5nIG9mIGtleXMgImAtPVtdXDsnLC4vIi4KLQotRnJpIE1heSAyMiAxMjowNjowMCAxOTk4ICBQZXIgTGluZHN0cvZtIDxwZWxpbnN0ckBhbGdvbmV0LnNlPgotCi0JKiBbaW5jbHVkZS93aW5kb3dzLmhdIFtyZWxheTMyL2tlcm5lbDMyLnNwZWNdIFt3aW4zMi9jb25zb2xlLmNdCi0JQWRkZWQgc3R1YiBmb3IgUmVhZENvbnNvbGVPdXRwdXRDaGFyYWN0ZXIzMkEuCi0KLVRodSBNYXkgMjEgMTY6NDU6NDggMTk5OCAgUGFzY2FsIEN1b3EgPHBjdW9xQGVucy1seW9uLmZyPgotCi0JKiBbb2xlL29sZTJubHMuY10KLQlCZWdhbiBiZXR0ZXIgaW1wbGVtZW50YXRpb24gb2YgTENNYXBTdHJpbmczMkEuCi0JTm90IHZlcnkgd2VsbCB0ZXN0ZWQgeWV0LCBhbmQgc3RpbGwgbmVlZCBpbXByb3ZlbWVudHMuCi0KLQkqIFtjb250cm9scy9zY3JvbGwuY10KLQlEb2N1bWVudGVkIGZ1bmN0aW9ucy4KLQotV2VkIE1heSAyMCAyMTozNzo1NiAxOTk4ICBQZXRlciBIdW5uaXNldHQgPGh1bm5pc2VAbm9ydGVsLmNhPgotCi0JKiBbaW5jbHVkZS93aW5kb3dzLmhdW21pc2MvbWFpbi5jXQotCUNoYW5nZSBTeXN0ZW1QYXJhbWV0ZXJJbmZvIHRvIHN1cHBvcnQgU1BJX0dFVEhJR0hDT05UUkFTVC4gQWxzbwotCWluY2x1ZGUgc29tZSBtaXNzaW5nIFNQSV8gZGVmaW5pdGlvbnMuCi0KLQkqIFtpbmNsdWRlL2Rzb3VuZC5oXVttdWx0aW1lZGlhL2Rzb3VuZC5jXVtyZWxheTMyL2RwbGF5eC5zcGVjXQotCUFkZGVkIHN0dWJzIGZvciBEaXJlY3RQbGF5TG9iYnlDcmVhdGVbQVddLiBOb3Qgc3VyZSBpZiB0aGVzZQotCXNob3VsZCBnbyBpbnRvIGEgbmV3IGZpbGVzIGRwbGF5eC5jPyBBbnlvbmUgY2FyZT8KLQotCSogW2luY2x1ZGUvd2lubmxzLmhdCi0JQWRkZWQgdHdvIG1pc3NpbmcgZmxhZ3MgZm9yIHRoZSBDb21wYXJlU3RyaW5nMzIgZnVuY3Rpb25zLgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1TdW4gTWF5IDE3IDE2OjIzOjU2IDE5OTggIFV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KLQotCSogW2ZpbGUvcHJvZmlsZS5jXQotCUZpeCB0aGUgcmV0dXJuIHZhbHVlIG9mIFBST0ZJTEVfR2V0U2VjdGlvbgotCi0JKiBbbWlzYy9jcnRkbGwuY10KLQlEbyBfZ2V0ZHJpdmUsIGZpeCBfY2hkcml2ZS4KLQotCSogW21pc2MvY29tbWRsZy5jXQotCUZpcnN0IGN1dCBhdCBDaG9vc2VDb2xvcltXQV0uCi0KLQkqIFttaXNjL25ldHdvcmsuY10KLQlEbyBzb21ldGhpbmcgc2Vuc2libGUgZm9yIFdOZXRHZXREaXJlY3RvcnlUeXBlMTYuCi0KLVN1biBNYXkgMTcgMTA6MjE6MzUgMTk5OCAgQW5kcmVhcyBNb2hyIDwxMDAuMzA5MzZAZ2VybWFueS5uZXQ+Ci0KLQkqIFtjb250cm9scy9tZW51LmNdCi0JRml4ZWQgZGlzYWJsZWQgc3ViIG1lbnVzIHdpdGggTUZfQllQT1NJVElPTiB0aGF0IHdlcmUgbm90IGRpc2FibGVkLgotCi0JKiBbbWlzYy9jcnRkbGwuY10gW3JlbGF5MzIvY3J0ZGxsLnNwZWNdIFtpbmNsdWRlL3dpbmVycm9yLmhdCi0JSW1wbGVtZW50ZWQgZnNjYW5mLCBmc2V0cG9zLCBfYWNjZXNzLCBfZnByZXNldCAodGhhbmtzIHRvIFV3ZSBCb25uZXMpLAotCWFuZCBfbHRvYS4gCi0KLQkqIFtsb2FkZXIvdGFzay5jXQotCU1ha2VQcm9jSW5zdGFuY2U6IG11c3QgdXNlIENVUlJFTlRfRFMgaWYgaEluc3QgPT0gTlVMTC4KLQotCSogW21pc2Mvc2hlbGwuY10KLQlTSEVMTF9HZXRSZXNvdXJjZVRhYmxlLCBJbnRlcm5hbEV4dHJhY3RJY29uOiBmaXhlZCBicm9rZW4gLklDTyBoYW5kbGluZwotCi0JKiBbd2luZG93cy93aW5wb3MuY10KLQlEZWZlcldpbmRvd1BvczogcmVtb3ZlZCAic2FtZSBwYXJlbnQiIHJlcXVpcmVtZW50LgotCVdoaWNoIGRvYyBzdGF0ZXMgdGhhdCB0aGlzIGlzIHJlcXVpcmVkID8KLQotU2F0IE1heSAxNiAyMDowODoxMSAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KLQotCSogW2xvYWRlci9tb2R1bGUuY10gW2xvYWRlci9uZS9tb2R1bGUuY10KLQlNb3JlIE5FIG1vZHVsZSBjbGVhbnVwcy4KLQotCSogW2xvYWRlci90YXNrLmNdCi0JRml4ZWQgU3dpdGNoU3RhY2tCYWNrKCkuCi0KLUZyaSBNYXkgMTUgMTA6MDQ6MjcgMTk5OCAgTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+Ci0KLQkqIFtjb25maWd1cmUuaW5dW2lubGN1ZGUvYWNjb25maWcuaF0KLQlGaXhlZCBicm9rZW4gT1NTIGNoZWNrLCBhZGRlZCBjaGVjayBmb3Igd29ya2luZyBzaWdhbHRzdGFjaywKLQlmaXhlZCBicm9rZW4gc3RhdGZzIGNoZWNrcyBvbiBzb21lIGxpbnV4IHN5c3RlbXMuCi0KLQkqIFtmaWxlcy9kaXJlY3RvcnkuY11bbG9hZGVyL3BlX2ltYWdlLmNdW3JlbGF5MzIvYnVpbHRpbi5jXQotCSAgW2xvYWRlci9tb2R1bGUuY10KLQlBZGRlZCBoYW5kbGluZyBvZiB3aW4zMiBtb2R1bGUgcGF0aG5hbWVzLgotCi0JKiBbcmVsYXkzMi93bmFzcGkzMi5zcGVjXQotCU5ldyBmaWxlLgotCi0JKiBbbWlzYy9semV4cGFuZC5jXQotCUxaQ29weSBhdXRvLWRlY29tcHJlc3NlcyBMWiBjb21wcmVzc2VkIGZpbGVzLCBldmVuIGlmIHRoZXkgYXJlIG5vdAotCXNwZWNpYWxseSBmbGFnZ2VkLiBGaXhlcyBzb21lIEluc3RhbGxTaGllbGQgcHJvYmxlbXMuCi0KLQkqIFttaXNjL3JlZ2lzdHJ5LmNdCi0JU29tZSBmaXhlcyBmb3IgUmVnUXVlcnlJbmZvS2V5IChyZWZlcmVuY2UgcHJvZ3JhbSBtb25rZXkuZXhlCi0JZnJvbSBXaW4zMiBTREsgd29ya3Mgbm93IGJldHRlcikuIFByb2JhYmx5IHN0aWxsIGhhcyBmYXVsdHMuCi0KLUZyaSBNYXkgMTUgMDg6NTg6NTggMTk5OCAgTWFydGluIEJvZWhtZSA8Ym9laG1lQGluZm9ybWF0aWsubXUtbHVlYmVjay5kZT4KLQotCSogW2dyYXBoaWNzL21hcHBpbmcuY10gW2luY2x1ZGUvZGMuaF0gW2luY2x1ZGUvZ2RpLmhdIFtvYmplY3RzL2RjLmNdCi0JUmV3b3JrZWQgdGhlIHdheSB3b3JsZCB0cmFuc2Zvcm1hdGlvbnMgYW5kIG1hcHBpbmcgbW9kZXMgYXJlIGhhbmRsZWQKLQlzbyB0aGF0IGJvdGggb2YgdGhlc2UgdHJhbnNmb3JtYXRpb25zIGNhbiBiZSBjb21wdXRlZCBpbiBhIHNpbmdsZQotCXN0ZXAuCi0KLQkqIFtncmFwaGljcy9wYWludGluZy5jXSBbZ3JhcGhpY3MvcGF0aC5jXSBbaW5jbHVkZS9wYXRoLmhdCi0JTW9yZSBHREkgcGF0aCBzdXBwb3J0LgotCi0JKiBbZ3JhcGhpY3MveDExZHJ2L2dyYXBoaWNzLmNdCi0JRml4ZWQgdGhlIHJldHVybiB2YWx1ZSBvZiBHUkFQSF9EcmF3QXJjIGZvciB0aGUgemVybyBoZWlnaHQgLwotCXplcm8gd2lkdGggY2FzZSB0byByZWZsZWN0IFdpbmRvd3MnIGJlaGF2aW91ci4KLQotCSogW2luY2x1ZGUvd2luZG93cy5oXSBbcmVsYXkzMi9nZGkzMi5zcGVjXSBbb2JqZWN0cy9kYy5jXQotCUltcGxlbWVudGVkIE1vZGlmeVdvcmxkVHJhbnNmb3JtIGFuZCBDb21iaW5lVHJhbnNmb3JtLgotCi1UdWUgTWF5IDE0IDE4OjAzOjQ2IDE5OTggIEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+Ci0KLQkqIFtjb250cm9scy9jb21tY3RybC5jXVtyZWxheTMyL2NvbWN0bDMyLnNwZWNdCi0JICBbY29udHJvbHMvKi5jXVtpbmNsdWRlLyouaF0KLQlJbXBsZW1lbnRlZCBJbml0Q29tbW9uQ29udHJvbHNFeCAoZGxsIHZlcnNpb24gNC43MiBjb21wYXRpYmxlKS4KLQlJbml0Q29tbW9uQ29udHJvbHMgY2FsbHMgSW1hZ2VDb21tb25Db250cm9sc0V4LgotCVJlZ2lzdGVyaW5nIGNvZGUgb2YgdGhlIGNvbW1vbiBjb250cm9scyBoYWQgdG8gYmUgY2hhbmdlZAotCShzZWUgWFhYWF9SZWdpc3RlciBmdW5jdGlvbnMpLgotCi0JKiBbY29udHJvbHMvc3RhdHVzLmNdW2luY2x1ZGUvY29tbWN0cmwuaF1baW5jbHVkZS9zdGF0dXMuaF0KLQlJbXBsZW1lbnRlZCBtb3N0IG5ldyBmZWF0dXJlcyBhbmQgZml4ZWQgdGhlIGxvb2sgYW5kIGZlZWwuCi0KLQkqIFtjb250b2xzL2NvbW1jdHJsLmNdW2luY2x1ZGUvY29tbWN0cmwuaF1bcmVsYXkzMi9jb21jdGwzMi5zcGVjXQotCUltcGxlbWVudGVkIE1lbnVIZWxwIChpbmNvbXBsZXRlKS4KLQotCSogW2NvbnRyb2xzL3N0YXR1cy5jXVtjb250cm9scy9wcm9ncmVzcy5jXQotCUNoYW5nZWQgYWxsb2NhdGlvbiBzdHJhdGVneSBmb3IgY29udHJvbCBzcGVjaWZpYyBtZW1vcnkuCi0KLQkqIFtjb250cm9scy9oZWFkZXIuY11baW5jbHVkZS9oZWFkZXIuaF1baW5jbHVkZS9jb21tY3RybC5oXQotCUZpcnN0IGltcGxlbWVudGF0aW9uIG9mIGhlYWRlciBjb250cm9sLgotCi0JKiBbd2luZG93cy9kZWZ3bmQuY11bd2luZG93cy9zeXNjb2xvcnMuY10KLQlGaXhlZCBkZWZhdWx0IGNvbnRyb2wgY29sb3JzIGZvciBXaW45NSBsb29rLgotCi0JKiBbd2luZG93cy9ub25jbGllbnQuY10KLQlGaXhlZCBvZmYgYnkgb25lIGVycm9yIGZvciBXaW45NSBsb29rLiBUb3AgYm9yZGVyIG9mIGNoaWxkIHdpbmRvd3MKLQlzaG91bGQgYmUgdmlzaWJsZS4KLQotCSogW21pc2MvaW1hZ2VsaXN0LmhdCi0JSW1wcm92ZWQgZG9jdW1lbnRhdGlvbiBhbmQgZml4ZWQgc29tZSBidWdzLgotCi1UaHUgTWF5IDE0IDE1OjQyOjIxIDE5OTggIFJvYmVydCBXaWxoZWxtICA8cm9iZXJ0QHBoeXNpb2wubWVkLnR1LW11ZW5jaGVuLmRlPgotCi0JKiBbcmVsYXkzMi9jcnRkbGwuc3BlY10KLQlBZGRlZCBoeXBvdCxqMCxqMSxqbiBhbmQgY2VpbC4KLQotV2VkIE1heSAxMyAxOToxMDoxMCAxOTk4ICBQYXNjYWwgQ3VvcSA8cGN1b3FAZW5zLWx5b24uZnI+Ci0KLQkqIFtjb250cm9scy9saXN0Ym94LmNdCi0JSXRlbSBoZWlnaHQgaXMgbm93IGV4YWN0bHkgZm9udCBoZWlnaHQuCi0JV2luZSBsaXN0Ym94ZXMgbm93IGJlaGF2ZSBsaWtlIFdpbmRvd3MnIHdoZW4gdGhleSBhcmUgCi0JY3JlYXRlZCB3aXRob3V0IFdTX1ZTQ1JPTEwgYnV0IHRoZSBwcm9ncmFtIHN1YnNlcXVlbnRseSAKLQljYWxscyBTaG93U2Nyb2xsQmFyIG9yIFNldFNjcm9sbEluZm8uCi0KLVdlZCBNYXkgMTMgMTg6MzM6MDEgMTk5OCAgVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+Ci0KLQkqIFtyZWxheTMyL3JlbGF5Mzg2LmNdCi0JUmVzdG9yZSBFUyBhbHNvIGluIHRoZSBub24tZGVidWcgY2FzZS4KLQotCSogW3dpbmRvd3MvZXZlbnQuY10KLQlCdWdmaXg6IEJsb2NraW5nIFRTWE5leHRFdmVudCBjb3VsZCBkZWFkbG9jayBXaW5lLgotCi0JKiBbd2luMzIvcHJvY2Vzcy5jXSBbd2luZG93cy9tZXNzYWdlLmNdCi0JU2lsbHkgc3R1YnMgZm9yIE1zZ1dhaXRGb3JNdWx0aXBsZU9iamVjdHMgLyBQb3N0VGhyZWFkTWVzc2FnZQotCXRoYXQgbWFrZSBzb21lIHByb2dyYW1zIHJ1biBiZXR0ZXIuCi0KLQkqIFt3aW5kb3dzL3dpbnByb2MuY10KLQlXSU5QUk9DX01hcE1zZzMyQXRvMTYvMTZUbzMyQTogYWRkZWQgV01fTk9USUZZLiAgCi0KLSAgICAgICAgKiBbd2luMzIva2VybmVsMzIuY10KLQlBZGRlZCAxNi0+MzIgdGh1bmtpbmcgYW5kIGltcHJvdmVkIDMyLT4xNiB0aHVua2luZyBmdW5jdGlvbnMuCi0KLQkqIFt0b29scy9idWlsZC5jXQotCUFkZGVkIG5ldyB2YXJpYW50IG9mIENhbGxGcm9tMTYgc3R1YiBmb3IgdXNlIHdpdGggV2luOTUgdGh1bmtzLgotCi0JKiBbaWYxNjMyL2tlcm5lbC5zcGVjXSBbaWYxNjMyL2J1aWx0aW4uY10gW3dpbjMyL2tlcm5lbDMyLmNdCi0JQWRkZWQgYSBmZXcgdW5kb2N1bWVudGVkIEtFUk5FTCBmdW5jdGlvbnMuCi0KLQkqIFtsb2FkZXIvbmUvbW9kdWxlLmNdIFtsb2FkZXIvbmUvc2VnbWVudC5jXQotCUNhbGwgRGxsRW50cnlQb2ludCBmb3IgMTYtYml0IERMTHMgd2l0aCBzdWJzeXN0ZW0gPj0gNC4wLgotCi0JKiBbd2luMzIva2VybmVsMzIuc3BlY10gW3dpbjMyL3dvdzMyLnNwZWNdIFt3aW4zMi9vcmRpbmFscy5jXQotCVVzZSBuYW1lcyBmcm9tIHRoZSBPY3QgOTQgYmV0YSByZWxlYXNlIGZvciB1bmRvYy4gZnVuY3Rpb25zLgotCi1XZWQgTWF5IDEzIDE0OjE4OjI2IDE5OTggIE1hdHRoZXcgQmVja2VyIDxtYmVja2VyQGdsYXNzY2l0eS5uZXQ+Ci0KLQkqIFttaXNjL3JlZ2lzdHJ5LmNdCi0JQ29kZSBjbGVhbnVwLgotCi0JKiBbbWlzYy9jcHUuY10KLQlDb21tZW50ZWQgb3V0IHRoZSByZWdpc3RyeSBwdXRzIHRlbXBvcmFyaWx5LgotCi0JKiBbcHJvZ3JhbXMvcmVndGVzdC8qXQotCU5ldyByZWdpc3RyeSB0ZXN0aW5nIHByb2dyYW0uCi0KLVR1ZSBNYXkgMTIgMjI6NTQ6MDMgMTk5OCAgTWljaGFlbCBNZXNzIDxtaWNoYWVsQGthd28yLnJ3dGgtYWFjaGVuLmRlPgotCi0JKiBbbXVsdGltZWRpYS9hdWRpby5jXQotCWlvY3RsJ3MgZG8gbm90IGNvbW11dGUgaW4gL2Rldi9kc3AgaW5pdGlhbGl6YXRpb24uCi0KLVR1ZSBNYXkgMTIgMjA6MTE6NDIgMTk5OCAgS2FybCBHYXJyaXNvbiA8a2FybG9zQGV6bmV0Lm5ldD4KLQotCSogW3dpbjMyL2NvbnNvbGUuY10KLQlJbXBsZW1lbnRlZCBTZXRDb25zb2xlVGV4dEF0dHJpYnV0ZSwgRmlsbENvbnNvbGVPdXRwdXRDaGFyYWN0ZXIuCi0JSW1wcm92ZWQgY3Vyc29yIHBvc2l0aW9uaW5nLgotCVRoaXMgYWxsb3dzIGZvciB0ZXh0IGNvbG9ycyBpbiBhbiB4dGVybSwgcnh2dCwgb3IgY29uc29sZS4KLQotVHVlIE1heSAxMiAxNzo1Nzo1MiAxOTk4ICBQZXR0ZXIgUmVpbmhvbGR0c2VuIDxwZXJlQHRkLm9yZy51aXQubm8+Ci0KLQkqIFtNYWtlZmlsZS5pbl0KLQlDcmVhdGUgcHJlZml4L3tiaW58bGlifSBkaXJlY3RvcmllcyBpZiBtaXNzaW5nIGR1cmluZyBpbnN0YWxsLgotCi1TdW4gTWF5IDEwIDE5OjM3OjUxIDE5OTggIEphbiBXaWxsYW1vd2l1cyA8amFuQGphbmhoLnNobmV0Lm9yZz4KLQotCSogW211bHRpbWVkaWEvbW1pby5jXQotCUhhdmUgbW1pb1NldEJ1ZmZlciByZXR1cm4gc3VjY2VzcyAoMCksIHNvIENvcmVsIERyYXcgNAotCWtlZXBzIHdvcmtpbmcuIChJTyBpcyBzdGlsbCB1bmJ1ZmZlcmVkKQotCi1XZWQgTWF5ICA2IDE2OjU3OjU1IDE5OTggIEphbWVzIEp1cmFuIDxqcmoxMjBAcHN1LmVkdT4KLQotICAgICAgICAqIFtNYWtlZmlsZS5pbl0gW01ha2UucnVsZXMuaW5dCi0JQ2hhbmdlZCAibWFrZSBjbGVhbiIgdG8gcmVtb3ZlIGB0ZXh0ZWRpdGAgYmFja3VwIGZpbGVzICgqJSkKLQotCSogW2NvbnRyb2xzL21lbnUuY11bZ3JhcGhpY3MveDExZHJ2L3hmb250LmNdW2luY2x1ZGUvbGlicmVzLmhdCi0JICBbbG9hZGVyL21haW4uY11bbG9hZGVyL25lL21vZHVsZS5jXVtzY2hlZHVsZXIvc3luY2hyby5jXQotCSAgW3dpbjMyL3RpbWUuY11bd2luZG93cy93aW5wb3MuY11baW5jbHVkZS93aW5kb3dzLmhdCi0JRml4ZWQgbWlzY2VsbGFuZW91cyBjb21waWxhdGlvbiB3YXJuaW5ncy4KLQotCSogW21pc2MvbWFpbi5jXVttaXNjZW11L21haW4uY11baW5jbHVkZS9tYWluLmhdCi0JTW92ZWQgcHJvdG90eXBlcyB0byBuZXcgaW5jbHVkZSBmaWxlIG1haW4uaCwgdmFyaW91cyBjbGVhbnVwcy4KLQotVHVlIE1heSAgNSAyMTowNTowNiAxOTk4ICBNb3J0ZW4gV2VsaW5kZXIgIDx0ZXJyYUBkaWt1LmRrPgotCi0JKiBbbWlzYy93aW5zb2NrLmNdCi0JRG9uJ3QgcmVmZXIgdG8gX19GcmVlQlNEX18gd2hlbiBIQVZFX1NUUkVSUk9SIGlzIG1lYW50LgotCi0JKiBbbWlzYy9kZWJ1Z3N0ci5jXQotCUZvciBkZWJ1Z19kdW1wc3RyU2VuZCwgc2VuZCBzdHJpbmdzIHRvIHN0ZGVyci4KLQotVHVlIE1heSAgNSAyMTo0Nzo0MCAxOTk4ICBIdXcgRCBNIERhdmllcyA8aC5kYXZpZXMxQHBoeXNpY3Mub3hmb3JkLmFjLnVrPgotCi0JKiBbb2JqZWN0cy9yZWdpb24uY10KLQlGaXggZm9yIFJFR0lPTl9SZWdpb25PcCgpIGlmIG5ld1JlZyBpcyBvbmUgb2YgdGhlIHNvdXJjZSByZWdpb25zLgotCi1UdWUgTWF5ICA1IDE4OjI3OjMyIDE5OTggIEppbSBQZXRlcnNvbiA8anNwZXRlckByb2Fub2tlLmluZmkubmV0PgotCi0JKiBbbWlzYy9tYWluLmNdCi0JQWRkICctaC8taGVscCcgb3B0aW9uIGFuZCBwcmludCBXSU5FX1JFTEVBU0VfSU5GTyB3aXRoIHVzYWdlIG1lc3NhZ2UuCi0KLQkqIFttaXNjL3NweS5jXQotCVJlYWxpZ24gdHJhY2UgbWVzc2FnZXMuCi0KLVR1ZSBNYXkgIDUgMTU6NDY6NDcgMTk5OCAgRG9ubmllIFYuIFNhdmFnZSA8ZHNhdmFnZUBjaXNjby5jb20+Ci0KLQkqIFtncmFwaGljcy9kZHJhdy5jXQotCUZpeGVkIGNvbXBpbGUgd2FybmluZ3MKLQotCSogW21pc2Mvd2luc29jay5jXQotCVdhcm5pbmdzIHNob3VsZCBub3QgYmUgZXJyb3JzLgotCi1UdWUgTWF5ICA1IDEzOjQwOjQyIDE5OTggIEppbSBQZXRlcnNvbiA8anNwZXRlckByb2Fub2tlLmluZmkubmV0PgotCi0JKiBbKi8qXQotCVJlbW92ZSBtYW55IHdhcm5pbmdzIHRocm91Z2ggZXhwbGljaXQgY2FzdHMsIGFkZGVkICNpbmNsdWRlJ3MsCi0JYW5kIGNvcnJlY3RlZCBwcmludGYgZm9ybWF0cy4KLQotVHVlIE1heSAgNSAwNToxODoxMiAxOTk4ICBJbnNvbW5pYSAoU3RlYSBHcmVlbmUpIDxpbnNvbW5pYUBjb3JlLmJpbmdoYW10b24uZWR1PgotCi0JKiBbZ3JhcGhpY3MvZGRyYXcuY10KLQlLZXB0IHVuY2hhbmdlZCBwb3J0aW9uIG9mIG9sZCBwYWxldHRlIHdoZW4gY2hhbmdpbmcgb25seSBhIGZldwotCXBhbGV0dGUgZW50cmllcy4gIFJlYWxseSBzaG91bGQgb25seSBkZWFsbG9jYXRlIHRoZSBjaGFuZ2VkIGNlbGxzLgotCVRoaXMgbWFrZSBTdGFyQ3JhZnQgd29yayBhbG1vc3QgcGVyZmVjdGx5IChzb3VuZCBvdmVyZmxvd3Mgc3RpbGwKLQljYXVzZSBzdGF0aWMpLgotCi1Nb24gTWF5ICA0IDE1OjA0OjU3IDE5OTggIEFsZXhhbmRlciBWLiBMdWt5YW5vdiA8bGF2QGxvbmcueWFyLnJ1PgotCi0JKiBbbWlzYy9sc3RyLmNdCi0JRm9ybWF0TWVzc2FnZTogdGVybWluYXRlIHN0cmluZyBvbiAlMCwgdW5kbyBsaW5lZmVlZCBzdHJpcC4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVGh1IEFwciAzMCAxNjoyODoxMiAxOTk4ICBKYW1lcyBKdXJhbiA8anJqMTIwQHBzdS5lZHU+Ci0KLQkqIFtzY2hlZHVsZXIvcHJvY2Vzcy5jXQotCUltcGxlbWVudGVkIEdldEV4aXRDb2RlUHJvY2Vzcy4gIFRoZSBjb2RlIGlzIGEgZGlyZWN0IHRyYW5zbGF0aW9uCi0Jb2YgR2V0RXhpdENvZGVUaHJlYWQuCi0KLU1vbiBBcHIgMjcgMjI6MjA6MjUgMTk5OCAgVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgotCi0JKiBbbG9hZGVyL3BlX2ltYWdlLmNdCi0JVW5sb2FkIGR1bW15IG1vZHVsZSB3aGVuIFBFX0xvYWRMaWJyYXJ5RXgzMkEgZmFpbHMgd2l0aAotCVBFX0xvYWRJbWFnZSAobWFrZXMgRW5jYXJ0YSA5OCBpbnN0YWxsZXIgcHJvY2VlZCkuCi0KLQkqIFtmaWxlcy9kcml2ZS5jXQotCU1ha2UgR2V0RHJpdmVUeXBlMTYgcmV0dXJuIERSSVZFX1JFTU9WQUJMRSBmb3IgVFlQRV9DRFJPTS4KLQlNYWtlIEdldEN1cnJlbnREaXJlY3RvcnkzMiBiZWhhdmUgbGlrZSB0aGUgY29kZSBkb2VzIGFuZCBub3QKLQlsaWtlIHRoZSBoZWxwIGRlc2NyaWJlcy4KLQotCSogW2ZpbGVzL3Byb2ZpbGUuY10KLQlSZXZva2UgcmVjZW50IGNoYW5nZSBpbiBQUk9GSUxFX0dldFNlY3Rpb24gYW5kIHRyeSBiZXR0ZXIgCi0JaGFuZGxpbmcgb2Ygc3BlY2lhbCBjYXNlLgotCi0JKiBbaW5jbHVkZS93aW5kb3dzLmhdCi0JQ2hhbmdlIGRlZmluaXRpb24gb2YgQUNDRUwzMi4KLQotCSogW21pc2MvY29tbWRsZy5jXQotCVJlcGxhY2UgdGhlIEdldFhYWEZpbGVuYW1lMzIgbWFjcm9zIGJ5IG5vcm1hbCBjb2RlLgotCUZpeCB0d28gcmVwb3J0ZWQgYnVncyBpbiBteSBjaGFuZ2VzIHRvIGNvbW1kbGcuCi0KLQkqIFt3aW5kb3dzL3dpbi5jXQotCUFkZCBhIGhvb2sgdG8gY2F0Y2ggYm9ndXMgV01fU0laRSBtZXNzYWdlcyBieSBlbWl0dGluZyBhIHdhcm5pbmcKLQlpbiB0aGUgYXBwcm9wcmlhdGUgY2FzZS4KLQotCSogW29iamVjdHMvYml0bWFwLmNdCi0JUmVqZWN0IHVucmVhc29uYmFibGUgbGFyZ2Ugc2l6ZSBhcmd1bWVudHMgaW4KLQlDcmVhdGVDb21wYXRpYmxlQml0bWFwMzIgYW5kIGFkZCBhbiBmaXhtZSBmb3IgdGhhdCBzaXR1YXRpb24uCi0KLVN1biBBcHIgMjYgMTg6MzA6MDcgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+Ci0KLQkqIFtpbmNsdWRlL2xkdC5oXSBbZGVidWdnZXIvKi5jXSBbbWlzY2VtdS9pbnN0ci5jXQotCUFkZGVkIElTX1NFTEVDVE9SX1NZU1RFTSBhbmQgSVNfU0VMRUNUT1JfMzJCSVQgbWFjcm9zLgotCU1ha2UgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIHN1cHBvcnQgc3lzdGVtIHNlbGVjdG9ycy4KLQotCSogW2xvYWRlci8qLmNdCi0JU3RhcnRlZCBtb3ZpbmcgTkUgc3BlY2lmaWMgZnVuY3Rpb25zIHRvIHRoZSBuZXcgbG9hZGVyL25lCi0JZGlyZWN0b3J5LgotCi0JKiBbbWVtb3J5L2Vudmlyb24uY10KLQlFbmZvcmNlIHRoZSAxMjcgY2hhcnMgbGltaXQgb25seSB3aGVuIGNyZWF0aW5nIHRoZSBlbnZpcm9ubWVudCBvZgotCWEgV2luMTYgcHJvY2Vzcy4KLQotU3VuIEFwciAyNiAxMjoyMjoyMyAxOTk4ICBBbmRyZWFzIE1vaHIgPDEwMC4zMDkzNkBnZXJtYW55Lm5ldD4KLQotCSogW2ZpbGVzL2ZpbGUuY10KLQlGaXhlZCBhbiBpbmNyZWRpYmxlIHR5cG8gaW4gQ29weUZpbGUzMkEgdGhhdCBtYWRlIGl0IHVudXNhYmxlCi0Jc2luY2UgYSByZXdyaXRlIGluIDk3MDExMiAoISEpLgotCi0JKiBbZmlsZXMvZGlyZWN0b3J5LmNdCi0JRml4ZWQgR2V0VGVtcFBhdGgzMkEvVyB0byBpbmNsdWRlIHRyYWlsaW5nIGJhY2tzbGFzaC4KLQotCSogW21pc2MvdmVyLmNdCi0JTWFrZSBmaW5kX3BlX3Jlc291cmNlICJ3b3JrIiB3aXRoIGNvcnJ1cHQgZmlsZXMuCi0KLQkqIFttaXNjL3dzcHJpbnRmLmNdCi0JQWx0ZXJlZCBXUFJJTlRGX1BhcnNlRm9ybWF0QS9XIHRvIHRyZWF0IGludmFsaWQgZm9ybWF0IGNoYXJzCi0JYXMgbm9ybWFsIG91dHB1dCwgdG9vLgotCi0JKiBbbXNkb3MvZHBtaS5jXQotCUltcGxlbWVudGVkICJBbGxvY2F0ZS9GcmVlIHJlYWwgbW9kZSBjYWxsYmFjayIgKDB4MDMwMy8weDAzMDQpLgotCUNyb3NzIHlvdXIgZmluZ2VycyBpZiB5b3UgbmVlZCB0byB1c2UgaXQgOykgKGNvbXBsZXRlbHkgdW50ZXN0ZWQpCi0JSW1wbGVtZW50ZWQgIkNhbGwgcmVhbCBtb2RlIHByb2Mgd2l0aCBmYXIgcmV0dXJuIiAoMHgwMzAxLCB0ZXN0ZWQpLgotCi0JKiBbbXNkb3MvaW50MjEuY10KLQlGaXhlZCBpb2N0bEdlbmVyaWNCbGtEZXZSZXEvMHg2MC4KLQotCSogW3JlbGF5MzIvZHBsYXl4LnNwZWNdIFtyZWxheTMyL2J1aWx0aW4zMi5jXSBbcmVsYXkzMi9NYWtlZmlsZS5pbl0KLQlBZGRlZCBidWlsdC1pbiBEUExBWVguRExMLiAKLQotCSogW3dpbmRvd3Mvd2luLmNdCi0JRml4ZWQgR2V0V2luZG93V29yZCgpL0dXV19IV05EUEFSRU5UIHRvIHJldHVybiB0aGUgd2luZG93J3Mgb3duZXIKLQlpZiBpdCBoYXMgbm8gcGFyZW50IChTREspLgotCi1TYXQgQXByIDI1IDE1OjA5OjUzIDE5OTggIE0uVC5Gb3J0ZXNjdWUgIDxtYXJrQG10ZmhwYy5kZW1vbi5jby51az4KLQotCSogW2RlYnVnZ2VyL2RiX2Rpc2FzbS5jXQotCUZpeGVkIGRpc2Fzc2VtYmxlIGJ1ZyBmb3Igbm8tZGlzcGxheSBvcHRpb24gYW5kICdsb2NrJywKLQkncmVwbmUnIGFuZCAncmVwZScgcHJlZml4ZXMuCi0KLQkqIFtkZWJ1Z2dlci9yZWdpc3RlcnMuY10KLQlBZGRlZCB0ZXh0dWFsIGZsYWcgZGVzY3JpcHRpb24gb3V0cHV0IG9uICdpbmZvIHJlZ3MnLgotCi1TYXQgQXByIDI1IDE0OjE4OjI2IDE5OTggIE1hdHRoZXcgQmVja2VyIDxtYmVja2VyQGdsYXNzY2l0eS5uZXQ+Ci0KLQkqIFsqLyouY10KLQlBZGRlZCBzdHVicyBhbmQvb3IgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6IAotCUxvb2t1cFByaXZpbGVnZVZhbHVlLCBPcGVuU2VydmljZSwgQ29udHJvbFNlcnZpY2UsIFJlZ0dldEtleVNlY3VyaXR5LCAKLQlTdGFydFNlcnZpY2UsIFNldENvbXB1dGVyTmFtZSwgRGVsZXRlU2VydmljZSwgQ2xvc2VTZXJ2aWNlSGFuZGxlLCAKLQlPcGVuUHJvY2Vzc1Rva2VuLCBPcGVuU0NNYW5hZ2VyLCBEZXJlZ2lzdGVyRXZlbnRTb3VyY2UsIAotCVdhaXRGb3JEZWJ1Z0V2ZW50LCBXYWl0Rm9ySW5wdXRJZGxlLCBSZWdpc3RlckV2ZW50U291cmNlLAotCVNldERlYnVnRXJyb3JMZXZlbCwgU2V0Q29uc29sZUN1cnNvclBvc2l0aW9uLCBDaG9vc2VQaXhlbEZvcm1hdCwKLQlTZXRQaXhlbEZvcm1hdCwgR2V0UGl4ZWxGb3JtYXQsIERlc2NyaWJlUGl4ZWxGb3JtYXQsIFN3YXBCdWZmZXJzLAotCVBvbHlCZXppZXIsIEFib3J0UGF0aCwgRGVzdHJveUFjY2VsZXJhdG9yVGFibGUsIEhlYXBXYWxrLAotCURkZUluaXRpYWxpemUsIERkZVVuaW5pdGlhbGl6ZSwgRGRlQ29ubmVjdExpc3QsIERkZURpc2Nvbm5lY3RMaXN0LAotCURkZUNyZWF0ZVN0cmluZ0hhbmRsZSwgRGRlUG9zdEFkdmlzZSwgRGRlR2V0RGF0YSwgRGRlTmFtZVNlcnZpY2UsCi0JRGRlR2V0TGFzdEVycm9yLCBXTmV0R2V0RGlyZWN0b3J5VHlwZSwgRW51bVByaW50ZXJzLCBSZWdGbHVzaEtleSwKLQlSZWdHZXRLZXlTZWN1cml0eSwgRGxsR2V0Q2xhc3NPYmplY3QsIERsbENhblVubG9hZE5vdywgQ3JlYXRlQml0bWFwLAotCUNyZWF0ZUNvbXBhdGlibGVCaXRtYXAsIENyZWF0ZUJpdG1hcEluZGlyZWN0LCBHZXRCaXRtYXBCaXRzLAotCVNldEJpdG1hcEJpdHMsIExvYWRJbWFnZSwgQ29weUltYWdlLCBMb2FkQml0bWFwLCBEcmF3SWNvbiwKLQlDcmVhdGVEaXNjYXJkYWJsZUJpdG1hcCwgU2V0RElCaXRzLCBHZXRDaGFyQUJDV2lkdGhzLCBMb2FkVHlwZUxpYiwKLQlTZXRDb25zb2xlQ3RybEhhbmRsZXIsIENyZWF0ZUNvbnNvbGVTY3JlZW5CdWZmZXIsIFJlYWRDb25zb2xlSW5wdXQsCi0JR2V0Q29uc29sZUN1cnNvckluZm8sIFNldENvbnNvbGVDdXJzb3JJbmZvLCBTZXRDb25zb2xlV2luZG93SW5mbywKLQlTZXRDb25zb2xlVGV4dEF0dHJpYnV0ZSwgU2V0Q29uc29sZVNjcmVlbkJ1ZmZlclNpemUsCi0JRmlsbENvbnNvbGVPdXRwdXRDaGFyYWN0ZXIsIEZpbGxDb25zb2xlT3V0cHV0QXR0cmlidXRlLAotCUNyZWF0ZU1haWxzbG90LCBHZXRNYWlsc2xvdEluZm8sIEdldENvbXByZXNzZWRGaWxlU2l6ZSwKLQlHZXRQcm9jZXNzV2luZG93U3RhdGlvbiwgR2V0VGhyZWFkRGVza3RvcCwgU2V0RGVidWdFcnJvckxldmVsLAotCVdhaXRGb3JEZWJ1Z0V2ZW50LCBTZXRDb21wdXRlck5hbWUsIENyZWF0ZU1ESVdpbmRvdy4KLQotVGh1IEFwciAyMyAyMzo1NDowNCAxOTk4ICBEb3VnbGFzIFJpZGd3YXkgIDxyaWRnd2F5QHdpbmVocS5jb20+Ci0KLQkqIFtpbmNsdWRlL3dpbmRvd3MuaF0gW29iamVjdHMvZW5obWV0YWZpbGUuY10gW3JlbGF5MzIvZ2RpMzIuc3BlY10KLQlJbXBsZW1lbnQgQ29weUVuaE1ldGFGaWxlLCBHZXQvU2V0RW5oTWV0YUZpbGVCaXRzLCBvdGhlciBmaXhlcy4KLQotCSogW2luY2x1ZGUvd2luZG93cy5oXSBbb2JqZWN0cy9tZXRhZmlsZS5jXSBbcmVsYXkzMi9nZGkzMi5zcGVjXQotCTMyLWJpdCBtZXRhZmlsZSBmaXhlcywgaW1wbGVtZW50IEVudW1NZXRhRmlsZTMyLCBHZXRNZXRhRmlsZUJpdHNFeC4KLQotCSogW29iamVjdHMvZm9udC5jXSBbZ3JhcGhpY3MveDExZHJ2L3hmb250LmNdIFtncmFwaGljcy94MTFkcnYvdGV4dC5jXQotCVNvbWUgcm90YXRlZCB0ZXh0IHN1cHBvcnQgZm9yIFgxMVI2IGRpc3BsYXlzLgotCi0JKiBbd2luMzIvbmV3Zm5zLmNdIFtvbGUvb2xlMm5scy5jXQotCU1vdmVkIEdldE51bWJlckZvcm1hdDMyQS4KLQotV2VkIEFwciAyMiAxNzozODoyMCAxOTk4ICBEYXZpZCBMZWUgTGFtYmVydCA8bGFtYmVyNDVAZWdyLm1zdS5lZHU+Ci0KLQkqIFtvbGUvb2xlMm5scy5jXSBbbWlzYy9uZXR3b3JrLmNdCi0JQ2hhbmdlZCBzb21lIGZ1bmN0aW9uIGRvY3VtZW50YXRpb24gdG8gdGhlIG5ldyBzdHlsZS4KLQotCSogW21pc2MvbmV0d29yay5jXSBbaW5jbHVkZS93aW5kb3dzLmhdIFtpZjE2MzIvdXNlci5zcGVjXQotCSAgW3JlbGF5MzIvbXByLnNwZWNdIFttaXNjL21wci5jXQotCUFkZGVkIHN0dWJzIGZvciBzb21lIFdpbjMyIG5ldHdvcmsgZnVuY3Rpb25zOyAgcmVuYW1lZCBzb21lIAotCTE2LWJpdCBvbmVzIHdpdGggMzItYml0IGNvdW50ZXJwYXJ0cywgIGFzIHdlbGwgYXMKLQlXTmV0R2V0RGlyZWN0b3J5VHlwZTsgIG1vdmVkIHRoZSBzdHVicyBpbiBtaXNjL21wci5jICh0aHJlZSBvZgotCXRoZW0hKSB0byBtaXNjL25ldHdvcmsuYy4KLQotCSogW29sZS9jb21wb2JqLmNdIFtvbGUvc3RvcmFnZS5jXSBbb2xlL29sZTJkaXNwLmNdIAotCSAgW29sZS9vbGUybmxzLmNdIFtvbGUvZm9sZGVycy5jXSBbb2xlL21vbmlrZXIuY10gW29sZS9vbGUyLmNdCi0JICBbZ3JhcGhpY3MvZm9udGVuZ2luZS5jXSBbZ3JhcGhpY3MvZGRyYXcuY10gW2dyYXBoaWNzL2Vudi5jXQotCSAgW2dyYXBoaWNzL2RyaXZlci5jXSBbZ3JhcGhpY3MvZXNjYXBlLmNdCi0JQ2hhbmdlZCBmcHJpbnRmJ3MgdG8gcHJvcGVyIGRlYnVnLW1hY3Jvcy4KLQotCSogW2luY2x1ZGUvd2lubmxzLmhdCi0JQWRkZWQgc29tZSBmbGFncyAoZm9yIGludGVybmFsIHVzZSkuCi0KLQkqIFtvbGUvb2xlMm5scy5jXSAKLQlBZGRlZCB0aGUgVW5pY29kZSBjb3JlIGZ1bmN0aW9uLCBhbmQgd29ya2VkIG91dCBhIHdheSB0byBoaWRlCi0JdGhlIGNvbW1vbmFsaXR5IG9mIHRoZSBjb3JlLgotCi0JKiBbcmVsYXkzMi9rZXJuZWwzMi5zcGVjXQotCUFkZGVkIHN1cHBvcnQgZm9yIEdldERhdGUvVGltZTMyQS9XLgotCi1XZWQgQXByIDIyIDA5OjE2OjAzIDE5OTggIEdvcmRvbiBDaGFmZmVlICA8Y2hhZmZlZUBjcy5iZXJrZWxleS5lZHU+Ci0KLQkqIFt3aW4zMi9jb2RlX3BhZ2UuY10KLQlGaXhlZCBwcm9ibGVtIHdpdGggTXVsdGlCeXRlVG9XaWRlQ2hhciB0aGF0IHdhcyBpbnRyb2R1Y2VkIGluCi0JbGFzdCByZWxlYXNlLiAgTWFkZSBNdWx0aUJ5dGVUb1dpZGVDaGFyIG1vcmUgY29tcGF0aWJsZSB3aXRoIFdpbjMyLgotCi0JKiBbZ3JhcGhpY3MveDExZHJ2L2dyYXBoaWNzLmNdCi0JRml4ZWQgcHJvYmxlbSB3aXRoIGRyYXdpbmcgYXJjcy4KLQotVHVlIEFwciAyMSAxMToyNDo1OCAxOTk4ICBDb25zdGFudGluZSBTYXB1bnR6YWtpcyAgPGNzYXB1bnR6QHRtYS0xLmxjcy5taXQuZWR1PgotCi0JKiAgW29sZS9vbGUybmxzLmNdCi0JTW92ZSBzdHVmZiBmcm9tIDB4NDA5IGNhc2UgdG8gTGFuZ19Fbi4gCi0KLQkqICBbcmVsYXkzMi91c2VyMzIuc3BlY10gW3dpbmRvd3Mvd2lucG9zLmNdCi0JQWRkZWQgc3R1YnMgZm9yIEdldFdpbmRvd1JnbjMyIGFuZCBTZXRXaW5kb3dSZ24zMi4gTWFrZXMgT2ZmaWNlCi0JUGFwZXJjbGlwIGhhcHB5LgotCi1UdWUgQXByIDIxIDExOjE2OjE2IDE5OTggIENvbnN0YW50aW5lIFNhcHVudHpha2lzICA8Y3NhcHVudHpAdG1hLTEubGNzLm1pdC5lZHU+Ci0KLQkqICBbbG9hZGVyL3BlX2ltYWdlLmNdCi0JSWYgaW1hZ2UgaXMgcmVsb2NhdGVkLCBUTFMgYWRkcmVzc2VzIG5lZWQgdG8gYmUgYWRqdXN0ZWQuCi0KLQkqIFtkZWJ1Z2dlci8qLmNdCi0JR2VuZXJhbGl6ZWQgdGVzdHMgZm9yIDMyLWJpdCBzZWdtZW50cy4KLQotVHVlIEFwciAyMSAwMjowNDo1OSAxOTk4ICBKYW1lcyBKdXJhbiAgPGpyajEyMEBwc3UuZWR1PgotCQotCSogW21pc2MvKi5jXSBbbWlzY2VtdS8qLmNdIFttc2Rvcy8qLmNdIFtpZjE2MzIvKi5jXSAKLQkgIFtpbmNsdWRlLyouaF0gW2xvYWRlci8qLmNdIFttZW1vcnkvKi5jXSBbbXVsdGltZWRpYS8qLmNdIAotCSAgW29iamVjdHMvKi5jXQotCUFsbW9zdCBhbGwgZnByaW50ZiBzdGF0ZW1lbnRzIGNvbnZlcnRlZCB0byBhcHByb3ByaWF0ZSAKLQlkZWJ1ZyBtZXNzYWdlcy4KLQotCSogW1JFQURNRV0KLQlVcGRhdGVkICJHRVRUSU5HIE1PUkUgSU5GT1JNQVRJT04iIHNlY3Rpb24gdG8gaW5jbHVkZSBXaW5lSFEuCi0KLQkqIFtkb2N1bWVudGF0aW9uL2RlYnVnZ2VyXQotCUZpeGVkIHR5cG8uCi0KLQkqIFt3aW5kb3dzL2RlZnduZC5jXQotCUFkZGVkIGZ1bmN0aW9uIGRvY3VtZW50YXRpb24uCi0KLVN1biBBcHIgMTkgMTY6MzA6NTggMTk5OCAgTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAbXVkLmRlPgotCi0JKiBbTWFrZS5ydWxlcy5pbl0KLQlBZGRlZCBsaW50IHRhcmdldCAodXNpbmcgbGNsaW50KS4KLQotCSogW3JlbGF5MzIvb2xlYXV0MzIuc3BlY11bcmVsYXkzMi9NYWtlZmlsZS5pbl1bb2xlL3R5cGVsaWIuY10KLQkgIFtvbGUvb2xlMmRpc3AuY10KLQlBZGRlZCBvbGVhdXQzMiBzcGVjLCBhZGRlZCBzb21lIFN5c1N0cmluZyBmdW5jdGlvbnMuCi0KLQkqIFtpZjE2MzIvc2lnbmFsLmNdCi0JQWRkZWQgcHJpbnRpbmcgb2YgZmF1bHRhZGRyZXNzIGluIExpbnV4ICh1c2luZyBDUjIgZGVidWcgcmVnaXN0ZXIpLgotCi0JKiBbY29uZmlndXJlLmluXQotCUFkZGVkIDxzeXMvdHlwZXMuaD4gZm9yIHN0YXRmcyBjaGVja3MuCi0KLQkqIFtsb2FkZXIvKi5jXVtkZWJ1Z2dlci9icmVhay5jXVtkZWJ1Z2dlci9oYXNoLmNdCi0JU3RhcnRlZCB0byBzcGxpdCB3aW4zMi93aW4xNiBtb2R1bGUgaGFuZGxpbmcsIHByZXBhcmluZyBzdXBwb3J0Ci0JZm9yIG90aGVyIGJpbmFyeSBmb3JtYXRzIChsaWtlIEVMRikuCi0KLVNhdCBBcHIgMTggMTA6MDc6NDEgMTk5OCAgUmVpbiBLbGF6ZXMgPHJrbGF6ZXNAY2FzZW1hLm5ldD4KLQotCSogW21pc2MvcmVnaXN0cnkuY10KLQlGaXhlZCBhIGJ1ZyB0aGF0IG1hZGUgUmVnUXVlcnlWYWx1ZXh4eCByZXR1cm5pbmcKLQlpbmNvcnJlY3QgcmVnaXN0cnkgdmFsdWVzLgotCi1GcmkgQXByIDE3IDIyOjU5OjIyIDE5OTggIEFsZXhhbmRlciBWLiBMdWt5YW5vdiA8bGF2QGxvbmcueWFyLnJ1PgotCi0JKiBbbWlzYy9sc3RyLmNdCi0JRm9ybWF0TWVzc2FnZTMyKjogcmVtb3ZlIGxpbmVmZWVkIHdoZW4gbm9saW5lZmVlZCBzZXQ7Ci0JY2hlY2sgZm9yIHRhcmdldCB1bmRlcmZsb3cuCi0KLUZyaSBBcHIgMTcgMDA6Mzg6MTQgMTk5OCAgQWxleGFuZGVyIFYuIEx1a3lhbm92IDxsYXZAbG9uZy55YXIucnU+Ci0KLQkqIFttaXNjL2NydGRsbC5jXQotCUltcGxlbWVudCB4bGF0X2ZpbGVfcHRyIGZvciBDUlQgc3RkaW4vc3Rkb3V0L3N0ZGVyciBhZGRyZXNzCi0JdHJhbnNsYXRpb24uCi0KLVdlZCBBcHIgMTUgMjA6NDM6NTYgMTk5OCAgSmltIFBldGVyc29uIDxqc3BldGVyQGJpcmNoLmVlLnZ0LmVkdT4KLQotCSogW2NvbnRyb2xzL21lbnUuY10KLQlBZGRlZCAnb2RhY3Rpb24nIHBhcmFtZXRlciB0byBNRU5VX0RyYXdNZW51SXRlbSgpIGFuZCByZWRpcmVjdGVkCi0JV01fRFJBV0lURU0gbWVzc2FnZXMgdG8gR2V0V2luZG93KGh3bmQsR1dfT1dORVIpLgotCi1UdWUgQXByIDE0IDE2OjE3OjU1IDE5OTggIEJlcmVuZCBSZWl0c21hIDxiZXJlbmRAdW5pdGVkLWluZm8uY29tPgotCi0JKiBbZ3JhcGhpY3MvbWV0YWZpbGVkcnYvaW5pdC5jXQlbZ3JhcGhpY3MvcGFpbnRpbmcuY10gCi0JICBbZ3JhcGhpY3Mvd2luMTZkcnYvaW5pdC5jXSBbZ3JhcGhpY3MveDExZHJ2L2dyYXBoaWNzLmNdCi0JICBbZ3JhcGhpY3MveDExZHJ2L2luaXQuY10gW2luY2x1ZGUvZ2RpLmhdIFtpbmNsdWRlL3gxMWRydi5oXQotCSAgW3JlbGF5MzIvZ2RpMzIuc3BlY10KLQlBZGRlZCBQb2x5UG9seWxpbmUgcm91dGluZS4KLQotCSogW3dpbmRvd3Mvd2lucHJvYy5jXQotCUNoYW5nZWQgV0lOUFJPQ19HZXRQcm9jKCkgdG8gcmV0dXJuIHByb2MgaW5zdGVhZCBvZiAmKGptcCBwcm9jKS4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotU3VuIEFwciAxMiAxMjoyMjoyMyAxOTk3ICBBbmRyZWFzIE1vaHIgPDEwMC4zMDkzNkBnZXJtYW55Lm5ldD4KLQotCSogW2ZpbGVzL2RyaXZlLmNdCi0JRml4ZWQgIm5vIGZyZWUgc3BhY2UiIHByb2JsZW0gd2l0aCBwYXJ0aXRpb24gc2l6ZXMgYmV0d2VlbiAxIGFuZCAyIEdCCi0JKGNsdXN0ZXJfc2VjdG9ycyBtYXkgbm90IGV4Y2VlZCAweDQwKS4KLQotCSogW3dpbmRvd3MvbXNnYm94LmNdIFtpZjE2MzIvdXNlci5zcGVjXSBbaW5jbHVkZS93aW5kb3dzLmhdCi0JSW1wbGVtZW50ZWQgTWVzc2FnZUJveEluZGlyZWN0MTYsIGNvcnJlY3RlZCBNU0dCT1hQQVJBTVMxNi4KLQotCSogW2xvYWRlci90YXNrLmNdCi0JRE9TIGVudmlyb25tZW50IHN0cmluZ3MgbWF5IG5ldmVyIGV4Y2VlZCAxMjcgY2hhcnMKLQktPiB0cnVuY2F0ZSBVbml4IGVudmlyb25tZW50IHN0cmluZ3MgaWYgbmVjZXNzYXJ5LgotCi1TdW4gQXByIDEyIDAyOjUxOjQ0IDE5OTggIERpbWl0cmllIE8uIFBhdW4gIDxkaW1pQG1haWwuY3MudG9yb250by5lZHU+Ci0KLQkqIFtmaWxlcy8qLmNdCi0JQWxsIGZwcmludGYgc3RhdGVtZW50cyB3ZXJlIGNvbnZlcnRlZCB0byBhcHByb3ByaWF0ZSBkZWJ1ZwotCW1lc3NhZ2VzLgotCi0JKiBbdG9vbHMvZmluZF9kZWJ1Z19jaGFubmVsc10KLQlVcGRhdGVkIGNvbW1lbnRzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUuCi0KLVNhdCBBcHIgMTEgMTU6Mjc6MjEgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+Ci0KLQkqIFtsb2FkZXIvbW9kdWxlLmNdIFtsb2FkZXIvdGFzay5jXSBbc2NoZWR1bGVyL3Byb2Nlc3MuY10KLQlNb3ZlZCBzb21lIGNvZGUgYXJvdW5kIHRvIHByZXBhcmUgdGhlIGdyb3VuZCBmb3IgQ3JlYXRlUHJvY2VzcygpLgotCi0JKiBbbWVtb3J5L2Vudmlyb24uY10gW2xvYWRlci90YXNrLmNdCi0JTW92ZWQgV2luMzIgZW52aXJvbm1lbnQgc3RyaW5ncyBmdW5jdGlvbnMgdG8gZW52aXJvbi5jLgotCVVuaWZpZWQgV2luMTYgYW5kIFdpbjMyIGVudmlyb25tZW50IG1hbmFnZW1lbnQuCi0KLQkqIFtzY2hlZHVsZXIvaGFuZGxlLmNdIFtzY2hlZHVsZXIvazMyb2JqLmNdIFtzY2hlZHVsZXIvKi5jXQotCUltcGxlbWVudGVkIGhhbmRsZSBpbmhlcml0YW5jZSBhbmQgRHVwbGljYXRlSGFuZGxlKCkuCi0KLQkqIFtzY2hlZHVsZXIvdGhyZWFkLmNdCi0JQ3JlYXRlIGEgMTYtYml0IHN0YWNrIGZvciBhbGwgdGhyZWFkcy4KLQotCSogW3dpbmRvd3MvZGlhbG9nLmNdCi0JSW1wbGVtZW50ZWQgRElBTE9HRVggcmVzb3VyY2UgZm9ybWF0LgotCi1GcmkgQXByIDEwIDIwOjIxOjUxIDE5OTggIE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQG11ZC5kZT4KLQotCSogW2NvbmZpZ3VyZS5pbl1baW5jbHVkZS9hY2NvbmZpZy5oXVsqLypdW211bHRpbWVkaWEvKl0KLQlDbGVhbmVkIHVwIHRoZSBPU1MgZGV0ZWN0aW9uIHN0dWZmLCBhZGRlZCBzb21lIG1vcmUgY2hlY2tzIGZvcgotCWhlYWRlcmZpbGVzL2Z1bmN0aW9ucy4KLQlSZW1vdmVkIGEgbG90IG9mIE9TIHNwZWNpZmljICNpZmRlZnMuCi0JTG90cyBvZiBkZXBlbmRlbmQgbXVsdGltZWRpYSBjbGVhbnVwcy4KLQotCSogW2xvYWRlci9wZV9pbWFnZS5jXQotCUVuaGFuY2VkIGNvbW1lbnQsIGFkZGVkIG1pc3NpbmcgcmVmZXJlbmNlIGNvdW50IGluY3JlYXNlLgotCi0JKiBbb2xlL2NvbXBvYmouY10KLQlSZXBsYWNlZCBicm9rZW4gU3RyaW5nRnJvbUdVSUQyIGJ5IHdvcmtpbmcgb25lLgotCi0JKiBbbWlzYy93aW5zb2NrLmNdCi0JU09fTElOR0VSIHVzZXMgdW5zaWduZWQgMTYgYml0IGluIFdpbjE2IGFuZCBXaW4zMiwgYnV0IHVuc2lnbmVkCi0JaW50ICgzMmJpdCkgZm9yIFVOSVguCi0KLQkqIFttZW1vcnkvZ2xvYmFsLmNdCi0JQWxsb3cgcmVhbGxvYyBmb3IgbG9ja2NvdW50IDEgdG9vLgotCi1GcmkgQXByIDEwIDE1OjI3OjM0IDE5OTggIE1vcnRlbiBXZWxpbmRlciAgPHRlcnJhQGRpa3UuZGs+Ci0KLQkqIFtncmFwaGljcy94MTFkcnYvdGV4dC5jXQotCUhhbmRsZSBjb250cm9sIGNoYXJhY3RlcnMgaW4gdHJhY2UuICBJZ25vcmUgdGVybWluYXRpbmcgbmV3bGluZS4KLQotCSogW211bHRpbWVkaWEvaW5pdC5jXQotCShNVUxUSU1FRElBX0luaXQpOiBDb3JyZWN0IGFsbG9jYXRpb25zLgotCi0JKiBbdG9vbHMvZXhhbWluZS1yZWxheV0KLSAJVGlkeSB1cC4KLQotCSogW3dpbmRvd3Mvc3lzY29sb3IuY10KLQlDaGFuZ2UgaGlnaGxpZ2h0IGNvbG91ciBmcm9tIGxpZ2h0Ymx1ZSB0byBsaWdodGdyYXkuICBUaGlzCi0JbG9va3MgY29ycmVjdCBmb3IgbWVudXMuCi0KLUZyaSBBcHIgMTAgMDE6NDk6NTggMTk5OCAgRG91Z2xhcyBSaWRnd2F5ICA8cmlkZ3dheUB3aW5laHEuY29tPgotCi0JKiBbY29uZmlndXJlLmluXSBbTWFrZS5ydWxlcy5pbl0KLQlBZGQgY2hlY2sgZm9yIGMybWFuIGJlZm9yZSB1c2luZyBpdC4KLQotRnJpIEFwciAxMCAwMjo1OToyMSAxOTk4ICBEb3VnbGFzIFJpZGd3YXkgIDxyaWRnd2F5QHdpbmVocS5jb20+Ci0KLQkqIFtERVZFTE9QRVJTLUhJTlRTXQotCVNpbXBsZSBkZXNjcmlwdGlvbiBvZiBhZGRpbmcgQVBJIGNhbGxzLgotCi0JKiBbaW5jbHVkZS93aW50eXBlcy5oXSBbaW5jbHVkZS93aW5kb3dzLmhdCi0JR2V0IHJpZCBvZiBXaW5lbGliMTYsIGF2b2lkIGRlY2xhcmluZyBzb21lIGlsbGVnYWwgZnVuY3Rpb25zIGluCi0JV2luZWxpYiwgYWRkIHByb3RvdHlwZXMgZm9yIHNvbWUgZW5oYW5jZWQgbWV0YWZpbGUgZnVuY3Rpb25zLCBmaXgKLQlHZXRUZXh0RXh0ZW50UG9pbnQzMiBkZWNsYXJhdGlvbnMuCi0KLQkqIFtyZWxheTMyL2dkaTMyLnNwZWNdIFtvYmplY3RzL2VuaG1ldGFmaWxlLmNdCi0JQ29zbWV0aWMgYW5kIGZ1bmN0aW9uYWwgaW1wcm92ZW1lbnRzLgotCi0JKiBbaW5jbHVkZS93aW5jb24uaF0gW3Byb2dyYW1zL3ZpZXcvKl0KLQlGaXhlcywgaW1wcm92ZWQgY29tcGF0aWJpbGl0eSB3aXRoIG5hdGl2ZSBjb21waWxlcnMuCi0KLVRodSBBcHIgIDkgMTU6NDg6NDkgMTk5OCAgVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+Ci0KLQkqIFt3aW4zMi9rZXJuZWwzMi5jXQotCUltcGxlbWVudGVkIEZUX1RodW5rIC8gRlRfUHJvbG9nIC8gRlRfRXhpdCAvIEZUX1Byb2xvZ1ByaW1lLgotCUZpeGVkIENvbW1vbjMyVGhrTFMgdGh1bmsgZnVuY3Rpb24uCi0KLQkqIFt0b29scy9idWlsZC5jXSBbcmVsYXkzMi9yZWxheTM4Ni5jXSBbaWYxNjMyL3JlbGF5LmNdCi0JQ2hhbmdlZCByZWxheSBjb2RlIHRvIGFsbG93IHJlZ2lzdGVyIGZ1bmN0aW9ucyB0byBtb2RpZnkgc3RhY2sgbGF5b3V0LgotCi0JKiBbbWVtb3J5L3NlbGVjdG9yLmNdCi0JSW1wbGVtZW50ZWQgQWxsb2NNYXBwZWRCdWZmZXIgLyBGcmVlTWFwcGVkQnVmZmVyLgotCi0JKiBbcmVsYXkzMi9rZXJuZWwzMi5zcGVjXSBbaWYxNjMyL2tlcm5lbC5zcGVjXSBbd2luMzIvb3JkaW5hbHMuY10KLQlBZGRlZCBuYW1lcyBmb3IgdW5kb2N1bWVudGVkIGZ1bmN0aW9ucy4KLQotCSogW2xvYWRlci9tb2R1bGUuY10KLQlCdWdmaXg6IExvYWRMaWJyYXJ5MTYgc2hvdWxkICpub3QqIHNpbGVudGx5IGxvYWQgMzItYml0IERMTC4KLQotVGh1IEFwciAgOSAwMzo1NDo1OCAxOTk4ICBKaW0gUGV0ZXJzb24gPGpzcGV0ZXJAYmlyY2guZWUudnQuZWR1PgotCi0JKiBbd2luZG93cy9rZXlib2FyZC5jXQotCUZpeCBhbiBlcnJvbmVvdXMgdGVzdCBpbiBUcmFuc2xhdGVBY2NlbGVyYXRvcnsxNiwzMn0gZm9yIHRoZSBlbmQKLQlvZiB0aGUgYWNjZWxlcmF0b3IgdGFibGUuCi0KLVRodSBBcHIgIDggMjA6MzY6MjggMTk5OCAgVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPiAKLQotCSogW21pc2MvY3J0ZGxsLmNdCi0JSW1wbGVtZW50IGdldGVudi4KLQotCSogW21pc2MvY29tbWRsZy5jXQotCU1ha2UgR2V0W1NhdmUvT3Blbl1GaWxlTmFtZSB3b3JrIGluIG1vc3Qgc2l0dWF0aW9ucy4KLQotCSogW21pc2MvbHN0ci5jXQotCVVzZSB3dnNwcmludGYzMkEgaW5zdGVhZCBvZiB2c3ByaW50ZiBpbiBGb3JtYXRNZXNzYWdlMzJYCi0KLQkqIFttaXNjL3ZlcnNpb25dCi0JTWFrZSBOVDMuNTAgYSByZWNvZ25pc2VkIHZlcnNpb24KLQotCSogW2dyYXBoaWNzL3gxMWRydi9ncmFwaGljcy5jXQotCUNoYW5nZSB0aGUgYWxnb3JpdGhtZSB0byBkcmF3IGFyY3MKLQotCSogW2xvYWRlci9yZXNvdXJjZS5jXQotCVJldHVybiBhbiBlbXB0eSBidWZmZXIgaW4gTG9hZFN0cmluZzMyQSBpZiBubyByZXNvdXJjZSBmb3VuZC4KLQotCSogW3dpbjMyL2NvZGVfcGFnZS5jXQotCVRyeSBoYXJkZXIgdG8gZ2V0IHRoZSByaWdodCBzaXplIGluIE11bHRpQnl0ZVRvV2lkZUNoYXIuCi0KLQkqIFt3aW4zMi9wcm9jZXNzLmNdCi0JQ2FsbCBXaW5FeGVjMzIgZm9yIENyZWF0ZVByb2Nlc3MzMkEuCi0KLQkqIFt3aW5kb3dzL3VzZXIuY10KLQlJbnN0YWxsIGRlZmF1bHQgSW50MCBIYW5kbGVyIGluIEluaXRBcHAoKS4KLQotVGh1IEFwciAgOCAxOToyOTo0OCAxOTk4ICBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgotCi0JKiBbbWlzYy9pbWFnZWxpc3QuY10KLQlQcmVsaW1pbmFyeSBmaXggZm9yIGRyYXdpbmcgc2VsZWN0ZWQgaW1hZ2VzLgotCVZhcmlvdXMgaW1wcm92ZW1lbnRzLgotCi0JKiBbY29udHJvbHMvcHJvZ3Jlc3MuY11baW5jbHVkZS9wcm9ncmVzcy5jXVtpbmNsdWRlL2NvbW1jdHJsLmhdCi0JQWRkZWQgcHJvZ3Jlc3MgYmFyIG1lc3NhZ2VzIGFuZCBzdHlsZXMgZm9yIElFNC4wMSAoZGxsIHZlcnNpb24gNC43MikKLQljb21wYXRpYmlsaXR5LgotCUZpeGVkIGxlZCBzaXplIHByb2JsZW0uCi0KLQkqIFtjb250cm9scy91cGRvd24uY11baW5jbHVkZS9jb21tY3RybC5oXQotCUFkZGVkIFVETV9HRVRSQU5HRTMyIGFuZCBVRE1fU0VUUkFOR0UzMi4KLQotCSogW29iamVjdHMvb2VtYml0bWFwcy5jXVtpbmNsdWRlL3dpbmRvd3MuaF1baW5jbHVkZS9iaXRtYXBzLypdCi0JQWRkZWQgV2luOTUgaWNvbnMgYW5kIGZpeGVkIFdpbjk1IGN1cnNvciBhbmQgcmVzdG9yZSBidXR0b24gYnVnLgotCU5vdyB0aGV5IHNob3VsZCBiZSB2aXNpYmxlLiBTb3JyeSEhIQotCi0JKiBbcmVsYXkzMi9jb21jdGwzMi5zcGVjXQotCUFkZGVkIG1vc3QgbWlzc2luZyBmdW5jdGlvbiBuYW1lcy4KLQotVHVlIEFwciAgNiAxODo0ODozNiAxOTk4ICBNYXR0aGV3IEJlY2tlciA8bWJlY2tlckBnbGFzc2NpdHkubmV0PgotCi0JKiBbb2JqZWN0cy9mb250LmNdIFtpZjE2MzIvZ2RpLnNwZWNdCi0JR2V0T3V0bGluZVRleHRNZXRyaWNzOiBzdHViCi0KLQkqIFtvYmplY3RzL3RleHQuY10KLQlHZXRUZXh0Q2hhcnNldCBzaG91bGQganVzdCBjYWxsIEdldFRleHRDaGFyc2V0SW5mby4KLQotCSogW21pc2MvbXByLmNdIFtyZWxheTMyL21wci5zcGVjXQotCVdOZXRDYWNoZVBhc3N3b3JkOiBzdHViCi0KLQkqIFtzY2hlZHVsZXIvdGhyZWFkLmNdIFtyZWxheTMyL3VzZXIzMi5zcGVjXQotCUF0dGFjaFRocmVhZElucHV0OiBzdHViCi0JVXBkYXRlZCBkb2N1bWVudGF0aW9uLgotCi0JKiBbb2JqZWN0cy9wYWxldHRlLmNdCi0JVXBkYXRlZCBkb2N1bWVudGF0aW9uLgotCi1UdWUgTWFyIDMxIDE3OjA2OjMwIDE5OTggIEphbWVzIEp1cmFuIDxqcmoxMjBAcHN1LmVkdT4KLQotCSogWyovKi5jXQotCUZpbmlzaGVkIGZpeGluZyBVU0VSMzIgb3JkaW5hbCBudW1iZXJzIGluIGZ1bmN0aW9uIGRvY3VtZW50YXRpb24uCi0KLU1vbiBNYXIgMzAgMjA6Mjc6MzggMTk5OCAgTW9ydGVuIFdlbGluZGVyICA8dGVycmFAZGlrdS5kaz4KLQotCSogW21pc2MvZGVidWdzdHIuY10gW2luY2x1ZGUvZGVidWdzdHIuaF0KLQlNb3ZlZCBfZHVtcHN0ciBmcm9tIHJlbGF5MzIvcmVsYXkzODYuYy4gIEltcHJvdmVkIGNvbnRyb2wKLQljaGFyYWN0ZXIgaGFuZGxpbmcuCi0KLQkqIFttc2Rvcy9pbnQyMS5jXQotCUltcGxlbWVudCAyMTVFMDAgLS0gZ2V0IG1hY2hpbmUgbmFtZS4KLQotCSogW3dpbmRvd3Mvd2lucG9zLmNdCi0JU2V0V2luZG93UG9zMzI6IE1ha2UgYW4gZXh0cmEgc3luYyB3aGVuIG1hcHBpbmcgbWFuYWdlZAotCXdpbmRvd3MuICBUaGlzIG1ha2VzIHN1cmUgdGhlIHJlY29uZmlndXJlIGV2ZW50IGhhcyBiZWVuCi0JaGFuZGxlZC4gIFNlZSBNc2hlYXJ0cycgd2hhdCdzLXlvdXItbmFtZSB3aW5kb3cuCi0KLU1vbiBNYXIgMzAgMDE6MTM6NTAgMTk5OCAgQWxleGFuZGVyIFYuIEx1a3lhbm92IDxsYXZAbG9uZy55YXIucnU+Ci0KLQkqIFtNYWtlZmlsZS5pbl0KLQlJbnN0YWxsIGluY2x1ZGVzIGZyb20gVE9QU1JDRElSLgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1TdW4gTWFyIDI5IDE1OjE4OjU3IDE5OTggIFV3ZSBCb25uZXMgPGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgotCi0JKiBbbXNkb3MvaW50MjEuY10KLQlNb3JlIHZlcmJvc2UgVHJhY2UgbWVzc2FnZXMKLQotU3VuIE1hciAyOSAxNTowMzozMCAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KLQotCSogW2xvYWRlci9uZV9pbWFnZS5jXQotCVRlcm1pbmF0ZSByZWxvY2F0aW9uIGNoYWlucyBvbiAwIG9mZnNldC4KLQotU3VuIE1hciAyOSAwMjozNTo0NSAxOTk4ICBKYW1lcyBKdXJhbiAgPGpyajEyMEBwc3UuZWR1PgotCi0JKiBbd2luZG93cy9jYXJldC5jXSBbd2luZG93cy9jbGFzcy5jXSBbd2luZG93cy9jbGlwYm9hcmQuY10KLQlGaXhlZCBtb3JlIFVTRVIzMiBvcmRpbmFsIG51bWJlcnMgaW4gZnVuY3Rpb24gZG9jdW1lbnRhdGlvbi4KLQotU2F0IE1hciAyOCAyMjo0MDoyMyAxOTk3ICBBbmRyZWFzIE1vaHIgPDEwMC4zMDkzNkBnZXJtYW55Lm5ldD4KLQotCSogW2NvbnRyb2xzL2Rlc2t0b3AuY10KLQlSZXR1cm4gMSBmb3IgV01fTkNDUkVBVEUgaW4gRGVza3RvcFduZFByb2MuCi0KLQkqIFtjb250cm9scy9tZW51LmNdCi0JRml4ZWQgY3Jhc2ggd2hlbiBkZXN0cm95aW5nIGEgdG9wIHBvcHVwIHdpbiB0aGF0IHdhcyBvbmx5IGNyZWF0ZWQKLQlidXQgbm90IHNob3duLgotCi0JKiBbb2xlL3R5cGVsaWIuY10gW2lmMTYzMi90eXBlbGliLnNwZWNdCi0JSW1wbGVtZW50ZWQgT0FCdWlsZFZlcnNpb24uCi0KLQkqIFt3aW5kb3dzL3dpbi5jXQotCUZpbmFsbHkgZml4ZWQgdWdseSBidWcgaW4gR2V0UGFyZW50MzIgdGhhdCBhZmZlY3RlZCB3aW5kb3cgcGxhY2VtZW50OgotCURpZG4ndCByZXR1cm4gMCBmb3Igd2luZG93cyB0aGF0IGhhdmUgbmVpdGhlciBXU19QT1BVUCBub3IKLQlXU19DSElMRCBzZXQuIE5vdyBpdCBhY3RzIGV4YWN0bHkgbGlrZSBXaW5kb3dzIChhdCBsZWFzdCBJIGhvcGUgc28gOykKLQotU2F0IE1hciAyOCAwMjoyNjo0MyAxOTk4ICBEaW1pdHJpZSBPLiBQYXVuICA8ZGltaUBtYWlsLmNzLnRvcm9udG8uZWR1PgotCi0JKiBbREVWRUxPUEVSUy1ISU5UU10gW2RvY3VtZW50YXRpb24vZGVidWctbXNnc10KLQlVcGRhdGVkIGRvY3VtZW50YXRpb24gb24gZGVidWcgbWVzc2FnZXMKLQotCSogW2luY2x1ZGUvYnV0dG9uLmhdIFtjb250cm9scy9idXR0b24uY10gW2luY2x1ZGUvd2luZG93cy5oXQotCVtpbmNsdWRlL2NvbWJvLmhdIFtjb250cm9scy9jb21iby5jXSBbY29udHJvbHMvY29tbWN0cmwuY10KLQlbY29udHJvbHMvaWNvbnRpdGxlLmNdIFtjb250cm9scy9saXN0Ym94LmNdCVtjb250cm9scy9tZW51LmNdCi0JW2NvbnRyb2xzL3Njcm9sbC5jXSBbY29udHJvbHMvd2lkZ2V0cy5jXSAKLQlDaGFuZ2VkIHNvbWUgMTYtYml0IGNvZGUgdG8gMzItYml0IGNvZGUuIEkgYW0gcG9zaXRpdmUgdGhpcyB3aWxsCi0Jbm90IGJyZWFrIGFueXRoaW5nLgotCi0JKiBbY29udHJvbHMvdWl0b29scy5jXSAKLQlSZW5hbWVkIHRoZSBwcmVmaXggb2Ygc29tZSBmdW5jdGlvbnMgZnJvbSBVSVRPT0xTXyB0byBVSVRPT0xTOTVfCi0JdG8gcmVmbGVjdCB0aGUgZmFjdCB0aGF0IHRoZXkgaW1wbGVtZW50IFdpbjk1IGxvb2suIE1heWJlIHdlIHdpbGwKLQloYXZlIGEgVUlUT09MUzMxXyBpbiB0aGUgZnV0dXJlLiBBbnlob3csIHRoZSBjaGFuZ2UgaXMgY29tcGxldGVseQotCWludGVybmFsIHRvIHRoaXMgZmlsZS4KLQotCSogWyovKi5jXQotCUNoYW5nZWQgYSBsb3Qgb2YgW2ZdcHJpbnRmIGludG8gYXBwcm9wcmlhdGUgZGVidWcgbWVzc2FnZXMuCi0KLUZyaSBNYXIgMjcgMTk6NTY6MTIgMTk5OCAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+Ci0JKiBbZG9jdW1lbnRhdGlvbi9zdGF0dXMvXQotCUFkZGVkIGRpcmVjdGRyYXcgYW5kIGRpcmVjdHNvdW5kIHN0YXR1cy4KLQotCSogW2lmMTYzMi90aHVuay5jXVtvbGUvKi5jXVt3aW4zMi9rZXJuZWwzMi5jXQotCUFkZGVkIHNvbWUgZG9jdW1lbnRhdGlvbi4KLQlNb3ZlZCBGVU5DMDA0IHRvIHRodW5rLmMgc2luY2UgaXQgc2VlbXMgdG8gYmUgYSAxNi0+MzIgdGh1bmsKLQkoY2FsbGluZyBjb252ZW50aW9ucyBhbmQgdGhlIGxpa2Ugc3RpbGwgdW5rbm93bikuCi0KLUZyaSBNYXIgMjcgMDk6NTk6MzIgMTk5OCAgTW9ydGVuIEVyaWtzZW4gIDxtb3J0ZW5lQHB2di5vcmc+Ci0KLQkqIFtsb2FkZXIvcmVzb3VyY2UuY11bd2luZG93cy9rZXlib2FyZC5jXQotCUltcGxlbWVudGVkIENvcHlBY2NlbGVyYXRvclRhYmxlKCkgYW5kIENyZWF0ZUFjY2VsZXJhdG9yVGFibGUoKS4KLQkKLQkqIFtpbmNsdWRlL2NvbXBvYmouaF1bb2xlL2NvbXBvYmouY11bcmVsYXkzMi9vbGUzMi5zcGVjXQotCUFkZGVkIGltcGxlbWVudGF0aW9uIG9mIFN0cmluZ0Zyb21HVUlEMigpLiAKLQotVHVlIE1hciAyNiAyMzoxMjowNSAxOTk4ICBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgotCi0JKiBbbWlzYy9pbWFnZWxpc3QuY11bcmVsYXkzMi9jb21jdGwzMi5zcGVjXQotCUltcGxlbWVudGVkIG5ldyBkZWJ1Z2dpbmcgaW50ZXJmYWNlLgotCUFkZGVkIG1pc3NpbmcgZnVuY3Rpb25zIChzb21lIGFyZSBlbXB0eSBzdHVicykuCi0JQ2hhbmdlZCBvcmRpbmFscyBpbiBjb21jdGwzMi5zcGVjIChub3cgZGxsIHZlcnNpb24gNC43MiBjb21hdGlibGUpLgotCi0JKiBbb2JqZWN0cy9vZW1iaXRtYXBzLmNdW2luY2x1ZGUvd2luZG93cy5oXQotCSAgW2luY2x1ZGUvYml0bWFwcy8qXQotCUFkZGVkIG1pc3NpbmcgcmVzdG9yZSBiaXRtYXBzIGZvciBXaW45NSBsb29rLgotCUFkZGVkIG1pc3NpbmcgV2luOTUgY3Vyc29ycy4KLQotVGh1IE1hciAyNiAxMDoxODoyMCAxOTk4ICBEb3VnbGFzIFJpZGd3YXkgIDxyaWRnd2F5QHdpbmVocS5jb20+Ci0KLQkqIFtwcm9ncmFtcy92aWV3L01ha2VmaWxlLmluXSBbcHJvZ3JhbXMvdmlldy92aWV3LmNdCi0JRml4IGNvbXBpbGF0aW9uLCBBbGR1cyBwbGFjZWFibGUgbWV0YWZpbGUgbG9hZGluZy4KLQotCSogW2dyYXBoaWNzL21ldGFmaWxlZHJ2L2luaXQuY10gW3JlbGF5MzIvZ2RpMzIuc3BlY10gCi0JICBbb2JqZWN0cy9tZXRhZmlsZS5jXQotCUltcGxlbWVudGVkIHZhcmlvdXMgMzIgYml0IHZlcnNpb25zIG9mIHJlZ3VsYXIgbWV0YWZpbGUgQVBJLgotCi0JKiBbb2JqZWN0cy9lbmhtZXRhZmlsZS5jXQotCUltcGxlbWVudGVkIHJlbmRlcmluZyBvZiBhIGNvdXBsZSBvZiBkb3plbiByZWNvcmRzLgotCi1UdWUgTWFyIDI0IDIwOjA2OjM5IDE5OTggIE1hdHRoZXcgQmVja2VyIDxtYmVja2VyQGdsYXNzY2l0eS5uZXQ+Ci0KLQkqIFttZW1vcnkvKi5jXQotCVVwZGF0ZWQgZG9jdW1lbnRhdGlvbiBmb3IgQVBJIG1hbnBhZ2VzLgotCi1Nb24gTWFyIDIzIDA5OjA5OjAwIDE5OTggIEFsZXggS29yb2JrYSA8YWxleEBwaGFybS5zdW55c2IuZWR1PgotCi0JKiBbbWlzYy93aW5zb2NrLmNdCi0JRml4ZWQgMzItYml0IEROUyBsb29rdXAuCi0KLU1vbiBNYXIgMjMgMjM6NTQ6NDcgMTk5OCAgTHVpeiBPdGF2aW8gTC4gWm9yemVsbGEgIDx6b3J6ZWxsYUBuci5jb25leHdhcmUuY29tPgotCi0JKiBbbXVsdGltZWRpYS9pbml0LmNdCi0JTmV3IGNvZGUgZm9yIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgZ2F0aGVyaW5nIG9mIGluZm9ybWF0aW9uIGFib3V0Ci0JdGhlIE1JREkgZGV2aWNlcywgZm9yIGZ1dHVyZSB1c2UuCi0KLVRodSBNYXIgMTkgMDA6NTk6MjkgMTk5OCAgSmltIFBldGVyc29uIDxqc3BldGVyQG5vc3BhbS5iaXJjaC5lZS52dC5lZHU+Ci0KLQkqIFt3aW5kb3dzL3dpbi5jXQotCUVsaW1pbmF0ZWQgaW5hY2N1cmF0ZSBzZXR0aW5nIG9mIGNzLT5oTWVudSBpbgotCVdJTl9DcmVhdGVXaW5kb3dFeCwgYWxvbmcgd2l0aCBzdXBlcmZsdW91cyBTZXRNZW51MzIgY2FsbC4KLQotTW9uIE1hciAxNiAxNzo0MDo1MyAxOTk4ICBQZXR0ZXIgUmVpbmhvbGR0c2VuIDxwZXJlQHRkLm9yZy51aXQubm8+Ci0KLQkqIFtkZWJ1Z2dlci9kYmcueV0gW2RlYnVnZ2VyL01ha2VmaWxlLmluXSBbTWFrZWZpbGUuaW5dCi0JSW5zdGFsbCB3aW5lLnN5bSBpbiAkKGV4ZWNfcHJlZml4KS9saWIgYW5kIG1ha2Ugc3VyZSB0aGUgZGVidWdnZXIKLQlmaW5kcyBpdC4KLQotU3VuIE1hciAxNSAyMjozNjozNSAxOTk4ICBNaWNoYWVsIFZla3NsZXIgPG12ZWtzbGVyQHR4LnRlY2huaW9uLmFjLmlsPgotCi0JKiBbZHVtbXkuY10gW2lmMTYzMi9nZGkuc3BlY10KLQlGaXhlZCBzdHViIGRlY2xhcmF0aW9uIG9mIEdESV81MzIsIHNvIEhlYnJldy1Xb3JkMiBraW5kIG9mIHdvcmtzLgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1TdW4gTWFyIDE1IDAzOjQ2OjUwIDE5OTggIERpbWl0cmllIE8uIFBhdW4gIDxkaW1pQG1haWwuY3MudG9yb250by5lZHU+Ci0KLQkqIFsqLypdCi0JRml4ZWQgc29tZSBkcHJpbnRmXyBzdWNoIHRoYXQgdGhlcmUgaXMgb25lIGFuZCBvbmx5IG9uZQotCW5ldyBsaW5lIGZvciBlYWNoIGRwcmludGYgYW5kIHRoYXQgbmV3IGxpbmUgb2NjdXJzIGF0IHRoZSBlbmQuCi0JVHJhbnNmb3JtZWQgc29tZSBmcHJpbnRmcyBpbnRvIHByb3BlciBkZWJ1ZyBzdGF0ZW1lbnRzLgotCVJlbW92ZWQgbXVjaCByZWR1bmRhbmN5IGZyb20gbW9zdCBvZiB0aGUgZGVidWcgc3RhdGVtZW50cy4gVGhlCi0JcmVkdW5kYW5jeSBhcHBlYXJlZCBiZWNhdXNlIG5vdyB0aGUgY29tcG9uZW50IGFuZCBmdW5jdGlvbgotCW5hbWUgaXMgb3V0cHV0IGF1dG9tYXRpY2FsbHkuIE1vc3QgZGVidWcgc3RhdGVtZW50cyBhbHNvIHVzZWQgdG8KLQlvdXRwdXQgdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uLgotCUFsbCB0aGVzZSBjaGFuZ2VzIHByZXBhcmVkIHRoZSBzb3VyY2UgdG8gc3dpdGNoIGNvbXBsZXRlbHkgdG8KLQl0aGUgbmV3IGRlYnVnZ2luZyBpbnRlcmZhY2UuCi0JRm9yIG1vcmUgaW5mbywgcmVmZXIgdG8gLi9kb2N1bWVudGF0aW9uL2RlYnVnLW1zZwotCi1TYXQgTWFyIDE0IDE5OjQ1OjIzIDE5OTcgIEFuZHJlYXMgTW9ociA8MTAwLjMwOTM2QGdlcm1hbnkubmV0PgotCi0JKiBbbWlzYy9zaGVsbC5jXSBbaWYxNjMyL2tlcm5lbC5zcGVjXQotCUNoYW5nZWQgcGFyYW1ldGVycyBvZiBGVU5DMDA0KCkgdG8gZml4IGEgY3Jhc2guCi0JTm90IHN1cmUgaWYgdGhpcyBmaXggaXMgY29ycmVjdCAoZG9jIHdhbnRlZCkuCi0KLQkqIFt3aW5kb3dzL3VzZXIuY10gW2lmMTYzMi91c2VyLnNwZWNdIFtpbmNsdWRlL3VzZXIuaF0KLQlJbXBsZW1lbnRlZCBVc2VyU2VlVXNlckRvLgotCi0JKiBbbXNkb3MvaW50MjEuY10gW2luY2x1ZGUvbXNkb3MuaF0KLQlBZGRlZCAiR0VUIExJU1QgT0YgTElTVFMiIChJTlQgMjEvNTJoKS4KLQotU2F0IE1hciAxNCAxNTo0ODowMiAxOTk4ICBEb3VnbGFzIFJpZGd3YXkgPHJpZGd3YXlAZ21jbC5jb20+Ci0KLQkqIFtpbmNsdWRlL3dpbmRvd3MuaF0gW3JlbGF5MzIvZ2RpMzIuc3BlY10gW29iamVjdHMvZW5obWV0YWZpbGUuY10KLQlCZWdpbm5pbmdzIG9mIGVuaGFuY2VkIG1ldGFmaWxlIHN1cHBvcnQuCi0KLUZyaSBNYXIgMTMgMjA6NTM6MDkgMTk5OCAgSm9obiBSaWNoYXJkc29uIDxqcmljaGFyZEB6a28uZGVjLmNvbT4KLQotCSogW3dpbjMyL2NvbnNvbGUuY10KLQlSZXN0YXJ0IGludGVycnVwdGVkIGNvbnNvbGUgd3JpdGVzLgotCi1GcmkgTWFyIDEzIDE4OjU5OjI0IDE5OTggIE1hdHRoZXcgQmVja2VyIDxtYmVja2VyQGdsYXNzY2l0eS5uZXQ+Ci0KLQkqIFsqLyouY10KLQlVcGRhdGVkIGRvY3VtZW50YXRpb24gZm9yIEFQSSBtYW5wYWdlcy4KLQotCSogW3dpbmRvd3MvZGNlLmNdCi0JUmVsZWFzZURDMTY6IEZpeGVkIGNhc3QuCi0KLQkqIFtpbmNsdWRlL3dpbmRvd3MuaF0gW21lbW9yeS92aXJ0dWFsLmNdCi0JVmlydHVhbFF1ZXJ5e0V4fSBzaG91bGQgcmV0dXJuIERXT1JEIGluc3RlYWQgb2YgQk9PTDMyLgotCi1GcmkgTWFyIDEzIDEzOjAzOjA2IDE5OTggIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgotCi0JKiBbUkVBRE1FXVtkb2N1bWVudGF0aW9uL3N0YXR1cy9dCi0JUkVBRE1FIHVwZGF0ZWQsIGFkZGVkIGx6ZXhwYW5kLHZlcnNpb24gYW5kIG11bHRpbWVkaWEKLQlzdGF0dXMgbm90ZXMgdG8gbmV3IGRvY3VtZW50YXRpb24vc3RhdHVzIGRpcmVjdG9yeS4KLQotCSogW29sZS8qLmNdW2lmMTYzMi90eXBlbGliLnNwZWNdCi0JQWRkZWQgdHlwZWxpYiBzdHVicywgc2V2ZXJhbCBzbWFsbCBhZGRpdGlvbnMgYW5kIGZpeGVzLgotCi0JKiBbbG9hZGVyL3BlX2ltYWdlLmNdCi0JRml4ZWQgYSBzbWFsbCBidWcgKGZpeHVwX2ltcG9ydHMgZ290IHBhc3NlZCB0aGUgd3JvbmcgaE1vZHVsZSBpbiBhCi0JcmVtYXBjYXNlKS4KLQotCSogW2xvYWRlci9zaWduYWwuY11baWYxNjMyL3NpZ25hbC5jXVttaXNjL3dpbnNvY2tfZG5zLmNdCi0JICBbbG9hZGVyL21vZHVsZS5jXQotCUZpeGVkIHNvbWUgcmVjdXJzaXZlIGRlYnVnZ2VyIGNyYXNoZXMgKGNhdXNlZCBieSBpbnZhbGlkIEZTKS4KLQotCSogW21pc2MvcmVnaXN0cnkuY10KLQlUd28gYnVncyBmaXhlZC4KLQotRnJpIE1hciAxMyAwNDo1NTowMSAxOTk4ICBEYXZpZCBMZWUgTGFtYmVydCA8bGFtYmVyNDVAZWdyLm1zdS5lZHU+Ci0KLQkqIFtpbmNsdWRlL3dpbm50LmhdIFtpbmNsdWRlL3dpbm5scy5oXQotCU1vdmVkIExBTkdfeHh4IGZsYWdzIHRvIHdpbm5scy5oCi0KLQkqIFtpbmNsdWRlL3dpbm5scy5oXQotCUFkZGVkIGZsYWdzIGZvciBHZXREYXRlRm9ybWF0KCk7IGZpeGVkIHZhbGlkaXR5IG9mCi0JTE9DQUxFX1NZU1RFTV9ERUZBVUxULgotCi0JKiBbaW5jbHVkZS93aW5kb3dzLmhdIAotCUFkZGVkIEdldFRpbWVGb3JtYXQoKSBwcm90b3R5cGVzLgotCi0JKiBbb2xlL29sZTJubHMuY10KLQlJbXBsZW1lbnRlZCBBU0NJSSBkYXRlLSBhbmQgdGltZS1mdW5jdGlvbnMsICB1c2luZyBhbgotCW9wdGltaXplZCBjb21tb24gY29yZTsgIGFkZGVkIHN0dWJzIGZvciBVbmljb2RlIHZlcnNpb25zOyAgCi0Jc3RhcnRlZCB3b3JrIG9uIGEgVW5pY29kZSBjb3JlLgotCi0JKiBbQVVUSE9SU10KLQlBZGRlZCBteSBuYW1lLgotCi1Nb24gTWFyICA5IDIwOjEwOjE1IDE5OTggIEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+Ci0KLQkqIFtyZWxheTMyL2NvbWN0bDMyLnNwZWNdIFtpbmNsdWRlL2ltYWdlbGlzdC5oXQotCSAgW2luY2x1ZGUvY29tbWN0cmwuaF0gW21pc2MvaW1hZ2VsaXN0LmNdIFttaXNjL01ha2VmaWxlLmluXQotCUZpcnN0IGF0dGVtcHQgYXQgaW1wbGVtZW50aW5nIEltYWdlTGlzdHMuCi0KLVN1biBNYXIgIDggMjA6MTk6NDkgMTk5OCAgVXdlIEJvbm5lcyAgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KLQotCSogW2ZpbGVzL2Rvc19mcy5jXSBbY29uZmlndXJlLmluXQotCVRyeSB0byBnZXQgRmlsZVRpbWVUb0xvY2FsRmlsZVRpbWUsRmlsZVRpbWVUb1N5c3RlbVRpbWUgYW5kCi0JU3lzdGVtVGltZVRvRmlsZVRpbWUgcmlnaHQuCi0JVXNlIHRpbWVnbSgpIHdoZXJlIGF2YWlsYWJsZS4KLQotCSogW21pc2MvbHN0ci5jXQotCUZpeCBhbiBvZmYgYnkgb25lIGVycm9yIGluIEZvcm1hdE1lc3NhZ2UgYW5kIGhhbmRsZSB0aGUgY2FzZSAKLQl3aGVuIGFyZ3MgPSBOVUxMICh1c2VkIGJ5IHByb2dyYW1zIHRvIGdldCB0aGUgbGVuZ3RoIG9mIHRoZSAKLQlzdHJpbmcpLgotCi0JKiBbd2luMzIvY29uc29sZS5jXQotCUFjdHVhbCBkaXNwbGF5IGEgcGVyLXByb2Nlc3MgVGl0bGUgc3RyaW5nLCBiZXR0ZXIgd29ya2luZwotCWF0dGVtcHQgZm9yIFdyaXRlQ29uc29sZTMyVyBhbmQgUmVhZENvbnNvbGUzMlcuCi0KLUZyaSBNYXIgIDYgMjA6MzM6NDUgMTk5OCAgU2xhdmVuIFJlemljICA8ZXNlcnRlQGNzLnR1LWJlcmxpbi5kZT4KLQotCSogW2luY2x1ZGUvY29uZmlnLmguaW5dW2NvbmZpZ3VyZS5pbl1bbXVsdGltZWRpYS9hdWRpby5jXQotCSAgW211bHRpbWVkaWEvZHNvdW5kLmNdCi0JQWRkZWQgY2hlY2sgZm9yIEZyZWVCU0Qgc291bmQgc3lzdGVtLgotCi1TdW4gTWFyICAxIDE3OjQwOjEwIDE5OTggIEphc29uIFNjaG9uYmVyZyA8c2Nob25AbXRpLnNnaS5jb20+Ci0KLQkqIFtjb250cm9scy9lZGl0LmNdIFtpbmNsdWRlL29sZS5oXSBbaW5jbHVkZS9zaGxvYmouaF0KLQlSZW1vdmVkIGZpbmFsIGNvbW1hcyBpbiBlbnVtIHR5cGVzLgotCi1Nb24gRmViIDIzIDA3OjUyOjE4IDE5OTggIEx1aXogT3RhdmlvIEwuIFpvcnplbGxhICA8em9yemVsbGFAbnIuY29uZXh3YXJlLmNvbT4KLQotCSogW211bHRpbWVkaWEvdGltZS5jXQotCVdvcmthcm91bmQgdG8gYXZvaWQgaW5maW5pdGUgcmVjdXJzaW9uIGluc2lkZSB0aW1lR2V0VGltZS4KLQotCSogW211bHRpbWVkaWEvYXVkaW8uY10KLQlXT0RNX0dFVE5VTURFVlMgYW5kIFdJRE1fR0VUTlVNREVWUyBvbmx5IHJldHVybiAxIG5vdyBpZiB0aGUKLQlTT1VORF9ERVYgY2FuIGJlIG9wZW5lZCwgb3IgaWYgaXQncyBidXN5LgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1TdW4gTWFyICAxIDEwOjQ1OjIzIDE5OTggIEFuZHJlYXMgTW9ociA8MTAwLjMwOTM2QGdlcm1hbnkubmV0PgotCi0JKiBbbG9hZGVyL25lX2ltYWdlLmNdCi0JRml4ZWQgcHJvYmxlbSB3aXRoIHdlaXJkIERMTHMgKE5FX0ZGTEFHU19TSU5HTEVEQVRBICYmIERHUk9VUCA9IDApLgotCi0JKiBbbXNkb3MvZG9zbWVtLmNdCi0JRXhwb3J0IGFkZHJlc3MgZm9yIF9fMDAwMEgsIHRvby4KLQotCSogW21zZG9zL2RwbWkuY10KLQlDaGFuZ2VkIE1lbUFsbG9jIGZ1bmN0aW9ucyB0byByZXR1cm4gbGVzcyBmcmFnbWVudGVkIGFkZHJlc3Nlcy4KLQotU2F0IEZlYiAyOCAxODo1MDoxMiAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KLQotCSogW3NjaGVkdWxlci9wcm9jZXNzLmNdIFtzY2hlZHVsZXIvc3lzZGVwcy5jXQotCURvbid0IHVzZSAlZnMgcmVnaXN0ZXIgYmVmb3JlIHRocmVhZGluZyBpbml0aWFsaXphdGlvbi4KLQotU2F0IEZlYiAyOCAxNDowNDo1NiAxOTk4ICBLcmlzdGlhbiBOaWVsc2VuICA8a3Jpc3RpYW4ubmllbHNlbkByaXNvZS5kaz4KLQotCSogW2NvbmZpZ3VyZS5pbl0gW2luY2x1ZGUvYWNjb25maWcuaF0KLQlBdXRvY29uZiBtYWNybyB0byBjaGVjayBmb3Igbm9uLXJlZW50cmFudCBYIGxpYnJhcmllcy4KLQotCSogW3dpbmRvd3Mvd2lucG9zLmNdCi0JSW4gU2V0V2luZG93UG9zMzIoKSwgZG8gbm90IGNhdXNlIFdNX1NJWkUgbWVzc2FnZXMgd2hlbiB0aGUKLQlTV1BfTk9TSVpFIGZsYWcgaXMgc3BlY2lmaWVkLiBUaGlzIGZpeGVzIHRoZSBkaXZpc2lvbi1ieS16ZXJvIGluCi0JQm9ybGFuZCBDKysgNC4wICJPcGVuIFByb2plY3QiIG1lbnUgaXRlbS4KLQotU2F0IEZlYiAyOCAxMzoxMToyNiAxOTk4ICBKYW1lcyBNb29keSAgPDAxMzI2M21AZHJhZ29uLmFjYWRpYXUuY2E+Ci0KLQkqIFtvbGUvb2xlMm5scy5jXQotCUNoYW5nZWQgIkVuZ2xpc2giIHZhbHVlcyBmcm9tIEdlcm1hbiB0byBFbmdsaXNoLgotCi0JKiBbZmlsZXMvZG9zX2ZzLmNdCi0JRml4ZWQgb2ZmLWJ5LW9uZSBtb250aCBidWcuCi0KLUZyaSBGZWIgMjcgMjI6MTI6MDEgMTk5OCAgRG91Z2xhcyBSaWRnd2F5ICA8cmlkZ3dheUB3aW5laHEuY29tPgotCi0JKiBbd2luZG93cy93aW4uY10KLQlGaXggd2luZWxpYiBjbGFzcyBtZW51IGxvYWRpbmcgYnVnLgotCi0JKiBbaW5jbHVkZS9tb2R1bGUuaF0gW2xvYWRlci9tb2R1bGUuY10KLQlMb2FkTW9kdWxlMzIgc2hvdWxkIGJlIGltcGxlbWVudGVkIGluIHRlcm1zIG9mIENyZWF0ZVByb2Nlc3MuCi0KLQkqIFtwcm9ncmFtcy92aWV3LypdCi0JTWV0YWZpbGUgdmlld2VyIHNhbXBsZSBwcm9ncmFtLgotCi0JKiBbZG9jdW1lbnRhdGlvbi93aW5lLnRleGluZm9dIFtkb2N1bWVudGF0aW9uL01ha2VmaWxlLmluXQotCUltcHJvdmVtZW50cyBhbmQgYWRkaXRpb25zLCBIVE1MIHRhcmdldC4KLQotRnJpIEZlYiAyNyAwNDoyNzo0OCAxOTk4ICBEaW1pdHJpZSBPLiBQYXVuIDxkaW1pQGNzLnRvcm9udG8uZWR1PgotCi0JKiBbKi8qXQotCVN3aXRjaGVkIHRvIHRoZSBuZXcgZGVidWcgbWVzc2FnZXMgaW50ZXJmYWNlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbgotCXBsZWFzZSByZWZlciB0byBkb2N1bWVudGF0aW9uL2RlYnVnLW1zZ3MuIEJlY2F1c2UgdGhlIG5ldyBzY2hlbWUKLQlpbnRyb2R1Y2VzIGEgbmV3IHNlbWFudGljIGxldmVsLCBJIGhhZCB0byBtYW51YWxseSBkbyB0aHJvdWdoCi0JYWJvdXQgNTMwIGRwcmludGZfeHh4ISAgVGhlIHJlc3Qgb2YgYWJvdXQgMjQwMCB3aGVyZSB0cmFuc2Zvcm1lZAotCXZpYSBhIHNjcmlwdC4gIEJlY2F1c2Ugb2YgdGhlIGxhcmdlIG51bWJlciBvZiBjaGFuZ2VzIHRoYXQgSSBoYWQKLQl0byBkbywgc29tZSBtYXkgaGF2ZSBub3QgY29tZSBvdXQgYXMgbmljZWx5IGFzIEkgd2FudGVkIHRoZW0uICBJZgotCXRoaXMgaXMgdGhlIGNhc2UsIHBsZWFzZSBsZXQgbWUga25vdy4gVGhlcmUgaXMgYSBsb3Qgb2Ygd29yayBsZWZ0Ci0JdG8gZG86IC0tIGEgZmV3IGh1bmRyZWQgcHJpbnRmJ3MgdG8gYmUgY29udmVydGVkIC0tIGFib3V0IDIzMDAKLQlmcHJpbnRmJ3MgdG8gYmUgY29udmVydGVkIC0tIGFib3V0IDYwMCBGSVhNRSdzIHRvIGJlIHRyYW5zZm9ybWVkCi0JVGhlIHByb2JsZW0gaXMgdGhhdCBpbiB0aGUgYWJvdmUgbWVudGlvbmVkIGNhc2VzLCBhIGxvdCBvZiBtYW51YWwKLQlpbnRlcnZlbnRpb24gaXMgcmVxdWlyZWQgYmVjYXVzZSBhIGxvdCBvZiB0aGUgaW5mb3JtYXRpb24gaXMKLQltaXNzaW5nLiAgVGhlcmUgYXJlIGFsc28gYSBsb3Qgb2Ygb3RoZXIgdGhpbmdzIHRvIGJlIGRvbmUgdG8gdGhlCi0JaW50ZXJmYWNlIGFuZCBzbyBmb3J0aC4gSSBoYXZlIG5vdyBpZGVhcyBmb3IgYSBhdCBsZWFzdCBhIG1vbnRoCi0Jd29ydGggb2YgZnVsbCB0aW1lIHdvcmsgOikgSSB3aWxsIHByb2NlZWQgd2l0aCBtYW55IGNoYW5nZXMgaW4gdGhlCi0JbmV4dCBmZXcgcmVsZWFzZXMsIHNvIHBsZWFzZSBkbyBub3Qgc3RhcnQgbW9kaWZpbmcgdGhpbmdzIGJlY2F1c2UKLQl0aGVyZSB3aWxsIGJlIGEgaGVsbCBvZiBhIGxvdCBvZiBjb25mbGljdHMuIElmIHlvdSBoYXZlIGlkZWFzIHRoYXQKLQl5b3Ugd2FudCB0byBpbnRlZ3JhdGUgb3IgeW91IHdhbnQgdG8gd29yayBvbiBkaWZmZXJlbnQgdGhpbmdzLAotCXBsZWFzZSBjb29yZGluYXRlIHdpdGggbWUuCi0KLVRodSBGZWIgMjYgMTM6MDQ6MjkgMTk5OCAgRGF2aWQgTGVlIExhbWJlcnQgPGxhbWJlcjQ1QGVnci5tc3UuZWR1PgotCi0JKiBbb2xlL29sZTJubHMuY10gW2luY2x1ZGUvd2luZG93cy5oXQotCUZpcnN0IHRyeSBhdCBPTEUgZGF0ZS0gYW5kIHRpbWUtZm9ybWF0dGluZyBmdW5jdGlvbnMuCi0KLVdlZCBGZWIgMjUgMTE6MjA6MzUgMTk5OCBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KLQotCSogW2ZpbGVzLyouY10KLQlDaGFuZ2VkIGRvcyBkZXZpY2UgaGFuZGxpbmcsIGFkZGVkICdDT04nIGRldmljZWhhbmRsaW5nLgotCi0JKiBbZ3JhcGhpY3MvZGRyYXcuY10KLQlCdWcgZml4ZXMsIHNvbWUgYWRkaXRpb25zLgotCi0JKiBbaWYxNjMyL2J1aWx0aW4uY11bbG9hZGVyL21vZHVsZS5jXVtsaWJyYXJ5L3dpbmVzdHViLmNdCi0JU21hbGwgaGFjayBzbyB3ZSBkb24ndCBuZWVkIGEgZHVtbXkgQlVJTFRJTl9Mb2FkTW9kdWxlCi0JaW4gd2luZXN0dWIuYy4KLQotCSogW29sZS8qXVtyZWxheTMyL29sZTMyLnNwZWNdW2lmMTYzMi9zdG9yYWdlLnNwZWNdCi0Jc3RvcmFnZS5kbGwgc3RhcnRlZC4gd2lud29yZCBsb2FkcyBkb2N1bWVudHMgKHNhdmluZwotCWRvZXNuJ3Qgd29yayB5ZXQsIGR1bm5vIHdoeSkuCi0JU2V2ZXJhbCBvbGUgYWRkaXRpb25zLCBzb21lIGNsZWFudXBzIGFuZCBidWdmaXhlcy4KLQlJTWFsbG9jMTYgaW1wbGVtZW50ZWQuCi0KLQkqIFtsb2FkZXIvcGVfaW1hZ2UuY10KLQlBZGRlZCBzb21lIGNvbW1lbnRzLCBmaXhlZCBjaXJjdWxhciBkbGwgcmVmZXJlbmNlcywKLQlmaXhlZCBtb2RyZWYgb3JkZXJpbmcsIGZpeGVkIHRscyBhbGxvY2F0aW9uLgotCi0JKiBbbWVtb3J5L2dsb2JhbC5jXQotCUFkZGVkIHZhbGlkaXR5IGNoZWNrcyBiZWZvcmUgZXZlcnkgR0VUX0FSRU5BX1BUUi4KLQkoc2V2ZXJhbCBmdW5jdGlvbnMgcmVseSBvbiBHbG9iYWwqIHJldHVybiB2YWx1ZXMKLQkgb24gaW52YWxpZCBoYW5kbGVzLCBsaWtlIElzVGFzaykuCi0JSW1wbGVtZW50ZWQgR2xvYmFsVW5sb2NrRnJlZTE2LgotCi0JKiBbbWVtb3J5L3ZpcnR1YWwuY10KLQlSZXBsYWNlZCBkcHJpbnRmX3ZpcnR1YWwgYnkgZnByaW50Ziwgc28gd2UgY2FuCi0JZG8gJ2luZm8gbWFwJyBhZ2FpbiBpbiB0aGUgZGVidWdnZXIuIEluY3JlYXNlIHJlYWQKLQlsaW5lc2l6ZSBmb3IgTGludXgyLjEgY2FzZXMuCi0KLQkqIFttaXNjL2NwdS5jXVttaXNjL3JlZ2lzdHJ5LmNdCi0JTW92ZWQgY3B1IHJlZ2lzdHJ5IGluaXRpYWxpemF0aW9uIHRvIG1pc2MvY3B1LmMuCi0KLQkqIFttdWx0aW1lZGlhL2Rzb3VuZC5jXQotCUVuaGFuY2VkLCByZXBsYWNlZCBHRVRPU1BBQ0UgYnVmZmVyaW5nY2hlY2sgYnkgU0VURlJBR01FTlQuCi0KLQkqIFtyZWxheTMyL2NydGRsbC5zcGVjXVtyZWxheTMyL250ZGxsLnNwZWNdCi0JUmVwbGFjZWQgc29tZSBwdHIgYnkgcmVzcGVjdGl2ZSAnc3RyJyBhbmQgJ3dzdHInIGFyZ3VtZW50cwotCWZvciBsaWJjIGZ1bmN0aW9ucy4KLQotCSogW3NjaGVkdWxlci90aHJlYWQuY10KLQlBZGRlZCBzb21lIHNhbml0eSBjaGVja3MgdG8gc3RhY2thbGxvY2F0aW9uLCB0bHNoYW5kbGluZyBmaXhlZC4KLQotCSogW3Rvb2xzL2J1aWxkLmNdCi0JRml4ZWQgY2RlY2wgYXJndW1lbnR0eXBlIG9yZGVyICh3YXMgcmV2ZXJzZWQpLgotCi0JKiBbd2luMzIvb3JkaW5hbHMuY10KLQlJbXBsZW1lbnRlZCBLRVJORUxfNDQ5LgotCi0JKiBbd2luZG93cy9kaW5wdXQuY10KLQlTb21lIGZpeGVzLCBuZWVkcyBtdWNoIG1vcmUgd29yay4gVG9tYiBSYWlkZXIyIHdvcmtzIHdpdGgga2V5Ym9hcmQgOykKLQotVHVlIEZlYiAyNCAyMDo0NjozNyAxOTk4ICBKYW1lcyBKdXJhbiAgIDxqcmoxMjBAcHN1LmVkdT4KLQotCSogW3dpbmRvd3Mvd2luLmNdCi0JRml4ZWQgVVNFUjMyIG9yZGluYWwgbnVtYmVycyBpbiBkb2N1bWVudGF0aW9uLgotCi1TYXQgRmViIDIxIDEyOjMwOjM4IDE5OTggIEpvaG4gUmljaGFyZHNvbiA8anJpY2hhcmRAemtvLmRlYy5jb20+Ci0KLQkqIFtmaWxlcy9maWxlLmNdIFtpbmNsdWRlL2szMm9iai5oXSBbbWVtb3J5L3ZpcnR1YWwuY10KLQlbc2NoZWR1bGVyL2NyaXRzZWN0aW9uLmNdIFtzY2hlZHVsZXIvZXZlbnQuY10gW3NjaGVkdWxlci9oYW5kbGUuY10KLQlbc2NoZWR1bGVyL2szMm9iai5jXSBbc2NoZWR1bGVyL211dGV4LmNdIFtzY2hlZHVsZXIvcHJvY2Vzcy5jXQotCVtzY2hlZHVsZXIvc2VtYXBob3JlLmNdIFtzY2hlZHVsZXIvdGhyZWFkLmNdCi0JQWRkZWQgZ2VuZXJpYyBrMzJvYmogcmVhZCBhbmQgd3JpdGUgcm91dGluZXMgZm9yIGszMm9ianMgdGhhdAotCXN1cHBvcnQgSS9PLgotCi0JKiBbZG9jdW1lbnRhdGlvbi9jb25zb2xlXQotCVVwZGF0ZWQgY29uc29sZSBkb2NzLgotCi0JKiBbd2luMzIvY29uc29sZS5jXQotCU1ha2UgY29uc29sZSB3b3JrIGxpa2UgYSBrMzJvYmogdGhhdCBzdXBwb3J0cyBJL08uCi0KLQkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KLQlNYWtlIFdyaXRlRmlsZSBhbmQgUmVhZEZpbGUgdGFrZSBIQU5ETEUzMiBmb3IgaGFuZGxlLgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1TdW4gRmViIDE1IDE0OjA3OjA3IDE5OTggIERpbWl0cmllIE8uIFBhdW4gIDxkaW1pQG1haWwuY3MudG9yb250by5lZHU+Ci0KLQkqIFtjb250cm9scy9tZW51LmNdIFttaXNjL3Zlci5jXSBbbXVsdGltZWRpYS9kc291bmQuY10KLQkgIFttdWx0aW1lZGlhL2pveXN0aWNrLmNdIFt3aW5kb3dzL2RpYWxvZy5jXQotCU1vZGlmaWVkIHNvbWUgZHByaW50Zl94eHgncyB0byBwcmVwYXJlIHRoZW0gZm9yIGEgbmV3Ci0JZHByaW50Zl8gc2NoZW1lLiBCYXNpY2FsbHksIEkgY2hhbmdlZCB0aGUgZHByaW50ZidzIHRoYXQKLQlvdXRwdXRlZCBhIGxpbmUgd2l0aCBtYW55IGRwcmludGYgY2FsbHMgdG8gZG8ganVzdCBvbmUKLQlkcHJpbnRmIGNhbGwuCi0KLVN1biBGZWIgMTUgMTI6MDI6NTkgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+Ci0KLQkqIFtncmFwaGljcy94MTFkcnYvKi5jXSBbb2JqZWN0cy8qLmNdCi0JQSBmZXcgWDExIGNyaXRpY2FsIHNlY3Rpb24gb3B0aW1pemF0aW9ucywgbW9zdGx5IHdpdGggWEdldC9QdXRQaXhlbC4KLQotCSogW3NjaGVkdWxlci9zeXNkZXBzLmNdIFttaXNjL21haW4uY10KLQlNYWtlIHN1cmUgWDExIGNyaXRpY2FsIHNlY3Rpb24gaXMgYXZhaWxhYmxlIGJlZm9yZSBhbnkgWGxpYiBjYWxsLgotCi0JKiBbaWYxNjMyL3JlbGF5LmNdIFt0b29scy9idWlsZC5jXQotCVlldCBhbm90aGVyIGF0dGVtcHQgYXQgZml4aW5nIENhdGNoL1Rocm93LgotCi0JKiBbbG9hZGVyL3BlX2ltYWdlLmNdCi0JRml4ZWQgYnJva2VuIFBFIERMTCBsb2FkaW5nLgotCi0JKiBbaW5jbHVkZS93aW5udC5oXSBbc2NoZWR1bGVyL2hhbmRsZS5jXSBbc2NoZWR1bGVyLyouY10KLQlJbXBsZW1lbnRlZCBoYW5kbGUgYWNjZXNzIHJpZ2h0cy4KLQlBZGRlZCBHZXQvU2V0SGFuZGxlSW5mb3JtYXRpb24uCi0KLVN1biBGZWIgMTUgMDk6NDU6MjMgMTk5NyAgQW5kcmVhcyBNb2hyIDwxMDAuMzA5MzZAZ2VybWFueS5uZXQ+Ci0KLQkqIFttaXNjL3dpbnNvY2suY10KLQlGaXhlZCBidWcgaW4gV1NBQ2xlYW51cCB3aGljaCBsZWFkIHRvIGNyYXNoZXMgaW4gV0lOU09DS19IYW5kbGVJTy4KLQotCSogW2dyYXBoaWNzL2ZvbnRlbmdpbmUuY10gW2luY2x1ZGUvZm9udC5oXQotCU1pbm9yIGltcHJvdmVtZW50cy4KLQotCSogW21lbW9yeS9nbG9iYWwuY10KLQlJbXBsZW1lbnRlZCBHbG9iYWxFbnRyeUhhbmRsZS4KLQotCSogW21pc2MvdG9vbGhlbHAuY10KLQlGaXhlZCBhIG1lbW9yeSBidWcgaW4gTm90aWZ5KnJlZ2lzdGVyLgotCi0JKiBbbWlzYy93MzJzY29tYi5jXQotCUltcHJvdmVkIEdldDE2RExMQWRkcmVzcy4KLQotCSogW29iamVjdHMvZ2Rpb2JqLmNdCi0JSW1wbGVtZW50ZWQgR2RpU2VlR2RpRG8uCi0KLQotU2F0IEZlYiAxNCAxNDo1NzozOSAxOTk4ICBKb2huIFJpY2hhcmRzb24gPGpyaWNoYXJkQHprby5kZWMuY29tPgotCi0JKiBbd2luMzIvY29uc29sZS5jXQotCUFkZGVkIHRoZSBjb25zb2xlIGltcGxlbWVudGF0aW9uLCBBbGxvY0NvbnNvbGUsIEZyZWVDb25zb2xlLAotCUNPTlNPTEVfSW5oZXJpdENvbnNvbGUuCi0KLQkqIFtkb2N1bWVudGF0aW9uL2NvbnNvbGVdCi0JU29tZSBkb2N1bWVudGF0aW9uIG9uIHRoZSBjb25zb2xlLgotCi0JKiBbaW5jbHVkZS93aW5lcnJvci5oXQotCUFkZGVkIHNvbWUgZXJyb3IgZGVmaW5lcy4KLQotCSogW3NjaGVkdWxlci9rMzJvYmouY10KLQlSZWdpc3RlcmVkIHRoZSBzY2hlZHVsZXIgb3BzLgotCi1GcmkgRmViIDEzIDE5OjM1OjM1IDE5OTggIEphbWVzIE1vb2R5ICA8MDEzMjYzbUBkcmFnb24uYWNhZGlhdS5jYT4KLQotCSogW29sZS9vbGUybmxzLmNdCi0JU29tZSBFbmdsaXNoIGxhbmd1YWdlIGZpeGVzIGZvciBtaXNzaW5nIHZhbHVlcy4KLQotCSogW2NvbnRyb2xzL2xpc3Rib3guY10KLQlGaXggdG8gYWxsb3cgYW4gZW1wdHkgbGlzdGJveCB0byBkZXNlbGVjdCBhbGwgaXRlbXMuCi0KLQkqIFtyZWxheTMyL3VzZXIzMi5zcGVjXSBbd2luZG93cy9rZXlib2FyZC5jXQotCUNyZWF0ZUFjY2VsZXJhdG9yVGFibGVBIHN0dWIgbWV0aG9kLgotCi0JKiBbd2luZG93cy9zeXNtZXRyaWNzLmNdCi0JQWRkZWQgbWlzc2luZyBTTV9DWENVUlNPUiAmIFNNX0NZQ1VSU09SIGluaXRpYWxpemVycy4KLQotCSogW3dpbmRvd3MvbWVzc2FnZS5jXQotCVBvc3RUaHJlYWRNZXNzYWdlMzJBIHN0dWIgbWV0aG9kLgotCi1GcmkgRmViIDEzIDE3OjEyOjI0IDE5OTggIEppbSBQZXRlcnNvbiA8anNwZXRlckByb2Fub2tlLmluZmkubmV0PgotCi0JKiBbbGlidGVzdC9oZWxsbzNyZXMucmNdIFtsaWJ0ZXN0L2hlbGxvMy5jXSBbbGlidGVzdC9NYWtlZmlsZS5pbl0KLQlVcGRhdGVkIHRoZSAnaGVsbG8zJyB0ZXN0IHNvIHRoYXQgaXQgZnVuY3Rpb25zIHByb3Blcmx5IGFnYWluLgotCi1GcmkgRmViIDEzIDE0OjA4OjA3IDE5OTggIE1hcnRpbiBCb2VobWUgIDxib2VobWVAaW5mb3JtYXRpay5tdS1sdWViZWNrLmRlPgotCQotCSogW2dyYXBoaWNzL21hcHBpbmcuY10KLQlGaXhlZCB0aGUgZW1iYXJyYXNzaW5nIGJ1Z3MgSSBpbnRyb2R1Y2VkIGludG8gRFB0b0xQIGFuZAotCUxQdG9EUC4KLQotCSogW3dpbmRvd3Mvc2Nyb2xsLmNdCi0JUHJldmVudCBTY3JvbGxXaW5kb3czMiBmcm9tIHNlbmRpbmcgV01fRVJBU0VCS0dORC4KLQotVGh1IEZlYiAxMiAyMjo0Njo1MyAxOTk4ICBIdXcgRCBNIERhdmllcyA8aC5kYXZpZXMxQHBoeXNpY3Mub3hmb3JkLmFjLnVrPgotCi0JKiBbb2JqZWN0cy9tZXRhZmlsZV0gW2luY2x1ZGUvbGR0LmhdCi0JRml4IHRvIGNvcGUgd2l0aCByZWNvcmRzIGxvbmdlciB0aGFuIDY0Sy4KLQotCSogW3dpbmRvd3MvY2xpcGJvYXJkLmNdCi0JQ2xlYW4gdXAgYml0bWFwcyBhbmQgbWV0YXBpY3RzIHByb3Blcmx5LgotCi1Nb24gRmViICAzIDIxOjUyOjE4IDE5OTggIEthcmwgQmFja3N0cvZtIDxrYXJsX2JAZ2VvY2l0aWVzLmNvbT4KLQotCSogW3Byb2dyYW1zL3dpbmhlbHAvU3cucmNdIFtyZXNvdXJjZXMvc3lzcmVzX1N3LnJjXQotCU1pbm9yIHVwZGF0ZSBvZiBTd2VkaXNoIGxhbmd1YWdlIHN1cHBvcnQuCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVN1biBGZWIgIDEgMTM6MjQ6NTQgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+Ci0KLQkqIFtmaWxlcy9kcml2ZS5jXQotCUFkZGVkIERldmljZT0gcGFyYW1ldGVyIHRvIGRyaXZlIGNvbmZpZ3VyYXRpb24uCi0KLQkqIFtpZjE2MzIvcmVsYXkuY10KLQlUaHJvdygpIGFuZCBDYXRjaCgpIG5vdyB1c2UgdGhlIGNvcnJlY3QgQ0FUQ0hCVUYgbGF5b3V0ICh1bnRlc3RlZCkuCi0KLQkqIFt0b29scy9idWlsZC5jXSBbaW5jbHVkZS9zdGFja2ZyYW1lLmhdIFtsb2FkZXIvdGFzay5jXQotCU1vdmVkIDE2LWJpdCBzdGFjayBwb2ludGVyIGludG8gdGhyZWFkIGRhdGFiYXNlLgotCVNhdmUgY3VycmVudCAlZnMgd2hpbGUgcnVubmluZyAxNi1iaXQgY29kZS4KLQotRnJpIEphbiAzMCAwOToyNTo0OSAxOTk4ICBNYXJ0aW4gQm9laG1lICA8Ym9laG1lQGluZm9ybWF0aWsubXUtbHVlYmVjay5kZT4KLQotCSogW2dyYXBoaWNzL21hcHBpbmcuY10KLQlNYWRlIERQdG9MUDMyIGFuZCBMUHRvRFAzMiByZXNwZWN0IHdvcmxkIHRyYW5zZm9ybXMuCi0KLQkqIFtncmFwaGljcy9wYXRoLmNdIFtncmFwaGljcy9wYWludGluZy5jXSBbaWYxNjMyL2dkaS5zcGVjXQotCSAgW2luY2x1ZGUvcGF0aC5oXQotCU1vcmUgcGF0aCBzdXBwb3J0LgotCi0JKiBbaW5jbHVkZS9nZGkuaF0gW2luY2x1ZGUvd2luZG93cy5oXSBbb2JqZWN0cy9kYy5jXQotCSAgW3JlbGF5L2dkaTMyLnNwZWNdCi0JU3VwcG9ydCBmb3IgR2V0L1NldEFyY0RpcmVjdGlvbiBhbmQgR2V0L1NldFdvcmxkVHJhbnNmb3JtCi0KLQkqIFt3aW5kb3dzL2hvb2suY10KLQlGaXhlZCBhIGJ1ZyBpbiBIT09LX01hcDE2VG8zMkNvbW1vbi4KLQotVGh1IEphbiAyOSAyMzo0MzoxOCAxOTk4ICBEb3VnbGFzIFJpZGd3YXkgPHJpZGd3YXlAdGFpZ2EuZ21jbC5jb20+Ci0KLQkqIFtncmFwaGljcy9tZXRhZmlsZWRydi9pbml0LmNdIFtvYmplY3RzL21ldGFmaWxlLmNdCi0JRG9jdW1lbnRhdGlvbiBmb3IgbWV0YWZpbGUgcmVsYXRlZCBBUEkgY2FsbHMuIEZpeGVkIGEgYnVnIHRvIGF2b2lkCi0JZG9jdW1lbnRpbmcgaXQuCi0KLQkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KLQlEZWNsYXJhdGlvbiBmb3IgTG9hZEltYWdlLgotCi1UaHUgSmFuIDI5IDIxOjQ0OjQ1IDE5OTggIEh1dyBEIE0gRGF2aWVzIDxoLmRhdmllczFAcGh5c2ljcy5veGZvcmQuYWMudWs+Ci0KLQkqIFtncmFwaGljcy93aW4xNmRydi8qXQotCUNoYW5nZXMgdG8gcHJpbnRpbmcgY29kZSB0byBlbmFibGUgdXNlIG9mIHByaW50ZXIgZm9udHMgd2l0aCB0aGUKLQl3aW4zLjEgcG9zdHNjcmlwdCBkcml2ZXIuIFJlbWVtYmVyIHRvIGFkZCBwcmludGVyPW9uIHRvIFt3aW5lXQotCXNlY3Rpb24gb2Ygd2luZS5jb25mIC4gWW91IHdpbGwgYWxzbyBuZWVkIHRvIGRpc2FibGUgdHJ1ZXR5cGUKLQlmb250cyBmcm9tIGNvbnRyb2wgcGFuZWwuIFdpbndvcmQgNi4wIGFuZCBXcml0ZSBzZWVtIHRvIGJlIGhhcHB5Ci0Jd2l0aCB0aGlzLi4uCi0KLQkqIFtpbmNsdWRlL2JpdG1hcC5oXQotCUZpeCBXaWR0aGJ5dGVzIGZvciAxNWJwcCBkaXNwbGF5cy4KLQotVHVlIEphbiAyNyAyMDo1NDowOCAxOTk4ICBLcmlzdGlhbiBOaWVsc2VuIDxrcmlzdGlhbi5uaWVsc2VuQHJpc29lLmRrPgotCi0JKiBbdHN4MTEvKl0gW2luY2x1ZGUvdHMqXSBbdG9vbHMvbWFrZV9YMTF3cmFwcGVyc10KLQlJbXBsZW1lbnRlZCB0aHJlYWQtc2FmZSBYMTEgd3JhcHBlcnMuCi0KLVR1ZSBKYW4gMjcgMTM6NTQ6MDkgMTk5OCAgQ29uc3RhbnRpbmUgU2FwdW50emFraXMgIDxjc2FwdW50ekB0bWEtMS5sY3MubWl0LmVkdT4KLQotCSogW3dpbmRvd3MvcXVldWUuY10KLQlGb3Jnb3QgdG8gY29udmVydCB0aGRiIHRvIHRocmVhZF9pZC4KLQotCSogW21pc2MvcmVnaXN0cnkuY10KLQlTcGVkIHVwIFdpbmRvd3MgOTUgcmVnaXN0cnkgcmVhZGluZy4gQ2hhbmdlZCBjb2RlIHRvIHRyYXZlcnNlCi0JcmVnaXN0cnkgYXMgYSB0cmVlIHJhdGhlciB0aGFuIHJlYWQgaW4gYWxsIHBvc3NpYmxlIGtleXMKLQkoaW5jbHVkaW5nIGRlYWQgb25lcykuIAotCi1UdWUgSmFuIDI3IDEyOjQ2OjA5IDE5OTggIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgotCi0JKiBbbG9hZGVyL3BlX2ltYWdlLmNdW01ha2VmaWxlLmluXVtzY2hlZHVsZXIvdGhyZWFkLmNdCi0JICBbbGlidGVzdC9oZWxsbzUuY10KLQlEb24ndCBleGl0KCkgb24gZmFpbGVkIHRvIGxvYWQgcmVmZXJlbmNlZCBkbGxzLgotCUZpeGVkIHN0YXRpYyB0bHMgYWxsb2NhdGlvbiBmb3IgbXVsdGlwbGUgdGhyZWFkcy4KLQlXSU5FTElCIHNob3VsZCBub3cgYmUgYWJsZSB0byBsb2FkIFBFIGRsbHMuIEEgc2FtcGxlCi0Jd2luZWxpYiBwcm9ncmFtLCB0aGF0IGR5bmFtaWNhbGx5IGxvYWRzIGEgaW50ZXJuYWwgZGxsCi0JaXMgaW5jbHVkZWQuCi0KLQkqIFtncmFwaGljcy9kZHJhdy5jXVtpbmNsdWRlL2RkcmF3LmhdW2luY2x1ZGUvZDNkLmhdCi0JQ2xlYW5lZCB1cCBhbmQgZW5oYW5jZWQgZnVydGhlci4gQWRkZWQgc2V2ZXJhbCBEaXJlY3RYNQotCWludGVyZmFjZSBkZWZpbml0aW9ucyBhbmQgRGlyZWN0U3VyZmFjZTMgaW1wbGVtZW50YXRpb24uCi0JU3R1YnMgZm9yIEQzRCAoTk9UIGNvbWluZyBzb29uLCBqdXN0IHRoZXJlIHNvIGl0IGZhaWxzIHNhZmVseSkuCi0KLQkqIFttdWx0aW1lZGlhL2Rzb3VuZC5jXVtpbmNsdWRlL2Rzb3VuZC5oXQotCUFjdHVhbGx5IHdvcmtzIG5vdyBmb3IgYSBsb3Qgb2YgY2FzZXMuIFNvbWUgRGlyZWN0WDUgc3R1ZmYKLQlhZGRlZC4gU3RpbGwgbGFja2luZyBzZXZlcmFsIGZlYXR1cmVzLgotCi0JKiBbd2luZG93cy9kaW5wdXQuY11baW5jbHVkZS9kaW5wdXQuaF0KLQlTdGFydGVkIGltcGxlbWVudGluZyBEaXJlY3RJbnB1dC4gRG9lc24ndCB3b3JrIHlldCwgZG9uJ3QgCi0Ja25vdyB3aHkuCi0KLQkqIFtpZjE2MzIvdGh1bmsuY11bbWlzYy9jYWxsYmFja3MuY10KLQkgIFt3aW4zMi9rZXJuZWwuY11baW5jbHVkZS9jYWxsYmFja3MuaF0KLQlBZGRlZCBXT1dDYWxsYmFjazE2RXgsIFdPV0hhbmRsZTMyLgotCi0JKiBbbWlzYy9jcHUuY10KLQlGaXhlZCBHZXRTeXN0ZW1JbmZvLCBJc1Byb2Nlc3NvckZlYXR1cmVQcmVzZW50LgotCi0JKiBbbXVsdGltZWRpYS9qb3lzdGljay5jXVttdWx0aW1lZGlhL3RpbWUuY10KLQlTZXZlcmFsIGZpeGVzLiBTbWFsbCBoYWNrIHRvIGdldCB0aW1lcmV2ZW50cyBpbiB0aW1lR2V0VGltZSgpIGxvb3BzLgotCi1UdWUgSmFuIDIwIDExOjI2OjI3IDE5OTggIFNsYXZlbiBSZXppYyAgPGVzZXJ0ZUBjcy50dS1iZXJsaW4uZGU+Ci0KLQkqIFtjb25maWd1cmUuaW5dCi0JRml4ZWQgY2hlY2sgZm9yIHVuaW9uIHNlbXVuIG9uIEZyZWVCU0Qgc3lzdGVtcy4KLQotU3VuIEphbiAxOCAyMzowNTowNCAxOTk4ICBLYXJsIEJhY2tzdHL2bSA8a2FybF9iQGdlb2NpdGllcy5jb20+Ci0KLQkqIFttaXNjL29sZTJubHMuY10gW3Byb2dyYW1zL3Byb2dtYW4vU3cucmNdIFtwcm9ncmFtcy93aW5oZWxwL1N3LnJjXQotCSAgW3Jlc291cmNlcy9zeXNyZXNfU3cucmNdCi0JQWRkZWQvdXBkYXRlZCBTd2VkaXNoIGxhbmd1YWdlIHN1cHBvcnQuCi0KLVN1biBKYW4gMTggMTg6NDk6MDEgMTk5OCAgQWxleCBLb3JvYmthIDxhbGV4QHRyYW50b3IucGhhcm0uc3VueXNiLmVkdT4KLQotCSogW21pc2Mvd2luc29jay5jXSBbbWlzYy93aW5zb2NrX2Rucy5jXSBbd2luZG93cy9ldmVudC5jXQotCSAgW3dpbmRvd3Mvd2luLmNdIFt3aW5kb3dzL2RjZS5jXSBbd2luZG93cy93aW5wb3MuY10KLQlCdWcgZml4ZXMuCi0KLVN1biBKYW4gMTggMTI6NDU6MjMgMTk5NyAgQW5kcmVhcyBNb2hyIDwxMDAuMzA5MzZAZ2VybWFueS5uZXQ+Ci0KLQkqIFttc2Rvcy9pbnQyNS5jXSBbbXNkb3MvaW50MjYuY10KLSAgICAgICAgSW1wbGVtZW50ZWQgIm5hdGl2ZSIgYWJzb2x1dGUgZGlzayByZWFkL3dyaXRlIGFjY2Vzcy4KLQotCSogW21zZG9zL2ludDEzLmNdIFttc2Rvcy9pb3BvcnRzLmNdCi0JRW5oYW5jZWQgR0VUIERSSVZFIFBBUkFNRVRFUlMgKGludDEzIEFIPTA4KS4KLQotCSogW2dyYXBoaWNzL3dpbjE2ZHJ2L3BydGRydi5jXSBbaWYxNjMyL2dkaS5zcGVjXQotCUZpeGVkIHR5cG9zLCBpbXBsZW1lbnRlZCBkbUVudW1ERm9udHMsCi0JU3RhcnRlZCBpbXBsZW1lbnRhdGlvbiBvZiBkbVJlYWxpemVPYmplY3QuCi0KLQkqIFtpZjE2MzIvY29tcG9iai5zcGVjXSBbb2xlL2NvbXBvYmouY10gW3JlbGF5MzIvb2xlMzIuc3BlY10KLQlTdHVicyBDb0NyZWF0ZUluc3RhbmNlLCBDb0ZyZWVVbnVzZWRMaWJyYXJpZXMsIGltcGxlbWVudGVkCi0JQ29GaWxlVGltZU5vdy4KLQotCSogW2lmMTYzMi9rZXJuZWwuc3BlY10gW2luY2x1ZGUvd2luZG93cy5oXSBbbWVtb3J5L2dsb2JhbC5jXQotCSAgW21lbW9yeS9zdHJpbmcuY10gW21pc2Mva2VybmVsLmNdIFttaXNjL01ha2VmaWxlLmluXQotCSAgW21pc2MvdG9vbGhlbHAuY10gW21zZG9zL2ludDIxLmNdCi0JSW1wbGVtZW50ZWQgR2xvYmFsSGFuZGxlTm9SSVAsIEdldEZyZWVNZW1JbmZvLCBEZWJ1Z0ZpbGxCdWZmZXIsIAotCXN0dWJzIEdldFNldEtlcm5lbERPU1Byb2MsIERpYWdRdWVyeSwgRGlhZ091dHB1dCwgVG9vbEhlbHBIb29rCi0JKFVuZG9jdW1lbnRlZCBXaW5kb3dzKS4KLQotCSogW2lmMTYzMi91c2VyLnNwZWNdIFtpZjE2MzIvd2luMzJzMTYuc3BlY10gW21pc2Mvd2luMzJzMTYuY10KLQlNaXNjIHN0dWJzLgotCi0JKiBbaWYxNjMyL3dpbmFzcGkuc3BlY10gW21pc2MvYXNwaS5jXQotCUltcGxlbWVudGVkIEdldEFTUElETExWZXJzaW9uLgotCi0JKiBbaWYxNjMyL3dwcm9jcy5zcGVjXSBbbXNkb3MvaW50MjAuY10gW21zZG9zL01ha2VmaWxlLmluXQotCUFkZGVkIGhhbmRsZXIgZm9yIEludCAweDIwICh0ZXJtaW5hdGUgcHJvZ3JhbSwgX3ZlcnlfIG9sZC1mYXNoaW9uZWQpLgotCi0JKiBbbWlzYy93MzJzY29tYi5jXQotCUltcGxlbWVudGVkIEdldDE2RExMQWRkcmVzcygpIHBhcnRpYWxseQotCShiaWcgdGhhbmtzIHRvIE1hcmN1cyBhbmQgQWxleGFuZHJlKS4KLQotCSogW3JlbGF5MzIvTWFrZWZpbGUuaW5dIFtyZWxheTMyL2J1aWx0aW4zMi5jXSBbcmVsYXkzMi9kcGxheS5zcGVjXQotCUFkZGVkIGJ1aWx0LWluIERQTEFZLkRMTC4KLQotCSogW3JlbGF5MzIvd2lubW0uc3BlY10gW211bHRpbWVkaWEvam95c3RpY2suY10KLQlBZGRlZCBqb3lTZXRUaHJlc2hvbGQuCi0KLQkqIFttaXNjL3dpbmRlYnVnLmNdCi0JQWRkZWQgV2luTm90aWZ5LgotCi0JKiBbd2luMzIvY29uc29sZS5jXQotCVN0dWJzIENyZWF0ZUNvbnNvbGVTY3JlZW5CdWZmZXIsIFNldENvbnNvbGVBY3RpdmVTY3JlZW5CdWZmZXIsCi0JV3JpdGVDb25zb2xlT3V0cHV0MzJBLgotCi0JKiBbd2luZG93cy91c2VyLmNdCi0JU3R1YiBTZXRFdmVudEhvb2suCi0KLVNhdCBKYW4gMTcgMTk6MzA6MzUgMTk5OCAgTWF0dGhldyBUb3NlbGFuZCAgPFBhdWwuVG9zZWxhbmRAYnRpbnRlcm5ldC5jb20+Ci0KLQkqIFt3aW5kb3dzL3BhaW50aW5nLmNdCi0JRml4ZWQgYnJva2VuIHJlc3RvcmUtdG8tbWF4aW1pemVkLgotCi1Nb24gSmFuIDEyIDIxOjI1OjMyIDE5OTggIFBlcmNldmFsIC0gTWFyYyBIdWd1ZXQgUHVpZyA8bWhwQHRpbmV0LmZ1dC5lcz4KLQotCSogW2RvY3VtZW50YXRpb24vd2luZS5tYW5dIFtpbmNsdWRlL29wdGlvbnMuaF0KLQkgIFttaXNjL21haW4uY10gW29sZS9vbGUybmxzLmNdIFtyZXNvdXJjZXMvc3lzcmVzLmNdCi0JICBbcmVzb3VyY2VzL3N5c3Jlc19DYS5yY10gW3Jlc291cmNlcy9NYWtlZmlsZS5pbl0KLQlBZGRlZCBsYW5ndWFnZSBjYXRhbGFuLiAoQWZlZ2l0IGwnaWRpb21hIGNhdGFs4CkuCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVN1biBKYW4gMTggMTc6MDU6NTggMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+Ci0KLQkqIFtpbmNsdWRlL3N0YWNrZnJhbWUuaF0gW3Rvb2xzL2J1aWxkLmNdCi0JU29tZSBjbGVhbnVwcyBpbiBzdGFjayBmcmFtZSBidWlsZGluZy4KLQotCSogW21pc2MvcG9ydC5jXQotCUltcGxlbWVudGVkIGNsb25lKCkgd3JhcHBlciBmb3IgbGliYzUgdXNlcnMuCi0KLQkqIFtzY2hlZHVsZXIvbXV0ZXguY10gW3NjaGVkdWxlci9zeW5jaHJvLmNdCi0JSW1wbGVtZW50ZWQgYWJhbmRvbmVkIG11dGV4ZXMuCi0KLQkqIFtzY2hlZHVsZXIvcHJvY2Vzcy5jXSBbc2NoZWR1bGVyL3RocmVhZC5jXQotCVdlIG5vdyBjcmVhdGUgYSBwcm9jZXNzIGFuZCBhIHRocmVhZCBzdHJ1Y3R1cmUgYXMgc29vbiBhcyBwb3NzaWJsZQotCWR1cmluZyBpbml0aWFsaXphdGlvbi4KLQotCSogW3NjaGVkdWxlci90aHJlYWQuY10gW3NjaGVkdWxlci9zeXNkZXBzLmNdCi0JTW92ZWQgc3lzdGVtLXNwZWNpZmljIHRocmVhZCBoYW5kbGluZyB0byBzeXNkZXBzLmMuCi0KLUZyaSBKYW4gMTYgMTA6NDU6MTUgMTk5OCAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+Ci0KLQkqIFtncmFwaGljcy9kZHJhdy5jXVtpbmNsdWRlL2RkcmF3LmhdCi0JU3VyZmFjZSBoYW5kbGluZyBlbmhhbmNlZC4gU29tZSBzdHVmZiBhbHJlYWR5IHdvcmtzIDspCi0KLQkqIFttdWx0aW1lZGlhL2Rzb3VuZC5jXVtpbmNsdWRlL2Rzb3VuZC5oXQotCUltcGxlbWVudGVkIHVzaW5nIHRoZSBPcGVuIFNvdW5kIFN5c3RlbS4KLQlTbG93bHkgc3RhcnRzIHRvIHdvcmsgKHNvdW5kcyB0ZXJyaWJsZSBmb3Igc29tZSBwcm9ncmFtcykuCi0KLQkqIFtjb25maWd1cmUuaW5dW211bHRpbWVkaWEvYXVkaW8uY11baW5jbHVkZS9jb25maWcuaC5pbl0KLQlBZGRlZCBjaGVjayBmb3IgT3BlblNvdW5kU3lzdGVtLCBmaXhlZCAtbFh4Zjg2ZGdhIGNoZWNrLgotCVJlcGxhY2VkIE9TICNpZmRlZnMgYnkgI2lmZGVmIEhBVkVfT1NTIGluIG1tL2F1ZGlvLmMuCi0KLQkqIFtpZjE2MzIvcmVsYXkuY11bcmVsYXkzMi9yZWxheTM4Ni5jXQotCURvIG5vdCBwcmludCBjb250cm9sIGNoYXJhY3RlcnMgZm9yICdzdHInIG9yICd3c3RyJyBhcmdzLgotCi0JKiBbbWlzYy9yZWdpc3RyeS5jXQotCSIiIHNlZW1zIHRvIGVxdWFscyBOVUxMIGluIGtleW5hbWVzLiBSZXBsYWNlIHdoZXJlIG5lZWRlZC4gU2VlbXMKLQl0byBoZWxwIHRoZSB3aW45NSByZWdlZGl0LmV4ZS4uLgotCi0JKiBbd2luMzIvbmV3Zm5zLmNdCi0JSW1wbGVtZW50ZWQgUXVlcnlQZXJmb3JtYW5jZSogdXNpbmcgZ2V0dGltZW9mZGF5KDIpCi0JKHNob3VsZCBiZSBkb25lIHVzaW5nIHRoZSBwZW50aXVtIHRpbWVycyBwcm9iYWJseSkuCi0KLQkqIFt0b29scy9pcGNsXQotCVJlbW92ZWQgdXNlbGVzcyBvcGVuX3BpcGUgY29uc3RydWN0LgotCi1TdW4gSmFuIDExIDE3OjEwOjAyIDE5OTggIEh1dyBEIE0gRGF2aWVzIDxoLmRhdmllczFAcGh5c2ljcy5veGZvcmQuYWMudWs+Ci0KLQkqIFtvYmplY3RzL3JlZ2lvbi5jXSBbaW5jbHVkZS9yZWdpb24uaF0gW2dyYXBoaWNzL3gxMWRydi9jbGlwcGluZy5jXQotCVJlZ2lvbnMgYXJlIG5vdyBpbnRlcm5hbCB0byBXaW5lLiBUaGUgYmFzaXMgb2YgdGhpcyBjb2RlIGlzIHRha2VuCi0JZnJvbSB0aGUgWDExIGRpc3RyaWJ1dGlvbi4gR2V0UmVnaW9uRGF0YSgpIGlzIGltcGxlbWVudGVkIGFzIGlzIAotCUV4dENyZWF0ZVJlZ2lvbigpICh3aXRob3V0IFhmb3JtcykuIENyZWF0ZVBvbHlQb2x5Z29uUmduKCkgc2hvdWxkCi0JYmVoYXZlIGNvcnJlY3RseSBub3cuIAotCi0JKiBbb2JqZWN0cy9tZXRhZmlsZS5jXSBbZ3JhcGhpY3MvbWV0YWZpbGVkcnYvZ3JhcGhpY3MuY10KLQkgIFtncmFwaGljcy9tZXRhZmlsZWRydi9pbml0LmNdIFtpbmNsdWRlL21ldGFmaWxlLmhdCi0JICBbaW5jbHVkZS9tZXRhZmlsZWRydi5oXQotCVBsYXliYWNrIG9mIE1FVEFfQ1JFQVRFUkVHSU9OIHNob3VsZCBub3cgd29yay4gSW1wbGVtZW50ZWQgcmVjb3JkaW5nCi0Jb2YgTUVUQV9DUkVBVEVSRUdJT04gYW5kIE1FVEFfUEFJTlRSRUdJT04uCi0KLQkqIFtncmFwaGljcy94MTFkcnYvZ3JhcGhpY3MuY10KLQlGaWxsUmduKCkgKGFuZCB0aGVyZWZvcmUgaXRzIGZyaWVuZHMpIHJlc3BlY3QgbG9naWNhbCBjby1vcmRzLgotCi1XZWQgSmFuICA3IDAxOjIxOjQ1IDE5OTggIFN0ZWluYXIgSGFtcmUgIDxzdGVpbmFyaEBzdHVkLmZpbS5udG51Lm5vPgotCi0JKiBbY29uZmlndXJlLmluXSBbaW5jbHVkZS9hY2NvbmZpZy5oXSBbdG9vbHMvYnVpbGQuY10KLQlOb3cgY2hlY2tpbmcgd2hldGhlciB0byB1c2UgLnN0cmluZyBvciAuYXNjaWkuCi0KLQkqIFtjb25maWd1cmUuaW5dIFtpbmNsdWRlL2FjY29uZmlnLmhdIFtzY2hlZHVsZXIvY3JpdHNlY3Rpb24uY10KLQlEZWZpbmluZyB1bmlvbiBzZW11biBpZiB0aGlzIGlzIG5vdCBhdmFpbGFibGUgZnJvbSBoZWFkZXIgZmlsZXMuCi0KLQkqIFttaXNjL2xzdHIuY10KLQlNb3ZlZCB3aW5lJ3Mgb3duIGhlYWRlciBmaWxlcyBiZWxvdyA8d2N0eXBlLmg+IHRvIGF2b2lkCi0JcGFyc2UgZXJyb3Igb24gU29sYXJpcy4KLQotU3VuIEphbiAgNCAxNTozODowNyAxOTk4ICBBbmRyZXcgVGF5bG9yIDxhdGF5bG9yQGNhZHZpc2lvbi5jb20+Ci0KLQkqIFttdWx0aW1lZGlhL21tc3lzdGVtLmNdIFttdWx0aW1lZGlhL21taW8uY10KLQlJbXBsZW1lbnRlZCBtbWlvU2VuZE1lc3NhZ2UgYW5kIHJlYXJyYW5nZWQgdGhlIG1taW8KLQlzdWJzeXN0ZW0gaW4gdGVybXMgb2YgdGhpcyBmdW5jdGlvbi4KLQotV2VkIERlYyAyNCAwMDo1MToyOSAxOTk3ICBDaGFybGVzIER1ZmZ5IDxjZHVmZnlAYmlnZm9vdC5jb20+Ci0KLQkqIFt3aW5kb3dzL2NsaXBib2FyZC5jXSBbcmVsYXkzMi91c2VyMzIuc3BlY10KLQlHZXRQcmlvcml0eUNsaXBib2FyZEZvcm1hdDMyIG5vdyBoYXMgc29tZXRoaW5nIG90aGVyIHRoYW4ganVzdAotCWEgc3R1Yi4gSSBoYXZlIG5vIGlkZWEgaWYgaXQgd29ya3MgKGNhbid0IHRlc3QgdW50aWwKLQlTZXRDbGlwYm9hcmREYXRhIGlzIGZpbmlzaGVkKSBidXQgSEVkaXQgbGlrZXMgdGhpbmdzIGEgbG90IG1vcmUKLQl0aGlzIHdheS4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotU2F0IEphbiAgMyAxNzoxNTo1NiAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KLQotCSogW2RlYnVnZ2VyL2RiX2Rpc2FzbS5jXQotCUFkZGVkIGNwdWlkIGFuZCBjbXB4Y2hnIGluc3RydWN0aW9ucy4KLQotCSogW2lmMTYzMi9idWlsdGluLmNdIFtyZWxheTMyL2J1aWx0aW4zMi5jXQotCUZpeGVkIGJyb2tlbiAtZGxsIG9wdGlvbiB3aXRoIFdpbjMyIERMTHMuCi0KLQkqIFtpbmNsdWRlL2hlYXAuaF0KLQlBZGRlZCBTWVNURU1fTE9DSy9TWVNURU1fVU5MT0NLIG1hY3Jvcy4KLQotCSogW2NvbmZpZ3VyZS5pbl0gW21pc2MvbHN0ci5jXQotCUFkZGVkIGNoZWNrIGZvciB3Y3R5cGUuaC4KLQlDb21tZW50ZWQgb3V0IC0tZW5hYmxlLWlwYyBvcHRpb24gKElQQyBjb2RlIGhhcyBiZWVuIGJyb2tlbiBmb3IgYQotCWxvbmcgdGltZSBhbnl3YXkpLgotCi0JKiBbc2NoZWR1bGVyL2NyaXRzZWN0aW9uLmNdIFtzY2hlZHVsZXIvZXZlbnQuY10KLQkgIFtzY2hlZHVsZXIvbXV0ZXguY10gW3NjaGVkdWxlci9zZW1hcGhvcmUuY10KLQlJbXBsZW1lbnRlZCBXaW4zMiBzeW5jaHJvbml6YXRpb24gb2JqZWN0cy4KLQotCSogW3NjaGVkdWxlci9zeW5jaHJvLmNdCi0JSW1wbGVtZW50ZWQgV2FpdEZvck11bHRpcGxlT2JqZWN0cyBhbmQgcmVsYXRlZCBmdW5jdGlvbnMuCi0KLQkqIFtzY2hlZHVsZXIvdGhyZWFkLmNdCi0JSWYgcG9zc2libGUsIHVzZSBjbG9uZSgpIGluIENyZWF0ZVRocmVhZCgpLgotCi0JKiBbc2NoZWR1bGVyL3RocmVhZC5jXSBbc2NoZWR1bGVyL3Byb2Nlc3MuY10KLQlNYWRlIHRocmVhZCBhbmQgcHJvY2VzcyB3YWl0YWJsZSBvYmplY3RzLgotCVRocmVhZCBhbmQgcHJvY2VzcyBpZCB2YWx1ZXMgYXJlIG5vdyBkaWZmZXJlbnQgZnJvbSB0aGUgcG9pbnRlcnMKLQl0aGV5IHJlcHJlc2VudC4KLQotCSogW3dpbjMyL2szMm9iai5jXQotCU1vdmVkIHRvIHNjaGVkdWxlciBkaXJlY3RvcnkuCi0JQWRkZWQgZnVuY3Rpb24gdGFibGUgZm9yIHdhaXRpbmcgb3BlcmF0aW9ucyBvbiBvYmplY3RzLgotCi0JKiBbZmlsZXMvZmlsZS5jXSBbbWVtb3J5L3ZpcnR1YWwuY10KLQlBZGRlZCBuZXcgSzMyT0JKIGZ1bmN0aW9uIHRhYmxlLgotCi1TdW4gSmFuICAxIDE2OjQ4OjIzIDE5OTcgIEFuZHJlYXMgTW9ociA8MTAwLjMwOTM2QGdlcm1hbnkubmV0PgotCi0JKiBbZmlsZXMvZmlsZS5jXQotCUZpeGVkIG15IHBhdGNoIGZvciBHZXRUZW1wRmlsZU5hbWUxNigpIGFzIG5lZWRlZC4KLQlJdCB3YXMgLi4uTmFtZTMyQSgpIHRoYXQgZGlkbid0IHdvcmsgcHJvcGVybHksIG5vdCAuLi5OYW1lMTYoKS4KLQotCSogW2dyYXBoaWNzL3gxMWRydi9icnVzaC5jXQotCUZpeGVkIGEgQmFkTWF0Y2ggZXJyb3IuCi0KLQkqIFttc2Rvcy9pbnQyMS5jXQotCUZpeGVkIElOVDIxX0ZpbmROZXh0RkNCKCkgdG8gZ2V0IGNvcnJlY3Qgdm9sdW1lIGxhYmVscyBlLmcuCi0JaW4gImZpbGUgb3BlbiIgZGlhbG9nLgotCi0JKiBbbXVsdGltZWRpYS9qb3lzdGljay5jXSBbcmVsYXkzMi93aW5tbS5zcGVjXQotCVN0dWIgSm95R2V0UG9zRXgoKS4KLQotCSogW3NjaGVkdWxlci9wcm9jZXNzLmNdIFtyZWxheTMyL2tlcm5lbDMyLnNwZWNdCi0JSW1wbGVtZW50ZWQgUmVnaXN0ZXJTZXJ2aWNlUHJvY2VzcygpLgotCi1XZWQgRGVjIDMxIDExOjE0OjQzIDE5OTcgIExhd3NvbiBXaGl0bmV5ICA8bGF3c29uX3doaXRuZXlAanVuby5jb20+Ci0KLQkqIFtpZjE2MzIva2VybmVsLnNwZWNdIFtpZjE2MzIvcmVsYXkuY10KLQlEZWZpbmUgQ2FsbFByb2NFeDMydyAtIFRoYW5rcyB0byBNYXJjdXMgTWVpc3NuZXIgZm9yIGhpcyBleGNlbGxlbnQKLQlDYWxsUHJvYzMyVy4KLQotCSogW2xvYWRlci9tb2R1bGUuY10KLQlUYWtlIGEgc2hvdCBhdCBkZWZpbmluZyBGcmVlTGlicmFyeTMyVy4KLQotU3VuIERlYyAyOCAxMjo0NDowNCAxOTk3ICBLYWkgTW9yaWNoIDxrYWkubW9yaWNoQHJoZWluLW5lY2thci5uZXRzdXJmLmRlPgotCi0JKiBbY29udHJvbHMvbWVudS5jXQotCU1lbnUgbW9kaWZpY2F0aW9uIGZyb20gV01fSU5JVE1FTlVQT1BVUCBtZXNzYWdlIGZpeGVkLgotCU1lbnUgaXRlbXMgbm93IGNhbiBoYXZlIGRpZmZlcmVudCB3SUQgYW5kIGhTdWJNZW51IChXaW45NSBiZWhhdmlvcikuCi0KLQkqIFttaXNjL2NwdS5jXQotCUltcHJvdmVkIElzUHJvY2Vzc29yRmVhdHVyZVByZXNlbnQuCi0KLVN1biBEZWMgMjggMDM6MjE6MDggMTk5NyAgT3ZlIEthYXZlbiA8b3Zla0BtYWluLmFyY3RpY25ldC5ubz4KLQotCSogW2luY2x1ZGUvd2luc29jay5oXSBbbWlzYy93aW5zb2NrLmNdCi0JRml4ZWQgV1NfU09MX1NPQ0tFVCBmb3Igc2V0c29ja29wdCgpLCBhbmQgbWFkZSBzZWxlY3QoKSByZXR1cm4KLQllbXB0eSBmZF9zZXRzIGlmIHRpbWVvdXQuCi0KLQkqIFtvYmplY3RzL3BhbGV0dGUuY10KLQlBbmltYXRlUGFsZXR0ZSgpIGJhaWxlZCBvdXQgaWYgZW50aXJlIHBhbGV0dGUgaXMgYW5pbWF0ZWQuIEZpeGVkLgotCi0JKiBbb2JqZWN0cy9kaWIuY10KLQlBZGRlZCBzb21lIGNvZGUgdG8gU2V0RElCaXRzVG9EZXZpY2UoKSBhbmQgaXRzIGhlbHBlcnMgdG8gZml4Ci0Jc29tZSBvZmZzZXRpbmcgcHJvYmxlbXMuCi0KLQkqIFtvYmplY3RzL2N1cnNvcmljb24uY10KLQlNYWRlIENyZWF0ZUN1cnNvcjMyKCkgY29udmVydCB0aGUgaW5zdGFuY2UgaGFuZGxlIHByb3Blcmx5LiBNYWRlCi0JRGVzdHJveUN1cnNvcigpIHJldHVybiBjb3JyZWN0IHN1Y2Nlc3Mgc3RhdHVzLgotCi1XZWQgRGVjIDI0IDE3OjU2OjM0IDE5OTcgIERpbWl0cmllIE8uIFBhdW4gIDxkaW1pQGNzLnRvcm9udG8uZWR1PgotCi0JKiBbd2luZG93cy9zeXNjb2xvci5jXQotCUFkZGVkIGRlZmluaXRpb24gb2YgR2V0U3lzQ29sb3JQZW4xNi8zMi4gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdAotCWV4aXN0IGluIHRoZSBXaW4zMiBBUEkgYnV0IGlzIGEgdmVyeSBjbG9zZSAoYW5kIG5hdHVyYWwpIHJlbGF0aXZlCi0JdG8gR2V0U3lzQ29sb3JCcnVzaCBmdW5jdGlvbi4gTW9yZW92ZXIsIGl0IGlzICp2ZXJ5KiBtdWNoIHVzZWQgCi0Jd2l0aGluIFdpbmUgc2luY2UgdGhlcmUgYXJlIGEgbG90IG9mIHBsYWNlcyB3aGVyZSB3ZSBuZWVkIHRvIGRyYXcKLQlsaW5lcyB3aXRoIHRoZSBzdGFuZGFyZCBjb2xvcnMuCi0KLQkqIFtjb250cm9scy9idXR0b24uY10gW2NvbnRyb2xzL2NvbWJvLmNdIFtjb250cm9scy9pY29udGl0bGUuY10KLQkgIFtjb250cm9scy9tZW51LmNdIFtjb250cm9scy9wcm9ncmVzcy5jXSBbY29udHJvbHMvc2Nyb2xsLmNdCi0JICBbY29udHJvbHMvdXBkb3duLmNdIFtncmFwaGljcy9wYWludGluZy5jXSBbbWlzYy90d2Vhay5jXQotCSAgW3dpbmRvd3MvZGVmd25kLmNdIFt3aW5kb3dzL2dyYXBoaWNzLmNdIFt3aW5kb3dzL25vbmNsaWVudC5jXQotCVJlcGxhY2VkIHJlZmVyZW5jZXMgdG8gc3lzQ29sb3JPYmplY3RzIHdpdGggdGhlIGFwcHJvcHJpYXRlCi0JY2FsbCB0byBHZXRTeXNDb2xvckJydXNoMzIvR2V0U3lzQ29sb3JQZW4zMi4gVGhlcmUgaXMgbm8gbmVlZCB0bwotCWV4cG9zZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlc2UgZnVuY3Rpb25zLCBldmVuIHdpdGhpbiBXaW5lLgotCVRoaXMgbWFrZXMgdGhlIGNvZGUgZWFzaWVyIHRvIHVuZGVyc3RhbmQsIGRlYnVnLCBtYWludGFpbi4KLQotCSogW2NvbnRyb2xzL3VpdG9vbHMuY10KLQlNb2RpZmllZCBtb3N0IG9mIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIHRvIHVzZSB0aGUgbm93Ci0Jc3RhbmRhcmQgcGVucyAoaS5lLiBHZXRTeXNDb2xvclBlbjMyKS4gVGhlc2UgZnVuY3Rpb25zIG1hZGUKLQkqaGVhdnkqIHVzZSBvZiBzdGFuZGFyZCBwZW5zIHNvIEkgZXhwZWN0IGEgbG90IGxlc3MKLQlDcmVhdGVQZW4vRGVsZXRlT2JqZWN0IGNhbGxzIGNhbiBkbyBvbmx5IGdvb2QuLi46KQotCVBsdXMgc29tZSBtaW5vciBtb2RpZmljYXRpb25zICgqbm8qIGZ1bmN0aW9uYWwgY2hhbmdlcyB0aG91Z2gpLgotCi0JKiBbY29udHJvbHMvdXBkb3duLmNdCi0JVXNlZCB0aGUgbmV3IERyYXdGcmFtZUNvbnRyb2wzMiBmdW5jdGlvbiB0byBwYWludCB0aGUgY29udHJvbC4KLQlJIGFsc28gZGVsZXRlZCBVRERPV05fRHJhd0Fycm93IHNpbmNlIGl0IHdhcyBubyBsb25nZXIgcmVxdWlyZWQuCi0KLVR1ZSBEZWMgMjMgMDA6MDM6MzMgMTk5NyAgU3RlaW5hciBIYW1yZSAgPHN0ZWluYXJoQHN0dWQuZmltLm50bnUubm8+Ci0KLQkqIFtjb25maWd1cmUuaW5dCi0JQWRkZWQgY2hlY2sgZm9yIC1sdy4KLQotCSogW2luY2x1ZGUvd2ludHlwZXMuaF0gW3Rvb2xzL2J1aWxkLmNdCi0JQ2hhbmdlcyB0byBtYWtlIHRoZSBhc3NlbWJseSB1bmRlcnN0YW5kYWJsZSBmb3IgZXZlbiBzdW4gYXMuCi0JIi5hc2NpaSIgLT4gIi5zdHJpbmciLCAiY2FsbCAlZm9vIiAtPiAiY2FsbCAqJWZvbyIsCi0JInB1c2h3L3BvcHcgJVtjZGVzXXMiIHdyaXR0ZW4gb3V0IHRvICIuYnl0ZSAweDY2XG5wdXNobC9wb3BsICVbY2Rlc11zIi4KLQotCSogW21lbW9yeS9sZHQuY10KLQkjaWZkZWYgYWRkZWQgc28gPHN5cy9zZWcuaD4gd2lsbCBub3QgYmUgaW5jbHVkZWQgb24gU29sYXJpcy4KLQotTW9uIERlYyAyMiAxODo1NToxOSAxOTk3ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KLQotCSogW2NvbmZpZ3VyZS5pbl0KLQlBZGRlZCBYRjg2REdBIGNoZWNrLgotCi0JKiBbbXVsdGltZWRpYS9kc291bmQuY11bcmVsYXkzMi9kc291bmQuc3BlY11baW5jbHVkZS9kc291bmQuaF0KLQlTdGFydGVkIERpcmVjdFNvdW5kLiBPbmx5IHN0dWJzIGZvciBub3cuCi0KLQkqIFtncmFwaGljcy9kZHJhdy5jXVtpbmNsdWRlL2RkcmF3LmhdW3JlbGF5MzIvZGRyYXcuc3BlY10KLQlTdGFydGVkIHRvIGltcGxlbWVudCBEaXJlY3REcmF3LiBNb3N0bHkgc3R1YnMsIHNvbWUKLQl0ZXN0Y2FzZXMgd29yay4gUmVxdWlyZXMgdGhlIFhGODZER0EgZXh0ZW5zaW9uIHRvIFhGcmVlODYuCi0JKGNoZWNrIGRlbW8vYmxpemRlbW8uZXhlIGZyb20gdGhlIERpYWJsbyBDRC1ST00pLgotCi0JKiBbZmlsZXMvZHJpdmUuY10KLQlSZXR1cm4gY29ycmVjdCAiQ0RGUyIgZnNuYW1lIHNvIERpYWJsbyBpcyBhIGJpdCBoYXBwaWVyLgotCi1TdW4gRGVjIDIxIDIxOjQ1OjQ4IDE5OTcgIEtldmluIENvemVucyA8a2NvemVuc0BpbnRlcmxvZy5jb20+Ci0KLQkqIFttaXNjL3JlZ2lzdHJ5LmNdCi0JRml4ZWQgYnVncyBpbiB0aGUgcm91dGluZXMgd2hpY2ggcmVhZCB0aGUgV2luZG93cyAnOTUgcmVnaXN0cnkKLQlmaWxlcy4gQWRkZWQgZXh0cmEgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHRoZSBmb3JtYXQgb2YgdGhlIFdpbmRvd3MKLQknOTUgcmVnaXN0cnkgZmlsZXMuCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUZyaSBEZWMgMTkgMTA6NTA6NDYgMTk5NyAgRG91Z2xhcyBSaWRnd2F5ICA8cmlkZ3dheUB3aW5laHEuY29tPgotCi0JKiBbTWFrZS5ydWxlcy5pbl0gW01ha2VmaWxlLmluXSBbZG9jdW1lbnRhdGlvbi9NYWtlZmlsZS5pbl0KLSAJICBbZG9jdW1lbnRhdGlvbi9SRUFETUUuZG9jdW1lbnRhdGlvbl0KLQlGaXJzdCBjdXQgYXQgV2luZSBBUEkgZG9jdW1lbnRhdGlvbi4gTm8gbG9uZ2VyIGluc3RhbGwgcmVmZXJlbmNlCi0JbWFudWFsIGJ5IGRlZmF1bHQuCi0KLVdlZCBEZWMgMTcgMjE6MzI6MjMgMTk5NyAgQW5kcmVhcyBNb2hyIDwxMDAuMzA5MzZAZ2VybWFueS5uZXQ+Ci0KLQkqIFtmaWxlcy9maWxlLmNdCi0JRml4ZWQgR2V0VGVtcEZpbGVOYW1lMTYoKSB0byB1c2UgY3VycmVudCBwYXRoIG9mIHJlcXVlc3RlZCBkcml2ZQotCWFzIG5lZWRlZC4KLQotCSogW2lmMTYzMi9NYWtlZmlsZS5pbl0gW2lmMTYzMi9idWlsdGluLmNdIFtpZjE2MzIvZGNpbWFuMzIuc3BlY10KLQkgIFtpZjE2MzIvbXN2ZnczMi5zcGVjXSBbaWYxNjMyL3RhcGkzMi5zcGVjXSBbaWYxNjMyL3dvdzMyLnNwZWNdCi0JQWRkZWQgbWlzYyBETExzIG5lZWRlZCBieSB2YXJpb3VzIGFwcHMuCi0KLVdlZCBEZWMgMTcgMTI6MDE6NTAgMTk5NyAgTW9ydGVuIEVyaWtzZW4gPG1vcnRlbmVAc2ltLm5vPgotCi0JKiBbaWYxNjMyL2dkaTMyLnNwZWNdIFtpbmNsdWRlL3dpbmRvd3MuaF0gW29iamVjdHMvcGFsZXR0ZS5jXQotCUluc2VydGVkIGVtcHR5IHN0dWIgZm9yIENyZWF0ZUhhbGZ0b25lUGFsZXR0ZS4KLQotVHVlIERlYyAxNiAyMjowODowNiAxOTk3ICBIdXcgRCBNIERhdmllcyA8aC5kYXZpZXMxQHBoeXNpY3Mub3hmb3JkLmFjLnVrPgotCi0JKiBbd2luZG93cy9tZGkuY10KLQlVc2UgVktfVEFCIGluc3RlYWQgb2YgVktfU0VQQVJBVE9SIGluIFRyYW5zbGF0ZU1ESVN5c0FjY2VsKCkuCi0KLQkqIFtncmFwaGljcy9tZXRhZmlsZWRydi9pbml0LmNdCi0JRGVsZXRlREMoKSBvbiBhIE1ldGFEQyBkb2Vzbid0IGRvIGFueXRoaW5nIC0gaXQgc2hvdWxkbid0LiBUaGVyZWZvcmUKLQlmaXggY2xlYW51cCBvZiBNZXRhRENzIGluIENsb3NlTWV0YUZpbGUoKTsgdGhleSBub3cgYWN0dWFsbHkgZ2V0Ci0JcmVtb3ZlZCBmcm9tIHRoZSBHREkgaGVhcCEKLQotCSogW2dyYXBoaWNzL3gxMWRydi94Zm9udC5jXQotCVByZXNlcnZlIEZPX01BVENIX1hZSU5ERVAgZmxhZyBpbiBYRk9OVF9NYXRjaEZJTGlzdCgpLiBTaG91bGQgcmVkdWNlCi0JdGhlIG51bWJlciBvZiBib2xkLWl0YWxpYyBtYXRjaGVzLgotCi1UdWUgRGVjIDE2IDIwOjExOjQzIDE5OTcgIEJlcnRobyBTdHVsdGllbnMgPGJlcnRob0BwYW50ZXIuc29jaS5hYXUuZGs+Ci0KLQkqIFtncmFwaGljcy9wYWludGluZy5jXQotCUluY2x1ZGVkIGFuIGltcGxlbWVudGF0aW9uIG9mIERyYXdTdGF0ZQotCi0JKiBbaWYxNjMyL3RodW5rLmNdCi0JQ2hhbmdlZCBtYW55IGZwcmludGZzIGludG8gZHByaW50Zl90aHVuawotCi0JKiBbaW5jbHVkZS9jYWNoZS5oXSBbZ3JhcGhpY3MvY2FjaGUuY10KLQlOZXcgZmlsZXMgdG8gaG9sZCBjYWNoZWQgaGFuZGxlcyB0byByZWd1bGFyeSB1c2VkIEdESSBvYmplY3QuCi0KLQkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KLQlBZGRlZCBEUkFXU1RBVEV4eCB0eXBlZGVmcwotCUFkZGVkIERTU19ERUZBVUxUIGRlZmluZSBmb3IgRHJhd1N0YXRlCi0KLQkqIFtvYmplY3RzL3RleHQuY10KLQlOZXcgaW1wbGVtZW50YXRpb24gb2YgR3JheVN0cmluZygpCi0KLQkqIFtjb250cm9scy91aXRvb2xzLmNdCi0JSW1wbGVtZW50ZWQgRHJhd0ZyYW1lQ29udHJvbCgpIGZ1bmN0aW9ucwotCUNoYW5nZWQgRHJhd0VkZ2UoKSBiZWhhdmlvdXIgdG8gd2luOTUgaW1wbGVtZW50YXRpb24KLQotTW9uIERlYyAxNSAyMzo0MzowMSAxOTk3ICBNYXJ0aW4gQm9laG1lIDxib2VobWVAaW5mb3JtYXRpay5tdS1sdWViZWNrLmRlPgotCi0JKiBbZ3JhcGhpY3MvcGF0aC5jXSBbaW5jbHVkZS9wYXRoLmhdIFtncmFwaGljcy9wYWludGluZy5jXQotCSAgW2lmMTYzMi9nZGkzMi5zcGVjXSBbaW5jbHVkZS9nZGkuaF0gW2luY2x1ZGUvd2luZG93cy5oXQotCSAgW29iamVjdHMvZGMuY10KLSAgICAgICAgQWRkZWQgcHJlbGltaW5hcnkgc3VwcG9ydCBmb3IgR0RJIHBhdGhzLgotCi0JKiBbb2JqZWN0cy9kYy5jXQotCUFkZGVkIERDX0luaXRfRENfSU5GTyBmdW5jdGlvbiBmb3IgaW5pdGlhbGl6aW5nIFdJTl9EQ19JTkZPCi0Jc3RydWN0dXJlLgotCi0JKiBbaW5jbHVkZS93aW5kb3dzLmhdIFtpbmNsdWRlL2dkaS5oXSBbb2JqZWN0cy9nZGlvYmouY10KLQlBZGRlZCBERUZBVUxUX0dVSV9GT05ULgotCi0JKiBbaW5jbHVkZS93aW5lcnJvci5oXQotCUFkZGVkIGEgZmV3IGVycm9yIGNvZGVzLgotCi0JKiBbbWVtb3J5L2hlYXAuY10KLQlDaGFuZ2VkIEhlYXBBbGxvYyB0byBtYWtlIHRoZSBjb3JyZWN0IGNhbGxzIHRvIFNldExhc3RFcnJvcgotCShub3cgY29uZm9ybXMgdG8gTlQncyBiZWhhdmlvdXIpLgotCi0JKiBbd2luZG93cy93aW4uY10KLQlDaGFuZ2VkIFdJTl9DcmVhdGVXaW5kb3dFeCB0byBhbGxvdyBjaGlsZCB3aW5kb3dzIHdpdGggemVybwotCXdpZHRoIC8gaGVpZ2h0LgotCi1TdW4gRGVjIDE0IDEyOjAxOjA3IDE5OTcgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgotCi0JKiBbaWYxNjMyLypdIFtyZWxheTMyLypdCi0JTW92ZWQgYWxsIDMyLWJpdCByZWxheSBzdHVmZiB0byByZWxheTMyLwotCi0JKiBbZmkxNjMyL3RodW5rLmNdIFt3aW4zMi9rZXJuZWwzMi5jXQotCU1vdmVkIGFsbCBLRVJORUwzMiBvcmRpbmFsIGZ1bmN0aW9ucyB0byBrZXJuZWwzMi5jCi0KLQkqIFttZW1vcnkvc2VsZWN0b3IuY10KLQlJbml0aWFsaXplIHNlbGVjdG9ycyBpbiBBbGxvY1NlbGVjdG9yQXJyYXkuCi0KLQkqIFt0b29scy9idWlsZC5jXQotCUdlbmVyYXRlIEMgaW5zdGVhZCBvZiBhc3NlbWJseSBmb3IgV2luMzIgcmVsYXlzLgotCUZpeGVkIHN0YWNrIGNvcnJ1cHRpb24gaW4gQ2FsbFRvMTYgZnVuY3Rpb25zLCBmb3VuZCBieSBCZXJ0aG8KLQlTdHVsdGllbnMuCi0JCi1TdW4gRGVjIDE0IDEwOjU1OjAwIDE5OTcgIEFuZHJlYXMgTW9ociA8MTAwLjMwOTM2QGdlcm1hbnkubmV0PgotCi0JKiBbaWYxNjMyL01ha2VmaWxlLmluXSBbaWYxNjMyL2J1aWx0aW4uY10gW2lmMTYzMi9vbGUydGhrLnNwZWNdCi0JQWRkZWQgYnVpbHQtaW4gT0xFMlRISy5ETEwuIAotCi0JKiBbaWYxNjMyL3Rvb2xoZWxwLnNwZWNdIFtpbmNsdWRlL3Rvb2xoZWxwLmhdIFttZW1vcnkvc2VsZWN0b3IuY10KLQkgIFttaXNjL3Rvb2xoZWxwLmNdCi0JQWRkZWQgc3R1YnMgZm9yIFN0YWNrVHJhY2VGaXJzdCgpLCBTdGFja1RyYWNlQ1NJUEZpcnN0KCksCi0JU3RhY2tUcmFjZU5leHQoKSwgVVRTZWxlY3Rvck9mZnNldFRvTGluZWFyKCkKLQlhbmQgVVRMaW5lYXJUb1NlbGVjdG9yT2Zmc2V0KCkuCi0KLVNhdCBEZWMgMTMgMTc6MjY6NDEgMTk5NyAgQWxleCBLb3JvYmthICA8YWxleEB0cmFudG9yLnBoYXJtLnN1bnlzYi5lZHU+Ci0KLQkqIFttaXNjL3dpbnNvY2suY10KLQkzMi1iaXQgQVBJIGZpeGVzIGZvciByZXBvcnRlZCBwcm9ibGVtcyAodGhhbmtzIHRvIE1hcmN1cwotCWFuZCBEYXZpZCkuCi0KLQkqIFtncmFwaGljcy94MTFkcnYveGZvbnQuY10KLQlMaXR0bGUgdHdlYWsgaW4gcG9pbnQgc2l6ZSBjYWxjdWxhdGlvbi4KLQotCSogW3dpbmRvd3MvZGVmd25kLmNdIFt3aW5kb3dzL2RjZS5jXSBbd2luZG93cy93aW5oZWxwLmNdCi0JICBbd2luZG93cy93aW5wcm9jLmNdIFt3aW5kb3dzL3dpbi5jXQotCUJ1ZyBmaXhlcy4KLQotU2F0IERlYyAxMyAxNjozNToxNCAxOTk3ICBLYWkgTW9yaWNoIDxrYWkubW9yaWNoQHJoZWluLW5lY2thci5uZXRzdXJmLmRlPgotCi0JKiBbZmlsZXMvZG9zX2ZzLmNdCi0JT3BlbkZpbGUgd2l0aCBlbXB0eSBmaWxlbmFtZSBhbmQgT0ZfUEFSU0UgcmV0dXJucyBjdXJyZW50IGRpci4KLQotCSogW21pc2MvY29tbWRsZy5jXQotCUlnbm9yZSBpbml0aWFsIGRpciBpZiBib2d1cy4KLQotCSogW2ZpbGVzL2ZpbGUuY10KLQlMb2NraW5nIGFuIGlkZW50aWMgcmVnaW9uIGluIGEgZmlsZSBtdXN0IG5vdCBiZSBhbiBlcnJvci4KLQotCSogW21pc2MvbHN0ci5jXQotCVVzZSB3aWRlIGNoYXIgY3R5cGUgZnVuY3Rpb25zLgotCi1GcmkgRGVjIDEyIDIzOjQ2OjIyIDE5OTcgIFV3ZSBCb25uZXMgIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+Ci0KLQkqIFtmaWxlL2RyaXZlLmNdCi0JRmlyc3QgYXR0ZW1wdCBmb3IgR2V0RGlza0ZyZWVTcGFjZUV4LgotCi1GcmkgRGVjIDEyIDIzOjE4OjQxIDE5OTcgIE1hcmN1cyBNZWlzc25lciAgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KLQotCSogW2xvYWRlci9wZV9yZXNvdXJjZS5jXQkKLQlGaXhlZCB3cm9uZ2x5IGFwcGVhcmluZyBtZW51cyBwcm9ibGVtIChvbmx5IHVzZSBkZWZhdWx0IGxvb2t1cHMgaW4KLQlsYXN0IHJlc291cmNlIHN1YnRyZWUpLgotCi0JKiBbbXVsdGltZWRpYS8qLmNdCi0JQWRkZWQgd2luMzIgc3VwcG9ydCBmb3IgdGltZSogYW5kIGpveSogbG93bGV2ZWwgZHJpdmVycywKLQkobm90IGV4Y2Vzc2l2ZWx5IHRlc3RlZCksIHNvbWUgbWlzYyBmaXhlcyBhbmQgY2xlYW51cHMuCi0KLQkqIFttaXNjL3NoZWxsb3JkLmNdW21pc2Mvc2hlbGwuY11bb2xlL2ZvbGRlcnMuY11bb2xlL2lmcy5jXQotCSAgW2luY2x1ZGUvaW50ZXJmYWNlcy5oXVtpbmNsdWRlL3NobG9iai5oXQotCUFkZGVkIHNvbWUgbW9yZSB1bmRvY3VtZW50ZWQgU0hFTEwzMiBmdW5jdGlvbnMsIHNvbWUgc2hlbGwgZm9sZGVyCi0gCWludGVyZmFjZSBzdHVicyBhZGRlZCwgU0hHZXRNYWxsb2MsIFNIR2V0RGVza3RvcEZvbGRlciwKLQlTSEdldFNwZWNpYWxGb2xkZXJMb2NhdGlvbiwgU0hHZXRQYXRoRnJvbUlETGlzdCBzdHVicyBhZGRlZCwKLQlJTWFsbG9jLCBJVW5rbm93biBpbXBsZW1lbnRlZC4KLQotCSogW3dpbmRvd3MvbXNnYm94LmNdCi0JSW1wbGVtZW50ZWQgTWVzc2FnZUJveEluZGlyZWN0Kiwgc29tZSBpbnRlcm5hbCBjaGFuZ2VzLgotCi0JKiBbaWYxNjMyL3RodW5rLmNdCi0JS0VSTkVMXzQzMSBpbXBsZW1lbnRlZC4KLQotCSogW29iamVjdHMvZ2Rpb2JqLmNdCi0JR2V0Q3VycmVudE9iamVjdCBpbXBsZW1lbnRlZC4KLQotV2VkIERlYyAgMyAwMTowOToxNyAxOTk3ICBHb3Jkb24gQ2hhZmZlZSAgPGNoYWZmZWVAYXB1LmNzLmJlcmtlbGV5LmVkdT4KLQotCSogW29iamVjdHMvZGliLmNdCi0JRml4IGEgY291cGxlIHNtYWxsIERJQiBwcm9ibGVtcy4KLQotCSogW2NvbnRyb2xzL2VkaXQuY10KLQlGaXggYSB0eXBvLgotCi0JKiBbZmlsZXMvZG9zX2ZzLmNdCi0JVHJ5IG5vcm1hbCByZWFkZGlyIGluIGNhc2UgZnMgaXMgc3BlY2lmaWVkIGFzIHZmYXQgYnV0IGlzbid0LgotCi0JKiBbZmlsZXMvcHJvZmlsZS5jXQotCUltcGxlbWVudGF0aW9uIG9mIFdyaXRlUHJpdmF0ZVByb2ZpbGVTZWN0aW9uMzJBIGZyb20gVXdlIEJvbm5lcy4KLQotCSogW21pc2MvcHJpbnRkcnYuY10KLQlPcGVuUHJpbnRlcjMyQSBzdHViLCBoZWxwcyBXb3JkOTcgc3RhcnQuCi0KLQkqIFtvYmplY3RzL3RleHQuY10KLQlGaXh1cCBpbXBsZW1lbnRhdGlvbiBvZiBHZXRUZXh0Q2hhcnNldEluZm8uCi0KLQkqIFtzY2hlZHVsZXIvcHJvY2Vzcy5jXQotCUZpeCBlbnZpcm9ubWVudCB2YXJpYWJsZSBleHBhbnNpb24uCi0KLQkqIFt3aW4zMi9jb2RlX3BhZ2UuY10KLQlNYWtlIE11bHRpQnl0ZVRvV2lkZUNoYXIgYW5kIFdpZGVDaGFyVG9NdWx0aUJ5dGUgY29uZm9ybSBpbiByZXR1cm4KLQl2YWx1ZXMgYW5kIGVycm9yIGNvbmRpdGlvbnMgdG8gdGhvc2UgaW4gV2luZG93cyBOVCA0LjAuCi0KLQkqIFt3aW5kb3dzL21lc3NhZ2UuY10KLQlGaXggYnJvYWRjYXN0aW5nIHByb2JsZW1zIGluIFdpbjMyLiAgVGhlIFdpbjMyIGRvY3Mgc2F5IHRvIHVzZQotCUhXTkRfVE9QTU9TVCB0byBicm9hZGNhc3QgdG8gYWxsIFdpbjMyIFdpbmRvd3MuCi0KLQkqIFttZW1vcnkvdmlydHVhbC5jXSBbbG9hZGVyL3BlX2ltYWdlLmNdCi0JRG8gbm90IG1hcCBpbiBWaXJ0dWFsQWxsb2MgaWYgYWRkcmVzcyBpcyBzcGVjaWZpZWQgYW5kIHNwYWNlIGlzCi0Jbm90IGF2YWlsYWJsZS4gIFRoaXMgaXMgcmVxdWlyZWQgYnkgV2luMzIuCi0KLQkqIFtpbmNsdWRlL3Blbi5oXSBbaW5jbHVkZS94MTFkcnYuaF0gW29iamVjdHMvZGMuY10KLQkgIFtvYmplY3RzL3Blbi5jXSBbZ3JhcGhpY3MveDExZHJ2L3Blbi5jXQotCVN1cHBvcnQgZm9yIEV4dENyZWF0ZVBlbi4KLQotVHVlIERlYyAgMiAyMDoyMjowNiAxOTk3ICBNb3J0ZW4gV2VsaW5kZXIgIDx0ZXJyYUBkaWt1LmRrPgotCi0JKiBbKi8qLmNdIFsqLyouaF0KLQlBZGQgbG90cyBvZiBwcm90b3R5cGVzLgotCi0JKiBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdW2luY2x1ZGUvd2luZG93cy5oXVtpbmNsdWRlL3dpbm50LmhdCi0JICBbbWlzYy9jcHUuY10KLQlEZWZpbmUgSXNQcm9jZXNzb3JGZWF0dXJlUHJlc2VudC4KLQotCSogW21pc2MvY3J0ZGxsLmNdCi0gCShDUlRETExfX2dldGN3ZCk6IEFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIHRoZSB0ZXJtaW5hdGluZyB6ZXJvLgotCi0JKiBbbWlzYy92ZXIuY10KLQlJbXByb3ZlIGNoZWNrIGZvciBudWxsIGNvbXBvbmVudCBpbiBfZmluZF9kYXRhW0FXXS4gIFBsdWcgbGVha3MKLQlpbiBWZXJRdWVyeVZhbHVlKi4KLQotCSogW3dpbjMyL2NvbnNvbGUuY11baWYxNjMyL2tlcm5lbDMyLnNwZWNdCi0JQWRkIHN0dWJzIGZvciBHZXRDb25zb2xlQ3Vyc29ySW5mbzMyLCBTZXRDb25zb2xlQ3Vyc29ySW5mbzMyLgotCi0JKiBbd2luZG93cy9tZXNzYWdlLmNdW2lmMTYzMi91c2VyMzIuc3BlY11baW5jbHVkZS93aW5kb3dzLmhdCi0JRGVmaW5lIFNlbmRNZXNzYWdlVGltZW91dCouCi0KLQkqIFtncmFwaGljcy94MTFkcnYveGZvbnQuY10KLQlDaGFuZ2UgYWxnb3JpdGhtIG9mIF9fZ2VuZXJpY0NoZWNrU3VtIHRvIGJlIGFsaWdubWVudCBzYWZlLgotCi0JKiBbbWlzYy9tYWluLmNdIFttaXNjL3dpbnNvY2suY10gW21pc2Mvd2luc29ja19kbnMuY10KLQlJbmNsdWRlIHdpbnNvY2suaCBlYXJseSB0byBhdm9pZCBTb2xhcmlzIHByb2JsZW0uCi0KLQkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KLQlVbmRlZiBGU0hJRlQgYmVmb3JlIHdlIGRlZmluZSBpdC4KLQotCSogW3JjL3dpbmVyYy5jXQotCUluY2x1ZGUgPGZjbnRsLmg+IGluc3RlYWQgb2YgPHN5cy9mY250bC5oPi4KLQotCSogW2ZpbGVzL2ZpbGUuY10KLQlVc2Ugc3RyZXJyb3IgaW4gRklMRV9TZXREb3NFcnJvciBpZiBhdmFpbGFibGUuCi0KLQkqIFtpbmNsdWRlL2NvbmZpZy5oLmluXSBbY29uZmlndXJlLmluXQotCUNoZWNrIGZvciBzdHJlcnJvci4KLQotCSogW29iamVjdHMvZ2Rpb2JqLmNdCi0JTWFrZSBzdGF0aWMgZm9udCBzdHJ1Y3R1cmVzIGFsaWduZWQuCi0KLU1vbiBEZWMgIDEgMTA6MTA6MjEgMTk5NyAgS2FybCBHYXJyaXNvbiAgPGthcmxvc0Blem5ldC5uZXQ+Ci0KLQkqIFt3aW4zMi9jb25zb2xlLmNdIFtpZjE2MzIva2VybmVsMzIuc3BlY10gW2luY2x1ZGUvd2luZG93cy5oXQotCUFkZGVkIHN0dWIgZm9yIEdldE51bWJlck9mQ29uc29sZU1vdXNlQnV0dG9ucy4KLQlBZGRlZCBzdHViIGZvciBQZWVrQ29uc29sZUlucHV0KEEsVykuCi0JRml4ZWQgcGFyYW1ldGVyIGxpc3QgZm9yIFdyaXRlQ29uc29sZShBLFcpLgotCUdldE51bWJlck9mQ29uc29sZUlucHV0RXZlbnRzIG5vdyByZXR1cm5zIDAgZXZlbnRzIGluc3RlYWQgb2YgMQotCShzaW5jZSBsb3ctbGV2ZWwgY29uc29sZSBmdW5jdGlvbnMgYXJlIG5vdCB5ZXQgc3VwcG9ydGVkKS4KLQlHZXRDb25zb2xlTW9kZSBubyBsb25nZXIgcmV0dXJucyBFTkFCTEVfV0lORE9XX0lOUFVUIGFuZAotCUVOQUJMRV9NT1VTRV9JTlBVVCBzaW5jZSB0aGVzZSBhcmUgbm90IGN1cnJlbnRseSBpbXBsZW1lbnRlZC4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotU2F0IE5vdiAyOSAxMjozNToyNiAxOTk3ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KLQotCSogW2lmMTYzMi9idWlsdGluLmNdCi0JQnVpbGQgYSBjb21wbGV0ZSBQRSBoZWFkZXIgZm9yIGJ1aWx0aW4gV2luMzIgbW9kdWxlcy4KLQotCSogW2xvYWRlci9wZV9pbWFnZS5jXSBbbG9hZGVyL21vZHVsZS5jXQotCUhNT0RVTEUzMiBub3cgcG9pbnRzIHRvIHRoZSBsb2FkaW5nIGFkZHJlc3Mgb2YgdGhlIG1vZHVsZS4gVGhlcmUKLQlpcyBubyBsb25nZXIgYSBzZXBhcmF0ZSBQRV9NT0RVTEUgc3RydWN0dXJlLgotCi1GcmkgTm92IDI4IDExOjIxOjQ3IDE5OTcgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgotCi0JKiBbb2xlLypdW2NvbmZpZ3VyZS5pbl1bTWFrZWZpbGUuaW5dW2luY2x1ZGUvaW50ZXJmYWNlcy5oXQotCSAgW2lmMTYzMi9vbGVzdnIzMi5zcGVjXVtpZjE2MzIvb2xlY2xpMzIuc3BlY10KLQlOZXcgZGlyZWN0b3J5LCBtb3ZlZCBPTEUgc3R1ZmYgdGhlcmUuCi0JbmV3IC5zcGVjIGZpbGVzIGZvciBvbGVjbGkzMixvbGVzdnIzMiwgc29tZSBzdHVicyBhZGRlZC4KLQotCSogW21pc2Mvc2hlbGwuY10KLQlBZGRlZCBzdXBwb3J0IGZvciBleHRyYWN0aW5nIGljb25zIGZyb20gUEUgZGxscy4KLQotCSogW21pc2Mvc2hlbGxvcmQuY11baWYxNjMyL3NoZWxsMzIuc3BlY10KLQlBZGRlZCBhIGh1Z2UgaGVhcCBvZiBvcmRpbmFsIG9ubHkgZXhwb3J0ZWQgc2hlbGwgZnVuY3Rpb25zCi0JKHdpbGwgd29yayBvbmx5IGluIFdpbjk1KS4KLQotCSogW2xvYWRlci90YXNrLmNdCi0JSGFjayB0byBtYWtlIE1ha2VQcm9jSW5zdGFuY2UxNiB3b3JrIGluIGFsbCBjYXNlcyAobXBsYXllci5leGUpLgotCi0JKiBbd2luMzIvc3RyaW5nMzIuY11baW5jbHVkZS9zdHJpbmczMi5oXQotCU9ic29sZXRlLCByZW1vdmVkLgotCi0JKiBbd2luZG93cy9rZXlib2FyZC5jXQotCUFkZGVkICpSZWdpc3RlckhvdGtleS4KLQotCSogW29iamVjdHMvZm9udC5jXVtvYmplY3RzL3RleHQuY10KLQlBZGRlZCBHZXRGb250TGFuZ3VhZ2VJbmZvLCBHZXRUZXh0Q2hhcnNldEluZm8uCi0KLVdlZCBOb3YgMjYgMTg6MTA6NDAgMTk5NyAgVXdlIEJvbm5lcyAgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KLQotCSogW21pc2MvbmV0d29yay5jXQotCUluIFdOZXRHZXRDb25uZWN0aW9uMTYgcmV0dXJuIHRoZSBEcml2ZSBsYWJlbCBhbmQgbm90IHRoZSBET1MtQ3dkLgotCU1ha2VzIFdvcmR2aWV3IDYgc3RhcnQgb24gYSBuZXR3b3JrIGNvbm5lY3RlZCBtYWNoaW5lLgotCi0JKiBbY29udHJvbHMvc3RhdHVzLmNdCi0JQ2F0Y2ggYSBOdWxsIHBvaW50ZXIgaW4gU1dfU2V0VGV4dC4KLQotCSogW2ZpbGVzL2Rvc19mcy5jXQotIAlBZGQgTlQ1IGZ1bmN0aW9ucyBHZXRMb25nUGF0aE5hbWUzMi4KLQotCSogW2ZpbGVzL2ZpbGUuY10KLQlNYWtlIEdldFRlbXBGaWxlTmFtZTE2IGFjY2VwdCBkcml2ZSAwIChDdXJyZW50IERyaXZlKSB0b28uCi0JSGFuZGxlIG1vcmUgZXJyb3JzIGFuZCBiZSBtb3JlIHZlcmJvc2UgaW4gRklMRV9TZXREb3NFcnJvciwgZml4Ci0JYW4gZXJyb3IgaW4gRGVsZXRlRmlsZTMyVwotCi0JKiBbbWVtb3J5L3ZpcnR1YWwuY10KLQlJbXBsZW1lbnQgRmx1c2hWaWV3T2ZGaWxlLgotCi0JKiBbbWlzYy9jcnRkbGxdCi0JSW1wbGVtZW50IF9yb3RsIGFuZCBzcGxpdHBhdGggYW5kIGFkZCBhIHN0dWIgZm9yIAotCV9hYm5vcm1hbF90ZXJtaW5hdGlvbi4KLQotCSogW21pc2MvcHJpbnRkcnYuY10KLQlTdHViIGZvciBFbnVtUHJpbnRlcnMzMkEuCi0KLQkqIFt3aW4zMi9uZXdmbnNdCi0JQWRkIFN0dWIgZm9yIFF1ZXJ5UGVyZm9ybWFuY2VGcmVxdWVuY3ksIGNoYW5nZSByZXR1cm4gdmFsdWUKLQlmb3IgUXVlcnlQZXJmb3JtYW5jZUNvdW50ZXIuCi0gCUFkZCBzdHViIGZvciBEZXZpY2VJb0NvbnRyb2wuCi0KLVR1ZSBOb3YgMjUgMTU6NTU6MDEgMTk5NyBNYXJ0aW4gQm9laG1lIDxib2VobWVAaW5mb3JtYXRpay5tdS1sdWViZWNrLmRlPgotCi0JKiBbY29udHJvbHMvY29tYm8uY10gW2NvbnRyb2xzL2VkaXQuY10gW3dpbmRvd3MvZGVmd25kLmNdCi0JICBbd2luZG93cy93aW5wb3MuY10gW3dpbmRvd3Mvd2luLmNdCi0JUmVtb3ZlZCBXSU5fTk9fUkVEUkFXIGZsYWcuCi0KLVR1ZSBOb3YgMjUgMTM6MjA6MzUgMTk5NyAgRG91Z2xhcyBSaWRnd2F5IDxyaWRnd2F5QHRhaWdhLnYtd2F2ZS5jb20+Ci0KLQkqIFtncmFwaGljcy94MTFkcnYvYml0Ymx0LmNdCi0JRml4ZWQgbWVtb3J5IGxlYWsgaW4gQklUQkxUX0dldERzdEFyZWEuCi0KLVN1biBOb3YgMjMgMTQ6MDU6MjMgMTk5NyAgQW5kcmVhcyBNb2hyIDwxMDAuMzA5MzZAZ2VybWFueS5uZXQ+Ci0KLQkqIFtmaWxlcy9kaXJlY3RvcnkuY10KLQlFeHBvcnQgd2luZG93cyBzeXN0ZW0gZGlyZWN0b3J5IHRvIGVudmlyb25tZW50LgotCi0JKiBbaWYxNjMyL01ha2VmaWxlLmluXSBbaWYxNjMyL2J1aWx0aW4uY10gW2lmMTYzMi93MzJza3JubC5zcGVjXQotCSAgW2lmMTYzMi93aW4zMnMxNi5zcGVjXSBbbWlzYy93MzJzY29tYi5jXSBbbWlzYy93MzJza3JubC5jXQotCUFkZGVkIFdpbjMycyBETExzIFczMlNLUk5MIGFuZCBXSU4zMlMxNi4KLQotCSogW2lmMTYzMi9rZXJuZWwzMi5zcGVjXSBbbG9hZGVyL21vZHVsZS5jXQotCUFkZGVkIG1pc2MgZnVuY3Rpb25zIGZvciBXaW4zMnMuCi0KLQkqIFtpZjE2MzIva2VybmVsLnNwZWNdIFtsb2FkZXIvdGFzay5jXQotCUFkZGVkIERlZmluZUhhbmRsZVRhYmxlKCkuCi0KLQkqIFtzY2hlZHVsZXIvcHJvY2Vzcy5jXQotCUZpeGVkIFNldEVudmlyb25tZW50VmFyaWFibGUzMkEoKSB0byBhdm9pZCBoZWFwIGNvcnJ1cHRpb24uCi0KLVNhdCBOb3YgMjIgMTQ6MTE6NDIgMTk5NyAgS3Jpc3RpYW4gTmllbHNlbiAgPGtyaXN0aWFuLm5pZWxzZW5Acmlzb2UuZGs+Ci0KLQkqIFt3aW5kb3dzL3BhaW50aW5nLmNdCi0JRml4IGxlYWsgaW4gQmVnaW5QYWludDE2KCkgZm9yIENTX1BBUkVOVERDIHdpbmRvd3Mgd2hlcmUgdGhlCi0JdXBkYXRlIHJlZ2lvbiB3YXMgbm90IHByb3Blcmx5IHJlbGVhc2VkLgotCi1UaHUgTm92IDIwIDAzOjU1OjI5IDE5OTcgIEdvcmRvbiBDaGFmZmVlIDxjaGFmZmVlQENTLkJlcmtlbGV5LkVEVT4KLQotCSogW2xvYWRlci9wZV9pbWFnZS5jXQotCUltcGxlbWVudGVkIGZvcndhcmRlZCBETEwgZnVuY3Rpb25zLgotCi0JKiBbb2JqZWN0cy9kaWIuY10KLQlBZGRlZCBzdXBwb3J0IGZvciAxNi0gYW5kIDMyLWJpdCBtb2RlIERJQnMuCi0JU3VwcG9ydCBuZWdhdGl2ZSBiaXRtYXAgaGVpZ2h0cy4KLQotCSogW3dpbjMyL3Byb2Nlc3MuY10KLQlBZGRlZCBzdHViIGZvciBDcmVhdGVQcm9jZXNzMzJXLgotCi0JKiBbd2luMzIvc2VjdXJpdHkuY10gW2luY2x1ZGUvbnRkbGwuaF0KLQlBZGRlZCBzdHVicyBmb3IgTG9va3VwQWNjb3VudFNpZDMyQS9XLgotCi0JKiBbc2NoZWR1bGVyL3Byb2Nlc3MuY10KLQlVc2UgdGhlIHNpemUgc3BlY2lmaWVkIGluIHRoZSBQRSBoZWFkZXIgZm9yIHRoZSBwcm9jZXNzIGhlYXAuCi0KLU1vbiBOb3YgMTcgMDA6NTM6MzUgMTk5NyAgTGVuIFdoaXRlIDxwaHJlYWtAY2dvY2FibGUubmV0PgotCi0JKiBbbXNkb3MvaW50M2QuY10KLQlOZXcgZmlsZS4gU3R1YnMgZm9yIGludDNkLgotCi1TdW4gTm92IDE2IDEyOjMwOjAwIFBTVCAxOTk3ICBKYXNvbiBTY2hvbmJlcmcgIDxzY2hvbkBtdGkuc2dpLmNvbT4KLQotCSogW2luY2x1ZGUvYXNwaS5oXQotCUNoYW5nZWQgY29tbWVudCBzdHlsZSBmcm9tIEMrKyB0byBDLgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1TdW4gTm92IDE2IDA3OjQyOjQ0IDE5OTcgIEFsZXggS29yb2JrYSA8YWxleEB0cmFudG9yLnBoYXJtLnN1bnlzYi5lZHU+Ci0KLQkqIFt3aW5kb3dzL2RjZS5jXSBbd2luZG93cy9jbGlwYm9hcmQuY10gW3dpbmRvd3Mvbm9uY2xpZW50LmNdCi0JQnVnIGZpeGVzLgotCi0JKiBbbWlzYy9zaGVsbC5jXSBbcmVzb3VyY2VzLypdCi0JTmV3ICJBYm91dCIgZGlhbG9nLgotCi1TYXQgTm92IDE1IDE3OjMwOjE4IDE5OTcgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgotCi0JKiBbY29uZmlndXJlLmluXSBbTWFrZWZpbGUuaW5dCi0JUmVwbGFjZWQgLS13aXRoLWxpYnJhcnkgb3B0aW9uIGJ5IC0tZGlzYWJsZS1lbXVsYXRvci4gVGhlIGRlZmF1bHQKLSAJaXMgbm93IHRvIGJ1aWxkIGJvdGggdGhlIGxpYnJhcnkgYW5kIHRoZSBlbXVsYXRvci4KLQlSZW5hbWVkIC0td2l0aCBvcHRpb25zIHRvIC0tZW5hYmxlIHRvIGZvbGxvdyBhdXRvY29uZiBndWlkZWxpbmVzLgotCi0JKiBbbG9hZGVyL21haW4uY10gW21pc2NlbXUvbWFpbi5jXSAoTmV3IGZpbGUpCi0JU3BsaXQgaW5pdGlhbGl6YXRpb24gaW4gV2luZWxpYkluaXQvRW11bGF0b3JJbml0LgotCi0JKiBbbG9hZGVyLyouY10KLQlSZW1vdmVkIGFsbCByZW1haW5pbmcgI2lmZGVmJ3MgV0lORUxJQi4KLQotCSogW2NvbnRyb2xzL3dpZGdldHMuY10gW3dpbmRvd3MvbWRpLmNdCi0JQ29udmVydGVkIE1ESUNsaWVudFduZFByb2MgdG8gMzItYml0LgotCi0JKiBbZGVidWdnZXIvYnJlYWsuY10gW2lmMTYzMi9zaWduYWwuY10gW2luY2x1ZGUvc2VsZWN0b3JzLmhdCi0JICBbc2NoZWR1bGVyL3RocmVhZC5jXQotCUNvZGUgYW5kIGRhdGEgc2VsZWN0b3IgdmFsdWVzIGFyZSBub3cgY29tcHV0ZWQgYXQgcnVuLXRpbWUuCi0KLQkqIFtsaWJyYXJ5L2xpYnJlcy5jXQotCU1vdmVkIHRvIGxvYWRlci8gZGlyZWN0b3J5LgotCi0JKiBbbWlzYy9tYWluLmNdIFttaXNjL3ZlcnNpb24uY10gKE5ldyBmaWxlKQotCU1vdmVkIGFsbCB2ZXJzaW9uIHN0dWZmIHRvIHZlcnNpb24uYy4gQ2xlYW5lZCB1cCBhIGJpdC4KLQotCSogW21zZG9zL2RwbWkuY10KLQlVcGRhdGUgdGhlIFJFQUxNT0RFQ0FMTCBzdHJ1Y3R1cmUgb24gcmV0dXJuIGZyb20gcmVhbC1tb2RlCi0JaW50ZXJydXB0LgotCi0JKiBbd2luZG93cy9ldmVudC5jXSBbd2luZG93cy9rZXlib2FyZC5jXQotCUNoYW5nZWQgdGhlIHdheSBldmVudCBjb29yZGluYXRlcyBhcmUgZGV0ZXJtaW5lZC4gRG9uJ3QgcmVseSBvbgotCXRoZSBDb25maWd1cmVOb3RpZnkgZXZlbnQgdmFsdWVzLiBUaGlzIHNob3VsZCBmaXggYWxsIHByb2JsZW1zCi0Jd2l0aCBjdXJzb3IgcG9zaXRpb24gaW4gLWRlc2t0b3AgYW5kIC1tYW5hZ2VkIG1vZGVzLgotCi1TYXQgTm92IDE1IDE2OjA5OjM2IDE5OTcgIFNsYXZlbiBSZXppYyAgPGVzZXJ0ZUBjcy50dS1iZXJsaW4uZGU+Ci0KLQkqIFtjb250cm9scy9idXR0b24uY10KLQkoQlVUVE9OX0NoZWNrQXV0b1JhZGlvQnV0dG9uKTogUHJldmVudCBwb3NzaWJsZSBlbmRsZXNzIGxvb3AuCi0KLVdlZCBOb3YgMTIgMDM6NDI6NDUgMTk5NyAgQ2hyaXMgRmFoZXJ0eSA8Y2hyaXNmQGFtZXJpY2EuY29tPgotCi0JKiBbbWlzYy92ZXIuY10KLQlDaGFuZ2VkIFZlckluc3RhbGwzMkEgdG8gYXNzdW1lIHNyY2RpciBhcyBkZXN0aW5hdGlvbiBpZiBkZXN0ZGlyCi0JaXMgYmxhbmsuICBUaGlzIHdhcyBjYXVzaW5nIGFsb3Qgb2YgRExMIGluc3RhbGxhdGlvbiBpbnRvIFNZU1RFTQotCWRpcmVjdG9yeSB0byBmYWlsLgotCi0JKiBbbG9hZGVyL25lX2ltYWdlLmNdCi0JTkVfTG9hZFNlZ21lbnQgYnVmZmVyWzEwMF0gd2FzIHRvbyBzbWFsbCBhbmQgZ2V0dGluZyBvdmVycnVucy4KLQlDaGFuZ2VkIGl0IHRvIGJ1ZmZlclsyMDBdLgotCi1TYXQgTm92ICA4IDA2OjA5OjU3IDE5OTcgIExlbiBXaGl0ZSA8cGhyZWFrQGNnb2NhYmxlLm5ldD4KLQotCSogW21pc2MvZGRlbWwuY10gW2luY2x1ZGUvZGRlbWwuaF0gW2lmMTYzMi9kZGVtbC5zcGVjXQotCUFkZGVkIHN0dWIgZnVuY3Rpb25zIERkZUNvbm5lY3RMaXN0KCksIERkZVF1ZXJ5TmV4dFNlcnZlcigpLAotCURkZURpc2Nvbm5lY3RMaXN0KCksIERkZVNldFVzZXJIYW5kbGUoKSwgRGRlQWJhbmRvblRyYW5zYWN0aW9uKCksCi0JRGRlUG9zdEFkdmlzZSgpLCBEZGVDcmVhdGVEYXRhSGFuZGxlKCksIERkZUFkZERhdGEoKSwgRGRlR2V0RGF0YSgpLAotCURkZUFjY2Vzc0RhdGEoKSwgRGRlVW5hY2Nlc3NEYXRhKCksIERkZUVuYWJsZUNhbGxiYWNrKCksCi0JRGRlQ21wU3RyaW5nSGFuZGxlcygpLgotCi1GcmkgTm92ICA3IDE5OjQ0OjI2IDE5OTcgIE9sYWYgRmxlYmJlICA8by5mbGViYmVAc2NpZW5jZS1jb21wdXRpbmcuZGU+Ci0KLQkqIFtmaWxlcy9kaXJlY3RvcnkuY10KLQlGaXggdHlwbyBpbiBkaXJlY3RvcnkuYyBbYnJva2UgbG9hZGluZyBvZiBjZHBsYXllciBvbiBudDQwXQotCi0JKiBbbWlzYy9tYWluLmNdCi0JSW1wbGVtZW50ZWQgLXdpbnZlciBudDQwLgotCi0JKiBbbG9hZGVyL3Jlc291cmNlLmNdIFt1c2VyMzIuc3BlY10KLQlTdHVicyBmb3IgQ29weUFjY2VsZXJhdG9yVGFibGUsIERlc3Ryb3kgQWNjZWxlcmF0b3JUYWJsZS4KLQotVGh1IE5vdiAgNiAyMjozNzowNCAxOTk3ICBNb3J0ZW4gV2VsaW5kZXIgIDx0ZXJyYUBkaWt1LmRrPgotCi0JKiBbZmlsZXMvZHJpdmUuY10KLQkoR2V0RGlza0ZyZWVTcGFjZTMyQSk6IENhcCBhdCAyR0IuCi0KLQkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KLQlQcm90b3R5cGUgRHJhd0ljb25FeCBhbmQgQ3JlYXRlRElCU2VjdGlvbjMyLgotCURlZmluZSBPQk1fUkFESU9DSEVDSy4KLQlBZGQgRElfKiBtYWNyb3MuCi0KLQkqIFtvYmplY3RzL2RpYi5jXSBbaWYxNjMyL2dkaS5zcGVjXQotCUNyZWF0ZURJQlNlY3Rpb24gaXMgYSBXSU5BUEkuICBSZW5hbWVkIHRvIENyZWF0ZURJQlNlY3Rpb24zMi4KLQlJbXBsZW1lbnQgQ3JlYXRlRElCU2VjdGlvbjE2LgotCi0JKiBbaWYxNjMyL3VzZXIuc3BlY10gW2lmMTYzMi91c2VyMzIuc3BlY10KLQlBZGQgRHJhd0ljb25FeC4KLQotCSogW29iamVjdHMvY3Vyc29yaWNvbi5jXQotCShDb3B5SWNvbjMyKTogRml4IGJvZ3VzIGltcGxlbWVudGF0aW9uLgotCi0JKiBbb2JqZWN0cy9iaXRtYXAuY10KLQkoQ29weUJpdG1hcDMyKTogTmV3IGZ1bmN0aW9uLgotCShDb3B5SW1hZ2UzMik6IERvIGJpdG1hcHMuCi0KLQkqIFtncmFwaGljcy94MTFkcnYvdGV4dC5jXQotCShYMTFEUlZfRXh0VGV4dE91dCk6IENoYW5nZSBhc2NlbnQgYW5kIGRlc2NlbnQgZGVmYXVsdCB0byBhdm9pZAotCXplcm8tdGhpbmtuZXNzIG92ZXJzdHJpa2UgbGluZS4KLQotCSogW2luY2x1ZGUvZGVidWdzdHIuaF0gW21pc2MvZGVidWdzdHIuY10KLQlOZXcgZmlsZXMuCi0KLQkqIFttc2Rvcy9kcG1pLmNdCi0JRG9uJ3QgcHJvdG90eXBlIGRvX21zY2RleC4gSW4gSU5UX0ludDMxSGFuZGxlciwgaGFuZGxlIHJlYWwtbW9kZQotCWludCAweDIxLCBhaD0weDUyLgotCi0JKiBbbXNkb3MvaW50MmYuY10KLQlBZGQgZHVtbXlzIGZvciAweDE2ODEgYW5kIDB4MTY4Mi4KLQotCSogW21pc2MvcmVnaXN0cnkuY10KLQlGaXggbWVtb3J5IGxlYWtzIGluIFJlZ0RlbGV0ZUtleTMyVy4KLQotCSogW29iamVjdHMvdGV4dC5jXQotCUluIFRFWFRfTmV4dExpbmUsIGZpeCBhbm90aGVyIG9mZi1ieS1vbmUgYnVnLgotCi0JKiBbaW5jbHVkZS9iaXRtYXBzL29ibV9yYWRpb2NoZWNrXQotCU5ldyBmaWxlLiAgKEl0IGEgc21hbGwgY2lyY2xlIHVzZWQgdG8gcmFkaW8tYnV0dG9uIG1lbnUgaXRlbXMKLQl3aGVuIHNlbGVjdGVkLikKLQkKLQkqIFtvYmplY3RzL29lbWJpdG1hcC5jXQotCUFkZCBvYm1fcmFkaW9jaGVjay4KLQotCSogW2luY2x1ZGUvd2luZG93cy5oXSBbaWYxNjMyL3VzZXIzMi5zcGVjXSBbY29udHJvbHMvbWVudS5jXQotCSAgW2lmMTYzMi91c2VyLnNwZWNdCi0JRGVmaW5lIENoZWNrTWVudVJhZGlvSXRlbXsxNiwzMn0uICBEZWZpbmUgR2V0TWVudUl0ZW1SZWN0ezE2LDMyfS4KLQotV2VkIE5vdiAgNSAxMTozMDoxNCAxOTk3ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KLQkqIFttaXNjL21haW4uY10KLQlBdXRvIGFkanVzdCB2ZXJzaW9ucyBkZXBlbmRpbmcgb24gYmluYXJ5LgotCi1UdWUgTm92ICA0IDE1OjIxOjAwIDE5OTcgIEtyaXN0aWFuIE5pZWxzZW4gIDxrcmlzdGlhbi5uaWVsc2VuQHJpc29lLmRrPgotCi0JKiBbY29udHJvbHMvbGlzdGJveC5jXQotCVBhaW50IGZ1bGwgYmFja2dyb3VuZCBpbiBsaXN0Ym94IGl0ZW1zIHdpdGggdGFiIHN0b3BzIGVuYWJsZWQuCi0KLQkqIFtpZjE2MzIvdGh1bmsuY10KLQlDb3B5IHNvbWUgbW9yZSBtZXNzYWdlIHBhcmFtZXRlciBzdHJ1Y3R1cmVzIChEUkFXSVRFTVNUUlVDVDE2LAotCUNPTVBBUkVJVEVNU1RSVUNUMTYpIHRvIHRoZSBzdGFjayBzZWdtZW50IHRvIGZpeCBicm9rZW4gcHJvZ3JhbXMKLQl0aGF0IG5lZWQgdGhpcy4KLQotCSogW3dpbmRvd3MvZGNlLmNdCi0JT25seSBjbGlwIHNpYmxpbmcgd2luZG93cyB3aGVuIHRoZSBwYXJlbnQgaGFzIHRoZSBXU19DTElQU0lCTElOR1MKLQlzdHlsZSBzZXQuCi0KLQkqIFt3aW5kb3dzL2ZvY3VzLmNdCi0JTWFrZSBvcmRlciBvZiBldmVudHMgaW4gRk9DVVNfU3dpdGNoRm9jdXMoKSByZWZsZWN0IEFQSSBkb2NzLgotCi0JKiBbd2luZG93cy9kZWZkbGcuY10KLQlGaXggcHJvYmxlbSB3aXRoIGxvc3Mgb2YgZm9jdXMgaW4gc29tZSBkaWFsb2dzLgotCi0JKiBbd2luMzIvY29kZV9wYWdlLmNdCi0JRml4IHJldHVybiB2YWx1ZSBmb3IgTXVsdGlCeXRlVG9XaWRlQ2hhcigpLgotCi0JKiBbQlVHU10KLQlCQ1cgbm93IHdvcmtzLgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaHUgT2N0IDMwIDIxOjUyOjIzIDE5OTcgIE1hcnRpbiBCb2VobWUgPGJvZWhtZUBpbmZvcm1hdGlrLm11LWx1ZWJlY2suZGU+Ci0KLQkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQotCUNoYW5nZWQgTkNfVHJhY2tTeXNNZW51IHRvIGdpdmUgdGhlIHNhbWUgYmVoYXZpb3VyIGFzIE1TLVdpbmRvd3MsCi0JaS5lLiBzeXN0ZW0gbWVudSBhbHJlYWR5IGFwcGVhcnMgd2hlbiBtb3VzZSBidXR0b24gaXMgZGVwcmVzc2VkLgotCUNoYW5nZWQgTkNfSGFuZGxlTkNMQnV0dG9uRGJsQ2xrIHNvIHRoYXQgZG91YmxlIGNsaWNrcyBvbiBzY3JvbGwKLQliYXIgYXJyb3dzIGFyZSBoYW5kbGVkIHRoZSBzYW1lIHdheSBhcyBzaW5nbGUgY2xpY2tzLgotCi0JKiBbd2luZG93cy93aW5wb3MuY10KLQlGaXhlZCBTZXRXaW5kb3dQb3MzMiB0byBjbGVhciBXSU5fTk9fUkVEUkFXIHdoZW4gU1dQX1NIT1dXSU5ET1cgaXMKLQlzZXQ7IHRoaXMgaXMgdGhlIHdheSBNUy1XaW5kb3dzIGJlaGF2ZXMuCi0KLVRodSBPY3QgMzAgMjE6MDg6NTcgMTk5NyAgTW9ydGVuIFdlbGluZGVyICA8dGVycmFAZGlrdS5kaz4KLQotCSogW2NvbnRyb2xzL3N0YXR1cy5jXQotCUluIFNXX1NldFRleHQsIGZpeCBjb25kaXRpb24sIEkgaG9wZS4KLQotCSogW2NvbnRyb2xzL21lbnUuY10KLSAJKEdldE1lbnVTdGF0ZTMyKTogRG9uJ3QgbWFzayByZXR1cm4gdmFsdWUuIFByaW50IG1vcmUgZGVidWcgaW5mby4KLQkoTUVOVV9NZW51QmFyQ2FsY1NpemUpOiBCZSBtb3JlIGNhcmVmdWwgd2hlbiBwcmludGluZyBkZWJ1ZwotCWluZm9ybWF0aW9uLgotCShNRU5VX1NldEl0ZW1EYXRhKTogRW1wdHkgc3RyaW5ncyBhcmUgc2VwYXJhdG9ycy4KLQotCSogW2dyYXBoaWNzL3gxMWRydi90ZXh0LmNdCi0JRG9uJ3QgcHJvdG90eXBlIENMSVBQSU5HX0ludGVyc2VjdENsaXBSZWN0LgotCi0JKiBbaW5jbHVkZS9kYy5oXQotCVByb3RvdHlwZSBDTElQUElOR19JbnRlcnNlY3RDbGlwUmVjdC4KLQotCSogW29iamVjdHMvZm9udC5jXQotCVJlbW92ZSBub24tcG9ydGFibGUgKGFuZCBmYXVsdHkpIHNtYXJ0bmVzcyBpbiBGT05UX1RleHRNZXRyaWMqdG8qLgotCUluIENyZWF0ZUZvbnQzMlcgYW5kIENyZWF0ZUZvbnQxNiwgaGFuZGxlIG51bGwgZm9udCBuYW1lLgotCi0JKiBbb2JqZWN0cy90ZXh0LmNdCi0gCShURVhUX05leHRMaW5lKTogRml4IGVuZC1vZi1saW5lIGJ1Zy4KLQotCSogW2lmMTYzMi9zaGVsbDMyLnNwZWNdCi0JQWN0aXZhdGUgZXhpc3RpbmcgaW1wbGVtZW50YXRpb24gb2YgRXh0cmFjdEljb25BLgotCi0JKiBbbWlzYy9zaGVsbC5jXQotCUZvciBDb250cm9sX1J1bkRMTCwgYWRkIHR5cGVzIGZvciBwYXJhbWV0ZXJzLgotCi1UaHUgT2N0IDMwIDE0OjU0OjExIDE5OTcgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgotCi0JKiBbY29udHJvbHMvc3RhdGljLmNdIFtpbmNsdWRlL3dpbmRvd3MuaF0gW21pc2Mvc3B5LmNdCi0JQWRkZWQgc29tZSB3aW4zMiBkZWZpbmVzIHRvIHN0YXRpYyBjb250cm9scywgYmFzaWMgU1NfQklUTUFQIHN0eWxlCi0JaGFuZGxpbmcgaW1wbGVtZW50ZWQuIFtwbGVhc2UgYWRkIG1vcmUsIEkgYW0gbGFja2luZyBrbm93bGVkZ2UgYW5kCi0JdGltZV0KLQotCSogW2NvbnRyb2xzL3N0YXR1cy5jXQotCXBhcnRfbnVtIDI1NSBzZWVtcyB0byBpbmRpY2F0ZSB3aG9sZSBzdGF0dXNsaW5lICh3aW45NSBjZHBsYXllci5leGUpCi0KLQkqIFtpZjE2MzIvdGh1bmsuY10gW3Rvb2xzL2J1aWxkLmNdCi0JU3VwcG9ydCBscmV0IGFuZCAweDY2IGxyZXQgY2FsbHMgZm9yIENhbGxUbzE2X3JlZ3MKLQkobmVlZGVkIGZvciBLRVJORUwzMl80NSkKLQlGaXhlZCBLRVJORUwzMl80NSwgUVRfVGh1bmsgKHNob3VsZCB3b3JrIG5vdykuCi0KLQkqIFtpZjE2MzIvcmVsYXkuY11baWYxNjMyL2J1aWx0aW4uY11bdG9vbHMvYnVpbGQuY11baWYxNjMyLyozMi5zcGVjXQotCUFkZGVkIHN0cmluZyBkdW1waW5nIHRvIHJlbGF5IGRlYnVnZ2luZyBmb3Igd2luMzIgYXBpZnVuY3MuCi0KLQkqIFttaXNjL3Zlci5jXQotCUZpeGVkIGFuZCBjbGVhbmVkIHVwIFZlclF1ZXJ5VmFsdWUqLgotCi0JKiBbbXVsdGltZWRpYS8qLmNdW2luY2x1ZGUvbW1zeXN0ZW0uaF1baWYxNjMyL21tc3lzdGVtLnNwZWNdCi0JICBbaWYxNjMyL3dpbm1tLnNwZWNdCi0JV2luMzIgc3VwcG9ydCBmb3IgbG93bGV2ZWwgbXVsdGltZWRpYSBmdW5jdGlvbnMuCi0JQWRkZWQgc29tZSBtaXhlciogbG93bGV2ZWwgZnVuY3Rpb25zLgotCVNvbWUgc21hbGwgZml4ZXMgaW4gdGhlIGF1ZGlvIGxvd2xldmVsIHF1ZXVlIGhhbmRsaW5nLCBjb2RlCi0JcmVmb3JtYXR0aW5nL2NsZWFudXBzLgotCi0JKiBbZGVidWdnZXIvaGFzaC5jXQotCURvbid0IHNob3cgZGlmZmVyZW5jZSBiZXR3ZWVuIDE2Yml0IHN5bWJvbHMgaWYgdGhleSBhcmUgaW4KLQlkaWZmZXJlbnQgc2VnbWVudHMuCi0KLQkqIFtvYmplY3RzL2N1cnNvcmljb24uY10KLQlBZGRlZCBHZXRJY29uSW5mbyAocGFydGlhbCkgYW5kIENyZWF0ZUljb25JbmRpcmVjdC4KLQotCSogW3dpbmRvd3MvbWRpLmNdCi0JRml4ZWQgc29tZSAiYmFkIGNsYXNzIiBwcm9ibGVtcyBhbmQgY3Jhc2hlcyBpbiBNRElDcmVhdGVDaGlsZCwKLQl3aGljaCBoYXBwZW4gaW4gV2luMzIgKGp3cDMyLmV4ZSkuCi0KLVdlZCBPY3QgMjkgMDA6NTc6MjcgMTk5NyAgQnJ1Y2UgTWlsbmVyICA8QnJ1Y2UuTWlsbmVyQGdlbmV0aWNzLnV0YWguZWR1PgotCi0JKiBbaWYxNjMyL3dpbmFzcGkuc3BlY10gW21pc2MvYXNwaS5jXSBbaW5jbHVkZS9hc3BpLmNdCi0JICBbZG9jdW1lbnRhdGlvbi9hc3BpXSBbaW5jbHVkZS9jYWxsYmFjay5oXQotCUFkZGVkIHN1cHBvcnQgZm9yIDE2IGJpdCBBU1BJIGNhbGxzIHRvIGxpbnV4IGdlbmVyaWMgU0NTSS4KLQlUaGUgc3VwcG9ydCBpcyBub3QgY29tcGxldGUsIGJ1dCBhcHBlYXJzIHRvIHJ1biBteSBNdXN0ZWsKLQlzY2FubmVyIGZyb20gd2l0aGluIGlwcGx1cy5leGUuCi0KLU1vbiBPY3QgMjcgMDA6NTk6NDEgMTk5NyAgQWxleCBLb3JvYmthIDxhbGV4QHRyYW50b3IucGhhcm0uc3VueXNiLmVkdT4KLQotCSogW3dpbmRvd3MvZGNlLmNdCi0JREMgcmV1c2UgZnJhbWV3b3JrLgotCi1TdW4gT2N0IDI2IDE4OjQxOjIxIDE5OTcgIEh1dyBEIE0gRGF2aWVzIDxoLmRhdmllczFAcGh5c2ljcy5veGZvcmQuYWMudWs+Ci0KLQkqIFtncmFwaGljcy94MTFkcnYveGZvbnQuY10KLQlTdWJzdGl0dXRlZCBmb250cyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBhbGlhcyB0YWJsZS4gUmVmZXJlbmNlcyB0bwotCXRoZSBvbGQgbmFtZSBhcmUgYWxzbyB1cGRhdGVkLgotCi0JKiBbY29udHJvbHMvY29tYm8uY10KLQlMQl9TRUxFQ1RTVFJJTkczMiBub3QgQ0JfU0VMRUNUU1RSSU5HMzIgc2hvdWxkIGJlIHNlbnQgdG8KLQlDb21ib0xCb3guCi0KLVN1biBPY3QgMjYgMTQ6MjU6MDAgMTk5NyAgTmlraXRhIFYuIFlvdXNoY2hlbmtvIDx5b3VzaEBjcy5tc3Uuc3U+Ci0KLQkqIFtpbmNsdWRlL2RyaXZlLmhdIFtmaWxlcy9kcml2ZS5jXSBbbXNkb3MvaW50MjEuY10KLQlQYXJ0aWFsbHkgaW1wbGVtZW50ZWQgRE9TIGRyaXZlIG1hcHBpbmcgKGludDIxIEFYPTQ0MEYpLgotCi1TYXQgT2N0IDI1IDEzOjAzOjI5IDE5OTcgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgotCi0JKiBbZGVidWdnZXIvZGVidWcubF0KLQlTdXBwb3J0ICcuJyBpbiBpZGVudGlmaWVycy4gVXNlICJ4IC4geSIgdG8gYWNjZXNzIHN0cnVjdHVyZQotCWZpZWxkcy4KLQotCSogW2RlYnVnZ2VyL2hhc2guY10gW2xvYWRlci9wZV9pbWFnZS5jXQotCUxvYWQgZW50cnkgcG9pbnRzIG9mIFdpbjMyIG1vZHVsZXMgb25seSB3aGVuIGVudGVyaW5nIHRoZQotCWRlYnVnZ2VyLgotCi0JKiBbZGVidWdnZXIvYnJlYWsuY10KLQlOZXcgZnVuY3Rpb24gREVCVUdfQWRkTW9kdWxlQnJlYWtwb2ludCgpIHRvIHNldCBhIGJyZWFrcG9pbnQgYXQKLQl0aGUgc3RhcnQgb2YgZXZlcnkgbW9kdWxlLgotCi0JKiBbZmlsZXMvZmlsZS5jXQotCUZJTEVfbW1hcCgpIGNhbiBub3cgZmFrZSBtbWFwKCkgZm9yIHVuYWxpZ25lZCBvZmZzZXRzIG9yIGJyb2tlbgotCWZpbGVzeXN0ZW1zLgotCi0JKiBbaW5jbHVkZS9jYWxsYmFjay5oXSBbbWlzYy9jYWxsYmFjay5jXSBbaWYxNjMyL3RodW5rLmNdCi0JVXNlIGEgdGFibGUgb2YgY2FsbGJhY2tzIGluc3RlYWQgb2YgbWFjcm9zIHRvIGRpZmZlcmVudGlhdGUKLQliZXR3ZWVuIGVtdWxhdG9yIGFuZCBXaW5lbGliLgotCi0JKiBbbG9hZGVyL3Rhc2suY10KLQlJbml0aWFsaXplIGN1cnJlbnQgZGlyZWN0b3J5IGZyb20gY3dkLCBub3QgZnJvbSBtb2R1bGUgcGF0aC4KLQotCSogW3Rvb2xzL2J1aWxkLmNdCi0JUmVhZCBDYWxsVG8xNiBwcm90b3R5cGVzIGRpcmVjdGx5IGZyb20gdGh1bmsuYyBzb3VyY2UgZmlsZS4KLQotCSogW3dpbmRvd3Mvd2lucHJvYy5jXSBbd2luZG93cy9tZGkuY10KLQlBZGRlZCB0cmFuc2xhdGlvbiBmb3IgV01fTURJQUNUSVZBVEUgYW5kIFdNX01ESUdFVEFDVElWRS4KLQotRnJpIE9jdCAyNCAyMTo0MToyNSAxOTk3ICBVd2UgQm9ubmVzICA8Ym9uQGVsZWt0cm9uLmlrcC50dS1kYXJtc3RhZHQuZGU+Ci0KLQkqIFtmaWxlcy9kcml2ZS5jXQotCUFsbG93IGFyZ3VtZW50cyBsaWtlICJhIiBmb3IgdGhlIGRyaXZlIHJlbGF0ZWQgYXBpcy4KLQotCSogW21lbW9yeS9nbG9iYWwuY10KLQlLZWVwIHRoZSBjYWxjdWxhdGlvbiBmb3IgZHdNZW1vcnlMb2FkIGluIHJhbmdlLgotCi0JKiBbbWlzYy9jcnRkbGwuY10KLQlNYWtlIENSVERMTF9nZXRjd2QgdXNlIEdldEN1cnJlbnREaXJlY3RvcnkzMkEgYW5kIGFsbG9jCi0JaXRzIG1lbW9yeSBpZiByZXF1ZXN0ZWQuCi0JSW1wbGVtZW50ZWQgQ1JURExMX3JlbmFtZSBhbmQgQ1JURExMX3N0YXQgbmVlZGVkIGZvcgotCWxjYy13aW4zMjp3ZWRpdC5leGUuCi0JSW1wbGVtZW50ZWQgQ1JURExMX19mdWxscGF0aC4KLQotCSogW21pc2MvY29tbS5jXQotCUhpZ2ggc3BlZWQgbW9kZXMgZm9yIHRoZSAxNi1iaXQgbW9kZSBDb21tIGZ1bmN0aW9ucy4KLQotCSogW21pc2MvY3B1LmNdCi0JQXMgYXBwbGljYXRpb25zIG1heSB0cmVhdCBscE1heGltdW1BcHBsaWNhdGlvbkFkZHJlc3MgYXMgbG9uZywKLQl1c2UgYSB2YWxpZCBsb25nIG51bWJlci4KLQotCSogW21pc2MvbWFpbi5jXQotCUluIFN5c3RlbVBhcmFtZXRlcnNJbmZvMTYgaWdub3JlIFNQSV9HRVRISUdIQ09OVFJBU1QgdG9vLgotCi0JKiBbbWlzYy9vbGUybmxzLmNdCi0JSW1wbGVtZW50IExDTUFQX1VQUEVSQ0FTRSBmb3IgTENNYXBTdHJpbmczMi4KLQotCSogW21pc2Mvd3NwcmludGZdCi0JTWFkZSBXUFJJTlRGX1BhcnNlRm9ybWF0QSB1bmRlcnN0YW5kICV3cy4KLQotCSogW3dpbjMyL2ZpbGUuY10KLQlJZ25vcmUgRklMRV9BVFRSSUJVVEVfTk9STUFMLgotCVN0dWIgZm9yIFJlYWRGaWxlRXguCi0KLUZyaSBPY3QgMjQgMTU6MzY6MDIgMTk5NyAgRG91ZyBSaWRnd2F5IDxyaWRnd2F5QHJvdXRoLnVjc2QuZWR1PgotCi0JKiBbbWVtb3J5L2xvY2FsLmNdCi0JTG9jYWwgaGVhcCBleGhhdXN0aW9uIG1lc3NhZ2Ugbm93IHByaW50cyB3aGljaCBidWlsdGluIGhlYXAgZmlsbGVkLgotCi1GcmkgT2N0IDI0IDAwOjQ2OjM0IDE5OTcgIEh1dyBEIE0gRGF2aWVzIDxoLmRhdmllczFAcGh5c2ljcy5veGZvcmQuYWMudWs+Ci0KLQkqIFt3aW5kb3dzL2RpYWxvZy5jXQotCVJldmVyc2VkIENyZWF0ZUZvbnQxNi8zMlcgdHlwby4KLQotVGh1IE9jdCAyMyAyMzo0NDoyMCAxOTk3ICBLcmlzdGlhbiBOaWVsc2VuICA8a3Jpc3RpYW4ubmllbHNlbkByaXNvZS5kaz4KLQotCSogW2lmMTYzMi91c2VyLnNwZWNdCi0JRml4ZWQgYXJndW1lbnQgbGlzdCBmb3IgQ2hhbmdlQ2xpcGJvYXJkQ2hhaW4uCi0KLQkqIFt3aW5kb3dzL21kaS5jXQotCVBhc3MgY29ycmVjdCBoSW5zdGFuY2UgdG8gQ3JlYXRlV2luZG93MTYoKSBpbiBNRElDcmVhdGVDaGlsZCgpLgotCi1Nb24gT2N0IDIwIDExOjUxOjI0IDE5OTcgIENhcnN0ZW4gRmFsbGVzZW4gPGNmQGl0LmR0dS5kaz4KLQotCSogW29iamVjdHMvbWV0YWZpbGUuY10KLQlBZGRlZCBzdXBwb3J0IGZvciBNRVRBX1NFVFRFWFRDSEFSRVhUUkEuCi0KLQkqIFtvYmplY3RzL3JlZ2lvbi5jXQotCUZpeGVkIGNyYXNoIGluIFhQb2x5Z29uUmVnaW9uIGlmIHRoZXJlIGlzIG9ubHkgb25lIHBvaW50IGluIAotCWluIHRoZSByZWdpb24uCi0KLQkqIFtpZjE2MzIvZ2RpMzIuc3BlY11baW5jbHVkZS9nZGkuaF1baW5jbHVkZS93aW5kb3dzLmhdCi0JICBbb2JqZWN0cy9nZGlvYmouY10KLQlDb21wbGV0ZWQgT0JKX1hYWCBkZWZpbmVzIGluIGdkaS5oLCByZW1vdmVkIE9CSl9YWFggaW4gZ2Rpb2JqLmMgCi0JYW5kIGluY2x1ZGVkIGdkaS5oIGluc3RlYWQuIEltcGxlbWVudGVkIEdldE9iamVjdFR5cGUzMigpLgotCi1UaHUgT2N0IDE2IDE3OjIxOjMyIDE5OTcgIFBoaWxpcHBlIERlIE11eXRlciAgPHBoZG1AaW5mby51Y2wuYWMuYmU+Ci0KLQkqIFtkb2N1bWVudGF0aW9uL3dpbmUudGV4aW5mb10KLQlGaXhlZCBXSU4zMiBhbmQgTWFrZWZpbGVzIGVudHJpZXMgb2YgUmVmZXJlbmNlIG1hbnVhbCBub2RlLCB0aGF0Ci0JbWFkZSBtYWtlaW5mbyBkdW1wIGNvcmUuCi0KLU1vbiBPY3QgMTMgMTc6MTU6NTcgMTk5NyAgUm9iZXJ0IFdpbGhlbG0gIDxyb2JlcnRAcGh5c2lvbC5tZWQudHUtbXVlbmNoZW4uZGU+Ci0KLQkqIFtpZjE2MzIvY3J0ZGxsLnNwZWNdCi0JQWRkZWQgbWlzc2luZyBtYXRoIGZ1bmN0aW9ucyB5MCgpLCB5MSgpLCB5MigpLCBmbG9vcigpLCBmcmV4cCgpLAotCWxkZXhwKCksIG1vZGYoKS4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotU3VuIE9jdCAxMiAxNTowMzowMSAxOTk3ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KLQotCSogW2lmMTYzMi9idWlsdGluLmNdIFtpZjE2MzIvcmVsYXkuY10KLQlSZWxheSBkZWJ1Z2dpbmcgZW50cnkgcG9pbnRzIGFyZSBub3cgZ2VuZXJhdGVkIG9uIHRoZSBmbHkgZm9yCi0JV2luMzIgRExMcy4KLQotCSogW2luY2x1ZGUvc3RhY2tmcmFtZS5oXQotCUFkZGVkIFZBX0xJU1QxNiB0eXBlIGFuZCBtYWNyb3MgdG8gYWNjZXNzIGFyZ3VtZW50cyBvbiB0aGUgMTYtYml0Ci0Jc3RhY2suCi0KLQkqIFttZW1vcnkvZ2xvYmFsLmNdCi0JRml4ZWQgR2xvYmFsSGFuZGxlMzIgdG8gd29yayB3aXRoIGZpeGVkIGJsb2Nrcy4KLQotCSogW21pc2MvZGRlbWwuY10gKE5ldyBmaWxlKQotCUFkZGVkIGEgbG90IG9mIHN0dWJzIGZvciBEREVNTCBmdW5jdGlvbnMuCi0KLQkqIFtvYmplY3RzL2RjLmNdCi0JQWRkZWQgR2V0L1NldEdyYXBoaWNzTW9kZSgpLgotCi0JKiBbb2JqZWN0cy9nZGlvYmouY10gW3dpbmRvd3Mvd2lucG9zLmNdCi0JQWRkZWQgYSBmZXcgc3R1YnMuCi0KLQkqIFt0b29scy9idWlsZC5jXQotCVJlbW92ZWQgJ2J5dGUnLCAnd29yZCcsICdsb25nJyBhbmQgJ3JldHVybicgZW50cnkgcG9pbnRzIGZvciBXaW4zMi4KLQkncmVnaXN0ZXInIGZ1bmN0aW9ucyBjYW4gbm8gbG9uZ2VyIHRha2UgYXJndW1lbnRzIGluIFdpbjMyLgotIAlUaGUgV2luMzIgTkUgbW9kdWxlIGlzIG5vdyBnZW5lcmF0ZWQgYnkgTU9EVUxFX0NyZWF0ZUR1bW15TW9kdWxlLgotCUNhbGxGcm9tMzIgY2FsbGJhY2tzIHJlbW92ZWQgZXhjZXB0IGZvciByZWdpc3RlciBmdW5jdGlvbnMuCi0KLUZyaSBPY3QgMTAgMTg6MjI6MTggMTk5NyAgSm9obiBIYXJ2ZXkgPGpvaG5AZGl2aXNpb24uY28udWs+Ci0KLQkqIFtncmFwaGljcy93aW4xNmRydi9NYWtlZmlsZS5pbl0gW2dyYXBoaWNzL3dpbjE2ZHJ2L2JydXNoLmNdCi0JICBbZ3JhcGhpY3Mvd2luMTZkcnYvZ3JhcGhpY3MuY10gW2dyYXBoaWNzL3dpbjE2ZHJ2L2luaXQuY10KLQkgIFtncmFwaGljcy93aW4xNmRydi9vYmplY3RzLmNdIFtncmFwaGljcy93aW4xNmRydi9wZW4uY10KLQkgIFtncmFwaGljcy93aW4xNmRydi9wcnRkcnYuY10gW2dyYXBoaWNzL3dpbjE2ZHJ2L3RleHQuY10KLQkgIFtpbmNsdWRlL2NhbGxiYWNrLmhdIFtpbmNsdWRlL3dpbjE2ZHJ2LmhdCi0JQWRkZWQgc3VwcG9ydCBmb3IgcGVucyBhbmQgYnJ1c2hlcyBpbiBTZWxlY3RPYmplY3QuIEFkZGVkIHN1cHBvcnQKLQlmb3IgTGluZVRvLCBNb3ZlVG9FeCwgUGF0Qmx0ICh2ZXJ5IHByZWxpbWluYXJ5KSwgUG9seWdvbiBhbmQKLQlSZWN0YW5nbGUuIFRleHQgaXMgZHJhd24gaW4gdGhlIGNvcnJlY3QgcGxhY2UgbW9yZSBvZnRlbi4gVGhlc2UKLQljaGFuZ2VzIG1heSBvbmx5IHdvcmsgd2l0aCB0aGUgV2luZG93cyBQb3N0c2NyaXB0IGRyaXZlciBzaW5jZQotCW1hbnkgb3RoZXIgZHJpdmVycyBub3cgbmVlZCBtb3JlIEdESSBzdXBwb3J0LgotCi1UdWUgT2N0ICA3IDIxOjA2OjIzIDE5OTcgIEtyaXN0aWFuIE5pZWxzZW4gIDxrcmlzdGlhbi5uaWVsc2VuQHJpc29lLmRrPgotCi0JKiBbZGVidWdnZXIvZXhwci5jXQotCUZpeGVkIHR5cG8gZm9yIHRoZSA+PiBvcGVyYXRvci4KLQotCSogW2xvYWRlci90YXNrLmNdCi0JRml4ZWQgU3dpdGNoU3RhY2tUbygpOyBpdCB1c2VkIHRvIHJldHVybiB3aXRoIHRoZSBuZXcgc3RhY2sgcGxhY2VkCi0JZm91ciBieXRlcyB0b28gaGlnaCBpbiBtZW1vcnkuCi0KLQkqIFtsb2FkZXIvbmVfcmVzb3VyY2UuY10KLQlSZW1vdmVkIHByb2JsZW1hdGljIG5hbWV0YWJsZSBjb2RlIGludHJvZHVjZWQgaW4gV2luZSA5NzA5MTQuCi0KLVR1ZSBPY3QgIDcgMDI6MjQ6MTIgMTk5NyAgRGltaXRyaWUgTy4gUGF1biAgPGRpbWlAY3MudG9yb250by5lZHU+Ci0KLQkqIFtjb250cm9scy9jb21tY3RybC5jXQotCUFkZGVkIHRoaXMgZmlsZXMgdG8gaG9sZCBmdW5jdGlvbnMgZnJvbSB0aGUgY29tY3RsMzIuZGxsCi0JQWRkZWQgdG8gdGhpcyBmaWxlcyBzb21lIGZ1bmN0aW9ucyBzY2F0dGVyZWQgaW4gZGlmZmVyZW50IHBsYWNlcwotCShzdWNoIGFzIEluaXRDb21tb25Db250cm9scykgYW5kIGFkZGVkIHNvbWUgbmV3IG9uZXMgYXMgd2VsbC4KLQotCSogW2luY2x1ZGUvc3lzY29sb3IuaF0gW3dpbmRvd3Mvc3lzY29sb3IuY10KLQlBZGRlZCBwcm9wZXIgZW50cmllcyBmb3IgYWxsIHBvc3NpYmxlIENPTE9SXyogdmFsdWVzLgotCi0JKiBbb2JqZWN0cy9icnVzaC5jXQotCU1vZGlmaWVkIEdldFN5c0NvbG9yQnJ1c2ggdG8gcmV0dXJuIHRoZSBjb3JyZWN0IGJydXNoIGZvciAKLQlhbGwgcG9zc2libGUgQ09MT1JfKiBjb25zdGFudHMuCi0KLVNhdCBPY3QgIDQgMjM6MzU6MjAgMTk5NyAgVS5Cb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnRoLWRhcm1zdGFkdC5kZT4KLQotCSogW2xvYWRlci9tb2R1bGUuY10gW3NjaGVkdWxlci9wcm9jZXNzLmNdIFt3aW4zMi9lbnZpcm9ubWVudC5jXQotCUFub3RoZXIgYXBwcm9hY2ggdG8gZ2V0IGFjY2VzcyB0byBhbiB1bnJlc3RyaWN0ZWQgY29tbWFuZGxpbmUuCi0KLQkqIFttaXNjL2NydGRsbC5jXQotCU1ha2UgZmNsb3NlIHdvcmsgYWdhaW4uCi0KLQkqIFtpZjE2MzIvY3J0ZGxsLnNwZWNdCi0JVXNlIHNwcmludGYgZm9yIGNydGRsbC1zcHJpbnRmIGFnYWluIGFzIGUuZy4gJWcgaXMgbm90IGF2YWlsYWJsZQotCWZvciB3c3ByaW50Zi4KLQotCSogW21pc2Mvd3NwcmludGYuY10KLQlNYWtlIFdQUl9TVFJJTkcgd29yayBpbiBtb3JlIHNpdHVhdGlvbnMuCi0JQWRkZWQgZGVidWcgb3V0cHV0IGZvciB0aGUgd3NwcmludGYgZnVuY3Rpb25zLgotCi0JKiBbbWlzYy9jcnRkbGwuY10gW21pc2MvbWFpbi5jXQotCVVzZSBhcmd2WzBdIGFzIGNvbWFuZCB3aXRoIENSVERMTF9zeXN0ZW0uCi0KLUZyaSBPY3QgIDMgMTQ6MDA6MjkgTUVUIERTVCAxOTk3ICBKYW4gV2lsbGFtb3dpdXMgIDxqYW5AamFuaGguc2huZXQub3JnPgotCi0JKiBbKi8qXQotICAgICAgICBSZW1vdmVkIHNvbWUgY29tcGlsZXIgd2FybmluZ3MuCi0KLQkqIFttc2Rvcy9pbnQxNS5jXQotICAgICAgICBOZXcgSU5UIDE1IGhhbmRsZXIuCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVNhdCBTZXAgMjcgMTI6MzY6NTYgMTk5NyAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+Ci0KLQkqIFtpZjE2MzIvcmVsYXkuY10KLQlNYWRlIENhdGNoIGFuZCBUaHJvdyBhbHNvIHNhdmUgJXNpIGFuZCAlZGkgKHVudGVzdGVkKS4KLQotCSogW21lbW9yeS9zZWxlY3Rvci5jXQotCUFkZGVkIGNoZWNrIGZvciAlZnMgYW5kICVncyBpbiBTRUxFQ1RPUl9GcmVlQmxvY2suCi0KLQkqIFtyYy93aW5lcmMuY10KLQlHZW5lcmF0ZWQgZmlsZXMgbm8gbG9uZ2VyIGRlcGVuZCBvbiBXaW5lIGluY2x1ZGVzLgotCU1hZGUgLmggZ2VuZXJhdGlvbiBvcHRpb25hbC4KLQotCSogW3Rvb2xzL2J1aWxkLmNdIFtsb2FkZXIvdGFzay5jXQotCUFkZGVkIENBTEwzMl9Jbml0IGZ1bmN0aW9uLgotCUFkZGVkIHBvc3NpYmlsaXR5IHRvIHBhc3MgYXJndW1lbnRzIHdoZW4gdXNpbmcgQ0FMTFRPMTZfcmVnc18uCi0JMzItYml0IHN0YWNrIHBvaW50ZXIgaXMgbm93IHNhdmVkIG9uIHRoZSAxNi1iaXQgc3RhY2ssIGluc3RlYWQgb2YKLQl1c2luZyBJRjE2MzJfU2F2ZWQzMl9lc3AuCi0JUmVtb3ZlZCBDYWxsVG8zMiBjYWxsYmFja3MuCi0KLQkqIFt0b29scy9tYWtlZGVwLmNdIFsqL01ha2VmaWxlLmluXQotCUFkZGVkIHN1cHBvcnQgZm9yIGRpcmVjdGx5IGdlbmVyYXRpbmcgZGVwZW5kZW5jaWVzIGZvciAueSwgLmwgYW5kCi0JLnJjIGZpbGVzLiBNb2RpZmllZCB0aGUgbWFrZWZpbGVzIHRvIHVzZSB0aGlzIGZlYXR1cmUuCi0KLQkqIFt3aW5kb3dzL3dpbnByb2MuY10gW2lmMTYzMi90aHVuay5jXQotCVVzZSBDQUxMVE8xNl9yZWdzIHRvIGNhbGwgd2luZG93IHByb2NlZHVyZXMuCi0KLVRodSBTZXAgMjUgMTI6MTg6NTcgMTk5NyAgS3Jpc3RpYW4gTmllbHNlbiA8a3Jpc3RpYW4ubmllbHNlbkByaXNvZS5kaz4KLQotCSogW2lmMTYzMi9rZXJuZWwuc3BlY10KLQlDaGFuZ2VkIGVudHJ5IGZvciBTd2l0Y2hTdGFja0JhY2sgdG8gcmVtb3ZlIGFyZ3VtZW50cyBmcm9tIHN0YWNrCi0JdXBvbiByZXR1cm4gKGFyZ3VtZW50cyBsZWZ0IG92ZXIgZnJvbSBwcmV2aW91cyBTd2l0Y2hTdGFja1RvKCkpLgotCUJvcmxhbmQgQysrIDQuMCBub3cgY29tcGlsZXMgIkhlbGxvIFdvcmxkIiAoYnV0IGNyYXNoZXMgYWZ0ZXIKLQlvdXRwdXR0aW5nIHRoZSAuZXhlKS4KLQotV2VkIFNlcCAyNCAxMzo1NDo0NCAxOTk3ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KLQotCSogW2ZpbGVzL2RpcmVjdG9yeS5jXQotCVNlYXJjaFBhdGggbWlnaHQgZ2V0IE5VTEwgYnVmZmVyIChlbXB0eSBMUlUgbGlzdCBpbiB3b3JkcGFkKS4KLQotCSogW21lbW9yeS9zZWxlY3Rvci5jXQotCUFkZGVkIFNVbk1hcExTKi4KLQotCSogW2xvYWRlci9wZV9pbWFnZS5jXQotCUJlIGFibGUgdG8gcnVuIGV4ZWN1dGVhYmxlcyBmcm9tIG5vbiBtbWFwKClibGUgZmlsZXN5c3RlbXMuCi0JUEVfTG9hZExpYnJhcnkgYWRkcyBsaWJyYXJ5cyBsb2FkZWQgYnkgYW5vdGhlciBwcm9jZXNzIHRvCi0JaXRzIG93biBtb2RyZWYgbGlzdCB0b28uCi0KLQkqIFt3aW5kb3dzL2tleWJvYXJkLmNdW2luY2x1ZGUvYWNjZWwuaF1bbG9hZGVyL3Jlc291cmNlLmNdCi0JRml4ZWQgYWNjZWxlcmF0b3IgbGVha2FnZSwgdXNlIFNESyBkZWZpbmVzL25hbWVzLgotCi0JKiBbZ3JhcGhpY3MvZW52LmNdW21pc2MvbWFpbi5jXQotCVNldC9HZXRFbnZpcm9uZW1udCBoYXZlIG5vdGhpbmcgdG8gZG8gd2l0aCBlbnZpcm9ubWVudCB2YXJzLAotCWJ1dCB3aXRoIFByaW50ZXIgRW52aXJvbm1lbnQuCi0KLQkqIFtncmFwaGljcy9lc2NhcGUuY10KLQlFc2NhcGUzMjogbWFwIGFyZ3MgYmFjayB0byBzZWdtZW50ZWQgcG9pbnRlcnMuCi0KLQkqIFt3aW5kb3dzL3dpbi5jXQotCVdTX1BPUFVQfFdTX0NISUxEIHdpbmRvd3MgZG9uJ3QgbmVlZCBhIHBhcmVudCB3aW5kb3cgKFNESykuCi0KLVR1ZSBTZXAgMTYgMTQ6NDA6MTYgMTk5NyAgUm9iZXJ0IFdpbGhlbG0gIDxyb2JlcnRAcGh5c2lvbC5tZWQudHUtbXVlbmNoZW4uZGU+Ci0KLQkqIFtpZjE2MzIvY3J0ZGxsLnNwZWNdIFttaXNjL2NydGRsbC5jXQotCUFkZGVkIHNpZ25hbCgpLgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaHUgU2VwIDExIDE4OjI0OjU2IDE5OTcgIFBoaWxpcHBlIERlIE11eXRlciAgPHBoZG1AaW5mby51Y2wuYWMuYmU+Ci0KLQkqIFtvYmplY3RzL2RjLmNdCi0JSW4gRENfU2V0dXBHQ0ZvclBhdEJsdCwgcmVwbGFjZSBSMl9OT1QgYnkgR1h4b3Igd2l0aCAoYmxhY2sgeG9yIHdoaXRlKS4KLQotVHVlIFNlcCAgOSAyMzowNDowMiAxOTk3ICBVLiBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnRoLWRhcm1zdGFkdC5kZT4KLQotCSogW21lbW9yeS92aXJ0dWFsLmNdIAotCURvIG5vdCB3cml0ZSBkZWJ1Z2dpbmcgaW5mbyB1bmNvbmRpdGlvbmFsbHkgdG8gc3RkZXJyLgotCi0JKiBbZmlsZXMvcHJvZmlsZS5jXQotCUNhbGwgUFJPRklMRV9HZXRTZWN0aW9uIGluIFBST0ZJTEVfR2V0U3RyaW5nIGZvciBrZXlfbmFtZSAiIiB0b28uCi0KLQkqIFttaXNjL2NydGRsbC5jXQotCU1hbnkgbmV3IGZ1bmN0aW9ucy4KLQotCSogW2luY2x1ZGUvd2luZG93cy5oXSBbd2luZG93cy93aW5wb3MuY10KLQlDbGllbnRUb1NjcmVlbjE2IGRvZXNuJ3QgaGF2ZSBhIHJldHVybiB2YWx1ZS4KLQotU3VuIFNlcCAgNyAxMDowNjozOSAxOTk3ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KLQotCSogW21pc2MvbWFpbi5jXSBbQVVUSE9SU10KLQlVcGRhdGUgdGhlIGxpc3Qgb2YgY29udHJpYnV0b3JzLiBQbGVhc2UgbGV0IG1lIGtub3cgaWYgSSBmb3Jnb3QKLQlzb21lb25lLgotCi0JKiBbaWYxNjMyLyouc3BlY10gW2lmMTYzMi9idWlsdGluLmNdIFt0b29scy9idWlsZC5jXQotCU9yZGluYWwgYmFzZSBmb3IgV2luMzIgRExMcyBpcyBub3cgY29tcHV0ZWQgYXV0b21hdGljYWxseSBmcm9tIHRoZQotCWxvd2VzdCBvcmRpbmFsIGZvdW5kLgotCi0JKiBbaW5jbHVkZS93aW50eXBlcy5oXQotCVdJTkFQSSBpcyBub3cgZGVmaW5lZCBhcyBhdHRyaWJ1dGUoKHN0ZGNhbGwpKS4gVGhpcyB3aWxsIHJlcXVpcmUKLQlnY2MgdG8gY29tcGlsZS4KLQotCSogW2lmMTYzMi90aHVuay5jXQotCVJlbW92ZWQgV2luMzIgdGh1bmtzIChubyBsb25nZXIgbmVlZGVkIHdpdGggc3RkY2FsbCkuCi0KLQkqIFtpZjE2MzIvY3J0ZGxsLnNwZWNdIFttaXNjL2NydGRsbC5jXQotCU1ha2Ugc3VyZSB3ZSBvbmx5IHJlZmVyZW5jZSBjZGVjbCBmdW5jdGlvbnMgaW4gdGhlIHNwZWMgZmlsZS4KLQotCSogW29iamVjdHMvZGMuY10KLQlVc2UgQ2FwTm90TGFzdCBkcmF3aW5nIHN0eWxlIGZvciAxLXBpeGVsIHdpZGUgbGluZXMuCi0KLQkqIFt0b29scy9idWlsZC5jXQotCUFkZGVkICdkb3VibGUnIGFyZ3VtZW50IHR5cGUuCi0JQWRkZWQgJ3ZhcmFyZ3MnIGZ1bmN0aW9uIHR5cGUgZm9yIFdpbjMyLgotCU1hZGUgQ2FsbFRvMTZfeHh4IGZ1bmN0aW9ucyBzdGRjYWxsLgotCi1GcmkgU2VwICA1IDE0OjUwOjQ5IDE5OTcgIEFsZXggS29yb2JrYSA8YWxleEB0cmFudG9yLnBoYXJtLnN1bnlzYi5lZHU+Ci0KLQkqIFt0b29scy9idWlsZC5jXSBbd2luZG93cy93aW4uY10gW3dpbmRvd3MvZXZlbnQuY10gW3dpbmRvd3MvbWVzc2FnZS5jXQotCU1vcmUgZml4ZXMgdG8gZ2V0IG1lc3NhZ2UgZXhjaGFuZ2UgY2xvc2VyIHRvIHRoZSBvcmlnaW5hbC4KLQotCSogW21pc2Mvc3B5LmNdCi0JTWVzc2FnZSBsb2dzIG5vdyBjb250YWluIHdpbmRvdyBuYW1lcy4KLQotCSogW2xvYWRlci9yZXNvdXJjZS5jXSBbbG9hZGVyL25lX3Jlc291cmNlLmNdIFtsb2FkZXIvdGFzay5jXQotCSAgW29iamVjdHMvY3Vyc29yaWNvbi5jXSBbd2luZG93cy91c2VyLmNdCi0JQWRkZWQgc29tZSBvYnNjdXJlIGZlYXR1cmVzIHRvIGZpeCBtZW1vcnkgbGVha3MuCi0KLUZyaSBTZXAgIDUgMDA6NDY6MjggMTk5NyAgSmFuIFdpbGxhbW93aXVzIDxqYW5AamFuaGguc2huZXQub3JnPgotCi0JKiBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdIFt3aW4zMi9uZXdmbnMuY10KLQlBZGRlZCBzdHViIGZvciBVVFJlZ2lzdGVyKCkgYW5kIFVUVW5SZWdpc3RlcigpLgotCi1UaHUgU2VwICA0IDEyOjAzOjEyIDE5OTcgIEZyYW5zIHZhbiBEb3Jzc2VsYWVyIDxkb3Jzc2VsQHJ1bGhtcGM0OS5MZWlkZW5Vbml2Lm5sPgotCSogW2NvbnRyb2xzL2VkaXQuY10KLQlBbGxvdyBBU0NJSSBjb2RlcyA+IDEyNyBpbiBXTV9DSEFSLgotCi1Nb24gU2VwICAxIDE3OjIzOjI0IDE5OTcgIERpbWl0cmllIE8uIFBhdW4gIDxkaW1pQG1haWwuY3MudG9yb250by5lZHU+Ci0KLQkqIFtjb250cm9scy93aWRnZXRzLmNdCi0JSW4gSW5pdENvbW1vbkNvbnRyb2xzLCByZW1lbWJlciB0aGUgbmFtZSBvZiB0aGUgY2xhc3MKLQliZWNhdXNlIGxwc3pDbGFzc05hbWUgd2FzIG1hZGUgdG8gcG9pbnQgdG8gYSBsb2NhbCBhcnJheQotCUFkZGVkIHRoZSBQcm9ncmVzc0JhciB0byB0aGUgbGlzdCBvZiBpbXBsZW1lbnRlZCBjb250cm9scy4KLQlDYWxsIEluaXRDb21tb25Db250cm9scyBmcm9tIFdJREdFVFNfSW5pdCB0byByZWdpc3RlciBhbGwKLQlpbXBsZW1lbnRlZCBDb21tb24gQ29udHJvbHMuCi0JCi0JKiBbaW5jbHVkZS9jb21tY3RybC5oXQotCUFkZGVkIG1pc2MgZGVjbCBmb3IgdGhlIFByb2dyZXNzIEJhci4KLQotCSogW2NvbnRyb2xzL3Byb2dyZXNzLmNdIFtpbmNsdWRlL3Byb2dyZXNzLmhdCi0JRmlyc3QgYXR0ZW1wdCBhdCBpbXBsZW1lbnRpb25nIHRoZSBQcm9ncmVzcyBCYXIgY2xhc3MuCi0KLQkqIFtvYmplY3RzL2JydXNoLmhdCi0JSW1wbGVtZW50YXRpb24gZm9yIEdldFN5c0NvbG9yQnJ1c2hbMTZ8MzJdCi0KLQkqIFtjb250cm9scy9zdGF0dXMuY10KLQlVc2UgRHJhd0VkZ2UgdG8gZHJhdyB0aGUgYm9yZGVycyBhbmQgZmlsbCB0aGUgYmFja2dyb3VuZAotCi0JKiBbY29udHJvbHMvdWl0b29scy5jXQotCUFkZGVkIERyYXdEaWFnRWRnZTMyIGFuZCBEcmF3UmVjdEVkZ2UzMgotCi0JKiBbZ3JhcGhpY3MvcGFpbnRpbmcuY10KLQlJbXBsZW1lbnQgRHJhd0VkZ2VbMTZ8MzJdCi0JU3RhcnRlZCBEcmF3RnJhbWVDb250cm9sMzIKLQotTW9uIFNlcCAgMSAxMDowNzowOSAxOTk3ICBMYXdzb24gV2hpdG5leSA8bGF3c29uX3doaXRuZXlAanVuby5jb20+Ci0KLQkqIFttaXNjL2NvbW0uY10gW2luY2x1ZGUvd2luZG93cy5oXQotCVNldENvbW1FdmVudE1hc2sgcmV0dXJucyBhIFNFR1BUUi4KLQotU3VuIEF1ZyAzMSAyMzoyODozMiAxOTk3ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KLQotCSogW2xvYWRlci9wZV9pbWFnZS5jXVtsb2FkZXIvbW9kdWxlLmNdW2luY2x1ZGUvcGVfaW1hZ2UuaF0KLQkgIFtpbmNsdWRlL21vZHVsZS5oXQotCUNsZWFuZWQgdXAgdGhlIHdob2xlIFdpbjMyIGxpYnJhcnkgbWVzcyAoYSBiaXQpLgotCi0JKiBbZGVidWdnZXIvc3RhYnMuY10KLQlJZiAnd2luZScgaGFzIG5vIGFic29sdXRlIHBhdGggYW5kIGlzbid0IGZvdW5kLCBjaGVjayAkUEFUSCB0b28uCi0KLQkqIFttaXNjL29sZTJubHMuY10KLQlTb21lIGZpeGVzLgotCi0JKiBbbWlzYy92ZXIuY10KLQlBZGRlZCBzdXBwb3J0IGZvciBQRSBzdHlsZSB2ZXJzaW9uIHJlc291cmNlcy4KLQotCSogW21lbW9yeS9zdHJpbmcuY10KLQlDaGVjayBmb3IgTlVMTCBwb2ludGVycyB0byBfbHN0ciogZnVuY3Rpb25zLCBqdXN0IGFzIFdpbmRvd3M5NSBkb2VzLgotCi0JKiBbbXVsdGltZWRpYS90aW1lLmNdCi0JTWFkZSBsaXN0IG9mIHRpbWVycyBhIHNpbXBsZSBsaW5rZWQgbGlzdC4KLQotCSogW2xvYWRlci9yZXNvdXJjZS5jXQotCU5ldHNjYXBlIDMgc2VlbXMgdG8gcGFzcyBORUdBVElWRSByZXNvdXJjZSBJZHMgKGluIGFuCi0JdW5zaWduZWQgaW50LCB5ZXMpLiBEb24ndCBrbm93IHdoeSwgZml4ZWQgaXQgYW55d2F5LgotCi0JKiBbb2JqZWN0cy9iaXRtYXAuY10KLQlMb2FkSW1hZ2VXIGFkZGVkLgotCi0JKiBbaW5jbHVkZS93aW4uaF1bd2luZG93cy93aW4uY10KLQlDaGFuZ2Ugd0lEbWVudSBmcm9tIFVJTlQxNiB0byBVSU5UMzIgYW5kIGNoYW5nZWQgdGhlCi0JU2V0V2luZG93KExvbmd8V29yZCkgYWNjb3JkaW5nbHkuCi0KLVRodSBBdWcgMjggMTk6MzA6MDggMTk5NyAgTW9ydGVuIFdlbGluZGVyICA8dGVycmFAZGlrdS5kaz4KLQotCSogW2luY2x1ZGUvd2luZG93cy5oXQotCUFkZCBhIGZldyBtb3JlIGNvbG9ycyBkZWZpbmVkIGZvciBXaW45NS4KLQlBZGQgYSBmZXcgbW9yZSBicnVzaCBzdHlsZXMuCi0KLQkqIFt3aW5kb3dzL3N5c2NvbG9yLmNdCi0gCUFkZCBlcnJvciBjaGVja3MgZm9yIFNZU0NPTE9SX1NldENvbG9yLCBTWVNDT0xPUl9Jbml0LAotCUdldFN5c0NvbG9yMTYsIEdldFN5c0NvbG9yMzIuICBBZGQgc3VwcG9ydCBmb3IgYWJvdmUgY29sb3JzLgotCi1TdW4gQXVnIDI0IDE2OjIyOjU3IDE5OTcgIEFuZHJldyBUYXlsb3IgPGF0YXlsb3JAY2FkdmlzaW9uLmNvbT4KLQotCSogW211bHRpbWVkaWEvbW1zeXN0ZW0uY10KLQlDaGFuZ2VkIG1taW9EZXNjZW5kIHRvIHVzZSBtbWlvIGZ1bmN0aW9ucyBmb3IgZmlsZSBJL08sIG5lY2Nlc3NhcnkKLQlmb3IgbWVtb3J5IGZpbGVzLgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1TYXQgQXVnIDIzIDAwOjA1OjIzIDE5OTcgIEFuZHJlYXMgTW9ociA8MTAwLjMwOTM2QGdlcm1hbnkubmV0PgotCi0JKiBbaWYxNjMyL2tlcm5lbC5zcGVjXSBbaWYxNjMyL21tc3lzdGVtLnNwZWNdCi0JQWRkZWQgc29tZSBzdHVicy4KLQotCSogW2luY2x1ZGUvbmVleGUuaF0gW2xvYWRlci9tb2R1bGUuY10KLQlBZGRlZCB3YXJuaW5nIGZvciBPUy8yIGV4ZWN1dGFibGVzLgotCi0JKiBbbXVsdGltZWRpYS9taWRpLmNdCi0JU2hvcnRlbmVkIE1JRElPVVQgZHJpdmVyIHZlcnNpb24gc3RyaW5nIHRvIGJlIGxlc3MgdGhhbiAzMSBjaGFycy4KLQotCSogW29iamVjdHMvZ2Rpb2JqLmNdCi0JRml4ZWQgRGVsZXRlT2JqZWN0MzIoKSB0byByZWFjdCBwcm9wZXJseSB3aGVuIGNhbGxlZCB3aXRoIHN0b2NrIG9iamVjdC4KLQotRnJpIEF1ZyAyMiAxODowMzoyNiAxOTk3ICBEaW1pdHJpZSBPLiBQYXVuIDxkaW1pQGNzLnRvcm9udG8uZWR1PgotCi0JKiBbY29udHJvbHMvdXBkb3duLmNdIFtpbmNsdWRlL3VwZG93bi5oXQotCUZpcnN0IGF0dGVtcHQgYXQgaW1wbGVtZW50aW9uZyB0aGUgVXBEb3duIGNsYXNzLgotCi0JKiBbY29udHJvbHMvd2lkZ2V0cy5jXQotCUFkZGVkIHRoZSBVcERvd24gY2xhc3MgdG8gYmUgaW5pdGlhbGl6ZWQgYnkgSW5pdENvbW1vbkNvbnRyb2xzKCkuCi0KLVdlZCBBdWcgMjAgMTg6MDE6MzMgMTk5NyAgRG91ZyBSaWRnd2F5IDxyaWRnd2F5QHJvdXRoLlVDU0QuRURVPgotCi0JKiBbZ3JhcGhpY3MvKl0gW29iamVjdHMvKl0gW2luY2x1ZGUvZ2RpLmhdCi0JTWFkZSBhbGwgR0RJIG9iamVjdHMgKGV4Y2VwdCBEQ3MpIG1vdmVhYmxlLgotCi1Nb24gQXVnIDE4IDAzOjI1OjMwIDE5OTcgIEFsZXggS29yb2JrYSA8YWxleEB0cmFudG9yLnBoYXJtLnN1bnlzYi5lZHU+Ci0KLQkqIFt3aW5kb3dzL2V2ZW50LmNdIFttaXNjL3dpbnNvY2suY10gW21pc2Mvd2luc29ja19kbnMuY10KLQlSZW1vdmVkIElQQyBjb21tdW5pY2F0aW9uIHRvIHNwZWVkIHVwIHdpbnNvY2sgc2VydmljZXMKLQkodGVzdGVkIG9ubHkgd2l0aCAxNi1iaXQgbmV0c2NhcGUgMy4wMykuCi0KLQkqIFtncmFwaGljcy94MTFkcnYveGZvbnQuY10gW2RvY3VtZW50YXRpb24vZm9udHNdCi0JTWlzY2VsbGFuZW91cyBpbXByb3ZlbWVudHMuIFVwZGF0ZWQgZG9jcy4KLQotU3VuIEF1ZyAxNyAyMDozOTo1NSAxOTk3ICBJbmdvIFNjaG5laWRlciA8c2NobmVpZGlAaW5mb3JtYXRpay50dS1tdWVuY2hlbi5kZT4KLQotCSogW21pc2MvY29tbS5jXQotCUEgY291cGxlIG9mIGJ1ZyBmaXhlcy4KLQotU3VuIEF1ZyAxNyAxOToyOToyMiAxOTk3ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KLQotCSogW2RlYnVnZ2VyL2RiZy55XQotCURpc3BsYXkgbmV4dCBpbnN0cnVjdGlvbiBhZnRlciBzdGVwaS9uZXh0aS4KLQotCSogW2lmMTYzMi9yZWxheS5jXSBbaW5jbHVkZS9jYWxsYmFjay5oXSBbdG9vbHMvYnVpbGQuY10KLQlSZXBsYWNlZCBDYWxsVG8zMl9MYXJnZVN0YWNrIHdpdGggdGhlIENBTExfTEFSR0VfU1RBQ0sgbWFjcm8gZm9yCi0JYmV0dGVyIFdpbmVsaWIgc3VwcG9ydC4KLQotCSogW2luY2x1ZGUvc2lnY29udGV4dC5oXQotCVJlbmFtZWQgdG8gc2lnX2NvbnRleHQuaCB0byBhdm9pZCBjb25mbGljdHMgd2l0aCBsaWJjLgotCi0JKiBbKi8qXQotCUFsbCBBUEkgZnVuY3Rpb25zIGFyZSBub3cgcHJlZml4ZWQgd2l0aCBXSU5BUEkgaW4gcHJldmlzaW9uIG9mCi0JZnV0dXJlIFdpbmVsaWIgaW50ZWdyYXRpb24uCi0KLQkqIFtsb2FkZXIvc2lnbmFsLmNdIFttZW1vcnkvbGR0LmNdCi0JRml4ZWQgYXNzZW1ibHkgY29kZSB0byBiZSAtZlBJQyBjb21wYXRpYmxlLgotCi1UaHUgQXVnIDE0IDE0OjM4OjE1IDE5OTcgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgotCi0JKiBbaWYxNjMyL2NydGRsbC5zcGVjXVt3aW4zMi9leGNlcHQuY10KLQlfZ2xvYmFsX3Vud2luZCwgX2xvY2FsX3Vud2luZCBzdHViIGFkZGVkLgotCi0JKiBbb2JqZWN0cy9kaWIuY10JCi0JRG9uJ3QgcmVhZCBtZW1vcnkgeW91IGRvbid0IGV2ZW4gbmVlZCBmb3IgdGhlIHRhcmdldCBiaXRtYXAgKGZpeGVzCi0Jb25lICdsYXp5JyBwcm9ncmFtKS4KLQotCSogW2lmMTYzMi9yZWxheS5jXVtpZjE2MzIvdGh1bmsuY11baWYxNjMyL2tlcm5lbDMyLnNwZWNdCi0JICBbd2luMzIvb3JkaW5hbHMuY11bbWVtb3J5L3NlbGVjdG9yLmNdW21lbW9yeS9nbG9iYWwuY10KLQkgIFtpbmNsdWRlL2NhbGxiYWNrLmhdCi0JQWRkZWQvbW92ZWQgc29tZSBtb3JlIHdpbjk1IG9yZGluYWwgc3R1ZmYuIEltcGxlbWVudGVkIFFUX1RodW5rCi0JKG5vdCAxMDAlIGNvcnJlY3QgeWV0KSBhbmQgc29tZSBmcmllbmRzLgotCi0JKiBbbG9hZGVyL3BlX2ltYWdlLmNdCi0JQWRkIHBvc3NpYmlsaXR5IHRvIGJyZWFrIGF0IHRoZSBETEwgZW50cnlwb2ludC4KLQotCSogW2NvbnRyb2xzL3N0YXRpYy5jXVttaXNjL2NvbW1kbGcuY11bc2NoZWR1bGVyL3RocmVhZC5jXQotCU1pc2MgYnVnZml4ZXMgYW5kIGFkZGl0aW9ucy4KLQotCSogW21pc2MvcmVnaXN0cnkuY10KLQlUaGUgcmVnaXN0cnkgc2VlbXMgdG8gYmUgY2FzZS1wcmVzZXJ2aW5nIGJ1dCBjYXNlLWluc2Vuc2l0aXZlLgotCi0JKiBbbWVtb3J5L2dsb2JhbC5jXQkKLQlBZGFwdGVkIHRvIG5ldyAvcHJvYy9tZW1pbmZvIGZvcm1hdC4KLQotCSogW29iamVjdHMvZm9udC5jXVtncmFwaGljcy94MTFkcnYveGZvbnQuY10KLQlGT05UX1NlbGVjdE9iamVjdCBhbmQgR2V0VGV4dE1ldHJpY3MqIGdldCBwYXNzZWQgcmFuZ2VzIGluIGxvZ2ljYWwKLSAJYW5kIG5vdCBkZXZpY2UgcG9pbnRzICh0aGFua3MgdG8gTWFyaW9uIFJleXpsIGZvciBwb2ludGluZyB0aGlzCi0gCW91dCkuCi0KLQkqIFt3aW5kb3dzL2NhcmV0LmNdCi0JVXNlIHRoZSB3aW5kb3dzIG93biBEQyBpZiBwcmVzZW50IChUaGUgY2FyZXQgY29vcmRpbmF0ZXMgYXJlCi0JbG9naWNhbCBjb29yZGluYXRlcyBiYXNlZCBvbiBpdCkuIEZpeGVzIGFub3RoZXIgQU1JUFJPIHByb2JsZW0uCi0KLVdlZCBBdWcgIDYgMTg6MjI6MjIgMTk5NyAgTW9ydGVuIFdlbGluZGVyICA8dGVycmFAZGlrdS5kaz4KLQotCSogW2NvbnRyb2xzL21lbnUuY10KLQlHZW5lcmFsIGNsZWFuLXVwIGFuZCBXaW4zMiB3b3JrOiBzcGxpdCBpdGVtX2ZsYWdzIGludG8gZlR5cGUgYW5kCi0JZlN0YXRlOyBzcGxpdCBpdGVtX2lkIGludG8gd0lEIGFuZCBoU3ViTWVudS4gIEltcHJvdmVkCi0JZGVidWctcHJpbnRpbmcuICBJbXBsZW1lbnRlZCBJbnNlcnRNZW51SXRlbTMyW0FXXSwKLQlTZXRNZW51RGVmYXVsdEl0ZW0zMiwgYW5kIFNldE1lbnVJdGVtSW5mbzMyW0FXXS4gIEZpeGVkCi0JR2V0TWVudUl0ZW1JbmZvMzJbQVddLgotCi0JKiBbaWYxNjMyL3VzZXIzMi5zcGVjXQotCURlZmluZSBhYm92ZSBuZXcgZnVuY3Rpb25zLgotCi0JKiBbaW5jbHVkZS93aW5kb3dzLmhdCi0JRGVmaW5lIE1GX0RFRkFVTFQgYW5kIE1GX1JJR0hUSlVTVElGWS4gIFByb3RvdHlwZSBhYm92ZSBmdW5jdGlvbnMuCi0KLQkqIFtpbmNsdWRlL21lbnUuaF0KLQlEb24ndCBwcm90b3R5cGUgbm93LXN0YXRpYyBNRU5VX0luaXRTeXNNZW51UG9wdXAuCi0KLQkqIFtpbmNsdWRlL2NvbW0uaF0KLQlSZWR1Y2UgTUFYX1BPUlRTIHRvIDkgKHdoaWNoIHRoZSBwcm9maWxlIGNvZGUgY2FuIGhhbmRsZSkuCi0KLVR1ZSBBdWcgIDUgMjA6MTY6MjIgMTk5NyAgVmljdG9yIFNjaG5laWRlciA8dmlzY2huZUBpYm0ubmV0PgotCi0JKiBbbGlicmFyeS93aW5lc3R1Yi5jXSBbbGlidGVzdC9leHBhbmQuY10KLQlUaGVzZSBwYXRjaGVzIGxldCBwZW9wbGUgcG9ydGluZyBXaW5kb3dzIGFwcHMgY29tcGlsZSB0aGVtIHVzaW5nCi0JdGhlIHNhbWUgY29udmVudGlvbnMgcmVnYXJkaW5nIGdsb2JhbCBfYXJnYyBhbmQgX2FyZ3YgYXMgdGhvc2Ugb24KLQlXaW5kb3dzIEMvQysrIGNvbXBpbGVycy4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotU3VuIEF1ZyAgMyAxNDowMzo0MyAxOTk3ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KLQotCSogW2RvY3VtZW50YXRpb24vTWFrZWZpbGUuaW5dCi0JQ3JlYXRlIGxpbmtzIGZvciBmaWxlcyBpbmNsdWRlZCBmcm9tIHdpbmUudGV4aW5mby4KLQotCSogW3dpbmUubWFuXQotCU1vdmVkIHRvIGRvY3VtZW50YXRpb24gZGlyLgotCi0JKiBbaWYxNjMyL2J1aWx0aW4uY10KLQlNYWRlIFNZU1RFTS5ETEwgYWx3YXlzIGxvYWRlZCBieSBkZWZhdWx0LgotCi0JKiBbbG9hZGVyL3NpZ25hbC5jXSBbaWYxNjMyL3NpZ25hbC5jXQotCVNwbGl0IHNpZ25hbC5jIGluIGdlbmVyaWMvZW11bGF0b3Itc3BlY2lmaWMgcGFydHMuCi0KLQkqIFttaXNjL3N5c3RlbS5jXSBbaWYxNjMyL3RodW5rLmNdCi0JSW1wbGVtZW50ZWQgc3lzdGVtIHRpbWVyIGZ1bmN0aW9ucy4KLQlGaXhlZCBJbnF1aXJlU3lzdGVtIHBhcmFtZXRlcnMuCi0KLQkqIFttc2Rvcy9pb3BvcnRzLmNdCi0JRGVmaW5lZCBpbmIvb3V0YiBmdW5jdGlvbnMgdG8gYXZvaWQgaW5jbHVkaW5nIGFzbS9pby5oLgotCVVzZSB0aGUgcmlnaHQgaW5zdHJ1Y3Rpb24gZm9yIHdvcmQgYW5kIGR3b3JkIGRpcmVjdCBhY2Nlc3MuCi0KLQkqIFttdWx0aW1lZGlhL21tc3lzdGVtLmNdCi0JRml4ZWQgQ2FsbFRvMTYgdXNhZ2UuCi0KLVNhdCBBdWcgMiAxMzowNToyMyAxOTk3ICBBbmRyZWFzIE1vaHIgPDEwMC4zMDkzNkBnZXJtYW55Lm5ldD4KLQotCSogW2NvbnRyb2xzL2VkaXQuY10KLQlXaGVuIHRleHQgaXMgaW5zZXJ0ZWQgaW50byBhIG5ld2x5IGNyZWF0ZWQgZWRpdGxpbmUsIHRoZSBjYXJldAotCWlzIHBsYWNlZCBhZnRlciB0aGUgdGV4dC4gU2hvdWxkIGJlIHBsYWNlZCBiZWZvcmUgdGhlIHRleHQuIEZpeGVkLgotCi0JKiBbZmlsZXMvZmlsZS5jXQotCVJlbW92ZWQgT19UUlVOQyBmbGFnIGZyb20gT0ZfV1JJVEUgbW9kZSBpbiBfbG9wZW4zMigpLgotCUFjY29yZGluZyB0byBkb2MgX2xvcGVuKCkgbmV2ZXIgdHJ1bmNhdGVzIGZpbGVzLgotCi0JKiBbaWYxNjMyL3VzZXIuc3BlY10gW21pc2MvY29tbS5jXQotCUFkZGVkIHN0dWIgZm9yIEVuYWJsZUNvbW1Ob3RpZmljYXRpb24oKS4KLQotCSogW21pc2MvdmVyLmNdCi0JRml4ZWQgcHJvYmxlbSB3aXRoIFZlclF1ZXJ5VmFsdWUqKCkgcnVubmluZyBvdmVyIGVuZCBvZiBuYW1lIHRhYmxlCi0JaW4gcmFyZSBjYXNlcy4KLQotCSogW21zZG9zL2ludDIxLmNdCi0JRW5oYW5jZWQgaW9jdGxHZXREZXZpY2VJbmZvKCkgdG8gY29ycmVjdGx5IHJldHVybiB0aGUgY3VycmVudCBkcml2ZS4KLQotCSogW211bHRpbWVkaWEvam95c3RpY2suY10gW3dpbmRvd3MvbWVzc2FnZS5jXQotCUFkZGVkIGpveXN0aWNrIHN1cHBvcnQgISEhCi0JTmVlZHMgTGludXggPj0gMi4xLjQ1IG9yIGpveXN0aWNrLTAuOC4wLnRhci5nei4KLQotRnJpIEF1ZyAgMSAxODowMjowOSAxOTk3ICBNb3J0ZW4gV2VsaW5kZXIgIDx0ZXJyYUBkaWt1LmRrPgotCi0JKiBbaWYxNjMyL3VzZXIzMi5zcGVjXQotCURlZmluZSBEcmF3QW5pbWF0ZWRSZWN0czMyLgotCi0JKiBbZ3JhcGhpY3MvcGFpbnRpbmcuY10KLQkoRHJhd0FuaW1hdGVkUmVjdHMzMik6IENyZWF0ZSBzdHViLgotCi0JKiBbbWlzYy9yZWdpc3RyeS5jXQotCUNvcGUgd2l0aCBOVUxMIGNsYXNzIGluIFJlZ1F1ZXJ5SW5mb0tleTMyQS4KLQotCSogW2lmMTYzMi91c2VyMzIuc3BlY10KLQlBZGQgR2V0TWVudUl0ZW1JbmZvMzJbQVddLgotCi0JKiBbY29udHJvbHMvbWVudS5jXQotCShJbnNlcnRNZW51MzJBKTogVXBncmFkZSBmbGFncyB0byA4IGhleC1kaWdpdHMuCi0JKE1FTlVFWF9QYXJzZVJlc291cmNlKTogRmlyc3Qgc2hvdCBhdCBpbXBsZW1lbnRhdGlvbi4KLQkoTG9hZE1lbnVJbmRpcmVjdDMyQSk6IEhhbmRsZSBleHRlbmRlZCBtZW51cy4KLQkoR2V0TWVudUl0ZW1JbmZvMzJbQVddKTogRmlyc3Qgc2hvdCBhdCBpbXBsZW1lbnRhdGlvbi4KLQotCSogW2luY2x1ZGUvd2luZG93cy5oXQotCURlZmluZSBNRlRfKiwgTUZTXyosIE1JSU1fKiBtYWNyb3MuICBEZWZpbmUgTUVOVUlURU1JTkZPW0FXXQotIAlzdHJ1Y3R1cmVzIGFuZCBwb2ludGVycy4KLQotCSogW01ha2VmaWxlLmluXQotCShldGFncyk6IEFkZCBUQUdTIGFzIHRhcmdldC4KLQotCSogW2lmMTYzMi9jb21jdGwzMi5zcGVjXQotCVVzZSBXaW5kb3dzIDk1J3Mgb3JkaW5hbHMuICBBZGQgYSBmZXcgbWlzc2luZyBzdHVicy4KLQotVGh1IEp1bCAzMSAxNDowMToxMyAxOTk3ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KLQotCSogW29iamVjdHMvY29sb3IuY10KLQlGaXggZm9yIDE2IGNvbG9yIG1vZGUgb2YgWEZyZWUuCi0KLQkqIFtpZjE2MzIva2VybmVsMzIuc3BlY11bd2luMzIvb3JkaW5hbHMuY10KLQlNb3ZlZC9hZGRlZCBzb21lIG9yZGluYWwgb25seSBleHBvcnRlZCBmdW5jdGlvbnMgZnJvbSBrZXJuZWwzMi5kbGwKLQkobW9zdGx5IHRodW5raW5nIHByZXBhcmF0aW9uIHN0dWZmKS4KLQotV2VkIEp1bCAzMCAwOToxNjozOCAxOTk3ICBKb2huIEhhcnZleSA8am9obkBkaXZpc2lvbi5jby51az4KLQotCSogW2dyYXBoaWNzL3dpbjE2ZHJ2L2luaXQuY10gW2luY2x1ZGUvd2luMTZkcnYuaF0KLSAgICAgICAgRXNjYXBlKFNFVEFCT1JUUFJPQykgcmV0dXJucyBzdWNjZXNzIHRvIGtlZXAgcGJydXNoLmV4ZSBoYXBweS4KLSAgICAgICAgRXNjYXBlKE5FWFRCQU5EKSBpbXBsZW1lbnRlZCB0byBtYWtlIEhQIFBDTCBwcmludGVyIGRyaXZlciB3b3JrIGluCi0gCXdvcmQuICBTdHViIGZvciBQQVRCTFQgYWRkZWQgdG8gc3RhcnQgd29yayBvbiBwcmludGluZyBtb3JlIHRoYW4KLSAJdGV4dC4KLQotTW9uIEp1bCAyOCAxMzoxNDoyOCAxOTk3ICBWaWN0b3IgU2NobmVpZGVyIDx2aXNjaG5lQGlibS5uZXQ+Ci0KLQkqIFtsaWJ0ZXN0L2V4cGFuZC5jXQotCU5ldyBXaW5lbGliIHRlc3QgcHJvZ3JhbS4KLQotV2VkIEp1bCAyMyAwOTozNzoxMyAxOTk3ICBBZHJpYW4gSGFydmV5IDxhZHJpYW5Ac2VsZWN0LmNvbS5hdT4KLQotCSogW3Rvb2xzL2J1aWxkLmNdIFt0b29scy9idWlsZC1zcGVjLnR4dF0gW2lmMTYzMi9rZXJuZWwuc3BlY10KLQkgIFtpZjE2MzIvdXNlci5zcGVjXQotCUFkZGVkIGFiaWxpdHkgdG8gc2V0IGZpbGVuYW1lIHdpbmUgY29uc2lkZXJzIHRoZSBidWlsdC1pbiBETExzIAotCXRvIGJlIGluICB0byBzb21ldGhpbmcgb3RoZXIgdGhhbiBuYW1lLkRMTCB3aXRoIG5ldyAiZmlsZSIga2V5Ci0JaW4gLnNwZWMgZmlsZXMuCi0JTWFkZSBrZXJuZWwgZmlsZW5hbWUgS1JOTDM4Ni5FWEUgKHNvbWUgcHJvZ3JhbXMgdXNlIHRoaXMgbmFtZSAKLQlleHBsaWNpdGx5IC0gQ2hlbU9mZmljZSBpbnN0YWxsIG5vdyBzdGFydHMgdXApLgotCU1hZGUgdXNlciBmaWxlbmFtZSBVU0VSLkVYRSAoanVzdCB0byBiZSB0aWR5KS4KLQotU3VuIEp1bCAyMCAyMzo1MTowMiAxOTk3ICBEYXZpZCBBLiBDdXRoYmVydCA8ZGFjdXRAaGVucnkuZWNlLmNtdS5lZHU+Ci0KLQkqIFtjb250cm9scy9tZW51LmNdIFttaXNjL3R3ZWFrLmNdIFtpbmNsdWRlL3R3ZWFrLmhdCi0JRml4ZWQgTUVOVV9LZXlMZWZ0IGFuZCBNRU5VX0tleVJpZ2h0IHRvIGhhbmRsZSBtdWx0aXBsZS1jb2x1bW4KLQltZW51cy4gIE1pc2MgbWVudSBkcmF3aW5nIGlzc3VlcyBmb3IgV2luOTUgdHdlYWtzIGZpeGVkLiAgTWlzYwotCXdhcm5pbmdzIGZpeGVkLgotCi0JKiBbbG9hZGVyL21vZHVsZS5jXQotCVNwYWNlcyBhcmUgbm93IHBlcm1pdHRlZCBpbiBmaWxlL3BhdGggbmFtZXMgb24gdGhlIGNvbW1hbmQgbGluZS4KLQlJZiBtdWx0aXBsZSBtYXRjaGVzIGNhbiBiZSBtYWRlLCB0aGUgcHJlZmVycmVkIG1hdGNoIGlzIHRoZQotCXBhdGgvZmlsZSB3aXRoIGZld2VyIHNwYWNlcy4KLQotVHVlIEp1bCAyOSAwMjoyMToxNSAxOTk3ICBCcnVjZSBNaWxuZXIgPEJydWNlLk1pbG5lckBnZW5ldGljcy51dGFoLmVkdT4KLQotCSogW21pc2MvY29tcG9iai5jXQotCUFkZGVkIENMU0lERnJvbVN0cmluZyBhbmQgU3RyaW5nRnJvbUNMU0lELgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1TYXQgSnVsIDE5IDEzOjAzOjAxIDE5OTcgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgotCi0JKiBbdG9vbHMvYnVpbGQuY10gW2luY2x1ZGUvc3RhY2tmcmFtZS5oXQotCVNhdmUgdGhlIGNvbXBsZXRlICVlYnAgcmVnaXN0ZXIgaW4gQ2FsbEZyb20xNjsgZml4ZXMgYSBjcmFzaCB3aXRoCi0JTGFiVmlldyByZXBvcnRlZCBieSBBbmRyZWFzIE1vaHIuCi0KLQkqIFtsb2FkZXIvbWFpbi5jXQotCUF2b2lkIGV4ZWN1dGluZyBhIGJ1aWx0LWluIERMTC4KLQotCSogW2NvbnRyb2xzL3N0YXRpYy5jXQotCUNvbnZlcnRlZCBzdGF0aWMgd2luZG93IHByb2NlZHVyZSB0byBXaW4zMi4KLQotCSogW3dpbmRvd3MvbWVzc2FnZS5jXSBbd2luZG93cy9xdWV1ZS5jXSBbaW5jbHVkZS9xdWV1ZS5oXQotCUhhY2tlZCBTZW5kTWVzc2FnZSBmdW5jdGlvbnMgdG8gc3VwcG9ydCBpbnRlci10YXNrIG1lc3NhZ2VzIHdpdGgKLQlTZW5kTWVzc2FnZTMyQS9XLgotCi1TdW4gSnVsIDEzIDE2OjU1OjM1IDE5OTcgIEJlcm5oYXJkIFJvc2Vua3JhZW56ZXIgPGJlcm9AYmVyby1vbmxpbmUubWwub3JnPgotCi0JKiBbaXBjL2JpdF9hcnJheS5jXQotCURvbid0IHVzZSBiaXRvcHMuaCBpbiBMaW51eCAyLjEueCAodGhlc2UgdmVyc2lvbnMgZG8gbm90IHJldHVybgotCXRoZSBwcmV2aW91cyBzdGF0ZSBmb3IgY2xlYXJfYml0IGFuZCBzZXRfYml0KQotCi0JKiBbaXBjL3NobV9tYWluX2Jsay5jXQotCUFkYXB0IHRvIEdMSUJDJ3MgaXBjX3Blcm0gc3RydWN0dXJlLgotCi0JKiBbbWVtb3J5L2xkdC5jXQotCUluY2x1ZGUgPGFzbS91bmlzdGQuaD4gb24gTGludXgvR0xJQkMgc3lzdGVtcyAocmVxdWlyZWQgZm9yCi0JX3N5c2NhbGwzKS4KLQotV2VkIEp1bCA5IDIzOjUzOjE5IDE5OTcgIERhdmlkIEEuIEN1dGhiZXJ0ICA8ZGFjdXRAaGVucnkuZWNlLmNtdS5lZHU+Ci0KLQkqIFtpbmNsdWRlL29wdGlvbnMuaF0gW2ZpbGVzL3Byb2ZpbGUuY10KLQlBZGRlZCBQUk9GSUxFX0dldFdpbmVJbmlCb29sIGFuZCBQUk9GSUxFX0VudW1lcmF0ZVdpbmVJbmlTZWN0aW9uLgotCi0JKiBbaW5jbHVkZS9zeXNtZXRyaWNzLmhdIFtpbmNsdWRlL3dpbmRvd3MuaF0gW3dpbmRvd3Mvc3lzbWV0cmljcy5jXQotCUFsbCBzeXNtZXRyaWNzIG1vdmVkIHRvIGFycmF5IChubyBtb3JlIGNvbnN0YW50IG1hY3JvcykuICBBZGRlZAotCU1PVVNFV0hFRUxQUkVTRU5UIG1ldHJpYy4KLQotCSogW2luY2x1ZGUvYml0bWFwLmhdIFtvYmplY3RzL29lbWJpdG1hcC5jXQotCUFkZGVkIE9CTV9Jbml0KCkgKHNlZSBhbHNvIGxvYWRlci9tYWluLmMpIGFuZCBtb3JlIHN1cHBvcnQgZm9yIFdpbjk1Ci0JYml0bWFwczsgYWRkZWQgc2l6ZSBpbmZvIHRvIE9FTSBiaXRtYXBzLgotCi0JKiBbaW5jbHVkZS9ncmFwaGljcy5oXSBbd2luZG93cy9ncmFwaGljcy5oXQotCUFkZGVkIEdSQVBIX0RyYXdHZW5lcmljUmVsaWVmUmVjdC4KLQotCSogW2xvYWRlci9tYWluLmNdCi0JQWRkZWQgVFdFQUtfSW5pdCgpIGFuZCBUV0VBS19DaGVja0NvbmZpZ3VyYXRpb24oKSBjYWxscyAodGhlCi0JbGF0dGVyIGNoZWNrcyBmb3IgaW52YWxpZCBlbnRyaWVzIGluIHdpbmUuY29uZikuCi0KLQkqIFtpbmNsdWRlL2RlYnVnLmhdIFtpbmNsdWRlL3N0ZGRlYnVnLmhdIFtpbmNsdWRlL25vbmNsaWVudC5oXQotCSAgW2luY2x1ZGUvdHdlYWsuaF0gW2NvbnRyb2xzL21lbnUuY10gW21pc2MvdHdlYWsuY10KLQkgIFtvYmplY3RzL2dkaW9iai5jXSBbd2luZG93cy9zeXNjb2xvci5jXSBbd2luZG93cy9ub25jbGllbnQuY10KLQkgIFtCVUdTXSBbZG9jdW1lbnRhdGlvbi93aW45NWxvb2tdCi0JQWRkZWQgdHdlYWtzIGZvciBXaW5kb3dzIDk1IGludGVyZmFjZSBzdXBwb3J0LiAgU2VlCi0gCWRvY3VtZW50YXRpb24vd2luOTVsb29rIGZvciBtb3JlIGluZm9ybWF0aW9uLgotCi0JKiBbY29udHJvbHMvZWRpdC5jXQotCUZpeGVkIEVESVRfTW92ZUhvbWUgYnVnLgotCi0JKiBbbWlzYy92ZXIuY10KLQlDaGFuZ2VkIG5hbWUgb2YgZHByaW50Zl92ZXJfc3RyaW5nIHRvIHZlcl9kc3RyaW5nIHRvIGZpeAotCXByb2JsZW0gd2l0aCB0b29scy9tYWtlX2RlYnVnIHV0aWxpdHkuCi0KLVdlZCBKdWwgOSAyMTozMTo1NCAxOTk3ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KLQotCSogW29iamVjdHMvZGliLmNdCi0JRG9uJ3QgdXNlIHBhbGV0dGVzIHdpdGggZGlicyB3aXRoIGJpQml0Q291bnQgPiA4LgotCi0JKiBbbWlzYy9vbGUybmxzLmNdW21pc2MvdmVyLmNdCi0JSXNWYWxpZExvY2FsZSwgRW51bVN5c3RlbUxvY2FsZXMgZml4ZWQgKHdpbmhscDMyLmV4ZSB3b3JrcykKLQlTb21lIFZlckxhbmd1YWdlIGNvZGVkIG1vdmVkIHRvIG9sZTJubHMuYywgc29tZSBjbGVhbnVwcy4KLQotCSogW211bHRpbWVkaWEvbWNpc3RyaW5nLmNdCi0JRml4ZWQgImNhcGFiaWxpdGllcyA8ZGV2PiBkZXZpY2UgdHlwZSIgY3Jhc2ggKGNvb2wuZXhlKS4KLQotCSogW21pc2MvbWFpbi5jXQotCVN5c3RlbVBhcmFtZXRlcnNJbmZvKjogYWRkZWQgc3R1YiBvcHRpb24gNDEKLQkoR0VUTk9OQ0xJRU5UTUVUUklDUyksIGR1cGxpY2F0ZWQgc29tZSBzdHVmZiBhd2F5IGZyb20gU1BJMTYKLQl0aGF0IHdyaXRlcyAzMmJpdCB2YXJzLihvbmUgQ09NQ1RMMzIuRExMIGNyYXNoLCBmcmVlY2VsbC5leGUpCi0KLVR1ZSBKdWwgIDggMjI6NDA6NTMgMTk5NyAgTW9ydGVuIFdlbGluZGVyICA8dGVycmFAZGlrdS5kaz4KLQotCSogW2lmMTYzMi9zaGVsbDMyLnNwZWNdCi0JVXNlIFdpbmRvd3MgOTUncyBvcmRpbmFscy4gSGVscCB3YW50ZWQsIGlucXVpcmUgd2l0aGluLgotCi1Nb24gSnVsICA3IDExOjIwOjM2IDE5OTcgIFBoaWxpcHBlIERlIE11eXRlciAgPHBoZG1AaW5mby51Y2wuYWMuYmU+Ci0KLQkqIFtpZjE2MzIvcmVsYXkuY10gW2lmMTYzMi91c2VyLnNwZWNdIFtpZjE2MzIva2VybmVsLnNwZWNdCi0JICBbdG9vbHMvYnVpbGQtc3BlYy50eHRdIFt0b29scy9idWlsZC5jXQotCUFkZGVkIHR5cGUgJ3NlZ3N0cicgKHNlZ21lbnRlZCBwb2ludGVyIHRvIG51bGwtdGVybWluYXRlZCBzdHJpbmcpCi0JdG8gLnNwZWMgZmlsZXMuCi0KLQkqIFt3aW5kb3dzL3VzZXIuY10gW2lmMTYzMi91c2VyLnNwZWNdCi0JRXhpdFdpbmRvd3NFeGVjIHN0dWIgZnVuY3Rpb24gYWRkZWQuCi0KLU1vbiBKdWwgIDcgMDE6MTg6MjUgMTk5NyAgVS4gQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50aC1kYXJtc3RhZHQuZGU+Ci0KLQkqIFtmaWxlcy9maWxlLmNdIFtpbmNsdWRlL3dpbmJhc2UuaF0gW2lmMTYzMi9rZXJuZWwzMi5zcGVjXQotCUltcGxlbWVudCBNb3ZlRmlsZUV4MzIsIHNvbWUgZW5oYW5jZW1lbnQgZm9yIE1vdmVmaWxlMzIuCi0KLVNhdCBKdWwgIDUgMTg6MTM6NDggMTk5NyAgQnJ1Y2UgTWlsbmVyIDxCcnVjZS5NaWxuZXJAZ2VuZXRpY3MudXRhaC5lZHUuCi0KLQkqIFtmaWxlcy9maWxlLmNdIFtpZjE2MzIva2VybmVsMzIuc3BlY10gW2luY2x1ZGUvd2luZXJyb3IuaF0KLSAgICAgICAgICBbbXNkb3MvaW50MjEuY10gW3dpbjMyL2ZpbGUuY10KLQlBZGQgTG9ja0ZpbGUvVW5sb2NrRmlsZSBpbXBsZW1lbnRhdGlvbi4KLQlBZGQgYmFjayBpbiBpbnQyMSBmdW5jKDB4NWMpIFJlY29yZCBsb2NraW5nIGZ1bmN0aW9ucy4KLQotCSogW2ZpbGVzL2ZpbGUuY10KLQlGaXhlZCBidWcgd2l0aCBPRl9SRU9QRU4gaW4gRklMRV9Eb09wZW5GaWxlLgotCi1GcmkgSnVsIDQgMTI6MDA6MDAgMTk5NyAgSGVucmlrIE9sc2VuIDxIZW5yaWsuT2xzZW5AaWFlc3RlLmRrPgotCi0JKiBbbWlzYy9vbGUybmxzLmNdIFtwcm9ncmFtcy9wcm9nbWFuL0RhLnJjXSBbcHJvZ3JhbXMvd2luaGVscC9EYS5yY10KLQkgIFtyZXNvdXJjZXMvc3lzcmVzX0RhLnJjXQotCUFkZGVkL3VwZGF0ZWQgRGFuaXNoIGxhbmd1YWdlIHN1cHBvcnQuCi0KLVRodSBKdWwgIDMgMTM6MDQ6MjAgMTk5NyAgQ2xhdXMgRmlzY2hlciAgPGZpc2NoZXJAaXVlLnR1d2llbi5hYy5hdD4KLQotCSogW2ZpbGVzL2Rvc19mcy5jXQotCVByb3Blcmx5IGltcGxlbWVudGVkIERPU0ZTX1VuaXhUaW1lVG9GaWxlVGltZSBhbmQKLQlET1NGU19GaWxlVGltZVRvVW5peFRpbWUuCi0KLQkqIFtkb2N1bWVudGF0aW9uL3dpbmUudGV4aW5mb10KLQlGaXJzdCB2ZXJzaW9uIG9mIHRleGluZm8gZG9jdW1lbnRhdGlvbi4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVGh1IEp1biAyNiAwMjoxNDowMyAxOTk3ICBTbGF2ZW4gUmV6aWMgIDxlc2VydGVAY3MudHUtYmVybGluLmRlPgotCi0JKiBbTWFrZWZpbGUuaW5dCi0JTmV3IHRhcmdldCBpbnN0YWxsX2luY2x1ZGVzLgotCi0JKiBbcmMvcGFyc2VyLmhdIFtyYy9wYXJzZXIueV0gW3JjL3dpbmVyYy5jXQotCVNvbWUgYnVnIGZpeGVzLgotCi1XZWQgSnVuIDI1IDE0OjQzOjQxIDE5OTcgIFZpY3RvciBTY2huZWlkZXIgPHZpc2NobmVAaWJtLm5ldD4KLQotCSogW2NvbnRyb2xzL2VkaXQuY10KLQlGaXhlZCBXTV9HRVRURVhUIHJldHVybiB2YWx1ZS4KLQotVHVlIEp1biAyNCAyMzo0NjowNCAxOTk3ICBNaWNoaWVsIHZhbiBMb29uIDxtZnZsQHhzNGFsbC5ubD4KLQotCSogW211bHRpbWVkaWEvKi5jXSBbaW5jbHVkZS9tbXN5c3RlbS5oXQotCUFkZGVkIG1vcmUgY2FsbGJhY2sgY29kZSwgaW5jbHVkaW5nIChJIGhvcGUpIGZ1bmN0aW9uIGNhbGxiYWNrLgotCUNoYW5nZWQgc29tZSBsaW5lYXIgcG9pbnRlcnMgaW50byBzZWdtZW50ZWQuCi0KLQkqIFttdWx0aW1lZGlhL2F1ZGlvLmNdCi0JUmVtb3ZlZCBzb21lIGJ1Z3MuCi0KLVNhdCBKdW4gMjggMTE6Mzc6NTYgMTk5NyAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+Ci0KLQkqIFtpZjE2MzIvY29tbWRsZy5zcGVjXVtpZjE2MzIvY29tZGxnMzIuc3BlY11bbWlzYy9jb21tZGxnLmNdCi0JICBbaW5jbHVkZS9jb21tZGxnLmhdCi0JSW1wbGVtZW50ZWQgcGFydHMgb2YgY29tZGxnMzI6IEdldE9wZW5GaWxlTmFtZTMyKiwKLQlHZXRTYXZlRmlsZU5hbWUzMiosIEdldEZpbGVUaXRsZTMyKiB1c2luZyB0aGUgMTYgYml0IGVxdWl2YWxlbnRzLgotCi0JKiBbd2luZG93cy9ldmVudC5jXQotCUVWRU5UX1F1ZXJ5Wk9yZGVyOiBjaGVjayBmb3IgY2hpbGRyZW4gIT1OVUxMIChoYXBwZW5zIHdoZW4KLQl1c2luZyAtbWFuYWdlZCkuCi0KLQkqIFtCVUdTXVtERVZFTE9QRVItSElOVFNdCi0JVXBkYXRlZC4KLQotCSogW29iamVjdHMvdGV4dC5jXQotCUFkZGVkIEdldFRleHRDaGFyc2V0Li4uIChzdHViIG1vc3RseSkuCi0KLVNhdCBKdW4gMjEgMDg6NDc6NTggMTk5NyAgUGhpbGlwcGUgRGUgTXV5dGVyICA8cGhkbUBpbmZvLnVjbC5hYy5iZT4KLQotCSogW2lmMTYzMi9rZXJuZWwuc3BlY10gW2lmMTYzMi9nZGkuc3BlY10gW2luY2x1ZGUvd2luZG93cy5oXQotCSAgW2xvYWRlci9yZXNvdXJjZS5jXSBbZ3JhcGhpY3MveDExZHJ2L3hmb250LmNdCi0JU2V0UmVzb3VyY2VIYW5kbGVyICYgUmVtb3ZlRm9udFJlc291cmNlIHByb3RvdHlwZXMgZml4ZWQuCi0KLQkqIFtpZjE2MzIvcmVsYXkuY10gW2lmMTYzMi9rZXJuZWwuc3BlY10gW2lmMTYzMi91c2VyLnNwZWNdCi0JICBbaWYxNjMyL29sZXN2ci5zcGVjXSBbaWYxNjMyL2NvbW1kbGcuc3BlY10gW2lmMTYzMi9kZGVtbC5zcGVjXQotCSAgW2lmMTYzMi9nZGkuc3BlY10gW2lmMTYzMi9semV4cGFuZC5zcGVjXSBbaWYxNjMyL3NoZWxsLnNwZWNdCi0JICBbaW5jbHVkZS93aW5kb3dzLmhdIFttZW1vcnkvc3RyaW5nLmNdIFt0b29scy9idWlsZC5jXQotCU5ldyB0eXBlIG9mIHBhcmFtZXRlciBhbGxvd2VkIGluIC5zcGVjIGZpbGVzIDogc3RyLCBwcmludGVkCi0JYXMgYSBzdHJpbmcgd2l0aCAtZGVidWdtc2cgK3JlbGF5LiAuc3BlYyBmaWxlcyB1cGRhdGVkLgotCi0JKiBbb2JqZWN0cy9kYy5jXQotCUluIERDX1NldHVwR0NGb3JQZW4sIGNhbGwgQmxhY2tQaXhlbE9mU2NyZWVuLCBub3QgQmxhY2tQaXhlbC4KLQlMaWtld2lzZSBmb3IgV2hpdGVQaXhlbC4KLQotCSogW29iamVjdHMvZ2Rpb2JqLmNdIFtncmFwaGljcy94MTFkcnYvYnJ1c2guY10KLQlVc2UgQlNfSEFUQ0hFRCB3aXRoIGFuIGFkZGVkIGVudHJ5IGluIEhhdGNoQnJ1c2hlcyBmb3IgRGtHcmF5QnJ1c2gsCi0gCWluc3RlYWQgb2YgQlNfU09MSUQuCi0KLUZyaSBNYXkgMzAgMTc6NTg6MDAgMTk5NyAgQ2hyaXMgRmFoZXJ0eSA8Y2hyaXNmQGFtZXJpY2EuY29tPgotCi0JKiBbd2luZG93cy9rZXlib2FyZC5jXQotCUFkZGVkIHZrZXkgdG8gc2NhbmNvZGUgdHJhbnNsYXRpb24gdGFibGUuCi0JVGhpcyB3YXMgcHJpbWFyaWx5IHRvIGZpeCBDaXRyaXggV2luRnJhbWUgY2xpZW50IHdoaWNoCi0JYWx3YXlzIG5lZWRzIHNjYW5jb2RlcyBpbiBXTV9LRVlET1dOLgotCVRlc3RlZCB3aXRoIEV4Y2VlZCA1LjEuMC4xICYgWEZyZWU4NiAzLjEuMi4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotU2F0IEp1biAxNCAxMzowNToyMyAxOTk3ICBBbmRyZWFzIE1vaHIgPDEwMC4zMDkzNkBnZXJtYW55Lm5ldD4KLQotCSogW2luY2x1ZGUvbW1zeXN0ZW0uaF0KLQlBdm9pZGVkIGluZmluaXRlIGxvb3AgaW4gYXVkaW8gY29kZSB3aGVuIGFjY2Vzc2luZwotIAlXQVZFT1VUQ0FQUy9XQVZFSU5DQVBTL01JRElPVVRDQVBTL0FVWENBUFMgd2l0aCByaWdpZCB2YXJpYWJsZQotIAlvZmZzZXRzIChJIGFwcGxpZWQgV0lORV9QQUNLRUQpLgotCi0JKiBbKi8qXQotCUFkZGVkICJXQVJOSU5HOiIgYW5kICJFUlJPUjoiIHRvIHNvbWUgcHJpbnRmJ3MuCi0JSnVzdCBncmVwIGZvciB0aGVtIHdpdGggJy1kZWJ1Z21zZyArYWxsJy4KLQotCSogW211bHRpbWVkaWEvYXVkaW8uY10gW211bHRpbWVkaWEvbW1zeXN0ZW0uY10KLQlJbXBsZW1lbnRlZCB3YXZlIGNhbGxiYWNrczogd2luZG93IGFuZCBmdW5jdGlvbiBjYWxsYmFjay4KLQlGaXhlZCBwcm9ibGVtIHdpdGggV0FWRV9Ob3RpZnlDbGllbnQoKS4KLQlNaXNjIGZpeGVzLgotCi0JKiBbd2luZG93cy93aW5oZWxwLmNdCi0JRml4ZWQgcHJvYmxlbSB3aXRoIHdpbmRvd3MgaGVscCB0ZWxsaW5nICJIZWxwIHRvcGljIGRvZXNuJ3QgZXhpc3QiLgotCUJ1dCB0aGlzIHByb2JsZW0gc3RpbGwgcmVtYWlucyB3aGVuIHVzaW5nIFdpbndvcmQuCi0KLVdlZCBKdW4gMTEgMDk6MTQ6MjAgMTk5NyAgQWxleCBLb3JvYmthIDxhbGV4QHRyYW50b3IucGhhcm0uc3VueXNiLmVkdT4KLQotCSogW3dpbmUuaW5pXQotCU5ldyAnZm9udHMnIHNlY3Rpb24gZm9ybWF0LiBSZWFkIGRvY3VtZW50YXRpb24vZm9udHMuCi0KLQkqIFtjb250cm9scy9pY29udGl0bGUuY10gW3dpbmRvd3Mvd2lucG9zLmNdIFt3aW5kb3dzL25vbmNsaWVudC5jXQotCSAgW3dpbmRvd3Mvd2luLmNdIFtpbmNsdWRlL3dpbi5oXQotCUltcGxlbWVudGVkIGljb24gdGl0bGVzLgotCi0JKiBbZ3JhcGhpY3MveDExZHJ2L3hmb250LmNdIFtvYmplY3RzL2ZvbnQuY10gW29iamVjdHMvZGMuY10KLQkgIFtpbmNsdWRlL3gxMWRydi5oXSBbaW5jbHVkZS94MTFmb250LmhdIFtkb2N1bWVudGF0aW9uL2ZvbnRzXQotCVJld3JvdGUgZm9udCBtYXBwZXIgZnJvbSBzY3JhdGNoLgotCi0JKiBbdG9vbHMvZm50MmJkZi5jXQotCUJ1ZyBmaXhlcy4gUkVQTEFDRSBGT05UUyBDUkVBVEVEIEJZIFRIRSBQUkVWSU9VUyBWRVJTSU9OUy4KLQotCSogW3dpbmRvd3MvZGVmd25kLmNdIFt3aW5kb3dzL25vbmNsaWVudC5jXQotCVdvcmQgZG9jdW1lbnQgd2luZG93IGFjdGl2YXRpb24gZml4LgotCi0JKiBbd2luZG93cy9tZGkuY10gW3dpbmRvd3Mvd2luLmNdCi0JUmVwbGFjZWQgV0NMIGxpc3RzIHdpdGggV0lOX0J1aWxkV2luQXJyYXkoKS4KLQotTW9uIEp1biAgOSAyMzo1MToxNiAxOTk3ICBBbmRyZXcgVGF5bG9yIDxhdGF5bG9yQGNhZHZpc2lvbi5jb20+Ci0KLQkqIFttaXNjL2Vycm9yLmNdIFtpbmNsdWRlL3dpbmRvd3MuaF0gW2lmMTYzMi9rZXJuZWwuc3BlY10KLQlJbXBsZW1lbnRlZCBMb2dQYXJhbUVycm9yLCBMb2dFcnJvciBmdW5jdGlvbnMuCi0KLVR1ZSBKdW4gIDMgMjM6NDY6MDQgMTk5NyAgTWljaGllbCB2YW4gTG9vbiA8bWZ2bEB4czRhbGwubmw+Ci0KLQkqIFtpbmNsdWRlL21tc3lzdGVtLmhdIFttdWx0aW1lZGlhL2F1ZGlvLmNdCi0JQ29uc3RhbnRzIGZvciBhc3luY2hyb25vdXMgcGxheSBhbmQgcmVjb3JkLgotCi0JKiBbbXVsdGltZWRpYS90aW1lLmNdCi0JRmlsbGVkIGluIHNvbWUgZW1wdHkgZnVuY3Rpb25zLgotCi0JKiBbbXVsdGltZWRpYS9tbXN5c3RlbS5jXQotCUZpeGVkIGJ1Z3MgaW4gd2F2ZU91dE9wZW4uCi0KLQkqIFttdWx0aW1lZGlhL21tc3lzdGVtLmNdIFttdWx0aW1lZGlhL2F1ZGlvLmNdCi0JSW1wbGVtZW50ZWQgV2luZG93IENhbGxiYWNrIGZvciB3YXZlIG91dHB1dCBhdCBsZWFzdC4KLQotCSogW2ZpbGVzL2ZpbGUuY10KLQlDb3JyZWN0ZWQgYnVnIGluIEZpbGVEb3NTZXRFcnJvci4KLQlOVUxMIHBvaW50ZXIgY2hlY2tpbmcgYWRkZWQuCi0KLQkqIFttaXNjL3NweS5jXQotCUFkZGVkIE11bHRpbWVkaWEgbWVzc2FnZXMgdG8gU1BZX0dldE1zZ05hbWUuCi0KLVR1ZSBKdW4gMyAyMjozNDozMCAxOTk3ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KLQotCSogW2RlYnVnZ2VyLyouY11baW5jbHVkZS9wZWV4ZS5oXVtsb2FkZXIvKi5jXVt0b29scy9idWlsZC5jXQotCSAgW3Rvb2xzL2ZudDJiZGYuY11bbGlicmFyeS9zdXAuY10KLQlJTUFHRV8qIHN0cnVjdHMvZGVmaW5lcyBjaGFuZ2VkIGZpdCBiZXR0ZXIgdG8gU0RLIG5hbWluZwotCURvbid0IGxvYWQgbm9uLWkzODYgUEUgZXhlY3V0YWJsZXMuCi0JJWZzIHNob3VsZCBhbHJlYWR5IGJlIGluaXRpYWxpc2VkIGZvciB0aGUgRklSU1QgbG9hZGVkIFBFIG1vZHVsZS4KLQotCSogW2lmMTYzMi9hZHZhcGkuc3BlY11bd2luMzIvYWR2YXBpLmNdCi0JU29tZSBzbWFsbCBzdHVicyBhZGRlZCB0byBicmluZyB3aW4zMiBzZXR1cC5leGUgYSBiaXQgZmFydGhlci4KLQotCSogW2lmMTYzMi9rZXJuZWwzMi5zcGVjXVtzY2hlZHVsZXIvcHJvY2Vzcy5jXQotCUFkYXB0ZWQgdG8gbWF0Y2ggd2luOTUga2VybmVsMzIuZGxsIG9yZGluYWxzIChOVCBkb2Vzbid0IHVzZQotIAlvcmRpbmFsIGltcG9ydCksIHNvbWUgb3JkaW5hbCBvbmx5IGV4cG9ydGVkIGZ1bmN0aW9ucyBhZGRlZC4KLQotCSogW2lmMTYzMi9yZWxheS5jXQotCUFkZGVkIENhbGxQcm9jMzJXLgotCi0JKiBbbWlzYy9semV4cGFuZC5jXQotCUZpeGVkIHJldHVybiB2YWx1ZXMgb2YgR2V0RXhwYW5kZWROYW1lKiAodGhhbmtzIHRvIEFuZHJlYXMgTW9ocikuCi0KLQkqIFtvYmplY3RzL2RpYi5jXQotCUV2ZXJ5dGhpbmcgd2l0aCBtb3JlIHRoYW4gOCBiaXQgb2YgY29sb3IgaXMgYSB0cnVlY29sb3IgbW9kZQotCWFuZCBkb2Vzbid0IGhhdmUgYSBjb2xvcm1hcC4KLQotVHVlIEp1biAgMyAwOToyNDo1MyAxOTk3ICBKb2huIEhhcnZleSA8am9obkBkaXZpc2lvbi5jby51az4KLQotCSogW2dyYXBoaWNzL3dpbjE2ZHJ2L2ZvbnQuY10gW2dyYXBoaWNzL3dpbjE2ZHJ2L2luaXQuY10KLQkgIFtncmFwaGljcy93aW4xNmRydi9wcnRkcnYuY10gW2dyYXBoaWNzL3dpbjE2ZHJ2L3RleHQuY10KLQkgIFtpbmNsdWRlL3dpbjE2ZHJ2LmhdCi0JQ2hhbmdlZCBzb21lIHN0cnVjdHVyZXMgdGhhdCBhcmUgcGFzc2VkIHRvIGFuZCBmcm9tIHRoZSAxNiBiaXQKLSAJZHJpdmVycyB0byBiZSBhbGxvY2F0ZWQgb24gdGhlIGdsb2JhbCBoZWFwLgotCUltcGxlbWVudGVkIEVzY2FwZShDb250cm9sKSAweDEwMCBHZXRFeHRUZXh0RGF0YSBwcm9wZXJseSB0bwotCXN0b3Agd29yZCBmcm9tIGNyYXNoaW5nLgotCVBvc3RzY3JpcHQgZHJpdmVyIG5vdyBwcmludHMgb24gY29tcGxldGUgcGFnZSBpbnN0ZWFkIG9mIHRvcAotCWxlZnQgY29ybmVyLgotCVByaW50IHNwb29saW5nIGltcGxlbWVudGVkLgotCi0JKiBbbG9hZGVyL21vZHVsZS5jXQotCU1PRFVMRV9HZXRPcmRpbmFsIGNoYW5nZWQgY2hhciBidWZmZXIgdG8gdW5zaWduZWQgY2hhciB0byBzdG9wCi0JYSBsb29wIHRoYXQgd2FzIGhhcHBlbmluZyB3aGVuIHJ1bm5pbmcgdGhlIGZvbnQgY29udHJvbAotCXByb2dyYW0gZnJvbSB0aGUgY29udHJvbCBwYW5lbC4KLQotU3VuIEp1biAgMSAxOTowNTowMiAxOTk3ICBQZXRlciBTY2hsYWlsZSA8dXA5bkByei51bmkta2FybHNydWhlLmRlPgotCi0JKiBbaW5jbHVkZS9taXNjZW11LmhdIFtsb2FkZXIvbWFpbi5jXSBbbXNkb3MvaW9wb3J0cy5jXQotCUFkZGVkIHN1cHBvcnQgZm9yIGRpcmVjdCBpbyBwb3J0IGFjY2Vzcy4KLQotRnJpIE1heSAzMCAxNjoxODozNSAxOTk3ICBEYXZpZCBBLiBDdXRoYmVydCA8ZGFjdXRAZHNzYzMzNTMuZWNlLmNtdS5lZHU+Ci0KLQkqIFttaXNjL3Zlci5jXQotCUltcGxlbWVudGVkIFZlckZpbmRGaWxlMTYuCi0KLVR1ZSBNYXkgMjcgMjI6MDA6MzkgMTk5NyAgUmljayBSaWNoYXJkc29uIDxyaWNrQGRnaWkuY29tPgotCi0JKiBbbWlzYy9jb21tLmNdCi0JRml4ZWQgR2V0Q29tbUVycm9yIGFuZCBHZXRDb21tRXZlbnRNYXNrLgotCi1UdWUgTWF5IDI3ICA5OjEwOjUzIDE5OTcgIEdlb3JnIEJleWVybGUgPGdiZXllcmxlQGF3aS1wb3RzZGFtLmRlPgotCi0JKiBbc2NoZWR1bGVyL3RocmVhZC5jXQotCU1pbm9yIGZpeCBpbiB0aHJlYWQgZGF0YWJhc2UgaW5pdGlhbGl6YXRpb24uCi0KLU1vbiBNYXkgMjYgMTk6NDY6MzQgMTk5NyAgUGhpbGlwcGUgRGUgTXV5dGVyICA8cGhkbUBpbmZvLnVjbC5hYy5iZT4KLQotCSogW29iamVjdHMvZGMuY10KLQlJbiBEQ19TZXR1cEdDRm9yUGVuLCBhdm9pZCB0byBkcmF3IGluIEdYeG9yIG1vZGUgd2l0aCBhIDAgbWFzay4KLQotTW9uIE1heSAyNiAxNToyMjo0MiAxOTk3ICBCcnVjZSBNaWxuZXIgPEJydWNlLk1pbG5lckBnZW5ldGljcy51dGFoLmVkdT4KLQotCSogW2xvYWRlci9wZV9pbWFnZS5jXQotCUFkZCBjb2RlIGZvciBtb2R1bGVzIHRoYXQgY28tcmVmZXJlbmNlIGVhY2ggb3RoZXIuIFBob3RvZGV4J3MKLQlhZ2RzLmV4ZSAoY3BpYzMyKSBoYXMgdHdvIGRsbCdzIHRoYXQgbWFrZSBjYWxscyBpbnRvIGVhY2ggb3RoZXIuCi0KLU1vbiBNYXkgMjYgMTM6Mzg6MTYgMTk5NyAgSm9keSBHb2xkYmVyZyA8am9keWdAaWR0Lm5ldD4KLQotCSogW21lbW9yeS92aXJ0dWFsLmNdCi0JRG9udCB1c2Ugc3RkaW8gd2hlbiByZWFkaW5nIC9wcm9jL3NlbGYvbWFwcy4gIEl0IGNhdXNlcyBwcm9ibGVtcwotCXdpdGggbGliYzYuCi0KLQkqIFt3aW5kb3dzL2RpYWxvZy5jXQotCVRyYW5zbGF0ZSBtZXNzYWdlcyBpbiBJc0RpYWxvZ01lc3NhZ2Ugd2hlbiBETEdDX1dBTlRNRVNTQUdFCi0JaXMgdXNlZC4KLQotU3VuIE1heSAyNSAxNzowMjoyMSAxOTk3ICBIdXcgRCBNIERhdmllcyA8aC5kYXZpZXMxQHBoeXNpY3Mub3hmb3JkLmFjLnVrPgotCi0JKiBbb2JqZWN0cy9tZXRhZmlsZS5jXQotCVJlc291cmNlIGNsZWFudXAgaW4gRW51bU1ldGFGaWxlKCkuIFRoaXMgd2FzIG9uZSByZWFzb24gV29yZCB3YXMKLQljcmFzaGluZyBhZnRlciBsb25nIHBlcmlvZHMgb2YgdXNlLiAoVGhhbmtzIHRvIENocmlzIFVuZGVyaGlsbCBmb3IKLQl0aGUgbG9ncykKLQotU3VuIE1heSAyNSAxNDo1OTozMyAxOTk3ICBKaW1lbiBDaGluZyAgPGpjaGluZ0BmbGV4LmNvbT4KLQotCSogW211bHRpbWVkaWEvbWNpc3RyaW5nLmNdCi0JSW5pdGlhbCBzdXBwb3J0IGZvciBjb21wb3VuZCBNQ0kgY29tbWFuZHMuCi0JVXNlIGNhc2UtaW5zZW5zaXRpdmUgY29tcGFyZSBmb3IgJ2FsaWFzJyBhbmQgJ2VsZW1lbnQnIGtleXdvcmRzLgotCUZpeGVkIHBvaW50ZXIgY29weSBvZiBhcmdzIGtleXdvcmRzIGFycmF5LgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UdWUgTWF5IDIwIDE5OjIwOjIzIDE5OTcgIFBhYmxvIFNhcmF0eGFnYSA8c3J0eGdAY2hhbmFlLmFscGhhbmV0LmNoPgotCi0JKiBbcmVzb3VyY2VzL3N5c3Jlc19Fcy5yY10KLQlVcGRhdGVkIENIT09TRV9GT05ULCBDSE9PU0VfQ09MT1IsIEVESVRNRU5VIGZvciBTcGFuaXNoLgotCi1Nb24gTWF5IDE5IDIyOjA2OjA0IDE5OTcgIE1pY2hpZWwgdmFuIExvb24gPG1mdmxAeHM0YWxsLm5sPgotCi0JKiBbbXVsdGltZWRpYS9tY2lzdHJpbmcuY10KLQlDb3JyZWN0ZWQgYnVnIGZvciBkZXZpY2UhZWxlbWVudCBjb21tYW5kLgotCi0JKiBbbXVsdGltZWRpYS9tbWF1eC5jXQotCVJlcGxhY2VkIHByaW50ZiBhbmQgZnByaW50ZiBjYWxscyBieSBkcHJpbnRmX21tYXV4LgotCi0JKiBbbXVsdGltZWRpYS9hdWRpby5jXQotCUNvcnJlY3RlZCBkZWJ1Z21lc3NhZ2UgaW4gd29kR2V0Vm9sdW1lLgotCUluY2x1ZGUgY29kZSBmb3IgTUNJX0NVRSBjb21tYW5kLgotCi0JKiBbbXVsdGltZWRpYS9tbXN5c3RlbS5jXQotCUFkZGVkIHRoZSBNQ0lFUlJfU0VRIGVycm9yIG1lc3NhZ2VzLgotCi0JKiBbaWYxNjMyL21tc3lzdGVtLnNwZWNdIFttdWx0aW1lZGlhL2F1ZGlvLmNdIFttdWx0aW1lZGlhL21tc3lzdGVtLmNdCi0JQ2hhbmdlZCBjYWxsIHN0cnVjdHVyZSBvZiB3YXZlSW5PcGVuIGFuZCB3YXZlT3V0T3Blbi4KLQotCSogW211bHRpbWVkaWEvbW1zeXN0ZW0uY10gW211bHRpbWVkaWEvYXVkaW8uY10gW211bHRpbWVkaWEvbWlkaS5jXQotCSAgW211bHRpbWVkaWEvbW1hdXguY10gW211bHRpbWVkaWEvbWNpY2RhLmNdIFttdWx0aW1lZGlhL21jaWFuaW0uY10KLQkgIFttdWx0aW1lZGlhL21jaXN0cmluZy5jXSBbaW5jbHVkZS9tbXN5c3RlbS5oXQotCUNoYW5nZWQgdGhlIGRldmljZUlEIHNjaGVtZS4KLQotCSogW2luY2x1ZGUvcXVldWUuaF0gW2luY2x1ZGUvd2luMTZkcnYuaF0gW21zZG9zL2RwbWkuY10KLQkgIFt3aW5kb3dzL3VzZXIuY10gW3dpbmRvd3MvZHJpdmVyLmNdIFtncmFwaGljL3dpbmcuY10KLQkgIFtncmFwaGljcy94MTFkcnYvYml0bWFwLmNdIFttaXNjL3dzcHJpbnRmLmNdIFttaXNjL2NydGRsbC5jXQotCVJlbW92ZWQgY29tcGlsZXIgd2FybmluZ3MuCi0KLU1vbiBNYXkgMTkgMDE6MzI6MjQgMTk5NyAgQWxleCBLb3JvYmthIDxhbGV4QHRyYW50b3IucGhhcm0uc3VueXNiLmVkdT4KLQotCSogW2NvbnRyb2xzL21lbnUuY10gW3dpbmRvd3Mvd2luLmNdIFt3aW5kb3dzL2dyYXBoaWNzLmNdCi0JUG9wdXAgbWVudSBzaGFkZSwgbmV3IHN5c3RlbSBtZW51IGltcGxlbWVudGF0aW9uLCAKLQlNb2RpZnlNZW51KCkgZml4ZXMsIGJldHRlciBjaGVjayBtYXJrIHBhaW50aW5nLgotCi0JKiBbd2luZG93cy9tZGkuY10KLQlNREkgY2xpZW50IGZpeCBmb3IgV2luMzIuCi0KLVNhdCBNYXkgMTcgMTI6MDI6MTEgMTk5NyAgQWxicmVjaHQgS2xlaW5lICA8a2xlaW5lQGFrLnNheC5kZT4KLQotCSogW29iamVjdHMvbWV0YWZpbGUuY10KLQlBZGRlZCBoYW5kbGluZyBvZiBNRVRBX0RJQkJJVEJMVCwgTUVUQV9TRVRURVhUSlVTVElGSUNBVElPTgotCXBsdXMgYnVnZml4IGluIE1FVEFfRVhUVEVYVE9VVCAoc3RhcnRfb2ZfdGV4dCBldGMuKQotCi1UaHUgTWF5IDE1IDIyOjUyOjAwIDE5OTcgIEppbWVuIENoaW5nICA8amNoaW5nQGZsZXguY29tPgotCi0JKiBbbG9hZGVyL25lX2ltYWdlLmNdCi0JTWFrZSBzdXJlIGRncm91cCBpcyB2YWxpZCBieSBjaGVja2luZyBwTW9kdWxlLT5mbGFncyBjb25zaXN0ZW50bHkuCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVR1ZSBNYXkgIDYgMTk6MTI6MjAgMTk5NyAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+Ci0KLQkqIFtsb2FkZXIvdGFzay5jXSBbbG9hZGVyL21vZHVsZS5jXQotCUZpeGVkIGNvbW1hbmQgbGluZSBpbiBMb2FkTW9kdWxlIHRvIGFscmVhZHkgaW5jbHVkZSB0aGUgbGVuZ3RoCi0JaW5kaWNhdG9yICh0aGFua3MgdG8gQW5kcmVhcyBNb2hyKS4KLQotCSogW3dpbmRvd3MvZGlhbG9nLmNdCi0JRGxnRGlyTGlzdDogZml4ZWQgYmVoYXZpb3Igd2l0aCBERExfRFJJVkVTIHwgRERMX0VYQ0xVU0lWRSAodGhhbmtzCi0JdG8gQnJ1Y2UgTWlsbmVyIGZvciB0aGlzIG9uZSk7IGNvcnJlY3RseSB1cGRhdGUgZmlsZSBzcGVjIG9uIGV4aXQuCi0KLQkqIFt3aW5kb3dzL3dpbnByb2MuY10gW2lmMTYzMi90aHVuay5jXSBbaW5jbHVkZS9jYWxsYmFjay5oXQotCU1vdmVkIGVtdWxhdG9yLXNwZWNpZmljIGNvZGUgZm9yIGNhbGxpbmcgd2luZG93IHByb2NlZHVyZSB0bwotCXRodW5rLmMuCi0KLU1vbiBBcHIgMjggMTA6MjE6NTkgMTk5NyAgSHV3IEQgTSBEYXZpZXMgPGguZGF2aWVzMUBwaHlzaWNzLm94Zm9yZC5hYy51az4KLQotCSogW21lbW9yeS9sb2NhbC5jXQotCUJldHRlciBpbXBsZW1lbnRhdGlvbiBvZiBtb3ZlYWJsZSBibG9ja3MgKGZpcnN0IHdvcmQgaW4gYmxvY2sgaXMKLQl0aGUgaGFuZGxlIGl0c2VsZikgYW5kIGRpc2NhcmRlZCBibG9ja3MuIExvY2FsKFJlKUFsbG9jIGlzIG11Y2gKLQltb3JlIGxpa2UgdGhlIHJlYWwgdGhpbmcuCi0KLVRodSBBcHIgMjQgMTk6NTA6MTkgMTk5NyAgQWxicmVjaHQgS2xlaW5lIDxrbGVpbmVAYWsuc2F4LmRlPgotCi0JKiBbb2JqZWN0cy9tZXRhZmlsZS5jXQotCUFkZGVkIGhhbmRsaW5nIG9mIG1ldGEgcmVjb3JkIE1FVEFfRElCQ1JFQVRFUEFUVEVSTkJSVVNILgotCi1Nb24gQXByIDIxIDE0OjAzOjMyIDE5OTcgIEFsZXggS29yb2JrYSA8YWxleEB0cmFudG9yLnBoYXJtLnN1bnlzYi5lZHU+Ci0KLQkqIFttdWx0aW1lZGlhL21tc3lzdGVtLmNdIFttdWx0aW1lZGlhL2F1ZGlvLmNdCi0JRml4ZWQgbGVmdG92ZXIgcHJvYmxlbXMgd2l0aCBtYXNrZWQgZGV2aWNlIElEcy4KLQotCSogW21zZG9zL2ludDIxLmNdCi0JUmVtb3ZlZCBjb2RlIGR1cGxpY2F0aW9ucywgZml4ZWQgV3JpdGUuCi0KLQkqIFt3aW5kb3dzL2V2ZW50LmNdIFt3aW5kb3dzL2RjZS5jXSBbd2luZG93cy9ub25jbGllbnQuY10KLQkgIFt3aW5kb3dzL3dpbnBvcy5jXQotCVlldCBhbm90aGVyIGF0dGVtcHQgdG8gbWFrZSAtbWFuYWdlZCB3b3JrIGJldHRlci4KLQotCSogW2NvbnRyb2xzL2NvbWJvLmNdCi0JVUkgZml4LgotCi1Nb24gQXByIDIxIDEzOjEwOjI0IDE5OTcgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AaW1tZDQuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+Ci0KLQkqIFtkZWJ1Z2dlci8qXQotCUFsbCAiTG9hZGluZyBmcm9tIC4uLiIgbGluZXMgbWVyZ2VkIGludG8gb25lIHNvIGltcG9ydGFudAotCWluZm9ybWF0aW9uIGJlZm9yZSB0aGUgY3Jhc2ggZG9lc24ndCBzY3JvbGwgb3V0LgotCi0JKiBbaWYxNjMyL2tlcm5lbC5zcGVjXQotCUFkZGVkIHNvbWUgb3JkaW5hbCBzdHVicyB1c2VkIGJ5IHdpbjk1IE9MRSBhbmQgZnJpZW5kcy4KLQotCSogW3dpbjMyL3Byb2Nlc3MuY10gW2lmMTYzMi9rZXJuZWwuc3BlY10gW2xvYWRlci9tb2R1bGUuY10KLQlNc2dXYWl0Rm9yTXVsdGlwbGVPYmplY3RzLEdldFByb2Nlc3NUaW1lcyxSdGxJbWFnZU50SGVhZGVycywKLSAJTG9hZExpYnJhcnlFeDMyVyBhbmQgR2V0UHJvY0FkZHJlc3MzMlcgYWRkZWQuCi0KLQkqIFtvYmplY3RzL2JpdG1hcC5jXQotCVhJbWFnZXMgdXNlIGFub3RoZXIgbWVtb3J5IGxheW91dCBmb3IgZGVwdGggNCAoYW5kIHBvc3MuIG90aGVyCi0gCWRlcHRocykgdGhlbiBXaW5kb3dzIGJpdG1hcHMuIFJlcGxhY2VkIHNwZWVkdXAgaGFjayBieSBnZW5lcmljCi0gCShhbmQgYmV0dGVyIHdvcmtpbmcpIGNvZGUuCi0KLQkqIFtvYmplY3RzL2RpYi5jXQotCUFub3RoZXIgeGltYWdlIT1iaXRtYXAgbWVtb3J5IGxheW91dCBidWcuIAotCUFsbCBfWGluaXRJbWFnZUZ1bmNQdHJzIGV4Y2VwdCBvbmUgcmVtb3ZlZC4KLQotU3VuIEFwciAyMCAxNzoxMjozMCAxOTk3ICBBbmRyZXcgVGF5bG9yIDxhdGF5bG9yQGNhZHZpc2lvbi5jb20+Ci0KLQkqIFttdWx0aW1lZGlhL2F1ZGlvLmNdCi0JRml4ZWQgc29tZSByZWdyZXNzaW9uIGJ1Z3MuCi0KLVN1biBBcHIgMjAgMTI6MTU6MDkgMTk5NyAgQW5kcmVhcyBNb2hyIDwxMDAuMzA5MzZAZ2VybWFueS5uZXQ+Ci0KLQkqIFtsb2FkZXIvbW9kdWxlLmNdCi0JRml4ZWQgTU9EVUxFX0xvYWRFeGVIZWFkZXIoKSB0byB1c2UgdGhlIGNvcnJlY3Qgb2Zmc2V0IGZvcgotCWZhc3QtbG9hZCBhcmVhLgotCi1TYXQgQXByIDE5IDE2OjQwOjAwIDE5OTcgIENoYWQgRnJhbGVpZ2ggPGNoYWRmQGJvb2tjYXNlLmNvbT4KLQotCSogW2NvbnRyb2xzLypdIFtkZWJ1Z2dlci8qXSBbZ3JhcGhpY3Mvd2luMTZkcnYvKl0gW2xvYWRlci8qXSBbbWlzYy8qXQotCSAgW3dpbjMyLypdCi0JUmVtb3ZlZCA8bWFsbG9jLmg+IGFuZCBhZGRlZCA8c3RkbGliLmg+IHdoZXJlIG5lZWRlZC4KLQlDaGFuZ2VkIHByaW50ZiBmb3JtYXRlcnMgdG8gbWF0Y2ggYXJndW1lbnQgdHlwZXMgKCVseCBpbnN0ZWFkIG9mICV4KS4KLQlDYXN0ZWQgc29tZSB0eXBlcyB0byBtYWtlIHRoZSBjb21waWxlciBoYXBweS4gTW9zdGx5IHBvaW50ZXI8LT51bG9uZy4KLQotCSogW2dyYXBoaWNzL3dpbjE2ZHJ2L2luaXQuY10KLQlGaXhlZCB1bmluaXRpYWxpemVkIHZhcmlhYmxlLgotCi0JKiBbaW5jbHVkZS9tc2Rvcy5oXQotCUFkZGVkIDxzeXMvdHlwZXMuaD4gbmVlZGVkIGZvciA8ZGlyZW50Lmg+LgotCi0JKiBbaW5jbHVkZS9zaWdjb250ZXh0LmhdCi0JQ29tYmluZWQgYSBjb21tb24gTmV0QlNEICYgRnJlZUJTRCAjaWZkZWYsIGFuZCBhZGRlZCBpbiBPcGVuQlNELgotCUNhc3RlZCBFSVBfc2lnL0VTUF9zaWcgdG8gYmUgdW5zaWduZWQgbG9uZyAoZGVjbGFyZWQgYXMgJ2ludCcgaW4gKkJTRCkuCi0KLQkqIFttaXNjL2NydGRsbC5jXSBbbWlzYy9sc3RyLmNdCi0JQ2FzdGVkIGxhc3QgYXJndW1lbnQgaW4gdipwcmludGYoKSB0byBiZSB2YV9saXN0LiBUaGlzIGNvZGUgc2VlbXMgdG8KLQltYWtlIEJJRyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgaW1wbGVtZW50YXRpb24gb2YgdmFfbGlzdC4KLQotCSogW21pc2MvdmVyLmNdCi0JRml4ZWQgaW1wb3NzaWJsZSBpZigpIGV4cHJlc3Npb24gKHVuc2lnbmVkIDwgMCkuCi0KLQkqIFttaXNjL3dpbnNvY2suY10KLQlSZW1vdmVkIHNlbWljb2xvbiBvbiB0aGUgZW5kIG9mIGFuIGlmKCkgc3RhdGVtZW50LgotCi0JKiBbd2luZG93cy9tZGkuY10KLQlDaGFuZ2VkIGEgY291bnRlci9pbmRleCB0byB1bnNpZ25lZCBzaW5jZSBpdCB3YXMgY29tcGxhaW5pbmcgYWJvdXQKLQlzaWduZWQvdW5zaWduZWQgY29tcGFyaXNvbiBhbmQgZGlkbid0IG5lZWQgdG8gYmUgbmVnYXRpdmUuCi0KLVdlZCBBcHIgMTYgMTc6NDM6MTkgMTk5NyBHZW9yZyBCZXllcmxlIDxnYmV5ZXJsZUBhd2ktcG90c2RhbS5kZT4KLQotCSogW3NjaGVkdWxlci90aHJlYWQuY10KLQlNaW5vciBmaXggaW4gdGhyZWFkIGRhdGFiYXNlIGluaXRpYWxpemF0aW9uLgotCi1XZWQgQXByIDE2IDE3OjI4OjA1IDE5OTcgIEFuZHJlYXMgTW9ociA8MTAwLjMwOTM2QGdlcm1hbnkubmV0PgotCi0JKiBbZmlsZXMvZmlsZS5jXQotCUZpeGVkIEZJTEVfRmlsbEluZm8oKSB0byBvbWl0IHRoZSBhcmNoaXZlIGZsYWcgd2hlbiBoYW5kbGluZyBhIERPUwotCWRpcmVjdG9yeSBlbnRyeS4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotTW9uIEFwciAxNCAxMToyMjo1NCAxOTk3ICBKb2huIEhhcnZleSA8am9obkBkaXZpc2lvbi5jby51az4KLQotCSogW2dyYXBoaWNzL3dpbjE2ZHJ2L2luaXQuY10KLQlNaW5vciBjaGFuZ2VzIHRvIGhlbHAgZGVidWcgcHJvYmxlbXMuCi0KLQkqIFtpZjE2MzIvZHVtbXkuY10gW2lmMTYzMi9nZGkuc3BlY10KLQlEdW1teSByb3V0aW5lcyBmb3IgU3RhcnRQYWdlLCBFbmRQYWdlLCBTZXRBYm9ydFByb2MsIEFib3J0UHJvYy4KLQotCSogW21pc2MvcHJpbnRkcnYuY10gW2lmMTYzMi9nZGkuc3BlY10gW2luY2x1ZGUvd2luZG93cy5oXQotCVN0YXJ0RG9jMTYsIEVuZERvYzE2IG5ldyBmdW5jdGlvbnMuCi0KLVN1biBBcHIgMTMgMTE6MTg6MzUgMTk5NyAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+Ci0KLQkqIFttZW1vcnkvdmlydHVhbC5jXQotCUltcGxlbWVudGVkIE1hcFZpZXdPZkZpbGUuCi0KLQkqIFtkZWJ1Z2dlci9kYmcueV0KLQlBZGRlZCAnaW5mbyBtYXBzJyBjb21tYW5kLgotCi1GcmkgQXByIDExIDE2OjM0OjA4IDE5OTcgIEZyYW5zIHZhbiBEb3Jzc2VsYWVyIDxkZXZlbEBydWxobXBjNTguTGVpZGVuVW5pdi5ubD4KLQotCSogW2NvbnRyb2xzL2VkaXQuY10gW2NvbnRyb2xzL0VESVQuVE9ET10KLQlTdGFydGVkIHJlc3RydWN0dXJpbmcuICBQZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMuCi0JRml4ZWQ6CXdvcmR3cmFwLCBzY3JvbGxiYXIgaGFuZGxpbmcsIHNjcm9sbGluZywgcGFpbnRpbmcsCi0JCUVkaXRXbmRQcm9jKCkgaXMgbm93IHJlZW50cmFudCwgd29yZGJyZWFrIHByb2NzLAotCQliZXR0ZXIgY29tcGxpYW5jZSB0byBzcGVjcy4KLQlOZXc6CW1hcmdpbnMsIGZvcm1hdCByZWN0YW5nbGUuCi0KLQkqIFtjb250cm9scy93aWRnZXRzLmNdCi0JQ2hhbmdlZCB0aGUgY3Vyc29yIGZvciB0aGUgZWRpdCBjb250cm9sIGNsYXNzIHRvIGFuIEktYmVhbS4KLQotCSogW2luY2x1ZGUvY2FsbGJhY2suaF0KLQlBZGRlZCAzMiBiaXQgd29yZGJyZWFrIGNhbGxiYWNrLgotCi1Nb24gQXByICA3IDIwOjUzOjI4IDE5OTcgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+Ci0KLQkqIFtvYmplY3RzL21ldGFmaWxlLmNdCi0JQWRkZWQgaGFuZGxpbmcgb2Ygc29tZSBtb3JlIG1ldGFmaWxlIHJlY29yZHM6IAotCU1FVEFfQ1JFQVRFUkVHSU9OLCBNRVRBX0lOVkVSVFJFR0lPTiBldGMuCi0KLVNhdCBBcHIgIDUgMDk6MjM6MDIgTUVUIERTVCAxOTk3IFN2ZW4gVmVyZG9vbGFlZ2UgPHNraW1vQGJyZXVnaGVsLnVmc2lhLmFjLmJlPgotCi0JKiBbbG9hZGVyL3NpZ25hbC5jXQotCURlZmluZSBrZXJuZWwgc2lnYWN0aW9uIG91cnNlbHZlcyBpbnN0ZWFkIG9mIGdldHRpbmcgaXQKLQlmcm9tIHRoZSBrZXJuZWwgc291cmNlLgotCi1XZWQgQXByICAyIDIxOjA1OjAwIDE5OTcgIFV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnRoLWRhcm1zdGFkdC5kZT4KLQotCSogW2NvbnRyb2wvbWVudS5jXQotCUZpeCByZXR1cm4gdmFsdWUgcmFuZ2UgZm9yIEdldE1lbnVTdGF0ZS4KLQotCSogW2ZpbGVzL2ZpbGUuY10KLQlBbHdheXMgZmlsbCBvdXQgb2ZzLT5zelBhdGhOYW1lIGluIEZJTEVfRG9PcGVuRmlsZS4KLQotCSogW21lbW9yeS9zdHJpbmcuY10KLQlBZGQgZGVidWcgb3B0aW9uIHN0cmluZy4KLQotCSogW29iamVjdHMvY3Vyc29yaWNvbi5jXQotCUZpeCByZXR1cm4gdmFsdWUgZm9yIERlc3Ryb3lJY29uMzIuCi0KLU1vbiBNYXIgMzEgMTc6MTY6MTIgMTk5NyAgQWxleCBLb3JvYmthIDxhbGV4QHRyYW50b3IucGhhcm0uc3VueXNiLmVkdT4KLQotCSogW0RFVkVMT1BFUlMtSElOVFNdIFttaXNjLypdIFt3aW5kb3dzLypdIFtncmFwaGljcy8qXQotCUFkZGVkIGRlc2NyaXB0aW9uIG9mIHRoZSBzb3VyY2UgdHJlZS4gTW92ZWQgc2V2ZXJhbAotCWZpbGVzIHRvIGZpdCBpdC4KLQotCSogW21pc2Mvc2hlbGwuY10KLQlVc2UgV2luMzIgaGVhcCBmdW5jdGlvbnMuCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUZyaSBNYXIgMjggMTQ6MTg6MzIgMTk5NyAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+Ci0KLQkqIFttaXNjL21haW4uY10gW0FOTk9VTkNFXQotCVVwZGF0ZSB0aGUgbGlzdCBvZiBjb250cmlidXRvcnMuIFBsZWFzZSBsZXQgbWUga25vdyBpZiBJIGZvcmdvdAotCXNvbWVvbmUuCi0KLQkqIFtjb250cm9scy9jb21iby5jXQotCUZpeGVkIGJ1ZyBpbiBDQl9ESVIxNiBoYW5kbGluZy4KLQlVc2UgY29ycmVjdCB0ZXh0IGNvbG9yIGluIENCUGFpbnRUZXh0LgotCi0JKiBbY29udHJvbHMvbGlzdGJveC5jXQotCUZpeGVkIFdNX0NUTENPTE9SIGhhbmRsaW5nLgotCi0JKiBbd2luZG93cy93aW5wcm9jLmNdCi0JQWRkZWQgdHJhbnNsYXRpb24gZm9yIEVNXyozMiBtZXNzYWdlcy4KLQotTW9uIE1hciAyNCAwMTozMTo1MiAxOTk3ICBTdGVmZmVuIE1vZWxsZXIgPG1vZWxsZXJAbXBpbWctYmVybGluLWRhaGxlbS5tcGcuZGU+Ci0KLQkqIFtmaWxlcy9kcml2ZS5jXQotCUFkZGVkIGluZm9ybWF0aW9uIG9uIGRldmljZSBhbmQgaW5vZGUgbnVtYmVycyB0byB0aGUgRE9TRFJJVkUKLQlzdHJ1Y3QsIHVzaW5nIGl0IHRvIGZpbmQgRE9TIGRyaXZlcyBpbiBhIHBhdGggZXZlbiBpZiBpdCBjb250YWlucwotCXN5bWJvbGljIGxpbmtzLCBlbGltaW5hdGluZyBhbm5veWluZyBtZXNzYWdlcyBhdCBzdGFydHVwLiAgCi0JRWRpdGVkIGZ1bmN0aW9ucyBEUklWRV9Jbml0IGFuZCByZXdyb3RlIERSSVZFX0ZpbmREcml2ZVJvb3QuCi0KLVdlZCBNYXIgMTkgMTY6MzE6MTggMTk5NyAgSm9obiBIYXJ2ZXkgPGpvaG5AZGl2aXNpb24uY28udWs+Ci0KLQkqIFtncmFwaGljcy93aW4xNmRydi9mb250LmNdIFtncmFwaGljcy93aW4xNmRydi9pbml0LmNdCi0JICBbZ3JhcGhpY3MveDExZHJ2L2ZvbnQuY10gW29iamVjdHMvZm9udC5jXSBbaW5jbHVkZS9nZGkuaF0KLQkgIFtpbmNsdWRlL3dpbjE2ZHJ2LmhdIFtpbmNsdWRlL3gxMWRydi5oXQotCUltcGxlbWVudGVkIEdldENoYXJXaWR0aCB2aWEgZ3JhcGhpY3MgZHJpdmVycy4KLQotCSogW2dyYXBoaWNzL3dpbjE2ZHJ2L01ha2VmaWxlLmluXSBbZ3JhcGhpY3Mvd2luMTZkcnYvcHJ0ZHJ2LmNdCi0JTW92ZWQgcHJpbnRlciBkcml2ZXIgaW50ZXJmYWNlcyBpbnRvIGEgc2VwYXJhdGUgZmlsZS4KLQotCSogW2dyYXBoaWNzL3dpbjE2ZHJ2L3RleHQuY10KLQlGaXhlZCBidWdzIHRoYXQgc2VnLWZhdWx0ZWQgd3JpdGUuCi0KLVdlZCBNYXIgMTkgMTM6NTI6NDEgMTk5NyAgQWxleCBLb3JvYmthIDxhbGV4QHRyYW50b3IucGhhcm0uc3VueXNiLmVkdT4KLQotCSogW0JVR1NdCi0JVXBkYXRlLgotCi0JKiBbY29udHJvbHMvZWRpdC5jXQotCVJlbW92ZWQgdXNlbGVzcyBwYXJhbWV0ZXJzIGZyb20gYSBsb3Qgb2YgZnVuY3Rpb25zLgotCi0JKiBbY29udHJvbHMvbWVudS5jXQotCUltcHJvdmVkIGtleWJvYXJkIHNob3J0Y3V0cy4gQWRkZWQgY2hlY2sgZm9yIGVudHJpZXMgd2l0aCBwb3B1cCAKLQltZW51IGluIEVuYWJsZU1lbnVJdGVtKCkuCi0KLQkqIFt3aW5kb3dzL3dpbnByb2MuY10gW3dpbmRvd3Mvd2luLmNdIFttZW1vcnkvc2VsZWN0b3IuY10KLQlEbyBub3QgYWxsb2NhdGUgc2VwYXJhdGUgdGh1bmtzIGZvciBuZXcgd2luZG93cy4KLQotCSogW21pc2MvY2xpcGJvYXJkLmNdIFt3aW5kb3dzL3BhaW50aW5nLmNdCi0JRml4ZWQgcHJvYmxlbXMgd2l0aCBDbGlwQm9vay4KLQotICAgICAgICAqIFtjb250cm9scy9jb21iby5jXSBbY29udHJvbHMvZWRpdC5jXSBbY29udHJvbHMvbGlzdGJveC5jXQotCSAgW2NvbnRyb2xzL3dpZGdldHMuY10gW3dpbmRvd3MvZ3JhcGhpY3MuY10gW3dpbmRvd3MvZGVmZGxnLmNdCi0gICAgICAgIENvbWJvIHJld3JpdGUuCi0KLQkqIFtvYmplY3RzL2RpYi5jXQotCVNsaWdodCBpbXByb3ZlbWVudHMuCi0KLVdlZCBNYXIgMTkgMTE6MjE6MTcgMTk5NyAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+Ci0KLQkqIFttaXNjL2NydGRsbC5jXQotCUFkZGVkIGNoZGlyL21rZGlyLgotCi0JKiBbbWlzYy9udGRsbC5jXQotCUZpeGVkIHNvbWUgYnVncywgYWRkZWQgUnRsVW5pY29kZVN0cmluZ1RvQW5zaVN0cmluZy4KLQotCSogW3dpbjMyL3Byb2Nlc3MuY10KLQlBZGRlZCBpbml0aWFsaXNhdGlvbiBvZiBldmVudHMvc2VtYXBob3Jlcy9tdXRpY2VzLgotCi1XZWQgTWFyIDE5IDAxOjU1OjQwIDE5OTcgIFJpY2FyZG8gUi4gTWFzc2FybyA8bWFzc2Fyb0BpbWUudXNwLmJyPgotCi0JKiBbcmVzb3VyY2VzL3N5c3Jlc19Qby5yY10KLQlBZGRlZCBzdXBwb3J0IGZvciBQb3J0dWd1ZXNlIGxhbmd1YWdlLgotCi1TYXQgTWFyIDE4IDE4OjAwOjE0IDE5OTcgIFV3ZSBCb25uZXMgIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50aC1kYXJtc3RhZHQuZGU+Ci0KLQkqIFt3aW5kb3dzL3dpbnBvcy5jXSBbaWYxNjMyL3VzZXIuc3BlY10gW2lmMTYzMi91c2VyMzIuc3BlY10KLQlJbXBsZW1lbnRlZCBTd2l0Y2hUb1RoaXNXaW5kb3coKS4KLQkKLQkqIFttaXNjL3Zlci5jXQotCUNvcnJlY3RlZCBhIGZsYXcgaW4gVmVySW5zdGFsbEZpbGUzMkEuCi0JCi0JKiBbbXNkb3MvaW50MjEuY10KLQlDb3JyZWN0ZWQgd3JvbmcgbnVtYmVyIGluIEludDIxIDMzMDUKLQlDb3JyZWN0ZWQgSW50MjEgNzE0ZSwgaW1wbGVtZW50ZWQgSW50MjEgNzE2MCxDTD0yLCA3MTQzIGFuZCA3MTQ3Ci0JCi1TdW4gTWFyIDE2IDA5OjUzOjA0IDE5OTcgIEFuZHJlYXMgTW9ociA8MTAwLjMwOTM2QGdlcm1hbnkubmV0PgotCi0JKiBbbG9hZGVyL25lX21vZHVsZS5jXQotCUZpeGVkIE5FX0xvYWRTZWdtZW50cygpIHRvIHNldCBzaXplIHRvIHBTZWctPm1pbnNpemUgcmF0aGVyIHRoYW4KLQlzZXR0aW5nIGl0IHRvIDB4MTAwMDAgaWYgcFNlZy0+c2l6ZSBpcyAwLgotCi1UaHUgTWFyIDEzIDEyOjE1OjAwIDE5OTcgIEFuYW5kIEt1bXJpYSA8YWt1bXJpYUBvemVtYWlsLmNvbS5hdT4KLQotCSogW0FOTk9VTkNFXQotCUFkZGVkIGZ0cC5wcm9nc29jLnV0cy5lZHUuYXUgYXMgYSBtaXJyb3Igb2YgV2luZS4KLQotCSogW21lbW9yeS9nbG9iYWwuY10KLQlSZW1vdmVkIE1lbU1hbkluZm8gc2l6ZW9mIGNoZWNrLgotCi1Nb24gTWFyIDEwIDEwOjM1OjQ0IE1FVCAxOTk3IFN2ZW4gVmVyZG9vbGFlZ2UgPHNraW1vQGJyZXVnaGVsLnVmc2lhLmFjLmJlPgotCi0JKiBbZmlsZXMvZG9zX2ZzLmNdCi0JUGljayB1cCBrZXJuZWwgZGlyZW50IG9uIGdsaWJjIHN5c3RlbXMuCi0KLQkqIFtsb2FkZXIvc2lnbmFsLmNdCi0JUGljayB1cCBrZXJuZWwgc2lnYWN0aW9uIG9uIGdsaWJjIHN5c3RlbXMuCi0KLVNhdCBNYXIgIDggMjE6MDU6MzcgMTk5NyAgSmltZW4gQ2hpbmcgIDxqY2hpbmdAYWxvaGEuY29tPgotCi0JKiBbZGVidWdnZXIvc3RhYnMuY10gW2RlYnVnZ2VyL21zYy5jXQotCUNoZWNrIHJldHVybiB2YWx1ZSBvZiBtbWFwLgotCi1GcmkgTWFyICA3IDA1OjQyOjAzIDE5OTcgIExlZSBKYWVraWwgPGp1cmlhQHNlb2R1LmNvLmtyPgotCi0JKiBbd2luMzIvY29kZV9wYWdlLmNdCi0JQWRkZWQgSXNWYWxpZENvZGVQYWdlLgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1TdW4gTWFyICAyIDE0OjU3OjM3IDE5OTcgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgotCi0JKiBbKi8qXQotCUNvbXBsZXRlZCB0cmFuc2l0aW9uIHRvIG5ldyBXaW4zMiB0eXBlcy4KLQotCSogW3Rvb2xzL2J1aWxkLmNdCi0JQ2hhbmdlZCBDYWxsVG8xNl9yZWdzIHRvIHRha2UgYSBDT05URVhUIGFyZ3VtZW50LgotCi0JKiBbbWVtb3J5L3ZpcnR1YWwuY10KLQlSZXdyb3RlIFZpcnR1YWwqIGZ1bmN0aW9ucy4gSW1wbGVtZW50ZWQgQ3JlYXRlRmlsZU1hcHBpbmcgYW5kCi0JT3BlbkZpbGVNYXBwaW5nLiBCcm9rZSBNYXBWaWV3T2ZGaWxlIDstKQotCi0JKiBbd2luMzIvazMyb2JqLmNdCi0JSW1wbGVtZW50ZWQgbmFtZWQgb2JqZWN0cy4KLQotU3VuIE1hciAgMiAwMDozMzoyMSAxOTk3ICBNaWtvbGFqIFphbGV3c2tpIDx6bWlrb2xhakBmcmVlLnBvbGJveC5wbD4KLQotCSogW21pc2Mvb2xlMm5scy5jXSBbcmVzb3VyY2VzL3N5c3Jlc19QbC5jXQotCUFkZGVkIFBvbGlzaCBsYW5ndWFnZSBzdXBwb3J0LgotCi1TYXQgTWFyICAxIDEzOjMxOjI1IDE5OTcgIERhdmlkIEZhdXJlIDxkYXZpZC5mYXVyZUBpZmhhbXkuaW5zYS1seW9uLmZyPgotCi0JKiBbd2luZG93cy9rZXlib2FyZC5jXQotCVdyb3RlIFZrS2V5U2NhbiBhbmQgdGVzdGVkIHdpdGggV2lud29yZC4gV29ya3Mgb2sgZXhjZXB0IGZvciBkZWFkCi0JY2hhcnMuCi0KLUZyaSBGZWIgMjggMDk6MzQ6MDMgMTk5NyAgSm9obiBIYXJ2ZXkgPGpvaG5AZGl2aXNpb24uY28udWs+Ci0KLQkqIFtncmFwaGljcy93aW4xNmRydi9mb250LmNdIFtncmFwaGljcy93aW4xNmRydi9pbml0LmNdCi0JICBbZ3JhcGhpY3Mvd2luMTZkcnYvb2JlY3RzLmNdCi0JQWRkZWQgc3RhcnQgb2YgU2VsZWN0T2JqZWN0IGNhbGwgZm9yIHByaW50ZXIgZHJpdmVyLiBXcml0ZSBzaG91bGQKLQlub3cgcnVuIHdpdGggdGhlIHByaW50ZXIgZHJpdmVyIGVuYWJsZWQuCi0KLVdlZCBGZWIgMjYgMjA6MDM6MzIgMTk5NyAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+Ci0KLQkqIFtkZWJ1Z2dlci8qLmNdCi0JUmUtYWRkZWQgYSBkaXNhc3NlbWJseSBjb21tYW5kIChsaXN0IHNlcnZlcyBhbm90aGVyIGZ1bmN0aW9uYWxpdHkKLQlub3cpLgotCi0JKiBbbG9hZGVyL3BlX3Jlc291cmNlLmNdCi0JQWRkZWQgIyBzdXBwb3J0LgotCi0JKiBbbWlzYy9vbGUybmxzLmNdCi0JR2V0U3RyaW5nVHlwZSogYWRkZWQuCi0KLQkqIFtvYmplY3RzL2NvbG9yLmNdCi0JVkdBMTYgZml4ZXMuCi0KLQkqIFt3aW5kb3dzL2NsYXNzLmNdCi0JTG9vayBmb3IgZ2xvYmFsIHdpZGdldCBjbGFzc2VzIHRvbyBpbiBHZXRDbGFzc0luZm8zMi4KLQotCSogW3dpbmRvd3Mvc3lzbWV0cmljcy5jXSBbaW5jbHVkZS93aW5kb3dzLmhdCi0JQWRkZWQgV2luMzIgc3lzbWV0cmljcy4KLQotU2F0IEZlYiAyMiAyMzo1NjoyOSAxOTk3ICBKdWtrYSBJaXZvbmVuIDxpaXZvbmVuQGNjLmhlbHNpbmtpLmZpPgotCi0JKiBbZG9jdW1lbnRhdGlvbi9sYW5ndWFnZXNdCi0JVGhlIGZvdXJ0aCBjYXNlIHVwZGF0ZWQuCi0KLQkqIFtpZjE2MzIvbnRkbGwuc3BlY10KLQlBZGRlZCBzb21lIGlzKiBhbmQgdG8qIGZ1bmN0aW9ucy4KLQotU2F0IEZlYiAyMiAyMzowNTo0NyAxOTk3ICBNb3J0ZW4gV2VsaW5kZXIgIDx0ZXJyYUBkaWt1LmRrPgotCi0JKiBbY29uZmlndXJlLmluXQotCUFkZCB0ZXN0cyBmb3Igd2FpdDQgYW5kIHdhaXRwaWQuCi0KLQkqIFtsb2FkZXIvc2lnbmFsLmNdCi0JQ2xlYW4gdXAgT1MtZGVwZW5kZW50IGNvZGUuICBJIGhvcGUgSSBnb3QgaXQgcmlnaHQsIDotKQotCi0JKiBbdG9vbHMvd2luZWNvbmZdCi0JUmVjb2duaXNlIHZmYXQgZmlsZSBzeXN0ZW1zLiAgSWdub3JlIGZsb3BweSBkcml2ZXMgc3BlY2lmaWVkIGluCi0JL2V0Yy9mc3RhYi4KLQotCSogW2ZpbGVzLypdCi0JRml4IGZ1bmN0aW9uIG5hbWVzIGluIGVycm9yIG1lc3NhZ2VzLgotCi1TYXQgRmViIDIyIDA2OjE1OjEzIDE5OTcgIFBhYmxvIFNhcmF0eGFnYSA8c3J0eGdAY2hhbmFlLmFscGhhbmV0LmNoPgotCi0JKiBbd2luZG93cy9rZXlib2FyZC5jXSBbd2luZG93cy9tZXNzYWdlLmNdCi0JU3VwcG9ydCBmb3IgbW9yZSBsYXRpbiBhbHBoYWJldCBkZWFkIGtleXMgZm9yIGlzby04ODU5LXsxLDIsMyw0LDl9Ci0JY2hhcmFjdGVycyBzZXRzLgotCi1GcmkgRmViIDIxIDIwOjM3OjUwIDE5OTcgIEh1dyBEIE0gRGF2aWVzIDxoLmRhdmllczFAcGh5c2ljcy5veGZvcmQuYWMudWs+Ci0KLQkqIFtjb250cm9scy9lZGl0LmNdCi0JRml4IGluY29ycmVjdCBhcmcgb3JkZXIgaW4gTE9DQUxfQWxsb2MoKSBjYWxsLgotCi1GcmkgRmViIDIxIDE4OjE5OjE3IDE5OTcgIEFuZHJldyBUYXlsb3IgIDxhdGF5bG9yQGNhZHZpc2lvbi5jb20+Ci0KLQkqIFttdWx0aW1lZGlhL21tc3lzdGVtLmNdIFttdWx0aW1lZGlhL21jaXN0cmluZy5jXQotCUZpeGVkIGJ1ZyByZWxhdGVkIHRvIGRldmljZSBJRHMgcmV0dXJuZWQgYnkgbXVsdGltZWRpYQotCXN5c3RlbS4gIEltcGxlbWVudGVkIG1jaUdldERldmljZUlELgotCi1TYXQgRmViIDE1IDAwOjU4OjE5IDE5OTcgIEppbWVuIENoaW5nICA8amNoaW5nQGFsb2hhLmNvbT4KLQotCSogW2RlYnVnZ2VyL2RiZy55XQotCURvIG5vdCBkZXJlZmVyZW5jZSBpbnZhbGlkIGV4cHJlc3Npb25zLgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1TYXQgRmViIDE1IDExOjU5OjE3IDE5OTcgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgotCi0JKiBbKi8qXQotCUNvbnZlcnRlZCBhIGxvdCBvZiBmdW5jdGlvbnMgdG8gV2luMzIgdHlwZXMuCi0JUmVtb3ZlZCBIV05EIHR5cGUuCi0KLUZyaSBGZWIgMTQgMTU6MDk6MTkgMTk5NyAgT25ubyBIb3ZlcnMgPG9ubm9Ac3RhY2submw+Ci0KLQkqIFttZW1vcnkvZ2xvYmFsLmNdCi0JSW1wbGVtZW50ZWQgR01FTV9NT1ZFQUJMRSBibG9ja3MgZm9yIFdpbjMyLgotCi1GcmkgRmViIDE0IDAwOjI0OjM5IDE5OTcgIEFsZXggS29yb2JrYSA8YWxleEB0cmFudG9yLnBoYXJtLnN1bnlzYi5lZHU+Ci0KLQkqIFtsb2FkZXIvdGFzay5jXSBbd2luZG93cy9xdWV1ZS5jXQotCURvIG5vdCByZWFkIFggZXZlbnRzIHdoaWxlIGluIHRoZSBpbnRlcnRhc2sgU2VuZE1lc3NhZ2UoKS4KLQotCSogW21pc2MvbHN0ci5jXQotCUZpeGVkIENoYXJQcmV2MzJBKCkuCi0KLQkqIFt3aW5kb3dzL2hvb2suY10gW2luY2x1ZGUvaG9vay5oXQotCVJlc3RvcmVkIGJyb2tlbiBXSF9DQUxMV05EUFJPQyBmdW5jdGlvbmFsaXR5IGZvciBkaWFsb2dzLCBldGMuLi4KLQotCSogW3dpbmRvd3Mvd2luLmNdIFt3aW5kb3dzL2RlZnduZC5jXSBbd2luZG93cy9tZGkuY10KLQkgIFt3aW5kb3dzL2V2ZW50LmNdIFtjb250cm9scy9lZGl0LmNdIAotCUFkZGVkIFdJTl9JU1dJTjMyIGZsYWcgdG8gd2luZG93cyBjcmVhdGVkIGJ5IFdpbjMyIGNhbGxzLiAKLQlTZXZlcmFsIG5ldyBXaW4zMiBtZXNzYWdlcyBhcmUgc2VudCB3aGVuIHRoaXMgZmxhZyBpcyBvbi4KLQkKLQkqIFttc2Rvcy9kb3NtZW0uY10gW21lbW9yeS9nbG9iYWwuY10KLQlTb21lIGNoYW5nZXMgaW4gRE9TIG1lbW9yeSBhbGxvY2F0aW9uLgotCi1GcmkgRmViICA3IDIxOjQ2OjAzIDE5OTcgIEFuZHJldyBUYXlsb3IgIDxhdGF5bG9yQGNhZHZpc2lvbi5jb20+Ci0KLQkqIFt3aW4zMi9zZWN1cml0eS5jXQotCUFkZGVkIFNJRCBtYW5pcHVsYXRpb24gZnVuY3Rpb25zLgotCi0JKiBbaW5jbHVkZS9kZWJ1Zy5oXQotCUFkZGVkIGRlYnVnZ2luZyBjbGFzcyAic2VjdXJpdHkiLgotCi1GcmkgIEZlYiA3IDIwOjQ2OjMzIDE5OTcgIFJvYmVydCBQb3VsaW90IDxrcnlub3NAY2xpYy5uZXQ+Ci0KLQkqIFtkZWJ1Z2dlci9tc2MuY10gW2RlYnVnZ2VyL3NvdXJjZS5jXSAKLQkgIFtkb2N1bWVudGF0aW9uL3dpbmVfb3MyLnR4dF0gW2xvYWRlci9zaWduYWwuY10KLQlTb21lIG1vcmUgY2hhbmdlcyBmb3IgT1MvMi4gRG9lc24ndCB3b3JrIHlldC4KLQotRnJpICBGZWIgNyAwOTozMToxNyAxOTk3ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KLQotCSogW3NjaGVkdWxlci9wcm9jZXNzLmNdCi0JQWRkZWQgRXhwYW5kRW52aXJvbm1lbnRTdHJpbmdzKi4KLQotCSogW21pc2MvbnRkbGwuY10gW2luY2x1ZGUvbnRkbGwuaF0KLQlBZGRlZCBzb21lIG5ldyBmdW5jdGlvbnMuCi0KLQkqIFtvYmplY3RzL2N1cnNvcmljb24uY10KLQlDVVJTT1JJQ09OX0xvYWRIYW5kbGVyOiBjaGVjayBhZ2FpbnN0IHNvbWUgYml6YXJyZSBvdXQgb2YgbWVtb3J5Ci0JY29uZGl0aW9ucy4KLQkKLQkqIFt3aW5kb3dzL21kaS5jXQotCUZpeGVkIERlZkZyYW1lUHJvYzMyKiwgYWRkZWQgVHJhbnNsYXRlTURJU3lzQWNjZWwzMi4KLQotV2VkIEZlYiAgNSAwMTozMTowNSAxOTk3ICBKb2huIFplcm8gPGpvaG5AZ2xvYmUuZ3JhcGhpc29mdC5odT4KLQotCSogW3Jlc291cmNlcy9zeXNyZXNfSHUucmNdIFttaXNjL29sZTJubHMuY10gW21pc2MvbWFpbi5jXQotCSAgW3Byb2dyYW1zL3Byb2dtYW4vSHUucmNdIFtwcm9ncmFtcy93aW5oZWxwL0h1LnJjXQotCUFkZGVkIEh1bmdhcmlhbiBsYW5ndWFnZSBzdXBwb3J0LgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1TdW4gRmViICAyIDEyOjMxOjAzIDE5OTcgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgotCi0JKiBbZmlsZXMvZHJpdmUuY10KLQlGaXhlZCBTZXRDdXJyZW50RGlyZWN0b3J5KCkgdG8gYWxzbyBjaGFuZ2UgdGhlIGN1cnJlbnQgZHJpdmUuCi0KLQkqIFt3aW4zMi9leGNlcHQuY10gW3Rvb2xzL2J1aWxkLmNdCi0JVXNlIFdpbjMyIHJlZ2lzdGVyIGZ1bmN0aW9ucyB0byBpbXBsZW1lbnQgZXhjZXB0aW9uIGhhbmRsaW5nLgotCUZpeGVkIFVuaGFuZGxlZEV4Y2VwdGlvbkZpbHRlci4KLQotRnJpIEphbiAzMSAxNTo0Mjo0MSAgMTk5NyAgRGF2aWQgRmF1cmUgIDxkYXZpZC5mYXVyZUBpaGFteS5pbnNhLWx5b24uZnI+Ci0KLQkqIFt3aW5kb3dzL2tleWJvYXJkLmNdCi0JQWRkZWQgS0VZQk9BUkRfR2VuZXJhdGVNc2cgdG8gZ2VuZXJhdGUgQ2FwcyBMb2NrIGFuZCBOdW1Mb2NrIGV2ZW50cwotCUFkZGVkIGNhbGxzIHRvIEtFWUJPQVJEX0dlbmVyYXRlTXNnIHdoZW4gdGhlIGtleSBpcyBwcmVzc2VkL3JlbGVhc2VkCi0Jb3Igd2hlbiB0aGUgc3RhdGUgaGFzIGNoYW5nZWQsIG91dCBvZiB3aW5lLgotCUNoYW5nZWQgdHlwZSAzLXN0YXRlICdUb2dnbGVLZXlTdGF0ZScgdG8gYm9vbGVhbi4gVGhlIE9uL09mZiBpcyBnaXZlbgotCWJ5IElucHV0S2V5U3RhdGVUYWJsZS4KLQotV2VkIEphbiAyOSAyMTo1MzowNCAxOTk3ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KLQotCSogW2xvYWRlci8qcmVzb3VyY2UuY11baWYxNjMyL3RodW5rLmNdCi0JRW51bVJlc291cmNlKiBhZGRlZC4KLQotCSogW2xvYWRlci9wZV9yZXNvdXJjZS5dIFtsb2FkZXIvcmVzb3VyY2UuY10KLQlTaXplb2ZSZXNvdXJjZTMyKCksIExvYWRBY2NlbGVyYXRvcnMzMigpIGFkZGVkLgotCi0JKiBbbWlzYy9sc3RyLmNdCi0JRm9ybWF0TWVzc2FnZSAlbiBhZGRlZC4KLQotCSogW21pc2MvY3J0ZGxsLmNdW2luY2x1ZGUvY3RyZGxsLmhdW2lmMTYzMi9jcnRkbGwuc3BlY10KLQlfY2hkcml2ZSxfZXJybm8sX2lzY3R5cGUgYWRkZWQuCi0KLQkqIFttaXNjL2NwdS5jXQotCVJlcGxhY2VkIHJ1bnRpbWVfY3B1IGJ5IEdldFN5c3RlbUluZm8oKS4KLQotCSogW3dpbmRvd3MvaG9vay5jXVtpbmNsdWRlL2hvb2suaF0KLQlGaXhlZCBtYXBwaW5nIG9mIGhvb2tzIHRvIHdpbjMyL3VuaWNvZGUuCi0KLQkqIFt3aW5kb3dzL2tleWJvYXJkLmNdIFt3aW5kb3dzL2RlZnduZC5jXQotCVVwZGF0ZWQgdG8gd2luMzIgc3RhbmRhcmQuCi0JQUxULTxNZW51a2V5PiBmaXhlZC4KLQotCSogW3dpbmRvd3MvcXVldWUuY10KLQlHZXRXaW5kb3dUaHJlYWRQcm9jZXNzSWQoKSBpbXBsZW1lbnRlZC4KLQotTW9uIEphbiAyNyAxNjo0Mjo0OSAxOTk3ICBKb2huIEhhcnZleSA8am9obkBkaXZpc2lvbi5jby51az4KLQotCSogW2dyYXBoaWNzL21ldGFmaWxlZHJ2LypdIFtncmFwaGljcy94MTFkcnYvKl0KLQkgIFtvYmplY3RzL2JpdG1hcC5jXSBbb2JqZWN0cy9icnVzaC5jXSBbb2JqZWN0cy9mb250LmNdCi0JICBbb2JqZWN0cy9nZGlvYmouY10gW29iamVjdHMvcGVuLmNdCi0JTW92ZWQgU2VsZWN0T2JqZWN0IHRvIGdyYXBoaWNzIGRyaXZlcnMuIFByaW50ZXIgc3VwcG9ydCBub3cgd29ya3MKLQlpbiBhIGZldyBjYXNlcyBidXQgaXMgZGVmaW5pdGVseSBub3QgY29tcGxldGUuIEdlbmVyaWMvdGV4dCBkcml2ZXIKLQl3b3Jrcy4gVGhlIHBvc3RzY3JpcHQgZHJpdmVyIHdvcmtzIGlmIHRydWUgdHlwZSBmb250cyBhcmUgZGlzYWJsZWQKLQlmcm9tIHRoZSBjb250cm9sIHBhbmVsLiBUbyBlbmFibGUgcHJpbnRlciBzdXBwb3J0IGFkZCBQcmludGVyPW9uCi0JdG8gdGhlIHdpbmUgc2VjdGlvbiBvZiB5b3VyIHdpbmUuY29uZiBmaWxlLiBUaGlzIGNhdXNlcyB3cml0ZSBub3QKLQl0byB3b3JrIHByb3Blcmx5LiBJIGtub3cgdGhhdCBzZXZlcmFsIG90aGVyIHByaW50ZXIgZHJpdmVycyBkbyBub3QKLQl3b3JrLgotCi0JKiBbdG9vbHMvYnVpbGQuY10KLQlNYWtlIC5zdGFicyBub3QgdXNlZCBmb3Igc3ZyNCBzaW5jZSBpdCBkb2Vzbid0IHVzZSBHTlUgYXNzZW1ibGVyLgotCi0JKiBbbWlzYy9mb250ZW5naW5lLmNdCi0JTWFrZSBzdXJlIGEgcHJpbnRmIGRvZXNuJ3QgY3Jhc2ggdGhlIHN5c3RlbS4KLQotU2F0IEphbiAyNSAxNTo1MzozNSAxOTk3ICBIdXcgRCBNIERhdmllcyA8aC5kYXZpZXMxQHBoeXNpY3Mub3hmb3JkLmFjLnVrPgotCi0JKiBbb2JqZWN0cy9tZXRhZmlsZS5jXQotCUZpeGVkIHNvbWUgcHJvYmxlbXMgd2l0aCBQbGF5TWV0YUZpbGVSZWNvcmQoKS4KLQotCSogW29iamVjdHMvZGMuY10KLQloQ2xpcFJnbiBnZXRzIGluaXRpYWxpemVkIGluIEdldERDU3RhdGUoKS4KLQotRnJpIEphbiAyNCAyMToyMjoyNiAxOTk3ICBQaGlsaXBwZSBEZSBNdXl0ZXIgIDxwaGRtQGluZm8udWNsLmFjLmJlPgotCi0JKiBbZGVidWdnZXIvc3RhYnMuY10KLQlIYW5kbGUgZmlsZSBuYW1lcyBiZWdpbm5pbmcgd2l0aCAnLycuCi0KLUZyaSBKYW4gMjQgMTg6MzM6MDQgMTk5NyAgUm9iZXJ0IFBvdWxpb3QgPGtyeW5vc0BjbGljLm5ldD4KLQotCSogWyovKl0KLQlTb21lIG1vcmUgcGF0Y2hlcyBmb3IgT1MvMiBzdXBwb3J0LgotCi1GcmkgSmFuIDI0IDExOjMwOjQxIDE5OTcgIEJhbmcgSnVuLVlvdW5nICA8YmFuZ2p5QG5vd251cmkubm93Y29tLmNvLmtyPgotCi0JKiBbcmVzb3VyY2VzL3N5c3Jlc19Lby5yY10KLQlVcGRhdGVkIHN1cHBvcnQgZm9yIEtvcmVhbiAoS28pIGxhbmd1YWdlLgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1TdW4gSmFuIDE5IDExOjQ2OjQ4IDE5OTcgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgotCi0JKiBbbG9hZGVyL21vZHVsZS5jXQotCUZpeGVkIExvYWRNb2R1bGUoKSB0byBhbHdheXMgY2FsbCB0aGUgRExMIGluaXRpYWxpemF0aW9uIGNvZGUuCi0KLQkqIFt3aW5kb3dzL2V2ZW50LmNdCi0JTW92ZWQgYWxsIHRoZSBrZXlib2FyZCBzdHVmZiB0byB3aW5kb3dzL2tleWJvYXJkLmMKLQotCSogW3Rvb2xzL2J1aWxkLmNdCi0JRml4ZWQgV2luMzIgcmVnaXN0ZXIgZnVuY3Rpb25zLgotCi1TYXQgSmFuIDE4IDIyOjI0OjQxIDE5OTcgIERhdmlkIE1ha2VwZWFjZSAgPEQuTWFrZXBlYWNlQG1haWxib3gudXEub3ouYXU+Ci0KLSAgICAgICAgKiBbdG9vbHMvbWFrZWRlcC5jXQotICAgICAgICBGaXhlZCBidWcgd2hpY2ggY2F1c2VzIFNFR1Ygb24gU29sYXJpcyB4ODYuCi0KLUZyaSBKYW4gMTcgMTg6MzI6MjcgMTk5NyAgRnJhbnMgdmFuIERvcnNzZWxhZXIgPGRvcnNzZWxAcnVsaG1wYzQ5LkxlaWRlblVuaXYubmw+Ci0KLQkqIFtjb250cm9scy9lZGl0LmNdCi0JSW1wbGVtZW50ZWQgV01fVU5ETywgV01fQ09OVEVYVE1FTlUgKHRlbXBvcmFyeSB1c2luZyBXTV9SQlVUVE9OVVApLAotCVdNX0NPTU1BTkQsIFdNX0lOSVRQT1BVUE1FTlUsIFdNX1NZU0tFWURPV04uCi0JRml4ZWQgRU1fU0VUU0VMIGFuZCBzb21lIG1pbm9yIGJ1Z3MgKGZlYXR1cmVzKS4KLQlIZW5jZTogZnVsbHkgZnVuY3Rpb25hbCB1bmRvIGFuZCBhIHdpbjk1IG1lbnUgd2l0aCB0aGUgcmlnaHQgbW91c2UKLQkJYnV0dG9uLgotCi0JKiBbaW5jbHVkZS9yZXNvdXJjZXMuaF0gW3Jlc291cmNlcy9UT0RPXSBbcmVzb3VyY2VzL3N5c3Jlc18/Py5yY10KLQlBZGRlZCBhIGNvbnRleHQgbWVudSBmb3IgdGhlIGVkaXQgY29udHJvbC4KLQlUcmFuc2xhdGlvbnMsIHBsZWFzZSAuLi4KLQotRnJpIEphbgkxNyAwODoyOTo1MiAxOTk3ICBEYXZpZCBGYXVyZSA8ZGF2aWQuZmF1cmVAaWZoYW15Lmluc2EtbHlvbi5mcj4KLQotCSogW3dpbmRvd3MvZXZlbnQuY10KLQlNb3ZlIEVWRU5UX1RvQXNjaWkgdG8gd2luZG93cy9rZXlib2FyZC5jICh3aGVyZSBuYW1lIFRvQXNjaWkpCi0JRml4ZWQgS2V5cGFkIGtleXMgMC05IGFuZCAuIGluIEVWRU5UX2V2ZW50X3RvX3ZrZXkuCi0JQWRkZWQgMy1zdGF0ZSBoYW5kbGluZyBvZiB0b2dnbGUga2V5cyAoQ2Fwc0xvY2ssIE51bUxvY2spIGluIG9yZGVyCi0JdG8gbWFrZSB0aGVtIHdvcmsgd2l0aCBhbnkgWCBzZXJ2ZXIuCi0JVG9nZ2xlIGtleXMgbm93IGdlbmVyYXRlIFdNX0tFWURPV04gYW5kIFdNX0tFWVVQIG9uIGVhY2ggcHJlc3NpbmcuCi0KLQkqIFtpbmNsdWRlL2tleWJvYXJkLmhdCi0JVG90YWxseSByZXBsYWNlZCB0aGUgZmlsZSAoZm9ybWVybHkgY29udGFpbmluZyB0aGUgdmtjYXNlIGRlZmluaXRpb25zKQotCWJ5IHRoZSBkZWNsYXJhdGlvbiBvZiAnZXh0ZXJuJyB2YXJpYWJsZXMgY29udGFpbmVkIGJ5IGV2ZW50LmMgYW5kIHVzZWQKLQlieSBrZXlib2FyZC5jCi0JCi0JKiBbd2luZG93cy9rZXlib2FyZC5jXQotCVN0YXJ0ZWQgdG8gcmV3cml0ZSBWa0tleVNjYW4gYW5kIE1hcFZpcnR1YWxLZXksIHRvIG1ha2UgdGhlbSB1c2UgdGhlIAotCXRhYmxlIGtleWMydmtleSBvciBYIGZ1bmN0aW9ucyBvbmx5LgotCVRvQXNjaWkgOiBhZGRlZCBrZXlwYWQgMC05IGFuZCAuIHNwZWNpYWwgY2FzZS4KLQlDaGFuZ2VkIHRvZ2dsZSBrZXlzIGFjdGl2ZSBtYXNrIGZyb20gMHg4MCB0byAweDEuCi0KLQkqIFttaXNjL2tleWJvYXJkLmNdCi0JRmlsZSBkZWxldGVkLiBDb250ZW50cyBtb3ZlZCB0byB3aW5kb3dzL2tleWJvYXJkLmMuCi0KLQkqIFttaXNjL21haW4uY10KLQlBZGRlZCBwdXRlbnYgWEtCX0RJU0FCTEUgdG8gZGlzYWJsZSBYS0IgZXh0ZW5zaW9uICh3aGljaCwgd2hlbgotCXByZXNlbnQsIGNhdXNlcyBBbHRHciB0byBjaGFuZ2Uga2V5Ym9hcmQgZ3JvdXAgaW5zdGVhZCBvZiBiZWluZyBhCi0JbW9kaWZpZXIpLgotCi1UdWUgSmFuIDE0IDIyOjU2OjQzIDE5OTcgIFBoaWxpcHBlIERlIE11eXRlciAgPHBoZG1AaW5mby51Y2wuYWMuYmU+Ci0KLQkqIFt3aW5kb3dzL2V2ZW50LmNdCi0JRG8gbm90IGFzc3VtZSBOdW1Mb2NrTWFzayBpcyBNb2QyTWFzaywgYnV0IGNvbXB1dGUgaXQgYnkgc2Nhbm5pbmcKLQlvdXRwdXQgb2YgWEdldE1vZGlmaWVyTWFwcGluZyBmb3IgWEtfTnVtX0xvY2suCi0KLVR1ZSBKYW4gMTQgMTU6NDk6NDkgMTk5NyAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+Ci0KLQkqIFtsb2FkZXIvcGVfKi5jXSBbaW5jbHVkZS9wZWV4ZS5oXSBbaW5jbHVkZS9yZXNvdXJjZTMyLmhdCi0JICBbZGVidWdnZXIvKi5jXQotCUdlbmVyYWwgY2xlYW4gdXAuCi0JQ2hhbmdlZCBkZWZpbmVzL3N0cnVjdHVyZXMgdG8gbWF0Y2ggV2luZG93cyBOVCBTREsuCi0KLQkqIFtsb2FkZXIvbWFpbi5jXQotCURvbid0IGNyYXNoIG9uIGVtcHR5IGNvbW1hbmQtbGluZS4KLQotCSogW3dpbmRvd3Mvd2lucG9zLmNdCi0Jd2lucG9zLmMgbWFkZSB3aW4zMiBjbGVhbi4KLQotCSogW21pc2MvbnRkbGwuY10KLQlTb21lIHN0cmluZyBjb252ZXJzaW9uIGFkZGl0aW9ucy4KLQotCSogW2ZpbGVzL2ZpbGUuY10KLQlHZXRGaWxlQXR0cmlidXRlcy9HZXRUZW1wRmlsZU5hbWUgZml4ZWQuCi0KLQkqIFttaXNjL3Zlci5jXQotCVZlckluc3RhbGxGaWxlIGltcGxlbWVudGVkLgotCi1Nb24gSmFuIDEzIDE1OjAzOjExIDE5OTcgIFBoaWxpcHBlIERlIE11eXRlciAgPHBoZG1AaW5mby51Y2wuYWMuYmU+Ci0KLQkqIFt0b29scy9idWlsZC5jXTogVXNlIFBSRUZJWCBhbHNvIGluIHN0YWJzIG1lc3NhZ2VzLgotCi1Nb24gSmFuIDEzIDEwOjQwOjMzIDE5OTcgIEpvaG4gSGFydmV5IDxqb2huQGRpdmlzaW9uLmNvLnVrPgotCi0JKiBbZ3JhcGhpY3Mvd2luMTZkcnYvKl0gW2luY2x1ZGUvd2luMTZkcnYuaF0KLQlNYW55IGZpeGVzIGFuZCBzb21lIG5ldyBmZWF0dXJlcy4KLQotCSogW2dyYXBoaWNzL3gxMWRydi9mb250LmNdIFtncmFwaGljcy94MTFkcnYvaW5pdC5jXQotCSAgW2luY2x1ZGUveDExZHJ2LmhdIFtvYmplY3RzL2ZvbnQuY10KLQlHZXRUZXh0TWV0cmljcygpIG1vdmVkIHRvIGdyYXBoaWNzIGRyaXZlci4KLQotCSogW2lmMTYzMi9nZGkuc3BlY10gW21pc2MvZm9udGVuZ2luZS5jXSBbbWlzYy9NYWtlZmlsZS5pbl0KLQlOZXcgZHVtbXkgRW5naW5lRW51bWVyYXRlRm9udCwgRW5naW5lUmVhbGl6ZUZvbnQgZnVuY3Rpb25zLgotCi0JKiBbaW5jbHVkZS93aW5kb3dzLmhdCi0JVEVYVEZPUk0xNiBhbmQgRk9OVElORk8xNiBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMgbW92ZWQgaGVyZSBmcm9tCi0JaW5jbHVkZS93aW4xNmRydi5oCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVNhdCBKYW4gMTEgMTg6MTc6NTkgMTk5NyAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+Ci0KLQkqIFtjb250cm9scy9tZW51LmNdCi0JVXBkYXRlZCB0byBuZXcgV2luMzIgdHlwZXMuCi0KLQkqIFtjb250cm9scy9saXN0Ym94LmNdCi0JRml4ZWQgV2luZmlsZSBleHRlbmRlZCBzZWxlY3Rpb24gYnVnLgotCi0JKiBbZmlsZXMvZGlyZWN0b3J5LmNdCi0JQ2hhbmdlZCBESVJfU2VhcmNoUGF0aCB0byByZXR1cm4gYm90aCBsb25nIGFuZCBzaG9ydCBmaWxlIG5hbWVzLgotCi0JKiBbZmlsZXMvZG9zX2ZzLmNdCi0JSW1wbGVtZW50ZWQgVkZBVCBpb2N0bCB0byByZXRyaWV2ZSB0aGUgb3JpZ2luYWwgc2hvcnQgZmlsZW5hbWVzCi0JZnJvbSBhIFZGQVQgZmlsZXN5c3RlbSAoTGludXggb25seSBmb3Igbm93KS4KLQlSZXBsYWNlZCBET1NGU19HZXRVbml4RmlsZU5hbWUoKS9ET1NGU19HZXREb3NUcnVlTmFtZSgpIGJ5Ci0JRE9TX0dldEZ1bGxOYW1lKCkuCi0JUHJvcGVybHkgaW1wbGVtZW50ZWQgR2V0U2hvcnRQYXRoTmFtZSgpIGFuZCBHZXRGdWxsUGF0aE5hbWUoKS4KLQlNYWRlIGFsbCBmdW5jdGlvbnMgcmUtZW50cmFudC4KLQotCSogW2ZpbGVzL2ZpbGUuY10gW21pc2MvbWFpbi5jXQotCVJlcGxhY2VkIC1hbGxvd3JlYWRvbmx5IG9wdGlvbiBieSAtZmFpbHJlYWRvbmx5LiBUaGUgZGVmYXVsdCBpcwotCW5vdyB0byByZXBvcnQgc3VjY2VzcyB3aGVuIG9wZW5pbmcgYSByZWFkLW9ubHkgZmlsZSBmb3Igd3JpdGluZy4KLQotCSogW29iamVjdHMvbWV0YWZpbGUuY10KLQlGaXhlZCBidWcgaW4gRElCIGJpdG1hcHMgcG9pbnRlciBjYWxjdWxhdGlvbi4KLQotCSogW3NjaGVkdWxlci9wcm9jZXNzLmNdCi0JSW1wbGVtZW50ZWQgZW52aXJvbm1lbnQgc3RyaW5ncyBhbmQgR2V0L1NldFN0ZEhhbmRsZSB3aXRoIHByb2Nlc3MKLSAJZW52aXJvbm1lbnQgYmxvY2suCi0KLQkqIFt0b29scy9idWlsZC5jXQotCVJld3JvdGUgQnVpbGRDb250ZXh0MzIoKSB0byBhdm9pZCBpbnN0cnVjdGlvbnMgdGhhdCBtYXkgbm90IGJlCi0Jc3VwcG9ydGVkIGJ5IGFsbCBhc3NlbWJsZXJzLgotCQotRnJpIEphbiAxMCAxNzoxMTowOSAxOTk3ICBEYXZpZCBGYXVyZSAgPGRhdmlkLmZhdXJlQGlmaGFteS5pbnNhLWx5b24uZnI+Ci0KLQkqIFt3aW5kb3dzL2V2ZW50LmNdCi0JQ3JlYXRlZCB0YWJsZSBrZXljMnZrZXksIHdoaWNoIGFzc29jaWF0ZSBhIHZrZXkoK2V4dGVuZGVkIGJpdCkgdG8KLQlhbnkga2V5Y29kZS4gQ2hhbmdlZCBFVkVOVF9ldmVudF90b192a2V5IHRvIHVzZSB0aGlzIHRhYmxlIHRvCi0JcmV0dXJuIHRoZSBjb3JyZWN0IHZrZXkuIENoYW5nZWQgRVZFTlRfVG9Bc2NpaSB0byBnZXQgdGhlIGtleWNvZGUKLQlmcm9tIHRoaXMgdGFibGUgdG9vLiAgQXNzaWduZWQgT0VNIHNwZWNpZmljIHZrZXlzIGFyYml0cmFyaWx5LgotCi1GcmkgSmFuIDEwIDA5OjI2OjE3IDE5OTcgIEpvaG4gSGFydmV5IDxqb2huQGRpdmlzaW9uLmNvLnVrPgotCi0JKiBbbWlzYy93aW5zb2NrLmNdIFttaXNjL3dpbnNvY19hc3luYy5jXQotICAgICAgICBGaXhlZCBzdnI0IGhlYWRlciBmaWxlcy4KLSAgICAgICAgQ2hhbmdlZCBiemVybygpIHRvIG1lbXNldCgpLgotCi0JKiBbdG9vbHMvZm50MmJkZi5jXQotICAgICAgICBSZW1vdmVkIGJjb3B5KCkgYW5kIHVzZWQgbWVtY3B5KCkgaW5zdGVhZC4KLQotCSogW2RlYnVnZ2VyL21zYy5jXQotICAgICAgICBJbmNsdWRlIHN0cmluZy5oIGluc3RlYWQgb2Ygc3RyaW5ncy5oCi0KLQkqIFtkZWJ1Z2dlci9zdGFicy5jXQotICAgICAgICBJbmNsdWRlIHN0cmluZy5oIGluc3RlYWQgb2Ygc3RyaW5ncy5oLgotICAgICAgICBEZWZpbmUgX19FTEZfXyBmb3Igc3ZyNCBzeXN0ZW1zLgotCi0JKiBbbG9hZGVyL3NpZ25hbC5jXQotICAgICAgICBVc2Ugd2FpdCgpIGluc3RlYWQgb2Ygd2FpdDQoKSB3aGljaCBkb2VzbnQgZXhpc3Qgb24gVW5peHdhcmUuCi0KLQkqIFttZW1vcnkvZ2xvYmFsLmNdCi0gICAgICAgIFVzZSBzeXNjb25mKCkgaW5zdGVhZCBvZiBnZXRwYWdlc2l6ZSgpIGZvciBzdnI0IHN5c3RlbXMuCi0KLVRodSBKYW4gIDkgMjE6MDc6MjAgMTk5NyAgUm9iZXJ0IFBvdWxpb3QgPGtyeW5vc0BjbGljLm5ldD4KLQotCSogW01ha2UucnVsZXMuaW5dIFtNYWtlZmlsZS5pbl0gW21ha2Vfb3MyLnNoXSBbcmMvTWFrZWZpbGUuaW5dCi0JICBbdG9vbHMvTWFrZWZpbGUuaW5dIFtkb2N1bWVudGF0aW9uL3dpbmVfb3MyLnR4dF0KLQlQYXRjaGVzIGZvciBPUy8yIHN1cHBvcnQuIE5vdGUgdGhhdCBpdCBkb2Vzbid0IGNvbXBpbGUgeWV0LgotCi1UdWUgSmFuICA3IDIwOjAzOjUzIDE5OTcgIEVyaWMgWW91bmdkYWxlIDxlcmljQHN1YjIzMDQuamljLmNvbT4KLQotCSogW2RlYnVnZ2VyLypdCi0JTWFueSBtb3JlIGRlYnVnZ2VyIGltcHJvdmVtZW50cyAoc2VlIGRlYnVnZ2VyL1JFQURNRSBmb3IgZGV0YWlscykuCi0KLVR1ZSBKYW4gIDcgMTU6MTI6MjEgMTk5NyAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+Ci0KLQkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdIFtvYmplY3RzL3RleHQuY10gW2dyYXBoaWNzL3gxMWRydi8qXQotCSAgW2dyYXBoaWNzL21ldGFmaWxlZHJ2LypdCi0JTW92ZWQgc29tZSBkZXZpY2UgZGVwZW5kZW50IGNvZGUgaW50byB0aGUgcmVzcC4gc3ViZGlycy4KLQotCSogW2luY2x1ZGUvZ2RpLmhdIFtpbmNsdWRlL21ldGFmaWxlZHJ2LmhdIFtpbmNsdWRlL3gxMWRydi5oXQotCVByb3RvdHlwZXMgYWRkZWQsCi0JRENfRlVOQ1RJT05TOiBHZXRQaXhlbCBhZGRlZCwgc29tZSB1bm5lY2Vzc2FyeSBmdW5jdGlvbnMgcmVtb3ZlZC4KLQotCSogW29iamVjdHMvcmVnaW9uLmNdCi0JQ3JlYXRlUG9seVBvbHlnb25SZ24zMiBhZGRlZC4KLQotCSogW2ZpbGVzL2Rvc19mcy5jXQotCVF1ZXJ5RG9zRGV2aWNlIGFkZGVkLgotCi0JKiBbbWlzYy9sc3RyLmNdCi0JRm9ybWF0TWVzc2FnZTogYnJva2VuIGhlYXAgbWFuYWdlbWVudCBmaXhlZC4KLQotCSogW3NjaGVkdWxlci9wcm9jZXNzLmNdIFtzY2hlZHVsZXIvdGhyZWFkLmNdCi0JR2V0L1NldFRocmVhZFByaW9yaXR5L1ByaW9yaXR5Q2xhc3MgYWRkZWQuCi0KLU1vbiBKYW4gIDYgMjE6NTU6MzAgMTk5NyAgUGhpbGlwcGUgRGUgTXV5dGVyICA8cGhkbUBpbmZvLnVjbC5hYy5iZT4KLQotCSogW21pc2Mva2V5Ym9hcmQuY10KLQlUb0FzY2lpIDogVXNlIEVWRU5UX1RvQXNjaWkgaW5zdGVhZC4KLQotCSogW3dpbmRvd3MvZXZlbnQuY10KLQlrZXlwYWRfa2V5IDogRG8gbm90IGNvbnZlcnQgWEtfTW9kZV9zd2l0Y2ggdG8gVktfTUVOVTsgcmVjb2duaXplCi0Ja2V5cGFkIGN1cnNvciBrZXlzLgotCUVWRU5UX2V2ZW50X3RvX3ZrZXkgOiBOZXcgZnVuY3Rpb24sIHRvIHRyYW5zZm9ybSBhIFgga2V5Y29kZQotCWludG8gYSBNU3dpbiB2a2V5ICsgZXh0ZW5kZWQgYml0LgotCUVWRU5UX1RvQXNjaWkgOiBOZXcgZnVuY3Rpb24sIHRvIHRyYW5zZm9ybSBhIHZrZXkgKyBleHRlbmRlZCBiaXQKLQkoKyBrZXkgc3RhdGUgdGFibGUpIGludG8gYXNjaWkgY2hhcihzKSwgdXNpbmcgWExvb2t1cFN0cmluZywgYW5kCi0JcmVjb2duaXppbmcgZGVhZCBjaGFycy4KLQlFVkVOVF9rZXkgOiBUcmFuc2Zvcm0gQWx0R3IgaW50byBDdHJsK0FsdCBzZXF1ZW5jZTsgY2FsbAotCUVWRU5UX2V2ZW50X3RvX3ZrZXkgZm9yIGtleWNvZGUgdG8gdmtleSBjb252ZXJzaW9uOyBmaXhlZAotCXByZXZpb3VzLCBjb250ZXh0IGFuZCBleHRlbmRlZCBiaXRzLgotCi0JKiBbd2luZG93cy9rZXlib2FyZC5jXQotCUluY2x1ZGUgc3RkZGVidWcuaCwgdG8gZ2V0IC1kZWJ1Z21zZyBtZXNzYWdlcy4KLQlHZXRLZXlTdGF0ZSA6IEhhbmRsZSBWS19NQlVUVE9OIGNhc2UuCi0JR2V0S2V5Ym9hcmRTdGF0ZSwgU2V0S2V5Ym9hcmRTdGF0ZSA6IERlYnVnZ2luZyBtZXNzYWdlcyBhZGRlZC4KLQotCSogW3dpbmRvd3MvbWVzc2FnZS5jXQotCVRyYW5zbGF0ZU1lc3NhZ2UgOiBIYW5kbGUgZGVhZCBjaGFycy4KLQotTW9uIEphbiAgNiAyMDoxMDoxMSAxOTk3ICBEb21pbmlrIFN0cmFzc2VyICA8Ym00MjQ5NTNAbXVlbmNoZW4ub3JnPgotCi0JKiBbaWYxNjMyL2NydGRsbC5zcGVjXSBbbWlzYy9jcnRkbGwuY10KLQlDKysgZnVuY3Rpb25zIG5ldy9kZWxldGUvc2V0X25ld19oYW5kbGVyIGltcGxlbWVudGVkLgotCi1Nb24gSmFuICA2IDE1OjQ4OjE1IDE5OTcgRnJhbnMgdmFuIERvcnNzZWxhZXIgPGRvcnNzZWxAcnVsaG1wYzQ5LkxlaWRlblVuaXYubmw+Ci0KLQkqIFtjb250cm9scy9lZGl0LmNdIFtpbmNsdWRlL3dpbmRvd3MuaF0KLQlNb3ZlZCB0aGUgZWRpdCBjb250cm9sIHRvIDMyIGJpdHMuCi0JSW5jbHVkZWQgbmV3ICh3aW45NSkgbWVzc2FnZSBkZWZpbml0aW9ucyBpbiB3aW5kb3dzLmgKLQlJbXBsZW1lbnRlZCBFTV9TQ1JPTExDQVJFVCwgRU1fU0VUTUFSR0lOUywgRU1fR0VUTUFSR0lOUywKLQlFTV9HRVRMSU1JVFRFWFQsIEVNX1BPU0ZST01DSEFSLCBFTV9DSEFSRlJPTVBPUy4KLQlCcm9rZSBFTV9TRVRXT1JEQlJFQUtQUk9DIChpbnRlcm5hbCB3b3Jkd3JhcCBzdGlsbCB3b3JrcykuCi0JRml4ZWQgc29tZSBidWdzLCBpbnRyb2R1Y2VkIGEgY291cGxlIG9mIG90aGVycy4KLQlUZXh0IGJ1ZmZlciBpcyBub3cgaW5pdGlhbGx5IGluIDMyLWJpdCBoZWFwLgotCi0JKiBbY29udHJvbHMvRURJVC5UT0RPXSBbY29udHJvbHMvY29tYm8uY10gW2NvbnRyb2xzL3dpZGdldHMuY10KLQkgIFtpZjE2MzIvd3Byb2NzLnNwZWNdIFtsaWJyYXJ5L21pc2NzdHVicy5jXSBbd2luZG93cy9kZWZkbGcuY10KLQkgIFttaXNjL2NvbW1kbGcuY10KLQlVcGRhdGVkIHRvIHdvcmsgd2l0aCAzMi1iaXQgZWRpdCBjb250cm9sLgotCi1TYXQgSmFuICA0IDIyOjA3OjI3IDE5OTcgIE8uRmxlYmJlICA8Ty5GbGViYmVAc2NpZW5jZS1jb21wdXRpbmcudW5pLXR1ZWJpbmdlbi5kZT4KLQotCSogW2xvYWRlci9wZV9pbWFnZS5jXQotCVVzZSBtbWFwIHJhdGhlciB0aGVuIG1hbGxvYy4gQmV0dGVyIHdvcmthcm91bmQgZm9yIGNsZWFuCi0Jc2VnbWVudHMuCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVdlZCBKYW4gIDEgMTU6MzY6MTcgMTk5NyAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+Ci0KLQkqIFtjb250cm9scy9saXN0Ym94LmNdCi0JVXNlIEZpbmRGaXJzdEZpbGUvRmluZE5leHRGaWxlIGluIExJU1RCT1hfRGlyZWN0b3J5LgotCi0JKiBbZmlsZXMvZG9zX2ZzLmNdCi0JUmV3cm90ZSBGaW5kRmlyc3RGaWxlL0ZpbmROZXh0RmlsZSB0byB1c2UgRE9TRlNfRmluZE5leHQoKS4KLQotCSogW2ZpbGVzL2ZpbGUuY10gW2ZpbGVzL2RpcmVjdG9yeS5jXQotCVVzZSBXaW4zMiBrZXJuZWwgb2JqZWN0cyBhbmQgaGFuZGxlcyBmb3IgZmlsZSBoYW5kbGVzLgotCVVuaWZpZWQgU2VhcmNoUGF0aCgpIGFuZCBPcGVuRmlsZSgpLgotCi0JKiBbbG9hZGVyL2J1aWx0aW4uY10KLQlNb3ZlZCB0byBpZjE2MzIvIGRpcmVjdG9yeS4KLQotCSogW3Rvb2xzL2J1aWxkLmNdIFtkZWJ1Z2dlci8qXSBbbWlzY2VtdS8qXQotCVdpbjE2IHJlZ2lzdGVyIGZ1bmN0aW9ucyBub3cgcmVjZWl2ZSB0aGUgc2FtZSBDT05URVhUICogc3RydWN0dXJlCi0JYXMgV2luMzIgZnVuY3Rpb25zLgotCi0JKiBbaW5jbHVkZS9zaWdjb250ZXh0LmhdIFttaXNjZW11L2luc3RyLmNdCi0JQWRkZWQgbmV3IG1hY3JvcyB0byBnZXQgcmVnaXN0ZXIgdmFsdWVzIGZyb20gdGhlIFNJR0NPTlRFWFQKLQlzdHJ1Y3R1cmUgKG9ubHkgdXNlZCBmb3IgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIG5vdykuCi0KLQkqIFtzY2hlZHVsZXIvcHJvY2Vzcy5jXSBbc2NoZWR1bGVyL3RocmVhZC5jXSAoTmV3IGZpbGVzKQotCUFsbG9jYXRlIHByb2Nlc3MgYW5kIHRocmVhZCBzdHJ1Y3R1cmVzLgotCi0JKiBbc2NoZWR1bGVyL3Byb2Nlc3MuY10gW3dpbjMyL2szMm9iai5jXQotCUFkZGVkIFdpbjMyIGtlcm5lbCBvYmplY3RzIGFuZCBoYW5kbGVzIG1hbmFnZW1lbnQuCi0KLQkqIFtsb2FkZXIvdGFzay5jXQotCUNyZWF0ZSBhIFdpbjMyIHByb2Nlc3MgYW5kIHRocmVhZCBmb3IgZXZlcnkgV2luMTYgdGFzay4KLQotCSogW21pc2MvY29tbWRsZy5jXSBbbWlzYy9zaGVsbC5jXSBbd2luZG93cy9tc2dib3guY10KLQlCdWlsdC1pbiByZXNvdXJjZXMgYXJlIG5vdyBpbiBXaW4zMiBmb3JtYXQuIFRoaXMgYWxzbyBhdm9pZHMKLQkxNi1iaXQgY2FsbGJhY2tzIGZvciBidWlsdC1pbiBkaWFsb2dzLgotCi0JKiBbbWlzYy9semV4cGFuZC5jXQotCURpZmZlcmVudGlhdGUgYmV0d2VlbiAxNi1iaXQgYW5kIDMyLWJpdCBmaWxlIGhhbmRsZXMuCi0KLQkqIFttaXNjZW11L2ludCouY10KLQlNb3ZlZCBhbGwgaW50IGVtdWxhdGlvbiB0byBtc2Rvcy8gZGlyZWN0b3J5LgotCi0JKiBbbXNkb3MvKl0KLQlOZXcgZGlyZWN0b3J5IG1zZG9zLyBjb250YWlucyBhbGwgTVMtRE9TIGVtdWxhdGlvbiBjb2RlIHRoYXQgY2FuCi0JYWxzbyBiZSB1c2VkIGZvciBXaW5lbGliOyB0aGlzIHNob3VsZCBlbmFibGUgV2luZWxpYiBhcHBzIHRvIHVzZQotCURPUzNDYWxsIGFuZCByZWxhdGVkIGZ1bmN0aW9ucy4KLQotCSogW3JjL3dpbmVyYy5jXQotCUEgZmV3IGJ1ZyBmaXhlcyBmb3IgV2luMzIgcmVzb3VyY2UgZm9ybWF0LgotCi0JKiBbd2luZG93cy93aW5wb3MuY10KLQlIYWNrIGluIFdJTlBPU19SZW9yZGVyT3duZXJQb3B1cHMoKSB0byBhdm9pZCBYIGNyYXNoZWQgKHN0aWxsIG5vdAotCXJpZ2h0IHRob3VnaCkuCi0KLVN1biBEZWMgMjkgMTc6NDc6NTUgMTk5NiAgTy4gRmxlYmJlIDxmbGViYmVAc2NpZW5jZS1jb21wdXRpbmcudW5pLXR1ZWJpbmdlbi5kZT4KLQotCSogW2xvYWRlci9wZV9pbWFnZS5jXQotCU1ha2Ugc3VyZSBCU1Mgb2YgYSBQRV9JbWFnZSBpcyB6ZXJvLgotCi1TYXQgRGVjIDI4IDIyOjE1OjM0IDE5OTYgQWxleCBLb3JvYmthIDxhbGV4QHRyYW50b3IucGhhcm0uc3VueXNiLmVkdT4KLQotCSogW3dpbmRvd3Mvc2Nyb2xsLmNdCi0JU2Nyb2xsV2luZG93RXgoKSByZXdyaXRlLCBTY3JvbGxEQygpIGZpeC4KLQotCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdIFtjb250cm9scy9tZW51LmNdCi0JRml4ZWQgQWx0LVNwYWNlIGNyYXNoZXMgaW4gZGlhbG9ncy4KLQotCSogW3dpbmRvd3MvZXZlbnQuY10gW3dpbmRvd3MvbWVzc2FnZS5jXQotCVNvbWUgY2hhbmdlcyBpbiBtb3VzZSBtZXNzYWdlIGdlbmVyYXRpb24uCi0KLVRodSBEZWMgMjYgMDk6MjU6MjQgMTk5NiAgUGhpbGlwcGUgRGUgTXV5dGVyICA8cGhkbUBpbmZvLnVjbC5hYy5iZT4KLQotCSogW2RlYnVnZ2VyL3N0YWJzLmNdCi0JRHVtbXkgREVCVUdfUmVhZEV4ZWN1dGFibGVEYmdJbmZvIHByb3ZpZGVkIGZvciAhX19FTEZfXyBjYXNlLgotCi1UdWUgRGVjIDI0IDAwOjU5OjA1IE1FVCAxOTk2ICBNYXJ0aW4gQnVjayA8bWFydGluLTIuYnVja0BzdHVkZW50LnVuaS11bG0uZGU+Ci0KLQkqIFt3aW5kb3dzL2V2ZW50LmNdCi0JQ2hhbmdlZCBYS19QYWdlX3tVcCxEb3dufSB0byBYS197UHJpb3IsTmV4dH0gZm9yIFgxMVI1Ci0JY29tcGF0aWJpbGl0eS4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotU3VuIERlYyAyMiAxMzozMDoxOCAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KLQotCSogW2dyYXBoaWNzL21ldGFmaWxlZHJ2L2luaXQuY10gW2dyYXBoaXNjL21ldGFmaWxlZHJ2L21hcHBpbmcuY10KLQlBZGRlZCBtYXBwaW5nIGZ1bmN0aW9ucy4KLQotCSogW2lmMTYzMi9nZGkuc3BlY10gW29iamVjdHMvKi5jXSBbaW5jbHVkZS93aW5kb3dzLmhdCi0JQWRkZWQgYSBsb3Qgb2YgV2luMzIgZnVuY3Rpb25zLgotCi0JKiBbbWVtb3J5L2hlYXAuY10KLQlBZGRlZCBIRUFQX3N0cmR1cEF0b1cgYW5kIEhFQVBfc3RyZHVwV3RvQS4KLQotCSogW21pc2MvbHN0ci5jXSBbbWVtb3J5L3N0cmluZy5jXQotCU1vdmVkIE9FTTwtPkFuc2kgY29udmVyc2lvbiB0byBzdHJpbmcuYy4gRml4ZWQgYSBjb3VwbGUgb2YgYnVncy4KLQotCSogW29iamVjdC9mb250LmNdCi0JQXZvaWQgdXBwZXJjYXNpbmcgZm9udCBuYW1lcy4KLQotCSogW3dpbmRvd3MvaG9vay5jXQotCVNldCBkcyA9IHNzIGJlZm9yZSBjYWxsaW5nIGhvb2sgcHJvY2VkdXJlLgotCi1TYXQgRGVjIDIxIDIxOjQ0OjE3IDE5OTYgIEFsZXggS29yb2JrYSA8YWxleEB0cmFudG9yLnBoYXJtLnN1bnlzYi5lZHU+Ci0KLQkqIFtvYmplY3RzL2NvbG9yLmNdCi0JVXNlIGNvbG9ycyBhbGxvY2F0ZWQgYnkgb3RoZXIgY2xpZW50cy4gCi0KLQkqIFt3aW5kb3dzL2NhcmV0LmNdCi0JU2V0IGRlZmF1bHQgYmxpbmsgdGltZSB0byA1MDAuCi0KLQkqIFt3aW5kb3dzL3dpbi5jXSBbd2luZG93cy9ldmVudC5jXQotCURlbGV0ZSBYIGNvbnRleHQgYmVmb3JlIFhEZXN0cm95V2luZG93KCkuCi0KLQkqIFt3aW5kb3dzL2tleWJvYXJkLmNdCi0JRml4ZWQgR2V0S2V5U3RhdGUoKSBvbmNlIG1vcmUuCi0KLUZyaSBEZWMgMjAgMDg6MjY6MzMgMTk5NiAgRXJpYyBZb3VuZ2RhbGUgPGVyaWNAc3ViMjMwNC5qaWMuY29tPgotCi0JKiBbZGVidWdnZXIvKi5jXQotCUxvdHMgb2YgYnVpbHQtaW4gZGVidWdnZXIgaW1wcm92ZW1lbnRzOiBwYXJzZSBXaW4zMiBFWEVzIGRlYnVnCi0gCWluZm9ybWF0aW9uLCBkaXNwbGF5IGxvY2FsIHZhcmlhYmxlcywgc291cmNlIGZpbGVzIGFuZCBsaW5lCi0gCW51bWJlcnMsIGdldCBzeW1ib2xzIGRpcmVjdGx5IGZyb20gdGhlIFdpbmUgZXhlY3V0YWJsZSwgZXRjLgotCi1UdWUgRGVjIDE3IDIyOjM5OjQyIDE5OTYgIFBoaWxpcHBlIERlIE11eXRlciAgPHBoZG1AaW5mby51Y2wuYWMuYmU+Ci0KLQkqIFttaXNjL3dpbnNvY2tfYXN5bmMuY10KLSAJRXh0ZXJuIGRlY2xhcmF0aW9uIGFkZGVkIGZvciBoX2Vycm5vLgotCi1UdWUgRGVjIDE3IDIxOjI5OjM0IDE5OTYgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+Ci0KLQkqIFt3aW5kb3dzL21lc3NhZ2UuY10KLQlBZGRlZCB0d28gbW9yZSBDQlQgaG9vayBjYWxsczogSENCVF9DTElDS1NLSVBQRUQvSENCVF9LRVlTS0lQUEVELgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1TdW4gRGVjIDE1IDE2OjE4OjE1IDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgotCi0JKiBbZ3JhcGhpY3MveDExZHJ2L2JpdGJsdC5jXQotCUZpeGVkIEJJVEJMVF9TdHJldGNoSW1hZ2UgZm9yIHBhcnRpYWxseSBjb3ZlcmVkIG9yIGludmVydGVkCi0JYml0bWFwcy4KLQotCSogW29iamVjdHMvZGliLmNdCi0JRml4ZWQgdGhlIHVwc2lkZS1kb3duIGJpdG1hcCBwcm9ibGVtLgotCi1TYXQgRGVjIDE0IDAyOjQ5OjU3IDE5OTYgIFRob21hcyBTYW5kZm9yZCA8dC5kLmcuc2FuZGZvcmRAcHJkcy1ncm4uZGVtb24uY28udWs+Ci0KLQkqIFtpZjE2MzIvdXNlcjMyLnNwZWNdCi0JSXNNZW51IGFuZCBSZW1vdmVNZW51IGFkZGVkICh1c2UgZXhpc3RpbmcgV2luMTYgZnVuY3Rpb25zKS4KLQotCSogW2luY2x1ZGUvd2luZG93cy5oXQotCUNvcnJlY3Rpb25zIHRvIEJJVE1BUElORk9IRUFERVIgc3RydWN0dXJlLgotCi0JKiBbbG9hZGVyL21vZHVsZS5jXSBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdCi0JTmV3IGZ1bmN0aW9uIEdldE1vZHVsZUZpbGVOYW1lMzJBIChoZWF2aWx5IGJhc2VkIG9uIG9yaWdpbmFsCi0JV2luMTYgdmVyc2lvbikuCi0KLQkqIFtsb2FkZXIvcGVfaW1hZ2UuY10KLQlIYWNrIHRvIGFsbG93IGZpbGVzIHdpdGggc2hvcnQgUEUgaGVhZGVyIHRvIGJlIGxvYWRlZCAoZS5nLgotCUNPTURMRzMyLkRMTCBmcm9tIFdpbjMycykuCi0KLQkqIFttaXNjL3dpbnNvY2tfYXN5bmMuY10KLQkjaWYgb3V0IEVJRFJNIGNhc2UgKG5vdCBwcmVzZW50IGluIEZyZWVCU0QpLgotCi0JKiBbdG9vbHMvYnVpbGQuY10KLQlSZW1vdmUgdHJhaWxpbmcgY29tbWVudHMgZnJvbSAucyBmaWxlcyBnZW5lcmF0ZWQgYnkgYnVpbGQKLQlhcyB0aGVzZSBicmVhayBhc3NlbWJseSB3aGVuIG5vdCBydW4gdGhyb3VnaCBwcmUtcHJvY2Vzc29yLgotCi0JKiBbd2luZG93cy9ncmFwaGljcy5jXSBbaWYxNjMyL2dkaTMyLnNwZWNdCi0JTmV3IGZ1bmN0aW9uIFBvbHlsaW5lMzIgLSBiYXNlZCBvbiBvcmlnaW5hbCBQb2x5bGluZS4gTmVlZHMKLQltZXRhZmlsZSBzdXBwb3J0IGFkZGluZyBzdGlsbC4KLQotRnJpIERlYyAxMyAxMzowNDowNiAxOTk2ICBCcnVjZSBNaWxuZXIgPEJydWNlLk1pbG5lckBnZW5ldGljcy51dGFoLmVkdT4KLQotCSogW3dpbjMyL2ZpbmRmaWxlLmNdIFtpZjE2MzIva2VybmVsLnNwZWNdCi0JRmluZEZpcnN0RmlsZTMyQSgpOiBVc2UgZG9zIGN1cnJlbnQgZGlyZWN0b3J5IGZvciBkcml2ZSBwcmVmaXhlcy4KLQlGaW5kTmV4dEZpbGUzMkEoKTogRmlsbCBpbiBmaWxlIGF0dHJpYnV0ZSBpbmZvcm1hdGlvbi4KLQlJbXBsZW1lbnQgRmluZEZpcnN0RmlsZTE2LCBGaW5kTmV4dEZpbGUxNiwgRmluZENsb3NlMTYuCi0KLQkqIFtmaWxlcy9kcml2ZS5jXQotCUdldEN1cnJlbnREaXJlY3RvcnkzMkEgLSBGaXggcHJvYmxlbSB3aXRoIG51bGwgM3JkIGNoYXJhY3RlciBpbgotCXN0cmluZy4KLQotVHVlIERlYyAxMCAxNDo0OTowNyAxOTk2ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KLQotCSogW3dpbmRvd3MvcGFpbnRpbmcuY11bd2luZG93cy9tZXNzYWdlLmNdCi0JRG9uJ3QgdXNlIGxpbmtlZCBsaXN0cyB0byBjYWxsIFNlbmRNZXNzYWdlKCksIGZvciBpdCBtaWdodCBkZXN0cm95Ci0gCXRoZSBjdXJyZW50IGxpc3RlbnRyeS4KLQotCSogW21pc2MvcmVnaXN0cnkuY10KLQlGaXhlZCB0ZW1wb3JhcnkgZmlsZSBzYXZpbmcgKHJlbmFtZSBkb2Vzbid0IHdvcmsgYWNyb3NzCi0JcGFydGl0aW9ucykuCi0KLQkqIFtmaWxlcy8qLmNdCi0JR2V0RnVsbFBhdGhOYW1lKixHZXREcml2ZVR5cGUzMkEgZml4ZWQsIENyZWF0ZURpcmVjdG9yeUV4KiwKLQlHZXRWb2x1bWVJbmZvcm1hdGlvbjMyVyBmaXhlZC4KLQotCSogW3dpbjMyL3Byb2Nlc3MuY11baWYxNjMyL2tlcm5lbC5zcGVjXVtpZjE2MzIva2VybmVsMzIuc3BlY10KLQlMb2FkTGlicmFyeSogdXBkYXRlZCB0byBuZXcgbmFtaW5nIHN0ZC4sICozMlcgYWRkZWQuCi0KLQkqIFt3aW4zMi9jb25zb2xlLmNdIFtpbmNsdWRlL3dpbmNvbi5oXQotCUFkZGl0aW9ucyBmb3IgTlQgY29tbWFuZGxpbmUgZXhlY3V0YWJsZXMuCi0KLQkqIFtpZjE2MzIvYWR2YXBpMzIuc3BlY11baWYxNjMyL2tlcm5lbDMyLnNwZWNdW3dpbjMyL2luaXQuY10JCi0JR2V0VXNlck5hbWUzMlcgYWRkZWQsIEdldENvbXB1dGVyTmFtZTMyVyBhZGRlZCwKLQlHZXRTdGFydHVwSW5mbzMyVyBhZGRlZCwgR2V0U3lzdGVtSW5mbyB1cGRhdGVkIHRvIE5UIHN0YW5kYXJkLgotCi0JKiBbd2luZG93cy9tc2dib3guY11bbWlzYy9zaGVsbC5jXVt3aW5kb3dzL2dyYXBoaWNzLmNdCi0JTWVzc2FnZUJveDMyVywgU2hlbGxBYm91dDMyVywgQ29tbWFuZExpbmVUb0FyZ3ZXLCBQb2x5Z29uMzIgYWRkZWQuCi0KLQkqIFttaXNjL2NydGRsbC5jXVtpbmNsdWRlL2NydGRsbC5oXVtpZjE2MzIvY3J0ZGxsLnNwZWNdW21pc2MvbnRkbGwuY10KLQkgIFtpZjE2MzIvbnRkbGwuc3BlY10KLQlMb3Qgb2YgbmV3IHVuaWNvZGUgZnVuY3Rpb25zIGFkZGVkIChuZWVkZWQgZm9yIE5UKS4KLQotCSogW2xvYWRlci9wZV9pbWFnZS5jXQotCU50Q3VycmVudFRlYiBhZGRlZC4KLQotVHVlIERlYyAxMCAyMjozOTozMyAxOTk2ICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgotCi0JKiBbd2luZG93cy9rZXlib2FyZC5jXQotCVJld3JvdGUgZnVuY3Rpb24gVHJhbnNsYXRlQWNjZWxlcmF0b3IoKS4KLQotTW9uIERlYyAgOSAxNDo1MjoxMyAxOTk2ICBTbGF2ZW4gUmV6aWMgIDxlc2VydGVAY3MudHUtYmVybGluLmRlPgotCi0JKiBbd2luZG93cy9kZWZ3bmQuY10gCi0JREVGV05EX1NldFRleHQoKTogU2V0IGljb24gbmFtZS4KLQotU3VuIERlYyAgOCAyMzozMDowMCAxOTk2ICBBbGV4IEtvcm9ia2EgPGFsZXhAdHJhbnRvci5waGFybS5zdW55c2IuZWR1PgotCi0JKiBbbG9hZGVyL3NpZ25hbC5jXSBbbWlzYy93aW5zb2NrLmNdIFttaXNjL3dpbnNvY2tfYXN5bmMuY10KLQkgIFtpZjE2MzIvd2luc29jay5zcGVjXQotCUlQQyByZXNvdXJjZSBjbGVhbnVwLCBidWdmaXhlcy4KLQotCSogW3dpbmRvd3MvZGlhbG9nLmNdIFt3aW5kb3dzL2RlZmRsZy5jXQotCU1vcmUgRGVmRGxnUHJvYygpIGZpeGVzLgotCi1TdW4gRGVjICA4IDE0OjAxOjQyIDE5OTYgIFZhZGltIFN0cml6aGV2c2t5ICA8c3RyaXZAbXMuY29tPgotCi0JKiBbbWlzYy9jbGlwYm9hcmQuY10gW29iamVjdHMvZm9udC5jXSBbd2luMzIvaW5pdC5jXQotIAkgIFt3aW4zMi9uZXdmbnMuY10gW3dpbmRvd3MvZ3JhcGhpY3MuY10KLQlBZGRlZCBhIGZldyBXSU4zMiBmdW5jdGlvbnMgd2hpY2ggbmVlZGVkIHRvIHJ1biBzb21lIHdpbjMyCi0JYWNjZXNzb3JpZXMuIENsb2NrIHNob3VsZCBub3cgd29yayBhbG1vc3QgYXMgd2VsbCBhcyAxNiBiaXQgdmVyc2lvbi4KLQlBZGQ6IFJlZ2lzdGVyQ2xpcGJvYXJkRm9ybWF0MzJXIEdldFRleHRFeHRlbnRFeFBvaW50MzIqCi0JICAgICBHZXRNb2R1bGVIYW5kbGVXLCBEaXNhYmxlVGhyZWFkTGlicmFyeUNhbGxzIChlbXB0eSBzdHViKSwKLQkgICAgIFBvbHlnb24zMgotCUZpeDogUG9seWdvbjE2IHBvc3NpYmxlIG1lbW9yeSBsZWFrIG9uIGVycm9yIHJldHVybi4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotU3VuIERlYyAgOCAxNDo1MTo1NyAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KLQotCSogW2NvbmZpZ3VyZS5pbl0KLQlBZGRlZCBjaGVjayB0byBzZWUgaWYgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIGJ1aWxkaW5nIGEgRExMIHdoZW4KLQl0aGUgLS13aXRoLWRsbCBvcHRpb24gaXMgdXNlZC4KLQotCSogW2NvbnRyb2xzL2xpc3Rib3guY10KLQlEb24ndCBzZW5kIExCTl9TRUxDSEFOR0UgdG9vIG9mdGVuLgotCUFkZGVkIFdNX0NIQVJUT0lURU0gc3VwcG9ydC4KLQotCSogW01ha2UucnVsZXMuaW5dIFtsaWJyYXJ5L01ha2VmaWxlLmluXQotCUJ1aWxkIHdpbmVzdHViLm8gYW5kIGxpbmsgaXQgd2l0aCBXaW5lbGliIHByb2dyYW1zLgotCi0JKiBbb2JqZWN0cy90ZXh0LmNdCi0JQWRkZWQgc3VwcG9ydCBmb3IgJyYmJyBpbiBEcmF3VGV4dCgpLgotCi0JKiBbdG9vbHMvYnVpbGQuY10KLQlBZGRlZCAtbyBvcHRpb24uCi0KLVNhdCBEZWMgNyAxMjowNzowNyAxOTk2ICBBbmRyZXcgTGV3eWNreSA8cGxld3lja3lAb2lzZS51dG9yb250by5jYT4KLQotCSogW3dpbjMyL3RocmVhZC5jXQotCUdldEN1cnJlbnRUaHJlYWQoKTogcmV0dXJuIC0yIChjdXJyZW50IHRocmVhZCBwc2V1ZG8taGFuZGxlKS4KLQlHZXRDdXJyZW50VGhyZWFkSWQoKTogcmV0dXJuIEdldEN1cnJlbnRUYXNrKCkuCi0KLQkqIFtvYmplY3RzL2ZvbnQuY10gW2lmMTYzMi9nZGkzMi5zcGVjXQotCUdldFRleHRFeHRlbnRQb2ludDMye0EsV31CdWdneSgpOiBmb3IgZnV0dXJlIGJ1Zy1jb21wYXRpYmlsaXR5LgotCi0JKiBbd2luMzIvZmluZGZpbGUuY10KLQlGaW5kQ2xvc2UoKTogaWdub3JlIElOVkFMSURfSEFORExFX1ZBTFVFIChsaWtlIFdpbjk1KS4KLQotCSogW3dpbmRvd3MvaG9vay5jXSBbaW5jbHVkZS9ob29rLmhdIFtpZjE2MzIvdXNlci5zcGVjXQotCSAgW2lmMTYzMi91c2VyMzIuc3BlY10gW3dpbmRvd3MvZm9jdXMuY10gW3dpbmRvd3MvbWVzc2FnZS5jXQotCSAgW3dpbmRvd3Mvbm9uY2xpZW50LmNdIFt3aW5kb3dzL3dpbi5jXSBbd2luZG93cy93aW5wb3MuY10KLQlIb29rcyByZXdyaXR0ZW4gdG8gc3VwcG9ydCBXaW4zMi4KLQotCSogW21pc2Mvd2luc29jay5jXQotCVdJTlNPQ0tfc2VsZWN0KCk6IG5lZWQgdG8gcHV0IHNvY2tldHMgd2l0aCBlcnJvcnMgaW50byBleGNlcHRmZHMuCi0JV0lOU09DS19zb2NrZXQoKTogZml4IGVycm9yIHJldHVybi4KLQotCSogW3dpbmRvd3Mvd2luLmNdCi0JU2V0V2luZG93V29yZCgpOiBjYWxsIFNldFBhcmVudCBvbiBHV1dfSFdORFBBUkVOVC4KLQotV2VkIERlYyAgNCAyMjowMzowNSAxOTk2ICBBbmRyZXcgVGF5bG9yIDxhdGF5bG9yQGNhZHZpc2lvbi5jb20+Ci0KLQkqIFtmaWxlcy9kb3NfZnMuY10KLQlDaGVjayBpZiBidWYgaXMgTlVMTCBiZWZvcmUgY29weWluZyBzdHJpbmcgaW4gR2V0RnVsbFBhdGhOYW1lMzJBKCkuCi0KLVdlZCBEZWMgIDQgMjE6NDA6NTkgMTk5NiAgUm9iZXJ0IFBvdWxpb3QgPGtyeW5vc0BjbGljLm5ldD4KLQotICAgICAgICAqIFtncmFwaGljcy93aW5nLmNdIFtpZjE2MzIvd2luZy5zcGVjXQotCUltcGxlbWVudGVkIG1hbnkgV2luRyBmdW5jdGlvbnMsIGJ1dCBzb21lIGRvbid0IHNlZW0gdG8KLQl3b3JrIGNvcnJlY3RseSAocHJvYmFibHkgZHVlIHRvIHRoZSBvbmUgbm90IGRvbmUpLgotCQotV2VkIERlYyAgNCAwMzozODoyNSAxOTk2ICBMZWUgSmFla2lsIDxqdXJpYUBwdW1hLmthaXRlY2gucmUua3I+Ci0KLQkqIFttaXNjL21haW4uY10KLQlJbXBsZW1lbnRlZCBhIGZldyBtb3JlIG9mIHRoZSBTeXN0ZW1QYXJhbWV0ZXJzSW5mbygpIGNhc2VzLgotCi1TdW4gRGVjICAxIDIyOjMwOjAwIDE5OTYgIEFsZXggS29yb2JrYSA8YWxleEB0cmFudG9yLnBoYXJtLnN1bnlzYi5lZHU+IAotCi0JKiBbY29udHJvbHMvYnV0dG9uLmNdCi0JSW1wcm92ZWQgZm9jdXMgcmVjdGFuZ2xlIHBhaW50aW5nLgotCi0JKiBbd2luZG93cy9kaWFsb2cuY10gW3dpbmRvd3MvZGVmZGxnLmNdCi0JRml4ZWQgSUUzLjAgcHJvYmxlbXMgd2l0aCBEV0xfTVNHUkVTVUxULgotCi1TdW4gRGVjICAxIDIwOjQ5OjMyIDE5OTYgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+Ci0KLQkqIFtmaWxlcy9wcm9maWxlLmNdCi0JQ2hhbmdlZCBlcnJvciBoYW5kbGluZyBpbiBQUk9GSUxFX1NldFN0cmluZygpLgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1TYXQgTm92IDMwIDE5OjIxOjE3IDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgotCi0JKiBbY29uZmlndXJlXQotCVJlLWdlbmVyYXRlZCB3aXRoIGF1dG9jb25mIDIuMTEuIExldCBtZSBrbm93IGlmIHlvdSBoYXZlCi0JcHJvYmxlbXMuCi0KLQkqIFtjb250cm9scy9saXN0Ym94LmNdIFtjb250cm9scy9vbGRsYm94LmNdCi0JTGlzdGJveGVzIHJld3JpdHRlbiBmcm9tIHNjcmF0Y2guIE1vdmVkIG9sZCBjb2RlIHN0aWxsIHVzZWQgYnkKLQljb21ib2JveGVzIHRvIG9sZGxib3guYwotCi0JKiBbbWlzYy9yZWdpc3RyeS5jXQotCVVzZSB0ZW1wb3JhcnkgZmlsZSB3aGVuIHNhdmluZyByZWdpc3RyeS4KLQotCSogW3dpbmRvd3MvZGlhbG9nLmNdCi0JSW1wbGVtZW50ZWQgV2luMzIgdmVyc2lvbiBvZiBEbGdEaXJMaXN0KCkgYW5kIERsZ0Rpckxpc3RDb21ib0JveCgpLgotCi0JKiBbd2luZG93cy93aW5wcm9jLmNdCi0JQWRkZWQgdHJhbnNsYXRpb24gZm9yIGxpc3Rib3ggV2luMzIgbWVzc2FnZXMuCi0KLVNhdCBOb3YgMzAgMjE6MDA6MDAgQWxleCBLb3JvYmthIDxhbGV4QHRyYW50b3IucGhhcm0uc3VueXNiLmVkdT4KLQotCSogW2NvbnRyb2xzL3dpZGdldHMuY10gW2NvbnRyb2xzL2J1dHRvbi5jXQotCUZpeGVkIHNvbWUgaW5jb21wYXRpYmlsaXRpZXMgd2l0aCBDVEwzRCBETEwuCi0KLQkqIFt3aW5kb3dzL2RpYWxvZy5jXQotCU1hZGUgZGlhbG9nIHdpbmRvd3MgZml0IGludG8gdGhlIGRlc2t0b3AuCi0KLQkqIFttaXNjL3dpbnNvY2suY10gW21pc2Mvd2luc29ja19hc3luYy5jXQotCU5ldyBXaW5zb2NrIGVuZ2luZS4KLQotCSogW3dpbmRvd3MvbWVzc2FnZS5jXQotCUdldE1lc3NhZ2UoKSBmaXhlcy4KLQotCSogW3dpbmRvd3MvcXVldWUuY10gW3dpbmRvd3MvaG9vay5jXSBbd2luZG93cy93aW4uY10KLQlTZXRNZXNzYWdlUXVldWUoKSBmaXhlcy4KLQotRnJpIE5vdiAyOSAxMDoyNToxMiAxOTk2ICBTbGF2ZW4gUmV6aWMgIDxlc2VydGVAY3MudHUtYmVybGluLmRlPgotCi0JKiBbb2JqZWN0cy90ZXh0LmNdCi0JRHJhd1RleHQxNigpOiBGaXhlZCByZXR1cm4gdmFsdWUuCi0KLVR1ZSBOb3YgMjYgMTQ6NDc6MDkgMTk5NiAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+Ci0KLQkqIFtmaWxlcy9wcm9maWxlLmNdIFsqLypdCi0JQWRkZWQgV2luMzIgcHJvZmlsZSBmdW5jdGlvbnMsIHVwZGF0ZWQgdG8gbmV3IG5hbWluZyBzdGFuZGFyZC4KLQotCSogW29iamVjdHMvZm9udC5jXSBbaWYxNjMyL3RodW5rLmNdIFtpbmNsdWRlL3dpbmRvd3MuaF0KLQlBZGRlZCBFbnVtRm9udHMzMiosIEVudW1Gb250RmFtaWxpZXNFeCosIGNoYW5nZWQgcHJvdG90eXBlcyBhbmQKLQlzdHJ1Y3R1cmVzLgotCi0JKiBbbWlzYy9vbGUybmxzLmNdIFtpZjE2MzIvdGh1bmsuY10KLQlBZGRlZCBFbnVtU3lzdGVtTG9jYWxlcygpICh3aW5oZWxwLmV4ZSkuCi0KLQkqIFttaXNjL3JlZ2lzdHJ5LmNdCi0JQWRkZWQgV2luZG93cyAzLjEgcmVnaXN0cnkgbG9hZGVyIHN1cHBsaWVkIGJ5IFRvciBTanh3YWxsLCB0b3JAc24ubm8KLQotCSogW3dpbjMyL2ZpbGUuY10KLQlQYXJ0aWFsbHkgZml4ZWQgQ3JlYXRlRmlsZU1hcHBpbmcoKSwgYWRkZWQgVW5tYXBWaWV3T2ZGaWxlKCkuCi0KLVNhdCBOb3YgMjMgMjM6MzY6MDUgMTk5NiAgUm9uYW4gV2FpZGUgIDx3YWlkZXJAd2FpZGVyLmllPgotCi0JKiBbbWlzYy9zaGVsbC5jXQotCUZpeGVkIHNvbWUgRklYTUVzIHJlbGF0aW5nIHRvIFNoZWxsRXhlYygpIGFuZCBGaW5kRXhlY3V0YWJsZSgpLgotCi0JKiBbbWlzYy9tYWluLmNdCi0JSW1wbGVtZW50ZWQgYSBmZXcgbW9yZSBvZiB0aGUgU3lzdGVtUGFyYW1ldGVyc0luZm8oKSBjYXNlcy4KLQotVHVlIE5vdiAxOSAwMToyNDozNCAxOTk2ICBQaGlsaXBwZSBEZSBNdXl0ZXIgIDxwaGRtQGluZm8udWNsLmFjLmJlPgotCi0JKiBbaW5jbHVkZS9rZXlib2FyZC5oXQotCU5ldyBmaWxlLCBuZXcgbWFjcm8gV0lORV9WS0VZX01BUFBJTkdTICh1c2luZyBjb2RlIHRha2VuIGZyb20gZXZlbnQuYykuCi0KLQkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KLQlOZXcgW1ZLX0EsIFZLX1pdIGFuZCBbVktfMCwgVks5XSBtYWNyb3MuCi0KLQkqIFttaXNjL2tleWJvYXJkLmNdCi0JRml4ZXMgaW4gS2V5VGFibGUgYW5kIFRvQXNjaWkuCi0KLQkqIFtvYmplY3RzL2ZvbnQuY10KLQlGT05UX2luaXQgOiBHaXZlIGRlZmF1bHQgdmFsdWUgZm9yIE1TV0lOICJzeXN0ZW0iIGZvbnQuCi0JRk9OVF9NYXRjaEZvbnQgOiBEbyBub3QgdHJ5IGV2ZXJ5IHNpemUgb2YgYSBmb250IGZhbWlseSBpZiB0aGUKLQlmYW1pbHkgZG9lcyBub3QgZXhpc3QuCi0KLQkqIFt3aW5kb3dzL2V2ZW50LmNdCi0JbGFzdEV2ZW50Q2hhciBoYWNrIHJlbW92ZWQuCi0JS2V5U3RhdGVUYWJsZSByZXBsYWNlZCBieSBJbnB1dEtleVN0YXRlVGFibGUgKG1haW50YWluZWQgaW4gZXZlbnQuYykKLQlhbmQgUXVldWVLZXlTdGF0ZVRhYmxlIChtYWludGFpbmVkIGluIG1lc3NhZ2UuYykuCi0JRVZFTlRfa2V5IDogQ29ycmVjdGlvbnMgdG8gdGhlIGV4dGVuZGVkIGJpdCBzZXR0aW5nLgotCi0JKiBbd2luZG93cy9tZXNzYWdlLmNdIFt3aW5kb3dzL2tleWJvYXJkLmNdCi0JSW1wbGVtZW50YXRpb24gb2YgYSBuZXcgUXVldWVLZXlTdGF0ZVRhYmxlIDogdGFibGUgb2Yga2V5IHN0YXRlcwotCXZhbGlkIHdoZW4gbWVzc2FnZXMgYXJlIHJldHJpZXZlZCBieSBHZXRNZXNzYWdlIG9yIFBlZWtNZXNzYWdlLAotCWFuZCB2YWxpZCBmb3IgVHJhbnNsYXRlTWVzc2FnZS4KLQlUcmFuc2xhdGVNZXNzYWdlIDogQ29udmVydCBXTSpLRVkgbWVzc2FnZXMgdXNpbmcgUXVldWVLZXlTdGF0ZVRhYmxlCi0JYW5kIFRvQXNjaWkuCi0JCi1Nb24gTm92IDE4IDE2OjU5OjAxIDE5OTYgIFJvYmVydCBQb3VsaW90IDxrcnlub3NAY2xpYy5uZXQ+Ci0KLQkqIFtncmFwaGljcy9NYWtlZmlsZS5pbl0gW2dyYXBoaWNzL3dpbmcuY10KLQkgIFtpZjE2MzIvd2luZy5zcGVjXQotCVNvbWUgZnVuY3Rpb25zIGZvciBXaW5HIHN1cHBvcnQsIG1vc3RseSBlbXB0eSBzdHVicy4KLQotCSogW21pc2MvY3J0ZGxsLmNdIFtpZjE2MzIvY3J0ZGxsLnNwZWNdCi0JTWFueSBmdW5jdGlvbnMgYWRkZWQgdG8gQ1JURExMLCBtb3N0bHkgY2FsbHMgdG8gVW5peCBDIGxpYnJhcnkuCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVN1biBOb3YgMTcgMTU6MDE6NDUgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+Ci0KLQkqIFtncmFwaGljcy9iaXRibHQuY10gW2dyYXBoaWNzL3gxMWRydi9iaXRibHQuY10KLQlNb3ZlZCBCaXRCbHQgb3BlcmF0aW9ucyB0byB0aGUgbmV3IGdyYXBoaWNzIGRyaXZlcgotCWludGVyZmFjZS4gSW1wbGVtZW50ZWQgUGF0Qmx0MzIsIEJpdEJsdDMyIGFuZCBTdHJldGNoQmx0MzIuCi0KLQkqIFttZW1vcnkvZ2xvYmFsLmNdCi0JVW5pZmllZCBNZW1NYW5JbmZvKCkgYW5kIEdsb2JhbE1lbW9yeVN0YXR1cygpLgotCi0JKiBbb2JqZWN0cy90ZXh0LmNdCi0JRml4ZWQgRXh0VGV4dE91dCgpIHRvIGFsd2F5cyB1c2UgcGh5c2ljYWwgY29vcmRzIGZvciBjbGlwIHJlY3QuCi0KLQkqIFt3aW5kb3dzL2RpYWxvZy5jXQotCUltcGxlbWVudGVkIERsZ0RpclNlbGVjdEV4KCkgYW5kIFdpbjMyIHZlcnNpb24gb2YgRGxnRGlyU2VsZWN0Ki4KLQotCSogW3dpbmRvd3MvZXZlbnQuY10KLQlBdm9pZCBidXN5LWxvb3BpbmcgaW4gRVZFTlRfV2FpdFhFdmVudCB3aGVuIG5vIHRpbWVyIGlzIHBlbmRpbmcKLQkodGhhbmtzIHRvIFRob21hcyBLb2VuaWcpLgotCi0JKiBbd2luZG93cy9wYWludGluZy5jXQotCU1vdmVkIHVwZGF0ZSByZWdpb24gY2xpcHBpbmcgZm9yIENTX1BBUkVOVERDIHdpbmRvd3MgdG8gQmVnaW5QYWludCgpLgotCQotCSogW3dpbmRvd3Mvc2Nyb2xsLmNdCi0JSW1wbGVtZW50ZWQgV2luMzIgdmVyc2lvbiBvZiBTY3JvbGxXaW5kb3coKSBhbmQgU2Nyb2xsREMoKS4KLQotVHVlIE5vdiAxMiAwOTo1MjoxNyAxOTk2ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KLQotCSogW2ZpbGVzLyouY10gW3dpbjMyL2ZpbGUuY10KLQlTb21lIHdpbjMyIGZpbGV0aW1lIGNvbnZlcnNpb24gZnVuY3Rpb25zIGFkZGVkLgotCUZpeGVkIGJlaGF2aW91ciB3aXRoIERPUyBkcml2ZXMgcG9pbnRpbmcgdG8gVU5JWCAvCi0JU2V0Q3VycmVudERpcmVjdG9yeSgpIG1heSBhbHNvIGdldCBYOlx4eHggcGF0aHMuCi0JRml4ZWQgRklMRV9PcGVuIHdoZW4gY2FsbGVkIGZyb20gQ3JlYXRlRmlsZSgpLgotCUFkZGVkIEdldEZpbGVTaXplKCksIE1hcFZpZXdPZkZpbGUoKSwgU2V0RmlsZVRpbWUoKSwgR2V0RmlsZVRpbWUoKS4KLQotCSogW21pc2MvY3J0ZGxsLmNdIFtpZjE2MzIvY3J0ZGxsLnNwZWNdCi0JQWRkZWQgc29tZSBuZXcgZnVuY3Rpb25zLgotCi0JKiBbaWYxNjMyL3VzZXIzMi5zcGVjXQotCVNvbWUgdGh1bmtzIGludG8gd2luMTYgY29kZSBhZGRlZC4KLQotCSogW3dpbjMyL2luaXQuY10KLQlBZGRlZCBHZXRTeXN0ZW1JbmZvKCksIHJlbW92ZWQgR2V0TW9kdWxlRmlsZU5hbWUoKSBzdHViLgotCi0JKiBbd2luMzIvY29kZV9wYWdlLmNdIFtpZjE2MzIvdGh1bmsuY10KLQlBZGRlZCBFbnVtU3lzdGVtQ29kZVBhZ2VzKiAodW50ZXN0ZWQpLgotCi0JKiBbb2JqZWN0cy9mb250LmNdIFtpZjE2MzIvdGh1bmsuY10KLQlBZGRlZCBFbnVtRm9udEZhbWlsaWVzMzIqLgotCQotTW9uIE5vdiAxMSAxNDo1MDoyNCAxOTk2ICBIdXcgRC4gTS4gRGF2aWVzIDxoLmRhdmllczFAcGh5c2ljcy5veGZvcmQuYWMudWs+Ci0KLQkqIFtjb250cm9scy9tZW51LmNdIFt3aW5kb3dzL21kaS5jXQotCURvbid0IGRlbGV0ZSB0aGUgTURJIGB3aW5kb3dzJyBtZW51IGlmIGl0J3MgYWxyZWFkeSBiZWVuIGRlbGV0ZWQuCi0KLQkqIFttaXNjL2V4ZWMuY10KLQlOb3RlcGFkIGFsd2F5cyBjYWxscyBXaW5IZWxwKC4uLCBIRUxQX1FVSVQsIC4uLikgYXQgdGVybWluYXRpb24KLSAJYW5kIGNvbXBsYWlucyBpZiBpdCByZXR1cm5zIEZBTFNFLgotCi0JKiBbd2luZG93cy93aW5wb3MuY10KLQlHZXQgbWF4aW1pemVkIE1ESSBjaGlsZCdzIG5vbmNsaWVudCBhcmVhIHJlZHJhd24gYWZ0ZXIgcmVzaXplLgotCi1UaHUgTm92ICA3IDEzOjMyOjM0IDE5OTYgIExlZSBKYWVraWwgPGp1cmlhQHNlb2R1LmNvLmtyPgotCi0JKiBbbWVtb3J5L2dsb2JhbC5jXQotCVVzZSAvcHJvYyBmaWxlc3lzdGVtIGZvciBHbG9iYWxNZW1vcnlTdGF0dXMoKSBvbiBMaW51eC4KLQotTW9uIE5vdiAgNCAxODozMDowMCAxOTk2ICBBbGV4IEtvcm9ia2EgPGFsZXhAdHJhbnRvci5waGFybS5zdW55c2IuZWR1PgotCi0JKiBbd2luZG93cy9ldmVudC5jXQotCUFkZGVkIE9mZmlYLXN0eWxlIGZpbGUgZHJvcCBoYW5kbGluZy4gRmlsZSBwYXRocyBtdXN0IGJlCi0JRE9TLW1hcHBhYmxlIGJ5IFdpbmUgKHZpYSB3aW5lLmNvbmYpLgotCi0JKiBbY29udHJvbHMvY29tYm8uY10KLSAgICAgICAgQWRkZWQgV01fR0VUVEVYVCBoYW5kbGVyLgotCi0JKiBbb2JqZWN0cy9wYWxldHRlLmNdCi0JQWRkZWQgUmVzaXplUGFsZXR0ZSgpICh1bnRlc3RlZCkuCi0KLQkqIFtvYmplY3RzL2N1cnNvcmljb24uY10KLQlJbXBsZW1lbnRlZCBpY29uIHRvIGN1cnNvciBjb252ZXJzaW9uLgotCi0JKiBbb2JqZWN0cy9jb2xvci5jXQotCUZpeGVkIGNyYXNoIG9uIHN0YXJ0dXAgd2hlbiBubyBjb2xvcmNlbGxzIGFyZSB3cml0ZWFibGUuCi0KLU1vbiBOb3YgIDQgMDA6NDk6NDEgMTk5NiAgVWxyaWNoIFNjaG1pZCAgPHVzY2htaWRAbWFpbC5oaC5wcm92aS5kZT4KLQotCSogW3JjL3dpbmVyYy5jXQotCUFkZGVkIHN1cHBvcnQgZm9yIHdpbjMyIG91dHB1dC4KLQotCSogW2xpYnJhcnkvbGlicmVzLmNdIFtpbmNsdWRlL2xpYnJlcy5oXSBbbG9hZGVyL3Jlc291cmNlLmNdCi0JUmVuYW1lZCBMSUJSRVNfRmluZFJlc291cmNlIHRvIExJQlJFU19GaW5kUmVzb3VyY2UxNi4KLQlBZGRlZCBMSUJSRVNfRmluZFJlc291cmNlMzIuCi0KLVN1biBOb3YgMyAyMToyMTo0NSAxOTk2ICBSb2JlcnQgUG91bGlvdCA8a3J5bm9zQGNsaWMubmV0PgotCi0JKiBbbG9hZGVyL2J1aWx0aW4uY10gW2lmMTYzMi9NYWtlZmlsZS5pbl0gW2lmMTYzMi93aW5nLnNwZWNdCi0JQWRkZWQgdGhlIHNwZWMgZmlsZSBmb3IgV2luRywgaXQncyBvbmx5IHN0dWIgZm9yIG5vdywgYnV0IGl0Ci0Jc2hvdWxkIGJlIGVhc3kgdG8gZG8gYnkgc29tZW9uZSB3aXRoIFdpbmRvd3MgcHJvZ3JhbW1pbmcKLQlrbm93bGVkZ2UuIFNlZTogZnRwLm1pY3Jvc29mdC5jb20vU29mdExpYi9NU0xGSUxFUy93aW5nMTAuZXhlLgotCi0JKiBbaWYxNjMyL2NydGRsbC5zcGVjXQotCUFkZGVkIHNvbWUgc3RyaW5nIGFuZCBtZW1vcnkgZnVuY3Rpb25zIHRvIG1ha2Ugc2Z4ZWQ5NS5leGUgKG9mCi0gCVdhcmNyYWZ0IDIpIGFsbW9zdCB3b3JrLgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1TYXQgTm92ICAyIDEyOjUwOjQwIDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgotCi0JKiBbZmlsZXMvZG9zX2ZzLmNdCi0JQWRkZWQgbG9uZyBmaWxlIG5hbWUgbWFzayBpbiBET1NGU19GaW5kTmV4dCgpLgotCi0JKiBbbG9hZGVyL3BlX2ltYWdlLmNdIFtsb2FkZXIvdGFzay5jXQotCU1vdmVkIFdpbjMyIHRhc2sgc3RhcnR1cCBpbnRvIFRBU0tfQ2FsbFRvU3RhcnQoKS4KLQotCSogW29iamVjdHMvZGMuY10KLQlGaXhlZCBTZXREQ1N0YXRlKCkgZm9yIG1lbW9yeSBEQyAodGhhbmtzIHRvIENvbnN0YW50aW5lCi0JU2FwdW50emFraXMgZm9yIHNwb3R0aW5nIHRoaXMgb25lKS4KLQotCSogW3dpbmRvd3Mvd2lucG9zLmNdCi0JRml4ZWQgV0lOUE9TX0ZvcmNlWFdpbmRvd1JhaXNlKCkgdG8gcHJlc2VydmUgY29ycmVjdCBaLW9yZGVyLgotCi0JKiBbKi8qXQotCUFkZGVkIFdpbjMyIHZlcnNpb24gZm9yIG1hbnkgZ3JhcGhpY3MgZnVuY3Rpb25zLgotCi1UaHUgT2N0IDMxIDEwOjAwOjE4IDE5OTYgIEh1dyBELiBNLiBEYXZpZXMgPGguZGF2aWVzMUBwaHlzaWNzLm94Zm9yZC5hYy51az4KLQotCSogW2NvbnRyb2xzL2J1dHRvbi5jXQotCUJVVFRPTl9DaGVja0F1dG9SYWRpb0J1dHRvbigpIHVuY2hlY2tzIG9ubHkgYXV0byByYWRpbyBidXR0b25zLgotCi0JKiBbY29udHJvbHMvZWRpdC5jXQotCUVNX0dFVFNFTCByZXN1bHQgc2hvdWxkIGhhdmUgSElXT1JEKHJlc3VsdCkgPj0gTE9XT1JEKHJlc3VsdCk7IG9sZAotCUVESVRfRU1fR2V0U2VsKCkgcmVuYW1lZCB0byBFRElUX0dldFNlbCgpLiAKLQotCSogW3dpbmRvd3MvZGlhbG9nLmNdCi0JRFNfTE9DQUxFRElUIGlzIGEgZGlhbG9nIHN0eWxlIG5vdCBhbiBlZGl0IHN0eWxlLgotCi0JKiBbd2luZG93cy93aW5wcm9jLmNdCi0JU3RvcCBzdGFjayB0cmFzaGluZyB3aGVuIHduZFB0ci0+dGV4dCA9PSBOVUxMLgotCi1UdWUgT2N0IDI5IDIzOjM1OjA0IDE5OTYgICBDb25zdGFudGluZSBQIFNhcHVudHpha2lzIDxjc2FwdW50ekBtaXQuZWR1PgotCi0JKiBbd2luZG93cy9kY2UuY10KLQlHZXREQ0V4MzIgLSBUaGUgZGV0ZXJtaW5hdGlvbiBvZiB3aGV0aGVyIHRvIHVzZSB0aGUgREMgY2FjaGUgb3IKLSAJbm90IHNob3VsZCBiZSBpbmRlcGVuZGVudCBvZiBEQ1hfVVNFU1RZTEUuCi0KLVNhdCBPY3QgMjYgMTc6MzE6MDAgMTk5NiAgVGhvbWFzIFNhbmRmb3JkIDx0LmQuZy5zYW5kZm9yZEBwcmRzLWdybi5kZW1vbi5jby51az4KLQotCSogW2ZpbGVzL2RpcmVjdG9yeS5jXQotCUFkZGVkIGVycm5vLmggdG8gI2luY2x1ZGVzCi0KLQkqIFt0b29scy9tYWtlZGVwLmNdCi0JQ2xvc2UgZmlsZXMgb25jZSB0aGV5IGhhdmUgYmVlbiBwcm9jZXNzZWQuCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVR1ZSBPY3QgMjIgMjA6MDk6NTIgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+Ci0KLQkqIFsqL01ha2VmaWxlLmluXSBbdG9vbHMvbWFrZWRlcC5jXQotCU5ldyBwcm9ncmFtIHRvIGdlbmVyYXRlIGRlcGVuZGVuY2llczsgc2hvdWxkIGJlIGZhc3RlciBhbmQgbW9yZQotCXBvcnRhYmxlIHRoYW4gJ2djYyAtTU0nLgotCi0JKiBbKi8qXQotCVJlcGxhY2VkIFdQQVJBTSBhbmQgSERDIGJ5IGV4cGxpY2l0bHktc2l6ZWQgdHlwZXMuCi0KLQkqIFt3aW5kb3dzL2hvb2suY10KLQlGaXhlZCBidWcgaW4gSE9PS19HZXRIb29rMTYgZnVuY3Rpb24uCi0KLVRodSBPY3QgMTcgMDk6MTM6NTAgMTk5NiAgSm9obiBIYXJ2ZXkgPGpvaG5AZGl2aXNpb24uY28udWs+Ci0KLQkqIFtpbmNsdWRlL2RlYnVnLmhdIFtpbmNsdWRlL3N0ZGRlYnVnLmhdCi0gICAgICAgIEFkZGVkIGRlYnVnIG9wdGlvbiBmb3Igd2luMTZkcnYgKC1kZWJ1Z21zZyArd2luMTZkcnYpCi0KLQkqIFtncmFwaGljcy93aW4xNmRydi9pbml0LmNdCi0gICAgICAgIE9ubHkgZW5hYmxlIENyZWF0ZURDIGlmIHByaW50ZXI9b24gc3BlY2lmaWVkIGluIHdpbmUgc2VjdGlvbiBvZgotIAl3aW5lLmNvbmYuCi0gCXByaW50ZnMgY2hhbmdlZCB0byBkcHJpbnRmX3dpbjE2ZHJ2LgotCVNvbWUgdGlkeWluZyB1cC4KLQotCSogW2luY2x1ZGUvZ2RpLmhdIFtncmFwaGljcy94MTFkcnYvY2xpcHBpbmcuY10KLQkgIFtncmFwaGljcy94MTFkcnYvTWFrZWZpbGUuaW5dCi0gICAgICAgIE1vdmVkIFNldERldmljZUNsaXBwaW5nIGludG8gZHJpdmVycy4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotU3VuIE9jdCAxMyAxNTozMjozMiAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KLQotCSogW01ha2UucnVsZXMuaW5dIFsqL01ha2VmaWxlLmluXQotCU1hZGUgaXQgcG9zc2libGUgdG8gY29tcGlsZSBmcm9tIGEgZGlyZWN0b3J5IG90aGVyIHRoYW4gdGhlIHNvdXJjZQotCWRpcmVjdG9yeS4KLQotCSogW2dyYXBoaWNzL21ldGFmaWxlZHJ2L2luaXQuY10gW2luY2x1ZGUvbWV0YWZpbGVkcnYuaF0KLQkgIFtvYmplY3RzL21ldGFmaWxlLmNdIFtvYmplY3RzL2RjLmNdCi0JTmV3IGdyYXBoaWNzIGRyaXZlciBmb3IgbWV0YWZpbGVzLgotCi0JKiBbaWYxNjMyL3RodW5rLmNdCi0JQWRkZWQgdGh1bmtzIGZvciBTZXRXaW5kb3dzSG9vayBhbmQgU2V0RENIb29rLgotCi0JKiBbd2luZG93cy9kaWFsb2cuY10KLQlGaXhlZCBHZXROZXh0RGxnR3JvdXBJdGVtIGFuZCBHZXROZXh0RGxnVGFiSXRlbSB0byBza2lwIGRpc2FibGVkCi0JaXRlbXMuCi0KLQkqIFsqLypdCi0JUmVtb3ZlZCBub24gV2luMzItY2xlYW4gdHlwZXMgSEFORExFLCBIQklUTUFQLCBIQlJVU0gsIEhGT05ULAotIAlISU5TVEFOQ0UsIEhNRU5VLCBIUkdOIGFuZCBIVEFTSy4KLQotV2VkIE9jdCAgOSAxNDo1OTo0NSAxOTk2ICBGcmFucyB2YW4gRG9yc3NlbGFlciAgPGRvcnNzZWxAcnVsaG0xLkxlaWRlblVuaXYubmw+Ci0KLQkqIFtjb250cm9scy9lZGl0LmNdCi0JRml4ZWQgRWRpdFduZFByb2MoKSB0byBmYWxsIGJhY2sgdG8gRGVmV25kUHJvYygpIHdoZW4gdGhlCi0JZWRpdCBzdGF0ZSBzdHJ1Y3R1cmUgaXMgbm90IGF2YWlsYWJsZS4KLQotV2VkIE9jdCAgMiAxNDowMDozNCAxOTk2ICBIdXcgRC4gTS4gRGF2aWVzICA8aC5kYXZpZXMxQHBoeXNpY3Mub3hmb3JkLmFjLnVrPgotCi0JKiBbd2luZG93cy9ub25jbGllbnQuY10gW3dpbmRvd3MvbWRpLmNdCi0JQWRqdXN0V2luZG93UmVjdEV4MTYoKSBzaG91bGQgb25seSB0YWtlIG5vdGljZSBvZiB0aGUgc3R5bGVzCi0gCVdTX0RMR0ZSQU1FLCBXU19CT1JERVIsIFdTX1RISUNLRlJBTUUgYW5kCi0gCVdTX0VYX0RMR01PREFMRlJBTUUuIFRoYW5rcyB0byBBbGV4IEtvcm9ia2EuCi0KLQkqIFtjb250cm9scy9zY3JvbGwuY10KLQlGaXhlZCB0eXBvIGluIFNob3dTY3JvbGxCYXIzMigpLgotCi1TdW4gQXVnIDI1IDIwOjE4OjU2IDE5OTYgIEp1a2thIElpdm9uZW4gPGlpdm9uZW5AY2MuaGVsc2lua2kuZmk+Ci0KLQkqIFtpZjE2MzIvdXNlcjMyLnNwZWNdIFtpZjE2MzIvd2lubW0uc3BlY10KLQlBZGRlZCBTZXRQYXJlbnQgYW5kIHNuZFBsYXlTb3VuZEEuCi0JCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1GcmkgU2VwIDI3IDE0OjE4OjQyIDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgotCi0JKiBbY29udHJvbHMvYnV0dG9uLmNdCi0JRml4ZWQgZm9jdXMgcmVjdGFuZ2xlIHNpemUgYW5kIGNsaXBwaW5nLgotCi0JKiBbY29udHJvbHMvc2Nyb2xsLmNdCi0JQ29udmVydGVkIHRvIFdpbjMyIGFuZCBhZGRlZCBzdXBwb3J0IGZvciBzY3JvbGwgcGFnZS4KLQlDb21wbGV0ZWQgU2V0U2Nyb2xsSW5mbygpIGFuZCBpbXBsZW1lbnRlZCBvdGhlciBXaW4zMiBmdW5jdGlvbnMuCi0KLQkqIFtmaWxlcy9maWxlLmNdCi0JUmVtb3ZlZCBGSUxFX1JlYWQoKSAodXNlIF9scmVhZDMyIGluc3RlYWQpLgotCi0JKiBbb2JqZWN0cy9kY2UuY10gW2luY2x1ZGUvZGNlLmhdCi0JQWxsb2NhdGUgRENFIG9uIHRoZSBXaW4zMiBoZWFwLCBhbmQgdXNlIHBvaW50ZXJzIGluc3RlYWQgb2YKLQloYW5kbGVzLgotCUltcGxlbWVudGVkIFdpbjMyIHZlcnNpb24gb2YgREMgZnVuY3Rpb25zLgotCi0JKiBbd2luZG93cy9wYWludGluZy5jXQotCUF0dGVtcHQgdG8gbWFrZSBDU19QQVJFTlREQyBzdHlsZSB3b3JrIGFnYWluLgotCi1XZWQgU2VwIDI1IDIzOjQwOjUyIDE5OTYgQWxleCBLb3JvYmthIDxhbGV4QHRyYW50b3IucGhhcm0uc3VueXNiLmVkdT4KLQotCSogW3dpbmRvd3MvZGNlLmNdIFt3aW5kb3dzL3dpbnBvcy5jXQotCU92ZXJyaWRlIFNhdmVVbmRlciBhdHRyaWJ1dGUgd2hlbiBwYWludGluZyB0b29rIHBsYWNlCi0JaW4gYSB3aW5kb3cgYmVsb3cuIEZvcmNlIFggdG8gcmFpc2UgYWN0aXZhdGVkIHdpbmRvdyAKLQlpbiBzZWFtbGVzcyBtb2RlLgotCi0JKiBbbWlzYy9jbGlwYm9hcmQuY10gW3dpbmRvd3MvZXZlbnQuY10KLQlUcmFuc2xhdGlvbiBiZXR3ZWVuIERPUyBhbmQgVW5peCB0ZXh0IGZvcm1hdHMgYW5kIHNldmVyYWwKLQlvdGhlciBmaXhlcyBmb3IgdGhlIHN1ZGRlbiBzZWxlY3Rpb24gbG9zcy4KLQotCSogW3dpbmRvd3MvbWVzc2FnZS5jXQotCUFwcGx5ICJmaXJzdCIgYW5kICJsYXN0IiB3aGVuIGNoZWNraW5nIGZvciBXTV9RVUlUIGluIAotICAgICAgICBNU0dfUGVla01lc3NhZ2UoKS4KLQotCSogW3dpbmRvd3Mvd2luLmNdCi0JUmVhcnJhbmdlZCBEZXN0cm95V2luZG93KCkgdG8gZml0ICJXaW5kb3dzIEludGVybmFscyIKLQlkZXNjcmlwdGlvbi4KLQotCSogW3dpbmRvd3Mvd2luLmNdIFt3aW5kb3dzL3dpbnBvcy5jXSBbd2luZG93cy9ub25jbGllbnQuY10KLQlNaXNjLiBmaXhlcyB0byBDQlQgaG9vayBjYWxscy4KLQotCSogW2NvbnRyb2xzL21lbnUuY10gW21pc2MvdXNlci5jXQotCUZpeHVwIHJlc2lkZW50IHBvcHVwIG1lbnUgd2luZG93IHNvIHRoYXQgaXQgZG9lc24ndCBnZXQKLQlkZXN0cm95ZWQgYnkgVVNFUl9BcHBFeGl0KCkuCi0KLQkqIFtsb2FkZXIvbW9kdWxlLmNdIFtsb2FkZXIvdGFzay5jXSBbd2luZG93cy9ldmVudC5jXQotCVByb2Nlc3MgInVuc2FmZSIgWCBldmVudHMgb3V0c2lkZSB0aGUgc2NoZWR1bGVyIHRvIHByZXZlbnQKLQlkZWFkbG9ja3MuCi0KLQkqIFt3aW5kb3dzL21lc3NhZ2UuY10gW3dpbmRvd3MvcXVldWUuY10gW3dpbmRvd3Mvd2lucG9zLmNdCi0JTG90cyBvZiBmaXhlcyBmb3IgYmV0dGVyIFdpbjE2IG11bHRpdGFza2luZy4KLQotV2VkIFNlcCAyNSAyMDozNjozMCAxOTk2ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KLQotCSogW2luY2x1ZGUvd2luZG93cy5oXQotCUFkZGVkIHNvbWUgbWlzc2luZyBIT09LIGRlZmluZXMuCi0KLQkqIFttaXNjL3NoZWxsLmNdW2lmMTYzMi9zaGVsbDMyLnNwZWNdW2luY2x1ZGUvc2hlbGwuaF0KLQlTSEdldEZpbGVJbmZvQSBzdHViIGFkZGVkICh3aW45NSBtcGxheWVyLmV4ZSAvcGxheSBibGEuYXZpKS4KLQotCSogW3dpbjMyL2NvbnNvbGUuY11baW5jbHVkZS93aW5jb24uaF0KLQlHZXRDb25zb2xlU2NyZWVuQnVmZmVySW5mbywgR2V0TGFyZ2VzdENvbnNvbGVXaW5kb3dTaXplIGFkZGVkLgotCi0JKiBbbWlzYy9yZWdpc3RyeS5jXQotCVNvbWUgbnVsbCBwdHIgZml4ZXMuCi0KLQkqIFtsb2FkZXIvcGVfaW1hZ2UuY10KLQlGaXhlZCBleHBvcnRlZCBmdW5jdGlvbiBsb29rdXAuIChtc3ZjcnQyMC5kbGwpCi0JQWRkIGRlYnVnc3ltcyBmb3IgZW50cnlwb2ludCwgZXhwb3J0ZWQgZnVuY3Rpb25zIGFuZCBzZWN0aW9ucy4KLQotCSogW211bHRpbWVkaWEvbW1zeXN0ZW0uY10KLQlNQ0lPcGVuOiBzdXBwb3J0IGZvciBlbGVtZW50IG9wZW5zIChtcGxheWVyLmV4ZSAvcGxheSBibGEuYXZpKS4KLQotCSogW3NldmVyYWxdCi0JQWRkZWQgc2V2ZXJhbCBtaXNzaW5nIHRoaW5ncy9zdHVicy9zaW1wbGUgdGh1bmtzIGZyb20gd2luMzIKLQl0byB3aW4xNiBjb2RlLgotCi1TYXQgU2VwIDIxIDE3OjI3OjQ0IDE5OTYgIE8uRmxlYmJlICA8ZmxlYmJlQHNjaWVuY2UtY29tcHV0aW5nLnVuaS10dWViaW5nZW4uZGU+Ci0KLQkqIFt3aW5kb3dzL3Byb3BlcnR5LmNdCi0JRml4ZWQgZGVidWdnaW5nIG9mIDE2IEJpdCBSZW1vdmVQcm9wKCkuCi0KLQkqIFtkZWJ1Z2dlci9tZW1vcnkuY10KLQlBZGRlZCBERUJVR19jaGVja21hcF9iYWQoKSBmb3IgbGludXguCi0KLVRodSBTZXAgMTkgMjA6NDg6MzEgMTk5NiAgQWxicmVjaHQgS2xlaW5lICA8a2xlaW5lQGFrLnNheC5kZT4KLQotCSogW3dpbmRvd3MvZXZlbnQuY10gW3dpbmRvd3MvaG9vay5jXQotCVVzZSBFbmFibGVIYXJkd2FyZUlucHV0KCkgZm9yIEpvdXJuYWxQbGF5YmFjayBob29rLgotCi0JKiBbY29udHJvbHMvbGlzdGJveC5jXQotCUNoYW5nZWQgaGFuZGxpbmcgb2YgTEJfR0VUSVRFTVJFQ1QgaW4gZW1wdHkgbGlzdGJveGVzLgotCi1UaHUgU2VwIDE5IDEzOjM0OjM1IDE5OTYgIFNsYXZlbiBSZXppYyAgPGVzZXJ0ZUBjcy50dS1iZXJsaW4uZGU+Ci0KLQkqIFttaXNjL21haW4uY10KLQlGaXhlcyB0byBYIHJlc291cmNlcyBoYW5kbGluZy4JCi0KLVdlZCBTZXAgMTggMDA6MzE6MTUgMTk5NiAgSHV3IEQuIE0uIERhdmllcyA8aC5kYXZpZXMxQHBoeXNpY3Mub3hmb3JkLmFjLnVrPgotCi0JKiBbb2JqZWN0cy9tZXRhZmlsZS5jXSBbaW5jbHVkZS9nZGkuaF0gW29iamVjdHMvZGMuY10KLQlJbmRpdmlkdWFsIGhhbmRsZSB0YWJsZSBjcmVhdGVkIGZvciBlYWNoIG1ldGFmaWxlLiBGaXhlZAotIAlHbG9iYWxSZUFsbG9jKCkgYnVnIGluIE1GX0FkZEhhbmRsZURDKCkgKHdhcyBNRl9BZGRIYW5kbGVJbnRlcm5hbCkuCi0KLQkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdIFtvYmplY3RzL2RjLmNdCi0JUmVjdGFuZ2xlKCkgY2hhbmdlZCB0byB3b3JrIGJldHRlciB3aXRoIHdpZGUgcGVucyBhbmQgUFNfTlVMTC4KLQlVc2UgSm9pbk1pdGVyLgotCi0JKiBbd2luZG93cy93aW5wb3MuY10KLQlNYWtlIHRoZSB3aG9sZSAobm9uIFgpIHdpbmRvdyBpbnZhbGlkIG9uIHJlc2l6ZSBpZiBDU19bVkhdUkVEUkFXCi0gCWlzIHNldC4KLQotCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCi0JQWRqdXN0V2luZG93UmVjdEV4KCkgc2hvdWxkIHBlcmZvcm0gY2FsY3VsYXRpb25zIGV2ZW4gaWYgdGhlCi0gCXdpbmRvdyBpcyBtaW5pbWl6ZWQuCi0KLQkqIFt3aW5kb3dzL21kaS5jXQotCUJldHRlciBoYW5kbGluZyBvZiBzeXN0ZW0gYnV0dG9uIHBhaW50aW5nLiBNYXhpbWl6ZWQgd2luZG93cyBjYW4KLSAJY29udGFpbiBzY3JvbGwgYmFycy4gSWNvbnMgbm93IG1heGltaXplIHByb3Blcmx5LgotCi0JKiBbd2luZG93cy9kZWZ3bmQuY10gW3dpbmRvd3Mvbm9uY2xpZW50LmNdIFtjb250cm9scy9tZW51LmNdCi0JSW1wcm92ZWQgZ3JleWluZyBvZiBpdGVtcyBpbiBzeXN0ZW0gbWVudS4gV01fSU5JVE1FTVVQT1BVUCBubwotIAlsb25nZXIgY2F1Z2h0IGluIERlZlduZFByb2MsIERFRldORF9Jbml0U3lzTWVudVBvcHVwIG1vdmVkIHRvCi0gCW1lbnUuYy4KLQotTW9uIFNlcCAxNiAyMTozMDowMCAxOTk2ICBVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50aC1kYXJtc3RhZHQuZGU+Ci0KLQkqIFtzZXZlcmFsIGZpbGVzXQotCUZpeCBtaXNzaW5nIGluY2x1ZGVzIGFuZCB3cm9uZyBwcmludGluZyBhcmd1bWVudHMuCi0KLQkqIFtjb250cm9scy9saXN0Ym94LmNdCi0JRG9uJ3Qgc29ydCBkcml2ZXMgaW4gTGlzdEJveERpcmVjdG9yeSgpLgotCQotU2F0IFNlcCAxNCAwOTowNTo0NyAxOTk2ICBQZXRyaSBUdW9tb2xhIDxwdHVvbW9sYUB4czRhbGwubmw+Ci0KLQkqIFt3aW5kb3dzL2RpYWxvZy5jXQotCUZpeGVkIGhhbmRsaW5nIG9mIFNoaWZ0LVRBQiBpbiBkaWFsb2dzLgotCi1UaHUgU2VwIDEyIDE4OjMxOjAwIDE5OTYgIFRob21hcyBTYW5kZm9yZCA8dC5kLmcuc2FuZGZvcmRAcHJkcy1ncm4uZGVtb24uY28udWs+Ci0KLQkqIFtpZjE2MzIvZ2RpMzIuc3BlY10KLQlBZGRlZCBTZWxlY3RDbGlwUmduIC0gY2FsbCB3aW4xNiB2ZXJzaW9uLgotCi0JKiBbaWYxNjMyL3VzZXIzMi5zcGVjXQotCUFkZGVkIEdldEFzeW5jS2V5U3RhdGUsIEdldE1lbnVJdGVtSUQgYW5kIEdldE1lbnVTdHJpbmdBLgotCi0JKiBbaW5jbHVkZS93aW5jb24uaF0KLQlBZGRlZCBDT09SRCBhbmQgU01BTExfUkVDVCB0eXBlZGVmcywgbW92ZWQgQ09OU09MRV9TQ1JFRU5fQlVGRkVSX0lORk8KLQlvdXQgb2YgI2lmIDAgcHJvdGVjdGVkIHBvcnRpb24gb2YgZmlsZS4KLQotCSogW2xvYWRlci9wZV9pbWFnZS5jXQotCVBFX0luaXRURUIoKSAtIFRpZHkgdXAsIGJ1ZyBmaXggdG8gc3RhY2sgcG9pbnRlciB2YWx1ZSAoQm9ybGFuZAotCXByb2dyYW1zIG5vdyB3b3JrIGJldHRlcikKLQotCSogW3dpbjMyL2NvbnNvbGUuY10KLQlBZGRlZCBzdHViIGZ1bmN0aW9ucyBmb3IgR2V0Q29uc29sZVNjcmVlbkJ1ZmZlckluZm8gYW5kIAotCUdldExhcmdlc3RDb25zb2xlV2luZG93U2l6ZQotCi0JKiBbd2luMzIvZmluZGZpbGUuY10KLQlGaW5kRmlyc3RGaWxlMzJBKCkgLSByZW1vdmVkIGVycm9uZW91cyBzdHJjcHkKLQotCSogW3dpbmRvd3Mva2V5Ym9hcmQuY10KLQlHZXRBc3luY0tleVN0YXRlKCkgLSBidWcgZml4IC0gbm93IHJldHVybnMgdmFsdWUgYXMgcGVyIE1pY3Jvc29mdAotCXNwZWNpZmljYXRpb24uIE5CIC0gSSBzdGlsbCBoYXZlIGRvdWJ0cyBhYm91dCBzb21lIG90aGVyIGZ1bmN0aW9ucwotCWluIHRoaXMgZmlsZS4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotV2VkIFNlcCAxMSAxODowODozMCAxOTk2ICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgotCi0JKiBbd2luZG93cy9ldmVudC5jXQotCU1pbm9yIGltcHJvdmVtZW50cyBpbiBzZXR0aW5nIGV2ZW50IHRpbWUgaW4gTVNHIHN0cnVjdC4KLQotCSogW3dpbmRvd3MvaG9vay5jXQotCVJlbW92ZWQgYW4gdXNlbGVzcyAndW5pbXBsZW1lbnRlZCBob29rJyBtZXNzYWdlLgotCi0JKiBbd2luZG93cy93aW4uY10KLQlBZGRlZCBhIFdIX0NCVCBob29rIGNhbGwgZHVyaW5nIHdpbmRvdyBjcmVhdGlvbjogZ29vZCBmb3IgQ1RMM0QuRExMCi0KLVdlZCBTZXAgMTEgMTE6MTk6NTYgMTk5NiAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+Ci0JKiBbbG9hZGVyL3BlX2ltYWdlLmNdCi0JRml4ZWQgaW1wb3J0cyB3aXRoIG5vIG5hbWUvb3JkaW5hbCBsaXN0IChNRkMzMC5ETEwpLgotCUFkZGVkIGJvcmxhbmQgc3R5bGUgLSBvcmRpbmFsIGltcG9ydCAod3NvY2szMi5kbGwpLgotCi0JKiBbZmlsZXMvZmlsZS5jXSBbd2luMzIvZmlsZS5jXSBbaWYxNjMyL2tlcm5lbC5zcGVjXQotCSAgW2lmMTYzMi9rZXJuZWwzMi5zcGVjXSBbaW5jbHVkZS93aW5kb3dzLmhdCi0JV2luMzIgYW5kIFdpbjE2IGNvZGUgdXNlIHRoZSBzYW1lIGZpbGVoYW5kbGVzL0hGSUxFcy4KLQlBZGRlZCBTZXRFbmRPZkZpbGUsIE1vdmVGaWxlKiwgZGl2ZXJzZSAqVyBmdW5jdGlvbnMuCi0KLQkqIFtsb2FkZXIvcGVfaW1hZ2UuY10KLQlGaXhlZCBhcmd1bWVudCAyIHRvIERsbEVudHJ5LgotCi0JKiBbbWlzYy9jb21tLmNdCi0JQWRhcHQgdG8gZmlsZWhhbmRsaW5nIGNoYW5nZXMsIHdpbjMyIGNvZGUgc3RpbGwgYnJva2VuLgotCi0JKiBbbWlzYy9yZWdpc3RyeS5jXQotCVVzZSBXaW5lIGZpbGVoYW5kbGluZy4KLQlTdGFydHVwUmVnaXN0cnkgdG8gYWRkIHN0YXJ0dXAtZGV0ZWN0ZWQgcmVnaXN0cnkgZW50cmllcy4KLQotCSogW21pc2NlbXUvZHBtaS5jXSBbbWlzY2VtdS9pbnQyMS5jXQotCVNvbWUgbWlzc2luZyBpbnRlcnJ1cHQtZnVuY3Rpb25zIGFkZGVkLgotCi0JKiBbaWYxNjMyL2dkaTMyLnNwZWNdW2lmMTYzMi91c2VyMzIuc3BlY10KLQlTb21lIHRodW5rcyB0byAxNiBiaXQgZXF1aXZhbGVudCBmdW5jdGlvbnMgYWRkZWQuCi0KLVNhdCBTZXAgIDcgMTE6MzY6NTcgRURUIDE5OTYgIE1hdHRoZXcgR2hpbyA8Z2hpb0BuZXRjb20uY29tPgotCi0JKiBbbWlzYy93aW5zb2NrZXQuY10KLQlSZXdyb3RlIFdJTlNPQ0tfc2VsZWN0KCkgYW5kIFdTQUZESXNTZXQoKSB0byBwcm9wZXJseSBjb252ZXJ0Ci0JV2luZG93cyBmZF9zZXQgc3RydWN0cy4KLQotCSogW2lmMTYzMi93aW5zb2NrLnNwZWNdCi0JQ29ycmVjdGVkIGFyZ3VtZW50cyB0byBzZWxlY3QoKS4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotU3VuIFNlcCAgMSAxOToyMjo0NiAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KLQotCSogW21pc2MvY29tbWRsZy5jXSBbaWYxNjMyL2NvbW1kbGcuc3BlY10KLQlGaXhlZCBzb21lIFNFR1BUUiBwcm9ibGVtcy4KLQotCSogW3dpbmRvd3Mvd2lucHJvYy5jXQotCUFkZGVkIG1lc3NhZ2UgdHJhbnNsYXRpb24gZm9yIFdNX0NPTVBBUkVJVEVNLCBXTV9ERUxFVEVJVEVNCi0JYW5kIFdNX01FQVNVUkVJVEVNCi0JRml4ZWQgMTYtdG8tMzIgdHJhbnNsYXRpb24gZm9yIFdNX0hTQ1JPTEwvV01fVlNDUk9MTC4KLQotRnJpIEF1ZyAzMCAxMzozOTowMCAxOTk2ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KLQkqIFtmaWxlcy9kcml2ZS5jXQotCUdldERyaXZlVHlwZTE2IHNob3VsZCByZXBvcnQgQ0RST01zIGFzIERSSVZFX1JFTU9URSAoQUNNRSBzZXR1cCkuCi0KLQkqIFttdWx0aW1lZGlhL2F1ZGlvLmNdCi0JVGhlIG1pbmltdW0gYXVkaW9idWZmZXIgc2l6ZSBzaHJ1bmsgc29tZXdoZXJlIGluIGxpbnV4IDEuMy54eAotCWJlbG93IDQwOTYgYnl0ZXMuCi0KLQkqIFttdWx0aW1lZGlhL21jaXN0cmluZy5jXQotCVNlZ3B0ciBzdHJpbmcgaGFuZGxpbmcgZml4ZWQgJiBlbmhhbmNlZC4KLQotCSogW2lmMTYzMi9jcnRkbGwuc3BlY11bbWlzYy9jcnRkbGwuY10KLQltYWxsb2MsZnJlZSxfc3RydXByLF9zdHJpY21wLF9zdHJjbXBpIGFkZGVkLgotCi0JKiBbaWYxNjMyL3dzb2NrMzIuc3BlY11bbWlzYy93aW5zb2NrLmNdCi0JTW9yZSBkaXJlY3QgdGh1bmtzIGludG8gdW5peCBsaWJjIGFuZCBXc0NvbnRyb2wtc3R1YiBhZGRlZC4KLQotVGh1IEF1ZyAyOSAyMzo1NDoyNSAxOTk2ICBIdXcgRC4gTS4gRGF2aWVzIDxoLmRhdmllczFAcGh5c2ljcy5veGZvcmQuYWMudWs+Ci0KLQkqIFtvYmplY3RzL21ldGFmaWxlLmNdCi0JQnVnIGZpeGVzIHRvIGJvdGggcmVjb3JkaW5nIGFuZCBwbGF5YmFjayBvZiBFeHRUZXh0T3V0KCkuCi0KLVR1ZSBBdWcgMjcgMTU6NDM6MjEgMTk5NiAgU2xhdmVuIFJlemljICA8ZXNlcnRlQGNzLnR1LWJlcmxpbi5kZT4KLQotCSogW211bHRpbWVkaWEvYXVkaW8uY10gW211bHRpbWVkaWEvbWNpYW5pbS5jXQotCSAgW211bHRpbWVkaWEvbWNpY2RhLmNdIFttdWx0aW1lZGlhL21pZGkuY10KLQlNYWRlIGNkYXVkaW8sIGF1ZGlvIGFuZCBtaWRpIHdvcmsgZm9yIEZyZWVCU0QuCi0KLVN1biBBdWcgMjUgMjA6MTg6NTYgMTk5NiAgSnVra2EgSWl2b25lbiA8aWl2b25lbkBjYy5oZWxzaW5raS5maT4KLQotCSogW21pc2MvY3J0ZGxsLmNdIFtpZjE2MzIvY3J0ZGxsLnNwZWNdCi0JQWRkZWQgYSBsb3Qgb2YgZnVuY3Rpb25zLgotCi0JKiBbbWlzYy9vbGUybmxzLmNdCi0JQWRkZWQgSUQgdmFsdWVzIGZvciBhbGwgbGFuZ3VhZ2VzIGluIEdldFVzZXJEZWZhdWx0TENJRCgpLgotCQotRnJpIEF1ZyAyNCAyMTowMjoyOCAxOTk2ICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgotCi0JKiBbd2luZG93cy9ldmVudC5jXSBbd2luZG93cy9tZXNzYWdlLmNdCi0JRmlyc3QgYXR0ZW1wdCBhdCBob29rIFdIX0pPVVJOQUxQTEFZQkFDSy4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotU2F0IEF1ZyAyNCAxMzo1NzowMSAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KLQotCSogW2NvbnRyb2xzL3Njcm9sbC5jXQotCVJlbmFtZWQgU0NST0xMSU5GTyB0byBTQ1JPTExCQVJfSU5GTyB0byBhdm9pZCBjb25mbGljdCB3aXRoIFdpbjMyLgotCi0JKiBbZ3JhcGhpY3MvZHJpdmVyLmNdIFtpbmNsdWRlL3gxMWRydi5oXQotCU5ldyBmaWxlcyBmb3IgZ3JhcGhpY3MgZHJpdmVyIGhhbmRsaW5nLgotCi0JKiBbaWYxNjMyL3JlbGF5LmNdIFtpbmNsdWRlL3JlZ2lzdGVycy5oXSBbdG9vbHMvYnVpbGQuY10KLQlJbXBsZW1lbnRlZCBXaW4zMiByZWdpc3RlciBmdW5jdGlvbnMuIE5vdCByZWFsbHkgdGVzdGVkIHlldC4KLQotCSogW2luY2x1ZGUvZ2RpLmhdCi0JQWRkZWQgYSBsb3Qgb2YgZnVuY3Rpb25zIHRvIHRoZSBEQyBmdW5jIHRhYmxlLgotCi0JKiBbbG9hZGVyL3BlX2ltYWdlLmNdCi0JSW5pdGlhbGlzZSAlZnMgYmVmb3JlIGNhbGxpbmcgb3V0IHRvIDMyLWJpdCBjb2RlLgotCi0JKiBbd2luZG93cy9ob29rLmNdCi0JRml4ZWQgYnVnIGluIEhPT0tfR2V0SG9vaygpLgotCi0JKiBbd2luZG93cy93aW4uY10KLQlGaXhlZCBGaW5kV2luZG93IHRvIHJldHVybiBhbiBlcnJvciBpZiB0aGUgY2xhc3MgbmFtZSBkb2Vzbid0IGV4aXN0LgotCi1XZWQgQXVnIDIxIDE1OjE1OjUzIDE5OTYgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgotCi0JKiBbaWYxNjMyL01ha2VmaWxlLmluXSBbbWlzYy9tcHIuY10gW2lmMTYzMi9tcHIuc3BlY10KLQltcHIuZGxsIHNwZWNzIGFkZGVkLgotCi0JKiBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdIFt3aW4zMi9uZXdmbnMuY10gW21lbW9yeS9nbG9iYWwuY10KLQlRdWVyeVBlcmZvcm1hbmNlQ291bnRlcigpLCBHbG9iYWxNZW1vcnlTdGF0dXMoKSBhZGRlZC4KLQotCSogW2lmMTYzMi91c2VyMzIuc3BlY10gW3dpbjMyL2Vycm9yLmNdCi0JU2V0TGFzdEVycm9yRXgoKSBhZGRlZC4KLQotCSogW21pc2MvY29tbWRsZy5jXQotCWxwc3RyRmlsdGVyIG1pZ2h0IGJlIE5VTEwgaW4gRklMRV9XTUluaXREaWFsb2cgKE5TIDMuMCBzZXR1cCkuCi0KLQkqIFttaXNjL3JlZ2lzdHJ5LmNdCi0JU29tZSBtaXNzaW5nIE5VTEwgcHRyIGNoZWNrcyBhZGRlZCwgbWlzYyBjbGVhbiB1cC4KLQotVHVlIEF1ZyAyMCAyMTowMDowMCAxOTk2IEFsZXggS29yb2JrYSAgPGFsZXhAcGhhcm0uc3VueXNiLmVkdT4KLQotCSogW2NvbnRyb2xzL21lbnUuY10KLQlBZGp1c3QgcG9wdXAgbWVudSBjb29yZGluYXRlcyBzbyB0aGF0IGl0IGFsd2F5cyBzdGF5cyB3aXRoaW4gCi0JdGhlIGRlc2t0b3AuCi0KLQkqIFttaXNjL21haW4uY10KLQlGaXhlZCBHZXRFbnZpcm9ubWVudCgpIHJldHVybiB2YWx1ZSBmb3IgbHBFbnYgPT0gTlVMTCBjYXNlLgotCi1Nb24gQXVnIDE5IDIyOjQ4OjM2IDE5OTYgIEp1a2thIElpdm9uZW4gPGlpdm9uZW5AY2MuaGVsc2lua2kuZmk+Ci0KLQkqIFttaXNjL2NydGRsbC5jXSBbaWYxNjMyL2NydGRsbC5zcGVjXQotCUFkZGVkIHNvbWUgaXMqIGZ1bmN0aW9ucywgc3RybGVuIGFuZCB0b2xvd2VyLgotCQotTW9uIEF1ZyAxOSAxMzozMzoxMyAxOTk2ICBTdGVwaGVuIFNpbW1vbnMgIDxzc2ltbW9uc0B2aXRzZW1pLmNvbT4KLQotCSogW3Rvb2xzL3dpbmVjb25mXQotCU5ldyBwZXJsIHNjcmlwdCB0byBnZW5lcmF0ZSB0aGUgd2luZS5jb25mIGZpbGUuCi0KLUZyaSBBdWcgMTYgMTU6MzE6NDQgMTk5NiAgIEpvaG4gSGFydmV5IDxqb2huQGRpdmlzaW9uLmNvLnVrPgotCi0JKiBbaWYxNjMyL2dkaS5zcGVjXQotICAgICAgICBMb3RzIG9mIHByaW50ZXIgZnVuY3Rpb25zLgotCQotCSogW2luY2x1ZGUvY2FsbGJhY2suaF0KLSAgICAgICAgTmV3IGZ1bmN0aW9ucyBmb3IgcHJpbnRlciBkcml2ZXIgc3VwcG9ydC4KLQotCSogW2luY2x1ZGUvZ2RpLmhdCi0gICAgICAgIE5ldy9jaGFuZ2VkIHN0cnVjdHVyZXMgdG8gc3VwcG9ydCBwcmludGVyIGRyaXZlci4KLQotCSogW21pc2MvZXNjYXBlLmNdCi0gICAgICAgIE5ldyB2ZXJzaW9uIHRoYXQgdXNlcyBmdW5jdGlvbiB0YWJsZSBpbiBEQyBzdHJ1Y3R1cmUuCi0KLQkqIFtvYmplY3RzL2RjLmNdCi0gICAgICAgIENyZWF0ZURDIGNvcGVzIHdpdGggdGhpbmdzIG90aGVyIHRoYW4gRGlzcGxheS4KLQlYIGNvZGUgZm9yIENyZWF0ZURDIG1vdmVkIHRvIGdyYXBoaWNzL3gxMWRydiBkaXJlY3RvcnkuCi0JQ3JlYXRlQ29tcGF0aWJsZURDIGNvcGllcyBmdW5jIHRhYmxlIGZyb20gb3JpZ2luYWwgREMuCi0KLQkqIFtvYmplY3RzL2ZvbnQuY10KLSAgICAgICAgR2V0VGV4dEV4dGVudFBvaW50MzJBLEdldFRleHRNZXRyaWNzMTYgdXNlIGZ1bmN0aW9uIHRhYmxlIGluCi0gICAgICAgIERDIGFuZCBjb2RlIG1vdmVkIHRvIGRyaXZlcnMgZGlyZWN0b3J5LgotCi0JKiBbbWlzYy9wcmludGRydi5jXSBbZ3JhcGhpY3MvKi8qXSBbaW5jbHVkZS93aW4xNmRydi5oXQotICAgICAgICBOZXcgZmlsZXMgZm9yIHByaW50ZXIgc3VwcG9ydC4gCi0KLUZyaSBBdWcgMTYgMTI6MzM6MDAgMTk5NiAgQnJ1Y2UgTWlsbmVyIDxCcnVjZS5NaWxuZXJAZ2VuZXRpY3MudXRhaC5lZHU+Ci0KLQkqIFtjb250cm9scy9zY3JvbGwuY10KLQlBZGRlZCBTZXRTY3JvbGxJbmZvMzIgYW5kIEdldFNjcm9sbEluZm8zMi4gIFRoZXNlIGp1c3QgY2FsbCBleGlzdGluZwotCWNvZGUuIFRoZXJlIGFyZSBhIGZldyBvcHRpb25zIGluIHdoaWNoIEknbSBwcm9iYWJseSB0aGUgd3JvbmcgcGVyc29uCi0JZm9yIHRoZSBqb2IgKHBhZ2Ugc2l6ZSBhbmQgZGlzYWJsZSBiYXIpLiBUaGVyZSBhcmUgY29tbWVudHMgaW4gdGhlCi0JY29kZSBhcyB0byB3aGF0IHRoZXkgc2hvdWxkIGRvLgotCi0JKiBbb2JqZWN0cy9nZGlvYmouY10gW29iamVjdHMvZm9udC5jXSBbaW5jbHVkZS9mb250LmhdCi0JQWRkZWQgMzIgYml0IHZlcnNpb24gb2YgRk9OVF9HZXRPYmplY3QuCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVN1biBBdWcgMTggMTI6MTc6NTQgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+Ci0KLQkqIFtmaWxlcy9kcml2ZS5jXQotCUFkZGVkICdGaWxlc3lzdGVtJyBvcHRpb24gaW4gZHJpdmVzIGNvbmZpZ3VyYXRpb24uCi0KLQkqIFtmaWxlcy9kb3NfZnMuY10gCi0JQWRkZWQgaGFuZGxpbmcgb2YgY2FzZS1pbnNlbnNpdGl2ZSBmaWxlc3lzdGVtcy4KLQotCSogW21lbW9yeS9zZWxlY3Rvci5jXSBbaW5jbHVkZS9zdGFja2ZyYW1lLmhdCi0JUmVtb3ZlZCBNQUtFX1NFR1BUUi4KLQotCSogW21pc2MvY29tbWRsZy5jXSBbbXVsdGltZWRpYS9tY2lzdHJpbmcuY10KLQlSZXBsYWNlZCBNQUtFX1NFR1BUUiBieSB0aGUgU0VHUFRSXyogbWFjcm9zLgotCi0JKiBbb2JqZWN0cy9iaXRibHQuY10gW3dpbmRvd3MvZ3JhcGhpY3MuY10KLQlVc2UgYW4gaW50ZXJtZWRpYXJ5IHBpeG1hcCB0byBhdm9pZCBzb21lIEJhZE1hdGNoIGVycm9ycyBvbgotCVhHZXRJbWFnZSgpLgotCi1TdW4gQXVnIDE4IDA5OjIxOjI3IDE5OTYgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+Ci0KLQkqIFt3aW5kb3dzL21lc3NhZ2UuY10KLQlBZGRlZCBoYW5kbGluZyBvZiBXTV9OQy4uLm1vdXNlIG1lc3NhZ2VzIGluIEpPVVJOQUxSRUNPUkQgaG9vay4KLQotCSogW21pc2MvdmVyLmNdCi0JRml4ZWQgYSBiYWQgc3RyaW5nIHJlc3VsdCBpbiBWZXJRdWVyeVZhbHVlWzE2fDMyQXwzMlddLgotCi1GcmkgQXVnIDE2IDE5OjU1OjA0IDE5OTYgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgotCi0JKiBbaWYxNjMyL2NydGRsbC5zcGVjXSBbbWlzYy9jcnRkbGwuY10KLQlNb3JlIGFkZGl0aW9ucyB0byBnZXQgd2luOTUgcHJvZ3JhbXMgZnVydGhlciBkb3duIHRoZSByb2FkLgotCi0JKiBbaWYxNjMyL2tlcm5lbC5zcGVjXSBbbG9hZGVyL21vZHVsZS5jXQotCUdldE1vZHVsZU5hbWUoKSBhZGRlZC4KLQlMb2FkTW9kdWxlKCk6IHBhcmFtcy0+c2hvd0NtZCBjYW4gYmUgTlVMTC4KLQotCSogW2lmMTYzMi9rZXJuZWwzMi5zcGVjXSBbaWYxNjMyL3RodW5rLmNdCi0JVGh1bmtDb25uZWN0MzIoKSBzdHViIGFkZGVkLgotCi0JKiBbbG9hZGVyL3Jlc291cmNlLmNdCi0JRW50cmllcyBpbmNsdWRlIGxhc3RlbnRyeS4KLQotCSogW21pc2Mvc2hlbGwuY10gW2ZpbGVzL2ZpbGUuY10KLQlNYWRlIHByb2dtYW4gd29yayBhZ2Fpbi4KLQotRnJpIEF1ZyAxNiAwOTowMDowMCAxOTk2ICBBbGV4IEtvcm9ia2EgPGFsZXhAcGhtMzAucGhhcm0uc3VueXNiLmVkdT4KLQkKLQkqIFt3aW5kb3dzL2RlZnduZC5jXSBbd2luZG93cy93aW5wb3MuY10gW3dpbmRvd3MvcGFpbnRpbmcuY10KLQlJY29uIHBhaW50aW5nIGZpeGVzLgotCi0JKiBbd2luZG93cy93aW5wb3MuY10gW3dpbmRvd3MvcGFpbnRpbmcuY10KLQlFbmZvcmNlIGFuZCBmb2xsb3cgaHJnblVwZGF0ZSBtb3JlIGNsb3NlbHkgdG8gY3V0IGRvd24gb24KLQlyZWR1bmRhbnQgUmVkcmF3V2luZG93KCkgY2FsbHMuCi0KLQkqIFt3aW5kb3dzL2V2ZW50LmNdCi0JUHJvY2VzcyBDb25maWd1cmVOb3RpZnkgb25seSBmb3IgbWFuYWdlZCB3aW5kb3dzLgotCi0JKiBbd2luZG93cy93aW5wb3MuY10KLQlEbyBub3QgcmVkcmF3IHBhcmVudCBpZiB0aGUgd2luZG93IHdhcyBoaWRkZW4gYmVmb3JlIFNldFdpbmRvd1BvcygpLgotCi0JKiBbd2luZG93cy9ub25jbGllbnQuY10KLQlPbWl0IHNvbWUgbm9uY2xpZW50IGRlY29yYXRpb24gcGFpbnRpbmcgZm9yIG1hbmFnZWQgd2luZG93cy4KLQotCSogW2NvbnRyb2xzL21lbnUuY10gW3dpbmRvd3MvbWRpLmNdIFt3aW5kb3dzL25vbmNsaWVudC5jXQotCUltcGxlbWVudGVkIFdNX05FWFRNRU5VLgotCi0JKiBbY29udHJvbHMvbGlzdGJveC5jXQotCU11bHRpY29sdW1uIGxpc3Rib3hlcyByZXR1cm4gV1ZSX1ZSRURSQVcgb24gV01fTkNDQUxDU0laRS4KLQotCSogW21pc2Mvc2hlbGwuY10KLQlBZGRlZCAuSUNPIGZpbGUgaGFuZGxpbmcgdG8gRXh0cmFjdEljb24oKS4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotU3VuIEF1ZyAxMSAxMzowMDoyMCAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KLQotCSogW2NvbmZpZ3VyZS5pbl0gW2luY2x1ZGUvYWNjb25maWcuaF0gW3Rvb2xzL2J1aWxkLmNdCi0JQWRkZWQgY2hlY2sgZm9yIHVuZGVyc2NvcmUgb24gZXh0ZXJuYWwgc3ltYm9scy4KLQotCSogW21lbW9yeS9zZWxlY3Rvci5jXSBbbWVtb3J5L2dsb2JhbC5jXQotCUZpeGVkIEZyZWVTZWxlY3RvcigpIHRvIGZyZWUgb25seSBvbmUgc2VsZWN0b3IuCi0JQWRkZWQgU0VMRUNUT1JfRnJlZUJsb2NrKCkgdG8gZnJlZSBhbiBhcnJheSBvZiBzZWxlY3RvcnMuCi0KLQkqIFtvYmplY3RzL2NvbG9yLmNdCi0JRml4ZWQgYSBidWcgaW4gQ09MT1JfVG9Mb2dpY2FsKCkgdGhhdCBjYXVzZWQgR2V0UGl4ZWwoKSB0byBmYWlsIG9uCi0JaGktY29sb3IgZGlzcGxheXMuCi0KLQkqIFt0b29scy9idWlsZC5jXSBbaWYxNjMyL2NydGRsbC5zcGVjXQotCUFkZGVkICdleHRlcm4nIHR5cGUsIHVzZWQgZm9yIGV4dGVybmFsIHZhcmlhYmxlcyBvciBmdW5jdGlvbnMuCi0KLQkqIFt3aW5kb3dzL3dpbnBvcy5jXQotCUFsbG93IGRlLWFjdGl2YXRpbmcgYSB3aW5kb3cgaW4gV0lOUE9TX0NoYW5nZUFjdGl2ZVdpbmRvdygpLgotCi0JKiBbd2luZG93cy93aW5wcm9jLmNdCi0JQWRkZWQgMzItdG8tMTYgdHJhbnNsYXRpb24gZm9yIGJ1dHRvbiBtZXNzYWdlcy4KLQlGaXhlZCBXSU5QUk9DX0dldFB0cigpIHRvIGF2b2lkIGNyYXNoZXMgb24gMzItYml0IHByb2NlZHVyZXMgdGhhdAotCWhhcHBlbiB0byBiZSB2YWxpZCBTRUdQVFJzLgotCi1TYXQgQXVnIDEwIDE4OjIyOjI1IDE5OTYgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+Ci0KLQkqIFt3aW5kb3dzL21lc3NhZ2UuY10KLQlSZW1vdmVkIGEgRklYTUUgaW4gTVNHX1BlZWtIYXJkd2FyZU1zZygpOiBwcm9kdWNlcyBjb3JyZWN0IAotCWRhdGEgZm9yIHRoZSBKT1VSTkFMUkVDT1JELWhvb2sgKHVzaW5nIEVWRU5UTVNHMTYgc3RydWN0dXJlKS4KLQotCSogW2lmMTYzMi9nZGkuc3BlY10gW2luY2x1ZGUvd2luZG93cy5oXSBbb2JqZWN0cy9tZXRhZmlsZS5jXQotCUludHJvZHVjZWQgdW5kb2N1bWVudGVkIEFQSSBmdW5jdGlvbiBJc1ZhbGlkTWV0YUZpbGUoKSwgcGx1cyBhCi0gCW1pbm9yIGZpeCBpbiBsYXN0IHBhdGNoIG9mIENvcHlNZXRhRmlsZSgpLgotCi0JKiBbb2JqZWN0cy9nZGlvYmouY10KLQlSZW1vdmVkIGEgRklYTUUgaW4gSXNHRElPYmplY3QoKTogYWRkZWQgbWFnaWMgd29yZCBjaGVjay4KLQotU3VuIEF1ZyAxMCAxODoxMDoxMCAxOTk2ICBCcnVjZSBNaWxuZXIgPEJydWNlLk1pbG5lckBnZW5ldGljcy51dGFoLmVkdT4KLQotCSogW2NvbnRyb2xzL3N0YXR1c3dpbi5jXQotCUZpcnN0IHBhc3MgYXQgaW1wbGVtZW50aW5nIHRoZSBTdGF0dXNXaW5kb3cgY2xhc3MuCi0KLQkqIFtpbmNsdWRlL2NvbW1jdHJsLmhdCi0JSGVhZGVyIGZpbGUgZm9yIGNvbW1vbiBjb250cm9scy4KLQotCSogW2NvbnRyb2xzL3dpZGdldHMuY10KLQlBZGRlZCBJbml0Q29tbW9uQ29udHJvbHMoKS4KLQotCSogW2lmMTYzMi9jb21jdGwzMi5zcGVjXQotCUFkZCBEcmF3U3RhdHVzVGV4dEEsIENyZWF0ZVN0YXR1c1dpbmRvd0EsIEluaXRDb21tb25Db250cm9scy4KLQotCSogW3dpbjMyL2ZpbmRmaWxlLmNdIFtpZjE2MzIva2VybmVsMzIuc3BlY10KLQlBZGQgRmluZE5leHRGaWxlMzJBLCBGaW5kQ2xvc2UuCi0JTW9kaWZpZWQgRmluZEZpcnN0RmlsZTMyQSBzbyBpdCB3b3JrcyB3aXRoIEZpbmROZXh0RmlsZTMyQS4KLQotCSogW2luY2x1ZGUvd2luYmFzZS5oXQotCUZpeGVkIFdJTjMyX0ZJTkRfREFUQSBzdHJ1Y3R1cmUgbWVtYmVyIG5hbWVzLgotCi1TYXQgQXVnIDEwIDA5OjAwOjAwIDE5OTYgIEFsZXggS29yb2JrYSA8YWxleEBwaG0zMC5waGFybS5zdW55c2IuZWR1PgotCi0JKiBbd2luZG93cy9zY3JvbGwuY10KLQlDaGFuZ2VkIHNjcm9sbGluZyByb3V0aW5lcyB0byBiZW5lZml0IGZyb20gRENFIGNvZGUgdXBkYXRlLgotCi1UaHUgQXVnICA4IDE4OjA1OjA5IDE5OTYgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgotCi0JKiBbZmlsZXMvZmlsZS5jXQotCVNlYXJjaFBhdGgqIGNvdWxkIGdldCBOVUxMIGZvciBsYXN0cGFydCBhcmd1bWVudC4KLQotCSogW2lmMTYzMi9idWlsZC1zcGVjLnR4dF0gW2RvY3VtZW50YXRpb24vZGVidWdnaW5nXQotCVZhcmFyZ3MgZG9jdW1lbnRhdGlvbiBhZGRlZCwgZGVidWdnaW5nIGhpbnRzIHVwZGF0ZWQuCi0KLQkqIFtpZjE2MzIvY3J0ZGxsLnNwZWNdW21pc2MvY3J0ZGxsLmNdW21pc2MvTWFrZWZpbGUuaW5dCi0JU3RhcnRlZCB0byBpbXBsZW1lbnQgQ1JURExMLgotCi0JKiBbaWYxNjMyL3dzb2NrMzIuc3BlY10KLQlTb21lIHRodW5rcyB0byBzdGFuZGFyZCBsaWJjIGZ1bmN0aW9ucyAoc3RydWN0dXJlcyBoYXZlIHRoZSBzYW1lCi0gCWVsZW1lbnRzLCBidXQgcGVyaGFwcyB3cm9uZyBvZmZzZXQgZHVlIHRvIHBhY2tpbmcpLgotCi0JKiBbaW5jbHVkZS9rZXJuZWwzMi5oXVtpbmNsdWRlL3dpbmRvd3MuaF1bd2luMzIvKi5jXVtsb2FkZXIvbWFpbi5jXQotCU1lcmdlZCBrZXJuZWwzMi5oIGludG8gd2luZG93cy5oLgotCi0JKiBbbWlzYy9sc3RyLmNdCi0JRW5oYW5jZWQgRm9ybWF0TWVzc2FnZSgpLgotCi0JKiBbbWlzYy9tYWluLmNdIFtpZjE2MzIva2VybmVsLnNwZWNdIFtpbmNsdWRlL3dpbmRvd3MuaF0KLQlHZXRWZXJzaW9uKCkgdXBkYXRlZCB0byBuZXcgbmFtaW5nIHN0YW5kYXJkLgotCUNoYW5nZWQgbGFuZ3VhZ2UgaGFuZGxpbmcgdG8gc3VwcG9ydCBsYW5ndWFnZSBpZHMuCi0KLQkqIFttaXNjL3NoZWxsLmNdCi0JRW5oYW5jZWQgRmluZEV4ZWN1dGFibGUsIHNvIGl0IGZpbmRzIGZpbGVzIGluIHRoZSBzZWFyY2ggcGF0aCB0b28uCi0KLQkqIFt3aW4zMi9lbnZpcm9ubWVudC5jXQotCUdldENvbW1hbmRMaW5lKiB1cGRhdGVkLgotCi0JKiBbbG9hZGVyL3Jlc291cmNlLmNdIFtsb2FkZXIvcGVfcmVzb3VyY2UuY10KLQlGaW5kUmVzb3VyY2VFeDMyKiBhZGRlZC4KLQlMb2FkaW5nIG9mIG1lc3NhZ2V0YWJsZXMgYWRkZWQuCi0JTGFuZ3VhZ2UgaGFuZGxpbmcgbm93IHVzZXMgV2luZSBkZWZhdWx0IGxhbmd1YWdlIGlkLgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1TdW4gQXVnICA0IDE4OjE4OjQ4IDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgotCi0JKiBbY29udHJvbHMvc2Nyb2xsLmNdCi0JQXR0ZW1wdGVkIHRvIGltcGxlbWVudCB1bmRvY3VtZW50ZWQgc2Nyb2xsLWJhciBtZXNzYWdlcy4KLQotCSogW3Rvb2xzL2J1aWxkLmNdIFtpbmNsdWRlL2NhbGxiYWNrLmhdIFt3aW5kb3dzL3dpbnByb2MuY10KLQlDYWxsVG8xNl8qIGZ1bmN0aW9ucyBub3cgZ2V0IERTIGZyb20gdGhlIHByZXZpb3VzIDE2LWJpdCBzdGFja2ZyYW1lLgotCi0JKiBbaWYxNjMyL3RodW5rLmNdIFtpbmNsdWRlL2NhbGxiYWNrLmhdCi0JQWRkZWQgdGh1bmtzIHRvIGltcGxlbWVudCBjYWxsYmFja3MgZm9yIHRoZSBlbXVsYXRvci4gTm93IGFsbCB0aGUKLQlFbnVtKiBmdW5jdGlvbnMgYWx3YXlzIHRha2UgYSByZWFsIGZ1bmN0aW9uIHBvaW50ZXIgZXZlbiBpbiB0aGUKLQllbXVsYXRvci4KLQkKLQkqIFtsb2FkZXIvYnVpbHRpbi5jXQotCVJlbW92ZWQgYmluYXJ5IHNlYXJjaCBpbiBCVUlMVElOX0dldEVudHJ5UG9pbnQzMigpLCBhcyBpdCBkaWRuJ3QKLSAJd29yayB3aXRoIE5VTEwgZW50cnkgcG9pbnRzLiBVc2luZyBsaW5lYXIgc2VhcmNoIG5vdy4KLQotCSogW2xvYWRlci9tb2R1bGUuY10KLQlJbXBsZW1lbnRlZCBJc1NoYXJlZFNlbGVjdG9yKCkuCi0KLQkqIFtsb2FkZXIvdGFzay5jXQotCUNoYW5nZWQgU3dpdGNoU3RhY2tUby9CYWNrIHRvIHVzZSB0aGUgaW5zdGFuY2UgZGF0YSB0byBzdG9yZSB0aGUKLQlwcmV2aW91cyBzdGFjayBpbnN0ZWFkIG9mIHRoZSBUREIuIEFsc28gY29weSB0aGUgbG9jYWwgdmFyaWFibGVzCi0Jb250byB0aGUgbmV3IHN0YWNrLgotCUFkZGVkIEdldEV4ZVZlcnNpb24oKSBhbmQgU2V0VGFja1NpZ25hbFByb2MoKS4KLQlJbXBsZW1lbnRlZCBTZXRTaWdIYW5kbGVyKCkuCi0KLVNhdCBBdWcgIDMgMjI6MTk6MDAgMTk5NiAgVGhvbWFzIFNhbmRmb3JkIDx0LmQuZy5zYW5kZm9yZEBwcmRzLWdybi5kZW1vbi5jby51az4KLQotCSogW2NvbnRyb2xzL21lbnUuY10KLQkiRml4ZWQiIHByb2JsZW0gaW4gZGVsZXRpbmcgbWVudXMgd2hlcmUgd2luMzIgY291bGQgZ2V0IGludG8gYW4KLQllbmRsZXNzIGxvb3Agd2hlbiBpdCBjcmFzaGVkLiBJIHRoaW5rIEkndmUgZml4ZWQgdGhlIHN5bXB0b21zLCBub3QKLQl0aGUgb3JpZ2luYWwgcHJvYmxlbSBzbyBpdCBtaWdodCBiZSB3b3J0aCBmdXJ0aGVyIGludmVzdGlnYXRpb24uCi0KLQkqIFtkZWJ1Z2dlci9yZWdpc3RlcnMuY10KLQlBZGRlZCBtaXNzaW5nICNpZmRlZnMgb24gRlNfUkVHIGFuZCBHU19SRUcsIG5lZWRlZCBmb3IgRnJlZUJTRCB0bwotCWNvbXBpbGUgd2luZSBwcm9wZXJseS4KLQotCSogW2ZpbGVzL2Rvc19mcy5jXQotCU1hZGUgRE9TRlNfSGFzaCBhbmQgRE9TRlNfTWF0Y2ggbm9uLXN0YXRpYyBzbyB0aGV5IGNhbiBiZSBjYWxsZWQKLQlmcm9tIHdpbjMyL2ZpbmRmaWxlLmMgKHEudi4pLgotCi0JKiBbaWYxNjMyL2dkaTMyLnNwZWNdCi0JQWRkZWQgU2V0TWFwTW9kZSAoY2FsbCBleGlzdGluZyBmdW5jdGlvbikKLQotCSogW2lmMTYzMi9rZXJuZWwzMi5zcGVjXQotCUFkZGVkIEZpbmRGaXJzdEZpbGVBIGFuZCBTZXRGaWxlQXR0cmlidXRlc0EuCi0KLQkqIFtpZjE2MzIvdXNlcjMyLnNwZWNdCi0JQWRkZWQgQnJpbmdXaW5kb3dUb1RvcCwgQ3JlYXRlUG9wdXBNZW51LCBHZXRLZXlTdGF0ZSwgR2V0UGFyZW50LAotCUlzRGxnQnV0dG9uQ2hlY2tlZCAoY2FsbCBleGlzdGluZyBmdW5jdGlvbnMpIGFuZCBJc0RpYWxvZ01lc3NhZ2VBLAotCVVuaG9va1dpbmRvd3NIb29rRXguCi0KLQkqIFt3aW4zMi9maWxlLmNdCi0JQWRkZWQgc3R1YiBmdW5jdGlvbiBTZXRGaWxlQXR0cmlidXRlczMyQS4gSXQncyBhIHN0dWIgYmVjYXVzZSBJCi0JY2FuJ3QgcmVhbGx5IHdvcmsgb3V0IHdoYXQgdGhpcyBmdW5jdGlvbiBzaG91bGQgZG8gd2l0aCBtb3N0Ci0JYXR0cmlidXRlcyBpbiBhIFVuaXggZW52aXJvbm1lbnQuIEFueW9uZSBjYXJlIHRvIGV4cGFuZCBpdD8KLQotCSogW3dpbjMyL2ZpbmRmaWxlLmNdCi0JTmV3IGZpbGUuIEluaXRpYWwgc3RhYiBhdCBGaW5kRmlyc3RGaWxlLiBUaGlzIGRvZXNuJ3Qgd29yayBhcwotCXNwZWNpZmllZCB5ZXQsIHRob3VnaCBhIGxvdCBvZiB0aGUgZ3JvdW5kd29yayBpcyB0aGVyZS4gSSBoYXZlbid0Ci0JdGltZSB0byB3b3JrIG9uIHRoaXMgZm9yIHRoZSBuZXh0IG1vbnRoLCBzbyBpZiBhbnlvbmUgd2FudHMgdG8gcGljawotCWl0IHVwIGFuZCBydW4gd2l0aCBpdCBwbGVhc2UgZG8uCi0KLQkqIFt3aW4zMi9tZW1vcnkuY10KLQlSZW1vdmVkIG1hbGxvYy5oIGZyb20gaW5jbHVkZXMgKGNvdmVyZWQgYnkgc3RkbGliLmggaW5jbHVkZSwgYW5kCi0JZ2V0cyByaWQgb2YgYSB3YXJuaW5nIGluIEZyZWVCU0QpLgotCi0JKiBbd2luMzIvbmV3Zm5zLmNdCi0JVW5ob29rV2luZG93c0hvb2tFeDMyQSBzdHViIGFkZGVkLgotCi0JKiBbd2luMzIvdXNlcjMyLmNdCi0JQWRkZWQgaW1wbGVtZW50YXRpb24gb2YgSXNEaWFsb2dNZXNzYWdlMzJBLgotCi0JKiBbd2luZG93cy9kaWFsb2cuY10KLQlJc0RsZ0J1dHRvbkNoZWNrZWQgbm93IGNhbGxzIFNlbmREbGdJdGVtTWVzc2FnZTMyQSBpbnN0ZWFkIG9mCi0JU2VuZERsZ0l0ZW1NZXNzYWdlMTYuCi0KLVNhdCBBdWcgIDMgMTg6MDA6MDAgMTk5NiBBbGV4IEtvcm9ia2EgPGFsZXhAcGhtMzAucGhhcm0uc3VueXNiLmVkdT4KLQotCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KLQlSZW1vdmVkIHJlY3RhbmdsZSBjaGVja2luZyAoY29uZmxpY3RlZCB3aXRoIG5vbnN0YW5kYXJkCi0JbWFwcGluZyBtb2RlcykuIAotCi0JKiBbd2luZG93cy9kaWFsb2cuY10KLQlBZGRlZCBjaGVjayBmb3IgY2hpbGQtc3R5bGUgZGlhbG9ncyB0byBEU19BQlNBTElHTgotCWNvb3JkaW5hdGUgY29udmVyc2lvbi4KLQotCSogW29iamVjdHMvY29sb3IuY10KLQlDbGVhbmVkIHVwIG1pc2MuIGJpdHMKLQotVGh1IEF1ZyAgMSAxMDo1MTo0NSAxOTk2ICBBbmRyZXcgTGV3eWNreSA8cGxld3lja3lAb2lzZS51dG9yb250by5jYT4KLQotCSogW3dpbmRvd3MvZm9jdXMuY10gW3dpbmRvd3MvZXZlbnQuY10gW3dpbmRvd3Mvd2luLmNdCi0JICBbd2luZG93cy9kZWZkbGcuY10KLQlGaXhlcyB0byBmb2N1c2luZyBhbmQgYWN0aXZhdGlvbi4KLQotCSogW3dpbmRvd3MvZGVmZGxnLmNdCi0JUHJvcGVybHkoPykgaGFuZGxlIERNX0dFVERFRklELgotCi0JKiBbY29udHJvbHMvY29tYm8uY10KLQlIYW5kbGUgQ0JfRklORFNUUklOR0VYQUNULCBDQl9TRVRFRElUU0VMLCBDQl9HRVRFRElUU0VMLgotCUNCQ2hlY2tTaXplOiBBZGp1c3QgZWRpdCBwb3NpdGlvbi4KLQotVHVlIEp1bCAzMCAwOTo0NjozNiAxOTk2ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KLQotCSogW2ZpbGVzL2ZpbGUuY10gW2luY2x1ZGUvZmlsZS5oXSBbbG9hZGVyL21vZHVsZS5jXSBbbG9hZGVyL25lX2ltYWdlLmNdCi0JUGFzcyBIRklMRXMgaW5zdGVhZCBvZiB1bml4LWZkcyB0byBzZWxmLWxvYWRlciBjb2RlLgotCi1Nb24gSnVsIDI5IDIxOjQ4OjI1IDE5OTYgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+Ci0KLQkqIFtpbmNsdWRlL21ldGFmaWxlLmhdIFtvYmplY3RzL21ldGFmaWxlLmNdIFtvYmplY3RzL3RleHQuY10KLQlJbXBsZW1lbnRlZCBoYW5kbGluZyBvZiBzb21lIG5ldyBtZXRhZmlsZSByZWNvcmRzIChNRVRBXy4uLikKLQlpbiBQbGF5TWV0YUZpbGVSZWNvcmQoKSwgcmV3cml0ZSBvZiAnY2FzZSBNRVRBX0VYVFRFWFRPVVQnLgotCUFkZGVkIGZ1bmN0aW9ucyBsaWtlIE1GX1N0cmV0Y2hCbHQoKSBmb3IgdXNhZ2UgaW4gbWV0YWZpbGVzLgotCU1pbm9yIGJ1Z2ZpeCBpbiBDb3B5TWV0YWZpbGUoKS4KLQotCSogW29iamVjdHMvYml0bWFwLmNdW29iamVjdHMvZGliLmNdCi0JQWRkZWQgY2hlY2sgZm9yIG1ldGFmaWxlLURDIGluIEJpdG1hcCBhbmQgRElCIGZ1bmN0aW9uczoKLQlDcmVhdGVDb21wYXRpYmxlQml0bWFwKCkgZXRjLgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1TdW4gSnVsIDI4IDE3OjU3OjE5IDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgotCi0JKiBbbG9hZGVyL3Rhc2suY10gW2luY2x1ZGUvdGFzay5oXQotCUltcGxlbWVudGVkIFN3aXRjaFN0YWNrVG8oKS9Td2l0Y2hTdGFja0JhY2soKS4KLQotCSogW2luY2x1ZGUvd2ludHlwZXMuaF0gW2xvYWRlci9tYWluLmNdCi0JQWRkZWQgX193aW5lbGliIHZhcmlhYmxlIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gZW11bGF0b3IgYW5kCi0gCWxpYnJhcnkgYXQgcnVuLXRpbWUuIExhdGVyIG9uLCB0aGlzIHNob3VsZCBhdm9pZCBzb21lCi0gCXJlY29tcGlsYXRpb25zIHdoZW4gYnVpbGRpbmcgV2luZWxpYi4KLQotCSogW3dpbmRvd3MvcHJvcGVydHkuY10KLQlJbXBsZW1lbnRlZCBXaW4zMiBmdW5jdGlvbnMgZm9yIHdpbmRvdyBwcm9wZXJ0aWVzLgotCi1GcmkgSnVsIDI2IDE4OjAwOjAwIDE5OTYgIEFsZXggS29yb2JrYSA8YWxleEBwaG0zMC5waGFybS5zdW55c2IuZWR1PgotCi0JKiBbY29udHJvbHMvbGlzdGJveC5jXQotCUltcGxlbWVudGVkIExCU19TT1JUIHN0eWxlLCBXTV9DT01QQVJFSVRFTSwgYW5kIFdNX0RFTEVURUlURU0KLQltZXNzYWdlcy4KLQotCSogW2NvbnRyb2xzL21lbnUuY10KLQlDYWxsIFRyYW5zbGF0ZU1lc3NhZ2UoKSB0byBlbmFibGUgc2hvcnRjdXRzIChvbiBXTV9DSEFSKS4KLQotCSogW2luY2x1ZGUvY3Vyc29yaWNvbi5oXQotCU1vdmVkICNwcmFnbWEgcGFjaygxKSBiYWNrIHRvIHdoZXJlIGl0IGJlbG9uZ3MuCi0KLQkqIFtvYmplY3RzL3BhbGV0dGUuY10KLQlSZWFsaXplRGVmYXVsdFBhbGV0dGUoKSBtYXBzIHRvIHN5c3RlbSBjb2xvcnMgb25seS4KLQlEbyBub3QgYnJvYWRjYXN0IHBhbGV0dGUgbm90aWZpY2F0aW9ucyB3aGVuIGluIFRydWVDb2xvci4KLQotCSogW29iamVjdHMvY29sb3IuY10gW2luY2x1ZGUvcGFsZXR0ZS5oXQotCU1pc2NlbGxhbmVvdXMgb3B0aW1pemF0aW9ucy4gSGFkIHRvIGZpeCBzZXZlcmFsCi0JImltcHJvdmVtZW50cyIgbWFkZSB0byBteSBwYXRjaCBmb3IgcHJldmlvdXMgcmVsZWFzZS4KLQotCSogW29iamVjdHMvZGliLmNdCi0JUmV2ZXJzZSBkaWIgYml0cyBvcmRlciBmb3IgMjQtYml0IFNldERJQml0cygpLgotCi0JKiBbb2JqZWN0cy9kYy5jXQotCUdldERldmljZUNhcHMoKSBkb2VzIG5vdCByZXR1cm4gUkNfUEFMRVRURSB3aGVuIGluIFRydWVDb2xvci4KLQotCSogW3dpbmRvd3Mvc2Nyb2xsLmNdCi0JU2Nyb2xsIHVwZGF0ZSByZWdpb24gdG9vLgotCi0JKiBbd2luZG93cy9tZXNzYWdlLmNdCi0JSW5jbHVkZSBRU19NT1VTRSBpbnRvIHRoZSBldmVudCBtYXNrIGZvciBub25jbGllbnQgbW91c2UKLQltZXNzYWdlIGZpbHRlci4gRml4ZXMgcHJvYmxlbXMgd2l0aCBXb3JkIDYgZnJlZXppbmcgd2hlbgotCW1vdXNlIGhpdHMgbm9uY2xpZW50IGFyZWEuCi0KLQkqIFt3aW5kb3dzL3dpbi5jXSAKLQlBbGxvdyB0b3AtbGV2ZWwgd2luZG93cyB0byBiZSBsaW5rZWQgYXMgSFdORF9UT1AgaW4gQ3JlYXRlV2luZG93KCkuCi0KLQkqIFt3aW5kb3dzL3dpbnBvcy5jXSBbd2luZG93cy9tZGkuY10KLQlBdHRlbXB0IHRvIGZpeCBjb250cm9sIG1lbnUgZHVwbGljYXRpb24uCi0KLUZyaSBKdWwgMjYgMDk6NDk6MzUgMTk5NiAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+Ci0KLQkqIFtmaWxlcy9kcml2ZS5jXQotCUdldERyaXZlVHlwZTMyQSgpOiByZXR1cm4gdmFsdWUgZm9yIENEUk9NIGZpeGVkLgotCi0JKiBbZmlsZXMvZmlsZS5jXQotCVNlYXJjaFBhdGgqIGFkZGVkLgotCi0JKiBbaWYxNjMyL2dkaTMyLnNwZWNdIFtvYmplY3RzL2JydXNoLmNdCi0JU2V0QnJ1c2hPcmdFeCgpIGFkZGVkLgotCi0JKiBbbG9hZGVyL3BlX3Jlc291cmNlLmNdCi0JSWYgZXZlbiBsb2FkaW5nIHRoZSBkZWZhdWx0IGVudHJ5IGZhaWxzLCB3ZSBqdXN0IHVzZSB0aGUgZmlyc3QKLQllbnRyeSBmcm9tIHRoZSByZXNvdXJjZSBkaXJlY3RvcnkuCi0KLQlbbG9hZGVyL3Rhc2suY10KLQlTZXRTaWdIYW5kbGVyKCkgc3R1YiBhZGRlZCwgUGFyYWRveCA0LjUgbm93IHN0YXJ0cyB1cC4KLQotCSogW21pc2MvY29tbS5jXSBbaW5jbHVkZS93aW5kb3dzLmhdIFtpZjE2MzIva2VybmVsMzIuc3BlY10KLQlDT01NIGZ1bmN0aW9ucyB1cGRhdGVkIHRvIHdpbjMyLCBub3QgY29tcGxldGUuCi0KLQkqIFttaXNjL2xzdHIuY10KLQlGb3JtYXRNZXNzYWdlQSBwYXJ0aWFsbHkgaW1wbGVtZW50ZWQuCi0KLQkqIFtpbmNsdWRlL21pc2NlbXUuaF0gW21lbW9yeS9zZWxlY3Rvci5jXQotCSAgW21lbW9yeS9nbG9iYWwuY10gW21pc2NlbXUvZG9zbWVtLmNdCi0JRE9TIG1lbW9yeSBoYW5kbGluZyBjaGFuZ2VkOiAxTUIgcHJlYWxsb2NhdGVkIGJsb2NrLCByZWFsLW1vZGUKLQlzZWdtZW50IGhhbmRsaW5nIHBvc3NpYmxlLCBTZXRTZWxlY3RvckJhc2UgaW50byBsb3dlciBwaHlzaWNhbCAxTUIKLQlwb3NzaWJsZS4KLQotCSogW21pc2NlbXUvZHBtaS5jXQotCVJlYWwtbW9kZSBzZWdtZW50cyBjaGFuZ2VkLCByZWFsLW1vZGUgaW50IDIxLGF4PTY1MDYgYWRkZWQuCi0JQVg9MHgwMzAzIGFkZGVkLgotCi0JKiBbbXVsdGltZWRpYS90aW1lLmNdCi0JRml4ZWQgYnVnIGluIGtpbGxUaW1lci4KLQotCSogW29iamVjdHMvYml0bWFwLmNdCi0JTG9hZEltYWdlQSBwYXJ0aWFsbHkgaW1wbGVtZW50ZWQuCi0KLVdlZCBKdWwgMjQgMTg6MjA6MjQgMTk5NiAgQWxicmVjaHQgS2xlaW5lICA8a2xlaW5lQGFrLnNheC5kZT4KLQotCSogW2luY2x1ZGUvZGRlX21lbS5oXVtpbmNsdWRlL2RkZV9wcm9jLmhdCi0JICBbaXBjL2RkZV9hdG9tLmNdW2lwYy9kZGVfcHJvYy5jXVt3aW5kb3dzL21lc3NhZ2UuY10KLQkgIFtpcGMvZ2VuZXJpY19oYXNoLmhdW2xpYnJhcnkvbWlzY3N0dWJzLmNdCi0JQ2hhbmdlcyBmb3IgZXJyb3IgZnJlZSBjb21waWxhdGlvbiB1c2luZyAiLS13aXRoLWlwYyI6Ci0JcmVwbGFjZWQgc29tZSBuYW1lcyB3aXRoICoxNi1lcXVpdmFsZW50IChlLmcuIE1TRyB0byBNU0cxNiksCi0JbW9kaWZpZWQgcHJvdG90eXBlIG9mIGZ1bmN0aW9uIERERV9HbG9iYWxGcmVlKCkgLgotCi0JKiBbb2JqZWN0cy9wYWxldHRlLmNdCi0JQWRkZWQgY2hlY2sgZm9yIG1ldGFmaWxlLURDIGluIEdESVNlbGVjdFBhbGV0dGUoKSwKLQlHRElSZWFsaXplUGFsZXR0ZSgpLFJlYWxpemVEZWZhdWx0UGFsZXR0ZSgpIGFuZAotCUlzRENDdXJyZW50UGFsZXR0ZSgpLgotCi1UdWUgSnVsIDIzIDIyOjQ2OjUzIDE5OTYgIEFuZHJldyBMZXd5Y2t5IDxwbGV3eWNreUBvaXNlLnV0b3JvbnRvLmNhPgotCi0JKiBbY29udHJvbHMvZWRpdC5jXQotCUVESVRfV01fQ3JlYXRlOiBEb24ndCBFRElUX0VNX1JlcGxhY2VTZWwgaWYgY3JlYXRlZCB3aXRoIGxQYXJhbSA9ICIiLAotCWZpeGVzIFdpbmhlbHAuCi0KLQkqIFt3aW5kb3dzL2RpYWxvZy5jXQotCURJQUxPR19DcmVhdGVJbmRpcmVjdDogSW5pdGlhbGlzZSBkbGdQcm9jIGJlZm9yZSBjcmVhdGluZyBjaGlsZHJlbi4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotV2VkIEp1bCAxNyAxNjoxMDoxNiAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KLQotCSogW2NvbmZpZ3VyZS5pbl0KLQlHZW5lcmF0ZSBpbmNsdWRlL2NvbmZpZy5oIGluc3RlYWQgb2YgcHV0dGluZyBldmVyeXRoaW5nIG9uIHRoZQotCWNvbW1hbmQtbGluZS4KLQlSZW1vdmVkIC13aXRoLW1hbGxvYy1kZWJ1ZyBvcHRpb24gKG5vdCB1c2VmdWwgZm9yIGVuZCB1c2VycwotCWFueXdheSkuCi0JQWRkZWQgY2hlY2sgZm9yIG1lbW1vdmUoKS4KLQotCSogW2luY2x1ZGUvd2ludHlwZXMuaF0gWyovTWFrZWZpbGUuaW5dCi0JQWRkZWQgZGVmaW5pdGlvbiBvZiBfX1dJTkVfXyBzeW1ib2wgd2hlbiBjb21waWxpbmcgV2luZSBjb2RlCi0JKGVtdWxhdG9yIG9yIGxpYnJhcnkpIGFzIG9wcG9zZWQgdG8gdXNlciBwcm9ncmFtcy4KLQotCSogW2RlYnVnZ2VyL2VkaXRsaW5lLmNdIFtkZWJ1Z2dlci9yZWFkbGluZS8qXQotCU1vdmVkIGFsbCB0aGUgcmVhZGxpbmUgY29kZSBpbnRvIGRlYnVnZ2VyL2VkaXRsaW5lLmMuIFJlbW92ZWQgdGhlCi0JcmVhZGxpbmUgc3ViZGlyZWN0b3J5LgotCi0JKiBbZmlsZXMvcHJvZmlsZS5jXQotCUFkZGVkIFBST0ZJTEVfR2V0V2luZUluaUludCgpLgotCi0JKiBbaW5jbHVkZS9zdGFja2ZyYW1lLmhdIFtsb2FkZXIvdGFzay5jXQotCVRoZSAxNi1iaXQgc3RhY2tmcmFtZSBub3cgYWxzbyBleGlzdHMgZm9yIFdpbmVsaWIgKGV2ZW4gdGhvdWdoIGl0Ci0Jb25seSBldmVyIGNvbnRhaW5zIG9uZSBmcmFtZSkuCi0KLQkqIFtsb2FkZXIvbW9kdWxlLmNdCi0JQWRkZWQgZnVuY3Rpb24gTU9EVUxFX0NyZWF0ZUR1bW15TW9kdWxlKCkgdG8gY3JlYXRlIGEgZHVtbXkgV2luMTYKLQltb2R1bGUgZm9yIFdpbmVsaWIgYW5kIFdpbjMyLgotCi0JKiBbbWVtb3J5L2xkdC5jXQotCU1ha2Ugc3VyZSB0aGUgbGR0IGVudHJ5IGNvbnRlbnRzIHdpbGwgYmUgYWNjZXB0YWJsZSBmb3IgdGhlIExpbnV4Ci0Ja2VybmVsLgotCi0JKiBbbWVtb3J5L3NlbGVjdG9yLmNdCi0JRml4ZWQgU2V0U2VsZWN0b3JMaW1pdCgpIHdoZW4gdGhlIGxpbWl0IGlzIGluIHBhZ2VzLgotCi0JKiBbbWlzYy9wb3J0LmNdCi0JQWRkZWQgbWVtbW92ZSgpLgotCi0JKiBbbWlzY2VtdS9kcG1pLmNdCi0JQ2xlYXIgdGhlIHNlZ21lbnQgcmVnaXN0ZXJzIHRoYXQgY29udGFpbiB0aGUgc2VsZWN0b3IgYmVpbmcgZnJlZWQKLQlpbiBpbnQzMS9heD0wMDAxLgotCUFkZGVkIG1pc3NpbmcgYnJlYWsgYWZ0ZXIgU2VsZWN0b3JBY2Nlc3NSaWdodHMgY2FsbC4KLQotCSogW3dpbjMyL3N0cnVjdDMyLmNdCi0JQWRkZWQgY29udmVyc2lvbnMgZm9yIE1ESUNSRUFURVNUUlVDVC4KLQotCSogW3dpbmRvd3Mvd2lucHJvYy5jXQotCUFkZGVkIG1lc3NhZ2UgY29udmVyc2lvbnMgZm9yIFdNX01ESUNSRUFURS4KLQotVHVlIEp1bCAxNiAxOTo0NjoyNCAxOTk2ICBQYXZlbCBLYW5rb3Zza3kgPEtBTkBmcm9kZS5kY2l0LmN6PgotCi0JKiBbd2luZG93cy9jbGFzcy5jXQotCUFkZGVkIEdldEV4ZVB0cigpIGNhbGwgaW4gQ0xBU1NfRmluZENsYXNzQnlBdG9tKCkuCi0KLU1vbiBKdWwgMTUgMTc6NDk6MzggMTk5NiAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+Ci0KLQkqIFtpZjE2MzIvKi5zcGVjXQotCVNvbWUgbW9yZSB0cml2aWFsIHNwZWNzIGFkZGVkLgotCi0JKiBbaWYxNjMyL2dkaTMyLnNwZWNdIFtvYmplY3RzL2ZvbnQuY11bd2luZG93cy9kaWFsb2cuY10KLQlDcmVhdGVGb250MzIqIGFkZGVkLCBjaGFuZ2VkIHRvIG5ldyBuYW1pbmcgc3RkLgotCi0JKiBbaW5jbHVkZS93aW5kb3dzLmhdIFtpbmNsdWRlL21tc3lzdGVtLmhdIFtpbmNsdWRlL3dpbnR5cGVzLmhdCi0JU29tZSBkZWZpbmVzL3R5cGVzIGFkZGVkLgotCi0JKiBbd2luMzIvdGhyZWFkLmNdCi0JVGxzU2V0VmFsdWUoKSByZXR1cm5zIGJvb2xlYW4uCi0KLQkqIFt3aW4zMi9yZXNvdXJjZS5jXSBbbG9hZGVyL3BlX3Jlc291cmNlLmNdIFtsb2FkZXIvcmVzb3VyY2UuY10KLSAJICBbY29udHJvbHMvbWVudS5jXSBbb2JqZWN0cy9iaXRtYXAuY10KLQlDbGVhbnVwIG9mIHRoZSByZXNvdXJjZSBmdW5jdGlvbnMsIG1vc3RseSBjaGFuZ2VzIHRvIG5ldyBuYW1pbmcKLSAJc3RhbmRhcmQgYW5kIGZpeGluZyBvZiBhcmd1bWVudCB0eXBlcyBzbyB0aGF0IHRoZXkgYWdyZWUgd2l0aCB0aGUKLSAJd2luMTYvd2luMzIgQVBJLgotCi1UaHUgSnVsIDExIDE1OjAwOjAwIDE5OTYgIEFsZXggS29yb2JrYSA8YWxleEBwaG0zMC5waGFybS5zdW55c2IuZWR1PgotCi0JKiBbd2luZG93cy93aW5wb3MuY10KLQlTaG93V2luZG93KCkgZml4ZXMuCi0KLQkqIFt3aW5kb3dzL21kaS5jXQotCUZpeCByZXZlcnNlZCBMUEFSQU0gaW4gV01fTURJQUNUSVZBVEUuCi0KLQkqIFt3aW5lLmluaV0KLQlOZXcgb3B0aW9uIEFsbG9jU3lzdGVtQ29sb3JzIHRlbGxzIFdpbmUgaG93IG1hbnkgY29sb3JzIHRvIGdyYWIKLQlmcm9tIHRoZSBzeXN0ZW0gY29sb3JtYXAuCi0KLQkqIFtvYmplY3RzL2JpdGJsdC5jXSBbb2JqZWN0cy9kYy5jXQotCUZpeGVkIHBpbmsgZ2FyYmFnZSBvdmVyIFdvcmQgYnV0dG9ucyBpbiBQc2V1ZG9Db2xvci4gQWRkZWQKLQlvcHRpb25hbCBEU1RJTlZFUlQgc2hvcnRjdXQgZm9yIGZhc3RlciB0ZXh0IHNlbGVjdGlvbi4KLQotCSogW21pc2Mvd3NwcmludGYuY10KLQlTa2lwIGJvZ3VzIHNlZ21lbnRlZCBwb2ludGVycyBpbiB3c3ZucHJpbnRmMTYoKS4gCi0KLQkqIFtvYmplY3RzL2dkaW9iai5jXQotCUFkZGVkIHBhbGV0dGUgaGFuZGxpbmcgdG8gVW5yZWFsaXplT2JqZWN0KCkuIAotCi0JKiBbb2JqZWN0cy9jb2xvci5jXSBbb2JqZWN0cy9wYWxldHRlLmNdIFt3aW5kb3dzL2RjZS5jXQotCVdpbmUgZ2V0cyBwYWxldHRlIG1hbmFnZXIgd2l0aCBzdXBwb3J0IGZvciBtb3JlIHRoYW4gMjAgY29sb3JzLiAKLQlPbmx5IFBzZXVkb0NvbG9yIGFuZCBUcnVlQ29sb3IgdmlzdWFscyB0ZXN0ZWQgc28gZmFyLgotCi0JKiBbd2luZG93cy93aW5wb3MuY10gW3dpbmRvd3Mvd2luLmNdIAotCVNldCBYIHNpemUgaGludHMgZm9yIFdTX0VYX0RMR01PREFMRlJBTUUgd2luZG93cyAobm8gcmVzaXplKSBhbmQKLQl1c2UgWFJlY29uZmlndXJlV01XaW5kb3dzKCkgaW5zdGVhZCBvZiBYQ29uZmlndXJlV2luZG93KCkgaW4KLQltYW5hZ2VkIG1vZGUuCi0KLQkqIFttZW1vcnkvZ2xvYmFsLmNdCi0JRG8gbm90IGFsbG9jYXRlIG1vcmUgdGhhbiA2NDBLIG9mIERPUyBtZW1vcnkuCi0KLQkqIFttaXNjL21haW4uY10KLQlEbyBub3QgYWxsb3cgLWRlc2t0b3AgYW5kIC1tYW5hZ2VkIHRvZ2V0aGVyLgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1GcmkgSnVsIDEyIDE3OjQzOjA1IDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgotCi0JKiBbY29udHJvbHMvc2Nyb2xsLmNdCi0JVXNlIFdpbjMyIGhlYXAgZnVuY3Rpb25zIHRvIGFsbG9jYXRlIHNjcm9sbC1iYXIgaW5mbyBzdHJ1Y3R1cmUuCi0KLQkqIFtkZWJ1Z2dlci9kYmcueV0gW2RlYnVnZ2VyL3JlZ2lzdGVycy5jXQotCUFkZGVkIHN1cHBvcnQgZm9yIEZTIGFuZCBHUyBzZWdtZW50IHJlZ2lzdGVycy4KLQlDaGVjayB0aGF0IHNlZ21lbnQgcmVnaXN0ZXJzIHZhbHVlIGFyZSBPSyBiZWZvcmUgcmV0dXJuaW5nIGZyb20KLQl0aGUgc2lnbmFsIGhhbmRsZXIuCi0KLQkqIFt0b29scy9idWlsZC5jXSBbaWYxNjMyL3JlbGF5LmNdIFtsb2FkZXIvYnVpbHRpbi5jXQotCUNoYW5nZWQgcmVsYXkgZGVidWdnaW5nIGZvciBXaW4zMiBmdW5jdGlvbjogdGhlIHJlbGF5IGNvZGUgbm93Ci0JcGFzc2VzIHRoZSBlbnRyeSBwb2ludCBhZGRyZXNzIGluc3RlYWQgb2YgdGhlIGZ1bmN0aW9uIG5hbWUuCi0KLQkqIFt0b29scy9idWlsZC5jXSBbbWlzY2VtdS8qLmNdCi0JQWRkZWQgc3VwcG9ydCBmb3IgZGF0YSBlbnRyeSBwb2ludHMgaW4gV2luMzIgRExMcy4KLQlBZGRlZCAnY2RlY2wnIGZ1bmN0aW9uIHR5cGUgZm9yIFdpbjMyLgotCUZvciAncmVnaXN0ZXInIGZ1bmN0aW9uLCB0aGUgcmVsYXkgY29kZSBub3cgcGFzc2VzIGEgcG9pbnRlciB0bwotCXRoZSBTSUdDT05URVhUIHN0cnVjdHVyZS4KLQkKLQkqIFtpbmNsdWRlL3JlZ2lzdGVycy5oXSBbaW5jbHVkZS93aW5lLmhdCi0JTW92ZWQgU0lHQ09OVEVYVCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiBpbiByZWdpc3RlcnMuaC4KLQotCSogW2xvYWRlci9wZV9pbWFnZS5jXQotCURvbid0IGRpZSBhdCBvbmNlIGlmIHNvbWUgV2luMzIgZW50cnkgcG9pbnRzIGNhbm5vdCBiZSBmb3VuZCwgYnV0Ci0Jc2V0IHRoZW0gdG8gTlVMTCwganVzdCBsaWtlIHdlIGRvIGZvciBXaW4xNi4gVGhpcyBhbGxvd3Mgc29tZQotCXByb2dyYW1zIHRvIGdvIGZ1cnRoZXIgYmVmb3JlIGNyYXNoaW5nLgotCi0JKiBbbG9hZGVyL3Rhc2suY10gW2xvYWRlci9tYWluLmNdCi0JTW92ZWQgZ2xvYmFsIGluaXRpYWxpemF0aW9ucyBmcm9tIEluaXRUYXNrKCkgdG8gTUFJTl9Jbml0KCksIGFzCi0JdGhleSBubyBsb25nZXIgbmVlZCBhIHRhc2sgY29udGV4dCB3aXRoIHRoZSBuZXcgU0VHUFRSIGhlYXAgZnVuY3Rpb25zLgotCi0JKiBbbWVtb3J5L3N0cmluZy5jXQotCUFkZGVkIGxzdHJjcHluQXRvVyBhbmQgbHN0cmNweW5XdG9BOyBub3QgcmVhbCBBUEkgZnVuY3Rpb25zLCBidXQKLSAJdmVyeSBjb252ZW5pZW50LgotCi0JKiBbd2luZG93cy9ncmFwaGljcy5jXQotCVBhcnRpYWxseSBpbXBsZW1lbnRlZCBEcmF3RWRnZSgpLgotCi0JKiBbd2luZG93cy90aW1lci5jXSBbd2luZG93cy9jYXJldC5jXQotCUltcGxlbWVudGVkIFdpbjMyIHRpbWVyIGhhbmRsaW5nLiBVcGRhdGVkIGNhcmV0IG1hbmFnZW1lbnQgdG8gdXNlCi0JV2luMzIgdGltZXJzIChhdm9pZHMgaGF2aW5nIHRvIHVzZSBhIFdpbjE2IGNhbGxiYWNrKS4KLQotCSogW3dpbmRvd3Mvd2luLmNdCi0JUHJldmVudCBwcm9ncmFtcyBmcm9tIHNldHRpbmcgc29tZSBzdHlsZSBiaXRzIHdpdGgKLQlTZXRXaW5kb3dMb25nKCkuIFRoaXMgc2hvdWxkIGZpeCBzb21lIEJhZE1hdGNoIGNyYXNoZXMuCi0JTGluayBuZXcgd2luZG93cyBhdCB0aGUgZW5kIG9mIHRoZSBsaW5rZWQgbGlzdC4KLQotCSogW3dpbmRvd3Mvd2lucG9zLmNdCi0JRG9uJ3QgdHJ5IHRvIGFjdGl2YXRlIGEgY2hpbGQgd2luZG93IGluIFNob3dXaW5kb3coKS4KLQotCSogW3dpbmRvd3Mvd2lucHJvYy5jXQotCUFkZGVkIGEgMzItPjMyIHRodW5rIHRvIHN1cHBvcnQgQW5zaS1Vbmljb2RlIHRyYW5zbGF0aW9uLgotCi1XZWQgSnVsIDEwIDIyOjExOjEyIDE5OTYgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgotCi0JKiBbZmlsZXMvZGlyZWN0b3J5LmNdCi0JQWRkaXRpb25hbCAodW5kb2N1bWVudGVkKSByZXR1cm4gdmFsdWUgZm9yIEdldFRlbXBEcml2ZSgpIGFkZGVkLgotCi0JKiBbZmlsZXMvZG9zX2ZzLmNdIFtmaWxlcy9maWxlLmNdIFtpbmNsdWRlL3dpbmRvd3MuaF0KLQlHZXRUZW1wRmlsZU5hbWUzMiogYWRkZWQuCi0JR2V0U2hvcnRQYXRoTmFtZSogYWRkZWQuCi0KLQkqIFttZW1vcnkvc3RyaW5nLmNdCi0JV2luMTYgbHN0cmNweSgpIGNhbiBnZXQgTlVMTCBwdHJzIGFzIGFyZ3VtZW50IGFuZCBzdXJ2aXZlLgotCi0JKiBbbWlzYy9semV4cGFuZC5jXQotCUxaT3BlbkZpbGUoKTogYWxzbyB0cnkgb3BlbmluZyB3aXRoIGNvbXByZXNzZWQgZmlsZW5hbWUgaWYgbm9ybWFsCi0gCW9wZW4gZmFpbHMuCi0KLQkqIFttaXNjL29sZTJubHMuY10gW21pc2MvbHN0ci5jXSBbaW5jbHVkZS93aW5kb3dzLmhdCi0JQ2hhciogYWRkZWQuCi0JQ29tcGFyZVN0cmluZyogYWRkZWQuCi0KLVN1biBKdWwgIDcgMDE6MjI6MTQgMTk5NiAgSnVra2EgSWl2b25lbiA8aWl2b25lbkBjYy5oZWxzaW5raS5maT4KLQotCSogW29iamVjdHMvZm9udC5jXSBbaWYxNjMyL2dkaTMyLnNwZWNdCi0JQ3JlYXRlRm9udEluZGlyZWN0MzJBIGFuZCBDcmVhdGVGb250SW5kaXJlY3QzMlcgYWRkZWQuCi0KLQkqIFttaXNjL29sZTJubHMuY10KLQlHZXRVc2VyRGVmYXVsdExDSUQgcmV0dXJuIHZhbHVlcyB1cGRhdGVkIGZvciBuZXcgbGFuZ3VhZ2VzLgotCUZpbm5pc2ggc3VwcG9ydCBhZGRlZCBmb3IgR2V0TG9jYWxlSW5mb0EuCi0KLQkqIFtvYmplY3QvcGFsZXR0ZV0gW2dkaTMyLnNwZWNdCi0JUmVhbGl6ZVBhbGV0dGUzMiBhbmQgU2VsZWN0UGFsZXR0ZTMyIGFkZGVkLgotCQotU2F0IEp1bCAgNiAxNzoyNzozMCAxOTk2ICBSb25hbiBXYWlkZSAgPHJvb3RAd2FpZGVyLmllPgotCi0JKiBbbWlzYy9zaGVsbC5jXQotCUZpeHVwIGZvciBTSEVMTF9GaW5kRXhlY3V0YWJsZSBzbyB0aGF0IEZpbGUtPlJ1biBmcm9tIHByb2dtYW4KLQl3b3JrcyBvbmNlIG1vcmUuIFN0aWxsIG5lZWRzIHNvbWUgbW9yZSBmaXh1cHMgLSBncmVwIGZvciBGSVhNRSBpbgotCXRoaXMgZmlsZS4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRnJpIEp1bCAgNSAxNjoyNzo0MyAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KLQotCSogW2NvbnRyb2xzL2Rlc2t0b3AuY10KLQlVc2UgV2luZG93cyBmaWxlIEkvTyByb3V0aW5lcyB0byBsb2FkIHRoZSBkZXNrdG9wIGJpdG1hcC4KLQotCSogW2ZpbGVzL2ZpbGUuY10KLQlJbXBsZW1lbnRlZCBSZW1vdmVEaXJlY3RvcnkqIGFuZCBEZWxldGVGaWxlKi4KLQotCSogW2luY2x1ZGUvd2luZS5oXQotCUFkZGVkIFNJR0NPTlRFWFQgdHlwZWRlZiB0byByZXBsYWNlICNkZWZpbmUgc2lnY29udGV4dF9zdHJ1Y3QuCi0KLQkqIFtsb2FkZXIvdGFzay5jXQotCUZpeGVkIGluaXRpYWwgYnJlYWtwb2ludCBzZXR0aW5nIGZvciBXaW4zMiB0YXNrcy4KLQotCSogW21pc2Mvd3NwcmludGYuY10KLQlJZ25vcmUgVW5pY29kZSBmb3JtYXRzIGZvciB3c3ByaW50ZjE2KCkuCi0KLQkqIFtvYmplY3RzL2ZvbnQuY10KLQlJbXBsZW1lbnRlZCBXaW4zMiB2ZXJzaW9uIG9mIEdldFRleHRNZXRyaWNzLgotCi0JKiBbd2luZG93cy93aW5wcm9jLmNdIFt3aW5kb3dzL3dpbi5jXSBbd2luZG93cy9jbGFzcy5jXQotCSAgW3dpbmRvd3MvZGlhbG9nLmNdCi0JTW9kaWZpZWQgd2luZG93cyBwcm9jZWR1cmVzIHRvIHVzZSB0aHVua3MsIHRvIGVuc3VyZSB0aGF0IHRoZQotCXByb2NlZHVyZSBjYW4gYmUgY2FsbGVkIGRpcmVjdGx5IGZyb20gdGhlIFdpbmRvd3MgcHJvZ3JhbS4KLQotCSogW3dpbmRvd3Mvd2luLmNdCi0JQWRkZWQgZnVuY3Rpb24gV0lOX0J1aWxkV2luQXJyYXkoKSB0byBtYWtlIGl0IGVhc2llciB0byBlbnVtZXJhdGUKLQl3aW5kb3dzLiBJbXBsZW1lbnRlZCBXaW4zMiB2ZXJzaW9uIG9mIEVudW1XaW5kb3dzKCkgYW5kIGZyaWVuZHMuCi0KLUZyaSBKdWwgIDUgMTE6NTY6MjIgMTk5NiAgQW5kcmVhcyBLaXJzY2hiYXVtIDxhbmtAcmJnLmluZm9ybWF0aWsudGgtZGFybXN0YWR0LmRlPgotCi0JKiBbY29udHJvbHMvYnV0dG9uLmNdIFt3aW5kb3dzL3dpbi5jXQotCU9wZXJhdG9yIHByZWNlZGVuY2UgZml4ZXMuCi0KLQkqIFtjb250cm9scy9lZGl0LmNdCi0JSW1wbGVtZW50ZWQgRVNfUEFTU1dPUkQsIEVTX0xPV0VSQ0FTRSBhbmQgRVNfVVBQRVJDQVNFIHN0eWxlcy4KLQlGaXhlZCB3b3JkIHdyYXAgd2l0aCBsb25nIHdvcmRzLgotCi0JKiBbZGVidWdnZXIvZGVidWcubF0KLQlOZXcgYWxpYXMgIndoZXJlIiBmb3IgY29tbWFuZCAiYmFja3RyYWNlIi4KLQotCSogW2lmMTYzMi9nZGkuc3BlY10KLQlDb3JyZWN0ZWQgcGFyYW1ldGVyIG9mIEV4dFRleHRPdXQuCi0KLQkqIFtsb2FkZXIvbW9kdWxlLmNdCi0JQ29ycmVjdGVkIHByaW50aW5nIG9mIHRhYmxlIG9mIG1vZHVsZXMuCi0KLQkqIFttaXNjL3NweS5jXQotCVJlbW92ZWQgc3VwZXJmbHVvdXMgXG4gaW4gbWVzc2FnZSBuYW1lLgotCi0JKiBbd2luZG93cy9tZXNzYWdlLmNdCi0JRGVjbGFyZWQgTVNHX1NlbmRNZXNzYWdlIGFzIHN0YXRpYy4KLQlDaGFuZ2VkIHBhcmFtZXRlciBvZiBEaXJlY3RlZFlpZWxkKCkgZnJvbSBxdWV1ZSBoYW5kbGUgdG8gdGFzayBoYW5kbGUuCi0JUmVtb3ZlZCB3YXJuaW5nIG1lc2FnZXMgZm9yIGFyZ3VtZW50IG9mIHByaW50Zi4KLQotCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCi0JQWRkZWQgdGhlIGZsYWcgRFRfTk9QUkVGSVggd2hlbiBkcmF3aW5nIHdpbmRvdyB0aXRsZXMuCi0KLQkqIFt3aW5kb3dzL3dpbi5jXQotCVdJTl9XYWxrV2luZG93cyBub3cgcHJpbnRzIHRoZSBpbnZhbGlkIHdpbmRvdyBoYW5kbGUuCi0JQWRkZWQgYSB3YXJuaW5nIGlmIEdldC0vU2V0V2luZG93V29yZC8tTG9uZyBnZXRzIGFuIGludmFsaWQgb2Zmc2V0LgotCi0JKiBbd2luZG93cy93aW5wcm9jLmNdCi0JQWxsb3dzIGNyZWF0aW5nIGRpYWxvZyB3aW5kb3dzIHdpdGggTlVMTCBhcyBkaWFsb2cgZnVuY3Rpb24uCi0KLVdlZCBKdWwgIDMgMDk6MjY6NDEgMTk5NiAgQW5kcmV3IExld3lja3kgPHBsZXd5Y2t5QG9pc2UudXRvcm9udG8uY2E+Ci0KLQkqIFt3aW5kb3dzL2V2ZW50LmNdCi0JRVZFTlRfa2V5OiBGaXhlcyB0byBWS18gY29kZSBnZW5lcmF0aW9uIGZvciBzcGFjZSBiYXIgYW5kCi0JcHVuY3R1YXRpb24uCi0KLQkqIFtmaWxlcy9maWxlLmNdCi0JR2V0VGVtcEZpbGVOYW1lOiBmaXJzdCBjaGFyYWN0ZXIgaW4gdGVtcG9yYXJ5IG5hbWUgaXMgIn4iLgotCi0JKiBbbWVtb3J5L2hlYXAuY10KLQlIRUFQX01ha2VJblVzZUJsb2NrRnJlZSBub3cgZnJlZXMgdGhlIHdob2xlIHN1YmhlYXAgaWYgcG9zc2libGUuCi0KLQkqIFtvYmplY3RzL3RleHQuY10KLQlFeHRUZXh0T3V0MTYoKTogaGFuZGxlIE5VTEwgbHBSZWN0IGFuZCBFVE9fT1BBUVVFLgotCi0JKiBbbWlzYy9kcml2ZXIuY10KLQlSZW1vdmVkIHNvbWUgYnVncyBhbmQgcmVmb3JtYXR0ZWQuIEFjdHVhbGx5IGxvYWRzIGRyaXZlcnMgbm93LgotCi0JKiBbaW5jbHVkZS9jYWxsYmFjay5oXQotCUFkZGVkIENhbGxEcml2ZXJQcm9jKCkgYW5kIENhbGxXaW5kb3dzRXhpdFByb2MoKS4KLQotCSogW2xvYWRlci9tb2R1bGUuY10KLQlNT0RVTEVfQ2FsbFdFUCgpOiBuZXcgZnVuY3Rpb24uCi0KLQkqIFttaXNjL2x6ZXhwYW5kLmNdCi0JTFpTZWVrKCk6IHJldHVybiBuZXcgcG9pbnRlciwgbm90IG9sZCBvbmUuCi0KLQkqIFttaXNjL3Zlci5jXQotCWZpbmRfbmVfcmVzb3VyY2UoKTogZml4ZWQgZGVwZW5kZW5jZSBvbiBMWlNlZWsoKSBidWcuCi0JR2V0RmlsZVJlc291cmNlKCk6IGluaXRpYWxpemUgcmVzbGVuIGJlZm9yZSB1c2luZyBpdC4KLQotCSogW3dpbmRvd3MvY2xhc3MuY10KLQlTZXRDbGFzc1dvcmQoKTogYWRkIG1pc3NpbmcgZWxzZS4KLQotCSogW29iamVjdHMvZm9udC5jXQotCWxwRm9udExpc3QgaXMgbm93IE1BWF9GT05UUysxLiBJdCB1c2VkIHRvIG92ZXJ3cml0ZSB0aGUgYXJyYXkuCi0JSW5pdEZvbnRMaXN0OiBhbGxvY2F0ZSBvbmUgaHVnZSBhcnJheSBvZiBzdHJ1Y3R1cmVzLgotCUZPTlRfTWF0Y2hGb250OiB1cHBlcmNhc2UgdGhlIGZhY2UgbmFtZS4KLQotVGh1IEp1biAyNyAxMjo0MTo0MCAxOTk2ICBCcnVjZSBNaWxuZXIgPGJydWNlQGdlbmV0aWNzLnV0YWguZWR1PgotCi0JKiBbbWVtb3J5L2hlYXAuY10KLQlGaXhlZCBhIHR5cG8gaW4gSGVhcFJlQWxsb2MoKS4KLQotVHVlIEp1biAyNSAyMjoyMjowMyAxOTk2ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KLQotCSogW2ZpbGVzL2RpcmVjdG9yeS5jXSBbZmlsZXMvZHJpdmUuY10gW2lmMTYzMi9rZXJuZWwuc3BlY10KLQkgIFtpZjE2MzIva2VybmVsMzIuc3BlY10gW2lmMTYzMi9zaGVsbC5zcGVjXSBbaW5jbHVkZS93aW5kb3dzLmhdCi0JR2V0VGVtcFBhdGgqIGFkZGVkCi0JR2V0RHJpdmVUeXBlKiBmaXhlZCwgdXBkYXRlZCB0byBOZXdOYW1lU3RhbmRhcmQuCi0JR2V0Q3VycmVudERpcmVjdG9yeSogZml4ZWQgKG5lZWRzIHRvIHByZXBlbmQgWDpcKS4KLQotCSogW2NvbnRyb2xzL2xpc3Rib3guY10KLQlNaXNzaW5nIE5VTEwgY2hlY2sgYWRkZWQuCi0KLQkqIFtpZjE2MzIvd2lubW0uc3BlY10gW2xvYWRlci9idWlsdGluLmNdCi0Jd2lubW0uZGxsICgzMmJpdCBtbXN5c3RlbSBlcXVpdmFsZW50KSBzcGVjcyBhZGRlZC4KLQotCSogW21lbW9yeS9zdHJpbmcuY10gW2lmMTYzMi9rZXJuZWwzMi5zcGVjXSBbaW5jbHVkZS93aW5kb3dzLmhdCi0JUnRse01vdmUsWmVybyxGaWxsfU1lbW9yeSBhZGRlZC4KLQotCSogW21pc2MvcmVnaXN0cnkuY10KLQlTb21lIE5VTEwgcHRyIGRlcmVmZXJlbmNlIGJ1Z3MgZml4ZWQuCi0KLQkqIFttdWx0aW1lZGlhL21jaWNkYS5jXVttdWx0aW1lZGlhL21jaXN0cmluZy5jXVttdWx0aW1lZGlhL21tc3lzdGVtLmNdCi0JQ2hlY2sgZm9yIE5VTEwgcHRyLgotCUZpbGwgbWNpT3BlbkRydiB3aGVuIG1peGluZyBtY2lPcGVuIGFuZCBtY2lTZW5kU3RyaW5nKCJvcGVuIC4uIikuCi0JQWxpYXNpbmcgc2hvdWxkIHdvcmsgZm9yIGFsbCBNQ0kgZGV2aWNlcy4KLQotCSogW3dpbmRvd3Mvd2luLmNdCi0JQWxsb3cgcGFzc2luZyBpbnZhbGlkIHdpbmRvdyBoYW5kbGVzIHRvIENsb3NlV2luZG93KCkuCi0KLVR1ZSBKdW4gMjUgMjA6MDI6MTUgMTk5NiAgSnVra2EgSWl2b25lbiA8aWl2b25lbkBjYy5oZWxzaW5raS5maT4KLQotCSogW2ZpbGVzL2RpcmVjdG9yeS5jXSBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdCi0JR2V0U3lzdGVtRGlyZWN0b3J5MzJBIGFuZCBHZXRTeXN0ZW1EaXJlY3RvcnkzMlcgYWRkZWQuCi0KLQkqIFttaXNjL21haW4uY10gW2lmMTYzMi9rZXJuZWwzMi5zcGVjXQotCUJlZXAgYW5kIFNldEVudmlyb25tZW50VmFyaWFibGUzMlcgYWRkZWQuCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVdlZCBKdW4gMTkgMTQ6NDk6MjcgMTk5NiAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBmYXVpNDUuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+Ci0KLQkqIFtmaWxlcy9kcml2ZS5jXSAKLQlHZXRGcmVlRGlza1NwYWNlKiwgR2V0Vm9sdW1lSW5mb3JtYXRpb24qIGFkZGVkLgotCi0JKiBbZmlsZXMvZmlsZS5jXQotCUZsdXNoRmlsZUJ1ZmZlcnMsIENyZWF0ZURpcmVjdG9yeSogYWRkZWQuCi0KLQkqIFtpbmNsdWRlL3dpbmJhc2UuaF0gW2luY2x1ZGUvd2luZG93cy5oXQotCVByb3RvdHlwZXMsIGRlZmluZXMgYWRkZWQgYW5kIGZpeGVzLgotCi0JKiBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdIFtpbmNsdWRlL3Jlc291cmNlMzIuaF0KLQkgIFt3aW4zMi9jdXJzb3JpY29uMzIuY10gW3dpbjMyL3Jlc291cmNlLmNdIFt3aW5kb3dzL2RpYWxvZy5jXQotCUZpeGVzIHRvIHJlc291cmNlIGhhbmRsaW5nLgotCi0JKiBbaWYxNjMyL2tlcm5lbC5zcGVjXSBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdIFtpZjE2MzIvdXNlcjMyLnNwZWNdCi0JU3BlY3MgZm9yIGltcGxlbWVudGVkIGZ1bmN0aW9ucyBhZGRlZAotCVNvbWUgdGh1bmtzIHRvIGZ1bmN0aW9ucyB3aGljaCBhcmUgc2FtZSBhcyB3aW4xNiBlcXVpdmFsZW50cy4KLQotCSogW2xvYWRlci90YXNrLmNdCi0JR2V0QXBwQ29tcGF0RmxhZ3MoKSBhZGRlZC4KLQotCSogW21pc2MvcmVnaXN0cnkuY10KLQlPbmUgbWlzc2luZyBlbHNlIGFkZGVkLCBzbWFsbCBoYWNrIHRvIFJlZ1F1ZXJ5VmFsdWUxNigpLgotCi0JKiBbd2luMzIvZmlsZS5jXQotCUdldEZpbGVBdHRyaWJ1dGVzQSgpIGZpeGVkICh3YXMgdXNpbmcgRE9TIHBhdGggYXMgVU5JWCBwYXRoKS4KLQotVHVlIEp1biAxOCAyMTowMDowMCAxOTk2ICBBbGV4IEtvcm9ia2EgPGFsZXhAcGhtMzAucGhhcm0uc3VueXNiLmVkdT4KLQotCSogW2xvYWRlci9uZV9yZXNvdXJjZS5jXQotCUZpeGVkIEZyZWVSZXNvdXJjZSgpIHJldHVybiB2YWx1ZS4KLQotCSogW29iamVjdHMvdGV4dC5jXQotCUZpeGVkIGEgYnVnIGluIEV4dFRleHRPdXQoKSB0aGF0IHdhcyBjYXVzaW5nIG92ZXJsYXBwZWQgY2hhcmFjdGVycwotCWluIFdpbldvcmQuCi0KLQkqIFt3aW5kb3dzL3dpbnBvcy5jXQotCVNXUF9GUkFNRUNIQU5HRUQgZm9yIHRvcC1sZXZlbCB3aW5kb3dzIG5vdyBpbnZhbGlkYXRlcyBjbGllbnQKLQlhcmVhIGFzIGNsb2NrLmV4ZSB3YW50cy4KLQotVHVlIEp1biAxOCAxMTozMDoyMiAxOTk2ICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgotCi0JKiBbY29udHJvbHMvbGlzdGJveC5jXQotCU1pbmkgYnVnZml4OiAncmV2aXZhbCcgb2YgbWlzc2luZyBzY3JvbGxiYXIgaW4gbGlzdGJveGVzLgotCi1Nb24gSnVuIDE3IDIwOjI3OjQxIDE5OTYgIFJvYmVydCBQb3VsaW90IDxrcnlub3NAY2xpYy5uZXQ+Ci0KLQkqIFtyZXNvdXJjZXMvc3lzcmVzX0ZyLnJjXSBbcmVzb3VyY2VzL1RPRE9dCi0JTWFkZSBjaGFuZ2VzIGZvciBDaG9vc2VfRm9udCBkaWFsb2cuCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVN1biBKdW4gMTYgMTY6NTE6MzEgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+Ci0KLQkqIFttZW1vcnkvaGVhcC5jXQotCUZpeGVkIGJ1ZyBpbiBIZWFwUmVhbGxvYyAodGhhbmtzIHRvIEJydWNlIE1pbG5lcikuCi0KLQkqIFttaXNjL3dzcHJpbnRmLmNdCi0JRml4ZWQgYXJndW1lbnQgc2l6ZSBmb3IgJWMgZm9ybWF0IGluIHdzcHJpbnRmMTYoKS4KLQotCSogW29iamVjdHMvZGMuY10KLQlEb24ndCBmcmVlIGhGaXJzdEJpdG1hcCBmb3Igc2F2ZWQgRENzLgotCi0JKiBbd2luZG93cy9ldmVudC5jXQotCUFkZGVkIHRpbWVyIGhhbmRsaW5nIGluIEVWRU5UX1dhaXRYRXZlbnQoKS4KLQotCSogW3dpbmRvd3MvbWVzc2FnZS5jXQotCUluIE1TR19UcmFuc2xhdGVNb3VzZU1zZyBhbmQgTVNHX1RyYW5zbGF0ZUtiZE1zZywgY2hlY2sgaWYgdGhlCi0JZXZlbnQgaXMgZm9yIHRoZSBjdXJyZW50IHRhc2s7IGlmIG5vdCwgd2FrZSB0aGUgb3RoZXIgdGFzay4KLQotCSogW3dpbmRvd3MvcXVldWUuY10gW2luY2x1ZGUvcXVldWUuaF0KLQlBZGRlZCAnc2VsZicgaGFuZGxlIGluIHF1ZXVlIHN0cnVjdHVyZS4KLQotCSogW3dpbmRvd3MvdGltZXIuY10KLQlBZGRlZCBUSU1FUl9FeHBpcmVUaW1lcnMoKSBmdW5jdGlvbiB0byBtYXJrIGV4cGlyZWQgdGltZXJzIGFuZAotCXdha2UgdXAgdGhlIGNvcnJlc3BvbmRpbmcgdGFza3MuCi0KLVRodSBKdW4gMTMgMDE6NDY6MzMgRURUIDE5OTYgIFdpbGxpYW0gTWFncm8gPHdtYWdyb0B0Yy5jb3JuZWxsLmVkdT4KLQotCSogW3dpbmRvd3MvbWFwcGluZy5jXQotCUZpcnN0IHBvaW50IGluIGxpc3Qgd2FzIG1hcHBlZCBtdWx0aXBsZSB0aW1lcyBpbiBEUHRvTFAgYW5kCi0gCUxQdG9EUC4gIE90aGVyIHBvaW50cyB3ZXJlIG5vdCBtYXBwZWQuCi0KLVdlZCBKdW4gMTIgMTg6MDg6NDUgMTk5NiAgQWxleCBLb3JvYmthIDxhbGV4QHBobTMwLnBoYXJtLnN1bnlzYi5lZHU+Ci0KLQkqIFttaXNjL3NoZWxsLmNdCi0JU29tZSBmaXhlcyBmb3IgRXh0cmFjdEljb24gZnVuY3Rpb24gZmFtaWx5LgotCi0JKiBbZG9jdW1lbnRhdGlvbi91c2VyX21vZHVsZV0KLQlDaGFwdGVyIGFib3V0IHdpbmRvd2luZyBhbmQgbWVzc2FnaW5nIHN1YnN5c3RlbXMuCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVR1ZSBKdW4gMTEgMTU6MjA6NDMgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+Ci0KLQkqIFtkZWJ1Z2dlci9icmVhay5jXSBbbG9hZGVyL3NpZ25hbC5jXQotCUZpeGVkIGJyZWFrcG9pbnRzIGluIDMyLWJpdCBjb2RlLgotCi0JKiBbaW5jbHVkZS93aW5kb3dzLmhdCi0JQWRkZWQgbWFueSBtb3JlIFdpbjMyIHZlcnNpb25zIG9mIHN0YW5kYXJkIHN0cnVjdHVyZXMuCi0KLQkqIFtpbmNsdWRlL3dpbnJlZy5oXSBbbWlzYy9yZWdpc3RyeS5jXQotCU1vdmVkIHByaXZhdGUgdHlwZXMgaW50byByZWdpc3RyeS5jLgotCi0JKiBbbWVtb3J5L3N0cmluZy5jXSAoTmV3IGZpbGUpCi0JTW92ZWQgbW9zdCBzdHJpbmcgZnVuY3Rpb25zIGZyb20gbWlzYy9sc3RyLmM7IGFkZGVkIFdpbjMyIHZlcnNpb24KLQlvZiBhbGwgZnVuY3Rpb25zLgotCi0JKiBbbWlzYy93c3ByaW50Zi5jXQotCUltcGxlbWVudGVkIFdpbjMyIHdzcHJpbnRmIGZ1bmN0aW9ucy4KLQotCSogW29iamVjdHMvYml0bWFwLmNdCi0JSW1wbGVtZW50ZWQgV2luMzIgYml0bWFwIGZ1bmN0aW9ucy4KLQotCSogW3dpbmRvd3MvZGlhbG9nLmNdCi0JRG9uJ3Qgc2V0IGRpYWxvZyBwcm9jZWR1cmUgYmVmb3JlIHRoZSBjb250cm9scyBhcmUgY3JlYXRlZC4gVGhpcwotCWF2b2lkcyBhIGNyYXNoIGluIFdpbmhlbHAuCi0KLVR1ZSBKdW4gMTEgMTQ6MTA6MDYgMTk5NiBNYXJ0aW4gdm9uIExvZXdpcyA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgotCi0JKiBbY29udHJvbHMvbWVudS5jXSBbaWYxNjMyL3VzZXIuc3BlY10gW3dpbmRvd3MvbWVzc2FnZS5jXQotCVJlcGxhY2UgUGVla01lc3NhZ2Ugd2l0aCBQZWVrTWVzc2FnZTE2LgotCi0JKiBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdW21pc2MvbWFpbi5jXQotCUdldFZlcnNpb24zMixHZXRWZXJzaW9uRXgzMkEsR2V0VmVyc2lvbkV4MzJXOiBuZXcgZnVuY3Rpb25zLgotCU1BSU5fUGFyc2VWZXJzaW9uOiBuZXcgZnVuY3Rpb24sIG5ldyBjb21tYW5kIGxpbmUgb3B0aW9uIC13aW52ZXIuCi0JR2V0VmVyc2lvbjogbW9kaWZpZWQgdG8gdGFrZSBjb21tYW5kIGxpbmUgYXJndW1lbnQgaW50byBhY2NvdW50LgotCi0JKiBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdIFt3aW4zMi9wcm9jZXNzLmNdCi0JRnJlZUxpYnJhcnkzMjogbmV3IGZ1bmN0aW9uLgotCVRsc0FsbG9jOiBpbml0aWFsaXplIFRscyB0byB6ZXJvLgotCUludGVybG9ja2VkSW5jcmVtZW50LEludGVybG9ja2VkRGVjcmVtZW50LEludGVybG9ja2VkRXhjaGFuZ2U6IG5ldwotCWZ1bmN0aW9ucy4KLQotCSogW2lmMTYzMi9rZXJuZWwzMi5zcGVjXQotCVNldEVycm9yTW9kZSxHZXRBY3RpdmVXaW5kb3c6IG5ldyByZWxheXMgdG8gZXhpc3RpbmcgZnVuY3Rpb25zLgotCi0JKiBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdW3dpbjMyL3VzZXIzMi5jXQotCVBlZWtNZXNzYWdlMzJBLFBlZWtNZXNzYWdlMzJXOiBuZXcgZnVuY3Rpb25zLgotCi0JKiBbaW5jbHVkZS9zdHJ1Y3QzMi5oXVtpbmNsdWRlL3dpbmRvd3MuaF0KLQlNb3ZlZCBNU0czMiB0byB3aW5kb3dzLmguCi0JUmVuYW1lZCBNU0cgdG8gTVNHMTYuCi0JTW9kaWZpZWQgcHJvdG90eXBlcyB0byB1c2UgTVNHMTYKLQotCSogW2luY2x1ZGUvd2luYmFzZS5oXQotCU9TVkVSU0lPTklORk8zMkEsT1NWRVJTSU9OSU5GTzMyVzogbmV3IHN0cnVjdHVyZXMuCi0KLVN1biBKdW4gIDkgMjA6NTM6MzAgMTk5NiAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+Ci0KLQkqIFtpZjE2MzIvTWFrZWZpbGUuaW5dIFtsb2FkZXIvYnVpbHRpbi5jXQotCXZlcnNpb24uZGxsLGx6MzIuZGxsIGFkZGVkLgotCi0JKiBbaW5jbHVkZS9semV4cGFuZC5oXSBbaWYxNjMyL2x6MzIuc3BlY10gW2lmMTYzMi9semV4cGFuZC5zcGVjXQotCSAgW21pc2MvbHpleHBhbmQuY10KLQlsejMyLmRsbCBhZGRlZC4KLQlNb2RpZmllZCB0byBuZXcgZnVuY3Rpb24gbmFtaW5nIHN0YW5kYXJkLgotCi0JKiBbaW5jbHVkZS92ZXIuaF0gW2lmMTYzMi92ZXIuc3BlY10gW2lmMTYzMi92ZXJzaW9uLnNwZWNdIFttaXNjL3Zlci5jXQotCXZlcnNpb24uZGxsIGFkZGVkICh3aW4zMiB2ZXJzaW9uIG9mIHZlci5kbGwpLgotCU1vZGlmaWVkIHRvIG5ldyBmdW5jdGlvbiBuYW1pbmcgc3RhbmRhcmQuCi0JVXNlIHJlZ2lzdHJ5IHRvIGxvb2sgdXAgYSBMT0NBTEUgbGFuZ2lkcyB0b28uCi0JKFZlckluc3RhbGxGaWxlLFZlckZpbmRGaWxlIHN0aWxsIHN0dWJzKQotCi1GcmkgSnVuICA3IDIwOjQwOjIwIDE5OTYgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+Ci0KLQkqIFtmaWxlcy9maWxlLmNdCi0JQWRkZWQgYSB3YXJuaW5nIGlmIEdldFRlbXBGaWxlTmFtZSgpIGdldHMgYSBiYWQgZHJpdmUgcGFyYW1ldGVyLgotCi0JKiBbbWlzYy9jb21tZGxnLmNdCi0JQ2hhbmdlZCBmaWxlIGxpc3Rib3ggY29sb3IgdG8gZ3JheSBpbiBTYXZlRmlsZSBkaWFsb2cgCi0JKGp1c3QgbGlrZSBXaW5kb3dzIGRvZXMgdGhpcykuCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVdlZCBKdW4gIDUgMjA6MTM6NTQgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+Ci0KLQkqIFtjb250cm9scy9idXR0b24uY10gW2NvbnRyb2xzL2xpc3Rib3guY10KLQlGaXhlZCB3UGFyYW0gb2YgV01fRFJBV0lURU0gbWVzc2FnZS4KLQotCSogW2lmMTYzMi9NYWtlZmlsZS5pbl0gW2xvYWRlci9idWlsdGluLmNdCi0JUmVtb3ZlIFdQUk9DUzMyIERMTCwgYXMgdGhlIHJlbGF5IGNvZGUgY2FuIGNhbGwgV2luZSByb3V0aW5lcwotCWRpcmVjdGx5LgotCi0JKiBbbG9hZGVyL21vZHVsZS5jXSBbbG9hZGVyL25lX2ltYWdlLmNdCi0JRml4ZWQgaW5pdGlhbCBzdGFjayBsYXlvdXQgZm9yIHNlbGYtbG9hZGluZyBtb2R1bGVzLgotCi0JKiBbdG9vbHMvYnVpbGQuY10KLQlGaXhlZCBkYXRhIHNlZ21lbnQgYnVpbGRpbmcgZm9yIFdpbjE2IG1vZHVsZXMuCi0KLQkqIFt3aW5kb3dzL2RlZmRsZy5jXQotCUltcGxlbWVudGVkIFdpbjMyIHZlcnNpb25zIG9mIERlZkRsZ1Byb2MoKS4KLQotCSogW3dpbmRvd3MvZGlhbG9nLmNdCi0JTWVyZ2VkIFdpbjE2IGFuZCBXaW4zMiBkaWFsb2cgY29kZS4KLQlBZGRlZCBzdXBwb3J0IGZvciBjb250cm9sIGV4dHJhIGRhdGEgaW4gZGlhbG9nIGl0ZW0gdGVtcGxhdGUuCi0KLQkqIFt3aW5kb3dzL3dpbi5jXQotCVVuaWZpZWQgV2luMTYgYW5kIFdpbjMyIHZlcnNpb25zIG9mIENyZWF0ZVdpbmRvdygpLgotCUltcGxlbWVudGVkIFdpbjMyIHZlcnNpb24gb2YgR2V0V2luZG93TG9uZygpLgotCi0JKiBbd2luZG93cy93aW5wcm9jLmNdCi0JQ2hhbmdlZCB0aGUgaW1wbGVtZW50YXRpb24gb2Ygd2luZG93IHByb2NlZHVyZXMsIHNvIHRoYXQgMTYtYml0Ci0Jd2lucHJvY3MgYXJlIHZhbGlkIHNlZ21lbnRlZCBwb2ludGVycy4KLQotU3VuIEp1biAgMiAxNjozOTo0NiAxOTk2ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KLQotCSogW21pc2MvcmVnaXN0cnkuY10KLQlGaXhlZCBhbm90aGVyIGJ1ZyBpbiB0aGUgdzk1IGxvYWRlci4gUXVpZXRlbmVkIHNvbWUgZGVidWcgb3V0cHV0LgotCi1TdW4gSnVuICAyIDEwOjAwOjIyIDE5OTYgIFVscmljaCBTY2htaWQgIDx1c2NobWlkQG1haWwuaGgucHJvdmkuZGU+Ci0KLQkqIFt3aW5kb3dzL3dpbnByb2MuY10KLQlCdWcgZml4OiBXTV9QQVJFTlROT1RJRlk6IGRvbid0IGZhbGwgdGhyb3VnaCB0byBXTV9TRVRURVhULgotCi1TYXQgSnVuICAxIDEyOjM3OjIyIDE5OTYgIFRyaXN0YW4gVGFycmFudCA8dHN0QHN0aGluYy5kZW1vbi5jby51az4KLQotCSogW3Jlc291cmNlcy9UT0RPXSBbcmVzb3VyY2VzL3N5c3Jlc19JdC5yY10KLQlVcGRhdGVkIGZvbnQgZGlhbG9nIGJveC4KLQotVGh1IE1heSAzMCAyMTowNToxOSAxOTk2ICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgotCi0JKiBbaW5jbHVkZS9jb21tZGxnLmhdIFttaXNjL2NvbW1kbGcuY10KLQlDaG9vc2VGb250KCkgYW5kIENob29zZUNvbG9yKCk6IAotCUJ1Z2ZpeGVzIGFuZCBhZGRlZCBtb3JlIHN1cHBvcnQgZm9yIHNvbWUgQ0ZfKiBhbmQgQ0NfKiBmbGFnczogCi0JZGlhbG9nIHRlbXBsYXRlcyBhbmQgZm9udCBzaXplIGNvbnRyb2wuCi0JQnVnZml4IGluIHN0cnVjdHVyZSBkZWZpbml0aW9uIG9mIENIT09TRUNPTE9SIGRlZmluaXRpb24uCi0KLQkqIFtpcGMvZGRlX3Byb2MuY10gW3dpbmRvd3MvZXZlbnQuY10KLQlSZXBsYWNlZCBTZW5kTWVzc2FnZSB3aXRoIFNlbmRNZXNzYWdlMTYgYW5kIGFkZGVkIGluY2x1c2lvbiBvZgotIAlkZGVfcHJvYy5oIGZvciBlcnJvci1mcmVlIGNvbXBpbGF0aW9uIG9mIGlwYyBtb2R1bGUuCi0KLVRodSBNYXkgMzAgMTk6MDA6MDAgMTk5NiAgQWxleCBLb3JvYmthIDxhbGV4QHBobTMwLnBoYXJtLnN1bnlzYi5lZHU+Ci0KLQkqIFt3aW5kb3dzL3Njcm9sbC5jXQotCU1hZGUgU2Nyb2xsREMgdG8gc2F2ZS9yZXN0b3JlIGN1cnJlbnQgY2xpcHBpbmcgcmVnaW9uLgotCi0JKiBbbWlzYy9jbGlwYm9hcmQuY10gW3dpbmRvd3MvZXZlbnQuY10KLQlJbXBsZW1lbnRlZCBtb3N0IG9mIHRoZSBwcmV2aW91c2x5IG1pc3NpbmcgZmVhdHVyZXMgKG5vdCB0ZXN0ZWQpLCAKLQlpbXByb3ZlZCB0ZXh0IHBhc3RpbmcgZnJvbS90byBYLiAKLQotCSogW2lmMTYzMi91c2VyLnNwZWNdIFtpZjE2MzIvZ2RpLnNwZWNdIFtvYmplY3RzL2RjLmNdCi0JICBbb2JqZWN0cy9nZGlvYmouY10gW29iamVjdHMvY2xpcHBpbmcuY10gW3dpbmRvd3MvZGNlLmNdCi0JICBbd2luZG93cy93aW5wb3MuY10gW3dpbmRvd3MvcGFpbnRpbmcuY10KLQlVcGRhdGVkIERDRSBjb2RlLCBpbXBsZW1lbnRlZCBkeW5hbWljIGludmFsaWRhdGlvbiBvZiBvd25lZCBEQ3MuCi0JVGhpcyBmaXhlcyBhIGxvdCBvZiBwcm9ibGVtcyB3aXRoIHNjcm9sbGluZyBpbiBXaW5Xb3JkLiBOb3QKLQlzdXJlIGFib3V0IHRoZSBlZmZlY3Qgb24gLWRlc2t0b3AuCi0KLVdlZCBNYXkgMjkgMjM6MzU6NDQgMTk5NiAgSnVra2EgSWl2b25lbiA8aWl2b25lbkBjYy5oZWxzaW5raS5maT4KLQotCSogW3dpbjMyL3RpbWUuY10gW2lmMTYzMi9rZXJuZWwzMi5zcGVjXQotCUFkZGVkIFNldFN5c3RlbVRpbWUgYW5kIFNldFRpbWVab25lSW5mb3JtYXRpb24uCi0KLQkqIFtpZjE2MzIva2VybmVsMzIuc3BlY10KLQlBZGRlZCBsc3RyY2F0LCBsc3RyY2F0QSwgbHN0cmNtcCwgbHN0cmNtcEEsIGxzdHJjcHksIGxzdHJsZW4uCi0KLQkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KLQlBZGRlZCBTWVNURU1fUE9XRVJfU1RBVFVTIHN0cnVjdHVyZSBhbmQgcHJvdG90eXBlcyBmb3IKLQlHZXRTeXN0ZW1Qb3dlclN0YXR1cywgU2V0U3lzdGVtUG93ZXJTdGF0ZSwgU2V0U3lzdGVtVGltZS4KLQotCSogW2luY2x1ZGUva2VybmVsMzIuaF0KLQlBZGRlZCBhIHByb3RvdHlwZSBmb3IgU2V0VGltZVpvbmVJbmZvcm1hdGlvbi4KLQotCSogW3dpbjMyL2Vudmlyb25tZW50LmNdIFtpZjE2MzIva2VybmVsMzIuc3BlY10KLQlBZGRlZCBHZXRTeXN0ZW1Qb3dlclN0YXR1cyBhbmQgU2V0U3lzdGVtUG93ZXJTdGF0ZSBzdHVicy4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVHVlIE1heSAyOCAxOTozNjozNiAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KLQotCSogW2NvbnRyb2xzL2NvbWJvLmNdCi0JRGVzdHJveSB0aGUgbGlzdGJveCBhbmQgZWRpdCBjb250cm9sIHdoZW4gZGVzdHJveWluZyB0aGUKLQljb21iby4gVGhpcyBzaG91bGQgcHJldmVudCBjcmFzaGVzIG9uIGFwcGxpY2F0aW9uIGV4aXQuCi0KLQkqIFttaXNjL3N5c3RlbS5jXSBbaWYxNjMyL3N5c3RlbS5zcGVjXQotCUltcGxlbWVudGVkIElucXVpcmVTeXN0ZW0oKS4KLQotCSogW2xvYWRlci90YXNrLmNdIFt3aW5kb3dzL21lc3NhZ2UuY10gW3dpbmRvd3MvcXVldWUuY10KLQlGaXJzdCBhdHRlbXB0IGF0IGludGVyLXRhc2sgU2VuZE1lc3NhZ2UoKS4gU3RpbGwgaGFzIGEgbG90IG9mCi0JcHJvYmxlbXMuCi0KLVR1ZSBNYXkgMjggMTQ6MjY6MDQgMTk5NiAgUGV0ZXIgQmFqdXN6ICA8aHlwLXhAaW5mLmJtZS5odT4KLQotCSogW3dpbmRvd3MvbWRpLmNdCi0JRml4ZWQgTURJVGlsZSB3aXRoIGljb25pYyBjaGlsZHJlbi4KLQotTW9uIE1heSAyNyAyMDoyODoxOCAxOTk2ICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgotCi0JKiBbbWlzYy9jb21tZGxnLmNdCi0JQ2hvb3NlRm9udCBkaWFsb2c6Ci0JLSBjb21wbGV0ZSByZXdyaXRlIG9mIEZvbnRGYW1pbHlFbnVtUHJvYygpIGFuZCBGb250U3R5bGVFbnVtUHJvYygpCi0JICBub3QgcmVhbCBhdmFpbGFibGUgZm9udCB0eXBlcyAoZS5nLiAiQm9sZCIpIGNhbiBub3Qgc2VsZWN0ZWQKLQktIHN1cHBvcnRpbmcgbW9yZSBDRl9MSU1JVFNJWkUtIGFuZCBDRl8uLi5PTkxZLSBmbGFncwotCi0JKiBbb2JqZWN0cy9mb250LmNdCi0JSW4gRk9OVF9NYXRjaEZvbnQgcGVyZm9ybSBjaGVjayBpZiAibGZGYWNlTmFtZSIgaXMgZmFtaWx5IGZyb20gWDExCi0Jb25seSBpZiAibGZGYWNlTmFtZSIgaXMgYSB3aW5kb3dzIGZvbnQgZmFtaWx5IHRoZW4gZG8gYSBjYWxsIG9mCi0JRk9OVF9UcmFuc2xhdGVOYW1lKCkgOiB0aGlzIHJlc3VsdHMgaW4gYmV0dGVyIGZvbnQgc2VsZWN0aW9ucyBpbiAKLQlDaG9vc2VGb250KCkgb3IgYXBwbGljYXRpb25zIGxpa2UgY2hhcm1hcC5leGUgb3Igd3JpdGUuZXhlLgotCUFkZGVkIGEgUGFyc2VGb250UGFybXMoKSBjYWxsIGlmIG5lY2Vzc2FyeSBpbiBmdW5jdGlvbiAKLQlGT05UX01hdGNoRm9udCgpOiB3ZSBuZWVkIGEgZm9udCBuYW1lIGFzIGJhc2lzIGZvciBHZXRUZXh0RmFjZSgpIAotCWV2ZW4gaWYgdGhlcmUgaXNuJ3Qgb25lLi4uCi0KLQkqIFtyZXNvdXJjZXMvVE9ET10KLQlJbnZlbnRvcnkgb2YgcmVzb3VyY2UgdHJhbnNsYXRpb25zIGluIHN5c3Jlc18/Py5yYwotCi1GcmkgTWF5IDI0IDE2OjMzOjI4IDE5OTYgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgotCi0JKiBbbWlzYy9yZWdpc3RyeS5jXQotCV93OTVfbG9hZHJlZzogdXNlIG9mZnNldCB0byBkZXRlcm1pbmUgbmV4dCBSR0RCIHBvc2l0aW9uIHRvby4KLQotVGh1IE1heSAyMyAxOTozNTozOCAxOTk2ICBHcmVnIEtyZWlkZXIgPGtyZWlkZXJAbmF0bGFiLnJlc2VhcmNoLnBoaWxpcHMuY29tPgotCi0JKiBbY29udHJvbHMvY29tYm8uY10KLQlGaXhlZCBzaXplIG9mIGNvbWJvLCBsYm94LCBhbmQgYnV0dG9uIChsYiBzb21ldGltZXMgb2ZmIGJ5IDIgcGl4ZWxzKS4KLQotCSogW21pc2MvbWFpbi5jXQotCVJlc3VsdCBvZiBvcHRpb24gIi1maXhlZG1hcCIgaXMgdG8gdHVybiBmbGFnIG9uLgotCi1UaHUgTWF5IDIzIDE5OjE1OjQxIDE5OTYgIFJvbmFuIFdhaWRlICA8cm9vdEB3YWlkZXIuaWU+Ci0KLQkqIFttaXNjL3NoZWxsLmNdCi0JU2hlbGxFeGVjdXRlIGFuZCBGaW5kRXhlY3V0YWJsZSBub3cgYm90aCB1c2UgY29tbW9uIGNvZGUgdG8KLQlkZXRlcm1pbmUgdGhlIHJlcXVpcmVkIGV4ZWN1dGFibGUgZmlsZS4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVHVlIE1heSAyMSAxNDowNjowNyAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KLQotCSogW2NvbnRyb2xzL2J1dHRvbi5jXQotCU1hZGUgQnV0dG9uV25kUHJvYyBhIDMyLWJpdCB3aW5kb3cgcHJvY2VkdXJlLgotCi0JKiBbY29udHJvbHMvZGVza3RvcC5jXQotCU1hZGUgRGVza3RvcFduZFByb2MgYSAzMi1iaXQgd2luZG93IHByb2NlZHVyZS4KLQlBZGRlZCBoYW5kbGluZyBvZiBXTV9TRVRDVVJTT1IuCi0KLQkqIFtjb250cm9scy9tZW51LmNdCi0JQWxsb2NhdGUgbWVudSBpdGVtcyBhbmQgc3RyaW5ncyBvbiB0aGUgMzItYml0IHN5c3RlbSBoZWFwLgotCUltcGxlbWVudGVkIFdpbjMyIHZlcnNpb25zIGZvciBDaGFuZ2VNZW51LCBJbnNlcnRNZW51LCBNb2RpZnlNZW51LAotCUFwcGVuZE1lbnUgYW5kIExvYWRNZW51SW5kaXJlY3QuCi0KLQkqIFtjb250cm9scy93aWRnZXRzLmNdCi0JQWRkZWQgcG9zc2liaWxpdHkgdG8gaGF2ZSAzMi1iaXQgYnVpbHQtaW4gY2xhc3Nlcy4KLQotCSogW2ZpbGVzL2RyaXZlLmNdCi0JSW1wbGVtZW50ZWQgR2V0TG9naWNhbERyaXZlKCkgYW5kIEdldExvZ2ljYWxEcml2ZVN0cmluZ3MoKS4KLQotCSogW21pc2Mvc3B5LmNdIFtpbmNsdWRlL3NweS5oXQotCUFkZGVkIHN1cHBvcnQgZm9yIHNweWluZyBXaW4zMiBtZXNzYWdlcy4KLQotCSogW2xvYWRlci9idWlsdGluLmNdCi0JRml4ZWQgYnVnIGluIC1kbGwgb3B0aW9uIHBhcnNpbmcuCi0KLQkqIFttZW1vcnkvbG9jYWwuY10KLQlBZGRlZCBiYWNrIHRoZSBjaGFuZ2UgYnkgSHV3IEQuIE0uIERhdmllcyB0byBmcmVlIHRoZSBibG9jayBpbgotCUxvY2FsUmVhbGxvYygpIGJlZm9yZSBhbGxvY2F0aW5nIHRoZSBuZXcgb25lLgotCi0JKiBbb2JqZWN0cy9iaXRtYXAuY10gW29iamVjdHMvY3Vyc29yaWNvbi5jXSBbb2JqZWN0cy9vZW1iaXRtYXAuY10KLQlGaXhlZCBidWcgaW4gYml0bWFwIHNpemUgdGhhdCBjYXVzZWQgbWVtb3J5IGNvcnJ1cHRpb24gZm9yIDI0YnBwLgotCi0JKiBbd2luZG93cy9kZWZ3bmQuY10KLQlJbXBsZW1lbnRlZCBXaW4zMiB2ZXJzaW9uIG9mIERlZldpbmRvd1Byb2MoKS4KLQotCSogW3dpbmRvd3MvZGlhbG9nLmNdCi0JSW1wbGVtZW50ZWQgV2luMzIgdmVyc2lvbiBvZiBTZW5kRGxnSXRlbU1lc3NhZ2UsCi0JR2V0L1NldERsZ0l0ZW1UZXh0IGFuZCBHZXQvU2V0RGxnSXRlbUludC4KLQotCSogW3dpbmRvd3MvbWRpLmNdCi0JSW1wbGVtZW50ZWQgV2luMzIgdmVyc2lvbiBvZiBEZWZGcmFtZVByb2MoKSBhbmQgRGVmTURJQ2hpbGRQcm9jKCkuCi0JRG9uJ3QgbWFrZSBhIGNvcHkgb2YgdGhlIE9CTSBiaXRtYXBzIGZvciBldmVyeSBNREkgd2luZG93LgotCi0JKiBbd2luZG93cy9tZXNzYWdlLmNdCi0JSW1wbGVtZW50ZWQgV2luMzIgdmVyc2lvbiBvZiBTZW5kTWVzc2FnZSgpLgotCQotCSogW3dpbmRvd3Mvd2lucHJvYy5jXSBbd2luZG93cy9jbGFzcy5jXSBbd2luZG93cy93aW4uY10KLQlOZXcgc2NoZW1lIGZvciAzMi1iaXQgd2luZG93IHByb2NlZHVyZXMgdG8gcmVwbGFjZSBhbGlhc2VzLiBBbGwKLQkzMi1iaXQgd2luZG93IHByb2NlZHVyZSBnZXQgYSAxNi1iaXQgYWRkcmVzcyBwb2ludGluZyB0byBhCi0JV0lORE9XUFJPQyBzdHJ1Y3R1cmUuCi0JSW1wbGVtZW50ZWQgQW5zaTwtPlVuaWNvZGUgdHJhbnNsYXRpb24gZm9yIENhbGxXaW5kb3dQcm9jKCkuCi0JQWRkZWQgdHJhbnNsYXRpb24gb2YgV01fRFJBV0lURU0gYmV0d2VlbiBXaW4xNiBhbmQgV2luMzIuCi0KLQkqIFt3aW5kb3dzL3dpbi5jXSBbaW5jbHVkZS9jYWxsYmFjay5oXQotCUFkZGVkIHVnbHkgaGFjayB0byBidWlsZCBDUkVBVEVTVFJVQ1Qgb24gdGhlIHN0YWNrIHdoZW4gc2VuZGluZwotCVdNX05DQ1JFQVRFLgotCUltcGxlbWVudGVkIFdpbjMyIHZlcnNpb24gb2YgR2V0L1NldFdpbmRvd1dvcmQvTG9uZyBhbmQKLQlHZXQvU2V0V2luZG93VGV4dC4KLQkKLUZyaSBNYXkgMTcgMTA6MjA6MTYgMTk5NiAgQWxicmVjaHQgS2xlaW5lICA8a2xlaW5lQGFrLnNheC5kZT4KLQotCSogW2NvbnRyb2xzL2J1dHRvbi5jXQotCUF2b2lkIGdyYXkgdGV4dCBvbiBncmF5IGJhY2tncm91bmQgaW4gZGlzYWJsZWQgcHVzaCBidXR0b25zCi0JdXNpbmcgYSBiL3cgcmFzdGVyIGFuZCBzb21lIHJhc3RlciBvcGVyYXRpb25zIChQYXRCbHQsQml0Qmx0KS4KLQotCSogW29iamVjdHMvdGV4dC5jXQotCURyYXdUZXh0KCk6IGRvbid0IGRyYXcgYW4gdW5kZXJiYXIgYW55bW9yZSBpZiBEVF9DQUxDUkVDVCBpcyBzZXQuCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRodSBNYXkgMTYgMTM6MzU6MzEgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+Ci0KLQkqIFsqLyouY10KLQlSZW5hbWVkIFJFQ1QsIFBPSU5UIGFuZCBTSVpFIHN0cnVjdHVyZXMgdG8gUkVDVDE2LCBQT0lOVDE2IGFuZAotCVNJWkUxNi4gSW1wbGVtZW50ZWQgV2luMzIgdmVyc2lvbiBvZiBtb3N0IGZ1bmN0aW9ucyB0aGF0IHRha2UKLQl0aGVzZSB0eXBlcyBhcyBwYXJhbWV0ZXJzLgotCi0JKiBbY29uZmlndXJlXQotCVBhdGNoZWQgYXV0b2NvbmYgdG8gYXR0ZW1wdCB0byBjb3JyZWN0bHkgZGV0ZWN0IC1sbnNsIGFuZAotCS1sc29ja2V0LiBQbGVhc2UgY2hlY2sgdGhpcyBvdXQuCi0JCi0JKiBbY29udHJvbHMvYnV0dG9uLmNdCi0JQWRkZWQgc3VwcG9ydCBmb3IgV2luMzIgQk1fKiBtZXNzYWdlcy4KLQotCSogW2NvbnRyb2xzL21lbnUuY10KLQlBdm9pZCBzZW5kaW5nIGV4dHJhIFdNX01FTlVTRUxFQ1QgbWVzc2FnZXMuIFRoaXMgYXZvaWRzIGNyYXNoZXMKLQl3aXRoIEV4Y2VsLgotCi0JKiBbbWVtb3J5LmhlYXAuY10gW2luY2x1ZGUvaGVhcC5oXQotCUFkZGVkIHN1cHBvcnQgZm9yIFNFR1BUUnMgaW4gV2luMzIgaGVhcHMuIEFkZGVkIGEgZmV3IG1hY3JvcyB0bwotIAltYWtlIHVzaW5nIFNFR1BUUnMgZWFzaWVyLiBUaGV5IGFyZSBhIGJpdCBzbG93ZXIgdGhhbiBNQUtFX1NFR1BUUiwKLSAJYnV0IHRoZXkgd29yayB3aXRoIFdpbjMyLgotCi0JKiBbbWVtb3J5L2F0b20uY10KLQlJbXBsZW1lbnRlZCBXaW4zMiBhdG9tIGZ1bmN0aW9ucy4KLQotCSogW21lbW9yeS9sb2NhbC5jXQotCUZpeGVkIExvY2FsUmVBbGxvYygpIGNoYW5nZXMgdG8gYXZvaWQgY29weWluZyB0aGUgd2hvbGUgYmxvY2sgdHdpY2UuCi0KLQkqIFt3aW4zMi9tZW1vcnkuY10KLQlVc2UgL2Rldi96ZXJvIGluc3RlYWQgb2YgTUFQX0FOT04gZm9yIFZpcnR1YWxBbGxvYygpLgotCi0JKiBbd2luZG93cy9jbGFzcy5jXQotCVByb3Blcmx5IGltcGxlbWVudGVkIHRoZSBXaW4zMiBjbGFzcyBmdW5jdGlvbnMuCi0KLQkqIFt3aW5kb3dzL3dpbnByb2MuY10gKE5ldyBmaWxlKQotCU5ldyBmaWxlIGhhbmRsaW5nIHRoZSBtZXNzYWdlIHRyYW5zbGF0aW9uIGJldHdlZW4gV2luMTYgYW5kIFdpbjMyLgotCi1Nb24gTWF5IDEzIDE4OjAwOjAwIDE5OTYgQWxleCBLb3JvYmthIDxhbGV4QHBobTMwLnBoYXJtLnN1bnlzYi5lZHU+Ci0KLQkqIFt3aW5kb3dzL21kaS5jXSBbd2luZG93cy9tZW51LmNdCi0JSW1wcm92ZWQgV01fTURJQ1JFQVRFIGFuZCBXTV9NRElDQVNDQURFIGhhbmRsaW5nLgotCi0JKiBbd2luZG93cy9ldmVudC5jXSBbb2JqZWN0cy9iaXRibHQuY10KLQlIYW5kbGUgR3JhcGhpY3NFeHBvc2UgZXZlbnQgZm9yIEJpdEJsdCBmcm9tIHNjcmVlbiB0byBzY3JlZW4uCi0KLQkqIFt3aW5kb3dzL2V2ZW50LmNdIFt3aW5kb3dzL3dpbi5jXSBbd2luZG93cy9ub25jbGllbnQuY10KLQlCdW5jaCBvZiBmaXhlcyBmb3IgcHJvYmxlbXMgd2l0aCAtbWFuYWdlZC4KLQotCSogW3dpbmRvd3Mvd2luLmNdIFt3aW5kb3dzL3dpbnBvcy5jXQotCUNoYW5nZWQgY29uZGl0aW9ucyBmb3IgV01fU0laRSwgV01fTU9WRSwgYW5kIFdNX0dFVE1JTk1BWElORk8KLQlpbiBDcmVhdGVXaW5kb3cuCi0KLQkqIFt3aW5kb3dzL3dpbi5jXSBbd2luZG93cy9xdWV1ZS5jXSBbbWlzYy91c2VyLmNdCi0JRG8gbm90IHNlbmQgV01fUEFSRU5UTk9USUZZIHdoZW4gaW4gQXBwRXhpdCBhbmQgY2FsbCBXSF9TSEVMTAotCW9uIHdpbmRvdyBjcmVhdGlvbi9kZXN0cnVjdGlvbi4KLQotCSogW29iamVjdHMvcGFsZXR0ZS5jXQotCUNydWRlIFJlYWxpemVQYWxldHRlKCkuIEF0IGxlYXN0IHNvbWV0aGluZyBpcyB2aXNpYmxlIGluIEx2aWV3UHJvLgotCi1TdW4gTWF5IDEyIDAyOjA1OjAwIDE5OTYgIFRob21hcyBTYW5kZm9yZCA8dC5kLmcuc2FuZGZvcmRAcHJkcy1ncm4uZGVtb24uY28udWs+Ci0KLQkqIFtpZjE2MzIvZ2RpMzIuc3BlY10KLQlBZGRlZCBSZWN0YW5nbGUgKHVzZSB3aW4xNiB2ZXJzaW9uKS4KLQotCSogW2lmMTYzMi9rZXJuZWwzMi5zcGVjXQotCUFkZGVkIEdldFdpbmRvd3NEaXJlY3RvcnlBICh1c2Ugd2luMTYgR2V0V2luZG93c0RpcmVjdG9yeSkuCi0KLQkqIFtpZjE2MzIvdXNlcjMyLnNwZWNdCi0JQWRkZWQgR2V0U3ViTWVudSwgTW92ZVdpbmRvdywgU2V0U2Nyb2xsUG9zLCBTZXRTY3JvbGxSYW5nZSAodXNlIHdpbjE2Ci0JdmVyc2lvbnMpLgotCUFkZGVkIFNldFdpbmRvd3NIb29rRXhBIChlbXB0eSBzdHViIGZvciBub3cpLgotCi0JKiBbaW5jbHVkZS9oYW5kbGUzMi5oXQotCUNoYW5nZWQgI2luY2x1ZGUgPG1hbGxvYy5oPiB0byAjaW5jbHVkZSA8c3RkbGliLmg+IHRvIHByZXZlbnQKLQloYXRlIG1lc3NhZ2UgZnJvbSBGcmVlQlNEIGNvbXBpbGVyLgotCi0JKiBbd2luMzIvbmV3Zm5zLmNdCi0JQWRkZWQgbmV3IGZ1bmN0aW9uIFNldFdpbmRvd3NIb29rRXgzMkEgKGVtcHR5IHN0dWIgZm9yIG5vdykuCi0KLQkqIFt3aW4zMi91c2VyMzIuY10KLQlSZW1vdmVkIHJlZHVuZGFudCBkZWJ1Z2dpbmcgcHJpbnRmIHN0YXRlbWVudC4KLQotU3VuIE1heSAxMiAwMToyNDo1NyAxOTk2ICBIdXcgRC4gTS4gRGF2aWVzIDxoLmRhdmllczFAcGh5c2ljcy5veGZvcmQuYWMudWs+Ci0KLQkqIFttZW1vcnkvbG9jYWwuY10KLQlBdm9pZCBjcmVhdGluZyBhZGphY2VudCBmcmVlIGJsb2Nrcy4KLQlGcmVlIHRoZSBibG9jayBpbiBMb2NhbFJlQWxsb2MoKSBiZWZvcmUgYWxsb2NhdGluZyBhIG5ldyBvbmUuCi0JRml4ZWQgTG9jYWxSZUFsbG9jKCkgZm9yIGRpc2NhcmRlZCBibG9ja3MuCi0JCi1GcmkgTWF5IDEwIDIzOjA1OjEyIDE5OTYgIEp1a2thIElpdm9uZW4gPGlpdm9uZW5AY2MuaGVsc2lua2kuZmk+Ci0KLQkqIFtyZXNvdXJjZXMvc3lzcmVzX0ZpLnJjXQotCUNob29zZUZvbnQgYW5kIENob29zZUNvbG9yIGRpYWxvZ3MgdXBkYXRlZC4KLQotRnJpIE1heSAxMCAxNzoxOTozMyAxOTk2ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KLQotCSogW2ZpbGVzL2RyaXZlLmMsaWYxNjMyL2tlcm5lbC5zcGVjXQotCUdldEN1cnJlbnREaXJlY3RvcnkoKSxTZXRDdXJyZW50RGlyZWN0b3J5KCkgaW1wbGVtZW50ZWQuCi0KLQkqIFtpZjE2MzIvYWR2YXBpMzIuc3BlY10gW2lmMTYzMi9rZXJuZWwuc3BlY10gW2lmMTYzMi9zaGVsbC5zcGVjXQotCSAgW2luY2x1ZGUvd2luZG93cy5oXSBbaW5jbHVkZS93aW5yZWcuaF0gW2xvYWRlci9tYWluLmNdCi0JICBbbWlzYy9tYWluLmNdIFttaXNjL3NoZWxsLmNdIFttaXNjL3JlZ2lzdHJ5LmNdCi0JUmVnaXN0cnkgZml4ZXM6Ci0JLSBsb2FkcyB3aW45NSByZWdpc3RyeSBkYXRhYmFzZXMsCi0JLSBzYXZlIG9ubHkgdXBkYXRlZCBrZXlzIG9uIGRlZmF1bHQsCi0JLSBub3cgYWRoZXJzIHRvIHRoZSBuZXcgZnVuY3Rpb24gbmFtaW5nIHN0YW5kYXJkLAotCS0gbWlub3IgY2xlYW51cHMuCi0KLVR1ZSBNYXkgNyAyMjozNjoxMyAxOTk2ICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgotCi0JKiBbY29tYm8uY10KLQlBZGRlZCBXTV9DT01NQU5ELWhhbmRsaW5nIGZvciBpbnRlcmFjdGlvbiBiZXR3ZWVuIEVESVQgYW5kIENPTUJPTEJPWAotICAgICAgICBhbmQgc3luY2hyb25pemVkIG1pbmUgd2l0aCBHcmVnIEtyZWlkZXIncyB3b3Jrcy4KLQotCSogW2NvbW1kbGcuY10KLQlCdWdmaXggaW4gQ2hvb3NlRm9udDogZm9udCBzaXplIGhhbmRsaW5nLgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1Nb24gTWF5ICA2IDEyOjU2OjI2IDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgotCi0JKiBbREVWRUxPUEVSUy1ISU5UU10KLQlBZGRlZCBwYXJhZ3JhcGggb24gbmFtaW5nIGNvbnZlbnRpb25zIGZvciBXaW4xNi9XaW4zMi9XaW5lbGliLgotCi0JKiBbY29udHJvbHMvbWVudS5jXQotCUNyZWF0ZSBhIGRlZmF1bHQgc3lzdGVtIG1lbnUgdGhhdCBpcyB0aGUgc2FtZSBmb3IgYWxsIHdpbmRvd3MKLQlpbnN0ZWFkIG9mIG1ha2luZyBhIGNvcHkgZXZlcnkgdGltZS4KLQotCSogW2luY2x1ZGUvd2ludHlwZXMuaF0KLQlBZGRlZCBXSU5FTElCX05BTUUgYW5kIERFQ0xfV0lORUxJQl9UWVBFIG1hY3Jvcy4KLQlBZGRlZCB4eDE2IGFuZCB4eDMyIGRlZmluaXRpb25zIGZvciBtb3N0IHR5cGVzLiBHZW5lcmFsIGNsZWFuLXVwLgotCi0JKiBbbWVtb3J5L2dsb2JhbC5jXSBbbWVtb3J5L2xvY2FsLmNdIFsqLypdCi0JUmVuYW1lZCBHbG9iYWwgYW5kIExvY2FsIGhlYXAgZnVuY3Rpb25zIHRvIHh4eDE2LiBBZGRlZCBhbGwgeHh4MzIKLQl2ZXJzaW9ucyBvZiB0aGUgc2FtZSBmdW5jdGlvbnMuCi0KLQkqIFttZW1vcnkvc2VsZWN0b3IuY10KLQlNYXNrIG91dCBsb3dlciBiaXRzIG9mIHNlbGVjdG9yIGluIEZyZWVTZWxlY3RvcigpLgotCi0JKiBbbWlzYy9sc3RyLmNdCi0JRml4ZWQgd3ZzcHJpbnRmKCkuCi0KLQkqIFt3aW5kb3dzL2NsYXNzLmNdCi0JQ2hhbmdlZCB0aGUgY2xhc3Mgc3RydWN0dXJlIHRvIG1ha2UgV2luMzIgc3VwcG9ydCBlYXNpZXIuCi0KLQkqIFt3aW5kb3dzL2RlZnduZC5jXQotCUFkZGVkIGhhbmRsaW5nIG9mIFdNX0lOSVRNRU5VUE9QVVAgZm9yIHN5c3RlbSBtZW51IHRvIGdyYXkgb3V0Ci0JaW52YWxpZCBvcHRpb25zLgotCi0JKiBbd2luZG93cy93aW5wb3MuY10KLQlCdWcgZml4OiB0aGUgV0lORE9TUE9TIHN0cnVjdHVyZSBwb2ludGVyIGluIFdNX05DQ0FMQ1NJWkUgbXVzdCBiZQotCWEgU0VHUFRSLgotCi1TdW4gTWF5ICA1IDAzOjUxOjI2IDE5OTYgIEh1dyBELiBNLiBEYXZpZXMgPGguZGF2aWVzMUBwaHlzaWNzLm94Zm9yZC5hYy51az4KLQotCSogW21lbW9yeS9sb2NhbC5jXQotCUltcGxlbWVudGF0aW9uIG9mIG1vdmVhYmxlIGFuZCAocnVkaW1lbnRhcnkpIHN1cHBvcnQgZm9yCi0gCWRpc2NhcmRhYmxlIGxvY2FsIG1lbW9yeSwgcGx1cyBzZXZlcmFsIGJ1ZyBmaXhlcy4KLQotU2F0IE1heSAgNCAxODozMzozNSAxOTk2ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KLQotCSogW2luY2x1ZGUvd2luZG93cy5oXSBbd2luZG93cy93aW4uY10gW2lmMTYzMi91c2VyLnNwZWNdIAotCUZpbmRXaW5kb3dFeCgpIGltcGxlbWVudGVkIChzb21lb25lIHJlcG9ydGVkIGl0IHdhcyBtaXNzaW5nCi0JZm9yIEZyYW1lTWFrZXIgNC4xKS4KLQotCSogW2lmMTYzMi9rZXJuZWwzMi5zcGVjXSBbaWYxNjMyL3VzZXIzMi5zcGVjXSBbd2luMzIvbWVtb3J5LmNdCi0JICBbd2luMzIvcmVzb3VyY2UuY10KLQlNaXNjIHNtYWxsIHN0dWJzL3NtYWxsIGZ1bmN0aW9ucyB3aGljaCBicmluZyB3aW45NSBiaW5hcmllcwotCWZ1cnRoZXIgZG93biB0aGUgcm9hZC4gKElzQmFkQ29kZVB0ciwgTG9jYWxSZUFsbG9jLEdldEN1cnNvclBvcykKLQlTbWFsbCBmaXggaW4gV0lOMzJfTG9hZEFjY2VsZXJhdG9yc0EuCi0KLUZyaSBNYXkgIDMgMTk6NDM6MTIgMTk5NiAgRnJhbnMgdmFuIERvcnNzZWxhZXIgPGRvcnNzZWxAcnVsaG0xLkxlaWRlblVuaXYubmw+Ci0KLQkqIFtjb250cm9scy9lZGl0LmNdIFtjb250cm9scy9FRElULlRPRE9dCi0JQ2hhbmdlZCAvIGZpeGVkIHNvbWUgdHlwZXMgYW5kIHR5cGVjYXN0cy4KLQlGaXhlZCB0aGUgc2Nyb2xsYmFyIHJlc2V0IGFmdGVyIFdNX1NFVEhBTkRMRSAvIFdNX1NFVFRFWFQuCi0JQWRkZWQgaGVhcCBpbml0aWFsaXphdGlvbiBpbiBXTV9DUkVBVEUuCi0KLUZyaSBNYXkgIDMgMTk6MzA6MDIgMTk5NiAgR3JlZyBLcmVpZGVyIDxrcmVpZGVyQG5hdGxhYi5yZXNlYXJjaC5waGlsaXBzLmNvbT4KLQotCSogW2NvbnRyb2xzL2NvbWJvLmNdIFtjb250cm9scy9saXN0Ym94LmNdCi0JUGFzcyBXTV9bSFZdU0NST0xMIHRvIGxpc3Rib3gsIGJ1dCBub3QgY29tYm8uCi0JRG9uJ3QgdHJ5IHRvIHJlZHJhdyBub24tZXhpc3RhbnQgc2Nyb2xsIGJhcnMgKGNoYW5nZXMgZHdTdHlsZSBmbGFncykuCi0JQ29tYm8gYm94IGdldHMgYm9yZGVyLgotCUNvbWJvIGJveCBpbmNsdWRlcyBidXR0b24gKG90aGVyd2lzZSBidXR0b24gd29uJ3QgdHJpZ2dlciBkcm9wZG93bikuCi0JUHJvcGVyIGJvcmRlciBhcm91bmQgUmVjdEJ1dHRvbi4KLQlDaGVjayBzaXplIGNvbnNpc3RhbmN5IG9mIGNvbWJvLCBsaXN0Ym94LCBhbmQgYnV0dG9uIGFmdGVyIHJlc2l6aW5nIAotCW9yIGJlZm9yZSBwYWludGluZy4gIFRoZXNlIHJvdXRpbmVzIHN0aWxsIGFyZW4ndCBjb21wbGV0ZWx5IGNvcnJlY3QuCi0JTG9jYWxpemUgc2l6ZSBjaGVja3MgaW4gc2VwYXJhdGUgcm91dGluZXMuCi0JTGlzdGJveGVzIGFyZSB3aGl0ZS4KLQotVGh1IE1heSAgMiAxOToyMToyMyAxOTk2ICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgotCi0JKiBbY29udHJvbHMvY29tYm8uY11baW5jbHVkZS9jb21tZGxnLmhdW2luY2x1ZGUvY29tbWRsZy5jXQotCSAgW3Jlc291cmNlcy9zeXNyZXNfRGUucmNdW3Jlc291cmNlcy9zeXNyZXNfRW4ucmNdCi0JSW50cm9kdWNlZCBDaG9vc2VGb250IGRpYWxvZywgYnV0IG5lZWRlZCBzb21lIHBhdGNoZXMgaW4gCi0JaGFuZGxpbmcgb2YgY29tYm9ib3hlcyB3aXRoIGVkaXQgY29udHJvbHMuCi0KLVR1ZSBBcHIgMzAgMDA6MzM6MjcgMTk5NiAgVWxyaWNoIFNjaG1pZCAgPHVzY2htaWRAbWFpbC5oaC5wcm92aS5kZT4KLQotCSogW3Byb2dyYW1zL3dpbmhlbHAvKl0KLQlBZGRlZCBhIGhlbHAgdmlld2VyIGFuZCBhIHNpbXBsZSBgLmhscCcgdG8gYC5zZ21sJyBjb252ZXJ0ZXIuCi0KLU1vbiBBcHIgMjkgMTQ6MTc6NTcgMTk5NiAgVHJpc3RhbiBUYXJyYW50IDx0c3RAc3RoaW5jLmRlbW9uLmNvLnVrPgotCi0JKiBbcmVzb3VyY2VzL3N5c3Jlc18qLnJjXSBbbWlzYy9zaGVsbC5jXQotCU1vZGlmaWVkIHNpemUgb2YgIkFib3V0IiBkaWFsb2cgYm94ZXMuCi0KLVNhdCBBcHIgMjcgMTg6MTA6MTEgTWFydGluIHZvbiBMb2V3aXMgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KLQotCSogW2lmMTYzMi9NYWtlZmlsZS5pbl1bbG9hZGVyL2J1aWx0aW4uY10KLQljcnRkbGwuc3BlYywgbnRkbGwuc3BlYywgd3NvY2szMi5zcGVjOiBuZXcgZmlsZXMuCi0KLQkqIFtsb2FkZXIvcGVfaW1hZ2UuY10KLQlGaXggZXJyb3IgbWVzc2FnZSBpZiBpbXBvcnQgYnkgb3JkaW5hbCBmYWlsZWQuCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVN1biBBcHIgMjggMTQ6MzI6NDMgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+Ci0KLQkqIFtNYWtlZmlsZS5pbl0KLQlTdWJkaXIgbWVtb3J5IGlzIG5vdyBhbHNvIGNvbXBpbGVkIGZvciBXaW5lbGliLCBpbiBvcmRlciB0byBnZXQKLQl0aGUgV2luMzIgaGVhcCBmdW5jdGlvbnMuCi0KLQkqIFtpZjE2MzIvTWFrZWZpbGUuaW5dCi0JUmVuYW1lZCB3aW5wcm9jcyBhbmQgd2lucHJvY3MzMiB0byB3cHJvY3MgYW5kIHdwcm9jczMyIHRvIGF2b2lkCi0JRExMIG5hbWVzID4gOCBjaGFyYWN0ZXJzLgotCi0JKiBbbG9hZGVyL2J1aWx0aW4uY10gKE5ldyBmaWxlKQotCUdyb3VwZWQgYWxsIGJ1aWx0LWluIERMTHMgY29kZSBpbiBhIHNpbmdsZSBmaWxlLgotCi0JKiBbbWVtb3J5L2dsb2JhbC5jXQotCVVzZSB0aGUgV2luMzIgaGVhcCBjb2RlIGluc3RlYWQgb2YgbWFsbG9jKCkgdG8gYWxsb2NhdGUgbGluZWFyCi0JbWVtb3J5LiBUaGlzIHdpbGwgaGVscCB0ZXN0IHRoZSBoZWFwIGNvZGUuCi0KLQkqIFttZW1vcnkvbG9jYWwuY10KLQlGaXhlZCBGcmVlU2VsZWN0b3IoKSB0byBjbGVhciBEUyBhbmQgRVMgY29ycmVjdGx5IGZvciBodWdlIGJsb2Nrcy4KLQotCSogW3Rvb2xzL2J1aWxkLmNdIFtpZjE2MzIvcmVsYXkuY10KLQlSZW1vdmVkICdpZCcgZGlyZWN0aXZlIGluIHNwZWMgZmlsZXMuIEZvciByZWxheSBkZWJ1Z2dpbmcsIHRoZSBETEwKLQllbnRyeSBwb2ludCBpcyBub3cgY29tcHV0ZWQgZnJvbSB0aGUgQ1M6SVAgZW50cnkgcG9pbnQgYWRkcmVzcy4KLQlBZGRlZCAnaGVhcCcgZGlyZWN0aXZlIHRvIHNwZWNpZml5IGEgbG9jYWwgaGVhcCBmb3IgdGhlIERMTC4gVVNFUgotCWFuZCBHREkgaGVhcCBhcmUgbm93IGNyZWF0ZWQgdGhpcyB3YXkuCi0KLQkqIFt3aW5kb3dzL2NsYXNzLmNdIFtpbmNsdWRlL2NsYXNzLmhdCi0JQ2hhbmdlZCB0aGUgY2xhc3Mgc3RydWN0dXJlIHRvIHVzZSBwb2ludGVycyBpbnN0ZWFkIG9mIGhhbmRsZXMuCi0JQ2hhbmdlZCBHZXQvU2V0Q2xhc3NXb3JkL0xvbmcgdG8gdXNlIGEgc3dpdGNoIHN0YXRlbWVudDsgdGhpcwotCWFsbG93cyBjaGFuZ2luZyB0aGUgbGF5b3V0IG9mIHRoZSBDTEFTUyBzdHJ1Y3R1cmUuCi0KLQkqIFt3aW5kb3dzL3dpbi5jXSBbaW5jbHVkZS93aW4uaF0KLQlVc2UgYSBDTEFTUyAqIGluc3RlYWQgb2YgYSBoYW5kbGUgZm9yIHRoZSB3aW5kb3cgY2xhc3MuCi0KLVNhdCBBcHIgMjcgMTg6MTA6MTEgTWFydGluIHZvbiBMb2V3aXMgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KLQotCSogW2lmMTYzMi9rZXJuZWwzMi5zcGVjXSBbbWVtb3J5L2dsb2JhbC5jXQotCSAgW3dpbjMyL21lbW9yeS5jXSBbd2luMzIvcHJvY2Vzcy5jXQotCUdldFByb2Nlc3NBZmZpbml0eU1hc2ssR2xvYmFsTG9jayxJc0JhZFJlYWRQdHIsSXNCYWRXcml0ZVB0ciwKLQlMb2NhbExvY2ssU2V0VGhyZWFkQWZmaW5pdHlNYXNrOiBuZXcgcmVsYXlzLgotCi0JKiBbd2luMzIvY3Vyc29yaWNvbjMyLmNdCi0JUmV0dXJuIHNhbWUgaGFuZGxlIGlmIGEgY3Vyc29yIGlzIGxvYWRlZCBtdWx0aXBsZSB0aW1lcy4KLQotU2F0IEFwciAyNyAxNToxMzozNyAxOTk2ICBCYW5nIEp1biBZb3VuZyA8YmFuZ2p5QG5vd251cmkubm93Y29tLmNvLmtyPgotCi0JKiBbcmVzb3VyY2VzL3N5c3Jlc19Lby5yY10KLSAgICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgS29yZWFuIFtLb10gbGFuZ3VhZ2UuCi0KLUZyaSBBcHIgMjYgMDA6NDk6MDUgMTk5NiAgSHV3IEQuIE0uIERhdmllcyA8aC5kYXZpZXMxQHBoeXNpY3Mub3hmb3JkLmFjLnVrPgotCi0JKiBbb2JqZWN0cy9kYy5jXSBbb2JqZWN0cy9mb250LmNdCi0JRml4ZWQgcHJvYmxlbSB3aXRoIFNhdmVEQygpL1Jlc3RvcmVEQygpIGFuZCBmb250IGNhY2hlICd1c2VkJyBjb3VudC4KLQotCSogW29iamVjdHMvbWV0YWZpbGUuY10gW29iamVjdHMvZGN2YWx1ZXMuY10KLQlGaXhlZCBicm9rZW4gU2V0VGV4dEFsaWduKCkgb24gbWV0YWZpbGVzLgotCi0JKiBbb2JqZWN0cy9tZXRhZmlsZS5jXQotCURlbGV0ZSBvYmplY3RzIGluIGhhbmRsZSB0YWJsZSBhdCBlbmQgb2YgUGxheU1ldGFGaWxlKCkuCi0KLVdlZCBBcHIgMjQgMTk6MjE6MDEgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgotCi0JKiBbaWYxNjMyL3Zlci5zcGVjXSBbbWlzYy92ZXIuY10gW2luY2x1ZGUvdmVyLmhdIChOZXcgZmlsZXMpCi0JVkVSLkRMTCAocGFydGlhbGx5KSBpbXBsZW1lbnRlZCAoVmVyRmluZEZpbGUsVmVySW5zdGFsbEZpbGUpCi0JW0lmIGl0IGRvZXNuJ3Qgd29yayBmb3IgeW91LCB1c2UgLWRsbCAtdmVyIGFuZCByZXBvcnQgaXQgdG8gbWVdCi0KLQkqIFtpZjE2MzIvdXNlcjMyLnNwZWNdIFtpZjE2MzIva2VybmVsMzIuc3BlY10gW2lmMTYzMi9zaGVsbC5zcGVjXQotCSAgW2lmMTYzMi9zaGVsbDMyLnNwZWNdIFttaXNjL29sZTJubHMuY10gW3dpbmRvd3MvbWVzc2FnZS5jXQotCSAgW3dpbmRvd3MvZ3JhcGhpY3MuY10KLQlTaW1wbGUgd2luMzIgZnVuY3Rpb25zLCB3aGVyZSB3ZSBjYW4ganVzdCB1c2UgdGhlIHdpbjE2IGNvdW50ZXJwYXJ0LgotCU1pc2MuIHN0dWJzLiAKLQotCSogW21pc2MvbHN0ci5jXQotCVNvbWVvbmUgcmVwb3J0ZWQgYSBfbHN0cmxlbihOVUxMKS4gTlVMTCBpcyBhIHZhbGlkIGFyZ3VtZW50LiBGaXhlZC4KLQotCSogW21pc2MvcmVnaXN0cnkuY10KLQlTb21lIGFsbG9jbGVucyB3ZXJlIG9mZiBieSAxLCBvbmUgZG91YmxlIGZjbG9zZSgpIGZpeGVkLgotCVJlcXVlc3RpbmcgdmFsdWUgMCBvZiBhIGtleSB3aXRoIG5vIHZhbHVlcyByZXR1cm5zIGFuIGVycm9yIAotCShzaG91bGQgd2UgYWx3YXlzIHJldHVybiBhIG1hZGUgdXAgdmFsdWUgTlVMTD8gd2hhdCBkb2VzIHdpbjMuMT8pCi0KLVR1ZSBBcHIgMjMgMTc6MDA6MDAgMTk5NiBBbGV4IEtvcm9ia2EgPGFsZXhAcGhtMzAucGhhcm0uc3VueXNiLmVkdT4KLQotCSogW21pc2Mvc2hlbGwuY10KLQlJbXBsZW1lbnRlZCBGaW5kRW52aXJvbm1lbnRTdHJpbmcoKSwgRG9FbnZpcm9ubWVudFN1YnN0KCksCi0JRXh0cmFjdEljb24oKSwgSW50ZXJuYWxFeHRyYWN0SWNvbigpIGFuZCBFeHRyYWN0QXNzb2NpYXRlZEljb24oKS4KLQotCSogW21pc2MvdXNlci5jXQotCURvIGV4dGVuc2l2ZSBjbGVhbnVwIG9uIGFwcGxpY2F0aW9uIGV4aXQuCi0KLQkqIFt3aW5kb3dzL2hvb2suY10gW3dpbmRvd3Mvd2luLmNdIFt3aW5kb3dzL2NsYXNzLmNdCi0JQWRkZWQgbWlzY2VsbGFuZW91cyBjbGVhbnVwIHJvdXRpbmVzLgotCi0JKiBbY29udHJvbHMvbWVudS5jXQotCU1vcmUgZWZmaWNpZW50IHBvcHVwIG1lbnUgd2luZG93IGhhbmRsaW5nLgotCi1Nb24gQXByIDIyIDIxOjM1OjIyIDE5OTYgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+Ci0KLQkqIFtpbmNsdWRlL3dpbmRvd3MuaF1bb2JqZWN0cy9vZW1iaXRtYXAuY11baW5jbHVkZS9iaXRtYXBzL29ibV90cnR5cGVdCi0JQWRkZWQgIlRULWJpdG1hcCIgZm9yIGxhdGVyIHVzYWdlIGluIGEgQ2hvb3NlRm9udCgpIG93bmVyZHJhdyBjb21ib2JveC4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotU2F0IEFwciAyMCAyMzoyMzoxNiAxOTk2ICBSb2JlcnQgUG91bGlvdCA8a3J5bm9zQHFiYy5jbGljLm5ldD4KLQotCSogW3Jlc291cmNlcy9zeXNyZXNfRnIucmNdIFtyZXNvdXJjZXMvVE9ET10KLQlNYWRlIGNoYW5nZXMgZm9yIENob29zZV9Db2xvciBkaWFsb2cuCi0KLVNhdCBBcHIgMjAgMTU6NDM6NDkgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+Ci0KLQkqIFtjb250cm9scy9idXR0b24uY10KLQlGaXhlZCB0ZXN0IHRoYXQgZ290IG1pc2NvbXBpbGVkIGJ5IHNvbWUgb2xkIGdjYyB2ZXJzaW9ucy4KLQotCSogW21lbW9yeS9sb2NhbC5jXQotCUZpeGVkIHRoZSBsYXlvdXQgb2YgaGFuZGxlIHRhYmxlcyBzbyB0aGF0IG1vdmVhYmxlIGhhbmRsZSBlbnRyaWVzCi0JY2FuIGJlIGZyZWVkIG9uIExvY2FsRnJlZSgpLgotCUltcGxlbWVudGVkIExvY2FsRmxhZ3MoKSwgTG9jYWxDb3VudEZyZWUoKSwgTG9jYWxIYW5kbGVEZWx0YSgpIGFuZAotCUdldEhlYXBTcGFjZXMoKS4KLQotCSogW21pc2MvbWFpbi5jXSBbQU5OT1VOQ0VdCi0JVXBkYXRlIHRoZSBsaXN0IG9mIGNvbnRyaWJ1dG9ycy4gUGxlYXNlIGxldCBtZSBrbm93IGlmIEkgZm9yZ290Ci0Jc29tZW9uZS4KLQotRnJpIEFwciAxOSAyMDowNzoyMCAxOTk2ICBGcmFucyB2YW4gRG9yc3NlbGFlciAgPGRvcnNzZWxAcnVsaG0xLmxlaWRlbnVuaXYubmw+Ci0KLQkqIFtjb250cm9scy9lZGl0LmNdIFtjb250cm9scy9FRElULlRPRE9dCi0JRml4ZWQgRU1fU0VUSEFORExFIC8gV01fQ1JFQVRFIC8gRURJVF9NYWtlRmlyKCkgYnVmZmVyIGFsbG9jYXRpb24uCi0JRml4ZWQgRVNfTk9ISURFU0VMIC8gV01fTU9VU0VNT1ZFIC8gV01fTEJVVFRPTkRPV04gaW1wbGVtZW50YXRpb24uCi0JQWRkZWQgV01fRU5BQkxFIGltcGxlbWVudGF0aW9uIChncmF5IHRleHQpLgotCUZpeGVkIGJ1ZmZlciA+IDMyNzY3IGJ1Zy4KLQlGaXhlZCBhcmd1bWVudCB0eXBlcyAvIHR5cGVjYXN0aW5nLgotCUZhc3RlciBzZWxlY3Rpb24gKHJlKWRyYXdpbmcuCi0KLVRodSBBcHIgMTggMTM6Mzg6MjYgMTk5NiAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+Ci0KLQkqIFttaXNjL3JlZ2lzdHJ5LmNdIFtpbmNsdWRlL3dpbnJlZy5oXQotCUNoYW5nZWQgc2F2ZWZpbGUgZm9ybWF0IGFnYWluIHRvIGh1bWFuIHJlYWRhYmxlL2VkaXRhYmxlCi0JKFVOSUNPREUgY2hhcnMgPjB4ZmYgYXJlIHNwZWNpZmllZCBieSBcdVhYWFgsIGRhdGEgYnkgWFgpLgotCUhhcyBub3cgZ2xvYmFsIC8gbG9jYWwgcmVnaXN0cnkgZGF0YWJhc2VzIChpbmNsdWRpbmcgbWVyZ2luZyB0aGVtKS4KLQlIS0VZX0NMQVNTRVNfUk9PVCA9PSBIS0VZX0xPQ0FMX01BQ0hJTkVcXFNPRlRXQVJFXFxDbGFzc2VzLgotCUhLRVlfQ1VSUkVOVF9VU0VSID09IEhLRVlfVVNFUlNcXDxsb2dpbm5hbWU+LgotCi0JKiBbbWlzYy9jb21tLmNdCi0JQWxsb3cgIiAiIGFzIENPTXg6IC4uLiBzcGVjIGRlbGltaXRlciB0b28uCi0JKEFPTC1DRCBzZXR1cC5leGUgdHJpZXMgdG8gaW5pdGlhbGl6ZSBtb2RlbTIgYXMgIjk2MDAseCx4IHgiIChjYW4ndCAKLQlyZW1lbWJlciB0aGUgeCkuCi0KLVRodSBBcHIgMTggMDk6MDA6MDAgMTk5NiAgQWxleCBLb3JvYmthIDxhbGV4QHBobTMwLnBoYXJtLnN1bnlzYi5lZHU+Ci0KLQkqIFt3aW5kb3dzL21kaS5jXQotCU1pc2NlbGxhbmVvdXMgY2hhbmdlcy4KLQotCSogW3dpbmRvd3Mvd2lucG9zLmNdIAotCVVzZSBCaXRCbHQgd2hlbmV2ZXIgcG9zc2libGUgaW4gU2V0V2luZG93UG9zLgotCi0JKiBbd2luZG93cy9wYWludGluZy5jXQotCUZpeCBpbmNvbXBhdGliaWxpdGllcyB3aXRoIGhyZ25VcGRhdGUgYmVpbmcgMS4KLQotV2VkIEFwciAxNyAxOToxOToyMiAxOTk2ICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgotCi0JKiBbbWlzYy9jb21tZGxnLmNdCi0JTWFueSBidWdmaXhlcyBpbiBDaG9vc2VDb2xvciBkaWFsb2cuCi0JQWRkZWQgYSB1c2VyIGRlZmluZWQgZGlhbG9nIHRpdGxlIGluIEZpbGVPcGVuLS9GaWxlU2F2ZS0gZGlhbG9nLgotCi0JKiBbbWlzYy9jb21tZGxnLmNdW2luY2x1ZGUvY29tbWRsZy5oXQotCSAgW2lmMTYzMi9jb21tZGxnLnNwZWNdW2lmMTYzMi93aW5wcm9jcy5zcGVjXQotCUludHJvZHVjZWQgZGlhbG9nLSwgY2FsbGJhY2stIGFuZCBlbnVtLSBzdHViIGZ1bmN0aW9ucwotCWZvciBDaG9vc2VGb250IGRpYWxvZwotCi1XZWQgQXByIDE3IDE5OjA4OjM4IDE5OTYgIE5pZWxzIGRlIENhcnBlbnRpZXIgIDxuaWVsc0BjaW5keS5ldC50dWRlbGZ0Lm5sPgotCi0JKiBbb2JqZWN0cy9tZXRhZmlsZS5jXSBbaW5jbHVkZS9tZXRhZmlsZS5oXSBbaWYxNjMyL2dkaS5zcGVjXQotCUltcGxlbWVudGVkIEVudW1NZXRhRmlsZSBhbmQgQ29weU1ldGFGaWxlLiBSZW1vdmVkIE1FVEFGSUxFIHN0cnVjdC4KLQlJbXBsZW1lbnRlZCBNRVRBX1NUUkVUQ0hESUIgaW4gUGxheU1ldGFGaWxlUmVjb3JkLCBzZXZlcmFsIGJ1ZyAKLQlmaXhlcy4KLQotCSogW3dpbmRvd3Mvd2lucG9zLmNdCi0JRG9uJ3QgdHJ5IHRvIGhpZGUgdGhlIHdpbmRvdyBpZiBpdCdzIGFscmVhZHkgaGlkZGVuLgotCi0JKiBbd2luZG93cy9tZXNzYWdlLmNdCi0JTGV0IE1TR19QZWVrSGFyZHdhcmVNc2cgZmlsbCB0aGUgbWVzc2FnZSBxdWV1ZSB3aXRoIGV2ZW50cyBpZgotCWl0J3MgZW1wdHkuCi0KLVdlZCBBcHIgMTcgMTc6NTQ6MDQgMTk5NiAgVHJpc3RhbiBUYXJyYW50IDx0c3RAc3RoaW5jLmRlbW9uLmNvLnVrPgotCi0JKiBbcmVzb3VyY2VzL3N5c3Jlc19JdC5yY10KLQlVcGRhdGVkIHRvIHN1cHBvcnQgdGhlIG5ldyBDSE9PU0VfQ09MT1JfRElBTE9HLgotCi1UdWUgQXByIDE2IDExOjUwOjAwIDE5OTYgIEFuYW5kIEt1bXJpYSA8YWt1bXJpYUBvemVtYWlsLmNvbS5hdT4KLQotCSogW2lmMTYzMi9NYWtlZmlsZV0gW2lmMTYzMi9yZWxheS5jXSBbaWYxNjMxL3czMnN5cy5zcGVjXQotCSAgW2luY2x1ZGUvdzMyc3lzLmhdIFtpbmNsdWRlL2RsbHMuaF0KLQkgIFttaXNjL01ha2VmaWxlXSBbbWlzYy93MzJzeXMuY10KLQlXMzJTWVMuRExMIHBhcnRpYWxseSBpbXBsZW1lbnRlZC4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotU3VuIEFwciAxNCAxMjo1MToyNyAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KLQotCSogW2NvbnRyb2xzL21lbnUuY10gW2luY2x1ZGUvZGlhbG9nLmhdIFt3aW5kb3dzL2RpYWxvZy5jXQotCU1hZGUgdGhlIHJlc291cmNlIGxvYWRpbmcgY29kZSBhbHdheXMgdXNlIHRoZSBjb3JyZWN0IFdpbmRvd3MKLQlsYXlvdXQgZm9yIFdpbmVsaWIgb24gb3RoZXIgQ1BVcy4KLQotCSogW2luY2x1ZGUvbW9kdWxlLmhdIFtsb2FkZXIvbW9kdWxlLmNdCi0JQWRkZWQgc2VsZiBoYW5kbGUgaW4gTkVfTU9EVUxFIHN0cnVjdHVyZSwgc28gd2UgY2FuIHVzZSBhIHBvaW50ZXIKLQlpbnN0ZWFkIG9mIGEgaGFuZGxlLgotCUFkZGVkIGZ1bmN0aW9uIE1PRFVMRV9HZXRQdHIoKSB0byB2YWxpZGF0ZSBhIEhNT0RVTEUuCi0KLQkqIFttZW1vcnkvaGVhcC5jXQotCUltcGxlbWVudGVkIFdpbjMyIGhlYXAgbWFuYWdlbWVudC4KLQotCSogW21lbW9yeS9zZWxlY3Rvci5jXQotCUZpeCBzZWxlY3RvciBsaW1pdCBmb3IgaHVnZSBibG9ja3MuCi0KLVNhdCBBcHIgMTMgMDA6MTk6MTIgMTk5NiAgSHV3IEQuIE0uIERhdmllcyA8aC5kYXZpZXMxQHBoeXNpY3Mub3hmb3JkLmFjLnVrPgotCi0JKiBbb2JqZWN0cy9tZXRhZmlsZS5jXQotCUZpeGVkIG1lbWNweSBidWcgdG8gYWxsb3cgbWVtb3J5IGJhc2VkIG1ldGFmaWxlcyB0byB3b3JrLgotCi1GcmkgQXByIDEyIDE5OjI1OjQxIDE5OTYgIEZyYW5zIHZhbiBEb3Jzc2VsYWVyICA8ZG9yc3NlbEBydWxobTEubGVpZGVudW5pdi5ubD4KLQotCSogW2NvbnRyb2xzL2VkaXQuY10gW2NvbnRyb2xzL0VESVQuVE9ET10KLQlDb21wbGV0ZSByZXdyaXRlLiAgRXZlcnl0aGluZyBjaGFuZ2VkOiBuZXcgZmVhdHVyZXMsIG5ldyBidWdzLgotCU1haW4gYWRkaXRpb246IFdvcmRXcmFwLgotCi1GcmkgQXByIDEyIDIwOjI5OjU1IDE5OTYgIFRyaXN0YW4gVGFycmFudCA8dHN0QGRjcy5lZC5hYy51az4KLQotCSogW3Jlc291cmNlcy9zeXNyZXNfSXQucmNdCi0JRml4ZWQgYSBmZXcgbWlzdGFrZXMgaW4gdGhlIGZpbGUgYW5kIHJlc2l6ZWQgc29tZSBvZiB0aGUgY29udHJvbHMuCi0KLUZyaSBBcHIgMTIgMDk6NTU6MTMgMTk5NiAgSm9obiBIYXJ2ZXkgPGpvaG5AZGl2aXNpb24uY28udWs+Ci0KLQkqIFttaXNjL3dpbnNvY2tldC5jXQotCUZpeGVkIGJyb2tlbiAjaWYgZGVmaW5lZCB0aGF0IHN0b3BwZWQgdW5peHdhcmUgY29tcGlsaW5nLgotCi0JKiBbd2luMzIvcmVzb3VyY2UuY10KLSAgICAgICAgQWRkZWQgbWlzc2luZyByZXR1cm4gdG8gZW5kIG9mIEZpbmRSZXNvdXJjZTMyLgotCi1UaHUgQXByIDExIDE4OjAwOjAwIDE5OTYgIEFsZXggS29yb2JrYSA8YWxleEBwaG0zMC5waGFybS5zdW55c2IuZWR1PgotCi0JKiBbd2luZG93cy9rZXlib2FyZC5jXSBbd2luZG93cy9ldmVudC5jXQotCUZpeGVkIEdldEtleVN0YXRlIGZvciBtb3VzZSBidXR0b25zLgotCi0JKiBbd2luZG93cy9tZXNzYWdlLmNdCi0JV01fTU9VU0VBQ1RJVkFURSB3YXNuJ3Qgc2VudCBpbiBzb21lIGNhc2VzLgotCi1XZWQgQXByIDEwIDE4OjU5OjUzIDE5OTYgIE5pZWxzIGRlIENhcnBlbnRpZXIgIDxuaWVsc0BjaW5keS5ldC50dWRlbGZ0Lm5sPgotCi0JKiBbb2JqZWN0cy9mb250LmNdCi0JTWF0Y2ggc2xpZ2h0bHkgYmlnZ2VyIGZvbnQgaWYgaGVpZ2h0IG5lZ2F0aXZlLgotCi1Nb24gQXByICA4IDEzOjQ2OjE1IDE5OTYgIERlYW5vIENhbHZlciA8ZGVhbm9AcmF0dGllLmRlbW9uLmNvLnVrPgotCi0JKiBbbXVsdGltZWRpYS9tbXN5c3RlbS5jXQotCUNoYW5nZWQgcmVhZCdzIHRvIEZJTEVfcmVhZCdzIGluIG1tc3lzdGVtIHRvIGZpeCBtbWlvIGJ1Zy4KLQotU3VuIEFwciAgNyAyMTo0MDoyOSAxOTk2ICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgotCi0JKiBbbWlzYy9jb21tZGxnLmNdIFtyZXNvdXJjZXMvc3lzcmVzX0VuLnJjXSBbcmVzb3VyY2VzL3N5c3Jlc19EZS5yY10KLQlJbnRyb2R1Y2VkIENvbG9yRGxnUHJvYygpIGZvciBDaG9vc2VDb2xvcigpIGFuZCByZXBsYWNlZCBmaXR0aW5nCi0JRW4tLERlLSByZXNvdXJjZXMuIAotCUFzIHdyaXR0ZW4gaW4gVE9ETzogc29tZSBuYXRpb25hbCBsYW5ndWFnZSBzdXBwb3J0IGlzIG5lZWRlZCBoZXJlLgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1GcmkgQXByICA1IDE1OjIyOjU1IDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgotCi0JKiBbY29udHJvbHMvYnV0dG9uLmNdIFtjb250cm9scy9zdGF0aWMuY10KLQlDaGFuZ2VzIHRvIHVzZSBXTkQgKiB3aGVyZXZlciBwb3NzaWJsZS4KLQotCSogW2RlYnVnZ2VyL2RiZy55XSBbZGVidWdnZXIvZGVidWcubF0KLQlBZGRlZCAnaW5mbyBtb2R1bGUnIGFuZCAnd2FsayBtb2R1bGUnIGNvbW1hbmRzLgotCi0JKiBbaWYxNjMyL01ha2VmaWxlLmluXSBbaWYxNjMyL3JlbGF5LmNdIFt0b29scy9idWlsZC5jXQotCUFkZGVkIGFzc2VtYmx5IGNvZGUgZ2VuZXJhdGlvbiB0byBjYWxsIGZyb20gV2luZSBpbnRvIDMyLWJpdCBjb2RlLgotCUNoYW5nZWQgYWxsICdjYWxsMzInIHJlZmVyZW5jZXMgaW4gJ2NhbGxmcm9tMTYnIHRvIGF2b2lkIGNvbmZ1c2lvbgotCXdpdGggV2luMzIgcm91dGluZXMuCi0KLQkqIFtpbmNsdWRlL2NhbGxiYWNrLmhdCi0JQWRkZWQgcHJvdG90eXBlcyBmb3IgMzItYml0IGNhbGxiYWNrcy4KLQotCSogW2xvYWRlci9tb2R1bGUuY10gW2lmMTYzMi9yZWxheTMyLmNdIFt0b29scy9idWlsZC5jXQotCVVuaWZpZWQgMTYtIGFuZCAzMi1iaXQgbW9kdWxlcy4gVGhlIGZha2UgbW9kdWxlIGZvciAzMi1iaXQgRExMcyBpcwotCW5vdyBnZW5lcmF0ZWQgYnkgdGhlIGJ1aWxkIHByb2dyYW0uCi0KLQkqIFtpbmNsdWRlL21vZHVsZS5oXQotCUFkZGVkIGV4dHJhIGluZm8gdG8gTkVfTU9EVUxFIGZvciBXaW4zMiBtb2R1bGVzIHRvIHBvaW50IHRvIHRoZSBQRQotCW1vZHVsZSBkYXRhLgotCi0JKiBbaW5jbHVkZS9wZV9pbWFnZS5oXSBbbG9hZGVyL3BlX2ltYWdlLmNdIFt3aW4zMi9yZXNvdXJjZS5jXQotCVJlbW92ZWQgdGhlIHdpbmVfZmlsZXMgbGlzdC4gVGhlIFBFIGRhdGEgZm9yIGEgbW9kdWxlIGNhbiBub3cgYmUKLQlhY2Nlc3NlZCB3aXRoIHRoZSBORV9XSU4zMl9NT0RVTEUgbWFjcm8uCi0KLQkqIFtsb2FkZXIvc2lnbmFsLmNdIFttaXNjZW11L2luc3RyLmNdCi0JRG9uJ3Qgc3RhcnQgdGhlIEJJT1MgdGltZXIgYXQgc3RhcnR1cCwgYnV0IG9ubHkgYWZ0ZXIgYW4gYWNjZXNzIHRvCi0JdGhlIDB4NDAgc2VnbWVudC4KLQotCSogW21lbW9yeS9sb2NhbC5jXQotCUNoYW5nZWQgTE9DQUxfTG9jaygpIHRvIHJldHVybiBhIDMyLWJpdCBwb2ludGVyLgotCi0JKiBbbWlzYy9tYWluLmNdIFtpbmNsdWRlL2RsbHMuaF0KLQlTb21lIGJ1aWx0LWluIERMTHMgKGxpa2UgS0VSTkVMKSBjYW4gbm8gbG9uZ2VyIGJlIGRpc2FibGVkIGZyb20KLSAJdGhlIGNvbW1hbmQtbGluZS4KLQkKLVRodSBBcHIgIDQgMTk6NTQ6MzkgMTk5NiAgS2VpdGggUmV5bm9sZHMgPGtlaXRockBzY28uQ09NPgotCi0JKiBbKi8qXQotCUEgbG90IG9mIHNtYWxsIGNoYW5nZXMgdG8gc3VwcG9ydCBTQ08gT3BlblNlcnZlciA1LgotCi1UaHUgQXByICA0IDE1OjM4OjEzIDE5OTYgIEZyYW5zIHZhbiBEb3Jzc2VsYWVyIDxkb3Jzc2VsQHJ1bGhtMS5sZWlkZW51bml2Lm5sPgotCi0JKiBbY29udHJvbHMvZWRpdC5jXQotCUZpeGVkIEdldEtleVN0YXRlKCkgY2FsbCB0byB1c2UgMHg4MDAwIGNvbnZlbnRpb24uCi0KLQkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KLQlBZGRlZCB1bmRvY3VtZW50ZWQgbWVzc2FnZXMgRU1fU0NST0xMIGFuZCBFTV9HRVRUSFVNQi4KLQotVGh1IEFwciAgNCAwOTo1Mjo1MiAxOTk2ICBKb2huIEhhcnZleSA8am9obkBkaXZpc2lvbi5jby51az4KLQotCSogW2lmMTYzMi9leGNlcHQuU10KLQlNb2RpZmllZCBjb2RlIHRvIGFzc2VtYmxlIG9uIHVuaXh3YXJlLgotCi1XZWQgQXByICAzIDA5OjM4OjI2IDE5OTYgIEp1ZXJnZW4gTWFycXVhcmR0IDxtYXJxdUBsdW5hci5hZHZhbnRlc3QuZGU+Ci0KLQkqIFtvYmplY3RzL2ZvbnQuY10KLQlJbXBsZW1lbnRhdGlvbiBvZiBhIHNlY29uZCBmb250IGNhY2hlIHdoaWNoIHdpbGwgYmUgdXBkYXRlZAotCWR5bmFtaWNhbGx5LgotCi1Nb24gQXByICAxIDE2OjQ3OjQwIDE5OTYgIFJvYmVydCBQb3VsaW90IDxrcnlub3NAcWJjLmNsaWMubmV0PgotCi0JKiBbcmVzb3VyY2VzL3N5c3Jlc19Dei5yY10gW3Jlc291cmNlcy9zeXNyZXNfRGEucmNdCi0JICBbcmVzb3VyY2VzL3N5c3Jlc19EZS5yY10gW3Jlc291cmNlcy9zeXNyZXNfRW8ucmNdCi0JICBbcmVzb3VyY2VzL3N5c3Jlc19Fcy5yY10gW3Jlc291cmNlcy9zeXNyZXNfRmkucmNdCi0JICBbcmVzb3VyY2VzL3N5c3Jlc19Oby5yY10gW3Jlc291cmNlcy9UT0RPXQotCVVwZGF0ZWQgRklORF9URVhUIGFuZCBSRVBMQUNFX1RFWFQgdG8gd29yayBsaWtlIHRoZSBFbmdsaXNoIHZlcnNpb24uCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVN1biBNYXIgMzEgMTM6NTQ6NDYgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+Ci0KLQkqIFt0b29scy9idWlsZC5jXQotCUNoYW5nZWQgQnVpbGRTcGVjMzJGaWxlcygpIHRvIGdlbmVyYXRlIGFzc2VtYmx5IGluc3RlYWQgb2YgQyBjb2RlLgotCVVuaWZpZWQgLXNwZWMxNiBhbmQgLXNwZWMzMiBvcHRpb25zOyBETEwgdHlwZSBpcyBub3cgZGV0ZXJtaW5lZCBieQotCXRoZSAndHlwZScgZGVjbGFyYXRpb24gaW4gdGhlIC5zcGVjIGZpbGUuCi0JTmV3IC1zdGRjYWxsIG9wdGlvbiB0byBidWlsZCBhbGwgc3RkY2FsbCBhc3NlbWJseSByZWxheXMuCi0KLQkqIFtpZjE2MzIvcmVsYXkuY10gW2lmMTYzMi9yZWxheTMyLmNdIFtpbmNsdWRlL2RsbHMuaF0KLQlTdGFydGVkIHRvIHVuaWZ5IDE2LSBhbmQgMzItYml0IGJ1aWx0aW4gRExMcy4KLQotCSogW2xvYWRlci9tb2R1bGUuY10KLQlBZGRlZCBNT0RVTEVfR2V0V25kUHJvY0VudHJ5MzIoKSB0byBtaXJyb3IgTU9EVUxFX0dldFduZFByb2NFbnRyeTE2KCkuCi0KLQkqIFtsb2FkZXIvcGVfaW1hZ2UuY10gW2xvYWRlci9yZXNvdXJjZS5jXQotCUFsbCBtb2R1bGVzIG5vdyBoYXZlIGEgTkUgc2lnbmF0dXJlLCBhbmQgY2FuIGJlIGRpc3Rpbmd1aXNoZWQgYnkKLQl0aGUgTkVfRkZMQUdTX1dJTjMyIGZsYWcuCi0KLQkqIFt3aW5kb3dzL2FsaWFzLmNdCi0JQWxpYXNlcyBmb3IgYnVpbHQtaW4gd2luZG93IHByb2NlZHVyZXMgYXJlIG5vdyBhbGwgY3JlYXRlZCBhdAotCXN0YXJ0dXAgaW4gQUxJQVNfSW5pdCgpLgotCi1GcmkgTWFyIDI5IDE0OjU2OjM5IDE5OTYgIEdyZWcgS3JlaWRlciA8a3JlaWRlckBuYXRsYWIucmVzZWFyY2gucGhpbGlwcy5jb20+Ci0KLQkqIFtjb250cm9scy9jb21iby5jXQotCUxpbWl0IHJlY3RhbmdsZSB0byBjbGVhciB0byBzaXplIG9mIGl0ZW0gd2hlbiBwYWludGluZyBjb21ibywgbm90Ci0gCWRlZmF1bHQuICBPbmx5IGRyYXcgaXRlbXMgaW4gbGlzdCB3aGVuIHRoZXJlIGlzIGVub3VnaCByb29tIGZvciB0aGVtLgotCi0JKiBbY29udHJvbHMvbGlzdGJveC5jXQotCUdldCB0aGUgbWVhc3VyZSBvZiBldmVyeSBpdGVtIHRoYXQncyBhZGRlZCBhbmQgc3RvcmUgaW4gdGhlIGl0ZW0ncwotIAlkYXRhIHN0cnVjdHVyZS4gIFNjcm9sbCBsaXN0Ym94IGlmIG1vdXNlIG5lYXIgZWRnZSBvZiBib3guICBPbmx5Ci0gCWRyYXcgaXRlbXMgaW4gbGlzdCB3aGVuIHRoZXJlIGlzIGVub3VnaCByb29tLgotCi1GcmkgTWFyIDI5IDEyOjAwOjAwIDE5OTYgIEFsZXggS29yb2JrYSA8YWxleEBwaG0zMC5waGFybS5zdW55c2IuZWR1PgotCi0JKiBbd2luZG93cy9kZWZ3bmQuY10gW3dpbmRvd3MvZGlhbG9nLmNdIFt3aW5kb3dzL21kaS5jXQotCSAgW3dpbmRvd3Mvbm9uY2xpZW50LmNdIFtjb250cm9scy9tZW51LmNdIAotCVZhcmlvdXMgY2hhbmdlcyBmb3IgYmV0dGVyIGtleWJvYXJkIGhhbmRsaW5nLiAKLQotCSogW3dpbmRvd3MvZXZlbnQuY10gW3dpbmRvd3MvbWVzc2FnZS5jXSBbbWlzYy9rZXlib2FyZC5jXQotCVByb3BlciBrZXlib2FyZCBtZXNzYWdlIG9yZGVyaW5nLCB3b3JraW5nIEdldEtleVN0YXRlKCkgKGZpbmFsbHkhKSwgCi0JaW1wcm92ZW1lbnRzIGluIFRvQXNjaWkoKS4KLQotCSogW3dpbmRvd3Mvd2luLmNdIFt3aW5kb3dzL21lc3NhZ2UuY10KLQlTbWFsbCBpbXByb3ZlbWVudHMgaW4gV0lOX0ZpbmRXaW5Ub1JlcGFpbnQuCi0KLQkqIFt3aW5kb3dzL3dpbi5jXSBbd2luZG93cy9wYWludGluZy5jXSBbd2luZG93cy9ub25jbGllbnQuY10KLQlQdXQgdXBkYXRlIHJlZ2lvbiBpbiBXTV9OQ1BBSU5UIHdQYXJhbS4KLQotCSogW2xvYWRlci90YXNrLmNdCi0JS2lsbCB0YXNrIHRpbWVycyB3aGVuIHRhc2sgaXMgZGVsZXRlZCwgc3dpdGNoIHRpbWVycyB0byB0aGUKLQluZXcgcXVldWUgaW4gU2V0VGFza1F1ZXVlKCkuCi0KLQkqIFtsb2FkZXIvc2lnbmFsLmNdIFttaXNjZW11L2Rvc21lbS5jXQotCUFkZGVkIFNJR0FMUk0gc2lnbmFsIGhhbmRsZXIgdG8gaW5jcmVtZW50IEJJT1MgY2xvY2suIAotCi0JKiBbd2luZG93cy93aW4uY10gW3dpbmRvd3Mvd2lucG9zLmNdIFt3aW5kb3dzL21kaS5jXQotCUZpeGVkIENoaWxkV2luZG93RnJvbVBvaW50KCksIFdNX1BBUkVOVE5PVElGWSBhbmQgaXRzIGhhbmRsaW5nIGJ5Ci0JTURJIGNsaWVudC4KLQotCSogW3dpbmRvd3Mvd2lucG9zLmNdCi0JSW1wcm92ZW1lbnRzIGluIGhhbmRsaW5nIG9mIG93bmVkIHBvcHVwcy4gIkZsb2F0aW5nIiB0b29sYm94ZXMgCi0Jd29yayBiZXR0ZXIgbm93LiAKLQotVGh1IE1hciAyOCAxMjozODoyOSAxOTk2ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KLQotCSogW21pc2MvcmVnaXN0cnkuY10KLQlOZXcgZmlsZSwgcmVnaXN0cnkgcmV3cml0ZSBpbmNsdWRpbmcgd2luMzIgZXh0ZW5zaW9ucwotCS0gVW5pY29kZQotCS0gbXVsdGlwbGUgdmFsdXMgcGVyIGtleQotCS0gZGlmZmVyZW50IGRhdGF0eXBlcyBmb3IgdmFsdWVzCi0JLSBtdWx0aXBsZSByb290a2V5cwotCS0gc2F2aW5nIGFuZCBsb2FkaW5nIGluIGRpZmZlcmVudCByZWdpc3RyaWVzLgotCi0JKiBbaW5jbHVkZS93aW5yZWcuaF0KLQlOZXcgZmlsZSwgZGVmaW5pdGlvbnMgYW5kIHN0cnVjdHMgZm9yIHJlZ2lzdHJ5LgotCi0JKiBbaW5jbHVkZS93aW5lcnJvci5oXQotCVNvbWUgbmV3IGVycm9yIGRlZmluZXMgYWRkZWQuLi4gdGhlcmUgYXJlIG1vcmUsIHNvbWVvbmUgcGxlYXNlCi0gCWNoZWNrIGEgKHJlYWwtKXdpbmRvd3Mgd2luZXJyb3IuaC4KLQkKLQkqIFtpZjE2MzIvc2hlbGwuc3BlY10gW2lmMTYzMi9hZHZhcGkzMi5zcGVjXSBbaWYxNjMyL2tlcm5lbC5zcGVjXQotCVJlZ2lzdHJ5IHNwZWNzIGFkZGVkLgotCi0JKiBbaWYxNjMyL3JlbGF5LmNdCi0JU3dpdGNoIGludGVybmFsIFNIRUxMLkRMTCB0byBkZWZhdWx0ICd1c2VkJy4KLQotCSogW3dpbjMyL3N0cmluZzMyLmNdIFtpbmNsdWRlL3N0cmluZzMyLmhdCi0JU29tZSBuZXcgZnVuY3Rpb25zIGFkZGVkLgotCWNoYXIgc2hvdWxkIGJlIHVuc2lnbmVkIGNoYXIgd2hlbiBjb252ZXJ0aW5nIHRvIDE2Yml0IGludHMuCi0KLQkqIFttaXNjL3NoZWxsLmNdIFtpbmNsdWRlL3NoZWxsLmhdIFt3aW4zMi9hZHZhcGkuY10KLQlSZW1vdmVkIG9sZCByZWdpc3RyeSBmdW5jdGlvbnMuCi0KLVR1ZSBNYXIgMjYgMTU6MDE6NDYgMTk5NiAgRnJhbnMgdmFuIERvcnNzZWxhZXIgPGRvcnNzZWxAcnVsaG0xLmxlaWRlbnVuaXYubmw+Ci0KLQkqIFtpbmNsdWRlL2JpdG1hcHMvb2NyX2liZWFtXQotCUZpeGVkIHRoZSBwb3NpdGlvbiBvZiB0aGUgaG90c3BvdC4KLQotCSogW29iamVjdHMvdGV4dC5jXQotCUZpeGVkIGEgZmV3IGJ1Z3MgaW4gVEVYVF9UYWJiZWRUZXh0T3V0KCkuCi0KLQkqIFt3aW5kb3dzL2V2ZW50LmNdCi0JRml4ZWQgdGhlIG9yZGVyIG9mIHRoZSBiaXRzIGluIHRoZSBLZXlTdGF0ZVRhYmxlLgotCTB4ODAgaXMgdGhlIHVwL2Rvd24tYml0LiAgMHgwMSBpcyB0aGUgdG9nZ2xlIGJpdC4KLQotCSogW2xvYWRlci9yZXNvdXJjZS5jXSBbd2luZG93cy9tZGkuY10gW2NvbnRyb2xzL2VkaXQuY10KLQlGaXhlZCB0aGUgY2FsbHMgdG8gR2V0S2V5U3RhdGUoKS4KLQotVHVlIE1hciAyNiAwODo0MzoxNSAxOTk2ICBSb2JlcnQgUG91bGlvdCA8a3J5bm9zQHFiYy5jbGljLm5ldD4KLQotCSogW3Jlc291cmNlcy9zeXNyZXNfRnIucmNdIFtyZXNvdXJjZXMvVE9ET10KLQlVcGRhdGVkIEZJTkRfVEVYVCBhbmQgUkVQTEFDRV9URVhUIHRvIHdvcmsgbGlrZSB0aGUgRW5nbGlzaCB2ZXJzaW9uLgotCi1Nb24gTWFyIDI1IDE3OjM4OjU5IDE5OTYgIFRyaXN0YW4gVGFycmFudCA8dHN0QGRjcy5lZC5hYy51az4KLQotCSogW3Jlc291cmNlcy9zeXNyZXNfaXQucmNdCi0JQWRkZWQgc3VwcG9ydCBmb3IgSXRhbGlhbiBbSXRdIGxhbmd1YWdlLgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1TdW4gTWFyIDI0IDEzOjEzOjExIDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgotCi0JKiBbaW5jbHVkZS93aW4uaF0gW3dpbmRvd3MvKi5jXQotCVJlcGxhY2VkIG5leHQsIHBhcmVudCwgY2hpbGQgYW5kIG93bmVyIGhhbmRsZXMgYnkgcG9pbnRlcnMgaW4gV05ECi0Jc3RydWN0dXJlLiBUaGlzIHNob3VsZCBpbXByb3ZlIHBlcmZvcm1hbmNlLCBhbmQgc2hvdWxkIGJlCi0JcmVhc29uYWJseSBzYWZlIHNpbmNlIE1pY3Jvc29mdCBkaWQgdGhlIHNhbWUgaW4gV2luOTUuCi0KLQkqIFtpbmNsdWRlL3dpbnR5cGVzLmhdIFsqLypdCi0JUmVkZWZpbmVkIEhBTkRMRSB0byBiZSBVSU5UIGluc3RlYWQgb2YgYSBwb2ludGVyIGZvciBXaW5lbGliLiBUaGlzCi0JYWxsb3dzIHJlbW92aW5nIGEgbG90IG9mIHVubmVjZXNzYXJ5IGNhc3RzIGFuZCBOUEZNVHMuCi0KLQkqIFt3aW5kb3dzL2NhcmV0LmNdCi0JQ3JlYXRlIHRoZSBjYXJldCBicnVzaCB1cG9uIENyZWF0ZUNhcmV0KCk7IHVzZSB0aGUgYml0bWFwCi0JZGltZW5zaW9ucyBmb3IgdGhlIGNhcmV0LgotCUZpeGVkIENBUkVUX0Rpc3BsYXlDYXJldCgpIHRvIHVzZSBQYXRCbHQoKS4KLQotRnJpIE1hciAyMiAxNjowMDowMCAxOTk2ICBBbmFuZCBLdW1yaWEgPGFrdW1yaWFAb3plbWFpbC5jb20uYXU+Ci0KLQkqIFttaXNjL3dpbnNvY2tldC5jXQotCU1vcmUgc2FuaXR5IGNoZWNrcywgZml4dXAgc29tZSBlcnJvbmVvdXMgcmV0dXJuIGNvZGVzLgotCi0JKiBbZG9jdW1lbnRhdGlvbi93aW5zb2NrXQotCURlc2NyaXB0aW9uIG9mIGhvdyBjb21wYXRpYmxlIHRoZSB3aW5zb2NrIGlzIGN1cnJlbnRseS4KLQotRnJpIE1hciAyMiAxMzowNTozNCAxOTk2ICBVbHJpY2ggU2NobWlkICA8dXNjaG1pZEBtYWlsLmhoLnByb3ZpLmRlPgotCi0JKiBbbGlicmFyeS93aW5tYWluLmNdCi0JU2V0IGBscHN6Q21kUGFyYW0nIGJ5IGNvbmNhdGVuYXRpbmcgYXJndW1lbnRzLgotCi0JKiBbbG9hZGVyL21vZHVsZS5jXQotCVdpbkV4ZWM6IGFjY2VwdCBVbml4IGNvbW1hbmRzLCB1c2UgV2luZSBlbXVsYXRvci4KLQotTW9uIE1hciAxOCAxMjoxNjoyNyAxOTk2ICBNYXJ0aW4gdm9uIExvZXdpcyA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgotCi0JKiBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdW3dpbjMyL3RocmVhZC5jXVtpbmNsdWRlL2tlcm5lbDMyLmhdCi0JRGVsZXRlQ3JpdGljYWxTZWN0aW9uLCBFbnRlckNyaXRpY2FsU2VjdGlvbiwKLSAJSW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbiwgTGVhdmVDcml0aWNhbFNlY3Rpb24sIFRsc0FsbG9jLAotIAlUbHNGcmVlLCBUbHNHZXRWYWx1ZSwgVGxzU2V0VmFsdWU6IG5ldyBmdW5jdGlvbnMuCi0JQ1JJVElDQUxfU0VDVElPTjogbmV3IHN0cnVjdHVyZS4KLQotCSogW2lmMTYzMi9rZXJuZWwzMi5zcGVjXVt3aW4zMi9jb2RlX3BhZ2UuY10KLQlXaWRlQ2hhclRvTXVsdGlCeXRlOiBuZXcgZnVuY3Rpb24uCi0KLQkqIFtpZjE2MzIva2VybmVsMzIuc3BlY11bd2luMzIvZmlsZS5jXQotCUdldEZpbGVBdHRyaWJ1dGVzQTogbmV3IGZ1bmN0aW9uLgotCi0JKiBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdW21pc2MvbWFpbi5jXQotCUdldEVudmlyb25tZW50U3RyaW5nc1csIEZyZWVFbnZpcm9ubWVudFN0cmluZ3NBLAotIAlGcmVlRW52aXJvbm1lbnRTdHJpbmdzVzogbmV3IGZ1bmN0aW9ucy4KLQkKLQkqIFtpZjE2MzIvdXNlci5zcGVjXVt3aW4zMi9jdXJzb3JpY29uMzIuY11bd2luMzIvTWFrZWZpbGUuaW5dCi0JY3Vyc29yaWNvbjMyLmM6IG5ldyBmaWxlLgotCUxvYWRDdXJzb3JBLCBMb2FkQ3Vyc29yVzogbW9kaWZpZWQgaW1wbGVtZW50YXRpb24gZnJvbSBMb2FkQ3Vyc29yCi0gCXRvIFdJTjMyXyouCi0JTG9hZEljb25BLCBMb2FkSWNvblc6IG1vZGlmaWVkIGltcGxlbWVudGF0aW9uIGZyb20gTG9hZEljb25BMzIKLQl0byBXSU4zMl8qLgotCi0JKiBbaW5jbHVkZS9zdHJ1Y3QzMi5oXQotCXByYWdtYSBwYWNrIGluc2VydGVkLgotCUNVUlNPUklDT04zMiBzdHJ1Y3R1cmVzIGFkZGVkLgotCi0JKiBbaW5jbHVkZS93aW5ubHMuaF0KLQlDb25zdGFudHMgQ1BfKiBhbmQgV0NfKiBhZGRlZC4KLQotCSogW2xvYWRlci9wZV9pbWFnZS5jXQotCVBFX0xvYWRNb2R1bGU6IGNhbGwgUEVfSW5pdERMTCB3aXRoIGhNb2R1bGUgcmF0aGVyIHRoYW4gd3BudC4KLQotU3VuIE1hciAxNyAxNjo1OToxMiAxOTk2ICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgotCi0JKiBbbWlzYy9jb21tZGxnLmNdCi0JSW50cm9kdWNlZCBob29rIGZ1bmN0aW9uIGhhbmRsaW5nIGluIGZpbGUgZGlhbG9nLgotCVJlbW92ZWQgYW4gdW5uZWNlc3NhcnkgU2hvd1dpbmRvdyBjYWxsIGluIEZJTEVETEdfV01Db21tYW5kKCkuCi0KLVRodSBNYXIgMTQgMTA6NTA6MDAgMTk5NiAgVGhvbWFzIFNhbmRmb3JkIDx0LmQuZy5zYW5kZm9yZEBwcmRzLWdybi5kZW1vbi5jby51az4KLQotCSogW2lmMTYzMi9nZGkzMi5zcGVjXQotCUFkZGVkIEdldE5lYXJlc3RDb2xvci4KLQotCSogW2lmMTYzMi9rZXJuZWwzMi5zcGVjXQotCUFkZGVkIEdsb2JhbEFkZEF0b21BLgotCi0JKiBbd2luMzIvcGFyYW0zMi5jXQotCUFkZGVkIHN0YWNrZnJhbWUuaCB0byBpbmNsdWRlcy4KLQlXSU4zMl9HbG9iYWxBZGRBdG9tQSgpIC0gbmV3IGZ1bmN0aW9uLgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1XZWQgTWFyIDEzIDE5OjQ2OjUwIDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgotCi0JKiBbY29udHJvbHMvZWRpdC5jXQotCVJlbW92ZWQgY2FsbHMgdG8gbWVtbW92ZSAobm90IHBvcnRhYmxlKS4KLQotCSogW2RlYnVnZ2VyL2RiZy55XSBbZGVidWdnZXIvZGVidWcubF0KLQlQcmVmaXhlZCBhbGwgdG9rZW4gd2l0aCAndCcgdG8gYXZvaWQgY29uZmxpY3RzIHdpdGggdHlwZQotCWRlZmluaXRpb25zLgotCUFkZGVkICd3YWxrIHF1ZXVlJywgJ3dhbGsgY2xhc3MnIGFuZCAnaW5mbyBjbGFzcycgY29tbWFuZHMuCi0KLQkqIFtkZWJ1Z2dlci9pbmZvLmNdCi0JTW92ZWQgcXVldWUgYW5kIHdpbmRvdyBpbmZvcm1hdGlvbiBmdW5jdGlvbnMgdG8gd2luZG93cy9xdWV1ZS5jCi0JYW5kIHdpbmRvd3Mvd2luLmMgcmVzcGVjdGl2ZWx5LgotCi0JKiBbbG9hZGVyL3NpZ25hbC5jXQotCUFkZGVkIFNJR0hVUCBoYW5kbGluZyB0byBmb3JjZSBlbnRyeSBpbnRvIGJ1aWx0LWluIGRlYnVnZ2VyLgotCUNsZWFuZWQgdXAgYSBiaXQuCi0KLQkqIFttaXNjL3NweS5jXQotCUdlbmVyYWwgY2xlYW51cCBhbmQgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzLgotCi0JKiBbd2luZG93cy9jbGFzcy5jXQotCUFkZGVkIENMQVNTX0R1bXBDbGFzcygpIGFuZCBDTEFTU19XYWxrQ2xhc3NlcygpIGZ1bmN0aW9ucyBmb3IKLQlkZWJ1Z2dlci4KLQotCSogW3dpbmRvd3MvZXZlbnQuY10KLQlQcmVzc2luZyBDdHJsLUFsdC1SZXR1cm4gZm9yY2VzIGFuIGVudHJ5IGludG8gdGhlIGRlYnVnZ2VyLiBOb3QKLQlzdXJlIGlmIHRoaXMga2V5IGNvbWJpbmF0aW9uIGlzIGEgZ29vZCBjaG9pY2UuLi4KLQotCSogW3dpbmRvd3MvbWVzc2FnZS5jXSBbd2luZG93cy9xdWV1ZS5jXSAoTmV3IGZpbGUpCi0JTW92ZWQgbWVzc2FnZSBxdWV1ZSBoYW5kbGluZyBmdW5jdGlvbnMgdG8gd2luZG93cy9xdWV1ZS5jLgotCi1UdWUgTWFyIDEyIDE0OjU1OjE2IDE5OTYgIE9ubm8gSG92ZXJzICA8b25ub0BzdGFjay51cmMudHVlLm5sPgotCi0JKiBbaWYxNjMyL2V4Y2VwdC5TXSBbaW5jbHVkZS9leGNlcHQuaF0gW3dpbjMyL2V4Y2VwdC5jXSAoTmV3IGZpbGVzKQotCUltcGxlbWVudGVkIFdpbjMyIGV4Y2VwdGlvbiBmdW5jdGlvbnM6IFJhaXNlRXhjZXB0aW9uKCksCi0gCVJ0bFVud2luZCgpLCBTZXRVbmhhbmRsZWRFeGNlcHRpb25GaWx0ZXIoKSBhbmQKLQlVbmhhbmRsZWRFeGNlcHRpb25GaWx0ZXIoKS4KLQotTW9uIE1hciAxMSAxOToyMzoyOSAxOTk2ICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgotCi0JKiBbY29udHJvbHMvbGlzdGJveC5jXSBbaW5jbHVkZS9saXN0Ym94LmhdCi0JU3BlY2lhbCBoYW5kbGluZyBmb3IgQ09NQk9MQk9YIHN0eWxlcyBpbnRyb2R1Y2VkIHZpYSBleHRlbnNpb24gb2YKLSAJSEVBRExJU1Qgc3RydWN0dXJlOiBscGhsLT5kd1N0eWxlLgotCi1Nb24gTWFyIDExIDEzOjMxOjA2IDE5OTYgIEdyZWcgS3JlaWRlciA8a3JlaWRlckBuYXRsYWIucmVzZWFyY2gucGhpbGlwcy5jb20+Ci0KLQkqIFtjb250cm9scy9jb21iby5jXQotCUFueSBtb3VzZSBtb3ZlbWVudCB3aXRoaW4gYSBzbWFsbCBkaXN0YW5jZSAoZGVmaW5lZCBieSBDQkxNTV9FREdFKQotCW9mIHRoZSB0b3Agb3IgYm90dG9tIGVkZ2UgY2F1c2VzIHRoZSB3aW5kb3cgdG8gc2Nyb2xsLiAgQWxzbyBtb3ZlZCAKLQlzb21lIGFzc2lnbm1lbnRzIHNvIHRoZSByb3V0aW5lIHdvcmtzIGNvcnJlY3RseS4KLQotCSogW2NvbnRyb2xzL2xpc3Rib3guY10KLQlDaGFuZ2luZyBzZWxlY3Rpb24gaW4gTGlzdEJveFNldEN1clNlbCBub3cgdXBkYXRlcyBQcmV2Rm9jdXNlZC4KLQlBZGRlZCB0byBMQlNldEZvbnQgYW5kIENyZWF0ZUxpc3RCb3hTdHJ1Y3QgYSBmYWtlIGhkYyB0aGF0IHRlc3RzIAotCWFuZCBzZXRzIHRoZSBzdGFuZGFyZCB0ZXh0IGhlaWdodC4KLQotU3VuIE1hciAxMCAwODozOToyMyAxOTk2ICBBbGV4IEtvcm9ia2EgPGFsZXhAcGhtMzAucGhhcm0uc3VueXNiLmVkdT4KLQotCSogW3dpbmRvd3MvZGNlLmNdCi0JRml4ZWQgbWVtb3J5IGxlYWsgaW4gRENFX0NsaXBXaW5kb3dzKCkuCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUZyaSBNYXIgIDggMTk6MDc6MTggMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+Ci0KLQkqIFtjb25maWd1cmUuaW5dCi0JUXVvdGUgJ1snIGFuZCAnXScgaW4gdGhlIHRlc3QgcHJvZ3JhbSBmb3IgdGhlIHN0cmVuZ3RoLXJlZHVjZQotCWJ1Zy4gVGhpcyBzaG91bGQgd29yayBtdWNoIGJldHRlci4uLgotCi0JKiBbZmlsZXMvZmlsZS5jXQotCUF1Z21lbnRlZCBET1NfRklMRSBzdHJ1Y3R1cmUuIE1vc3QgaW50ZXJuYWwgZnVuY3Rpb25zIG5vdyByZXR1cm4gYQotCURPU19GSUxFKiBpbnN0ZWFkIG9mIGEgVW5peCBoYW5kbGUuCi0JQWRkZWQgYSBsb2NhbCBmaWxlIGFycmF5IHRvIHJlcGxhY2UgdGhlIFBEQiBsaXN0IHVwb24gc3RhcnR1cCwgdG8KLQlhbGxvdyB1c2luZyBmaWxlIEkvTyBmdW5jdGlvbnMgYmVmb3JlIHRoZSBmaXJzdCB0YXNrIGlzIGNyZWF0ZWQuCi0JQWRkZWQgRklMRV9TZXREYXRlVGltZSgpIGFuZCBGSUxFX1N5bmMoKSBmdW5jdGlvbnMuCi0JCi0JKiBbbG9hZGVyL21vZHVsZS5jXQotCVVzZSB0aGUgRE9TIGZpbGUgSS9PIGZ1bmN0aW9ucyBpbiBNT0RVTEVfTG9hZEV4ZUhlYWRlcigpLgotCi0JKiBbb2JqZWN0cy9iaXRibHQuY10KLQlVc2UgdmlzaWJsZSByZWdpb24gaW5zdGVhZCBvZiBHQyBjbGlwIHJlZ2lvbiB0byBjbGlwIHNvdXJjZQotCWFyZWEuIFRoaXMgZml4ZXMgdGhlIGNhcmQgZHJhd2luZyBidWcgaW4gZnJlZWNlbGwuCi0KLQkqIFtvYmplY3RzL3JlZ2lvbi5jXQotCUZpeGVkIENvbWJpbmVSZ24oKSB0byBhbGxvdyBzcmMgYW5kIGRlc3QgcmVnaW9ucyB0byBiZSB0aGUgc2FtZS4KLQotRnJpIE1hciAgOCAxNjozMjoyMyAxOTk2ICBGcmFucyB2YW4gRG9yc3NlbGFlciA8ZG9yc3NlbEBydWxobTEubGVpZGVudW5pdi5ubD4KLQotCSogW2NvbnRyb2xzL0VESVQuVE9ET10KLQlVcGRhdGVkIHNvIGl0IHJlZmxlY3RzIHRoZSBjdXJyZW50IHN0YXR1cy4KLQotCSogW2NvbnRyb2xzL2VkaXQuY10KLQlJbXBsZW1lbnRlZCBpbnRlcm5hbCBFRElUX1dvcmRCcmVha1Byb2MoKS4KLQlJbXBsZW1lbnRlZCBFU19SRUFET05MWS4KLQlJbXBsZW1lbnRlZCBXTV9MQlVUVE9OREJMQ0xLIHRvIHNlbGVjdCB3aG9sZSB3b3Jkcy4KLQlGaXhlZCBhIGxvdCBvZiB0eXBlcyBpbiB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbnMuCi0KLVdlZCBNYXIgIDYgMTk6NTU6MDAgMTk5NiAgQWxleCBLb3JvYmthIDxhbGV4QHBobTMwLnBoYXJtLnN1bnlzYi5lZHU+Ci0KLQkqIFtkZWJ1Z2dlci9pbmZvLmNdCi0JQWRkZWQgIndhbGsgd2luZG93IiBjb21tYW5kIHRvIHdhbGsgd2luZG93IGxpc3QuIAotCi0JKiBbd2luZG93cy9tZGkuY10KLQlBZGRlZCBwcm9wZXIoPykgV01fTURJU0VUTUVOVSBtZXNzYWdlIGhhbmRsaW5nLgotCi1XZWQgTWFyICA2IDA5OjI3OjEyIDE5OTYgIE1hcnRpbiB2b24gTG9ld2lzIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+Ci0KLQkqIFtpZjE2MzIvY2FsbGJhY2suY11baWYxNjMyL3JlbGF5MzIuY10KLQlSRUxBWTMyX0NhbGxXaW5kb3dQcm9jQ29udlN0cnVjdDogbmV3IGZ1bmN0aW9uLgotCi0JKiBbd2luMzIvc3RydWN0MzIuY11bd2luMzIvTWFrZWZpbGUuaW5dW3dpbjMyL3BhcmFtLmNdW3dpbjMyL3VzZXIzMi5jXQotCXN0cnVjdDMyLmM6IG5ldyBmaWxlLiBNb3ZlZCBhbGwgc3RydWN0dXJlIGNvbnZlcnNpb25zIGludG8gdGhhdCBmaWxlCi0JUEFSQU0zMl9QT0lOVDMydG8xNixNU0cxNnRvMzIsVVNFUjMyX1JFQ1QzMnRvMTY6IAotCXJlbmFtZWQgdG8gU1RSVUNUMzJfUE9JTlQzMnRvMTYsIC4uLgotCVdJTjMyX1BPSU5ULFdJTjMyX01TRyxXSU4zMl9SRUNULFdJTjMyX1BBSU5UU1RSVUNUOiByZW5hbWVkIHRvCi0JUE9JTlQzMiwgLi4uCi0JTmV3IGNvbnZlcnNpb24gZnVuY3Rpb25zIGZvciBOQ0NBTENTSVpFX1BBUkFNUywgV0lORE9XUE9TLAotIAlDUkVBVEVTVFJVQ1QuCi0KLQkqIFtpbmNsdWRlL3dpbmRvd3MuaF1bbWlzYy9leGVjLmNdCi0JV0lOSEVMUCwgTVVMVElLRVlIRUxQLCBIRUxQV0lOSU5GTzogbmV3IHN0cnVjdHVyZXMKLQlXaW5IZWxwOiBSZWltcGxlbWVudGVkLiBUaGFua3MgdG8gUGV0ZXIgQmFsY2gKLSAJKDEwMDcxMC4yNTY2QGNvbXB1c2VydmUuY29tKSBmb3IgaGlzIHZhbHVhYmxlIHJlc2VhcmNoLgotCi0JKiBbd2luMzIvd2lucHJvY3MuY10KLQlXSU4zMl9DYWxsV2luZG93UHJvY1RvMTY6IG5ldyBmdW5jdGlvbiwgY2FsbCBpbgotIAlVU0VSMzJfRGVmV2luZG93UHJvY0EsLi4uCi0KLU1vbiBNYXIgIDQgMjM6MjI6NDAgMTk5NiAgSmltIFBldGVyc29uIDxqc3BldGVyQGJpcmNoLmVlLnZ0LmVkdT4KLQotCSogW2luY2x1ZGUvd2ludHlwZXMuaF0KLQlBZGRlZCAiI2RlZmluZSBfX2V4cG9ydCIuCi0KLQkqIFtvYmplY3RzL2JpdGJsdC5jXQotCVB1dCBpbiBhIGZldyBoYWNrcyB0byBtYWtlIGJpdGJsdC1pbmcgd29yayB3aGVuIHVwc2lkZS1kb3duIGFuZC9vcgotCW1pcnJvcmVkLiAgQklUQkxUX1N0cmV0Y2hJbWFnZSBzaG91bGQgcmVhbGx5IGJlIGNoZWNrZWQgb3ZlcgotCXRob3JvdWdobHkuCi0KLQkqIFtwcm9ncmFtcy9wcm9nbWFuL21haW4uY10KLQlBZGRlZCAiI2luY2x1ZGUgPHJlc291cmNlLmg+IiBmb3IgZGVmaW5pdGlvbiBvZiBIQVZFX1dJTkVfQ09OU1RSVUNUT1IuCi0KLQkqIFtyYy9wYXJzZXIuaF0gW3JjL3BhcnNlci5sXSBbcmMvcGFyc2VyLnldIFtyYy93aW5lcmMuY10KLQlFbGltaW5hdGVkIHNoaWZ0L3JlZHVjZSBjb25mbGljdCBpbiBzdHlsZSBkZWZpbml0aW9uLgotCUFkZGVkIGNydWRlIGVycm9yIG1lc3NhZ2Ugc3VwcG9ydDogInN0ZGluOiVkOiBwYXJzZSBlcnJvciBiZWZvcmUgJyVzJyIuCi0JSW1wbGVtZW50ZWQgc3RyaW5nIHRhYmxlIHN1cHBvcnQgdG8gdGhlIGJlc3Qgb2YgbXkgYWJpbGl0eSAoaXQgd29ya3MKLQl3aXRoIExvYWRTdHJpbmcoKSBjYWxscykuCi0KLQkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQotCUZpeGVkIGJ1ZyBpbiBOQ19Eb1NpemVNb3ZlKCkgdGhhdCBtYWRlIHN5c3RlbSBtZW51IHBvcCB1cCB3aGVuIHRpdGxlCi0JYmFyIG9mIG5vbi1pY29uaXplZCB3aW5kb3cgd2FzIGNsaWNrZWQgKGNoZWNrZWQgZm9yIGljb25pemF0aW9uKS4KLQotTW9uIE1hciAwNCAyMDo1NToxOSAxOTk2ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KLQotCSogW2lmMTYzMi9semV4cGFuZC5zcGVjXSBbaWYxNjMyL3JlbGF5LmNdCi0JICBbaW5jbHVkZS9semV4cGFuZC5oXVttaXNjL2x6ZXhwYW5kLmNdCi0JTFpFWFBBTkQuRExMIGFkZGVkLgotCi1TdW4gTWFyIDAzIDE4OjEwOjIyIDE5OTYgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+Ci0KLQkqIFt3aW5kb3dzL3dpbi5jXQotCVByZXZlbnQgdXNhZ2Ugb2YgaW52YWxpZCBIV05EcyBpbiBXSU5fRW51bUNoaWxkV2luKCksCi0JdGhpcyBwcmV2ZW50cyB0b28gZWFybHkgdGVybWluYXRpb24gb2YgRW51bUNoaWxkV2luZG93cygpLgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1TYXQgTWFyICAyIDE4OjE5OjA2IDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgotCi0JKiBbY29udHJvbHMvc2Nyb2xsLmNdCi0JRml4ZWQgU0NST0xMX1RIVU1CIHBhaW50aW5nIGZpeGVzIGZyb20gQWxleCBLb3JvYmthIHRvIHN0b3JlIHRoZQotIAljdXJyZW50IHRyYWNraW5nIHdpbmRvdy4KLQotCSogW2ZpbGVzL2ZpbGUuY10KLQlGaXhlZCB0d28gZmlsZSBkZXNjcmlwdG9yIGxlYWtzIGluIEZJTEVfT3BlbkZpbGUoKS4KLQotCSogW2lmMTYzMi9yZWxheTMyLmNdIFtsb2FkZXIvbW9kdWxlLmNdIFtsb2FkZXIvcGVfaW1hZ2UuY10KLQkgIFt0b29scy9idWlsZC5jXQotCVJlcGxhY2VkIExPQURFREZJTEVJTkZPIHN0cnVjdHVyZSBieSBPRlNUUlVDVC4KLQotCSogW21lbW9yeS9hdG9tLmNdCi0JUmVsb2FkIHRoZSBwb2ludGVyIHRvIHRoZSBhdG9tIHRhYmxlIGluIEFUT01fR2V0VGFibGUoKSBhbmQKLSAJQVRPTV9BZGRBdG9tKCkgaW4gY2FzZSB0aGUgTE9DQUxfQWxsb2MoKSBjYWxscyBjYXVzZWQgdGhlIHRhYmxlIHRvCi0gCW1vdmUgaW4gbGluZWFyIG1lbW9yeS4KLQotRnJpIE1hciAgMSAxMTo1NzoxMyAxOTk2ICBGcmFucyB2YW4gRG9yc3NlbGFlciA8ZG9yc3NlbEBydWxobTEubGVpZGVudW5pdi5ubD4KLQotCSogW2luY2x1ZGUvY2FsbGJhY2suaF0KLQlBZGRlZCBzdXBwb3J0IGZvciBDYWxsV29yZEJyZWFrUHJvYygpLgotCi0JKiBbY29udHJvbHMvZWRpdC5jXQotCU5ldyBjYXJldCBoYW5kbGluZyAocmVhbGx5IGVmZmljaWVudCAvIGZhc3QpLgotCUltcGxlbWVudGVkIEVNX1NFVFdPUkRCUkVBS1BST0MgYW5kIEVNX0dFVFdPUkRCUkVBS1BST0MuCi0JRml4ZWQgRU1fU0VURk9OVCBzbyBpdCBub3cgYWxzbyBjcmVhdGVzIGEgcHJvcGVyIG5ldyBjYXJldC4KLQotV2VkIEZlYiAyOCAyMjowMzozNCAxOTk2ICBEYW5pZWwgU2NoZXBsZXIgIDxkYW5pZWxAZnJvYm5pdHoud3VzdGwuZWR1PgotCi0JKiBbY29udHJvbHMvZGVza3RvcC5jXSBbbWlzYy9tYWluLmNdIFt3aW5kb3dzL2V2ZW50LmNdIFt3aW5kb3dzL3dpbi5jXQotCUFkZGVkIFdNX0RFTEVURSBwcm90b2NvbCB0byB0b3AtbGV2ZWwgd2luZG93cy4KLQotCSogW2NvbnRyb2xzL3Njcm9sbC5jXQotCUZpeGVkIGEgcHJvYmxlbSB3aGljaCBjYXVzZWQgc2xvdyBzY3JvbGxpbmcgdG8gY29udGludWUJdW5jb250cm9sbGFibHkuCi0KLQkqIFttaXNjL2V4ZWMuY10KLQlJbXBsZW1lbnRlZCBFeGl0V2luZG93cygpLgotCi0JKiBbd2luZG93cy93aW4uY10KLQlTZXQgdG9wLWxldmVsIG93bmVkIHdpbmRvd3MgdG8gYmUgdHJhbnNpZW50LgotCi1XZWQgRmViIDI4IDE5OjEzOjIyIDE5OTYgIFVscmljaCBTY2htaWQgIDx1c2NobWlkQG1haWwuaGgucHJvdmkuZGU+Ci0KLQkqIFtwcm9ncmFtcy9wcm9nbWFuLypdCi0JQWRkZWQgYSBwcm9ncmFtIG1hbmFnZXIuCi0KLVdlZCBGZWIgMjggMTg6Mzg6MDEgMTk5NiAgRHVuY2FuIEMgVGhvbXNvbiA8ZHVuY2FuQHNwZC5lZWUuc3RyYXRoLmFjLnVrPgotCi0JKiBbcmVzb3VyY2VzL3N5c3Jlc19Fby5jXQotCUFkZGVkIHN1cHBvcnQgZm9yIEVzcGVyYW50byBbRW9dIGxhbmd1YWdlLgotCi1XZWQgRmViIDI4IDAwOjIzOjAwIDE5OTYgIFRob21hcyBTYW5kZm9yZCA8dC5kLmcuc2FuZGZvcmRAcHJkcy1ncm4uZGVtb24uY28udWs+Ci0KLQkqIFtpZjE2MzIvdXNlcjMyLnNwZWNdCi0JQWRkZWQgRW5kRGlhbG9nLCBHZXREbGdJdGVtLCBHZXREbGdJdGVtSW50LCBTZXREbGdJdGVtSW50LAotCi0JKiBbd2luMzIvaW5pdC5jXQotCUFkZGVkIHRhc2suaCB0byBpbmNsdWRlcy4gR2V0TW9kdWxlSGFuZGxlQSgpIC0gcmV0dXJuIGhJbnN0YW5jZQotCWlmIGNhbGxlZCB3aXRoIE5VTEwgcGFyYW1ldGVyLiBGcmVlY2VsbCBuZWVkcyB0aGlzLiBOT1RFIHRoaXMKLQltYXkgaW5kaWNhdGUgYSBwcm9ibGVtIHdpdGggZGlmZmVyZW50aWF0aW9uIGJldHdlZW4gaE1vZHVsZSBhbmQKLQloSW5zdGFuY2Ugd2l0aGluIFdpbmUuCi0KLQkqIFt3aW4zMi9yZXNvdXJjZS5jXQotCUZpbmRSZXNvdXJjZTMyKCkgYW5kIExvYWRSZXNvdXJjZTMyKCkgLSBSZW1vdmVkICNpZiAwJ3MgYXJvdW5kCi0JY29udmVyc2lvbiBmcm9tIGhJbnN0YW5jZSB0byBoTW9kdWxlLiBTZWUgcmVtYXJrcyBhYm92ZS4KLQotCSogW3dpbjMyL3N0cmluZzMyLmNdCi0JV0lOMzJfVW5pTGVuKCkgLSByZW1vdmVkIHN0cmF5IHNlbWljb2xvbi4KLQotVHVlIEZlYiAyNyAyMTowNToxOCAxOTk2ICBKaW0gUGV0ZXJzb24gPGpzcGV0ZXJAYmlyY2guZWUudnQuZWR1PgotCQotCSogW3dpbmRvd3MvY2FyZXQuY10KLQlTZXQgYmxpbmsgcmF0ZSB3aXRoIGNhbGwgdG8gR2V0UHJvZmlsZUludCgpLgotCi0JKiBbcmMvd2luZXJjLmNdCi0JSW4gbmV3X3N0eWxlKCksIG1hZGUgaW5pdGlhbCBmbGFnIHNldHRpbmdzIFdTX0NISUxEIHwgV1NfVklTSUJMRQotIAlpbnN0ZWFkIG9mIDAuICBUaGlzIHNlZW1zIHRvIGNvcnJlc3BvbmQgdG8gQm9ybGFuZCdzIGRlZmF1bHRzLCBhbmQKLSAJdGhlIGZsYWdzIGNhbiBiZSB1bnNldCBieSB1c2luZyB0aGUgKHJhdGhlciBvYnR1c2UpICJ8IE5PVCBXU19DSElMRCIKLQlvciAifCBOT1QgV1NfVklTSUJMRSIgdGVjaG5pcXVlIGluIHRoZSAqLnJjIGZpbGUuCi0KLQkqIFt3aW4zMi90aW1lLmNdCi0JSW4gR2V0TG9jYWxUaW1lKCkgYW5kIEdldFN5c3RlbVRpbWUoKSwgdXNlZCB0dl9zZWMgZmllbGQgb2YgcmVzdWx0Ci0gCXJldHVybmVkIGJ5IGdldHRpbWVvZmRheSgpIGluc3RlYWQgb2YgbWFraW5nIHNlY29uZCBjYWxsIHRvCi0gCXRpbWUoKS4gIFRoaXMgZWxpbWluYXRlcyBjbG9jayBqaXR0ZXIgaWYgdGhlIHNlY29uZHMgY2hhbmdlCi0gCWJldHdlZW4gdGhlIHR3byBjYWxscyAocmFyZSwgYnV0IHBvc3NpYmxlKS4KLQotCSogW2luY2x1ZGUvd2ludHlwZXMuaF0KLQlBZGRlZCAiI2RlZmluZSBfZmFyIiBhbmQgIiNkZWZpbmUgX3Bhc2NhbCIuCi0KLQkqIFt3aW5kb3dzL3dpbi5jXQotCUFkZGVkIGZ1bmN0aW9uIEdldERlc2t0b3BId25kKCkuCi0KLQkqIFtpbmNsdWRlL3htYWxsb2MuaF0KLQlSZW1vdmVkIHRoZSAnI2lmZGVmIEhBVkVfU1RETElCX0gnIHN0cnVjdHVyZSwgc2luY2UgaXQgc2VlbWVkIHRvCi0gCWhhdmUgYmVlbiByZW1vdmVkIGZyb20gJ2NvbmZpZ3VyZScsIGFuZCB3YXMgY2F1c2luZyByZWRlZmluaXRpb24KLSAJd2FybmluZ3MuCi0KLVR1ZSBGZWIgMjcgMTk6MzE6MTEgMTk5NiAgQWxicmVjaHQgS2xlaW5lIDxrbGVpbmVAYWsuc2F4LmRlPgotCi0JKiBbd2luZG93cy93aW5wb3MuY10gCi0JQWRkZWQgUkRXX0FMTENISUxEUkVOIGZsYWcgaW4gU2V0V2luZG93UG9zIChoYW5kbGluZyBTV1BfRlJBTUVDSEFOR0VEKQotCXRvIGZvcmNlIGEgcmVwYWludCB3aGVuIHNldHRpbmcgbWVudSBiYXJzIHdpdGggZGlmZmVyZW50IHJvd3MuCi0KLVN1biBGZWIgMjUgMjE6MTU6MDAgMTk5NiBBbGV4IEtvcm9ia2EgPGFsZXhAcGhtMzAucGhhcm0uc3VueXNiLmVkdT4KLQotCSogW3dpbmRvd3Mvc3lzY29sb3JzLmNdIFtjb250cm9scy9zY3JvbGwuY10KLQlGaXhlZCBEcmF3Rm9jdXNSZWN0IHBlbiBhbmQgU0NST0xMX1RIVU1CIHBhaW50aW5nLgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1TYXQgRmViIDI0IDE2OjE3OjA1IDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgotCi0JKiBbZmlsZXMvcHJvZmlsZS5jXQotCUFkZGVkIFxyIHdoZW4gd3JpdGluZyBwcm9maWxlIGZpbGVzLCBmb3IgRE9TIGNvbXBhdGliaWxpdHkuCi0KLQkqIFttZW1vcnkvZ2xvYmFsLmNdCi0JRml4ZWQgYnVnIGluIEdsb2JhbFJlQWxsb2MoKSB0aGF0IGNhdXNlZCBhIGRpc2NhcmRlZCBibG9jayBub3QgdG8KLSAJYmUgcmVhbGxvY2F0ZWQgaWYgaXRzIHNpemUgd2FzIG5vdCBjaGFuZ2VkLgotCi0JKiBbbWVtb3J5L3NlbGVjdG9yLmNdCi0JQXZvaWQgc2V0dGluZyBhIHZhbGlkIExEVCBlbnRyeSB3aXRoIGJhc2UgYW5kIGxpbWl0IHNldCB0byAwLCBhcwotIAl0aGlzIGNhdXNlcyB0aGUga2VybmVsIHRvIGNsZWFyIHRoZSBlbnRyeS4gVGhpcyBmaXhlcyBhIGNyYXNoIHdoZW4KLSAJZXhpdGluZyBXaW5kb3dzIHByb2dyYW0gbWFuYWdlci4KLQotCSogW29iamVjdHMvbWV0YWZpbGUuY10KLQlSZW1vdmVkIGNhbGwgdG8gY3JlYXQoKSBpbnN0ZWFkIG9mIF9sY3JlYXQoKSBmb3IgV0lORUxJQi4KLQotRnJpIEZlYiAyMyAwMDozNTo1NCAxOTk2ICBUaG9tYXMgU2FuZGZvcmQgPHRkZ3NhbmRmQHByZHMtZ3JuLmRlbW9uLmNvLnVrPgotCi0JKiBbaWYxNjMyL2dkaTMyLnNwZWNdCi0JR2V0VGV4dEV4dGVudFBvaW50QSBub3cgaGFzIHdpbjMyIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLgotCi0JKiBbaW5jbHVkZS9zdHJ1Y3QzMi5oXQotCURlZmluZSBuZXcgc3RydWN0dXJlIHRhZ1NJWkUzMiBhbmQgdHlwZWRlZiBTSVpFMzIgdG8gaXQuCi0JRGVmaW5lIHByb3RvdHlwZSBmb3IgZnVuY3Rpb24gUEFSQU0zMl9TSVpFMTZ0bzMyCi0KLQkqIFt3aW4zMi9wYXJhbTMyLmNdCi0JTmV3IGZ1bmN0aW9ucyBQQVJBTTMyX1NJWkUxNnRvMzIgYW5kIFdJTjMyX0dldFRleHRFeHRlbnRQb2ludEEKLQotCSogW3dpbjMyL21lbW9yeS5jXQotCUFkZGVkIG1pc3NpbmcgZmlsZSBwb2ludGVyIHBhcmFtZXRlciB0byBmcHJpbnRmLgotCi1UaHUgRmViIDIyIDAxOjE0OjIxIDE5OTYgIEVyaWMgV2FybmtlIDxldzIxOTNAY3NjLmFsYmFueS5lZHU+Ci0KLQkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQotCUFkZGVkIG1vcmUgZmFtaWxpYXIgaWNvbiBhY3Rpdml0eSwgaWUgc2luZ2xlIGNsaWNrIGJyaW5ncyB1cAotIAlzeXN0ZW0gbWVudS4KLQotV2VkIEZlYiAyMSAxMzowNzowNCAxOTk2ICBGcmFucyB2YW4gRG9yc3NlbGFlciA8ZG9yc3NlbEBydWxobTEubGVpZGVudW5pdi5ubD4KLQotCSogW2NvbnRyb2xzL21lbnUuY10KLQlBZGRlZCBjYWxscyB0byBIaWRlQ2FyZXQoKSBhbmQgU2hvd0NhcmV0KCkgZnJvbSB3aXRoaW4KLSAJVHJhY2tQb3B1cE1lbnUoKSwgTUVOVV9UcmFja01vdXNlTWVudUJhcigpIGFuZAotIAlNRU5VX1RyYWNrS2JkTWVudUJhcigpLiAgQXJlIHRoZXJlIGFueSBtb3JlIHBsYWNlcyB3aGVyZSB0aGlzCi0gCXNob3VsZCBiZSBkb25lPwotCi0JKiBbY29udHJvbHMvc3RhdGljLmNdCi0JRml4ZWQgYSBGSVhNRSBpbiBTVEFUSUNfU2V0SWNvbigpLCB3aGljaCBub3cgcmV0dXJucyBhIGhhbmRsZSB0bwotIAl0aGUgcHJldmlvdXMgaWNvbi4gIEFkZGVkIGEgbmV3IEZJWE1FIGF0IHRoZSBwb2ludCB3aGVyZQotIAlXTV9TRVRURVhUIGlzIGhhbmRsZWQgZm9yIGEgU1NfSUNPTiBzdGF0aWMgY29udHJvbC4KLQotCSogW21pc2MvY29tbWRsZy5jXQotCUltcGxlbWVudGVkIEZpbmRUZXh0KCkgYW5kIFJlcGxhY2VUZXh0KCkKLQlTdGlsbCBtaXNzaW5nIDogVGVtcGxhdGVzIGFuZCBIb29rcyBoYW5kbGluZyAvIGVycm9yIGNoZWNraW5nCi0KLQkqIFtyZXNvdXJjZXMvc3lzcmVzX0VuLmNdCi0JUmVkZXNpZ25lZCBGSU5EX1RFWFQgYW5kIFJFUExBQ0VfVEVYVCBkaWFsb2dzLCBzbyB0aGV5IG5vdyB3b3JrLgotCUxhbmd1YWdlcyBvdGhlciB0aGFuIEVuIHNob3VsZCB1cGRhdGUgdGhlc2UgdG9vLCB0aG91Z2gsIGFzIHdlbGwKLSAJYXMgcmVkaW1lbnNpb24gdGhlIGNvbnRyb2xzIGJlY2F1c2Ugc29tZSBvZiB0aGUgdGV4dCBkb2Vzbid0IGZpdC4KLSAgCUNyZWF0ZWQgZmlsZSByZXNvdXJjZXMvVE9ETyB0byBleHBsYWluIHRoaXMuCi0KLQkqIFt3aW5kb3dzL2NhcmV0LmNdCi0JUmUtd3JpdHRlbi4gIEl0IG5vdyB1c2VzIHRoZSBjb3JyZWN0IFIyX1hPUlBFTi4gIEl0IHJlc2V0cyB0aGUKLSAJYmxpbmsgdGltZXIgb24gU2V0Q2FyZXRQb3MoKS4gIEl0IGRvZXMgaXRzIG93biBoaWRlL3Nob3cgc2NoZW1lCi0gCXdoZW4gU2V0Q2FyZXRQb3MoKSBpcyBjYWxsZWQgKHNob3VsZCBiZSBmYXN0ZXIpLgotCi1Nb24gRmViIDE5IDIxOjUwOjAwIDE5OTYgIEFsZXggS29yb2JrYSA8YWxleEBwaG0zMC5waGFybS5zdW55c2IuZWR1PgotCi0JKiBbY29udHJvbHMvbGlzdGJveC5jXQotCU1pc2NlbGxhbmVvdXMgY2hhbmdlcyBmb3IgYmV0dGVyIExCU19FWFRFTkRFRFNFTCBzdXBwb3J0LgotCVJlbW92ZWQgc2V2ZXJhbCBzdXBlcmZsdW91cyByZWRyYXdhbHMgb2YgaXRlbSBsaXN0LgotCi0JKiBbY29udHJvbHMvc2Nyb2xsLmNdCi0JV01fR0VURExHQ09ERSByZXR1cm4gdmFsdWUuCi0KLQkqIFt3aW5kb3dzL3dpbi5jXQotCUZsYXNoV2luZG93IGZ1bmN0aW9uLgotCi0JKiBbd2luZG93cy9wYWludGluZy5jXSBbd2luZG93cy9zY3JvbGwuY10KLQlBZGRlZCBIaWRlQ2FyZXQvU2hvd0NhcmV0IGNhbGxzLgotCi0JKiBbb2JqZWN0cy9mb250LmNdCi0JQWRkZWQgR2V0Q2hhckFCQ1dpZHRocyBzdHViLgotCi0JKiBbaW5jbHVkZS93aW5kb3dzLmhdCi0JIiNkZWZpbmUicyBuZWVkZWQgZm9yIGNoYW5nZXMgbWVudGlvbmVkIGFib3ZlLgotCi1Nb24gRmViIDE5IDIwOjEyOjAzIDE5OTYgIEhhbnMgZGUgR3JhYWZmICA8SGFucy5kZUdyYWFmZkB0d2k3Mi50d2kudHVkZWxmdC5ubD4KLQotCSogW2luY2x1ZGUvd2luc29jay5oXQotCUNoYW5nZSBvcmRlciBvZiBpbmNsdWRlcyB0byBnZXQgaW5fYWRkciBzdHJ1Y3QgZGVmaW5lZCBpbiB0aW1lLgotCShOb3RlOiBMaW51eCAxLjMuNjYsIGxpYmMgNS4yLjE4KQotCi0JKiBbbWlzYy9tYWluLmNdIFtpbmNsdWRlL29wdGlvbnMuaF0gW21pc2NlbXUvaW50MmYuY10KLQlDaGFuZ2VkIHRoZSAtZW5oYW5jZWQgb3B0aW9uIGludG8gYSAtbW9kZSBvcHRpb24sIHdoaWNoIGNhbiBiZQotCWVpdGhlciAnc3RhbmRhcmQnIG9yICdlbmhhbmNlZCcuICdlbmhhbmNlZCcgaXMgdGhlIGRlZmF1bHQuCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVN1biBGZWIgMTggMTY6MzU6NTQgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+Ci0KLQkqIFtjb250cm9scy9kZXNrdG9wLmNdCi0JTG9vayBmb3IgdGhlIHdhbGxwYXBlciBmaWxlIGluIHRoZSBXaW5kb3dzIGRpcmVjdG9yeS4KLQotCSogW2NvbnRyb2xzL21lbnUuY10KLQlGaXhlZCBzd2FwcGVkIHBhcmFtZXRlcnMgaW4gU2V0TWVudUl0ZW1CaXRtYXBzKCkuCi0JQ3JlYXRlIGEgc2VwYXJhdG9yIGluIE1FTlVfU2V0SXRlbURhdGEoKSB3aGVuIHRoZSBzdHJpbmcgaXMgTlVMTC4KLQotCSogW2ZpbGUvZG9zZnMuY10KLQlET1NGU19GaW5kTmV4dDogZG9uJ3QgcmV0dXJuICcuJyBhbmQgJy4uJyBpbiBhIGRyaXZlIHJvb3QgZGlyLgotCi0JKiBbZmlsZXMvZmlsZS5jXQotCUFkZGVkIGEgRE9TX0ZJTEUgc3RydWN0dXJlIHRvIHN0b3JlIHBlci1maWxlIGluZm9ybWF0aW9uIChub3QKLQlyZWFsbHkgdXNlZCB5ZXQpLgotCUZpeGVkIF9scmVhZCBhbmQgX2hyZWFkIHRvIGNoZWNrIHRoZSBzaXplIG9mIHRoZSBidWZmZXIgYmVmb3JlCi0JY2FsbGluZyBVbml4IHJlYWQoKSB0byBhdm9pZCBFRkFVTFQgZXJyb3IuCi0KLQkqIFttaXNjL2V4ZWMuY10KLQlSZXR1cm4gVFJVRSBpbiBXaW5IZWxwKCkgZm9yIEhFTFBfUVVJVCB0byBxdWlldCBOb3RlcGFkIG9uIGV4aXQuCi0KLQkqIFttaXNjZW11L2luc3RyLmNdCi0JQ2FsbCBET1NNRU1fQWxhcm0oKSBpbiBJTlNUUl9SZXBsYWNlU2VsZWN0b3IoKS4gVGhpcyBzaG91bGQgZml4Ci0gCXByb2dyYW1zIHRoYXQgcG9sbCB0aGUgQklPUyBjb3VudGVyLCBwcm92aWRlZCB0aGV5IHJlbG9hZCB0aGUKLSAJc2VsZWN0b3Igb24gZXZlcnkgcmVhZC4KLQotCSogW21pc2NlbXUvaW50MjEuY10KLQlSZS1pbXBsZW1lbnRlZCBGaW5kRmlyc3QvRmluZE5leHQgZm9yIEZDQiBjYWxscy4KLQotCSogW3dpbmRvd3MvbWVzc2FnZS5jXSBbd2luZG93cy93aW5wb3MuY10KLQlNZXJnZWQgTVNHX0dldFdpbmRvd0ZvckV2ZW50KCkgYW5kIFdJTlBPU19XaW5kb3dGcm9tUG9pbnQoKS4KLQotCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdIFt3aW5kb3dzL3dpbi5jXSBbaW5jbHVkZS93aW5kb3dzLmhdCi0JQWRkZWQgYSBwZXItd2luZG93IFdJTl9NQU5BR0VEIGZsYWc7IG9ubHkgd2luZG93cyB0aGF0IGhhdmUgYQotCWRpYWxvZyBmcmFtZSBvciBhIHNpemluZyBib3JkZXIgYXJlIG1hbmFnZWQuCi0KLVNhdCBGZWIgMTcgMTg6MjU6MDAgMTk5NiAgVGhvbWFzIFNhbmRmb3JkIDx0ZGdzYW5kZkBwcmRzLWdybi5kZW1vbi5jby51az4KLQotCSogW2lmMTYzMi9NYWtlZmlsZS5pbl0KLQlBZGRlZCAtZyBmbGFnIHRvIGNvbXBpbGF0aW9uIG9mIC5jIGZpbGVzIGdlbmVyYXRlZCBmcm9tICozMi5zcGVjLgotCi0JKiBbaWYxNjMyL2dkaTMyLnNwZWNdCi0JTnVtZXJvdXMgYWRkaXRpb25hbCBmdW5jdGlvbnMgaW1wbGVtZW50ZWQuCi0KLQkqIGlmMTYzMi91c2VyMzIuc3BlY10KLQl3c3ByaW50ZkEgbWFwcyB0byB2c3ByaW50ZiBub3Qgd3NwcmludGYKLQlOdW1lcm91cyBhZGRpdGlvbmFsIGZ1bmN0aW9ucyBpbXBsZW1lbnRlZC4KLQotCSogW2luY2x1ZGUvZ2RpLmhdIFtvYmplY3RzL2dkaW9iai5jXQotCU5ldyAjZGVmaW5lIE1BR0lDX0RPTlRDQVJFIGFkZGVkLiBUaGlzIGlzIHVzZWQgaW4KLQlHRElfR2V0T2JqUHRyIHRvIGVuYWJsZSBnZXR0aW5nIGEgcG9pbnRlciB0byBhIEdESSBvYmplY3Qgb2YKLQl1bmtub3cgdHlwZS4KLQotCSogW3dpbjMyL2dkaTMyLmNdCi0JTmV3IGZpbGUuCi0KLQkqIFt3aW4zMi9wYXJhbTMyLmNdCi0JV0lOMzJfTW92ZVRvRXgoKSAtIGhhbmRsZSBOVUxMIHBvaW50ZXIgYXJndW1lbnQuCi0KLQkqIFt3aW4zMi91c2VyMzIuY10KLQlVU0VSMzJfSW52YWxpZGF0ZVJlY3QgLSBoYW5kbGUgcGFzc2luZyBvZiBhIE5VTEwgcG9pbnRlci4KLQlVU0VSMzJfU2V0VGltZXIgLSBOZXcgZnVuY3Rpb24uCi0KLQkqIFtmaWxlcy9kaXJlY3RvcnkuY10KLQlGaXhlZCBESVJfSW5pdCgpIChvZmYgYnkgb25lIGluIGFsbG9jYXRpb24gb2Ygc3BhY2UgZm9yCi0JZW52aXJvbm1lbnQgdmFyaWFibGVzKS4KLQotCSogW2ZpbGVzL2RyaXZlLmNdCi0JQWRkZWQgPHN5cy90eXBlcy5oPiB0byAjaW5jbHVkZXMgKHByZXJlcXVpc2l0ZSBmb3IgPHN5cy9zdGF0Lmg+Ci0Jb24gRnJlZUJTRCkuCi0KLUZyaSBGZWIgMTYgMTA6MjY6NTYgMTk5NiAgQW5kcmVhcyBLaXJzY2hiYXVtIDxhbmtAcmJnLmluZm9ybWF0aWsudGgtZGFybXN0YWR0LmRlPgotCi0JKiBbY29udHJvbHMvbWVudS5jXQotCU1lbW9yeSBsZWFrIHBsdWdnZWQuCi0KLQkqIFtjb250cm9scy9lZGl0LmNdCi0JRXJhc2Ugc3BhY2Ugd2l0aCBmdW5jdGlvbiBFeHRUZXh0T3V0KCkuIFRoaXMgZWxpbWluYXRlcyB0aGUgdXNlIG9mCi0gCXhtYWxsb2MoKS4gIE1lbW9yeSBsZWFrIGluIEVESVRfV3JpdGVUZXh0IHBsdWdnZWQuCi0KLQkqIFtkZWJ1Z2dlci9kYl9kaXNhc20uY10KLQlPcGVyYW5kIGZvciBzY2FzIG5vdyBpcyBkaS4KLQotCSogW2ZpbGVzL3Byb2ZpbGUuY10KLQlQUk9GSUxFX0dldFNlY3Rpb24gd2FzIGNvcHlpbmcgdG9vIG11Y2ggZGF0YS4KLQlQUk9GSUxFX0dldFNlY3Rpb24gbm93IHJldHVybnMgdGhlIGNvcnJlY3QgdmFsdWUuIEl0IHdhcyByZXR1cm5pbmcKLSAJdGhlIG51bWJlciBvZiB1bnVzZWQgaW5zdGVhZCBvZiB1c2VkIGJ5dGVzLgotCi0JKiBbb2JqZWN0cy9kYy5jXQotCUNvcnJlY3RlZCB0d28gdHlwb3MgaW4gY29tbWVudHMuCi0KLQkqIFtvYmplY3RzL2ZvbnQuY10KLQlGT05UX01hdGNoRm9udCBkaWRuJ3QgcmV0dXJuIGlmIGl0IGNvdWxkbid0IGZpbmQgYW55IGZvbnQuCi0KLQkqIFtvYmplY3RzL29lbWJpdG1hcC5jXQotCUZyZWUgb2JqZWN0IG9ubHkgaWYgaXQgaGFzIGJlZW4gYWxsb2NhdGVkLgotCi0JKiBbd2luZG93cy9zY3JvbGwuY10KLQlNZW1vcnkgbGVhayBpbiBTY3JvbGxEQyBwbHVnZ2VkLgotCi1UdWUgRmViIDEzIDExOjE3OjAwIDE5OTYgV2lsbGlhbSBNYWdybyAgPHdtYWdyb0B0Yy5jb3JuZWxsLmVkdT4KLQotCSogW2NvbnRyb2xzL2VkaXQuY10KLQlJbXBsZW1lbnRlZCBFU19OT0hJREVTRUwgc3R5bGUsIHNoaWZ0K2NsaWNrIHNlbGVjdGlvbiwKLSAJc2hpZnQre2Fycm93LGhvbWUsZW5kLHBndXAscGdkbn0gc2VsZWN0aW9uLiAgT3B0aW1pemVkCi0JKGRlKXNlbGVjdGlvbiBkcmF3aW5nLiAgQ2hhbmdlZCBzZWxlY3Rpb24gZHJhd2luZyB0byB1c2UgY29ycmVjdAotIAlzeXN0ZW0gY29sb3JzIGluc3RlYWQgb2YgaW52ZXJ0aW5nLiAgRml4ZWQgZGVsZXRpbmcgb3IgYmFja3NwYWNpbmcKLSAJYWNyb3NzIGEgJ1xyXG4nIGVuZCBvZiBsaW5lIHBhaXIuICBTZWxlY3Rpb24gbm93IGFuY2hvcnMKLSAJY29ycmVjdGx5LiBGaXhlZCB0ZXh0IGxlYWtpbmcgYW5kIGV4dHJhIGdhcmJhZ2UgcHJvYmxlbSBidWcKLSAJdW5jb3ZlcmVkIGJ5IGNoYW5nZSBpbiBjbGFzcyBzdHlsZSBpbiB3aW5lOTYwMTMxLgotCi0JKiBbY29udHJvbHMvd2lkZ2V0cy5jXQotCUNsYXNzIGZsYWdzIG5vdyBtYXRjaCB0aG9zZSBvZiBXaW5kb3dzLgotCi1Nb24gRmViIDEyIDIxOjI4OjE5IDE5OTYgIE1hcnRpbiB2b24gTG9ld2lzIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+Ci0KLQkqIFtjb250cm9scy93aWRnZXRzLmNdCi0JV0lER0VUU19Jbml0OiBSRUxBWTMyX0dldEVudHJ5UG9pbnQgZG9lcyBub3QgdGFrZSBhIHN0cmluZyBhbnltb3JlLgotCi0JKiBbaWYxNjMyL01ha2VmaWxlLmluXVtpZjE2MzIvcmVsYXkzMi5jXVtpbmNsdWRlL3JlbGF5MzIuaF0KLQljb21jdGwzMi5zcGVjIG9sZTMyLnNwZWMgd2luc3Bvb2wuc3BlYzogbmV3IGZpbGVzLgotCVJFTEFZMzJfSW5pdDogY2FsbCBpbml0aWFsaXphdGlvbiBvZiBuZXcgRExMcy4KLQlSRUxBWTMyX0dldEVudHJ5UG9pbnQ6IGV4cGVjdHMgV0lOMzJfYnVpbHRpbiogbm93LgotCVJFTEFZMzJfTWFrZUZha2VNb2R1bGU6IG5ldyBmdW5jdGlvbi4KLQotCSogW2lmMTYzMi9nZGkzMi5zcGVjXVtpZjE2MzIva2VybmVsMzIuc3BlY11baWYxNjMyL3VzZXIzMi5zcGVjXQotCUFkZGVkIFdpbjk1IGZ1bmN0aW9ucy4gT3JkaW5hbHMgbm93IGRpZmZlciBmcm9tIGJvdGggTlQgYW5kIFdpbjk1Ci0JSGVhcENyZWF0ZSwgQ3JlYXRlRGlhbG9nSW5kaXJlY3RQYXJhbUEsIENyZWF0ZURpYWxvZ0luZGlyZWN0UGFyYW1XLAotCUNyZWF0ZURpYWxvZ1BhcmFtQSwgQ3JlYXRlRGlhbG9nUGFyYW1XLCBEaWFsb2dCb3hJbmRpcmVjdFBhcmFtQQotCURpYWxvZ0JveEluZGlyZWN0UGFyYW1XLCBEaWFsb2dCb3hQYXJhbUEsIERpYWxvZ0JveFBhcmFtVzoKLQluZXcgcmVsYXlzLgotCi0JKiBbaWYxNjMyL3NoZWxsMzIuc3BlY10KLQlzaGVsbDMyLnNwZWM6IHJlbnVtYmVyZWQgYWxsIGZ1bmN0aW9ucyB0byB0YWtlIGludG8gYWNjb3VudCBvcmRpbmFscy4KLQlUaGVzZSBzZWVtIHRvIGJlIGlkZW50aWNhbCBiZXR3ZWVuIE5UIGFuZCBXaW45NS4KLQotCSogW2luY2x1ZGUvZGlhbG9nLmhdW3dpbmRvd3MvZGlhbG9nLmNdCi0JeEJhc2VVbml0LHlCYXNlVW5pdCxESUFMT0dfRG9EaWFsb2dCb3g6IG1hZGUgbm9uLXN0YXRpYy4KLQotCSogW2luY2x1ZGUvaGFuZGxlMzIuaF0KLQlOZXcgaGFuZGxlIHR5cGVzIFZSQU5HRSwgSEVBUCwgSEVBUElURU0uCi0KLQkqIFtpbmNsdWRlL3BlX2ltYWdlLmhdW2xvYWRlci9wZV9pbWFnZS5jXQotCXN0cnVjdCB3X2ZpbGVzOiBuZXcgZmllbGQgYnVpbHRpbi4KLQlQRV9GaW5kRXhwb3J0ZWRGdW5jdGlvbjogc3VwcG9ydCBvcmRpbmFscy4KLQlQRV9HZXRQcm9jQWRkcmVzczogY2FsbCBSRUxBWTMyX0dldEVudHJ5UG9pbnQgZm9yIGJ1aWx0aW5zLgotCWZpeHVwX2ltcG9ydHM6IHN1cHBvcnQgb3JkaW5hbHMuCi0JUEVfTG9hZEltYWdlOiBwcmVmZXIgZGlyZWN0b3JpZXMgb3ZlciBzZWdtZW50cy4KLQotCSogW2luY2x1ZGUvcmVzb3VyY2UuaF1bd2luMzIvcmVzb3VyY2UuY10KLQlGaW5kUmVzb3VyY2UzMjogY2hhbmdlZCBwYXJhbWV0ZXIgZnJvbSBMUENUU1RSIHRvIExQQ1dTVFIKLQkJY2hlY2sgTEFOR19ORVVUUkFMIGlmIExBTkdfRU5HTElTSCBmYWlscy4KLQlMb2FkQWNjZWxlcmF0b3JzVyxTaXplb2ZSZXNvdXJjZTMyLEFjY2Vzc1Jlc291cmNlMzI6IAotCQlkaXNhYmxlZCBiZWNhdXNlIGl0J3MgYnJva2VuLgotCUNhc3RlZCB0byBhbmQgZnJvbSBMUFdTVFIgYXQgdmFyaW91cyBwbGFjZXMuCi0KLQkqIFtpbmNsdWRlL3N0cmluZzMyLmhdW3dpbjMyL3N0cmluZzMyLmNdCi0JQ2hhbmdlZCBwcm90b3R5cGVzIHRvIHRha2UgY29uc3QgYXJndW1lbnRzIHdoZXJlIGFwcHJvcHJpYXRlLgotCi0JKiBbaW5jbHVkZS9zdHJ1Y3QzMi5oXQotCU5ldyBzdHJ1Y3R1cmVzIERMR1RFTVBMQVRFMzIsIERMR0lURU1URU1QTEFURTMyLgotCi0JKiBbdG9vbHMvYnVpbGQuY10KLQlCdWlsZFNwZWMzMkZpbGVzOiBnZW5lcmF0ZSBCYXNlIHZhbHVlIGludG8gY29kZSwgZ2VuZXJhdGUgY2FsbCB0bwotCVJFTEFZMzJfTWFrZUZha2VNb2R1bGUuCi0JCi0JKiBbd2luMzIvaGVhcC5jXQotCVRoaXMgaXMgc3RpbGwgbm90IGZpbmlzaGVkIGFuZCBuZWVkcyByZXdvcmsuCi0JSGVhcEFsbG9jOiByZW5hbWVkIHRvIFNJTVBMRV9IZWFwQWxsb2MsIGltcGxlbWVudGVkIEhlYXBBbGxvYy4KLQlIZWFwQ3JlYXRlOiBpbXBsZW1lbnRlZCBvbiB0b3Agb2YgVmlydHVhbEFsbG9jLCB3aGljaCBkb2VzIG5vdCB3b3JrIHlldAotCUhlYXBEZXN0cm95LCBIRUFQX0dyb3dIZWFwLCBIZWFwRnJlZTogbmV3IGZ1bmN0aW9ucy4KLQotCSogW3dpbjMyL21lbW9yeS5jXQotCVN1cHBvcnQgZm9yIFZSQU5HRV9PQkpFQ1QuIFRoaXMgaXMgbm90IHlldCBjYWxsZWQgZnJvbSBhbnkgcGxhY2UsCi0JYW5kIG5lZWRzIG1vcmUgcGxhdGZvcm0gc3BlY2lmaWMgc3VwcG9ydAotCU1FTU9SWV9GaW5kVnJhbmdlLCBNRU1PUllfSXNWcmFuZ2VGcmVlLCBNRU1PUllfSW5zZXJ0VnJhbmdlLAotCU1FTU9SWV9BbGxvY1ZyYW5nZSwgTUVNT1JZX1JlbGVhc2VWcmFuZ2U6IG5ldyBmdW5jdGlvbnMuCi0KLQkqIFt3aW4zMi91c2VyMzIuY10KLQlXSU4zMl9DcmVhdGVXaW5kb3dFeEE6IGRvbid0IEdsb2JhbEFsbG9jIGZvciBpbnRlZ2VyIGNsYXNzIGFuZCB3aW5kb3cKLQluYW1lcywgYXMgaW4gZGlhbG9ncy4KLQlJbXBsZW1lbnRlZCBkaWFsb2cgZnVuY3Rpb25zIChzZWUgdXNlcjMyLnNwZWMpLgotCi0JKiBbd2luZG93cy9jYXJldC5jXQotCUNBUkVUX0luaXRpYWxpemU6IGNhbGwgUkVMQVkzMl9HZXRCdWlsdGluRExMLgotCi1Nb24gRmViIDEyIDE4OjUyOjQwIDE5OTYgIEppbSBQZXRlcnNvbiA8anNwZXRlckBiaXJjaC5lZS52dC5lZHU+Ci0KLQkqIFtjb250cm9scy9lZGl0LmNdCi0JUmVtb3ZlZCBjb21tZW50ZWQgb3V0ICNpZmRlZnMgZm9yIFdJTkVMSUIuCi0KLQkqIFt0b29scy9tYWtlaHRtbC5wbF0KLQlQdXQgaW4gZXJyb3IgY2hlY2tpbmcgd2hlbiB0cnlpbmcgdG8gb3BlbiBhIGZpbGUuCi0KLQkqIFtsaWJ0ZXN0L01ha2VmaWxlLmluXSBbbGlidGVzdC9uZXcuY10gW2xpYnRlc3QvaGVsbG80LmNdCi0JQWRkZWQgdHdvIG5ldyB0YXJnZXRzOiBoZWxsbzQgYW5kIG5ldy4KLQotCSogW2luY2x1ZGUvd2luZG93cy5oXQotCUFkZGVkIGRlZmluaXRpb24gb2YgREVWTU9ERSBzdHJ1Y3R1cmUsIGFsdGhvdWdoIGl0J3Mgbm90IHlldCB1c2VkLgotICAJTW9kaWZpZWQgdmFyaW91cyBBUEkgZnVuY3Rpb25zIGZyb20gQ3JlYXRlREMoKSB0byBFc2NhcGUoKSwgaW4KLSAJb3JkZXIgdG8gbWFrZSB0aGVtIG1vcmUgY29tcGxpYW50IHdpdGggdGhlIHN0cmljdCBBUEkgZGVmaW5pdGlvbnMuCi0KLQkqIFtpbmNsdWRlL3dpbnR5cGVzLmhdCi0JQWRkZWQgJ3R5cGVkZWYgY2hhciBUQ0hBUicuICBJdCBwcm9iYWJseSBzaG91bGQgYmUgZGVmaW5lZCBhcwotCSdzaG9ydCcsIGJ1dCB0aGVuIHdlIHdvdWxkIGhhdmUgdG8gc3VwcG9ydCBzdWNoIGNoYXJhY3RlcnMuICBBbHNvIGRpZAotCSd0eXBlZGVmIGNvbnN0IFRDSEFSKiBMUENUU1RSJyBhbmQgJ3R5cGVkZWYgVENIQVIqIExQVFNUUicuCi0JQWxzbyBkZWZpbmVkIFdOREVOVU1QUk9DLCBGT05URU5VTVBST0MsIEdPQkpFTlVNUFJPQywgUFJPUEVOVU1QUk9DCi0JTUZFTlVNUFJPQywgYW5kIEhHRElPQkouCi0KLU1vbiBGZWIgIDUgMTY6NDI6MDcgMTk5NiAgRnJhbnMgdmFuIERvcnNzZWxhZXIgPGRvcnNzZWxAcnVsaG0xLmxlaWRlbnVuaXYubmw+Ci0KLQkqIFttaXNjL2NvbW1kbGcuY10KLQlQYXRjaGVkIGEgYnVnIHRoYXQgb2NjdXJyZWQgaW4gdGhlIGludGVybmFsIENPTU1ETEcgbW9kdWxlIGZvciB0aGUKLSAJRmlsZU9wZW4oKSwgRmlsZVNhdmUoKSBhbmQgRmlsZVNhdmVBcygpIGZ1bmN0aW9ucy4gIFRoZSBmaWxlLXR5cGUKLSAJY29tYm9ib3ggaXMgbm93IGhhbmRsZWQgY29ycmVjdGx5LgotCi1GcmkgRmViICAyIDIyOjUyOjU4IDE5OTYgIFJvbWFuIERvbGVqc2kgIDxyb21hbkBzb3JyeS52c2UuY3o+Ci0KLQkqIFtyZXNvdXJjZXMvc3lzcmVzX0N6LnJjXQotCUFkZGVkIHN1cHBvcnQgZm9yIEN6ZWNoIFtDel0gbGFuZ3VhZ2UuCi0KLVRodSBGZWIgIDEgMDA6MzU6MDQgMTk5NiAgUGhpbGlwcGUgRGUgTXV5dGVyICA8cGhkbUBpbmZvLnVjbC5hYy5iZT4KLQotCSogW29iamVjdHMvZm9udC5jXQotCUZPTlRfbWF0Y2hmb250IDogZm9yIGZpeGVkLXNwYWNpbmcgZm9udHMsIGFsbG93ICdjJyBpZiAnbScgZmFpbHM7Ci0JZm9yIHZhcmlhYmxlLXNwYWNpbmcgZm9udHMgOiBhbGxvdyAnKicgaWYgJ3AnIGZhaWxzOyBpZiBhc2tlZCBsZkhlaWdodAotCWlzIC0xLCBhc3N1bWUgMC4KLQlDcmVhdGVGb250SW5kaXJlY3QgOiBpZiBmb250IHBhcmFtZXRlciBpcyBOVUxMLCBpc3N1ZSBhbiBlcnJvciBtZXNzYWdlLgotCUNyZWF0ZUZvbnQgOiBudWxsLXRlcm1pbmF0ZSBsZkZhY2VOYW1lLgotCVBhcnNlRm9udFBhcm1zIDogZGVidWcgY29kZSB0dXJuZWQgb2ZmIDogdG9vIHZlcmJvc2UuCi0JSW5pdEZvbnRzTGlzdCA6IHJlY29nbml6ZSAqLWMtKiBmb250cyBhcyBmaXhlZC1zcGFjaW5nIGZvbnRzLgotCi0JKiBbb2JqZWN0cy9jb2xvci5jXQotCUNvbG9yVG9QaHlzaWNhbCA6IGFkbWl0IDB4ZmYuLi4uLi4gQ09MT1JSRUYncyBhcyAweDAwLi4uLi4uIG9uZXMuCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1XZWQgSmFuIDMxIDEwOjU4OjAwIDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHN1bnNpdGUudW5jLmVkdT4KLQotCSogW2NvbmZpZ3VyZS5pbl0KLQlBZGRlZCAtLXdpdGgtZGxsIG9wdGlvbiB0byBidWlsZCBsaWJ3aW5lLnNvLgotCi0JKiBbY29udHJvbHMvbGlzdGJveC5jXQotCUZpeGVkIExpc3RCb3hEaXJlY3RvcnkoKSwgRGxnRGlyU2VsZWN0KCkgYW5kCi0JRGxnRGlyTGlzdCgpLiBIb3BlZnVsbHkgdGhlaXIgYmVoYXZpb3IgaXMgY29ycmVjdCBub3cuCi0KLQkqIFtjb250cm9scy9tZW51LmNdCi0JVXNlIFNFR1BUUnMgaW4gQ2hhbmdlTWVudSgpLCBJbnNlcnRNZW51KCksIEFwcGVuZE1lbnUoKSBhbmQKLSAJTW9kaWZ5TWVudSgpIGZvciB0aGUgaXRlbSBkYXRhLCB0byBhdm9pZCBjb3JydXB0aW5nIHRoZSBwb2ludGVyCi0gCWZvciBvd25lci1kcmF3biBpdGVtcy4KLQotCSogW2NvbnRyb2xzL3N0YXRpYy5jXQotCUF0dGVtcHQgdG8gbG9hZCBPRU0gaWNvbnMgZm9yIFNTX0lDT04gY29udHJvbHMuIFByb2JhYmx5IG5vdAotCWVudGlyZWx5IGNvcnJlY3QuCi0JRG9uJ3QgY2xpcCB0aGUgdGV4dCBvdXRwdXQuCi0KLQkqIFtmaWxlcy9kaXJlY3RvcnkuY10KLQlBZGQgdGVtcCBkaXIgYW5kIFdpbmRvd3MgZGlyIHRvIGVudmlyb25tZW50LgotCi0JKiBbZmlsZXMvZG9zX2ZzLmNdCi0JRml4ZWQgYSBmZXcgcGF0aCBoYW5kbGluZyBidWdzIGluIERPU0ZTX0dldFVuaXhGaWxlTmFtZSgpLgotCUNhY2hlIGxhc3QgdXNlZCBkaXJlY3RvcnkgaW4gRE9TRlNfRmluZE5leHQoKSB0byBhdm9pZCBxdWFkcmF0aWMKLQlzZWFyY2ggdGltZS4KLQotCSogW2ZpbGVzL2RyaXZlLmNdCi0JTmV3IGZvcm1hdCBmb3IgZHJpdmVzIGNvbmZpZ3VyYXRpb24gaW4gd2luZS5jb25mOyBhbGxvd3MKLQlzcGVjaWZ5aW5nIHRoZSB0eXBlLCBsYWJlbCBhbmQgc2VyaWFsIG51bWJlciBvZiBhIGRyaXZlLgotCi0JKiBbZmlsZXMvZmlsZS5jXQotCU5ldyBmdW5jdGlvbiBGSUxFX09wZW5Vbml4RmlsZSB0byBtYWtlIHN1cmUgd2UgZG9uJ3Qgb3BlbiBhCi0JZGlyZWN0b3J5IGluc3RlYWQgb2YgYSBmaWxlLgotCUZpeGVkIERPU0ZTX0dldFVuaXhGaWxlTmFtZSgpIGNoZWNrX2xhc3QgZmxhZyBpbiBGSUxFX01ha2VEaXIoKS4KLQotCSogW2ZpbGVzL3Byb2ZpbGUuY10KLQlSZXdyb3RlIHByb2ZpbGUgaGFuZGxpbmcuIFNob3VsZCBiZSBjbG9zZXIgdG8gV2luZG93cyBiZWhhdmlvciBub3cuCi0JTmV3IGZ1bmN0aW9uIFBST0ZJTEVfR2V0V2luZUluaVN0cmluZygpIHRvIGdldCBhIHN0cmluZyBmcm9tIHdpbmUuY29uZi4KLQlTdXBwb3J0IGVudmlyb25tZW50IHZhcmlhYmxlcyBpbiB3aW5lLmNvbmYuCi0KLQkqIFtsb2FkZXIvdGFzay5jXQotCUZpeGVkIHRoZSBvcmRlciBvZiBkZWxldGlvbiBpbiBUQVNLX0RlbGV0ZVRhc2soKSB0byBhdm9pZCBtZW1vcnkKLQljb3JydXB0aW9uLgotCi0JKiBbbWVtb3J5L2dsb2JhbC5jXQotCUNyZWF0ZSBhIGRpc2NhcmRlZCBibG9jayBvbiBHbG9iYWxBbGxvYygpIGlmIHRoZSBzaXplIGlzIDA7IHRoYW5rcwotCXRvIEpvaG4gSGFydmV5IGZvciBub3RpY2luZyB0aGlzLgotCi0JKiBbbWVtb3J5L2xvY2FsLmNdCi0JTE9DQUxfR2V0SGVhcDogbWFrZSBzdXJlIHRoZSBwb2ludGVyIGlzIHZhbGlkIGJlZm9yZSBjaGVja2luZwotCW1hZ2ljIG51bWJlci4KLQotCSogW21pc2MvbWFpbi5jXQotCU1vdmVkIHByb2ZpbGUgYW5kIHJlZ2lzdHJ5IHNhdmluZyB0byBFeGl0V2luZG93cygpLCBzbyB3ZSBkb24ndAotCXRyeSB0byBzYXZlIHRoZW0gaW4gY2FzZSBvZiBhIGNyYXNoLgotCi0JKiBbbWlzY2VtdS9pbnQyMS5jXQotCUlOVDIxX0dldEZyZWVEaXNrU3BhY2U6IHRyeSB0byBjb21wdXRlIHRoZSBjbHVzdGVyIHNpemUgZnJvbSB0aGUKLQlmaWxlc3lzdGVtIHNpemUgaW5zdGVhZCBvZiBoYXJkLWNvZGluZyBpdCB0byA2NC4KLQlGaXhlZCBmdW5jdGlvbnMgMHgzZiBhbmQgMHg0MCB0byB1c2UgX2hyZWFkIGFuZCBfaHdyaXRlIHRvIGFsbG93Ci0JcmVhZGluZyBvciB3cml0aW5nIDY1NTM1IGJ5dGVzICh0aGFua3MgdG8gQnJ1Y2UgTWlsbmVyIGZvciB0aGlzCW9uZSkuCi0KLQkqIFt3aW5kb3dzL21lc3NhZ2UuY10KLQlGaXhlZCBidWcgaW4gbGlua2VkLWxpc3QgaGFuZGxpbmcgaW4gTVNHX0RlbGV0ZVF1ZXVlKCkuCi0JU2ltcGxpZmllZCBTZXRNZXNzYWdlUXVldWUoKS4KLQotCSogW3dpbmUuaW5pXSBbd2luZS5tYW5dCi0JVXBkYXRlZCBmb3IgbmV3IGRyaXZlcyBjb25maWd1cmF0aW9uIGZvcm1hdC4KLQotVHVlIEphbiAzMCAxMToyNDo0NiAxOTk2ICBXaWxsaWFtIE1hZ3JvICA8d21hZ3JvQHRjLmNvcm5lbGwuZWR1PgotCi0JKiBbY29udHJvbHMvZWRpdC5jXQotCUltcGxlbWVudGVkIEVTX1BBU1NXT1JEIHN0eWxlLCBFTV9TRVRQQVNTV09SRENIQVIgYW5kCi0gCUVNX0dFVFBBU1NXT1JEQ0hBUiBtZXNzYWdlcy4KLQotCSogW2NvbnRyb2xzL3dpZGdldHMuY10KLQlBZGp1c3RlZCBjbGFzcyBjcmVhdGlvbiBmbGFncyB0byBiZXR0ZXIgbWF0Y2ggdmFsdWVzIFdpbmRvd3MgdXNlcy4KLQotCSogW2luY2x1ZGUvd2luZG93cy5oXQotCUZpeGVkIEVTX05PSElERVNFTCB0eXBvLgotCi0JKiBbbG9hZGVyL25lX2ltYWdlLmNdCi0JQWRkZWQgZGV0ZWN0aW9uIGZvciB6ZXJvIG9mZnNldCBpbiBSQUREUiBmaXh1cHMuIFF1aWNrZW4KLQl3YXMgaW4gYW4gaW5maW5pdGUgbG9vcCBoZXJlLgotCi1Nb24gSmFuIDI5IDIwOjEyOjIyIDE5OTYgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+Ci0KLQkqIFtmaWxlcy9kb3NfZnMuY10KLQlCdWdmaXg6IHJhbmdlIGVycm9yIGluIG1vbnRoIHZhbHVlICgwLi4xMSBzZXQgdG8gMS4uMTIpLgotCi0JKiBbd2luZG93cy9jYXJldC5jXQotCUNoYW5nZWQgUk9QMi1tb2RlIHRvIFIyX05PVFhPUlBFTiBpbiBDQVJFVF9DYWxsYmFjayBmb3IgcHVsc2VkCi0gCWFwcGVhcmFuY2Ugb2YgdGhlIGNhcmV0LgotCi0JKiBbd2luZG93cy9tZGkuY10gW2luY2x1ZGUvbWRpLmhdCi0JQ2hhbmdlZCBNRElUaWxlKCk6IGFkZGVkIGEgbmV3IHBhcmFtZXRlciBXT1JEIHdQYXJhbSBmb3IKLSAJV01fTURJVElMRSBzZWNvbmQgdGlsaW5nIG1ldGhvZCAoTURJVElMRV9IT1JJWk9OVEFMIGluIHdQYXJhbSkgYXMKLSAJdXNlZCBpbiBXaW4zLjEKLQotU3VuIEphbiAyOCAxNDoyMDowMCAxOTk2ICBDYW1lcm9uIEhlaWRlICA8aGVpZGVAZWUudWFsYmVydGEuY2E+Ci0KLQkqIFttaXNjZW11L2ludDJmLmNdCi0JQWRkZWQgYSBzbWFsbCBiaXQgb2YgTVNDREVYIGVtdWxhdGlvbi4KLQotCSogW3dpbmRvd3MvYWxpYXMuY10KLQlBTElBU19SZWdpc3RlckFsaWFzIHdhcyByZXR1cm5pbmcgdGhlIGhhc2ggdmFsdWUgd2hlbiBpdCBzaG91bGQKLSAJaGF2ZSBiZWVuIHJldHVybmluZyB0aGUgcmVjb3JkIG51bWJlci4KLQkKLVNhdCBKYW4gMjcgMTA6NTM6NTEgMTk5NiAgSmltIFBldGVyc29uIDxqc3BldGVyQGJpcmNoLmVlLnZ0LmVkdT4KLQotCSogW2luY2x1ZGUvc2hlbGwuaF0gW2luY2x1ZGUvd2ludHlwZXMuaF0KLQlNb3ZlZCBkZWZpbml0aW9uIG9mIEhLRVkgYW5kIExQSEtFWSB0eXBlcyB0byBpbmNsdWRlL3dpbnR5cGVzLmguCi0JRGVjbGFyZWQgRk9OVEVOVU1QUk9DIGluIHdpbnR5cGVzLmguCi0KLQkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KLQlBZGRlZCBkZWZpbml0aW9uIG9mIEtFUk5JTkdQQUlSIGFuZCBMUEtFUk5JTkdQQUlSIHR5cGVzLiAgQWRkZWQKLQlkZWNsYXJhdGlvbnMgZm9yIENvcHlDdXJzb3IoKSwgQ29weUljb24oKSwgRW51bUZvbnRGYW1pbGllcygpLAotCUV4dHJhY3RJY29uKCksIEZhdGFsQXBwRXhpdCgpLCBGaW5kRXhlY3V0YWJsZSgpLCBHZXRDbGlwQ3Vyc29yKCksCi0JR2V0S2VybmluZ1BhaXJzKCksIEdldFF1ZXVlU3RhdHVzKCksIEdldFJhc3Rlcml6ZXJDYXBzKCksCi0JSXNHRElPYmplY3QoKSwgSXNNZW51KCksIElzVGFzaygpLCBSZWdDbG9zZUtleSgpLCBSZWdDcmVhdGVLZXkoKSwKLQlSZWdEZWxldGVLZXkoKSwgUmVnRW51bUtleSgpLCBSZWdPcGVuS2V5KCksIFJlZ1F1ZXJ5VmFsdWUoKSwKLQlSZWdTZXRWYWx1ZSgpLCBSZXNldERDKCksIFNoZWxsRXhlY3V0ZSgpLCBTeXN0ZW1QYXJhbWV0ZXJzSW5mbygpLAotCWFuZCB3c3ByaW50ZigpLgotCi0JKiBbdG9vbHMvbWFrZWh0bWwucGxdIFtkb2N1bWVudGF0aW9uL2FwaXcuaW5kZXhdCi0JTmV3IGZpbGVzIHRoYXQgc2NhbiB3aW5kb3dzLmgsIGNvbW1kbGcuaCwgYW5kIHRvb2xoZWxwLmggYW5kIG91dHB1dAotCWFuIEhUTUwgc29ydGVkIGxpc3Qgd2l0aCBvcHRpb25hbCBsaW5rcyB0byB3d3cud2lsbG93cy5jb20gYW5kIGEKLQl0YWxseSBvZiB1bmltcGxlbWVudGVkIEFQSVcgZnVuY3Rpb25zLgotCi0JKiBbb2JqZWN0cy9jdXJzb3JpY29uLmNdCi0JQWRkZWQgV2luMzIgdmVyc2lvbnMgb2YgQ29weUljb24oKSBhbmQgQ29weUN1cnNvcigpIGZvciB1c2UgaW4KLQlsaWJ3aW5lLgotCi0JKiBbd2luMzIvcmVzb3VyY2UuY10gW3dpbjMyL3dpbnByb2NzLmNdCi0JQWRkZWQgJyNpbmNsdWRlICJsaWJyZXMuaCInIGFuZCBleHBsaWNpdCBkZWNsYXJhdGlvbnMgb2Ygd2luZG93cwotCXByb2NzIGluIG9yZGVyIHRvIGF2b2lkIHdhcm5pbmdzLgotCi0JKiBbd2luZG93cy91dGlsaXR5LmNdCi0JQWRkZWQgV2luMzIgdmVyc2lvbiBvZiBNdWxEaXYoKSBmb3IgbGlid2luZS4KLQotCSogWyovKl0gW2luY2x1ZGUvd2luZG93cy5oXQotCUNoYW5nZWQgc2V2ZXJhbCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgdG8gY29tcGx5IG1vcmUgc3RyaWN0bHkgdG8KLQl0aGUgd2luZG93cyBBUEkgKHdpdGhvdXQsIGhvcGVmdWxseSwgYWx0ZXJpbmcgdGhlaXIgZnVuY3Rpb25hbGl0eSkuCi0KLQkqIFtjb250cm9scy9tZW51LmNdCi0JTWFkZSB0aGUgcmV0dXJuIHZhbHVlIG9mIENoZWNrTWVudUl0ZW0gYmUgdGhlIHByZXZpb3VzIHN0YXRlIG9mCi0gCXRoZSBtZW51IGl0ZW0gaWYgaXQgd2FzIGZvdW5kLCBvdGhlcndpc2UgLTEgYXMgc3BlY2lmaWVkIGluIHRoZQotIAlTREsuIFRoaXMgY29uZmxpY3RzIHdpdGggdGhlIEFQSVcgc3BlY2lmaWNhdGlvbiwgd2hpY2ggc2F5cyBpdAotIAlzaG91bGQgcmV0dXJuIFRSVUUgaWYgc3VjY2Vzc2Z1bCwgb3RoZXJ3aXNlIEZBTFNFLgotCi0JKiBbaW5jbHVkZS93aW5kb3dzLmhdCi0JQWRkZWQgb2Jzb2xldGUgV01fU0laRSBtZXNzYWdlIHdQYXJhbSBuYW1lcyBmb3IgY29tcGF0aWJpbGl0eS4KLSAgCUFkZGVkIFdpbkhlbHAoKSBjb21tYW5kIGNvbnN0YW50cywgZXZlbiB0aG91Z2ggdGhleSBhcmUgbm90IHlldAotIAlzdXBwb3J0ZWQuCi0KLQkqIFtyYy93aW5lcmMuY10KLQlUaWRpZWQgdXAgdHJhbnNmb3JtX2JpbmFyeV9maWxlKCkuICBJbiBhcmd1bWVudCBjaGVja2luZywgZmxhdHRlbmVkCi0JYW55IGludmFsaWQgY2hhcmFjdGVycyBzcGVjaWZpZWQgd2l0aCB0aGUgcHJlZml4IGFyZ3VtZW50LgotCi0JKiBbbGlicmFyeS9saWJyZXMuY10KLQlNYWRlIEZpbmRSZXNvdXJjZSgpIGNhc2UtaW5zZW5zaXRpdmUgd2hlbiBwYXJhbWV0ZXIgJ25hbWUnIGlzIGEgc3RyaW5nLgotCi1TYXQgSmFuIDI3IDAyOjMwIDE5OTYgIFV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnRoLWRhcm1zdGFkdC5kZQotCi0JKiBbZmlsZXMvZHJpdmUuY10KLQlJZiByb290ICIvIiBpcyBnaXZlbiBpbiB3aW5lLmNvbmYsIHVzZSBpdCBhcyBsYXN0IHJlc29ydC4KLQotCSogW2ZpbGVzL2ZpbGUuY10KLQlSZXBvcnQgRVJfQWNjZXNzRGVuaWVkIGl0IGRpc2sgaXN0IG5vdCB3cml0YWJsZQotCU1vcmUgRGVidWcgT3V0cHV0Ci0KLQkqIFttaXNjZW11L2ludDIxLmNdCi0JU3F1ZWV6ZWQgc29tZSBidWdzIGluIEV4dGVuZGVkT3BlbkNyZWF0ZUZpbGUKLQkKLQkqIFt3aW5kb3dzL3dpbnBvcy5jXQotCVNvbWUgd2luZG93cyBtYXkgbm90IGJlIG1vdmVkIG9yIHJlc2l6ZWQuIFdlIGFyZSBtaXNzaW5nIHNvbWUKLQlzdHJ1Y3R1cmVzIHRvIGJlIGV4YWN0LCBidXQgdGhlIGFwcHJvYWNoIHNob3VsZCBoZWxwIGluIHNvbWUgY2FzZXMKLQlhbmQgbWFrZSB0aGluZ3Mgd29yc2UgaW4gbXVjaCBmZXdlci4KLQotRnJpIEphbiAyNiAxMDoyNDowMCAxOTk2ICBUaG9tYXMgU2FuZGZvcmQgPHQuZC5nLnNhbmRmb3JkQHByZHMtZ3JuLmRlbW9uLmNvLnVrPgotCi0JKiBbbG9hZGVyL3BlX2ltYWdlLmNdCi0JZml4dXBfaW1wb3J0czogRmluZCBidWlsdGlucyBmb3IgQm9ybGFuZCBzdHlsZSBlbnRyaWVzLCB0b28KLQotRnJpIEphbiAyNiAxMDoyNDowMCAxOTk2ICBNYXJ0aW4gdm9uIExvZXdpcyA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgotCi0JKiBbY29udHJvbHMvbWVudS5jXQotCUxvYWRNZW51OiBicmFuY2ggdG8gV2luMzIgZm9yIFBFIG1vZHVsZXMKLQotCSogW2lmMTYzMi9nZGkuc3BlY11baWYxNjMyL2tlcm5lbDMyLnNwZWNdW2lmMTYzMi91c2VyMzIuc3BlY10KLQlEZWxldGVPYmplY3QsIEdldFBpeGVsLCBTZXRQaXhlbCxXcml0ZVByaXZhdGVQcm9maWxlU3RyaW5nQSwKLQlXcml0ZVByb2ZpbGVTdHJpbmdBLCBFbXB0eUNsaXBib2FyZCwgRW5hYmxlTWVudUl0ZW0sIEVuYWJsZVNjcm9sbEJhciwKLQlFbmFibGVXaW5kb3csIEludmFsaWRhdGVSZWN0LCBTZXRXaW5kb3dUZXh0QSwgV2luSGVscEE6IG5ldyByZWxheXMKLQlEcmF3VGV4dEEsIE1vdmVUb0V4LCBHZXRDbGllbnRSZWN0LCBJbnZhbGlkYXRlUmVjdCwgTG9hZEJpdG1hcEEvVywKLQlMb2FkQWNjZWxlcmF0b3JzQS9XLCBMb2FkTWVudVtJbmRpcmVjdF1BL1csIExvYWRTdHJpbmdBL1c6IGNoYW5nZWQKLQl0byBjb252ZXJ0IHBhcmFtZXRlcnMgb3IgbmFtaW5nIGNvbnZlbnRpb24KLQotCSogW2luY2x1ZGUva2VybmVsMzIuaF1baW5jbHVkZS93aW50eXBlcy5oXQotCW1vdmVkIFdDSEFSLCBkZWZpbmVkIExQV1NUUgotCi0JKiBbaW5jbHVkZS9zdHJpbmczMi5oXVt3aW4zMi9zdHJpbmczMi5jXVtpbmNsdWRlL3N0cnVjdDMyLmhdCi0JTmV3IGZpbGVzCi0KLQkqIFtsb2FkZXIvbW9kdWxlLmhdCi0JTG9hZE1vZHVsZTogZXhpdCBhZnRlciByZXR1cm5pbmcgZnJvbSBQRV9Mb2FkTW9kdWxlCi0KLQkqIFtsb2FkZXIvcGVfaW1hZ2UuY10KLQlteV93Y3N0b21iczogaXNhc2NpaSBkb2VzIG5vdCB3b3JrIG9uIExpbnV4IGZvciBVbmljb2RlCi0JUEVfTG9hZEltYWdlOiBIYW5kbGUgZGlyZWN0b3JpZXMKLQotCSogW21pc2MvdXNlcjMyLmNdCi0JVVNFUjMyX1JFQ1QzMnRvMTYsIFVTRVIzMl9SRUNUMTZ0bzMyOiBuZXcgZnVuY3Rpb25zCi0JaW1wbGVtZW50ZWQgbmV3IHVzZXIzMiByZWxheXMKLQotCSogW21pc2MvbmV3Zm5zLmNdCi0JV0lOMzJfV2luSGVscEE6IG5ldyBmdW5jdGlvbgotCi0JKiBbd2luMzIvcGFyYW0zMi5jXQotCU5ldyBmaWxlCi0KLQkqIFt3aW4zMi9yZXNvdXJjZS5jXQotCUdldFJlc0RpckVudHJ5OiBhZGRlZCBzdXBwb3J0IGZvciBuYW1lZCBlbnRyaWVzCi0JV0lOMzJfTG9hZEFjY2VsZXJhdG9yc1c6IGludm9rZSAqMzIgcmVzb3VyY2UgZnVuY3Rpb25zCi0JV0lOMzJfTG9hZEJpdG1hcEE6IGNvbnZlcnQgbmFtZSB0byB1bmljb2RlIGlmIGFwcHJvcHJpYXRlCi0JV0lOMzJfUGFyc2VNZW51OiBuZXcgZnVuY3Rpb24KLQlpbXBsZW1lbnRlZCBuZXcgcmVzb3VyY2UgZnVuY3Rpb25zIGZyb20gdXNlcjMyLnNwZWMKLQotV2VkIEphbiAyNCAxODowOTowMCAxOTk2IEFsZXggS29yb2JrYSA8YWxleEBwaG0zMC5waGFybS5zdW55c2IuZWR1PgotCi0JKiBbb2JqZWN0cy9jdXJzb3JpY29uLmNdCi0JR2V0SWNvbklkKCkgYW5kIExvYWRJY29uSGFuZGxlcigpIGZ1bmN0aW9ucy4KLQotCSogW3dpbmRvd3MvbWRpLmNdCi0JQmV0dGVyIG1heGltaXphdGlvbiBzdXBwb3J0LCBUcmFuc2xhdGVNRElTeXNBY2NlbCgpIGZ1bmN0aW9uLCAKLQltaXNjIGltcHJvdmVtZW50cy4KLQotCSogW3dpbmRvd3MvZGVmd25kLmNdCi0JRml4IGZvciBXTV9XSU5ET1dQT1NDSEFOR0VEIG1lc3NhZ2UgaGFuZGxlci4KLQotCSogW3dpbmRvd3Mvd2lucG9zLmNdCi0JUmV3cm90ZSBXaW5kb3dGcm9tUG9pbnQoKSBmdW5jdGlvbi4KLQotU3VuIEphbiAyMSAxOTk2IDE3OjA1OjA5ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGZhdWkwMS5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KLQotCSogW2luY2x1ZGUvdG9vbGhlbHAuaF0gW21pc2MvdG9vbGhlbHAuY10KLQlBZGRlZCBOb3RpZnkoVW4pUmVnaXN0ZXIsIGJ1dCBubyBjYWxsYmFja3MgeWV0LgotCi1GcmkgSmFuIDE5IDAxOjQzOjM3IDE5OTYgVmljdG9yIFNjaG5laWRlciA8cm9vdEB0YWlsb3Iucm9tYW4ub3JnPgotCi0JKiBbTWFrZWZpbGUuaW5dCi0JQWRkZWQgdGFyZ2V0IGZvciBsaWJ3aW5lLnNvLjEuMC4KLQotCSogW2xpYnJhcnkvd2lubWFpbi5jXQotCUZvciBXSU5FTElCRExMLCBfV2luTWFpbiBqdXN0IHJldHVybnMgaEluc3RhbmNlIGluc3RlYWQgb2YgY2FsbGluZwotCVdpbk1haW4oKS4KLQotCSogW21pc2MvbWFpbi5jXQotCUZvciBXSU5FTElCRExMLCByZW5hbWVkIG1haW4oKSB0byBfd2luZV9tYWluKCkgZm9yIGNhbGxpbmcgZnJvbSB0aGUKLQlzdHViIG1haW4gZnVuY3Rpb24uCi0KLQkqIFtsaWJyYXJ5L3dpbmVzdHViLmNdIChuZXcgZmlsZSkKLQlQcm92aWRlcyBhIHN0dWIgbWFpbigpIGZ1bmN0aW9uIGZvciB1c2luZyBsaWJ3aW5lLnNvLgotCi1UdWUgSmFuIDE2IDExOjA0OjM0IDE5OTYgIEFuYW5kIEt1bXJpYSA8YWt1bXJpYUBvemVtYWlsLmNvbS5hdT4KLQotCSogW3dpbnNvY2tldC5jXQotCUZpeCBFUEVSTSBwcm9ibGVtLgotCi0JKiBbZ2xvYmFsLmNdCi0JQXR0ZW1wdCB0byBkbyBzb21lIHNhbml0eSBjaGVja2luZyBpbiBNZW1NYW5JbmZvKCkuCi0KLQkqIFtDaGFuZ2Vsb2ddCi0JRml4IGNoYW5nZWxvZyBvdmVyc2lnaHQgZm9yIHByZXZpb3VzIGVudHJ5LgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVN1biBKYW4gMTQgMTM6NDU6MjIgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAc3Vuc2l0ZS51bmMuZWR1PgotCi0JKiBbY29uZmlndXJlLmluXQotCUFkZGVkIGNoZWNrIGZvciBnY2Mgc3RyZW5ndGgtcmVkdWNlIGJ1Zy4KLQotCSogW2NvbnRyb2xzL2xpc3Rib3guY10KLQlDaGFuZ2VkIExpc3RCb3hEaXJlY3RvcnkoKSB0byB1c2UgdGhlIG5ldyBET1MgZmlsZSBmdW5jdGlvbnMuCi0KLQkqIFtjb250cm9scy9tZW51LmNdCi0JRml4ZWQgcGFyYW1ldGVycyBmb3IgRGVsZXRlTWVudSgpIGNhbGwgaW4gQ2hhbmdlTWVudSgpLgotCi0JKiBbZGVidWdnZXIvc3RhY2suY10KLQlBbHNvIGRpc3BsYXkgY3VycmVudCBmcmFtZSBpbiBiYWNrLXRyYWNlLgotCi0JKiBbZmlsZXMvZGlyZWN0b3J5LmNdIFtmaWxlcy9kb3NfZnMuY10gW2ZpbGVzL2RyaXZlLmNdIFtmaWxlcy9maWxlLmNdCi0JQ29tcGxldGUgcmV3cml0ZSBvZiB0aGUgRE9TIGZpbGUgaGFuZGxpbmcuCi0JSW1wbGVtZW50ZWQgcGVyLXRhc2sgZmlsZSBoYW5kbGVzLgotCVJlbW92ZWQgZGVmYXVsdCBaOiBkcml2ZTsgbmVlZHMgdG8gYmUgcHV0IGV4cGxpY2l0ZWx5IGluIHdpbmUuaW5pCi0JaWYgZGVzaXJlZC4KLQotCSogW2xvYWRlci9tb2R1bGUuY10KLQlGaXhlZCBmaWxlIGRlc2NyaXB0b3IgbGVhayBpbiBMb2FkTW9kdWxlKCkuCi0KLQkqIFtsb2FkZXIvdGFzay5jXQotCUluaXRpYWxpc2UgUERCIGZpbGUgaGFuZGxlIHRhYmxlIGluIFRBU0tfQ3JlYXRlVGFzaygpLgotCUNsb3NlIGZpbGUgaGFuZGxlcyBvbiB0YXNrIHRlcm1pbmF0aW9uLgotCUltcGxlbWVudGVkIFNldEVycm9yTW9kZSgpLgotCi0JKiBbbWlzYy9uZXR3b3JrLmNdCi0JRml4ZWQgV05ldEdldENvbm5lY3Rpb24oKSB0byB1c2UgR2V0RHJpdmVUeXBlKCkuCi0KLQkqIFttaXNjL3htYWxsb2MuY10KLQlBZGRlZCBmdW5jdGlvbiB4c3RyZHVwKCkuCi0KLQkqIFttaXNjZW11L2ludDIxLmNdCi0JTWFueSBjaGFuZ2VzIGZvciBuZXcgRE9TIGZpbGUgZnVuY3Rpb25zLgotCi0JKiBbbWlzY2VtdS9pbnRlcnJ1cHRzLmNdCi0JTW92ZWQgRE9TX0dldEVxdWlwbWVudCgpIGZ1bmN0aW9uIGludG8gSU5UX0ludDExSGFuZGxlcigpLgotCi0JKiBbd2luZG93cy93aW4uY10KLQlCdWcgZml4OiBjcmVhdGUgc3lzdGVtIG1lbnUgYmVmb3JlIHNlbmRpbmcgV01fTkNDUkVBVEUuCi0KLQkqIFsqLyouY10KLQlSZXBsYWNlZCBzdHJjYXNlY21wIGFuZCBzdHJuY2FzZWNtcCBieSBsc3RyY21waSBhbmQgbHN0cm5jbXBpIGZvcgotCWJldHRlciBwb3J0YWJpbGl0eS4KLQotU2F0IEphbiAxMyAxNjoxMzowMiAxOTk2ICBKaW0gUGV0ZXJzb24gPGpzcGV0ZXJAYmlyY2guZWUudnQuZWR1PgotCi0JKiBbaW5jbHVkZS93aW50eXBlcy5oXQotCUFkZGVkICd0eXBlZGVmIEhHTE9CQUwgR09CQUxIQU5ETEU7Jy4gIFRoaXMgaXMgbm90IHByZWNpc2VseSBpbiBsaW5lCi0Jd2l0aCB0aGUgdHJ1ZSB3aW5kb3dzICd0eXBlZGVmIEhBTkRMRSBHTE9CQUxIQU5ETEU7JywgYnV0IEkgYmVsaWV2ZQotCWl0IHNob3VsZCBzdWZmaWNlLgotCi0JKiBbaW5jbHVkZS93aW5zb2NrLmhdCi0JQWRkZWQgJyNpbmNsdWRlIDxhcnBhL2luZXQuaD4nIGZvciB2YXJpb3VzIGRlY2xhcmF0aW9ucy4gICcjaWZkZWYnLWVkCi0Jb3V0IHNvbWUgb2xkIHN0eWxlIGludGVybmV0IGFkZHJlc3MgI2RlZmluZSdzLgotCi0JKiBbbG9hZGVyL3Rhc2suY10KLQlNYWRlIE1ha2VQcm9jSW5zdGFuY2UoKSByZXR1cm4gZmlyc3QgcGFyYW1ldGVyICNpZmRlZiBXSU5FTElCMzIuCi0JTWFkZSBGcmVlUHJvY0luc3RhbmNlKCkgZG8gbm90aGluZyAjaWZkZWYgV0lORUxJQjMyLgotCScjaWZkZWYnLWVkIG91dCBUQVNLX0FsbG9jVGh1bmsoKSwgYXMgaXQgd2FzIHVudXNlZCBpbiBXSU5FTElCMzIuCi0KLQkqIFtsaWJyYXJ5L21pc2NzdHVicy5jXQotCU1hZGUgR2V0V25kUHJvY0VudHJ5MTYoKSByZXR1cm4gQUNUSVZBVEVBUFBfY2FsbGJhY2soKSB3aGVuIGNhbGxlZAotCXdpdGggbmFtZT0iQWN0aXZhdGVBcHBQcm9jIi4gIFRoaXMgaGFyZGx5IHNlZW1zIGNvcnJlY3QsIGJ1dCBpdCdzIG15Ci0JYmVzdCBndWVzcyBhcyB0byBob3cgdGhlIGVtdWxhdG9yIHJlc3BvbmRzLgotCi1TYXQgSmFuICA2IDE3OjU3OjQ1IDE5OTYgIE1hcnRpbiB2b24gTG9ld2lzIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+Ci0KLQkqIFtpZjE2MzIva2VybmVsMzIuc3BlY11bd2luMzIvcHJvY2Vzcy5jXQotCVdJTjMyX0dldFByb2NBZGRyZXNzLCBMb2FkTGlicmFyeUE6IG5ldyBmdW5jdGlvbnMKLQotCSogW2lmMTYzMi9yZWxheTMyLmNdCi0JUkVMQVkzMl9HZXRFbnRyeVBvaW50OiBSZW1vdmVkIGNvZGUgdG8gbG9hZCBQRSBETExzCi0KLQkqIFtpbmNsdWRlL3BlX2ltYWdlLmhdW2luY2x1ZGUvcGVfZXhlLmhdCi0Jc3RydWN0IHBlX2RhdGE6IG5ldyBmaWVsZHMgYmFzZV9hZGRyLGxvYWRfYWRkcix2bWFfc2l6ZSxwZV9yZWxvYwotCXN0cnVjdCBQRV9SZWxvY19CbG9jazogbmV3IHN0cnVjdHVyZQotCi0JKiBbbG9hZGVyL21vZHVsZS5jXQotCU1PRFVMRV9SZWdpc3Rlck1vZHVsZTogbmV3IGZ1bmN0aW9uCi0KLQkqIFtsb2FkZXIvcGVfaW1hZ2UuY10KLQlQRV9GaW5kRXhwb3J0ZWRGdW5jdGlvbixQRV9HZXRQcm9jQWRkcmVzczogbmV3IGZ1bmN0aW9ucwotCWZpeHVwX2ltcG9ydHM6IGV4cGVjdCBzdHJ1Y3Qgd19maWxlcyogbm93LCBmaWxsIGRsbHNfdG9faW5pdCwKLQkgICAgICAgICAgICAgICBsb2FkIFBFIERMTHMKLQlkb19yZWxvY2F0aW9uczogbmV3IGZ1bmN0aW9ucwotCWNhbGNfdm1hX3NpemU6IHJlbmFtZWQgZnJvbSBkdW1wX3RhYmxlCi0JUEVfTG9hZEltYWdlOiB1c2UgbWFsbG9jIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgaW1hZ2UKLQlQRV9Jbml0RExMOiBleHBlY3QgSE1PRFVMRQotCVBFX0luaXRpYWxpemVETExzOiBuZXcgZnVuY3Rpb24KLQotCSogW2xvYWRlci90YXNrLmNdCi0JTkVfSW5pdGlhbGl6ZURMTHM6IGJyYW5jaCB0byBQRV9Jbml0aWFsaXplRExMcyBmb3IgUEUgbW9kdWxlcwotCUdldEV4ZVB0cjogQWNjZXB0IFBFIG1vZHVsZXMKLQotCSogW21pc2MvY29tbWRsZy5jXQotCUZJTEVETEdfV01Db21tYW5kOiB1bnBhY2sgV0lOMzIgV01fQ09NTUFORCBhcHByb3ByaWF0ZWx5IGZvciBXaW5lTGliCi0KLVRodSBKYW4gIDQgMTE6MzY6MjEgMTk5NiAgTWFuZnJlZCBXZWljaGVsIDxNYW5mcmVkLldlaWNoZWxAbWNoLnNuaS5kZT4KLQotCSogW21pc2MvcG9ydC5jXQotCU5ldyBmaWxlIHdpdGggdXNsZWVwKCkgZnVuY3Rpb24gZm9yIFNWUjQuCi0KLQkqIFtjb25maWd1cmUuaW5dCi0JQ2hlY2sgZm9yIHVzbGVlcCgpIGZ1bmN0aW9uLgotCi1UdWUgSmFuIDAyIDE0OjAwOjAwIDE5OTYgIEFuYW5kIEt1bXJpYSA8YWt1bXJpYUBvemVtYWlsLmNvbS5hdT4KLQotCSogW2lmMTYzMi90b29saGVscC5zcGVjXSBbaW5jbHVkZS90b29saGVscC5oXQotCSAgW21pc2MvdXNlci5jXSBbd2luZG93cy9tZXNzYWdlLmNdCi0JSW1wbGVtZW50IFRPT0xIRUxQLjgwIFRpbWVyQ291bnQuIEZpeCBHZXRUaWNrQ291bnQuCi0KLQkqIFt3aW5zb2NrZXQuY10KLQlGaXhlZCBFTk9FTlQgZXJyb3IuCi0KLQkqIFttaXNjZW11L2RwbWkuY10KLQlJbXBsZW1lbnQgRFBNSSBHZXQgUGFnZSBTaXplIChBWD0wNjA0LCBJTlQgMzEpCi0KLQkqIFttZW1vcnkvZ2xvYmFsLmNdCi0JSW1wbGVtZW50IFRPT0xIRUxQLjcyIEdldE1lbU1hbkluZm8uCi0KLU1vbiBKYW4gIDIgMTA6MzM6MDAgMTk5NiAgVGhvbWFzIFNhbmRmb3JkIDx0LmQuZy5zYW5kZm9yZEBwcmRzLWdybi5kZW1vbi5jby51az4KLQotCSogW2lmMTYzMi9jYWxsYmFjay5jXQotCUNhbGxXaW5kb3dQcm9jKCkgLSBXaGVuIGNhbGxpbmcgUkVMQVkzMl9DYWxsV2luZG93UHJvYywgY2hlY2sKLQl3aGV0aGVyIGxQYXJhbSBzaG91bGQgYmUgYSBTRUdQVFIsIGFuZCBpZiBzbyBjb252ZXJ0IGl0IHRvIG9uZS4KLQotCSogW2lmMTYzMi9nZGkuc3BlY10gW2lmMTYzMi9rZXJuZWwzMi5zcGVjXSBbaWYxNjMyL3VzZXIzMi5zcGVjXQotCU51bWVyb3VzIGZ1bmN0aW9ucyBhZGRlZCwgbW9zdGx5IGNhbGxzIHRvIG9yaWdpbmFsICh3aW4xNikKLSAJZnVuY3Rpb25zLiAgTm90ZSB0aGF0IHNvbWUgKG1hbnkpIG9mIHRoZXNlIGFyZSBwcm9iYWJseSBub3QKLSAJc3RyaWN0bHkgY29ycmVjdCwgYnV0IHdpdGggdGhlc2UgYWRkaXRpb25zIGZyZWVjZWxsIHdpbGwgYXQgbGVhc3QKLSAJZGlzcGxheSBpdHMgbWFpbiB3aW5kb3cgdGhvdWdoIGl0IGlzIGdhcmJsZWQuCi0KLQkqIFtpZjE2MzIvd2lucHJvY3Muc3BlY10KLQlDb21wbGV0ZWx5IHJld3JpdHRlbiAtIGFsbCBXbmRQcm9jcyBub3cgaGF2ZSB3aW4zMiB2ZXJzaW9ucyB0bwotCWhlbHAgd2l0aCB0aGUgbHBhcmFtIFNFR1BUUiBmaXggaW4gY2FsbGJhY2suYwotCi0JKiBbaW5jbHVkZS9rZXJuZWwzMi5oXQotCUxQVENTVFIgZGVmaW5lZC4KLQotCSogW2luY2x1ZGUvcGVleGUuaF0KLQlEZWZpbml0aW9uIG9mIFBFX0V4cG9ydF9EaXJlY3RvcnkgYW1lbmRlZC4KLQotCSogW2luY2x1ZGUvcmVzb3VyY2UzMi5oXQotCU5ldyBmaWxlLgotCi0JKiBbaW5jbHVkZS9zdGFja2ZyYW1lLmhdCi0JRGVmaW5pdGlvbiBvZiBNQUtFX1NFR1BUUiBtYWNybyAjaWZkZWYnZCBvdXQgYW5kIHJlcGxhY2VkIHdpdGgKLQlwcm90b3R5cGUgZm9yIHJlcGxhY2VtZW50IGZ1bmN0aW9uIGluIG1lbW9yeS9zZWxlY3Rvci5jIHdoaWNoCi0JY2FuIG9wZXJhdGUgb24gYW55IGdpdmVuIG1lbW9yeSBhZGRyZXNzLiBUaGlzIGlzIGN1cnJlbnRseQotCXJlcXVpcmVkIGZvciB3aW4zMiBzdXBwb3J0LiBJdCBpcyBhIGRyZWFkZnVsIGNsdWRnZSwgYW5kIHdpbGwKLQljZXJ0YWlubHkgc2xvdyBkb3duIG90aGVyIHByb2dyYW1zLiBJZiB5b3UgYXJlIG5vdCBpbnRlcmVzdGVkCi0JaW4gd2luMzIgZGV2ZWxvcG1lbnQgeW91IG1heSB3aXNoIHRvIHJldmVyc2UgdGhpcyBwYXRjaC4KLQotCSogW2luY2x1ZGUvd2luZG93cy5oXQotCURlZmluaXRpb24gb2YgU1dfU0hPV0RFRkFVTFQgYWRkZWQuCi0KLQkqIFtsb2FkZXIvcGVfaW1hZ2UuY10KLQlFeHRlbnNpdmUgcmV3cml0ZXMgb2YgeG1tYXAoKSBmaXh1cF9pbXBvcnRzKCkuCi0JUEVfTG9hZEltYWdlKCkgLSBpbml0aWFsaXNhdGlvbiBvZiBic3MgYWRkZWQsIGV4dHJhY3Rpb24gb2YKLQltb2R1bGUgbmFtZSBmaXhlZCwgaW5pdGlhbGlzYXRpb24gb2YgRExMIGFkZGVkLgotCVBFX0luaXRETEwoKSAtIG5vdyBkb2VzIHNvbWV0aGluZy4KLQlQRV9XaW4zMkNhbGxUb1N0YXJ0KCkgLSBpbml0aWFsaXNhdGlvbiBvZiBURUIgcG9pbnRlZCB0byBieQotCWZzIGFkZGVkLgotCVBFX0luaXRURUIoKSBjcmVhdGVkIHRvIHBlcmZvcm0gVEVCIGluaXRpYWxpc2F0aW9uLgotCi0JKiBbbWVtb3J5L3NlbGVjdG9yLmNdIAotCU5ldyBmdW5jdGlvbiBNQUtFX1NFR1BUUigpIC0gc2VlIGluY2x1ZGUvc3RhY2tmcmFtZS5oIGFib3ZlLgotCi0JKiBbbWlzYy91c2VyMzIuY10KLQlVU0VSMzJfUmVnaXN0ZXJDbGFzc0EoKSwgQ3JlYXRlV2luZG93RXhBKCkgbWVtb3J5IGFsbG9jYXRpb24KLQltZXRob2QgY2hhbmdlZC4gVGhpcyBpcyBwcm9iYWJseSBub3cgdW5uZWNlc3Nhcnkgd2l0aCB0aGUKLQluZXcgTUFLRV9TRUdQVFIgaGFuZGxpbmcgY29kZS4KLQlVU0VSMzJfRGVmV25kUHJvY0EoKSByZW1vdmVkIHRvIHdpbjMyL3dpbnByb2NzLmMKLQlVU0VSMzJfVHJhbnNsYXRlTWVzc2FnZSBhZGRlZC4KLQotCSogW3Rvb2xzL2J1aWxkLmNdCi0JaGFuZGxpbmcgb2Ygd2luMzIgc3BlYyBmaWxlcyBjaGFuZ2VkIHRvIHN1cHBvcnQgZ2NjMi42LlgKLQl0aGlzIHJlcXVpcmVzIG9wdGltaXNhdGlvbnMgdG8gYmUgZGlzYWJsZWQuCi0KLQkqIFt3aW4zMi9yZXNvdXJjZS5jXSBbd2luMzIvbmV3Zm5zLmNdIFt3aW4zMi9oZWFwLmNdIFt3aW4zMi93aW5wcm9jcy5jXQotCU5ldyBmaWxlcy4KLQotCSogW3dpbjMyL01ha2VmaWxlLmluXQotCU5ldyBmaWxlcyBoZWFwLmMsIG5ld2Zucy5jLCByZXNvdXJjZS5jIGFuZCB3aW5wcm9jcy5jIGFkZGVkIHRvIGJ1aWxkLgotCi0JKiBbd2luMzIvZmlsZS5jXQotCU5ldyBmdW5jdGlvbiBXMzJfU2V0SGFuZGxlQ291bnQuCi0KLQkqIFt3aW4zMi9pbml0LmNdCi0JV0lOMzJfR2V0TW9kdWxlSGFuZGxlKCkgLSBub3cgcmV0dXJucyBoYW5kbGUgb2YgcnVubmluZyBwcm9jZXNzCi0JaWYgY2FsbGVkIHdpdGggTlVMTC4KLQlHZXRTdGFydHVwSW5mb0EoKSAtIHNldCBjYlJlc2VydmVkMiB0byAwLgotCi0JKiBbd2luMzIvbWVtb3J5LmNdCi0JVmlydHVhbEFsbG9jKCkgLSBzZXQgbW1hcCgpIGZpbGUgcGFyYW1ldGVyIHRvIC0xIGluc3RlYWQgb2YgMCB0byBtYWtlCi0JaXQgd29yayB3aXRoIEZyZWVCU0QuIEFsc28gY2hlY2sgZm9yIHJldHVybiB2YWx1ZS4gUmVtb3ZlZCBleHRyYQotCXJldHVybi4KLQotCSogW3dpbmRvd3Mvd2lucG9zLmNdCi0JU2hvd1dpbmRvdygpIC0gU1dfU0hPV0RFRkFVTFQgaGFuZGxpbmcga2x1ZGdlZCBpbi4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotU2F0IERlYyAyMyAxODoxNTo1OSAxOTk1ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBzdW5zaXRlLnVuYy5lZHU+Ci0KLQkqIFtjb25maWd1cmUuaW5dIFtNYWtlZmlsZS5pbl0gW3Rvb2xzL2luc3RhbGwtc2hdCi0JTmV3ICdpbnN0YWxsJyB0YXJnZXQgaW5zdGFsbHMgV2luZSBiaW5hcnksIGxpYnJhcnkgYW5kIG1hbiBwYWdlLgotCUxpYnJhcnkgaXMgbm93IG1vcmUgbG9naWNhbGx5IG5hbWVkIGxpYndpbmUuYS4KLQlTcGxpdCB0b29sa2l0LyBkaXJlY3RvcnkgaW50byBsaWJyYXJ5IChmb3IgbGlicmFyeSBjb2RlKSBhbmQKLQlsaWJ0ZXN0IChmb3IgdGVzdCBwcm9ncmFtcykuCi0KLQkqIFtjb250cm9scy9lZGl0LmNdCi0JUXVpY2sgaGFjayB0byBwYXJ0aWFsbHkgc3VwcG9ydCBFTV9QQVNTV09SRCBzdHlsZSAoYXZvaWRzCi0JZGlzcGxheWluZyB5b3VyIHBhc3N3b3JkcyBvbiB0aGUgc2NyZWVuIHdoZW4gdGVzdGluZyBwcm9ncmFtcy4uLikKLQotCSogW2NvbmZpZ3VyZS5pbl0gW2NvbnRyb2xzL21lbnUuY10gW2luY2x1ZGUvcmVzb3VyY2UuaF0KLQkgIFttaXNjL2NvbW1kbGcuY10gW21pc2Mvb2xlMm5scy5jXSBbbWlzYy9zaGVsbC5jXSBbd2luZG93cy9tc2dib3guY10KLQlMYW5ndWFnZSBpcyBub3cgYSBydW4tdGltZSBvcHRpb24gKHdpbmUgLWxhbmd1YWdlIHh4KS4KLQotCSogW2RlYnVnZ2VyL2RiZy55XQotCUR1bXAgc29tZSBtb3JlIGRlYnVnZ2luZyBpbmZvIG9uIGNyYXNoLgotCi0JKiBbbWlzYy9wcm9maWxlLmNdCi0JT25seSBjb25zaWRlciAnOycgYXMgYSBjb21tZW50IGlmIGl0J3MgdGhlIGZpcnN0IG5vbi1ibGFuawotCWNoYXJhY3RlciBvbiB0aGUgbGluZS4KLQotCSogW21pc2NlbXUvZHBtaS5jXQotCU1vcmUgZGVidWdnaW5nIGluZm8gZm9yIHJlYWwtbW9kZSBjYWxsYmFjay4KLQotCSogW29iamVjdHMvZ2Rpb2JqLmNdCi0JUmV3cm90ZSBFbnVtT2JqZWN0cygpIHRvIGRvIHRoZSBSaWdodCBUaGluZy4KLQotCSogW3Jlc291cmNlcy9zeXNyZXMqXQotCU5ldyBkaXJlY3RvcnkgY29udGFpbmluZyBzeXN0ZW0gcmVzb3VyY2VzLgotCi1GcmkgRGVjIDIyIDExOjI0OjM5IEdNVCAxOTk1ICBKb2huIEhhcnZleSA8am9obkBkaXZpc2lvbi5jby51az4KLQotCSogW3dpbjMyL2ZpbGUuY10gW3dpbjMyL21lbW9yeS5jXQotICAgICAgICBVbml4d2FyZSBkb2Vzbid0IGhhdmUgTUFQX0FOT04gaWZkZWZlZCBvdXQgZm9yIG5vdy4KLQotCSogW21pc2MvZG9zX2ZzLmNdCi0gICAgICAgIERPU19HZXREb3NGaWxlTmFtZSBkaWRuJ3QgdHJ1bmNhdGUgcGF0aHMgc3RhcnRpbmcgLi8gcHJvcGVybHkuCi0KLQkqIFt0b29scy9idWlsZC5jXQotCVByb2R1Y2VzIGFzc2VtYmx5IGNvZGUgdGhhdCB3b3JrcyB3aXRoIHRoZSB1bml4d2FyZSBhc3NlbWJsZXIuCi0KLVdlZCBEZWMgMjAgMjI6MjI6MjkgKzAxMDAgMTk5NSAgTW9ydGVuIFdlbGluZGVyIDx0ZXJyYUBkaWt1LmRrPgotCi0JKiBbbWlzY2VtdS9pbnN0ci5jXQotCUlOU1RSX0dldE9wZXJhbmRBZGRyOiAxNi1iaXQgYWRkcmVzc2VzIHNob3VsZCBiZSBtYXNrZWQgdG8gMTYgYml0cy4KLQotCSogW21pc2MvZG9zX2ZzLmNdCi0JRE9TX3JlYWRkaXIgc2hvdWxkIGFsd2F5cyByZXR1cm4gZGlyZWN0b3JpZXMsIGV2ZW4gaWYgdGhleSBkb24ndAotIAltYXRjaCB0aGUgZmlsZSBuYW1lIG1hc2suCi0KLVR1ZSBEZWMgMTkgMTg6MDA6MDAgMTk5NSAgVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudGgtZGFybXN0YWR0LmRlPgotCQotCSogW21pc2MvZXhlYy5jXQotCUdpdmUgYXJndW1lbnRzIHRvIHdpbmhlbHAuCi0KLQkqIFttaXNjZW11L2ludDIxLmNdCi0JSW1wbGVtZW50ZWQgSW50ZXJydXB0IDIxIEFYPTZDMDAgRVhURU5ERUQgT1BFTi9DUkVBVEUuCi0JQ3JlYXRlZCBmdW5jdGlvbiBFeHRlbmRlZE9wZW5DcmVhdGVGaWxlLgotCUdpdmUgZm9yIHNvbWUgV2luZG93czk1IGludGVycnVwdHMgdGhlIHJldHVybiB2YWx1ZSAnbm90Ci0JaW1wbGVtZW50ZWQnLgotCi1TdW4gRGVjIDE3IDE2OjUxOjU2IEVTVCAxOTk1ICBKaW0gUGV0ZXJzb24gPGpzcGV0ZXJAYmlyY2guZWUudnQuZWR1PgotCi0JKiBbaW5jbHVkZS9rZXJuZWwzMi5oXSBbaW5jbHVkZS93aW5kb3dzLmhdCi0JTW92ZWQgdGhlIHR5cGVkZWZzIGZvciBTWVNURU1USU1FIGFuZCBMUFNZU1RFTVRJTUUgZnJvbQotIAlpbmNsdWRlL2tlcm5lbDMyLmggdG8gaW5jbHVkZS93aW5kb3dzLmggYW5kIGRlY2xhcmVkIHRoZSBuZXcgV2luMzIKLSAJQVBJIGZ1bmN0aW9ucyBTbGVlcCgpLCBHZXRMb2NhbFRpbWUoKSwgYW5kIEdldFN5c3RlbVRpbWUoKS4KLSAgCVJlZGVmaW5lZCBJTkZJTklURSBhcyAweEZGRkZGRkZGIGlmIFdJTkVMSUIzMi4KLQotCSogW3JjL3JjIChuZXcgZmlsZSldCi0JQ3JlYXRlZCB0aGUgc2hlbGwgc2NyaXB0ICdyYycsIHdoaWNoIHNob3VsZCBzaW1wbGlmeSByZXNvdXJjZQotIAljb21waWxhdGlvbi4KLQotCSogW3dpbjMyL2Vudmlyb25tZW50LmNdCi0JS2x1ZGdlZCBhcm91bmQgYW4gdW5kZWZpbmVkIHJlZmVyZW5jZSB0byB3aW5lX2ZpbGVzLiAgVGhpcyBjaGFuZ2UKLSAJc2hvdWxkIGJlIGZpeGVkIHNvbWUgdGltZS4KLQotCSogW3dpbjMyL3RpbWUuY10gW2lmMTYzMi9rZXJuZWwzMi5zcGVjXQotCUFkZGVkIHRoZSBmdW5jdGlvbnMgR2V0U3lzdGVtVGltZSgpLCBhbmQgU2xlZXAoKS4KLQotCSogW21pc2NlbXUvaW50MjEuY10KLQlSZW5hbWVkIHN0YXRpYyBmdW5jdGlvbiBHZXRTeXN0ZW1UaW1lIHRvIElOVDIxX0dldFN5c3RlbVRpbWUgdG8KLSAJYXZvaWQgY29uZmxpY3RzIHdpdGggdGhlIEFQSSBmdW5jdGlvbiBvZiB0aGUgc2FtZSBuYW1lLgotCi0JKiBbaW5jbHVkZS93aW50eXBlcy5oXQotCUFkZGVkIHRoZSBTUEZNVCBkZWZpbml0aW9uIGZvciBwcmludGYgc3RhdGVtZW50cy4KLQotCSogW21pc2Mvc2hlbGwuY10gW2luY2x1ZGUvc2hlbGwuaF0KLQlDaGFuZ2VkIEVSUk9SXyogZGVmaW5lcyB0byBTSEVMTF9FUlJPUl8qLCBhcyB0aGV5IHdlcmUgY29uZmxpY3RpbmcKLSAJd2l0aCB0aGUgb25lcyBpbiBpbmNsdWRlL3dpbmVycm9yLmguICBUaGV5IHNob3VsZCBwcm9iYWJseSB1c2UgdGhlCi0gCXZlcnNpb25zIGluIHdpbmVycm9yLmgsIGJ1dCBJJ20gbm90IGNlcnRhaW4sIGFuZCB0aGF0IGNhbiBiZSBkb25lCi0gCWxhdGVyLgotCi0JKiBbd2luZG93cy9tZGkuY10KLQlUcmFuc2xhdGVkIFdNX01ESUFDVElWQVRFKD8sKExPaHduZCxISWh3bmQpKSBtZXNzYWdlcyB0bwotIAlXTV9NRElBQ1RJVkFURShISWh3bmQsTE9od25kKSBmb3IgV0lORUxJQjMyLiAgVGhlID8gcGFyYW1ldGVyCi0gCShib29sZWFuKSB3YXMgZGlzY2FyZGVkIHdpdGggdGhpcyB0cmFuc2xhdGlvbi4gIFRyYW5zbGF0ZWQgaGFuZGxlcgotIAlvZiBXTV9NRElTRVRNRU5VKHJlZiwobG9ITUVOVSxoaUhNRU5VKSkgdG8gaGFuZGxlCi0gCVdNX01ESVNFVE1FTlUobG9ITUVOVSwgaGlITUVOVSkgbWVzc2FnZXMgaW4gV0lORUxJQjMyIChyZWYgYXNzdW1lZAotIAlmYWxzZSwgY2FsbCBEcmF3TWVudUJhcigpIGlmIGRlc2lyZWQpLgotCi0JKiBbKi8qXQotCUdlbmVyYWwgZXhwbGljaXQgY2FzdHMgYW5kIG1vcmUgcmlnaWQgdHlwaW5nIHRvIHJlbW92ZSB3YXJuaW5ncy4KLQotCSogW2luY2x1ZGUvd2lucG9zLmhdIFt3aW5kb3dzL3dpbnBvcy5jXQotCUNoYW5nZWQgcmV0dXJuIHR5cGUgb2YgV0lOUE9TX0NoYW5nZUFjdGl2ZVdpbmRvdyB0byBCT09MLgotCi0JKiBbaW5jbHVkZS9jb21tZGxnLmhdIFttaXNjL2NvbW1kbGcuY10KLQlBZGRlZCBwcm90b3R5cGVzIGZvciBDaG9vc2VDb2xvcigpLCBDb21tRGxnRXh0ZW5kZWRFcnJvcigpLAotIAlGaW5kVGV4dCgpIEdldEZpbGVUaXRsZSgpLCBHZXRPcGVuRmlsZU5hbWUoKSwgR2V0U2F2ZUZpbGVOYW1lKCksCi0gCVByaW50RGxnLCBhbmQgUmVwbGFjZVRleHQoKS4KLQlSZW5hbWVkIHRoZSBDb21tRGxnRXh0ZW5kRXJyb3IoKSBmdW5jdGlvbiB0byBDb21tRGxnRXh0ZW5kZWRFcnJvcigpLgotCU1hZGUgR2V0RmlsZVRpdGxlIHJldHVybiBhIHNob3J0LCBhcyBwZXIgdGhlIEFQSSBkZWZpbml0aW9uLgotCi0JKiBbTWFrZWZpbGUuaW5dCi0JQWRkZWQgbGluZSB0byBjbGVhbiBhbmQgZGlzdGNsZWFuIHRoYXQgcmVtb3ZlcyB0ZW1wb3JhcmllcyBmcm9tCi0gCXRoZSBpbmNsdWRlIGRpcmVjdG9yeS4KLQotU2F0IERlYyAxNiAxOTozOToxNCBNRVQgMTk5NSAgU3RlZmZlbiBNb2VsbGVyIDxzbW9lMDAyNEByei51bmktaGlsZGVzaGVpbS5kZT4KLQotCSogW2NvbnRyb2xzL2VkaXQuY10KLQlBbG1vc3QgcmV3cm90ZSBFRElUX0dldExpbmVNc2cuCi0KLVNhdCBEZWMgMTYgMTM6NTE6NDggTVNUIDE5OTUgIEFuZHJldyBUYXlsb3IgPGF0YXlsb3JAY2FkdmlzaW9uLmNvbT4KLQotCSogW3dpbmRvd3MvbWRpLmNdCi0JRml4ZWQgTURJVGlsZSgpIGJ1ZyB0aGF0IG9jY3VycyB3aGVuIDAgd2luZG93cyBhcmUgcHJlc2VudCBvciBhbGwKLQl3aW5kb3dzIGFyZSBtaW5pbWl6ZWQuCi0KLVdlZCBEZWMgMTIgMjM6MzA6MDAgMTk5NSAgVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudGgtZGFybXN0YWR0LmRlPgotCi0JKiBbbWlzYy9wcm9maWxlLmNdCi0gICAgICAgIFRyeSBoYXJkZXIgdG8gZmluZCBmaWxlcywgZXNwZWNpYWxseSBpbiB0aGUgd29ya2luZyBkaXJlY3RvcnkuCi0JTG9vayBpbiAkSE9NRS8ud2luZSB0b28gYW5kIGNyZWF0ZSBpdCB0aGVyZSBpZiBpdCBpc24ndCBmb3VuZC4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotTW9uIERlYyAxMSAxOTowODo1NSAxOTk1ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBzdW5zaXRlLnVuYy5lZHU+Ci0KLQkqIFttaXNjL2xzdHIuY10KLQlSZXBsYWNlZCB3aW5lX3N0cm5jcHkoKSBieSBhIDMyLWJpdCB2ZXJzaW9uIG9mIGxzdHJjcHluKCksIHNpbmNlCi0gCXRoZXkgZG8gdGhlIHNhbWUgam9iLgotCi0JKiBbdG9vbHMvYnVpbGQuY10KLQlGaXhlZCBfX2F0dHJpYnV0ZV9fKChzdGRjYWxsKSkgdG8gbWFrZSBpdCBjb21waWxlIHdpdGggZ2NjCi0JdmVyc2lvbnMgdW5kZXIgMi43LiBEb2Vzbid0IG1lYW4gaXQgd2lsbCBydW4gT0sgdGhvdWdoLi4uCi0KLVNhdCBEZWMgMDkgMTM6MjI6NTggMTk5NSAgQ2FtZXJvbiBIZWlkZSAgPGhlaWRlQGVlLnVhbGJlcnRhLmNhPgotCi0JKiBbaW5jbHVkZS9rZXJuZWwzMi5oXSBbaW5jbHVkZS93aW5lcnJvci5oXQotCUFkZGVkIGZpbGUgYXR0cmlidXRlIGRlZmluaXRpb25zIGFuZCBtb3JlIGVycm9yIGNvZGVzLgotCi0JKiBbd2luMzIvZXJyb3IuY10KLQlBZGRlZCBzb21lIHJ1ZGltZW50YXJ5IGVycm5vLXRvLVdpbjMyIGVycm9yIGNvbnZlcnNpb24KLQljb2RlLgotCi0JKiBbd2luMzIvZmlsZS5jXQotCUFkZGVkIHRvIEdldEZpbGVJbmZvcm1hdGlvbkJ5SGFuZGxlLCBmaWxsZWQgaW4gc29tZSBrbm93bgotCWVycm9yIGNvZGVzLCBhbmQgc3dpdGNoZWQgdG8gZHByaW50Zl93aW4zMi4KLQotCSogW3dpbjMyL3RpbWUuY10KLQlBZGRlZCBHZXRMb2NhbFRpbWUuCi0KLUZyaSBEZWMgIDggMTQ6Mzc6MzkgMTk5NSAgSmltIFBldGVyc29uIDxqc3BldGVyQGJpcmNoLmVlLnZ0LmVkdT4KLQotCSogW2NvbnRyb2xzL2NvbWJvLmNdCi0JQ29udmVydGVkIGZ1bmN0aW9ucyBvZiB0aGUgdHlwZSBMT05HIF8oSFdORCxXT1JELExPTkcpIHRvIHRoZSB0eXBlCi0JTFJFU1VMVCBfKEhXTkQsV1BBUkFNLExQQVJBTSkgd2hlcmUgbmVlZGVkLgotCi0JKiBbaW5jbHVkZS9saWJyZXMuaF0KLQlSZXN0cnVjdHVyZWQgbGlicmVzIHByb3RvdHlwZXMgdG8gY2xvc2VyIG1hdGNoIHRoZSB3aW5kb3dzIEFQSS4KLQotCSogW2luY2x1ZGUvd2luZG93cy5oXQotCUNoYW5nZWQgc2V2ZXJhbCBBUEkgcHJvdG90eXBlcycgcGFyYW1ldGVyIHR5cGVzIGZyb20gJ3Nob3J0JyB0byBJTlQsCi0Jd2hpY2ggaXMgI2RlZmluZWQgYXMgc2hvcnQgaW4gdGhlIGVtdWxhdG9yLCBidXQgaXMgYSBub3JtYWwgaW50IGluCi0JV0lORUxJQjMyLiAgQWxzbyBjaGFuZ2VkIFNFR1BUUiBmcm9tIERXT1JEIHRvIHZvaWQqIHdoZW4gV0lORUxJQjMyLgotCShUaGlzIGNyZWF0ZXMgYSBsb3Qgb2Ygd2FybmluZ3MgYXQgbGlicmFyeS1jb21waWxlIHRpbWUsIGJ1dCBsZXNzCi0Jd2FybmluZ3MgYXQgYXBwLWNvbXBpbGUgdGltZS4gIEknbGwgcmVtb3ZlIHRoZSB3YXJuaW5ncyBzb29uLikKLQotCSogW2xvYWRlci9yZXNvdXJjZS5jXQotCUZpeGVkIHBhcmFtZXRlciBtaXNtYXRjaCBpbiBjYWxsIHRvIExJQlJFU19GaW5kUmVzb3VyY2UoKS4gIENoYW5nZWQKLQl2YXJpb3VzIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgTElCUkVTXyogQVBJIGZ1bmN0aW9ucy4KLQotCSogW2xvYWRlci9zaWduYWwuY10KLQlEZWxldGVkIGxvY2FsICdpJyBmcm9tIHdpbl9mYXVsdCgpLCBzaW5jZSBpdCB3YXMgdW51c2VkLgotCi0JKiBbb2JqZWN0cy9iaXRibHQuY10KLQlNaXJyb3JlZCBjaGFuZ2VzIHRvIGluY2x1ZGUvd2luZG93cy5oIG1lbnRpb25lZCBhYm92ZS4KLQotCSogW3Rvb2xraXQvaGVsbG8zLmNdCi0JQ2hhbmdlZCBMb2FkTWVudUluZGlyZWN0KCkgY2FsbCB0byBMb2FkTWVudSgpIHRvIHRlc3QgdGhlIG5ldwotCXJlc291cmNlIHJlZ2lzdHJhdGlvbiB0ZWNobmlxdWUuCi0KLQkqIFt0b29sa2l0L2xpYnJlcy5jXQotCVJlbW92ZWQgZGVmaW5pdGlvbiBvZiAnc3RydWN0IHJlc291cmNlJyBhbmQgZml4ZWQgYnVncyBpbiB0aGUgcmVzb3VyY2UKLQlpbXBsZW1lbnRhdGlvbi4gIEltcGxlbWVudGVkIExJQlJFU19GaW5kUmVzb3VyY2UuCi0KLQkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCi0JTWlycm9yZWQgY2hhbmdlcyB0byBpbmNsdWRlL3dpbmRvd3MuaCBtZW50aW9uZWQgYWJvdmUuCi0KLVRodSBEZWMgIDcgMjM6MTU6NTYgMTk5NSAgICAgTWFydGluIHZvbiBMb2V3aXMgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KLQotCSogW2NvbnRyb2xzL2VkaXQuY10KLQlMT0NBTF9IZWFwRXhpc3RzOiBDaGFuZ2VkIHBhcmFtZXRlciB0byBIQU5ETEUuIEZvciBXaW5lTGliLCByZXR1cm4gdHJ1ZQotCi0JKiBbY29udHJvbHMvbGlzdGJveC5jXQotCUNyZWF0ZUxpc3RCb3hTdHJ1Y3Q6IEluaXRpYWxpemUgSGVhcFNlbCB0byAwIGZvciBXaW5lTGliCi0KLQkqIFtpbmNsdWRlL2xpc3Rib3guaF0KLQljaGFuZ2UgSGVhcFNlbCBmcm9tIFdPUkQgdG8gSEFORExFCi0KLQkqIFtpbmNsdWRlL3Jlc291cmNlLmhdW3JjL3dpbmVyYy5jXQotCXN0cnVjdCBSZXNvdXJjZVRhYmxlOiByZW1vdmVkCi0Jc3RydWN0IHJlc291cmNlOiBtb3ZlZCB0byBoZWFkZXIgZmlsZQotCWF1dG9yZWdpc3RlciByZXNvdXJjZXMgaWYgc3VwcG9ydGVkIGJ5IGNvbXBpbGVyCi0KLQkqIFttZW1vcnkvbG9jYWwuaF0KLQlMT0NBTF9HZXRIZWFwOiBleHBlY3QgSEFORExFIHJhdGhlciB0aGFuIFdPUkQKLQkKLQkqIFt0b29sa2l0L01ha2VmaWxlLmluXQotCUFkZCBBTExDRkxBR1MgdG8gbWFrZSBoZWxsbzMKLQotCSogW3Rvb2xraXQvaGVhcC5jXQotCUxvY2FsRnJlZSwgSEVBUF9GcmVlOiBoYW5kbGUgMCBwYXJhbWV0ZXIgZ3JhY2VmdWxseQotCi1XZWQgRGVjIDA2IDE1OjM0OjIzIDE5OTUgIEdyZWcgQ29vcGVyIDxjb29wZXJAaW1hLWluYy5jb20+Ci0KLQkqIFttaXNjL3dpbnNvY2tldC5jXQotCUZpeGVkIHRoZSBtc2dzbmQgYW5kIG1zZ3JjdiBlcnJvcnMgdGhhdCB3aW5zb2NrIHByb2dyYW1zIGdldC4KLQotV2VkIERlYyAwNiAxMjo0NzoyMyBNRVQgMTk5NSBTdmVuIFZlcmRvb2xhZWdlIDxza2ltb0BkbnMudWZzaWEuYWMuYmU+Ci0JCi0JKiBbaWYxNjMyL2tlcm5lbC5zcGVjXQotCUZpeGVkIF9ocmVhZCBhbmQgX2h3cml0ZSByZXR1cm4gdHlwZQotCi0JKiBbaWYxNjMyL3JlbGF5MzIuY10gW2xvYWRlci9wZV9pbWFnZS5jXQotCUhhY2tlZCBsb2FkaW5nIG9mIFBFLWRsbCdzIGluCi0KLQkqIFt3aW4zMi9hZHZhcGkuY10KLQlBZGRlZCBzdHVicyBmb3IgUmVnQ3JlYXRlS2V5RXgsIFJlZ1NldFZhbHVlRXgsIFJlZ1F1ZXJ5VmFsdWVFeAotCi0JKiBbd2luMzIvZmlsZS5jXQotCUFkZGVkIHN0dWJzIGZvciBPcGVuRmlsZU1hcHBpbmcsIENyZWF0ZUZpbGVNYXBwaW5nLCBNYXBWaWV3T2ZGaWxlRXgKLQotCSogW3dpbjMyL3Byb2Nlc3MuY10KLQlBZGRlZCBzdHVicyBmb3IgQ3JlYXRlTXV0ZXhBLCBSZWxlYXNlTXV0ZXgsIENyZWF0ZUV2ZW50QSwKLQlXYWl0Rm9yU2luZ2xlT2JqZWN0LCBEdXBsaWNhdGVIYW5kbGUsIEdldEN1cnJlbnRQcm9jZXNzCi0JCi1Nb24gRGVjIDA0IDEzOjA2OjM3IDE5OTUgICBCZXJuZCBTY2htaWR0IDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KLQotCSogW2luY2x1ZGUvd2luZS5oXSBbbWlzYy9sc3RyLmNdCi0JRGVmaW5lIHdpbmVfc3RybmNweSgpLiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHBhZCB0aGUgYnVmZmVyIHdpdGggCi0JemVyb2VzIGxpa2UgR05VIHN0cm5jcHkoKSwgd2hpY2ggbWlnaHQgYnJlYWsgc29tZSBXaW5kb3dzIHByb2dyYW1zCi0JdGhhdCBwYXNzIGJvZ3VzIHNpemUgYXJndW1lbnRzLgotCi0JKiBbbG9hZGVyL21vZHVsZS5jXTogR2V0TW9kdWxlRmlsZU5hbWUoKSwKLQlbbWlzYy9jb21tZGxnLmNdOiBHZXRGaWxlVGl0bGUoKSwKLQlbbWlzYy9rZXlib2FyZC5jXSwgW21pc2MvbHN0ci5jXTogbHN0cmNweW4oKSwKLQlbbWlzYy9vbGUybmxzLmNdLCBbbWlzYy9wcm9maWxlLmNdLCBbbXVsdGltZWRpYS9tY2lzdHJpbmcuY10sCi0JW211bHRpbWVkaWEvbW1zeXN0ZW0uY10sIFtvYmplY3RzL2ZvbnQuY106Ci0JVXNlIHdpbmVfc3RybmNweSgpIHdoZXJlIHN0cmluZ3MgYXJlIHJldHVybmVkIHRvIFdpbmRvd3MgcHJvZ3JhbXMuCi0JCi0JKiBbb2JqZWN0cy9tZXRhZmlsZS5jXQotCVBsYXlNZXRhZmlsZSgpOiBDbGVhciB0aGUgaGFuZGxlIHRhYmxlIGJlZm9yZSB1c2luZyBpdC4KLQotCSogW21pc2Mvc2hlbGwuY10gW21pc2MvbWFpbi5jXQotCVJlbmFtZSBTSEVMTF9SZWdDaGVja0ZvclJvb3QoKSB0byBTSEVMTF9Jbml0KCkgYW5kIGNhbGwgaXQgZnJvbSBtYWluKCkuCi0JCi0JKiBbbWlzYy9wcm9maWxlLmNdCi0JbG9hZCgpOiBOZWVkIHRvIGhhbmRsZSBjb21tZW50cy4KLQkKLQkqIFt0b29sa2l0L2xpYnJlcy5jXQotCU1ha2UgaXQgY29tcGlsZS4KLQkKLQkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQotCVVzZSBNQUtFX1NFR1BUUiBtYWNybyBpbiB0d28gcGxhY2VzIHdoZXJlIGEgdXNlciBoZWFwIGJsb2NrIHVzZWQKLQl0byBiZSBhbGxvY2F0ZWQgaW5zdGVhZC4KLQotU2F0IERlYyAwMiAxNjo0Mzo0MyAxOTk1IFJhbW9uIEdhcmNpYSA8cmFtb25AaWUzLmNsdWJzLmV0c2l0LnVwbS5lcz4KLQotCSogW3dpbmRvd3Mvd2lucG9zLmNdCi0JSW4gZnVuY3Rpb24gU2V0V2luZG93UG9zOiBkbyBub3QgcmVkcmF3IHRoZSBwYXJlbnQgb2YKLQlhIHdpbmRvdyBpZiB0aGUgc3BlY2lmaWVkIHdpbmRvdyBpcyBwbGFjZWQgb24gdGhlIHRvcC4KLQlUaGlzIGF2b2lkcyB0aGF0IFNob3dXaW5kb3coaHduZCwxKSBoaWRlcyBod25kIGluc3RlYWQKLQlvZiBzaG93aW5nIGl0LgotCi1TYXQgRGVjIDAyIDExOjAwOjAwIDE5OTUgQWxleCBLb3JvYmthIDxhbGV4QHBobTMwLnBoYXJtLnN1bnlzYi5lZHU+Ci0KLQkqIFt3aW5kb3dzL3Njcm9sbC5jXQotCU5vdyBpdCBjYW4gc2Nyb2xsIGNoaWxkcmVuIGFsb25nIHdpdGggdGhlIGNsaWVudCByZWdpb24gb2YgcGFyZW50IAotICAgICAgICB3aW5kb3cuIFRyaWVkIHRvIG9wdGltaXplIHVwZGF0ZSByZWdpb24gY2FsY3VsYXRpb24uIAotCi0JKiBbd2luZG93cy9tZGkuY10KLQlTY3JvbGxDaGlsZHJlbiBmdW5jdGlvbiwgbW9yZSBvdGhlciBmZWF0dXJlcyBhZGRlZC4gQmFzaWNhbGx5Ci0JYSByZXdyaXRlLgotCi0JKiBbd2luZG93cy93aW5wb3MuY10gW3dpbmRvd3MvZm9jdXMuY10KLQlSZWltcGxlbWVudGVkIHdpbmRvdyBhY3RpdmF0aW9uIGFuZCBmb2N1cyBoYW5kbGluZy4KLQotCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCi0JQWRkZWQgbmV3IGZsYWcgV0lOX05DQUNUSVZBVEVELgotCi0JKiBbd2luZG93cy9tZXNzYWdlLmNdIFtsb2FkZXIvdGFzay5jXQotCVNtYWxsIGNoYW5nZXMgKHRvIG1haW50YWluIGxpbmtlZCBsaXN0IG9mIG1lc3NhZ2UgcXVldWVzKS4KLQotV2VkIE5vdiAyOSAxNTo1MTo0OCAxOTk1ICBEYW5pZWwgU2NoZXBsZXIgIDxkYW5pZWxAc2hlcDEzLnd1c3RsLmVkdT4KLQotCSogW2luY2x1ZGUvb3B0aW9ucy5oXSBbbWlzYy9tYWluLmNdIFt3aW5kb3dzL2RlZnduZC5jXQotCSAgW3dpbmRvd3MvZXZlbnQuY10gW3dpbmRvd3Mvbm9uY2xpZW50LmNdIFt3aW5kb3dzL3dpbi5jXSBbV2luZS5tYW5dCi0JSW1wbGVtZW50ZWQgYSAtbWFuYWdlZCBvcHRpb24gdG8gcmVwbGFjZSB0aGUgc3RhbmRhcmQgV2luZG93cwotCWZyYW1lIG9mIHRvcC1sZXZlbCB3aW5kb3dzIHdpdGggdGhlIHdpbmRvdyBtYW5hZ2VyJ3MgZGVjb3JhdGlvbnMuCi0JSWYgYSB0b3AtbGV2ZWwgd2luZG93IG1ha2VzIGl0cyBvd24gZnJhbWUsIHRoaXMgd2lsbCBzdGlsbCBzaG93Ci0JdXAsIGluc2lkZSB0aGUgd2luZG93IG1hbmFnZXIgZGVjb3JhdGlvbnMgKEkgYmVsaWV2ZSBjdGwzZHYyLmRsbAotCXdvdWxkIGRvIHRoaXMsIGFsdGhvdWdoIEkgY2FuJ3QgdGVzdCB0aGlzKS4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVHVlIE5vdiAyMSAxODo0OToxMCAxOTk1ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBzdW5zaXRlLnVuYy5lZHU+Ci0KLQkqIFtjb25maWd1cmUuaW5dIFtNYWtlZmlsZV0gW21pc2MvZG9zX2ZzLmNdCi0JR290IHJpZCBvZiBhdXRvY29uZi5oIGZpbGUuCi0KLQkqIFtkZWJ1Z2dlci9kYmcueV0KLQlNb3JlIGxvZ2ljYWwgYmVoYXZpb3IgdXBvbiBzeW50YXggZXJyb3JzLgotCi0JKiBbaW5jbHVkZS9ob29rLmhdIFt3aW5kb3dzL2hvb2suY10KLQlDaGFuZ2VkIGhvb2sgc3RydWN0dXJlIGFuZCByZXdyb3RlIG1vc3Qgb2YgdGhlIGhvb2sgZnVuY3Rpb25zIGZvcgotCWJldHRlciBjb21wYXRpYmlsaXR5LCBiYXNlZCBvbiBpbnZlc3RpZ2F0aW9ucyBieSBBbGV4IEtvcm9ia2EuCi0KLQkqIFtpbmNsdWRlL21lc3NhZ2UuaF0gW3dpbmRvd3MvbWVzc2FnZS5jXQotCUFkZGVkIGhvb2tzIHRvIG1lc3NhZ2UgcXVldWUgc3RydWN0dXJlIGFuZCBtYWRlIHRoZSBzdHJ1Y3R1cmUKLQlsYXlvdXQgV2luZG93cy1jb21wYXRpYmxlLgotCUFkZGVkIHN1cHBvcnQgZm9yIFdIX01PVVNFLCBXSF9LRVlCT0FSRCwgV0hfSEFSRFdBUkUgYW5kCi0JV0hfSk9VUk5BTFJFQ09SRCBob29rcy4KLQotCSogW21pc2MvbWFpbi5jXQotCUFkZGVkIGNvbW1hbmQtbGluZSBvcHRpb24gZm9yIGNoYW5naW5nIHRoZSBsYW5ndWFnZSBhdCBydW4tdGltZQotIAkobm90IGltcGxlbWVudGVkIHlldCksIGJhc2VkIG9uIGEgc3VnZ2VzdGlvbiBmcm9tIE1pY2hhZWwgUGF0cmEuCi0KLQkqIFtvYmplY3RzL2N1cnNvcmljb24uY10KLQlGaXhlZCBzaWxseSBTRUdQVFIgYnVnIGluIER1bXBJY29uKCkuCi0KLU1vbiBOb3YgMjAgMjI6MjI6MjIgMTk5NSAgQWxleCBLb3JvYmthIDxhbGV4QHBobTMwLnBoYXJtLnN1bnlzYi5lZHU+Ci0KLQkqIFtjb250cm9scy9saXN0Ym94LmNdIFtjb250cm9scy9jb21iby5jXSBbaW5jbHVkZS9saXN0Ym94LmhdCi0JUGFydGlhbCBpbXBsZW1lbnRhaW9uIG9mIExCU19FWFRFTkRFRFNFTCBzdHlsZSwKLQl5ZXQgbW9yZSB1cGRhdGVzIGZvciBkcmFnICYgZHJvcCBzdXBwb3J0LiBOb3cgd29ya3MuCi0KLQkqIFt3aW5kb3dzL2RlZnduZC5jXQotCU1vcmUgbWVzc2FnZSBoYW5kbGVycy4KLQotCSogW3dpbmRvd3Mvd2luLmNdCi0JRHJhZ09iamVjdCwgRHJhZ0RldGVjdCwgQW55UG9wdXAgZnVuY3Rpb25zLiAKLQotCSogW2NvbnRyb2xzL2xpc3Rib3guY10KLQlNb3JlIGtsdWRneSBmaXhlcyAoV01fLi4uVE9JVEVNLCBldGMuKS4KLQotCSogW29iamVjdHMvY3Vyc29yaWNvbi5jXSBbb2JqZWN0cy9vZW1iaXRtYXAuY10KLQlJY29uVG9DdXJzb3Igc2tlbGV0b24sIHBhdGNoIGZvciBPQk1fTG9hZEN1cnNvckljb24gdG8gaGFuZGxlIG5ldwotCWN1cnNvci4KLQotCSogW2luY2x1ZGUvYml0bWFwcy9vY3IqXQotCU5ldyBPRU0gY3Vyc29ycy4KLQotTW9uIE5vdiAyMCAxMTowNToyMCBFU1QgMTk5NSAgSmltIFBldGVyc29uIDxqc3BldGVyQGJpcmNoLmVlLnZ0LmVkdT4KLQotCSogW3Rvb2xraXQvaGVhcC5jXQotCVN3YXBwZWQgZmxhZ3MgYW5kIHNpemUgYXJndW1lbnRzIHRvIExvY2FsUmVhbGxvYyBhcyBwZXIgY2hhbmdlcyBpbgotCW1lbW9yeS9sb2NhbC5jIGJ5IFdpbGxpYW0gTWFncm8gaW4gcHJldmlvdXMgcmVsZWFzZS4KLQotCSogW2luY2x1ZGUvd2ludHlwZXMuaF0KLQlSZWluc3RhdGVkIHRoZSAjZGVmaW5lJ3MgZm9yICdtaW4nIGFuZCAnbWF4Jywgc2luY2UgdGhleSdyZSBwYXJ0IG9mCi0JdGhlIFdpbmRvd3MgQVBJLiAgSSByZWFsbHkgZG9uJ3QgdGhpbmsgaXQncyBhIHdpc2UgaWRlYSwgc28gSSBwdXQKLQlhICcjaWZuZGVmIERPTlRfREVGSU5FX21pbl9BTkRfbWF4JyBhcm91bmQgdGhlbS4gIEkgdGhpbmsgdGhlIGFjdHVhbAotCVdJTkUgY29kZSBzaG91bGQgbmV2ZXIgdXNlIHRoZXNlIChpdCBzaG91bGQgdXNlICdNSU4nIGFuZCAnTUFYJwotCWluc3RlYWQpLgotCi0JKiBbbG9hZGVyLypdCi0JUHV0ICcjaWZuZGVmIFdJTkVMSUInIGFyb3VuZCBtYW55IHRoaW5ncyB0aGF0IFdJTkVsaWIgc2hvdWxkIG5vdCBuZWVkLgotCi0JKiBbY29udHJvbHMvZWRpdC5jXQotCVRvb2sgb3V0IG1hbnkgJyNpZiBkZWZpbmVkKFdJTkVMSUIpJyBzZWN0aW9ucyB3aXRoIHRoZSBhc3NvY2lhdGVkCi0JY29tbWVudCAndGVtcG9yYXJ5IGZpeCwgdW50aWwgTG9jYWwgbWVtb3J5IGlzIGNvcnJlY3RseSBpbXBsZW1lbnRlZCBpbgotCVdJTkVMSUInLCBzaW5jZSB0aGUgZWZmZWN0aXZlIHRyYW5zbGF0aW9ucyBhcmUgbm93IGluIAotCXRvb2xraXQvbWlzY3N0dWJzLmMuCi0JVG9vayBvdXQgdGhlICNpZm5kZWYncyBJIHB1dCBpbiBFRElUX0NsZWFyVGV4dC4gIFdob2V2ZXIgbW9kaWZpZWQgdGhpcwotCWZpbGUgZml4ZWQgKG9yIGF0IGxlYXN0IHBvc3Rwb25lZCkgdGhlIGJ1ZyBJIGhhZCBlbmNvdW50ZXJlZC4KLQotCSogW2xvYWRlci90YXNrLmNdCi0JUHV0IGFuICNpZmRlZiBpbiBUQVNLX0NyZWF0ZVRhc2soKSB0aGF0IGhhcmR3aXJlcyB0aGUgY3VycmVudCBkcml2ZSB0bwotCUM6ICBUaGlzIHdpbGwgcHJvYmFibHkgY2F1c2UgYSBsb3Qgb2YgdHJvdWJsZSBpZiB0aGlzIGNoYW5nZSBpcwotCWZvcmdvdHRlbiBpbiB0aGUgZnV0dXJlLCBidXQgaXQgd2lsbCBsZXQgdGhpbmdzIGxpa2UgdGhlIE9wZW5GaWxlTmFtZQotCWRpYWxvZyB3b3JrIGZvciBub3cuCi0KLQkqIFt0b29sa2l0L2xpYnJlcy5jXSBbdG9vbGtpdC9NYWtlZmlsZS5pbl0gW3Rvb2xraXQvTWFrZWZpbGVdCi0JICBbaW5jbHVkZS9saWJyZXMuaF0KLQlNYWRlIG5ldyBsaWJyZXMuYyBmaWxlLCB3aGljaCB3aWxsIGNvbnRhaW4gZnVuY3Rpb25zIGZvciBzdXBwb3J0aW5nCi0JYWNjZXNzaW5nIHJlc291cmNlcyBieSBuYW1lIGluIFdJTkVsaWIuICAnd2luZXJjJyB3aWxsIG5lZWQgdG8gYmUKLQljaGFuZ2VkLgotCi0JKiBbdG9vbGtpdC9oZWFwLmNdCi0JUmVmaW5lZCBtZW1vcnkgcm91dGluZXMgdG8gYWxsb3cgZm9yIGRpZmZlcmVuY2VzIGJldHdlZW4gTG9jYWxBbGxvYwotCWFuZCBHbG9iYWxBbGxvYyBhbmQgYmV0d2VlbiBMb2NhbFNpemUgYW5kIEdsb2JhbFNpemUuCi0KLQkqIFt3aW5kb3dzL21lc3NhZ2UuY10gW2luY2x1ZGUvd2luZG93cy5oXQotCURlZmluZWQgdGhlIEdldEN1cnJlbnRUaW1lIHJvdXRpbmUgaW4gd2luZG93cy9tZXNzYWdlLmMsIGFuZCByZW1vdmVkCi0JdGhlICNkZWZpbmUgaW4gd2luZG93cy5oLgotCi1Nb24gTm92IDIwIDAwOjM2OjQyIE1FVCAxOTk1IFN2ZW4gVmVyZG9vbGFlZ2UgPHNraW1vQGRucy51ZnNpYS5hYy5iZT4KLQotCSogWyovKl0KLQlBZGRlZCBuZXcgZGVidWdnaW5nIHR5cGUgREVCVUdfV0lOMzIgYW5kIERFQlVHX0VOVi4KLQotCSogW2xvYWRlci9tb2R1bGUuY10KLQlBZGRlZCB1bmRvY3VtZW50ZWQgR2V0RXhwV2luVmVyLgotCi0JKiBbdG9vbHMvYnVpbGQuY10KLQlQcmV2aW91cyBjb2RlIGRpZG4ndCBwb3AgcG9zc2libHkgY2hhbmdlZCAlZXNpLCAlZWRpIGFuZCAlZWR4Ci0JZnJvbSB0aGUgc3RhY2suCi0JCi0JKiBbd2luMzIvYWR2YXBpLmNdCi0JQWRkZWQgR2V0VXNlck5hbWVBLgotCi0JKiBbd2luMzIvY29kZV9wYWdlLmNdCi0JQWRkZWQgc3R1YiBmb3IgTXVsdGlCeXRlVG9XaWRlQ2hhci4KLQotCSogW3dpbjMyL2NvbnNvbGUuY10KLQlBZGRlZCBTZXRDb25zb2xlQ3RybEhhbmRsZXIgc3R1Yi4KLQotCSogW3dpbjMyL2ZpbGUuY10KLQlBZGRlZCBSZWFkRmlsZSBDcmVhdGVGaWxlQSBHZXRGaWxlSW5mb3JtYXRpb25CeUhhbmRsZSBzdHVicy4KLQlBZGRlZCBDbG9zZUhhbmRsZS4KLQotCSogW3dpbjMyL21lbW9yeS5jXQotCUNoYW5nZWQgVmlydHVhbEFsbG9jIGFuZCBWaXJ0dWFsRnJlZS4KLQotCSogW3dpbjMyL3Byb2Nlc3MuY10KLQlBZGRlZCBFeGl0UHJvY2Vzcy4KLQotU3VuIE5vdiAxOSAxNzo1NDo0MiAxOTk1ICAgQmVybmQgU2NobWlkdCA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+Ci0KLQkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KLQlGaXhlZCBhIGZldyBicm9rZW4gc3RydWN0dXJlIGRlZmluaXRpb25zLgotCi0JKiBbbG9hZGVyL3Jlc291cmNlLmNdCi0JRmluZFJlc291cmNlKCk6IE5lZWQgdG8gY2hlY2sgZm9yICcjeHh4JyBzdHJpbmdzIGhlcmUuCi0KLQkqIFttaXNjZW11L2ludDIxLmNdCi0JRmluZE5leHQoKTogUmV0dXJuIE1TLURPUyBmaWxlbmFtZXMgdXBwZXJjYXNlLgotCi0JKiBbb2JqZWN0cy9jdXJzb3JpY29uLmNdCi0JQ3JlYXRlSWNvbigpLCBDcmVhdGVDdXJzb3IoKTogQWRkZWQgbWlzc2luZyBlbGVtZW50IHRvIENVUlNPUklDT05JTkZPCi0JaW5pdGlhbGl6ZXJzLgotCQotCSogW21pc2MvZmlsZS5jXQotCV9sb3BlbigpOiBGaWxlcyBvcGVuZWQgaW4gT0ZfV1JJVEUgbW9kZSBhcmUgdHJ1bmNhdGVkLgotCU9wZW5GaWxlKCk6IElnbm9yZSBPRl9SRUFEL09GX1dSSVRFL09GX1JFQURXUklURSB3aGVuIGZpbGVzIGFyZQotCWNyZWF0ZWQ7IHVzZSByZWFkL3dyaXRlIG1vZGUuCi0JCi0JKiBbbWlzYy9wcm9maWxlLmNdCi0JbG9hZCgpOiBSZXdyaXR0ZW4uCi0JCi0JKiBbbWlzYy9jb21tZGxnLmNdCi0JRml4ZWQgYmFkIGNhbGwgdG8gc3RybmNweSgpIHRoYXQgc21hc2hlZCB0aGUgc3RhY2suCi0KLQkqIFtjb250cm9scy9jb21iby5jXSBbd2luZG93cy93aW5wb3MuY10gW21lbW9yeS9zZWxlY3Rvci5jXQotCU9wZXJhdG9yIHByZWNlZGVuY2UgZml4ZXMuIFBlb3BsZSB3aG8gdXNlIGdjYyAyLjcuMSBkb24ndCBuZWVkIGEKLQlkZWJ1Z2dlciA6LSkKLQkKLQkqIFtpZjE2MzIvZ2RpLnNwZWNdIFtvYmplY3RzL3BhbGV0dGUuY10KLQlBZGQgUmVzaXplUGFsZXR0ZSgpIGFuZCBBbmltYXRlUGFsZXR0ZSgpIHN0dWJzLiBUaGV5IGRvbid0IGRvIGFueXRoaW5nLAotCWJ1dCBzb21ldGltZXMgdGhhdCdzIGdvb2QgZW5vdWdoLgotCi1GcmkgTm92IDE3IDA5OjEwOjM1IEdNVCAxOTk1ICBKb2huIEhhcnZleSA8am9obkBkaXZpc2lvbi5jby51az4KLQotCSogW2luY2x1ZGUvd2luZS5oXSBbaW5jbHVkZS9yZWdpc3RlcnMuaF0gW2luY2x1ZGUvd2luc29jay5oXQotICAgICAgICBBZGRlZCBkZWZpbml0aW9ucyBmb3IgVW5peHdhcmUuCi0KLQkqIFtsb2FkZXIvc2lnbmFsLmNdIFttaXNjL2NvbW0uY10gW21pc2Mvd2luc29ja2V0LmNdCi0JTWlzYy4gZml4ZXMgZm9yIFVuaXh3YXJlLgotCi0JKiBbbG9hZGVyL3Rhc2suY10KLSAgICAgICAgTWFkZSBhc3NpZ25lbXRzIHRvIGNvbnRleHQgaW4gSW5pdFRhc2sgZm9yIHJlZ2lzdGVycyB1c2UgdGhlIG1hY3JvcwotICAgICAgICBmcm9tIHJlZ2lzdGVycy5oIHRvIG1ha2UgdGhlbSBtb3JlIHBvcnRhYmxlLiAoTmVlZGVkIGZvciBVbml4d2FyZSkKLQotCSogW3Rvb2xzL2J1aWxkLmNdCi0JRml4ZWQgcmVnaXN0ZXIgYWNjZXMgcm91dGluZXMgdG8gd29yayBvbiBVbml4d2FyZS4gQml0IGdydWJieSBidXQKLSAJaXQgc2VlbXMgdG8gd29yay4KLQotCSogW2NvbnRyb2xzL2VkaXQuY10KLQlFRElUX1dNX05DQ3JlYXRlIGFsbG9jYXRlcyBsb2NhbCBoZWFwIGlmIGhhc24ndCBiZWVuIHByZXZpb3VzbHkKLQlhbGxvY2F0ZWQuCi0JCi0JKiBbbWlzY2VtdS9pbnQyMS5jXQotCW1rZGlyIG5vdyBjcmVhdGVzIGRpcmVjdG9yeSB3aXRoIHBlcm1pc3Npb24gdG8gYWNjZXNzIGl0LgotCi0JKiBbbWlzYy9kb3NfZnMuY10KLQlta2RpciBub3cgY3JlYXRlcyBkaXJlY3Rvcnkgd2l0aCBwZXJtaXNzaW9uIHRvIGFjY2VzcyBpdC4KLQlET1Nfb3BlbmRpciBub3cgdXNlcyBsaW5rZWQgbGlzdCBvZiBkaXJlbnRzIHRvIGF2b2lkIHByb2JsZW1zIHdpdGggCi0JcmVhbGxvYyBjaGFuZ2luZyBhZGRyZXNzIG9mIG1hbGxvY2VkIG1lbW9yeS4KLQotVGh1IE5vdiAxNiAxMjo0NzoxMyAxOTk1ICBNaWNoYWVsIFBhdHJhICA8cGF0cmFAaXRwMS5QaHlzaWsuVFUtQmVybGluLkRFPgotCi0JKiBbY29udHJvbHMvbWVudS5jXQotCU1FTlVfQ2FsY0l0ZW1TaXplKCk6IEZpeGVkIGhhbmRsaW5nIG9mIGVtcHR5IG1lbnUgaXRlbXMuCi0KLVNhdCBOb3YgMTEgMjE6NDY6NTQgMTk5NSAgSGFucyBkZSBHcmFhZmYgIDxncmFhZmZAdHdpNzIudHdpLnR1ZGVsZnQubmw+Ci0KLQkqIFttaXNjL2ZpbGUuY10KLQlJbiBPcGVuRmlsZSwgdW5saW5rIHNob3VsZCBiZSBkb25lIG9uIHRoZSB1bml4IGZpbGVuYW1lLgotCi1TYXQgTm92IDExIDE2OjQzOjI5IDE5OTUgIENhbWVyb24gSGVpZGUgIChoZWlkZUBlZS51YWxiZXJ0YS5jYSkKLQotICAgICAgICAqIFtpbmNsdWRlL2hhbmRsZTMyLmhdCi0gICAgICAgIE5ldyBoZWFkZXIgZmlsZSBjb250YWluaW5nIGludGVybmFsIFdpbjMyIGtlcm5lbCBoYW5kbGUKLSAgICAgICAgaW5mb3JtYXRpb24uCi0KLSAgICAgICAgKiBbd2luMzIvZmlsZS5jXQotICAgICAgICBBZGRlZCBSZWFkRmlsZSwgQ3JlYXRlRmlsZSwgYW5kIENsb3NlRmlsZUhhbmRsZSwgYW5kIGRpZAotICAgICAgICBzb21lIHJlb3JnYW5pemluZyB0byBtYXRjaCB0aGUgbmV3IGhhbmRsZSBhbGxvY2F0aW9uIHNjaGVtZS4KLQotICAgICAgICAqIFt3aW4zMi9pbml0LmNdCi0gICAgICAgIEFkZGVkIENsb3NlSGFuZGxlIGFuZCB0aGUgY3JlYXRpb24gb2Ygc3RhbmRhcmQgSS9PIGhhbmRsZXMuCi0KLSAgICAgICAgKiBbd2luMzIvb2JqZWN0X21ndC5jXQotICAgICAgICBOZXcgbW9kdWxlIGZvciBhbGxvY2F0aW5nIGFuZCBmcmVlaW5nIFdpbjMyIGtlcm5lbCBoYW5kbGVzLgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1GcmkgTm92ICAzIDIwOjA4OjE3IDE5OTUgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHN1bnNpdGUudW5jLmVkdT4KLQotCSogW2NvbmZpZ3VyZS5pbl0KLQlBdHRlbXB0IHRvIGNoZWNrIGZvciAtbGkzODYgb24gTmV0QlNELiBQbGVhc2UgdGVzdCB0aGlzLgotCi1Nb24gT2N0IDMwIDEyOjQwOjMyIEVTVCAxOTk1ICBKaW0gUGV0ZXJzb24gPGpzcGV0ZXJAYmlyY2guZWUudnQuZWR1PgotCi0JKiBbKi8qXQotCUVsaW1pbmF0ZWQgdmFyaW91cyB3YXJuaW5ncyB3aXRoIGVpdGhlciBleHBsaWNpdCBjYXN0cyBvciBtb3JlCi0JYWNjdXJhdGUgdmFyaWFibGUvcGFyYW1ldGVyIGRlY2xhcmF0aW9ucyAoZS5nLiBJTlQgaW5zdGVhZCBvZiBzaG9ydAotCW9yIFdPUkQpLgotCUNoYW5nZWQgbWFjcm9zICdtaW4nIGFuZCAnbWF4JyB0byAnTUlOJyBhbmQgJ01BWCcsIHNpbmNlIHRoZXkncmUKLQltYWNyb3MuCi0KLQkqIFtjb250cm9scy9lZGl0LmNdIFt3aW5kb3dzL2RlZmRsZy5jXQotCUFkZGVkICcjaWZkZWYgU1VQRVJGTFVPVVNfRlVOQ1RJT05TJyB3cmFwcGVycyBhcm91bmQgZnVuY3Rpb24KLQlkZWZpbml0aW9uIG9mIEVESVRfS2V5VlNjcm9sbERvYywgRURJVF9UZXh0TGluZU51bWJlciwgYW5kCi0JREVGRExHX0ZpbmREZWZCdXR0b24gdG8gYXZvaWQgd2FybmluZ3MuCi0KLQkqIFtjb250cm9scy9idXR0b24uY10gW2NvbnRyb2xzL3Njcm9sbC5jXSBbd2luZG93cy9kZWZ3bmQuY10KLQkgIFt3aW5kb3dzL21lc3NhZ2UuY10gW3dpbmRvd3Mvbm9uY2xpZW50LmNdCi0JQ29udmVydGVkIE1BS0VQT0lOVCBtYWNybyBjYWxsIHRvIG1hbnVhbCBjb252ZXJzaW9uLgotCi0JKiBbaW5jbHVkZS93aW5kb3dzLmhdCi0JRm9yIFdJTkVMSUIzMiwgc3RydWN0dXJlcyBQT0lOVCwgU0laRSwgYW5kIFJFQ1QgaGF2ZSBMT05HIG1lbWJlcnMKLQlpbnN0ZWFkIG9mIElOVC4gIFRoaXMgYWxzbyBpbnZhbGlkYXRlcyB0aGUgbWFjcm8gTUFLRVBPSU5UKCksIHdoaWNoCi0JaXMgbm90IHN1cHBvcnRlZCBpbiBXaW4zMi4gIEFsc28gZGVmaW5lZCB0aGUgUE9JTlRTIHN0cnVjdHVyZSAoU0hPUlQKLQltZW1iZXJzKSBhbmQgdGhlIE1BS0VQT0lOVFMgbWFjcm8uCi0KLQkqIFttaXNjL2NvbW1kbGcuY10KLQlDaGFuZ2VkIGEgbG90IG9mICdzdHJjcHknIGNhbGxzIHRvICdzdHJuY3B5JyBjYWxscy4gIEknbSBkZXNwZXJhdGUgdG8KLQlmaW5kIHRoaXMgbWVtb3J5IGJ1ZywgYW5kIHRoaXMgc2hvdWxkIGJlIGRvbmUgYW55d2F5LgotCi0JKiBbY29udHJvbHMvZWRpdC5jXQotCVdlbGwsIHRoZSBhbHRlcmF0aW9uIG1lbnRpb25lZCBhYm92ZSBkaWRuJ3QgZG8gaXQsIGJ1dCAjaWZkZWYnaW5nIG91dAotCWEgZmV3IGxpbmVzIGluIEVESVRfQ2xlYXJUZXh0IGRpZC4gIFRoaXMgbGVhZHMgdG8gYnVncywgYnV0IGZvciBub3csCi0JaXQncyBiZXR0ZXIgdGhhbiBiaXp6YXJlIG1lbW9yeSB0cm91Ymxlcy4KLQotCSogW3Rvb2xraXQvbWlzY3N0dWJzLmNdCi0JUmVtb3ZlZCB3YXJuaW5nIG1lc3NhZ2VzIGluIEdMT0JBTF9DcmVhdGVCbG9jaygpLCBHTE9CQUxfRnJlZUJsb2NrKCksCi0JYW5kIFJFTEFZMzJfR2V0RW50cnlQb2ludCgpLiAgVGhlc2UgYXJlIHRoZSBtb3N0IHBvcHVsYXIgd2FybmluZ3MsIGFuZAotCXRoZWlyIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gc2VlbXMgZmluZS4KLQotU2F0IE9jdCAyOCAwOTozOToxOCAxOTk1ICBKb2NoZW4gS2FycmVyIDxjaXAzMDdAd3BheDAxLlBoeXNpay5VbmktV3VlcnpidXJnLkRFPgotCi0JKiBbb2JqZWN0cy9jdXJzb3JpY29uLmNdCi0JRml4IGZvciAiYnJva2VuIiBYIHNlcnZlcnMgdGhhdCBpbnZlcnQgbWFza2VkIGN1cnNvciBjb2xvcnMuCi0KLUZyaSBPY3QgMjcgMTk6Mjc6MjEgMTk5NSAgQWxleCBLb3JvYmthICA8YWxleEBwaG02LnBoYXJtLnN1bnlzYi5lZHU+Ci0KLQkqIFt3aW5kb3dzL2RpYWxvZy5jXSBbd2luZG93cy9ub25jbGllbnQuY10KLQlSZW1vdmUgdW5uZWNlc3NhcnkgaXRlbXMgZnJvbSB0aGUgc3lzdGVtIG1lbnUuCi0KLVRodSBPY3QgMjYgMDU6MDM6MDMgTUVUIDE5OTUgIFBoaWxpcHBlIERlIE11eXRlciA8cGhkbUBpbmZvLnVjbC5hYy5iZT4KLQotCSogW29iamVjdHMvY29sb3IuY10gW29iamVjdHMvcGFsZXR0ZS5jXQotCU1ha2UgR2V0TmVhcmVzdENvbG9yIHJldHVybiBhIFJHQiB2YWx1ZSBpbnN0ZWFkIG9mIGEgcGl4ZWwgdmFsdWUuCi0KLVdlZCBPY3QgMjUgMjM6MzM6MzkgMTk5NSAgICBNYXJ0aW4gdm9uIExvZXdpcyA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgotCi0JKiBbY29udHJvbHMvZGVza3RvcC5jXVtjb250cm9scy9tZW51LmNdW2luY2x1ZGUvbWVudS5oXQotCUNoYW5nZWQgV09SRCBwYXJhbWV0ZXJzIHRvIFVJTlQgcGFyYW1ldGVycy4KLQotCSogW2luY2x1ZGUvd2ludHlwZXMuaF0KLQlNYWRlIFVJTlQgMzJiaXQgZm9yIFdJTkVMSUIuCi0KLQkqIFtsb2FkZXIvbWFpbi5jXQotCURpc2FibGVkIFJFTEFZMzJfSW5pdCBhbmQgTU9EVUxFX0luaXQgZm9yIFdJTkVMSUIuCi0KLQkqIFttaXNjL21haW4uY10KLQlBc3N1bWUgQ1BVMzg2IGZvciBXSU5FTElCLgotCi0JKiBbcmMvd2luZXJjXQotCWFkZF9wb3B1cDogc2V0IE1GX1BPUFVQIGZsYWcgb24gbWVudSBpdGVtLgotCi0JKiBbdG9vbGtpdC9NYWtlZmlsZS5pbl1bdG9vbGtpdC9oZWxsbzMuY11bdG9vbGtpdC9oZWxsbzNyZXMuY10KLQlBZGQgcmVzb3VyY2UgZGVtbyBoZWxsbzMgZm9yIFdJTkVMSUIuCi0JTmV3IGZpbGUgUkVBRE1FLnJlc291cmNlcy4KLQotCSogW3Rvb2xraXQvbWlzY3N0dWJzLmNdCi0JQWRkIGEgY2FzZSBmb3IgMTcuCi0KLVR1ZSBPY3QgMTcgMTU6MTM6MTAgSVNUIDE5OTUgIEl0YWkgTmFoc2hvbiA8bmFoc2hvbkB2bmV0LmlibS5jb20+Ci0KLQkqIFtsb2FkZXIvbW9kdWxlLmNdCi0JRG8gbm90IGFwcGVuZCAuZXhlIGlmIHRoZSBmaWxlIG5hbWUgYWxyZWFkeSBoYXMgYW4gZXh0ZW5zaW9uLgotCi0JKiBbbWlzYy9wcm9maWxlLmNdCi0JQXZvaWQgY3JlYXRpbmcgYSBmaWxlIHdpdGggYSBqdW5rIG5hbWUgaWYgYSAuaW5pIGZpbGUgZG9lcyBub3QKLQlleGlzdC4KLQotCSogW2lmMTYzMi9nZGkuc3BlY10gW2lmMTYzMi91c2VyLnNwZWNdIFtpZjE2MzIvZHVtbXkuY10KLQlBZGRlZCBhIGxvdCBvZiBkdW1teSBzdHVicyBmb3IgV2luZG93cyBIZWJyZXcgdmVyc2lvbi4KLQotVHVlIE9jdCAxNyAwMTowMzoyNCAxOTk1IFdpbGxpYW0gTWFncm8gPHdtYWdyb0B0Yy5jb3JuZWxsLmVkdT4KLQotCSogW2NvbnRyb2xzL2J1dHRvbi5jXQotCUZpeCBmb3IgYnV0dG9ucyB3aXRoIG5vIGxhYmVsLgotCi0JKiBbY29udHJvbHMvY29tYm8uY11bY29udHJvbHMvbGlzdGJveC5jXQotCUZpeGVzIGZvciBzY3JvbGxiYXIgcG9zaXRpb25pbmcuICBOb3cgZGlzYXBwZWFycyBjb3JyZWN0bHkKLQlmb3Igc2hvcnQgbGlzdHMuCi0KLQkqIFtjb250cm9scy9lZGl0LmNdCi0JSGFuZGxlIG1lbW9yeSBhbGxvY2F0aW9uIGRpZmZlcmVudGx5IHdoZW4gYnVpbGRpbmcgYXMgbGlicmFyeS4KLQotCSogW2NvbnRyb2xzL3N0YXRpY10KLQlEb24ndCBkZXN0cm95IG9sZCBpY29uIGJlZm9yZSBkcmF3aW5nIG5ldyBpY29uLiAoRml4ZXMgbGFuZHNjYXBlLwotCXBvcnRyYWl0IHRvZ2dsZSBpY29uIGluIHByaW50IGRpYWxvZy4pCi0KLQkqIFtpZjE2MzIvZ2RpLnNwZWNdCi0JTmV3IGZ1bmN0aW9ucyBTZXRNZXRhRmlsZUJpdHMgYW5kIEdldE1ldGFGaWxlQml0cwotCi0JKiBbaW5jbHVkZS9zeXNtZXRyaWNzLmhdIFt3aW5kb3dzL3N5c21ldHJpY3MuY10KLQlBZGQgc3VwcG9ydCBmb3IgR2V0U3lzdGVtTWV0cmljcyhTTV9DTUVUUklDUykgPT0gU01fQ01FVFJJQ1MKLQotCSogW2luY2x1ZGUvd2luZG93cy5oXQotCU1FVEFfRVhUVEVYVE9VVCwgbm90IE1FVEFfU0VUVEVYVE9VVAotCWRlZmluZSBHZXRDdXJyZW50VGltZSBhcyBHZXRUaWNrQ291bnQgKGZvciB3aW5lIGxpYnJhcnkpCi0KLQkqIFtsb2FkZXIvbWFpbi5jXQotCURvbid0IGluaXRpYWxpemUgYnVpbHQtaW4gbW9kdWxlcyBpbiB3aW5lIGxpYnJhcnkKLQotCSogW21lbW9yeS9sb2NhbC5jXQotCUxvY2FsUmVBbGxvYyB3YXMgZGVmaW5lZCBpbmNvcnJlY3RseS4gU3dhcCBmbGFncyBhbmQgc2l6ZSBhcmd1bWVudHMuCi0KLQkqIFttaXNjL21haW4uY10KLQlBbHdheXMgcmVwb3J0IENQVVRZUEU9NCB0byB3aW5lIGxpYnJhcnkuCi0KLQkqIFtvYmplY3RzL2RpYi5jXQotCVJMRTggaW1hZ2VzIHdlcmUgbWlzc2luZyB0b3AgbGluZSB3aGVuIGRlY29tcHJlc3NlZC4KLQotCSogW29iamVjdHMvbWV0YWZpbGUuY10KLQlTZXRNZXRhRmlsZUJpdHMgYW5kIEdldE1ldGFGaWxlQml0cyBpbXBsZW1lbnRlZC4gIFdvcmtzIHdoZW4gY2FsbGVkCi0JZnJvbSB3aW5oZWxwLiAgTW9yZSB0ZXN0aW5nIG5lZWRlZC4gIFZhcmlvdXMgbWVtb3J5IGxlYWtzIHBsdWdnZWQuCi0JVmFyaW91cyBvdGhlciBidWcgZml4ZXMuICBOZXcgbWV0YWZpbGUgb3BlcmF0aW9ucyBhZGRlZCBpbgotCVBsYXlNZXRhRmlsZVJlY29yZDogQ3JlYXRlUGFsZXR0ZSwgU2V0VGV4dEFsaWduLCBTZWxlY3RQYWxldHRlLAotCVNldE1hcHBlckZsYWdzLCBSZWFsaXplUGFsZXR0ZSwgRXh0VGV4dE91dCwgRXNjYXBlLiAgVGVzdGluZyBuZWVkZWQuCi0KLQkqIFt0b29sa2l0L2hlYXAuY10KLQlMb2NhbFVuTG9jayBjaGFuZ2VkIHRvIExvY2FsVW5sb2NrCi0KLVN1biBPY3QgMTUgMjE6NTU6MzMgMTk5NSAgQW5hbmQgS3VtcmlhIDxha3VtcmlhQG96ZW1haWwuY29tLmF1PgotCQotCSogW21pc2Mvd2luc29jay5jXSAKLQlSZXR1cm4gdGhlIGNvcnJlY3QgZXJyb3IgbnVtYmVyLCBmb3IgaG9zdCBsb29rdXAgb3BlcmF0aW9ucy4KLQlBbHNvLCBjb3JyZWN0IHRoZSBwcm9ibGVtIHdpdGggc2VuZF9tZXNzYWdlLgotCi1GcmkgT2N0IDEzIDE5OjA0OjM1IDE5OTUgIE1vcnRlbiBXZWxpbmRlciAgPHRlcnJhQGRpa3UuZGs+Ci0KLQkqIFtNYWtlZmlsZS5pbl0KLQlVc2luZyBubSdzIGJ1aWx0LWluIHNvcnRpbmcuCi0KLQkqIFsqLyouY10KLQlVc2UgeG1hbGxvYyBmb3IgbWFsbG9jIGFuZCB4cmVhbGxvYyBmb3IgcmVhbGxvYyBpbiBhbGwgdW5nYXJkZWQKLQljYXNlcy4KLQotCSogW2RlYnVnZ2VyL2RiZy55XQotCUhhbmRsZSBDLWxpa2UgZXhwcmVzc2lvbnMuICBDbGVhbi11cC4KLQotCSogW2RlYnVnZ2VyL2RlYnVnLmxdCi0JTG90cyBvZiBuZXcgdG9rZW5zIGZvciBleHByZXNzaW9ucy4KLQotCSogW2RlYnVnZ2VyL2luZm8uY10KLQlJbXBsZW1lbnQgImxpc3QiIGNvbW1hbmQgZm9yIGRpc2Fzc2VtYmxpbmcuCi0KLQkqIFttaXNjL29sZTJubHMuY10KLQlJbXBsZW1lbnQgbW9yZSBEYW5pc2ggc3R1ZmYuCi0KLUZyaSBPY3QgIDYgMTA6Mzk6MzkgMTk5NSBSYW0nb24gR2FyYydpYSA8cmFtb25AaWUzLmNsdWJzLmV0c2l0LnVwbS5lcz4KLQotCSogW2xvYWRlci9tb2R1bGUuY10KLQlVcGRhdGVkIHNlbGYtbG9hZGluZyBtb2R1bGVzIHRvIHN1cHBvcnQgZm9yIG5ldyAzMiBiaXQgCi0Jc3RhY2sgZnJhbWVzLgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1TdW4gT2N0ICAxIDE1OjQ4OjM0IDE5OTUgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHN1bnNpdGUudW5jPgotCi0JKiBbY29udHJvbHMvbWVudS5jXQotCUZpeGVkIEdldE1lbnVTdHJpbmcoKSBmb3Igbm9uLXN0cmluZyBpdGVtcy4KLQotCSogW2RlYnVnZ2VyLyouY10KLQlGaXJzdCBhdHRlbXB0IHRvIGNoZWNrIHZhbGlkaXR5IG9mIHBvaW50ZXJzIGJlZm9yZSBtZW1vcnkKLQlhY2Nlc3Nlcy4gRm9yIG5vdyBvbmx5IHNlZ21lbnRlZCBwb2ludGVycyBhcmUgY2hlY2tlZC4KLQotCSogW2RlYnVnZ2VyL2RiZy55XSBbbWVtb3J5L2xkdC5jXQotCUFkZGVkIHBvc3NpYmlsaXR5IHRvIGR1bXAgb25seSBvbmUgc2VnbWVudCB3aXRoICdpbmZvIHNlZ21lbnQnLgotCi0JKiBbaW5jbHVkZS9iaXRtYXBzL29jcl8qXQotCUFkZGVkIGFsbCBPRU0gY3Vyc29ycyBhcyBYUE0gYml0bWFwcy4KLQotCSogW2luY2x1ZGUvY3Vyc29yaWNvbi5oXSBbb2JqZWN0cy9jdXJzb3JpY29uLmNdCi0JUmV3cm90ZSBhbGwgY3Vyc29yIGFuZCBpY29uIG1hbmFnZW1lbnQgdG8gdXNlIHRoZSBzYW1lIG1lbW9yeQotIAlsYXlvdXQgYXMgV2luZG93cywgYW5kIHRvIGZhY3RvciBjb21tb24gY29kZSBiZXR3ZWVuIGljb25zIGFuZAotCWN1cnNvcnMuIEltcGxlbWVudGVkIGljb24gZGlyZWN0b3J5IGxvb2t1cCB0byBmaW5kIHRoZSBiZXN0Ci0JbWF0Y2hpbmcgaWNvbiAoaS5lLiB0aGUgY29sb3Igb25lKS4KLSAgCUltcGxlbWVudGVkIENvcHlDdXJzb3IoKSBhbmQgRHVtcEljb24oKS4KLQotCSogW2xvYWRlci9tb2R1bGUuY10KLQlGb3IgZGlzYWJsZWQgYnVpbHQtaW4gbW9kdWxlcywgd2Ugbm93IHRyeSB0byBsb2FkIHRoZSBXaW5kb3dzIERMTAotCWZpcnN0LCBhbmQgaWYgdGhpcyBmYWlscyB3ZSBmYWxsIGJhY2sgdG8gdXNpbmcgdGhlIGJ1aWx0LWluIG1vZHVsZQotCWFueXdheS4KLQotCSogW21lbW9yeS9nbG9iYWwuY10KLQlGaXhlZCBHbG9iYWxIYW5kbGUoKSB0byByZXR1cm4gdGhlIGNvcnJlY3Qgc2VsZWN0b3IgaW4gdGhlIGhpZ2gKLQl3b3JkIGV2ZW4gaWYgd2UgYXJlIHBhc3NlZCBhIGhhbmRsZSBpbiB0aGUgZmlyc3QgcGxhY2UuCi0KLQkqIFttaXNjZW11L2luc3RyLmNdCi0JVGFrZSBpbnRvIGFjY291bnQgdGhlIHNpemUgb2YgdGhlIG9wZXJhbmQgYW5kIG9mIHRoZSBzdGFjayBzZWdtZW50Ci0Jd2hlbiBpbmNyZW1lbnRpbmcgdGhlIHN0YWNrIHBvaW50ZXIuCi0JQXZvaWQgcmVmZXJlbmNpbmcgRlNfcmVnIGFuZCBHU19yZWcgb24gKkJTRC4KLQotCSogW29iamVjdHMvZGliLmNdCi0JQWxsIERJQiBmdW5jdGlvbnMgbm93IGFjY2VwdCBhIEJJVE1BUENPUkVIRUFERVIgZm9ybWF0IGJpdG1hcC4KLQlNb25vY2hyb21lIERJQnMgYXJlIGNyZWF0ZWQgYXMgbW9ub2Nocm9tZSBiaXRtYXAgaWZmIHRoZXkgYXJlCi0JYmxhY2sgYW5kIHdoaXRlLgotCi0JKiBbb2JqZWN0cy9vZW1iaXRtYXAuY10KLQlBZGRlZCBzdXBwb3J0IGZvciBPRU0gY3Vyc29ycywgY2hhbmdlZCBPQk1fTG9hZEljb24gdG8gdXNlIHRoZSBuZXcKLQlpY29uIG1lbW9yeSBsYXlvdXQuCi0KLQkqIFtyYy9zeXNyZXNfRnIucmNdCi0JQWRkZWQgRnJlbmNoIFtGcl0gbGFuZ3VhZ2Ugc3VwcG9ydC4KLQotCSogW3dpbjMyL2Vudmlyb25tZW50LmNdCi0JRml4ZWQgR2V0Q29tbWFuZExpbmVBKCkgdG8gdXNlIGN1cnJlbnQgUERCLgotCi0JKiBbd2luZG93cy9ldmVudC5jXSBbd2luZG93cy93aW5wb3MuY10KLQlTaW11bGF0ZSBhIG1vdXNlIG1vdGlvbiBldmVudCB1cG9uIFNldFdpbmRvd1BvcygpIHRvIGZvcmNlIHRoZQotCWN1cnNvciB0byBiZSBzZXQgY29ycmVjdGx5LgotCi1TYXQgU2VwIDMwIDE3OjQ5OjMyICBDYW1lcm9uIEhlaWRlICAoaGVpZGVAZWUudWFsYmVydGEuY2EpCi0KLQkqIFt3aW4zMi8qXQotICAgICAgICBOZXcgV2luMzIga2VybmVsIGZ1bmN0aW9uczogR2V0QUNQLCBHZXRDUEluZm8sCi0gCUdldEVudmlyb25tZW50VmFyaWFibGVBLCBHZXRGaWxlVHlwZSwgR2V0TGFzdEVycm9yLCBHZXRPRU1DUCwKLSAJR2V0U3RhcnR1cEluZm9BLCBHZXRUaW1lWm9uZUluZm9ybWF0aW9uLCBTZXRFbnZpcm9ubWVudFZhcmlhYmxlLAotIAlTZXRGaWxlUG9pbnRlciwgU2V0TGFzdEVycm9yLCBWaXJ0dWFsQWxsb2MsIFZpcnR1YWxGcmVlLAotIAlXcml0ZUZpbGUuICBDb21wbGV0ZWQgaW1wbGVtZW50YXRpb25zIG9mIEdldENvbW1hbmRMaW5lQS4KLQotCSogW2luY2x1ZGUva2VybmVsMzIuaF0KLSAgICAgICAgTmV3IGZpbGUuCi0KLQkqIFtsb2FkZXIvbWFpbi5jXQotICAgICAgICBDYWxsIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciBXaW4zMiBkYXRhIChkb2Vzbid0IGN1cnJlbnRseSBkbwotIAlhbnl0aGluZykuCi0KLQkqIFttaXNjL21haW4uY10KLQlJbXBsZW1lbnRlZCBHZXRFbnZpcm9ubWVudFZhcmlhYmxlQSwgU2V0RW52aXJvbm1lbnRWYXJpYWJsZUEuCi0KLVNhdCBTZXAgMzAgMDA6MjY6NTYgMTk5NSAgTmllbHMgZGUgQ2FycGVudGllciAgPG5pZWxzQGNpbmR5LmV0LnR1ZGVsZnQubmw+Ci0KLQkqIFt3aW5kb3dzL3dpbnBvcy5jXVttaXNjZW11L2VtdWxhdGUuY11bbG9hZGVyL21vZHVsZS5jXQotCSAgW21pc2MvY29tbWRsZy5jXQotCU1pc2MuIGJ1ZyBmaXhlcwotCi1GcmkgU2VwIDI5IDE2OjE2OjEzIDE5OTUgIEppbSBQZXRlcnNvbiA8anNwZXRlckBiaXJjaC5lZS52dC5lZHU+Ci0KLQkqIFsqLypdCi0JRm9yIFdpbmVsaWIsIGV4cGxpY2l0IGNhc3RzIGhhdmUgYmVlbiBwbGFjZWQgd2hlcmUgd2FybmluZ3Mgd2VyZQotIAl1c3VhbGx5IGdlbmVyYXRlZC4KLQlwcmludGYgZm9ybWF0cyB3aGljaCBnaXZlIHRoZSBmb3JtYXQgZm9yIHByaW50aW5nIGEgaGFuZGxlIGFzCi0gCSIlMDR4IiBvciBzb21ldGhpbmcgc2ltaWxhciBoYXZlIGJlZW4gY2hhbmdlZCB0byB1c2UgdGhlIE5QRk1UCi0gCW1hY3JvIGRlZmluZWQgaW4gaW5jbHVkZS93aW50eXBlcy5oLiAgU29tZSB0aW1lcywgZXhwbGljaXQgY2FzdHMKLSAJd2VyZSBhbHNvIG5lY2Vzc2FyeS4KLSAgICAgCVBhcmFtZXRlciwgZmllbGQsIGFuZCB2YXJpYWJsZSBkZWNsYXJhdGlvbnMgaGF2ZSBiZWVuIG1hZGUgbW9yZQotIAlleGFjdCwgc3VjaCBhcyBjb252ZXJ0aW5nICdXT1JEIHdQYXJhbScgdG8gJ1dQQVJBTSB3UGFyYW0nIG9yCi0gCSdXT1JEIGhGb250JyB0byAnSEZPTlQgaEZvbnQnLgotICAgICAJQW55IGNhbGwgb2YgdGhlIGZvcm0gR2V0V2luZG93V29yZChod25kLEdXV19ISU5TVEFOQ0UpIGhhcyBiZWVuCi0gCXJlcGxhY2VkIHdpdGggYSBjYWxsIHRvIFdJTl9HZXRXaW5kb3dJbnN0YW5jZShod25kKS4KLQotCSogW2NvbnRyb2xzL2NvbWJvLmNdCi0JQWRkZWQgV0lORUxJQjMyIHN1cHBvcnQgaW4gQ0xCb3hHZXRDb21ibygpLgotCi0JKiBbaW5jbHVkZS9kaWFsb2cuaF0KLQlDb21tZW50ZWQgb3V0IHRoZSAnI2lmbmRlZiBXSU5FTElCJyBhcm91bmQgdGhlICcjcHJhZ21hIHBhY2soMSknLgotCXdpbmVsaWIgbmVlZHMgdGhlIHBhY2tpbmcgYXMgd2VsbCAoZS5nLiB3aGVuIGFjY2Vzc2luZyByZXNvdXJjZXMKLQlsaWtlIHN5c3Jlc19ESUFMT0dfU0hFTExfQUJPVVRfTVNHQk9YKS4KLQotCSogW2luY2x1ZGUvd2luZG93cy5oXQotCUdvdCByaWQgb2YgdGhlIEZbYS1rXSBtYWNyb3MsIHdoaWNoIHdlcmUgY2x1dHRlcmluZyB1cCB0aGUgZ2xvYmFsCi0JbmFtZXNwYWNlLgotCi0JKiBbaW5jbHVkZS93aW5kb3dzLmhdIFt3aW5kb3dzL2RlZnduZC5jXQotCUFkZGVkIFdpbjMyIG1lc3NhZ2VzIFdNX0NUTENPTE9SKi4KLQotCSogW2luY2x1ZGUvd2ludHlwZXMuaF0KLQlQdXQgaW4gcHJlcHJvY2Vzc29yICcjZGVmaW5lIFdJTkVMSUIzMicgaWYgYXBwcm9wcmlhdGUgYW5kIGNoYW5nZWQKLQl0aGUgdHlwZXMgb2Ygc29tZSB0eXBlZGVmcyAoV1BBUkFNLCBIQU5ETEUpIGJhc2VkIG9uIHRoaXMuCi0JCi0JKiBbbG9hZGVyL21vZHVsZS5jXSBbdG9vbGtpdC9taXNjc3R1YnMuY10KLQlBZGRlZCAjaWZkZWYnZCBwb3J0aW9uIGluIExvYWRNb2R1bGUgdG8gaGFuZGxlIGxvYWRpbmcgYSBXSU5FbGliCi0JbW9kdWxlIChhbHJlYWR5IGxvYWRlZCwganVzdCBpbml0IHZhbHVlcykuICAnI2lmZGVmJ2VkIG91dCB0aGUKLQlkZWZpbml0aW9uIGZvciBHZXRXbmRQcm9jRW50cnkxNiBhbmQgYWRkZWQgYSBuZXcgdmVyc2lvbiB0bwotCXRvb2xraXQvbWlzY3N0dWJzLmMuCi0KLQkqIFttaXNjL3NoZWxsLmNdCi0JQWRqdXN0ZWQgdGhlIGxlbmd0aHMgb2YgQXBwTmFtZSBhbmQgQXBwTWlzYyBmcm9tIDUxMiw1MTIgdG8gMTI4LDkwNi4KLQlTYW1lIGFtb3VudCBvZiB0b3RhbCBzdG9yYWdlLCBidXQgbXVjaCBtb3JlIHJlYXNvbmFibGUuICBBbHNvLCBjaGFuZ2VkCi0JY2FsbHMgdG8gc3RyY3B5KCkgaW4gU2hlbGxBYm91dCgpIHRvIGNhbGxzIHRvIHN0cm5jcHkoKSBpbnN0ZWFkLgotCVRoaXMgd2FzIGEgZGlmZmljdWx0IGJ1ZyB0byB0cmFjayBkb3duLCBidXQgdGhlIEFwcE1pc2MgZmllbGQgd2FzCi0JYmVpbmcgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgY29udHJpYnV0ZXJzIHRleHQsIHdoaWNoIHdhcyBtdWNoIGxhcmdlcgotCXRoYW4gNTEyIGNoYXJhY3RlcnMuCi0KLQkqIFt0b29sa2l0L2F0b20uY10KLQlOZXcgZmlsZSBmb3IgYXRvbS1oYW5kbGluZyBmdW5jdGlvbnMuICBDb3BpZWQgZnJvbSBtZW1vcnkvYXRvbS5jIGFuZAotCXRoZW4gaGVhdmlseSBtb2RpZmllZC4gIFJpZ2h0IG5vdywgaXQncyBqdXN0IGEgbGlua2VkIGxpc3Qgb2YgYXRvbXMuCi0JQ29uc2lkZXIgaXQgYXMgYSBoYXNoIHRhYmxlIHdpdGgganVzdCBvbmUgZW50cnkuICBJdCdzIGVhc2lseSBjaGFuZ2VkCi0JbGF0ZXIuCi0KLQkqIFt0b29sa2l0L2hlYXAuY10KLQlDb21tZW50ZWQgb3V0IHRoZSBoZWFwIGZ1bmN0aW9ucyB3aXRoIGEgIiNpZmRlZiBXSU5FTElCMTYiIGFuZCBwdXQgaW4KLQlhIFdpbjMyIHZlcnNpb24gKHdoaWNoIGlzIGJhc2ljYWxseSBhIG1vZGlmaWVkIGNvcHkpLgotCi0JKiBbdG9vbGtpdC9zdXAuY10gW3Rvb2xraXQvbWlzY3N0dWJzLmNdCi0JTW92ZWQgdGhlIHN0dWZmIEkgcHV0IGluIHRvb2xraXQvc3VwLmMgaW50byB0b29sa2l0L21pc2NzdHVicy5jIGFuZAotCWFkZGVkIHF1aXRlIGEgZmV3IG1vcmUgc3R1YnMuCi0KLQkqIFt0b29sa2l0L3dpbm1haW4uY10KLQlSZWFycmFuZ2VkIHN0YXJ0dXAgY29kZSBpbiBfV2luTWFpbi4gIEkgdGhpbmsgdGhpcyB3aWxsIHdvcmsuCi0KLQkqIFt0b29sa2l0L01ha2VmaWxlLmluXQotCUFkZGVkIHRhcmdldHMgZm9yICdoZWxsbycgYW5kICdoZWxsbzInIGluIGNhc2UgYW55b25lIGNhcmVzIHRvIHRyeQotCW91dCB0aGUgc2FtcGxlIHByb2dyYW1zLgotCi1XZWQgU2VwIDI3IDIzOjEzOjQzIDE5OTUgIEFuYW5kIEt1bXJpYSA8YWt1bXJpYUBvemVtYWlsLmNvbS5hdT4KLQkKLQkqIFttaXNjZW11L2ludDJmLmNdIFttaXNjZW11L3Z4ZC5jXSBbaWYxNjMyL3dpbnByb2NzLnNwZWNdCi0JRmlyc3QgYXR0ZW1wdCBhdCBzdXBwb3J0IGZvciBzb21lIFZ4RHMuIENvbW0sIFNoZWxsIGFuZCBQYWdlZmlsZS4KLQotVHVlIFNlcCAyNiAyMTozNDo0NSAxOTk1ICBIYW5zIGRlIEdyYWFmZiAgPGdyYWFmZkB0d2k3Mi50d2kudHVkZWxmdC5ubD4KLQotCSogW21pc2MvZG9zX2ZzLmNdCi0JRE9TX1NpbXBsaWZ5UGF0aDogQWxzbyByZW1vdmUgIi8uLyIgZnJvbSBwYXRoLiAoSGFwcGVucyB3aGVuCi0gCXN0YXJ0aW5nIGFwcGxpY2F0aW9ucyBsaWtlICd3aW5lIC4vZXhjZWwuZXhlJykKLQotU2F0IFNlcCAyMyAyMzozMjo0MCAxOTk1ICBNb3J0ZW4gV2VsaW5kZXIgIDx0ZXJyYUBkaWt1LmRrPgotCi0JKiBbY29uZmlndXJlLmluXQotCUF2b2lkIHJlbGF0aXZlIHBhdGggZm9yIHdpbmUuaW5pLgotCi0JKiBbcmMvc3lzcmVzX0RhLnJjXQotCVN1cHBvcnQgZm9yIERhbmlzaCBbRGFdIGxhbmd1YWdlLgotCi0JKiBbbWlzYy9tYWluLmNdIFttaXNjZW11L2NwdS5jXQotCVJldHVybiB0aGUgcHJvY2Vzc29yIHdlJ3JlIHJ1bm5pbmcgb24gY29ycmVjdGx5LgotCi0JKiBbbWlzY2VtdS9pbnQyZi5jXQotCU1pbm9yIHN0dWZmIGluIGludCAweDJmLCBmdW5jdGlvbiAweDE2LgotCi1TYXQgU2VwIDIzIDE5OTUgMTc6NTg6MDQgIE1hcmN1cyBNZWlzc25lciAgPG1zbWVpc3NuQGZhdWkwMS5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KLQotCSogW21pc2Mvc2hlbGwuY10gW21pc2MvbWFpbi5jXQotCUltcGxlbWVudCBzYXZpbmcgYW5kIGxvYWRpbmcgb2YgdGhlIHJlZ2lzdHJ5IGRhdGFiYXNlIChuZWVkZWQgZm9yCi0JT0xFKS4gVmVyeSBleHBlcmltZW50YWwuIEZpeGVkIFNoZWxsRXhlY3V0ZSgpLgotCQotCSogW21pc2NlbXUvaW50MjEuY10KLQlFRVhJU1QgaXMgbm90IGEgY3JpdGljYWwgZXJyb3IgY29uZGl0aW9uIGZvciBta2RpcigpLgotCi1GcmkgU2VwIDIyIDAxOjMzOjM0IDE5OTUgIEFsZXggS29yb2JrYSAgPGFsZXhAcGhtNi5waGFybS5zdW55c2IuZWR1PgotCi0JKiBbaW5jbHVkZS9zaGVsbC5oXSBbbWlzYy9zaGVsbC5jXQotCUltcGxlbWVudGVkIDQgZHJhZy9kcm9wIGZ1bmN0aW9ucyB3aXRoIGRvY3VtZW50ZWQgZnVuY3Rpb25hbGl0eS4KLQotICAgICAgICAqIFttdWx0aW1lZGlhL3RpbWUuY10KLSAgICAgICAgIkZpeGVkIiBNTVN5c1RpbWVDYWxsYmFjayBrbHVkZ2Ugc28gRXhjZWw1IGxvYWRzIHVwIHdpdGhvdXQgY3Jhc2hpbmcuCi0KLQkqIFsqLypdIAotICAgICAgICBBZGRlZCBuZXcgZmlsZXMsIG1vcmUgbWVzc2FnZSBkZWZpbml0aW9ucywgc3RydWN0dXJlcywgZGVidWcgaW5mbywKLSAJZXRjLiAgUmV3cm90ZSBtZXNzYWdlIGxvZ2dpbmcgZnVuY3Rpb25zIHRvIHByb2R1Y2Ugb3V0cHV0IHNpbWlsYXIKLSAJdG8gV2luU2lnaHQuICBDaGVjayBvdXQgLWRlYnVnbXNnICttZXNzYWdlIG9wdGlvbi4KLQotCSogW21pc2MvZmlsZS5jXQotICAgICAgICBGaXhlZCBHZXREcml2ZVR5cGUgcmV0dXJuIHZhbHVlLiAgCi0KLSAgICAgICAgKiBbd2luZG93cy9tZXNzYWdlLmNdIAotICAgICAgICBIb29rcyBhcmUgaW52b2tlZCBpbiBub3JtYWwgb3JkZXIuCi0KLSAgICAgICAgKiBbbWlzY2VtdS8qXQotICAgICAgICBBZGRlZCBzb21lIGZ1bmN0aW9ucyBhbmQgaW50ZXJydXB0cy4KLQotICAgICAgICAqIFttaXNjL3NoZWxsLmNdCi0gICAgICAgIEltcGxlbWVudGVkIERyYWcuLi4gZnVuY3Rpb25zLgotCi1UaHUgU2VwIDIxIDIzOjUwOjEyIDE5OTUgIEp1a2thIElpdm9uZW4gPGlpdm9uZW5AY2MuaGVsc2lua2kuZmk+Ci0KLQkqIFtyYy9zeXNyZXNfRmkucmNdIFtyYy9zeXNyZXMucmNdCi0JRmlyc3QgYXR0ZW1wdCBhdCBGaW5uaXNoIFtGaV0gbGFuZ3VhZ2Ugc3VwcG9ydC4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotU3VuIFNlcCAxNyAxNjo0Nzo0OSAxOTk1ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBzdW5zaXRlLnVuYy5lZHU+Ci0KLQkqIFtjb25maWd1cmUuaW5dIFsqL01ha2VmaWxlLmluXSBbTWFrZS5ydWxlcy5pbl0KLQlDbGVhbmVkIHVwIG1ha2VmaWxlcywgYWRkZWQgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIFdpbmVsaWIsCi0JZ3JvdXBlZCBjb21tb24gbWFrZSBydWxlcyBpbiBNYWtlLnJ1bGVzLmluLgotCi0JKiBbQ29uZmlndXJlXQotCVJlbmFtZWQgdG8gJ0NvbmZpZ3VyZS5vbGQnOyBwbGVhc2UgdXNlICdjb25maWd1cmUnIGluc3RlYWQuCi0KLQkqIFtjb250cm9scy9tZW51LmNdCi0JRml4ZWQgRGVzdHJveU1lbnUoKSB0byBhdm9pZCBkZWxldGluZyB0aGUgc2FtZSBtZW51IHR3aWNlLgotCU1vcmUgZml4ZXMgdG8gV01fTUVOVVNFTEVDVCwgYW5kIGFkZGVkIFdNX0lOSVRNRU5VLgotCi0JKiBbaWYxNjMyL3JlbGF5LmNdCi0JRml4ZWQgd3JvbmcgcmVnaXN0ZXIgdmFsdWVzIGRpc3BsYXllZCBieSBSRUxBWV9EZWJ1Z0NhbGwzMigpLgotCi0JKiBbbWVtb3J5L2xvY2FsLmNdCi0JRml4ZWQgTG9jYWxMb2NrKCkgYW5kIExvY2FsVW5sb2NrKCkgdG8gaW5jcmVtZW50L2RlY3JlbWVudCB0aGUKLQlsb2NrIGNvdW50IGZvciBtb3ZlYWJsZSBibG9ja3MuCi0KLQkqIFttaXNjL2NvbW1kbGcuY10gW21pc2Mvc2hlbGwuY10gW3JjL3dpbmVyYy5jXQotCU1vZGlmaWVkIHRoZSBnZW5lcmF0ZWQgQyBmaWxlIHNvIHRoYXQgdGhlIHJlc291cmNlIGluZm9ybWF0aW9uCi0JKHNpemUsIGV0Yy4pIGlzIGFsc28gZXhwb3J0ZWQuCi0JTW9kaWZpZWQgY29tbW9uIGRpYWxvZ3MgdG8gdXNlIHRoZSBuZXcgaW5mb3JtYXRpb25zLgotCi0JKiBbbWlzYy9tYWluLmNdIFtBTk5PVU5DRV0KLQlVcGRhdGUgdGhlIGxpc3Qgb2YgY29udHJpYnV0b3JzLiBQbGVhc2UgbGV0IG1lIGtub3cgaWYgSSBmb3Jnb3QKLQlzb21lb25lLgotCi0JKiBbcmMvc3lzcmVzLnJjXSBbcmMvc3lzcmVzX0VuLnJjXQotCU1vdmVkIEVuZ2xpc2ggcmVzb3VyY2VzIHRvIHN5c3Jlc19Fbi5yYy4KLQlDaGFuZ2VkIGlkcyBmcm9tIG51bWVyaWMgdG8gc3ltYm9saWMgZm9yIGRpYWxvZ3MuCi0KLQkqIFt3aW5kb3dzL2RpYWxvZy5jXQotCU1vZGlmaWVkIHRlbXBsYXRlIHBhcnNpbmcgdG8gYmUgYWJsZSB0byBwYXNzIHNlZ21lbnRlZCBwb2ludGVycyB0bwotCUNyZWF0ZVdpbmRvdygpLgotCi0JKiBbd2luZG93cy93aW4uY10KLQlDcmVhdGVXaW5kb3coKSBub3cgdGFrZXMgc2VnbWVudGVkIHBvaW50ZXJzIGZvciBjbGFzcyBhbmQgd2luZG93Ci0JbmFtZXMuCi0JTWF4bWltaXplIG9yIG1pbmltaXplIHRoZSB3aW5kb3cgdXBvbiBjcmVhdGlvbiBpZiB0aGUgV1NfTUFYSU1JWkUKLQlvciBXU19NSU5JTUlaRSBiaXRzIGFyZSBzZXQuCi0KLVRodSBTZXAgMTQgMTc6MTk6NTcgMTk5NSAgUGF1bCBXaWxoZWxtICA8cGF1bEBwYXVsLmFjY2Vzc29uZS5jb20+Ci0KLQkqIFtjb250cm9scy9zY3JvbGwuY10KLQlGaXhlZCBzY3JvbGwtYmFyIGJ1Z3MgZm9yIG5vbi1jbGllbnQgd2luZG93cy4KLQotVGh1IFNlcCAxNCAxNDowNDoxNCBNRVQgRFNUIDE5OTUgSm9jaGVuIEhvZW5pY2tlIDxKb2NoZW4uSG9lbmlja2VAYXJiaS5JbmZvcm1hdGlrLlVuaS1PbGRlbmJ1cmcuZGU+Ci0KLQkqIFtpbmNsdWRlL2N1cnNvci5oXSBbd2luZG93cy9jdXJzb3IuY10KLQlDdXJzb3IgaXMgbm90IG1pcnJvcmVkIGFueSBtb3JlIGFuZCB0aGUgaG90c3BvdCBpcyBzZXQgcmlnaHQuCi0KLVdlZCBTZXAgMTMgMTQ6MjI6MzEgMTk5NSAgTWFyY3VzIE1laXNzbmVyICA8bXNtZWlzc25AZmF1aTAxLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgotCi0JKiBbb2xlLmhdCi0JTWlzYyBzbWFsbCBmaXhlcy4KLQotTW9uIFNlcCAgNCAwMDowMToyMyAxOTk1ICBKb24gVG9tYnMgPGpvbkBndGUuZXNpLnVzLmVzPgotCi0JKiBbcmMvc3lzcmVzX0VzLnJjXQotCUZpcnN0IGF0dGVtcHQgYXQgU3BhbmlzaCBbRXNdIGxhbmd1YWdlIHN1cHBvcnQuCi0KLVN1biBTZXAgIDMgMTM6MjI6MzMgMTk5NSAgICAgTWFydGluIHZvbiBMb2V3aXMgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KLQotCSogW2luY2x1ZGUvYWxpYXMuaF1bd2luZG93cy9hbGlhcy5jXVtpbmNsdWRlL3JlbGF5MzIuaF0KLQlOZXcgZmlsZXMKLQotCSogW2NvbnRyb2xzL3dpZGdldHMuY10KLQlXSURHRVRTX0luaXQ6IHJlZ2lzdGVyIGFsaWFzIHdpbmRvdyBwcm9jZWR1cmVzCi0KLQkqIFtpZjE2MzIvY2FsbGJhY2suY10KLQlDYWxsV25kUHJvYzogQ2FsbCBhbGlhcyBmdW5jdGlvbnMgaWYgbmVjZXNzYXJ5Ci0KLQkqIFtpZjE2MzIvZ2RpMzIuc3BlY10KLQlHZXRTdG9ja09iamVjdCwgVGV4dE91dEE6IG5ldyByZWxheXMKLQotCSogW21pc2MvdXNlcjMyLmNdW2lmMTYzMi91c2VyMzIuc3BlY11bbWlzYy9NYWtlZmlsZS5pbl1bbWlzYy9JbWFrZWZpbGVdCi0JdXNlcjMyLmM6IG5ldyBmaWxlCi0JQmVnaW5QYWludCxDcmVhdGVXaW5kb3dFeEEsRGVmV2luZG93UHJvY0EsRGlzcGF0Y2hNZXNzYWdlLEVuZFBhaW50LAotCUdldE1lc3NhZ2VBLFJlZ2lzdGVyQ2xhc3NBLFNob3dXaW5kb3csVXBkYXRlV2luZG93OiBuZXcgcmVsYXlzCi0KLQkqIFtpZjE2MzIvd2lucHJvY3MzMi5zcGVjXVtsb2FkZXIvcGVfaW1hZ2UuY11bbG9hZGVyL21vZHVsZS5jXQotCVBFX1dpbjMyQ2FsbFRvU3RhcnQ6IG5ldyBmdW5jdGlvbgotCU1PRFVMRV9DcmVhdGVJbnN0YW5jZTogcmVtb3ZlZCBzdGF0aWMgYXR0cmlidXRlCi0JTG9hZE1vZHVsZTogVHJ5IGxvYWRpbmcgUEUgaW1hZ2Ugb24gZXJyb3IgMjEKLQlQRV9Mb2FkTW9kdWxlOiBuZXcgZnVuY3Rpb24KLQlQRV9Mb2FkSW1hZ2U6IGluaXRpYWxpemUgcGVfZGF0YSB3aXRoIDAKLQkKLQkqIFtpbmNsdWRlL2RsbHMuaF1baW5jbHVkZS9wZWV4ZS5oXQotCW1vdmVkIHBlX2RhdGEgYW5kIHdfZmlsZXMgdG8gcGVleGUuaAotCQotCSogW21pc2Mvc2hlbGwuY10KLQlTaGVsbEFib3V0OiBSZWdpc3RlciBBYm91dFduZFByb2MgYWxpYXNlcwotCi0JKiBbbWlzY2VtdS9pbnQyMS5jXQotCWhhbmRsZSAweDQ0MEEgYW5kIDB4REMKLQotCSogW21pc2NlbXUvaW50MmYuY10KLQloYW5kbGUgMHg4NAotCi0JKiBbb2JqZWN0cy9kaWIuY10KLQlDcmVhdGVESUJpdG1hcDogY29tcGxhaW4gaWYgQklUTUFQSU5GT0hFQURFUiBpcyBvZiB3cm9uZyBzaXplCi0KLQkqIFt0b29scy9idWlsZC5jXQotCWluY2x1ZGUgd2luZG93cy5oIGFuZCByZWxheTMyLmggaW50byBnZW5lcmF0ZWQgV2luMzIgcmVsYXlzLAotCWRvbid0IGRlY2xhcmUgdGhlIGltcGxlbWVudGF0aW9uIGFzIGludCAoKikoKTsKLQlsaW1pdCBpbiBXSU4zMl9idWlsdGluIHdhcyBvZmYgYnkgb25lCi0KLQkqIFt3aW5kb3dzL2NhcmV0LmNdCi0JQ0FSRVRfSW5pdGlhbGl6ZTogbmV3IGZ1bmN0aW9uLCBjYWxsIG9uIHN0cmF0ZWdpYyBwbGFjZXMKLQotCSogW3dpbmRvd3MvbWVzc2FnZWJveC5jXQotCU1lc3NhZ2VCb3g6IHJlZ2lzdGVyIG1lc3NhZ2UgYm94IHByb2MgYWxpYXNlcwotCi0JKiBbaWYxNjMyL2FkdmFwaTMyLnNwZWNdW2lmMTYzMi9jb21kbGczMi5zcGVjXQotCU5ldyBmaWxlcwotCi0JKiBbaWYxNjMyL01ha2VmaWxlLmluXVtpZjE2MzIvSW1ha2VmaWxlXVtpZjE2MzIvcmVsYXkzMi5jXQotCWFkZGVkIG5ldyBzcGVjIGZpbGVzCi0JUkVMQVkzMl9HZXRCdWlsdGluRExMOiBwZXJmb3JtIGxvb2t1cCBjYXNlIGluc2Vuc2l0aXZlCi0JUkVMQVkzMl9HZXRFbnRyeVBvaW50OiBzdGFydCBuYW1lIHNlYXJjaCBhdCAwCi0KLQkqIFtpZjE2MzIvdXNlci5zcGVjXVtpZjE2MzIva2VybmVsLnNwZWNdW2lmMTYzMi9nZGkuc3BlY10KLQlBZGRlZCBzdHVicyBmb3IgbmV3IFdpbjk1IEFQSQotCi1TYXQgU2VwIDIgMTk5NSAgTWFydGluIFJveQotCi0JKiBbbWlzYy9jb21tZGxnLmNdCi0JSW4gV01fSU5JVERJQUxPRywgY3VycmVudCBmaWx0ZXIgbXVzdCByZWZsZWN0IGxwb2ZuLT5uRmlsdGVySW5kZXguCi0gIAlXaGVuIHByb2Nlc3MgSURPSyBidXR0b24gaW4gRklMRURMR19XTUNvbW1hbmQoKSwKLSAJbHBvZm4tPm5GaWx0ZXJJbmRleCBzaG91bGQgYmUgdXBkYXRlZCB0byBjdXJyZW50IHNlbGVjdGlvbi4KLQotVGh1IEF1ZyAzMSAxNTowMDowMCAxOTk1IFJhbSdvbiBHYXJjJ2lhIDxyYW1vbkBpZTMuY2x1YnMuZXRzaXQudXBtLmVzPgotCi0JKiBbbG9hZGVyL21vZHVsZS5jXSBbbG9hZGVyL25lX2ltYWdlLmNdCi0JQWRkZWQgc3VwcG9ydCBvZiBzZWxmLWxvYWRpbmcgbW9kdWxlcy4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaHUgQXVnIDMxIDE3OjE5OjU3IDE5OTUgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHN1bnNpdGUudW5jLmVkdT4KLQotCSogW0NvbmZpZ3VyZV0KLQlBZGRlZCBjb21waWxlLXRpbWUgb3B0aW9uIGZvciBJUEMuCi0KLQkqIFtjb25maWd1cmUuaW5dCi0JQWRkZWQgY29tbWFuZC1saW5lIG9wdGlvbnMgZm9yIGxhbmd1YWdlLCBJUEMgYW5kIG1hbGxvYwotCWRlYnVnZ2luZy4KLQotCSogW2NvbnRyb2xzL21lbnUuY10KLQlXTV9NRU5VU0VMRUNUIHdhcyBzb21ldGltZXMgc2VudCB0byB0aGUgd3Jvbmcgd2luZG93LgotCi0JKiBbZGVidWdnZXIvYnJlYWsuY10KLQlGb3IgdGhlICduZXh0JyBjb21tYW5kLCBvbmx5IHN0ZXAgb3ZlciBpbnN0cnVjdGlvbiB0aGF0IHJlcXVpcmUKLQlpdC4gVGhpcyBhbGxvd3MgJ25leHQnIHRvIGRvIHRoZSByaWdodCB0aGluZyB3aXRoIGptcCBhbmQgcmV0Ci0JaW5zdHJ1Y3Rpb25zLgotCi0JKiBbaXBjLyouY10gW21lbW9yeS9hdG9tLmNdIFttZW1vcnkvZ2xvYmFsLmNdCi0JSVBDIGNhbiBub3cgYmUgY29uZmlndXJlZCBvdXQgYXQgY29tcGlsZS10aW1lLgotCi0JKiBbbG9hZGVyL3Rhc2suY10KLQlCdWcgZml4IGluIFRBU0tfUmVzY2hlZHVsZSgpIHRoYXQgY291bGQgY2F1c2UgYSB0YXNrIHRvIGJlIGRlbGV0ZWQKLQl0d2ljZS4KLQotCSogW21pc2NlbXUvZG9zbWVtLmNdIChOZXcgZmlsZSkKLQlQYXJ0aWFsIGVtdWxhdGlvbiBvZiB0aGUgQklPUyBkYXRhIHNlZ21lbnQuCi0KLQkqIFttaXNjZW11L2luc3RyLmNdCi0JVHJhcCBhdHRlbXB0cyB0byBhY2Nlc3Mgc2VsZWN0b3IgMHg0MCBhbmQgcmVtYXAgdGhlIGFjY2VzcyB0bwotCXNlZ21lbnQgX18wMDQwSC4KLQotCSogW3Rvb2xzL2J1aWxkLmNdCi0JRml4ZWQgYnVnIGluIENhbGxUbzMyX0xhcmdlU3RhY2soKSB0aGF0IGNhdXNlZCBwcm9ibGVtcyB3aGVuCi0JY29tcGlsaW5nIFdpbmUgd2l0aCB0aGUgLWZvbWl0LWZyYW1lLXBvaW50ZXIgb3B0aW9uLgotCi0JKiBbd2luZG93cy9tZXNzYWdlLmNdCi0JRml4ZWQgYnVnIGluIGhhcmR3YXJlIGV2ZW50IGhhbmRsaW5nIHRoYXQgY291bGQgY2F1c2Ugc29tZSBldmVudHMKLQl0byBnZXQgaWdub3JlZC4KLQotU2F0IEF1ZyAyNiAxMzoxMjo1OSBJU1QgMTk5NSBNaWNoYWVsIFZla3NsZXIgPG12ZWtzbGVyQHZuZXQuaWJtLmNvbT4KLQotCSogW2lwYy9SRUFETUVdIFtpcGMvZGRlLnRleF0KLQlMYVRlWCBkb2N1bWVudGF0aW9uIGZvciB0aGUgaXBjIGFuZCBEREUgc3R1ZmYuCi0KLVdlZCBBdWcgMjMgMjI6MDE6MjMgR01UIDE5OTUgTWljaGFlbCBWZWtzbGVyIDxtdmVrc2xlckB2bmV0LmlibS5jb20+Ci0KLQkqIFtpcGMvSW1ha2VmaWxlXSBbaXBjL3dpbmVfdGVzdF9zdHViLmNdCi0JRml4ZWQgSVBDIHRlc3RpbmcuIE5vdyBpdCBjYW4gYmUgY29tcGlsZWQgd2l0aCAibWFrZSB0ZXN0cyIKLQotV2VkIEF1ZyAyMyAyMTowNDoxNCAxOTk1ICBGb25zIEJvdG1hbiAgPGJvdG1hbkB3YWItdGlzLnJhYm9iYW5rLm5sPgotCi0JKiBbaWYxNjMyL2tlcm5lbC5zcGVjXSBbaW5jbHVkZS93aW5kb3dzLmhdIFttaXNjL21haW4uY10KLQlBZGRlZCBHZXRXaW5EZWJ1Z0luZm8vU2V0V2luRGVidWdJbmZvIHN0dWIgZm9yIHBsYXllci5leGUKLQotU3VuIEF1ZyAgMjAgMTM6NDk6NDIgMTk5NSAgTWFyY3VzIE1laXNzbmVyICA8bXNtZWlzc25AZmF1aTAxLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgotCi0JKiBbbWlzY2VtdS9pbnQyMS5jXQotCU1pc2MgZml4IHRvIGludDIxLGFoPTQwICh3cml0ZSkgdG8gbWF0Y2ggX2x3cml0ZSgpLgotCUFYPTB4NDQwQSAoY2hlY2sgaWYgaGFuZGxlIGlzIHJlbW90ZSkgYWRkZWQuCi0KLQkqIFttdWx0aW1lZGlhL21tc3lzdGVtLmNdCi0JTW92ZWQgbWNpU2VuZFN0cmluZyB0byBtY2lzdHJpbmcuYy4KLQotCSogW211bHRpbWVkaWEvbWNpc3RyaW5nLmNdCi0JTmV3IGZpbGUsIHN0cmluZyBpbnRlcmZhY2UgZm9yIE1DSSAobm90IGNvbXBsZXRlLCBub3QgdGhvcm91Z2hseQotCXRlc3RlZCkuCi0KLQkqIFttdWx0aW1lZGlhL2F1ZGlvLmNdCi0JSU9DVEwgcHJpbnRzIGVycm9yczsgb25lIHBhcmFub2lkIGNoZWNrIGRpc2FibGVkLgotCi0JKiBbbWlzYy9maWxlLmNdCi0JTWlzYyBvcGVyYXRvciBwcmVjZWRlbmNlIGZpeGVzLgotCi0JKiBbaWYxNjMyL2dkaS5zcGVjXSBbb2JqZWN0cy9iaXRibHQuY10KLQlTdHViIGZvciBGYXN0V2luZG93RnJhbWUgKHBhcmFtZXRlcnMgbm90IGNvcnJlY3QpLgotCi1TYXQgQXVnIDE5IDAxOjMxOjIzIDE5OTUgIEdyYWhhbSBNZW5oZW5uaXR0IDxnZm1Ad2VycGxlLm1pcmEubmV0LmF1PgotCi0JKiBbbG9hZGVyL25lX2ltYWdlLmNdCi0JUHJlbGltaW5hcnkgc3VwcG9ydCBmb3IgaXRlcmF0ZWQgc2VnbWVudHMuCi0KLVNhdCBBdWcgMTkgMDA6NDM6MDQgMTk5NSAgQW5kcmV3IFRheWxvciAgKGF0YXlsb3JAY2FkdmlzaW9uLmNvbSkKLQotCSogW3dpbmRvd3MvbWFwcGluZy5jXQotCUluIGZ1bmN0aW9uIE1BUFBJTkdfRml4SXNvdHJvcGljKCksIFZwb3J0RXh0W1hZXSBpcyBtdWx0aXBsaWVkIGJ5Ci0gCXRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiAoeWRpbSAvIHhkaW0pIG9yICh4ZGltIC8geWRpbSkuCi0KLVRodSBBdWcgMTUgMjM6MDA6MTYgIEdyZWdvcnkgVHJ1YmV0c2tveSAgPGdyaXNoYUBtaXJhLmNvbT4KLQotCSogW29iamVjdHMvb2VtYml0bWFwLmNdCi0JQWRkZWQgc29tZSBpbmNsdWRlcyBmb3IgV2luZG93cyA5NS4KLQotCSogW2luY2x1ZGUvc3lzbWV0cmljcy5oXQotCUFkZGVkIHNvbWUgc3lzbWV0cmljcyBmb3IgV2luZG93cyA5NS4KLQotCSogW2luY2x1ZGUvYml0bWFwcy8qOTVdCi0JTmV3IGZpbGVzOiBvYm1fY2xvc2VfOTUsIG9ibV9jbG9zZWRfOTUsIG9ibV9yZWR1Y2VfOTUsIG9ibV9yZWR1Y2VkXzk1Ci0Jb2JtX3pvb21fOTUsIG9ibV96b29tZF85NSAtIHRoZXNlIGFyZSBzb21lIHBpeG1hcHMgZm9yIFdpbmRvd3MgOTUuCi0KLVRodSBBdWcgMTAgMTI6MDA6MDAgMTk5NSAgSmFuIFdpbGxhbW93aXVzICAoamFuQGphbmhoLnNobmV0Lm9yZykKLQotCSogW21pc2Mvc2hlbGwuY10gW3JjL3N5c3JlcyoucmNdCi0JVGhlIGNhcHRpb24gb2YgdGhlIFNoZWxsQWJvdXQgZGlhbG9nIGJveCBpcyBsYW5ndWFnZSBzcGVjaWZpYyBhbmQKLSAJc2hvdWxkIGJlIGRlZmluZWQgaW4gdGhlIHJlc291cmNlcy4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVGh1IEF1ZyAxNyAxOTozMDoxNCAxOTk1ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBzdW5zaXRlLnVuYy5lZHU+Ci0KLQkqIFsqL01ha2VmaWxlLmluXQotCVJlbW92ZWQgd2luZWxpYmNsZWFuIHRhcmdldCwgYXMgaXQgZG9lc24ndCB3b3JrIGFueXdheS4KLQotCSogW2NvbnRyb2xzL2J1dHRvbi5jXQotCUF2b2lkIGRyYXdpbmcgdGhlIGZvY3VzIHJlY3RhbmdsZSBvdXRzaWRlIG9mIHRoZSBidXR0b24uCi0KLQkqIFtjb250cm9scy93aWRnZXRzLmNdCi0JRml4ZWQgYnVnIHdpdGggdGhlIHNpemUgb2YgdGhlIHJlc2VydmVkIGJ5dGVzIGZvciB0aGUgRWRpdAotCWNvbnRyb2wgKGNhdXNlZCBFdWRvcmEgdG8gY3Jhc2gpLgotCi0JKiBbZGVidWdnZXIvKl0gW2luY2x1ZGUvZGVidWdnZXIuaF0KLQlVbmlmaWVkIGRlYnVnZ2VyIGFkZHJlc3MgaGFuZGxpbmcuIFNlZ21lbnRlZCBhbmQgbGluZWFyIGFkZHJlc3NlcwotCWFyZSBubyBncm91cGVkIGluIGEgc2luZ2xlIHR5cGUgREJHX0FERFIuCi0JQWxsIGNvbW1hbmRzIG5vdyBhY2NlcHQgc2VnOm9mZiBhZGRyZXNzZXMuCi0JTW9kdWxlIGVudHJ5IHBvaW50cyBhcmUgbm93IGxvYWRlZCB1cG9uIGZpcnN0IGVudHJ5IHRvIHRoZQotCWRlYnVnZ2VyLCBzbyB0aGF0IGVudHJ5IHBvaW50cyBvZiB0aGUgbG9hZGVkIGV4ZWN1dGFibGUgYWxzbwotCWFwcGVhciBpbiB0aGUgc3ltYm9sIHRhYmxlLgotCi0JKiBbaW5jbHVkZS9yZWdpc3RlcnMuaF0gW21pc2NlbXUvKi5jXQotCVJlZ2lzdGVyIG1hY3JvcyBhcmUgbm93IG9mIHRoZSBmb3JtICdBWF9yZWcoY29udGV4dCknIGluc3RlYWQgb2YgJ0FYJy4KLQlUaGlzIG1ha2VzIGNvZGUgbGVzcyByZWFkYWJsZSwgYnV0IHdpbGwgcHJldmVudCBhIGxvdCBvZiBuYW1lCi0JY2xhc2hlcyB3aXRoIG90aGVyIGRlZmluaXRpb25zLiBJdCBhbHNvIGF2b2lkcyBhIGhpZGRlbiByZWZlcmVuY2UKLQl0byB0aGUgJ2NvbnRleHQnIHZhcmlhYmxlLgotCi0JKiBbaXBjL2RkZV9hdG9tLmNdIFttaXNjL2F0b20uY10KLQlBbGwgKkFkZEF0b20gYW5kICpGaW5kQXRvbSBmdW5jdGlvbnMgbm93IHRha2UgYSBTRUdQVFIgcGFyYW1ldGVyLAotCXRvIGFsbG93IHN1cHBvcnRpbmcgaW50ZWdlciBhdG9tcy4KLQlNb3ZlZCBhdG9tLmMgdG8gbWVtb3J5LyBkaXJlY3RvcnkuCi0KLQkqIFtsb2FkZXIvdGFzay5jXQotCUZpeGVkIGVudmlyb25tZW50IGFsbG9jYXRpb24gdG8gY29tcHV0ZSB0aGUgc2l6ZSBkeW5hbWljYWxseS4KLQlBZGRlZCAnd2luZGlyJyBlbnZpcm9ubWVudCB2YXJpYWJsZS4KLQlGaXhlZCBHZXRET1NFbnZpcm9ubWVudCgpIHRvIHJldHVybiB0aGUgY3VycmVudCB0YXNrIGVudmlyb25tZW50LgotCi0JKiBbd2luZG93cy9tZXNzYWdlLmNdCi0JRml4ZWQgYnVnIGluIE1TR19HZXRXaW5kb3dGb3JFdmVudCgpLgotCi1XZWQgQXVnICA5IDExOjQwOjQzIDE5OTUgIE1hcmN1cyBNZWlzc25lciAgPG1zbWVpc3NuQGZhdWkwMS5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KLQotCSogW2luY2x1ZGUvb2xlLmhdCi0JQWRkZWQgYSBsb3Qgb2Ygc3RydWN0dXJlcyAgZnJvbSBteSBCb3JsYW5kIE1hbnVhbC4gTmVpdGhlciBjb21wbGV0ZSwKLQlub3IgMTAwJSByaWdodCAoY2hlY2sgcGxlYXNlKQotCQotCSogW21pc2Mvc2hlbGwuY10KLQlGaXhlZCBzb21lIG9mIHRoZSBSZWcqIGZ1bmN0aW9ucy4KLQlFbmhhbmNlZCBTaGVsbEV4ZWN1dGUuCi0JUGxlYXNlIHRlc3Q6IHdpbmUgInJlZ2VkaXQuZXhlIC92IiBtcGxheWVyLmV4ZSBzb3VuZHJlYy5leGUKLQlEbyBZT1Uga25vdyB0aGUgZm9ybWF0IG9mIFxXSU5ET1dTXFJFRy5EQVQ/IE1haWwgbWUgcGxlYXNlIDopCi0KLQkqIFttaXNjL2Rvc19mcy5jXQotCU1ha2UgdW1zZG9zIG1vdW50ZWQgd2luZG93cyBkaXJzIHdvcmsgYWdhaW4uCi0KLQkqIFttaXNjZW11L2VtdWxhdGUuY10KLQlBZGRlZCBzb21lIGNvbW1lbnRzLCBwcmVpbXBsZW1lbnRhdGlvbiBvZiBzdWJmdW5jdGlvbiA3LgotCi0JKiBbbXVsdGltZWRpYS9tbXN5c3RlbS5jXQotCUltcGxlbWVudGVkIG1jaVNlbmRTdHJpbmcuIG5vdCBjb21wbGV0ZSwgbm90IGNsZWFuLCBub3QKLQluZWNlc3NhcmlseSB3b3JraW5nIChvbmx5IGNoZWNrZWQgd2l0aCBhIHByb2dyYW0gd2hpY2ggdXNlcwotIAknY2RhdWRpbycgKG9uZSB3b3JraW5nIHByb2dyYW0gaXMgY29vbC5leGUsIGEgc2hhcmV3YXJlIHdhdmVkaXRvcgotIAl3aXRoIGNkYXVkaW8gcGxheSBmYWNpbGl0aWVzLikKLQotCSogW211bHRpbWVkaWEvbWNpY2RhLmNdCi0JU2VncHRyIGZpeGVzIGluIERyaXZlclByb2MKLQlEZWZhdWx0IGNkcm9tIGRyaXZlIGluIExpbnV4IGlzIC9kZXYvY2Ryb20gLi4uIHVzdWFsbHkgYSBzeW1ib2xpYwotIAlsaW5rIHRvIHlvdXIgcmVhbCBjZHJvbSBkZXZpY2UuCi0KLVR1ZSBBdWcgIDggMTk6NDE6NTAgQ0RUIDE5OTUgRGFuaWVsIFNjaGVwbGVyIDxka3MyQGNlYy53dXN0bC5lZHU+Ci0KLQkqIFtsb2FkZXIvcmVzb3VyY2UuY10KLQlEb24ndCBjcmFzaCBpbiBhIExvYWRTdHJpbmcgdG8gTlVMTAotCi0JKiBbbG9hZGVyL3Jlc291cmNlLmNdCi0JRml4ZWQgYWNjZWxlcmF0b3JzIHRvIHdvcmsgd2l0aCBtb2RpZmllcnMuICAoQUxULXggbW9kaWZpZXJzIHN0aWxsCi0gCXdvbid0IHdvcmsgdW5sZXNzIHRoZSBBTFQga2V5cHJlc3MgZXhpdGVkIHRoZSBtZW51LikKLQotCSogW21pc2MvZmlsZS5jXQotCUV4cGFuZCBhIGZpbGUgdG8gdGhlIGN1cnJlbnQgb2Zmc2V0IHdpdGggYW4gX2x3cml0ZSBvZiBzaXplIHplcm8uCi0KLQkqIFttaXNjL2ZpbGUuY10KLQlTZXQgYSBuZXdseSBjcmVhdGVkIGZpbGUgdG8gcmVhZC13cml0ZSBpbnN0ZWFkIG9mIHdyaXRlLW9ubHkuCi0JCi1TdW4gQXVnICA2IDIwOjI4OjM1IDE5OTUgIEFuYW5kIEt1bXJpYSA8YWt1bXJpYUBvemVtYWlsLmNvbS5hdT4KLQotCSogW21pc2MvbWFpbi5jXSBbaW5jbHVkZS9tc2Rvcy5oXQotCUZpeGVkIHRvIHJldHVybiBET1MgdmVyc2lvbiA2LjIyLCBhbmQgdGhlIGNvcnJlY3QgYnl0ZSBvcmRlcgotCWZvciBXaW5kb3dzIHByb2dyYW1zLgotCi1XZWQgQXVnICAyIDEyOjM2OjMzIDE5OTUgICBCZXJuZCBTY2htaWR0IDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KLQotCSogW2luY2x1ZGUvb3B0aW9ucy5oXSBbbWVtb3J5L2dsb2JhbC5jXSBbbWlzYy9tYWluLmNdCi0JTWFrZSB0aGUgbmV3IElQQyBydW4tdGltZSBzZWxlY3RpYmxlLCBkaXNhYmxpbmcgaXQgYnkgZGVmYXVsdC4KLQkoSSB0aGluayBpdCdzIG9ubHkgdXNlZnVsIGZvciBsaWJ3aW5lLCBhbnl3YXkuKQotCi0JKiBbbG9hZGVyL3Rhc2suY10gW21lbW9yeS9zZWxlY3Rvci5jXQotCUluIEZyZWVTZWxlY3RvcigpLCB3YWxrIHVwIHRoZSBzdGFjayBhbmQgZml4IHRoZSBmcmFtZXMuCi0KLQkqIFtvYmplY3RzL2RpYi5jXQotCU1pc3NpbmcgYnJlYWsgc3RhdGVtZW50IGluIERJQl9TZXRJbWFnZUJpdHNfUkxFOCgpLgotCUluIEdldERJQml0cygpLCBzZXQgdGhlIGNvbXByZXNzaW9uIGZsYWcgaW4gdGhlIGJpdG1hcCBpbmZvIHRvIHplcm8uCi0KLQkqIFt3aW5kb3dzL2RpYWxvZy5jXQotCUdldE5leHREbGdHcm91cEl0ZW0oKSBuZWVkcyB0byB0cmVhdCB0aGUgZmlyc3QgY2hpbGQgYXMgaWYgaXQgaGFkCi0JYW4gaW1wbGljaXQgV1NfR1JPVVAgYml0IHNldC4KLQotTW9uIEp1bCAzMSAxNTo0NDo0NyBFRFQgMTk5NSBMb3Vpcy1ELiBEdWJlYXUgPGxkZEBzdGVwLnBvbHltdGwuY2E+Ci0KLQkqIFttaXNjL2Rvc19mcy5jXQotCVF1aWNrJ24gZGlydHkgZml4IGZvciB0aGUgaW5pdGlhbGlzYXRpb24gb2YgdGhlIFo6IGluZm9ybWF0aW9uCi0Jc3RydWN0dXJlLgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1TYXQgSnVsIDIyIDIyOjM5OjA5IElEVCAxOTk1IE1pY2hhZWwgVmVrc2xlciA8ZTE2NzgyMjNAdG9jaG5hcGMyLnRlY2huaW9uLmFjLmlsPgotCi0JKiBbaXBjLypdCi0JTmV3IGRpcmVjdG9yeS4gVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdGhlIG5ldyBpbnRlci13aW5lCi0gCWNvbW11bmljYXRpb25zIHN1cHBvcnQuIEl0IGVuYWJsZXMgRERFIHByb3RvY29scyBiZXR3ZWVuIHR3byB3aW5lCi0gCWluc3RhbmNlcy4gIEN1cnJlbnRseSBpdCBpcyBsaW1pdGVkIHRvIERERSwgYnV0IGNhbiBiZSBlbmhhbmNlZCB0bwotIAlzdXBwb3J0IE9MRSBiZXR3ZWVuIDIgZGlmZmVyZW50IHdpbmUgaW5zdGFuY2VzLiAgVGhpcyBpcyB2ZXJ5Ci0gCWltcG9ydGFudCBmb3IgbGlid2luZS5hIERERS9PTEUgc3VwcG9ydC4KLQotCSogW3Rvb2xzL2lwY2xdCi0gICAgCUEgc2NyaXB0IHRvIGRlbGV0ZSBnYXJiYWdlIElQQyBoYW5kbGVzIChzaGFyZWQgbWVtb3J5LCBzZW1hcGhvcmVzCi0gCWFuZCBtZXNzYWdlIHF1ZXVlcykuICBUaGUgY3VycmVudCBpbnRlci13aW5lIGNvbW11bmljYXRpb24gaXMgbm90Ci0gCXBlcmZlY3QsIGFuZCBzb21ldGltZXMgbGVhdmVzIGdhcmJhZ2UgYmVoaW5kLgotCi0JKiBbaWYxNjMyL3JlbGF5LmNdIFtpbmNsdWRlL2F0b20uaF0gW2luY2x1ZGUvZ2xvYmFsLmhdCi0gCVtsb2FkZXIvc2VsZWN0b3IuY10gW2xvYWRlci90YXNrLmNdIFtsb2FkZXIvbW9kdWxlLmNdCi0gCVtsb2FkZXIvc2lnbmFsLmNdIFttZW1vcnkvZ2xvYmFsLmNdIFttaXNjL2F0b20uY10KLSAJW3dpbmRvd3MvY2xhc3MuY10gW3dpbmRvd3MvbWVzc2FnZS5jXSBbd2luZG93cy93aW4uY10KLQlbSW1ha2VmaWxlXQotICAgIAlIb29rcyBmb3IgaW50ZXItd2luZSBEREUgc3VwcG9ydCwgY3VycmVudCBHbG9iYWwuKkF0b20gZnVuY3Rpb25zCi0gCXJlbmFtZWQgdG8gTG9jYWwuKkF0b20gc2luY2UgR2xvYmFsLipBdG9tIGFyZSB1c2VkIGZvciBJbnRlci1XaW5lCi0gCURERSBjb21tdW5pY2F0aW9uLiAoVGhlIGZpcnN0IGNhbGwgdG8gdGhlc2UgZnVuY3Rpb25zIHNldHMgdXAgdGhlCi0gCUlQQyBzdHJ1Y3R1cmVzIC0gd2hpY2ggb3RoZXJ3aXNlIGNhdXNlIHVubmVlZGVkIG92ZXJoZWFkLgotCi1Nb24gSnVsIDE3IDE5OjU1OjIxIDE5OTUgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHN1bnNpdGUudW5jLmVkdT4KLQotCSogW2NvbnRyb2xzL21lbnUuY10KLQlEb24ndCBjcmFzaCBpZiBhIE5VTEwgc3RyaW5nIGlzIHBhc3NlZCB0byBtZW51IGZ1bmN0aW9ucy4KLQotCSogW21lbW9yeS9zZWxlY3Rvci5jXQotCVdlIG5vdyB1c2UgYSBiaXQgaW4gbGR0X2ZsYWdzX2NvcHkgdG8gaW5kaWNhdGUgZnJlZSBMRFQgZW50cmllcy4KLQlGaXhlZCBhIGJ1ZyBpbiBTRUxFQ1RPUl9SZWFsbG9jQmxvY2sgdGhhdCBjb3VsZCBjYXVzZSBpdCB0bwotCW92ZXJ3cml0ZSB2YWxpZCBMRFQgZW50cmllcyB3aGVuIGdyb3dpbmcgYSBibG9jay4KLQotCSogW21pc2NlbXUvaW5zdHIuY10KLQlFbXVsYXRlIGludCB4eCBpbnN0cnVjdGlvbiBieSBzdG9yaW5nIHRoZSBpbnRlcnJ1cHQgdmVjdG9yIGluCi0JQ1M6SVAgYW5kIHJldHVybmluZyBkaXJlY3RseS4gVGhpcyBhbGxvd3MgYSBwcm9ncmFtIHRvIGluc3RhbGwgYW4KLQlpbnRlcnJ1cHQgdmVjdG9yLgotCi0JKiBbd2luZG93cy93aW4uY10KLQlBZGRlZCBmdW5jdGlvbiBXSU5fR2V0VG9wUGFyZW50IHRvIGdldCB0aGUgdG9wLWxldmVsIHBhcmVudCBvZiBhCi0Jd2luZG93LgotCi1TdW4gSnVsICAxNiAxODoxNzoxNyAxOTk1ICBHcmVnb3J5IFRydWJldHNrb3kgPGdyaXNoYUBtaXJhLmNvbT4KLQotICAgICAgICAqIFtsb2FkZXIvcmVzb3VyY2UuY10KLSAgICAgICAgQWRkZWQgTG9hZEljb25IYW5kbGVyLiBJdCBkb2Vzbid0IGRvIGFueXRoaW5nIHlldCwgYnV0IG5vdyB5b3UKLSAgICAgICAgY2FuIHVzZSBib3JsYW5kIGhlbHAgZmlsZXMgd2l0aCB3aW5oZWxwLmV4ZS4KLQotU3VuIEp1bCAxNiAxMTo1ODo0NSAxOTk1IEFuYW5kIEt1bXJpYSA8YWt1bXJpYUBvemVtYWlsLmNvbS5hdT4KLQotCSogW21pc2MvbWFpbi5jXQotCUZpeGVkIHRvIHJldHVybiAzODYgRW5oYW5jZWQgbW9kZSBjb3JyZWN0bHkuIEFsc28gcmV0dXJuIHRoZSBzYW1lCi0gCXR5cGUgb2YgQ1BVLCBmb3IgYm90aCBFbmhhbmNlZCBhbmQgU3RhbmRhcmQgbW9kZSwgbmFtZWx5IGEgMzg2LgotCi1TdW4gSnVsIDE2IDAwOjAyOjA0IDE5OTUgICAgTWFydGluIHZvbiBMb2V3aXMgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KLQotCSogW0NvbmZpZ3VyZV0gW2luY2x1ZGUvb3B0aW9ucy5oXSBbaW5jbHVkZS93aW5lb3B0cy5oXQotCSAgW21pc2MvbWFpbi5jXVttaXNjL3NweS5jXQotCSAgUmVtb3ZlZCBzdXBwb3J0IG9mIHNweSBmaWxlLiBSZWRpcmVjdGVkIHNweSBtZXNzYWdlcyB0byBzdGRkZWIuCi0JICBSZW1vdmVkIC1zcHkgb3B0aW9uLiBBZGRlZCAtZGVidWdtc2cgK3NweSBvcHRpb24uCi0KLQkqIFtkZWJ1Z2dlci9kYmcueV1bZGVidWdnZXIvZGVidWcubF0KLQlFbmFibGVkIHNlZ21lbnRlZCBhZGRyZXNzZXMgKHNlZzpvZmZzKSBmb3IgYnJlYWsgYW5kIHggY29tbWFuZHMuCi0KLQkqIFtpZjE2MzIvZ2RpLnNwZWNdIFtvYmplY3RzL3JlZ2lvbi5jXSBbd2luZG93cy9ncmFwaGljcy5jXQotCSAgW2luY2x1ZGUvcmVnaW9uLmhdCi0JRnJhbWVSZ24sIFJFR0lPTl9GcmFtZVJnbjogTmV3IGZ1bmN0aW9ucwotCi0JKiBbaWYxNjMyL2tlcm5lbC5zcGVjXQotCUlzV2luT2xkQXBUYXNrOiBSZXR1cm4gZmFsc2UKLQotCSogW2lmMTYzMi9tb3VzZS5zcGVjXQotCUNwbEFwcGxldDogUmVtb3ZlZAotCi0JKiBbaWYxNjMyL3VzZXIuc3BlY10gW3dpbmRvd3Mvd2luLmNdCi0JU2hvd093bmVkUG9wdXBzOiBOZXcgZnVuY3Rpb24KLQotCSogW2lmMTYzMi93aW5zb2NrLnNwZWNdIFttaXNjL3dpbnNvY2tldC5jXQotCWluZXRfYWRkciwgc2VsZWN0OiBOZXcgcHJvdG90eXBlcyBpbiByZWxheSBjb2RlCi0JRml4ZWQgbWVtb3J5IGxheW91dCBmb3IgbmV0ZGIgZnVuY3Rpb25zIChnZXRYYnlZKS4KLQlXSU5TT0NLX2lvY3Rsc29ja2V0OiBUcmFuc2xhdGVkIEZJT05SRUFELCBGSU9OQklPLCBhbmQgRklPQVNZTkMKLQotCSogW29iamVjdHMvY2xpcHBpbmcuY10KLQlSZWN0VmlzaWJsZTogRml4ZWQgY2FsbCB0byBMUFRvRFAKLQotCSogW3JjL3dpbmVyYy5jXQotCW1haW46IFJlbW92ZWQgZXh0cmEgYXJndW1lbnQgdG8gZ2V0b3B0IGZvciBMaW51eC4KLQotVHVlIEp1bCAxMSAwMDoxNDo0MSAxOTk1ICAgQmVybmQgU2NobWlkdCA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+Ci0KLSAgICAgICAgKiBbY29udHJvbHMvbGlzdGJveC5jXQotCVlldCBhbm90aGVyIGZpeCBmb3IgTGlzdEJveERpcmVjdG9yeSgpLgotCQotCSogW2xvYWRlci9tb2R1bGUuY10gW2lmMTYzMi9rZXJuZWwuc3BlY10KLQlNYWtlIEdldE1vZHVsZUhhbmRsZSgpIGFjY2VwdCBpbnN0YW5jZSBoYW5kbGVzIGFzIHBhcmFtZXRlci4KLQotICAgICAgICAqIFtpZjE2MzIvcmVsYXkuY10gW2xvYWRlci90YXNrLmNdCi0JUHV0IGEgbWFnaWMgY29va2llIGF0IHRoZSBib3R0b20gb2YgdGhlIDMyIGJpdCBzdGFjaywgYW5kIGNoZWNrIG9uCi0JZWFjaCByZXR1cm4gZnJvbSBhIDMyIGJpdCBmdW5jdGlvbiB3aGV0aGVyIGl0J3Mgc3RpbGwgdGhlcmUuIENvbXBsYWluCi0JaWYgaXQncyBub3QuCi0KLSAgICAgICAgKiBbaWYxNjMyL3VzZXIuc3BlY10KLQlXcm9uZyBlbnRyeSBmb3IgQ2xvc2VEcml2ZXIoKS4KLQotCSogW21pc2MvZG9zX2ZzLmNdIFtsb2FkZXIvdGFzay5jXSBbaW5jbHVkZS9kb3NfZnMuaF0gW21pc2MvZmlsZS5jXQotCVttaXNjZW11L2ludDIxLmNdCi0JTGFyZ2UgcGFydHMgb2YgZG9zX2ZzLmMgc2ltcGxpZmllZC4gQ2hhbmdlZCBpdCB0byB1c2Ugb25lCi0JY3VycmVudCBkcml2ZS9kaXJlY3RvcnkgcGVyIHRhc2ssIHdoaWNoIGlzIHNldCB0byB0aGUgbW9kdWxlIHBhdGggb24KLQl0YXNrIGNyZWF0aW9uLgotCVByZXZlbnQgQ29yZWxQYWludCBmcm9tIGNsb3Npbmcgc3RkaW4uCi0Jb3BlbigpIHdpdGggT19DUkVBVCBzZXQgbXVzdCBiZSBwYXNzZWQgdGhyZWUgcGFyYW1ldGVycy4KLQlET1MgRmluZEZpcnN0KCkvRmluZE5leHQoKSBjb3VsZCBjcmFzaCB3aGVuIEZBX0xBQkVMIHdhcyBzZXQuIEZpeGVkLAotCWl0J3MgaW4gRE9TX3JlYWRkaXIoKSBub3cuCi0KLQkqIFttaXNjL3Byb2ZpbGUuY10KLQlTb21lIGJhZGx5IHdyaXR0ZW4gc29mdHdhcmUgKExvdHVzIEZyZWVsYW5jZSBHcmFwaGljcykgcGFzc2VzIGEgYm9ndXMKLQlzaXplIHBhcmFtZXRlciB0aGF0IGNhdXNlZCBXaW5lIHRvIHdyaXRlIG9mZiB0aGUgZW5kIG9mIGEgc2VnbWVudC4KLQlGaXhlZC4gKEl0J3MgcHJvYmFibHkgdG9vIHBhcmFub2lkIG5vdy4pCi0JCi0JKiBbbXVsdGltZWRpYS9tbXN5c3RlbS5jXSBbbXVsdGltZWRpYS90aW1lLmNdIFttdWx0aW1lZGlhL2pveXN0aWNrLmNdCi0JW211bHRpbWVkaWEvSW1ha2VmaWxlXSBbaWYxNjMyL3dpbnByb2NzLnNwZWNdCi0JMTYgYml0IGVudHJ5IHBvaW50IGZvciBNTVN5c1RpbWVDYWxsYmFjay4KLQlTcGxpdCBvZmYgdGltZS5jIGFuZCBqb3lzdGljay5jIGZyb20gbW1zeXN0ZW0uYy4KLQkKLQkqIFtvYmplY3RzL2RpYi5jXQotCUdldERJQml0cygpOiBjYWxsIFhHZXRJbWFnZSgpIHZpYSBDYWxsVG8zMl9MYXJnZVN0YWNrLgotCi0gICAgICAgICogW3dpbmRvd3MvY3Vyc29yLmNdCi0JRGVzdHJveUN1cnNvcigpOiBkbyBub3RoaW5nIGZvciBidWlsdGluIGN1cnNvcnMuCi0JCi0JKiBbd2luZG93cy9tZGkuY10KLQlIYWxmIG9mIFdNX01ESVNFVE1FTlUgaW1wbGVtZW50ZWQuCi0JCi0JKiBbd2luZG93cy93aW4uY10KLQlFbnVtV2luZG93cygpIGFuZCBFbnVtVGFza1dpbmRvd3MoKSBuZXZlciBlbnVtZXJhdGVkIGFueSB3aW5kb3dzLgotCUZpeGVkLgotCi0JKiBbd2luZG93cy8qLmNdCi0JRml4ZWQgR2V0UGFyZW50KCkgdG8gcmV0dXJuIGNvcnJlY3QgdmFsdWVzIGZvciBvd25lZCB3aW5kb3dzLgotCi0JKiBbd2luZG93cy9tZXNzYWdlLmNdCi0JRG9uJ3QgdHJ5IHRvIGFjdGl2YXRlIGRpc2FibGVkIHRvcC1sZXZlbCB3aW5kb3dzLgotCi0gICAgICAgICogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCi0JV29yayBhcm91bmQgYSBidWcgaW4gZ2NjLTIuNy4wLgotCQotCSogW3Rvb2xzL2J1aWxkLmNdIFtpbmNsdWRlL3N0YWNrZnJhbWUuaF0gW21lbW9yeS9nbG9iYWwuY10gCi0JW2xvYWRlci90YXNrLmNdIFttZW1vcnkvc2VsZWN0b3IuY10KLQlTb21lIFZpc3VhbCBCYXNpYyBwcm9ncmFtcyAoYW5kIHBvc3NpYmx5IG90aGVycywgdG9vKSBleHBlY3QgRVMgdG8gYmUgCi0JcHJlc2VydmVkIGJ5IGEgY2FsbCB0byBhbiBBUEkgZnVuY3Rpb24sIHNvIHdlIGhhdmUgdG8gc2F2ZSBpdC4KLQlJbiBHbG9iYWxGcmVlKCkgYW5kIEZyZWVTZWxlY3RvcigpLCB3ZSBtdXN0IGNsZWFyIENVUlJFTlRfU1RBQ0sxNi0+ZXMgCi0JdG8gcHJldmVudCBzZWdmYXVsdHMgaWYgRVMgY29udGFpbmVkIHRoZSBzZWxlY3RvciB0byBiZSBmcmVlZC4KLQotU3VuIEp1bCAgOSAyMDoyMToyMCAxOTk1ICBKb24gVG9tYnMgIDxqb25AZ3RleDAyLnVzLmVzPgotCi0JKiBbKi8qXQotCUFkZGVkIG1pc3NpbmcgcHJvdG90eXBlcyB0byBoZWFkZXIgZmlsZXMgYW5kIHJlbGV2YW50IGluY2x1ZGVzCi0JdG8gcmVkdWNlIGNvbXBpbGUgdGltZSB3YXJuaW5ncy4KLQotU3VuIEp1bCAgOSAxODozMjo1NiAxOTk1ICBNaWNoYWVsIFBhdHJhICA8bWlja3lAbWFyaWUucGh5c2lrLnR1LWJlcmxpbi5kZT4KLQotCSogW2NvbmZpZ3VyZS5pbl0gW2luY2x1ZGUvY29uZmlnLmhdIFsqL01ha2VmaWxlLmluXQotCU5ldyBjb25maWd1cmF0aW9uIHNjaGVtZSBiYXNlZCBvbiBhdXRvY29uZi4KLQotU2F0IEp1bCAgOCAxNDoxMjo0NSAxOTk1ICBNb3J0ZW4gV2VsaW5kZXIgIDx0ZXJyYStAY3MuY211LmVkdT4KLQotCSogW21pc2NlbXUvaW9wb3J0cy5jXQotCVJldmFtcCB0byBoYXZlIG9ubHkgb25lIGluLSBhbmQgb25lIG91dC0gdmFyaWFudCwgYm90aCByZWFsbHkKLSAJaW1wbGVtZW50ZWQuCi0KLQkqIFttaXNjZW11L2luc3RyLmNdCi0JSU5TVFJfRW11bGF0ZUluc3RydWN0aW9uOiBVc2UgbmV3IGlvcG9ydCBpbnRlcmZhY2UuICBJbXBsZW1lbnQKLSAJc3RyaW5nIGlvLiAgQ29ycmVjdCBpbnN0cnVjdGlvbiBwb2ludGVyIGZvciAzMi1iaXQgY29kZS4KLQotCSogW2luY2x1ZGUvbWlzY2VtdS5oXQotCVVwZGF0ZSBwb3J0IGZ1bmN0aW9uIHByb3RvdHlwZXMuCi0KLQkqIFtpbmNsdWRlL3JlZ2lzdGVycy5oXQotCURlZmluZWQgRlMgYW5kIEdTLgotCi1TYXQgSnVsICA4IDEzOjM4OjU0IDE5OTUgIEhhbnMgZGUgR3JhYWZmICA8Z3JhYWZmQHR3aTcyLnR3aS50dWRlbGZ0Lm5sPgotCi0JKiBbbWlzYy9kb3NfZnMuY10KLQlDaG9wT2ZmU2xhc2goKTogQSBwYXRoIGNvbnNpc3Rpbmcgb2ZmIGEgc2luZ2xlIHNsYXNoIGlzIGxlZnQKLSAJaW50YWN0LCBhbmQgbXVsdGlwbGUgc2xhc2hlcyBhcmUgYWxsIHJlbW92ZWQuCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVdlZCBKdWwgIDUgMTk6MDY6MzUgMTk5NSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAc3Vuc2l0ZS51bmMuZWR1PgotCi0JKiBbY29udHJvbHMvc2Nyb2xsLmNdCi0JRml4ZWQgZHJhd2luZyBidWcgdGhhdCBjYXVzZWQgcGFydCBvZiBhIG5vbi1jbGllbnQgc2Nyb2xsIGJhcgotCXRvIGJlIHBhaW50ZWQgZXZlbiB3aGVuIHRoZSBzY3JvbGwtYmFyIHdhcyBoaWRkZW4uCi0KLQkqIFtkZWJ1Z2dlci9icmVhay5jXSBbZGVidWdnZXIvZGJnLnldCi0JUmV3cm90ZSBicmVha3BvaW50IGhhbmRsaW5nIHRvIHdvcmsgaW4gMTYtYml0IG1vZGUuCi0JSW1wbGVtZW50ZWQgc2luZ2xlLXN0ZXBwaW5nICgnc3RlcCcgYW5kICduZXh0JyBpbnN0cnVjdGlvbnMpLgotCi0JKiBbZGVidWdnZXIvZGVidWcubF0KLQlGb3JtYXQgc3BlY2lmaWVyIGlzIG5vdyBhIHNlcGFyYXRlIHRva2VuLgotCUVudGVyaW5nIGFuIGVtcHR5IGxpbmUgYXQgdGhlIGRlYnVnZ2VyIHByb21wdCBjYXVzZXMgdGhlIHByZXZpb3VzCi0JY29tbWFuZCB0byBiZSByZXBlYXRlZCwgbGlrZSB1bmRlciBnZGIuCi0JCi0JKiBbZGVidWdnZXIvZGVidWcubF0gW2RlYnVnZ2VyL3JlZ2lzdGVycy5jXQotCURpZmZlcmVudGlhdGUgMTYtYml0IGFuZCAzMi1iaXQgcmVnaXN0ZXJzIHdpdGhvdXQgdGFraW5nIGN1cnJlbnQKLQltb2RlIGludG8gYWNjb3VudCAoJGVheCBpcyBhbHdheXMgMzItYml0LCAkYXggYWx3YXlzIDE2LWJpdCkuCi0KLQkqIFtkZWJ1Z2dlci9zdGFjay5jXQotCUZpeGVkIHN0YWNrIGluZm9ybWF0aW9uIHJvdXRpbmVzIHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiAxNi1iaXQKLQlhbmQgMzItYml0IHN0YWNrcy4KLQotCSogW2xvYWRlci90YXNrLmNdCi0JT3B0aW9uIC1kZWJ1ZyBub3cgc2V0cyBhIGJyZWFrcG9pbnQgYXQgdGhlIGZpcnN0IGluc3RydWN0aW9uIG9mCi0JZXZlcnkgbG9hZGVkIHRhc2suCi0KLQkqIFttaXNjZW11L2luc3RyLmNdCi0JQWRkZWQgaGFuZGxpbmcgb2YgbG9jaywgcmVwZSBhbmQgcmVwbmUgcHJlZml4ZXMuCi0KLQkqIFtvYmplY3RzL2RpYi5jXQotCUNoYW5nZWQgU3RyZXRjaERJQml0cygpIHRvIGRvIHRoZSBjb3JyZWN0IHRoaW5nLCBldmVuIGlmIGl0J3Mgc3RpbGwKLQlub3QgcmVhbGx5IG9wdGltYWwuCi0KLQkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCi0JRml4ZXMgaW4gUm91bmRSZWN0KCksIHRoYW5rcyB0byBCYWJhayBNYXNhbGVoZGFuLgotCi0JKiBbd2luZG93cy9tZXNzYWdlLmNdCi0JVHJpZWQgdG8gZml4IG1vdXNlIGV2ZW50IGhhbmRsaW5nIHdpdGggcmVzcGVjdCB0byBkaXNhYmxlZAotCXdpbmRvd3MuCi0KLQkqIFt3aW5kb3dzL3BhaW50aW5nLmNdCi0JQ2xlYXIgV0lOX05FRURTX05DUEFJTlQgZmxhZyBiZWZvcmUgc2VuZGluZyBXTV9OQ1BBSU5UIHRvIGF2b2lkCi0JaW5maW5pdGUgbG9vcHMuCi0KLQkqIFt3aW5kb3dzL3dpbi5jXQotCUZpeGVkIElzV2luZG93VmlzaWJsZSgpIHRvIHJldHVybiBGQUxTRSB3aGVuIG9uZSBvZiB0aGUgcGFyZW50Ci0Jd2luZG93cyBpcyBoaWRkZW4uCi0KLVNhdCBKdWwgIDEgMjI6MDg6MjEgMTk5NSAgIE1hcnRpbiB2b24gTG9ld2lzIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+Ci0KLQkqIFtpZjE2MzIvY29tcG9iai5zcGVjXVttaXNjL2NvbXBvYmouY10KLQlDb0dldE1hbGxvYzogTmV3IGZ1bmN0aW9uCi0JQWRkZWQgcmVsYXkgZW50cmllcyBmb3IgQ09NUE9CSiBvcmRpbmFscyBhYm92ZSAxMDAKLQlDb0luaXRpYWxpemU6IENoYW5nZWQgcGFyYW1ldGVyIHRvIERXT1JECi0KLQkqIFtpZjE2MzIvb2xlMi5zcGVjXQotCUV4cG9ydGVkIGltcGxlbWVudGF0aW9uIG9mIE9sZUJ1aWxkVmVyc2lvbgotCi0JKiBbaWYxNjMyL29sZTJkaXNwLnNwZWNdW21pc2Mvb2xlMmRpc3AuY11bbWlzYy9JbWFrZWZpbGVdCi0Jb2xlMmRpc3AuYzogTmV3IGZpbGUKLQlTeXNBbGxvY1N0cmluZywgU3lzUmVhbGxvY1N0cmluZywgU3lzQWxsb2NTdHJpbmdMZW4sCi0JU3lzUmVBbGxvY1N0cmluZ0xlbiwgU3lzRnJlZVN0cmluZywgU3lzU3RyaW5nTGVuOiBuZXcgZnVuY3Rpb25zCi0KLQkqIFtpZjE2MzIvb2xlMm5scy5zcGVjXVtpbmNsdWRlL3dpbm5scy5oXVttaXNjL29sZTJubHMuY10KLQlDb21wYXJlU3RyaW5nQTogTmV3IGZ1bmN0aW9uCi0KLVRodSBKdW4gMjkgMTk6NDI6MDIgMTk5NSAgTWFyY3VzIE1laXNzbmVyICA8bXNtZWlzc25AZmF1aTAxLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgotCSogW29iamVjdHMvZm9udC5jXSBbaWYxNjMyL2dkaS5zcGVjXQotCU5ldyBzdHVicyBmb3IgQ3JlYXRlU2NhbGFibGVGb250UmVzb3VyY2UsIEdldEdseXBoT3V0bGluZS4KLQotVGh1IEp1biAyOSAxMzo0NzowOCBHTVQgMTk5NSAgR/ZyYW4gVGh5bmkgIChnb3JhbkBub3Jyc2tlbi5iaWxkYmFzZW4uc2UpCi0KLQkqIFttaXNjL2NvbW1kbGcuY10KLQlFeHRlbnNpdmUgY2hhbmdlcyBhbmQgYnVnIGZpeGVzIHRvIEZpbGVEaWFsb2cgaGFuZGxpbmcsCi0gICAgICAgIGJlaGF2ZXMgbW9yZSBsaWtlIG5hdGl2ZSBXaW5kb3dzLgotCi1XZWQgSnVuIDI4IDEzOjA0OjQ0IDE5OTUgICBCZXJuZCBTY2htaWR0IDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KLQotICAgICAgICAqIFtjb250cm9scy9saXN0Ym94LmNdIFtjb250cm9scy9jb21iby5jXQotCVNvbWUgbWlub3Igb3B0aW1pemF0aW9ucy4KLQkKLQkqIFttZW1vcnkvbG9jYWwuY10KLQlMT0NBTF9GaW5kRnJlZUJsb2NrKCk6IE5ldmVyIHVzZSB0aGUgbGFzdCBvbmUuCi0JCi0JKiBbbWVtb3J5L2dsb2JhbC5jXQotCUdsb2JhbFJlQWxsb2MoKTogR01FTV9NT0RJRlkgbXVzdCBub3QgYmUgaWdub3JlZCB3aGVuIHNpemU9PTAuCi0JCi0JKiBbbWlzYy9maWxlLmNdCi0JcmVhZCgpIHJldHVybnMgYW4gZXJyb3Igd2hlbiBsZW5ndGg9PTAuIFRoaXMgaXMgbm90IHdoYXQgV2luZG93cwotCXByb2dyYW1zIGV4cGVjdCwgc28gcGF5IGF0dGVudGlvbiB0byB0aGlzIGluIF9scmVhZCgpLiBDaGFuZ2VkIHRoaXMKLQlpbiBfbHdyaXRlKCksIF9ocmVhZCgpLCBfaHdyaXRlKCksIHRvby4KLQotCSogW2xvYWRlci9yZXNvdXJjZS5jXQotCUxvYWRJY29uKCk6IElnbm9yZSBiaWgtPmJpU2l6ZUltYWdlLCBzb21lIGljb25zIGhhdmUgd3JvbmcgdmFsdWVzIGluCi0JdGhlcmUuCi0JCi0JKiBbaWYxNjMyL3NoZWxsLnNwZWNdIFttaXNjL3NoZWxsLmNdCi0JV3Jvbmcgc3BlYyBmaWxlIGVudHJpZXMgY2F1c2VkIGhhdm9jOiBIS0VZIGhhcyAzMiBiaXQsIG5vdCAxNi4KLQlBY2NlcHQgc29tZSBtb3JlIGNvbWJpbmF0aW9ucyBvZiBwYXJhbWV0ZXJzIGluIHRoZSBSZWcuLigpIGZ1bmN0aW9ucy4KLQkKLQkqIFtpZjE2MzIvdG9vbGhlbHAuc3BlY10KLQlNYWtlIEludGVycnVwdFJlZ2lzdGVyKCkgYW5kIEludGVycnVwdFVucmVnaXN0ZXIoKSByZXR1cm4gZmFsc2UuCi0KLQkqIFt3aW5kb3dzL2hvb2suY10KLQlDYWxsTmV4dEhvb2tFeCgpIHVzZWQgdG8gY3Jhc2ggd2hlbiBjYWxsZWQgd2l0aCBhIG51bGwgaGhvb2suIEZpeGVkLgotCi1XZWQgSnVuIDI4IDEwOjE0OjM0IDE5OTUgIE1hcnRpbiB2b24gTG9ld2lzICA8bWFydGluQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgotCi0JKiBbaW5jbHVkZS9uZWV4ZS5oXVtsb2FkZXIvbmVfaW1hZ2UuY10KLQlORV9Mb2FkU2VnbWVudDogRGV0ZWN0IGl0ZXJhdGVkIHNlZ21lbnRzCi0KLQkqIFttaXNjL29sZTJubHMuY10KLQlMT0NBTEVfU0xPTkdEQVRFOiBmaXhlZCB0eXBvCi0KLQkqIFttaXNjZW11L2ludDVjLmNdCi0JUmVvcmRlcmVkIGluY2x1ZGUgZmlsZXMgdG8gYXZvaWQgY29uZmxpY3RzIHdpdGggTGludXggbGliYy41LjEKLQotCSogW3JjL3dpbmVyYy5jXQotCUFkZGVkIC1iIG9wdGlvbiB0byBwcm9jZXNzIGJpbmFyeSByZXNvdXJjZSBmaWxlcyBpbnRvIEMgYXJyYXlzCi0KLQkqIFtpbmNsdWRlL2NhbGxiYWNrLmhdCi0JQ2FsbFduZFByb2M6IEFkZGVkIGR1bW15IGRzIHBhcmFtZXRlciBmb3IgbGlid2luZQotCi0JKiBbaW5jbHVkZS9nZGkuaF1baW5jbHVkZS91c2VyLmhdCi0JVVNFUl9IRUFQX0FMTE9DLCBHRElfSEVBUF9BTExPQzogZHJvcHBlZCBmbGFncyBwYXJhbWV0ZXIKLQotCSogW2luY2x1ZGUvbGR0LmhdW2luY2x1ZGUvc3RhY2tmcmFtZS5oXQotCWRlZmluZWQgc2VnbWVudCBjb252ZXJzaW9uIG1hY3JvcyBmb3IgbGlid2luZQotCi0JKiBbbWlzYy9hdG9tLmNdCi0JRGVmaW5lZCBVU0VSX0hlYXBTZWwgZm9yIGxpYndpbmUKLQotCSogW21pc2MvbWFpbi5jXQotCURpc2FibGUgLWRsbCBvcHRpb24gZm9yIGxpYndpbmUKLQotCSogW21pc2MvdXNlci5jXQotCXJlbW92ZWQgR2V0RnJlZVN5c3RlbVJlc291cmNlcywgU3lzdGVtSGVhcEluZm8gZnJvbSBsaWJ3aW5lIGZvciBub3cKLQotCSogW3Rvb2xraXQvaGVhcC5jXQotCWZpeGVkIExvY2FsTG9jayBwcm90b3R5cGUKLQotCSogW3Rvb2xraXQvc3VwLmNdCi0Jc3luYydlZCBsb2FkX216X2hlYWRlciwgbG9hZF9uZV9oZWFkZXIgd2l0aCBzdHJ1Y3R1cmVzCi0KLQkqIFt0b29sa2l0L3dpbm1haW4uY10KLQlEaXNhYmxlZCByZXNvdXJjZSBETExzIGZvciBsaWJ3aW5lIGZvciBub3cKLQotTW9uIEp1biAyNiAxOTozMDoyNCAxOTk1ICBIYW5zIGRlIEdyYWFmZiAgKGdyYWFmZkB0d2k3Mi50d2kudHVkZWxmdC5ubCkKLQotCSogW21pc2MvbWFpbi5jXQotCUZpeGVkIC1lbmhhbmNlZCBvcHRpb24gdG8gcmVwb3J0IGEgMzg2IENQVSBpbnN0ZWFkIG9mIGEgMjg2LgotCi1GcmkgSnVuIDIzIDIzOjE4OjI1IDE5OTUgIE1hcmN1cyBNZWlzc25lciAgPG1zbWVpc3NuQGZhdWkwMS5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KLQotCSogW21pc2MvZG9zX2ZzLmNdCi0JUmVtb3ZlIG1heGltdW0gb3BlbiBkb3NkaXJlbnQgbGltaXQgKGZpeGluZyB0aGUgd2luZmlsZS5leGUKLSAJcHJvYmxlbSkgYnkgdXNpbmcgdGVsbGRpcigpL3NlZWtkaXIoKS4KLQkKLUZyaSBKdW4gMjMgMTM6NDI6MjUgMTk5NSAgSGFucyBkZSBHcmFhZmYgIChncmFhZmZAdHdpNzIudHdpLnR1ZGVsZnQubmwpCi0KLQkqIFttaXNjL3Byb2ZpbGUuY10KLQlGaXhlZCBwcm9ibGVtIHBhcnNpbmcgZW1wdHkgbGluZXMgd2l0aGluIHNlY3Rpb25zIGluIC5pbmkgZmlsZXMuCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLU1vbiBKdW4gMTkgMjA6Mjk6NTAgMTk5NSAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAc3Vuc2l0ZS51bmMuZWR1KQotCi0JKiBbZGVidWdnZXIvKi5jXQotCU1vZGlmaWVkIGRlYnVnZ2VyIHRvIHVzZSBzZWdtZW50ZWQgcG9pbnRlcnMgZXZlcnl3aGVyZS4KLQotCSogW2lmMTYzMi9zaGVsbC5zcGVjXSBbaWYxNjMyL3NvdW5kLnNwZWNdIFtpZjE2MzIvdXNlci5zcGVjXQotCURlY2xhcmVkIGFsbCBmdW5jdGlvbnMgdGhhdCByZXR1cm4gb25seSAxNi1iaXQgYXMgJ3Bhc2NhbDE2Jy4KLQotCSogW2luY2x1ZGUvbGR0LmhdIFttZW1vcnkvbGR0LmNdCi0JRXhwb3J0IExEVF9FbnRyeVRvQnl0ZXMgKG5ldykgYW5kIExEVF9CeXRlc1RvRW50cnkgZm9yIERQTUkuCi0JTWFpbnRhaW4gYSBjb3B5IG9mIHRoZSBzZWxlY3RvciBmbGFncywgcmVtb3ZpbmcgdGhlIG5lZWQgdG8gbWFrZSBhCi0Jc3lzdGVtIGNhbGwgdG8gcmV0cmlldmUgYW4gTERUIGVudHJ5LgotCi0JKiBbbG9hZGVyL21vZHVsZS5jXQotCUZpeGVkIGJ1ZyB3aXRoIG1vZHVsZSBmaWxlIGhhbmRsZSBjYWNoZS4KLQotCSogW2xvYWRlci9uZV9yZXNvdXJjZS5jXQotCUZpeGVkIGZpbGUgbmFtZSBidWcgaW4gTkVfQWNjZXNzUmVzb3VyY2UoKS4KLQotCSogW2xvYWRlci9yZXNvdXJjZS5jXQotCUZpeGVkIGJ1ZyBpbiBMb2FkSWNvbigpIHRoYXQgY2F1c2VkIHdyb25nIGNvbG9ycyB0byBiZSB1c2VkIGZvcgotCXRoZSBpY29uIG1hc2suCi0KLQkqIFtsb2FkZXIvc2lnbmFsLmNdCi0JTW92ZWQgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIHRvIG1pc2NlbXUvaW5zdHIuYy4KLQotCSogW21pc2MvZG9zX2ZzLmNdIFttaXNjZW11L2ludDIxLmNdCi0JTG90cyBvZiBzbWFsbCBmaXhlcywgdGhhbmtzIHRvIE1vcnRlbiBXZWxpbmRlci4KLQotCSogW21pc2NlbXUvZHBtaS5jXQotCU1vcmUgY29tcGxldGUgRFBNSSBlbXVsYXRpb24uCi0KLQkqIFttaXNjZW11L2luc3RyLmNdCi0JQWRkZWQgc3VwcG9ydCBmb3IgcHJlZml4ZXMgaW4gaW5zdHJ1Y3Rpb25zIHRvIGVtdWxhdGUuCi0KLQkqIFttaXNjZW11L2ludDJmLmNdCi0JVXNlIHJlZ2lzdGVyIG1hY3JvcyBpbnN0ZWFkIG9mIGRlc3Ryb3lpbmcgdGhlIGhpZ2ggcGFydCBvZiAzMi1iaXQKLQlyZWdpc3RlcnMuCi0KLQkqIFtvYmplY3RzL2RjLmNdCi0JRml4ZWQgYnVnIGluIEdldERDU3RhdGUoKSB0aGF0IGZhaWxlZCB0byBjbGVhciB0aGUgbmV3IERDLgotCi0JKiBbcmMvc3lzcmVzLnJjXQotCVJlbW92ZWQgZGlhbG9ncyAxMSBhbmQgMTIgdGhhdCB3ZXJlIG5ldmVyIHVzZWQuCi0KLQkqIFt0b29scy9idWlsZC5jXQotCSdwYXNjYWwxNicgZ2VuZXJhdGVkIGZ1bmN0aW9ucyBkaWQgbm90IHNhdmUgJWR4LgotCVJlbW92ZWQgdXNlIG9mICVmcyB0byBhY2Nlc3MgdGhlIHN0YWNrLgotCSVkcyBpcyBubyBsb25nZXIgaW5pdGlhbGl6ZWQgYmVmb3JlIGNhbGxpbmcgYSAxNi1iaXQgcm91dGluZS4KLQotCSogW3dpbmRvd3MvZGVmd25kLmNdCi0JQWNjZXB0IGEgTlVMTCBwb2ludGVyIGFzIHdpbmRvdyB0aXRsZS4KLQotCSogW3dpbmRvd3MvbWRpLmNdCi0JTURJQ2FzY2FkZTogc2tpcCBpY29uaWMgd2luZG93cy4KLQlJbXBsZW1lbnRlZCBDYWxjQ2hpbGRTY3JvbGwoKS4KLQkKLQkqIFt3aW5kb3dzL3V0aWxpdHkuY10KLQlGaXhlZCBNdWxEaXYoKSBmb3IgaWxsZWdhbCB2YWx1ZXMuCi0KLQkqIFt3aW5kb3dzL3dpbi5jXQotCUZpeGVkIFggZXJyb3IgaW4gQ3JlYXRlV2luZG93RXgoKSB3aGVuIFdNX05DQ0FMQ1NJWkUgcmV0dXJuZWQKLQlhIHplcm8gd2lkdGggb3IgaGVpZ2h0LgotCi1TdW4gSnVuIDE4IDIyOjIyOjMwIE1FVCBEU1QgMTk5NSAgRm9ucyBCb3RtYW4gIChib3RtYW5AaW50ZXIubmwubmV0KQotCi0JKiBbY29udHJvbHMvZWRpdC5jXQotCUZpeGVkICJ1bmluaXRhbGl6ZWQiIG1lc3NhZ2Ugd2hpY2ggLVdhbGwgY291bGRudCBzZWUgdG8gYmUgb2sKLQlpbiBFRElUX1dyaXRlVGV4dC4KLQotCSogW2luY2x1ZGUvZGVidWcuaF0KLQlBZGRlZCBkZWZpbmUgZm9yIGV4dHJhIGNoZWNrcyBpbiBBUEkgZGVmaW5pdGlvbnMgZHVyaW5nIGRlYnVnZ2luZy4KLQotCSogW2xvYWRlci9uZV9pbWFnZS5jXQotCUFkZGVkIG5ld2xpbmUgaW4gTkVfRml4dXBQcm9sb2dzIHRvIGF2b2lkIGxvbmcgbGluZXMuCi0KLQkqIFttaXNjL2Rvc19mcy5jXQotCUFkZGVkIGV4dHJhIHNhZmV0eSBjaGVjayBpbiBET1NfVmFsaWREcml2ZS4KLQotCSogW21pc2MvZXhlYy5jXQotCUZpeGVkIGRlZmluaXRpb24gb2YgRXhpdFdpbmRvd3MuCi0JCi1TdW4gSnVuIDE4IDIxOjE2OjA4IDE5OTUgICBCZXJuZCBTY2htaWR0IDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KLQotCSogW2NvbnRyb2xzL2VkaXQuY10KLQlTb21lIGZpeGVzLCBtb3N0bHkgZm9yIG1lbW9yeSBtYW5hZ2VtZW50LCBidXQgYWxzbyBmb3IgdGV4dCBzZWxlY3Rpb24KLQlhbmQgdGFiIHBvc3RpdGlvbnMuIEdlbmVyYWwgY2xlYW51cC4gTm90ZXBhZC5leGUgbm93IHdvcmtzLgotCi0JKiBbY29udHJvbHMvY29tYm8uY10KLQlGaXg6IHRoZSBod25kIGZpZWxkIG9mIHRoZSBEUkFXSVRFTVNUUlVDVCBzaG91bGQgYWx3YXlzIGJlIHRoYXQgb2YKLQl0aGUgY29tYm8gYm94LCBub3QgdGhlIENvbWJvTEJveCB0aGF0IGJlbG9uZ3MgdG8gaXQuCi0KLQkqIFtjb250cm9scy9saXN0Ym94LmNdCi0JSGFuZGxlIGl0ZW1JRCBmaWVsZCBjb3JyZWN0bHkgdGhyb3VnaG91dC4KLQotCSogW21lbW9yeS9sb2NhbC5jXQotCUltcGxlbWVudGVkIGZsYWcgTE1FTV9aRVJPSU5JVC4KLQlMb2NhbFJlQWxsb2MoKSBjb3VsZCB0cmFzaCB0aGUgaGVhcC4gRml4ZWQuCi0KLQkqIFtvYmplY3RzL2ZvbnQuY10KLQlGT05UX01hdGNoRm9udCgpOiBkb24ndCBnZXQgY29uZnVzZWQgYnkgbmVnYXRpdmUgd2lkdGhzLgotCUZpeGVkIGEgc2VnZmF1bHQgaW4gRW51bUZvbnRzKCkuCi0KLQkqIFtvYmplY3RzL3RleHQuY10KLQlEcmF3VGV4dCgpOiBEVF9DQUxDUkVDVCBpbXBsaWVzIERUX05PQ0xJUC4KLQotCSogW29iamVjdHMvZGN2YWx1ZXMuY10KLQlNQUtFTE9ORyB3YXMgdXNlZCB3aXRoIGJhZCBwYXJhbWV0ZXJzIGluIERDX0dFVF9YX1kuCi0KLQkqIFt3aW5kb3dzL2RpYWxvZy5jXQotCURvbid0IHNob3cgdGhlIGRpYWxvZyBpZiBXU19WSVNJQkxFIGlzbid0IHNldCBpbiB0aGUgdGVtcGxhdGUuCi0KLQkqIFt3aW5kb3dzL3V0aWxpdHkuY10KLQlVVElMSVRZX2NvbnZlcnRBcmdzKCk6IE5ldmVyIHBhc3MgYW4gZXhwcmVzc2lvbiBjb250YWluaW5nICsrIGludG8gYQotCW1hY3JvLi4uCi0KLQkqIFt3aW5kb3dzL3dpbi5jXQotCVNldFBhcmVudCgpIHNob3VsZCB1bmxpbmsgdGhlIHdpbmRvdyBiZWZvcmUgY2hhbmdpbmcgdGhlIHBhcmVudC4KLQotCSogW3dpbmRvd3MvbWVzc2FnZS5jXQotCURvbid0IGNhbGwgdGltZXIgZnVuY3Rpb25zIHZpYSBDYWxsV2luZG93UHJvYygpLCBzaW5jZSBpdCBjaGVja3MKLQl3aGV0aGVyIGh3bmQ9PTAgYW5kIGRvZXMgbm90IGNhbGwgdGhlIGZ1bmN0aW9uIGluIHRoYXQgY2FzZS4KLQotCSogW21pc2NlbXUvaW5zdHIuY10KLQlJZ25vcmUgaW50ZXJydXB0IDB4M0QsIGZvciBWQlJVTjMwMC5ETEwuCi0KLQkqIFttaXNjL2NvbW1kbGcuY10KLQlEb24ndCByZWx5IG9uIHRoZSBpdGVtRGF0YSBmaWVsZCBvZiB0aGUgRFJBV0lURU1TVFJVQ1QgdG8gY29udGFpbiBhCi0JcG9pbnRlciB0byB0aGUgaXRlbSB0ZXh0LgotCi0JKiBbaWYxNjMyL3JlbGF5LmNdCi0JRGlzYWJsZSBPTEUgYW5kIERERU1MIERMTHMgYnkgZGVmYXVsdCwgc2luY2UgdGhleSBjb250YWluIG5vdGhpbmcgYnV0Ci0Jc3R1YnMgYW55d2F5LiBTSEVMTCwgQ09NTURMRyBhbmQgV0lOODdFTSBhcmUgbGVmdCBlbmFibGVkLCBhbHRob3VnaAotCXNvbWUgcHJvZ3JhbXMgbWF5IHdvcmsgYmV0dGVyIHdpdGhvdXQgdGhlbS4KLQkKLQkqIFttdWx0aW1lZGlhLyouY10gW2luY2x1ZGUvbXVsdGltZWRpYS5oXSBbaW5jbHVkZS9kcml2ZXIuaF0KLQlCZWd1biBjbGVhbmluZyB0aGluZ3MgdXAgYSBsaXR0bGUuIFJlcGxhY2VkIHByaW50ZnMgd2l0aCBkcHJpbnRmXwotCW1hY3JvcywgbWFkZSBmdW5jdGlvbnMgc3RhdGljIHdoZXJlIHBvc3NpYmxlLCBhbmQgc29tZSBvdGhlciBtaW5vcgotCWNoYW5nZXMuCi0KLVN1biBKdW4gMTEgMjM6MTk6MTAgMTk5NSAgTWFydGluIHZvbiBMb2V3aXMgIDxtYXJ0aW5AaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+Ci0KLQkqIFtkZWJ1Z2dlci9kYmcueV1bZGVidWdnZXIvZGJnLmxdCi0JUmVtb3ZlZCBzcGVjaWFsIGhhbmRsaW5nIGZvciBGSUxFX0lERU5USUZFUiwgYmVjYXVzZSBpdCBjYXVzZWQKLQlwcm9ibGVtcyB3aXRoIHgvPGZvcm1hdD4gc3RhdGVtZW50cy4KLQotCSogW2RlYnVnZ2VyL2luZm8uY10KLQlVc2UgU0NfRVNQIGluc3RlYWQgb2YgU0NfRUlQIGZvciBzdGFjayBkdW1wLgotCi0JKiBbbWlzYy9jb21wb2JqLmNdW2lmMTYzMi9jb21wb2JqLnNwZWNdCi0JQ29CdWlsZFZlcnNpb24sIENvSW5pdGlhbGl6ZSwgQ29VbmluaXRpYWxpemU6IG5ldyBmdW5jdGlvbnMKLQotCSogW21pc2Mvb2xlMi5jXVtpZjE2MzIvb2xlMi5zcGVjXVttaXNjL0ltYWtlZmlsZV1baW5jbHVkZS9vbGUyLmhdCi0JTmV3IGZpbGVzIG9sZTIuYywgb2xlMi5oCi0JT2xlQnVpbGRWZXJzaW9uLCBPbGVJbml0aWFsaXplLCBPbGVVbmluaXRpYWxpemU6IG5ldyBmdW5jdGlvbnMKLQotCSogW2lmMTYzMi9vbGUyZGlzcC5zcGVjXQotCUFkZGVkIG1pc3Npbmcgb3JkaW5hbHMgYWJvdmUgMTA5Ci0KLQkqIFttaXNjL29sZTJubHMuY11baWYxNjMyL29sZTJubHMuc3BlY11baW5jbHVkZS93aW5ubHMuaF0KLQlOZXcgZmlsZSB3aW5ubHMuaAotCUdldExvY2FsZUluZm9BOiBuZXcgZnVuY3Rpb24KLQotCSogW2lmMTYzMi9zaGVsbC5zcGVjXQotCUFkZGVkIEZpbmRFbnZpcm9ubWVudFN0cmluZyBhcyBzdHViCi0KLQkqIFttaXNjL29sZWNsaS5jXVtpZjE2MzIvb2xlY2xpLnNwZWNdCi0JT2xlSXNEY01ldGE6IE5ldyBmdW5jdGlvbgotCi0JKiBbb2JqZWN0cy9mb250XVttaXNjL2dkaS5zcGVjXQotCUdldEtlcm5pbmdQYWlyczogbmV3IGZ1bmN0aW9uCi0KLQkqIFttaXNjL3NoZWxsLmNdCi0JU2hlbGxFeGVjdXRlOiBJbXBsZW1lbnRlZCBzdXBwb3J0IGZvciBzdGFydGluZyBwcm9ncmFtcwotCi0JKiBbaWYxNjMyL3VzZXIuc3BlY10KLQlJbnNlcnRlZCBtaXNzaW5nIHJlbGF5IHRvIEdldENsaXBDdXJzb3IKLQotU3VuIEp1biAxMSAyMDozNDo0NyAxOTk1ICAgQmVybmQgU2NobWlkdCA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+Ci0gICAgICAgIAotCSogW2NvbnRyb2xzL2VkaXQuY10KLQlGaXggYSBwcm9ibGVtIHdpdGggdGhlIGxvY2FsIGhlYXAuCi0KLQkqIFtpbmNsdWRlL3dpbnR5cGVzLmhdCi0JRml4ZWQgd3JvbmcgZGVjbGFyYXRpb25zIG9mIENBVENIQlVGIGFuZCBMUENBVENIQlVGLgotCQotCSogW2luY2x1ZGUvbWRpLmhdIFt3aW5kb3dzL21kaS5jXQotCVRoaXMgY29kZSBzdGlsbCBhc3N1bWVkIHNlZ21lbnRlZCBhZGRyZXNzPT1saW5lYXIgYWRkcmVzcy4gRml4ZWQuCi0KLQkqIFtpbmNsdWRlL21zZG9zLmhdIFttaXNjL2Rvc19mcy5jXQotCVRoZSBmaWxlbWFzayBmaWVsZCBvZiB0aGUgZG9zZGlyZW50IHN0cnVjdHVyZSBjb3VsZCBiZSBvdmVycnVuLiBGaXhlZC4KLQlJZiB5b3UgaGFkIGEgZmlsZSBjYWxsZWQgZm9vYmFyIGFuZCBhIGZpbGUgY2FsbGVkIGZvbywgdHJ5aW5nIHRvIAotCUZpbmRGaWxlKGZvbykgY291bGQgYWNjaWRlbnRhbGx5IGZpbmQgZmlsZSBmb29iYXIgaW5zdGVhZC4gRml4ZWQuCi0JCi0JKiBbbWlzYy9maWxlLmNdCi0JT3BlbkZpbGUoKTogQWx3YXlzIHJldHVybiB0aGUgZnVsbCBwYXRobmFtZSBpbiBvZnMtPnN6UGF0aE5hbWUuIFRoaXMgCi0JYWxzbyBmaXhlcyBHZXRNb2R1bGVGaWxlbmFtZSgpLgotCVByZXZlbnQgX2xjbG9zZSgpIGZyb20gY2xvc2luZyBzdGRlcnIgb3Igc3Rkb3V0LgotCi0JKiBbbWlzYy9wcm9maWxlLmNdCi0JU2VhcmNoIGZvciAuaW5pIGZpbGVzIGluIHRoZSBwYXRoIG9mIHRoZSBjdXJyZW50IG1vZHVsZSBhcyB3ZWxsLgotCShOZWVkZWQgYnkgTG90dXMgT3JnYW5pemVyLikKLQotCSogW2xvYWRlci90YXNrLmNdIFtsb2FkZXIvbmVfaW1hZ2UuY10gW2xvYWRlci9tb2R1bGUuY10KLQlbbWVtb3J5L2xvY2FsLmNdCi0JTG9jYWwgaGVhcHMgYXJlIG5vdyBpbml0aWFsaXplZCBieSBJbml0VGFzaygpIGZvciBleGVjdXRhYmxlcy4gRExMcwotCWhhdmUgdG8gY2FsbCBMb2NhbEluaXQoKSB0aGVtc2VsdmVzLCBMb2NhbEluaXQoKSBoYXMgdG8gcHV0IHRoZQotCWhlYXAgYXQgdGhlIGVuZCBvZiB0aGUgc2VnbWVudCB3aGVuIGNhbGxlZCB3aXRoIHN0YXJ0PT0wLiBXZSBubyBsb25nZXIKLQlhbGxvY2F0ZSB0aGUgREdST1VQIHdpdGggNjRrIG9uIHN0YXJ0dXAsIGJ1dCBncm93IHRoZSBsb2NhbCBoZWFwCi0JaW4gTE9DQUxfR2V0QmxvY2soKSB3aGVuIG5lY2Vzc2FyeS4KLQotICAgICAgICAqIFtsb2FkZXIvbW9kdWxlLmNdCi0JTG9hZExpYnJhcnkoKSBzaG91bGQgY2FsbCBMb2FkTW9kdWxlKCkgaW4gYWxsIGNhc2VzLCBldmVuIGlmIHRoZQotCURMTCBpcyBhbHJlYWR5IGxvYWRlZCwgdG8gZW5zdXJlIHRoYXQgdGhlIHJlZmVyZW5jZSBjb3VudCBpcyBjb3JyZWN0LgotCi0JKiBbbG9hZGVyL25lX2ltYWdlLmNdCi0JU29tZSBjaGFuZ2VzIHRvIGZ1bmN0aW9uIHByb2xvZyBmaXh1cC4gRG9lcyBhbnlvbmUga25vdyBleGFjdGx5IGhvdwotCXRoaXMgaXMgc3VwcG9zZWQgdG8gd29yaz8gSSBhbSBvbmx5IGd1ZXNzaW5nIGhlcmUuCi0JSW4gTkVfSW5pdGlhbGl6ZURMTHMoKSwgaW5pdGlhbGl6ZSB0aGUgRExMcyBhIG1vZHVsZSByZWZlcnMgdG8gYmVmb3JlCi0JdGhlIG1vZHVsZSBpdHNlbGYuCi0JCi0gICAgICAgICogW2xvYWRlci90YXNrLmNdCi0JSW5pdGlhbGl6ZSBpbnN0YW5jZSBkYXRhIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIERHUk9VUCBpbiBJbml0VGFzaygpLgotCi0JKiBbbWVtb3J5L2xvY2FsLmNdCi0JU29tZSBmaXhlcyBmb3IgbW92ZWFibGUgYmxvY2tzLgotCi0JKiBbbWVtb3J5L3NlbGVjdG9yLmNdCi0JQWxsIHRoZSBJc0JhZCpQb2ludGVyKCkgZnVuY3Rpb25zIHJldHVybmVkIGV4YWN0bHkgdGhlIHdyb25nIGJvb2xlYW4KLQl2YWx1ZSBpbiBhbGwgY2FzZXMhCi0JCi0JKiBbb2JqZWN0cy9iaXRibHQuY10KLQlGaXhlZCBhbm90aGVyIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBkZWJ1Z2dpbmcgb3V0cHV0LgotCQotCSogW29iamVjdHMvZm9udC5jXQotCVNvbWUgbW9yZSByZWNvdmVyeSBwb3NzaWJpbGl0aWVzIGZvciBGT05UX01hdGNoRm9udCgpIGlmIGEgc3BlY2lmaWVkCi0JZm9udCBkb2VzIG5vdCBleGlzdC4KLQkKLQkqIFt3aW5kb3dzL3dpbi5jXQotCVRoZSBkaWFsb2cgY29kZSBtYXkgY2FsbCBDcmVhdGVXaW5kb3dFeCB3aXRoIGFuIGludGVnZXIgaW4gd2luZG93TmFtZS4KLQlUaGlzIGhhcHBlbnMgZm9yIHN0YXRpYyBpY29uIGNvbnRyb2xzIHRoYXQgZXhwZWN0IGEgcmVzb3VyY2UgSUQgYXMKLQl0aGUgd2luZG93IG5hbWUuIENyZWF0ZVdpbmRvd0V4KCkgdXNlZCB0byBjcmFzaC4gRml4ZWQuCi0JCi0JKiBbd2luZG93cy9jbGFzcy5jXSBbd2luZG93cy93aW4uY10KLQlXaW5kb3cgY2xhc3NlcyBhcmUgb3duZWQgYnkgbW9kdWxlcywgbm90IGluc3RhbmNlcy4gQ2hhbmdlZAotCVJlZ2lzdGVyQ2xhc3MoKSwgVW5yZWdpc3RlckNsYXNzKCksIEdldENsYXNzSW5mbygpIGFuZCBDcmVhdGVXaW5kb3dFeCgpCi0JYWNjb3JkaW5nbHkuCi0KLVNhdCBKdW4gMTAgMTY6MTA6NTMgMTk5NSAgT2xhZiBGbGViYmUgPG8uZmxlYmJlQHNjaWVuY2UtY29tcHV0aW5nLnVuaS10dWViaW5nZW4uZGU+Ci0KLQkqIFttaXNjZW11L2ludDIxLmNdCi0JICBjbG9jay5leGUgd2FzIGRpc3BsYXlpbmcgaW5jb3JyZWN0IHllYXIuCi0KLUZyaSBKdW4gOSAyMDozNjo1NiAxOTk1ICBWaWN0b3IgU2NobmVpZGVyIDx0YWlsb3JAY3JsLmNvbT4KLQotCSogW2luY2x1ZGUvY3Vyc29yLmhdIFt3aW5kb3dzL2N1cnNvci5jXQotCUltcGxlbWVudGVkIENyZWF0ZUN1cnNvckljb25JbmRpcmVjdCgpLgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UdWUgSnVuICA2IDEyOjExOjQxIDE5OTUgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQHN1bnNpdGUudW5jLmVkdSkKLQotCSogW2NvbnRyb2xzL21lbnUuY10KLQlGaXhlZCBidWcgd2l0aCBkcmF3aW5nIG11bHRpLWNvbHVtbiBtZW51cyB3aXRoIHZlcnRpY2FsIHNlcGFyYXRvci4KLQotCSogW2RlYnVnZ2VyL2RlYnVnLmxdCi0JRml4ZWQgTlVMTC1wb2ludGVyIHJlZmVyZW5jZSBhZnRlciByZWFkbGluZSgpLgotCi0JKiBbaWYxNjMyL3dpbnByb2NzLnNwZWNdIFttaXNjZW11L2ludDIxLmNdIFttaXNjZW11L2ludGVycnVwdHMuY10KLQlBZGRlZCBpbnRlcnJ1cHQgdmVjdG9yIGVtdWxhdGlvbi4gQWxsb3dzIHRvIHJldHJpZXZlIGFuIGludGVycnVwdAotCXZlY3RvciBhbmQganVtcCB0byBpdCB3aXRob3V0IGNyYXNoaW5nLgotCi0JKiBbbG9hZGVyL2xkdC5jXQotCU1vdmVkIGxkdC5jIHRvIG1lbW9yeSBkaXJlY3RvcnkuCi0KLQkqIFtsb2FkZXIvdGFzay5jXQotCUltcGxlbWVudGVkIExvY2tDdXJyZW50VGFzaygpIGFuZCBHZXRJbnN0YW5jZURhdGEoKS4KLQotCSogW29iamVjdHMvYml0Ymx0LmNdCi0JRml4ZWQgYSBidWcgdGhhdCBjYXVzZWQgU3RyZXRjaEJsdCgpIHRvIHVzZSB3cm9uZyBjb2xvcnMgd2hlbgotCXN0cmV0Y2hpbmcgYSBtb25vY2hyb21lIGJpdG1hcCB0byBhIGNvbG9yIGRpc3BsYXkuCi0KLQkqIFtvYmplY3RzL2JpdG1hcC5jXQotCUZpeGVkIGEgc2VnbWVudGVkIHBvaW50ZXIgYnVnIGluIENyZWF0ZUJpdG1hcEluZGlyZWN0KCkuCi0KLQkqIFt0b29scy9idWlsZC5jXQotCUFkZGVkIHBvc3NpYmlsaXR5IHRvIGhhdmUgYXJndW1lbnRzIGZvciByZWdpc3RlciBmdW5jdGlvbnM7IHVzZWQKLQlieSBpbnRlcnJ1cHQgdmVjdG9ycyB0byByZW1vdmUgdGhlIGZsYWdzIGZyb20gdGhlIHN0YWNrLgotCUdlbmVyYXRlIGEgbmV3IGZ1bmN0aW9uIENhbGxUbzMyX0xhcmdlU3RhY2soKSwgdGhhdCBhbGxvd3MgY2FsbGluZwotCWEgMzItYml0IGZ1bmN0aW9uIHVzaW5nIHRoZSBvcmlnaW5hbCAzMi1iaXQgc3RhY2ssIGZvciBmdW5jdGlvbnMKLQl0aGF0IG5lZWQgbW9yZSB0aGF0IDY0ayBvZiBzdGFjay4KLQotVHVlIE1heSAzMCAxMDoyOTo1NiAxOTk1ICBNYXJ0aW4gdm9uIExvZXdpcyAgPG1hcnRpbkBpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KLQotCSogW2lmMTYzMi9zaGVsbC5zcGVjXSBbbWlzYy9zaGVsbC5jXQotCURvRW52aXJvbm1lbnRTdWJzdDogZml4ZWQgcHJvdG90eXBlCi0KLQkqIFtpZjE2MzIvZ2RpLnNwZWNdIFtvYmplY3RzL3BhbGV0dGUuY10KLQlTZXRTeXN0ZW1QYWxldHRlVXNlOiBuZXcgZnVuY3Rpb24KLQotCSogW2lmMTYzMi9rZXJuZWwuc3BlY10gW2xvYWRlci9yZXNvdXJjZS5jXQotCURpcmVjdFJlc0FsbG9jOiBuZXcgZnVuY3Rpb24KLQotCSogW2lmMTYzMi91c2VyLnNwZWNdIFt3aW5kb3dzL2tleWJvYXJkLmNdCi0JU2V0S2V5Ym9hcmRTdGF0ZTogbmV3IGZ1bmN0aW9uCi0KLU1vbiBNYXkgMjkgMTI6NTg6MjggMTk5NSAgIEJlcm5kIFNjaG1pZHQgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgotICAgICAgICAKLQkqIFt0b29scy9idWlsZC5jXQotICAgICAgICBQcmV2ZW50IGludGVycnVwdHMgZnJvbSBkZXN0cm95aW5nIHRoZSBhcmdzIGZvciBhIDMyIGJpdCBmdW5jdGlvbgotICAgICAgICBieSBsb2FkaW5nIHRoZSBjb3JyZWN0IHZhbHVlIGludG8gJWVzcCBkaXJlY3RseSBhZnRlciAlc3MuCi0KLQkqIFtsb2FkZXIvbmVfaW1hZ2UuY10gW2xvYWRlci9tb2R1bGUuY10KLQlUaGUgbmV3IGluc3RhbmNlIG11c3QgYmUgY3JlYXRlZCBlYXJsaWVyIGluIExvYWRNb2R1bGUoKSwgc28gdGhhdAotCWZpeHVwcyByZWZlcmVuY2luZyBpdCB3aWxsIGJlIGhhbmRsZWQgY29ycmVjdGx5LgotICAgICAgICBJbml0aWFsaXplIHRoZSBsb2NhbCBoZWFwIGZvciBhIERHUk9VUCBpbiBORV9Mb2FkU2VnbWVudCgpLgotCQotCSogW29iamVjdHMvZGliLmNdCi0JTGlrZSBSTEU4IGJpdG1hcHMsIFJMRTQgYml0bWFwcyBkb24ndCBhbHdheXMgZW5kIHdpdGggYSBwcm9wZXIgY29kZS4KLQlUaGlzIHVzZWQgdG8gY3Jhc2ggV2luZS4gRml4ZWQuCi0KLSAgICAgICAgKiBbb2JqZWN0cy90ZXh0LmNdCi0JRml4IHBvc3NpYmxlIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBkZWJ1Z2dpbmcgb3V0cHV0LgotCQotCSogW21pc2MvY29tbWRsZy5jXQotCUhhbmRsZSB1c2VyIGlucHV0IGluIHRoZSBlZGl0IGNvbnRyb2wgYmV0dGVyLiBTb21lIGJ1Z3MgZml4ZWQuCi0JCi0JKiBbbWVtb3J5L2xvY2FsLmNdCi0JU3RhcnRlZCBpbXBsZW1lbnRpbmcgbW92ZWFibGUgYmxvY2tzLiBUaGlzIGlzIHVuZmluaXNoZWQgKCEpLCBidXQKLQlhdCBsZWFzdCBpdCBkb2VzIG5vdCBzZWVtIHRvIGJyZWFrIHRoaW5ncy4KLQotV2VkIE1heSAyNCAxMzoyNjozNiAxOTk1ICAgQmVybmQgU2NobWlkdCA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+Ci0gICAgICAgIAotCSogW2xvYWRlci9tb2R1bGUuY10KLQlMb2FkTW9kdWxlKCk6IERMTHMgb2NjYXNpb25hbGx5IGhhdmUgYSBkYXRhIHNlZ21lbnQsIGFuZCB0aGV5IHdvcmsKLQltdWNoIGJldHRlciBpZiBpdCBpcyBsb2FkZWQgOi0pCi0JTG9hZExpYnJhcnkoKTogcGFzcyBITU9EVUxFIGluc3RlYWQgb2YgSElOU1RBTkNFIHRvIE5FX0luaXRpYWxpemVETExzLgotCUZpbmRNb2R1bGUoKTogYWxzbyBzdHJpcCBvZmYgdGhlIGxhc3QgYmFja3NsYXNoIG9mIHRoZSBwYXRobmFtZXMKLQkoV2luaGVscCB0cmllZCB0byBsb2FkIEM6XFdJTkRPV1NcU1lTVEVNXENPTU1ETEcuRExMKS4KLQlHZXRNb2R1bGVIYW5kbGUoKToganVzdCBjYWxsIE1PRFVMRV9GaW5kTW9kdWxlLCBpdCBkb2VzIHRoZSBzYW1lIGpvYiwKLQlvbmx5IGJldHRlci4KLQkKLQkqIFtsb2FkZXIvbmVfaW1hZ2UuY10KLQlMb2NhbEluaXQoKSB0aGUgaGVhcCBvZiBhIERMTCBpbiBORV9Jbml0RExMLiAoVGhpcyBpcyBwcm9iYWJseQotCW5vdCByZWFsbHkgY29ycmVjdCwgaXQgc2VlbXMgdGhhdCBhbGwgcHJvZ3JhbXMgYW5kIERMTHMgdHJ5IHRvIGRvCi0JdGhpcyB0aGVtc2VsdmVzLiBCdXQgdGhleSBwYXNzIHdlaXJkIHBhcmFtZXRlcnMuKQotCU5FX0luaXRpYWxpemVETExzIHNob3VsZCBhbHNvIGNhbGwgTkVfSW5pdERMTCBmb3IgdGhlIHBhc3NlZCBoTW9kdWxlLgotCQotCSogW2xvYWRlci90YXNrLmNdIFttaXNjL3VzZXIuY10KLQlGaW5pc2ggZ2xvYmFsIGluaXRpYWxpemF0aW9ucyBpbiBJbml0VGFzayBpbnN0ZWFkIG9mIEluaXRBcHAsIG9yCi0JYWxsIHRoZSBETExzIHdpbGwgYmUgaW5pdGlhbGl6ZWQgaW4gSW5pdFRhc2sgd2l0aG91dCBhbnkgYXZhaWxhYmxlCi0Jd2luZG93IGNsYXNzZXMhCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVN1biBNYXkgMjEgMTI6MzA6MzAgMTk5NSAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAc3Vuc2l0ZS51bmMuZWR1KQotCi0JKiBbZGVidWdnZXIvaGFzaC5jXSBbZGVidWdnZXIvaW5mby5jXQotCUFkZGVkIHN1cHBvcnQgZm9yIHN5bWJvbGljIHNlZ21lbnRlZCBhZGRyZXNzZXMuIEFkZCBzeW1ib2xzIGZvciBhbGwKLQlidWlsdC1pbiBBUEkgZW50cnkgcG9pbnRzLgotCi0JKiBbaWYxNjMyL3JlbGF5LmNdIFtpbmNsdWRlL2RsbHMuaF0KLQlSZW1vdmVkIGRsbF90YWJsZSBzdHJ1Y3R1cmUsIGFzIHdlIG5vdyB1c2UgdGhlIGJ1aWx0LWluIG1vZHVsZQotCXN0cnVjdHVyZXMuCi0KLQkqIFtpZjE2MzIvcmVsYXkuY10gW2xvYWRlci9tYWluLmNdCi0JUmVtb3ZlZCB3aW5lc3RhdCBvcHRpb24sIGFzIGl0IHdhcyBubyBsb25nZXIgdmVyeSBtZWFuaW5nZnVsLgotCi0JKiBbaW5jbHVkZS9zdGFja2ZyYW1lLmhdCi0JTmV3IG1hY3JvIE1BS0VfU0VHUFRSIHRoYXQgY3JlYXRlcyBhIHNlZ21lbnRlZCBwb2ludGVyIHRvIGEgbG9jYWwKLQl2YXJpYWJsZSBvbiB0aGUgMzItYml0IHN0YWNrLgotCi0JKiBbbG9hZGVyL21vZHVsZS5jXQotCUFkZGVkIHN1cHBvcnQgZm9yIG11bHRpcGxlIGluc3RhbmNlcyBvZiBhbiBhcHBsaWNhdGlvbi4KLQlJbXBsZW1lbnRlZCBMb2FkTW9kdWxlKCkgYW5kIEZyZWVNb2R1bGUoKS4KLQotCSogW2xvYWRlci9uZV9pbWFnZS5jXSBbbG9hZGVyL3Rhc2suY10KLQlNb3ZlZCBpbml0aWFsaXNhdGlvbiBvZiBidWlsdC1pbiBETExzIHRvIEluaXRUYXNrKCkuCi0KLQkqIFttZW1vcnkvZ2xvYmFsLmNdCi0JSW1wbGVtZW50ZWQgZGlzY2FyZGFibGUgYmxvY2tzLgotCi0JKiBbbWlzYy9maWxlLmNdCi0JU2VhcmNoIHBhdGggb2YgY3VycmVudCBleGVjdXRhYmxlIGluIE9wZW5GaWxlKCkuCi0JRml4ZWQgYnVnIHdpdGggc2VhcmNoaW5nIGluIFdpbmRvd3MgcGF0aC4KLQotCSogW21pc2MvbHN0ci5jXQotCUhhcmQtY29kZWQgdHJhbnNsYXRpb24gdGFibGVzIGZvciBBbnNpPC0+T2VtLgotCi0JKiBbbWlzYy91c2VyLmNdCi0JTW92ZWQgc29tZSBnbG9iYWwgaW5pdGlhbGl6YXRpb25zIHRvIEluaXRBcHAoKSwgYmVjYXVzZSB0aGV5IG5lZWQKLQlhIHRhc2sgY29udGV4dCB0byBiZSBwZXJmb3JtZWQuCi0KLQkqIFtvYmplY3RzL2RjLmNdCi0JSGFuZGxlIFIyX0JMQUNLIGFuZCBSMl9XSElURSBzcGVjaWFsbHkgc28gdGhhdCB0aGV5IHdvcmsgY29ycmVjdGx5Ci0Jd2l0aCBwYWxldHRlIGRpc3BsYXlzLgotCi0JKiBbdG9vbHMvYnVpbGQuY10KLQlTdXBwcmVzc2VkIGdlbmVyYXRpb24gb2YgdGhlIEMgZmlsZSBmb3IgRExMIHNwZWNzLCBiZWNhdXNlIGl0J3Mgbm8KLQlsb25nZXIgbmVlZGVkLiBPdXRwdXQgYWxsIHRoZSBhc3NlbWJseSBjb2RlIGRpcmVjdGx5IHRvIHN0ZG91dC4KLQlTb21lIGNoYW5nZXMgdG8gaW50ZWdyYXRlIFdpbjMyIHN1cHBvcnQgZnJvbSBNYXJ0aW4gdm9uCUxvZXdpcy4gCi0KLQkqIFt3aW5kb3dzL21zZ2JveC5jXQotCU1vdmVkIG1lc3NhZ2UgYm94IGNvZGUgZnJvbSBtaXNjLyB0byB3aW5kb3dzLy4KLQotTW9uIE1heSAxNSAyMzo0MDowNCAxOTk1ICBNYXJ0aW4gQXlvdHRlICh3aW5lQHRyZ2NvcnAubWtzaW5mby5xYy5jYSkKLQotCSogW21pc2MvYXVkaW8uY10gW21pc2MvbWNpY2RhLmNdIFttaXNjL21jaWFuaW0uY10gW21pc2MvbWlkaS5jXQotCSAgW21pc2MvbW1hdXguY10gW21pc2MvbW1zeXN0ZW0uY10KLQlNb2RpZnkgY29kZSAmIHVzZSBwb2ludGVycyBjb252ZXJzaW9uIG1hY3Jvcy4KLQlNYWtlIGNkYXVkaW8gJiB3YXZlIGRldmljZXMgd29yayBhZ2FpbiAob25seSB1c2luZyBzb21lIGFwcGxldHMpLgotCi0JKiBbbWlzYy9wcm9maWxlLmNdCi0JQ2hhbmdlIGdldGMoKSB0byBmZ2V0YygpIHdoZXJlIG5lZWRlZC4KLQotTW9uIE1heSAxNSAyMjoxMDo1NiAxOTk1ICBNYXJ0aW4gdm9uIExvZXdpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KLQotCSogW2lmMTYzMi9JbWFrZWZpbGVdCi0JYWRkZWQgZW50cmllcyBmb3IgdGhlIG5ldyBmaWxlcyBnZGkzMi5zcGVjLCBrZXJuZWwzMi5zcGVjLAotCXVzZXIzMi5zcGVjLCBzaGVsbDMyLnNwZWMgYW5kIHdpbnByb2NzMzIuc3BlYy4KLQotCSogW2lmMTYzMi9jb21tZGxnLnNwZWNdW2lmMTYzMi9rZXJuZWwuc3BlY11baWYxNjMyL3NoZWxsLnNwZWNdCi0JICBbaWYxNjMyL3N0b3JhZ2Uuc3BlY11baWYxNjMyL3N5c3RlbS5zcGVjXVtpZjE2MzIvdXNlci5zcGVjXQotCUNob29zZUZvbnQsIFJFU0VSVkVENSwgSW50ZXJuYWxFeHRyYWN0SWNvbjogTWFya2VkIGFzIHN0dWJzCi0JRXh0cmFjdEFzc29jaWF0ZWRJY29uLCBEb0Vudmlyb25tZW50U3Vic3QsIER1bXBJY29uOgotCQlzdHViIGltcGxlbWVudGF0aW9ucyBwcm92aWRlZCAKLQltYXJrZWQgc3RvcmFnZS5kbGwsc3RvcmVnZS5zeXMgZnVuY3Rpb25zIGFzIHN0dWJzCi0KLQkqIFtpbmNsdWRlL3BlX2ltYWdlLmhdCi0JQWRkZWQgc3RydWN0dXJlcyBXSU4zMl9idWlsdGluIGFuZCAgV0lOMzJfZnVuY3Rpb24KLQotCSogW2luY2x1ZGUvcGVleGUuaF0KLQlQRV9JbXBvcnRfRGlyZWN0b3J5OiByZW5hbWVkIHJlc2VydmVkIGZpZWxkcyB0byAKLQkJVGltZURhdGUsIEZvcndhcmRlciwgVGh1bmtfTGlzdAotCi0JKiBbaW5jbHVkZS93aW5lcnJvci5oXQotCU5ldyBmaWxlLgotCi0JKiBbbG9hZGVyL21haW4uY10KLQljYWxsZWQgUkVMQVkzMl9Jbml0Ci0KLQkqIFtsb2FkZXIvcGVfaW1hZ2UuY10KLQl4bW1hcDogbWFwIEJTUyBhbm9ueW1vdXMKLQlkdW1wX2ltcG9ydHM6IHJlbmFtZWQgdG8gZml4dXBfaW1wb3J0cywgZG8gdGhlIGZpeHVwIG9mIGltcG9ydGVkCi0JICAgICAgICAgICAgICBzeW1ib2xzCi0JUEVfTG9hZEltYWdlOiBwYXNzIHJhdyBkYXRhIHNpemUgdG8geG1tYXAKLQotCSogW2xvYWRlci9yZXNvdXJjZS5jXQotCUR1bXBJY29uOiBuZXcgZnVuY3Rpb24KLQotCSogW21pc2Mva2VybmVsMzIuY10KLQlOZXcgZmlsZS4KLQotCSogW21pc2MvbWFpbi5jXQotCW1ha2Ugc3Rkb3V0IGFuZCBzdGRlcnIgdW5idWZmZXJlZAotCi0JKiBbbWlzYy9zaGVsbC5jXQotCURvRW52aXJvbm1lbnRTdWJzdDogbmV3IGZ1bmN0aW9uCi0KLQkqIFtvYmplY3RzL2ZvbnQuY10KLQlGT05UX01hdGNoRm9udDogdHJ5IG9ibGlxdWUgaWYgdGhlcmUgaXMgbm8gaXRhbGljCi0KLQkqIFtyYy9JbWFrZWZpbGVdW3JjL3BhcnNlci5sXQotCXl5d3JhcDogbmV3IGZ1bmN0aW9uCi0JRG9uJ3QgbGluayB3aXRoIGxpYmZsLmEgb24gTGludXgKLQotCSogW3Rvb2xzL2J1aWxkLmNdCi0JQWRkZWQga2V5d29yZHMgc3RkY2FsbCwgc3Vic3lzdGVtLCBiYXNlCi0JR2VuZXJhdGVGb3JXaW4zMjogbmV3IGZ1bmN0aW9uCi0JQnVpbGRTcGVjRmlsZXM6IGNhbGwgR2VuZXJhdGVGb3JXaW4zMiBpZiBzdWJzeXN0ZW0gaXMgd2luMzIKLQotTW9uIE1heSAxNSAxMDozODoxNCAxOTk1ICAgQmVybmQgU2NobWlkdCA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+Ci0gICAgICAgIAotICAgICAgICAqIFtjb250cm9scy9saXN0Ym94LmNdIFtjb250cm9scy9jb21iby5jXSBbd2luZG93cy9kZWZ3bmQuY10KLQlNaW5vciBmaXhlcy4KLQkKLQkqIFttaXNjL21lc3NhZ2UuY10gW21pc2MvbWFpbi5jXSBbcmMvc3lzcmVzKi5yY10gW2luY2x1ZGUvdGV4dHMuaF0KLQlSZXdyb3RlIG1lc3NhZ2UgYm94IGhhbmRsaW5nLgotCQotCSogW3dpbmRvd3MvZGlhbG9nLmNdCi0JRGlhbG9ncyBzaG91bGQgYmUgaW52aXNpYmxlIHVudGlsIGFmdGVyIFdNX0lOSVRESUFMT0cgaXMgc2VlbnQuCi0JRG9uJ3Qgc3dpdGNoIHRvIGludmlzaWJsZSBkaWFsb2cgaXRlbXMgb24gYSBUQUIga2V5cHJlc3MuCi0JCi0JKiBbd2luZG93cy9tZGkuY10KLQlTZW5kIFdNX05DUEFJTlQgbWVzc2FnZSBpbiBNRElSZXN0b3JlQ2hpbGQoKS4KLQkKLQkqIFt3aW5kb3dzL3BhaW50aW5nLmNdCi0JRml4ZWQgdHlwbyAoJiYgLT4gJikuCi0JCi0JKiBbd2luZG93cy9tZXNzYWdlLmNdIFtpZjE2MzIvdXNlci5zcGVjXQotCUltcGxlbWVudGVkIFBvc3RBcHBNZXNzYWdlKCkuCi0JCi0JKiBbd2luZG93cy9ldmVudC5jXQotCVNldENhcHR1cmUoMCkgc2hvdWxkIGFjdCBsaWtlIFJlbGVhc2VDYXB0dXJlKCkuCi0KLVR1ZSBNYXkgIDkgMTE6NTU6NTIgMTk5NSAgICAgRWRkaWUgQy4gRG9zdCAgICAgICAgICAgICAoZWNkQGRyZXNzbGVyLmRlKQotCi0JKiBbSW1ha2VmaWxlXQotCUNoYW5nZWQgQ0RFQlVHRkxBR1MgZm9yIHN5c3RlbXMgcnVubmluZyBfX0VMRl9fICh0ZW1wb3JhcmlseSkKLQlBZGRlZCBBU0ZMQUdTIHRvIGV4cG9ydGVkIHZhcmlhYmxlcy4KLQotCSogW2RlYnVnZ2VyL3JlYWRsaW5lL0ltYWtlZmlsZV0KLQlNb3ZlZCBkZWZpbmVzIGZvciBsaWJyZWFkbGluZSBmcm9tIERFRklORVMgdG8gRVhUUkFfREVGSU5FUwotCi0JKiBbbWVtb3J5L2xvY2FsLmNdIFttaXNjZW11L2ludDIxLmNdCi0JQWRkZWQgc29tZSBtb3JlIGRlYnVnZ2luZyBvdXRwdXRzLgotCi1Nb24gTWF5ICA4IDAwOjU1OjI3IE1FVCBEU1QgMTk5NQkgIERhZyBBc2hlaW0gKGRhc2hAaWZpLnVpby5ubykKLQotCSogW21pc2MvbWVzc2FnZS5jXQotCUZpeGVkIGEgIkZJWE1FIiBjb25jZXJuaW5nIG5vcndlZ2lhbiB0cmFuc2xhdGlvbi4KLQotU3VuIE1heSAgNyAyMzoyNToyMyAxOTk1ICAgQmVybmQgU2NobWlkdCA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+Ci0gICAgICAgIAotCSogWyovKl0KLSAgICAgICAgUmVtb3ZlZCB3YXJuaW5ncyBpbiBhIGNvdXBsZSBvZiBmaWxlcyBhbmQgZGVsZXRlZCBzb21lIG9ic29sZXRlIGNvZGUuCi0KLSAgICAgICAgKiBbY29udHJvbHMvbGlzdGJveC5jXQotICAgICAgICBDbGVhbnVwLCBzcGVlZCBpbXByb3ZlbWVudHMgJiBsb3RzIG9mIGJ1ZyBmaXhlcy4KLQotICAgICAgICAqIFtjb250cm9scy9jb21iby5jXQotCU1vc3RseSByZXdyaXR0ZW4uIFRoaXMgaXMgc3RpbGwgdmVyeSBidWdneSwgYnV0IG5vdCBxdWl0ZSBhcyBiYWQgYXMgCi0JYmVmb3JlLgotCi0gICAgICAgICogW2luY2x1ZGUvY29tbWRsZy5oXSBbbWlzYy9jb21tZGxnLmNdCi0gICAgICAgIFJlbW92ZWQgdGhlIG5lZWQgZm9yIHN5c3Jlcy5kbGwuIFNtYWxsIGJ1ZyBmaXhlcy4KLQkKLSAgICAgICAgKiBbb2JqZWN0cy9vZW1iaXRtYXAuY10gW2luY2x1ZGUvYml0bWFwcy88bWFueT5dIFtpbmNsdWRlL3dpbmRvd3MuaF0KLSAgICAgICAgICBbbG9hZGVyL2xpYnJhcnkuY10gW2xvYWRlci9tYWluLmNdIFtyYy9zeXNyZXMqLnJjXQotICAgICAgICBSZW1vdmVkIHN5c3Jlcy5kbGwgYW5kIHJlcGxhY2VkIHRoZSByZW1haW5pbmcgYml0bWFwcy9pY29ucyB3aXRoCi0gICAgICAgIFhQTSBlcXVpdmFsZW50cy4KLQotICAgICAgICAqIFttaXNjL21lc3NhZ2UuY10gW3dpbmRvd3Mvbm9uY2xpZW50LmNdIFttaXNjL21haW4uY10KLSAgICAgICAgICBbaWYxNjMyL3dpbnByb2NzLnNwZWNdCi0gICAgICAgICJBYm91dCBXaW5lLi4uIiBub3cgYnJpbmdzIHVwIGEgc3RhbmRhcmQgU2hlbGxBYm91dCgpIHdpbmRvdyB3aXRoCi0gICAgICAgIHRoZSBXaW5lIGljb24gYW5kIHRoZSBsaXN0IG9mIGNvbnRyaWJ1dG9ycy4KLQkKLQkqIFttaXNjL3NoZWxsLmNdCi0JRml4ZWQgU2hlbGxBYm91dCgpL0Fib3V0RGlhbG9nUHJvYygpIHRvIHNob3cgdGhlIHJpZ2h0IGljb24uCi0KLQkqIFt3aW5kb3dzL2V2ZW50LmNdCi0JU21hbGwgaGFjayBmb3Igbm9uLWFscGhhbnVtZXJpYyBrZXlzOiBEb250J3Qgc2VuZCB0aGUgYXNjaWkgdmFsdWUgaW4KLQl0aGUgV01fS0VZRE9XTiBtZXNzYWdlLCBidXQgc29tZSB1bnVzZWQgY29kZSBpbnN0ZWFkLiBTaG91bGQgYmUgZG9uZQotCXByb3Blcmx5IGJ5IHNlbmRpbmcgZGlmZmVyZW50IGNvZGVzIGZvciBlYWNoIGtleS4gVGhlIGVkaXQgY29udHJvbAotCXVzZWQgdG8gZ2V0IGEgVktfREVMRVRFIG1lc3NhZ2UgZWFjaCB0aW1lIHRoZSB1c2VyIHR5cGVkICcuJy4KLQotCSogW3dpbmRvd3MvY2xhc3MuY10KLQlSZW1vdmVkIGEgY2hlY2sgZm9yIENTX0dMT0JBTENMQVNTIGluIENMQVNTX0ZpbmRDbGFzc0J5TmFtZSgpLgotCVRoaXMgdXNlZCB0byBiZSBubyBwcm9ibGVtLCBidXQgYnJlYWtzIFJlc291cmNlIFdvcmtzaG9wIGluIDk1MDQwMy4KLQkKLQkqIFtvYmplY3RzL2RpYi5jXQotCU5ldyBkaWFnbm9zdGljIGZvciBhIGJ1ZyBJJ3ZlIGJlZW4gZW5jb3VudGVyaW5nLiBJZiBpdCBzaG93cyB1cCwKLQlwbGVhc2UgcmVwb3J0IGl0LgotCi1TdW4gTWF5ICA3IDIzOjExOjE4IEVEVCAxOTk1ICBXaWxsaWFtIE1hZ3JvICh3bWFncm9AdGMuY29ybmVsbC5lZHUpCi0KLQkqIFtvYmplY3RzL2NvbG9yLmNdCi0JSGFuZGxlIHNpdHVhdGlvbiB3aGVuICdkYycgZXhpc3RzLCBidXQgcGFsZXR0ZSBtYXBwaW5nCi0JZG9lcyBub3QuICAoRml4ZXMga2lkcGl4MiBkZW1vLikKLQotU3VuIE1heSAgNyAwMzozMjowMCAxOTk1ICBDaGFybGVzIE0uIEhhbm51bSAgKG15Y3JvZnRAbWl0LmVkdSkKLQotCSogW2xvYWRlci9sZHQuY10KLQlMRFRfUHJpbnQ6IE9ubHkgc2hvdyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgdGhhdCB0aGUga2VybmVsCi0JcmV0dXJuZWQuIE1ha2UgdGhpcyB3b3JrIGZvciBOZXRCU0QuCi0KLUZyaSBNYXkgIDUgMDI6NTM6MjYgMTk5NSAgQ2hhcmxlcyBNLiBIYW5udW0gIChteWNyb2Z0QG1pdC5lZHUpCi0KLQkqIFtkZWJ1Z2dlci9kYmcueV0gW2luY2x1ZGUvd2luZS5oXSBbbG9hZGVyL3NpZ25hbC5jXQotCU1vZGlmeSBjcyBhbmQgZHMgc2VsZWN0b3IgdmFsdWVzIGZvciBOZXRCU0QtY3VycmVudC4KLQotCSogW2RlYnVnZ2VyL2RlYnVnLmxdCi0JJHNwLCAkZXNwOiBVc2UgUk5fRVNQX0FUX1NJR05BTCByYXRoZXIgdGhhbiBSTl9FU1AuCi0KLQkqIFtkZWJ1Z2dlci9yZWdwb3MuaF0KLQlNb2RpZnkgc2lnY29udGV4dCBmb3JtYXQgZm9yIE5ldEJTRC1jdXJyZW50LgotCVNDX0VTUDogVXNlIFJOX0VTUF9BVF9TSUdOQUwgcmF0aGVyIHRoYW4gUk5fRVNQLgotCi0JKiBbaW5jbHVkZS9sZHQuaF0KLQlTRUxFQ1RPUl9UT19FTlRSWTogRXhwbGljaXRseSBjbGVhciB0aGUgdG9wIGhhbGYgb2YgdGhlIHNlbGVjdG9yCi0JdmFsdWUsIHNpbmNlIG9ubHkgMTYgYml0cyBvZiBpdCBtYXkgaGF2ZSBiZWVuIHNhdmVkLgotCi0JKiBbbWlzYy93aW5zb2NrZXQuY10KLQlTZXQgc3RydWN0dXJlIHBhY2tpbmcgd2l0aCBgI3ByYWdtYSBwYWNrJyB0byBhY2NvbW9kYXRlCi0Jb3RoZXIvb2xkZXIgY29tcGlsZXJzLgotCi1UdWUgTWF5ICAyIDE4OjE1OjAxIDE5OTUgUGFhbCBCZXllciAoYmV5ZXJAaWR0LnVuaXQubm8pCi0JCi0JKiBbbWlzYy9jb21tZGxnLmNdCi0JRml4ZWQgcGF0aC1uYW1lcyBzbyB3aGVuIGNoYW5naW5nIGRpcmVjdG9yeSB0aGUgbGlzdGJveGVzCi0JY2hhbmdlcyB0b28uCi0JCi0JKiBbZGVidWdnZXIvZGJnLnkgZGVidWdnZXIvZGVidWcubCB3aW5lLmluaV0KLQlBZGRlZCBTeW1ib2xUYWJsZUZpbGUgdG8gd2luZS5pbmkgc28gc3ltYm9scyBjYW4gYmUgcmVhZAotCXdpdGhvdXQgc3RhbmRpbmcgaW4gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHdpbmUuc3ltLgotCUFkZGVkIHRoZSBwb3NzaWJpbGl0eSB0byBzcGVjaWZ5IGZ1bGwgbmFtZSBvZiB3aW5lLnN5bSBmcm9tCi0JdGhlIGRlYnVnZ2VyIHByb21wdC4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotU2F0IEFwciAyOSAyMDo0MjowMSAxOTk1ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBzdW5zaXRlLnVuYy5lZHUpCi0KLQkqIFtjb250cm9scy9zdGF0aWMuY10KLQlGaXhlZCBwYWludGluZyBvZiBTU18qRlJBTUUgY29udHJvbHMuCi0KLQkqIFtpZjE2MzIvY2FsbGJhY2suY10KLQlQYXNzIHRoZSB3aW5kb3cgaW5zdGFuY2UgYXMgRFMgdG8gdGhlIDE2LWJpdCB3aW5kb3cgcHJvY2VkdXJlLgotCVJld3JvdGUgQ2F0Y2goKSBhbmQgVGhyb3coKSB0byBtYWtlIHRoZW0gd29yayB3aXRoIG11bHRpcGxlIHRhc2tzLgotCi0JKiBbbG9hZGVyL21haW4uY10KLQlOZXcgZnVuY3Rpb24gTUFJTl9Jbml0KCkgdG8gcGVyZm9ybSBpbml0aWFsaXphdGlvbnMgYmVmb3JlIHRoZQotCWZpcnN0IHRhc2sgaXMgc3RhcnRlZCBpbnN0ZWFkIG9mIGRvaW5nIHRoZW0gaW4gSW5pdEFwcCgpLgotCVRlbXBvcmFyeSBoYWNrIHRvIGNvbW1hbmQtbGluZSBwYXJzaW5nIHRvIGxvYWQgb25lIHByb2dyYW0gcGVyCi0JY29tbWFuZC1saW5lIGFyZ3VtZW50LCB0byBtYWtlIHRlc3RpbmcgdGFzay1zd2l0Y2hpbmcgZWFzaWVyLgotCi0JKiBbbG9hZGVyLyouY10KLQlSZWltcGxlbWVudGVkIG1vZHVsZXMgdG8gdXNlIGEgV2luZG93cy1jb21wYXRpYmxlIGxheW91dCBhbmQgdG8KLQlhbGxvdyBtdWx0aXBsZSB0YXNrcyBhbmQgbXVsdGlwbGUgbW9kdWxlIGluc3RhbmNlcy4gTm90IHJlYWxseQotCWZpbmlzaGVkIHlldC4KLQotCSogW2xvYWRlci90YXNrLmNdIFttaXNjL2V4ZWMuY10KLQlSZWltcGxlbWVudGVkIHRhc2tzIHRvIHVzZSBhIGNvbW1vbiBhZGRyZXNzIHNwYWNlLCBhbmQgaW1wbGVtZW50ZWQKLQlwcmVsaW1pbmFyeSB0YXNrLXN3aXRjaGluZyBjYXBhYmlsaXRpZXMuCi0KLQkqIFttZW1vcnkvZ2xvYmFsLmNdCi0JRml4ZWQgYnVnIGluIEdsb2JhbE5leHQoKS4KLQotCSogW21pc2MvbWFpbi5jXQotCVVwZGF0ZWQgdGhlIGxpc3Qgb2YgY29udHJpYnV0b3JzLiBMZXQgbWUga25vdyBpZiBJIGZvcmdvdCBzb21lb25lLgotCi0JKiBbbWlzY2VtdS9pbnQyMS5jXQotCVVzZSBvbmUgRFRBIHBlciB0YXNrIGluc3RlYWQgb2YgYSBnbG9iYWwgb25lLgotCi0JKiBbb2JqZWN0cy9iaXRibHQuY10KLQlGaXhlZCBidWcgaW4gQml0Qmx0KCkgdGhhdCBjb3VsZCBjYXVzZSBCYWRNYXRjaCBlcnJvcnMuCi0KLQkqIFt0b29scy9idWlsZC5jXQotCUFkZGVkIG5ldyBmdW5jdGlvbiB0eXBlICdzdHViJywgdGhhdCBtYWtlcyBwb3NzaWJsZSB0byBleHBvcnQgYW4KLQl1bmltcGxlbWVudGVkIGZ1bmN0aW9uIGJ5IG5hbWUgYXMgd2VsbCBhcyBieSBvcmRpbmFsLiBUaGlzIHdpbGwKLQlhdm9pZCBsb2FkaW5nIGVycm9ycyBmb3IgdW5pbXBsZW1lbnRlZCBmdW5jdGlvbnMuCi0JR2VuZXJhdGUgYW4gaW4tbWVtb3J5IG1vZHVsZSBsYXlvdXQgZm9yIGJ1aWx0LWluIERMTHMgc28gdGhhdCB0aGUKLQlzYW1lIGNvZGUgY2FuIGJlIHVzZWQgZm9yIGJ1aWx0LWluIGFuZCBsb2FkZWQgbW9kdWxlcy4KLQlDaGFuZ2VkIHJlbGF5IGNvZGUgdG8gbWFrZSBpdCB1bm5lY2Vzc2FyeSB0byBzYXZlIHRoZSB2YWx1ZSBvZiB0aGUKLQlCUCByZWdpc3Rlci4KLQotCSogW3dpbmRvd3MvbWVzc2FnZS5jXQotCUltcGxlbWVudGVkIG11bHRpcGxlIG1lc3NhZ2UgcXVldWVzIGFuZCBwcmVsaW1pbmFyeSB0YXNrLXN3aXRjaGluZwotCWNhcGFiaWxpdGllcy4gSW50ZXItdGFzayBTZW5kTWVzc2FnZSgpIGNhbGxzIGFyZSBub3QgaW1wbGVtZW50ZWQKLQl5ZXQgYW5kIHdpbGwgcHJvYmFibHkgY2F1c2UgY3Jhc2hlcyBpZiB1c2VkLgotCi0JKiBbd2luZG93cy9wcm9wZXJ0eS5jXQotCVJlaW1wbGVtZW50ZWQgcHJvcGVydGllcyBhbmQgYWxsb2NhdGUgdGhlbSBvbiB0aGUgVVNFUiBoZWFwLgotCi0JKiBbd2luZG93cy93aW4uY10KLQlGaXhlZCBidWcgaW4gU2V0V2luZG93V29yZCgpLgotCVJlaW1wbGVtZW50ZWQgRW51bVdpbmRvd3MoKSBhbmQgRW51bVRhc2tXaW5kb3dzKCkuCi0KLVR1ZSBBcHIgMTggMDk6NDg6MzggMTk5NSAgIEJlcm5kIFNjaG1pZHQgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgotICAgICAgICAKLQkqIFttaXNjL21haW4uY10KLQlHZXRTeXN0ZW1QYXJhbWV0ZXJzSW5mbygpOiBBZGRpdGlvbmFsIGFjdGlvbiBTUElfR0VUSUNPTlRJVExFRk9OVC4KLQkKLQkqIFtsb2FkZXIvcmVzb3VyY2UuY10KLQlSZW1vdmVkIHRoZSBjaGVjayBmb3IgTkVfU0VHRkxBR1NfRVhFQ1VURU9OTFksIHNpbmNlIGl0IGJyb2tlCi0JY29udHJvbC5leGUuCi0JRml4ZWQgaWNvbiBsb2FkaW5nLgotCQotCSogW29iamVjdHMvZm9udC5jXSBbaW5jbHVkZS93aW5kb3dzLmhdCi0JRml4ZWQgYSBidWcgaW4gSW5pdEZvbnRzTGlzdCgpIGFuZCB3b3JrZWQgb24gdGhlIEVudW1Gb250cygpCi0JZnVuY3Rpb25zIHRvIG1ha2UgdGhlbSBjb21wcmVoZW5zaWJsZS4KLQotICAgICAgICAqIFtjb250cm9scy9idXR0b24uY10KLQlGaXhlZCBteSBwcmV2aW91cyBwYXRjaCB0byBoYW5kbGUgTEJVVFRPTlVQIG1lc3NhZ2VzLgotCi1GcmkgQXByIDE0IDExOjQxOjI4IDE5OTUgIENhbWVyb24gSGVpZGUgIChoZWlkZUBlZS51YWxiZXJ0YS5jYSkKLQotICAgICAgICAqIFttaXNjL25ldHdvcmsuYywgbWlzYy9kb3NfZnMuY10KLSAgICAgICAgSW1wbGVtZW50ZWQgV05ldEdldENvbm5lY3Rpb24uICBBbGwgdGhhdCBpcyBjdXJyZW50bHkKLSAgICAgICAgc3VwcG9ydGVkIGFyZSBkcml2ZXMsIGZvciB3aGljaCB0aGUgcmVtb3RlIG5hbWUgaXMgc2ltcGx5Ci0gICAgICAgIHRoZSByZWRpcmVjdGVkIFVOSVggZGlyZWN0b3J5IG5hbWUuCi0KLSAgICAgICAgKiBbbWlzY2VtdS9pbnQyPy5jXQotICAgICAgICBNb3JlIGRyaXZlIG51bWJlciB2YWxpZGl0eSBjaGVja2luZy4KLQotV2VkIEFwciAxMiAxMToyODozNyAxOTk1ICAgQmVybmQgU2NobWlkdCA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+Ci0gICAgICAgIAotICAgICAgICAqIFtjb250cm9scy9saXN0Ym94LmNdCi0JT29wcywgbXkgcHJldmlvdXMgY2hhbmdlIHRvIExpc3RCb3hEaXJlY3RvcnkgYnJva2UgdGhlIEJvcmxhbmQKLQlmaWxlIG9wZW4gZGlhbG9nLiBGaXhlZC4KLQotTW9uIEFwciAxMCAyMzoxNzoxMiAxOTk1ICBNYXJ0aW4gdm9uIExvZXdpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KLQotCSogW2lmMTYzMi9vbGUybmxzLnNwZWNdIFttaXNjL29sZTJubHMuY10gW21pc2MvSW1ha2VmaWxlXQotCU5ldyBmaWxlIG9sZTJubHMuYy4gQWRkZWQgc3R1YnMgZm9yIEdldFVzZXJEZWZhdWx0TENJRCwgCi0JR2V0U3lzdGVtRGVmYXVsdExDSUQsIEdldFVzZXJEZWZhdWx0TGFuZ0lELCBHZXRTeXN0ZW1EZWZhdWx0TGFuZ0lELgotCi1Nb24gQXByIDEwIDEwOjA1OjE4IDE5OTUgICBCZXJuZCBTY2htaWR0IDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KLSAgICAgICAgCi0JKiBbbWVtb3J5L2dsb2JhbC5jXSBbbWVtb3J5L2xvY2FsLmNdIFtpbmNsdWRlL3dpbmRvd3MuaF0KLQlHbG9iYWxSZUFsbG9jKCk6IElmIEdNRU1fTU9ESUZZIGlzIHNldCwgZG9uJ3QgcmVzaXplIHRoZSBibG9jay4KLQlMb2NhbFJlQWxsb2MoKTogU2FtZSBmb3IgTE1FTV9NT0RJRlkuCi0JCi0gICAgICAgICogW2NvbnRyb2xzL2xpc3Rib3guY10KLQlGaXhlZCBhIGJ1ZyBpbiBMaXN0Qm94RGlyZWN0b3J5IHRoYXQgcHJldmVudGVkIGNvbW1kbGcgZnJvbSB3b3JraW5nLgotCUNoZWNrIGZvciBlcnJvcnMgaW4gc29tZSBtb3JlIHBsYWNlcy4KLQotICAgICAgICAqIFtpZjE2MzIvZ2RpLnNwZWNdIFtpZjE2MzIvdXNlci5zcGVjXQotCTE2IGJpdCBjYWxsYmFjayBmdW5jdGlvbnMgc2hvdWxkIGJlIHBhc3NlZCBhcyBzZWdwdHJzLgotCQotCSogW2luY2x1ZGUvZGxscy5oXSBbbG9hZGVyL25lX2ltYWdlLmNdIFtsb2FkZXIvc2VsZWN0b3IuY10KLQlbbG9hZGVyL2xpYnJhcnkuY10KLQlQcmV2ZW50IGEgRExMIGZyb20gYmVpbmcgaW5pdGlhbGl6ZWQgdHdpY2UgKEJvcmxhbmRzIFJlc291cmNlCi0JV29ya3Nob3AgdXNlZCB0byBkbyB0aGlzKS4KLQlQcm92aWRlIGFuIGFkZGl0aW9uYWwgZmxhZyBmb3IgZWFjaCB3X2ZpbGUgdGhhdCBpbmRpY2F0ZXMgd2hldGhlcgotCWl0J3MgYW4gRVhFIG9yIGEgRExMLCBmb3IgY29tYmluYXRpb25zIGxpa2UgcGJydXNoLmV4ZS8uZGxsLgotCQotCSogW2NvbnRyb2xzL2J1dHRvbi5jXQotCUhhbmRsZSBMQlVUVE9OVVAgbWVzc2FnZXMgZXZlbiBpZiB0aGUgYnV0dG9uIG5vIGxvbmdlciBoYXMgdGhlCi0JY2FwdHVyZSAoZm9yIFdpbkhlbHApLgotCQotCSogW2luY2x1ZGUvd2ludHlwZXMuaF0KLQlGQVJQUk9DIGlzIG5vdyBhIHNlZ3B0ciBmb3IgdGhlIGVtdWxhdG9yIGFuZCBhIGZ1bmN0aW9uCi0JcG9pbnRlciBmb3IgdGhlIGxpYnJhcnkuCi0JCi0JKiBbbWlzYy9jb21tZGxnLmNdIFttaXNjL2NvbW1kbGcuaF0KLQlDbGVhbmVkIHRoZSBmaWxlIGRpYWxvZ3MgdXAgYSBsaXR0bGUuIFRoZXkgbm93IHdvcmsgcmVhc29uYWJseSB3ZWxsLAotCWFsdGhvdWdoIHRoZXJlIGFyZSBzdGlsbCBzb21lIHByb2JsZW1zIChlLmcuIGZpbGVzIGFyZSBpbml0aWFsbHkKLSAgICAgICAgaW52aXNpYmxlKS4KLQotCSogW3dpbmRvd3MvY2xhc3MuY10gW2lmMTYzMi91c2VyLnNwZWNdIFtpbmNsdWRlL3dpbmRvd3MuaF0KLQlHZXRDbGFzc0luZm8oKSBtdXN0IHRha2UgYSBzZWdwdHIsIGFzIGl0IGNoZWNrcyB3aGV0aGVyIHRoZQotCWhpZ2h3b3JkIGlzIHplcm8uCi0JR2V0Q2xhc3NOYW1lKCkgY2FsbGVkIHRoZSB3cm9uZyBhdG9tIGZ1bmN0aW9uLiBObyBzdXJwcmlzZSBpdCBkaWRuJ3QKLSAgICAgICAgZmluZCBhbnl0aGluZy4KLQotCSogW21pc2MvbHN0ci5jXQotCUFuc2lUb09lbSgpIGFuZCBPZW1Ub0Fuc2koKSBkaWRuJ3QgdGVybWluYXRlIHRoZSBzdHJpbmdzLiBGaXhlZC4KLSAgICAgICAgUmVtb3ZlZCBzb21lIHdhcm5pbmdzLgotCi0JKiBbaWYxNjMyL3JlbGF5LmNdIFtpZjE2MzIvZGRlbWwuc3BlY10gW2luY2x1ZGUvZGxscy5oXQotCU5ldyBzcGVjIGZpbGUgZm9yIHRoZSAzLjEgRERFTUwgRERMLiAKLQotCSogW2NvbnRyb2xzL21lbnUuY10KLQlTbWFsbCBmaXggdG8gQ2hhbmdlTWVudSAtIG1hc2sgb3V0IHRoZSBvYnNvbGV0ZSBmbGFncwotCShNRl9BUFBFTkQgPT0gTUZfT1dORVJEUkFXLCB0aGlzIGxlZCB0byBwcm9ibGVtcykuIEl0IGFsc28gaGFkCi0JcHJvYmxlbXMgd2l0aCB0aGUgTUZfQllQT1NJVElPTiBmbGFnLgotCi0gICAgICAgICogW3dpbmRvd3MvbWVzc2FnZS5jXQotICAgICAgICBTZW5kTWVzc2FnZSgpOiBjYWxsIHRoZSBXSF9DQUxMV05EUFJPQyBob29rIGZ1bmN0aW9uLiBUaGlzIGlzIHJhdGhlcgotICAgICAgICB1Z2x5LCBJJ20gYWZyYWlkLiBXaW5kb3dzIHByb2JhYmx5IHBhc3NlcyBhIHBvaW50ZXIgdG8gdGhlIDE2IGJpdAotICAgICAgICBzdGFjayBmb3Igc3BlZWQgcmVhc29ucy4KLQkKLSAgICAgICAgKiBbd2luZG93cy9ob29rLmNdIFtpbmNsdWRlL3dpbmRvd3MuaF0KLSAgICAgICAgU2V0L0hvb2tXaW5kb3dzSG9vaygpIHNob3VsZG4ndCBqdXN0IGNhbGwgdGhlaXIgKkV4IGNvdW50ZXJwYXJ0cywgYXMKLSAgICAgICAgdGhleSBoYXZlIHNsaWdodGx5IGRpZmZlcmVudCBzZW1hbnRpY3MuCi0gICAgICAgIE1TIEhlYXJ0cyBub3cgd29ya3Mgc29tZXdoYXQsIGlmIHlvdSBkaXNhYmxlIHRoZSBuZXcgYnVpbHRpbiBEREVNTC4KLSAgICAgICAgVGhlIGdyYXBoaWNzIGFyZSBjb21wbGV0ZWx5IG1lc3NlZCB1cCwgdGhvdWdoLgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1TdW4gQXByICAyIDE4OjMxOjEyIDE5OTUgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQHN1bnNpdGUudW5jLmVkdSkKLQotCSogW0NvbmZpZ3VyZV0gW2lmMTYzMi9JbWFrZWZpbGVdCi0JUmVtb3ZlZCBuZXcgYnVpbGQgYW5kIHNob3J0IG5hbWVzIG9wdGlvbnMuCi0KLQkqIFtpZjE2MzIvKi5jXSBbdG9vbHMvYnVpbGQuY10KLQlJbXBsZW1lbnRlZCBjb21waWxlZCBjYWxsLWJhY2sgZnVuY3Rpb25zIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2U7Ci0JYWxsIHRoZSByZWxheSBjb2RlIGlzIG5vdyBkb25lIGluIGFzc2VtYmx5IGNvZGUgZ2VuZXJhdGVkIGJ5IHRoZQotCWJ1aWxkIHByb2dyYW0uCi0JUmVsYXkgY29kZSBpcyBubyBsb25nZXIgZGVwZW5kZW50IG9uIGJlaW5nIGxvYWRlZCBiZWxvdyA2NEsuCi0KLQkqIFtsb2FkZXIvcmVzb3VyY2UuY10KLQlGaXhlZCBtZW1vcnkgbGVhayBpbiBMb2FkU3RyaW5nKCkuIEEgZml4IHdpbGwgYWxzbyBiZSBuZWVkZWQgZm9yCi0Jb3RoZXIgcmVzb3VyY2VzLgotCi0JKiBbbWVtb3J5L2dsb2JhbC5jXQotCUltcGxlbWVudGVkIGdsb2JhbCBoZWFwIGFyZW5hcywgc28gd2UgY2FuIHN0b3JlIGluZm9ybWF0aW9ucyBhYm91dAotCWdsb2JhbCBibG9ja3MsIGxpa2UgbG9jayBjb3VudHMgb3Igb3duZXIgaGFuZGxlLgotCUltcGxlbWVudGVkIEZhckdldE93bmVyKCkgYW5kIEZhclNldE93bmVyKCkuCi0JSW1wbGVtZW50ZWQgZ2xvYmFsIGhlYXAgVE9PTEhFTFAgZnVuY3Rpb25zLgotCi0JKiBbbWVtb3J5L3NlbGVjdG9yLmNdCi0JQnVnIGZpeDogaXQgd2FzIG5vdCBwb3NzaWJsZSB0byByZS11c2UgYSBmcmVlIHNlbGVjdG9yLgotCi1TdW4gQXByIDIgMDE6MzQ6NTIgMTk5NSBDb25zdGFudGluZSBTYXB1bnR6YWtpcyAgKGNzYXB1bnR6QG1pdC5lZHUpCi0KLQkqICBbY29udHJvbHMvbGlzdGJveC5jXQotCU1ham9yIHdvcmsgb24gbGlzdGJveCBjb2RlCi0gICAgICAgICAtIE1hbnkgYnVncyBmaXhlZCAoc3RpbGwgbWFueSBidWdzKQotICAgICAgICAgLSBNb3JlIG1lc3NhZ2VzIHN1cHBvcnRlZAotICAgICAgICAgLSBDb2RlIHNpbXBsaWZpZWQKLQotRnJpIE1hciAzMSAwMzoyNzoxNiBFU1QgMTk5NSBXaWxsaWFtIE1hZ3JvICh3bWFncm9AdGMuY29ybmVsbC5lZHUpCi0KLQkqIFtjb250cm9scy9lZGl0LmNdCi0JTG90cyBvZiBidWcgZml4ZXMgcmVsYXRlZCB0byBkaWFwcGVhcmluZyB0ZXh0LCBsb3N0IGNhcmV0cywKLQloaWdobGlnaHRpbmcsIHNlZ21lbnRhdGlvbiBmYXVsdHMsIG9jY3VyYW5jZSBvZiByYW5kb20KLQljaGFyYWN0ZXJzLCBpbnNlcnRpb24gb2YgY2hhcmFjdGVycyBvdmVyIHNlbGVjdGlvbiwgbWlzcGxhY2VkCi0JY2FyZXQgbG9jYXRpb24sIGRpc3BsYXkgY29ycnVwdGlvbiwgZW5kIG9mIGxpbmUgYmVoYXZpb3IsIGV0Yy4KLQotCSogW2NvbnRyb2xzL3dpZGdldHMuY10KLQlFRElUIGNsYXNzIGRvZXNuJ3Qgd2FudCB0byB1c2UgQ1NfUEFSRU5UREMgZmxhZy4KLQotVGh1IE1hciAzMCAyMDo1ODoyNSAxOTk1ICAgQmVybmQgU2NobWlkdCA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+Ci0gICAgICAgIAotCSogW2xvYWRlci9zZWxlY3Rvci5jXQotCSAgRml4dXBGdW5jdGlvblByb2xvZ3MoKSBzaG91bGQgYWxzbyBoYW5kbGUgbXVsdGlwbGUgZGF0YSBtb2R1bGVzLgotCSAgKHRoaXMgYnVnIG9ubHkgYmVjYW1lIHZpc2libGUgYmVjYXVzZSBNYWtlUHJvY0luc3RhbmNlKCkgd2FzIGZpeGVkCi0JICBpbiA5NTAzMTkpCi0JCi0JKiBbbWlzYy9kb3Nmcy5jXQotCSAgU2ltcGxpZmllZCBET1NfU2ltcGxpZnlQYXRoLgotCSAgU21hbGwgZml4IHRvIERPU19vcGVuZGlyIHRvIHJldXNlIGFuIGVudHJ5IGlmIGFuIG9wZW4gZGlyZWN0b3J5Ci0JICBpcyBvcGVuZWQgYWdhaW4sIHRvIHByZXZlbnQgInRvbyBtYW55IG9wZW4gZGlyZWN0b3JpZXMiIG1lc3NhZ2VzLgotCi1UaHUgTWFyIDMwIDEyOjA1OjA1IDE5OTUgTWFydGluIHZvbiBMb2V3aXMgIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+Ci0KLQkqIFtpZjE2MzIvY29tcG9iai5zcGVjXVtpbmNsdWRlL2NvbXBvYmouaF1bbWlzYy9jb21wb2JqLmNdCi0JQ29EaXNjb25uZWN0T2JqZWN0OiBuZXcgc3R1YiBmdW5jdGlvbgotCi0JKiBbaW5jbHVkZS9tc2Rvcy5oXQotCWZpeCBET1NWRVJTSU9OCi0KLQkqIFtsb2FkZXIvbmVfaW1hZ2UuY10KLQlORV9GaXh1cFNlZ21lbnQ6IEJlIG1vcmUgZ2VuZXJvdXMgb24gYWRkaXRpdmUgZml4dXBzCi0KLQkqIFtpZjE2MzIvdXNlci5zcGVjXVttaXNjL25ldHdvcmsuY10KLQlBZGQgbW9yZSBXTmV0KiBzdHVicwotCi1XZWQgTWFyIDI5IDExOjQ3OjIyIDE5OTUgICBCZXJuZCBTY2htaWR0IDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KLQotICAgICAgICAqIFtjb250cm9scy9saXN0Ym94LmNdCi0JICBEbGdEaXJMaXN0KCk6IHNlbmQgc2VncHRyIGluc3RlYWQgb2YgbGluZWFyIHBvaW50ZXIgCi0JICBpbiBtZXNzYWdlIHRvIHN0YXRpYyBjb250cm9sCi0JKiBbY29udHJvbHMvbWVudS5jXQotCSAgVHJpZWQgdG8gaW1wbGVtZW50IG93bmVyZHJhd24gbWVudWl0ZW1zLiBEb2Vzbid0IHdvcmsuCi0JKiBbaWYxNjMyL2dkaS5zcGVjXSBbaW5jbHVkZS93aW5kb3dzLmhdIFtvYmplY3RzL2ZvbnQuY10KLQkgIFByb3ZpZGUgYSBzdHViIGZvciBHZXRSYXN0ZXJpemVyQ2FwcygpCi0JKiBbbG9hZGVyL3NlbGVjdG9yLmNdCi0JICBQYXNzIGVuZCBhZGRyZXNzIGluc3RlYWQgb2YgbGVuZ3RoIHRvIExvY2FsSW5pdCgpIGluIAotCSAgQ3JlYXRlU2VsZWN0b3JzKCkKLQkqIFttZW1vcnkvbG9jYWwuY10KLQkgIExvY2FsSW5pdCgpOiBJZiB0aGVyZSdzIGFscmVhZHkgYSBsb2NhbCBoZWFwIGluIHRoZSBzZWdtZW50LCBkbwotCSAgbm90aGluZyBhbmQgcmV0dXJuIFRSVUUKLQkqIFtvYmplY3RzL2xpbmVkZGEuY10KLQkgIFJlcGxhY2VkIGJ1Z2d5IExpbmVEREEoKSB3aXRoIGEgQnJlc2VuaGFtIGFsZ29yaXRobS4gU2hvdWxkIHdvcmsKLQkgIG5vdy4KLQkqIFt3aW5kb3dzL2N1cnNvci5jXQotCSAgTG9hZEN1cnNvcigpL0NyZWF0ZUN1cnNvcigpOiBDbGVhbmVkIHVwIHRoZSBtZXNzLiBOZWVkcyBzb21lCi0JICBtb3JlIHdvcmsgc3RpbGwuCi0KLVR1ZSBNYXIgMjEgMTc6NTQ6NDMgMTk5NSAgIEJlcm5kIFNjaG1pZHQgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgotCi0gICAgICAgICogW2lmMTYzMi9yZWxheS5jXSBbaWYxNjMyL2NhbGxiYWNrLmNdIFtpbmNsdWRlL2RsbHMuaF0KLQkgIFtpZjE2MzIvd2lucHJvY3Muc3BlY10gW2lmMTYzMi93aW5wcm9jcy5jXSBbaW5jbHVkZS93aW5wcm9jcy5oXQotCSAgW2NvbnRyb2xzL3dpZGdldHMuY10gW21pc2Mvc2hlbGwuY10gW21pc2MvY29tbWRsZy5jXQotCSAgW3dpbmRvd3Mvbm9uY2xpZW50LmNdIFttaXNjL21lc3NhZ2UuY10KLQkgIEFkZGVkIGEgbmV3IGJ1aWx0aW4gRExMIHRoYXQgcHJvdmlkZXMgMTYgYml0IGVudHJ5IHBvaW50cyBmb3IgYWxsCi0JICB0aGUgRGVmKlByb2NzIChEZWZEbGdQcm9jLCBCdXR0b25Qcm9jIGV0Yy4pLiBPV0wgcHJvZ3JhbXMgd29yawotCSAgYWdhaW4uCi0JKiBbbWlzYy9zaGVsbC5jXQotCSAgUmVnT3BlbktleSgpL1JlZ0NyZWF0ZUtleSgpIGJ1Z3MgZml4ZWQuCi0gICAgICAgICogW2xvYWRlci9uZV9pbWFnZS5jXQotCSAgU2tpcHBpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9mIGEgRExMIHdoZW4gQ1MgPT0gMCB3YXMgYnJva2VuLgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1TdW4gTWFyIDE5IDE2OjMwOjIwIDE5OTUgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQHN1bnNpdGUudW5jLmVkdSkKLQotCSogWyovKl0KLQlJbXBsZW1lbnRlZCBhIG5ldyBtZW1vcnkgbWFwcGluZyBzY2hlbWUuIFRoZXJlJ3Mgbm8gbG9uZ2VyIGEKLQlvbmUtdG8tb25lIG1hcHBpbmcgYmV0d2VlbiAxNi1iaXQgYW5kIDMyLWJpdCBwb2ludGVycy4gUGxlYXNlIHNlZQotCWZpbGUgREVWRUxPUEVSUy1ISU5UUyBmb3IgdGVjaG5pY2FsIGRldGFpbHMuCi0KLQkqIFtjb250cm9scy9zY3JvbGwuY10KLQlGaXhlZCBidWcgd2hlbiBkcmFnZ2luZyBtb3VzZSBpbiBob3Jpem9udGFsIHNjcm9sbGJhcnMuCi0KLQkqIFt0b29scy9idWlsZC5jXSBbaWYxNjMyLyouc3BlY10KLQlSZW1vdmVkIHN1cHBvcnQgZm9yIEMgY2FsbGJhY2sgZnVuY3Rpb25zIGFuZCBmb3IgcmUtb3JkZXJpbmcKLQlvZiB0aGUgMzItYml0IGFyZ3VtZW50cywgYXMgdGhlc2Ugd2VyZSBuZXZlciB1c2VkLiBUaGlzIHNob3VsZAotCWFsbG93IGEgbW9yZSBlZmZpY2llbnQgY2FsbGJhY2sgc2NoZW1lIHRvIGJlIGltcGxlbWVudGVkLgotCi0JKiBbaWYxNjMyL29sZWNsaS5zcGVjXQotCVJlZHVjZWQgdGhlIG51bWJlciBvZiBlbnRyaWVzIHRvIG1ha2UgdGhlIDE2LWJpdCBjb2RlIGZpdCBpbiA2NGsuCi0JVGhpcyBsaW1pdGF0aW9uIHdpbGwgc29vbiBiZSByZW1vdmVkLgotCi0JKiBbbG9hZGVyL2xkdC5jXQotCVJld3JvdGUgTERUIG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMgYW5kIGltcGxlbWVudGVkIExEVF9HZXRFbnRyeSgpLgotCi0JKiBbbWVtb3J5L2dsb2JhbC5jXQotCVJld3JvdGUgR2xvYmFsKigpIHJvdXRpbmVzIHRvIHVzZSB0aGUgbmV3IHNlbGVjdG9yIGFsbG9jYXRpb24KLQltZWNoYW5pc20uCi0KLQkqIFttZW1vcnkvbG9jYWwuY10KLQlSZXdyb3RlIGxvY2FsIGhlYXAgaGFuZGxpbmcgdG8gdXNlIGEgV2luZG93cy1jb21wYXRpYmxlIGxheW91dAotCShub3QgcmVhbGx5IGZpbmlzaGVkIHlldCkuCi0JSW1wbGVtZW50ZWQgVE9PTEhFTFAgaGVhcC13YWxraW5nIHJvdXRpbmVzLgotCi0JKiBbbWVtb3J5L3NlbGVjdG9yLmNdCi0JSW1wbGVtZW50ZWQgTERUIG1hbmlwdWxhdGlvbiBBUEkgZnVuY3Rpb25zLgotCi1UdWUgTWFyIDE0IDE5OjUwOjI4IEVTVCAxOTk1IFdpbGxpYW0gTWFncm8gKHdtYWdyb0B0Yy5jb3JuZWxsLmVkdSkKLQotCSogW3dpbmRvd3MvZGVmZGxnLmNdCi0JRml4ZWQgcHJvYmxlbSB3aGVyZSBkaWFsb2dzIGNsb3NlZCB1c2luZyB0aGUgU3lzdGVtIG1lbnUgCi0gICAgICAgICgnQ2xvc2UnIGl0ZW0gb3IgZG91YmxlIGNsaWNrIG9uIGNsb3NlIGJveCkgd291bGQKLQloYW5nIFdpbmUuCi0KLVN1biBNYXIgMTIgMTQ6Mjg6MTMgMTk5NSAgTWljaGFlbCBQYXRyYSA8bWlja3lAbWFyaWUucGh5c2lrLlRVLUJlcmxpbi5ERT4KLQotCSogW2NvbnRyb2xzL2xpc3Rib3guY10KLQlSZW1vdmVkIG1vc3Qgb2YgdGhlIHN0YXRlbWVudHMgZm9yIHNlbmRpbmcgYSBub3RpZmljYXRpb24gbWVzc2FnZQotCUxpc3RCb3hEaXJlY3RvcnkoKSwgRGxnRGlyU2VsZWN0KCksIERsZ0Rpckxpc3QoKTogSW1wcm92ZWQgdGhlCi0JY29kZTsgQm9ybGFuZCdzIHN0YW5kYXJkIGZpbGUgb3BlbiBkaWFsb2cgd2lsbCB3b3JrIG5vdy4KLQkKLQkqIFttaXNjL21haW4uY10sIFttaXNjL2ZpbGUuY10sIFttaXNjZW11L2ludDIxLmNdCi0JQWRkZWQgc3VwcG9ydCBmb3IgbmV3IGNvbW1hbmQgbGluZSBvcHRpb24gIi1hbGxvd3JlYWRvbmx5Ii4gSWYgc2V0Ci0JYW4gYXR0ZW1wdCB0byBvcGVuIGEgcmVhZCBvbmx5IGZpbGUgaW4gd3JpdGUgbW9kZSB3aWxsIGJlIGNvbnZlcnRlZCAKLQl0byBvcGVuaW5nIGl0IHJlYWQgb25seSAobWFueSBwcm9ncmFtcyB0cnkgdG8gb3BlbiBhbGwgZmlsZXMgaW4gCi0JcmVhZC93cml0ZSBtb2RlIGV2ZW4gaWYgdGhleSBvbmx5IGludGVuZCB0byByZWFkIGl0IC0gdGhpcyBtaWdodCAKLQljYXVzZSBhIGZldyB1bmRlciBwcm9ibGVtcyB1bmRlciBhbiB1bml4LWxpa2UgZW52aXJvbm1lbnQgd2hlcmUgbW9zdCAKLQlmaWxlcyBhcmUgcmVhZCBvbmx5IGZvciBhICJub3JtYWwiIHVzZXIpCi0KLQkqIFtsb2FkZXIvc2VsZWN0b3IuY10KLQlHZXRNZW1vcnlSZWZlcmVuY2UoKTogQWRkZWQgc3VwcG9ydCBmb3IgX19BSEluY3IgYW5kIF9fQUhTaGlmdAotCi0JKiBbbWlzYy9kb3NfZnMuY10KLQlET1NfU2ltcGxpZnlQYXRoKCk6IFRoaXMgcm91dGluZSBzaW1wbGlmaWVzIHBhdGggbmFtZXMgKCBlLmcuLCBpdAotCXdpbGwgY2hhbmdlICIvdXNyLy8vbG9jYWwvYmluLy4uL2xpYi8vYSIgdG8gIi91c3IvbG9jYWwvbGliL2EiICkKLQltYXRjaCgpOiByZXdyaXR0ZW4KLQkKLQkqIFtvYmplY3RzL3RleHQuY10KLQlURVhUX05leHRMaW5lKCk6IFJlbW92ZWQgYSBidWcgaW4gdGhlIGhhbmRsaW5nIG9mIExGJ3MKLQotCSogW21pc2NlbXUvaW50MjEuY10KLQlHZXRGaWxlRGF0ZVRpbWUoKTogRml4ZWQuIFNldEZpbGVEYXRlVGltZSgpIGlzIHN0aWxsIGJyb2tlbi4KLQotU2F0IE1hciAxMSAxOTo0NjoxOSAxOTk1ICBNYXJ0aW4gdm9uIExvZXdpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KLQotCSogW2NvbnRyb2xzL21lbnUuY10KLQlDaGFuZ2VNZW51OiBkZWZhdWx0cyB0byBNRl9JTlNFUlQKLQlJbnNlcnRNZW51OiBhbGxvdyBpbnNlcnRpb24gZXZlbiBpZiBwb3NpdGlvbiBpcyBvbmUgYWZ0ZXIgbGFzdCBpdGVtCi0KLQkqIFtpZjE2MzIvSW1ha2VmaWxlXSBbaWYxNjMyL2NvbXBvYmouc3BlY10gW2lmMTYzMi9yZWxheS5jXQotCSAgW2lmMTYzMi9zdG9yYWdlLnNwZWNdIFtpbmNsdWRlL2RsbHMuaF0KLQlBZGRlZCBzdHVicyBmb3IgU1RPUkFHRS5ETEwgYW5kIENPTVBPQkouRExMCi0KLQkqIFtpZjE2MzIvdXNlci5zcGVjXSBbd2luZG93cy9tZXNzYWdlLmNdCi0JSW5TZW5kTWVzc2FnZTogbmV3IGZ1bmN0aW9uCi0KLQkqIFtpbmNsdWRlL25lZXhlLmhdW2luY2x1ZGUvbmVfaW1hZ2UuY10KLQlORV9GaXh1cFNlZ21lbnQ6IGZpeGVkIGhhbmRsaW5nIG9mIGFkZGl0aXZlIHJlY29yZHMKLQotCSogW2xvYWRlci9zZWxlY3Rvci5jXQotCUdldEVudHJ5RExMTmFtZTogcmV0dXJuIE5VTEwgaW5zdGVhZCBvZiBwb2ludGVyIHRvIERMTC4wIGlmIG5vdCBmb3VuZAotCi0JKiBbbG9hZGVyL3NpZ25hbC5jXQotCXdpbl9mYXVsdDogRW50ZXIgZGVidWdnZXIgb24gU0lHRlBFLCB0b28KLQotV2VkIE1hciAgMSAyMTo0Nzo0MiAxOTk1ICBDYW1lcm9uIEhlaWRlICAoaGVpZGVAZWUudWFsYmVydGEuY2EpCi0KLSAgICAgICAgKiBbbWlzY2VtdS9pbnQqLmNdCi0gICAgICAgIFZhcmlvdXMgbWlub3IgbW9kaWZpY2F0aW9ucyB0byB0aGUgY2xvY2sgdGljayBjb3VudGVyLAotICAgICAgICBGaW5kRmlyc3QvRmluZE5leHQgZnVuY3MsIGFuZCBEUEIgaGFuZGxpbmcuCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRodSBNYXIgIDIgMTc6NDQ6MzIgMTk5NSAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAc3Vuc2l0ZS51bmMuZWR1KQotCi0JKiBbbG9hZGVyL3Jlc291cmNlLmNdIFtvYmplY3RzL29lbWJpdG1hcC5jXQotCVJlbW92ZWQgc3lzcmVzIGJpdG1hcCBjb2RlOyB5b3UgbmVlZCBsaWJYcG0gdG8gY29tcGlsZSBub3cuCi0JSW1wbGVtZW50ZWQgTG9hZEljb24oKSBmb3IgT0VNIGljb25zLgotCi0JKiBbaW5jbHVkZS9iaXRtYXBzL29pY18qXQotCUFkZGVkIE9FTSBpY29ucyBpbiBYUE0gZm9ybWF0LgotCi0JKiBbb2JqZWN0cy9kaWIuY10KLQlCdWcgZml4IGluIERyYXdJY29uKCkuCi0KLQkqIFtyYy9zeXNyZXNibS5yY10KLQlSZW1vdmVkOyBhbGwgYml0bWFwcyBhcmUgc3RvcmVkIGluIFhQTSBmb3JtYXQgbm93LgotCi1UdWUgRmViIDI4IDE4OjU0OjI4IDE5OTUgIFRvbWkgTGVwcGlrYW5nYXMgICh0b21pbGVwcEBwYWp1Lm91bHUuZmkpCi0KLQkqIFtjb250cm9scy9lZGl0LmNdCi0JU21hbGwgcGF0Y2ggdG8gZml4IGVkaXQtY29udHJvbCB3aGVuIGl0J3MgY3JlYXRlZCB3aXRoIHRleHQuCi0KLVN1biBGZWIgMjYgMjA6MjI6MTUgMTk5NSAgTWljaGFlbCBWZWtzbGVyICAoZTE2NzgyMjNAdG9jaG5hcGMyLnRlY2huaW9uLmFjLmlsKQotCi0JKiBbdG9vbHMvbWFrZV9kZWJ1Z10KLQlUaGUgY3JlYXRlZCBtYWNyb3Mgd29uJ3QgaGF2ZSBzaWRlIGVmZmVjdHMgYW55bW9yZSB3aGVuIHVzZWQgaW4KLQlhbiAiaWYtZWxzZSIgc3RydWN0dXJlLiBObyBtb3JlIHdhcm5pbmdzIGZyb20gdGhlIGNvbXBpbGVyIHdoZW4KLQljb21waWxlZCB3aXRob3V0IGRlZmluaW5nIERFQlVHX1JVTlRJTUUuCi0gCi1TdW4gRmViIDI2IDIwOjIwOjQ5IDE5OTUgIE1pY2hhZWwgUGF0cmEgPG1pY2t5QG1hcmllLnBoeXNpay5UVS1CZXJsaW4uREU+Ci0KLQkqIFtjb250cm9scy9saXN0Ym94LmNdCi0JTGlzdEJveERlbGV0ZVN0cmluZygpOiBGaXhlZAotCi0JKiBbbG9hZGVyL3NlbGVjdG9yLmNdCi0JR2V0TWVtb3J5UmVmZXJlbmNlKCk6IFdoZW4gc3BlY2lhbCBzZWdtZW50cyBhcmUgcmVmZXJlbmNlZCBieQotCXBzZXVkby1mdW5jdGlvbnMgbGlrZSBfXzAwNDBILCBhIHJlZmVyZW5jZSB0byBhICJub3JtYWwiIHNlZ21lbnQKLQl3aWxsIGJlIHJldHVybmVkIHByZXZlbnRpbmcgdGhlIHByb2dyYW0gZnJvbSBjcmFzaGluZyBhcyBzb29uCi0JYXMgdGhlIHJlZmVyZW5jZWQgc2VnbWVudCBpcyBhY3R1YWxseSBhY2Nlc3NlZC4KLQotU3VuIEZlYiAyNiAxNTo1NToxNCBNRVQgMTk5NSAgTWFydGluIHZvbiBMb2V3aXMgKGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZSkKLQotCSogW0NvbmZpZ3VyZV0KLQlBc2sgZm9yIE9MRSBzdHVicyBhbmQgbWFsbG9jIGRlYnVnZ2luZwotCi0JKiBbSW1ha2VmaWxlXQotCWxpbmsgd2l0aCBsaWJtY2hlY2suYSBpZiBuZWNlc3NhcnkKLQotCSogW2lmMTYzMi9yZWxheS5jXVtpbmNsdWRlL2RsbC5oXVtpZjE2MzIvSW1ha2VmaWxlXQotCUFkZCBPTEUgc3R1YnMsIGluY3JlYXNlIG51bWJlciBvZiBidWlsdGlucwotCWRsbF9uYW1lX3RhYmxlX2VudHJ5X3M6IG5ldyBmaWVsZCBkbGxfaXNfdXNlZAotCi0JKiBbbG9hZGVyL2xpYnJhcnkuY10KLQlHZXRNb2R1bGVIYW5kbGUsTW9kdWxlTmV4dDogQ2hlY2sgZGxsX2lzX3VzZWQKLQotCSogW2xvYWRlci9uZV9pbWFnZS5jXQotCUJhcmsgb24gdW5zdXBwb3J0ZWQgTkVfUkFERFJfTE9XQllURSBmbGFnICh3aGF0IGlzIGl0IHN1cHBvc2VkCi0JdG8gbWVhbiwgYW55d2F5PykKLQotCSogW21pc2Mvb2xlY2xpLmNdW21pc2Mvb2xlc3ZyLmNdCi0JTmV3IGZpbGVzLiBBZGQgdG8gbWlzYy9JbWFrZWZpbGUKLQotCSogW21pc2MvZG9zX2ZzLmNdCi0JRE9TX0dldFVuaXhGaWxlTmFtZTogbWFrZSBhIGNvcHkgb2YgdGhlIGlucHV0IHBhcmFtZXRlciB0byAKLQlwcmV2ZW50IG92ZXJ3cml0aW5nCi0KLQkqIFttaXNjL21haW4uY10KLQlNQUlOX1BhcnNlRExMT3B0aW9uczogbmV3IGZ1bmN0aW9uCi0JTUFJTl9QYXJzZU9wdGlvbnM6IHRyZWF0IC1kbGwgY29tbWFuZCBsaW5lIGZsYWcKLQltYWluOiBhZGQgc3VwcG9ydCBmb3IgbWFsbG9jIGRlYnVnZ2luZwotCi1GcmkgRmViIDI0IDEyOjQzOjI3IDE5OTUgIEVyaWsgU3ZlbmRzZW4gIDx6M2VzdkBrbWQtYWMuZGs+Ci0KLQkqIFtsb2FkZXIvc2lnbmFsLmNdCi0JU21hbGwgcGF0Y2ggZm9yIHBlb3BsZSB1c2luZyBGcmVlQlNELTIuMS4wLgotCi1GcmkgRmViIDE3IDIyOjQ5OjE4IDE5OTUgIE1pZ3VlbCBkZSBJY2F6YSAobWlndWVsQHJveGFubmUubnVjbGVjdS51bmFtLm14KQotCi0JKiBbdG9vbGtpdC9zdXAuY10KLQlBZGRlZCByZXR1cm4gdmFsdWVzIHRvIHRoZSBDYWxsKiByb3V0aW5lcwotCi0JKiBbdG9vbGtpdC93aW5tYWluLmNdCi0JTG9hZCB0aGUgcmVzb3VyY2UgZmlsZSBwcm9wZXJseSBmb3IgV2luZUxpYiBhcHBsaWNhdGlvbnMuCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRodSBGZWIgMTYgMTg6NTc6MzEgMTk5NSAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAc3Vuc2l0ZS51bmMuZWR1KQotCi0JKiBbaWYxNjMyL2NhbGwuU10KLQlPbmx5IHNhdmUgdGhlIGxvd2VyIDE2LWJpdHMgb2YgU1AgYW5kIEJQLgotCi0JKiBbaWYxNjMyL2NhbGxiYWNrLmNdCi0JV2hlbiBjYWxsaW5nIHRvIDE2LWJpdCBjb2RlLCByZXN0b3JlIERTIGZyb20gaXRzIHByZXZpb3VzIHZhbHVlIG9uCi0JZW50cnkgdG8gdGhlIDMyLWJpdCBjb2RlLCBpbnN0ZWFkIG9mIGZyb20gdGhlIGNvZGUgc2VnbWVudCBvd25lci4KLQotCSogW2lmMTYzMi9yZWxheS5jXSBbaW5jbHVkZS9zdGFja2ZyYW1lLmhdCi0JVXNlIGEgc3RydWN0dXJlIHRvIHJlcHJlc2VudCB0aGUgMTYtYml0IHN0YWNrIGZyYW1lIGxheW91dAotCWluc3RlYWQgb2YgaGFyZC1jb2RlZCBvZmZzZXRzLgotCQotCSogW3JjL0ltYWtlZmlsZV0KLQlVc2UgeS50YWIuYyBmb3IgYmlzb24gb3V0cHV0IGZpbGUgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB5YWNjLgotCi0JKiBbdG9vbHMvYnVpbGQuY10KLQlTbWFsbCBvcHRpbWl6YXRpb24gZm9yIGNhbGxzIHRvIDMyLWJpdCBjb2RlLgotCi1TdW4gRmViIDEyIDAzOjE5OjQ3IDE5OTUgIE1pY2hhZWwgVmVrc2xlciAoczE2NzgyMjNAdDIudGVjaG5pb24uYWMuaWwpCi0KLQkqIFt0b29scy9idWlsZC5jXQotCUZpeGVkIGJ1ZyAoaW5mbGljdGVkIGJ5IHByZXZpb3VzIGNoYW5nZSkgLSBTRUdWIG9uIFpNQUdJQyBmaWxlIGZvcm1hdC4KLQotU3VuIEZlYiAxMSAyMDowMDowMCAxOTk1ICBH9nJhbiBUaHluaSAgKGdvcmFuQG5vcnJza2VuLmJpbGRiYXNlbi5zZSkKLQotCSogW2RlYnVnZ2VyL2RiZy55XQotCVJlbW92ZSB1bm5lY2Vzc2FyeSBzeW0tdGFibGUgbG9hZGluZyB3aGVuIHN0b3BwZWQgaW4gMTYtYml0IG1vZGUuCi0KLQkqIFtpbmNsdWRlL3NlZ21lbS5oXSBbbG9hZGVyL3NlbGVjdG9yLmNdCi0gICAgICAgIEFkZGVkIGR5bmFtaWMgYWxsb2N0aW9uIG9mIHNlbGVjdG9ycy4KLSAgICAgICAgRml4ZWQgc29tZSBwcm9ibGVtcyB3aXRoIGxhcmdlIHByb2dyYW1zIFNJR1NFR1YtaW5nIHdoaWxlCi0gICAgICAgIHJ1bm5pbmcgb3V0IG9mIHNlbGVjdG9ycy4KLQotCSogW2luY2x1ZGUvc2VnbWVtLmhdIFtsb2FkZXIvc2VsZWN0b3IuY10gW2lmMTYzMi9jYWxsYmFjay5jXSAKLSAgICAgICAgICBbbWVtb3J5L2dsb2JhbC5jXSBbbWVtb3J5L2hlYXAuY10gW21lbW9yeS9saW5lYXIuY10KLQlVc2UgX19BSFNISUZUIGFuZCBfX0FISU5DUiBpbnN0ZWFkIG9mIDMgYW5kIDguCi0KLU1vbiBGZWIgIDYgMTg6MDc6MzggMTk5NSAgQ2FtZXJvbiBIZWlkZSAgKGhlaWRlQGVlLnVhbGJlcnRhLmNhKQotCi0gICAgICAgICogW21pc2MvZG9zX2ZzLmNdCi0gICAgICAgIEJldHRlciByZWxhdGl2ZSBwYXRoIGhhbmRsaW5nIHdoZW4gY29udmVydGluZyBmaWxlbmFtZXMgYmV0d2VlbgotICAgICAgICBkb3MgYW5kIHVuaXgsIGFsbG93aW5nICcuJyB0byBiZSB1c2VkIGluIHRoZSBXaW5kb3dzIHBhdGguCi0gICAgICAgIFN0YXJ0dXAgd29ya2luZyBkaXIgaXMgbm93IGJhc2VkIG9uIGN1cnJlbnQgd29ya2luZyBkaXIuCi0KLVNhdCBGZWIgIDQgMjE6MjE6MTMgMTk5NSAgTWljaGFlbCBWZWtzbGVyIChzMTY3ODIyM0B0Mi50ZWNobmlvbi5hYy5pbCkKLQotCSogW2lmMTYzMi9yZWxheS5jXSBbaW5jbHVkZS9kbGxzLmhdIFt0b29scy9idWlsZC5jXQotCVNxdWVlemVkIGRhdGEgc3RydWN0dXJlIHRoYXQgcmVmZXJlbmNlcyBpbnRlcm5hbCBkbGwncyAobW9zdGx5Ci0JInN0cnVjdCBkbGxfdGFibGVfZW50cnlfcyIpLiBDYXVzZWQgMjAlIHJlZHVjdGlvbiBpbiBleGVjdXRhYmxlCi0JY29kZSBzaXplLgotCi1GcmkgRmViICAzIDE4OjUzOjE1IDE5OTUgIE1hcnRpbiB2LiBMb2V3aXMgIChsb2V3aXNAbWFyaWUpCi0KLQkqIFtJbWFrZWZpbGVdCi0JbWFrZSB3aW5lLnN5bSBvbmx5IHdoZW4gbWFraW5nIGVtdWxhdG9yCi0KLQkqIFttaXNjL2ZpbGUuY10KLQlPcGVuRmlsZSgpOiByZXBvcnQgYXMgbm90IGltcGxlbWVudGVkIGZvciBXSU5FTElCCi0KLQkqIFttaXNjL3dpbnNvY2suY10KLQlGaXggQ09OVkVSVF9IT1NURU5UIGFuZCBmcmllbmRzIGZvciB1c2Ugd2l0aCBXSU5FTElCCi0KLQkqIFtyYy9JbWFrZWZpbGVdW3JjL3JjLnldW3JjL3BhcnNlci5jXQotCVJlbmFtZSByYy55IHRvIHBhcnNlci55Ci0JVXNlIGZsZXggYW5kIGJpc29uIG9uIFN1bgotCi0JKiBbdG9vbGtpdC9zdXAuY10KLQlDYWxsV2luZG93UHJvYzogZml4IHBhcmFtZXRlciB0eXBlCi0KLQkqIFt3aW5kb3dzL2V2ZW50LmNdCi0JQ29tbWVudGVkICNpZmRlZiBzcGFyYwotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1XZWQgRmViICAxIDE5OjI3OjU1IDE5OTUgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQGxhbWlzdW4uZXBmbC5jaCkKLQotCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdIFt3aW5kb3dzL3dpbnBvcy5jXQotCUltcGxlbWVudGVkIG1heGltaXplZCB3aW5kb3dzLgotCUltcGxlbWVudGVkIGljb24gcG9zaXRpb25pbmcgYW5kIEFycmFuZ2VJY29uaWNXaW5kb3dzKCkuCi0JQnVnIGZpeGVzIGluIFNldFdpbmRvd1BvcygpLgotCi0JKiBbd2luZG93cy9wYWludGluZy5jXQotCUltcGxlbWVudGVkIEdldENvbnRyb2xCcnVzaCgpLgotCVdpbmRvdyBmcmFtZSBpcyBubyBsb25nZXIgY29udGFpbmVkIGluIHRoZSB1cGRhdGUgcmVnaW9uLgotCi0JKiBbd2luZG93cy93aW4uY10KLQlEZXN0cm95IG93bmVkIHdpbmRvd3MgdXBvbiBEZXN0cm95V2luZG93KCkuCi0KLVN1biBKYW4gMjkgMTY6MTc6MjIgMTk5NSAgRGF2aWQgTWV0Y2FsZmUgPGRhdmlkQHByaXNtLmRlbW9uLmNvLnVrPgotCi0JKiBbY29udHJvbHMvZWRpdC5jXQotCUNoYW5nZWQgbGluZSB0ZXJtaW5hdG9yIHRvIFxyXG4gdG8gYmUgY29tcGF0aWJsZSB3aXRoCi0JV2luZG93cy4gIEZpeGVkIGJ1ZyBpbiB0ZXh0IHNlbGVjdGlvbi4KLQotU3VuIEphbiAyOSAxNDoxMDoyMiAxOTk1ICAgQmVybmQgU2NobWlkdCA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+Ci0KLSAgICAgICAqIFttaXNjL3NoZWxsLmNdCi0gICAgICAgUmV3cm90ZSBSZWdDcmVhdGVLZXkgYW5kIFJlZ09wZW5LZXksIHNpbmNlIHRoZXkgd2VyZSBjb21wbGV0ZWx5IGJyb2tlbi4KLSAgICAgICBGaXhlZCBhIGJ1ZyBpbiBSZWdRdWVyeUtleVZhbHVlLiBJbXBsZW1lbnRlZCBSZWdFbnVtS2V5Ci0gICAgICAgVGhlc2UgZnVuY3Rpb25zIG5vdyB3b3JrIHNvbWV3aGF0IG1vcmUgdGhlIHdheSBXaW5kb3dzIHByb2dyYW1zIGV4cGVjdAotICAgICAgIHRoZW0gdG8gd29yay4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotU3VuIEphbiAyMiAxODo1NTozMyAxOTk1ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBsYW1pc3VuLmVwZmwuY2gpCi0KLQkqIFtsb2FkZXIvcmVzb3VyY2UuY10gW29iamVjdHMvZGliLmNdCi0JRml4ZWQgaWNvbiBsb2FkaW5nIGFuZCBkcmF3aW5nLCBub3cgdGhhdCBCaXRCbHQoKSB3b3JrcyBjb3JyZWN0bHkuCi0JCi0JKiBbb2JqZWN0cy9jbGlwcGluZy5jXSBbb2JqZWN0cy9yZWdpb24uY10KLQlJbXBsZW1lbnRlZCBlbGxpcHRpYyByZWdpb25zIHdpdGggYSBzZXQgb2YgcmVjdGFuZ2xlLiBUaGlzIGdyZWF0bHkKLQlzaW1wbGlmaWVzIHRoZSByZWdpb24gY29kZSBhbmQgc2hvdWxkIGJvb3N0IGNsaXBwaW5nIHBlcmZvcm1hbmNlLgotCi0JKiBbb2JqZWN0cy9jb2xvci5jXQotCUZpeGVkIGJ1ZyB0aGF0IGNhdXNlZCBzZWctZmF1bHQgb24gMjRicHAgZGlzcGxheXMuCi0KLQkqIFtvYmplY3RzL2JpdGJsdC5jXQotCUZpeGVkIGJ1ZyB3aGVuIHNocmlua2luZyBhIGJpdG1hcCB0byBtb3JlIHRoYW4gaGFsZiBpdHMgc2l6ZS4KLQotCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KLQlGaXhlZCBidWdzIGluIFBhaW50UmduKCkgYW5kIFBvbHlsaW5lKCkuCi0KLQkqIFt3aW5kb3dzL25vbmNsaWVudC5jXSBbd2luZG93cy9wYWludGluZy5jXSBbd2luZG93cy93aW5wb3MuY10KLQlGaXhlZCBzb21lIHByb2JsZW1zIHdpdGggd2luZG93IGJhY2tncm91bmQgcGFpbnRpbmcuCi0KLVRodSBKYW4gMTIgMTI6MjA6MjUgUFNUIDE5OTUgUm9zcyBCaXJvIChiaXJvQHlnZ2RyYXNpbC5jb20pCi0KLSAgICAgICAqIFt0b29scy9idWlsZC5jXQotICAgICAgICogW3Rvb2xzL25ld2J1aWxkLmNdCi0gICAgICAgKiBbSW1ha2VmaWxlXQotICAgICAgICogW2luY2x1ZGUvd2luZS5oXQotICAgICAgICogW2xvYWRlci9jYWxsLlNdCi0gICAgICAgKiBbbG9hZGVyL3NlbGVjdG9yLmNdCi0gICAgICAgKiBbaW5jbHVkZS9zZWdtZW0uaF0KLSAgICAgICAqIFttaXNjL21haW4uY10KLSAgICAgICBDaGFuZ2VkIHNlbGVjdG9yIGNvZGUgYW5kIDE2LzMyIGJpdCB4ZmVyIGNvZGUgc28gdGhhdCB3aW5lCi0gICAgICAgbm8gbG9uZ2VyIGhhcyB0byBiZSBsb2FkZWQgbG93IGluIG1lbW9yeS4gIENoYW5nZWQgd2luZQotICAgICAgIHRvIHdvcmsgd2l0aCBFTEYgYmluYXJ5IGZvcm1hdHMgdW5kZXIgTGludXguCi0gICAgICAgCi1TYXQgU2VwIDE3IDExOjA4OjQ5IDE5OTQgIEVyaWMgWW91bmdkYWxlICAoZXJpY0Blc3AyMikKLQotCSogW2RlYnVnZ2VyL2RiX2Rpc2FzbS5jXQotCU5ldyBpbnN0cnVjdGlvbiBkaXNhc3NlbWJsZXIgLSBib3Jyb3dlZCBmcm9tIE1hY2gga2VybmVsLiAgSGFzIGEKLQlCU0Qgc3R5bGUgb2YgbGljZW5zZSBhcyBvcHBvc2VkIHRvIHRoZSBnZGIgY29kZSB3ZSB3ZXJlIHByZXZpb3VzbHkKLQl1c2luZyB3aGljaCB3YXMgdW5kZXIgdGhlIEdQTC4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotTW9uIEphbiAgOSAxODoyNzoxMSAxOTk1ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBsYW1pc3VuLmVwZmwuY2gpCi0KLQkqIFtJbWFrZWZpbGVdCi0JQ29tcGlsaW5nIHdpdGggLVdhbGwgZmxhZy4KLQotCSogWyovKl0KLQlGaXhlcyB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIGNvbXBpbGF0aW9uIHdhcm5pbmdzLgotCi0JKiBbb2JqZWN0cy9iaXRibHQuY10KLQlGaXhlZCBCaXRCbHQoKSBhbmQgdXNlZCB0aGUgc2FtZSBjb2RlIHRvIHJld3JpdGUgUGF0Qmx0KCkgYW5kCi0JU3RyZXRjaEJsdCgpLiBUaGUgdGhyZWUgKkJsdCgpIGZ1bmN0aW9ucyBzaG91bGQgbm93IGJlIGNvcnJlY3QgaW4KLQlldmVyeSBjYXNlIChmYW1vdXMgbGFzdCB3b3JkcykuCi0KLQkqIFtvYmplY3RzL2JydXNoLmNdIFtvYmplY3RzL2RpdGhlci5jXQotCU1lcmdlZCB0aGUgdHdvIGZpbGVzIGludG8gYnJ1c2guYwotCi0JKiBbb2JqZWN0cy9kYy5jXQotCUZpeGVkIGJ1ZyB3aGVuIHRoZSBXaW5kb3dzIHByb2dyYW1zIGZvcmdldCB0byByZS1zZWxlY3QgdGhlCi0Jb3JpZ2luYWwgYml0bWFwIGluIGEgbWVtb3J5IERDLgotCi0JKiBbb2JqZWN0cy9mb250LmNdCi0JVHR5IHRvIHVzZSAnZml4ZWQnIGZvbnQgd2hlbiB0aGUgc3lzdGVtIGZvbnQgY2FuJ3QgYmUgZm91bmQuCi0KLQkqIFt3aW5kb3dzL2RpYWxvZy5jXQotCVRlbnRhdGl2ZSBmaXggdG8gbWFrZSBkaWFsb2dzIGxvb2sgYmV0dGVyIHdoZW4gdXNpbmcgZml4ZWQtd2lkdGgKLQlmb250cy4KLQotCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KLQlQYXJ0aWFsbHkgaW1wbGVtZW50ZWQgdGhlIFBTX0lOU0lERUZSQU1FIHBlbiBzdHlsZS4KLQotCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCi0JRml4IGZvciB3aW5kb3dzIHRoYXQgaGF2ZSB0aGUgV1NfRVhfRExHTU9EQUxGUkFNRSBzdHlsZSBiaXQKLQl3aXRob3V0IHRoZSBXU19ETEdGUkFNRSBzdHlsZS4KLQotVGh1IEphbiAgNSAxMzozNzo0MiAxOTk1ICBDYW1lcm9uIEhlaWRlICAoaGVpZGVAZWUudWFsYmVydGEuY2EpCi0KLQkqIFttZW1vcnkvZ2xvYmFsLmNdCi0JR2xvYmFsQ29tcGFjdCBzaG91bGQgbm93IHJldHVybiB0aGUgY29ycmVjdCB2YWx1ZSB3aGVuIHRoZQotCWxhcmdlc3QgcnVuIG9mIGZyZWUgYmxvY2tzIGluY2x1ZGVzIHRoZSBsYXN0IGJsb2NrLgotCi0JKiBbd2luZG93cy9tZGkuY10KLQlUaWxpbmcgYW5kIGNhc2NhZGluZyB3aW5kb3dzIHdpdGhvdXQgYW55IE1ESSBjaGlsZHJlbiBzaG91bGQKLQlubyBsb25nZXIgY3Jhc2ggKGFzc3VtaW5nIG5vLW9wIGlzIHRoZSBjb3JyZWN0IHRoaW5nIHRvIGRvKS4KLQotU3VuIEphbiAgMSAyMzozMDoyNSAxOTk1ICBGb25zIEJvdG1hbiAgPGJvdG1hbkByYWJvLm5sPgotCi0JKiBbb2JqZWN0cy9mb250LmNdCi0JR2V0VGV4dEV4dGVudFBvaW50OiBmaXhlZCBkZWJ1ZyBvdXRwdXQsIHN0ciBpcyBjb3VudGVkIHN0cmluZywgbm90Ci0gICAgICAgIHplcm8gdGVybWluYXRlZC4KLQotCSogW2lmMTYzMi9yZWxheS5jXQotCURMTFJlbGF5OiB3aGVuIGRlYnVnZ2luZ19zdGFjayBnb3Qgc2VndiwgYWRkZWQgdXBwZXIgYm91bmQgZm9yCi0gICAgICAgIHN0YWNrIGR1bXAuCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVR1ZSBEZWMgMjcgMTM6MzU6MTYgMTk5NCAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAbGFtaXN1bi5lcGZsLmNoKQotCi0JKiBbKi9JbWFrZWZpbGVdCi0JQWxsIG9iamVjdHMgZmlsZXMgYXJlIG5vdyBrZXB0IGluIHRoZWlyIHJlc3BlY3RpdmUgZGlyZWN0b3J5LgotCi0JKiBbUkVBRE1FXQotCVJld3JvdGUgbW9zdCBvZiBpdC4KLQotCSogW29iamVjdHMvYml0Ymx0LmNdCi0JUmV3cm90ZSBCaXRCbHQoKSB0byBsb29rIHJpZ2h0IGluIGV2ZXJ5IGNhc2UsIHdoaWxlIG1pbmltaXppbmcKLQl0aGUgaW1wYWN0IG9uIHBlcmZvcm1hbmNlLiBOb3QgcmVhbGx5IGZpbmlzaGVkIHlldC4KLQotCSogW29iamVjdHMvYml0bWFwLmNdIFtvYmplY3RzL2RjLmNdCi0JRml4ZWQgYnVnIHdpdGggcGF0dGVybiBicnVzaGVzLgotCi0JKiBbb2JqZWN0cy9jbGlwcGluZy5jXSBbd2luZG93cy9wYWludGluZy5jXQotCUZpeGVzIGZvciBsb2dpY2FsIGNvb3JkaW5hdGVzLgotCi0JKiBbb2JqZWN0cy9jb2xvci5jXSBbd2luZG93cy9ncmFwaGljcy5jXQotCUZpeGVkIEdldFBpeGVsKCkgdG8gcmV0dXJuIHRoZSBjb3JyZWN0IGNvbG9yLCBhbmQgbWFkZSBpdCBmYXN0ZXIuCi0KLQkqIFtvYmplY3RzL3JlZ2lvbi5jXQotCUZpeGVkIGJ1ZyBpbiBDb21iaW5lUmduKCkgd2hlbiBvbmUgb2YgdGhlIHJlZ2lvbiBpcyBlbXB0eS4KLQotRnJpIERlYyAyMiAwMTo0Mjo1NyBNRVQgMTk5NAkJICBEYWcgQXNoZWltIChkYXNoQGlmaS51aW8ubm8pCi0KLQkqIFtDb25maWd1cmVdCi0JRG9uJ3QgYXNzdW1lIHRoYXQgZXhwciBoYW5kbGVzICc9PScsIHVzZSAnPScgaW5zdGVhZC4KLQlHaXZlIGEgKGhvcGVmdWxseSBpbmZvcm1hdGl2ZSkgbWVzc2FnZSBpZiBpbWFrZSBmYWlscy4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotV2VkIERlYyAgNyAxNDo1MjoyNSAxOTk0ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBsYW1pc3VuLmVwZmwuY2gpCi0KLQkqIFtjb250cm9scy9saXN0Ym94LmNdCi0JRml4ZWQgcHJvYmxlbXMgZHVlIHRvIG5ldyBzY3JvbGwtYmFyIGNvZGUuCi0KLQkqIFtsb2FkZXIvc2lnbmFsLmNdIFttaXNjZW11L2lvcG9ydHMuY10KLQlIYW5kbGUgSS9PIG9wY29kZXMgdGhhdCB1c2UgYW4gYWJzb2x1dGUgYWRkcmVzcy4KLQotCSogW29iamVjdHMvdGV4dC5jXQotCUltcGxlbWVudGVkIFRhYmJlZFRleHRPdXQoKS4KLQotU2F0IERlYyAgMyAxODo1MzowOCAxOTk0ICBLZW5uZXRoIE1hY0RvbmFsZCAgPEsuTWFjRG9uYWxkQGVkLmFjLnVrPgotCi0JKiBbb2JqZWN0cy9tZXRhZmlsZS5jXQotCUltcGxlbWVudGVkIEdldE1ldGFmaWxlKCkuCi0JRml4ZWQgYnVnIGluIFBsYXlNZXRhRmlsZSgpIHdoZW4gcmVhZGluZyBkaXNjIGJhc2VkIG1ldGFmaWxlIHJlY29yZHMuCi0JQWRkZWQgTUVUQV9QT0xZUE9MWUdPTiwgTUVUQV9ERUxFVEVPQkpFQ1QgYW5kIE1FVEFfRU9GIHRvIAotCVBsYXlNZXRhRmlsZVJlY29yZCgpLgotCQotV2VkIE5vdiAzMCAwNjozMjoyNSAxOTk0ICBNYXJ0aW4gdm9uIExvZXdpcyAgKG1hcnRpbkBjcy5jc3VmcmVzbm8uZWR1KQotCi0JKiBbSW1ha2VmaWxlXQotCXdpbmUuc3ltOiBSZW1vdmUgZ2NjMl9jb21waWxlZCBhbmQgZnJpZW5kcwotCi0JKiBbY29udHJvbHMvbGlzdGJveC5jXVtpZjE2MzIvcmVsYXkuY11baWYxNjMyL3JlbGF5LmNdCi0JICBbbG9hZGVyL3Jlc291cmNlLmNdW21lbW9yeS9oZWFwLmNdW29iamVjdHMvZGliLmNdW3dpbmRvd3MvZGlhbG9nLmNdCi0JUmVwbGFjZSAjaWZkZWYgREVCVUdfWFhYIHdpdGggaWYoZGVidWdnaW5nX3h4eCl7Ci0KLQkqIFtpZjE2MzIvY2FsbC5TXQotCUNhbGxUb0xpYk1haW46IE5ldyBmdW5jdGlvbgotCi0JKiBbaWYxNjMyL3JlbGF5LmNdW2luY2x1ZGUvb3B0aW9ucy5oXVttaXNjL21haW4uY10KLQkgIFttaXNjZW11L2ludDFhLmNdW21pc2NlbXUvaW50MjEuY11bbWlzY2VtdS9rZXJuZWwuY10KLQlyZW1vdmVkIE9wdGlvbnMucmVsYXlfZGVidWcKLQotCSogW2luY2x1ZGUvaGVhcC5oXQotCUhFQVBfT1dORVI6IFVzZSBkcyBpbnN0ZWFkIG9mIGNzOmlwCi0KLQkqIFtsb2FkZXIvbmVfaW1hZ2UuY10KLQlMb2FkTkVJbWFnZTogUmVtZW1iZXIgY3VycmVudCBleGUsIGhhbmRsZSBub2RhdGEgZGxscwotCUluaXRORURMTDogaGFuZGxlIG5vZGF0YSBkbGxzLCBjYWxsIENhbGxUb0xpYk1haW4KLQotCSogW2xvYWRlci9zZWxlY3Rvci5jXQotCUNyZWF0ZVNlbGVjdG9yczogSW5pdGlhbGl6ZSBhdXRvX2RhdGFfc2VsIHdpdGggMAotCi0JKiBbbWVtb3J5L2hlYXAuY10KLQlIRUFQX0NoZWNrSGVhcDogQ2hlY2sgcHJldgotCUhFQVBfQ2hlY2tMb2NhbEhlYXBzOiBuZXcgZnVuY3Rpb24KLQotCSogW21pc2MvcHJvZmlsZV0KLQlSZW1lbWJlciBhbmQgZHVtcCBvbmx5IGNoYW5nZWQgcHJvZmlsZXMKLQotCSogW3Rvb2xzL21ha2VkZWJ1Z10KLQlJbnRyb2R1Y2UgZGVidWdnaW5nX3h4eCBmbGFncwotCi1TdW4gTm92IDI3IDIzOjEzOjIyIE1FVCAxOTk0CTxlcmlrQHhzNGFsbC5ubD4KLQotCSogW2NsaXBib2FyZC5oIGNvbG9yLmggZGMuaCBkb3NfZnMuaCBldmVudC5oIGZvbnQuaCBncmFwaGljcy5oCi0JaWYxNjMyLmgga2VybmVsLmggbGlicmFyeS5oIG1pc2NlbXUuaCBuZV9pbWFnZS5oIG5vbmNsaWVudC5oIAotCXBlX2ltYWdlLmggc2VsZWN0b3JzLmggd2ludHlwZXMuaF0KLQlBZGRlZC4KLQotCSogWyovKl0KLQktIENvbW1lbnRlZCBhbGwgJ3N0YXRpYyBjaGFyIGNvcHlyaWdodCBzdGF0ZW1lbnRzJywgc2VlIG1pc2MvbWFpbi5jCi0JLSBtb3ZlZCBwcm90b3R5cGVzIHRvIGhlYWRlcnMgZmlsZXMsIGZpeGVkIHdyb25nIHByb3RvdHlwZXMuCi0JLSAqcGxlYXNlKiBhZGQgYSBoZWFkZXIgZmlsZSBmb3IgZWFjaCAuYyBpZiB5b3UgbmVlZCB0byBleHBvcnQKLQkgIHRoaW5ncy4KLQotCSogW21pc2MvbWFpbi5jXQotCUFkZGVkIG9uZSBzdGF0aWMgc3RyaW5nIHdoaWNoIGxpc3QgdGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMuCi0KLUZyaSBOb3YgMjUgMTY6MjQ6MjcgTUVUIDE5OTQJCSAgRGFnIEFzaGVpbSAoZGFzaEBpZmkudWlvLm5vKQotCi0JKiBbQ29uZmlndXJlXQotCU1hZGUgdGhlIHN1cHBvcnQgZm9yIG11bHRpcGxlIGxhbmd1YWdlcyBtb3JlIGF1dG9tYXRpYy4gIEFkZGVkCi0JYSBbZm9udHNdIHNlY3Rpb24gdG8gdGhlIHdpbmUuY29uZiBmaWxlLiAgTWFkZSB0aGUgZGVmYXVsdHMKLQliZXR0ZXIuICBHZW5lcmFsbHkgY2xlYW5lZCBpdCB1cC4KLQotCSogW3JjL3N5c3Jlc19Oby5yY10gW3JjL3N5c3Jlc19EZS5yY10gW3JjL3N5c3Jlcy5jXQotCU5vcndlZ2lhbiByZXNvdXJjZXMgYW5kIHNtYWxsIGZpeGVzIHRvIHRoZSBnZXJtYW4gcmVzb3VyY2VzLgotCi1XZWQgTm92IDIzIDIwOjI4OjU5IDE5OTQgIE1hcnRpbiB2b24gTG9ld2lzICAobWFydGluQGNzLmNzdWZyZXNuby5lZHUpCi0KLQkqIFtkZWJ1Z2dlci9icmVhay5jXQotCWJhcmsoKSwgdG9nZ2xlX25leHQoKSwgc2hvdWxkX2NvbnRpbnVlKCk6IE5ldyBmdW5jdGlvbnMKLQlpbnNlcnRfYnJlYWsoKTogRml4ZWQsIGFkZHMgd3JpdGUgYWNjZXNzIHRvIHBhZ2UgYmVmb3JlIHdyaXRpbmcKLQl3aW5lX2JwLm5leHRfYWRkcjogbmV3IHN0cnVjdHVyZSBmaWVsZAotCi0JKiBbZGVidWdnZXIvZGJnLnldCi0JQ2hhbmdlZCBzeW1ib2wncyB2YWx1ZSB0byBiZSBpdCdzIHZhbHVlIGluc3RlYWQgb2YgdGhlIHZhbHVlCi0JcG9pbnRlZCB0byBieSB0aGUgc3ltYm9sLgotCUNoYW5nZWQgU0lHVFJBUCBoYW5kbGluZyB0byBhbGxvdyBjb250aW51YXRpb24gYWZ0ZXIgYnJlYWsgcG9pbnQKLQotCSogW21pc2Mvc2hlbGwuY10KLQlTaGVsbEFib3V0KCk6IExvYWQgcmVzb3VyY2UgZnJvbSBtZW1vcnkKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotU3VuIE5vdiAyMCAxODozMDowNiAxOTk0ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBsYW1pc3VuLmVwZmwuY2gpCi0KLQkqIFtjb250cm9scy9zY3JvbGwuY10gW2luY2x1ZGUvc2Nyb2xsLmhdCi0JUmV3cml0dGVuIG1vc3Qgb2Ygc2Nyb2xsLWJhciBjb2RlIGZvciBiZXR0ZXIgV2luZG93cyBsb29rICYgZmVlbC4KLQlJbXBsZW1lbnRlZCBFbmFibGVTY3JvbGxCYXIoKS4KLQlQcmVsaW1pbmFyeSBrZXlib2FyZCBzdXBwb3J0LgotCi0JKiBbb2JqZWN0cy9iaXRibHQuY10KLQlGaXhlZCBCYWRNYXRjaCBlcnJvciBmb3IgQml0Qmx0KCkgYW5kIFN0cmV0Y2hCbHQoKSB3aGVuIHJlYWRpbmcKLQliaXRzIGZyb20gb3V0c2lkZSB0aGUgdmlzaWJsZSByZWdpb24uCi0KLQkqIFtvYmplY3RzL29lbWJpdG1hcC5jXSBbaW5jbHVkZS9iaXRtYXBzL29ibV8qXQotCVVzZSBYUE0gc3ltYm9saWMgY29sb3JzIHRvIGxvYWQgYml0bWFwcy4gVGhpcyBhbGxvd3MgdGhlIGNvbG9ycwotCW9mIHRoZSBiaXRtYXBzIHRvIGRlcGVuZCBvbiB0aGUgc3lzdGVtIGNvbG9ycy4KLQotCSogW3Rvb2xzL21ha2VfZGVidWddCi0JTWFkZSB0aGUgbWFrZV9kZWJ1ZyBzY3JpcHQgbW9yZSByb2J1c3QuCi0KLQkqIFt3aW5kb3dzL2RpYWxvZy5jXQotCUZpeGVkIENoZWNrUmFkaW9CdXR0b24oKS4KLQotCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCi0JQSBmZXcgY2hhbmdlcyB0byBzY3JvbGwtYmFyIGRyYXdpbmcgYW5kIHRyYWNraW5nLgotCi0JKiBbd2luZG93cy93aW5wb3MuY10KLQlSZW5hbWVkIE5leHRXaW5kb3dGcm9tUG9pbnQoKSB0byBXSU5QT1NfTmV4dFdpbmRvd0Zyb21Qb2ludCgpIHRvCi0JYXZvaWQgY29uZnVzaW9uLCBhbmQgb3B0aW1pemVkIGl0IHNvbWV3aGF0LgotCi1Ob3YgMTksIDk0IE1hcnRpbiBBeW90dGUgKHdpbmVAdHJnY29ycC5ta3NpbmZvLnFjLmNhKQotCi0JKiBbbWlzYy9hdWRpby5jXQotCSogW21pc2MvbWNpYW5pbS5jXQotCW1vcmUgY29kaW5nIGJ1dCBub3RoaW5nIHNwZWN0YWN1bGFyLgotCi0JKiBbbWlzYy9tbWF1eC5jXQotCXNvbWUgY29kaW5nIHRvIGFjY2VzcyAnL2Rldi9taXhlcicuCi0KLQkqIFttaXNjL21pZGkuY10KLQlzb21lIGNvZGluZyB0byByZWFkIC5NSUQgZmlsZXMsIGJ1dCBpdCdzIG5vdCBwbGF5aW5nIHlldC4KLQotU3VuIE5vdiAxMyAxOTozMTowMyAxOTk0ICAgIEphbWVzIFlvdW5nbWFuIChtYmNzdGp5QGFmcy5tYW4uYWMudWspCi0KLQkqIFtvYmplY3RzL2RpYi5jXQotCVJlaW1wbGVtZW50ZWQgRElCX1NldEltYWdlQml0c19STEU4KCkgc28gdGhhdCBpdCB3b3VsZCBjb3BlIHdpdGgKLQliaXRtYXBzIHdoaWNoIGRvbid0IGVuZCAweDAwLCAweDAyIChwcmV2aW91c2x5IGl0IGJsZXcgdXApLiAgVGhpcwotCWluY2x1ZGVzIHNvbWUgYml0bWFwcyBvdXRwdXQgYnkgUGFpbnQgU2hvcCBQcm8uICBJbXBsZW1lbnRhdGlvbiBpcwotCXBvc3NpYmx5IG5vdyB0b28gbGF4LiAgUGxlYXNlIHNlZSB0aGUgbm90ZXMgb24gdGhlIGZ1bmN0aW9uIGFib3V0Ci0Jd2h5LgotCi0JKiBbY29udHJvbHMvZGVza3RvcC5jXQotCVRoZSBkZXNrdG9wIHBhdHRlcm4gc2hvdWxkIGJlIHBhaW50ZWQgaWYgdGhlIHdhbGxwYXBlciBkb2Vzbid0Ci0JY292ZXIgdGhlIHdob2xlIHNjcmVlbiB3aWR0aCBPUiB0aGUgd2hvbGUgc2NyZWVuIGhlaWdodC4KLQotU3VuIE5vdiAxMyAwMDowNzoxMSBNRVQgMTk5NAlFcmlrIEJvcwk8ZXJpa0B4czRhbGwubmw+Ci0KLQkqIFtvYmplY3RzL2RpYi5jXQotCVNtYWxsIGJ1ZyBpbiBESUJfU2V0SW1hZ2VCaXRzKCkgZml4ZWQsIGJpdG1hcHMgaW4gMTYsMjQgYnBwCi0Jbm93IHdvcmsuCi0KLQkqIFtsb2FkZXIvbmVfcmVzb3VyY2UuY10gW2luY2x1ZGUvcmVzb3VyY2UuaF0KLQlTb21lIGNsZWFudXAuCi0KLVRodSBOb3YgMTAgMjA6NDQ6NTggMTk5NCAgTWFydGluIHZvbiBMb2V3aXMgIChtYXJ0aW5AY3MuY3N1ZnJlc25vLmVkdSkKLQotCSogW0NvbmZpZ3VyZV0KLQkgIFtyYy9zeXNyZXMucmNdCi0JUHJpbWl0aXZlIGNvbXBpbGUtdGltZSBzdXBwb3J0IGZvciBtdWx0aXBsZSBsYW5ndWFnZXMKLQotCSogW3JjL3N5c3Jlc19EZS5yY10KLQlOZXcgZmlsZQotCi0JKiBbbG9hZGVyL3Jlc291cmNlLmNdCi0JTG9hZEJpdG1hcDogUmVjb2duaXplIGVuZCBvZiBzeXNyZXNibSBwcm9wZXJseQotCi0JKiBbcmMvSW1ha2VmaWxlXQotCVJ1bGVzIHRvIGNvbXBpbGUgcmVzb3VyY2VzIHNpbXBsaWZpZWQsIGRlcGVuZGVuY2llcyBjaGFuZ2VkCi0KLQkqIFtyYy9zeXNyZXNibS5yY10KLQlEb24ndCB1c2Ugc3lzcmVzYm0gaWYgdXNpbmcgWFBNCi0KLQkqIFt3aW5kb3dzL2RpYWxvZy5jXQotCUNyZWF0ZURpYWxvZ0luZGlyZWN0UGFyYW06IFJldmVyc2UgWi1vcmRlciBvZiBjb250cm9scwotCi0JKiBbd2luZG93cy9tZXNzYWdlLmNdCi0JTVNHX1RyYW5zbGF0ZU1vdXNlTXNnOiBGaXggSFRUUkFOU1BBUkVOVCBoYW5kbGluZwotCi0JKiBbd2luZG93cy93aW5wb3MuY10KLQlOZXh0V2luZG93RnJvbVBvaW50OiBOZXcgZnVuY3Rpb24KLQotCSogW2NvbnRyb2xzL2J1dHRvbi5jXQotCVdNX05DSElUVEVTVDogR3JvdXAgQm94IGlzIEhUVFJBTlNQQVJFTlQKLQlCVVRUT05fQ2hlY2tBdXRvUmFkaW9CdXR0b246IE5ldyBmdW5jdGlvbgotCUJNX1NFVENIRUNLOiBBZGRlZCBjYWxsIHRvIEJVVFRPTl9DaGVja0F1dG9SYWRpb0J1dHRvbgotCi1Nb24gTm92ICA3IDExOjIwOjI2IDE5OTQgIFBhdWwgRmFsc3RhZCAgKHBmQHpvb2YuY3RzLmNvbSkKLQotCSogW29iamVjdHMvdGV4dC5jXQotCUZpeCBoYW5nIHdoZW4gdXNpbmcgRHJhd1RleHQoLi4uLCBEVF9XT1JEQlJFQUspIHdpdGggYSB3b3JkIHRoYXQKLQlpcyB0b28gbG9uZyB0byBicmVhay4KLQotCSogW29iamVjdHMvZm9udC5jXQotCURvbid0IGFzc3VtZSBoZWx2ZXRpY2EgaWYgdGhlcmUgaXMgbm8gZm9udCBmYW1pbHk7IGxldCB0aGUgb3RoZXIKLQlmb250IGF0dHJpYnV0ZXMgZGVjaWRlIHdoYXQgZm9udCB0byB1c2UuCi0KLQkqIFtjb250cm9scy93aWRnZXRzLmNdCi0JTGlzdGJveGVzIGFuZCBjb21ibyBib3hlcyBuZWVkIHRvIGJlIG5vdGlmaWVkIG9mIGRvdWJsZS1jbGlja3MuCi0KLQkqIFtjb250cm9scy9saXN0Ym94LmNdCi0JICBbaW5jbHVkZS9saXN0Ym94LmhdCi0KLQlzY3JvbGxpbmcgdG8gYm90dG9tIG9mIGxpc3QgYm94IHNob3VsZCBkaXNwbGF5IGxhc3QgaXRlbSBhdCB0aGUKLQlib3R0b20sIG5vdCBhdCB0aGUgdG9wLgotCQotCWxpc3QgYm94ZXMgbmVlZCB0byBhbGxvY2F0ZSBhIHNlcGFyYXRlIGhlYXAgZm9yIHRoZWlyIGl0ZW0gZGF0YSwKLQlyYXRoZXIgdGhhbiB1c2luZyB0aGUgdXNlciBoZWFwLiAgT3RoZXJ3aXNlLCBpdCdzIHZlcnkgZWFzeSB0byBydW4KLQlvdXQgb2YgbWVtb3J5IGZvciBsaXN0IGJveCBpdGVtcy4KLQotCXJlbW92ZWQgcmVkdW5kYW50IGNvZGUgaW4gTGlzdEJveEFkZFN0cmluZygpLiAgSW1wbGVtZW50ZWQgc2ltcGxlCi0JdmVyc2lvbiBvZiBMQlNfU09SVC4KLQotCURvbid0IHB1dCBbLl0gaW4gdGhlIGxpc3QgYm94IHdoZW4gdXNpbmcgRERMX0RJUkVDVE9SWS4KLQotCSogW2NvbnRyb2xzL2NvbWJvLmNdCi0JQ29tYm9zIHNob3VsZCBwYXNzIENCU19TT1JUIG9udG8gdGhlaXIgbGlzdCBib3guCi0KLQkqIFt3aW5kb3dzL3dpbi5jXQotCUlmIHdpbmRvdyBjcmVhdGlvbiBpcyBhYm9ydGVkLCByZW1vdmUgdGhlIHdpbmRvdyBmcm9tIHRoZQotCWxpbmtlZCBsaXN0cy4KLQotCSogW2NvbnRyb2xzL3N0YXRpYy5jXQotCXN0YXRpYyBjb250cm9scyB3aXRoIFNTX0lDT04gd2VyZSBhbHdheXMgcmV0dXJuaW5nIDAgZnJvbQotCVdNX05DQ1JFQVRFLgotCi0JTWFrZSBzdXJlIHN0YXRpYyBjb250cm9scyBoYXZlIHRleHQgdG8gZHJhdyBiZWZvcmUgZHJhd2luZyBpdC4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotU3VuIE5vdiAgNiAxODo1MjowNCAxOTk0ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBsYW1pc3VuLmVwZmwuY2gpCi0KLQkqIFtvYmplY3RzL29lbWJpdG1hcC5jXSAgKE5ldyBmaWxlKQotCUFkZGVkIHBvc3NpYmlsaXR5IHRvIHVzZSAueHBtIGZpbGVzIGZvciBPRU0gYml0bWFwcy4KLQotCSogW2luY2x1ZGUvYml0bWFwcy9vYm0qXSAgKE5ldyBmaWxlcykKLQlSZWRyYXduIGFsbCBPRU0gYml0bWFwcyBpbiB4cG0gZm9ybWF0LgotCi0JKiBbb2JqZWN0cy9mb250LmNdCi0JQWRkIHNwYWNlIGZvciBpbnRlcm5hbCBsZWFkaW5nIHdoZW4gdXNpbmcgYSBuZWdhdGl2ZSBmb250IGhlaWdodC4KLQlTdHVicyBmb3IgQWRkRm9udFJlc291cmNlKCkgYW5kIFJlbW92ZUZvbnRSZXNvdXJjZSgpLgotCUZpeCBpbiBGT05UX0luaXQoKSBmb3IgdW5pbml0aWFsaXNlZCBkZWZhdWx0IGZvbnQuCi0KLQkqIFt3aW5kb3dzL2RpYWxvZy5jXQotCU1ha2UgZm9udCBoZWlnaHQgbmVnYXRpdmUgYXMgaXQgaXMgcmVhbGx5IGEgcG9pbnQgc2l6ZSBhbmQgbm90IGEKLQlwaXhlbCBzaXplOyBkaWFsb2dzIHVzaW5nIDgtcG9pbnQgZm9udHMgbG9vayBiZXR0ZXIgbm93LgotCi0JKiBbd2luZG93cy9ncmFwaGljcy5jXQotCUZpeGVkIHRoZSBmaXggOi0pIGZvciBQaWUoKSB0byBtYWtlIGl0IHdvcmsgZm9yIEFyYygpIGFuZCBDaG9yZCgpIGFsc28uCi0KLQkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQotCUEgZmV3IGNoYW5nZXMgZm9yIG5ldyBPRU0gYml0bWFwcy4KLQotU3VuIE5vdiAgNiAxODoyMjoxOCAxOTk0ICBNaWNoYWVsIFBhdHJhICA8bWlja3lAbWFyaWUucGh5c2lrLnR1LWJlcmxpbi5kZT4KLQotCSogW3dpbmRvd3MvY2xhc3MuY10KLQlUaGUgbmFtZXMgb2YgbG9jYWwgY2xhc3NlcyBoYXZlIHRvIGJlIHN0b3JlZCB1c2luZyBHbG9iYWxBdG9tKi4KLQlPdGhlcndpc2UgdGhleSBjb3VsZG4ndCBiZSBhY2Nlc3NlZCBmcm9tIG90aGVyIG1vZHVsZXMgKGUuZy4gQldDQykgCi0KLQkqIFtpZjE2MzIvY2FsbC5TXQotCUNhbGxUbzE2KGN4KTogSXQncyBwb3NzaWJsZSB0byBzZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBjeC1yZWdpc3Rlci4KLQotCSogW2xvYWRlci9uZV9pbWFnZS5jXQotCUluaXRORURMTCgpOiBUaGUgc2l6ZSBvZiB0aGUgbG9jYWwgaGVhcCBpcyBub3cgcGFzc2VkIGluIHRoZSBjeC0KLQlyZWdpc3RlciB3aGVuIGluaXRpYWxpemluZyBhIERMTC4KLQotCSogW21lbW9yeS9oZWFwLmNdCi0JTG9jYWxJbml0KCk6IFRoZSBjYXNlIHN0YXJ0PT0wIGlzIG5vdyBoYW5kbGVkIGluIHRoZSB3YXkgaXQgc2hvdWxkLgotCi0JKiBbd2luZG93cy93aW4uY10KLQlHZXRXaW5kb3dMb25nKCk6IElmIHRoZSBhZHJlc3Mgb2YgdGhlIHdpbmRvd3MgZnVuY3Rpb24gaXMgcmVxdWVzdGVkCi0JaXQncyBubyBsb25nZXIgcmV0dXJuZWQgaWYgaXQncyB3aXRoaW4gdGhlIFdpbmUgY29kZSAoYW5kIHRoZXJlZm9yZQotCXVucmVhY2hhYmxlIGJ5IGEgd2luZG93cyBwcm9ncmFtKS4gVGhpcyBtYWtlcyBCb3JsYW5kJ3MgT1dMIGhhcHB5LgotCi0JKiBbY29udHJvbHMvZWRpdC5jXQotCUVESVRfR2V0U3RyKCk6IEFkZGVkIGhhbmRsaW5nIGZvciBvZmY8MC4KLQotU3VuIE5vdiAgNiAxNzozNzoxNCAxOTk0ICBDaHJpcyBKb25lcyAgPGNocmlzakBpY2hpcHMuaW50ZWwuY29tPgotCi0JKiBbbG9hZGVyL2xpYnJhcnkuY10KLQlGaXhlZCBpbmZpbml0ZSBsb29wIGJ1ZyB3aGVuIHR3byBETExzIHJlZmVyIHRvIGVhY2ggb3RoZXIgKGZpeGVzCi0JaGFuZ3VwIG9mIFF1aWNrZW4gZHVyaW5nIGxvYWRpbmcpLgotCi1UaHUgTm92IDA0IDEyOjAwOjAwIDE5OTQgIEphbiBXaWxsYW1vd2l1cyAgKGphbkBqYW5oaC5zaC5zdWIuZGUpCi0KLQkqIFttaXNjL2Rvc19mcy5jXQotCUJ1ZyBmaXg6IFRoZSBzaXplIG9mIGEgZGlzayBhbiB0aGUgYXZhaWxhYmxlIHNwYWNlCi0JaXMgbm93IHJldHVybmVkIGluIGJ5dGVzIGluc3RlYWQgb2YgKGluY29ycmVjdGx5KQotCUtCeXRlcy4KLQotVGh1IE5vdiAwMyAxMjowMDowMCAxOTk0ICBKYW4gV2lsbGFtb3dpdXMgIChqYW5AamFuaGguc2guc3ViLmRlKQotCi0JKiBbd2luZG93cy9ncmFwaGljcy5jXQotCUJ1ZyBmaXg6IFBpZSBzZWdtZW50cyBhcmUgbm93IGZpbGxlZCB3aXRoIGNvcnJlY3QgYnJ1c2guCi0KLVRodSBOb3YgIDMgMTA6NDA6MDkgMTk5NCAgTWFydGluIHZvbiBMb2V3aXMgIChtYXJ0aW5AY3MuY3N1ZnJlc25vLmVkdSkKLQotICAgICAgICAqIFtJbWFrZWZpbGVdCi0gICAgICAgIGdlbmVyYXRlIHJjLm8gYmVmb3JlIGxvYWRlci5vCi0KLSAgICAgICAgKiBbY29udHJvbHMvbWVudS5jXQotICAgICAgICBDb3B5U3lzTWVudTogZ2VuZXJhdGUgU1lTTUVOVSBvbiB0aGUgZmx5LCBlbGltaW5hdGUgaFN5c01lbnUKLQotICAgICAgICAqIFtpbmNsdWRlL3Jlc291cmNlLmhdCi0gICAgICAgIEFkZCBzdHJ1Y3QgUmVzb3VyY2VUYWJsZQotCi0gICAgICAgICogW2xvYWRlci9iaXRtYXAuaF0KLSAgICAgICAgTG9hZCBzeXN0ZW0gYml0bWFwcyBmcm9tIHN5c3Jlc2JtVGFibGUKLQotICAgICAgICAqIFttaXNjL2NsaXBib2FyZC5jXQotICAgICAgICAgIFt3aW5kb3dzL2V2ZW50LmNdCi0gICAgICAgIElzQ2xpcGJvYXJkRm9ybWF0QXZhaWxhYmxlLEVWRU5UX1NlbGVjdGlvblJlcXVlc3Q6IGJ1ZyBmaXhlcwotICAgICAgICAKLSAgICAgICAgKiBbcmMvSW1ha2VmaWxlXQotICAgICAgICBnZW5lcmF0ZSByYy5vIGZyb20gc3lzcmVzLm8gYW5kIHN5c3Jlc2JtLm8uIEFkZGVkIC1sZmwKLQotICAgICAgICAqIFtyYy9yYy55XQotICAgICAgICBjaGFuZ2Ugc3R5bGUgaGFuZGxpbmcgdG8gYWxsb3cgKCBTMSB8IFMyICkgfCBTMwotCi0gICAgICAgICogW3JjL3N5c3Jlcy5yY10KLSAgICAgICAgICBbcmMvc3lzcmVzYm0ucmNdCi0gICAgICAgIFB1dCBiaXRtYXBzIGFuZCBpY29ucyB0byBzeXNyZXNibSwgZXZlcnl0aGluZyBlbHNlIHRvIHN5c3JlcwotCi0gICAgICAgICogW3JjL3dpbmVyYy5jXQotICAgICAgICAgIFtyYy93aW5lcmMuaF0KLSAgICAgICAgQWRkZWQgLW8sIC1jIGZsYWdzLiBOZXcgZnVuY3Rpb24gc2V0X291dF9maWxlLiBPdXRwdXQgdG8gZmlsZXMuCi0KLSAgICAgICAgKiBbd2luZG93cy9kaWFsb2cuY10KLSAgICAgICAgRGlhbG9nQm94SW5kaXJlY3RQdHIsIERpYWxvZ0JveEluZGlyZWN0UGFyYW1QdHI6IE5ldyBmdW5jdGlvbnMgCi0KLSAgICAgICAgKiBbd2luZG93cy9ub25jbGllbnQuY10KLSAgICAgICAgQ3JlYXRlIEFib3V0V2luZSBkaWFsb2cgZnJvbSB0ZW1wbGF0ZSBwb2ludGVyCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVN1biBPY3QgMzAgMTM6MDE6MTggMTk5NCAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAbGFtaXN1bi5lcGZsLmNoKQotCi0JKiBbY29udHJvbHMvc3RhdGljLmNdCi0JQnVnIGZpeCBmb3IgU1NfSUNPTiBjb250cm9scy4KLQotCSogW2lmMTYzMi9JbWFrZWZpbGVdCi0JRml4ZWQgY2FsbC5vIGRlcGVuZGVuY2llcy4KLQotCSogW29iamVjdHMvY2xpcHBpbmcuY10gW29iamVjdHMvZGMuY10KLQlGaXhlZCB2aXNpYmxlIHJlZ2lvbiBoYW5kbGluZy4gaFZpc1JnbiBpcyBhbHdheXMgbm9uLW51bGwgbm93LgotCi0JKiBbd2luZG93cy9kY2UuY10KLQlCdWcgZml4IGluIEdldERDRXggZm9yIENTX09XTkRDIHdpbmRvd3MuCi0KLQkqIFt3aW5kb3dzL25vbmNsaWVudC5jXSBbd2luZG93cy9wYWludGluZy5jXQotCUZpeGVzIHRvIGljb24gd2luZG93IGRyYXdpbmcuCi0KLQkqIFt3aW5kb3dzL3dpbnBvcy5jXQotCUEgZmV3IGZpeGVzIGluIFNldFdpbmRvd1BvcygpLgotCi1TdW4gT2N0IDMwIDEyOjUwOjI0IDE5OTQgIE1pY2hhZWwgUGF0cmEgIDxtaWNreUBtYXJpZS5waHlzaWsudHUtYmVybGluLmRlPgotCi0JKiBbb2JqZWN0cy9iaXRibHQuY10KLQlCaXRCbHQoKTogQml0Qmx0IGlzIG5vdyBhYmxlIHRvIGhhbmRsZSBhbnkgcmFzdGVyIG9wZXJhdGlvbi4gSWYKLQl0aGUgcmVxdWVzdCBjYW4ndCBiZSBwYXNzZWQgdG8gWFdpbmRvd3MgZGlyZWN0bHksIGl0J3MgcXVpdGUKLQlzbG93LCB0aG91Z2guCi0KLQkqIFsqLyouY10KLQkgIFttaXNjL21haW4uY10KLQlJbXByb3ZlbWVudHMgb2YgdGhlIHN5c3RlbSBmb3IgaGFuZGxpbmcgZGVidWcgbWVzc2FnZXMuIE9wdGlvbnMgYXJlCi0Jbm93IGFsc28gbG9hZGVkIGZyb20gL3Vzci9saWIvWDExL2FwcC1kZWZhdWx0cy9XaW5lIChpbnNlcnQKLQkqZGVidWdvcHRpb25zOiAreHh4IHRoZXJlIGlmIHlvdSB3YW50IHRvIGhhdmUgdHVybiBtZXNzYWdlcyB4eHggb24pLgotCi0JKiBbY29udHJvbHMvbWVudS5jXQotCURlc3Ryb3lNZW51KCk6IFRoZSB3aG9sZSB3aW5kb3cgd29uJ3QgYmUgZGVzdHJveWVkIGFzIGEgc2lkZWVmZmVjdAotCWFueSBsb25nZXIuCi0KLQkqIFttaXNjL2ZpbGUuY10KLQlPcGVuRmlsZSgpOiBGaXhlZCBidWcgaW4gc2VhcmNoaW5nIGluIHN5c3RlbS93aW5kb3ctZGlyZWN0b3J5LgotCi1TdW4gT2N0IDMwIDEyOjI1OjUzIDE5OTQgIEppbW15IFRpcnRhd2FuZ3NhIDxqMHQyNTI3QHRhbTIwMDAudGFtdS5lZHU+Ci0KLQkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KLQlCdWcgZml4IGZvciB3aW5kb3cgcmVsYXRlZCBzdHJ1Y3R1cmVzLgotCURDQiBhbmQgQ09NU1RBVCBhcmUgYWZmZWN0ZWQuIFRoZXkgbXVzdCBiZSBwYWNrZWQuCi0KLQkqIFttaXNjL2NvbW0uY10KLQlCdWcgZml4IGZvciBDT00gcG9ydHM6Ci0JRGlhbCBhbmQgZGlhbG9nIHdpbmRvdyBpbiB0ZXJtaW5hbC5leGUgbm93IHdvcmtzLgotCU5vbiBzZXF1ZW50aWFsIENPTSBhc3NpZ25tZW50cyBpbiB3aW5lLmNvbmYgc2hvdWxkIG5vdCBicmVhayBub3cuCi0JQmF1ZHJhdGUgY2FuIGJlIHNwZWNpZmllZCBpbiB3aW5lLmNvbmYgdG8gb3ZlcmNvbWUgYmF1ZHJhdGUgbGltaXRhdGlvbgotCWluIG1zd2luZG93LiBTZWUgc2FtcGxlIHdpbmUuaW5pCi0KLQkqIFtpbmNsdWRlL2NvbW0uaF0KLQlhZGQgYmF1ZHJhdGUgZmllbGQgdG8gRG9zRGV2aWNlU3RydWN0cmUKLQotCSogW29iamVjdC9mb250LmNdCi0JQnVnIGZpeCBmb3IgZm9udCBhc3NpZ25tZW50LgotCVVzZSBwYWlycyBvZiBmb3VuZHJ5IGFuZCBmYW1pbHkgZm9udG5hbWVzIGluIFgxMSB0byBjb3JyZXNwb25kIHdpdGgKLQl3aW5kb3cncyBmb250cy4KLQlQdXQgZm9udCBhc3NpZ25tZW50IGluaSB3aW5lLmluaS4KLQotCSogW3dpbmUuaW5pXQotCUFkZGluZyBvcHRpb25hbCBiYXVkcmF0ZSBhZnRlciBwb3J0IG5hbWUgaW4gInNlcmlhbHBvcnRzIiBzZWN0aW9uCi0JQWRkIG5ldyBzZWN0aW9uLCAiZm9udHMiLgotCSJkZWZhdWx0IiBpcyBzcGVjaWFsIGtleSBpbiAiZm9udHMiIHRvIG1hdGNoIGFueSB1bm1hdGNoIHdpbmRvdyBmb250LgotCi1PY3QgMjksIDk0IChuZXcgYWRkcmVzcykgd2luZUB0cmdjb3JwLm1rc2luZm8ucWMuY2EgKE1hcnRpbiBBeW90dGUpCi0KLQkqIFtpZjE2MzIvcmVsYXkuY10KLQkqIFtpZjE2MzIvY29tbWRsZy5zcGVjXSAJTmV3IGZpbGUuCi0JKiBbbWlzYy9jb21tZGxnLmNdIAkJCU5ldyBmaWxlLgotCSogW2luY2x1ZGUvY29tbWRsZy5oXSAJCU5ldyBmaWxlLgotCUJlZ2luIG9mIGFuIGVtdWxhdGVkIENPTU1ETEcgRExMLCBidWlsdC1pbiBmb3Igbm93LgotCShCVFcsIGlmIHlvdSB3YW50IHRvIHN3aXRjaCBiZXR3ZWVuIGJ1aWx0LWluICYgMTZiaXRzIENvbW1EbGcsIG9ubHkgCi0JdGhpbmcgeW91IG5lZWQgdG8gZG8gaXMgdG8gcHV0IHRoZSByZWFsL2R1bW15IG5hbWUgaW4gZmlsZSByZWxheS5jKQotCi0JKiBbY29udHJvbHMvc2Nyb2xsLmNdCi0JKiBbY29udHJvbHMvY29tYm8uY10KLQkqIFtjb250cm9scy9saXN0Ym94LmNdCi0JRmV3IGJ1ZyBmaXhlcyBhbmQvb3IgY29zbWV0aWMuCi0KLQkqIFttaXNjL2F1ZGlvLmNdCi0JKiBbbWlzYy9tbWF1eC5jXQotCWJ1ZyBmaXhlcyBhbmQgZmxhZ3MgcmV0dXJuZWQgdG8gZW11bGF0ZSBTQjE2LgotCi0JKiBbbWlzYy9taWRpLmNdIAkJCU5ldyBmaWxlLgotCXNrZWxldG9uIGZvciAnTWlkaScgTU1TWVNURU0gJiBNQ0kgZHJpdmVyLgotCi0JKiBbbWlzYy9tY2lhbmltLmNdIAkJCU5ldyBmaWxlLgotCXNrZWxldG9uIGZvciAnQW5pbWF0aW9uMScgTUNJIGRyaXZlci4KLQotCSogW3dpbmRvd3Mvd2luLmNdCi0JQWRkIG5ldyBzdHViIGZvciBHZXRMYXN0QWN0aXZlV2luZG93KCkuCi0KLVR1ZSBPY3QgMjUgMDk6MTc6MjUgMTk5NCAgT2xhZiBGbGViYmUgIChmbGViYmVAdGF0LnBoeXNpay51bmktdHVlYmluZ2VuLmRlKQotCi0JKiBbaWYxNjMyL2NhbGwuU10gW3Rvb2xzL2J1aWxkLmNdCi0gICAgICAgICAgIFN1cHBvcnQgZm9yIEVMRiBmb3JtYXQuIChOb3QgY29tcGxldGUpCi0KLVN1biBPY3QgMjMgMDA6NTE6NTAgMTk5NCAgUGF1bCBGYWxzdGFkICAocGZAem9vZikKLQotCSogW2lmMTYzMi91c2VyLnNwZWNdCi0JQWRkIHN0dWJzIGZvciBBcnJhbmdlSWNvbmljV2luZG93cygpLCBldGMuCi0KLQkqIFtpZjE2MzIva2VybmVsLnNwZWNdCi0JQWRkIElzQmFkKlB0cigpIGZ1bmN0aW9ucy4KLQotCSogW2xvYWRlci9zaWduYWwuY10KLQlBZGQgdGVzdF9tZW1vcnkoKSwgZm9yIHVzZSB3aXRoIElzQmFkKlB0cigpLgotCi0JKiBbd2luZG93cy93aW5wb3MuY10KLQlBZGQgc3R1YnMgZm9yIFRpbGVDaGlsZFdpbmRvd3MoKSwgZXRjLgotCi0JKiBbd2luZG93cy93aW4uY10KLQlJc1dpbmRvdygpIHNob3VsZG4ndCBjcmFzaCBpZiBpdCdzIGdpdmVuIGEgYmFkIGhhbmRsZS4KLQlBZGQgc3R1YiBmb3IgR2V0TGFzdEFjdGl2ZVBvcHVwKCkuCi0KLQkqIFttZW1vcnkvZ2xvYmFsLmNdCi0JSW1wbGVtZW50IHRoZSBJc0JhZCpQdHIoKSBmdW5jdGlvbnMuCi0KLQkqIFtjb250cm9scy9saXN0Ym94LmNdCi0JUmV0dXJuIHRoZSBmdWxsIGxvbmd3b3JkIG9mIHRoZSBpdGVtIGRhdGEgaW4gTEJfR0VUSVRFTURBVEEuCi0KLQkqIFtjb250cm9scy9lZGl0LmNdCi0JRG9uJ3QgbGV0IHRoZSB1c2VyIHNlbGVjdCBhbiBhcmVhIHBhc3QgdGhlIGVuZCBvZiB0aGUgdGV4dC4KLQotCSogW29iamVjdHMvdGV4dC5jXQotCUluIERyYXdUZXh0KCksIHRoZSBjb2RlIHRvIGRlbGV0ZSBjcmxmcyBhbHNvIHJlbW92ZWQgbXVsdGlwbGUKLQljb25zZWN1dGl2ZSBuZXdsaW5lcy4gIEFsc28sIHVzaW5nIERUX0NBTENSRUNUIGRpZG4ndCByZXR1cm4KLQl0aGUgcmlnaHQgaGVpZ2h0LCBhbmQgdGhlIHdpZHRoIHdhc24ndCByZXR1cm5lZCBhdCBhbGwuCi0JVGhpcyBjYXVzZWQgTWVzc2FnZUJveGVzIHRvIGJlIG1pc3NpbmcgbXVjaCBvZiB0aGVpciB0ZXh0LgotCi0JKiBbd2luZG93cy9zY3JvbGwuY10KLQlTY3JvbGxXaW5kb3dbRXhdIGRpZG4ndCB3b3JrIHJpZ2h0IHdpdGggbnVsbCBMUFJFQ1QgYXJndW1lbnRzLgotCi1GcmkgT2N0IDIxIDIxOjQ3OjE5IDE5OTQgIFBhdWwgRmFsc3RhZCAgKHBmQHpvb2YuY3RzLmNvbSkKLQotCSogW21pc2NlbXUvaW50MjEuY10KLQlGaXhlZCBpbnQyMSAweDQyIGhhbmRsZXIgdG8gcHJvcGVybHkgYXNzZW1ibGUgMzItYml0IHNlZWsgcHRyLgotCi0JKiBbbWlzYy9wcm9wZXJ0eS5jXQotCUZpeGVkIGludmVydGVkIGxvZ2ljIGluIEVudW1Qcm9wcygpLCBhbmQgY2hhbmdlZCBDYWxsQmFjazE2KCkKLQljYWxsIHRvIHVzZSBuZXcgYXJnIGZvcm1hdC4KLQotCSogW3dpbmRvd3Mvd2luLmNdCi0JRml4ZWQgQ2FsbEJhY2sxNigpIGNhbGwgaW4gRW51bVtDaGlsZF1XaW5kb3dzIHRvIHVzZSBuZXcgYXJnCi0JZm9ybWF0OyB0aGlzIGZpeGVzIGNyYXNoZXMgaW4gZW51bSBwcm9jZWR1cmVzLgotCi1XZWQgT2N0IDE5IDIxOjMwOjAwIFBEVCAxOTk0CQltYXJ0aW5AY3MuY3N1ZnJlc25vLmVkdQotCi0JKiBbbWlzYy9jbGlwYm9hcmQuY10KLQkgIFt3aW5kb3dzL2V2ZW50LmNdCi0JICBbd2luZG93cy9tZXNzYWdlLmNdCi0JQWRkZWQgY3V0IGFuZCBwYXN0ZSBiZXR3ZWVuIFdpbmUgYW5kIG90aGVyIFggY2xpZW50cyB2aWEKLQl0aGUgUFJJTUFSWSBzZWxlY3Rpb24uIFRleHQgb25seSB0aGlzIHRpbWUuCi0KLQkqIFtjb250cm9scy9lZGl0LmNdCi0JRURJVF9MaW5lTGVuZ3RoLCBFRElUX1RleHRMaW5lIHJldHVybiAwIGZvciBsaW5lcyBhZnRlciBsYXN0IG9uZS4KLQotCSogW3dpbmRvd3MvZGVmd25kLmNdCi0JU2VuZCBXTV9TWVNDT01NQU5EIHRvIG92ZXJsYXBwZWQgYW5jZXN0b3Igd2luZG93LCAKLQlub3QgdGhlIHJlY2VpdmVyIG9mIFdNX1NZU0tFWURPV04KLQotU2F0IE9jdCAyMiAxNTowMTowMiAxOTk0ICBUaG9tYXMgU2FuZGZvcmQgPHQuZC5nLnNhbmRmb3JkQGJyYWRmb3JkLmFjLnVrPgotCi0gICAgICAgICogW2NvbnRyb2xzL2VkaXQuY10KLQlDbGllbnRXaWR0aCgpL0NsaWVudEhlaWdodCgpIG1hY3JvczogcmV0dXJuIDAgaWYgc2l6ZSB3b3VsZAotCWJlIG5lZ2F0aXZlCi0JRURJVF9TdHJMZW5ndGgoKTogdGFrZXMgdW5zaWduZWQgY2hhciogaW5zdGVhZCBvZiBjaGFyKgotCi0JKiBbY29udHJvbHMvbGlzdGJveC5jXQotCUxpc3RCb3hXbmRQcm9jKCk6IGluICJjYXNlIFdNX01PVVNFTU9WRSIgLSBzZXQgbHBobCBhdCBzdGFydCBvZgotCWNhc2UgaW5zdGVhZCBvZiBpbiBlYWNoIHBsYWNlIHJlcXVpcmVkIChpdCB3YXMgb21pdHRlZCBpbgotCXNvbWUgcGxhY2VzIGNhdXNpbmcgcHJvYmxlbXMhKQotCi0JKiBbY29udHJvbHMvbWVudS5jXQotCU1FTlVfQ2FsY0l0ZW1TaXplKCk6IGRvbid0IHRyeSB0byBmaW5kIHNpemUgb2YgYSB0ZXh0IGl0ZW0KLQlpZiB0aGUgcG9pbnRlciBpcyBOVUxMCi0KLQkqIFtpbmNsdWRlL2hlYXAuaF0KLQlhZGRlZCBkZWZpbml0aW9uIG9mIEhFQVBfTG9jYWxJbml0KCkKLQotCSogW2luY2x1ZGUvbXNkb3MuaF0KLQlyZW1vdmVkIGJ1Z2d5IHBvaW50ZXIoKSBtYWNybyAodXNlIFNBRkVNQUtFUFRSKCkgZnJvbSBzZWdtZW0uaAotCWluc3RlYWQpCi0KLQkqIFtsb2FkZXIvc2VsZWN0b3IuY10KLQlJUENDb3B5U2VsZWN0b3IoKTogYWRkZWQgbWlzc2luZyBmbGFncyB0byBzaG1nZXQoKSBjYWxsCi0JPyBkb2VzIHRoaXMgYnJlYWsgbGludXggLSBJIGFkZGVkIHRoZXNlIGZsYWdzIGluIGEgcHJldmlvdXMKLQlwYXRjaCBidXQgdGhleSB3ZXJlIG1pc3NpbmcgaW4gdGhlIGNvcnJlc3BvbmRpbmcgcmVsZWFzZSA/Ci0KLQkqIFtsb2FkZXIvc2lnbmFsLmNdCi0Jd2luX2ZhdWx0KCk6IGFkZGVkIG1pc3NpbmcgZGVmaW5pdGlvbnMgb2YgaSwgZHVtcCBmb3IgdGhvc2UKLQlub3QgcnVubmluZyBOZXRCU0Qgb3IgbGludXgKLQotCSogW21pc2MvZG9zX2ZzLmNdCi0JRE9TX0dldEN1cnJlbnREaXIoKTogbWFkZSB0ZW1wW10gc3RhdGljIHNvIGl0IGNhbiBiZSBzYWZlbHkKLQlyZXR1cm5lZAotCi0JKiBbbWlzY2VtdS9pbnQyMS5jLGludDI1LmMsaW50MjYuY10KLQlDaGFuZ2VkIGFsbCBpbnZvY2F0aW9ucyBvZiBwb2ludGVyKCkgdG8gU0FGRU1BS0VQVFIoKS4gSW5jbHVkZWQKLQlzZWdtZW0uaCB3aGVyZSBuZWNlc3NhcnkuCi0KLQkqIFt3aW5kb3dzL2RpYWxvZy5jXQotCUNyZWF0ZURpYWxvZ0luZGlyZWN0UGFyYW0oKTogQ2hhbmdlZCBIRUFQX0luaXQoKSBjYWxsIHRvIAotCUhFQVBfTG9jYWxJbml0KCksIHJlbW92ZWQgcmVkdW5kYW50IHZhcmlhYmxlcwotCi1TYXQgT2N0IDIyIDAwOjI5OjQxIE1FVCAxOTk0CQkgIERhZyBBc2hlaW0gKGRhc2hAaWZpLnVpby5ubykKLQotCSogW2xvYWRlci9saWJyYXJ5LmNdIFtsb2FkZXIvbWFpbi5jXSBbbG9hZGVyL25lX2ltYWdlLmNdCi0JICBbbWlzYy9leGVjLmNdIFttaXNjZW11L2ludDEwLmNdIFttaXNjZW11L2ludDIxLmNdCi0JICBbb2JqZWN0cy9iaXRibHQuY10gW29iamVjdHMvbWV0YWZpbGUuY10KLQlSZXdyaXR0ZW4gbW9yZSBwcmludGYncyB0byB1c2UgdGhlIG5ldyBkZWJ1Z2dpbmcgc3lzdGVtLCBhbmQKLQltYWRlIHdpbmUgbGVzcyB2ZXJib3NlIHBlciBkZWZhdWx0LiBVc2UgIi1kZWJ1Z21zZyArbW9kdWxlIgotCXRvIGdldCAoYWxtb3N0KSB0aGUgc2FtZSBiZWhhdmlvciBhcyBiZWZvcmUuCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVN1biBPY3QgMTYgMTM6Mjk6MDcgMTk5NCAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAbGFtaXN1bi5lcGZsLmNoKQotCi0JKiBbY29udHJvbHMvYnV0dG9uLmNdCi0JSW1wbGVtZW50ZWQgV01fR0VURExHQ09ERSwgV01fU0VURk9OVCwgQk1fU0VUU1RZTEUsIEJNX1NFVENIRUNLLAotCUJNX1NFVFNUQVRFLgotCUltcGxlbWVudGVkIGRlZmF1bHQgYnV0dG9uIHBhaW50aW5nLgotCU9wdGltaXNlZCByZWRyYXdpbmcuCi0JRml4ZWQgb3duZXItZHJhdyBidXR0b25zLgotCi0JKiBbY29udHJvbHMvc3RhdGljLmNdCi0JSW1wbGVtZW50ZWQgV01fU0VURk9OVC4KLQlBIGZldyBvcHRpbWlzYXRpb25zIGluIHBhaW50aW5nIGNvZGUuCi0JQnVnIGZpeCBmb3IgU1NfU0lNUExFIGNvbnRyb2xzLgotCi0JKiBbaWYxNjMyL2NhbGxiYWNrLmNdCi0JUHJlbGltaW5hcnkgR2V0Q29kZUhhbmRsZSgpLgotCi0JKiBbaWYxNjMyL2dkaS5zcGVjXQotCUNoYW5nZWQgJ3Bhc2NhbCcgdG8gJ3Bhc2NhbDE2JyBldmVyeXdoZXJlIGl0J3MgbmVlZGVkLgotCi0JKiBbaW5jbHVkZS93aW5kb3dzLmhdCi0JRml4ZWQgYSBmZXcgZGF0YSBzdHJ1Y3R1cmVzLgotCi0JKiBbbWVtb3J5L2hlYXAuY10KLQlCdWcgZml4IGluIEhFQVBfUmVBbGxvYygpLgotCi0JKiBbbWlzYy9jdXJzb3IuY10KLQlGaXhlZCBTZXRDdXJzb3IoKS4KLQotCSogW29iamVjdHMvYml0Ymx0LmNdCi0JRml4ZWQgUGF0Qmx0KCkgd2hlbiB1c2luZyBCTEFDS05FU1Mgb3IgV0hJVEVORVNTIGNvZGVzLgotCi0JKiBbb2JqZWN0cy9mb250LmNdCi0JQmV0dGVyIGZvbnQgbWFwcGluZyBjb2RlLgotCUltcGxlbWVudGVkIEdldFRleHRGYWNlKCkuCi0KLQkqIFtvYmplY3RzL3JlZ2lvbi5jXQotCUJ1ZyBmaXggaW4gUkVHSU9OX01ha2VQaXhtYXAoKS4KLQlGYXN0ZXIgcmVnaW9uIGNvcHlpbmcuCi0KLQkqIFtvYmplY3RzL3RleHQuY10KLQlJbXBsZW1lbnRlZCBFeHRUZXh0T3V0KCkuCi0JSW1wbGVtZW50ZWQgRFRfTk9DTElQIHN0eWxlIGZvciBEcmF3VGV4dCgpLgotCi0JKiBbd2luZG93cy9kYy5jXQotCUZyZWUgdGhlIGJpdG1hcCB3aGVuIGRlbGV0aW5nIGEgbWVtb3J5IERDLgotCi0JKiBbd2luZG93cy9kY2UuY10KLQlBZGRlZCBzdXBwb3J0IGZvciB3aW5kb3dzIHRoYXQgaGF2ZSBubyBhc3NvY2lhdGVkIFggd2luZG93LgotCUltcGxlbWVudGVkIERDWF9DTElQU0lCTElOR1MgYW5kIERDWF9QQVJFTlRDTElQIGluIEdldERDRXgoKS4KLQotCSogW3dpbmRvd3MvZGVmZGxnLmNdCi0JSW1wbGVtZW50ZWQgZGVmYXVsdCBwdXNoIGJ1dHRvbiBoYW5kbGluZyBhbmQgRE1fU0VUREVGSUQuCi0JSW1wbGVtZW50ZWQgV01fTkVYVERMR0NUTC4KLQotCSogW3dpbmRvd3MvZGlhbG9nLmNdCi0JSW1wbGVtZW50ZWQgZGVmYXVsdCBwdXNoIGJ1dHRvbiBoYW5kbGluZy4KLQlCZWdpbm5pbmcgb2YgYSBrZXlib2FyZCBpbnRlcmZhY2UgaW4gZGlhbG9ncwotCShkb2VzIG5vdCByZWFsbHkgd29yayB5ZXQpLgotCUZpeGVkIGRpYWxvZ3MgdGhhdCB1c2UgYSBzcGVjaWFsIGZvbnQuCi0KLQkqIFt3aW5kb3dzL2V2ZW50LmNdIFt3aW5kb3dzL2ZvY3VzLmNdCi0JQWRkZWQgc3VwcG9ydCBmb3Igbm9uLVggd2luZG93cy4KLQotCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KLQlSZXdyaXR0ZW4gRmxvb2RGaWxsKCkgYW5kIGltcGxlbWVudGVkIEV4dEZsb29kRmlsbCgpLgotCi0JKiBbd2luZG93cy9tZXNzYWdlLmNdCi0JQ2xlYW5lciBoYXJkd2FyZSBtZXNzYWdlcyBhbmQgWCBldmVudHMgaGFuZGxpbmcuCi0KLQkqIFt3aW5kb3dzL2RlZnduZC5jXSBbd2luZG93cy9wYWludGluZy5jXQotCUltcGxlbWVudGVkIFdNX1NFVFJFRFJBVy4KLQotCSogW3dpbmRvd3Mvd2luLmNdCi0JT25seSBjcmVhdGUgYW4gWCB3aW5kb3cgZm9yIHRvcC1sZXZlbCB3aW5kb3dzLCBvciBmb3IgdGhlIGRlc2t0b3AuCi0JQ2hpbGQgd2luZG93cyBub3cgdXNlIHRoZWlyIHBhcmVudCdzIGRyYXdhYmxlLgotCi0JKiBbd2luZG93cy93aW5wb3MuY10KLQlCZWdpbm5pbmcgb2Ygc3VwcG9ydCBmb3Igbm9uLVggd2luZG93cyAoc3RpbGwgc29tZXdoYXQgYnJva2VuKS4KLQlJbXBsZW1lbnRlZCAqRGVmZXJXaW5kb3dQb3MoKS4KLQotCSogWyovSW1ha2VmaWxlXQotCUNsZWFuZWQgdXAgc29tZSBJbWFrZWZpbGVzLgotCU1vdmVkIGRjLmMgZnJvbSB3aW5kb3dzLyB0byBvYmplY3RzLy4KLQlNb3ZlZCBjdXJzb3IuYyBmcm9tIG1pc2MvIHRvIHdpbmRvd3MvLgotCi1TdW4gT2N0IDE2IDEyOjIxOjUyIDE5OTQgIE1pY2hhZWwgUGF0cmEgPG1pY2t5QG1hcmllLnBoeXNpay50dS1iZXJsaW4uZDQwMC5kZT4KLQotCSogW2luY2x1ZGUvZGVidWcuaF0KLQkgIFtpbmNsdWRlL3N0ZGRlYnVnLmhdCi0JICBbKi8qLmNdCi0gICAgICAgIFJld3JpdHRlbiBhbGwgdGhlIGNhbGxzIHRvIHByaW50ZiBmb3IgZGlzcGxheWluZyBkZWJ1Zy1pbmZvcm1hdGlvbgotICAgICAgICAobWVzc2FnZXMgbGlrZSAiTG9hZEltYWdlOiBsb2FkaW5nIFNPTCAoU09MLkVYRSkiIGV0Yy4pIAotICAgICAgICBBZGRlZCBvcHRpb24gIi1kZWJ1Z21zZyIgdG8gV2luZS4gRXhhbXBsZTogIi1kZWJ1Z21zZyArYWxsIiB3aWxsIHR1cm4KLSAgICAgICAgYWxsIHRoZXNlIG1lc3NhZ2VzIG9uLCAiLWRlYnVnbXNnIC1kbGwiIHdpbGwgdHVybiBhbGwgbWVzc2FnZXMgCi0JY29uY2VybmluZyBETExzIG9mZi4KLQotCSogW2NvbnRyb2xzL2NvbWJvLmNdCi0JQWRkZWQgc29tZSBoYW5kbGluZyBmb3IgY29tYm8gY29udHJvbHMgd2l0aCBvd25lcmRyYXctc3R5bGVzCi0gICAgICAgIChqdXN0IGNyZWF0aW5nIGFuZCBwYXNzaW5nIHRoZSBuZWNlc3NhcnkgbWVzc2FnZXMgdG8gdGhlIAotCWNvcnJlc3BvbmRpbmcgbGlzdGJveCBjb250cm9sOyB0aGUgZWRpdC1jb250cm9sIG5lZWRzIHRvIGJlCi0JcmVwbGFjZWQgd2l0aCBzb21ldGhpbmcgZWxzZSkuCi0KLQkqIFtjb250cm9scy9lZGl0LmNdCi0JICBbd2luZG93cy9kaWFsb2cuY10KLQlBZGRlZCBzdXBwb3J0IGZvciB1c2Ugb2YgZ2xvYmFsIGhlYXAgbWVtb3J5IGluIGRpYWxvZ3Mgd2l0aCAKLQllZGl0IGNvbnRyb2xzLgotCi0JKiBbY29udHJvbHMvbGlzdGJveC5jXQotCUFkZGVkIHN1cHBvcnQgZm9yIGl0ZW0gZGF0YS4KLQlMaXN0Qm94SW5zZXJ0U3RyaW5nKCk6IEZpeGVkIGJ1ZyBmb3IgZWxlbWVudHMgd2hpY2ggYXJlIG5vdCBpbnNlcnRlZAotCWFmdGVyIHRoZSBjdXJyZW50bHkgbGFzdCBlbGVtZW50LgotCQotCSogW21pc2MvZG9zX2ZzLmNdCi0JICBbbWlzY2VtdS9pbnQyMS5jXQotCURPU19WYWxpZERpcmVjdG9yeSgpOiBDaGVja3Mgd2hldGhlciBhIGdpdmVuIHN0cmluZyBpcyBpbiBmYWN0IHRoZQotCXZhbGlkIG5hbWUgb2YgYSBkaXJlY3RvcnkuCi0KLVNhdCBPY3QgMTUgMTc6MzU6MDAgUERUIDE5OTQJCTxtYXJ0aW5AY3MuY3N1ZnJlc25vLmVkdT4KLQotCSogW0ltYWtlZmlsZV0KLQlnZW5lcmF0ZSB3aW5lLnN5bSBhZnRlciBjcmVhdGluZyB3aW5lCi0KLQkqIFtkZWJ1Z2dlci9kYmcueV0KLQlsb2FkICJ3aW5lLnN5bSIgd2hlbiBlbnRlcmluZyBkZWJ1Z2dlcgotCi0JKiBbZGVidWdnZXIvaW5mby5jXQotCXN5bWJvbGljIGJhY2t0cmFjZSBmb3IgMzItYml0IHN0YWNrLiBCcmVha3MgMTYtYml0IGJ0LgotCi1TdW4gU2VwICAyNSAxMjowMDowMCBQRFQgMTk5NCAgIDxtYXJ0aW5Ab3NpcmlzLmNzLmNzdWZyZXNuby5lZHU+Ci0KLQkqIFtyYy9yYy55XSBbcmMvcmMuaF0gW3JjL3JjLmxdIFtyYy93aW5lcmMuY10KLQlGaWxlcyBjcmVhdGVkCi0KLVN1biBTZXAgMTggMTE6MDQ6NDUgTUVUIERTVCAxOTk0ICAgICAgICAgIERhZyBBc2hlaW0gKGRhc2hAaWZpLnVpby5ubykKLQotCSogW21pc2Mvc3B5LmNdCi0JRXhjbHVkZSBhbmQgSW5jbHVkZSBubyBsb25nZXIgcmVxdWlyZXMgYSB0ZXJtaW5hdGluZyAnOycgdG8KLQlyZWdpc3RlciB0aGUgbGFzdCBjb21wb25lbnQuCi0KLVRodSBTZXAgMTUgMjM6MTA6MDkgTUVUIERTVCAxOTk0ICAgICAgICAgIERhZyBBc2hlaW0gKGRhc2hAaWZpLnVpby5ubykKLQotCSogW0NvbmZpZ3VyZV0KLQlSZXdyb3RlIG11Y2ggb2YgaXQuICBBZGRlZCBjYXBhYmlsaXR5IHRvIGdlbmVyYXRlIGEgd2luZS5pbmkKLQlmaWxlLiAgQ29tbWVudGVkIG91dCB0aGUgcHJvY2Vzc29yIGVtdWxhdG9yIG9wdGlvbnMgdW50aWwgdGhhdAotCWJlY29tZXMgaW50ZXJlc3RpbmcuICBHaXZlcyBhIHdhcm5pbmcgaWYgaXQgc2VlcyBhbnkgKi5yZWoKLQlmaWxlcy4gIEkgaG9wZSBJIGhhdmVuJ3QgYXNzdW1lZCB0byBtdWNoIGFib3V0IHRoZSBzaGVsbC9PUyBzbwotCXRoYXQgaXQgYnJlYWtzIHVuZGVyICpCU0QuCi0KLQkqIFttaXNjL2Rvc19mcy5jXQotCVJlbW92ZWQvY2hhbmdlZCBjYWxscyB0byBUb1VuaXgoKSAod2hpY2ggY2FsbHMgdG9sb3dlcigpKSBzbwotCXRoYXQgdGhlIHBhcnQgb2YgdGhlIHBhdGhuYW1lIHdoaWNoIGNvcnJlc3BvbmQgd2l0aCB0aGUgZHJpdmUKLQlsZXR0ZXIgb24gRE9TIG5vIGxvbmdlciB3aWxsIGJlIG1hcHBlZCB0byBsb3dlcmNhc2UuICBUaGlzCi0JbWVhbnMgdGhhdCBpdCBzaG91bGQgYmUgcG9zc2libGUgdG8gaGF2ZSB1cHBlcmNhc2UgbGV0dGVycyBpbgotCXRoZSBbZHJpdmVzXSBzZWN0aW9uIG9mIHdpbmUuaW5pLgotCi0JKiBbTElDRU5TRV0KLQlDb3NtZXRpYyBjaGFuZ2VzIHNvIHRoYXQgaXQgZGlzcGxheXMgYmV0dGVyIGluIHRoZSB3aW5kb3cgeW91Ci0JZ2V0IGZyb20gcHJlc3NpbmcgIkNyZWRpdF9MaWNlbnNlIiBpbiB0aGUgIkFib3V0IFdJTkUiIHdpbmRvdy4KLQotU3VuIEF1ZyAyMSAyMToxMjowNiBNRVQgRFNUIDE5OTQJPGVyaWtAeHM0YWxsLm5sPgotCi0JKiBbY29udHJvbHMvbWVudS5jXQotCUxvYWRNZW51KCkgbW92ZWQgdG8gbG9hZGVyL3Jlc291cmNlLmMuCi0KLQkqIFttaXNjL21haW4uY10KLQlBZGRlZCBzdHViIGZvciBGaWxlQ0RSKCkuCi0KLQkqIFtpbmNsdWRlL3BlZXhlLmhdCi0JQWRkZWQsIGZyb20gRXJpYydzIHBlLXRlc3QuCi0KLQkqIFtpbmNsdWRlL3Jlc291cmNlLmhdCi0JQWRkZWQuCi0KLQkqIFtsb2FkZXIvcmVzb3VyY2VzLmNdCi0JUmVtb3ZlZCBkdXBsaWNhdGVkIGNvZGUgaW4gKlJlc291cmNlKCkgZnVuY3Rpb25zLgotCU1vdmVkIE5FLXByb2dyYW0gc3BlY2lmaWMgZnVuY3Rpb25zIGludG8gbmVfaW1hZ2UuYy4KLQlNb3ZlZCBORS1maWxlZm9ybWF0IGZ1bmN0aW9ucyB0byBuZV9yZXNvdXJjZS5jLgotCi0JKiBbcGVfaW1hZ2UuY10gW3BlX3Jlc291cmNlLmNdCi0JQWRkZWQuIE5vdGhpbmcgaW1wbGVtZW50ZWQgdG8gcnVuIFBFLWV4ZWN1dGFibGVzLCByZXNvdXJjZQotCWxvYWRpbmcgb25seS4KLQotCSogW21pc2MvZmlsZS5jXQotCUNoYW5nZWQgT3BlbkZpbGUoKSB0byB1c2UgbWFjcm9zLgotCi0JKiBbbWlzYy9zaGVsbC5jXQotCUFkZGVkIE5VTEwtcHRyIGNoZWNrcyB0byBTaGVsbEFib3V0KCkuCi0KLQkqIFttaXNjZW11L2ludDIxLmNdCi0JRml4ZWQgYSBmZXcgdHlwb3MuCi0KLQkqIFttaXNjZW11L2tlcm5lbC5jXQotCUFkZGVkIF9ESSA9IF9EUywgdG8gcHV0IHRoZSBjYWxsZXIncyBpbnN0YW5jZSBpbiBESS4gRG9lc24ndAotCXdvcmsgcHJvcGVybHkgaWYgY2FsbGVyIGNoYW5nZWQgRFMgOi0oCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRodSBBdWcgMjUgMTU6MjQ6MzYgRURUIDE5OTQgICAgICAgICAgICA8anJpY2hhcmRAY3MudW1sLmVkdT4KLQotICAgICAgICAqIFtpbmNsdWRlL3dpbi5oXQotICAgICAgICBSZW1vdmVkIHNlcGVyYXRlIFggd2luZG93IGZvciBpY29uLCBhZGRlZCBpY29uIHdpZHRoLGhlaWdodC4KLQotCSogW2luY2x1ZGUvd2luZG93cy5oXQotCUNvbW1lbnRlZCBvdXQgdGhlIG9sZCBTV194eHggZW11bSBhbmQgYWRkZWQgZGVmaW5lcyBzaW5jZQotCXRoZXkgYXJlbid0IGVudW1lcmF0ZWQuCi0KLQkqIFt3aW5kb3dzL2RjZS5jXQotICAgICAgICBSZW1vdmVkIHNvbWUgb2xkZXIgSXNJY29uaWMgY2hlY2tzIGZyb20gR2V0RENFeCgpLCBmdW5jdGlvbmFsaXR5Ci0gICAgICAgIGlzIG5vdyBpbiBub25jbGllbnQgYW5kIGdlbmVyaWMgd2luZSB3aW5kb3cgaGFuZGxpbmcgY29kZS4KLSAgICAgICAgTG90cyBvZiB0aGFua3MgdG8gQWxleGFuZHJlIEp1bGxpYXJkIGFsbCB0aGUgaGludHMgYW5kCi0gICAgICAgIGhlbHAuLi4KLQotICAgICAgICAqIFt3aW5kb3dzL2RlZnduZC5jXQotICAgICAgICBSZW1vdmVkIGNhbGwgdG8gTkNfSGFuZGxlTkNQYWludEljb24oKSB1bmRlciBjYXNlIFdNX1BBSU5USUNPTiwKLSAgICAgICAgV01fUEFJTlRJQ09OIG5vdyBjYWxscyBOQ19IYW5kbGVOQ1BhaW50LiAgCi0KLSAgICAgICAgKiBbd2luZG93cy9ldmVudC5jXQotICAgICAgICBSZW1vdmVkIElzSWNvbmljIGNoZWNrcy4KLQotICAgICAgICAqIFt3aW5kb3dzL2ljb24uY10KLSAgICAgICAgUmVtb3ZlZCBldmVyeXRoaW5nIGluIHRoaXMgZmlsZSBmb3Igbm93Li4uIGNvdWxkIGJlIHVzZWQgbGF0ZXIuCi0gICAgICAgIEljb24gZnVuY3Rpb25hbGl0eSBpcyBub3cgaGFuZGxlZCBieSB0aGUgZ2VuZXJpYyB3aW5lIHdpbmRvd3MKLSAgICAgICAgaGFuZGxpbmcgZnVuY3Rpb25zLgotICAgICAgICAKLSAgICAgICAgKiBbd2luZG93cy9tZGkuY10KLSAgICAgICAgQWRkZWQgYSBTaG93V2luZG93IGluIE1ESVJlc3RvcmVDaGlsZCgpLiAgTURJIGNoaWxkIHdpbmRvd3Mgbm93Ci0gICAgICAgIHNob3cgdXAgd2hlbiBkZWljb25pZmllZC4gIFJlbW92ZWQgSXNJY29uaWMgY2hlY2tzLgotCi0gICAgICAgICogW3dpbmRvd3MvbWVzc2FnZS5jXQotICAgICAgICBSZW1vdmVkIG9sZCBpY29uIHJvdXRpbmVzIGZyb20gaGFyZHdhcmVfZXZlbnQoKS4KLQotICAgICAgICAqIFt3aW5kb3dzL25vbmNsaWVudC5jXQotICAgICAgICBDaGFuZ2VkIE5DX0hhbmRsZU5DQ2FsY1NpemUoKSBzbyBpdCBkb2Vzbid0IGNoYW5nZSB0aGUgc2l6ZQotICAgICAgICBvZiBhbiBpY29uIHdpbmRvdy4gIE1hZGUgTkNfSW50ZXJuYWxOQ0hpdFRlc3QoKSBvbiBhbiBJY29uaWMKLSAgICAgICAgd2luZG93IGFsd2F5cyByZXR1cm4gSFRDQVBUSU9OLiAgTWFkZSBOQ19IYW5kbGVOQ0xCdXR0b25EYmxDbGsoKQotICAgICAgICBvbiBhbiBJY29uaWMgd2luZG93IGFsd2F5cyBzZW5kIGEgU0NfUkVTVE9SRSBtZXNzYWdlLgotCi0gICAgICAgICogW3dpbmRvd3MvcGFpbnRpbmcuY10KLSAgICAgICAgQ2hhbmdlZCBSZWRyYXdXaW5kb3coKSBzbyBpdCBkb2Vzbid0IHJlZHJhdyBhbiBpY29uaWMgd2luZG93Ci0gICAgICAgIHVubGVzcyBpdCBoYXMgdG8gKG5vIGljb24gZm9yIHRoaXMgY2xhc3MpLgotICAgICAgICAKLSAgICAgICAgKiBbd2luZG93cy93aW4uY10KLSAgICAgICAgUmVtb3ZlZCBjcmVhdGlvbiBvZiBzZXBlcmF0ZSBpY29uIHdpbmRvdyBmcm9tIENyZWF0ZVdpbmRvd0V4KCkuCi0gICAgICAgIAotICAgICAgICAqIFt3aW5kb3dzL3dpbnBvcy5jXQotICAgICAgICBBZGRlZCBzYXZpbmcgYW5kIHJlc3RvcmluZyBvZiB3aW5kb3cgcmVjdGFuZ2xlIGR1cmluZwotICAgICAgICBpY29uaWZpY2F0aW9uL2RlaWNvbmlmaWNhdGlvbiB0byBTaG93V2luZG93KCkuICBBZGRlZAotCWZ1bmN0aW9ucyB0byByZWN1cnNpdmVseSBoaWRlIGFuZCBzaG93IGNoaWxkcmVuLi4uIGNhbGxlZAotCWJ5IFNob3dXaW5kb3cgZHVyaW5nIGljb25pZmljYXRpb24vZGVpY29uaWZpY2F0aW9uLgotCi1TYXQsIDI3IEF1ZyAxOTk0IDE4OjQ3OjM0ICswMTAwIChNRVQgRFNUKSAgbWlja3lAbWFyaWUucGh5c2lrLnR1LWJlcmxpbi5kZSAoTWljaGFlbCBQYXRyYSkKLQotICAgICAgICAqIFt3aW5kb3dzL21lc3NhZ2UuY10KLSAgICAgICAgV2FpdE1lc3NhZ2UoKTogRml4ZWQgaGFuZGxpbmcgb2Ygd21fdGltZXItbWVzc2FnZXMKLQotICAgICAgICAqIFttaXNjZW11L2ludDIxLmNdCi0gICAgICAgIEZpbmROZXh0RkNCKCk6IFJld3JpdHRlbiB0byBzdXBwb3J0IG90aGVyIGZ1bmN0aW9ucyB0aGFuIGp1c3QKLSAgICAgICAgcmV0dXJuaW5nIHRoZSB2b2x1bWUgbGFiZWwKLQotCSogW21pc2MvZmlsZS5jXQotCU9wZW5GaWxlKCk6IEZpeCBpbiBoYW5kbGluZyBvZiBPRl9DUkVBVEUKLQotV2VkIEF1ZyAyNCAxOTo0MDo0MiBQRFQgMTk5NCAgQW5kcmV3IExhZ29kemluc2tpICAoYW5kcmV3QG5ldGNvbS5jb20pCi0KLQkqIFtpZjE2MzIvdXNlci5zcGVjXQotCUFkZGVkIFNldFBhcmVudC4KLQotCSogW3dpbmRvd3Mvd2luLmNdCi0JQWRkZWQgU2V0UGFyZW50LgotCi1GcmkgQXVnIDE5IDE2OjM3OjAwIDE5OTQgIFRob21hcyBTYW5kZm9yZCA8dC5kLmcuc2FuZGZvcmRAYnJhZGZvcmQuYWMudWs+Ci0KLQkqIFtsb2FkZXIvc2VsZWN0b3IuY10KLQlNYW55IGNoYW5nZXMgdGhyb3VnaG91dCBmaWxlIHRvIGNvcnJlY3QgaGFuZGxpbmcgb2Ygc2hhcmVkIG1lbW9yeQotCWZ1bmN0aW9uIHJldHVybiBjb2Rlcy4gRnJlZUJTRCBhbmQgU3VuT1Mgc2htIGZ1bmN0aW9ucyByZXR1cm4KLQktMSBub3QgMCBvbiBlcnJvci4gSWYgTGludXggaXMgZGlmZmVyZW50LCB0aGVzZSBjaGFuZ2VzCi0Jd2lsbCBoYXZlIHRvIGJlIGJhY2tlZCBvdXQuCi0JQ2xlYW51cFNlbGVjdG9ycygpOiB0aGlzIGlzIGEgbmV3IChpbnRlcm5hbCkgY2FsbCB0byBmcmVlCi0JdXAgYWxsIHNlbGVjdG9ycyAoYW5kIHNobSBoYW5kbGVzL21lbW9yeSkgZm9yIHVzZSBvbiBleGl0LgotCi0JKiBbaW5jbHVkZS9zZWdtZW0uaF0KLQlDaGFuZ2UgY29tbWVudCB0byByZWZsZWN0IG5ldyB1c2Ugb2Ygc2htX2tleQotCi0JKiBbbWlzYy9tYWluLmNdCi0JY2FsbGVkX2F0X2V4aXQoKTogYWRkIGNhbGwgdG8gQ2xlYW51cFNlbGVjdG9ycygpCi0KLU1vbiBBdWcgMjIgMTg6MTk6MjUgMTk5NCAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAbGFtaXN1bi5lcGZsLmNoKQotCi0JKiBbY29udHJvbHMvYnV0dG9uLmNdCi0JVXNlIE9CTV9DSEVDS0JPWEVTIHRvIGRyYXcgY2hlY2sgYm94ZXMgd2l0aCBjb3JyZWN0IGNvbG9ycy4KLQlGaXhlZCBidWcgd2l0aCBXTV9TRVRURVhUIGhhbmRsaW5nLgotCUEgZmV3IGRyYXdpbmcgb3B0aW1pc2F0aW9ucy4KLQotCSogW2NvbnRyb2xzL21lbnUuY10KLQlJbXBsZW1lbnRlZCBjb3JyZWN0IFx0IGFuZCBcYSBoYW5kbGluZyBpbiBtZW51IGl0ZW1zLgotCUltcGxlbWVudGVkIGhlbHAgaXRlbXMgKGZsdXNoIHJpZ2h0KSBvbiBtZW51IGJhci4KLQlBZGRlZCBXTV9FTlRFUk1FTlVMT09QIGFuZCBXTV9FWElUTUVOVUxPT1AgbWVzc2FnZXMuCi0KLQkqIFtjb250cm9scy9zdGF0aWMuY10KLQlGaXhlZCBTU19JQ09OIGNvbnRyb2xzIGFuZCBpbXBsZW1lbnRlZCBTVE1fU0VUSUNPTiBtZXNzYWdlCi0JaGFuZGxpbmcuCi0KLQkqIFtjb250cm9scy93aWRnZXQuY10KLQlTZXQgY3Vyc29yIHRvIElEQ19BUlJPVyBmb3IgYnVpbHQtaW4gY2xhc3Nlcy4KLQotCSogW2luY2x1ZGUvb3B0aW9ucy5oXSBbbWlzYy9tYWluLmNdCi0JQmFja2luZyBzdG9yZSBpcyBub3cgb2ZmIGJ5IGRlZmF1bHQuCi0KLQkqIFtvYmplY3RzL3JlZ2lvbi5jXQotCVVzZSBYIHJlZ2lvbnMgZm9yIHJlY3RhbmdsZSBhbmQgcG9seWdvbiByZWdpb25zOiAqbWFqb3IqIHNwZWVkCi0JaW1wcm92ZW1lbnQuCi0KLQkqIFt3aW5kb3dzL2RpYWxvZy5jXQotCUZpeGVkIHRoZSBmaXggZm9yIGludGVnZXIgaWRzIGluIGNvbnRyb2xzLiBTU19JQ09OIGNvbnRyb2xzIGluCi0JZGlhbG9ncyBzaG91bGQgd29yayBub3cuCi0JSW1wbGVtZW50ZWQgRFNfQUJTQUxJR04gc3R5bGUuCi0KLQkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCi0JSW1wbGVtZW50ZWQgSW52ZXJ0UmduKCkuCi0JTmV3IGludGVybmFsIGZ1bmN0aW9uIEdSQVBIX0RyYXdCaXRtYXAoKSB0byBkcmF3IGJpdG1hcHMgZmFzdGVyCi0JdGhhbiB3aXRoIENyZWF0ZUNvbXBhdGlibGVEQygpICsgQml0Qmx0KCkuCi0KLQkqIFt3aW5kb3dzL21lc3NhZ2UuY10KLQlEZXRlcm1pbmluZyB0aGUgd2luZG93IGZvciBhIG1vdXNlIG1lc3NhZ2UgaXMgbm93IGRvbmUgYXQKLQlHZXRNZXNzYWdlKCkgdGltZS4KLQlNb2RpZmllZCBQZWVrTWVzc2FnZSgpIGhhbmRsaW5nIHRvIGF2b2lkIG5lZWRsZXNzbHkgZmx1c2hpbmcgdGhlCi0Jb3V0cHV0IHF1ZXVlLgotCi0JKiBbd2luZG93cy90aW1lci5jXQotCUNoZWNrIGZvciByZXN0YXJ0IG9mIGEgdGltZXIgKFNldFRpbWVyIGNhbGwgd2l0aCB0aGUgc2FtZSBod25kIGFuZAotCWlkIHRoYW4gYW4gZXhpc3RpbmcgdGltZXIpLgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UdWUgQXVnICA5IDIzOjU4OjI5IE1FVCBEU1QgMTk5NAk8ZXJpa0BoYWNrdGljLm5sPgotCi0JKiBbbWlzYy9maWxlLmNdCi0JT3BlbkZpbGUoKTogQ29tcGxldGx5IHJld3JpdHRlbi4KLQotCSogW21pc2NlbXUvaW50MjEuY10KLQlDcmVhdGVGaWxlKCk6IEZpeGVkIHdyb25nIG1vZGUgaW4gY2FsbCB0byBvcGVuLgotCU9wZW5FeGlzdGluZ0ZpbGUoKTogSW1wbGVtZW50ZWQgZmlsZSBzaGFyaW5nLgotCUZpbmROZXh0KCk6IEZpeGVkLgotCUNyZWF0ZU5ld0ZpbGUoKTogRml4ZWQgd3JvbmcgbW9kZSBpbiBjYWxsIHRvIG9wZW4uCi0JZkxvY2soKTogQWRkZWQgdG8gaGFuZGxlIHJlY29yZCBsb2NraW5nLgotCUdldEZpbGVBdHRyaWJ1dGUoKTogQWRkZWQuCi0JQXMgYSByZXN1bHQsIEFIID0gMHg1YywgMHgwOSwgYW5kIDB4MGIgd2VyZSBjaGFuZ2VkLgotCi0JKiBbbWlzY2VtdS9pbnQyZi5jXQotCUFIID0gMHgxMDogU0hBUkUgaW5zdGFsbGF0aW9uIGNoZWNrCi0gCi0JKiBbbG9hZGVyL3Jlc291cmNlLmNdCi0JQWNjZXNzUmVzb3VyY2UoKTogRml4ZWQuIEEgbmV3IGZpbGUgZGVzY3JpcHRvciB3aWxsIGJlIHJldHVybmVkIGJ5Ci0JZXZlcnkgY2FsbCB0byBBY2Nlc3NSZXNvdXJjZSgpLgotCi0JKiBbd2luZG93cy91dGlsaXR5LmNdCi0Jd3ZzcHJpbnRmKCk6IEZpeGVkLgotCi0JKiBbY29udHJvbHMvbWVudS5jXQotCUZpbmRNZW51SXRlbSgpOiBGaXhlZCAoaGFuZGxpbmcgZm9yIG5Qb3MgPT0gLTEgYWRkZWQpLgkKLQotCSogW3dpbmRvd3Mvd2luLmNdCi0JQ3JlYXRlV2luZG93RXgoKTogQWRkZWQgY2FsbCB0byBXSU5QT1NfR2V0TWluTWF4SW5mby4KLQotCSogW0NvbmZpZ3VyZV0KLQlBZGRlZCB0d28gb3B0aW9ucyBmb3IgYSBwcm9jZXNzb3IgZW11bGF0b3IgdGhhdCBtaWdodCBiZQotCXBsdWdnZWQgaW4gbGF0ZXIuLgotCi0JKiBbbG9hZGVyL3Rhc2suY10gW2luY2x1ZGUvdG9vbGhlbHAuaF0gW2lmMTYzMi90b29saGVscC5zcGVjXQotCUNyZWF0ZU5ld1Rhc2soKSBzdG9yZXMgcmVhbCBtb2R1bGVuYW1lIGluc3RlYWQgb2YgJ1RBU0t4eHh4Jy4KLQlBZGRlZCBUYXNrRmlyc3QoKSwgVGFza05leHQoKSwgVGFza0ZpbmRIYW5kbGUoKS4KLQotCSogW21lbW9yeS9nbG9iYWwuY10KLQlBZGRlZCBzdHViIGZvciBNZW1NYW5JbmZvKCkuCi0KLQkqIFtvYmplY3RzL3RleHQuY10KLQlBZGRlZCBzdHViIGZvciBHZXRUYWJiZWRUZXh0RXh0KCkuCi0KLQkqIFttaXNjZW11LypdCi0JQ2hhbmdlZCBhbGwgcmVmZXJlbmNlcyB0byByZWdpc3RlcnMuIFBsZWFzZSBkb24ndCBhY2Nlc3MKLSAJdGhlIGNvbnRleHQgc3RydWN0dXJlLgotCWZpeCBmb3IgR2V0U3lzdGVtVGltZSgpIGJ5IDxqc3BldGVyQGJpcmNoLmVlLnZ0LmVkdT4gYWRkZWQuCi0KLQkqIFttaXNjL2xzdHIuY10KLQlGaXhlZCBidWcgaW4gQW5zaVVwcGVyKCkgJiBBbnNpTG93ZXIoKS4KLQotCSogW21pc2Mvd2luc29ja2V0LmNdCi0JYnVnZml4IGluIGdldHNvY2tvcHQoKS9zZXRzb2Nrb3B0KCk6IHdpbnNvY2sgdXNlcyBkaWZmZXJlbnQgdmFsdWVzCi0JdGhhbiB1bml4LgotCi0JKiBbb2JqZWN0cy9kaWIuY10KLQlBZGRlZCBESUJfU2V0SW1hZ2VCaXRzX1JMRVs0OF0gdG8gc3VwcG9ydCBjb21wcmVzc2VkIGJpdG1hcHMuCi0KLU1vbiBBdWcgIDggMjE6MTI6MzMgMTk5NCAgRGF2aWQgTWV0Y2FsZmUgPGRhdmlkQHByaXNtLmRlbW9uLmNvLnVrPgotCi0JKiBbY29udHJvbHMvZWRpdC5jXQotCUFkZGVkIHN1cHBvcnQgZm9yIFdNX0NPUFksIFdNX0NVVCBhbmQgV01fUEFTVEUgbWVzc2FnZXMuCi0KLQkqIFt3aW5kb3dzL2RpYWxvZy5jXSBbd2luZG93cy9kZWZkbGcuY10gW2luY2x1ZGUvZGlhbG9nLmhdCi0JTW9kaWZpZWQgZGlhbG9nIGNvZGUgdG8gY3JlYXRlIG5ldyBoZWFwIGZvciBlZGl0IGNvbnRyb2xzCi0JdW5sZXNzIERTX0xPQ0FMRURJVCBzdHlsZSBpcyBzZXQuCi0KLVRodSBBdWcgIDQgMTg6NTA6NTYgMTk5NCAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAbGFtaXN1bi5lcGZsLmNoKQotCi0JKiBbY29udHJvbHMvYnV0dG9uLmNdIFtjb250cm9scy9lZGl0LmNdIFtjb250cm9scy9zdGF0aWMuY10KLQlSZW1vdmVkIHVubmVlZGVkIEdsb2JhbFVubG9jaygpIGNhbGxzLgotCi0JKiBbY29udHJvbHMvbWVudS5jXSBbaW5jbHVkZS9tZW51LmhdCi0JTG90cyBvZiBjaGFuZ2VzLCBmaXhlZCBhIGxvdCBvZiBvbGQgYnVncyBhbmQgaW50cm9kdWNlZCBhIGxvdCBvZgotCW5ldyBvbmVzIDotKQotCS0gQ2hhbmdlZCBtZXNzYWdlIGxvb3AgdG8gdXNlIE1TR19HZXRJbnRlcm5hbE1lc3NhZ2UoKS4KLQktIEZpeGVkIGEgYnVnIHRoYXQgY2F1c2VkIHRoZSBtYWluIHdpbmRvdyB0byBsb3NlIGFjdGl2YXRpb24gd2hlbgotCSAgZGlzcGxheWluZyBhIG1lbnUuCi0JLSBDb3JyZWN0bHkgc2VuZCBpbml0aWFsaXNhdGlvbiBtZXNzYWdlcyAoV01fSU5JVE1FTlVQT1BVUCkuCi0JLSBJbXBsZW1lbnRlZCBFbmRNZW51KCkgYW5kIExvb2t1cE1lbnVIYW5kbGUoKS4KLQktIENoYW5nZWQgaW50ZXJuYWwgc3RydWN0dXJlcyB0byBiZSBhcyBjb21wYXRpYmxlIGFzIHBvc3NpYmxlIHdpdGgKLQkgIE1TLVdpbmRvd3MuCi0JLSBBbGxvY2F0ZWQgZXZlcnl0aGluZyBvbiB0aGUgVVNFUiBoZWFwIGluc3RlYWQgb2YgdGhlIGdsb2JhbCBoZWFwLgotCS0gUHJlZml4ZWQgYWxsIGludGVybmFsIGZ1bmN0aW9uIG5hbWVzIHdpdGggTUVOVV8gYW5kIGRlY2xhcmVkCi0JICB0aGVtIHN0YXRpYy4KLQktIE1vdmVkICJBYm91dCBXaW5lLi4uIiBoYW5kbGluZyB0byBOQ19IYW5kbGVTeXNDb21tYW5kKCkuCi0JLSBNdWx0aS1saW5lIG1lbnVzIHNob3VsZCBub3cgd29yayBjb3JyZWN0bHkuCi0KLQkqIFtsb2FkZXIvcmVzb3VyY2UuY10gW29iamVjdHMvYml0bWFwLmNdCi0JQWRkZWQgdGhlIHBvc3NpYmlsaXR5IHRvIGNyZWF0ZSBPRU0gYml0bWFwcyBkaXJlY3RseSBhcyBYIGJpdG1hcHMuCi0KLQkqIFtvYmplY3RzL2RjdmFsdWVzLmNdIFt3aW5kb3dzL2RjLmNdCi0JRml4ZWQgR2V0RENPcmcoKSB0byByZXR1cm4gc2NyZWVuIGNvb3JkaW5hdGVzLgotCi0JKiBbd2luZG93cy9tZXNzYWdlLmNdCi0JRml4ZWQgZG91YmxlLWNsaWNrIGNoZWNrcyB3aGVuIHRoZSBtZXNzYWdlIGlzIG5vdCByZW1vdmVkIGZyb20gdGhlCi0JcXVldWUuCi0JRml4ZWQgTVNHX0dldEludGVybmFsTWVzc2FnZSgpIHRvIHNlbmQgV01fRU5URVJJRExFIG1lc3NhZ2VzLgotCi0JKiBbd2luZG93cy9ub25jbGllbnQuY10KLQlCdWcgZml4IGluIHN5c3RlbSBtZW51IGhpdC10ZXN0IGNhbGN1bGF0aW9uLgotCUEgZmV3IGNoYW5nZXMgZm9yIG5ldyBtZW51IGZ1bmN0aW9ucy4KLQotVGh1IEF1ZyAxMSAxNzo1MTowMiAxOTk0ICBUaG9tYXMgU2FuZGZvcmQgPHQuZC5nLnNhbmRmb3JkQGJyYWRmb3JkLmFjLnVrPgotCi0gICAgICAgICogW2NvbnRyb2xzL2VkaXQuY10KLSAgICAgICAgQnVnIGZpeCBpbiBFZGl0X05DQ3JlYXRlTWVzc2FnZQotICAgICAgICBlcy0+dGV4dGxlbiB3YXMgYmVpbmcgdXNlZCBiZWZvcmUgYmVpbmcgc2V0Ci0KLSAgICAgICAgKiBbY29udHJvbHMvbWVudS5jXQotICAgICAgICBCdWcgZml4IGluIE1FTlVfRHJhd01lbnVJdGVtCi0gICAgICAgIGRvbid0IHRyeSB0byB3cml0ZSB0ZXh0IGlmIE5VTEwgcG9pbnRlciBwYXNzZWQKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVGh1IEF1ZyAgNCAwNzoxODowMiAxOTk0ICBNaWNoYWVsIFBhdHJhICA8bWlja3lAbWFyaWUucGh5c2lrLnR1LWJlcmxpbi5kZT4KLQotICAgICAgICAqIFt3aW5kb3dzL21lc3NhZ2UuY10KLQlJbXBsZW1lbnRlZCBXYWl0TWVzc2FnZSgpIChVU0VSLjExMikuCi0KLSAgICAgICAgKiBbaWYxNjMyL3VzZXIuc3BlY10KLQlBZGRlZCBXYWl0TWVzc2FnZS4KLQotCSogW3dpbmRvd3MvZGVmd25kLmNdCi0JV01fRVJBU0VCS0dORDogQWRkZWQgc3VwcG9ydCBmb3IgaGJyQmFja2dyb3VuZD1DT0xPUl94eHguCi0KLSAgIAkqIFttaXNjZW11L2ludHsxMywyMSwyYX0uY10KLSAgICAgICAgKiBbbWlzY2VtdS9JbWFrZWZpbGVdCi0JKiBbc2lnbmFsL2xvYWRlci5jXQotCUFkZGVkIGEgZmV3IGJhc2ljIGRpc2sgaW5mb3JtYXRpb24gYW5kIGRpYWdub3N0aWMgZnVuY3Rpb25zIHRvCi0JcHJldmVudCBwcm9ncmFtcyB1c2luZyB0aGlzIGZ1bmN0aW9uIGZyb20gY3Jhc2hpbmcuIEFsbCBkcml2ZXMKLQlhcmUgY2xhaW1lZCB0byBiZSByZW1vdGUgb25lcywgc28gZGlyZWN0IEkvTyBpc24ndCBhbGxvd2VkLgotCi0JKiBbY29udHJvbHMvZWRpdC5jXQotCUVESVRfV3JpdGVUZXh0KCk6IEFkZGVkIGNvZGUgdG8gY29ycmVjdGx5IGVyYXNlIHRoZSByZW1haW5pbmcgc3BhY2UKLQlvZiB0aGUgZWRpdC1jb250cm9sIGlmIHRoZSBzaXplIG9mIHRoZSBjb250cm9sIGhhcyBjaGFuZ2VkIHNpbmNlZCBpdCdzCisJKiB3aW5kb3dzL3dpbnBvcy5jOiBSZWluIEtsYXplcyA8cmtsYXplc0BjYXNlbWEubmV0PgorCUZpeGVkIGFuIGVycm9yIHdoZW4gYW4gb3duZWQgd2luZG93IGFjdGl2YXRlcyBpdHMgb3duZXIgZHVyaW5nCiAJY3JlYXRpb24uCiAKLVR1ZSBKdWwgMjYgMjI6MDU6NTQgTUVUIERTVCAxOTk0IEVyaWsgQm9zIDxlcmlrQGhhY2t0aWMubmw+CisJKiB3aW5kb3dzL2RlZmRsZy5jOiBSZWluIEtsYXplcyA8cmtsYXplc0BjYXNlbWEubmV0PgorCUNsb3NpbmcgYSBkaWFsb2cgdXNpbmcgdGhlIG1lbnUgYmFyICgieCIgb3IgIi0iIGJ1dHRvbiBvciB3aW5kb3dzCisJbWVudSkgbXVzdCBnZW5lcmF0ZSBhIFdNX0NPTU1BTkQrSURDQU5DRUwgbWVzc2FnZSwgdW5saWtlIGNsb3NpbmcKKwlub3JtYWwgd2luZG93cyB3aGVuIERlc3Ryb3lXaW5kb3coKSBpcyBjYWxsZWQuCiAKLQkqIFtpZjE2MzIvbW91c2Uuc3BlY10KLQlBZGRlZCBtb3VzZS5kbGwgZW50cnksIG5vIGZ1bmN0aW9ucy4KKwkqIGRsbHMvc2hlbGwzMi9waWRsLmM6CisJTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CisJQWRkZWQgbWlzc2luZyBXSU5BUElzLgogCi0JKiBbbG9hZGVyL3Jlc291cmNlLmNdCi0JQnVnIGZpeCBpbiBBY2Nlc3NSZXNvdXJjZSgpLiAKKwkqIHdpbmRvd3Mvd2lucG9zLmMsIHdpbjMyL29yZGluYWxzLmMsIHJlbGF5MzIvdXNlcjMyLnNwZWM6CisJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CisJTmV3IHN0dWJzIFByaXZhdGVFeHRyYWN0SWNvbkV4W0FXXSwgUHJpdmF0ZUV4dHJhY3RJY29uc1csCisJUmVnaXN0ZXJTaGVsbEhvb2tXaW5kb3csIERlcmVnaXN0ZXJTaGVsbEhvb2tXaW5kb3csIEdldFByb2dtYW5XaW5kb3csCisJR2V0VGFza21hbldpbmRvdywgU2V0UHJvZ21hbldpbmRvdywgU2V0U2hlbGxXaW5kb3dFeCwKKwlTZXRUYXNrbWFuV2luZG93LgogCi0JKiBbbWlzYy9rZXlib2FyZC5jXSwgYWRkZWQgW2luY2x1ZGUva2V5Ym9hcmQuaF0KLQlDaGFuZ2VkIGZ1bmN0aW9ucyB0byByZXR1cm4gbW9yZSB1c2VmdWwgdmFsdWVzLgorCSogcmVsYXkzMi9udGRsbC5zcGVjLCBtaXNjL250ZGxsLmM6CisJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CisJTmV3IHN0dWJzIE50UXVlcnlJbmZvcm1hdGlvblRocmVhZCwgTnRRdWVyeUluZm9ybWF0aW9uVG9rZW4sCisJUnRsQWxsb2NhdGVBbmRJbml0aWFsaXplU2lkLCBSdGxFcXVhbFNpZCwgUnRsRnJlZVNpZC4KIAotCSogW3dpbmRvd3MvZGlhbG9nLmNdCi0JSGFja2VkIERJQUxPR19HZXRDb250cm9sKCkgdG8gc3VwcG9ydCByZXNvdXJjZXMgd2hpY2gKLQloYXZlIDB4ZmYwMCAtIDB4ZmZmZiBhcyBpZC4gKiogTmVlZHMgdG8gYmUgZG9uZSBwcm9wZXJseSBieQotCXNvbWVvbmUgd2hvIGtub3dzIHRoZSBORSBmaWxlZm9ybWF0ICoqCisJKiBtdWx0aW1lZGlhL21tc3lzdGVtLmM6IFR1cmNoYW5vdiBTZXJnZXkgPHR1cmNoYW5vdkB1c2EubmV0PgorCUZpeGVkIFBsYXlTb3VuZCB0byBzdGFydCBpdHMgdGhyZWFkIHRoZSByaWdodCB3YXkuCiAKLUp1bCAyOSwgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQorV2VkIE9jdCAxNCAxODo0MDozNSAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgogCi0JKiBbd2luZG93cy9ldmVudC5jXQotCUFkZCBuZXcgc3R1YiBmb3IgRW5hYmxlSEdhcmR3YXJlSW5wdXQoKSBmdW5jdGlvbi4KKwkqIGNvbnRyb2xzL2NvbWJvLmMsIGNvbnRyb2xzL2xpc3Rib3guYzoKKwlBbGV4IEtvcm9ia2EgPGtvcm9ia2FAYW1zLnN1bnlzYi5lZHU+CisJQ0JfU0VUQ1VSU0VMIGFuZCBzb21lIG90aGVyIGZpeGVzLgogCi0JKiBbd2luZG93cy9tZXNzYWdlLmNdCi0JQWRkIGNvZGluZyBmb3IgSFdORF9CUk9BRENBU1QgaW4gUG9zdE1lc3NhZ2UoKS4KKwkqIHdpbmRvd3MvcXVldWUuYzogQWxleCBLb3JvYmthIDxrb3JvYmthQGFtcy5zdW55c2IuZWR1PgorCUJldHRlciBRVUVVRV9GbHVzaE1lc3NhZ2VzKCkuCiAKLQkqIFttaXNjL2ZpbGUuY10KLQlBZGQgY29kaW5nIGZvciBPcGVuRmlsZSgpIGFsc28gc2VhcmNoIGluIFdpbmRvd1BhdGhzLgorCSogcmVsYXkzMi9nZGkzMi5zcGVjLCBvYmplY3RzL2ZvbnQuYywgaW5jbHVkZS93aW5kb3dzLmgsIGlmMTYzMi9nZGkuc3BlYzoKKwlNb3NoZSBWYWluZXIgPG1vc2hldkBlYXN5YmFzZS5jb20+CisJUGFydGlhbCBpbXBsZW1lbnRhdGlvbiBvZiBHZXRPdXRsaW5lVGV4dE1ldHJpY3MzMkEuCisJQWRkZWQgc3RydWN0dXJlcyBmb3IgT1VUTElORVRFWFRNRVRSSUNTLgogCi0JKiBbbWlzYy9tbXN5c3RlbS5jXQotCSogW21pc2MvYXVkaW8uY10KLQkqIFttaXNjL21tYXV4LmNdCi0JKiBbbWlzYy9tY2ljZGEuY10KLQlDaGFuZ2UgI2luY2x1ZGUgImxpbnV4L3NvdW5kY2FyZC5oIiBieSAjaW5jbHVkZSAic3lzL3NvdW5kY2FyZC5oIgotCUFkZCBjb2RpbmcgaW4gTU1JTyBmdW5jdGlvbnMuIE5vdywgbW1pb0Rlc2NlbmQoKSBjYW4gZmluZCBXQVYgY2h1bmtzLgotCVNuZFBsYXlTb3VuZCAmIE1DSV9FTEVNRU5UIG5vdyB1c2UgTU1JTyBhbmQgYWRqdXN0IHRvIHByb3BlciBmb3JtYXRzLgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotTW9uIEp1bCAxOCAyMzo1NToxMyBNRVQgRFNUIDE5OTQKKwkqIG9iamVjdHMvZGMuYywgaW5jbHVkZS9nZGkuaCwgZ3JhcGhpY3MveDExZHJ2L2JpdGJsdC5jLCBncmFwaGljcy94MTFkcnYvYml0bWFwLmMsIGdyYXBoaWNzL3gxMWRydi9pbml0LmM6CisJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CisJRG8gbm90IGNsaXAgc291cmNlIHJlY3RhbmdsZSBldmVuIGJ5IHZpc2libGUgcmVnaW9uIGZvciBiaXRibHRzLgorCUFkZGVkIGZpZWxkICd0b3RhbEV4dGVudCcgdG8gV0lOX0RDX0lORk8uCiAKLQkqIFtpZjE2MzIvY2FsbC5TXQotCUNhbGxUbzE2KCk6IGFkZGVkIGBtb3YgJWVheCwlZWR4JyBqdXN0IGJlZm9yZSBsY2FsbCwKLQl0byBtYWtlIHN1cmUgdGhhdCBEWCBjb250YWluIHRoZSBETEwncyBoaW5zdGFuY2Ugd2hlbgotCWluaXRpYWxpc2VkLgorCSogbXNkb3MvdnhkLmM6IFVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgorCUFkZGVkIHN0dWIgZm9yIFZNTSBQTSBBUEkgQUg9MDI2W2RlXSAobmV2ZXIgc2F5ICdzYWZlIG1vZGUnKS4KIAotCUNhbGxUbzMyXzE2KCkgYWRkZWQsIGVxdWFsIHRvIENhbGxUbzMyKCkgZXhjZXB0IGZvcgotCW9uZSB0aGluZzogaXQgc2F2ZXMgRFggYW5kIAorCSogbWVtb3J5L2hlYXAuYzogVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CisJQnVnZml4OiBMb2NhbDMyRnJlZSBjYXVzZWQgZnJlZSBoYW5kbGVzIGxpc3QgY29ycnVwdGlvbi4KIAotCSogW3Rvb2xzL2J1aWxkLmNdCi0JQWRkZWQgc29tZSBjb2RlIHRvIHN1cHBvcnQgMTYgYW5kIDMyIGJpdCByZXR1cm4gdmFsdWVzLgorCSogaW5jbHVkZS9kZWJ1Z3Rvb2xzLmg6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgorCUZpeGVkIC0tZGlzYWJsZS1kZWJ1ZyBjb25maWcgb3B0aW9uLgogCi0JKiBbMTYzMi97a2VybmVsLHVzZXJ9LnNwZWNdCi0JQ2hhbmdlZCBtb3N0IG9mIHRoZSBgcGFzY2FsJyBzdHlsZSB0byBwYXNjYWxfMTYgd2hlbgotCWZ1bmN0aW9uIHJldHVybmVkIGEgMTZiaXQgdmFsdWUuCitUdWUgT2N0IDEzIDEyOjUwOjA0IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CiAKLVR1ZSBKdWwgMTkgMTg6NDA6MjUgMTk5NCAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAbGFtaXN1bi5lcGZsLmNoKQorCSogcmVsYXkzMi9zaGVsbDMyLnNwZWMsIGRsbHMvc2hlbGwzMi9zaGVsbG9yZC5jOgorCVBldHRlciBSZWluaG9sZHRzZW4gPHBlcmVAdGQub3JnLnVpdC5ubz4KKwlBZGRlZCBzdHVicyBTSFJlZ0Nsb3NlS2V5KCksIFNIUmVnT3BlbktleVtBV10oKSwgU0hSZWdRdWVyeVZhbHVlRXhBKCkKKwlhbmQgRmlsZUljb25Jbml0KCkgbmVlZGVkIGJ5IFdpbjk1IGV4cGxvcmVyLgogCi0JKiBbY29udHJvbHMvbWVudS5jXQotCVJlb3JnYW5pemVkIHNpemluZyBhbmQgZHJhd2luZyBjb2RlIHRvIGltcGxlbWVudCBtdWx0aS1saW5lIG1lbnVzLgotCUltcGxlbWVudGVkIE1FTlVCUkVBSyBzdHlsZS4KLQlVc2Ugc3lzdGVtIGNvbG9ycyB0byBkcmF3IG1lbnVzLgorTW9uIE9jdCAxMiAwNzoyNTo1NCAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgogCi0JKiBbb2JqZWN0cy9jb2xvci5jXQotCUJ1ZyBmaXggaW4gQ09MT1JfSXNTb2xpZCgpLgorCSogd2luZG93cy9kaWFsb2cuYywgY29udHJvbHMvYnV0dG9uLmMsIGNvbnRyb2xzL21lbnUuYzoKKwlOb3JtYW4gU3RldmVucyA8bm9ybWFuQGFyY2FkeS51LW5ldC5jb20+CisJSW1wcm92aW5nIGtleWJvYXJkIGhhbmRsaW5nLCBpbmNsdWRpbmcgYWNjZWxlcmF0b3Iga2V5cyBpbiBkaWFsb2cKKwlib3hlcy4gQWxzbyBmaXhlcyBlbnRlciBrZXkgaW4gQWdlbnQzMiBlZGl0IGJveC4KIAotCSogW29iamVjdHMvZm9udC5jXQotCUJ1ZyBmaXggaW4gRk9OVF9HZXRNZXRyaWNzKCk6IGNhbGN1bGF0ZSBhdmVyYWdlIGNoYXJhY3RlciB3aWR0aAotCW9ubHkgb24gZXhpc3RpbmcgY2hhcnMgKGRpYWxvZ3MgbG9vayBtdWNoIGJldHRlcikuCitTdW4gT2N0IDExIDE5OjM3OjIzIDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CiAKLQkqIFtvYmplY3RzL3RleHQuY10KLQlCdWcgZml4IGluIERyYXdUZXh0KCk6IHVzZSB0ZXh0IGNvbG9yIHRvIHVuZGVybGluZSBtbmVtb25pYy4KKwkqIG1pc2MvY29tbWRsZy5jOiBFcmljIFBvdWVjaCAgPGVyaWMucG91ZWNoQGxlbWVsLmZyPgorCUFkZGVkIHN1cHBvcnQgaW4gZmlsZSBkaWFsb2cgYm94ZXMgaGFuZGxpbmcgZm9yIGZpbHRlcnMgbGlrZQorCSIqLnR4dDsqLmJhdCIuCiAKLQkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQotCUNoYW5nZWQgV01fTkNISVRURVNUIGhhbmRsaW5nIHRvIGNvcGUgd2l0aCBtdWx0aS1saW5lIG1lbnUgYmFycy4KKwkqIHdpbjMyL2tlcm5lbDMyLmMsIHNjaGVkdWxlci90aHJlYWQuYywgbG9hZGVyL21vZHVsZS5jLCBsb2FkZXIvcGVfaW1hZ2UuYywgbG9hZGVyL3Rhc2suYywgaW5jbHVkZS9tb2R1bGUuaCwgaW5jbHVkZS9wZV9pbWFnZS5oOgorCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgorCUltcGxlbWVudGVkIG5ldyBQRSBETEwgaW5pdGFsaXphdGlvbiBjb2RlLCB0cnlpbmcgdG8gY2FsbCB0aGUKKwlEbGxFbnRyeVBvaW50IHJvdXRpbmVzIGFsd2F5cyBpbiBjb3JyZWN0IG9yZGVyIDotKQorCUJ5cGFzcyBzbm9vcGluZyB3aGVuIGdldHRpbmcgZGF0YSBidWZmZXIgYWRkcmVzc2VzICh0aHVuayBidWZmZXJzLAorCV9fR1AgaGFuZGxlcnMpIGFuZCBmb3IgMzItYml0IHJvdXRpbmVzIGRpcmVjdGx5IGNhbGxlZCBmcm9tIDE2LWJpdAorCShkdWUgdG8gc3RhY2sgYWRkcmVzcyBzaXplIHByb2JsZW1zKS4KIAotCSogW3dpbmRvd3Mvc3lzY29sb3IuY10KLQlBZGRlZCBzeXN0ZW0gb2JqZWN0cyBmb3IgbWVudSBjb2xvcnMuCisJKiB3aW4zMi9vcmRpbmFscy5jLCByZWxheTMyL2tlcm5lbDMyLnNwZWMsIGxvYWRlci9uZS9tb2R1bGUuYzoKKwlVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KKwlJbXBsZW1lbnRlZCBDb21tb25VbmltcFN0dWIsIE1hcEhJbnN0KExTfFNMKV9QTiwgVzMyU19CYWNrVG8zMi4KKwlTdHViIGZvciBIb3VzZUNsZWFuTG9naWNhbGx5RGVhZEhhbmRsZXMsIGZpeGVkIGszMnd2c3ByaW50ZkEuCiAKLU1vbiBKdWwgMTggMTk6MzI6MDggUERUIDE5OTQgIEFuZHJldyBMYWdvZHppbnNraSAgKGFuZHJld0BuZXRjb20uY29tKQorCSogdG9vbHMvYnVpbGQuYywgaWYxNjMyL2tlcm5lbC5zcGVjLCBpZjE2MzIvcmVsYXkuYywgaWYxNjMyL3RodW5rLmM6CisJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CisJSW1wbGVtZW50ZWQgKHBhcnRpYWxseSkgdGhlIEtFUk5FTCBUaHVua2xldCBBUEkgYW5kIENhbGxiYWNrIENsaWVudAorCUFQSSAoS0VSTkVMLjU2MC01NjgsNjA0LTYxMiw2MTktNjIyKS4KKwlBZGRlZCBzdHVicyBmb3IgSzIyOCwgSzIzNywgS0VSTkVMLjM2NSwgS0VSTkVMLjQ0Ny4KIAotICAgICAgICAqIFtjb250cm9scy9tZW51LmNdCi0gICAgICAgIEZpeGVkIGJ1ZyBpbiBTZWxlY3RQcmV2SXRlbSB0aGF0IGNhdXNlZCBzZXBlcmF0b3JzIHRvIG5vdCBiZQotCXNraXBwZWQgd2hlbiB1c2luZyB0aGUgdXAgYXJyb3cga2V5LgorCSogb2JqZWN0cy9iaXRtYXAuYywgaWYxNjMyL2dkaS5zcGVjOgorCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgorCVN0dWJzIGZvciBDcmVhdGVVc2VyKERpc2NhcmRhYmxlKUJpdG1hcDE2LgogCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaHUgSnVsIDE0IDE3OjUwOjQ1IDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCisJKiBtZW1vcnkvaGVhcC5jLCBpbmNsdWRlL3dpbm50Lmg6CisJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CisJSW1wbGVtZW50ZWQgSEVBUF9XSU5FX0NPREUxNlNFRyBTRUdQVFIgaGVhcHMgd2l0aCAxNi1iaXQgY29kZSBzZWdtZW50cy4KIAotCSogW0NvbmZpZ3VyZV0KLQlBdXRvZGV0ZWN0cyBMaW51eCB2ZXJzaW9uIChpZiBydW5uaW5nIExpbnV4KS4KKwkqIG1lbW9yeS9nbG9iYWwuYywgaW5jbHVkZS93aW5kb3dzLmg6CisJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CisJR2xvYmFsRml4MTYgaXMgc3VwcG9zZWQgdG8gcmV0dXJuIHNlbGVjdG9yIHRvIHRoZSBtZW1vcnkgYXJlYS4KIAotCSogW2xvYWRlci9zaWduYWwuY10KLQlOZXcgc2lnbmFscyBmb3IgTGludXguCisJKiBtc2Rvcy92eGQuYywgaWYxNjMyL01ha2VmaWxlLmluLCBpZjE2MzIvYnVpbHRpbi5jLCBpZjE2MzIvY29tbS5zcGVjLCBpZjE2MzIvd3Byb2NzLnNwZWM6CisJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CisJU3R1YnMgZm9yIENPTU0uRFJWLCBSRUJPT1QuVlhELCBWREQuVlhELgogCi0JKiBbbG9hZGVyL2xkdGxpYi5jXQotCU5ldyBzdHJ1Y3R1cmUgZmllbGQgaW4gc3lzIGNhbGwuCisJKiBzY2hlZHVsZXIvcHJvY2Vzcy5jLCBzY2hlZHVsZXIvc3lzbGV2ZWwuYywgaW5jbHVkZS9zaWdfY29udGV4dC5oLCBpbmNsdWRlL3N5c2xldmVsLmg6CisJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CisJVXNlIGVtZXJnZW5jeSBURUIgc2VsZWN0b3IgdG8gYXZvaWQgZGVidWdnZXIgY3Jhc2hlcyB3aGVuIHN0ZXBwaW5nCisJdGhyb3VnaCByZWxheSBzdHVicyAob3Igd2hlbiBGUyBpcyBpbnZhbGlkIG90aGVyd2lzZSkuCiAKLVN1biBKdWwgMTAgMTk6MzE6MzQgMTk5NCAgT2xhZiBGbGViYmUgIChvbGFmQGRyYWdvbikKKwkqIHdpbmRvd3MvZXZlbnQuYywgd2luZG93cy9rZXlib2FyZC5jOgorCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgorCU1PVVNFLkRSViByb3V0aW5lcyBtb3ZlZCB0byBldmVudC5jLiBDYWxsIG1vdXNlIGV2ZW50IHByb2NlZHVyZS4KIAotICAgICAgICAqIFtsb2FkL3Jlc291cmNlLmNdIAotICAgICAgICAgIGZpeGVkIE1lbW9yeSAoUmVzb3VyY2UpIExlYWsuCisJKiB3aW5kb3dzL2RjZS5jLCB3aW5kb3dzL3BhaW50aW5nLmMsIHdpbmRvd3Mvc2Nyb2xsLmMsIG9iamVjdHMvY2xpcHBpbmcuYywgb2JqZWN0cy9kYy5jLCBvYmplY3RzL2RjdmFsdWVzLmMsIGluY2x1ZGUvZGMuaCwgaW5jbHVkZS93aW5kb3dzLmgsIGlmMTYzMi9nZGkuc3BlYywgZ3JhcGhpY3MveDExZHJ2L2JpdGJsdC5jLCBncmFwaGljcy94MTFkcnYvY2xpcHBpbmcuYywgZ3JhcGhpY3MveDExZHJ2L2dyYXBoaWNzLmMsIGdyYXBoaWNzL3gxMWRydi90ZXh0LmMsIGdyYXBoaWNzL3BhdGguYzoKKwlVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KKwlDaGFuZ2VkIERDIG1lbWJlcnMgdy5oVmlzUmduLCB3LmhDbGlwUmduLCBhbWQgdy5oR0NDbGlwUmduIHRvCisJY29vcmRpbmF0ZXMgcmVsYXRpdmUgdG8gdGhlIGRldmljZSwgbm90IHRoZSBEQyBvcmlnaW4uIFRoaXMgaXMKKwluZWNlc3NhcnkgdG8gY29ycmVjdGx5IGltcGxlbWVudCBHZXRDbGlwUmduMTYgYW5kIElucXVpcmVWaXNSZ24uCisJU2VsZWN0VmlzUmduIGFsc28gZXhwZWN0cyByZWdpb24gaW4gZGV2aWNlLXJlbGF0aXZlIGNvb3JkaW5hdGVzLgorCUFkYXB0ZWQgdGhlIHJlc3Qgb2YgV2luZSB0byB0aGlzIGNvb3JkaW5hdGUgY2hhbmdlLgorCUltcGxlbWVudGVkIEV4dFNlbGVjdENsaXBSZ24uCiAKLSAgICAgICAgKiBbbG9hZC9tYWluLmNdIAotICAgICAgICAgIGZpeGVkIGEgcHJpbnRmLgorCSogdG9vbHMvd2luYXBpLWNoZWNrLCBzY2hlZHVsZXIvc3lzbGV2ZWwuYywgZmlsZXMvZG9zX2ZzLmM6CisJQW5kcmVhcyBNb2hyIDwxMDAuMzA5MzZAZ2VybWFueS5uZXQ+CisJU21hbGwgZml4LgogCi1UdWUgSnVsIDEyIDE4OjUwOjM0IDE5OTQgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQGxhbWlzdW4uZXBmbC5jaCkKKwkqIGxvYWRlci9uZS9zZWdtZW50LmMsIGluY2x1ZGUvbW9kdWxlLmgsIGluY2x1ZGUvbmVleGUuaCwgaWYxNjMyL2tlcm5lbC5zcGVjOgorCUFuZHJlYXMgTW9ociA8MTAwLjMwOTM2QGdlcm1hbnkubmV0PgorCVlldCBhbm90aGVyIHNtYWxsIHNlbGYtbG9hZGVyIGZpeC4KIAotCSogW2NvbnRyb2xzL2Rlc2t0b3AuY10KLQlJbXBsZW1lbnRlZCBkZXNrdG9wIHdhbGxwYXBlciAob25seSAxNiBjb2xvcnMgZm9yIG5vdykuCisJKiBmaWxlcy9kcml2ZS5jOiBBbmRyZWFzIE1vaHIgPDEwMC4zMDkzNkBnZXJtYW55Lm5ldD4KKwlGaXhlZCBzZXZlcmUgYnVnOiBTZXRDdXJyZW50RGlyZWN0b3J5MzJBIGRpZG4ndCBzZXQgcFRhc2stPmN1cmRpcgorCWNvcnJlY3RseSBkdWUgdG8gY3VycmVudCBkcml2ZSBiZWluZyBzZXQgdG9vIGxhdGUuCiAKLQkqIFtjb250cm9scy9tZW51LmNdIFt3aW5kb3dzL25vbmNsaWVudC5jXQotCVByZWxpbWluYXJ5IHdvcmsgdG8gYWxsb3cgbXVsdGktbGluZSBtZW51cy4KKwkqIE1ha2UucnVsZXMuaW46IFBhdHJpayBTdHJpZHZhbGwgPHBzQGxlaXNzbmVyLnNlPgorCVVzZSAkKEFTKSBpbnN0ZWFkIG9mICQoQ0MpIHRvIGNvbXBpbGUgLnMgZmlsZXMuCiAKLQkqIFttaXNjL21haW4uY10KLQlObyBiYWNraW5nIHN0b3JlIG9uIGRlc2t0b3Agd2luZG93IChub3QgdXNlZnVsKS4KKwkqIHJlbGF5MzIvLmN2c2lnbm9yZSwgcmVsYXkzMi9NYWtlZmlsZS5pbiwgcmVsYXkzMi9idWlsdGluMzIuYywgaW5jbHVkZS9kZWJ1Zy5oLCBpbmNsdWRlL2RlYnVnZGVmcy5oLCBpbmNsdWRlL21tcmVnLmgsIGlmMTYzMi8uY3ZzaWdub3JlLCBpZjE2MzIvTWFrZWZpbGUuaW4sIGlmMTYzMi9idWlsdGluLmMsIGRsbHMvTWFrZWZpbGUuaW4sIE1ha2VmaWxlLmluLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKKwlQYXRyaWsgU3RyaWR2YWxsIDxwc0BsZWlzc25lci5zZT4KKwlTdGFydGVkIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBNU0FDTS5ETEwsIE1TQUNNMzIuRExMIGFuZCBJTUFHRUhMUC5ETEwuCiAKLQkqIFtvYmplY3RzL3RleHQuY10KLQlBIGZldyBmaXhlcyB0byBEcmF3VGV4dCgpIHRvIG1ha2UgdW5kZXJsaW5lcyB1bmRlciBtbmVtb25pYwotCWxldHRlcnMgdG8gbG9vayBiZXR0ZXIuCisJKiBpbmNsdWRlL2ltYWdlaGxwLmgsIHJlbGF5MzIvaW1hZ2VobHAuc3BlYywgZGxscy9pbWFnZWhscC8uY3ZzaWdub3JlLCBkbGxzL2ltYWdlaGxwL01ha2VmaWxlLmluLCBkbGxzL2ltYWdlaGxwL2FjY2Vzcy5jLCBkbGxzL2ltYWdlaGxwL2RlYnVnLmMsIGRsbHMvaW1hZ2VobHAvaW1hZ2VobHBfbWFpbi5jLCBkbGxzL2ltYWdlaGxwL2ludGVncml0eS5jLCBkbGxzL2ltYWdlaGxwL2ludGVybmFsLmMsIGRsbHMvaW1hZ2VobHAvbW9kaWZ5LmMsIGRsbHMvaW1hZ2VobHAvc3ltYm9sLmM6CisJUGF0cmlrIFN0cmlkdmFsbCA8cHNAbGVpc3NuZXIuc2U+CisJU3RhcnRlZCB0aGUgaW1wbGVtZW50YXRpb24gb2YgSU1BR0VITFAuRExMLgogCi0JKiBbd2luZG93cy9ncmFwaGljcy5jXQotCU1vcmUgZml4ZXMgdG8gR1JBUEhfRHJhd0FyYygpLCBhbmQgc29tZSBmaXhlcyB0byBQb2x5Z29uKCkuCi0JSW1wbGVtZW50ZWQgUG9seVBvbHlnb24oKSAocGFydGlhbGx5IHdvcmtpbmcpLgorCSogaW5jbHVkZS9tc2FjbS5oLCBpbmNsdWRlL21zYWNtZHJ2LmgsIHJlbGF5MzIvbXNhY20zMi5zcGVjLCBpZjE2MzIvbXNhY20uc3BlYywgZGxscy9tc2FjbTMyLy5jdnNpZ25vcmUsIGRsbHMvbXNhY20zMi9NYWtlZmlsZS5pbiwgZGxscy9tc2FjbTMyL2J1aWx0aW4uYywgZGxscy9tc2FjbTMyL2RyaXZlci5jLCBkbGxzL21zYWNtMzIvZmlsdGVyLmMsIGRsbHMvbXNhY20zMi9mb3JtYXQuYywgZGxscy9tc2FjbTMyL2ludGVybmFsLmMsIGRsbHMvbXNhY20zMi9tc2FjbTMyX21haW4uYywgZGxscy9tc2FjbTMyL3N0cmVhbS5jLCBkbGxzL21zYWNtLy5jdnNpZ25vcmUsIGRsbHMvbXNhY20vTWFrZWZpbGUuaW4sIGRsbHMvbXNhY20vbXNhY21fbWFpbi5jOgorCVBhdHJpayBTdHJpZHZhbGwgPHBzQGxlaXNzbmVyLnNlPgorCVN0YXJ0ZWQgdGhlIGltcGxlbWVudGF0aW9uIG9mIE1TQUNNLkRMTCBhbmQgTVNBQ00zMi5ETEwuCiAKLQkqIFt3aW5kb3dzL3dpbnBvcy5jXQotCU5ldyBmdW5jdGlvbiBXSU5QT1NfU2VuZE5DQ2FsY1NpemUoKS4KLQlDbGVhbmVkIHVwIFNldFdpbmRvd1BvcygpIGFuZCBhZGRlZCBwcmVsaW1pbmFyeSBzdXBwb3J0IGZvcgotCW11bHRpLWxpbmUgbWVudXMuCisJKiB3aW4zMi9kZXZpY2UuYzogUGF0cmlrIFN0cmlkdmFsbCA8cHNAbGVpc3NuZXIuc2U+CisJUmVtb3ZlZCB0aGluZ3MgdGhhdCB3ZXJlIGVhcmxpZXIgYWRkZWQgYnkgbWlzdGFrZS4KIAotTW9uIEp1bCAxMSAxOToxNTo1MSAxOTk0ICBNaWd1ZWwgZGUgSWNhemEgIChtaWd1ZWxAc3BoaW54KQorCSogcmVsYXkzMi93aW5tbS5zcGVjOiBQYXRyaWsgU3RyaWR2YWxsIDxwc0BsZWlzc25lci5zZT4KKwlUaGUgaW1wbGVtZW50YXRpb24gb2YgbW1pb1dyaXRlIGlzIG5vdyBjYWxsZWQgaW5zdGVhZCBvZiB0aGUgc3R1Yi4KIAotCSogW2NvbnRyb2xzL2VkaXQuY10KLQlDaGFuZ2VzIHRvIHdvcmsgYXMgYSBsaWJyYXJ5LgorCSogaW5jbHVkZS9zaGVsbC5oLCBkbGxzL3NoZWxsMzIvc2hlbGxvbGUuYywgZGxscy9zaGVsbDMyL3NoZWxsb3JkLmMsIGRsbHMvc2hlbGwzMi9zaGxmb2xkZXIuYywgZGxscy9zaGVsbDMyL3NobHZpZXcuYzoKKwlKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KKwlCdWdmaXhlcywgc2hlbGx2aWV3IHVzZXMgRFBBJ3Mgbm93LCBJU2hlbGxWaWV3X0dldEl0ZW1PYmplY3QgaW1wbGVtZW50ZWQuCiAKLQkqIFtpZjE2MzIvY2FsbGJhY2suY10gCi0JSWZkZWZlZCBtb2R1bGUuCisJKiByZWxheTMyL3NoZWxsMzIuc3BlYywgZGxscy9zaGVsbDMyL3NoZWxsMzJfbWFpbi5jOgorCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgorCU5ldyBzdHViczogU0hHZXRGaWxlSW5mbzMyVywgUmVhZENhYmluZXRTdGF0ZSwgV3JpdGVDYWJpbmV0U3RhdGUsIElzVXNlckFkbWluLgorCUltcGxlbWVudGVkOiBTSEdldFBhdGhGcm9tSURMaXN0MzJXLgorCUNoYW5nZWQgUGF0aENvbWJpbmUuCiAKLQkqIFtpZjE2MzIvcmVsYXkuY10KLQlDaGFuZ2VzIHRvIGFsbG93IGxpbmtpbmcgd2l0aCBXaW5lTGliLgorCSogaW5jbHVkZS9zaGxvYmouaDogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CisJTmV3IHN0cnVjdHVyZXMgRFZBU1BFQ1QsIFRZTUVELCBJRExMaXN0LgorCVNoZWxsIHNwZWNpZmljIGNsaXBib2FyZCBmb3JtYXRzLgogCi0JKiBbaW5jbHVkZS93aW5kb3dzLmhdCi0JQWRkZWQgbWFjcm8gV0lORUxJQl9VTklNUAorCSogcmVsYXkzMi93aW5zcG9vbC5zcGVjLCBtaXNjL3ByaW50ZHJ2LmM6CisJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CisJU3R1YiBFbnVtUHJpbnRlcnNXLgogCi0JKiBbbG9hZGVyL2xpYnJhcnkuY10KLQlXaGVuIGNvbXBpbGluZyBXaW5lTGliLCBHZXRQcm9jQWRkcmVzcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LgorCSogZGxscy9zaGVsbDMyL2RhdGFvYmplY3QuYzoKKwlKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KKwlJbXBsZW1lbnRlZCBmaXJzdCBmdW5jdGlvbnMuCiAKLQkqIFtsb2FkZXIvbWFpbi5jXQotCUFkZGVkIGVtcHR5IEluaXRETEwgd2hlbiB1c2luZyBXaW5lTGliLgorCSogZGxscy9zaGVsbDMyL3BpZGwuYywgZGxscy9zaGVsbDMyL3BpZGwuaDoKKwlKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KKwlOZXcgY2xhc3MgSURMTGlzdCAiSXRlbSBJRCBMaXN0IExpc3QiIChpbnRlcm5hbCkuCiAKLQkqIFtsb2FkZXIvbmVfaW1hZ2UuY10KLQlTb21lIHBhcnRzIG9mIHRoZSBsb2FkZXIgYXJlIG5lZWRlZCBmb3IgV2luZUxpYiwgaWZkZWZlZCBjb3JyZWN0bHkKKwkqIG1pc2MvdmVyLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgorCVNtYWxsIGNoYW5nZXMgKHVzZXMgSElXT1JEL0xPV09SRCkuCiAKLQkqIFttaXNjL3thdWRpby5jLG1jaWNkYS5jLG1tYXV4LmMsbW1zeXN0ZW0uY10KLQlEaXNhYmxlIGNvbXBpbGF0aW9uIG9mIG1vZHVsZSB3aGVuIGNvbXBpbGluZyBXaW5lTGliLgorCSogd2luZG93cy9kaWFsb2cuYywgcmVsYXkzMi91c2VyMzIuc3BlYzoKKwlTYXQgT2N0IDEwIDEyOjAwOjAwIDE5OTggIEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgorCVN0dWIgQ3JlYXRlRGlhbG9nSW5kaXJlY3RQYXJhbUFvclcuCiAKLQkqIFt0b29sa2l0L2hlYXAuY10KLQlGaXhlZCBzbWFsbCBidWcuICBXaGVuIHBhc3NlZCBhbiBpbnZhbGlkIGhhbmRsZSBXaW5lTGliIHdvdWxkCi0JY3Jhc2gsIG5vdyByZXR1cm4gTlVMTC4KKwkqIE1ha2VmaWxlLmluLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKKwlVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQ+CisJRG9uJ3QgaW5zdGFsbCBvYmplY3QgZmlsZXMgd2hlbiAtLWRpc2FibGUtbGliIGlzIHNlbGVjdGVkLgogCi0JKiBbdG9vbGtpdC93aW5tYWluLmNdCi0JQ2FsbCBDcmVhdGVOZXdUYXNrIGluIF9XaW5NYWluLgorCSogZGVidWdnZXIvaGFzaC5jLCBkZWJ1Z2dlci9tc2MuYzoKKwlVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQ+CisJRG9uJ3QgcHJpbnQgbmFtZSBmb3IgMzIgYml0IGxpYiBtdWx0aXBsZSB0aW1lcy4KKwlDbGVhbiB1cCBwcmludGluZyBpbiBERUJVR19Qcm9jZXNzRGVmZXJyZWREZWJ1Zy4KIAotU3VuIEp1bCAxMCAwOTowODowMiAxOTk0ICBEYXZpZCBNZXRjYWxmZSA8ZGF2aWRAcHJpc20uZGVtb24uY28udWs+CisJKiBtZW1vcnkvaGVhcC5jLCBkbGxzL2NvbWN0bDMyL3RhYi5jLCBjb250cm9scy9jb21iby5jOgorCURhdmlkIEx1eWVyIDxsdXllckB1Y3MudXdhLmVkdS5hdT4KKwlTbWFsbCBmaXhlcy4KIAotCSogW2NvbnRyb2xzL2VkaXQuY10gW2NvbnRyb2xzL3dpZGdldC5jXQotCU1vcmUgY2hhbmdlcyB0byBpbXByb3ZlIGNvbXBhdGliaWxpdHkgd2l0aCBXaW5kb3dzJyBlZGl0Ci0JY29udHJvbC4gIEZpbmlzaGVkIG9mZiB0YWIgc3RvcCBzdXBwb3J0LgorCSogZmlsZXMvZHJpdmUuYzogUGV0dGVyIFJlaW5ob2xkdHNlbiA8cGVyZUB0ZC5vcmcudWl0Lm5vPgorCUJ1Z2ZpeDogQ2hhbmdlZCBHZXREcml2ZVR5cGUzMkEoTlVMTCkgdG8gdXNlIGN3ZCdzIHJvb3QuCiAKLU1vbiBKdWwgMTEgMjE6MDU6MDIgTUVUIERTVCAxOTk0ICBFcmlrIEJvcyA8ZXJpa0BoYWNrdGljLm5sPgorCSogb2xlL3R5cGVsaWIuYywgb2xlL2NvbXBvYmouYywgb2xlL2lmcy5jLCBvbGUvbW9uaWtlci5jLCBvbGUvb2xlMi5jLCBvbGUvb2xlMmRpc3AuYywgb2xlL29sZTJubHMuYywgb2xlL29sZWNsaS5jLCBvbGUvb2xlc3ZyLmMsIG9sZS9zdG9yYWdlLmMsIG1pc2MvbnRkbGwuYywgbWlzYy9yZWdpc3RyeS5jOgorCU1hdHRoZXcgQmVja2VyIDxtYmVja2VyQGdsYXNzY2l0eS5uZXQ+CisJRG9jdW1lbnRhdGlvbiBjb3JyZWN0aW9ucy9zdGFuZGFyZGl6YXRpb25zLgogCi0JKiBbaWYxNjMyL3JlbGF5LmNdCi0JIyBvZiBvcmRpbmFscyBpbiBzaGVsbC5kbGwgY2hhbmdlZCB0byAxMDMuCisJKiBtdWx0aW1lZGlhL2F1ZGlvLmMsIG11bHRpbWVkaWEvaW5pdC5jLCBtdWx0aW1lZGlhL21jaWFuaW0uYywgbXVsdGltZWRpYS9tY2ljZGEuYywgbXVsdGltZWRpYS9tY2lzdHJpbmcuYywgbXVsdGltZWRpYS9taWRpLmMsIG11bHRpbWVkaWEvbW1zeXN0ZW0uYywgaW5jbHVkZS9tbXN5c3RlbS5oLCBpbmNsdWRlL211bHRpbWVkaWEuaDoKKwlFcmljIFBvdWVjaCAgPGVyaWMucG91ZWNoQGxlbWVsLmZyPgorCVN0YXJ0ZWQgY29kaW5nIDMyIGJpdCBNQ0kgaGFuZGxpbmcuCisJQWRkZWQgT3Blbi9DbG9zZSB0byBsb3ctbGV2ZWwgTUNJIGRyaXZlcnMgKGF1ZGlvLCBtaWRpLCBhbmltLCBjZGEpLgorCVdyb3RlIE1DSSBNSURJIHN1cHBvcnQuCiAKLQkqIFtsb2FkZXIvc2lnbmFsLmNdCi0Jc3RpLCBjbGkgd2lsbCBub3cgYmUgaWdub3JlZC4KKwkqIGdyYXBoaWNzL3gxMWRydi9ncmFwaGljcy5jOiBSZWluIEtsYXplcyA8cmtsYXplc0BjYXNlbWEubmV0PgorCVlldCBhbm90aGVyIGltcHJvdmVtZW50IHRvIHRoZSBiZXppZXIgY29kZS4KIAotCSogW29iamVjdHMvYnJ1c2guY10KLQlBZGRlZCBzdHViIGZvciBHZXRTeXNDb2xvckJydXNoKCkuCisJKiB3aW5kb3dzL21lc3NhZ2UuYzogUmVpbiBLbGF6ZXMgPHJrbGF6ZXNAY2FzZW1hLm5ldD4KKwlHZXRUaWNrQ291bnRzKCkgaGFzIGEgZ3JhbnVsYXJpdHkgaW4gd2luZG93cyBvZiAyNSBtc2VjJ3MuCisJR2lyb3RlbCdzIHNlcmlhbCBjb21tdW5pY2F0aW9uIGFwcGVhcnMgdG8gZGVwZW5kIG9uIGl0LCBzbyBJIGd1ZXNzCisJaXQncyBhIGZlYXR1cmUuLi4KIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotU3VuLCAzIEp1bCAxOTk0IDIwOjE1OjU2ICswMTAwIChCU1QpICBEYXZpZCBNZXRjYWxmZSA8ZGF2aWRAcHJpc20uZGVtb24uY28udWs+CisJKiBtaXNjL2NvbW0uYzogUmVpbiBLbGF6ZXMgPHJrbGF6ZXNAY2FzZW1hLm5ldD4KKwlVcGRhdGUgdGhlIG1vZGVtbiBzdGF0dXMgYml0IHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIFJMU0QgbGluZSBpcworCWFjdGl2ZSBpbiBldmVyeSBjYWxsIHRvIEdldENvbW1FcnJvcigpLiBUaGlzIGlzIG5vdCB0aGUgcHJvcGVyIHBsYWNlLAorCWJ1dCBzaW5jZSB3aW5lIGRvZXNuJ3QgZG8gYW55IGV2ZW50LXN0dWZmLi4uCisJRml4ZWQgc29tZSBUUkFDRSBjYWxsJ3MgZmFjZWQgd2l0aCBub24gemVybyB0ZXJtaW5hdGVkIHN0cmluZ3MuCisJUmVzdG9yZSB0aGUgdGVybWluYWwgc3RhdGUgYXQgQ2xvc2VDb21tdCB0byB0aGUgc3RhdGUgaXQgd2FzIGF0CisJT3BlbkNvbW0oKSwgc28gdGhlIG1vZGVtIHdpbGwgZ28gb2ZmLWhvb2suCiAKLQkqIFtjb250cm9scy9lZGl0LmNdCi0JQnVnIGZpeGVzIGFuZCB0aWR5aW5nIHVwLiAgUHJlbGltaW5hcnkgdGFiIHN0b3Agc3VwcG9ydAotCShkb2Vzbid0IHdvcmsgeWV0KS4KKwkqIGxvYWRlci9tb2R1bGUuYzogQWxleGFuZGVyIExhcnNzb24gIDxhbGxhQGx5c2F0b3IubGl1LnNlPgorCUdldE1vZHVsZUZpbGVOYW1lMzJBKCkgcmV0dXJucyBsb25nIGZpbGVuYW1lIGlmIGFwcCBzZXRzIG9zdmVyc2lvbiA+PQorCTQuMC4gQWxzbyBtb3ZlZCB0aGUgbG9uZyBmaWxlbmFtZSBoYWNrZXJ5IHRvIEdldExvbmdQYXRoTmFtZTMyQSgpIHNvCisJaXQgY2FuIGJlIHVzZWQgYnkgd2luMzIgcHJvZ3JhbXMuCiAKLQkqIFt3aW5kb3dzL2RpYWxvZy5jXQotCVJldmVyc2VkIG9yZGVyIG9mIGJ1dHRvbnMgaW4gQ2hlY2tSYWRpb0J1dHRvbnMgc28gdGhhdCBhbGwKLQlidXR0b25zIGFyZSBub3cgZGlzcGxheWVkLgorCSogZmlsZXMvZG9zX2ZzLmM6IEFsZXhhbmRlciBMYXJzc29uIDxhbGxhQGx5c2F0b3IubGl1LnNlPgorCUdldExvbmdQYXRoTmFtZTMyQSgpIHJldHVybnMgZG9zIGZvcm1hdCBsb25nIGZpbGVuYW1lIGluc3RlYWQgb2YgdW5peAorCWZvcm1hdC4KIAotVHVlIEp1bCAgNSAxODozMDoyNCAxOTk0ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBsYW1pc3VuLmVwZmwuY2gpCisJKiBkbGxzL2NvbWN0bDMyL2xpc3R2aWV3LmM6IEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CisJU21hbGwgZml4ZXMuCiAKLQkqIFtpbmNsdWRlL29wdGlvbnMuaF0gW21pc2MvbWFpbi5jXSBbd2luZG93cy93aW4uY10KLQlSZW1vdmVkIG5vc2F2ZXVuZGVycyBvcHRpb24sIHJlcGxhY2VkIGJ5IGhhbmRsaW5nCi0JdGhlIENTX1NBVkVCSVRTIGZsYWcuCisJKiByZWxheTMyL3NoZWxsMzIuc3BlYywgZGxscy9zaGVsbDMyL3NoZWxsb3JkLmM6CisJRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KKwlBZGRlZCBTSEZsdXNoQ2xpcGJvYXJkLgogCi0JKiBbd2luZG93cy9jbGFzcy5jXQotCU1vZGlmaWVkIHRoZSBmaXggZm9yIG5lZ2F0aXZlIHNpemUgaW4gY2xhc3MgZXh0cmEgYnl0ZXMgdG8KLQlhdm9pZCBtb2RpZnlpbmcgdGhlIGNhbGxlcidzIGRhdGEuCisJKiByZWxheTMyL2NvbWN0bDMyLnNwZWMsIGluY2x1ZGUvY29tbWN0cmwuaCwgZGxscy9jb21jdGwzMi9jb21jdGwzMnVuZG9jLmM6CisJRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KKwlGaXhlZCBzb21lIHVuZG9jdW1lbnRlZCBmdW5jdGlvbnMuCisJQ2hhbmdlZCBhbGdvcml0aG0gaW4gRFBBX1F1aWNrU29ydCgpLgorCUZpeGVkIGhlYXAgY3JlYXRpb24vZGVzdHJ1Y3Rpb24gYW5kIGNvbnRyb2wgW3VuXXJlZ2lzdHJhdGlvbiBpbgorCUNvbUN0bDMyTGliTWFpbigpLgogCi0JKiBbd2luZG93cy9kYy5jXQotCUJ1ZyBmaXg6IHN5c3RlbSBmb250IG11c3QgYmUgYSBwcm9wb3J0aW9uYWwgZm9udC4KLQlGaXhlZCBhIGJ1ZyB0aGF0IGNhdXNlZCB0aGUgZGVmYXVsdCBwZW4gdG8gbm90IGJlIHNlbGVjdGVkCi0JY29ycmVjdGx5IGluIGEgREMuCisJKiBkbGxzL2NvbWN0bDMyL2hlYWRlci5jOiBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgorCUZpeGVkIGEgYnVnLgogCi0JKiBbd2luZG93cy9ncmFwaGljcy5jXQotCUJ1ZyBmaXggaW4gR1JBUEhfRHJhd0FyYygpLiBUaGFua3MgdG8gQWRyaWFubyBBemV2ZWRvIGZvcgotCW5vdGljaW5nIGl0LgorCSogaW5jbHVkZS90b29sdGlwcy5oLCBkbGxzL2NvbWN0bDMyL3Rvb2x0aXBzLmM6CisJRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KKwlBZGRlZCB0cmFja2luZyBzdXBwb3J0IGFuZCBmaXhlZCBsb2FkaW5nIG9mIHJlc291cmNlIHN0cmluZ3MuCisJQWRkZWQgdW5yZWdpc3RlciBjb2RlLgogCi0JKiBbd2luZG93cy9wYWludGluZy5jXQotCVJlbW92ZWQgaW5jb3JyZWN0IHNlbGVjdGluZyBvZiBkZWZhdWx0IG9iamVjdHMgaW4gQmVnaW5QYWludCgpCi0JKG5vIGxvbmdlciBuZWVkZWQgYmVjYXVzZSBvZiB0aGUgZml4IGluIGRjLmMpLgorCSogaW5jbHVkZS9kZWJ1Zy5oLCBpbmNsdWRlL2RlYnVnZGVmcy5oLCBpbmNsdWRlL2lwYWRkcmVzcy5oLCBpbmNsdWRlL25hdGl2ZWZvbnQuaCwgZGxscy9jb21jdGwzMi9NYWtlZmlsZS5pbiwgZGxscy9jb21jdGwzMi9jb21tY3RybC5jLCBkbGxzL2NvbWN0bDMyL2lwYWRkcmVzcy5jLCBkbGxzL2NvbWN0bDMyL25hdGl2ZWZvbnQuYzoKKwlFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgorCUFkZGVkIElQQWRkcmVzcyBhbmQgTmF0aXZlRm9udCBjb250cm9scy4KIAotSnVsIDQsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKKwkqIGluY2x1ZGUvaW1hZ2VsaXN0LmgsIGRsbHMvY29tY3RsMzIvaW1hZ2VsaXN0LmM6CisJRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KKwlTb21lIG1pbm9yIGltcHJvdmVtZW50cy4KIAotCSogW21pc2MvbW1zeXN0ZW0uY10KLQkqIFttaXNjL2F1ZGlvLmNdCi0JQWRkIG1vcmUgY29kZSB0byBpbnRlcmZhY2UgJy9kZXYvZHNwJy4KKwkqIGluY2x1ZGUvdG9vbGJhci5oLCBkbGxzL2NvbWN0bDMyL3Rvb2xiYXIuYzoKKwlFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgorCUltcHJvdmVkIGRyYXdpbmcgYW5kIHBsYWNlbWVudCBjb2RlLiBFeHBsb3JlciBzdHlsZSBjb21tb24gZGlhbG9ncyBhcmUKKwlsb29raW5nIGdvb2Qgbm93LgogCi0JKiBOZXcgZmlsZSBbbWlzYy9tY2ljZGEuY10KLQlDcmVhdGUgYW4gTUNJX0RFVlRZUEVfQ0RfQVVESU8gZHJpdmVyIGNvbm5lY3RlZCB0byAnL2Rldi9zYnBjZCcuCisJKiBvYmplY3RzL2N1cnNvcmljb24uYzogRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KKwlGaXhlZCBidWcgaW4gRHJhd0ljb25FeDMyKCkuCiAKLQkqIE5ldyBmaWxlIFttaXNjL21tYXV4LmNdCi0JU3R1YnMgdG8gbWFrZSBhIGZ1dHVyZSBkcml2ZXIgY29ubmVjdGVkIHRvICcvZGV2L21peGVyJy4KKwkqIG1pc2MvbWFpbi5jOiBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgorCUltcHJvdmVkIEdldFN5c3RlbUluZm9ybWF0aW9uMzJbQS9XXS4KIAotCSogW3dpbmRvd3Mvd2luLmNdCi0JVGVtcG9yYXJ5IHBhdGNoIHRvIENyZWF0ZVdpbmRvd0V4KCkgZm9yIHJlc2V0aW5nIG5lZ2F0aXZlCi0JY29vcmRpbmF0ZXMgdG8gMCwwIDsgYmVjYXVzZSAnc291bmRyZWMuZXhlJyBnaXZlIG5lZ2F0aXZlIHZhbHVlcwotCWFuZCBJIG5lZWQgaXQgdG8gd29yayBvbiBNTVNZU1RFTSAuLi4gOi0pCisJKiB3aW5kb3dzL25vbmNsaWVudC5jLCByZWxheTMyL3VzZXIzMi5zcGVjLCBpbmNsdWRlL3dpbmRvd3MuaCwgaWYxNjMyL3VzZXIuc3BlYzoKKwlFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgorCUFkZGVkIERyYXdDYXB0aW9uWzE2LzMyXSBhbmQgRHJhd0NhcHRpb25UZW1wWzE2LzMyQS8zMlddLgorCUZpeGVkIGhhbmRsaW5nIG9mIFdTX0VYX1RPT0xXSU5ET1cuCiAKLQkqIFttaXNjZW11L2ludDJmLmNdCi0JYWRkIGEgc3R1YiAnZG9faW50MmZfMTYnIChmdW5jdGlvbiAweDE2KSBmb3IgRE1QSSBzZXJ2ZXIuCisJKiBkb2N1bWVudGF0aW9uL2NvbW1vbl9jb250cm9sczogRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KKwlVcGRhdGVkLgogCi1Nb24gSnVuIDIwIDEwOjA4OjQwIEJTVCAxOTk0ICBXaWxsaWFtIFNtaXRoICh3b3NAZGNzLndhcndpY2suYWMudWspCisJKiB3aW5kb3dzL2V2ZW50LmMsIHdpbmRvd3Mva2V5Ym9hcmQuYywgaW5jbHVkZS9rZXlib2FyZC5oOgorCURhdmlkIEZhdXJlIDxmYXVyZUBrZGUub3JnPgorCUFkZGVkIEtFWUJPQVJEX1VwZGF0ZVN0YXRlLCB0byByZWFkIHRoZSBtb2RpZmllcnMgd2hlbiB0aGUgd2luZSBhcHAgaXMKKwlhY3RpdmF0ZWQuIFVzZXMgdGhlIG5ldyBLRVlCT0FSRF9VcGRhdGVPbmVTdGF0ZS4KKwlGaXhlZCBhIHByb2JsZW0gd2l0aCBtZW51IGFjY2VsZXJhdG9ycyAoQWx0LWxldHRlciBnZW5lcmF0ZXMgYSBkb3duCisJYXJyb3cgZXZlbnQgd2hpY2ggYmVlcHMgaWYgbm90IGZpbHRlcmVkKS4KKwlTcGVlZGVkIHVwIFRvQXNjaWkxNi8zMigpIGEgbGl0dGxlIGJpdC4KIAotCSogaW5jbHVkZS9jb21tLmgKLQlOZXcgZmlsZSAtLSBzb21lIGRlZmluaXRpb25zIHRoYXQgd2VyZSBpbiBjb21tLmMgbm93IG5lZWQgdG8KLQliZSBzaGFyZWQgd2l0aCBtaXNjL2Rvc19mcy5jCisJKiBkZWJ1Z2dlci9icmVhay5jLCBkZWJ1Z2dlci9kYl9kaXNhc20uYywgZGVidWdnZXIvZGJnLnksIGRlYnVnZ2VyL2V4cHIuYywgZGVidWdnZXIvc291cmNlLmMsIGRlYnVnZ2VyL3R5cGVzLmM6CisJT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CisJTWFkZSBXaW5lJ3MgZGVidWdnZXIgd29yayBzYXRpc2ZhY3RvcmlseSB3aXRoIERPUyBhcHBzLgorCVBlcmhhcHMgZGVyZWZlcmVuY2luZyB3b3JrIGJldHRlciBmb3IgV2luMTYgYXBwcyB0b28gbm93LCBidXQKKwlpdCBhcHBlYXJzIHRoZSBkZWJ1Z2dlciBjb3JlIHdhc24ndCBkZXNpZ25lZCBmb3Igc2VnbWVudGF0aW9uLgogCi0JKiBtaXNjL2NvbW0uYwotCVNvbWUgZGVmaW5pdGlvbnMgbW92ZWQgaW50byBpbmNsdWRlL2NvbW0uaAorCSogbXNkb3MvZHBtaS5jOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KKwlTaW11bGF0ZXMgRFBNSSBtZW1vcnkgbWFwIGJ5IGNvbnZlcnRpbmcgbG93ZXItTUIgc2VnbWVudCBiYXNlCisJYWRkcmVzc2VzIGFzIG5lY2Vzc2FyeS4gSW1wbGVtZW50ZWQgYWxsb2NhdGluZy9mcmVlaW5nIERPUyBtZW1vcnkKKwlibG9ja3MuIEFkZGVkIFhNUyBob29rLiAoRFBNSSByZW1haW5zIGRpc2FibGVkIGJ5IGRlZmF1bHQgdW50aWwKKwlzb21lb25lIGltcGxlbWVudHMgdGhlIHJhdyBtb2RlIHN3aXRjaCBlbnRyeSBwb2ludHMgcGt1bnppcCBuZWVkcy4pCiAKLQkqIG1pc2MvZG9zX2ZzLmMgKERPU19HZXRFcXVpcG1lbnQpOgotCUZpeGVkIGVycm9yIGluIGVxdWlwbWVudCAtLSBiaXR3aXNlIG9yIG9mIHR3byB2YWx1ZXMgc2hvdWxkCi0JYmUgdXNlZCBpbnN0ZWFkIG9mIGxvZ2ljYWwgb3IuICBBbHNvIGFkZGVkIGNvZGUgdG8gY29ycmVjdGx5Ci0JcmVwb3J0IHRoZSBudW1iZXIgb2Ygc2VyaWFsIGFuZCBwYXJhbGxlbCBkZXZpY2VzLgorCSogbXNkb3MvaW50MjEuYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CisJSSB0aGluayBpdCdzIHRpbWUgdG8gcmV0aGluayB0aGUgSEZJTEUxNl9UT19IRklMRTMyIHN0cmF0ZWd5LAorCWNhbid0IGtlZXAgd29ya2luZyBhcm91bmQgZmxhd3MgaW4gaXQgbGlrZSB0aGlzIChub3cgc3RkaW8KKwl3YXMgZ2V0dGluZyBjbG9zZWQgd2hlbiBwcm9ncmFtcyBjbG9zZSBoYW5kbGVzID49NSkKIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotTW9uIEp1biAyMCAxNDoyNjo0MSAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQorCSogbXNkb3MveG1zLmMsIG1zZG9zL01ha2VmaWxlLmluLCBtc2Rvcy9pbnQyZi5jOgorCU92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgorCUltcGxlbWVudGVkIGJhc2ljIFhNUyBmdW5jdGlvbnMuIHdjYi5leGUgKFdpbjE2IGRpc2Fzc2VtYmxlcikgbm93CisJc2VlbXMgdG8gd29yayBmaW5lIHVuZGVyIFdpbmUuCiAKLQkqIFtvYmplY3RzL2JpdG1hcC5jXQotCUFsbG93IG5lZ2F0aXZlIGJpdG1hcCBzaXplcy4KKwkqIGxvYWRlci9kb3MvZG9zdm0uYywgbG9hZGVyL2Rvcy9tb2R1bGUuYywgaW5jbHVkZS9kb3NleGUuaCwgaW5jbHVkZS9taXNjZW11Lmg6CisJT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CisJTW92ZWQgc29tZSBzeXN0ZW0gZGVwZW5kZW5jaWVzIHRvIGxvYWRlci9kb3MvZG9zdm0uYy4gSW1wbGVtZW50ZWQKKwllbnZpcm9ubWVudGFsIGFyZ3ZbMF0gcGFzc2luZyB0byBET1MgYXBwcy4gQWRkZWQgWE1TIGhvb2tzLgogCi1TdW4gSnVuIDE5IDEyOjAwOjA0IDE5OTQgIERhdmlkIE1ldGNhbGZlIDxkYXZpZEBwcmlzbS5kZW1vbi5jby51az4KKwkqIGRlYnVnZ2VyL3N0YWJzLmM6IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgorCUFkZGVkIGEgbWVtc2V0KCkgdG8gcHJldmVudCBhIGRlYnVnZ2VyIHNlZ2ZhdWx0IGNhdXNlZCBieQorCXVuaW5pdGlhbGl6ZWQgcG9pbnRlcnMgaW4gdGhlIHN0YWJzIGxvb2t1cCB0YWJsZXMuCiAKLSAgICAgICAgKiBbY29udHJvbHMvZWRpdC5jXQotICAgICAgICBJbXByb3ZlZCBzZWxlY3Rpb24gZGlzcGxheS4gIEFkZGVkIHByb2Nlc3NpbmcgZm9yIFdNX1NFVEZPTlQsCi0gICAgICAgIEVNX1JFUExBQ0VTRUwsIEVNX0xJTkVMRU5HVEgsIEVNX1VORE8sIEVNX0VNUFRZVU5ET0JVRkZFUiwKLSAgICAgICAgRU1fR0VUSEFORExFLCBFTV9TRVRIQU5ETEUgbWVzc2FnZXMuICBUZXh0IGJ1ZmZlciBub3cgc3RvcmVkIG9uIAotICAgICAgICBhcHBsaWNhdGlvbidzIGxvY2FsIGhlYXAuCisJKiBncmFwaGljcy9kZHJhdy5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KKwlBIGZldyBmaXhlcy4KIAotICAgICAgICAqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCi0gICAgICAgIENvcnJlY3RlZCBidWcgaW4gUmVjdGFuZ2xlKCkuICBYRmlsbFJlY3RhbmdsZSBoYXMgdGhlIHNhbWUKLSAgICAgICAgd2lkdGggYXMgUmVjdGFuZ2xlLCBidXQgWERyYXdSZWN0YW5nbGUgaXMgb25lIHBpeGVsIHdpZGVyCi0gICAgICAgIGZvciB0aGUgc2FtZSBjby1vcmRpbmF0ZXMuCisJKiByZWxheTMyL250ZGxsLnNwZWM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgorCUFkZGVkIFJ0bEFsbG9jYXRlQW5kSW5pdGlhbGl6ZVNpZCBlbnRyeS4KIAotICAgICAgICAqIFttZW1vcnkvaGVhcC5jXSBbaW5jbHVkZS9oZWFwLmhdCi0gICAgICAgIEFkZGVkIEhFQVBfTG9jYWxTaXplIGZ1bmN0aW9uLgorCSogbG9hZGVyL01ha2VmaWxlLmluLCBsb2FkZXIvZWxmLmMsIGxvYWRlci9tb2R1bGUuYywgbG9hZGVyL3BlX2ltYWdlLmMsIGluY2x1ZGUvY29uZmlnLmguaW4sIGluY2x1ZGUvbW9kdWxlLmgsIGluY2x1ZGUvcGVfaW1hZ2UuaCwgaW5jbHVkZS9wZWV4ZS5oLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKKwlNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KKwlHZW5lcmljIGR5bmFtaWMgZGxsIGxvYWRlciB1c2luZyBkbCooKSBBUEkuCisJSW5jbHVkZXM6IHN0ZGNhbGwtPmNkZWNsIG1hcHBpbmcgYWJpbGl0eSwgc25vb3BpbmcuCisJKFRlc3RlZCBvbmx5IHdpdGggZ2xpZGUyeC5kbGwgLT4gbGliZ2xpZGUyeC5zbykKIAotICAgICAgICAqIFt3aW5kb3dzL2V2ZW50LmNdIFt3aW5kb3dzL2tleWJvYXJkLmNdCi0gICAgICAgIEltcHJvdmVtZW50cyB0byBLZXlTdGF0ZVRhYmxlIGFuZCBhZGRpdGlvbiBvZiBBc3luY0tleVN0YXRlVGFibGUuCi0gICAgICAgIEFkZGVkIHN1cHBvcnRpbmcgY29kZSB0byBHZXRLZXlTdGF0ZSBhbmQgR2V0QXN5bmNLZXlTdGF0ZSBhbmQKLSAgICAgICAgbWVyZ2VkIG1vdXNlIGJ1dHRvbiBzdGF0ZXMgaW50byBHZXRLZXlib2FyZFN0YXRlLgorCSogbXVsdGltZWRpYS9pbml0LmMsIG11bHRpbWVkaWEvdGltZS5jLCBpbmNsdWRlL21tc3lzdGVtLmgsIGluY2x1ZGUvbXVsdGltZWRpYS5oOgorCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgorCUFkZGVkIHdpbjMyIGVuaGFuY2VkIGZ1bmN0aW9uYWxpdHkgdG8gdGltZXIgY2FsbGJhY2tzLgogCi0gICAgICAgICogW2xvYWRlci9yZXNvdXJjZS5jXSBbaW5jbHVkZS9hY2NlbC5oXQotICAgICAgICBBZGRlZCByZWNvZ25pdGlvbiBvZiBTSElGVCwgQ09OVFJPTCBhbmQgQUxUIGtleXMgdG8KLSAgICAgICAgVHJhbnNsYXRlQWNjZWxlcmF0b3IuCisJKiB3aW4zMi9jb25zb2xlLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgorCUFkZGVkIGJhZCBoYWNrcyBzbyBXcml0ZUNvbnNvbGVPdXRwdXQgd29ya3Mgb24gdnQxMDAgYW5kIFBlZWtNZXNzYWdlCisJZG9lcyBhdCBsZWFzdCBhIGJpdCBvZiBrZXlib2FyZCBpbnB1dC4KIAotICAgICAgICAqIFtvYmplY3RzL21ldGFmaWxlLmNdIFtvYmplY3RzL2ZvbnQuY10gW29iamVjdHMvYml0Ymx0LmNdCi0gICAgICAgIEEgYml0IG1vcmUgbWV0YWZpbGUgc3VwcG9ydC4KKwkqIHJlbGF5MzIvc25vb3AuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CisJU2hvdWxkIGRpc3BsYXkgYWdhaW4uCiAKLVN1biBKdW4gMTkgMTc6Mjk6MDAgTUVUIERTVCAxOTk0ICBFcmlrIEJvcyAoZXJpa0BoYWNrdGljLm5sKQorU2F0IE9jdCAxMCAxNTo1Mjo0NiAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgogCi0gICAgICAgICogW2xvYWRlci9yZXNvdXJjZS5jXQotICAgICAgICBTaXplb2ZSZXNvdXJjZSgpIGFuZCBBbGxvY1Jlc291cmNlKCkgYWRkZWQsIEFjY2Vzc1Jlc291cmNlKCkgdXBkYXRlZC4KKwkqIHdpbmRvd3MvZGlhbG9nLmM6IERhdmUgUGlja2xlcyA8ZGF2ZXBAbnVnYXRlLmRlbW9uLmNvLnVrPgorCUltcGxlbWVudGVkIERTX0NFTlRFUiBkaWFsb2cgc3R5bGUuCiAKLSAgICAgICAgKiBbaWYxNjMyL2tlcm5lbC5zcGVjXQotICAgICAgICBGcmVlTGlicmFyeSgpIHVzZWQgZm9yIEZyZWVNb2R1bGUoKS4KKwkqIG1pc2MvbWFpbi5jOiBQYWJsbyBTYXJhdHhhZ2EgPHNydHhnQGNoYW5hZS5hbHBoYW5ldC5jaD4KKwlBZGRlZCBmdW5jdGlvbiB0byBidWlsZCB0aGUgV2luZG93cyBudW1lcmljIGxhbmd1YWdlIElEIGZyb20gbGFuZ3VhZ2UsCisJY29kZSwgY2hhcnNldCBhbmQgZGlhbGVjdCBzdHJpbmdzLCBsaWtlIHVzZWQgYnkgVW5peCBMQU5HIHZhcmlhYmxlLgogCi0gICAgICAgICogW3dpbmRvd3MvZ3JhcGhpY3MuY10KLSAgICAgICAgUmVjdGFuZ2xlKCk6IHN3YXAgbGVmdCAmIHJpZ2h0IGNvcm5lcnMgd2hlbiByaWdodCA8IGxlZnQsCi0gICAgICAgIHN3YXAgdG9wICYgYm90dG9tIHdoZW4gYm90dG9uIDwgdG9wLgorCSogb2xlL29sZTJubHMuYywgb2xlL25scy9SRUFETUUsIGluY2x1ZGUvd2lubmxzLmgsIG9sZS9ubHMvKi5ubHM6CisJUGFibG8gU2FyYXR4YWdhIDxzcnR4Z0BjaGFuYWUuYWxwaGFuZXQuY2g+CisJTW9yZSBOTFMgZGF0YS4KIAotSnVuIDE5LCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCisJKiBncmFwaGljcy9kZHJhdy5jOiBQZXRlciBTY2hsYWlsZSA8dWRiekByei51bmkta2FybHNydWhlLmRlPgorCUZpeGVkIGEgbG90IG9mIGJ1Z3MgaW4gZGRyYXcuYyB0byBtYWtlIHhsaWIgc3VwcG9ydCB3b3JrLgorCVJ1bnMgc3VjY2Vzc2Z1bGx5IFRSMkRlbW8gYW5kIEphenogSmFja3JhYmJpdCBJSSBEZW1vIQogCi0JKiBbY29udHJvbHMvY29tYm8uY10KLQlGaXggYnVnIGluIHdpbmRvdyBzdHlsZSBvZiB0aGUgYXNzb2NpYXRlZCBsaXN0Ym94LgorCSogb2JqZWN0cy9nZGlvYmouYzogQ2xpZmYgV3JpZ2h0IDxjbGlmZkBzbmlwZTQ0NC5vcmc+CisJQWRkZWQgREMgb2JqZWN0IHR5cGUgdG8gdGhlIGxpc3Qgb2YgdmFsaWQgb2JqZWN0cyB0aGF0IGNhbiBiZSBkZWxldGVkCisJYnkgRGVsZXRlT2JqZWN0MzIuCiAKLQkqIFtjb250cm9scy9tZW51LmNdCi0JU2tpcCBzZXBhcmF0b3JzIGluIGtleWJvYXJkIG5hdmlnYXRpb24gYnkgdXNpbmcgbmV3IGludGVybmFsIAotCQlmdW5jdGlvbnMgU2VsZWN0UHJldkl0ZW0oKSAmIFNlbGVjdE5leHRJdGVtKCksCitTdW4gT2N0ICA0IDE4OjIwOjI5IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CiAKLQkqIFttaXNjL3Byb2ZpbGUuY10KLQlCdWcgZml4IGluIEdldFByaXZhdGVQcm9maWxlSW50KCksIHdhcyBsaW1pdGVkIHRvIDQgZGlnaXQsCi0JCUludEJ1ZiBtdXN0IGJlIGFsbG9jIHRvICg1KzEpPTYuIGNoYXIgaW5zdGVhZCBvZiA1LgotCi0JKiBbbWlzYy9tYWluLmNdCi0JUHV0IGNvZGUgaW4gZnVuY3Rpb25zIFNldEVudmlyb25tZW50KCkgJiBHZXRFbnZpcm9ubWVudCgpLgotCi0JKiBbbWlzYy9zaGVsbC5jXQotCVN0YXJ0IHB1dHRpbmcgc29tZSBjb2RlIGluIEV4dHJhY3RJY29uKCkgZnVuY3Rpb24uCi0KLQkqIFttaXNjL21tc3lzdGVtLmNdCi0JU29tZSBjb2RlIGZvciBNTVRpbWVyIGZ1bmN0aW9ucyAmIHRpbWVycyBsaXN0LgotCi0JKiBbbWlzY2VtdS9pbnQzMS5jXQotCUZldyBzdHVicyBmb3IgRFBNSSBpbnRlcnJ1cHQgY2FsbHMuIE5vdGhpbmcgd29yayB5ZXQuCi0KLU1vbiBKdW4gMjAgMDc6Mzc6NDMgRURUIDE5OTQJSm9obiBSaWNoYXJkc29uIChqcmljaGFyZEBjcy51bWwuZWR1KQotCi0JKiBpbmNsdWRlL3dpbi5oICh0YWdXTkQpOgotCUFkZGVkIGljb24gZmllbGRzIGljb24sIGhJY29uIGFuZCByZWN0Q2xpZW50U2F2ZSB0byAKLQl0aGUgdGFnV05EIHN0cnVjdC4KLQotCSogd2luZG93cy9JbWFrZWZpbGUKLQlBZGRlZCBpY29uLmMgdG8gdGhlIGxpc3Qgb2YgZmlsZXMgdG8gY29tcGlsZQotCi0JKiB3aW5kb3dzL2RjZS5jIChHZXREQ0V4KToKLQlBZGRlZCBzb21lIGNoZWNrcyBmb3IgaWNvbmljIG1vZGUgYW5kIHBhc3MgaWNvbiB3aW5kb3cgYXMgZHJhd2FibGUsCi0Jbm90IHRoZSByZWFsIHdpbmRvdy4KLQotCSogd2luZG93cy9kZWZ3bmQuYyAoRGVmV2luZG93UHJvYykKLQlBZGRlZCBQQUlOVElDT04gZGVmYXVsdCB3aW5kb3dzIHByb2NlZHVyZS4KLQotCSogd2luZG93cy9ldmVudC5jIChFVkVOVF9FeHBvc2UpCi0JQWRkZWQgY2hlY2sgZm9yIGljb25pYyB3aW5kb3cgZXhwb3NlLiBJZiBpY29uaWMgd2luZG93IGlzIGV4cG9zZWQKLQlzZW5kIGEgV01fUEFJTlRJQ09OIG1lc3NhZ2UKLQotCSogd2luZG93cy9pY29uLmMgCi0JTmV3IGZpbGUuICBJQ09OX0ljb25pZnksIElDT05fZmluZEljb25Gcm9tUG9pbnQsIElDT05fRGVpY29uaWZ5LgotCi0JKiB3aW5kb3dzL21kaS5jIChEZWZNRElDaGlsZFByb2MpCi0JVGVzdCBmb3IgSXNJY29uaWMgZHVyaW5nIGEgU0NfUkVTVE9SRSwgdGhpcyBkb2Vzbid0IHdvcmsgeWV0LgotCi0JKiB3aW5kb3dzL21lc3NhZ2UuYyAoaGFyZHdhcmVfZXZlbnQpCi0JTG9va3MgZm9yIGljb24gYXMgd2VsbCBhcyB3aW5kb3cgbm93LgotCi0JKiB3aW5kb3dzL25vbmNsaWVudC5jIChOQ19IYW5kbGVTeXNDb21tYW5kLCBOQ19Eb05DUGFpbnRJY29uKQotCUFkZGVkIGljb25pZnkvZGVpY29uaWZ5IGluIE5DX0hhbmRsZVN5c0NvbW1hbmQsIG5ldyBmdW5jdGlvbgotCU5DX0RvTkNQYWludEljb24gd2hpY2ggcGFpbnRzIGFuIGljb24uCi0KLQkqIHdpbmRvd3MvcGFpbnRpbmcuYyAoQmVnaW5QYWludCkKLQlNYWRlIGEgQmVnaW5QYWludCBzZWxlY3QgdGhlIFNUT0NLX0JMQUNLX1BFTiwgU1RPQ0tfV0hJVEVfQlJVU0gsCi0JYW5kIFNUT0NLX1NZU1RFTV9GT05UIG9iamVjdHMgc2luY2UgdGhpcyBpcyAoaG9wZWZ1bGx5KSBkZWZhdWx0Ci0Jd2luZG93cyBiZWhhdmlvci4KLQotCSogd2luZG93cy93aW4uaCAoQ3JlYXRlV2luZG93RXgpCi0JU2V0IHRoZSBkZWZhdWx0IGJhY2tncm91bmQgY29sb3Igb2YgYSB3aW5kb3cgdG8gYmUgd2hpdGUuCi0JQ3JlYXRlIGljb24gd2luZG93LCB0dXJuIG9mZiBNSU5JTUlaRSBpZiBpdCBpcyBvbiwgc2luY2UKLQlJIGRvbid0IGtub3cgd2hhdCB0byBkbyB3aXRoIGl0IGFzIG9mIHlldC4uLiByZWdpc3RlcgotCXRoZSBpY29uIHdpdGggdGhlIGh3bmQgb2YgaXRzIHdpbmRvdyBzbyB3ZSBjYW4gaWRlbnRpZnkgd2hlcmUKLQlpY29uIG1lc3NhZ2VzIGFyZSBjb21pbmcgZnJvbS4KLQotTW9uIEp1biAyMCAxMDoxNTo1OSAxOTk0ICBNaWd1ZWwgZGUgSWNhemEgIChtaWd1ZWxAc3BoaW54KQotCi0JKiB3aW5kb3dzL2V2ZW50LmM6IEFkZGVkIGEgaGFjayB0byBkZWZpbmUgWFBvaW50ZXIgd2hlbiB1c2luZwotCVgxMVI0LiAKLQotCSogdG9vbGtpdC9oZWxsby5jOiBUZXN0IGFwcGxpY2F0aW9uIGZvciBXaW5lTGliLiBUbyBjb21waWxlIHlvdSdsbAotCW5lZWQ6IGdjYyAtSWluY2x1ZGUgLURXSU5FTElCIC1nIGhlbGxvLmMgLWMsIGFuZCB0byBsaW5rIHlvdSdsbAotCW5lZWQ6IGdjYyBoZWxsby5vIGxpYndpbmUuYSAtbFgxMSAtTC91c3Ivb3Blbndpbi9saWIgLWxtIAotCi0JKiB0b29sa2l0L2hlYXAuYzogRXh0ZW5kZWQgdGhlIHNpemUgb2YgdGhlIGJsb2NrIHNpemUgcGVyIGNodW5rLgotCi0JKiBtaXNjL3N0cmVzcy5jIChHZXRGcmVlRmlsZUhhbmRsZXMpOiBGaXhlZCB0eXBvLgotCi0JKiBtaXNjL21haW4uYyAobWFpbik6IENoYW5nZXMgdG8gYWxsb3cgY29tcGlsYXRpb24gdW5kZXIgU3VuT1MuIAotCi0JKiBsb2FkZXIvbGlicmFyeS5jOiBDaGFuZ2VkIHNvbWUgaWZkZWZzIHRvIGNvbXBpbGUgV2luZUxpYi4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVHVlIEp1biAxNCAwODowOToxNCAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQotCi0JKiBsb2FkZXIvc2VsZWN0b3IuYyAoR2V0Q3VycmVudFBEQik6IAotCUFkZGVkIHRyaXZpYWwgZnVuY3Rpb24gR2V0Q3VycmVudFBEQigpIHdoaWNoIHJldHVybnMgdGhlIHByb2dyYW0KLQlzZWdtZW50IHByZWZpeCBzZWxlY3Rvci4KLQotCSogbWVtb3J5L2hlYXAuYyAoSEVBUF9GcmVlKTogCi0JSWYgZnJlZSBsaXN0IGlzIGVtcHR5LCBtYWtlIHRoZSBmcmVlZCBibG9jayB0aGUgZnJlZSBsaXN0LgotCi1GcmkgSnVuIDEwIDA3OjU2OjQ5IDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCi0KLQkqIGNvbnRyb2xzL2VkaXQuYyAoRURJVF9TZXRUZXh0TXNnKTogCi0JRG8gbm90IGFwcGVuZCBhIG5ld2xpbmUgYXQgdGhlIGVuZCBvZiB0aGUgbGFzdCBsaW5lLgotCi0JKiB3aW5kb3dzL2V2ZW50LmMgKFNldENhcHR1cmUpOiAKLQlTZXQgd2luSGFzQ3Vyc29yIGlmIG1vdXNlIGNhcHR1cmUgc3VjY2VlZHMuCi0KLUp1biAxMywgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQotCi0JKiBbY29udHJvbHMvbGlzdGJveC5jXQotCUZpeCBidWcgaW4gbGlzdGJveCA6IEluc2VydFN0cmluZyBzaG91bGQgY2FsbCBBZGRTdHJpbmcgaWYgLTEuCi0KLQkqIFtjb250cm9scy9tZW51LmNdCi0JTmV3IGZ1bmN0aW9uIEdldE1lbnVTdGF0ZSgpLgotCi0JKiBbY29udHJvbHMvc2Nyb2xsLmNdIFt3aW5kb3dzL25vbmNsaWVudC5jXQotCVRyeSB0byBtYWtlIFNob3dTY3JvbGxCYXIoKSByZWNhbGMgTkNfIHJlZ2lvbnMuIE5vdCBmaW5pc2hlZCAhCi0KLQkqIFtvYmplY3RzL3RleHQuY10KLQlBZGQgU3R1YiBmb3IgVGFiYmVkVGV4dE91dCgpLCB3aGljaCB0ZW1wb3JhcmVseSBjYWxsIFRleHRvdXQoKS4KLQotCSogW3dpbmRvd3Mva2V5Ym9hcmQuY10gW3dpbmRvd3MvZXZlbnQuY10KLQlOZXcgZnVuY3Rpb24gR2V0S2V5Qm9hcmRTdGF0ZSgpIHdpdGggYW4gS2V5U3RhdGVUYWJsZSBhcnJheQotCQkmIGFzc29jaWF0ZWQgaGFuZGxpbmcgaW4gZnVuY3Rpb24gRVZFTlRfa2V5KCkuCi0KLU1vbiBKdW4gMTMgMTY6NDU6MjQgTUVUIERTVCAxOTk0IChlcmlrQGhhY2t0aWMubmwpCi0KLSAgICAgICAgKiBbY29udHJvbHMvbWVudS5jXQotICAgICAgICBJc01lbnUoKSBhZGRlZC4KLQotICAgICAgICAqIFtsb2FkZXIvbGlicmFyeS5jXQotICAgICAgICBNb2R1bGVGaXJzdCgpLCBNb2R1bGVOZXh0KCksIE1vZHVsZUZpbmROYW1lKCksIE1vZHVsZUZpbmRIYW5kbGUoKQotICAgICAgICBhZGRlZC4KLQotICAgICAgICAqIFtvYmplY3QvZ2Rpb2JqLmNdCi0gICAgICAgIElzR0RJT2JqZWN0KCkgYWRkZWQuCi0KLSAgICAgICAgKiBbbWlzY2VtdS9pbnQyWzU2XS5jXQotICAgICAgICBidWdmaXg6IGJvdGggZGlkbid0IGxlYXZlIGZsYWdzIHB1c2hlZCBvbiAxNmJpdC1zdGFjay4KLSAgICAgICAgKHdpbmZpbGUgZ2V0cyBhIGJpdCBmdXJ0aGVyKQotCi0gICAgICAgICogW21pc2NlbXUvaW50MTYuY10KLSAgICAgICAgQWRkZWQgKGVtcHR5KS4KLQotU2F0IEp1biAxMSAyMjo1Njo0OCAxOTk0IEpvbiBUb21icyAoam9uQGVzaXgyLnVzLmVzKQotCSogd2luZG93cy9ldmVudC5jOgotCUFkZGVkIGNvZGUgdG8gZHJvcCByZWR1bmRhbnQgbW90aW9uIEV2ZW50cyBpbiB0aGUgWEV2ZW50IHF1ZXVlLgotCi1UaHUgSnVuICA5IDEwOjU1OjU1IE1FVCBEU1QgMTk5NCAgSm9jaGVuIEhlaW4gKCBIZWluQFN0dWRlbnQuVFUtQ2xhdXN0aGFsLmRlICkKLQotCSogW21pc2MvbWFpbi5jIG1pc2MvbWVzc2FnZS5jIGluY2x1ZGUvdGV4dHMuaF0KLQlSZW1vdmVkIHRoZSB0ZXh0LWNvbnN0YW50cyBmcm9tIG1lc3NhZ2UuYyBpbnRvIHZhcmlhYmxlcwotCXdoaWNoIG1heSBiZSBjaGFuZ2VkIGZyb20gWC1yZXNvdXJjZXMuCi0KLQkqIFttaXNjL21haW4uYyBtaXNjL21lc3NhZ2UuY10KLQlhZGRlZCA8bG9jYWxlLmg+IGFuZCBzZXRsb2NhbGUoKSB0byBtYWluLmMsIHVzZWQgdG91cHBlcigpIGluIG1lc3NhZ2UuYwotCi1Nb24sIDEzIEp1biA5NCAwOTo0MToxNiAtMDUwMCBQYXVsIEJyYW1lbCA8cGF1bGJyQGNvbW0ubW90LmNvbT4KLQotICAgICAgICAqIGNvbnRyb2xzL2J1dHRvbi5jICggW0NSXUJfTEJ1dHRvbiogKSAKLSAgICAgICAgbGVmdCByYy5yaWdodCBhdCBmdWxsIHdpbmRvdyB3aWR0aCBzbyBjbGljayBvbiBsYWJlbCBhbHNvIAotICAgICAgICBhY3RpdmF0ZXMgdGhlIGNvbnRyb2wgKE1TV2luIGJlaGF2aW9yKQotCi1TYXQgSnVuIDExIDE5OjA1OjQwIDE5OTQgIE9sYWYgRmxlYmJlICAoZmxlYmJlQHRhdC5waHlzaWsudW5pLXR1ZWJpbmdlbi5kZSkKLQotICAgICAgICAqIGluY2x1ZGUvd2luZG93cy5oOgotICAgICAgICAgIGZ1bmN0aW9ucyBwb2ludGVycyBjYW4gbm90IGJlIHBhY2tlZC4KLSAgICAgICAgICAoYW5ub3lpbmcgd2FybmluZ3Mgd2l0aCBmb3J0aGNvbW1pbmcgZ2NjLTIuNi54KQotICAgICAgICAKLSAgICAgICAgKiBsb2FkZXIvbWFpbi5jIChJbml0RExMKTogCi0gICAgICAgICAgRml4ZWQgYSBwcmludGYgc3RhdGVtZW50LiAoZm9yIGNvbnRyb2wuZXhlKSAKLQotICAgICAgICAgIChJbml0aWFsaXplTG9hZGVkRExMcyk6IAotICAgICAgICAgIGRlbGV0ZWQgc2hhZG93IGRlZmluaXRpb24gb2YgICp3cG50LgotICAgICAgICAgIChCcmVha3MgbWFueSBwcm9ncmFtcywgYmVjYXVzZSBub3cgQ09NTURMRyB3aWxsIGJlCi0gICAgICAgICAgIGluaXRpYWxpemVkIDotKAotCi0gICAgICAgICogd2luZG93cy93aW4uYyAoU2V0V2luZG93VGV4dCk6IAotICAgICAgICAgIGFkZGVkIG1pc3NpbmcgYnJlYWtzOyAoUEVOU0FURSBzdGFydHMpIAotCi0gICAgICAgICogd2luZG93cy9ncmFwaGljcy5jIChGbG9vZEZpbGwpOiAKLSAgICAgICAgICBQcm9wZXIgYm91bmRhcnlzLiAoQkFOR0JBTkcgc3RhcnRzKSBGbG9vZEZpbGVfcmVjIHNob3VsZAotICAgICAgICAgIGJlIHJld3JpdHRlbi4KLQotICAgICAgICAqIG9iamVjdHMvZm9udC5jIChGT05UX0dldE1ldHJpY3MpOiAKLSAgICAgICAgICBUWVBPOiB1c2UgZm9udC0+cGVyY2hhciBvbmx5IGlmIGl0IGlzIGRlZmluZWQuIChXUklURSBzdGFydHMpCi0KLVN1biBKdW5lIDEyLCBQZXRlciBCcm9hZGh1cnN0IChwYnJAdWEubndsLmFjLnVrKQotICAgICAgICBjb250cm9scy9zY3JvbGwuYzoKLSAgICAgICAgRml4ZXMgZm9yIGltcHJvdmVkIGJlaGF2aW91ciB3aGVuIGRyYWdnaW5nIHRodW1iOwotICAgICAgICBBZGRlZCBTQl9USFVNQlBPU0lUSU9OIG1lc3NhZ2Ugd2hlbiB0aHVtYiBpcyByZWxlYXNlZC4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVHVlIEp1biAgNyAwODo0MToyNyAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQotCi0JKiBsb2FkZXIvc2VsZWN0b3IuYyAoRml4dXBGdW5jdGlvblByb2xvZ3MpOiAKLQlOZXcgZnVuY3Rpb24gdG8gZml4dXAgbG9hZGVkIERMTCBmdW5jdGlvbiBwcm9sb2dzLiAgSXQgcmVwbGFjZXMgdGhlCi0JZG8gbm90aGluZyBjb2RlIHdpdGggY29kZSB0aGF0IGxvYWRzIERTIHdpdGggdGhlIGFwcHJvcHJpYXRlIGRhdGEKLQlzZWdtZW50IGZvciB0aGUgRExMLgotCi0JKiBtaXNjL2N1cnNvci5jIChMb2FkQ3Vyc29yKTogCi0JRGlzYWJsZWQgY3Vyc29yIGxvYWRpbmcgZnJvbSAuRVhFIG9yIC5ETEwuICBUaGUgY29kZSBuZWVkcyB0byBoYW5kbGUKLQl0aGUgcG9zc2liaWxpdHkgb2YgbXVsdGlwbGUgY3Vyc29ycyBpbiBhIHNpbmdsZSBkaXJlY3RvcnkuICBBbHNvLAotCWl0IHNob3VsZCBjaGVjayB0byBzZWUgaWYgdGhlIGN1cnNvciBpcyB0aGUgcmlnaHQgc2l6ZS4KLQotCSogb2JqZWN0cy9mb250LmMgKEVudW1Gb250cyk6IAotCUNoZWNrZWQgZm9yIGxwTG9nRm9udExpc3RbaV0gPT0gTlVMTAotCi0JKiBvYmplY3RzL2dkaW9iai5jIChTZXRPYmplY3RPd25lcik6IAotCVJlbW92ZWQgc3R1Yi4gIFJlcGxhY2VkIHdpdGggc2ltcGxlIHJldHVybiBpbiBnZGkuc3BlYy4gIFRoaXMKLQlmdW5jdGlvbiBpcyBub3QgZGVmaW5lZCBmb3IgdGhlIHJldGFpbCB2ZXJzaW9uIG9mIFdpbmRvd3MuCi0KLQkqIG1lbW9yeS9oZWFwLmMgKFdJTjE2X0xvY2FsSGFuZGxlRGVsdGEpOiAKLQlOZXcgZnVuY3Rpb24uICBUaGlzIGlzIHJlYWxseSBhIGR1bW15IHRoYXQgaW1pdGF0ZXMgdGhlIHByb3BlcgotCXJldHVybiB2YWx1ZXMuCi0KLQkqIGxvYWRlci9saWJyYXJ5LmMgKEdldFByb2NBZGRyZXNzKTogCi0JRml4ZWQgZGVmaW5pdGlvbiBvZiBJU19CVUlMVElOX0RMTCgpIG1hY3JvLgotCi1Nb24gSnVuICA2IDE4OjE1OjQwIDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCi0KLQkqIG1pc2NlbXUvaW50MjEuYyAoU2Vla0ZpbGUpOiAKLQlOZWVkZWQgdG8gcmV0dXJuIGN1cnJlbnQgcG9zaXRpb24gaW4gRFg6QVguCi0KLQkqIHdpbmRvd3MvdXRpbGl0eS5jICh3aW5kb3dzX3dzcHJpbnRmKTogCi0JQWRkZWQgc3VwcG9ydCBmb3IgJyMnIGluIGZvcm1hdCwgYW5kIGZpeGVkIGJ1ZyB3aXRoICJwdHIiIGJlaW5nCi0JaW5jcmVtZW50ZWQgdG9vIG1hbnkgdGltZXMuCi0KLQkqIG1pc2NlbXUvaW50MjEuYyAoT3BlbkV4aXN0aW5nRmlsZSk6IAotCUFkZCBjb2RlIHRvIGhhbmRsZSBvcGVuaW5nIGZpbGVzIHJlYWQtb25seSBhbmQgd3JpdGUtb25seS4KLQotCSogbG9hZGVyL3dpbmUuYzoKLQlTZWdtZW50IGZpeHVwcyBub3cgZG9uZSBpbiBMb2FkSW1hZ2UgaW5zdGVhZCBvZiBfV2luTWFpbi4gIFRoaXMKLQlpcyBuZWNlc3NhcnkgdG8gc3VwcG9ydCBMb2FkTGlicmFyeSgpLgotCi1TdW4gSnVuICA1IDE3OjM0OjI0IDE5OTQgIEVyaWsgQm9zIChlcmlrQGhhY2t0aWMubmwpCi0KLQkqIFtsb2FkZXIvKl0KLQkJLSBmaXhlZDogR2V0TW9kdWxlSGFuZGxlKCkgc29tZXRpbWVzIHJldHVybmVkCi0JCSAgYSB3cm9uZyBoYW5kbGUuCi0JCS0gZG9uJ3QgaW5pdCBkbGxzIHdoZW4gY3MgPT0gMCAobHpleHBhbmQsIGRvZXNuJ3QKLQkJICBzZWVtIHRvIGhhdmUgYSBpbml0IGZ1bmN0aW9uKQotCQktIExvYWRMaWJyYXJ5ICYgTG9hZEltYWdlIG5vdyByZXR1cm4gZXJyb3IgaW5zdGVhZAotCQkgIG9mIHN0b3BwaW5nIHdpbmUuCi0JCS0gbW92ZWQgbW9zdCBvZiBORS1mdW5jdGlvbnMgaW50byBvbmUgZmlsZS4KLQkJLSBMb2FkTGlicmFyeSgpIHVzZXMgd19maWxlcyBsaXN0IGluc3RlYWQgb2YgaXRzCi0JCSAgb3duIGxpc3QuCi0JCS0gTkUgZXhlY3RhYmxlcyBhcmUgbm93IGZpeGVkLXVwIGFuZCBpbml0aWFsaXNlZCB3aGVuCi0JCSAgbG9hZGVkIGluc3RlYWQgb2Ygb25seSBvbmNlIGJlZm9yZSBjYWxsaW5nIEluaXRUYXNrLgotCi0JKiBbbWlzY2VtdS9pbnQxNS5jXSBbbWlzY2VtdS9pbnQzMS5jXQotCUFkZGVkLgkKLQotCSogW2xvYWRlci9zZWxlY3Rvci5jXQotCVN0dWJzIGFkZGVkIGZvciB7R2V0fFNldH1TZWxlY3RvckxpbWl0KCksIHtHZXR8U2V0fVNlbGVjdG9yQmFzZSgpLgotCi0JKiBbbWlzYy9tYWluLmNdCi0JU3R1YiBhZGRlZCBmb3IgSXNSb21Nb2R1bGUoKS4KLQotCSogW21pc2NlbXUvaW50MjEuY10KLQlTb21lIGNsZWFudXAsIGFkZGVkIGhlYXAgZm9yIHJldHVybmluZyBkYXRhLgotCi1KdW4gNiwgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQotCi0JKiBbdG9vbHMvYnVpbGQuY10KLQlDaGFuZ2UgTUFYX09SRElOQUxTCWRlZmluZSB0byBoaWdoZXIgdmFsdWUsIDEyOTkgZW50cmllcy4KLQkoTU1TWVNURU0gZG9lc24ndCBoYXZlIHN1Y2Nlc2l2ZSBudW1iZXJzLCBzb21lIGFyZSBhcm91bmQgMTIwMCkuCi0KLQkqIFt3aW5kb3dzL3V0aWxpdHkuY10KLQlCdWcgZml4IGluIHdpbmRvd3Nfd3NwcmludGYoKSwgKHR3aWNlIGluY3JlbWVudHMgLi4uKS4KLQotCSogW3dpbmRvd3Mvd2lucG9zLmNdCi0JQnVnIGZpeCBpbiBTZXRXaW5kb3dQb3MoKSwgcmVkcmF3IHdhcyBkb25lIGlmIGZsYWcKLQkJd2FzIHNldCB0byBTV1BfTk9SRURSQVcgd2hpbGUgU1dQX1NIT1dXSU5ET1cpLgotCi0JKiBbbWlzYy9tZXNzYWdlLmNdIFtjb250cm9scy9jb21iby5jXQotCUFkZCBhbiBJbnZhbGlkYXRlUmVjdCgpIGluIFdNX1NIT1dXSU5ET1cgdG8gc3RhdGlzZnkgdGhlIG5ldyAnc2F2ZXVuZGVyJy4KLQotCSogW3dpbmRvd3Mvd2luLmNdCi0JSW4gQ3JlYXRlV2luZG93RXgoKSwgZG8gU2V0TWVudSgpIGNhbGxzIGFmdGVyIHdpbmRvdyBjcmVhdGlvbiwKLQkJanVzdCBiZWZvcmUgc2VuZGluZyB0byBXTV9OQ0NBTENTSVpFLgotCi0JKiBbY29udHJvbHMvbWVudS5jXQotCUluIGZ1bmN0aW9uIFNldE1lbnUoKSwgbm93IHVzZSBTZXRXaW5kb3dQb3MoKSB3aXRoIAotCQlmbGFncyBTV1BfRlJBTUVDSEFOR0VEIHRvIHJlYWRqdXN0IG1lbnUgYXJlYS4KLQlGdW5jdGlvbiBNZW51QmFyQ2FsY1NpemUoKSByZWRvbmUuCi0KLVN1biBNYXkgMjkgMTE6MDg6MjQgMTk5NCAgRGF2aWQgQi4gVGhvbWFzICAoZHRAeWVudGEuYWJxLm5tLnVzKQotCi0gICAgICAgICogW29iamVjdHMvdGV4dC5jXQotICAgICAgICBGaXhlZCBwcm9ibGVtcyBhc3NvY2lhdGVkIHdpdGggRFRfV09SREJSRUFLIGZsYWcuICBTdHJpbmcgbGVuZ3RoCi0gICAgICAgIHdhcyBub3QgYmVpbmcgcHJvcGVybHkgZGVjcmVtZW50ZWQgd2hlbiBsaW5lcyB3ZXJlIGZvbGRlZCwgYW5kCi0gICAgICAgIHdyYXBwaW5nIHdhcyBub3QgcGVyZm9ybWVkIHdoZW4gRFRfTk9DTElQIGFuZCBEVF9OT1BSRUZJWCB3ZXJlCi0gICAgICAgIGJvdGggb24gaW4gYWRkaXRpb24gdG8gRFRfV09SREJSRUFLLiAgV2luZG93cyBkb2VzIHdyYXBwaW5nIGluCi0gICAgICAgIHRoaXMgY2FzZSwgYW5kIG5vdyBzbyBkb2VzIHdpbmUuCi0KLVN1biBKdW4gIDUgMTk6MTc6NDkgMTk5NCAgT2xhZiBGbGViYmUgIChvbGFmQGRyYWdvbikKLQotICAgICAgICAqIFtlZGl0LmNdCi0gICAgICAgIGNwMSB3YXMgdW5pbml0aWFsaXplZCBpZmYgbGluZW5vID09IDAKLQotICAgICAgICAqICBGaW5kRmlsZSB0ZXN0cyBmb3IgZXhpc3RhbmNlIG9mIGZpbGUgZXZlbiBpZiBhIGZ1bGwKLSAgICAgICAgICAgZmlsZW5hbWUgd2FzIHN1cHBsaWVkLiBXaGF0IGFib3V0IHVuaXggZmlsZSBuYW1lcz8KLQotICAgICAgICAqIFtjb250cm9scy9saXN0Ym94IF0KLSAgICAgICAgd25kUHRyIHdhcyB1bmluaXRpYWxpemVkIGZvciBMQl9TRVRUT1BJTkRFWAotCi0gICAgICAgICogW21pc2MvcHJvcGVydHkuY10gICAgIAotICAgICAgICBEbyBub3QgZnJlZSBscFByb3AuIElzIGl0IHJlYWxseSBhbGxvY2F0ZWQgYnkgbWFsbG9jPwotCXtlZGl0ZWQgYnkgQm9iIEFtc3RhZHQ6IGNoYW5nZWQgZnJlZSgpIHRvIEdsb2JhbEZyZWUoKX0KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotU2F0IE1heSAyOCAxMjowMzoyMyAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQotCi0JKiBtaXNjZW11L2ludDIxLmMgKE9wZW5FeGlzdGluZ0ZpbGUpOiAKLQlPcGVuRXhpc3RpbmdGaWxlIG5lZWRlZCB0byByZXR1cm4gaGFuZGxlIGluIEFYIHJlZ2lzdGVyIGluc3RlYWQKLQlvZiB0aGUgQlggcmVnaXN0ZXIuCi0KLQkqIG1pc2NlbXUvaW50MjEuYyAoaW9jdGxHZXREZXZpY2VJbmZvKTogCi0JQWRkZWQgYSBsaXR0bGUgY29kZSB0byBnaXZlIGEgZmFrZSByZXN1bHQgZm9yIG5vcm1hbCBmaWxlcy4KLQotV2VkIE1heSAyNSAyMTo1NTozOCAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQotCi0JKiBbbWVtb3J5L2dsb2JhbC5jXQotCXJldHVybiB2YWx1ZSBmcm9tIEdsb2JhbFNpemUgd2FzIGNvbXBsZXRlbHkgd3JvbmcuCi0KLQkqIFttaXNjZW11L2ludDIxLmhdCi0JZml4ZWQgYnVnIGluIEZpbmRGaXJzdC4gIERpcmVjdG9yeSBwb2ludGVyIChkcCkgd2FzIG5vdCBwbGFjZWQgaW4KLQlkdGEgY29ycmVjdGx5LgotCi0JKiBbdG9vbHMvYnVpbGQuY10KLQlmaXhlZCBjcmVhdGlvbiBvZiBwb3AuaCB0byBndWFyYW50ZWUgdGhhdCBmbGFncyBhcmUgcmVzdG9yZWQgY29ycmVjdGx5LgotCi0JKiBbbWlzYy9jb21tLmNdCi0JY2hhbmdlZCBhbGwgb2NjdXJhbmNlIG9mIHN0cm5jbXAoKSB0byBzdHJuY2FzZWNtcCgpLgotCUJ1aWxkQ29tbURDQigpIHNob3VsZCBub3QgcmVxdWlyZSB0aGF0IE9wZW5Db21tKCkgYmUgY2FsbGVkIGZpcnN0LgotCi0JKiBbbG9hZGVyL3NlbGVjdG9yLmNdCi0JSGVhcCBpbml0aWFsaXplZCB0byBzaXplIG9mIGZ1bGwgc2VnbWVudCBsZXNzIHN0YWNrIHNpemUgYW5kIAotCWF1dG9tYXRpYyBkYXRhIHNpemUuCi0KLVNhdCBNYXkgMjggMDk6MTQ6MzMgMTk5NCAgUmljayBTbGFka2V5ICAoanJzQHdvcmxkLnN0ZC5jb20pCi0KLQkqIFtjb250cm9scy9saXN0Ym94LmNdCi0JQ29ycmVjdCB0eXBvcyBpbiBMaXN0Qm94UmVzZXRDb250ZW50IHdoZXJlIGxwbHMgdmFyaWFibGUgaXMKLQl1c2VkIHdoZXJlIGxzbHMyIHZhcmlhYmxlIGlzIG1lYW50LiAgRG9uJ3QgY2FsbCBVU0VSX0hFQVBfRlJFRQotCXR3aWNlIG9uIHRoZSBzYW1lIGhhbmRsZSBpZiBoRGF0YSBhbmQgaE1lbSBhcmUgdGhlIHNhbWUuCi0KLQkqIFtkZWJ1Z2dlci9vcGNvZGVzL2kzODYtZGlzLmNdCi0JQWRkIG5ldyBuYW1lIGFycmF5IG5hbWVzX3JtdyBmb3IgdGFibGUgZHJpdmVuIGRlY29kaW5nIG9mIHRoZQotCTE2LWJpdCBtb2Qvcm0gZmllbGQuICBPbWl0IGxhcmdlIGNhc2Ugc3RhdGVtZW50IGluIE9QX0UgYW5kCi0JcmVwbGFjZSB3aXRoIGFycmF5IHJlZmVyZW5jZSB0byBtYXRjaCBleGlzdGluZyBjb2Rpbmcgc3R5bGUuCi0JQWRkIG5ldyBzdGF0aWMgdmFyaWFibGUgbWFjaGluZSB3aXRoIHZhbHVlIDI4NiBvciAzODYgdG8KLQljb3JyZWN0bHkgZGVjb2RlIG1vZC9ybSBmaWVsZCBpbiBlaXRoZXIgMTYgb3IgMzIgYml0IG1vZGVzLgotCVNldCBpdCBpbiBwcmludF9pbnNuX2l7MiwzfTg2LiAgSW4gT1BfRSB1c2UgaXQgdG8gZGVjaWRlIGhvdwotCXRvIGRlY29kZSBtb2Qvcm0uICBXaGlsZSB0aGUgY29kZSB3YXMgY29ycmVjdCBmb3IgMTYgYml0IGNvZGUsCi0JaXQgd2FzIGltcHJvcGVybHkgZGVjb2RpbmcgbW9kL3JtIGZpZWxkcyBvbiB3b3JkIHByZWZpeGVkCi0JMzIgYml0IGluc3RydWN0aW9ucy4KLQotCSogW2RlYnVnZ2VyL2RlYnVnLmxdCi0JUmVjb2duaXplIG5ldyB0b2tlbiBBQk9SVC4gICBSZWNvZ25pemUgc2luZ2xlIGxldHRlcnMgJ3AnCi0JYW5kICdxJyBhcyB0b2tlbnMuCi0KLQkqIFtkZWJ1Z2dlci9kYmcueV0KLQlBZGQgbmV3IHRva2VuIEFCT1JULiAgQWxsb3cgcHJpbnQgY29tbWFuZCB0byBiZSBpbnZva2VkIGJ5Ci0JJ3AnIGFuZCBxdWl0IGNvbW1hbmQgYnkgJ3EnLCBhbGEgR0RCLiAgQ2hhbmdlIGxvdHMgb2YgJ307JwotCXRvIGp1c3QgJ30nLiAgQWRkIHN0YXRpYyBkdW1teV9yZWdzIHRvIHdpbmVfZGVidWcgc28gdGhhdAotCXdpbmVfZGVidWcoMCwgTlVMTCkgZG9lc24ndCBjb3JlIGR1bXAgd2l0aCBxbWFnaWMuCi0KLQkqIFtkZWJ1Z2dlci9pbmZvLmNdCi0JQ29ycmVjdCBzeW50YXggb2YgYnJlYWsgY29tbWFuZCBpbiBoZWxwdGV4dCBhbmQgb21pdCBmb3JtZXIKLQljb21tZW50IGFib3V0IHByb2JhYmxlIGJ1Z2dpbmVzcyBvZiB0aGUgZGlzYXNzZW1ibHkgc2luY2UgaXQKLQlpcyBub3cgY29ycmVjdC4gIENoYW5nZSBmcHJpbnRmIG9mIGZpcnN0IGJhY2t0cmFjZSBzdGFjawotCWZyYW1lIHRvIG1hdGNoIHRoYXQgb2YgdGhlIHNlY29uZCBhbmQgc3Vic2VxdWVudCBmcmFtZXMuCi0KLQkqIFtsb2FkZXIvc2VsZWN0b3IuY10KLQlDaGFuZ2UgY29uc3RydWN0aW9uIG9mIGNvbW1hbmQgbGluZSBpbiBDcmVhdGVQU1AgZnJvbSBjcmVhdGluZwotCWEgc3RyaW5nIHRoYXQgbG9va3MgbGlrZSAiYXJnMSBhcmcyIFxyIiB0byAiYXJnMSBhcmcyIi4gIEEgRE9TCi0JUFNQIGNvbW1hbmQgbGluZSBsb29rcyBsaWtlICIgYXJnMSBhcmcyXHIiIHdpdGggdGhlIGxlbmd0aCBub3QKLQlpbmNsdWRpbmcgdGhlIHRyYWlsaW5nICJcciIgYnV0IHRoYXQgaXMgbm90IGhvdyBXaW5kb3dzIGRvZXMgaXQuCi0KLQkqIFtsb2FkZXIvbGlicmFyeS5jXQotCUNoYW5nZSB1c2VzIG9mICVzIHRvIHByaW50IHN0cmluZ3MgaW4gR2V0TW9kdWxlSGFuZGxlIHRvICV4IHNvCi0JdGhhdCBzdHJpbmcgSURzIGRvbid0IGNhdXNlIGEgY29yZSBkdW1wIHdpdGggcW1hZ2ljLiAgSGFuZGxlCi0JY29udmVydGluZyBhIHN0cmluZyBpZCB0byBhIGxpdGVyYWwgbW9kdWxlIGhhbmRsZS4gIEZvcgotCWV4YW1wbGUsIEdldE1vZHVsZUhhbmRsZSgoTFBTVFIpIDB4NTcpIG5vdyByZXR1cm5zIDB4NTcgaWYKLQlpdCBpcyBhIHJlYWwgbW9kdWxlIGhhbmRsZS4KLQotCSogW21pc2MvbWVzc2FnZS5jXQotCUluIE1lc3NhZ2VCb3gsIHRyYW5zbGF0ZSBhIE5VTEwgdGl0bGUgYXJndW1lbnQgdG8gdGhlIHN0cmluZyAiRXJyb3IiLgotCi0JKiBbbWlzYy9wcm9maWxlLmNdCi0JSW4gR2V0U2V0UHJvZmlsZSB0cmFuc2xhdGUgYSBOVUxMIERlZmF1bHQgYXJndW1lbnQgdG8gIiIuICBBbnkKLQljYWxsZXIgd2hvc2UgRGVmYXVsdCBhcmd1bWVudCBpcyBOVUxMIGlzIGJ1Z2d5LCBidXQgQ0hBUk1BUCBkb2VzIGl0Ci0JYW55d2F5LgotCi0JKiBbb2JqZWN0cy9mb250LmNdCi0JQWRkIE5VTEwgcG9pbnRlciBjaGVja3MgaW4gRW51bUZvbnRGYW1pbGllcyB0byBwcmV2ZW50IGNvcmUgZHVtcHMuCi0KLVNhdCBNYXkgMjggMjA6MDE6NTEgMTk5NCBKb24gVG9tYnMgKGpvbkBndGV4MDIudXMuZXMpIAotCi0JKiBOZXcgb3B0aW9ucy9yZXNvdXJzZXMgbm9zYXZldW5kZXJzIGFuZCBub2JhY2tpbmdzdG9yZS4gIEJ5IAotCWRlZmF1bHQgYmFja2luZ3N0b3JlIGFuZCBzYXZldW5kZXJzIGFyZSBub3cgZW5hYmxlZCwgdGhlc2UgdXNlIAotCW1vcmUgbWVtb3J5IGJ1dCBhdm9pZHMgdGhvc2Ugc2xvdyAoc29tZXRpbWVzIG11bHRpcGxlKSByZWRyYXdzIAotCWNhdXNlZCBiZSBleHBvc3VyZSBldmVudHMuCi0KLU1heSAzMCwgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQotCi0JKiBbbWlzYy9kcml2ZXIuY10gTmV3IGZpbGUKLQlTa2VsZXRvbiBmb3IgJ0luc3RhbGxhYmxlIFdpbmUgRHJpdmVycycgZnVuY3Rpb25zLiA6LSkKLQkqIFttaXNjL2F1ZGlvLmNdIE5ldyBmaWxlCi0JU2tlbGV0b24gZm9yIGJhc2ljICdBdWRpbyBEcml2ZXInIGZ1bmN0aW9ucy4KLQkqIFttaXNjL25ldHdvcmsuY10gTmV3IGZpbGUKLQlTdHVicyBmb3IgZmV3IG5ldHdvcmtpbmcgZnVuY3Rpb25zLgotCi0JKiBbbWlzYy9tbXN5c3RlbS5jXQotCU1vcmUgY29kaW5nIC4uLiBhIGR1c3QgaW4gYSBnYWxheHkgLi4uCi0JKiBbbWlzYy9zaGVsbC5jXQotCVNvbWUgY29kaW5nIGZvciAnUmVnWFhYJyBmdW5jdGlvbnMgLi4uIGEgZHVzdCBpbiB0aGUgd2luZCAuLi4KLQotCSogW21pc2MvcHJvZmlsZS5jXQotCUJ1ZyBmaXggaW4gR2V0U2V0UHJvZmlsZSgpLCBiYWQgZW51bWVyYXRpb24gaWYgS2V5TmFtZSA9PSBOVUxMLgotCi0JKiBbb2JqZWN0cy9nZGkuY10KLQlOZXcgZnVuY3Rpb24gQ3JlYXRlRGlzY2FyZGFibGVCaXRtYXAoKSwgaXQganVzdCBjYWxsaW5nIAotCUNyZWF0ZUNvbXBhdGlibGVCaXRtYXAoKSBmb3Igbm93LiBJdCdzIGdldCAnY2xvY2suZXhlJyBydW5uaW5nICEgOi0pCi0KLQkqIFtjb250cm9scy9saXN0Ym94LmNdCi0JKiBbY29udHJvbHMvY29tYm8uY10KLQlOZXcgZm9udCBtZW1iZXIgYXNzaWduZWQgdG8gU1lTVEVNX0ZPTlQgYXMgZGVmYXVsdC4KLQlBZGRlZCBwcm9jZXNzaW5nIGZvciBXTV9TRVRGT05UIG1lc3NhZ2U7Ci0KLQotVHVlIE1heSAzMSAyMDozNDoyNSBFRFQgMTk5NCAgSm9obiBSaWNoYXJkc29uIDxqcmljaGFyZEBjcy51bWwuZWR1PgotCi0gICAgICAgICogW3dpbmRvd3MvZXZlbnQuY10KLSAgICAgICAgQWRkZWQgQXN5bmNNb3VzZUJ1dHRvbnNTdGF0ZXMgYXJyYXkgZm9yIEdldEFzeW5jS2V5U3RhdGUuCi0KLSAgICAgICAgKiBbd2luZG93cy9rZXlib2FyZC5jXQotICAgICAgICBJbXBsZW1lbnRlZCBiZWdpbm5pbmcgb2YgR2V0QXN5bmNLZXlTdGF0ZS4KLQotV2VkIE1heSAyNSAyMzozNTowMyAxOTk0ICBEYXZpZCBNZXRjYWxmZSA8ZGF2aWRAcHJpc20uZGVtb24uY28udWs+Ci0KLSAgICAgICAgKiBbb2JqZWN0cy9tZXRhZmlsZS5jXSBbaW5jbHVkZS9tZXRhZmlsZS5oXQotICAgICAgICAgIFt3aW5kb3dzL21hcHBpbmcuY10gW29iamVjdHMvY2xpcHBpbmcuY10gW29iamVjdHMvYml0Ymx0LmNdCi0gICAgICAgICAgW3dpbmRvd3MvZGMuY10KLSAgICAgICAgRnVydGhlciBtZXRhZmlsZSBzdXBwb3J0LgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1Nb24gTWF5IDIzIDE1OjA3OjM2IDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCi0KLQkqIFtsb2FkZXIvc2VsZWN0b3IuY10KLQlBbGxvY2F0ZSBoZWFwIGFuZCBzdGFjayBzZWdtZW50cyBhcyA2NGsuCi0KLVNhdCBNYXkgMjEgMDE6MTU6NDkgMTk5NCAgUmljayBTbGFka2V5ICAoanJzQHdvcmxkLnN0ZC5jb20pCi0KLSAgICAgICAgKiBbbG9hZGVyL3NlbGVjdG9yLmNdCi0gICAgICAgIENvcnJlY3QgdHlwb3Mgd2hlcmUgbWVtY3B5IGlzIHVzZWQgaW5zdGVhZCBvZiBtZW1zZXQuCi0KLSAgICAgICAgKiBbbG9hZGVyL3Jlc291cmNlLmNdCi0gICAgICAgIEFsbG93IGZvciBsZWdpdGltYXRlIGNhc2VzIHdoZXJlIGJpU2l6ZUltYWdlIGlzIDAgaW4gTG9hZEljb24KLSAgICAgICAgYnkgY2FsY3VsYXRpbmcgdGhlIHZhbHVlIHdoZW4gdGhlIGJpdG1hcCBpcyBub3QgY29tcHJlc3NlZC4KLQotICAgICAgICAqIFttaXNjZW11L2ludDIxLmNdCi0gICAgICAgIEZpeCBOVUxMIGRlcmVmZXJlbmNlIGNhdXNlZCBieSBzdXBlcmZsdW91cyBET1NfY2xvc2VkaXIgaW4gRmluZE5leHQuCi0KLSAgICAgICAgKiBbbG9hZGVyL3Jlc291cmNlLmNdCi0gICAgICAgIE5ldyBmdW5jdGlvbiB0eXBlX21hdGNoIHRvIGhhbmRsZSBzdHJpbmcgcmVzb3VyY2UgdHlwZXMgYXMKLSAgICAgICAgd2VsbCBhcyBJRHMuICBJbiBhZGRpdGlvbiwgY29tcGFyZSBvbmx5IGxvdyA0IGJpdHMgb2YgdHlwZV9pZAotICAgICAgICB3aGVuIGJvdGggbnVtYmVycyBhcmUgSURzIHNvIHRoYXQgMHgwMDAyIG1hdGNoZXMgMHg4MDAyLgotICAgICAgICBJbiBGaW5kUmVzb3VyY2VCeU51bWJlciBhbmQgRmluZFJlc291cmNlQnlOYW1lIHVzZSB0eXBlX21hdGNoCi0gICAgICAgIGluc3RlYWQgb2YgY29tcGFyaW5nIG51bWJlcnMuICBJbiBGaW5kUmVzb3VyY2UgaGFuZGxlIHRoZQotICAgICAgICAiI251bWJlciIgc3ludGF4IGFuZCBlbXB0eSBzdHJpbmdzIGluIGJvdGggdGhlIHJlc291cmNlIGFuZAotICAgICAgICB0eXBlIG5hbWVzLgotCi1Nb24gTWF5IDIzIDAwOjQ4OjI1IDE5OTQgIFJpY2sgU2xhZGtleSAgKGpyc0B3b3JsZC5zdGQuY29tKQotCi0gICAgICAgICogW3dpbmRvd3MvZGlhbG9nLmNdCi0gICAgICAgIEZpeCBpbmFkdmVydGVudCBwcmludGluZyBvZiBzdHJpbmcgSURzIGFzIHN0cmluZ3MuCi0KLU1heSAyMywgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQotCi0JKiBbY29udHJvbHMvbWVudS5jXQotCU5ldyBmdW5jdGlvbnMgR2V0TWVudUl0ZW1Db3VudCgpLCBHZXRNZW51SXRlbUlEKCkuCi0JCUdldE1lbnVTdHJpbmcoKSAmIEhpbGl0ZU1lbnVJdGVtKCkuCi0JQnVnIGZpeCBpbiBDaGVja01lbnVJdGVtKCkuCi0JRnVuY3Rpb24gU2V0TWVudSgpIG5vdyBtYWtlIGNsaWVudCBhcmVhIHJlY2FsYyBpZiBtZW51IHJlbW92ZWQuCi0KLQkqIFt3aW5kb3dzL3dpbnBvcy5jXQotCUJ1ZyBmaXggaW4gU2V0V2luZG93UG9zKCksIG5vIG1vcmUgWE1hcHBpbmcgb3IgWENvbmZpZ3VyaW5nCW9mCi0JCXdpbmRvd3Mgd2l0aCBpbml0aWFsIHdpZHRoIG9yIGhlaWdodCBlcXVhbCB6ZXJvLgotCi0JKiBbb2JqZWN0cy9nZGlvYmouY10KLQlOZXcgZnVuY3Rpb24gRW51bU9iamVjdHMoKSwgdXNpbmcgbmV3IGxwUGVuQnJ1c2hMaXN0IGJ1aWxkdXAKLQkJZnJvbSBjYWxscyB0byBuZXcgZnVuY3Rpb24gR0RJX0FwcGVuZFRvUGVuQnJ1c2hMaXN0KCkuCi0JCSgncGJydXNoLmV4ZScgZG9uJ3Qgc2hvdyBpdHMgZmFjZSB5ZXQgISAuLi4gOi0oICkKLQlOZXcgRU1QVFkgU1RVQiBmb3IgZnVuY3Rpb24gU2V0T2JqZWN0T3duZXIoKSwKLQkJKCdtcGxheWVyLmV4ZScgY2FsbCBpdCB2aWEgR2V0UHJvY0FkZHJlc3MoKSAuLi4pCi0KLQkqIFtvYmplY3RzL2ZvbnQuY10KLQlOZXcgaW50ZXJuYWwgZnVuY3Rpb25zIFBhcnNlRm9udFBhcm1zKCkgJiBJbml0Rm9udHNMaXN0KCkuCi0JRW51bUZvbnRzKCkgJiBFbnVtRm9udEZhbWlsaWVzKCkgZW51bWVyYXRlcyBmb250cyAobm8gbW9yZSBkdW1taWVzKS4KLQlGT05UX01hdGNoRm9udCBub3cgbWFrZSByZXRyaWVzIHRvIGZpbmQgY2xvc2VzdC1zbWFsbGVzdCBmb250LgotCQkoJ2NoYXJtYXAuZXhlJyBjYW4gbm93IHNob3cgdGhlIGRpZmZlcmVudHMgZm9udHMgYXZhaWxhYmxlKQotCi0JKiBbd2luZG93cy9ub25jbGllbnQuY10KLQlVc2Ugc21hbGwgZG9zIE9CTV9PTERfQ0xPU0UgYnV0dG9uIGZvciBNREkgd2luZG93cy4KLQotCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10gW29iamVjdHMvYml0bWFwLmNdCi0JU3RhcnQgdG8gcmVtb3ZlIG9ic29sZXRlIGdsb2JhbHMgc3VjaCBYVF9zY3JlZW4gLi4uCi0KLQkqIFtsb2FkZXIvbGlicmFyeS5jXQotCU1ha2UgZnVuY3Rpb24gR2V0UHJvY0FkZHJlc3MoKSB3b3JraW5nIGFsc28gd2l0aCBidWlsdGluIERMTHMuCi0KLVR1ZSBNYXkgMjQgMjA6MTg6MDIgMTk5NCAgRXJpayBCb3MgKGVyaWtAaGFja3RpYy5ubCkKLQotICAgICAgICAqIFtpZjE2MzIvc3lzdGVtLnNwZWNdIFtpZjE2MzIvdG9vbGhlbHAuc3BlY10KLSAgICAgICAgc3lzdGVtLmRsbCAmIHRvb2xoZWxwLmRsbCBhZGRlZC4KLQotICAgICAgICAqIFtsb2FkZXIvbGlicmFyeS5jXQotICAgICAgICBNb2RpZmllZCBHZXRNb2R1bGVGaWxlTmFtZSgpIHRvIHJldHVybiB0aGUgZnVsbAotICAgICAgICBmaWxlbmFtZS4KLSAgICAgICAgQWRkZWQgYSBjaGVjayB0byBMb2FkTGlicmFyeSgpIHRvIHByZXZlbnQgbG9hZGluZwotICAgICAgICBidWlsdCBpbiBkbGxzLiAoZWcuIHVzZXIuZXhlKQotICAgICAgICBBZGRlZCBhIGNoZWNrIHRvIEZyZWVMaWJyYXJ5KCkgdG8gcHJldmVudCBidWlsdC1pbgotICAgICAgICBkbGxzIGZyb20gYmVpbmcgZnJlZWQuCi0gICAgICAgIE1vZGlmaWVkIEdldFByb2NBZGRyZXNzKCkgdG8gc3VwcG9ydCBidWlsdGluIGRsbHMuCi0KLSAgICAgICAgKiBbbG9hZGVyL3NpZ25hbC5jXSBbbWlzY2VtdS9pbnQyZi5jXQotICAgICAgICBBZGRlZCA9PiBwaWZlZGl0IHJ1bnMuCi0KLSAgICAgICAgKiBbbWlzYy9kb3NfZnMuY10KLSAgICAgICAgQWRkZWQgYSBOVUxMLXB0ciBjaGVjayB0byBET1NfY2xvc2VkaXIoKS4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVHVlIE1heSAxNyAyMzowMzoxNiAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQotCi0JKiBbd2luZG93cy9kY2UuY10KLQlGaXhlZCBidWcgd2l0aCBkY2UgaW5pdGlhbGl6YXRpb24gdGhhdCB3YXMgY2F1c2luZyBkaWFsb2cgYm94ZXMgdG8gbm90Ci0JYmUgZGlzcGxheWVkLgotCi0JKiBbaWYxNjMyL2NhbGxiYWNrLmNdCi0JQmV0dGVyIGZpeCBmb3IgYnVnIGZvdW5kIGJ5IE1hcnRpbi4KLQotU2F0IE1heSAxNCAxOTo0ODozOSAxOTk0ICBSaWNrIFNsYWRrZXkgIChqcnNAd29ybGQuc3RkLmNvbSkKLQotICAgICAgICAqIFsgbWVtb3J5L2hlYXAuYyBdCi0gICAgICAgIFJlZGlyZWN0IEhFQVBfUmVBbGxvYyBjYWxscyB3aXRoIE5VTEwgYXJndW1lbnQgdG8gSEVBUF9BbGxvYy4KLQotTWF5IDE2LCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCi0KLQkqIFtvYmplY3RzL2ZvbnQuY10KLQlNYWtlIEVudW1Gb250cygpIGNhbGxpbmcgYSBjYWxsYmFjayB3aXRoIGR1bW15IGZvbnRzIC4uLiA6LSkKLQotCSogW29iamVjdHMvdGV4dC5jXQotCUFkZCBFbXB0eSBTdHViIGZvciBFeHRUZXh0T3V0KCksIHdoaWNoIHRlbXBvcmFyZWx5IGNhbGwgVGV4dG91dCgpLgotCi0JKiBbaWYxNjMyL2NhbGxiYWNrLmNdCi0JVGVtcG9yYXJlbHkgZ28gYXJvdW5kIGJ1ZyBpbiBDYWxsV2luZG93UHJvYygpLCB5b3Ugd2lsbCBzZWUgcHJpbnRmcy4KLQotCSogW2NvbnRyb2xzL2VkaXQuY10KLQlNYWtlIEVESVQgY29udHJvbHMgZm9jdXNlZCBieSBhIG1vdXNlIGNsaWNrLgotCi0JKiBbbWlzYy9wcm9wZXJ0eS5jXQotCUJ1ZyBGaXggaW4gZnVuY3Rpb24gRW51bVByb3BzKCksIGJldHRlciB1c2Ugb2YgQ2FsbEJhY2sxNigpLgotCi0JKiBbbWlzYy9tbXN5c3RlbS5jXQotCUJhc2ljIFNrZWx0b24ncyBmb3IgTUNJIG1lc3NhZ2VzIGRpc3BhdGNoaW5nIGZ1bmN0aW9uLgotCi1TdW4gTWF5IDE1IDE2OjE1OjE3IDE5OTQgIEVyaWsgQm9zIChlcmlrQGhhY2t0aWMubmwpCi0KLSAgICAgICAgKiBbd2luZG93cy91dGlsaXR5LmNdCi0gICAgICAgIEFkZGVkIHdpbmRvd3Nfd3NwcmludGYoKSBmb3IgdGhlIGVtdWxhdG9yLCB3c3ByaW50ZigpIGlzCi0gICAgICAgIGZvciBsaWJ3aW5lLgotCi1TYXQgTWF5IDE0IDIyOjE2OjQwIDE5OTQgIFJpY2sgU2xhZGtleSAgKGpyc0B3b3JsZC5zdGQuY29tKQotCi0gICAgICAgICogW21pc2MvY3Vyc29yLmNdCi0gICAgICAgIEZpeCBwb2ludGVyIHByb2JsZW1zIGluIExvYWRDdXJzb3IgbGVhZGluZyB0byBoZWFwIGNvcnJ1cHRpb24uCi0KLSAgICAgICAgKiAgWyBjb250cm9scy9tZW51LmMgXQotICAgICAgICBGaXggdHdvIE5VTEwgZGVyZWZlcmVuY2luZyBidWdzLgotCi1TdW4gTWF5IDE1IDIwOjA3OjQ4IDE5OTQgIFJpY2sgU2xhZGtleSAgKGpyc0B3b3JsZC5zdGQuY29tKQotCi0gICAgICAgICogW29iamVjdHMvZm9udC5jXQotICAgICAgICBGaXggTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNpbmcgYnVnIGluIEdldENoYXJXaWR0aC4KLQotICAgICAgICAqIFtsb2FkZXIvcmVzb3VyY2UuY10KLSAgICAgICAgRml4IHVuZGVyLWFsbG9jYXRpb24gb2YgbWVtb3J5IGluIExvYWRBY2NlbGVyYXRvcnMuCi0KLSAgICAgICAgKiBbd2luZG93cy9jbGFzcy5jXQotICAgICAgICBJZ25vcmUgbmVnYXRpdmUgc2l6ZXMgZm9yIGV4dHJhIGZpZWxkcyBpbiBSZWdpc3RlckNsYXNzLgotCi1TdW4gTWF5IDE1IDA2OjM1OjAzIDE5OTQgIERhdmlkIE1ldGNhbGZlIDxkYXZpZEBwcmlzbS5kZW1vbi5jby51az4KLQotICAgICAgICAqIFtvYmplY3RzL21ldGFmaWxlLmNdIFtpbmNsdWRlL21ldGFmaWxlLmhdIFtpbmNsdWRlL3dpbmRvd3MuaF0KLSAgICAgICAgICBbb2JqZWN0cy9nZGlvYmouY10gW29iamVjdHMvYnJ1c2guY10gW29iamVjdHMvcGVuLmNdCi0gICAgICAgICAgW29iamVjdHMvdGV4dC5jXSBbb2JqZWN0cy9kY3ZhbHVlcy5jXSBbd2luZG93cy9ncmFwaGljcy5jXQotICAgICAgICAgIFt3aW5kb3dzL2RjLmNdIFt3aW5kb3dzL21hcHBpbmcuY10KLSAgICAgICAgQmVnaW5uaW5ncyBvZiBtZXRhZmlsZSBzdXBwb3J0LgotCi0gICAgICAgICogW21pc2MvZmlsZS5jXQotICAgICAgICBDb3JyZWN0ZWQgc3BlbGxpbmcgb2YgX2xjcmVhdC4KLQotICAgICAgICAqIFtjb250cm9scy9lZGl0LmNdCi0gICAgICAgIE1pbm9yIGJ1ZyBmaXhlcy4KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLU1heSA5LCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCi0KLQkqIFtjb250cm9scy9zY3JvbGwuY10KLQlNYWtlIHRodW1idHJhY2sgYnV0dG9uIGRpc2FwcGVhciBpZiBzY3JvbGwgYm94IHJhdGlvIDwgMzoxLgotCU1ha2UgYXJyb3cgYnV0dG9ucyByZWN0YW5ndWxhciBpZiBzY3JvbGwgYm94IHJhdGlvIDwgMjoxLgotCUFkZCBjb2RlIGZvciBTQlNfVE9QQUxJR04sIFNCU19CT1RUT01BTElHTiwgCi0JCQkJU0JTX0xFRlRBTElHTiAmIFNCU19SSUdIVEFMSUdOLgotCUJ1ZyBmaXggaW4gTkNfQ3JlYXRlU2Nyb2xsQmFycygpLCBubyBtb3JlIGJpZ2J1dHQgaW4gY2FsZW5kYXIuZXhlLi4uIDotKQotCi0JKiBbbG9hZGVyL2xpYnJhcnkuY10gW2xvYWRlci90YXNrLmNdIFttaXNjL2V4ZWMuY10KLQlDb250aW51ZSBwbGF5aW5nIGFyb3VuZCB0cnlpbmcgdG8gZ2V0IGEgc2Vjb25kIHRhc2sgcnVubmluZy4KLQotCSogW3dpbmRvd3MvbWRpLmNdCi0JQ2hhbmdlIE9CTV9DTE9TRSBmb3IgT0JNX09MRF9DTE9TRSwgYSBzbWFsbGVyIGRvdCBidXR0b24gd2hlbiBtYXhpbWl6ZWQuCi0KLQkqIFtldmVyeXdoZXJlXQotCUFkZGluZyBwcmV2aW91cyB3b3JrcyBvZiB0aGUgQXByIDI1LCA5NC4KLQotVHVlIE1heSAxMCAxODowOToxNCAxOTk0IEVyaWsgQm9zIChlcmlrQHRyYXNoY2FuLmhhY2t0aWMubmwpCi0KLQkqIFtpZjE2MzIvbW1zeXN0ZW0uc3BlY10gW21pc2MvbW1zeXN0ZW0uY10gW2luY2x1ZGUvbW1zeXN0ZW0uaF0KLQlBZGRlZCBNYXJ0aW4ncyBtbXN5c3RlbS5kbGwgc3R1YnMuCi0KLQkqIFttaXNjL3NvdW5kLmNdCi0JQWRkZWQgcmVtYWluaW5nIHN0dWJzIGZvciBzb3VuZC5kbGwuCi0KLQkqIFtpZjE2MzIvc2hlbGwuc3BlY10gW21pc2Mvc2hlbGwuY10KLQlGaXhlZCBwcm90b3R5cGVzIChJIGZvdW5kIHRoZW0gaW4gQkMgNCkgYW5kIGFkZGVkIFNoZWxsQWJvdXQoKQotCWFuZCBBYm91dERsZ1Byb2MoKS4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotTWF5IDEsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKLQotCSogW2xvYWRlci9zaWduYWwuY10KLQlBZGQgWFVuZ3JhYlBvaW50ZXIoKSAmIFhVbmdyYWJTZXJ2ZXIoKSBpbiB3aW5lX2ZhdWx0KCkuCi0KLUZyaSBBcHIgMjIgMTk6MzA6MDggMTk5NCAgRXJpayBCb3MgKGVyaWtAdHJhc2hjYW4uaGFja3RpYy5ubCkKLQotCSogW29iamVjdHMvYml0Ymx0LmNdCi0JY29sb3Jfc3RyZXRjaCgpIHJld3JpdHRlbiB0byB1c2UgaW50cyBvbmx5LiAqZmFzdCEqCi0JQkxBQ0tPTldISVRFICYgV0hJVEVPTkJMQUNLIHN0cmV0Y2htb2RlcyByZWRpcmVjdGVkIHRvCi0JdXNlIGNvbG9yX3N0cmV0Y2goKS4KLQotTW9uIE1heSAgMiAyMTozOTo0MyAxOTk0ICBFcmlrIEJvcyAoZXJpa0B0cmFzaGNhbi5oYWNrdGljLm5sKQotCi0JKiBbY29udHJvbHMvbWVudS5jXQotCVNldFN5c01lbnUoKSBhZGRlZC4KLQotCSogW21pc2MvY3Vyc29yLmNdCi0JR2V0Q3Vyc29yKCkgYWRkZWQuCi0KLQkqIFttaXNjL21haW4uY10KLQlTd2FwTW91c2VCdXR0b24oKSBhZGRlZCwgKE5PUCkuCi0KLQkqIFt3aW5kb3dzL3dpbi5jXQotCUdldERlc2t0b3BId25kKCkgYWRkZWQuCi0KLQkqIFtpZjE2MzIvKnNwZWNdCi0JQWRkZWQgbm90IGltcGxlbWVudGVkIGZ1bmN0aW9ucyBkZWZzIGFzIGNvbW1lbnQuCi0KLQkqIFttaXNjL3dpbnNvY2tldC5jXQotCUNoYW5nZSBXU0FHZXRYYnlZKCkgZnVuY3Rpb25zIHRvIG5vbi1ibG9ja2luZyBvbmVzLAotCUFkZGVkIFdTQUFzeW5jU2VsZWN0KCkuIAotCShXU0EgZnVuY3Rpb25zIGNhbid0IGJlIGNhbmNlbGVkIHlldCkuCi0KLVdlZCBBcHIgMjAgMjM6NTg6NTggMTk5NCAgU2NvdHQgQS4gTGFpcmQgIChzY290dEBjdXJseSkKLQotCSogbWlzYy9wcm9maWxlLmM6IEZpeGVkIGJ1ZyB3aXRoIEdldEluaUZpbGVOYW1lIHJldHVybmluZyB3cm9uZwotCXBhdGggd2hlbiBnaXZlbiBhIHNpbXBsZSBmaWxlIG5hbWUuICBGaXhlZCBHZXRTZXRQcm9maWxlIHRvIGFsbG93Ci0JZW51bWVyYXRpbmcgYWxsIGtleSBuYW1lcyB3aGVuIEtleU5hbWUgaXMgbnVsbC4KLQotQXByIDI1LCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCi0KLQkqIFtvYmplY3RzL2JpdGJsdC5jXQotCUFkZCBwcm90ZWN0aW9uIHRvIEJpdEJsdCgpICYgU3RyZXRjaEJsdCgpIGZvciB3aWR0aCBvciBoZWlnaHQgPSAwLgotCi0JKiBbd2luZG93cy9ub25jbGllbnQuY10KLQlBdm9pZCBwYWludGluZyBpbiBOQ19Eb05DUGFpbnQoKSBpZiBJc1dpbmRvd1Zpc2libGUoKS4KLQlTaW1wbGlmeSBOQ19UcmFja01vdXNlTWVudUJhcigpIGJlY2F1c2UgY29kZSBtb3ZlZCB0byBNZW51Rm9jdXNMb29wKCkuCi0KLQkqIFt3aW5kb3dzL3dpbi5jXQotCUNyZWF0ZVdpbmRvd0V4KCkgJiBEZXN0cm95V2luZG93KCkgbm93IGNhbGwgcmVzcGVjdGl2ZWx5Ci0JCUFkZFdpbmRvd1RvVGFzaygpICYgUmVtb3ZlV2luZG93RnJvbVRhc2soKS4KLQlOZXcgZW1wdHkgc3R1YiBmb3IgZnVuY3Rpb24gQW55UG9wdXAoKS4KLQotCSogW2xvYWRlci9saWJyYXJ5LmNdCi0JQnVnIEZpeCA6IEdldE1vZHVsZUZpbGVOYW1lKCkgbm93IHJldHVybiBmdWxsIHBhdGggZmlsZW5hbWUuCi0KLQkqIFtpbmNsdWRlL21lbnUuaF0gW2NvbnRyb2xzL21lbnUuY10KLQlBZGQgaFRleHQgaGFuZGxlIGFuZCByZW1vdmUgb2Jzb2xldGUgTUVOVUlURU0gc3RydWN0IG1lbWJlcnMuCi0JQWRkIGEgUmVsZWFzZUNhcHR1cmUoKSBpbiBTZXRNZW51KCkgd2hlbiBtZW51YmFyIGNoYW5nZWQgd2hpbGUgY2FwdHVyZWQuCi0JQWRkIE1lbnVNb3VzZU1vdmUoKSBNZW51QnV0dG9uVXAoKSBpbiBmdW5jdGlvbiBNZW51Rm9jdXNMb29wKCkuCi0KLQkqIFttaXNjL2ZpbGUuY10KLQlHZXRUZW1wRmlsZW5hbWUoKSBub3cgY3JlYXRlIGEgZmlsZS4KLQlfbGNyZWF0ZSgpIHVzZSB1bml4IG9wZW4gKG5hbWUsIG1vZGUsIHBlcm0pLCB3aXRoIHBlcm09TzY2Ni4KLQotCSogW2lmMTYzMi9yZWxheS5jXQotCVJlbW92ZSB0ZW1wb3Jhcmx5IGJ1aWx0aW4gU0hFTEwuRExMLCBBZGQgTU1TWVNURU0uRExMIGluIGJ1aWx0aW4gbGlzdC4KLQotCSogTmV3IGZpbGUgW21pc2MvbW1zeXN0ZW0uY10KLQkqIE5ldyBmaWxlIFtpbmNsdWRlL21tc3lzdGVtLmhdCi0JKiBOZXcgZmlsZSBbaWYxNjMyL21tc3lzdGVtLnNwZWNdCi0JTWFueSwgbWFueSBlbXB0eSBzdHVicyAuLi4gOi0pCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotV2VkIEFwciAyMCAxNDo1MzozNSAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQotCi0JKiBbdG9vbHMvYnVpbGQuY10gW2lmMTYzMi9jYWxsLlNdIFtpZjE2MzIvSW1ha2VmaWxlXQotCUZpeGVkIGJ1ZyBmb3Igbm9uLUxpbnV4IHN5c3RlbXMuCi0KLUFwciAxOCwgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQotCi0JKiBbd2luZG93cy93aW4uY10KLQlCdWcgZml4ZWQgaW4gQ3JlYXRlV2luZG93RXgoKSA6IE5vdyB1c2UgU2V0TWVudSgpIGZvciBtZW51YmFyIHNldHVwLgotCU5ldyBlbXB0eSBzdHViIGZvciBmdW5jdGlvbiBTZXRTeXNNb2RhbFdpbmRvdygpLgotCi0JKiBbbWlzYy9leGVjLmNdCi0JTmV3IGVtcHR5IHN0dWIgZm9yIGZ1bmN0aW9uIEV4aXRXaW5kb3dzKCkuCi0KLQkqIFtvYmplY3RzL2ZvbnQuY10KLQlOZXcgZW1wdHkgc3R1YiBmb3IgZnVuY3Rpb24gRW51bUZvbnRzKCkuCi0KLQkqIE5ldyBmaWxlIFttaXNjL3Byb3BlcnR5LmNdCi0JTmV3IGZ1bmN0aW9ucyBSZW1vdmVQcm9wKCksIEdldFByb3AoKSwgU2V0UHJvcCgpICYgRW51bVByb3BzKCkuCi0KLQkqIE5ldyBmaWxlIFttaXNjL3NoZWxsLmNdCi0JTmV3IGVtcHR5IHN0dWJzIGZvciBmdW5jdGlvbiBSZWdpc3RlclNoZWxsUHJvYygpLCAKLQkJCVNoZWxsRXhlY3V0ZSgpICYgU2hlbGxQcm9jKCkuCi0KLQkqIE5ldyBmaWxlcyBbbG9hZGVyL3Rhc2suY10gJiBbaW5jbHVkZS90YXNrLmhdCi0JTW92ZSBmdW5jdGlvbnMgR2V0V2luZG93VGFzaygpLCBHZXROdW1UYXNrKCksIEVudW1UYXNrV2luZG93cygpCi0JCWZyb20gJ2xvYWRlci9saWJyYXJ5LmMnLgotCi0JKiBbaWYxNjMyL3VzZXIuY10gW2lmMTYzMi9rZXJuZWwuY10KLQlQdXQgQXRvbXMgZnVuY3Rpb25zIGVudHJpZXMuCi0KLQkqIFtjb250cm9scy9jb21iby5jXQotCU5ldyBmdW5jdGlvbnMgRGlyRGxnU2VsZWN0Q29tYm9Cb3goKSAmIERpckRsZ0xpc3RDb21ib0JveCgpLgotCi0JKiBbY29udHJvbHMvbGlzdGJveC5jXQotCU5ldyBmdW5jdGlvbnMgRGlyRGxnU2VsZWN0KCkgJiBEaXJEbGdMaXN0KCkuCi0KLVN1biBBcHIgMTcgMjA6NTc6NTkgMTk5NCAgRXJpayBCb3MgKGVyaWtAdHJhc2hjYW4uaGFja3RpYy5ubCkKLQotCSogW29iamVjdHMvdGVzdC5jXQotCUdyYXlTdHJpbmcoKSBhZGRlZC4KLQotCSogW2lmMTYzMi9jYWxsYmFjay5jXQotCUNhbGxHcmF5U3RyaW5nUHJvYygpIGFkZGVkLgotCi0JKiBbaWYxNjMyL3JlbGF5LmNdIFtpZjE2MzIvbW1zeXN0ZW0uc3BlY10KLQlBZGRlZC4KLQotCSogW2lmMTYzMi9rZXJuZWwuc3BlY10gW2lmMTYzMi91c2VyLnNwZWNdCi0JQWRkZWQgZm9yZ290dGVuIHNwZWNzIGZvciBhdG9tIGZ1bmN0aW9ucy4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVHVlIEFwciAxMiAwMDowNTozMSAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQotCi0JKiBtaXNjL3NweS5jIChTcHlJbml0KTogQWRkZWQgbW9yZSBtZXNzYWdlIHR5cGVzCi0KLQkqIFt3aW5kb3dzL21kaS5jXSBbaW5jbHVkZS9tZGkuaF0KLQlNYXhpbWl6aW5nIGFuZCByZXN0b3JpbmcgY2hpbGQgd2luZG93cy4KLQlUaWxpbmcgb2YgY2hpbGQgd2luZG93cy4KLQotTW9uIEFwciAxMSAyMDo0ODoyOCAxOTk0ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBsYW1pc3VuLmVwZmwuY2gpCi0KLQkqIFt3aW5kb3dzL3dpbnBvcy5jXQotCVJldmVydCBmb2N1cyBhbmQgYWN0aXZhdGlvbiB0byBwcmV2aW91cyB3aW5kb3cgd2hlbiBoaWRpbmcgYSB3aW5kb3cuCi0KLQkqIFt3aW5kb3dzL3N5c2NvbG9yLmNdCi0JSW1wbGVtZW50ZWQgc3lzdGVtIGNvbG9yIG9iamVjdHMgKGJydXNoZXMgYW5kIHBlbnMgY3JlYXRlZCBhdAotCVNldFN5c0NvbG9yKCkgdGltZSBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlKS4KLQotCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10gW3dpbmRvd3Mvbm9uY2xpZW50LmNdIFtjb250cm9scy9idXR0b24uY10KLQlDaGFuZ2VkIHBhaW50aW5nIGNvZGUgdG8gdXNlIHN5c3RlbSBjb2xvciBvYmplY3RzLgotCi0JKiBbd2luZG93cy9tZXNzYWdlLmNdCi0JTmV3IGZ1bmN0aW9uIE1TR19JbnRlcm5hbEdldE1lc3NhZ2UoKSBmb3IgaW50ZXJuYWwgbWVzc2FnZXMKLQlsb29wcyAoZS5nLiBmb3IgZGlhbG9ncyBvciBtZW51cykuCi0KLQkqIFt3aW5kb3dzL2hvb2suY10gW2luY2x1ZGUvaG9vay5oXSAgKE5ldyBmaWxlcykKLQlCZWdpbm5pbmcgb2YgdGhlIHdpbmRvdyBob29rcyBpbXBsZW1lbnRhdGlvbi4KLQotCSogW3dpbmRvd3MvZGlhbG9nLmNdCi0JVXNlIG5ldyBmdW5jdGlvbiBNU0dfSW50ZXJuYWxHZXRNZXNzYWdlKCkgaW4gRGlhbG9nQm94KCkuCi0KLQkqIFtpZjE2MzIvY2FsbGJhY2suY10KLQlBZGRlZCBmdW5jdGlvbiBDYWxsSG9va1Byb2MoKS4KLQotQXByIDExLCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCi0KLQkqIFt3aW5kb3dzL2V2ZW50LmNdCi0JQnVnIGZpeCA6IFdNX0NIQVJzIGFyZSBzZW50IHRvIGZvY3VzZWQgd2luZG93IGxpa2UgV01fS0VZPz8/LgotCi0JKiBbbWlzYy9leGVjLmNdCi0JTm90aGluZyBtdWNoIG1vcmUgdGhhbiBhIHN0dWIgZm9yIExvYWRNb2R1bGUoKSwgSSBzYXcgdGhlcmUgYSBsb3QKLQkJdG8gYmUgZG9uZSBpbiB0aGF0IGNvcm5lciwgSSB3aWxsIGNvbWUgYmFjayBsYXRlciAuLi4KLQotCSogW2xvYWRlci9saWJyYXJ5LmNdCi0JTmV3IGZ1bmN0aW9ucyBHZXRXaW5kb3dUYXNrKCksIEdldE51bVRhc2soKSwgRW51bVRhc2tXaW5kb3dzKCkgCi0JCQlhbmQgYXNzb2NpYXRlZCBtb2R1bGVzICYgdGFza3MgbGlua2VkLWxpc3RzLgotCShpdCdzIG9ubHkgYW4gJ2VtZXJnaW5nIGJ1ZCcsIG1vcmUgdG8gY29tZSBuZXh0IHdlZWtzKS4KLQotCSogW2xvYWRlci93aW5lLmNdCi0JVXNlIExvYWRMaWJyYXJ5KCkgaW5zdGVhZCBvZiBMb2FkSW1hZ2UoKSBmb3IgJ3N5c3Jlcy5kbGwnLgotCi0JKiBbY29udHJvbC9tZW51LmNdCi0JWW91IGNhbiBub3cgY2xpY2sgb3V0c2lkZSBtZW51IHJlZ2lvbiB3aXRob3V0IHByb2JsZW0uCi0JS2V5Ym9hcmQgbmF2aWcgbW9yZSBzbW9vdGx5LCBldmVuIGlmIGEgY2hpbGQgaGFzIHRoZSBmb2N1cy4KLQlCdWcgZml4IGluIEluc2VydEl0ZW0oKSwgKGJhZCBsaW5rbGlzdCB3aGVuIGluc2VydCBwb2ludCBub3QgZm91bmQpLgotCWNoYW5nZSBSZWFsbG9jIGZvciBGcmVlICYgQWxsb2MgaW4gTW9kaWZ5SXRlbSgpLgotCU1GX1NUUklORyBub3cgc2V0IEJMQUNLX1BFTiB0byBmaXggYnVnIG9mIGJhZCBjb2xvciBvZiB0aGUgdW5kZXJzY29yZXMgCi0JCWRvbmUgYnkgRHJhd1RleHQoKSwgKG1heWJlIGl0IHNob3VsZCBkb25lIGluIERyYXdUZXh0KCkgaXRzZWxmID8pLgotCi1TdW4gQXByIDEwIDE0OjA2OjA4IDE5OTQgIEVyaWsgQm9zIChlcmlrQHRyYXNoY2FuLmhhY2t0aWMubmwpCi0KLQkqIFttaXNjL3Byb2ZpbGUuY10KLQkuSU5JIGZpbGVzIHdpbGwgbm93IGJlIHN0b3JlZCBpbiAvIGxvYWRlZCBmcm9tIHRoZSB3aW5kb3dzIGRpcgotCWlmIG5vIHBhdGggaXMgc3VwcGxpZWQuCi0KLQkqIFtpZjE2MzIva2VybmVsLnNwZWNdCi0JRml4ZWQgR2V0RHJpdmVUeXBlJ3MgcHJvdG90eXBlLgotCi0JKiBbaWYxNjMyL3dpbnNvY2suc3BlY10gW2luY2x1ZGUvd2luc29jay5oXSBbbWlzYy93aW5zb2NrZXQuY10KLQlGaXhlZCBwcm90b3R5cGVzOiB3aW5zb2NrIHVzZXMgYSB3b3JkIGFzIHNvY2tldCBoYW5kbGUgbm90IGFuIGludC4KLQotCSogW21pc2Mvd2luc29ja2V0LmNdCi0JQWRkZWQgaGVhcCBhbGxvY2F0aW9uIGZvciByZXR1cm5lZCBzdHJ1Y3R1cmVzLgotCUFkZGVkIG5vbi1ibG9ja2luZyBXU0FBc3luY0dldFhieVkoKSBmdW5jdGlvbnMgYXMgYmxvY2tpbmcgb25lcy4KLQotCSogW2xvYWRlci93aW5lLmNdCi0JQWRkZWQgSXNETExMb2FkZWQoKSwgdXNlZCBpbiBMb2FkSW1hZ2UoKSB0byBwcmV2ZW50IGxvYWRpbmcKLQlhIGRsbCBtdWx0aXBsZSB0aW1lcy4KLQlEaXJlY3RvcnkgaXMgYWRkZWQgdG8gd2luZSdzIHBhdGggd2hlbiBhIGZ1bGxwYXRoIGlzIHN1cHBsaWVkIHdoZW4KLQlzdGFydGluZyB3aW5lLgotCUxvYWRJbWFnZSgpOiBETEwgZmlsZW5hbWUgdXNlZCBpbnN0ZWFkIERMTCdzIG93biBpbnRlcm5hbCBuYW1lLAotCWZpeGVzICdCYWQgRExMIG5hbWUnIGVycm9ycy4KLQotU2F0IEFwciAgOSAwODoyNjowMyAxOTk0ICBEYXZpZCBNZXRjYWxmZSA8ZGF2aWRAcHJpc20uZGVtb24uY28udWs+Ci0KLQkqIFtjb250cm9scy9lZGl0LmNdIFtjb250cm9scy93aWRnZXRzLmNdCi0JRmlyc3QgcmVsZWFzZSBvZiBlZGl0IGNvbnRyb2wuCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVR1ZSBBcHIgIDUgMTQ6MzY6NTkgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKLQotCSogW2luY2x1ZGUvbWRpLmhdIFt3aW5kb3dzL21kaS5jXQotCVVzZSBXTV9QQVJFTlROT1RJRlkgbWVzc2FnZXMgdG8gYWN0aXZhdGUgY2hpbGRyZW4uCi0JR2VuZXJhdGUgV01fQ0hJTERBQ1RJVkFURSBtZXNzYWdlcy4KLQlCZWdpbm5pbmdzIGhhbmRsZXIgZm9yIG1heG1pemVkIGNoaWxkIHdpbmRvdy4KLQlDbGVhbiB1cCB3aGVuIGNoaWxkcmVuIGFyZSBkZXN0cm95ZWQuCi0KLQkqIFt3aW5kb3dzL21lc3NhZ2UuY10gW3dpbmRvd3Mvbm9uY2xpZW50LmNdIFt3aW5kb3dzL3dpbnBvcy5jXQotCVJlbW92ZWQgY29kZSBhZGQgOTQvMDMvMjYuCi0KLUFwciA0LCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCi0KLQkqIFtjb250cm9sL21lbnUuY10KLQlNYWtlIG1vdXNlIG1lbnUgbmF2aWdhdGlvbiB3b3JraW5nIGFnYWluLiA6LSkpCi0JKGJlIGNhcmVmdWxsLCBjbGlja2luZyBvdXRzaWRlIG1lbnVzIChpZS46IGNsaWVudHJlY3QpIAotCW5vdCByZXNvbHZlZCB5ZXQpCi0KLQkqIFt3aW5kb3dzL25vbmNsaWVudC5jXSAgW2NvbnRyb2xzL3Njcm9sbC5jXQotCUJ1Z3MgZml4IGluIE5DVHJhY2tTY3JvbGxCYXJzKCkuCi0KLQkqIFttaXNjL2Rvc19mcy5jXQotCUJ1ZyBmaXggaW4gJ1RvRG9zKCknIGluIGNvbnZlcnNpb24gZm9yICcvJywKLQkJKGV4YW1wbGU6ICcvd2luZG93Lycgd2FzIHRyYW5zbGF0ZWQgdG8gJ1dJTkRPV3MnKS4KLQotCSogW21pc2NlbXUvaW50MjEuY10KLQlGdW5jdGlvbiBDaGFuZ2VEaXIoKSBleHRyYWN0IHBvc3NpYmxlIGRyaXZlIGJlZm9yZSBET1NfQ2hhbmdlRGlyKCkuCi0KLQkqIFtsb2FkZXIvbGlicmFyeS5jXSAgW2xvYWRlci93aW5lLmNdCi0JUGxheWluZyBhcm91bmQgbW92aW5nIGZ1bmN0aW9uIEdldFByb2NBZGRyZXNzKCkgYW5kIHB1dCBzb21lIGNvZGUgaW4uCi0KLU1vbiBBcHIgIDQgMjE6Mzk6MDcgMTk5NCAgQWxleGFuZHJlIEp1bGxpYXJkIChqdWxsaWFyZEBsYW1pc3VuLmVwZmwuY2gpCi0KLQkqIFttaXNjL21haW4uY10KLQlCZXR0ZXIgZXhwbGFuYXRpb24gb2YgY29tbWFuZC1saW5lIG9wdGlvbnMuCi0KLQkqIFtvYmplY3RzL2RpYi5jXQotCUltcGxlbWVudGVkIFNldERJQml0c1RvRGV2aWNlKCkuCi0KLQkqIFt3aW5kb3dzL2RjLmNdCi0JQnVnIGZpeCBpbiBTZXREQ1N0YXRlKCkuCi0KLQkqIFt3aW5kb3dzL2V2ZW50LmNdCi0JUmVtb3ZlZCBXU19ESVNBQkxFRCBoYW5kbGluZyAobm93IGRvbmUgaW4gbWVzc2FnZS5jKS4KLQotCSogW3dpbmRvd3MvbWVzc2FnZS5jXQotCUFkZGVkIHNlbmRpbmcgYSBXTV9QQVJFTlROT1RJRlkgbWVzc2FnZSBpbiBNU0dfVHJhbnNsYXRlTW91c2VNc2coKS4KLQlVc2UgV2luZG93RnJvbVBvaW50KCkgdG8gZmluZCB0aGUgd2luZG93IGZvciBtb3VzZSBldmVudHMsIHRha2luZwotCWludG8gYWNjb3VudCBkaXNhYmxlZCB3aW5kb3dzLgotCi0JKiBbd2luZG93cy9wYWludGluZy5jXQotCUJ1ZyBmaXggaW4gQmVnaW5QYWludCgpIHRvIGFsbG93IGNhbGxpbmcgaXQgYXQgb3RoZXIgdGltZXMgdGhhbgotCW9uIFdNX1BBSU5UIChTb2xpdGFpcmUgbmVlZHMgaXQuLi4pCi0KLQkqIFt3aW5kb3dzL3dpbi5jXQotCUltcGxlbWVudGVkIEZpbmRXaW5kb3coKS4KLQlSZXdyaXR0ZW4gRW5hYmxlV2luZG93KCkgdG8gYmVoYXZlIG1vcmUgbGlrZSBXaW5kb3dzLgotCi0JKiBbd2luZG93cy93aW5wb3MuY10KLQlSZXdyaXR0ZW4gV2luZG93RnJvbVBvaW50KCkgdG8gYWxzbyBzZWFyY2ggY2hpbGQgd2luZG93cy4KLQotTW9uIEFwciAgNCAxNzozNjozMiAxOTk0ICBFcmlrIEJvcyAoZXJpa0B0cmFzaGNhbi5oYWNrdGljLm5sKQotCi0JKiBbaW5jbHVkZS9pbnQyMS5oXSAtPiBbbXNkb3MuaF0KLQlyZW5hbWVkLgotCi0JKiBbbWlzY2VtdS9pbnQxMC5oXSBbbWlzY2VtdS9pbnQyNS5oXSBbbWlzY2VtdS9pbnQyNi5oXSAKLQluZXcsIGFkZGVkIGZvciBpbnQgMTAsIDI1IGFuZCAyNi4KLQotCSogW21pc2NlbXUvaW9wb3J0cy5jXQotCW5ldywgYWRkZWQgdG8gYWxsb3cgd2luIGFwcHMgdG8gdXNlIGlvcG9ydHMuCi0KLQkqIFtsb2FkZXIvc2lnbmFsLmNdCi0JQWRkZWQgc3VwcG9ydCBmb3IgaW4sIGluYiwgb3V0LCBvdXRiIGluc3RydWN0aW9ucy4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotU3VuIE1hciAyNyAxMzo0MDoyNSAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQotCi0JKiBjb250cm9scy9tZW51LmMgKEluc2VydE1lbnUpOiBDaGFuZ2VkIHRvIHVzZSBGaW5kTWVudUl0ZW0oKS4KLQotU2F0IE1hciAyNiAyMToyMzo1NSAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQotCi0JKiBbd2luZG93cy9tZGkuY10KLQlXaW5kb3cgbGlzdCBwcm9wZXJseSB1cGRhdGVkLgotCi0JKiBbd2luZG93cy9tZXNzYWdlLmNdCi0JQ2FsbCBXSU5QT1NfQ2hpbGRBY3RpdmF0ZSgpIHdoZW4gbW91c2UgcHJlc3NlZC4KLQotCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCi0JVXNlIFdJTlBPU19Jc0FuQWN0aXZlV2luZG93KCkgaW5zdGVhZCBvZiBHZXRBY3RpdmVXaW5kb3coKSBpbgotCU5DX0hhbmRsZU5DUGFpbnQoKS4KLQotCSogW3dpbmRvd3Mvd2lucG9zLmNdCi0JQ3JlYXRlZCBmdW5jdGlvbnMgV0lOUE9TX0lzQW5BY3RpdmVXaW5kb3coKSBhbmQgV0lOUE9TX0FjdGl2YXRlQ2hpbGQoKQotCi1UaHUgTWFyIDI0IDE0OjQ5OjE3IDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCi0KLQkqIGNvbnRyb2xzL21lbnUuYyAoRGVsZXRlTWVudSk6IENoYW5nZWQgdG8gdXNlIEZpbmRNZW51SXRlbQotCShEZWxldGVNZW51KTogTWFueSBidWcgZml4ZXMuCi0KLQkqIFtjb250cm9scy9tZW51LmNdCi0JQ3JlYXRlZCBmdW5jdGlvbiBGaW5kTWVudUl0ZW0oKS4KLQotVGh1IE1hciAyNCAxNDoxNzoyNCAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQotCi0JKiBbd2luZG93cy93aW4uY10KLQlSZW1vdmVkIGluY29ycmVjdCBNREkgaGFuZGxpbmcgY29kZSBmcm9tIENyZWF0ZVdpbmRvd0V4KCkuCi0KLQkqIFtjb250cm9scy9tZW51LmNdCi0JTUZfU1RSSU5HIGl0ZW1zIG5lZWRlZCB0byBhbGxvY2F0ZSBhIHByaXZhdGUgY29weSBvZiBzdHJpbmcuCi0KLQkqIFtjb250cm9scy9tZW51LmNdCi0JRml4ZWQgYnVnZ3kgY2FsbHMgdG8gR2xvYmFsRnJlZSgpLgotCi0JKiBbbWVtb3J5L2dsb2JhbC5jXQotCUVsaW1pbmF0ZWQgc29tZSByZWR1bmRhbnQgY29kZSB3aXRoIGZ1bmN0aW9uIGNhbGwuCi0KLVdlZCBNYXIgMjMgMTk5NCBQZW50dGkgTW9pbGFuZW4gKHBlbnR0aS5tb2lsYW5lbkBudGMubm9raWEuY29tKQotCi0JKiBbd2luZG93cy90aW1lci5jXQotCXRpbWVyIGxpc3QgcG9pbnRlcnMgbG9vcGVkIGluIEluc2VydFRpbWVyCi0KLVR1ZSBNYXIgMjkgMTM6MzI6MDggTUVUIERTVCAxOTk0ICBqdWxsaWFyZEBkaS5lcGZsLmNoIChBbGV4YW5kcmUgSnVsbGlhcmQpCi0KLQkqIFttaXNjL2N1cnNvci5jXQotCUEgZmV3IGNoYW5nZXMgZm9yIGRlc2t0b3Agd2luZG93IHN1cHBvcnQuCi0KLQkqIFttaXNjL21haW4uY10KLQlBZGRlZCAtZGVwdGggb3B0aW9uLgotCi0JKiBbbWlzYy9yZWN0LmNdCi0JWWV0IGFub3RoZXIgYnVnIGZpeCBpbiBTdWJ0cmFjdFJlY3QoKS4KLQotCSogW29iamVjdHMvYml0bWFwLmNdCi0JQ2hhbmdlcyB0byB1c2Ugb25seSBvbmUgZGVwdGggKHNwZWNpZmllZCB3aXRoIC1kZXB0aCkKLQlmb3IgY29sb3IgYml0bWFwcy4KLQotCSogW29iamVjdHMvYnJ1c2guY10KLQlBZGRlZCBzdXBwb3J0IGZvciBkaXRoZXJlZCBzb2xpZCBicnVzaGVzLgotCi0JKiBbb2JqZWN0cy9jb2xvci5jXQotCVVzZSB0aGUgc2FtZSAyMCBzeXN0ZW0gY29sb3JzIGFzIGluIFdpbmRvd3MuCi0JU3lzdGVtIHBhbGV0dGUgaW5pdGlhbGlzYXRpb24gbm93IGRvbmUgaW4gQ09MT1JfSW5pdFBhbGV0dGUoKS4KLQlBZGRlZCBzdXBwb3J0IGZvciBhIGNvbG9yIG1hcHBpbmcgdGFibGUgdG8gbWFwIGxvZ2ljYWwgY29sb3IKLQlpbmRleGVzIHRvIFggY29sb3JtYXAgZW50cmllcy4KLQlJbXBsZW1lbnRlZCBHZXROZWFyZXN0Q29sb3IoKSBhbmQgUmVhbGl6ZURlZmF1bHRQYWxldHRlKCkuCi0KLQkqIFtvYmplY3RzL2RpYi5jXQotCUFkZGVkIHN1cHBvcnQgZm9yIGNvbG9yIG1hcHBpbmcgdGFibGUuCi0KLQkqIFtvYmplY3RzL2RpdGhlci5jXSAgKE5ldyBmaWxlKQotCUltcGxlbWVudGVkIHNvbGlkIGNvbG9yIGRpdGhlcmluZy4KLQotCSogW29iamVjdHMvcGFsZXR0ZS5jXQotCUltcGxlbWVudGVkIEdldFN5c3RlbVBhbGV0dGVFbnRyaWVzKCkgYW5kIFNlbGVjdFBhbGV0dGUoKS4KLQotCSogW3dpbmRvd3MvY2xhc3MuY10KLQlNYWtlIGEgY29weSBvZiB0aGUgbWVudSBuYW1lIGluIFJlZ2lzdGVyQ2xhc3MoKS4KLQotCSogW3dpbmRvd3MvZGMuY10KLQlGaXhlZCBkZXZpY2UgY2FwcyB3aGVuIHVzaW5nIGEgZGVza3RvcCB3aW5kb3cuCi0JQWRkZWQgc3VwcG9ydCBmb3IgdGhlIGNvbG9yIG1hcHBpbmcgdGFibGUgaW4gRENzLgotCi0JKiBbd2luZG93cy9ldmVudC5jXQotCUFkZGVkIENvbmZpZ3VyZU5vdGlmeSBoYW5kbGVyIG9uIGRlc2t0b3Agd2luZG93LgotCi0JKiBbd2luZG93cy9tZXNzYWdlLmNdCi0JUmVtb3ZlZCBjYWxsIHRvIFhUcmFuc2xhdGVDb29yZGluYXRlcygpIG9uIGV2ZXJ5IG1vdXNlIG1vdGlvbgotCU5ldyBmdW5jdGlvbiBNU0dfU3luY2hyb25pemUoKSB0byBzeW5jaHJvbml6ZSB3aXRoIHRoZSBYIHNlcnZlci4KLQotCSogW3dpbmRvd3Mvc3lzY29sb3IuY10KLQlSZXdyaXR0ZW4gU1lTQ09MT1JfSW5pdCgpIHRvIHJlYWQgdGhlIHN5c3RlbSBjb2xvcnMgZnJvbSBXSU4uSU5JLgotCi0JKiBbd2luZG93cy93aW5wb3MuY10KLQlBZGRlZCBzeW5jaHJvbml6YXRpb24gb24gd2luZG93IG1hcHBpbmcuIFNvbHZlcyB0aGUgZG91YmxlIHJlZHJhdwotCXByb2JsZW0gd2hlbiBzdGFydGluZyBTb2xpdGFpcmUuCi0KLU1hciAyNywgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQotCi0JKiBbY29udHJvbC9tZW51LmNdCSogW3dpbmRvd3MvZGVmd25kLmNdCi0JTWFrZSBrZXlib2FyZCBuYXZpZ2F0aW9uIHdvcmtpbmcgd2l0aCBtZW51YmFyLAotCWJ1dCB0ZW1wb3JhcmVseSBpbnNlcnRlZCBhIGJ1ZyBpbiBtZW51YmFyIG1vdXNlIGhhbmRsaW5nIC4uLiA6LSgoCi0JKGl0IHdpbGwgYmUgZml4IG5leHQgd2VlayAhKQotCi0JKiBbd2luZG93cy9kZWZ3bmQuY10KLQlDb25uZWN0IFZLX01FTlUgdG8gbWVudWJhciBuYXZpZ2F0aW9uLgotCi0JKiBbbG9hZGVyL2xpYnJhcnkuY10KLQlHZXRNb2R1bGVIYW5kbGUoKSByZXR1cm4gJ2ZpY3RpdmUgMHhGMDAwKyBoYW5kbGVzJyBmb3IgYnVpbHQtaW4gRExMcy4KLQotU3VuIE1hciAyMCAyMjozMjoxMyAxOTk0IEVyaWsgQm9zIChlcmlrQHRyYXNoY2FuLmhhY2t0aWMubmwpCi0KLQkqIFttaXNjL21haW4uY10KLQlBZGRlZCBDb3B5KCkuIEFkZGVkIGEgY2hlY2sgZm9yIGAtaCcgdG8gc2hvdyB1c2FnZS4KLQotCSogW21pc2MvZG9zX2ZzLmNdCi0JRml4ZWQgYnVnIGluIEZpbmRGaWxlKCksIHRvIGxvYWQgZGlyZWN0b3JpZXMgYXMgZGxscy4KLQotCSogW21pc2MvZG9zX2ZzLmNdCi0JRml4ZWQgVG9Vbml4KCkgYW5kIFRvRG9zKCkgYWdhaW4sIGFzIG15IHByZXZpb3VzIHBhdGNoCi0JZGlkbid0IG1ha2UgaXQuCi0KLQkqIFttaXNjL2Rvc19mcy5jXSBbbWlzY2VtdS9pbnQyMS5jXQotCUJ1ZyBmaXhlcywgc2hvdWxkIGJlIGFibGUgdG8gaGFuZGxlIGFsbCB3aW5maWxlIGFuZCBwcm9nbWFuIGludDIxCi0JcmVxdWVzdHMgbm93IGV4Y2VwdCBmb3IgYSBmZXcgc21hbGwgdGhpbmdzLgotCi1UdWUgTWFyIDI5IDA2OjI1OjU0IDE5OTQgIGNyd0BoYXJyaXMubWxiLnNlbWkuaGFycmlzLmNvbSAoQ2FybCBXaWxsaWFtcykKLQotCSogW21lbW9yeS9oZWFwLmNdCi0JSW1wbGVtZW50ZWQgR2V0RnJlZVN5c3RlbVJlc291cmNlcygpLgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1Nb24gTWFyIDIxIDE3OjMyOjI1IDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCi0KLQkqIGNvbnRyb2xzL21lbnUuYyAoR2V0U3ViTWVudSk6IEZ1bmN0aW9uIGRpZCBub3QgcmV0dXJuIGNvcnJlY3QgdmFsdWUKLQotCSogW3dpbmRvd3MvbWRpLmNdCi0JQmVnaW5uaW5ncyBvZiBtZW51IGhhbmRsaW5nLgotCi1UaHUgTWFyIDEwIDExOjMyOjA2IDE5OTQgIFN0ZWZhbiAoU0FNKSBNdWVuemVsICAobXVlbnplbEB0YXQucGh5c2lrLnVuaS10dWViaW5nZW4uZGUpCi0KLQkqIFtvYmplY3RzL2ZvbnQuY10KLQlpZiBmb250LndpZHRoIGVxdWFscyB6ZXJvIHVzZSBhc3Rlcml4IGluc3RlYWQuCi0KLU1vbiBNYXIgMjEgMTc6MjM6MzcgTUVUIDE5OTQgIGp1bGxpYXJkQGRpLmVwZmwuY2ggKEFsZXhhbmRyZSBKdWxsaWFyZCkKLQotCSogW29iamVjdHMvYml0bWFwLmNdCi0JUmV3cml0dGVuIGJpdG1hcCBjb2RlIHRvIHVzZSBleGNsdXNpdmVseSBYIHBpeG1hcHM7ICptdWNoKiBmYXN0ZXIuCi0KLQkqIFtvYmplY3RzL2JydXNoLmNdCi0JU29tZSBjaGFuZ2VzIHdpdGggcGF0dGVybiBicnVzaGVzIGJlY2F1c2Ugb2YgdGhlIG5ldyBiaXRtYXAgY29kZS4KLQotCSogW29iamVjdHMvY29sb3IuY10KLQlBZGRlZCBmdW5jdGlvbiBDT0xPUl9Ub1BoeXNpY2FsIGZvciBiZXR0ZXIgY29sb3IgbWFwcGluZy4KLQotCSogW29iamVjdHMvZGliLmNdCi0JSGVhdmlseSBvcHRpbWl6ZWQgU2V0RElCaXRzKCkuCi0KLQkqIFt3aW5kb3dzL2RjLmNdCi0JT3BpbWl6ZWQgU2V0RENTdGF0ZSgpIGFuZCBEQ19TZXR1cEdDKigpIGZ1bmN0aW9ucy4KLQlBZGRlZCBzdHViIGZvciBDcmVhdGVJQygpLgotCi1NYXIgMjAsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKLQotCSogW21pc2MvbWVzc2FnZS5jXQotCUNhbGwgU2V0Rm9jdXMoKSBhZnRlciBjbG9zaW5nIGJveCB0byBnaXZlIGJhY2sgZm9jdXMgdG8gcHJldmlvdXMgb3duZXIuCi0KLQkqIFttaXNjL2ZpbGVzLmNdCi0JU21hbGwgYnVnIGZpeCBpbiBHZXRUZW1wRmlsZW5hbWUoKSA6IHJlcGxhY2UgYSAnXCcgdG8gJ1xcJy4KLQotCSogW2NvbnRyb2wvc2Nyb2xsLmNdCi0JQ2FsbHMgdG8gQml0Qmx0KCkgcmVwbGFjZSBieSBTdHJldGNoQmx0KCkuCi0KLQkqIFtjb250cm9sL21lbnUuY10KLQlDYWxsIFNldEZvY3VzKCkgdG8gcHJldmlvdXMgb3duZXIgYWZ0ZXIgY2xvc2luZyBQb3B1cHMuCQotCUZpbGwgc3R1YiBEZWxldGVNZW51KCkuCi0KLQkqIFtjb250cm9sL2xpc3Rib3guY10KLQkqIFtjb250cm9sL2NvbWJvLmNdCi0JVXNlIFNldEZvY3VzKCkgaW4gV01fTEJVVFRPTkRPV04uCi0JQ2xvc2UgQ29tYm9Cb3ggTGlzdCB1cG9uIFdNX0tJTExGT0NVUy4KLQlFYXJseSBkZXZlbG9wbWVudCBvZiBXTV9NRUFTVVJFSVRFTSBtZWNhbmlzbS4KLQotCSogW3dpbmRvd3MvZGVmd25kLmNdCi0JRWFybHkgZGV2ZWxvcG1lbnQgb2YgV01fTUVBU1VSRUlURU0gbWVjYW5pc20uCi0KLVR1ZSBNYXIgMjIgMTA6NDQ6NTcgMTk5NCAgTWlndWVsIGRlIEljYXphICAobWlndWVsQHhvY2hpdGwpCi0KLQkqIFttaXNjL2F0b20uY10KLQlGaXhlZCBzaW50YXhpcyBwcm9ibGVtIHdoZW4gYnVpbGRpbmcgdGhlIGxpYnJhcnkuCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVR1ZSBNYXIgMTUgMTM6MTE6NTYgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKLQotCSogW2luY2x1ZGUvd2luZG93cy5oXQotCUFkZGVkIG1lc3NhZ2UgdHlwZXMgYW5kIHN0cnVjdHVyZXMgZm9yIE1ESQotCi0JKiBbaW5jbHVkZS9tZGkuaF0KLQlDcmVhdGVkIGludGVybmFsIHN0cnVjdHVyZXMgZm9yIGhhbmRsaW5nIE1ESQotCi0JKiBbd2luZG93cy9tZGkuY10KLQlCZWdhbiBjcmVhdGluZyBNREkgc3VwcG9ydAotCi1UaHUgTWFyIDEwIDE2OjUxOjQ2IDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCi0KLQkqIFtsb2FkZXIvd2luZS5jXSBbaW5jbHVkZS93aW5lLmhdCi0JQWRkZWQgbmV3IGZpZWxkIHRvICJzdHJ1Y3Qgd19maWxlcyIgdG8gaG9sZCB0aGUgIm5hbWUgdGFibGUiCi0JcmVzb3VyY2UgZm9yIFdpbmRvd3MgMy4wIHByb2dyYW1zCi0KLQkqIFtsb2FkZXIvcmVzb3VyY2UuY10KLQlBZGRlZCBjb2RlIHRvIGhhbmRsZSBwcm9ncmFtcyB3aXRoIGEgIm5hbWUgdGFibGUiIHJlc291cmNlLgotCUxvYWRSZXNvdXJjZUJ5TmFtZSgpIG1vZGlmaWVkIHRvIGNoZWNrIGZvciB0aGUgZXhpc3RlbmNlIG9mCi0JdGhpcyByZXNvdXJjZS4KLQotTW9uIE1hciAxNCAyMjozMTo0MiBNRVQgMTk5NCAganVsbGlhcmRAZGkuZXBmbC5jaCAoQWxleGFuZHJlIEp1bGxpYXJkKQotCi0JKiBbb2JqZWN0cy9jb2xvci5jXQotCUFkZGVkIGluc3RhbGxpbmcgdGhlIHByaXZhdGUgY29sb3JtYXAgb24gdGhlIGRlc2t0b3Agd2luZG93LgotCi0JKiBbd2luZG93cy9ldmVudC5jXQotCUNsZWFuZWQgdXAgZm9jdXMgZXZlbnQgaGFuZGxpbmcgKHNlZSBmb2N1cy5jKS4KLQlVc2UgR2V0Rm9jdXMoKSB0byBkaXJlY3Qga2V5IGV2ZW50cyB0byB0aGUgY29ycmVjdCB3aW5kb3cuCi0KLQkqIFt3aW5kb3dzL2ZvY3VzLmNdCi0JUmV3cml0dGVuIFNldEZvY3VzKCkgdG86Ci0JLSBvbmx5IHNldCBYIGZvY3VzIG9uIHRvcC1sZXZlbCB3aW5kb3dzCi0JLSBzZW5kIFdNX1NFVEZPQ1VTIGFuZCBXTV9LSUxMRk9DVVMgbWVzc2FnZXMgKHdhcyBkb25lIGluIGV2ZW50LmMpCi0JLSBwcmV2ZW50IHNldHRpbmcgZm9jdXMgdG8gZGlzYWJsZWQgd2luZG93cwotCS0gaW5zdGFsbCBwcml2YXRlIGNvbG9ybWFwIHNvIC1wcml2YXRlbWFwIG9wdGlvbiB3b3JrcyBhZ2FpbgotCi0JKiBbd2luZG93cy9tZXNzYWdlLmNdIFt3aW5kb3dzL3RpbWVyLmNdCi0JQ2hhbmdlZCB0aW1lciBtYW5hZ2VtZW50IHRvIG5vIGxvbmdlciB1c2UgUG9zdE1lc3NhZ2UoKSwgYnV0Ci0JdG8gZ2VuZXJhdGUgdGltZXIgbWVzc2FnZXMgb24gdGhlIGZseS4gQWxzbyBmaXhlZCBhIHJlbGF0ZWQgYnVnCi0JaW4gR2V0TWVzc2FnZSgpIHdoaWNoIGNvdWxkIGNhdXNlIGJ1c3ktd2FpdGluZy4KLQotCSogW3dpbmRvd3Mvd2luLmNdCi0JT25seSBzZWxlY3QgZm9jdXMgZXZlbnRzIG9uIHRvcC1sZXZlbCB3aW5kb3dzLgotCi0JKiBbd2luZG93cy93aW5wb3MuY10KLQlBZGRlZCBzb21lIHNhbml0eSBjaGVja3MgZm9yIGRlc2t0b3Agd2luZG93LgotCi1GcmkgTWFyICA0IDIwOjQyOjAxIDE5OTQgIEVyaWsgQm9zIChlcmlrQHRyYXNoY2FuLmhhY2t0aWMubmwpCi0KLQkqIFttaXNjL2Rvc19mcy5jXQotCWJ1ZyBmaXhlcyBpbiBUb1VuaXgoKSwgV2luSW5pRmlsZU5hbWUoKSwgR2V0VW5peEZpbGVOYW1lKCkuIAotCVN1cHBvcnQgZm9yIHRpbGRlIHN5bWJvbCBhZGRlZCBmb3Igcm9vdGRpcmVjdG9yaWVzIGluIFtkcml2ZXNdCi0Jc2VjdGlvbiBvZiB3aW5lJ3MgY29uZmlnZmlsZS4KLQotCSogW21pc2MvZmlsZS5jXQotCWhyZWFkKCksIGh3cml0ZSgpIGFkZGVkLgotCi0JKiBbbWlzYy9tYWluLmNdCi0JaG1lbWNweSgpIGFkZGVkLgotCi0JKiBbaWYxNjMyL3N0cmVzcy5zcGVjXSBbaW5jbHVkZS9zdHJlc3MuaF0gW21pc2Mvc3RyZXNzLmNdCi0JQWRkZWQgU1RSRVNTLkRMTCwgYW4gdXNlbGVzcyBkbGwgdXNlZCB0byBzdHJlc3MgYSB3aW5kb3dzIHN5c3RlbS4KLQotCSogWyovKl0KLQlBZGRlZCBtaXNzaW5nICNpbmNsdWRlcywgZml4ZWQgcHJvdG90eXBlcyBmb3IgcHJvdG90eXBlIGNoZWNraW5nLgotCi0JKiBbaW5jbHVkZS9wcm90b3R5cGVzLmhdCi0KLQlBZGRlZCBwcm90b3R5cGVzIGZvciBsb2FkZXIvKmMsIGlmMTYzMi8qYy4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVHVlIE1hciAgOCAwOTo1NDozNCAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQotCi0JKiBbQ29uZmlndXJlXQotCUFkZGVkIHJlbWluZGVyIHRvIHNldCBXSU5FUEFUSCwgaWYgaXQgaXMgbm90IHNldC4KLQotCSogW0ltYWtlZmlsZV0KLQlSZW1vdmVkICNlbGlmJ3MKLQotCSogW2NvbnRyb2xzL2J1dHRvbi5jXQotCUFkZGVkIEJOX0NMSUNLRUQgbm90aWZpY2F0aW9uIGZvciBvd25lci1kcmF3IGJ1dHRvbnMuCi0KLQkqIFtpZjE2MzIva2VybmVsLnNwZWNdIFttZW1vcnkvaGVhcC5jXQotCUNoYW5nZWQgTG9jYWwqIGZ1bmN0aW9ucyB0byBXSU4xNl9Mb2NhbCogdG8gcHJldmVudCB1bmNvbmNpb3VzIHVzZQotCW9mIHRoZXNlIGZ1bmN0aW9ucy4KLQotCSogW2lmMTYzMi9yZWxheS5jXQotCVB1c2ggb2xkIFN0YWNrMTZGcmFtZSBvbiBzdGFjayBiZWZvcmUgc2V0dGluZy4KLQotCSogW2luY2x1ZGUvYXRvbS5oXSBbbWlzYy9hdG9tLmNdIFtpbmNsdWRlL2hlYXAuaF0gW21lbW9yeS9sb2NhbC5jXQotCUFkZGVkIG11bHRpcGxlIGxvY2FsIGhlYXAgaGFuZGxpbmcgaW4gQXRvbSogZnVuY3Rpb25zLgotCi0JKiBbaW5jbHVkZS9yZWdmdW5jLmhdIFttaXNjZW11L2ludDIxLmNdCi0JUmV3cm90ZSBET1MzQ2FsbCgpIHVzZSBjb250ZXh0IGZyYW1lIHRoYXQgaXMgYWxyZWFkeSBvbiB0aGUgc3RhY2suCi0KLQkqIFttaXNjL3Byb2ZpbGUuY10KLQlGaXhlZCB0byBhbGxvdyBsZWFkaW5nICI7IiB0byBtYXJrIGNvbW1lbnRzLgotCi0JKiBbbWlzYy9zcHkuY10KLQlGaXhlZCBidWdzIGFuZCBhZGRlZCBzdXBwb3J0IGZvciAiaW5jbHVkZSIgYW5kICJleGNsdWRlIiBmaWx0ZXJzLgotCi0JKiBbbWlzYy91c2VyLmNdCi0JUmVhcnJhbmdlZCBjYWxscyBpbiBJbml0QXBwKCkuCi0KLQkqIFttaXNjL2ZvbnQuY10KLQlGaXhlZCBmb250IGhhbmRsaW5nIHRvIGNyZWF0ZSBzeXN0ZW0gZm9udHMsIGlmIHRoZXkgYXJlIHVzZWQuCi0KLQkqIFt3aW5kb3dzL2RjLmNdCi0JSWYgdGV4dCBkcmF3biBvbiB3aW5kb3cgd2l0aCBubyBmb250IHNwZWNpZmllZCwgdGhlbiBkZWZhdWx0IHRoZQotCWZvbnQgdG8gdGhlIHN5c3RlbSBmb250LgotCi1Nb24gTWFyICA3IDIwOjMyOjA5IE1FVCAxOTk0ICBqdWxsaWFyZEBkaS5lcGZsLmNoIChBbGV4YW5kcmUgSnVsbGlhcmQpCi0KLQkqIFtjb250cm9scy9kZXNrdG9wLmNdCi0JQWRkZWQgaGFuZGxpbmcgb2YgV01fTkNDUkVBVEUgYW5kIFdNX0VSQVNFQktHTkQgZnVuY3Rpb25zLgotCUltcGxlbWVudGVkIFNldERlc2tQYXR0ZXJuKCkuCi0KLQkqIFttaXNjL21haW4uY10KLQlBZGRlZCAtZGVza3RvcCBvcHRpb24gdG8gZ2V0IGEgbGFyZ2UgZGVza3RvcCB3aW5kb3cgd2l0aAotCWV2ZXJ5dGhpbmcgaW5zaWRlIGl0LgotCUFkZGVkIC1uYW1lIG9wdGlvbi4KLQotCSogW21pc2MvcmVjdC5jXQotCUJ1ZyBmaXggaW4gU3VidHJhY3RSZWN0KCkuCi0KLQkqIFtvYmplY3RzLyouY10KLQlSZXBsYWNlZCB0aGUgRGVmYXVsdFJvb3RXaW5kb3coKSBtYWNybyBieSB0aGUgcm9vdFdpbmRvdyB2YXJpYWJsZS4KLQotCSogW3dpbmRvd3MvZXZlbnQuY10gW3dpbmRvd3MvbWVzc2FnZS5jXQotCSAgW3dpbmRvd3Mvbm9uY2xpZW50LmNdIFt3aW5kb3dzL3dpbi5jXQotCUEgZmV3IGNoYW5nZXMgdG8gYWNjb21vZGF0ZSB0aGUgbmV3IGRlc2t0b3Agd2luZG93LgotCi0gVHVlIE1hciAgOCAxMToxMzowMyAxOTk0ICBNaWd1ZWwgZGUgSWNhemEgIChtaWd1ZWxAeG9jaGl0bC5udWNsZWN1LnVuYW0ubXgpCi0gCi0gCSogW3Rvb2xraXQvYXJjaC5jXSAtLU5ldyBmaWxlLS0gCi0gCVJvdXRpbmVzIGZvciBjb252ZXJ0aW5nIGxpdHRsZSBlbmRpYW4gZGF0YSBzdHJ1Y3R1cmVzIHRvCi0gCWJpZy1lbmRpYW4gZGF0YSBzdHJ1Y3R1cmVzLCBjdXJyZW50bHkgb25seSBCSVRNQVAgc3RydWN0dXJlcyBhcmUgCi0gCWNvbnZlcnRlZC4KLSAKLSAJKiBbbWlzYy9hdG9tLmNdCi0gCVdoZW4gdXNlZCBhcyBwYXJ0IG9mIHRoZSBXaW5lTGliLCB0aGUgY29kZSBpcyBtdWNoIHNpbXBsZXIuCi0gCURvZXNuJ3QgZGVwZW5kIG9uIGFsaWduZW1lbnQuCi0gCi0gCSogW2xvYWRlci93aW5lLmNdCi0gCUlmZGVmZWQgRW11bGF0b3IgZGVwZW5kZW50IGNvZGUgaWYgY29tcGlsaW5nIFdpbmVMaWIuCi0gCi0gCSogW2xvYWRlci9yZXNvdXJjZS5jXQotIAlNb3ZlZCBtaXNjL3Jlc291cmNlLmMgdG8gbG9hZGVyL3Jlc291cmNlLmMuCi0gCi0gCSogW2xvYWRlci9kdW1wLmMsbGR0LmMsbGR0bGliLmMsbGlicmFyeSxjLHNlbGVjdG9yLmMsc2lnbmFsLmNdCi0gCUlmZGVmZWQgd2hvbGUgY29kZSBpZiBjb21waWxpbmcgV0lORUxJQi4KLSAKLSAJKiBbaW5jbHVkZS93aW5zb2NrLmhdCi0gCUFkZGVkIGNvbXBpbGF0aW9uIGRlZmluZSB0byBhbGxvdyBjb21waWxhdGlvbiBvbiBTdW5PUy4KLSAKLSAJKiBbaW5jbHVkZS93aW5lLmhdCi0gCVJlbW92ZWQgbG9hZF90eXBlaW5mbyBhbmQgbG9hZF9uYW1laW5mbyBwcm90b3R5cGVzLCB0aGV5IGJlbG9uZwotIAl0byBuZWV4ZS5oCi0gCi0gCSogW2luY2x1ZGUvbmVleGUuaF0KLSAJQWRkZWQgbG9hZF90eXBlaW5mbyBhbmQgbG9hZF9uYW1laW5mbyBwcm90b3R5cGVzLgotIAotIAkqIFtpbmNsdWRlL2FyY2guaF0KLSAJRml4ZWQgc29tZSBidWdzIGluIHRoZSBjb252ZXJzaW9uIHJvdXRpbmVzLgotIAlBZGRlZCBtYWNyb3MgZm9yIEJpdG1hcCBsb2FkaW5nLgotCi1UdWUgTWFyICA4IDEyOjUyOjA1IDE5OTQgIGNyd0BtYW5pYWMubWxiLnNlbWkuaGFycmlzLmNvbSAoQ2FybCBXaWxsaWFtcykKLSAJCi0JKiBbaWYxNjMyL2tlcm5lbC5zcGVjXSBbbWVtb3J5L2dsb2JhbC5jXQotCUltcGxlbWVudGVkIEdldEZyZWVTcGFjZSgpCi0KLQkqIFtpZjE2MzIvdXNlci5zcGVjXSBbbG9hZGVyL3Jlc291cmNlLmNdCi0JSW1wbGVtZW50ZWQgQ3JlYXRlSWNvbigpCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVR1ZSBNYXIgIDEgMTE6MzA6MjEgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKLQotCSogW0NvbmZpZ3VyZV0gWyovSW1ha2VmaWxlXQotCUNyZWF0ZWQgY29uZmlndXJlIHNjcmlwdCB0byBoYW5kbGUgZGlmZmVyZW50IHR5cGVzIG9mIFdpbmUgYnVpbGRzLgotCi0JKiBbQ29uZmlndXJlXSBbdG9vbHMvYnVpbGQuY10gW2lmMTYzMi9JbWFrZWZpbGVdIFtXaW5lLnRtcGxdCi0JQWRkZWQgYWJpbGl0eSB0byBjb21waWxlIFdpbmUgb24gc3lzdGVtcyB3aXRoIDE0LWNoYXIgZmlsZW5hbWUgbGltaXQuCi0KLQkqIFtpZjE2MzIvcmVsYXkuY10gW2luY2x1ZGUvb3B0aW9ucy5oXSBbbWlzYy9tYWluLmNdCi0JQWRkZWQgLXJlbGF5ZGJnIG9wdGlvbiB0byBjb21tYW5kIGxpbmUgaWYgREVCVUdfUkVMQVkgaXMgZGVmaW5lZC4KLQotCSogW2xvYWRlci9zZWxlY3Rvci5jXQotCUZpeGVkIGJ1ZyBpbiBHZXRFbnRyeURMTE5hbWUoKSB0aGF0IGNhdXNlZCBXaW5lIHRvIHNlZyBmYXVsdC4KLQotCSogW21lbW9yeS9oZWFwLmNdCi0JRml4ZWQgTG9jYWxJbml0KCkgdG8gd29yayBjb3JyZWN0bHkuCi0KLQkqIFttaXNjL3VzZXIuY10KLQlBZGRlZCBjb2RlIHRvIGNhbGwgbG9hZGVkIERMTHMnIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLgotCi1UdWUgTWFyICAxIDAxOjAxOjE3IE1FVCAxOTk0ICBqdWxsaWFyZEBkaS5lcGZsLmNoIChBbGV4YW5kcmUgSnVsbGlhcmQpCi0KLQkqIFt3aW5kb3dzL2RjZS5jXQotCUFkZGVkIGNsaXBwaW5nIG9mIGNoaWxkIHdpbmRvd3MgYnkgdGhlaXIgcGFyZW50J3MgY2xpZW50IGFyZWEuCi0KLQkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQotCUJ1ZyBmaXggaW4gTkNfRG9OQ1BhaW50KCkuCi0KLQkqIFt3aW5kb3dzL3BhaW50aW5nLmNdCi0JQnVnIGZpeCBpbiBSZWRyYXdXaW5kb3coKS4KLQotRmViIDI3LCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCi0KLQkqIFttZW0vYXRvbS5jXQotCUJ1ZyBmaXggYWdhaW4gaW4gQVRPTV9EZWxldGVBdG9tKCkgOiAKLQkJY2hhbmdlIExvY2FsRnJlZSgpIGJ5IFVTRVJfSEVBUF9GUkVFKCkuCi0JKFByZXZpb3VzIHBhdGNoIGRvbmUgRmViIDEzdGggaGFkIGJlZW4gbG9zdCkKLQotCSogW2NvbnRyb2xzL3Njcm9sbC5jXQotCU1vdmUgYml0bWFwcyBsb2FkaW5nIGluIEFsbG9jU2Nyb2xsQmFyKCkgaW5zdGVhZCBvZiBpbiBXTV9DUkVBVEUuCi0KLQkqIFt3aW5kb3dzL2NsYXNzLmNdIChzb3JyeSBBbGV4IC4uLikKLQlUaGVyZSB3YXMgbm8gYnVnIHRoZXJlICJpbiBSZWdpc3RlckNsYXNzKCkgOiAKLSAgICAgICAgICAgICAgICBXTkRDTEFTUy0+bHBzekNsYXNzTmFtZSB3YXMgcmVzZXQgdG8gTlVMTC4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXgotCi0JKiBbbWlzYy9jbGlwYm9hcmQuY10JLS0tIE5ldyBGaWxlIC0tLQotCU5ldyBmdW5jdGlvbiBFbnVtQ2xpcGJvYXJkRm9ybWF0cygpLgotCU5ldyBmdW5jdGlvbiBPcGVuQ2xpcGJvYXJkKCkuCi0JTmV3IGZ1bmN0aW9uIENsb3NlQ2xpcGJvYXJkKCkuCi0JTmV3IGZ1bmN0aW9uIEVtcHR5Q2xpcGJvYXJkKCkuCi0JTmV3IGZ1bmN0aW9uIEdldENsaXBib2FyZE93bmVyKCkuCi0JTmV3IGZ1bmN0aW9uIEdldENsaXBib2FyZFZpZXdlcigpLgotCU5ldyBmdW5jdGlvbiBDb3VudENsaXBib2FyZEZvcm1hdHMoKS4KLQlOZXcgZnVuY3Rpb24gSXNDbGlwYm9hcmRGb3JtYXRBdmFpbGFibGUoKS4KLQlOZXcgZnVuY3Rpb24gT3BlbkNsaXBib2FyZCgpLgotCU5ldyBmdW5jdGlvbiBHZXRDbGlwYm9hcmREYXRhKCkuCi0JTmV3IGZ1bmN0aW9uIFNldENsaXBib2FyZFZpZXdlcigpLgotCU5ldyBmdW5jdGlvbiBFbnVtQ2xpcGJvYXJkRm9ybWF0cygpLgotCU5ldyBmdW5jdGlvbiBSZWdpc3RlckNsaXBib2FyZEZvcm1hdCgpLgotCU5ldyBmdW5jdGlvbiBDaGFuZ2VDbGlwYm9hcmRDaGFpbigpLgotCU5ldyBmdW5jdGlvbiBTZXRDbGlwYm9hcmREYXRhKCkuCi0JTmV3IGZ1bmN0aW9uIEdldE9wZW5DbGlwYm9hcmRXaW5kb3coKS4KLQlOZXcgZnVuY3Rpb24gR2V0UHJpb3JpdHlDbGlwYm9hcmRGb3JtYXQoKS4KLQlOZXcgZnVuY3Rpb24gR2V0Q2xpcGJvYXJkRm9ybWF0TmFtZSgpLgotCi1UdWUgTWFyICAxIDIwOjE1OjQ1IDE5OTQgIEVyaWsgQm9zIDxlcmlrQHRyYXNoY2FuLmhhY2t0aWMubmw+Ci0KLQkqIFttaXNjL2NvbW0uY10KLQlidWdmaXggaW4gT3BlbkNvbW0oKS4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVHVlIEZlYiAyMiAxODowNDowMiAxOTk0ICBKZWZmcmV5IEhzdSA8aHN1QGZyZWVmYWxsLmNkcm9tLmNvbT4KLQotCSogW2luY2x1ZGUvd2luc29jay5oXQotCVRoZSBzb2NrcHJvdG8gc3RydWN0IGlzIGFscmVhZHkgZGVmaW5lZCBpbiA8c3lzL3NvY2tldC5oPgotCi0JKiBbbWlzYy93aW5zb2NrLmNdCi0JTmVlZCB0byBpbmNsdWRlIDxuZXRpbmV0L2luLmg+IGZvciBzdHJ1Y3QgaW4tYWRkci4KLQlVc2Ugc3lzX2Vycmxpc3RbXSBpbnN0ZWFkIG9mIHN0cmVycm9yW10uCi0KLQkqW3Rvb2xraXQvaGVhcC5jXQotCUFOU0kgQyBzcGVjaWZpZXMgdGhhdCB0aGUgbWFsbG9jIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCBpbiBzdGRsaWIuaCwKLQkgIHNvIHdlIGRvbid0IG5lZWQgdG8gaW5jbHVkZSBtYWxsb2MuaC4KLQotCSpbbG9hZGVyL2xkdGxpYi5jXQotCVByaW50IGluZm9ybWF0aXZlIGVycm9yIG1lc3NhZ2UgYWJvdXQgcHJvYmFibGUgY2F1c2Ugb2YgaTM4Nl9zZXRfbGR0KCkKLQkgIGZhaWx1cmUgYW5kIHRoZW4gZXhpdC4KLQotCSpbSW1ha2VmaWxlXQotCUZvciBzeXN0ZW1zIHRoYXQgZG9uJ3QgdXNlIGdtYWtlIGJ5IGRlZmF1bHQsIHNldCB0aGUgTUFLRSB2YXJpYWJsZQotCSAgdG8gZ21ha2UgYW5kIHByb3BhZ2F0ZSBpdCBvbiByZWN1cnNpdmUgbWFrZXMuCi0JVGFrZSBvdXQgLWxpMzg2IGZvciBGcmVlQlNEIHN5c3RlbXMgYW5kIGRlZmluZSBfX0ZyZWVCU0RfXyBzbyBXaW5lCi0JICBjYW4gYmUgYnVpbHQgd2l0aCB0aGUgRnJlZUJTRCAxLjAuMiBjb21waWxlci4KLQotVHVlIEZlYiAyMiAwMjo1MjoxOSBFU1QgMTk5NCAgICBqcmljaGFyZEBjcy51bWwuZWR1IChKb2huIFJpY2hhcmRzb24pCi0KLSAgICAgICAgKiBbb2JqZWN0cy9iaXRibHQuY10KLSAgICAgICAgQWRkZWQgaW4gdGhyZWUgZnVuY3Rpb25zIHRvIGRvIHN0cmV0Y2hpbmcgYW5kIGNvbXByZXNzaW9uCi0gICAgICAgIGZvciBXSElURU9OQkxBQ0ssIEJMQUNLT05XSElURSwgYW5kIGNvbG9yIGNvcGllcy4KLQotVHVlIEZlYiAyMiAxNTowMTozMSBFU1QgMTk5NCAgICBqcmljaGFyZEBjcy51bWwuZWR1IChKb2huIFJpY2hhcmRzb24pCi0KLSAgICAgICAgKiBbd2luZG93cy9ncmFwaGljcy5jXQotICAgICAgICBBZGRlZCBGbG9vZEZpbGwgYW5kIEZsb29kRmlsbF9yZWMuICBGbG9vZEZpbGxfcmVjIGlzIHByZXR0eQotICAgICAgICBpbmVmZmljZW50LCBidXQgc2hvdWxkIHN1ZmZpY2UgZm9yIG5vdy4KLQotICAgICAgICAqIFtpbmNsdWRlL3dpbmRvd3MuaF0KLSAgICAgICAgQ2hhbmdlZCB0aGUgeCx5IHBhcmFtYXRlcnMgZm9yIHRoZSBGbG9vZEZpbGwgcHJvdG90eXBlIAotICAgICAgICBmcm9tIGludHMgdG8gc2hvcnRzCi0KLVR1ZSBGZWIgMjIgMDA6NTg6MjggTUVUIDE5OTQgIGp1bGxpYXJkQGRpLmVwZmwuY2ggKEFsZXhhbmRyZSBKdWxsaWFyZCkKLQotCSogW3dpbmRvd3Mvd2lkZ2V0cy5jXQotCUFkZGVkIGRlc2t0b3Agd2luZG93IGNsYXNzLgotCi0JKiBbd2luZG93cy9wYWludGluZy5jXQotCUJ1ZyBmaXggaW4gUmVkcmF3V2luZG93KCkuCi0JSW1wbGVtZW50ZWQgRXhjbHVkZVVwZGF0ZVJnbigpLgotCi0JKiBbd2luZG93cy93aW4uY10gW3dpbmRvd3Mvd2lucG9zLmNdCi0JSW1wbGVtZW50ZWQgZGVza3RvcCB3aW5kb3cuCi0KLQkqIFtjb250cm9scy9kZXNrdG9wLmNdCi0JUHJlbGltaW5hcnkgZGVza3RvcCB3aW5kb3cgcHJvY2VkdXJlLgotCi1GZWIgMjAsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKLQotCSogW2NvbnRyb2xzL21lbnUuY10KLQlOZXcgZnVuY3Rpb24gTG9hZE1lbnVJbmRpcmVjdCgpLgotCU5ldyBmdW5jdGlvbiBHZXRNZW51Q2hlY2tNYXJrRGltZW5zaW9ucygpLgotCi0JKiBbaWYxNjMyL3VzZXIuc3BlY10KLQlFbnRyeSBmb3IgRGVmRGxnUHJvYygpLgotCi0JKiBbd2luZG93cy9jbGFzcy5jXQotCUZpeCBidWcgaW4gUmVnaXN0ZXJDbGFzcygpIDogCi0JCVdORENMQVNTLT5scHN6TWVudU5hbWUgd2FzIHJlc2V0IHRvIE5VTEwuCi0KLQkqIFt3aW5kb3dzL3dpbi5jXQotCUluIENyZWF0ZVdpbmRvd0V4KCksIGlmIGhNZW51ID09IDAgdGhlbiB1c2UgCi0JCXduZGNsYXNzLT5scHN6TWVudU5hbWUgdG8gbG9hZCBNZW51IGZyb20gcmVzb3VyY2U7Ci0KLU1vbiBGZWIgMjEgMjI6Mzg6MjggMTk5NCBFcmlrIEJvcyAoZXJpa0B0cmFzaGNhbi5oYWNrdGljLm5sKQotCi0JKiBbbG9hZGVyL2xpYnJhcnkuY10gW2xvYWRlci93aW5lLmNdCi0JRml4ZWQgcnVuaW5nIERMTCdzIGFzIG1haW4gZXhlY3V0YWJsZSBwcm9ibGVtLgotCi0JKiBbbWlzYy9kb3NfZnMuY10KLQlBZGRlZCB3aWxkY2FyZCBzdXBwb3J0IGluIERPU19yZWFkZGlyKCkuCi0KLQkqIFttaXNjL3dpbnNvY2tldC5jXQotCUFkZGVkIHByb3BlciBlcnJvciBoYW5kbGluZyBvZiBCU0Qgd2luc29ja2V0IGZ1bmN0aW9ucy4KLQotCSogW21pc2NlbXUvaW50MjEuY10KLQlLRVJORUxfRE9TM0NhbGwgcmVuYW1lZCB0byBET1MzQ2FsbCBhbmQgbW9kaWZpZWQgdG8gdXNlIGRvX2ludDIxKCkuCi0KLQkqIFttYWluL21haW4uY10KLQlBZGRlZCBmdW5jdGlvbnMgZm9yIEdldFZlcnNpb24sIEdldFdpbkZsYWdzIGFuZCBHZXRUaW1lclJlc29sdXRpb24KLQlmb3IgbGlid2luZS5hLCBTeXN0ZW1QYXJhbWV0ZXJzSW5mbygpIHBhcnRseSBpbXBsZW1lbnRlZC4KLQotVHVlIEZlYiAyMiAxOTowMDowMiAxOTk0ICBNaWd1ZWwgZGUgSWNhemEgIChtaWd1ZWxAeG9jaGl0bC5udWNsZWN1LnVuYW0ubXgpCi0KLQkqIFt0b29sa2l0L3dpbm1haW4uY10KLQlBZGRlZCBfV2luTWFpbiBmdW5jdGlvbi4gU2V0dXBzIHRoZSBsaWJyYXJ5IChjYWxscyBVU0VSX0luaXRBcHApLgotCi0JKiBbdG9vbGtpdC9zdXAuY10KLQlBZGRlZCBsb2FkX216X2hlYWRlciwgbG9hZF9uZV9oZWFkZXIsIGxvYWRfdHlwZV9pbmZvIGFuZAotCWxvYWRfbmFtZV9pbmZvIGZ1bmN0aW9ucy4KLQotCSogW3Rvb2xraXQvaGVhcC5jXSAKLQlDb2RlIGNsZWFudXAuIAotCi0JKiBbbWlzYy91c2VyLmNdCi0JTW92ZWQgZnJvbSBsb2FkZXIvbWlzYy5jLiBJIGhvcGUgdG8gcHV0IGJhY2sgYWxsIHRoZSBsb2FkZXIKLQlmdW5jdGlvbnMgaW4gdGhlIH5sb2FkZXIgc3ViZGlyZWN0b3J5IGluIHRoZSBmdXR1cmUuIENVcnJlbnRseSBpcwotCW5lZWRlZCBzaW5jZSBpdCBoYXMgVVNFUl9Jbml0QXBwLgotCi0JKiBbbWlzYy9yZXNvdXJjZS5jXQotCVNpbmNlIFdpbmVMaWIgd2lsbCBwcm9iYWJseSBuZWVkIERMTHMgKGN1cnJlbnRseSBpdCBuZWVkcwotCVN5c3Jlcy5kbGwpLiBXaW5lTGliIHdpbGwgYmUgdXNpbmcgbXVjaCBjb2RlIG9mIHRoZSBsb2FkZXIgYWdhaW4uCi0JU28gSSByZW1vdmVkIHNvbWUgaWZkZWZzIHRoYXQgd2VyZSB1c2VkIGJ5IFdpbmVMaWIuCi0KLQlBZGRlZCBsb2FkX3R5cGVpbmZvIGFuZCBsb2FkX25hbWVpbmZvIChhbmQgdGhlIGNvcnJlc3BvbmRpbmcKLQlmdW5jdGlvbnMgaW4gW3Rvb2xraXQvc3VwLmNdCi0KLQlBZGRlZCBpbnRlZ2VyIGNvbnZlcnRpb24gZnVuY3Rpb25zIGluIHRoZSBuZWVkZWQgcGxhY2VzLgotCi0JQWRkZWQgdmVyeSB1Z2x5IHBhdGNoIChpbmNsdWRlcyB3aW5lLmMpLiBJbiB0aGUgbmV4dCByZWxlYXNlIEkKLQlwbGFuIHRvIG1vdmUgYmFjayBhbGwgdGhlIGxvYWRlciByb3V0aW5lcyB0byB+L2xvYWRlci4gSW4gdGhlCi0JbWVhbnRpbWUgSSBuZWVkZWQgdGhpcyBwYXRjaC4gSXQgZG9lc24ndCBhZmZlY3QgYW55IG9mIHRoZQotCWVtdWxhdG9yIGNvZGUgKGl0cyBpZmRlZmVkIGZvciBXaW5lTGliKS4KLQotCSogW21pc2MvbWFpbi5jXQotCUNsZWFuZWQgdXAgY2FsbCB0byBXaW5NYWluIChub3cgdXNlcyBbdG9vbGtpdC93aW5tYWluLmNdCi0JSWZkZWZlZCBhcmd1bWVudCBudW1iZXIgY2hlY2tpbmcgd2hlbiBjb21waWxpbmcgdGhlIGxpYnJhcnkuCi0KLQkqIFtsb2FkZXIvd2luZS5jXQotCU1vZGlmaWVkIHRvIHVzZSBsb2FkXyhtenxuZSlfaGVhZGVyIGluc3RlYWQgb2YgZG9pbmcgYSBkaXJlY3QKLQlyZWFkLiAgV2hlbiBjb21waWxpbmcgdGhlIGVtdWxhdG9yIGl0IHN0aWxsIHVzZXMgdGhlIGRpcmVjdCByZWFkCi0JZm9yIHBlcmZvcm1hbmNlLiAKLQotCSogW2luY2x1ZGUvd2luZS5oXQotCVByb3RvdHlwZXMgZm9yIGxvYWRpbmcgcm91dGluZXMuCi0KLQkqIFtpbmNsdWRlL2NsYXNzLmhdCi0JQWRkZWQgV0lORV9QQUNLRUQgbWFjcm8gaW5zdGVhZCBvZiBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkKLQotCSogW2luY2x1ZGUvYXJjaC5oXQotCU1hY3JvcyBmb3IgY29udmVydGluZyBpbnRlZ2VycyAoTGl0dGxlIGVuZGlhbiB0byBiaWctZW5kaWFuKS4KLQlOZWVkZWQgaW4gdGhlIFN1biB0byBhbGxvdyBsb2FkaW5nIG9mIERMTCBmaWxlcy4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotTW9uIEZlYiAxNCAyMzo0ODowOSBNRVQgMTk5NCAganVsbGlhcmRAZGkuZXBmbC5jaCAoQWxleGFuZHJlIEp1bGxpYXJkKQotCi0JKiBbd2luZG93cy9jbGlwcGluZy5jXQotCU1vdmVkIGV2ZXJ5dGhpbmcgaW50byB3aW5kb3dzL3BhaW50aW5nLmMgYW5kIHJlbW92ZWQgdGhpcyBmaWxlLgotCi0JKiBbd2luZG93cy9tZXNzYWdlLmNdCi0JUmVtb3ZlZCBjYWxscyB0byBtZW1tb3ZlKCkgaW4gTVNHX1JlbW92ZU1zZygpLgotCi0JKiBbd2luZG93cy9ub25jbGllbnQuY10KLQlBZGRlZCBXTV9HRVRNSU5NQVhJTkZPIHN1cHBvcnQgZm9yIHdpbmRvdyByZXNpemluZy4KLQotCSogW3dpbmRvd3MvcGFpbnRpbmcuY10KLQlJbXBsZW1lbnRlZCBSZWRyYXdXaW5kb3coKS4KLQotCSogW3dpbmRvd3Mvc2Nyb2xsLmNdCi0JQnVnIGZpeCBpbiBTY3JvbGxXaW5kb3dFeCgpLgotCi0JKiBbd2luZG93cy93aW4uY10KLQlNb3ZlZCBVcGRhdGVXaW5kb3coKSB0byB3aW5kb3dzL3BhaW50aW5nLmMuCi0KLUZyaSBGZWIgMTEgMTI6NDE6MjggMTk5NCAgRXJpayBCb3MgKGVyaWtAdHJhc2hjYW4uaGFja3RpYy5ubCkKLQkKLQkqIFtsb2FkZXIvd2luZS5jXSBbbWlzYy9kb3NfZnMuY10KLQlnZXRlbnYoKSBlcSBOVUxMIGJ1Z2ZpeGVzLgotCi0JKiBbbWlzYy9jb21tLmNdCi0JY2ZtYWtlcmF3IGNoYW5nZWQgZm9yIFN1bk9TLgotCi1GZWIgMTMsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKLQotCSogW21lbS9hdG9tLmNdCi0JQnVnIGZpeCBpbiBBVE9NX0RlbGV0ZUF0b20oKSA6IAotCQljaGFuZ2UgTG9jYWxGcmVlKCkgYnkgVVNFUl9IRUFQX0ZSRUUoKS4KLQotCSogW21pc2MvbWVzc2FnZS5jXQotCU5ldyBmdW5jdGlvbiBGYXRhbEFwcEV4aXQoKS4KLQotCSogW29iamVjdHMvZm9udC5jXQotCU5ldyBlbXB0eSBzdHViIFNldE1hcHBlckZsYWdzKCkuCi0KLQkqIFtjb250cm9scy9tZW51LmNdCi0JQmV0dGVyIENoZWNrTWFyayAmIG90aGVyIGJpdG1hcHMgcGxhY2VtZW50LgotCi0JKiBbd2luZG93cy9ncmFwaGljcy5jXQotCU5ldyBmdW5jdGlvbiBSb3VuZFJlY3QoKSA6IGNhbGMuZXhlIG5vdyB3b3JraW5nLi4uCi0KLVR1ZSBGZWIgMTUgMTQ6Mjk6MzcgMTk5NCAgSm9obiBSaWNoYXJkc29uCi0KLSAgICAgICAgKiBbb2JqZWN0cy9iaXRibHQuY10KLSAgICAgICAgRml4ZWQgU3RyZXRjaEJsdCBzbyBpdCB3b3JrcyBxdWlja2VyIGFuZCBmYXN0ZXIuICBJdCBzdGlsbCBkb2Vzbid0Ci0gICAgICAgIHVzZSB0aGUgU3RyZXRjaE1vZGUgYml0cyBmb3IgYml0bWFwIGNvbXByZXNzaW9uLCBidXQgdGhhdCB3aWxsCi0gICAgICAgIGNvbWUgc29vbi4KLQotTW9uIEZlYiAxNCAxMzoyMTowNCAxOTk0ICBNaWd1ZWwgZGUgSWNhemEgIChtaWd1ZWxAcm94YW5uZS5udWNsZWN1LnVuYW0ubXgpCi0KLQkqIFtpbmNsdWRlL3dpbmRvd3MuaCxkaWFsb2cuaCxnZGkuaF0KLQlDaGFuZ2VkIF9fYXRyaWJ1dGVfXyAoKHBhY2tlZCkpIGZvciBXSU5FX1BBQ0tFRC4gCi0JV2hlbiBjb21waWxpbmcgdGhlIGxpYnJhcnkgdGhpcyBpcyBkZWZpbmVkIGFzIG5vdGhpbmcuIFRoaXMgZ2V0cwotCXJpZCB3aXRoIGFsbCB0aGUgcHJvYmxlbXMgY29tcGlsaW5nIHVuZGVyIFN1bk9TLiBBbHNvIAotCi0JKiBbd2luZG93cy91dGlsaXR5LmNdCi0JQWRkZWQgRGVidWdQcmludFN0cmluZy4KLQotCSogW3Rvb2xraXQvc3VwLmNdCi0JQWRkZWQgaFN5c1JlcyA9IDEgZGVmaW5pdGlvbiB0byByZXNvbHZlIGV4dGVybmFscy4KLQlBZGRlZCBDYWxsTGluZUREQVByb2MgZnVuY3Rpb24gKHRvb2xraXQgdmVyc2lvbikuCi0JQWRkZWQgdG95LCBhbmQgaGkgaW5lZmljaWVudCBtZW1tb3ZlIHVudGlsIGNvZGUgaW4gbWVzc2FnZS5jIGdldAotCXJld3JpdHRlbi4KLQotCSogW29iamVjdHMvZ2Rpb2JqLmNdCi0JSWZkZWZlZCBsaW51eC9lbXVsYXRvci1kZXBlbmRlbnQgY29kZSB0byBhbGxvdyBjb21waWxhdGlvbiBvZgotCVdpbmVMaWIuCi0KLQkqIFttaXNjL3dpbnNvY2tldC5jXQotCUFkZGVkIGlmZGVmIHRvIGFsbG93IGNvbXBpbGF0aW9uIHVuZGVyIFN1bk9TLgotCi0JKiBbbWlzYy9yZXNvdXJjZS5jXQotCVdoZW4gY29tcGlsaW5nIHRoZSBsaWJyYXJ5LCB0aGUgcmVzb3VyY2UgZmlsZSBpcyBleHBlY3RlZCB0byBiZSBpbgotCWEgZmlsZSBjYWxsZWQgJGFyZ3ZbMF0uUmVzLiBBbHNvIHRoZSBpbmZvcm1hdGlvbiBvZiB0aGUgcmVzb3VyY2UKLQlpcyBleHBlY3RlZCB0byBiZSBhdCBvZmZzZXQgMCBvZiB0aGUgLlJlcyBmaWxlLgotCi0JKiBbbWlzYy9tYWluLmNdCi0JQ2FsbCBXaW5NYWluIHdpdGggYXJndW1lbnRzIGlmIGNvbXBpbGluZyBXaW5lTGliLgotCUNhbGwgc2h1dGRvd24gZnVuY3Rpb25zIChDb21tX0RlSW5pdCwgRE9TX0RlSW5pdEZTKS4KLQlDYWxsIHN5bmNfcHJvZmlsZXMgdG8gcHJlc2VydmUgY2hhbmdlcyB0byAuSU5JIGZpbGVzLgotCi0JKiBbbWlzYy9jb21tLmMsZG9zX2ZzLmNdCi0JcmVtb3ZlZCBjYWxsIHRvIGF0ZXhpdChDb21tX0RlSW5pdCkKLQlyZW1vdmVkIGNhbGwgdG8gYXRleGl0KERPU19EZUluaXRGUykKLQlTaHV0ZG93biBmdW5jdGlvbnMgYXJlIG5vdyBjYWxsZWQgZnJvbSB0aGUgcmV0dXJuIG9mIFdpbk1haW4KLQotCSogcmVtb3ZlZCBtZW1vcnlsaWIgc3ViZGlyZWN0b3J5Ci0KLQkqIG1vdmVkIG1lbW9yeS9hdG9tLmMgICAgdG8gbWlzYy9hdG9tLmMKLQkgIG1vdmVkIG1lbW9yeWxpYi9oZWFwLmMgdG8gdG9vbGtpdC9oZWFwLmMKLQotCSogW2xvYWRlci93aW5lLmNdCi0JTW92ZWQgRGVidWdQcmludFN0cmluZyB0byB3aW5kb3dzL3V0aWxpdHkuYwotCi0JKiBbaW5jbHVkZS93aW5zb2NrLmhdCi0JRGVmaW5lIFNPX0RPTlRMSU5HRVIgb25seSBpZiBpdCBoYXMgbm90IGJlZW4gcHJldmlvdXNseSBkZWZpbmVkLgotCi0JKiBbaW5jbHVkZS93aW5kb3dzLmhdCi0JYWRkZWQgZGVmaW5pdGlvbiBmb3IgRExHUFJPQy4KLQlhZGRlZCBkZWZpbml0aW9uIGZvciBMTUVNX1dJTkVfQUxJR04gYW5kIG90aGVyIExNRU1fKiBjb25zdGFudHMuCi0JV2hlbiBjb21waWxpbmcgV2luZUxpYiBXTkRQUk9DIGlzIGRlZmluZWQgd2l0aCBhbGwgdGhlIHBhcmFtZXRlcnMKLQl0byBhdm9pZCBjb21waWxhdGlvbiBwcm9ibGVtcy4KLQotCSogW2luY2x1ZGUvdXNlci5oXQotCVdoZW4gY29tcGlsaW5nIFdpbmVMaWIgVVNFUl9IRUFQXyhBTExPQ3xSRUFMTE9DfEFERFJ8RlJFRSkgdGhlCi0JY2FsbHMgYXJlIHRyYW5zbGF0ZWQgdG8gdGhlIGxpYnJhcnkgYWxsb2NhdGlvbiByb3V0aW5lcy4KLQotCSogW2luY2x1ZGUvZ2RpLmgsdXNlci5oXQotCVdoZW4gY29tcGlsaW5nIFdpbmVMaWIgR0RJX0hFQVBfKEFMTE9DfEFERFJ8RlJFRSkgdGhlIGNhbGxzIGFyZQotCXRyYW5zbGF0ZWQgdG8gdGhlIGxpYnJhcnkgYWxsb2NhdGlvbiByb3V0aW5lcy4KLQotCSogW2luY2x1ZGUvYXRvbS5oXQotCURlZmluZWQgTG9jYWxBbGlnbi4gV2hlbiBjb21waWxpbmcgdGhlIGVtdWxhdG9yIGl0J3MgdHJhbnNsYXRlZCBhcwotCWEgY2FsbCB0byBMb2NhbEFsbG9jICh0aGUgb3JpZ2luYWwgY29kZSksIHdoZW4gY29tcGlsaW5nIFdpbmVMaWIKLQlhcyBhIGNhbGwgdG8gTG9jYWxBbGxvYyB3aXRoIGEgV0lORS1mbGFnIGNhbGxlZCBMTUVNX1dJTkVfQUxJR04KLQkoYXRvbS5jIG5lZWRzIGFsaWduZWQgZGF0YSBvbiBhIDQgYnl0ZSBib3VuZGFyeSkuCi0KLQkqIFttaXNjL2ZpbGUuY10KLQlSZW5hbWVkIEtFUk5FTF8qIGZ1bmN0aW9ucyBhbmQgZml4ZWQgcHJvdG90eXBlcy4KLQotCSogW2lmMTYzMi9rZXJuZWwuc3BlY10KLQlSZW5hbWVkIEtFUk5FTF8qIGZ1bmN0aW9ucyBpbiBvcmRlciB0byBiZSB1c2VkIGJ5IGFwcGxpY2F0aW9ucwotCXVzaW5nIFdpbmUgYXMgYSBsaWJyYXJ5IChPcGVGaWxlLCBfbGNsb3NlLCBfbHJlYWQsIF9sY3JlYXRlLAotCV9sbHNlZWssIF9sb3BlbiwgX2x3cml0ZSkuCi0KLQkqIFtNYWtlZmlsZV0KLQlDcmVhdGUgbGlicmFyeSBpbnN0ZWFkIG9mIGV4ZWN1dGFibGUgd2hlbiBidWlsZGluZyB0YXJnZXQKLQlsaWJ3aW5lLmEgCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVR1ZSBGZWIgIDggMTM6NTI6MTEgMTk5NCAgTWlndWVsIGRlIEljYXphICAobWlndWVsQHJveGFubmUpCi0KLQkqIFtNYWtlZmlsZXNdCi0JVXNlICQoQ0MpIGluc3RlYWQgb2YgY2MuCi0JQWRkZWQgbGlid2luZSB0YXJnZXQuCi0KLQkqIFtpbmNsdWRlL3Byb3RvdHlwZXNdCi0JI2lmZGVmZWQgc2VjdGlvbiBmb3IgV2luZUxpYgotCi0JKiBtb3ZlZCBsb2FkZXIvY3Vyc29yLmMgICB0byBtaXNjL2N1cnNvci5jCi0JICBtb3ZlZCBsb2FkZXIvcmVzb3VyY2UuYyB0byBtaXNjL3Jlc291cmNlLmMKLQkgIG1vdmVkIG1pc2MvZW11bGF0ZS5jICAgIHRvIG1pc2NlbXUvZW11bGF0ZS5jCi0JICBtb3ZlZCBtaXNjL2ludDFhLmMgICAgICB0byBtaXNjZW11L2ludDFhLmMKLQkgIG1vdmVkIG1pc2MvaW50MjEuYwkgIHRvIG1pc2NlbXUvaW50MjEuYwotCSAgbW92ZWQJbWlzYy9rZXJuZWwuYwkgIHRvIG1pc2NlbXUva2VybmVsLmMKLQkgIG1vdmVkIG1pc2MvdXNlci5jICAgICAgIHRvIG1pc2NlbXUvdXNlci5jCi0KLQkqIFttZW1vcnlsaWIvaGVhcC5jXQotCUhlYXAgbWFuYWdlbWVudCBmb3IgV2luZUxpYgotCi0JKiBbbWlzYy9jb21tLmNdCi0JTW9kaWZpZWQgdG8gYWxsb3cgY29tcGlsYXRpb24gdW5kZXIgU3VuT1MgKCNpbmNsdWRlIGVycm5vLCBTdW5PUwotCWRvZXNuJ3QgaGF2ZSBhdGV4aXQgKCkpLgotCi0JKiBbbWlzYy9kb3NfZnMuY10KLQlNb2RpZmllZCB0byBhbGxvdyBjb21waWxhdGlvbiB1bmRlciBTdW5PUyAoI2luY2x1ZGUgdmZzLmgpCi0KLQkqIFttaXNjL2ZpbGUuY10KLQlNb2RpZmllZCB0byBhbGxvdyBjb21waWxhdGlvbiB1bmRlciBTdW5PUyAoT1BFTl9NQVggY29uc3RhbnQsCi0JI2luY2x1ZGUgdW5pc3RkLmgpCi0KLQkqIFtvYmplY3RzL3BhbGV0dGUuY10KLQlNb2RpZmllZCB0byBhbGxvdyBjb21waWxhdGlvbiB1bmRlciBTdW5PUyAoI2luY2x1ZGUgbGltaXRzKQotCi0JKiBbdG9vbGtpdC9zdXAuY10KLQlXaW5lTGliIHZlcnNpb24gb2YgQ2FsbFdpbmRvd1Byb2MuCi0KLQkqIFt3aW5kb3dzL2V2ZW50LmNdCi0JVHlwZWRlZiBYUG9pbnRlciB1bmRlciBYMTFSNCAoT3BlbldpbmRvd3MpLgotCi0JKiBbd2luZG93cy93aW4uY10KLQlXaGVuIGNvbXBpbGluZyBXaW5lTGliLCB1c2UgZGlyZWN0IGNhbGxiYWNrcyBpbnN0ZWFkIG9mIHRoZQotCXdpbmRvd3Mgc3VwcGxpZWQgY2FsbGJhY2tzLgotCi1Nb24gRmViICA3IDIyOjM3OjM0IE1FVCAxOTk0ICBqdWxsaWFyZEBkaS5lcGZsLmNoIChBbGV4YW5kcmUgSnVsbGlhcmQpCi0KLQkqIFtsb2FkZXIvY3Vyc29yLmNdCi0JTmV3IGZ1bmN0aW9uIENVUlNPUl9TZXRXaW5DdXJzb3IoKSwgZm9yIGludGVybmFsIHVzZSwgdG8gc2V0Ci0JdGhlIGN1cnNvciBvZiBhIHNwZWNpZmljIHdpbmRvdyBtb3JlIHJlbGlhYmx5IHRoYW4gd2l0aCBTZXRDdXJzb3IoKS4KLQotCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCi0JQmV0dGVyIHdpbmRvdyBtYW5hZ2VtZW50LiBNb3ZpbmcgYW5kIHJlc2l6aW5nIGZyb20gdGhlIHN5c3RlbQotCW1lbnUgc2hvdWxkIHdvcmsgbm93LgotCUFkZGVkIHNjcm9sbC1iYXIgbW91c2UgdHJhY2tpbmcuCi0KLQkqIFt3aW5kb3dzL3dpbi5jXQotCU1vdmVkIHNjcm9sbC1iYXIgY3JlYXRpb24gYW5kIGRlc3RydWN0aW9uIHRvIGRlZnduZC5jLgotCi1GZWIgNSwgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQotCi0JKiBbd2luZG93cy9ub25jbGllbnQuY10KLQlDYWxsIHRvIFN0ZERyYXdNZW51QmFyKCkgZHVyaW5nIE5DJ3MgZHJhd2luZy4KLQlOZXcgTkNfVHJhY2tNb3VzZU1lbnVCYXIoKSBmdW5jdGlvbiB3aGljaCBjYWxsIAotCQlNZW51QnV0dG9uRG93bigpLCBNZW51QnV0dG9uVXAoKSAmIE1lbnVNb3VzZU1vdmUoKS4KLQotCSogW2NvbnRyb2xzL21lbnUuY10KLQlOZXcgQ2hhbmdlTWVudSgpIGZ1bmN0aW9uLgotCVJlbW92ZSBwZXJtYW5lbnRseSBvbGQgWHQgbWVudSBjb2RlLgotCU1ha2UgY29tbW9uIGZ1bmN0aW9ucyBNZW51QnV0dG9uRG93bigpLCBNZW51QnV0dG9uVXAoKQotCQkmIE1lbnVNb3VzZU1vdmUoKSBmb3IgYm90aCBwb3B1cHMgJiBtZW51YmFyLgotCQotCSogW2NvbnRyb2xzL2NvbWJvLmNdCi0JUGFpbnQgT0JNX0NPTUJPIGRpcmVjdGx5IGluIGNvbWJvIGNsaWVudC4KLQotCSogW2NvbnRyb2xzL2xpc3Rib3guY10KLQlGaXggYnVnIGluIG11bHRpY29sdW1ucyBjYWxjdWxhdGlvbnMuCi0KLQkqIFtjb250cm9scy9NYWtlZmlsZV0KLQlSZW1vdmUgcnVsZXMgZm9yIG9sZCBmaWxlICdjYXB0aW9uLmMnLgotCi0JKiBbbWlzYy9rZXJuZWwuY10KLQlSZW1vdmUgZW1wdHkgc3R1YiBHZXRNb2R1bGVGaWxlTmFtZSgpLgotCi0JKiBbbG9hZGVyL2xpYnJhcnkuY10KLQlOZXcgR2V0TW9kdWxlSGFuZGxlKCkgZnVuY3Rpb24uCi0JTmV3IEdldE1vZHVsZVVzYWdlKCkgZnVuY3Rpb24uCi0JTmV3IEdldE1vZHVsZUZpbGVOYW1lKCkgZnVuY3Rpb24uCi0KLQkqIFtsb2FkZXIvcmVzb3VyY2UuY10KLQlUcnkgdG8gZmluZCB0aGUgYnVnIGEgbWlzc2luZyBtZW51IGxvYWRpbmcgLi4uIE5vdCBmb3VuZCB5ZXQgIQotCi0JKiBbd2luZG93cy93aW4uY10KLQlSZW1vdmUgb2xkIG1lbnViYXIgY3JlYXRpb24uCi0KLVRodSBGZWIgIDMgMjI6MzA6MTEgMTk5NCAgRXJpayBCb3MgKGVyaWtAdHJhc2hjYW4uaGFja3RpYy5ubCkKLQotCSogW21pc2Mvd2luc29ja2V0LmNdCi0JTW9yZSBmdW5jdGlvbnMgYWRkZWQuCi0KLQkqIFtpZjE2MzIvd2luc29jay5zcGVjXSBbbWlzYy93aW5zb2NrZXQuY10KLQlBZGRlZCBKb2huIEJyZXphaydzIHdpbnNvY2suZGxsIHN0dWZmLgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UdWUgRmViICAxIDIxOjE0OjQ3IDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCi0KLQkqIFtsb2FkZXIvc2VsZWN0b3IuY10KLQlBZGRlZCBmdW5jdGlvbiBDcmVhdGVOZXdTZWdtZW50cygpLiAgTW9kaWZpZWQgSVBDQ29weVNlbGVjdG9yCi0JdG8gYWxsb3cgYWxpYXNpbmcgdG8gYW55IGFyYml0cmFyeSBtZW1vcnkgc3BhY2UuCi0KLQkqIFttZW1vcnkvZ2xvYmFsLmNdCi0JRml4ZWQgcG90ZW50aWFsIGJ1ZyBpbiBHbG9iYWxHZXRGcmVlU2VnbWVudHMoKS4KLQotCSogW21lbW9yeS9saW5lYXIuY10KLQlDcmVhdGVkIGZ1bmN0aW9ucyBHbG9iYWxMaW5lYXJMb2NrKCkgYW5kIEdsb2JhbExpbmVhclVubG9jaygpLgotCi1UdWUgRmViICAxIDA1OjUxOjQzIDE5OTQgIGp1bGxpYXJkQGRpLmVwZmwuY2ggKEFsZXhhbmRyZSBKdWxsaWFyZCkKLQotCSogW2NvbnRyb2xzL3dpZGdldHMuY10KLQlSZW1vdmVkIENBUFRJT04gd2luZG93IGNsYXNzLgotCi0JKiBbbG9hZGVyL2N1cnNvci5jXQotCUJ1ZyBmaXggaW4gTG9hZEN1cnNvcigpOiBkb24ndCBhbGxvY2F0ZSBtZW1vcnkgZXZlcnkgdGltZSBmb3IKLQlidWlsdC1pbiBjdXJzb3JzLgotCi0JKiBbd2luZG93cy9jbGlwcGluZy5jXQotCUludmFsaWRhdGUgY2hpbGQgd2luZG93cyBpbiBJbnZhbGlkYXRlUmduKCkuCi0KLQkqIFt3aW5kb3dzL2RlZnduZC5jXQotCUFkZGVkIHJlcGFpbnQgb2YgdGhlIGNhcHRpb24gd2hlbiBjaGFuZ2luZyB3aW5kb3cgdGV4dC4KLQotCSogW3dpbmRvd3MvZXZlbnQuY10KLQlNb2RpZmllZCBTZXRDYXB0dXJlKCkgdG8gYWxsb3cga2V5Ym9hcmQgZXZlbnRzIHdoaWxlIGNhcHR1cmluZy4KLQotCSogW3dpbmRvd3MvbWVzc2FnZS5jXQotCU5ldyBmdW5jdGlvbiBNU0dfR2V0SGFyZHdhcmVNZXNzYWdlKCksIHRvIGRvIG1vdXNlIHRyYWNraW5nCi0Jd2l0aG91dCByZXR1cm5pbmcgY29udHJvbCB0byB0aGUgV2luZG93cyBwcm9ncmFtLgotCi0JKiBbd2luZG93cy9ub25jbGllbnQuY10KLQlBIGNvdXBsZSBvZiBjaGFuZ2VzIGluIGZyYW1lIGRyYXdpbmcgZm9yIERMR01PREFMRlJBTUUgd2luZG93cy4KLQlSZXdyaXR0ZW4gd2luZG93IG1vdmluZyBjb2RlLCB0byB1c2UgTVNHX0dldEhhcmR3YXJlTWVzc2FnZSgpCi0JaW5zdGVhZCBvZiBub24tY2xpZW50IG1vdXNlIGV2ZW50cyAodGhpcyBpcyB0aGUgd2F5IFdpbmRvd3MKLQlkb2VzIGl0KSwgYW5kIHRvIHNlbmQgV01fRU5URVJTSVpFTU9WRSBtZXNzYWdlcy4KLQlSZW1vdmVkIFdNX05DQlVUVE9OVVAgYW5kIFdNX05DTU9VU0VNT1ZFIGhhbmRsZXJzLgotCi0JKiBbd2luZG93cy93aW4uY10KLQlBbGxvY2F0ZSB0ZW1wb3Jhcnkgc3RydWN0dXJlcyBvbiB0aGUgVVNFUiBoZWFwIGluc3RlYWQgb2YKLQl1c2luZyBHbG9iYWxBbGxvYygpLgotCi0JKiBbd2luZG93cy93aW5wb3MuY10KLQlBZGRlZCBmdW5jdGlvbiBXSU5QT1NfR2V0TWluTWF4SW5mbygpIHRvIGdldCBzaXppbmcgaW5mb3JtYXRpb25zLgotCi1KYW4gMzEsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKLQotCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCi0JQ2FsbCB0byBTdGREcmF3U2Nyb2xsQmFyKCkgZHVyaW5nIE5DJ3MgZHJhd2luZy4KLQlDYWxsIHRvIE5DX1Njcm9sbEJhckJ1dHRvbkRvd24oKSBvbiBOQyBtb3VzZSBldmVudHMgV01fTEJVVFRPTkRPV04uCi0JQ2FsbCB0byBOQ19TY3JvbGxCYXJCdXR0b25VcCgpIG9uIE5DIG1vdXNlIGV2ZW50cyBXTV9MQlVUVE9OVVAuCi0JQ2FsbCB0byBOQ19TY3JvbGxCYXJNb3VzZU1vdmUoKSBvbiBOQyBtb3VzZSBldmVudHMgV01fTU9VU0VNT1ZFLgotCi0JKiBbY29udHJvbHMvbWVudS5jXQotCU5ldyBHZXRTdWJNZW51KCkgZnVuY3Rpb24uCi0JTW92ZSBHZXRNZW51KCkgJiBTZXRNZW51KCkgZnVuY3Rpb25zIGZyb20gJ3dpbmRvd3Mvd2luLmMnLgotCi0JKiBbY29udHJvbHMvbGlzdGJveC5jXQotCVN0YXJ0IGNoYW5nZXMgdG8gc2F0aXNmeSByZWNlbnQgY2hhbmdlcyBpbiBzY3JvbGxiYXJzL3dpbmRvd3MuCi0KLQkqIFtsb2FkZXIvcmVzb3VyY2UuY10KLQlQdXQgc29tZSBjb2RlIGluIExvYWRBY2NlbGVyYXRvcnMoKSBzdHViLgotCU5ldyBUcmFuc2xhdGVBY2NlbGVyYXRvcigpIGZ1bmN0aW9uLgotCi0JKiBbd2luZG93cy93aW4uY10KLQlSZW1vdmUgR2V0TWVudSgpICYgU2V0TWVudSgpIGZ1bmN0aW9ucy4KLQlDYWxsIHRvIE5DX0NyZWF0ZVNjcm9sbEJhcnMoKSBpZiByZXF1aXJlZCBieSBDcmVhdGVXaW5kb3coKS4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotTW9uIEphbiAyNCAxMDo0MDoxMCBFU1QgMTk5NCBKb2huIFJpY2hhcmRzb24gKGpyaWNoYXJkQGNzLnVtbC5lZHUpCi0KLSAgICAgICAgKiBbd2luZG93L3dpbi5jXQotICAgICAgICBBZGRlZCBmdW5jdGlvbnMgRW51bVdpbmRvd3MsIEVudW1DaGlsZFdpbmRvd3MsIGFuZCBoZWxwZXIKLSAgICAgICAgV0lOX0VudW1DaGlsZFdpbi4gIEVudW1XaW5kb3dzIHdvbid0IGxpc3QgYWxsIHdpbmUgd2luZG93cwotICAgICAgICBiZWNhdXNlIEdldERlc2t0b3BXaW5kb3cgaXNuJ3QgY29tcGxldGUuICBIb3dldmVyLCB0aGUgY29kZQotICAgICAgICBpcyBpbiBwbGFjZSBmb3IgaXQgdG8gd29yayBjb3JyZWN0bHkgYW5kIG9ubHkgbmVlZHMgCi0gICAgICAgIEdldERlc2t0b3BXaW5kb3cgdG8gZG8gc28uICAKLQotVHVlIEphbiAyNSAwNTo1MTo0NyAxOTk0ICBqdWxsaWFyZEBkaS5lcGZsLmNoIChBbGV4YW5kcmUgSnVsbGlhcmQpCi0KLQkqIFt3aW5kb3dzL2RlZnduZC5jXQotCUFkZGVkIGhhbmRsaW5nIG9mIGFjdGl2YXRpb24gbWVzc2FnZXMgKFdNX0FDVElWQVRFLAotCVdNX05DQUNUSVZBVEUsIFdNX01PVVNFQUNUSVZBVEUpCi0KLQkqIFt3aW5kb3dzL2V2ZW50LmNdCi0JRGUtYWN0aXZhdGUgdGhlIHdpbmRvdyB3aGVuIGxvc2luZyBpbnB1dCBmb2N1cy4KLQotCSogW3dpbmRvd3MvZm9jdXMuY10KLQlCdWcgZml4IGluIFNldEZvY3VzKCkuCi0KLQkqIFt3aW5kb3dzL21lc3NhZ2UuY10KLQlBZGRlZCBhY3RpdmF0aW9uIG9mIHRoZSB3aW5kb3cgb24gbW91c2UtY2xpY2tzLgotCi0JKiBbd2luZG93cy9ub25jbGllbnQuY10KLQlDaGFuZ2VkIG5vbi1jbGllbnQgYXJlYSBwYWludGluZyB0byB1c2UgdGhlIGNvcnJlY3QgY29sb3JzCi0JZGVwZW5kaW5nIHVwb24gdGhlIGFjdGl2YXRpb24gc3RhdGUuCi0JQWRkZWQgV01fTkNBQ1RJVkFURSBtZXNzYWdlIGhhbmRsaW5nLgotCUZpeGVkIGEgY291cGxlIG9mIGJ1Z3MgaW4gd2luZG93IG1vdmluZyBhbmQgcmVzaXppbmcuCi0KLQkqIFt3aW5kb3dzL3dpbnBvcy5jXQotCUltcGxlbWVudGVkIEdldC9TZXRBY3RpdmVXaW5kb3coKS4KLQlJbXBsZW1lbnRlZCBTV1BfTk9BQ1RJVkFURSBmbGFnIGluIFNldFdpbmRvd1BvcygpLgotCi1KYW4gMTcsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKLQotCSogW21pc2MvbWVzc2FnZS5jXQotCU1lc3NhZ2VCb3ggaGFzIGEgQ2FwdGlvbkJhciBmb3IgaGlzIHRpdGxlIGV4Y2VwdCBmb3IKLQkJTUJfU1lTVEVNTU9EQUwgd2l0aCBNQl9JQ09OSEFORC4KLQotCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCi0JQ2FsbCB0byBOQ19UcmFja1N5c01lbnUgb24gU3lzTWVudSBidXR0b24gbW91c2UgY2xpY2suCi0KLQkqIFt3aW5kb3dzL2RlZnduZC5jXQotCUNhbGwgdG8gTkNfVHJhY2tTeXNNZW51IG9uIEFsdCBrZXkgKFZLX01FTlUpLgotCi0JKiBbY29udHJvbHMvbWVudS5jXQotCU5ldyBHZXRTeXN0ZW1NZW51KCkgZnVuY3Rpb24uCi0JTmV3IENvcHlTeXN0ZW1NZW51KCkgaW50ZXJuYWwgZnVuY3Rpb24uCi0JTmV3IE5DX1RyYWNrU3lzTWVudSgpIGludGVybmFsIGZ1bmN0aW9uLgotCi0JKiBbaW5jbHVkZS93aW5kb3dzLmhdCi0JTmV3IFdNX0lOSVRNRU5VLCBXTV9JTklUTUVOVVBPUFVQLCBXTV9NRU5VU0VMRUNUICYgV01fTUVOVUNIQVIgZGVmaW5lcy4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVGh1IEphbiAxMyAxMTo0NToxMyAxOTk0ICBKb2huIFJpY2hhcmRzb24gPGpyaWNoYXJkQGNzLnVtbC5lZHU+Ci0KLQkqIFt3aW5kb3cvd2luLmNdCi0JQWRkZWQgZnVuY3Rpb25zIEVuYWJsZVdpbmRvdywgSXNXaW5kb3dFbmFibGVkLCBhbmQgaGVscGVyIAotCVdJTl9TZXRTZW5zaXRpdmUuCi0JCi0JKiBbd2luZG93L2V2ZW50LmNdCi0JQWRkZWQgY2hlY2tzIGZvciBXU19ESVNBQkxFRCB3aW5kb3dzIGluIEVWRU5UX2tleSwgRVZFTlRfTW90aW9uTm90aWZ5LAotCUVWRU5UX0J1dHRvblByZXNzLCBFVkVOVF9CdXR0b25SZWxlYXNlLCBFVkVOVF9Db25maWd1cmVOb3RpZnksCi0JRVZFTlRfRm9jdXNJbiwgRVZFTlRfRm9jdXNPdXQsIGFuZCBFVkVOVF9FbnRlck5vdGlmeS4gIEtleSBhbmQgCi0JYnV0dG9uIHByZXNzZXMgYmVlcCBmb3IgYSBkaXNhYmxlZCB3aW5kb3cuICAKLQlJZiBhbnlvbmUgZmluZHMgYmV0dGVyIHBsYWNlcyBmb3IgdGhlc2UgY2hlY2tzLCBwbGVhc2UgdGVsbCBtZS4KLQotSmFuIDE3LCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCi0KLQkqIFttaXNjL21lc3NhZ2UuY10KLQlDbGVhbnVwIG9uIGJ1dHRvbnMgYW5zd2VyIHZhbHVlIHJldHVybmVkLgotCi0JKiBbY29udHJvbC9jb21iby5jXQotCU5vdyB1c2UgT0JNX0NPTUJPIGJpdG1hcCBkcm9wZG93biBidXR0b24uCi0KLU1vbiBKYW4gMTcgMjE6NTY6NDUgMTk5NCAgRXJpayBCb3MgKGVyaWtAdHJhc2hjYW4uaGFja3RpYy5ubCkKLQotCSogW21pc2MvY29tbS9jXQotCUEgZmV3IGJ1Z2ZpeGVzLgotCi1UdWUgSmFuIDE4IDA2OjM2OjQ4IDE5OTQgIGp1bGxpYXJkQGRpLmVwZmwuY2ggKEFsZXhhbmRyZSBKdWxsaWFyZCkKLQotCSogW2xvYWRlci9jdXJzb3IuY10KLQlBZGRlZCBYIGN1cnNvciBmb3IgSURDX1NJWkVOUyBhbmQgSURDX1NJWkVXRS4KLQotCSogW2luY2x1ZGUvb3B0aW9ucy5oXSBbbWlzYy9tYWluLmNdICAoTmV3IGZpbGVzKQotCVJld3JvdGUgbWFpbigpIGZ1bmN0aW9uIHRvIGdldCByaWQgb2YgWHQgYXBwbGljYXRpb24gY29udGV4dCwKLQlhbmQgYWRkZWQgY29tbWFuZC1saW5lIG9wdGlvbiBwYXJzaW5nLgotCi0JKiBbb2JqZWN0cy9jb2xvci5jXQotCVVzZSBvZiBhIHByaXZhdGUgbWFwIG5vdyBjb25maWd1cmFibGUgd2l0aCBjb21tYW5kLWxpbmUgb3B0aW9uLgotCi0JKiBbd2luZG93cy9kZWZ3bmQuY10KLQlBZGRlZCBXTV9TWVNDT01NQU5EIGhhbmRsaW5nLCBhbmQgYmV0dGVyIFdNX1NFVENVUlNPUiBoYW5kbGluZy4KLQotCSogW3dpbmRvd3MvZXZlbnQuY10KLQlSZW1vdmVkIENvbmZpZ3VyZU5vdGlmeSBldmVudCBoYW5kbGVyIChubyBsb25nZXIgbmVlZGVkKS4KLQotCSogW3dpbmRvd3MvbWVzc2FnZS5jXQotCVNlbmQgV01fU0VUQ1VSU09SIG1lc3NhZ2Ugb24gbW91c2UgZXZlbnRzLgotCi0JKiBbd2luZG93cy9ub25jbGllbnQuY10KLQlVc2UgT0VNIGJpdG1hcHMgZm9yIHRoZSBkcmF3aW5nIG9mIHRoZSBub24tY2xpZW50IGFyZWEuCi0JQWRkZWQgY2FwdGlvbiBiYXIgYnV0dG9ucyBoYW5kbGluZywgYW5kIG1vdmluZyBhbmQgcmVzaXppbmcgb2YKLQl0aGUgd2luZG93IHZpYSB0aGUgd2luZG93IGZyYW1lIChieXBhc3NpbmcgdGhlIHdpbmRvdyBtYW5hZ2VyKS4KLQotCSogW3dpbmRvd3MvcGFpbnRpbmcuY10KLQlCdWcgZml4IGluIEJlZ2luUGFpbnQoKS4KLQotCSogW3dpbmRvd3Mvd2luLmNdCi0JU2V0IHRoZSBvdmVycmlkZV9yZWRpcmVjdCBmbGFnIGZvciB3aW5kb3dzICh0byBieXBhc3Mgd2luZG93Ci0JbWFuYWdlcikuCi0KLQkqIFt3aW5kb3dzL3dpbnBvcy5jXQotCUltcGxlbWVudGVkIFdpbmRvd0Zyb21Qb2ludCgpLCBDaGlsZFdpbmRvd0Zyb21Qb2ludCgpLAotCUJyaW5nV2luZG93VG9Ub3AoKSwgR2V0L1NldEludGVybmFsV2luZG93UG9zKCksCi0JR2V0L1NldFdpbmRvd1BsYWNlbWVudCgpLgotCi1Nb24gSmFuIDE3IDIwOjQ4OjI0IDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCi0KLQkqIFttZW1vcnkvaGVhcC5jXQotCUFkZGVkIHN1cHBvcnQgZm9yIG11bHRpcGxlIGxvY2FsIGhlYXBzLgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UdWUgSmFuICA0IDEzOjAxOjMzIDE5OTQgIERhdmlkIE1ldGNhbGZlIDxkYXZpZEBwcmlzbS5kZW1vbi5jby51az4KLQotICAgICAgICAqIFt3aW5kb3cvY2FyZXQuY10KLSAgICAgICAgTW9kaWZpZWQgY29kZSB0byB1c2Ugc3lzdGVtIHRpbWVyLgotCi1KYW4gOSwgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQotCi0JKiBbd2luZG93cy93aW4uY10KLQlXaW5kb3dzIGNyZWF0ZSBpZiByZXF1aXJlZCBuZXcgWExJQiBNZW51QmFyICYgQ2FwdGlvbkJhci4KLQotCSogW3dpbmRvd3MvZGVmd25kLmNdCi0JV01fQ0FMQ1NJWkUgTW92ZSAmIFJlc2l6ZSBjYXB0aW9uLCBtZW51YmFyICYgc2Nyb2xsYmFycy4KLQkoSSdtIG5vdCBzdXJlIGl0J3MgdGhlIGdvb2QgcGxhY2UgZm9yIGl0LCBidXQgaXQgd29yay4uLikKLQotCSogW2xvYWRlci9yZXNvdXJjZS5jXQotCW9wdGltaXplIGluIEZpbmRSZXNvdXJjZUJ5TnVtYmVyLCBtYWtlIGxzZWVrKCkgaWYgbmV4dCB0eXBlIC4uLgotCi0JKiBbY29udHJvbHMvc2Nyb2xsLmNdCi0Jc2Nyb2xsYmFyIGJ1dHRvbnMgYXJlIG5vdyB1c2luZyBzeXN0ZW0gcmVzb3VyY2VzIGJpdG1hcHMuCi0KLQkqIFtjb250cm9scy9jYXB0aW9uLmNdIC0gbmV3IGZpbGUgLi4uCi0JY2FwdGlvbmJhciBzaG93aW5nIHRpdGxlLCBjbG9zZSBidXR0b24gd2l0aCBTeXNNZW51LAotCWFuZCBvdGhlciBidXR0b25zIHVzaW5nIHN5c3RlbSByZXNvdXJjZXMgYml0bWFwcy4KLQotCSogW2NvbnRyb2xzL21lbnUuY10KLQlOZXcgZnVuY3Rpb25zOiBTZXRNZW51SXRlbUJpdG1hcHMoKSB3aXRoICdnbHVlcycsCi0JTWFrZSBuZXcgdmVyc2lvbiBvZiBMb2FkTWVudSgpICYgUGFyc2VNZW51KCksCi0JKCBwdXQgI2RlZmluZSBVU0VfUE9QVVBNRU5VICkuCi0JSW1wbGVtZW50YXRpb24gb2YgTWVudUJhciBmdW5jdGlvbnMuCi0JCi0JKiBbc3lzcmVzLmRsbF0KLQlOZXcgYml0bWFwcyBmb3Igc3lzdGVtIHN1Y2ggT0JNX0NMT1NFLCBPQk1fTUlOSU1JWkUsIE9CTV9VUEFSUk9XSS4KLQlOZXcgU1lTTUVOVSBtZW51LCBpdCBkb24ndCB3b3JrIHlldCAhIDotKCgKLQotVHVlIEphbiAxMSAwNToyNzo0NSAxOTk0ICBqdWxsaWFyZEBkaS5lcGZsLmNoIChBbGV4YW5kcmUgSnVsbGlhcmQKLQotCSogW21lbW9yeS9hdG9tLmNdCi0JRml4ZWQgYSBidWcgdGhhdCBjb3VsZCBjYXVzZSBhdG9tcyB0byBiZSBjYXNlLXNlbnNpdGl2ZS4KLQotCSogW21pc2MvcmVjdC5jXQotCUJ1ZyBmaXggaW4gU3VidHJhY3RSZWN0KCkuCi0KLQkqIFtvYmplY3RzL2NsaXBwaW5nLmNdCi0JQnVnIGZpeCB3aGVuIHNldHRpbmcgdGhlIGNsaXAgbWFzayB0byBhbiBlbXB0eSByZWdpb24uCi0KLQkqIFt3aW5kb3dzL2RjZS5jXQotCUJ1ZyBmaXggaW4gUmVsZWFzZURDKCkuCi0KLQkqIFt3aW5kb3dzL2RpYWxvZy5jXQotCUNhbGwgQWRqdXN0V2luZG93UmVjdEV4KCkgYmVmb3JlIGNyZWF0aW5nIHRoZSBkaWFsb2cgd2luZG93LgotCUFkZGVkIHN1cHBvcnQgZm9yIERTX01PREFMRlJBTUUgc3R5bGUuCi0KLQkqIFt3aW5kb3dzL2V2ZW50LmNdCi0JQ2xlYW5lZCB1cCBldmVudCBoYW5kbGluZyBhbmQgcmVtb3ZlZCBvbGQgWHQgc3R1ZmYuCi0JTW92ZWQgZG91YmxlLWNsaWNrIGhhbmRsaW5nIHRvIHdpbmRvd3MvbWVzc2FnZS5jCi0KLQkqIFt3aW5kb3dzL2ZvY3VzLmNdCi0JQnVnIGZpeDogb25seSBzZXQgdGhlIFggZm9jdXMgd2hlbiB0aGUgd2luZG93IGlzIHZpZXdhYmxlLgotCi0JKiBbd2luZG93cy9ncmFwaGljcy5jXQotCVJld3JpdHRlbiBEcmF3UmVsaWVmUmVjdCgpIHRvIHVzZSBicnVzaCBpbnN0ZWFkIG9mIHBlbiwgYW5kCi0JdG8gdXNlIHRoZSBzeXN0ZW0gY29sb3JzLgotCi0JKiBbd2luZG93cy9tZXNzYWdlLmNdCi0JSW1wbGVtZW50ZWQgV01fTkNISVRURVNUIG1lc3NhZ2Ugc2VuZGluZywgYW5kIG5vbi1jbGllbnQKLQltb3VzZSBtZXNzYWdlcy4KLQlDbGVhbmVkIHVwIGRvdWJsZS1jbGljayBoYW5kbGluZywgYW5kIHJlbW92ZWQgdGhlIFh0IGNvZGUuCi0KLQkqIFt3aW5kb3dzL25vbmNsaWVudC5jXSAgKE5ldyBmaWxlKQotCUltcGxlbWVudGVkIEFkanVzdFdpbmRvd1JlY3QoKS4KLQlJbXBsZW1lbnRlZCBXTV9OQ0NBTENTSVpFLCBXTV9OQ0hJVFRFU1QgYW5kIFdNX05DUEFJTlQgaGFuZGxpbmcuCi0KLQkqIFt3aW5kb3dzL3BhaW50aW5nLmNdCi0JQWRkZWQgc2VuZGluZyBvZiB0aGUgV01fTkNQQUlOVCBtZXNzYWdlIGluIEJlZ2luUGFpbnQoKS4KLQotCSogW3dpbmRvd3Mvc3lzbWV0cmljcy5jXSBbaW5jbHVkZS9zeXNtZXRyaWNzLmhdICAoTmV3IGZpbGVzKQotCUltcGxlbWVudGVkIHN5c3RlbSBtZXRyaWNzLgotCi0JKiBbd2luZG93cy93aW4uY10KLQlCdWcgZml4IGluIHNldHRpbmcgdGhlIHBhcmVudCBhbmQgb3duZXIgaW4gQ3JlYXRlV2luZG93KCkuCi0JUmVtb3ZlZCB0aGUgWHQgY29kZS4KLQotCSogW3dpbmRvd3Mvd2lucG9zLmNdCi0JQWRkZWQgc2VuZGluZyBvZiB0aGUgV01fTkNQQUlOVCBtZXNzYWdlIGluIFNldFdpbmRvd1BvcygpLgotCVJlbW92ZWQgdGhlIFh0IGNvZGUuCi0KLVN1biBKYW4gIDIgMTI6Mzg6NTMgMTk5NCAgRGF2aWQgTWV0Y2FsZmUgPGRhdmlkQHByaXNtLmRlbW9uLmNvLnVrPgotCi0JKiBbd2luZG93cy9jbGFzcy5jXQotCUltcGxlbWVudGVkIEdldENsYXNzTmFtZSBhbmQgR2V0Q2xhc3NJbmZvLgotCi0JKiBbd2luZG93cy9jYXJldC5jXQotCVZhcmlvdXMgaW1wcm92ZW1lbnRzIHRvIHRleHQgY2FyZXQgY29kZS4KLQotRnJpIERlYyAzMSAxNToyMjoyMiAxOTkzICBKb2huIEJyZXphayA8YnJlemFrQGFwb2xsby5ocC5jb20+Ci0KLQkqIFttaXNjL2NvbW0uY10KLQlQYXRjaGVzIHRvIHdvcmsgd2l0aCBOZXRCU0QuCi0KLVRodSBEZWMgMzAgMTI6MTE6NTUgMTk5MyAgSm9obiBSaWNoYXJkc29uIDxqcmljaGFyZEBjcy51bWwuZWR1PgotCi0JKiBbb2JqZWN0cy9iaXRibHQuY10gQWRkZWQgU3RyZXRjaEJsdCgpLgotCi1UdWUgSmFuICA0IDA1OjIyOjA3IDE5OTQgIGp1bGxpYXJkQGRpLmVwZmwuY2ggKEFsZXhhbmRyZSBKdWxsaWFyZCkKLQotCSogW21pc2MvdXNlci5jXQotCUFkZGVkIGNyZWF0aW9uIG9mIHN5c3RlbSBtZXNzYWdlIHF1ZXVlLgotCi0JKiBbb2JqZWN0cy9iaXRtYXAuY10gW29iamVjdHMvZGN2YWx1ZXMuY10gW3dpbmRvd3MvZGMuY10KLQlBZGRlZCBEQyBzaXplIGZpZWxkcyBpbnRvIERDIHN0cnVjdHVyZS4JCQotCi0JKiBbb2JqZWN0cy9jbGlwcGluZy5jXQotCUJ1ZyBmaXggaW4gQ0xJUFBJTkdfSW50ZXJzZWN0UmVjdCgpLgotCi0JKiBbd2luZG93cy9jbGFzcy5jXQotCUFsbG9jYXRlIGEgRENFIGluc3RlYWQgb2YgYSBEQyBmb3IgQ1NfQ0xBU1NEQyBjbGFzc2VzLgotCi0JKiBbd2luZG93cy9jbGlwcGluZy5jXQotCUZpeGVkIEdldFVwZGF0ZVJlY3QoKSBhbmQgR2V0VXBkYXRlUmduKCkgdG8gY2xpcCB0byB0aGUgY2xpZW50IGFyZWEuCi0KLQkqIFt3aW5kb3dzL2RjZS5jXQotCUltcGxlbWVudGVkIEdldERDRXgoKSBhbmQgR2V0V2luZG93REMoKS4KLQotCSogW3dpbmRvd3MvZGVmd25kLmNdCi0JSW1wbGVtZW50ZWQgV01fV0lORE9XUE9TQ0hBTkdFRCBoYW5kbGluZy4KLQotCSogW3dpbmRvd3MvZXZlbnQuY10KLQlQcmVsaW1pbmFyeSBzdXBwb3J0IGZvciBYbGliIGV2ZW50IGhhbmRsaW5nIGluc3RlYWQgb2YgWHQgY2FsbGJhY2tzLgotCUNoYW5nZWQgTVNHX0FkZE1zZygpIGNhbGxzIHRvIGhhcmR3YXJlX2V2ZW50KCkgb3IgUG9zdE1lc3NhZ2UoKS4KLQotCSogW3dpbmRvd3MvbWVzc2FnZS5jXQotCVByZWxpbWluYXJ5IHN1cHBvcnQgZm9yIG11bHRpcGxlIG1lc3NhZ2UgcXVldWVzLgotCUltcGxlbWVudGVkIGhhcmR3YXJlX2V2ZW50KCkgdG8gc3RvcmUgbWVzc2FnZXMgaW50byB0aGUgc3lzdGVtIHF1ZXVlLgotCUltcGxlbWVudGVkIEdldC9TZXRUYXNrUXVldWUoKS4KLQlCZXR0ZXIgV01fUEFJTlQgYW5kIFdNX1RJTUVSIGhhbmRsaW5nLgotCUNoYW5nZXMgdG8gdXNlIFhsaWIgaW5zdGVhZCBvZiBYdCBmb3IgZXZlbnRzLgotCi0JKiBbd2luZG93cy9wYWludGluZy5jXQotCVVzZSBHZXREQ0V4KCkgdG8gcmV0cmlldmUgdGhlIERDLCB0byBnZXQgYSBjb3JyZWN0IHZpc2libGUgcmVnaW9uLgotCi0JKiBbd2luZG93cy90aW1lci5jXQotCU1vdmVkIHRoZSB0aW1lciBwcm9jZWR1cmUgY2FsbGJhY2sgaW50byBEaXNwYXRjaE1lc3NhZ2UoKS4KLQlDaGFuZ2VkIGltcGxlbWVudGF0aW9uIHRvIGdldCByaWQgb2YgWHQgdGltZW91dHMuICBUaW1lciBjaGVja2luZwotCWlzIG5vdyBkb25lIGluc2lkZSBHZXRNZXNzYWdlKCkuCi0KLQkqIFt3aW5kb3dzL3dpbi5jXQotCUFsbG9jYXRlIGEgRENFIGluc3RlYWQgb2YgYSBEQyBmb3IgQ1NfT1dOREMgd2luZG93cy4KLQlSZXBsYWNlZCBYdCBjYWxscyB3aXRoIFhsaWIgY2FsbHMuCi0JTW92ZWQgd2luZG93IHBvc2l0aW9uaW5nIGZ1bmN0aW9ucyBpbnRvIHdpbmRvd3Mvd2lucG9zLmMKLQotCSogW3dpbmRvd3Mvd2lucG9zLmNdICAoTmV3IGZpbGUpCi0JUmV3cml0dGVuIG1vc3Qgb2YgdGhlIHdpbmRvdyBwb3NpdGlvbmluZyBmdW5jdGlvbnMuCi0JSW1wbGVtZW50ZWQgU2V0V2luZG93UG9zKCkgYW5kIE1hcFdpbmRvd1BvaW50cygpLgotCi1KYW4gMywgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQotCi0JKiBbaWYxNjMyL3VzZXIuc3BlY10KLQlCYWQgYXJndW1lbnRzIGRlc2NyaXB0aW9uIGZvciBmdW5jdGlvbiBTZXREbGdJdGVtVGV4dC4KLQotCSogW29iamVjdHMvdGV4dC5jXQotCUZ1bmN0aW9uIERyYXdUZXh0IG5vdyBoYW5kbGUgRFRfQ0FMQ1JFQ1QgcmVxdWVzdC4KLQotCSogW21pc2MvbWVzc2FnZS5jXQotCU1lc3NhZ2UgYm94ZXMgbm93IHVzZSBEcmF3VGV4dCB3aXRoIERUX0NBTENSRUNULgotCi0JKiBbd2luZG93cy9ncmFwaGljcy5jXQotCUJ1ZyBmaXggaW4gZnVuY3Rpb24gRnJhbWVSZWN0LCAoaXQgd2FzIHVzaW5nIFBFTiBpbnN0ZWFkIG9mIEJSVVNIKS4KLQotCSogW3dpbmRvd3Mvd2luLmNdCi0JQnVnIGZpeCBmb3IgZmxhZ3MgaW4gZnVuY3Rpb24gU2hvd1dpbmRvdy4KLQlNb3JlIGFjY3VyYXRlIFdNX1NJWkUgZ2VuZXJhdGVkIGJ5IGZ1bmN0aW9uIFNob3dXaW5kb3cuCi0KLQkqIFtjb250cm9scy9saXN0Ym94LmNdCi0JTW9yZSBjb2RlIGZvciBMQlNfTVVMVElQTEVTRUwuCi0JTW9yZSBjb2RlIGZvciBMQlNfTVVMVElDT0xVTU4uCi0KLQkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KLQlCYWQgZGVmaW5lIGZvciBNRl9TRVBBUkFUT1IuCi0KLQkqIFtjb250cm9scy9tZW51LmNdCi0JTmV3IGZ1bmN0aW9uczogUG9wTWVudVduZFByb2MoKSB3aXRoICdnbHVlcycsCi0JQ3JlYXRlUG9wdXBNZW51KCksIEFwcGVuZE1lbnUoKSwgSW5zZXJ0TWVudSgpLCBSZW1vdmVNZW51KCksIAotCURlbGV0ZU1lbnUoKSwgTW9kaWZ5TWVudSgpLCBUcmFja1BvcHVwTWVudSgpLgotCUNvZGUgaW4gc3R1YnM6IENyZWF0ZU1lbnUoKSwgRGVzdHJveU1lbnUoKS4gCi0KLVNhdCBKYW4gIDEgMTA6MjI6NDMgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKLQotCSogbG9hZGVyL3dpbmUuYzogQWRkZWQgc3VwcG9ydCBmb3IgcmVsb2NhdGlvbiB0eXBlcyA1IGFuZCA2LgotCi1Nb24gRGVjIDI3IDExOjA2OjAzIDE5OTMgIEVyaWsgQm9zIChlcmlrQHRyYXNoY2FuLmhhY2t0aWMubmwpCi0KLQkqIFttaXNjL2NvbW0uY10KLQluZXcgZnVuY3Rpb25zOiBCdWlsZENvbW1EQ0IoKSwgT3BlbkNvbW0oKSwgQ2xvc2VDb21tKCksCi0JU2V0Q29tbUJyZWFrKCksIENsZWFyQ29tbUJyZWFrKCksIEVzY2FwZUNvbW1GdW5jdGlvbigpLCBGbHVzaENvbW0oKSwKLQlHZXRDb21tRXJyb3IoKSwgU2V0Q29tbUV2ZW50TWFzaygpLCBHZXRDb21tRXZlbnRNYXNrKCksCi0JU2V0Q29tbVN0YXRlKCksIEdldENvbW1TdGF0ZSgpLCBUcmFuc21pdENvbW1DaGFyKCksIFJlYWRDb21tKCksIAotCVdyaXRlQ29tbSgpLgotCi1XZWQgRGVjIDIyIDEzOjAwOjE1IDE5OTMgIERhdmlkIE1ldGNhbGZlIDxkYXZpZEBwcmlzbS5kZW1vbi5jby51az4KLQotCSogW3dpbmRvd3MvY2FyZXQuY10KLQlJbXBsZW1lbnRlZCB0ZXh0IGNhcmV0IGZ1bmN0aW9ucy4KLQotVHVlIERlYyAyMSAwNjoxMzo1OCAxOTkzICBqdWxsaWFyZEBkaS5lcGZsLmNoIChBbGV4YW5kcmUgSnVsbGlhcmQpCi0KLQkqIFtsb2FkZXIvd2luZS5jXQotCUJ1ZyBmaXggaW4gTG9hZEltYWdlKCkuCi0KLQkqIFtvYmplY3RzL2JpdGJsdC5jXSBbb2JqZWN0cy9jbGlwcGluZy5jXSBbb2JqZWN0cy90ZXh0LmNdCi0JICBbd2luZG93cy9kYy5jXSBbd2luZG93cy9kY2UuY10gW3dpbmRvd3MvZ3JhcGhpY3MuY10KLQlNb2RpZmllZCBncmFwaGljcyBjYWxscyB0byB0YWtlIGludG8gYWNjb3VudCB0aGUgREMgb3JpZ2luLgotCi0JKiBbd2luZG93cy9kZWZ3bmQuY10KLQlBZGRlZCBwcmVsaW1pbmFyeSBXTV9OQ0NBTENTSVpFIGhhbmRsaW5nLgotCi0JKiBbd2luZG93cy9ldmVudC5jXQotCVNlbmQgV01fTkNDQUxDU0laRSBtZXNzYWdlIG9uIHJlc2l6ZSBldmVudC4KLQotCSogW3dpbmRvd3Mvd2luLmNdCi0JU2VuZCBXTV9OQ0NBTENTSVpFIG1lc3NhZ2UgaW4gQ3JlYXRlV2luZG93KCkuCi0JUmVhbGl6ZSB3aWRnZXRzIGF0IGNyZWF0aW9uIHRpbWUgKHNob3VsZCBwcmV2ZW50IHByb2JsZW1zIHdpdGgKLQl1bnJlYWxpemVkIHdpZGdldHMpLgotCi1EZWMgMTksIDkzIG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKLQotCSogW2NvbnRyb2xzL3N0YXRpYy5jXQotCVNlbmQgbW91c2UgJiBrZXlib2FyZCBtZXNzYWdlIHJlY2VpdmVkIHRvIGl0cyBwYXJlbnQuCi0KLQkqIFtjb250cm9scy9zY3JvbGwuY10KLQlTZW5kIGtleWJvYXJkIG1lc3NhZ2UgcmVjZWl2ZWQgdG8gaXRzIHBhcmVudC4KLQotCSogW2NvbnRyb2xzL2xpc3Rib3guY10KLQlBZGQgTmF2aWdhdGlvbiBrZXlzIC4KLQlMaXN0Qm94IG5vdyB1c2UgVlNDUk9MTCAmIEhTQ1JPTEwgaW5zdGVhZCBvZiBjaGlsZHJlbi4KLQlBbHBoYSB2ZXJzaW9uIG9mIExCU19NVUxUSVBMRVNFTC4KLQlBbHBoYSB2ZXJzaW9uIG9mIExCU19NVUxUSUNPTFVNTi4KLQotCSogW2NvbnRyb2xzL2NvbWJvLmNdCi0JQWRkIE5hdmlnYXRpb24ga2V5cyBvbiBjbG9zZWQgQ29tYm9Cb3guCi0JUmVtb3ZlIHVzZWxlc3MgJ0NPTUJPQk9YX0NyZWF0ZUNvbWJvQm94JyBmdW5jdGlvbi4KLQotTW9uIERlYyAxOSAyMDozOTozNCAxOTkzICBFcmlrIEJvcyAoZXJpa0B0cmFzaGNhbi5oYWNrdGljLm5sKQotCi0JKiBbbG9hZGVyL3dpbmUuCi0JTG9hZEltYWdlKCkgbW9kaWZpZWQgdG8gdXNlIEZpbmRGaWxlKCkuCi0KLQkqIFttaXNjL2ZpbGUuY10KLQlTZXRFcnJvck1vZGUgYWRkZWQKLQotCSogW21pc2MvZG9zX2ZzLmNdCi0JYnVnIGZpeGVzLgotCi1EZWMgMTMsIDkzIG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKLQotCSogW21lbW9yeS9nbG9iYWwuY10KLQlidWcgZml4IGluIEdsb2JhbEdldEZyZWVTZWdtZW50IDogZ29vZCBwdHIgaW4gJ2dfcHJldicuCi0KLQkqIFtzeXNyZXMuZGxsXQotCXByZWxpbWluYXJ5IHZlcnNpb24gb2YgYSAnZ2xhc3Mgb2Ygd2luZScgYml0bWFwCi0KLQkqIFt3aW5kb3dzL2V2ZW50LmNdCi0JTmV3IGZ1bmN0aW9uICdHZXRDYXB0dXJlJy4KLQotCSogW2NvbnRyb2xzL3Njcm9sbC5jXQotCVJlbW92ZSB1c2VsZXNzICdTQ1JPTExCQVJfQ3JlYXRlU2Nyb2xsQmFyJyBmdW5jdGlvbi4KLQotCSogW2NvbnRyb2xzL2xpc3Rib3guY10KLQlSZW1vdmUgdXNlbGVzcyAnTElTVEJPWF9DcmVhdGVMaXN0Qm94JyBmdW5jdGlvbi4KLQotTW9uIERlYyAxMyAxMzo1MTowMCAxOTkzICBEYXZpZCBNZXRjYWxmZSA8ZGF2aWRAcHJpc20uZGVtb24uY28udWs+Ci0KLQkqIFtvYmplY3RzL2ZvbnQuY10KLQlDb3JyZWN0ZWQgYnVncyBpbiBHZXRDaGFyV2lkdGgoKS4KLQotCSogW3dpbmRvd3MvZXZlbnQuY10KLQlNb2RpZmllZCBFVkVOVF9rZXkgdG8gc2VuZCBXaW5kb3dzIHZpcnR1YWwga2V5IGNvZGVzIGZvcgotCVdNX0tFWURPV04gYW5kIFdNX0tFWVVQIG1lc3NhZ2VzLCBhbmQgYSBXTV9DSEFSIG1lc3NhZ2UKLQlmb3IgcHJpbnRhYmxlIGNoYXJhY3RlcnMuCi0KLVdlZCBEZWMgMDggMTk6MjA6MDAgMTk5MyAgS2FybCBHdWVudGVyIFd1ZW5zY2ggKGhuMzI0d3VAdW5pZHVpLnVuaS1kdWlzYnVyZy5kZSkKLQotCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KLQlBZGRlZCBQb2x5bGluZSBhbmQgUG9seWdvbgotCi1Nb24gRGVjIDEzIDE0OjUxOjU0IDE5OTMgIEVyaWsgQm9zIChlcmlrQHRyYXNoY2FuLmhhY2t0aWMubmwpCi0KLQkqIFtjb250cm9scy9saXN0Ym94LmNdCi0JTGlzdEJveERpcmVjdG9yeSgpIG1vZGlmaWVkIHRvIHVzZSBkb3NfZnMuYydzIGZ1bmN0aW9ucyB0bwotCWFjY2VzcyBmaWxlcyZ8ZHJpdmVzLgotCi1TYXQgRGVjIDA0IDE3OjA0OjIzIDE5OTMgIEVyaWsgQm9zIChlcmlrQHRyYXNoY2FuLmhhY2t0aWMubmwpCi0KLSAgICAgICAJKiBbbWlzYy9kb3NfZnMuY10KLSAgICAgICAJQWRkZWQgRmluZEZpbGUoKSB0byBzZWFyY2ggYSBmaWxlIGluIGEgZG9zL3VuaXggc3R5bGUgcGF0aC4KLQkKLQkqIFttaXNjL2ZpbGUuY10KLQlOZXcgV2luMzEgZnVuY3Rpb25zOiBPcGVuRmlsZSwgX2xjcmVhdGUsIF9sbHNlZWssIEdldFRlbXBEcml2ZSwKLQlHZXRUZW1wRmlsZU5hbWUsIEdldFdpbmRvd3NEaXJlY3RvcnksIEdldFN5c3RlbURpcmVjdG9yeSwKLQlHZXREcml2ZVR5cGUuCQkJICAgCi0KLSAgICAgICAJKiBbbWlzYy9pbnQyMS5jXQotICAgICAgIAlNb2RpZmllZC4KLQotV2VkIERlYyAgMSAxNjoyMDo0NSAxOTkzICBNaWd1ZWwgZGUgSWNhemEgIChtaWd1ZWxAcm94YW5uZS5udWNsZWN1LnVuYW0ubXgpCi0KLSAgICAgICAgKiBbbWlzYy9wcm9maWxlLmNdCi0gICAgICAgIFRoZSBQcm9maWxlIGZ1bmN0aW9ucyBub3cgcmV0dXJuIHRoZSBjb3JyZWN0IHZhbHVlcy4gVGhleSBub3cKLSAgICAgICAgaW1wbGVtZW50IGFsbCB0aGUgZmVhdHVyZXMgZGVzY3JpYmVkIGluIHRoZSBTREsuCi0KLVR1ZSBOb3YgMzAgMTM6NTU6MjcgMTk5MyAgQm9iIEFtc3RhZHQgIChib2IgYXQgYW1zY29ucykKLQotCSogW2xvYWRlci9zZWxlY3Rvci5jXQotCVJld3JvdGUgc2VsZWN0b3IgYWxpYXNpbmcgcm91dGluZXMgdG8gdXNlIFN5c3RlbSBWIElQQwotCXJvdXRpbmUgdG8gYWxpYXMgbWVtb3J5IHNlZ21lbnRzLgotCi1Ob3YgMjgsIDkzIG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKLQotCSogW2NvbnRyb2xzL2xpc3Rib3guY10KLQlNb3JlIGNvbnNpc3RlbmN5IGluIGZ1bmN0aW9ucyB1c2luZyB3SW5kZXhlcwotCi0JKiBbY29udHJvbHMvc2Nyb2xsLmNdCi0JTmV3IGZ1bmN0aW9uIDogU2hvd1Njcm9sbEJhcigpLgotCi0JKiBbbG9hZGVyL2N1cnNvci5jXSAuLi4gTmV3IGZpbGUKLQlNb3ZlIGN1cnNvciBmdW5jdGlvbnMgZnJvbSBbbG9hZGVyL3Jlc291cmNlLmNdLgotCU5ldyBmdW5jdGlvbiA6IENsaXBDdXJzb3IoKS4KLQlOZXcgZnVuY3Rpb24gOiBHZXRDbGlwQ3Vyc29yKCkuCi0JTmV3IGZ1bmN0aW9uIDogQ3JlYXRlQ3Vyc29yKCkuCi0JU2V0Q3Vyc29yKCkgbm93IHdvcmtpbmcgdXNpbmcgZ2xvYWJhbCB2YXJpYWJsZSAnd2luSGFzQ3Vyc29yJy4KLQotCSpbb2JqZWN0L3BhbGV0dGUuY10KLQlOZXcgc3R1YiBvbmx5IDogU2VsZWN0UGFsZXR0ZSgpLgotCU5ldyBzdHViIG9ubHkgOiBSZWFsaXplUGFsZXR0ZSgpLgotCi0JKlt3aW4vZXZlbnQuY10KLQlOZXcgZnVuY3Rpb24gOiBFVkVOVF9lbnRlcl9ub3RpZnkoKSwKLQkJdXBkYXRlICd3aW5IYXNDdXJzb3InIGFuZCBzZW5kIFdNX1NFVENVUlNPUi4KLQotCSpbd2luL2RlZnduZC5jXQotCUFkZCBwcm9jZXNzaW5nIG9mIFdNX1NFVENVUlNPUiBtZXNzYWdlLgotCi0JKlt3aW4vd2luLmNdCi0JTmV3IG1lbWJlcnMgaW4gV05EIHN0cnVjdHVyZSA6IGhDdXJzb3IsIGhXbmRWU2Nyb2xsICYgaFduZEhTY3JvbGwuIAotCUNyZWF0ZVdpbmRvd0V4KCkgbm93IGNyZWF0ZSBjaGlsZHJlbiBmb3IgV01fSFNDUk9MTCAmIFdNX1ZTQ1JPTEwuCi0JTmV3IGZ1bmN0aW9uIENsaWVudFRvU2NyZWVuKCkuCi0JTmV3IGZ1bmN0aW9uIFNjcmVlblRvQ2xpZW50KCkuCi0KLU1vbiBOb3YgMjUgMTg6MjU6NDAgMTk5MyAgRXJpayBCb3MgKGVyaWtAdHJhc2hjYW4uaGFja3RpYy5ubCkKLQotICAgICAgIAkqIFtmaWxlcy5oIC8gcmVnZnVuYy5oIC8gbWlzYy9kb3MuY10KLSAgICAgICAJUmVtb3ZlZC4KLQotICAgICAgIAkqIFttaXNjL2Rvc19mcy5jXQotICAgICAgIAlBZGRlZCBzdXBwb3J0IGZvciBsb2FkaW5nIGRvc2RyaXZlIGNmZyBmcm9tIHdpbmUuaW5pLgotCi0gICAgICAgCSogW21pc2MvaW50MjEuY10KLSAgICAgICAJTW9kaWZpZWQuCi0KLQotV2VkIE5vdiAyNCAxMTozNzozMyAxOTkzICBqdWxsaWFyZEBkaXN1bnMyLmVwZmwuY2ggKEFsZXhhbmRyZSBKdWxsaWFyZCkKLQotCSogW2luY2x1ZGUvYXRvbS5oXSBbbWVtb3J5L2F0b20uY10KLQlJbXBsZW1lbnRlZCBhdG9tcy4KLQotCSogW3dpbmRvd3MvY2xhc3MuY10KLQlNb2RpZmllZCBSZWdpc3RlckNsYXNzKCkgdG8gdXNlIGF0b21zLgotCUltcGxlbWVudGVkIENTX0dMT0JBTENMQVNTIHN0eWxlLgotCi0JKiBbd2luZG93cy9tZXNzYWdlLmNdCi0JSW1wbGVtZW50ZWQgUmVnaXN0ZXJXaW5kb3dNZXNzYWdlKCkuCi0KLQkqIFtsb2FkZXIvcmVzb3VyY2UuY10KLQlCdWcgZml4IGluIExvYWRSZXNvdXJjZSgpLgotCi0JKiBbd2luZG93cy9kaWFsb2cuY10KLQlNb2RpZmllZCBDcmVhdGVEaWFsb2dQYXJhbSgpIHRvIHVzZSBGaW5kL0xvYWRSZXNvdXJjZSgpLgotCi1Nb24gTm92IDIyIDEzOjU4OjU2IDE5OTMgIERhdmlkIE1ldGNhbGZlIDxkYXZpZEBwcmlzbS5kZW1vbi5jby51az4KLQotICAgICAgICAqIFt3aW5kb3dzL3Njcm9sbC5jXQotCVByZWxpbWluYXJ5IGltcGxlbWVudGF0aW9ucyBvZiBTY3JvbGxXaW5kb3csIFNjcm9sbERDIGFuZAotICAgICAgICBTY3JvbGxXaW5kb3dFeC4KLQotTm92IDIxLCA5MyBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCi0KLQkqIFtjb250cm9scy9saXN0Ym94LmNdCi0JT3B0aW1pemF0aW9uIG9mIHJlZHJhdyBkdXJpbmcgJ0FkZCcgb3IgJ0luc2VydCcuCi0KLQkqIFtjb250cm9scy9zY3JvbGwuY10KLQlPcHRpbWl6YXRpb24gb2YgV01fUEFJTlQgZHVyaW5nICd0aHVtYnRyYWNraW5nJy4KLQotCSogW2NvbnRyb2xzL2J1dHRvbi5jXQotCUFkZCBvZiBiZXRhIGltcGxlbWVudCBvZiAnQlNfT1dORVJEUkFXJwotCi0JKiBbY29udHJvbHMvc3RhdGljLmNdCi0JU3R5bGUgJ1NTX0lDT04nIG5ldyBzdXBwb3J0ZWQuCi0KLQkqIFttaXNjL21lc3NhZ2UuY10KLQlCZWdpbiBvZiBpbXBsZW1hbnRhdGlvbiBvZiBNQl9YWFggc3R5bGVzLgotCi0JKiBbbG9hZGVyL3Jlc291cmNlLmNdCi0JRnVuY3Rpb24gTG9hZEljb24oKSA6IG5vdyBwcmVwYXJlIHRyYW5zcGFyZW5jeSBCaXRtYXAgbWFzay4KLQlGdW5jdGlvbiBMb2FkQ3Vyc29yKCkgOiBub3cgcHJlcGFyZSBhICdYIHBpeG1hcGN1cnNvcicuCi0JTmV3IGZ1bmN0aW9uIFNldEN1cnNvcigpIDogbm90IGZpbmlzaGVkLgotCU5ldyBmdW5jdGlvbiBTaG93Q3Vyc29yKCkgOiBub3QgZmluaXNoZWQuCi0JTmV3IGZ1bmN0aW9uIEFjY2Vzc1Jlc291cmNlKCkgOiBzdHViLgotCi0JKiBbb2JqL2RpYi5jXQotCUZ1bmN0aW9uIERyYXdJY29uKCk6IGRldWdnaW5nIHBoYXNlIG9mIGljb24gdHJhbnNwYXJlbmN5IG1hc2suCi0KLQkqIFtsb2FkZXIvbGlicmFyeS5jXQotCW5ldyBmaWxlIGZvciBuZXdzIGZ1bmN0aW9ucyBMb2FkTGlicmFyeSgpICYgRnJlZUxpYnJhcnkoKS4KLQotCSogW3N5c3Jlcy5kbGxdCi0JUmVzb3VyY2VzIG9ubHkgMTZiaXRzIERMTCBmb3IgU3lzdGVtIFJlc291cmNlcywgaWNvbnMsIGV0Yy4uLgotCi1TdW4gTm92IDE0IDE0OjM5OjA2IDE5OTMgIGp1bGxpYXJkQGRpLmVwZmwuY2ggKEFsZXhhbmRyZSBKdWxsaWFyZCkKLQotCSogW2luY2x1ZGUvZGlhbG9nLmhdIFt3aW5kb3dzL2RpYWxvZy5jXQotCVNpbXBsaWZpZWQgZGlhbG9nIHRlbXBsYXRlIHBhcnNpbmcuCi0JSW1wbGVtZW50ZWQgRGlhbG9nQm94SW5kaXJlY3QoKS4KLQotCSogW3dpbmRvd3Mvd2luLmNdCi0JRml4ZWQgYnVnIGluIENyZWF0ZVdpbmRvdygpIHdoZW4gYWJvcnRpbmcgd2luZG93IGNyZWF0aW9uLgotCU1vZGlmaWVkIFVwZGF0ZVdpbmRvdygpIHRvIG9ubHkgdXBkYXRlIHZpc2libGUgd2luZG93cy4KLQlJbXBsZW1lbnRlZCBJc1dpbmRvdygpLgotCi1Ob3YgMTQsIDkzIG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKLQotCSogW2NvbnRyb2xzL2xpc3Rib3guY10KLQlMaXN0Ym94IGNvbnRyb2wgd2luZG93IDogbmV3IG1lc3NhZ2VzLgotCi0JKiBbY29udHJvbHMvY29tYm8uY10KLQlDb21ibyBib3ggY29udHJvbCB3aW5kb3cgOiBuZXcgbWVzc2FnZXMuCi0KLQkqIFttaXNjL21lc3NhZ2UuY10KLQlNb3ZlZCBzdHViIE1lc3NhZ2VCb3goKSB0byB0aGlzIG5ldyBmaWxlLgotCUltcGxlbWVudGVkIG9mIGEgY2FsbGJhY2ssIG5vdyBNZXNzYWdlQm94IHNob3cgYSB3aW5kb3cuCi0KLQkqIFtsb2FkZXIvcmVzb3VyY2UuY10KLQlOZXcgZnVuY3Rpb24gRGVzdHJveUljb24oKQotCU5ldyBmdW5jdGlvbiBEZXN0cm95Q3Vyc29yKCkKLQlGaWxsZWQgc3R1YiBMb2FkSWNvbigpCi0JRmlsbGVkIHN0dWIgTG9hZEN1cnNvcigpCi0JQnVnIGZpeGVkIGluIEZpbmRSZXNvdXJjZUJ5TmFtZSgpIDogbWlzc2luZyBsc2VlaygpLgotCi0JKiBbb2JqL2RpYi5jXQotCU5ldyBmdW5jdGlvbiBEcmF3SWNvbigpCi0KLQkqIFt3aW5kb3dzL3dpbi5jXQotCU5ldyBmdW5jdGlvbiBDbG9zZVdpbmRvdygpCi0JTmV3IGZ1bmN0aW9uIE9wZW5JY29uKCkKLQlOZXcgZnVuY3Rpb24gSXNJY29uaWMoKQotCU5ldyBGdW5jdGlvbiBGaW5kV2luZG93KCkKLQotU3VuIE5vdiAxNCAwODoyNzoxOSAxOTkzICBLYXJsIEd1ZW50ZXIgV3VlbnNjaCAoaHoyMjV3dUB1bmlkdWkudW5pLWR1aXNidXJnLmRlKQotCi0JKiBbbG9hZGVyL3NlbGVjdG9yLmNdCi0JV3JvdGUgQWxsb2NDU3RvRFNBbGlhcygpIGFuZCBBbGxvY0RTdG9DU0FsaWFzKCkKLQotU3VuIE5vdiAxNCAwODoyNzoxOSAxOTkzICBCb2IgQW1zdGFkdCAgKGJvYiBhdCBhbXNjb25zKQotCi0JKiBbbG9hZGVyL3NlbGVjdG9yLmNdCi0JV3JvdGUgQWxsb2NTZWxlY3RvcigpIGFuZCBQcmVzdG9DaGFuZ29TZWxlY3RvcigpLiAgWVVLIQotCi1TYXQgTm92IDEzIDEzOjU2OjQyIDE5OTMgIEJvYiBBbXN0YWR0ICAoYm9iIGF0IGFtc2NvbnMpCi0KLQkqIFtsb2FkZXIvcmVzb3VyY2UuY10KLQlXcm90ZSBGaW5kUmVzb3VyY2UoKSwgTG9hZFJlc291cmNlKCksIExvY2tSZXNvdXJjZSgpLAotCWFuZCBGcmVlUmVzb3VyY2UoKQotCi0JKiBbaW5jbHVkZS9zZWdtZW0uaF0gW2xvYWRlci9zZWxlY3Rvci5jXSBbbG9hZGVyL3NpZ25hbC5oXQotCUNoYW5nZWQgc2VsZWN0b3IgYWxsb2NhdGlvbiBtZXRob2QuCi0KLVN1biBOb3YgMTAgMDg6Mjc6MTkgMTk5MyAgS2FybCBHdWVudGVyIFd1ZW5zY2ggKGh6MjI1d3VAdW5pZHVpLnVuaS1kdWlzYnVyZy5kZSkKLQotCSogW2lmMTYzMi9jYWxsYmFjay5jIGlmMTYzMi9jYWxsLlMgaWYxNjMyL3VzZXIuc3BlY10gCi0JYWRkZWQgQ2F0Y2ggKEtFUk5FTC41NSkgYW5kIFRocm93IChLRVJORUwuNTYpCi0JCi1Ob3YgNywgOTMgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQotCi0JKiBbY29udHJvbHMvc2Nyb2xsLmNdCi0JU2Nyb2xsIGJhciBjb250cm9sIHdpbmRvdwotCQlCdWcgcmVzb2x2ZWQgOiBQYWludGluZyBtZXNzYWdlIGJlZm9yZSBzY3JvbGwgdmlzaWJsZS4KLQotCSogW2NvbnRyb2xzL2xpc3Rib3guY10KLQlMaXN0Ym94IGNvbnRyb2wgd2luZG93Ci0JCURlc3Ryb3kgY2xlYW51cC4KLQotCSogW2NvbnRyb2xzL2NvbWJvLmNdCi0JQ29tYm8gYm94IGNvbnRyb2wgd2luZG93Ci0JCURlc3Ryb3kgY2xlYW51cC4KLQotCSogW2NvbnRyb2xzL2J1dHRvbi5jXQotCQlHZXRDaGVjayBNZXNzYWdlIG5vdyByZXR1cm4gaXMgc3RhdGUuCi0KLQkqIFt3aW5kb3dzL3dpbi5jXQotCU5ldyBmdW5jdGlvbiBJc1dpbmRvd1Zpc2libGUoKQotCi1Nb24gTm92ICAxIDE0OjQwOjIxIDE5OTMgIGp1bGxpYXJkQGRpLmVwZmwuY2ggKEFsZXhhbmRyZSBKdWxsaWFyZCkKLQotCSogW2lmMTYzMi91c2VyLnNwZWNdCi0JUmVtb3ZlZCBzb21lIGR1cGxpY2F0ZSBlbnRyaWVzLgotCi0JKiBbaW5jbHVkZS9kaWFsb2cuaF0gW3dpbmRvd3MvZGlhbG9nLmNdCi0JSW1wbGVtZW50ZWQgZGlhbG9nIHVuaXRzIGFuZCBmb250cy4KLQlBZGRlZCBwcmVsaW1pbmFyeSBsb2FkaW5nIG9mIGRpYWxvZyByZXNvdXJjZXMuCi0JUHJlbGltaW5hcnkgaW1wbGVtZW50YXRpb24gb2YgRGlhbG9nQm94KCkuCi0JSW1wbGVtZW50ZWQgR2V0L1NldERsZ0l0ZW0qIGZ1bmN0aW9ucy4KLQotCSogW3dpbmRvd3Mvd2luLmNdCi0JSW1wbGVtZW50ZWQgV01fUEFSRU5UTk9USUZZIG1lc3NhZ2UuCi0JSW1wbGVtZW50ZWQgQ3JlYXRlV2luZG93RXgoKSBhbmQgR2V0V2luZG93KCkuCi0JQ29tcGxldGVkIERlc3Ryb3lXaW5kb3coKS4KLQotTW9uIE5vdiAgMSAxODoxOTozNCAxOTkzICBFcmlrIEJvcwotCi0JKiBbbG9hZGVyL3NpZ25hbC5jXQotCUFkZGVkIHN1cHBvcnQgZm9yIGludCAweDExICYgMHgxMi4KLQotICAgICAgICAqIFtsb2FkZXIvaW50MjEuY10KLQlJbXByb3ZlZCBmdW5jdGlvbiBoYW5kbGluZy4KLQotU3VuIE9jdCAzMSAxMjozODowOSAxOTkzICBEYXZpZCBNZXRjYWxmZSA8ZGF2aWRAcHJpc20uZGVtb24uY28udWs+Ci0KLQkqIFtvYmplY3RzL2ZvbnQuY10KLQlJbXBsZW1lbnRlZCBHZXRDaGFyV2lkdGgoKS4KLQotV2VkIE9jdCAyNyAwOTo1NjowNiAxOTkzICBKb2huIEJyZXphayA8YnJlemFrQGNoLmhwLmNvbT4KLQotCSogW01ha2VmaWxlXQotICAgICAgICBVc2UgR05VIG1hbGxvYy4KLQotCSogW2luY2x1ZGUvaW50MjEuaCBpbmNsdWRlL3dpbmUuaF0KLSAgICAgICAgQ2hhbmdlIHNjX2VmbGFncyB0byBzY19lZmwgLgotCi0JKiBbaW5jbHVkZS93aW5lLmhdCi0gICAgICAgIEZpeCBtaXNwbGFjZWQgI2VuZGlmCi0gICAgICAgIEluY2x1ZGUgPHNpZ25hbC5oPiBmb3IgTmV0QlNECi0KLQkqIFtsb2FkZXIvaW50MjEuY10KLSAgICAgICAgRG9uJ3QgaW5jbHVkZSA8c3lzL3Zmcy5oPiBpbiBOZXRCU0QKLSAgICAgICAgRG8gaW5jbHVkZSA8c3lzL21vdW50Lmg+IGluIE5ldEJTRAotICAgICAgICBDbGVhbnVwIHNvbWUgbGludC4KLQotTW9uIE9jdCAyNiAxNzo1OTowMSAxOTkzICBFcmlrIEJvcwotCi0gICAgICAgICogW2luY2x1ZGUvaW50MjEuaF0KLSAgICAgICAgQWRkZWQuCi0KLSAgICAgICAgKiBbbG9hZGVyL2ludDIxLmNdCi0gICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIG1hbnkgZG9zIGludHMuCi0KLSAgICAgICAgKiBbbWlzYy9maWxlLmNdIFtpbmNsdWRlL2ZpbGVzLmhdCi0gICAgICAgIE1vdmVkIE9QRU5fTUFYIGFuZCBEb3NEcml2ZVN0cnVjdCB0byBmaWxlcy5oLgotCi1TdW4gT2N0IDI0IDEzOjM2OjUwIDE5OTMgIERhdmlkIE1ldGNhbGZlIDxkYXZpZEBwcmlzbS5kZW1vbi5jby51az4KLQotCSogW2NvbnRyb2xzL2J1dHRvbi5jXQotCUltcGxlbWVudGVkIENIRUNLQk9YLCBBVVRPQ0hFQ0tCT1gsIDNTVEFURSwgQVVUTzNTVEFURSwKLQlSQURJT0JVVFRPTiwgQVVUT1JBRElPQlVUVE9OLCBHUk9VUEJPWCBjb250cm9scywgdG9nZXRoZXIgd2l0aAotCWEgcHJlbGltaW5hcnkgVVNFUkJVVFRPTiBjb250cm9sLgotCi0JKiBbb2JqZWN0cy90ZXh0LmNdCi0JQ29ycmVjdGVkIGJ1Z3MgaW4gVEVYVF9OZXh0TGluZSgpIGFuZCBhZGRlZCBoYW5kbGluZyBvZiBwcmVmaXgKLQljaGFyYWN0ZXIuCi0KLQkqIFtjb250cm9scy9idXR0b24uY10KLQlEaXNhYmxlZCBmb2N1cyBoYW5kbGluZyBieSBjb21tZW50aW5nIG91dCBTZXRGb2N1cygpIGNhbGxzIHVudGlsCi0Jc2VyaW91cyBidWcgY2FuIGJlIGZvdW5kLgotCi1PY3QgIDIwLCA5MyBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCi0KLQkqIFtjb250cm9scy9saXN0Ym94LmNdCi0JTGlzdGJveCBjb250cm9sIHdpbmRvdwotCQlQYWludGluZyBjbGVhbnVwLCBuZXcgbWVzc2FnZXMgcHJvY2Vzc2VkLgotCi0JKiBbY29udHJvbHMvc2Nyb2xsLmNdCi0JU2Nyb2xsIGJhciBjb250cm9sIHdpbmRvdwotCQlQYWludGluZyBjbGVhbnVwLgotCi0JKiBbY29udHJvbHMvY29tYm8uY10KLQlDb21ibyBib3ggY29udHJvbCB3aW5kb3cKLQkJUGFpbnRpbmcgY2xlYW51cC4KLQotVHVlIE9jdCAxMiAxNzo1MDoxMSAxOTkzICBqdWxsaWFyZEBkaS5lcGZsLmNoIChBbGV4YW5kcmUgSnVsbGlhcmQpCi0KLQkqIFtvYmplY3RzL2NvbG9yLmNdIFtvYmplY3RzL3BhbGV0dGUuY10gW3dpbmRvd3Mvc3lzY29sb3IuY10KLQlCZXR0ZXIgc3VwcG9ydCBmb3IgdGhlIHByaXZhdGUgY29sb3IgbWFwLgotCVVzaW5nIGEgcHJpdmF0ZSBtYXAgaXMgbm93IHRoZSBkZWZhdWx0LgotCi0JKiBbd2luZG93cy93aW4uY10KLQlCdWcgZml4LgotCi0JKiBbaW5jbHVkZS9kaWFsb2cuaF0gW3dpbmRvd3MvZGlhbG9nLmNdCi0JSW1wbGVtZW50ZWQgQ3JlYXRlRGlhbG9nKigpIGFuZCBJc0RpYWxvZ01lc3NhZ2UoKS4KLQotCSogW21pc2MveHQuY10gW3dpbmRvd3MvZGVmd25kLmNdCi0JTW92ZWQgRGVmV2luZG93UHJvYygpIHRvIGRlZnduZC5jLgotCUFkZGVkIFdNX05DQ1JFQVRFLCBXTV9OQ0RFU1RST1kgYW5kIFdNX0NUTENPTE9SIGhhbmRsaW5nLgotCi0JKiBbd2luZG93cy9kZWZkbGcuY10KLQlTdGFydGVkIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBEZWZEbGdQcm9jKCkuCi0KLQkqIFt3aW5kb3dzL3dpbi5jXQotCUFkZGVkIFdNX05DQ1JFQVRFIGFuZCBXTV9OQ0RFU1RST1kgbWVzc2FnZXMuCi0JSW1wbGVtZW50ZWQgSXNDaGlsZCgpLgotCi1UdWUgT2N0IDEyIDE3OjUwOjIwIDE5OTMgIERhdmlkIE1ldGNhbGZlIDxkYXZpZEBwcmlzbS5kZW1vbi5jby51az4KLQotCSogW3dpbmRvd3MvZm9jdXMuY10KLQlJbXBsZW1lbnRlZCBHZXRGb2N1cygpIGFuZCBTZXRGb2N1cygpLgotCi0JKiBbd2luZG93cy9ldmVudC5jXQotCUFkZGVkIHByb2Nlc3Npbmcgb2YgRm9jdXNJbiBhbmQgRm9jdXNPdXQgZXZlbnRzLgotCi0JKiBbd2luZG93cy9ncmFwaGljcy5jXQotCUFkZGVkIERyYXdGb2N1c1JlY3QoKS4KLQotU2F0IE9jdCAgOSAxNDozNjo1NyAxOTkzICBFcmlrIEJvcwotCi0JKiBbbG9hZGVyL2ludDFhLmNdCi0JQWRkZWQgbW9yZSBmdW5jdGlvbiBoYW5kbGluZy4KLQotV2VkIE9jdCAgNiAxMjoyMToyMiAxOTkzICBFcmlrIEJvcwotCi0JKiBbbG9hZGVyL3NpZ25hbC5jXQotCVNwbGl0IHNpZ25hbC5jIGludG8gaW50MWEuYywgaW50MjEuYyBhbmQgc2lnbmFsLmMuCi0KLVR1ZSBPY3QgIDUgMjI6MTI6NDAgMTk5MyAgRGF2aWQgTWV0Y2FsZmUKLQotCSogW2NvbnRyb2xzL3N0YXRpYy5jXSBbY29udHJvbC93aWRnZXRzLmNdCi0JU3RhdGljIGNvbnRyb2wgY2xhc3MuCi0KLQkqIFtvYmplY3RzL3RleHQuY10KLQlBZGRlZCBwcm9jZXNzaW5nIG9mIGFkZGl0aW9uYWwgRFRfIGZsYWdzIHRvIERyYXdUZXh0KCkuCi0KLQkqIFt3aW5kb3dzL3dpbi5jXSBbbWlzYy94dC5jXQotCUFkZGVkIFNldFdpbmRvd1RleHQoKSBhbmQgV01fU0VUVEVYVCBwcm9jZXNzaW5nLgotCi1UdWUgT2N0ICA1IDIyOjEyOjQwIDE5OTMgIE1hcnRpbiBBeW90dGUKLQotCSogW2NvbnRyb2xzL2xpc3Rib3guY10KLQlMaXN0Ym94IGNvbnRyb2wgd2luZG93Ci0KLQkqIFtjb250cm9scy9zY3JvbGwuY10KLQlTY3JvbGwgYmFyIGNvbnRyb2wgd2luZG93Ci0KLQkqIFtjb250cm9scy9jb21iby5jXQotCUNvbWJvIGJveCBjb250cm9sIHdpbmRvdwotCi0JKiBbaW5jbHVkZS9jb21iby5oXQotCUNvbWJvIGJveCBkZWZpbml0aW9ucwotCi0JKiBbaW5jbHVkZS9saXN0Ym94LmhdCi0JTGlzdGJveCBkZWZpbml0aW9ucwotCi0JKiBbaW5jbHVkZS9zY3JvbGwuaF0KLQlTY3JvbGwgYmFyIGRlZmluaXRpb25zCi0KLVNhdCBPY3QgIDIgMDk6MzU6NTQgMTk5MyAgQm9iIEFtc3RhZHQgIChib2IgYXQgcG9vaCkKLQotCSogW2lmMTYzMi9jYWxsYmFjay5jXQotCUZpeGVkIGJ1ZyBpbiBNYWtlUHJvY0luc3RhbmNlKCkuCi0KLQkqIFtkZWJ1Z2dlci9pbmZvLmNdCi0JQ2hhbmdlZCB4L3cgYW5kIHgvYiB0byBkaXNwbGF5IGluIGhleC4KLQotCSogW2RlYnVnZ2VyL2kzODYtcGluc24uY10KLQlBZGRlZCBjb2RlIHRvIHByb3Blcmx5IHVuYXNzZW1ibGUgMTYtYml0IGluZGV4aW5nLgotCi1GcmkgT2N0ICAxIDA4OjI5OjA1IDE5OTMgIEJvYiBBbXN0YWR0ICAoYm9iIGF0IHBvb2gpCi0KLQkqIFtsb2FkZXIvZmlsZXMuY10gW21pc2MvcHJvZmlsZS5jXQotCVN5c3RlbSBpbml0aWFsaXphdGlvbiBmaWxlIGlzIG5vdyBjYWxsZWQgIndpbmUuaW5pIiBhbmQgY2FuCi0JYmUgbG9jYXRlZCBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnksIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnksCi0Jb3IgYW55IGRpcmVjdG9yaWVzIHNwZWNpZmllZCBpbiB0aGUgV0lORVBBVEggZW52aXJvbm1lbnQgdmFyaWFibGUuCi0KLQkqIFt0b29scy9idWlsZC5jXSBbaWYxNjMyL2NhbGwuU10gW2luY2x1ZGUvcmVnZnVuYy5oXQotCUNoYW5nZWQgcmVnaXN0ZXIgZnVuY3Rpb24gc3RhY2sgdG8gbWF0Y2ggc2lnY29udGV4dCBzdHJ1Y3R1cmUuCi0KLVRodSBTZXAgMzAgMjI6MzA6MjEgMTk5MyAgQm9iIEFtc3RhZHQgIChib2IgYXQgcG9vaCkKLQotCSogW2xvYWRlci9maWxlcy5jXQotCUNyZWF0ZWQgZnVuY3Rpb24gdG8gc2VhcmNoIGEgcGF0aCBmb3IgZmlsZXMgdG8gbG9hZC4KLQotCSogW2xvYWRlci93aW5lLmNdCi0JTW9kaWZpZWQgZXhlIGFuZCBkbGwgZmlsZSBsb2FkaW5nIHRvIHNlYXJjaCB0aHJvdWdoIHBhdGgKLQlzcGVjaWZpZWQgYnkgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFdJTkVQQVRILgotCi1UaHUgU2VwIDMwIDIyOjMwOjIxIDE5OTMgIEVyaWMgWW91bmdkYWxlCi0KLQkqIFtsb2FkZXIvc2lnbmFsLmNdCi0JQnVnIGZpeC4KLQotVGh1IFNlcCAzMCAyMjozMDoyMSAxOTkzICBKb2huIEJyZXphawotCi0JKiBbZGVidWdnZXIvZGJnLnldIFtkZWJ1Z2dlci9kZWJ1Zy5sXSBbZGVidWdnZXIvZHRlc3QuY10gCi0JICBbZGVidWdnZXIvb2JzdGFjay5oXQotCVVwZGF0ZXMgdG8gYWxsb3cgZGVidWdnZXIgdG8gZnVuY3Rpb24gdW5kZXIgTmV0QlNELgotCi1UdWUgU2VwIDI4IDE5OjU5OjIxIDE5OTMgIERhdmlkIE1ldGNhbGZlCi0KLQkqIFt3aW5kb3dzL3dpbi5jXQotCUltcGxlbWVudGVkIHN1cHBvcnQgZm9yIHdpbmRvd3Mgd2l0aCBubyBib3JkZXJzLiAgQWRkZWQKLSAJR2V0UGFyZW50KCksIEdldERsZ0N0cmxJRCgpLCBHZXRXaW5kb3dUZXh0KCkgYW5kCi0JR2V0V2luZG93VGV4dExlbmd0aCgpIGZ1bmN0aW9ucy4KLQotCSogW21pc2MveHQuY10KLQlBZGRlZCBwcm9jZXNzaW5nIG9mIFdNX0dFVFRFWFQgYW5kIFdNX0dFVFRFWFRMRU5HVEggbWVzc2FnZXMKLQl0byBEZWZXaW5kb3dQcm9jIGFuZCBJbXBsZW1lbnRlZCBNZXNzYWdlQmVlcCgpLgotCi0JKiBbd2luZG93cy9zeXNjb2xvci5jXQotCUFkZGVkIHByZWxpbWluYXJ5IHN5c3RlbSBjb2xvciBzdXBwb3J0LgotCi0JKiBbY29udHJvbHMvYnV0dG9uMS5jXQotCU1vZHMgdG8gbmV3IGJ1dHRvbiBjb250cm9sIGFuZCBpbnRlZ3JhdGlvbiB3aXRoIFdpbmUuCi0KLVR1ZSBTZXAgMjggMTk6NTk6MjEgMTk5MyAgSm9oYW5uZXMgUnVzY2hlaW5za2kKLQotCSogW2NvbnRyb2xzL2J1dHRvbjEuY10KLQlOZXcgYnV0dG9uIGNvbnRyb2wgdXNpbmcgR0RJIGZ1bmN0aW9ucy4KLQkKLVR1ZSBTZXAgMjggMTk6NTk6MjEgMTk5MyAgRXJpYyBZb3VuZ2RhbGUKLQotCSogW2RlYnVnZ2VyLypdCi0JQWRkZWQgZGVidWdnaW5nIGNhcGFiaWxpdGllcyB0byBXaW5lCi0KLVNhdCBTZXAgMjUgMTM6MjI6NTAgMTk5MyAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAZGkuZXBmbC5jaCkKLQotCSogW29iamVjdHMvcmVnaW9uLmNdCi0JQnVnIGZpeAotCi1GcmkgU2VwIDI0IDA3OjM1OjExIDE5OTMgIEJvYiBBbXN0YWR0ICAoYm9iIGF0IHBvb2gpCi0KLQkqIFt0b29scy9idWlsZC5jXQotCUNoYW5nZWQgdGhlIGVudHJ5IHBvaW50IGNvZGUgdG8gcmVkdWNlIHRoZSBzdGFuZGFyZCBlbnRyeQotCXBvaW50IHNpemUgZnJvbSAyMiBieXRlcyB0byAxMCBieXRlcy4gIFRoaXMgbGVhdmVzIGFib3V0Ci0JNDAwMCBmcmVlIGVudHJ5IHBvaW50cyBpbnN0ZWFkIG9mIHRoZSA4MDAgaW4gdmVyc2lvbiAwLjQuMi4KLQotCSogW2xvYWRlci9yZXNvdXJjZS5jXQotCVJld3JvdGUgZnVuY3Rpb25zIHRvIGFsbG93IGxvYWRpbmcgb2YgcmVzb3VyY2VzIGZyb20gYW55Ci0JRExMLgotCi0JKiBbbG9hZGVyL3dpbmUuY10gW2luY2x1ZGUvd2luZS5oXQotCUFkZGVkIGZ1bmN0aW9ucyBHZXRGaWxlbmFtZUZyb21JbnN0YW5jZSgpIGFuZCBHZXRGaWxlSW5mbygpCi0JdG8gc2VhcmNoIGZvciBhIGxvYWRlZCBmaWxlIGJhc2VkIG9uIGl0cyBpbnN0YW5jZSBoYW5kbGUuCi0JQWRkZWQgYSBmaWVsZCBpbiBzdHJ1Y3Qgd19maWxlcyB0byBtYWtlIHNlYXJjaGluZyBieSBhbiBpbnN0YW5jZQotCWhhbmRsZSBmYXN0ZXIuCi0KLVR1ZSBTZXAgMjEgMDk6NTc6MDEgMTk5MyAgbWlndWVsQHJveGFubmUubnVjbGVjdS51bmFtLm14IChNaWd1ZWwgZGUgSWNhemEpCi0KLQkqIFttaXNjL3Byb2ZpbGUuY10KLQlJbXBsZW1lbnRhdGlvbiBvZiAuSU5JIGZpbGUgaGFuZGxpbmcKLQotTW9uIFNlcCAyMCAxMDo1NDozMiAxOTkzICBEYXZpZCBNZXRjYWxmZQotCi0JKiBbbWlzYy9wcm9maWxlLmMub2xkXQotCUltcGxlbWVudGF0aW9uIG9mIC5JTkkgZmlsZSBoYW5kbGluZwotCi1Nb24gU2VwIDIwIDEwOjU0OjMyIDE5OTMgIEpvaG4gQnJlemFrCi0KLQkqIFtjb250cm9scy9XaW5CdXR0b24uY10KLQlCdWcgZml4IHdpdGggY2FsbCB0byBYdFZhU2V0VmFsdWVzLgotCi1Nb24gU2VwIDIwIDEwOjU0OjMyIDE5OTMgIEFsZXhhbmRyZSBKdWxsaWFyZAotCi0JKiBbd2luZG93cy93aW4uY10KLQlRdWljayBwYXRjaCB0byBnZXQgY29sb3JtYXBzIHRvIHdvcmsgd2l0aCBidXR0b24gd2lkZ2V0LgotCi1Nb24gU2VwIDIwIDAyOjQyOjU0IDE5OTMgICAgKHluZ3ZpQGhhZnJvLmlzKQotCi0JKiBtaXNjL2tleWJvYXJkLmM6IAotCUlmZGVmZWQgb3V0IHNvbWUgYm9ndXMgQW5zaTwtPk9lbSBjb252ZXJzaW9uIGZ1bmN0aW9ucwotCi0JKiBtaXNjL2xzdHIuYzogCi0JTmV3IGZpbGUgd2l0aCBzdHJpbmcgZnVuY3Rpb25zIGxpa2UgbHN0ciogSXNDaGFyKiAqQW5zaSogCi0KLVdlZCBTZXAgMTUgMjA6MzU6MTAgMTk5MyAgSm9obiBCcmV6YWsKLQotCSogW2xvYWRlci9zaWduYWwuY10KLQlBZGRpdGlvbmFsIGNoYW5nZXMgdG8gc3VwcG9ydCBOZXRCU0QuCi0KLVdlZCBTZXAgMTUgMjI6MTk6MjIgMTk5MyAgTWFydGluIEF5b3R0ZQotCi0JKiBbd2luZG93cy9ncmFwaGljcy5jXQotCUFkZGVkIEZyYW1lUmVjdCBmdW5jdGlvbgotCi1UdWUgU2VwIDE0IDEzOjU0OjQ1IDE5OTMgIEFsZXhhbmRyZSBKdWxsaWFyZAotCi0JKiBbb2JqZWN0cy9jb2xvci5jXSBbb2JqZWN0cy9wYWxldHRlLmNdCi0JUHJlbGltaW5hcnkgc3VwcG9ydCBmb3IgcHJpdmF0ZSBjb2xvciBtYXAuCi0KLQkqIFt3aW5kb3dzL2NsYXNzLmNdCi0JSW1wbGVtZW50ZWQgQ1NfQ0xBU1NEQyBzdHlsZS4KLQotCSogW3dpbmRvd3MvZGNlLmNdCi0JTW92ZWQgRENFcyB0byBVU0VSIGhlYXAuCi0JSW1wbGVtZW50ZWQgY2xhc3MgYW5kIHdpbmRvdyBEQ3MuCi0KLQkqIFt3aW5kb3dzL2V2ZW50LmNdCi0JSW1wbGVtZW50ZWQgQ1NfREJMQ0xLUyBzdHlsZS4KLQotCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KLQlCdWcgZml4IGluIFNldFBpeGVsKCkuCi0KLQkqIFt3aW5kb3dzL3dpbi5jXQkKLQlJbXBsZW1lbnRlZCBDU19PV05EQyBzdHlsZS4KLQlJbXBsZW1lbnRlZCBHZXQvU2V0V2luZG93TG9uZygpLgotCi0JKiBbY29udHJvbHMvbWVudS5jXSBbd2luZG93cy9jbGFzcy5jXSBbd2luZG93cy9jbGlwcGluZy5jXSAKLQkgIFt3aW5kb3dzL2RjZS5jXSBbd2luZG93cy9tZXNzYWdlLmNdIFt3aW5kb3dzL3dpbi5jXQkKLQlNb3ZlZCB3aW5kb3dzIGZyb20gZ2xvYmFsIGhlYXAgdG8gVVNFUiBoZWFwLgotCi1Nb24gU2VwIDEzIDA1OjAwOjExIDE5OTMgIEVyaWMgWW91bmdkYWxlCi0KLQkqIFtNYWtlZmlsZV0gW2lmMTYzMi9yZWxheS5jXSBbaW5jbHVkZS9kbGxzLmhdIFtzZWxlY3Rvci5jXQotCSAgW2xvYWRlci93aW5lLmNdIFt0b29scy9idWlsZC5jXQotCUFkZGVkIGFiaWxpdHkgdG8gZ2VuZXJhdGUgbWlzc2luZyBmdW5jdGlvbnMgc3RhdGlzdGljcy4KLQotTW9uIFNlcCAxMyAxMjowOTo0NyAxOTkzICBTY290dCBBLiBMYWlyZCAgKHNjb3R0QGN1cmx5KQotCi0JKiBbV0lOMzEtQVBQTEVUU10KLQlBZGRlZCBuZXcgZmlsZS4KLQotCSogW2lmMTYzMi9rZXJuZWwuc3BlY10KLQlBZGRlZCBkZWZpbml0aW9ucyBmb3IgR2V0UHJvZmlsZXtJbnQsU3RyaW5nfSBhbmQgU2V0SGFuZGxlQ291bnQuCi0KLQkqIFtpZjE2MzIva2V5Ym9hcmQuc3BlY10KLQlDcmVhdGVkIGludGVyZmFjZSBzcGVjaWZpY2F0aW9uIGZvciBLZXlib2FyZCBkcml2ZXIgRExMLgotCi0JKiBbaWYxNjMyL3JlbGF5LmNdCi0JQWRkZWQga2V5Ym9hcmQuZGxsIHRvIGxpc3Qgb2YgaW5jbHVkZWQgRExMcy4KLQotCSogW2lmMTYzMi91c2VyLnNwZWNdCi0JQWRkZWQgTG9hZEFjY2VsZXJhdG9ycyBkZWZpbml0aW9uLgotCi0JKiBbbG9hZGVyL3Jlc291cmNlLmNdCi0JQWRkZWQgTG9hZEFjY2VsZXJhdG9ycyBzdHViLgotCi0JKiBbbWlzYy9maWxlLmNdCi0JQ2hhbmdlZCBPcGVuRmlsZSwgYW5kIGFkZGVkIFNldEhhbmRsZUNvdW50IChmb3Igd2luZmlsZS5leGUpCi0KLQkqIFttaXNjL2tleWJvYXJkLmNdCi0JQWRkZWQga2V5Ym9hcmQgY29kZS4KLQotCSogW21pc2MvcHJvZmlsZS5jXSBbbWlzYy94dC5jXQotCU1vdmVkIEdldFByaXZhdGVQcm9maWxlKiBjb21tYW5kcyBoZXJlLCBhbmQgYWRkZWQgR2V0UHJvZmlsZSoKLQljb21tYW5kcy4KLQotTW9uIFNlcCAxMyAxMDoyNDozNyAxOTkzICBBbmRyZXcgQnVsaGFrCi0KLQkqIFt3aW5kb3dzL3V0aWxpdHkuY10KLQlJbXBsZW1lbnRlZCBNdWxEaXYoKSwgT3V0cHV0RGVidWdTdHJpbmcoKSBhbmQgd3ZzcHJpbnRmKCkKLQotRnJpIFNlcCAxMCAwOToxMzozMCAxOTkzICBKb2huIEJyZXphawotCi0JKiBbKi9NYWtlZmlsZV0KLQlDcmVhdGVkIHBhdGNoIHRvIGFsbG93IEJTRCBtYWtlIHRvIGJ1aWxkIHdpbmUuCi0KLQkqIFt3aW5kb3dzL3dpbi5jXQotCUZpeGVkIE5VTEwgcG9pbnRlciByZWZlcmVuY2UuCi0KLQkqIFt3aW5kb3dzL21lc3NhZ2UuY10gW21pc2MveHQuY10KLQlEZWZpbmVkIEhaIHRvIGhhbmRsZSBzeXN0ZW0gc3BlY2lmaWMgdGltaW5nLgotCi0JKiBbd2luZG93cy9ncmFwaGljcy5jXQotCVVzZSBNX1BJIGlzIFBJCi0KLQkqIFtvYmplY3RzL3BhbGxldGUuY10KLQlOZXRCU0QgZG9lcyBub3QgaGF2ZSAvdXNyL2luY2x1ZGUvdmFsdWVzLmggYW5kIE1BWElOVCBpcyBJTlRfTUFYLgotCi0JKiBbZHVtcC5jXSBbbGR0LmNdIFt3aW5lLmNdCi0JaWZkZWYnZWQgbGludXggaGVhZGVycyBmb3IgbGludXggY29tcGlsZS4KLQotCSogW2xvYWRlci9sZHRsaWIuY10KLQlBZGQgTmV0QlNEIHN5c3RlbSBjYWxscyB3aGVuIGNvbXBpbGVkIG9uIHRoYXQgc3lzdGVtLgotCi0JKiBbbG9hZGVyL3NlbGVjdG9yLmNdCi0JVXNlIG1tYXAoTUFQX0FOT04sIC4uLikgZm9yIE5ldEJTRC4KLQotCSogW2lmMTYzMi9jYWxsLlNdCi0JRml4ZWQgc2VsZWN0b3IgYXNzdW1wdGlvbnMuCi0KLVRodSBTZXAgOSAyMDowMTozNyAxOTkzICBEYXZpZCBNZXRjYWxmZQotCi0JKiBbY29udHJvbHMvV2luQnV0dG9uKl0gW2NvbnRyb2xzL2J1dHRvbi5jXSBbY29udHJvbHMvd2lkZ2V0LmNdCi0gIAkgIFt3aW5kb3dzL3dpbi5jXSBbd2luZG93cy9jbGFzcy5jXQotCUFkZGVkIDNEIGJ1dHRvbiBjb250cm9sIGFuZCB0aWVkIGludG8gQ3JlYXRlV2luZG93KCkKLQotVGh1IFNlcCAgOSAwNzozNToyNCAxOTkzICBTY290dCBMYWlyZAotCi0JKiBbaWYxNjMyL3NvdW5kLnNwZWNdCi0JQ3JlYXRlZCBpbnRlcmZhY2Ugc3BlY2lmaWNhdGlvbiBmb3IgU09VTkQgRExMLgotCi0JKiBbaWYxNjMyL3dpbjg3ZW0uc3BlY10KLQlBZGRlZCBtb3JlIGZ1bmN0aW9ucyB0byB0aGUgV0lOODdFTSBETEwgaW50ZXJmYWNlIHNwZWNpZmljYXRpb24KLQotCSogW21pc2MvZW11bGF0ZS5jXQotCUNyZWF0ZWQgc3R1YnMgZm9yIHRoZSBuZXcgbWF0aCBlbXVsYXRpb24gZnVuY3Rpb25zLgotCi0JKiBbbWlzYy9zb3VuZC5jXQotCUNyZWF0ZWQgc3R1YnMgZm9yIHRoZSBTT1VORCBETEwuCi0KLVN1biBTZXAgIDUgMjE6MDI6MTAgMTk5MyAgSm9obiBCdXJ0b24KLQotCSogW2lmMTYzMi9rZXJuZWwuc3BlY10KLQlBZGRlZCBpbnRlcmZhY2Ugc3BlY2lmaWNhdGlvbnMgZm9yIE9wZW5GaWxlLCBfbGNsb3NlLCBfbHJlYWQsIF9sb3BlbiwKLQlhbmQgX2x3cml0ZS4KLQotCSogW2luY2x1ZGUvd2luZG93cy5oXQotCUFkZGVkIE9GXyBtYWNyb3MKLQotCSogW21pc2MvZmlsZS5jXQotCUltcGxlbWVudGVkIE9wZW5GaWxlLCBfbGNsb3NlLCBfbHJlYWQsIF9sb3BlbiBhbmQgX2x3cml0ZS4KLQotRnJpIFNlcCAgMyAxODo0NzowMyAxOTkzICBBbGV4YW5kcmUgSnVsbGlhcmQKLQotICAgICAgICAqIFt3aW5kb3dzL2RjLmNdCi0JQnVnIGZpeAotCi0JKiBbb2JqZWN0cy90ZXh0LmNdCi0JQnVnIGZpeAotCi1GcmkgU2VwICAzIDE4OjQ3OjAzIDE5OTMgIEJvYiBBbXN0YWR0Ci0KLSAgICAgICAgKiBbb2JqZWN0cy9saW5lZGRhLmNdCi0gICAgICAgIEZpbmlzaGVkIExpbmVEREEoKS4KLQotRnJpIFNlcCAgMyAxMTo1MjoxOCAxOTkzICBCb2IgQW1zdGFkdAotCi0JKiBbd2luZG93cy90aW1lci5jXQotCUNoYW5nZWQgdG8gdXNlIENhbGxXaW5kb3dQcm9jKCkgcmF0aGVyIGRpcmVjdGx5IGNhbGxpbmcgY2FsbGJhY2suCi0KLQkqIFt3aW5kb3dzL2V2ZW50LmNdCi0JSW1wbGVtZW50ZWQgU2V0Q2FwdHVyZSgpIGFuZCBSZWxlYXNlQ2FwdHVyZSgpCi0KLQkqIFt3aW5kb3dzL2tleWJvYXJkLmNdCi0JQ3JlYXRlZCBzdHViIGZvciBHZXRLZXlTdGF0ZSgpCi0KLQkqIFtvYmplY3RzL2xpbmVkZGEuY10KLQlDcmVhdGVkIHN0dWIgZm9yIExpbmVEREEoKQotCi0JKiBbaWYxNjMyL2NhbGxiYWNrLmNdCi0JQ3JlYXRlZCBjYWxsYmFjayBoYW5kbGVyIGZvciBMaW5lRERBIGNhbGxiYWNrIHByb2NlZHVyZS4KLQotCSogW2lmMTYzMi9jYWxsYmFjay5jXQotCUNyZWF0ZWQgRnJlZVByb2NJbnN0YW5jZSgpCi0KLUZyaSBTZXAgIDMgMDg6MzY6NTIgMTk5MyAgRGF2aWQgTWV0Y2FsZmUKLQotCSogW2xvYWRlci9zaWduYWwuY10KLQlQYXRjaCB0byBhbmQgY29kZSBmb3IgSU5UIDFBCi0KLVRodSBTZXAgIDIgMDA6MzE6NTQgMTk5MyAgQWxleGFuZHJlIEp1bGxpYXJkCi0KLQkqIFtvYmplY3RzL2ZvbnQuY10gW29iamVjdHMvdGV4dC5jXQotCU1vcmUgdGV4dCBzdXBwb3J0OiBpbXBsZW1lbnRlZCBqdXN0aWZpY2F0aW9uIGFuZCB1bmRlcmxpbmluZy4KLQotCSogW3dpbmRvd3MvY2xpcHBpbmcuY10gW29iamVjdHMvY2xpcHBpbmcuY10KLQlNb3ZlZCBsb3ctbGV2ZWwgY2xpcHBpbmcgZnVuY3Rpb25zIHRvIG9iamVjdHMvY2xpcHBpbmcuYy4KLQotCSogW3dpbmRvd3MvY2xpcHBpbmcuY10gW3dpbmRvd3MvZXZlbnQuY10gW3dpbmRvd3MvbWVzc2FnZS5jXQotCUltcGxlbWVudGVkIHdpbmRvdyB1cGRhdGUgcmVnaW9ucy4KLQotCSogW3dpbmRvd3MvZGMuY10gW29iamVjdHMvZGN2YWx1ZXMuY10KLQlNb3ZlZCBzb21lIGRldmljZS1pbmRlcGVuZGVudCBEQyBmdW5jdGlvbnMgdG8gb2JqZWN0cy9kY3ZhbHVlcy5jLgotCi0JKiBbd2luZG93cy9ncmFwaGljcy5jXQotCUltcGxlbWVudGVkIEludmVydFJlY3QoKSBhbmQgR2V0UGl4ZWwoKS4KLQotU2F0IEF1ZyAyOCAwODo0MDoyMyAxOTkzICBFcmljIFlvdW5nZGFsZQotCi0JKiBbaW5jbHVkZS9uZWV4ZS5oXSBbbG9hZGVyL3dpbmUuY10KLQlBZGRlZCBjb2RlIHRvIGhhbmRsZSByZWxvY2F0aW9uIHR5cGUgNC4KLQotCSogW2xvYWRlci9zaWduYWwuaF0gW2xvYWRlci93aW5lLmNdIFtsb2FkZXIvc2VsZWN0b3IuY10KLQlBZGRlZCBzdXBwb3J0IGZvciBkb3MgaW50ZXJydXB0cy4KLQotVGh1IDI2IEF1ZyAxOToxNTowMCAxOTkzICBFcmljIFlvdW5nZGFsZQotCi0JKiBbbG9hZGVyL3NlbGVjdG9yLmNdCi0JRml4ZWQgYnVnIGRlYWxpbmcgd2l0aCBsb2FkaW5nIERMTHMuCi0KLVRodSBBdWcgMjYgMTk6MjI6NDAgMTk5MyAgQWxleGFuZHJlIEp1bGxpYXJkCi0KLSAgICAgICAgKiBbaW5jbHVkZS9nZGkuaF0gW29iamVjdHMvZm9udC5jXSBbd2luZG93cy9kYy5jXQotICAgICAgICBCZWdpbm5pbmcgb2YgcmVhbCBmb250IHN1cHBvcnQuCi0KLSAgICAgICAgKiBbd2luZG93cy9ncmFwaGljcy5jXQotICAgICAgICBJbXBsZW1lbnRlZCBQYXRCbHQoKS4KLQotICAgICAgICAqIFttZW1vcnkvZ2xvYmFsLmNdCi0gICAgICAgIENvcnJlY3RlZCBhIGJ1ZyB3aXRoIGxpbmtlZCBsaXN0IGhhbmRsaW5nIGluIEdsb2JhbEFsbG9jKCkuCi0KLSAgICAgICAgKiBbb2JqZWN0cy9iaXRtYXAuY10KLSAgICAgICAgQ29ycmVjdGVkIGEgYnVnIGluIEJJVE1BUF9TZWxlY3RPYmplY3QoKS4KLQotVHVlIEF1ZyAyNCAxOToyMjo0MCAxOTkzICBEYXZpZCBNZXRjYWxmZQotCi0gICAgICAgICogW2NvbnRyb2xzL0NvbW1hbmQqXSBbY29udHJvbHMvTGFiZWwqXSBbY29udHJvbHNbTWVudUJ1dHRvKl0KLQkgIFtjb250cm9scy9TbWVNZW51QnV0dCpdCi0JQ2hhbmdlIGNvZGUgdG8gc3VwcG9ydCAmIGFzIGEgc3BlY2lhbCBjaGFyYWN0ZXIgaW4gbWVudSBpdGVtIHRleHQuCi0KLVR1ZSBBdWcgMjQgMTk6MjI6NDAgMTk5MyAgQWxleGFuZHJlIEp1bGxpYXJkCi0KLQkqIFtpbmNsdWRlL2dkaS5oXSBbd2luZG93cy9kYy5jXQotCUhlYXZpbHkgbW9kaWZpZWQgdGhlIERDIHN0cnVjdHVyZSBmb3IgYmV0dGVyIGRldmljZS1pbmRlcGVuZGVuY2UuCi0KLQkqIFtvYmplY3RzL2JpdG1hcC5jXQotCUltcGxlbWVudGVkIGJpdG1hcCBkaW1lbnNpb25zLgotCi0JKiBbd2luZG93cy9kYy5jXSBbd2luZG93cy9kY2UuY10KLQlJbXBsZW1lbnRlZCBEQyBzdGF0ZSBzYXZpbmcgYW5kIHJlc3RvcmluZy4KLQotCSogW3dpbmRvd3MvZGMuY10KLQlJbXBsZW1lbnRlZCBST1AgbW9kZS4KLQotCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KLQlJbXBsZW1lbnRlZCBGaWxsUmVjdCgpLgotCi1Nb24gQXVnIDIzIDIyOjA4OjM0IDE5OTMgIEJvYiBBbXN0YWR0ICAoYm9iIGF0IHBvb2gpCi0KLQkqIFttaXNjL3h0LmNdCi0JRml4ZWQgYnVnIGluIEludmFsaWRhdGVSZWN0KCkuICBTb2xpdGFpcmUgYXR0ZW1wdGVkIHRvCi0JY2xlYXIgd2luZG93IGJlZm9yZSBpdCB3YXMgcmVhbGl6ZWQuCi0KLQkqIFtsb2FkZXIvcmVzb3VyY2UuY10KLQlCZWdhbiByZXdyaXRlIG9mIExvYWRCaXRtYXAoKS4KLQotCSogW2xvYWRlci93aW5lLmNdCi0JRml4ZWQgY29kZSB3aGljaCBzZXQgQXJndiBhbmQgQXJnYyBnbG9iYWwgdmFyaWFibGVzLgotCi0JKiBbbG9hZGVyL3NlbGVjdG9yLmNdCi0JQWRkZWQgY29kZSB0byBzZXQgdXAgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KLQotCSogW2luY2x1ZGUvbmVleGUuaF0KLQlGaXhlZCBlcnJvciBpbiBQU1Agc3RydWN0dXJlLgotCi1UdWUgQXVnIDE3IDIwOjQxOjEyIDE5OTMgIEFsZXhhbmRyZSBKdWxsaWFyZAotCi0JKiBbaW5jbHVkZS9nZGkuaF0gW3dpbmRvd3MvZGMuY10KLQlJbXBsZW1lbnRlZCBkZXZpY2UgY2FwYWJpbGl0aWVzLgotCi0JKiBbb2JqZWN0cy9yZWdpb24uY10KLQlJbXBsZW1lbnRlZCBFcXVhbFJnbigpIGFuZCBDb21iaW5lUmduKCkuCi0KLQkqIFt3aW5kb3dzL2NsaXBwaW5nLmNdCi0JSW1wbGVtZW50ZWQgU2F2ZS9SZXN0b3JlVmlzUmduKCkuCi0KLQkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCi0JSW1wbGVtZW50ZWQgUGFpbnRSZ24oKSBhbmQgRmlsbFJnbigpLgotCi0JKiBbd2luZG93cy9tYXBwaW5nLmNdCi0JSW1wbGVtZW50ZWQgbWFwcGluZyBtb2Rlcy4KLQotVHVlIEF1ZyAxMCAxNDowNzozOCAxOTkzICBBbGV4YW5kcmUgSnVsbGlhcmQKLQotCSogW2lmMTYzMi91c2VyLnNwZWNdIFttaXNjL3JlY3QuY10KLQlJbXBsZW1lbnRlZCByZWN0YW5nbGUgQVBJIGZ1bmN0aW9ucy4KLQotCSogW2lmMTYzMi9nZGkuc3BlY10gW2luY2x1ZGUvZ2RpLmhdIFtvYmplY3RzL3JlZ2lvbi5jXQotCUltcGxlbWVudGVkIHJlZ2lvbnMuCi0KLQkqIFt3aW5kb3dzL2NsYXNzLmNdCi0JQ29ycmVjdGVkIGEgdHlwbyBpbiBVbnJlZ2lzdGVyQ2xhc3MoKS4KLQotCSogW3dpbmRvd3MvY2xpcHBpbmcuY10gW3dpbmRvd3MvZGMuY10KLQlJbXBsZW1lbnRlZCBEQyBjbGlwcGluZyBhbmQgdmlzaWJsZSByZWdpb24uCi0KLVR1ZSBBdWcgMTAgMjA6NTc6NTYgMTk5MyAgQm9iIEFtc3RhZHQgIChib2IgYXQgcG9vaCkKLQotCSogW2NvbnRyb2xzL21lbnUuY10gW3dpbmRvd3Mvd2luLmNdCi0JU2V0TWVudSgpLCBHZXRNZW51KCksIENoZWNrTWVudUl0ZW0oKSBpbXBsZW1lbnRlZAotCi1UaHUgQXVnICA1IDIyOjMzOjIyIDE5OTMgIEJvYiBBbXN0YWR0ICAoYm9iIGF0IHBvb2gpCi0KLQkqIFtjb250cm9scy9tZW51LmNdIFt3aW5kb3dzL3dpbi5jXQotCU1hbnkgaW1wcm92ZW1lbnRzIG1lbnVzLiAgTG9hZE1lbnUoKSBzaG91bGQgd29yay4KLQotV2VkIEF1ZyAgNCAxNDo1NTozNiAxOTkzICBBbGV4YW5kcmUgSnVsbGlhcmQKLQotICAgICAgICAqIFtvYmplY3RzL2RpYi5jXQotICAgICAgICBTdGFydGVkIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBkZXZpY2UtaW5kZXBlbmRlbnQgYml0bWFwcy4KLQotICAgICAgICAqIFtvYmplY3RzL2JpdG1hcC5jXQotICAgICAgICBBZGRlZCBzdXBwb3J0IGZvciBtdWx0aXBsZSBiaXRtYXAgZGVwdGhzLgotCi0gICAgICAgICogW29iamVjdHMvYnJ1c2guY10KLSAgICAgICAgSW1wbGVtZW50ZWQgcGF0dGVybiBicnVzaGVzLgotCi0gICAgICAgICogW3dpbmRvd3MvZGMuY10gW3dpbmRvd3MvZ3JhcGhpY3MuY10KLSAgICAgICAgSW1wbGVtZW50ZWQgc29tZSBHREkgZ3JhcGhpY3MgcHJpbWl0aXZlcy4KLQotVHVlIEF1ZyAgMyAyMToxNjo0NyAxOTkzICBCb2IgQW1zdGFkdCAgKGJvYiBhdCBwb29oKQotCi0JKiBbY29udHJvbHMvbWVudS5jXSBbd2luZG93cy93aW4uY10gW2luY2x1ZGUvbWVudS5oXQotCUNvZGUgdG8gbG9hZCBjbGFzcyBtZW51cyBmcm9tIGV4ZWN1dGFibGUgZmlsZS4KLQotCSogW2lmMTYzMi91c2VyLnNwZWNdCi0JRml4ZWQgc3BlY2lmaWNhdGlvbiBvZiBTZW5kTWVzc2FnZSgpIGFuZCBQb3N0TWVzc2FnZS4KLQotTW9uIEp1bCAyNiAyMTo1MzoyNCAxOTkzICBBbGV4YW5kcmUgSnVsbGlhcmQKLQotCSogW2lmMTYzMi9jYWxsLlNdCi0JQ29ycmVjdGVkIGEgYnVnIGluIEtFUk5FTF9Jbml0VGFzaygpLgotCi0JKiBbaW5jbHVkZS93aW5kb3dzLmhdCi0JQWRkZWQgYSBsb3Qgb2YgY29uc3RhbnRzLgotCi0JKiBbbG9hZGVyL3NlbGVjdG9yLmNdCi0JQ29ycmVjdGVkIGEgYnVnIGluIHNlZ21lbnQgYWxsb2NhdGlvbiBpbiBDcmVhdGVTZWxlY3RvcnMoKS4KLQotCSogW29iamVjdHMvYml0bWFwLmNdCi0JSW1wbGVtZW50ZWQgU2VsZWN0T2JqZWN0KCkgZm9yIGJpdG1hcHMuCi0KLQkqIFtvYmplY3RzL2JydXNoLmNdCi0JSW1wbGVtZW50ZWQgaGF0Y2hlZCBicnVzaGVzIGFuZCBTZWxlY3RPYmplY3QoKS4KLQotCSogW29iamVjdHMvZ2Rpb2JqLmNdCi0JUmVtb3ZlZCBsaW5rZWQgbGlzdCAobm90IG5lZWRlZCkuCi0KLQkqIFtvYmplY3RzL3BhbGV0dGUuY10KLQlJbXBsZW1lbnRlZCBzeXN0ZW0gcGFsZXR0ZSBjcmVhdGlvbiBhbmQgbWlzYy4gcGFsZXR0ZSBBUEkgZnVuY3Rpb25zLgotCi0JKiBbd2luZG93cy90aW1lci5jXQotCUltcGxlbWVudGVkIHRpbWVycy4KLQotCSogW3dpbmRvd3MvZGMuY10KLQlJbXBsZW1lbnRlZCBtZW1vcnkgZGV2aWNlIGNvbnRleHRzLgotCi1UdWUgSnVsIDIwIDEwOjM4OjU5IDE5OTMgIEJvYiBBbXN0YWR0ICAoYm9iIGF0IHBvb2gpCi0KLSAgICAgICAgKiBbZG9zLmNdCi0JU3BsaXQgRE9TM0NhbGwoKSBvdXQgb2Yga2VybmVsLmMuICBBZGRlZCBzdXBwb3J0IGZvciBnZXQgZGF0ZQotCWFuZCB0aW1lIGZ1bmN0aW9ucy4KLQotCSogW2NhbGwuU10KLQlBZGRlZCBmdW5jdGlvbiBSZXR1cm5Gcm9tUmVnaXN0ZXJGdW5jKCkgdG8gYWxsb3cgRE9TIGNhbGxzCi0JdG8gcmV0dXJuIHZhbHVlcyBpbiByZWdpc3RlcnMuCi0KLQkqIFtyZWdmdW5jLmhdCi0JTWFjcm9zIHRvIGFjY2VzcyByZWdpc3RlcnMgc2F2ZWQgb24gc3RhY2suCi0KLVR1ZSBKdWwgMjAgMTA6Mzg6NTkgMTk5MyAgQWxleGFuZHJlIEp1bGxpYXJkCi0KLSAgICAgICAgKiBbd2luLmNdCi0gICAgICAgIENvcnJlY3RlZCBhbGxvY2F0aW9uIG9mIHRoZSBXTV9DUkVBVEUgZGF0YSBzdHJ1Y3R1cmUuCi0KLSAgICAgICAgKiBbZGNlLmNdIFtkY2UuaF0KLSAgICAgICAgSW1wbGVtZW50ZWQgRENFIGhhbmRsaW5nLgotCi0gICAgICAgICogW2JpdG1hcC5jXSBbYnJ1c2guY10gW2RjLmNdIFtmb250LmNdIFtnZGkuaF0gW2dkaS5zcGVjXSAKLSAgICAgICAgICBbZ2Rpb2JqLmNdIFtwYWxldHRlLmNdIFtwZW4uY10KLSAgICAgICAgSW1wbGVtZW50ZWQgdGhlIEdESSBvYmplY3RzIGRhdGEgc3RydWN0dXJlcyBhbmQgYWxsb2NhdGlvbi4KLQotICAgICAgICAqIFt3aW5kb3dzLmhdCi0gICAgICAgIEFkZGVkIHNldmVyYWwgc3RydWN0dXJlcyBhbmQgY29uc3RhbnRzIGZvciBHREkgb2JqZWN0cy4KLQotTW9uIEp1bCAxOSAxMjo1MToxMCAxOTkzICBCb2IgQW1zdGFkdCAgKGJvYiBhdCBwb29oKQotCi0JKiBbbGR0bGliLmNdCi0JTW9kaWZpZWQgc3lzdGVtIGNhbGxzIHRvIG1hdGNoIExpbnVzJyBuZXcgaW50ZXJmYWNlIGZvcgotCXRoZSBMRFQgbW9kaWZpY2F0aW9uLgotCi0JKiBbd2luLmNdCi0JRml4ZWQgYnVnIHdpdGggV01fQ1JFQVRFIG1lc3NhZ2UuCi0KLQkqIFtoZWFwLmNdIFtrZXJuZWwuc3BlY10KLQlDb21wbGV0ZWQgbG9jYWwgaGVhcCBhbGxvY2F0aW9uIGZ1bmN0aW9ucy4KLQotCSogW2dsb2JhbC5jXQotCUNyZWF0ZWQgZnVuY3Rpb24gR2xvYmFsUXVpY2tBbGxvYygpIGZvciBlYXN5IGFsbG9jYXRpb24gZnJvbSBETExzCi0KLVR1ZSBKdWwgMTMgMjA6MzE6MzEgMTk5MyAgQm9iIEFtc3RhZHQgIChib2IgYXQgcG9vaCkKLQotCSogW2dsb2JhbC5jXQotCUNvbXBsZXRlZCBnbG9iYWwgbWVtb3J5IHBvb2wgQVBJCi0KLVN1biBKdWwgMTEgMTY6NTk6NTIgMTk5MyAgQWxleGFuZHJlIEp1bGxpYXJkCi0KLQkqIFttZXNzYWdlLmNdIFt1c2VyLmNdIFt1c2VyLnNwZWNdIFt3aW5kb3dzLmhdCi0JQWRkZWQgZW11bGF0aW9uIG9mIFdpbmRvd3MgbWVzc2FnZSBxdWV1ZS4KLQotVGh1IEp1bCAgOCAxOToyOToyNyAxOTkzICBCb2IgQW1zdGFkdCAgKGJvYiBhdCBwb29oKQotCi0JKiBbYnVpbGQuY10gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQKLQkqIFtjYWxsYmFjay5jXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdCwgdXBkYXRlcyBieSAKLQlBbGV4YW5kcmUgSnVsbGlhcmQKLQkqIFtkdW1wLmNdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0Ci0JKiBbZ2xvYmFsLmNdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0Ci0JKiBbaGVhcC5jXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdAotCSogW2tlcm5lbC5jXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdAotCSogW2xkdC5jXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdAotCSogW2xkdGxpYi5jXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdAotCSogW3JlbGF5LmNdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0Ci0JKiBbcmVzb3VyY2UuY10gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQsIHVwZGF0ZXMgYnkgCi0JQWxleGFuZHJlIEp1bGlhcmQKLQkqIFtzZWxlY3Rvci5jXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdCwgdXBkYXRlcyBieSBFcmljIFlvdW5nZGFsZQotCSogW3VzZXIuY10gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQKLQkqIFt3aW5lLmNdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0LCB1cGRhdGVzIGJ5IEVyaWMgWW91bmdkYWxlIGFuZAotCUFsZXhhbmRyZSBKdWxsaWFyZAotCSogW3dpbnRjbC5jXSBPcmlnaW5hbCBieSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEsCi0JdXBkYXRlcyBieSBQZXRlciBNYWNEb25hbGQgYW5kIEFsZXhhbmRyZSBKdWxsaWFyZAotCSogW2NhbGxiYWNrLmhdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0Ci0JKiBbZGxscy5oXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdAotCSogW2hlYXAuaF0gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQKLQkqIFtuZWV4ZS5oXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdAotCSogW3Byb3RvdHlwZXMuaF0gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQsIHVwZGF0ZXMgYnkgCi0JRXJpYyBZb3VuZ2RhbGUKLQkqIFtzZWdtZW0uaF0gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQKLQkqIFt0a0ludC5oXSBPcmlnaW5hbCBieSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKLQkqIFt3aW5kb3dzLmhdIE9yaWdpbmFsIGJ5IFBldGVyIE1hY0RvbmFsZCwgdXBkYXRlcyBieSAKLQlBbGV4YW5kcmUgSnVsbGlhcmQgYW5kIEJvYiBBbXN0YWR0Ci0JKiBbd2luZS5oXSBPcmlnaW5hbCBieSBFcmljIFlvdW5nZGFsZQotCSogW2tlcm5lbC5zcGVjXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdCwgdXBkYXRlcyBieSAKLQlBbGV4YW5kcmUgSnVsbGlhcmQKLQkqIFtnZGkuc3BlY10gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQsIHVwZGF0ZXMgYnkgCi0JQWxleGFuZHJlIEp1bGxpYXJkCi0JKiBbc2hlbGwuc3BlY10gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQKLQkqIFt1bml4bGliLnNwZWNdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0Ci0JKiBbdXNlci5zcGVjXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdCwgdXBkYXRlcyBieSBBbGV4YW5kcmUgSnVsbGlhcmQKLQkqIFt3aW44N2VtLnNwZWNdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0Ci0JKiBbV2luZG93cy50Y2xdIE9yaWdpbmFsIGJ5IFBldGVyIE1hY0RvbmFsZCwgdXBkYXRlcyBieSAKLQlBbGV4YW5kcmUgSnVsbGlhcmQKLQkqIFtidWlsZC1zcGVjLnR4dF0gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQKLQkqIFtpZjE2MzIuU10gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQsIHVwZGF0ZXMgYnkgRXJpYyBZb3VuZ2RhbGUKKwkqIENoYW5nZUxvZzoKKwlTdGFydGluZyBuZXcgZm9ybWF0IGNoYW5nZWxvZyAob2xkZXIgY2hhbmdlcyBtb3ZlZCB0bworCWRvY3VtZW50YXRpb24vQ2hhbmdlTG9nLk9MRCkuCmRpZmYgLS1naXQgYS9pbmNsdWRlL3ZlcnNpb24uaCBiL2luY2x1ZGUvdmVyc2lvbi5oCmluZGV4IDQ5ZTUxZTUuLjY1NWMwMjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdmVyc2lvbi5oCisrKyBiL2luY2x1ZGUvdmVyc2lvbi5oCkBAIC0xICsxIEBACi0jZGVmaW5lIFdJTkVfUkVMRUFTRV9JTkZPICJXaW5lIHJlbGVhc2UgOTgwOTI3IgorI2RlZmluZSBXSU5FX1JFTEVBU0VfSU5GTyAiV2luZSByZWxlYXNlIDk4MTAxOCIK