CQk9PT09PT09PT0gQmludXRpbHMgTWFpbnRhaW5lcnMgPT09PT09PT09CgpUaGlzIGlzIHRoZSBsaXN0IG9mIGluZGl2aWR1YWxzIHJlc3BvbnNpYmxlIGZvciBtYWludGVuYW5jZSBhbmQgdXBkYXRlCm9mIHRoZSBHTlUgQmluYXJ5IFV0aWxpdGllcyBwcm9qZWN0LiAgVGhpcyBpbmNsdWRlcyB0aGUgbGlua2VyIChsZCksCnRoZSBhc3NlbWJsZXIgKGdhcyksIHRoZSBwcm9maWxlciAoZ3Byb2YpLCBhIHdob2xlIHN1aXRlIG9mIG90aGVyCnByb2dyYW1zIChiaW51dGlscykgYW5kIHRoZSBsaWJyYXJpZXMgdGhhdCB0aGV5IHVzZSAoYmZkIGFuZApvcGNvZGVzKS4gIFRoaXMgcHJvamVjdCBzaGFyZXMgYSBjb21tb24gc2V0IG9mIGhlYWRlciBmaWxlcyB3aXRoIHRoZQpHQ0MgYW5kIEdEQiBwcm9qZWN0cyAoaW5jbHVkZSksIHNvIG1haW50YWluZXJzaGlwIG9mIHRob3NlIGZpbGVzIGlzIApzaGFyZWQgYW1vdW5nc3QgdGhlIHByb2plY3RzLgoKVGhlIGhvbWUgcGFnZSBmb3IgYmludXRpbHMgaXM6CgogIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9iaW51dGlscy9iaW51dGlscy5odG1sCgphbmQgcGF0Y2hlcyBzaG91bGQgYmUgc2VudCB0bzoKCiAgYnVnLWJpbnV0aWxzQGdudS5vcmcKICAKd2l0aCAiW1BhdGNoXSIgYXMgcGFydCBvZiB0aGUgc3ViamVjdCBsaW5lLiAgTm90ZSAtIHBhdGNoZXMgdG8gdGhlCnRvcCBsZXZlbCBjb25maWd1cmUuaW4gYW5kIGNvbmZpZy5zdWIgc2NyaXB0cyBzaG91bGQgYmUgc2VudCB0bzoKCiAgY29uZmlnLXBhdGNoZXNAZ251Lm9yZwoKYW5kIG5vdCB0byB0aGUgYmludXRpbHMgbGlzdC4KCgkJLS0tLS0tLS0tIEJsYW5rZXQgV3JpdGUgUHJpdnMgLS0tLS0tLS0tCgpUaGUgZm9sbG93aW5nIHBlb3BsZSBoYXZlIHBlcm1pc3Npb24gdG8gY2hlY2sgcGF0Y2hlcyBpbnRvIHRoZQpyZXBvc2l0b3J5IHdpdGhvdXQgb2J0YWluaW5nIGFwcHJvdmFsIGZpcnN0OgoJCQogIE5pY2sgQ2xpZnRvbiA8bmlja2NAcmVkaGF0LmNvbT4gKGhlYWQgbWFpbnRhaW5lcikKICBSaWNoYXJkIEhlbmRlcnNvbiA8cnRoQHJlZGhhdC5jb20+CiAgSWFuIFRheWxvciA8aWFuQHplbWJ1LmNvbT4KICBKZWZmIExhdyA8bGF3QHJlZGhhdC5jb20+CiAgSmltIFdpbHNvbiA8d2lsc29uQHJlZGhhdC5jb20+CiAgREogRGVsb3JpZSA8ZGpAcmVkaGF0LmNvbT4KICBBbGFuIE1vZHJhIDxhbW9kcmFAYmlncG9uZC5uZXQuYXU+CiAgTWljaGFlbCBNZWlzc25lciA8bWVpc3NuZXJAcmVkaGF0LmNvbT4KCiAgICAgIC0tLS0tLS0tLSBNYWludGFpbmVycyAtLS0tLS0tLS0KCk1haW50YWluZXJzIGFyZSBpbmRpdmlkdWFscyB3aG8gYXJlIHJlc3BvbnNpYmxlIGZvciwgYW5kIGhhdmUKcGVybWlzc2lvbiB0byBjaGVjayBpbiBjaGFuZ2VzIGluLCBjZXJ0YWluIHN1YnNldHMgb2YgdGhlIGNvZGUuICBOb3RlCnRoYXQgbWFpbnRhaW5lcnMgc3RpbGwgbmVlZCBhcHByb3ZhbCB0byBjaGVjayBpbiBjaGFuZ2VzIG91dHNpZGUgb2YKdGhlIGltbWVkaWF0ZSBkb21haW4gdGhhdCB0aGV5IG1haW50YWluLgoKSWYgdGhlcmUgaXMgbm8gbWFpbnRhaW5lciBmb3IgYSBnaXZlbiBkb21haW4gdGhlbiB0aGUgcmVzcG9uc2liaWxpdHkKZmFsbHMgdG8gdGhlIGhlYWQgbWFpbnRhaW5lciAoYWJvdmUpLiAgSWYgdGhlcmUgYXJlIHNldmVyYWwKbWFpbnRhaW5lcnMgZm9yIGEgZ2l2ZW4gZG9tYWluIHRoZW4gcmVzcG9uc2liaWxpdHkgZmFsbHMgdG8gdGhlIGZpcnN0Cm1haW50YWluZXIuICBUaGUgZmlyc3QgbWFpbnRhaW5lciBpcyBmcmVlIHRvIGRldm9sdmUgdGhhdApyZXNwb25zaWJpbGl0eSBhbW9uZyB0aGUgb3RoZXIgbWFpbnRhaW5lcnMuCgogIEFMUEhBICAgICAgICAgICAgUmljaGFyZCBIZW5kZXJzb24gPHJ0aEByZWRoYXQuY29tPgogIEFSQwkJICAgUGV0ZXIgVGFyZ2V0dCA8cGV0ZXIudGFyZ2V0dEBhcmMuY29tPgogIEFSTQkJICAgTmljayBDbGlmdG9uIDxuaWNrY0ByZWRoYXQuY29tPgogIEFSTQkJICAgUmljaGFyZCBFYXJuc2hhdyA8cmVhcm5zaGFAYXJtLmNvbT4KICBBVlIJCSAgIERlbmlzIENoZXJ0eWtvdiA8ZGVuaXNjQG92ZXJ0YS5ydT4KICBBVlIJCSAgIE1hcmVrIE1pY2hhbGtpZXdpY3ogPG1hcmVrbUBhbWVsZWsuZ2RhLnBsPgogIENPTkZJR1VSRQkgICBCZW4gRWxsaXN0b24gPGJqZUByZWRoYXQuY29tPgogIENSSVMJCSAgIEhhbnMtUGV0ZXIgTmlsc3NvbiA8aHBAYXhpcy5jb20+CiAgRFdBUkYyCSAgIEphc29uIE1lcnJpbGwgPGphc29uQHJlZGhhdC5jb20+CiAgRlIzMAkJICAgRGF2ZSBCcm9sbGV5IDxicm9sbGV5QHJlZGhhdC5jb20+CiAgRlJWCQkgICBEYXZlIEJyb2xsZXkgPGJyb2xsZXlAcmVkaGF0LmNvbT4KICBIUFBBIGVsZjMyCSAgIEFsYW4gTW9kcmEgPGFtb2RyYUBiaWdwb25kLm5ldC5hdT4KICBIUFBBIGVsZjY0CSAgIEplZmYgTGF3IDxsYXdAcmVkaGF0LmNvbT4gW0Jhc2ljIG1haW50YWluYW5jZSBvbmx5XQogIEhQUEEJCSAgIERhdmUgQW5nbGluIDxkYXZlLmFuZ2xpbkBucmMuY2E+CiAgSUE2NAkJICAgSmltIFdpbHNvbiA8d2lsc29uQHJlZGhhdC5jb20+CiAgaTg2MAkJICAgSmFzb24gRWNraGFyZHQgPGpsZUByZWRoYXQuY29tPgogIGl4ODYJCSAgIEFsYW4gTW9kcmEgPGFtb2RyYUBiaWdwb25kLm5ldC5hdT4KICBpeDg2IENPRkYsUEUJICAgREogRGVsb3JpZSA8ZGpAcmVkaGF0LmNvbT4KICBpeDg2CQkgICBILkouTHUgPGhqbEBnbnUub3JnPgogIGl4ODYgSU5URUwgTU9ERSAgRGllZ28gTm92aWxsbyA8ZG5vdmlsbG9AcmVkaGF0LmNvbT4KICBNNjhIQzExIE02OEhDMTIgIFN0ZXBoYW5lIENhcnJleiA8c3RjYXJyZXpAbmVyaW0uZnI+CiAgTTY4awkJICAgQmVuIEVsbGlzdG9uIDxiamVAcmVkaGF0LmNvbT4KICBNODhrCQkgICBCZW4gRWxsaXN0b24gPGJqZUByZWRoYXQuY29tPgogIE1JUFMJCSAgIEVyaWMgQ2hyaXN0b3BoZXIgPGVjaHJpc3RvQHJlZGhhdC5jb20+CiAgTU1JWAkJICAgSGFucy1QZXRlciBOaWxzc29uIDxocEBiaXRyYW5nZS5jb20+CiAgTU4xMDMwMAkgICBFcmljIENocmlzdG9waGVyIDxlY2hyaXN0b0ByZWRoYXQuY29tPgogIE1OMTAzMDAJICAgQWxleGFuZHJlIE9saXZhIDxhb2xpdmFAcmVkaGF0LmNvbT4KICBQUEMJCSAgIEdlb2ZmIEtlYXRpbmcgPGdlb2Zma0BnZW9mZmsub3JnPgogIHMzOTAsIHMzOTB4CSAgIE1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4KICBTSAkJICAgSvZybiBSZW5uZWNrZSA8am9lcm4ucmVubmVja2VAc3VwZXJoLmNvbT4KICBTSAkJICAgQWxleGFuZHJlIE9saXZhIDxhb2xpdmFAcmVkaGF0LmNvbT4KICBTSAkJICAgS2F6IEtvamltYSA8a2tvamltYUByci5paWo0dS5vci5qcD4KICBTUEFSQwkJICAgSmFrdWIgSmVsaW5layA8amFrdWJAcmVkaGF0LmNvbT4KICBURVNUU1VJVEVTCSAgIEJlbiBFbGxpc3RvbiA8YmplQHJlZGhhdC5jb20+CiAgVElDNTRYICAgICAgICAgICBUaW1vdGh5IFdhbGwgPHR3YWxsQGFsdW0ubWl0LmVkdT4KICBWQVgJCSAgIEphc29uIFIgVGhvcnBlIDx0aG9ycGVqQHdhc2FiaXN5c3RlbXMuY29tPgogIHg4Nl82NAkgICBKYW4gSHViaWNrYSA8amhAc3VzZS5jej4KICB4ODZfNjQJICAgQW5kcmVhcyBKYWVnZXIgPGFqQHN1c2UuZGU+CiAgejhrCQkgICBDaHJpc3RpYW4gR3JvZXNzbGVyIDxjaHJpc0Bncm9lc3NsZXIub3JnPgoKCiAgICAgIC0tLS0tLS0tLSBDR0VOIE1haW50YWluZXJzIC0tLS0tLS0tLS0tLS0KCkNHRU4gaXMgYSB0b29sIGZvciBidWlsZGluZywgYW1vbmdzdCBvdGhlciB0aGluZ3MsIGFzc2VtYmxlcnMsCmRpc2Fzc2VtYmxlcnMgYW5kIHNpbXVsYXRvcnMgZnJvbSBhIHNpbmdsZSBkZXNjcmlwdGlvbiBvZiBhIENQVS4KSXQgY3JlYXRlcyBmaWxlcyBpbiBzZXZlcmFsIG9mIHRoZSBiaW51dGlscyBkaXJlY3RvcmllcywgYnV0IGl0CmlzIG1lbnRpb25lZCBoZXJlIHNpbmNlIHRoZXJlIGlzIGEgc2luZ2xlIGdyb3VwIHRoYXQgbWFpbnRhaW5zCkNHRU4gYW5kIHRoZSBmaWxlcyB0aGF0IGl0IGNyZWF0ZXMuIAoKSWYgeW91IGhhdmUgQ0dFTiByZWxhdGVkIHByb2JsZW1zIHlvdSBjYW4gc2VuZCBlbWFpbCB0bzsKCiAgIGNnZW5Ac291cmNlcy5yZWRoYXQuY29tCgpUaGUgY3VycmVudCBDR0VOIG1haW50YWluZXJzIGFyZToKCiAgRG91ZyBFdmFucywgQmVuIEVsbGlzdG9uLCBGcmFuayBFaWdsZXIKCiAgICAgLS0tLS0tLS0tIFdyaXRlIEFmdGVyIEFwcHJvdmFsIC0tLS0tLS0tLQoKSW5kaXZpZHVhbHMgd2l0aCAid3JpdGUgYWZ0ZXIgYXBwcm92YWwiIGhhdmUgdGhlIGFiaWxpdHkgdG8gY2hlY2sgaW4KY2hhbmdlcywgYnV0IHRoZXkgbXVzdCBnZXQgYXBwcm92YWwgZm9yIGVhY2ggY2hhbmdlIGZyb20gc29tZW9uZSBpbgpvbmUgb2YgdGhlIGFib3ZlIGxpc3RzIChibGFua2V0IHdyaXRlIG9yIG1haW50YWluZXJzKS4KCltJdCdzIGEgaHVnZSBsaXN0LCBmb2xrcy4gIFlvdSBrbm93IHdobyB5b3UgYXJlLiAgSWYgeW91IGhhdmUgdGhlCiAqYWJpbGl0eSogdG8gZG8gYmludXRpbHMgY2hlY2tpbnMsIHlvdSdyZSBpbiB0aGlzIGdyb3VwLiAgSnVzdAogcmVtZW1iZXIgdG8gZ2V0IGFwcHJvdmFsIGJlZm9yZSBjaGVja2luZyBhbnl0aGluZyBpbi5dCgogICAgIC0tLS0tLS0tLS0tLS0gIE9idmlvdXMgRml4ZXMgLS0tLS0tLS0tLS0tLQoKRml4ZXMgZm9yIG9idmlvdXMgbWlzdGFrZXMgZG8gbm90IG5lZWQgYXBwcm92YWwsIGFuZCBjYW4gYmUgY2hlY2tlZCBpbgpyaWdodCBhd2F5LCBidXQgdGhlIHBhdGNoIHNob3VsZCBzdGlsbCBiZSBzZW50IHRvIHRoZSBiaW51dGlscyBsaXN0LgpUaGUgZGVmaW5pdGlvbiBvZiBvYnZpb3VzIGlzIGEgYml0IGhhenksIGFuZCBpZiB5b3UgYXJlIG5vdCBzdXJlLCB0aGVuCnlvdSBzaG91bGQgc2VlayBhcHByb3ZhbCBmaXJzdC4gIE9idmlvdXMgZml4ZXMgaW5jbHVkZSBmaXhlcyBmb3IKc3BlbGxpbmcgbWlzdGFrZXMsIGJsYXRhbnRseSBpbmNvcnJlY3QgY29kZSAod2hlcmUgdGhlIGNvcnJlY3QgY29kZSBpcwphbHNvIGJsYXRhbnRseSBvYnZpb3VzKSwgYW5kIHNvIG9uLiAgT2J2aW91cyBmaXhlcyBzaG91bGQgYWx3YXlzIGJlCnNtYWxsLCB0aGUgbGFyZ2VyIHRoZXkgYXJlLCB0aGUgbW9yZSBsaWtlbHkgaXQgaXMgdGhhdCB0aGV5IGNvbnRhaW4Kc29tZSB1bi1vYnZpb3VzIHNpZGUgZWZmZWN0IG9yIGNvbnNlcXVlbmNlLgoKICAgIC0tLS0tLS0tLSBCcmFuY2ggQ2hlY2tpbnMgLS0tLS0tLS0tCgpJZiBhIHBhdGNoIGlzIGFwcHJvdmVkIGZvciBjaGVjayBpbiB0byB0aGUgbWFpbmxpbmUgc291cmNlcywgaXQgY2FuCmFsc28gYmUgY2hlY2tlZCBpbnRvIHRoZSBjdXJyZW50IHJlbGVhc2UgYnJhbmNoLiAgTm9ybWFsbHkgaG93ZXZlcgpvbmx5IGJ1ZyBmaXhlcyBzaG91bGQgYmUgYXBwbGllZCB0byB0aGUgYnJhbmNoLiAgTmV3IGZlYXR1cmVzLCBuZXcKcG9ydHMsIGV0Yywgc2hvdWxkIGJlIHJlc3RyaWN0ZWQgdG8gdGhlIG1haW5saW5lLiAgKE90aGVyd2lzZSB0aGUKYnVyZGVuIG9mIG1haW50YWluaW5nIHRoZSBicmFuY2ggaW4gc3luYyB3aXRoIHRoZSBtYWlubGluZSBiZWNvbWVzIHRvbyAKZ3JlYXQpLiAgSWYgeW91IGFyZSB1bmNlcnRhaW4gYXMgdG8gd2hldGhlciBhIHBhdGNoIGlzIGFwcHJvcHJpYXRlIGZvcgp0aGUgYnJhbmNoLCBhc2sgdGhlIGJyYW5jaCBtYWludGFpbmVyLiAgVGhpcyBpczoKCiAgIERhbmllbCBKYWNvYm93aXR6ICA8ZGFuQGRlYmlhbi5vcmc+CgogICAgLS0tLS0tLS0gVGVzdHN1aXRlcyAtLS0tLS0tLS0tLS0tLS0KCkluIGdlbmVyYWwgcGF0Y2hlcyB0byBhbnkgb2YgdGhlIGJpbnV0aWxzIHRlc3RzdWl0ZXMgc2hvdWxkIGJlCmNvbnNpZGVyZWQgZ2VuZXJpYyBhbmQgc2VudCB0byB0aGUgYmludXRpbHMgbWFpbGluZyBsaXN0IGZvcgphcHByb3ZhbC4gIFBhdGNoZXMgdG8gdGFyZ2V0IHNwZWNpZmljIHRlc3RzIGFyZSB0aGUgcmVzcG9uc2liaWxpdHkgdGhlCnJlbGV2ZW50IHBvcnQgbWFpbnRhaW5lcihzKSwgYW5kIGNhbiBiZSBhcHByb3ZlZC9jaGVja2VkIGluIGJ5IHRoZW0uCk90aGVyIHRlc3RzdWl0ZSBwYXRjaGVzIG5lZWQgdGhlIGFwcHJvdmFsIG9mIGEgYmxhbmtldC13cml0ZS1wcml2ZWxlZ2VzCnBlcnNvbi4KCiAgICAtLS0tLS0tLSBDb25maWd1cmUgcGF0Y2hlcyAtLS0tLS0tLS0tCgpQYXRjaGVzIHRvIHRoZSB0b3AgbGV2ZWwgY29uZmlndXJlIGZpbGVzIChjb25maWcuc3ViICYgY29uZmlnLmd1ZXNzKQphcmUgbm90IHRoZSBkb21haW4gb2YgdGhlIGJpbnV0aWxzIHByb2plY3QgYW5kIHRoZXkgY2Fubm90IGJlIGFwcHJvdmVkCmJ5IHRoZSBiaW51dGlscyBncm91cC4gIEluc3RlYWQgdGhleSBzaG91bGQgYmUgc3VibWl0dGVkIHRvIHRoZSBjb25maWcKbWFpbnRhaW5lciBhdDoKCgljb25maWctcGF0Y2hlc0BnbnUub3JnCg==