VHVlIE1heSAxOCAwMzo1MzozNyAxOTk5ICBDcmFpZyBCdXJsZXkgIDxjcmFpZ0BqY2Itc2MuY29tPgoKCUltcHJvdmUgb3Blbi1jb2Rpbmcgb2YgY29tcGxleCBkaXZpZGU6CgkqIGZsYWdzLmg6IERlY2xhcmUgbmV3IGZyb250LWVuZC1tYWxsZWFibGUgZmxhZy4KCSogdG9wbGV2LmM6IERlZmluZSBuZXcgZmxhZy4KCSogb3B0YWJzLmMgKGV4cGFuZF9jbXBseGRpdl9zdHJhaWdodCk6IE5ldyBmdW5jdGlvbiB0byBkbyBvcmlnaW5hbAoJb3Blbi1jb2RpbmcuCgkoZXhwYW5kX2NtcGx4ZGl2X3dpZGUpOiBOZXcgZnVuY3Rpb24gdG8gZG8gbmV3IG9wZW4tY29kaW5nLAoJZnJvbSBUb29uIE1vZW5lLCB3aXRoIGNoYW5nZXMgKGNhbGwgdG8gZW1pdF9iYXJyaWVyLCBkcm9wcGluZwoJb2Ygc3B1cmlvdXMgYG9rID0gMTsnLCBwbHVzIHRoZSBvYnZpb3VzIGBicmVhazsnIC0+IGByZXR1cm4gMDsnKS4KCShleHBhbmRfYmlub3ApOiBBIGJpdCBvZiBzcGFjaW5nIGZpeGluZywgd2hpbGUgYXQgaXQuCglVc2UgbmV3IGZ1bmN0aW9ucyBpbnN0ZWFkIG9mIGlubGluaW5nIHRoZSBvcGVuLWNvZGluZyBjb2RlLgoKVHVlIE1heSAxOCAwMDo1MTo0NiAxOTk5ICBLcmlzdGVyIFdhbGZyaWRzc29uIDxjYXRvQGRmLmx0aC5zZT4KCgkqIGNvbmZpZ3VyZS5pbiAoYXJtKi0qLW5ldGJzZCopOiBVc2UgY29sbGVjdDIuCgkoaVszNDU2N104Ni0qLW5ldGJzZCopOiBMaWtld2lzZS4KCShtNjhrKi0qLW5ldGJzZCopOiBMaWtld2lzZS4KCShuczMyay0qLW5ldGJzZCopOiBMaWtld2lzZS4KCShzcGFyYy0qLW5ldGJzZCopOiBMaWtld2lzZS4KCSh2YXgtKi1uZXRic2QqKTogTGlrZXdpc2UuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KClR1ZSBNYXkgMTggMDA6MjE6MzQgMTk5OSAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5waHlzLmNvbHVtYmlhLmVkdT4KCgkqIGNwcHNwZWMuYzogSW5zZXJ0IC1uby1nY2MgaW50byBjb21tYW5kIGxpbmUgdW5sZXNzIC1nY2Mgd2FzCglnaXZlbiBieSB1c2VyLgoJKiBnY2MuYyAoZGVmYXVsdF9jb21waWxlcnMpOiBEZWZpbmUgX19HTlVDX18gYW5kCglfX0dOVUNfTUlOT1JfXyBvbmx5IGlmIC1uby1nY2Mgd2FzIG5vdCBnaXZlbi4KCSogb2JqYy9sYW5nLXNwZWNzLmg6IExpa2V3aXNlLgoJKiBjcHAudGV4aTogRG9jdW1lbnQgLXggYW5kIC1zdGQgb3B0aW9uczsgZXhwbGFpbiB0aGF0IC1sYW5nCglpcyBubyBsb25nZXIgc3VwcG9ydGVkLiAgTWlub3IgcmVsYXRlZCBjb3JyZWN0aW9ucy4KCk1vbiBNYXkgMTcgMjM6NTY6MzkgMTk5OSAgQWxleGFuZHJlIE9saXZhICA8b2xpdmFAZGNjLnVuaWNhbXAuYnI+CgoJKiBNYWtlZmlsZS5pbiAoc3RtcC1maXhwcm90byk6IFBhc3MgbG9jYXRpb24gb2YgbWtpbnN0YWxsZGlycyB0bwoJZml4cHJvdG8uCgkqIGZpeHByb3RvOiBBdm9pZCB1bnBvcnRhYmxlIGNvbnN0cnVjdHMgc3VjaCBhcyBgYmFzZW5hbWUnIGFuZAoJYG1rZGlyIC1wJy4gIFVzZSBta2luc3RhbGxkaXJzIGZyb20gdGhlIGVudmlyb25tZW50IGlmIGBta2RpciAtcCcKCWZhaWxzLgoKCSogZml4aW5jL2ZpeGluY2wuYzogUmVtb3ZlICNlcnJvciwgaXQgaXMgbm90IHBvcnRhYmxlLgoKTW9uIE1heSAxNyAyMzo1MDo0MSAxOTk5ICBNYXJjIEVzcGllIDxlc3BpZUBjdnMub3BlbmJzZC5vcmc+CgoJKiBjb2xsZWN0Mi5jIChtYWluKTogIEZpeCB0eXBvIGluIENPTExFQ1QyX0hPU1RfSU5JVElBTElaQVRJT04uCgpNb24gTWF5IDE3IDE5OjQ1OjQxIDE5OTkgIFJhaW5lciBPcnRoICA8cm9AVGVjaEZhay5VbmktQmllbGVmZWxkLkRFPgoKCSogZml4aW5jL2ZpeGluY2wuYyAocHJvY2Vzcyk6IFdhaXQgZm9yIGNoaWxkcmVuIGZyb20gY2hhaW5fb3BlbigpCgl0byBhdm9pZCBjcmVhdGluZyB6b21iaWVzLgoKCSogZml4aW5jL2luY2xoYWNrLnRwbDogUmVtb3ZlZCBuby1vcCBwaXBlLgoKCSogZml4aW5jL2luY2xoYWNrLnNoIGZpeGluYy9maXhpbmNsLnNoOiByZWdlbmVyYXRlCgpNb24gTWF5IDE3IDA3OjIzOjM0IDE5OTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiB0cmVlLmRlZiAoVFlQRV9OT05DT1BJRURfUEFSVFMpOiBSZXZpc2UgZG9jdW1lbnRhdGlvbiB0byBtYXRjaAoJcmVhbGl0eS4KCSogZXhwci5jIChpbml0X25vbmNvcGllZF9wYXJ0cyk6IERvbid0IGdlbmVyYXRlIGluaXRpYWxpemVycyBmb3IKCXBhcnRzIHRoYXQgZG9uJ3QgbmVlZCB0aGVtLgoKTW9uIE1heSAxNyAwMjo1NjozNSBQRFQgMTk5OSBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KClNhdCBPY3QgMzEgMDU6MDg6MzQgQ0VUIDE5OTggSmFuIEh1Ymlja2EgIChodWJpY2thQGZyZWVzb2Z0LmN6KQoKCSogcmVnLXN0YWNrLmM6IERvIG5vdCBlbWl0IHBvcCBpbnNucyBhZnRlciBjYzAgc2V0dGVyLgoJKGVtaXRfcG9wX2luc24pOiBEbyBub3QgZW1pdCBpbnNuIGluIGNhc2UgV0hFTiBpcyBOVUxMLgoJKGNvbXBhcmVfZm9yX3N0YWNrX3JlZyk6IFVwZGF0ZSBSRUdfREVBRCBub3RlIGFuZCAKCWRvIG5vdCBlbWl0IHB1c2ggaW5zbi4KCgkqIGkzODYuYzogKG91dHB1dF9mbG9hdF9jb21wYXJlKTogSGFuZGxlIG5ldyBSRUdfREVBRCBub3Rlcy4KCk1vbiBNYXkgMTcgMDE6NTc6MzcgMTk5OSAgRGF2aWQgRGFuZXkgPGRhbmV5QGlidy5jb20ubmk+CgoJKiBpMzg2L3NvbDIuaCAoTElOS19TUEVDKTogRG8gbm90IHBhc3MgIi16IHRleHQiIHRvIHRoZSBsaW5rZXIKCWlmIC1taW1wdXJlLXRleHQuCgoxOTk5LTA1LTE3ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5jcy51bmktZG9ydG11bmQuZGU+CgoJKiBtNjhrLmMgKHN0YW5kYXJkXzY4ODgxX2NvbnN0YW50X3ApOiBEb24ndCBhY2NlcHQgLTAuMCBhcyB2YWxpZAoJNjg4ODEgY29uc3RhbnQuCgoJKiBmb2xkLWNvbnN0LmMgKGZvbGRfdHJ1dGhvcCk6IFdoZW4gY29udmVydGluZyBhIG9uZS1iaXQKCWNvbXBhcmlzb24gZG9uJ3Qgc2lnbiBleHRlbmQgdGhlIGNvbnN0YW50LgoKCSogY3NlLmMgKGNzZV9pbnNuKTogQ29weSBTUkNfQ09OU1QgYmVmb3JlIHB1dHRpbmcgaXQgaW4gdGhlCglSRUdfRVFVQUwgbm90ZS4KCjE5OTktMDUtMTcgIE1pa2UgU3R1bXAgIDxtcnNAd3JzLmNvbT4KCgkqIHJzNjAwMC92eHBwYy5oIChDUFBfU1BFQyk6IEZpeCBzdXBwb3J0IGZvciB2YXJhcmcgZnVuY3Rpb25zLgoKU2F0IE1heSAxNSAxNDoyMjo0MCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBmaXhpbmMvaGFja3NoZWxsLnRwbDogRml4IG1pcy1hcHBsaWVkIHBhdGNoLgoJKiBmaXhpbmMvaW5jbGhhY2suc2g6IFJlZ2VuZXJhdGVkLgoKVGh1IE1heSAxMyAyMTowNTo1NSAxOTk5ICBNYXJrIEtldHRlbmlzICA8a2V0dGVuaXNAZ251Lm9yZz4KCgkqIGZpeGluYy9ta2ZpeGluYy5zaDogQWRkIHRoZSBIdXJkICgqLSotZ251KikgdG8gdGhlIGxpc3Qgb2YKCXRhcmdldHMgdGhhdCBkbyBub3QgbmVlZCBhbnkgZml4ZXMuCgpTYXQgTWF5IDE1IDE0OjEyOjM4IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4Lm1kIChzZXRfbG9fc3VtKzIpOiBOZXcgc3BsaXR0ZXIgdG8gbG9hZCBsYXJnZQoJY29uc3RfaW50cy4KClNhdCBNYXkgMTUgMTQ6MDk6MDggMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHgubWQgKGRlY3JlbWVudF9hbmRfYnJhbmNoX29uX2NvdW50KTogRGlzYWJsZWQuCgkoZG9sb29wX2JlZ2luLCBkb2xvb3BfZW5kKTogTmV3IHBhdHRlcm5zLgoJKCpycHRiX2luaXQpOiBBZGRlZCBleHRyYSBvcGVyYW5kcy4KCkZyaSBNYXkgMTQgMjE6MzE6MzYgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHgubWQgKCp1bXVscWkzX2hpZ2hwYXJ0X2Nsb2JiZXIpOiBGaXggb3BlcmFuZCAyCgljb25zdHJhaW50cyBvcmRlci4KCjE5OTktMDUtMTQgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgoKCSogZml4aW5jL2ZpeGluYy54ODYtbGludXgtZ251IChGRF9aRVJPKTogRml4IG9wZXJhbmQgbnVtYmVycyBpbgoJYXNtIGlucHV0IG9wZXJhbmRzLgoKVGh1IE1heSAxMyAxNTozNDoxOCAxOTk5ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiByczYwMDAuYyAobWFza19jb25zdGFudCk6IERlbGV0ZS4KCShtYXNrX29wZXJhbmQpOiBNb3ZlIG1hc2tfY29uc3RhbnQoKSBib2R5IHRvIGhlcmUuCgkqIHJzNjAwMC5oIChtYXNrX2NvbnN0YW50KTogRGVsZXRlIGRlY2xhcmF0aW9uLgoJKiByczYwMDAubWQgKG5hYnNkaTIpOiBSZXZlcnNlIHN1YnRyYWN0aW9uIGluIHNwbGl0dGVyLgoKVGh1IE1heSAxMyAwMjoyNTowMSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjcHAudGV4aTogRml4IHNvbWUgdHlwb3MuCgpUaHUgTWF5IDEzIDAxOjQ5OjU1IDE5OTkgIEdyYWhhbSBTdG90dCA8R3JhaGFtU0BSQ1AuY28udWs+CgoJKiBsb29wLmMgKG1heWJlX2VsaW1pbmF0ZV9iaXYpOiBDaGVjayByZWdubyBhZ2FpbnN0CgltYXhfcmVnX2JlZm9yZV9sb29wLgoKCSogaTM4Ni5jIChtZW1vcnlfYWRkcmVzc19pbmZvKTogQ29ycmVjdCB0aGUgc2NhbGUKCWZhY3RvciB0ZXN0LgoKVGh1IE1heSAxMyAwMTozMToxOSAxOTk5ICBOaWNrIEJ1cnJldHQgIDxuaWNrLmJ1cnJldHRAYnRpbnRlcm5ldC5jb20+CgoJKiBhcm0ubWQgKG5vcCk6IEJhY2tvdXQgQXByIDI3IGNoYW5nZS4gRW5zdXJlIFJFR0lTVEVSX1BSRUZJWCBpcwoJYXBwbGllZCB0byBlYWNoIHJlZ2lzdGVyLgoJKiBhb2YuaCAoQVNNX0ZJTEVfU1RBUlQpOiBEZWZpbmUgcmVnaXN0ZXIgYHIwJy4KCjE5OTktMDUtMTIgMjA6MjIgLTA0MDAgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkuY29sdW1iaWEuZWR1PgoKCSogY29uZmlndXJlLmluOiBNYWtlIC0tZW5hYmxlLWNwcCBhbmQgLS13aXRoLWNwcC1pbnN0YWxsLWRpcgoJZG9jdW1lbnRlZCBvcHRpb25zLiAgRW5hYmxlIHRoZSBjcHAgZHJpdmVyIGJ5IGRlZmF1bHQuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KCldlZCBNYXkgMTIgMTg6MDg6NDggMTk5OSAgRGF2aWQgRWRlbHNvaG4gICAgIDxlZGVsc29obkBnbnUub3JnPgoJCQkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiByczYwMDAuYyAocHJpbnRfb3BlcmFuZCkgW3ddOiBDYWxjdWxhdGUgc2lnbmVkIGNvbnN0YW50IG1vcmUgY2xlYXJseS4KCShyczYwMDBfYWxsb2NhdGVfc3RhY2tfc3BhY2UpOiBQcmludCBhcyBoZXhhZGVjaW1hbCB2YWx1ZS4KCSogcnM2MDAwLmggKENPTlNUX09LX0ZPUl9MRVRURVJfUCk6ICdMJyBjaGVja3MgZm9yIGEgc2lnbmVkLAoJMTYtYml0IHNoaWZ0ZWQgY29uc3RhbnQuICBGaXggdHlwbyBmb3IgJ1AnLgoJKEVYVFJBX0NPTlNUQVJJTlQpOiAnVCcgY2hlY2tzIGZvciBhIDMyLWJpdCBtYXNrIG9wZXJhbmQuCgkqIHJzNjAwMC5tZCAobW92c2ksIGFkZHNpM19pbnRlcm5hbDEsIG1vdmRpLCBhZGRkaTNfaW50ZXJuYWwxKToKCVVzZSAnTCcgZm9yIHNoaWZ0ZWQgY29uc3RhbnQuCgkoYW5kZGkzX2ludGVybmFsMyk6IEZpeCB0eXBvLgoJKDMyLWJpdCBtYXNrIHBhdHRlcm5zKTogVXNlICdUJy4KCldlZCBNYXkgMTIgMDc6MzA6MzEgMTk5OSAgQnJ1Y2UgS29yYiA8ZGRzaW5jMDlAaXgubmV0Y29tLmNvbT4KCgkqIGZpeGluYy9maXhpbmNsLmMocXVvdGVkX2ZpbGVfZXhpc3RzKTogbmV3IHByb2NlZHVyZSB0byBlbnN1cmUgdGhhdAoJYSBmaWxlIGV4aXN0cyBiZWZvcmUgdHJ5aW5nIHRvIGNvcHkgaXQgaW50byB0aGUgZGVzdGluYXRpb24KCShleHRyYWN0X3F1b3RlZF9maWxlcyk6IHVzZSB0aGF0IHJvdXRpbmUuCgpXZWQgTWF5IDEyIDA3OjI3OjMxIDE5OTkgIENyYWlnIEJ1cmxleSAgPGNyYWlnQGpjYi1zYy5jb20+CgoJQWxsb3cgZnJvbnQgZW5kIChsaWtlIGc3NydzKSB0byBvdmVycmlkZSBtYWludGVuYW5jZSBvZiBlcnJubzoKCSogZXhwci5jIChleHBhbmRfYnVpbHRpbik6IEJvdGhlciB3aXRoIGVycm5vIG9ubHkgaWYKCWZsYWdfZXJybm9fbWF0aC4KCSogZmxhZ3MuaDogRGVjbGFyZSBmbGFnX2Vycm5vX21hdGguCgkqIHRvcGxldi5jOiBEZWZpbmUgZmxhZ19lcnJub19tYXRoLgoKVHVlIE1heSAxMSAyMzo1NTo0OSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBmaXhwcm90bzogQ2hhbmdlICJta2RpciIgY2FsbHMgdG8gIm1rZGlyIC1wIgoKCSogZml4aW5jL2luY2xoYWNrLmRlZiAoaW9fZGVmX3F1b3Rlcyk6IENvbnNpc3RlbnRseSBhbGxvdyBtdWx0aXBsZQoJd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIGJldHdlZW4gdGhlICJkZWZpbmUiIGFuZCB0aGUgbmFtZSBvZiB0aGUgbWFjcm8uCgkqIGZpeGluYy9maXhpbmNsLngsIGZpeGluYy9pbmNsaGFjay5zaDogUmVidWlsdC4KClR1ZSBNYXkgMTEgMjA6NDY6MzcgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGFscGhhLmMgKGFscGhhX2V4cGFuZF9ibG9ja19tb3ZlKTogSGFuZGxlIFRJbW9kZSByZWdpc3RlcnMKCXVzZWQgd2l0aCBBRERSRVNTT0YuCgkoYWxwaGFfZXhwYW5kX2Jsb2NrX2NsZWFyKTogSGFuZGxlIEFERFJFU1NPRiBzcGVjaWFsbHkuCgoxOTk5LTA1LTExICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KCgkqIGZpeGluYy9maXhpbmMueDg2LWxpbnV4LWdudSAoRkRfWkVSTyk6IFJlbW92ZSB1bm5lY2Nlc3NhcnkKCW1lbW9yeSBvdXRwdXQgb3BlcmFuZCB3aGljaCBpcnJpdGF0ZXMgZ2NjLgoKVHVlIE1heSAxMSAxMTo0NToxNiAxOTk5ICBEYXZlIEJyb2xsZXkgIDxicm9sbGV5QGN5Z251cy5jb20+CgoJKiB0b3BsZXYuYyAoZG9jdW1lbnRlZF9sYW5nX29wdGlvbnMpOiBBZGQgLU1ELCAtTU1ELCAtTSBhbmQgLU1NIGZvcgoJY3BwbGliLWVuYWJsZWQgY29tcGlsZXJzLgoKVHVlIE1heSAxMSAxMTozNDo1NiAxOTk5ICBWbGFkaW1pciBNYWthcm92ICA8dm1ha2Fyb3ZAdG9mdS50by5jeWdudXMuY29tPgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLmggKEdPX0lGX0xFR0lUSU1BVEVfQUREUkVTUyk6IEFkZCBwYXJlbnRoZXNlcwoJYXJvdW5kICYmLgoKTW9uIE1heSAxMCAxMzo1MToyNCAxOTk5ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogdG0udGV4aSAoRlVOQ1RJT05fQVJHKTogU3RhY2sgZWxlbWVudCBvZiBQQVJBTExFTCBtdXN0IGNvbWUKCWZpcnN0LgoKVHVlIE1heSAxMSAwMTozMjowMSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBmaXhpbmMvaW5jbGhhY2suZGVmIChzdW5fYXV0aF9wcm90byk6IEFwcGx5IHRvIGFsbCB0YXJnZXRzLgoJKHN5c3pfc3RkbGliX2Zvcl9zdW4pOiBTaW1pbGFybHkuCgkqIGZpeGluYy9maXhpbmNsLngsIGZpeGluYy9pbmNsaGFjay5zaDogUmVidWlsdC4KCk1vbiBNYXkgMTAgMjA6MzQ6MTAgMTk5OSAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogY29uZmlnL21pcHMvZWxmLmggKFVOSVFVRV9TRUNUSU9OX1ApOiBVbmRlZi4KCSogY29uZmlnL21pcHMvZWxmNjQuaCAoVU5JUVVFX1NFQ1RJT05fUCk6IFVuZGVmLgoJKiBjb25maWcvbWlwcy9taXBzLmggKFVOSVFVRV9TRUNUSU9OX1ApOiBEZWZpbmUgdG8gMC4KCjE5OTktMDUtMTAgMTg6MjEgLTA0MDAgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkuY29sdW1iaWEuZWR1PgoKCSogY3BwZmlsZXMuYyAoaW5pdGlhbGl6ZV9pbnB1dF9idWZmZXIpOiBOZXcgZnVuY3Rpb24uCgkoZmluY2x1ZGUpOiBDYWxsIGl0LCBpZiBwZmlsZS0+aW5wdXRfYnVmZmVyIGlzIE5VTEwuICBBY2NlcHQKCWFueSBjaGFyYWN0ZXIgZGV2aWNlIGFzIGFuIGlucHV0IGZpbGUuCgkocmVhZF9hbmRfcHJlc2Nhbik6IFVzZSBwZmlsZS0+aW5wdXRfYnVmZmVyIGFuZAoJcGZpbGUtPmlucHV0X3NwZWNjYXNlLgoJKiBjcHBpbml0LmMgKGNwcF9jbGVhbnVwKTogRnJlZSBwZmlsZS0+aW5wdXRfYnVmZmVyIGFuZAoJcGZpbGUtPmlucHV0X3NwZWNjYXNlLgoJKiBjcHBsaWIuaCAoY3BwX3JlYWRlcik6IEFkZCBpbnB1dF9idWZmZXIsIGlucHV0X3NwZWNjYXNlLCBhbmQKCWlucHV0X2J1ZmZlcl9sZW4gbWVtYmVycy4gIFVzZSBtZW1jcHkgaW4gQ1BQX1BVVFNfUS4KCgkqIGNwcG1haW4uYzogQnVmZmVyIG91dHB1dCBpbiB0aGUgdG9rZW5fYnVmZmVyOyB0aHJvdHRsZQoJbnVtYmVyIG9mIGNhbGxzIHRvIGZ3cml0ZTsgY2hlY2sgZm9yIGVycm9ycyBmcm9tIGZ3cml0ZS4KCjE5OTktMDUtMTAgMTg6MjEgLTA0MDAgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkucGh5cy5jb2x1bWJpYS5lZHU+CgoJKiBjcHBzcGVjLmM6IFRyZWF0IHR3byBub24tb3B0aW9uIGFyZ3VtZW50cyBhcyBpbnB1dCBhbmQKCW91dHB1dCBmaWxlLiAgVGhyZWUgb3IgbW9yZSBub24tb3B0aW9uIGFyZ3MgaXMgYW4gZXJyb3IuCglDbGVhbiB1cC4KCSogZ2NjLmMgKGRlZmF1bHRfY29tcGlsZXJzKTogUGFzcyAtJCB0byB0aGUgcHJlcHJvY2Vzc29yLgoJKiBvYmpjL2xhbmctc3BlY3MuaDogTGlrZXdpc2UuCgpNb24gTWF5IDEwIDEyOjU5OjIwIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIG9wdGFicy5jIChlbWl0X2NtcF9hbmRfanVtcF9pbnNucyk6IEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBib3RoCglvcGVyYW5kcyB0byB0aGUgY29tcGFyaXNvbiBhcmUgY29uc3RhbnRzLgoKTW9uIE1heSAxMCAwNzoyODoxMCAxOTk5ICBCcnVjZSBLb3JiIDxhdXRvZ2VuQGF1dG9nZW4uZnJlZXNlcnZlcnMuY29tPgoKCSogZml4aW5jL2luY2xoYWNrLmRlZihhcm1fbm9yY3JvZnRfaGludCk6IGNoZWNrIGJlZm9yZSBmaXhpbmcKCShub19kb3VibGVfc2xhc2gpOiBwb3J0YWJpbGl0eQoJKG1hdGhfZXhjZXB0aW9uKTogYWRkZWQgcmVtaW5kZXIgY29tbWVudAoKTW9uIE1heSAxMCAwMToyODoxMCAxOTk5ICBDcmFpZyBCdXJsZXkgIDxjcmFpZ0BqY2Itc2MuY29tPgoKCUZyb20gRnJpIE1heSA3ICA5OjMxOjQxIDE5OTkgRG9ubiBUZXJyeSAoZG9ubkBpbnRlcml4LmNvbSk6CgkqIHZhcmFzbS5jIChtYXJrX2NvbnN0YW50X3Bvb2wpOiBBZGQgc29tZSB0cmFuc2l0aXZlIGNsb3N1cmUuCgpTdW4gTWF5ICA5IDIyOjUxOjA0IDE5OTkgIENyYWlnIEJ1cmxleSAgPGNyYWlnQGpjYi1zYy5jb20+CgoJRml4IGdjYy5kZy85OTA1MDYtMC5jOgoJKiBjLXR5cGVjay5jIChyZXF1aXJlX2NvbXBsZXRlX3R5cGUpOiBIYW5kbGUgRVJST1JfTUFSSyBpbnB1dC4KClN1biBNYXkgIDkgMTM6MTk6MTIgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZ2NzZS5jIChjcHJvcF9pbnNuKTogRG8gbm90IHRyeSB0byBzaW1wbGlmeSBhIHNpbXBsZSBqdW1wLgoKU3VuIE1heSAgOSAxMToxMjoxOSAxOTk5ICBQaGlsaXAgQmx1bmRlbGwgPGJwQG5leHVzLmNvLnVrPgoKCSogY29uZmlnL2FybS9hcm0uaCAoQVNNX09VVFBVVF9NSV9USFVOSyk6IEFkZCAoUExUKSB0byBicmFuY2ggaWYKCW5lY2Vzc2FyeS4gIFJlcG9ydGVkIGJ5IGppbUBmZWRlcmF0ZWQuY29tLgoKU2F0IE1heSAgOCAyMzowNTozNSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBwYS5oIChQUklOVF9PUEVSQU5EX0FERFJFU1MpOiBPdXRwdXQgIiVyMCIsIG5vdCAicjAiIGZvciB0aGUKCWJhc2UgcmVnaXN0ZXIgaW4gYW4gYWJzb2x1dGUgbWVtb3J5IGFkZHJlc3MuCgkqIHBhLm1kIChjb25kaXRpb25hbCBtb3Zlcyk6IEF2b2lkIHVzaW5nIGltbWVkaWF0ZSB6ZXJvIGZvcgoJcmVnaXN0ZXIgemVyby4KClNhdCBNYXkgIDggMDY6MjM6MjEgMTk5OSAgUGhpbGlwIEJsdW5kZWxsICA8cGJAbmV4dXMuY28udWs+CgoJQmFzZWQgb24gcGF0Y2ggYnkgU2NvdHQgQmFtYnJvdWdoOgoJKiBjb25maWcvYXJtL2FybS5oIChORUVEX1BMVF9HT1QpOiBOZXcgbWFjcm8uICBTZXQgdG8gMCBpZiBub3QKCWFscmVhZHkgZGVmaW5lZC4KCSogY29uZmlnL2FybS9lbGYuaCAoTkVFRF9QTFRfR09UKTogRGVmaW5lIHRvIGZsYWdfcGljLgoJKiBjb25maWcvYXJtL2FybS5tZCAoY2FsbF9zeW1ib2wsIGNhbGxfdmFsdWVfc3ltYm9sIGV0IGFsLik6IElmCglORUVEX1BMVF9HT1QgaXMgdHJ1ZSwgYWRkIGV4cGxpY2l0ICIoUExUKSIgdG8gZ2VuZXJhdGVkIGJyYW5jaGVzLgoJKiBjb25maWcvYXJtL2FybS5jIChvdXRwdXRfZnVuY19lcGlsb2d1ZSwKCW91dHB1dF9yZXR1cm5faW5zdHJ1Y3Rpb24pOiBMaWtld2lzZSBmb3IgY2FsbHMgdG8gYWJvcnQuCgpTYXQgTWF5ICA4IDAxOjU3OjU4IDE5OTkgIERvbm4gVGVycnkgKGRvbm5AaW50ZXJpeC5jb20pCgoJKiBjYWxscy5jIChydHhfZm9yX2Z1bmN0aW9uX2NhbGwpOiBFeHRlbmQgZnVuY3Rpb24gcG9pbnRlciBiZWluZwoJcGFzc2VkIHRvIGNoa3JfY2hlY2tfZXhlY19saWJmdW5jLCBpZiBuZWVkZWQuCgpTYXQgTWF5ICA4IDAxOjUxOjUwIDE5OTkgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIGdpbmNsdWRlL3N0ZGFyZy5oIChfX3ZhX3JvdW5kZWRfc2l6ZSk6IFVzZSBsb25nIHR5cGUgZm9yCglyb3VuZGluZyBvbiBBSVguCgkqIGdpbmNsdWRlL3ZhcmFyZ3MuaDogTGlrZXdpc2UuCgpTYXQgTWF5ICA4IDAxOjQ3OjIwIDE5OTkgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmNzLnVuaS1kb3J0bXVuZC5kZT4KCgkqIGludm9rZS50ZXhpOiBSZW1vdmUgZHVwbGljYXRlcyBpbiB0aGUgZGVzY3JpcHRpb24gb2YgLWQKCWxldHRlcnMuICBGaXggdXNlIG9mIEBpdGVtIHZzLiBAaXRlbXguCgpTYXQgTWF5ICA4IDAxOjQzOjAyIDE5OTkgIEZyYW56IFNpcmwgIDxGcmFuei5TaXJsLWtlcm5lbEBsYXV0ZXJiYWNoLmNvbT4KCgkqIHJzNjAwMC5oIChSUzYwMDBfVkFSQVJHU19PRkZTRVQpOiBEaWUgZGllIGRpZS4KCShDVU1VTEFUSVZFX0FSR1MpOiBSZW1vdmUgdmFyYXJnc19vZmZzZXQ7IHVwZGF0ZSBjb21tZW50YXJ5LgoJKiByczYwMDAuYyAoc2V0dXBfaW5jb21pbmdfdmFyYXJncyk6IEZpeCB0eXBvIGxhc3QgY2hhbmdlLgoJKGluaXRfY3VtdWxhdGl2ZV9hcmdzKTogUmVtb3ZlIHZhcmFyZ3Nfb2Zmc2V0IHJlZmVyZW5jZXMuCgoJKiByczYwMDAvbGludXguaCAoTk9fSU1QTElDSVRfRVhURVJOX0MpOiBEZWZpbmUuCgkoTURfRVhFQ19QUkVGSVgsIE1EX1NUQVJURklMRV9QUkVGSVgpOiBVbmRlZmluZS4KClNhdCBNYXkgIDggMDE6MzQ6MTkgMTk5OSAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uY3MudW5pLWRvcnRtdW5kLmRlPgoKCSogcmVsb2FkMS5jIChnZW5fbW9kZV9pbnQpOiBOZXcgZnVuY3Rpb24uCgkocmVsb2FkX2NzZV9tb3ZlMmFkZCk6IFVzZSBpdCB0byBnZW5lcmF0ZSB0aGUgbmV3IGNvbnN0YW50cy4KClNhdCBNYXkgIDggMDE6MjU6MDkgMTk5OSAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uY3MudW5pLWRvcnRtdW5kLmRlPgoKCSogdmFyYXNtLmMgKG91dHB1dF9jb25zdGFudCk6IERvIG5vdGhpbmcgaWYgLWZzeW50YXgtb25seS4KCkZyaSBNYXkgIDcgMTk6MTA6MTUgMTk5OSAgVmxhZGltaXIgTWFrYXJvdiAgPHZtYWthcm92QHRvZnUudG8uY3lnbnVzLmNvbT4KCgkqIHNwYXJjLmggKEdPX0lGX0xFR0lUSU1BVEVfQUREUkVTUyk6IFByb2hpYml0IFJFRytSRUcgYWRkcmVzc2luZwoJZm9yIFRGbW9kZSB3aGVuIHRoZXJlIGFyZSBubyBpbnN0cnVjdGlvbnMgd2hpY2ggYWNjZXB0IFJFRytSRUcKCWluc3RydWN0aW9ucy4KCkZyaSBNYXkgIDcgMTI6Mzg6NTQgMTk5OSAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogbWlwcy9lbGY2NC5oIChNQUtFX0RFQ0xfT05FX09OTFksIFVOSVFVRV9TRUNUSU9OX1ApOiBEZWZpbmUuCgkqIG1pcHMvbWlwcy5jIChtaXBzX3NlbGVjdF9ydHhfc2VjdGlvbik6IFdoZW4gVEFSR0VUX01JUFMxNiwgdXNlCglmdW5jdGlvbl9zZWN0aW9uIGluc3RlYWQgb2YgdGV4dF9zZWN0aW9uLgoJKiBtaXBzL21pcHMuaCAoRU5DT0RFX1NFQ1RJT05fSU5GTyk6IEFkZCBjaGVjayBmb3IgVU5JUVVFX1NFQ1RJT05fUAoJaW4gVEFSR0VUX01JUFMxNiBTVFJJTkdfQ1NUIGhhbmRsaW5nLgoKRnJpIE1heSAgNyAwOTo1NDoxMSAxOTk5ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCVBhdGNoIGZyb206IE5pY2sgQnVycmV0dCAgPG5pY2suYnVycmV0dEBidGludGVybmV0LmNvbT4KCgkqIGFybS5jIChhcm1fcG9rZV9mdW5jdGlvbl9uYW1lKTogTmV3IGZ1bmN0aW9uIHRvIGltcGxlbWVudAoJLW1wb2tlLWZ1bmN0aW9uLW5hbWUuCgkqIGFvZi5oIChBU01fREVDTEFSRV9GVU5DVElPTl9OQU1FKTogQ2FsbCBpdC4KCSogYW91dC5oIChBU01fREVDTEFSRV9GVU5DVElPTl9OQU1FKTogTGlrZXdpc2UuCgkqIGVsZi5oIChBU01fREVDTEFSRV9GVU5DVElPTl9OQU1FKTogTGlrZXdpc2UuCgkqIGFybS5oOiBQcm90b3R5cGUgaXQuCgkoVEFSR0VUX1NXSVRDSEVTKTogQWRkIGBuby1wb2tlLWZ1bmN0aW9uLW5hbWUnLgoKRnJpIE1heSAgNyAxNDoxOTozMSAxOTk5ICBSYWluZXIgT3J0aCAgPHJvQFRlY2hGYWsuVW5pLUJpZWxlZmVsZC5ERT4KCgkqIGZpeGluYy9zZXJ2ZXIuYyAobG9hZF9kYXRhKTogQ2FzdCB0ZXh0X3NpemUgdG8gbG9uZywgYWRhcHQKCWZvcm1hdC4KCSogZml4aW5jL3NlcnZlci5jIChyZWFkX3BpcGVfdGltZW91dCk6IERlY2xhcmUgdm9sYXRpbGUsIG1vZGlmaWVkCglpbiBzaWduYWwgaGFuZGxlci4KCShzaWdfaGFuZGxlcik6IEFkZCBkZWJ1ZyBjb2RlLgoJKiBmaXhpbmMvc2VydmVyLmMgKHJ1bl9zaGVsbCk6IERvbid0IFwtZXNjYXBlIGNkLCBpdCBicmVha3MgdGhlCglVbHRyaXggVjQuMyAvYmluL3NoLgoJKiBmaXhpbmMvc2VydmVyLmMgKGRlZl9hcmdzKTogVXNlIHN0YXRpYyBpbnN0ZWFkIG9mIFNUQVRJQyB0bwoJYXZvaWQgcmVkZWZpbml0aW9uIGVycm9yIGZyb20gbGlua2VyIGlmZiBERUJVRy4KCgkqIGZpeGluYy9oYWNrc2hlbGwudHBsOiBEb24ndCBzdHJpcCB0cmFpbGluZyBkaXJlY3RvcnkgZnJvbQoJREVTVERJUiAtIHRoYXQgaXMgYWxyZWFkeSBkb25lCgoJKiBmaXhpbmMvZml4aW5jbC5jIChydW5fY29tcGlsZXMpOiBmaXggbWVtb3J5IGxlYWsKClRodSBNYXkgIDYgMjA6MzQ6MDAgMTk5OSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIHJlc291cmNlLmMgKG1hcmtfcmVmZXJlbmNlZF9yZXNvdXJjZXMpOiBNYWtlIHZvbGF0aWwKCW1vbm90b25pY2FsbHkgaW5jcmVhc2luZy4KCShtYXJrX3NldF9yZXNvdXJjZXMpOiBMaWtld2lzZS4KClRodSBNYXkgIDYgMjA6MDI6MzMgMTk5OSAgRnJlZCBGaXNoICA8Zm5mQGJlLmNvbT4KCgkqIHJzNjAwMC94bS1iZW9zLmggKEhBVkVfVlBSSU5URik6IERvbid0IHJlZGVmaW5lIGlmIGFscmVhZHkgZGVmaW5lZC4KCShIQVZFX1BVVEVOViwgSEFWRV9BVEVYSVQsIEhBVkVfUkVOQU1FKTogTGlrZXdpc2UuCgpXZWQgTWF5ICA1IDIwOjI4OjMyIDE5OTkgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGluc3RhbGwudGV4aSAoSGVhZGVyIERpcnMpOiBzL0dQTFVTL0dQTFVTUExVUy8uCgpXZWQgTWF5ICA1IDIzOjQ0OjE1IDE5OTkgIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHVucm9sbC5jIChjb3B5X2xvb3BfYm9keSk6IERvbid0IGNvcHkgVlRPUCBub3RlcyBmcm9tIGNvcHlfbm90ZXNfZnJvbS4KCldlZCBNYXkgIDUgMTY6MjY6MTMgMTk5OSAgVmxhZGltaXIgTWFrYXJvdiAgPHZtYWthcm92QHRvZnUudG8uY3lnbnVzLmNvbT4KCgkqIGZ1bmN0aW9uLmMgKHB1cmdlX2FkZHJlc3NvZl9yZXBsYWNlbWVudHMpOiBSZW5hbWUgaW50bwoJcHVyZ2VfYml0ZmllbGRfYWRkcmVzc29mX3JlcGxhY2VtZW50cy4KCShwdXJnZV9hZGRyZXNzb2ZfcmVwbGFjZW1lbnRzKTogTmV3IHZhcmlhYmxlLgoJKHB1cmdlX2FkZHJlc3NvZl8xKTogQWRkIGNvZGUgZm9yIGNoYW5naW5nIGFkZHJlc3NvZiBpbiBub3RlcyBmb3IKCWZpZWxkIHZhbHVlcyB3aGljaCBhcmUgZXh0cmFjdGVkIGJ5IHVzYWdlIE1FTSB3aXRoIG5hcnJvd2VyIG1vZGUuCgkocHVyZ2VfYWRkcmVzc29mKTogSW5pdGlhbGl6ZSBwdXJnZV9iaXRmaWVsZF9hZGRyZXNzb2ZfcmVwbGFjZW1lbnRzLgoKV2VkIE1heSAgNSAwNzo0MDowMiAxOTk5ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCVBhdGNoIGZyb206IE5pY2sgQnVycmV0dCAgPG5pY2suYnVycmV0dEBidGludGVybmV0LmNvbT4KCSogY29uZmlnL2FybS9hcm0uaCAoQVJNX01DT1VOVF9OQU1FKTogRGVmaW5lLgoJKEZVTkNUSU9OX1BST0ZJTEVSKTogUmVtb3ZlIGFzc2VtYmxlciBkaWFsZWN0IGRlcGVuZGVuY3kgYW5kIHVzZQoJQVJNX01DT1VOVF9OQU1FLgoJKFRSQU1QT0xJTkVfVEVNUExBVEUpOiBSZW1vdmUgYXNzZW1ibGVyIGRpYWxlY3QgZGVwZW5kZW5jeS4KCgkqIGNvbmZpZy9hcm0vYW9mLmggKEFSTV9NQ09VTlRfTkFNRSk6IERlZmluZS4KCjE5OTktMDUtMDUgMDk6NTggLTA0MDAgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkuY29sdW1iaWEuZWR1PgoKCSogZ2NjLmMgKGRlZmF1bHRfY29tcGlsZXJzKTogRml4IGJyYWNlIG5lc3RpbmcgYnVnLgoJKiBvYmpjL2xhbmctc3BlY3MuaDogVXNlICVpLCBub3QgJWcubWksIGZvciB0aGUgaW5wdXQgZmlsZQoJd2hlbiBwcm9jZXNzaW5nIGFuIC5taSBmaWxlLgoKVHVlIE1heSAgNCAxMzoxNzo1NSAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogcmVzb3VyY2UuYyAobWFya19zZXRfcmVzb3VyY2VzKTogSGFuZGxlIFVOU1BFQ19WT0xBVElMRSwKCUFTTV9JTlBVVCwgVFJBUF9JRiwgYW5kIEFTTV9PUEVSQU5EUyBqdXN0IGxpa2UgaW4KCW1hcmtfcmVmZXJlbmNlZF9yZXNvdXJjZXMuCgpNb24gTWF5ICAzIDIyOjM4OjQxIDE5OTkgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIHJzNjAwMC9haXg0My5oIChTVUJUQVJHRVRfT1ZFUlJJREVfT1BUSU9OUyk6IENoYW5nZSBub24tUG93ZXJQQwoJYW5kIEFJWDY0IGNvbWJpbmF0aW9uIHRvIHdhcm5pbmcuICBBZGQgd2FybmluZyBmb3IgZGlzYWJsaW5nCglQb3dlclBDNjQgc3VwcG9ydCB3aGVuIHVzaW5nIDY0LWJpdCBtb2RlLgoJKExJQl9TUEVDKTogRG8gbm90IGxpbmsgd2l0aCBsaWJnLmEgaW4gNjQtYml0IG1vZGUuCgkoTElOS19TUEVDKTogRG8gbm90IGV4cG9ydCBsaWJnLmV4cCBzeW1ib2xzIGluIDY0LWJpdCBtb2RlLgoJKiByczYwMDAvcnM2MDAwLmggKE1ZX0lTQ09GRik6IFRyZWF0IGltcG9ydC9leHBvcnQgZmlsZXMgYXMgdmFsaWQKCVhDT0ZGIGZpbGVzLgoJKHJlYWRfb25seV9kYXRhX3NlY3Rpb24sIHByaXZhdGVfZGF0YV9zZWN0aW9uLAoJcmVhZF9vbmx5X3ByaXZhdGVfZGF0YV9zZWN0aW9uKTogQWx3YXlzIGFsaWduIENTRUNUcyB0byBkb3VibGV3b3JkCglib3VuZGFyeSByZWdhcmRsZXNzIG9mIG1vZGUuCgkoVEVYVF9TRUNUSU9OX0FTTV9PUCk6IEFsaWduIHRleHQgQ1NFQ1Qgb24gZG91Ymxld29yZCBib3VuZGFyeSBpbgoJNjQtYml0IG1vZGUuCgkoREFUQV9TRUNUSU9OX0FTTV9PUCk6IEFsd2F5cyBhbGlnbiBDU0VDVCB0byBkb3VibGV3b3JkIGJvdW5kYXJ5LgoJKEFTTV9PVVRQVVRfTE9DQUwpOiBVc2Ugcm91bmRlZCBzaXplIGluIDY0LWJpdCBtb2RlIHRvCgltYWludGFpbiBkb3VibHdvcmQgYWxpZ25tZW50LgoKTW9uIE1heSAgMyAxNDo0NToyMyAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBtbjEwMjAwLm1kIChidHN0IGluc25zKTogYnRzdCBkb2VzIG5vdCBsZWF2ZSBjYzAgaW4gYSB1c2FibGUKCXN0YXRlIGZvciByZWR1bmRhbnQgdHN0IGVsaW1pbmF0aW5vLgoJKiBtbjEwMzAwLm1kIChidHN0IGluc25zKTogTGlrZXdpc2UuCgpNb24gTWF5ICAzIDE2OjE0OjMyIDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIG1pcHMuaCAoUG1vZGUpOiBSZXZlcnQgT2N0IDE0dGggY2hhbmdlIHdoaWNoIGFkZGVkIGEgY2FzdC4KClN1biBNYXkgIDIgMTQ6MDI6MjEgMTk5OSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIHRyZWUuaCAoc3RydWN0IHRyZWVfZGVjbCk6IEFkZCBjb21kYXRfZmxhZy4KCShERUNMX0NPTURBVCk6IERlZmluZSBpdC4KCSogdG9wbGV2LmMgKHdyYXB1cF9nbG9iYWxfZGVjbGFyYXRpb25zKTogRG9uJ3Qgb3V0cHV0IGEKCURFQ0xfQ09NREFUIGZ1bmN0aW9uIGp1c3QgYmVjYXVzZSBpdCdzIHB1YmxpYy4KClN1biBNYXkgIDIgMTU6MTY6NDIgMTk5OSAgSm9zZXBoIFMuIE15ZXJzICA8anNtMjhAY2FtLmFjLnVrPgoKCSogcGRwMTEuaCAoVEFSR0VUX1NXSVRDSEVTKTogRml4IGVycm9yIGluIHByZXZpb3VzIGNoYW5nZS4KCShBU1NFTUJMRVJfRElBTEVDVCk6IERlZmluZS4KCShDT05ESVRJT05BTF9SRUdJU1RFUl9VU0FHRSk6IFJlbmFtZSBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMgaWYKCXJlcXVpcmVkIGZvciB0aGUgVU5JWCBhc3NlbWJsZXIuCgkoQVNNX09VVFBVVF9JTlQpOiBSZW1vdmUuICBUaGUgY29tcGlsZXIgd2lsbCBzeW50aGVzaXNlIGl0LgoJKEFTTV9PVVRQVVRfQUREUl9WRUNfUFJPTE9HVUUpOiBSZW1vdmUuCgkoQVNNX09QRU5fUEFSRU4sIEFTTV9DTE9TRV9QQVJFTik6IENoYW5nZSB0byAiWyIgYW5kICJdIi4KCShUUkFNUE9MSU5FX1RFTVBMQVRFKTogVXNlIEFTTV9PVVRQVVRfU0hPUlQuCgkqIHBkcDExLmMgKG91dHB1dF9hZGRyX2NvbnN0X3BkcDExKTogQ29weSBvZiBvdXRwdXRfYWRkcl9jb25zdAoJYWRhcHRlZCB0byBvdXRwdXQgY29uc3RhbnRzIGluIG9jdGFsLgoJKiBwZHAxMS5jLCBwZHAxMS5oLCBwZHAxMS5tZDogVXNlIG91dHB1dF9hZGRyX2NvbnN0X3BkcDExIGluc3RlYWQKCW9mIG91dHB1dF9hZGRyX2NvbnN0LiAgT3V0cHV0IGNvbnN0YW50cyBpbiBvY3RhbC4gIFVzZSBhc3NlbWJsZXIKCWRpYWxlY3QgYWx0ZXJuYXRpdmVzIHdoZXJlIERFQyBhbmQgVU5JWCBhc3NlbWJsZXJzIHVzZSBkaWZmZXJlbnQKCWluc3RydWN0aW9uIG5hbWVzLgoKU3VuIE1heSAyIDAxOjE1OjA2IFBEVCAxOTk5IEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKRnJpIEFwciAzMCAxMzo1NTo0MyAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogdmEtcHBjLmggKF9fdmFfc3RhcnRfY29tbW9uKTogTGV0IF9fYnVpbHRpbl9zYXZlcmVncyBkbyB0aGUgd29yay4KCSogcnM2MDAwLmMgKGV4cGFuZF9idWlsdGluX3NhdmVyZWdzKTogRm9yIFY0LCBpbml0aWFsaXplIGEgcHJpdmF0ZQoJdmFfbGlzdCBzdHJ1Y3QsIGFuZCByZXR1cm4gYSBwb2ludGVyIHRvIGl0LgoJKHNldHVwX2luY29taW5nX3ZhcmFyZ3MpOiBWNCBzYXZlIGFyZWEgYmFzZWQgb2ZmIHZpcnR1YWxfc3RhY2tfdmFycwoJaW5zdGVhZCBvZiBmcmFtZV9wb2ludGVyLgoKVGh1IEFwciAyOSAyMzowMjoyMiAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogZW1pdC1ydGwuYyAoc3RhcnRfc2VxdWVuY2UpOiBFeHBhbmQgY29tbWVudHMuCgkoc3RhcnRfc2VxdWVuY2VfZm9yX3J0bF9leHByKTogTGlrZXdpc2UuCgkocHVzaF90b19zZXF1ZW5jZSk6IExpa2V3aXNlLgoJKGVuZF9zZXF1ZW5jZSk6IExpa2V3aXNlLgoJKiBleHByLmMgKGluaGliaXRfZGVmZXJfcG9wKTogTGlrZXdpc2UuCgkqIGV4cHIuaCAoaW5oaWJpdF9kZWZlcl9wb3ApOiBMaWtld2lzZS4KCShOT19ERUZFUl9QT1ApOiBMaWtld2lzZS4KCShPS19ERUZFUl9QT1ApOiBMaWtld2lzZS4KClRodSBBcHIgMjkgMjI6MTM6NDYgMTk5OSAgUm9iZXJ0IExpcGUgIDxyb2JlcnRsaXBlQHVzYS5uZXQ+CgoJKiBjb25maWd1cmUuaW4gKGk/ODYtVW5peFdhcmU3Ki1zeXN2KTogU2V0IHRocmVhZF9maWxlIHRvICdwb3NpeCcKCS0tZW5hYmxlLXRocmVhZHNbPXt5ZXMscHRocmVhZHMscG9zaXh9XSBpcyBwYXNzZWQgYXMgYSBjb21tYW5kCglsaW5lIHBhcmFtZXRlciB0byBjb25maWd1cmUuCgkqIGNvbmZpZy9pMzg2L3N5c3Y1LmggKExJQl9TUEVDKTogQWRkIHN1cHBvcnQgZm9yICctcHRocmVhZCcuCgkoQ1BQX1NQRUMpOiBMaWtld2lzZS4KClRodSBBcHIgMjkgMTc6MjM6NTkgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGVtaXQtcnRsLmMgKG9wZXJhbmRfc3Vid29yZCk6IFJlbGlnaW91c2x5IG1hc2sgYW5kIHNpZ24tZXh0ZW5kCglmcm9tIDMyLWJpdHMgdG8gSE9TVF9XSURFX0lOVC4KClRodSBBcHIgMjkgMTU6NTg6NTIgMTk5OSAgUm9iZXJ0IExpcGUgIDxyb2JlcnRsaXBlQHVzYS5uZXQ+CgoJKiBmaXhpbmMvcmVnZXguYywgZml4aW5jL3JlZ2V4Lmg6IFJlbW92ZWQuICAgUmVwbGFjZSB3aXRoLi4uCgkqIGZpeGluYy9nbnUtcmVnZXguYywgZml4aW5jL2dudS1yZWdleC5oOiBJbXBvcnRlZCBmcm9tIEdEQiA0LjE4LgoJKiBmaXhpbmMvTWFrZWZpbGUuaW4gKE9CSiwgSERSKTogSGFuZGxlIG5hbWUgY2hhbmdlcyBmcm9tIGFib3ZlLgoJKGdudS1yZWdleC5vKTogRGVmaW5lIFJFR0VYX01BTExPQyB0byBhdm9pZCBtZW1vcnkgbGVhay4KCSogZml4aW5jL2ZpeGluY2wuYzogbmV3IHJlZ2V4LmggaGVhZGVyIG5hbWUKCSogTWFrZWZpbGUuaW46IG5ldyByZWdleC5bY2hdIGZpbGUgbmFtZXMKClRodSBBcHIgMjkgMTI6NTM6MzMgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGNhbGxzLmMgKGVtaXRfY2FsbF8xKTogUGFzcyByb3VuZGVkX3N0YWNrX3NpemUgdG8gZW1pdF9jYWxsCglpbnN0ZWFkIG9mIHRoZSB1bnJvdW5kZWQgc2l6ZS4KCjE5OTktMDQtMjggMTQ6NDAgQnJ1Y2UgS29yYiA8ZGRzaW5jMDlAaXgubmV0Y29tLmNvbT4KCgkqIGZpeGluYy9ta2ZpeGluYy5zaDogTWFrZXN1cmUgdGhlIHJlc3VsdCBzaGVsbCBzY3JpcHQgaXMgd3JpdGFibGUKCldlZCBBcHIgMjggMTA6MzY6MzkgMTk5OSAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uY3MudW5pLWRvcnRtdW5kLmRlPgoKCSogY29uZmlnL202OGsvbTY4ay5tZCAoY21wc2krMSk6IFVzZSBjbXAudyB3aGVuIGNvbXBhcmluZyBhIDE2IGJpdAoJY29uc3RhbnQgd2l0aCBhbiBhZGRyZXNzIHJlZ2lzdGVyLgoKV2VkIEFwciAyOCAwMDoxNDo0MSBQRFQgMTk5OSBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KClR1ZSBBcHIgMjcgMTk6NTA6MjUgRURUIDE5OTkgIEFuZHJldyBNYWNMZW9kICA8YW1hY2xlb2RAY3lnbnVzLmNvbT4KCgkqIHJ0bC5oIChSRUdfRUhfUkVHSU9OKTogVXBkYXRlIGNvbW1lbnQgdG8gaW5kaWNhdGUgYSB2YWx1ZSBvZiAtMQoJaW5kaWNhdGVzIG5vIHRocm93IGFuZCBubyBub25sb2NhbCBnb3Rvcy4KCSogb3B0YWJzLmMgKGVtaXRfbGliY2FsbF9ibG9jayk6IEVtaXQgUkVHX0VIX1JFR0lPTiB3aXRoIGEgdmFsdWUKCW9mIC0xIGluc3RlYWQgb2YgMCB0byBpbmRpY2F0ZSBhIG5vbmxvY2FsIGdvdG8gd29uJ3QgaGFwcGVuIGVpdGhlci4KCSogZmxvdy5jIChjb3VudF9iYXNpY19ibG9ja3MsIGZpbmRfYmFzaWNfYmxvY2tzXzEpOiBJZ25vcmUgbGliY2FsbAoJYmxvY2tzLCBsb29rIGZvciBSRUdfRUhfUkVHSU9OIG5vdGUgZXhjbHVzaXZlbHkuCgkobWFrZV9lZGdlcyk6IENoZWNrIGZvciBSRUdfRUhfUkVHSU9OID4gMCBmb3Igc3BlY2lmaWVkIGhhbmRsZXJzLgoKVHVlIEFwciAyNyAxNTozMzo0MiAxOTk5ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiByczYwMDAuaCAocmVhZF9vbmx5X2RhdGFfc2VjdGlvbiwgcHJpdmF0ZV9kYXRhX3NlY3Rpb24sCglyZWFkX29ubHlfcHJpdmF0ZV9kYXRhX3NlY3Rpb24sIHRvY19zZWN0aW9uKTogQWxpZ24gQ1NFQ1Qgb24KCWRvdWJsZXdvcmQgYm91bmRhcnkgZm9yIDY0LWJpdCB0YXJnZXQuCgkoREFUQV9TRUNUSU9OX0FTTV9PUCk6IExpa2V3aXNlLgoJKiByczYwMDAuYyAocnM2MDAwX3N0YWNrX2luZm8pOiBMZWFmIHByb2NlZHVyZSBzdGFjayBsaW1pdCBpcyAyODguCgpUdWUgQXByIDI3IDIwOjE5OjQ3IDE5OTkgIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHNoLm1kIChpbnN2KTogVXNlIGNvcHlfYWRkcl90b19yZWcuCgoJKiBmaW5hbC5jIChpbnNuX2xlbmd0aHNfbWF4X3VpZCk6IE5ldyB2YXJpYWJsZS4KCShpbml0X2luc25fbGVuZ3Rocywgc2hvcnRlbl9icmFuY2hlcyk6IFNldCBpdC4KCShnZXRfYXR0cl9sZW5ndGhzKTogVGVzdCBpbnNuIHVpZCBhZ2FpbnN0IGluc25fbGVuZ3Roc19tYXhfdWlkLgoKMTk5OS0wNC0yNyAwODozMiAtMDQwMCAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5jb2x1bWJpYS5lZHU+CgoJKiBleHByLmMgKGVtaXRfbW92ZV9pbnNuXzEpOiBBYm9ydCBpZiBNT0RFIGFyZ3VtZW50IGlzIGludmFsaWQuCgkoY29tcGFyZSk6IFB1bnQgaWYgVFJFRV9PUEVSQU5EIChleHAsIDApIGlzIGFuIEVSUk9SX01BUksuCgpUdWUgQXByIDI3IDAxOjMzOjQzIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluIChPUkRJTkFSWV9GTEFHU19UT19QQVNTKTogUmVubWFlZCBmcm9tIEZMQUdTX1RPX1BBU1MuCglSZW1vdmUgIkNDIi4KCShGTEFHU19UT19QQVNTKTogTmV3IHZhcmlhYmxlLgoKVHVlIEFwciAyNyAwMDozNjo0NCAxOTk5ICBOaWNrIEJ1cnJldHQgIDxuaWNrLmJ1cnJldHRAYnRpbnRlcm5ldC5jb20+CgoJKiBhcm0ubWQgKG5vcCk6IE91dHB1dCBpbnN0cnVjdGlvbiB1c2luZyBvdXRwdXRfYXNtX2luc24gdG8gZml4Cglhc3NlbWJsZXIgZGlhbGVjdCBwcm9ibGVtcy4KCk1vbiBBcHIgMjYgMjM6NTU6NTAgMTk5OSAgUm9iZXJ0IExpcGUgIDxyb2JlcnRsaXBlQHVzYS5uZXQ+CgoJKiBNYWtlZmlsZS5pbiAoZml4aW5jLnNoKTogRml4IGRlcGVuZGVuY2llcy4KCgkqIGZpeGluYy9pbmNsaGFjay5kZWYgKGF2b2lkX2Jvb2wpOiBFbmFibGUgbWF0Y2ggaWYgdHlwZWRlZnMgYXJlCglwcmVwZW5kZWQgYnkgc3BhY2VzLgoJKHNjbzVfc3RhdF93cmFwcGVycyk6IE5ldyBmaXguICAgTWFrZSBzeXMvc3RhdC5oIEMrKyBzYWZlLgoJKiBmaXhpbmMvZml4aW5jbC5zaCwgZml4aW5jL2ZpeGluY2wueCwgZml4aW5jL2luY2xoYWNrLnNoOiBSZWJ1aWx0LgoKTW9uIEFwciAyNiAyMzoyODo1NCAxOTk5ICBNdW1pdCBLaGFuICA8a2hhbkB4cmF5bGl0aC53aXNjLmVkdT4KICAgICAgICAgICAgICAgICAgICAgICAgICBEb25uIFRlcnJ5ICA8ZG9ubkBpbnRlcml4LmNvbT4KCgkqIGZ1bmN0aW9uLmMgKHB1dF92YXJfaW50b19zdGFjayk6IENoYW5nZSBwdHJfbW9kZSB0byBQbW9kZQoJaW4gc2V0dXAgZm9yIGNoa3Jfc2V0X3JpZ2h0X2xpYmZ1bmMgY2FsbHMuCgkoYXNzaWduX3BhcmFtcyk6IExpa2V3aXNlLgoJKiBleHByLmMgKGVtaXRfcHVzaF9pbnNuKTogQ2hhbmdlIHB0cl9tb2RlIHRvIFBtb2RlIGluCglzZXR1cCBmb3IgY2hrcl9jb3B5X2JpdG1hcF9saWJmdW5jIGFuZCBjaGtyX3NldF9yaWdodF9saWJmdW5jIGNhbGxzLgoJKGV4cGFuZF9hc3NpZ25tZW50KTogQ2hhbmdlIHB0cl9tb2RlIHRvIFBtb2RlIGluCglzZXR1cCBmb3IgY2hrcl9hZGRfbGliZnVuYyBhbmQgY2hrcl9jb3B5X2JpdG1hcF9saWJmdW5jLgoJKHN0b3JlX2V4cHIpOiBDaGFuZ2UgcHRyX21vZGUgdG8gUG1vZGUgaW4KCXNldHVwIGZvciBjaGtyX2FkZF9saWJmdW5jIGFuZCBjaGtyX2NvcHlfYml0bWFwX2xpYmZ1bmMuCgkoZXhwYW5kX2V4cHIpOiBDaGFuZ2UgcHRyX21vZGUgdG8gUG1vZGUgaW4KCXNldHVwIGZvciBjaGtyX2NoZWNrX2FkZHJfbGliZnVuYy4KCShleHBhbmRfYnVpbHRpbik6IENoYW5nZSBwdHJfbW9kZSB0byBQbW9kZSBpbgoJc2V0dXAgZm9yIGNoa3JfY2hlY2tfc3RyX2xpYmZ1bmMsIGNoa3JfY29weV9iaXRtYXBfbGliZnVuYyBhbmQKCWNoa3JfY2hlY2tfYWRkcl9saWJmdW5jLgoJKiBjYWxscy5jIChydHhfZm9yX2Z1bmN0aW9uX2NhbGwpOiBDaGFuZ2UgcHRyX21vZGUgdG8gUG1vZGUgaW4KCXNldHVwIGZvciBjaGtyX2NoZWNrX2V4ZWNfbGliZnVuYy4KCShleHBhbmRfY2FsbCk6IENoYW5nZSBwdHJfbW9kZSB0byBQbW9kZSBpbgoJc2V0dXAgZm9yIGNoa3Jfc2V0X3JpZ2h0X2xpYmZ1bmMuCgkoZXhwYW5kX2NhbGwpOiBDaGFuZ2UgcHRyX21vZGUgdG8gUG1vZGUgaW4KCXNldHVwIGZvciBjaGtyX3NldF9yaWdodF9saWJmdW5jLgoJKHN0b3JlX29uZV9hcmcpOiBDaGFuZ2UgcHRyX21vZGUgdG8gUG1vZGUgaW4KCXNldHVwIGZvciBjaGtyX3NldF9yaWdodF9saWJmdW5jLgoKCSogYy1wYXJzZS5pbiAoYWJzZGNsMSk6IEFsbG93IGF0dHJpYnV0ZXMgaW4gZXhwbGljaXQgdHlwZXNwZWNzLgoJKCVleHBlY3QpOiBVcGRhdGUuCgkqIGMtcGFyc2UueTogUmVnZW5lcmF0ZS4KCSogYy1wYXJzZS5jOiBMaWtld2lzZS4KCSogb2JqYy9vYmpjLXBhcnNlLmM6IExpa2V3aXNlLgoJKiBvYmpjL29iamMtcGFyc2UueTogTGlrZXdpc2UuCgpNb24gQXByIDI2IDIxOjE3OjQxIDE5OTkgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGMtcHJhZ21hLmMgKHB1c2hfYWxpZ25tZW50KTogRG9uJ3QgaWdub3JlIGFsaWdubWVudHMgZ3JlYXRlciB0aGFuCgk0IGJ5dGVzLgoJKGhhbmRsZV9wcmFnbWFfdG9rZW4pOiBMaWtld2lzZS4KCgkqIGMtcHJhZ21hLmM6IFN1cHBvcnQgZm9yICNwcmFnbWEgcGFjayAocHVzaCwgPGlkPiwgPG4+KS4KCShzdHJ1Y3QgYWxpZ25fc3RhY2spOiBBZGQgaWQgZmllbGQuCgkocHVzaF9hbGlnbm1lbnQsIHBvcF9hbGlnbm1lbnQpOiBUYWtlIGlkIHBhcmFtZXRlci4KCShoYW5kbGVfcHJhZ21hX3Rva2VuKTogQWRkIG5lY2Vzc2FyeSBzdGF0ZXMuCgkqIGMtcHJhZ21hLmggKGVudW0gcHJhZ21hX3N0YXRlKTogQWRkIG5lY2Vzc2FyeSBzdGF0ZXMuCgpUdWUgQXByIDI3IDEzOjU4OjIzIDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4Lm1kICgqY21wcWYsICpjbXBxZl9ub292LCAqY21wcWlfdGVzdCwKCSpjbXBxaV90ZXN0X25vb3YpOiBSZW1vdmUgPyBtb2RpZmllciBmcm9tIGNvbnN0cmFpbnRzIGxpc3QuCgkoKnNtdWxxaTNfaGlnaHBhcnRfY2xvYmJlciwgKnVtdWxxaTNfaGlnaHBhcnRfY2xvYmJlcik6IFN3YXAKCW91dHB1dCBzdHJpbmdzIHRvIG1hdGNoIG5ldyBjb25zdHJhaW50IG9yZGVyaW5nLgoKMTk5OS0wNC0yNiAxOToxNiAtMDQwMCAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5jb2x1bWJpYS5lZHU+CgoJKiBjcHBoYXNoLmMgKGR1bXBfZGVmaW5pdGlvbik6IE5ldyBmdW5jdGlvbi4KCSogY3BwaGFzaC5oOiBQcm90b3R5cGUgaXQuCgoJKiBjcHBsaWIuYyAoaGFuZGxlX2RpcmVjdGl2ZSk6IERvbid0IG91dHB1dCBhbnl0aGluZyBoZXJlLgoJU3RyZWFtbGluZS4KCShwYXNzX3RocnVfZGlyZWN0aXZlKTogVGFrZSBhIGxlbmd0aCwgbm90IGEgcG9pbnRlciB0byB0aGUKCWVuZC4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCgkoZG9fZGVmaW5lKTogSGFuZGxlIC1kRCwgLWROLCAtZzMgZW50aXJlbHkgaGVyZS4gIFN0cmVhbWxpbmUuCgkoZG9faW5jbHVkZSk6IEhhbmRsZSAtZEkgaGVyZS4KCShkb19pZGVudCk6IENvcnJlY3QgdG8gbWF0Y2ggY2NjcC4KCShkb19wcmFnbWEpOiBDb3B5IHRoZSBwcmFnbWEgdGhyb3VnaCBoZXJlLgoJKGRvX2Fzc2VydCwgZG9fdW5hc3NlcnQpOiBUaWR5LgoKCSogY3BwaW5pdC5jIChjcHBfZmluaXNoKTogSWYgLWRNIHdhcyBzcGVjaWZpZWQsIHdhbGsgdGhlIG1hY3JvCgloYXNoIHRhYmxlIGFuZCBjYWxsIGR1bXBfZGVmaW5pdGlvbiBvbiBhbGwgdGhlIGVudHJpZXMuCgkqIGNwcG1haW4uYzogY3BwX2ZpbmlzaCBtYXkgcHJvZHVjZSBvdXRwdXQuCgpNb24gQXByIDI2IDE1OjI3OjMzIDE5OTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiB0b3BsZXYuYyAoY29tcGlsZV9maWxlKTogTW92ZSBjYWxsIHRvIGNoZWNrX2dsb2JhbF9kZWNsYXJhdGlvbnMKCWFmdGVyIG91dHB1dF9leGNlcHRpb25fdGFibGUgdG8gcmVzdG9yZSBiZWhhdmlvciBhcyBpdCB3YXMgYmVmb3JlCgkxOTk5LTA0LTIyIGNoYW5nZS4KCjE5OTktMDQtMjYgMTA6NTAgLTA3MDAgQnJ1Y2UgS29yYiA8ZGRzaW5jMDlAaXgubmV0Y29tLmNvbT4KCgkqIGZpeGluYy9maXhpbmNsLmM6ICBJbXByb3ZlIHRoZSBoYW5kbGluZyBvZiBjaGlsZCBwcm9jZXNzIGV4aXRzCgkqIGZpeGluYy9zZXJ2ZXIuW2NoXTogRXhwb3J0IHRoZSBpbnRlcmZhY2UgZm9yIHNodXR0aW5nIGRvd24KCXRoZSBzZXJ2ZXIgcHJvY2VzcwoJKiBmaXhpbmMvaW5jbGhhY2sudHBsOiBSZW1vdmUgdW5uZWNlc3NhcnkgY2hhcmFjdGVyIHF1b3RlCgkqIGZpeGluYy9maXhpbmNsLnNoLCBmaXhpbmMvaW5jbGhhY2suc2g6IFJlZ2VuZXJhdGUKCk1vbiBBcHIgMjYgMTA6NDE6NDIgRURUIDE5OTkgIEFuZHJldyBNYWNMZW9kICA8YW1hY2xlb2RAY3lnbnVzLmNvbT4KCgkqIGFscGhhLm1kIChidWlsdGluX3NldGptcF9yZWNlaXZlcik6IFVzZSBhIGxhYmVsX3JlZiBpbnN0ZWFkIG9mCglhIGNvZGUgbGFiZWwuCgoxOTk5LTA0LTI2IDA5OjQ3IC0wNDAwICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLmNvbHVtYmlhLmVkdT4KCgkqIHJ0bC50ZXhpOiBEb2N1bWVudCB0aGUgcnRsIGNsYXNzZXMgYW5kIHRoZWlyIHJlbGF0aW9uIHRvCglmb3JtYXRzLgoKTW9uIEFwciAyNiAwMTowMjozOCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEubWQgKGZpeF90cnVuYyBwYXR0ZXJucyk6IFVzZSByZWdfbm9fc3VicmVnX29wZXJhbmQgb24gb3AwCglmb3IgbGVzcyB3b3JrIGluIHJlbG9hZC4KCShtb3ZzZiBhbmQgbW92ZGYgcGF0dGVybnMpOiBQdXQgZnAgcmVnIGFsdGVybmF0aXZlcyBmaXJzdC4KCk1vbiBBcHIgMjYgMDE6NTU6NTYgMTk5OSAgTWFyYyBFc3BpZSAgPGVzcGllQGN2cy5vcGVuYnNkLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbiAob3BlbmJzZCk6IEZhY3Rvcml6ZSB4bWFrZV9maWxlLgoJKGl4ODYgb3BlbmJzZCk6IFRyaW0gb2Jzb2xldGUgY29tbWVudC4KCSh2YXggb3BlbmJzZCk6IEZpeCB0eXBvLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgpNb24gQXByIDI2IDAxOjMwOjU5IDE5OTkgRG9ubiBUZXJyeSA8ZG9ubkBpbnRlcml4LmNvbT4KCgkqIGV4cHIuYyAoZXhwYW5kX2Fzc2lnbm1lbnQpOiBJbXByb3ZlIHRlc3QgZm9yIHBvaW50ZXIgdHlwZS4KCk1vbiBBcHIgMjYgMDA6MjY6MTggMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGFscGhhLmMgKHByaW50X29wZXJhbmRfYWRkcmVzcyk6IEFjY291bnQgZm9yIHRoZSBzdWJyZWcgd29yZC4KCk1vbiBBcHIgMjYgMDE6MDg6MzYgMTk5OSAgVG9zaGl5YXN1IE1vcml0YSAgKHRtQG5ldGNvbS5jb20pCgoJKiBmb2xkLWNvbnN0LmMgKG1ha2VfcmFuZ2UpOiBBbHdheXMgaW5pdGlhbGl6ZSBhcmcwIGFuZCBhcmcxLgoJKGZvbGQpOiBTaW1pbGFybHkgZm9yIGFsdDAgYW5kIGFsdDEuCgkqIGZ1bmN0aW9uLmMgKGZpeHVwX3Zhcl9yZWZzX2luc25zKTogSW5pdGlhbGl6ZSBpbnNuX2xpc3QuCgkoaW5zdGFudGlhdGVfdmlydHVhbF9yZWdzXzEpOiBJbml0aWFsaXplIG9mZnNldC4KCSogb3B0YWJzLmMgKGV4cGFuZF9iaW5vcCk6IEluaXRpYWxpemUgY2FycnlfaW4sIGNhcnJ5X291dCwgb3AwX3hoaWdoCglhbmQgb3AxX3hoaWdoLgoJKiBzdG10LmMgKGV4cGFuZF9lbmRfY2FzZSk6IEluaXRpYWxpemUgbWludmFsIGFuZCBtYXh2YWwuCgpNb24gQXByIDI2IDAxOjAyOjM0IDE5OTkgIE5hdGhhbiBTaWR3ZWxsICA8bmF0aGFuQGFjbS5vcmc+CgoJKiB0b3BsZXYuYyAocmVwb3J0X2Vycm9yX2Z1bmN0aW9uKTogUmVvcmRlciBmaWxlIHN0YWNrIGFuZAoJZnVuY3Rpb24gbmFtZSBwcmludGluZy4gIElnbm9yZSBGSUxFIHBhcmFtZXRlci4KCk1vbiBBcHIgMjYgMDA6NTg6NTQgMTk5OSAgSmVycnkgUXVpbm4gPGpxdWlubkBub3J0ZWxuZXR3b3Jrcy5jb20+CgoJKiBwYS5oIChhcmNoaXRlY3R1cmVfdHlwZSk6IE5ldyBlbnVtLgoJKHBhX2FyY2hfc3RyaW5nLCBwYV9hcmNoKTogRGVjbGFyZS4KCShNQVNLX1BBXzEwLCBNQVNLX1BBXzIwKTogTmV3IGZsYWdzLgoJKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCBwYS1yaXNjLTItMC4gIFVwZGF0ZSBkb2NzIGZvciBQQTEuMCBjb2RlZ2VuLgoJKFRBUkdFVF9PUFRJT05TKTogQWRkIC1tYXJjaD0gb3B0aW9uLgoJKiBwYS5jIChwYV9hcmNoLCBwYV9hcmNoX3N0cmluZyk6ICBEZWZpbmUuCgkob3ZlcnJpZGVfb3B0aW9ucyk6ICBTZXQgdGhlbS4KCSogcGEvcGEtaHB1eDEwLmggKEFTTV9GSUxFX1NUQVJUKTogIE91dHB1dCBMRVZFTCAyLjAgYXNtIGRpcmVjdGl2ZSBmb3IKCTIuMCBhcmNoaXRlY3R1cmUuCgkqIGludm9rZS50ZXhpIChPcHRpb24gU3VtbWFyeSwgSFBQQSBPcHRpb25zKTogIERvY3VtZW50IG5ldwoJYXJjaGl0ZWN0dXJlIGZsYWdzLgoKCSogcGEvcGEtaHB1eC5oLCBwYS9wYS1ocHV4MTAuaCwgcGEvcGEtaHB1eDkuaCwgcGEvcGEtb3NmLmgsIHBhLmgsCglwYS5jLCBwYS5tZCwgY29uZmlndXJlLmluLCBjb25maWd1cmU6IFJlcGxhY2UgVEFSR0VUX1NOQUtFIGJ5CglUQVJHRVRfUEFfMTEgYW5kIE1BU0tfU05BS0UgYnkgTUFTS19QQV8xMS4KCk1vbiBBcHIgMjYgMDA6Mjg6MjUgMTk5OSAgVGhlb2RvcmUgUGFwYWRvcG91bG8gPFRoZW9kb3JlLlBhcGFkb3BvdWxvQHNvcGhpYS5pbnJpYS5mcj4KCgkqIGZsYWdzLmggKGlubGluZV9tYXhfaW5zbnMpOiBEZWNsYXJlLgoJKiBpbnRlZ3JhdGUuYyAoaW5saW5lX21heF9pbnNucyk6IE5ldyB2YXJpYWJsZS4KCShmdW5jdGlvbl9jYW5ub3RfaW5saW5lX3ApOiBVc2UgaXQuCgkqIHRvcGxldi5jIChtYWluKTogQWRkIHRoZSBmbGFnIC1maW5saW5lLWxpbWl0LW4uCgkoZGlzcGxheV9oZWxwKTogRG9jdW1lbnQgLWZpbmxpbmUtbGltaXQtbi4KCSogaW52b2tlLnRleGk6IERvY3VtZW50IC1maW5saW5lLWxpbWl0LW4KClN1biBBcHIgMjUgMjM6MDM6MzIgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHN0bXQuYyAoZXhwYW5kX2FzbV9vcGVyYW5kcyk6IFJlbG9hZCBpbi1vdXQgcmVnLW9ubHkgbWVtb3J5IG9wZXJhbmRzLgoKU3VuIEFwciAyNSAxMzowNjoxMyAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZnVuY3Rpb24uYyAoYXNzaWduX3Bhcm1zL1NUQUNLX0JZVEVTKTogUmV2ZXJ0IGxhc3QgY2hhbmdlLAoJYW5kIHRoYXQgb2YgMTkgTm92LgoKU3VuIEFwciAyNSAxMjozMDo1MCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogY2FsbHMuYyAoZW1pdF9jYWxsXzEpOiBOZXcgYXJnIHJvdW5kZWRfc3RhY2tfc2l6ZTsgdXBkYXRlIGNhbGxlcnMuCglVcGRhdGUgcGVuZGluZ19zdGFja19hZGp1c3QgYmFzZWQgb24gdGhpcyB2YWx1ZS4KCShjb21wdXRlX2FyZ3VtZW50X2Jsb2NrX3NpemUpOiBJbmNsdWRlIHBlbmRpbmdfc3RhY2tfYWRqdXN0IGluCglQUkVGRVJSRURfU1RBQ0tfQk9VTkRBUlkgYWxpZ25tZW50LgoJKiBmdW5jdGlvbi5jIChhc3NpZ25fcGFybXMpOiBEb24ndCByb3VuZCB0byBQUkVGRVJSRURfU1RBQ0tfQk9VTkRBUlkuCgpTdW4gQXByIDI1IDE0OjM4OjEwIEVEVCAxOTk5ICBKb2huIFdlaGxlICAoam9obkBmZWl0aC5jb20pCgoJKiBzdHVwaWQuYyAoc3R1cGlkX21hcmtfcmVmcyk6IEdlbmVyYXRlIGEgUkVHX1VOVVNFRCBub3RlCglmb3IgYSByZWdpc3RlciB3aGljaCBpcyBjbG9iYmVyZWQgZXZlbiBpZiB0aGUgcmVnaXN0ZXIKCXdhcyB1c2VkIGJ5IGFuIGVhcmxpZXIgaW5zdHJ1Y3Rpb24uCgoJKiBpMzg2Lm1kIChmaXhfdHJ1bmNzZmRpMiwgZml4X3RydW5jZGZkaTIsCglmaXhfdHJ1bmN4ZmRpMik6IERvbid0IGJvdGhlciB3aXRoIHRoZSBnZW5fcmVnX1JUWC4KCShmaXhfdHJ1bmNzZnNpMiwgZml4X3RydW5jc2ZkaTIsIGZpeF90cnVuY2Rmc2kyLAoJZml4X3RydW5jZGZkaTIsIGZpeF90cnVuY3hmc2kyLCBmaXhfdHJ1bmN4ZmRpMik6IFVwZGF0ZQoJb3BlcmFuZCBjb25zdHJhaW50cyBhbmQgbW9kZXMuCgkqIGkzODYuYyAob3V0cHV0X2ZpeF90cnVuYyk6IFVzZSBISW1vZGUgcmVnaXN0ZXIgdG8gYXZvaWQKCW1lbW9yeSBzdGFsbHMuICBDYWxsIG91dHB1dF9tb3ZlX2RvdWJsZSBpbnN0ZWFkIG9mIG91dHB1dF90b19yZWcuCgkob3V0cHV0X3RvX3JlZyk6IFJlbW92ZS4KCSogaTM4Ni5oOiBMaWtld2lzZS4KCgkqIGkzODYubWQgKG5lZ3NmMiwgbmVnZGYyLCBuZWd4ZjIpOiBTZXQgdGhlIHR5cGUKCWF0dHJpYnV0ZSB0byBmcG9wLgoKU2F0IEFwciAyNCAyMzoxNTo1NyAxOTk5ICBEb25uIFRlcnJ5IChkb25uQGludGVyaXguY29tKQoKCSogYWxwaGEubWQgKGNhbGxfdmFsdWVfbnQpOiBDb3JyZWN0IHN1YnNjcmlwdHMuCgpTYXQgQXByIDI0IDIwOjQ5OjIwIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbHBoYS5oIChQUklOVF9PUEVSQU5EX0FERFJFU1MpOiBCcmVhayBvdXQgdG8gLi4uCgkqIGFscGhhLmMgKHByaW50X29wZXJhbmRfYWRkcmVzcyk6IGhlcmUuICBIYW5kbGUgc3VicmVncy4KCkZyaSBBcHIgMjMgMjI6MzU6NDEgRURUIDE5OTkgIEpvaG4gV2VobGUgIChqb2huQGZlaXRoLmNvbSkKCgkqIGFjY29uZmlnLmggKEhBVkVfR0FTX0ZJTERTX0ZJU1RTKTogQWRkLgoJKiBjb25maWd1cmUuaW46IENoZWNrIGFzc2VtYmxlciBpbnN0cnVjdGlvbnMuCgkqIGNvbmZpZ3VyZTogUmVidWlsZC4KCSogY29uZmlnLmluOiBMaWtld2lzZS4KCSogaTM4Ni5tZCAoZmxvYXRoaXNmMiwgZmxvYXRoaWRmMiwgZmxvYXRoaXhmMik6IE5ldyBwYXR0ZXJucy4KCSogaTM4Ni5jIChwcmludF9vcGVyYW5kKTogVXNlIHRoZSBwcm9wZXIgc3VmZml4IGZvciBhIDM4NyBISW1vZGUKCW9wZXJhbmQuICBBYm9ydCBpZiBhIDM4NyBvcGVyYW5kIGhhcyBhbiB1bnN1cHBvcnRlZCBzaXplLgoKRnJpIEFwciAyMyAxNjo1Nzo0MCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEuYyAoYWxwaGFfd3JpdGVfdmVyc3RhbXApOiBNYXJrIGBmaWxlJyB1bnVzZWQuCgkqIGFscGhhLmggKEZVTkNUSU9OX1ZBTFVFKTogVXNlIGdlbl9ydHhfUkVHIG5vdCBnZW5fcnR4LgoJKExJQkNBTExfVkFMVUUpOiBMaWtld2lzZS4KCShHT19JRl9MRUdJVElNQVRFX1NJTVBMRV9BRERSRVNTKTogSGFuZGxlIG5vcm1hbCBzdWJyZWdzLgoKRnJpIEFwciAyMyAxNDo1NzozMyAxOTk5ICBEb25uIFRlcnJ5ICA8ZG9ubkBpbnRlcml4LmNvbT4KCgkqIGFscGhhMzIuaCAoSU5JVElBTElaRV9UUkFNUE9MSU5FKTogR2V0IG9mZnNldHMgcmlnaHQuCgoJKiBhbHBoYS5jIChhbHBoYV9pbml0aWFsaXplX3RyYW1wb2xpbmUpOiBBZGQgY292ZXJ0X21lbW9yeV9hZGRyZXNzCgljYWxscyBhcyBuZWVkZWQuCgpGcmkgQXByIDIzIDE0OjM2OjQ3IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbHBoYS5jIChhbHBoYV9leHBhbmRfcHJvbG9ndWUpOiBEb24ndCBuZWdhdGUgZnJhbWUgc2l6ZQoJZm9yIHVzZSB3aXRoIHN1YnEuCgpGcmkgQXByIDIzIDA5OjQzOjE4IDE5OTkgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBwcmludC1ydGwuYyAocHJpbnRfcnR4KTogRGlzcGxheSBMQUJFTF9OVVNFUyBmb3IgbGFiZWxzLgoKVGh1IEFwciAyMiAyMzowODozNyAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogdG9wbGV2LmggKHdyYXB1cF9nbG9iYWxfZGVjbGFyYXRpb25zKTogRGVjbGFyZS4KCShjaGVja19nbG9iYWxfZGVjbGFyYXRpb25zKTogTGlrZXdpc2UuCgkqIHRvcGxldi5jICh3cmFwdXBfZ2xvYmFsX2RlY2xhcmF0aW9ucyk6IE5ldyBmdW5jdGlvbiwgc3BsaXQgb3V0Cglmcm9tIC4uLgoJKGNoZWNrX2dsb2JhbF9kZWNsYXJhdGlvbnMpOiBMaWtld2lzZS4uLgoJKGNvbXBpbGVfZmlsZSk6IEhlcmUuCgpUaHUgQXByIDIyIDIyOjM0OjQxIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBjLXBhcnNlLmluIChleHByX25vX2NvbW1hcyk6IFZlcmlmeSB3ZSd2ZSBhbiBleHByIGJlZm9yZQoJY2FsbGluZyBDX1NFVF9FWFBfT1JJR0lOQUxfQ09ERS4KClRodSBBcHIgMjIgMjI6MjI6MTUgRURUIDE5OTkgIEpvaG4gV2VobGUgIChqb2huQGZlaXRoLmNvbSkKCgkqIHRvcGxldi5jIChyZXN0X29mX2NvbXBpbGF0aW9uKTogQWx3YXlzIHNldAoJY3VycmVudF9mdW5jdGlvbl91c2VzX29ubHlfbGVhZl9yZWdzIGFwcHJvcHJpYXRlbHkuCgpUaHUgQXByIDIyIDE0OjM5OjQzIDE5OTkgIE11bWl0IEtoYW4gIDxraGFuQHhyYXlsaXRoLndpc2MuZWR1PgoKCSogaTM4Ni94bS1jeWd3aW4uaCAoSEFWRV9CQ09QWSk6IERlbGV0ZSB1bm5lZWRlZCBtYWNyby4KCShIQVZFX0JaRVJPKTogTGlrZXdpc2UuCgkoSEFWRV9CQ01QKTogTGlrZXdpc2UuCgkoSEFWRV9SSU5ERVgpOiBMaWtld2lzZS4KCShIQVZFX0lOREVYKTogTGlrZXdpc2UuCgkoRElSX1NFUEFSQVRPUl8yKTogRGVmaW5lLgoJKEdFVF9FTlZfUEFUSF9MSVNUKTogVHVybiBwYXRoIGxpc3RzIGludG8gUE9TSVguCgkoUEFUSF9TRVBBUkFUT1IpOiBVc2UgJzonLgoKMTk5OS0wNC0yMiBCcnVjZSBLb3JiIDxkZHNpbmMwOUBpeC5uZXRjb20uY29tPgoKCSogY29uZmlndXJlLmluOiBlbmFibGUgZGlzYWJsaW5nIG9mIGZhc3QgZml4aW5jbHVkZXMKCSogY29uZmlndXJlOiByZWdlbmVyYXRlCgoxOTk5LTA0LTIxIDE0OjU1IC0wNDAwICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLmNvbHVtYmlhLmVkdT4KCgkqIGdlbi1wcm90b3MuYzogI3VuZGVmIGFib3J0IGFmdGVyIGluY2x1ZGluZyBzeXN0ZW0uaC4KCURlbGV0ZSBkZWZucyBvZiBmYW5jeV9hYm9ydCBhbmQJZmF0YWwuCgkqIGZpeC1oZWFkZXIuYzogRGVsZXRlIGRlZm4gb2YgZmFuY3lfYWJvcnQuCgpXZWQgQXByIDIxIDEyOjA5OjM4IDE5OTkgIE11bWl0IEtoYW4gIDxraGFuQHhyYXlsaXRoLndpc2MuZWR1PgoKCSogY2NjcC5jIChzaW1wbGlmeV9maWxlbmFtZSk6IEFsd2F5cyBwcmVzZXJ2ZSBsZWFkaW5nIGRvdWJsZSBzbGFzaC4KCldlZCBBcHIgMjEgMTg6MTU6NTUgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHgubWQ6IEFkZCBuZXcgcGVlcGhvbGVzIHRvIHJlbW92ZSByZWR1bmRhbnQgbG9hZHMuCgpXZWQgQXByIDIxIDE3OjQxOjI5IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4Lm1kIChiaW5hcnkgcGF0dGVybnMpOiBSZW9yZGVyIGFsdGVybmF0aXZlcwoJc28gdGhhdCB0d28gb3BlcmFuZCBpbnN0cnVjdGlvbnMgYXJlIGNob3NlbiBiZWZvcmUgdGhyZWUgb3BlcmFuZAoJaW5zdHJ1Y3Rpb25zLgoKVHVlIEFwciAyMCAyMzozODo1OCAxOTk5ICBOYXRoYW4gU2lkd2VsbCAgPG5hdGhhbkBhY20ub3JnPgoKCSogb2JqYy9NYWtlLWxhbmcuaW4gKG9iamMtcGFyc2UuYyk6IFB1dCBCSVNPTiBwYXJhbWV0ZXJzIGluIGNvcnJlY3QKCW9yZGVyLgoKCSogTWFrZWZpbGUuaW4gKGMtcGFyc2UuYyk6IFB1dCBCSVNPTiBwYXJhbWV0ZXJzIGluIGNvcnJlY3QKCW9yZGVyLgoKVHVlIEFwciAyMCAxNjozODoxMSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEubWQgKG50X2xkYSk6IE5ldyBwYXR0ZXJuLgoJKiBhbHBoYS5jIChhbHBoYV9leHBhbmRfcHJvbG9ndWUpOiBVc2UgaXQgZm9yIGxhcmdlIGZyYW1lcwoJdW5kZXIgd2luZG93cyBudC4KClR1ZSBBcHIgMjAgMTc6NTc6MTQgMTk5OSAgQ2F0aGVyaW5lIE1vb3JlICA8Y2xtQGN5Z251cy5jb20+CgoJKiBjb25maWcvYXJtL2FybS5tZCAobW92aGkpOiAgQWRkIGNoZWNrIGZvciBvZGQgb2Zmc2V0LgoKVHVlIEFwciAyMCAxMzoxNDo1OCBFRFQgMTk5OSAgSm9obiBXZWhsZSAgKGpvaG5AZmVpdGguY29tKQoKCSogaTM4Ni5jIChvdXRwdXRfbW92ZV9kb3VibGUpOiBBYm9ydCBpZiBhIG5vbi1vZmZzZXR0YWJsZQoJbWVtb3J5IG9wZXJhbmQgaXMgZW5jb3VudGVyZWQuICBEZWxldGUgdW51c2VkIGNvZGUuCgkoZmluZF9hZGRyX3JlZyk6IFJlbW92ZS4KCk1vbiBBcHIgMTkgMjE6MTM6MDIgMTk5OSAgQ3JhaWcgQnVybGV5ICA8Y3JhaWdAamNiLXNjLmNvbT4KCgkqIHRyZWUuZGVmIChCTE9DSyk6IEZpeCB0eXBvIGluIGNvbW1lbnQuCgoxOTk5LTA0LTE5IDE0OjUxIC0wNDAwICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLmNvbHVtYmlhLmVkdT4KCgkqIGNwcGxpYi5jIChvdXRwdXRfbGluZV9jb21tYW5kKTogRHJvcCBDT05ESVRJT05BTCBhcmd1bWVudC4KCVdlIGNhbiBvbWl0IHVubmVjZXNzYXJ5IGxpbmUgY29tbWFuZHMgaWYgZmlsZV9jaGFuZ2UgPT0KCXNhbWVfZmlsZSBhbmQgcGZpbGUtPmxpbmVubyAhPSAwLiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KCShjcHBfZ2V0X3Rva2VuIFtjYXNlICdcbiddKTogRG9uJ3QgYnVtcCBwZmlsZS0+bGluZW5vIGlmCglDUFBfT1BUSU9OUyAocGZpbGUpLT5ub19saW5lX2NvbW1hbmRzIGlzIHNldC4KCSogY3BwbGliLmg6IEZpeCBwcm90b3R5cGUgb2Ygb3V0cHV0X2xpbmVfY29tbWFuZC4KCjE5OTktMDQtMTggMTc6NDYgLTA0MDAgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkuY29sdW1iaWEuZWR1PgoKCSogY3BwZmlsZXMuYyAoZmluZF9wb3NpdGlvbiwgcmVhZF9hbmRfcHJlc2Nhbik6IFVzZSBgdW5zaWduZWQKCWxvbmcnIHZhcmlhYmxlcyBjb25zaXN0ZW50bHkgdG8gY291bnQgbGluZSBhbmQgY29sdW1uIG51bWJlcnMuCgpTdW4gQXByIDE4IDE1OjUwOjMzIEVEVCAxOTk5ICBKb2huIFdlaGxlICAoam9obkBmZWl0aC5jb20pCgoJKiBvdXRwdXQuaCAoY3VycmVudF9mdW5jdGlvbl9pc19sZWFmLAoJY3VycmVudF9mdW5jdGlvbl91c2VzX29ubHlfbGVhZl9yZWdzKTogRGVjbGFyZS4KCSogZnVuY3Rpb24uYyAoY3VycmVudF9mdW5jdGlvbl9pc19sZWFmLAoJY3VycmVudF9mdW5jdGlvbl91c2VzX29ubHlfbGVhZl9yZWdzKTogRGVmaW5lLgoJKGluaXRfZnVuY3Rpb25fc3RhcnQpOiBJbml0aWFsaXplIGN1cnJlbnRfZnVuY3Rpb25faXNfbGVhZgoJYW5kIGN1cnJlbnRfZnVuY3Rpb25fdXNlc19vbmx5X2xlYWZfcmVncy4KCSogZmluYWwuYyAobGVhZl9mdW5jdGlvbik6IERvbid0IGRlZmluZS4KCShmaW5hbF9zdGFydF9mdW5jdGlvbik6IFJlcGxhY2UgdXNlcyBvZiBsZWFmX2Z1bmN0aW9uIHdpdGgKCWN1cnJlbnRfZnVuY3Rpb25fdXNlc19vbmx5X2xlYWZfcmVncy4KCSogdG9wbGV2LmMgKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBTZXQgY3VycmVudF9mdW5jdGlvbl9pc19sZWFmCglwcmlvciB0byBpbnZva2luZyBsb2NhbCByZWdpc3RlciBhbGxvY2F0aW9uLgoJKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBSZXBsYWNlIHVzZXMgb2YgbGVhZl9mdW5jdGlvbiB3aXRoCgljdXJyZW50X2Z1bmN0aW9uX3VzZXNfb25seV9sZWFmX3JlZ3MuCgkqIGRieG91dC5jIChkYnhvdXRfc3ltYm9sLCBkYnhvdXRfcGFybXMpOiBMaWtld2lzZS4KCSogZHdhcmYyb3V0LmMgKGFkZF9sb2NhdGlvbl9vcl9jb25zdF92YXVsZV9hdHRyaWJ1dGUpOiBMaWtld2lzZS4KCSogZHdhcmZvdXQuYyAoYWRkX2xvY2F0aW9uX29yX2NvbnN0X3ZhbHVlX2F0dHJpYnV0ZSk6IExpa2V3aXNlLgoJKiBzZGJvdXQuYyAoc2Rib3V0X3N5bWJvbCk6IExpa2V3aXNlLgoJKiBzcGFyYy5oIChGVU5DVElPTl9QUk9MT0dVRSwgRlVOQ1RJT05fRVBJTE9HVUUpOiBMaWtld2lzZS4KCSogc3BhcmMuYyAoZWxpZ2libGVfZm9yX2VwaWxvZ3VlX2RlbGF5LCBvdXRwdXRfcmV0dXJuLAoJc3BhcmNfcmV0dXJuX3BlZXBob2xlX29rKTogTGlrZXdpc2UuCgkqIHNwYXJjLm1kIChsZWFmX2Z1bmN0aW9uIGF0dHJpYnV0ZSwgdW50eXBlZF9yZXR1cm4pOiBMaWtld2lzZS4KCSogaTM4Ni5jIChpeDg2X2NvbXB1dGVfZnJhbWVfc2l6ZSk6IERvbid0IGFsaWduIHRoZSBzdGFjawoJZm9yIGxlYWYgZnVuY3Rpb25zIHdoaWNoIGRvbid0IGFsbG9jYXRlIGFueSBzdGFjayBzbG90cy4KCSogdG0udGV4aTogVXBkYXRlIGRvY3VtZW50YXRpb24uCgpTdW4gQXByIDE4IDAyOjE1OjA5IFBEVCAxOTk5IEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKU3VuIEFwciAxOCAwMDowODo0NSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEuaCAoR09fSUZfTEVHSVRJTUFURV9TSU1QTEVfQUREUkVTUyk6IENvcnJlY3QgbGFzdCBjaGFuZ2UgLS0KCW1ha2Ugc3VyZSBGUF9CQVNFX1AgcmVnaXN0ZXJzIGFyZSBvbmx5IHVzZWQgd2l0aCBhbiBpbnRlZ2VyLgoKU2F0IEFwciAxNyAyMjo1NDoxNyAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEuaCAoUkVHX09LX0ZQX0JBU0VfUCk6IE5ldyBtYWNyby4KCShHT19JRl9MRUdJVElNQVRFX1NJTVBMRV9BRERSRVNTKTogVXNlIGl0LgoJKiBhbHBoYS5tZCAoYWRkZGkzKzEpOiBOZXcgaW5zbiB0byBoYW5kbGUgbGFyZ2UgY29uc3RhbnRzIG9mZgoJdGhlIHNvZnQgZnJhbWUgcG9pbnRlci4KCShhZGRkaTMrMik6IERvbid0IHNwbGl0IHNvZnQgZnJhbWUgcG9pbnRlciBvciBhcmcgcG9pbnRlciBhZGRpdGlvbnMuCgpTdW4gQXByIDE4IDE3OjI0OjEwIDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4LmMgKGxlZ2l0aW1pemVfb3BlcmFuZHMpOiBVc2UgcnR4X2Nvc3QKCXRvIGRldGVybWluZSBpZiBpdCBpcyB3b3J0aHdoaWxlIGZvcmNpbmcgYSBjb25zdGFudCBpbnRvIGEgcmVnaXN0ZXIuCgkqIGNvbmZpZy9jNHgvYzR4LmggKENPTlNUX0NPU1RTKTogQW4gaW50ZWdlciB2YWx1ZSBvZiAyNTUgb3IgNjU1MzUKCXVzZWQgd2l0aCBhIGxvZ2ljYWwgYW5kIG9yIGFuIGludGVnZXIgdmFsdWUgb2YgMTYgb3IgMjQgdXNlZCB3aXRoCglhIHJpZ2h0IHNoaWZ0IGhhcyB6ZXJvIGNvc3Qgb24gdGhlIEM0MC4KClNhdCBBcHIgMTcgMjE6MzA6MTEgMTk5OSAgQmVybmQgU2NobWlkdCA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CgoJKiBnY3NlLmMgKGNvbXB1dGVfbG9jYWxfcHJvcGVydGllcyk6IElmIHNldHAgaXMgbm9uemVybywgY2xlYXIKCVRSQU5TUCBpbnN0ZWFkIG9mIHNldHRpbmcgaXQgdG8gYWxsIG9uZXMuCgpTYXQgQXByIDE3IDIxOjEwOjEwIDE5OTkgIEphbiBIdWJpY2thIDxodWJpY2thQGZyZWVzb2Z0LmN6PgoKCSogaTM4Ni5jIChpMzg2X3ByZWZlcnJlZF9zdGFja19ib3VuZGFyeV9zdHJpbmcpOiBOZXcgZ2xvYmFsIHZhcmlhYmxlLgoJKGkzODZfcHJlZmVycmVkX3N0YWNrX2JvdW5kYXJ5KTogTmV3IGdsb2JhbCB2YXJpYWJsZS4KCShvdmVycmlkZV9mdW5jdGlvbnMpOiBTZXQgaXQuICBUaWR5IG9wdGlvbiBzZXR0aW5nIGNvZGUuCgkqIGkzODYuaCAoVEFSR0VUX09QVElPTlMpOiBOZXcgY29tbWFuZCBsaW5lIG9wdGlvbi4KCShpMzg2X3ByZWZlcnJlZF9zdGFja19ib3VuZGFyeV9zdHJpbmcpOiBEZWNsYXJlIGl0LgoJKGkzODZfcHJlZmVycmVkX3N0YWNrX2JvdW5kYXJ5KTogTGlrZXdpc2UuCgkoUFJFRkVSUkVEX1NUQUNLX0JPVU5EQVJZKTogVXNlIGkzODZfcHJlZmVycmVkX3N0YWNrX2JvdW5kYXJ5LgoKU2F0IEFwciAxNyAxOToyMjozOCAxOTk5ICBKYW4gSHViaWNrYSA8aHViaWNrYUBmcmVlc29mdC5jej4KCgkqIGkzODYuYyAoazZfY29zdCk6IFRha2UgaW50byBhY2NvdW50IHRoZSBkZWNvZGluZyB0aW1lLgoKU2F0IEFwciAxNyAxOToxMzoyMiAxOTk5ICBEb25uIFRlcnJ5ICA8ZG9ubkBpbnRlcml4LmNvbT4KCgkqIGkzODYuaCAoUFJJTlRfT1BFUkFORF9QVU5DVF9WQUxJRF9QKTogQWxsb3cgXy4KCSogaTM4Ni5jIChwcmludF9vcGVyYW5kKTogTmV3ICVfIG9wZXJhdG9yLgoJKGxvYWRfcGljX3JlZ2lzdGVyKTogUHJvcGVyIG51bWJlciBvZiBsZWFkaW5nIF8gaW4gR09UIGxpdGVyYWwuCgkqIGkzODYubWQgKHByb2xvZ3VlX2dldF9wY19hbmRfc2V0X2dvdCk6IExpa2V3aXNlLgoJKiBpMzg2L3VuaXguaCAoQVNNX09VVFBVVF9NSV9USFVOSyk6IExpa2V3aXNlLgoKU2F0IEFwciAxNyAxOToxMzowNyAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEuYyAoYWxwaGFfZXhwYW5kX3Byb2xvZ3VlKTogVXNlIGdlbl9hZGRkaTMgaW5zdGVhZCBvZgoJZW1pdF9tb3ZlX2luc24rcGx1c19jb25zdGFudC4gIEZvciBOVCwgZG9uJ3QgdXNlIHRoZSBzdGFjayBwcm9iZQoJbG9vcCBwb2ludGVyIHRvIGFsbG9jYXRlIHN0YWNrIHNwYWNlLgoJKiBhbHBoYS5tZCAoYWRkZGkzKTogQWx3YXlzIHVzZSBsZGEgdG8gc2V0IHRoZSBzdGFjayBwb2ludGVyLgoKMTk5OS0wNC0xNyAyMDoxMSAtMDQwMCAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5jb2x1bWJpYS5lZHU+CgoJKiBjLWF1eC1pbmZvLmMsIGVtaXQtcnRsLmMsIGV4cGxvdy5jLCBleHBtZWQuYywgZ2NzZS5jLAoJaGFpZmEtc2NoZWQuYywgb3B0YWJzLmMsIHJlb3JnLmMsIHJlc291cmNlLmMsIHNjaGVkLmM6IEluY2x1ZGUKCXRvcGxldi5oIGZvciByZWFsIGRlY2xhcmF0aW9uIG9mIHRyaW1fZmlsZW5hbWUuCgkqIE1ha2VmaWxlLmluOiBVcGRhdGUgZGVwZW5kZW5jaWVzLgoKU2F0IEFwciAxNyAxNDozNjoxOSAxOTk5ICBDcmFpZyBCdXJsZXkgIDxjcmFpZ0BqY2Itc2MuY29tPgoKCSogdHJlZS5jIChjaGFpbm9uKTogQ2hlY2sgZm9yIGNpcmN1bGFyaXR5IG9ubHkgaWYKCUVOQUJMRV9DSEVDS0lORyBpcyBkZWZpbmVkLgoKMTk5OS0wNC0xNyAxMDoxNSAtMDQwMCAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5jb2x1bWJpYS5lZHU+CgoJKiBjY2NwLmM6IE1ha2UgZmF0YWwgbm9uLXN0YXRpYy4KClNhdCBBcHIgMTcgMjM6NDc6MjQgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHgubWQgKCphbmRxaTNfMjU1X2Nsb2JiZXIsKmFuZHFpM182NTUzNV9jbG9iYmVyKToKCU5ldyBsb2dpY2FsIGFuZCBwYXR0ZXJucyB1c2luZyBDNDAgYml0LWZpZWxkIGluc2VydCBpbnN0cnVjdGlvbnMuCgkoKmxzaHJxaTNfMjRfY2xvYmJlciwqYXNocnFpM18yNF9jbG9iYmVyLCpsc2hycWkzXzE2X2Nsb2JiZXIsCgkqYXNocnFpM18xNl9jbG9iYmVyKTogTmV3IHNoaWZ0IHBhdHRlcm5zIHVzaW5nIEM0MCBiaXQtZmllbGQgaW5zZXJ0CglpbnN0cnVjdGlvbnMuCgoxOTk5LTA0LTE2IDIyOjQ0IC0wNDAwICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLmNvbHVtYmlhLmVkdT4KCgkqIHN5c3RlbS5oOiBBbHdheXMgcHJvdG90eXBlIGFib3J0LiAgUHJvdG90eXBlIGZhdGFsLiAgRGVmaW5lCglhYm9ydCB0byBjYWxsIGZhdGFsLCBub3QgZnByaW50Zi9leGl0LiAgRGVmaW5lIGEgc3R1YiBtYWNybwoJZm9yIHRyaW1fZmlsZW5hbWUuCgkqIHRvcGxldi5jOiBEZWZpbmUgRElSX1NFUEFSQVRPUi4gICh0cmltX2ZpbGVuYW1lKTogTmV3CglmdW5jdGlvbi4KCSogdG9wbGV2Lmg6IFByb3RvdHlwZSB0cmltX2ZpbGVuYW1lLCBhbmQgI3VuZGVmIHN5c3RlbS5oJ3Mgc3R1Yi4KCgkqIGdjYy5jLCBnZW5hdHRyLmMsIGdlbmF0dHJ0YWIuYywgZ2VuY29kZXMuYywgZ2VuY29uZmlnLmMsCglnZW5lbWl0LmMsIGdlbmV4dHJhY3QuYywgZ2VuZmxhZ3MuYywgZ2Vub3Bpbml0LmMsIGdlbm91dHB1dC5jLAoJZ2VucGVlcC5jLCBnZW5yZWNvZy5jOiBNYWtlIGZhdGFsIG5vbi1zdGF0aWMuCgkqIGdjb3YuYywgZ2VuZ2VucnRsLmMsIHByb3RvaXplLmM6ICN1bmRlZiBhYm9ydCBhZnRlcgoJaW5jbHVkaW5nIHN5c3RlbS5oLgoKCSogY29uZmlnL2kzODYvZGd1eC5oLCBjb25maWcvbTY4ay94bS1hbWl4Lmg6IFJlbW92ZSBzdGFsZSBjb2RlCglyZWxhdGluZyB0byBhYm9ydC4KClNhdCBBcHIgMTcgMTE6MjU6NDQgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHgubWQgKG11bHFmM19jbHJxZl9jbG9iYmVyLCBtdWxxaTNfY2xycWlfY2xvYmJlcik6CglOZXcgcGF0dGVybnMgdG8gc3VwcG9ydCBwYXJhbGxlbCBtdWx0aXBseSBhbmQgbG9hZCBvZiB6ZXJvLgoKRnJpIEFwciAxNiAwMToyMzo0NyAxOTk5ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0cmVlLmMgKHZhbGlkX21hY2hpbmVfYXR0cmlidXRlKTogSWYgd2UncmUgbW9kaWZ5aW5nIHRoZQoJRlVOQ1RJT05fVFlQRSB3aXRoaW4gYSBQT0lOVEVSX1RZUEUgYW5kIHdlIGRvbid0IGdldCBhIGRlY2wsCgl1cGRhdGUgdGhlIFBPSU5URVJfVFlQRS4KCkZyaSBBcHIgMTYgMDA6MTk6MzEgMTk5OSAgSmFuIEh1Ymlja2EgPGh1Ymlja2FAZnJlZXNvZnQuY3o+CgoJKiBpMzg2LmMgKHg4Nl9hZGp1c3RfY29zdCk6IE1vdmUgYnJlYWsgc3RhdGVtZW50IHRvIGNvcnJlY3QgcGxhY2UuCgpUaHUgQXByIDE1IDIzOjE3OjMzIDE5OTkgIEplcnJ5IFF1aW5uIDxqcXVpbm5Abm9ydGVsbmV0d29ya3MuY29tPgoKCSogcGEuaCAoSEFWRV9QUkVfSU5DUkVNRU5ULCBIQVZFX1BPU1RfSU5DUkVNRU5ULAoJSEFWRV9QUkVfREVDUkVNRU5ULCBIQVZFX1BPU1RfREVDUkVNRU5UKTogRml4IHBhX2NwdSB2YWx1ZSBmcm9tCgk4MDAwIHRvIFBST0NFU1NPUl84MDAwLgoKVGh1IEFwciAxNSAyMDo0Njo1NyAxOTk5ICBEb25uIFRlcnJ5IChkb25uQGludGVyaXguY29tKQoKCSogZXhwci5jIChleHBhbmRfYXNzaWdubWVudCk6IEZvcmNlIHBvaW50ZXJzIHRvIHByb3BlciBtb2RlIGlmCglQT0lOVEVSU19FWFRFTkRfVU5TSUdORUQgaXMgZGVmaW5lZC4KCgkqIHhtLWFscGhhLmggKGFsbG9jYS5oKTogQWRkIEludGVyaXggdG8gbGlzdCBvZiBzcGVjaWFsIG1hY2hpbmVzCgl0aGF0IGRvbid0IGxpa2UgYWxsb2NhLmgsIHBlbmRpbmcgdXNpbmcgYXV0b2NvbmYgcmVzdWx0cy4KCgkqIGV4Y2VwdC5jIChzdGFydF9jYXRjaF9oYWRsZXIpOiBCZSBzdXJlIHJ0aW1lX2FkZHJlc3MgaXMgUG1vZGUKCWlmIFBPSU5URVJTX0VYVEVORF9VTlNJR05FRC4KCgkqIGV4Y2VwdC5jIChleHBhbmRfZWhfcmV0dXJuKTogRm9yY2UgcG9pbnRlcnMgdG8gcHJvcGVyIG1vZGUgaWYKCVBPSU5URVJTX0VYVEVORF9VTlNJR05FRC4KClRodSBBcHIgMTUgMjM6MTM6MzUgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHguaDogIFR3ZWFrZWQgY29tbWVudCBmb3JtYXR0aW5nLgoJKiBjb25maWcvYzR4L2M0eC5jOiAgTGlrZXdpc2UuCgpUaHUgQXByIDE1IDAyOjQ1OjE5IDE5OTkgIE11bWl0IEtoYW4gIDxraGFuQHhyYXlsaXRoLndpc2MuZWR1PgoKCSogYWNsb2NhbC5tNCAoR0NDX0ZVTkNfTUtESVJfVEFLRVNfT05FX0FSRyk6IERlZmluZS4KCSogY29uZmlndXJlLmluOiBVc2UuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KCSogYWNjb25maWcuaCAoTUtESVJfVEFLRVNfT05FX0FSRyk6IEFkZC4KCSogY29uZmlnLmluOiBSZWJ1aWx0LgoJKiBzeXN0ZW0uaDogVXNlLgoKVGh1IEFwciAxNSAwMTowMzoyMSAxOTk5ICBKYW4gSHViaWNrYSA8aHViaWNrYUBmcmVlc29mdC5jej4KCQkJICBKZWZmIExhdyA8bGF3QGN5Z251cy5jb20+CgoJKiBpMzg2Lm1kIChRSW1vZGUgYWRkIHBhdHRlcm4pOiBTdXBwb3J0IGxlYSBpbnN0cnVjdGlvbi4KCShISW1vZGUgYWRkIHBhdHRlcm4pOiBMaWtld2lzZS4KCgkqIGkzODYubWQgKGFzaGxzaSBwYXR0ZXJucyk6IENhbGwgb3V0cHV0X2FzaGwgaW5zdGVhZCBvZiBvdXRwdXRfYXNobHNpMy4KCShhc2hscWkpOiBVc2UgZXhwYW5kZXIsIHNlcGFyYXRlIExFQSBhbmQgU0FMIC8gQUREIHBhdHRlcm5zOyBjYWxsCglvdXRwdXRfYXNobC4KCShhc2hsaGkpOiBMaWtld2lzZS4KCSogaTM4Ni5oIChvdXRwdXRfYXNobCk6IFJlbmFtZWQgZnJvbSBvdXRwdXRfYXNobHNpMy4KCSogaTM4Ni5jIChvdXRwdXRfYXNobCk6IExpa2V3aXNlOyBzdXBwb3J0IEhJbW9kZSBhbmQgUUltb2RlIG9wZXJhbmRzCglhcyB3ZWxsLgoKCSogaTM4Ni5tZCAobm90c2ksIG5vdGhpLCB4b3JzaSwgeG9yaGksIGFuZCB4b3JxaSBwYXR0ZXJucyk6IENhbGwKCW1lbW9yeV9hZGRyZXNzX2Rpc3BsYWNlbWVudF9sZW5ndGggaW5zdGVhZCBvZiBtZW1vcnlfYWRkcmVzc19sZW5ndGguCgkqIGkzODYuYyAobWVtb3J5X2FkZHJlc3NfaW5mbyk6IFJlbmFtZWQgZnJvbSBtZW1vcnlfYWRkcmVzc19sZW5ndGguCglBY2NlcHQgbmV3IGFyZ3VtZW50IERJU1BfTEVOR1RILiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4gIElmIERJU1BfTEVOR1RILAoJdGhlbiByZXR1cm4gdGhlIGRpc3BsYWNlbWVudCBsZW5ndGguICBFbHNlIHJldHVybiBsZW5ndGggb2YgdGhlCgllbnRpcmUgbWVtb3J5IGFkZHJlc3MuICBIYW5kbGUgTVVMVCBjYXNlIGNvcnJlY3RseS4KCSogaTM4Ni5oIChtZW1vcnlfYWRkcmVzc19pbmZvKTogVXBkYXRlIGRlY2xhcmF0aW9uLgoKCSogaTM4Ni5tZCAobWVtb3J5X2JpdF90ZXN0KTogRml4IHBhcmVuIGVycm9yLgoKV2VkIEFwciAxNCAyMToyOToxOCAxOTk5ICBBbmRyZXcgSGFsZXkgIDxhcGhAY3lnbnVzLmNvbT4KCgkqIGZsb3cuYzogKG1ha2VfZWRnZXMpOiBBbHdheXMgbWFrZSBlZGdlcyBmcm9tIGEgYmFzaWMgYmxvY2sKCXRvIGl0cyBleGNlcHRpb24gaGFuZGxlcnMsIGV2ZW4gaWYgdGhlIGJsb2NrIGVuZHMgd2l0aCBhIGp1bXAuCgoxOTk5LTA0LTE0IDIzOjI2IC0wNDAwICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLmNvbHVtYmlhLmVkdT4KCgkqIGdyYXBoLmMgKG5vZGVfZGF0YSk6IFJldHVybiB2b2lkLiAgSWdub3JlIHJlc3VsdCBvZgoJcHJpbnRfcnRsX3NpbmdsZS4gIENoYW5nZSBjYWxsZXIgdG8gbWF0Y2guCgkqIGludGVncmF0ZS5jIChzdWJzdF9jb25zdGFudHMpOiBJbml0aWFsaXplIG9wMF9tb2RlIHRvIGFuCglpbnZhbGlkIG1vZGUsIGFuZCBhYm9ydCBiZWZvcmUgdXNlIGlmIGl0J3Mgc3RpbGwgaW52YWxpZC4KCShDYW4gb25seSBoYXBwZW4gaWYgdGhlIFJUWF9DTEFTUywgUlRYX0ZPUk1BVCB0YWJsZXMgYXJlIGNvcnJ1cHRlZC4pCgkqIG9iamMvb2JqYy1hY3QuYyAoZ2V0X29iamNfc3RyaW5nX2RlY2wsCglidWlsZF9zZWxlY3Rvcl90cmFuc2xhdGlvbl90YWJsZSwgZ2VuZXJhdGVfcHJvdG9jb2xfbGlzdCwKCXN5bnRoX2lkX3dpdGhfY2xhc3Nfc3VmZml4LCBidWlsZF9rZXl3b3JkX3NlbGVjdG9yLAoJYnVpbGRfc2VsZWN0b3JfZXhwciwgZ2VuX2RlY2xhcmF0b3IpOiBBYm9ydCB3aGVuIHRoZSB0cmVlCglzdHJ1Y3R1cmUgaXMgY29ycnVwdGVkLgoKV2VkIEFwciAxNCAxOTo1Nzo0OSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW4gKGFscGhhIGludGVyaXgpOiBVc2Ugc3ltYm9saWMgbmFtZXMgdG8gc2V0Cgl0YXJnZXRfY3B1X2RlZmF1bHQuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KCgkqIGV4cGxvdy5jIChhbGxvY2F0ZV9keW5hbWljX3N0YWNrX3NwYWNlKTogVW5kbyBsYXN0IGNoYW5nZS4gIFVzZQoJY29udmVydF9tZW1vcnlfYWRkcmVzcyBpbnN0ZWFkLgoKV2VkIEFwciAxNCAxOTo0MjowMiAxOTk5ICBEb25uIFRlcnJ5IChkb25uQGludGVyaXguY29tKQoKCSogYWxwaGEvbGliMWZ1bmNzLmFzbTogTmV3IGZpbGUuCgkqIGFscGhhL3QtaW50ZXJpeCAobGliMWZ1bmNzLmFzbSk6IEFkZCB0byBidWlsZC4KCgkqIGV4cGxvdy5jIChhbGxvY2F0ZV9keW5hbWljX3N0YWNrX3NwYWNlKTogQ29ycmVjdGx5IGNvbnZlcnQgVEFSR0VUCgl0byBQbW9kZS4KCldlZCBBcHIgMTQgMTQ6MjY6MzYgMTk5OSAgSm9obiBXZWhsZSAgKGpvaG5AZmVpdGguY29tKQoKCSogaTM4Ni5tZCAodHJ1bmN4ZmRmKTogT3V0cHV0IHRoZSB0ZW1wbGF0ZSBzdXBwbGllZAoJYnkgb3V0cHV0X21vdmVfZG91YmxlIHdpdGggdGhlIGNvcnJlY3Qgb3BlcmFuZHMuCgoJKiBpMzg2Lm1kIChleHRlbmRzZmRmLCBleHRlbmRzZnhmLCBleHRlbmRkZnhmKTogVXNlCglvdXRwdXRfZmxvYXRfZXh0ZW5kIGluc3RlYWQgc3BlY2lmeWluZyAnIycgYXMgdGhlIHRlbXBsYXRlLgoJKiBpMzg2LmMgKG91dHB1dF9mbG9hdF9leHRlbmQpOiBEZWZpbmUuCgkqIGkzODYuaCAob3V0cHV0X2Zsb2F0X2V4dGVuZCk6IERlY2xhcmUuCgpXZWQgQXByIDE0IDEwOjQ4OjAzIDE5OTkgIENhdGhlcmluZSBNb29yZSAgPGNsbUBjeWdudXMuY29tPgoKCSogY29uZmlnL21pcHMvZWxmLmgsIGNvbmZpZy9taXBzL2VsZjY0LmgKCShDVE9SU19TRUNUSU9OX0FTTV9PUCk6IERlZmluZS4KCShEVE9SU19TRUNUSU9OX0FTTV9PUCk6IERlZmluZS4KCShFWFRSQV9TRUNUSU9OUyk6IERlZmluZS4KCShJTlZPS0VfX21haW4pOiBEZWZpbmUuCgkoTkFNRV9fTUFJTik6IERlZmluZS4KCShTWU1CT0xfX01BSU4pOiBEZWZpbmUuCgkoRVhUUkFfU0VDVElPTlNfRlVOQ1RJT05TKTogRGVmaW5lLgoJKFNFQ1RJT05fRlVOQ1RJT05fVEVNUExBVEUpOiBEZWZpbmUuCgkoQVNNX09VVFBVVF9DT05TVFJVQ1RPUik6IERlZmluZS4KCShBU01fT1VUUFVUX0RFU1RSVUNUT1IpOiBEZWZpbmUuCgkoQ1RPUl9MSVNUX0JFR0lOKTogRGVmaW5lLgoJKENUT1JfTElTVF9FTkQpOiBEZWZpbmUuCgkoRFRPUl9MSVNUX0JFR0lOKTogRGVmaW5lLgoJKERUT1JfTElTVF9FTkQpOiBEZWZpbmUuCgkoTElCX1NQRUMpOiBEZWZpbmUuCgkoU1RBUlRGSUxFX1NQRUMpOiBEZWZpbmUuCgkoRU5ERklMRV9TUEVDKTogRGVmaW5lLgoJKiBjb25maWcvbWlwcy9saW51eC5oOiAgVW5kZWZpbmUgYWxsIG9mIHRoZSBhYm92ZS4KCSogY29uZmlnL21pcHMvcnRlbXM2NC5oOiBMaWtld2lzZS4KCSogY29uZmlnL21pcHMvdC1yMzkwMDogTGlrZXdpc2UuCgkqIGNvbmZpZy9taXBzL3QtZWxmOiBOZXcgZmlsZS4KCSogY29uZmlnL21pcHMvdnh3b3Jrcy5oOiBOZXcgZmlsZS4KCSogY29uZmlndXJlLmluIChtaXBzLXdycy12eHdvcmtzKTogVXNlIG1pcHMvdnh3b3Jrcy5oLgoJKG1pcHMqLSotKmVsZiopOiAgVXNlIHQtZWxmIGluc3RlYWQgb2YgdC1lY29mZi4KCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgoKV2VkIEFwciAxNCAwOTo1OTozOCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogcmVsb2FkMS5jIChlbWl0X3JlbG9hZF9pbnNucyk6IEFsc28gZmluZCBlcXVpdmFsZW50IG1lbXMKCWZvciBzdWJyZWdzIG9mIHBzZXVkb3MuCgoJKiBhbHBoYS5jIChhbGlnbmVkX21lbW9yeV9vcGVyYW5kKTogUmVjb2duaXplIHRoZSBvdXRwdXQgb2YKCUxFR0lUSU1JWkVfUkVMT0FEX0FERFJFU1MuICBFeGFtaW5lIHJlZ19lcXVpdl9tZW1vcnlfbG9jIGluCgl0aGUgZXZlbnQgb2YgYSBwc2V1ZG8uCgkodW5hbGlnbmVkX21lbW9yeV9vcGVyYW5kKTogTGlrZXdpc2UuICBEb24ndCBvdGhlcndpc2UgYWNjZXB0Cgljb21wbGV0ZWx5IGlsbGVnYWwgYWRkcmVzc2VzLgoJKG5vcm1hbF9tZW1vcnlfb3BlcmFuZCk6IExpa2V3aXNlLiAgSGFuZGxlIHN1YnJlZ3Mgb2YgcHNldWRvcy4KCShnZXRfYWxpZ25lZF9tZW0pOiBSZXZlcnQgcHJldmlvdXMgY2hhbmdlLiAgQWJvcnQgaWYgd2UgZG9uJ3QgaGF2ZSBhCgltZW0uICBEdXJpbmcgcmVsb2FkLCBjYWxsIGZpbmRfcmVwbGFjZW1lbnQgb24gYWxsIGlsbGVnYWwgbWVtb3JpZXMuCgkoZ2V0X3VuYWxpZ25lZF9hZGRyZXNzKTogTGlrZXdpc2UuCgkqIGFscGhhLmggKFNFQ09OREFSWV9JTlBVVF9SRUxPQURfQ0xBU1MpOiBVc2UgIWFsaWduZWRfbWVtb3J5X29wZXJhbmQKCWluc3RlYWQgb2YgdW5hbGlnbmVkX21lbW9yeV9vcGVyYW5kLgoJKiBhbHBoYS5tZDogUmV2ZXJ0IGV4dHJhIGFyZ3VtZW50IHRvIGdldF9hbGlnbmVkX21lbS4KCShyZWxvYWRfaW5xaSk6IFVzZSBhbnlfbWVtb3J5X29wZXJhbmQgaW4gY29uc3RyYWludHMuICBBYm9ydCBpZgoJd2UncmUgbm90IGdpdmVuIHNvbWUgc29ydCBvZiBtZW0uCgkocmVsb2FkX2luaGkpOiBMaWtld2lzZS4KCShyZWxvYWRfb3V0cWksIHJlbG9hZF9vdXRoaSk6IExpa2V3aXNlLgoKV2VkIEFwciAxNCAwOTozOToyMCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogaTM4Ni5tZCAobmVnaGkpOiBVc2UgdGhlIHdob2xlIHJlZ2lzdGVyIHdoZW4gd2lkZW5pbmcgdGhlIG9wLgoKMTk5OS0wNC0xNCAxMjozNyAtMDQwMCAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5jb2x1bWJpYS5lZHU+CgoJKiBjcHBlcnJvci5jLCBjcHBleHAuYywgY3BwbGliLmM6IE5ldmVyIGNhbGwgYWJvcnQuCgkqIGNwcGhhc2guYzogT25seSBjYWxsIGFib3J0IHdoZW4gd2UgZGV0ZWN0IGNvcnJ1cHRpb24gb2YgdGhlCgltYWxsb2MgYXJlbmEuCgkqIGNwcG1haW4uYzogRG9uJ3QgZGVmaW5lIGZhdGFsIG9yIGZhbmN5X2Fib3J0LgoKV2VkIEFwciAxNCAwOToxOTozOSAxOTk5ICBKYW4gSHViaWNrYSA8aHViaWNrYUBmcmVlc29mdC5jej4KCgkqIGkzODYuYyAoeDg2X2FkanVzdF9jb3N0KTogQWdpIHN0YWxsIHRha2VzIDEgY3ljbGUgb24gUGVudGl1bSwgZnN0CglyZXF1aXJlcyB2YWx1ZSB0byBiZSByZWFkeSBvbmUgZXh0cmEgY3ljbGUuCgpXZWQgQXByIDE0IDExOjI4OjM0IDE5OTkgIERhdmUgQnJvbGxleSAgPGJyb2xsZXlAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9pMzg2L2kzODYuYyAobWVtb3J5X2FkZHJlc3NfbGVuZ3RoKTogQWRkIG1pc3NpbmcgcGFyZW50aGVzaXMuCgpXZWQgQXByIDE0IDEzOjU5OjI3IDE5OTkgIE1hcnRpbiB2b24gTG9ld2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogZXh0ZW5kLnRleGkgKERlcHJlY2F0ZWQgRmVhdHVyZXMpOiBOZXcgbm9kZS4KCSogaW52b2tlLnRleGkgKC1XZGVwcmVjYXRlZCk6IERvY3VtZW50LgoKV2VkIEFwciAxNCAwMDoxODoyMiAxOTk5ICBKYW4gSHViaWNrYSA8aHViaWNrYUBmcmVlc29mdC5jej4KCgkqIGkzODYubWQgKFNJbW9kZSBsb2dpY2FsIGNvbXBhcmUpOiBBdm9pZCBvdXRwdXRpbmcgbm9uLXBhcmlhYmxlIHRlc3R3CglhbmQgdGVzdGwgb24gUGVudGl1bS4KCShyZWdpc3RlciBhbmQgbWVtb3J5IGJpdCB0ZXN0cyk6IExpa2V3aXNlLgoJKHNldGNjLCBub3JtYWwgYW5kIHJldmVyc2VkIGNvbmRpdGlvbmFsIGJyYW5jaGVzKTogVXNlIHNob3J0ZXIKCXNlcXVlbmNlIGZvciB0ZXN0aW5nIGZsYWdzIHN0b3JlZCBpbiBFQVguCgoJKiBpMzg2Lm1kICh4b3JzaTMpOiBEbyBub3Qgb3V0cHV0IE5PVCBpbnN0cmN0aW9ucyBvbiBQZW50aXVtLgoJKHhvcnFpMyk6IExpa2V3aXNlLgoJKHhvcmhpMyk6IExpa2V3aXNlLgoJKG5vdHNpMik6IExpa2V3aXNlLgoJKG5vdHFpMik6IExpa2V3aXNlLgoJKG5vdGhpMik6IExpa2V3aXNlOyBkbyBub3Qgb3V0cHV0IHByZWZpeGVkIG9wY29kZXMgd2hlbiBwb3NzaWJsZS4KCgkqIGkzODYubWQgKG5lZ2hpMik6IERvIG5vdCBvdXRwdXQgcHJlZml4ZWQgb3Bjb2RlIHdoZW4gcG9zc2libGUuCgkoYXNobGhpMyk6IExpa2V3aXNlLgoKV2VkIEFwciAxNCAwMDowODo0NiAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogaTM4Ni5jIChtZW1vcnlfYWRkcmVzc19sZW5ndGgpOiBOZXcgZnVuY3Rpb24uCgkqIGkzODYuaCAobWVtb3J5X2FkZHJlc3NfbGVuZ3RoKTogRGVjbGFyZSBpdC4KClR1ZSBBcHIgMTMgMjI6NTI6MDQgMTk5OSAgRG9ubiBUZXJyeSAoZG9ubkBpbnRlcml4LmNvbSkKCQkJICBNYXJ0aW4gSGVsbGVyIChJbmcuLUJ1ZXJvX0hlbGxlckB0LW9ubGluZS5kZSkKCgkqIGNvbmZpZ3VyZS5pbiAoaW50ZXJpeCBBbHBoYSk6IEFkZC4KCSh3aW5udCBBbHBoYSk6IFVzZSBhbHBoYTMyLmgKCShpbnRlcml4IGkzODYpOiBQYXJhbGxlbCBBbHBoYTMyLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgoJKiBjb25maWcvaW50ZXJpeC5oOiBNb3ZlIGNvbW1vbiBlbGVtZW50cyBmcm9tIGkzODYtaW50ZXJpeC5oLgoJKiBjb25maWcvaTM4Ni9pMzg2LWludGVyaXguaDogRGVsZXRlIHNhbWUuCgkqIGNvbmZpZy9hbHBoYS9hbHBoYS1pbnRlcml4Lmg6IE5ldyBmaWxlLgoKCSogY29uZmlnL2FscGhhL2FscGhhMzIuaDogTmV3IGZpbGUsIHBhcnQgZnJvbiB3aW4tbnQuaC4KCSogY29uZmlnL2FscGhhL3dpbi1udC5oOiBEZWxldGlvbnMgKC0+IGFscGhhMzIuaCkuCgkqIGNvbmZpZy9hbHBoYS9pbnRlcml4Lmg6IE5ldyBmaWxlCgoJKiBjb25maWcvYWxwaGEvYWxwaGEubWQgKGludGVyaXgpOiBDb21tZW50LgoKCSogY29uZmlnL2FscGhhL3htLWFscGhhLWludGVyaXguaDogTmV3IGZpbGUuCgoJKiBjb25maWcvYWxwaGEvdC1pbnRlcml4OiBOZXcgZmlsZS4KCgkqIGZpeGluYy9ta2ZpeGluYy5zaCAoaW50ZXJpeC9BbHBoYSk6IEFkZC4KCjE5OTktMDQtMTMgIE1pa2UgU3R1bXAgIDxtcnNAd3JzLmNvbT4KCgkqIGkzODYvdnhpMzg2LmggKENQUF9DUFVfU1BFQyk6IERlZmluZSBhcHByb3ByaWF0ZWx5IGZvciB2eHdvcmtzLgoJKENQUF9QUkVERUZJTkVTLCBMSUJfU1BFQywgU1RBUlRGSUxFX1NQRUMsIEVOREZJTEVfU1BFQyk6IGxpa2V3aXNlLgoKVHVlIEFwciAxMyAyMTowMTozNiAxOTk5ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjLWNvbW1vbi5jIChkZWZhdWx0X3ZhbGlkX2xhbmdfYXR0cmlidXRlKTogTmV3IGZuLgoJKHZhbGlkX2xhbmdfYXR0cmlidXRlKTogTmV3IGNhbGxiYWNrIHB0ci4KCShkZWNsX2F0dHJpYnV0ZXMpOiBDYWxsIGl0LiAgTW92ZSBpbml0X3ByaW9yaXR5IHN1cHBvcnQgaW50bwoJQysrIGZyb250ZW5kLgoKVHVlIEFwciAxMyAxNzo0NzoxNCAxOTk5ICBKb2huIFdlaGxlICAoam9obkBmZWl0aC5jb20pCgoJKiBpMzg2Lm1kIChtb3ZkaSk6IEFkZCBzcGxpdHRlci4KCldlZCBBcHIgMTQgMTA6MDQ6MjcgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHgubWQgKHN0b3JlcWZfaW50LCBzdG9yZXFmX2ludF9jbG9iYmVyLCBsb2FkcWZfaW50LAoJbG9hZHFmX2ludF9jbG9iYmVyKTogQWRkIG5ldyBwYXR0ZXJucyB3aXRoIGNvcnJlc3BvbmRpbmcgc3BsaXR0ZXJzCgl0byBoYW5kbGUgbW92ZXMgb2YgZmxvYXRpbmcgcG9pbnQgdmFsdWVzIGludG8gYW5kIG91dCBvZiBpbnRhZ2VyCglyZWdpc3RlcnMgYnkgdXNpbmcgbWVtb3J5LgoKCSogY29uZmlnL2M0eC9jNHguYyAoYzR4X2NoZWNrX2xlZ2l0X2FkZHIpOiBEaXNhbGxvdyBQUkVfSU5DIGZvciBtb2RlcwoJb3RoZXIgdGhhbiBRRm1vZGUgYW5kIFFJbW9kZS4KCShtaXhlZF9zdWJyZWdfb3BlcmFuZCk6IE5ldyBmdW5jdGlvbi4KCShjNHhfZW1pdF9tb3ZlX3NlcXVlbmNlKTogSWYgbW92aW5nIGEgZmxvYXRpbmcgcG9pbnQgdmFsdWUgaW50byBvcgoJb3V0IG9mIGFuIGludGVnZXIgcmVnaXN0ZXIsIHVzZSB0aGUgbmV3IHBhdHRlcm5zIHN0b3JlcWZfaW50X2Nsb2JiZXIKCW9yIGxvYWRxZl9pbnRfY2xvYmJlci4KCShyZWdfaW1tX29wZXJhbmQsICpfcmVnX29wZXJhbmQpOiBDYWxsIHJlZ19vcGVyYW5kIGluc3RlYWQgb2YKCXJlZ2lzdGVyX29wZXJhbmQuCgkocmVnX29wZXJhbmQsIHNyY19vcGVyYW5kKTogRGlzYWxsb3cgb3BlcmFuZCBpZiBpdCBzYXRpc2lmZXMKCW1peGVkX3N1YnJlZ19vcGVyYW5kLgoKCSogY29uZmlnL2M0eC9jNHguaCAobWl4ZWRfc3VicmVnX29wZXJhbmQpOiBBZGQgcHJvdG90eXBlLgoKVHVlIEFwciAxMyAxNDo0OToxMyAxOTk5ICBKYW4gSHViaWNrYSAgPGh1Ymlja2FAZnJlZXNvZnQuY3o+CgoJKiBpMzg2LmMgKGFnaV9kZXBlbmRlbnQpOiBIYW5kbGUgcHVzaCBvcGVyYXRpb24gbW9yZSBjb3JyZWN0bHkuCgpUdWUgQXByIDEzIDE0OjQ1OjE3IDE5OTkgIEphbiBIdWJpY2thICA8aHViaWNrYUBmcmVlc29mdC5jej4KCgkqIGkzODYubWQgKGFuZGRpMyk6IEFkZCAlIGNvbnN0cmFpbnQuCgkoaW9yZGkzLCB4b3JkaTMpOiBMaWtld2lzZS4KClR1ZSBBcHIgMTMgMTQ6Mjk6NTggMTk5OSAgSmFuIEh1Ymlja2EgIDxodWJpY2thQGZyZWVzb2Z0LmN6PgoKCSogaTM4Ni5tZCAoZXh0ZW5kaGlzaTIpOiBPdXRwdXQgbW92IGluc3RlYWQgb2YgY3cgaW5zdHJ1Y3Rpb24gZm9yIEs2Cgl0byBpbXByb3ZlIGRlY29kaW5nIGJhbmR3aWR0aC4KCSogaTM4Ni5tZCAoZXh0ZW5kaGlxaTIpOiBMaWtld2lzZS4KClR1ZSBBcHIgMTMgMTQ6MjY6MzEgMTk5OSAgSmFuIEh1Ymlja2EgIDxodWJpY2thQGZyZWVzb2Z0LmN6PgoKCSogaTM4Ni5tZCAobW92c2ZfcHVzaCk6IEhhbmRsZSBtZW1vcnkgdG8gbWVtb3J5IGNhc2UgdG9vLCBuZXcgc3BsaXR0ZXIuCgkobW92ZGZfcHVzaCwgbW92eGZfcHVzaCk6IExpa2V3aXNlLgoJKG1vdnNmX3B1c2hfbWVtb3J5LCBtb3ZkZl9wdXNoX21lbW9yeSwgbW92eGZfcHVzaF9tZW1vcnkpOiBSZW1vdmUuCgpUdWUgQXByIDEzIDE0OjE0OjA2IDE5OTkgIEphbiBIdWJpY2thICA8aHViaWNrYUBmcmVlc29mdC5jej4KCgkqIGkzODYubWQ6IERvIG5vdCBvdXRwdXQgbW92ICUwLHJlZyBvbiBBTUQgSzYuCgpUdWUgQXByIDEzIDEyOjE0OjA3IDE5OTkgIERhdmUgQnJvbGxleSAgPGJyb2xsZXlAY3lnbnVzLmNvbT4KCgkqIGNwcGluaXQuYyAoY3BwX3N0YXJ0X3JlYWQpOiBGaXggYnVmZmVyIG92ZXJ3cml0ZS4KCSogTWFrZWZpbGUuaW4gKGNwcGluaXQubyk6IFR5cG8gaW4gZGVwZW5kZW5jaWVzLgoKVHVlIEFwciAxMyAwNTowNDo1OSAxOTk5ICBSaWNoYXJkIEVhcm5zaGF3ICAocmVhcm5zaGFAYXJtLmNvbSkKCgkqIGFybS5oIChmdW5jdGlvbiBwcm90b3R5cGVzIGZvciBhcm0uYyk6IElmZGVmIHRoZXNlIG91dCBpZgoJSEFWRV9DT05GSUdfSCBpcyBub3QgZGVmaW5lZC4KClR1ZSBBcHIgMTMgMDI6MTE6MTEgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcGEuYzogQXZvaWQgVXNpbmcgaW1tZWRpYXRlIHplcm8gZm9yIHJlZ2lzdGVyIHplcm8uCgkqIHBhLm1kOiBMaWtld2lzZS4KCgkqIHBhLmMgKHByaW50X29wZXJhbmQsIGNhc2UgJ2YnKTogTmV3IGNhc2UgZm9yIEZQIHJlZ2lzdGVyIG9yIDAuMC4KCShwcmludF9vcGVyYW5kLCBjYXNlICdyJyk6IFVzZSAlcjAgZm9yIHplcm8gdmFsdWUuCgkqIHBhLm1kIChtb3ZlIHBhdHRlcm5zLCBmY21wIHBhdHRlcm5zKTogVXNlIG5ldyAlZiBvdXRwdXQgYXJnLgoKCSogcGEuYzogVXNlIGEgcmVnaXN0ZXIgbmFtZSwgbm90IGEgcmF3IGltbWVkaWF0ZSBpbiBicmFuY2gsCgljb21wYXJlL2NsZWFyLCBzdWIsIHN1YmIsIHVhZGRjbSBhbmQgdnNoZCBpbnN0cnVjdGlvbnMuCgkqIHBhLm1kOiBMaWtld2lzZS4KCgkqIHBhLm1kLCBwYS5oLCBlZS5hc20sIGVlX2ZwLmFzbSwgbGliMmZ1bmNzLmFzbTogTGlrZXdpc2UuCgoJKiBwYS5jOiBVc2UgYSByZWdpc3RlciBuYW1lLCBub3QgYSByYXcgaW1tZWRpYXRlIGluICJidiIgaW5zdHJ1Y3Rpb25zLgoJKiBwYS5tZCwgcGEuaCwgZWUuYXNtLCBlZV9mcC5hc20sIGxpYjJmdW5jcy5hc206IExpa2V3aXNlLgoKCSogcGEuYzogUmVtb3ZlIHNwYWNlIHJlZ2lzdGVyIHNwZWNpZmljYXRpb24gaW4gbWVtb3J5IGFkZHJlc3NlcywKCWV4Y2VwdCB3aGVyZSBpdCBpcyBhY3R1YWxseSBuZWVkZWQuCgkqIHBhLm1kLCBwYS5oLCBlZS5hc20sIGVlX2ZwLmFzbSwgbGliMmZ1bmNzLmFzbTogTGlrZXdpc2UuCgpNb24gQXByIDEyIDIzOjM0OjM1IDE5OTkgIEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKTW9uIEFwciAxMiAxNDo1ODozMCAxOTk5ICBKYW4gSHViaWNrYSAgPGh1Ymlja2FAZnJlZXNvZnQuY3o+CgoJKiByZWctc3RhY2suYyAoY2hlY2tfc3RhY2tfcmVnc19tZW50aW9uZWQpOiBSZW1vdmUgdmFyaWFibGUgU0laRS4KCk1vbiBBcHIgMTIgMTk6MTU6MTcgMTk5OSAgRGFuaWVsIEphY29ib3dpdHogIDxkYW5AZGViaWFuLm9yZz4KCgkqIHJzNjAwMC9zeXN2NC5oIChDUFBfT1NfTElOVVhfU1BFQyk6IEFkZCBtaXNzaW5nIGJhY2tzbGFzaC4KCk1vbiBBcHIgMTIgMTk6MTE6MzggMTk5OSAgTXVtaXQgS2hhbiAgPGtoYW5AeHJheWxpdGgud2lzYy5lZHU+CgoJKiBpMzg2L2N5Z3dpbi5oIChTVUJUQVJHRVRfU1dJVENIRVMpOiBBZGQgLW1jb25zb2xlOyBmaXgKCS1tbm8tbm9wLWZ1bi1kbGxpbXBvcnQgYW5kIG1pbm9yIGRvYyBmaXhlcy4KCShTVEFSVEZJTEVfU1BFQyk6IEN5Z3dpbiBETExzIGRvbid0IGhhdmUgZGxsY3J0MC4KCShMSU5LX1NQRUMpOiBBZGQgLW1jb25zb2xlIHN1cHBvcnQuCgkqIGkzODYvbWluZ3czMi5oIChMSUJfU1BFQyk6IE1ha2UgbGlicmFyaWVzIGNvbnNpc3RlbnQgd2l0aAoJQ3lnd2luLgoJKExJTktfU1BFQyk6IFJlbW92ZS4gVXNlIEN5Z3dpbidzIHZlcnNpb24uCgkoTUFUSF9MSUJSQVJZKTogTWFrZSBpdCBudWxsLgoJKiBpMzg2L2NydGRsbC5oIChNQVRIX0xJQlJBUlkpOiBMaWtld2lzZS4KCkZyaSBBcHIgMTIgMTU6MDA6NTIgMTk5OSAgU3RhbiBDb3ggIDxzY294QGN5Z251cy5jb20+CgoJKiBjLWRlY2wuYyAoY19kZWNvZGVfb3B0aW9uLCBzdGFydF9kZWNsLCBzdGFydF9mdW5jdGlvbiwKCWZpbmlzaF9mdW5jdGlvbikgOiBSZWNvZ25pemUgLVduby1tYWluIHNvIHdlIGNhbiBhdm9pZCB3YXJuaW5ncy4KCjE5OTktMDQtMTIgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkuY29sdW1iaWEuZWR1PgoKCSogY3BwaGFzaC5jIChjb2xsZWN0X2V4cGFuc2lvbiwgbWFjcm9leHBhbmQsCglwdXNoX21hY3JvX2V4cGFuc2lvbik6IE1ha2UgdGhlIGVzY2FwZSBjaGFyYWN0ZXIgaW4gbWFjcm8KCWJ1ZmZlcnMgJ1xyJywgbm90ICdAJy4gIFJlbW92ZSBjb2RlIHRvIHByb3RlY3QgbGl0ZXJhbAoJb2NjdXJyZW5jZXMgb2YgdGhlIGVzY2FwZSBjaGFyYWN0ZXI7ICdccicgY2Fubm90IGFwcGVhcgoJaW4gYSBtYWNybyBidWZmZXIgdW5sZXNzIHdlIHB1dCBpdCB0aGVyZS4KCSogY3BwbGliLmMgKHNraXBfY29tbWVudCwgY29weV9jb21tZW50LCBjcHBfc2tpcF9oc3BhY2UsCgljb3B5X3Jlc3Rfb2ZfbGluZSwgY3BwX2dldF90b2tlbiwgcGFyc2Vfc3RyaW5nLAoJcGFyc2VfYXNzZXJ0aW9uKTogJ1xyJyBtaWdodCBiZSBhIGJhY2tzbGFzaC1uZXdsaW5lIG1hcmtlciwgb3IKCWl0IG1pZ2h0IGJlIGEgbWFjcm8gZXNjYXBlIG1hcmtlciwgZGVwZW5kaW5nIG9uCglDUFBfQlVGRkVSIChwZmlsZSktPmhhc19lc2NhcGVzLiAgJ0AnIGlzIG5vdCBhIHNwZWNpYWwKCWNoYXJhY3Rlci4KCSogY3BwbGliLmg6IFVwZGF0ZSBjb21tZW50YXJ5LgoKTW9uIEFwciAxMiAwOTozMDowMyAxOTk5ICBSaWNoYXJkIEVhcm5zaGF3ICAocmVhcm5zaGFAYXJtLmNvbSkKCgkqIGFybS5oICh0YXJnZXRfZnBfbmFtZSwgc3RydWN0dXJlX3NpemVfc3RyaW5nLCBhcm1fY3B1X3NlbGVjdCk6CglDb25zdC1pZnkuCgkqIGFybS5jICh0YXJnZXRfZnBfbmFtZSwgc3RydWN0dXJlX3NpemVfc3RyaW5nKTogQ29uc3QtaWZ5LgoKCSogYXJtLm1kIChyZWxvYWRfaW5oaSwgcmVsb2FkX291dGhpKTogTWFrZSB0aGUgc2NyYXRjaCBESW1vZGUuCgkqIGFybS5jIChhcm1fcmVsb2FkX2luX2hpKTogSGFuZGxlIGNhc2VzIHdoZW4gdGhlIGlucHV0IGlzIHN0aWxsCglhIHBzZXVkbywgbWFrZSB1c2Ugb2Ygc2NyYXRjaCByZWdpc3RlcnMgZm9yIHJlbG9hZGluZyB0aGUgYWRkcmVzcwoJYXMgYXBwcm9wcmlhdGUuCgkoYXJtX3JlbG9hZF9vdXRoaSk6IFNpbWlsYXJseSBmb3Igd2hlbiB0aGUgb3V0cHV0IGlzIHN0aWxsIGEgcHNldWRvLgoKCSogcmlzY2l4LmggKFNVQlRBUkdFVF9TV0lUQ0hFUyk6IERvY3VtZW50LgoKMTk5OS0wNC0xMiAgQnJ1Y2UgS29yYiAgPGRkc2luYzA5QGl4Lm5ldGNvbS5jb20+CgoJKiBmaXhpbmNsdWRlczoKCW1ha2UgZml4aW5jbHVkZXMgYmVoYXZlIGxpa2UgdGhlIHNjcmlwdHMgaW4gZml4aW5jLwoKCSogTWFrZWZpbGUuaW4oIHN0bXAtZml4aW5jICk6CgllbnN1cmUgdGhlIFNIRUxMIHZhbHVlIGlzIHRoYXQgb2YgdGhlIG1ha2UKCgkqIGZpeGluY2wvaW5jbGhhY2sudHBsOgoJdGhlIGZpbGUgbmFtZSBsaXN0cyBvdWdodCB0byBiZSByZXN0cmljdGVkIHRvICIqLmgiIGFueXdheQoJQysrIGZpbGVzIG1heSBiZSBuYW1lZCAuLi4vW2Etel0rKy8uLi4gYWxzbwoJQWRkaW5nIGNvcHlyaWdodCB5ZWFyIGFuZCBhdHRyaWJ1dGlvbiB0byBvdXRwdXQKCgkqIGZpeGluY2wvaW5jbGhhY2suZGVmOgoJZml4ZWQgYnJva2VuIGV4cHJlc3Npb24KCUNsYXJpZnkgYSBzb21lIGNvbW1lbnRzCgoJKiBmaXhpbmNsL2ZpeGluY2wudHBsOgoJQ2xhcmlmeSBhIHNvbWUgY29tbWVudHMKCVJlbW92ZSBkZWFkIHRlbXBsYXRlIHRleHQKCUNvcnJlY3QgdGhlIGNvdW50aW5nIG9mIHJlZ3VsYXIgZXhwcmVzc2lvbnMKCk1vbiBBcHIgMTIgMDM6MDc6NDQgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGFscGhhLmMgKGFsaWduZWRfbWVtb3J5X29wZXJhbmQpOiBIYW5kbGUgb3V0IG9mIHJhbmdlIHN0YWNrIHNsb3RzLgoJVGFrZSBhIG5ldyBTQ1JBVENIIGFyZ3VtZW50IGZvciB0aGUgb2NjYXNpb24uICBVcGRhdGUgYWxsIGNhbGxlcnMuCgkoZ2V0X3VuYWxpZ25lZF9hZGRyZXNzKTogQWJvcnQgb24gb3V0IG9mIHJhbmdlIHN0YWNrIHNsb3RzLgoJKiBhbHBoYS5tZCAoYWRkZGkzIHNwbGl0dGVyKTogQ2hlY2sgc19wX3J0eCBub3QgUkVHTk8uCgkocmVsb2FkX2lucWkpOiBDaGVjayBmb3IgYWxpZ25lZCBtZW1zIGJlZm9yZSB1bmFsaWduZWQuCgkocmVsb2FkX2luaGkpOiBMaWtld2lzZS4KCk1vbiBBcHIgMTIgMDM6MTE6MzAgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZmxvdy5jIChmbG93X2RlbGV0ZV9pbnNuKTogSWYgd2UgZGVsZXRlIGEgQ09ERV9MQUJFTCwgYWxzbyByZW1vdmUKCWl0IGZyb20gdGhlIG5vbmxvY2FsX2dvdG9faGFuZGxlcl9sYWJlbHMgbGlzdC4KCSoganVtcC5jIChkZWxldGVfaW5zbik6IExpa2V3aXNlLgoJKGp1bXBfb3B0aW1pemVfMSk6IEFsc28gcmVjb21wdXRlIExBQkVMX05VU0VTIHdoZW4gd2UgYXJlIGp1c3QKCW1hcmtpbmcgbGFiZWxzLgoJKiBydGwuaCAocmVtb3ZlX25vZGVfZnJvbV9leHByX2xpc3QpOiBEZWNsYXJlLgoJKiBydGxhbmFsLmMgKHJlbW92ZV9ub2RlX2Zyb21fZXhwcl9saXN0KTogTmV3IGZ1bmN0aW9uLgoKTW9uIEFwciAxMiAwMjozNzowMiAxOTk5ICBKYW4gSHViaWNrYSAgPGh1Ymlja2FAZnJlZXNvZnQuY3o+CgoJKiByZWctc3RhY2suYzogVXBkYXRlIGNvbW1lbnQsIGluY2x1ZGUgdmFycmF5LmguCgkoc3RhY2tfcmVnc19tZW50aW9uZWRfZGF0YSk6IE5ldyBnbG9iYWwgdmFyaWFibGUuCgkoY2hlY2tfc3RhY2tfcmVnc19tZW50aW9uZWQpOiBOZXcgZnVuY3Rpb24uCgkoc3RhY2tfcmVnc19tZW50aW9uZWQpOiBOZXcgZnVuY3Rpb24uCgkocmVnX3RvX3N0YWNrKTogSW5pdGlhbGl6ZSBhbmQgZnJlZSBzdGFja19yZWdzX21lbnRpb25lZF9kYXRhLAoJdXNlIHN0YWNrX3JlZ3NfbWVudGlvbmVkLgoJKHJlY29yZF9hc21fcmVnX2xpZmUpOiBDaGFuZ2UgaW5zbiB0eXBlIGNhY2hlIGZvciBjaGFuZ2VkIGluc24uCgkocmVjb3JkX3JlZ19saWZlKTogRG8gbm90IGNoYW5nZSB0aGUgaW5zbiBtb2RlLgoJKGVtaXRfcG9wX2luc24pOiBMaWtld2lzZS4KCShlbWl0X3N3YXBfaW5zbik6IExpa2V3aXNlLgoJKG1vdmVfZm9yX3N0YWNrX3JlZyk6IExpa2V3aXNlLgoJKHN0YWNrX3JlZ19saWZlX2FuYWx5c2lzKTogVXNlIHN0YWNrX3JlZ3NfbWVudGlvbmVkLgoJKGVtaXRfc3dhcF9pbnNuKTogTGlrZXdpc2UuCgkoc3Vic3Rfc3RhY2tfcmVncyk6IExpa2V3aXNlLgoJKGNvbnZlcnRfcmVncyk6IExpa2V3aXNlLgoJKiBqdW1wLmMgKGZpbmRfY3Jvc3NfanVtcCk6IFVzZSBzdGFja19yZWdzX21lbnRpb25lZC4KCSogcnRsLmggKHN0YWNrX3JlZ3NfbWVudGlvbmVkKTogRGVjbGFyZS4KCk1vbiBBcHIgMTIgMDA6NTc6MTAgMTk5OSAgVGhlb2RvcmUgUGFwYWRvcG91bG8gIDxUaGVvZG9yZS5QYXBhZG9wb3Vsb0Bzb3BoaWEuaW5yaWEuZnI+CgoJKiBpbnRlZ3JhdGUuYyAoSU5URUdSQVRFX1RIUkVTSE9MRCk6IFN5bmMgaXQgd2l0aCB0aGUgY29tbWVudC4KClN1biBBcHIgMTEgMTA6MjQ6MTggMTk5OSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIHJ0bC5oIChydHhfZGVmKTogVXBkYXRlIGRvY3VtZW50YXRpb24gZm9yIGp1bXAgYW5kIGNhbGwuCgpTdW4gQXByIDExIDA3OjQzOjQ0IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZV8xKTogTWFrZSB0aGUgZGVmaW5pdGlvbiBzdGF0aWMgdG8gbWF0Y2gKCXRoZSBwcm90b3R5cGUuCgpTYXQgQXByIDEwIDIyOjUxOjUzIDE5OTkgIEphbiBIdWJpY2thICA8aHViaWNrYUBsaW1heC5wYXJ1LmNhcy5jej4KCgkqIGZsb3cuYyAobGlmZV9hbmFseXNpcyk6IE5ldyBwYXJhbWV0ZXIgcmVtb3ZlX2RlYWRfY29kZS4KCShsaWZlX2FuYWx5c2lzXzEpOiBMaWtld2lzZS4KCShwcm9wYWdhdGVfYmxvY2spOiBMaWtld2lzZTsgdXNlIGl0LgoJKiBvdXRwdXQuaDogVXBkYXRlIHByb3RvdHlwZS4KCSogdG9wbGV2LmM6IFVwZGF0ZSBjYWxscyB0byBsaWZlX2FuYWx5c2lzLgoKU2F0IEFwciAxMCAyMjoxMjoxMiAxOTk5ICBKYW4gSHViaWNrYSAgPGh1Ymlja2FAZnJlZXNvZnQuY3o+CgoJKiByZWNvZy5jIChjb25zdHJhaW5fb3BlcmFuZHMpOiBJZ25vcmUgdW5hcnkgb3BlcmF0b3JzIHdoZW4KCW1hdGNoaW5nIG9wZXJhbmRzLiAgUmVjb2duaXplICc1Jy4uJzknIGFzIHdlbGwuCgpTYXQgQXByIDEwIDIxOjUzOjAyIDE5OTkgIFBoaWxpcHAgVGhvbWFzICAoa3Rob21hc0Bnd2RnLmRlKQoJCQkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBjb25maWd1cmUuaW46IFNldCB0YXJnZXRfY3B1X2RlZmF1bHQyIGZvciB0YXJnZXRfYWxpYXMgazYuCgkqIGkzODYuaCAoVEFSR0VUX1NXSVRDSEVTKTogUmVtb3ZlIG5vLTxjcHU+IGVudHJpZXMuCgkoQ0MxX0NQVV9TUEVDKTogTGlrZXdpc2UuCgkoQ1BQX0NQVV9ERUZBVUxUX1NQRUMpOiBTdHJlYW1saW5lIGRlZmluaXRpb24uICBBZGQgSzYgdmVyc2lvbi4KCShDUFBfSzZfU1BFQyk6IE5ldy4KCShDUFBfQ1BVX1NQRUMpOiBBZGQgSzYgdmFyaWFudC4KCShFWFRSQV9TUEVDUyk6IExpa2V3aXNlLgoKRnJpIEFwciAgOSAxMToyOToxNyAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZmxvdy5jIChtZXJnZV9ibG9ja3Nfbm9tb3ZlKTogUmV3cml0ZSB0byBwcm9wZXJseSBoYW5kbGUgdHdvCglibG9ja3MgdGhhdCB2YW5pc2ggZW50aXJlbHkgZHVyaW5nIG1lcmdpbmcuCgpTYXQgQXByIDEwIDIwOjA5OjU1IDE5OTkgIEpvaG4gV2VobGUgIChqb2huQGZlaXRoLmNvbSkKCgkqIGkzODYubWQgKGZsb2F0c2lzZjIsIGZsb2F0ZGlzZjIsIGZsb2F0c2lkZjIsIGZsb2F0ZGlkZjIsCglmbG9hdHNpeGYyLCBmbG9hdGRpeGYyLCBtb3ZzaWNjLCBtb3ZoaWNjLCBtb3ZzZmNjLCBtb3ZkZmNjLAoJbW92eGZjYywgbW92ZGljYyk6IFJlbW92ZSB1bnVzZWQgcmVnaXN0ZXIgY29uc3RyYWludHMgZnJvbQoJdGhlIHNwbGl0dGVycy4KCgkqIGkzODYubWQgKGZpeHVuc190cnVuY3Nmc2kyLCBmaXh1bnNfdHJ1bmNkZnNpMiwKCWZpeHVuc190cnVuY3hmc2kyKTogRGVsZXRlLgoKCSogcmVnLXN0YWNrLmMgKGRlbGV0ZV9pbnNuX2Zvcl9zdGFja2VyKTogRW5zdXJlIHRoYXQKCXRoZSBvbmx5IHNpZGUgZWZmZWN0cyBvZiBhIFBBUkFMTEVMIGFyZSBjbG9iYmVycy4KCShzdWJzdF9zdGFja19yZWdzKTogSGFuZGxlIHN1YnN0X3N0YWNrX3JlZ3NfcGF0IGRlbGV0aW5nCglhIFBBUkFMTEVMLgoJKiBpMzg2Lm1kIChleHRlbmRzZmRmMiwgZXh0ZW5kZGZ4ZjIsCglleHRlbmRzZnhmMik6IFJld3JpdGUgdXNpbmcgYSBzcGxpdHRlci4KCSogaTM4Ni5jIChvdXRwdXRfb3BfZnJvbV9yZWcpOiBSZW1vdmUuCgkqIGkzODYuaDogTGlrZXdpc2UuCgpTYXQgQXByIDEwIDEzOjA5OjE4IDE5OTkgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvYXJtL2FybS5jIChkaV9vcGVyYW5kKTogQWxsb3cgU1VCUkVHcyBhcyB3ZWxsLgoJKHNvZnRfZGZfb3BlcmFuZCk6IEFsbG93IFNVQlJFR3MgYXMgd2VsbC4KClNhdCBBcHIgMTAgMDY6MTQ6MzEgMTk5OSAgSmFuIEh1Ymlja2EgIDxodWJpY2thQHBhcnUuY2FzLmN6PgoKCSogZXh0ZW5kLnRleGkgKEFzc2VtYmxlciBJbnN0cnVjdGlvbnMgd2l0aCBDIEV4cHJlc3Npb24gT3BlcmFuZHMpOgoJRG9jdW1lbnQgdGhlIGkzODYgZmxvYXRpbmcgcG9pbnQgb3BlcmFuZHMuCgoxOTk5LTA0LTEwICBNaWtlIFN0dW1wICA8bXJzQHdycy5jb20+CgoJKiBjb25maWd1cmUuaW4gKCotKi12eHdvcmtzKTogQWRkIHZ4V29ya3MgdGhyZWFkIHN1cHBvcnQgZm9yIGFsbAoJdnhXb3JrcyB0YXJnZXRzLgoJKiBjb25maWd1cmUuaW4gKHRodW1iLXdycy14dndvcmtzKTogQWRkIHZ4V29ya3Mgc3VwcG9ydCBmb3IgdGh1bWIuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KClNhdCBBcHIgMTAgMDY6MDQ6NTAgMTk5OSAgRG9ubiBUZXJyeSAgKGRvbm5AaW50ZXJpeC5jb20pCgoJKiBpMzg2L3QtaW50ZXJpeDogVXNlIG1vc3RseSBzeXN0ZW0gaGVhZGVycyB1bmNoYW5nZWQuCglVc2Ugc3lzdGVtIGFzc2VydC5oCgkqIGZpeGluYy9maXhpbmMuaW50ZXJpeDogRGl0dG8gKG1ha2UgYWxtb3N0IG5vLW9wKS4KCSogY29uZmlnL3gtaW50ZXJpeC5oIChfQUxMX1NPVVJDRSk6IGFkZCAtRAoJKiBjb25maWcveC1pbnRlcml4LmggKGNydGkubyk6IERlbGV0ZSBkZXBlbmRlbmN5LgoJKiBjb25maWcveG0taW50ZXJpeC5oIChPTkxZX0lOVF9GSUVMRFMpOiBEZWZpbmUgb25seSB3aGVuIGJvb3RzdHJhcHBpbmcuCgkqIGkzODYveG0taTM4Ni1pbnRlcml4Lmg6IE5ldyBmaWxlLgoJKiBpMzg2L2ludGVyaXguaCAoQVNNX09VVFBVVF9MSU1JVEVEX1NUUklORyk6IEZpeCB3YXJuaW5ncy4KCSogaTM4Ni9pMzg2LWludGVyaXguaDogUmVuYW1lZCBmcm9tIGludGVyaXguaC4KCSogY29uZmlndXJlLmluIChpbnRlcml4KTogVXNlIG5ldyBmaWxlcy4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKU2F0IEFwciAxMCAwNToyNToyOCAxOTk5ICBEYW5pZWwgSmFjb2Jvd2l0eiAgPGRhbkBkZWJpYW4ub3JnPgoKCSogcnM2MDAwL3N5c3Y0LmggKENQUF9PU19MSU5VWF9TUEVDKTogRml4IGNvbmRpdGlvbnMKCWZvciAtRHVuaXggYW5kIC1EbGludXgsIGFuZCByZW1vdmUgZHVwbGljYXRlIGRlZmluaXRpb24uCglDaGFuZ2UgLUFzeXN0ZW0obGludXgpIHRvIC1Bc3lzdGVtKHBvc2l4KS4KCShDUFBfT1NfU09MQVJJU19TUEVDKTogRml4IGNvbmRpdGlvbnMgZm9yIC1EdW5peCwgLURzdW4sCgktRFNWUjQsIC1EX19FWFRFTlNJT05TX18uCgoJKiByczYwMDAvbGludXguaCAoQ1BQX1BSRURFRklORVMpOiBSZW1vdmUgLUR1bml4LAoJLURsaW51eCwgLUFzeXN0ZW0obGludXgpLCBhbmQgLUFzeXN0ZW0odW5peCkuCgpTYXQgQXByIDEwIDA1OjE0OjUwIDE5OTkgIE1hcmsgRWxicmVjaHQgIDxzbm93YmFsbDNAdXNhLm5ldD4KCgkqIGkzODYvZGpncHAuaCAoU0VUX0FTTV9PUCk6IERlZmluZS4KCgkqIGNjY3AuYyAoRElSX1NFUEFSQVRPUik6IE1vdmUgdG8gdGhlIHRvcCBvZiB0aGUgZmlsZS4KCShpc19kaXJfc2VwYXJhdG9yKTogTmV3IGZ1bmN0aW9uLgoJKHNpbXBsaWZ5X2ZpbGVuYW1lKTogVXNlIGl0LgoJKiBjb2xsZWN0Mi5jIChmaW5kX2FfZmlsZSk6IFVzZSBIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTSBpbiBwbGFjZQoJb2YgdGhlIERJUl9TRVBBUkFUT1IgdGVzdC4KCUNvbnNpZGVyIGFueSBmaWxlIHN0YXJ0aW5nIHdpdGggYSBkcml2ZW5hbWUgdG8gYmUgYWJzb2x1dGUuCglJZiB0aGUgYWJzb2x1dGUgZmlsZW5hbWUgdGVzdCBmYWlscyBhbmQgRVhFQ1VUQUJMRV9TVUZGSVggaXMKCWRlZmluZWQsIGFwcGVuZCBFWEVDVVRBQkxFX1NVRkZJWCB0byB0aGUgZmlsZSBhbmQgdHJ5IGFnYWluLgoJKiBjcHBpbml0LmMgKGJhc2VfbmFtZSk6IFVzZSBIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTQoJaW4gcGxhY2Ugb2YgX19NU0RPU19fIGFuZCBfV0lOMzIuCgkqIGNwcGZpbGVzLmMgKHNpbXBsaWZ5X3BhdGhuYW1lKTogTGlrZXdpc2UuCgkqIGdjYy5jIChJU19ESVJfU0VQQVJBVE9SKTogRGVmaW5lIG5ldyBtYWNyby4gUmV0dXJucyB0cnVlIGlmIGEKCWNoYXJhY3RlciBpcyBhIGRpcmVjdG9yeSBzZXBhcmF0b3IuCgkoZmluZF9hX2ZpbGUpOiBVc2UgaXQuCgkoY29udmVydF9maWxlbmFtZSk6IExpa2V3aXNlLgoJKHByb2Nlc3NfY29tbWFuZCk6IExpa2V3aXNlLgoJKGRvX3NwZWNfMSk6IExpa2V3aXNlLgoJKGlzX2RpcmVjdG9yeSk6IExpa2V3aXNlLgoJKG1haW4pOiBMaWtld2lzZS4KCSogcHJlZml4LmMgKElTX0RJUl9TRVBBUkFUT1IpOiBEZWZpbmUuIFRlc3RzIHdoZXRoZXIgYSBjaGFyYWN0ZXIgaXMKCWEgZGlyZWN0b3J5IHNlcGFyYXRvci4KCSh0cmFuc2xhdGVfbmFtZSk6IFVzZSBpdC4KCSh1cGRhdGVfcGF0aCk6IENoYW5nZSBESVJfU0VQQVJBVE9SXzIgdG8gRElSX1NFUEFSQVRPUi4gRml4Cgl3YXJuaW5nIGluIGJsb2NrIHdoZXJlICcvJyBpcyBjaGFuZ2VkIHRvIERJUl9TRVBBUkFUT1IuCgkqIGkzODYveG0tZGpncHAuaCAoRElSX1NFUEFSQVRPUik6IFNldCB0byAnLycuCgkoRElSX1NFUEFSQVRPUl8yKTogTmV3IG1hY3JvLiBTZXQgdG8gJ1wnLgoJKEhBVkVfRE9TX0JBU0VEX0ZJTEVTWVMpOiBEZWZpbmUuCgkqIGkzODYveG0tbWluZ3czMi5oOiBVcGRhdGVkIGNvcHlyaWdodC4gU2V0CglESVJfU0VQQVJBVE9SXzIgdG8gJy8nLiBEZWZpbmUgSEFWRV9ET1NfQkFTRURfRklMRV9TWVNURU0uCgkqIGkzODYveG0tb3MyLmg6IExpa2V3aXNlLgoJKiB3aW5udC94bS13aW5udC5oOiBMaWtld2lzZS4KCSogaTM4Ni94bS1kb3MuaDogTGlrZXdpc2UuICBBZGQgY29weXJpZ2h0LgoKMTk5OS0wNC0xMCAgSm9zZXBoIFMuIE15ZXJzICA8anNtMjhAY2FtLmFjLnVrPgoKCSogcGRwMTEuaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIG9wdGlvbiB0byB2YXJ5IGFzc2VtYmxlciBzeW50YXguCgkoVEFSR0VUX0RFRkFVTFQpOiBQb3NzaWJseSB1c2UgVU5JWCBzeW50YXguCgkoVEFSR0VUX1VOSVhfQVNNLCBUQVJHRVRfVU5JWF9BU01fREVGQVVMVCk6IE5ldyBtYWNyb3MuCgkoUkVHSVNURVJfTkFNRVMpOiBVc2UgInI1IiBpbnN0ZWFkIG9mICJmcCIuCgkoQVNNX09VVFBVVF9BTElHTik6IFVzZSAiLmV2ZW4iIGRpcmVjdGl2ZSwgYW5kIGFib3J0IGZvciBhbnkKCWdyZWF0ZXIgYWxpZ25tZW50LgoJKiAyYnNkLmggKFRBUkdFVF9VTklYX0FTTV9ERUZBVUxUKTogRGVmYXVsdCB0byBVTklYIGFzc2VtYmxlcgoJc3ludGF4IGZvciAyQlNELgoJKiBwZHAxMS5jIChvdXRwdXRfYXNjaWkpOiBVc2Ugd29ya2luZyBzeW50YXggZm9yICIuYnl0ZSIuCgkocHJpbnRfb3BlcmFuZF9hZGRyZXNzKTogVXNlICIqIiBpbnN0ZWFkIG9mICJAIiB3aGVuIHVzaW5nIFVOSVgKCWFzc2VtYmxlciBzeW50YXguCgpTYXQgQXByIDEwIDAzOjUwOjEyIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHJ0bC5oIChyZWJ1aWxkX2p1bXBfbGFiZWxzKTogRGVjbGFyZS4KCSoganVtcC5jIChqdW1wX29wdGltaXplXzEpOiBSZW5hbWVkIGZyb20ganVtcF9vcHRpbWl6ZS4gIE1ha2Ugc3RhdGljLgoJQWRkIG5ldyBhcmd1bWVudCBNQVJLX0xBQkVMU19PTkxZLiAgUXVpdCBhZnRlciBtYXJrX2FsbF9sYWJlbHMgaWYKCXJlcXVlc3RlZC4KCShqdW1wX29wdGltaXplLCByZWJ1aWxkX2p1bXBfbGFiZWxzKTogTmV3IHdyYXBwZXIgZnVuY3Rpb25zIGZvcgoJanVtcF9vcHRpbWl6ZV8xLgoJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IFVzZSByZWJ1aWxkX2p1bXBfbGFiZWxzIGluc3RlYWQgb2YKCXJ1bm5pbmcgdGhlIGVudGlyZSBqdW1wIG9wdGltaXplci4KCgkqIHJ0bC5oIChsb2NhbF9hbGxvYyk6IFJldHVybnMgYW4gaW50ZWdlciBub3cuCgkqIGxvY2FsLWFsbG9jLmMgKHJlY29yZGVkX2xhYmVsX3JlZik6IE5ldyBmaWxlIHNjb3BlZCB2YXJpYWJsZS4KCShsb2NhbF9hbGxvYyk6IEluaXRpYWxpemUgcmVjb3JkZWRfbGFiZWxfcmVmIHRvIHplcm8uICBSZXR1cm4gaXRzCgl2YWx1ZSB3aGVuIGxvY2FsIGFsbG9jYXRpb24gaGFzIGNvbXBsZXRlZC4KCSh1cGRhdGVfZXF1aXZfcmVncyk7IElmIHdlIGNyZWF0ZSBhbiBlcXVpdmFsZW5jZSBmb3IgYSBMQUJFTF9SRUYsCglzZXQgcmVjb3JkZWRfbGFiZWxfcmVmLgoJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IFJ1biB0aGUganVtcCBvcHRpbWl6ZXIgYWZ0ZXIKCXJlZ2lzdGVyIGFsbG9jYXRpb24gYW5kIHJlbG9hZGluZyBpZiBuZWVkZWQuCgpGcmkgQXByICA5IDIxOjAyOjU3IDE5OTkgIEtyaXN0ZXIgV2FsZnJpZHNzb24gIChjYXRvQGRmLmx0aC5zZSkKCgkqIGkzODYvZ2FzLmggKEFTTV9PVVRQVVRfTUFYX1NLSVBfQUxJR04pOiBGaXggdHlwby4KCSogaTM4Ni9mcmVlYnNkLWVsZi5oIChBU01fT1VUUFVUX01BWF9TS0lQX0FMSUdOKTogTGlrZXdpc2UuCgoxOTk5LTA0LTA5ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLmNvbHVtYmlhLmVkdT4KCgkqIGNwcGhhc2guYyAoc3BlY2lhbF9zeW1ib2wpOiBXaGVuIGV4cGFuZGluZyBfX0xJTkVfXywgdXNlIHRoZQoJdG9wIGZpbGUgYnVmZmVyLCBub3QgdGhlIHRvcCBidWZmZXIuCgpGcmkgQXByICA5IDEzOjQxOjA0IDE5OTkgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluIChjaGVjay1nKyssIGNoZWNrLWdjYywgY2hlY2stZzc3LCBjaGVjay1vYmpjKTogQWRkCgljZCAuLiB0byBUQ0xfTElCUkFSWSBjb21tYW5kLgoKRnJpIEFwciAgOSAxMzowNDo1MiAxOTk5ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL2FybS91bmtub3duLWVsZi5oIChTVUJUQVJHRVRfQ1BVX0RFRkFVTFQpOiBPbmx5IGRlZmluZSBpZgoJbm90IGFscmVhZHkgc3BlY2lmaWVkLgoKRnJpIEFwciAgOSAxMToxODo1NSAxOTk5ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjLWNvbW1vbi5jIChkZWNsX2F0dHJpYnV0ZXMsIEFfSU5JVF9QUklPUklUWSk6IEFsbG93IGFycmF5cwoJb2YgY2xhc3NlcywgdG9vLgoKRnJpIEFwciAgOSAxMDo0MDoxMCAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQHNuYWZ1LnJ1dGdlcnMuZWR1PgoKCSogcnM2MDAwLmMgKHJzNjAwMF9vdmVycmlkZV9vcHRpb25zLCBwdHQsIHJzNjAwMF9maWxlX3N0YXJ0LAoJcnM2MDAwX2Zsb2F0X2NvbnN0LCByczYwMDBfcmVwbGFjZV9yZWdubywgZGVidWdfc3RhY2tfaW5mbywKCXJzNjAwMF9vdXRwdXRfbG9hZF90b2NfdGFibGUsIG91dHB1dF9wcm9sb2csIG91dHB1dF9lcGlsb2cpOgoJQ29uc3QtaWZ5IGEgY2hhciouCgkob3V0cHV0X21pX3RodW5rKTogTGlrZXdpc2UuICBNYXJrIHBhcmFtZXRlciBgdGh1bmtfZm5kZWNsJyB3aXRoCglBVFRSSUJVVEVfVU5VU0VELiAgSGlkZSB1bnVzZWQgdmFyaWFibGVzIGByMCcsIGBzcCcsIGB0b2MnLAoJYHNjaGFpbicsIGByMTInLCBgYnVmJyBhbmQgYGxhYmVsbm8nLgoJKG91dHB1dF9hc2NpaSk6IENvbnN0LWlmeSBhIGNoYXIqLgoJKHJzNjAwMF9nZW5fc2VjdGlvbl9uYW1lKTogSW5pdGlhbGl6ZSB2YXJpYWJsZSBgbGFzdF9wZXJpb2QnLgoJKHJzNjAwMF9hZGp1c3RfcHJpb3JpdHkpOiBNYXJrIHBhcmFtZXRlciBgaW5zbicgd2l0aAoJQVRUUklCVVRFX1VOVVNFRC4KCShyczYwMDBfdHJhbXBvbGluZV90ZW1wbGF0ZSwgcnM2MDAwX2RsbF9pbXBvcnRfcmVmLAoJcnM2MDAwX2xvbmdjYWxsX3JlZiwgcnM2MDAwX2VuY29kZV9zZWN0aW9uX2luZm8pOiBDb25zdC1pZnkgYSBjaGFyKi4KCgkqIHJzNjAwMC5oIChvZmZzZXR0YWJsZV9tZW1fb3BlcmFuZCwgb3B0aW1pemF0aW9uX29wdGlvbnMpOiBBZGQKCXByb3RvdHlwZXMuCgoJKiByczYwMDAubWQgKG1vdmRpLCBkZWZpbmVfc3BsaXQpOiBDYXN0IGEgdmFsdWUgdG8gSE9TVF9XSURFX0lOVAoJd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuCgpUaHUgQXByICA4IDE5OjIwOjE4IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGV4cHIuYyAoZXhwYW5kX2V4cHIsIGNhc2UgQVJSQVlfUkVGLCBDT01QT05FTlRfUkVGLCBCSVRfRklFTERfUkVGKToKCURvIG5vdCB0cnkgdG8gb3B0aW1pemUgYSBhZ2dyZWdhdGUgYWRkcmVzcyB3aGljaCBoYXMgVk9JRG1vZGUuCglNaXJyb3JzIE1hcmNoIDIzIGNoYW5nZSB0byBleHBhbmRfYXNzaWdubWVudC4KCgkqIGZsb3cuYyAoZGVsZXRlX3VucmVhY2hhYmxlX2Jsb2Nrcyk6IERvIG5vdCByZXF1aXJlIEVER0VfRkFMTFRIUlUKCWZvciBhbiBlZGdlIHdoZW4gdGlkeWluZyBhbiBlZGdlIHdoaWNoIGNvbm5lY3RzIGNvbnNlY3V0aXZlIGJhc2ljCglibG9ja3MuCgoJKiBmbG93LmMgKGNhbl9kZWxldGVfbGFiZWxfcCk6IERvIG5vdCBjb252ZXJ0IGEgbGFiZWwgaW50byBhCglkZWxldGVkIGxhYmVsIGhlcmUuCgoJKiBjc2UuYyAoZmx1c2hfaGFzaF90YWJsZSk6IE5ldyBmdW5jdGlvbi4KCShjc2VfaW5zbik6IEZsdXNoIHRoZSBoYXNoIHRhYmxlIHdoZW4gd2UgZW5jb3VudGVyIGEgdm9sYXRpbGUgYXNtLgoJKGNzZV9iYXNpY19ibG9jayk6IFVzZSBmbHVzaF9oYXNoX3RhYmxlIGluc3RlYWQgb2YgZG9pbmcgaXQKCWlubGluZS4KCgkqIHJlbG9hZDEuYyAocmVsb2FkX2NzZV9yZWdzXzEpOiBGbHVzaCBrbm93biByZWdpc3RlciB2YWx1ZXMgaWYKCXdlIGVuY291bnRlciBhIHZvbGF0aWxlIGFzbS4KCgkqIGxvb3AuYyAoc3RyZW5ndGhfcmVkdWNlKTogUmUtZW5hYmxlIEpvZXJuJ3MgbG9vcCBpbXByb3ZlbWVudHMuCgpUaHUgQXByICA4IDA5OjM3OjQwIDE5OTkgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvYXJtL2FybS5jIChhcm1fcHJpbnRfb3BlcmFuZCk6IFVuZG8gcHJldmlvdXMgY2hhbmdlIC0KCWFsd2F5cyBwcmludCBsYXJnZSBjb25zdGFudHMgaW4gZGVjaW1hbC4KClRodSBBcHIgIDggMTA6MjI6MjMgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY29uZmlndXJlLmluIChob3N0X3htX2ZpbGUsIGJ1aWxkX3htX2ZpbGUpOiBJbmNsdWRlIGh3aW50LmguCglVc2UgY2FzZSBzdGF0ZW1lbnRzIGluc3RlYWQgb2YgImlmIHRlc3QgLWEgLi4uIC1hIC4uLiAtYSAuLi4iCgoJKiBtYWNobW9kZS5oOiBEb24ndCBkZWZpbmUgSE9TVF9XSURFX0lOVCwgZXRjLiBXcmFwIHVzZSBvZgoJSE9TVF9XSURFX0lOVCBpbiAjaWZkZWYuCgoJKiBtaXBzLmg6IEluY2x1ZGUgaHdpbnQuaCBpbnN0ZWFkIG9mIHByb3ZpZGluZyBkZWZpbml0aW9ucyBmb3IKCUhPU1RfV0lERV9JTlQsIGV0Yy4gIFdyYXAgdXNlcyBvZiBIT1NUX1dJREVfSU5UIGluICNpZmRlZi4KClRodSBBcHIgIDggMDY6MTY6MTQgMTk5OSAgSm9obiBXZWhsZSAgKGpvaG5AZmVpdGguY29tKQoKCSogaTM4Ni5tZCAodHJ1bmNkZnNmMiwgdHJ1bmN4ZnNmMiwKCXRydW5jeGZkZjIpOiBSZXdyaXRlIHVzaW5nIGEgc3BsaXR0ZXIuCgpUaHUgQXByICA4IDAxOjI2OjA1IDE5OTkgIEFyZyBIYWFzICAoYWhhYXNAbmVvc29mdC5jb20pCgkJCSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZnJlZWJzZC1lbGYuaCAoQVNNX09VVFBVVF9NQVhfU0tJUF9BTElHTik6IEF2b2lkIGFtYmlndW91cwoJZWxzZSBzdGF0ZW1lbnQuCgkqIGdhcy5oIChBU01fT1VUUFVUX01BWF9TS0lQX0FMSUdOKTogTGlrZXdpc2UuCgkqIGxpbnV4LmggKEFTTV9PVVRQVVRfTUFYX1NLSVBfQUxJR04pOiBMaWtld2lzZS4KCSogb3BlbmJzZC5oIChBU01fT1VUUFVUX01BWF9TS0lQX0FMSUdOKTogTGlrZXdpc2UuCgpXZWQgQXByICA3IDIyOjQwOjE5IDE5OTkgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGk5NjAvaTk2MC5jIChpOTYwX2Z1bmN0aW9uX3Byb2xvZ3VlKTogRG9uJ3Qgc2F2ZSBzdGF0aWMgY2hhaW4KCXBvaW50ZXIuCgkqIGk5NjAvaTk2MC5oIChTVEFDS19DSEFJTl9SRUdOVU0pOiBDaGFuZ2UgZnJvbSByMyB0byBnMTIuCgkoVFJBTVBPTElORV9URU1QTEFURSk6IExpa2V3aXNlLgoJKEZSQU1FX1BPSU5URVJfUkVRVUlSRUQpOiBDaGVjayBjdXJyZW50X2Z1bmN0aW9uX2hhc19ub25sb2NhbF9nb3RvLgoJKiBpOTYwL2k5NjAubWQgKG5vbmxvY2FsX2dvdG8pOiBSZXdyaXRlLgoKVHVlIEFwciAgNiAxNzo0OTo0OSAxOTk5ICBQaGlsaXAgQmx1bmRlbGwgIDxwYkBuZXh1cy5jby51az4KCgkqIGNvbmZpZy9hcm0vbGliMWZ1bmNzLmFzbTogVGVzdCBmb3IgX19FTEZfXyBub3QgX19lbGZfXy4KCldlZCBBcHIgIDcgMTQ6MDc6MzQgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogaDgzMDAuYyAoaDgzMDBfYWRqdXN0X2luc25fbGVuZ3RoKTogQWxzbyBhdm9pZCByZWNvZ25pemluZwoJQUREUl9WRUMgYW5kIEFERFJfRElGRl9WRUMgaW5zbnMuCgoJKiBoODMwMC5jIChoODMwMF9hZGp1c3RfaW5zbl9sZW5ndGgpOiBBdm9pZCB0cnlpbmcgdG8gcmVjb2duaXplCglVU0UsIENMT0JCRVIgb3IgU0VRVUVOQ0UgaW5zbnMuCgoJKiB1bnJvbGwuYyAodW5yb2xsX2xvb3ApOiBGb3IgSEFWRV9jYzAgbWFjaGluZXMsIGFkanVzdCBjb3B5X2VuZF9sdWlkCgl0byBhY2NvdW50IGZvciB0aGUgdW5jb3BpZWQgaW5zbiB0aGF0IHNldHMgY2MwIGF0IHRoZSBlbmQgb2YgdGhlIGxvb3AuCgoJKiB1bnJvbGwuYyAoY29weV9sb29wX2JvZHkpOiBBbHdheXMgZW5zdXJlIGF0IGxlYXN0IHR3byBpbnNucwoJYXJlIGluIHRoZSBjb3BpZWQgbG9vcC4KCldlZCBBcHIgIDcgMTQ6NTI6MTggMTk5OSAgQ2F0aGVyaW5lIE1vb3JlICA8Y2xtQGN5Z251cy5jb20+CgoJKiBjb25maWcvbWlwcy9lbGYuaCAoTUFLRV9ERUNMX09ORV9PTkxZKTogRGVmaW5lLgoJKFVOSVFVRV9TRUNUSU9OX1ApOiBEZWZpbmUuCgoxOTk5LTA0LTA3ICBCcnVjZSBLb3JiICA8ZGRzaW5jMDlAaXgubmV0Y29tLmNvbT4KCgkqIGZpeGluYy9pbmNsaGFjay50cGwgJiBmaXhpbmNsLnRwbDoKCVJlbW92ZSBkeW5hbWljIGNvbnRlbnQgZnJvbSBnZW5lcmF0ZWQgZmlsZXMKCldlZCBBcHIgIDcgMTM6MTY6MjIgMTk5OSAgSm9obiBXZWhsZSAgKGpvaG5AZmVpdGguY29tKQoKCSogaTM4Ni5jIChvdXRwdXRfbW92ZV9tZW1vcnkpOiBSZW1vdmUuCgkqIGkzODYuaDogTGlrZXdpc2UuCgoJKiBpMzg2Lm1kIChtb3ZzaSwgbW92aGksIG1vdnN0cmljdGhpLCBtb3ZxaSwgbW92c3RyaWN0cWksCgltb3ZzZiwgbW92ZGYsIG1vdnhmLCBtb3ZkaSk6IENoZWNrIG5vX25ld19wc2V1ZG9zIGluc3RlYWQKCW9mIChyZWxvYWRfaW5fcHJvZ3Jlc3MgfCByZWxvYWRfY29tcGxldGVkKS4KCldlZCBBcHIgIDcgMDM6MTY6NDUgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGFscGhhLmMgKHJlZ19ub19zdWJyZWdfb3BlcmFuZCk6IE5ldyBmdW5jdGlvbi4KCSogYWxwaGEuaCAoUFJFRElDQVRFX0NPREVTKTogQWRkIGl0LgoJKiBhbHBoYS5tZCAoZmxvYXRkaT9mIHBhdHRlcm5zKTogVXNlIGl0IGZvciBvcDEuCgoJKiBhbHBoYS5jIChhbHBoYV9lbmRfZnVuY3Rpb24pOiBEb24ndCBmbGFnIHdlYWsgZnVuY3Rpb25zLgoKV2VkIEFwciAgNyAwMjoxMTo1NSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZXhwci5jIChleHBhbmRfYnVpbHRpbikgW0JVSUxUX0lOX1JFVFVSTl9BRERSRVNTXTogVXNlCgljb3B5X3RvX21vZGVfcmVnOyBkb24ndCBmb3JjZSBjb25zdGFudHMgaW50byBhIHJlZ2lzdGVyLgoKVHVlIEFwciAgNiAyMjo1NToyNSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogdG9wbGV2LmMgKGNvbXBpbGVfZmlsZSk6IFR5cG8gZmxvd19kdW1wIC0+IGZsb3cyX2R1bXAuCgoxOTk5LTA0LTA2ICBKb3NlcGggUy4gTXllcnMgIDxqc20yOEBjYW0uYWMudWs+CgoJKiBwZHAxMS5jIChzaW1wbGVfbWVtb3J5X29wZXJhbmQpOiBBZGQgZGVmYXVsdCBjYXNlIGluIHN3aXRjaC4KCSogcGRwMTEuaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIGhlbHAgc3RyaW5ncy4KCShOT1RJQ0VfVVBEQVRFX0NDKTogRG9uJ3QgaW5jbHVkZSBleGNlc3MgYXJndW1lbnQgdG8gZm9ybWF0LgoJKEFTTV9PVVRQVVRfRE9VQkxFX0lOVCk6IFJlbW92ZS4KClR1ZSBBcHIgIDYgMjI6MDk6NDAgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGV4cHIuYyAoZXhwYW5kX2J1aWx0aW5fc2V0am1wKTogUHV0IHNldGptcCByZXR1cm4gbGFiZWwgb24KCW5vbmxvY2FsX2dvdG9faGFuZGxlcl9sYWJlbHMgZm9yIGZsb3cuCgpUdWUgQXByICA2IDIyOjA1OjIxIDE5OTkgIEphbiBIdWJpY2thICA8aHViaWNrYUBwYXJ1LmNhcy5jej4KCQkJICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZmxvdy5jICh2ZXJpZnlfZmxvd19pbmZvKTogTmV3IGZ1bmN0aW9uLgoJKGZpbmRfYmFzaWNfYmxvY2tzKTogQ2FsbCBpdCBpZiBFTkFCTEVfQ0hFQ0tJTkcuCgkobWVyZ2VfYmxvY2tzKTogRG9uJ3QgbWVyZ2UgaWYgdGhlcmUgYXJlIG5vbi1kZWxldGFibGUgbGFiZWxzLgoJKiB0b3BsZXYuYyAoZmF0YWxfaW5zbik6IEFsbG93IGEgcHJpbnRmLXN0eWxlIGFyZyBsaXN0LgoJKiB0b3BsZXYuaCAoZmF0YWxfaW5zbik6IFVwZGF0ZSBwcm90b3R5cGUuCgpUdWUgQXByICA2IDE2OjE4OjU4IDE5OTkgIEphbiBIdWJpY2thICA8aHViaWNrYUBwYXJ1LmNhcy5jej4KCgkqIGZsb3cuYyAoc3BsaXRfZWRnZSkgdXBkYXRlIGNvcnJlY3RseSBmbG93IGdyYXBoLCBkaXNhYmxlCglFREdFX0NSSVRJQ0FMIGZsYWcgb24gdGhlIHNwbGl0IGVkZ2UsIHVwZGF0ZSBOVVNFUyBmb3IgbmV3IGxhYmVsLgoKVHVlIEFwciAgNiAxNTo0Nzo1MSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZW1pdC1ydGwuYyAoZ2VuX3J0eF9DT05TVF9ET1VCTEUpOiBVc2UgWFdJTlQgbm90IFhJTlQuCglDbGVhciB0aGlyZCBhbmQgZm9sbG93aW5nIHNsb3RzLCBpZiB0aGV5IGV4aXN0LgoKVHVlIEFwciAgNiAxNTo0NToyOCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZmxvdy5jIChjcmVhdGVfYmFzaWNfYmxvY2spOiBNYWtlIHN1cmUgdGhlIGJiIG5vdGUgaXMgaW4gdGhlIGJsb2NrLgoJKGNhbl9kZWxldGVfbm90ZV9wKTogUmVuYW1lIGZyb20gZGVsZXRlX25vdGVfcC4KCShkZWxldGVfaW5zbl9jaGFpbik6IFByZXNlcnZlIHVuZGVsZXRlYWJsZSBsYWJlbHMgdG9vLgoJKHRpZHlfZmFsbHRocnVfZWRnZSk6IFVzZSBuZXh0X3JlYWxfaW5zbiBpbnN0ZWFkIG9mIGNvbmZ1c2luZwoJaW5saW5lIGNvZGUuCgoxOTk5LTA0LTA2ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLmNvbHVtYmlhLmVkdT4KCgkqIGNwcGV4cC5jIChwYXJzZV9jaGFyY29uc3QpOiBJbml0aWFsaXplIGMuCgkoY3BwX3BhcnNlX2V4cHIpOiBJbml0aWFsaXplIHJwcmlvLgoJKiBjcHBmaWxlcy5jIChtZXJnZV9pbmNsdWRlX2NoYWlucyk6IEluaXRpYWxpemUgcHJldi4KCShmaW5jbHVkZSk6IFNldCBmcC0+bGluZV9iYXNlIHRvIGZwLT5idWYgYmVmb3JlIHJldHVybmluZy4KCSogY3BwaGFzaC5jIChtYWNyb2V4cGFuZCk6IEluaXRpYWxpemUgdG9rZW4uCgkqIGNwcHNwZWMuYyAobGFuZ19zcGVjaWZpY19kcml2ZXIpOiBDaGFuZ2Ugc3VmZiB0bwoJY29uc3QgY2hhciAqY29uc3QgKi4KCjE5OTktMDQtMDYgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkuY29sdW1iaWEuZWR1PgoKCSogY3BwaW5pdC5jIChpbnN0YWxsX3ByZWRlZnMpOiBEZWxldGUgZnVuY3Rpb24uCgkoY3BwX3N0YXJ0X3JlYWQpOiBEb24ndCBjYWxsIGluc3RhbGxfcHJlZGVmcy4KCShjcHBfaGFuZGxlX29wdGlvbik6IFJlbW92ZSBjYXNlICd1JyBhbmQgYWxsIHJlZnMgdG8KCW9wdHMtPmluaGliaXRfcHJlZGVmcy4KCShwcmludF9oZWxwKTogRG9uJ3QgbWVudGlvbiAtdW5kZWYuCgkoaW5pdGlhbGl6ZV9idWlsdGlucyk6IERlZmluZSBfX0hBVkVfQlVJTFRJTl9TRVRKTVBfXywgdG8KCW1hdGNoIGNjY3AuCgkqIGNwcGxpYi5oIChzdHJ1Y3QgY3BwX29wdGlvbnMpOiBSZW1vdmUgaW5oaWJpdF9wcmVkZWZzCgltZW1iZXIuCgoJKiBjY2NwLmMgKHByZWRlZnMpOiBEZWxldGUgdmFyaWFibGUuCgkobWFpbik6IFJlbW92ZSBjYXNlICd1JyBpbiBhcmd1bWVudCBwYXJzZSBsb29wLAoJJ2luaGliaXRfcHJlZGVmcycgdmFyaWFibGUsIGFuZCB0aGUgY29kZSBibG9jayB0aGF0IHdvdWxkCglwcm9jZXNzIENQUF9QUkVERUZJTkVTLgoJKGluaXRpYWxpemVfYnVpbHRpbnMpOiBEb24ndCBkZWZpbmUgX19PQkpDX18sIHRoZSBkcml2ZXIgd2lsbAoJZG8gdGhhdC4KCgkqIGdjYy5jIChkZWZhdWx0X2NvbXBpbGVycyk6IFJlbW92ZSAtdW5kZWYgZnJvbSBhbGwgc3BlY3MgdGhhdAoJaW52b2tlIGEgQyBwcmVwcm9jZXNzb3IuCgkqIGNoL2xhbmctc3BlY3MuaDogTGlrZXdpc2UuCgkqIGNwL2xhbmctc3BlY3MuaDogTGlrZXdpc2UuCgkqIGYvbGFuZy1zcGVjcy5oOiBMaWtld2lzZS4KCSogb2JqYy9sYW5nLXNwZWNzLmg6IExpa2V3aXNlLgoKTW9uIEFwciAgNSAxMTo1NTozMSAxOTk5ICBEb25uIFRlcnJ5ICAoZG9ubkBpbnRlcml4LmNvbSkKCgkqIE1ha2VmaWxlLmluIChTVUJESVJfRkxBR1NfVE9fUEFTUyk6IEZpeCBtaXNhcHBsaWVkIHBhdGNoLgoKTW9uIEFwciAgNSAxMTo1MTozOCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBtNjhrLm1kIChtb3ZkZik6IEhpZGUgR1BSIHNvdXJjZXMgJiBkZXN0aW5hdGlvbnMgZnJvbSByZWdjbGFzcy4KCk1vbiBBcHIgIDUgMDk6NTQ6NDIgMTk5OSAgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpNb24gQXByICA1IDA1OjU1OjE1IDE5OTkgIEJydWNlIEtvcmIgIDxkZHNpbmMwOUBpeC5uZXRjb20uY29tPgoKCSogZml4aW5jbC50cGw6IFNlcGFyYXRlICItZSIgZnJvbSBpdHMgYXJndW1lbnQsIGEgbGEKCXRoZSBTYXQgQXByICAzIDE3OjA1OjEzIDE5OTkgZml4LgoJKiBnZW5maXhlczogRW5zdXJlIHRoYXQgdGhlIHNlcnZlciBzaGVsbCBpcyBfTk9UXyBjc2guCgpNb24gQXByICA1IDAzOjUyOjMwIDE5OTkgIEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKTW9uIEFwciAgNSAwNDo0NzoxNCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBpMzg2LmMgKHg4Nl9kb3VibGVfd2l0aF9hZGQpOiBUdXJuIG9mZiBmb3IgUGVudGl1bSBhbmQgUFByby4KCShzbWFsbF9zaGlmdF9vcGVyYW5kLCBvdXRwdXRfYXNobHNpMyk6IE5ldyBmdW5jdGlvbnMuCgkqIGkzODYuaCAoc21hbGxfc2hpZnRfb3BlcmFuZCwgb3V0cHV0X2FzaGxzaTMpOiBEZWNsYXJlLgoJKiBpMzg2Lm1kIChhc2hsc2kzKTogU2ltcGxpZnkgYWhsc2kzIHBhdHRlcm5zLiAgUmVtb3ZlIHNwbGl0dGVycwoJdGhhdCBhcmUgbm8gbG9uZ2VyIG5lZWRlZC4KClN1biBBcHIgIDQgMDQ6MDU6MDQgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogc3RtdC5jIChleHBhbmRfbG9vcF9lbmQpOiBXaGVuIGNvcHlpbmcgdGhlIGxvb3AgZXhpdCB0ZXN0LAoJZG8gbm90IHdhbGsgaW50byBhIG5lc3RlZCBsb29wLgoKU3VuIEFwciAgNCAwMDoxNDo1NCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBmaXhpbmMvaGFja3NoZWxsLnRwbDogU2tpcCBsaW5rcyB0byBkaXJlY3RvcmllcywgdG8gYXZvaWQKCXJlbW92aW5nIHRoZW0uCgkqIGZpeGluYy9pbmNsaGFjay50cGw6IExpa2V3aXNlLgoJKiBmaXhpbmMvZml4aW5jLnNoLCBmaXhpbmMvZml4aW5jbC54LCBmaXhpbmMvaW5jbGhhY2suc2g6IFJlYnVpbHQuCgpTYXQgQXByICAzIDIzOjQ2OjEzIDE5OTkgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIHJzNjAwMC5tZCAoYWRkc2kzLCBpb3JzaTMsIHhvcnNpMywgYWRkZGkzLCBpb3JkaTMsIHhvcmRpMywKCW1vdnNpX2dvdCwgbW92c2ksIG1vdnNmKTogVXNlIG5vX25ld19wc2V1ZG9zLgoJKiByczYwMDAuYyAocnM2MDAwX2dvdF9yZWdpc3Rlcik6IExpa2V3aXNlLgoJKG9mZnNldHRhYmxlX21lbV9vcGVyZWFuZCk6IFVzZSB8fCBub3QgfC4KClNhdCBBcHIgIDMgMjI6MDI6NTYgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogYWNjb25maWcuaCAoRU5BQkxFX0NIRUNLSU5HKTogUmVtb3ZlIHJlZHVuZGFudCAjdW5kZWYuCgkqIGNvbmZpZy5pbjogUmVidWlsdC4KClNhdCBBcHIgIDMgMTY6MjI6NTkgMTk5OSAgVG9zaGl5YXN1IE1vcml0YSAgKHRtQG5ldGNvbS5jb20pCgoJKiBnY2MudGV4aTogQWRkIGluZm8gb24gcmVnbW92ZSBwYXNzLgoKCSogcmVnbW92ZS5jIChmaXh1cF9tYXRjaF8xKTogQ29uc2lzdGVudGx5IGV2YWx1YXRlCglIQVZFX1BPU1RfSU5DUkVNRU5UIGFuZCBIQVZFX1BPU1RfREVDUkVNRU5ULgoKU2F0IEFwciAgMyAxOToyMTowNSAxOTk5ICBBbGV4YW5kcmUgT2xpdmEgIDxvbGl2YUBkY2MudW5pY2FtcC5icj4KCgkqIGNvbmZpZ3VyZS5pbiAoREVGQVVMVF9MSU5LRVIsIERFRkFVTFRfQVNTRU1CTEVSKTogVXNlIGdyZXAKCWluc3RlYWQgb2YgdGVzdCBhbmQgc2VkIHRvIGNoZWNrIHdoZXRoZXIgdGhleSdyZSBHTlUgcHJvZ3JhbXMuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KClNhdCBBcHIgIDMgMTc6NTc6MzUgMTk5OSAgQWxleGFuZHJlIE9saXZhICA8b2xpdmFAZGNjLnVuaWNhbXAuYnI+CgoJKiBNYWtlZmlsZS5pbiAoaW5zdGFsbC1oZWFkZXJzLXRhciwgaW5zdGFsbC1oZWFkZXJzLWNwaW8pOiBBdm9pZAoJcHJvYmxlbXMgd2l0aCBDRFBBVEguCglSZXBvcnRlZCBieSBSYWxmIENhbmlzIDxjYW5pc0BiaWdmb290LmNvbT4KClNhdCBBcHIgIDMgMTM6NTA6MTYgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZml4aW5jLng4Ni1saW51eC1nbnU6IERlbGV0ZWQuCgpTYXQgQXByICAzIDE3OjA1OjEzIDE5OTkgIEFsZXhhbmRyZSBPbGl2YSAgPG9saXZhQGRjYy51bmljYW1wLmJyPgoKCSogaW5jbGhhY2sudHBsOiBJbnNlcnQgc3BhY2VzIGJldHdlZW4gYHNlZCAtZScgYW5kICcuLi4nLgoJUmVwb3J0ZWQgYnkgS2F2ZWggUi4gR2hhemkgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgkqIGZpeGluYy9maXhpbmNsLnNoLCBmaXhpbmMvZml4aW5jbC54LCBmaXhpbmMvaW5jbGhhY2suc2g6IFJlZ2VuLgoKU2F0IEFwciAgMyAxNDo1NDo0NiAxOTk5ICBDcmFpZyBCdXJsZXkgIDxjcmFpZ0BqY2Itc2MuY29tPgoKCSogdHJlZS5kZWYgKEJMT0NLKTogRml4IHR5cG8gaW4gY29tbWVudC4KClNhdCBBcHIgIDMgMDA6NTM6MjkgMTk5OSAgSm9obiBXZWhsZSAgKGpvaG5AZmVpdGguY29tKQoKCSogaTM4Ni5tZCAoZmxvYXRzaXNmMiwgZmxvYXRkaXNmMiwgZmxvYXRzaWRmMiwgZmxvYXRkaWRmMiwKCWZsb2F0c2l4ZjIsIGZsb2F0ZGl4ZjIpOiBSZXdyaXRlIHVzaW5nIGEgc3BsaXR0ZXIuCgpGcmkgQXByICAyIDE3OjM2OjEwIDE5OTkgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvYXJtL2FybS5jIChhcm1fcHJpbnRfb3BlcmFuZCk6IFByaW50IGxhcmdlIGNvbnN0YW50cyBpbgoJaGV4IHJhdGhlciB0aGFuIGRlY2ltYWwuCgpGcmkgQXByICAyIDE3OjIzOjU4IDE5OTkgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBwcmludC1ydGwuYyAocHJpbnRfcnR4KTogVXNlIGJvdGggSE9TVF9XSURFX0lOVF9QUklOVF9ERUMKCWFuZCBIT1NUX1dJREVfSU5UX1BSSU5UX0hFWCB0byBkaXNwbGF5IGNvbnN0YW50cy4KCjE5OTktMDQtMDIgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkuY29sdW1iaWEuZWR1PgoKCSogY29uZmlnL2kzODYvaTM4Ni5oOiBEb2N1bWVudCBhbGwgVEFSR0VUX1NXSVRDSEVTIG9yIGFkZAoJZXhwbGljaXQgbnVsbCBpbml0aWFsaXplci4KCgkqIGNvbmZpZy9pMzg2L2N5Z3dpbi5oOiBEb2N1bWVudCBhbGwgU1VCVEFSR0VUX1NXSVRDSEVTLgoJKiBjb25maWcvaTM4Ni9kZ3V4Lmg6IExpa2V3aXNlLgoJKiBjb25maWcvaTM4Ni9vc2YxZWxmLmg6IExpa2V3aXNlLgoJKiBjb25maWcvaTM4Ni93aW4zMi5oOiBMaWtld2lzZS4KCSogY29uZmlnL2kzODYvb3Nmcm9zZS5oOiBMaWtld2lzZS4gIERyb3Agb2Jzb2xldGUgLW1uby1pZGVudCBvcHRpb24uCgpGcmkgQXByICAyIDE3OjQ5OjQ0IDE5OTkgIFRvc2hpeWFzdSBNb3JpdGEgIDx0bUBuZXRjb20uY29tPgoKCSogcmVnbW92ZS5jIChmaXh1cF9tYXRjaF8xKTogUmVtb3ZlIG5vdyB1c2VsZXNzIGlmICgwKS4KClNhdCBBcHIgIDMgMTE6Mzc6MjAgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogdG0udGV4aSAoVVNFX0xPQURfUE9TVF9ERUNSRU1FTlQsIFVTRV9MT0FEX1BSRV9ERUNSRU1FTlQsCglVU0VfU1RPUkVfUE9TVF9ERUNSRU1FTlQsIFVTRV9TVE9SRV9QUkVfREVDUkVNRU5UKTogRG9jdW1lbnQuCgkoVVNFX0xPQURfUE9TVF9JTkNSRU1FTlQsIFVTRV9MT0FEX1BSRV9JTkNSRU1FTlQsCglVU0VfU1RPUkVfUE9TVF9JTkNSRU1FTlQsIFVTRV9TVE9SRV9QUkVfSU5DUkVNRU5UKTogRml4IGRvY3VtZW50YXRpb24uCgoJKiBydGwuaAkoVVNFX0xPQURfUE9TVF9ERUNSRU1FTlQsIFVTRV9MT0FEX1BSRV9ERUNSRU1FTlQsCglVU0VfU1RPUkVfUE9TVF9ERUNSRU1FTlQsIFVTRV9TVE9SRV9QUkVfREVDUkVNRU5ULAoJVVNFX0xPQURfUE9TVF9JTkNSRU1FTlQsIFVTRV9MT0FEX1BSRV9JTkNSRU1FTlQsCglVU0VfU1RPUkVfUE9TVF9JTkNSRU1FTlQsIFVTRV9TVE9SRV9QUkVfSU5DUkVNRU5UKTogUHJvdmlkZSBkZWZhdWx0CglkZWZpbml0aW9uLgoKCSogZXhwci5jIChVU0VfTE9BRF9QT1NUX0lOQ1JFTUVOVCwgVVNFX0xPQURfUFJFX0lOQ1JFTUVOVCwKCVVTRV9TVE9SRV9QT1NUX0lOQ1JFTUVOVCwgVVNFX1NUT1JFX1BSRV9JTkNSRU1FTlQpOiBEZWxldGUgZGVmYXVsdAoJZGVmaW5pdGlvbi4KCkZyaSBBcHIgIDIgMTY6MDM6MDUgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZml4aW5jLmRndXgsIGZpeGluYy5pbnRlcml4LCBmaXhpbmMuaXJpeCwgZml4aW5jLnB0eDogRGVsZXRlZC4KCSogZml4aW5jLnNjbywgZml4aW5jLnN2cjQsIGZpeGluYy53aW5udCwgZml4aW5jLndyYXA6IExpa2V3aXNlLgoKRnJpIEFwciAgMiAxNTo0NjoyNSAxOTk5ICBEb25uIFRlcnJ5ICAoZG9ubkBpbnRlcml4LmNvbSkKCgkqIGNvbmZpZ3VyZS5pbjogU2V0IGFuZCBzdWJzdGl0dXRlIHF1b3RlZF9jY19zZXRfYnlfY29uZmlndXJlLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgkqIE1ha2VmaWxlLmluIChTVUJESVJfRkxBR1NfVE9fUEFTUyk6IEZpeCBxdW90aW5nIHByb2JsZW0gd2l0aCBgYC4KCkZyaSBBcHIgIDIgMTQ6MzU6NDUgMTk5OSAgU3RhbiBDb3ggIDxzY294QGN5Z251cy5jb20+CgoJKiBjb25maWcvaTM4Ni9jeWd3aW4uaCAoQ1BQX1NQRUMpOiBVc2UgbWluZ3dfaW5jbHVkZV9wYXRoIGluc3RlYWQKCW9mIGEgaGFyZGNvZGVkIHBhdGggZm9yIC1tbm8tY3lnd2luLgoJKG1pbmd3X2luY2x1ZGVfcGF0aCk6IE5ldy4KCjE5OTktMDQtMDIgIEpvc2VwaCBTLiBNeWVycyAgPGpzbTI4QGNhbS5hYy51az4KCgkqIHBkcDExLmM6IEluY2x1ZGUgInJlY29nLmgiLgoJKG91dHB1dF9mdW5jdGlvbl9wcm9sb2d1ZSk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGVzIGBucmVncycsIGBpJywKCWBvZmZzZXQnLgoJKG91dHB1dF9mdW5jdGlvbl9lcGlsb2d1ZSk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGVzCglgbWF5X2NhbGxfYWxsb2NhJywgYG5yZWdzJywgYHJlZ25vJywgYGFkanVzdF9mcCcuCgkob3V0cHV0X2FzY2lpKTogTWFyayBhcyByZXR1cm5pbmcgdm9pZC4KCShwcmludF9vcGVyYW5kX2FkZHJlc3M6IExpa2V3aXNlLgoJKHNpbXBsZV9tZW1vcnlfb3BlcmFuZCk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGVzIGBwbHVzMCcsIGBwbHVzMScsCglgb2Zmc2V0Jy4KCSogcGRwMTEuaDogRGVjbGFyZSBmdW5jdGlvbnMgYGFyaXRoX29wZXJhbmQnLAoJYGNvbnN0X2ltbWVkaWF0ZV9vcGVyYW5kJywgYGV4cGFuZF9zaGlmdF9vcGVyYW5kJywKCWBsZWdpdGltYXRlX2FkZHJlc3NfcCcsIGBub3RpY2VfdXBkYXRlX2NjX29uX3NldCcsIGBvdXRwdXRfYXNjaWknLAoJYG91dHB1dF9mdW5jdGlvbl9lcGlsb2d1ZScsIGBvdXRwdXRfZnVuY3Rpb25fcHJvbG9ndWUnLAoJYHByaW50X29wZXJhbmRfYWRkcmVzcycsIGByZWdpc3Rlcl9tb3ZlX2Nvc3QnLAoJYHNpbXBsZV9tZW1vcnlfb3BlcmFuZCcuCgkoSEFSRF9SRUdOT19NT0RFX09LKTogUGFyZW50aGVzaXplIGBSRUdOTycgYXJnLgoJKFJFR05PX1JFR19DTEFTUyk6IExpa2V3aXNlLgoJKiBwZHAxMS5tZDogQWRkIGV4cGxpY2l0IGBpbnQnIHRvIGBzdGF0aWMgY291bnQnIChpbiB0d28gcGxhY2VzKS4KCShhZGRoaTMpOiBBZGQgZXhwbGljaXQgYnJhY2VzIHRvIGF2b2lkIGFtYmlndW91cyBlbHNlLgoJKGFkZHFpMyk6IExpa2V3aXNlLgoJKGFzaGxoaTMpOiBMaWtld2lzZS4KCkZyaSBBcHIgIDIgMTQ6MTc6MTAgMTk5OSAgSmVycnkgSmFtZXMgIDxqZXJyeUBjcy51Y3NiLmVkdT4KCgkqIGdjYy9pbnZva2UudGV4aTogQWRkIGRvY3VtZW50YXRpb24gZm9yIGFkZGl0aW9uYWwgc3VwcG9ydGVkCglNSVBTIENQVSB0eXBlcywgb3B0aW9ucyAtbWlwczE2IGFuZCAtbWVudHJ5LCBhbmQgQUJJIGFuZCBJU0EKCWRlZmF1bHRzLgoKRnJpIEFwciAgMiAxNDoxMjowNiAxOTk5ICBKb2huIFdlaGxlICAoam9obkBmZWl0aC5jb20pCgoJKiBpMzg2Lm1kOiBEZWxldGUgZmxvYXRpbmcgcG9pbnQgY29tcGFyZSwgYWRkLCBzdWJ0cmFjdCwKCW11bHRpcGx5LCBhbmQgZGl2aWRlIHBhdHRlcm5zIHdoaWNoIGFsbG93ZWQgaW50ZWdlcgoJb3BlcmFuZHMuCgkqIGkzODYuYyAob3V0cHV0XzM4N19iaW5hcnlfb3ApOiBEZWxldGUgdW51c2VkIGNvZGUuCgkob3V0cHV0X2Zsb2F0X2NvbXBhcmUpOiBMaWtld2lzZS4KCkZyaSBBcHIgIDIgMTE6NTM6MzcgMTk5OSAgSm9obiBXZWhsZSAgKGpvaG5AZmVpdGguY29tKQoKCSogaTM4Ni5tZCAobW92c2YrMSwgbW92ZGYrMSwgbW92eGYrMSk6IFVwZGF0ZSBjb25zdHJhaW50cwoJc28gdGhhdCBTRUNPTkRBUllfTUVNT1JZX1JFTE9BRCBpcyB1c2VkLiAgUmVtb3ZlIGRlYWQgY29kZS4KCjE5OTktMDQtMDIgIEJydWNlIEtvcmIgIDxkZHNpbmMwOUBpeC5uZXRjb20uY29tPgoKCSogZml4aW5jL21rZml4aW5jLnNoOiBBZGRlZCBzdXBwb3J0IGZvciB4ODYtaW50ZXJpeC4KCSogZml4aW5jL2ZpeGluYy5pbnRlcml4OiBGaXhpbmNsdWRlcyBzY3JpcHQsIHNsaWdodCBjaGFuZ2VzCglmcm9tIC4vZml4aW5jLmludGVyaXguICBVbnRlc3RlZCAobmVlZHMgaW50ZXJpeCBib3gpLgoJKiBmaXhpbmMvaW5jbGhhY2suZGVmOgoJQ29tcGxldGUgdGhlIGNoYW5nZSB0byB0aGUgJ2ZpeGluYy50bXAnIGZpbGUuCglGaXhlZCByZWdleCBmb3IgZmluZGluZyBDKysgaGVhZGVycy4KCSogZml4aW5jbC54LCBmaXhpbmNsLnNoLCBpbmNsaGFjay5zaDogUmVnZW5lcmF0ZS4KCkZyaSBBcHIgIDIgMTE6MzY6MTIgMTk5OSAgSmFuIEh1Ymlja2EgIChodWJpY2thQHBhcnUuY2FzLmN6KQoKCSogaTM4Ni5jIChwcmludF9vcGVyYW5kX2FkZHJlc3MsIGNhc2UgUkVHKTogRG8gbm90IHVzZSBFU0kgYWRkcmVzc2luZwoJbW9kZSBmb3IgdGhlIEs2LgoKCSogaTM4Ni5jIChwcmludF9vcGVyYW5kX2FkZHJlc3MsIGNhc2UgTVVMVCk6IFVzZSBtb3JlIGVmZmljaWVudAoJZW5jb2RpbmcgKG11bHQgKHJlZykgKGNvbnN0X2ludCAyKSkuCgpUaHUgQXByICAxIDE3OjAxOjUwIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJTW92ZSBvdmVyIHBhdGNoIGZyb20gQmVybmQgU2NobWlkdCBmcm9tIEdDIGJyYW5jaDoKCSogZW1pdC1ydGwuYyAoZ2VuX3J0eF9DT05TVF9ET1VCTEUpOiBOZXcgZnVuY3Rpb24uCgkoZ2VuX3J0eCk6IENhbGwgaXQuICBUaWR5IGNhc2VzLgoJKiBydGwuaCAoZ2VuX3J0eF9DT05TVF9ET1VCTEUpOiBQcm90b3R5cGUgaXQuCgkqIGdlbmdlbnJ0bC5jOiBBZGQgY29tbWVudGFyeS4KCShzcGVjaWFsX3J0eCk6IEFsc28gbWF0Y2ggQ09OU1RfRE9VQkxFLgoJKGdlbmNvZGUpOiBFbWl0IGNhbGwgdG8gbWVtc2V0IGluc3RlYWQgb2YgYnplcm8uCgpGcmkgQXByICAyIDEyOjU4OjI2IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4Lm1kIChhc2hsaGkzLCBsc2hyaGkzLCBhc2hyaGkzKTogRm9yY2Ugb3BlcmFuZCAxCglpbnRvIGEgcmVnaXN0ZXIgaWYgc2hpZnQgY291bnQgbm90IGNvbnN0YW50LgoJKGFzaGxoaTNfcmVnLCBsc2hyaGkzX3JlZywgYXNocmhpM19yZWcpOiBFbnN1cmUgdGhhdCBvcGVyYW5kIDEKCWlzIGEgcmVnaXN0ZXIuCgpGcmkgQXByICAyIDEyOjE5OjE3IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4Lm1kICgqZGIpOiBFbmFibGUgcGF0dGVybiBpZiBUQVJHRVRfTE9PUF9VTlNJR05FRAoJaXMgbm9uLXplcm8uCgkobW92c3RycWlfc21hbGwsIG1vdnN0cnFpX2xhcmdlLCAqY21wc3RycWkpOiBBZGQgKyBtb2RpZmllciB0byBhZGRyZXNzCglyZWdpc3RlciBjb25zdHJhaW50cy4KCSgqbW92aGlfY2xvYmJlcisxKTogTW9kaWZ5IHNwbGl0dGVyIHBhdHRlcm4gdG8gaGFuZGxlIGRlc3RpbmF0aW9uCglyZWdpc3RlciB0aGF0IGlzIHVzZWQgaW4gdGhlIHNvdXJjZSBhZGRyZXNzLgoJKCp4b3JoaTNfY2xvYmJlcik6IFJlcGxhY2UgQU5EIHdpdGggWE9SIGluIGNhbGwgdG8gbGVnaXRpbWl6ZV9vcGVyYW5kcy4KCkZyaSBBcHIgIDIgMTI6MTY6MTUgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHguaDogQWRkZWQgbW9yZSBjb21tZW50cy4KCkZyaSBBcHIgIDIgMTE6NTg6MjIgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHguYyAoYzR4X2VtaXRfbW92ZV9zZXF1ZW5jZSk6IEZvcmNlIGludmFsaWQgUUltb2RlCgljb25zdGFudHMgaW50byBtZW1vcnkgaWYgd2UgZ2V0IGNhbGxlZCBkaXJlY3RseSBmcm9tIGdlbl9tb3ZlX2luc24KCXJhdGhlciB0aGFuIGVtaXRfbW92ZV9pbnNuLgoJKGM0eF9sZWdpdGltaXplX2FkZHJlc3MpOiBGaXggdXAgTEFCRUxfUkVGIGFkZHJlc3Nlcy4KClRodSBBcHIgIDEgMTI6MDQ6MDUgMTk5OSAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogZXhwci5jIChzdG9yZV9maWVsZCk6IFdoZW4gY2hlY2sgZGlyZWN0X3N0b3JlLCBhc3N1bWUgYWxsIGNvbXBsZXgKCW1vZGVzIGNhbiBiZSBkaXJlY3RseSBzdG9yZWQuCgoxOTk5LTA0LTAxICBCcnVjZSBLb3JiICA8ZGRzaW5jMDlAaXgubmV0Y29tLmNvbT4KCgkqIGZpeGluYy9nZW5maXhlczogTmV3IHNoZWxsIHNjcmlwdCB0aGF0IHJ1bnMgYXV0b2dlbgoJdG8gY3JlYXRlIHRoZSBnZW5lcmF0ZWQgZmlsZXMuCgoxOTk5LTA0LTAxICBNYW5mcmVkIEhvbGxzdGVpbiAgPG1hbmZyZWRAcy1kaXJla3RuZXQuZGU+CgoJKiBNYWtlZmlsZS5pbiAoY3BwbWFpbiQoZXhlZXh0KSk6IERlcGVuZCBvbiBpbnRsLm8uICBMaW5rIGluIGludGwuby4KClRodSBBcHIgIDEgMDM6NDg6MzQgMTk5OSAgSC5KLiBMdSAgKGhqbEBnbnUub3JnKQoKCSogaTM4Ni5jIChvdXRwdXRfZnBfY29uZGl0aW9uYWxfbW92ZSk6IEFib3J0IGZvciBMVCwgTEUsIEdFLCBhbmQgR1QKCXNpZ25lZCBpbnRlZ2VyIGNvbXBhcmlzb25zLgoKCSogaTM4Ni5jIChvdXRwdXRfaW50X2NvbmRpdGlvbmFsX21vdmUpOiBVc2UgImVudW0gcnR4X2NvZGUiIGZvciBjb2RlCgl0eXBlLgoKCSogaTM4Ni5jIChub3RpY2VfdXBkYXRlX2NjKTogTm8gbmVlZCB0byBjaGVjayB0aGUgSU5UIG1vZGUgZm9yCgljb25kaXRpb25hbCBtb3ZlcyBzaW5jZSBGTE9BVCBjb25kaXRpb25hbCBtb3ZlcyBkb24ndCBhZmZlY3QgY2MwLgoKVGh1IEFwciAgMSAwMjoxNzoxOCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBmaXhpbmMvaW5jbGhhY2suZGVmICh6enpfa2lfc3lzY2FsbHMsIHp6el90aW1lKTogRml4IHRyaWdnZXIKCXN0cmluZyB0byBvbmx5IG1hdGNoIG9uIGhwdXgxMS4KCSogZml4aW5jL2ZpeGluY2wueCwgZml4aW5jL2luY2xoYWNrLnNoLCBmaXhpbmMvZml4aW5jLnNoOiBSZWJ1aWx0LgoKVGh1IEFwciAgMSAwMTowOToyNyAxOTk5ICBBbGV4YW5kcmUgT2xpdmEgIDxvbGl2YUBkY2MudW5pY2FtcC5icj4KCgkqIGZpeGluYy9oYWNrc2hlbGwudHBsOiBDb21wbGV0ZSB0cmFuc2l0aW9uIHRvIGZpeGluYy50bXAuCgkqIGZpeGluYy9pbmNsaGFjay5zaDogUmVidWlsdC4KCgkqIGZpeGluYy9pbmNsaGFjay5kZWY6IEZpeCB0eXBvcyBpbiBjX2FzbS5oIGZpeC4KCSogZml4aW5jL2ZpeGluY2wueCwgZml4aW5jL2luY2xoYWNrLnNoLCBmaXhpbmMvZml4aW5jLnNoOiBSZWJ1aWx0LgoKV2VkIE1hciAzMSAxNzoyMDoxMSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IEFsbG93IGRicl9zY2hlZHVsZSB0byB3cml0ZSB0bwoJdGhlIGR1bXAgZmlsZSB0b28uCgpXZWQgTWFyIDMxIDEyOjMyOjQzIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBmbG93LmMgKGZpbmRfYmFzaWNfYmxvY2tzKTogTmV3IGFyZ3VtZW50IGBkb19jbGVhbnVwJy4KCUNvbmRpdGlvbmFsbHkgY2FsbCBkZWxldGVfdW5yZWFjaGFibGVfYmxvY2tzLgoJKGZyZWVfYmFzaWNfYmxvY2tfdmFycyk6IFplcm8gRU5UUlkvRVhJVCBkYXRhLgoJKGFsbG9jYXRlX2Zvcl9saWZlX2FuYWx5c2lzKTogS2lsbC4gIFNwbGl0IGludG8uLi4KCShhbGxvY2F0ZV9iYl9saWZlX2RhdGEsIGFsbG9jYXRlX3JlZ19saWZlX2RhdGEpOiAuLi4gbmV3IGZ1bmN0aW9ucy4KCShsaWZlX2FuYWx5c2lzXzEpOiBVcGRhdGUuCgkqIGdjc2UuYyAoZ2NzZV9tYWluKTogVXBkYXRlIGZpbmRfYmFzaWNfYmxvY2tzIGNhbGwuCgkqIHRvcGxldi5jIChyZXN0X29mX2NvbXBpbGF0aW9uKTogTGlrZXdpc2UuCgkqIHN0dXBpZC5jIChzdHVwaWRfbGlmZV9hbmFseXNpcyk6IFVwZGF0ZSBsaWZlIGRhdGEgY2FsbHMuCgkqIHJ0bC5oLCBvdXRwdXQuaDogVXBkYXRlIHByb3RvdHlwZXMuCgpXZWQgTWFyIDMxIDEyOjEwOjAwIDE5OTkgIEJydWNlIEtvcmIgIDxkZHNpbmMwOUBpeC5uZXRjb20uY29tPgoKCSogaW5jbGhhY2suZGVmIChzZXZlcmFsKTogQWRkZWQgc3BhY2VzIGluIHRlc3RzIHRvIGVuc3VyZQoJY29ycmVjdCBzaGVsbCBzeW50YXguICBBZGRlZCBjX2FzbS5oIGZpeCBmcm9tIGZpeGluY2x1ZGVzLgoJQWxzbyBjb3JyZWN0ZWQgdGhlIGNvcnJlY3RlZCBmaXggdG8gQysrIGNvbW1lbnRzIDotfQoKCSogaW5jbGhhY2sudHBsOiBDaGFuZ2VkIG1ldGhvZCBvZiB0cmF2ZXJzaW5nIHN5bWxpbmsgdHJlZXMKCXNvIHRoYXQgZmlsZSBuYW1lIG1hdGNoaW5nIHdpbGwgd29yayBjb3JyZWN0bHkuCgoJKiBmaXhpbmNsLmMsIGhhY2tzaGVsbC50cGw6IEZhbGxvdXQgZnJvbSBhYm92ZS4KCSogZml4aW5jbC54LCBpbmNsaGFjay5zaCwgZml4aW5jbC5zaDogUmVidWlsdC4KClR1ZSBNYXIgMzAgMTA6NDM6NDkgMTk5OSAgUGhpbGlwIEJsdW5kZWxsICA8cGJAbmV4dXMuY28udWs+CgoJKiBjb25maWcvYXJtL2FvdXQuaCAoREJYX0RFQlVHR0lOR19JTkZPKTogQXZvaWQgcmVkZWZpbml0aW9uIGlmCglkYnhlbGYuaCB3YXMgcHJldmlvdXNseSBpbmNsdWRlZC4KCShDUFBfQVBDU19QQ19ERUZBVUxUX1NQRUMpOiBObyBuZWVkIHRvIHVuZGVmaW5lLgoKCSogY29uZmlnL2FybS9saW51eC1lbGYuaCAoRlBfREVGQVVMVCk6IENvcnJlY3RseSBvdmVycmlkZSB0aGUKCWRlZmluaXRpb24gZnJvbSBhcm0uaC4KCldlZCBNYXIgMzEgMTA6MzM6MzcgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogTWFrZWZpbGUuaW4gKGMtZ3BlcmYuaCk6IEdlbmVyYXRlIHVzaW5nIGdwZXJmIGxhbmd1YWdlICdDJywgbm90CgknS1ItQycsIHNvIGdwZXJmIHVzZXMgdGhlIGBjb25zdCcga2V5d29yZCBvbiBzdHJpbmdzLgoKCSogYy1wYXJzZS5ncGVyZiAocmVzd29yZCk6IENvbnN0LWlmeSBhIGNoYXIqLgoKV2VkIE1hciAzMSAwMTo0OTozMSAxOTk5ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQHplbWJ1LmNvbT4KCgkqIHQtcnRlbXMgKExJTUlUU19IX1RFU1QsIExJQkdDQzJfSU5DTFVERVMpOiBEZWZpbmUuCgpXZWQgTWFyIDMxIDAwOjUwOjQ4IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHN5c3RlbS5oIChTVERFUlJfRklMRU5PKTogRml4IHR5cG8uCgoJKiBpbmNsaGFjay5kZWYgKGJvb2wpOiBBbHNvIGZpeCBib2d1cyBib29sIGluIGN1cnNlc19jb2xyL2N1cnNlcy5oLgoJKiBmaXhpbmNsLngsIGluY2xoYWNrLnNoLCBmaXhpbmNsLnNoOiBSZWJ1aWx0LgoKVHVlIE1hciAzMCAyMDo1MTo0MCAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogYWxpYXMuYyAoYWxpYXNfc2V0X2NvbXBhcmUpOiBSZW1vdmUuCgkocmVjb3JkX2FsaWFzX3N1YnNldCk6IFVzZSBzcGxheV90cmVlX2NvbXBhcmVfaW50cyBpbnN0ZWFkIG9mCglhbGlhc19zZXRfY29tcGFyZS4KCShpbml0X2FsaWFzX29uY2UpOiBMaWtld2lzZS4KCSogY3NlLmM6IEluY2x1ZGUgc3BsYXktdHJlZS5oLgoJKHJlZ19xdHkpOiBSZW1vdmUuCgkocmVnX3RpY2spOiBMaWtld2lzZS4KCShyZWdfdGFibGUpOiBMaWtld2lzZS4KCShjc2VfcmVnX2luZm8pOiBOZXcgc3RydWN0dXJlLgoJKGNzZV9yZWdfaW5mb19mcmVlX2xpc3QpOiBOZXcgdmFyaWFibGUuCgkoY3NlX3JlZ19pbmZvX3RyZWUpOiBMaWtld2lzZS4KCShjYWNoZWRfcmVnbm8pOiBMaWtld2lzZS4KCShjYWNoZWRfY3NlX3JlZ19pbmZvKTogTGlrZXdpc2UuCgkoYWxsX21pbnVzX29uZSk6IFJlbW92ZS4KCShjb25zZWNfaW50cyk6IExpa2V3aXNlLgoJKEdFVF9DU0VfUkVHX0lORk8pOiBOZXcgbWFjcm8uCgkoUkVHX1RJQ0spOiBMaWtld2lzZS4gIFVzZSB0aHJvdWdob3V0IGluc3RlYWQgb2YgcmVnX3RpY2suCgkoUkVHX0lOX1RBQkxFKTogTGlrZXdpc2UuICBVc2UgdGhyb3VnaG91dCBpbnN0ZWFkIG9mIHJlZ19pbl90YWJsZS4KCShSRUdfUVRZKTogTGlrZXdpc2UuICBVc2UgdGhyb3VnaG91dCBpbnN0ZWFkIG9mIHJlZ19xdHkuCgkoZ2V0X2NzZV9yZWdfaW5mbyk6IE5ldyBmdW5jdGlvbi4KCShmcmVlX2NzZV9yZWdfaW5mbyk6IExpa2V3aXNlLgoJKG5ld19iYXNpY19ibG9jayk6IFJlaW5pdGlhbGl6ZSBjc2VfcmVnX2luZm9fdHJlZSBpbnN0ZWFkIG9mCglyZWdfdGljaywgYWxsX21pbnVzX29uZSwgYW5kIGNvbnNlY19pbnRzLgoJKiBNYWtlZmlsZS5pbiAoY3NlLm8pOiBEZXBlbmQgb24gc3BsYXktdHJlZS5oCgpUdWUgTWFyIDMwIDEzOjE5OjM2IDE5OTkgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGxpYmdjYzIuYyAodGhyb3dfaGVscGVyKTogSnVzdCByZXR1cm4gdGhlIFNQIG9mZnNldCwgcmF0aGVyIHRoYW4KCWEgd2hvbGUgdWRhdGEuICBJbmNsdWRlIGFyZ3Nfc2l6ZSBpbiB0aGUgb2Zmc2V0LgoJKF9fdGhyb3csIF9fcmV0aHJvdyk6IEFkanVzdC4KClR1ZSBNYXIgMzAgMTE6Mzk6MjcgMTk5OSAgQ3JhaWcgQnVybGV5ICA8Y3JhaWdAamNiLXNjLmNvbT4KCgkqIGV4dGVuZC50ZXhpIChFeHRlbmRlZCBBc20pOiBEZWxldGUgc3B1cmlvdXMgYGInIGJlZm9yZQoJYEBlbmQgZXhhbXBsZScsIHdoaWNoIHdhcyBjb25mdXNpbmcgdGV4aTJodG1sLgoKVHVlIE1hciAzMCAwMDoyNjozNCAxOTk5ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkd2FyZjJvdXQuYyAob3V0cHV0X2xpbmVfaW5mbyk6IERvbid0IGVtaXQgcmVkdW5kYW50IGluZm8uCglEbyBzdGFydCBhIG5ldyByb3cgaWYgdGhlIGZpbGUgY2hhbmdlcyBhbmQgdGhlIGxpbmUgIyBkb2Vzbid0LgoKTW9uIE1hciAyOSAxNTo0ODozOSAxOTk5ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBpbnZva2UudGV4aSAoSW52b2tpbmcgRysrLCBDKysgRGlhbGVjdCBPcHRpb25zKTogVXBkYXRlLgoKTW9uIE1hciAyOSAxNTowNTozOSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKHN0YXJ0X2R5bmFtaWNfaGFuZGxlcik6IEZvcmNlIGptcF9idWYgYWRkcmVzcyB0bwoJYW5kIG9wZXJhbmQgYmVmb3JlIG1vdmluZyB0byBtZW1vcnkuCgpNb24gTWFyIDI5IDE1OjExOjEwIDE5OTkgIENyYWlnIEJ1cmxleSAgPGNyYWlnQGpjYi1zYy5jb20+CgoJKiBpbnZva2UudGV4aSAoQ29kZSBHZW4gT3B0aW9ucyk6IEF0dGVtcHQgdG8gY2xhcmlmeQoJLWZjaGVjay1tZW1vcnktdXNhZ2UuICBNaW5vciBlZGl0cyB0byAtZnByZWZpeC1mdW5jdGlvbi1uYW1lLgoKTW9uIE1hciAyOSAyMDo1Mjo0NyAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogbG9vcC5jIChtYXliZV9lbGltaW5hdGVfYml2KTogRm9yIGxpYmNhbGxzIHRoYXQgc2V0IGEgZ2l2LCBza2lwIHRvCgllbmQgb2YgbGliY2FsbC4KCk1vbiBNYXIgMjkgMjA6MzU6NDkgMTk5OSAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHNoLm1kIChtdWxzaTMpOiBUYWcgYW4gZXh0cmEgUkVHX0VRVUFMIG5vdGUgdG8gdGhlIG1pZGRsZSBpbnNuLgoKTW9uIE1hciAyOSAxMTo1MDozNCAxOTk5ICBKZXJyeSBRdWlubiAgPGpxdWlubkBub3J0ZWxuZXR3b3Jrcy5jb20+CgoJKiBwYS5oIChIQVZFX1BSRV9JTkNSRU1FTlQpOiBEaXNhYmxlIHdoZW4gb3B0aW1pemluZyBmb3IgYSBQQTgwMDAKCWNsYXNzIG1hY2hpbmUuCgkoSEFWRV9QUkVfREVDUkVNRU5ULCBIQVZFX1BPU1RfSU5DUkVNRU5UKTogTGlrZXdpc2UuCgkoSEFWRV9QT1NUX0RFQ1JFTUVOVCk6IExpa2V3aXNlLgoKTW9uIE1hciAyOSAwODoyNDo0MyAxOTk5ICBCcnVjZSBLb3JiICA8a29yYkBkYXRhZGVzaWduLmNvbT4KCgkqIGZpeGluYy9ta2ZpeGluYy5zaDogRml4IHBvcnRhYmlsaXR5IHByb2JsZW1zIHdpdGggb2xkIHNoZWxscy4KCgkqIGZpeGluYy9SRUFETUU6IFVwZGF0ZWQgZm9yIHJlbGVhc2UgYW5ub3VuY2VtZW50CgpTdW4gTWFyIDI4IDIwOjI2OjU1IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIHJlY29nLmggKGluc25fb3V0ZnVuLCBpbnNuX29wZXJhbmRfcHJlZGljYXRlKTogQWRkIHByb3RvdHlwZQoJYXJndW1lbnRzLgoKCSogcnRsLmggKG5vdGVfc3RvcmVzKTogTGlrZXdpc2UuCgoJKiBydGxhbmFsLmMgKG5vdGVfc3RvcmVzKTogTGlrZXdpc2UuCgpTdW4gTWFyIDI4IDE1OjM0OjI4IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiB2YXJhc20uYyAob3V0cHV0X2NvbnN0YW50X3Bvb2wpOiBBbHdheXMgbWFyayB0aGUgY29uc3RhbnQgcG9vbC4KClN1biBNYXIgMjggMTY6MDk6MDEgMTk5OSAgSmVycnkgUXVpbm4gIDxqcXVpbm5Abm9ydGVsbmV0d29ya3MuY29tPgoKCSogcGEubWQgKHBhNzEwMExDc2hpZnRtZW0sIHBhNzEwMExDYWx1KTogQ2hhbmdlIHNpbXVsdGFuZWl0eS4gIFVzZQoJc2hpZnQvbWVtIG9wcyBpbiBwYTcxMDBMQ2FsdS4KCgkqIHBhLmMgKHBhX2FkanVzdF9jb3N0KTogRG9uJ3QgZG8gY29zdCBhZGp1c3RtZW50cyBvbiBwYTgwMDAuCgkocGFfcmVvcmcpOiBEb24ndCBjYWxsIHBhX2NvbWJpbmVfaW5zdHJ1Y3Rpb25zIG9uIHBhODAwMC4KClN1biBNYXIgMjggMTU6Mjc6MjYgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcmVsb2FkMS5jIChyZWxvYWQpOiBSZW1vdmUgYWNjaWRlbnRhbCBjb2RlIGR1cGxpY2F0aW9uLgoKU3VuIE1hciAyOCAxMjoyMjoxMiAxOTk5ICBSb2JlcnQgTGlwZSAgKHJvYmVydGxpcGVAdXNhLm5ldCkKCgkqIGkzODYvc3lzdjUuaDogTmV3IGZpbGUgdG8gZGVzY3JpYmUgVW5peFdhcmU3L1NWUjUuCgkqIGNvbmZpZ3VyZS5pbiAoaT84Ni1Vbml4V2FyZTcqLXN5c3YpOiBVc2UgaXQuCgkqIGkzODYvdWRrLmg6IFVzZSBzeXN2NS5oLiAgTm93IHVzZXMgRHdhcmYtMi4KClN1biBNYXIgMjggMDE6MTU6MDQgMTk5OSAgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpTdW4gTWFyIDI4IDAwOjQ0OjI3IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHNkYm91dC5jIChzZGJvdXRfc3ltYm9sKTogRG8gbm90IGNhbGwgYnVpbGRfcG9pbnRlcl90eXBlLCBidWlsZAoJb25lIG9uIHRoZSBmbHkgYW5kIGRvIG5vdCBjYWNoZSB0aGUgcmVzdWx0LgoKCSogZ2NjLmNwcywgY3BwLmNwczogRGVsZXRlIHVud2FudGVkIGZpbGVzLgoKU2F0IE1hciAyNyAyMzozNzo0MCAxOTk5ICBKb2huIFdlaGxlICAoam9obkBmZWl0aC5jb20pCgoJKiBpMzg2Lm1kIChtb3ZkaWNjKzMsIG1vdmRpY2MrNCk6IFJld3JpdGUgdXNpbmcgc3BsaXRfZGkuCgkqIGkzODYuYyAob3V0cHV0X2ludF9jb25kaXRpb25hbF9tb3ZlKTogRGVsZXRlIHVudXNlZCBjb2RlLgoKU2F0IE1hciAyNyAyMToxNzozNiAxOTk5ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiByczYwMDAve2FpeDQxLmgsYWl4NDMuaH0gKEFTTV9DUFVfU1BFQyk6IEFkZCA2MDRlLgoKU2F0IE1hciAyNyAxNjoxMzo1MCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBmbG93LmMgKG1hcmtfdXNlZF9yZWdzKTogSW1wcm92ZSBoYW5kbGluZyBvZiBBU01zLgoKMTk5OS0wMy0yNiAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5jb2x1bWJpYS5lZHU+CgoJKiBNYWtlZmlsZS5pbiAoeGNwcCwgY3Bwc3BlYy5vKTogTmV3IHRhcmdldHMuCgkoQ1BQX0lOU1RBTExfTkFNRSk6IE5ldyBtYWNyby4KCShpbnN0YWxsLWNwcCk6IEluc3RhbGwgeGNwcC4gIFVzZSBDUFBfSU5TVEFMTF9OQU1FLgoJKGFsbC5idWlsZCwgc3RhcnQuZW5jYXApOiBCdWlsZCB4Y3BwLgoKCSogY3Bwc3BlYy5jOiBOZXcgZmlsZSwgaW1wbGVtZW50cyBhcmd1bWVudCBmaWx0ZXJpbmcgZm9yIGEKCXVzZXItdmlzaWJsZSBDIHByZXByb2Nlc3Nvci4KCSogY3BwLnNoOiBSZW1vdmVkLgoKRnJpIE1hciAyNiAyMDo0MTo0NiAxOTk5ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoc3RtcC1maXhpbmMpOiBVc2UgdG9vbGRpciBpbnN0ZWFkIG9mIGdjY190b29sZGlyLgoKRnJpIE1hciAyNiAxNjowMjozNyAxOTk5ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlndXJlLmluIChhcm0tKi12eHdvcmtzKik6IEp1c3QgaW5jbHVkZSBhcm0vdnhhcm0uaC4KCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgoJKiBjb25maWcvYXJtL3Z4YXJtLmg6IERlZmluZSBTVUJUQVJHRVRfQ1BVX0RFRkFVTFQgYmVmb3JlCglpbmNsdWRpbmcgYXJtL2NvZmYuaAoKMTk5OS0wMi0xNiAgU2NvdHQgQmFtYnJvdWdoICA8c2NvdHRiQGNvcmVsY29tcHV0ZXIuY29tPgoKCSogY29uZmlndXJlLmluIChhcm0qLSotbGludXgtZ251Kik6IFNldCB0aHJlYWRfZmlsZSB0byAncG9zaXgnIGlmCgktLWVuYWJsZS10aHJlYWRzWz17eWVzLHB0aHJlYWRzLHBvc2l4fV0gaXMgcGFzc2VkIGFzIGEgY29tbWFuZAoJbGluZSBwYXJhbWV0ZXIgdG8gY29uZmlndXJlLgoKCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgoKCSogZ2NjL2NvbmZpZy9hcm0vdC1saW51eCAoVEFSR0VUX0xJQkdDQzJfQ0ZMQUdTKTogSW5jbHVkZSAtZlBJQy4KCkZyaSBNYXIgMjYgMTk6NDI6MTkgMTk5OSAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGxvb3AuYyAoY29tYmluZV9naXZzKTogRml4IGluZGV4IGludG8gY2FuX2NvbWJpbmUgd2hlbiBkb2luZwoJYmVuZWZpdCBhZGp1c3RtZW50IGZvciByZW1haW5pbmcgZ2l2cyB3aGVuIGhhdmluZyBjb21iaW5lZCBhIGdpdi4KCkZyaSBNYXIgMjYgMTE6Mzg6MDEgMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9hcm0vdC1hcm0tZWxmIChFWFRSQV9NVUxUSUxJQl9QQVJUUyk6IERlZmluZS4KCkZyaSBNYXIgMjYgMTA6NDg6MjcgMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9hcm0vbGludXgtZWxmLmg6IEluY2x1ZGUgZGJ4ZWxmLmgKCkZyaSBNYXIgMjYgMTA6NDM6NDcgMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9zdnI0Lmg6IEluY2x1ZGUgbmV3IGhlYWRlciBmaWxlIGRieGVsZi5oLgoJKERCWF9ERUJVR0dJTkdfSU5GTyk6IFJlbW92ZSBkZWZpbml0aW9uLgoJKERCWF9VU0VfQklOQ0wpOiBSZW1vdmUgZGVmaW5pdGlvbi4KCShEQlhfQkxPQ0tTX0ZVTkNUSU9OX1JFTEFUSVZFKTogUmVtb3ZlIGRlZmluaXRpb24uCgkoQVNNX0lERU5USUZZX0dDQyk6IFJlbW92ZSBkZWZpbml0aW9uLgoJKEFTTV9JREVOVElGWV9HQ0NfQUZURVJfU09VUkNFKTogUmVtb3ZlIGRlZmluaXRpb24uCgkoQVNNX09VVFBVVF9TT1VSQ0VfTElORSk6IFJlbW92ZSBkZWZpbml0aW9uLgoJKERCWF9GVU5DVElPTl9GSVJTVCk6IFJlbW92ZSBkZWZpbml0aW9uLgoJKERCWF9PVVRQVVRfTUFJTl9TT1VSQ0VfRklMRV9FTkQpOiBSZW1vdmUgZGVmaW5pdGlvbi4KCgkqIGNvbmZpZy9lbGZvcy5oOiBJbmNsdWRlIG5ldyBoZWFkZXIgZmlsZSBkYnhlbGYuaC4KCShEQlhfREVCVUdHSU5HX0lORk8pOiBSZW1vdmUgZGVmaW5pdGlvbi4KCShEQlhfQkxPQ0tTX0ZVTkNUSU9OX1JFTEFUSVZFKTogUmVtb3ZlIGRlZmluaXRpb24uCgkoQVNNX0lERU5USUZZX0dDQyk6IFJlbW92ZSBkZWZpbml0aW9uLgoJKEFTTV9JREVOVElGWV9HQ0NfQUZURVJfU09VUkNFKTogUmVtb3ZlIGRlZmluaXRpb24uCgkoQVNNX09VVFBVVF9TT1VSQ0VfTElORSk6IFJlbW92ZSBkZWZpbml0aW9uLgoJKERCWF9GVU5DVElPTl9GSVJTVCk6IFJlbW92ZSBkZWZpbml0aW9uLgoKCSogY29uZmlnL2RieGVsZi5oOiBOZXcgaGVhZGVyIGZpbGUuCgkoREJYX0RFQlVHR0lOR19JTkZPKTogRGVmaW5lLgoJKERCWF9CTE9DS1NfRlVOQ1RJT05fUkVMQVRJVkUpOiBEZWZpbmUuCgkoREJYX0ZVTkNUSU9OX0ZJUlNUKTogRGVmaW5lLgoJKERCWF9VU0VfQklOQ0wpOiBEZWZpbmUuCgkoREJYX0NPTlRJTl9MRU5HVEgpOiBEZWZpbmUuCgkoQVNNX0lERU5USUZZX0dDQyk6IERlZmluZS4KCShBU01fSURFTlRJRllfR0NDX0FGVEVSX1NPVVJDRSk6IERlZmluZS4KCShBU01fT1VUUFVUX1NPVVJDRV9MSU5FKTogRGVmaW5lLgoJKERCWF9PVVRQVVRfTUFJTl9TT1VSQ0VfRklMRV9FTkQpOiBEZWZpbmUuCgpGcmkgTWFyIDI2IDAxOjU5OjE1IDE5OTkgICJDaGFybGVzIE0uIEhhbm51bSIgIDxyb290QGloYWNrLm5ldD4KCgkqIGZvbGQtY29uc3QuYyAoZm9sZF90cnV0aG9wKTogT3B0aW1pemUgYml0ZmllbGQgcmVmZXJlbmNlcyB3aXRoCglkaWZmZXJlbnQgbWFza3MgYXMgbG9uZyBhcyB0aGVpciBzaXplIGFuZCBiaXQgcG9zaXRpb24gYXJlIHRoZSBzYW1lLgoKCSogZm9sZC1jb25zdC5jIChmb2xkX3RydXRob3ApOiBCdWlsZCBhIHR5cGUgZm9yIGJvdGggdGhlIGxocyBhbmQKCXJocyBhbmQgdXNlIGl0IGFwcHJvcHJpYXRlbHkuCgoJKiBmb2xkLWNvbnN0LmMgKGZvbGRfdHJ1dGhvcCk6IE1hc2sgdGhlIGxocyBhbmQgcmhzIGFmdGVyIG1lcmdpbmcKCWFkamFjZW50IGJpdGZpZWxkIHJlZmVyZW5jZXMuCgoJKiBmb2xkLWNvbnN0LmMgKGZvbGRfdHJ1dGhvcCk6IFZlcmlmeSB0aGF0IHRoZSBsaHMgYW5kIHJocyBhcmUKCWluIHRoZSBzYW1lIGJpdCBwb3NpdGlvbiB3aGVuIG9wdGltaXppbmcgYml0ZmllbGQgcmVmZXJlbmNlcwoJd2hpY2ggaGF2ZSB0aGUgc2FtZSBtYXNrLgoKVGh1IE1hciAyNSAyMjo1MzoyNyAxOTk5ICBNYXJ0aW4gdm9uIEz2d2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogZ2NjLnRleGkgKENvcHkgQXNzaWdubWVudCk6IE5ldyBub2RlLgoKMTk5OS0wMy0yNSAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5jb2x1bWJpYS5lZHU+CgoJKiBnY2MuYzogQ29tcGlsZSB1bmNvbmRpdGlvbmFsbHkgYWxsIGNvZGUgZm9ybWVybHkgZGVwZW5kZW50CglvbiAjaWZkZWYgTEFOR19TUEVDSUZJQ19EUklWRVIuCgkqIGdjY3NwZWMuYzogTmV3IGZpbGUgd2l0aCBzdHViIGxhbmdfc3BlY2lmaWNfZHJpdmVyLAoJbGFuZ19zcGVjaWZpY19wcmVfbGluay4KCSogTWFrZWZpbGUuaW46IExpbmsgZ2Njc3BlYy5vIGludG8geGdjYy4gIEFkZCBydWxlIHRvIGNvbXBpbGUKClRodSBNYXIgMjUgMjE6MDg6MDIgMTk5OSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZ2NjLnRleGkgKFRlbXBvcmFyaWVzKTogVXBkYXRlLgoKVGh1IE1hciAyNSAxNjo1Mzo1MyAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogY29tYmluZS5jIChkaXN0cmlidXRlX25vdGVzKTogUGxhY2UgUkVHX0xBQkVMIGFsc28gd2hlcmUKCVJFR19FUVVBTCBpbmRpY2F0ZXMuCgpUaHUgTWFyIDI1IDEyOjQ2OjM3IDE5OTkgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGEyOWsvYTI5ay5oIChUQVJHRVRfU1dJVENIRVMpOiBBZGQgZG9jIHN0cmluZ3MuCgkqIGk5NjAvaTk2MC5oIChUQVJHRVRfU1dJVENIRVMpOiBBZGQgZG9jIHN0cmluZ3MuCgkqIGludm9rZS50ZXhpIChhMjlrKTogQWRkIGRvY3VtZW50YXRpb24gZm9yIC1tbm8tbXVsdG0gb3B0aW9uLgoKVGh1IE1hciAyNSAxNDowNDo1NCAxOTk5ICBBbmRyZXcgTWFjTGVvZCAgPGFtYWNsZW9kQGN5Z251cy5jb20+CgoJKiBydGwudGV4aSAoUlRYX0ZSQU1FX1JFTEFURURfUCk6IEFkZCBkb2N1bWVudGF0aW9uLgoJKiBydGwuaCAoc3RydWN0IHJ0eF9kZWYpOiBVcGRhdGUgY29tbWVudCBmb3IgZnJhbWVfcmVsYXRlZCBmaWVsZC4KCShzZXRfdW5pcXVlX3JlZ19ub3RlKTogRGVjbGFyZSBwcm90b3R5cGUuCgkqIGR3YXJmMm91dC5jIChkd2FyZjJvdXRfZnJhbWVfZGVidWdfZXhwcik6IFNwbGl0IG91dCBmcm9tCgknZHdhcmYyb3V0X2ZyYW1lX2RlYnVnJyB0byBoYW5kbGUgb25seSBleHByZXNzaW9ucywgYW5kIHByb2Nlc3MKCWNvbXBvbmVudCBwYXJ0cyBvZiBhIFBBUkFMTEVMIGV4cHJlc3Npb24uCgkoZHdhcmYyb3V0X2ZyYW1lX2RlYnVnKTogUHJvY2VzcyBpbnNucyBvbmx5LCBhbmQgY2FsbAoJbmV3IGZ1bmN0aW9uICdkd2FyZjJvdXRfZnJhbWVfZGVidWdfZXhwcicgZm9yIHBhdHRlcm5zLgoJKiBlbWl0LXJ0bC5jIChzZXRfdW5pcXVlX3JlZ19ub3RlKTogTmV3IGZ1bmN0aW9uIHRvIGFkZCBhIHJlZyBub3RlLAoJYnV0IGlmIHRoZXJlIGlzIGFuIGV4aXN0aW5nIG9uZSwgZGVsZXRlIGl0IGZpcnN0LgoJKiBleHBtZWQuYyAoZXhwYW5kX211bHQsIGV4cGFuZF9kaXZtb2QpOiBVc2Ugc2V0X3VuaXF1ZV9yZWdfbm90ZS4KCSogb3B0YWJzLmMgKGFkZF9lcXVhbF9ub3RlLCBleHBhbmRfYmlub3ApOiBVc2Ugc2V0X3VuaXF1ZV9yZWdfbm90ZS4KCShlbWl0X25vX2NvbmZsaWN0X2Jsb2NrLCBlbWl0X2xpYmNhbGxfYmxvY2spOiBVc2Ugc2V0X3VuaXF1ZV9yZWdfbm90ZS4KCShleHBhbmRfZml4KTogVXNlIHNldF91bmlxdWVfcmVnX25vdGUuCgpUaHUgTWFyIDI1IDExOjQ3OjQ5IDE5OTkgIEFydCBIYWFzICA8YWhhYXNAbmVvc29mdC5jb20+CgoJKiB0bGluay5jIChzeW1ib2xfaGFzaF9uZXdmdW5jKTogUmVtb3ZlIHJlZHVuZGFudCBjYWxsIHRvCgloYXNoX25ld2Z1bmMuCgkoZmlsZV9oYXNoX25ld2Z1bmMsIGRlbWFuZ2xlZF9oYXNoX25ld2Z1bmMpOiBMaWtld2lzZS4KClRodSBNYXIgMjUgMTA6MDU6NTYgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGkzODYuaCAoUFJFRkVSUkVEX1NUQUNLX0JPVU5EQVJZKTogU2V0IHRvIDEyOC4KCjE5OTktMDMtMjUgIFBoaWxpcCBCbHVuZGVsbCAgPHBiQG5leHVzLmNvLnVrPgoKCUJhc2VkIG9uIHBhdGNoIGZyb20gSmltIFN0dWR0ICA8amltQGZlZGVyYXRlZC5jb20+OgoJKiBjb25maWcvYXJtL2xpbnV4LWVsZi5oIChTVEFSVEZJTEVfU1BFQywgRU5ERklMRV9TUEVDKTogQ29weQoJZGVmaW5pdGlvbnMgZnJvbSBjb25maWcvbGludXguaC4KCShEQlhfQkxPQ0tTX0ZVTkNUSU9OX1JFTEFUSVZFKTogRGVmaW5lIHRvIDEuCgpUaHUgTWFyIDI1IDAyOjEyOjQyIDE5OTkgIEZpbm4gSGFrYW5zc29uICA8ZmlubkBheGlzLmNvbT4KCgkqIGxvb3AuYyAoc3RyZW5ndGhfcmVkdWNlKTogQ29ycmVjdCBhIGNvbW1lbnQuCgoJKiBydGwuaCAoTUVNX0NPUFlfQVRUUklCVVRFUyk6IFJlbW92ZSB1bm5lY2Vzc2FyeSBlbmRpbmcgYmFja3NsYXNoLgoKVGh1IE1hciAyNSAwMjowMjoxMyAxOTk5ICBBeGVsIFRoaW1tICA8QXhlbC5UaGltbUBwaHlzaWsuZnUtYmVybGluLmRlPgoKCSogTWFrZWZpbGUuaW4gKFJBTkxJQl9URVNUKTogSW1wcm92ZSB0ZXN0LgoKVGh1IE1hciAyNSAwMToxNTozMyAxOTk5ICBEb25uIFRlcnJ5ICA8ZG9ubkBpbnRlcml4LmNvbT4KCgkqIGNvbWJpbmUuYyAoZm9yY2VfdG9fbW9kZSwgY2FzZSBQTFVTKTogVXNlIHNpZ24gZXh0ZW5kZWQgbWFzawoJd2hlbiBtYXNraW5nIHRoZSBsb3cgYml0cyBvdXQgb2YgYSBjb25zdGFudC4KClR1ZSBNYXIgMjMgMTU6NDU6MjUgMTk5OSAgUmljaGFyZCBFYXJuc2hhdyAgKHJlYXJuc2hhQGFybS5jb20pCgkJCSAgSmVmZiBMYXcgIDxsYXdAY3lnbnVzLmNvbT4KCgkqIGZvbGQtY29uc3QuYyAobWFrZV9yYW5nZSk6IElmIG9yaWdfdHlwZSBpcyB1bnNldCwgc2V0IGl0IGFzIHNvb24KCWFzIHdlIGtub3cgdGhlIHR5cGUuICBSZW1vdmUgbm93IHVubmVjZXNzYXJ5IHNldCBvZiBvcmlnX3R5cGUgZm9yCgljb252ZXJzaW9ucy4KCldlZCBNYXIgMjQgMjM6Mjc6MjUgMTk5OSAgTWFyayBFbGJyZWNodCAgPHNub3diYWxsM0B1c2EubmV0PgoJCQkgIEplZmYgTGF3ICA8bGF3QGN5Z251cy5jb20+CgoJKiBzeXN0ZW0uaCAoU1RESU5fRklMRU5PKTogUHJvdmlkZSBkZWZhdWx0IGRlZmluaXRpb24gaWYgb25lIGlzIG5vdAoJcHJvdmlkZWQgYnkgdGhlIHN5c3RlbSBoZWFkZXIgZmlsZXMuCgkoU1RET1VUX0ZJTEVOTywgU1RERVJSX0ZJTEVOTyk6IExpa2V3aXNlLgoKCSogaTM4Ni94bS1kamdwcC5oIChDT0xMRUNUMl9IT1NUX0lOSVRJQUxJWkFUSU9OKTogTmV3IG1hY3JvLgoJKiBjb2xsZWN0Mi5jIChtYWluKTogVXNlIGl0LgoJKHBleGVjdXRlX3BpZCk6IE5ldyB2YXJpYWJsZS4gSG9sZHMgcmV0dXJuIHZhbHVlIGZyb20gY2FsbCB0byBwZXhlY3V0ZS4KCShjb2xsZWN0Ml9leGVjdXRlKTogUmV3b3JrIHRvIHVzZSBwZXhlY3V0ZSBpbnN0ZWFkIG9mIGZvcmsuCgkoY29sbGVjdDJfd2FpdCk6IFVzZSBwd2FpdCgpIGluc3RlYWQgb2Ygd2FpdCgpLgoKCSogaTM4Ni9kamdwcC5oOiBGaXggdHlwby4KCldlZCBNYXIgMjQgMjM6MjQ6MzAgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZml4aW5jL21rZml4aW5jLnNoOiBSZWNvZ25pemUgY3lnd2luKiBpbnN0ZWFkIG9mIG9ubHkKCWN5Z3dpbjMyLgoKV2VkIE1hciAyNCAxNTo0NDoxMiAxOTk5ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL20zMnIvbTMyci5jIChpbml0X2lkZW50cyk6IEFjY2VwdCBib3RoIE5BTUUgYW5kIF9fTkFNRV9fCgl2ZXJzaW9ucyBvZiBhdHRyaWJ1dGUgbmFtZXMgYW5kIHZhbHVlcy4KCShtMzJyX3ZhbGlkX21hY2hpbmVfZGVjbF9hdHRyaWJ1dGUpOiBMaWtld2lzZS4KCShtMzJyX2VuY29kZV9zZWN0aW9uX2luZm8pOiBMaWtld2lzZS4KCldlZCBNYXIgMjQgMjE6NDI6MTUgMTk5OSAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHJlbG9hZDEuYyAoY2hvb3NlX3JlbG9hZF9yZWdzKTogSWYgb3V0cHV0LXJlbG9hZGluZyBmb3IgYQoJc2ltcGxlIG1vdmUgaW5zbiwgdHJ5IHRvIGluaGVyaXQgYW4gZXF1aXZhbGVuY2UgZm9yIHRoZSBpbnB1dC4KCjE5OTktMDItMjQgIE1pa2UgU3R1bXAgIDxtcnNAd3JzLmNvbT4KCgkqIGFybS9hb3V0LmggKERCWF9PVVRQVVRfTUFJTl9TT1VSQ0VfRklMRU5BTUUpOiBGaXggcXVvdGluZy4KCjE5OTktMDMtMjQgIEppbSBCbGFuZHkgIDxqaW1iQHp3aW5nbGkuY3lnbnVzLmNvbT4KCgkqIGxpYmdjYzIuYyAoX19DVE9SX0xJU1RfXywgX19EVE9SX0xJU1RfXyk6IEluaXRpYWxpemUgb24gYWxsCglwbGF0Zm9ybXMuCgpXZWQgTWFyIDI0IDAxOjM1OjAxIDE5OTkgIEdlb2ZmIEtlYXRpbmcgIDxnZW9mZmtAb3plbWFpbC5jb20uYXU+CgoJKiBmb2xkLWNvbnN0LmMgKGZvbGQpOiBSZWNvZ25pemUgYSByb3RhdGUgYnkgYW4gdW5zaWduZWQgYW1vdW50LgoKVHVlIE1hciAyMyAyMzozMjoxNCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBwYS5tZCAocm90bHNpMyk6IE5ldyBleHBhbmRlci4gIFN5bnRoZXNpemUgYSB2YXJpYWJsZSByb3RhdGUKCWxlZnQgdXNpbmcgYSB2YXJpYWJsZSByb3RhdGUgcmlnaHQuICBQcm92aWRlIGFub255bW91cyBwYXR0ZXJuIGZvcgoJcm90YXRlIGxlZnQgYnkgYSBjb25zdGFudCB2YWx1ZS4KCgkqIGV4cHIuYyAoZXhwYW5kX2Fzc2lnbm1lbnQpOiBEbyBub3QgdHJ5IHRvIG9wdGltaXplIGEgYWdncmVnYXRlCglhZGRyZXNzIHdoaWNoIGhhcyBWT0lEbW9kZS4KClR1ZSBNYXIgMjMgMjI6NTE6NDggMTk5OSAgTXVtaXQgS2hhbiAgPGtoYW5AeHJheWxpdGgud2lzYy5lZHU+CgkJCSAgRG9ubiBUZXJyeSAgPGRvbm5AaW50ZXJpeC5jb20+CgoJKiBwcm90b2l6ZS5jIChhYnNwYXRoKTogUHJlc2VydmUgbXVsdGlwbGUgbGVhZGluZyBzbGFzaGVzIGZvcgoJX1dJTjMyIGFuZCBJbnRlcml4LgoKMTk5OS0wMS0yMyAgTWlrZSBTdHVtcCAgPG1yc0B3cnMuY29tPgoKCSogYXJtL3Z4YXJtLmg6IFNwbGl0IG91dCB2eFdvcmtzIHN1cHBvcnQgaW50byBzZXBhcmF0ZSBoZWFkZXJmaWxlCglhbmQgdnhpZnkuCgkqIGFybS9hcm0uYyAoY3B1X2RlZmF1bHRzKTogQWxsb3cgYXJtNzEwIGFzIGRlZmF1bHQuCgoJKiBjb25maWd1cmUuaW46IFNwbGl0IG91dCB2eFdvcmtzIHN1cHBvcnQgZm9yIEFybS4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKVHVlIE1hciAyMyAxMToyMDowMyAxOTk5ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIHRyZWUuYyAoZmlyc3RfcnRsX29wLCBoYXNfY2xlYW51cHMpOiBIYW5kbGUgR09UT19TVUJST1VUSU5FX0VYUFIuCgpUdWUgTWFyIDIzIDA5OjAwOjM5IDE5OTkgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvYXJtL3Jpc2NpeDEuaCAoU1VCVEFSR0VUX1NXSVRDSEVTKTogQWRkIGRvYyBzdHJpbmcuCgkqIGNvbmZpZy9hcm0vcmlzY2l4MS0xLmggKFNVQlRBUkdFVF9TV0lUQ0hFUyk6IEFkZCBkb2Mgc3RyaW5nLgoKVHVlIE1hciAyMyAwNzo1MDoyMCAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogZnVuY3Rpb24uYzogSW5jbHVkZSBoYXNoLmguCgkoaW5zbnNfZm9yX21lbV9lbnRyeSk6IE5ldyBzdHJ1Y3QuCgkocHV0X3JlZ19pbnRvX3N0YWNrKTogVGFrZSBhbiBvcHRpb25hbCBoYXNoLXRhYmxlIG1hcHBpbmcgTUVNcyB0bwoJdGhlIElOU05zIHRoYXQgdXNlIHRoZW0uCgkoZml4dXBfdmFyX3JlZnMpOiBMaWtld2lzZS4KCShwdXRfYWRkcmVzc29mX2ludG9fc3RhY2spOiBMaWtld2lzZS4KCShwdXJnZV9hZGRyZXNzb2ZfMSk6IExpa2V3aXNlLiAgS2VlcCB0aGUgaGFzaC10YWJsZSB1cCB0byBkYXRlIGlmCgl3ZSBhZGQgbmV3IGluc3RydWN0aW9ucy4KCShmaXh1cF92YXJfcmVmc19pbnNucyk6IFVzZSBpdCB0byBhdm9pZCBzZWFyY2hpbmcgdGhlIGVudGlyZQoJaW5zdHJ1Y3Rpb24gY2hhaW4uCgkoaW5zbnNfZm9yX21lbV9uZXdmdW5jKTogTmV3IGZ1bmN0aW9uLgoJKGluc25zX2Zvcl9tZW1fY29tcCk6IExpa2V3aXNlLgoJKGluc25zX2Zvcl9tZW1fd2Fsayk6IExpa2V3aXNlLgoJKGNvbXB1dGVfaW5zbnNfZm9yX21lbSk6IExpa2V3aXNlLgoJKHBvcF9mdW5jdGlvbl9jb250ZXh0X2Zyb20pOiBQYXNzIE5VTEwgZm9yIHRoZSBoYXNoLXRhYmxlLgoJKHB1dF92YXJfaW50b19zdGFjayk6IExpa2V3aXNlLgoJKGdlbl9tZW1fYWRkcmVzc29mKTogTGlrZXdpc2UuCgkoZmx1c2hfYWRkcmVzc29mKTogTGlrZXdpc2UuCgkocHVyZ2VfYWRkcmVzc29mKTogQ2FsbCBjb21wdXRlX2luc25zX2Zvcl9tZW0gdG8gcHJlLWNvbXB1dGUgdGhlCgloYXNoIHRhYmxlLgoJKiBNYWtlZmlsZS5pbiAoT0JKUyk6IEluY2x1ZGUgaGFzaC5vLgoJKGZ1bmN0aW9uLm8pOiBEZXBlbmQgb24gaGFzaC5oLgoKVHVlIE1hciAyMyAwMDozOToxNCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBpMzg2L29wZW5ic2QuaCAoVEFSR0VUX0RFRkFVTFQpOiBVc2Ugc3ltYm9saWMgbmFtZXMgaW5zdGVhZCBvZgoJbnVtYmVycy4KCSogaTM4Ni9uZXRic2QuaCwgaTM4Ni9mcmVlYnNkLmg6IExpa2V3aXNlLgoKCSogY3J0c3R1ZmYuYzogVXNlIEFOU0kgZnVuY3Rpb24gZGVmaW5pdGlvbnMuICBGaXggbWlub3Igd2hpdGVzcGFjZQoJcHJvYmxlbXMuCgoJKiBpMzg2L29wZW5ic2QuaCAoVEFSR0VUX0RFRkFVTFQpOiBEZWZpbmUuCgkqIGNvbmZpZ3VyZS5pbjogRG8gbm90IHNldCBUQVJHRVRfQ1BVX0RFRkFVTFQgZm9yIHg4NiBPcGVuQlNECgljb25maWd1cmF0aW9ucy4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKVHVlIE1hciAyMyAwMDozOToxMCAxOTk5ICBKb2huIFdlaGxlICAoam9obkBmZWl0aC5jb20pCgoJKiBpMzg2L2ZyZWVic2QuaCAoVEFSR0VUX0RFRkFVTFQpOiBEZWZpbmUgaW5zdGVhZAoJb2YgVEFSR0VUX0NQVV9ERUZBVUxULgoJKiBpMzg2L25ldGJzZC5oIChUQVJHRVRfREVGQVVMVCk6IExpa2V3aXNlLgoKTW9uIE1hciAyMiAyMzo1MjowMSAxOTk5ICBNdW1pdCBLaGFuICA8a2hhbkB4cmF5bGl0aC53aXNjLmVkdT4KCQkJICBEb25uIFRlcnJ5ICA8ZG9ubkBpbnRlcml4LmNvbT4KCgkqIHNkYm91dC5jIChzeW1zLmgpOiBEb24ndCBpbmNsdWRlIG9uIEludGVyaXguCgkqIHRvcGxldi5jIChtYWluKTogTm8gc2JyayBvbiBJbnRlcml4LgoKCSogY29uZmlndXJlLmluOiBBZGQgaTM4Ni1wYy1pbnRlcml4IHN1cHBvcnQuCgkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KCSogZml4aW5jLmludGVyaXg6IE5ldyBmaWxlLgoJKiBjb25maWcvaW50ZXJpeC5oOiBOZXcgZmlsZS4KCSogY29uZmlnL3gtaW50ZXJpeDogTmV3IGZpbGUuCgkqIGNvbmZpZy94bS1pbnRlcml4Lmg6IE5ldyBmaWxlLgoJKiBpMzg2L2ludGVyaXguaDogTmV3IGZpbGUuCgkqIGkzODYvaW50ZXJpeC5jOiBOZXcgZmlsZS4KCSogaTM4Ni90LWludGVyaXg6IE5ldyBmaWxlLgoKTW9uIE1hciAyMiAyMzo0MTo0OSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBpMzg2LmggKFBSRUZFUlJFRF9TVEFDS19CT1VOREFSWSk6IERlZmluZS4KCk1vbiBNYXIgMjIgMjM6NDE6MzEgMTk5OSAgSm9obiBXZWhsZSAgKGpvaG5AZmVpdGguY29tKQoKCSogaTM4Ni5jIChpeDg2X2NvbXB1dGVfZnJhbWVfc2l6ZSk6IE5ldyBmdW5jdGlvbi4KCShpeDg2X3Byb2xvZ3VlLCBpeDg2X2VwaWxvZ3VlKTogVXNlIGl0LgoJKiBpMzg2LmggKElOSVRJQUxfRUxJTUlOQVRJT05fT0ZGU0VUKTogTGlrZXdpc2UuCgkqIHJlbG9hZDEuYzogUHJvdmlkZSBkZWZhdWx0IGZvciBQUkVGRVJSRURfU1RBQ0tfQk9VTkRBUlkuCgpNb24gTWFyIDIyIDE4OjA2OjU5IDE5OTkgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIG1pcHMvbWlwcy5oIChUQVJHRVRfU1dJVENIRVMsIFRBUkdFVF9PUFRJT05TKTogQWRkIG9wdGlvbiBkb2MKCXN0cmluZ3MuCgkqIG1pcHMvYWJpNjQuaCAoU1VCVEFSR0VUX1RBUkdFVF9PUFRJT05TKTogTGlrZXdpc2UuCgpNb24gTWFyIDIyIDE2OjE4OjI3IDE5OTkgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvYXJtL2VsZi5oIChWQUxJRF9NQUNISU5FX0RFQ0xfQVRUUklCVVRFKTogRG8gbm90IGJvdGhlcgoJcGFzc2luZyBBVFRSSUJVVEVTIHRvIGFybV92YWxpZF9tYWNoaW5lX2RlY2xfYXR0cmlidXRlLgoKCSogY29uZmlnL2FybS9jb2ZmLmggKFZBTElEX01BQ0hJTkVfREVDTF9BVFRSSUJVVEUpOiBEbyBub3QgYm90aGVyCglwYXNzaW5nIEFUVFJJQlVURVMgdG8gYXJtX3ZhbGlkX21hY2hpbmVfZGVjbF9hdHRyaWJ1dGUuCgoJKiBjb25maWcvYXJtL2FybS5oIChERUZBVUxUX1JUWF9DT1NUUyk6IERvIG5vdCBib3RoZXIgcGFzc2luZwoJT1VURVJfQ09ERSB0byBhcm1fcnR4X2Nvc3RzIC0gaXQgaXMgbm90IHVzZWQuCgkoYXJtX2NvbXBhcmVfZnApOiBEZWxldGUgZGVjbGFyYXRpb24uCgkoRklOQUxfUFJFU0NBTl9JTlNOKTogRG8gbm90IGJvdGhlciBwYXNzaW5nIE9QVkVDIG9yIE5PUEVSQU5EUyB0bwoJYXJtX2ZpbmFsX3ByZXNjYW5faW5zbiAtIHRoZXkgYXJlIG5vdCB1c2VkLgoJKGNvbnN0X29rX2Zvcl9vcCk6IFJlbW92ZSBwcm90b3R5cGUuCgkoYXJtX3J0eF9jb3N0cyk6IEZpeCBwcm90b3R5cGUuCgkoYXJtX3ZhbGlkX21hY2hpbmVfZGVjbF9hdHRyaWJ1dGUpOiBGaXggcHJvdG90eXBlLgoJKGZpbmFsX3ByZXNjYW5faW5zbik6IEZpeCBwcm90b3R5cGUuCgoJKiBjb25maWcvYXJtL2FybS5tZDogUmVtb3ZlIHJlZmVyZW5jZXMgdG8gYXJtX2NvbXBhcmVfZnAuCgoJKiBjb25maWcvYXJtL2FybS5jIChhcm1fY29tcGFyZV9mcCk6IERlbGV0ZS4KCShjb25zdF9va19mb3Jfb3ApOiBNYWtlIGZ1bmN0aW9uIHN0YXRpYy4gIEFkZCBwcm90b3R5cGUuICBSZW1vdmUKCW1vZGUgcGFyYW1ldGVyIC0gaXQgaXMgdW51c2VkLgoJKGFybV9ydHhfY29zdHMpOiBSZW1vdmUgb3V0ZXJfY29kZSBwYXJhbWV0ZXIuCgkocmVsb2FkX21lbW9yeV9vcGVyYW5kKTogRGVjbGFyZSBtb2RlIHBhcmFtZXRlciB1bnVzZWQuCgkocG93ZXJfb2ZfdHdvX29wZXJhbmQpOiBEZWNsYXJlIG1vZGUgcGFyYW1ldGVyIHVudXNlZC4KCShlcXVhbGl0eV9vcGVyYXRvcik6IERlY2xhcmUgbW9kZSBwYXJhbWV0ZXIgdW51c2VkLgoJKGxvYWRfbXVsdGlwbGVfb3BlcmF0aW9uKTogRGVjbGFyZSBtb2RlIHBhcmFtZXRlciB1bnVzZWQuCgkoc3RvcmVfbXVsdGlwbGVfb3BlcmF0aW9uKTogRGVjbGFyZSBtb2RlIHBhcmFtZXRlciB1bnVzZWQuCgkobXVsdGlfcmVnaXN0ZXJfcHVzaCk6IERlY2xhcmUgbW9kZSBwYXJhbWV0ZXIgdW51c2VkLgoJKGFybV92YWxpZF9tYWNoaW5lX2RlY2xfYXR0cmlidXRlKTogUmVtb3ZlIGF0dHJpYnV0ZXMgcGFyYW1ldGVyIC0KCWl0IGlzIHVudXNlZC4KCShzZWxlY3RfZG9taW5hbmNlX2NjX21vZGUpOiBSZW1vdmUgb3AgcGFyYW1ldGVyIC0gaXQgaXMgdW51c2VkLgoJKGdlbl9jb21wYXJlX3JlZyk6IFJlbW92ZSBmcCBwYXJhbWV0ZXIgLSBpdCBpcyB1bnVzZWQuCgkoZmluYWxfcHJlc2Nhbl9pbnNuKTogUmVtb3ZlIG9wdmVjIGFuZCBub3BlcmFuZHMgcGFyYW1ldGVycyAtIHRoZXkKCWFyZSB1bnVzZWQuCgpNb24gTWFyIDIyIDE0OjM1OjI4IDE5OTkgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiB0bS50ZXhpIChNRF9TQ0hFRF9JTklUKTogQWRkIG1pc3NpbmcgY2xvc2luZyBwYXJlbnRoZXNpcy4KCk1vbiBNYXIgMjIgMjI6MjQ6MzAgMTk5OSAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHJlbG9hZDEuYyAocmVsb2FkX2FzX25lZWRlZCk6IFNldCByZWxvYWRfaXNfb3V0cHV0X3JlbG9hZCAvCglyZWxvYWRfaGFzX291dHB1dF9yZWxvYWQgZm9yIGF1dG9faW5jIGV4cHJlc3Npb25zIHRoYXQgY291bGQgYmUKCXJlbG9hZGVkLiAgQ2FsbCBmb3JnZXRfb2xkX3JlbG9hZHMgZm9yIFJFR19JTkMgbm90ZXMuCgpNb24gTWFyIDIyIDIxOjUxOjU3IDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBjc2UuYyAoY3NlX2luc24pOiBEb24ndCBjaGFuZ2UgdGhlIHJlc3VsdCByZWdpc3RlciBvZiBhIGxpYmNhbGwuCgpNb24gTWFyIDIyIDIxOjA4OjU5IDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBydGwuaCAoc2hhbGxvd19jb3B5X3J0eCk6IERlY2xhcmUuCgkqIHJ0bC5jIChzaGFsbG93X2NvcHlfcnR4KTogTmV3IGZ1bmN0aW9uLgoJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzX3RvcGxldik6IFVzZSBzaGFsbG93X2NvcHlfcnR4IGluc3RlYWQgb2YKCWNvcHlfcnR4LgoKTW9uIE1hciAyMiAxMDo0NDozMyAxOTk5ICBWbGFkaW1pciBNYWthcm92ICA8dm1ha2Fyb3ZAdG9mdS50by5jeWdudXMuY29tPgoKCSogY29uZmlnL2g4MzAwL2g4MzAwLm1kIChhZGp1c3RfbGVuZ3RoKTogTmV3IGF0dHJpYnV0ZS4KCShtb2RoaTMrMSwgYW5kc2kzKzEsIGlvcnNpMysxLCBleHR6disxLCBleHR6disyKTogQ2hhbmdlIGluc24KCWRlZmF1bHQgdmFsdWUgb2YgYXR0cmlidXRlICJhZGp1c3RfbGVuZ3RoIiBvbnRvICJubyIuCgoJKiBjb25maWcvaDgzMDAvaDgzMDAuYyAoaDgzMDBfYWRqdXN0X2luc25fbGVuZ3RoKTogQWRqdXN0CglsZW5ndGggb25seSBpZiB0aGUgYXR0cmlidXRlICJhZGp1c3RfbGVuZ3RoIiB2YWx1ZSBpcyAieWVzIi4KCVVzZSAwIGlmIHRoZSBzaGlmdCBpcyBuZWdhdGl2ZS4KCgkqIGZpbmFsLmMgKHNob3J0ZW5fYnJhbmNoZXMpOiBDaGVjayBpbnNuIGxlbmd0aCBhZnRlciBpdHMKCWFkanVzdGluZy4KClN1biBNYXIgMjEgMTc6MzM6NDggMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogaTg2MC5oIChUQVJHRVRfU1dJVENIRVMpOiBBZGQgZG9jdW1lbnRhdGlvbiBmb3IgZGVmYXVsdCBjYXNlLgoJKiBpODYwL3BhcmFnb24uaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIGRvY3VtZW50YXRpb24gZm9yIGRlZmF1bHQgY2FzZS4KCSogaTM3MC5oIChUQVJHRVRfU1dJVENIRVMpOiBBZGQgZG9jdW1lbnRhdGlvbiBmb3IgZGVmYXVsdCBjYXNlLgoJKiBmeDgwLmggKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCBkb2N1bWVudGF0aW9uIGZvciBkZWZhdWx0IGNhc2UuCgkqIGVseHNpLmggKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCBkb2N1bWVudGF0aW9uIGZvciBkZWZhdWx0IGNhc2UuCgkqIGNsaXBwZXIuaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIGRvY3VtZW50YXRpb24gZm9yIGRlZmF1bHQgY2FzZS4KCSogMTc1MGEuaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIGRvY3VtZW50YXRpb24gZm9yIGRlZmF1bHQgY2FzZS4KCSogcGEuaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIGRvY3VtZW50YXRpb24gZm9yIGRlZmF1bHQgY2FzZS4KCShUQVJHRVRfT1BUSU9OUyk6IExpa2V3aXNlIGZvciBkZWZhdWx0IGNhc2UuCgkqIG1uMTAzMDAuaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIGRvY3VtZW50YXRpb24gZm9yIGRlZmF1bHQgY2FzZS4KCSogaDgzMDAuaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIGRvY3VtZW50YXRpb24gZm9yIGRlZmF1bHQgY2FzZS4KCgkqIGdjc2UuYyAoZHVtcF9oYXNoX3RhYmxlKTogRml4IHdoaXRlc3BhY2UgaW4gZGVjbGFyYXRpb24uCgkoY29tcHV0ZV90cmFuc3BvdXQpOiBSZW5hbWVkIGZyb20gcHJlX2NvbXB1dGVfdHJhbnNwb3V0LgoJKGNvbXB1dGVfcHJlXyopOiBEZWxldGVkLgoJKHByZV9leHByX3JlYWNoZXNfaGVyZV9wKTogTmV3IGFyZ3VtZW50LCBDSEVDS19QUkVfQ09NUC4gIEFsbAoJY2FsbGVycyBjaGFuZ2VkLgoJKGluc2VydF9pbnNuX2VuZF9iYik6IFJlbmFtZWQgZnJvbSBwcmVfaW5zZXJ0X2luc24uCgkocHJlXyopOiBEZWxldGUgdW51c2VkIHZhcmlhYmxlcy4gIE9ubHkgbGVhdmUgbG9jYWwgcHJvcGVydGllcyBhbmQKCWdsb2JhbCByZWR1bmRhbnQvb3B0aW1hbCBjb21wdXRhdGlvbiBwb2ludHMuCgkoYWxsb2NfcHJlX21lbSwgZnJlZV9wcmVfbWVtKTogQ29ycmVzcG9uZGluZyBjaGFuZ2VzLgoJKGNvbXB1dGVfcHJlX2RhdGEpOiBTaW1wbGlmeSBhbmQgY2FsbCBwcmVfbGNtIHRvIHJ1biB0aGUgbGF6eQoJY29kZSBtb3Rpb24gZGF0YWZsb3cgYW5hbHlzaXMuCgkocHJlX2luc2VydCwgcHJlX2luc2VydF9jb3BpZXMsIHByZV9kZWxldGUpOiBSZXZhbXAgdG8gdXNlIExDTQoJYmFzZWQgcmVkdW5kYW50IGFuZCBvcHRpbWFsIGNvbXB1dGF0aW9uIHBvaW50cy4KCgkqIGJhc2ljLWJsb2NrLmggKHByZV9sY20sIHByZV9yZXZfbGNtKTogRGVjbGFyZS4KCgkqIHRvcGxldi5jIChtYWluKTogQSBkZWJ1ZyBvcHRpb24gd2l0aG91dCBhIGxldmVsIGRlZmF1bHRzIHRvCglsZXZlbCAyLgoKU3VuIE1hciAyMSAxMjoxMzowMSAxOTk5ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogZmxvdy5jIChjYW5fZGVsZXRlX2xhYmVsX3ApOiBEbyBub3QgYWxsb3cgdXNlciBzcGVjaWZpZWQKCWxhYmVscyB0byBiZSBkZWxldGVkLgoJKiBkd2FyZjJvdXQuYyAoZ2VuX2xhYmVsX2RpZSk6IEdlbmVyYXRlIGFkZHJlc3NlcyBmb3IgZGVsZXRlZAoJKHByb2dyYW1tZXIgc3BlY2lmaWVkKSBsYWJlbHMuCgkqIGR3YXJmb3V0LmMgKG91dHB1dF9sYWJlbF9kaWUpOiBHZW5lcmF0ZSBhZGRyZXNzZXMgZm9yIGRlbGV0ZWQKCShwcm9ncmFtbWVyIHNwZWNpZmllZCkgbGFiZWxzLgoKMTk5OS0wMy0yMSAgTWFuZnJlZCBIb2xsc3RlaW4gIDxtYW5mcmVkQHMtZGlyZWt0bmV0LmRlPgoKCSogTWFrZWZpbGUuaW4gKHhnY2MkKGV4ZWV4dCkpOiBBZGQgaW50bC5vIHRvIGxpc3Qgb2YgZmlsZXMgdG8gYmUKCWxpbmtlZCB3aXRoLgoKU3VuIE1hciAyMSAwMToxNTowMyAxOTk5ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KClNhdCBNYXIgMjAgMjI6MjY6MjMgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogc3BhcmMuaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIG51bGwgZGVzY3JpcHRpb24gdG8gZGVmYXVsdCBjYXNlLgoKU2F0IE1hciAyMCAyMTo0NjowNiAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjLWxleC5jICh5eWxleCk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgYGJ5dGVzJy4KCgkqIGZsb3cuYyAocHJpbnRfcnRsX3dpdGhfYmIpOiBDYXN0IHRoZSByZXR1cm4gdmFsdWUgb2YgYWxsb2NhLgoKCSogZnVuY3Rpb24uYyAoYXNzaWduX3Bhcm1zKTogV3JhcCB2YXJpYWJsZSBgdmFyYXJnc19zZXR1cCcgaW4KCW1hY3JvIFNFVFVQX0lOQ09NSU5HX1ZBUkFSR1MuCgkodGhyZWFkX3Byb2xvZ3VlX2FuZF9lcGlsb2d1ZV9pbnNucyk6IE1hcmsgcGFyYW1ldGVyIGBmJyB3aXRoCglBVFRSSUJVVEVfVU5VU0VELgoKCSogbG9jYWwtYWxsb2MuYyAobm9fZXF1aXYpOiBMaWtld2lzZSBmb3IgcGFyYW1ldGVyIGBzdG9yZScuCgoJKiBzY2hlZC5jIChzY2hlZHVsZV9pbnNucyk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGVzIGBpbnNuJyBhbmQgYG5leHQnLgoKCSogdGxpbmsuYyAoc3ltYm9sX2hhc2hfbmV3ZnVuYywgc3ltYm9sX2hhc2hfbG9va3VwLAoJZmlsZV9oYXNoX25ld2Z1bmMsIGZpbGVfaGFzaF9sb29rdXAsIGRlbWFuZ2xlZF9oYXNoX25ld2Z1bmMsCglkZW1hbmdsZWRfaGFzaF9sb29rdXAsIHN5bWJvbF9wdXNoLCBzeW1ib2xfcG9wLCBmaWxlX3B1c2gsCglmaWxlX3BvcCwgdGxpbmtfaW5pdCwgdGxpbmtfZXhlY3V0ZSwgZnJvYl9leHRlbnNpb24sCglvYnN0YWNrX2ZnZXRzLCB0ZmdldHMsIHBmZ2V0cywgZnJlYWRzeW0sIHJlYWRfcmVwb19maWxlLAoJbWF5YmVfdHdlYWssIHJlY29tcGlsZV9maWxlcywgcmVhZF9yZXBvX2ZpbGVzLAoJZGVtYW5nbGVfbmV3X3N5bWJvbHMsIHNjYW5fbGlua2VyX291dHB1dCk6IEFkZCBzdGF0aWMgcHJvdG90eXBlLgoKCShzeW1ib2xfaGFzaF9uZXdmdW5jLCBmaWxlX2hhc2hfbmV3ZnVuYywgZGVtYW5nbGVkX2hhc2hfbmV3ZnVuYyk6CglNYWtlIHRoZSB0aGlyZCBhcmd1bWVudCBhIGBoYXNoX3RhYmxlX2tleScuCgoJKiB0b3BsZXYuYyAoZGVidWdfc3RhcnRfc291cmNlX2ZpbGUpOiBNYXJrIHBhcmFtZXRlciBgZmlsZW5hbWUnCgl3aXRoIEFUVFJJQlVURV9VTlVTRUQuCgpTdW4gTWFyIDIxIDAyOjI4OjIxIDE5OTkgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmNzLnVuaS1kb3J0bXVuZC5kZT4KCgkqIHRtLnRleGkgKFZhcmFyZ3MpOiBEb24ndCBzcGxpdCBhcmd1bWVudCBvZiBAaXRlbSBhY3Jvc3MgbGluZXMuCgoJKiBpbnZva2UudGV4aTogRml4IHVzZSBvZiBAaXRlbSB2cyBAaXRlbXguCgpTdW4gTWFyIDIxIDA5OjU5OjU0IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4LmggKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCBudWxsIGRlc2NyaXB0aW9uIHRvCglkZWZhdWx0IGNhc2UuCgpTYXQgTWFyIDIwIDIzOjMzOjU0IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGxvb3AuYyAoY2hlY2tfZGJyYV9sb29wKTogRml4IGRlYnVnIG1lc3NhZ2UuCgpTYXQgTWFyIDIwIDE1OjU0OjM1IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4Lm1kIChkZWNyZW1lbnRfYW5kX2JyYW5jaF9vbl9jb3VudCk6IEVtaXQgcnB0Yl9lbmQKCXBhdHRlcm4gaW5zdGVhZCBvZiBkZWNyZW1lbnRfYW5kX2JyYW5jaF91bnRpbF96ZXJvIHBhdHRlcm4uCgpTYXQgTWFyIDIwIDExOjM5OjU4IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4LmggKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCBkb2N1bWVudGF0aW9uLgoJKiBjb25maWcvYzR4L2M0eC5oIChUQVJHRVRfT1BUSU9OUyk6IEFkZCBkb2N1bWVudGF0aW9uLgoKRnJpIE1hciAxOSAyMzoyNjoyOSAxOTk5ICBNYXJ0aW4gdm9uIEz2d2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogZXhwci5jIChleHBhbmRfZXhwcik6IEhhbmRsZSBFUlJPUl9NQVJLIG11Y2ggZWFybGllci4KCkZyaSBNYXIgMTkgMTU6Mjg6MzggMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY2NjcC5jIChjcmVhdGVfZGVmaW5pdGlvbik6IENhc3QgdG8gVV9DSEFSKiB3aGVuIGFzc2lnbmluZyB0byBvbmUuCgoJKiBjcHBmaWxlcy5jIChyZWFkX2FuZF9wcmVzY2FuKTogTGlrZXdpc2UuCglTdGFydCBhICNkZWZpbmUgaW4gY29sdW1uIDAuCgoJKiBjcHBsaWIuYyAoY3BwX2RlZmluZSk6IENhc3QgdG8gVV9DSEFSKiB3aGVuIGFzc2lnbmluZyB0byBvbmUuCgkoY3BwX3B1c2hfYnVmZmVyKTogTGlrZXdpc2UgZm9yIGNwcF9idWZmZXIqLgoJKGRvX2luY2x1ZGUpOiBDaGFuZ2UgdGhlIHR5cGUgb2YgYGZiZWcnIGFuZCBgZmVuZCcgdG8gdW5zaWduZWQgY2hhciouCgkoZG9fZW5kaWYpOiBDYXN0IHRvIGNoYXIqIHdoZW4gYXNzaWduaW5nIHRvIG9uZS4KCShkb19hc3NlcnQpOiBMaWtld2lzZS4KCShkb191bmFzc2VydCk6IExpa2V3aXNlLgoJKGNwcF9yZWFkX2NoZWNrX2Fzc2VydGlvbik6IENoYW5nZSB0aGUgdHlwZSBvZiBgbmFtZScgdG8gVV9DSEFSKi4KCURvbid0IGRvIHVubmVjZXNzYXJ5IGNhc3QgdG8gY2hhciogYW55bW9yZS4KCgkqIGdlbnJlY29nLmMgKG1ha2VfaW5zbl9zZXF1ZW5jZSk6IENhc3QgdG8gY2hhcioqIHdoZW4gYXNzaWduaW5nCgl0byBvbmUuICBDYXN0IHRoZSBmaXJzdCBhcmd1bWVudCBvZiBiemVybyB0byBQVFIuCgoJKiBsb29wLmMgKHN0cmVuZ3RoX3JlZHVjZSk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgYG5vdGUnLgoKCSogcmVsb2FkMS5jIChuZXdfaW5zbl9jaGFpbik6IENhc3QgdG8gc3RydWN0IGluc25fY2hhaW4qIHdoZW4KCWFzc2lnbmluZyB0byBvbmUuCgoJKiBydGwuYyAoY29weV9ydHgpOiBVc2UgbWVtY3B5IGluc3RlYWQgb2YgYmNvcHkuCgpGcmkgTWFyIDE5IDExOjE5OjMxIDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNhbGxzLmMgKGluaXRpYWxpemVfYXJndW1lbnRfaW5mb3JtYXRpb24pOiBNYXJrIHBhcmFtZXRlcnMKCWBudW1fYWN0dWFscycgYW5kIGBuX25hbWVkX2FyZ3MnIHdpdGggQVRUUklCVVRFX1VOVVNFRC4KCgkqIGRieG91dC5jIChkYnhvdXRfc3RhcnRfbmV3X3NvdXJjZV9maWxlKTogTGlrZXdpc2UgZm9yIHBhcmFtZXRlcgoJYGZpbGVuYW1lJy4KCShkYnhvdXRfZmluaXNoKTogTGlrZXdpc2UgZm9yIHBhcmFtZXRlcnMgYGZpbGUnIGFuZCBgZmlsZW5hbWUnLgoJKGRieG91dF9wcmVwYXJlX3N5bWJvbCk6IExpa2V3aXNlIGZvciBwYXJhbWV0ZXIgYGRlY2wnLgoJKGRieG91dF9iZWdpbl9mdW5jdGlvbik6IExpa2V3aXNlLgoKCSogZXhwbG93LmMgKGhhcmRfZnVuY3Rpb25fdmFsdWUpOiBMaWtld2lzZSBmb3IgcGFyYW1ldGVyIGBmdW5jJy4KCgkqIGZ1bmN0aW9uLmMgKGxvY2F0ZV9hbmRfcGFkX3Bhcm0pOiBMaWtld2lzZSBmb3IgcGFyYW1ldGVyIGBmbmRlY2wnLgoKCSogZXhwbWVkLmMgKGV4cGFuZF9kaXZtb2QpOiBPbWl0IHVudXNlZCBhcmd1bWVudCB0byBgZXhwYW5kX2FicycuCgkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBMaWtld2lzZS4KCSogZXhwci5oIChleHBhbmRfYWJzKTogRGVsZXRlIHVudXNlZCBhcmd1bWVudCBmcm9tIHByb3RvdHlwZS4KCSogb3B0YWJzLmMgKGV4cGFuZF9hYnMpOiBSZW1vdmUgdW51c2VkIHBhcmFtZXRlciBgdW5zaWduZWRwJy4KCgkqIHNkYm91dC5jIChzZGJvdXRfaW5pdCk6IE1hcmsgcGFyYW1ldGVyIGBzeW1zJyB3aXRoIEFUVFJJQlVURV9VTlVTRUQuCgkoc2Rib3V0X2VuZF9ibG9jayk6IExpa2V3aXNlIGZvciBwYXJhbWV0ZXIgYG4nLgoKCSogdG9wbGV2LmMgKGRlYnVnX2RlZmluZSk6IExpa2V3aXNlIGZvciBwYXJhbWV0ZXJzIGBsaW5lbm8nIGFuZAoJYGJ1ZmZlcicuCgkoZGVidWdfdW5kZWYpOiBMaWtld2lzZS4KCgkqIHZhcmFzbS5jIChuYW1lZF9zZWN0aW9uKTogTGlrZXdpc2UgZm9yIHBhcmFtZXRlciAncmVsb2MnLgoJKGFzc2VtYmxlX2V4dGVybmFsKTogTGlrZXdpc2UgZm9yIHBhcmFtZXRlciBgZGVjbCcuCgkoYXNzZW1ibGVfYWxpYXMpOiBMaWtld2lzZSBmb3IgcGFyYW1ldGVyIGB0YXJnZXQnLgoKRnJpIE1hciAxOSAwMTo1NDozMCAxOTk5ICBUaGVvZG9yZSBQYXBhZG9wb3VsbyAgPFRoZW9kb3JlLlBhcGFkb3BvdWxvQHNvcGhpYS5pbnJpYS5mcj4KCgkqIHRvcGxldi5jIChyZWFkX2ludGVncmFsX3BhcmFtZXRlcik6IENvbnN0aWZ5LiAgQmV0dGVyIGNvbnRyb2wgb2YKCWVycm9yIG1lc3NhZ2VzLgoJKG1haW4pOiBVc2UgcmVhZF9pbnRlZ3JhbF9wYXJhbWV0ZXIgdG8gc2V0IG9wdGltaXplLCBpZF9jbGFzaF9sZW4sCglsYXJnZXJfdGhhbl9zaXplLCBhbmQgdGhlIGRlYnVnZ2luZyBsZXZlbC4KCSogdG9wbGV2LmggKHJlYWRfaW50ZWdyYWxfcGFyYW1ldGVyKTogVXBkYXRlIHByb3RvdHlwZS4KCkZyaSBNYXIgMTkgMDE6NDI6MDUgMTk5OSAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5waHlzLmNvbHVtYmlhLmVkdT4KCgkqIHN5c3RlbS5oOiBVc2UgcHV0Y191bmxvY2tlZCwgZnB1dGNfdW5sb2NrZWQsIGFuZAoJZnB1dHNfdW5sb2NrZWQgb25seSBpZiBwdXRjX3VubG9ja2VkIGhhcyBhIHByb3RvdHlwZSBhbHJlYWR5LgoJUHJvdG90eXBlIGZwdXRzX3VubG9ja2VkIGlmIG5lY2Vzc2FyeS4KCSogY29uZmlndXJlLmluOiBDaGVjayBmb3IgcHJvdG90eXBlcyBvZiBwdXRjX3VubG9ja2VkIGFuZAoJZnB1dHNfdW5sb2NrZWQuCgkqIGFjY29uZmlnLmg6IFVwZGF0ZWQuCgkqIGNvbmZpZy5pbiwgY29uZmlndXJlOiBSZWJ1aWx0LgoKRnJpIE1hciAxOSAwMjo0NToxMiAxOTk5ICBBbGV4YW5kcmUgT2xpdmEgIDxvbGl2YUBkY2MudW5pY2FtcC5icj4KCgkqIE1ha2VmaWxlLmluIChJTlRMX1RBUkdFVFMpOiBOZXcgbWFjcm8uCgkoJChJTlRMX1RBUkdFVFMpKTogRGVwZW5kIG9uIGdlbmVyYXRlZCBzb3VyY2VzOyBkcm9wIGRlcGVuZGVuY2llcwoJb24gY3AvcGFyc2UuYyBhbmQgb2JqYy9vYmpjLXBhcnNlLmMuCgkoJChzcmNkaXIpL2NwL3BhcnNlLmMpOiBNb3ZlIHRvIGNwL01ha2UtbGFuZy5pbi4KCSogb2JqYy9NYWtlLWxhbmcuaW4gKCQoSU5UTF9UQVJHRVRTKSk6IERlcGVuZCBvbiBvYmpjL29iamMtcGFyc2UuYy4KClRodSBNYXIgMTggMjI6Mjg6NTMgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogaTg2MC5oIChUQVJHRVRfU1dJVENIRVMpOiBBZGQgZG9jdW1lbnRhdGlvbi4KCSogaTg2MC9wYXJhZ29uLmggKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCBkb2N1bWVudGF0aW9uLgoJKiBpMzcwLmggKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCBkb2N1bWVudGF0aW9uLgoJKiBmeDgwLmggKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCBkb2N1bWVudGF0aW9uLgoJKiBlbHhzaS5oIChUQVJHRVRfU1dJVENIRVMpOiBBZGQgZG9jdW1lbnRhdGlvbi4KCSogY2xpcHBlci5oIChUQVJHRVRfU1dJVENIRVMpOiBBZGQgZG9jdW1lbnRhdGlvbi4KCSogMTc1MGEuaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIGRvY3VtZW50YXRpb24uCgkqIHBhLmggKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCBkb2N1bWVudGF0aW9uLgoJKFRBUkdFVF9PUFRJT05TKTogTGlrZXdpc2UuCgkqIG1uMTAzMDAuaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIGRvY3VtZW50YXRpb24uCgkqIGg4MzAwLmggKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCBkb2N1bWVudGF0aW9uLgoKVGh1IE1hciAxOCAxNTo1ODoyNiAxOTk5ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogbG9vcC5jIChzdHJlbmd0aF9yZWR1Y2UpOiBEbyBub3QgcGVyZm9ybSBwc2V1ZG8gcmVwbGFjZW1lbnRzCglpZiB0aGUgbG9vcCBjb250YWlucyB2b2xhdGlsZSBtZW1vcnkgcmVmZXJlbmNlcy4KClRodSBNYXIgMTggMTk6MDk6NTAgMTk5OSAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHNfdG9wbGV2KTogV2hlbiBwcm9jZXNzaW5nIFggcmVjdXJzaXZlbHksCglkb24ndCBhbHRlciBpdCBkZXN0cnVjdGl2ZWx5IGV4Y2VwdCBieSBmaWxsaW5nIGluIGNvbnN0YW50cy4KClRodSBNYXIgMTggMTA6MTQ6MTggMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY2NjcC5jIChkZWZhdWx0X2luY2x1ZGUpOiBJbml0aWFsaXplIHN0cnVjdHVyZSBtZW1iZXJzLgoJKHBhc3NfdGhydV9kaXJlY3RpdmUpOiBDaGFuZ2UgdGhlIHR5cGUgb2YgJ2tleXdvcmRfbGVuZ3RoJyB0byBpbnQuCgkobWFpbik6IENhc3QgYGJpbmR0ZXh0ZG9tYWluJyBhbmQgYHRleHRkb21haW4nIHRvICh2b2lkKS4KCgkqIGNvbGxlY3QyLmMgKG1haW4pOiBMaWtld2lzZS4KCgkqIGNwcG1haW4uYyAobWFpbik6IExpa2V3aXNlLgoKCSogZ2NjLmMgKG1haW4pOiBMaWtld2lzZS4KCgkqIGdjb3YuYyAobWFpbik6IExpa2V3aXNlLgoKCSogcHJvdG9pemUuYyAobWFpbik6IExpa2V3aXNlLgoKCSogdG9wbGV2LmMgKG1haW4pOiBMaWtld2lzZS4KCjE5OTktMDMtMTggIEdhdmluIFJvbWlnLUtvY2ggIDxnYXZpbkBjeWdudXMuY29tPgoKCSogY29uZmlnL21pcHMvbWlwcy5jIChtaXBzX2V4cGxpY2l0X3R5cGVfc2l6ZV9zdHJpbmcpOiBDb3JyZWN0CglpdHMgdHlwZS4KClRodSBNYXIgMTggMDE6MjQ6MjUgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluOiBVc2UgImV4aXQgMSIsIG5vdCAiZXhpdCAoMSkiLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgpXZWQgTWFyIDE3IDIzOjE3OjQyIDE5OTkgIE1hcmsgS2V0dGVuaXMgIDxrZXR0ZW5pc0BnbnUub3JnPgoKCSogY29uZmlnL3QtZ251IChTWVNURU1fSEVBREVSX0RJUik6IE5ldyB2YXJpYWJsZS4gIFNldCB0bwoJYC9pbmNsdWRlJyBpbiBvcmRlciB0byBmaW5kIHRoZSBzeXN0ZW0ncyBsaW1pdHMuaC4KCldlZCBNYXIgMTcgMjM6MDA6MTggMTk5OSAgUm9iZXJ0IExpcGUgIDxyb2JlcnRsaXBlQHVzYS5uZXQ+CgoJKiBmaXhpbmMvZml4aW5jbC5jOiBJbmNsdWRlIGF1dG8taG9zdC5oIGluc3RlYWQgb2YgY29uZmlnLmguCgkqIGZpeGluYy9wcm9jb3Blbi5jOiBMaWtld2lzZS4KCSogZml4aW5jL3JlZ2V4LmM6IExpa2V3aXNlLgoJKiBmaXhpbmMvc2VydmVyLmM6IExpa2V3aXNlLgoKV2VkIE1hciAxNyAyMjo0NjoxMyAxOTk5ICBNYXJrIEVsYnJlY2h0ICA8c25vd2JhbGwzQHVzYS5uZXQuCgoJKiBjb25maWcvaTM4Ni9nbzMyLmg6IERlbGV0ZS4KCSogY29uZmlnL2kzODYvZGpncHAuaDogTmV3LiBSZW5hbWVkIGZyb20gZ28zMi5oLgoJQWRkZWQgLURESkdQUD0yIHRvIENQUF9QUkVERUZJTkVTLgoJKiBjb25maWcvaTM4Ni9nbzMyLXJ0ZW1zLmg6IERlbGV0ZS4KCSogY29uZmlnL2kzODYvZGpncHAtcnRlbXMuaDogTmV3LiBSZW5hbWVkIGZyb20gZ28zMi1ydGVtcy5oLgoJQWRkZWQgLURESkdQUD0yIHRvIENQUF9QUkVERUZJTkVTLgoJKiBjb25maWcvaTM4Ni94bS1nbzMyLmg6IERlbGV0ZS4KCSogY29uZmlnL2kzODYveG0tZGpncHAuaDogTmV3LiBSZW5hbWVkIGZyb20geG0tZ28zMi5oLgoJKiBjb25maWcvaTM4Ni94LWdvMzI6IERlbGV0ZS4KCSogY29uZmlnL2kzODYveC1kamdwcDogTmV3LiBSZW5hbWVkIGZyb20geC1nbzMyLgoJKiBjb25maWcvaTM4Ni90LWdvMzI6IERlbGV0ZS4KCSogY29uZmlnL2kzODYvdC1kamdwcDogTmV3LiBSZW5hbWVkIGZyb20gdC1nbzMyLgoJKiBjb25maWd1cmUuaW4ocGMtbXNkb3NkamdwcCk6IFNldCB4bV9maWxlIHRvIGkzODYveG0tZGpncHAuaC4KCVNldCB0bV9maWxlIHRvIGkzODYvZGpncHAuaC4gU2V0IHRtYWtlX2ZpbGUgdG8gaTM4Ni90LWRqZ3BwLgoJU2V0IHhtYWtlX2ZpbGUgdG8gaTM4Ni94LWRqZ3BwLgoJKCotZ28zMi1tc2RvcywgKi1nbzMyKik6IFJlbW92ZSBlbnRyaWVzLiAgV2FybiB0aGF0IEdPMzIvREpHUFAgVjEuWAoJaXMgbm93IHVuc3VwcG9ydGVkIGFuZCAqLXBjLW1zZG9zZGpncHAgZm9yIERKR1BQIFYyLlggc2hvdWxkIGJlCgl1c2VkIGluc3RlYWQuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KCgkqIGdjYy5jIChwcm9jZXNzX2NvbW1hbmQpOiBEdW1wIGxpbmtfY29tbWFuZF9zcGVjIHRvby4KCldlZCBNYXIgMTcgMjA6Mzg6MDggMTk5OSAgSmVycnkgUXVpbm4gIDxqcXVpbm5Abm9ydGVsbmV0d29ya3MuY29tPgoJCQkgIEplZmYgTGF3ICA8bGF3QGN5Z251cy5jb20+CgoJKiBwYS5tZDogQWRkIHJlYWwgUEE4MDAwIHNjaGVkdWxpbmcgaW5mb3JtYXRpb24uCgoJKiBwYS5oIChwcm9jZXNzb3JfdHlwZSk6IEFkZCBQUk9DRVNTT1JfODAwMCBzeW1ib2wuCgkoSVNTVUVfUkFURSk6IFJldmFtcCwgaW5jbHVkaW5nIFBBODAwMCBzdXBwb3J0LgoJKiBwYS5jIChvdmVycmlkZV9vcHRpb25zKTogQWRkIDgwMDAgYXMgLW1zY2hlZHVsZT0gb3B0aW9uLgoJRG8gbm90IGNhbGwgc3RyY21wIGlmIHBhX2NwdV9zdHJpbmcgaXMgbnVsbC4KCSogcGEubWQgKGF0dHIgY3B1KTogQWRkIDgwMDAuCgkqIGludm9rZS50ZXhpOiBBZGQgZG9jdW1lbnRhdGlvbiBmb3IgUEE4MDAwIHNjaGVkdWxpbmcuCgpXZWQgTWFyIDE3IDE4OjIwOjI0IDE5OTkgIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHJlZGhhdC5jb20+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMuaCAoVEFSR0VUX1NXSVRDSEVTLCBUQVJHRVRfT1BUSU9OUyk6CglBZGQgZGVzY3JpcHRpb25zLgoJKiBjb25maWcvc3BhcmMvc3A2NC1lbGYuaCAoU1VCVEFSR0VUX1NXSVRDSEVTKTogTGlrZXdpc2UuCgkqIGNvbmZpZy9zcGFyYy9zcGxldC5oIChTVUJUQVJHRVRfU1dJVENIRVMpOiBMaWtld2lzZS4KCldlZCBNYXIgMTcgMTQ6NTE6MTkgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGZsb3cuYyAoY29tcHV0ZV9pbW1lZGlhdGVfZG9taW5hdG9ycyk6IE5ldyBmdW5jdGlvbi4KCSogYmFzaWMtYmxvY2suaCAoY29tcHV0ZV9pbW1lZGlhdGVfZG9taW5hdG9ycyk6IERlY2xhcmUgaXQuCgoJKiBhbHBoYS5oIChIQVJEX1JFR05PX01PREVfT0spOiBBbGxvdyBvbmx5IDQgYW5kIDggYnl0ZSB1bml0IG1vZGVzCglpbiBGUCByZWdzLgoJKE1PREVTX1RJRUFCTEVfUCk6IERlZmluZSBhc3ltbWV0cmljbHkgd3J0IG1vZGVzIGlsbGVnYWwgaW4gRlAgcmVncy4KCldlZCBNYXIgMTcgMTQ6NDE6NDEgMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9hcm0vYW91dC5oIChBU01fR0VORVJBVEVfSU5URVJOQUxfTEFCRUwpOiBGaXggY29tcGlsZQoJdGltZSB3YXJuaW5nLgoJKiBjb25maWcvYXJtL2FybS5tZDogRml4IHZhcmlvdXMgY29tcGlsZSB0aW1lIHdhcm5pbmdzLgoJKiBjb25maWcvYXJtL2FybS5oOiBGaXggdmFyaW91cyBjb21waWxlIHRpbWUgd2FybmluZ3MuICBBZGQKCWZ1bmN0aW9uIHByb3RvdHlwZXMuCgkqIGNvbmZpZy9hcm0vYXJtLmM6IEZpeCB2YXJpb3VzIGNvbXBpbGUgdGltZSB3YXJuaW5ncy4KCShhcm1fb3ZlcnJpZGVfb3B0aW9ucyk6IFJlb3JnYW5pemUgdG8gc2VwYXJhdGUgdHVuaW5nIGZyb20KCXRhcmdldHRpbmcuCgkoYml0X2NvdW50KTogTmV3IGZ1bmN0aW9uOiBSZXR1cm4gYSBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIGJpdHMKCXNldCBpbiBhIHdvcmQuCgpXZWQgTWFyIDE3IDIxOjI5OjEyIDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiByZWxvYWQxLmMgKGVsaW1pbmF0ZV9yZWdzKTogRG9uJ3Qga2VlcCBSRUdfREVBRCBub3RlcyBhcm91bmQgZm9yCgl0aGluZ3MgdGhhdCB3ZXJlIGVsaW1pbmF0ZWQuCgpXZWQgTWFyIDE3IDEyOjE2OjI2IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBmdW5jdGlvbi5jIChmaXh1cF92YXJfcmVmc18xKTogRmlyc3QgdHJ5IG1vdmluZyB0aGUgZXhwcmVzc2lvbgoJZGlyZWN0bHkgaW50byBhIHJlZ2lzdGVyLiAgRG9uJ3Qgc2VwYXJhdGUgY2MwIHNldHRlciBhbmQgdXNlci4KCldlZCBNYXIgMTcgMTE6MjA6MjkgMTk5OSAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKCSogY3BwZmlsZXMuYyAoUElQRV9CVUYpOiAjZGVmaW5lIFBJUEVfQlVGIGlmIG5vdCBkZWZpbmVkIGFscmVhZHkuCgpXZWQgTWFyIDE3IDA5OjI1OjA2IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGMtbGV4LmM6IERvbid0IGluY2x1ZGUgc2V0am1wLmguCgkocGFyc2VfZmxvYXQpOiBOZXcgc3RhdGljIGZ1bmN0aW9uLgoJKHBmX2FyZ3MpOiBOZXcgc3RydWN0LgoJKHl5bGV4KTogVXNlIHRoZW0gaW4gY2FsbCB0byBgZG9fZmxvYXRfaGFuZGxlcicuCgoxOTk5LTAzLTE2ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5jcy51bmktZG9ydG11bmQuZGU+CgoJKiBjZXhwLnkgKHl5ZXJyb3IpOiBDYWxsIHZlcnJvciB0byBnZXQgYSB1c2VmdWwgZXJyb3IgbWVzc2FnZS4KCSogY2V4cC5jOiBSZWJ1aWx0LgoKCSogLmdkYmluaXQ6IE1vdmUgY29tbWFuZCB0byBwdXQgYnJlYWtwb2ludCBhdCBhYm9ydCB0byBlbmQgb2YgZmlsZQoJc28gdGhhdCBnZGIgZG9lcyBub3QgYmFpbCBvdXQgZWFybHkuCgpUdWUgTWFyIDE2IDE1OjMwOjE5IDE5OTkgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBydGwuaDogUmVuYW1lIHByb3RvdHlwZSBmb3IgZnJlZV9iYl9tZW1vcnkgdG8gZnJlZV9iYl9tZW0uCgpUdWUgTWFyIDE2IDIzOjQwOjA5IDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBzaC5tZCAobW92c2lfaSk6IE1vdmUgdC9yIGFsdGVybmF0aXZlIGFmdGVyIHIvckkgYWx0ZXJuYXRpdmUuCgpUdWUgTWFyIDE2IDEzOjQ0OjUwIDE5OTkgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIG1uMTAyMDAvbW4xMDIwMC5tZCAoYWRkc2kzLCBzdWJzaTMsIGFzaGxzaTMsIGxzaHJzaTMsIGFzaHJzaTMpOgoJRGVsZXRlIGVtaXRfbGlicmFyeV9jYWxsX3ZhbHVlIGRlY2xhcmF0aW9uLgoKMTk5OS0wMy0xNiAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5jb2x1bWJpYS5lZHU+CgoJKiBjcHBmaWxlcy5jIChyZWFkX2FuZF9wcmVzY2FuKTogTWFwIGJhY2tzbGFzaC1uZXdsaW5lIHRvICdccicKCSh3aGljaCBjYW5ub3Qgb3RoZXJ3aXNlIGFwcGVhciBpbiB0aGUgcHJvY2Vzc2VkIGJ1ZmZlcikgYW5kCgltb3ZlIGl0IG91dCBvZiB0b2tlbnMgdGhhdCBpdCBhcHBlYXJzIGluIHRoZSBtaWRkbGUgb2YuCglJbXByb3ZlIHBlcmZvcm1hbmNlLgoJKGZpbmRfcG9zaXRpb24pOiBOZXcgZnVuY3Rpb24uCgoJKiBjcHBsaWIuYzogXHIgKG9uZSBjaGFyYWN0ZXIpIGluZGljYXRlcyBiYWNrc2xhc2gKCW5ld2xpbmUsIG5vdCBcXFxuICh0d28gY2hhcmFjdGVycykuICBJdCBjYW5ub3QgYXBwZWFyIGluIHRoZQoJbWlkZGxlIG9mIGEgdG9rZW4uICBDYWxsIENQUF9CVU1QX0xJTkUgKHBmaWxlKSB3aGVuZXZlcgoJcGFyc2luZyBtb3ZlcyBwYXN0IFxuIG9yIFxyLiAgSW5jcmVtZW50IHBmaWxlLT5saW5lbm8gd2hlbmV2ZXIKCWEgXG4gaXMgcGxhY2VkIGludG8gdG9rZW5fYnVmZmVyLiAgT25seSBvbmUgbWFyayBjYW4gZXhpc3QgYXQKCWEgdGltZSwgYW5kIENQUF9CVU1QX0xJTkUgbXVzdCBub3QgYmUgdXNlZCB3aGlsZSBpdCBpcwoJYWN0aXZlLiAgSXQgaXMgYXV0b21hdGljYWxseSBjbGVhcmVkIGJ5IGNwcF9wb3BfYnVmZmVyIGFuZAoJcGFyc2VfZ290b19tYXJrLiAgXHIgaXMgbm90IGluIGlzX2hvcl9zcGFjZSBvciBpc19zcGFjZS4KCgkoTkVXTElORV9GSVgsIE5FV0xJTkVfRklYMSwgYWRqdXN0X3Bvc2l0aW9uLAoJdXBkYXRlX3Bvc2l0aW9uLCBjb3VudF9uZXdsaW5lcywgcGFyc2VfbW92ZV9tYXJrKTogUmVtb3ZlZC4KCShwYXJzZV9zdHJpbmcsIGNvcHlfY29tbWVudCk6IE5ldyBmdW5jdGlvbnMuCgkocGFyc2VfbmFtZSk6IFJldHVybnMgdm9pZC4KCShwYXJzZV9zZXRfbWFyaywgcGFyc2VfY2xlYXJfbWFyaywgcGFyc2VfZ290b19tYXJrKTogVGFrZSBvbmx5CglvbmUgYXJndW1lbnQsIGEgY3BwX3JlYWRlciAqLiAgQ2hhbmdlIGZvciBuZXcgbWFya2luZyBzY2hlbWUuCgkoc2tpcF9jb21tZW50KTogSGFuZGxlIENISUxMIGxpbmUgY29tbWVudHMgdG9vLiAgU2Vjb25kCglhcmd1bWVudCBpcyBub3cgZmlyc3QgY2hhcmFjdGVyIG9mIGNvbW1lbnQgbWFya2VyOyBhbGwgY2FsbGVycwoJY2hhbmdlZC4gIElzc3VlIGVycm9yIGZvciB1bnRlcm1pbmF0ZWQgYmxvY2sgY29tbWVudCBoZXJlLgoJKGNwcF9za2lwX2hzcGFjZSk6IFJlY29nbml6ZSBDSElMTCBjb21tZW50cy4KCShjb3B5X3Jlc3Rfb2ZfbGluZSk6IExpa2V3aXNlLiAgQ2FsbCBza2lwX2NvbW1lbnQgYW5kCglwYXJzZV9zdHJpbmcgZGlyZWN0bHksIGRvbid0IGdvIHRocm91Z2ggY3BwX2dldF90b2tlbi4gIEVtaXQKCSIvKiovIiBmb3IgYmxvY2sgY29tbWVudHMgaWYgLXRyYWRpdGlvbmFsIChjcmVhdGVfZGVmaW5pdGlvbgoJbmVlZHMgdGhpcykuCgkoZG9fZGVmaW5lKTogRG9uJ3QgcGxheSB3aXRoIHB1dF9vdXRfY29tbWVudHMuCgkoY3BwX3B1c2hfYnVmZmVyKTogSW5pdGlhbGl6ZSAtPm1hcmsgdG8gLTEuCgkoY3BwX2J1Zl9saW5lX2FuZF9jb2wpOiBKdXN0IHJlYWQgb3V0IHRoZSB2YWx1ZXMgaW4gdGhlIGJ1ZmZlcgoJc3RydWN0dXJlLgoJKG91dHB1dF9saW5lX2NvbW1hbmQpOiBVc2UgY3BwX2J1Zl9saW5lX2FuZF9jb2wuICBGaXgKCWZvcm1hdHRpbmcuICBSZW1vdmUgc3RhbGUgY29kZS4KCShjcHBfZ2V0X3Rva2VuKTogQnJlYWsgb3V0IHN0cmluZyBwYXJzaW5nIGNvZGUgdG8KCXBhcnNlX3N0cmluZy4gIFVzZSBza2lwX2NvbW1lbnQgZm9yIENISUxMIGNvbW1lbnRzIHRvby4gIFVzZQoJY29weV9jb21tZW50IGZvciBwdXRfb3V0X2NvbW1lbnRzIGluc3RlYWQgb2YgZGlua2luZyB3aXRoCgltYXJrcy4gIFJlbW92ZSBzdGFsZSBjb2RlLiAgRG9uJ3QgY2FsbCBvdXRwdXRfbGluZV9jb21tYW5kCgl1bmxlc3MgaXQncyBuZWNlc3NhcnkuCgoJKiBjcHBsaWIuaCAocGFyc2VfbWFya2VyKTogUmVtb3ZlZC4KCShzdHJ1Y3QgY3BwX2J1ZmZlcik6IExpbmVfYmFzZSBpcyBub3cgYSB1bnNpZ25lZCBjaGFyICo7IGFkZAoJYG1hcmsnIFtsb25nXSwgcmVtb3ZlIGBtYXJrcycgW3N0cnVjdCBwYXJzZV9tYXJrZXIgKl0uCgkocGFyc2Vfc2V0X21hcmssIHBhcnNlX2NsZWFyX21hcmssIHBhcnNlX2dvdG9fbWFyayk6IFVwZGF0ZQoJcHJvdG90eXBlcy4KCShDUFBfQlVNUF9MSU5FLCBDUFBfQlVNUF9CVUZGRVJfTElORSk6IE5ldyBtYWNyb3MuCgkqIGNwcGluaXQuYyAoaXNfaG9yX3NwYWNlLCBpc19zcGFjZSk6ICdccicgaXMgbm90IGNvbnNpZGVyZWQKCXdoaXRlc3BhY2UuCgkqIGNwcGV4cC5jIChjcHBfcGFyc2VfZXhwcmVzc2lvbik6IFVzZSBjcHBfc2tpcF9oc3BhY2UsIG5vdAoJU0tJUF9XSElURV9TUEFDRS4KCSogY3BwaGFzaC5jIChtYWNhcmcpOiBEaXNhYmxlIGxpbmUgY29tbWFuZHMgd2hpbGUgZXhwYW5kaW5nLgoKVHVlIE1hciAxNiAxMTozMDoxOSAxOTk5ICBHYXZpbiBSb21pZy1Lb2NoICA8Z2F2aW5AY3lnbnVzLmNvbT4KCgkqIGMtbGV4LmMgKHl5bGV4KSA6IFJlbW92ZSB3YXJuaW5nIGZvciBpbnRlZ2VyIGxpdGVyYWxzIGJlaW5nCglsYXJnZXIgdGhhbiB0aGUgbGFyZ2VzdCB0YXJnZXQgaW50LiAgQWRkIHdhcm5pbmcgZm9yIGludGVnZXIKCWxpdGVyYWwgYmVpbmcgbGFyZ2VyIHRoYW4gdGhhbiBpdHMgY2hvc2VuIHR5cGUuCgpUdWUgTWFyIDE2IDEwOjUzOjE3IDE5OTkgIEdhdmluIFJvbWlnLUtvY2ggIDxnYXZpbkBjeWdudXMuY29tPgoKCSogaW52b2tlLnRleGk6IEFkZCAtbWxvbmczMiBkb2N1bWVudGF0aW9uLgoJKiBjb25maWcvbWlwcy9taXBzLmggKG1pcHNfZXhwbGljaXRfdHlwZV9zaXplX3N0cmluZyk6IE5ldy4KCShUQVJHRVRfU1dJVENIRVMpOiBBZGQgJ2xvbmczMicuCgkoVEFSR0VUX09QVElPTlMpOiBBZGQgJ2V4cGxpY2l0LXR5cGUtc2l6ZScuCgkoQ0MxX1NQRUNTKTogU2V0IC1tZXhwbGljaXQtdHlwZS1zaXplLgoJKExPTkdfTUFYX1NQRUMpOiBDaGFuZ2UgYSB1c2Ugb2YgJ25vLWxvbmc2NCcgdG8gJ2xvbmczMicuCgkqIGNvbmZpZy9taXBzL2FiaTY0LmggKExPTkdfTUFYX1NQRUMpOiBTYW1lLiAgQWRkICdtYWJpPTMyJy4KCSogY29uZmlnL21pcHMvbWlwcy5jIChtaXBzX2V4cGxpY2l0X3R5cGVfc2l6ZV9zdHJpbmcpOiBOZXcuCgkob3ZlcnJpZGVfb3B0aW9ucyk6IFVzZSBpdC4KCSogY29uZmlnL21pcHMvb3Nmcm9zZS5oIChDQzFfU1BFQ1MpOiBTZXQgLW1leHBsaWNpdC10eXBlLXNpemUuCgoJKiBjb25maWcvbWlwcy9taXBzLmggKFNVQlRBUkdFVF9DUFBfU0laRV9TUEVDKToKCVBvaW50ZXIgc2l6ZSBub3cgZGVwZW5kcyBvbiBib3RoIHNpemUgbG9uZ3MgYW5kIHNpemUgb2YgR1AKCXJlZ2lzdGVycy4KClR1ZSBNYXIgMTYgMTA6MjI6MjIgMTk5OSAgR2F2aW4gUm9taWctS29jaCAgPGdhdmluQGN5Z251cy5jb20+CgoJKiBjb25maWcvbWlwcy9pcmlzLmggKENUT1JTX1NFQ1RJT05fQVNNX09QLERUT1JTX1NFQ1RJT05fQVNNX09QLAoJZHRvcnNfc2VjdGlvbik6IFVzZSBQbW9kZSA9PSBESW1vZGUgcmF0aGVyIHRoYW4gVEFSR0VUX0xPTkc2NC4KCSogY29uZmlnL21pcHMvbWlwcy5jIChvdmVycmlkZV9vcHRpb25zKTogQWxsb3cgLW1sb25nNjQgYW5kCgktbWludDY0IHdpdGggLW1pcHMyIG9yIGxlc3MuCgkqIGNvbmZpZy9taXBzL21pcHMuaCAoTUFTS19MT05HNjQpOiBGaXggY29tbWVudC4KCShQT0lOVEVSX1NJWkUpOiBVc2UgUG1vZGUgPT0gREltb2RlIHJhdGhlciB0aGFuIFRBUkdFVF9MT05HNjQuCgkoUG1vZGUpOiBNYWtlIFBtb2RlIHRoZSBzbWFsbGVyIG9mIGxvbmdzIG9yIGdwIHJlZ2lzdGVycy4KCSogaW52b2tlLnRleGk6IE5vdGUgdGhlIG5ldyBzaXplIGZvciBwb2ludGVycy4KCk1vbiBNYXIgMTUgMjI6NDU6MjUgMTk5OSAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogcnM2MDAwLmggKEFTTV9PVVRQVVRfe0RPVUJMRSxGTE9BVH0pOiBBbHdheXMgZ2VuZXJhdGUgSUVFRSA3NTQKCWJpdC1wYXR0ZXJuIGRpcmVjdGx5LgoJKEFTTV9PVVRQVVRfUkVHX3tQVVNILFBPUH0pOiBEZWxldGUuCgkqIHJzNjAwMC5jIChmaXJzdF9yZWdfdG9fc2F2ZSk6IElmIHByb2ZpbGluZyBhbmQgY29udGV4dCBuZWVkZWQsCglhbGxvY2F0ZSBhIHJlZyB0byBzYXZlIHN0YXRpYyBjaGFpbiBmb3IgYWxsIEFCSXMuICBGb3IgQUlYCglwcm9maWxpbmcsIGNhbGN1bGF0ZSBwYXJhbWV0ZXIgcmVnaXN0ZXJzIHRvIHNhdmUgYmFzZWQgb24gbmVlZC4KCShvdXRwdXRfZnVuY3Rpb25fcHJvZmlsZXIpOiBTYXZlIGFuZCByZXN0b3JlIHN0YXRpYyBjaGFpbiBhcm91bmQKCXByb2ZpbGUgY2FsbCBmb3IgYWxsIEFCSXMuCgoxOTk5LTAzLTE1ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLmNvbHVtYmlhLmVkdT4KCgkqIGNwcGluaXQuYzogSW5zdGVhZCBvZiBvbmUgcGVuZGluZyBsaXN0LCBrZWVwIHNlcGFyYXRlIGxpc3RzCglmb3IgZWFjaCBjYXRlZ29yeSBvZiBwZW5kaW5nIG9wdGlvbjogLUQvLVUsIC1BLCAtaW5jbHVkZSwKCS1pbWFjcm9zLiAgTW92ZSB0aGUgZm91ciBwYXJ0aWFsIGluY2x1ZGUtcGF0aCBsaXN0cyBpbnRvIHRoZQoJcGVuZGluZyBibG9jay4gIFVzZSBoZWFkIGFuZCB0YWlsIHBvaW50ZXJzIHNvIHdlIGRvbid0IGV2ZXIKCWhhdmUgdG8gcmV2ZXJzZSB0aGUgbGlzdHMuCgoJKGNwcF9zdGFydF9yZWFkKTogQnJlYWsgb3V0IGJsb2NrcyBvZiBjb2RlIHRvIHRoZWlyIG93bgoJZnVuY3Rpb25zOiBpbnN0YWxsX3ByZWRlZnMgYW5kIGluaXRpYWxpemVfZGVwZW5kZW5jeV9vdXRwdXQuCglVc2UgcGF0aF9pbmNsdWRlIGZvciBDX0lOQ0xVREVfUEFUSCBhbmQgZnJpZW5kcyBhcyB3ZWxsIGFzCglDUEFUSC4gIFJlbW92ZSBpbmNsdWRlX2RlZmF1bHRzIGd1bmsuICBXYXJuIGFib3V0IHRoZQoJY29tYmluYXRpb24gb2YgLWxhbmctY2hpbGwgYW5kIC10cmlncmFwaHMuICBPcHRpbWl6ZSBzdHJpbmcKCWJhc2hpbmcuICBXYWxrIGVhY2ggcGVuZGluZyBsaXN0IG9uY2UsIGRlYWxsb2NhdGluZyBhcyB3ZSBnby4KCgkoYXBwZW5kX2luY2x1ZGVfY2hhaW4pOiBCcm91Z2h0IG92ZXIgZnJvbSBjcHBmaWxlcy5jLiAgTWFyawoJZGlycyBhcyBzeXN0ZW0gaW5jbHVkZSBkaXJzIGlmIGFuZCBvbmx5IGlmIGFwcGVuZGluZyB0bwoJc3lzdGVtIGluY2x1ZGUgcGF0aC4gSWYgb3B0cy0+dmVyYm9zZSwgcHJpbnQgYSBub3RpY2Ugd2hlbiBhCglkaXIgaXMgZHJvcHBlZCBmcm9tIHRoZSBpbmNsdWRlIHBhdGggYmVjYXVzZSBpdCBkb2Vzbid0CglleGlzdC4gIEZpeCBtZW1vcnkgbGVhazogdGhpcyBmdW5jdGlvbiBpcyBub3Qgc3VwcG9zZWQgdG8gY29weQoJaXRzIERJUiBhcmd1bWVudC4KCgkobnJldmVyc2VfcGVuZGluZywgcHVzaF9wZW5kaW5nKTogUmVtb3ZlZC4KCShBUFBFTkQpOiBOZXcgbWFjcm8gZm9yIGFkZGluZyB0byBwZW5kaW5nIGxpc3RzLgoJKHBhdGhfaW5jbHVkZSk6IENhbiBub3cgYWRkIHRvIGFueSBwYXJ0aWFsIGluY2x1ZGUgcGF0aC4KCShiYXNlX25hbWUpOiBCcmluZyBvdmVyIGZyb20gY2NjcC5jLgoJKGNwcF9vcHRpb25zX2luaXQpOiBBbGxvY2F0ZSB0aGUgcGVuZGluZyBibG9jay4KCShjcHBfaGFuZGxlX29wdGlvbik6IEFkZCAtLXZlcnNpb24uICBFeGl0IGFmdGVyIC0taGVscC4gIEZpeAoJZm9ybWF0dGluZy4gIE9yZGVyIC1pZm9vIG9wdGlvbnMgYnkgZnJlcXVlbmN5IG9mIHVzYWdlLgoJKGluc3RhbGxfcHJlZGVmcyk6IE5ldyBmdW5jdGlvbiwgc2ltcGxpZmllZCB2ZXJzaW9uIG9mIGNvZGUKCXRoYXQgd2FzIGluIGNwcF9zdGFydF9yZWFkLgoJKGluaXRpYWxpemVfZGVwZW5kZW5jeV9vdXRwdXQpOiBMaWtld2lzZS4gIFVuZGVyc3RhbmQgT0JKRUNUX1NVRkZJWC4KCgkqIGNwcGZpbGVzLmMgKHNpbXBsaWZ5X3BhdGhuYW1lKTogRXhwb3J0LgoJKG1lcmdlX2luY2x1ZGVfY2hhaW5zKTogRG9uJ3QgbnJldmVyc2UgdGhlIGxpc3RzLiAgSWYKCW9wdHMtPnZlcmJvc2UsIHByaW50IGEgbm90aWNlIHdoZW4gYSBkdXBsaWNhdGUgZGlyIGlzIGRldGVjdGVkCglhbmQgZHJvcHBlZCBmcm9tIHRoZSBpbmNsdWRlIHBhdGguCgkoZmluY2x1ZGUpOiBGaXggZXhjZXNzaXZlIGNsZXZlcm5lc3MgaW4gc2V0dGluZwoJZnAtPnN5c3RlbV9oZWFkZXJfcC4KCShhY3R1YWxfZGlyZWN0b3J5KTogU2V0IHgtPnN5c3AgZnJvbQoJQ1BQX0JVRkZFUiAocGZpbGUpLT5zeXN0ZW1faGVhZGVyX3Agc28gdGhhdCBvbmUgc3lzdGVtIGhlYWRlcgoJbWF5IGluY2x1ZGUgYW5vdGhlciB3aXRoICIiLgoJKGRlcHNfb3V0cHV0KTogRml4IGRvdWJsZSBhZGp1c3RtZW50IG9mIGRlcHNfc2l6ZSB3aGljaCB3b3VsZAoJY2F1c2UgYWxsIGRlcGVuZGVuY2llcyBhZnRlciB0aGUgZmlyc3QgdHdvIGxpbmVzIHRvIGJlIGxvc3QuCgoJKiBjcHBsaWIuYyAoY3BwX3VuYXNzZXJ0KTogTmV3IGZ1bmN0aW9uLgoJKiBjcHBsaWIuaDogTGF5IG91dCBzdHJ1Y3QgY3BwX3BlbmRpbmcgaGVyZS4gIEFkanVzdAoJcHJvdG90eXBlcy4gIEFkZCBpbmNsdWRlX3ByZWZpeF9sZW4gdG8gc3RydWN0IGNwcF9vcHRpb25zLgoKTW9uIE1hciAxNSAxNjowMTo1MiAxOTk5ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBjb25maWcvbWlzcC9taXBzLmggKFJFR0lTVEVSX01PVkVfQ09TVCk6IE1ha2UgdGhlIGNvc3Qgb2YgbW92aW5nCglmcm9tIEhJL0xPL0hJTE8vTUQgaW50byBnZW5lcmFsIHJlZ2lzdGVycyB0aGUgc2FtZSBhcyBmb3Igb25lCglvZiBtb3ZpbmcgZ2VuZXJhbCByZWdpc3RlcnMgdG8gSEkvTE8vSElMTy9NRC4KCk1vbiBNYXIgMTUgMTI6Mzk6MzggMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9tMzJyL20zMnIuYyAoaW5pdF9pZGVudHMpOiBOZXcgZnVuY3Rpb24uICBJbml0aWFsaXplCglzdGF0aWMgdHJlZSBub2RlcyBmb3IgbTMyciBzcGVjaWZpYyBhdHRyaWJ1dGUgaWRlbnRpZmllcnMuICBSZW1vdmUKCWxlYWRpbmcgYW5kIHRyYWlsaW5nIGRvdWJsZSB1bmRlcnNjb3JlcyBmcm9tIHRoZSBhdHRyaWJ1dGUgbmFtZXMuCgkobTMycl92YWxpZF9tYWNoaW5lX2RlY2xfYXR0cmlidXRlKTogQ2FsbCBpbml0X2lkZW50cy4KCShtMzJyX2VuY29kZV9zZWN0aW9uX2luZm8pOiBDYWxsIGluaXRfaWRlbnRzLgoKTW9uIE1hciAxNSAxMDoyMDoyMCAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IEFkZCBhIFJFR19MQUJFTCBub3RlIGlmIHdlIHN1YnN0aXR1dGUgYQoJTEFCRUxfUkVGIGZvciBzb21ldGhpbmcgZWxzZS4KCk1vbiBNYXIgMTUgMDg6MjQ6MTcgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogZm9sZC1jb25zdC5jIChleGFjdF9yZWFsX2ludmVyc2UpOiBNb3ZlIHZhcmlhYmxlIGBmbG9hdF9lcnJvcicKCWludG8gdGhlIHNjb3BlIHdoZXJlIGl0IGlzIHVzZWQuCgkoY29uc3RfYmlub3BfMSk6IE5ldyBzdGF0aWMgZnVuY3Rpb24uCgkoY2JfYXJncyk6IE5ldyBzdHJ1Y3QuCgkoY29uc3RfYmlub3ApOiBVc2UgdGhlbSBpbiBjYWxsIHRvIGBkb19mbG9hdF9oYW5kbGVyJy4KCShmb2xkX2NvbnZlcnRfMSk6IE5ldyBzdGF0aWMgZnVuY3Rpb24uCgkoZmNfYXJncyk6IE5ldyBzdHJ1Y3QuCgkoZm9sZF9jb252ZXJ0KTogVXNlIHRoZW0gaW4gY2FsbCB0byBgZG9fZmxvYXRfaGFuZGxlcicuCgpNb24gTWFyIDE1IDIyOjUwOjE4IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIHJ0bGFuYWwuYyAoYXV0b19pbmNfcCk6IE5ldyBmdW5jdGlvbi4KCSogcnRsLmggKGF1dG9faW5jX3ApOiBQcm90b3R5cGUgaXQuCgkqIHJlbG9hZDEuYyAoYWRkX2F1dG9faW5jX25vdGVzKTogTmV3IGZ1bmN0aW9uLgoJKHJlbG9hZCk6IFN0cmlwIFJFR19JTkMgbm90ZXMgYW5kIGNhbGwgYWRkX2F1dG9faW5jX25vdGVzCglmb3IgZWFjaCBpbnNuIHRvIHJlc3RvcmUgdGhlbSBjb3JyZWN0bHkuCgoxOTk5LTAzLTE1ICBNYW5mcmVkIEhvbGxzdGVpbiAgPG1hbmZyZWRAcy1kaXJla3RuZXQuZGU+CgoJKiBmaXhpbmMvTWFrZWZpbGUuaW4gKHByb2NvcGVuLm8pOiBMaXN0IHRoZSBhY3R1YWwKCWRlcGVuZGVuY2llcy4KClN1biBNYXIgMTQgMTY6MjI6MTAgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY3NlLmMgKGNoZWNrX2ZvbGRfY29uc3RzKTogTmV3IHN0YXRpYyBmdW5jdGlvbi4KCShjZmNfYXJncyk6IE5ldyBzdHJ1Y3QuCgkoc2ltcGxpZnlfcmVsYXRpb25hbF9vcGVyYXRpb24pOiBVc2UgdGhlbSBpbiBjYWxsIHRvCglgZG9fZmxvYXRfaGFuZGxlcicuCgoJKiB0b3BsZXYuYyAoZG9fZmxvYXRfaGFuZGxlcik6IE5ldyBmdW5jdGlvbiB0byB3cmFwIGNhbGxzIHRvCglzZXRqbXAvc2V0X2Zsb2F0X2hhbmRsZXIuCgoJKiB0b3BsZXYuaCAoZG9fZmxvYXRfaGFuZGxlcik6IEFkZCBleHRlcm4gcHJvdG90eXBlLgoKCSogdHJlZS5jIChidWlsZF9yZWFsX2Zyb21faW50X2NzdF8xKTogTmV3IHN0YXRpYyBmdW5jdGlvbi4KCShicmZpY19hcmdzKTogTmV3IHN0cnVjdC4KCShidWlsZF9yZWFsX2Zyb21faW50X2NzdCk6IFVzZSB0aGVtIGluIGNhbGwgdG8KCWBkb19mbG9hdF9oYW5kbGVyJy4KClN1biBNYXIgMTQgMDE6MTU6MDYgMTk5OSAgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpTYXQgTWFyIDEzIDE3OjM3OjE4IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBoYWlmYS1zY2hlZC5jIChzY2hlZF9hbmFseXplXzEpOiBPbmx5IGNsZWFyIHJlZ19sYXN0X3VzZXMgb24gYSBTRVQuCgpTYXQgTWFyIDEzIDExOjM2OjE2IDE5OTkgIFJpY2hhcmQgRWFybnNoYXcgIChyZWFybnNoYUBhcm0uY29tKQoKCSogYXJtLmMgKGFybV9zcGxpdF9jb25zdGFudCk6IERvbid0IHRyeSB0byBmb3JjZSBhIGNvbnN0YW50IHRvCgltZW1vcnkgYWZ0ZXIgYXJtX3Jlb3JnIGhhcyBydW4uCgkoYWZ0ZXJfYXJtX3Jlb3JnKTogTmV3IHN0YXRpYyB2YXJpYWJsZS4KCShhcm1fcmVvcmcpOiBTZXQgaXQuCgkob3V0cHV0X2Z1bmNfZXBpbG9ndWUpOiBDbGVhciBpdC4KCkZyaSBNYXIgMTIgMjA6MjY6MzIgMTk5OSAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogY29uZmlndXJlLmluICh7cnM2MDAwLHBvd2VycGN9LWlibS1haXgqKTogU2V0IGZsb2F0X2Zvcm1hdCB0byBub25lLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgpGcmkgTWFyIDEyIDIwOjQ1OjMwIDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiB1bnJvbGwuYyAobG9vcF9pdGVyYXRpb25zKTogRG9uJ3QgcmV0dXJuIGEgZmluYWwgdmFsdWUgZm9yIEVRCgljb21wYXJpc29uIGxvb3BzLgoKRnJpIE1hciAxMiAxMjozNTowMSAxOTk5ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiByZWxvYWQxLmMgKGNhbGN1bGF0ZV9uZWVkc19hbGxfaW5zbnMpOiBXaGVuIGlnbm9yZSBlcXVpdmFsZW5jZQoJc2V0dGluZyBpbnNuLCBjbGVhciBuZWVkX2VsaW0sIG5lZWRfcmVsb2FkLCBhbmQgbmVlZF9vcGVyYW5kX2NoYW5nZS4KCkZyaSBNYXIgMTIgMDc6NTQ6NDMgMTk5OSAgQnJ1Y2UgS29yYiAgPGtvcmJAZGF0YWRlc2lnbi5jb20+CgoJKiBmaXhpbmMvZml4aW5jLio6IFNvbWUgY2hhbmdlcyBmcm9tIHRoZSBmaXhpbmNsLWJyYW5jaAoJd2VyZSBub3QgYXBwbGllZCAoPz8hISkuICBDb3JyZWN0ZWQuCgoJKiBmaXhpbmMvTWFrZWZpbGUuaW46IFNhbWUgdGhpbmcuCgpGcmkgTWFyIDEyIDAwOjUxOjQzIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBBbGxvdyBhIENBTExfRVhQUiB3aXRoIGEgbW9kZSB3aWRlciB0aGFuCglNQVhfSU5URUdFUl9DT01QVVRBVElPTl9NT0RFLgoKVGh1IE1hciAxMSAxNDowMDo1OCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEuaCAoSEFSRF9SRUdOT19NT0RFX09LKTogRGlzYWxsb3cgUUkvSEltb2RlIGluIGZwIHJlZ3MuCgkoTU9ERVNfVElFQUJMRV9QKTogVXBkYXRlLgoKCSogYWxwaGEubWQgKGV2NV9lMCk6IENvbmZsaWN0IGxvYWRzIGFuZCBzdG9yZXMuCgpUaHUgTWFyIDExIDEzOjU1OjUyIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBtYWNobW9kZS5oIChzbWFsbGVzdF9tb2RlX2Zvcl9zaXplKTogUHJvdG90eXBlLgoJKiBzdG9yLWxheW91dC5jIChzbWFsbGVzdF9tb2RlX2Zvcl9zaXplKTogUmVtb3ZlIHN0YXRpYy4KClRodSBNYXIgMTEgMjE6MjU6NTkgMTk5OSAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGxvb3AuYyAoc3RyZW5ndGhfcmVkdWNlKTogRG9uJ3QgZG8gYml2IGluY3JlbWVudCAtPiBERVNUX1JFRyBnaXYKCWNvbnZlcnNpb24gaWYgd2UgZG9uJ3Qga25vdyB0aGUgbGlmZXRpbWUuCgpUaHUgTWFyIDExIDIwOjM3OjU5IDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiByZWxvYWQuMWMgKGRlbGV0ZV9hZGRyZXNzX3JlbG9hZHNfMSk6IENoZWNrIGZvciByZWxvYWRzIG9mCglDVVJSRU5UX0lOU04gZXZlbiBpZiBpdCBzZXRzIERTVC4KClRodSBNYXIgMTEgMTA6Mjk6NTAgMTk5OSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZHdhcmYyb3V0LmMgKGFkZF9BVF9sYmxfb2Zmc2V0KTogUmVuYW1lIGZyb20gYWRkX0FUX3NlY3Rpb25fb2Zmc2V0LgoJKHByaW50X2RpZSwgc2l6ZV9vZl9kaWUsIHZhbHVlX2Zvcm1hdCwgb3V0cHV0X2RpZSk6IEFkanVzdC4KClRodSBNYXIgMTEgMTA6Mjc6NDIgMTk5OSAgUm9iZXJ0IExpcGUgIDxyb2JlcnRsaXBlQHVzYS5uZXQ+CgoJKiBkd2FyZjJvdXQuYyAoVEVYVF9TRUNUSU9OX0xBQkVMLCBERUJVR19MSU5FX1NFQ1RJT05fTEFCRUwsCglERUJVR19JTkZPX1NFQ1RJT05fTEFCRUwsIEFCQlJFVl9TRUNUSU9OX0xBQkVMLAoJdGV4dF9zZWN0aW9uX2xhYmVsLCBkZWJ1Z19saW5lX3NlY3Rpb25fbGFiZWwsCglkZWJ1Z19pbmZvX3NlY3Rpb25fbGFiZWwsIGFiYnJldl9zZWN0aW9uX2xhYmVsKTogTmV3LgoJKG91dHB1dF9jb21waWxhdGlvbl91bml0X2hlYWRlcik6IEVtaXQgbGFiZWwgYXNzb2NpYXRlZAoJd2l0aCBzZWN0aW9uIGluc3RlYWQgb2Ygc2VjdGlvbiBuYW1lIGl0c2VsZi4KCShvdXRfcHVibmFtZXMsIG91dHB1dF9hcmFuZ2VzLCBvdXRwdXRfbGluZV9pbmZvLAoJZHdhcmYyb3V0X2ZpbmlzaCk6IExpa2V3aXNlLgoJKGR3YXJmMm91dF9pbml0KTogQnVpbGQgaW50ZXJuYWwgbGFiZWwgbmFtZXMgZm9yIHNlY3Rpb25zCglmcm9tIHN0YXRpYyBsYWJlbHMuCgpUaHUgTWFyIDExIDE3OjI4OjMyIDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBzaC5tZCAobXVsc2kzKTogRW5kIG11bC5sIHNlcXVlbmNlIHdpdGggYSBuby1vcCBtb3ZlLgoKVGh1IE1hciAxMSAwODo1MjowMiAxOTk5ICBCcnVjZSBLb3JiICA8a29yYkBkYXRhZGVzaWduLmNvbT4KCgkqIE1ha2VmaWxlLmluOiBBY3RpdmF0ZWQgZml4aW5jL21rZml4aW5jLnNoLgoJKiBjb25maWd1cmUuaW46IEFjdGl2YXRlZCBmaXhpbmMvbWtmaXhpbmMuc2guCgpUaHUgTWFyIDExIDAxOjM4OjAyIDE5OTkgIE11bWl0IEtoYW4gIDxraGFuQHhyYXlsaXRoLndpc2MuZWR1PgoKCSogY3BwZmlsZXMuYyAoSU5PX1RfRVEpOiBIYW5kbGUgVVdJTi4KCgkqIGMtY29tbW9uLmMgKGRlY2xfYXR0cmlidXRlcyk6IEZsYWcgdW5yZWNvZ25pemVkIGF0dHJpYnV0ZQoJZnVuY3Rpb25zIGFzIHdhcm5pbmdzIGluc3RlYWQgb2YgYXMgZXJyb3JzLgoKCVN1cHBvcnQgZm9yIGkzODYtcGMtdXdpbi4KCSogaTM4Ni91d2luLmg6IE5ldyBmaWxlLgoJKiBpMzg2L3htLXV3aW4uaDogTmV3IGZpbGUuCgkqIGkzODYvdC11d2luOiBOZXcgZmlsZS4KCSogaTM4Ni91d2luLmFzbTogTmV3IGZpbGUuCgkqIGNvbmZpZ3VyZS5pbiAoaVszNDU2XTg2LSotdXdpbiopOiBEZWZpbmUuCglBZGQgV29ya2Fyb3VuZCBmb3IgdmZvcmsgYnVnIHdoZW4gaG9zdGVkIG9uIHV3aW4uCgkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KCgkqIGNjY3AuYyAoSU5PX1RfRVEpOiBVbmRlZmluZS4gVVdJTiBoYXMgaW5vZGVzLgoJKGFic29sdXRlX2ZpbGVuYW1lKTogVVdJTiB1c2VzIFBPU0lYIHBhdGhuYW1lcyBvbmx5LgoJKiBsaWJnY2MyLmMgKGdldHBhZ2VzaXplKTogRG8gbm90IGRlZmluZSBmb3IgVVdJTi4KCShtcHJvdGVjdCk6IExpa2V3aXNlLgoJKiBwcm90b2l6ZS5jIChkaXJlbnQuaCk6IENvbmRpdGlvbmFsbHkgaW5jbHVkZS4KCShmcHV0Yyk6IFByb3RvdHlwZSBvbmx5IGlmIGl0J3Mgbm90IGEgbWFjcm8uCgpXZWQgTWFyIDEwIDAyOjQ5OjA0IDE5OTkgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogUmVtb3ZlIGluaXRfcHJpb3JpdHkgc3R1ZmYuCgoxOTk5LTAzLTExICBDb2xpbiBTbWl0aCAgPGNvbGluQHdycy5jb20+CgoJKiBzZGJvdXQuYyAocGxhaW5fdHlwZV8xKTogTWFrZSBib29sZWFuIHR5cGVzIHdvcmsgYmV0dGVyIHdpdGggc2RiLgoKVGh1IE1hciAxMSAwMDoyMDo1MiAxOTk5ICBBbGV4YW5kcmUgT2xpdmEgIDxvbGl2YUBkY2MudW5pY2FtcC5icj4KCgkqIGdjYy50ZXhpOiBVcGRhdGUgYnVnIHJlcG9ydGluZyBpbnN0cnVjdGlvbnMgdG8gbWF0Y2gKCWN1cnJlbnQgZXptbG0gbGlzdCByZWFsaXR5LgoKV2VkIE1hciAxMCAyMzoxMToxOSAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBnY2MuYyAocHJpbnRfZmlsZV9uYW1lLCBwcmludF9wcm9nX25hbWUsIHNwZWNfbWFjaGluZSwKCXJlYWRfc3BlY3MsIHNldF9zcGVjLCBsb29rdXBfY29tcGlsZXIsIGJ1aWxkX3NlYXJjaF9saXN0LAoJcHV0ZW52X2Zyb21fcHJlZml4ZXMsIGZpbmRfYV9maWxlLCByZWNvcmRfdGVtcF9maWxlLAoJZGVsZXRlX2lmX29yZGluYXJ5LCBoYW5kbGVfYnJhY2VzLCBkb19zcGVjLCBkb19zcGVjXzEsIGZpbmRfZmlsZSwKCWlzX2RpcmVjdG9yeSwgdmFsaWRhdGVfc3dpdGNoZXMsIHVzZWRfYXJnLCBkZWZhdWx0X2FyZywKCXBmYXRhbF93aXRoX25hbWUsIHBlcnJvcl93aXRoX25hbWUsIHBmYXRhbF9wZXhlY3V0ZSwgZmF0YWwsIGVycm9yLAoJbm90aWNlLCBhZGRfcHJlcHJvY2Vzc29yX29wdGlvbiwgYWRkX2Fzc2VtYmxlcl9vcHRpb24sCglhZGRfbGlua2VyX29wdGlvbiwgcHJvY2Vzc19jb21tYW5kLCBleGVjdXRlLAoJdW51c2VkX3ByZWZpeF93YXJuaW5ncywgY2xlYXJfYXJncywgZmF0YWxfZXJyb3IsCglsYW5nX3NwZWNpZmljX2RyaXZlciwgdXNlcl9zcGVjcywgY29tcGlsZXIsIGxpbmtfY29tbWFuZF9zcGVjLAoJb3B0aW9uX21hcCwgdHJhbnNsYXRlX29wdGlvbnMsIG1ha2VfdGVtcF9maWxlLCB0ZW1wX25hbWUsCglwcm9ncmFtbmFtZSwgcGF0aF9wcmVmaXgsIG1hY2hpbmVfc3VmZml4LCBqdXN0X21hY2hpbmVfc3VmZml4LAoJZ2NjX2V4ZWNfcHJlZml4LCBzdGFuZGFyZF9leGVjX3ByZWZpeCwgc3RhbmRhcmRfZXhlY19wcmVmaXhfMSwKCW1kX2V4ZWNfcHJlZml4LCBtZF9zdGFydGZpbGVfcHJlZml4LCBtZF9zdGFydGZpbGVfcHJlZml4XzEsCglzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4LCBzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4XzEsCglzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4XzIsIHRvb2xkaXJfYmFzZV9wcmVmaXgsIHRvb2xkaXJfcHJlZml4LAoJbXVsdGlsaWJfZGlyLCB0ZW1wX2ZpbGVuYW1lLCB0ZW1wX2ZpbGUsIGNvbW1hbmQsIHN3aXRjaHN0ciwKCWluZmlsZSwgb3V0ZmlsZXMsIGlucHV0X2ZpbGVuYW1lLCBpbnB1dF9iYXNlbmFtZSwgaW5wdXRfc3VmZml4LAoJY2hlY2tfbGl2ZV9zd2l0Y2gsIG1haW4pOiBRdWFsaWZ5IGEgY2hhciogd2l0aCB0aGUgYGNvbnN0JyBrZXl3b3JkLgoKV2VkIE1hciAxMCAyMDoyODoyOSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBsY20uYzogTmV3IGZpbGUuCgkqIE1ha2VmaWxlLmluIChPQkpTKTogQWRkIGxjbS5vLgoJKGxjbS5vKTogQWRkIGRlcGVuZGVuY2llcy4KCgkqIGdjc2UuYyAoY29tcHV0ZV9wcmVfbG9jYWxfcHJvcGVydGllcyk6IERlbGV0ZS4KCShjb21wdXRlX3ByZV9kYXRhKTogVXNlIGNvbXB1dGVfbG9jYWxfcHJvcGVydGllcyBpbnN0ZWFkIG9mCgljb21wdXRlX3ByZV9sb2NhbF9wcm9wZXJ0aWVzLgoKCSogZ2NzZS5jOiBNb3JlIGNvbW1lbnRzLCB3aGl0ZXNwYWNlIGFuZCBzaW1pbGFyIGZpeGVzLgoJKGR1bXBfY3VpZF90YWJsZSwgbWF5YmVfc2V0X3JkX2dlbiwgZHVtcF9jcHJvcF9kYXRhKTogRGVsZXRlLgoJKGR1bXBfcHJlX2RhdGEsIGNvbXB1dGVfY3Byb3BfbG9jYWxfcHJvcGVydGllcyk6IExpa2V3aXNlLgoJKG9uZV9jbGFzc2ljX2djc2VfcGFzcyk6IExvc2UgdW51c2VkIGFyZ3VtZW50LiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KCShjb21wdXRlX2hhc2hfdGFibGUsIGNvbXB1dGVfZXhwcl9oYXNoX3RhYmxlKTogTGlrZXdpc2UuCgkoY29tcHV0ZV9zZXRfaGFzaF90YWJsZSwgb25lX3ByZV9nY3NlX3Bhc3MsIG1hcmtfY2FsbCk6IExpa2V3aXNlLgoJKGNwcm9wX2luc24sIGNwcm9wLCBvbmVfY3Byb3BfcGFzcyk6IEFkZCBuZXcgYXJndW1lbnQgQUxURVJfSlVNUFMuCglBbGwgY2FsbGVycyBjaGFuZ2VkLiAgT25seSBhbHRlciBqdW1wcyBpZiBBTFRFUl9KVU1QUyBpcyBub256ZXJvLgoJTG9zZSB1bnVzZWQgYXJndW1lbnQuCgkoZ2NzZV9tYWluKTogQWx3YXlzIHJ1biBhIGNwcm9wIHBhc3MgYWZ0ZXIgZmluaXNoaW5nIGdsb2JhbCBjc2UuCgkoY29tcHV0ZV9sb2NhbF9wcm9wZXJ0aWVzKTogTmV3IGZ1bmN0aW9uLgoJKGhhc2hfc2Nhbl9wYXQsIGhhc2hfc2Nhbl9pbnNuKTogTm8gbG9uZ2VyIGNhbGwgbWF5YmVfc2V0X3JkX2dlbi4KCShjb21wdXRlX2Nwcm9wX2RhdGEpOiBVc2UgY29tcHV0ZV9sb2NhbF9wcm9wZXJ0aWVzLgoKCSogZ2NzZS5jOiBVcGRhdGUgdmFyaW91cyBjb21tZW50cy4KCShjdXJyZW50X2Z1bmN0aW9uX2NhbGxzX2xvbmdqbXApOiBEZWxldGUgZGVjbGFyYXRpb24uCgoJKiBnY3NlLmMgKHJ1bl9qdW1wX29wdF9hZnRlcl9nY3NlKTogTmV3IHZhcmlhYmxlLgoJKGdjc2VfbWFpbik6IFJldHVybnMgYW4gaW50ZWdlci4KCShoYXNoX3NjYW5fc2V0KTogUmVjb3JkIGluaXRpYWxpemF0aW9ucyBmcm9tIENPTlNUX0RPVUJMRXMgdG9vLgoJKHRyeV9yZXBsYWNlX3JlZyk6IFVwZGF0ZSBzb21lIGNvbW1lbnRzLgoJKGNwcm9wX2luc24pOiBBbGxvdyBwcm9wYWdhdGlvbiBpbnRvIHNvbWUgSlVNUF9JTlNOcyB0b28uCgkqIHJ0bC5oIChnY3NlX21haW4pOiBVcGRhdGUgcHJvdG90eXBlLgoJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IElmIGdjc2VfbWFpbiByZXR1cm5zIG5vbnplcm8sCgl0aGVuIHJ1biBhIGp1bXAgb3B0aW1pemF0aW9uIHBhc3MuCgkqIGp1bXAuYyAoZGVsZXRlX2JhcnJpZXJfc3VjY2Vzc29ycyk6IERlbGV0ZSBub3AganVtcHMgdG9vLgoKV2VkIE1hciAxMCAxOTowNDozMSAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogc2guYyAoZnBfYXJpdGhfcmVnX29wZXJhbmQpOiBBY3R1YWxseSB0ZXN0IGlmIHJlZyBpcyBzdWl0YWJsZQoJZm9yIEZQIGFyaXRobWV0aWMuICBDaGFuZ2VkIGNhbGxlci4KCSogc2gubWQgKHN1YnNmMywgc3Vic2ZfaSk6IFVzZSBmcF9hcml0aF9yZWdfb3BlcmFuZC4KCldlZCBNYXIgMTAgMTg6NTY6MzEgMTk5OSAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHJlbG9hZDEuYyAoY2hvb3NlX3JlbG9hZF9yZWdzKTogV2hlbiBpbmhlcml0aW5nIGZyb20gdGhlIGZyYW1lCglwb2ludGVyLCBkb24ndCBjbG9iYmVyIGl0LgoKV2VkIE1hciAxMCAwODowMTo1MiAxOTk5ICBCcnVjZSBLb3JiICA8a29yYkBkYXRhZGVzaWduLmNvbT4KCgkqIGZpeGluYy9maXhpbmMuKjogUmVzeW5jLWVkIHdpdGggdGhlIGZpbGVzIGluIHRoaXMKCWRpcmVjdG9yeS4KCgkqIGZpeGluYy9ta2ZpeGluYy5zaDogVGhlIG1hY2hpbmUgY2FzZSBlbGVtZW50cyB3ZXJlCglvdXQtb2Ytb3JkZXIuICAodGhlIGl4ODYtKi1saW51eC1nbnUqIGVudHJ5IG5lZWRlZCB0bwoJYmUgZWFybGllcikuCgpXZWQgTWFyIDEwIDAwOjAxOjI0IDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiByZWxvYWQxLmMgKHJlbG9hZF9jb21iaW5lX25vdGVfc3RvcmUpOiBGaXggY2FsY3VsYXRpb24gb2YgbnVtYmVyCglvZiBhZmZlY3RlZCByZWdpc3RlcnMuCgpUdWUgTWFyICA5IDE1OjQ4OjE1IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBmbG93LmMgKHRpZHlfZmFsbHRocnVfZWRnZSk6IEJlIG1vcmUgY2FyZWZ1bCBmaW5kaW5nIHRoZSBsYXN0CglCQVJSSUVSIG9mIGEgbGlzdC4gIERlbGV0ZSB0aGUgY2MwIHNldHRlciBhcyB3ZWxsIGFzIGEgY29uZCBqdW1wLgoKVHVlIE1hciAgOSAxNToyNjowMiAxOTk5ICBIYW5zLVBldGVyIE5pbHNzb24gIDxocEBiaXRyYW5nZS5jb20+CgoJKiBpMzg2Lm1kIChhc2hsc2kzIHNwbGl0dGVyKTogRml4IHR5cG8gaW4gbGFzdCBjaGFuZ2UuCgpUdWUgTWFyICA5IDExOjM1OjIwIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiByZWctc3RhY2suYyAoc3RhY2tfcmVnX2xpZmVfYW5hbHlzaXMpOiBVc2UgcmV0dXJuanVtcF9wCglpbnN0ZWFkIG9mIGFuIGV4cGxpY2l0IHRlc3QgZm9yIFJFVFVSTi4KClR1ZSBNYXIgIDkgMDk6MzM6MTYgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogTWFrZWZpbGUuaW4gKHRvcGxldi5vKTogRGVwZW5kIG9uICQoQkFTSUNfQkxPQ0tfSCkuCgoJKiB0b3BsZXYuYzogSW5jbHVkZSBiYXNpYy1ibG9jay5oLgoKVHVlIE1hciAgOSAwMjowODoxNyAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjYWxscy5jIChsb2FkX3JlZ2lzdGVyX3BhcmFtZXRlcnMpOiBOZXcgZnVuY3Rpb24uCgkoZXhwYW5kX2NhbGwpOiBVc2UgaXQuCgoJKiBjYWxscy5jIChleHBhbmRfY2FsbCk6IFNsaWdodGx5IHJlb3JnYW5pemUgY29kZS4KCgkqIGNhbGxzLmMgKGNvbXB1dGVfYXJndW1lbnRfYWRkcmVzc2VzKTogTmV3IGZ1bmN0aW9uLgoJKHJ0eF9mb3JfZnVuY3Rpb25fY2FsbCk6IE5ldyBmdW5jdGlvbi4KCShleHBhbmRfY2FsbCk6IFVzZSB0aGVtLgoKCSogaTM4Ni5tZCAoemVyb19leHRlbmRoaXNpMik6IFNwbGl0IGludG8gYW4gZXhwYW5kZXIgYW5kIGFub255bW91cwoJcGF0dGVybi4gIEFkZCBuZXcgYW5vbnltb3VzIHBhdHRlcm4gZm9yIHVzZSB3aGVuIG9wdGltaXppbmcgZm9yCglzaXplIG9yIGZvciB0aGUgUFByby4KCSh6ZXJvX2V4dGVuZHFpaGkyLCB6ZXJvX2V4dGVuZHFpc2kyKTogTGlrZXdpc2UuCgpNb24gTWFyICA4IDIzOjQzOjQ3IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBoYWlmYS1zY2hlZC5jIChzY2hlZF9hbmFseXplXzEpOiBGaXggbGFzdCBjaGFuZ2UgLS0gYWRkIGNsb2JiZXIKCWRlcGVuZGVuY2llcyB0byBzZXRzIGluIHRoZSBub24taGFyZC1yZWcgY2FzZSB0b28uCgpNb24gTWFyICA4IDE4OjU1OjIxIDE5OTkgIE1hcmMgRXNwaWUgIDxlc3BpZUBjdnMub3BlbmJzZC5vcmc+CgoJKiBjb25maWcvb3BlbmJzZC5oIChIQU5ETEVfU1lTVl9QUkFHTUEpOiBEZWZpbmUuCgpNb24gTWFyICA4IDE2OjA0OjQ0IDE5OTkgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGxvY2FsLWFsbG9jLmMgKGNvbWJpbmVfcmVncyk6IERvbid0IGNvbWJpbmUgaWYgd2UgaGF2ZSBhIGhhcmQgcmVnCglmb3Igd2hpY2ggQ0xBU1NfTElLRUxZX1NQSUxMRURfUCBpcyB0cnVlLgoKCSogdW5yb2xsLmMgKGxvb3BfaXRlcmF0aW9ucyk6IE9ubHkgY2FsbCBsb29wX2ZpbmRfZXF1aXZfdmFsdWUgaWYgd2UKCWhhdmUgYSBSRUcgb3IgU1VCUkVHLgoKTW9uIE1hciAgOCAxNToyNzo0MiAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBpMzg2Lm1kIChhc2hsc2kzKTogUmV2aXNlIGNvbW1lbnRzLiAgUHJvdmlkZSBuZXcgYW5vbnltb3VzCglwYXR0ZXJuIGZvciBQZW50aXVtIGFuZCBQUHJvL1BJSS4gIFJldmVyc2UgY29uc3RyYWludHMgaW4KCWdlbmVyaWMgYXNobHNpMyBhbm9ueW1vdXMgcGF0dGVybi4KCgkqIGNhbGxzLmMgKGluaXRpYWxpemVfYXJndW1lbnRfaW5mbyk6IEFjY2VwdCBhIHBvaW50ZXIgdG8KCUNVTVVMQVRJVkVfQVJHUy4KCShleHBhbmRfY2FsbCk6IFBhc3MgdGhlIGFkZHJlc3Mgb2YgQ1VNVUxBVElWRV9BUkdTLgoKCSogcnM2MDAwL3htLXN5c3Y0LmggKEhPU1RfQklUU19QRVJfTE9OR0xPTkcpOiBSZW1vdmUgI2lmIDAuCgoJKiBtbjEwMzAwLmggKENBU0VfRFJPUFNfVEhST1VHSCk6IERlbGV0ZS4KCSogbW4xMDIwMC5oIChDQVNFX0RST1BTX1RIUk9VR0gpOiBEZWxldGUuCgkqIGg4MzAwLmggKENBU0VfRFJPUFNfVEhST1VHSCk6IERlbGV0ZS4KCgkqIGZsb3cuYyAobWVyZ2VfYmxvY2tzX25vbW92ZSk6IEZvciBIQVZFX2NjMCB0YXJnZXRzLCBtYWtlIHN1cmUKCXRvIGFsc28gZGVsZXRlIHRoZSBjYzAgc2V0dGVyIHdoZW4gZGVsZXRpbmcgYSBjb25kaXRpb25hbCBicmFuY2gKCXRvIHRoZSBuZXh0IGJsb2NrLgoKTW9uIE1hciAgOCAxODo0NzoxMSAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogcmVnbW92ZS5jIChjb3B5X3NyY190b19kZXN0KTogTmV3IGFyZ3VtZW50IG1heF9vbGRfdWlkLgoKTW9uIE1hciAgOCAwODoyMzowMCAxOTk5ICBCcnVjZSBLb3JiICA8a29yYkBkYXRhZGVzaWduLmNvbT4KCgkqIENoYW5nZUxvZzogTWVyZ2VkIGVudHJpZXMgZnJvbSBmaXhpbmNsLWJyYW5jaC4KClN1biBNYXIgIDcgMTE6NDg6NTYgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGhhaWZhLXNjaGVkLmMgKEVOQ09ERV9CTE9DS0FHRSk6IERvbid0IHNoaWZ0IHVuaXQgdG9vIGZhci4KCShwcmludF9leHApOiBTcGVjaWFsIGNhc2UgYWRkaXRpb24gb2YgYSBjb25zdGFudC4KCShwcmludF92YWx1ZSkgW0NPTlNUX0lOVF06IFVzZSBIT1NUX1dJREVfSU5UX1BSSU5UX0hFWC4KClN1biBNYXIgIDcgMTE6MjE6MDIgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGhhaWZhLXNjaGVkLmMgKHJlZ19sYXN0X2Nsb2JiZXJzKTogTmV3LgoJKHJlZ19wZW5kaW5nX2Nsb2JiZXJzLCBiYl9yZWdfbGFzdF9jbG9iYmVycyk6IE5ldy4KCShjb21wdXRlX2Jsb2NrX2JhY2t3YXJkX2RlcGVuZGVuY2VzKTogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGVtLgoJKHNjaGVkdWxlX3JlZ2lvbik6IExpa2V3aXNlLgoJKHNjaGVkX2FuYWx5emVfMSk6IENsb2JiZXJzIGRvbid0IGludGVyZmVyZSB3aXRoIG9uZSBhbm90aGVyLgoJVGhleSBkbyBpbnRlcmZlcmUgd2l0aCBzZXRzIC4uLgoJKHNjaGVkX2FuYWx5emVfMik6IC4uLiBhbmQgdXNlcy4KCShzY2hlZF9hbmFseXplKTogTGlrZXdpc2UuCgkoc2NoZWRfYW5hbHl6ZV9pbnNuKTogVXBkYXRlIHJlZ19sYXN0X2Nsb2JiZXJzIGFwcHJvcHJpYXRlbHkuCgpTdW4gTWFyICA3IDA4OjMwOjM3IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGdtb24tc29sMi5jOiBJbmNsdWRlIGNvbmZpZy5oIGFuZCBzeXN0ZW0uaC4gIERvbid0IHJlZHVuZGFudGx5CglpbmNsdWRlIHN5c3RlbSBoZWFkZXIgZmlsZXMuCgkoc2Njc2lkKTogUmVtb3ZlLgoJKG1vbmNvbnRyb2wsIG1vbnN0YXJ0dXAsIF9tY2xlYW51cCwgaW50ZXJuYWxfbWNvdW50KTogUHJvdG90eXBlLgoJKF9tY2xlYW51cCk6IEFkZCB0aGUgYGNvbnN0JyBrZXl3b3JkIHRvIGEgY2hhciouCgkoaW50ZXJuYWxfbWNvdW50KTogRGVjbGFyZSBgZXRleHQnIGFzIGEgY2hhcltdIG5vdCBhIGZ1bmN0aW9uLgoJQ2FzdCBgZXRleHQnIHRvIGNoYXIqIHdoZW4gY2FsbGluZyBgbW9uc3RhcnR1cCcuCgoJKiBzcGFyYy5jIChmcmFtZV9iYXNlX25hbWUsIHNhdmVfcmVncywgcmVzdG9yZV9yZWdzLAoJYnVpbGRfYmlnX251bWJlciwgc3BhcmNfY21vZGVsX3N0cmluZywgc3BhcmNfYWxpZ25fbG9vcHNfc3RyaW5nLAoJc3BhcmNfYWxpZ25fanVtcHNfc3RyaW5nLCBzcGFyY19hbGlnbl9mdW5jc19zdHJpbmcsIGNvZGVfbW9kZWwsCgljcHVfZGVmYXVsdCwgY3B1X3RhYmxlLCBvdXRwdXRfZnVuY3Rpb25fcHJvbG9ndWUsCglvdXRwdXRfZnVuY3Rpb25fZXBpbG9ndWUsIG91dHB1dF9yZXR1cm4sCglzcGFyY19mbGF0X291dHB1dF9mdW5jdGlvbl9wcm9sb2d1ZSwgdWx0cmFfY29kZV9uYW1lcywKCXNwYXJjX2ZsYXRfb3V0cHV0X2Z1bmN0aW9uX2VwaWxvZ3VlKTogQ29uc3RpZnkgYSBjaGFyKi4KCShoeXBlcnNwYXJjX2FkanVzdF9jb3N0KTogQWRkIGEgZGVmYXVsdCBjYXNlIGluIGEgc3dpdGNoLgoKCSogc3BhcmMuaCAoc3BhcmNfY21vZGVsX3N0cmluZywgT1ZFUlJJREVfT1BUSU9OUywKCXNwYXJjX2NwdV9zZWxlY3QsIHNwYXJjX2FsaWduX2xvb3BzX3N0cmluZywKCXNwYXJjX2FsaWduX2p1bXBzX3N0cmluZywgc3BhcmNfYWxpZ25fZnVuY3Nfc3RyaW5nLAoJb3V0cHV0X3JldHVybik6IENvbnN0aWZ5IGEgY2hhciouCgoJKiBzcGFyYy5tZCAobW92ZGkpOiBDaGFuZ2UgdGhlIGNvbXBhcmlzb24gb2YgSE9TVF9CSVRTX1BFUl9XSURFX0lOVAoJc28gdGhhdCB3ZSBjaGVjayAiPT0gMzIiLCBpbnN0ZWFkIG9mICIhPSA2NCIuICBDYXN0IGEgdmFsdWUgdG8KCUhPU1RfV0lERV9JTlQgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuICBIaWRlIHRoZSBkZWNsYXJhdGlvbgoJZm9yIHZhcmlhYmxlIGBjaGFpbicuCgpTdW4gTWFyICA3IDA4OjA1OjI3IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIHN5c3RlbS5oIChjb25zdCwgaW5saW5lKTogTW92ZSB0aGUgc3RhZ2UyIGhhbmRsaW5nIG9mIHRoZXNlCglrZXl3b3Jkcy1hcy1tYWNyb3MgZnJvbSBoZXJlLi4uCgoJKiBnYW5zaWRlY2wuaCAoY29uc3QsIGlubGluZSk6IC4uLnRvIGhlcmUuCgpTdW4gTWFyICA3IDAyOjQ0OjE1IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiByZWNvZy5jIChwdXNoX29wZXJhbmQsIHBvcF9vcGVyYW5kKTogVk9JRG1vZGUgbmVlZG4ndCBtYXRjaCBtb2Rlcy4KClN1biBNYXIgIDcgMDE6NTg6NDcgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGNzZS5jIChjYW5vbl9oYXNoKTogTmV2ZXIgcmVqZWN0IGhhcmQgcmVncyBpbiBDQ21vZGUuCgpTdW4gTWFyICA3IDAxOjE1OjA0IDE5OTkgIEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKU2F0IE1hciAgNiAxNzoxODo0NCAxOTk5ICBSaWNoYXJkIEVhcm5zaGF3ICAocmVhcm5zaGFAYXJtLmNvbSkKCQkJICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZmxvdy5jIChtYWtlX2VkZ2VzKTogSGFuZGxlIGNhc2VzaSB0aGF0IGp1bXAgdG8gZGVmYXVsdCBicmFuY2guCglJZiBDQVNFX0RST1BTX1RIUk9VR0gsIGZvcmNlIGZhbGx0aHJ1IHRvIGJsb2NrIGFmdGVyIGNhc2VzaS4KClNhdCBNYXIgIDYgMDc6NDk6MjMgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogYy1hdXgtaW5mby5jIChkYXRhX3R5cGUsIGFmZml4X2RhdGFfdHlwZSwgZ2VuX2RlY2wsCglnZW5fZm9ybWFsX2xpc3RfZm9yX3R5cGUsIGdlbl9mb3JtYWxfbGlzdF9mb3JfZnVuY19kZWYsIGdlbl90eXBlKToKCVF1YWxpZnkgYSBjaGFyKiB3aXRoIHRoZSBgY29uc3QnIGtleXdvcmQuCgoJKiBjLWNvbW1vbi5jIChkZWNsYXJlX2hpZGRlbl9jaGFyX2FycmF5LCBhZGRfYXR0cmlidXRlLCBpZl9lbHQsCglkZWNsYXJlX2Z1bmN0aW9uX25hbWUsIGRlY2xfYXR0cmlidXRlcywgZm9ybWF0X2NoYXJfaW5mbywKCWNoZWNrX2Zvcm1hdF9pbmZvLCBiaW5hcnlfb3BfZXJyb3IpOiBMaWtld2lzZS4KCgkqIGNleHAueSAoeXllcnJvciwgZXJyb3IsIHBlZHdhcm4sIHdhcm5pbmcsIHRva2VuKTogTGlrZXdpc2UuCgoJKiBnY3NlLmMgKGR1bXBfaGFzaF90YWJsZSk6IExpa2V3aXNlLgoKCSogaW50ZWdyYXRlLmMgKGZ1bmN0aW9uX2Nhbm5vdF9pbmxpbmVfcCk6IExpa2V3aXNlLgoKCSogb3B0YWJzLmM6IEluY2x1ZGUgaW5zbi1jb25maWcuaCBlYXJsaWVyLgoJKGluaXRfbGliZnVuY3MsIGluaXRfaW50ZWdyYWxfbGliZnVuY3MsIGluaXRfZmxvYXRpbmdfbGliZnVuY3MpOgoJUXVhbGlmeSBhIGNoYXIqIHdpdGggdGhlIGBjb25zdCcga2V5d29yZC4KCgkqIHJlYWwuYyAoYXNjdG9lMjQsIGFzY3RvZTUzLCBhc2N0b2U2NCwgYXNjdG9lMTEzLCBhc2N0b2UsCglhc2N0b2VnLCBtdGhlcnIsIGVyZWFsX2F0b2YpOiBMaWtld2lzZS4KCgkqIHJlYWwuaCAoZXJlYWxfYXRvZik6IExpa2V3aXNlLgoKCSogc2JpdG1hcC5jIChkdW1wX3NiaXRtYXBfdmVjdG9yKTogTGlrZXdpc2UuCgoJKiBzYml0bWFwLmggKGR1bXBfc2JpdG1hcF92ZWN0b3IpOiBMaWtld2lzZS4KCgkqIHN0bXQuYyAobmVzdGluZywgbl9vY2N1cnJlbmNlcywgZXhwYW5kX3N0YXJ0X2Nhc2UpOiBMaWtld2lzZS4KCgkqIHRvcGxldi5jIChyZXN0X29mX2NvbXBpbGF0aW9uKTogTGlrZXdpc2UuCgoJKiB0cmVlLmggKGZ1bmN0aW9uX2Nhbm5vdF9pbmxpbmVfcCwgZXhwYW5kX3N0YXJ0X2Nhc2UpOiBMaWtld2lzZS4KCkZyaSBNYXIgIDUgMjM6MTY6NDIgMTk5OSAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogcnM2MDAwLmggKEFTTV9PVVRQVVRfUkVHX3tQVVNILFBPUH0pOiBBZGQgNjQtYml0IHN1cHBvcnQgYW5kIGRvCglub3Qgb3ZlcndyaXRlIEFJWCBsaW5rIHJlZ2lzdGVyIHNhdmUgYXJlYS4KCkZyaSBNYXIgIDUgMjM6MDg6MDEgMTk5OSAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHNfc3VicmVnX2FkZHJlc3MpOiBBY3R1YWxseSBjcmVhdGUgdGhlIFVTRQoJZm9yIHRoZSByZWdpc3Rlciwgbm90IHRoZSBuZXcgbWVtb3J5IGxvY2F0aW9uLgoKRnJpIE1hciAgNSAyMTo0MTowNyAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogcmVsb2FkMS5jIChlbWl0X3JlbG9hZF9pbnNucyk6IElmIHBzZXVkbyB0aGF0IGNhbid0IGJlIHJlcGxhY2VkCgl3aXRoIGl0cyBlcXVpdmFsZW50IGNvbnN0YW50LCBmYWxsIGJhY2sgdG8gcmVsb2FkX2luLgoKRnJpIE1hciAgNSAxMzoyMDozOSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW46IERlbGV0ZSAuZmxvdzIgZGVidWdnaW5nIGZpbGVzLgoKRnJpIE1hciAgNSAxMTozNjoxMSAxOTk5ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL2FybS9hcm0uYyAoYXJtX292ZXJyaWRlX29wdGlvbnMpOiBDaGFuZ2UgZGVmYXVsdCB0YXJnZXQKCWNwdSBzZWxlY3Rpb24gc28gdGhhdCBlbmFibGluZyBUQVJHRVRfQVBDU18zMiBkb2VzIG5vdCBvdmVycmlkZQoJZGVmYXVsdCB0YXJnZXQgQ1BVLgoKRnJpIE1hciAgNSAxOToyNjoyMyAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogc2guaCAoU0xPV19CWVRFX0FDQ0VTUyk6IERlZmluZSB0byAxLgoJKEJPT0xfVFlQRV9TSVpFKTogRGVmaW5lLgoKRnJpIE1hciAgNSAwMjoxNDo1NCAxOTk5ICBKb2huIFdlaGxlICAoam9obkBmZWl0aC5jb20pCgoJKiBmdW5jdGlvbi5jIChhc3NpZ25fc3RhY2tfdGVtcF9mb3JfdHlwZSk6IEFib3J0CglpZiBtb2RlID09IEJsa21vZGUgYW5kIGFsaWduIGlzIGxlc3MgdGhhbgoJQklHR0VTVF9BTElHTk1FTlQgLyBCSVRTX1BFUl9VTklULgoJKGFzc2lnbl9zdGFja190ZW1wX2Zvcl90eXBlKTogUm91bmQgdGhlIHNpemUgcGFyYW1ldGVyCglwYXNzZWQgdG8gYXNzaWduX3N0YWNrX2xvY2FsIGluc3RlYWQgb2Ygc2l6ZSBpdHNlbGYuCgpUaHUgTWFyICA0IDE1OjAwOjM1IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBmbG93LmMgKGRlbGV0ZV91bnJlYWNoYWJsZV9ibG9ja3MpOiBNYXJrIGJsb2NrcyBhcyB0aGV5CglhcmUgcHV0IG9uIHRvIHRoZSB3b3JrbGlzdCwgbm90IGFzIHRoZXkgYXJlIHRha2VuIG9mZi4KClRodSBNYXIgIDQgMDA6MDU6NDQgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZnVuY3Rpb24uYyAoY3VycmVudF9mdW5jdGlvbl9oYXNfY29tcHV0ZWRfanVtcCk6IFJlbW92ZSBkdXBsaWNhdGUKCWRlZmluaXRpb24uCgpXZWQgTWFyICAzIDE5OjA5OjExIDE5OTkgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIG02OGsvbTY4MDIwLWVsZi5oIChJTklUX1NFQ1RJT05fQVNNX09QLCBGSU5JX1NFQ1RJT05fQVNNX09QKTogVW5kZWYuCgkoU1RBUlRGSUxFX1NQRUMsIEVOREZJTEVfU1BFQyk6IERlZmluZSB0byBlbXB0eSBzdHJpbmcuCgoJKiBzcGFyYy9lbGYuaCAoTVVMREkzX0xJQkNBTEwsIERJVkRJM19MSUJDQUxMLCBVRElWREkzX0xJQkNBTEwsCglNT0RESTNfTElCQ0FMTCwgVU1PRERJM19MSUJDQUxMLCBTVERDXzBfSU5fU1lTVEVNX0hFQURFUlMpOiBVbmRlZi4KCShJTklUX1NVQlRBUkdFVF9PUFRBQlMpOiBEZWZpbmUgdG8gZW1wdHkuCgpXZWQgTWFyICAzIDAwOjAwOjM3IDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBzaC5jIChmb3JjZV9pbnRvKTogTmV3IGZ1bmN0aW9uLgoJKGV4cGFuZF9ibG9ja19tb3ZlKTogVXNlIGl0LgoKVHVlIE1hciAgMiAxMDozOTo0MyAxOTk5ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY2NjcC5jIChzdHJ1Y3QgZGVmYXVsdF9pbmNsdWRlKTogQWRkICdpbmNsdWRlZCcgZmllbGQuCgkobWFpbik6IFNldCAnaW5jbHVkZWQnIGZpZWxkIHdoZW4gYSBkZWZhdWx0IGluY2x1ZGUgZGlyZWN0b3J5CglpcyBhZGRlZCB0byB0aGUgY2hhaW4uICBJZiAtdiBpcyBzcGVjaWZpZWQgbGlzdCBhbGwgZGVmYXVsdAoJaW5jbHVkZSBkaXJlY3RvcmllcyB3aGljaCBkbyBub3QgZ2V0IGFwcGVuZGVkIHRvIHRoZSBjaGFpbi4KClR1ZSBNYXIgIDIgMDk6MjQ6MTAgMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiAoZ3h4X2luY2x1ZGVfZGlyKTogUmVuYW1lIHRvCglnY2NfZ3h4X2luY2x1ZGVfZGlyIGluIG9yZGVyIHRvIHByZXZlbnQgaXQgYmVpbmcgb3ZlcnJpZGRlbiBieQoJYSB0b3AgbGV2ZWwgTWFrZWZpbGUuCgkoZ2NjX3Rvb2xkaXIpOiBJZiAkZXhlY19wcmVmaXggIT0gJHByZWZpeCB0aGVuIHVzZSB0aGUKCWRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdHdvIGFzIHRoZSBiYXNpcyBmb3IgZ2NjX3Rvb2xkaXIuCgoJKiBjb25maWd1cmU6IFJlYnVpbGQuCgoJKiBNYWtlZmlsZS5pbjogUmVuYW1lIGd4eF9pbmNsdWRlX2RpciB0byBnY2NfZ3h4X2luY2x1ZGVfZGlyLgoKVHVlIE1hciAgMiAxNjo0NTozMSAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogdW5yb2xsLmMgKGNvcHlfbG9vcF9ib2R5KTogRG9uJ3QgbWFrZSBleHRyYSBjb3BpZXMgb2YKCU5PVEVfSU5TTl9MT09QX0NPTlQgbm90ZXMuCgpUdWUgTWFyICAyIDA3OjQ0OjU2IDE5OTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiB0cmVlLmMgKHNhdmVfdHJlZV9zdGF0dXMpOiBEb24ndCB0cmVhdCBmdW5jdGlvbnMgd2l0aCBubyBjb250ZXh0CglhcyBuZXN0ZWQuCgpUdWUgTWFyICAyIDA5OjM3OjA1IDE5OTkgIFJvYmVydCBMaXBlICA8cm9iZXJ0bGlwZUB1c2EubmV0PgoKCSogTWFrZWZpbGUuaW4gKE1BS0VJTkZPKTogVXNlIG1ha2VpbmZvIGJ1aWx0IGZyb20gc2libGluZwoJdHJlZSB3aGVuIGF2YWlsYWJsZS4KClR1ZSBNYXIgIDIgMTA6MTI6NDggMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogYWxwaGEuYyAoYWxwaGFfY3B1X25hbWUsIGFscGhhX2NwdV9zdHJpbmcsIGFscGhhX3RwX3N0cmluZywKCWFscGhhX2Zwcm1fc3RyaW5nLCBhbHBoYV9mcHRtX3N0cmluZywgYWxwaGFfbWxhdF9zdHJpbmcsCgljdXJyZW50X2Z1bmN0aW9uX2ZpbGUpOiBBZGQgdGhlIGBjb25zdCcga2V5d29yZC4KCShub3JtYWxfbWVtb3J5X29wZXJhbmQpOiBNYXJrIHBhcmFtZXRlciBgbW9kZScgd2l0aAoJQVRUUklCVVRFX1VOVVNFRC4KCShhbHBoYV9leHBhbmRfdW5hbGlnbmVkX2xvYWQpOiBBZGQgYSBkZWZhdWx0IGNhc2UgdG8gYSBzd2l0Y2guCgoJKiBhbHBoYS5oIChhbHBoYV9jcHVfc3RyaW5nLCBhbHBoYV9mcHJtX3N0cmluZywgYWxwaGFfZnB0bV9zdHJpbmcsCglhbHBoYV90cF9zdHJpbmcsIGFscGhhX21sYXRfc3RyaW5nKTogQWRkIHRoZSBgY29uc3QnIGtleXdvcmQuCgkobm9ybWFsX21lbW9yeV9vcGVyYW5kKTogQWRkIHByb3RvdHlwZS4KCgkqIGFscGhhLm1kOiBDYXN0IGFuIGV4cHJlc3Npb24gdG8gYHVuc2lnbmVkIEhPU1RfV0lERV9JTlQnIHdoZW4KCWNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KClR1ZSBNYXIgIDIgMTA6MDA6MjEgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogbWlwcy5jIChhYm9ydF93aXRoX2luc24pOiBNYWtlIGZ1bmN0aW9uIHN0YXRpYywgYWRkIGEgcHJvdG90eXBlLAoJY29uc3RpZnkgMm5kIHBhcmFtZXRlciBhbmQgbWFyayB3aXRoIEFUVFJJQlVURV9OT1JFVFVSTi4KCShjdXJyZW50X2Z1bmN0aW9uX2ZpbGUsIG1pcHNfY3B1X3N0cmluZywgbWlwc19pc2Ffc3RyaW5nLAoJbWlwc19hYmlfc3RyaW5nLCBtaXBzX25vX21pcHMxNl9zdHJpbmcsIG1pcHNfZW50cnlfc3RyaW5nLAoJbWlwc19tb3ZlXzF3b3JkLCBtaXBzX21vdmVfMndvcmRzLCBvdXRwdXRfYmxvY2tfbW92ZSwgbG9hZF9zdG9yZSwKCW92ZXJyaWRlX29wdGlvbnMsIG1ha2VfdGVtcF9maWxlLCBtaXBzMTZfZnBfYXJncyk6IFF1YWxpZnkgYSBjaGFyKgoJd2l0aCB0aGUgYGNvbnN0JyBrZXl3b3JkLgoKCSogbWlwcy5oIChjdXJyZW50X2Z1bmN0aW9uX2ZpbGUsIG1pcHNfY3B1X3N0cmluZywgbWlwc19pc2Ffc3RyaW5nLAoJbWlwc19hYmlfc3RyaW5nLCBtaXBzX2VudHJ5X3N0cmluZywgbWlwc19ub19taXBzMTZfc3RyaW5nLAoJbWlwc19tb3ZlXzF3b3JkLCBtaXBzX21vdmVfMndvcmRzLCBvdXRwdXRfYmxvY2tfbW92ZSk6IExpa2V3aXNlLgoJKGFib3J0X3dpdGhfaW5zbik6IFJlbW92ZSBleHRlcm4gcHJvdG90eXBlLgoKCSogbWlwcy5tZDogUXVhbGlmeSBhIGNoYXIqIHdpdGggdGhlIGBjb25zdCcga2V5d29yZC4KCVJlbW92ZSBtYW55IHVudXNlZCB2YXJpYWJsZXMgbmFtZWQgYGxhYmVsJy4KClR1ZSBNYXIgIDIgMDE6Mjc6NTIgMTk5OSAgSC5KLiBMdSAgKGhqbEBnbnUub3JnKQoKCSogTWFrZWZpbGUuaW4gKGNwcF9pbnN0YWxsX2RpciwgSU5TVEFMTF9DUFAsIFVOSU5TVEFMTF9DUFApOiBOZXcKCXZhcmlhYmxlcy4KCShpbnN0YWxsLWNwcCwgdW5pbnN0YWxsLWNwcCk6IE5ldyB0YXJnZXRzLgoJKGluc3RhbGwtbm9ybWFsKTogRGVwZW5kIG9uICQoSU5TVEFMTF9DUFApLgoJKHVuaW5zdGFsbCk6IERlcGVuZCBvbiAkKFVOSU5TVEFMTF9DUFApLgoJKiBjb25maWd1cmUuaW4gKGNwcF9pbnN0YWxsX2Rpcik6IE5ldywgc3Vic3RpdHV0ZS4KCSh0bWFrZV9maWxlKTogQWRkZWQgdC1pbnN0YWxsLWNwcCBmb3IgLS1lbmFibGUtY3BwLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgkqIGNwcC5zaDogTmV3IGNwcCBzY3JpcHQuCgkqIGNvbmZpZy90LWluc3RhbGwtY3BwOiBOZXcgdGFyZ2V0IGZyYWdtZW50LgoKVHVlIE1hciAgMiAwMTo0MDowMSAxOTk5ICBGcmFueiBTaXJsICA8RnJhbnouU2lybC1rZXJuZWxAbGF1dGVyYmFjaC5jb20+CgkJCSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogY3NlLmMgKGZvbGRfcnR4KTogVXBkYXRlIGNvbW1lbnRzIGZvciAoY29uc3QgKG1pbnVzIChsYWJlbCkgKGxhYmVsKSkpCgljYXNlLgoJKGNzZV9pbnNuKTogQXZvaWQgY3JlYXRpbmcgYSBib2d1cyBSRUdfRVFVQUwgbm90ZSBmb3IKCShjb25zdCAobWludXMgKGxhYmVsKSAobGFiZWwpKSkKCShyZWNvcmRfanVtcF9jb25kKTogRml4IG1pc21hdGNoZWQgcGFyZW4gaW4gY29tbWVudC4KClR1ZSBNYXIgIDIgMDE6MDc6MTIgMTk5OSAgRGFuIE5pY29sYWVzY3UgIDxkYW5uQGdvZHppbGxhLmljcy51Y2kuZWR1PgoKCSogZmluYWwuYyAoZW5kX2ZpbmFsKTogVGhlcmUgYXJlIDExIHdvcmRzIGluIHRoZSAibWFpbiBoZWFkZXIiCglzdHJ1Y3R1cmUsIG5vdCAxMC4KClR1ZSBNYXIgIDIgMDA6MDk6MTggMTk5OSAgTWFyYyBFc3BpZSAgPGVzcGllQGN2cy5vcGVuYnNkLm9yZz4KCgkqIGV4dGVuZC50ZXhpOiBSZWZlcmVuY2UgX19leHRlbnNpb25fXyBpbiB0aGUgaW5kZXguCgpNb24gTWFyICAxIDE5OjA5OjMyIDE5OTkgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluIChDUk9TU19GTE9BVF9IKTogRGVsZXRlLgoJKEZMT0FUX0gpOiBVc2UgZmxvYXRfaF9maWxlLgoJKHJlc3QuY3Jvc3MsIHN0bXAtaW50LWhkcnMpOiBEZWxldGUgZ2Zsb2F0LmggZGVwZW5kZW5jeS4KCShnZmxvYXQuaCk6IERlbGV0ZS4KCShzdG1wLWludC1oZHJzKTogVXNlIEZMT0FUX0ggaW5zdGVhZCBvZiBnZmxvYXQuaC4KCShtb3N0bHljbGVhbik6IERlbGV0ZSBnbG9hdC5oIHJlZmVyZW5jZS4KCShpbnN0YWxsLWNyb3NzLXJlc3QsIGluc3RhbGwtZmxvYXQtaC1jcm9zcywgc3RtcC1oZWFkZXJzKTogVXBkYXRlCgljb21tZW50cy4KCSogY29uZmlndXJlLmluIChzcGFyY3Y5LSotc29sYXJpczIqKTogU2V0IGZsb2F0X2Zvcm1hdCB0byBub25lLgoJKHNwYXJjLSotc29sYXJpczIqKTogU2V0IGZsb2F0X2Zvcm1hdCB0byBub25lIGZvciAyLjUgYW5kIGhpZ2hlci4KCShmbG9hdF9oX2ZpbGUpOiBTZXQgZnJvbSBmbG9hdF9mb3JtYXQuICBTdWJzdGl0dXRlIGludG8gTWFrZWZpbGUuaW4uCgkoZmxvYXRfZm9ybWF0KTogTm8gbG9uZ2VyIHN1YnN0aXR1dGUgaW50byBNYWtlZmlsZS5pbi4KCSogY3Jvc3MtbWFrZSAoRkxPQVRfSCk6IERlbGV0ZS4KCSogY29uZmlnL21pcHMvdC1jcm9zczY0IChGTE9BVF9IKTogRGVsZXRlLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgpNb24gTWFyICAxIDE2OjM2OjE4IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIG1pcHMubWQgKGRpdl90cmFwX25vcm1hbCwgZGl2X3RyYXBfbWlwczE2KTogUmVxdWlyZSB0aGUgZGVwZW5kZW50CglpbnNuIHRvIGJlIGFuIElOU04gYmVmb3JlIGxvb2tpbmcgYXQgaXRzIHBhdHRlcm4uCgpNb24gTWFyICAxIDE1OjAzOjUxIDE5OTkgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9tNjhrL2xiMXNmNjguYXNtICh1ZGl2c2kzKTogQ2hhbmdlIGptaSB0byBqY3MuICBGaXggY29tbWVudHMuCgkqIGNvbmZpZy9tNjhrL202OGsuaCAoTEVHSVRJTUFURV9JTkRFWF9SRUdfUCk6IFJlamVjdCBTSUdOX0VYVEVORCBvZgoJSEltb2RlIHJlZyB3aGVuIFRBUkdFVF81MjAwLgoKTW9uIE1hciAgMSAyMTo0NDozMCAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCUZyb20gVG9zaGl5YXN1IE1vcml0YToKCSogc2guaCAoQ0FDSEVfTE9HKTogU0gyIGhhcyBjYWNoZSwgdG9vLgoKTW9uIE1hciAgMSAxNDoyMzozNiAxOTk5ICBDYXRoZXJpbmUgTW9vcmUgIDxjbG1AY3lnbnVzLmNvbT4KCgkqIHRvcGxldi5jIChjb21waWxlX2ZpbGUpOiBEaXNhYmxlIC1mZnVuY3Rpb24tc2VjdGlvbnMgYW5kCglkZWJ1Z2dpbmcgd2FybmluZyBpZiB0aGUgb2JqZWN0IGZvcm1hdCBpcyBlbGYuCgpNb24gTWFyICAxIDExOjQ2OjI1IDE5OTkgIFZsYWRpbWlyIE4uIE1ha2Fyb3YgIDx2bWFrYXJvdkBjeWdudXMuY29tPgoKCSogY29uZmlnL2g4MzAwL2g4MzAwLmMgKHByaW50X29wZXJhbmQpOiBVc2UgMTYgYml0IGFkZHJlc3NpbmcKCXdoZW4gdGhlIGRhdGEgaW4gOC1iaXQgYXJlYSBhbmQgY2FuIG5vdCBiZSBhZGRyZXNzZWQgYnkgOC1iaXQuCgpTdW4gRmViIDI4IDE2OjQwOjAwIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBmbG93LmMgKGNyZWF0ZV9iYXNpY19ibG9jayk6IERpc3JlZ2FyZCBpbnRlZ3JhdGVkIGJiIG5vdGVzLgoKU3VuIEZlYiAyOCAxNTo1NzowNiAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogc3BhcmMubWQgKGJsb2NrYWdlLCBub25sb2NhbF9nb3RvX3JlY2VpdmVyKTogU2V0IGxlbmd0aCB0byAwLgoKU3VuIEZlYiAyOCAxNDo0Nzo1MyAxOTk5ICBBcnR1cm8gTW9udGVzICA8bWl0b3N5c0Bjb2xvbXNhdC5jb20uY28+CgoJKiBjb25maWcvaTM4Ni90LXNjbzVnYXMgKGNydGkubyk6IE5ldyB0YXJnZXQuCgpTdW4gRmViIDI4IDE1OjEwOjE3IDE5OTkgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIHJzNjAwMC5tZCAoZWxmX2hpZ2gsIG1vdnNpX2dvdCwgKm1vdnNpX2dvdF9pbnRlcm5hbCwKCSptb3ZzaV9nb3RfaW50ZXJuYWxfbWVtLCBHT1Qgc3BsaXR0ZXIsIG1vdmRmX2hhcmRmbG9hdDMyLAoJbW92ZGZfc29mdGZsb2F0MzIsIG1vdmRmX2hhcmRmbG9hdDY0LCBtb3ZkZl9zb2Z0ZmxvYXQ2NCwKCWxvYWRfbXVsdGlwbGUsIGFsbG9jYXRlX3N0YWNrLCBjYWxsX2luZGlyZWN0X2FpeDMyLAoJY2FsbF9pbmRpcmVjdF9haXg2NCwgY2FsbF92YWx1ZV9pbmRpcmVjdF9haXgzMiwKCWNhbGxfdmFsdWVfaW5kaXJlY3RfYWl4NjQsIGNhbGxfaW5kaXJlY3RfbnQsCgljYWxsX3ZhbHVlX2luZGlyZWN0X250KTogVXNlIGdwY19yZWdfb3BlcmFuZCBpbnN0ZWFkIG9mCglyZWdpc3Rlcl9vcGVyYW5kLgoKU3VuIEZlYiAyOCAxNToxMDoxNyAxOTk5ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAY3lnbnVzLmNvbT4KCgkqIHJzNjAwMC5tZCAob25lX2NtcGxzaTIsIGFuZHNpMywgaW9yc2kzLCB4b3JzaTMsICplcXZzaTMsCgkqYW5kY3NpMywgKmlvcmNzaTMsICpuYW5kc2kzLCAqbm9yc2kzKTogQWRkIGFsdGVybmF0aXZlcyB0byB1c2UgQ1IKCW90aGVyIHRoYW4gY3IwLgoJKiByczYwMDAuYyAoYW5keyw2NH1fb3BlcmFuZCk6IElmIHRoZSB1c2VyIGRpZCAtZmZpeGVkLWNyMCwgZG9uJ3QKCWFsbG93IGFuZGkuIG9yIGFuZGlzLiB3aGljaCBhbHdheXMgc2V0IGNyMC4KClN1biBGZWIgMjggMDE6MTU6MDQgMTk5OSAgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpTdW4gRmViIDI4IDAyOjAwOjM4IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGludm9rZS50ZXhpOiBVcGRhdGUgaW5mb3JtYXRpb24gZm9yIFBBIHNjaGVkdWxpbmcuCgpTYXQgRmViIDI3IDIzOjIxOjQ3IDE5OTkgIEplcnJ5IFF1aW5uICA8anF1aW5uQG5vcnRlbG5ldHdvcmtzLmNvbT4KCQkJICBNaWtlIFN0dW1wICA8bXJzQHdycy5jb20+CgoJKiBwYS5jIChvdmVycmlkZV9vcHRpb25zKTogQ2hhbmdlIGRlZmF1bHQgdG8gNzEwMExDLgoKCSogcGEuaCAoUkVHX0FMTE9DX09SREVSKTogQ2hhbmdlIG9yZGVyIHRvIGFsbG9jYXRlIGxlZnQgaGFsZiBvZgoJZmxvYXQgcmVncyBiZWZvcmUgcmlnaHQgaGFsZiBvZiBmbG9hdCByZWdzLgoKU2F0IEZlYiAyNyAyMjo0ODozOCAxOTk5ICBILkouIEx1ICAoaGpsQGdudS5vcmcpCgkJCSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZnJhbWUuaDogVXBkYXRlIHNvbWUgY29tbWVudHMuCgkqIGRlZmF1bHRzLmggKFRBUkdFVF9BVFRSSUJVVEVfV0VBSyk6IERlZmluZS4KCSogY3J0c3R1ZmYuYyAoX19yZWdpc3Rlcl9mcmFtZV9pbmZvLCBfX2RlcmVnaXN0ZXJfZnJhbWVfaW5mbyk6IERlY2xhcmUKCXVzaW5nIFRBUkdFVF9XRUFLX0FUVFJJQlVURS4KCShfX2RvX2dsb2JhbF9kdG9yc19hdXgpOiBDaGVjayBpZiBfX2RlcmVnaXN0ZXJfZnJhbWVfaW5mbyBpcwoJemVybyBiZWZvcmUgY2FsbGluZyBpdC4KCShfX2RvX2dsb2JhbF9kdG9ycyk6IExpa2V3aXNlLgoJKGZyYW1lX2R1bW15KTogQ2hlY2sgaWYgX19yZWdpc3Rlcl9mcmFtZV9pbmZvIGlzIHplcm8gYmVmb3JlCgljYWxsaW5nIGl0LgoJKF9fZnJhbWVfZHVtbXkpOiBMaWtld2lzZS4KClNhdCBGZWIgMjcgMTk6MTg6MjQgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogU0VSVklDRTogVXBkYXRlIGZyb20gdGhlIEZTRi4KClNhdCBGZWIgMjcgMTQ6MzE6MjIgMTk5OSAgQXJ0dXJvIE1vbnRlcyAgPG1pdG9zeXNAY29sb21zYXQuY29tLmNvPgoKCSogY29uZmlnL2kzODYvdC1zY281IChjcnRpLm8pOiBOZXcgdGFyZ2V0LgoJKiBjb25maWcvaTM4Ni9zY281LmggKFNUQVJURklMRV9TUEVDKTogSW5jbHVkZSBjcnRpLm8gd2hlbgoJbGlua2luZyAtc2hhcmVkLgoJKiBjb25maWd1cmUuaW4gKGlbMzQ1NjddODYtKi1zY28zLjJ2NSopOiBBZGQgY3J0aS5vLgoKU2F0IEZlYiAyNyAwMToxMjo0MCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBtZC50ZXhpIChwcm9sb2d1ZSxlcGlsb2d1ZSk6IERvY3VtZW50IG5hbWVkIHBhdHRlcm5zLgoKRnJpIEZlYiAyNiAxOTozMToyNSAxOTk5ICBEYXZlIExvdmUgIDxmeEBnbnUub3JnPgoKCSogbWQudGV4aSwgaW52b2tlLnRleGk6IEZpeCB1bnRlcm1pbmF0ZWQgQHhyZWZzLgoKRnJpIEZlYiAyNiAxNTozMzo0NSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZ2VuYXR0cnRhYi5jIChzaW1wbGlmeV9rbm93aW5nKTogRml4IHVuaW5pdGlhbGl6ZWQgcmVhZAoJaW4gRmViIDIxIGNoYW5nZS4KCgkqIGdlbmV4dHJhY3QuYyAobWFpbik6IENsZWFyIHJlY29nX29wZXJhbmRzIGJlZm9yZSBleHRyYWN0aW5nLgoKRnJpIEZlYiAyNiAwMjoyNDo1NyAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjLXByYWdtYS5jIChhZGRfd2Vhayk7IERlbGV0ZS4gIE1vdmVkIGludG8uLi4KCSogdmFyYXNtLmMgKGFkZF93ZWFrKTogTmV3IGV4dGVybmFsIGZ1bmN0aW9uLgoJKGRlY2xhcmVfd2Vhayk6IElmIEhBTkRMRV9QUkFHTUFfV0VBSywgdGhlbiBhZGQgdGhlIGZ1bmN0aW9uIHRvCgl0aGUgbGlzdCBvZiB3ZWFrIGZ1bmN0aW9ucy4KCSogYy1wcmFnbWEgKGFkZF93ZWFrKTogRGVjbGFyZS4KClRodSBGZWIgMjUgMjM6NDM6NTkgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCglGbG93IHJld3JpdGUgdG8gdXNlIGJhc2ljIGJsb2NrIHN0cnVjdHVyZXMgYW5kIGVkZ2UgbGlzdHM6CgoJKiBiYXNpYy1ibG9jay5oICh4X2Jhc2ljX2Jsb2NrX2hlYWQsIHhfYmFzaWNfYmxvY2tfZW5kKTogS2lsbC4KCShiYXNpY19ibG9ja19jb21wdXRlZF9qdW1wX3RhcmdldCwgYmFzaWNfYmxvY2tfbGl2ZV9hdF9zdGFydCk6IEtpbGwuCgkoc3RydWN0IGVkZ2VfZGVmKTogTmV3LgoJKHN0cnVjdCBiYXNpY19ibG9ja19kZWYpOiBOZXcuCgkoYmFzaWNfYmxvY2tfaW5mbyk6IE5ldy4KCShCTE9DS19IRUFELCBCTE9DS19FTkQpOiBVcGRhdGUuCgkoRU5UUllfQkxPQ0tfUFRSLCBFWElUX0JMT0NLX1BUUik6IE5ldy4KCSh1aWRfYmxvY2tfbnVtYmVyKTogS2lsbC4KCShiYXNpY19ibG9ja19mb3JfaW5zbiwgQkxPQ0tfRk9SX0lOU04pOiBOZXcuCgkoQkxPQ0tfTlVNKTogVXBkYXRlLgoJKiBmbG93LmMgKFhOTUFMTE9DKTogS2lsbC4KCShtYXhfdWlkX2Zvcl9mbG93KTogS2lsbC4KCSh1aWRfYmxvY2tfbnVtYmVyKTogS2lsbC4KCSh1aWRfdm9sYXRpbGUpOiBUdXJuIGludG8gYSBiaXRtYXAuCgkoU0VUX0lOU05fVk9MQVRJTEUpOiBOZXcuCgkoYmFzaWNfYmxvY2tfaW5mbyk6IE5ldy4KCShlbnRyeV9leGl0X2Jsb2Nrcyk6IE5ldy4KCSh4X2Jhc2ljX2Jsb2NrX2hlYWQsIHhfYmFzaWNfYmxvY2tfZW5kKTogS2lsbC4KCShiYXNpY19ibG9ja19jb21wdXRlZF9qdW1wX3RhcmdldCwgYmFzaWNfYmxvY2tfbGl2ZV9hdF9zdGFydCk6IEtpbGwuCgkoZmxvd19pbnRfbGlzdF9ibG9ja3MsIGJhc2ljX2Jsb2NrX3N1Y2MsIGJhc2ljX2Jsb2NrX3ByZWQpOiBLaWxsLgoJKGJhc2ljX2Jsb2NrX2xvb3BfZGVwdGgpOiBLaWxsLgoJKGJhc2ljX2Jsb2NrX2Zvcl9pbnNuKTogTmV3LgoJKGZpbmRfYmFzaWNfYmxvY2tzKTogU3BsaXQgb3V0IGluaXRpYWwgYmxvY2sgY291bnRpbmcgaW50bwoJY291bnRfYmFzaWNfYmxvY2tzLiAgQ2FsbCBmdW5jdGlvbnMgc3BsaXQgb3V0IG9mIGZpbmRfYmFzaWNfYmxvY2tzXzEuCgkoY291bnRfYmFzaWNfYmxvY2tzKTogTmV3LgoJKGZpbmRfYmFzaWNfYmxvY2tzXzEpOiBTcGxpdCBvdXQgZWRnZSByZWNvZ25pdGlvbiwgdW5yZWFjaGFibGUKCWJsb2NrIGRlbGV0aW9uLgoJKGNyZWF0ZV9iYXNpY19ibG9jayk6IE5ldy4KCShjb21wdXRlX2JiX2Zvcl9pbnNuKTogTmV3LgoJKGNsZWFyX2VkZ2VzKTogTmV3LgoJKGZyZWVfYmJfbWVtb3J5KTogS2lsbC4KCShhZGRfZWRnZSwgYWRkX2VkZ2VfdG9fbGFiZWwpOiBLaWxsLgoJKG1hcmtfbGFiZWxfcmVmKTogS2lsbC4KCShtYWtlX2VkZ2VzKTogUmV3cml0ZSB0byB1c2UgZWRnZSBsaXN0cy4KCShtYWtlX2VkZ2UsIG1ha2VfbGFiZWxfZWRnZSk6IE5ldy4KCShtYXJrX2NyaXRpY2FsX2VkZ2VzKTogTmV3LgoJKHNwbGl0X2VkZ2UsIGluc2VydF9pbnNuX29uX2VkZ2UpOiBOZXcuCgkoY29tbWl0X29uZV9lZGdlX2luc2VydGlvbiwgY29tbWl0X2VkZ2VfaW5zZXJ0aW9ucyk6IE5ldy4KCShkZWxldGVfdW5yZWFjaGFibGVfYmxvY2tzKTogUmV3cml0ZSB0byB1c2UgZWRnZSBsaXN0cy4KCVNwbGl0IG91dCBFSCByZWdpb24gbWFuaXB1bGF0aW9uIGludG8gZGVsZXRlX2VoX3JlZ2lvbnMuCglDYWxsIHRpZHlfZmFsbHRocnVfZWRnZSBhbmQgbWVyZ2VfYmxvY2tzLgoJKGRlbGV0ZV9laF9yZWdpb25zKTogTmV3LgoJKGRlbGV0ZV9ub3RlX3ApOiBOZXcuCgkoZGVsZXRlX2luc25fY2hhaW4pOiBOZXcuCgkoZGVsZXRlX2Jsb2NrKTogU3BsaXQgb3V0IGNvZGUgaW50byBkZWxldGVfaW5zbl9jaGFpbiBhbmQKCXRpZHlfZmFsbHRocnVfZWRnZS4gIFVwZGF0ZSBlZGdlIGxpc3RzLgoJKGV4cHVuZ2VfYmxvY2spOiBOZXcuCgkoZmxvd19kZWxldGVfaW5zbik6IE5ldz8KCShjYW5fZGVsZXRlX2xhYmVsX3ApOiBOZXc/CgkobWVyZ2VfYmxvY2tzX25vbW92ZSwgbWVyZ2VfYmxvY2tzKTogTmV3LgoJKHRpZHlfZmFsbHRocnVfZWRnZSk6IE5ldy4KCShjYWxjdWxhdGVfbG9vcF9kZXB0aCk6IE5ldy4KCShsaWZlX2FuYWx5c2lzKTogQWxsb2NhdGUgYW5kIGZyZWUgdWlkX3ZvbGF0aWxlLgoJKGZyZWVfYmFzaWNfYmxvY2tfdmFycyk6IFVwZGF0ZSBmb3IgbmV3IHN0cnVjdHVyZXMuCgkocmVjb3JkX3ZvbGF0aWxlX2luc25zKTogVXNlIFNFVF9JTlNOX1ZPTEFUSUxFLgoJKG1hcmtfcmVnc19saXZlX2F0X2VuZCk6IFRpZHkgRVhJVF9JR05PUkVfU1RBQ0sgdXNhZ2UuCgkobWFya191c2VkX3JlZ3MpOiBMaWtld2lzZS4KCShsaWZlX2FuYWx5c2lzXzEpOiBVc2UgYmIgZ2xvYmFsX2xpdmVfYXRfc3RhcnQsIGdsb2JhbF9saXZlX2F0X2VuZCwKCWxvY2FsX3NldCByZWdzZXRzLiAgVXNlIGJiLT5hdXggdG8gc3RvcmUgbmV3X2xpdmVfYXRfZW5kLiAgQmVnaW4KCWxpZmUgcHJvcGFnYXRpb24gZnJvbSBFWElUX0JMT0NLIHJhdGhlciB0aGFuIGxhc3QgYmxvY2suICBDbGVhcgoJcmVnc19ldmVyX2xpdmUgYWZ0ZXIgbWFya19yZWdzX2xpdmVfYXRfZW5kLgoJKGFsbG9jYXRlX2Zvcl9saWZlX2FuYWx5c2lzKTogVXBkYXRlIGZvciBuZXcgc3RydWN0dXJlcy4KCShwcm9wYWdhdGVfYmxvY2spOiBTcGxpdCBvdXQgbG9vcCBkZXB0aCBjYWxjdWxhdGlvbiB0bwoJY2FsY3VsYXRlX2xvb3BfZGVwdGguCgkocmVnbm9fdW5pbml0aWFsaXplZCk6IFVzZSBiYi0+Z2xvYmFsX2xpdmVfYXRfc3RhcnQuCgkocmVnbm9fY2xvYmJlcmVkX2F0X3NldGptcCk6IExpa2V3aXNlLgoJKGR1bXBfYmJfZGF0YSk6IExpa2V3aXNlLgoJKGZpbmRfYXV0b19pbmMpOiBVc2UgQkxPQ0tfRk9SX0lOU04gaW5zdGVhZCBvZiBCTE9DS19OVU0uCgkoZHVtcF9mbG93X2luZm8pOiBVcGRhdGUgZm9yIG5ldyBzdHJ1Y3R1cmVzLgoJKGR1bXBfZWRnZV9pbmZvKTogTmV3LgoJKHByaW50X3J0bF93aXRoX2JiKTogVXBkYXRlIGZvciBuZXcgc3RydWN0dXJlcy4KCShjb21wdXRlX3ByZWRzX3N1Y2NzKTogRG8gbm8gd29yayAtLSBjb252ZXJ0IGVkZ2UgbGlzdHMuCgkoc2V0X2Jsb2NrX2Zvcl9pbnNuKTogRnJvbSBjb3Jwc2Ugb2Ygb2xkIHNldF9ibG9ja19udW0uCgkoc2V0X2Jsb2NrX251bSk6IENhbGwgaXQuCgoJKiBydGwuYyAobm90ZV9pbnNuX25hbWUpOiBBZGQgTk9URV9JTlNOX0JBU0lDX0JMT0NLLgoJKiBydGwuaCAocnR1bmlvbl9kZWYpOiBBZGQgYmIgZW50cnkuCgkoTk9URV9CQVNJQ19CTE9DSyk6IE5ldy4KCShOT1RFX0lOU05fQkFTSUNfQkxPQ0spOiBOZXcuCgoJKiB2YXJyYXkuaCAodmFycmF5X2RhdGFfdGFnKTogQWRkIGJiIGVudHJ5LgoJKFZBUlJBWV9CQl9JTklULCBWQVJSQVlfQkIpOiBOZXcuCgoJKiBlbWl0LXJ0bC5jIChlbWl0X2xhYmVsX2JlZm9yZSk6IE5ldy4KCgkqIGV4Y2VwdC5jIChleHBhbmRfcmV0aHJvdyk6IERlbGV0ZSBpbnNucyBmb2xsb3dpbmcgdGhlIGNhbGwgdG8KCXJldGhyb3cuICBQdXQgdGhlIFJFR19FSF9SRVRIUk9XIG9uIHRoZSBjYWxsLgoKCSoganVtcC5jIChyZXR1cm5qdW1wX3AsIHJldHVybmp1bXBfcF8xKTogTmV3LgoKCSogZXhwci5oIChub25sb2NhbF9nb3RvX2hhbmRsZXJfbGFiZWxzKTogTmV3IGRlY2xhcmF0aW9uLgoJKiBmdW5jdGlvbi5jIChub25sb2NhbF9nb3RvX2hhbmRsZXJfbGFiZWxzKTogRGVmaW5lIGl0LgoJKHB1c2hfZnVuY3Rpb25fY29udGV4dF90byk6IFNhdmUgaXQuCgkocG9wX2Z1bmN0aW9uX2NvbnRleHRfZnJvbSk6IFJlc3RvcmUgaXQuCgkoaW5pdF9mdW5jdGlvbl9zdGFydCk6IENsZWFyIGl0LgoJKG5vbmxvY2FsX2xhYmVsX3J0eF9saXN0KTogS2lsbC4KCSogZnVuY3Rpb24uaCAoc3RydWN0IGZ1bmN0aW9uKTogQWRkIHN0b3JhZ2Ugc3BhY2UgZm9yIGl0LgoJKiBzdG10LmMgKGV4cGFuZF9ubF9oYW5kbGVyX2xhYmVsKTogUmV0dXJuIHRoZSBuZXcgbGFiZWwuCgkoZXhwYW5kX25sX2dvdG9fcmVjZWl2ZXJzKTogQ29sbGVjdCBhIGxpc3Qgb2YgdGhlbSBpbgoJbm9ubG9jYWxfZ290b19oYW5kbGVyX2xhYmVscy4KCgkqIE1ha2VmaWxlLmluIChwcmludC1ydGwubyk6IERlcGVuZCBvbiBiYXNpYy1ibG9jay5oLgoJKGZsb3cubyk6IERlcGVuZCBvbiBpbnNuLWZsYWdzLmguCgoJKiBmdW5jdGlvbi5jICh0aHJlYWRfcHJvbG9ndWVfYW5kX2VwaWxvZ3VlX2luc25zKTogRG8gbm90CgloYWxmLWhlYXJ0ZWRseSB1cGRhdGUgYmIgc3RydWN0dXJlcy4KCgkqIHRvcGxldi5jOiBBZGQgZmxvdzIgZHVtcCBhcyAtZHcuCgkocmVzdF9vZl9jb21waWxhdGlvbik6IEZpbmlzaCAuZ3JlZyBiZWZvcmUgZmxvdzIuCgoJKiBncmFwaC5jIChkcmF3X2VkZ2UpOiBIYW5kbGUgY2xhc3MgMy4KCShwcmludF9ydGxfZ3JhcGhfd2l0aF9iYik6IE1ha2UgYWJub3JtYWwgZWRnZXMgcmVkIGNsYXNzIDIsCgljaGFuZ2Ugbm9uLWZhbGwtdGhydSBidXQgYWRqYWNlbnQgdG8gZ3JlZW4gY2xhc3MgMy4gIFVwZGF0ZQoJdG8gdXNlIG5ldyBzdHJ1Y3R1cmVzLgoKCSogcHJpbnQtcnRsLmMgKHByaW50X3J0eCk6IEhhbmRsZSBOT1RFX0lOU05fQkFTSUNfQkxPQ0suCgoJKiByZWctc3RhY2suYyAoQkxPQ0tfTlVNKTogQ29udmVydCB0byBmdW5jdGlvbi4gIEFib3J0IGlmCglibG9ja19udW1iZXIgaXMgLTEuCgkocmVnX3RvX3N0YWNrKTogSW5pdGlhbGl6ZSBibG9ja19udW0gdG8gLTEuCgoJKiBjb21iaW5lLmMgKHNldF9ub256ZXJvX2JpdHNfYW5kX3NpZ25fY29waWVzKTogVXBkYXRlIHJlZmVyZW5jZQoJdG8gYmFzaWNfYmxvY2tfbGl2ZV9hdF9zdGFydCB0byBiYi0+Z2xvYmFsX2xpdmVfYXRfc3RhcnQuCgkodHJ5X2NvbWJpbmUpOiBMaWtld2lzZS4KCShyZWdfZGVhZF9hdF9wKTogTGlrZXdpc2UuCgkqIGdsb2JhbC5jIChnbG9iYWxfY29uZmxpY3RzKTogTGlrZXdpc2UuCglIYW5kbGUgc3RhY2sgcmVncyBvbiBhbGwgYWJub3JtYWwgZWRnZXMsIG5vdCBqdXN0IGNvbXB1dGVkIGp1bXBzLgoJKG1hcmtfZWxpbWluYXRpb24pOiBVcGRhdGUgcmVmZXJlbmNlIHRvIGJhc2ljX2Jsb2NrX2xpdmVfYXRfc3RhcnQuCgkoYnVpbGRfaW5zbl9jaGFpbik6IExpa2V3aXNlLgoJKiBoYWlmYS1zY2hlZC5jIChoYWlmYV9lZGdlKTogUmVuYW1lIGZyb20gZWRnZSBmb3IgY29uZmxpY3QuCgkoaXNfY2ZnX25vbnJlZ3VsYXIpOiBMb29rIGF0IG5vbmxvY2FsX2dvdG9faGFuZGxlcl9sYWJlbHMgaW5zdGVhZAoJb2Ygbm9ubG9jYWxfbGFiZWxfcnR4X2xpc3QuCgkoY2hlY2tfbGl2ZV8xKTogVXBkYXRlIHJlZmVyZW5jZSB0byBiYXNpY19ibG9ja19saXZlX2F0X3N0YXJ0LgoJKHVwZGF0ZV9saXZlXzEpOiBMaWtld2lzZS4KCShmaW5kX3ByZV9zY2hlZF9saXZlKTogTGlrZXdpc2UuCgkoZmluZF9wb3N0X3NjaGVkX2xpdmUpOiBMaWtld2lzZS4KCSogbG9jYWwtYWxsb2MuYyAodXBkYXRlX2VxdWl2X3JlZ3MpOiBMaWtld2lzZS4KCShibG9ja19hbGxvYyk6IExpa2V3aXNlLgoJKiByZWxvYWQxLmMgKHJlbG9hZCwgcmVsb2FkX2NvbWJpbmUpOiBMaWtld2lzZS4KCSogcmVnbW92ZS5jIChtYXJrX2ZsYWdzX2xpZmVfem9uZXMpOiBMaWtld2lzZS4KCSogcmVzb3VyY2UuYyAobWFya190YXJnZXRfbGl2ZV9yZWdzKTogTGlrZXdpc2UuCgkqIHNjaGVkLmMgKHNjaGVkdWxlX2Jsb2NrKTogTGlrZXdpc2UuCgoJKiByZWdjbGFzcy5jIChyZWdzZXRfcmVsZWFzZV9tZW1vcnkpOiBEb24ndCBmcmVlCgliYXNpY19ibG9ja19saXZlX2F0X3N0YXJ0LgoKCSogdW5yb2xsLmMgKGNvcHlfbG9vcF9ib2R5KTogRG9uJ3QgZHVwbGljYXRlIE5PVEVfSU5TTl9CQVNJQ19CTE9DSy4KClRodSBGZWIgMjUgMjE6MzI6MzQgMTk5OSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZml4aW5jLndyYXA6IEFsc28gaGFuZGxlIHN0cnVjdCBxdWV1ZSBpbiBzeXMvc3RyZWFtLmguCgkqIGZpeGluYy5zdnI0OiBMaWtld2lzZS4KCgkqIGR3YXJmMm91dC5jIChzY29wZV9kaWVfZm9yKTogU2V0IHNjb3BlX2RpZSB0byBjb21wX3VuaXRfZGllCglyYXRoZXIgdGhhbiBhc3NlcnRpbmcgaXQuCgpUaHUgRmViIDI1IDIzOjMzOjA2IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNwcGV4cC5jIChsZWZ0X3NoaWZ0LCByaWdodF9zaGlmdCwgcGFyc2VfY2hhcmNvbnN0LCBDT01QQVJFLAoJY3BwX3BhcnNlX2V4cHIpOiBSZXBsYWNlIHVzZXMgb2YgbG9uZy9IT1NUX0JJVFNfUEVSX0xPTkcgd2l0aAoJSE9TVF9XSURFU1RfSU5UL0hPU1RfQklUU19QRVJfV0lERVNUX0lOVC4KCgkqIE1ha2VmaWxlLmluIChjcHBtYWluLm8sIGNwcGxpYi5vLCBjcHBoYXNoLm8sIGNwcGFsbG9jLm8sCgljcHBlcnJvci5vLCBjcHBleHAubywgY3BwZmlsZXMubywgY3BwaW5pdC5vLCBmaXgtaGVhZGVyLm8sCglzY2FuLWRlY2xzLm8pOiBEb24ndCBkZXBlbmQgb24gbWFjaG1vZGUuaC4KCgkqIGNwcGV4cC5jOiBEb24ndCBkZWZpbmUgQ0hBUl9CSVQgb3IgSE9TVF9CSVRTX1BFUl9XSURFX0lOVCBhbnltb3JlLgoJUmVwbGFjZSBhbGwgaW5zdGFuY2VzIG9mIEhPU1RfV0lERV9JTlQgd2l0aCBIT1NUX1dJREVTVF9JTlQuCgoJKiBjcHBmaWxlcy5jOiBMaWtld2lzZS4KCgkqIGNwcGxpYi5jOiBMaWtld2lzZS4KCgkqIGNwcGxpYi5oOiBMaWtld2lzZS4gIEFsc28gZG9uJ3QgaW5jbHVkZSBtYWNobW9kZS5oIGFueW1vcmUuCgpUaHUgRmViIDI1IDE4OjQ2OjI2IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBnY2MuYyAoZGVmYXVsdF9jb21waWxlcnMpOiBEZWZpbmUgX19GQVNUX01BVEhfXyB3aGVuIGFwcHJvcHJpYXRlLgoJKiBvYmpjL2xhbmctc3BlY3MuaDogTGlrZXdpc2UuCgpUaHUgRmViIDI1IDE2OjE5OjQzIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHBhLm1kIChjYWxsIHBhdHRlcm5zKTogTG9zZSB1bnVzZWQgYXJndW1lbnQgdG8gb3V0cHV0X2NhbGwuCgoJKiBwcmludC1ydGwuYyAocHJpbnRfcnRsKTogUHJpbnQgL2ogYW5kIC9jIGZvciB0aGUganVtcC9jYWxsIGZsYWdzLgoKMTk5OS0wMi0yNSAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5jb2x1bWJpYS5lZHU+CgoJKiBjcHBoYXNoLmMgKGluc3RhbGwpOiBSZW5hbWUgdG8gY3BwX2luc3RhbGwsIGFkZCBjcHBfcmVhZGVyKgoJZmlyc3QgYXJndW1lbnQuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgoJKGhhc2h0YWIpOiBSZW1vdmVkLgoJKGNwcF9sb29rdXAsIGNwcF9pbnN0YWxsKTogQ2hhbmdlIGFsbCByZWZzIHRvIGhhc2h0YWIgdG8KCXBmaWxlLT5oYXNodGFiLgoJKGNwcF9oYXNoX2NsZWFudXApOiBSZW1vdmVkLgoJKiBjcHBoYXNoLmg6IEFkanVzdCBwcm90b3R5cGVzLgoJKiBjcHBsaWIuaCAoc3RydWN0IGNwcF9yZWFkZXIpOiBBZGQgaGFzaHRhYiBwb2ludGVyLgoJKiBjcHBpbml0LmMgKGNwcF9yZWFkZXJfaW5pdCk6IEFsc28gYWxsb2NhdGUgc3BhY2UgZm9yIHRoZQoJaGFzaHRhYi4KCShjcHBfY2xlYW51cCk6IERlbGV0ZSBhbGwgbWFjcm9zIGFuZCBmcmVlIHRoZSBoYXNodGFiLgoKVGh1IEZlYiAyNSAyMTo1Mjo1NCAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogc2guaCAoUEFTU19JTl9SRUdfUCk6IEZvciBUQVJHRVRfSElUQUNISSwgZG9uJ3QgcGFzcyBzdHJ1Y3R1cmVzCglpbiByZWdpc3RlcnMuCgoJKiBleHByLmggKFBSRVRFTkRfT1VUR09JTkdfVkFSQVJHU19OQU1FRCk6IFByb3ZpZGUgZGVmYXVsdCBkZWZpbml0aW9uLgoJKiBmdW5jdGlvbi5jIChhc3NpZ25fcGFybXMpOiBIb25vdXIgUFJFVEVORF9PVVRHT0lOR19WQVJBUkdTX05BTUVELgoJKiBjYWxscy5jIChleHBhbmRfY2FsbCk6IExpa2V3aXNlLgoKCSogc2guYyAoc2hfZXhwYW5kX3Byb2xvZ3VlKTogRm9yIFRBUkdFVF9ISVRBQ0hJLCBkb24ndCBwdXNoIHZhcmFyZ3MgLwoJc3RkYXJnIGFyZ3VtZW50cy4KCSogc2guaCAoQ1BQX1NQRUMpOiBBZGQgLURfX0hJVEFDSElfXyBmb3IgLW1oaXRhY2hpLgoJKEZVTkNUSU9OX0FSRyk6IEZvciBUQVJHRVRfSElUQUNISSwgZG9uJ3QgcGFzcyB1bm5hbWVkCglhcmd1bWVudHMgaW4gcmVnaXN0ZXJzLgoJKFBSRVRFTkRfT1VUR09JTkdfVkFSQVJHU19OQU1FRCk6IERlZmluZS4KCSogdmEtc2guaCAoZW50aXJlIGZpbGUpOiBJZiBfX0hJVEFDSElfXyBpcyBkZWZpbmVkLCB1c2Ugc2hbMTIzXQoJZmxhdm9yIHZhcmFyZ3MuCgpUaHUgRmViIDI1IDE0OjMyOjQwIDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNzZS5jIChkdW1wX2NsYXNzKTogUmV2ZXJ0IGxhc3QgY2hhbmdlIGFuZCBtYWtlIHRoZSBwcm90b3R5cGUKCWV4dGVybi4KClRodSBGZWIgMjUgMTk6MTM6NDIgMTk5OSAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHJ0bC5oIChpbnNuX2ZpcnN0X3ApOiBEb24ndCBkZWNsYXJlLgoJKiBydGxhbmFsLmMgKGluc25fZmlyc3RfcCk6IERlbGV0ZS4KCSogbG9vcC5jIChsb29wX2luc25fZmlyc3RfcCk6IEZhc3RlciBpbXBsZW1lbnRhdGlvbi4KClRodSBGZWIgMjUgMTA6NDQ6MzUgMTk5OSAgUmljaGFyZCBFYXJuc2hhdyAgKHJlYXJuc2hhQGFybS5jb20pCgoJKiBhcm0uaCAoVEFSR0VUX1NXSVRDSEVTKTogRGVsZXRlIGRlcHJlY2F0ZWQgc3dpdGNoZXMgLW1bMjM2XS4KCShUQVJHRVRfMywgVEFSR0VUXzYpOiBEZWxldGUuCgkoQVJNX0ZMQUdfQVJNWzM2XSk6IERlbGV0ZS4KCShDUFBfQ1BVX0FSQ0hfU1BFQyk6IE5vIG5lZWQgdG8gaGFuZGxlIC1tWzIzNl0gYW55IG1vcmUuCgkoQ0MxX1NQRUMpOiBEb24ndCBleHBhbmQgLW1bMjM2XSBpbnRvIG5ldyBlcXVpdmFsZW50cy4KCShDUFBfQVBDU19QQ19TUEVDKTogTm8gbmVlZCB0byBoYW5kbGUgLW1bMjM2XSBhbnkgbW9yZS4KCSogYXJtLmMgKGFybV9vdmVycmlkZV9vcHRpb25zKTogRGVsZXRlIHdhcm5pbmdzIGFib3V0IGRlcHJlY2F0ZWQKCW9wdGlvbnMgLW1bMjM2XS4KCgkqIGFybS5jIChhcm1fZmluYWxpemVfcGljKTogQnVpbGQgdGhlIGxhYmVsIGludG8gdGhlIHNwZWNpYWwgcGljCglhZGp1c3RtZW50IGluc24gaW5zdGVhZCBvZiBpc3N1aW5nIGl0IHNlcGFyYXRlbHkuCgkqIGFybS5tZCAocGljX2FkZF9kb3RfcGx1c19laWdodCk6IFJld29yayB0byBjb250YWluIHRoZSBsYWJlbAoJdGhhdCBpcyBuZWVkZWQuCgoJKiBhcm0ubWQgKCp6ZXJvZXh0cmFjdHFpX2NvbXBhcmUwX3NjcmF0Y2gpOiBEZWxldGUuCgkoKm5lX3plcm9leHRyYWN0c2kpOiBOZXcgcGF0dGVybi4KClRodSBGZWIgMjUgMTg6NDA6MDYgMTk5OSAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHN0bXQuYyAoZXhwYW5kX2VuZF9sb29wKTogR3JvayBjb2RlIGVtaXR0ZWQgYnkKCWV4cGFuZF9leGl0X2xvb3BfaWZfZmFsc2UuCgpUaHUgRmViIDI1IDEwOjE3OjMyIDE5OTkgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvYXJtL2FybS5jIChyZXR1cm5faW5fbWVtb3J5KTogRmxvYXQgZmllbGRzIGluIHVuaW9ucwoJZm9yY2UgYSByZXR1cm4gaW4gbWVtb3J5LgoJKGxvYWRfbXVsdGlwbGVfc2VxdWVuY2UpOiBBZGQgY29tbWVudCBleHBsYWluaW5nIHdoeSB0d28gTERSCglpbnN0cnVjdGlvbnMgY2FuIGJlIGJldHRlciB0aGFuIGFuIExETUlBIGluc3RydWN0aW9uLgoKCSogY29uZmlnL2FybS9hcm0uaCAoVEFSR0VUX1NIT1JUX0JZX0JZVEVTKTogQWRkIGNvbW1lbnQKCWRlc2NyaWJpbmcgdGhlIHJlYWwgbWVhbmluZyBvZiB0aGlzIG9wdGlvbi4KCShGSVhFRF9SRUdJU1RFUlMpOiBEZWZhdWx0IHIxMCB0byBub3QtZml4ZWQuCgkoQ0FMTF9VU0VEX1JFR0lTVEVSUyk6IERlZmF1bHQgcjEwIHRvIG5vdC1jYWxsLXVzZWQuCgkoU1VCVEFSR0VUX0NPTkRJVElPTkFMX1JFR0lTVEVSX1VTQUdFKTogSWYgbm90IGRlZmluZWQsIGRlZmluZQoJYXMgZW1wdHkuCgkoQ09ORElUSU9OQUxfUkVHSVNURVJfVVNBR0UpOiBGaXggcjEwIGlmIFRBUkdFVF9BUENTX1NUQUNLIGlzCgl0cnVlLiAgSW52b2tlIFNVQlRBUkdFVF9DT05ESVRJT05BTF9SRUdJU1RFUl9VU0FHRSBhZnRlcgoJcGVyZm9ybWluZyBvdGhlciBjaGVja3MuCgoJKiBjb25maWcvYXJtL2FybS5tZCAoemVyb19leHRlbmRoaXNpMik6IFVuZG8gcHJldmlvdXMgY2hhbmdlLgoJKGV4dGVuZGhpc2kyKTogVW5kbyBwcmV2aW91cyBjaGFuZ2UuCglBbHNvIGFkZCBjb21tZW50cyBkZXNjcmliaW5nIHdoeSBUQVJHRVRfU0hPUlRfQllfQllURVMgY2FuIGJlCglpZ25vcmVkIGZvciBhcm12NCh0KSBhcmNoaXRlY3R1cmVzLgoKCSogY29uZmlnL2FybS9yaXNjaXguaCAoU1VCVEFSR0VUX0NPTkRJVElPTkFMX1JFR0lTVEVSX1VTQUdFKToKCURlZmluZSB0byBmaXggcjEwLgoKCSogY29uZmlnL2FybS9yaXNjaXgxLTEuaAoJKFNVQlRBUkdFVF9DT05ESVRJT05BTF9SRUdJU1RFUl9VU0FHRSk6IERlZmluZSB0byBmaXggcjEwLgoKVGh1IEZlYiAyNSAxMjowOTowNCAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjc2UuYyAoZHVtcF9jbGFzcyk6IE1ha2UgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gc3RhdGljIHRvIG1hdGNoCgl0aGUgcHJvdG90eXBlLgoKV2VkIEZlYiAyNCAxNzo0NzoyOCAxOTk5ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBkYnhvdXQuYyAoZ3N0YWIuaCk6IFVzZSBpZiBDUk9TU19DT01QSUxFLgoKCSogZHdhcmYyb3V0LmMgKGFkZF9sb2NhdGlvbl9vcl9jb25zdF92YWx1ZV9hdHRyaWJ1dGUpOiBBZGQgYmlnCgllbmRpYW4gY29ycmVjdGlvbiBmb3IgcGFybXMgcGFzc2VkIGluIHJlZ3MgYnV0IGxpdmluZyBvbiB0aGUgc3RhY2suCgpXZWQgRmViIDI0IDE0OjAzOjU0IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGNhbGxzLmMgKGluaXRpYWxpemVfYXJndW1lbnRfaW5mb3JtYXRpb24pOiBOZXcgZnVuY3Rpb24gZXh0cmFjdGVkCglmcm9tIGV4cGFuZF9jYWxsLgoJKGV4cGFuZF9jYWxsKTogVXNlIGluaXRpYWxpemVfYXJndW1lbnRfaW5mb3JtYXRpb24uICBSZW1vdmUgdmFyaWFibGVzCgl3aGljaCBhcmUgbm8gbG9uZ2VyIHVzZWQgZHVlIHRvIGNsZWFudXBzLgoKCSogY2FsbHMuYyAoY29tcHV0ZV9hcmd1bWVudF9ibG9ja19zaXplKTogTmV3IGZ1bmN0aW9uLCBleHRyYWN0ZWQgZnJvbQoJZXhwYW5kX2NhbGxzLgoJKGV4cGFuZF9jYWxscyk6IFVzZSBjb21wdXRlX2FyZ3VtZW50X2Jsb2NrX3NpemUuICBEZWxldGUKCW9yaWdpbmFsX2FyZ3Nfc2l6ZSwgdXNlIHVuYWRqdXN0ZWRfYXJnc19zaXplIGluc3RlYWQuCgoJKiBjYWxscy5jIChwcmVjb21wdXRlX2FyZ3VtZW50cyk6IE5ldyBmdW5jdGlvbiwgZXh0cmFjdGVkIGZyb20KCWV4cGFuZF9jYWxsLgoJKGV4cGFuZF9jYWxsKTogVXNlIHByZWNvbXB1dGVfYXJndW1lbnRzLgoKCSogY2FsbHMuYyAoZmluYWxpemVfbXVzdF9wcmVhbGxvY2F0ZSk6IE5ldyBmdW5jdGlvbiwgZXh0cmFjdGVkIGZyb20KCWV4cGFuZF9jYWxsLgoJKGV4cGFuZF9jYWxsKTogVXNlIGZpbmFsaXplX211c3RfcHJlYWxsb2NhdGUuCgoJKiBjYWxscy5jIChzdG9yZV9vbmVfYXJnKTogTWFyayAidmFyaWFibGVfc2l6ZSIgYXMgcG9zc2libHkgdW51c2VkLgoKCSogcmVnY2xhc3MuYyAocmVjb3JkX3JlZ19jbGFzc2VzLCBjYXNlICdwJyk6IFNldCBjbGFzc2VzIGFwcHJvcHJpYXRlbHkuCglBbiBhbHRlcm5hdGl2ZSBhbHdheXMgZmFpbHMgaWYgaXQgbmVlZHMgYSBwc2V1ZG8gYW5kIG5vIHN1aXRhYmxlCglyZWdpc3RlciBjbGFzcyBjYW4gYmUgZm91bmQuCgpXZWQgRmViIDI0IDE5OjQ3OjU2IDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBsb29wLmggKGxvb3BfaW5zbl9maXJzdF9wKTogRGVjbGFyZS4KCSogbG9vcC5jIChsb29wX2luc25fZmlyc3RfcCk6IE5vIGxvbmdlciBzdGF0aWMuCgkqIHVucm9sbC5jIChpdGVyYXRpb25faW5mbyk6IEZpeCBjb21wYXJpc29uIHRvCglyZWdfaXZfdHlwZS0+bnVtX2VsZW1lbnRzLgoJQmVmb3JlIGFjY2Vzc2luZyByZWdfYml2X2NsYXNzLCBjaGVjayBpbmRleCBhZ2FpbnN0CgltYXhfcmVnX2JlZm9yZV9sb29wLgoJRml4IGFuZCBlbmFibGUgY29kZSBmb3IgZ2l2IGl0ZXJhdG9ycy4KCShsb29wX2l0ZXJhdGlvbnMpOiBDb21wYXJlIHdpdGggcmVnX2l2X3R5cGUtPm51bV9lbGVtZW50cyBpbnN0ZWFkCglvZiB3aXRoIG1heF9yZWdfYmVmb3JlX2xvb3AuCgpXZWQgRmViIDI0IDE5OjE3OjExIDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiB1bnJvbGwuYyAodW5yb2xsX2xvb3ApOiBBdm9pZCBvdXQtb2YtYm91bmRzIGluZGV4IGZvciBsb2NhbF9yZWduby4KCldlZCBGZWIgMjQgMTE6MjY6NDEgMTk5OSAgVmxhZGltaXIgTi4gTWFrYXJvdiAgPHZtYWthcm92QGN5Z251cy5jb20+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMuaCAoQ09ORElUSU9OQUxfUkVHSVNURVJfVVNBR0UpOiBEb24ndCB1c2UKCVBJQ19PRkZTRVRfVEFCTEVfUkVHTlVNIGZvciByZWdpc3RlciBhbGxvY2F0aW9uIHdoZW4gLWZQSUMuCgpUdWUgRmViIDIzIDE2OjI0OjE5IDE5OTkgIE1hcmMgTGVobWFubiAgPHBjZ0Bnb29mLmNvbT4KCgkqIGNvbmZpZy9pMzg2L2kzODYubWQ6IEZpeCB0eXBvLgoKTW9uIEZlYiAyMiAxOTozNjozMyAxOTk5ICBBbmRyZXcgQ2FnbmV5ICA8Y2FnbmV5QGIxLmN5Z251cy5jb20+CgoJKiBjb25maWcvbWlwcy9taXBzLmMgKG1pcHNfZGVidWdnZXJfb2Zmc2V0KTogV2hlbiBUQVJHRVRfTUlQUzE2ICYmCglmcmFtZV9wb2ludGVyX25lZWRlZCBhZGp1c3QgZnJhbWUgc2l6ZS4KCShmdW5jdGlvbl9wcm9sb2d1ZSk6IERvbid0IE1JUFMxNiAubWFzayBHUE9GRlNFVC4gQWxyZWFkeSBhZGp1c3RlZAoJaW4gLmZyYW1lIHBzZXVkby1vcC4KCUZybSBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+OgoJKiBtaXBzLmMgKGZ1bmN0aW9uX3Byb2xvZ3VlKTogQWRqdXN0IGZyYW1lIHNpemUgaW4gLmZyYW1lIHBzZXVkby1vcAoJd2hlbiBUQVJHRVRfTUlQUzE2ICYmIGZyYW1lX3BvaW50ZXJfbmVlZGVkLgoKMTk5OS0wMi0yMiAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9hcm0vYXJtLmg6IEFkZCBUQVJHRVRfQ1BVX3N0cm9uZ2FybTExMDAuCglBZGQgLW1uby1zY2hlZCBjb21tYW5kIGxpbmUgc3dpdGNoIHRvIGRpc2FibGUgc2NoZWR1bGluZyBvZgoJaW5zdHJ1Y3Rpb25zIGludG8gdGhlIGZ1bmN0aW9uJ3MgcHJvbG9ndWUuCgkoZW51bSBwcm9jZXNzb3JfdHlwZSk6IFJlbW92ZS4KCShUQVJHRVRfT1BUSU9OUyk6IEFkZCAiZnBlPSIgb3B0aW9uIHRvIG1hdGNoIGRvY3VtZW50YXRpb24uCgkoc3RydWN0IGFybV9jcHVfc2VsZWN0KTogUmVwbGFjZSAnc2V0X3R1bmVfcCcgYW5kICdzZXRfYXJjaF9wJwoJZmllbGRzIHdpdGggJ3Byb2Nlc3NvcnMnIGZpZWxkLgoJKENPTkRJVElPTkFMX1JFR0lTVEVSX1VTQUdFKTogQWxsb3cgcjEwIHRvIGJlIHVzZWQgaWYgc3RhY2sKCWNoZWNraW5nIGlzIG5vdCBlbmFibGVkLgoJKFJFVFVSTl9JTl9NRU1PUlkpOiBBbHdheXMgY2FsbCBhcm1fcmV0dXJuX2luX21lbW9yeS4KCgkqIGNvbmZpZy9hcm0vYXJtLmMgKGFybV9jcHUpOiBSZW1vdmUuCgkodHVuZV9mbGFncyk6IFJlbW92ZS4KCShhcm1faXNfc3Ryb25nKTogTmV3IHZhcmlhYmxlOiB0cnVlIGlmZiB0aGUgdGFyZ2V0IHByb2Nlc3NvciBpcyBhCglTdHJvbmdBUk0uCgkoYXJtX2lzXzZfb3JfNyk6IE5ldyB2YXJpYWJsZTogdHJ1ZSBpZmYgdGhlIHRhcmdldCBwcm9jZXNzb3IgaXMgYW4KCUFSTTYgb3IgYW5kIEFSTTcuCgkoYXJtX3NlbGVjdCk6IEZpZWxkcyByZW9yZ2FuaXNlZC4KCShzdHJ1Y3QgcHJvY2Vzc29ycyk6IHByb2Nlc3Nvcl90eXBlIGZpZWxkIHJlbW92ZWQuCgkoYWxsX3Byb2NzKTogUmVtb3ZlLgoJKGFsbF9jb3Jlcyk6IE5ldyBhcnJheTogRGVmaW5pdGlvbnMgb2YgYWxsIGtub3duIEFSTSBjcHUgY29yZXMuCgkoYWxsX2FyY2hpdGVjdHVyZXMpOiBOZXcgYXJyYXk6IERlZmluaXRpb25zIG9mIGFsbCBrbm93biBBUk0KCWFyY2hpdGVjdHVyZXMuCgkoc3RyZXEpOiBOZXcgbWFjcm8uCgkoRkxfU0NIRUQpOiBOZXcgcHJvY2Vzc29yIGZsYWc6IHByb2Nlc3NvciByZXF1aXJlZCBsb2FkCglzY2hlZHVsaW5nLgoJKEZMX1NUUk9ORyk6IE5ldyBwcm9jZXNzb3IgZmxhZzogcHJvY2Vzc29yIGlzIGEgU3Ryb25nQVJNLgoJKGFybV9vdmVycmlkZV9vcHRpb25zKTogUmVvcmdhbml6ZWQgdG8gbWFrZSBjb2RlIGNsZWFyZXIuCgkodXNlX3JldHVybl9pbnNuKTogVGVzdCBmb3IgIm5vdCAoVEFSR0VUX0FQQ1MgYW5kCglmcmFtZV9wb2ludGVyX25lZWRlZCkiLgoJKGFybV9yZXR1cm5faW5fbWVtb3J5KTogSW1wcm92ZSBoYW5kbGluZyBvZiBzdHJ1Y3R1cmVzLgoKCSogY29uZmlnL2FybS9hcm0ubWQ6IFJlbW92ZSAiY3B1IiBhdHRyaWJ1dGUuICBSZXBsYWNlIHdpdGgKCSJpc19zdHJvbmdhcm0iIGFuZCAiaXNfYXJtXzZfb3JfNyIgYXR0cmlidXRlcy4KCSh6ZXJvX2V4dGVuZGhpc2kyKTogQ2hlY2sgZm9yIFRBUkdFVF9TSE9SVF9CWV9CWVRFUyBiZWZvcmUKCWFybV9hcmNoNC4KCShleHRlbmRoaXNpMik6IENoZWNrIGZvciBUQVJHRVRfU0hPUlRfQllfQllURVMgYmVmb3JlIGFybV9hcmNoNC4KCgkqIGludm9rZS50ZXhpIChBUk0gT3B0aW9ucyk6IERvY3VtZW50IC1tdHVuZT0gYW5kIC1tZnA9IG9wdGlvbnMuCgoxOTk5LTAyLTIyICBQaGlsaXAgQmx1bmRlbGwgIDxwaGlsYkBnbnUub3JnPgoKCSogY29uZmlnL2FybS9saW51eC1nYXMuaCAoSU5JVElBTElaRV9UUkFNUE9MSU5FKTogUmVwbGFjZSBkZWZhdWx0CglkZWZpbml0aW9uIHdpdGggb25lIGluY2x1ZGluZyBjYWNoZSBzeW5jaHJvbml6YXRpb24uCgkoQ0xFQVJfSU5TTl9DQUNIRSk6IENvcnJlY3Qgc3lzY2FsbCBudW1iZXIgYW5kIGVuYWJsZSBkZWZpbml0aW9uLgoJTW92ZSBkZWZpbml0aW9uIG9mIGluaGliaXRfbGliYyB0by4uLgoJKiBjb25maWcvYXJtL3htLWxpbnV4Lmg6IC4uLiBoZXJlLgoKCSogY29uZmlnL2FybS90LWxpbnV4OiBEaXNhYmxlIG11bHRpbGliIGNvbmZpZ3VyYXRpb25zIHNpbmNlIHRoZQoJb25seSBlZmZlY3QgZm9yIG1vc3QgcGVvcGxlIGlzIHRvIGNhdXNlIGJ1aWxkcyB0byBmYWlsLgoKCSogY29uZmlnL2FybS9lbGYuaCAoQVNNX0ZJTEVfU1RBUlQpOiBBZGQgLmZpbGUgZGlyZWN0aXZlLgoJKEFTTV9TUEVDKTogVHJhbnNsYXRlIC1tYXBjcy1mbG9hdCB0byAtbWZsb2F0IGZvciB0aGUgYXNzZW1ibGVyLgoKCSogY29uZmlnL2FybS9saW51eC1lbGYuaCAoREVGQVVMVF9WVEFCTEVfVEhVTktTKTogRGVmaW5lLgoJKEhBTkRMRV9TWVNWX1BSQUdNQSk6IExpa2V3aXNlLgoJKExJQl9TUEVDKTogQ29weSBkZWZpbml0aW9uIGZyb20gZ2VuZXJpYyBMaW51eCBmaWxlcy4KCShMSUJHQ0NfU1BFQyk6IEluY2x1ZGUgLWxmbG9hdCBpZiAtbXNvZnQtZmxvYXQgd2FzIGdpdmVuLgoJKEZQX0RFRkFVTFQpOiBTZXQgdG8gU09GVDMgb24gMzItYml0IHRhcmdldHMuCgkoRFdBUkYyX0RFQlVHR0lOR19JTkZPKTogRGVmaW5lLgoJKFBSRUZFUlJFRF9ERUJVR0dJTkdfVFlQRSk6IERlZmluZSBhcyBEQlhfREVCVUcuCgpNb24gRmViIDIyIDE2OjU0OjE4IDE5OTkgIEFuZHJldyBNYWNMZW9kICA8YW1hY2xlb2RAY3lnbnVzLmNvbT4KCgkqIGxvb3AuYyAobGliY2FsbF9vdGhlcl9yZWdzKTogTWFrZSBleHRlcm4uCgkqIHJ0bC5oIChmaW5kX2xhc3RfdmFsdWUpOiBBZGQgcGFyYW1ldGVyIHRvIHByb3RvdHlwZS4KCShsaWJjYWxsX290aGVyX3JlZyk6IEFkZCBleHRlcm4gZGVjbGFyYXRpb24uCgkqIHJ0bGFuYWwuYyAoZmluZF9sYXN0X3ZhbHVlKTogQWRkIGFub3RoZXIgcGFyYW1ldGVyIHRvIGFsbG93CglhIGRlZmluaXRpb24gdXNpbmcgYSBoYXJkd2FyZSByZWdpc3RlciB0byBiZSBmb3VuZCBhcyB3ZWxsLgoKTW9uIEZlYiAyMiAxMzozMzo0NyAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY3NlLmMgKGR1bXBfY2xhc3MpOiBOZXcgZnVuY3Rpb24uCgkoaW52YWxpZGF0ZV9tZW1vcnkpOiBGaXggdHlwbyBpbiBjb21tZW50LgoJKiBmdW5jdGlvbi5jICh0ZW1wX3Nsb3QpOiBBZGQgYW4gYWxpYXMgc2V0IGZpZWxkLgoJKGFzc2lnbl9zdGFja190ZW1wKTogT25seSByZXVzZSBzbG90cyBpZiB0aGV5IHdpbGwgaGF2ZSB0aGUKCXNhbWUgYWxpYXMgc2V0IGFzIGJlZm9yZS4KCShjb21iaW5lX3RlbXBfc2xvdHMpOiBEb24ndCBjb21iaW5lIGlmIC1mc3RyaWN0LWFsaWFzaW5nOwoJdGhhdCdzIHVuc2FmZS4KCSogcnRsLmMgKGNvcHlfcnR4KTogQ29weSBhbGwgdGhlIGZsYWdzIChpbiBwYXJ0aWN1bGFyLAoJTUVNX1NDQUxBUl9QKS4KCk1vbiBGZWIgMjIgMTQ6MTM6MjMgMTk5OSAgVmxhZGltaXIgTi4gTWFrYXJvdiAgPHZtYWthcm92QGN5Z251cy5jb20+CgoJKiBjb25maWd1cmUuaW4gKGlbMzQ1NjddODYtKi1saW51eC1nbnUqLAoJaVszNDU2N104Ni0qLWxpbnV4LWdudWxpYmMxLCBpWzM0NTY3XTg2LSotbGludXgtZ251YW91dCosCglpWzM0NTY3XTg2LSotbGludXgtZ251b2xkbGQqKTogVXNlIGZpeGluYy54ODYtbGludXgtZ251IGFzCglmaXhpbmNsdWRlcy4KCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KCgkqIGZpeGluYy54ODYtbGludXgtZ251OiBOZXcgc2NyaXB0IGZvciBmaXhpbmcgYXNtLXN0YXRlbWVudHMgYnVnCglvbiB4ODYgbGludXguCgoJKiBmaXhpbmMvZml4aW5jLng4Ni1saW51eC1nbnU6IENvcHkgb2YgdGhlIHByZXZpb3VzIG9uZS4KCgkqIGZpeGluYy9ta2ZpeGluYy5zaCAoaVszNDU2N104Ni0qLWxpbnV4LWdudSosCglpWzM0NTY3XTg2LSotbGludXgtZ251bGliYzEsIGlbMzQ1NjddODYtKi1saW51eC1nbnVhb3V0KiwKCWlbMzQ1NjddODYtKi1saW51eC1nbnVvbGRsZCopOiBVc2UgZml4aW5jLng4Ni1saW51eC1nbnUgYXMKCWZpeGluY2x1ZGVzLgoKTW9uIEZlYiAyMiAwODo1NTowNSAxOTk5ICBPdmlkaXUgUHJlZGVzY3UgIDxvdmlkaXVAY3VwLmhwLmNvbT4KCgkqIG9iamMvb2JqYy1hY3QuYyAoZW5jb2RlX3R5cGUpOiBUZW1wb3JhcnkgcmV2ZXJ0IHRvIHRoZSBvbGQKCWJlaGF2aW9yIG9mIGVuY29kaW5nIHR5cGVzIGFzIHRoZSBuZXcgb25lIHNlZW1zIHRvIGJyZWFrIHRoZQoJZW5jb2Rpbmcgb2YgYml0ZmllbGRzLgoKTW9uIEZlYiAyMiAxMTo0MDo0NCAxOTk5ICBDcmFpZyBCdXJsZXkgIDxjcmFpZ0BqY2Itc2MuY29tPgpTYXQgRmViIDIwIDA5OjU5OjM2IDE5OTkgIENyYWlnIEJ1cmxleSAgPGNyYWlnQGpjYi1zYy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoYWxsLmludGVybmFsLCBhbGwuY3Jvc3MpOiBEZXBlbmQgb24gYGRvYycKCXRhcmdldCwgdG8gZW5zdXJlIGRvY3MgZ2V0IG1hZGUgYmVmb3JlIGluc3RhbGxhdGlvbi4KCglEZWNyZWFzZSBzcHVyaW91cyB3YXJuaW5ncyBmcm9tIC1mc3ludGF4LW9ubHk6CgkqIHN0bXQuYyAoZXhwYW5kX2V4cHJfc3RtdCk6IEV4cGFuZCBleHByIGV2ZW4gd2hlbiAtZnN5bnRheC1vbmx5LgoKTW9uIEZlYiAyMiAxMDo1NTowMCAxOTk5ICBHYXZpbiBSb21pZy1Lb2NoICA8Z2F2aW5AY3lnbnVzLmNvbT4KCgkqIGMtbGV4LmMgKHl5bGV4KTogUmVwbGFjZSB3YXJuaW5nIGFib3V0IGludGVnZXIgY29uc3RhbnRzIGJlaW5nCglsYXJnZXIgdGhhbiBsb25nLWxvbmdzLCB3aXRoIGEgd2FybmluZyBhYm91dCBpbnRlZ2VyIGNvbnN0YW50cwoJYmVpbmcgbGFyZ2VyIHRoYW4gdGhlIGxhcmdlc3QgdGFyZ2V0IGludGVnZXIuCgpNb24gRmViIDIyIDA4OjM1OjM4IDE5OTkgIENyYWlnIEJ1cmxleSAgPGNyYWlnQGpjYi1zYy5jb20+CgoJRml4IC1mc3ludGF4LW9ubHkgSUNFczoKCSogdmFyYXNtLmMgKGFzc2VtYmxlX3plcm9zLCBhc3NlbWJsZV92YXJpYWJsZSwKCW91dHB1dF9jb25zdGFudF9kZWYpOiBEbyBub3RoaW5nIHdoZW4gLWZzeW50YXgtb25seS4KCkZyaSBGZWIgMTkgMTg6MTg6NTYgMTk5OSAgRG9uIEJvd21hbiAgPGRvbkBwaXhzdHJlYW0uY29tPgoKCSogY29uZmlndXJlLmluIChtaXBzKi0qLXZ4d29ya3MqKTogRW5hYmxlIGd0aHJlYWRzIHZ4d29ya3Mgc3VwcG9ydC4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKU3VuIEZlYiAyMSAyMDozNDo0NCAxOTk5ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KClN1biBGZWIgMjEgMjA6MzU6MTAgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogY29uZmlnL2FvdXRvcy5oIChBU01fT1VUUFVUX0NPTlNUUlVDVE9SKTogRGVsZXRlLgoJKEFTTV9PVVRQVVRfREVTVFJVQ1RPUiwgQVNNX09VVFBVVF9HQ19FTlRSWSk6IExpa2V3aXNlLgoJKiB0bS50ZXhpOiBVcGRhdGUgZG9jcyBmb3IgY29uc3RydWN0b3JzIGFuZCBkZXN0cnVjdG9ycy4KClN1biBGZWIgMjEgMTc6MTE6MTggMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGdlbmF0dHJ0YWIuYyAoY2hlY2tfYXR0cl92YWx1ZSk6IEFsbG93IG5lZ2F0aXZlIGNvbnN0X2ludCBpZgoJbmVnYXRpdmVfb2suICBBY2NlcHQgaW50ZWdyYWwgYXJpdGhtZXRpYyBvcGVyYXRvcnMuICBBY2NlcHQKCWRpcmVjdCByZWZlcmVuY2VzIHRvIG90aGVyIGF0dHJpYnV0ZXMuICBBY2NlcHQgc3ltYm9sX3JlZiBpbgoJbm9uLWNvbnN0YW50IGF0dHJpYnV0ZXMuCgkobWF4X2F0dHJfdmFsdWUpOiBBZGQgbmV3IGFyZ3VtZW50IGB1bmtub3ducCcuICBVcGRhdGUgYWxsIGNhbGxlcnMuCgkob3JfYXR0cl92YWx1ZSk6IExpa2V3aXNlLgoJKHNpbXBsaWZ5X2tub3dpbmcpOiBEb24ndCBvcHRpbWl6ZSBpZiBtYXhfYXR0cl92YWx1ZSB1bmtub3duLgoJKHdyaXRlX2xlbmd0aF91bml0X2xvZyk6IExpa2V3aXNlIHdpdGggb3JfYXR0cl92YWx1ZS4KCShmaW5kX2FuZF9tYXJrX3VzZWRfYXR0cmlidXRlcyk6IERvbid0IGZhbGx0aHJ1IGNhc2UuCgkod3JpdGVfYXR0cl9zZXQpOiBQYXNzIHRocnUgYWxsIG5vbi1jb25kIGV4cHJlc3Npb25zLgoJKHdyaXRlX2F0dHJfdmFsdWUpOiBIYW5kbGUgc3ltYm9sX3JlZiwgYXR0ciwgYW5kIGFyaXRobWV0aWMuCgpTdW4gRmViIDIxIDEzOjE2OjQ0IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIHJlZ21vdmUuYyAoZGlzY292ZXJfZmxhZ3NfcmVnKTogVXNlIHdvcmRfbW9kZSBpbnN0ZWFkIG9mIFNJbW9kZS4KClN1biBGZWIgMjEgMTM6MTU6NDAgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHJlZ21vdmUuYyAoZGlzY292ZXJfZmxhZ3NfcmVnKTogUmVtb3ZlIGNjMCBjb2RlLgoJKG1hcmtfZmxhZ3NfbGlmZV96b25lcykgW0hBVkVfY2MwXTogRm9yY2UgdXNlIG9mIGNjMDsgYmFpbCBpZgoJYSBwb3RlbnRpYWwgZmxhZ3MgcmVnaXN0ZXIgd2FzIGlkZW50aWZpZWQuCgpTYXQgRmViIDIwIDE2OjE2OjA3IDE5OTggIEZyYW56IFNpcmwgIDxGcmFuei5TaXJsLWtlcm5lbEBsYXV0ZXJiYWNoLmNvbT4KCgkqIHJzNjAwMC5tZCAoc2NjIHBsdXMgbHR1KTogRml4IHR5cG8gaW4gbGFzdCBjaGFuZ2UuCgpTYXQgRmViIDIwIDA5OjA4OjQ0IDE5OTkgIFJpY2hhcmQgRWFybnNoYXcgIChyZWFybnNoYUBhcm0uY29tKQoKCSogeG0tYXJtLmggKEhPU1RfQklUU19QRVJfTE9OR0xPTkcpOiBEZWZpbmUuCgpGcmkgRmViIDE5IDIzOjAyOjAyIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiByZWdtb3ZlLmMgKGRpc2NvdmVyX2ZsYWdzX3JlZyk6IE5ldyBmdW5jdGlvbi4KCShmbGFnc19zZXRfMSwgbWFya19mbGFnc19saWZlX3pvbmVzKTogTmV3IGZ1bmN0aW9ucy4KCShyZWdtb3ZlX29wdGltaXplKTogQ2FsbCB0aGVtLgoJKGZpeHVwX21hdGNoXzEpOiBVc2UgaW5zbiBtb2RlcyByYXRoZXIgdGhhbiBzZXRzX2NjMF9wLgoKRnJpIEZlYiAxOSAyMjo0NzowMSAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogcnRsYW5hbC5jIChpbnNuX2ZpcnN0X3ApOiBGaXggcmV0dXJuIHZhbHVlIGZvciBpbnNuID09IHJlZmVyZW5jZS4KCgkqIGxvb3AuYyAoc3RyZW5ndGhfcmVkdWNlLCBjaGVja19maW5hbF92YWx1ZSwgY2hlY2tfZGJyYV9sb29wKToKCVVzZSBsb29wX2luc25fZmlyc3RfcC4KCkZyaSBGZWIgMTkgMTU6NDk6MjYgMTk5OSAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CgkJCSAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogcnM2MDAwLm1kIChzY2MgcGx1cyBlcSk6IEZpeCBvdXRwdXQgdGVtcGxhdGUuCgkoc2NjIHBsdXMgbHR1KTogRml4IG91dHB1dCB0ZW1wbGF0ZSBhbmQgY29sbGFwc2UgdmFyaWFudHMKCWNvcnJlY3RpbmcgZWFybHkgY2xvYmJlcnMuCgkoc2NjIHBsdXMgZ2V1KTogRml4IG91dHB1dCB0ZW1wbGF0ZS4KCShzY2MgcGx1cyBndCk6IEZpeCBvdXRwdXQgdGVtcGxhdGUuCgkoc2NjIHBsdXMgZ3R1KTogRml4IG91dHB1dCB0ZW1wbGF0ZSBhbmQgY29sbGFwc2UgdmFyaWFudHMuCgpGcmkgRmViIDE5IDE1OjQzOjU5IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNwcGluaXQuYyAocHJpbnRfaGVscCk6IFJlbW92ZSB1bmVzY2FwZWQgbmV3bGluZSBpbiBzdHJpbmcuCgpGcmkgRmViIDE5IDE5OjU1OjA2IDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBsb29wLmMgKHN0cmVuZ3RoX3JlZHVjZSk6IENoZWNrIGZvciBpbnRlcnZlbmluZyBqdW1wcyB3aGVuCgljb252ZXJ0aW5nIGJpdiBpbmNyZW1lbnQgdG8gZ2l2LgoKVGh1IEZlYiAxOCAxNjozNjo1OCAxOTk5ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIHRyZWUuZGVmIChUUllfRklOQUxMWV9FWFBSLCBHT1RPX1NVQlJPVVRJTkVfRVhQUik6IE5ldyB0cmVlIG5vZGVzLAoJKiBleHByLmMgKGV4cGFuZF9leHByKTogU3VwcG9ydCBuZXcgdHJlZSBub2Rlcy4KCkZyaSBGZWIgMTkgMTA6MTc6NTYgMTk5OSAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uY3MudW5pLWRvcnRtdW5kLmRlPgoKCSogY29uZmlnL202OGsvbTY4ay5jIChtNjhrX2FsaWduX2xvb3BzX3N0cmluZywKCW02OGtfYWxpZ25fanVtcHNfc3RyaW5nLCBtNjhrX2FsaWduX2Z1bmNzX3N0cmluZyk6IEFkZCBjb25zdC4KCSogY29uZmlnL202OGsvbTY4ay5oIChtNjhrX2FsaWduX2xvb3BzX3N0cmluZywKCW02OGtfYWxpZ25fanVtcHNfc3RyaW5nLCBtNjhrX2FsaWduX2Z1bmNzX3N0cmluZyk6IExpa2V3aXNlLgoKVGh1IEZlYiAxOCAyMzoyODozNSAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBiaXRtYXAuYyAoYml0bWFwX3ByaW50KTogUXVhbGlmeSBhIGNoYXIqIHdpdGggdGhlIGBjb25zdCcga2V5d29yZC4KCgkqIGJpdG1hcC5oIChiaXRtYXBfcHJpbnQpOiBMaWtld2lzZS4KCgkqIGMtZGVjbC5jIChidWlsdGluX2Z1bmN0aW9uLCBncm9rZGVjbGFyYXRvciwgZ3Jva2ZpZWxkKTogTGlrZXdpc2UuCgoJKiBjLWxhbmcuYyAoYnVpbGRfb2JqY19zdHJpbmcpOiBMaWtld2lzZS4KCgkqIGMtbGV4LmMgKHl5ZXJyb3IsIGV4dGVuZF90b2tlbl9idWZmZXIpOiBMaWtld2lzZS4gIERvbid0IGluY2x1ZGUKCWxpbWl0cy5oIG9yIGN0eXBlLmguICBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGBwJy4KCgkqIGMtbGV4LmggKHl5ZXJyb3IpOiBRdWFsaWZ5IGEgY2hhciogd2l0aCB0aGUgYGNvbnN0JyBrZXl3b3JkLgoKCSogYy1wcmFnbWEuYyAoaGFuZGxlX3ByYWdtYV90b2tlbik6IExpa2V3aXNlLgoKCSogYy1wcmFnbWEuaCAoaGFuZGxlX3ByYWdtYV90b2tlbik6IExpa2V3aXNlLgoKCSogYy10cmVlLmggKGJ1aWxkX29iamNfc3RyaW5nLCBidWlsdGluX2Z1bmN0aW9uLCBncm9rZmllbGQsCglidWlsZF9pbmRpcmVjdF9yZWYsIGx2YWx1ZV9vcl9lbHNlLCByZWFkb25seV93YXJuaW5nLCBlcnJvcl9pbml0LAoJcGVkd2Fybl9pbml0KTogTGlrZXdpc2UuCgoJKiBjLXR5cGVjay5jIChjb252ZXJ0X2Zvcl9hc3NpZ25tZW50LCB3YXJuX2Zvcl9hc3NpZ25tZW50LAoJcHVzaF9zdHJpbmcsIHdhcm5pbmdfaW5pdCwgaW5jb21wbGV0ZV90eXBlX2Vycm9yLAoJYnVpbGRfaW5kaXJlY3RfcmVmLCBsdmFsdWVfb3JfZWxzZSwgcmVhZG9ubHlfd2FybmluZywKCWJ1aWxkX2NfY2FzdCwgc3BlbGxpbmcsIHB1c2hfbWVtYmVyX25hbWUsIHByaW50X3NwZWxsaW5nLAoJZXJyb3JfaW5pdCwgcGVkd2Fybl9pbml0LCBzdGFydF9pbml0KTogTGlrZXdpc2UuCgoJKiBvYmpjL29iamMtYWN0LmMgKGJ1aWxkX29iamNfc3RyaW5nKTogTGlrZXdpc2UuCgoJKiBwcmludC10cmVlLmMgKHByaW50X25vZGVfYnJpZWYsIHByaW50X25vZGUpOiBMaWtld2lzZS4KCgkqIHRyZWUuaCAobHZhbHVlX29yX2Vsc2UsIHByaW50X25vZGUsIHByaW50X25vZGVfYnJpZWYpOiBMaWtld2lzZS4KClRodSBGZWIgMTggMjA6NDQ6MjEgMTk5OSAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogcmVnY2xhc3MuYyAocmVjb3JkX3JlZ19jbGFzc2VzKTogQ29ycmVjdGx5IGhhbmRsZSAncCcgY29uc3RyYWludC4KClRodSBGZWIgMTggMTk6NTk6MzcgMTk5OSAgTWFyYyBFc3BpZSAgPGVzcGllQGN2cy5vcGVuYnNkLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbiA6SGFuZGxlIE9wZW5CU0QgcGxhdGZvcm1zLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgkqIGNvbmZpZy9vcGVuYnNkLmg6IE5ldyBmaWxlLgoJKiBjb25maWcveG0tb3BlbmJzZC5oOiBOZXcgZmlsZS4KCSogY29uZmlnL3Qtb3BlbmJzZDogTmV3IGZpbGUuCgkqIGNvbmZpZy90LW9wZW5ic2QtdGhyZWFkOiBOZXcgZmlsZS4KClRodSBGZWIgMTggMTg6NDc6MDkgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZnVuY3Rpb24uYyAoYXNzaWduX3N0YWNrX3RlbXBfZm9yX3R5cGUpOiBSb3VuZCBTSVpFIGJlZm9yZSBjYWxsaW5nCglhc3NpZ25fc3RhY2tfbG9jYWwgZm9yIEJMS21vZGUgc2xvdHMuCgpGcmkgRmViIDE5IDAxOjQ1OjA2IDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBsb29wLmMgKHN0cmVuZ3RoX3JlZHVjZSk6IEZvciBkZXJpdmVkIGdpdnMsIHJlcGxhY2UgdGhlCglnaXYgdGhpcyB3YXMgZGVyaXZlZCBmcm9tIHdpdGggaXRzIG5ld19yZWcuCgkocmVjb21iaW5lX2dpdnMpOiBEb24ndCBzZXQgbmV3X3JlZyBmb3IgZGVyaXZlZCBnaXYuCglBbmQgZG9uJ3QgcHJpbnQgaXQsIHByaW50IFNVTSBpbnN0ZWFkLgoKVGh1IEZlYiAxOCAxNTo1Mjo0OSAxOTk5ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBtNjhrZWxmLmggKEFTTV9SRVRVUk5fQ0FTRV9KVU1QKTogQWRkIDUyMDAgc3VwcG9ydC4KCjE5OTktMDItMTggIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkuY29sdW1iaWEuZWR1PgoKCSogY3BwbGliLmM6IEtpbGwgZGVmaW5lIG9mIFNURENfVkFMVUUuICBEb24ndCBpbmNsdWRlIG91dHB1dC5oCgkgIG9yIHByZWZpeC5oLiBDaGFuZ2UgQ1BQX0lTX01BQ1JPX0JVRkZFUiB0byBub3QgcmVmZXIgdG8KCSAgbWFjcm9fY2xlYW51cC4KCSAgKEdFVF9FTlZfUEFUSF9MSVNULCBQQVRIX1NFUEFSQVRPUiwgU1RBTkRBUkRfSU5DTFVERV9ESVIsCgkgIHByZWRlZnMsIFNJWkVfVFlQRSwgUFRSRElGRl9UWVBFLCBXQ0hBUl9UWVBFLAoJICBDUFBfV0NIQVJfVFlQRSwgVVNFUl9MQUJFTF9QUkVGSVgsIFJFR0lTVEVSX1BSRUZJWCwgc3RydWN0CgkgIGNwcF9wZW5kaW5nLCB2ZXJzaW9uX3N0cmluZywgc3RydWN0IGRlZmF1bHRfaW5jbHVkZSwKCSAgaW5jbHVkZV9kZWZhdWx0c19hcnJheSwgcGF0aF9pbmNsdWRlLCBjcHBfb3B0aW9uc19pbml0LAoJICBkdW1wX3NwZWNpYWxfdG9fYnVmZmVyLCBpbml0aWFsaXplX2J1aWx0aW5zLCBjcHBfc3RhcnRfcmVhZCwKCSAgY3BwX3JlYWRlcl9pbml0LCBucmV2ZXJzZV9wZW5kaW5nLCBwdXNoX3BlbmRpbmcsIHByaW50X2hlbHAsCgkgIGNwcF9oYW5kbGVfb3B0aW9uLCBjcHBfaGFuZGxlX29wdGlvbnMsIGNwcF9maW5pc2gsCgkgIGNwcF9jbGVhbnVwKTogTW92ZSB0byBjcHBpbml0LmMuCgkgIChtYWNyb19jbGVhbnVwLCBzdHJ1Y3QgYXJnbGlzdCwgY29sbGVjdF9leHBhbnNpb24sCgkgIGNyZWF0ZV9kZWZpbml0aW9uLCBjb21wYXJlX2RlZnMsIGNvbXBfZGVmX3BhcnQsIEFSR19CQVNFLAoJICBzdHJ1Y3QgYXJnZGF0YSwgbWFjYXJnLCBjaGFuZ2VfbmV3bGluZXMsIHRpbWVzdGFtcCwKCSAgbW9udGhuYW1lcywgc3BlY2lhbF9zeW1ib2wsIHVuc2FmZV9jaGFycywgbWFjcm9leHBhbmQsCgkgIHB1c2hfbWFjcm9fZXhwYW5zaW9uKTogTW92ZSB0byBjcHBoYXNoLmMuCgkgIChxdW90ZV9zdHJpbmcsIGNoZWNrX21hY3JvX25hbWUsIGNwcF9leHBhbmRfdG9fYnVmZmVyLAoJICBvdXRwdXRfbGluZV9jb21tYW5kLCBjcHBfdW5kZWYpOiBFeHBvcnQuCgkgIChudWxsX3VuZGVyZmxvdywgbnVsbF9jbGVhbnVwLCBoYW5kbGVfZGlyZWN0aXZlKTogTWFrZSBzdGF0aWMuCgoJKiBjcHBsaWIuaDogUHJvdG90eXBlIG5vdy1leHBvcnRlZCBmdW5jdGlvbnMuICBBZGp1c3QgZGVjbHMgb2YKCSAgc3ludGF4IHRhYmxlcyBzbyB3ZSBjYW4gaW5jbHVkZSBjcHBsaWIuaCBpbiBjcHBpbml0LmMuCgkqIGNwcGhhc2guaDogUHJvdG90eXBlIGFsbCBmdW5jdGlvbnMgZXhwb3J0ZWQgYnkgY3BwaGFzaC5jLgoJKiBjcHBpbml0LmM6IE1ha2Ugc3ludGF4IHRhYmxlcyBpbml0aWFsaXplZCBkYXRhIGlmIHBvc3NpYmxlCgkgICh1c2VzIEdDQyBkZXNpZ25hdGVkLWluaXRpYWxpemVyIGV4dGVuc2lvbikuCgkqIGNwcGV4cC5jOiBNYWtlIGNwcF9sZXggc3RhdGljLgoJKiBNYWtlZmlsZS5pbjogTW92ZSAtRCBzd2l0Y2hlcyBmb3IgdGhlIHZhcmlvdXMgaW5jbHVkZSBkaXJzCgkgIGZyb20gY3BwbGliLm8gcnVsZSB0byBjcHBpbml0Lm8gcnVsZS4gIEFkanVzdCBkZXBlbmRlbmNpZXMuCgpUaHUgRmViIDE4IDEzOjE1OjU2IDE5OTkgIE1hcmMgRXNwaWUgIDxlc3BpZUBjdnMub3BlbmJzZC5vcmc+CgoJKiBhbHBoYS9vcGVuYnNkLmg6IE5ldyBmaWxlLgoJKiBhbHBoYS94bS1vcGVuYnNkLmg6IE5ldyBmaWxlLgoJKiBzcGFyYy9vcGVuYnNkLmg6IE5ldyBmaWxlLgoJKiBzcGFyYy94bS1vcGVuYnNkLmg6IE5ldyBmaWxlLgoJKiBtNjhrL29wZW5ic2QuaDogTmV3IGZpbGUuCgkqIG02OGsveG0tb3BlbmJzZC5oOiBOZXcgZmlsZS4KCSogaTM4Ni9vcGVuYnNkLmg6IE5ldyBmaWxlLCBvcmlnaW5hbGx5IGZyb20gbmV0YnNkLgoJKiBpMzg2L3htLW9wZW5ic2QuaDogTmV3IGZpbGUuCgoxOTk5LTAyLTE3ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLmNvbHVtYmlhLmVkdT4KCgkqIE1ha2VmaWxlLmluOiBDb3JyZWN0IGRlcGVuZGVuY2llcyBmb3IgY3BwbGliIG9iamVjdCBmaWxlcy4KCldlZCBGZWIgMTcgMTQ6MDQ6MTggMTk5OSAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CgoJKiByczYwMDAubWQgKHthZGQsc3VifXNpMyBgLicpOiBBZGQgYWx0ZXJuYXRpdmVzIHRvIHVzZSBDUiBvdGhlcgoJdGhhbiBjcjAuCgpXZWQgRmViIDE3IDE2OjU5OjI4IDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBsb29wLmMgKHN0cmVuZ3RoX3JlZHVjZSk6IERvbid0IG1vdmUgZ2l2IGluc24gZm9yIGJpdiB0dXJuZWQgZ2l2CgliZWxvdyBzY2FuX3N0YXJ0LgoKV2VkIEZlYiAxNyAxMDo1NjoyNCAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiB0cmVlLmMgKHRyZWVfbm9kZV9raW5kX25hbWVzLCBwcmludF9vYnN0YWNrX25hbWUsCglnZXRfaWRlbnRpZmllciwgbWF5YmVfZ2V0X2lkZW50aWZpZXIsIGJ1aWxkX3N0cmluZywKCWJ1aWxkX2V4cHJfd2ZsLCBpc19hdHRyaWJ1dGVfcCwgbG9va3VwX2F0dHJpYnV0ZSwKCXByaW50X29ic3RhY2tfc3RhdGlzdGljcywgZ2V0X2ZpbGVfZnVuY3Rpb25fbmFtZV9sb25nLCB0cmVlX2NoZWNrLAoJdHJlZV9jbGFzc19jaGVjaywgZXhwcl9jaGVjayk6IFF1YWxpZnkgYSBjaGFyKiB3aXRoIHRoZSBgY29uc3QnCglrZXl3b3JkLgoKCSogdHJlZS5oIChnZXRfaWRlbnRpZmllciwgbWF5YmVfZ2V0X2lkZW50aWZpZXIsIGJ1aWxkX3N0cmluZywKCWJ1aWxkX2V4cHJfd2ZsLCBpc19hdHRyaWJ1dGVfcCwgbG9va3VwX2F0dHJpYnV0ZSwKCXByaW50X29ic3RhY2tfc3RhdGlzdGljcywgcHJpbnRfb2JzdGFja19uYW1lLCB0cmVlX2NoZWNrLAoJdHJlZV9jbGFzc19jaGVjaywgZXhwcl9jaGVjayk6IExpa2V3aXNlLgoKVHVlIEZlYiAxNiAyMToyOTozOCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBpMzg2L2ZyZWVic2QtZWxmLmgsIGkzODYvZ2FzLmgsIGkzODYvbGludXguaDogRml4IG1pbm9yIHNwYWNpbmcKCWVycm9ycy4KCgkqIGNhbGxzLmMgKHN0b3JlX29uZV9hcmcpOiBNYXJrIGFueSBzbG90cyB1c2VkIGZvciB0aGUgYXJndW1lbnQKCWFzIGluLXVzZSBpbW1lZGlhdGVseSBhZnRlciB3ZSdyZSBkb25lIHNhdmluZyBhbnkgc2xvdHMgd2hpY2gKCXdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgdGhpcyBhcmd1bWVudC4KClR1ZSBGZWIgMTYgMjE6MDI6MDcgMTk5OSAgQW50b24gSGFydGwgIDx0b25pQGRldnNvZnQuY29tPgoKCSogcnM2MDAwLm1kIChjYWxsX3ZhbHVlKTogRml4IHR5cG8uCgpXZWQgRmViIDE3IDAxOjI5OjA3IDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBsb29wLmMgKHN0cmVuZ3RoX3JlZHVjZSk6IENhbGN1bGF0ZSBtYXliZV9kZWFkIGJlZm9yZQoJY2FsbGluZyByZWNvbWJpbmVfZ2l2cy4KCldlZCBGZWIgMTcgMDA6NDM6MTIgMTk5OSAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGxvb3AuYyAoc3RyZW5ndGhfcmVkdWNlKTogRHVtcCBiaXYgaW5jcmVtZW50IC0+IGdpdiBjb252ZXJzaW9ucy4KClR1ZSBGZWIgMTYgMTU6MzE6MzkgMTk5OSAgT3ZpZGl1IFByZWRlc2N1ICA8b3ZpZGl1QGN1cC5ocC5jb20+CgoJKiBvYmpjL29iamMtYWN0LmMgKGVuY29kZV90eXBlKTogRW5jb2RlIHRoZSB0eXBlIGluc3RlYWQgb2YKCWVuY29kaW5nIHRoZSBtb2RlIG9mIHRoZSB0eXBlIChwYXRjaCBmcm9tIFJpY2hhcmQgRnJpdGgtTWFjZG9uYWxkCgk8cmljaGFyZEBicmFpbnN0b3JtLmNvLnVrPikuCgpUdWUgRmViIDE2IDEwOjUzOjUxIDE5OTkgIFJpY2hhcmQgRWFybnNoYXcgIChyZWFybnNoYUBhcm0uY29tKQoKCSogY29uZmlnL2FybS9hcm0ubWQgKCp6ZXJvZXh0cmFjdHFpX2NvbXBhcmUwX3NjcmF0Y2gpOiBSZS1hZGQgbG9hZAoJaW5zdHJ1Y3Rpb24ga2lsbGVkIGluIHByZXZpb3VzIGNoYW5nZS4gIFNpbXBsaWZ5IG1hc2sgZ2VuZXJhdGlvbi4KCSgqemVyb2V4dHJhY3RzaV9jb21wYXJlMF9zY3JhdGNoKTogU2ltcGxpZnkgbWFzayBnZW5lcmF0aW9uLgoKVHVlIEZlYiAxNiAwOTo1MjoyNiAxOTk5ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL2FybS9hcm0ubWQgKHplcm9leHRyYWN0cWlfY29tcGFyZTBfc2NyYXRjaCk6IEVuc3VyZSB0aGF0CgliaXRmaWVsZCBkb2VzIG5vdCBvdmVyZmxvdyBhIGJ5dGUgYm91bmRhcnkuCgpUdWUgRmViIDE2IDAxOjM3OjMzIDE5OTkgIENoYXJsZXMgRyBXYWxkbWFuICA8Y2d3QGFsdW0ubWl0LmVkdT4KCgkqIGMtY29tbW9uLmMgKHNob3J0ZW5fY29tcGFyZSk6IEdldCB0aGUgbWluL21heCB2YWx1ZSBmcm9tIHRoZQoJdW5kZXJseWluZyB0eXBlIG9mIGFuIGVudW1lcmF0aW9uLCBub3QgdGhlIGVudW1lcmF0ZWQgdHlwZSBpdHNlbGYuCgpNb24gRmViIDE1IDIzOjA0OjQ4IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGp1bXAuYzogSW5jbHVkZSBpbnNuLWF0dHIuaC4KCShkZWxldGVfY29tcHV0YXRpb24pOiBJZiByZWxvYWQgaGFzIGNvbXBsZXRlZCBhbmQgaW5zbiBzY2hlZHVsaW5nCglhZnRlciByZWxvYWQgaXMgZW5hYmxlZCwgdGhlbiBkbyBub3QgZGVwZW5kIG9uIFJFR19ERUFEIG5vdGVzLgoJKiBNYWtlZmlsZS5pbiAoanVtcC5vKTogRGVwZW5kIG9uIGluc24tYXR0ci5oLgoKTW9uIEZlYiAxNSAxNjo1NzozOCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogaTM4Ni5tZCAoYWRkc2kzKTogQWxsb3cgbGVhIGZvciBhbnkgY29uc3RhbnRfcC4KCjE5OTktMDItMTUgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkuY29sdW1iaWEuZWR1PgoKCSogdG9wbGV2LmMgKGRvY3VtZW50ZWRfbGFuZ19vcHRpb25zKTogUmVtb3ZlIC1maWRlbnQgYW5kCgkgIC1mbm9pZGVudCwgd2hpY2ggYXJlIG5vdyBoYW5kbGVkIGJ5IHRoZSBsYW5ndWFnZSBpbmRlcGVuZGVudAoJICBvcHRpb24gcGFyc2VyLgoKMTk5OS0wMi0xNSAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5jb2x1bWJpYS5lZHU+CgoJKiBjLWNvbW1vbi5jIChVTkdFVEMgW1VTRV9DUFBMSUI9MV0pOiBEbyBub3RoaW5nIGlmIGMgaXMgRU9GLgoJKiBjLWxleC5jOiBMaWtld2lzZS4KCSogY3BwbGliLmMgKGNwcF9wdXNoX2J1ZmZlciwgY3BwX3BvcF9idWZmZXIpOiBVc2UgYSBsaW5rZWQKCWxpc3QgaW4gbWFsbG9jZWQgbWVtb3J5IGZvciB0aGUgYnVmZmVyIHN0YWNrLgoJKGNwcF9nZXRfdG9rZW4pOiBEb24ndCBwb3AgdGhlIGxhc3QgYnVmZmVyIG9mZiB0aGUgc3RhY2suCglDYWxscyBhZnRlciBDUFBfRU9GIGhhcyBiZWVuIHJldHVybmVkIHByb2R1Y2UgQ1BQX0VPRiB3aXRoIG5vCglzdGF0ZSBjaGFuZ2UuCgkoY3BwX2ZpbmlzaCk6IFBvcCBsYXN0IGJ1ZmZlciBoZXJlLgoJKGRvX2xpbmUpOiBEb24ndCBmcmVlIGlwLT5sYXN0X25vbWluYWxfZm5hbWUgaWYgaXQgaXMgZXF1YWwgdG8KCWlwLT5mbmFtZS4KCShzcGVjaWFsX3N5bWJvbCk6IElmIGEgVF9DT05TVCBpcyB0aGUgZW1wdHkgc3RyaW5nLCBwdXNoIGEKCXNpbmdsZSBgQCAnIGVzY2FwZSBpbnN0ZWFkLgoJKG1hY3JvZXhwYW5kKTogU3BlY2lhbCBzeW1ib2wgYnVmZmVycyBoYXZlIGVzY2FwZXMgdG9vLgoJKiBjcHBsaWIuaCAoc3RydWN0IGNwcF9idWZmZXIpOiBSZW1vdmUgdW51c2VkIGZpZWxkcywgYWRkIHByZXYKCWJ1ZmZlciBwb2ludGVyLgoJKHN0cnVjdCBjcHBfcmVhZGVyKTogUmVtb3ZlIGJ1ZmZlcl9zdGFjay4gIEFkZAoJYnVmZmVyX3N0YWNrX2RlcHRoLgoJKENQUF9QUkVWX0JVRkZFUiwgQ1BQX05VTExfQlVGRkVSKTogQnVmZmVyIHN0YWNrIGlzIG5vdyBhCglsaW5rZWQgbGlzdC4KCk1vbiBGZWIgMTUgMTQ6NDQ6NTMgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY2NjcC5jOiBEb24ndCBkZWZpbmUgSE9TVF9XSURFX0lOVC4gIFJlcGxhY2UgYWxsIG9jY3VycmVuY2VzIG9mCglXSURFX0lOVCB3aXRoIFdJREVTVF9JTlQuCgoJKiBjZXhwLnk6IExpa2V3aXNlLgoJRG9uJ3QgZGVmaW5lIHVuc2lnbmVkX0hPU1RfV0lERV9JTlQsIENIQVJfQklUIG9yCglIT1NUX0JJVFNfUEVSX1dJREVfSU5ULiAgUmVwbGFjZSBvY2N1cnJlbmNlcyBvZiBQUklOVEZfUFJPVE9fMSgpCglzdHlsZSB3aXRoIFBWUFJPVE8oKSBBVFRSSUJVVEVfUFJJTlRGXzEgc3R5bGUgbWFjcm9zLiAgUmVwbGFjZQoJb2NjdXJyZW5jZXMgb2YgInVuc2lnbmVkX0hPU1QiIHdpdGggInVuc2lnbmVkIEhPU1QiLiAgUHJvdmlkZSBhCglkZWZpbml0aW9uIG9mIHZhcmlhYmxlIGBjODknIHdoZW4gY29tcGlsaW5nIGEgdGVzdCBiaW5hcnkgYW5kIHNldCBpdC4KCgkqIHN5c3RlbS5oOiBEb24ndCBkZWZpbmUgdGhlIFBSSU5URl9QUk9UT18qIG1hY3Jvcy4KCk1vbiBGZWIgMTUgMTE6MzM6NTEgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbG9vcC5jIChtYXJrX2xvb3BfanVtcCk6IEhhbmRsZSBMT19TVU0uICBJZiB3ZSBlbmNvdW50ZXIgc29tZXRoaW5nCgl3ZSBkbyBub3QgdW5kZXJzdGFuZCwgbWFyayB0aGUgbG9vcCBhbmQgY29udGFpbmluZyBsb29wcyBhcyBpbnZhbGlkLgoKTW9uIEZlYiAxNSAwMDo0MDo0NSAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogYWxpYXMuYyAoaW5pdF9hbGlhc19hbmFseXNpcyk6IEF2b2lkIHNlbGYtcmVmZXJlbnRpYWwgdmFsdWUKCXdoZW4gc2V0dGluZyByZWdfa25vd25fdmFsdWUgZnJvbSBSRUdfRVFVQUwgbm90ZXMuCgpTdW4gRmViIDE0IDIzOjEyOjEwIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBpMzg2LmMgKGxlZ2l0aW1hdGVfYWRkcmVzc19wKTogVmVyaWZ5IG1vZGVzIG9mIGJhc2UgYW5kIGluZGV4LgoKU3VuIEZlYiAxNCAyMzowMToyOCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogaTM4Ni5jIChsZWdpdGltYXRlX3BpY19hZGRyZXNzX2Rpc3BfcCk6IFJlbW92ZSBzdGF0aWMuCgkqIGkzODYuaCAoTEVHSVRJTUFURV9QSUNfT1BFUkFORF9QKTogVXNlIGl0IGluc3RlYWQgb2YKCW9wZW4tY29kaW5nIGNhc2VzLgoKU3VuIEZlYiAxNCAyMTowMzoyOCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBleGNlcHQuYyAoc3RhcnRfY2F0Y2hfaGFuZGxlcik6IFVzZSBlbWl0X2NtcF9hbmRfanVtcF9pbnNucy4KCSogZXhwbG93LmMgKHByb2JlX3N0YWNrX3JhbmdlKTogTGlrZXdpc2UuCgkqIGV4cG1lZC5jIChkb19jbXBfYW5kX2p1bXApOiBMaWtld2lzZS4KCSogZXhwci5jIChzdG9yZV9leHByLCBleHBhbmRfZXhwciwgZXhwYW5kX2J1aWx0aW4pOiBMaWtld2lzZS4KCShkb190YWJsZWp1bXApOiBMaWtld2lzZS4KCSogc3RtdC5jIChleHBhbmRfZXhwcl9zdG10LCBleHBhbmRfZW5kX2Nhc2UpOiBMaWtld2lzZS4KCShkb19qdW1wX2lmX2VxdWFsLCBlbWl0X2Nhc2Vfbm9kZXMpOiBMaWtld2lzZS4KCSogb3B0YWJzLmMgKGVtaXRfY21wX2FuZF9qdW1wX2luc25zKTogQ2xhcmlmeSBjb21tZW50cy4gIElmIFVOU0lHTkVEUCwKCXRoZW4gY29udmVydCBjb21wYXJpc29uIHRvIGFuIHVuc2lnbmVkIGNvZGUgYmVmb3JlIGVtaXR0aW5nIHRoZSBqdW1wLgoJKGV4cGFuZF9mbG9hdCwgZXhwYW5kX2ZpeCk6IFVzZSBlbWl0X2NtcF9hbmRfanVtcF9pbnNucy4KClN1biBGZWIgMTQgMDI6MjQ6MTUgMTk5OSAgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpTdW4gRmViIDE0IDAxOjE1OjA0IDE5OTkgIEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKU3VuIEZlYiAxNCAwMDo0NTo1MCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBsb29wLmM6IERpc2FibGUgcmVjZW50IGxvb3AgY2hhbmdlcy4gIFRlbXBvcmFyeSBhcyBKb2VybgoJY29udGludWVzIHRvIGZpeCBwcm9ibGVtcy4KClNhdCBGZWIgMTMgMjM6Mjk6NDIgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGxvb3AuYyAoY29tYmluZV9naXZzX3VzZWRfYnlfb3RoZXIpOiBEZWxldGUuCgkoY29tYmluZV9naXZzX2JlbmVmaXRfZnJvbSk6IERlbGV0ZS4KCShjb21iaW5lX2dpdnMpOiBEZW55IGNvbWJpbmF0aW9uIG9mIGdpdnMgb25seSB1c2VkIG9uY2UuICBTaW1wbGlmeQoJY29kZSB3aXRoIHRoZSBkZWF0aCBvZiBjb21iaW5lX2dpdnNfYmVuZWZpdF9mcm9tLgoKU3VuIEZlYiAxNCAxMToyNDowNSAxOTk5ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBsb29wLmMgKHNjYW5fbG9vcCk6IENhbGwgcmVnX2luX2Jhc2ljX2Jsb2NrX3AgYmVmb3JlCglsb29wX3JlZ191c2VkX2JlZm9yZV9wLgoKU2F0IEZlYiAxMyAwNTozMjowMCAxOTk5ICBSaWNoYXJkIEVhcm5zaGF3ICAocmVhcm5zaGFAYXJtLmNvbSkKCgkqIGFybS5tZDogVXNlIGdlbl9ydHhfRk9PIGluc3RlYWQgb2YgZ2VuX3J0eCAoRk9PLCAuLi4pLgoJKiBhcm0uaDogTGlrZXdpc2UuCgkqIGFybS5jOiBMaWtld2lzZS4KCgkqIGFybS5oIChUQVJHRVRfT1BUSU9OUyk6IFJlZm9ybWF0IGZvciBjbGFyaXR5LgoJKEdPX0lGX0xFR0lUSU1BVEVfQUREUkVTUyk6IFdoZW4gZ2VuZXJhdGluZyBQSUMsIHJlZmVyZW5jZXMgdG8gc3ltYm9scwoJaW4gdGhlIGNvbnN0YW50IHBvb2wgYXJlbid0IHZhbGlkLgoJKExFR0lUSU1BVEVfUElDX09QRVJBTkRfUCk6IExpa2V3aXNlLgoKCSogYXJtLmM6IEluY2x1ZGUgInN5c3RlbS5oIiwgbm90IHN0ZGlvLmggYW5kIHN0cmluZy5oLgoKRnJpIEZlYiAxMiAxMzowNjoyOCAxOTk5ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBzdG10LmMgKGV4cGFuZF9yZXR1cm4pOiBSZXR1cm4gaWYgb3B0aW1pemVfdGFpbF9yZWN1cnNpb24gc3VjY2VlZGVkLgoJKG9wdGltaXplX3RhaWxfcmVjdXJzaW9uKTogQ2hhbmdlIHJldHVybiB0eXBlIGZyb20gdm9pZCB0byBpbnQuCglBZGQgcmV0dXJuIHN0YXRlbWVudHMuCgkqIHRyZWUuaCAob3B0aW1pemVfdGFpbF9yZWN1cnNpb24pOiBDaGFuZ2UgcHJvdG90eXBlIHRvIG1hdGNoLgoKRnJpIEZlYiAxMiAyMTowOTo1MSAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkc19zdWJyZWdfYWRkcmVzcyk6IE5ldyBmdW5jdGlvbiwgYnJva2VuIG91dCBvZgoJZmluZF9yZWxvYWRzX3RvcGxldi4KCShmaW5kX3JlbG9hZHNfdG9wbGV2LCBmaW5kX3JlbG9hZHNfYWRkcmVzc18xKTogVXNlIGl0LgoKRnJpIEZlYiAxMiAxMzoyMDo1MiAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBoODMwMC5tZCAoemVyb19leHRlbmRoaXNpMiBIOC8zMDAgdmFyaWFudCk6IENvcnJlY3RseSBoYW5kbGUKCWV4dGVuZGluZyBhIENPTlNUX0lOVC4KCgkqIGg4MzAwLm1kIChwZWVwaG9sZSBmb3IgY29tYmluaW5nIG1lbXJlZnMpOiBEZWxldGUgaW5jb3JyZWN0IHBlZXBob2xlLgoKRnJpIEZlYiAxMiAxODoyOToxMSAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogbG9vcC5jIChsb29wX2luc25fZmlyc3RfcCwgYml2X2VsaW1pbmF0aW9uX2dpdl9oYXNfMF9vZmZzZXQpOgoJTmV3IGZ1bmN0aW9ucy4KCShtYXliZV9lbGltaW5hdGVfYml2XzEpOiBVc2UgYml2X2VsaW1pbmF0aW9uX2dpdl9oYXNfMF9vZmZzZXQuCgpGcmkgRmViIDEyIDE2OjU2OjEwIDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBsb29wLmMgKGxvYWRfbWVtcyk6IERvbid0IGd1ZXNzIGhvdyB0byBkbyBhIGxvYWQgLyBzdG9yZSwgdXNlCgllbWl0X21vdmVfaW5zbi4KCkZyaSBGZWIgMTIgMDk6MjQ6MjYgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogc3lzdGVtLmg6IFByb3ZpZGUgYSBkZWZpbml0aW9uIGZvciBIT1NUX1dJREVTVF9JTlQsIGV0Yy4KCkZyaSBGZWIgMTIgMjM6Mzc6MjYgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHguYyAoYzR4X2FkZHJlc3NfY29zdCk6IFJldmVydCA5IEZlYiBjaGFuZ2UuCgpGcmkgRmViIDEyIDAwOjUxOjI2IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHNfYWRkcmVzc18xKTogRml4IGhhbmRsaW5nIG9mIGFuIGF1dG9pbmNyZW1lbnRlZAoJcHNldWRvIHdoaWNoIGlzIGhvbWVkIGluIHRoZSBzdGFjay4KCgkqIG1pcHMuYyAoc2F2ZV9yZXN0b3JlX2luc25zKTogRml4IGxvb3AgdG8gc2F2ZS9yZXN0b3JlIEZQIHJlZ2lzdGVycy4KCShjb21wdXRlX2ZyYW1lX3NpemUpOiBDaGFuZ2UgbG9vcCBvdmVyIEZQIHJlZ3MgdG8gYmUgY29uc2lzdGVudAoJd2l0aCB0aGUgbG9vcCBpbiBzYXZlX3Jlc3RvcmVfaW5zbnMuCgpUaHUgRmViIDExIDE3OjM4OjQwIDE5OTkgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGk5NjAvaTk2MC5oIChPVkVSUklERV9PUFRJT05TKTogV2FybiBpZiAtbWxvbmctZG91YmxlLTY0IGlzIHVzZWQuCgkoTE9OR19ET1VCTEVfVFlQRV9TSVpFKTogVW5kZWYgdGhlbiB1bmNvbmRpdGlvbmFsbHkgZGVmaW5lIHRvIDk2LgoKVGh1IEZlYiAxMSAxNToxMTozNSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBtbjEwMjAwLm1kIChic2V0KTsgUmUtZW5hYmxlLgoKVGh1IEZlYiAxMSAxNToyMDo0OSAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogc2gubWQgKGlzX3NmdW5jKTogTmV3IGF0dHJpYnV0ZS4KCSogc2guaCAoSU5TTl9TRVRTX0FSRV9ERUxBWUVELCBJTlNOX1JFRkVSRU5DRVNfQVJFX0RFTEFZRUQpOiBVc2UgaXQuCgpUaHUgRmViIDExIDAxOjA2OjQ5IDE5OTkgIE5hdGhhbiBTaWR3ZWxsICA8bmF0aGFuQGFjbS5vcmc+CgoJKiBmb2xkLWNvbnN0LmMgKHJhbmdlX2Jpbm9wKTogVGFrZSBhY2NvdW50IG9mIHRoZSBib3VuZGVkIG5hdHVyZQoJb2YgZml4ZWQgbGVuZ3RoIGFyaXRobWV0aWMgd2hlbiBjb21wYXJpbmcgdW5ib3VuZGVkIHJhbmdlcy4KClRodSBGZWIgMTEgMDA6MDg6MTcgMTk5OSAgSm9obiBXZWhsZSAgKGpvaG5AZmVpdGguY29tKQoKCSogZnVuY3Rpb24uYyAoYXNzaWduX3N0YWNrX3RlbXBfZm9yX3R5cGUpOiBDbGVhciBiZXN0X3AKCXdoZW4gYW4gZXhhY3QgbWF0Y2ggaXMgZm91bmQuCgoJKiBpMzg2LmggKExPQ0FMX0FMSUdOTUVOVCk6IERlZmluZS4KCSogZnVuY3Rpb24uYyAoYXNzaWduX3N0YWNrX2xvY2FsLCBhc3NpZ25fb3V0ZXJfc3RhY2tfbG9jYWwpOiBVc2UgaXQuCgkoYXNzaWduX3N0YWNrX3RlbXBfZm9yX3R5cGUpOiBOZXcgZnVuY3Rpb24gYmFzZWQgb24gYXNzaWduX3N0YWNrX3RlbXAuCgkoYXNzaWduX3N0YWNrX3RlbXApOiBDYWxsIGl0LgoJKGFzc2lnbl90ZW1wKTogVXNlIGFzc2lnbl9zdGFja190ZW1wX2Zvcl90eXBlLCBub3QgYXNzaWduX3N0YWNrX3RlbXAuCgkqIHN0bXQuYzogVXNlIGFzc2lnbl90ZW1wLCBub3QgYXNzaWduX3N0YWNrX3RlbXAuCgkqIHRtLnRleGk6IERvY3VtZW50IExPQ0FMX0FMSUdOTUVOVC4KCldlZCBGZWIgMTAgMjM6Mjg6MjggMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcmVvcmcuYzogRmluaXNoIGRlbGV0aW5nIGhhbGYtZGVsZXRlZCBjb21tZW50LgoKV2VkIEZlYiAxMCAxNzoxMjoyMSAxOTk5ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBlbWl0LXJ0bC5jIChvcGVyYW5kX3N1YndvcmQpOiBTaWduIGV4dGVuZCBSRUFMX1ZBTFVFX1RPX1RBUkdFVF9TSU5HTEUKCXJlc3VsdC4KCSogZmluYWwuYyAoc3BsaXRfZG91YmxlKTogU2lnbiBleHRlbmQgUkVBTF9WQUxVRV9UT19UQVJHRVRfRE9VQkxFCglyZXN1bHQuCgkqIHJlYWwuYyAoZW5kaWFuKTogRGVsZXRlIHNpZ24gZXh0ZW5zaW9uIGNvZGUuCgkqIGNvbmZpZy9tMzJyL20zMnIubWQgKG1vdnNmX2luc24rMSk6IFJFQUxfVkFMVUVfVE9fVEFSR0VUX1NJTkdMRSBjYWxsCglyZXBsYWNlZCB3aXRoIG9wZXJhbmRfc3Vid29yZCBjYWxsLgoKV2VkIEZlYiAxMCAxNToxNjozOSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEubWQgKGNtb3YgY29tcG91bmQgcGF0dGVybnMpOiBEZWxldGUuICBKdW1wIGNhbiBub3cKCWNyZWF0ZSB0aGUgY29ycmVjdCBjb25zdHJ1Y3RzIGluIHRoZSBmaXJzdCBwbGFjZS4KCldlZCBGZWIgMTAgMTE6MDM6MjIgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiAoYWxwaGFldjYqKTogRml4IHR5cG8gaW4gdGFyZ2V0X2NwdV9kZWZhdWx0Mi4KCldlZCBGZWIgMTAgMTM6NTk6MTggMTk5OSAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKCSogbWJjaGFyLmMgKGxvY2FsX21iX2N1cl9tYXgpOiBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgTUJfQ1VSX01BWCBpcyAwLgoKV2VkIEZlYiAxMCAxMDozNTowNSAxOTk5ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiB0bXAtZW1zZ2lkcy5jOiBEZWxldGUuCgpXZWQgRmViIDEwIDA5OjU3OjA4IDE5OTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBydGxhbmFsLmMgKGZvcl9lYWNoX3J0eCk6IEZpeCBkZWNsYXJhdGlvbiB0byBjb25mb3JtIHRvIEdOVQoJY29kaW5nIHN0YW5kYXJkcy4KCldlZCBGZWIgMTAgMTA6MDk6NDEgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbW4xMDIwMC5tZCAoYnNldCwgYmNscik6IE9wZXJhbmQgMCBpcyBhIHJlYWQvd3JpdGUgb3BlcmFuZC4KCgkqIHJlbG9hZDEuYyAocmVsb2FkX2NvbWJpbmVfbm90ZV9zdG9yZSk6IFNlY29uZCBhcmd1bWVudCBpcyBubwoJbG9uZ2VyIHVudXNlZC9pZ25vcmVkLiAgSGFuZGxlIG11bHRpLXJlZ2lzdGVyIGhhcmQgcmVncy4KCShtb3ZlMmFkZF9ub3RlX3N0b3JlKTogU2ltcGxpZnkuCgpXZWQgRmViIDEwIDEwOjA1OjIzIDE5OTkgIE11bWl0IEtoYW4gIDxraGFuQHhyYXlsaXRoLndpc2MuZWR1PgoKCSogY29sbGVjdDIuYyAoY29sbGVjdF9leGVjdXRlKTogUmVtb3ZlIGN5Z3dpbi1zcGVjaWZpYyBjb2RlLgoKVHVlIEZlYiAgOSAxNzoyNzoyOSAxOTk5ICBOYXRoYW4gU2lkd2VsbCAgPG5hdGhhbkBhY20ub3JnPgoKCSogc3lzdGVtLmggKF8sIE5fKTogUmVtb3ZlIGR1bW15IGkxOG4gbWFjcm9zLgoJKiBwcm90b2l6ZS5jOiBNb3ZlIGluY2x1c2lvbiBvZiBpbnRsLmggdG8gYWZ0ZXIgc3lzdGVtLmguCgkqIGNleHAueTogSW5jbHVkZSBpbnRsLmguCgkqIGNleHAuYzogUmVidWlsdC4KClR1ZSBGZWIgIDkgMTY6NTI6MjIgMTk5OSAgTXVtaXQgS2hhbiAgPGtoYW5AeHJheWxpdGgud2lzYy5lZHU+CgoJKiBpMzg2L2N5Z3dpbi5oIChTVUJUQVJHRVRfT1ZFUlJJREVfT1BUSU9OUyk6IE5ldyBtYWNybyB0byBpZ25vcmUKCWZwaWMvZlBJQyBmb3Igd2luZG93czMyIHRhcmdldHMuCgkqIGkzODYveG0tY3lnd2luLmggKEdFVF9FTlZfUEFUSF9MSVNUKTogUmVwbGFjZSAnXFwnIGluIHdpbmRvd3MzMgoJcGF0aHMgd2l0aCAnLycuCgkqIGkzODYvbWluZ3czMi5oIChDUFBfU1BFQyk6IERlZmluZS4KCShDUFBfUFJFREVGSU5FUyk6IEFkZCBNSU5HVzMyIHZlcnNpb24gaWQuCgkqIGkzODYvY3J0ZGxsLmggKENQUF9QUkVERUZJTkVTKTogTGlrZXdpc2UuCgoJKiBNYWtlZmlsZS5pbiAoY29sbGVjdDIkKGV4ZWV4dCkpOiBEZWxldGUgcmVkdW5kYW50IGRlcGVuZGVuY3kgYW5kCglhZGQgbWlzc2luZyBleGVleHQgdG8gdGFyZ2V0LgoKCSogZ2NjLmMgKGNvbnZlcnRfZmlsZW5hbWUpOiBIYW5kbGUgbnVsbCBmaWxlbmFtZSBhcmd1bWVudC4KCldlZCBGZWIgMTAgMTU6NDY6MTAgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHgubWQgKCptb3ZoZl9ub2Nsb2JiZXIsICptb3ZoaV9ub2Nsb2JiZXIpOiBVc2UKCW0gY29uc3RyYWludCBpbnN0ZWFkIG9mIFFULgoKMTk5OS0wMi0wOSAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AY3lnbnVzLmNvbT4KCgkqIGNwcGxpYi5jIChzcGVjaWFsX3N5bWJvbCk6IE1vdmUgSVAgdG8gYmUgZGVjbGFyZWQgaW4gZnVuY3Rpb24KCXNjb3BlLCByYXRoZXIgdGhhbiBpbmRpdmlkdWFsIGNhc2Ugc3RhdGVtZW50cy4KCjE5OTktMDItMDkgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkuY29sdW1iaWEuZWR1PgoKCSogY3BwZmlsZXMuYyAoZmluY2x1ZGUpOiBIYW5kbGUgcGlwZXMgcHJvcGVybHkgdW5kZXIgb2xkIEJTRAoJICBkZXJpdmF0aXZlcy4KCjE5OTktMDItMDkgIE1lbGlzc2EgTydOZWlsbCAgPG9uZWlsbEBjcy5zZnUuY2E+CgoJKiBzeXN0ZW0uaDogUHJvdmlkZSBmYWxsYmFjayBkZWZpbml0aW9ucyBmb3IgU19JU0NIUiwKCSAgU19JU1NPQ0ssIFNfSVNGSUZPLCBPX05PTkJMT0NLLCBhbmQgT19OT0NUVFkuCgoxOTk5LTAyLTA5ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLmNvbHVtYmlhLmVkdT4KCgkqIGNwcGxpYi5jIChkb19kZWZpbmUpOiBBbGxvdyByZWRlZmluaW5nIF9fU1REQ19fIHdpdGggLUQuCgoxOTk5LTAyLTA5ICBKaW0gQmxhbmR5ICA8amltYkB6d2luZ2xpLmN5Z251cy5jb20+CgoJKiBjb25maWd1cmUuaW46IEZvciBQb3dlclBDIGNvbmZpZ3VyYXRpb25zLCBhY2NlcHQgIjQwMSIsICJlYzYwM2UiLAoJIjc0MCIsIGFuZCAiNzUwIiBhcyB2YWxpZCBhcmd1bWVudHMgdG8gLS13aXRoLWNwdS4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKVHVlIEZlYiAgOSAwMDowMDoxNCAxOTk5ICBNYXJrIEtldHRlbmlzICA8a2V0dGVuaXNAZ251Lm9yZz4KCgkqIGNvbmZpZ3VyZS5pbiAoaVszNDU2N104Ni0qZ251Kik6IFNldCBmbG9hdF9mb3JtYXQgdG8gaTM4Ni4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKTW9uIEZlYiAgOCAyMjozODoyNCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiByczYwMDAubWQ6IFJldmVydCAiYWx0ZXJuYXRlIHVzZSBvZiBjcnMgaWYgY3IwIG5vdCBhdmFpbGFibGUiCglwYXRjaGVzIGZyb20gMDEtMjItMTk5OSwgMDEtMjQtMTk5OSwgMDEtMjYtMTk5OSwgYW5kIDAyLTA4LTE5OTkuCgpNb24gRmViICA4IDIxOjM2OjQ0IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBvdXRwdXQuaCAoY3VycmVudF9mdW5jdGlvbl9oYXNfY29tcHV0ZWRfanVtcCk6IFJlbmFtZSBmcm9tCgljdXJyZW50X2Z1bmN0aW9uX2FkZHJlc3Nlc19sYWJlbHMuCgkqIGZ1bmN0aW9uLmggKHN0cnVjdCBmdW5jdGlvbik6IExpa2V3aXNlIGZvciBhZGRyZXNzZXNfbGFiZWxzIG1lbWJlci4KCSogcnRsLmggKEZVTkNUSU9OX0ZMQUdTX0hBU19DT01QVVRFRF9KVU1QKTogTGlrZXdpc2UuCgkqIGZ1bmN0aW9uLmMgKGN1cnJlbnRfZnVuY3Rpb25faGFzX2NvbXB1dGVkX2p1bXApOiBMaWtld2lzZS4KCVVwZGF0ZSBhbGwgcmVmZXJlbmNlcy4KCSogaW50ZWdyYXRlLmMgKGZ1bmN0aW9uX2Nhbm5vdF9pbmxpbmVfcCk6CglUZXN0IGN1cnJlbnRfZnVuY3Rpb25faGFzX2NvbXB1dGVkX2p1bXAgaW5zdGVhZCBvZiBhZGRyZXNzZXNfbGFiZWxzLgoJKGluaXRpYWxpemVfZm9yX2lubGluZSk6IExpa2V3aXNlIHNhdmUuCgkob3V0cHV0X2lubGluZV9mdW5jdGlvbik6IExpa2V3aXNlIHJlc3RvcmUuCgoJKiBleHByLmMgKGV4cGFuZF9leHByKTogRG9uJ3QgcmVmZXJlbmNlIGFkZHJlc3Nlc19sYWJlbHMgdmFyaWFibGVzLgoJKiBzdG10LmMgKGV4cGFuZF9jb21wdXRlZF9nb3RvKTogU2V0IGhhc19jb21wdXRlZF9qdW1wLgoKMTk5OS0wMi0wOCAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CgoJVGhpcyBpcyBiZWluZyBpbnN0YWxsZWQgb25seSB0byBnZXQgaXQgaW50byB0aGUgcmVwb3NpdG9yeSB0byBoZWxwCgl3aXRoIHRoZSByZXZlcnQsIHJlc3VibWl0ICYgcmV2aWV3IHByb2Nlc3MgZm9yIHRoZSBtYXNzaXZlIHJzNjAwMC5tZAoJY2hhbmdlcy4KCSogcnM2MDAwLm1kIChhbmRzaTNfaW50ZXJuYWwxIHNwbGl0dGVyKTogRG9uJ3Qgc3BsaXQgaWYgdXNpbmcgdGhlCglybHdpbm0gaW5zdHJ1Y3Rpb24uCgkoYW5kZGkzX2ludGVybmFsMSk6IExpa2V3aXNlLgoJKGFuZHNpM19pbnRlcm5hbHsyLDN9KTogQ29ycmVjdCBzb21lIGluc24gbGVuZ3Rocy4KCShhbmRkaTMqKTogUmVzdG9yZSBtaXNzaW5nIFRBUkdFVF9QT1dFUlBDNjQsIGFuZCBkb24ndCBlbWl0IG9sZAoJbW5lbW9uaWNzLgoKTW9uIEZlYiAgOCAyMTozMTowNiAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogbG9vcC5jIChyZWdfc2luZ2xlX3VzYWdlKTogTmV3IGZpbGUtc2NvcGUgdmFyaWFibGUgLi4uCgkoc2Nhbl9sb29wKTogLi4uIG1vdmVkIG91dCBvZiBoZXJlLiAgQWx3YXlzIGluaXRpYWxpemUuCglUZXN0IGxvb3BfaGFzX2NhbGwgaW5zdGVhZCBvZiByZWdfc2luZ2xlX3VzYWdlIG5vdCB6ZXJvLgoJRnJlZSByZWdfc2luZ2xlX3VzYWdlIGFmdGVyIHN0cmVuZ3RoIHJlZHVjdGlvbi4KCShjb3VudF9sb29wX3JlZ3Nfc2V0KTogQXNzdW1lIHNpbmdsZV91c2FnZSBub24temVyby4KCShjb21iaW5lX2dpdnNfdXNlZF9ieV9vdGhlcik6IFRlc3QgcmVnX3NpbmdsZV91c2FnZS4KCShsb2FkX21lbXNfYW5kX3JlY291bnRfbG9vcF9yZWdzX3NldCk6IFJlbW92ZSByZWdfc2luZ2xlX3VzYWdlCglhcyBhIHBhcmFtZXRlci4gIEFzc3VtZSBub24temVyby4KCjE5OTktMDItMDggIFphY2sgV2VpbmJlcmcgIDx6YWNrQG1pZG5pdGUuZWMucmhuby5jb2x1bWJpYS5lZHU+CgoJKiBjcHBsaWIuYyAoc3BlY2lhbF9zeW1ib2wpOiBSZXdyaXRlLiAgRG9uJ3QgY29weSB0aGluZ3MKCSAgbXVsdGlwbGUgdGltZXMuICBIYW5kbGUgX19TVERDX18gc3BlY2lhbGx5LiAgVF9DT05TVAoJICBpbmRpY2F0ZXMgYSBjb25zdGFudCAvc3RyaW5nLy4gIERvbid0IGhhbmRsZSBUXypfVFlQRSBhbmQKCSAgVF9TUEVDX0RFRklORUQuICBVc2UgY3BwX2J1Zl9saW5lX2FuZF9jb2wgaW5zdGVhZCBvZgoJICBhZGp1c3RfcG9zaXRpb24uICBEZXRlcm1pbmUgdGhlIGZpbGUgYnVmZmVyIG9ubHkgaWYgbmVlZGVkLgoJICAoaW5pdGlhbGl6ZV9idWlsdGlucyk6IEhhbmRsZSBfX1NJWkVfVFlQRV9fLAoJICBfX1BUUkRJRkZfVFlQRV9fLCBfX1dDSEFSX1RZUEVfXywgX19VU0VSX0xBQkVMX1BSRUZJWF9fLCBhbmQKCSAgX19SRUdJU1RFUl9QUkVGSVhfXyB3aXRoIFRfQ09OU1Qgc3BlY2lhbCBoYXNodGFiIGVudHJpZXMuCgkgIERvbid0IHByb3ZpZGUgX19PQkpDX187IHRoZSBkcml2ZXIgZG9lcyB0aGF0LiAgUHJvdmlkZQoJICBfX1NURENfVkVSU0lPTl9fLCB1c2luZyBUX0NPTlNULiAgVXNlIFRfU1REQyBmb3IKCSAgX19TVERDX18uICBHaXZlIGluc3RhbGwgdGhlIGxlbmd0aCBvZiBhbGwgc3ltYm9scyBkZWZpbmVkLgoJICAoZXZhbF9pZl9leHByZXNzaW9uKTogRHJvcCBjb2RlIHRvIGluc2VydCBhbmQgcmVtb3ZlIHRoZQoJICAiZGVmaW5lZCIgc3BlY2lhbCBzeW1ib2wuCgoJKiBjcHBsaWIuaDogUmVtb3ZlIFNFTEZfRElSX0RVTU1ZIChubyBsb25nZXIgdXNlZCkuICBSZW1vdmUKCSAgVF8qX1RZUEUgYW5kIFRfU1BFQ19ERUZJTkVEIGZyb20gZW51bSBub2RlX3R5cGU7IGFkZCBUX1NUREMuCgoJKiBjcHBoYXNoLmMgKGluc3RhbGwpOiBEcm9wIHRoZSBgaXZhbHVlJyBwYXJhbWV0ZXIuICBDb25zdGlmeQoJICB0aGUgYHZhbHVlJyBwYXJhbWV0ZXIuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgoJKiBjcHBoYXNoLmggKGluc3RhbGwpOiBDaGFuZ2UgcHJvdG90eXBlIHRvIG1hdGNoLgoJICAodW5pb24gaGFzaHZhbCk6IFJlbW92ZSBgaXZhbCcgbWVtYmVyLgoJKiBjcHBleHAuYyAoY3BwX2xleCk6IEhhbmRsZSBgZGVmaW5lZCcgaGVyZS4KCk1vbiBGZWIgIDggMTc6Mjk6NDIgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcGEuaCAoRVhUUkFfQ09OU1RSQUlOVCk6IEZpeCBjb21tZW50LgoKTW9uIEZlYiAgOCAxODo1Nzo0NSAxOTk5ICBWbGFkaW1pciBOLiBNYWthcm92ICA8dm1ha2Fyb3ZAY3lnbnVzLmNvbT4KCgkqIGMtdHlwZWNrLmMgKGNoZWNrX2luaXRfdHlwZV9iaXRmaWVsZHMpOiBVc2Ugbm9uaW5jcmVtZW50YWwKCWluaXRpYWxpemF0aW9uIG9mIHVuaW9ucyB3aG9zZSBmaXJzdCBtZW1iZXIgaXMgYSBiaXRmaWVsZC4KCVJlbW92ZSB1bm5lY2Vzc2FyeSBjb2RlIGZvciBjaGVja2luZyB0aGUgZGVjbGFyYXRpb24gbW9kZQoJYWZ0ZXIgREVDTF9DX0JJVF9GSUVMRC4KCgkqIHZhcmFzbS5jIChvdXRwdXRfY29uc3RydWN0b3IpOiBBZGRpdGlvbmFsIGNvbW1lbnQgYWJvdXQgdGhlCgljb25zdHJ1Y3RvciBvZiBiaXRmaWVsZCB1bmlvbiBpbml0aWFsaXphdGlvbi4KClR1ZSBGZWIgIDkgMTE6NTU6MDQgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHgubWQgKCptb3ZoaV9zdGlrKTogTmV3IHBhdHRlcm4uCgkobW92aGkpOiBBbGxvdyBzb21lIGltbWVkaWF0ZSBjb25zdGFudHMgdG8gYmUgZGlyZWN0bHkKCXN0b3JlZCBpbiBtZW1vcnkuCgpUdWUgRmViICA5IDExOjM0OjE1IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4Lm1kIChhbGwgY2FsbCBwYXR0ZXJucyk6IEFkZCBjb25zdHJhaW50cyAiVXIiLgoJKGNhbGwsIGNhbGxfdmFsdWUpOiBGb3JjZSBhZGRyZXNzIGludG8gYSByZWdpc3RlciBpZiBub3QgdmFsaWQKCWZvciBhIGNhbGwgaW5zdHJ1Y3Rpb24uCgkobG9hZF9pbW1lZF9hZGRyZXNzKTogRW1pdCBhIFVTRSBvZiB0aGUgU1lNQk9MX1JFRiB0aGF0IGlzCglmb3JjZWQgaW50byBtZW1vcnkuCgkqIGNvbmZpZy9jNHgvYzR4LmMgKGM0eF9wcmludF9vcGVyYW5kKTogRml4ICdDJyBhbmQgJ1UnIG1vZGlmaWVycy4KClR1ZSBGZWIgIDkgMTE6MDg6NDEgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHguYyAoY2FsbF9hZGRyZXNzX29wZXJhbmQsIHN5bWJvbGljX2FkZHJlc3Nfb3BlcmFuZCk6CglSZW5hbWUgZnJvbSBjYWxsX29wZXJhbmQgYW5kIHN5bWJvbGljX29wZXJhbmQgcmVzcGVjdGl2ZWx5LiAgQWxsCgljYWxsZXJzIGNoYW5nZWQuCgkqIGNvbmZpZy9jNHgvYzR4Lm1kIChjYWxsX2FkZHJlc3Nfb3BlcmFuZCwgc3ltYm9saWNfYWRkcmVzc19vcGVyYW5kKToKCUxpa2V3aXNlLgoJKiBjb25maWcvYzR4L2M0eC5oIChjYWxsX2FkZHJlc3Nfb3BlcmFuZCwgc3ltYm9saWNfYWRkcmVzc19vcGVyYW5kKToKCUxpa2V3aXNlLgoJKFBSRURJQ0FURV9DT0RFUyk6IEFsbG93IENPTlNULCBMQUJFTF9SRUYgZm9yIGNhbGxfYWRkcmVzc19vcGVyYW5kLgoKVHVlIEZlYiAgOSAxMDo1MjoyNyAxOTk5ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWcvYzR4L2M0eC5jIChjNHhfbGVnaXRpbWl6ZV9hZGRyZXNzKTogRG9uJ3QgZ2VuZXJhdGUgYQoJTE9fU1VNIGFkZHJlc3MgZm9yIEhJbW9kZSBvciBIRm1vZGUgYnV0IGluc3RlYWQgZm9yY2UgYWRkcmVzcyBpbnRvCglhIHJlZ2lzdGVyIHNvIHRoYXQgaXQgaXMgb2Zmc2V0dGFibGUuCgkoYzR4X2VtaXRfbW92ZV9zZXF1ZW5jZSk6IEhhbmRsZSBMT19TVU0gaW1tZWRpYXRlIGFkZHJlc3MuCgpUdWUgRmViICA5IDEwOjQ2OjQyIDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4LmMgKGM0eF9hZGRyZXNzX2Nvc3QpOiBSZXR1cm4gY29zdCBvZiAxIGZvcgoJUkVHK1JFRyBhZGRyZXNzaW5nIGlmIHN0cmVuZ3RoIHJlZHVjdGlvbiBlbmFibGVkLgoKVHVlIEZlYiAgOSAxMDoxMDozMSAxOTk5ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWcvYzR4L3QtYzR4ICAoTElCR0NDMl9DRkxBR1MpOiBEZWxldGUuCgkoVEFSR0VUX0xJQkdDQzJfQ0ZMQUdTKTogRGVmaW5lLgoKMTk5OS0wMi0wOCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy92ODUwL3Y4NTAubWQ6IFJlcGxhY2UgXFxuXFx0IHdpdGggXFw7CgoJKiBjb25maWcvdjg1MC92ODUwLm1kOiBFbmZvcmNlIFRBUkdFVF9MT05HX0NBTExTIG9wdGlvbi4KCSogY29uZmlnL3Y4NTAvdjg1MC5jIChjb25zdHJ1Y3RfcmVzdG9yZV9qciwgY29uc3RydWN0X3NhdmVfamFybCk6CglFbmZvcmNlIFRBUkdFVF9MT05HX0NBTExTIG9wdGlvbi4KCk1vbiBGZWIgIDggMTE6NDM6MDcgMTk5OSAgRG9ubiBUZXJyeSAgPGRvbm5AaW50ZXJpeC5jb20+CgoJKiByZWFsLmMgKFBVVF9SRUFMKSBbWEZtb2RlXTogWmVybyB0aGUgYmFsYW5jZSBvZiB0aGUgc3RydWN0dXJlLgoKTW9uIEZlYiAgOCAxMTozNzoyNCAxOTk5ICBNYXJjIEVzcGllICAoZXNwaWVAY3ZzLm9wZW5ic2Qub3JnKQoKCSogbTg4ay90LWx1bmEtZ2FzOiBSZW1vdmUgYmFzaCBkZXBlbmRlbmN5LgoKTW9uIEZlYiAgOCAxMTozNDo0NCAxOTk5ICBHcmFoYW0gIDxncmFoYW1zQHJjcC5jby51az4KCgkqIGNvbGxlY3QyLmMgKHhyZWFsbG9jKTogRml4IHR5cG8gaW4gbGFzdCBjaGFuZ2UuCgpNb24gRmViICA4IDA5OjEzOjM4IDE5OTkgIEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKU3VuIEZlYiAgNyAyMjoxODo0MiAxOTk5ICBSb2JlcnQgTGlwZSAgPHJvYmVydGxpcGVAdXNhLm5ldD4KCgkqIHRyZWUuaCAoVFlQRV9DSEVDSyk6IE1ha2UgaXQgY2xlYXIgdG8gdGhlIHByZXByb2Nlc3NvcgoJdGhhdCB3ZSBkbyBub3Qgd2FudCBtYWNybyByZXBsYWNlbWVudCB3aXRoaW4gYSBjaGFyYWN0ZXIgY29uc3RhbnQuCgkoVFlQRV9DSEVDSzEpOiBMaWtld2lzZS4KClN1biBGZWIgIDcgMTU6Mzc6MTAgMTk5OSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHJlZS5oIChERUNMX1ApOiBOZXcgbWFjcm8uCgpTdW4gRmViICA3IDAxOjE1OjA0IDE5OTkgIEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKU2F0IEZlYiAgNiAxODoxNDo0NiAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBtbjEwMzAwLm1kIChyZWxvYWRfaW5zaSk6IERvIG5vdCBlYXJseWNsb2JiZXIgdGhlIG91dHB1dCBvcGVyYW5kLgoKCSogUkVBRE1FLmc3NywgZ2NjLmMsIGdjYy50ZXhpOiBVcGRhdGUgZW1haWwgYWRkcmVzc2VzLgoJKiBpbnZva2UudGV4aSBzeXN0ZW0uaDogTGlrZXdpc2UuCgpTYXQgRmViICA2IDExOjA0OjA4IDE5OTkgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIHVucm9sbC5jIChmaW5kX3NwbGl0dGFibGVfZ2l2cyk6IEFmdGVyIGV4cHJlc3NfZnJvbSwgY2FsbCByZXBsYWNlX3J0eAoJdG8gY29udmVydCBkZXN0X3JlZyB0byBuZXdfcmVnLgoKU2F0IEZlYiAgNiAxMDozMTozNSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiByZWxvYWQxLmMgKHJlbG9hZF9jb21iaW5lX25vdGVfc3RvcmUpOiBCZSBtb3JlIGNhcmVmdWwgd2l0aAoJU1RSSUNUX0xPV19QQVJULCBaRVJPX0VYVFJBQ1QgYW5kIFNJR05fRVhUUkFDVC4KCShtb3ZlMmFkZF9ub3RlX3N0b3JlKTogTGlrZXdpc2UuCgpTYXQgRmViICA2IDEwOjE4OjAxIDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNwcGZpbGVzLmMgKHJlYWRfYW5kX3ByZXNjYW4pOiBDYXN0IHRoZSByZXN1bHQgb2YgYHhyZWFsbG9jJyB0bwoJVV9DSEFSKiB3aGVuIGFzc2lnbmluZyB0byBvbmUuICBFbnN1cmUgdGhlIHZhbHVlcyBvZiBhID86IG9wZXJhdG9yCgloYXZlIHRoZSBzYW1lIHR5cGUuCgoJKiBjcHBpbml0LmMgKGluaXRpYWxpemVfY2hhcl9zeW50YXgpOiBVc2UgSyZSIGZ1bmN0aW9uIGRlZmluaXRpb24uCgpTYXQgRmViICA2IDExOjE3OjAzIDE5OTkgIFJpY2hhcmQgRWFybnNoYXcgIDxyZWFybnNoYUBhcm0uY29tPgoKCVN1cHBvcnQgZm9yIEFSTTkKCSogY29uZmlnL2FybS9hcm0uYyAoYWxsX3Byb2NzKTogQWRkIGFybTkgYW5kIGFybTl0ZG1pLgoJKiBjb25maWcvYXJtL2FybS5oICgoVEFSR0VUX0NQVV9hcm05LCBUQVJHRVRfQ1BVRF9hcm05dGRtaSk6IERlZmluZS4KCShUQVJHRVRfQ1BVX0RFRkFVTFQpOiBSZXdvcmsgdG8gc3VwcG9ydCBBUk05LgoJKENQUF9DUFVfQVJDSF9TUEVDKTogTGlrZXdpc2UuCgkoZW51bSBwcm9jZXNzb3JfdHlwZSk6IExpa2V3aXNlLgoJKiBjb25maWcvYXJtL2FybS5tZCAoYXR0ciBjcHUpOiBBZGQgYXJtOS4KCglHZW5lcmFsIHNjaGVkdWxpbmcgY2hhbmdlcwoJKiBjb25maWcvYXJtL2FybS5jIChNQVhfSU5TTlNfU0tJUFBFRCk6IERlbGV0ZS4KCShtYXhfaW5zbnNfc2tpcHBlZCk6IE5ldyB2YXJpYWJsZS4KCShhcm1fb3ZlcnJpZGVfb3B0aW9ucyk6IElmIGdlbmVyYXRpbmcgaGFyZCBmbG9hdGluZyBwb2ludCBjb2RlIGZvcgoJdGhlIEZQQSwgZW1pdCBjb2RlIGZvciB2ZXJzaW9uIDMuCglXaGVuIG9wdGltaXppbmcgZm9yIHNwYWNlLCBkb24ndCBzeW50aGVzaXplIGNvbnN0YW50cy4KCVJld29yZCBzZXZlcmFsIGZsYWdzIGJhc2VkIG9uIHRoZSByZXF1ZXN0ZWQgcHJvY2Vzc29yIGFuZCBvcHRpbWl6YXRpb24KCWxldmVsLgoJKHVzZV9yZXR1cm5faW5zbik6IE5ldyBhcmd1bWVudCBpc2NvbmQsIGFsbCBjYWxsZXJzIGNoYW5nZWQuICBEb24ndAoJdXNlIGEgcmV0dXJuIGluc24gaWYgaXQgd2lsbCBiZSBjb25kaXRpb25hbCBhbmQgdGhhdCB3b3VsZCBiZQoJZXhwZW5zaXZlOyBlZyBvbiBTdHJvbmdBUk0uCgkoYXJtX2FkanVzdF9jb3N0KTogQW50aS0gYW5kIG91dHB1dC0gZGVwZW5kZW5jaWVzIG5vcm1hbGx5IGhhdmUgbm8KCWNvc3QuCgkobG9hZF9tdWx0aXBsZV9zZXF1ZW5jZSk6IE5ld2VyIEFSTXMgZG9uJ3QgYmVuZWZpdCBmcm9tIGxkbSBpZgoJdGhlIHNlcXVlbmNlIGlzIHNob3J0LgoJKGZpbmFsX3ByZXNjYW5faW5zbik6IFVzZSBtYXhfaW5zbnNfc2tpcHBlZCBpbnN0ZWFkIG9mCglNQVhfSU5TTlNfU0tJUFBFRC4gIE5vdGUgd2hldGhlciB3ZSB3aWxsIG1ha2UgYSByZXR1cm4gaW5zdHJ1Y3Rpb24KCWNvbmRpdGlvbmFsLCBhbmQgYXZpb2QgdGhpcyBpZiBpdCB3b3VsZCBiZSBleHBlbnNpdmUuCgkqIGNvbmZpZy9hcm0vYXJtLm1kIChzY2hlZHVsaW5nIGF0dHJpYnV0ZXMgYW5kIGZ1bmN0aW9uIHVuaXRzKToKCVJld3JpdGUgdG8gYmV0dGVyIGRlc2NyaWJlIEFSTTgsIDkgYW5kIFN0cm9uZ0FSTS4KCgkqIGNvbmZpZy9hcm0vYXJtLm1kICgqbW92aGlfaW5zbl9saXR0bGVlbmQpOiBNYWtlIG9wMCBwcmVkaWNhdGUKCXNfcmVnaXN0ZXJfb3BlcmFuZC4KCSgqaWZjb21wYXJlX3BsdXNfbW92ZSk6IFVzZSBhcm1fcmhzX29wZXJhbmQgaW4gcGxhY2Ugb2YKCWFybV9yaHNtX29wZXJhbmQuICBSZXdvcmsgY29uc3RyYWludHMuCgkoKmlmX3BsdXNfbW92ZSk6IExpa2V3aXNlLgoJKCppZmNvbXBhcmVfbW92ZV9wbHVzKTogTGlrZXdpc2UuCgkoKmlmX21vdmVfcGx1cyk6IExpa2V3aXNlLgoJKCppZmNvbXByZV9hcml0aF9tb3ZlKTogTGlrZXdpc2UuCgkoKmlmX2FyaXRoX21vdmUpOiBMaWtld2lzZS4KCSgqaWZjb21wYXJlX21vdmVfYXJpdGgpOiBMaWtld2lzZS4KCSgqaWZfbW92ZV9hcml0aCk6IExpa2V3aXNlLgoKCSogY29uZmlnL2FybS94bS1uZXRic2QuaDogRG9uJ3QgaW5jbHVkZSBhcm0veG0tYXJtLmguCgoxOTk5LTAyLTA1ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAY3lnbnVzLmNvbT4KCgkqIGxvb3AuYyAoY2hlY2tfZGJyYV9sb29wKTogQSBzdG9yZSB1c2luZyBhbiBhZGRyZXNzIGdpdiBmb3Igd2hpY2gKCXdlIGhhdmUgbm8gbGlmZSBpbmZvcm1hdGlvbiBpcyBub3QgcmV2ZXJzaWJsZS4KCkZyaSBGZWIgIDUgMTc6MDg6MDEgMTk5OSAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKCSogZnVuY3Rpb24uYyAoZml4dXBfdmFyX3JlZnMpOiBTY2FuIGNhdGNoX2NsYXVzZXMgdG9vLgoKRnJpIEZlYiAgNSAxMTo0OTo0OSAxOTk5ICBCZW5qYW1pbiBLb3NuaWsgIDxia296QGxvb255LmN5Z251cy5jb20+CgoJKiBjLWNvbW1vbi5jIChkZWNsX2F0dHJpYnV0ZXMpOiBGaXggcmVzZXJ2ZWQgc3BhY2UgZm9yIGluaXRfcHJpb3JpdHkuCgkqIHRyZWUuaCAoTUFYX1JFU0VSVkVEX0lOSVRfUFJJT1JJVFkpOiBOZXcgbWFjcm8uCgpGcmkgRmViICA1IDEyOjM3OjA1IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGxvb3AuYyAoc3RyZW5ndGhfcmVkdWNlKTogQ2xlYXIgbm90X2V2ZXJ5X2l0ZXJhdGlvbiB3aGVuCglwYXNzaW5nIHRoZSBOT1RFX0lOU05fTE9PUF9DT05UIG5vdGUuCgoJKiBoYWlmYS1zY2hlZC5jIChhZGRfZGVwZW5kZW5jZSk6IERvIG5vdCBhZGQgYSBkZXBlbmRlbmN5IG9uIGEKCW5vdGUuCgpGcmkgRmViICA1IDEwOjU1OjQzIDE5OTkgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiByZWNvZy5jIChzcGxpdF9ibG9ja19pbnNucyk6IE9ubHkgY2FsbCB1cGRhdGVfZmxvd19pbmZvIGlmCglpbnN0cnVjdGlvbiBzY2hlZHVsaW5nIGlzIGVuYWJsZWQuCgoxOTk5LTAyLTA1ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLmNvbHVtYmlhLmVkdT4KCgkqIE1ha2VmaWxlLmluIChnZW4tcHJvdG9zKTogVXNlIGxpYmNwcC5hIGxpa2UgZXZlcnlvbmUgZWxzZS4KCkZyaSBGZWIgIDUgMDc6MDk6MjkgMTk5OSAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGxvb3AuYyAoZmlyc3RfbG9vcF9zdG9yZV9pbnNuKTogTmV3IGZpbGUtc2NvcGUgdmFyaWFibGUuCgkocHJlc2Nhbl9sb29wKTogU2V0IGl0LgoJKGNoZWNrX2RicmFfbG9vcCk6IENoZWNrIGlmIGEgc3RvcmUgZGVwZW5kcyBvbiBhIHJlZ2lzdGVyCgl0aGF0IGlzIHNldCBhZnRlciB0aGUgc3RvcmUuCgpGcmkgRmViICA1IDA2OjU1OjE1IDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiB1bnJvbGwuYyAoZW50aXJlIGZpbGUpOiBSZW1vdmUgdGFicyAvIHNwYWNlcyBhdCBlbmQgb2YgbGluZXMuCglSZXBsYWNlIHNwYWNlcyB3aXRoIHRhYnMgd2hlcmUgYXBwcm9wcmlhdGUuCgpUaHUgRmViICA0IDE1OjEyOjQxIDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBsb29wLmMgKHNjYW5fbG9vcCk6IE5ldyBhcmd1bWVudCBsb29wX2NvbnQuICBDaGFuZ2VkIGNhbGxlci4KCShzdHJlbmd0aF9yZWR1Y2UpOiBOZXcgYXJndW1lbnQgbG9vcF9jb250LiBDaGFuZ2VkIGNhbGxlci4KCUJlZm9yZSBjbGVhcmluZyBub3RfZXZlcnlfaXRlcmF0aW9uIGFmdGVyIGEgbGFiZWwsIGNoZWNrIGlmCgl3ZSBhcmUgbm90IGFscmVhZHkgcGFzdCBMT09QX0NPTlQuCgoxOTk5LTAyLTA0ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLmNvbHVtYmlhLmVkdT4KCgkqIGNwcGVycm9yLmMgKGNwcF9wcmludF9jb250YWluaW5nX2ZpbGVzKTogRml4IGZvcm1hdHRpbmcKCWJ1ZyBpbmR1Y2VkIGJ5IG1lcmdlLgoKMTk5OS0wMi0wNCAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5waHlzLmNvbHVtYmlhLmVkdT4KCgkqIGNwcGxpYi5jIChpbml0aWFsaXplX2NoYXJfc3ludGF4KTogTW92ZSB0byBjcHBpbml0LmMuCgkoY3BwX2RlZmluZSk6IFJlbW92ZSByZWR1bmRhbnQgc3ludGF4IGNoZWNrcy4KCShtYWtlX2Fzc2VydGlvbik6IFJlbmFtZSBjcHBfYXNzZXJ0LCByZW1vdmUgcmVkdW5kYW50IHN5bnRheAoJY2hlY2tzLCBleHBvcnQuCgkoY3BwX29wdGlvbnNfaW5pdCk6IERvbid0IGluaXQgdGhpbmdzIHRvIHplcm8gdHdpY2UuCgkoY3BwX2V4cGFuZF90b19idWZmZXIpOiBVc2UgbWVtY3B5LCBub3QgYSBjaGFyLWJ5LWNoYXIgbG9vcC4KCShkb19pbmNsdWRlKTogS2lsbCBleGNlc3NpdmVseSB2ZXJib3NlICNpbXBvcnQgd2FybmluZyB0aGF0CglzbnVjayBiYWNrIGluIGluIHRoZSBnY2MyIG1lcmdlLgoJKGNvbnZlcnRfc3RyaW5nKTogUmVtb3ZlZC4KCShkb19saW5lKTogUmV3cml0ZSB3aXRoIHNpbXBsZSBsYXN0LW5hbWUtdXNlZCBjYWNoZSBpbnN0ZWFkIG9mCglwcml2YXRlIGhhc2h0YWJsZS4KCShjcHBfc3RhcnRfcmVhZCk6IENhbGwgaW5pdGlhbGl6ZV9jaGFyX3N5bnRheCBoZXJlLCBub3QuLi4KCShjcHBfcmVhZGVyX2luaXQpOiAuLi5oZXJlLgoJKGNwcF9oYW5kbGVfb3B0aW9ucyk6IFN1cHBvcnQgdGhlIC1zdGQgc3dpdGNoLgoJKiBjcHBsaWIuaCAoY3BwX2J1ZmZlcik6IEFkZCBsYXN0X25vbWluYWxfZm5hbWUgbWVtYmVyLgoJKGNwcF9vcHRpb25zKTogQWRkIGM5eCBmbGFnLgoJRGVjbGFyZSBhbGwgdGhlIGlzXyogdGFibGVzIGFuZCB0cmlncmFwaCB0YWJsZSBoZXJlLCBhcyBjb25zdC4KCVByb3RvdHlwZSBjcHBfYXNzZXJ0IGFuZCBpbml0aWFsaXplX2NoYXJfc3ludGF4LgoJKiBjcHBpbml0LmM6IE5ldyBmaWxlLgoJKiBjcHBmaWxlcy5jIChyZWFkX2FuZF9wcmVzY2FuKTogT3B0aW1pemUuCgkqIE1ha2VmaWxlLmluIChMSUJDUFBfT0JKUyk6IEFkZCBjcHBpbml0Lm8uCgpUaHUgRmViICA0IDEwOjQ2OjMwIDE5OTkgIEdhdmluIFJvbWlnLUtvY2ggIDxnYXZpbkBjeWdudXMuY29tPgoKCSogY29uZmlnL21pcHMvbWlwcy5tZCAoW3VdZGl2bW9kc2k0LFt1XWRpdm1vZGRpNCxbdV1kaXZzaTMsW3VdZGl2ZGkzLAoJW3VdbW9kc2kzLFt1XW1vZGRpMykgOiBEb24ndCBjb3B5IHRoZSAiemVybyIgYXJndW1lbnQgdG8gYSByZWdpc3RlcgoJYmVmb3JlIGNhbGxpbmcgZ2VuX2Rpdl90cmFwLgoKV2VkIEZlYiAgMyAyMTo1NjoyNyAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW4gKGhwcGExLjEtKi0qLCBocHBhMiotKik6IFVzZSBzeW1ib2xpYyB2YWx1ZSByYXRoZXIKCXRoYW4gbnVtZXJpYyB2YWx1ZSBmb3IgdGFyZ2V0X2NwdV9kZWZhdWx0Li4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKV2VkIEZlYiAgMyAyMTo1NTo1NiAxOTk5ICBNYXJjIEVzcGllICA8TWFyYy5Fc3BpZUBsaWFmYS5qdXNzaWV1LmZyPgoKCSogTWFrZWZpbGUuaW4gKHhnY2MkKGV4ZWV4dCkpOiBSZW1vdmUgY2hvb3NlLXRlbXAsIHBleGVjdXRlIGFuZAoJbWtzdGVtcC4gIEdldCB0aGVtIGZyb20gbGliaWJlcnR5LgoJKENPTExFQ1QyX09CSlMpOiBTaW1pbGFybHkgZm9yIGNob29zZS10ZW1wLCBjcGx1cy1kZW0gYW5kIG1rc3RlbXAuCgkoUFJPVE9fT0JKUyk6IFNpbWlsYXJseSBmb3IgY2hvb3NlLXRlbXAsIGdldG9wdCwgZ2V0b3B0MSBhbmQgcGV4ZWN1dGUuCgkoY3BsdXMtZGVtLm8sIHBleGVjdXRlLm8sIGNob29zZS10ZW1wLm8pOiBSZW1vdmUgYnVpbGQgcnVsZXMuCgkobWtzdGVtcC5vLCBnZXRvcHQxLm8sIGdldG9wdC5vKTogTGlrZXdpc2UuCgoJKiBwYS1nYXMuaCAoVEFSR0VUX0RFRkFVTFQpOiBVc2Ugc3ltYm9saWMgdmFsdWVzIHJhdGhlciB0aGFuIG51bWVyaWMKCXZhbHVlcy4KCSogcGEtaHB1eC5oIChMSU5LX1NQRUMpOiBMaWtld2lzZS4KCSogcGEtaHB1eDEwLmggKExJTktfU1BFQyk6IExpa2V3aXNlLgoJKiBwYS1ocHV4OS5oIChMSU5LX1NQRUMpOiBMaWtld2lzZS4KCSogcGEtb3NmLmggKExJTktfU1BFQyk6IExpa2V3aXNlLgoJKiBwYS1wcm8uaCAoVEFSR0VUX0RFRkFVTFQpOiBMaWtld2lzZS4KCSogcGExLmggKFRBUkdFVF9ERUZBVUxUKTogTGlrZXdpc2UuCgkqIHBhLmggKE1BU0tfKik6IE5ldyBkZWZpbmVzLgoJKFRBUkdFVF8qKTogVXNlIHN5bWJvbGljIHZhbHVlcyByYXRoZXIgdGhhbiBudW1lcmljIHZhbHVlcy4KCShUQVJHRVRfU1dJVENIRVMpOiBMaWtld2lzZS4KCShUQVJHRVRfREVGQVVMVCk6IExpa2V3aXNlLgoJKENQUF9TUEVDKTogTGlrZXdpc2UuCgpXZWQgRmViICAzIDIxOjA3OjM4IDE5OTkgIEJlcm5kIFNjaG1pZHQgIDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCgkqIHJlbG9hZDEuYyAocmVsb2FkX2NzZV9yZWdzXzEpOiBVbmRvIEphbiAxNiBwYXRjaC4KCSogcmVsb2FkLmMgKGZpbmRfcmV1c2FibGVfcmVsb2FkKTogTmV3IGZ1bmN0aW9uLCBicm9rZW4gb3V0IG9mCglwdXNoX3JlbG9hZC4gIEFkZCBjb2RlIHRvIHZlcmlmeSB0aGF0IG5vbmUgb2YgdGhlIGludm9sdmVkCglvdXRwdXRzIGFyZSBzdWJqZWN0IHRvIGVhcmx5Y2xvYmJlcnMuCgkocHVzaF9yZWxvYWQpOiBCcmVhayBvdXQgbmV3IGZ1bmN0aW9uIGZpbmRfcmV1c2FibGVfcmVsb2FkLgoJRGVsZXRlICJyZWdpc3RlciIga2V5d29yZCBmb3IgSU4sIE9VVCBhcmdzLgoKV2VkIEZlYiAgMyAxNTo1MTowNCAxOTk5ICBHYXZpbiBSb21pZy1Lb2NoICA8Z2F2aW5AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9taXBzL21pcHMuYyAodHJ1ZV9yZWdfb3JfMF9vcGVyYW5kKSA6IE5ldyBmdW5jdGlvbi4KCSogY29uZmlnL21pcHMvbWlwcy5oIChQUkVESUNBVEVfQ09ERVMpOiBBZGQgdHJ1ZV9yZWdfb3JfMF9vcGVyYW5kLgoJKiBjb25maWcvbWlwcy9taXBzLm1kIChkaXZfdHJhcCxkaXZfdHJhcF9ub3JtYWwsZGl2X3RyYXBfbWlwczE2KToKCVVzZSB0cnVlX3JlZ19vcl8wX29wZXJhbmQgZm9yIGRpdl90cmFwLgoKV2VkIEZlYiAgMyAyMDo0NDo1OSAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogbG9vcC5oIChleHByZXNzX2Zyb20pOiBEZWNsYXJlLgoJKHN0cnVjdCBpbmR1Y3Rpb24pOiBSZXBsYWNlIGRlcml2ZWQgZmxhZyB3aXRoIGRlcml2ZWRfZnJvbSBwb2ludGVyLgoJKiBsb29wLmMgKHN0cmVuZ3RoX3JlZHVjZSwgcmVjb3JkX2dpdiwgcmVjb21iaW5lX2dpdnMpOiBMaWtld2lzZS4KCShleHByZXNzX2Zyb20pOiBObyBsb25nZXIgc3RhdGljLgoJKiB1bnJvbGwuYyAoZmluZF9zcGxpdHRhYmxlX2dpdnMpOiBSZXBsYWNlIGRlcml2ZWQgd2l0aCBkZXJpdmVkX2Zyb20uCglXaGVuIHByb2Nlc3NpbmcgYW4gYWRkcmVzcyBnaXYgd2l0aCB3aGljaCBhbm90aGVyIGdpdiBoYXMgYmVlbgoJY29tYmluZWQgdGhhdCBoYXMgYWxzbyBiZWVuIGRlcml2ZWQgZnJvbSBhIHRoaXJkIGdpdiwgaGFuZGxlIGxpa2UKCWhhdmluZyBjb21iaW5lZCB3aXRoIHRoZSB0aGlyZCBnaXYuCglTZXQgc3BsaXR0YWJsZV9yZWdzX3VwZGF0ZXMgYXBwcm9wcmlhdGVseSBmb3IgZGVyaXZlZCBnaXZzLgoKV2VkIEZlYiAgMyAxNToyNjo1OCAxOTk5ICBHYXZpbiBSb21pZy1Lb2NoICA8Z2F2aW5AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9taXBzL21pcHMubWQgKGRpdl90cmFwX21pcHMxNik6IFJlbW92ZSBub3AncyBhZnRlciBicmFuY2hlcy4KCldlZCBGZWIgIDMgMTE6NTY6MjMgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcGEuYyAoaW5zbl9zZXRzX2FuZF9yZWZzX2FyZV9kZWxheWVkKTogTmV3IGZ1bmN0aW9uLgoJKiBwYS5oIChJTlNOX1NFVFNfQVJFX0RFTEFZRUQpOiBVc2UgaXQuCgkoSU5TTl9SRUZFUkVOQ0VTX0FSRV9ERUxBWUVEKTogTGlrZXdpc2UuCgpXZWQgRmViICAzIDA2OjI0OjQ5IDE5OTkgIFJpY2hhcmQgRWFybnNoYXcgIChyZWFybnNoYUBhcm0uY29tKQoKCSogY29uZmlnL2FybS90LWFybS1lbGYgKExJQkdDQzJfQ0ZMQUdTKTogRGVsZXRlLgoJKiBjb25maWcvYXJtL3QtbGludXggKExJQkdDQzJfQ0ZMQUdTKTogRGVsZXRlLgoJKFRBUkdFVF9MSUJHQ0MyX0NGTEFHUyk6IERlZmluZS4KCShMSUJHQ0MyX0RFQlVHX0NGTEFHUyk6IERlZmluZS4KCSogY29uZmlnL2FybS90LW5ldGJzZDogTGlrZXdpc2UuCgkqIGNvbmZpZy9hcm0vdC1zZW1pOiBMaWtld2lzZS4KCSogY29uZmlnL2FybS90LXNlbWlhb2Y6IExpa2V3aXNlLgoJKiBjb25maWcvYXJtL3QtcmlzY2l4OiBMaWtld2lzZS4KCldlZCBGZWIgIDMgMTA6NTk6MDcgMTk5OSAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uY3MudW5pLWRvcnRtdW5kLmRlPgoKCSogY29uZmlnL202OGsvbTY4ay5jIChwcmludF9vcGVyYW5kX2FkZHJlc3MpOiBXaGVuIHByaW50aW5nIGEKCVNZTUJPTF9SRUYgdGhhdCBlbmRzIGluIGAuPGxldHRlcj4nIHB1dCBwYXJlbnRoZXNlcyBhcm91bmQgaXQuCgpUdWUgRmViICAyIDIzOjM4OjM1IDE5OTkgIERhdmlkIE8nQnJpZW4gIDxvYnJpZW5ARnJlZUJTRC5vcmc+CgoJKiBpMzg2L2ZyZWVic2QqLmggbm93IGFsbG93cyAnJCcgaW4gbGFiZWwgbmFtZXMgYW5kIGRvZXMgbm90IHVzZSB0aGUKCVBDQyBzdHJ1Y3QgcmV0dXJuIG1ldGhvZC4KClR1ZSBGZWIgIDIgMjI6Mzg6MjMgMTk5OSAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW46IENoYW5nZSBhbGwgdXNlcyBvZiBBUiB0byBBUl9GT1JfVEFSR0VULiAgQ2hhbmdlIGFsbCB1c2VzCglvZiBIT1NUX0FSIHRvIEFSLiAgTGlrZXdpc2UgZm9yIEFSX0ZMQUdTLCBSQU5MSUIsIGFuZCBSQU5MSUJfVEVTVC4KCShSQU5MSUJfVEVTVCk6IFRlc3QgdG8gc2VlIGlmIHJhbmxpYiBleGlzdHMuICBPbmx5IHRlc3QgYWJzb2x1dGUgZmlsZQoJbmFtZXMgaWYgaG9zdCA9PSB0YXJnZXQuCgkoSE9TVF9BUiwgSE9TVF9BUl9GTEFHUywgSE9TVF9SQU5MSUIsIEhPU1RfUkFOTElCX1RFU1QpOiBEZWxldGUuCgkoQVJfRkxBR1NfRk9SX1RBUkdFVCk6IFJlbmFtZWQgZnJvbSBBUl9GT1JfVEFSR0VUX0ZMQUdTLgoJKEFSLCBBUl9GTEFHUywgT0xEQVIsIE9MREFSX0ZMQUdTLCBSQU5MSUIsIFJBTkxJQl9URVNUKTogRGVsZXRlIHJ1bGVzCglzZXR0aW5nIHRoZW0gdG8gKl9GT1JfVEFSR0VULgoJKiBjcm9zcy1tYWtlIChBUiwgQVJfRkxBR1MsIE9MREFSLCBPTERBUl9GTEFHUywgUkFOTElCLCBSQU5MSUJfVEVTVCk6CglEZWxldGUuCgpUdWUgRmViICAyIDIyOjM4OjE5IDE5OTkgIFRoZW9kb3JlIFBhcGFkb3BvdWxvICA8VGhlb2RvcmUuUGFwYWRvcG91bG9Ac29waGlhLmlucmlhLmZyPgoKCSogdG9wbGV2LmggKHJlYWRfaW50ZWdyYWxfcGFyYW1ldGVyKTogRGVjbGFyZS4KCSogdG9wbGV2LmMgKHJlYWRfaW50ZWdyYWxfcGFyYW1ldGVyKTogTmV3IGZ1bmN0aW9uLgoKRnJpIEphbiAyOSAyMTowMDo1NiAxOTk5ICBCb2IgTWFuc29uICA8bWFuc29uQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIHJlc291cmNlLmMsIHJlc291cmNlLmg6IE5ldyBmaWxlcy4KCSogTWFrZWZpbGUuaW4gKE9CSlMpOiBBZGQgaXQuCgoJKiBoYWlmYS1zY2hlZC5jIChyZWdub191c2VfaW4pOiBNb3ZlZCB0byBydGxhbmFsLmMuCgkoc3BsaXRfYmxvY2tfaW5zbnMpOiBNb3ZlZCB0byByZWNvZy5jLgoJKHVwZGF0ZV9mbG93X2luZm8pOiBNYWtlIHB1YmxpYy4KCSogcnRsLmg6IERlY2xhcmUgdGhlbS4KCgkqIHJlb3JnLmM6IE1vdmVkIHRoZSBmdW5jdGlvbnMgZGVhbGluZyB3aXRoIGNvbXB1dGluZyByZXNvdXJjZQoJdXNhZ2UgdG8gcmVzb3VyY2UuYy4KCgkqIHNjaGVkLmMgKHJlZ25vX3VzZV9pbik6IE1vdmVkIHRvIHJ0bGFuYWwuYy4KCSh1cGRhdGVfZmxvd19pbmZvKTogTWFrZSBwdWJsaWMuCgkoc2NoZWR1bGVfaW5zbnMpOiBVc2Ugc3BsaXRfYmxvY2tfaW5zbnMuCgoJKiByZWNvZy5jIChzcGxpdF9ibG9ja19pbnNucyk6IE5ldyBmdW5jdGlvbi4KClR1ZSBGZWIgIDIgMjI6MDM6MjYgMTk5OSAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogcnM2MDAwL2xpbnV4LmggKExJTktfU1RBUlRfREVGQVVMVF9TUEVDKTogRGVsZXRlLCB1bnVzZWQuCgkoTElOS19PU19ERUZBVUxUX1NQRUMpOiBEZWxldGUsIHVudXNlZC4KClR1ZSBGZWIgIDIgMjA6Mjk6MzQgMTk5OSAgQ2F0aGVyaW5lIE1vb3JlICA8Y2xtQGN5Z251cy5jb20+CgoJKiBjb25maWd1cmUuaW4gKGFybS0qLW9hYmkpOiBTdXBwb3J0LgoJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCgkqIGNvbmZpZy9hcm0vdW5rbm93bi1lbGYtb2FiaS5oOiBOZXcgZmlsZS4KClR1ZSBGZWIgIDIgMTk6NDM6NTkgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogaTM4Ni5tZCAoYXNobHNpMyk6IFR1cm4gaW50byBhIGRlZmluZV9leHBhbmQgYW4gYW5vbnltb3VzIHBhdHRlcm4uCglNYWtlIHRoZSBhbm9ueW1vdXMgcGF0dGVybiBtYXRjaCB3aGVuICEgb3B0aW1pemVfc2l6ZS4KCShhc2hsc2kzIHNpemUgb3B0aW1pemVyKTogTmV3IHBhdHRlcm4uCgoJKiBpbnRsL01ha2VmaWxlLmluICh1bmluc3RhbGwpOiBBZGQgbWlzc2luZyAiOyBcIi4KClR1ZSBGZWIgIDIgMTg6MjE6MjMgMTk5OSAgU3RhbiBDb3ggIDxzY294QGN5Z251cy5jb20+CgoJKiBzcGFyYy5oIChUQVJHRVRfQ1BVX3NwYXJjODZ4KTogQWRkZWQuIFRBUkdFVF9DUFVfc3BhcmNsaXRlODZ4CglzeW5vbnltLgoKVHVlIEZlYiAgMiAyMDoyNDoxMSAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogbG9vcC5jIChsb29wX29wdGltaXplKTogRml4IHZhbHVlIG1heF91aWRfZm9yX2xvb3AgaXMgcmVzZXQKCXRvIGFmdGVyIGZpbmRfYW5kX3ZlcmlmeV9sb29wcyBjYWxsLgoKVHVlIEZlYiAgMiAxOTo0ODoyOSAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogKHJlY29tYmluZV9naXZzKTogRG9uJ3QgdXNlIGEgZ2l2IHRoYXQncyBsaWtlbHkgdG8gYmUgZGVhZCB0bwoJZGVyaXZlIG90aGVycy4KCgkqIGxvb3AuYyAocmVjb21iaW5lX2dpdnMpOiBGaXggdGVzdCBmb3IgbGlmZXRpbWUgb3ZlcmxhcHMgLyBsb29wCgl3cmFwIGFyb3VuZCB3aGVuIGRlcml2aW5nIGdpdnMuCgpNb24gRmViICAxIDIwOjAwOjQwIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiByZWNvZy5jIChjaGVja19hc21fb3BlcmFuZHMpOiBUcmVhdCBpbmRldGVybWluYXRlIG9wZXJhbmQgb2sKCXJlc3VsdHMgYXMgc3VjY2Vzcy4gIFRyeSBoYXJkZXIgdG8gcmVzb2x2ZSBhIG1hdGNoaW5nIGNvbnN0cmFpbnQuCgkqIHN0bXQuYyAoZXhwYW5kX2FzbV9vcGVyYW5kcyk6IFJlY29nbml6ZSB3aGVuIGFuIG91dHB1dCBvcGVyYW5kJ3MKCWNvbnN0cmFpbnQgZG9lcyBub3QgYWxsb3cgbWVtb3J5LiAgVHJlYXQgaW5kZXRlcm1pbmF0ZSBvcGVyYW5kIG9rCglyZXN1bHRzIGFzIGZhaWx1cmUuICBUcnkgaGFyZGVyIHRvIHJlc29sdmUgYSBtYXRjaGluZyBjb25zdHJhaW50LgoKTW9uIEZlYiAgMSAxNTowMDowMiAxOTk5ICBLZW4gUmFlYnVybiAgPHJhZWJ1cm5AY3lnbnVzLmNvbT4KCglVc2UgdmFycmF5cyBmb3IgY29uc3RhbnQtZXF1aXZhbGVuY2UgZGF0YToKCgkqIHZhcnJheS5oIChzdHJ1Y3QgY29uc3RfZXF1aXZfZGF0YSk6IE5ldyB0eXBlLgoJKHVuaW9uIHZhcnJheV9kYXRhX3RhZyk6IE5ldyBlbGVtZW50IGNvbnN0X2VxdWl2LgoJKFZBUlJBWV9DT05TVF9FUVVJVl9JTklULCBWQVJSQVlfQ09OU1RfRVFVSVYpOiBOZXcgbWFjcm9zLgoJKFZBUlJBWV9TSVpFKTogTmV3IG1hY3JvLCByZXR1cm5zIG51bWJlciBvZiBlbGVtZW50cy4KCSogaW50ZWdyYXRlLmg6IEluY2x1ZGUgdmFycmF5LmguCgkoc3RydWN0IGlubGluZV9yZW1hcCk6IFJlcGxhY2UgY29uc3RfZXF1aXZfbWFwLCBjb25zdF9hZ2VfbWFwIGFuZAoJY29uc3RfZXF1aXZfbWFwX3NpemUgd2l0aCBhIGNvbnN0X2VxdWl2X3ZhcnJheSBlbGVtZW50LgoJKE1BWUJFX0VYVEVORF9DT05TVF9FUVVJVl9WQVJSQVkpOiBOZXcgbWFjcm87IGdyb3dzIHZhcnJheSBpZgoJbmVlZGVkLgoJKFNFVF9DT05TVF9FUVVJVl9EQVRBKTogTmV3IG1hY3JvOyBzZXRzIHJ0eCBhbmQgYWdlIGZpZWxkcwoJc2ltdWx0YW5lb3VzbHksIGdyb3dpbmcgdGhlIHZhcnJheSBpZiBuZWVkZWQuCgoJKiBpbnRlZ3JhdGUuYyAoZ2xvYmFsX2NvbnN0X2VxdWl2X21hcCwKCWdsb2JhbF9jb25zdF9lcXVpdl9tYXBfc2l6ZSk6IERlbGV0ZWQsIHJlcGxhY2VkIGJ5Li4uLgoJKGdsb2JhbF9jb25zdF9lcXVpdl92YXJyYXkpOiBOZXcgdmFyaWFibGUuCgkoZXhwYW5kX2lubGluZV9mdW5jdGlvbik6IFJlZmVyZW5jZXMgY2hhbmdlZC4KCSogaW50ZWdyYXRlLmg6IFVwZGF0ZSBkZWNsYXJhdGlvbnMuCgoJKiBpbnRlZ3JhdGUuYyAocHJvY2Vzc19yZWdfcGFybSwgZXhwYW5kX2lubGluZV9mdW5jdGlvbiwKCWNvcHlfcnR4X2FuZF9zdWJzdGl0dXRlLCB0cnlfY29uc3RhbnRzLCBzdWJzdF9jb25zdGFudHMsCgltYXJrX3N0b3Jlcyk6IFVzZSB2YXJyYXkgYWxsb2NhdGlvbiBhbmQgYWNjZXNzb3IgbWFjcm9zLCBuZXcKCWludGVncmF0ZS5oIG1hY3JvcywgYW5kIGdsb2JhbF9jb25zdF9lcXVpdl92YXJyYXkuICBEb24ndAoJY29uZGl0aW9uYWxpemUgbm9uLU5VTEwgc3RvcmVzIG9uIGFycmF5IHNpemU7IGluc3RlYWQsIGV4cGFuZCB0aGUKCWFycmF5IGFzIG5lZWRlZC4KCSogdW5yb2xsLmMgKHVucm9sbF9sb29wKTogTGlrZXdpc2UuCgoJKiB1bnJvbGwuYyAodW5yb2xsX2xvb3ApOiBJbml0aWFsaXplIGNvbnN0X2VxdWl2X3ZhcnJheSBlbGVtZW50IHRvCgl6ZXJvLiAgQWZ0ZXIgYWxsb2NhdGluZyB2YXJyYXksIGFsd2F5cyBleGl0IHRocm91Z2ggYm90dG9tIG9mCglmdW5jdGlvbiwgd2hlcmUgaXQgY2FuIGJlIGRlYWxsb2NhdGVkIGlmIG5lZWRlZC4gIERvbid0IGV4cGxpY2l0bHkKCXJlYWxsb2NhdGUgY29uc3RfZXF1aXZfbWFwIHN0b3JhZ2U7IGluc3RlYWQsIGp1c3QgZW5zdXJlIHRoZQoJdmFycmF5IGhhcyBiZWVuIGluaXRpYWxpemVkLCBhbmQgdXBkYXRlIHRoZSBnbG9iYWwgcmVmZXJlbmNlLgoKTW9uIEZlYiAgMSAwOTo0MDoyNSAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBzeXN0ZW0uaCAoaW5saW5lLCBjb25zdCk6IEhhbmRsZSB0aGVzZSBmb3Igc3RhZ2UyIChhbmQgbGF0ZXIpIGdjYy4KCgkqIGR3YXJmMm91dC5jIChpbmxpbmUpOiBEb24ndCBkZWZpbmUuCgoJKiBkd2FyZm91dC5jIChpbmxpbmUpOiBMaWtld2lzZS4KClN1biBKYW4gMzEgMjI6MDQ6MzcgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGxvb3AuYyAocmVjb21iaW5lX2dpdnMpOiBEdW1wIHJlY29tYmluYXRpb24gYW5kIGRlcml2YXRpb24gZGF0YS4KClN1biBKYW4gMzEgMjA6MzQ6MjkgMTk5OSAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5jb2x1bWJpYS5lZHU+CgoJKiBmbGFncy5oOiBEZWNsYXJlIGZsYWdfbm9faWRlbnQuCgkqIHRvcGxldi5jOiBEZWZpbmUgZmxhZ19ub19pZGVudC4gIFByb2Nlc3MgLWYobm8tKWlkZW50IGhlcmUuCgkqIGMtdHJlZS5oOiBEb24ndCBkZWNsYXJlIGZsYWdfbm9faWRlbnQuCgkqIGMtZGVjbC5jOiBEb24ndCBkZWZpbmUgZmxhZ19ub19pZGVudC4gIERvbid0IHByb2Nlc3MKCSAgLWYobm8tKWlkZW50IHN3aXRjaGVzIGhlcmUuCgoJKiBjb25maWcvZWxmb3MuaCAoQVNNX0ZJTEVfRU5EKTogT3V0cHV0IGZpbmFsIC5pZGVudCBkaXJlY3RpdmUKCSAgb25seSBpZiAhZmxhZ19ub19pZGVudC4KCSogY29uZmlnL3B0eDQuaDogTGlrZXdpc2UuCgkqIGNvbmZpZy9zdnI0Lmg6IExpa2V3aXNlLgoJKiBjb25maWcvYWxwaGEvZWxmLmg6IExpa2V3aXNlLgoJKiBjb25maWcvYXJtL2xpbnV4LWVsZi5oOiBMaWtld2lzZS4KCSogY29uZmlnL2kzODYvc2NvNS5oOiBMaWtld2lzZS4KCSogY29uZmlnL2k4NjAvZngyODAwLmg6IExpa2V3aXNlLgoJKiBjb25maWcvbWlwcy9nbnUuaDogTGlrZXdpc2UuCgkqIGNvbmZpZy9pMzg2L29zZnJvc2UuaDogTGlrZXdpc2UuCgoJKiBnY2MuYyAoQyBzcGVjcyk6IE1hcCAtUW4gdG8gLWZuby1pZGVudC4KCSogb2JqYy9sYW5nLXNwZWNzLmg6IExpa2V3aXNlLgoKTW9uIEZlYiAgMSAxMDo1MjowNyAxOTk5ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWd1cmUuaW46IERvbid0IHJlbW92ZSBsb29wLm8gYW5kIHVucm9sbC5vIHdoZW4KCWVuYWJsZS1oYWlmYSBpcyBzZWxlY3RlZC4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKU3VuIEphbiAzMSAxMzoyMjowMiAxOTk5ICBKb2huIFdlaGxlICAoam9obkBmZWl0aC5jb20pCgoJKiBpMzg2Lm1kIChtb3ZzaWNjLCBtb3ZoaWNjLCBtb3ZzZmNjLCBtb3ZkZmNjLAoJbW92eGZjYywgbW92ZGljYyk6IERlbGV0ZSB1bmNvbnN0cmFpbmVkIGFsdGVybmF0aXZlcy4KCSogaTM4Ni5jIChvdXRwdXRfZnBfY29uZGl0aW9uYWxfbW92ZSwKCW91dHB1dF9pbnRfY29uZGl0aW9uYWxfbW92ZSk6IERlbGV0ZSB1bnVzZWQgY2FzZS4KClN1biBKYW4gMzEgMDE6MTU6MDQgMTk5OSAgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpTdW4gSmFuIDMxIDAwOjUyOjM3IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbHBoYS5tZCAobW92IHBhdHRlcm5zKTogRW1pdCB0aGUgYXNzZW1ibGVyIGFsaWFzZXMgbW92IGFuZCBmbW92CglpbnN0ZWFkIG9mIGJpcyBhbmQgY3B5cy4gIENvbWJpbmUgYWx0ZXJuYXRpdmVzIHdoZXJlIHBvc3NpYmxlLgoKU2F0IEphbiAzMCAyMzoxNDoxMyAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBnY292LmMgKGZub3RpY2UpOiBBZGQgbWlzc2luZyBGSUxFKiBwYXJhbWV0ZXIuCgkoZnVuY3Rpb25fc3VtbWFyeSk6IEZpeCBmb3JtYXQgc3BlY2lmaWVycyBpbiBjYWxscyB0byBgZm5vdGljZScuCgkob3V0cHV0X2RhdGEpOiBMaWtld2lzZS4KCgkqIHRvcGxldi5jIChmbm90aWNlKTogQ29uc3RpZnkgY2hhciogcGFyYW1ldGVyLgoKCSogdG9wbGV2LmggKGZub3RpY2UpOiBBZGQgcHJvdG90eXBlLgoJV3JhcCBwcm90b3R5cGUgd2l0aCBCVUZTSVogdG8gcHJvdGVjdCBGSUxFKiB1c2FnZS4KClN1biBKYW4gMzEgMTU6MzM6MDkgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHguaCAoUlRYX0NPU1RTKTogRXhwbGljaXRseSBkZWZpbmUgYzR4IGNvc3RzLgoKU2F0IEphbiAzMCAwODoyNzoyMyAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjb21iaW5lLmMgKGRpc3RyaWJ1dGVfbm90ZXMpOiBIYW5kbGUgUkVHX0VIX1JFR0lPTiBub3Rlcy4KCgkqIGFsaWFzLmMgKGZpeGVkX3NjYWxhcl9hbmRfdmFyeWluZ19zdHJ1Y3RfcCk6IEFkZCAic3RhdGljIiB0bwoJZnVuY3Rpb24gZGVmaW5pdGlvbi4KCShhbGlhc2VzX2V2ZXJ5dGhpbmdfcCwgd3JpdGVfZGVwZW5kZW5jZV9wKTpMaWtld2lzZS4KCgkqIGluc3RhbGwudGV4aTogRml4IG1lcmdlIGxvc3NhZ2VzLgoKCSogY2NjcC5jIChtYWluKTogT25seSBjYWxsIHNldGxvY2FsZSAoTENfTUVTU0FHRVMsIC4uLikgaWYgTENfTUVTU0FHRVMKCWlzIGRlZmluZWQuCgkqIGNvbGxlY3QyLmMgKG1haW4pOiBMaWtld2lzZS4KCSogY3BwbWFpbi5jIChtYWluKTogTGlrZXdpc2UuCgkqIGdjYy5jIChtYWluKTogTGlrZXdpc2UuCgkqIGdjb3YuYyAobWFpbik6IExpa2V3aXNlLgoJKiBwcm90b2l6ZS5jIChtYWluKTogTGlrZXdpc2UuCgkqIHRvcGxldi5jIChtYWluKTogTGlrZXdpc2UuCgoJKiBwYS5tZCAocGFyYWxsZWwgc2hpZnQgYW5kIHNoaWZ0YWRkKTogTWFyayBvdXRwdXQgb2Ygc2hpZnQgYXMgYW4KCWVhcmx5Y2xvYmJlci4KCgkqIGxvb3AuYzogRGlzYWJsZSByZWNlbnQgbG9vcCBjaGFuZ2VzLiAgVGVtcG9yYXJ5IGFzIEpvZXJuCgljb250aW51ZXMgdG8gZml4IHByb2JsZW1zLgoKU2F0IEphbiAzMCAwMzoyNDozNyAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogbG9vcC5jIChzdHJlbmd0aF9yZWR1Y2UpOiBTaXplIHJlZ19tYXAgYWNjb3JkaW5nIHRvIHJlZ19pdl90eXBlLgoKRnJpIEphbiAyOSAxODoyNjowNyAxOTk5ICBEYXZlIEJyb2xsZXkgIDxicm9sbGV5QGN5Z251cy5jb20+CgoJKiBlbWl0LXJ0bC5jIChyZW1vdmVfaW5zbik6IE5ldyBmdW5jdGlvbi4KCSogcnRsLmggKHJlbW92ZV9pbnNuKTogQWRkIHByb3RvdHlwZS4KCSogZnVuY3Rpb24uYyAocmVwb3NpdGlvbl9wcm9sb2d1ZV9hbmRfZXBpbG9ndWVfbm90ZXMpOiBDYWxsIHJlbW92ZV9pbnNuLgoKRnJpIEphbiAyOSAyMjozNDo0MSAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogbG9vcC5jIChyZWNvbWJpbmVfZ2l2cyk6IERvbid0IHRyeSB0byBkZXJpdmUgZ2l2cyB0aGF0IGhhdmUgY29tYmluZWQuCgpGcmkgSmFuIDI5IDE1OjAwOjM5IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIHRvcGxldi5jIChub3RpY2UsIGZub3RpY2UpOiBDaGVjayBBTlNJX1BST1RPVFlQRVMsIG5vdCBfX1NURENfXywKCXdoZW4gZGVjbGFyaW5nIGFyZ3VtZW50cyBhbmQgY2FsbGluZyB2YV9hcmcoKSB0byBpbml0aWFsaXplIHRoZW0uCgoJKiBjb2xsZWN0Mi5jIChub3RpY2UpOiBMaWtld2lzZS4KCgkqIGxvb3AuYyAoZmluZF9saWZlX2VuZCk6IFVzZSBQUk9UTygpIG1hY3JvIGluIHRoZSBwcm90b3R5cGUuCgpGcmkgSmFuIDI5IDE0OjM2OjExIDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNvbGxlY3QyLmMgKGVycm9yKTogRml4IHR5cG8gaW4gZGVjbGFyYXRpb24uCgoJKiBjcHBlcnJvci5jIChjcHBfbWVzc2FnZSk6IExpa2V3aXNlLgoKCSogY3BwbGliLmMgKGNwcF93YXJuaW5nKTogTGlrZXdpc2UuCgoJKiBjcHBsaWIuaCAoY3BwX25vdGljZSk6IFVzZSBQVlBST1RPIG5vdCBWUFJPVE8sIGFsc28gYWRkCglBVFRSSUJVVEVfUFJJTlRGXzEuCgoJKiB0b3BsZXYuYyAoZXJyb3IpOiBGaXggdHlwbyBpbiBkZWNsYXJhdGlvbi4KCkZyaSBKYW4gMjkgMTU6NDQ6MTMgMTk5OSAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGxvb3AuYyAoc3RyZW5ndGhfcmVkdWNlKTogRml4IEhBVkVfY2MwIGhhbmRsaW5nIHdoZW4gc2Nhbm5pbmcKCWZvcndhcmQgZnJvbSBjb250IGRvbWluYXRvci4KCkZyaSBKYW4gMjkgMDc6MTA6MjcgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY2NjcC5jIChlcHJpbnRfc3RyaW5nKTogQ29uc3RpZnkgYSBjaGFyKi4KCShub3RpY2UpOiBMaWtld2lzZS4gIFVzZSBQVlBST1RPIG5vdCBWUFJPVE8sIGFkZCBBVFRSSUJVVEVfUFJJTlRGXzEuCgkodm5vdGljZSk6IENvbnN0aWZ5IGEgY2hhciouCgkoZXJyb3IpOiBMaWtld2lzZS4gIFVzZSBQVlBST1RPIG5vdCBWUFJPVE8sIGFkZCBBVFRSSUJVVEVfUFJJTlRGXzEuCgkodmVycm9yKTogQ29uc3RpZnkgYSBjaGFyKi4KCSh3YXJuaW5nKTogTGlrZXdpc2UuICBVc2UgUFZQUk9UTyBub3QgVlBST1RPLCBhZGQgQVRUUklCVVRFX1BSSU5URl8xLgoJKHZ3YXJuaW5nKTogQ29uc3RpZnkgYSBjaGFyKi4KCShlcnJvcl93aXRoX2xpbmUpOiBMaWtld2lzZS4gIFVzZSBQVlBST1RPIG5vdCBWUFJPVE8sIGFkZAoJQVRUUklCVVRFX1BSSU5URl8yLgoJKHZlcnJvcl93aXRoX2xpbmUpOiBDb25zdGlmeSBhIGNoYXIqLgoJKHZ3YXJuaW5nX3dpdGhfbGluZSk6IExpa2V3aXNlLgoJKHdhcm5pbmdfd2l0aF9saW5lKTogTGlrZXdpc2UuICBVc2UgUFZQUk9UTyBub3QgVlBST1RPLCBhZGQKCUFUVFJJQlVURV9QUklOVEZfMi4KCShwZWR3YXJuKTogQ29uc3RpZnkgYSBjaGFyKi4gIFVzZSBQVlBST1RPIG5vdCBWUFJPVE8sIGFkZAoJQVRUUklCVVRFX1BSSU5URl8xLgoJKHBlZHdhcm5fd2l0aF9saW5lKTogTGlrZXdpc2Ugd2l0aCBBVFRSSUJVVEVfUFJJTlRGXzIuCgkocGVkd2Fybl93aXRoX2ZpbGVfYW5kX2xpbmUpOiBMaWtld2lzZSB3aXRoIEFUVFJJQlVURV9QUklOVEZfNC4KCUFsc28gY29ycmVjdCB0eXBvIGluIHBhcmFtZXRlciBuYW1lIGRlY2xhcmF0aW9uLgoJKG1ha2VfYXNzZXJ0aW9uKTogQ29uc3RpZnkgYSBjaGFyKi4KCShxdW90ZV9zdHJpbmdfZm9yX21ha2UpOiBMaWtld2lzZS4KCShkZXBzX291dHB1dCk6IExpa2V3aXNlLgoJKGZhdGFsKTogTGlrZXdpc2UuICBVc2UgUFZQUk9UTyBub3QgVlBST1RPLCBhZGQKCUFUVFJJQlVURV9QUklOVEZfMS4gIFVzZSBBVFRSSUJVVEVfTk9SRVRVUk4gbm90IGFuIGV4cGxpY2l0CgkiX19hdHRyaWJ1dGVfXyAoKG5vcmV0dXJuKSkiLgoJKGZhbmN5X2Fib3J0KTogTGlrZXdpc2UgZm9yIEFUVFJJQlVURV9OT1JFVFVSTi4KCShwZmF0YWxfd2l0aF9uYW1lKTogTGlrZXdpc2UuCgkocGlwZV9jbG9zZWQpOiBMaWtld2lzZS4KCShtZW1vcnlfZnVsbCk6IExpa2V3aXNlLgoKRnJpIEphbiAyOSAwMDoxNDo1NSAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogbG9vcC5jIChzdHJlbmd0aF9yZWR1Y2UpOiBHcm93IHNldF9pbl9sb29wIC8gbl90aW1lc19zZXQgLwoJbWF5X25vdF9vcHRpbWl6ZSB0byBwcm9wZXIgc2l6ZSB3aGVuIGNvbnZlcnRpbmcgYml2IGluY3JlbWVudHMKCWludG8gZ2l2cy4KCUlmIG5lY2Vzc2FyeSwgcmVhbGxvY2F0ZSByZWdfaXZfdHlwZSAvIHJlZ19pdl9pbmZvIGJlZm9yZSBjYWxsaW5nCglyZWNvbWJpbmVfZ2l2cy4KClRodSBKYW4gMjggMjM6MjQ6MDggMTk5OSAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGxvb3AuYyAocmVjb21iaW5lX2dpdnMpOiBOZXcgcGFyYW1ldGVyIHVucm9sbF9wLiAgSWYgc2V0LCBkb24ndAoJZ2VuZXJhdGUgY29tcGxleCBhZGRzLiAgQ2hhbmdlZCBjYWxsZXIuCglEb24ndCBnZW5lcmF0ZSBhZGRzIHRoYXQgY29zdCBtb3JlIHRoYW4gdGhlIG9yaWdpbmFsIG9uZS4KCShzdHJlbmd0aF9yZWR1Y2UpOiBXYXJuaW5nIGZpeGVzLgoKVGh1IEphbiAyOCAwOTo0MToxMSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW4gKGhwcGExLjAtaHAtaHB1eDEwKik6IFVzZSB0LXBhLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgpXZWQgSmFuIDI3IDIzOjM5OjUzIDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBydGwuaCAoaW5zbl9maXJzdF9wLCBub19qdW1wc19iZXR3ZWVuX3ApOiBEZWNsYXJlLgoJKiBydGxhbmFsLmMgKGluc25fZmlyc3RfcCwgbm9fanVtcHNfYmV0d2Vlbl9wKTogTmV3IGZ1bmN0aW9uLgoJKiBsb29wLmggKHZhcnJheS5oKTogSW5jbHVkZS4KCShzdHJ1Y3QgaW5kdWN0aW9uKTogQ2hhbmdlIGNvbWJpbmVkX3dpdGggdG8gdW5zaWduZWQuCglOZXcgbWVtYmVycyBkZXJpdmVkLCBpeCBhbmQgbGFzdF91c2UuCgkocmVnX2l2X3R5cGUsIHJlZ19pdl9pbmZvKTogTm93IHZhcnJheV90eXBlLiAgQWxsIHJlZmVyZW5jZXMgY2hhbmdlZC4KCShSRUdfSVZfVFlQRSwgUkVHX0lWX0lORk8pOiBEZWZpbmUuCgkoZmlyc3RfaW5jcmVtZW50X2dpdiwgbGFzdF9pbmNyZW1lbnRfZ2l2KTogRGVjbGFyZS4KCSogbG9vcC5jIChsb29wX251bWJlcl9sb29wX2NvbnQpOiBOZXcgc3RhdGljIHZhcmlhYmxlLgoJKGxvb3BfbnVtYmVyX2NvbnRfZG9taW5hdG9yKTogTGlrZXdpc2UuCgkocmVnX2l2X3R5cGUsIHJlZ19pdl9pbmZvKTogTm93IHZhcnJheV90eXBlLgoJKGZpcnN0X2luY3JlbWVudF9naXYsIGxhc3RfaW5jcmVtZW50X2dpdik6IE5ldyB2YXJpYWJsZXMuCgkoY29tcHV0ZV9sdWlkcywgdmVyaWZ5X2RvbWluYXRvciwgZmluZF9saWZlX2VuZCk6IE5ldyBmdW5jdGlvbnMuCgkoY21wX3JlY29tYmluZV9naXZzX3N0YXRzLCByZWNvbWJpbmVfZ2l2cyk6IExpa2V3aXNlLgoJKGxvb3Bfb3B0aW1pemUpOiBBbGxvY2F0ZSBsb29wX251bWJlcl9sb29wX2NvbnQgYW5kCglsb29wX251bWJlcl9jb250X2RvbWluYXRvci4gIFVzZSBjb21wdXRlX2x1aWRzLgoJKGZpbmRfYW5kX3ZlcmlmeV9sb29wcyk6IEluaXRpYWxpemUgbG9vcF9udW1iZXJfbG9vcF9jb250IGFuZAoJbG9vcF9udW1iZXJfY29udF9kb21pbmF0b3IuCgkoc3RyZW5ndGhfcmVkdWNlKTogVHJ5IHRvIGZpbmQgYml2cyB0aGF0IGNhbiBiZSBleHByZXNzZWQgYXMgZ2l2cwoJb2YgYW5vdGhlciBiaXYsIGFuZCB0byBjb252ZXJ0IGJpdiBpbmNyZW1lbnRzIGludG8gZ2l2cy4KCUNhbGwgcmVjb21iaW5lX2dpdnMuICBIYW5kbGUgZGVyaXZlZCBnaXZzLgoJKHJlY29yZF9iaXYpOiBOZXcgYXJndW1lbnQgbG9jYXRpb24uICBBbGwgY2FsbGVycyBjaGFuZ2VkLgoJKHJlY29yZF9naXYpOiBJbml0aWFsaXplIGRlcml2ZWQgYW5kIGxhc3RfdXNlIGZpZWxkcy4KCShiYXNpY19pbmR1Y3Rpb25fdmFyKTogTmV3IGFyZ3VtZW50IGxvY2F0aW9uLiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KCShjb21iaW5lX2dpdnMpOiBEb24ndCBjb21iaW5lIGEgREVTVF9SRUcgZ2l2IHdpdGggYSBERVNUX0FERFIgZ2l2LgoJSW5jcmVtZW50IGNvbWJpbmVkX3dpdGggaW5zdGVhZCBvZiBzZXR0aW5nIHRvIDEuCgkqIHVucm9sbC5jIChkZXJpdmVkX3JlZ3MpOiBOZXcgc3RhdGljIHZhcmlhYmxlLgoJKHVucm9sbF9sb29wKTogSW5pdGlhbGl6ZSBpdC4KCUFsbG9jYXRlIGxvY2FsX3JlZ25vIGFjY29yZGluZyB0byBtYXhfcmVnX251bS4KCShjb3B5X2xvb3BfYm9keSk6IENvcGUgd2l0aCBkZXJpdmVkIGdpdnMuCgkoZmluZF9zcGxpdHRhYmxlX2dpdnMpOiBDaGVjayBmb3IgR2l2cyBtYWRlIGZyb20gYml2IGluY3JlbWVudHMuCglTZXQgZGVyaXZlZF9yZWdzIGZvciBnaXZzLgoJKiBNYWtlZmlsZS5pbiAoc3RtdC5vLCBsb29wLm8sIHVucm9sbC5vKTogRGVwZW5kIG9uIGxvb3AuaCAuCgpXZWQgSmFuIDI3IDE5OjMxOjM2IDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBmdW5jdGlvbi5jIChwdXJnZV9hZGRyZXNzb2ZfMSk6IEhhbmRsZSBjYXNlIHdoZW4gYSByZWdpc3RlcgoJaGFzIGJlZW4gdXNlZCBpbiBhIHdpZGVyIG1vZGUuCgoxOTk5LTAxLTI3ICBCcnVjZSBLb3JiICA8YXV0b2dlbkBsaW51eGJveC5jb20+CgoJKiBmaXhpbmMvZml4aW5jbC5jLCBmaXhpbmMvc2VydmVyLltjaF06CglSZW1vdmVkIHRoZSBsYXN0IG9mIHRoZSBjYXBpdGFsaXplZCB2YXJpYWJsZSBhbmQgcHJvYyBuYW1lcy4KCgkqIGZpeGluYy9zZXJ2ZXIuYzogUmVtb3ZlZCB0aGUgcHJvY2VzcyBvcGVuIGNvZGUuCgkqIGZpeGluYy9wcm9jb3Blbi5jOiBOZXcgZmlsZSBjb250YWluaW5nIHRoZSBwcm9jIG9wZW4gY29kZS4KCSogZml4aW5jL2luY2xoYWNrLnRwbDogQWRkZWQgY29kZSB0byBieXBhc3MgYSByZWFkYWJpbGl0eSB0ZXN0Cgl3aGVuIGEgZmlsZSBpcyBub3QgcHJlc2VudC4gIEEgcHJvYmxlbSBvbiBzb21lIHN5c3RlbXMuCgkqIGZpeGluYy9pbmNsaGFjay5zaCwgZml4aW5jL2ZpeGluY2wuc2g6IFJlZ2VuZXJhdGVkLgoKV2VkIEphbiAyNyAxMTo1ODoxOCAxOTk5ICBEYXZlIEJyb2xsZXkgIDxicm9sbGV5QGN5Z251cy5jb20+CgoJKiBjcHBsaWIuaCAoY3BwX25vdGljZSk6IEFkZCBwcm90b3R5cGUuCgpXZWQgSmFuIDI3IDAyOjIwOjQ4IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIE1lcmdlIGdjYzIgc25hcHNob3QgMTk5ODA5MjkuCgoJKiBjY2NwLmMgKFBSSU5URl9QUk9UTyk6IFJlbW92ZS4KCShQUklOVEZfUFJPVE9fezEsMiwzLDR9OiBMaWtld2lzZS4KCSogY2V4cC55OiBMaWtld2lzZS4KCSogc3lzdGVtLmg6IEFkZCBQUklOVEZfUFJPVE8gYW5kIFBSSU5URl9QUk9UT197MSwyLDMsNH0uCgoJKiBmaXgtaGVhZGVyLmMgKGNwcF9maWxlX2xpbl9mb3JfbWVzc2FnZSk6IERlbGV0ZS4gIEluIGxpYmNwcC4KCShjcHBfcHJpbnRfY29udGFpbmluZ19maWxlcywgdl9jcHBfbWVzc2FnZSwgY3BwX21lc3NhZ2UpOiBMaWtld2lzZS4KCShjcHBfZmF0YWwsIGNwcC1QZmF0YWxfd2l0aF9uYW1lKTogTGlrZXdpc2UuCgoJKiBnZW4tcHJvdG9zLmMgKGhhc2hmKTogRGVsZXRlIGluIGNwcGhhc2guby4KCSogZ2VuLXByb3Rvcy5jIChoYXNoZik6IERlbGV0ZSBpbiBjcHBoYXNoLm8uCgoJKiBleHByLmM6IERvIG5vdCBtZXJnZSBTQVZFX1NUQUNLQVJFQV9NT0RFIGNoYW5nZXMuCgkqIGV4cG1lZC5jOiBMaWtld2lzZS4KCSogcnM2MDAwLm1kOiBMaWtld2lzZS4KCgkqIHJzNjAwMC5jLCByczYwMDAubWQ6IERvIG5vdCBtZXJnZSBmb3JtYXR0aW5nIGNoYW5nZXMgeWV0LgoKV2VkIEphbiAyNyAwMToxMzo0MiAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogcnM2MDAwLmMgKGlucHV0X29wZXJhbmQpOiBEb24ndCBleHBlY3QgQ09OU1QgYXJvdW5kIENPTlNUQU5UX1BfUlRYLgoJKiByczYwMDAubWQgKG1vdnNpLCBtb3ZkaSk6IExpa2V3aXNlLgoKVHVlIEphbiAyNiAxMzozMTozOCAxOTk5ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBmdW5jdGlvbi5jIChleHBhbmRfZnVuY3Rpb25fZW5kKTogUGFzcyBhcmdfcG9pbnRlcl9zYXZlX2FyZWEgdG8KCXZhbGlkaXplX21lbSBiZWZvcmUgdXNpbmcgaXQuICBFbWl0IGNvZGUgaW50byBhIHNlcXVlbmNlLgoKVHVlIEphbiAyNiAxMzo0MTozOCAxOTk5ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiByczYwMDAubWQgKGRveiArIHNldCBjciBhbmQgb3IgKyBzZXQgY3IgcGF0dGVybnMpOiBBZGQgbWlzc2luZwoJJyMnIHRvIHNwbGl0IHBhdHRlcm5zLiAgQ29ycmVjdCBpbmRlbnRhdGlvbiBvZiBzb21lIG5ldyBwYXR0ZXJucy4KCjE5OTktMDEtMjYgIFphY2sgV2VpbmJlcmcgIDx6YWNrQG1pZG5pdGUuZWMucmhuby5jb2x1bWJpYS5lZHU+CgoJKiBjcHBmaWxlcy5jIChzYWZlX3JlYWQpOiBEZWxldGVkLgoJKHJlYWRfYW5kX3ByZXNjYW4pOiBOZXcgZnVuY3Rpb24sIHJlcGxhY2VzIHNhZmVfcmVhZCwgY29udmVydHMKCWFuZC9vciB3YXJucyBhYm91dCB0cmlncmFwaHMsIHNpbGVudGx5IGNvbnZlcnRzIG9kZCBsaW5lCgl0ZXJtaW5hdG9ycyAoXHIsIFxuXHIsIFxyXG4pLiAgV2FybnMgYWJvdXQgbm8gbmV3bGluZSBhdCBFT0YuCgkoZmluY2x1ZGUpOiBVc2UgcmVhZF9hbmRfcHJlc2NhbjsgdHVybiBvZmYgbm9uYmxvY2tpbmcgbW9kZSBvbgoJdGhlIGlucHV0IGRlc2NyaXB0b3I7IHJlbW92ZSBmaWxlLXNpemUtZXhhbWluYXRpb24gYW5kCgluby1uZXdsaW5lLWF0LUVPRiBndW5rIHdoaWNoIGlzCWxvbmdlciBuZWNlc3Nhcnk7IGJlIG1vcmUKCWNhcmVmdWwgYWJvdXQgY2hlY2tpbmcgdGhhdCB3ZSd2ZSBiZWVuIGhhbmRlZCBhIGxlZ2l0aW1hdGUKCWZpbGUgdG8gcmVhZCAob25seSByZWFsIGZpbGVzLCBwaXBlcywgYW5kIHR0eXMgYXJlIGFjY2VwdGFibGUpLgoJKiBjcHBsaWIuaCAoY3BwX29wdGlvbnMpOiBSZW5hbWUgbm9fdHJpZ3JhcGhzIGZsYWcgdG8KCWB0cmlncmFwaHMnIGFuZCBpbnZlcnQgaXRzIHNlbnNlLgoJKHRyaWdyYXBoX3RhYmxlKTogRGVjbGFyZS4KCShjcHBfd2FybmluZ193aXRoX2xpbmUpOiBQcm90b3R5cGUuCgkqIGNwcGxpYi5jOiBSZW1vdmUgYWxsIHJlZmVyZW5jZXMgdG8gdHJpZ3JhcGhfcGNwLiBEZWZpbmUKCXRyaWdyYXBoX3RhYmxlOyBpbml0aWFsaXplIGl0IGluIGluaXRpYWxpemVfY2hhcl9zeW50YXguICBPcGVuCglmaWxlcyBpbiBub25ibG9ja2luZyBtb2RlLiAgcy9ub190cmlncmFwaHMvdHJpZ3JhcGhzLwoJdGhyb3VnaG91dCwgYW5kIGludmVydCBzZW5zZS4gIFB1dCBjcHBfd2FybmluZ193aXRoX2xpbmUgYmFjawoJaW4gYW5kIGV4cG9ydCBpdC4KClR1ZSBKYW4gMjYgMjM6MjE6NDkgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHguaCAoQ09VTlRFUl9SRUdTKTogTmV3IHJlZ2lzdGVyIGNsYXNzLgoJKiBjb25maWcvYzR4L2M0eC5tZCAoKnJwdGJfaW5pdCk6IENoYW5nZSBjb25zdHJhaW50cy4KCShycHRiX2VuZCk6IEVtaXQgYWx0ZXJuYXRlIGxvb3BpbmcgaW5zdHJ1Y3Rpb25zIGlmCglSQyByZWdpc3RlciBub3QgYWxsb2NhdGVkIGZvciBsb29wIGNvdW50ZXIuCgkoZGVjcmVtZW50X2FuZF9icmFuY2hfb25fY291bnQpOiBBbGxvdyBvdGhlciByZWdpc3RlcnMKCWZvciBsb29wIGNvdW50ZXIuCgoxOTk5LTAxLTI1ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLmNvbHVtYmlhLmVkdT4KCgkqIGNwcGV4cC5jIChzdHJ1Y3QgYXJnbGlzdCk6IFJlbW92ZWQuCgkocGFyc2VfbnVtYmVyKTogVXNlIEhPU1RfV0lERV9JTlQgZm9yIHRoZSBhY2N1bXVsYXRvci4KCUFsbG93IHR3byBgbCcgc3VmZml4ZXMgdW5sZXNzIEM4OS4gIENsZWFuIHVwLiAgTWFrZSBzdGF0aWMuCgkocGFyc2VfY2hhcmNvbnN0KTogTmV3IGZ1bmN0aW9uIGJyb2tlbiBvdXQgb2YgY3BwX2xleC4KCUNvZGUgY2xlYW5lZCB1cCBkcmFzdGljYWxseS4gIERvbid0IHVzZSBhIHRva2VuX2J1ZmZlci4KCSh0b2tlbl9idWZmZXIpOiBSZW1vdmVkLgoJKGNwcF9sZXgpOiBEb24ndCBjYWxsIHBhcnNlX251bWJlciBvbiBhIGNvbnN0YW50IHN0cmluZy4KCVVzZSBwYXJzZV9jaGFyY29uc3QuCgkoY3BwX3BhcnNlX2V4cHIpOiBQcm9wZXJseSBoYW5kbGUgYW4gRVJST1Igb3AgcmV0dXJuZWQgYnkKCWNwcF9sZXguCgoxOTk5LTAxLTI1ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLnBoeXMuY29sdW1iaWEuZWR1PgoKCSogY3BwbGliLmM6IERvbid0IGluY2x1ZGUgc2lnbmFsLmgsIHN5cy90aW1lcy5oLCBvcgoJc3lzL3Jlc291cmNlLmguIERvbid0IGRlY2xhcmUgbG9jYWx0aW1lLgoJKG1hY3JvZXhwYW5kKTogSGFuZGxlIHNwZWNpYWwgc3ltYm9scyBoZXJlLgoJKHB1c2hfbWFjcm9fZXhwYW5zaW9uKTogQ2hvcCBvZmYgdGhlIHRyYWlsaW5nICdAICcgaWYgcG9zc2libGUKCWhlcmUuCgkoY3BwX2dldF90b2tlbik6IERvbid0IGRvIGVpdGhlciBvZiB0aGUgYWJvdmUgdHdvIHRoaW5ncyBoZXJlLgoJTW92ZSBgc3RyaW5nJyBsYWJlbCBqdXN0IGFmdGVyIGNhc2UgJyInIHNvIHRoYXQgd2lkZSBzdHJpbmdzCglkb24ndCBjcmFzaCB0aGUgcHJlcHJvY2Vzc29yLgoKU3VuIEphbiAyNCAyMDoxMzo0NSAxOTk5ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiByczYwMDAubWQgKGxlZnQgc2hpZnQgKyBzZXQgY3IgcGF0dGVybnMpOiBBZGQgbWlzc2luZyAnIycgdG8KCXNwbGl0IHBhdHRlcm5zLgoJKG1vdmUgcmVnaXN0ZXIgKyBzZXQgY3IgcGF0dGVybik6IExpa2V3aXNlLgoJKG1vdmRpLCAhVEFSR0VUX1BPV0VSUEM2NCBzcGxpdHRlcnMpOiBBZGQgYmFjayBpbiBKYW4uIDE1dGggcGF0Y2gsCglpbmFkdmVydGVudGx5IGRlbGV0ZWQuCgpTdW4gSmFuIDI0IDA4OjA3OjU5IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHN0bXQuYyAoc3RtdF9sb29wX25lc3RfZW1wdHkpOiBOZXcgZnVuY3Rpb24uCgkqIHRyZWUuaCAoc3RtdF9sb29wX25lc3RfZW1wdHkpOiBEZWNsYXJlIGl0LgoJKiBydGwuZGVmIChDQUxMX1BMQUNFSE9MREVSKTogTmV3IHJ0eCBjb2RlLgoKU3VuIEphbiAyNCAyMToyNDo0MyAxOTk5ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWcvYzR4L2M0eC5jIChjNHhfZW1pdF9tb3ZlX3NlcXVlbmNlLCBjNHhfZW5jb2RlX3NlY3Rpb25faW5mbyk6CglOZXcgZnVuY3Rpb25zLgoJKGM0eF9jaGVja19sZWdpdF9hZGRyKTogUmVtb3ZlIFVTRSBhbmQgUExVUywgYWxsb3cKCUxPX1NVTSwgYW5kIGRpc2FibGUgU1lNQk9MX1JFRiwgTEFCRUxfUkVGLCBhbmQgQ09OU1QgY2FzZXMuCgkoYzR4X2xlZ2l0aW1pemVfYWRkcmVzcyk6IFBlbmFsaXplIFNZTUJPTF9SRUYsIExBQkVMX1JFRiwgYW5kCglDT05TVCBjYXNlcy4gIEFkZCBMT19TVU0uCgkoYzR4X3ByaW50X29wZXJhbmQpOiBNb2RpZmllZCAnQycgYW5kICdSJyBjYXNlcyBmb3IgY2FsbHMuCglBZGRlZCAnVScgY2FzZS4gIFJlbW92ZSBkZXBlbmRlbmNlIG9uIFNZTUJPTF9SRUZfRkxBRy4KCShjNHhfcHJpbnRfb3BlcmFuZF9hZGRyZXNzKTogSGFuZGxlIExPX1NVTS4KCShjNHhfc2Nhbl9mb3JfbGRwKTogRGVsZXRlLiAgSG9vcmF5IQoJKGM0eF9wcm9jZXNzX2FmdGVyX3JlbG9hZCk6IFJlbW92ZSBjYWxsIHRvIGM0eF9zY2FuX2Zvcl9sZHAuCglTcGxpdCBhbGwgaW5zbnMuCgkoYzR4X2ltbWVkX2ludF9jb25zdGFudCk6IFJlbmFtZWQgZnJvbSBjNHhfaW50X2NvbnN0YW50LiAgQWxsIGNhbGxlcnMKCWNoYW5nZWQuCgkoYzR4X2ltbWVkX2Zsb2F0X2NvbnN0YW50KTogUmVuYW1lZCBmcm9tIGM0eF9mbG9hdF9jb25zdGFudC4gIEFsbAoJY2FsbGVycwljaGFuZ2VkLgoJKGM0eF9UX2NvbnN0cmFpbnQpOiBBbGxvdyBMT19TVU0sIGRpc2FibGUgU1lNQk9MX1JFRiwgTEFCRUxfUkVGLAoJYW5kIENPTlNULgoJKGM0eF9VX2NvbnN0cmFpbnQsIHN5bWJvbGljX29wZXJhbmQpOiBOZXcgZnVuY3Rpb25zLgoJKHNyY19vcGVyYW5kKTogQWxsb3cgJ0knIGNvbnN0YW50cyBpbiBISW1vZGUuICBBbGxvdyBMT19TVU0sCglkaXNhYmxlIFNZTUJPTF9SRUYsIExBQkVMX1JFRiwgYW5kIENPTlNULgoJKGxzcmNfb3BlcmFuZCwgdHNyY19vcGVyYW5kKTogQ2FsbCBzcmNfb3BlcmFuZCBpbnN0ZWFkIG9mCglnZW5lcmFsX29wZXJhbmQuCgkoYzR4X29wZXJhbmRfc3Vid29yZCk6IFVwZGF0ZSBjb21tZW50cy4KCgkqIGNvbmZpZy9jNHgvYzR4LmMgKFRBUkdFVF9MT0FEX0FERFJFU1MpOiBOZXcgbWFjcm8uCgkoTEVHSVRJTUFURV9DT05TVEFOVF9QKTogQWxsb3cgU1lNQk9MX1JFRiwgTEFCRUxfUkVGLCBDT05TVCwKCXBsdXMgSElHSCBhbmQgTE9fU1VNIGZvciB0aGUgQzQwLgoJKEVOQ09ERV9TRUNUSU9OX0lORk8pOiBEZWZpbmUgbWFjcm8uCgkoc3ltYm9saWNfb3BlcmFuZCwgYzR4X1VfY29uc3RyYWludCwgYzR4X2VtaXRfbW92ZV9zZXF1ZW5jZSk6IE5ldwoJcHJvdG90eXBlcy4KCShQUkVESUNBVEVfQ09ERVMpOiBBZGQgc3ltYm9saWNfb3BlcmFuZC4KCgkqIGNvbmZpZy9jNHgvYzR4Lm1kIChtb3ZxaSwgbW92Z3FmLCBtb3ZoaSwgbW92aGkpOiBDYWxsCgljNHhfZW1pdF9tb3ZlX3NlcXVlbmNlLgoJKGZsb2F0dW5zcWlxZjIsIGZpeHVuc190cnVuY3FmcWkyKTogUmV3b3JrIGVtaXR0ZWQgUlRMCgl0byBhdm9pZCBzeW1ib2wgcmVmZXJlbmNlcy4KCShhbGwgcGF0dGVybnMgd2l0aCBnIGNvbnN0cmFpbnQpOiBSZXBsYWNlICdnJyBjb25zdHJhaW50IHdpdGggJ3JJbScuCgkoc2V0X2hpZ2gpOiBSZW5hbWVkIGZyb20gc2V0X2hpZ2hfdXNlLgoJKHNldF9sb19zdW0pOiBSZW5hbWVkIGZyb20gc2V0X2lvcl9sb191c2UuCgkoYWxsIGNhbGwgcGF0dGVybnMpOiBNYWtlIE1FTSBleHBsaWNpdCBpbiBjYWxsIGFkZHJlc3Mgb3BlcmFuZHMuCglNb2RpZmllZCBvdXRwdXQgdGVtcGxhdGVzIHRvIHVzZSAnVScgbW9kaWZpZXIuCgpTdW4gSmFuIDI0IDAxOjE1OjA1IDE5OTkgIEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKU2F0IEphbiAyMyAyMjozNDo1NyAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBmaW5hbC5jIChiYl9zdHIpOiBRdWFsaWZ5IGEgY2hhciogd2l0aCB0aGUga2V5d29yZCBgY29uc3QnLgoJKGFkZF9iYl9zdHJpbmcsIGZpbmFsX3NjYW5faW5zbiwgb3V0cHV0X2FzbV9pbnNuKTogTGlrZXdpc2UuCgoJKiBmaXgtaGVhZGVyLmMgKHJlYWRfc2Nhbl9maWxlKTogTGlrZXdpc2UuCgoJKiBnZW5vdXRwdXQuYyAob3V0cHV0X2VwaWxvZ3VlLCBwcm9jZXNzX3RlbXBsYXRlKTogTGlrZXdpc2UuCgoJKiBsb2NhbC1hbGxvYy5jIChyZXF1aXJlc19pbm91dCwgYmxvY2tfYWxsb2MpOiBMaWtld2lzZS4KCgkqIG91dHB1dC5oIChvdXRwdXRfYXNtX2luc24sIGFzc2VtYmxlX3N0cmluZyk6IExpa2V3aXNlLgoKCSogcmVjb2cuYyAocmVjb2dfY29uc3RyYWludHMsIGNoZWNrX2FzbV9vcGVyYW5kcywKCWRlY29kZV9hc21fb3BlcmFuZHMsIGV4dHJhY3RfaW5zbiwgcHJlcHJvY2Vzc19jb25zdHJhaW50cywKCWNvbnN0cmFpbl9vcGVyYW5kcyk6IExpa2V3aXNlLgoKCSogcmVjb2cuaCAob3BlcmFuZF9hbHRlcm5hdGl2ZSwgcmVjb2dfY29uc3RyYWludHMsIGluc25fdGVtcGxhdGUsCglpbnNuX291dGZ1biwgaW5zbl9vcGVyYW5kX2NvbnN0cmFpbnQsIGluc25fbmFtZSk6IExpa2V3aXNlLgoKCSogcmVnY2xhc3MuYyAocmVjb3JkX3JlZ19jbGFzc2VzLCBzY2FuX29uZV9pbnNuKTogTGlrZXdpc2UuCgoJKiByZWdtb3ZlLmMgKGZpbmRfbWF0Y2hlcyk6IExpa2V3aXNlLgoKCSogcmVsb2FkLmMgKGFsdGVybmF0aXZlX2FsbG93c19tZW1jb25zdCk6IExpa2V3aXNlLgoKCSogcmVsb2FkMS5jIChjb25zdHJhaW50X2FjY2VwdHNfcmVnX3AsCglyZWxvYWRfY3NlX3NpbXBsaWZ5X29wZXJhbmRzKTogTGlrZXdpc2UuCgoJKiBydGwuaCAoZGVjb2RlX2FzbV9vcGVyYW5kcyk6IExpa2V3aXNlLgoKCSogc2Nhbi5oIChmbl9kZWNsKTogTGlrZXdpc2UuCgoJKiB2YXJhc20uYyAoYXNzZW1ibGVfc3RyaW5nKTogTGlrZXdpc2UuCgpTYXQgSmFuIDIzIDAxOjM3OjM2IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS5pbiAoZ2NjX3Rvb2xkaXIpOiBIYW5kbGUgY2FzZSB3aGVyZSBleGVjX3ByZWZpeCBoYXMKCW5vdCBiZWVuIGV4cGxpY2l0bHkgc2V0LgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgoJKiBmb2xkLWNvbnN0LmMgKGxzaGlmdF9kb3VibGUpOiBNYXJrICdwcmVjJyBhcmd1bWVudHMgYXMgcG9zc2libHkKCXVudXNlZC4KCgkqIGJpdG1hcC5oIChiaXRtYXBfaGVhZF9kZWYpOiBNYWtlIGluZHggZmllbGQgdW5zaWduZWQuCgoJKiBjb25maWd1cmUuaW4gKGdjY190b29sZGlyKTogV2hlbiBub3QgbWFraW5nIGEgcmVsYXRpdmUgZ2NjX3Rvb2xkaXIsCgl1c2UgJGV4ZWNfcHJlZml4LyR0YXJnZXRfYWxpYXMgZm9yIGdjY190b29sZGlyLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgpGcmkgSmFuIDIyIDExOjQ4OjU2IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBjcHBwLmMgKHhyZWFsbG9jKTogRml4IHR5cG8gbGFzdCBjaGFuZ2UuCgkqIGNwcGFsbG9jLmMsIGdjYy5jLCBnZW5hdHRyLmMsIGdlbmF0dHJ0YWIuYywgZ2VuY29kZXMuYzogTGlrZXdpc2UuCgkqIGdlbmNvbmZpZy5jLCBnZW5lbWl0LmMsIGdlbmV4dHJhY3QuYywgZ2VuZmxhZ3MuYzogTGlrZXdpc2UuCgkqIGdlbm9waW5pdC5jLCBnZW5vdXRwdXQuYywgZ2VucGVlcC5jLCBnZW5yZWNvZy5jOiBMaWtld2lzZS4KCjE5OTktMDEtMjIgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgoKCSogcnM2MDAwLmggKENSMF9SRUdOT19QKTogTmV3IG1hY3JvIHRvIHRlc3QgaWYgY3IwLgoJKENSX1JFR05PX05PVF9DUjBfUCk6IE5ldyBtYWNybyB0byB0ZXN0IGlmIGNyLCBidXQgbm90IGNyMC4KCShQUkVESUNBVEVfQ09ERVMpOiBBZGQgY2NfcmVnX25vdF9jcjBfb3BlcmFuZC4KCShjY19yZWdfbm90X2NyMF9vcGVyYW5kKTogQWRkIGRlY2xhcmF0aW9uLgoKCSogcnM2MDAwLmMgKGNjX3JlZ19ub3RfY3IwX29wZXJhbmQpOiBSZXR1cm4gdHJ1ZSBpZiByZWdpc3RlciBpcyBhCglwc2V1ZG8gcmVnaXN0ZXIsIG9yIGEgY29udHJvbCByZWdpc3RlciB0aGF0IGlzIG5vdCBDUjAuCgoJKiByczYwMDAubWQgKGFsbCBjb21iaW5lciBwYXR0ZXJucyBidWlsZGluZyAuIGluc3RydWN0aW9ucyk6IEZvcgoJYWxsIGAuJyBpbnN0cnVjdGlvbnMgdGhhdCBkbyBzb21ldGhpbmcgYW5kIHNldCBjcjAsIGFkZCBhbgoJYWx0ZXJuYXRpdmUgdGhhdCBkb2VzIHRoZSBvcGVyYXRpb24sIGFuZCB0aGVuIHNldHMgYSBkaWZmZXJlbnQKCWZsYWcsIGluIG9yZGVyIHRvIGF2b2lkIHVzaW5nIHRoZSBjb3N0bHkgbWNyZiBpbnN0cnVjdGlvbiBhbmQgYWxzbwoJYWxsb3cgY3IwIHRvIGJlIGNsb2JiZXJlZCBpbiBhc20gc3RhdGVtZW50cy4gIEFsc28gZml4IGEgZmV3CglwYXR0ZXJucyB0aGF0IHVzZWQgdGhlIHdyb25nIHJlZ2lzdGVyLgoKCSogcnM2MDAwLmggKHJzNjAwMF9jcHVfc2VsZWN0KTogTWFrZSBzdHJpbmcsIG5hbWVzIGJlIGNvbnN0IGNoYXIgKi4KCShyczYwMDBfZGVidWdfbmFtZSk6IE1ha2UgY29uc3QgY2hhciAqLCBub3QgY2hhciAqLgoKCSogc3lzdjQuaCAocnM2MDAwX3thYmksc2RhdGF9X25hbWUpOiBNYWtlIGNvbnN0IGNoYXIgKi4KCgkqIHJzNjAwMC5jIChyczYwMDBfe2RlYnVnLGFiaSxzZGF0YX1fbmFtZSk6IE1ha2UgY29uc3QgY2hhciAqLgoJKHJzNjAwMF9zZWxlY3QpOiBVc2UgY29uc3QgY2hhciAqIGluIGNhc3RzLgoKRnJpIEphbiAyMiAwNzo0MzowMSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoZ2NjX3Rvb2xkaXIpOiBNb3ZlIGJlZm9yZSBmaXJzdCByZWZlcmVuY2UuCglMZXQgYXV0b2NvbmYgc3Vic3RpdHV0ZSBpbiBhIHZhbHVlLgoJKiBjb25maWd1cmUuaW4gKGdjY190b29sZGlyKTogT25seSB1c2UgYSByZWxhdGl2ZSBwYXRoIHRvIHRoZQoJdG9vbCBkaXJlY3RvcnkgaWYgJGV4ZWNfcHJlZml4ID09ICRwcmVmaXguCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KCgkqIE1ha2VmaWxlLmluICh0b29sZGlyKTogUmVwbGFjZSB3aXRoIGdjY190b29sZGlyLgoKVGh1IEphbiAyMSAyMzoyMTo1NyAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBtNjhrLm1kIChhc2hsZGlfY29uc3QpOiBEaXNhYmxlIGZvciAhVEFSR0VUXzUyMDAuICBGaXggaW5kZW50YXRpb24uCgkoYXNobGRpMyBleHBhbmRlcik6IFNpbWlsYXJseS4gIFVwZGF0ZSBjb21tZW50cy4KCShhc2hyZGlfY29uc3QsIGxzaHJkaV9jb25zdCk6IEZpeCBpbmRlbnRhdGlvbi4KCShhc2hyZGkzLCBsc2hyZGkzKTogRml4IGluZGVudGF0aW9uLiAgVXBkYXRlIGNvbW1lbnRzLgoKVGh1IEphbiAyMSAyMTo1MzozNiAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZW1pdC1ydGwuYyAodHJ5X3NwbGl0KTogRG9uJ3QgdHJ5IHRvIHNwbGl0IG5vbi1pbnN0cnVjdGlvbnMuCgpUaHUgSmFuIDIxIDIzOjQ3OjMwIDE5OTkgIEFuZHJldyBNYWNMZW9kICA8YW1hY2xlb2RAY3lnbnVzLmNvbT4KCgkqIGV4cHIuYyAoZW1pdF9wdXNoX2luc24pOiBGaXggZHVtYiB0eXBvLgoKVGh1IEphbiAyMSAyMDoyNDowMiAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogcnM2MDAwLmggKExFR0lUSU1JWkVfUkVMT0FEX0FERFJFU1MpOiBSZWNvZ25pemUgYW5kIGFjY2VwdAoJdHJhbnNmb3JtYXRpb25zIHRoYXQgd2UgaGF2ZSBwZXJmb3JtZWQgZWFybGllci4KCSogYWxwaGEuaCAoTEVHSVRJTUlaRV9SRUxPQURfQUREUkVTUyk6IExpa2V3aXNlLgoKCSogYWxwaGEubWQgKHByb2xvZ3VlX3N0YWNrX3Byb2JlX2xvb3ApOiBEb24ndCBkbyBvdXIgb3duIGxhYmVsCgloYW5kbGluZywgY2FsbCBnZW5fbGFiZWxfcnR4IGluc3RlYWQuCgpUaHUgSmFuIDIxIDE3OjQ1OjE4IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBjb25maWd1cmUuaW4gKHtyczYwMDB8cG93ZXJwY30taWJtLWFpeDQuWzEyXSopOiBBZGQgbWlzc2luZyBgdGhlbicuCgoJKiBjY2NwLmMgKHhyZWFsbG9jKTogQ2FsbCBtYWxsb2MgZ2l2ZW4gYSBOVUxMIG9sZCBwb2ludGVyLgoJKiBjb2xsZWN0Mi5jLCBjcHBhbGxvYy5jLCBnY2MuYywgZ2VuYXR0ci5jLCBnZW5hdHRydGFiLmM6IExpa2V3aXNlLgoJKiBnZW5jb2Rlcy5jLCBnZW5jb25maWcuYywgZ2VuZW1pdC5jLCBnZW5leHRyYWN0LmM6IExpa2V3aXNlLgoJKiBnZW5mbGFncy5jLCBnZW5vcGluaXQuYywgZ2Vub3V0cHV0LmMsIGdlbnBlZXAuYzogTGlrZXdpc2UuCgkqIGdlbnJlY29nLmMsIG1pcHMtdGZpbGUuYywgcHJvdG9pemUuYzogTGlrZXdpc2UuCgpUaHUgSmFuIDIxIDE5OjQ0OjU1IDE5OTkgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgoKCSogY29uZmlndXJlLmluICh7cnM2MDAwfHBvd2VycGN9LWlibS1haXg0LlsxMl0qKTogSWYKCS0td2l0aC1nbnUtbGQsIHVzZSB4LWFpeDQxLWdsZCBpbnN0ZWFkIG9mIHgtYWl4NDEgdG8gc3VwcHJlc3MKCWFkZGluZyAtV2wsLWJiaWd0b2MgdG8gQk9PVF9MREZMQUdTLgoJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCgoJKiBjb25maWcvcnM2MDAwL3gtYWl4NDEtZ2xkOiBOZXcgZmlsZSwgZG9uJ3Qgc2V0IEJPT1RfTERGTEFHUy4KClRodSBKYW4gMjEgMTU6NDg6MDMgMTk5OSAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKCSogY3BwZXhwLmMgKGNwcF9sZXgpOiBBbGxvY2F0ZSB0b2tlbl9idWZmZXIgZHluYW1pY2FsbHkuCgpUaHUgSmFuIDIxIDE0OjE4OjA0IDE5OTkgIEFuZHJldyBNYWNMZW9kICA8YW1hY2xlb2RAY3lnbnVzLmNvbT4KCgkqIGV4cHIuYyAoTU9WRV9CWV9QSUVDRVNfUCk6IERlZmluZSBjb25kaXRpb24gZm9yIGRlY2lkaW5nIHRvIHVzZQoJbW92ZV9ieV9waWVjZXMuCgkoTU9WRV9NQVhfUElFQ0VTKTogRGVmaW5lIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIG1vdmUgYXQgb25jZS4KCShVU0VfTE9BRF9QT1NUX0lOQ1JFTUVOVCwgVVNFX0xPQURfUFJFX0RFQ1JFTUVOVCk6IERlZmluZSBkZWZhdWx0cy4KCShVU0VfU1RPUkVfUE9TVF9JTkNSRU1FTlQsIFVTRV9TVE9SRV9QUkVfREVDUkVNRU5UKTogRGVmaW5lIGRlZmF1bHRzLgoJKG1vdmVfYnlfcGllY2VzKTogVXNlIG5ldyBtYWNyb3MuCgkoZW1pdF9ibG9ja19tb3ZlKTogVXNlIG5ldyBtYWNyb3MuCgkoY2xlYXJfYnlfcGllY2VzKTogVXNlIG5ldyBtYWNyb3MuCgkoY2xlYXJfc3RvcmFnZSk6IFVzZSBuZXcgbWFjcm9zLgoJKGVtaXRfcHVzaF9pbnNuKTogVXNlIG5ldyBtYWNyb3MuCgkoZXhwYW5kX2V4cHIpOiBVc2UgbmV3IG1hY3Jvcy4KCSogY29uZmlnL3NoL3NoLmggKFVTRV9MT0FEX1BPU1RfSU5DUkVNRU5ULCBVU0VfTE9BRF9QUkVfREVDUkVNRU5UKToKCURlZmluZS4KCShVU0VfU1RPUkVfUE9TVF9JTkNSRU1FTlQsIFVTRV9TVE9SRV9QUkVfREVDUkVNRU5UKTogRGVmaW5lLgoJKE1PVkVfQllfUElFQ0VTX1ApOiBEZWZpbmUgYmFzZWQgb24gYWxpZ25tZW50IGFuZCBUQVJHRVRfU01BTExDT0RFLgoJKE1PVkVfTUFYX1BJRUNFUyk6IE1vdmUgOCBieXRlcyBvbiBTSDQuCgkqIHRtLnRleGkoTU9WRV9CWV9QSUVDRVNfUCwgTU9WRV9NQVhfUElFQ0VTLCBVU0VfTE9BRF9QT1NUX0lOQ1JFTUVOVCwKCVVTRV9MT0FEX1BSRV9ERUNSRU1FTlQsIFVTRV9TVE9SRV9QT1NUX0lOQ1JFTUVOVCwKCVVTRV9TVE9SRV9QUkVfREVDUkVNRU5UKTogRGVzY3JpYmUgbmV3IG1hY3Jvcy4KClRodSBKYW4gMjEgMTQ6MTM6MzEgMTk5OSAgVmxhZGltaXIgTi4gTWFrYXJvdiAgPHZtYWthcm92QGN5Z251cy5jb20+CgoJKiB2YXJhc20uYyAob3V0cHV0X2NvbnN0YW50X3Bvb2wpOiBVc2UgZmxvb3JfbG9nMiBpbnN0ZWFkIG9mCglleGFjdF9sb2cyIGZvciBBU01fT1VUUFVUX0FMSUdOLgoKCSogc3Rvci1sYXlvdXQuYyAobGF5b3V0X3R5cGUpOiBEbyBtYWNoaW5lLWRlcGVuZGVudCBleHRyYSBhbGlnbm1lbnQuCgoJKiBlbWl0LXJ0bC5jIChvcGVyYW5kX3N1YndvcmQpOiBIYW5kbGUgY2FzZSB3aGVuIGEgc3Vid29yZCBvdXRzaWRlCgl0aGUgb3BlcmFuZC4KCgkqIHRtLnRleGkgKFJPVU5EX1RZUEVfe1NJWkUsQUxJR059KTogTW9yZSBhY2N1cmF0ZSBkZXNjcmlwdGlvbnMgb2YKCXRoZSBtYWNyb3MuCgpUaHUgSmFuIDIxIDAxOjU5OjMwIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBjc2UuYyAoZm9sZF9ydHgpOiBSZXZlcnQgMjkgRGVjIGNoYW5nZS4KCShjc2VfaW5zbik6IFJldmVydCAxMiBKYW4gY2hhbmdlLgoJKiBleHByLmMgKGV4cGFuZF9idWlsdGluKTogRG9uJ3QgZW1pdCBDT05TVCBhcm91bmQgQ09OU1RBTlRfUF9SVFguCgkqIHJlZ2NsYXNzLmMgKHJlZ19zY2FuX21hcmtfcmVmcyk6IFJldmVydCAyOSBEZWMgY2hhbmdlLgoJKiBydGwuZGVmOiBMaWtld2lzZS4KCSogcnRsLmggKENPTlNUQU5UX1ApOiBMaWtld2lzZS4KCgkqIGV4cHIuYyAoZW1pdF9tb3ZlX2luc24pOiBOZXZlciB0cnkgdG8gZmx1c2ggQ09OU1RBTlRfUF9SVFgKCXRvIG1lbW9yeS4KCSogcmVjb2cuYyAoaW1tZWRpYXRlX29wZXJhbmQpOiBBY2NlcHQgQ09OU1RBTlRfUF9SVFguCgkqIGFscGhhLmMgKGlucHV0X29wZXJhbmQpOiBMaWtld2lzZS4KCSogYzR4LmMgKGNvbnN0X29wZXJhbmQpOiBMaWtld2lzZS4KCgkqIGV4cGxvdy5jIChhbGxvY2F0ZV9keW5hbWljX3N0YWNrX3NwYWNlKTogVXNlIHJlZ2lzdGVyX29wZXJhbmQKCWluc3RlYWQgb2YgYXJpdGhfb3BlcmFuZCwgd2hpY2ggZG9lcyBub3QgZXhpc3QuCgoJKiAxNzUwYS5oOiBGaXggY29tbWVudCBjbG9zdXJlLgoJKiBhMjlrLmMgKGEyOWtfc2V0X21lbWZsYWdzKTogRml4IHR5cG8gaW4gMTkgSmFuIGNoYW5nZS4KCSogYXJjLm1kIChvbmVfY21wbHNpMl9zZXRfY2NfaW5zbik6IEZpeCBzZXQgbW9kZSBtaXNtYXRjaC4KCSogYXJtLmggKFRBUkdFVF9TV0lUQ0hFUyk6IEZpeCB0eXBvLgoJKiBpMzcwLm1kIChhbm9uIG11bHQgYW5kIGRpdiBwYXR0ZXJucyk6IEZpeCBzZXQgbW9kZSBtaXNtYXRjaC4KCSogaTg2MC5jIChvdXRwdXRfZGVsYXllZF9icmFuY2gpOiBGaXggb3BlcmFuZHMgdG8gY29uc3RyYWluX29wZXJhbmRzLgoJKG91dHB1dF9kZWxheV9pbnNuKTogTGlrZXdpc2UuCgkqIG04OGsubWQgKGFub24gcm90YXRlIGluc25zKTogRml4IHNldCBtb2RlIG1pc21hdGNoLgoJKGFub24gQkxLbW9kZSBtb3Zlcyk6IENvbW1vbml6ZSBhbmQgZml4IHNldCBtb2RlIG1pc21hdGNoZXMuCgkqIG5zMzJrLm1kICh1ZGl2bW9kZGlbc2hxXWk0X2ludGVybmFsKTogRml4IG1vZGUgbWlzbWF0Y2guCgkqIHJvbXAubWQgKG1vdmRmKTogRml4IHR5cG8uCgpUaHUgSmFuIDIxIDAwOjI5OjM1IDE5OTkgIE5hdGhhbiBTaWR3ZWxsICA8bmF0aGFuQGFjbS5vcmc+CgoJKiBNYWtlZmlsZS5pbiAoaW5zdGFsbC1jb21tb24pOiBSZW1vdmUgZXh0cmFuZW91cyBjaG1vZCBmb3IgZ2NvdgoJaW5zdGFsbC4KCldlZCBKYW4gMjAgMTg6MTU6MDggMTk5OSAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKCSogZnVuY3Rpb24uYyAoYXNzaWduX3Bhcm1zKTogU2F2ZSBhbmQgcmVzdG9yZSBzZXR0aW5nIG9mCglUUkVFX1VTRUQgKHBhcm0pLgoKV2VkIEphbiAyMCAxMjo1MTo0MiAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogYXJtLm1kOiBVc2UgTUVNX0NPUFlfQVRUUklCVVRFUyB3aGVyZSBhcHByb3ByaWF0ZSB0aHJvdWdob3V0LgoJUGFzcyBNRU1fU0NBTEFSX1AgdG8gYXJtX2dlbl9zdG9yZV9tdWx0aXBsZSB3aGVyZSBhcHByb3ByaWF0ZS4KClR1ZSBKYW4gMTkgMjE6MjA6NTIgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHJlY29nLmMgKHBvcF9vcGVyYW5kKTogTmV3IGZ1bmN0aW9uLgoJKiByZWNvZy5oIChwb3Bfb3BlcmFuZCk6IERlY2xhcmUgaXQuCgkqIGdlbnJlY29nLmMgKHByZWRzKTogRGVmaW5lIGl0LgoKCSogZXhwci5jIChkb19qdW1wX2Zvcl9jb21wYXJlKTogSGFuZGxlIGNvbmRpdGlvbmFsIGJyYW5jaCBleHBhbmRlcnMKCWVtaXR0aW5nIG11bHRpcGxlIGp1bXAgaW5zdHJ1Y3Rpb25zLgoJKiBqdW1wLmMgKGNvbmRqdW1wX2xhYmVsKTogTmV3IGZ1bmN0aW9uLgoJKiBydGwuaCAoY29uZGp1bXBfbGFiZWwpOiBEZWNsYXJlIGl0LgoKVHVlIEphbiAxOSAyMTowODoyMCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZXhwci5jIChlbWl0X21vdmVfaW5zbl8xKTogUmV2ZXJ0IDE3IERlYyBjaGFuZ2UuICBEb24ndCBlbWl0CgljbG9iYmVyIGR1cmluZyBvciBhZnRlciByZWxvYWQuCgpUdWUgSmFuIDE5IDE2OjU2OjAzIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBnZW5vdXRwdXQuYyAobmFtZV9mb3JfaW5kZXgpOiBOZXcgZnVuY3Rpb24uCgkoc2Nhbl9vcGVyYW5kcywgdmFsaWRhdGVfaW5zbl9hbHRlcm5hdGl2ZXMpOiBVc2UgaXQuCgkqIGdlbnJlY29nLmMgKGluc25fbmFtZV9wdHJfc2l6ZSk6IE5ldyB2YXJpYWJsZS4KCShtYWtlX2luc25fc2VxdWVuY2UpOiBGaWxsIGluIGluc25fbmFtZV9wdHIuCgkobWVyZ2VfdHJlZXMpOiBVc2UgaXQuCgpUdWUgSmFuIDE5IDE2OjM3OjM2IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBpMzg2L2lzYy5oIChUQVJHRVRfREVGQVVMVCk6IERlZmluZSBzeW1ib2xpY2x5LgoJKiBpMzg2L2lzY2NvZmYuaCwgaTM4Ni9uZXh0LmgsIGkzODYvc2NvLmgsIGkzODYvc2NvNS5oOiBMaWtld2lzZS4KCSogaTM4Ni9zY29kYnguaCwgaTM4Ni9zZXF1ZW50LmgsIGkzODYudW5peC5oOiBMaWtld2lzZS4KClR1ZSBKYW4gMTkgMTU6MDA6MTAgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbG9vcC5jIChOVU1fU1RPUkVTKTogRGVsZXRlLgoJKGxvb3Bfc3RvcmVfbWVtcyk6IFR1cm4gaW50byBhbiBFWFBSX0xJU1Qgb2YgTUVNcy4KCShwcmVzY2FuX2xvb3ApOiBQcm9wZXJseSBpbml0aWFsaXplIGxvb3BfbWVtc19pZHguCgkobm90ZV9hZGRyX3N0b3JlZCk6IFNpbXBsaWZ5IHVzaW5nIGxpc3Qgc3RydWN0dXJlIGluc3RlYWQgb2YKCWZpeGVkIHNpemVkIGFycmF5LgoJKGludmFyaWFudF9wLCBjaGVja19kYnJhX2xvb3AsIGxvYWRfbWVtcyk6IFNpbWlsYXJseS4KCgkqIGZsb3cuYyAoaW52YWxpZGF0ZV9mcm9tX2F1dG9pbmMpOiBOZXcgZnVuY3Rpb24uCgkobWFya19zZXRfMSwgbWFya191c2VkX3JlZ3MpOiBVc2UgaXQuCgoJKiBNYWtlZmlsZS5pbiAocHJvdG9pemUubywgdW5wcm90b2l6ZS5vKTogRGVwZW5kIG9uIE1ha2VmaWxlLgoKMTk5OS0wMS0xOSAgVmxhZGltaXIgTi4gTWFrYXJvdiAgPHZtYWthcm92QGN5Z251cy5jb20+CgoJKiBpbnZva2UudGV4aSAoLW1sb25nLWRvdWJsZS02NCk6IE5ldyBvcHRpb24gZGVzY3JpcHRpb24uCgoxOTk5LTAxLTE5ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBsaWJnY2MyLmM6IENoYW5nZSBhbGwgdXNlcyBvZiBMT05HX0RPVUJMRV9UWVBFX1NJWkUgdG8KCUxJQkdDQzJfTE9OR19ET1VCTEVfVFlQRV9TSVpFLgoJKExJQkdDQzJfTE9OR19ET1VCTEVfVFlQRV9TSVpFKTogTmV3LiAgU2V0IHRvIExPTkdfRE9VQkxFX1RZUEVfU0laRQoJaWYgbm90IGRlZmluZWQuCgkqIGk5NjAvaTk2MC5oIChNVUxUSUxJQl9ERUZBVUxUUyk6IERlZmluZSB0byBtbnVtZXJpY3MuCgkoQ1BQX1NQRUNTKTogQWRkIC1tbG9uZy1kb3VibGUtNjQgc3VwcG9ydC4KCShUQVJHRVRfRkxBR19MT05HX0RPVUJMRV82NCwgVEFSR0VUX0xPTkdfRE9VQkxFXzY0KTogTmV3LgoJKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCAtbWxvbmctZG91YmxlLTY0IHN1cHBvcnQuCgkoTE9OR19ET1VCTEVfVFlQRV9TSVpFKTogTGlrZXdpc2UuCgkoTElCR0NDMl9MT05HX0RPVUJMRV9UWVBFX1NJWkUpOiBEZWZpbmUuCgkqIGk5NjAvdng5NjAtY29mZi5oIChNVUxUSUxJQl9ERUZBVUxUUyk6IERlZmluZSB0byBtc29mdC1mbG9hdC4KCShDUFBfU1BFQ1MpOiBBZGQgLW1sb25nLWRvdWJsZS02NCBzdXBwb3J0LgoJKiBpOTYwL3QtOTYwYmFyZSAoTVVMVElMSUJfT1BUSU9OUyk6IEFkZCBtbG9uZy1kb3VibGUtNjQuCgkoTVVMVElMSUJfRElSTkFNRVMpOiBBZGQgbGQ2NC4KCSogaTk2MC90LXZ4d29ya3M5NjAgKE1VTFRJTElCX09QVElPTlMsIE1VTFRJTElCX0RJUk5BTUVTKTogTGlrZXdpc2UuCgpUdWUgSmFuIDE5IDExOjU0OjA0IDE5OTkgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKTogU3RyaXAgYSBUQVJHRVRfRVhQUiBpZiB3ZSdyZSBwYXNzaW5nIGJ5CglpbnZpc2libGUgcmVmZXJlbmNlLgoKVHVlIEphbiAxOSAxNDo1MTozNiAxOTk5ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiByczYwMDAuYyAob2Zmc2V0dGFibGVfYWRkcl9vcGVyYW5kKTogRGVsZXRlLgoJKG9mZnNldHRhYmxlX21lbV9vcGVyYW5kKTogTmV3IGZ1bmN0aW9uLgoJKiByczYwMDAuaCAoUFJFRElDQVRFX0NPREVTKTogUmVmbGVjdCBmdW5jdGlvbiBjaGFuZ2UuCgkoUlM2MDAwX1NBVkVfVE9DKTogUmVwcmVzZW50IGFkZHJlc3MgYXMgTUVNLgoJKiB3aW4tbnQuaCAoUlM2MDAwX1NBVkVfVE9DKTogU2FtZS4KCSogcnM2MDAwLm1kIChpbmRpcmVjdCBjYWxscyk6IENoYW5nZSBvZmZzZXR0YWJsZSBhZGRyZXNzIHBhcmFtZXRlcgoJdG8gb2Zmc2V0dGFibGUgbWVtb3J5IHBhcmFtZXRlci4KClR1ZSBKYW4gMTkgMTA6MjQ6NTMgMTk5OSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIHJ0bC5oIChydHhfZGVmKTogVXBkYXRlIGRvY3VtZW50YXRpb24uCgkoTUVNX0lOX1NUUlVDVF9QKTogTGlrZXdpc2UuCgkoTUVNX1NDQUxBUl9QKTogTmV3IG1hY3JvLgoJKE1FTV9DT1BZX0FUVFJJQlVURVMpOiBMaWtld2lzZS4KCShNRU1fU0VUX0lOX1NUUlVDVF9QKTogTGlrZXdpc2UuCgkqIHJ0bC50ZXhpIChNRU1fU0NBTEFSX1ApOiBEb2N1bWVudC4KCSogYWxpYXMuYyAoY2Fub25fcnR4KTogVXNlIE1FTV9DT1BZX0FUVFJJQlVURVMuCgkoZml4ZWRfc2NhbGFyX2FuZF92YXJ5aW5nX3N0cnVjdF9wKTogTmV3IGZ1bmN0aW9uLiAgVXNlCglNRU1fU0NBTEFSX1AgcmF0aGVyIHRoYW4gIU1FTV9JTl9TVFJVQ1RfUC4KCShhbGlhc2VzX2V2ZXJ5dGhpbmdfcCk6IExpa2V3aXNlLgoJKHRydWVfZGVwZW5kZW5jZSk6IFVzZSB0aGVtLgoJKHdyaXRlX2RlcGVuZGVuY2VfcCk6IE5ldyBmdW5jdGlvbiwgY29udGFpbmluZyBjb2RlIGNvbW1vbiB0bwoJYW50aV9kZXBlbmRlbmNlIGFuZCBvdXRwdXRfZGVwZW5kZW5jZS4KCShhbnRpX2RlcGVuZGVuY2UpOiBVc2UgaXQuCgkob3V0cHV0X2RlcGVuZGVuY2UpOiBMaWtld2lzZS4KCSogY2FsbHMuYyAoc2F2ZV9maXhlZF9hcmd1bWVudF9hcmVhKTogRG9uJ3QgY2xlYXIKCU1FTV9JTl9TVFJVQ1RfUC4KCShleHBhbmRfY2FsbCk6IFVzZSBNRU1fU0VUX0lOX1NUUlVDVF9QLgoJKGVtaXRfbGlicmFyeV9jYWxsKTogRG9uJ3QgY2xlYXIgTUVNX0lOX1NUUlVDVF9QLgoJKGVtaXRfbGlicmFyeV9jYWxsX3ZhbHVlKTogTGlrZXdpc2UuCgkoc3RvcmVfb25lX2FyZyk6IFVzZSBNRU1fU0VUX0lOX1NUUlVDVF9QLgoJKiBjb21iaW5lLmMgKHNpbXBsaWZ5X3J0eCk6IFVzZSBNRU1fQ09QWV9BVFRSSUJVVEVTLgoJKG1ha2VfZXh0cmFjdGlvbik6IExpa2V3aXNlLgoJKHNpbXBsaWZ5X3NoaWZ0X2NvbnN0KTogTGlrZXdpc2UuCgkoZ2VuX2xvd3BhcnRfZm9yX2NvbWJpbmUpOiBMaWtld2lzZS4KCSogY3NlLmMgKGdlbl9sb3dwYXJ0X2lmX3Bvc3NpYmxlKTogVXNlIE1FTV9DT1BZX0FUVFJJQlVURVMuCgkqIGVtaXQtcnRsLmMgKG9wZXJhbmRfc3Vid29yZCk6IExpa2V3aXNlLgoJKGNoYW5nZV9hZGRyZXNzKTogTGlrZXdpc2UuCgkqIGV4cGxvdy5jIChzdGFiaWxpemUpOiBVc2UgTUVNX0NPUFlfQVRUUklCVVRFUy4KCSogZXhwci5jIChwcm90ZWN0X2Zyb21fcXVldWUpOiBVc2UgTUVNX0NPUFlfQVRUUklCVVRFUy4KCShlbWl0X2dyb3VwX3N0b3JlKTogVXNlIE1FTV9TRVRfSU5fU1RSVUNUX1AuCgkoY29weV9ibGttb2RlX2Zyb21fcmVnKTogTGlrZXdpc2UuCgkoc3RvcmVfZmllbGQpOiBMaWtld2lzZS4KCShleHBhbmRfZXhwcik6IFJlbW92ZSBib2d1cyBndWVzc3dvcmsgc2V0dGluZyBNRU1fSU5fU1RSVUNUX1AKCWhldXJpc3RpY2FsbHkuICBVc2UgTUVNX1NFVF9JTl9TVFJVQ1RfUC4KCShnZXRfbWVtb3J5X3J0eCk6IExpa2V3aXNlLgoJKiBmaW5hbC5jIChhbHRlcl9zdWJyZWcpOiBVc2UgTUVNX0NPUFlfQVRUUklCVVRFUy4KCSogZnVuY3Rpb24uYyAoYXNzaWduX3N0YWNrX3RlbXApOiBDbGVhciBNRU1fU0NBTEFSX1AgYW5kCglNRU1fQUxJQVNfU0VUIG9uIG5ld2x5IHJldHVybmVkIE1FTXMuCgkoYXNzaWduX3RlbXApOiBVc2UgTUVNX1NFVF9JTl9TVFJVQ1RfUC4KCShwdXRfcmVnX2ludG9fc3RhY2spOiBMaWtld2lzZS4KCShmaXh1cF92YXJfcmVmczEpOiBVc2UgTUVNX0NPUFlfQVRUUklCVVRFUy4KCShnZW5fbWVtX2FkZHJlc3NvZik6IFVzZSBNRU1fU0VUX0lOX1NUUlVDVF9QLgoJKGFzc2lnbl9wYXJtcyk6IExpa2V3aXNlLgoJKGV4cGFuZF9mdW5jdGlvbik6IExpa2V3aXNlLgoJKiBpbnRlZ3JhdGUuYyAoZXhwYW5kX2lubGluZV9mdW5jdGlvbik6IExpa2V3aXNlLgoJKGNvcHlfcnR4X2FuZF9zdWJzdGl0dXRlKTogVXNlIE1FTV9DT1BZX0FUVFJJQlVURVMuCgkqIGxvb3AuYyAobm90ZV9hZGRyX3N0b3JlZCk6IFJlbW92ZSBjaGVjayBvbiBNRU1fSU5fU1RSVUNUX1AuCgkqIG9wdGFicy5jIChnZW5fbW92ZV9pbnNuKTogVXNlIE1FTV9DT1BZX0FUVFJJQlVURVMuCgkqIHByaW50LXJ0bC5jIChwcmludF9ydHgpOiBQcmludCAvZiBmb3IgZnJhbWVfcmVsYXRlZC4KCSogcmVjb2cuYyAodmFsaWRhdGVfcmVwbGFjZV9ydHhfMSk6IFVzZSBNRU1fQ09QWV9BVFRSSUJVVEVTLgoJKiByZWxvYWQxLmMgKHJlbG9hZCk6IENvcHkgTUVNX1NDQUxBUl9QIGFzIHdlbGwuCgkqIHN0bXQuYyAoZXhwYW5kX2RlY2wpOiBVc2UgTUVNX1NFVF9JTl9TVFJVQ1RfUC4KCShleHBhbmRfYW5vbl91bmlvbl9kZWNsKTogVXNlIE1FTV9DT1BZX0FUVFJJQlVURVMuCgkqIHZhcmFzbS5jIChtYWtlX2RlY2xfcnRsKTogVXNlIE1FTV9TRVRfSU5fU1RSVUNUX1AuCgkob3V0cHV0X2NvbnN0YW50X2RlZik6IExpa2V3aXNlLgoJKiBhMjlrLmMgKGEyOWtfc2V0X21lbWZsYWdzXzEpOiBUYWtlIHNjYWxhcl9wLgoJU2V0IE1FTV9TQ0FMQVJfUC4KCShhMjlrX3NldF9tZW1mbGFncyk6IFVzZSBpdC4KCSogYWxwaGEuYyAoZ2V0X2FsaWduZWRfbWVtKTogVXNlIE1FTV9DT1BZX0FUVFJJQlVURVMuCgkqIGM0eC5jIChjNHhfc2Nhbl9mb3JfbGQpOiBMaWtld2lzZS4KCSogaDgzMDAuYyAoZml4X2JpdF9vcGVyYW5kKTogTGlrZXdpc2UuCgkqIG04OGsuYyAobGVnaXRpbWl6ZV9hZGRyZXNzKTogTGlrZXdpc2UuCgkoYmxvY2tfbW92ZV9sb29wKTogTGlrZXdpc2UuCgkoYmxvY2tfbW92ZV9ub19sb29wKTogTGlrZXdpc2UuCgkoYmxvY2tfbW92ZV9zZXF1ZW5jZSk6IExpa2V3aXNlLgoJKG04OGtfYnVpbHRpbl9zYXZlcmVncyk6IFVzZSBNRU1fU0VUX0lOX1NUUlVDVF9QLgoJKiBtaXBzL2FiaTY0LmggKFNFVFVQX0lOQ09NSU5HX1ZBUkFSR1MpOiBMaWtld2lzZS4KCSogcnM2MDAwLmMgKGV4cGFuZF9ibG9ja19tb3ZlX2luc24pOiBVc2UgTUVNX0NPUFlfQVRUUklCVVRFUy4KCSogc2guYyAoc2hfYnVpbHRpbl9zYXZlcmVncyk6IFVzZSBNRU1fU0VUX0lOX1NUUlVDVF9QLgoJKiBhcm0uaCAoYXJtX2dlbl9sb2FkX211bHRpcGxlKTogVGFrZSBzY2FsYXJfcC4KCShhcm1fc3RvcmVfbG9hZF9tdWx0aXBsZSk6IExpa2V3aXNlLgoJKiBhcm0uYyAoYXJtX2dlbl9sb2FkX211bHRpcGxlKTogTGlrZXdpc2UuCgkoYXJtX2dlbl9zdG9yZV9tdWx0aXBsZSk6IExpa2V3aXNlLgoJKGFybV9nZW5fbW92c3RycWkpOiBUcmVhdCBNRU1fU0NBTEFSX1AgbGlrZSBNRU1fSU5fU1RSVUNUX1AuCgpUdWUgSmFuIDE5IDEyOjMwOjM3IDE5OTkgIEFuZHJldyBNYWNMZW9kICA8YW1hY2xlb2RAY3lnbnVzLmNvbT4KCgkqIG9wdGFicy5jIChlbWl0X2xpYmNhbGxfYmxvY2spOiBBZGQgYSBSRUdfRUhfUkVHSU9OIHJlZyBub3RlIHRvIGFsbAoJY2FsbHMgd2l0aGluIGEgbGliY2FsbCBibG9jayB0byBpbmRpY2F0ZSBubyB0aHJvd3MgYXJlIHBvc3NpYmxlLgoJKiBmbG93LmMgKGZpbmRfYmFzaWNfYmxvY2tzLCBmaW5kX2Jhc2ljX2Jsb2Nrc18xKTogRG9uJ3QgbG9vayBmb3IKCWxpYmNhbGwgYmxvY2tzLiBEb24ndCBhZGQgZWRnZXMgdG8gZXhjZXB0aW9uIGhhbmRsZXJzIGlmIHdlIHNlZQoJYSBSRUdfRUhfUkVHSU9OIG5vdGUgd2l0aCBhIHZhbHVlIG9mIDAuCgkobWFrZV9lZGdlcyk6IE92ZXJyaWRlIGFjdGl2ZV9laF9yZWdpb24gdmVjdG9yIGlmIHRoZSBjYWxsIGhhcyBhIG5vdGUKCWluZGljYXRpbmcgdGhlIGNhbGwgZG9lcyBub3QgdGhyb3cuCgoxOTk5LTAxLTE5ICBWbGFkaW1pciBOLiBNYWthcm92ICA8dm1ha2Fyb3ZAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9yczYwMDAvc3lzdjQuaCAoQ0MxX1NQRUMpOiBGaXggY29ycmVjdCBudW1iZXJzIG9mIHt9LgoKVHVlIEphbiAxOSAwNjoyNjozMCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoY2NjcC5vLCBjcHBsaWIubyk6IERlcGVuZCBvbiBNYWtlZmlsZS4KCk1vbiBKYW4gMTggMDk6NTY6NDEgMTk5OSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogaW52b2tlLnRleGkgKEMrKyBEaWFsZWN0IE9wdGlvbnMpOiBEb2N1bWVudCAtZm5vLXJ0dGkuCgoxOTk5LTAxLTE4ICBWbGFkaW1pciBOLiBNYWthcm92ICA8dm1ha2Fyb3ZAY3lnbnVzLmNvbT4KCgkqICBpbnZva2UudGV4aSAoLW1jcHU9NzQwLCAtbWNwdT03NTApOiBOZXcgb3B0aW9ucy4KCSgtbShuby0pbXVsdGlwbGUsIC1tKG5vLSlzdHJpbmcpOiBEZXNjcmliZSBjYXNlcyBmb3IgUFBDNzQwICYKCVBQQzc1MC4KCjE5OTktMDEtMTggIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgoKCSogcnM2MDAwLmggKHtBU00sQ1BQfV9DUFVfU1BFQyk6IEFkZCBzdXBwb3J0IGZvciBhbGwgbWFjaGluZXMKCXN1cHBvcnRlZCB3aXRoIC1tY3B1PXh4eC4KCShwcm9jZXNzb3JfdHlwZSk6IEFkZCBQUk9DRVNTT1JfUFBDNzUwLgoJKEFESlVTVF9QUklPUklUWSk6IENhbGwgcnM2MDAwX2FkanVzdF9wcmlvcml0eS4KCShSVFhfQ09TVFMpOiBTdXBwbHkgY29zdHMgZm9yIDc1MCBtdWx0aXBseS9kaXZpZGUgb3BlcmF0aW9ucy4KCShyczYwMDBfYWRqdXN0X3ByaW9yaXR5KTogQWRkIGRlY2xhcmF0aW9uLgoKCSogcnM2MDAwLmMgKHJzNjAwMF9vdmVycmlkZV9vcHRpb25zKTogLW1jcHU9ezc1MCw3NDB9IG5vdyBzZXRzIHRoZQoJcHJvY2Vzc29yIHR5cGUgYXMgNzUwLCBub3QgNjAzLiAgQWxsb3cgLW1tdWx0aXBsZSBhbmQgLW1zdHJpbmcgb24KCWxpdHRsZSBlbmRpYW4gNzUwIHN5c3RlbXMuCgkocnM2MDAwX2FkanVzdF9wcmlvcml0eSk6IFN0dWIgZm9yIG5vdy4KCShnZXRfaXNzdWVfcmF0ZSk6IFRoZSBQb3dlclBDIDc1MCBjYW4gaXNzdWUgMiBpbnN0cnVjdGlvbnMvY3ljbGUuCgoJKiByczYwMDAubWQgKGZ1bmN0aW9uL2NwdSBhdHRyaWJ1dGVzKTogQWRkIGluaXRpYWwgcHBjNzUwIHN1cHBvcnQuCgoJKiBzeXN2NC5oIChTVFJJQ1RfQUxJR05NRU5UKTogRG9uJ3QgZm9yY2Ugc3RyaWN0IGFsaWdubWVudCBpZgoJbGl0dGxlIGVuZGlhbi4KCShDQzFfU1BFQyk6IFBhc3MgLW1zdHJpY3QtYWxpZ24gaWYgbGl0dGxlIGVuZGlhbiwgYW5kIG5vdAoJb3ZlcnJpZGRlbi4KCShDQzFfRU5ESUFOX3tMSVRUTEUsQklHLERFRkFVTFR9X1NQRUMpOiBFbmRpYW4gc3BlY2lmaWMgY29uZmlncy4KCShTVUJUQVJHRVRfRVhUUkFfU1BFQ1MpOiBBZGQgY2MxIGVuZGlhbiBzcGVjcy4KCgkqIHtzeXN2NCxlYWJpfWxlLmggKENDMV9FTkRJQU5fREVGQVVMVF9TUEVDKTogT3ZlcnJpZGUsIGRlZmF1bHQgaXMKCWxpdHRsZSBlbmRpYW4uCgoJKiB0LXBwY2dhcyAoTVVMVElMSUJfKik6IERlbGV0ZSBvYnNvbGV0ZSBTb2xhcmlzIG11bHRpbGlicy4KCk1vbiBKYW4gMTggMTI6MDM6MDggMTk5OSAgR2F2aW4gUm9taWctS29jaCAgPGdhdmluQGN5Z251cy5jb20+CgoJKiBjb25maWcvbWlwcy9taXBzLm1kIChkaXZfdHJhcCk6IFNwbGl0IGRpdl90cmFwX21pcHMxNgoJZnJvbSBkaXZfdHJhcC4KCShkaXZfdHJhcF9ub3JtYWwsZGl2X3RyYXBfbWlwczE2KTogQ29ycmVjdCB0aGUgbGVuZ3RoIGF0dHJpYnV0ZXMuCgpNb24gSmFuIDE4IDExOjQ4OjI4IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNwcGxpYi5jIChzcGVjaWFsX3N5bWJvbCk6IFF1YWxpZnkgYSBjaGFyKiB3aXRoIHRoZSBgY29uc3QnIGtleXdvcmQuCglJbnN0ZWFkIG9mIHdyaXRpbmcgdG8gY29uc3QgY2hhciAqYnVmIGRpcmVjdGx5LCB1c2UgYSBub24tY29uc3QKCXZhcmlhYmxlIGB3YnVmJyB0byBhbGxvY2F0ZSBhbmQgd3JpdGUgYSBzdHJpbmcsIHRoZW4gc2V0IGJ1ZiA9IHdidWYuCgoJKiBjcHB1bHAuYyAodXNlcl9sYWJlbF9wcmVmaXgpOiBRdWFsaWZ5IGEgY2hhciogd2l0aCB0aGUgYGNvbnN0JwoJa2V5d29yZC4KCgkqIGR5bi1zdHJpbmcuYyAoZHluX3N0cmluZ19hcHBlbmQpOiBMaWtld2lzZS4KCgkqIGR5bi1zdHJpbmcuaCAoZHluX3N0cmluZ19hcHBlbmQpOiBMaWtld2lzZS4KCgkqIGZpbmFsLmMgKGVuZF9maW5hbCwgb3V0cHV0X29wZXJhbmRfbG9zc2FnZSwgYXNtX2ZwcmludGYpOiBMaWtld2lzZS4KCgkqIG91dHB1dC5oIChlbmRfZmluYWwsIG91dHB1dF9vcGVyYW5kX2xvc3NhZ2UsIGFzbV9mcHJpbnRmLAoJbmFtZWRfc2VjdGlvbiwgZGVjb2RlX3JlZ19uYW1lLCBtYWtlX2RlY2xfcnRsLCB1c2VyX2xhYmVsX3ByZWZpeCk6CglMaWtld2lzZS4KCgkqIHByb2ZpbGUuYyAoaW5pdF9icmFuY2hfcHJvYik6IExpa2V3aXNlLgoKCSogdG9wbGV2LmMgKHNldF90YXJnZXRfc3dpdGNoLCB2bWVzc2FnZSwKCXZfbWVzc2FnZV93aXRoX2ZpbGVfYW5kX2xpbmUsIHZfbWVzc2FnZV93aXRoX2RlY2wsCgl2X2Vycm9yX3dpdGhfZmlsZV9hbmRfbGluZSwgdl9lcnJvcl93aXRoX2RlY2wsIHZfZXJyb3JfZm9yX2FzbSwKCXZlcnJvciwgdmZhdGFsLCB2X3dhcm5pbmdfd2l0aF9maWxlX2FuZF9saW5lLCB2X3dhcm5pbmdfd2l0aF9kZWNsLAoJdl93YXJuaW5nX2Zvcl9hc20sIHZ3YXJuaW5nLCB2cGVkd2Fybiwgdl9wZWR3YXJuX3dpdGhfZGVjbCwKCXZfcGVkd2Fybl93aXRoX2ZpbGVfYW5kX2xpbmUsIHZzb3JyeSwgdl9yZWFsbHlfc29ycnksCglvcGVuX2R1bXBfZmlsZSwgZHVtcF9ydGwsIGNsZWFuX2R1bXBfZmlsZSwKCXByaW50X3ZlcnNpb24sIHByaW50X3NpbmdsZV9zd2l0Y2gsIHByaW50X3N3aXRjaF92YWx1ZXMsCglkdW1wX2Jhc2VfbmFtZSwgZGVidWdfYXJncywgbGFuZ19pbmRlcGVuZGVudF9vcHRpb25zLAoJdXNlcl9sYWJlbF9wcmVmaXgsIGRvY3VtZW50ZWRfbGFuZ19vcHRpb25zLCB0YXJnZXRfc3dpdGNoZXMsCgl0YXJnZXRfb3B0aW9ucywgcHJpbnRfdGltZSwgcGZhdGFsX3dpdGhfbmFtZSwgZmF0YWxfaW9fZXJyb3IsCglmYXRhbF9pbnNuLCBkZWZhdWx0X3ByaW50X2Vycm9yX2Z1bmN0aW9uLCBwcmludF9lcnJvcl9mdW5jdGlvbiwKCXJlcG9ydF9lcnJvcl9mdW5jdGlvbiwgZXJyb3Jfd2l0aF9maWxlX2FuZF9saW5lLCBlcnJvcl93aXRoX2RlY2wsCgllcnJvcl9mb3JfYXNtLCBlcnJvciwgZmF0YWwsIHdhcm5pbmdfd2l0aF9maWxlX2FuZF9saW5lLAoJd2FybmluZ193aXRoX2RlY2wsIHdhcm5pbmdfZm9yX2FzbSwgd2FybmluZywgcGVkd2FybiwKCXBlZHdhcm5fd2l0aF9kZWNsLCBwZWR3YXJuX3dpdGhfZmlsZV9hbmRfbGluZSwgc29ycnksCglyZWFsbHlfc29ycnksIGJvdGNoLCBvdXRwdXRfcXVvdGVkX3N0cmluZywgb3V0cHV0X2ZpbGVfZGlyZWN0aXZlLAoJb3Blbl9kdW1wX2ZpbGUsIHJlc3Rfb2ZfZGVjbF9jb21waWxhdGlvbiwgZGlzcGxheV9oZWxwLCBtYWluKToKCUxpa2V3aXNlLgoKCSogdG9wbGV2LmggKHByaW50X3RpbWUsIGZhdGFsLCBmYXRhbF9pb19lcnJvciwgcGZhdGFsX3dpdGhfbmFtZSwKCWZhdGFsX2luc24sIHdhcm5pbmcsIGVycm9yLCBwZWR3YXJuLCBwZWR3YXJuX3dpdGhfZmlsZV9hbmRfbGluZSwKCXdhcm5pbmdfd2l0aF9maWxlX2FuZF9saW5lLCBlcnJvcl93aXRoX2ZpbGVfYW5kX2xpbmUsIHNvcnJ5LAoJcmVhbGx5X3NvcnJ5LCBkZWZhdWx0X3ByaW50X2Vycm9yX2Z1bmN0aW9uLCByZXBvcnRfZXJyb3JfZnVuY3Rpb24sCglyZXN0X29mX2RlY2xfY29tcGlsYXRpb24sIHBlZHdhcm5fd2l0aF9kZWNsLCB3YXJuaW5nX3dpdGhfZGVjbCwKCWVycm9yX3dpdGhfZGVjbCwgZXJyb3JfZm9yX2FzbSwgd2FybmluZ19mb3JfYXNtLCBvdXRwdXRfcXVvdGVkX3N0cmluZywKCW91dHB1dF9maWxlX2RpcmVjdGl2ZSwgYm90Y2gpOiBMaWtld2lzZS4KCgkqIHRyZWUuaCAobWFrZV9kZWNsX3J0bCk6IExpa2V3aXNlLgoKCSogdmFyYXNtLmMgKHN0cmlwX3JlZ19uYW1lLCBuYW1lZF9zZWN0aW9uLCBkZWNvZGVfcmVnX25hbWUsCgltYWtlX2RlY2xfcnRsKTogTGlrZXdpc2UuCgpNb24gSmFuIDE4IDExOjM1OjQ5IDE5OTkgIEdhdmluIFJvbWlnLUtvY2ggIDxnYXZpbkBjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKFRDTF9MSUJSQVJZKTogVXNlICdjZCcgdG8gZmluZCB0aGUgbGlicmFyeQoJZGlyZWN0b3J5IGxvZ2ljYWxseSByYXRoZXIgdGhhbiBwaHlzaWNhbGx5LgoKTW9uIEphbiAxOCAwOTowNTozNyAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBsb29wLmMgKGluc2VydF9iY3QpOiBIaWRlIHRoZSBkZWZpbml0aW9uIG9mIHZhcmlhYmxlcwoJYGluY3JlbWVudF9kaXJlY3Rpb24nLCBgY29tcGFyZV9kaXJlY3Rpb24nLCBgYWRkX2l0ZXJhdGlvbicgYW5kCglgbG9vcF92YXJfbW9kZScuCgoJKiByZWNvZy5jIChtb2RlX2RlcGVuZGVudF9hZGRyZXNzX3ApOiBNYXJrIHBhcmFtZXRlciBgYWRkcicgd2l0aAoJQVRUUklCVVRFX1VOVVNFRC4gIE1hcmsgbGFiZWwgYHdpbicgd2l0aCBBVFRSSUJVVEVfVU5VU0VEX0xBQkVMLgoJKG1vZGVfaW5kZXBlbmRlbnRfb3BlcmFuZCk6IE1hcmsgbGFiZWwgYGxvc2UnIHdpdGgKCUFUVFJJQlVURV9VTlVTRURfTEFCRUwuCgoJKiByZWdjbGFzcy5jIChuX29jY3VycmVuY2VzKTogUmVtb3ZlIHByb3RvdHlwZSBhbmQgZGVmaW5pdGlvbi4KCgkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHNfYWRkcmVzc18xKTogTWFyayB2YXJpYWJsZSBgdGVtJyB3aXRoCglBVFRSSUJVVEVfVU5VU0VELgoKCSogcmVsb2FkMS5jIChyZWxvYWQpOiBDYXN0IHRoZSBmaXJzdCB0d28gYXJndW1lbnRzIG9mIGBiY29weScgdG8gUFRSLgoKCSogc2JpdG1hcC5jIChzYml0bWFwX2NvcHkpOiBMaWtld2lzZS4KCgkqIHNjYW4tZGVjbHMuYyAoc2Nhbl9kZWNscyk6IEhpZGUgbGFiZWwgYGhhbmRsZV9jb21tYScuCgoJKiB0b3BsZXYuYyAob3V0cHV0X2xhbmdfaWRlbnRpZnkpOiBNYXJrIHByb3RvdHlwZSB3aXRoCglBVFRSSUJVVEVfVU5VU0VELgoKCSogdHJlZS5jIChtYWtlX25vZGUpOiBDYXN0IHRoZSBmaXJzdCBhcmd1bWVudCBvZiBgYnplcm8nIHRvIFBUUi4KCShtYWtlX3RyZWVfdmVjKTogTGlrZXdpc2UuCgkoYnVpbGQxKTogTGlrZXdpc2UuCgoJKiB2YXJhc20uYyAoYXNzZW1ibGVfc3RhdGljX3NwYWNlKTogTWFyayB2YXJpYWJsZSBgdGVtJyB3aXRoCglBVFRSSUJVVEVfVU5VU0VELgoKTW9uIEphbiAxOCAwNDoyODozNiAxOTk5ICBOYXRoYW4gU2lkd2VsbCAgPG5hdGhhbkBhY20ub3JnPgoKCSogTWFrZWZpbGUuaW4gKEdDT1ZfSU5TVEFMTF9OQU1FKTogTmV3IG1hY3JvLgoJKGluc3RhbGwtY29tbW9uKTogVXNlIGl0LgoJKHVuaW5zdGFsbCk6IFVzZSBpdC4KCSh1bmluc3RhbGwpOiBVc2UgY29ycmVjdCBuYW1lcyBmb3IgcHJvdG9pemUgYW5kIHVucHJvdG9pemUuCgpNb24gSmFuIDE4IDAzOjUyOjU2IDE5OTkgIENocmlzdGlhbiBCcnVlbCAgPENocmlzdGlhbi5CcnVlbEBzdC5jb20+CgkJCSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZmxvdy5jIChsYXN0X21lbV9zZXQpOiBEZWxldGUgdmFyaWFibGUuICBSZWZlcmVuY2VzIHJlbW92ZWQuCgkobWVtX3NldF9saXN0KTogTmV3IHZhcmlhYmxlLgoJKGxpZmVfYW5hbHlzaXMpOiBJbml0aWFsaXplIGFuZCBmaW5hbGl6ZSBhbGlhcyBhbmFseXNpcy4KCShwcm9wYWdhdGVfYmxvY2spOyBJbml0aWFsaXplIG1lbV9zZXRfbGlzdC4gIENsZWFyIGZvciBDQUxMX0lOU05zLgoJKGluc25fZGVhZF9wKTogRm9yIGEgc3RvcmUgdG8gbWVtb3J5LCBzZWFyY2ggdGhlIGVudGlyZSBtZW1fc2V0X2xpc3QKCWZvciBhIG1hdGNoLgoJKG1hcmtfc2V0XzEpOiBLaWxsIGVudHJpZXMgb24gdGhlIG1lbV9zZXRfbGlzdCBmb3IgYWxpYXNlZCB3cml0ZXMgb3IKCWNoYW5nZXMgdG8gdGhlaXIgYWRkcmVzc2VzLiAgQWRkIG5ldyBlbnRyaWVzIHRvIHRoZSBtZW1fc2V0X2xpc3QgZm9yCgltZW1vcnkgd3JpdGVzIHdyaXRlcy4KCShtYXJrX3VzZWRfcmVncyk6IEtpbGwgZW50cmllcyBvbiB0aGUgbWVtX3NldF9saXN0IHdoaWNoIG1heSBiZQoJcmVmZXJlbmNlZCBieSBhIGxvYWQgb3BlcmF0aW9uLgoKTW9uIEphbiAxOCAwMTowMTowMiAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBhbGlhcy5jIChiYXNlX2FsaWFzX2NoZWNrKTogQWRkIG1pc3NpbmcgcmV0dXJuIGZvciBkaWZmZXJpbmcKCXN5bWJvbHMgY2FzZS4KCk1vbiBKYW4gMTggMDA6MzY6MTMgMTk5OSAgUmFpbmVyIE9ydGggIDxyb0BUZWNoRmFrLlVuaS1CaWVsZWZlbGQuREU+CgoJKiBtaXBzLXRkdW1wLmMgKHByaW50X2ZpbGVfZGVzYyk6IEhhbmRsZSB1bmtub3duIGZpbGVuYW1lcyBhbmQKCW1pc3NpbmcgbG9jYWwgc3ltYm9scy4KClN1biBKYW4gMTcgMjE6MDQ6MzEgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGp1bXAuYyAocnR4X3JlbnVtYmVyZWRfZXF1YWxfcCk6IFNwZWNpYWwgY2FzZSBDT0RFX0xBQkVMLgoKCSogc3lzdGVtLmggKGJjb3B5KTogSW1wbGVtZW50IHdpdGggbWVtbW92ZSBub3QgbWVtY3B5LgoKU3VuIEphbiAxNyAxOToyMzoyMCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoY3BwdWxwLm8pOiBBZGQgZGVwZW5kZW5jaWVzLgoKCSogaTM4Ni5tZCAoaW50ZWdlciBjb25kaXRpb25hbCBtb3Zlcyk6IEFkZCBtaXNzaW5nIGVhcmx5Y2xvYmJlcnMuCgoJKiByZWdtb3ZlLmMgKG9wdGltaXplX3JlZ19jb3B5XzEpOiBVbmRvIEF1ZyAxOCBjaGFuZ2UuICBVcGRhdGUKCVJFR19OX0NBTExTX0NST1NTRUQgYW5kIFJFR19MSVZFX0xFTkdIIGlmIGFuZCBvbmx5IGlmIHdlIGNoYW5nZQoJd2hlcmUgYSByZWdpc3RlciBpcyBsaXZlLgoKU3VuIEphbiAxNyAwMzoyMDo0NyAxOTk5ICBILkouIEx1ICAoaGpsQGdudS5vcmcpCgoJKiByZWctc3RhY2suYyAoc3Vic3Rfc3RhY2tfcmVnc19wYXQpOiBBYm9ydCBpZiB0aGUgZGVzdGluYXRpb24KCW9mIGEgRlAgY29uZGl0aW9uYWwgbW92ZSBpcyBub3Qgb24gdGhlIEZQIHJlZ2lzdGVyIHN0YWNrLgoKU3VuIEphbiAxNyAwMToxNTowNCAxOTk5ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KClNhdCBKYW4gMTYgMjM6NDA6MzMgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcmVsb2FkMS5jIChyZWxvYWRfY3NlX3JlZ3NfMSk6IERvIG5vdCBjYWxsCglyZWxvYWRfY3NlX3NpbXBsaWZ5X29wZXJhbmRzIGZvciBhbiBpbnNuIHdpdGggYXNtIG9wZXJhbmRzLgoKCSogY2NjcC5jIChwcmludF9oZWxwKTogRml4IHR5cG9zLgoJKiBjcHBsaWIuYyAocHJpbnRfaGVscCk6IEZpeCB0eXBvcy4KCSogdG9wbGV2LmMgKGZfb3B0aW9zbik6IEZpeCB0eXBvcy4KCShkb2N1bWVudGVkX2xhbmdfb3B0aW9ucyk6IEZpeCB0eXBvcy4KClNhdCBKYW4gMTYgMjE6NDg6MTcgMTk5OSAgTWFyYyBFc3BpZSAgKE1hcmMuRXNwaWVAb3BlbmJzZC5vcmcpCgoJKiBnY2MuYyAoZG9fc3BlY18xKTogRml4IG9idmlvdXMgdHlwby4KClNhdCBKYW4gMTYgMTk6MzE6MDcgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogYy1kZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IElmIGB3YXJuX3RyYWRpdGlvbmFsJywgd2FybiB3aGVuCglhIG5vbi1zdGF0aWMgZnVuY3Rpb24gZGVjbGFyYXRpb24gZm9sbG93cyBhIHN0YXRpYyBvbmUuCgoJKiBpbnZva2UudGV4aSAoLVd0cmFkaXRpb25hbCk6IERvY3VtZW50IHRoZSBleHRyYSBjaGVjayBub3cgZG9uZQoJYnkgdGhpcyBmbGFnLgoKU2F0IEphbiAxNiAxNToxMzo0NiAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBwYS5tZCAoc2hhZGQpOiBDcmVhdGUgc2hhZGQgaW5zbnMsIGV2ZW4gaWYgdGhlIHJlc3VsdCBvZiB0aGUgc2hpZnQgaXMKCW5lZWRlZCB3aXRob3V0IHRoZSBhZGRpdGlvbi4KClNhdCBKYW4gMTYgMTA6NDg6MTYgMTk5OSAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHNoLm1kIChtb3ZkZiwgbW92c2YpOiBUZW1wb3Jhcnkgd29ya2Fyb3VuZCBmb3Igbm9fbmV3X3BzZXVkb3MgbG9zc2FnZS4KCkZyaSBKYW4gMTUgMjM6NDQ6MzcgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHNwYXJjLmMgKHNwYXJjX2lzc3VlKTogQWRkIGh5cGVyc3BhcmMvc3BhcmNsaXRlODZ4IGVudHJpZXMuCgpGcmkgSmFuIDE1IDIyOjMwOjA0IDE5OTkgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIHJzNjAwMC5oIChDT05TVF9PS19GT1JfTEVUVEVSX1ApOiBEbyBub3QgYXNzdW1lIDMyLWJpdCBDT05TVF9JTlQuCgkqIHJzNjAwMC5jICh1X3Nob3J0X2NpbnRfb3BlcmFuZCwgYWRkX29wZXJhbmQsIGxvZ2ljYWxfb3BlcmFuZCwKCW5vbl9hZGRfY2ludF9vcGVyYW5kLCBub25fbG9naWNhbF9jaW50X29wZXJhbmQpOiBMaWtld2lzZS4KCShnZXRfaXNzdWVfcmF0ZSk6IEFkZCBDUFVfUFBDNjA0RSBjYXNlLgoJKiByczYwMDAubWQgKG1vdmRpLCAhVEFSR0VUX1BPV0VSUEM2NCBzcGxpdHRlcnMpOiBIYW5kbGUgNjQtYml0IGhvc3RzLgoKRnJpIEphbiAxNSAxODo0MjoxMiAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZXhwci5jIChxdWV1ZWRfc3ViZXhwX3ApOiBNYWtlIHB1YmxpYy4KCSogZXhwci5oIChxdWV1ZWRfc3ViZXhwX3ApOiBEZWNsYXJlIGl0LgoJKiByZWNvZy5jIChhc21fb3BlcmFuZF9vayk6IE5ldyBmdW5jdGlvbi4KCShjaGVja19hc21fb3BlcmFuZHMpOiBVc2UgaXQuICBBZnRlciByZWxvYWQsIHVzZSBjb25zdHJhaW5fb3BlcmFuZHMKCWluc3RlYWQuCgkqIHJlY29nLmggKGFzbV9vcGVyYW5kX29rKTogRGVjbGFyZSBpdC4KCSogc3RtdC5jIChleHBhbmRfYXNtX29wZXJhbmRzKTogVXNlIGl0IHRvIHRyeSBoYXJkZXIgdG8gbWFrZQoJYXNtcyBpbml0aWFsbHkgc2F0aXNmeSB0aGVpciBjb25zdHJhaW50cy4KCkZyaSBKYW4gMTUgMTc6NDM6NTkgMTk5OSAgSmVmZnJleSBBLiBMYXcgIDxsYXdAcnRsLmN5Z251cy5jb20+CgoJKiBzcGFyYy5oIChMRUdJVElNSVpFX1JFTE9BRF9BRERSRVNTKTogRG8gbm90IGNyZWF0ZQoJKG1lbSAobG9fc3VtICguLi4pKSBmb3IgVEZtb2RlIHVubGVzcyBUQVJHRVRfVjkuCgpTYXQgSmFuIDE2IDEyOjQ3OjE1IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4Lm1kIChub3RfcmVwZWF0X3JlZyk6IEFsbG93IGxkcCBpbnN0cnVjdGlvbgoJaW4gZGVsYXkgc2xvdCBvZiBSUFRCRC4KClNhdCBKYW4gMTYgMTI6MjY6NDAgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9saWJnY2MuUyAoX19fZGl2aGkzLCBfX19tb2RoaTMpOiBGaXggbG9uZyBsb25nCglkaXZpZGUgYW5kIG1vZHVsbyBzaWduIHByb2JsZW0uCgpGcmkgSmFuIDE1IDExOjAyOjMxIDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIHVucm9sbC5jIChsb29wX2l0ZXJhdGlvbnMpOiBSZXR1cm4gMCBpZiB0aGUgbGFzdCBsb29wIGluc24KCWlzIG5vdCBhIGp1bXAgaW5zbiBvciBpZiB0aGUgbG9vcCBoYXMgbXVsdGlwbGUgYmFjayBlZGdlcy4KCjE5OTktMDEtMTUgIE1hbmZyZWQgSG9sbHN0ZWluICA8bWFuZnJlZEBzLWRpcmVrdG5ldC5kZT4KCgkqIGNvbmZpZ3VyZS5pbiAoZml4aW5jX2RlZnMpOiBEbyBub3QgZGVmaW5lIGZvciBtWzY4XThrLW1vdG9yb2xhLXN5c3Z7LDN9OwoJaXQncyB3b3JraW5nIHByb3Blcmx5IG5vdy4gIFJlbW92ZSBjb21tZW50IHNheWluZyAic2VlIG02OGstbW90b3JvbGEtc3lzdgoJYXMgYW4gZXhhbXBsZSIuCgkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZSB1c2luZyBhdXRvY29uZi4KCgkqIGZpeGluYy9maXhpbmNsLmMgKG1haW4pOiBEbyBub3QgaWdub3JlIFNJR0NITEQuCgpUaHUgSmFuIDE0IDIyOjM4OjQxIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHVucm9sbC5jIChmaW5kX3NwbGl0dGFibGVfZ2l2cyk6IEZvciBhIERFU1RfQUREUiBnaXYsIGRvIG5vdCBzaGFyZQoJYSByZWdpc3RlciB3aXRoIGFub3RoZXIgREVTVF9BRERSIGdpdiBpZiB0aGUgYWRkcmVzcyBpcyBub3QgdmFsaWQuCgoJKiBwYS5jIChocHBhX2V4cGFuZF9lcGlsb2d1ZSk6IFNhdmUgYW5kIHJlc3RvcmUgdGhlIHN0YXRpYyBjaGFpbgoJYXJvdW5kIHRoZSBjYWxsIHRvIG1jb3VudC4KCgkqIGg4MzAwLmggKEFTTV9PVVRQVVRfTEFCRUxSRUYpOiBVc2UgYXNtX2ZwcmludGYsIG5vdCBmcHJpbnRmLgoKCSogc3RtdC5jIChleHBhbmRfZW5kX2Nhc2UpOiBVc2UgZW1pdF9jbXBfYW5kX2p1bXBfaW5zbnMgdG8gYXZvaWQKCWdlbmVyYXRpbmcgbm9uLWNhbm9uaWNhbCBydGwuCgoxOTk5LTAxLTE0ICBWbGFkaW1pciBOLiBNYWthcm92ICA8dm1ha2Fyb3ZAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9pOTYwL2k5NjAuYyAoaTk2MF9vdXRwdXRfbW92ZV9kb3VibGVfemVybywKCWk5NjBfb3V0cHV0X21vdmVfcXVhZF96ZXJvKTogTmV3IGZ1bmN0aW9ucyBmb3IgbW92aW5nIHplcm9zLgoJKGk5NjBfb3V0cHV0X21vdmVfZG91YmxlLCBpOTYwX291dHB1dF9tb3ZlX3F1YWQpOiBBZGRpdGlvbmFsIGNvZGUKCWZvciBzaXR1YXRpb24gd2hlbiBtb3ZpbmcgdW5hbGlnbmVkIHJlZ2lzdGVyIGdyb3VwLgoKCSogY29uZmlnL2k5NjAvaTk2MC5oIChpOTYwX291dHB1dF9tb3ZlX2RvdWJsZV96ZXJvLAoJaTk2MF9vdXRwdXRfbW92ZV9xdWFkX3plcm8pOiBUaGUgZnVuY3Rpb24gZGVmaW5pdGlvbnMuCgoJKiBjb25maWcvaTk2MC9pOTYwLm1kIChtb3ZkaSsxLCBtb3Z0aSsxKTogVXNhZ2Ugb2YgdGhlIGZ1bmN0aW9ucy4KCjE5OTktMDEtMTMgIFZsYWRpbWlyIE4uIE1ha2Fyb3YgIDx2bWFrYXJvdkBjeWdudXMuY29tPgoKCSogY29uZmlnL2k5NjAvaTk2MC5jIChpOTYwX2Z1bmN0aW9uX3Byb2xvZ3VlKTogTmV3IGNvZGUgKG9wdGltYWwKCXNvbHV0aW9uKSBmb3Igc2F2aW5nIGdsb2JhbCByZWdpc3RlcnMgaW4gbG9jYWwgcmVnaXN0ZXJzLgoJKGZvcm1fcmVnX2dyb3VwcywgcmVnX2dyb3VwX2NvbXBhcmUsIHNwbGl0X3JlZ19ncm91cCk6IE5ldwoJZnVuY3Rpb25zIHVzZWQgYnkgdGhlIGNvZGUuCgkocmVnX2dyb3VwKTogTmV3IHN0cnVjdHVyZSBkZWZpbml0aW9uIGZvciB0aGUgbmV3IGNvZGUuCgoxOTk5LTAxLTEzICBNYW5mcmVkIEhvbGxzdGVpbiAgPG1hbmZyZWRAcy1kaXJla3RuZXQuZGU+CgoJKiBmaXhpbmMvZml4aW5jbC5jIChjcmVhdGVfZmlsZSk6IFBhc3MgZmlsZSBjcmVhdGlvbiBtYXNrIGFzCgl0aGlyZCBwYXJhbWV0ZXIgdG8gIm9wZW4iLiAgVXNlIE9fVFJVTkMgZmxhZyB0byBvcGVuIGluc3RlYWQgb2YKCWV4cGxpY2l0bHkgdW5saW5rJ2luZyB0aGUgZmlsZS4KCShwcm9jZXNzKTogYW5kIGZvcmdldCBhYm91dCB0aGUgImNobW9kIiBzdHVmZi4KCldlZCBKYW4gMTMgMjA6MTI6MzcgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGludGVncmF0ZS5jIChleHBhbmRfaW5saW5lX2Z1bmN0aW9uKTogUmVjb2duaXplIChtZW0gKGFkZHJlc3NvZikpCglhbmQgc3Vic3RpdHV0ZS4gIENvcHkgdGhlIHJldHVybiB2YWx1ZSBmcm9tIHRoZXJlIGludG8gYSBuZXcgcHNldWRvLgoKV2VkIEphbiAxMyAxNjo0NzowMCAxOTk5ICBDYXRoZXJpbmUgTW9vcmUgIDxjbG1AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9hcm0uYyAob3V0cHV0X2Z1bmNfZXBpbG9ndWUpOiBDaGVjayBUQVJHRVRfQUJPUlRfTk9SRVRVUk4KCWJlZm9yZSBnZW5lcmF0aW5nIGEgY2FsbCB0byBhYm9ydCBmb3Igdm9sYXRpbGUgZnVuY3Rpb25zLgoJKiBjb25maWcvYXJtLmggKEFSTV9GTEFHX0FCT1JUX05PUkVUVVJOKTogRGVmaW5lLgoJKFRBUkdFVF9BQk9SVF9OT1JFVFVSTik6IERlZmluZS4KCShhYm9ydC1vbi1ub3JldHVybik6IE5ldyBvcHRpb24uCgpUaHUgSmFuIDE0IDEzOjUyOjQyIDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4Lm1kIChpbl9hbm51bF9zbG90XzMpOiBDb3JyZWN0bHkgYWxsb3cgdW5hcnljYwoJYW5kIGJpbmFyeWNjIG9wZXJhdGlvbnMgaW4gM3JkIGFubnVsbGVkIGRlbGF5IHNsb3QhCgpXZWQgSmFuIDEzIDE2OjE2OjQ0IDE5OTkgIENhdGhlcmluZSBNb29yZSAgPGNsbUBjeWdudXMuY29tPgoKCSogY29uZmlnL2FybS5jIChvdXRwdXRfZnVuY19lcGlsb2d1ZSk6IENoZWNrIFRBUkdFVF9BQk9SVF9OT1JFVFVSTgoJYmVmb3JlIGdlbmVyYXRpbmcgYSBjYWxsIHRvIGFib3J0IGZvciB2b2xhdGlsZSBmdW5jdGlvbnMuCgkqIGNvbmZpZy9hcm0uaCAoQVJNX0ZMQUdfQUJPUlRfTk9SRVRVUk4pOiBEZWZpbmUuCgkoVEFSR0VUX0FCT1JUX05PUkVUVVJOKTogRGVmaW5lLgoJKGFib3J0LW9uLW5vcmV0dXJuKTogTmV3IG9wdGlvbi4KCldlZCBKYW4gMTMgMTM6MzA6MDggMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY2NjcC5jICh4c3RyZHVwKTogUmVuYW1lZCBmcm9tIGBzYXZlc3RyaW5nJy4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCglSZW1vdmUgcHJvdG90eXBlIHdoaWNoIHdlIGdldCBmcm9tIGxpYmliZXJ0eS5oLgoKCSogY29sbGVjdDIuYyAoeHN0cmR1cCk6IExpa2V3aXNlLgoKCSogZ2VuZXh0cmFjdC5jICh4c3RyZHVwKTogTGlrZXdpc2UgZm9yIGBjb3B5c3RyJy4KCShteWJ6ZXJvKTogUmVtb3ZlIGl0IGFuZCB1c2UgYG1lbXNldCcgaW5zdGVhZC4KCgkqIGdlbm91dHB1dC5jIChteWJjb3B5LCBteWJ6ZXJvKTogUmVtb3ZlIHRoZXNlLiAgQWxsIGNhbGxlcnMgY2hhbmdlZAoJdG8gdXNlIGBtZW1jcHknIGFuZCBgbWVtc2V0JyBpbnN0ZWFkLgoKCSogZ2VucmVjb2cuYyAoeHN0cmR1cCk6IFJlbmFtZWQgZnJvbSBgY29weXN0cicuICBBbGwgY2FsbGVycwoJY2hhbmdlZC4gIFJlbW92ZSBwcm90b3R5cGUuCgkobXliY29weSwgbXliemVybyk6IFJlbW92ZSB0aGVzZSBhbmQgdXNlIG1lbWNweS9tZW1zZXQuCgpXZWQgSmFuIDEzIDAwOjU5OjA0IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIG1pcHMuaCAoTE9BRF9FWFRFTkRfT1ApOiBDb3JyZWN0IGZvciBTSW1vZGUgYW5kIENDbW9kZSBtb3ZlcyB3aGVuCglnZW5lcmF0aW5nIGNvZGUgZm9yIFRBUkdFVF82NEJJVC4KClR1ZSBKYW4gMTIgMTQ6MDU6MzcgMTk5OSAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogcnM2MDAwLmMgKHByaW50X29wZXJhbmQsIGNhc2VzICdtJyBhbmQgJ00nKTogRG8gbm90IGRlcGVuZCBvbgoJSE9TVF9XSURFX0lOVCB3b3JkLXNpemUuCgkocnM2MDAwX3N0YWNrX2luZm8pOiBSZW1vdmUgcmVkdW5kYW50IGFsaWdubWVudCBvZiBmcG1lbS4KClR1ZSBKYW4gMTIgMTQ6MDU6MzcgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHJzNjAwMC5jIChzaG9ydF9jaW50X29wZXJhbmQpOiBSZW1vdmUgQ09OU1RBTlRfUF9SVFggaGFuZGxpbmcuCgkodV9zaG9ydF9jaW50X29wZXJhbmQsIHJlZ19vcl9jaW50X29wZXJhbmQsIGxvZ2ljYWxfb3BlcmFuZCk6IExpa2V3aXNlLgoJKGlucHV0X29wZXJhbmQpOiBBZGp1c3QgQ09OU1RBTlRfUF9SVFggaGFuZGxpbmcuCgkqIHJzNjAwMC5oIChQUkVESUNBVEVfQ09ERVMpOiBSZW1vdmUgQ09OU1RBTlRfUF9SVFggcmVmZXJlbmNlcy4KCSogcnM2MDAwLm1kIChtb3ZzaSk6IEFkanVzdCBDT05TVEFOVF9QX1JUWCBoYW5kbGluZy4KCShtb3ZoaSwgbW92cWkpOiBSZW1vdmUgQ09OU1RBTlRfUF9SVFggaGFuZGxpbmcuCgkobW92ZGkpOiBBZGp1c3QgQ09OU1RBTlRfUF9SVFggaGFuZGxpbmcuCgoxOTk5LTAxLTEyICBNYW5mcmVkIEhvbGxzdGVpbiAgPG1hbmZyZWRAcy1kaXJla3RuZXQuZGU+CgoJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUgdXNpbmcgYXV0b2NvbmYuCgoJKiBmaXhpbmMvTWFrZWZpbGUuaW4gKElOQ0xVREVTKTogQWRkIC1JJChzcmNkaXIpLy4uLy4uL2luY2x1ZGUuCgkqIGZpeGluYy9maXhpbmNsLmMgKFNJR0NITEQpOiBVc2UgU0lHQ0xEIG9uICh2ZXJ5KSBvbGQgc3lzdGVtcy4KCShwcm9jZXNzKTogImZjaG1vZCIgaXNuJ3QgYXZhaWxhYmxlIG9uIGFsbCBzeXN0ZW1zLCB1c2UgImNobW9kIgoJaW5zdGVhZC4KCSogZml4aW5jL3NlcnZlci5jOiBBZGQgI2luY2x1ZGUgPHN5cy90eXBlcy5oPi4KCShTVERJTl9GSUxFTk8pOiBBZGQgZGVmYXVsdCBkZWZpbml0aW9uIGlmIG5vIGluY2x1ZGUgZmlsZSBkZWZpbmVzCglpdCBhbHJlYWR5LgoJKFNURE9VVF9GSUxFTk8pOiBMaWtld2lzZS4KClR1ZSBKYW4gMTIgMTA6MjM6MjQgMTk5OSAgU3RhbiBDb3ggIDxzY294QGN5Z251cy5jb20+CgoJKiBtaXBzLm1kIChjYWxsX3ZhbHVlX2ludGVybmFsM2MpOiBOZXcgcGF0dGVybiBmb3IgLW1pcHMxNiAtbWxvbmctY2FsbHMuCgoxOTk5LTAxLTEyICBNYW5mcmVkIEhvbGxzdGVpbiAgPG1hbmZyZWRAcy1kaXJla3RuZXQuZGU+CgoJKiBtNjhrL21vdDMzMDAuaCAoQUREX01JU1NJTkdfUE9TSVgsIEFERF9NSVNTSU5HX1hPUEVOKTogRGVmaW5lIHRvCgllbnN1cmUgYWxsIHByb3RvdHlwZXMgbmVjZXNzYXJ5IGZvciBidWlsZGluZyBsaWJpbyB3aWxsIGJlIGF2YWlsYWJsZS4KCSogbTY4ay94bS1tb3QzMzAwLmggKEFERF9NSVNTSU5HX1BPU0lYLCBBRERfTUlTU0lOR19YT1BFTik6IFJlbW92ZQoJZGVmaW5pdGlvbnMgaGVyZSBhcyB0aGV5IGFyZSBub3QgaG9zdCBzcGVjaWZpYy4KCSogbTg4ay9zeXN2My5oLCBtODhrL3htLXN5c3YzLmg6IExpa2V3aXNlLgoKVHVlIEphbiAxMiAwMjo1Mzo0NiAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogY3NlLmMgKGNzZV9pbnNuKTogTmV2ZXIgcHJlZmVyIChjb25zdCAoY29uc3RhbnRfcF9ydHgpKS4KClR1ZSBKYW4gMTIgMDI6MzY6MTAgMTk5OSAgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpUdWUgSmFuIDEyIDAxOjMwOjE5IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBydGwuYyAocnR4X2FsbG9jKTogVXNlIG1lbXNldCBpbnN0ZWFkIG9mIGlubGluZSBsb29wLgoKCSogcmVjb2cuaCAocmVjb2dfb3BfYWx0KTogRGVjbGFyZSBleHRlcm4uCgpUdWUgSmFuIDEyIDAwOjIzOjMxIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBmdW5jdGlvbi5jIChwdXJnZV9hZGRyZXNzb2ZfMSk6IElmIHRoZSBub3RlIGFjY2Vzc2VzIGEgbWVtK2FkZHJlc3NvZgoJaW4gYSB3aWRlciBtb2RlIHRoYW4gYW55IHJlcGxhY2VtZW50LCBhZGp1c3QgdGhlIGNhY2hlZCByZXBsYWNlbWVudC4KCUNhY2hlIHRyaXZpYWwgc3Vic3RpdHV0aW9ucyBhcyB3ZWxsLgoKVHVlIEphbiAxMiAwMDowNjowMCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKE9CSkVDVFMpOiBBZGQgc2JpdG1hcC5vLgoJKEJBU0lDX0JMT0NLX0gpOiBBZGQgc2JpdG1hcC5oLgoJKiBiYXNpYy1ibG9jay5oOiBNb3ZlIHNpbXBsZSBiaXRtYXAgY29kZSB0byBzYml0bWFwLmguCgkqIGZsb3cuYzogTW92ZSBzaW1wbGUgYml0bWFwIGNvZGUgdG8gc2JpdG1hcC5jLgoJKiBzYml0bWFwLmgsIHNiaXRtYXAuYzogTmV3IGZpbGVzLgoKTW9uIEphbiAxMSAyMzo1MTo1MCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEuaCAoVEFSR0VUX1NXSVRDSEVTKTogRG9jdW1lbnQgc3dpdGNoZXMuCgkoVEFSR0VUX09QVElPTlMpOiBMaWtld2lzZS4KCgkqIGFscGhhL2VsZi5oIChBU01fRklOSVNIX0RFQ0xBUkVfT0JKRUNUKTogVXNlIEhPU1RfV0lERV9JTlRfUFJJTlRfREVDLgoKTW9uIEphbiAxMSAyMjo1NDoxNCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogdHJlZS5jIChuZXdfYWxpYXNfc2V0KTogUmV0dXJuIHplcm8gaWYgIWZsYWdfc3RyaWN0X2FsaWFzaW5nLgoKTW9uIEphbiAxMSAyMjozNjowMSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYmFzaWMtYmxvY2suaCAoYmFzaWNfYmxvY2tfaGVhZCk6IFJlbmFtZSB0byB4X2Jhc2ljX2Jsb2NrX2hlYWQuCgkoYmFzaWNfYmxvY2tfZW5kKTogUmVuYW1lIHRvIHhfYmFzaWNfYmxvY2tfZW5kLgoJKEJMT0NLX0hFQUQsIEJMT0NLX0VORCk6IFVwZGF0ZS4KCgkqIGNhbGxlci1zYXZlLmM6IENoYW5nZSBiYXNpY19ibG9ja19oZWFkL2VuZCByZWZlcmVuY2VzIHRvCglCTE9DS19IRUFEL0VORC4KCSogY29tYmluZS5jLCBmbG93LmMsIGZ1bmN0aW9uLmMsIGdjc2UuYywgZ2xvYmFsLmM6IExpa2V3aXNlLgoJKiBncmFwaC5jLCBoYWlmYS1zY2hlZC5jLCBsb2NhbC1hbGxvYy5jLCByZWdjbGFzcy5jOiBMaWtld2lzZS4KCSogcmVnbW92ZS5jLCByZWxvYWQxLmMsIHJlb3JnLmMsIHNjaGVkLmM6IExpa2V3aXNlLgoKU2F0IEphbiAgOSAyMzo1NDowOSAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBnY2MuYyAoeHN0cmVycm9yKTogUmVuYW1lZCBmcm9tIG15X3N0cmVycm9yLiAgQWxsIGNhbGxlcnMKCWNoYW5nZWQuICBSZW1vdmUgcHJvdG90eXBlIHNpbmNlIHdlIGdldCB0aGF0IGZyb20gbGliaWJlcnR5LmguCgoJKiBwcm90b2l6ZS5jICh4c3RyZXJyb3IpOiBMaWtld2lzZS4KClNhdCBKYW4gIDkgMjM6MjI6MDQgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogZ2NjLmMgKHJlYWRfc3BlY3MpOiBFbnN1cmUgZm9ybWF0IHNwZWNpZmllcnMgbWF0Y2ggdGhlaXIgYXJndW1lbnRzLgoKU2F0IEphbiAgOSAyMDowNDoyNCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogdHJlZS5jIChjb3B5X25vZGUpOiBPb3BzLiAgVGhhdCB3b3VsZCBiZSBjb3B5IG5vdCB6ZXJvCglpbiB0aGF0IGxhc3QgY2hhbmdlLgoKU3VuIEphbiAxMCAxNTozNTo0MSAxOTk5ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWcvYzR4L2M0eC5jOiBJbmNsdWRlIHN5c3RlbS5oLgoJKGM0eF9jYWxsZXJfc2F2ZV9tYXApOiBEaXNhYmxlIGNhbGxlciBzYXZlIGZvciBSQy4KCShjNHhfb3B0aW1pemF0aW9uX29wdGlvbnMpOiBEaXNhYmxlIHNjaGVkdWxpbmcgYmVmb3JlIHJlbG9hZC4KCSh2YWxpZF9wYXJhbGxlbF9sb2FkX3N0b3JlKSA6IERlZmluZSByZXR1cm4gdHlwZSBhcyBpbnQuCglSZW1vdmUgdW51c2VkIHZhcmlhYmxlIHJlZ3MuCgkqIGNvbmZpZy9jNHgvYzR4LmggKFJFR0lTVEVSX01PVkVfQ09TVCk6IE1ha2UgaW5kZXBlbmRlbnQgb2YgcmVnaXN0ZXIKCWNsYXNzLgoJKiBjb25maWcvYzR4L2M0eC5tZCAocm90bHFpMywgcm90cnFpMyk6IEZpeCB1cCBlbWl0dGVkIFJUTCB0bwoJaGFuZGxlIHJvdGF0aW9ucy4KCSgqZGIsIGRlY3JlbWVudF9hbmRfYnJhbmNoX3VudGlsX3plcm8pOiBGaXggdXAgY29uc3RyYWludHMKCXRvIGtlZXAgcmVsb2FkIGhhcHB5LgoKU2F0IEphbiAgOSAxODozNToyOSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogdHJlZS5jIChtYWtlX25vZGUpOiBDYWxsIGJ6ZXJvIGluc3RlYWQgb2YgaW5saW5lIGNsZWFyLgoJKGNvcHlfbm9kZSwgbWFrZV90cmVlX3ZlYywgYnVpbGQxKTogTGlrZXdpc2UuCgkoZ2V0X2lkZW50aWZpZXIpOiBDYWxsIHN0cmxlbiBpbnN0ZWFkIG9mIGlubGluZSBjb3VudC4KCShtYXliZV9nZXRfaWRlbnRpZmllcik6IExpa2V3aXNlLgoKU3VuIEphbiAxMCAxNDowNDo1MSAxOTk5ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWcvYzR4L2M0eC5tZCAoaW5fYW5udWxfc2xvdF8zKTogQWxsb3cgdW5hcnljYyBhbmQgYmluYXJ5Y2MKCW9wZXJhdGlvbnMgaW4gM3JkIGFubnVsbGVkIGRlbGF5IHNsb3QuCgkoKmxzaHJxaTNfY29uc3Rfc2V0KTogRGlzYWxsb3cgYyBjb25zdHJhaW50IGZvciBvcGVyYW5kMC4KCShtb2RoaTMrMSwgbW9kaGkzKzIpOiBTZXQgYXR0cmlidXRlIHR5cGUgdG8gbXVsdGkuCgkqIGNvbmZpZy9jNHgvYzR4LmMgKGM0eF9TX2NvbnN0cmFpbnQpOiBSZW1vdmVkIHNwYWNlIGluIG1pZGRsZSBvZgoJIT0gb3BlcmF0b3IuCgpTYXQgSmFuICA5IDExOjQ0OjU1IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGdhbnNpZGVjbC5oOiBBbGxvdyBhdHRyaWJ1dGUgdW51c2VkIG9uIGxhYmVscyBvbmx5IHdoZW4gd2UgYXJlCgl2ZXJzaW9uIDIuOTMgb3IgaGlnaGVyLiAgTm90IGFsbCB2ZXJzaW9ucyBvZiAyLjkyIGhhdmUgdGhpcyBmZWF0dXJlLgoKCSogdmVyc2lvbi5jOiBCdW1wIG1pbm9yIG51bWJlciB0byA5My4KCkZyaSBKYW4gIDggMTA6NTE6MTMgMTk5OSAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uY3MudW5pLWRvcnRtdW5kLmRlPgoKCSogY29uZmlnL202OGsvbTY4ay5oOiBEZWNsYXJlIG91dHB1dF9mdW5jdGlvbl9lcGlsb2d1ZS4KCSogcmVjb2cuaDogRGVjbGFyZSBuZXh0X2luc25fdGVzdHNfbm9faW5lcXVhbGl0eS4KCkZyaSBKYW4gIDggMDE6NDM6NTMgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogc3RtdC5jIChvcHRpbWl6ZV90YWlsX3JlY3Vyc2lvbik6IE5ldyBmdW5jdGlvbiwgZXh0cmFjdGVkIGZyb20gLi4uCgkoZXhwYW5kX3JldHVybik6IFVzZSBvcHRpbWl6ZV90YWlsX3JlY3Vyc2lvbi4KCSogdHJlZS5oIChvcHRpbWl6ZV90YWlsX3JlY3Vyc2lvbik6IERlY2xhcmUuCgoJKiB0b3BsZXYuYyAoY29tcGlsZV9maWxlKTogTW92ZSBjYWxsIHRvIG91dHB1dF9mdW5jX3N0YXJ0X3Byb2ZpbGVyCgl0byBhZnRlciB0aGUgbG9vcCB0byBlbWl0IGRlZmVycmVkIGZ1bmN0aW9ucy4KClRodSBKYW4gIDcgMTk6NTI6NTMgMTk5OSAgR2VyYWxkIFBmZWlmZXIgIDxwZmVpZmVyQGRiYWkudHV3aWVuLmFjLmF0PgoKCSogc3lzdGVtLmggKGFib3J0KTogU3VwcGx5IG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gaG93IHRvCglyZXBvcnQgYW4gSW50ZXJuYWwgQ29tcGlsZXIgRXJyb3IuCgpUaHUgSmFuICA3IDA5OjI1OjU4IDE5OTkgIEJydWNlIEtvcmIgIChrb3JiQGRhdGFkZXNpZ24uY29tKQoKCSogZml4aW5jL2ZpeGluY2wuYyAoKik6IE1vcmUgZGVjYXBpdGFsaXphdGlvbiBvZiB2YXJpYWJsZXMKCXBsdXMgc29tZSBleHBsYW5hdG9yeSBjb21tZW50cy4KCgkqIGZpeGluYy9NYWtlZmlsZS5pbiBmaXhpbmMvbWtmaXhpbmMuc2g6CglXaGVuIHRoZSBmaXhpbmNsIHByb2dyYW0gZG9lcyBub3Qgd29yayBmb3IgYSBjZXJ0YWluIHN5c3RlbSwKCXdlIHN1YnN0aXR1dGUgYSBzaGVsbCBzY3JpcHQuICBBZGRlZCB1c2VyIGNvbW1lbnRhcnkgd2hlbgoJdGhpcyBoYXBwZW5zLgoKVGh1IEphbiAgNyAxMToyNjoxNyAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY2FsbHMuYyAoc3RvcmVfdW5hbGlnbmVkX2FyZ3VtZW50c19pbnRvX3BzZXVkb3MpOiBVc2UgeG1hbGxvYyB0bwoJYWxsb2NhdGUgbWVtb3J5IHRoYXQgd2lsbCBsaXZlIGJleW9uZCB0aGlzIGZ1bmN0aW9uLgoJKGV4cGFuZF9jYWxsKTogRnJlZSBpdCBoZXJlLgoKVGh1IEphbiAgNyAwMzowODoxNyAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogc3BhcmMuaCAoUFJFRkVSUkVEX1JFTE9BRF9DTEFTUyk6IFNlbGVjdCBHRU5FUkFMX1JFR1MgZm9yCglpbnRlZ2VyIGRhdGEgbm90IGRlc3RpbmVkIGZvciBmcCByZWdzLgoJKExFR0lUSU1JWkVfUkVMT0FEX0FERFJFU1MpOiBOZXcuCgpUaHUgSmFuICA3IDAzOjAzOjQyIDE5OTkgIFN0YW4gQ294ICA8c2NveEBjeWdudXMuY29tPgoJCQkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJU3VwcG9ydCBmb3IgSHlwZXJzcGFyYyBhbmQgU3BhcmNsaXRlODZ4OgoJKiBzcGFyYy5oIChUQVJHRVRfQ1BVX2h5cGVyc3BhcmMsIFRBUkdFVF9DUFVfc3BhcmNsaXRlODZ4KTogTmV3LgoJKENQUF9DUFUzMl9ERUZBVUxUX1NQRUMpOiBGaXggdXAgZm9yIHRoZSBuZXcgdGFyZ2V0cy4KCShBU01fQ1BVMzJfREVGQVVMVF9TUEVDKTogTGlrZXdpc2UuCgkoVEFSR0VUX0NQVV9ERUZBVUxUKTogTGlrZXdpc2UuCgkoZW51bSBwcm9jZXNzb3JfdHlwZSk6IExpa2V3aXNlLgoJKENQUF9FTkRJQU5fU1BFQyk6IEhhbmRsZSBsaXR0bGUgZW5kaWFuIGRhdGEuCgkoTElCR0NDMl9XT1JEU19CSUdfRU5ESUFOKTogTGlrZXdpc2UuCgkoQURKVVNUX0NPU1QpOiBDYWxsIHNwYXJjX2FkanVzdF9jb3N0LgoJKiBzcGFyYy5jIChzcGFyY19vdmVycmlkZV9vcHRpb25zKTogRml4IHVwIGZvciB0aGUgbmV3IHRhcmdldHMuCgkoc3VwZXJzcGFyY19hZGp1c3RfY29zdCk6IE1ha2Ugc3RhdGljLgoJKGh5cGVyc3BhcmNfYWRqdXN0X2Nvc3QpOiBOZXcuCgkodWx0cmFzcGFyY19hZGp1c3RfY29zdCk6IE1ha2Ugc3RhdGljLgoJKHNwYXJjX2FkanVzdF9jb3N0KTogTmV3LgoJKiBzcGFyYy5tZCAoYXR0ciBjcHUpOiBBZGQgaHlwZXJzcGFyYyBhbmQgc3BhcmNsaXRlODZ4LgoJKGZ1bmN0aW9uX3VuaXQpOiBBZGQgaHlwZXJzcGFyYyBzY2hlZHVsaW5nIHJ1bGVzLgoKCSogY29uZmlndXJlLmluICh3aXRoX2NwdSBoYW5kbGVyKTogUmVjb2duaXplIGh5cGVyc3BhcmMuCgpUaHUgSmFuICA3IDIzOjU0OjA1IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4LmM6IEFkZGVkIHNwYWNlIGFmdGVyIG5lZ2F0aW9uIG9wZXJhdG9yLgoJKiBjb25maWcvYzR4L2M0eC5oOiBMaWtld2lzZS4KCSogY29uZmlnL2M0eC9jNHgubWQ6IExpa2V3aXNlLgoKVGh1IEphbiAgNyAyMzozOToyNyAxOTk5ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWcvYzR4L2M0eC5jIChjNHhfcHJlZmVycmVkX3JlbG9hZF9jbGFzcyk6IEFsd2F5cyByZXR1cm4gY2xhc3MuCgpUaHUgSmFuICA3IDAwOjI5OjI1IDE5OTkgIEJlcm5kIFNjaG1pZHQgIDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCgkqIGNvbWJpbmUuYyAobnVtX3NpZ25fYml0X2NvcGllcyk6IEluIE5FRywgTVVMVCwgRElWIGFuZCBNT0QgY2FzZXMsCgl3aGVuIGEgdGVzdCBjYW4ndCBiZSBwZXJmb3JtZWQgZHVlIHRvIGxpbWl0ZWQgd2lkdGggb2YKCUhPU1RfQklUU19QRVJfV0lERV9JTlQsIHVzZSB0aGUgbW9yZSBjb25zZXJ2YXRpdmUgYXBwcm94aW1hdGlvbi4KCUZpeCBVRElWIGNhc2UgZm9yIGNhc2VzIHdoZXJlIHRoZSBmaXJzdCBvcGVyYW5kIGhhcyB0aGUgaGlnaGVzdCBiaXQKCXNldC4KClRodSBKYW4gIDcgMDA6MDE6MzggMTk5OSAgTHV0eiBWaWV3ZWcgIDxsa3ZAbWFuaWEucm9iaW4uZGU+CgoJKiBwYS5oIChyZWdfY2xhc3MpOiBBZGQgRlBVUFBFUl9SRUdTLgoJKFJFR19DTEFTU19OQU1FUyk6IFNpbWlsYXJseS4KCShSRUdfQ0xBU1NfQ09OVEVOVFMpOiBTaW1pbGFybHkuCgkoUkVHTk9fUkVHX0NMQVNTKTogSGFuZGxlIEZQVVBQRVJfUkVHUy4KCShGUF9SRUdfQ0xBU1NfUCk6IExpa2V3aXNlLgoJKFJFR19DTEFTU19GUk9NX0xFVFRFUik6IFNpbWlsYXJseS4KCShDTEFTU19NQVhfTlJFR1MpOiBTaW1pbGFybHkuCgoxOTk5LTAxLTA2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBjeWdudXMuY29tPgoKCSogZml4aW5jbHVkZXM6IEZvciBIUC9VWCAxMC4yMCwgYWxzbyBsb29rIGluIGN1cnNlc19jb2xyL2N1cnNlcy5oCglmb3IgYSB0eXBlZGVmIG9mIGJvb2wuICBNYWtlIHN1cmUgdG8gaGF2ZSBhIGNvcHkgb2YgdGhlIGZpbGUgaXMKCWluIHBsYWNlIGJlZm9yZSB3ZSBsb29rIHRvIGZpeCBpdC4gIEZpeCB0eXBvIGluIHZhcmlhYmxlIG5hbWUgdG8KCUZJTEUuCgpXZWQgSmFuICA2IDA3OjUxOjA1IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBleHByLmMgKGV4cGFuZF9idWlsdGluKSBbY2FzZSBCVUlMVF9JTl9DT05TVEFOVF9QXTogVXNlCgl2YWx1ZV9tb2RlIGZvciB0aGUgcmV0dXJuIG1vZGUuCgpXZWQgSmFuICA2IDE3OjU1OjE5IDE5OTkgIFJvYmVydCBMaXBlICA8cm9iZXJ0bGlwZUB1c2EubmV0PgoKCSogY29uZmlndXJlLmluOiBOZXcgZmxhZyAtLXdpdGgtZHdhcmYyLiAgSWYgc2V0LCBlbmFibGVzIERXQVJGLTIKCWRlYnVnZ2luZyBhcyBkZWZhdWx0LgoKCSogY29uZmlnL3RtLWR3YXJmMi5oOiBOZXcgZmlsZS4KCldlZCBKYW4gIDYgMTY6MDg6NTQgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogaDgzMDAuaCAoQVNNX09VVFBVVF9MQUJFTFJFRik6IERlZmluZS4KCgkqIHBhLmggKERPTlRfUkVDT1JEX0VRVUlWQUxFTkNFKTogS2lsbC4KCSogbG9jYWwtYWxsb2MuYyAodXBkYXRlX2VxdWl2X3JlZ3MpOiBDb3JyZXNwb25kaW5nIGNoYW5nZXMuCgkqIHRtLnRleGkgKERPTlRfUkVDT1JEX0VRVUlWQUxFTkNFKTogS2lsbC4KCgkqIGNhbGxzLmMgKHNwZWNpYWxfZnVuY3Rpb25fcCk6IFB1c2ggYWxsb2NhIHRlc3QgaW5zaWRlIHRoZSBsYXJnZQoJY29uZGl0aW9uYWwgd2hpY2ggZXhjbHVkZXMgZnVuY3Rpb25zIG5vdCBhdCBmaWxlIHNjb3BlIG9yIG5vdAoJZXh0ZXJuLgoKCSogY2FsbHMuYyAoc3BlY2lhbF9mdW5jdGlvbl9wKTogTmV3IGZ1bmN0aW9uIGJyb2tlbiBvdXQgb2YKCWV4cGFuZF9jYWxsLgoJKHByZWNvbXB1dGVfcmVnaXN0ZXJfcGFyYW1ldGVycyk6IExpa2V3aXNlLgoJKHN0b3JlX29uZV9hcmcpOiBMaWtld2lzZS4KCShzdG9yZV91bmFsaWduZWRfYXJndW1ldG5zX2ludG9fcHNldWRvcyk6IExpa2V3aXNlLgoJKHNhdmVfZml4ZWRfYXJndW1lbnRfYXJlYSk6IExpa2V3aXNlLgoJKHJlc3RvcmVfZml4ZWRfYXJndW1lbnRfYXJlYSk6IExpa2V3aXNlLgoJKGV4cGFuZF9jYWxsKTogQ29ycmVzcG9uZGluZyBjaGFuZ2VzLgoKVGh1IEphbiAgNyAwMDoxMjoyNCAxOTk5ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWcvYzR4L2M0eC5tZCAoYWRkcWkzKTogSWYgdGhlIGRlc3RpbmF0aW9uIG9wZXJhbmQgaXMKCWEgaGFyZCByZWdpc3RlciBvdGhlciB0aGFuIGFuIGV4dGVuZGVkIHByZWNpc2lvbiByZWdpc3RlciwKCWVtaXQgYWRkcWkzX25vY2xvYmJlci4KCSgqYWRkcWkzX25vY2xvYmJlcl9yZWxvYWQpOiBOZXcgcGF0dGVybiBhZGRlZCBzbyB0aGF0IHJlbG9hZAoJd2lsbCByZWNvZ25pemUgYSBzdG9yZSBvZiBhIHBzZXVkbywgZXF1aXZhbGVudCB0byB0aGUgc3VtCglvZiB0aGUgZnJhbWUgcG9pbnRlciBhbmQgYSBjb25zdGFudCwgYXMgYW4gYWRkIGluc24uCgoxOTk5LTAxLTA2ICBNYW5mcmVkIEhvbGxzdGVpbiAgPG1hbmZyZWRAcy1kaXJla3RuZXQuZGU+CgoJKiBmaXhpbmMvZml4aW5jbC5jOiBSZS1pbmRlbnQgYWNjb3JkaW5nIHRvIHRoZSBHTlUgc3RhbmRhcmRzLgoJZml4aW5jL3NlcnZlci5jOiBMaWtld2lzZS4KCWZpeGluYy9zZXJ2ZXIuaDogTGlrZXdpc2UuCgpXZWQgSmFuICA2IDEwOjQzOjI5IDE5OTkgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmNzLnVuaS1kb3J0bXVuZC5kZT4KCgkqIGNvbmZpZy9tNjhrL202OGsuYyAoY29uc3RfdWludDMyX29wZXJhbmQpOiBSZW1vdmUgQ09OU1RBTlRfUF9SVFgKCWhhbmRsaW5nLgoJKGNvbnN0X3NpbnQzMl9vcGVyYW5kKTogTGlrZXdpc2UuCgpXZWQgSmFuICA2IDA5OjQ0OjUxIDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIHRvcGxldi5oOiBJbiBhZGRpdGlvbiB0byBjaGVja2luZyBfSkJMRU4sIGFsc28gY2hlY2sgaWYgYHNldGptcCcKCWlzIGEgbWFjcm8gd2hlbiBkZWNpZGluZyBpZiB3ZSBjYW4gdXNlIGBqbXBfYnVmJyBpbiBwcm90b3R5cGVzLgoKV2VkIEphbiAgNiAwMzoxODo1MyAxOTk5ICBNYXJrIEVsYnJlY2h0ICA8c25vd2JhbGwzQHVzYS5uZXQ+CgoJKiBjb25maWd1cmUuaW4gKHBjLW1zZG9zZGpncHApOiBTZXQgeF9tYWtlIHRvIHgtZ28zMi4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoJKiBpMzg2L3htLWdvMzIuaDogRGVmaW5lIExJQlNURENYWC4KCSogaTM4Ni94LWdvMzI6IE5ldy4KCSogaTM4Ni9nbzMyLmggKE1EX0VYRUNfUFJFRklYKTogRGVmaW5lLgoJKEZJTEVfTkFNRV9BQlNPTFVURV9QKTogRGVmaW5lLgoJKExJTktfQ09NTUFORF9TUEVDKTogRGVmaW5lLgoKV2VkIEphbiAgNiAwMjoyMzozNiAxOTk5ICAiQ2hhcmxlcyBNLiBIYW5udW0iICA8cm9vdEBpaGFjay5uZXQ+CgoJKiBleHByLmMgKHN0b3JlX2V4cHIpOiBJZiB0aGUgbGhzIGlzIGEgbWVtb3J5IGxvY2F0aW9uIHBvaW50ZWQKCXRvIGJlIGEgcG9zdGluY3JlbWVudGVkIChvciBwb3N0ZGVjcmVtZW50ZWQpIHBvaW50ZXIsIGFsd2F5cwoJZm9yY2UgdGhlIHJocyB0byBiZSBldmFsdWF0ZWQgaW50byBhIHBzZXVkby4KCldlZCBKYW4gIDYgMDA6NTQ6MjEgMTk5OSAgR2VvZmYgS2VhdGluZyAgPGdlb2Zma0BvemVtYWlsLmNvbS5hdT4KCgkqIHJlYWwuYyAobXRoZXJyKTogUHJpbnQgbW9yZSByZWFzb25hYmxlIHdhcm5pbmcgbWVzc2FnZXMuCgpUdWUgSmFuICA1IDIxOjU3OjQyIDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIE1ha2VmaWxlLmluIChnY2MubywgcHJlZml4Lm8sIGNjY3AubywgY3BwbGliLm8pOiBEZXBlbmQgb24gcHJlZml4LmguCgoJKiBjY2NwLmM6IEluY2x1ZGUgcHJlZml4LmgsIGRvbid0IHByb3RvdHlwZSBwcmVmaXguYyBmdW5jdGlvbnMuCgkobmV3X2luY2x1ZGVfcHJlZml4KTogQ29uc3RpZnkgY2hhciogcGFyYW1ldGVycy4KCgkqIGNwcGZpbGVzLmMgKHJlYWRfbmFtZV9tYXApOiBMaWtld2lzZS4KCShhcHBlbmRfaW5jbHVkZV9jaGFpbik6IExpa2V3aXNlLiAgQWxzbywgdXNlIGEgd3JpdGFibGUgY2hhciogY29weQoJb2YgcGFyYW1ldGVyIGBkaXInIHdoaWNoIHdlIHRoZW4gbW9kaWZ5LCByYXRoZXIgdGhhbiB1c2luZyB0aGUKCXBhcmFtZXRlciBpdHNlbGYgdG8gc3RvcmUgdGhlIG5ldyB3cml0YWJsZSBzdHJpbmcuCgkocmVtYXBfZmlsZW5hbWUpOiBDb25zdGlmeSBzb21lIHZhcmlhYmxlcy4gIEFsc28sIHVzZSBhIHdyaXRhYmxlCgljaGFyKiB0byBzdG9yZSBhbiBhbGxvY2F0ZWQgc3RyaW5nIHdoaWNoIHdlIHdpbGwgYmUgbW9kaWZ5aW5nLgoKCSogY3BwbGliLmM6IEluY2x1ZGUgcHJlZml4LmgsIGRvbid0IHByb3RvdHlwZSBwcmVmaXguYyBmdW5jdGlvbnMuCgkoY3BwX3N0YXJ0X3JlYWQpOiBDb25zdGlmeSB2YXJpYWJsZSBgc3RyJy4KCgkqIGNwcGxpYi5oIChhcHBlbmRfaW5jbHVkZV9jaGFpbik6IENvbnN0aWZ5IGEgY2hhciogcGFyYW1ldGVyLgoKCSogZ2NjLmMgSW5jbHVkZSBwcmVmaXguaCwgZG9uJ3QgcHJvdG90eXBlIHByZWZpeC5jIGZ1bmN0aW9ucy4KCShhZGRfcHJlZml4LCBzYXZlX3N0cmluZyk6IENvbnN0aWZ5IGNoYXIqIHBhcmFtZXRlcnMuCgkoZmF0YWwsIGVycm9yKTogQWRkIEFUVFJJQlVURV9QUklOVEZfMSB0byBwcm90b3R5cGVzLgoKCSogcHJlZml4LmM6IEluY2x1ZGUgcHJlZml4LmguCgkoZ2V0X2tleV92YWx1ZSwgdHJhbnNsYXRlX25hbWUsIHNhdmVfc3RyaW5nLCB1cGRhdGVfcGF0aCwKCXNldF9zdGRfcHJlZml4KTogQ29uc3RpZnkgdmFyaW91cyBjaGFyKiBwYXJhbWV0ZXJzIGFuZCB2YXJpYWJsZXMuCgkoc2F2ZV9zdHJpbmcpOiBVc2UgeG1hbGxvYywgbm90IG1hbGxvYy4KCSh0cmFuc2xhdGVfbmFtZSk6IFVzZSBhIHdyaXRhYmxlIHRlbXBvcmFyeSB2YXJpYWJsZSB0byBjcmVhdGUgYW5kCgltb2RpZnkgYSBzdHJpbmcgYmVmb3JlIHNldHRpbmcgaXQgdG8gYSBjb25zdCBjaGFyKi4KCgkqIHByZWZpeC5oOiBOZXcgZmlsZSB0byBwcm90b3R5cGUgZnVuY3Rpb25zIGV4cG9ydGVkIGZyb20gcHJlZml4LmMuCgpUdWUgSmFuICA1IDA4OjUyOjE4IDE5OTkgIEJydWNlIEtvcmIgIChrb3JiQGRhdGFkZXNpZ24uY29tKQoKCSogZml4aW5jL2ZpeGluY2wuYyAodmFyaW91cyk6IEFkZGVkIGRlYnVnIGNvZGUgc28KCU1hbmZyZWQgY2FuIHRyYWNlIHRoZSBwcm9jZXNzaW5nLgoKCSogZml4aW5jL2luY2xoYWNrLmRlZiAoc3lzL3V0c25hbWUuaCk6IFByb3ZpZGUgZm9yd2FyZCBkZWNsYXJhdGlvbiBvZgoJc3RydWN0IHV0c25hbWUgb24gVWx0cml4IFY0LlszNV0uCgoJKiBmaXhpbmMve2ZpeGluY2wueHxmaXhpbmNsLnNofGluY2xoYWNrLnNofSA6IFJlZ2VuZXJhdGVkLgoKTW9uIEphbiAgNCAxNTozNzozMCAxOTk5ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLnBoeXMuY29sdW1iaWEuZWR1PgoKCSogY3BwbGliLmMgKHNraXBfaWZfZ3JvdXApOiBTcGxpdCBvdXQgdGhlIGxvZ2ljIHRoYXQgaGFuZGxlcwoJZGlyZWN0aXZlIHJlY29nbml0aW9uIHRvIGl0cyBvd24gZnVuY3Rpb24uICBEb24ndCB1c2UKCXBhcnNlIG1hcmtlcnM7IHVzZSBhIGJhcmUgcG9pbnRlciBpbnRvIHRoZSBidWZmZXIuICBVc2UKCWNvcHkvc2tpcF9yZXN0X29mX2xpbmUgaW5zdGVhZCBvZiBkb2luZyBpdCBieSBoYW5kLiAgUmVtb3ZlCglgcmV0dXJuIG9uIGFueSBkaXJlY3RpdmUnIG1vZGUgd2hpY2ggd2FzIG5ldmVyIHVzZWQsIGFuZCB0YWtlCglvbmx5IG9uZSBhcmd1bWVudC4KCShjb25zaWRlcl9kaXJlY3RpdmVfd2hpbGVfc2tpcHBpbmcpOiBOZXcgZnVuY3Rpb24sIHN1YnJvdXRpbmUKCW9mIHNraXBfaWZfZ3JvdXAuICBMb2dpYyBzdHJlYW1saW5lZCBhIGJpdC4KCShjb25kaXRpb25hbF9za2lwLCBkb19lbGlmLCBkb19lbHNlKTogQ2FsbCBza2lwX2lmX2dyb3VwIHdpdGgKCW9ubHkgb25lIGFyZ3VtZW50LgoKTW9uIEphbiAgNCAxNToyNzozMCAxOTk5ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLnBoeXMuY29sdW1iaWEuZWR1PgoKCSogY3BwbGliLmMgKGRvX3VuZGVmKTogRU9GIGltbWVkaWF0ZWx5IGFmdGVyICcjdW5kZWYgRk9PJyBpcyBub3QgYW4KCWVycm9yLgoKTW9uIEphbiAgNCAxMTo1NTo1MSAxOTk5ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBleHRlbmQudGV4aSAoQm91bmQgbWVtYmVyIGZ1bmN0aW9ucyk6IERvY3VtZW50LgoKTW9uIEphbiAgNCAxMTowMTo0OCAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBtaXBzLXRkdW1wLmMgKHN0X3RvX3N0cmluZywgc2NfdG9fc3RyaW5nLCBnbGV2ZWxfdG9fc3RyaW5nLAoJbGFuZ190b19zdHJpbmcsIHR5cGVfdG9fc3RyaW5nKTogTWFrZSByZXR1cm4gdHlwZSBjb25zdCBjaGFyKi4KCShwcmludF9zeW1ib2wpOiBBcHBseSBgY29uc3QnIGtleXdvcmQgdG8gYSBjaGFyKi4KCShwcmludF9maWxlX2Rlc2MpOiBDYXN0IHN0cnVjdHVyZSBtZW1iZXIgYGNyZmQnIHRvIHVsb25nIHdoZW4KCWNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCgkqIG1pcHMtdGZpbGUuYyAocGZhdGFsX3dpdGhfbmFtZSk6IEFwcGx5IGBjb25zdCcga2V5d29yZCB0byBjaGFyKi4KCShmYXRhbCwgZXJyb3IpOiBBZGQgQVRUUklCVVRFX1BSSU5URl8xIHRvIHByb3RvdHlwZXMuCgkocHJvZ25hbWUsIGlucHV0X25hbWUpOiBBcHBseSBgY29uc3QnIGtleXdvcmQgdG8gYSBjaGFyKi4KCURvbid0IHJlZHVuZGFudGx5IGluY2x1ZGUgc3lzL3N0YXQuaC4KCShhbGxvY19pbmZvKTogQXBwbHkgYGNvbnN0JyBrZXl3b3JkIHRvIGEgY2hhciouCgkoc3RfdG9fc3RyaW5nLCBzY190b19zdHJpbmcpOiBMaWtld2lzZS4KCShoYXNoX3N0cmluZyk6IENhc3QgdmFyaWFibGUgYGhhc2hfc3RyaW5nJyB0byBhIHN5bWludF90IHdoZW4KCWNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCShhZGRfc3RyaW5nKTogQ2FzdCBQQUdFX1VTSVpFIHRvIFB0cmRpZmZfdCB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCUxpa2V3aXNlIGNhc3QgaXQgdG8gbG9uZyB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCShhZGRfbG9jYWxfc3ltYm9sKTogQXBwbHkgYGNvbnN0JyBrZXl3b3JkIHRvIGEgY2hhciouCgkoYWRkX2V4dF9zeW1ib2wpOiBMaWtld2lzZS4KCShhZGRfdW5rbm93bl90YWcpOiBMaWtld2lzZS4KCShhZGRfcHJvY2VkdXJlKTogQ2FzdCBhIHByaW50Zi1zdHlsZSBmaWVsZCB3aWR0aCB0byBhbiBpbnQuCgkoYWRkX2ZpbGUpOiBDYXN0IFBBR0VfVVNJWkUgdG8gbG9uZyB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCShwYXJzZV9iZWdpbik6IENhc3QgYSBwcmludGYtc3R5bGUgZmllbGQgd2lkdGggdG8gYW4gaW50LgoJKHBhcnNlX2JlbmQpOiBMaWtld2lzZS4KCShwYXJzZV9kZWYpOiBMaWtld2lzZS4KCShwYXJzZV9lbmQpOiBMaWtld2lzZS4KCShtYXJrX3N0YWJzKTogTWFyayBwYXJhbWV0ZXIgYHN0YXJ0JyB3aXRoIEFUVFJJQlVURV9VTlVTRUQuCgkocGFyc2Vfc3RhYnNfY29tbW9uKTogRml4IGZvcm1hdCBzcGVjaWZpZXIuCgkocGFyc2VfaW5wdXQpOiBDaGFuZ2UgdHlwZSBvZiB2YXJpYWJsZSBgaScgdG8gU2l6ZV90LgoJKHdyaXRlX29iamVjdCk6IEZpeCBhcmd1bWVudHMgdG8gbWF0Y2ggZm9ybWF0IHNwZWNpZmllcnMuCglDYXN0IHZhcmlhYmxlIGBudW1fd3JpdGUnIHRvIGxvbmcgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuCgkocmVhZF9zZWVrKTogQ2FzdCB2YXJpYWJsZSBgc3lzX3JlYWQnIHRvIHN5bWludF90IHdoZW4gY29tcGFyaW5nCglhZ2FpbnN0IG9uZS4gIEZpeCBhcmd1bWVudHMgdG8gbWF0Y2ggZm9ybWF0IHNwZWNpZmllcnMuICBDYXN0Cgl2YXJpYWJsZSBgc2l6ZScgdG8gbG9uZyB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCShjb3B5X29iamVjdCk6IENhc3QgcmVzdWx0IG9mIGBzaXplb2YnIHRvIGludCB3aGVuIGNvbXBhcmluZwoJYWdhaW5zdCBvbmUuICBGaXggYXJndW1lbnRzIHRvIG1hdGNoIGZvcm1hdCBzcGVjaWZpZXJzLiAgQ2FzdAoJdmFyaWFibGUgYGlmZCcgdG8gbG9uZyB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IGEgc2lnbmVkIHZhbHVlLgoJTGlrZXdpc2UsIGxpa2V3aXNlLgoKTW9uIEphbiAgNCAxMDozMDozMyAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjLWNvbW1vbi5jIChkZWNsX2F0dHJpYnV0ZXMpOiBBbGxvdyBhcHBseWluZyBhdHRyaWJ1dGUgYHVudXNlZCcKCW9uIGEgTEFCRUxfREVDTC4KCgkqIGMtcGFyc2UuaW4gKGxhYmVsKTogUGFyc2UgYXR0cmlidXRlcyBhZnRlciBhIGxhYmVsLCBhbmQgY2FsbAoJYGRlY2xfYXR0cmlidXRlcycgdG8gaGFuZGxlIHRoZW0uCgoJKiBnYW5zaWRlY2wuaCAoQVRUUklCVVRFX1VOVVNFRF9MQUJFTCk6IERlZmluZS4KCgkqIGdlbnJlY29nLmMgKE9VVFBVVF9MQUJFTCwgd3JpdGVfdHJlZV8xLCB3cml0ZV90cmVlKTogV2hlbgoJZ2VuZXJhdGluZyBsYWJlbHMsIG1hcmsgdGhlbSB3aXRoIEFUVFJJQlVURV9VTlVTRURfTEFCRUwuCgoJKiBpbnZva2UudGV4aTogTm90ZSB0aGF0IGxhYmVscyBjYW4gYmUgbWFya2VkIGB1bnVzZWQnLgoKU3VuIEphbiAgMyAyMzozMjoxOCAxOTk5ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KClN1biBKYW4gIDMgMjM6MDA6NDIgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogb3B0YWJzLmMgKGVtaXRfY21wX2FuZF9qdW1wX2luc25zKTogVXNlIENPTlNUQU5UX1AgY2Fub25pY2FsaXppbmcKCVJUTCBmb3IgYSBjb21wYXJlL2p1bXAgc2VxdWVuY2UuCgpTdW4gSmFuICAzIDIyOjU4OjE1IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIG9wdGFicy5jIChlbWl0X2NtcF9pbnNuKTogQWJvcnQgaWYgYXNrZWQgdG8gZW1pdCBub24tY2Fub25pY2FsIFJUTAoJZm9yIGEgdGFyZ2V0IHdpdGggSEFWRV9jYzAgZGVmaW5lZC4KCShlbWl0X2NtcF9hbmRfanVtcF9pbnNucyk6IE5ldyBmdW5jdGlvbi4KCSogZXhwci5oIChlbWl0X2NtcF9hbmRfanVtcF9pbnNucyk6IFByb3RvdHlwZSBpdC4KCSogbG9vcC5jIChjaGVja19kYnJhX2xvb3ApOiBVc2UgaXQgdG8gcmVwbGFjZSBjYWxscwoJdG8gZW1pdF9jbXBfaW5zbiBhbmQgZW1pdF9qdW1wX2luc24gYW5kIHRvIGNhbm9uaWNhbGl6ZQoJdGhlIGNvbXBhcmlzb24gaWYgbmVjZXNzYXJ5LgoJKiB1bnJvbGwuYyAodW5yb2xsX2xvb3ApOiBMaWtld2lzZS4KClN1biBKYW4gIDMgMjE6MDE6MDQgMTk5OSAgUmFpbmVyIE9ydGggIDxyb0BUZWNoRmFrLlVuaS1CaWVsZWZlbGQuREU+CgoJKiBmaXhpbmNsdWRlcyAoc3lzL3V0c25hbWUuaCk6IFByb3ZpZGUgZm9yd2FyZCBkZWNsYXJhdGlvbiBvZgoJc3RydWN0IHV0c25hbWUgb24gVWx0cml4IFY0LlszNV0uCgoJKiBtaXBzLm1kIChkaXZfdHJhcCk6IFVzZSBsb2NhbCBsYWJlbHMgaW5zdGVhZCBvZiBkb3QtcmVsYXRpdmUKCWJyYW5jaGVzLgoKU3VuIEphbiAgMyAyMDo0MDozNCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBwYS5tZCAoYnJhbmNoLCBuZWdhdGVkIGJyYW5jaCk6IEhhbmRsZSAoY29uc3RfaW50IDApIGFzIGZpcnN0Cglzb3VyY2Ugb3BlcmFuZC4KCSogcGEuYyAob3V0cHV0X2NicmFuY2gpOiBMaWtld2lzZS4KClN1biBKYW4gIDMgMDM6MjA6MzggMTk5OSAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogcnM2MDAwLmMgKHJzNjAwMF9zdGFja19pbmZvKTogVW5kbyBzcHVyaW91cyBwYXJ0IG9mIGxhc3QKCWNoYW5nZS4KCjE5OTktMDEtMDEgIE1hbmZyZWQgSG9sbHN0ZWluICA8bWFuZnJlZEBzLWRpcmVrdG5ldC5kZT4KCgkqIGV4dGVuZC50ZXhpIChfX2J1aWx0aW5fY29uc3RhbnRfcCk6IEFkZCBtaXNzaW5nIEBzbWFsbGV4YW1wbGUuCgpGcmkgSmFuICAxIDExOjQ4OjIwIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGkzODYubWQgKGRvdWJsZXdvcmQgc2hpZnRzKTogRml4IGR1bWIgbWlzdGFrZXMgaW4gcHJldmlvdXMgY2hhbmdlLgoKV2VkIERlYyAzMCAyMzozODo1NSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBtNjhrLm1kIChhZGRkaV9kaWxzaHIzMik6IEFsbG93IGFsbCBvcGVyYW5kcyB0byBiZSByZWdpc3RlcnMgdG9vLgoJKGFkZGRpX2Rpc2hsMzIpOiBTaW1pbGFybHkuCgoJKiBjc2UuYyAoaW52YWxpZGF0ZV9za2lwcGVkX2Jsb2NrKTogQ2FsbCBpbnZhbGlkYXRlX2Zyb21fY2xvYmJlcnMKCWZvciBlYWNoIGluc24gaW4gdGhlIHNraXBwZWQgYmxvY2suCgoJKiByZWxvYWQxLmMgKHJlbG9hZF9hc19uZWVkZWQpOiBWZXJpZnkgdGhhdCB0aGUgaW5zbiBzYXRpc2ZpZXMgaXRzCgljb25zdHJhaW50cyBhZnRlciByZXBsYWNpbmcgYSByZWdpc3RlciBhZGRyZXNzIHdpdGggYW4gYXV0b2luY3JlbWVudAoJYWRkcmVzcyBmb3IgcmVsb2FkIGluaGVyaXRhbmNlIHB1cnBvc2VzLgoKCSogaTM4Ni5tZCAoZG91Ymxld29yZCBzaGlmdHMpOiBBdm9pZCBuYW1lc3BhY2UgcG9sbHV0aW9uLgoKV2VkIERlYyAzMCAyMzowMDoyOCAxOTk4ICBEYXZpZCBPJ0JyaWVuICA8b2JyaWVuQE5VWEkuY29tPgoKCSogY29uZmlndXJlLmluIChGcmVlQlNEIEVMRik6IE5lZWRzIHNwZWNpYWwgY3J0IGZpbGVzLgoKV2VkIERlYyAzMCAyMjo1MDoxMyAxOTk4ICBHZW9mZnJleSBOb2VyICA8bm9lckBjeWdudXMuY29tPgoKCSogaTM4Ni94bS1jeWd3aW4uaDogQ2hhbmdlIERJUl9TRVBBUkFUT1IgdG8gZm9yd2FyZCBzbGFzaC4KCjE5OTgtMTItMzAgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmNzLnVuaS1kb3J0bXVuZC5kZT4KCgkqIGxvb3AuYyAoY2hlY2tfZGJyYV9sb29wKTogV2hpbGUgcmV2ZXJzaW5nIHRoZSBsb29wLCBpZiB0aGUKCWNvbXBhcmlzb24gdmFsdWUgaGFzIGEgVk9JRCBtb2RlIHVzZSB0aGUgbW9kZSBvZiB0aGUgb3RoZXIgb3BlcmFuZAoJdG8gY29tcHV0ZSB0aGUgbWFzay4KCldlZCBEZWMgMzAgMjI6MjQ6MDAgMTk5OCAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CgoJKiByczYwMDAubWQgKHtzYXZlLHJlc3RvcmV9X3N0YWNrX2Z1bmN0aW9uKTogVGFrZSAyIG9wZXJhbmRzIHRvCglhdm9pZCB3YXJuaW5ncyBpbiBjb21waWxpbmcgZXhwbG93LmMuCgoJKHBhdGNoIGZyb20gS2VuIFJhZWJ1cm4sIHJhZWJ1cm5AY3lnbnVzLmNvbSkKCSogcnM2MDAwLmMgKHJzNjAwMF9zdGFja19pbmZvKTogRm9yY2UgOC1ieXRlIGFsaWdubWVudCBvZgoJZnBtZW1fb2Zmc2V0LiAgQ29tcHV0ZSB0b3RhbCBzaXplIGFmdGVyIHRoYXQsIGFuZCB0aGVuCglyczYwMDBfZnBtZW1fb2Zmc2V0IHVzaW5nIGJvdGggdmFsdWVzLgoKTW9uIERlYyAyOCAxOToyNjozMiAxOTk4ICBHZXJhbGQgUGZlaWZlciAgPHBmZWlmZXJAZGJhaS50dXdpZW4uYWMuYXQ+CgoJKiBnY2MudGV4aSAoTm9uLWJ1Z3MpOiBgYEVtcHR5JycgbG9vcHMgd2lsbCBiZSBvcHRpbWl6ZWQgYXdheSBpbgoJdGhlIGZ1dHVyZTsgaW5kZWVkIHRoYXQgYWxyZWFkeSBoYXBwZW5zIGluIHNvbWUgY2FzZXMuCgpUdWUgRGVjIDI5IDExOjU4OjUzIDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBzcGFyYy5jIChpbnB1dF9vcGVyYW5kKTogUmVjb2duaXplIChjb25zdCAoY29uc3RhbnRfcF9ydHgpKS4KCShhcml0aF9vcGVyYW5kKTogUmVtb3ZlIGNvbnN0YW50X3BfcnR4IGhhbmRsaW5nLgoJKGNvbnN0NjRfb3BlcmFuZCwgY29uc3Q2NF9oaWdoX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcml0aDExX29wZXJhbmQsIGFyaXRoMTBfb3BlcmFuZCwgYXJpdGhfZG91YmxlX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcml0aDExX2RvdWJsZV9vcGVyYW5kLCBhcml0aDEwX2RvdWJsZV9vcGVyYW5kLCBzbWFsbF9pbnQpOiBMaWtld2lzZS4KCShzbWFsbF9pbnRfb3JfZG91YmxlLCB1bnNfc21hbGxfaW50LCB6ZXJvX29wZXJhbmQpOiBMaWtld2lzZS4KCSogc3BhcmMuaCAoUFJFRElDQVRFX0NPREVTKTogTGlrZXdpc2UuCgoJKiBydGwuaCAoQ09OU1RBTlRfUCk6IFJlbW92ZSBDT05TVEFOVF9QX1JUWC4KClR1ZSBEZWMgMjkgMTE6MzI6NTQgMTk5OCAgUmljaGFyZCBLZW5uZXIgIDxrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdT4KCgkqIHJ0bC5kZWYgKENPTlNUQU5UX1BfUlRYKTogQ2xhcmlmeSBjb21tZW50YXJ5LgoJKiBleHByLmMgKGV4cGFuZF9idWlsdGluLCBjYXNlIEJVSUxUX0lOX0NPTlNUQU5UX1ApOiBSZXdvcmsgdG8KCWNvbnNpZGVyIGNvbnN0YW50IENPTlNUUlVDVE9SIGNvbnN0YW50IGFuZCB0byBkZWZlciBzb21lIGNhc2VzCgl0byBjc2UuCgkqIGNzZS5jIChmb2xkX3J0eCwgY2FzZSBDT05TVCk6IEFkZCBoYW5kbGluZyBmb3IgQ09OU1RBTlRfUF9SVFguCgkqIHJlZ2NsYXNzLmMgKHJlZ19zY2FuX21hcmtfcmVmcywgY2FzZSBDT05TVCk6IExpa2V3aXNlLgoKVHVlIERlYyAyOSAxMTozMDoxMCAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZXhwci5jIChpbml0X2V4cHJfb25jZSk6IEtpbGwgY2FuX2hhbmRsZV9jb25zdGFudF9wIHJlY29nbml0aW9uLgoJKiBjc2UuYyAoZm9sZF9ydHgsIGNhc2UgJ3gnKTogUmVtb3ZlIHN0YW5kYWxvbmUgQ09OU1RBTlRfUF9SVFggY29kZS4KCgkqIGFscGhhLmMgKHJlZ19vcl82Yml0X29wZXJhbmQpOiBSZW1vdmUgQ09OU1RBTlRfUF9SVFggaGFuZGxpbmcuCgkocmVnX29yXzhiaXRfb3BlcmFuZCwgY2ludDhfb3BlcmFuZCwgYWRkX29wZXJhbmQpOiBMaWtld2lzZS4KCShzZXh0X2FkZF9vcGVyYW5kLCBhbmRfb3BlcmFuZCwgb3Jfb3BlcmFuZCk6IExpa2V3aXNlLgoJKHJlZ19vcl9jaW50X29wZXJhbmQsIHNvbWVfb3BlcmFuZCwgaW5wdXRfb3BlcmFuZCk6IExpa2V3aXNlLgoJKiBhbHBoYS5oIChQUkVESUNBVEVfQ09ERVMpOiBMaWtld2lzZS4KClNhdCBEZWMgMjYgMjM6MjY6MjYgMTk5OCAgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpTYXQgRGVjIDI2IDA5OjE3OjA0IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGdlbmdlbnJ0bC5jIChnZW5jb2RlKTogQWx3YXlzIHVzZSBiemVybyB0byBjbGVhciBtZW1vcnkgaW5zdGVhZAoJb2YgZGFuZ2Vyb3VzIGNhc3RzIGFuZCBzdG9yZXMuCgoJKiBNYWtlZmlsZS5pbiAoY29tcGFyZSwgZ251Y29tcGFyZSk6IEFkZCBtaXNzaW5nIGVsc2UgdHJ1ZSBjbGF1c2VzLgoKRnJpIERlYyAyNSAyMzowMDo1NiAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBhbHBoYS5tZCAoYnVpbHRpbl9sb25nam1wKTogQWRkIG1pc3NpbmcgIkRPTkUiLgoKVGh1IERlYyAyNCAxMDozOTo1NyAxOTk4ICBTdGFuIENveCAgPHNjb3hAY3lnbnVzLmNvbT4KCgkqIGdjYy5jIChleGVjdXRlKTogRW5hYmxlIC1waXBlIHdpdGggd2luMzIuCgpXZWQgRGVjIDIzIDEwOjI3OjQ0IDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvYXJtL3QtYXJtLWVsZjogQWRkIG11bHRpcGxpYiBvcHRpb24gZm9yIGxlYWRpbmcKCXVuZGVyc2NvcmVzLgoKCSogY29uZmlnL2FybS90aHVtYi5oIChBU01fT1VUUFVUX0xBQkVMUkVGKTogVXNlIHZhcmlhYmxlCgkndXNlcl9sYWJlbF9wcmVmaXgnIHJhdGhlciB0aGFuIG1hY3JvIFVTRVJfTEFCRUxfUFJFRklYLgoKCSh0aHVtYl9zaGlmdGFibGVfY29uc3QpOiBVc2UgbWFjcm8gJ0JBU0VfUkVHX0NMQVNTJyByYXRoZXIKCXRoYW4gdmFyaWFibGUgJ3JlbG9hZF9hZGRyZXNzX2Jhc2VfcmVnX2NsYXNzJy4gIFtOb3RlIHRoaXMKCWNoYW5nZSBpcyB1bnJlbGF0ZWQgdG8gdGhlIG90aGVycyBpbiB0aGlzIHBhdGNoXS4KCgkqIGNvbmZpZy9hcm0vdW5rbm93bi1lbGYuaCAoVVNFUl9MQUJFTF9QUkVGSVgpOiBEZWZhdWx0IHRvIG5vCglsZWFkaW5nIHVuZGVyc2NvcmUuCgpXZWQgRGVjIDIzIDA5OjUxOjMyIDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGFsaWFzLmMgKHJlY29yZF9hbGlhc19zdWJzZXQpOiBSZW1vdmUgaWdub3JlZCBgJicuCgkoaW5pdF9hbGlhc19vbmNlKTogTGlrZXdpc2UuCgoJKiBjLWxleC5jIChVTkdFVEMpOiBDYXN0IGZpcnN0IGFyZ3VtZW50IG9mIGNvbW1hIGV4cHJlc3Npb24gdG8gdm9pZC4KCgkqIGNvbmZpZy9taXBzL21pcHMuYyAobWlwc19hc21fZmlsZV9lbmQpOiBDYXN0IHRoZSByZXN1bHQgb2YKCWZ3cml0ZSB0byBgaW50JyB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCgkqIGNvbmZpZy9taXBzL21pcHMuaCAoQ0FOX0VMSU1JTkFURSk6IEFkZCBwYXJlbnMgYXJvdW5kICYmIHdpdGhpbiB8fC4KCShJTklUSUFMX0VMSU1JTkFUSU9OX09GRlNFVCk6IEFkZCBicmFjZXMgdG8gYXZvaWQgYW1iaWd1b3VzIGBlbHNlJy4KCgkqIGNzZS5jIChyZWhhc2hfdXNpbmdfcmVnKTogQ2hhbmdlIHR5cGUgb2YgdmFyaWFibGUgYGknIHRvCgl1bnNpZ25lZCBpbnQuCgoJKiBkd2FyZjJvdXQuYyAoaW5pdGlhbF9yZXR1cm5fc2F2ZSk6IENhc3QgLTEgdG8gdW5zaWduZWQgYmVmb3JlCglhc3NpZ25pbmcgaXQgdG8gb25lLgoKCSogZXhjZXB0LmMgKGR1cGxpY2F0ZV9laF9oYW5kbGVycyk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgYHRtcCcuCgoJKiBmaW5hbC5jIChmaW5hbF9zY2FuX2luc24pOiBMaWtld2lzZSBmb3IgdmFyaWFibGUgYGknLgoJKG91dHB1dF9hc21faW5zbik6IENhc3QgYSBjaGFyIHRvIHVuc2lnbmVkIGNoYXIgd2hlbiB1c2VkIGFzIGFuCglhcnJheSBpbmRleC4KCgkqIGdjc2UuYyAoY29tcHV0ZV9wcmVfcHBpbm91dCk6IENhc3QgLTEgdG8gU0JJVE1BUF9FTFRfVFlQRSB3aGVuCglhc3NpZ25pbmcgaXQgdG8gb25lLgoKCSogbG9vcC5jIChzdHJlbmd0aF9yZWR1Y2UpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlcyBgY291bnQnIGFuZCBgdGVtcCcuCgoJKiByZWNvZy5jIChwcmVwcm9jZXNzX2NvbnN0cmFpbnRzKTogQ2FzdCBhIGNoYXIgdG8gdW5zaWduZWQgY2hhcgoJd2hlbiB1c2VkIGFzIGFuIGFycmF5IGluZGV4LgoKCSogcmVnbW92ZS5jIChmaW5kX21hdGNoZXMpOiBMaWtld2lzZS4KCgkqIHJlbG9hZDEuYyAoY2FsY3VsYXRlX25lZWRzKTogQWRkIGRlZmF1bHQgY2FzZSBpbiBzd2l0Y2guCgkoZWxpbWluYXRlX3JlZ3NfaW5faW5zbik6IEluaXRpYWxpemUgdmFyaWFibGUgYG9mZnNldCcuCgkoc2V0X29mZnNldHNfZm9yX2xhYmVsKTogQ2hhbmdlIHR5cGUgb2YgdmFyaWFibGUgYGknIHRvIHVuc2lnbmVkLgoJKHJlbG9hZF9hc19uZWVkZWQpOiBXcmFwIHZhcmlhYmxlIGBpJyBpbiBtYWNybyBjaGVjayBvbgoJQVVUT19JTkNfREVDIHx8IElOU05fQ0xPQkJFUlNfUkVHTk9fUC4KCgkqIHNjYW4tZGVjbHMuYyAoc2Nhbl9kZWNscyk6IE1hcmsgcGFyYW1ldGVycyBgYXJnYycgYW5kIGBhcmd2JwoJd2l0aCBBVFRSSUJVVEVfVU5VU0VELiAgQ2FzdCB2YXJpYWJsZSBgc3RhcnRfd3JpdHRlbicgdG8gc2l6ZV90Cgl3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCgkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF9kZWNsKTogQ2FzdCBtYXhpbXVtX2ZpZWxkX2FsaWdubWVudCB0bwoJdW5zaWduZWQgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuICBMaWtld2lzZSBmb3IKCUdFVF9NT0RFX0FMSUdOTUVOVCgpLgoJKGxheW91dF9yZWNvcmQpOiBDYXN0IHJlY29yZF9hbGlnbiB0byBpbnQgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBhCglzaWduZWQgdmFsdWUuCgkobGF5b3V0X3R5cGUpOiBDYXN0IFRZUEVfQUxJR04oKSB0byBpbnQgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBhCglzaWduZWQgdmFsdWUuCgoJKiB0cmVlLmMgKGdldF9pZGVudGlmaWVyKTogQ2FzdCB2YXJpYWJsZSBgbGVuJyB0byB1bnNpZ25lZCB3aGVuCgljb21wYXJpbmcgYWdhaW5zdCBvbmUuCgkobWF5YmVfZ2V0X2lkZW50aWZpZXIpOiBMaWtld2lzZQoKV2VkIERlYyAyMyAwMDoxMDowMSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IERvIG5vdCBzZXQgcmVsb2FkX2NvbXBsZXRlZC4KCSogcmVsb2FkMS5jIChyZWxvYWQpOiBTZXQgcmVsb2FkX2NvbXBsZXRlZCBiZWZvcmUgY2FsbGluZwoJY2xlYW51cF9zdWJyZWdfb3BlcmFuZHMuCgpUdWUgRGVjIDIyIDIzOjU4OjMxIDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiByZWxvYWQxLmMgKGVtaXRfcmVsb2FkX2luc25zKTogQ2hlY2sgYHNldCcgbm90IG51bGwgYmVmb3JlIHVzZS4KClR1ZSBEZWMgMjIgMTU6MTU6NDUgMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIHJ0bGFuYWwuYyAobXVsdGlwbGVfc2V0cyk6IENoYW5nZSB0eXBlIG9mICdmb3VuZCcgZnJvbSAncnR4JyB0bwoJJ2ludCcuCgpUdWUgRGVjIDIyIDEzOjU1OjQ0IDE5OTggIFRoZW9kb3JlIFBhcGFkb3BvdWxvICA8VGhlb2RvcmUuUGFwYWRvcG91bG9Ac29waGlhLmlucmlhLmZyPgoKCSogaGFsZnBpYy5jIChoYWxmX3BpY19lbmNvZGUpOiBEZWxldGUgcmVkdW5kYW50IGNvZGUuCgpUdWUgRGVjIDIyIDEzOjAyOjIyIDE5OTggIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgoKCSogdG9wbGV2LmMgKG1haW4pOiBEZWxldGUgaGFuZGxpbmcgb2YgLWRNIGFzIGEgcHJlcHJvY2Vzc29yCglvcHRpb24uCgpNb24gRGVjIDIxIDE3OjM5OjM4IDE5OTggIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgoKCSogdG9wbGV2LmMgKG1haW4pOiBEb24ndCBlbWl0IGFueSB3YXJuaW5ncyB3aGVuIHVzaW5nIC1kRCwgLWRNLCBvcgoJLWRJLCB3aGljaCBhcmUgaGFuZGxlZCBieSB0aGUgcHJlcHJvY2Vzc29yLgoKU3VuIERlYyAyMCAxNjoxMzo0NCAxOTk4ICBKb2huIEYuIENhcnIgIDxqZmNAbWl0LmVkdT4KCgkqIGNvbmZpZ3VyZS5pbjogSGFuZGxlIERpZ2l0YWwgVU5JWCA1LnggdGhlIHNhbWUgYXMgNC54LgoJKiBpMzg2L3NvbDIuaDogRGVmaW5lIExPQ0FMX0xBQkVMX1BSRUZJWCBhcyAiLiIuCgpTdW4gRGVjIDIwIDA3OjM5OjUyIDE5OTggIEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKU2F0IERlYyAxOSAyMjoyNDoyMiAxOTk4ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KClNhdCBEZWMgMTkgMjE6NDE6MzIgMTk5OCAgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpTYXQgRGVjIDE5IDA5OjUyOjI3IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGdlbmF0dHIuYyAoZmF0YWwpOiBRdWFsaWZ5IGEgY2hhciogd2l0aCB0aGUgYGNvbnN0JyBrZXl3b3JkLgoKCSogZ2VuYXR0cnRhYi5jIChmYXRhbCwgYXR0cl9wcmludGYsIGF0dHJfc3RyaW5nLCB3cml0ZV9hdHRyX3NldCwKCXdyaXRlX3VuaXRfbmFtZSwgd3JpdGVfZWxpZ2libGVfZGVsYXksIGV4cGFuZF91bml0cywKCW1ha2VfbGVuZ3RoX2F0dHJzLCB3cml0ZV9hdHRyX2Nhc2UsIGZpbmRfYXR0ciwKCW1ha2VfaW50ZXJuYWxfYXR0cik6IExpa2V3aXNlLgoJKiBnZW5jaGVjay5jICh0cmVlX2NvZGVzKTogTGlrZXdpc2UuCgkqIGdlbmNvZGVzLmMgKGZhdGFsKTogTGlrZXdpc2UuCgkqIGdlbmNvbmZpZy5jIChmYXRhbCk6IExpa2V3aXNlLgoJKiBnZW5lbWl0LmMgKGZhdGFsKTogTGlrZXdpc2UuCgkqIGdlbmV4dHJhY3QuYyAoZmF0YWwsIHdhbGtfcnR4LCBjb3B5c3RyKTogTGlrZXdpc2UuCgkqIGdlbmZsYWdzLmMgKGZhdGFsKTogTGlrZXdpc2UuCgkqIGdlbm9waW5pdC5jIChmYXRhbCwgb3B0YWJzLCBnZW5faW5zbik6IExpa2V3aXNlLgoJKiBnZW5vdXRwdXQuYyAoZmF0YWwsIGVycm9yLCBwcmVkaWNhdGVzKTogTGlrZXdpc2UuCgkqIGdlbnBlZXAuYyAoZmF0YWwpOiBMaWtld2lzZS4KCSogZ2VucmVjb2cuYyAoZmF0YWwsIGRlY2lzaW9uLCBwcmVkX3RhYmxlLCBhZGRfdG9fc2VxdWVuY2UsCgl3cml0ZV90cmVlXzEsIHdyaXRlX3RyZWUsIGNoYW5nZV9zdGF0ZSwgY29weXN0ciwgaW5kZW50cyk6IExpa2V3aXNlLgoKVGh1IERlYyAxNyAxODoyMTo0OSAxOTk4ICBSYWluZXIgT3J0aCAgPHJvQFRlY2hGYWsuVW5pLUJpZWxlZmVsZC5ERT4KCgkqIGNvbmZpZ3VyZS5pbiAod2l0aC1mYXN0LWZpeGluY2x1ZGVzKTogRml4IHdoaXRlc3BhY2UuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KCgkqIGZpeGluY2x1ZGVzIChjX2FzbS5oKTogV3JhcCBEaWdpdGFsIFVOSVggVjQuMEIgREVDIEMgc3BlY2lmaWMKCWFzbSgpIGV0Yy4gZnVuY3Rpb24gZGVjbGFyYXRpb25zIGluIF9fREVDQy4KClRodSBEZWMgMTcgMTM6NTc6MjMgMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGV4cHIuYyAoZW1pdF9tb3ZlX2luc25fMSk6IE9ubHkgZW1pdCBhIGNsb2JiZXIgaWYgdGhlIHRhcmdldAoJaXMgYSBwc2V1ZG8gcmVnaXN0ZXIuCgpUaHUgRGVjIDE3IDEzOjUwOjI5IDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBnY3NlLmM6IEluY2x1ZGUgZXhwci5oIGluIG9yZGVyIHRvIGdldCB0aGUgcHJvdG90eXBlIGZvcgoJZ2V0X2NvbmRpdGlvbigpIHdoaWNoIGlzIHVzZWQgaW4gZGVsZXRlX251bGxfcG9pbnRlcl9jaGVja3MoKS4KClRodSBEZWMgMTcgMTU6NTg6MjYgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogaHdpbnQuaDogTmV3IGZpbGUgdG8gY29uc29saWRhdGUgSE9TVF9XSURFX0lOVCAoZXRjKSBtYWNyb3MuCgpUaHUgRGVjIDE3IDEyOjMxOjEyIDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluIChJTlRFUk5BTF9DRkxBR1MpOiBBZGQgU0NIRURfQ0ZMQUdTLgoJKEFMTF9DRkxBR1MpOiBEZWxldGUgU0NIRURfQ0ZMQUdTLgoKMTk5OC0xMi0xNyAgVmxhZGltaXIgTi4gTWFrYXJvdiAgPHZtYWthcm92QGN5Z251cy5jb20+CgoJKiBjb25maWcvaTYwL2k5NjAubWQgKGV4dGVuZHFpaGkyKTogRml4IHR5cG8gKHVzYWdlICcsJyBpbnN0ZWFkIG9mCgknOycpLgoKMTk5OC0xMi0xNyAgTWljaGFlbCBUaWVtYW5uICA8dGllbWFubkBheG9uLmN5Z251cy5jb20+CgoJKiBpOTYwLm1kIChleHRlbmQqLCB6ZXJvX2V4dGVuZCopOiBEb24ndCBnZW5lcmF0ZSBydGwgdGhhdCBsb29rcwoJbGlrZSAoc3VicmVnOlNJIChyZWc6U0kgTikgMCksIGJlY2F1c2UgaXQncyB3cm9uZywgYW5kIGl0IGhpZGVzCglvcHRpbWl6YXRpb25zIGZyb20gdGhlIGNvbWJpbmVyLgoKVGh1IERlYyAxNyAwODoyNzowMyAxOTk4ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogbG9vcC5jIChjb21iaW5lX2dpdnNfdXNlZF9ieV9vdGhlcik6IERvbid0IGRlcGVuZCBvbiBuX3RpbWVzX3NldC4KCldlZCBEZWMgMTYgMTc6MzA6MzUgMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIHRvcGxldi5jIChtYWluKTogRGlzYWJsZSBvcHRpbWl6ZV9zaXplIGlmIGEgc3BlY2lmaWMKCW9wdGltaXphdGlvbiBsZXZlbCBpcyByZXF1ZXN0ZWQuICBBbHdheXMgc2V0IG9wdGltaXphdGlvbgoJbGV2ZWwgdG8gMiBpZiAtT3MgaXMgc3BlY2lmaWVkLgoKV2VkIERlYyAxNiAxNjozMzowNCAxOTk4ICBEYXZlIEJyb2xsZXkgIDxicm9sbGV5QGN5Z251cy5jb20+CgoJKiBvYmpjL2xhbmctc3BlY3MuaDogUGFzcyAtTUQsIC1NTUQgYW5kIC1NRyB0byBjYzFvYmogaWYgY29uZmlndXJlZCB3aXRoCgljcHBsaWIuCgkqIGNwcGxpYi5jIChjcHBfc3RhcnRfcmVhZCk6IElmIGluX2ZuYW1lIGlzIG5vdCBpbml0aWFsaXplZCwgdHJ5IHRvCglpbml0aWFsaXplIGl0IHVzaW5nIGZuYW1lLgoKMTk5OC0xMi0xNiAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5waHlzLmNvbHVtYmlhLmVkdT4KCgkqIGNwcGxpYi5jIChkb19pbmNsdWRlKTogVHJlYXQgI2luY2x1ZGVfbmV4dCBpbiB0aGUKCXByaW1hcnkgc291cmNlIGZpbGUgYXMgI2luY2x1ZGUgcGx1cyB3YXJuaW5nLiAgVHJlYXQKCSNpbmNsdWRlX25leHQgaW4gYSBmaWxlIGluY2x1ZGVkIGJ5IGFic29sdXRlIHBhdGggYXMgYW4KCWVycm9yLiAgZnAgPT0gQ1BQX05VTExfQlVGRkVSIGlzIGEgZmF0YWwgaW5jb25zaXN0ZW5jeS4KCldlZCBEZWMgMTYgMTI6Mjg6NTQgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY2NjcC5jOiBEb24ndCBkZWZpbmUgTUlOL01BWCBhbnltb3JlLgoJKiBjcHBsaWIuYzogTGlrZXdpc2UuCgkqIG1hY2htb2RlLmg6IExpa2V3aXNlLgoJKiBzeXN0ZW0uaDogUHJvdmlkZSBkZWZpbml0aW9ucyBmb3IgTUlOL01BWC4KClR1ZSBEZWMgMTUgMjM6NDc6NDIgMTk5OCAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5waHlzLmNvbHVtYmlhLmVkdT4KCgkqIGZpeC1oZWFkZXIuYzogRG9uJ3QgZGVmaW5lIHhzdHJkdXAgaGVyZS4KCldlZCBEZWMgMTYgMDU6MTE6MDQgMTk5OCAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGxvb3AuYyAoY29uc2VjX3NldHNfZ2l2KTogTmV3IGFyZ3VtZW50IGxhc3RfY29uc2VjX2luc24uCgkoc3RyZW5ndGhfcmVkdWNlKTogUHJvdmlkZSAvIHVzZSBpdC4KCldlZCBEZWMgMTYgMTc6MjQ6MDcgMTk5OCAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogbG9vcC5oIChsb29wX2luZm8pOiBOZXcgZmllbGQgJ3Z0b3AnLgoJKiBsb29wLmMgKGNoZWNrX2RicmFfbG9vcCk6IFVzZSBsb29wX2luZm8tPnZ0b3AgcmF0aGVyIHRoYW4KCXNjYW5uaW5nIGxvb3AgZm9yIHZ0b3AuCgkqIHVucm9sbC5jIChzdWJ0cmFjdF9yZWdfdGVybSwgZmluZF9jb21tb25fcmVnX3Rlcm0pOiBOZXcgZnVuY3Rpb25zLgoJKGxvb3BfaXRlcmF0aW9ucyk6IFVzZSB0aGVtIHRvIGRldGVybWluZSBpZiBsb29wIGhhcyBhIGNvbnN0YW50CgludW1iZXIgb2YgaXRlcmF0aW9ucy4gIFNldCBsb29wX2luZm8tPnZ0b3AuICBEb24ndCBzdWJ0cmFjdAoJY29tbW9uIHJlZyB0ZXJtIGZyb20gaW5pdGlhbF92YWx1ZSBhbmQgZmluYWxfdmFsdWUgaWYgaGF2ZSBhCglkby13aGlsZSBsb29wLgoKVHVlIERlYyAxNSAxMzo0OTo1NSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBtbjEwMjAwLm1kIChhZGRzaTMgZXhwYW5kZXIpOiBVc2UgIm5vbm1lbW9yeV9vcGVyYW5kIiBmb3Igb3BlcmFuZCAyLgoKCSogbW4xMDMwMC5tZCAoYnNldCwgYmNscik6IE9wZXJhbmQgMCBpcyBhIHJlYWQvd3JpdGUgb3BlcmFuZC4KCgkqIG1uMTAyMDAubWQgKGFic3NmMiwgbmVnc2YyKTogTmV3IGV4cGFuZGVycy4KCgkqIG1uMTAzMDAubWQgKGFic2RmMiwgYWJzc2YyLCBuZWdkZjIsIG5lZ3NmMik6IE5ldyBleHBhbmRlcnMuCgpUdWUgRGVjIDE1IDExOjU1OjMwIDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBpbnRlZ3JhdGUuYyAoY29weV9ydHhfYW5kX3N1YnN0aXR1dGUpOiBJZiBhIFNVQlJFRyBpcwoJcmVwbGFjZWQgYnkgYSBDT05DQVQgd2hvc2UgY29tcG9uZW50cyBkbyBub3QgaGF2ZSB0aGUgc2FtZQoJbW9kZSBhcyB0aGUgb3JpZ2luYWwgU1VCUkVHLCB1c2UgYSBuZXcgU1VCUkVHIHRvIHJlc3RvcmUgdGhlCgltb2RlLgoKCSogZW1pdC1ydGwuYyAoc3VicmVnX3JlYWxwYXJ0X3ApOiBDb3BlIHdpdGggc3VicmVncyBjb250YWluaW5nCgltdWx0aXdvcmQgY29tcGxleCB2YWx1ZXMuCgoxOTk4LTEyLTE1ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLnBoeXMuY29sdW1iaWEuZWR1PgoKCSogY3BwYWxsb2MuYzogQWRkIHhzdHJkdXAgaGVyZS4KCSogY3BwbGliLmg6IFJlbW92ZSBzYXZlc3RyaW5nIHByb3RvdHlwZS4KCSogY3BwbGliLmM6IFJlbW92ZSBzYXZlc3RyaW5nIGZ1bmN0aW9uLiBzL3NhdmVzdHJpbmcveHN0cmR1cC8KCSAgdGhyb3VnaG91dC4KCSogY3BwZmlsZXMuYzogcy9zYXZlc3RyaW5nL3hzdHJkdXAvIHRocm91Z2hvdXQuCgoxOTk4LTEyLTE1ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLnBoeXMuY29sdW1iaWEuZWR1PgoKCSogY3BwbGliLmM6IE1ha2UgYWxsIGRpcmVjdGl2ZSBoYW5kbGVycyByZWFkIHRoZWlyIG93bgoJICBhcmd1bWVudHMuCgkgIChzdHJ1Y3QgZGlyZWN0aXZlKTogUmVtb3ZlIGxhc3QgdHdvIGFyZ3VtZW50cyBmcm9tIEZVTkMKCSAgbWVtYmVyIHByb3RvdHlwZS4gUmVtb3ZlIGBjb21tYW5kX3JlYWRzX2xpbmUnIG1lbWJlcgoJICBlbnRpcmVseS4KCSAgKGRpcmVjdGl2ZV90YWJsZSk6IFJlbW92ZSBpbml0aWFsaXphdGlvbnMgb2YKCSAgY29tbWFuZF9yZWFkc19saW5lIGZsYWcuICBQcmV0dHktcHJpbnQuCgkgIChldmFsX2lmX2V4cHJlc3Npb24sIGRvX2RlZmluZSwgZG9fbGluZSwgZG9faW5jbHVkZSwKCSAgZG9fdW5kZWYsIGRvX2Vycm9yLCBkb19wcmFnbWEsIGRvX2lkZW50LCBkb19pZiwgZG9feGlmZGVmLAoJICBkb19lbHNlLCBkb19lbGlmLCBkb19zY2NzLCBkb19hc3NlcnQsIGRvX3VuYXNzZXJ0LAoJICBkb193YXJuaW5nKTogVGFrZSBvbmx5IHR3byBhcmdzLgoKCSAgKGNwcF9kZWZpbmUpOiBDYWxsIGRvX2RlZmluZSB3aXRoIHR3byBhcmdzIGFuZCB0aGUgdGV4dCB0bwoJICBkZWZpbmUgc3R1ZmZlZCBpbnRvIGEgYnVmZmVyLgoJICAobWFrZV9hc3NlcnRpb24pOiBDYWxsIGRvX2Fzc2VydCB3aXRoIHR3byBhcmdzLgoJICAoaGFuZGxlX2RpcmVjdGl2ZSk6IENhbGwgZG9fbGluZSB3aXRoIHR3byBhcmdzLiBDYWxsCgkgIGt0LT5mdW5jIHdpdGggdHdvIGFyZ3MuICBSZW1vdmUgY29tbWFuZF9yZWFkc19saW5lCgkgIHByb2Nlc3NpbmcuCgkgIChkb19kZWZpbmUsIGRvX3VuZGVmLCBkb19lcnJvciwgZG9fd2FybmluZywgZG9fcHJhZ21hLAoJICBkb19zY2NzKTogUmVhZCB0aGUgcmVzdCBvZiB0aGUgbGluZSBoZXJlLgoJICAoZG9faWRlbnQpOiBHb2JibGUgcmVzdCBvZiBsaW5lLCBhcyBjY2NwIGRvZXMuCgkgIChjcHBfdW5kZWYpOiBOZXcgZnVuY3Rpb24uCgkgIChjcHBfc3RhcnRfcmVhZCk6IENhbGwgY3BwX3VuZGVmIGluc3RlYWQgb2YgZG9fdW5kZWYuCgoxOTk4LTEyLTE1ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLnBoeXMuY29sdW1iaWEuZWR1PgoKCSogY3BwaGFzaC5oICh1bmlvbiBoYXNoX3ZhbHVlKTogUmVtb3ZlIGBrZXlkZWYnIG1lbWJlciwgYWRkIGEKCSAgYHN0cnVjdCBoYXNobm9kZSAqYXNjaGFpbicgbWVtYmVyIGZvciAjYXNzZXJ0LgoKCSogY3BwbGliLmMgKHN0cnVjdCB0b2tlbmxpc3RfbGlzdCwgc3RydWN0CgkgIGFzc2VydGlvbl9oYXNobm9kZSk6IERlbGV0ZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMuCgkgIChhc3NlcnRpb25faW5zdGFsbCwgYXNzZXJ0aW9uX2xvb2t1cCwgZGVsZXRlX2Fzc2VydGlvbiwKCSAgY2hlY2tfYXNzZXJ0aW9uLCBjb21wYXJlX3Rva2VuX2xpc3RzLCByZXZlcnNlX3Rva2VuX2xpc3QsCgkgIHJlYWRfdG9rZW5fbGlzdCwgZnJlZV90b2tlbl9saXN0KTogRGVsZXRlIGZ1bmN0aW9ucy4KCSAgKHBhcnNlX2Fzc2VydGlvbik6IE5ldyBmdW5jdGlvbi4KCSAgKGNwcF9jbGVhbnVwKTogRG9uJ3QgZGVzdHJveSB0aGUgYXNzZXJ0aW9uX2hhc2h0YWJsZS4KCgkgIChkb19hc3NlcnQpOiBHdXQgYW5kIHJld3JpdGUuICAjYXNzZXJ0IGZvbyAoYmFyKSBwbGFjZXMKCSAgZW50cmllcyBmb3IgYCNmb28nIGFuZCBgI2ZvbyhiYXIpJyBpbiB0aGUgbWFjcm8gaGFzaCB0YWJsZSwKCSAgdHlwZSBUX0FTU0VSVC4gIFRoZSB2YWx1ZSB1bmlvbidzIGBhc2NoYWluJyBtZW1iZXIgaXMgdXNlZAoJICB0byBjaGFpbiBhbGwgYW5zd2VycyBmb3IgYSBnaXZlbiBwcmVkaWNhdGUgdG9nZXRoZXIuCgkgIChkb191bmFzc2VydCk6IEFsc28gcmV3cml0dGVuLiAgVGFrZSBhbiB1bi1hc3NlcnRlZAoJICBhbnN3ZXIgb2ZmIHRoZSBjaGFpbiBmcm9tIGl0cyBwcmVkaWNhdGUgYW5kIGNhbGwKCSAgZGVsZXRlX21hY3JvIG9uIHRoZSBoYXNobm9kZSwgb3Igd2FsayBhIHByZWRpY2F0ZSBjaGFpbgoJICBjYWxsaW5nIGRlbGV0ZV9tYWNybyBvbiBhbGwgdGhlIGVudHJpZXMuCgkgIChjcHBfcmVhZF9jaGVja19hc3NlcnRpb24pOiBTaW1wbHkgY2FsbCBwYXJzZV9hc3NlcnRpb24gdG8KCSAgZ2V0IHRoZSBjYW5vbmljYWwgYXNzZXJ0aW9uIG5hbWUsIGFuZCBsb29rIHRoYXQgdXAgaW4gdGhlCgkgIGhhc2ggdGFibGUuCgoJKiBjcHBsaWIuaCAoQVNTRVJUSU9OX0hBU0hOT0RFLEFTU0VSVElPTl9IQVNIU0laRSxhc3NlcnRpb25faGFzaHRhYik6CglSZW1vdmVkLgoKCSogY3BwaGFzaC5jIChpbnN0YWxsKTogVXNlIGJjb3B5IGluc3RlYWQgb2YgYW4gZXhwbGljaXQgbG9vcAoJICB0byBjb3B5IHRoZSBtYWNybyBuYW1lLgoKCSogY3BwZXhwLmMgKGNwcF9sZXgpOiBDb252ZXJ0IHRoZSByZXN1bHQgb2YKCSAgY3BwX3JlYWRfY2hlY2tfYXNzZXJ0aW9uIHRvIGEgYHN0cnVjdCBvcGVyYXRpb24nIGRpcmVjdGx5OwoJICBkb24ndCBnbyB0aHJvdWdoIHBhcnNlX251bWJlci4KClR1ZSBEZWMgMTUgMTg6Mjc6MzkgMTk5OCAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGxvb3AuaCAoc3RydWN0IGluZHVjdGlvbik6IERlbGV0ZSB0aW1lc191c2VkIG1lbWJlci4KCSogbG9vcC5jIChuX3RpbWVzX3NldCk6IFJlbmFtZSB0byBzZXRfaW5fbG9vcC4gIENoYW5nZWQgYWxsIHVzZXJzLgoJKG5fdGltZXNfdXNlZCk6IFJlbmFtZSB0byBuX3RpbWVzX3NldC4gIENoYW5nZWQgYWxsIHVzZXJzLgoJKHNjYW5fbG9vcCk6IEZyZWUgcmVnX3NpbmdsZV91c2FnZSBiZWZvcmUgc3RyZW5ndGggcmVkdWN0aW9uLgoJKHJlY29yZF9naXYsIGNvbWJpbmVfZ2l2cyk6IFJlbW92ZSBoYW5kbGluZyBvZiB0aW1lc191c2VkIG1lbWJlci4KCShjb21iaW5lX2dpdnNfdXNlZF9vbmNlKTogUmVuYW1lIHRvOgoJKGNvbWJpbmVfZ2l2c191c2VkX2J5X290aGVyKSAuICBDaGFuZ2VkIGFsbCBjYWxsZXJzLgoKVHVlIERlYyAxNSAwMTo0NToyNiAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkd2FyZjJvdXQuYyAoZ2VuX3N0cnVjdF9vcl91bmlvbl90eXBlX2RpZSk6IENoZWNrIEFHR1JFR0FURV9UWVBFX1AKCWluc3RlYWQgb2YgVFJFRV9DT0RFX0NMQVNTID09ICd0Jy4KCShnZW5fdHlwZV9kaWUpOiBMaWtld2lzZS4KCShzY29wZV9kaWVfZm9yKTogSWdub3JlIEZVTkNUSU9OX1RZUEUgInNjb3BlcyIuCgpNb24gRGVjIDE0IDE2OjIzOjI3IDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIHJlYWwuYyAoZW5kaWFuKTogRGlzYWJsZSBsYXN0IGNoYW5nZSB1bmxlc3MKCUhPU1RfQklUU19QRVJfV0lERV9JTlQgaXMgZ3JlYXRlciB0aGFuIDMyLgoKTW9uIERlYyAxNCAxNzoxMzozNiAxOTk4ICBBbmRyZXcgTWFjTGVvZCAgPGFtYWNsZW9kQGN5Z251cy5jb20+CgoJKiBvdXRwdXQuaCAoZm9yY2VfZGF0YV9zZWN0aW9uKTogTmV3IHByb3RvdHlwZS4KCSogdmFyYXNtLmMgKGZvcmNlX2RhdGFfc2VjdGlvbik6IE5ldyBmdW5jdGlvbiB0byBmb3JjZSB0aGUKCWRhdGEgc2VjdGlvbiwgcmVnYXJkbGVzcyBvZiB3aGF0IGluX3NlY3Rpb24gdGhpbmtzLgoJKiBkd2FyZjJvdXQuYyAob3V0cHV0X2NhbGxfZnJhbWVfaW5mbyk6IENhbGwgZm9yY2VfZGF0YV9zZWN0aW9uCglzaW5jZSB2YXJhc20gbWF5IG5vdCByZWFsaXplIHdlJ3ZlIGNoYW5nZXMgc2VjdGlvbnMuCgpNb24gRGVjIDE0IDE0OjA5OjM0IDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiByZWxvYWQxLmMgKHJlbG9hZCk6IERlbGV0ZSBSRUdfUkVUVkFMIGFuZCBSRUdfTElCQ0FMTCBub3RlcwoJICBhZnRlciBjb21wbGV0aW5nIHJlbG9hZC4KCgkqIHJ0bC50ZXhpOiBEb2N1bWVudCB0aGF0IFJFR19SRVRWQUwgYW5kIFJFR19MSUJDQUxMIGFyZQoJICBkZWxldGVkIGFmdGVyIHJlbG9hZC4KCk1vbiBEZWMgMTQgMDE6Mzk6MjggMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcnRsLmggKG11bHRpcGxlX3NldHMpOiBGaXggcHJvdG90eXBlLgoJKiBydGxhbmFsLmMgKG11bHRpcGxlX3NldHMpOiBGaXggcmV0dXJuIHR5cGUuCgpTdW4gRGVjIDEzIDEyOjQzOjU4IDE5OTggIEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKU3VuIERlYyAxMyAwMTowNToyMiAxOTk4ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KCjE5OTgtMTItMTMgIE1hbmZyZWQgSG9sbHN0ZWluICA8bWFuZnJlZEBzLWRpcmVrdG5ldC5kZT4KCgkqIHByb3RvaXplLmMgKGZwdXRzKTogV3JhcCBleHRlcm4gZGVjbGFyYXRpb24gaW4gI2lmbmRlZiBmcHV0cy4KClN1biBEZWMgMTMgMDA6MjQ6MTQgMTk5OCAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHJ0bC5oIChyZWNvbXB1dGVfcmVnX3VzYWdlKTogQWRkIHNlY29uZCBhcmd1bWVudC4KCSogZmxvdy5jIChyZWNvbXB1dGVfcmVnX3VzYWdlKTogTGlrZXdpc2UuCgkqIHRvcGxldi5jIChyZXN0X29mX2NvbXBpbGF0aW9uKTogU3VwcGx5IHNlY29uZCBhcmd1bWVudCB0bwoJcmVjb21wdXRlX3JlZ191c2FnZS4KCgkqIHJlbG9hZDEuYyAoY29tcHV0ZV91c2VfYnlfcHNldWRvcyk6IEFsbG93IHJlZ19yZW51bWJlcltyZWdub10gPCAwCglhZnRlciByZWxvYWQuCgpTYXQgRGVjIDEyIDIzOjM5OjEwIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIG02OGsvdC1tNjhrZWxmIChNVUxUSUxJQl9PUFRJT05TKTogQWRkIG1jcHUzMi4KCShNVUxUSUxJQl9NQVRDSEVTKTogLW02ODMzMiBub3cgdXNlcyBtY3B1MzIgbGlicmFyaWVzLCBub3QgbTY4MDAwLgoJKE1VTFRJTElCX0VYQ0VQVElPTlMpOiBEb24ndCBidWlsZCA2ODg4MSBsaWJyYXJpZXMgZm9yIG02ODAwMCwKCW1jcHUzMiBvciBtNTIwMC4KCgkqIGkzODYvbmV4dC5oIChBU01fT1VUUFVUX0FMSUdOKTogVXNlIDB4OTAgZm9yIGZpbGwgY2hhcmFjdGVyLgoKCSogcnRsYW5hbC5jIChtdWx0aXBsZV9zZXRzKTogTmV3IGZ1bmN0aW9uLgoJKiBydGwuaCAobXVsdGlwbGVfc2V0cyk6IERlY2xhcmUgaXQuCgkqIGxvY2FsLWFsbG9jLmMgKHdpcGVfZGVhZF9yZWcpOiBVc2UgaXQuCgkqIGdsb2JhbC5jIChnbG9iYWxfY29uZmxpY3RzKTogTGlrZXdpc2UuCgpTYXQgRGVjIDEyIDIyOjEzOjAyIDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBnbG9iYWwuYyAocmVjb3JkX2NvbmZsaWN0cyk6IERvbid0IHVzZSBhbiBhcnJheSBvZiBzaG9ydHMgdG8KCXN0b3JlIGFuIGFycmF5IG9mIGludHMuCgkoZ2xvYmFsX2NvbmZsaWN0cyk6IExpa2V3aXNlLgoKU2F0IERlYyAxMiAxNjo0OToyNCAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEuYyAoYWxwaGFfZXhwYW5kX2Jsb2NrX21vdmUpOiBtb2RlX2Zvcl9zaXplIGV4cGVjdHMKCWJpdHMsIG5vdCBieXRlcy4gIEluZmVyIGV4dHJhIGFsaWdubWVudCBmcm9tIGFkZHJlc3NvZi4KCjE5OTgtMTItMTEgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgoKCSogcnM2MDAwL3N5c3Y0LmggKEFTTV9PVVRQVVRfQUxJR05FRF9MT0NBTCk6IFB1dCBzbWFsbCBkYXRhIGluIHRoZQoJLnNic3Mgc2VjdGlvbiwgbm90IC5zZGF0YS4KCjE5OTgtMTItMTEgIE1hbmZyZWQgSG9sbHN0ZWluICA8bWFuZnJlZEBzLWRpcmVrdG5ldC5kZT4KCgkqIGNjY3AuYzogRG8gbm90ICNpbmNsdWRlIDxzeXMvc3RhdC5oPiBoZXJlOyB0aGlzIGlzIGFscmVhZHkgZG9uZQoJYnkgInN5c3RlbS5oIi4KCSogY29sbGVjdDIuYzogTGlrZXdpc2UuCgkqIGNwcGxpYi5oOiBMaWtld2lzZS4KCSogZ2NjLmM6IExpa2V3aXNlLgoJKiBnY292LmM6IExpa2V3aXNlLgoJKiBnZXRwd2QuYzogTGlrZXdpc2UuCgkqIHByb3RvaXplLmM6IExpa2V3aXNlLgoJKiB0b3BsZXYuYzogTGlrZXdpc2UuCgoJKiBjcHBsaWIuaCAoSE9TVF9XSURFX0lOVCk6IEdldCBkZWZpbml0aW9uIGZyb20gIm1hY2htb2RlLmgiCglhbmQgZG9uJ3QgdHJ5IHRvIGRlZmluZSBpdCBoZXJlLgoJKiBNYWtlZmlsZS5pbiAoY3BwbWFpbi5vKTogRGVwZW5kIG9uIG1hY2htb2RlLmguCgkoY3BwbGliLm8pOiBMaWtld2lzZS4KCShjcHBlcnJvci5vKTogTGlrZXdpc2UuCgkoY3BwZXhwLm8pOiBMaWtld2lzZS4KCShjcHBmaWxlcy5vKTogTGlrZXdpc2UuCgkoY3BwaGFzaC5vKTogTGlrZXdpc2UuCgkoY3BwYWxsb2Mubyk6IExpa2V3aXNlLgoJKGZpeC1oZWFkZXIubyk6IExpa2V3aXNlLgoJKHNjYW4tZGVjbHMubyk6IExpa2V3aXNlLgoKRnJpIERlYyAxMSAxMTowMjo0OSAxOTk4ICBTdGFuIENveCAgPHNjb3hAY3lnbnVzLmNvbT4KCgkqIHNoLmMgKHByaW50X29wZXJhbmQpOiBMb29rdXAgaW50ZXJydXB0X2hhbmRsZXIgYXR0cmlidXRlIGluc3RlYWQKCW9mIHJlbHlpbmcgb24gc3RhdGljIHZhcmlhYmxlLgoJKiAoY2FsY19saXZlX3JlZ3MpOiBMaWtld2lzZS4KCSogKHNoX3ByYWdtYV9pbnNlcnRfYXR0cmlidXRlcyk6IENyZWF0ZSBpbnRlcnJ1cHRfaGFuZGxlcgoJYXR0cmlidXRlIGlmIGEgcHJhZ21hIHdhcyBzcGVjaWZpZWQuCgkqIChzaF92YWxpZF9tYWNoaW5lX2RlY2xfYXR0cmlidXRlKTogRG9uJ3Qgc2V0IHN0YXRpYyBmbGFnLgoJKiBzaC5oIChQUkFHTUFfSU5TRVJUX0FUVFJJQlVURVMpOiBOZXcuCgpGcmkgRGVjIDExIDEyOjU2OjA3IDE5OTggIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiByZWxvYWQxLmMgKHJlbG9hZF9jb21iaW5lKTogVXNlIEJBU0lDX0JMT0NLX0xJVkVfQVRfU1RBUlQKCXRvIGRldGVybWluZSBpZiBhIHJlZ2lzdGVyIGlzIGxpdmUgYXQgYSBqdW1wIGRlc3RpbmF0aW9uLgoJRXZlcnl0aGluZyBpcyBkZWFkIGF0IGEgQkFSUklFUi4KClRodSBEZWMgMTAgMTY6MDI6MDYgMTk5OCAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogY3NlLmMgKHNpbXBsaWZ5X3VuYXJ5X29wZXJhdGlvbik6IFNpZ24tZXh0ZW5kIGNvbnN0YW50cyB3aGVuCgl0aGV5IGhhdmUgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IHNldCBmb3IgdGhlIHRhcmdldC4KCSogcmVhbC5jIChlbmRpYW4pOiBTaWduLWV4dGVuZCAzMiBiaXQgb3V0cHV0IHZhbHVlcyBvbiBhIDY0IGJpdAoJaG9zdC4KCSogbTMyci9tMzJyLmMgKG0zMnJfZXhwYW5kX3Byb2xvZ3VlKTogU3RvcmUgcHJldGVuZF9zaXplIGluCglIT1NUX1dJREVfSU5UIHRlbXBvcmFyeSBiZWZvcmUgbmVnYXRpbmcgaXQuCgkqIG0zMnIvbTMyci5tZCAobW92c2lfaW5zbisxKTogVXNlIH4weGZmZmYgaW5zdGVhZCBvZiAweGZmZmYwMDAwLgoKVGh1IERlYyAxMCAxNTowNTo1OSAxOTk4ICBEYXZlIEJyb2xsZXkgIDxicm9sbGV5QGN5Z251cy5jb20+CgoJKiBvYmpjL29iamMtYWN0LmMgKGxhbmdfaW5pdF9vcHRpb25zKTogRW5jbG9zZSBjcHBsaWIgcmVsYXRlZCBjb2RlIGluCgkjaWYgVVNFX0NQUExJQi4KClRodSBEZWMgMTAgMTM6Mzk6NDYgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY29sbGVjdDIuaDogTmV3IGhlYWRlciBmaWxlIGZvciBwcm90b3R5cGVzLgoKCSogTWFrZWZpbGUuaW4gKGNvbGxlY3QyLm8sIHRsaW5rLm8pOiBEZXBlbmQgb24gY29sbGVjdDIuaC4KCgkqIGNvbGxlY3QyLmM6IEluY2x1ZGUgY29sbGVjdDIuaC4KCSogdGxpbmsuYzogTGlrZXdpc2UuCgpXZWQgRGVjICA5IDIzOjU1OjExIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGZsb3cuYzogVXBkYXRlIHNvbWUgY29tbWVudHMuCgpXZWQgRGVjICA5IDE1OjI5OjI2IDE5OTggIERhdmUgQnJvbGxleSAgPGJyb2xsZXlAY3lnbnVzLmNvbT4KCgkqIG9iamMvb2JqYy1hY3QuYyAoY3BwX2luaXRpYWxpemVkKTogUmVtb3ZlZC4KCShsYW5nX2luaXRfb3B0aW9ucyk6IEluaXRpYWxpemUgY3BwbGliLgoJKGxhbmdfZGVjb2RlX29wdGlvbik6IE1vdmUgaW5pdGlhbGl6YXRpb24gb2YgY3BwbGliIHRvCglsYW5nX2luaXRfb3B0aW9ucy4KCSogYy1sYW5nLmMgKHBhcnNlX29wdGlvbnMscGFyc2VfaW4pOiBBZGRlZC4KCShsYW5nX2luaXRfb3B0aW9ucyk6IEluaXRpYWxpemVkIGNwcGxpYiBoZXJlLgoJKiBjLWRlY2wuYyAocGFyc2Vfb3B0aW9ucyxjcHBfaW5pdGlhbGl6ZWQpOiBSZW1vdmVkLgoJKGNfZGVjb2RlX29wdGlvbik6IE1vdmUgaW5pdGlhbGl6YXRpb24gb2YgY3BwbGliIHRvCglsYW5nX2luaXRfb3B0aW9ucy4KCldlZCBEZWMgIDkgMTk6MzY6NTcgMTk5OCAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHJlbG9hZDEuYyAocmVsb2FkX2NvbWJpbmUsIHJlbG9hZF9jb21iaW5lX25vdGVfc3RvcmUpOgoJTWFrZSBTVE9SRV9SVUlEIGFsd2F5cyB2YWxpZC4KCShyZWxvYWRfY29tYmluZSk6IENoZWNrIGlmIEJBU0UgaXMgY2xvYmJlcmVkIHRvbyBlYXJseS4KCldlZCBEZWMgIDkgMDk6NTM6NTggMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHMpOiBEaXNwbGF5IHRoZSBpbnNuIHRoYXQgY2Fubm90IGJlCglyZWxvYWRlZC4KCldlZCBEZWMgIDkgMTI6MTU6MjYgMTk5OCAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKCSogY2NjcC5jIChjcmVhdGVfZGVmaW5pdGlvbik6IEZpeCBlbmQgb2YgYnVmZmVyIGxvZ2ljLgoKV2VkIERlYyAgOSAxMDoxNTo0NSAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBleGNlcHQuYyAoZHVwbGljYXRlX2VoX2hhbmRsZXJzLCByZXRocm93X3N5bWJvbF9tYXApOiBGdW5jdGlvbgoJcG9pbnRlciBwYXJhbWV0ZXJzIGNoYW5nZWQgdG8gdXNlIHRoZSBQQVJBTVMoKSBtYWNyby4KCldlZCBEZWMgIDkgMDk6MTI6NDAgMTk5OCAgQW5kcmV3IE1hY0xlb2QgIDxhbWFjbGVvZEBjeWdudXMuY29tPgoKCSogZXhjZXB0LmggKHN0cnVjdCBoYW5kbGVyX2luZm8pOiBBZGQgaGFuZGxlcl9udW1iZXIgZmllbGQuCgkqIGV4Y2VwdC5jIChnZW5fZXhjZXB0aW9uX2xhYmVsKTogRUggbGFiZWxzIG5vIGxvbmdlciBuZWVkIHRvIGJlCglvbiB0aGUgcGVybWFuZW50IG9ic3RhY2suCgkoZ2V0X25ld19oYW5kbGVyKTogU2V0IHRoZSBsYWJlbCBudW1iZXIgZmllbGQuCgkob3V0cHV0X2V4Y2VwdGlvbl90YWJsZV9lbnRyeSk6IFJlZ2VuZXJhdGUgaGFuZGxlciBsYWJlbCByZWZlcmVuY2UKCWZyb20gdGhlIGxhYmVsIG51bWJlciBmaWVsZC4KCShpbml0X2VoKTogUmVtb3ZlIGEgYmxhbmsgbGluZS4KCSogaW50ZWdyYXRlLmMgKGdldF9sYWJlbF9mcm9tX21hcCk6IExhYmVscyBubyBsb25nZXIgbmVlZCB0byBiZQoJb24gdGhlIHBlcm1hbmVudCBvYnN0YWNrLgoKVHVlIERlYyAgOCAyMjowNDozMyAxOTk4ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBpOTYwL2k5NjAuaCAoQ09OU1RfQ09TVFMsIGNhc2UgQ09OU1RfSU5UKTogQWNjZXB0IHBvd2VyMl9vcGVyYW5kCglvbmx5IHdoZW4gT1VURVJfQ09ERSBpcyBTRVQuCgpUdWUgRGVjICA4IDIyOjQ3OjE1IDE5OTggIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBsb29wLmMgKHN0cmVuZ3RoX3JlZHVjZSk6IElmIHNjYW5fc3RhcnQgcG9pbnRzIHRvIHRoZSBsb29wIGV4aXQKCXRlc3QsIGJlIHdhcnkgb2Ygc3VidmVyc2l2ZSB1c2Ugb2YgZ290b3MgaW5zaWRlIGV4cHJlc3Npb24gc3RhdGVtZW50cy4KCURvbid0IHNldCBtYXliZV9tdWx0aXBsZSBmb3IgYSBiYWNrd2FyZCBqdW1wIHRoYXQgZG9lcyBub3QKCWluY2x1ZGUgdGhlIGxhYmVsIHVuZGVyIGNvbnNpZGVyYXRpb24gaW50byBpdHMgcmFuZ2UuCgkqIHVucm9sbC5jIChiaXZfdG90YWxfaW5jcmVtZW50KTogTWFrZSB1c2Ugb2YgbWF5YmVfbXVsdGlwbGUgZmllbGQuCgpUdWUgRGVjICA4IDIyOjMzOjE4IDE5OTggIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBleHBsb3cuYyAocGx1c19jb25zdGFudF93aWRlKTogRG9uJ3QgaW1tZWRpYXRlbHkgcmV0dXJuIHdpdGgKCXJlc3VsdCBvZiByZWN1cnNpdmUgY2FsbC4KClR1ZSBEZWMgIDggMTU6MzI6NTYgMTk5OCAgQW5kcmV3IE1hY0xlb2QgIDxhbWFjbGVvZEBjeWdudXMuY29tPgoKCSogZWgtY29tbW9uLmggKHN0cnVjdCBlaF9jb250ZXh0KTogQWRkIHRhYmxlX2luZGV4IGZvciByZXRocm93cy4KCgkqIHJ0bC5oIChlbnVtIHJlZ19ub3RlKTogQWRkIFJFR19FSF9SRUdJT04gYW5kIFJFR19FSF9SRVRIUk9XIHJlZyBub3Rlcy4KCShTWU1CT0xfUkVGX05FRURfQURKVVNUKTogTmV3IGZsYWcgaW5kaWNhdGluZyBzeW1ib2wgbmVlZHMgdG8gYmUKCXByb2Nlc3NlZCB3aGVuIGlubGluZWQgb3IgdW5yb2xsZWQgKGllIGR1cGxpY2F0ZWQgaW4gc29tZSB3YXkpLgoKCSogcnRsLmMgKHJlZ19ub3RlX25hbWUpOiBBZGQgc3RyaW5ncyBmb3IgbmV3IHJlZ19ub3RlIGVudW1zLgoKCSogZXhwci5oIChyZXRocm93X2xpYmZ1bmMpOiBOZXcgbGlicmFyeSBkZWNsLgoKCSogb3B0YWJzLmMgKHJldGhyb3dfbGliZnVuYyk6IEluaXRpYWxpemUuCgoJKiBleGNlcHQuaCAoc3RydWN0IGVoX2VudHJ5KTogQWRkIG5ldyBmaWVsZCAncmV0aHJvd19sYWJlbCcuCgkobmV3X2VoX3JlZ2lvbl9lbnRyeSk6IE5vIGxvbmdlciBleHBvcnRlZCBmcm9tIGV4Y2VwdC5jLgoJKGR1cGxpY2F0ZV9oYW5kbGVycyk6IFJlbmFtZWQgdG8gZHVwbGljYXRlX2VoX2hhbmRsZXJzIGFuZAoJZGlmZmVyZW50IHByb3RvdHlwZS4KCShyZXRocm93X3N5bWJvbF9tYXAsIHJldGhyb3dfdXNlZCk6IE5ldyBleHBvcnRlZCBmdW5jdGlvbnMuCgkoZWhfcmVnaW9uX2Zyb21fc3ltYm9sKTogTmV3IGV4cG9ydGVkIGZ1bmN0aW9uLgoKCSogZXhjZXB0LmMgKGNyZWF0ZV9yZXRocm93X3JlZik6IE5ldyBmdW5jdGlvbiB0byBjcmVhdGUgYSBzaW5nbGUKCVNZTUJPTF9SRUYgZm9yIGEgcmV0aHJvdyByZWdpb24uCgkocHVzaF9laF9lbnRyeSk6IEluaXRpYWxpemUgYSByZXRocm93IHJlZi4KCShmdW5jX2VoX2VudHJ5KTogQWRkIGEgcmV0aHJvd19sYWJlbCBmaWVsZC4KCShuZXdfZWhfcmVnaW9uX2VudHJ5KTogTWFrZSBzdGF0aWMsIGFuZCBpbml0aWFsaXplIHRoZSByZXRocm93IGVudHJ5LgoJKGR1cGxpY2F0ZV9laF9oYW5kbGVycyk6IENyZWF0ZSBhIG5ldyByZWdpb24sIGFuZCByZW1hcCBsYWJlbHMvc3ltYm9scy4KCShlaF9yZWdpb25fZnJvbV9zeW1ib2wpOiBGaW5kIGFuIEVIIHJlZ2lvbiBiYXNlZCBvbiBpdHMgcmV0aHJvdyBzeW1ib2wuCgkocmV0aHJvd19zeW1ib2xfbWFwKTogR2l2ZW4gYSBsYWJlbCBtYXAsIG1hcHMgYSByZXRocm93IHN5bWJvbCBmb3IKCWEgcmVnaW9uIGludG8gYW4gYXBwcm9wcmlhdGUgbmV3IHN5bWJvbC4KCShyZXRocm93X3VzZWQpOiBJbmRpY2F0ZSB3aGV0aGVyIGEgcmV0aHJvdyBzeW1ib2wgaGFzIGJlZW4gcmVmZXJlbmNlZC4KCShleHBhbmRfZWhfcmVnaW9uX2VuZCk6IERvbid0IGlzc3VlIGp1bXAgYXJvdW5kIGNvZGUgZm9yIG5ldy1leGNlcHRpb25zLgoJKGVuZF9jYXRjaF9oYW5kbGVyKTogRW1pdCBhIGJhcnJpZXIgZm9yIG5ldy1leGNlcHRpb25zIHNpbmNlCgljb250cm9sIGNhbiBuZXZlciBkcm9wIHRocm91Z2ggdGhlIGVuZCBvZiBhIGNhdGNoIGJsb2NrLgoJKGV4cGFuZF9lbmRfYWxsX2NhdGNoKTogbmV3LWV4Y2VwdGlvbnMgbmV2ZXIgZmFsbCB0aHJvdWdoIGEgY2F0Y2gKCWJsb2NrLgoJKGV4cGFuZF9yZXRocm93KTogVXNlIF9fcmV0aHJvdyByb3V0aW5lIGZvciBuZXcgZXhjZXB0aW9ucy4KCShvdXRwdXRfZXhjZXB0aW9uX3RhYmxlX2VudHJ5KTogR2VuZXJhdGUgcmV0aHJvdyBsYWJlbHMsIGlmIG5lZWRlZC4KCShvdXRwdXRfZXhjZXB0aW9uX3RhYmxlKTogR2VuZXJhdGUgc3RhcnQgYW5kIGVuZCByZXRocm93IGxhYmVscy4KCShpbml0X2VoKTogQ3JlYXRlIHJldGhyb3cgc3ltYm9scyBmb3IgYmVnaW5uaW5nIGFuZCBlbmQgb2YgdGFibGUuCgkoc2Nhbl9yZWdpb24pOiBEb24ndCBlbGltaW5hdGUgRUggcmVnaW9ucyB3aGljaCBhcmUgdGhlIHRhcmdldHMgb2YKCXJldGhyb3dzLgoKCSogZmxvdy5jIChtYWtlX2VkZ2VzKTogQWRkIGRpZmZlcmVudCBlZGdlcyBmb3IgcmV0aHJvdyBjYWxscywKCWlkZW50aWZpZWQgYnkgaGF2aW5nIHRoZSBSRUdfRUhfUkVUSFJPVyByZWcgbGFiZWwuCgkoZGVsZXRlX3VucmVhY2hhYmxlX2Jsb2Nrcyk6IERvbid0IGRlbGV0ZSByZWdpb25zIG1hcmtlcnMgd2hpY2ggYXJlCgl0aGUgdGFyZ2V0IG9mIGEgcmV0aHJvdy4KCgkqIGludGVncmF0ZS5jIChzYXZlX2Zvcl9pbmxpbmVfZWhfbGFiZWxtYXApOiBOZXcgY2FsbGJhY2sgcm91dGluZSB0bwoJYWxsb3cgc2F2ZV9mb3JfaW5saW5lX2NvcHlpbmcgdG8gY2FsbCBkdXBsaWNhdGVfZWhfaGFuZGxlcnMuCgkoc2F2ZV9mb3JfaW5saW5lX2NvcHlpbmcpOiBDYWxsIGR1cGxpY2F0ZV9laF9oYW5kbGVycyBpbnN0ZWFkIG9mCglleHBvc2luZyBpbnRlcm5hbCBkZXRhaWxzIG9mIGV4Y2VwdGlvbiByZWdpb25zLgoJKGNvcHlfZm9yX2lubGluZSk6IENoZWNrIGlmIFNZTUJPTF9SRUZzIG5lZWQgYWRqdXN0bWVudC4KCShleHBhbmRfaW5saW5lX2Z1bmN0aW9uX2VoX2xhYmVsbWFwKTogTmV3IGNhbGxiYWNrIHJvdXRpbmUgdG8KCWFsbG93IGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24gdG8gY2FsbCBkdXBsaWNhdGVfZWhfaGFuZGxlcnMuCgkoZXhwYW5kX2lubGluZV9mdW5jdGlvbik6IENhbGwgZHVwbGljYXRlX2VoX2hhbmRsZXJzIGluc3RlYWQgb2YKCWV4cG9zaW5nIGludGVybmFsIGRldGFpbHMgb2YgZXhjZXB0aW9uIHJlZ2lvbnMuCgkoY29weV9ydHhfYW5kX3N1YnN0aXR1dGUpOiBBZGp1c3QgU1lNQk9MX1JFRlMgaWYgU1lNQk9MX1JFRl9ORUVEX0FESlVTVAoJZmxhZyBpcyBzZXQuCgoJKiBsaWJnY2MyLmMgKGZpbmRfZXhjZXB0aW9uX2hhbmRsZXIpOiBHZW5lcmFsaXplIHRvIGVuYWJsZSBpdCB0bwoJcGljayB1cCBwcm9jZXNzaW5nIHdoZXJlIGl0IGxlZnQgb2ZmIGxhc3QgdGltZSBmb3IgYSByZXRocm93LgoJKF9fdW53aW5kaW5nX2NsZWFudXApOiBOZXcgZnVuY3Rpb24uIGRlYnVnIGhvb2sgd2hpY2ggaXMgY2FsbGVkIGJlZm9yZQoJdW53aW5kaW5nIHdoZW4gX190aHJvdyBmaW5kcyB0aGVyZSBpcyBub3RoaW5nIGJ1dCBjbGVhbnVwcyBsZWZ0LgoJKHRocm93X2hlbHBlcik6IENvbW1vbiBwYXJ0cyBvZiBfX3Rocm93IGV4dHJhY3RlZCBvdXQgZm9yIHJldXNlLgoJKF9fdGhyb3cpOiBDb21tb24gcGFydHMgbW92ZWQgdG8gdGhyb3dfaGVscGVyLgoJKF9fcmV0aHJvdyk6IE5ldyBmdW5jdGlvbiBmb3IgcGVyZm9ybWluZyByZXRocm93cy4KClR1ZSBEZWMgIDggMTM6MTE6MDQgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcmVsb2FkMS5jIChjdXJyZW50X2Z1bmN0aW9uX2RlY2wpOiBUd2VhayBkZWNsYXJhdGlvbi4KClR1ZSBEZWMgIDggMTA6MjM6NTIgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGMtZGVjbC5jIChmbGFnX2lzb2M5eCk6IERlZmF1bHQgb2ZmLgoJKGNfZGVjb2RlX29wdGlvbik6IEtpbGwgLXN0ZD1nbnUsIGFkZCAtc3RkPWdudTg5IGFuZCAtc3RkPWdudTl4LgoJKiBjY2NwLmMgKHByaW50X2hlbHAsIG1haW4pOiBMaWtld2lzZS4KCSogZ2NjLmMgKGRlZmF1bHRfY29tcGlsZXJzKTogVXBkYXRlIGZvciAtc3RkPWdudSouCgpUdWUgRGVjICA4IDAxOjE0OjQ2IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluIChERU1BTkdMRV9IKTogQ2hhbmdlIGxvY2F0aW9uIHRvIHNoYXJlZCBkZW1hbmdsZS5oLgoJKiBkZW1hbmdsZS5oOiBEZWxldGVkLgoKCSogcmVsb2FkMS5jIChjdXJyZW50X2Z1bmN0aW9uX2RlY2wpOiBEZWNsYXJlLgoKVHVlIERlYyAgOCAxMTo1ODo1MSAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjcHBsaWIuYyAoY29udmVydF9zdHJpbmcpOiBVc2UgYDB4MDBmZicsIG5vdCBgMHgwMGZmVScuCgpUdWUgRGVjICA4IDA5OjI4OjM2IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGRieG91dC5jOiBJZiBVU0cgaXMgZGVmaW5lZCB1c2UgZ3N0YWIuaCwgZXZlbiBpZiBIQVZFX1NUQUJfSCBpcyBzZXQuCgoxOTk4LTEyLTA4ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogVGVzdCBmb3IgYXZhaWxhYmlsaXR5IG9mIHB1dGNfdW5sb2NrZWQsIGZwdXRjX3VubG9ja2VkLAoJYW5kIGZwdXRzX3VubG9ja2VkLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgkqIHN5c3RlbS5oOiBJZiB0aGUgKl91bmxvY2tlZCBmdW5jdGlvbnMgYXJlIGF2YWlsYWJsZSB1c2UgdGhlbQoJaW5zdGVhZCBvZiB0aGUgbG9ja2VkIGNvdW50ZXJwYXJ0cyBieSBkZWZpbmluZyBtYWNyb3MuCgkqIGNvbmZpZy5pbjogUmVnZW5lcmF0ZWQuCgpUdWUgRGVjICA4IDAwOjM0OjA1IDE5OTggIE1pa2UgU3R1bXAgIDxtcnNAd3JzLmNvbT4KCgkqIGkzODYvYnNkLmggKEFTTV9GSUxFX1NUQVJUKTogRG9uJ3QgdXNlIGR1bXBfYmFzZV9uYW1lLCBpdCBpcwoJd3JvbmcgYW5kIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIGR1bXAgcmVsYXRlZCB0aGluZ3MsIG5vdAoJZGVidWdnaW5nIGluZm9ybWF0aW9uLCBpbnN0ZWFkIG1haW5faW5wdXRfZmlsZW5hbWUgc2hvdWxkIGJlIHVzZWQuCglBbHNvLCByZXVzZSBvdXRwdXRfZmlsZV9kaXJlY3RpdmUgaWYgcG9zc2libGUuCgkqIGkzODYvYWl4Mzg2bmcuaCAoQVNNX0ZJTEVfU1RBUlQpOiBMaWtld2lzZS4KCSogaTM4Ni9pc2MuaCAoQVNNX0ZJTEVfU1RBUlQpOiBMaWtld2lzZS4KCSogaTM4Ni93aW4tbnQuaCAoQVNNX0ZJTEVfU1RBUlQpOiBMaWtld2lzZS4KCSogaTM4Ni9zdW4zODYuaCAoQVNNX0ZJTEVfU1RBUlQpOiBMaWtld2lzZS4KCk1vbiBEZWMgIDcgMjM6NTY6MjggMTk5OCAgUm9iZXJ0IExpcGUgIDxyb2JlcnRsQGRnaWkuY29tPgoKCSogY29uZmlndXJlLmluIChtaXBzKi0qLWxpbnV4Kik6IEhhbmRsZSBiaWcgYW5kIGxpdHRsZSBlbmRpYW4KCXN5c3RlbXMuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KCk1vbiBEZWMgIDcgMjM6MTQ6NTEgMTk5OCAgTWlrZSBTdHVtcCAgPG1yc0B3cnMuY29tPgoKCSogZW1pdC1ydGwuYzogRml4IHR5cG8uCgpNb24gRGVjICA3IDIzOjA3OjM4IDE5OTggIE5hdGhhbiBTaWR3ZWxsICA8bmF0aGFuQGFjbS5vcmc+CgoJKiByZWxvYWQxLmMgKGVsaW1pbmF0ZV9yZWdzKTogRG9uJ3QgZG8gYW55dGhpbmcsIGlmIHdlJ3JlIG5vdAoJZ2VuZXJhdGluZyBjb2RlLgoKTW9uIERlYyAgNyAxNToyNzowOSAxOTk4ICBESiBEZWxvcmllICA8ZGpAY3lnbnVzLmNvbT4KCgkqIG1pcHMvbWlwcy5oIChFTkNPREVfU0VDVElPTl9JTkZPKTogSGFuZGxlIFRBUkdFVF9FTUJFRERFRF9EQVRBLgoJQWRkIGNvbW1lbnQuCgkqIG1pcHMvbWlwcy5jIChtaXBzX3NlbGVjdF9zZWN0aW9uKTogQWRkIGNvbW1lbnQuCgpNb24gRGVjICA3IDE3OjU1OjA2IDE5OTggIE1pa2UgU3R1bXAgIDxtcnNAd3JzLmNvbT4KCgkqIGNjY3AuYyAoaWdub3JlX2VzY2FwZV9mbGFnKTogQWRkIHN1cHBvcnQgZm9yIFwgYXMgYG5hdHVyYWwnCgljaGFyYWN0ZXJzIGluIGZpbGUgbmFtZXMgaW4gI2xpbmUgdG8gYmUgY29uc2lzdGVudCB3aXRoICNpbmNsdWRlCgloYW5kbGluZy4gIFdlIHN1cHBvcnQgZXNjYXBlIHByb2Nlc3NpbmcgaW4gdGhlICMgMSAiLi4uIiB2ZXJzaW9uIG9mCgl0aGUgY29tbWFuZC4gIFNlZSBhbHNvIHN1cHBvcnQgaW4gY3AvbGV4LmMuCgkoaGFuZGxlX2RpcmVjdGl2ZSk6IExpa2V3aXNlLgoJKGRvX2xpbmUpOiBMaWtld2lzZS4KCjE5OTgtMTItMDcgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkucGh5cy5jb2x1bWJpYS5lZHU+CgoJKiBjcHBsaWIuYyAoaW5pdGlhbGl6ZV9jaGFyX3N5bnRheCk6IFVzZSBJU0FMUEhBIGFuZCBJU0FMTlVNCgkgIHNvIGl0J2xsIHdvcmsgb24gbm9uLUFTQ0lJIHBsYXRmb3Jtcy4gIEFsd2F5cyBjb25zaWRlciAkIGFuCgkgIGlkZW50aWZpZXIgY2hhcmFjdGVyLiAgVGFrZSBubyBhcmd1bWVudHMuCgkgIChjcHBfcmVhZGVyX2luaXQpOiBDYWxsIGluaXRpYWxpemVfY2hhcl9zeW50YXggd2l0aCBubwoJICBhcmd1bWVudHMuCgkgIChjcHBfc3RhcnRfcmVhZCk6IERvbid0IGNhbGwgaW5pdGlhbGl6ZV9jaGFyX3N5bnRheCBhZ2Fpbi4KCSAgQ2xlYXIgaXNfaWRjaGFyWyckJ10gYW5kIGlzX2lkc3RhcnRbJyQnXSBpZiBub3QKCSAgb3B0cy0+ZG9sbGFyc19pbl9pZGVudC4KCgkqIGNwcGxpYi5oIChzdHJ1Y3QgY3BwX3JlYWRlcik6IFJlcGxhY2Ugdm9pZCAqZGF0YSBlbGVtZW50IGJ5CgkgIGNwcF9vcHRpb25zICpvcHRzLiAgUmVhcnJhbmdlIGVsZW1lbnRzIHRvIG1ha2UgZ2RiIHByaW50b3V0CgkgIGxlc3MgYW5ub3lpbmcgKHB1dCBidWZmZXIgc3RhY2sgYXQgZW5kKS4KCSAgKENQUF9PUFRJT05TKTogR2V0IHJpZCBvZiBub3ctdW5uZWNlc3NhcnkgY2FzdC4KCgkqIGNwcG1haW4uYzogcy9kYXRhL29wdHMvIHdoZW4gaW5pdGlhbGl6aW5nIGNwcF9yZWFkZXIKCSAgc3RydWN0dXJlLgoJKiBjLWRlY2wuYzogTGlrZXdpc2UuCgkqIG9iamMvb2JqYy1hY3QuYzogTGlrZXdpc2UuCgkqIGZpeC1oZWFkZXIuYzogTGlrZXdpc2UuCgoxOTk4LTEyLTA3ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLnBoeXMuY29sdW1iaWEuZWR1PgoKCSogY3BwbGliLmggKHN0cnVjdCBjcHBfYnVmZmVyKTogUmVwbGFjZSBkaXIgYW5kIGRsZW4gbWVtYmVycwoJd2l0aCBhIHN0cnVjdCBmaWxlX25hbWVfbGlzdCBwb2ludGVyLgoJKHN0cnVjdCBjcHBfcmVhZGVyKTogQWRkIHBvaW50ZXIgdG8gY2hhaW4gb2YgYGFjdHVhbAoJZGlyZWN0b3J5JyBpbmNsdWRlIHNlYXJjaHBhdGggZW50cmllcy4KCShzdHJ1Y3QgZmlsZV9uYW1lX2xpc3QpOiBBZGQgKmFsbG9jIHBvaW50ZXIgZm9yIHRoZSBzYWtlIG9mCgl0aGUgYWN0dWFsLWRpcmVjdG9yeSBjaGFpbi4KCglNb3ZlIGRlZmluaXRpb24gb2YgSE9TVF9XSURFX0lOVCBoZXJlLgoJKGNwcF9wYXJzZV9lc2NhcGUpOiBDaGFuZ2UgcHJvdG90eXBlIHRvIG1hdGNoIGNoYW5nZXMgaW4KCWNwcGV4cC5jLgoKCSogY3BwZmlsZXMuYyAoYWN0dWFsX2RpcmVjdG9yeSk6IE5ldyBmdW5jdGlvbi4KCShmaW5jbHVkZSk6IFVzZSBpdCB0byBpbml0aWFsaXplIHRoZSBidWZmZXIncyBhY3R1YWxfZGlyCgllbnRyeS4KCShmaW5kX2luY2x1ZGVfZmlsZSk6IFdlIGRvbid0IG5lZWQgdG8gZml4IHVwIG1heF9pbmNsdWRlX2xlbgoJaGVyZS4KCgkqIGNwcGxpYi5jIChkb19pbmNsdWRlKTogRG9uJ3QgYWxsb2NhdGUgYSBmaWxlX25hbWVfbGlzdCBvbgoJdGhlIGZseSBmb3IgY3VycmVudCBkaXJlY3RvcnkgIiIgaW5jbHVkZXMsIHVzZSB0aGUgb25lIHRoYXQncwoJYmVlbiBwcmVhbGxvY2F0ZWQgaW4gcGZpbGUtPmJ1ZmZlci0+YWN0dWFsX2Rpci4gIEhvaXN0IG91dAoJZHVwbGljYXRlIGNvZGUgZnJvbSB0aGUgc2VhcmNoX3N0YXJ0IHNlbGVjdGlvbiBsb2dpYy4KCShjcHBfcmVhZGVyX2luaXQpOiBJbml0aWFsaXplIHBmaWxlLT5hY3R1YWxfZGlycy4KCglSZW1vdmUgZGVmaW5pdGlvbiBvZiBIT1NUX1dJREVfSU5ULiAgQ2hhbmdlIGNhbGxzCgl0byBjcHBfcGFyc2VfZXNjYXBlIHRvIG1hdGNoIGNoYW5nZXMgaW4gY3BwZXhwLmMgKG5vdGUKCWhhcmRjb2RlZCBNQVNLLCB3aGljaCBpcyBzYWZlIHNpbmNlIHRoaXMgaXMgdGhlIHNvdXJjZQoJY2hhcmFjdGVyIHNldCkuCgoJKiBjcHBleHAuYzogQnJpbmcgb3ZlciBjaGFuZ2VzIHRvIGNwcF9wYXJzZV9lc2NhcGUgZnJvbSBjY2NwLmMKCXRvIGhhbmRsZSB3aWRlIGNoYXJhY3RlciBjb25zdGFudHMgaW4gI2lmIGRpcmVjdGl2ZXMuICBUaGUKCWZ1bmN0aW9uIG5vdyByZXR1cm5zIGEgSE9TVF9XSURFX0lOVCwgYW5kIHRha2VzIGEgdGhpcmQKCWFyZ3VtZW50IHdoaWNoIGlzIGEgYmluYXJ5IG1hc2sgZm9yIGFsbCBsZWdhbCB2YWx1ZXMgKDB4MDBmZgoJZm9yIDgtYml0IGBjaGFyJywgMHhmZmZmIGZvciAxNi1iaXQgYHdjaGFyX3QnLCBldGMuKSAgRGVmaW5lCglNQVhfQ0hBUl9UWVBFX01BU0sgYW5kIE1BWF9XQ0hBUl9UWVBFX01BU0suICBDaGFuZ2UgY2FsbGVycyBvZgoJY3BwX3BhcnNlX2VzY2FwZSB0byBtYXRjaC4gIFtGaXhlcyBjLXRvcnR1cmUvZXhlY3V0ZS93aWRlY2hhci0xLmNdCgpNb24gRGVjICA3IDE1OjM4OjI1IDE5OTggIERhdmUgQnJvbGxleSAgPGJyb2xsZXlAY3lnbnVzLmNvbT4KCgkqIGdjYy5jIChkZWZhdWx0X2NvbXBpbGVycyk6IEZpeCB0eXBvIGluIFVTRV9DUFBMSUIgc3BlYyBmb3IgY2MxLgoKTW9uIERlYyAgNyAxNTozODoyNSAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjLWF1eC1pbmZvLmMgKGNvbmNhdCk6IFdyYXAgZnVuY3Rpb24gZGVmaW5pdGlvbiBpbiAhVVNFX0NQUExJQi4KCSogY3BwYWxsb2MuYzogTW92ZSBmdW5jdGlvbiBgeGNhbGxvYycgZnJvbSBjcHBsaWIuYyB0byBoZXJlLgoJKiBjcHBsaWIuYzogTW92ZSBmdW5jdGlvbiBgeGNhbGxvYycgZnJvbSBoZXJlIHRvIGNwcGFsbG9jLmMuCgpNb24gRGVjICA3IDExOjMwOjQ5IDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBmaW5hbC5jIChvdXRwdXRfYXNtX25hbWUpOiBVc2UgdGFicyB0byBzZXBhcmF0ZSBjb21tZW50cyBmcm9tCglhc3NlbWJseSB0ZXh0LgoKCUluY2x1ZGUgaW5zdHJ1Y3Rpb24gbGVuZ3RocyAoaWYgZGVmaW5lZCkgaW4gb3V0cHV0LgoKTW9uIERlYyAgNyAxMDo1MzozOCAxOTk4ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBsb29wLmMgKGNoZWNrX2RicmFfbG9vcCk6IEZpeCBpbml0aWFsX3ZhbHVlIGFuZCBpbml0aWFsX2VxdWl2X3ZhbHVlCglpbiB0aGUgbG9vcF9pbmZvIHN0cnVjdHVyZS4KCk1vbiBEZWMgIDcgMTE6MDQ6NDAgMTk5OCAgQ2F0aGVyaW5lIE1vb3JlICA8Y2xtQGN5Z251cy5jb20+CgoJKiBjb25maWd1cmUuaW4gKGFybSotKi1lY29zLWVsZik6IE5ldyB0YXJnZXQuCgkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZWQuCgkqIGNvbmZpZy9hcm0vZWxmLmggKEFTTV9XRUFLRU5fTEFCRUwpOiBEZWZpbmUuCgkqIGNvbmZpZy9hcm0vZWNvcy1lbGYuaDogTmV3IGZpbGUuCgkqIGNvbmZpZy9hcm0vdW5rbm93bi1lbGYuaCAoVEFSR0VUX1ZFUlNJT04pOiBDaGVjawoJZm9yIHJlZGVmaW5pdGlvbi4KCk1vbiBEZWMgIDcgMTY6MTU6NTEgMTk5OCAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHNoLmMgKG91dHB1dF9mYXJfanVtcCk6IEVtaXQgYnJhZiBvbmx5IGZvciBUQVJHRVRfU0gyLgoKU3VuIERlYyAgNiAwNDoxOTo0NSAxOTk4ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KClN1biBEZWMgIDYgMDU6MTY6MTYgMTk5OCAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogbG9vcC5jIChjaGVja19kYnJhX2xvb3ApOiBOZXcgYXJndW1lbnQgbG9vcF9pbmZvLiAgVXBkYXRlIGZpZWxkcwoJYXMgbmVlZGVkLgoKU3VuIERlYyAgNiAwMzo0MDoxMyAxOTk4ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KClN1biBEZWMgIDYgMDc6NDk6MjkgMTk5OCAgQWxleGFuZHJlIE9saXZhICA8b2xpdmFAZGNjLnVuaWNhbXAuYnI+CgoJKiBnY2MudGV4aSAoQnVnIFJlcG9ydGluZyk6IDQwS2IgaXMgYSBzb2Z0IGxpbWl0LCBsYXJnZXIKCWNvbXByZXNzZWQgcmVwb3J0cyBhcmUgb2sgYW5kIHByZWZlcnJlZCBvdmVyIFVSTHMuCgpTdW4gRGVjICA2IDA3OjQ1OjMzIDE5OTggIEFsZXhhbmRyZSBPbGl2YSAgPG9saXZhQGRjYy51bmljYW1wLmJyPgoKCSogaW52b2tlLnRleGkgKFdhcm5pbmcgT3B0aW9ucyk6IFNvZnRlbiB0aGUgdG9uZSBvZiAtcGVkYW50aWMuCgpTdW4gRGVjICA2IDAwOjIwOjQ0IDE5OTggIEguSi4gTHUgIChoamxAZ251Lm9yZykKCgkqIHByaW50LXJ0bC5jIChwcmludF9ydHgpOiBBZGQgcHJvdG90eXBlLgoKCSogdW5yb2xsLmMgKGl0ZXJhdGlvbl9pbmZvKTogTWFrZSBpdCBzdGF0aWMuCgpTdW4gRGVjICA2IDAxOjE5OjQ2IDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbGlhcy5jIChtZW1yZWZzX2NvbmZsaWN0X3ApOiBBIHNlY29uZCBBTkRlZCBhZGRyZXNzCglkaXNhYmxlcyB0aGUgYWxpZ25lZCBhZGRyZXNzIG9wdGltaXphdGlvbi4KClNhdCBEZWMgIDUgMTg6NDg6MjUgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGFscGhhLmMgKGFscGhhX2VtaXRfc2V0X2NvbnN0XzEpOiBGaXggcGFyZW50aGVzaXMgZXJyb3IKCWluIC1jIDw8IG4gY2FzZS4KClNhdCBEZWMgIDUgMTU6MTQ6NTIgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogaTk2MC5oIChCT09MX1RZUEVfU0laRSk6IERlZmluZS4KClN1biBEZWMgIDYgMDA6Mjg6MTYgMTk5OCAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHguYyAodmFsaWRfcGFyYWxsZWxfbG9hZF9zdG9yZSk6IEZsb2cgZnVuY3Rpb25hbGl0eQoJZnJvbSBvbGQgdmFsaWRfcGFyYWxsZWxfb3BlcmFuZHNfNC4KCSh2YWxpZF9wYXJhbGxlbF9vcGVyYW5kc180KTogQ2hlY2sgdGhhdCBvcGVyYW5kcyBmb3IgNCBvcGVyYW5kCglwYXJhbGxlbCBpbnNucyBhcmUgdmFsaWQsIGV4Y2x1ZGluZyBsb2FkL3N0b3JlIGluc25zLgoJKiBjb25maWcvYzR4L2M0eC5oICh2YWxpZF9wYXJhbGxlbF9sb2FkX3N0b3JlKTogQWRkIHByb3RvdHlwZS4KCSogY29uZmlnL2M0eC9jNHgubWQgKCptb3ZxZl9wYXJhbGxlbCwgKm1vdnFpX3BhcmFsbGVsKTogVXNlCgl2YWxpZF9wYXJhbGxlbF9sb2FkX3N0b3JlIGluc3RlYWQgb2YgdmFsaWRfcGFyYWxsZWxfb3BlcmFuZHNfNC4KCSgqYWJzcWYyX21vdnFmX2Nsb2JiZXIsICpmbG9hdHFpcWYyX21vdnFmX2Nsb2JiZXIsCgkqbmVncWYyX21vdnFmX2Nsb2JiZXIsICphYnNxaTJfbW92cWlfY2xvYmJlciwKCSpmaXhxZnFpMl9tb3ZxaV9jbG9iYmVyLCAqbmVncWkyX21vdnFpX2Nsb2JiZXIsCgkqbm90cWlfbW92cWlfY2xvYmJlcik6IFVzZSB2YWxpZF9wYXJhbGxlbF9vcGVyYW5kc180LgoJKCpzdWJxZjNfbW92cWZfY2xvYmJlciwgKmFzaGxxaTNfbW92cWlfY2xvYmJlciwKCSphc2hycWkzX21vdnFpX2Nsb2JiZXIsICpsc2hycWkzX21vdnFpX2Nsb2JiZXIsCgkqc3VicWkzX21vdnFpX2Nsb2JiZXIpOiBVc2UgdmFsaWRfcGFyYWxsZWxfb3BlcmFuZHNfNS4KClNhdCBEZWMgIDUgMjM6NTI6MDEgMTk5OCAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHguYyAoaXRlcmF0aW9uX2luZm8pOiBEZWxldGUgZXh0ZXJuLgoKRnJpIERlYyAgNCAyMDoxNTo1NyAxOTk4ICBCZXJuZCBTY2htaWR0ICA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CgoJKiB0bS50ZXhpIChTTUFMTF9SRUdJU1RFUl9DTEFTU0VTKTogTWFrZSBkZXNjcmlwdGlvbiBtYXRjaCByZWFsaXR5LgoKCSogZmluYWwuYyAoY2xlYW51cF9zdWJyZWdfb3BlcmFuZHMpOiBEZWxldGUgc29tZSB1bnVzZWQgY29kZS4KCgkqIHJlY29nLmggKE1BWF9SRUNPR19BTFRFUk5BVElWRVMpOiBOZXcgbWFjcm8uCgkoc3RydWN0IGluc25fYWx0ZXJuYXRpdmUpOiBOZXcgc3RydWN0dXJlIGRlZmluaXRpb24uCgkocmVjb2dfb3BfYWx0KTogRGVjbGFyZSB2YXJpYWJsZS4KCShwcmVwcm9jZXNzX2NvbnN0cmFpbnRzKTogRGVjbGFyZSBmdW5jdGlvbi4KCSogcmVjb2cuYyAocmVjb2dfb3BfYWx0KTogTmV3IHZhcmlhYmxlLgoJKGV4dHJhY3RfaW5zbik6IFZlcmlmeSBudW1iZXIgb2YgYWx0ZXJuYXRpdmVzIGlzIGluIHJhbmdlLgoJKHByZXByb2Nlc3NfY29uc3RyYWludHMpOiBOZXcgZnVuY3Rpb24uCgkqIHJlZy1zdGFjay5jOiBJbmNsdWRlIHJlY29nLmguCgkoY29uc3RyYWluX2FzbV9vcGVyYW5kcyk6IERlbGV0ZS4KCShnZXRfYXNtX29wZXJhbmRfbGVuZ3Rocyk6IERlbGV0ZS4KCShnZXRfYXNtX29wZXJhbmRfbl9pbnB1dHMpOiBOZXcgZnVuY3Rpb24uCgkocmVjb3JkX2FzbV9yZWdfbGlmZSk6IERlbGV0ZSBPUEVSQU5EUywgQ09OU1RSQUlOVFMsIE5fSU5QVVRTIGFuZAoJTl9PVVRQVVRTIGFyZ3MuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgoJQ29tcHV0ZSBudW1iZXIgb2YgaW5wdXRzIGFuZCBvdXRwdXRzIGhlcmUgYnkgY2FsbGluZwoJZ2V0X2FzbV9vcGVyYW5kX25faW5wdXRzLgoJSW5zdGVhZCBvZiBjb25zdHJhaW5fYXNtX29wZXJhbmRzLCBjYWxsIGV4dHJhY3RfaW5zbiwKCWNvbnN0cmFpbl9vcGVyYW5kcyBhbmQgcHJlcHJvY2Vzc19jb25zdHJhaW50cy4gIFVzZSBpbmZvcm1hdGlvbgoJY29tcHV0ZWQgYnkgdGhlc2UgZnVuY3Rpb25zIHRocm91Z2hvdXQuCgkocmVjb3JkX3JlZ19saWZlKTogRGVsZXRlIGNvZGUgdGhhdCBpcyB1bnVzZWQgZHVlIHRvIGNoYW5nZXMgaW4KCXJlY29yZF9hc21fcmVnX2xpZmUuCgkoc3Vic3RfYXNtX3N0YWNrX3JlZ3MpOiBEZWxldGUgT1BFUkFORFMsIE9QRVJBTkRfTE9DLCBDT05TVFJBSU5UUywKCU5fSU5QVVRTIGFuZCBOX09VVFBVVFMgYXJncy4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCglTaW1pbGFyIGNoYW5nZXMgYXMgaW4gcmVjb3JkX2FzbV9yZWdfbGlmZS4KCShzdWJzdF9zdGFja19yZWdzKTogTW92ZSBuX29wZXJhbmRzIGRlY2xhcmF0aW9uIGludG8gdGhlIGlmIHN0YXRlbWVudAoJd2hlcmUgaXQncyB1c2VkLgoJRGVsZXRlIGNvZGUgdGhhdCBpcyB1bnVzZWQgZHVlIHRvIGNoYW5nZXMgaW4gc3Vic3RfYXNtX3N0YWNrX3JlZ3MuCgkqIHN0bXQuYyAoZXhwYW5kX2FzbV9vcGVyYW5kcyk6IFZlcmlmeSBudW1iZXIgb2YgYWx0ZXJuYXRpdmVzIGlzIGluCglyYW5nZS4KCSogTWFrZWZpbGUuaW4gKHJlZy1zdGFjay5vKTogRGVwZW5kIG9uIHJlY29nLmguCgpGcmkgRGVjICA0IDAyOjIzOjI0IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGV4Y2VwdC5jIChzZXRfZXhjZXB0aW9uX3ZlcnNpb25fY29kZSk6IEFyZ3VtZW50IGlzIGFuICJpbnQiLgoKRnJpIERlYyAgNCAwMToyOToyOCAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW4gKGhwcGEyKi0qLSopOiBIYW5kbGUgbGlrZSBocHBhMS4xLSotKiBmb3Igbm93LgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgpGcmkgRGVjICA0IDAxOjI5OjI4IDE5OTggIFJvYmVydCBMaXBlICA8cm9iZXJ0bEBkZ2lpLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiAobWlwc2VsLSotbGludXgqKTogTmV3IHRhcmdldC4KCSogbWlwcy9saW51eC5oOiBOZXcgZmlsZSwgYmFzZWQgb24gb3RoZXIgTGludXggdGFyZ2V0cy4KClRodSBEZWMgIDMgMTE6MTk6NTAgMTk5OCAgTWlrZSBTdHVtcCAgPG1yc0B3cnMuY29tPgoKCSogZ3Roci12eHdvcmtzLmggKF9fZWhkdG9yKTogRml4IG1lbW9yeSBsZWFrLiAgVGhlIGRlbGV0ZSBob29rCglydW5zIGluIHRoZSBjb250ZXh0IG9mIHRoZSBkZWxldGVyLCBub3QgdGhlIGRlbGV0ZWUsIHNvIHdlIG11c3QKCXVzZSB0YXNrVmFyR2V0IHRvIGZpbmQgdGhlIGNvcnJlY3QgbWVtb3J5IHRvIGZyZWUuCgkoX19ndGhyZWFkX2tleV9jcmVhdGUpOiBJbml0aWFsaXplIHRoZSB0YXNrCgl2YXJpYWJsZSBzdWJzeXN0ZW0gc28gdGhhdCB0aGUgdGFzayB2YXJpYWJsZSBpcyBzdGlsbCBhY3RpdmUgd2hlbgoJdGhlIGRlbGV0ZSBob29rIGlzIHJ1bi4KCjE5OTgtMTItMDMgIEpvc2VwaCBTLiBNeWVycyAgPGpzbTI4QGNhbS5hYy51az4KCgkqIHBkcDExLmg6IFVzZSBvcHRpbWl6ZV9zaXplIGZvciBzcGFjZSBvcHRpbWl6YXRpb25zLgoJKiBwZHAxMS5jOiBMaWtld2lzZS4KCSogcGRwMTEubWQ6IExpa2V3aXNlLgoKCSogcGRwMTEuaCAoVEFSR0VUXzQwX1BMVVMpOiBGaXggdHlwby4KClRodSBEZWMgIDMgMTE6NDg6MzIgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbG9jYWwtYWxsb2MuYyAoYmxvY2tfYWxsb2MpOiBTbGlnaHRseSByZXR1bmUgaGV1cmlzdGljIHRvIHdpZGVuCglxdHkgbGlmZXRpbWVzLgoKVGh1IERlYyAgMyAyMjozMDoxOCAxOTk4ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBhbGlhcy5jIChhZGRyX3NpZGVfZWZmZWN0X2V2YWwpOiBOZXcgZnVuY3Rpb24uCgkobWVtcmVmc19jb25mbGljdF9wKTogVXNlIGl0LgoJKiBydGwuaCAoYWRkcl9zaWRlX2VmZmVjdF9ldmFsKTogUHJvdG90eXBlIGl0LgoKMTk5OC0xMi0wMiAgSm9zZXBoIFMuIE15ZXJzICA8anNtMjhAY2FtLmFjLnVrPgoKCSogcGRwMTEubWQgKGV4dGVuZHNmZGYyKTogRml4IG1vZGUgbWlzbWF0Y2ggaW4gU0VULgoKV2VkIERlYyAgMiAxMToyMzowNyAxOTk4ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogV2hlbiBmb3JjZSBjb25zdCB0byBtZW1vcnksIHB1dCByZXN1bHQKCWluIHN1YnN0ZWRfb3BlcmFuZCBub3QgKnJlY29nX29wZXJhbmRfbG9jLgoKMTk5OC0xMi0wMiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CgoJKiBjLWxleC5jOiBGaXggaW5kZW50YXRpb24gZnJvbSBsYXN0IHBhdGNoLgoJUmVtb3ZlIHRyYWlsaW5nIHdoaXRlc3BhY2UuCgkqIHJlYWwuYzogTGlrZXdpc2UuCgpXZWQgRGVjICAyIDEwOjExOjEyIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGZsb3cuYyAoZGVsZXRlX2Jsb2NrKTogQ2FsbCBzZXRfbGFzdF9pbnNuIGFmdGVyIHdlIGhhdmUgcmVzZXQKCU5FWFRfSU5TTiAoa2VwdF90YWlsKS4KCldlZCBEZWMgIDIgMDA6NDc6MzEgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbWlwcy5tZCAodHJhcF9pZik6IFVzZSAiJDAiIGZvciB0aGUgdmFsdWUgemVyby4KClR1ZSBEZWMgIDEgMjA6NDk6NDkgMTk5OCAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CgkJCSAgU3RlcGhlbiBMIE1vc2hpZXIgIDxtb3NoaWVyQHdvcmxkLnN0ZC5jb20+CgkJCSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGMtY29tbW9uLmMgKGRlY2xhcmVfZnVuY3Rpb25fbmFtZSk6IERlY2xhcmUgcHJlZGVmaW5lZCB2YXJpYWJsZQoJYF9fZnVuY19fJy4KCgkqIGMtZGVjbC5jIChmbGFnX2lzb2M5eCk6IFNldCB0byAxIGJ5IGRlZmF1bHQuCgkoY19kZWNvZGVfb3B0aW9uKTogSGFuZGxlIC1zdGQ9IG9wdGlvbi4gIFJlbW92ZSAtZmxhbmctaXNvYzl4LgoJKGdyb2tkZWNsYXJhdG9yKTogQWx3YXlzIGVtaXQgd2FybmluZyBhYm91dCBpbXBsaWNpdCBpbnQgZm9yIElTTyBDIDl4LgoKCSogYy1wYXJzZS5pbjogQWxsb3cgY29uc3RydWN0b3JzIGluIElTTyBDIDl4LgoJUmV3cml0ZSBkZXNpZ25hdG9yIGxpc3QgaGFuZGxpbmcuCglBbGxvdyBbKl0gcGFyYW1ldGVycy4KCURvbid0IHdhcm4gYWJvdXQgY29tbWEgYXQgZW5kIG9mIGVudW0gZGVmaW5pdGlvbiBmb3IgSVNPIEMgOXguCgoJKiBjY2NwLmMgKGM5eCk6IE5ldyB2YXJpYWJsZS4KCShyZXN0X2V4dGVuc2lvbik6IE5ldyB2YXJpYWJsZS4KCShwcmludF9oZWxwKTogRG9jdW1lbnQgbmV3IC1zdGQ9IG9wdGlvbi4KCShtYWluKTogUmVjb2duaXplIC1zdGQ9IG9wdGlvbi4gIFNldCBjOXggYXBwcm9wcmlhdGVseS4KCShjcmVhdGVfZGVmaW5pdGlvbik6IFJlY29nbml6ZSBJU08gQyA5eCB2YXJhcmcgbWFjcm9zLgoKCSogZ2NjLmMgKGRlZmF1bHRfY29tcGlsZXJzKTogQWRqdXN0IHNwZWNzIGZvciAtc3RkIG9wdGlvbnMuCgkob3B0aW9uX21hcCk6IEFkZCAtLXN0ZC4KCShkaXNwbGF5X2hlbHApOiBEb2N1bWVudCAtc3RkLgoKCSogdG9wbGV2LmMgKGRvY3VtZW50ZWRfbGFuZ19vcHRpb25zKTogQWRkIC1zdGQgYW5kIHJlbW92ZQoJLWZsYW5nLWlzb2M5eC4KCgkqIGMtbGV4LmMgKHl5bGV4KTogUmVjb2duaXplIGhleCBGUCBjb25zdGFudHMgYW5kIGNhbGwgUkVBTF9WQUxVRV9BVE9GCglvciBSRUFMX1ZBTFVFX0hUT0YgYmFzZWQgb24gYmFzZSBvZiB0aGUgY29uc3RhbnRzLgoJKiBmb2xkLWNvbnN0LmMgKHJlYWxfaGV4X3RvX2YpOiBOZXcgZnVuY3Rpb24uICBSZXBsYWNlbWVudCBmdW5jdGlvbgoJZm9yIGhleCBGUCBjb252ZXJzaW9uIGlmIFJFQUxfQVJJVEhNRVRJQyBpcyBub3QgZGVmaW5lZC4KCSogcmVhbC5jIChhc2N0b2VnKTogQWRkIGhhbmRsaW5nIG9mIGhleCBGUCBjb25zdGFudHMuCgkqIHJlYWwuaDogRGVmaW5lIFJFQUxfVkFMVUVfSFRPRiBpZiBuZWNlc3NhcnkgdXNpbmcgZXJlYWxfYXRvZiBvcgoJcmVhbF9oZXhfdG9fZi4KClR1ZSBEZWMgIDEgMTY6NDU6NDkgMTk5OCAgU3RhbiBDb3ggIDxzY294QGN5Z251cy5jb20+CgoJKiBtaXBzLm1kIChkaXZtb2RzaTQqLCBkaXZtb2RkaTQqLCB1ZGl2bW9kc2k0KiwgdWRpdm1vZGRpNCk6IEFkZAoJLW1jaGVjay1yYW5nZS1kaXZpc2lvbi8tbWNoZWNrLXplcm8tZGl2aXNpb24gY2hlY2tpbmcuICBBdm9pZCBhcyBtYWNybwoJZXhwYW5zaW9uLiAgVXNlIGhpL2xvIGFzIGRlc3RpbmF0aW9uIHJlZ2lzdGVyLgoJKGRpdl90cmFwKTogTmV3LgoJKGRpdnNpMyosIGRpdmRpMyosIG1vZHNpMyosIG1vZGRpMyosIHVkaXZzaTMqLCB1ZGl2ZGkzKiwgdW1vZHNpMyosCgl1bW9kZGkzKik6IEFkZCAtbWNoZWNrLXJhbmdlLWRpdmlzaW9uLy1tY2hlY2stemVyby1kaXZpc2lvbiBjaGVja2luZy4KCUF2b2lkIGFzIG1hY3JvIGV4cGFuc2lvbi4gIFVzZSBoaS9sbyBhcyBkZXN0aW5hdGlvbiByZWdpc3Rlci4KCgkqIG1pcHMuaCAoTUFTS19DSEVDS19SQU5HRV9ESVYpOiBOZXcuCgkoTUFTS19OT19DSEVDS19aRVJPX0RJVik6IE5ldy4KCShFTElNSU5BQkxFX1JFR1MpOiBBZGRlZCBHUF9SRUdfRklSU1QgKyAzMS4KCShDQU5fRUxJTUlOQVRFLCBJTklUSUFMX0VMSU1JTkFUSU9OX09GRlNFVCk6IEFsbG93IGZvciBnZXR0aW5nCglyZXR1cm4gYWRkcmVzcyBmb3IgbGVhZiBmdW5jdGlvbnMgb3V0IG9mIHIzMSB0byBzdXBwb3J0CglidWlsdGluX3JldHVybl9hZGRyZXNzLgoKVHVlIERlYyAgMSAxNTowMzozMCAxOTk4ICBIZXJtYW4gQS5KLiB0ZW4gQnJ1Z2dlICA8SGFqLlRlbi5CcnVnZ2VAbmV0LkhDQy5ubD4KCgkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IENhbGwgcmVnc19zZXRfYmV0d2Vlbl9wIHdpdGggUFJFVl9JTlNOKHgpLAoJTkVYVF9JTlNOKHgpIHRvIGNoZWNrIGluc24geC4KClR1ZSBEZWMgIDEgMTU6MjA6NDQgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZmxvdy5jIChkZWxldGVfYmxvY2spOiBDYWxsIHNldF9sYXN0X2luc24gaWYgd2UgZW5kIHVwIGRlbGV0aW5nIHRoZQoJbGFzdCBpbnNuIGluIHRoZSBydGwgY2hhaW4uCgoJKiByZWxvYWQxLmMgKHJlbG9hZCk6IERvIG5vdCBzZXQgcmVsb2FkX2NvbXBsZXRlZCBvciBzcGxpdCBpbnNucwoJaGVyZS4gIEluc3RlYWQuLi4KCSogdG9wbGV2LmMgKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBTZXQgcmVsb2FkX2NvbXBsZXRlZCBhZnRlcgoJcmVsb2FkIHJldHVybnMuICBTcGxpdCBpbnNucyBhZnRlciByZWxvYWRfY3NlIGhhcyBydW4uCgpUdWUgRGVjICAxIDExOjU1OjA0IDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBmaW5hbC5jIChmaW5hbF9zY2FuX2luc24pOiBBYm9ydCBpZiBibG9ja19kZXB0aCBmYWxscyBiZWxvdyAwLgoKVHVlIERlYyAgMSAxMDoyMzoxNiAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL2FybS90LWFybS1lbGYgKExJQkdDQzJfQ0ZMQUdTKTogRGVmaW5lIGluaGliaXRfbGliYy4KClR1ZSBEZWMgIDEgMTA6MjI6MTggMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9hcm0vdW5rbm93bi1lbGYuaCAoQVNNX09VVFBVVF9EV0FSRjJfQUREUl9DT05TVCk6IFJlbW92ZQoJdXNlIG9mIHVzZXItbGFiZWxfcHJlZml4LgoKVHVlIERlYyAgMSAxNzo1ODoyNiAxOTk4ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogcmVsb2FkMS5jIChlbWl0X3JlbG9hZF9pbnNucyk6IENsZWFyIHNwaWxsX3JlZ19zdG9yZQoJd2hlbiBkb2luZyBhIG5ldyBub24taW5oZXJpdGVkIHJlbG9hZCBmcm9tIHRoZSBzYW1lIHBzZXVkby4KCgkqIGxvY2FsLWFsbG9jLmMgKGZ1bmN0aW9uX2ludmFyaWFudF9wKTogTmV3IGZ1bmN0aW9uLgoJKHVwZGF0ZV9lcXVpdl9yZWdzKTogVXNlIGZ1bmN0aW9uX2ludmFyaWFudF9wIGluc3RlYWQgb2YgQ09OU1RBTlRfUAoJdG8gZGVjaWRlIGlmIGFuIGVxdWl2YWxlbmNlIHNob3VsZCBiZSByZWNvcmRlZC4KCSogcmVsb2FkMS5jIChudW1fZWxpbWluYWJsZV9pbnZhcmlhbnRzKTogTmV3IHN0YXRpYyB2YXJpYWJsZS4KCShyZWxvYWQpOiBTZXQgaXQuICBVc2UgZnVuY3Rpb25faW52YXJpYW50X3AgaW5zdGVhZCBvZiBDT05TVEFOVF9QCgl0byBkZWNpZGUgaWYgYW4gZXF1aXZhbGVuY2Ugc2hvdWxkIGJlIHJlY29yZGVkLgoJVW5zaGFyZSBQTFVTLgoJKGNhbGN1bGF0ZV9uZWVkc19hbGxfaW5zbnMpOiBTa2lwIGluc25zIHRoYXQgb25seSBzZXQgYW4gZXF1aXZhbGVuY2UuCglUYWtlIG51bV9lbGltaW5hYmxlX2ludmFyaWFudHMgaW50byBhY2NvdW50IHdoZW4gZGVjaWRpbmcKCWlmIHJlZ2lzdGVyIGVsaW1pbmF0aW9uIHNob3VsZCBiZSBkb25lLgoJKHJlbG9hZF9hc19uZWVkZWQpOiBUYWtlIG51bV9lbGltaW5hYmxlX2ludmFyaWFudHMgaW50byBhY2NvdW50Cgl3aGVuIGRlY2lkaW5nIGlmIHJlZ2lzdGVyIGVsaW1pbmF0aW9uIHNob3VsZCBiZSBkb25lLgoJKGVsaW1pbmF0ZV9yZWdzKTogSGFuZGxlIG5vbi1jb25zdGFudCByZWdfZXF1aXZfY29uc3RhbnQuCgkqIHJ0bC5oIChmdW5jdGlvbl9pbnZhcmlhbnRfcCk6IERlY2xhcmUuCgpNb24gTm92IDMwIDAyOjAwOjA4IDE5OTggIEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKTW9uIE5vdiAzMCAwMDo0Mjo1OSAxOTk4ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KClN1biBOb3YgMjkgMjI6NTk6NDAgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKGFkZF9uZXdfaGFuZGxlcik6IENvbXBsYWluIGFib3V0IGFkZGl0aW9uYWwgaGFuZGxlcnMKCWFmdGVyIG9uZSB0aGF0IGNhdGNoZXMgZXZlcnl0aGluZy4KClNhdCBOb3YgMjggMTA6NTY6MzIgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluIChhbHBoYSotKi1uZXRic2QpOiBGaXggdHlwby4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKRnJpIE5vdiAyNyAxMjoyODo1NiAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBzeXN0ZW0uaDogSW5jbHVkZSBsaWJpYmVydHkuaC4KCgkqIGMtYXV4LWluZm8uYzogUmVtb3ZlIHByb3RvdHlwZXMgZm9yIGNvbmNhdC9jb25jYXQzLiAgQ2hhbmdlCglmdW5jdGlvbiBgY29uY2F0JyBmcm9tIGZpeGVkIHBhcmFtZXRlcnMgdG8gdmFyaWFibGUgcGFyYW1ldGVycywKCWFzIGlzIGRvbmUgaW4gbGliaWJlcnR5LiAgQWxsIGNhbGxlcnMgb2YgY29uY2F0L2NvbmNhdDMKCWNoYW5nZWQgdG8gdXNlIHRoZSBuZXcgYGNvbmNhdCcgd2l0aCB2YXJpYWJsZSBhcmdzLgoKCSogY2NjcC5jOiBSZW1vdmUgdGhpbmdzIG1hZGUgcmVkdW5kYW50IGJ5IGxpYmliZXJ0eS5oIGFuZC9vcgoJY29uZm9ybSB0byBsaWJpYmVydHkgc3RhbmRhcmRzLgoJKiBjZXhwLnk6IExpa2V3aXNlLgoJKiBjb2xsZWN0Mi5jOiBMaWtld2lzZS4KCSogY29uZmlnLzE3NTBhLzE3NTBhLmg6IExpa2V3aXNlLgoJKiBjcHBhbGxvYy5jOiBMaWtld2lzZS4KCSogY3BwZXhwLmM6IExpa2V3aXNlLgoJKiBjcHBmaWxlcy5jOiBMaWtld2lzZS4KCSogY3BwaGFzaC5jOiBMaWtld2lzZS4KCSogY3BwbGliLmM6IExpa2V3aXNlLgoJKiBkeW4tc3RyaW5nLmM6IExpa2V3aXNlLgoJKiBmaXgtaGVhZGVyLmM6IExpa2V3aXNlLgoJKiBnY2MuYzogTGlrZXdpc2UuCgkqIGdjb3YuYzogTGlrZXdpc2UuCgkqIGdlbmF0dHIuYzogTGlrZXdpc2UuCgkqIGdlbmF0dHJ0YWIuYzogTGlrZXdpc2UuCgkqIGdlbmNoZWNrLmM6IExpa2V3aXNlLgoJKiBnZW5jb2Rlcy5jOiBMaWtld2lzZS4KCSogZ2VuY29uZmlnLmM6IExpa2V3aXNlLgoJKiBnZW5lbWl0LmM6IExpa2V3aXNlLgoJKiBnZW5leHRyYWN0LmM6IExpa2V3aXNlLgoJKiBnZW5mbGFncy5jOiBMaWtld2lzZS4KCSogZ2VuZ2VucnRsLmM6IExpa2V3aXNlLgoJKiBnZW5vcGluaXQuYzogTGlrZXdpc2UuCgkqIGdlbm91dHB1dC5jOiBMaWtld2lzZS4KCSogZ2VucGVlcC5jOiBMaWtld2lzZS4KCSogZ2VucmVjb2cuYzogTGlrZXdpc2UuCgkqIGdldHB3ZC5jOiBMaWtld2lzZS4KCSogaGFsZnBpYy5jOiBMaWtld2lzZS4KCSogaGFzaC5jOiBMaWtld2lzZS4KCSogbWlwcy10ZHVtcC5jOiBMaWtld2lzZS4gIFdyYXAgbWFsbG9jL3JlYWxsb2MvY2FsbG9jIHByb3RvdHlwZXMKCWluIE5FRURfREVDTEFSQVRJT05fKiBtYWNyb3MuCgoJKiBtaXBzLXRmaWxlLmM6IFJlbW92ZSB0aGluZ3MgbWFkZSByZWR1bmRhbnQgYnkgbGliaWJlcnR5LmggYW5kL29yCgljb25mb3JtIHRvIGxpYmliZXJ0eSBzdGFuZGFyZHMuCgkoZmF0YWwpOiBGaXggY29uc3QtaWZpY2F0aW9uIG9mIHZhcmlhYmxlIGBmb3JtYXQnIGluCgkhQU5TSV9QUk9UT1RZUEVTIGNhc2UuCgoJKiBwcmVmaXguYzogUmVtb3ZlIHRoaW5ncyBtYWRlIHJlZHVuZGFudCBieSBsaWJpYmVydHkuaCBhbmQvb3IKCWNvbmZvcm0gdG8gbGliaWJlcnR5IHN0YW5kYXJkcy4KCgkqIHByaW50LXJ0bC5jOiBSZW5hbWUgdmFyaWFibGUgYHNwYWNlcycgdG8gYHhzcGFjZXMnIHRvIGF2b2lkCgljb25mbGljdGluZyB3aXRoIGZ1bmN0aW9uIGBzcGFjZXMnIGZyb20gbGliaWJlcnR5LgoKCSogcHJvZmlsZS5jOiBSZW1vdmUgdGhpbmdzIG1hZGUgcmVkdW5kYW50IGJ5IGxpYmliZXJ0eS5oIGFuZC9vcgoJY29uZm9ybSB0byBsaWJpYmVydHkgc3RhbmRhcmRzLgoJKiBwcm90b2l6ZS5jOiBMaWtld2lzZS4KCSogcnRsLmg6IExpa2V3aXNlLgoJKiBzY2FuLmg6IExpa2V3aXNlLgoJKiB0bGluay5jOiBMaWtld2lzZS4KCSogdG9wbGV2LmM6IExpa2V3aXNlLgoJKiB0b3BsZXYuaDogTGlrZXdpc2UuCgkqIHRyZWUuaDogTGlrZXdpc2UuCgpUaHUgTm92IDI2IDA4OjM4OjA2IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNwcGZpbGVzLmMgKHNpbXBsaWZ5X3BhdGhuYW1lKTogVW4tQU5TSS1meSBmdW5jdGlvbiBkZWZpbml0aW9uLgoKVGh1IE5vdiAyNiAyMzo0NTozNyAxOTk4ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBSRUFETUUuQzRYOiBVcGRhdGVkIFVSTHMuCgkqIGNvbmZpZy9jNHgvYzR4LmMgKGM0eF9hZGRyZXNzX2NvbmZsaWN0KTogRml4IHR5cG8uCgkodmFsaWRfcGFyYWxsZWxfb3BlcmFuZHNfNSk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUuCgpUaHUgTm92IDI2IDIzOjQwOjAzIDE5OTggIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4LmggKFRBUkdFVF9ERUZBVUxUKTogRml4IHR5cG8uCgoxOTk4LTExLTI2ICBNYW5mcmVkIEhvbGxzdGVpbiAgPG1hbmZyZWRAcy1kaXJla3RuZXQuZGU+CgoJKiBNYWtlZmlsZS5pbiAoQ09ORklHX0xBTkdVQUdFUyk6IE5ldyBtYWNybyB0YWtpbmcgYWxsIGxhbmd1YWdlcwoJd2hpY2ggY2FuIGJlIGNvbmZpZ3VyZWQuCgkoTEFOR1VBR0VTKTogVXNlICQoQ09ORklHX0xBTkdVQUdFUykgaW5zdGVhZCBvZiBAYWxsX2xhbmd1YWdlc0AKCShNYWtlZmlsZSk6IFBhc3MgYWN0dWFsIExBTkdVQUdFUyB0aHJvdWdoIHRoZSBlbnZpcm9ubWVudCB3aGVuCglyZS1jb25maWd1cmluZy4KCShjc3RhbXAtaCk6IExpa2V3aXNlLgoJKGNvbmZpZy5zdGF0dXMpOiBMaWtld2lzZS4KCgkqIGNvbmZpZ3VyZS5pbiAoZW5hYmxlX2xhbmd1YWdlcyk6IEFkZCBuZXcgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIKCSItLWVuYWJsZS1sYW5ndWFnZXM9bGFuZzEsbGFuZzIsLi4uIi4KCSgke3NyY2Rpcn0vKi9jb25maWctbGFuZy5pbik6IENoYW5nZSBoYW5kbGluZyB0byBjb25maWd1cmUgb25seQoJdGhvc2UgZGlyZWN0b3JpZXMsIHRoYXQgdGhlIHVzZXIgbWlnaHQgaGF2ZSBlbmFibGVkOyBkZWZhdWx0IHRvCgkiYWxsIiBleGlzdGluZyBsYW5ndWFnZXMuCgkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KClRodSBOb3YgMjYgMDA6MTk6MTkgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHJ0bGFuYWwuYyAocmVnc19zZXRfYmV0d2Vlbl9wKTogTmV3IGZ1bmN0aW9uLgoJKiBydGwuaCAocmVnc19zZXRfYmV0d2Vlbl9wKTogUHJvdG90eXBlIGl0LgoJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBVc2UgaXQgaW5zdGVhZCBvZiBtb2RpZmllZF9iZXR3ZWVuX3AKCWluIHRoZSBTZXAgMiBjaGFuZ2UuCgpXZWQgTm92IDI1IDIzOjMyOjAyIDE5OTggIElhbiBEYWxsICA8SWFuLkRhbGxAZHN0by5kZWZlbmNlLmdvdi5hdT4KCQkJICBNYXR0aGlhcyBQZmFsbGVyICA8bGVvQGRhY2hhdS5tYXJjby5kZT4KCgkqIGludm9rZS50ZXhpIChPcHRpb24gU3VtbWFyeSwgTlMzMksgT3B0aW9ucyk6IEFkZCBkZXNjcmlwdGlvbgoJb2YgTlMzMksgc3BlY2lmaWMgb3B0aW9ucy4KCgkqIG5zMzJrLm1kICh0c3RkZiwgY21wZGYsIG1vdmRmLCB0cnVuY2Rmc2YyLCBmaXhkZnFpMiwgZml4ZGZoaTIsCglmaXhkZnNpMiwgZml4dW5zZGZxaTIsIGZpeHVuc2RmaGkyLCBmaXh1bnNkZnNpMiwgZml4X3RydW5jZGZxaTIsCglmaXhfdHJ1bmNkZmhpMiwgZml4X3RydW5jZGZzaTIsIGFkZGRmMywgc3ViZGYzLCBtdWxkZjMsIGRpdmRmMywKCW5lZ2RmMiwgYWJzZGYyKTogVXNlIGwgaW5zdGVhZCBvZiBmIHNpbmNlIHRoZSBkb3VibGUgY2xhc3MgYW5kCglmbG9hdCBjbGFzcyBhcmUgbm8gbG9uZ2VyIHRoZSBzYW1lLgoJKGNtcHNpLCB0cnVuY3NpcWkyLCB0cnVuY3NpaGkyLCBhZGRzaTMsIHN1YnNpMywgbXVsc2kzLCB1bXVsc2lkaTMsCglkaXZzaTMsIG1vZHNpMywgYW5kc2kzLCBpb3JzaTMsIHhvcnNpMywgbmVnc2kyLCBvbmVfY21wbHNpMiwKCWFzaGxzaTMsIGFzaGxoaTMsIGFzaGxxaTMsIHJvdGxzaTMsIHJvdGxoaTMsIHJvdGxxaTMsIGFic3NpMiwuLi4pOgoJVXNlICJnIiBpbnN0ZWFkIG9mICJybW4iIHNpbmNlIExFR0lUSU1BVEVfUElDX09QRVJBTkQgaGFzIGJlZW4KCWZpeGVkLgoJKGNtcHNpLCBjbXBoaSwgY21wcWkpOiBVc2UgZ2VuZXJhbF9vcGVyYW5kIGluc3RlYWQgb2YKCW5vbl9pbW1lZGlhdGVfb3BlcmFuZC4gUmVtb3ZlcyBlcnJvbmVvdXMgYXNzdW1wdGlvbiB0aGF0IGNhbid0Cgljb21wYXJlIGNvbnN0YW50cy4KCShtb3ZzZiwgbW92c2ksIG1vdmhpLCBtb3ZxaSwuLi4pOiBOZXcgcmVnaXN0ZXIgbnVtYmVyaW5nIHNjaGVtZS4KCShtb3ZzaSwgYWRkc2kzKTogVXNlIE5TMzJLX0RJU1BMQUNFTUVOVF9QIGluc3RlYWQgb2YgaGFyZCBjb2RlZAoJY29uc3RhbnRzLgoJKG1vdnN0cnNpLCBtb3ZzdHJzaTEsIG1vdnN0cnNpMik6IENvbXBsZXRlbHkgbmV3IGJsb2NrIG1vdmUKCXNjaGVtZS4KCSguLi4pOiBQYXR0ZXJucyB0byBleHBsb2l0IG11bHRpcGx5LWFkZCBpbnN0cnVjdGlvbnMuCgkodWRpdm1vZHNpNCwgdWRpdm1vZHNpX2ludGVybmFsNCwgdWRpdm1vZGhpNCwKCXVkaXZtb2RkaWhpNF9pbnRlcm5hbCwgdWRpdm1vZHFpNCwgdWRpdm1vZGRpcWk0X2ludGVybmFsKTogTmV3CglwYXR0ZXJucyB0byBleHBsb2l0IGV4dGVuZGVkIGRpdmlkZSBpbnNucy4KCSh1ZGl2c2kzLCB1ZGl2aGkzLCB1ZGl2cWkzKTogUmVtb3ZlIHNpbmNlIHN1cGVyc2VkZWQgYnkgdWRpdm1vZHNpCglldGMgcGF0dGVybnMuCgoJKiBuczMyay5oIChGVU5DVElPTl9WQUxVRSwgTElCQ0FMTF9WQUxVRSk6IFVzZSBmMCBmb3IgY29tcGxleAoJZmxvYXQgcmV0dXJuIHZhbHVlcyBhcyB3ZWxsIGFzIHNpbXBsZSBzY2FsYXIgZmxvYXRzLgoJKFRBUkdFVF8zMjM4MSwgVEFSR0VUX01VTFRfQURELCBUQVJHRVRfU1dJVENIRVMpOgoJU3VwcG9ydCBuZXcgZmxhZyB0byBkZW5vdGUgMzIzODEgZnB1LgoJKE9WRVJSSURFX09QVElPTlMpOiAzMjM4MSBpcyBhIHN0cmljdCBzdXBlcnNldCBvZiAzMjA4MS4KCShDT05ESVRJT05BTF9SRUdJU1RFUl9VU0FHRSk6IERpc2FibGUgZXh0cmEgMzIzODEgcmVnaXN0ZXJzIGlmIG5vdAoJY29tcGlsaW5nIGZvciAzMjM4MS4KCShGSVJTVF9QU0VVRE9fUkVHSVNURVIsIEZJWEVEX1JFR0lTVEVSUywgQ0FMTF9VU0VEX1JFR0lTVEVSUywKCVJFR0lTVEVSX05BTUVTLCBBRERJVElPTkFMX1JFR0lTVEVSX05BTUVTLCBPVVRQVVRfUkVHSVNURVJfTkFNRVMsCglSRUdfQUxMT0NfT1JERVIsIERCWF9SRUdJU1RFUl9OVU1CRVIsIFIwX1JFR05VTSwgRjBfUkVHTlVNLAoJTDFfUkVHTlVNLCBTVEFDS19QT0lOVEVSX1JFR05VTSwgRlJBTUVfUE9JTlRFUl9SRUdOVU0sCglMT05HX0ZQX1JFR1NfUCwgQVJHX1BPSU5URVJfUkVHTlVNLCByZWdfY2xhc3MsIFJFR19DTEFTU19OQU1FUywKCVJFR19DTEFTU19DT05URU5UUywgU1VCU0VUX1AsUkVHTk9fUkVHX0NMQVNTLAoJUkVHX0NMQVNTX0ZST01fTEVUVEVSLCBGVU5DVElPTl9QUk9MT0dVRSwgRlVOQ1RJT05fRVBJTE9HVUUsCglSRUdOT19PS19GT1JfSU5ERVhfUCwgRlBfUkVHX1AsIFJFR19PS19GT1JfSU5ERVhfUCwKCVJFR19PS19GT1JfQkFTRV9QLCBNRU1fUkVHKTogTmV3IHJlZ2lzdGVyIHNjaGVtZSB0byBpbmNsdWRlIDMyMzgxCglmcHUgcmVnaXN0ZXJzIGFuZCBzcGVjaWFsIHJlZ2lzdGVyIGNsYXNzZXMgZm9yIG5ldyAzMjM4MQoJaW5zdHJ1Y3Rpb25zIGRvdGYgYW5kIHBvbHlmLgoJKE1PREVTX1RJRUFCTEVfUCk6IEFsbG93IGFsbCBpbnRlZ2VyIG1vZGVzLCBub3RhYmx5IERJIGFuZCBTSSwgdG8KCWJlIHRpZWFibGUuCgkoSU5DT01JTkdfUkVUVVJOX0FERFJfUlRYLCBSRVRVUk5fQUREUl9SVFgsCglJTkNPTUlOR19GUkFNRV9TUF9PRkZTRVQpOiBOZXcgbWFjcm9zIGluIGNhc2UgRFdBUkYgc3VwcG9ydCBpcwoJcmVxdWlyZWQuCgkoU01BTExfUkVHSVNURVJfQ0xBU1NFUyk6IE1ha2UgZGVwZW5kZW50IG9uIC1tbXVsdC1hZGQgb3B0aW9uLgoJKE1PVkVfUkFUSU8pOiBTZXQgdG8gemVybyBiZWNhdXNlIG9mIHNtYXJ0IG1vdnN0cnNpIGltcGxlbWVudGF0aW9uLgoJKFJFR0lTVEVSX01PVkVfQ09TVCk6IE1vdmUgY29kZSB0byByZWdpc3Rlcl9tb3ZlX2Nvc3QgZnVuY3Rpb24gZm9yCgllYXNlIG9mIGNvZGluZyBhbmQgZGVidWdnaW5nLgoJKENMQVNTX0xJS0VMWV9TUElMTEVEX1ApOiBVbmRlciBuZXcgcmVnaXN0ZXIgc2NoZW1lIGNsYXNzCglMT05HX0ZMT0FUX1JFR08gaXMgbGlrZWx5IHNwaWxsZWQgYnV0IG5vdCBjYXVnaHQgYnkgZGVmYXVsdAoJZGVmaW5pdGlvbi4KCShDT05TVEFOVF9BRERSRVNTX1AsIENPTlNUQU5UX0FERFJFU1NfTk9fTEFCRUxfUCk6IFVzZSBtYWNybwoJaW5zdGVhZCBvZiBoYXJkIGNvZGVkIG51bWJlcnMgaW4gcmFuZ2UgY2hlY2suCgkoQVNNX09VVFBVVF9MQUJFTFJFRl9BU19JTlQpOiBEZWxldGUgc2luY2UgdW51c2VkLgoJKC4uLik6IEFkZCBwcm90b3R5cGVzIGZvciBmdW5jdGlvbnMgaW4gbnMzMmsuYyBidXQgZGlzYWJsZSBiZWNhdXNlCglvZiBwcm9ibGVtcyB3aGVuIG5zMzJrLmggaXMgaW5jbHVkZWQgaW4gbWFjaGluZSBpbmRlcGVuZGVudCBmaWxlcy4KCgkqIG5zMzJrLmM6IEluY2x1ZGUgInN5c3RlbS5oIiwgInRyZWUuaCIsICJleHByLmgiLCAiZmxhZ3MuaCIuCgkobnMzMmtfcmVnX2NsYXNzX2NvbnRlbnRzLCByZWdjYXNzX21hcCwgbnMzMmtfb3V0X3JlZ19uYW1lcywKCWhhcmRfcmVnbm9fbW9kZV9vaywgc2Vjb25kYXJ5X3JlbG9hZF9jbGFzcywKCXByaW50X29wZXJhbmQsIHByaW50X29wZXJhbmRfYWRkcmVzcyk6IE5ldyByZWdpc3RlciBzY2hlbWUgdG8KCWluY2x1ZGUgMzIzODEgZnB1IHJlZ2lzdGVycyBhbmQgc3BlY2lhbCByZWdpc3RlciBjbGFzc2VzIGZvciBuZXcKCTMyMzgxIGluc3RydWN0aW9ucyBkb3RmIGFuZCBwb2x5Zi4KCShnZW5faW5kZXhlZF9leHByKTogTWFrZSBzdGF0aWMgdG8ga2VlcCBuYW1lc3BhY2UgY2xlYW4uCgkoY2hlY2tfcmVnKTogUmVtb3ZlIHNpbmNlIG5ldmVyIGNhbGxlZC4KCShtb3ZlX3RhaWwsIGV4cGFuZF9ibG9ja19tb3ZlKTogSGVscGVyIGZ1bmN0aW9ucyBmb3IgIm1vdnN0cnNpIgoJYmxvY2sgbW92ZSBpbnNuLgoJKHJlZ2lzdGVyX21vdmVfY29zdCk6IEhlbHBlciBmdW5jdGlvbiBmb3IgUkVHSVNURVJfTU9WRV9DT1NUIG1hY3JvLgoJSW5jcmVhc2UgY29zdCBvZiBtb3ZlcyB3aGljaCBnbyB2aWEgbWVtb3J5LgoJKiBuZXRic2QuaCAoVEFSR0VUX0RFRkFVTFQpOiBTZXQgKG5ldykgMzIzODEgZnB1IGZsYWcuCgkoQ1BQX1BSRURFRklORVMpOiBObyBsb25nZXIgcHJlZGVmaW5lICJ1bml4Ii4KCgkqIG5zMzJrLm1kIChtb3ZzaSwgbW92c2ksIGFkZGRpMywgc3ViZGkzLCBzdWJzaTMsIHN1YmhpMywgc3VicWkzLC4uLik6CglSZW1vdmUgZXJyb25lb3VzICUkLiBwcmludF9vcGVyYW5kKCkgY2FuIHdvcmsgb3V0IGZyb20gdGhlIHJ0eCBpcwoJYW4gaW1tZWRpYXRlIHByZWZpeCBpcyByZXF1aXJlZC4KCgkqIG5zMzJrLmggKFJFVFVSTl9QT1BTX0FSR1MsIFZBTElEX01BQ0hJTkVfREVDTF9BVFRSSUJVVEUsCglWQUxJRF9NQUNISU5FX1RZUEVfQVRUUklCVVRFLCBDT01QX1RZUEVfQVRUUklCVVRFUywKCVNFVF9ERUZBVUxUX1RZUEVfQVRUUklCVVRFUyk6IFN1cHBvcnQgZm9yIC1tcnRkIGNhbGxpbmcKCWNvbnZlbnRpb24uCgkoTEVHSVRJTUFURV9QSUNfT1BFUkFORF9QLCBTWU1CT0xJQ19DT05TVCk6IENvcnJlY3QgaGFuZGxpbmcgb2YKCXBpYyBvcGVyYW5kcy4KCgkqIG5zMzJrLmMgKHN5bWJvbGljX3JlZmVyZW5jZV9tZW50aW9uZWRfcCwgcHJpbnRfb3BlcmFuZCk6CglDb3JyZWN0IGhhbmRsaW5nIG9mIHBpYyBvcGVyYW5kcy4KCShuczMya192YWxpZF9kZWNsX2F0dHJpYnV0ZV9wLCBuczMya192YWxpZF90eXBlX2F0dHJpYnV0ZV9wLAoJbnMzMmtfY29tcF90eXBlX2F0dHJpYnV0ZXMsIG5zMzJrX3JldHVybl9wb3BzX2FyZ3MpOiBTdXBwb3J0IGZvcgoJLW1ydGQgY2FsbGluZyBjb252ZW50aW9uLgoKV2VkIE5vdiAyNSAyMzo0MjoyMCAxOTk4ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBnY2MuYyAob3B0aW9uX21hcCk6IFJlY29nbml6ZSAtLW91dHB1dC1jbGFzcy1kaXJlY3RvcnkuCgpUaHUgTm92IDI2IDE4OjI2OjIxIDE5OTggIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGxvb3AuaCAocHJlY29uZGl0aW9uX2xvb3BfcCk6IEFkZGVkIG5ldyBtb2RlIGFyZ3VtZW50LgoJKiB1bnJvbGwuYyAocHJlY29uZGl0aW9uX2xvb3BfcCk6IExpa2V3aXNlLgoJKGFwcHJveF9maW5hbF92YWx1ZSk6IEZ1bmN0aW9uIGRlbGV0ZWQgYW5kIHN1YnN1bWVkCglpbnRvIGxvb3BfaXRlcmF0aW9ucy4KCShsb29wX2ZpbmRfZXF1aXZfdmFsdWUpOiBOZXcgZnVuY3Rpb24uCgkobG9vcF9pdGVyYXRpb25zKTogVXNlIGxvb3BfZmluZF9lcXVpdl92YWx1ZSB0byBmaW5kIGluY3JlbWVudHMKCXRvbyBsYXJnZSB0byBiZSBpbW1lZGlhdGUgY29uc3RhbnRzLiAgQWxzbyB1c2UgaXQgdG8gZmluZCB0ZXJtcwoJY29tbW9uIHRvIGluaXRpYWwgYW5kIGZpbmFsIGl0ZXJhdGlvbiB2YWx1ZXMgdGhhdCBjYW4gYmUgcmVtb3ZlZC4KClRodSBOb3YgMjYgMTg6MDU6MDQgMTk5OCAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogbG9vcC5oIChzdHJ1Y3QgbG9vcF9pbmZvKTogRGVmaW5lIG5ldyBzdHJ1Y3R1cmUuCgkocHJlY29uZGl0aW9uX2xvb3BfcCk6IEFkZGVkIHByb3RvdHlwZS4KCSh1bnJvbGxfbG9vcCk6IEFkZGVkIG5ldyBhcmd1bWVudCBsb29wX2luZm8gdG8gcHJvdG90eXBlLgoJKGZpbmFsX2Jpdl92YWx1ZSwgZmluYWxfZ2l2X3ZhbHVlKTogQWRkZWQgbmV3IGFyZ3VtZW50IG5faXRlcmF0aW9ucwoJdG8gcHJvdG90eXBlLgoJKiBsb29wLmMgKHN0cmVuZ3RoX3JlZHVjZSk6IERlY2xhcmUgbmV3IHN0cnVjdHVyZSBsb29wX2l0ZXJhdGlvbl9pbmZvCglhbmQgbmV3IHBvaW50ZXIgbG9vcF9pbmZvLgoJKGxvb3Bfbl9pdGVyYXRpb25zKTogUmVwbGFjZSBnbG9iYWwgdmFyaWFibGUgYnkgZWxlbWVudCBpbgoJbG9vcF9pbmZvIHN0cnVjdHVyZS4KCShjaGVja19maW5hbF92YWx1ZSk6IE5ldyBhcmd1bWVudCBuX2l0ZXJhdGlvbnMuCgkoaW5zZXJ0X2JjdCk6IE5ldyBhcmd1bWVudCBsb29wX2luZm8uCgkobG9vcF91bnJvbGxfZmFjdG9yKTogUmVwbGFjZSBnbG9iYWwgYXJyYXkgYnkgZWxlbWVudCBpbgoJbG9vcF9pbmZvIHN0cnVjdHVyZS4KCShsb29wX29wdGltaXplKTogUmVtb3ZlIGNvZGUgdG8gYWxsb2NhdGUgYW5kIGluaXRpYWxpemUKCWxvb3BfdW5yb2xsX2ZhY3Rvcl9hcnJheS4KCSogdW5yb2xsLmMgKHByZWNvbmRpdGlvbl9sb29wX3ApOiBObyBsb25nZXIgc3RhdGljIHNpbmNlCgl1c2VkIGJ5IGJyYW5jaCBvbiBjb3VudCBvcHRpbWl6YXRpb24uCgkocHJlY29uZGl0aW9uX2xvb3BfcCwgdW5yb2xsX2xvb3ApOiBOZXcgYXJndW1lbnQgbG9vcF9pbmZvLgoJKGZpbmFsX2Jpdl92YWx1ZSwgZmluYWxfZ2l2X3ZhbHVlLCBmaW5kX3NwbGl0dGFibGVfcmVncyk6IE5ldwoJYXJndW1lbnQgbl9pdGVyYXRpb25zLgoJKGxvb3BfaXRlcmF0aW9uX3ZhciwgbG9vcF9pbml0aWFsX3ZhbHVlLCBsb29wX2luY3JlbWVudCwKCWxvb3BfZmluYWxfdmFsdWUsIGxvb3BfY29tcGFyaXNvbl9jb2RlLCBsb29wX3Vucm9sbF9mYWN0b3IpOgoJUmVwbGFjZWQgZ2xvYmFsIHZhcmlhYmxlcyBieSBsb29wX2luZm8gc3RydWN0dXJlLgoJKGxvb3BfdW5yb2xsX2ZhY3Rvcik6IFJlcGxhY2UgZ2xvYmFsIGFycmF5IGJ5IGVsZW1lbnQgaW4KCWxvb3BfaW5mbyBzdHJ1Y3R1cmUuCgpUaHUgTm92IDI2IDE3OjQ5OjI5IDE5OTggIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGxvb3AuYyAoY2hlY2tfZGJyYV9sb29wKTogVXBkYXRlIEpVTVBfTEFCRUwgZmllbGQgb2YganVtcCBpbnNuCgl3aGVuIGxvb3AgcmV2ZXJzZWQuCgoJKiB1bnJvbGwuYyAocHJlY29uZGl0aW9uX2xvb3BfcCk6IFJldHVybiBsb29wX2luaXRpYWxfdmFsdWUKCWZvciBpbml0aWFsX3ZhbHVlIGluc3RlYWQgb2YgbG9vcF9pdGVyYXRpb25fdmFyLgoKVGh1IE5vdiAyNiAxNzoxNTozOCAxOTk4ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWcvYzR4L2M0eC5tZDogRml4IG1pbm9yIGZvcm1hdHRpbmcgcHJvYmxlbXMuICBVcGRhdGUgZG9jcy4KCSgqYiwgKmJfcmV2LCAqYl9ub292LCAqYl9ub292X3JldiwgKmRiLAoJZGVjcmVtZW50X2FuZF9icmFuY2hfdW50aWxfemVybywgcnB0Yl9lbmQpOiBVc2UgYzR4X291dHB1dF9jYnJhbmNoCgl0byBvdXRwdXQgdGhlIGluc3RydWN0aW9uIHNlcXVlbmNlcy4KCShycHRzKTogRGVsZXRlLgoJKHJwdGJfdG9wKTogUHJvdmlkZSBhbHRlcm5hdGl2ZXMgdG8gdXNlIGFueSByZWdpc3RlciBvciBtZW1vcnkKCWZvciBsb29wIGNvdW50ZXIuCgkocnB0Yl9lbmQpOiBFbWl0IHVzZSBvZiBvcGVyYW5kcyByYXRoZXIgdGhhbiBhc3NpZ25pbmcgdGhlbQoJZXhwbGljaXRseSB0byB0aGUgUlMgYW5kIFJFIHJlZ2lzdGVycy4KClRodSBOb3YgMjYgMTY6Mzc6NTkgMTk5OCAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHguYyAoYzR4X21vZGlmaWVkX2JldHdlZW5fcCwgYzR4X21lbV9zZXRfcCwKCWM0eF9tZW1fc2V0X3AsIGM0eF9tZW1fbW9kaWZpZWRfYmV0d2Vlbl9wLCBjNHhfaW5zbl9tb3ZlYWJsZV9wLAoJYzR4X3BhcmFsbGVsX3BhY2ssIGM0eF9wYXJhbGxlbF9maW5kLCBjNHhfdXBkYXRlX2luZm9fcmVnLAoJYzR4X3VwZGF0ZV9pbmZvX3JlZ3MsIGM0eF9jb3B5X2luc25fYWZ0ZXIsIGM0eF9jb3B5X2luc25zX2FmdGVyLAoJYzR4X21lcmdlX25vdGVzLCBjNHhfcGFyYWxsZWxfcHJvY2VzcywKCWM0eF9jb21iaW5lX3BhcmFsbGVsX2luZGVwZW5kZW50LCBjNHhfY29tYmluZV9wYXJhbGxlbF9kZXBlbmRlbnQsCgljNHhfY29tYmluZV9wYXJhbGxlbCk6IERlbGV0ZS4KClRodSBOb3YgMjYgMTU6MTY6MDUgMTk5OCAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHguYyAoYzR4X292ZXJyaWRlX29wdGlvbnMpOiBGb3IgY29tcGF0aWJpbGl0eQoJd2l0aCBvbGQgdGFyZ2V0IG9wdGlvbnMgY2xlYXIgZmxhZ19icmFuY2hfb25fY291bnRfcmVnIGlmCgktbW5vLXJwdGIgc3BlY2lmaWVkIGFuZCBzZXQgZmxhZ19hcmd1bWVudF9hbGlhcyBpcyAtbW5vLWFsaWFzZXMKCXNwZWNpZmllZC4KCShjNHhfb3V0cHV0X2NicmFuY2gpOiBIYW5kbGUgYSBzZXF1ZW5jZSBvZiBpbnNucyByYXRoZXIgdGhhbiBhCglzaW5nbGUgaW5zbi4KCShjNHhfcnB0Yl9pbnNlcnQpOiBEbyBub3QgZW1pdCBhIFJQVEIgaW5zbiBpZiB0aGUgUkMgcmVnaXN0ZXIKCWhhcyBub3QgYmVlbiBhbGxvY2F0ZWQgYXMgdGhlIGxvb3AgY291bnRlci4KCShjNHhfYWRkcmVzc19jb25mbGljdCk6IERvIG5vdCBhbGxvdyB0d28gdm9sYXRpbGUgbWVtb3J5IHJlZmVyZW5jZXMuCgkodmFsaWRfcGFyYWxsZWxfb3BlcmFuZHNfNCwgdmFsaWRfcGFyYWxsZWxfb3BlcmFuZHNfNSwKCXZhbGlkX3BhcmFsbGVsX29wZXJhbmRzXzYpOiBSZWplY3QgcGF0dGVybiBpZiB0aGUgcmVnaXN0ZXIgZGVzdGluYXRpb24KCW9mIHRoZSBmaXJzdCBzZXQgaXMgdXNlZCBhcyBwYXJ0IG9mIGFuIGFkZHJlc3MgaW4gdGhlIHNlY29uZCBzZXQuCgpUaHUgTm92IDI2IDE0OjU2OjMyIDE5OTggIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4LmggKFRBUkdFVF9ERUZBVUxUKTogQWRkIFBBUkFMRUxfTVBZX0ZMQUcuCgkoVEFSR0VUX1NNQUxMX1JFR19DTEFTUyk6IFNldCB0byAwIHNvIHRoYXQgU01BTExfUkVHSVNURVJfQ0xBU1NFUwoJaXMgbm8gbG9uZ2VyIGVuYWJsZWQgaWYgUEFSQUxMRUxfTVBZX0ZMQUcgc2V0LgoJKEhBUkRfUkVHTk9fQ0FMTF9DTE9CQkVSRUQpOiBBZGQgcGFyZW50aGVzZXMgdG8gcmVtb3ZlIGFtYmlndWl0eS4KCShSRUdfQ0xBU1NfQ09OVEVOVFMpOiBBZGQgYnJhY2VzIGFyb3VuZCBpbml0aWFsaXplcnMuCgkoSEFWRV9NVUxUSVBMRV9QQUNLKTogRGVmaW5lLgoJKEFTTV9PVVRQVVRfQllURV9GTE9BVCk6IFVzZSAlbGYgZm9ybWF0IHNwZWNpZmllciB3aXRoCglSRUFMX1ZBTFVFX1RPX0RFQ0lNQUwuCgkoQVNNX09VVFBVVF9TSE9SVF9GTE9BVCk6IFVzZSAlbGYgZm9ybWF0IHNwZWNpZmllciB3aXRoCglSRUFMX1ZBTFVFX1RPX0RFQ0lNQUwuCgkoYXIwX3JlZ19vcGVyYW5kKTogQWRkIHByb3RvdHlwZS4KCShhcjBfbWVtX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjFfcmVnX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjFfbWVtX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjJfcmVnX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjJfbWVtX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjNfcmVnX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjNfbWVtX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjRfcmVnX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjRfbWVtX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjVfcmVnX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjVfbWVtX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjZfcmVnX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjZfbWVtX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjdfcmVnX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjdfbWVtX29wZXJhbmQpOiBMaWtld2lzZS4KCShpcjBfcmVnX29wZXJhbmQpOiBMaWtld2lzZS4KCShpcjBfbWVtX29wZXJhbmQpOiBMaWtld2lzZS4KCShpcjFfcmVnX29wZXJhbmQpOiBMaWtld2lzZS4KCShpcjFfbWVtX29wZXJhbmQpOiBMaWtld2lzZS4KCShncm91cDFfcmVnX29wZXJhbmQpOiBMaWtld2lzZS4KCShncm91cDFfbWVtX29wZXJhbmQpOiBMaWtld2lzZS4KCShpcjFfcmVnX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcnhfcmVnX29wZXJhbmQpOiBMaWtld2lzZS4KCShub3RfcmNfcmVnKTogTGlrZXdpc2UuCgkobm90X21vZGlmeV9yZWcpOiBMaWtld2lzZS4KCShjNHhfZ3JvdXAxX3JlZ19vcGVyYW5kKTogUmVtb3ZlIHByb3RvdHlwZS4KCShjNHhfZ3JvdXAxX21lbV9vcGVyYW5kKTogTGlrZXdpc2UuCgkoYzR4X2FyeF9yZWdfb3BlcmFuZCk6IExpa2V3aXNlLgoKV2VkIE5vdiAyNSAxOTowMjo1NSAxOTk4ICAoU3RlcGhlbiBMIE1vc2hpZXIpICA8bW9zaGllckB3b3JsZC5zdGQuY29tPgoKCSogZW1pdC1ydGwuYyAoZ2VuX2xvd3BhcnRfY29tbW9uKTogUmVtb3ZlIGVhcmxpZXIgY2hhbmdlLgoJKiByZWFsLmMgKG1ha2VfbmFuKTogTWFrZSBTSUdOIGFyZyBhY3R1YWxseSBzcGVjaWZ5IHRoZSBzaWduIGJpdC4KClRodSBOb3YgMjYgMTQ6MTI6MDUgMTk5OCAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHgubWQgKGFkZHFpMyk6IEVtaXQgYWRkcWkzX25vY2xvYmJlciBwYXR0ZXJuCglkdXJpbmcgcmVsb2FkLgoKV2VkIE5vdiAyNSAyMjowNToyOCAxOTk4ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogY29uZmlnL3NoL2xpYjFmdW5jcy5hc20gKF9fX3VkaXZzaTNfaTQpOiBEb24ndCBzd2l0Y2ggdG8gc3ogPT0gMQoJdW5sZXNzIEZNT1ZEX1dPUktTIGlzIGRlZmluZWQuCgpXZWQgTm92IDI1IDIwOjExOjA0IDE5OTggIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiByZWdjbGFzcy5jIChpbml0X3JlZ19zZXRzKTogTW92ZSBjb2RlIHRoYXQgY2FsY3VsYXRlcyB0YWJsZXMKCWRlcGVuZGVudCBvbiByZWdfY2xhc3NfY29udGVudHMgZnJvbSBoZXJlLi4uCgkoaW5pdF9yZWdfc2V0c18xKTogVG8gaGVyZS4KCldlZCBOb3YgMjUgMTQ6NTQ6NDYgMTk5OCAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5waHlzLmNvbHVtYmlhLmVkdT4KCgkqIGNwcGxpYi5oOiBEZWxldGUgc3RydWN0IGltcG9ydF9maWxlLiAgQWRkIGloYXNoIGVsZW1lbnQgdG8KCXN0cnVjdCBjcHBfYnVmZmVyLiAgRGVsZXRlIGRvbnRfcmVwZWF0X2ZpbGVzIGFuZAoJaW1wb3J0X2hhc2hfdGFibGUgZWxlbWVudHMgZnJvbSBjcHBfcmVhZGVyOyBjaGFuZ2UKCWFsbF9pbmNsdWRlX2ZpbGVzIHRvIGEgaGFzaCB0YWJsZS4gIERlbGV0ZSBhbGwgZm9vYmFyX2luY2x1ZGUKCS8gbGFzdF9mb29iYXJfaW5jbHVkZSBlbGVtZW50cyBmcm9tIHN0cnVjdCBjcHBfb3B0aW9uczsgcHV0CgliYWNrIGZvdXIgc3VjaDogcXVvdGVfaW5jbHVkZSwgYnJhY2tldF9pbmNsdWRlLAoJc3lzdGVtX2luY2x1ZGUsIGFmdGVyX2luY2x1ZGUuICBSZWRvIHN0cnVjdCBmaWxlX25hbWVfbGlzdAoJY29tcGxldGVseS4gIEFkZCBuZXcgc3RydWN0dXJlIHR5cGUgaW5jbHVkZV9oYXNoLiAgQWRkCglwcm90b3R5cGVzIGZvciBtZXJnZV9pbmNsdWRlX2NoYWlucyBhbmQgaW5jbHVkZV9oYXNoLiAgQ2hhbmdlCglwcm90b3R5cGVzIGZvciBmaW5jbHVkZSwgZmluZF9pbmNsdWRlX2ZpbGUsIGFuZAoJYXBwZW5kX2luY2x1ZGVfY2hhaW4gdG8gbWF0Y2ggY2hhbmdlcyBiZWxvdy4KCgkqIGNwcGZpbGVzLmMgKHNpbXBsaWZ5X3BhdGhuYW1lLCBpbmNsdWRlX2hhc2gsCglyZW1hcF9maWxlbmFtZSwgbWVyZ2VfaW5jbHVkZV9jaGFpbnMpOiBOZXcgZnVuY3Rpb25zLgoJKGFkZF9pbXBvcnQsIGxvb2t1cF9pbXBvcnQsIG9wZW5faW5jbHVkZV9maWxlKTogUmVtb3ZlZC4KCShJTk9fVF9FUSk6IERlZmluZSB0aGlzIChjb3BpZWQgZnJvbSBjY2NwLmMpLgoJKGhhY2tfdm1zX2luY2x1ZGVfc3BlY2lmaWNhdGlvbik6IFJlbW92ZSBhbGwgY2FsbHMgYW5kICNpZiAwCglvdXQgdGhlIGRlZmluaXRpb24uICBJdCB3YXMgYmVpbmcgY2FsbGVkIGluY29ycmVjdGx5IGFuZCBhdAoJdGhlIHdyb25nIHRpbWVzLiAgVW50aWwgYSBWTVNpZSBjYW4gbG9vayBhdCB0aGlzLCBpdCdzIGJldHRlcgoJdG8gbm90IHByZXRlbmQgdG8gc3VwcG9ydCBpdC4KCShhcHBlbmRfaW5jbHVkZV9jaGFpbik6IENoYW5nZSBjYWxsaW5nIGNvbnZlbnRpb247IG5vdyB0YWtlcwoJb25seSBvbmUgZGlyZWN0b3J5IGF0IGEgdGltZSwgYW5kIHNldHMgdXAgdGhlIGRhdGEgc3RydWN0dXJlCglpdHNlbGYuCgkocmVkdW5kYW50X2luY2x1ZGVfcCk6IFJld3JpdHRlbiAtIHRoaXMgaXMgbm93IHVzZWQgZm9yIGFsbAoJaW5jbHVkZSByZWR1bmRhbmN5LCB3aGV0aGVyIGJ5ICNpZm5kZWYsICNpbXBvcnQsIG9yICNwcmFnbWEKCW9uY2UuICBMb29rcyB1cCB0aGluZ3MgaW4gdGhlIGluY2x1ZGUgaGFzaCB0YWJsZS4KCShmaWxlX2NsZWFudXApOiBEZWNyZW1lbnQgcGZpbGUtPnN5c3RlbV9pbmNsdWRlX2RlcHRoIGhlcmUgaWYKCWl0J3MgPjAuCgkoZmluZF9pbmNsdWRlX2ZpbGUpOiBDYWxsaW5nIGNvbnZlbnRpb24gY2hhbmdlZDsgbm93IHBhc3NlcwoJYXJvdW5kIGEgc3RydWN0IGluY2x1ZGVfaGFzaCBpbnN0ZWFkIG9mIDMgc2VwYXJhdGUgcGFyYW1ldGVycy4KCUd1dHMgcmlwcGVkIG91dCBhbmQgcmVwbGFjZWQgd2l0aCBuZXcgaW5jbHVkZV9oYXNoIG1lY2hhbmlzbS4KCShmaW5jbHVkZSk6IENhbGxpbmcgY29udmVudGlvbiBjaGFuZ2VkIGFzIGZvcgoJZmluZF9pbmNsdWRlX2ZpbGUuICBFcnJvciBleGl0cyBwdWxsZWQgb3V0LW9mLWxpbmUuICBSZWZvcm1hdC4KCShzYWZlX3JlYWQpOiBSZXR1cm4gYSBsb25nLCBub3QgYW4gaW50LgoJKGRlcHNfb3V0cHV0KTogRG9uJ3QgcmVjdXJzZS4KCgkqIGNwcGxpYi5jIChpc19zeXN0ZW1faW5jbHVkZSk6IERlbGV0ZWQuCgkocGF0aF9pbmNsdWRlKTogRml4IHVwIGNhbGwgdG8gYXBwZW5kX2luY2x1ZGVfY2hhaW4uCgkoZG9faW5jbHVkZSk6IEZpeCB1cCBjYWxscyB0byBmaW5kX2luY2x1ZGVfZmlsZSBhbmQgZmluY2x1ZGUuCglDbGVhbiB1cCBkZXBlbmRlbmN5IG91dHB1dCBhIGJpdC4gIFNob3J0ZW4gb2Jub3hpb3VzbHkgbGVuZ3RoeQoJI2ltcG9ydCB3YXJuaW5nIG1lc3NhZ2UuICBEb24ndCBkZWNyZW1lbnQKCXBmaWxlLT5zeXN0ZW1faW5jbHVkZV9kZXB0aCBoZXJlLgoJKGRvX3ByYWdtYSk6IFVuZGVyc3RhbmQgdGhlIGluY2x1ZGVfaGFzaCBzdHJ1Y3R1cmUuICBSZWZvcm1hdC4KCShkb19lbmRpZik6IENvcnJlY3QgaGFuZGxpbmcgb2YgY29udHJvbCBtYWNyb3MuICBVbmRlcnN0YW5kCgl0aGUgaW5jbHVkZV9oYXNoLgoJKGNwcF9zdGFydF9yZWFkKTogRml4IHVwIGNhbGxzIHRvIGZpbmNsdWRlLiAgQ2FsbAoJbWVyZ2VfaW5jbHVkZV9jaGFpbnMuCgkoY3BwX2hhbmRsZV9vcHRpb24pOiBGaXggdXAgY2FsbHMgdG8gYXBwZW5kX2luY2x1ZGVfY2hhaW4uCglVbmRlcnN0YW5kIHRoZSBmb3VyIHBhcnRpYWwgaW5jbHVkZSBjaGFpbnMuCgkoY3BwX2ZpbmlzaCk6IEFkZCBkZWJ1Z2dpbmcgY29kZSAoI2lmIDAtZWQgb3V0KSBmb3IgdGhlCglpbmNsdWRlX2hhc2guCgkoY3BwX2NsZWFudXApOiBGcmVlIHRoZSBpbmNsdWRlX2hhc2gsIG5vdCB0aGUgaW1wb3J0IGhhc2ggYW5kCgl0aGUgYWxsX2luY2x1ZGUgYW5kIGRvbnRfcmVwZWF0IGxpc3RzIHdoaWNoIG5vIGxvbmdlciBleGlzdC4KCldlZCBOb3YgMjUgMTE6MjY6MTkgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdG9wbGV2LmMgKG5vX25ld19wc2V1ZG9zKTogRGVmaW5lLgoJKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBTZXQgbm9fbmV3X3BzZXVkb3MgYXMgbmVlZGVkLgoJKiBlbWl0LXJ0bC5jIChnZW5fcmVnX3J0eCk6IEFib3J0IGlmIHdlIHRyeSB0byBjcmVhdGUgYSBuZXcgcHNldWRvCglpZiBub19uZXdfcHNldWRvcyBpcyBzZXQuCgkqIHJ0bC5oIChub19uZXdfcHNldWRvcyk6IERlY2xhcmUgaXQuCgkqIHJlbG9hZDEuYyAocmVsb2FkKTogVXBkYXRlIGNvbW1lbnRzLgoJKiBtZC50ZXhpOiBDb3JyZXNwb25kaW5nIGNoYW5nZXMuCgpXZWQgTm92IDI1IDExOjI2OjE3IDE5OTggIEJlcm5kIFNjaG1pZHQgIDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCgkqIHJlbG9hZDEuYyAocmVnX3VzZWRfaW5faW5zbik6IFJlbmFtZWQgZnJvbSByZWdfdXNlZF9ieV9wc2V1ZG8uCgkoY2hvb3NlX3JlbG9hZF9yZWdzKTogUmVuYW1lIGl0IGhlcmUgYXMgd2VsbC4gIFdoZW4gY29tcHV0aW5nIGl0LAoJYWxzbyBtZXJnZSBpbiB1c2VkIGhhcmRyZWdzLgoKMTk5OC0xMS0yNSAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5waHlzLmNvbHVtYmlhLmVkdT4KCgkqIGdjYy5jOiBTcGxpdCBvdXQgT2JqZWN0aXZlLUMgc3BlY3MgdG8uLi4KCSogb2JqYy9sYW5nLXNwZWNzLmg6IGhlcmUuIChOZXcgZmlsZS4pIE1ha2UgdGhlIHNwZWNzIGNwcGxpYgoJYXdhcmUuCgoJKiBjLWxleC5jIChpbml0X3BhcnNlKTogQWx3YXlzIGluaXRpYWxpemUgdGhlIGZpbGVuYW1lIGdsb2JhbC4KCSogb2JqYy9vYmpjLWFjdC5jIChsYW5nX2luaXQpOiBBbHdheXMgY2FsbCBjaGVja19uZXdsaW5lIGF0CgliZWdpbm5pbmcgb2YgZmlsZS4KCldlZCBOb3YgMjUgMDA6NDg6MjkgMTk5OCAgR3JhaGFtICA8Z3JhaGFtc0ByY3AuY28udWs+CgoJKiByZWxvYWQxLmMgKHJlbG9hZCk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUuCgkocmVsb2FkX3JlZ19mcmVlX2Zvcl92YWx1ZV9wKTogQWRkIG1pc3NpbmcgcGFyYW1ldGVyIGRlZmluaXRpb24uCgoJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlLgoKV2VkIE5vdiAyNSAwMDowNzoxMSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoZ3JhcGgubyk6IERlcGVuZCBvbiAkKFJUTF9IKSwgbm90IHJ0bC5oLgoKCSogY3NlLmMgKGZvbGRfcnR4KTogTWFrZSBhdXRvaW5jcmVtZW50IGFkZHJlc3NpbmcgbW9kZSB0ZXN0cyBiZQoJcnVudGltZSBzZWxlY3RhYmxlLgoJKiBleHByLmMgKG1vdmVfYnlfcGllY2VzKTogU2ltaWxhcmx5LgoJKG1vdmVfYnlfcGllY2VzXzEsIGNsZWFyX2J5X3BpZWNlcywgY2xlYXJfYnlfcGllY2VzXzEpOiBTaW1pbGFybHkuCgkqIGZsb3cuYyAoZmluZF9hdXRvX2luYyk6IFNpbWlsYXJseS4KCSh0cnlfcHJlX2luY3JlbWVudCk6IFNpbWlsYXJseS4KCSogbG9vcC5jIChzdHJlbmd0aF9yZWR1Y2UpOiBTaW1pbGFybHkuCgkqIHJlZ2NsYXNzLmMgKGF1dG9faW5jX2RlY19yZWdfcCk6IFNpbWlsYXJseS4KCSogcmVnbW92ZS5jICh0cnlfYXV0b19pbmNyZW1lbnQpOiBTaW1pbGFybHkuCgkoZml4dXBfbWF0Y2hfMSk6IFNpbWlsYXJseS4KCSogcnRsLmggKEhBVkVfUFJFX0lOQ1JFTUVOVCk6IERlZmluZSBpZiBub3QgYWxyZWFkeSBkZWZpbmVkLgoJKEhBVkVfUFJFX0RFQ1JFTUVOVCk6IFNpbWlsYXJseS4KCShIQVZFX1BPU1RfSU5DUkVNRU5ULCBIQVZFX1BPU1RfREVDUkVNRU5UKTogU2ltaWxhcmx5LgoJKiBDb3JyZXNwb25kaW5nIGNoYW5nZXMgdG8gYWxsIHRhcmdldCBoZWFkZXIgZmlsZXMuCgkqIHRtLnRleGk6IFVwZGF0ZSBkb2NzIGZvciBhdXRvaW5jIGFkZHJlc3NpbmcgbW9kZXMuCgpUdWUgTm92IDI0IDIwOjI0OjU5IDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiAobTY4MDIwLSotZWxmKiwgbTY4ay0qLWVsZiopOiBOZXcgdGFyZ2V0cy4KCSogY29uZmlndXJlOiBSZWJ1aWxkLgoJKiBjb25maWcvZWxmb3MuaDogTmV3IGZpbGUuCgkqIGNvbmZpZy9tNjhrL202ODAyMC1lbGYuaCwgY29uZmlnL202OGsvbTY4a2VsZi5oLAoJY29uZmlnL202OGsvdC1tNjhrZWxmOiBOZXcgZmlsZS4KClR1ZSBOb3YgMjQgMTM6NDA6MDYgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4gKEhPU1RfQVIpOiBEZWZpbmUuCgkoSE9TVF9BUl9GTEFHUywgSE9TVF9SQU5MSUIsIEhPU1RfUkFOTElCX1RFU1QpOiBTaW1pbGFybHkuCgkobGliY3BwLmEpOiBVc2UgdGhlIGhvc3QgdG9vbHMgZXhwbGljaXRseS4KCShTVEFHRVNUVUZGKTogQWRkIGxpYmNwcC5hLgoKVHVlIE5vdiAyNCAwOTozMzo0OSAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL20zMnIvbTMyci5tZCAobW92c3Ryc2lfaW50ZXJuYWwpOiBEZXNjcmliZSBjaGFuZ2VzIG1hZGUKCXRvIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gcmVnaXN0ZXJzLgoKTW9uIE5vdiAyMyAyMDoyODowMiAxOTk4ICBNaWtlIFN0dW1wICA8bXJzQHdycy5jb20+CgoJKiBsaWJnY2MyLmMgKHRvcF9lbHQpOiBSZW1vdmUgdG9wX2VsdCwgaXQgaXNuJ3QgdGhyZWFkIHNhZmUuCglUaGUgc3RyYXRlZ3kgd2Ugbm93IHVzZSBpcyB0byBwcmUgYWxsb2NhdGUgdGhlIHRvcF9lbHQgYWxvbmcKCXdpdGggdGhlIEVIIGNvbnRleHQgc28gdGhhdCBlYWNoIHRocmVhZCBoYXMgaXRzIG93biB0b3BfZWx0LgoJVGhpcyBpcyBuZWNlc3NhcnkgYXMgdGhlIGR5bmFtaWMgY2xlYW51cCBjaGFpbiBpcyB1c2VkIG9uIHRoZQoJdG9wIGVsZW1lbnQgb2YgdGhlIHN0YWNrIGFuZCBlYWNoIHRocmVhZCBNVVNUIGhhdmUgaXRzIG93bi4KCShlaF9jb250ZXh0X3N0YXRpYyk6IExpa2V3aXNlLgoJKG5ld19laF9jb250ZXh0KTogTGlrZXdpc2UuCgkoX19zanRocm93KTogTGlrZXdpc2UuCgpNb24gTm92IDIzIDIwOjI1OjAzIDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGkzODYvbGludXguaCAoQVNNX09VVFBVVF9NQVhfU0tJUF9BTElHTik6IFdyYXAgaW4gZG8uLi53aGlsZS4KCSogaTM4Ni5tZCAocHJvbG9ndWVfZ2V0X3BjKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZS4KCk1vbiBOb3YgMjMgMTc6MDU6NDAgMTk5OCAgR2VvZmZyZXkgTm9lciAgPG5vZXJAY3lnbnVzLmNvbT4KCgkqIGkzODYveG0tY3lnd2luLmg6IFJlbmFtZSBjeWd3aW5fIHBhdGggZnVuY3MgYmFjayB0byBjeWd3aW4zMl8uCgpNb24gTm92IDIzIDE2OjQwOjAwIDE5OTggIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKE9CSlMpOiBBZGQgZ3JhcGguby4KCShncmFwaC5vKTogTmV3IGRlcGVuZGVuY3kgbGlzdC4KCSogZmxhZ3MuaDogRGVjbGFyZSBkdW1wX2Zvcl9ncmFwaCBhbmQgZGVmaW5lIGdyYXBoX2R1bXBfdHlwZXMgdHlwZS4KCSogcHJpbnQtcnRsLmMgKGR1bXBfZm9yX2dyYXBoKTogRGVmaW5lIG5ldyB2YXJpYWJsZS4KCShwcmludF9ydHgpOiBSZXdyaXRlIHRvIGFsbG93IHVzZSBpbiBncmFwaCBkdW1waW5nIGZ1bmN0aW9ucy4KCSogdG9wbGV2LmM6IERlY2xhcmUgcHJpbnRfcnRsX2dyYXBoX3dpdGhfYmIsIGNsZWFuX2dyYXBoX2R1bXBfZmlsZSwKCWZpbmlzaF9ncmFwaF9kdW1wX2ZpbGUuCglEZWZpbmUgZ3JhcGhfZHVtcF9mb3JtYXQuCgkoY29tcGlsZV9maWxlKTogSWYgZ3JhcGggZHVtcGluZyBpcyBlbmFibGVkIGFsc28gY2xlYXIgdGhlc2UgZmlsZXMuCglGaW5pc2ggZ3JhcGggZHVtcCBmaWxlcy4KCShyZXN0X29mX2NvbXBpbGF0aW9uKTogQWxzbyBkdW1wIGdyYXBoIGluZm9ybWF0aW9uIGlmIGVuYWJsZWQuCgkobWFpbik6IFJlY29nbml6ZSAtZHYgdG8gZW5hYmxlZCBWQ0cgYmFzZWQgZ3JhcGggZHVtcGluZy4KCSogZ3JhcGguYzogTmV3IGZpbGUuICBHcmFwaCBkdW1waW5nIGZ1bmN0aW9ucy4KCk1vbiBOb3YgMjMgMTY6Mzk6MDQgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogTG9vayBmb3IgPHN5cy9zdGF0Lmg+LgoJKiBzeXN0ZW0uaDogSW5jbHVkZSBpdCBiZWZvcmUgc3Vic3RpdHV0ZSBTX0lTUkVHIGRlZmluaXRpb25zLgoKTW9uIE5vdiAyMyAxNzo0MDozNyAxOTk4ICBHYXZpbiBSb21pZy1Lb2NoICA8Z2F2aW5AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9taXBzL2FiaS5oOiBVc2UgQUJJX082NCwgZHVwbGljYXRpbmcgQUJJXzMyIHVzYWdlLgoJKiBjb25maWcvbWlwcy9pcmlzNi5oOiBTYW1lLgoJKiBjb25maWcvbWlwcy9taXBzLm1kOiBTYW1lLgoJKiBjb25maWcvbWlwcy9taXBzLmM6IFNhbWU7IGFsc28gYWRkICItbWFiaT1vNjQiIG9wdGlvbi4KCSogY29uZmlnL21pcHMvbWlwcy5oOiBTYW1lOyBhbHNvIGRlZmluZSBBQklfTzY0LgoKTW9uIE5vdiAyMyAxNzowMjoyNyAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiAgY29uZmlndXJlLmluOiBVc2UgQUNfUFJFUkVRKDIuMTIuMSkuCgpNb24gTm92IDIzIDEwOjE2OjM4IDE5OTggIE1lbGlzc2EgTydOZWlsbCAgPG9uZWlsbEBjcy5zZnUuY2E+CgoJKiBjY2NwLmMgKFNfSVNSRUcsIFNfSVNESVIpOiBEZWxldGUgZGVmaW5lcy4KCSogY3BwbGliLmMsIGdjYy5jOiBMaWtld2lzZS4KCSogc3lzdGVtLmggKFNfSVNSRUcsIFNfSVNESVIpOiBEZWZpbmUgaWYgbm90IGFscmVhZHkgZGVmaW5lZC4KCk1vbiBOb3YgMjMgMDk6NTM6NDQgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGxvY2FsLWFsbG9jLmMgKGxvY2FsX2FsbG9jKTogVXNlIG1hbGxvYyBub3QgYWxsb2NhIGZvcgoJcmVnX3F0eSwgcmVnX29mZnNldCwgcmVmX25leHRfaW5fcXR5LgoKTW9uIE5vdiAyMyAxNjo0Njo0NiAxOTk4ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogY2FsbGVyLXNhdmUuYyAoaW5zZXJ0X29uZV9pbnNuKTogSW5pdGlhbGl6ZSB0aGUgbGl2ZV9iZWZvcmUgYW5kCglsaXZlX2FmdGVyIHJlZ2lzdGVyIHNldHMuCgoJQWRkIFNINCBzdXBwb3J0OgoKCSogY29uZmlnL3NoL2xpYjFmdW5jcy5hc20gKF9fX21vdnN0cl9pNF9ldmVuLCBfX19tb3ZzdHJfaTRfb2RkKTogRGVmaW5lLgoJKF9fX21vdnN0clNJMTJfaTQsIF9fX3NkaXZzaTNfaTQsIF9fX3VkaXZzaTNfaTQpOiBEZWZpbmUuCgkqIHNoLmMgKHJlZ19jbGFzc19mcm9tX2xldHRlciwgcmVnbm9fcmVnX2NsYXNzKTogQWRkIERGX1JFR1MuCgkoZnBfcmVnX25hbWVzLCBhc3NlbWJsZXJfZGlhbGVjdCk6IE5ldyB2YXJpYWJsZXMuCgkocHJpbnRfb3BlcmFuZF9hZGRyZXNzKTogSGFuZGxlIFNVQlJFR3MuCgkocHJpbnRfb3BlcmFuZCk6IEFkZGVkICdvJyBjYXNlLgoJRG9uJ3QgdXNlIGFkal9vZmZzZXR0YWJsZV9vcGVyYW5kIG9uIFBSRV9ERUMgLyBQT1NUX0lOQy4KCU5hbWUgb2YgRlAgcmVnaXN0ZXJzIGRlcGVuZHMgb24gbW9kZS4KCShleHBhbmRfYmxvY2tfbW92ZSk6IEVtaXQgZGlmZmVyZW50IGNvZGUgZm9yIFNINCBoYXJkd2FyZS4KCShwcmVwYXJlX3NjY19vcGVyYW5kcyk6IFVzZSBlbWl0X3NmX2luc24gLyBlbWl0X2RmX2luc24gYXMgYXBwcm9wcmlhdGUuCgkoZnJvbV9jb21wYXJlKTogTGlrZXdpc2UuCgkoYWRkX2NvbnN0YW50KTogTmV3IGFyZ3VtZW50IGxhc3RfdmFsdWUuICBDaGFuZ2VkIGFsbCBjYWxsZXJzLgoJKGZpbmRfYmFycmllcik6IERvbid0IHRyeSBISW1vZGUgbG9hZCBmb3IgRlBVTF9SRUcuCgkobWFjaGluZV9kZXBlbmRlbnRfcmVvcmcpOiBMaWtld2lzZS4KCShzZnVuY191c2VzX3JlZyk6IEEgQ0xPQkJFUiBjYW5ub3QgYmUgdGhlIGFkZHJlc3MgcmVnaXN0ZXIgdXNlLgoJKGdlbl9mYXJfYnJhbmNoKTogRW1pdCBhIGJhcnJpZXIgYWZ0ZXIgdGhlIG5ldyBqdW1wLgoJKGJhcnJpZXJfYWxpZ24pOiBEb24ndCB0cnVzdCBpbnN0cnVjdGlvbiBsZW5ndGhzIGJlZm9yZQoJZml4aW5nIHVwIHBjbG9hZHMuCgkobWFjaGluZV9kZXBlbmRlbnRfcmVvcmcpOiBBZGQgc3VwcG9ydCBmb3IgRklSU1RfWERfUkVHIC4uIExBU1RfWERfUkVHLgoJVXNlIGF1dG8taW5jIGFkZHJlc3NpbmcgZm9yIGZwIHJlZ2lzdGVycyBpZiBkb3VibGVzIG5lZWQgdG8KCWJlIGxvYWRlZCBpbiB0d28gc3RlcHMuCglTZXQgc2hfZmxhZ19yZW1vdmVfZGVhZF9iZWZvcmVfY3NlLgoJKHB1c2gpOiBTdXBwb3J0IGZvciBUQVJHRVRfRk1PVkQuICBVc2UgZ2VuX3B1c2hfZnB1bCBmb3IgZnB1bC4KCShwb3ApOiBTdXBwb3J0IGZvciBUQVJHRVRfRk1PVkQuICBVc2UgZ2VuX3BvcF9mcHVsIGZvciBmcHVsLgoJKGNhbGNfbGl2ZV9yZWdzKTogU3VwcG9ydCBmb3IgVEFSR0VUX0ZNT1ZELiAgRG9uJ3Qgc2F2ZSBGUFNDUi4KCVN1cHBvcnQgZm9yIEZJUlNUX1hEX1JFRyAuLiBMQVNUX1hEX1JFRy4KCShzaF9leHBhbmRfcHJvbG9ndWUpOiBTdXBwb3J0IGZvciBGSVJTVF9YRF9SRUcgLi4gTEFTVF9YRF9SRUcuCgkoc2hfZXhwYW5kX2VwaWxvZ3VlKTogTGlrZXdpc2UuCgkoc2hfYnVpbHRpbl9zYXZlcmVncyk6IFVzZSBERm1vZGUgbW92ZXMgZm9yIGZwIHJlZ3Mgb24gU0g0LgoJKGluaXRpYWxfZWxpbWluYXRpb25fb2Zmc2V0KTogVGFrZSBUQVJHRVRfQUxJR05fRE9VQkxFIGludG8gYWNjb3VudC4KCShhcml0aF9yZWdfb3BlcmFuZCk6IEZQVUxfUkVHIGlzIE9LIGZvciBTSDQuCgkoZnBfYXJpdGhfcmVnX29wZXJhbmQsIGZwX2V4dGVuZGVkX29wZXJhbmQpOiBOZXcgZnVuY3Rpb25zLgoJKHRlcnRpYXJ5X3JlbG9hZF9vcGVyYW5kLCBmcHNjcl9vcGVyYW5kKTogTGlrZXdpc2UuCgkoY29tbXV0YXRpdmVfZmxvYXRfb3BlcmF0b3IsIG5vbmNvbW11dGF0aXZlX2Zsb2F0X29wZXJhdG9yKTogTGlrZXdpc2UuCgkoYmluYXJ5X2Zsb2F0X29wZXJhdG9yLCBnZXRfZnBzY3JfcnR4LCBlbWl0X3NmX2luc24pOiBMaWtld2lzZS4KCShlbWl0X2RmX2luc24sIGV4cGFuZF9zZl91bm9wLCBleHBhbmRfc2ZfYmlub3ApOiBMaWtld2lzZS4KCShleHBhbmRfZGZfdW5vcCwgZXhwYW5kX2RmX2Jpbm9wLCBleHBhbmRfZnBfYnJhbmNoKTogTGlrZXdpc2UuCgkoZW1pdF9mcHNjcl91c2UsIG1hcmtfdXNlLCByZW1vdmVfZGVhZF9iZWZvcmVfY3NlKTogTGlrZXdpc2UuCgkqIHNoLmggKENQUF9TUEVDKTogQWRkIHN1cHBvcnQgZm9yIC1tNCwgbTQtc2luZ2xlLCBtNC1zaW5nbGUtb25seS4KCShDT05ESVRJT05BTF9SRUdJU1RFUl9VU0FHRSk6IExpa2V3aXNlLgoJKEhBUkRfU0g0X0JJVCwgRlBVX1NJTkdMRV9CSVQsIFNINF9CSVQsIEZNT1ZEX0JJVCk6IERlZmluZS4KCShUQVJHRVRfQ0FDSEUzMiwgVEFSR0VUX1NVUEVSU0NBTEFSLCBUQVJHRVRfSEFSV0FSRCk6IERlZmluZS4KCShUQVJHRVRfSEFSRF9TSDQsIFRBUkdFVF9GUFVfU0lOR0xFLCBUQVJHRVRfU0g0LCBUQVJHRVRfRk1PVkQpOiBEZWZpbmUuCgkodGFyZ2V0X2ZsYWcpOiBBZGQgLW00LCBtNC1zaW5nbGUsIG00LXNpbmdsZS1vbmx5LCAtbWZtb3ZkLgoJKE9QVElNSVpBVElPTl9PUFRJT05TKTogSWYgb3B0aW1pemluZywgc2V0IGZsYWdfb21pdF9mcmFtZV9wb2ludGVyCgl0byAtMSBhbmQgc2hfZmxhZ19yZW1vdmVfZGVhZF9iZWZvcmVfY3NlIHRvIDEuCgkoQVNTRU1CTEVSX0RJQUxFQ1QpOiBEZWZpbmUgdG8gYXNzZW1ibGVyX2RpYWxlY3QuCgkoYXNzZW1ibGVyX2RpYWxlY3QsIGZwX3JlZ19uYW1lcyk6IERlY2xhcmUuCgkoT1ZFUlJJREVfT1BUSU9OUyk6IEFkZCBjb2RlIGZvciBUQVJHRVRfU0g0LgoJSGlkZSBuYW1lcyBvZiByZWdpc3RlcnMgdGhhdCBhcmUgbm90IGFjY2Vzc2libGUuCgkoQ0FDSEVfTE9HKTogVGFrZSBUQVJHRVRfQ0FDSEUzMiBpbnRvIGFjY291bnQuCgkoTE9PUF9BTElHTik6IFRha2UgVEFSR0VUX0hBUldBUkQgaW50byBhY2NvdW50LgoJKEZJUlNUX1hEX1JFRywgTEFTVF9YRF9SRUcsIEZQU0NSX1JFRyk6IERlZmluZS4KCShGSVJTVF9QU0VVRE9fUkVHSVNURVI6IE5vdyA0OS4KCShGSVhFRF9SRUdJU1RFUlMsIENBTExfVVNFRF9SRUdJU1RFUlMpOiBJbmNsdWRlIHZhbHVlcyBmb3IgcmVnaXN0ZXJzLgoJKEhBUkRfUkVHTk9fTlJFR1MpOiBTcGVjaWFsIHRyZWF0bWVudCBvZiBGSVJTVF9YRF9SRUcgLi4gTEFTVF9YRF9SRUcuCgkoSEFSRF9SRUdOT19NT0RFX09LKTogVXBkYXRlLgoJKGVudW0gcmVnX2NsYXNzKTogQWRkIERGX1JFR1MgYW5kIEZQU0NSX1JFR1MuCgkoUkVHX0NMQVNTX05BTUVTLCBSRUdfQ0xBU1NfQ09OVEVOVFMsIFJFR19BTExPQ19PUkRFUik6IExpa2V3aXNlLgoJKFNFQ09OREFSWV9PVVRQVVRfUkVMT0FEX0NMQVNTLCBTRUNPTkRBUllfSU5QVVRfUkVMT0FEX0NMQVNTKTogVXBkYXRlLgoJKENMQVNTX0NBTk5PVF9DSEFOR0VfU0laRSwgREVCVUdfUkVHSVNURVJfTkFNRVMpOiBEZWZpbmUuCgkoTlBBUk1fUkVHUyk6IEVpZ2h0IGZsb2F0aW5nIHBvaW50IHBhcmFtZXRlciByZWdpc3RlcnMgb24gU0g0LgoJKEJBU0VfUkVUVVJOX1ZBTFVFX1JFRyk6IFNINCBhbHNvIHBhc3NlcyBkb3VibGUgdmFsdWVzCglpbiBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMuCgkoR0VUX1NIX0FSR19DTEFTUyk6IExpa2V3aXNlLgoJQ29tcGxleCBmbG9hdCB0eXBlcyBhcmUgYWxzbyByZXR1cm5lZCBpbiBmbG9hdCByZWdpc3RlcnMuCgkoQkFTRV9BUkdfUkVHKTogQ29tcGxleCBmbG9hdCB0eXBlcyBhcmUgYWxzbyBwYXNzZXMgaW4gZmxvYXQgcmVnaXN0ZXJzLgoJKEZVTkNUSU9OX1ZBTFVFKTogQ2hhbmdlIG1vZGUgbGlrZSBQUk9NT1RFX01PREUgZG9lcy4KCShMSUJDQUxMX1ZBTFVFKTogUmVtb3ZlIHRyYWlsaW5nIHNlbWljb2xvbi4KCShST1VORF9SRUcpOiBSb3VuZCB3aGVuIGRvdWJsZSBwcmVjaXNpb24gdmFsdWUgaXMgcGFzc2VkIGluIGZsb2F0aW5nCglwb2ludCByZWdpc3RlcihzKS4KCShGVU5DVElPTl9BUkdfQURWQU5DRSk6IE5vIGNoYW5nZSB3YW50ZWQgZm9yIFNINCB3aGVuIHRoaW5ncyBhcmUKCXBhc3NlZCBvbiB0aGUgc3RhY2suCgkoRlVOQ1RJT05fQVJHKTogTGl0dGxlIGVuZGlhbiBhZGp1c3RtZW50IGZvciBTSDQgU0Ztb2RlLgoJKEZVTkNUSU9OX0FSR19QQVJUSUFMX05SRUdTKTogWmVybyBmb3IgU0g0LgoJKFRSQU1QT0xJTkVfQUxJR05NRU5UKTogVGFrZSBUQVJHRVRfSEFSV0FSRCBpbnRvIGFjY291bnQuCgkoSU5JVElBTElaRV9UUkFNUE9MSU5FKTogRW1pdCBpY19pbnZhbGlkYXRlX2xpbmUgZm9yIFRBUkdFVF9IQVJXQVJELgoJKE1PREVfRElTUF9PS184KTogTm90IGZvciBTSDQgREZtb2RlLgoJKEdPX0lGX0xFR0lUSU1BVEVfQUREUkVTUyk6IE5vIGJhc2UgcmVnICsgaW5kZXggcmVnIGZvciBTSDQgREZtb2RlLgoJQWxsb3cgaW5kZXhlZCBhZGRyZXNzaW5nIGZvciBQU0ltb2RlIGFmdGVyIHJlbG9hZC4KCShMRUdJVElNSVpFX0FERFJFU1MpOiBOb3QgZm9yIFNINCBERm1vZGUuCgkoTEVHSVRJTUlaRV9SRUxPQURfQUREUkVTUyk6IEhhbmRsZSBTSDNFIFNGbW9kZS4KCURvbid0IGNoYW5nZSBTSDQgREZtb2RlIG5vciBQU0ltb2RlIFJFTE9BRF9GT1JfSU5QVVRfQUREUkVTUy4KCShET1VCTEVfVFlQRV9TSVpFKTogNjQgZm9yIFNINC4KCShSVFhfQ09TVFMpOiBBZGQgUExVUyBjYXNlLgoJSW5jcmVhc2UgY29zdCBvZiBBU0hJRlQsIEFTSElGVFJULCBMU0hJRlRSVCBjYXNlLgoJKFJFR0lTVEVSX01PVkVfQ09TVCk6IEFkZCBoYW5kbGluZyBvZiBSMF9SRUdTLCBGUFVMX1JFR1MsIFRfUkVHUywKCU1BQ19SRUdTLCBQUl9SRUdTLCBERl9SRUdTLgoJKFJFR0lTVEVSX05BTUVTKTogVXNlIGZwX3JlZ19uYW1lcy4KCShlbnVtIHByb2Nlc3Nvcl90eXBlKTogQWRkIFBST0NFU1NPUl9TSDQuCgkoc2hfZmxhZ19yZW1vdmVfZGVhZF9iZWZvcmVfY3NlKTogRGVjbGFyZS4KCShydHhfZXF1YWxfZnVuY3Rpb25fdmFsdWVfbWF0dGVycywgZnBzY3JfcnR4LCBnZXRfZnBzY3JfcnR4KTogRGVjbGFyZS4KCShQUkVESUNBVEVfQ09ERVMpOiBBZGQgYmluYXJ5X2Zsb2F0X29wZXJhdG9yLAoJY29tbXV0YXRpdmVfZmxvYXRfb3BlcmF0b3IsIGZwX2FyaXRoX3JlZ19vcGVyYW5kLCBmcF9leHRlbmRlZF9vcGVyYW5kLAoJZnBzY3Jfb3BlcmFuZCwgbm9uY29tbXV0YXRpdmVfZmxvYXRfb3BlcmF0b3IuCgkoQURKVVNUX0NPU1QpOiBVc2UgZGlmZmVyZW50IHNjYWxlIGZvciBUQVJHRVRfU1VQRVJTQ0FMQVIuCgkoU0hfRFlOQU1JQ19TSElGVF9DT1NUKTogQ2hlYXBlciBmb3IgU0g0LgoJKiBzaC5tZCAoYXR0cmlidXRlIGNwdSk6IEFkZCB2YWx1ZSBzaDQuCgkoYXR0cmJ1dGVzIGZtb3ZkLCBpc3N1ZXMpOiBEZWZpbmUuCgkoYXR0cmlidXRlIHR5cGUpOiBBZGQgdmFsdWVzIGRmcF9hcml0aCwgZGZwX2NtcCwgZGZwX2NvbnYsIGRmZGl2LgoJKGZ1bmN0aW9uIHVuaXRzIG1lbW9yeSwgaW50LCBtcHksIGZwKTogTWFrZSBkZXBlbmRlbnQgb24gaXNzdWUgcmF0ZS4KCShmdW5jdGlvbiB1bml0cyBpc3N1ZSwgc2luZ2xlX2lzc3VlLCBsb2FkX3NpLCBsb2FkKTogRGVmaW5lLgoJKGZ1bmN0aW9uIHVuaXRzIGxvYWRfc3RvcmUsIGZkaXYsIGdwX2ZwdWwpOiBEZWZpbmUuCgkoYXR0cmlidXRlIGhpdF9zdGFjayk6IFByb3ZpZGUgcHJvcGVyIGRlZmF1bHQuCgkodXNlX3NmdW5jX2FkZHIrMSwgdWRpdnNpMyk6IFByZWRpY2F0ZWQgb24gISBUQVJHRVRfU0g0LgoJKHVkaXZzaTNfaTQsIHVkaXZzaTNfaTRfc2luZ2xlLCBkaXZzaTNfaTQsIGRpdnNpM19pNF9zaW5nbGUpOiBOZXcgaW5zbnMuCgkodWRpdnNpMywgZGl2c2kzKTogRW1pdCBzcGVjaWFsIHBhdHRlcm5zIGZvciBTSDQgaGFyZHdhcmUsCgkobXVsc2kzX2NhbGwpOiBOb3cgdXNlcyBtYXRjaF9vcGVyYW5kIGZvciBmdW5jdGlvbiBhZGRyZXNzLgoJKG11bHNpMyk6IEFsc28gZW1pdCBjb2RlIGZvciBTSDEgY2FzZS4gIFdyYXAgcmVzdWx0IGluIFJFR19MSUJDQUxMIC8KCVJFR19SRVRWQUwgbm90ZXMuCgkocHVzaCwgcG9wLCBwdXNoX2UsIHBvcF9lKTogTm93IGRlZmluZV9leHBhbmRzLgoJKHB1c2hfZnB1bCwgcHVzaF80LCBwb3BfZnB1bCwgcG9wXzQsIGljX2ludmFsaWRhdGVfbGluZSk6IE5ldyBleHBhbmRlcnMuCgkobW92c2lfaWUpOiBBZGRlZCB5L2kgYWx0ZXJuYXRpdmUuCgkoaWNfaW52YWxpZGF0ZV9saW5lX2ksIG1vdmRmX2k0KTogTmV3IGluc25zLgoJKG1vdmRmX2k0K1sxMjNdLCByZWxvYWRfb3V0ZGYrWzEyMzQ1XSwgbW92c2lfeStbMTJdKTogTmV3IHNwbGl0dGVycy4KCShyZWxvYWRfaW5kZiwgcmVsb2FkX291dGRmLCByZWxvYWRfb3V0c2YsIHJlbG9hZF9pbnNpKTogTmV3IGV4cGFuZGVycy4KCShtb3ZkZik6IEFkZCBzcGVjaWFsIGNvZGUgZm9yIFNINC4KCShtb3ZzZl9pZSwgbW92c2ZfaWUrMSwgcmVsb2FkX2luc2YsIGNhbGxpKTogTWFrZSB1c2Ugb2YgZnBzY3IgdmlzaWJsZS4KCShjYWxsX3ZhbHVlaSwgY2FsbGksIGNhbGxfdmFsdWUpOiBMaWtld2lzZS4KCShtb3ZzZik6IEVtaXQgbm8tb3AgbW92ZS4KCShtb3Zfbm9wLCBtb3ZzaV95KTogTmV3IGluc25zLgoJKGJsdCwgc2dlKTogR2VuZXJhbGl6ZSB0byBoYW5kbGUgREZtb2RlLgoJKHJldHVybiBwcmVkaWNhdGUpOiBDYWxsIGVtaXRfZnBzY3JfdXNlIGFuZCByZW1vdmVfZGVhZF9iZWZvcmVfY3NlLgoJKGJsb2NrX21vdmVfcmVhbCwgYmxvY2tfbHVtcF9yZWFsKTogUHJlZGljYXRlIG9uICEgVEFSR0VUX0hBUkRfU0g0LgoJKGJsb2NrX21vdmVfcmVhbF9pNCwgYmxvY2tfbHVtcF9yZWFsX2k0LCBmcHVfc3dpdGNoKTogTmV3IGluc25zLgoJKGZwdV9zd2l0Y2gwLCBmcHVfc3dpdGNoMSwgbW92cHNpKTogTmV3IGV4cGFuZGVycy4KCShmcHVfc3dpdGNoK1sxMl0sIGZpeF90cnVuY3Nmc2kyX2k0XzIrMSk6IE5ldyBzcGxpdHRlcnMuCgkodG9nZ2xlX3N6KTogTmV3IGluc24uCgkoYWRkc2YzLCBzdWJzZjMsIG11bHNmMywgZGl2c2YzKTogTm93IGRlZmluZV9leHBhbmRzLgoJKGFkZHNmM19pLCBzdWJzZjNfaSwgbXVsc2YzX2k0LCBtdWxzZjNfaWUsIGRpdnNmM19pKTogTmV3IGluc25zLgoJKG1hY3NmMyk6IE1ha2UgdXNlIG9mIGZwc2NyIHZpc2libGUuICBEaXNhYmxlIGZvciBTSDQuCgkoZmxvYXRzaXNmMik6IE1ha2UgdXNlIG9mIGZwc2NyIHZpc2libGUuCgkoZmxvYXRzaXNmMl9pNCk6IE5ldyBpbnNuLgoJKGZsb2F0c2lzZjJfaWUsIGZpeHNmc2ksIGNtcGd0c2ZfdCwgY21wZXFzZl90KTogRGlzYWJsZSBmb3IgU0g0LgoJKGllZWVfY2NtcGVxc2ZfdCk6IExpa2V3aXNlLgoJKGZpeF90cnVuY3Nmc2kyKTogRW1pdCBkaWZmZXJlbnQgY29kZSBmb3IgU0g0LgoJKGZpeF90cnVuY3Nmc2kyX2k0LCBmaXhfdHJ1bmNzZnNpMl9pNF8yLCBjbXBndHNmX3RfaTQpOiBOZXcgaW5zbnMuCgkoY21wZXFzZl90X2k0LCBpZWVlX2NjbXBlcXNmX3RfNCk6IE5ldyBpbnNucy4KCShuZWdzZjIsIHNxcnRzZjIsIGFic3NmMik6IE5vdyBleHBhbmRlcnMuCgkoYWRkZGYzLCBzdWJkZjNpLCBtdWxkZjIsIGRpdmRmMywgZmxvYXRzaWRmMik6IE5ldyBleHBhbmRlcnMuCgkobmVnc2YyX2ksIHNxcnRzZjJfaSwgYWJzc2YyX2ksIGFkZGRmM19pLCBzdWJkZjNfaSk6IE5ldyBpbnNucy4KCShtdWxkZjNfaSwgZGl2ZGYzX2ksIGZsb2F0c2lkZjJfaSwgZml4X3RydW5jZGZzaTJfaSk6IE5ldyBpbnNucy4KCShmaXhfdHJ1bmNkZnNpMiwgY21wZGYsIG5lZ2RmMiwgc3FydGRmMiwgYWJzZGYyKTogTmV3IGV4cGFuZGVycy4KCShmaXhfdHJ1bmNkZnNpMl9pNCwgY21wZ3RkZl90LCBjbXBlcWRmX3QsIGllZWVfY2NtcGVxZGZfdCk6IE5ldyBpbnNucy4KCShmaXhfdHJ1bmNkZnNpMl9pNF8yKzEpOiBOZXcgc3BsaXR0ZXJzLgoJKG5lZ2RmMl9pLCBzcXJ0ZGYyX2ksIGFic2RmMl9pLCBleHRlbmRzZmRmMl9pNCk6IE5ldyBpbnNucy4KCShleHRlbmRzZmRmMiwgdHJ1bmNkZnNmMik6IE5ldyBleHBhbmRlcnMuCgkodHJ1bmNkZnNmMl9pNCk6IE5ldyBpbnNuLgoJKiB0LXNoIChMSUIxQVNNRlVOQ1MpOiBBZGQgX21vdnN0cl9pNCwgX3NkaXZzaTNfaTQsIF91ZGl2c2kzX2k0LgoJKE1VTFRJTElCX09QVElPTlMpOiBBZGQgbTQtc2luZ2xlLW9ubHkvbTQtc2luZ2xlL200LgoJKiBmbG9hdC1zaC5oOiBXaGVuIHRlc3RpbmcgZm9yIF9fU0gzRV9fLCBhbHNvIHRlc3QgZm9yCglfX1NINF9TSU5HTEVfT05MWV9fIC4KCSogdmEtc2guaCAoX192YV9mcmVnKTogRGVmaW5lIHRvIGZsb2F0LgoJKF9fdmFfZ3JlZywgX19mYV9mcmVnLCBfX2dudWNfdmFfbGlzdCwgdmFfc3RhcnQpOgoJRGVmaW5lIGZvciBfX1NINF9TSU5HTEVfT05MWV9fIGxpa2UgZm9yIF9fU0gzRV9fIC4KCShfX1BBU1NfQVNfRkxPQVQsIF9fVEFSR0VUX1NINF9QKTogTGlrZXdpc2UuCgkoX19QQVNTX0FTX0ZMT0FUKTogVXNlIGRpZmZlcmVudCBkZWZpbml0aW9uIGZvciBfX1NINF9fIGFuZAoJIF9fU0g0X1NJTkdMRV9fLgoJKFRBUkdFVF9TSDRfUCk6IERlZmluZS4KCSh2YV9hcmcpOiBVc2UgaXQuCgoJKiBzaC5tZCAobW92ZGZfaywgbW92c2ZfaSk6IFR3ZWFrIHRoZSBjb25kaXRpb24gc28gdGhhdAoJaW5pdF9leHByX29uY2UgaXMgc2F0aXNmaWVkIGFib3V0IHRoZSBleGlzdGVuY2Ugb2YgbG9hZCAvIHN0b3JlIGluc25zLgoKCSogc2gubWQgKG1vdnNpX2ksIG1vdnNpX2llLCBtb3ZzaV9pX2xvd3BhcnQsIG1vdnNmX2ksIG1vdnNmX2llKToKCUNoYW5nZSBtIGNvbnN0cmFpbnQgaW4gc291cmNlIG9wZXJhbmQgdG8gbXIgLyBtZi4KCgkqIHZhLXNoLmggKF9fdmFfYXJnX3NoMSk6IFVzZSBfX2FzbSBpbnN0ZWFkIG9mIGFzbS4KCgkqIChfX1ZBX1JFRUYpOiBEZWZpbmUuCgkoX192YV9hcmdfc2gxKTogVXNlIGl0LgoKCSogdmEtc2guaCAodmFfc3RhcnQsIHZhX2FyZywgdmFfY29weSk6IEFkZCBwYXJlbnRoZXNlcy4KClN1biBOb3YgMjIgMjE6MzQ6MDIgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogaTM4Ni9kZ3V4LmMgKHN0cnVjdCBvcHRpb24pOiBBZGQgbmV3ICJkZXNjcmlwdGlvbiBmaWVsZCIuCgkqIG04OGsvbTg4ay5jIChzdHJ1Y3Qgb3B0aW9uKTogTGlrZXdpc2UuCgpTdW4gTm92IDIyIDE2OjA3OjU3IDE5OTggIEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKU3VuIE5vdiAyMiAxMzo0MDowMiAxOTk4ICBCZXJuZCBTY2htaWR0ICA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CgoJKiByZWdtb3ZlLmMgKHJlZ21vdmVfcHJvZml0YWJsZV9wKTogVXNlIHJldHVybiB2YWx1ZSBvZiBmaW5kX21hdGNoZXMKCXByb3Blcmx5LgoKU3VuIE5vdiAyMiAwMjo0NzozNyAxOTk4ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KClNhdCBOb3YgMjEgMjI6MTI6MDkgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcmVsb2FkMS5jIChlbGltaW5hdGVfcmVncyk6IERvIG5vdCBsb3NlIGlmIGVsaW1pbmF0ZV9yZWdzIGlzIGNhbGxlZAoJd2l0aG91dCByZWxvYWQgaGF2aW5nIGJlZW4gY2FsbGVkIGVhcmxpZXIuCgoJKiB2ODUwLmMgKGVwX21lbW9yeV9vcGVyYW5kKTogT2Zmc2V0cyA8IDAgYXJlIG5vdCB2YWxpZCBmb3IgRVAKCWFkZHJlc3NpbmcgbW9kZXMuCgkodjg1MF9yZW9yZyk6IFNpbWlsYXJseS4KCgkqIGxvb3AuYyAoY2hlY2tfZGJyYV9sb29wKTogQXZvaWQgdXNpbmcgZ2VuX2FkZDJfaW5zbi4KClNhdCBOb3YgMjEgMDI6MTg6MzggMTk5OCAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGxvb3AuYyAobW92ZV9tb3ZhYmxlcyk6IFN0YXJ0IG9mIGxpYmNhbGwgbWlnaHQgYmUgbmV3IGxvb3Agc3RhcnQuCgpGcmkgTm92IDIwIDEyOjE0OjE2IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGhhc2guYyAoaGFzaF90YWJsZV9pbml0X24pOiBXcmFwIHByb3RvdHlwZSBhcmd1bWVudHMgaW4gUEFSQU1TKCkuCgpGcmkgTm92IDIwIDA4OjM0OjAwIDE5OTggIEJlcm5kIFNjaG1pZHQgIDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCgkqIGZ1bmN0aW9uLmMgKG5vbmxvY2FsX2dvdG9faGFuZGxlcl9zbG90cyk6IFJlbmFtZWQgZnJvbQoJbm9ubG9jYWxfZ290b19oYW5kbGVyX3Nsb3Q7IG5vdyBhbiBFWFBSX0xJU1QgY2hhaW4uCgkocHVzaF9mdW5jdGlvbl9jb250ZXh0X3RvKTogQWRqdXN0IGZvciB0aGlzIGNoYW5nZS4KCShwb3BfZnVuY3Rpb25fY29udGV4dF9mcm9tKTogTGlrZXdpc2UuCgkoaW5pdF9mdW5jdGlvbl9zdGFydCk6IExpa2V3aXNlLgoJKGV4cGFuZF9mdW5jdGlvbl9lbmQpOiBMaWtld2lzZS4KCSogZnVuY3Rpb24uaCAoc3RydWN0IGZ1bmN0aW9uKTogTGlrZXdpc2UuCgkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKTogTGlrZXdpc2UuCgkqIGV4cGxvdy5jIChhbGxvY2F0ZV9keW5hbWljX3N0YWNrX3NwYWNlKTogTGlrZXdpc2UuCgkqIGV4cHIuaCAobm9ubG9jYWxfZ290b19oYW5kbGVyX3Nsb3RzKTogUmVuYW1lIGl0cyBkZWNsYXJhdGlvbi4KCSogc3RtdC5jIChkZWNsYXJlX25vbmxvY2FsX2xhYmVsKTogTWFrZSBhIG5ldyBoYW5kbGVyIHNsb3QgZm9yIGVhY2gKCWxhYmVsLgoJKGV4cGFuZF9nb3RvKTogV2hlbiBkb2luZyBhIG5vbmxvY2FsIGdvdG8sIGZpbmQgY29ycmVzcG9uZGluZyBoYW5kbGVyCglzbG90IGZvciBpdC4gIERvbid0IHB1dCB0aGUgbGFiZWwgYWRkcmVzcyBpbiB0aGUgc3RhdGljIGNoYWluIHJlZ2lzdGVyLgoJKGV4cGFuZF9lbmRfYmluZGluZ3MpOiBCcmVhayBvdXQgbm9ubG9jYWwgZ290byBoYW5kbGluZyBjb2RlIGludG8KCXRocmVlIG5ldyBmdW5jdGlvbnMuCgkoZXhwYW5kX25sX2hhbmRsZXJfbGFiZWwsIGV4cGFuZF9ubF9nb3RvX3JlY2VpdmVyLAoJZXhwYW5kX25sX2dvdG9fcmVjZWl2ZXJzKTogTmV3IHN0YXRpYyBmdW5jdGlvbnMsIGJyb2tlbiBvdXQgb2YKCWV4cGFuZF9lbmRfYmluZGluZ3MgYW5kIGFkYXB0ZWQgdG8gY3JlYXRlIG9uZSBoYW5kbGVyIHBlciBub25sb2NhbAoJbGFiZWwuCgkqIGZ1bmN0aW9uLmMgKGRlbGV0ZV9oYW5kbGVycyk6IERlbGV0ZSBpbnNuIGlmIGl0IHJlZmVyZW5jZXMgYW55IG9mCgl0aGUgbm9ubG9jYWwgZ290byBoYW5kbGVyIHNsb3RzLgoJKiBpOTYwLm1kIChub25sb2NhbF9nb3RvKTogQ29tbWVudCBvdXQgY29kZSB0aGF0IG1vZGlmaWVzCglzdGF0aWNfY2hhaW5fcnR4LgoJKiBzcGFyYy5tZCAobm9ubG9jYWxfZ290byk6IExpa2V3aXNlLgoJKGdvdG9faGFuZGxlcl9hbmRfcmVzdG9yZV92OSk6IENvbW1lbnQgb3V0LgoJKGdvdG9faGFuZGxlcl9hbmRfcmVzdG9yZV92OV9zcDY0KTogQ29tbWVudCBvdXQuCgpUaHUgTm92IDE5IDIzOjQ0OjM4IDE5OTggIEJlcm5kIFNjaG1pZHQgIDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCgkqIGV4cHIuYyAoU1RBQ0tfQllURVMpOiBEZWxldGUgdW51c2VkIG1hY3JvLgoJKiBjYWxscy5jOiBQcm92aWRlIGRlZmF1bHQgZm9yIFBSRUZFUlJFRF9TVEFDS19CT1VOREFSWS4KCShTVEFDS19CWVRFUyk6IFVzZSBQUkVGRVJSRURfU1RBQ0tfQk9VTkRBUlksIG5vdCBTVEFDS19CT1VOREFSWS4KCShleHBhbmRfY2FsbCk6IExpa2V3aXNlLgoJKGVtaXRfbGlicmFyeV9jYWxsKTogTGlrZXdpc2UuCgkoZW1pdF9saWJyYXJ5X2NhbGxfdmFsdWUpOiBMaWtld2lzZS4KCSogZnVuY3Rpb24uYzogUHJvdmlkZSBkZWZhdWx0IGZvciBQUkVGRVJSRURfU1RBQ0tfQk9VTkRBUlkuCgkoU1RBQ0tfQllURVMpOiBVc2UgUFJFRkVSUkVEX1NUQUNLX0JPVU5EQVJZLCBub3QgU1RBQ0tfQk9VTkRBUlkuCgkqIGV4cGxvdy5jOiBQcm92aWRlIGRlZmF1bHQgZm9yIFBSRUZFUlJFRF9TVEFDS19CT1VOREFSWS4KCShyb3VuZF9wdXNoKTogVXNlIFBSRUZFUlJFRF9TVEFDS19CT1VOREFSWSwgbm90IFNUQUNLX0JPVU5EQVJZLgoJKGFsbG9jYXRlX2R5bmFtaWNfc3RhY2tfc3BhY2UpOiBMaWtld2lzZS4KCSogdG0udGV4aSAoUFJFRkVSUkVEX1NUQUNLX0JPVU5EQVJZKTogRG9jdW1lbnQgbmV3IG1hY3JvLgoJKFNUQUNLX0JPVU5EQVJZKTogVXBkYXRlIGRlc2NyaXB0aW9uIHRvIHJlZmxlY3QgdGhlIG5ldyBzaXR1YXRpb24uCgpUaHUgTm92IDE5IDIyOjIwOjUxIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHJlb3JnLmMgKHJlbGF4X2RlbGF5X3Nsb3RzKTogV2hlbiBvcHRpbWl6aW5nIGZvciBjb2RlIHNpemUsIGlmIGEKCXJldHVybiB3aXRoIGEgZmlsbGVkIGRlbGF5IHNsb3QgaXMgZm9sbG93ZWQgYnkgYSByZXR1cm4gd2l0aCBhbgoJdW5maWxsZWQgZGVsYXkgc2xvdCwgZGVsZXRlIHRoZSBmaXJzdCByZXR1cm4gYW5kIHJlZW1pdCB0aGUgaW5zbgoJdGhhdCB3YXMgcHJldmlvdXNseSBpbiBpdHMgZGVsYXkgc2xvdC4KCgkqIGk4NjAuYyAoc2luZ2xlX2luc25fc3JjX3ApOiBBZGQgbWlzc2luZyBwYXJlbnMuCgkqIGdpbmNsdWRlL21hdGgtMzMwMC5oOiBMaWtld2lzZS4KClRodSBOb3YgMTkgMjA6NTU6NTkgMTk5OCAgSC5KLiBMdSAgKGhqbEBnbnUub3JnKQoKCSogcmVnY2xhc3MuYyAoaW5pdF9yZWdfc2V0c18xKTogQWRkIHByb3RvdHlwZS4KCShpbml0X3JlZ19tb2Rlcyk6IExpa2V3aXNlLgoKMTk5OC0xMS0xOSAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5waHlzLmNvbHVtYmlhLmVkdT4KCgkqIGMtY29tbW9uLmM6IENoYW5nZSB3YXJuaW5nIG1lc3NhZ2VzIHRvIHNheSBgY29tcGFyaXNvbiBpcwoJYWx3YXlzIHRydWUnIG9yIGBjb21wYXJpc29uIGlzIGFsd2F5cyBmYWxzZScgaW5zdGVhZCBvZiB0aGUKCWNvbmZ1c2luZyBgaXMgYWx3YXlzIDAnLCBgaXMgYWx3YXlzIDEnLgoKVGh1IE5vdiAxOSAxOTowNTo0OSAxOTk4ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIHByaW50LXRyZWUuYyAocHJpbnRfbm9kZSk6IEFmdGVyIHByaW50aW5nIEJMT0NLIG9yIEJJTkRfRVhQUiwKCWJyZWFrIGluc3RlYWQgb2YgcmV0dXJuICh3aGljaCBsb3NlcyBjbG9zaW5nICc+JykuCgpUaHUgTm92IDE5IDE5OjM0OjEzIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGkzODYuaCAoTEVHSVRJTUFURV9DT05TVEFOVF9QKTogUmVqZWN0IENPTlNUX0RPVUJMRXMgdGhhdCBhcmUgbm90CglzdGFuZGFyZCAzODcgY29uc3RhbnRzLgoKCSogaTM4Ni5tZCAoanVtcCk6IEV4cGxpY2l0bHkgc2V0ICJtZW1vcnkiIGF0dHJpYnV0ZS4KCShpbmRpcmVjdF9qdW1wLCBwcm9sb2d1ZV9zZXRfc3RhY2tfcHRyKTogTGlrZXdpc2UuCgkocHJvbG9ndWVfZ2V0X3BjX2FuZF9zZXRfZ290LCBwb3ApOiBMaWtld2lzZS4KCShhbGxvY2F0ZV9zdGFja193b3JkZXIsIGJsb2NrYWdlLCByZXR1cm5faW50ZXJuYWwpOiBMaWtld2lzZS4KCShyZXR1cm5fcG9wX2ludGVybmFsLCBub3ApOiBMaWtld2lzZS4KCShlcGlsb2d1ZV9zZXRfc3RhY2tfcHRyLCBsZWF2ZSk6IExpa2V3aXNlLgoKVGh1IE5vdiAxOSAxNTo0Mjo1NCAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL2FybS9jb2ZmLmg6IFNldCBVU0VSX0xBQkVMX1BSRUZJWCB0byAiXyIuCgpUaHUgTm92IDE5IDIzOjIwOjU5IDE5OTggIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiByZWxvYWQxLmMgKHJlbG9hZF9yZWdfZnJlZV9mb3JfdmFsdWVfcCk6CglFYXJseSBhdXRvX2luYyByZWxvYWRzIGRvbid0IGNvbmZsaWN0IHdpdGggb3V0cHV0cy4KClRodSBOb3YgMTkgMTI6NTg6NTUgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY29uZmlndXJlLmluOiBEb24ndCBkbyBBQ19DSEVDS19IRUFERVJTKHdhaXQuaCBzeXMvd2FpdC5oKS4KCUluc3RlYWQgY2FsbCBBQ19IRUFERVJfU1lTX1dBSVQuCgoJKiBjb2xsZWN0Mi5jOiBEb24ndCBwcm92aWRlIGRlZmF1bHRzIGZvciBzeXMvd2FpdC5oIG1hY3Jvcy4KCSogZ2NjLmM6IExpa2V3aXNlLgoJKiBwcm90b2l6ZS5jOiBMaWtld2lzZS4gIEFsc28sIGRvbid0IGluY2x1ZGUgc3lzL3dhaXQuaC4KCgkqIHN5c3RlbS5oOiBJbmNsdWRlIHN5cy93YWl0LmggYW5kIHByb3ZpZGUgbWFjcm8gZGVmYXVsdHMuCgoxOTk4LTExLTE5ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5jcy51bmktZG9ydG11bmQuZGU+CgoJKiBNYWtlZmlsZS5pbiAobWFuZGlyKTogU2V0IHRvIEBtYW5kaXJALgoJKG1hbjFkaXIpOiBOZXcgdmFyaWFibGUgdG8gaG9sZCB0aGUgZm9ybWVyIHZhbHVlIG9mICQobWFuZGlyKS4KCVJlcGxhY2UgYWxsIHVzZXMgb2YgJChtYW5kaXIpIGJ5ICQobWFuMWRpcikuCgpXZWQgTm92IDE4IDE2OjMxOjI4IDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHNfYWRkcmVzc19wYXJ0KTogSWYgaGF2ZSBhIENPTlNUX0lOVCwgY3JlYXRlCglhIG5ldyBvbmUgYmVmb3JlIHBhc3NpbmcgaXQgdG8gZm9yY2VfY29uc3RfbWVtLgoKCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkc190b3BsZXYpOiBQYXNzICZ4IGluc3RlYWQgb2YgTlVMTF9QVFIgaW4KCWZpbmRfcmVsb2Fkc19hZGRyZXNzIGNhbGwuCgpXZWQgTm92IDE4IDIyOjEzOjAwIDE5OTggIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBleHByLmMgKHN0b3JlX2V4cHIpOiBEb24ndCBnZW5lcmF0ZSBsb2FkLXN0b3JlIHBhaXIKCWlmIFRFTVAgaXMgaWRlbnRpY2FsIChhY2NvcmRpbmcgdG8gPT0pIHdpdGggVEFSR0VULgoKVHVlIE5vdiAxNyAyMjoyNToxNiAxOTk4ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogcmVsb2FkMS5jIChyZWxvYWRfcmVnX2ZyZWVfZm9yX3ZhbHVlX3ApOiBXaGVuIGNvbnNpZGVyZWQgcmVsb2FkCgloYXMgYW4gb3V0cHV0LCBtYXRjaGluZyBpbnB1dHMgYXJlIG5vdCBzdWZmaWNpZW50IHRvIGF2b2lkIGNvbmZsaWN0LgoKVHVlIE5vdiAxNyAxMTo1MToxNiAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogaGFzaC5oIChoYXNoX3RhYmxlX2tleSk6IE5ldyB0eXBlLgoJKGhhc2hfZW50cnkpOiBDaGFuZ2UgYHN0cmluZycgZmllbGQgdG8gZ2VuZXJpYyBga2V5Jy4KCShoYXNoX3RhYmxlKTogQWRkIGBjb21wJyBhbmQgYGhhc2gnIGZ1bmN0aW9ucy4KCShoYXNoX3RhYmxlX2luaXQpOiBUYWtlIHRoZW0gYXMgaW5wdXQuCgkoaGFzaF90YWJsZV9pbml0X24pOiBMaWtld2lzZS4KCShoYXNoX2xvb2t1cCk6IE1vZGlmeSBmb3IgZ2VuZXJpYyBrZXlzLgoJKGhhc2hfbmV3ZnVuYyk6IExpa2V3aXNlLgoJKGhhc2hfdHJhdmVyc2UpOiBMaWtld2lzZS4KCShzdHJpbmdfaGFzaCk6IE5ldyBmdW5jdGlvbi4KCShzdHJpbmdfY29tcGFyZSk6IExpa2V3aXNlLgoJKHN0cmluZ19jb3B5KTogTGlrZXdpc2UuCgkqIGhhc2guYyAoaGFzaF90YWJsZV9pbml0X24pOiBNb2RpZnkgZm9yIGdlbmVyaWMga2V5cy4KCShoYXNoX3RhYmxlX2luaXQpOiBMaWtld2lzZS4KCShoYXNoX2xvb2t1cCk6IExpa2V3aXNlLgoJKGhhc2hfbmV3ZnVuYyk6IExpa2V3aXNlLgoJKGhhc2hfdHJhdmVyc2UpOiBMaWtld2lzZS4KCShzdHJpbmdfaGFzaCk6IFNwbGl0IG91dCBmcm9tIGhhc2hfbG9va3VwLgoJKHN0cmluZ19jb21wYXJlKTogTmV3IGZ1bmN0aW9uLgoJKHN0cmluZ19jb3B5KTogU3BsaXQgb3V0IGZyb20gaGFzaF9sb29rdXAuCgkqIHRsaW5rLmMgKHN5bWJvbF9oYXNoX25ld2Z1bmMpOiBNb2RpZnkgZm9yIG5ldyBpbnRlcmZhY2VzIHRvIGhhc2gKCXRhYmxlcy4KCShzeW1ib2xfaGFzaF9sb29rdXApOiBMaWtld2lzZS4KCShmaWxlX2hhc2hfbmV3ZnVuYyk6IExpa2V3aXNlLgoJKGZpbGVfaGFzaF9sb29rdXApOiBMaWtld2lzZS4KCShkZW1hbmdsZWRfaGFzaF9uZXdmdW5jKTogTGlrZXdpc2UuCgkoZGVtYW5nbGVkX2hhc2hfbG9va3VwKTogTGlrZXdpc2UuCgkodGxpbmtfaW50KTogTGlrZXdpc2UuCgkocmVhZF9yZXBvX2ZpbGUpOiBMaWtld2lzZS4KCShyZWNvbXBpbGVfZmlsZXMpOiBMaWtld2lzZS4KCShkZW1hbmdsZV9uZXdfc3ltYm9scyk6IExpa2V3aXNlLgoJKHNjYW5fbGlua2VyX291dHB1dCk6IExpa2V3aXNlLgoKVHVlIE5vdiAxNyAxNzoxMzo1MyAxOTk4ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogZmxvdy5jIChpbnNuX2RlYWRfcCk6IE5ldyBhcmd1bWVudCBOT1RFUy4gIENoYW5nZWQgYWxsIGNhbGxlcnMuCgpNb24gTm92IDE2IDE3OjU2OjA3IDE5OTggIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIHJzNjAwMC5jIChvdXRwdXRfbWlfdGh1bmspOiBJbXByb3ZlIHRlc3QgZm9yIGxvY2FsIGJyYW5jaC4KCk1vbiBOb3YgMTYgMTc6NTY6MDcgMTk5OCAgRnJhbnogU2lybCAgPEZyYW56LlNpcmwta2VybmVsQGxhdXRlcmJhY2guY29tPgoKCSogcnM2MDAwLmMgKG91dHB1dF9taV90aHVuayk6IENvcnJlY3QgdGVzdCBmb3IgYWdncmVnYXRlIHZhbHVlcy4KCk1vbiBOb3YgMTYgMjE6MDI6NTIgMTk5OCAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHJlbG9hZDEuYyAocmVsb2FkX3JlZ19mcmVlX2JlZm9yZV9wKTogRGVsZXRlLgoJQ2hhbmdlZCBhbGwgY2FsbGVycyB0byB1c2UgcmVsb2FkX3JlZ19mcmVlX2Zvcl92YWx1ZV9wIGluc3RlYWQuCgkocmVsb2FkX3JlZ19mcmVlX2Zvcl92YWx1ZV9wKTogSGFuZGxlIG1vcmUgcmVsb2FkIHR5cGVzLgoJQSBSRUxPQURfRk9SX0lOUFVUIGRvZXNuJ3QgY29uZmxpY3Qgd2l0aCBpdHMKCVJFTE9BRF9GT1JfSU5QVVRfQUREUkVTUyAvIFJFTE9BRF9GT1JfSU5QQUREUl9BRERSRVNTLgoJQWRkIHNwZWNpYWwgY2FzZSBmb3IgT1VUID09IGNvbnN0MF9ydHguCglBZGRlZCBpZ25vcmVfYWRkcmVzc19yZWxvYWRzIGFyZ3VtZW50LiAgQ2hhbmdlZCBhbGwgY2FsbGVycy4KCk1vbiBOb3YgMTYgMDI6MjI6MjkgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdG9wbGV2LmMgKGNvbXBpbGVfZmlsZSk6IERvbid0IHBlZHdhcm4gYWJvdXQgdW5kZWZpbmVkIHN0YXRpYwoJZnVuY3Rpb25zIGp1c3QgYmVjYXVzZSB3ZSBwYXNzZWQgLVd1bnVzZWQuCgpNb24gTm92IDE2IDA0OjQxOjQxIDE5OTggIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBmdW5jdGlvbi5jIChwdXJnZV9hZGRyZXNzb2ZfMSk6IFVuc2hhcmUgcnRsIGNyZWF0ZWQgYnkKCXN0b3JlX2JpdF9maWVsZC4KCk1vbiBOb3YgMTYgMDQ6MjM6MDYgMTk5OCAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHJlZ21vdmUuYyAocmVnbW92ZV9vcHRpbWl6ZSk6IERvbid0IGRvIGFueXRoaW5nIGJ1dAoJb3B0aW1pemVfcmVnX2NvcHlbMTIzXSB3aGVuIGZsYWdfcmVnbW92ZSBpcyBub3Qgc2V0LgoKU2F0IE5vdiAxNCAxNTowNTowNyAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEubWQgKGFkZHNpMywgc3Vic2kzKTogUmV2aXNlIDUgTm92IGNoYW5nZSB0byBzdG9yZSBESW1vZGUKCXZhbHVlIGluIHBhcmFkb3hpY2FsIFNJbW9kZSByZXN1bHQsIHJhdGhlciB0aGFuIHRydW5jYXRpbmcgbWlkcG9pbnQuCgpGcmkgTm92IDEzIDIyOjE5OjIzIDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbHBoYS5jIChyZWdfbm90X2VsaW1fb3BlcmFuZCk6IE5ldy4KCSogYWxwaGEuaCAoUFJFRElDQVRFX0NPREVTKTogQWRkIGl0LgoJKiBhbHBoYS5tZCAoczQ4YWRkcSwgczQ4c3VicSBwYXR0ZXJucyk6IFVzZSBpdCBhcyB0aGUgcHJlZGljYXRlCglmb3IgdGhlIG11bHRpcGxpY2FuZC4KCkZyaSBOb3YgMTMgMjI6NTA6MzcgMTk5OCAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogcnM2MDAwLm1kIChtb3ZzZik6IFJlbW92ZSBleHBsaWNpdCBzZWNvbmRhcnktcmVsb2FkLWxpa2UKCWZ1bmN0aW9uYWxpdHkuICBPbmx5IHRydW5jYXRlIFNGbW9kZSBzdG9yZSBpZiBpbiBGUFIuCgkobW92c2Ygc3BsaXR0ZXJzKTogQ29tYmluZSBjb25zdF9kb3VibGUgc3BsaXR0ZXJzLgoJKG1vdnNmX2hhcmRmbG9hdCk6IEFkZCBHUFIgc3VwcG9ydC4KCkZyaSBOb3YgMTMgMTE6MDI6MTEgMTk5OCAgU3RhbiBDb3ggIDxzY294QGN5Z251cy5jb20+CgoJKiBzcGxldC5oIChTVUJUQVJHRVRfT1ZFUlJJREVfT1BUSU9OUyk6IE5ldyB0bwoJZGVwcmVjYXRlIC1tbGl2ZS1nMCBhbmQgLW1icm9rZW4tc2F2ZXJlc3RvcmUuCgkqIHQtc3BsZXQgKE1VTFRJTElCX09QVElPTlMpOiBMaWtld2lzZS4KCgkqIHNwYXJjLmMgKHNwYXJjX2ZsYXRfY29tcHV0ZV9mcmFtZV9zaXplKTogQ29ycmVjdGx5IGNhbGMgYXJnc19zaXplCglpbiBhIGxlYWYgZnVuY3Rpb24uICBDbGFyaWZ5IHRvdGFsX3NpemUvZXh0cmFfc2l6ZSByZWxhdGlvbnNoaXAuCgpUaHUgTm92IDEyIDE5OjIwOjU3IDE5OTggIEdlb2ZmcmV5IE5vZXIgIDxub2VyQGN5Z251cy5jb20+CgoJKiBpMzg2L2N5Z3dpbjMyLmFzbTogRGVsZXRlLgoJKiBpMzg2L2N5Z3dpbi5hc206IE5ldyBmaWxlLCByZW5hbWVkIGZyb20gY3lnd2luMzIuYXNtLgoJKiBpMzg2L2N5Z3dpbjMyLmg6IERlbGV0ZS4KCSogaTM4Ni9jeWd3aW4uaDogTmV3IGZpbGUsIHJlbmFtZWQgZnJvbSBjeWd3aW4zMi5oLgoJKiBpMzg2L3QtY3lnd2luMzI6IERlbGV0ZS4KCSogaTM4Ni90LWN5Z3dpbjogTmV3IGZpbGUsIHJlbmFtZWQgZnJvbSB0LWN5Z3dpbjMyLiAgSW5jbHVkZQoJY3lnd2luLmFzbSBpbnN0ZWFkIG9mIGN5Z3dpbjMyLmFzbS4gIFJlbW92ZSAiMzIiIGZyb20gY29tbWVudC4KCSogaTM4Ni94LWN5Z3dpbjMyOiBEZWxldGUuCgkqIGkzODYveC1jeWd3aW46IE5ldyBmaWxlLCByZW5hbWVkIGZyb20geC1jeWd3aW4zMi4KCSogaTM4Ni94bS1jeWd3aW4zMjogRGVsZXRlLgoJKiBpMzg2L3htLWN5Z3dpbjogTmV3IGZpbGUsIHJlbmFtZWQgZnJvbSB4bS1jeWd3aW4zMi4gIFVzZSBuZXdseQoJcmVuYW1lZCBjeWd3aW5fIGZ1bmNzIGZvciBwYXRoIHRyYW5zbGF0aW9ucy4KCSogaTM4Ni93aW4zMi5oOiBEZWZpbmUgX19DWUdXSU5fXyB3aGVuIC1tY3lnd2luIGdpdmVuLgoJKiBpMzg2L3dpbm50LmM6IFJlbW92ZSAiMzIiIGZyb20gY29tbWVudCBhYm91dCBjeWd3aW4uCgkqIGkzODYvbWluZ3czMi5oOiBGaXggcmVmZXJlbmNlcyB0byBjeWd3aW4zMi5oIGluIGxpZ2h0IG9mIGFib3ZlLgoJKiByczYwMDAvY3lnd2luMzIuaDogRGVsZXRlLgoJKiByczYwMDAvY3lnd2luLmg6IE5ldyBmaWxlLCByZW5hbWVkIGZyb20gY3lnd2luMzIuaC4gIEFkZAoJLURfX0NZR1dJTl9fIHRvIENQUF9QUkVERUZJTkVTLgoJKiByczYwMDAveC1jeWd3aW4zMjogRGVsZXRlLgoJKiByczYwMDAveC1jeWd3aW46IE5ldyBmaWxlLCByZW5hbWVkIGZyb20geC1jeWd3aW4zMi4KCSogcnM2MDAwL3htLWN5Z3dpbjMyOiBEZWxldGUuCgkqIHJzNjAwMC94bS1jeWd3aW46IE5ldyBmaWxlLCByZW5hbWVkIGZyb20geG0tY3lnd2luMzIuCgoJKiBjb25maWd1cmUuaW46IENoZWNrIGZvciBjeWd3aW4qIGluc3RlYWQgb2YgY3lnd2luMzIuICBBY2NvdW50Cglmb3IgdGhlIHJlbmFtZSBvZiBjeWd3aW4tcmVsYXRlZCBjb25maWcgZmlsZXMgdG8gbG9zZSB0aGUgIjMyInMuCgkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KCgkqIGNjY3AuYywgY29sbGVjdDIuYywgZ2NjLmMsIGdldHB3ZC5jLCBsaWJnY2MyLmMsIHByb3RvaXplLmMsCgl0b3BsZXYuYzogQ2hhbmdlIGFsbCByZWZzIHRvIF9fQ1lHV0lOMzJfXyB0byBfX0NZR1dJTl9fLgoKV2VkIE5vdiAxMSAxMjoyNToxOSAxOTk4ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoSkFWQUdDKTogTmV3IG1hY3JvLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgkqIGNvbmZpZ3VyZS5pbjogUmVjb2duaXplIC0tZW5hYmxlLWphdmEtZ2MgYXJndW1lbnQuICBTdWJzdAoJYEpBVkFHQycgdmFyaWFibGUuCgpUaHUgTm92IDEyIDAzOjMyOjE2IDE5OTggIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJSGFuZGxlIGVxdWl2YWxlbmNlcyB0aGF0IGhhdmUgYmVlbiBvYnNjdXJlZCBieSBnY3NlOgoKCSogcmVsb2FkMS5jIChyZWxvYWQpOiBIYW5kbGUgZXF1aXZhbGVuY2VzIHNldCB1cCBpbiBtdWx0aXBsZSBwbGFjZXMuCgkqIGxvY2FsLWFsbG9jLmMgKHJlZ19lcXVpdl9pbml0X2luc25zKTogTmV3IHZhcmlhYmxlLgoJKG5vX2VxdWl2KTogTmV3IGZ1bmN0aW9uLgoJKHVwZGF0ZV9lcXVpdl9yZWdzKTogSGFuZGxlIGVxdWl2YWxlbmNlcyBzZXQgdXAgaW4gbXVsdGlwbGUgcGxhY2VzLgoJRG9uJ3QgaWdub3JlIGFuIGluc24ganVzdCBiZWNhdXNlIGl0cyBkZXN0aW5hdGlvbiBpcyBsaWtlbHkgdG8gYmUKCXNwaWxsZWQuCgpXZWQgTm92IDExIDEzOjQ2OjEzIDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdC5jIChleHBhbmRfZWhfcmV0dXJuKTogUmVhZGQgZm9yY2Vfb3BlcmFuZCBjYWxsIGxvc3QgaW4KCVNlcHQgMTUgY2hhbmdlLgoKVHVlIE5vdiAxMCAxNzowNDoxMSAxOTk4ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiByczYwMDAuaCAoTEVHSVRJTUlaRV9BRERSRVNTKTogQWRkIG1pc3NpbmcgZ290byBvbiBsYXN0IGNhc2UuCgoxOTk4LTExLTA5ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5jcy51bmktZG9ydG11bmQuZGU+CgoJKiBkYnhvdXQuYzogQ2hlY2sgSEFWRV9TVEFCX0ggaW5zdGVhZCBvZiBIQVZFX1NUQUJTX0guCgpNb24gTm92ICA5IDIwOjE1OjE5IDE5OTggIEJlcm5kIFNjaG1pZHQgIDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCgkqIHJlZ21vdmUuYyAocmVnbW92ZV9vcHRpbWl6ZSk6IEZpeCBlcnJvciBpbiBsYXN0IGNoYW5nZS4KCk1vbiBOb3YgIDkgMTY6Mzc6NTIgMTk5OCAgQW5kcmV3IENhZ25leSAgPGNhZ25leUBiMS5jeWdudXMuY29tPgoKCSogbWlwcy5jIChmdW5jdGlvbl9wcm9sb2d1ZSk6IFdoZW4gVEFSR0VUX01JUFMxNiwgYWRqdXN0IHRoZSByZWdpc3RlcgoJb2Zmc2V0IGluIHRoZSAubWFzayBwc2V1ZG8gdG8gY29tcGVuc2F0ZSBmb3IgZnJhbWUgcG9pbnRlciBhZGp1c3RtZW50cy4KCShtaXBzMTZfZnBfYXJncywgYnVpbGRfbWlwczE2X2NhbGxfc3R1Yik6IEZvciBsaXR0bGUgZW5kaWFuLCBkbyBub3QKCXdvcmQgc3dhcCBhcmd1bWVudHMgbW92ZWQgdG8vZnJvbSBGUCByZWdpc3RlcnMuCgkqIG1pcHMxNi5TIChERlJFVkNNUCk6IFJldmVyc2UgYXJndW1lbnRzIHRvIE9QQ09ERS4KCk1vbiBOb3YgIDkgMDk6NDc6MDYgMTk5OCAgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpNb24gTm92ICA5IDAyOjE0OjE0IDE5OTggIEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKTW9uIE5vdiAgOSAwMzowNjoyNCAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiByZWxvYWQxLmMgKGRlbGV0ZV9vdXRwdXRfcmVsb2FkX2luc24pOiBJZiBhIHBzZXVkbyBpcyBzZXQgbXVsdGlwbGUKCXRpbWVzLCB0aGVuIGl0IGNhbiBub3QgYmUgY29tcGxldGVseSByZXBsYWNlZC4KCk1vbiBOb3YgIDkgMDA6Mzk6MDIgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGFscGhhLm1kIChjYWxsLCBjYWxsX3ZhbHVlKSBbT1NGXTogQ29ycmVjdCBhbHQgMyBpbnNuIGxlbmd0aC4KClN1biBOb3YgIDggMTc6NTA6MzAgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogZ2Fuc2lkZWNsLmg6IFByZXBlbmQgYSAiRyIgdG8gdGhlIG1hY3JvIHdyYXBwaW5nIHRoaXMgZmlsZQoJKHRvIGRpc3Rpbmd1aXNoIGl0IGZyb20gdGhlIG1hY3JvIHdyYXBwaW5nIGFuc2lkZWNsLmguKQoJSW5jbHVkZSBsaWJpYmVydHkncyBhbnNpZGVjbC5oLiAgUmVtb3ZlIGFsbCByZWR1bmRhbnQgZGVmaW5pdGlvbnMuCglEZWZpbmUgdGhlIFBST1RPKCkgc3R5bGUgbWFjcm9zIGluIHRlcm1zIG9mIHRoZSBQQVJBTVMoKSBvbmVzLgoKCgkqIGNhbGxzLmMgKGVtaXRfbGlicmFyeV9jYWxsKTogU3dpdGNoIG9uIEFOU0lfUFJPVE9UWVBFUywgbm90CglfX1NURENfXywgd2hlbiBkZWNpZGluZyB3aGV0aGVyIHRvIHVzZSBBTlNJIHZhcmlhYmxlIGFyZ3MuCgkoZW1pdF9saWJyYXJ5X2NhbGxfdmFsdWUpOiBMaWtld2lzZS4KCgkqIGNjY3AuYyAoZXJyb3IpOiBMaWtld2lzZS4KCSh3YXJuaW5nKTogTGlrZXdpc2UuCgkoZXJyb3Jfd2l0aF9saW5lKTogTGlrZXdpc2UuCgkod2FybmluZ193aXRoX2xpbmUpOiBMaWtld2lzZS4KCShwZWR3YXJuKTogTGlrZXdpc2UuCgkocGVkd2Fybl93aXRoX2xpbmUpOiBMaWtld2lzZS4KCShwZWR3YXJuX3dpdGhfZmlsZV9hbmRfbGluZSk6IExpa2V3aXNlLgoJKGZhdGFsKTogTGlrZXdpc2UuCgoJKiBjZXhwLnkgKGVycm9yKTogTGlrZXdpc2UuCgkocGVkd2Fybik6IExpa2V3aXNlLgoJKHdhcm5pbmcpOiBMaWtld2lzZS4KCgkqIGNvbGxlY3QyLmMgKGZhdGFsX3BlcnJvcik6IExpa2V3aXNlLgoJKGZhdGFsKTogTGlrZXdpc2UuCgkoZXJyb3IpOiBMaWtld2lzZS4KCgkqIGNvbWJpbmUuYyAoZ2VuX3J0eF9jb21iaW5lKTogTGlrZXdpc2UuCgoJKiBjcHBlcnJvci5jIChjcHBfbWVzc2FnZSk6IExpa2V3aXNlLgoJKGNwcF9mYXRhbCk6IExpa2V3aXNlLgoKCSogY3BwbGliLmMgKGNwcF9lcnJvcik6IExpa2V3aXNlLgoJKGNwcF93YXJuaW5nKTogTGlrZXdpc2UuCgkoY3BwX3BlZHdhcm4pOiBMaWtld2lzZS4KCShjcHBfZXJyb3Jfd2l0aF9saW5lKTogTGlrZXdpc2UuCgkoY3BwX3dhcm5pbmdfd2l0aF9saW5lKTogTGlrZXdpc2UuCgkoY3BwX3BlZHdhcm5fd2l0aF9saW5lKTogTGlrZXdpc2UuCgkoY3BwX3BlZHdhcm5fd2l0aF9maWxlX2FuZF9saW5lKTogTGlrZXdpc2UuCgoJKiBjcHBsaWIuaDogRG9uJ3QgZGVmaW5lIFBBUkFNUygpIG1hY3JvLgoKCSogZGVtYW5nbGUuaDogTGlrZXdpc2UuCgoJKiBkb3ByaW50LmMgKGNoZWNraXQpOiBTd2l0Y2ggb24gQU5TSV9QUk9UT1RZUEVTLCBub3QgX19TVERDX18sCgl3aGVuIGRlY2lkaW5nIHdoZXRoZXIgdG8gdXNlIEFOU0kgdmFyaWFibGUgYXJncy4KCgkqIGVtaXQtcnRsLmMgKGdlbl9ydHgpOiBMaWtld2lzZS4KCShnZW5fcnR2ZWMpOiBMaWtld2lzZS4KCgkqIGZpbmFsLmMgKGFzbV9mcHJpbnRmKTogTGlrZXdpc2UuCgoJKiBmaXgtaGVhZGVyLmMgKGNwcF9tZXNzYWdlKTogTGlrZXdpc2UuCgkoZmF0YWwpOiBMaWtld2lzZS4KCShjcHBfZmF0YWwpOiBMaWtld2lzZS4KCgkqIGdjYy5jIChjb25jYXQpOiBMaWtld2lzZS4KCShmYXRhbCk6IExpa2V3aXNlLgoJKGVycm9yKTogTGlrZXdpc2UuCgoJKiBnZW5hdHRyLmMgKGZhdGFsKTogTGlrZXdpc2UuCgoJKiBnZW5hdHRydGFiLmMgKGF0dHJfcnR4KTogTGlrZXdpc2UuCgkoYXR0cl9wcmludGYpOiBMaWtld2lzZS4KCShmYXRhbCk6IExpa2V3aXNlLgoKCSogZ2VuY29kZXMuYyAoZmF0YWwpOiBMaWtld2lzZS4KCgkqIGdlbmNvbmZpZy5jIChmYXRhbCk6IExpa2V3aXNlLgoKCSogZ2VuZW1pdC5jIChmYXRhbCk6IExpa2V3aXNlLgoKCSogZ2VuZXh0cmFjdC5jIChmYXRhbCk6IExpa2V3aXNlLgoKCSogZ2VuZmxhZ3MuYyAoZmF0YWwpOiBMaWtld2lzZS4KCgkqIGdlbm9waW5pdC5jIChmYXRhbCk6IExpa2V3aXNlLgoKCSogZ2Vub3V0cHV0LmMgKGZhdGFsKTogTGlrZXdpc2UuCgkoZXJyb3IpOiBMaWtld2lzZS4KCgkqIGdlbnBlZXAuYyAoZmF0YWwpOiBMaWtld2lzZS4KCgkqIGdlbnJlY29nLmMgKGZhdGFsKTogTGlrZXdpc2UuCgoJKiBoYWxmcGljLmg6IFN3aXRjaCBvbiBBTlNJX1BST1RPVFlQRVMsIG5vdCBfX1NURENfXywgd2hlbgoJZGVjaWRpbmcgd2hldGhlciB0byBkZWNsYXJlIGB0cmVlX25vZGUnIGFuZCBgcnR4X2RlZicuCgoJKiBoYXNoLmg6IERvbid0IGRlZmluZSBzdHVmZiB3ZSBnZXQgZnJvbSBnYW5zaWRlY2wuaC4KCgkqIG1pcHMtdGZpbGUuYzogTGlrZXdpc2UuICBEZWZpbmUgX19wcm90bygpIGluIHRlcm1zIG9mIFBBUkFNUygpLgoJKGZhdGFsKTogU3dpdGNoIG9uIEFOU0lfUFJPVE9UWVBFUywgbm90IF9fU1REQ19fLCB3aGVuIGRlY2lkaW5nCgl3aGV0aGVyIHRvIHVzZSBBTlNJIHZhcmlhYmxlIGFyZ3MuCgkoZXJyb3IpOiBMaWtld2lzZS4KCgkqIHByZWZpeC5jIChjb25jYXQpOiBMaWtld2lzZS4KCgkqIHNjYW4uaDogTGlrZXdpc2UuCgoJKiBzeXN0ZW0uaDogTGlrZXdpc2UuCgoJKiB0b3BsZXYuYyAoZXJyb3Jfd2l0aF9maWxlX2FuZF9saW5lKTogTGlrZXdpc2UuCgkoZXJyb3Jfd2l0aF9kZWNsKTogTGlrZXdpc2UuCgkoZXJyb3JfZm9yX2FzbSk6IExpa2V3aXNlLgoJKGVycm9yKTogTGlrZXdpc2UuCgkoZmF0YWwpOiBMaWtld2lzZS4KCSh3YXJuaW5nX3dpdGhfZmlsZV9hbmRfbGluZSk6IExpa2V3aXNlLgoJKHdhcm5pbmdfd2l0aF9kZWNsKTogTGlrZXdpc2UuCgkod2FybmluZ19mb3JfYXNtKTogTGlrZXdpc2UuCgkod2FybmluZyk6IExpa2V3aXNlLgoJKHBlZHdhcm4pOiBMaWtld2lzZS4KCShwZWR3YXJuX3dpdGhfZGVjbCk6IExpa2V3aXNlLgoJKHBlZHdhcm5fd2l0aF9maWxlX2FuZF9saW5lKTogTGlrZXdpc2UuCgkoc29ycnkpOiBMaWtld2lzZS4KCShyZWFsbHlfc29ycnkpOiBMaWtld2lzZS4KCgkqIHRvcGxldi5oOiBTd2l0Y2ggb24gQU5TSV9QUk9UT1RZUEVTLCBub3QgX19TVERDX18sIHdoZW4gZGVjaWRpbmcKCXdoZXRoZXIgdG8gZGVjbGFyZSBgdHJlZV9ub2RlJyBhbmQgYHJ0eF9kZWYnLgoKCSogdHJlZS5jIChidWlsZCk6IFN3aXRjaCBvbiBBTlNJX1BST1RPVFlQRVMsIG5vdCBfX1NURENfXywgd2hlbgoJZGVjaWRpbmcgd2hldGhlciB0byB1c2UgQU5TSSB2YXJpYWJsZSBhcmdzLgoJKGJ1aWxkX250KTogTGlrZXdpc2UuCgkoYnVpbGRfcGFyc2Vfbm9kZSk6IExpa2V3aXNlLgoKU3VuIE5vdiAgOCAxMzoxMDo1NSAxOTk4ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KClNhdCBOb3YgIDcgMjM6MzQ6MDEgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogTWFrZWZpbGUuaW4gKGxpYmNwcC5hKTogQ2hlY2sgUkFOTElCX1RFU1QgYmVmb3JlIHJ1bmluZyBSQU5MSUIuCgpTYXQgTm92ICA3IDIyOjI2OjE5IDE5OTggIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIGNvbGxlY3QyLmMgKG1haW4sIGNhc2UgJ2InKTogVXNlIGVsc2UgaWYuCgpTYXQgTm92ICA3IDE1OjM1OjI1IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNvbmZpZ3VyZS5pbiAoaG9zdF94bV9maWxlLCBidWlsZF94bV9maWxlLCB4bV9maWxlLCB0bV9maWxlKToKCUFycmFuZ2UgdG8gaW5jbHVkZSBnYW5zaWRlY2wuaCBpbiB7aHR9Y29uZmlnLmggJiB0bS5oIGp1c3QKCWJlZm9yZSB0aGUgY29uZmlnLyBkaXJlY3RvcnkgaGVhZGVycy4KCSh0bV9maWxlX2xpc3QsIGhvc3RfeG1fZmlsZV9saXN0LCBidWlsZF94bV9maWxlX2xpc3QpOiBIYW5kbGUKCWdhbnNpZGVjbC5oIGluIHRoZSBsaXN0IG9mIGRlcGVuZGVuY2llcy4KCgkqIE1ha2VmaWxlLmluIChSVExfQkFTRV9IKTogRG9uJ3QgZGVwZW5kIG9uIGdhbnNpZGVjbC5oLgoJKFRSRUVfSCwgREVNQU5HTEVfSCwgUkVDT0dfSCwgUkVHU19ILCBsaWJnY2MyLmEsIHN0bXAtbXVsdGlsaWIsCgltYmNoYXIubywgY29sbGVjdDIubywgcGV4ZWN1dGUubywgdmZwcmludGYubywgc3BsYXktdHJlZS5vLCBnY2MubywKCWdlbmNoZWNrLm8sIGNob29zZS10ZW1wLm8sIG1rc3RlbXAubywgbWtzdGVtcC5vLCBwcmVmaXgubywKCWR5bi1zdHJpbmcubywgY2V4cC5vLCBjY2NwLm8sIGNwcG1haW4ubywgY3BwbGliLm8sIGNwcGVycm9yLm8sCgljcHBleHAubywgY3BwZmlsZXMubywgY3BwaGFzaC5vLCBjcHBhbGxvYy5vLCBzY2FuLWRlY2xzLm8pOgoJTGlrZXdpc2UuCgoJKiBjY2NwLmM6IERvbid0IGluY2x1ZGUgZ2Fuc2lkZWNsLmguCgkqIGNleHAueTogTGlrZXdpc2UuCgkqIGNvbGxlY3QyLmM6IExpa2V3aXNlLgoJKiBjb25maWcvYzR4L2M0eC5jOiBMaWtld2lzZS4KCSogY29uZmlnL3Y4NTAvdjg1MC5oOiBMaWtld2lzZS4KCSogY3BwYWxsb2MuYzogTGlrZXdpc2UuCgkqIGNwcGVycm9yLmM6IExpa2V3aXNlLgoJKiBjcHBleHAuYzogTGlrZXdpc2UuCgkqIGNwcGZpbGVzLmM6IExpa2V3aXNlLgoJKiBjcHBoYXNoLmM6IExpa2V3aXNlLgoJKiBjcHBsaWIuYzogTGlrZXdpc2UuCgkqIGNwcG1haW4uYzogTGlrZXdpc2UuCgkqIGNwcHVscC5jOiBMaWtld2lzZS4KCSogZGVtYW5nbGUuaDogTGlrZXdpc2UuCgkqIGRvcHJpbnQuYzogTGlrZXdpc2UuCgkqIGR5bi1zdHJpbmcuYzogTGlrZXdpc2UuCgkqIGVoLWNvbW1vbi5oOiBMaWtld2lzZS4KCSogZml4LWhlYWRlci5jOiBMaWtld2lzZS4KCSogZnJhbWUuYzogTGlrZXdpc2UuCgkqIGdjYy5jOiBMaWtld2lzZS4KCSogZ2Nvdi5jOiBMaWtld2lzZS4KCSogZ2VuLXByb3Rvcy5jOiBMaWtld2lzZS4KCSogZ2VuY2hlY2suYzogTGlrZXdpc2UuCgkqIGhhbGZwaWMuaDogTGlrZXdpc2UuCgkqIGhhc2guYzogTGlrZXdpc2UuCgkqIG1hY2htb2RlLmg6IExpa2V3aXNlLgoJKiBtYmNoYXIuYzogTGlrZXdpc2UuCgkqIHByZWZpeC5jOiBMaWtld2lzZS4KCSogcHJvdG9pemUuYzogTGlrZXdpc2UuCgkqIHJlY29nLmg6IExpa2V3aXNlLgoJKiBydGwuaDogTGlrZXdpc2UuCgkqIHNjYW4tZGVjbHMuYzogTGlrZXdpc2UuCgkqIHRyZWUuaDogTGlrZXdpc2UuCgkqIHZhcnJheS5oOiBMaWtld2lzZS4KClNhdCBOb3YgIDcgMTE6Mzc6NTMgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGkzODYubWQgKGNhbGxfdmFsdWVfcG9wKTogSWYgd2UncmUgbm90IHBvcHBpbmcgYW55dGhpbmcsCglkZWZlciB0byBjYWxsX3ZhbHVlLgoJKGNhbGxfcG9wKTogTGlrZXdpc2UgZGVmZXIgdG8gY2FsbC4KClNhdCBOb3YgIDcgMDI6NDk6NTYgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGZ1bmN0aW9uLmMgKHB1cmdlX2FkZHJlc3NvZik6IENsZWFyIHB1cmdlX2FkZHJlc3NvZl9yZXBsYWNlbWVudHMKCW9ubHkgYWZ0ZXIgcHJvY2Vzc2luZyB0aGUgd2hvbGUgZnVuY3Rpb24uCgpTYXQgTm92ICA3IDAwOjU0OjU1IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHJlbG9hZDEuYyAocmVsb2FkKTogSWYgd2UgY2FuIG5vdCBwZXJmb3JtIGEgcGFydGljdWxhciBlbGltaW5hdGlvbgoJd2hlbiB3ZSB0aG91Z2h0IHdlIGNvdWxkIGVhcmxpZXIsIHRoZW4gd2UgbXVzdCBhbHdheXMgaXRlcmF0ZSB0aHJvdWdoCgl0aGUgbG9vcCBhdCBsZWFzdCBvbmUgbW9yZSB0aW1lLgoKRnJpIE5vdiAgNiAxOTozNzozMyAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEuYyAoYWRkX29wZXJhbmQpOiBTaW1wbGlmeSB0aGUgQ09OU1RfSU5UIG1hdGNoLgoJKHNleHRfYWRkX29wZXJhbmQpOiBDb3JyZWN0IHR5cG8gaW4gY29tcGFyaXNvbiBieSB1c2luZwoJQ09OU1RfT0tfRk9SX0xFVFRFUl9QLgoJKiBhbHBoYS5tZCAocz9hZGRxKTogVXNlIHNleHRfYWRkX29wZXJhbmQgdG8gYWxsb3cgdGhlIG5lZ2F0aXZlCgljb25zdGFudCBhbHRlcm5hdGl2ZXMgdG8gYmUgZ2VuZXJhdGVkLgoJKG11bHNpMywgbXVsZGkzLCB1bXVsZGkzX2hpZ2hwYXJ0KTogTG9vc2VuIGNvbnN0cmFpbnRzIHRvIGFsbG93CglzbWFsbCBjb25zdGFudHMsIHNpbmNlIHRoZSBodyBpbnN0cnVjdGlvbnMgZG8uCgpGcmkgTm92ICA2IDIwOjE1OjE5IDE5OTggIEJlcm5kIFNjaG1pZHQgIDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCgkqIHJlbG9hZDEuYyAoZW1pdF9yZWxvYWRfaW5zbnMpOiBXaGVuIHJld3JpdGluZyB0aGUgU0VUX0RFU1Qgb2YgYQoJcHJldmlvdXMgaW5zbiB0byBzdG9yZSBkaXJlY3RseSBpbnRvIG91ciByZWxvYWQgcmVnaXN0ZXIsIG1ha2Ugc3VyZQoJdGhhdCBpZiB0aGUgc291cmNlIG9mIHRoZSBwcmV2aW91cyBpbnNuIGlzIGEgcmVsb2FkIHJlZ2lzdGVyLCBpdHMKCXNwaWxsX3JlZ19zdG9yZSBhbmQgc3BpbGxfcmVnX3N0b3JlZF90byB2YWx1ZXMgYXJlIGNsZWFyZWQuCgpGcmkgTm92ICA2IDE2OjM1OjEwIDE5OTggIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIHJzNjAwMC5tZCAoZmxvYXR1bnNzaWRmMl9pbnRlcm5hbCBzcGxpdHRlcik6IFVzZSBiYXNlIHJlZ2lzdGVyCglvcGVyYW5kLCBub3QgaGFyZC1jb2RlZCBTUC4KCkZyaSBOb3YgIDYgMDQ6MDc6NTMgMTk5OCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcGllcmRvbC5jb2JhbHRtaWNyby5jb20+CgoJKiBqdW1wLmMgKGNhbGN1bGF0ZV9jYW5fcmVhY2hfZW5kKTogRml4IHRoaW5rby4KCkZyaSBOb3YgIDYgMDA6MTY6MDQgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcmVvcmcuYyAoZmlsbF9zaW1wbGVfZGVsYXlfc2xvdHMpOiBGaXggdHlwby4KCgkqIHJvbXAuaCAoTEVHSVRJTUlaRV9BRERSRVNTKTogRml4IHR5cG8uCgpGcmkgTm92ICA2IDAwOjEwOjAwIDE5OTggIEphbiBIdWJpY2thICAoaHViaWNrYUBmcmVlc29mdC5jeikKCgkqIGkzODYubWQgKGV4dGVuZHNpZGkyKTogVXNlICMgaW4gdGhlIG91dHB1dCB0ZW1wbGF0ZS4KCShleHRlbmRzaWRpIHNwbGl0dGVycyk6IE5ldyBzcGxpdHRlcnMuCgpUaHUgTm92ICA1IDExOjEzOjI3IDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWd1cmUuaW46IFVzZSB1bmtub3duLWVsZi5oIGFzIHRtX2ZpbGUgZm9yIGFybS1lbGYKCWNvbmZpZ3VyYXRpb25zLgoJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCgpUaHUgTm92ICA1IDA3OjU5OjA1IDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSoganVtcC5jIChpbml0X2xhYmVsX2luZm8sIGRlbGV0ZV9iYXJyaWVyX3N1Y2Nlc3NvcnMsCgltYXJrX2FsbF9sYWJlbHMsIGRlbGV0ZV91bnJlZmVyZW5jZWRfbGFiZWxzLAoJZGVsZXRlX25vb3BfbW92ZXMsIGNhbGN1bGF0ZV9jYW5fcmVhY2hfZW5kKTogTmV3IGZ1bmN0aW9ucyBicm9rZW4KCW91dCBvZiBqdW1wX29wdGltaXplLgoJKGp1bXBfb3B0aW1pemUpOiBVc2UgdGhlbS4KClRodSBOb3YgIDUgMDc6NTc6NDUgMTk5OCAgQW5kcmV3IE1hY0xlb2QgIDxhbWFjbGVvZEBjeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKGV4cGFuZF9maXh1cF9yZWdpb25fZW5kKTogTWFrZSBzdXJlIG91dGVyIGNvbnRleHQgbGFiZWxzCglhcmUgbm90IGlzc3VlZCBpbiBhbiBpbm5lciBjb250ZXh0IGR1cmluZyBjbGVhbnVwcy4KClRodSBOb3YgIDUgMDQ6MDM6MDYgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGFscGhhLm1kIChhZGRzaTMsIHN1YnNpMyk6IE5vIG5ldyB0ZW1wb3JhcmllcyBvbmNlIGNzZSBpcwoJbm8gbG9uZ2VyIGV4cGVjdGVkLgoKVGh1IE5vdiAgNSAwMzoyOToxOSAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEubWQgKGFkZHNpMywgc3Vic2kzKTogRXhwYW5kIHRvIGEgREltb2RlIHRlbXBvcmFyeSBzbyBhcwoJdG8gZXhwb3NlIHRoaXMgbWlkcG9pbnQgdG8gQ1NFLgoKVGh1IE5vdiAgNSAwMzo0Mjo1NCAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5tZCAobW92ZGZfY29uc3RfaW50cmVnX3NwNjQpOiBFbmFibGUgYWdhaW4uCgpUaHUgTm92ICA1IDEwOjUzOjAxIDE5OTggIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmNzLnVuaS1kb3J0bXVuZC5kZT4KCgkqIGNvbmZpZ3VyZS5pbjogQnJpbmcgb3ZlciBnY2MyIGNoYW5nZSBvZiBOb3YgMTkgMTk5Ny4KCldlZCBOb3YgIDQgMjM6NDM6MDggMTk5OCAgR3JhaGFtICA8Z3JhaGFtc0ByY3AuY28udWs+CgoJKiB0b3BsZXYuYyAob3V0cHV0X2xhbmdfaWRlbnRpZnkpOiBNYWtlIGRlZmluaXRpb24gZGVwZW5kZW50IG9uCglBU01fSURFTlRJRllfTEFOR1VBR0UuCgoJKiBwcmludC1ydGwuYyAoc3BhY2VzKTogTWFrZSBzdGF0aWMuCgpXZWQgTm92ICA0IDIyOjE2OjM2IDE5OTggIEhhbnMtUGV0ZXIgTmlsc3NvbiAgPGhwQGF4aXMuc2U+CgoJKiBleHRlbmQudGV4aTogQ2xhcmlmeSBwcm9wZXIgdXNlcyBmb3IgcmVnaXN0ZXIgY2xvYmJlcnMgaW4gYXNtcy4KCldlZCBOb3YgIDQgMjI6MTY6MzYgMTk5OCAgQmVybmQgU2NobWlkdCAgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgoKCSogcmVjb2cuaCAoZW51bSBvcF90eXBlKTogRGVmaW5lLgoJKGNvbnN0cmFpbl9vcGVyYW5kcyk6IEFkanVzdCBwcm90b3R5cGUuCgkocmVjb2dfb3BfdHlwZSk6IERlY2xhcmUgbmV3IHZhcmlhYmxlLgoJKiByZWNvZy5jIChyZWNvZ19vcF90eXBlKTogTmV3IHZhcmlhYmxlLgoJKGluc25faW52YWxpZF9wKTogQWxsb3cgbW9kaWZ5aW5nIGFuIGFzbSBzdGF0ZW1lbnQgYWZ0ZXIgcmVsb2FkLgoJKGV4dHJhY3RfaW5zbik6IFNldCB1cCByZWNvZ19vcF90eXBlLgoJKGNvbnN0cmFpbl9vcGVyYW5kcyk6IExvc2UgSU5TTl9DT0RFX05VTSBhcmcuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgoJRG9uJ3QgY29tcHV0ZSBvcGVyYW5kIHR5cGVzLCB1c2UgcmVjb2dfb3BfdHlwZS4KCVVzZSB0aGUgaW5mb3JtYXRpb24gY29tcHV0ZWQgYnkgZXh0cmFjdF9pbnNuIGluc3RlYWQgb2YgdGhlIHByZXZpb3VzCgltZXRob2Qgb2YgZmluZGluZyBpdCBieSBpbnNuIGNvZGUgbnVtYmVyLgoJKiBjYWxsZXItc2F2ZS5jIChpbml0X2NhbGxlcl9zYXZlKTogVXNlIGV4dHJhY3RfaW5zbiwgbm90IGluc25fZXh0cmFjdC4KCSogcmVvcmcuYyAoZmlsbF9zbG90c19mcm9tX3RocmVhZCk6IExpa2V3aXNlLgoJKiByZWxvYWQxLmMgKHJlbG9hZF9hc19uZWVkZWQpOiBMaWtld2lzZS4KCShnZW5fcmVsb2FkKTogTGlrZXdpc2UuCgkoaW5jX2Zvcl9yZWxvYWQpOiBMaWtld2lzZS4KCShyZWxvYWRfY3NlX3NpbXBsaWZ5X29wZXJhbmRzKTogTGlrZXdpc2UuCglVc2UgdGhlIGluZm9ybWF0aW9uIGNvbXB1dGVkIGJ5IGV4dHJhY3RfaW5zbiBpbnN0ZWFkIG9mIHRoZSBwcmV2aW91cwoJbWV0aG9kIG9mIGZpbmRpbmcgaXQgYnkgaW5zbiBjb2RlIG51bWJlci4KCSogZ2VuYXR0cnRhYi5jICh3cml0ZV9hdHRyX2Nhc2UpOiBHZW5lcmF0ZSBjYWxsIHRvIGV4dHJhY3RfaW5zbiwgbm90CglpbnNuX2V4dHJhY3QuCgkqIGZpbmFsLmMgKGZpbmFsX3NjYW5faW5zbik6IFVzZSBleHRyYWN0X2luc24sIG5vdCBpbnNuX2V4dHJhY3QuCgkoY2xlYW51cF9vcGVyYW5kX3N1YnJlZ3MpOiBVc2UgZXh0cmFjdF9pbnNuLCBub3QgaW5zbl9leHRyYWN0LgoJVXNlIHRoZSBpbmZvcm1hdGlvbiBjb21wdXRlZCBieSBleHRyYWN0X2luc24gaW5zdGVhZCBvZiB0aGUgcHJldmlvdXMKCW1ldGhvZCBvZiBmaW5kaW5nIGl0IGJ5IGluc24gY29kZSBudW1iZXIuCgkqIHJlZ21vdmUuYyAoZmluZF9tYXRjaGVzKTogTGlrZXdpc2UuICBDaGFuZ2UgbWVhbmluZyBvZiB0aGUgcmV0dXJuCgl2YWx1ZSB0byBiZSBub256ZXJvIGlmIHRoZSBvcHRpbWl6YXRpb24gY2FuIGJlIHBlcmZvcm1lZCwgemVybyBpZgoJbm90LiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KCVNob3J0ZW4gc29tZSB2YXJpYWJsZSBuYW1lcyB0byBmaXggZm9ybWF0dGluZyBwcm9ibGVtcy4KCShyZWdtb3ZlX29wdGltaXplKTogU2hvcnRlbiBzb21lIHZhcmlhYmxlIG5hbWVzIHRvIGZpeCBmb3JtYXR0aW5nCglwcm9ibGVtcy4KCVVzZSB0aGUgaW5mb3JtYXRpb24gY29tcHV0ZWQgYnkgZXh0cmFjdF9pbnNuIGluc3RlYWQgb2YgdGhlIHByZXZpb3VzCgltZXRob2Qgb2YgZmluZGluZyBpdCBieSBpbnNuIGNvZGUgbnVtYmVyLgoJKiByZWdjbGFzcy5jIChzY2FuX29uZV9pbnNuKTogTGlrZXdpc2UuCgkocmVjb3JkX3JlZ19jbGFzc2VzKTogRG9uJ3QgY29tcHV0ZSBvcGVyYW5kIHR5cGVzLCB1c2UgcmVjb2dfb3BfdHlwZS4KCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IExvc2UgQ09OU1RSQUlOVFMxIHZhcmlhYmxlOyB1c2UKCXJlY29nX2NvbnN0cmFpbnRzIGluc3RlYWQuCgpXZWQgTm92ICA0IDIxOjM3OjQ2IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHJ0bC5oIChmbG93Ml9jb21wbGV0ZWQpOiBEZWNsYXJlLgoJKiBmbG93LmMgKGZsb3cyX2NvbXBsZXRlZCk6IERlZmluaXRpb24uCgkqIHRvcGxldi5jIChyZXN0X29mX2NvbXBpbGF0aW9uKTogU2V0IGFuZCBjbGVhciBmbG93Ml9jb21wbGV0ZWQKCWFzIG5lY2Vzc2FyeS4KCldlZCBOb3YgIDQgMTk6MTU6MzcgMTk5OCAgTWVsaXNzYSBPJ05laWxsICA8b25laWxsQGNzLnNmdS5jYT4KCgkqIE1ha2VmaWxlLmluIChsaWJjcHAuYSk6IFJhbmxpYiBsaWJjcHAuYS4KCgkqIGNwcHVscC5jICh1c2VyX2xhYmVsX3ByZWZpeCk6IEluaXRpYWxpemUuCgpXZWQgTm92ICA0IDE5OjA3OjA4IDE5OTggIEpvaG4gV2VobGUgIChqb2huQGZlaXRoLmNvbSkKCgkqIGZsb3cuYyAobWFya19yZWdzX2xpdmVfYXRfZW5kKTogTWFyayB0aGUgc3RhY2sgcG9pbnRlciBhcyBsaXZlCglhdCBhIFJFVFVSTiBpZiBjdXJyZW50X2Z1bmN0aW9uX3NwX2lzX3VuY2hhbmdpbmcgaXMgc2V0LgoKV2VkIE5vdiAgNCAxODoxNjoyOSAxOTk4ICBIZXJtYW4gQS5KLiB0ZW4gQnJ1Z2dlICA8SGFqLlRlbi5CcnVnZ2VAbmV0LkhDQy5ubD4KCgkqIGVtaXQtcnRsLmMgKHRyeV9zcGxpdCk6IEZpeGVkIGVycm9yIGluIE9jdCAxMCBwYXRjaC4KCldlZCBOb3YgIDQgMTU6MTE6MTUgMTk5OCAgR2VvZmZyZXkgTm9lciAgPG5vZXJAY3lnbnVzLmNvbT4KCgkqIGkzODYvY3lnd2luMzIuaCAoTUFTS19XSU4zMiwgTUFTS19DWUdXSU4sIE1BU0tfV0lORE9XUywgTUFTS19ETEwsCglUQVJHRVRfV0lOMzIsIFRBUkdFVF9DWUdXSU4sIFRBUkdFVF9XSU5ET1dTLCBUQVJHRVRfRExMKTogTmV3LgoJKFNVQlRBUkdFVF9TV0lUQ0hFUyk6IEFkZCAtbW5vLWN5Z3dpbiwgLW1jeWd3aW4sIGFuZCAtbWRsbCBvcHRpb25zLgoJKENQUF9QUkVERUZJTkVTKTogRG9uJ3QgZGVmaW5lIF9fQ1lHV0lOMzJfXyBoZXJlLgoJKFNUQVJURklMRV9TUEVDKTogSGFuZGxlIC1tZGxsLCAtbW5vLWN5Z3dpbiBvcHRpb25zLgoJKENQUF9TUEVDKTogSGFuZGxlIC1tbm8tY3lnd2luIG9wdGlvbi4gIERlZmluZSBfX0NZV0lOX18gaW4gYWRkaXRpb24KCXRvIF9fQ1lHV0lOMzJfXy4KCShMSUJfU1BFQyk6IEhhbmRsZSAtbW5vLWN5Z3dpbiBvcHRpb24uCgkoTElOS19TUEVDKTogSGFuZGxlIC1tZGxsLgoKV2VkIE5vdiAgNCAyMjo1NjoxNCAxOTk4ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IEZpeCB0ZXN0IGZvciB1c2FnZSBieSBvdGhlciByZWxvYWQKCXRvIGhhbmRsZSBzZWNvbmRhcnkgcmVsb2FkcyBwcm9wZXJseS4KCldlZCBOb3YgIDQgMTc6MjU6MTAgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogcmVsb2FkMS5jIChFTElNSU5BQkxFX1JFR1MsIE5VTV9FTElNSU5BQkxFX1JFR1MpOiBJbnRyb2R1Y2UgYW4KCWludGVybWVkaWF0ZSBzdHJ1Y3R1cmUgd2hpY2ggaGFzIGV4YWN0bHkgdGhlIG1lbWJlcnMgcHJvdmlkZWQgYnkKCUVMSU1JTkFCTEVfUkVHUy4gIERlZmluZSBOVU1fRUxJTUlOQUJMRV9SRUdTIGluIHRlcm1zIG9mIHRoZQoJc3RhdGljIGludGVybWVkaWF0ZSBzdHJ1Y3R1cmUuCgoJKGluaXRfZWxpbV90YWJsZSk6IFhtYWxsb2MoKSBgcmVnX2VsaW1pbmF0ZScsIGFuZCBpbml0aWFsaXplIGl0Cglmcm9tIHRoZSBpbnRlcm1lZGlhdGUgc3RydWN0dXJlLiAgRG8gdGhlIHNhbWUgYW5hbG9nb3VzIGZpeCBpbgoJdGhlIGNhc2Ugd2hlcmUgRUxJTUlOQUJMRV9SRUdTIGlzIG5vdCBkZWZpbmVkLgoKVHVlIE5vdiAgMyAyMDo1MDowMyAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBwYS5oIChTRUxFQ1RfU0VDVElPTik6IEZpeCB0aGlua28uCgpUdWUgTm92ICAzIDE3OjUxOjM2IDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGR3YXJmMm91dC5jIChvdXRwdXRfY2FsbF9mcmFtZV9pbmZvKTogQ29tbWVudHMgb24gbGFzdCBjaGFuZ2UuCgpUdWUgTm92ICAzIDA3OjUxOjQzIDE5OTggIFJpY2hhcmQgRWFybnNoYXcgIChyZWFybnNoYUBhcm0uY29tKQoKCSogYXJtLmMgKGFkZF9jb25zdGFudCk6IFdoZW4gdGFraW5nIHRoZSBhZGRyZXNzIG9mIGFuIGl0ZW0gaW4gdGhlCglwb29sLCBnZXQgdGhlIG1vZGUgb2YgdGhlIGl0ZW0gYWRkcmVzc2VkLgoKCSogYXJtLmMgKGZpbmFsX3ByZXNjYW5faW5zbiBjYXNlIElOU04pOiBJZiBhbiBpbnNuIGRvZXNuJ3QKCWNvbnRhaW4gYSBTRVQgb3IgYSBQQVJBTExFTCwgZG9uJ3QgY29uc2lkZXIgaXQgZm9yIGNvbmRpdGlvbmFsCglleGVjdXRpb24uCgoJUmVzdG9yZSBBQkkgY29tcGF0aWJpbGl0eSBmb3IgTmV0QlNELgoJKiBhcm0vbmV0YnNkLmggKERFRkFVTFRfUENDX1NUUlVDVF9SRVRVUk4pOiBPdmVycmlkZSBzZXR0aW5nIGluCglhcm0uaC4KCShSRVRVUk5fSU5fTUVNT1JZKTogTGlrZXdpc2UuCgpNb24gTm92ICAyIDExOjQ2OjE3IDE5OTggIERvdWcgRXZhbnMgIDxkZXZhbnNAY2FudWNrLmN5Z251cy5jb20+CgoJKiBtMzJyL20zMnIuYyAobTMycl9leHBhbmRfYmxvY2tfbW92ZSk6IEZpeCBieXRlIGNvdW50IGNvbXB1dGF0aW9ucy4KCShtMzJyX291dHB1dF9ibG9ja19tb3ZlKTogUmV3cml0ZSBieXRlcyA8IDQgaGFuZGxpbmcuCgpNb24gTm92ICAyIDEwOjEwOjM1IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNvbmZpZ3VyZS5pbjogQ2FsbCBBQ19GVU5DX1ZGT1JLLgoKCSogY29sbGVjdDIuYzogRGVmaW5lIFZGT1JLX1NUUklORyBhcyBhIHByaW50YWJsZSBzdHJpbmcgZm9yCgllcnJvciBtZXNzYWdlcyAoZWl0aGVyICJ2Zm9yayIgb3IgImZvcmsiLikgIElmIEhBVkVfVkZPUktfSCBpcwoJZGVmaW5lZCwgaW5jbHVkZSB2Zm9yay5oLiAgSWYgVk1TIGlzIGRlZmluZWQsIGRlZmluZSB2Zm9yaygpCglhcHByb3ByaWF0ZWx5LiAgUmVtb3ZlIHZmb3JrIGNoZWNrIG9uIFVTRywgd2UncmUgdXNpbmcgYXV0b2NvbmYuCgkoY29sbGVjdF9leGVjdXRlKTogUGFzcyBWRk9SS19TVFJJTkcgdG8gZmF0YWxfcGVycm9yIGluc3RlYWQgb2YKCWNoZWNraW5nIGxvY2FsbHkgd2hhdCBzdHJpbmcgdG8gcGFzcy4KCShzY2FuX3Byb2dfZmlsZSk6IExpa2V3aXNlLgoJKHNjYW5fbGlicmFyaWVzKTogTGlrZXdpc2UuCgoJKiBnY2MuYzogUmVtb3ZlIHZmb3JrIGNoZWNrIG9uIFVTRywgd2UncmUgdXNpbmcgYXV0b2NvbmYuCglCZXNpZGVzLCBubyBjYWxscyB0byB2Zm9yay9mb3JrIG9jY3VyIGluIHRoaXMgZmlsZS4KCgkqIHByb3RvaXplLmM6IExpa2V3aXNlLgoKTW9uIE5vdiAgMiAwNzo1MjoyOCAxOTk4ICBBbGV4YW5kcmUgT2xpdmEgIDxvbGl2YUBkY2MudW5pY2FtcC5icj4KCgkqIGNvbmZpZ3VyZS5pbiAoREVGQVVMVF9MSU5LRVIpOiBSZW5hbWVkIGZyb20gTEQuCgkoREVGQVVMVF9BU1NFTUJMRVIpOiBSZW5hbWVkIGZyb20gQVM7IHJldmVydGVkIFNjaHdhYidzIHBhdGNoLgoJKGdjY19jdl9hcyk6IFRyeSAkREVGQVVMVF9BU1NFTUJMRVIgYmVmb3JlICRBUy4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKTW9uIE5vdiAgMiAwMTo0ODoxMCAxOTk4ICBBbGV4YW5kcmUgT2xpdmEgIDxvbGl2YUBkY2MudW5pY2FtcC5icj4KCgkqIEJVR1M6IEZpeCB0aGUgcmVnZXhwIGZvciBgbW9yZScgdG8gZmluZCB0aGUgYXBwcm9wcmlhdGUgbm9kZS4KCVJlcG9ydGVkIGJ5IEpvZXJnIFBpZXRzY2htYW5uICA8am9lcmdfcGlldHNjaG1hbm5AemtiLmNoPgoKCSogQlVHUzogQWRkZWQgbGluayB0byB0aGUgV1dXIEZBUS4KClN1biBOb3YgIDEgMTg6Mjc6MTUgMTk5OCAgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpTdW4gTm92ICAxIDExOjA0OjMyIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIEZyb20gQ2hyaXN0aWFuIEdhZnRvbjoKCSogaTM4Ni9saW51eC5oIChDUFBfUFJFREVGSU5FUyk6IEFkZCAtRF9faTM4Nl9fLgoJKiBzcGFyYy9saW51eC5oIChDUFBfUFJFREVGSU5FUyk6IEFkZCAtRF9fc3BhcmNfXy4KCSogc3BhcmMvbGludXg2NC5oIChDUFBfUFJFREVGSU5FUyk6IEFkZCAtRF9fc3BhcmNfXy4KClNhdCBPY3QgMzEgMjE6NDI6MzkgMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGMtY29tbW9uLmMgKGNfZ2V0X2FsaWFzX3NldCk6IEFsbG93IGFsbCB0eXBlLXB1bm5pbmcgdGhyb3VnaAoJdW5pb25zLiAgRG9uJ3QgZ2V0IGNvbmZ1c2VkIGFib3V0IHRoZSB0eXBlIG9mIGEgYml0LWZpZWxkLCBkZXNwaXRlCgl0aGUgYW50aWNzIG9mIGJ1aWxkX21vZGlmeV9leHByLgoKU2F0IE9jdCAzMSAyMjozNToyOSAxOTk4ICBKZWFuLVBpZXJyZSBSYWRsZXkgIDxqcHJAanByLmNvbT4KCgkqIGZpeGluYy5zY286IFBhcmFtZXRlcml6ZSAjaW5jbHVkZV9uZXh0IHZhbHVlcy4KCSogZml4aW5jL2ZpeGluYy5zY286IExpa2V3aXNlLgoKU2F0IE9jdCAzMSAyMDozOTozNSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IE5vIGxvbmdlciBzZXQgcmVsb2FkX2NvbXBsZXRlZC4KCSogcmVsb2FkMS5jIChyZWxvYWQpOiBTZXQgaXQgaGVyZS4gIFBlcmZvcm0gaW5zdHJ1Y3Rpb24gc3BsaXR0aW5nCglhZnRlciByZWxvYWQgaGFzIGNvbXBsZXRlZCBpZiB3ZSB3aWxsIGJlIHJ1bm5pbmcgdGhlIHNjaGVkdWxlcgoJYWdhaW4uCgpTYXQgT2N0IDMxIDEyOjMwOjAyIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IEluaXRpYWxpemUgbWFwcGluZ3MgZnJvbSBJTlNOX1VJRCB0bwoJRUggcmVnaW9uIGlmIGV4Y2VwdGlvbnMgYXJlIGVuYWJsZWQgYW5kIHdlJ3JlIHBlcmZvcm1pbmcgY3Jvc3MKCWp1bXAgb3B0aW1pemF0aW9ucy4KCShmaW5kX2Nyb3NzX2p1bXApOiBFeGl0IGxvb3AgaWYgdGhlIGluc25zIGFyZSBpbiBkaWZmZXJlbnQgRUggcmVnaW9ucy4KClNhdCBPY3QgMzEgMTA6MDI6NDggMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGR3YXJmMm91dC5jIChvdXRwdXRfY2FsbF9mcmFtZV9pbmZvKTogVXNlCglBU01fT1VUUFVUX0RXQVJGX0RFTFRBNCBmb3IgdGhlIENJRSBvZmZzZXQgdG8gbWF0Y2ggZnJhbWUuYy4KClNhdCBPY3QgMzEgMTA6MjM6MTQgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCVJlaW5zdGFsbCBBcHIgMjR0aCBmaXgsIGxvc3QgZHVyaW5nIE1heSA2dGggZ2NjMiBtZXJnZToKCSogYy1jb21tb24uYyAoY2hlY2tfZm9ybWF0X2luZm8pOiBEb24ndCBjaGVjayBmb3IgdGhlICd4JwoJZm9ybWF0IGNoYXJhY3RlciB0d2ljZSwgaW5zdGVhZCBjaGVjayBmb3IgJ3gnIGFuZCAnWCcKCkZyaSBPY3QgMzAgMTQ6NTA6MjUgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluIChhc3NlbWJsZXIgZmVhdHVyZXMpOiBBbHNvIG1ha2UgZ2FzIGlzIGNvbmZpZ3VyZWQgaWYKCXdlIGZpbmQgaXQgaW4gdGhlIHNvdXJjZSB0cmVlLgoKRnJpIE9jdCAzMCAxMzoyMzoyMCAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogaTM4Ni5jIChpMzg2X2NvbXBfdHlwZV9hdHRyaWJ1dGVzKTogQ29tcGFyZSB3aGV0aGVyIHRoZQoJYXR0cmlidXRlcyBhcmUgZGVmaW5lZCwgbm90IHRoZWlyIHRyZWUgbm9kZXMuCgpGcmkgT2N0IDMwIDExOjM5OjQ3IDE5OTggIEFsZXhhbmRyZSBPbGl2YSAgPG9saXZhQGRjYy51bmljYW1wLmJyPgoKCSogY29uZmlndXJlLmluIChneHhfaW5jbHVkZV9kaXIpOiBCaXR0ZW4gYnkgYXV0b2NvbmYgcXVvdGluZwoJY2hhcmFjdGVycy4gIDotKAoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgpGcmkgT2N0IDMwIDEwOjQzOjI5IDE5OTggIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmNzLnVuaS1kb3J0bXVuZC5kZT4KCgkqIGNvbmZpZ3VyZS5pbjogSWdub3JlIG5vbi1hYnNvbHV0ZSB2YWx1ZSBpbiAkQVMuCgpGcmkgT2N0IDMwIDAwOjU0OjI1IDE5OTggIFBldGVyIEpha3ViZWsgIDxwamFrQHNuYWZ1LmRlPgoKCSogbTY4ay5oIChJTkRJUkVDVEFCTEVfMV9BRERSRVNTX1ApOiBGaXggdGhpbmtvLgoKRnJpIE9jdCAzMCAwMDo0MjozNCAxOTk4ICBNYXJrIEVsYnJlY2h0ICA8c25vd2JhbGwzQHVzYS5uZXQ+CgoJKiBjb25maWd1cmUuaW4gKG1zZG9zZGpncHApOiBTZXQgZXhlZXh0IGFuZCB0YXJnZXRfYWxpYXMuCgpUaHUgT2N0IDI5IDIzOjU1OjQzIDE5OTggIEJlcm5kIFNjaG1pZHQgIDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCgkqIGZsb3cuYyAoWE5NQUxMT0MpOiBOZXcgbWFjcm8uCgkoZmxvd19pbnRfbGlzdF9ibG9ja3MsIGJhc2ljX2Jsb2NrX3N1Y2MsIGJhc2ljX2Jsb2NrX3ByZWQpOiBOZXcKCXN0YXRpYyB2YXJpYWJsZXMuCgkoYWRkX2VkZ2UsIGFkZF9lZGdlX3RvX2xhYmVsKTogTmV3IHN0YXRpYyBmdW5jdGlvbnMuCgkoZnJlZV9iYl9tZW1vcnkpOiBOZXcgZnVuY3Rpb24uCgkoZmxvd19kZWxldGVfaW5zbik6IERlbGV0ZSBmdW5jdGlvbi4KCShiYXNpY19ibG9ja19kcm9wc19pbik6IERlbGV0ZSB2YXJpYWJsZS4KCShmaW5kX2Jhc2ljX2Jsb2Nrcyk6IEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGJhc2ljX2Jsb2NrX2hlYWQsCgliYXNpY19ibG9ja19zdWNjLiAgRG9uJ3QgYWxsb2NhdGUgYmFzaWNfYmxvY2tfZHJvcHNfaW4uCglDYWxsIGZyZWVfYmJfbWVtb3J5IGF0IHRoZSBiZWdpbm5pbmcuCgkoZmluZF9iYXNpY19ibG9ja3NfMSk6IERvbid0IGRvIG11bHRpcGxlIHBhc3Nlcy4KCURlbGV0ZSBjb2RlIHRvIGNvbXB1dGUgYmFzaWNfYmxvY2tfZHJvcHNfaW4uCglBZnRlciBjYWxsaW5nIG1ha2VfZWRnZXMsIG1hcmsgYmxvY2tzIHJlYWNoZWQgYnkgY3VycmVudCBibG9jayBsaXZlLgoJVXBkYXRlIHRlc3QgZm9yIHVucmVhY2hhYmxlIGxpdmUgYmxvY2tzLgoJKG1hcmtfbGFiZWxfcmVmKTogRGVsZXRlIGFyZ3MgWCwgQ0hFQ0tEVVAuICBBZGQgUFJFRCBhcmcuICBBbGwgY2FsbGVycwoJY2hhbmdlZC4KCVNpbXBsaWZ5IHRvIGNhbGwgYWRkX2VkZ2VfdG9fbGFiZWwgd2hlbiBhIExBQkVMX1JFRiBpcyBmb3VuZC4KCShtYWtlX2VkZ2VzKTogU2ltcGxpZnkgdG8gY2FsbCBhZGRfZWRnZV90b19sYWJlbCBpbnN0ZWFkIG9mCgltYXJrX2xhYmVsX3JlZiBtb3N0IG9mIHRoZSB0aW1lLgoJQ29tcHV0ZSBoZXJlIHdoZXRoZXIgY29udHJvbCBkcm9wcyBpbnRvIHRoZSBuZXh0IGJsb2NrLgoJKGRlbGV0ZV91bnJlYWNoYWJsZV9ibG9ja3MpOiBSZXR1cm4gdm9pZC4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCglEZWxldGUgdW5yZWFjaGFibGUgYmxvY2tzIGluIHJldmVyc2Ugb3JkZXIuCglBZnRlciBkZWxldGluZyBhbGwgdW5yZWFjaGFibGUgYmxvY2tzLCByZW51bWJlciB0aGUgcmVtYWluaW5nIG9uZXMKCWFuZCB1cGRhdGUgbl9iYXNpY19ibG9ja3MuCgkoZGVsZXRlX2Jsb2NrKTogU3BlZWQgdXAgZGVsZXRpb24gYSBiaXQuCglEb24ndCBzZXQgYmFzaWNfYmxvY2tfZHJvcHNfaW4gZm9yIGRlbGV0ZWQgYmxvY2tzLgoJKGZyZWVfYmFzaWNfYmxvY2tfdmFycyk6IERvbid0IGZyZWUgYmFzaWNfYmxvY2tfZHJvcHNfaW4uCgkobGlmZV9hbmFseXNpc18xKTogVXBkYXRlIHRvIHVzZSBuZXcgZWRnZSByZXByZXNlbnRhdGlvbi4KCShkdW1wX2Zsb3dfaW5mbyk6IERlbGV0ZSBjb2RlIHRvIHByaW50IGJhc2ljIGJsb2NrIGluZm87IGNhbGwKCWR1bXBfYmJfZGF0YSBpbnN0ZWFkLgoJKGNvbXB1dGVfcHJlZHNfc3VjY3MpOiBEZWxldGUgY29kZSB0byByZWNvbXB1dGUgYmFzaWNfYmxvY2tfZHJvcHNfaW4KCWFuZCB1aWRfYmxvY2tfbnVtYmVyLgoJU2ltcGx5IGNvcHkgdGhlIHByZXZpb3VzbHkgY29tcHV0ZWQgY2ZnLgoJKGR1bXBfYmJfZGF0YSk6IE5ldyBhcmcgTElWRV9JTkZPLiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KCVByaW50IHJlZ2lzdGVyIGxpZmV0aW1lIGluZm9ybWF0aW9uIGlmIExJVkVfSU5GTyBpcyBub256ZXJvLgoJKiBiYXNpYy1ibG9jay5oIChkdW1wX2JiX2RhdGEpOiBBZGp1c3QgcHJvdG90eXBlLgoJKiBnY3NlLmMgKGdjc2VfbWFpbik6IFVwZGF0ZSBjYWxsIHRvIGR1bXBfYmJfZGF0YS4KCSogcnRsLmggKGZyZWVfYmJfbWVtb3J5KTogRGVjbGFyZS4KCSogdG9wbGV2LmMgKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBDYWxsIGZyZWVfYmJfbWVtb3J5LgoKCSogcmVsb2FkMS5jIChzdHJ1Y3QgZWxpbV90YWJsZSk6IERlbGV0ZSBNQVhfT0ZGU0VUIG1lbWJlci4KCSh1cGRhdGVfZWxpbWluYWJsZV9vZmZzZXRzKTogRG9uJ3QgY29tcHV0ZSBpdC4KCShzZXRfaW5pdGlhbF9lbGltX29mZnNldHMpOiBEb24ndCBpbml0aWFsaXplIGl0LgoJQnJlYWsgb3V0IHNvbWUgY29kZSBpbnRvIHNldF9pbml0aWFsX2xhYmVsX29mZnNldHMgc28gdGhlIHJlc3Qgb2YKCXRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBmcm9tIHJlbG9hZF9hc19uZWVkZWQuCglBc3N1bWUgdGhhdCBJTklUSUFMX0ZSQU1FX1BPSU5URVJfT0ZGU0VUIGlzIGRlZmluZWQgd2hlbgoJRUxJTUlOQUJMRV9SRUdTIGlzbid0LgoJKHNldF9pbml0aWFsX2xhYmVsX29mZnNldHMpOiBOZXcgZnVuY3Rpb24sIGJyb2tlbiBvdXQgb2YKCXNldF9pbml0aWFsX2VsaW1fb2Zmc2V0cy4KCShzZXRfb2Zmc2V0c19mb3JfbGFiZWwpOiBOZXcgZnVuY3Rpb24sIGJyb2tlbiBvdXQgb2Ygc2V0X2xhYmVsX29mZnNldHMKCWFuZCByZWxvYWRfYXNfbmVlZGVkLgoJKHJlbG9hZCk6IENhbGwgdGhlIHR3byBuZXcgZnVuY3Rpb25zLgoJKHJlbG9hZF9hc19uZWVkZWQpOiBDYWxsIHNldF9pbml0aWFsX2VsaW1fb2Zmc2V0cyBpbnN0ZWFkIG9mCglkdXBsaWNhdGluZyB0aGUgY29kZS4gIExpa2V3aXNlIGZvciBzZXRfb2Zmc2V0c19mb3JfbGFiZWwuCgoJKiByZWxvYWQxLmMgKGNob29zZV9yZWxvYWRfcmVncyk6IEZpeCB0eXBvIGluIE9jdCAxNyBjaGFuZ2UuCgkoZW1pdF9yZWxvYWRfaW5zbnMpOiBFbnN1cmUgdGhhdCB3aGVuIHdlIHNldCByZWdfcmVsb2FkZWRfdmFsaWQgZm9yCglhbnkgaGFyZCByZWcsIHJlZ19yZWxvYWRlZF9kZWFkIGNvbnRhaW5zIHZhbGlkIGRhdGEuCgpUaHUgT2N0IDI5IDIyOjMwOjU0IDE5OTggIE1hcmN1cyBNZWlzc25lciAgPE1hcmN1cy5NZWlzc25lckBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIGkzODYuYyAoaTM4Nl9jb21wX3R5cGVfYXR0cmlidXRlcyk6IFJldHVybiBub256ZXJvIGZvciBtaXNtYXRjaGVkCgkic3RkY2FsbCIgYW5kICJjZGVjbCIgYXR0cmlidXRlcy4KClRodSBPY3QgMjkgMTk6MDU6MTcgMTk5OCAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogc2NoZWQuYyAodXBkYXRlX2Zsb3dfaW5mbyk6IEFkZCBjb2RlIHRvICEgZm91bmRfb3JpZ19kZXN0IGNhc2UgdG8KCWhhbmRsZSBkZWxldGVkIG5vLW9wIG1vdmVzIG9mIGhhcmQgcmVnaXN0ZXJzLgoJKiBoYWlmYS1zY2hlZC5jICh1cGRhdGVfZmxvd19pbmZvKTogTGlrZXdpc2UuCgpUaHUgT2N0IDI5IDE4OjA3OjQ3IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIG1pcHMubWQgKHJlbG9hZF97aW4sb3V0fXtzaSxkaX0pOiBFbWl0IGEgVVNFIG9mIEhJTE8gYXQgdGhlIGVuZAoJb2YgdGhlIHNlcXVlbmNlcyB0byByZWxvYWQgdGhlIEhJTE8gcmVnaXN0ZXIgd2hpY2ggZG8gbm90IGFjdHVhbGx5CglyZWZlcmVuY2UgSElMTy4KClRodSBPY3QgMjkgMTI6Mzk6MzUgMTk5OCAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogYy1jb21tb24uYyAoY19nZXRfYWxpYXNfc2V0KTogSGFuZGxlIEFSUkFZX1JFRiBvZiB1bmlvbiBmaWVsZC4KClRodSBPY3QgMjkgMTQ6MTA6MjIgMTk5OCAgQW5kcmV3IE1hY0xlb2QgIDxhbWFjbGVvZEBjeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKGVtaXRfZWhfY29udGV4dCk6IE1ha2UgdGhlIEVIIGNvbnRleHQgcmVnaXN0ZXIgc3RheSBhbGl2ZQoJYXQgLU8wIHNvIHN0dXBpZC5jIGRvZXNuJ3QgZ2V0IGNvbmZ1c2VkLgoKMTk5OC0xMC0yOSAgSGVybWFuIEEuSi4gdGVuIEJydWdnZSAgPEhhai5UZW4uQnJ1Z2dlQG5ldC5IQ0Mubmw+CgoJKiBlbWl0LXJ0bC5jICh0cnlfc3BsaXQpOiBEbyBub3QgdHJ5IHRvIHNwbGl0IGEgQkFSUklFUi4KClRodSBPY3QgMjkgMDE6MzM6NTQgMTk5OCAgSmFuIEh1Ymlja2EgIDxodWJpY2thQGZyZWVzb2Z0LmN6PgoJCQkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGkzODYubWQ6IENoYW5nZSBpeDg2X2NwdSA9PSBQUk9DRVNTT1JfUEVOVElVTSB0byBUQVJHRVRfUEVOVElVTS4KCSh6ZXJvX2V4dGVuZHNpZGkyKTogVXNlICMgaW4gb3V0cHV0IHRlbXBsYXRlIGFuZCBoYW5kbGUgY29tcGxldGVseSBieQoJc3BsaXRzLgoJKHplcm9fZXh0ZW5kIHNwbGl0dGVycyk6IE5ldyBkZWZpbmVfc3BsaXRzLgoJKGFzaGlmdHJ0XzMyKTogTmV3IHBhdHRlcm4uCgpXZWQgT2N0IDI4IDIyOjU4OjM1IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHRyZWUuYyAoYXBwZW5kX3JhbmRvbV9jaGFycyk6IE5ldyBmbi4KCShnZXRfZmlsZV9mdW5jdGlvbl9uYW1lX2xvbmcpOiBVc2UgaXQuCgpXZWQgT2N0IDI4IDIyOjI3OjA1IDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoY2MxKTogUHV0IENfT0JKUywgYW5kIHRoZW5jZSBAZXh0cmFfY19vYmpzQCBsYXN0LgoJKExJQkNQUF9PQkpTKTogTmV3LiAgQWRkIGNwcHVscC5vLgoJKGNwcG1haW4sIGZpeC1oZWFkZXIpOiBEZXBlbmQgb24gYW5kIHVzZSBsaWJjcHAuYS4KCSogY29uZmlndXJlLmluIChleHRyYV9jX29ianMsIGV4dHJhX2N4eF9vYmpzKTogVXNlIGxpYmNwcC5hIGluc3RlYWQKCW9mIHRoZSBpbmRpdmlkdWFsIG9iamVjdCBmaWxlcy4KCSogb2JqYy9NYWtlLWxhbmcuaW4gKGNjMW9iaik6IFB1dCBPQkpDX09CSlMsIGFuZCB0aGVuY2UgQGV4dHJhX2Nfb2Jqc0AsCglsYXN0LgoKCSogY2NjcC5jICh1c2VyX2xhYmVsX3ByZWZpeCk6IE5ldy4KCShtYWluKTogU2V0IGl0IG9mZiAtZipsZWFkaW5nLXVuZGVyc2NvcmUuCgkoc3BlY2lhbF9zeW1ib2wpOiBVc2UgaXQuCgkqIGNwcGxpYi5jIChzcGVjaWFsX3N5bWJvbCk6IExpa2V3aXNlLgoJKGNwcF9oYW5kbGVfb3B0aW9uKTogSGFuZGxlIC1mKmxlYWRpbmctdW5kZXJzY29yZS4KCSogY3BwdWxwLmM6IE5ldyBmaWxlLgoKCSogb3V0cHV0LmggKHVzZXJfbGFiZWxfcHJlZml4KTogRGVjbGFyZSBpdC4KCSogZHdhcmYyb3V0LmMgKEFTTV9OQU1FX1RPX1NUUklORyk6IFByZXBlbmQgdXNlcl9sYWJlbF9wcmVmaXguCgkqIHRvcGxldi5jIChmX29wdGlvbnMsIG1haW4pOiBIYW5kbGUgLWYqbGVhZGluZy11bmRlcnNjb3JlLgoKCSogZGVmYXVsdHMuaCAoQVNNX09VVFBVVF9MQUJFTFJFRik6IFVzZSBhc21fZnByaW50ZiBpbnN0ZWFkIG9mCglyZWZlcmVuY2luZyBVU0VSX0xBQkVMX1BSRUZJWCBkaXJlY3RseS4KCSogY29uZmlnL25leHRzdGVwLmggKEFTTV9PVVRQVVRfTEFCRUxSRUYpOiBMaWtld2lzZS4KCSogbTMyci9tMzJyLmggKEFTTV9PVVRQVVRfTEFCRUxSRUYpOiBMaWtld2lzZS4KCSogZmluYWwuYyAoYXNtX2ZwcmludGYpOiBVc2UgdXNlcl9sYWJlbF9wcmVmaXggaW5zdGVhZC4KCSogYXJtL3RodW1iLmMgKHRodW1iX3ByaW50X29wZXJhbmQpOiBMaWtld2lzZS4KCgkqIGdjYy5jIChkZWZhdWx0X2NvbXBpbGVycyk6IFBhc3MgLWYqbGVhZGluZy11bmRlcnNjb3JlIG9uIHRvCgljcHAgd2hlcmV2ZXIgYXBwcm9wcmlhdGUuCgpXZWQgT2N0IDI4IDIzOjA5OjI1IDE5OTggIFJvYmVydCBMaXBlICA8cm9iZXJ0bEBkZ2lpLmNvbT4KCgkqIHNjbzUuaCAoU1VCVEFSR0VUX1NXSVRDSEVTKTogQWRkIGRvY3VtZW50YXRpb24gZm9yIE9wZW5TZXJ2ZXItCglzcGVjaWZpYyBjb21waWxlciBzd2l0Y2hlcy4KCldlZCBPY3QgMjggMjE6MDU6NTMgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4gKGMtY29tbW9uLm8pOiBEZXBlbmQgb24gYy1wcmFnbWEuaC4gIFVzZSAkKFJUTF9IKSBpbnN0ZWFkCglvZiBydGwuaC4KCldlZCBPY3QgMjggMjA6NTI6NDcgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogZ2NjLmMgKEVYVFJBX1NQRUNTLCBleHRyYV9zcGVjcyk6IEludHJvZHVjZSBhbiBpbnRlcm1lZGlhdGUKCXN0cnVjdHVyZSB3aGljaCBoYXMgZXhhY3RseSB0aGUgbWVtYmVycyBwcm92aWRlZCBieSBFWFRSQV9TUEVDUy4KCVhtYWxsb2MoKSB0aGUgcmVhbCBgZXh0cmFfc3BlY3MnLCBhbmQgaW5pdGlhbGl6ZSBpdCBmcm9tIHRoaXMKCWludGVybWVkaWF0ZSBzdHJ1Y3R1cmUuCgoJKiBhbHBoYS5oIChFWFRSQV9TUEVDUyk6IFJldmVydCBjaGFuZ2UgZm9yIG1pc3NpbmcgaW5pdGlhbGl6ZXJzLgoKCSogbWlwcy5oICAoRVhUUkFfU1BFQ1MpOiBMaWtld2lzZS4KCgkqIHNwYXJjLmggKEVYVFJBX1NQRUNTKTogTGlrZXdpc2UuCgpXZWQgT2N0IDI4IDE2OjQ2OjA3IDE5OTggIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmNzLnVuaS1kb3J0bXVuZC5kZT4KCgkqIGZ1bmN0aW9uLmMgKHB1cmdlX2FkZHJlc3NvZl8xKTogSW5zdGVhZCBvZiBhYm9ydGluZyB3aGVuIGEKCWJpdGZpZWxkIGluc2VydGlvbiBhcyBhIHJlcGxhY2VtZW50IGZvciAoTUVNIChBRERSRVNTT0YpKSBkb2VzIG5vdAoJd29yayBqdXN0IHB1dCB0aGUgQUREUkVTU09GIG9uIHN0YWNrLiAgT3RoZXJ3aXNlIHJlbWVtYmVyIGFsbCBzdWNoCglzdWNjZXNzZnVsIHJlcGxhY2VtZW50cywgc28gdGhhdCBleGFjdGx5IHRoZSBzYW1lIHJlcGxhY2VtZW50cwoJY2FuIGJlIG1hZGUgb24gdGhlIFJFR19OT1RFcy4gIFJlbW92ZSB0aGUgc3BlY2lhbCBjYXNlIGZvciBDQUxMCglpbnNucyBhZ2Fpbi4KCShwdXJnZV9hZGRyZXNzb2ZfcmVwbGFjZW1lbnRzKTogTmV3IHZhcmlhYmxlLgoJKHB1cmdlX2FkZHJlc3NvZik6IENsZWFyIGl0IGF0IGVuZC4KCjE5OTgtMTAtMjggIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkucGh5cy5jb2x1bWJpYS5lZHU+CgoJKiBjLWxhbmcuYzogRGVjbGFyZSBleHRlcm4gY2hhciAqeXlfY3VyIGlmIFVTRV9DUFBMSUIuCgkgIChsYW5nX2luaXQpOiBDYWxsIGNoZWNrX25ld2xpbmUgYWx3YXlzLgoJKiBjLWxleC5jIChpbml0X3BhcnNlKSBbVVNFX0NQUExJQj0xXTogQWZ0ZXIgY2FsbGluZwoJICBjcHBfc3RhcnRfcmVhZCwgc2V0IHl5X2N1ciBhbmQgeXlfbGltIHRvIHJlYWQgZnJvbQoJICBwYXJzZV9pbi50b2tlbl9idWZmZXIsIHNvIHRoYXQgd2UnbGwgc2VlIHRoZSBmaXJzdCAjbGluZQoJICBkaXJlY3RpdmUuCgkqIGNwcGxpYi5jIChjcHBfc3RhcnRfcmVhZCk6IGZpbmNsdWRlIHRoZSBtYWluIGlucHV0IGZpbGUKCSAgYmVmb3JlIHByb2Nlc3NpbmcgLWluY2x1ZGUvLWltYWNyb3MuCSBQcm9jZXNzIC1pbWFjcm9zIGFuZAoJICAtaW5jbHVkZSBzZXBhcmF0ZWx5LCBhbmQgaGFuZGxlIC1pbmNsdWRlIGJ5IHN0YWNraW5nIGEKCSAgYnVmZmVyIGZvciB0aGUgZmlsZSBpbiBxdWVzdGlvbiBhcyBpZiBpdCdkIGJlZW4gI2luY2x1ZGVkLgoJKiB0b3BsZXYuYyAoZG9jdW1lbnRlZF9sYW5nX29wdGlvbnMpOiBSZWNvZ25pemUgLUggd2hlbgoJICBVU0VfQ1BQTElCIGlzIG9uLgoKMTk5OC0xMC0yOCAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5waHlzLmNvbHVtYmlhLmVkdT4KCgkqIGNwcGxpYi5jOiBNZXJnZSBkb19vbmNlIGludG8gZG9fcHJhZ21hLiAgQnJlYWsgZmlsZSBoYW5kbGluZwoJICBjb2RlIG91dCBvZiBkb19pbmNsdWRlLgoJICBNb3ZlIGFwcGVuZF9pbmNsdWRlX2NoYWluLCBkZXBzX291dHB1dCwKCSAgZmlsZV9jbGVhbnVwLCByZWR1bmRhbnRfaW5jbHVkZV9wLCBpbXBvcnRfaGFzaCwKCSAgbG9va3VwX2ltcG9ydCwgYWRkX2ltcG9ydCwgcmVhZF9maWxlbmFtZV9zdHJpbmcsIHJlYWRfbmFtZV9tYXAsCgkgIG9wZW5faW5jbHVkZV9maWxlLCBmaW5jbHVkZSwgc2FmZV9yZWFkIHRvIGNwcGZpbGVzLmMuCgkgIE1vdmUgcHJvdG90eXBlcyBmb3IgZGVwc19vdXRwdXQsIGFwcGVuZF9pbmNsdWRlX2NoYWluLAoJICBmaW5jbHVkZSB0byBjcHBsaWIuaC4gIE1vdmUgZGVmaW5pdGlvbiBvZiBzdHJ1Y3QKCSAgZmlsZV9uYW1lX2xpc3QgdGhlcmUgYWxzby4KCgkqIGNwcGZpbGVzLmM6IE5ldyBmaWxlLiAgQ29udGFpbnMgYWxsIHRoZSBhYm92ZSBmdW5jdGlvbnMKCSAgYnJva2VuIG91dCBvZiBjcHBsaWIuYzsgYWxzbyBoYWNrX3Ztc19pbmNsdWRlX3NwZWNpZmljYXRpb24KCSAgZnJvbSBjY2NwLmMgYW5kIGZpbmRfaW5jbHVkZV9maWxlLCBhIG5ldyBmdW5jdGlvbiBicm9rZW4gb3V0IG9mCgkgIGRvX2luY2x1ZGUuCgoJKiBNYWtlZmlsZS5pbiAoY3BwbWFpbik6IERlcGVuZCBvbiBjcHBmaWxlcy5vLgoJICAoZml4LWhlYWRlcik6IExpa2V3aXNlLgoJICAoY3BwZmlsZXMubyk6IE5ldyB0YXJnZXQuCgkqIGNvbmZpZ3VyZS5pbiAoLS1lbmFibGUtYy1jcHBsaWIpOiBBZGQgY3BwZmlsZXMubyB0bwoJICBleHRyYV9jX29ianMuICBBZGQgLi4vY3BwZmlsZXMubyB0byBleHRyYV9jeHhfb2Jqcy4KCldlZCBPY3QgMjggMTQ6MDY6NDkgMTk5OCAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogZHdhcmZvdXQuYyAoZHdhcmZvdXRfZmlsZV9zY29wZV9kZWNsKTogSWYgREVDTF9DT05URVhULCBkb24ndCBhYm9ydAoJaWYgcGVuZGluZ190eXBlcyBpcyBub24temVyby4KCShkd2FyZm91dF9maW5pc2gpOiBWZXJpZnkgcGVuZGluZ190eXBlcyBpcyB6ZXJvIGJlZm9yZSBmaW5pc2hpbmcuCgpXZWQgT2N0IDI4IDEwOjI5OjA5IDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBleHByLmMgKGNvbnZlcnRfbW92ZSk6IFVzZSBzaGlmdHMgdG8gcGVyZm9ybSB0aGUgbW92ZSBpZiBhCglzdWl0YWJsZSBleHRlbmQgcGF0dGVybiBjYW5ub3QgYmUgZm91bmQuICBDb2RlIHdyaXR0ZW4gYnkKCVJpY2hhcmQgSGVuZGVyc29uIDxydGhAY3lnbnVzLmNvbT4uCgpXZWQgT2N0IDI4IDAzOjU5OjI5IDE5OTggIEJlcm5kIFNjaG1pZHQgIDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCgkqIHJlZ2NsYXNzLmMgKHJlbnVtYmVyLCByZWdub19hbGxvY2F0ZWQpOiBOZXcgc3RhdGljIHZhcmlhYmxlcywgbW92ZWQKCW91dCBvZiBhbGxvY2F0ZV9yZWdfaW5mby4KCShhbGxvY2F0ZV9yZWdfaW5mbyk6IE1vdmUgdGhlc2UgdHdvIHZhcmlhYmxlcyBvdXRzaWRlIHRoZSBmdW5jdGlvbi4KCU1vdmUgY29kZSB0byBmcmVlIG1lbW9yeSBpbnRvIG5ldyBmdW5jdGlvbiBmcmVlX3JlZ19pbmZvLgoJKGZyZWVfcmVnX2luZm8pOiBOZXcgZnVuY3Rpb24sIGJyb2tlbiBvdXQgb2YgYWxsb2NhdGVfcmVnX2luZm8uCgkqIHRvcGxldi5jIChjb21waWxlX2ZpbGUpOiBDYWxsIGZyZWVfcmVnX2luZm8sIG5vdCBhbGxvY2F0ZV9yZWdfaW5mby4KCSogcnRsLmggKGFsbG9jYXRlX3JlZ19pbmZvKTogRG9uJ3QgZGVjbGFyZS4KCShmcmVlX3JlZ19pbmZvKTogRGVjbGFyZS4KCgkqIGZpbmFsLmMgKGNsZWFudXBfc3VicmVnX29wZXJhbmRzKTogQVNNX0lOUFVUcyBuZWVkIG5vIHRyZWF0bWVudC4KCldlZCBPY3QgMjggMDI6Mzg6MTIgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdG9wbGV2LmMgKGNvbXBpbGVfZmlsZSk6IFRlbXBvcmFyaWx5IHJldmVydCBsYXN0IGNoYW5nZS4KCldlZCBPY3QgMjggMDA6MDA6MzUgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogYy10eXBlY2suYyAoY29udmVydF9mb3JfYXNzaWdubWVudCk6IFBhcmVudGhlc2l6ZS4KCjE5OTgtMTAtMjggIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmNzLnVuaS1kb3J0bXVuZC5kZT4KCgkqIHJlbG9hZDEuYyAoZGVsZXRlX291dHB1dF9yZWxvYWQpOiBBdm9pZCBhbWJpZ291cyBlbHNlLgoKV2VkIE9jdCAyOCAwMDoxMDozNSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB0b3BsZXYuYyAoY29tcGlsZV9maWxlKTogQ2FsbCBhbGxvY2F0ZV9yZWdfaW5mbyB0byBmcmVlIHJlZ2lzdGVyCgl0YWJsZSBtZW1vcnkuCgkqIHJ0bC5oIChhbGxvY2F0ZV9yZWdfaW5mbyk6IERlY2xhcmUuCgoJKiBQUk9KRUNUUzogUmVtb3ZlIGVudHJ5IGZvciBsb2NhbCBzcGlsbGluZy4KCgkqIGZpbmFsLmMgKGNsZWFudXBfc3VicmVnX29wZXJhbmRzKTogTmV3IGZ1bmN0aW9uLgoJKGZpbmFsX3NjYW5faW5zbik6IFVzZSBpdC4KCShhbHRlcl9zdWJyZWcpOiBDbGVhciB0aGUgInVzZWQiIGZpZWxkIHdoZW4gd2UgdHVybiBhIFNVQlJFRyBpbnRvCglhIFJFRy4KCSogcmVsb2FkMS5jIChyZWxvYWQpOiBEZWxldGUgQ0xPQkJFUiBpbnNucyBhbmQgYWxzbyBjbGVhbnVwIFNVQlJFRwoJb3BlcmFuZHMgd2hlbiByZWxvYWQgaGFzIGZpbmlzaGVkLgoJKiByZWxvYWQuaCAoY2xlYW51cF9zdWJyZWdfb3BlcmFuZHMpOiBEZWNsYXJlLi4KCSogZmxvdy5jIChsaWZlX2FuYWx5c2lzXzEpOiBObyBsb25nZXIgZGVsZXRlIENMT0JCRVIgaW5zbnMgYWZ0ZXIKCXJlbG9hZC4gIEhhbmRsZWQgaW4gcmVsb2FkIGl0c2VsZi4KClR1ZSBPY3QgMjcgMjM6MzI6MzQgMTk5OCAgQmVybmQgU2NobWlkdCAgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgoKCSogcmVsb2FkMS5jICh2ZXJpZnlfaW5pdGlhbF9vZmZzZXRzKTogTmV3IGZ1bmN0aW9uLgoJKHJlbG9hZCk6IENhbGwgaXQgYWZ0ZXIgcmVsb2FkX2FzX25lZWRlZC4gIEFsc28gdmVyaWZ5IHRoYXQgdGhlIGZyYW1lCglzaXplIHN0YXlzIGNvbnN0YW50IGR1cmluZyByZWxvYWRfYXNfbmVlZGVkLgoJKiBpMzg2LmggKENPTlNUX0RPVUJMRV9PS19GT1JfTEVUVEVSX1ApOiBVbmRvIEp1bCAyNiBjaGFuZ2UuCgoJKiByZWxvYWQuaCAoc3RydWN0IGluc25fY2hhaW4pOiBBZGQgbmVlZF9vcGVyYW5kX2NoYW5nZSBlbGVtZW50LgoJKiByZWxvYWQxLmMgKG5ld19pbnNuX2NoYWluKTogQ2xlYXIgaXQuCgkoY2FsY3VsYXRlX25lZWRzX2FsbF9pbnNucyk6IFNldCBpdDsgZG9uJ3Qgb3ZlcmxvYWQgbmVlZF9yZWxvYWQuCgkocmVsb2FkX2FzX25lZWRlZCk6IFVzZSBpdC4KCgkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHNfYWRkcmVzcyk6IFVzZSBCQVNFX1JFR19DTEFTUyBpbnN0ZWFkIG9mCglyZWxvYWRfYWRkcmVzc19iYXNlX3JlZ19jbGFzcyB0aHJvdWdob3V0LiAgU2ltaWxhciBmb3IgSU5ERVhfUkVHX0NMQVNTCglhbmQgcmVsb2FkX2FkZHJlc3NfaW5kZXhfcmVnX2NsYXNzLgoJKGZpbmRfcmVsb2Fkc19hZGRyZXNzXzEpOiBMaWtld2lzZS4KCSogcmVsb2FkLmggKHJlbG9hZF9hZGRyZXNzX2Jhc2VfcmVnX2NsYXNzLAoJcmVsb2FkX2FkZHJlc3NfaW5kZXhfcmVnX2NsYXNzKTogRG9uJ3QgZGVjbGFyZS4KCSogcmVsb2FkMS5jIChyZWdfb2xkX3JlbnVtYmVyLCBwc2V1ZG9fcHJldmlvdXNfcmVncywKCXBzZXVkb19mb3JiaWRkZW5fcmVncywgYmFkX3NwaWxsX3JlZ3NfZ2xvYmFsKTogTmV3IHN0YXRpYyB2YXJpYWJsZXMuCgkodXNlZF9zcGlsbF9yZWdzKTogTm93IHN0YXRpYy4KCShyZWxvYWRfYWRkcmVzc19iYXNlX3JlZ19jbGFzcywgcmVsb2FkX2FkZHJlc3NfaW5kZXhfcmVnX2NsYXNzLAoJcmVnc19leHBsaWNpdGx5X3VzZWQsIGNvdW50ZWRfZm9yX2dyb3VwcywgY291bnRlZF9mb3Jfbm9uZ3JvdXBzLAoJYmFzaWNfYmxvY2tfbmVlZHMsIG1heF9uZWVkcywgZ3JvdXBfc2l6ZSwgZ3JvdXBfbW9kZSwgbWF4X2dyb3VwcywKCW1heF9ub25ncm91cHMsIG1heF9uZWVkc19pbnNuLCBtYXhfZ3JvdXBzX2luc24sIG1heF9ub25ncm91cHNfaW5zbiwKCWZvcmJpZGRlbl9yZWdzKToKCURlbGV0ZWQgdmFyaWFibGVzLgoJKGluaXRfcmVsb2FkKTogRGVsZXRlIGNvZGUgdG8gY29tcHV0ZSBiYXNlL2luZGV4IHJlZyBjbGFzc2VzLgoJKHJlbG9hZCk6IERlbGV0ZSB2YXJpYWJsZSBKLgoJRGVsZXRlIGNvZGUgdG8gbWFuYWdlIGJhc2ljX2Jsb2NrX25lZWRzLgoJRG9uJ3QgY29tcHV0ZSByZWdzX2V4cGxpY2l0bHlfdXNlZC4KCUFsbG9jYXRlLCBpbml0aWFsaXplIGFuZCBmcmVlIHJlZ19vbGRfcmVudW1iZXIsIHBzZXVkb19mb3JiaWRkZW5fcmVncywKCXBzZXVkb19wcmV2aW91c19yZWdzLgoJSW5pdGlhbGl6ZSBiYWRfc3BpbGxfcmVnc19nbG9iYWwuCglEb24ndCBjYWxsIG9yZGVyX3JlZ3NfZm9yX3JlbG9hZCBoZXJlLgoJRG9uJ3QgaW5pdGlhbGl6ZSBzcGlsbF9yZWdfb3JkZXIgYW5kIG5fc3BpbGxzLgoJRG9uJ3QgZm9yYmlkIGV4cGxpY2l0bHkgdXNlZCByZWdzIHRvIGJlIHVzZWQgZm9yIHNwaWxsIHJlZ3MuCglDaGFuZ2UgbWFpbiBsb29wIHRvIGluZmluaXRlIGxvb3AsIHdpdGggZXhwbGljaXQgYnJlYWsgc3RhdGVtZW50cy4KCU1ha2UgU09NRVRISU5HX0NIQU5HRUQgdmFyaWFibGUgbG9jYWwgdG8gdGhhdCBsb29wLgoJRG9uJ3QgaW5pdGlhbGl6ZSBtYXhfbmVlZHMsIG1heF9ncm91cHMsIG1heF9ub25ncm91cHMsIG1heF9uZWVkc19pbnNuLAoJbWF4X2dyb3Vwc19pbnNuLCBtYXhfbm9uZ3JvdXBzX2luc24sIGdyb3VwX3NpemUsIGdyb3VwX21vZGUuCglNYWtlIHN1cmUgc3BpbGxlZF9wc2V1ZG9zIGlzIGNsZWFyZWQgYmVmb3JlIGNhbGxpbmcgc3BpbGxfaGFyZF9yZWcgb3IKCW5ld19zcGlsbF9yZWcuCglEb24ndCBjYWxsIGR1bXBfbmVlZHMuCglEZWxldGUgY29kZSB0byByZXNldCBwb3RlbnRpYWxfcmVsb2FkX3JlZ3MuCglEZWxldGUgY29kZSB0byB0ZXJtaW5hdGUgbG9vcCBjb25kaXRpb25hbCBvbiB0aGUgZ2xvYmFsIG5lZWRzIHZhcmlhYmxlcwoJc2hvd2luZyBubyBmdXJ0aGVyIG5lZWRzLgoJKGNhbGN1bGF0ZV9uZWVkc19hbGxfaW5zbnMpOiBSZXR1cm4gdm9pZC4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCglJbml0aWFsaXplIHNvbWV0aGluZ19uZWVkc19lbGltaW5hdGlvbiBoZXJlLCBub3QgaW4gcmVsb2FkLgoJRGVsZXRlIGF2b2lkX3JldHVybl9yZWcga2x1ZGdlLgoJKGNhbGN1bGF0ZV9uZWVkcyk6IExvc2UgQVZPSURfUkVUVVJOX1JFRyBhbmQgR0xPQkFMIGFyZ3MsIHJldHVybiB2b2lkLgoJQWxsIGNhbGxlcnMgY2hhbmdlZC4KCUluaXRpYWxpemUgdGhlIGdyb3VwX21vZGUgYW5kIGdyb3VwX3NpemUgZWxlbWVudHMgb2YgdGhlIGFyZyBDSEFJTi4KCURlbGV0ZSBjb2RlIHRvIG1hbmFnZSBiYXNpY19ibG9ja19uZWVkcy4KCU9wZXJhdGUgb24gZWxlbWVudHMgb2YgQ0hBSU4gaW5zdGVhZCBvZiBnbG9iYWwgdmFyaWFibGVzLgoJRGVsZXRlIGF2b2lkX3JldHVybl9yZWcga2x1ZGdlLgoJKGZpbmRfdHdvcmVnX2dyb3VwKTogTG9zZSBHTE9CQUwgYXJnLCB0YWtlIENIQUlOIGFyZywgcmV0dXJuIHZvaWQuCglBbGwgY2FsbGVycyBjaGFuZ2VkLgoJT3BlcmF0ZSBvbiBlbGVtZW50cyBvZiBDSEFJTiBpbnN0ZWFkIG9mIGdsb2JhbCB2YXJpYWJsZXMuCglEZWxldGUgc3BlY2lhbCBTTUFMTF9SRUdJU1RFUl9DTEFTU0VTIGNvZGUuCglEZWxldGUgc3BpbGxfZmFpbHVyZSBjb2RlOyBub3cgaW4gbmV3X3NwaWxsX3JlZy4KCShmaW5kX2dyb3VwKTogTG9zZSBHTE9CQUwgYXJnLCB0YWtlIENIQUlOIGFyZywgcmV0dXJuIHZvaWQuCglBbGwgY2FsbGVycyBjaGFuZ2VkLgoJT3BlcmF0ZSBvbiBlbGVtZW50cyBvZiBDSEFJTiBpbnN0ZWFkIG9mIGdsb2JhbCB2YXJpYWJsZXMuCgkobWF5YmVfbWFya19wc2V1ZG9fc3BpbGxlZCk6IE5ldyBzdGF0aWMgZnVuY3Rpb24uCgkoZmluZF9yZWxvYWRfcmVncyk6IExvc2UgR0xPQkFMIGFyZywgdGFrZSBDSEFJTiBhcmcsIHJldHVybiB2b2lkLgoJQWxsIGNhbGxlcnMgY2hhbmdlZC4KCU9wZXJhdGUgb24gZWxlbWVudHMgb2YgQ0hBSU4gaW5zdGVhZCBvZiBnbG9iYWwgdmFyaWFibGVzLgoJQ2FsbCBvcmRlcl9yZWdzX2Zvcl9yZWxvYWQgaGVyZSwgbm90IGluIHJlbG9hZC4KCUluaXRpYWxpemUgc3BpbGxfcmVnX29yZGVyIGFuZCBuX3NwaWxscy4KCVNpbXBsaWZ5IHRlc3Qgd2hldGhlciBhbiBhc20gaW5zbiBpcyBpbnZvbHZlZC4KCURlbGV0ZSBzcGlsbF9mYWlsdXJlIGNvZGU7IG5vdyBpbiBuZXdfc3BpbGxfcmVnLgoJQ2FsbCBtYXliZV9tYXJrX3BzZXVkb19zcGlsbGVkIGZvciBldmVyeXRoaW5nIG1hcmtlZCBhcyBsaXZlIGluCglDSEFJTi4gIE1lcmdlIENIQUlOJ3MgdXNlZF9zcGlsbF9yZWdzIGludG8gdGhlIGdsb2JhbCB2YXJpYWJsZQoJdXNlZF9zcGlsbF9yZWdzLgoJKGR1bXBfbmVlZHMpOiBUYWtlIENIQUlOIGFyZy4gIE5vIGxvbmdlciBzdGF0aWMsIHRvIHByZXZlbnQgdGhlCgljb21waWxlciBmcm9tIG9wdGltaXppbmcgdGhpcyBmdW5jdGlvbiAobm93IHVudXNlZCkgYXdheS4KCU9wZXJhdGUgb24gZWxlbWVudHMgb2YgQ0hBSU4gaW5zdGVhZCBvZiBnbG9iYWwgdmFyaWFibGVzLgoJKHBvc3NpYmxlX2dyb3VwX3ApOiBMb3NlIE1BWF9HUk9VUFMgYXJnLCB0YWtlIENIQUlOIGFyZy4gIEFsbCBjYWxsZXJzCgljaGFuZ2VkLgoJT3BlcmF0ZSBvbiBlbGVtZW50cyBvZiBDSEFJTiBpbnN0ZWFkIG9mIGdsb2JhbCB2YXJpYWJsZXMuCgkoY291bnRfcG9zc2libGVfZ3JvdXBzKTogTG9zZSBHUk9VUF9TSVpFLCBHUk9VUF9NT0RFLCBNQVhfR1JPVVBTIGFyZ3MsCgl0YWtlIENIQUlOIGFyZy4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCglPcGVyYXRlIG9uIGVsZW1lbnRzIG9mIENIQUlOIGluc3RlYWQgb2YgZ2xvYmFsIHZhcmlhYmxlcy4KCShuZXdfc3BpbGxfcmVnKTogTG9zZSBNQVhfTkVFRFMsIE1BWF9OT05HUk9VUFMsIEdMT0JBTCBhcmdzLCB0YWtlCglDSEFJTiwgTk9OR1JPVVAgYXJncy4gIFJldHVybiB2b2lkLiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KCVZlcmlmeSBjYWxsZXIgaXNuJ3QgdHJ5aW5nIHRvIHNwaWxsIGEgcHNldWRvLgoJU2ltcGxpZnkgdGVzdCBmb3IgaWxsZWdhbCByZWcsIGp1c3QgdXNlIGJhZF9zcGlsbF9yZWdzLgoJR2VuZXJhdGUgYmV0dGVyIGVycm9yIG1lc3NhZ2VzLgoJT3BlcmF0ZSBvbiBlbGVtZW50cyBvZiBDSEFJTiBpbnN0ZWFkIG9mIGdsb2JhbCB2YXJpYWJsZXMuCglNYXJrIHNwaWxsZWQgcmVnaXN0ZXIgaW4gQ0hBSU4ncyB1c2VkX3NwaWxsX3JlZ3MgZWxlbWVudC4KCURvbid0IGNhbGwgc3BpbGxfaGFyZF9yZWcuCgkoc3BpbGxfaGFyZF9yZWcpOiBMb3NlIEdMT0JBTCBhcmcsIHJldHVybiB2b2lkLiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KCU1hcmsgc3BpbGxlZCBoYXJkIHJlZ3MgaW4gYmFkX3NwaWxsX3JlZ3NfZ2xvYmFsLgoJTWFyayBhZmZlY3RlZCBwc2V1ZG9zIGluIHNwaWxsZWRfcHNldWRvcywgYnV0IGRvbid0IHNwaWxsIHRoZW0uCgkoaW9yX2hhcmRfcmVnX3NldCk6IE5ldyBzdGF0aWMgZnVuY3Rpb24uCgkoZmluaXNoX3NwaWxscyk6IFJldHVybiBpbnQuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgoJQ29tcHV0ZSBzcGlsbF9yZWdfb3JkZXIsIG5fc3BpbGxzIGFuZCBzcGlsbF9yZWdzIGhlcmUuICBBbHNvIHVwZGF0ZQoJcmVnc19ldmVyX2xpdmUgZm9yIHJlZ3MgdXNlZCBhcyBzcGlsbHMuCglGb3IgZXZlcnkgcHNldWRvIGluIHNwaWxsZWRfcHNldWRvcywgc3BpbGwgaXQgYW5kIG1hcmsgdGhlIHByZXZpb3VzCgloYXJkIHJlZyBpdCBoYWQgaW4gcHNldWRvX3ByZXZpb3VzX3JlZ3MuICBDb21wdXRlIHdoaWNoIGhhcmQgcmVncwoJYXJlIHVzZWQgYXMgc3BpbGxzIGluIGluc25zIGR1cmluZyB3aGljaCBpdCBpcyBsaXZlLCBhbmQgcmV0cnkgZ2xvYmFsCglyZWdpc3RlciBhbGxvY2F0aW9uLiAgVXBkYXRlIGFsbCBsaWZlIGluZm9ybWF0aW9uIGluIHRoZQoJcmVsb2FkX2luc25fY2hhaW4gbm90IHRvIGluY2x1ZGUgcHNldWRvcyB3aXRob3V0IGhhcmQgcmVncy4KCUNhbGwgYWx0ZXJfcmVnIGZvciBhbGwgYWZmZWN0ZWQgc3BldWRvcy4KCgkoc2Nhbl9wYXJhZG94aWNhbF9zdWJyZWdzKTogRGlzYWJsZSBTTUFMTF9SRUdJU1RFUl9DTEFTU0VTIHNwZWNpYWwKCWNhc2UsIGl0J3Mgbm90IGNsZWFyIHdoYXQgaXQncyBzdXBwb3NlZCB0byBkby4KCgkoaGFyZF9yZWdfdXNlX2NvbXBhcmUpOiBUYWtlIGJhZF9zcGlsbF9yZWdzIGludG8gYWNjb3VudC4KCShwc2V1ZG9zX2NvdW50ZWQpOiBOZXcgc3RhdGljIHZhcmlhYmxlLgoJKGNvdW50X3BzZXVkbyk6IE5ldyBzdGF0aWMgZnVuY3Rpb24uCgkob3JkZXJfcmVnc19mb3JfcmVsb2FkKTogVGFrZSBDSEFJTiBhcmcuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgoJSW5pdGlhbGl6ZSBiYWRfc3BpbGxfcmVncyBmcm9tIGJhZF9zcGlsbF9yZWdzX2dsb2JhbCwgdGhlbiBtZXJnZSBhbnkKCWhhcmQgcmVnaXN0ZXJzIGV4cGxpY2l0bHkgdXNlZCBhY3Jvc3MgdGhlIGN1cnJlbnQgaW5zbiBpbnRvIHRoZSBzZXQuCglDb21wdXRlIGhhcmRfcmVnX25fdXNlcyB0YWtpbmcgb25seSBwc2V1ZG9zIGxpdmUgYWNyb3NzIHRoaXMgaW5zbgoJaW50byBhY2NvdW50LgoJVHdlYWsgc29ydGluZyBvZiBwb3RlbnRpYWxfcmVsb2FkX3JlZ3MuCgkoY29tcGFyZV9zcGlsbF9yZWdzKTogRGVsZXRlIGZ1bmN0aW9uLgoJKHJlbG9hZF9hc19uZWVkZWQpOiBEb24ndCBzb3J0IHRoZSBzcGlsbF9yZWdzIGFycmF5LCBpdCdzIGNvbXB1dGVkCglpbiBwcm9wZXIgb3JkZXIgaW4gZmluaXNoX3NwaWxscy4KCURlbGV0ZSBhdm9pZF9yZXR1cm5fcmVnIGtsdWRnZS4KCURlbGV0ZSBjb2RlIHRvIG1hbmFnZSBiYXNpY19ibG9ja19uZWVkcy4KCShhbGxvY2F0ZV9yZWxvYWRfcmVnKTogTWlub3Igc3BlZWQvcmVhZGFiaWxpdHkgdHdlYWtzLgoJT3BlcmF0ZSBvbiBlbGVtZW50cyBvZiBDSEFJTiBpbnN0ZWFkIG9mIGdsb2JhbCB2YXJpYWJsZXMuCgkoY2hvb3NlX3JlbG9hZF9yZWdzKTogTG9zZSBBVk9JRF9SRVRVUk5fUkVHIGFyZy4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCglEZWxldGUgYXZvaWRfcmV0dXJuX3JlZyBrbHVkZ2UuCglJbml0aWFsaXplIHJlbG9hZF9yZWdfdXNlZCBmcm9tIENIQUlOJ3MgdXNlZF9zcGlsbF9yZWdzIGVsZW1lbnQuCglEZWxldGUgdW51c2VkIGxhYmVsIEZBSUwuCgkocmVsb2FkX2NvbWJpbmUpOiBSZXBsYWNlIHJlbG9hZF9hZGRyZXNzX2luZGV4X3JlZ19jbGFzcyB3aXRoCglJTkRFWF9SRUdTLgoJRG9uJ3QgdXNlIHVzZWRfc3BpbGxfcmVncyB0byBkZXRlcm1pbmUgaW5mb3JtYXRpb24gYWJvdXQgbGlmZXRpbWUgb2YKCWhhcmQgcmVncy4KClR1ZSBPY3QgMjcgMTM6MTU6MDIgMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIHRvcGxldi5jIChkaXNwbGF5X2hlbHApOiBJZ25vcmUgZW1wdHkgdGFyZ2V0IHNwZWNpZmljCglvcHRpb25zLCBhbmQgaWYgLVcgaXMgYWxzbyBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSB0aGVuCglkaXNwbGF5IHVuZG9jdW1lbnRlZCBvcHRpb25zLgoKCSogY29uZmlnL2FybS9hcm0uYzogVXBkYXRlZCB3aXRoIGNoYW5nZXMgaW4gZGV2byBzb3VyY2VzLgoJKiBjb25maWcvYXJtL2FybS5oOiBVcGRhdGVkIHdpdGggY2hhbmdlcyBpbiBkZXZvIHNvdXJjZXMuCgkqIGNvbmZpZy9hcm0vbGliMWZ1bmNzLmFzbTogVXBkYXRlZCB3aXRoIGNoYW5nZXMgaW4gZGV2byBzb3VyY2VzLgoJKiBjb25maWcvYXJtL2xpYjF0aHVtYi5hc206IEFkZCBFTEYgc3VwcG9ydC4KClR1ZSBPY3QgMjcgMTY6MTE6NDMgMTk5OCAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogY29sbGVjdDIuYyAoYWl4NjRfZmxhZyk6IE5ldyB2YXJpYWJsZS4KCShtYWluLCBjYXNlICdiJyk6IFBhcnNlIGl0LgoJKEdDQ19DSEVDS19IRFIpOiBPYmplY3QgbWFnaWMgbnVtYmVyIG11c3QgbWF0Y2ggbW9kZS4KCShzY2FuX3Byb2dfZmlsZSk6IE9ubHkgY2hlY2sgZm9yIHNoYXJlZCBvYmplY3QgaWYgdmFsaWQgaGVhZGVyLgoJUHJpbnQgZGVidWdnaW5nIGlmIGhlYWRlci9tb2RlIG1pc21hdGNoLgoKVHVlIE9jdCAyNyAxMDoxNTowMiAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCUFkZGVkIHN1cHBvcnQgZm9yIGFybS1lbGYtbGludXggY29uZmlndXJhdGlvbiwgc3VibWl0dGVkIGJ5IFBoaWxpcAoJQmx1bmRlbGwgPHBiQG5leHVzLmNvLnVrPiwgYW5kIGludGVncmF0ZWQgdGhpcyB3aXRoIHRoZSBhcm0tZWxmCgljb2RlIGRldmVsb3BlZCBieSBDYXRoZXJpbmUgTW9vcmUgPGNsbUBjeWdudXMuY29tPi4gIFRoZSBmb2xsb3dpbmcKCWZpbGVzIGFyZSBhZmZlY3RlZDoKCgkqIGNvbmZpZ3VyZS5pbjogQWRkIGFybS0qLWxpbnV4LWdudSwgYXJtdjItKi1saW51eCBhbmQgYXJtLSotZWxmCgl0YXJnZXRzLgoKCSogY29uZmlndXJlOiBSZWdlbmVyYXRlZC4KCgkqIGNvbmZpZy9hcm0vYW91dC5oOiBBZGQgZGVmYXVsdCBkZWZpbml0aW9ucyBvZiBSRUdJU1RFUl9QUkVGSVgsCglVU0VSX0xBQkVMX1BSRUZJWCBhbmQgTE9DQUxfTEFCRUxfUFJFRklYLiAgTWFrZSBvdGhlciBtYWNybwoJZGVmaW5pdGlvbnMgY29uZGl0aW9uYWwgb24gdGhlaXIgbm90IGhhdmluZyBiZWVuIGFscmVhZHkgZGVmaW5lZC4KCgkqIGNvbmZpZy9hcm0vbGluMWZ1bmNzLmFzbTogQWRkIEVMRiBvbmx5IG1hY3JvcyB0byBnZW5lcmF0ZSAuc2l6ZQoJYW5kIC50eXBlIGRpcmVjdGl2ZXMsIGFuZCBhZGQgIihQTFQpIiBxdWFsaWZpY2F0aW9uIHRvIGZ1bmN0aW9uCgljYWxscy4KCgkqIGNvbmZpZy9hcm0vbGludXguaDogRGVsZXRlZC4gIFRoaXMgZmlsZSBpcyBub3cgc3VwZXJzZWRlZCBieQoJZWl0aGVyIGxpbnV4LWVsZi5oIG9yIGxpbnV4LWFvdXQuaC4KCgkqIGNvbmZpZy9hcm0vbGludXgtZ2FzLmg6IERlZmluZSBgaW5oaWJpdF9saWJjJyBpZiBjcm9zcy1jb21waWxpbmcuCgkoQ0xFQVJfSU5TTl9DQUNIRSk6IE5ldyBtYWNybywgY3VycmVudGx5IGRpc2FibGVkIChhd2FpdGluZyBrZXJuZWwKCXN1cHBvcnQpLgoJTW92ZSBkZWZpbml0aW9ucyBmcm9tIG9sZCBsaW51eC5oIGZpbGUgaGVyZS4KCgkqIGNvbmZpZy9hcm0vZWxmLmg6IE5ldyBmaWxlLiAgR2VuZXJpYyBBUk0vRUxGIHN1cHBvcnQuCgoJKiBjb25maWcvYXJtL2xpbnV4LWFvdXQuaDogTmV3IGZpbGUuICBTdXBwb3J0IGZvciBMaW51eCB3aXRoIGEub3V0LgoKCSogY29uZmlnL2FybS9saW51eC1lbGYuaDogTmV3IGZpbGUuICBTdXBwb3J0IGZvciBMaW51eCB3aXRoIEVMRi4KCgkqIGNvbmZpZy9hcm0vbGludXgtZWxmMjYuaDogTmV3IGZpbGUuICBTdXBwb3J0IGZvciBMaW51eCB3aXRoIEVMRgoJdXNpbmcgdGhlIDI2Yml0IEFQQ1MuCgoJKiBjb25maWcvYXJtL3Vua25vd24tZWxmLmg6IE5ldyBmaWxlLiAgU3VwcG9ydCBmb3IgT1MnZXMgb3RoZXIKCXRoYW4gTGludXggd2l0aCBFTEYuCgoJKiBjb25maWcvYXJtL3QtYXJtLWVsZjogTmV3IGZpbGUuICBtYWtlZmlsZSBmcmFnbWVudCBmb3IgYXJtLWVsZgoJYnVpbGRzLgoKCSogY29uZmlnL2FybS9jb2ZmLmg6IEluY2x1ZGUgYW91dC5oIGZvciBiYXNpYyBhc3NlbWJsZXIgbWFjcm9zLgoJQWRkIHN1cHBvcnQgZm9yIC1tc3RydWN0dXJlX3NpemVfYm91bmRhcnk9PG4+IGNvbW1hbmQgbGluZSBvcHRpb24uCgoJKiBjb25maWcvYXJtL2FybS5oOiBBZGQgc3VwcG9ydCBmb3IgLW1zdHJ1Y3R1cmVfc2l6ZV9ib3VuZGFyeT08bj4KCWNvbW1hbmQgbGluZSBvcHRpb24uICBNYWtlIG1hY3JvIGRlZmluaXRpb25zIGNvbmRpdGlvbmFsIG9uIHRoZWlyCglub3QgaGF2aW5nIGJlZW4gYWxyZWFkeSBkZWZpbmVkLgoKCSogY29uZmlnL2FybS9hcm0uYzogQWRkIHN1cHBvcnQgZm9yIC1tc3RydWN0dXJlX3NpemVfYm91bmRhcnk9PG4+Cgljb21tYW5kIGxpbmUgb3B0aW9uLgoKClR1ZSBPY3QgMjcgMDg6NTY6NDYgMTk5OCAgQW5kcmV3IE1hY0xlb2QgIDxhbWFjbGVvZEBjeWdudXMuY29tPgoKCSogZHdhcmZvdXQuYyAoQVNNX09VVFBVVF9EV0FSRl9TVFJJTkdfTkVXTElORSk6IEFTTV9PVVRQVVRfRFdBUkZfU1RSSU5HCgloYXMgYmVlbiBjaGFuZ2VkIHRvIG5vdCBpbmNsdWRlIGEgbmV3bGluZS4gVXNlIHRoaXMgbWFjcm8gaW5zdGVhZC4KCShvdXRwdXRfZW51bWVyYWxfbGlzdCwgY29uc3RfdmFsdWVfYXR0cmlidXRlLCBuYW1lX2F0dHJpYnV0ZSwKCWNvbXBfZGlyX2F0dHJpYnV0ZSwgcHJvdG90eXBlZF9hdHRyaWJ1dGUsIHByb2R1Y2VyX2F0dHJpYnV0ZSwKCWlubGluZV9hdHRyaWJ1dGUsIHB1cmVfb3JfdmlydHVhbF9hdHRyaWJ1dGUsIG91dHB1dF9pbmhlcml0YW5jZV9kaWUsCglkd2FyZm91dF9maWxlX3Njb3BlX2RlY2wsIGdlbmVyYXRlX25ld19zZm5hbWVfZW50cnksCglnZW5lcmF0ZV9tYWNpbmZvX2VudHJ5LCBkd2FyZm91dF9pbml0LCBkd2FyZm91dF9maW5pc2gpOiBVc2UKCUFTTV9PVVRQVVRfRFdBUkZfU1RSSU5HX05FV0xJTkUgbWFjcm8uCgpNb24gT2N0IDI2IDEzOjM1OjAyIDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBjb21iaW5lLmMgKHN1YnN0KTogUHJvY2VzcyB0aGUgaW5wdXRzIHRvIGEgcGFyYWxsZWwgYXNtX29wZXJhbmRzCglvbmx5IG9uY2UuCgpNb24gT2N0IDI2IDEzOjMyOjMxIDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBzdG10LmMgKGV4cGFuZF9hc21fb3BlcmFuZHMpOiBBY2NlcHQgYD0nIG9yIGArJyBhdCBhbnkgcG9zaXRpb24uCgpNb24gT2N0IDI2IDEyOjUzOjE0IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHRtLnRleGkgKEFTTV9PVVRQVVRfTUFYX1NLSVBfQUxJR04pOiBEb2N1bWVudC4KCk1vbiBPY3QgMjYgMDA6MzY6NTggMTk5OCAgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpTdW4gT2N0IDI1IDIzOjM2OjUyIDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHN0bXQuYyAoZXhwYW5kX2ZpeHVwKTogU2V0IGZpeHVwLT5iZWZvcmVfanVtcCB0byBhCglOT1RFX0lOU05fREVMRVRFRCBpbnN0ZWFkIG9mIGEgTk9URV9JTlNOX0JMT0NLX0JFRy4KClN1biBPY3QgMjUgMTU6NDk6NTcgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogTWFrZWZpbGUuaW4gKHJlY29nLm8pOiBEZXBlbmQgb24gdG9wbGV2LmguCgkoaW5zbi1lbWl0Lm8pOiBEZXBlbmQgb24gcmVjb2cuaC4KCShpbnNuLXBlZXAubyk6IERlcGVuZCBvbiByZWNvZy5oIGFuZCBpbnNuLWNvbmZpZy5oLgoKCSogY29tYmluZS5jIChzaW1wbGlmeV9zZXQpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGBzY3JhdGNoZXMnLgoKCSogZmluYWwuYyAoZmluYWxfc2Nhbl9pbnNuKTogV3JhcCBkZWNsYXJhdGlvbiBvZiB2YXJpYWJsZXMgYHZsZW4nCglhbmQgYGlkeCcgaW4gbWFjcm8gY29uZGl0aW9uYWwgY29udHJvbGxpbmcgdGhlaXIgdXNlLgoKCSogZ2VuZW1pdC5jIChtYWluKTogTWFrZSB0aGUgZ2VuZXJhdGVkIG91dHB1dCBmaWxlIGluY2x1ZGUKCXJlY29nLmguICBEb24ndCBoYXZlIGl0IGRlY2xhcmUgYGluc25fb3BlcmFuZF9jb25zdHJhaW50Jywgc2luY2UKCXdlIGdldCBpdCBmcm9tIHJlY29nLmguCgoJKiBnZW5wZWVwLmMgKG1haW4pOiBNYWtlIHRoZSBnZW5lcmF0ZWQgb3V0cHV0IGZpbGUgaW5jbHVkZQoJaW5zbi1jb25maWcuaCBhbmQgcmVjb2cuaC4KCgkqIHJlY29nLmM6IEluY2x1ZGUgdG9wbGV2LmguCgkoZXh0cmFjdF9pbnNuKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBgcCcuCgoJKiByZWdjbGFzcy5jIChmaXhfcmVnaXN0ZXIpOiBBZGQgbWlzc2luZyBicmFjZXMgYXJvdW5kIGluaXRpYWxpemVyCglmb3IgYHdoYXRfb3B0aW9uJy4KCShhbGxvY2F0ZV9yZWdfaW5mbyk6IE1vdmUgdmFyaWFibGUgYGknIGludG8gdGhlIHNjb3BlIHdoZXJlIGl0IGlzCgl1c2VkLiAgQ2hhbmdlIGl0cyB0eXBlIHRvIGBzaXplX3QnLgoKU3VuIE9jdCAyNSAxMzoxMDoxNSAxOTk4ICBCZXJuZCBTY2htaWR0ICA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CgoJKiByZWxvYWQuYyAocHVzaF9yZWxvYWQpOiBXaGVuIG1lcmdpbmcgcmVsb2FkcywgbWFrZSBzdXJlCgl0aGF0IHJlbG9hZF9pbl9yZWcgYW5kIHJlbG9hZF9pbiBhcmUgZnJvbSB0aGUgc2FtZSByZWxvYWQgaW4KCWFsbCBjYXNlcy4KClN1biBPY3QgMjUgMTI6MDc6MDAgMTk5OCAgTXVtaXQgS2hhbiAgPGtoYW5AeHJheWxpdGgud2lzYy5lZHU+CgoJKiBpMzg2L2NydGRsbC5oIChDUFBfUFJFREVGSU5FUyk6IEZpeCB0eXBvLgoJKiBpMzg2L21pbmd3MzIuaCAoQ1BQX1BSRURFRklORVMpOiBMaWtld2lzZS4KCkZyaSBPY3QgMjMgMjM6NDI6MDMgMTk5OCAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogbG9vcC5jIChsb29wX2hhc190YWJsZWp1bXApOiBOZXcgdmFyaWFibGUuCgkocHJlc2Nhbl9sb29wKTogU2NhbiBmb3IgaXQuCgkoaW5zZXJ0X2JjdCk6IFJlcGxhY2UgZXhwbGljaXQgc2NhbiB3aXRoIHVzZSBvZiBpdC4KCSogcmVnY2xhc3MuYyAocmVnY2xhc3MpOiBSZXN0b3JlIGxvb3AgdmFyaWFibGUgai4KCShyZWNvcmRfcmVnX2NsYXNzZXMpOiBEZXRlcmluZSBvcF90eXBlcyBtb2RpZmllcnMgYW5kIGluaXRpYWxpemUKCWNsYXNzZXNbaV0gYmVmb3JlIG1hdGNoaW5nIGNvbnN0cmFpbnRzLiAgSGFuZGxlIG1hdGNoaW5nCgljb25zdHJhaW50cyA1LTkuCgpGcmkgT2N0IDIzIDEzOjU1OjQ4IDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIG0zMnIvbTMyci5jIChnZW5fc3BsaXRfbW92ZV9kb3VibGUpOiBDYWxsIGFsdGVyX3N1YnJlZy4gIERlbGV0ZQoJc3VicmVnIHN1cHBvcnQuCgpGcmkgT2N0IDIzIDE2OjE5OjI0IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIG1pcHMuaCAoRVhUUkFfU1BFQ1MpOiBBZGQgbWlzc2luZyBpbml0aWFsaXplcnMuCgpGcmkgT2N0IDIzIDE2OjA4OjM5IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIHNwYXJjLmggKEVYVFJBX1NQRUNTKTogQWRkIG1pc3NpbmcgaW5pdGlhbGl6ZXJzLgoJKHNwYXJjX2RlZmVyX2Nhc2VfdmVjdG9yKTogUHJvdmlkZSBhIHByb3RvdHlwZS4KCgkqIHN2cjQuaCAoQVNNX09VVFBVVF9BU0NJSSk6IENhc3QgU1RSSU5HX0xJTUlUIHRvIChsb25nKSB3aGVuCgljb21wYXJpbmcgaXQgdG8gdGhlIHJlc3VsdCBvZiBhIHBvaW50ZXIgc3VidHJhY3Rpb24uCgpGcmkgT2N0IDIzIDE1OjM0OjE0IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGFscGhhLmMgKG92ZXJyaWRlX29wdGlvbnMpOiBVc2UgSVNESUdJVCgpLCBub3QgaXNkaWdpdCgpLiAgQ2FzdAoJdGhlIGFyZ3VtZW50IHRvICh1bnNpZ25lZCBjaGFyKS4KCgkqIGFscGhhLmggKEVYVFJBX1NQRUNTKTogQWRkIG1pc3NpbmcgaW5pdGlhbGl6ZXJzLgoJKEFTTV9HRU5FUkFURV9JTlRFUk5BTF9MQUJFTCk6IEVuc3VyZSB0aGUgYXJndW1lbnQgbWF0Y2hlcyB0aGUKCWZvcm1hdCBzcGVjaWZpZXIuCgpGcmkgT2N0IDIzIDEzOjEyOjM1IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGZsb3cuYyAobGlmZV9hbmFseXNpc18xKTogRW5hYmxlICJyZXNjYW4iIGNvZGUgYWZ0ZXIgcmVsb2FkLgoJKHByb3BhZ2F0ZV9ibG9jayk6IERlbGV0ZSBkZWFkIGNvZGUgYWZ0ZXIgcmVsb2FkLgoKCSogc2NoZWQuYyAodXBkYXRlX2Zsb3dfaW5mbyk6IFJldmVydCBPY3QgMTksIDE5OTggY2hhbmdlLiAgQnJpbmdzCgliYWNrIE9jdCAxNSwgMTk5OCBjaGFuZ2UuCgkqIGhhaWZhLXNjaGVkLmMgKHVwZGF0ZV9mbG93X2luZm8pOiBMaWtld2lzZS4KCSogZmxvdy5jIChsaWZlX2FuYWx5c2lzXzEpOiBEZWxldGUgQ0xPQkJFUiBpbnNucyBhZnRlciByZWxvYWQuCgoJKiBtbjEwMjAwLm1kICh0cnVuY2F0ZWQgc2hpZnQpOiBBY2NlcHQgY29uc3RhbnQgaW5wdXRzIHRvby4KCkZyaSBPY3QgMjMgMDQ6MDY6NTcgMTk5OCAgUmljaGFyZCBFYXJuc2hhdyAgKHJlYXJuc2hhQGFybS5jb20pCgoJKiBtYWNobW9kZS5oIChtb2RlX21hc2tfYXJyYXkpOiBObyBsb25nZXIgY29uc3QuCgkqIHJ0bC5jIChpbml0X3J0bCk6IEZ1bGx5IGluaXRpYWxpemUgaXQgaWYgRVhUUkFfQ0NfTU9ERVMgZGVmaW5lZC4KCkZyaSBPY3QgMjMgMTE6MTk6MDYgMTk5OCAgTWFydGluIHYuIEz2d2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogZnJhbWUuYzogU29tZXdoYXQgZXhwbGFpbiBgRkRFJy4KCVN1Z2dlc3RlZCBieSBCcmVuZGFuIEtlaG9lCgpGcmkgT2N0IDIzIDAwOjU2OjExIDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGV4cHIuYyAocGVuZGluZ19jaGFpbik6IE1vdmUgdXAuCgkoc2F2ZV9leHByX3N0YXR1cyk6IERvIHNhdmUgcGVuZGluZ19jaGFpbi4KCShyZXN0b3JlX2V4cHJfc3RhdHVzKTogQW5kIHJlc3RvcmUgaXQuCgkqIGZ1bmN0aW9uLmggKHN0cnVjdCBmdW5jdGlvbik6IEFkZCBwZW5kaW5nX2NoYWluLgoKMTk5OC0xMC0yMyAgSGVybWFuIEEuSi4gdGVuIEJydWdnZSAgPEhhai5UZW4uQnJ1Z2dlQG5ldC5IQ0Mubmw+CgoJKiByZW9yZy5jIChyZWxheF9kZWxheV9zbG90cyk6IEZpeGVkIHRlc3QgZm9yIG1vc3RseV90cnVlX2p1bXAuIFRoZQoJZGlkIG5vdCBtYXRjaCB0aGUgY29kZS4KCkZyaSBPY3QgMjMgMDA6MDc6MDEgMTk5OCAgQmVybmQgU2NobWlkdCAgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgoKCSogcmVnY2xhc3MuYyAocmVnY2xhc3MpOiBCcmVhayBvdXQgc29tZSBjb2RlIGludG8gbmV3IGZ1bmN0aW9uCglzY2FuX29uZV9pbnNuLCBhbmQgaW50byByZWdjbGFzc19pbml0LgoJKGluaXRfY29zdCk6IE5ldyBzdGF0aWMgdmFyaWFibGUsIG1vdmVkIG91dCBvZiByZWdjbGFzcy4KCShyZWdjbGFzc19pbml0KTogSW5pdGlhbGl6ZSBpdCBoZXJlLCBub3QgaW4gLgoJKHNjYW5fb25lX2luc24pOiBOZXcgc3RhdGljIGZ1bmN0aW9uLCBicm9rZW4gb3V0IG9mIHJlZ2NsYXNzLgoJKiByZWNvZy5jIChhcHBseV9jaGFuZ2VfZ3JvdXApOiBCcmVhayBvdXQgc29tZSBjb2RlIGludG8gbmV3CglmdW5jdGlvbiBpbnNuX2ludmFsaWRfcC4KCShpbnNuX2ludmFsaWRfcCk6IE5ldyBzdGF0aWMgZm4sIGJyb2tlbiBvdXQgb2YgYXBwbHlfY2hhbmdlX2dyb3VwLgoKVGh1IE9jdCAyMiAyMjozNDo0MiAxOTk4ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiByZWxvYWQxLmMgKHJlbG9hZF9hc19uZWVkZWQpOiBXaGVuIHJld3JpdGUgUE9TVF9JTkMsIHZlcmlmeQoJcmVnX3JlbG9hZGVkX2NvbnRlbnRzIG1hdGNoZXMgaW5jcmVtZW50ZWQgcHNldWRvLgoKCSogdjg1MC92ODUwLmMgKHY4NTBfcmVvcmcpOiBDYWxsIGFsdGVyX3N1YnJlZy4gIERlbGV0ZSBzdWJyZWcgc3VwcG9ydC4KCkZyaSBPY3QgMjMgMTE6MTE6NTYgMTk5OCAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogcnRsLmRlZiAoUE9TVF9NT0RJRlksIFBSRV9NT0RJRlkpOiBOZXcgZ2VuZXJhbGl6ZWQgb3BlcmF0b3JzIGZvcgoJYWRkcmVzc2luZyBtb2RlcyB3aXRoIHNpZGUgZWZmZWN0cy4gIFRoZXNlIGFyZSBjdXJyZW50bHkKCXBsYWNlaG9sZGVycyBmb3IgdGhlIEM0eCB0YXJnZXQuCgpUaHUgT2N0IDIyIDE2OjQ2OjM1IDE5OTggIEJlcm5kIFNjaG1pZHQgIDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCgkqIGxvb3AuYyAoZXhwcmVzc19mcm9tKTogTWFrZSBzdXJlIHRoYXQgd2hlbiBnZW5lcmF0aW5nIGEgUExVUyBvZgoJYSBQTFVTLCBhbnkgY29uc3RhbnQgZXhwcmVzc2lvbiBhcHBlYXJzIG9uIHRoZSBvdXRlcm1vc3QgUExVUy4KClRodSBPY3QgMjIgMTU6NDY6MjMgMTk5OCAgUGVyIEJvdGhuZXIgIChib3RobmVyQGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoZGlzdGRpci1jdnMsIGRpc3RkaXItc3RhcnQpOiBDbGVhbiB1cCBzbyBpdAoJd29ya3MgaWYgIiQoc3JjZGlyKSIgIT0gIi4iLgoKV2VkIE9jdCAyMSAxOToyMzo1OSAxOTk4ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBleHBtZWQuYyAoc3RvcmVfYml0X2ZpZWxkKTogSWYgbmVlZCB0byBhZGQgYSBTVUJSRUcsIHRoZW4gcmVtb3ZlCglleGlzdGluZyBTVUJSRUcgaWYgd2UgY2FuLCBvdGhlcndpc2UgYWJvcnQuCgpXZWQgT2N0IDIxIDA5OjU4OjUxIDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBjLWNvbW1vbi5jIChjX2FwcGx5X3R5cGVfcXVhbHNfdG9fZGVjbCk6IERvbid0IGNyYXNoIHdoZW4KCWByZXN0cmljdCcgaXMgYXBwbGllZCB0byBhIG5vbi1wb2ludGVyIHZhcmlhYmxlLgoKV2VkIE9jdCAyMSAwOToxODo1OCAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogaW52b2tlLnRleGk6IERvY3VtZW50IC1mbGFuZy1pc29jOXguCgoJKiBNYWtlZmlsZS5pbiAoT0JKUyk6IEFkZCBzcGxheS10cmVlLm8uCgkoYy1jb21tb24ubyk6IERlcGVuZCBvbiBydGwuaC4KCShzcGxheS10cmVlLm8pOiBMaXN0IGRlcGVuZGVuY2llcyBhbmQgcHJvdmlkZSBidWlsZCBydWxlLgoKCSogcnRsLmggKHJlY29yZF9hbGlhc19zdWJzZXQpOiBOZXcgZnVuY3Rpb24uCgkqIGFsaWFzLmM6IEluY2x1ZGUgc3BsYXktdHJlZS5oLgoJKGFsaWFzX3NldF9lbnRyeSk6IE5ldyB0eXBlLgoJKENIRUNLX0FMSUFTX1NFVFNfRk9SX0NPTlNJU1RFTkNZKTogUmVtb3ZlLgoJKERJRkZFUkVOVF9BTElBU19TRVRTX1ApOiBVc2UgbWVtX2luX2Rpc2pvaW50X2FsaWFzX3NldHNfcC4KCShtZW1zX2luX2Rpc2pvaW5fYWxpYXNfc2V0c19wKTogTmV3IGZ1bmN0aW9uLgoJKGFsaWFzX3NldF9jb21wYXJlKTogTGlrZXdpc2UuCgkoaW5zZXJ0X3N1YnNldF9jaGlsZHJlbik6IExpa2V3aXNlLgoJKGdldF9hbGlhc19zZXRfZW50cnkpOiBMaWtld2lzZS4KCgkqIHRyZWUuaCAoVFlQRV9SRVNUUklDVCk6IE5ldyBtYWNyby4KCShUWVBFX1VOUVVBTElGSUVEKTogTmV3IG1hbmlmZXN0IGNvbnN0YW50LgoJKFRZUEVfUVVBTF9DT05TVCk6IExpa2V3aXNlLgoJKFRZUEVfUVVBTF9WT0xBVElMRSk6IExpa2V3aXNlLgoJKFRZUEVfUVVBTF9SRVNUUklDVCk6IExpa2V3aXNlLgoJKHRyZWVfdHlwZSk6IEFkZCByZXN0cmljdF9mbGFnLiAgUmVkdWNlIGNvdW50IG9mIGZyZWUgYml0cy4KCShERUNMX1BPSU5URVJfQUxJQVNfU0VUKTogTmV3IG1hY3JvLgoJKERFQ0xfUE9JTlRFUl9BTElBU19TRVRfS05PV05fUCk6IExpa2V3aXNlLgoJKHRyZWVfZGVjbCk6IEFkZCBwb2ludGVyX2FsaWFzX3NldC4KCShidWlsZF9xdWFsaWZpZWRfdHlwZSk6IE5ldyBmdW5jdGlvbi4KCShidWlsZF90eXBlX3ZhcmlhbnQpOiBEZWZpbmUgaW4gdGVybXMgb2YgYnVpbGRfcXVhbGlmaWVkX3R5cGUuCgkqIHRyZWUuYyAoc2V0X3R5cGVfcXVhbHMpOiBOZXcgZnVuY3Rpb24uCgkobWFrZV9ub2RlKTogSW5pdGlhbGl6ZSBERUNMX1BPSU5URVJfQUxJQVNfU0VULgoJKGJ1aWxkX3R5cGVfYXR0cmlidXRlX3ZhcmlhbnQpOiBVc2UgYnVpbGRfcXVhbGlmaWVkX3R5cGUgYW5kCglzZXRfdHlwZV9xdWFscy4KCShidWlsZF90eXBlX3ZhcmlhbnQpOiBSZW5hbWUsIGFuZCBtb2RpZnksIHRvIGJlY29tZS4uLgoJKGJ1aWxkX3F1YWxpZmllZF90eXBlKTogTmV3IGZ1bmN0aW9uLgoJKGJ1aWxkX2NvbXBsZXhfdHlwZSk6IFVzZSBzZXRfdHlwZV9xdWFscy4KCgkqIGMtdHJlZS5oIChDX1RZUEVfT0JKRUNUX1ApOiBOZXcgbWFjcm8uCgkoQ19UWVBFX0ZVTkNUSU9OX1ApOiBMaWtld2lzZS4KCShDX1RZUEVfSU5DT01QTEVURV9QKTogTGlrZXdpc2UuCgkoQ19UWVBFX09CSkVDVF9PUl9JTkNPTVBMRVRFX1ApOiBMaWtld2lzZS4KCShjX2FwcGx5X3R5cGVfcXVhbHNfdG9fZGVjbCk6IE5ldyBmdW5jdGlvbi4KCShjX2J1aWxkX3F1YWxpZmllZF90eXBlKTogTmV3IGZ1bmN0aW9uLgoJKGNfYnVpbGRfdHlwZV92YXJpYW50KTogRGVmaW5lIGluIHRlcm1zIG9mIGNfYnVpbGRfcXVhbGlmaWVkX3R5cGUuCgkoZmxhZ19pc29jOXgpOiBEZWNsYXJlLgoJKiBjLXR5cGVjay5jIChxdWFsaWZ5X3R5cGUpOiBVc2UgY19idWlsZF9xdWFsaWZpZWRfdHlwZS4KCShjb21tb25fdHlwZSk6IENoYW5nZSB0byB1c2UgVFlQRV9RVUFMUy4KCShjb21wdHlwZXMpOiBMaWtld2lzZS4KCShjb252ZXJ0X2Zvcl9hc3NpZ25tZW50KTogTGlrZXdpc2UuCgkqIGMtYXV4LWluZm8uYyAoZ2VuX3R5cGUpOiBMaWtld2lzZS4gIERlYWwgd2l0aCBgcmVzdHJpY3QnLgoJKiBjLWRlY2wuYyAoZmxhZ19pc29jOXgpOiBEZWZpbmUuCgkoY19kZWNvZGVfb3B0aW9uKTogSGFuZGxlIC1mbGFuZy1pc29jOXguCgkoZ3Jva2RlY2xhcmF0b3IpOiBVcGRhdGUgdG8gaGFuZGxlIHJlc3RyaWN0LiAgVXNlIFRZUEVfUVVBTFMsCgljX2J1aWxkX3F1YWxpZmllZF90eXBlLCBldGMuICBVc2UgY19hcHBseV90eXBlX3F1YWxzX3RvX2RlY2wuCgkqIGMtbGV4LmMgKGluaXRfbGV4KTogRGVhbCB3aXRoIHJlc3RyaWN0LgoJKGluaXRfbGV4KTogRG9uJ3QgdHJlYXQgcmVzdHJpY3QgYXMgYSByZXNlcnZlZCB3b3JkIGluCgktdHJhZGl0aW9uYWwgbW9kZSwgb3Igd2l0aG91dCAtZmxhbmctaXNvYzl4LgoJKiBjLWxleC5oIChyaWQpOiBBZGQgUklEX1JFU1RSSUNULgoJKiBjLXBhcnNlLmdwZXJmIChyZXN0cmljdCwgX19yZXN0cmljdCwgX19yZXN0cmljdF9fKTogTWFrZQoJZXF1aXZhbGVudCB0byBSSURfUkVTVFJJQ1QuCgkqIGMtcGFyc2UuaW4gKFRZUEVfUVVBTCk6IFVwZGF0ZSBjb21tZW50LgoJKiBjLWNvbW1vbi5jOiBJbmNsdWRlIHJ0bC5oLgoJKGNfZmluZF9iYXNlX2RlY2wpOiBOZXcgZnVuY3Rpb24uCgkoY19idWlsZF90eXBlX3ZhcmlhbnQpOiBSZW5hbWUsIGFuZCBtb2RpZnksIHRvIGJlY29tZSAuLi4KCShjX2J1aWxkX3F1YWxpZmllZF90eXBlKTogTmV3IGZ1bmN0aW9uLgoJKGNfYXBwbHlfdHlwZV9xdWFsc190b19kZWNsKTogTGlrZXdpc2UuCgkoY19nZXRfYWxpYXNfc2V0KTogRm9yIElORElSRUNUX1JFRnMsIGNoZWNrIHRvIHNlZSBpZiB3ZSBjYW4gZmluZAoJYSBwYXJ0aWN1bGFyIGFsaWFzIHNldCBmb3IgdGhlIHJlZmVyZW5jZS4KCSogdG9wbGV2LmMgKGRvY3VtZW50ZWRfbGFuZ19vcHRpb25zKTogQWRkIC1mbGFuZy1pc29jOXguCgpXZWQgT2N0IDIxIDA5OjE1OjA2IDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvYXJtL2FybS5oIChUQVJHRVRfU1dJVENIRVMpOiBEb2N1bWVudCBhcm0gc3BlY2lmaWMKCWNvbW1hbmQgbGluZSBzd2l0Y2hlcy4KClR1ZSBPY3QgMjAgMTA6MDQ6NTEgMTk5OCAgR3JhaGFtICA8Z3JhaGFtc0ByY3AuY28udWs+CgoJKiByZWxvYWQuYyAobG9jX21lbnRpb25lZF9pbl9wKTogQWRkIG1pc3NpbmcgYnJhY2VzIHRvIGJpbmQKCWVsc2UgdG8gY29ycmVjdCBpZi4KCk1vbiBPY3QgMTkgMTY6MzQ6MDUgMTk5OCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogZ2NjLmMgKG9wdGlvbl9tYXApOiBBZGRlZCAtLWNsYXNzcGF0aCBhbmQgLS1DTEFTU1BBVEguCgpUdWUgT2N0IDIwIDEwOjU5OjAyIDE5OTggIEdhdmluIFJvbWlnLUtvY2ggIDxnYXZpbkBjeWdudXMuY29tPgoKCSogcmVnY2xhc3MuYyAoZml4X3JlZ2lzdGVyKTogQWRkIGVycm9yIG1lc3NhZ2UuCgkqIGludm9rZS50ZXhpICgtZmNhbGwtdXNlZC1SRUcsLWZjYWxsLXNhdmVkLVJFRyk6IE5vdGUgdGhlCgkgIG5ldyBlcnJvciBtZXNzYWdlLgoKVHVlIE9jdCAyMCAxMDoxMjoxNyAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjLWRlY2wuYyAod2Fybl9taXNzaW5nX25vcmV0dXJuKTogTmV3IGdsb2JhbCB2YXJpYWJsZS4KCShjX2RlY29kZV9vcHRpb24pOiBDaGVjayBmb3IgbmV3IGZsYWdzIC1Xe25vLX1taXNzaW5nLW5vcmV0dXJuLgoJKGZpbmlzaF9mdW5jdGlvbik6IEltcGxlbWVudCBtaXNzaW5nIG5vcmV0dXJuIHdhcm5pbmcuCgoJKiBjLXRyZWUuaCAod2Fybl9taXNzaW5nX25vcmV0dXJuKTogRGVjbGFyZSBleHRlcm4uCgoJKiBpbnZva2UudGV4aTogRG9jdW1lbnQgbmV3IGZsYWdzLgoKCSogdG9wbGV2LmMgKGRvY3VtZW50ZWRfbGFuZ19vcHRpb25zKTogQWRkIGRlc2NyaXB0aW9uLgoKVHVlIE9jdCAyMCAyMjoxNjoxMSAxOTk4ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWcvYzR4L2M0eC5jIChjNHhfcGFyYWxsZWxfcHJvY2Vzcyk6IERpc2FibGUgdW50aWwgQkNUCglsb29wIG9wdGltaXphdGlvbiBzdGFibGUgZm9yIHRoZSBDNHguCgkoYzR4X3JwdGJfaW5mb190LCBjNHhfZHVtcCwgYzR4X3JwdGJfaW5fcmFuZ2UsIGM0eF9ycHRiX3VuanVtcGVkX2xvb3AsCgljNHhfcnB0Yl9maW5kX2NvbXBfYW5kX2p1bXAsIGM0eF9ycHRiX2xvb3BfaW5mb19nZXQsCgljNHhfcnB0Yl9lbWl0X2luaXQsIGM0eF9ycHRiX3Byb2Nlc3MpOiBEZWxldGVkIChzdXBlcnNlZGVkIGJ5IEJDVAoJbG9vcCBvcHRpbWl6YXRpb24pLgoJKGM0eF9hZGRyZXNzX2NvbmZsaWN0KTogQmUgbW9yZSBwYXJhbm9pZCB3aGVuIHBhY2tpbmcgYSB2b2xhdGlsZQoJbWVtcmVmIGluIGEgcGFyYWxsZWwgbG9hZC9zdG9yZS4KClR1ZSBPY3QgMjAgMjE6NTY6MDUgMTk5OCAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHgubWQgKHJlcGVhdF9ibG9ja190b3AsIHJlcGVhdF9ibG9ja19lbmQsCglyZXBlYXRfYmxvY2tfZmlsbGVyKTogRGVsZXRlZC4KCSgqYXNobHFpM19zZXQsICphc2hycWkzX2NvbnN0X3NldCwgKmFzaHJxaTNfbm9uY29uc3RfY2xvYmJlcik6CglDb25kaXRpb24gY29kZSBub3Qgc2V0IGlmIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGZyb20gJ2MnIGNsYXNzLgoJKCpzdWJicWkzX2NhcnJ5X2Nsb2JiZXIpOiBGaXggdHlwby4KCjE5OTgtMTAtMTggIEhlcm1hbiBBLkouIHRlbiBCcnVnZ2UgIDxIYWouVGVuLkJydWdnZUBuZXQuSENDLm5sPgoKCSogcmVvcmcuYyAoc3RlYWxfZGVsYXlfbGlzdF9mcm9tX3RhcmdldCk6IENoZWNrIGZvciBpbnNucyB0aGF0Cgltb2RpZnkgdGhlIGNvbmRpdGlvbiBjb2RlcyBhbmQgZWZmZWN0IHRoZSBkaXJlY3Rpb24gb2YgdGhlIGp1bXAKCWluIHRoZSBzZXF1ZW5jZS4KClNhdCBPY3QgMTcgMTM6MDk6MDkgMTk5OCAgR3JhaGFtICA8Z3JhaGFtc0ByY3AuY28udWs+CgoJKiBmdW5jdGlvbi5jIChwdXJnZV9hZGRyZXNzb2ZfMSk6IFJlcGxhY2UgY2FsbCB0bwoJZW1pdF9pbnNuc19iZWZvcmUoKSB3aXRoIGVtaXRfaW5zbl9iZWZvcmUoKS4KCk1vbiBPY3QgMTkgMTk6MzQ6MDMgMTk5OCAgTWlrZSBTdHVtcCAgPG1yc0B3cnMuY29tPgoKCSogbGliZ2NjMi5jIChfX3B1cmVfdmlydHVhbCk6IENhbGwgX190ZXJtaW5hdGUgaW5zdGVhZCBvZiBfZXhpdC4KCk1vbiBPY3QgMTkgMTM6MjY6MjQgMTk5OCAgQmVybmQgU2NobWlkdCAgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgoKCSoganVtcC5jIChzZXRzX2NjMF9wKTogQ29tcGlsZSBvbmx5IGlmIEhBVkVfY2MwLgoKTW9uIE9jdCAxOSAxMTo0MDo1NiAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBnY3NlLmMgKGNvbXB1dGVfaGFzaF90YWJsZSk6IENvcnJlY3RseSBpZGVudGlmeSBoYXJkIHJlZ3Mgd2hpY2ggYXJlCgljbG9iYmVyZWQgYWNyb3NzIGNhbGxzLgoKCSogbG9vcC5jIChzY2FuX2xvb3ApOiBCZSBtb3JlIHNlbGVjdGl2ZSBhYm91dCB3aGF0IGludmFyaWFudHMgYXJlCgltb3ZlZCBvdXQgb2YgYSBsb29wLgoKTW9uIE9jdCAxOSAxMDo0Njo1OCAxOTk4ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KCk1vbiBPY3QgMTkgMTE6NDA6NTYgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbGliZ2NjMi5jIChlaF9jb250ZXh0X3N0YXRpYyk6IERvIG5vdCBjYWxsIG1hbGxvYyB0byBhbGxvY2F0ZSB0aGUKCXN0YXRpYyBlaF9jb250ZXh0IHN0cnVjdHVyZS4KCk1vbiBPY3QgMTkgMTA6NDU6NDAgMTk5OCAgQmVybmQgU2NobWlkdCAgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgoKCSogY29tYmluZS5jIChyZWNvZ19mb3JfY29tYmluZSk6IExvc2UgUEFEREVEX1NDUkFUQ0hFUyBhcmcuICBBbGwKCWNhbGxlcnMgY2hhbmdlZC4KCSh0cnlfY29tYmluZSk6IERvbid0IHVwZGF0ZSBtYXhfc2NyYXRjaC4KCSogZmxvdy5jIChtYXhfc2NyYXRjaCwgbnVtX3NjcmF0Y2gpOiBEZWxldGUgdmFyaWFibGVzLgoJKGxpZmVfYW5hbHlzaXNfMSk6IERvbid0IGluaXRpYWxpemUgbWF4X3NjcmF0Y2guCgkocHJvcGFnYXRlX2Jsb2NrKTogRG9uJ3QgdXBkYXRlIG1heF9zY3JhdGNoLgoJKG1hcmtfc2V0XzEpOiBEb24ndCBpbmNyZW1lbnQgbnVtX3NjcmF0Y2guCgkqIHJlZ3MuaCAobWF4X3NjcmF0Y2gpOiBEZWxldGUgZGVjbGFyYXRpb24uCgpNb24gT2N0IDE5IDEwOjI4OjE1IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHJlbG9hZDEuYyAocmVsb2FkX3JlZ19mcmVlX2JlZm9yZV9wKTogSGFjay4gIFJldHVybiAwIGlmIEVRVUlWCglpcyBub256ZXJvLiAgVGhpcyBpcyB0ZW1wb3JhcnkhCgoJKiBzY2hlZC5jICh1cGRhdGVfZmxvd19pbmZvKTogSGFuZGxlIGRlYXRoIG5vdGVzIG1hZGUgaW52YWxpZCBieQoJaW5zdHJ1Y3Rpb24gc3BsaXR0aW5nLiAgUGFydGlhbGx5IHJldmVydHMgT2N0IDE1LCAxOTk4IHBhdGNoLgoJKiBoYWlmYS1zY2hlZC5jICh1cGRhdGVfZmxvd19pbmZvKTogTGlrZXdpc2UuCgpTdW4gT2N0IDE4IDE3OjMxOjI2IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGZ1bmN0aW9uLmMgKHVuaW5pdGlhbGl6ZWRfdmFyc193YXJuaW5nKTogRG8gbm90IHdhcm4gZm9yIGEgVkFSX0RFQ0wKCWlmIGl0IGhhcyBhIG5vbnplcm8gREVDTF9JTklUSUFMLgoKU2F0IE9jdCAxNyAyMzoxODowOCAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBNYWtlZmlsZS5pbiAoZmxvdy5vKTogRGVwZW5kIG9uIHJlY29nLmguCgoJKiBjcHBsaWIuaCAoZGlyZWN0aXZlX3RhYmxlKTogQWRkIG1pc3NpbmcgaW5pdGlhbGl6aWVycy4KCShmaW5jbHVkZSk6IENoYW5nZSB0eXBlIG9mIHZhcmlhYmxlIGBic2l6ZScgdG8gc2l6ZV90LgoKCSogY3NlLmMgKHJ0eF9jb3N0KTogTWFyayBwYXJhbWV0ZXIgYG91dGVyX2NvZGUnIHdpdGggQVRUUklCVVRFX1VOVVNFRC4KCgkqIGR3YXJmb3V0LmggKGR3YXJmb3V0X2xhYmVsKTogV3JhcCBwcm90b3R5cGUgaW4gbWFjcm8gUlRYX0NPREUuCgoJKiBmaXgtaGVhZGVyLmMgKGxvb2t1cF9zdGRfcHJvdG8pOiBDYXN0IHRoZSByZXN1bHQgb2YgYHN0cmxlbicgdG8KCWBpbnQnIHdoZW4gY29tcGFyaW5nIGFnYWluc3Qgb25lLgoJKGNwcF9maWxlX2xpbmVfZm9yX21lc3NhZ2UpOiBNYXJrIHBhcmFtZXRlciBgcGZpbGUnIHdpdGgKCUFUVFJJQlVURV9VTlVTRUQuCgkoY3BwX2ZhdGFsKTogTWFyayBwYXJhbWV0ZXIgYHBmaWxlJyB3aXRoIEFUVFJJQlVURV9VTlVTRUQuCgoJKiBmbG93LmM6IEluY2x1ZGUgcmVjb2cuaC4KCShzYml0bWFwX2NvcHkpOiBDYXN0IGFyZ3VtZW50cyAxICYgMiBvZiBgYmNvcHknIHRvIChQVFIpLgoKCSogZnVuY3Rpb24uYyAodGhyZWFkX3Byb2xvZ3VlX2FuZF9lcGlsb2d1ZV9pbnNucyk6IE1hcmsgcGFyYW1ldGVyCglgZicgd2l0aCBBVFRSSUJVVEVfVU5VU0VELgoJKHJlcG9zaXRpb25fcHJvbG9ndWVfYW5kX2VwaWxvZ3VlX25vdGVzKTogTGlrZXdpc2UuCgoJKiBnZW5vcGluaXQuYyAoZ2VuX2luc24pOiBDYXN0IGFyZ3VtZW50IG9mIGN0eXBlIGZ1bmN0aW9ucyB0bwoJYHVuc2lnbmVkIGNoYXInLgoKCSogaGFpZmEtc2NoZWQuYzogSW5jbHVkZSByZWNvZy5oLgoJKGJsb2NrYWdlX3JhbmdlKTogQ2FzdCByZXN1bHQgb2YgVU5JVF9CTE9DS0VEIG1hY3JvIHRvIChpbnQpIHdoZW4KCWNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCgkqIGxpYmdjYzIuYSAoX190aHJvdyk6IFJldmVydCBBVFRSSUJVVEVfVU5VU0VEIGNoYW5nZSBmb3Igbm93LgoKCSogbWlwcy10ZmlsZS5jIChwYXJzZV9lbmQpOiBDYXN0IHRoZSBhcmd1bWVudCBvZiBjdHlwZSBmdW5jdGlvbiB0bwoJYHVuc2lnbmVkIGNoYXInLgoJKHBhcnNlX2VudCk6IExpa2V3aXNlLgoJKHBhcnNlX2lucHV0KTogTGlrZXdpc2UuCgoJKiBvcHRhYnMuYyAoaW5pdF9saWJmdW5jcyk6IExpa2V3aXNlLgoKCSogcHJvdG9pemUuYyAoZmluZF9yaWdodG1vc3RfZm9ybWFsc19saXN0KTogTGlrZXdpc2UuCgoJKiByZWNvZy5oIChjb25zdF9kb3VibGVfb3BlcmFuZCk6IEZpeCB0eXBvIGluIHByb3RvdHlwZS4KCgkqIHRsaW5rLmMgKHNjYW5fbGlua2VyX291dHB1dCk6IENhc3QgdGhlIGFyZ3VtZW50IG9mIGN0eXBlCglmdW5jdGlvbiB0byBgdW5zaWduZWQgY2hhcicuCgoJKiB0b3BsZXYuYyAoY2hlY2tfbGFuZ19vcHRpb24pOiBDYXN0IHRoZSByZXN1bHQgb2YgYHN0cmxlbicgdG8KCWBpbnQnIHdoZW4gY29tcGFyaW5nIGFnYWluc3Qgb25lLgoKU2F0IE9jdCAxNyAxMzowOTowOSAxOTk4ICBHcmFoYW0gIDxncmFoYW1zQHJjcC5jby51az4KCgkqIGdjc2UuYyAoZHVtcF9jdWlkX3RhYmxlKTogQ29ycmVjdCB0eXBvLgoKU2F0IE9jdCAxNyAxMTowMjo0NyAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogdG9wbGV2LmMgKGRpc3BsYXlfaGVscCk6IFByZXBlbmQgJy1tJyB0byB0YXJnZXQgc3BlY2lmaWMKCW9wdGlvbnMuCgkoY2hlY2tfbGFuZ19vcHRpb24pOiBJZ25vcmUgdGV4dCBhZnRlciBlbmQgb2YgZmlyc3Qgd29yZCBvZiBhCglsYW5ndWFnZSBzcGVjaWZpYyBvcHRpb24uCgpTYXQgT2N0IDE3IDAyOjI2OjAzIDE5OTggIEJlcm5kIFNjaG1pZHQgIDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCgkqIHJlbG9hZDEuYyAocmVnX3VzZWRfYnlfcHNldWRvKTogTmV3IHN0YXRpYyB2YXJpYWJsZS4KCShjaG9vc2VfcmVsb2FkX3JlZ3MpOiBJbml0aWFsaXplIGl0LgoJVXNlIGl0IGluc3RlYWQgb2YgdGVzdGluZyBzcGlsbF9yZWdfb3JkZXIgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYQoJcHNldWRvIGlzIGxpdmUgaW4gYSBoYXJkIHJlZ2lzdGVyIGFjcm9zcyB0aGUgY3VycmVudCBpbnNuLgoJRml4IGEgdHlwbyBpbiBhIHJlZmVyZW5jZSB0byByZWxvYWRfcmVnX3J0eC4KCgkqIGZsb3cuYyAocHJvcGFnYXRlX2Jsb2NrKTogUmVwbGFjZSBjb2RlIHRoYXQgY29tcHV0ZXMgYW5kIHVzZXMKCXJlZ3Nfc29tZXRpbWVzX2xpdmUgd2l0aCBzaW1wbGVyIGNvZGUgdGhhdCBqdXN0IHdhbGtzIHRoZSBzZXQgb2YKCWN1cnJlbnRseSBsaXZlIHJlZ2lzdGVycy4KCgkqIE1ha2VmaWxlLmluIChpbnNuLWV4dHJhY3Qubyk6IEZpeCBkZXBlbmRlbmNpZXMuCgkqIGdlbmV4dHJhY3QuYyAobWFpbik6IEdlbmVyYXRlIGluY2x1ZGVzIGZvciBpbnNuLWNvbmZpZy5oIGFuZAoJcmVjb2cuaC4KCURlbGV0ZSBnZW5lcmF0aW9uIG9mIGRlY2xhcmF0aW9ucyB3aGljaCBhcmUgbm93IGluIHJlY29nLmguCgkqIGdlbnJlY29nLmMgKG1haW4pOiBEZWxldGUgZ2VuZXJhdGlvbiBvZiBkZWZpbml0aW9ucyB3aGljaCBhcmUKCW5vdyBpbiByZWNvZy5jLgoJKiBsb2NhbC1hbGxvYy5jIChibG9ja19hbGxvYyk6IFVzZSBleHRyYWN0X2luc24gYW5kIHRoZSB2YXJpYWJsZXMKCWl0IHNldHMgdXAgaW5zdGVhZCBvZiBsb29raW5nIHVwIHZhbHVlcyBieSBpbnNuX2NvZGUuCgkqIHJlY29nLmMgKHJlY29nX29wZXJhbmQsIHJlY29nX29wZXJhbmRfbG9jLCByZWNvZ19kdXBfbG9jLAoJcmVjb2dfZHVwX251bSk6IERlZmluZSBoZXJlIGluc3RlYWQgb2YgZ2VuZXJhdGluZyB0aGUgZGVmaW5pdGlvbiBpbgoJZ2VucmVjb2cuYy4KCShyZWNvZ19uX29wZXJhbmRzLCByZWNvZ19uX2R1cHMsIHJlY29nX25fYWx0ZXJuYXRpdmVzLAoJcmVjb2dfb3BlcmFuZF9tb2RlLCByZWNvZ19jb25zdHJhaW50cywgcmVjb2dfb3BlcmFuZF9hZGRyZXNzX3ApOgoJTmV3IHZhcmlhYmxlcy4KCShleHRyYWN0X2luc24pOiBOZXcgZnVuY3Rpb24uCgkqIHJlY29nLmggKGV4dHJhY3RfaW5zbik6IERlY2xhcmUgZnVuY3Rpb24uCgkod2hpY2hfYWx0ZXJuYXRpdmUsIHJlY29nX25fb3BlcmFuZHMsIHJlY29nX25fZHVwcywKCXJlY29nX25fYWx0ZXJuYXRpdmVzLCByZWNvZ19vcGVyYW5kX21vZGUsIHJlY29nX2NvbnN0cmFpbnRzLAoJcmVjb2dfb3BlcmFuZF9hZGRyZXNzX3ApOiBEZWNsYXJlIHZhcmlhYmxlcy4KCSogcmVnY2xhc3MuYyAobl9vY2N1cnJlbmNlcyk6IE5ldyBzdGF0aWMgZnVuY3Rpb24uCgkqIHJlbG9hZC5jIChuX29jY3VycmVuY2VzKTogRGVsZXRlIGZ1bmN0aW9uLgoJKGZpbmRfcmVsb2Fkcyk6IFVzZSBleHRyYWN0X2luc24uCgkqIHJlbG9hZC5oIChuX29jY3VycmVuY2VzKTogRGVsZXRlIGRlY2xhcmF0aW9uLgoKU2F0IE9jdCAxNyAwMToxNzo1MSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiByZWxvYWQxLmMgKHJlbG9hZF9hc19uZWVkZWQpOiBGaXggdGVzdCBmb3Igd2hlbiB0byBjYWxsCgl1cGRhdGVfZWxpbWluYWJsZV9vZmZzZXRzLgoKRnJpIE9jdCAxNiAyMDo0MDo1MCAxOTk4ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCUZpeCBjb25zaXN0ZW5jeSBwcm9ibGVtcyB3aXRoIHJlZ19lcXVpdl97bWVtLGFkZHJlc3N9OwoJSW1wcm92ZSByZWxvYWQgaW5oZXJpdGFuY2U7CgoJKiByZWxvYWQuYyAocmVsb2FkX291dF9yZWcpOiBOZXcgdmFyaWFibGUuCgkobG9jX21lbnRpb25lZF9pbl9wLCByZW1vdmVfYWRkcmVzc19yZXBsYWNlbWVudHMpOiBOZXcgZnVuY3Rpb25zLgoJKHJlbW92ZV9yZXBsYWNlbWVudHMpOiBEZWxldGVkLgoJKHB1c2hfcmVsb2FkKTogU2V0IHJlbG9hZF9vdXRfcmVnW2ldLgoJV2hlbiBtZXJnaW5nLCBhbHNvIHNldCByZWxvYWRfe2luLG91dH1fcmVnW2ldLCBhbmQgcmVtb3ZlCglkdXBsaWNhdGUgYWRkcmVzcyByZWxvYWRzLgoJKGNvbWJpbmVfcmVsb2Fkcyk6IENvcHkgcmVsb2FkX291dF9yZWdbaV0uCgkoZmluZF9yZWxvYWRzKTogRG8gbWFrZV9tZW1sb2Mgc3Vic3RpdHV0aW9uIGFsc28gd2hlbgoJcmVnX2VxdWl2X21lbW9yeV9sb2NbcmVnbm9dIGFuZCBudW1fbm90X2F0X2luaXRpYWxfb2Zmc2V0CglhcmUgYm90aCBub256ZXJvLgoJSW5jbHVkZSAqcmVjb2dfb3BlcmFuZF9sb2MgaW4gY29tbXV0YXRpdml0eSBvcGVyYW5kIGNoYW5nZXMuCglHZW5lcmF0ZSBvcHRpb25hbCBvdXRwdXQgcmVsb2Fkcy4KCURlbGV0ZSByZWZlcmVuY2UgdG8gbl9tZW1sb2NzLiAgRG9uJ3Qgc2V0ICpyZWNvZ19vcGVyYW5kX2xvYyBiZWZvcmUKCXByb2Nlc3Npbmcgb3BlcmFuZHMuICBDYWxsIG1ha2VfbWVtbG9jIGluIHJlZ19lcXVpdl9hZGRyZXNzIGNvZGUuCglTZXQgKnJlY29nX29wZXJhbmRfbG9jIG9ubHkgYWZ0ZXIgcHJvY2Vzc2luZyBvcGVyYW5kcywgYW5kIG9ubHkKCWlmIHJlcGxhY2UgaXMgdHJ1ZS4gIFJldHVybiBhIHZhbHVlLgoJV2hlbiBjaGFuZ2luZyBhZGRyZXNzIHJlbG9hZCB0eXBlcyBmb3Igb3BlcmFuZHMgdGhhdCBkaWRuJ3QgZ2V0CglyZWxvYWRlZCwgdXNlIFJFTE9BRF9GT1JfT1BBRERSX0FERFJFU1MgZm9yCglSRUxPQURfRk9SX0lOUEFERFJfQUREUkVTUyAvIFJFTE9BRF9GT1JfT1VUQUREUl9BRERSRVNTIHJlbG9hZHMuCglEb24ndCBlbWl0IFVTRXMgZm9yIHBzZXVkbyBTVUJSRUdzIHdoZW4gbm90IHJlcGxhY2luZy4KCShmaW5kX3JlbG9hZHNfYWRkcmVzcyk6IERvIG1ha2VfbWVtbG9jIHN1YnN0aXR1dGlvbiBhbHNvIHdoZW4KCXJlZ19lcXVpdl9tZW1vcnlfbG9jW3JlZ25vXSBhbmQgbnVtX25vdF9hdF9pbml0aWFsX29mZnNldAoJYXJlIGJvdGggbm9uemVyby4KCShmaW5kX3JlbG9hZHNfdG9wbGV2KTogTGlrZXdpc2UuCglDYWxsIG1ha2VfbWVtbG9jIGluIHJlZ19lcXVpdl9hZGRyZXNzIGNvZGUuCgkoZGVidWdfcmVsb2FkX3RvX3N0cmVhbSk6IEFkZCBjb2RlIHRvIG91dHB1dCByZWxvYWRfb3V0X3JlZy4KCShtYWtlX21lbWxvYyk6IERlbGV0ZSBsb2NhbCB2YXJpYWJsZSBpLCBpZmRlZmVkIG91dCBjb2RlLCBhbmQKCXJlZmVyZW5jZXMgdG8gbWVtbG9jcyBhbmQgbl9tZW1sb2NzLgoJKG1lbWxvY3MsIG5fbWVtbG9jcyk6IERlbGV0ZS4KCShwdXNoX3NlY29uZGFyeV9yZWxvYWQpOiBDbGVhciByZWxvYWRfb3V0X3JlZy4KCShmaW5kX3JlbG9hZHNfYWRkcmVzc18xKTogUHJvdmlkZSBtZW1yZWZsb2MgYXJndW1lbnQgdG8gYWxsIGNhbGxzCgl0byBmaW5kX3JlbG9hZHNfYWRkcmVzcy4KCUluIEFVVE9fSU5DIGNvZGUsIGhhbmRsZSBub24tZGlyZWN0bHkgYWRkcmVzc2FibGUgZXF1aXZhbGVuY2VzIHByb3Blcmx5LgoJKiByZWxvYWQuaCAocmVsb2FkX291dF9yZWcsIG51bV9ub3RfYXRfaW5pdGlhbF9vZmZzZXQpOiBEZWNsYXJlLgoJKGZpbmRfcmVsb2Fkcyk6IEFkZCByZXR1cm4gdHlwZS4KCShyZW1vdmVfYWRkcmVzc19yZXBsYWNlbWVudHMsIGRlYWxsb2NhdGVfcmVsb2FkX3JlZyk6IERlY2xhcmUuCgkqIHJlbG9hZDEuYyAobnVtX25vdF9hdF9pbml0aWFsX29mZnNldCk6IE5vIGxvbmdlciBzdGF0aWMuCgkoZGVsZXRlX2FkZHJlc3NfcmVsb2FkcywgZGVsZXRlX2FkZHJlc3NfcmVsb2Fkc18xKTogTGlrZXdpc2UuCgkoZGVhbGxvY2F0ZV9yZWxvYWRfcmVnKTogTmV3IGZ1bmN0aW9uLgoJKHNwaWxsX3JlZ19zdG9yZWRfdG8pOiBOZXcgYXJyYXkuCgkoZWxpbWluYXRlX3JlZ3MpOiBEb24ndCBzdWJzdGl0dXRlIGZyb20gcmVnX2VxdWl2X21lbW9yeV9sb2MuCgkoZWxpbWluYXRlX3JlZ3NfaW5faW5zbik6IE1vdmUgYXNzaWdubWVudHMgb2YgcHJldmlvdXNfb2Zmc2V0IGFuZAoJbWF4X29mZnNldCBmaWVsZHMsIGFuZCByZWNhbGN1bGF0aW9uIG9mIG51bV9ub3RfYXRfaW5pdGlhbF9vZmZzZXQKCWludG8gbmV3IHN0YXRpYyBmdW5jdGlvbjoKCSh1cGRhdGVfZWxpbWluYWJsZV9vZmZzZXRzKSAuCgkocmVsb2FkX2FzX25lZWRlZCk6IENhbGwgdXBkYXRlX2VsaW1pbmFibGVfb2Zmc2V0cyBhZnRlciBjYWxsaW5nCglmaW5kX3JlbG9hZHMuCglDYWxsIGZvcmdldF9vbGRfcmVsb2Fkc18xIHdpdGggY29udGVudHMgb2YgcmVsb2FkZWQgYXV0b19pbmMKCWV4cHJlc3Npb25zIGlmIHRoZSBhY3R1YWwgYWRkcmVzc2luZyBjYW4ndCBiZSBjaGFuZ2VkIHRvIG1hdGNoIHRoZQoJYXV0b19pbmMuCgkoY2hvb3NlX3JlbG9hZF9yZWdzKTogRm9yIGluaGVyaXRhbmNlLCByZXBsYWNlCglyZWxvYWRfcmVnX2ZyZWVfYmVmb3JlX3AgdGVzdCB3aXRoIHJlbG9hZF9yZWdfdXNlZF9hdF9hbGwgdGVzdCwgYW5kCglyZW1vdmUgc3RhbmQtYWxvbmUgcmVsb2FkX3JlZ191c2VkX2F0X2FsbCB0ZXN0LgoJVXNlIHJlbG9hZF9vdXRfcmVnIHRvIGRldGVybWluZSB3aGljaCByZWxvYWQgcmVncyBoYXZlIG91dHB1dCByZWxvYWRzLgoJVHJlYXQgcmVsb2FkX292ZXJyaWRlX2luIG1vcmUgc2ltaWxhciB0byBpbmhlcml0ZWQgcmVsb2Fkcy4KCUhhbmRsZSAoc3VicmVnIChyZWcuLi4gZm9yIGluaGVyaXRhbmNlLgoJRm9yIGZsYWdfZXhwZW5zaXZlX29wdGltaXphdGlvbnMsIGFkZCBhbiBleHRyYSBwYXNzIHRvIHJlbW92ZQoJdW5uZWNlc3NhcnkgcmVsb2FkcyBmcm9tIGtub3duIHdvcmtpbmcgaW5oZXJpdGFuY2UuCglEZWxldGUgb2Jzb2xldGUgY29kZSBmb3IgcHNldWRvcyByZXBsYWNlZCB3aXRoIE1FTXMuCglIYW5kbGUgaW5oZXJpdGFuY2UgZnJvbSBhdXRvX2luYyBleHByZXNzaW9ucy4KCShlbWl0X3JlbG9hZF9pbnNucyk6IElmIHJlbG9hZF9pbiBpcyBhIE1FTSwgc2V0IE9MRCB0bwoJcmVsb2FkX2luX3JlZ1tqXS4KCURvbid0IHJlbG9hZCBkaXJlY3RseSBmcm9tIG9sZGVxdWl2OyBpZiBpdCdzIGEgcHNldWRvIHdpdGggYQoJc3RhY2sgc2xvdCwgdXNlIHJlbG9hZF9pbltqXS4KCUNoZWNrIHRoYXQgcmVsb2FkX2luX3JlZ1tqXSBpcyBhIE1FTSBiZWZvcmUgcmVwbGFjaW5nIHJlbG9hZF9pbgoJZnJvbSByZWdfcmVsb2FkZWRfY29udGVudHMuCglJbmNsdWRlIG5vbi1zcGlsbCByZWdpc3RlcnMgaW4gcmVsb2FkIGluaGVyaXRhbmNlIHByb2Nlc3NpbmcuCglBbHNvIHRyeSB0byB1c2UgcmVsb2FkX291dF9yZWcgdG8gc2V0IHNwaWxsX3JlZ19zdG9yZSAvCglyZWdfbGFzdF9yZWxvYWRfcmVnLgoJSW4gY29kZSB0byBzZXQgbmV3X3NwaWxsX3JlZ19zdG9yZSwgdXNlIHNpbmdsZV9zZXQgdG8gZmluZCBvdXQgaWYKCXRoZXJlIGlzIGEgc2luZ2xlIHNldC4KCUFkZCBjb2RlIHRoYXQgYWxsb3dzIHRvIGRlbGV0ZSBvcHRpb25hbCBvdXRwdXQgcmVsb2Fkcy4KCUFkZCBjb2RlIHRvIGFsbG93IGRlbGV0aW9uIG9mIG91dHB1dCByZWxvYWRzIHRoYXQgdXNlIG5vIHNwaWxsIHJlZy4KCUF0IHRoZSBlbmQsIHNldCByZWxvYWRfb3ZlcnJpZGVfaW4gdG8gb2xkZXF1aXYuCglBbHNvIGNhbGwgZGVsZXRlX291dHB1dF9yZWxvYWQgaWYgcmVsb2FkX291dF9yZWcgaXMgZXF1YWwgdG8gb2xkCglpbiBvbGRlcXVpdiBjb2RlLgoJQWRkIGNvZGUgdG8gY2FsbCBkZWxldGVfb3V0cHV0X3JlbG9hZCBmb3Igc3RvcmVzIHdpdGggbm8gbWF0Y2hpbmcgbG9hZC4KCVNldCAvIHVzZSBzcGlsbF9yZWdfc3RvcmVkX3RvLgoJSGFuZGxlIGNhc2Ugd2hlcmUgc2Vjb25kYXJ5IG91dHB1dCByZWxvYWQgdXNlcyBhIHRlbXBvcmFyeSwgYnV0CglhY3R1YWwgc3RvcmUgaXNuJ3QgZm91bmQuCglXaGVuIGxvb2tpbmcgZm9yIGEgc3RvcmUgb2YgYSB2YWx1ZSBub3QgbG9hZGVkIGluIG9yZGVyIHRvIGNhbGwKCWRlbGV0ZV9vdXRwdXRfcmVsb2FkLCBjb3VudF9vY2N1cnJlbmNlcyBzaG91bGQgcmV0dXJuIDAgZm9yIG5vCglsb2FkczsgYnV0IGRpc2NvdW50IGluaGVyaXRlZCBpbnB1dCByZWxvYWRpbGxfcmVnX3N0b3JlZF90by4KCURvIGNoZWNrcyBmb3IgZXh0cmEgdXNlcyBvZiBSRUcuICBDaGFuZ2VkIGFsbAoJY2FsbGVycy4KCVVzZSBkZWxldGVfYWRkcmVzc19yZWxvYWRzLgoJKHJlbG9hZCk6IFRha2UgcmV0dXJuIHZhbHVlIG9mIGZpbmRfcmVsb2FkcyBpbnRvIGFjY291bnQuCglJZiBhIG5vLW9wIHNldCBuZWVkcyBtb3JlIHRoYW4gb25lIHJlbG9hZCwgZGVsZXRlIGl0LgoJKHJlbG9hZF9yZWdfZnJlZV9iZWZvcmVfcCk6IFJFTE9BRF9GT1JfSU5QVVQKCWNhbiBpZ25vcmUgUkVMT0FEX0ZPUl9JTlBVVF9BRERSRVNTIC8gUkVMT0FEX0ZPUl9JTlBBRERSX0FERFJFU1MKCWZvciB0aGUgc2FtZSBvcGVyYW5kLgoJKGNsZWFyX3JlbG9hZF9yZWdfaW5fdXNlKTogQ2hlY2sgZm9yIG90aGVyIHJlbG9hZHMgdGhhdCBrZWVwIGEKCXJlZ2lzdGVyIGluIHVzZS4KCShyZWxvYWRfcmVnX2ZyZWVfZm9yX3ZhbHVlX3ApOiBIYW5kbGUgUkVMT0FEX0ZPUl9PUEVSQU5EX0FERFJFU1MgLwoJUkVMT0FEX0ZPUl9PUEFERFJfQUREUi4KCVRha2UgaW50byBhY2NvdW50IHdoZW4gYW4gYWRkcmVzcyBhZGRyZXNzIHJlbG9hZCBpcyBvbmx5IG5lZWRlZAoJZm9yIHRoZSBhZGRyZXNzIHJlbG9hZCB3ZSBhcmUgY29uc2lkZXJpbmcuCgkoY291bnRfb2NjdXJyZW5jZXMpOiBVc2UgcnR4X2VxdWFsX3AgZm9yIE1FTXMuCgkoaW5jX2Zvcl9yZWxvYWQpOiBSZXR1cm4gaW5zdHJ1Y3Rpb24gdGhhdCBzdG9yZXMgaW50byBSRUxPQURSRUcuCglOZXcgYXJndW1lbnQgdHdvLCBJTiwgYW5kIHJ0eC4gIENoYW5nZWQgYWxsIGNhbGxlcnMuCgkoY2FsY3VsYXRlX25lZWRzX2FsbF9pbnNucywgcmVsb2FkX2FzX25lZWRlZCk6CglEb24ndCBjbGVhciBhZnRlcl9jYWxsIGZvciBhIENMT0JCRVIuCglLZWVwIHRyYWNrIG9mIGhvdyBtYW55IGhhcmQgcmVnaXN0ZXJzIG5lZWQgdG8gYmUgY29waWVkIGZyb20KCWFmdGVyX2NhbGwsIGFuZCBkb24ndCBjbGVhciBhZnRlcl9jYWxsIGJlZm9yZSB3ZSBoYXZlIHNlZW4KCXRoYXQgbXVjaCBjb3BpZXMsIG9yIHdlIHNlZSBhIGRpZmZlcmVudCBpbnN0cnVjdGlvbi4KCkZyaSBPY3QgMTYgMTA6NTg6MjMgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZmxvdy5jIChmaW5kX2Jhc2ljX2Jsb2Nrc18xKTogRG8gbm90IGRlbGV0ZSB1bnJlYWNoYWJsZSBibG9ja3MKCWFmdGVyIHJlbG9hZCBoYXMgY29tcGxldGVkLgoKRnJpIE9jdCAxNiAxNzoyNjoxMCAxOTk4ICBEYXZlIEJyb2xsZXkgIDxicm9sbGV5QGN5Z251cy5jb20+CgoJKiBjcHBsaWIuYyAoY3BwX2dldF90b2tlbik6IFJlcGxhY2Ugd2hpdGVzcGFjZSB0aGF0IG9jY3VycyBiZXR3ZWVuCglhIG1hY3JvIG5hbWUgYW5kIHRoZSBuZXh0IHRva2VuIHdpdGggYSBzaW5nbGUgYmxhbmsgaWYgdGhhdCB3aGl0ZXNwYWNlCglpcyBpbiBhIG1hY3JvIGJ1ZmZlciBhbmQgdGhlIG5leHQgdG9rZW4gaXMgbm90ICcoJy4KCkZyaSBPY3QgMTYgMTU6NDQ6MDIgMTk5OCAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKCSogY2NjcC5jIChyZXNjYW4pOiBIYW5kbGUgbXVsdGlieXRlIGNoYXJhY3RlcnMgZW5kaW5nIGluIGJhY2tzbGFzaC4KCShyZXNjYW4pOiBMaWtld2lzZS4KCShza2lwX2lmX2dyb3VwKTogTGlrZXdpc2UuCgkoc2tpcF90b19lbmRfb2ZfY29tbWVudCk6IExpa2V3aXNlLgoJKG1hY2FyZzEpOiBMaWtld2lzZS4KCShkaXNjYXJkX2NvbW1lbnRzKTogTGlrZXdpc2UuCgkoY2hhbmdlX25ld2xpbmVzKTogTGlrZXdpc2UuCgpGcmkgT2N0IDE2IDE1OjI2OjI0IDE5OTggIERhdmUgQnJvbGxleSAgPGJyb2xsZXlAY3lnbnVzLmNvbT4KCgkqIGMtbGV4LmMgKHl5bGV4KTogRml4IHVuYWxpZ25lZCBhY2Nlc3Mgb2Ygd2NoYXJfdC4KCkZyaSBPY3QgMTYgMTA6NDc6NTMgMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9hcm0vYXJtLmggKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCAtLWhlbHAgZG9jdW1lbnRhdGlvbi4KCShUQVJHRVRfT1BUSU9OUyk6IEFkZCAtLWhlbHAgZG9jdW1lbnRhdGlvbi4KCkZyaSBPY3QgMTYgMTE6NDk6MDEgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogcnRsLmggKHNldHNfY2MwX3ApOiBSZXZlcnQgT2N0IDE0IEFUVFJJQlVURV9OT1JFVFVSTiBjaGFuZ2UuCgpGcmkgT2N0IDE2IDA3OjA4OjQ2IDE5OTggIEJydWNlIEtvcmIgIDxrb3JiQGRhdGFkZXNpZ24uY29tPgoKCSogZml4aW5jLyogTW92ZWQgaW4gZnJvbSAuLi9jb250cmliIGRpcmVjdG9yeSBpbiBwcmVwYXJhdGlvbgoJZm9yIGludGVncmF0aW5nIGl0IGludG8gdGhlIG5vcm1hbCBidWlsZCBwcm9jZXNzLiAgSW4gcGFydGljdWxhciwKCWZpeGluYy9NYWtlZmlsZS5pbiBtdXN0IGJlIGNvbmZpZy1lZCBpbnRvIHRoZSBidWlsZCBkaXJlY3RvcnkKCWFzIGZpeGluYy9NYWtlZmlsZS4gIFByb3Bvc2VkIHBhdGNoZXMgdG8gLi9NYWtlZmlsZS5pbiBhbmQKCS4vY29uZmlndXJlLmluIHdpbGwgYmUgImluIHRoZSBtYWlsIiBtb21lbnRhcmlseS4KCkZyaSBPY3QgMTYgMDg6MTM6NDYgMTk5OCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcGllcmRvbC5jb2JhbHRuZXQuY29tPgoKCSogY3NlLmMgKGNzZV9iYXNpY19ibG9jayk6IEZpeHVwIGhhc2ggZmx1c2hpbmcgbG9vcCBzbyB3ZSBkbyBub3QKCWFjY2lkZW50bHkgd2FsayBpbnRvIHRoZSBmcmVlIGxpc3QuICBDb21tZW50IGhvdyB0aGF0IGNhbiBoYXBwZW4uCgkoaW52YWxpZGF0ZSk6IEZpeCBpbmRlbnRhdGlvbi4KClRodSBPY3QgMTUgMjM6NTM6MjkgMTk5OCAgQmVybmQgU2NobWlkdCAgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgoJCQkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGZsb3cuYyAobGlmZV9hbmFseXNpc18xKTogRG8gbm90IGNsb2JiZXIgcmVnc19ldmVyX2xpdmUgYWZ0ZXIKCXJlbG9hZC4gIE5ldmVyIHBlcmZvcm0gcmVzY2FucyBvZiB0aGUgaW5zbiBjaGFpbiBhZnRlciByZWxvYWQuCgkocHJvcGFnYXRlX2Jsb2NrKTogRG8gbm90IGRlbGV0ZSBpbnNuIG9yIGNyZWF0ZSBuZXcgYXV0b2luYyBhZGRyZXNzaW5nCgltb2RlcyBhZnRlciByZWxvYWQuCgoJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBVbmNvbmRpdGlvbmFsbHkgdXNlIHRoZSBjb2RlIHRoYXQgd2FzCglwcmV2aW91c2x5IGNvbmRpdGlvbmFsIG9uIFBSRVNFUlZFX0RFQVRIX0lORk9fUkVHTk9fUC4KCSogcmVsb2FkMS5jIChyZWxvYWQpOiBXaGVuIHJlbG9hZGluZyBpcyBmaW5pc2hlZCwgZGVsZXRlIGFsbAoJUkVHX0RFQUQgYW5kIFJFR19VTlVTRUQgbm90ZXMuCgkoZW1pdF9yZWxvYWRfaW5zbnMpOiBEZWxldGUgYWxsIGNvZGUgdGhhdCB3YXMgY29uZGl0aW9uYWwgb24KCVBSRVNFUlZFX0RFQVRIX0lORk9fUkVHTk9fUC4KCShub19sb25nZXJfZGVhZF9yZWdzKTogRGVsZXRlIHZhcmlhYmxlLgoJKHJlbG9hZF9jc2VfZGVsZXRlX2RlYXRoX25vdGVzKTogRGVsZXRlIGZ1bmN0aW9uLgoJKHJlbG9hZF9jc2Vfbm9fbG9uZ2VyX2RlYWQpOiBEZWxldGUgZnVuY3Rpb24uCgkocmVsb2FkX2NzZV9yZWdzXzEpOiBEZWxldGUgYWxsIGNvZGUgdG8gaGFuZGxlIGRlbGV0aW9uIG9mIGRlYXRoCglub3Rlcy4KCShyZWxvYWRfY3NlX25vb3Bfc2V0X3ApOiBMaWtld2lzZS4KCShyZWxvYWRfY3NlX3NpbXBsaWZ5X3NldCk6IExpa2V3aXNlLgoJKHJlbG9hZF9jc2Vfc2ltcGxpZnlfb3BlcmFuZHMpOiBMaWtld2lzZS4KCShyZWxvYWRfY3NlX21vdmUyYWRkKTogTGlrZXdpc2UuCgkqIHJlb3JnLmMgKHVzZWRfc3BpbGxfcmVncyk6IERlbGV0ZSBkZWNsYXJhdGlvbi4KCShtYXhfbGFiZWxfbnVtX2FmdGVyX3JlbG9hZCk6IERlbGV0ZSBkZWNsYXJhdGlvbi4KCShmaW5kX2RlYWRfb3Jfc2V0X3JlZ2lzdGVycyk6IERvbid0IGFzc3VtZSB0aGF0IHNwaWxsIHJlZ3MgYXJlCglkZWFkIGF0IGEgQ09ERV9MQUJFTC4KCSogcnRsYW5hbC5jIChkZWFkX29yX3NldF9yZWdub19wKTogRGVhdGggbm90ZXMgYXJlIGFsd2F5cyBhY2N1cmF0ZSwKCWV2ZW4gYWZ0ZXIgcmVsb2FkLgoJKiBzY2hlZC5jIChzY2hlZF9hbmFseXplX2luc24pOiBMaWtld2lzZS4KCSh1cGRhdGVfZmxvd19pbmZvKTogTGlrZXdpc2UuCgkqIGhhaWZhLXNjaGVkLmMgKHNjaGVkX2FuYWx5emVfaW5zbik6IExpa2V3aXNlLgoJKHVwZGF0ZV9mbG93X2luZm8pOiBMaWtld2lzZS4KCSogdG0udGV4aSAoUFJFU0VSVkVfREVBVEhfSU5GT19SRUdOT19QKTogRGVsZXRlIGRvY3VtZW50YXRpb24uCgkqIHRvcGxldi5jIChtYXhfbGFiZWxfbnVtX2FmdGVyX3JlbG9hZCk6IERlbGV0ZSB2YXJpYWJsZS4KCShyZXN0X29mX2NvbXBpbGF0aW9uKTogRG9uJ3Qgc2V0IG1heF9sYWJlbF9udW1fYWZ0ZXJfcmVsb2FkLgoJQ2FsbCBsaWZlX2FuYWx5c2lzIGFmdGVyIHJlbG9hZF9jc2VfcmVncyBpZiBvcHRpbWl6aW5nLgoJKiBjb25maWcvZ21pY3JvL2dtaWNyby5oOiBEZWxldGUgY29tbWVudCByZWZlcnJpbmcgdG8KCVBSRVNFUlZFX0RFQVRIX0lORk9fUkVHTk9fUC4KCSogY29uZmlnL2kzODYvaTM4Ni5oOiBMaWtld2lzZS4KCSogY29uZmlnL204OGsvbTg4ay5oOiBMaWtld2lzZS4KCSogY29uZmlnL20zMnIvbTMyci5oIChQUkVTRVJWRV9ERUFUSF9JTkZPX1JFR05PX1ApOiBEZWxldGUgZGVmaW5pdGlvbi4KCSogY29uZmlnL3NoL3NoLmg6IExpa2V3aXNlLgoKVGh1IE9jdCAxNSAxOTo0ODo0MSAxOTk4ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiBsb29wLmMgKHN0cmVuZ3RoX3JlZHVjZSk6IFJlc3RvcmUgbWFya2luZyBiY3RfcCBhcwoJQVRUUklCVVRFX1VOVVNFRC4KCSogcnM2MDAwLmMgKG9wdGltaXphdGlvbl9vcHRpb25zKTogQ2hhbmdlICNpZmRlZiBIQUlGQSB0bwoJSEFWRV9kZWNyZW1lbnRfYW5kX2JyYW5jaF9vbl9jb3VudC4KCShzbWFsbF9kYXRhX29wZXJhbmQpOiBSZW1vdmUgVEFSR0VUX0VMRiBjb25kaXRpb24gZm9yIG1hcmtpbmcKCXBhcmFtZXRlcnMgQVRUUklCVVRFX1VOVVNFRC4KClRodSBPY3QgMTUgMTE6NDU6NTEgMTk5OCAgUm9iZXJ0IExpcGUgIDxyb2JlcnRsQGRnaWkuY29tPgoKCSogY29uZmlnL2kzODYvc2NvNS5oIChNQVhfT0ZJTEVfQUxJR05NRU5UKTogRGVmaW5lLgoJKFNFTEVDVF9TRUNUSU9OKTogUmVzeW5jIHdpdGggc3ZyNC5oLgoKVGh1IE9jdCAxNSAxMjo0MjoxMyAxOTk4ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiBsb29wLmMgKHN0cmVuZ3RoX3JlZHVjZSk6IFVuZG8gT2N0IDE0IGNoYW5nZSBtYXJraW5nIGJjdF9wCglBVFRSSUJVVEVfVU5VU0VELgoKVGh1IE9jdCAxNSAwMDo1Nzo1NSAxOTk4ICBSb2JlcnQgTGlwZSAgPHJvYmVydGxAZGdpaS5jb20+CgoJKiBjLXByYWdtYS5jIChoYW5kbGVfcHJhZ21hX3Rva2VuKTogVGVzdCBmb3IgbnVsbCB0cmVlIGJlZm9yZQoJZGVyZWZlcmVuY2luZyBUUkVFX0NPREUuCgpUaHUgT2N0IDE1IDE3OjM2OjQ4IDE5OTggIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4LmM6IENvbnZlcnQgdG8gdXNlIEdFTl9JTlQuCgkoYzR4X3BhcmFsbGVsX3Byb2Nlc3MpOiBSZXdvcmsgdG8gaGFuZGxlIG5ldyByZXBlYXQgbG9vcCBzdHJ1Y3R1cmUuCgoJKiBjb25maWcvYzR4L2M0eC5tZDogQ29udmVydCB0byB1c2UgR0VOX0lOVC4KCShycHRiX2VuZCk6IENvbnZlcnQgdG8gdXNlIEdFIHRlc3QuICBSZXBsYWNlIHVzZXMgd2l0aCBjbG9iYmVycy4KCShkZWNyZW1lbnRfYW5kX2JyYW5jaF9vbl9jb3VudCk6IExpa2V3aXNlLgoKCSogY29uZmlnL2M0eC9jNHguaCAoUkVQRUFUX0JMT0NLX1BST0NFU1MpOiBEZWxldGVkIGhvb2sgbm93IHRoYXQKCWxvb3AuYyBoYXMgdGhlIGRlc2lyZWQgZnVuY3Rpb25hbGl0eS4KCShyY19yZWdfb3BlcmFuZCk6IE5ldyBwcm90b3R5cGUuCgoJKiBjb25maWcvYzR4L3QtYzR4OiBDYW4gbm93IGJ1aWxkIGFsbCBmcm9udCBlbmRzLgoKV2VkIE9jdCAxNCAyMzoyNzowOCAxOTk4ICBEaWRpZXIgRk9SVCAgKGRpZGllci5mb3J0QGZlZGV4LmNvbSkKCgkqIGZpeGluY2x1ZGVzOiBGaXggdXAgcnBjL3tjbG50LHN2cix4ZHJ9LmggZm9yIFN1bk9TLgoKV2VkIE9jdCAxNCAyMjoxMzoyOCAxOTk4ICBKb2VsIFNoZXJyaWxsICAoam9lbEBPQVJjb3JwLmNvbSkKCgkqIE1ha2VmaWxlLmluIChzdG1wLWZpeGluYyk6IERvIG5vdCBpbnN0YWxsIGFzc2VydC5oIGlmIG5vdCBkZXNpcmVkLgoJKiBjb25maWcvdC1ydGVtczogRG8gbm90IGluc3RhbGwgYXNzZXJ0LmggLS0gdXNlIG5ld2xpYidzLgoKV2VkIE9jdCAxNCAyMTo1NzowOCAxOTk4ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogY29tYmluZS5jIChjb21iaW5lX2luc3RydWN0aW9ucyk6IFdoZW4gZmluaXNoZWQsIGNhbGwgaW5pdF9yZWNvZy4KCSogcmVnbW92ZS5jIChvcHRpbWl6ZV9yZWdfY29weV8zKTogUmVqZWN0IHZvbGF0aWxlIE1FTXMuCgpXZWQgT2N0IDE0IDE2OjEwOjIyIDE5OTggIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogdG9wbGV2LmM6IElmIGZsYWdfc3ludGF4X29ubHksIGRvbid0IG9wZW4gb3Igd3JpdGUgYXNzZW1ibGVyIGZpbGUuCgpXZWQgT2N0IDE0IDEzOjI2OjA1IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNwcGFsbG9jLmMgKG1lbW9yeV9mdWxsKTogTWFyayBmdW5jdGlvbiBwcm90b3R5cGUgd2l0aAoJQVRUUklCVVRFX05PUkVUVVJOLgoKCSogZGVtYW5nbGUuaCAoY29sbGVjdF9leGl0KTogTGlrZXdpc2UuCgoJKiBmaXgtaGVhZGVyLmMgKHZfZmF0YWwsIGZhdGFsKTogTGlrZXdpc2UuCgoJKiBnY2MuYyAocGZhdGFsX3dpdGhfbmFtZSwgcGZhdGFsX3BleGVjdXRlLCBmYXRhbCwgZmFuY3lfYWJvcnQpOgoJTGlrZXdpc2UuCgoJKiBnY292LmMgKHByaW50X3VzYWdlKTogTGlrZXdpc2UuCgoJKiBnZW5hdHRyLmMgKGZhdGFsLCBmYW5jeV9hYm9ydCk6IExpa2V3aXNlLgoKCSogZ2VuYXR0cnRhYi5jIChmYXRhbCwgZmFuY3lfYWJvcnQpOiBMaWtld2lzZS4KCgkqIGdlbmNvZGVzLmMgKGZhdGFsLCBmYW5jeV9hYm9ydCk6IExpa2V3aXNlLgoKCSogZ2VuY29uZmlnLmMgKGZhdGFsLCBmYW5jeV9hYm9ydCk6IExpa2V3aXNlLgoKCSogZ2VuZW1pdC5jIChmYXRhbCwgZmFuY3lfYWJvcnQpOiBMaWtld2lzZS4KCgkqIGdlbmV4dHJhY3QuYyAoZmF0YWwsIGZhbmN5X2Fib3J0KTogTGlrZXdpc2UuCgoJKiBnZW5mbGFncy5jIChmYXRhbCwgZmFuY3lfYWJvcnQpOiBMaWtld2lzZS4KCgkqIGdlbm9waW5pdC5jIChmYXRhbCwgZmFuY3lfYWJvcnQpOiBMaWtld2lzZS4KCgkqIGdlbm91dHB1dC5jIChmYXRhbCwgZmFuY3lfYWJvcnQpOiBMaWtld2lzZS4KCgkqIGdlbnBlZXAuYyAoZmF0YWwsIGZhbmN5X2Fib3J0KTogTGlrZXdpc2UuCgoJKiBnZW5yZWNvZy5jIChmYXRhbCwgZmFuY3lfYWJvcnQpOiBMaWtld2lzZS4KCgkqIGxpYmdjYzIuYyAoX19lcHJpbnRmLCBfX2RlZmF1bHRfdGVybWluYXRlLCBfX3NqdGhyb3csCglfX3NqcG9wbnRocm93LCBfX3Rocm93KTogTGlrZXdpc2UuCgoJKiBvYmpjL29iamMtYWN0LmMgKG9iamNfZmF0YWwpOiBMaWtld2lzZS4KCgkqIHByb3RvaXplLmMgKHVzYWdlLCBhdXhfaW5mb19jb3JydXB0ZWQsCglkZWNsYXJlX3NvdXJjZV9jb25mdXNpbmcpOiBMaWtld2lzZS4KCgkqIHJ0bC5jIChkdW1wX2FuZF9hYm9ydCk6IExpa2V3aXNlLgoKCSogcnRsLmggKHNldHNfY2MwX3ApOiBMaWtld2lzZS4KCgkqIHRvcGxldi5jIChmbG9hdF9zaWduYWwsIHBpcGVfY2xvc2VkKTogTGlrZXdpc2UuCgoxOTk4LTEwLTE0ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5jcy51bmktZG9ydG11bmQuZGU+CgoJKiBkd2FyZjJvdXQuYyAoZXhwYW5kX2J1aWx0aW5fZHdhcmZfcmVnX3NpemUpOiBMb29rIGF0IGFsbCByYW5nZXMKCXdoZW4gZ2VuZXJhdGluZyB0aGUgZGVjaXNpb24gdHJlZSBmb3IgdGhlIGdlbmVyYWwgY2FzZS4KCgkqIGNvbmZpZy9tNjhrL202OGsuaCAoSEFSRF9SRUdOT19NT0RFX09LKTogRG9uJ3QgYWNjZXB0IG1vZGVzCgl3aWRlciB0aGF0IDEyIGJ5dGVzIGluIGZwdSByZWdzIG9yIHdpZGVyIHRoYW4gOCBieXRlIGluIGZwYSByZWdzLgoKV2VkIE9jdCAxNCAxMToxNDowMiAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBNYWtlZmlsZS5pbiAoc2NoZWQubyk6IERlcGVuZCBvbiByZWNvZy5oLgoKCSogYWxpYXMuYyAoUkVHX0JBU0VfVkFMVUUpOiBDYXN0IHRoZSByZXN1bHQgb2YgUkVHTk8oKSBtYWNybyB0bwoJKHVuc2lnbmVkKSB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCShmaW5kX2Jhc2VfdmFsdWUpOiBMaWtld2lzZS4KCShyZWNvcmRfYmFzZV92YWx1ZSk6IENhc3QgdmFyaWFibGUgYHJlZ25vJyB0byAodW5zaWduZWQpIHdoZW4KCWNvbXBhcmluZyBhZ2FpbnN0IG9uZS4gIENhc3QgdGhlIHJlc3VsdCBvZiBSRUdOTygpIG1hY3JvIHRvCgkodW5zaWduZWQpIHdoZW4gY29tcGFyaW5nIGFnYWluc3Qgb25lLgoJKG1lbXJlZnNfY29uZmxpY3RfcCk6IENoYW5nZSB0eXBlIG9mIHZhcmlhYmxlcyBgcl94JyBhbmQgYHJfeScgIHRvCgl1bnNpZ25lZC4KCShpbml0X2FsaWFzX2FuYWx5c2lzKTogQWRkIHVuc2lnbmVkIHZhcmlhYmxlIGB1aScuICBVc2UgaXQgYXMgbG9vcAoJdmFyaWFibGUgd2hlcmUgYW4gdW5zaWduZWQgaW5kZXggaXMgbmVlZGVkLgoKCSogY2FsbGVyLXNhdmUuYyAoaW5pdF9jYWxsZXJfc2F2ZSk6IENhc3QgYC0xJyB0byAoZW51bSBpbnNuX2NvZGUpCgliZWZvcmUgY29tcGFyaW5nIGFnYWluc3Qgb25lLgoKCSogY29sbGVjdDIuYzogQWRkIHByb3RvdHlwZXMgZm9yIGZ1bmN0aW9ucyBgZXJyb3InLCBgZmF0YWwnIGFuZAoJYGZhdGFsX3BlcnJvcicuICBNYWtlIHRoZXNlIGZ1bmN0aW9ucyB0YWtlIHZhcmlhYmxlIGFyZ3VtZW50cwoJaW5zdGVhZCBvZiBmYWtpbmcgaXQgd2l0aCBhIGZpeGVkIG51bWJlciBvZiBhcmdzLgoJKHdyaXRlX2NfZmlsZV9zdGF0KTogQ2FzdCB0aGUgYXJndW1lbnQgb2YgY3R5cGUgbWFjcm8gdG8gKHVuc2lnbmVkCgljaGFyKS4KCgkqIGNvbWJpbmUuYyAoY2FuX2NvbWJpbmVfcCk6IE1hcmsgcGFyYW1ldGVyIGBwcmVkJyB3aXRoCglBVFRSSUJVVEVfVU5VU0VELgoJKGZpbmRfc3BsaXRfcG9pbnQpOiBDYXN0IHZhcmlhYmxlIGBzcmMnIHRvICh1bnNpZ25lZAoJSE9TVF9XSURFX0lOVCkgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuCgkoc2ltcGxpZnlfcnR4KTogQ2FzdCAxIHRvICh1bnNpZ25lZCBIT1NUX1dJREVfSU5UKSBpbiBzaGlmdC4KCShzaW1wbGlmeV9sb2dpY2FsKTogTGlrZXdpc2UuCgkoZm9yY2VfdG9fbW9kZSk6IENhc3QgcmVzdWx0IG9mIElOVFZBTCgpIG1hY3JvIHRvICh1bnNpZ25lZAoJSE9TVF9XSURFX0lOVCkgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuICBDYXN0IDEgdG8gKHVuc2lnbmVkCglIT1NUX1dJREVfSU5UKSBpbiBzaGlmdC4KCShzaW1wbGlmeV9hbmRfY29uc3RfaW50KTogQ2FzdCByZXN1bHQgb2YgSU5UVkFMKCkgbWFjcm8gdG8KCWB1bnNpZ25lZCBIT1NUX1dJREVfSU5UJyB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCShtZXJnZV9vdXRlcl9vcHMpOiBDYXN0IHZhcmlhYmxlIGNvbnN0MCB0byBgdW5zaWduZWQKCUhPU1RfV0lERV9JTlQnIHdoZW4gY29tcGFyaW5nIGFnYWluc3QgdGhlIHJlc3VsdCBvZgoJR0VUX01PREVfTUFTSygpIG1hY3JvLgoJKHNpbXBsaWZ5X2NvbXBhcmlzb24pOiBMaWtld2lzZSBmb3IgdmFyaWFibGUgYGMwJy4gIENhc3QgdmFyaWFibGUKCWBjb25zdF9vcCcgdG8gYHVuc2lnbmVkIEhPU1RfV0lERV9JTlQnIHdoZW4gY29tcGFyaW5nIGFnYWluc3QKCW9uZS4gIENhc3QgYDEnIHRvIGB1bnNpZ25lZCBIT1NUX1dJREVfSU5UJyBpbiBzaGlmdC4gIENhc3QgdGhlCglyZXN1bHQgb2YgYEdFVF9NT0RFX01BU0soKS8yJyB0byBgSE9TVF9XSURFX0lOVCcgd2hlbiBjb21wYXJpbmcKCWFnYWluc3Qgb25lLiAgQ2FzdCBgMScgdG8gYHVuc2lnbmVkIEhPU1RfV0lERV9JTlQnIGluIHNoaWZ0LiAgQ2FzdAoJcmVzdWx0IG9mIElOVFZBTCgpIG1hY3JvIHRvIGB1bnNpZ25lZCBIT1NUX1dJREVfSU5UJyB3aGVuCgljb21wYXJpbmcgYWdhaW5zdCBvbmUuCgkoZGlzdHJpYnV0ZV9ub3Rlcyk6IFdyYXAgdmFyaWFibGUgYGNjMF9zZXR0ZXInIGluIG1hY3JvIGBIQVZFX2NjMCcuCgoJY29uZmlnL21pcHMvbWlwcy5jIChnZW5faW50X3JlbGF0aW9uYWwpOiBDYXN0IHJlc3VsdCBvZiBJTlRWQUwoKQoJbWFjcm8gdG8gYHVuc2lnbmVkIEhPU1RfV0lERV9JTlQnIHdoZW4gY29tcGFyaW5nIGFnYWluc3Qgb25lLgoJKG91dHB1dF9ibG9ja19tb3ZlKTogQ2FzdCBgc2l6ZW9mJyBleHByZXNzaW9uIHRvIChpbnQpIHdoZW4KCWNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCShmdW5jdGlvbl9hcmcpOiBDYXN0IEJJVFNfUEVSX1dPUkQgdG8gYHVuc2lnbmVkJyB3aGVuIGNvbXBhcmluZwoJYWdhaW5zdCBvbmUuCgkoc2F2ZV9yZXN0b3JlX2luc25zKTogQ2FzdCBgYmFzZV9vZmZzZXQnIHRvIGBsb25nJyB0byBtYXRjaCBmb3JtYXQKCXNwZWNpZmllciBpbiBmcHJpbnRmLgoKCSogY29uZmlnL21pcHMvbWlwcy5oIChQbW9kZSk6IENhc3QgdGhlIHJlc3VsdCBvZiBgUG1vZGUnIG1hY3JvCgl0byBgZW51bSBtYWNoaW5lX21vZGUnLgoKCSogZmxvdy5jIChsaWZlX2FuYWx5c2lzXzEpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGBpbnNuJy4KCgkqIGdjYy5jICh0cmFuc2xhdGVfb3B0aW9ucyk6IE1vdmUgdmFyaWFibGVzIGBqJyBhbmQgYGsnIGludG8gdGhlCglzY29wZSBpbiB3aGljaCB0aGV5IGFyZSB1c2VkLiAgQ2hhbmdlIHRoZWlyIHR5cGVzIHRvIGBzaXplX3QnLgoJKHNldF9zcGVjKTogQ2FzdCB0aGUgYXJndW1lbnQgb2YgY3R5cGUgbWFjcm8gdG8gYHVuc2lnbmVkIGNoYXInLgoJKHJlYWRfc3BlY3MpOiBMaWtld2lzZS4KCShwcm9jZXNzX2NvbW1hbmQpOiBDYXN0IGBzaXplb2YnIHRvIChpbnQpIHdoZW4gY29tcGFyaW5nIGFnYWluc3Qgb25lLgoJKGRvX3NwZWNfMSk6IENhc3QgdGhlIGFyZ3VtZW50IG9mIGN0eXBlIG1hY3JvIHRvIGB1bnNpZ25lZCBjaGFyJy4KCShoYW5kbGVfYnJhY2VzKTogQ2FzdCBib3RoIHNpZGVzIG9mIGA9PScgZXhwcmVzc2lvbiB0byBgbG9uZycgdG8KCWVuc3VyZSBzaWduIG1hdGNoaW5nLgoJKG1haW4pOiBDYXN0IHZhcmlhYmxlIGBpJyB0byBgaW50JyB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCgkqIGdjb3YtaW8uaCAoX19mZXRjaF9sb25nKTogQ2hhbmdlIHR5cGUgb2YgcGFyYW1ldGVyIGBieXRlcycgZnJvbQoJaW50IHRvIHNpemVfdC4gIENhc3QgdmFyaWFibGUgYGknIHRvIHNpemVfdCB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0CglvbmUuCgoJKiBnZW5hdHRydGFiLmMgKGNvbnZlcnRfc2V0X2F0dHJfYWx0ZXJuYXRpdmUpOiBSZW1vdmUgdW51c2VkCglwYXJhbWV0ZXIgYGluc25fY29kZScuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgoJKGNvbnZlcnRfc2V0X2F0dHIpOiBMaWtld2lzZS4KCgkqIGdlbnJlY29nLmMgKGFkZF90b19zZXF1ZW5jZSk6IENhc3QgcmVzdWx0IG9mIFhWRUNMRU4oKSBtYWNybyB0bwoJc2l6ZV90IHdoZW4gY29tcGFyaW5nIGFnYWluc3Qgb25lLiAgTGlrZXdpc2UgZm9yIHZhcmlhYmxlIGBsZW4nLgoKCSogZ2xvYmFsLmMgKGdsb2JhbF9hbGxvYyk6IENhc3QgdmFyaWFibGUgYG1heF9yZWdubycgdG8gc2l6ZV90Cgl3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4gIExpa2V3aXNlIGZvciB2YXJpYWJsZSBgbWF4X2FsbG9jbm8nLgoKCSoganVtcC5jIChzZXRzX2NjMF9wKTogTWFyayBwYXJhbWV0ZXIgYHgnIHdpdGggQVRUUklCVVRFX1VOVVNFRC4KCgkqIGxvY2FsLWFsbG9jLmMgKHZhbGlkYXRlX2VxdWl2X21lbV9mcm9tX3N0b3JlKTogTWFyayBwYXJhbWV0ZXIKCWBzZXQnIHdpdGggQVRUUklCVVRFX1VOVVNFRC4KCShmaW5kX2ZyZWVfcmVnKTogQ2FzdCBgc2l6ZW9mJyBleHByZXNzaW9uIHRvIChpbnQpIHdoZW4gY29tcGFyaW5nCglhZ2FpbnN0IG9uZS4KCgkqIGxvb3AuYyAoY291bnRfbG9vcF9yZWdzX3NldCk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgYGRlc3QnLgoJKHN0cmVuZ3RoX3JlZHVjZSk6IE1hcmsgcGFyYW1ldGVyIGBiY3RfcCcgd2l0aCBBVFRSSUJVVEVfVU5VU0VELgoJKGdldF9jb25kaXRpb24pOiBDYXN0IHZhcmlhYmxlIGBjb25zdF92YWwnIHRvIGB1bnNpZ25lZAoJSE9TVF9XSURFX0lOVCcgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuICBDYXN0IHVuc2lnbmVkCglleHByZXNzaW9uIHRvIEhPU1RfV0lERV9JTlQgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuCgkoaW5zZXJ0X2xvb3BfbWVtKTogTWFyayBwYXJhbWV0ZXIgYGRhdGEnIHdpdGggQVRUUklCVVRFX1VOVVNFRC4KCShsb2FkX21lbXNfYW5kX3JlY291bnRfbG9vcF9yZWdzX3NldCk6IENhc3QgdmFyaWFibGUgYG5yZWdzJyB0bwoJYHVuc2lnbmVkJyB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCgkqIHByb3RvaXplLmMgKGlzX2lkX2NoYXIpOiBDaGFuZ2UgdHlwZSBvZiBwYXJhbWV0ZXIgYGNoJyB0bwoJdW5zaWduZWQgY2hhci4KCShtdW5nZV9jb21waWxlX3BhcmFtcyk6IENhc3QgYXJndW1lbnQgb2YgY3R5cGUgbWFjcm8gdG8gKGNvbnN0Cgl1bnNpZ25lZCBjaGFyKS4KCShwcm9jZXNzX2F1eF9pbmZvX2ZpbGUpOiBDYXN0IHZhcmlhYmxlIGBhdXhfaW5mb19zaXplJyB0byBpbnQgd2hlbgoJY29tcGFyaW5nIGFnYWluc3Qgb25lLgoJKGZvcndhcmRfdG9fbmV4dF90b2tlbl9jaGFyKTogQ2FzdCBhcmd1bWVudCBvZiBjdHlwZSBtYWNybyB0bwoJYGNvbnN0IHVuc2lnbmVkIGNoYXInLgoJKGVkaXRfZm9ybWFsc19saXN0cyk6IExpa2V3aXNlLgoJKGZpbmRfcmlnaHRtb3N0X2Zvcm1hbHNfbGlzdCk6IExpa2V3aXNlLgoJKGFkZF9sb2NhbF9kZWNsKTogTGlrZXdpc2UuCgkoYWRkX2dsb2JhbF9kZWNscyk6IExpa2V3aXNlLgoJKGVkaXRfZm5fZGVmaW5pdGlvbik6IExpa2V3aXNlLgoJKGRvX2NsZWFuaW5nKTogTGlrZXdpc2UuCgkoc2Nhbl9mb3JfbWlzc2VkX2l0ZW1zKTogTGlrZXdpc2UuCgkoZWRpdF9maWxlKTogQ2FzdCB2YXJpYWJsZSBgb3JpZ19zaXplJyB0byAoaW50KSB3aGVuIGNvbXBhcmluZwoJYWdhaW5zdCBvbmUuCgkobWFpbik6IENhc3QgYXJndW1lbnQgb2YgY3R5cGUgbWFjcm8gdG8gYGNvbnN0IHVuc2lnbmVkIGNoYXInLgoKCSogcmVjb2cuYyAoY29uc3RfaW50X29wZXJhbmQpOiBNYXJrIHBhcmFtZXRlciBgbW9kZScgd2l0aAoJQVRUUklCVVRFX1VOVVNFRC4KCgkqIHJlZ2NsYXNzLmMgKHJlY29yZF9yZWdfY2xhc3Nlcyk6IENoYW5nZSB0eXBlIG9mIHZhcmlhYmxlIGBjJyB0bwoJYHVuc2lnbmVkIGNoYXInLiAgQ2FzdCBgY2hhcicgYXJyYXkgaW5kZXggdG8gYHVuc2lnbmVkIGNoYXInLgoKCSogcmVsb2FkLmMgKHB1c2hfc2Vjb25kYXJ5X3JlbG9hZCk6IENhc3QgYXJndW1lbnQgdG8KCVJFR19DTEFTU19GUk9NX0xFVFRFUigpIG1hY3JvIHRvIGB1bnNpZ25lZCBjaGFyJy4KCgkqIHJlbG9hZDEuYyAoY2FsY3VsYXRlX25lZWRzKTogQ2FzdCBgY2hhcicgYXJyYXkgaW5kZXggdG8KCWB1bnNpZ25lZCBjaGFyJy4KCShzZXRfbGFiZWxfb2Zmc2V0cyk6IENoYW5nZSB0eXBlIG9mIHZhcmlhYmxlIGBpJyB0byB1bnNpZ25lZCBpbnQuCglDYXN0IHJlc3VsdCBvZiBYVkVDTEVOKCkgbWFjcm8gdG8gdW5zaWduZWQgd2hlbiBjb21wYXJpbmcgYWdhaW5zdAoJb25lLgoJKG1hcmtfbm90X2VsaW1pbmFibGUpOiBDaGFuZ2UgdHlwZSBvZiB2YXJpYWJsZSBgaScgdG8gdW5zaWduZWQuCgkob3JkZXJfcmVnc19mb3JfcmVsb2FkKTogTGlrZXdpc2UuICBDYXN0IGBtYXhfcmVnbm8nIHRvIHVuc2lnbmVkCgl3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCShyZWxvYWRfYXNfbmVlZGVkKTogQ2FzdCBtYWNybyBOVU1fRUxJTUlOQUJMRV9SRUdTIHRvIChpbnQpIHdoZW4KCWNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCShjaG9vc2VfcmVsb2FkX3JlZ3MpOiBIaWRlIHVudXNlZCBsYWJlbCBgZmFpbCcuCgkocmVsb2FkX2NzZV9zaW1wbGlmeV9vcGVyYW5kcyk6IENhc3QgYGNoYXInIGFycmF5IGluZGV4IHRvCglgdW5zaWduZWQgY2hhcicuCgkocmVsb2FkX2NvbWJpbmVfbm90ZV9zdG9yZSk6IE1hcmsgcGFyYW1ldGVyIGBzZXQnIHdpdGgKCUFUVFJJQlVURV9VTlVTRUQuICBDYXN0IFVOSVRTX1BFUl9XT1JEIHRvIHVuc2lnbmVkIHdoZW4gY29tcGFyaW5nCglhZ2FpbnN0IG9uZS4KCShyZWxvYWRfY3NlX21vdmUyYWRkKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBgc3JjMicuCgoJKiBzY2hlZC5jOiBJbmNsdWRlIHJlY29nLmguCgkoc2NoZWRfbm90ZV9zZXQpOiBSZW1vdmUgdW51c2VkIHBhcmFtZXRlciBgYicuICBBbGwgY2FsbGVycwoJY2hhbmdlZC4KCShzcGxpdF9oYXJkX3JlZ19ub3Rlcyk6IExpa2V3aXNlIGZvciBwYXJhbWV0ZXIgYG9yaWdfaW5zbicuCgkoYmxvY2thZ2VfcmFuZ2UpOiBDYXN0IHJlc3VsdCBvZiBVTklUX0JMT0NLRUQoKSBtYWNybyB0byAoaW50KQoJd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuCgoJKiBzdHVwaWQuYyAoc3R1cGlkX2ZpbmRfcmVnKTogTWFyayBwYXJhbWV0ZXIgYGNoYW5nZXNfc2l6ZScgd2l0aAoJQVRUUklCVVRFX1VOVVNFRC4gIENhc3QgYHNpemVvZicgZXhwcmVzc2lvbiB0byAoaW50KSB3aGVuCgljb21wYXJpbmcgYWdhaW5zdCBvbmUuCgoJKiB1bnJvbGwuYyAocHJlY29uZGl0aW9uX2xvb3BfcCk6IFJlbW92ZSB1bnVzZWQgcGFyYW1ldGVyCglgbG9vcF9lbmQnLiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KClR1ZSBPY3QgMTMgMjI6MTI6MTEgMTk5OCAgQmVybmQgU2NobWlkdCAgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgoKCSogcmVsb2FkMS5jIChtYXliZV9maXhfc3RhY2tfYXNtcyk6IE5ldyBzdGF0aWMgZnVuY3Rpb24uCgkocmVsb2FkKTogQ2FsbCBpdC4KCgkqIHJlbG9hZC5oIChjb21wdXRlX3VzZV9ieV9wc2V1ZG9zKTogRGVjbGFyZS4KCgkqIHJlbG9hZDEuYyAoc3BpbGxlZF9wc2V1ZG9zLCBpbnNuc19uZWVkX3JlbG9hZCk6IE5ldyB2YXJpYWJsZXMuCgkoc29tZXRoaW5nX25lZWRzX3JlbG9hZHMpOiBEZWxldGUgdmFyaWFibGUuCgkoZmluaXNoX3NwaWxscyk6IE5ldyBmdW5jdGlvbi4KCShjb21wdXRlX3VzZV9ieV9wc2V1ZG9zKTogTmV3IGZ1bmN0aW9uLgoKCShkZWxldGVfY2FsbGVyX3NhdmVfaW5zbnMpOiBMb3NlIGFyZ3VtZW50IEZJUlNULiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KCVVzZSB0aGUgcmVsb2FkX2luc25fY2hhaW4gaW5zdGVhZCBvZiB3YWxraW5nIHRoZSBydGwgZGlyZWN0bHkuCgoJKHJlbG9hZCk6IEFsbG9jYXRlIGFuZCBmcmVlIHNwaWxsZWRfcHNldWRvcy4KCUVuc3VyZSB0aGF0IGFsbCBjYWxscyBvZiBzcGlsbF9oYXJkX3JlZyBhcmUgZm9sbG93ZWQgYnkgYSBjYWxsIHRvCglmaW5pc2hfc3BpbGxzLgoJVXNlIHRoZSBpbnNuc19uZWVkX3JlbG9hZCBsaXN0IGluc3RlYWQgb2Ygc29tZXRoaW5nX25lZWRzX3JlbG9hZHMKCXRvIGZpbmQgb3V0IGlmIHJlbG9hZF9hc19uZWVkZWQgbXVzdCBiZSBjYWxsZWQuCglDbGVhciB1bnVzZWRfaW5zbl9jaGFpbnMgYXQgdGhlIGVuZC4KCgkoY2FsY3VsYXRlX25lZWRzX2FsbF9pbnNucyk6IExvc2UgRklSU1QgcGFyYW1ldGVyLiAgQWxsIGNhbGxlcnMKCWNoYW5nZWQuCglEZWxldGUgY29kZSB0byBrZWVwIHRyYWNrIG9mIGN1cnJlbnQgYmFzaWMgYmxvY2suCglXYWxrIHJlbG9hZF9pbnNuX2NoYWluIGluc3RlYWQgb2YgdGhlIHJ0bCBzdHJ1Y3R1cmUuICBCdWlsZCB0aGUKCWluc25zX25lZWRfcmVsb2FkIGNoYWluLgoJUmVtZW1iZXIgd2hpY2ggaW5zbnMgbmVlZCByZWxvYWRpbmcvZWxpbWluYXRpb24gYnkgc2V0dGluZyB0aGUKCWFwcHJvcHJpYXRlIGZpZWxkcyBpbiBzdHJ1Y3QgaW5zbl9jaGFpbiwgbm90IGJ5IHB1dHRpbmcgbW9kZXMgb24gdGhlCglpbnNuLgoKCShjYWxjdWxhdGVfbmVlZHMpOiBMb3NlIFRISVNfQkxPQ0sgYXJnLiAgQWNjZXB0IGFyZyBDSEFJTiBpbnN0ZWFkIG9mCglhcmcgSU5TTi4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCglEZWxldGUgZGVjbGFyYXRpb24gb2Ygc3RydWN0IG5lZWRzLgoJRG9uJ3Qgc2V0IHNvbWV0aGluZ19uZWVkc19yZWxvYWRzLgoJUmVjb3JkIGluc24gbmVlZHMgaW4gdGhlIENIQUlOIGFyZ3VtZW50LgoKCShzcGlsbF9oYXJkX3JlZyk6IFJlY29yZCB0aGUgYWZmZWN0ZWQgcHNldWRvcyBpbiBzcGlsbGVkX3BzZXVkb3MuCgoJKHJlbG9hZF9hc19uZWVkZWQpOiBMb3NlIEZJUlNUIGFyZy4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCglXYWxrIHRoZSByZWxvYWRfaW5zbl9jaGFpbiBpbnN0ZWFkIG9mIHRoZSBydHggc3RydWN0dXJlLgoJRGVsZXRlIGNvZGUgdG8ga2VlcCB0cmFjayBvZiBjdXJyZW50IGJhc2ljIGJsb2NrLgoJUmVuYW1lIG9uZSBvZiB0aGUgTkVYVCB2YXJpYWJsZXMgdG8gT0xEX05FWFQuCgoJKGFsbG9jYXRlX3JlbG9hZF9yZWcpOiBBY2NlcHQgYXJnIENIQUlOIGluc3RlYWQgb2YgYXJnIElOU04uICBBbGwKCWNhbGxlcnMgY2hhbmdlZC4KCShjaG9vc2VfcmVsb2FkX3JlZ3MpOiBMaWtld2lzZS4KCgkoZW1pdF9yZWxvYWRfaW5zbnMpOiBSZXBsYWNlIElOU04gYW5kIEJCIGFyZ3Mgd2l0aCBhcmcgQ0hBSU4uICBBbGwKCWNhbGxlcnMgY2hhbmdlZC4KCgkqIGNhbGxlci1zYXZlLmMgKE1PVkVfTUFYX1dPUkRTKTogTmV3IG1hY3JvLiAgVXNlIGl0IHRocm91Z2hvdXQKCWluc3RlYWQgb2YgKE1PVkVfTUFYIC8gVU5JVFNfUEVSX1dPUkQpIGNvbXB1dGF0aW9uLgoJKGhhcmRfcmVnc19saXZlLCBoYXJkX3JlZ3NfbmVlZF9yZXN0b3JlKTogRGVsZXRlIHZhcmlhYmxlcy4KCShuX3JlZ3Nfc2F2ZWQpOiBOb3cgc3RhdGljLgoJKHJlZmVyZW5jZWRfcmVncywgdGhpc19pbnNuX3NldHMpOiBOZXcgdmFyaWFibGVzLgoKCShzZXR1cF9zYXZlX2FyZWFzKTogUmVzdHJ1Y3R1cmUgdGhlIGNvZGUgYSBiaXQuCgoJKHJlc3RvcmVfcmVmZXJlbmNlZF9yZWdzKTogRGVsZXRlIGZ1bmN0aW9uLgoJKG1hcmtfcmVmZXJlbmNlZF9yZWdzKTogTmV3IGZ1bmN0aW9uLCBzaW1pbGFyIHRvIHRoZSBvbGQKCXJlc3RvcmVfcmVmZXJlbmNlZF9yZWdzLCBidXQgbWFyayByZWdpc3RlcnMgaW4gcmVmZXJlbmNlZF9yZWdzLgoKCShjbGVhcl9yZWdfbGl2ZSk6IERlbGV0ZSBmdW5jdGlvbi4KCShtYXJrX3NldF9yZWdzKTogUmVuYW1lZCBmcm9tIHNldF9yZWdfbGl2ZS4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCglPbmx5IG1hcmsgcmVnaXN0ZXJzIGluIHRoaXNfaW5zbl9zZXRzLgoKCShzYXZlX2NhbGxfY2xvYmJlcmVkX3JlZ3MpOiBSZXdvcmsgdGhpcyBmdW5jdGlvbiB0byB3YWxrIHRoZQoJcmVsb2FkX2luc25fY2hhaW4gaW5zdGVhZCBvZiB1c2luZyB0aGUgbGlzdCBvZiBpbnN0cnVjdGlvbnMgZGlyZWN0bHkuCglEZWxldGUgY29kZSB0byBrZWVwIHRyYWNrIG9mIHJlZ2lzdGVyIGxpdmVzLCBjb21wdXRlIGxpdmUgcmVncyBvbiB0aGUKCWZseSBmcm9tIGluZm9ybWF0aW9uIGluIHRoZSBjaGFpbi4KCUluc3RlYWQgb2YgY2FsbGluZyByZXN0b3JlX3JlZmVyZW5jZWRfcmVncywgdXNlIG1hcmtfcmVmZXJlbmNlZF9yZWdzLAoJdGhlbiB3YWxrIHRoZSBzZXQgaXQgY29tcHV0ZXMgYW5kIGNhbGwgaW5zZXJ0X3Jlc3RvcmUgYXMgYXBwcm9wcmlhdGUuCgoJKGluc2VydF9yZXN0b3JlKTogTG9zZSBJTlNOIGFuZCBCTE9DSyBhcmdzLiAgQWRkIENIQUlOIGFyZy4gIEFsbAoJY2FsbGVycyBjaGFuZ2VkLgoJUmVzdHJ1Y3R1cmUgdGhlIGNvZGUgYSBiaXQuICBUZXN0IGhhcmRfcmVnc19zYXZlZCBpbnN0ZWFkIG9mCgloYXJkX3JlZ3NfbmVlZF9yZXN0b3JlLgoJKGluc2VydF9zYXZlKTogTG9zZSBJTlNOIGFuZCBCTE9DSyBhcmdzLiAgQWRkIENIQUlOIGFuZCBUT19TQVZFCglhcmdzLiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KCVJlc3RydWN0dXJlIHRoZSBjb2RlIGEgYml0LiAgVXNlIFRPX1NBVkUgdG8gZGV0ZXJtaW5lIHdoaWNoIHJlZ3MgdG8KCXNhdmUgaW5zdGVhZCBvZiBtb3JlIGNvbXBsaWNhdGVkIHRlc3QuCgkoaW5zZXJ0X29uZV9hcmcpOiBMb3NlIElOU04gYW5kIEJMT0NLIGFyZ3MuICBBZGQgQ0hBSU4gYXJnLiAgQWxsCgljYWxsZXJzIGNoYW5nZWQuCglDcmVhdGUgYSBuZXcgaW5zbl9jaGFpbiBzdHJ1Y3R1cmUgZm9yIHRoZSBuZXcgaW5zbiBhbmQgcGxhY2UgaXQKCWludG8gdGhlIGNoYWluLgoKCSogcnRsLnRleGk6IFVwZGF0ZSBkb2N1bWVudGF0aW9uIHRvIHJlZmxlY3QgdGhhdCByZWxvYWQgbm8gbG9uZ2VyCglwdXRzIG1vZGVzIG9uIHRoZSBpbnNucy4KCjE5OTgtMTAtMTQgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmNzLnVuaS1kb3J0bXVuZC5kZT4KCgkqIGZ1bmN0aW9uLmMgKHB1cmdlX2FkZHJlc3NvZl8xKTogRm9yY2UgdGhlIGZpcnN0IGFyZ3VtZW50IG9mIGEKCUNBTEwgaW5zbiB0byBtZW1vcnkuCgpXZWQgT2N0IDE0IDAwOjM4OjQwIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHJ0bC5oOiBEZWxldGUgZHVwbGljYXRlIHByb3RvdHlwZXMuICBBZGQgc29tZSBtaXNzaW5nCglwcm90b3R5cGVzLgoJKiBydGxhbmFsLmMgKGZvcl9lYWNoX3J0eCk6IEZvcm1hdHRpbmcgdHdlYWsuCgoxOTk4LTEwLTEzICBIZXJtYW4gQS5KLiB0ZW4gQnJ1Z2dlICA8SGFqLlRlbi5CcnVnZ2VAbmV0LkhDQy5ubD4KCgkqIHJlYWwuYyAoZW1kbm9ybSBhbmQgZXRvYXNjKTogRGlzYWJsZSByb3VuZCB0byBldmVuIGZvciBjNHggdGFyZ2V0Cgl0byBiZSBjb21wYXRpYmxlIHdpdGggVEkgY29tcGlsZXIuCgoJKiBNYWtlZmlsZS5pbiAoVVNFUl9IKTogQWRkIHZhLWM0eC5oIHRvIGRlZmluaXRpb24uCgpUdWUgT2N0IDEzIDIzOjAzOjM3IDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBmdW5jdGlvbi5jIChwdXJnZV9hZGRyZXNzb2ZfMSk6IEZpeCB0eXBvIGluIGluZXF1YWxpdHk6IGRvCgliaXRmaWVsZCBvcHRpbWl6YXRpb24gZm9yIGVxdWFsIG1vZGUgc2l6ZXMuCgkqIGV4cG1lZC5jIChzdG9yZV9iaXRfZmllbGQpOiBEb24ndCB0YWtlIHN1YnJlZ3Mgb2Ygc3VicmVncyBpbgoJdGhlIG1vdnN0cmljdCBjYXNlLiAgVGlkeSBhIHBvdGVudGlhbCBwcm9ibGVtIGluIHRoZSBtdWx0aS13b3JkIGNhc2UuCgkoZXh0cmFjdF9iaXRfZmllbGQpOiBMaWtld2lzZS4KClR1ZSBPY3QgMTMgMjI6MTI6MTEgMTk5OCAgQmVybmQgU2NobWlkdCAgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgoKCSogZmxvdy5jIChmaW5kX2Jhc2ljX2Jsb2Nrcyk6IEVtaXQgTk9QcyBhZnRlciBub3JtYWwgY2FsbHMgaW4gdGhpcwoJZnVuY3Rpb24uCglDb21wdXRlIG1heF91aWRfZm9yX2Zsb3cgYnkgY2FsbGluZyBnZXRfbWF4X3VpZCBhZnRlciB0aGUgc2Nhbi4KCShmaW5kX2Jhc2ljX2Jsb2Nrc18xKTogRG9uJ3QgZW1pdCBOT1BzIGhlcmUuCgpUdWUgT2N0IDEzIDIyOjA1OjQ5IDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbGlhcy5jIChiYXNlX2FsaWFzX2NoZWNrKTogQWNjZXB0IG5ldyBhcmdzIGZvciB0aGUgbW9kZXMgb2YgdGhlCgl0d28gcmVmZXJlbmNlcy4gIFVzZSB0aGVtIHRvIGRldGVybWluZSBpZiBhbiBBTkQgY2FuIG92ZXJsYXAuICBVcGRhdGUKCWFsbCBjYWxsZXJzLgoJKG1lbXJlZnNfY29uZmxpY3RfcCk6IEFzc3VtZSBzaXplcyBhcmUgYWxpZ25lZCwgYW5kIHVzZXMgdGhlbQoJdG8gZGV0ZXJtaW5lIGlmIGFuIEFORCBjYW4gb3ZlcmxhcC4KClR1ZSBPY3QgMTMgMTc6NTE6MDQgMTk5OCAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogY29uZmlnL202OGsvbTY4ay5oIChIQVJEX1JFR05PX01PREVfT0spOiBGb3IgRlAgcmVncywgYWRkIFJFR05PID49IDE2CgljaGVjay4gIEFkZCBjb21tZW50IHRvIGRvY3VtZW50IHByb2JsZW1zIHdpdGggVEFSR0VUX1NVTl9GUEEgdmVyc2lvbgoJb2YgdGhpcyBtYWNyby4KCSogY29uZmlnL202OGsvbTY4ay5tZCAobW92eGYrMSk6IFN1cHBvcnQgJ3InLydyJyBtb3Zlcy4KClR1ZSBPY3QgMTMgMTc6NDY6MTggMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogTWFrZWZpbGUuaW4gKGdlbmNoZWNrLm8pOiBEZXBlbmQgb24gZ2Fuc2lkZWNsLmguCgoJKiBjLWNvbW1vbi5jIChwcmludF9jaGFyX3RhYmxlKTogQWRkIG1pc3NpbmcgaW5pdGlhbGl6ZXJzLgoJKHNjYW5fY2hhcl90YWJsZSk6IExpa2V3aXNlLgoJKHRpbWVfY2hhcl90YWJsZSk6IExpa2V3aXNlLgoKCSogYy1kZWNsLmMgKGNfZGVjb2RlX29wdGlvbik6IE1hcmsgcGFyYW1ldGVyIGBhcmdjJyB3aXRoCglBVFRSSUJVVEVfVU5VU0VELgoJKGRlY2xhcmVfcGFybV9sZXZlbCk6IE1hcmsgcGFyYW1ldGVyIGBkZWZpbml0aW9uX2ZsYWcnIHdpdGgKCUFUVFJJQlVURV9VTlVTRUQuCgoJKiBjLWxleC5jIChyZWFkZXNjYXBlKTogVXNlIGAodW5zaWduZWQpMScgaW4gc2hpZnQuCgkoeXlsZXgpOiBMaWtld2lzZS4gIENhc3QgYHNpemVvZicgdG8gYW4gKGludCkgd2hlbiBjb21wYXJpbmcKCWFnYWluc3Qgb25lLgoKCSogY2FsbHMuYyAoc3RvcmVfb25lX2FyZyk6IFJlbW92ZSB1bnVzZWQgcGFyYW1ldGVyIGBmbmRlY2wnLiAgQWxsCgljYWxsZXJzIGNoYW5nZWQuCgkoZW1pdF9jYWxsXzEpOiBNYXJrIHBhcmFtZXRlcnMgYGZuZGVjbCcgYW5kIGBmdW50eXBlJyB3aXRoCglBVFRSSUJVVEVfVU5VU0VELgoJKGV4cGFuZF9jYWxsKTogQ2FzdCByZXN1bHQgb2YgTUlOKCkgdG8gKHVuc2lnbmVkIGludCkgd2hlbgoJY29tcGFyaW5nIGFnYWluc3QgYW4gdW5zaWduZWQgdmFsdWUuCgoJKiBjY2NwLmMgKHBjZmluY2x1ZGUpOiBSZW1vdmUgdW51c2VkIHBhcmFtZXRlciBgbGltaXQnLiAgQWxsCgljYWxsZXJzIGNoYW5nZWQuCgkobWFrZV9kZWZpbml0aW9uKTogUmVtb3ZlIHVudXNlZCBwYXJhbWV0ZXIgYG9wJy4gIEFsbCBjYWxsZXJzCgljaGFuZ2VkLgoJKGNyZWF0ZV9kZWZpbml0aW9uKTogQ2FzdCBSRVNUX0VYVEVOU0lPTl9MRU5HVEggdG8gKGxvbmcpIHdoZW4KCWNvbXBhcmluZyBhZ2FpbnN0IHRoZSByZXN1bHQgb2YgcG9pbnRlciBhcml0aG1ldGljLgoKCSogY29uZmlnL21pcHMvbWlwcy5oIChGVU5DVElPTl9BUkdfQk9VTkRBUlkpOiBDYXN0IHRvICh1bnNpZ25lZCkKCXdoZW4gY29tcGFyaW5nIGFnYWluc3Qgb25lLgoKCSogZHdhcmYyb3V0LmMgKGR3YXJmMm91dF9mcmFtZV9kZWJ1Zyk6IENhc3QgUkVHTk8oKSBhbmQKCUhBUkRfRlJBTUVfUE9JTlRFUl9SRUdOVU0gdG8gKHVuc2lnbmVkKSB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0CglvbmUuCgkob3V0cHV0X2RpZSk6IE1vdmUgdmFyaWFibGUgYGknIGludG8gdGhlIHNjb3BlIGluIHdoaWNoIGl0IGlzCgl1c2VkLiAgQ2hhbmdlIGl0cyB0eXBlIHRvIGB1bnNpZ25lZCcuCgkob3V0cHV0X2RpZSk6IENhc3QgdGhlIHJlc3VsdCBvZiBgc3RybGVuJyB0byAoaW50KSB3aGVuIHBhc3NpbmcgaXQKCXRvIEFTTV9PVVRQVVRfQVNDSUkoKS4KCShvdXRwdXRfcHVibmFtZXMpOiBMaWtld2lzZS4KCShvdXRwdXRfbGluZV9pbmZvKTogTGlrZXdpc2UuCgoJKiBlbWl0LXJ0bC5jIChnbG9iYWxfcnRsKTogQWRkIG1pc3NpbmcgaW5pdGlhbGl6ZXJzLgoKCSogZXhwbG93LmMgKHByb21vdGVfbW9kZSk6IE1hcmsgcGFyYW1ldGVyIGBmb3JfY2FsbCcgd2l0aAoJQVRUUklCVVRFX1VOVVNFRC4KCgkqIGV4cG1lZC5jIChleHBhbmRfc2hpZnQpOiBDYXN0IHRoZSByZXN1bHQgb2YgR0VUX01PREVfQklUU0laRSB0bwoJYHVuc2lnbmVkIEhPU1RfV0lERV9JTlQnIHdoZW4gY29tcGFyaW5nIGFnYWluc3Qgb25lLgoJKHN5bnRoX211bHQpOiBDaGFuZ2UgdHlwZSBvZiB2YXJpYWJsZSBgY29zdCcgdG8gaW50LgoJKGVtaXRfc3RvcmVfZmxhZyk6IFVzZSBgKHVuc2lnbmVkIEhPU1RfV0lERV9JTlQpIDEnIGluIHNoaWZ0LgoKCSogZXhwci5jIChjb3B5X2Jsa21vZGVfZnJvbV9yZWcpOiBDYXN0IEJJVFNfUEVSX1dPUkQgdG8gKHVuc2lnbmVkKQoJd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuCgkoZ2V0X2lubmVyX3JlZmVyZW5jZSk6IENoYW5nZSB2YXJpYWJsZSBgYWxpZ25tZW50JyB0byB1bnNpZ25lZC4KCShleHBhbmRfZXhwcik6IENhc3QgdGhlIHJlc3VsdCBvZiBHRVRfTU9ERV9BTElHTk1FTlQgdG8gKHVuc2lnbmVkCglpbnQpIHdoZW4gY29tcGFyaW5nIGFnYWluc3Qgb25lLgoJKGV4cGFuZF9idWlsdGluX3NldGptcCk6IENoYW5nZSB0eXBlIG9mIHZhcmlhYmxlIGBpJyB0byBzaXplX3QuCgoJKiBmb2xkLWNvbnN0LmMgKGRpdl9hbmRfcm91bmRfZG91YmxlKTogQ2FzdCBCQVNFIHRvCgkoSE9TVF9XSURFX0lOVCkgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuCgoJKiBnZW5jaGVjay5jOiBJbmNsdWRlIGdhbnNpZGVjbC5oLgoJKG1haW4pOiBNYXJrIHBhcmFtZXRlciBgYXJndicgd2l0aCBBVFRSSUJVVEVfVU5VU0VELgoKCSogb3B0YWJzLmMgKGdlbl9jb25kX3RyYXApOiBNYXJrIHBhcmFtZXRlcnMgYGNvZGUnLCBgb3AyJyBhbmQKCWB0Y29kZScgd2l0aCBBVFRSSUJVVEVfVU5VU0VELgoKCSogcmVhbC5jIChlZGl2bSk6IENhc3QgY29uc3RhbnQgdmFsdWUgdG8gKHVuc2lnbmVkIGxvbmcpIGluCglleHByZXNzaW9uIGNvbXBhcmVkIGFnYWluc3QgYW4gdW5zaWduZWQgdmFsdWUuCgoJKiBzdG10LmMgKGV4cGFuZF9yZXR1cm4pOiBDYXN0IEJJVFNfUEVSX1dPUkQgdG8gKHVuc2lnbmVkKSB3aGVuCgljb21wYXJpbmcgYWdhaW5zdCBvbmUuCgkoZXhwYW5kX2VuZF9jYXNlKTogQ2FzdCBDQVNFX1ZBTFVFU19USFJFU0hPTEQgdG8gKHVuc2lnbmVkIGludCkKCXdoZW4gY29tcGFyaW5nIGFnYWluc3Qgb25lLgoKCSogc3Rvci1sYXlvdXQuYyAobW9kZV9mb3Jfc2l6ZSk6IENhc3QgTUFYX0ZJWEVEX01PREVfU0laRSB0bwoJKHVuc2lnbmVkIGludCkgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuICBMaWtld2lzZSBmb3IKCUdFVF9NT0RFX0JJVFNJWkUuCgkoc21hbGxlc3RfbW9kZV9mb3Jfc2l6ZSk6IExpa2V3aXNlLgoJKHNhdmVfc3RvcmFnZV9zdGF0dXMpOiBNYXJrIHBhcmFtZXRlciBgcCcgd2l0aCBBVFRSSUJVVEVfVU5VU0VELgoJKHJlc3RvcmVfc3RvcmFnZV9zdGF0dXMpOiBMaWtld2lzZS4KCgkqIHRvcGxldi5jIChkZWJ1Z19hcmdzKTogQWRkIG1pc3NpbmcgaW5pdGlhbGl6ZXIuCgkoZl9vcHRpb25zKTogU3BlbGxpbmcgY29ycmVjdGlvbi4gIEFkZCBtaXNzaW5nIGluaXRpYWxpemVycy4KCShkb2N1bWVudGVkX2xhbmdfb3B0aW9ucyk6IExpa2V3aXNlLgoJKGRlYnVnX2VuZF9zb3VyY2VfZmlsZSk6IE1hcmsgcGFyYW1ldGVyIGBsaW5lbm8nIHdpdGgKCUFUVFJJQlVURV9VTlVTRUQuCgoJKiB0cmVlLmMgKHZhbGlkX21hY2hpbmVfYXR0cmlidXRlKTogTWFyayBwYXJhbWV0ZXJzIGBhdHRyX2FyZ3MnLAoJYGRlY2wnIGFuZCBgdHlwZScgd2l0aCBBVFRSSUJVVEVfVU5VU0VELgoKCSogdmFyYXNtLmMgKGRlY29kZV9yZWdfbmFtZSk6IENhc3QgYHNpemVvZicgZXhwcmVzc2lvbiB0byAoaW50KQoJd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuCgkoYXNzZW1ibGVfdmFyaWFibGUpOiBNYXJrIHBhcmFtZXRlciBgdG9wX2xldmVsJyB3aXRoCglBVFRSSUJVVEVfVU5VU0VELgoJKGFzc2VtYmxlX2V4dGVybmFsX2xpYmNhbGwpOiBNYXJrIHBhcmFtZXRlciBgZnVuJyB3aXRoCglBVFRSSUJVVEVfVU5VU0VELgoJKG91dHB1dF9jb25zdGFudF9wb29sKTogTWFyayBwYXJhbWV0ZXJzIGBmbm5hbWUnIGFuZCBgZm5kZWNsJyB3aXRoCglBVFRSSUJVVEVfVU5VU0VELgoKVHVlIE9jdCAxMyAxMjo1MTowNCAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL3Y4NTAvbGliMWZ1bmNzLmFzbSAoX3VkaXZzaTMpOiBBZGQgLnR5cGUgZGVjbGFyYXRpb24uCglSZXBsYWNlIHVzZSBvZiByNSB3aXRoIHVzZSBvZiByMTkuCgoJKiBjb25maWcvdjg1MC92ODUwLmggKExJTktfUE9JTlRFUl9SRUdOVU0pOiBEZWZpbmUuCgoJKiBjb25maWcvdjg1MC92ODUwLmMgKGNvbXB1dGVfcmVnaXN0ZXJfc2F2ZV9zaXplKTogQWxsb3cgZm9yIHRoZQoJZmFjdCB0aGF0IGhlbHBlciBmdW5jdGlvbnMgc2F2ZSBhbGwgcmVnaXN0ZXJzLCBub3QganVzdCB0aG9zZSB1c2VkCglieSB0aGUgZnVuY3Rpb24uCgoJUmVwbGFjZSBjb25zdGFudCAzMSB3aXRoIG1hY3JvIExJTktfUE9JTlRFUl9SRUdOVU0uCgoJKiBjb25maWcvdjg1MC92ODUwLm1kOiBVc2UgJ2luZGlyZWN0X29wZXJhbmQnIHJhdGhlciB0aGFuCgknbWVtb3J5X29wZXJhbmQnIGZvciBiaXQgdGVzdC9zZXQvY2xlYXIgcGF0dGVybnMuCgpUdWUgT2N0IDEzIDExOjQ5OjE0IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIG1pcHMvaXJpczYuaCAoQVNNX09VVFBVVF9XRUFLX0FMSUFTKTogQ2FsbCBBU01fR0xPQkFMSVpFX0xBQkVMLgoJKiB2YXJhc20uYyAoYXNzZW1ibGVfc3RhcnRfZnVuY3Rpb24gZXQgYWwpOiBEb24ndCBjYWxsCglBU01fR0xPQkFMSVpFX0xBQkVMIGZvciB3ZWFrIHN5bWJvbHMuCgpUdWUgT2N0IDEzIDExOjM3OjQ1IDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjc2UuYyAoZXF1aXZfY29uc3RhbnQpOiBDaGVjayBmb3IgTlVMTCByZXR1cm4gZnJvbQoJZ2VuX2xvd3BhcnRfaWZfcG9zc2libGUoKS4KClR1ZSBPY3QgMTMgMTE6MjQ6NTEgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbW4xMDIwMC5tZCAoYWRkc2kzLCBzdWJzaTMsIG5lZ3NpMik6IE9ubHkgYWxsb3cgcmVnaXN0ZXIgb3BlcmFuZHMuCgoJKiBjb2xsZWN0Mi5jIChtYWluKTogUGFzcyAtRUwvLUVCIHRocm91Z2ggdG8gdGhlIGNvbXBpbGVyLgoKMTk5OC0xMC0xMiAgSGVybWFuIEEuSi4gdGVuIEJydWdnZSAgPEhhai5UZW4uQnJ1Z2dlQG5ldC5IQ0Mubmw+CgoJKiBleHByLmMgKHB1c2hfYmxvY2spOiBIYW5kbGUgdGFyZ2V0cyB3aGVyZSB0aGUgc3RhY2sgZ3Jvd3MKCXRvIGhpZ2hlciBhZGRyZXNzZXMsIGJ1dCBhcmdzIGdyb3cgdG8gbG93ZXIgYWRkcmVzc2VzIGFuZAoJQUNDVU1VTEFURV9PVVRHT0lOR19BUkdTIGlzIG5vdCBkZWZpbmVkLgoKVHVlIE9jdCAxMyAwODowMDo1MiAxOTk4ICBDYXRoZXJpbmUgTW9vcmUgIDxjbG1AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy92ODUwL3Y4NTAuYyAocHJpbnRfb3BlcmFuZCk6IEV4dGVuZCBtZWFuaW5nCglvZiAnYycgb3BlcmFuZHMgdG8gc3VwcG9ydCAudnRpbmhlcml0LgoKVHVlIE9jdCAxMyAyMTozODozNSAxOTk4ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWcvYzR4L2M0eC5jOiBDb252ZXJ0IHRvIGdlbl9ydHhfRk9PLgoJQWRkZWQgQVRUUklCVVRFX1VOVVNFRCB0byB1bnVzZWQgZnVuY3Rpb24gYXJndW1lbnRzLgoJKHJjX3JlZ19vcGVyYW5kKTogTmV3IHByZWRpY2F0ZS4KCShjNHhfcnB0Yl9pbnNlcnQpOiBOZXcgZnVuY3Rpb24uCgkoYzR4X3JwdGJfbm9wX3ApOiBSZWNvZ25pemUgbW9kaWZpZWQgcnB0Yl90b3AgcGF0dGVybi4KCShjNHhfb3B0aW1pemF0aW9uX29wdGlvbnMpOiBOZXcgZnVuY3Rpb24uCgoJKiBjb25maWcvYzR4L2M0eC5tZDogQ29udmVydCB0byBnZW5fcnR4X0ZPTy4KCSAoZGVjcmVtZW50X2FuZF9icmFuY2hfb25fY291bnQpOiBOZXcgcGF0dGVybi4KCSAocnB0Yl90b3ApOiBNb2RpZmllZCBwYXR0ZXJuIHRvIHdvcmsgd2l0aCBCQ1Qgb3B0aW1pemF0aW9uLgoKCSogY29uZmlnL2M0eC9jNHguaCAoUkNfUkVHKTogTmV3IHJlZ2lzdGVyIGNsYXNzLgoJKHJjX3JlZ19vcGVyYW5kKTogRGVmaW5lIHByb3RvdHlwZS4KCShJU19SQ19SRUcpOiBOZXcgbWFjcm8uCgkoSVNfUkNfT1JfUFNFVURPX1JFRyk6IE5ldyBtYWNyby4KCShJU19SQ19PUl9QU0VVRE9fUkVHTk8pOiBOZXcgbWFjcm8uCgkoT1BUSU1JWkFUSU9OX09QVElPTlMpOiBEZWZpbmUuCgpNb24gT2N0IDEyIDE5OjU3OjM0IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNvbGxlY3QyLmMgKGV4dHJhY3RfaW5pdF9wcmlvcml0eSk6IE5vIHByaW9yaXR5IGlzIDY1NTM1LgoKTW9uIE9jdCAxMiAxMjoxMDozNyAxOTk4ICBBbGV4YW5kcmUgT2xpdmEgIDxvbGl2YUBkY2MudW5pY2FtcC5icj4KCgkqIE1ha2VmaWxlLmluIChidWlsZF90b29sZGlyKTogTmV3IHZhcmlhYmxlLCBzYW1lIGFzIG9sZAoJJCh0b29sZGlyKSwgYnV0IHdpdGhvdXQgZGVwZW5kaW5nIG9uICQobGliZGlyKS8kKHVubGlic3ViZGlyKS4KCShHQ0NfRk9SX1RBUkdFVCk6IEFkZCAtQiQoYnVpbGRfdG9vbGRpcikvYmluLy4KCShib290c3RyYXAsIGJvb3RzdHJhcDIsIGJvb3RzdHJhcDMsIGJvb3RzdHJhcDQpOiBMaWtld2lzZS4KCgkqIGNvbmZpZ3VyZS5pbiAoZ3h4X2luY2x1ZGVfZGlyKTogU2V0IGRlZmF1bHQgYmFzZWQgb24gdW5saWJzdWJkaXIuCgkqIE1ha2VmaWxlLmluICh0b29sZGlyKTogTGlrZXdpc2UuCgkoY2NjcC5vLCBjcHBsaWIubyk6IFVzZSB1bmxpYnN1YmRpciBpbXBsaWNpdGx5IHRocm91Z2gKCWd4eF9pbmNsdWRlX2RpciwgaW5jbHVkZWRpciBhbmQgdG9vbGRpci4KCShwcm90b2l6ZS5vLCB1bnByb3RvaXplLm8pOiBMaWtld2lzZS4KCk1vbiBPY3QgMTIgMTA6NTA6NDQgMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9hcm0vYXJtLm1kOiBSZXBsYWNlIChyZWcgMjQpIHdpdGggKHJlZzpDQyAyNCkuCgoJKiBjb25maWcvYXJtL3RodW1iLmMgKHRodW1iX292ZXJyaWRlX29wdGlvbnMpOiBBZGQgd2FybmluZyBhYm91dAoJUElDIGNvZGUgbm90IGJlaW5nIHN1cHBvcnRlZCBqdXN0IHlldC4KClN1biBPY3QgMTEgMTY6NDk6MTUgMTk5OCAgSm9obiBXZWhsZSAgKGpvaG5AZmVpdGguY29tKQoKCSogZmxvdy5jOiBVcGRhdGUgY29tbWVudC4KCShub3RpY2Vfc3RhY2tfcG9pbnRlcl9tb2RpZmljYXRpb24pOiBOZXcgc3RhdGljIGZ1bmN0aW9uLgoJKHJlY29yZF92b2xhdGlsZV9pbnNucyk6IFVzZSBpdC4KCShtYXJrX3JlZ3NfbGl2ZV9hdF9lbmQpOiBNYXJrIHRoZSBzdGFjayBwb2ludGVyIGFzIGFsaXZlCglhdCB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbiBpZiBjdXJyZW50X2Z1bmN0aW9uX3NwX2lzX3VuY2hhbmdpbmcKCWlzIHNldC4KCShsaWZlX2FuYWx5c2lzXzEpOiBTZXQgY3VycmVudF9mdW5jdGlvbl9zcF9pc191bmNoYW5naW5nLgoJKiBmdW5jdGlvbi5jOiBEZWZpbmUgaXQuCgkoaW5pdF9mdW5jdGlvbl9zdGFydCk6IEluaXRpYWxpemUgaXQuCgkqIG91dHB1dC5oOiBEZWNsYXJlIGl0LgoJKiByZW9yZy5jIChmaWxsX3NpbXBsZV9kZWxheV9zbG90cywgZGJyX3NjaGVkdWxlKTogTWFyawoJdGhlIHN0YWNrIHBvaW50ZXIgYXMgYWxpdmUgYXQgdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24gaWYKCWN1cnJlbnRfZnVuY3Rpb25fc3BfaXNfdW5jaGFuZ2luZyBpcyBzZXQuCgkqIGkzODYuYyAoaXg4Nl9lcGlsb2d1ZSk6IE9wdGltaXplIHRoZSByZXN0b3JpbmcKCW9mIHRoZSBzdGFjayBwb2ludGVyLgoKTW9uIE9jdCAxMiAwMToyMjo1MyAxOTk4ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KClN1biBPY3QgMTEgMjM6MDQ6MzAgMTk5OCAgUm9iZXJ0IExpcGUgIDxyb2JlcnRsQGRnaWkuY29tPgoKCSogYy1wcmFnbWEuYyAoaGFuZGxlX3ByYWdtYV90b2tlbik6IElmIHBhc3NlZCBhIHRva2VuIGluc3RlYWQKCW9mIGEgdHJlZSwgdXNlIHRoYXQgYXMgdGhlIHBhY2sgdmFsdWUuCgpTdW4gT2N0IDExIDE0OjIxOjE0IDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBmbG93LmMgKGZpbmRfYmFzaWNfYmxvY2tzXzEpOiBGaXggcHJvdG90eXBlLgoKU3VuIE9jdCAxMSAwNTowMzo0MSAxOTk4ICBLZW4gUmFlYnVybiAgPHJhZWJ1cm5AY3lnbnVzLmNvbT4KCgkqIHRyZWUuaCAoREVDTF9OT19DSEVDS19NRU1PUllfVVNBR0UpOiBOZXcgbWFjcm9zLgoJKHN0cnVjdCB0cmVlX2RlY2wpOiBOZXcgZmllbGRzIG5vX2NoZWNrX21lbW9yeV91c2FnZS4KCSogYy1jb21tb24uYyAoZW51bSBhdHRycyk6IEFkZCBBX05PX0NIRUNLX01FTU9SWV9VU0FHRS4KCShpbml0X2F0dHJpYnV0ZXMpOiBSZWdpc3RlciBpdCBhcyBhIG5ldyBhdHRyaWJ1dGUuCgkoZGVjbF9hdHRyaWJ1dGVzKTogU2V0IGZsYWdzIG9uIGZ1bmN0aW9ucyBnaXZlbiB0aGF0IGF0dHJpYnV0ZS4KCSogYy1kZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IE1lcmdlIG5ldyBhdHRyaWJ1dGUuCgkqIGV4cHIuaCAoY3VycmVudF9mdW5jdGlvbl9jaGVja19tZW1vcnlfdXNhZ2UpOiBEZWNsYXJlIG5ldyB2YXIuCgkqIGNhbGxzLmMsIGV4cHIuYywgZnVuY3Rpb24uYywgc3RtdC5jLCBhbHBoYS5jLCBjbGlwcGVyLmMsIG04OGsuYywKCXBhLmMsIHNwYXJjLmM6IFJlcGxhY2UgdXNlcyBvZiBmbGFnX2NoZWNrX21lbW9yeV91c2FnZSB3aXRoCgljdXJyZW50X2Z1bmN0aW9uX2NoZWNrX21lbW9yeV91c2FnZS4KCSogZnVuY3Rpb24uaDogQWRkIGZpZWxkIHRvIHN0cnVjdCBmdW5jdGlvbi4KCSogZnVuY3Rpb24uYyAoY3VycmVudF9mdW5jdGlvbl9jaGVja19tZW1vcnlfdXNhZ2UpOiBEZWZpbmUgaXQuCgkocHVzaF9mdW5jdGlvbl9jb250ZXh0X3RvLCBwb3BfZnVuY3Rpb25fY29udGV4dF9mcm9tKTogU2F2ZSBhbmQKCXJlc3RvcmUgaXQuCgkoZXhwYW5kX2Z1bmN0aW9uX3N0YXJ0KTogU2V0IGl0LCBiYXNlZCBvbiBnbG9iYWwgZmxhZyBhbmQgZnVuY3Rpb24KCWF0dHJpYnV0ZS4KCgkqIGV4cHIuYyAoZXhwYW5kX2V4cHIsIGNhc2UgVkFSX0RFQ0wpOiBJbiBtZW1vcnktY2hlY2tpbmcgY29kZSwgZG8KCWNoZWNrIG5vbi1hdXRvbWF0aWMgdmFyaWFibGVzLCB0byBwZXJtaXQgZGV0ZWN0aW9uIG9mIHdyaXRlcyB0bwoJcmVhZC1vbmx5IGxvY2F0aW9ucyBpbiBlbWJlZGRlZCBzeXN0ZW1zIHdpdGhvdXQgbWVtb3J5IG1hbmFnZW1lbnQuCgkqIGNhbGxzLmMgKHN0b3JlX29uZV9hcmcpOiBVc2UgQVJHU19TSVpFX1JUWCB0byBnZXQgc2l6ZSBvZiBhcmd1bWVudAoJd2hlbiBlbWl0dGluZyBjaGtyX3NldF9yaWdodF9saWJmdW5jIGNhbGwsIGV2ZW4gaWYgdGhlIGFyZ3VtZW50IGlzCglCTEttb2RlIG9yIHZhcmlhYmxlLXNpemVkOyBkb24ndCBhYm9ydC4KCgkqIG9wdGFicy5jIChpbml0X29wdGFicyk6IENyZWF0ZSBDaGVja2VyIGFuZCBfX2N5Z19wcm9maWxlXyoKCXN5bWJvbHMgaW4gUG1vZGUsIG5vdCBWT0lEbW9kZS4KClN1biBPY3QgMTEgMDE6MDM6MDUgMTk5OCAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5waHlzLmNvbHVtYmlhLmVkdT4KCgkqIGNwcGV4cC5jOiBXaGVuIGZvcmNpbmcgdW5zaWduZWQgY29tcGFyaXNvbnMsIGNhc3QgYm90aCBzaWRlcwoJb2YgdGhlIG9wZXJhdGlvbi4KCgkqIGNwcGhhc2guaDogTW92ZSBzdGF0aWMgZGVjbGFyYXRpb24gb2YgaGFzaHRhYltdLi4uCgkqIGNwcGhhc2guYzogLi4uaGVyZS4KCgkqIGNwcGxpYi5jOiBDYXN0IGRpZmZlcmVuY2Ugb2YgdHdvIHBvaW50ZXJzIHRvIHNpemVfdCBiZWZvcmUKCWNvbXBhcmluZyBpdCB0byBzaXplX3QuICBDYXN0IHNpZ25lZCB0byB1bnNpZ25lZAoJYmVmb3JlIGNvbXBhcmluZyB0byBzaXplX3QuIChGSVhNRTogc3RydWN0IGFyZ2RhdGEgc2hvdWxkIHVzZQoJdW5zaWduZWQgYnVmZmVyIHNpemVzLikKCSogY3BwbGliLmggKHN0cnVjdCBjcHBfcmVhZGVyKTogRGVjbGFyZSB0b2tlbl9idWZmZXJfc2l6ZSBhcwoJdW5zaWduZWQgaW50LiAoQ1BQX1dSSVRURU4pOiBDYXN0IHJldHVybiB2YWx1ZSB0byBzaXplX3QuCgkoQ1BQX1JFU0VSVkUpOiBQYXJlbnRoZXNpemUgTiBmb3IgZXZhbHVhdGlvbiBvcmRlciwgY2FzdCB0bwoJc2l6ZV90IGJlZm9yZSBjb21wYXJpc29uLgoKU3VuIE9jdCAxMSAwMDoxNToyOSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBmbG93LmMgKGZpbmRfYmFzaWNfYmxvY2tzKTogRGVsZXRlICJsaXZlX3JlYWNoYWJsZV9wIiBhcmd1bWVudC4KCShmaW5kX2Jhc2ljX2Jsb2Nrc18xKTogU2ltaWxhcmx5LgoJKiBvdXRwdXQuaCAoZmluZF9iYXNpY19ibG9ja3MpOiBGaXggcHJvdG90eXBlLgoJKiBnY3NlLmMsIHRvcGxldi5jOiBEb24ndCBwYXNzICJsaXZlX3JlYWNoYWJsZV9wIiBhcmd1bWVudCB0bwoJZmluZF9iYXNpY19ibG9ja3MgYW55bW9yZS4KClNhdCBPY3QgMTAgMjI6MDA6MzQgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGJhc2ljLWJsb2NrLmggKEVYRUNVVEVfSUZfU0VUX0lOX1NCSVRNQVApOiBOZXcgbWFjcm8uCgkoc2JpdG1hcF9mcmVlLCBzYml0bWFwX3ZlY3Rvcl9mcmVlKTogTmV3IG1hY3Jvcy4KCSogb3V0cHV0LmggKHJ0bF9kdW1wX2ZpbGUpOiBEZWNsYXJlLgoKU2F0IE9jdCAxMCAxNzowMTo0MiAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiByZWdtb3ZlLmMgKG9wdGltaXplX3JlZ19jb3B5XzMpOiBIb25vciBUUlVMWV9OT09QX1RSVU5DQVRJT04uCgpGcmkgT2N0ICA5IDIyOjA4OjA1IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGZwLWJpdC5jIChTRnR5cGUpOiBEb24ndCBpbXBsaWNpdGx5IHVzZSBpbnQgaW4gZGVjbGFyYXRpb24uCgkoREZ0eXBlKTogTGlrZXdpc2UuCgkoX2ZwZGl2X3BhcnRzKTogUmVtb3ZlIHVudXNlZCBwYXJhbWV0ZXIgYHRtcCcsIGFsbCBjYWxsZXJzIGNoYW5nZWQuCgkoZGl2aWRlKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBgdG1wJy4KCShzaV90b19mbG9hdCk6IENhc3QgbnVtZXJpYyBjb25zdGFudCB0byAoU0l0eXBlKSBiZWZvcmUgY29tcGFyaW5nCglpdCBhZ2FpbnN0IG9uZS4KCkZyaSBPY3QgIDkgMTY6MDM6MTkgMTk5OCAgR3JhaGFtICA8Z3JhaGFtc0ByY3AuY28udWs+CgoJKiBmbG93LmMgKHByaW50X3J0bF93aXRoX2JiKTogQ2hhbmdlZCB0eXBlIG9mIGluX2JiX3AgdG8gbWF0Y2ggdXNlLgoJKiBnY2MuYyAoYWRkX3ByZXByb2Nlc3Nvcl9vcHRpb24pOiBDb3JyZWN0IHR5cG8gd2hlbiBhbGxvY2F0aW5nCgltZW1vcnksIHNpemVvZigpIGFyZ3VtZW50IGhhZCBvbmUgdG9vIG1hbnkgYConLgoJKGFkZF9hc3NlbWJsZXJfb3B0aW9uKTogTGlrZXdpc2UuCgkoYWRkX2xpbmtlcl9vcHRpb24pOiBMaWtld2lzZS4KCSogZ2Nvdi5jIChvdXRwdXRfZGF0YSk6IExpa2V3aXNlLgoJKiBsb2NhbC1hbGxvYy5jIChtZW1yZWZfdXNlZF9iZXR3ZWVuX3ApOiBMaWtld2lzZS4KCSh1cGRhdGVfZXF1aXZfcmVncyk6IExpa2V3aXNlLgoJKiBsb29wLmMgKHN0cmVuZ3RoX3JlZHVjZSk6IExpa2V3aXNlLgoJKiByZWctc3RhY2suYyAocmVjb3JkX2FzbV9yZWdfbGlmZSk6IExpa2V3aXNlLgoJKHN1YnN0X2FzbV9zdGFja19yZWcpOiBMaWtld2lzZS4KCSogcmVvcmcuYyAoZGJyX3NjaGVkdWxlKTogTGlrZXdpc2UuCgpGcmkgT2N0ICA5IDE1OjU3OjUxIDE5OTggIEJlcm5kIFNjaG1pZHQgIDxjcnV4QFBvb2wuSW5mb3JtYXRpay5SV1RILUFhY2hlbi5ERT4KCgkqIGZsb3cuYyAobGlmZV9hbmFseXNpc18xKTogQnJlYWsgb3V0IHNvbWUgZnVuY3Rpb25zLgoJKGZpbmRfYmFzaWNfYmxvY2tzXzEpOiBMaWtld2lzZS4gIEFsc28gbW92ZSBzb21lIHZhcmlhYmxlcyBvdXQgYW5kCgltYWtlIHRoZW0gc3RhdGljLgoJUmVuYW1lIE5PTkxPQ0FMX0xBQkVMX0xJU1QgYXJnIHRvIE5PTkxPQ0FMX0xBQkVMUyBhbmQgaW5pdGlhbGl6ZQoJbmV3IHN0YXRpYyB2YXIgbm9ubG9jYWxfbGFiZWxfbGlzdCB3aXRoIGl0LgoJKGFjdGl2ZV9laF9yZWdpb24sIG5lc3RlZF9laF9yZWdpb24sIGxhYmVsX3ZhbHVlX2xpc3QsCglub25sb2NhbF9sYWJlbF9saXN0KTogTmV3IHN0YXRpYyB2YXJpYWJsZXMuCgkobWFrZV9lZGdlcywgZGVsZXRlX3VucmVhY2hhYmxlX2Jsb2NrcywgZGVsZXRlX2Jsb2NrKTogTmV3IHN0YXRpYwoJZnVuY3Rpb25zLCBicm9rZW4gb3V0IG9mIGZpbmRfYmFzaWNfYmxvY2tzXzEuCgkocmVjb3JkX3ZvbGF0aWxlX2luc25zLCBtYXJrX3JlZ3NfbGl2ZV9hdF9lbmQsIHNldF9ub29wX3AsCglub29wX21vdmVfcCk6IE5ldyBzdGF0aWMgZnVuY3Rpb25zLCBicm9rZW4gb3V0IG9mIGxpZmVfYW5hbHlzaXNfMS4KCkZyaSBPY3QgIDkgMTU6NDk6MjkgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGV4cG1lZC5jIChzdG9yZV9iaXRfZmllbGQpOiBQdW4gbm9uLWludGVncmFsIHN0cl9ydHggbW9kZXMuCglUYWtlIGV4dHJhIGNhcmUgZm9yIG9wMCBub3cgcG9zc2libHkgYmVpbmcgYSBzdWJyZWcuCgkoZXh0cmFjdF9iaXRfZmllbGQpOiBMaWtld2lzZS4KCSogZnVuY3Rpb24uYyAocHVyZ2VfYWRkcmVzc29mXzEpOiBSZXZlcnQgT2N0IDQgY2hhbmdlLiAgRHJvcAoJdGhlIHJlZyB0byBtZW1vcnkgaWYgdGhlcmUgaXMgbm8gZXF1YWwgc2l6ZWQgaW50ZWdyYWwgbW9kZS4KCSogc3Rvci1sYXlvdXQuYyAoaW50X21vZGVfZm9yX21vZGUpOiBOZXcgZnVuY3Rpb24uCgkqIG1hY2htb2RlLmg6IFByb3RvdHlwZSBpdC4KCkZyaSBPY3QgIDkgMTQ6MjY6NDQgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZ2xvYmFsLmMgKGJ1aWxkX2luc25fY2hhaW4pOiBWZXJpZnkgbm8gcmVhbCBpbnNucyBleGlzdCBwYXN0IHRoZQoJZW5kIG9mIHRoZSBsYXN0IGJhc2ljIGJsb2NrLCB0aGVuIGV4aXQgdGhlIGxvb3AuCgpGcmkgT2N0ICA5IDExOjQ0OjQ3IDE5OTggIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIGxvb3AuYyAoaW5zZXJ0X2JjdCk6IEVuc3VyZSBsb29wX2l0ZXJhdGlvbl92YXIgbm9uLXplcm8gYmVmb3JlIHVzZS4KClRodSBPY3QgIDggMjE6NTk6NDcgMTk5OCAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKCSogZW1pdC1ydGwuYyAoaW5pdF9lbWl0X29uY2UpOiBDYWxsIElOSVRfRVhQQU5ERVJTLgoKVGh1IE9jdCAgOCAyMjowMzo0NSAxOTk4ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiByczYwMDAuaCAoUlRYX0NPU1RTKTogQWRkIFBST0NFU1NPUl9QUEM2MDRlIGNhc2VzLgoKVGh1IE9jdCAgOCAxNzowMDoxOCAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZmxvdy5jIChmaW5kX2Jhc2ljX2Jsb2Nrcyk6IENvcnJlY3RseSBkZXRlcm1pbmUgd2hlbiBhIGNhbGwKCWlzIHdpdGhpbiBhbiBleGNlcHRpb24gcmVnaW9uLgoKVGh1IE9jdCAgOCAxNzoxNTowNCAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB0b3BsZXYuYyAob3V0cHV0X2ZpbGVfZGlyZWN0aXZlKTogVXNlIERJUl9TRVBBUkFUT1IsIG5vdCAnLycuCgoJKiBjcHBsaWIuaDogUHJvdGVjdCBmcm9tIG11bHRpcGxlIGluY2x1c2lvbnMuCgkqIGNwcGxpYi5jOiBGaXggbWlub3IgZm9ybWF0dGluZyBwcm9ibGVtcy4KCgkqIGkzODYveG0tY3lnd2luMzIuaDogT25seSBkZWZpbmUgUE9TSVggaWYgaXQgaXMgbm90IGFscmVhZHkgZGVmaW5lZC4KCgkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IFJldmVydCBhY2NpZGVudGFsIHBhdGNoLgoKCSogTWFrZWZpbGUuaW4gKGNwcGxpYi5vKTogVXNlIHVubGlic3ViZGlyLgoKVGh1IE9jdCAgOCAxMjo1MDo0NyAxOTk4ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBsb29wLmMgKGdldF9jb25kaXRpb24pOiBBbGxvdyBjb21iaW5lIHdoZW4gZWl0aGVyIGNvbXBhcmUgaXMKCVZPSURtb2RlLgoKVGh1IE9jdCAgOCAxMTozMTowMSAxOTk4ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KClRodSBPY3QgIDggMTI6MjE6MTQgMTk5OCAgUmljaGFyZCBGcml0aC1NYWNkb25hbGQgIDxyaWNoYXJkQGJyYWluc3Rvcm0uY28udWs+CgoJKiBjLWxleC5jIChyZW1lbWJlcl9wcm90b2NvbF9xdWFsaWZpZXJzKTogSGFuZGxlIFJJRF9CWVJFRi4KCShpbml0X2xleCk6IEluaXRpYWxpemUgcmlkcG9pbnRlcnNbUklEX0JZUkVGXS4KCSogYy1sZXguaCAoZW51bSByaWQpOiBBZGQgUklEX0JZUkVGLgoJKiBjLXBhcnNlLmdwZXJmOiBBZGQgUklEX0JZUkVGIGFzIGEgdHlwZSBxdWFsaWZpZXIuCgkqIG9iamMvb2JqYy1hY3QuYyAoaXNfb2JqY190eXBlX3F1YWxpZmllcnMpOiBIYW5kbGUgUklEX0JZUkVGLgoJKGVuY29kZV90eXBlX3F1YWxpZmllcnMpOiBTaW1pbGFybHkuCgkqIGMtZ3BlcmYuaDogUmVidWlsdC4KClRodSBPY3QgIDggMDU6NTY6MDAgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogYy1jb21tb24uYyAodHlwZV9mb3JfbW9kZSk6IE9ubHkgcmV0dXJuIFRJdHlwZSBub2RlcyB3aGVuCglIT1NUX0JJVFNfUEVSX1dJREVfSU5UIGlzID49IDY0IGJpdHMuCgkqIGMtZGVjbC5jIChpbnRUSV90eXBlX25vZGUsIHVuc2lnbmVkX2ludFRJX3R5cGVfbm9kZSk6IE9ubHkgZGVjbGFyZQoJd2hlbiBIT1NUX0JJVFNfUEVSX1dJREVfSU5UIGlzID49IDY0IGJpdHMuCgkoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBPbmx5IGNyZWF0ZSBUSXR5cGUgbm9kZXMgd2hlbgoJSE9TVF9CSVRTX1BFUl9XSURFX0lOVCBpcyA+PSA2NCBiaXRzLgoJKiBjLXRyZWUuaCAoaW50VElfdHlwZV9ub2RlLCB1bnNpZ25lZF9pbnRUSV90eXBlX25vZGUpOiBPbmx5IGRlY2xhcmUKCXdoZW4gSE9TVF9CSVRTX1BFUl9XSURFX0lOVCBpcyA+PSA2NCBiaXRzLgoKVGh1IE9jdCAgOCAwNTowNTozNCAxOTk4ICBCZXJuZCBTY2htaWR0ICA8Y3J1eEBQb29sLkluZm9ybWF0aWsuUldUSC1BYWNoZW4uREU+CgoJKiBzdG10LmMgKG5fb2NjdXJyZW5jZXMpOiBOZXcgc3RhdGljIGZ1bmN0aW9uLgoJKGV4cGFuZF9hc21fb3BlcmFuZHMpOiBWZXJpZnkgdGhhdCBhbGwgY29uc3RyYWlucyBtYXRjaCBpbiB0aGUKCW51bWJlciBvZiBhbHRlcm5hdGl2ZXMuCglWZXJpZnkgdGhhdCAnKycgb3IgJz0nIGFyZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGFuIG91dHB1dCBjb25zdHJhaW50LgoJRG9uJ3QgYWxsb3cgJyYnIGZvciBpbnB1dCBvcGVyYW5kcy4KCVZlcmlmeSB0aGF0ICclJyBpc24ndCB3cml0dGVuIGZvciB0aGUgbGFzdCBvcGVyYW5kLgoJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogQWJvcnQgaWYgYW4gYXNtIGlzIGZvdW5kIHdpdGggaW52YWxpZAoJY29uc3RyYWludHM7IGFsbCBwb3NzaWJsZSBwcm9ibGVtcyBvdWdodCB0byBiZSBjaGVja2VkIGZvciBlYXJsaWVyLgoKVGh1IE9jdCAgOCAwNDoyNjoyMCAxOTk4ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBmbGFncy5oIChmbGFnX2JyYW5jaF9vbl9jb3VudF9yZWcpOiBBbHdheXMgZGVjbGFyZS4KCSogdG9wbGV2LmMgKGZsYWdfYnJhbmNoX29uX2NvdW50X3JlZyk6IExpa2V3aXNlLgoJKiB0b3BsZXYuYzogRml4IHR5cG9zLgoKCSogcmVhbC5jIChjNHh0b2UpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlcy4gIEFkZCBzb21lIG1pc3NpbmcgcGFyZW5zLgoJKHRvYzR4KTogU2ltaWxhcmx5LgoKVGh1IE9jdCAgOCAwMToyNToyMiAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZmxvdy5jIChmaW5kX2Jhc2ljX2Jsb2Nrcyk6IENhbGMgdXBwZXIgYm91bmQgZm9yIGV4dHJhIG5vcHMgaW4KCW1heF91aWRzX2Zvcl9mbG93LgoJKGZpbmRfYmFzaWNfYmxvY2tzXzEpOiBBZGQgYSBub3AgdG8gdGhlIGVuZCBvZiBhIGJhc2ljIGJsb2NrIHdoZW4KCWEgdHJhaWxpbmcgY2FsbCBpbnNuIGRvZXMgbm90IGhhdmUgYWJub3JtYWwgY29udHJvbCBmbG93LgoJKiBnY3NlLmMgKHByZV90cmFuc3BvdXQpOiBOZXcgdmFyaWFibGUuCgkoYWxsb2NfcHJlX21lbSwgZnJlZV9wcmVfbWVtLCBkdW1wX3ByZV9kYXRhKTogQm9va2tlZXBpbmcgZm9yIGl0LgoJKGNvbXB1dGVfcHJlX3RyYW5zcG91dCk6IENhbGN1bGF0ZSBpdC4KCShjb21wdXRlX3ByZV9wcGlub3V0KTogVXNlIGl0IHRvIGVsaW1pbmF0ZSBpbXBvc3NpYmxlIHBsYWNlbWVudHMKCWR1ZSB0byBhYm5vcm1hbCBjb250cm9sIGZsb3cgdGhyb3VnaCBjYWxscy4KCShjb21wdXRlX3ByZV9kYXRhKTogQ2FsbCBjb21wdXRlX3ByZV90cmFuc3BvdXQuCgpXZWQgT2N0ICA3IDIxOjQwOjI0IDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogY29uZmlnL3NwYXJjL3NvbDItc2xkLTY0LmggKEFTTV9DUFVfU1BFQyk6IEZpeCB0eXBvLgoKV2VkIE9jdCAgNyAyMToxOTo0NiAxOTk4ICBLZW4gUmFlYnVybiAgPHJhZWJ1cm5AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9taXBzL21pcHMubWQgKHRhYmxlanVtcF9pbnRlcm5hbDMsIHRhYmxlanVtcF9pbnRlcm5hbDQKCWFuZCBtYXRjaGluZyBkZWZpbmVfaW5zbnMpOiBUYWNrIG9uIGEgYHVzZScgb2YgdGhlIHRhYmxlIGxhYmVsLCBzbwoJZmxvdyBhbmFseXNpcyB3aWxsIHJlY29nbml6ZSBhIHRhYmxlanVtcC4KCldlZCBPY3QgIDcgMTc6MzM6MzkgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGdjc2UuYyAocHJlX2luc2VydF9pbnNuKTogVHdlZWsgdG8gbm90aWNlIHRoYXQgY2FsbHMgZG8gbm90CglhbHdheXMgZW5kIGJhc2ljIGJsb2NrcyBmb3IgYWJub3JtYWwgZWRnZSByZWFzb25zLgoKV2VkIE9jdCAgNyAxNDo0MDo0MyAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL2kzODYvaTM4Ni5oOiBSZW1vdmUgZGVmaW5pdGlvbiBvZgoJSEFORExFX1BSQUdNQV9QQUNLX1BVU0hfUE9QLgoKCSogY29uZmlnL2kzODYvZ28zMi5oOiBBZGQgZGVmaW5pdGlvbiBvZgoJSEFORExFX1BSQUdNQV9QQUNLX1BVU0hfUE9QLgoKCSogY29uZmlnL2kzODYvd2luMzIuaDogQWRkIGRlZmluaXRpb24gb2YKCUhBTkRMRV9QUkFHTUFfUEFDS19QVVNIX1BPUC4KCgkqIGNvbmZpZy9pMzg2L2N5Z3dpbjMyLmg6IEFkZCBkZWZpbml0aW9uIG9mCglIQU5ETEVfUFJBR01BX1BBQ0tfUFVTSF9QT1AuCgoJKiBjLXByYWdtYS5jIChpbnNlcnRfcGFja19hdHRyaWJ1dGVzKTogRG8gbm90IGluc2VydAoJYXR0cmlidXRlcyB1bmxlc3MgI3ByYWdtYSBwYWNrKHB1c2gsPG4+KSBpcyBpbiBlZmZlY3QuCgpXZWQgT2N0ICA3IDEyOjEwOjQ2IDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGV4cHIuYyAoZW1pdF9ncm91cF9zdG9yZSk6IEhhbmRsZSBhIFBBUkFMTEVMIGRlc3RpbmF0aW9uLgoKV2VkIE9jdCAgNyAxMDowNzoyOSAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZ2NzZS5jIChwcmVfaW5zZXJ0X2luc24pOiBXaGVuIGEgY2FsbCBlbmRzIGEgYmIsIGluc2VydAoJdGhlIG5ldyBpbnNucyBiZWZvcmUgdGhlIGFyZ3VtZW50IHJlZ3MgYXJlIGxvYWRlZC4KCldlZCBPY3QgIDcgMTI6NTU6MjYgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogTWFrZWZpbGUuaW4gKGMtZ3BlcmYuaCk6IEFkZCAtTCBLUi1DIC1GICcsIDAsIDAnIGZsYWdzIHRvIGdwZXJmLgoJKGMtcGFyc2UuZ3BlcmYpOiBVcGRhdGUgY29tbWVudHMgZGVzY3JpYmluZyBpbnZvY2F0aW9uIGZsYWdzLgoJKGMtZ3BlcmYuaCk6IFJlZ2VuZXJhdGUgdXNpbmcgZ3BlcmYgMi43LjEgKDE5OTgxMDA2IGVnY3MpLgoKMTk5OC0xMC0wNyAgTWFuZnJlZCBIb2xsc3RlaW4gIDxtYW5mcmVkQHMtZGlyZWt0bmV0LmRlPgoKCSogcmVsb2FkMS5jIChyZWxvYWQpOiBDYWxsIGZyZWUgYmVmb3JlIGNsb2JiZXJpbmcgdGhlIG1lbW9yeQoJbG9jYXRpb25zIG9yIGNvbnN0YW50cyBwb2ludGVycy4KCldlZCBPY3QgIDcgMDI6MDU6MjAgMTk5OCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcGllcmRvbC5jb2JhbHRtaWNyby5jb20+CgoJKiBjb25maWcvc3BhcmMvc29sMi1zbGQtNjQuaCAoVFJBTlNGRVJfRlJPTV9UUkFNUE9MSU5FKTogUmV3b3JrCglmb3IgZWZmaWNpZW5jeSBieSBjaGVja2luZyB3aGV0aGVyIHdlIG5lZWQgdG8gbW9kaWZ5IHRoZSBjdXJyZW50CglzdGFjayBwZXJtaXNzaW9uIGF0IGFsbC4KCShBU01fT1VUUFVUX0NPTlNUUlVDVE9SLCBBU01fT1VUUFVUX0RFU1RSVUNUT1IpOiBEZWZpbmUuCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5jIChzcGFyY19pbml0aWFsaXplX3RyYW1wb2xpbmUpOiBFbWl0CglfX2VuYWJsZV9leGVjdXRlX3N0YWNrIGxpYmNhbGwgaGVyZSB0b28gaWYKCVRSQU5TRkVSX0ZST01fVFJBTVBPTElORSBpcyBkZWZpbmVkLgoJKiBjb25maWcvc3BhcmMvc3BhcmMuaDogU2V0IFRBUkdFVF9BUkNIMzIgdG8gYSBjb25zdGFudCBpZgoJSU5fTElCR0NDMi4KCldlZCBPY3QgIDcgMDI6Mjc6NTIgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4gKERSSVZFUl9ERUZJTkVTKTogUmVtb3ZlIGxhc3QgY2hhbmdlLgoKV2VkIE9jdCAgNyAwMTowODo0MyAxOTk4ICBCZXJuZCBTY2htaWR0ICA8Y3J1eEBQb29sLkluZm9ybWF0aWsuUldUSC1BYWNoZW4uREU+CgoJKiBqdW1wLmMgKGR1cGxpY2F0ZV9sb29wX2V4aXRfdGVzdCk6IFN0cmlwIFJFR19XQVNfMCBub3RlcyBvZmYgYWxsCglpbnNucyB3ZSdyZSBnb2luZyB0byBjb3B5LgoJKiByZWdjbGFzcy5jIChyZWdfc2Nhbl9tYXJrX3JlZnMpOiBEb24ndCB0ZXN0IFggZm9yIE5VTExfUlRYLgoKCSogbG9vcC5jIChjb3VudF9vbmVfc2V0KTogQWRkIHByb3RvdHlwZS4KCgkqIGNhbGxlci1zYXZlLmMgKHJlc3RvcmVfcmVmZXJlbmNlZF9yZWdzKTogTG9zZSBtb2RlIGFyZ3VtZW50LgoJKGluc2VydF9zYXZlKTogTG9zZSBtb2RlIGFyZ3VtZW50LgoJKGluc2VydF9yZXN0b3JlKTogTG9zZSBtb2RlIGFyZ3VtZW50LgoJKGluc2VydF9vbmVfaW5zbik6IExvc2UgbW9kZSBhcmd1bWVudC4KCShzYXZlX2NhbGxfY2xvYmJlcmVkX3JlZ3MpOiBMb3NlIG1vZGUgYXJndW1lbnQuCgkoc2V0dXBfc2F2ZV9hcmVhcyk6IFRha2Ugbm8gYXJndW1lbnQgYW5kIHJldHVybiB2b2lkLiAgQWxsIGNhbGxlcnMKCWNoYW5nZWQuCglEb24ndCB2ZXJpZnkgdmFsaWRpdHkgb2YgbWVtb3J5IGFkZHJlc3Nlcy4KCSogcmVsb2FkLmggKHNldHVwX3NhdmVfYXJlcyk6IEFkanVzdCBwcm90b3R5cGUuCgkoc2F2ZV9jYWxsX2Nsb2JiZXJlZF9yZWdzKTogTGlrZXdpc2UuCgkqIHJlbG9hZDEuYyAoZGVsZXRlX2NhbGxlcl9zYXZlX2luc25zKTogTmV3IGZ1bmN0aW9uLgoJKGNhbGxlcl9zYXZlX3NwaWxsX2NsYXNzKTogRGVsZXRlIHZhcmlhYmxlLgoJKGNhbGxlcl9zYXZlX2dyb3VwX3NpemUpOiBEZWxldGUgdmFyaWFibGUuCgkocmVsb2FkKTogQ2FsbCBzZXR1cF9zYXZlX2FyZWFzIGFuZCBzYXZlX2NhbGxfY2xvYmJlcmVkX3JlZ3MKCWluIHRoZSBtYWluIGxvb3AsIGJlZm9yZSBjYWxsaW5nIGNhbGN1bGF0ZV9uZWVkc19hbGxfaW5zbnMuCglEb24ndCBjYWxsIHNhdmVfY2FsbF9jbG9iYmVyZWRfcmVncyBhZnRlciB0aGUgbG9vcC4KCUNhbGwgZGVsZXRlX2NhbGxlcl9zYXZlX2luc25zIGF0IHRoZSBlbmQgb2YgYW4gaXRlcmF0aW9uIGlmCglzb21ldGhpbmcgY2hhbmdlZC4KCURlbGV0ZSBjb2RlIHRvIG1hbmFnZSBjYWxsZXJfc2F2ZV9zcGlsbF9jbGFzcy4KCUVtaXQgdGhlIGZpbmFsIG5vdGUgYmVmb3JlIHNldHRpbmcgcmVsb2FkX2ZpcnN0X3VpZC4KCVNpbXBsaWZ5IHRlc3QgdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgcmVsb2FkX2FzX25lZWRlZCBnZXRzIHJ1bi4KCShjYWxjdWxhdGVfbmVlZHMpOiBEZWxldGUgY29kZSB0byBtYW5hZ2UgY2FsbGVyX3NhdmVfc3BpbGxfY2xhc3MuCgpUdWUgT2N0ICA2IDE1OjQyOjI3IDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBjb2xsZWN0Mi5jIChtYWluKTogSW5pdGlhbGl6ZSBsZF9maWxlX25hbWUuCgpUdWUgT2N0ICA2IDE1OjQ1OjE1IDE5OTggIENhdGhlcmluZSBNb29yZSAgPGNsbUBjeWdudXMuY29tPgoKCSogY29uZmlnL3NwYXJjL3N5c3Y0LmggKEFTTV9PVVRQVVRfU0VDVElPTl9OQU1FKTogRG9uJ3QKCWNoZWNrIGZvciBmbGFnX2Z1bmN0aW9uX3NlY3Rpb25zLgoKVHVlIE9jdCAgNiAyMDowMjozMSAxOTk4ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogY3NlLmMgKGluc2VydF9yZWdzKTogRml4IGJ1ZyBpbiBTZXAgMjQgY2hhbmdlLgoKVHVlIE9jdCAgNiAxNzowMDo0MiAxOTk4ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogZmxhZ3MuaCAoZmxhZ19kdW1wX3VubnVtYmVyZWQpOiBEZWNsYXJlLgoJKiB0b3BsZXYuYyAoZmxhZ19kdW1wX3VubnVtYmVyZWQpOiBEb24ndCBkZWNsYXJlLgoJKiBwcmludC1ydGwuYyAoZmxhZ3MuaCk6IEluY2x1ZGUuCgkocHJpbnRfcnRsX3NpbmdsZSk6IEFkZCByZXR1cm4gdmFsdWUuCgkqIHJ0bC5oIChwcmludF9ydGxfc2luZ2xlKTogVXBkYXRlIGRlY2xhcmF0aW9uLgoJKiBmbG93LmMgKGZsYWdfZHVtcF91bm51bWJlcmVkKTogRG9uJ3QgZGVjbGFyZS4KCShwcmludF9ydGxfd2l0aF9iYik6IFVzZSByZXR1cm4gdmFsdWUgb2YgcHJpbnRfcnRsX3NpbmdsZS4KClR1ZSBPY3QgIDYgMDE6MzY6MDAgMTk5OCAgQmVybmQgU2NobWlkdCAgPGNydXhAUG9vbC5JbmZvcm1hdGlrLlJXVEgtQWFjaGVuLkRFPgoKCSogbG9vcC5jIChjb3VudF9vbmVfc2V0KTogTmV3IHN0YXRpYyBmdW5jdGlvbiwgYnJva2VuIG91dCBvZgoJY291bnRfbG9vcF9yZWdzX3NldC4KCShjb3VudF9sb29wX3JlZ3Nfc2V0KTogQ2FsbCBpdC4KCSogZ2xvYmFsLmMgKG1hcmtfcmVnX3N0b3JlKTogSGFuZGxlIGNsb2JiZXJzIGhlcmUgYnkgbm90IGNhbGxpbmcKCXNldF9wcmVmZXJlbmNlLgoJKG1hcmtfcmVnX2Nsb2JiZXIpOiBKdXN0IGNhbGwgbWFya19yZWdfc3RvcmUgYWZ0ZXIgZW5zdXJpbmcgU0VUVEVSCglpcyBpbiBmYWN0IGEgY2xvYmJlci4KCSogaW50ZWdyYXRlLmMgKHByb2Nlc3NfcmVnX3BhcmFtKTogTmV3IGZ1bmN0aW9uLCBicm9rZW4gb3V0IG9mCglleHBhbmRfaW5saW5lX2Z1bmN0aW9uLgoJKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiBDYWxsIGl0LgoKCSogaTM4Ni5tZCAoYWRkc2lkaTNfMSk6IERlbGV0ZSB1bnVzZWQgdmFyaWFibGUgdGVtcC4KCShhZGRzaWRpM18yKTogTGlrZXdpc2UuCgkoY2xzdHJzdHJzaSk6IERlbGV0ZSB1bnVzZWQgdmFyaWFibGUgYWRkcjEuCgoJKiBydGwuaDogRG9uJ3QgZGVjbGFyZSBhbnkgZnVuY3Rpb25zIGFsc28gZGVjbGFyZWQgaW4gcmVjb2cuaC4KCgkqIE1ha2VmaWxlLmluIChzdHVwaWQubyk6IFVwZGF0ZSBkZXBlbmRlbmNpZXMuCgkoZ2xvYmFsLm8pOiBMaWtld2lzZS4KCgkqIGdsb2JhbC5jOiBJbmNsdWRlIHJlbG9hZC5oLgoJKHJlZ19iZWNvbWVzX2xpdmUpOiBOZXcgZnVuY3Rpb24uCgkocmVnX2RpZXMpOiBOZXcgZnVuY3Rpb24uCgkoYnVpbGRfaW5zbl9jaGFpbik6IE5ldyBmdW5jdGlvbi4KCShnbG9iYWxfYWxsb2MpOiBDYWxsIGJ1aWxkX2luc25fY2hhaW4gYmVmb3JlIGNhbGxpbmcgcmVsb2FkLgoKCSogcmVsb2FkLmggKHN0cnVjdCBuZWVkcyk6IE5ldyBzdHJ1Y3R1cmUgZGVmaW5pdGlvbi4KCShzdHJ1Y3QgaW5zbl9jaGFpbik6IExpa2V3aXNlLgoJKHJlbG9hZF9pbnNuX2NoYWluKTogRGVjbGFyZSB2YXJpYWJsZS4KCShuZXdfaW5zbl9jaGFpbik6IERlY2xhcmUgZnVuY3Rpb24uCgoJKiByZWxvYWQxLmMgKHJlbG9hZF9zdGFydG9iaik6IE5ldyB2YXJpYWJsZS4KCShyZWxvYWRfaW5zbl9jaGFpbik6IE5ldyB2YXJpYWJsZS4KCSh1bnVzZWRfaW5zbl9jaGFpbnMpOiBOZXcgdmFyaWFibGUuCgkobmV3X2luc25fY2hhaW4pOiBOZXcgZnVuY3Rpb24uCgkoaW5pdF9yZWxvYWQpOiBJbml0aWFsaXplIHJlbG9hZF9zdGFydG9iaiwgbm90IHJlbG9hZF9maXJzdG9iai4KCShyZWxvYWQpOiBJbml0aWFsaXplIHJlbG9hZF9maXJzdG9iai4KCUJlZm9yZSByZXR1cm5pbmcsIGZyZWUgZXZlcnl0aGluZyBvbiB0aGUgcmVsb2FkX29ic3RhY2suCgoJKiBzdHVwaWQuYzogSW5jbHVkZSBpbnNuLWNvbmZpZy5oLCByZWxvYWQuaCBhbmQgYmFzaWMtYmxvY2suaC4KCShyZWdfd2hlcmVfZGVhZF9jaGFpbiwgcmVnX3doZXJlX2Jvcm5fZXhhY3QsIHJlZ193aGVyZV9ib3JuX2Nsb2JiZXIsCgljdXJyZW50X2NoYWluKTogTmV3IHZhcmlhYmxlcy4KCShyZWdfd2hlcmVfYm9ybik6IERlbGV0ZSB2YXJpYWJsZS4KCShSRUdfV0hFUkVfQk9STik6IE5ldyBtYWNyby4KCShmaW5kX2Nsb2JiZXJlZF9yZWdzKTogTmV3IGZ1bmN0aW9uLgoJKHN0dXBpZF9saWZlX2FuYWx5c2lzKTogRG9uJ3QgYWxsb2NhdGUvZnJlZSByZWdfd2hlcmVfYm9ybi4KCUFsbG9jYXRlIGFuZCBmcmVlIHJlZ193aGVyZV9ib3JuX2V4YWN0LCByZWdfd2hlcmVfYm9ybl9jbG9iYmVyLAoJcmVnX3doZXJlX2RlYWRfY2hhaW4uCglVc2UgUkVHX1dIRVJFX0JPUk4gaW5zdGVhZCBvZiByZWdfd2hlcmVfYm9ybi4KCVdoaWxlIHByb2Nlc3NpbmcgdGhlIGluc25zLCBidWlsZCB0aGUgcmVsb2FkX2luc25fY2hhaW4gd2l0aAoJaW5mb3JtYXRpb24gYWJvdXQgcmVnaXN0ZXIgbGlmZXRpbWVzLgoJKHN0dXBpZF9yZWdfY29tcGFyZSk6IFVzZSBSRUdfV0hFUkVfQk9STiBpbnN0ZWFkIG9mIHJlZ193aGVyZV9ib3JuLgoJKHN0dXBpZF9tYXJrX3JlZnMpOiBSZXBsYWNlIGFyZyBJTlNOIHdpdGggYXJnIENIQUlOLiAgQWxsIGNhbGxlcnMKCWNoYW5nZWQuCglDb21wdXRlIGFuZCBpbmZvcm1hdGlvbiBhYm91dCBiaXJ0aCBhbmQgZGVhdGggb2YgcHNldWRvIHJlZ2lzdGVycyBpbgoJcmVnX3doZXJlX2RlYWRfY2hhaW4sIHJlZ193aGVyZV9ib3JuX2V4YWN0IGFuZCByZWdfd2hlcmVfYm9ybl9jbG9iYmVyLgoJRGVsZXRlIGNvZGUgdG8gc2V0IGVsZW1lbnRzIG9mIHJlZ193aGVyZV9ib3JuLgoKTW9uIE9jdCAgNSAyMjozNDozMCAxOTk4ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHRyZWUuZGVmIChHT1RPX0VYUFIpOiBNb2RpZmllZCBkb2N1bWVudGF0aW9uLgoJKiBleHByLmMgKGV4cGFuZF9leHByKTogRXhwYW5kIEdPVE9fRVhQUiBpbnRvIGEgZ290byBvciBhIGNvbXB1dGVkCglnb3RvLgoKTW9uIE9jdCAgNSAyMjo0MzozNiAxOTk4ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiB1bnJvbGwuYyAobG9vcF9pdGVyYXRpb25fdmFyLCBsb29wX2luaXRpYWxfdmFsdWUsIGxvb3BfaW5jcmVtZW50Cglsb29wX2ZpbmFsX3ZhbHVlLCBsb29wX2NvbXBhcmlzb25fY29kZSk6IE5vIGxvbmdlciBzdGF0aWMuCgkodW5yb2xsX2xvb3ApOiBEZWxldGUgbG9vcF9zdGFydF92YWx1ZSB1cGRhdGUuCgkqIGxvb3AuaCAobG9vcF9pdGVyYXRpb25fdmFyLCBsb29wX2luaXRpYWxfdmFsdWUsIGxvb3BfaW5jcmVtZW50LAoJbG9vcF9maW5hbF92YWx1ZSwgbG9vcF9jb21wYXJpc29uX2NvZGUpOiBFeHRlcm4uCgkobG9vcF9zdGFydF92YWx1ZSk6IERlbGV0ZSBleHRlcm4uCgkqIGxvb3AuYyAobG9vcF9jYW5faW5zZXJ0X2JjdCwgbG9vcF9pbmNyZW1lbnQsIGxvb3Bfc3RhcnRfdmFsdWUsCglsb29wX2NvbXBhcmlzb25fdmFsdWUsIGxvb3BfY29tcGFyaXNvbl9jb2RlKTogRGVsZXRlLgoJKGxvb3Bfb3B0aW1pemUpOiBSZW1vdmUgaW5pdGlhbGl6YXRpb24gZm9yIGRlbGV0ZWQgdmFyaWFibGVzLgoJKHN0cmVuZ3RoX3JlZHVjZSk6IERlbGV0ZSBhbmFseXplX2xvb3BfaXRlcmF0aW9ucyBjYWxsLiAgT25seSBjYWxsCglpbnNlcnRfYmN0IGlmIGZsYWdfYnJhbmNoX2NvdW50X29uX3JlZyBzZXQuCgkoYW5hbHl6ZV9sb29wX2l0ZXJhdGlvbnMpOiBEZWxldGUuCgkoaW5zZXJ0X2JjdCk6IFJlbW92ZSBpdGVyYXRpb24gY291bnQgY2FsY3VsYXRpb24uICBNb3ZlIGNoZWNrcyBmb3IKCXZpYWJsZSBCQ1Qgb3B0aW1pemF0aW9uIHRvIGhlcmUuICBPYnRhaW4gaXRlcmF0aW9uIGNvdW50IGZyb20KCWxvb3BfaXRlcmF0aW9ucyBhbmQgY29ycmVjdCBmb3IgdW5yb2xsaW5nLiAgQ2hlY2sgZm9yIGVub3VnaAoJaXRlcmF0aW9uIHRvIGJlIGJlbmVmaWNpYWwuICBDb21tZW50IG91dCBydW50aW1lIGl0ZXJhdGlvbiBjb3VudAoJY2FzZS4KCShpbnNlcnRfYmN0KTogUHJpbnQgaXRlcmF0aW9uIGNvdW50IGluIGR1bXAgZmlsZS4gIFJlbW92ZQoJbG9vcF92YXJfbW9kZSBhbmQgdXNlIHdvcmRfbW9kZSBkaXJlY3RseS4KCgkqIHJzNjAwMC5oIChwcm9jZXNzb3JfdHlwZSk6IEFkZCBQUk9DRVNTT1JfUFBDNjA0ZS4KCSogcnM2MDAwLmMgKHJzNjAwMF9vdmVycmlkZV9vcHRpb25zKTogVXNlIGl0LgoJKG9wdGltaXphdGlvbl9vcHRpb25zKTogRW5hYmxlIHVzZSBvZiBmbGFnX2JyYW5jaF9vbl9jb3VudF9yZWcuCgkqIHJzNjAwMC5tZCAoZGVmaW5lX2Z1bmN0aW9uX3VuaXQpOiBEZXNjcmliZSA2MDRlLgoKMTk5OC0xMC0wNSAgSGVybWFuIEEuSi4gdGVuIEJydWdnZSAgPEhhai5UZW4uQnJ1Z2dlQG5ldC5IQ0Mubmw+CgoJKiBsb29wLmMgKG1vdmVfbW92YWJsZXMpOiBDb3JyZWN0ZWQgdGhyZXNob2xkIGNhbGN1bGF0aW9uIGZvcgoJbW92ZWRfb25jZSByZWdpc3RlcnMuCgpNb24gT2N0ICA1IDIxOjE4OjQ1IDE5OTggIEJlcm5kIFNjaG1pZHQgIDxjcnV4QFBvb2wuSW5mb3JtYXRpay5SV1RILUFhY2hlbi5ERT4KCgkqIGxvb3AuYyAoY29tYmluZV9naXZzX3ApOiBGaXggdGVzdCBmb3IgaWRlbnRpY2FsIGdpdnMuCgpNb24gT2N0ICA1IDEwOjExOjI4IDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBkd2FyZjJvdXQuYyAoZ2VuX3N1YnByb2dyYW1fZGllKTogSWYgZXJyb3Jjb3VudCBub256ZXJvLCBkb24ndAoJY2FsbCBhYm9ydCBpZiB0aGUgZnVuY3Rpb24gaXMgYWxyZWFkeSBkZWZpbmVkLgoKTW9uIE9jdCAgNSAxMDowMjozNiAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjb21iaW5lLmMgKHNpbXBsaWZ5X3J0eCk6IERvIG5vdCByZXBsYWNlIFRSVU5DQVRFIHdpdGggYSBTVUJSRUcgaWYKCXRydW5jYXRpb24gaXMgbm90IGEgbm8tb3AuCgpNb24gT2N0ICA1IDA5OjAyOjA0IDE5OTggIEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKTW9uIE9jdCAgNSAwODoxOTo1NSAxOTk4ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KCk1vbiBPY3QgIDUgMDE6MDc6MjMgMTk5OCAgVG9yYmpvcm4gR3Jhbmx1bmQgIDx0ZWdlQG1hdGVtYXRpay5zdS5zZT4KCgkqIGV4cG1lZC5jIChleHBhbmRfZGl2bW9kKTogRG9uJ3Qgd2lkZW4gZm9yIGNvbXB1dGluZyByZW1haW5kZXIKCWlmIHdlIHNlZW0gdG8gaGF2ZSBhIGRpdm1vZCBwYXR0ZXJuIGZvciBuZWVkZWQgbW9kZS4KCk1vbiBPY3QgIDUgMDE6MDE6NDIgMTk5OCAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5waHlzLmNvbHVtYmlhLmVkdT4KCgkqIGNwcGxpYi5jIChtYWNyb2V4cGFuZCk6IENvcnJlY3Qgb2ZmLWJ5LW9uZSBlcnJvciBpbiBoYW5kbGluZwoJb2YgZXNjYXBlcy4KClN1biBPY3QgIDQgMjM6NTg6MzAgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGNvbWJpbmUuYyAoZXhwYW5kX2ZpZWxkX2Fzc2lnbm1lbnQpOiBEb24ndCBkbyBiaXR3aXNlIG9wZXJhdGlvbnMKCW9uIE1PREVfRkxPQVQ7IHB1biB0byBNT0RFX0lOVCBpZiBwb3NzaWJsZS4KClN1biBPY3QgIDQgMTg6MzM6MjQgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoJCQkgIHNjb3R0IHNueWRlciAgPHNueWRlckBkMHNnaWYuZm5hbC5nb3Y+CgoJKiB0bGluay5jIChzY2FuX2xpbmtlcl9vdXRwdXQpOiBSZWNvZ25pemUgZXJyb3JzIGZyb20gaXJpeCA2LjIKCWxpbmtlci4gIFJlY29nbml6ZSBtYW5nbGVkIG5hbWVzIGluIHF1b3Rlcy4KClN1biBPY3QgIDQgMDI6NTg6MjAgMTk5OCAgSmFrdWIgSmVsaW5layAgPGpqQHN1bnNpdGUubXMubWZmLmN1bmkuY3o+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMubWQgKGFzaGxkaTMrMSk6IE5hbWUgaXQgYXNobGRpM19zcDY0LgoJKGFzaGxzaTNfY29uc3QxLCBhc2hsZGkzX2NvbnN0MSk6IE5ldyBjb21iaW5lciBwYXR0ZXJucy4KCShhc2hyc2kzX2V4dGVuZCwgYXNocnNpM19leHRlbmQyKTogTmV3IGNvbWJpbmVyIHBhdHRlcm5zLgoJKGxzaHJzaTNfZXh0ZW5kLCBsc2hyc2kzX2V4dGVuZDIpOiBMaWtld2lzZS4KClN1biBPY3QgIDQgMDA6MjM6MDAgMTk5OCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcGllcmRvbC5jb2JhbHRtaWNyby5jb20+CgoJKiBmdW5jdGlvbi5jIChwdXJnZV9hZGRyZXNzb2ZfMSk6IElmIHRyeWluZyB0byB0YWtlIGEgc3ViLXdvcmQKCWludGVncmFsIHBpZWNlIG9mIGEgZmxvYXRpbmcgcG9pbnQgbW9kZSwgcHV0IGl0IG9uIHRoZSBzdGFjay4KClNhdCBPY3QgIDMgMTk6MDE6MDMgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGFscGhhL2xpbnV4LmggKENQUF9QUkVERUZJTkVTKTogRGVmaW5lIF9fYWxwaGFfXyBmb3IgaW1ha2UuCgpTYXQgT2N0ICAzIDE0OjQyOjE5IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIFBST0pFQ1RTOiBSZW1vdmUgdGVtcGxhdGUgZnJpZW5kcy4KCgkqIGNvbGxlY3QyLmMgKHNvcnRfaWRzKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZS4KCgkqIHRtLnRleGkgKE1BVEhfTElCUkFSWSk6IERvY3VtZW50LgoJKE5FRURfTUFUSF9MSUJSQVJZKTogUmVtb3ZlLgoKCSogdmFyYXNtLmMgKGFzc2VtYmxlX3N0YXJ0X2Z1bmN0aW9uLCBhc3NlbWJsZV92YXJpYWJsZSwgd2Vha19maW5pc2gsCglhc3NlbWJsZV9hbGlhcyk6IERvIEFTTV9HTE9CQUxJWkVfTEFCRUwgZm9yIHdlYWsgc3ltYm9scywgdG9vLgoKU2F0IE9jdCAgMyAxNjoxNDo0NCAxOTk4ICBKb2huIENhcnIgIDxqZmNAbWl0LmVkdT4KCgkqIGR3YXJmMm91dC5jIChleHBhbmRfYnVpbHRpbl9kd2FyZl9yZWdfc2l6ZSk6IEluaXRpYWxpemUKCWxhc3RfZW5kIHRvIDB4N2ZmZmZmZmYuCgpGcmkgT2N0ICAyIDE5OjE0OjIwIDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogZnVuY3Rpb24uYyAocHVyZ2VfYWRkcmVzc29mXzEpOiBEbyBub3QgcGVyZm9ybSBlbmRpYW5uZXNzCgljb3JyZWN0aW9ucyBvbiBiaXRwb3MsIHdobyB3ZSBjYWxsIHdpbGwgZG8gaXQgZm9yIHVzLgoKRnJpIE9jdCAgMiAxMTo1MjozNSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBoODMwMC5jIChXT1JEX1JFR19VU0VEKTogRml4IHR5cG8uCgkoaW5pdGlhbF9vZmZzZXQpOiBVc2UgV09SRF9SRUdfVVNFRC4KCgkqIGg4MzAwLmMgKGhhbmRsZV9wcmFnbWEpOiBGaXggdHlwby4KCkZyaSBPY3QgIDIgMTA6NTE6MzUgMTk5OCAgQmVybmQgU2NobWlkdCAgPGNydXhAUG9vbC5JbmZvcm1hdGlrLlJXVEgtQWFjaGVuLkRFPgoKCSogY2FsbGVyLXNhdmUuYyAoaW5zZXJ0X3NhdmVfcmVzdG9yZSk6IEJyZWFrIHRoaXMgZnVuY3Rpb24gdXAKCWludG8gbmV3IGZ1bmN0aW9ucyBpbnNlcnRfcmVzdG9yZSwgaW5zZXJ0X3NhdmUgYW5kIGluc2VydF9vbmVfaW5zbi4KCUFsbCBjYWxsZXJzIGNoYW5nZWQuCgkoaW5zZXJ0X3Jlc3RvcmUpOiBOZXcgZnVuY3Rpb24sIG1vc3RseSBicm9rZW4gb3V0IG9mCglpbnNlcnRfc2F2ZV9yZXN0b3JlLgoJKGluc2VydF9zYXZlKTogTGlrZXdpc2UuCgkoaW5zZXJ0X29uZV9pbnNuKTogTGlrZXdpc2UuCgkocmVzdG9yZV9yZWZlcmVuY2VkX3JlZ3MpOiBOZXcgYXJndW1lbnQgQkxPQ0suICBBbGwgY2FsbGVycyBjaGFuZ2VkLgoJKHNhdmVfY2FsbF9jbG9iYmVyZWRfcmVncyk6IERvbid0IGtlZXAgdHJhY2sgb2YgYmFzaWMgYmxvY2sgYm91bmRhcmllcwoJaW4gdGhpcyBmdW5jdGlvbiwgZG8gaXQgaW4gaW5zZXJ0X29uZV9pbnNuIGluc3RlYWQuCgoJKiByZWxvYWQxLmMgKHJlbG9hZCk6IEJyZWFrIG91dCBzb21lIG1vcmUgcGllY2VzIGludG8gc2VwYXJhdGUKCWZ1bmN0aW9ucy4KCShkdW1wX25lZWRzKTogTmV3IGZ1bmN0aW9uLCBicm9rZW4gb3V0IG9mIHJlbG9hZC4KCShzZXRfaW5pdGlhbF9lbGltX29mZnNldHMpOiBMaWtld2lzZS4KCShpbml0X2VsaW1fdGFibGUpOiBMaWtld2lzZS4KCSh1cGRhdGVfZWxpbWluYWJsZXMpOiBMaWtld2lzZS4KCgkqIGdsb2JhbC5jIChnbG9iYWxfYWxsb2MpOiBEZWxldGUgY29kZSB0byBtYW5hZ2UgdGhlIHNjcmF0Y2hfbGlzdC4KCSogbG9jYWwtYWxsb2MuYyAocXR5X3NjcmF0Y2hfcnR4KTogRGVsZXRlLgoJKHNjcmF0Y2hfYmxvY2spOiBEZWxldGUuCgkoc2NyYXRjaF9saXN0KTogRGVsZXRlLgoJKHNjcmF0Y2hfbGlzdF9sZW5ndGgpOiBEZWxldGUuCgkoc2NyYXRjaF9pbmRleCk6IERlbGV0ZS4KCShhbGxvY19xdHlfZm9yX3NjcmF0Y2gpOiBEZWxldGUuCgkobG9jYWwtYWxsb2MpOiBVcGRhdGUgaW5pdGlhbGl6YXRpb24gb2YgbWF4X3F0eS4KCURlbGV0ZSBjb2RlIHRvIG1hbmFnZSB0aGUgc2NyYXRjaCBsaXN0LgoJRGVsZXRlIGNvZGUgdG8gYWxsb2NhdGUvaW5pdGlhbGl6ZSBxdHlfc2NyYXRjaF9ydHguCgkoYmxvY2tfYWxsb2MpOiBEb24ndCBhbGxvY2F0ZSBxdWFudGl0aWVzIGZvciBzY3JhdGNoZXMuCglEZWxldGUgY29kZSB0byBtYW5hZ2UgdGhlIHNjcmF0Y2ggbGlzdC4KCSogcmVncy5oIChzY3JhdGNoX2xpc3QpOiBEZWxldGUgZGVjbGFyYXRpb24uCgkoc2NyYXRjaF9ibG9jayk6IERlbGV0ZSBkZWNsYXJhdGlvbi4KCShzY3JhdGNoX2xpc3RfbGVuZ3RoKTogRGVsZXRlIGRlY2xhcmF0aW9uLgoJKiByZWxvYWQxLmMgKHJlbG9hZCk6IERlbGV0ZSBjb2RlIHRvIG1hbmFnZSB0aGUgc2NyYXRjaCBsaXN0LgoJKHNwaWxsX2hhcmRfcmVnKTogTGlrZXdpc2UuCgkobWFya19zY3JhdGNoX2xpdmUpOiBEZWxldGUuCgoJKiByZWNvZy5jIChhbHRlcl9zdWJyZWcpOiBEZWxldGUgZGVjbGFyYXRpb24uCgoxOTk4LTEwLTAyICBBbmRyZWFzIEphZWdlciAgPGFqQGFydGh1ci5yaGVpbi1uZWNrYXIuZGU+CgoJKiBNYWtlZmlsZS5pbiAoY2NjcC5vKTogRml4IHR5cG8gaW4gbGFzdCBwYXRjaC4KCkZyaSBPY3QgIDIgMTY6MTM6MTIgMTk5OCAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHQtc2ggKExJQjFBU01GVU5DUyk6IEFkZCBfc2V0X2Zwc2NyIC4KCSogY29uZmlnL3NoL2xpYjFmdW5jcy5hc20gKF9fX3NldF9mcHNjcik6IEFkZC4KCkZyaSBPY3QgIDIgMDI6MDE6NTkgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcmVnY2xhc3MuYyAocmVnX3NjYW5fbWFya19yZWZzKTogUmV0dXJuIGltbWVkaWF0ZWx5IGlmIHBhc3NlZCBhCglOVUxMX1JUWCBhcyBhbiBhcmd1bWVudC4KCgkqIE1ha2VmaWxlLmluICh1bmxpYnN1YmRpcik6IERlZmluZS4KCShEUklWRVJfREVGSU5FUyk6IFVzZSB1bmxpYnN1YmRpci4KCShjY2NwLm8sIGNwcGxpYi5vLCBwcm90b2l6ZS5vLCB1bnByb3RvaXplLm8pOiBTaW1pbGFybHkuCgkoc3RtcC1maXhpbmMpOiBTaW1pbGFybHkuCgpUaHUgT2N0ICAxIDE5OjU4OjMwIDE5OTggIEJlcm5kIFNjaG1pZHQgIDxjcnV4QFBvb2wuSW5mb3JtYXRpay5SV1RILUFhY2hlbi5ERT4KCgkqIHJlZ21vdmUuYyAocmVnbW92ZV9vcHRpbWl6ZSk6IEFkZCB2YXJpYWJsZSBvbGRfbWF4X3VpZC4KCUF0IHRoZSBlbmQgb2YgdGhlIGZ1bmN0aW9uLCB1cGRhdGUgYmFzaWNfYmxvY2tfZW5kLgoKVGh1IE9jdCAgMSAxNzo1ODoyNSAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGR3YXJmMm91dC5jIChleHBhbmRfYnVpbHRpbl9kd2FyZl9yZWdfc2l6ZSk6IFVzZQoJRklSU1RfUFNFVURPX1JFR0lTVEVSIGFzIHVwcGVyIGJvdW5kIGZvciBsYXN0X2VuZCwgbm90IGFuCglhcmJpdHJhcnkgY29uc3RhbnQuCgpUaHUgT2N0ICAxIDE3OjU3OjE0IDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvYXJtL2FybS5jOiBJbXByb3ZlIGludGVyd29ya2luZyBzdXBwb3J0LgoKVGh1IE9jdCAgMSAxODo0MzozNSAxOTk4ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogcmVsb2FkMS5jIChjaG9vc2VfcmVsb2FkX3JlZ3MpOiBGaXggdGVzdCBpZiByZWxvYWRfcmVnX3J0eFtyXSB3YXMKCWNvcGllZCBmcm9tIHJlbG9hZF9vdXRbcl0gLgoKVGh1IE9jdCAgMSAxOToyMDowOSAxOTk4ICBKb2huIENhcnIgIDxqZmNAbWl0LmVkdT4KCgkqIGR3YXJmMm91dC5jIChleHBhbmRfYnVpbHRpbl9kd2FyZl9yZWdfc2l6ZSk6IEZpeCB0byB3b3JrCgl3aXRoIG1vcmUgdGhhbiB0aHJlZSBzaXplIHJhbmdlcy4KCgkqIGZsb3cuYyAoc2JpdG1hcF9jb3B5KTogVXNlIGJjb3B5IHRvIGNvcHkgYml0bWFwLgoKCSogcnRsLmMgKG1vZGVfbmFtZSk6IEFkZCBhIG51bGwgc3RyaW5nIGF0IHRoZSBlbmQgb2YgdGhlIGFycmF5LgoJKG1vZGVfd2lkZXJfbW9kZSk6IENoYW5nZSB0eXBlIHRvIHVuc2lnbmVkIGNoYXIuCgkobW9kZV9tYXNrX2FycmF5KTogTmV3IHZhcmlhYmxlLgoJKGluaXRfcnRsKTogVXBkYXRlIGZvciBtb2RlX3dpZGVyX21vZGUgdHlwZSBjaGFuZ2UuCgoJKiBydGwuaCAobW9kZV93aWRlcl9tb2RlKTogQ2hhbmdlIHR5cGUgdG8gdW5zaWduZWQgY2hhci4KCShtb2RlX21hc2tfYXJyYXkpOiBEZWNsYXJlLgoJKEdFVF9NT0RFX01BU0spOiBVc2UgbW9kZV9tYXNrX2FycmF5LgoKVGh1IE9jdCAgMSAxNTo1NjowMSAxOTk4ICBHYXZpbiBSb21pZy1Lb2NoICA8Z2F2aW5AY3lnbnVzLmNvbT4KCgkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKSA6IEVuY2Fwc3VsYXRlIGNvZGUgaW50bwoJY29weV9ibGttb2RlX2Zyb21fcmVnLgoJKiBleHByLmMgKGNvcHlfYmxrbW9kZV9mcm9tX3JlZyk6IE5ldyBmdW5jdGlvbi4KCSogZXhwci5oIChjb3B5X2Jsa21vZGVfZnJvbV9yZWcpOiBOZXcgZnVuY3Rpb24uCgkqIGludGVncmF0ZS5jIChmdW5jdGlvbl9jYW5ub3RfaW5saW5lX3ApOiBXZSBjYW4gaW5saW5lCgl0aGVzZSBub3cuCgkoZXhwYW5kX2lubGluZV9mdW5jdGlvbik6IFVzZSBjb3B5X2Jsa21vZGVfZnJvbV9yZWcKCWlmIG5lZWRlZC4gIEF2b2lkIGNyZWF0aW5nIEJMS21vZGUgUkVHcy4KCShjb3B5X3J0eF9hbmRfc3Vic3RpdHV0ZSk6IERvbid0IHRyeSB0byBTVUJSRUcgYSBCTEttb2RlCglvYmplY3QuCgpUaHUgT2N0ICAxIDEwOjQyOjI3IDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvdjg1MC92ODUwLmM6IEFkZCBmdW5jdGlvbiBwcm90b3R5cGVzLgoJQWRkIHN1cHBvcnQgZm9yIHY4NTAgc3BlY2lhbCBkYXRhIGFyZWFzLgoKCSogY29uZmlnL3Y4NTAvdjg1MC5oOiBBZGQgc3VwcG9ydCBmb3Igdjg1MCBzcGVjaWFsIGRhdGEgYXJlYXMuCgoJKiBjLXByYWdtYS5jOiBBZGQgc3VwcG9ydCBmb3IgSEFORExFX1BSQUdNQV9QQUNLIGFuZAoJSEFORExFX1BSQUdNQV9QQUNLX1BVU0hfUE9QLgoJKHB1c2hfYWxpZ25tZW50KTogTmV3IGZ1bmN0aW9uOiBDYWNoZSBhbiBhbGlnbm1lbnQgcmVxdWVzdGVkCglieSBhICNwcmFnbWEgcGFjayhwdXNoLDxuPikuCgkocG9wX2FsaWdubWVudCk6IE5ldyBmdW5jdGlvbjogUG9wIGFuIGFsaWdubWVudCBmcm9tIHRoZQoJYWxpZ25tZW50IHN0YWNrLgoJKGluc2VydF9wYWNrX2F0dHJpYnV0ZXMpOiBOZXcgZnVuY3Rpb246IEdlbmVyYXRlIF9fcGFja2VkX18KCWFuZCBfX2FsaWduZWRfXyBhdHRyaWJ1dGVzIGZvciBuZXcgZGVjbHMgd2hpbHN0IGEgI3ByYWdtYSBwYWNrCglpcyBpbiBlZmZlY3QuCgkoYWRkX3dlYWspOiBOZXcgZnVuY3Rpb246IENhY2hlIGEgI3ByYWdtYSB3ZWFrIGRpcmVjdGl2ZS4KCShoYW5kbGVfcHJhZ21hX3Rva2VuKTogRG9jdW1lbnQgY2FsbGluZyBjb252ZW50aW9ucy4gIEFkZAoJc3VwcG9ydCBmb3IgI3ByYWdtYSBwYWNrKHB1c2gsPG4+KSBhbmQgI3ByYWdtYSBwYWNrIChwb3ApLgoKCSogYy1wcmFnbWEuaDogSWYgSEFORExFX1NZU1ZfUFJBR01BIG9yIEhBTkRMRV9QUkFHTUFfUEFDS19QVVNIX1BPUAoJYXJlIGRlZmluZWQgZW5hYmxlIEhBTkRMRV9QUkFHTUFfUEFDSy4KCU1vdmUgJ3N0cnVjdCB3ZWFrX3N5bXMnIGhlcmUgKGZyb20gdmFyYXNtLmMpLgoJQWRkIHByYWdtYSBzdGF0ZXMgZm9yIHB1c2ggYW5kIHBvcCBwcmFnbWFzLgoKCSogYy1jb21tb24uYyAoZGVjbF9hdHRyaWJ1dGVzKTogQ2FsbCBQUkFHTUFfSU5TRVJUX0FUVFJJQlVURVMKCWlmIGl0IGlzIGRlZmluZWQuCgoJKiBjLWxleC5jOiBSZXBsYWNlIG9jY3VycmVuY2VzIG9mIEhBTkRMRV9TWVNWX1BSQUdNQSB3aXRoCglIQU5ETEVfR0VORVJJQ19QUkFHTUFTLgoKCSogdmFyYXNtLmM6IE1vdmUgZGVmaW5pdGlvbiBvZiAnc3RydWN0IHdlYWtfc3ltcycgaW50bwoJYy1wcmFnbWEuaC4KCShoYW5kbGVfcHJhZ21hX3dlYWspOiBEZWxldGVkLgoKCSogY29uZmlnL2kzODYvaTM4Ni5oOiBEZWZpbmUgSEFORExFX1BSQUdNQV9QQUNLX1BVU0hfUE9QLgoKCSogY29uZmlnL3dpbm50L3dpbi1udC5oOiBEZWZpbmUgSEFORExFX1BSQUdNQV9QQUNLX1BVU0hfUE9QLgoKCSogYy1kZWNsLmMgKHN0YXJ0X2Z1bmN0aW9uKTogQWRkIGludm9jYXRpb24gb2YKCVNFVF9ERUZBVUxUX0RFQ0xfQVRUUklCVVRFUywgaWYgZGVmaW5lZC4KCgkqIHRtLnRleGk6IFJlbW92ZSBkZXNjcmlwdGlvbiBvZiBub24tZXhpc3RlbnQgbWFjcm8KCVNFVF9ERUZBVUxUX1NFQ1RJT05fTkFNRS4KCgkoSEFORExFX1NZU1ZfUFJBR01BKTogRG9jdW1lbnQuCgkoSEFORExFX1BSQUdNQV9QQUNLX1BVU0hfUE9QKTogRG9jdW1lbnQuCgpXZWQgU2VwIDMwIDIyOjI3OjUzIDE5OTggIFJvYmVydCBMaXBlICA8cm9iZXJ0bEBkZ2lpLmNvbT4KCgkqIGNvbmZpZy5zdWI6IFJlY29nbml6ZSBpWzM0NTY3XTg2LXBjLXVkayBhcyBuZXcgdGFyZ2V0LgoJKiBjb25maWd1cmUuaW46IExpa2V3aXNlLgoJKiBjb25maWcvaTM4Ni90LXVkazogTmV3IGZpbGUuCgkqIGNvbmZpZy9pMzg2L3Vkay5oOiBOZXcgZmlsZS4KCldlZCBTZXAgMzAgMTk6MzM6MDcgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcmVvcmcuYyAoY2hlY2tfYW5udWxfbGlzdF90cnVlX2ZhbHNlKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZXMuCgkoc3RlYWxfZGVsYXlfbGlzdF9mcm9tX3RhcmdldCk6IEFkZCBtaXNzaW5nICJ1c2VkX2FubnVsIiB2YXJpYWJsZS4KCSh0cnlfbWVyZ2VfZGVsYXlfaW5zbnMpOiBDbG9zZSBvdXQgaGFsZiBmb3JtZWQgY29tbWVudC4KCldlZCBTZXAgMzAgMTk6MTM6MjAgMTk5OCAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5waHlzLmNvbHVtYmlhLmVkdT4KCgkqIGNwcGxpYi5jIChtYWNyb2V4cGFuZCk6IElmIGFyZy0+cmF3X2JlZm9yZSBvcgoJYXJnLT5yYXdfYWZ0ZXIsIHJlbW92ZSBhbnkgbm8tcmVleHBhbnNpb24gZXNjYXBlIGF0IHRoZQoJYmVnaW5uaW5nIG9mIHRoZSBwYXN0ZWQgdG9rZW4uICBDb3JyZWN0IGhhbmRsaW5nIG9mIHdoaXRlc3BhY2UKCW1hcmtlcnMgYW5kIG5vLXJlZXhwYW5kIG1hcmtlcnMgYXQgdGhlIGVuZCBpZiBhcmctPnJhd19hZnRlci4KCgkqIHRvcGxldi5jIChkb2N1bWVudGVkX2xhbmdfb3B0aW9ucyk6IFJlY29nbml6ZSAtaW5jbHVkZSwKCS1pbWFjcm9zLCAtaXdpdGhwcmVmaXgsIC1pd2l0aHByZWZpeGJlZm9yZS4KCSogY3BwbGliLmMgKGNwcF9zdGFydF9yZWFkKTogUHJvY2VzcyAtaW1hY3JvcyBhbmQgLWluY2x1ZGUKCXN3aXRjaGVzIGF0IHRoZSBzYW1lIHRpbWUgYW5kIGluIGNvbW1hbmQtbGluZSBvcmRlciwgYWZ0ZXIKCWluaXRpYWxpemluZyB0aGUgZGVwZW5kZW5jeS1vdXRwdXQgY29kZS4gIEVtaXQgcHJvcGVybHkgbmVzdGVkCgkjbGluZSBkaXJlY3RpdmVzIGZvciB0aGVtLiAgRW1pdCBhICNsaW5lIGZvciB0aGUgbWFpbiBmaWxlCgliZWZvcmUgcHJvY2Vzc2luZyB0aGVzZSBzd2l0Y2hlcywgYW5kIGRvbid0IGRvIGl0IGFnYWluCglhZnRlcndhcmQuCgpXZWQgU2VwIDMwIDE4OjAzOjIyIDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBmdW5jdGlvbi5jIChwdXJnZV9hZGRyZXNzb2ZfMSk6IFVzZSBiaXRmaWVsZCBtYW5pcHVsYXRpb24KCXJvdXRpbmVzIHRvIGhhbmRsZSBtZW0gbW9kZSA8IHJlZyBtb2RlLgoKV2VkIFNlcCAzMCAxODo0MzozMiAxOTk4ICBIZXJtYW4gdGVuIEJydWdnZSAgPEhhai5UZW4uQnJ1Z2dlQG5ldC5IQ0Mubmw+CgoJKiByZW9yZy5jICh0cnlfbWVyZ2VfZGVsYXlfaW5zbnMpOiBBY2NvdW50IGZvciByZXNvdXJjZXMgcmVmZXJlbmNlZAoJaW4gZWFjaCBpbnN0cnVjdGlvbiBpbiBJTlNOJ3MgZGVsYXkgbGlzdCBiZWZvcmUgdHJ5aW5nIHRvIGVsaW1pbmF0ZQoJdXNlbGVzcyBpbnN0cnVjdGlvbnMuICBTaW1pbGFybHkgd2hlbiBsb29raW5nIGF0IGEgdHJpYWwgaW5zbidzIGRlbGF5CglzbG90cy4KCgkqIHJlb3JnLmMgKGNoZWNrX2FubnVsX2xpc3RfdHJ1ZV9mYWxzZSk6IE5ldyBmdW5jdGlvbi4KCShzdGVhbF9kZWxheV9saXN0X2Zyb21fe3RhcmdldCxmYWxsdGhyb3VnaH0pOiBDYWxsIGl0IGFuZCBhbHNvCglyZWZpbmUgdGVzdHMgZm9yIHdoZW4gd2UgbWF5IGFubnVsIGlmIGFscmVhZHkgZmlsbGVkIGEgc2xvdC4KCShmaWxsX3Nsb3RzX2Zyb21fdGhyZWFkKTogTGlrZXdpc2UuCgkoZGVsZXRlX2Zyb21fZGVsYXlfc2xvdCk6IFJldHVybiBuZXdseS1jcmVhdGVkIHRocmVhZC4KCSh0cnlfbWVyZ2VfZGVsYXlfaXNucyk6IFVzZSBpdHMgbmV3IHJldHVybiB2YWx1ZS4KCldlZCBTZXAgMzAgMTg6Mjk6MjYgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbG9vcC5jIChjaGVja19kYnJhX2xvb3ApOiBVc2UgYSB2YW5pbGxhIGxvb3AgcmV2ZXJzYWwgaWYgdGhlIGJpdiBpcwoJdXNlZCB0byBjb21wdXRlIGEgZ2l2IG9yIGFzIHNvbWUgb3RoZXIgbm9uLWNvdW50aW5nIHVzZS4KCldlZCBTZXAgMzAgMTg6MTk6MjcgMTk5OCAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogcmVncy5oIChIQVJEX1JFR05PX0NBTExfUEFSVF9DTE9CQkVSRUQpOiBOZXcgbWFjcm8uCgkqIGxvY2FsLWFsbG9jLmMgKGZpbmRfZnJlZV9yZWcpOiBVc2UgaXQuCgkqIGdsb2JhbC5jIChmaW5kX3JlZyk6IExpa2V3aXNlLgoJKiB0bS50ZXhpOiBEb2N1bWVudCBIQVJEX1JFR05PX0NBTExfUEFSVF9DTE9CQkVSRUQuCgoJKiByZWdzLmggKEhBUkRfUkVHTk9fQ0FMTEVSX1NBVkVfTU9ERSk6IE5ldyBtYWNyby4KCSogY2FsbGVyLXNhdmUuYyAoaW5pdF9jYWxsZXJfc2F2ZSk6IFVzZSBpdC4KCSogdG0udGV4aTogRG9jdW1lbnQgSEFSRF9SRUdOT19DQUxMRVJfU0FWRV9NT0RFLgoKV2VkIFNlcCAzMCAxMjo1NzozMCAxOTk4ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLnBoeXMuY29sdW1iaWEuZWR1PgoKCSogY29uZmlndXJlLmluOiBBZGQgLS1lbmFibGUtY3BwbGliIG9wdGlvbiB3aGljaCB1c2VzIGNwcGxpYgoJZm9yIGNwcCwgYnV0IGRvZXNuJ3QgbGluayBjcHBsaWIgaW50byBjYzEuICBNYWtlIGhlbHAgdGV4dAoJY2FwaXRhbGl6YXRpb24gY29uc2lzdGVudC4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKV2VkIFNlcCAzMCAxMDowOTozOSAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogZnVuY3Rpb24uYyAoZ2VuX21lbV9hZGRyZXNzb2YpOiBJZiB0aGUgYWRkcmVzcyBSRUcgaXMKCVJFR19VU0VSVkFSX1AgbWFrZSB0aGUgbmV3IFJFRyBiZSBzbyBhbHNvLgoJKiBsb29wLmMgKHNjYW5fbG9vcCk6IEFwcGx5IERlTW9yZ2FuJ3MgbGF3cyBhbmQgYWRkIGRvY3VtZW50YXRpb24KCWluIGFuIGF0dGVtcHQgdG8gY2xhcmlmeSBzbGlnaHRseS4KCldlZCBTZXAgMzAgMDk6NTc6NDAgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZXhwci5jIChleHBhbmRfZXhwcik6IEhhbmRsZSBDT01QT05FTlRfUkVGLCBCSVRfRklFTERfUkVGIEFSUkFZX1JFRgoJYW5kIElORElSRUNUX1JFRiBpbiBjb2RlIHRvIGNoZWNrIE1BWF9JTlRFR0VSX0NPTVBVVEFUSU9OX01PREUuCgpXZWQgU2VwIDMwIDEwOjEzOjM5IDE5OTggIENhdGhlcmluZSBNb29yZSAgPGNsbUBjeWdudXMuY29tPgoKCSogdG9wbGV2LmM6IEZpeCBsYXN0IHBhdGNoLgoKVHVlIFNlcCAyOSAyMDowMzoxOCAxOTk4ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBsb29wLmMgKGdldF9jb25kaXRpb24pOiBGaXggdHlwbyBpbiBNYXkgOSBjaGFuZ2UuCgpUdWUgU2VwIDI5IDExOjExOjM4IDE5OTggIEFuZHJldyBNYWNMZW9kICA8YW1hY2xlb2RAY3lnbnVzLmNvbT4KCgkqIGludm9rZS50ZXhpICgtZmV4Y2VwdGlvbnMpOiBNZXJnZSAyIGRpZmZlcmVudCBkZXNjcmlwdGlvbnMuCgpNb24gU2VwIDI4IDIyOjA4OjUyIDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIHRvcGxldi5jIChkb2N1bWVudGVkX2xhbmdfb3B0aW9ucyk6IFNwZWxsaW5nIGNvcnJlY3Rpb25zLgoKTW9uIFNlcCAyOCAxOTo0MToyNCAxOTk4ICBBbGV4YW5kcmUgT2xpdmEgIDxvbGl2YUBkY2MudW5pY2FtcC5icj4KCgkqIGNvbmZpZ3VyZS5pbjogTmV3IGZsYWdzIC0td2l0aC1sZCBhbmQgLS13aXRoLWFzLCBlcXVpdmFsZW50Cgl0byBzZXR0aW5nIExEIGFuZCBBUyBlbnZpcm9ubWVudCB2YXJpYWJsZXMuICBUZXN0IHdoZXRoZXIKCXNwZWNpZmllZCBhcmd1bWVudHMgYXJlIEdOVSBjb21tYW5kcywgYW5kIHJlcG9ydCB0aGVtIHdpdGgKCWNoZWNraW5nIG1lc3NhZ2VzLiAgVXNlIHRoZSBzcGVjaWZpZWQgQVMgZm9yIGNvbmZpZ3VyZQoJdGVzdHMgdG9vLgoJKiBjb25maWd1cmU6IExpa2V3aXNlLgoJKiBhY2NvbmZpZy5oOiBBZGQgREVGQVVMVF9BU1NFTUJMRVIgYW5kIERFRkFVTFRfTElOS0VSLgoJKiBjb25maWcuaW46IExpa2V3aXNlLgoJKiBnY2MuYyAoZmluZF9hX2ZpbGUpOiBXaGVuIGxvb2tpbmcgZm9yIGBhcycgYW5kIGBsZCcsIHJldHVybgoJdGhlIERFRkFVTFQgcHJvZ3JhbSBpZiBpdCBleGlzdHMuCgkqIGNvbGxlY3QyLmMgKG1haW4pOiBVc2UgREVGQVVMVF9MSU5LRVIgaWYgaXQgZXhpc3RzLgoKCSogZ2NjLmMgKGZpbmRfYV9maWxlKTogVGhlIHRlc3QgZm9yIGV4aXN0ZW5jZSBvZiBhIGZ1bGwKCXBhdGhuYW1lIHdhcyByZXZlcnNlZC4KCk1vbiBTZXAgMjggMTc6MzQ6MzUgMTk5OCAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CgoJKiByczYwMDAuaCAoQVNNX09VVFBVVF9NSV9USFVOSyk6IE9ubHkgZGVmaW5lIG9uIEVMRiBzeXN0ZW1zLgoJKiByczYwMDAuYyAob3V0cHV0X21pX3RodW5rKTogQWx3YXlzIHVzZSBhIHJhdyBqdW1wIGZvciBub3cuCgpNb24gU2VwIDI4IDE0OjI0OjAzIDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiB0cmVlLmggKFRZUEVfQklORk8pOiBEb2N1bWVudC4KCk1vbiBTZXAgMjggMTI6NTU6NDkgMTk5OCAgU3RhbiBDb3ggIDxzY294QGN5Z251cy5jb20+CgoJKiBpMzg2LWNvZmYuaCAoZGJ4Y29mZi5oKTogQWRkZWQuCgpNb24gU2VwIDI4IDEyOjUxOjAwIDE5OTggIENhdGhlcmluZSBNb29yZSAgPGNsbUBjeWdudXMuY29tPgoKCSogdG9wbGV2LmM6IEZpeCBiYWQgcGF0Y2ggYXJvdW5kIGZsYWdfZGF0YV9zZWN0aW9ucy4KCk1vbiBTZXAgMjggMTA6MzI6MjggMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIHJlbG9hZDEuYyAocmVsb2FkKTogVXNlIHJlbG9hZF9hZGRyZXNzX2luZGV4X3JlZ19jbGFzcyBhbmQKCXJlbG9hZF9hZGRyZXNzX2Jhc2VfcmVnX2NsYXNzIHdoZW4gc2V0dGluZwoJY2FsbGVyX3NhdmVfc3BpbGxfY2xhc3MuICAoUGF0Y2ggZ2VuZXJhdGVkIGJ5IEppbSBXaWxzb246Cgl3aWxzb25AY3lnbnVzLmNvbSkuCgpNb24gU2VwIDI4IDA3OjQzOjM0IDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBjLWNvbW1vbi5jIChjX2dldF9hbGlhc19zZXQpOiBUaWdodGVuIHNsaWdodGx5IGZvciBGVU5DVElPTl9UWVBFcwoJYW5kIEFSUkFZX1RZUEVzLiAgVGlkeSB1cC4gIEltcHJvdmUgc3VwcG9ydCBmb3IgdHlwZS1wdW5uaW5nLgoJKiBleHByLmMgKHN0b3JlX2ZpZWxkKTogQWRkIGFsaWFzX3NldCBwYXJhbWV0ZXIuICBTZXQgdGhlCglNRU1fQUxJQVNfU0VUIGFjY29yZGluZ2x5LCBpZiB0aGUgdGFyZ2V0IGlzIGEgTUVNLgoJKGV4cGFuZF9hc3NpZ25tZW50KTogVXNlIGl0LgoJKHN0b3JlX2NvbnN0cnVjdG9yX2ZpZWxkKTogUGFzcyAwLgoJKGV4cGFuZF9leHByKTogTGlrZXdpc2UuCgpNb24gU2VwIDI4IDA3OjU0OjAzIDE5OTggIENhdGhlcmluZSBNb29yZSAgPGNsbUBjeWdudXMuY29tPgoKCSogZmxhZ3MuaDogQWRkIGZsYWdfZGF0YV9zZWN0aW9ucy4KCSogdG9wbGV2LmM6IEFkZCBvcHRpb24gLWZkYXRhLXNlY3Rpb25zLiAgQWRkIGZsYWdfZGF0YV9zZWN0aW9ucy4KCShjb21waWxlX2ZpbGUpOiBFcnJvciBpZiBmbGFnX2RhdGFfc2VjdGlvbnMgbm90IHN1cHBvcnRlZC4KCSogdmFyYXNtLmMgKGFzc2VtYmxlX3ZhcmlhYmxlKTogSGFuZGxlIGZsYWdfZGF0YV9zZWN0aW9ucy4KCSogY29uZmlnL3N2cjQuaDogTW9kaWZ5IHByZWZpeGVzIGZvciBVTklRVUVfU0VDVElPTl9OQU1FLgoJKiBjb25maWcvbWlwcy9lbGYuaDogTGlrZXdpc2UuCgkqIGNvbmZpZy9taXBzL2VsZjY0Lmg6IExpa2V3aXNlLgoJKiBpbnZva2UudGV4aTogRGVzY3JpYmUgLWZkYXRhLXNlY3Rpb25zLgoKTW9uIFNlcCAyOCAwNDoxNTo0NCAxOTk4ICBDcmFpZyBCdXJsZXkgIDxidXJsZXlAbWVsYW5nZS5nbnUub3JnPgoKCSogaW52b2tlLnRleGkgKC1mZmxvYXQtc3RvcmUpOiBDbGFyaWZ5IHRoYXQgdGhpcyBvcHRpb24KCWRvZXMgbm90IGFmZmVjdCBpbnRlcm1lZGlhdGUgcmVzdWx0cyAtLSBvbmx5IHZhcmlhYmxlcy4KCk1vbiBTZXAgMjggMDQ6MTE6MzUgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogY3BwLnRleGk6IFVwZGF0ZSBmb3IgRm9ydHJhbiB1c2FnZSBmcm9tIENyYWlnLgoKRnJpIFNlcCAyNSAyMjowOTo0NyAxOTk4ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiByczYwMDAuYyAoZnVuY3Rpb25fYXJnX2JvdW5kYXJ5KTogUmV2ZXJ0IGFjY2lkZW50YWwgY2hhbmdlIG9uCglTZXB0ZW1iZXIgMTguCgpGcmkgU2VwIDI1IDIwOjMwOjAwIDE5OTggIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgoKCSogcnM2MDAwLmggKEFTTV9PVVRQVVRfTUlfVEhVTkspOiBEZWNsYXJlLCBjYWxsIG91dHB1dF9taV90aHVuay4KCShvdXRwdXRfbWlfdGh1bmspOiBEZWNsYXJlLgoKCSogcnM2MDAwLmMgKG91dHB1dF9taV90aHVuayk6IEZ1bmN0aW9uIHRvIGNyZWF0ZSB0aHVua3MgZm9yIE1JLgoJKG91dHB1dF9mdW5jdGlvbl9wcm9maWxlcik6IFVzZSByMTIgZm9yIHRlbXAsIGluc3RlYWQgb2YgcjExIHNvCgl0aGF0IHdlIHByZXNlcnZlIHRoZSBzdGF0aWMgY2hhaW4gcmVnaXN0ZXIuCgpGcmkgU2VwIDI1IDE0OjE4OjMzIDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIHNkYm91dC5jIChzZGJvdXRfb25lX3R5cGUpOiBEb24ndCBsb29rIGF0IFRZUEVfQklORk8gZmllbGQgb2YgZW51bXMuCgpGcmkgU2VwIDI1IDE5OjMwOjE5IDE5OTggIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBzaC5jIChnZW5fc2hsX3NleHQpOiBGaXggY2FzZSA1LgoKRnJpIFNlcCAyNSAxNzozNToyMyAxOTk4ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogcmVsb2FkMS5jIChyZWxvYWRfY29tYmluZSk6IFJlLWFkZCBsaW5lIHRoYXQgZ290IGFjY2lkZW50YWxseSBsb3N0LgoKRnJpIFNlcCAyNSAxMDo0Mzo0NyAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjY2NwLmMgKHBlZHdhcm5fd2l0aF9maWxlX2FuZF9saW5lKTogRm9yICFfX1NURENfXyBjYXNlLCBhdm9pZAoJYWNjZXNzaW5nIHZhcmlhYmxlcyB1bnRpbCB0aGV5IGFyZSBpbml0aWFsaXplZCB2aWEgdmFfYXJnKCkuCgpUaHUgU2VwIDI0IDIyOjEyOjE2IDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogcmVsb2FkMS5jIChyZWxvYWRfY29tYmluZSk6IEluaXRpYWxpemUgc2V0IGJlZm9yZSB1c2luZy4KClRodSBTZXAgMjQgMTg6NTM6MjAgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogc2Rib3V0LmMgKHNkYm91dF9maWVsZF90eXBlcyk6IERvbid0IGVtaXQgdGhlIHR5cGVzIG9mIGZpZWxkcyB3ZQoJd29uJ3QgYmUgZW1pdHRpbmcuCgpUaHUgU2VwIDI0IDE3OjA1OjMwIDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvYXJtL2FybS5tZCAoaW5zdik6IEFkZCBjb21tZW50LiAgSW4gQ09OU1RfSU5UIGNhc2UsIGFuZAoJb3BlcmFuZDMgd2l0aCBtYXNrIGJlZm9yZSB1c2luZyBpdC4gIFBhdGNoIHByb3ZpZGVkIGJ5IEppbSBXaWxzb24uCgpUaHUgU2VwIDI0IDE1OjA4OjA4IDE5OTggIEpha3ViIEplbGluZWsgIDxqakBzdW5zaXRlLm1zLm1mZi5jdW5pLmN6PgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLmMgKGZ1bmN0aW9uX3ZhbHVlKTogUGVyZm9ybSB0aGUgZXF1aXZhbGVudCBvZgoJUFJPTU9URV9NT0RFIGZvciBBUkNINjQuCgkoZWxpZ2libGVfZm9yX2VwaWxvZ3VlX2RlbGF5KTogQWxsb3cgREltb2RlIG9wZXJhdGlvbnMgaW4gZGVsYXkKCXNsb3Qgb2YgYSByZXR1cm4gZm9yIEFSQ0g2NC4KClRodSBTZXAgMjQgMjI6MTc6NTQgMTk5OCAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHNoLm1kIChzcXJ0c2YyKTogRml4IG1vZGUgb2Ygc3FydC4KClRodSBTZXAgMjQgMjE6NDg6NTEgMTk5OCAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHJlbG9hZDEuYyAoY2hvb3NlX3JlbG9hZF9yZWdzKTogQWxzbyB0cnkgaW5oZXJpdGFuY2Ugd2hlbgoJcmVsb2FkX2luIGlzIGEgc3RhY2sgc2xvdCBvZiBhIHBzZXVkbywgZXZlbiBpZiB3ZSBhbHJlYWR5IGdvdCBhCglyZWxvYWQgcmVnLgoKVGh1IFNlcCAyNCAyMToyMjozOSAxOTk4ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogcmVsb2FkMS5jIChyZWxvYWRfY3NlX3JlZ3NfMSk6IFJlbmFtZWQgZnJvbSByZWxvYWRfY3NlX3JlZ3MuCgkocmVsb2FkX2NzZV9yZWdzKTogTmV3IGZ1bmN0aW9uIGJvZHk6IGNhbGwgcmVsb2FkX2NzZV9yZWdzXzEsCglyZWxvYWRfY29tYmluZSwgcmVsb2FkX2NzZV9tb3ZlMmFkZC4KCVdoZW4gZG9pbmcgZXhwZW5zaXZlX29wdGltaXphdGlvbnMsIGNhbGwgcmVsb2FkX2NzZV9yZWdzXzEgYQoJc2Vjb25kIHRpbWUgYWZ0ZXIgcmVsb2FkX2NzZV9tb3ZlMmFkZC4KCShyZWxvYWRfY29tYmluZSwgcmVsb2FkX2NvbWJpbmVfbm90ZV9zdG9yZSk6IE5ldyBmdW5jdGlvbnMuCgkocmVsb2FkX2NvbWJpbmVfbm90ZV91c2UpOiBOZXcgZnVuY3Rpb24uCgkocmVsb2FkX2NzZV9tb3ZlMmFkZCwgbW92ZTJhZGRfbm90ZV9zdG9yZSk6IE5ldyBmdW5jdGlvbnMuCgpUaHUgU2VwIDI0IDE4OjQ4OjQzIDE5OTggIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogSW4gY29kZSB0byBwcm9tb3RlIFJFTE9BRF9GT1JfWF9BRERSX0FERFIKCXJlbG9hZHMgdG8gUkVMT0FEX0ZPUl9YX0FERFJFU1MgcmVsb2FkcywgdGVzdCBmb3IgcmVsb2FkIHNoYXJpbmcuCgoJUHJvcGVybHkga2VlcCB0cmFjayBvZiBmaXJzdCBSRUxPQURfRk9SX1hfQUREUkVTUyBhbHNvIGZvcgoJbW9yZSB0aGFuIDMgc3VjaCByZWxvYWRzLgoKCUlmIHRoZXJlIGlzIG5vdCBtb3JlIHRoYW4gb25lIFJFTE9BRF9GT1JfWF9BRERSRVNTLCBkb24ndCBjaGFuZ2UKCVJFTE9BRF9GT1JfWF9BRERSX0FERFIgcmVsb2FkLgoKVGh1IFNlcCAyNCAxNzo0NTo1NSAxOTk4ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogZXhwci5jIChzdG9yZV9jb25zdHJ1Y3Rvcik6IFdoZW4gaW5pdGlhbGl6aW5nIGEgZmllbGQgdGhhdCBpcyBzbWFsbGVyCgl0aGFuIGEgd29yZCwgYXQgdGhlIHN0YXJ0IG9mIGEgd29yZCwgdHJ5IHRvIHdpZGVuIGl0IHRvIGEgZnVsbCB3b3JkLgoKCSogY3NlLmMgKGNzZV9pbnNuKTogV2hlbiB3ZSBhcmUgYWJvdXQgdG8gY2hhbmdlIGEgcmVnaXN0ZXIsCglyZW1vdmUgYW55IGludmFsaWQgcmVmZXJlbmNlcyB0byBpdC4KCgkocmVtb3ZlX2ludmFsaWRfc3VicmVnX3JlZnMpOiBOZXcgZnVuY3Rpb24uCgkobWVudGlvbl9yZWdzKTogU3BlY2lhbCB0cmVhdG1lbnQgZm9yIFNVQlJFR3MuCgkoaW5zZXJ0X3JlZ3MpOiBEb24ndCBzdHJpcCBTVUJSRUcgZm9yIGNhbGwgdG8gbWVudGlvbl9yZWdzLgoJQ2hlY2sgaWYgcmVnX3RpY2sgbmVlZHMgdG8gYmUgYnVtcGVkIHVwIGJlZm9yZSB0aGF0IGNhbGwuCgkobG9va3VwX2FzX2Z1bmN0aW9uKTogVHJ5IHRvIG1hdGNoIGtub3duIHdvcmRfbW9kZSBjb25zdGFudHMgd2hlbgoJbG9va2luZyBmb3IgYSBub3Jyb3dlciBjb25zdGFudC4KCShjYW5vbl9oYXNoKTogU3BlY2lhbCB0cmVhdG1lbnQgZm9yIFNVQlJFR3MuCgpUaHUgU2VwIDI0IDAxOjM1OjM0IDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogY29uZmlnL3NwYXJjL3NvbDItc2xkLTY0LmggKFRSQU5TRkVSX0ZST01fVFJBTVBPTElORSk6IERlZmluZS4KCSogY29uZmlnL3NwYXJjL3NwYXJjLmMgKHNwYXJjNjRfaW5pdGlhbGl6ZV90cmFtcG9saW5lKTogSWYgdGhhdCBpcwoJZGVmaW5lZCwgZW1pdCBsaWJjYWxsIHRvIF9fZW5hYmxlX2V4ZWN1dGVfc3RhY2suICBBbHNvIGZpeCBvcGNvZGVzCglhbmQgb2Zmc2V0cyBpbiBhY3R1YWwgc3RhY2sgdHJhbXBvbGluZSBjb2RlIHNvIHRoZXkgbWF0Y2ggdGhlCgljb21tZW50YXJ5IGFuZCBhY3R1YWxseSB3b3JrLgoKVGh1IFNlcCAyNCAwMToxOTowMiAxOTk4ICBKYWt1YiBKZWxpbmVrICA8ampAc3Vuc2l0ZS5tcy5tZmYuY3VuaS5jej4KCgkqIGNvbmZpZ3VyZS5pbiAoc3BhcmN2OS0qLXNvbGFyaXMpOiBVc2UgdC1zb2wyIGFuZCB0LXNvbDItNjQgZm9yCgl0bWFrZV9maWxlLgoJKHNwYXJjNjQtKi1saW51eCk6IFVzZSB0LWxpbnV4IGFuZCBzcGFyYy90LWxpbnV4NjQgZm9yCgl0bWFrZV9maWxlLiAgU2V0IGV4dHJhX3BhcnRzIHRvIG5lZWRlZCBjcnQgb2JqZWN0cy4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoJKiBjb25maWcvc3BhcmMvbGludXg2NC5oIChTUEFSQ19CSV9BUkNIKTogRGVmaW5lLgoJKFRBUkdFVF9ERUZBVUxUKTogU2V0IGlmIGRlZmF1bHQgaXMgdjkgb3IgdWx0cmEuCgkoU1RBUlRGSUxFX1NQRUMzMiwgU1RBUlRGSUxFX1NQRUM2NCk6IE5ldyBtYWNyb3MuCgkoU1RBUlRGSUxFX1NQRUMpOiBTZXQgdG8gdGhvc2UgdXBvbiBTUEFSQ19CSV9BUkNILgoJKEVOREZJTEVfU1BFQzMyLCBFTkRGSUxFX1NQRUM2NCwgRU5ERklMRV9TUEVDKTogTGlrZXdpc2UuCgkoU1VCVEFSR0VUX0VYVFJBX1NQRUNTLCBMSU5LX0FSQ0gzMl9TUEVDLCBMSU5LX0FSQ0g2NF9TUEVDLAoJTElOS19TUEVDLCBMSU5LX0FSQ0hfU1BFQyk6IExpa2V3aXNlLgoJKFRBUkdFVF9WRVJTSU9OKTogRGVmaW5lLgoJKE1VTFRJTElCX0RFRkFVTFQpOiBEZWZpbmUuCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5oIChDUFBfQ1BVX0RFRkFVTFRfU1BFQyk6IFJlYXJyYW5nZSBzbyB0aGF0CgltaXhlZCAzMi82NCBiaXQgY29tcGlsZXJzIGJhc2VkIHVwb24gU1BBUkNfQklfQVJDSCB3b3JrLgoJKENQUF9DUFU2NF9ERUZBVUxUX1NQRUMsIENQUF9DUFUzMl9ERUZBVUxUX1NFQyk6IERlZmluZQoJYXBwcm9wcmlhdGVseS4KCShUQVJHRVRfU1dJVENIRVMpOiBBbGxvdyBwdHIzMi9wdHI2NCBvcHRpb25zIG9uY2UgbW9yZS4KCSogY29uZmlnL3NwYXJjL3NwYXJjLmMgKHNwYXJjX292ZXJyaWRlX29wdGlvbnMpOiBJZiBhcmNoIGFuZAoJcG9pbnRlciBzaXplIGRpc2FncmVlLCBlbWl0IGRpYWdub3N0aWMgYW5kIGZpeCBpdCB1cC4gIElmCglTUEFSQ19CSV9BUkNIIGFuZCBUQVJHRVRfQVJDSDMyLCBzZXQgY21vZGVsIHRvIENNXzMyLiAgVHVybiBvZmYKCVY4UExVUyBpbiA2NC1iaXQgbW9kZS4KCSogY29uZmlnL3NwYXJjL3QtbGludXg2NDogTmV3IGZpbGUuCgkqIGNvbmZpZy9zcGFyYy90LXNvbDItNjQ6IE5ldyBmaWxlLgoJKiBjb25maWcvc3BhcmMvdC1zb2wyOiBBZGp1c3QgYnVpbGQgcnVsZXMgdG8gdXNlIE1VTFRJTElCX0NGTEFHUy4KCSogY29uZmlnL3NwYXJjL3NvbDItc2xkLTY0LmggKFNQQVJDX0JJX0FSQ0gpOiBEZWZpbmUuCgkoQVNNX0NQVTMyX0RFRkFVTFRfU1BFQywgQVNNX0NQVTY0X0RFRkFVTFRfU1BFQywKCUNQUF9DUFUzMl9ERUZBVUxUX1NQRUMsIENQUF9DUFU2NF9ERUZBVUxUX1NQRUMpOiBEZWZpbmUuCgkoQVNNX1NQRUMsIENQUF9DUFVfU1BFQyk6IFNldCBhcHByb3ByaWF0ZWx5IGJhc2VkIHVwb24gdGhvc2UuCgkoU1RBUlRGSUxFX1NQRUMzMiwgU1RBUlRGSUxFX1NQRUMzMiwgU1RBUlRGSUxFX0FSQ0hfU1BFQyk6CglEZWZpbmUuCgkoU1RBUlRGSUxFX1NQRUMpOiBTZXQgYXBwcm9wcmlhdGVseSBiYXNlZCB1cG9uIHRob3NlLgoJKENQUF9DUFVfREVGQVVMVF9TUEVDLCBBU01fQ1BVX0RFRkFVTFRfU1BFQyk6IFNldCBiYXNlZCB1cG9uCglkaXNwb3NpdGlvbiBvZiBERUZBVUxUX0FSQ0gzMl9QLgoJKExJTktfQVJDSDMyX1NQRUMsIExJTktfQVJDSDY0X1NQRUMpOiBEZWZpbmUuCgkoTElOS19BUkNIX1NQRUMsIExJTktfQVJDSF9ERUZBVUxUX1NQRUMpOiBTZXQgYmFzZWQgdXBvbiB0aG9zZS4KCShDQzFfU1BFQywgTVVMVElMSUJfREVGQVVMVFMpOiBTZXQgYmFzZWQgdXBvbiBERUZBVUxUX0FSQ0gzMl9QLgoJKE1EX1NUQVJURklMRV9QUkVGSVgpOiBTZXQgY29ycmVjdGx5IGJhc2VkIHVwb24gU1BBUkNfQklfQVJDSC4KCSogY29uZmlnL3NwYXJjL3htLXN5c3Y0LTY0LmggKEhPU1RfQklUU19QRVJfTE9ORyk6IE9ubHkgc2V0IG9uCglhcmNoNjQvdjkuCgkqIGNvbmZpZy9zcGFyYy94bS1zcDY0LmggKEhPU1RfQklUU19QRVJfTE9ORyk6IExpa2V3aXNlLgoKV2VkIFNlcCAyMyAyMjozMjozMSAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogcnRsLmggKGluaXRfdmlydHVhbF9yZWdzKTogTmV3IGZ1bmN0aW9uLgoJKiBlbWl0LXJ0bC5jIChpbml0X3ZpcnR1YWxfcmVncyk6IERlZmluZS4KCShpbnNuX2VtaXQpOiBVc2UgaXQuCgkqIGludGVncmF0ZS5jIChzYXZlX2Zvcl9pbmxpbmVfY29weWluZyk6IExpa2V3aXNlLgoKV2VkIFNlcCAyMyAxNjoyMjowMSAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL2FybS90aHVtYi5oOiBUaGUgZm9sbG93aW5nIHBhdGNoZXMgd2VyZSBtYWRlIGJ5IEppbSBXaWxzb246CgkoZW51bSByZWdfY2xhc3MpOiBBZGQgTk9OQVJHX0xPX1JFR1Mgc3VwcG9ydC4KCShSRUdfQ0xBU1NfTkFNRVMsIFJFR19DTEFTU19DT05URU5UUywgUkVHTk9fUkVHX0NMQVNTLAoJUFJFRkVSUkVEX1JFTE9BRF9DTEFTUywgU0VDT05EQVJZX1JFTE9BRF9DTEFTUyk6IExpa2V3aXNlLgoJKEdPX0lGX0xFR0lUSU1BVEVfQUREUkVTUyk6IERpc2FibGUgUkVHK1JFRyBhZGRyZXNzZXMgYmVmb3JlIHJlbG9hZAoJY29tcGxldGVzLiAgUmUtZW5hYmxlIEhJbW9kZSBSRUcrT0ZGU0VUIGFkZHJlc3Nlcy4KCShMRUdJVElNSVpFX1JFTE9BRF9BRERSRVNTKTogRGVmaW5lLgoKCSogZXhwbWVkLmMgKGV4dHJhY3RfYml0X2ZpZWxkKTogQWRkIGNvbW1lbnQgZnJvbSBKaW0gV2lsc29uLgoKV2VkIFNlcCAyMyAxMzoyNjowMiAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEuYyAoZ2V0X2FsaWduZWRfbWVtKTogUmV2ZXJ0IFNlcCAyMCBjaGFuZ2UuCgkoYWxwaGFfc2V0X21lbWZsYWdzLCBhbHBoYV9zZXRfbWVtZmxhZ3NfMSk6IExpa2V3aXNlLgoJKGFscGhhX2FsaWduX2luc25zKTogUHJvcGVybHkgY2FsY3VsYXRlIGluaXRpYWwgb2Zmc2V0IHdydCBtYXhfYWxpZ24uCgpXZWQgU2VwIDIzIDEwOjQ1OjQ0IDE5OTggIFJpY2hhcmQgRWFybnNoYXcgIChyZWFybnNoYUBhcm0uY29tKQoKCSogYXJtLmMgKGZpbmRfYmFycmllcik6IFJldmVydCBjaGFuZ2Ugb2YgQXByIDIzLiAgSGFuZGxlIHRhYmxlCglqdW1wcyBhcyBhIHNpbmdsZSBlbnRpdHksIHRha2luZyBpbnRvIGFjY291bnQgdGhlIHNpemUgb2YgdGhlCgl0YWJsZS4KClR1ZSBTZXAgMjIgMTU6MTM6MzQgMTk5OCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiB0cmVlLmRlZiAoU1dJVENIX0VYUFIpOiBOZXcgdHJlZSBub2RlIGRlZmluaXRpb24uCgpNb24gU2VwIDIxIDIzOjQwOjM4IDE5OTggIEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKTW9uIFNlcCAyMSAyMjozMToxNCAxOTk4ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KCk1vbiBTZXAgMjEgMjI6NDg6MDkgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluOiBSZWNvZ25pemUgaVszNDU2N104Ni0qLW9wZW5ic2QqIGFuZCBoYW5kbGUgaXQgbGlrZQoJTmV0QlNELgoKTW9uIFNlcCAyMSAyMjowNToyOCAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBSZXZlcnQgdGhpcyBwYXRjaC4KCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IERvIG5vdCByZXBsYWNlIGEgcHNldWRvIHdpdGgKCShNRU0gKHJlZ19lcXVpdl9hZGRyKSkgaW4gdGhlIGluaXRpYWxpemluZyBpbnNuIGZvciB0aGUKCXBzZXVkby4KCk1vbiBTZXAgMjEgMjA6MTk6NDEgMTk5OCAgSm9obiBDYXJyICA8amZjQG1pdC5lZHU+CgoJKiBmaW5hbC5jIChmaW5hbF9zY2FuX2luc24pOiBEaXNhYmxlIHRyYWNraW5nIENDIGFjcm9zcyBicmFuY2hlcy4KCk1vbiBTZXAgMjEgMTc6MTU6MjYgMTk5OCAgQW5kcmV3IE1hY0xlb2QgIDxhbWFjbGVvZEBjeWdudXMuY29tPgoKCSogZXhwci5oIChlaF9ydGltZV9tYXRjaF9saWJmdW5jKTogTmV3IGV4dGVybiBkZWNsYXJhdGlvbi4KCSogb3B0YWJzLmMgKGluaXRfb3B0YWJzKTogU2V0IGVoX3J0aW1lX21hdGNoX2xpYmZ1bmMuCgkqIGV4Y2VwdC5jIChzdGFydF9jYXRjaF9oYW5kbGVyKTogVXNlIGVoX3J0aW1lX21hdGNoX2xpYmZ1bmMuCgkqIGxpYmdjYzIuYyAoX19laF9ydGltZV9tYXRjaCk6IEFsd2F5cyByZXR1cm4gMCBpZiB0aGUgbWF0Y2hlciBpcwoJTlVMTC4gT25seSBpbmNsdWRlIDxzdGRpby5oPiBpZiBpbmhpYml0X2xpYmMgaXMgbm90IGRlZmluZWQuCgpNb24gU2VwIDIxIDE0OjEwOjUxIDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHRvcGxldi5jIChyZXN0X29mX2NvbXBpbGF0aW9uKTogU2tpcCBjb21waWxpbmcgYW55dGhpbmcgd2l0aAoJREVDTF9FWFRFUk5BTCBzZXQsIG5vdCBqdXN0IGlmIGl0IGhhcyBERUNMX0lOTElORSBhcyB3ZWxsLgoKTW9uIFNlcCAyMSAxMzo1MTowNSAxOTk4ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBmbG93LmMgKGZpbmRfYmFzaWNfYmxvY2tzKTogRGVsZXRlIGNoZWNrIGZvciBpbl9saWJjYWxsX2Jsb2NrIHdoZW4KCXByZXZfY29kZSBpcyBhIENBTExfSU5TTi4gIENoYW5nZSBjaGVjayBmb3IgUkVHX1JFVFZBTCBub3RlIHRvCgl1c2UgaW5fbGliY2FsbF9ibG9jay4KCShmaW5kX2Jhc2ljX2Jsb2Nrc18xKTogRGVsZXRlIGNoZWNrIGZvciBpbl9saWJjYWxsX2Jsb2NrIHdoZW4gcHJldl9jb2RlCglpcyBhIENBTExfSU5TTi4gIElmIENBTExfSU5TTiBhbmQgaW5fbGliY2FsbF9ibG9jaywgdGhlbiBjaGFuZ2UgY29kZQoJdG8gSU5TTi4KCk1vbiBTZXAgMjEgMTQ6MDI6MjMgMTk5OCAgUm9iZXJ0IExpcGUgIDxyb2JlcnRsQGRnaWkuY29tPgoKCSogaTM4Ni5oIChUQVJHRVRfU1dJVENIRVMpOiBJbXByb3ZlIGRvYyBmb3IgYWxpZ24tZG91YmxlLiAgRml4Cgl0eXBvIGluIG5vLWZhbmN5LW1hdGgtMzg3IGRlc2NyaXB0aW9uLgoKTW9uIFNlcCAyMSAwOToyNzoxOCAxOTk4ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KCk1vbiBTZXAgMjEgMDk6MjQ6NDkgMTk5OCAgU3RhbiBDb3ggIDxzY294QGN5Z251cy5jb20+CgoJKiBpMzg2LWNvZmYuaCAoREJYX0RFQlVHR0lOR19JTkZPKTogQWRkZWQuCgpNb24gU2VwIDIxIDA5OjE0OjQ5IDE5OTggIFJvYmVydCBMaXBlICA8cm9iZXJ0bEBkZ2lpLmNvbT4KCgkqIGkzODYuaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIGRlc2NyaXB0aW9uIGZpZWxkcyBmb3IgZmxhZ3MKCWRvY3VtZW50ZWQgaW4gaW5zdGFsbC50ZXhpLgoJKFRBUkdFVF9PUFRJT05TKTogTGlrZXdpc2UuCgpNb24gU2VwIDIxIDAxOjM5OjAzIDE5OTggIEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKTW9uIFNlcCAyMSAwMTo1MzowNSAxOTk4ICBGZWxpeCBMZWUgIDxmbGVlQGN5Z251cy5jb20+CgoJKiBjLWxleC5jIChpbml0X2xleCk6IFVzZSBnZXRlbnYgKCJMQU5HIiksIG5vdCBHRVRfRU5WSVJPTk1FTlQgKCkuCgkqIGNjY3AuYyAobWFpbik6IExpa2V3aXNlLgoKCSogY2NjcC5jLCBjb2xsZWN0Mi5jLCBjcHBsaWIuYywgZ2NjLmMsIGNvbmZpZy9pMzg2L3htLWN5Z3dpbjMyLmg6CglSZW5hbWUgR0VUX0VOVklST05NRU5UIHRvIEdFVF9FTlZfUEFUSF9MSVNULCBhbmQgZml4IHNvbWUKCW1hY3JvLXVzZSBidWdzLgoKTW9uIFNlcCAyMSAwMDo1MjoxMiAxOTk4ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluIChMSUJTKTogTGluayBpbiBsaWJpYmVydHkuYS4KCSogYy1jb21tb24uYywgZ2NjLmMsIHRvcGxldi5jOiBSZXBsYWNlIChzb21lKSBiY29weSBjYWxscyBieSBtZW1jcHkuCgpTdW4gU2VwIDIwIDIzOjI4OjExIDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiByZWxvYWQxLmMgKGVtaXRfcmVsb2FkX2luc25zKTogQWNjZXB0IGEgbmV3IGFyZyBmb3IgdGhlIGJiLiAgVXNlCglpdCB0byB1cGRhdGUgYmIgYm91bmRhcmllcy4gIFVwZGF0ZSBjYWxsZXIuCgkqIGZ1bmN0aW9uLmMgKHJlcG9zaXRpb25fcHJvbG9ndWVfYW5kX2VwaWxvZ3VlX25vdGVzKTogVXBkYXRlCgliYiBib3VuZGFyaWVzIHdydCB0aGUgbW92ZWQgbm90ZS4KClN1biBTZXAgMjAgMjA6NTc6MDIgMTk5OCAgUm9iZXJ0IExpcGUgIDxyb2JlcnRsQGRnaWkuY29tPgoKCSogY29uZmlndXJlLmluIChpKjg2LSotc3lzdjUqKTogVXNlIGZpeGluYy5zdnI0IHRvIHBhdGNoIGJ5dGVvcmRlcgoJcHJvYmxlbXMuCgkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KClN1biBTZXAgMjAgMTk6MDE6NTEgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGFscGhhLmMgKGFscGhhX3NyX2FsaWFzX3NldCk6IE5ldyB2YXJpYWJsZS4KCShvdmVycmlkZV9vcHRpb25zKTogU2V0IGl0LgoJKGFscGhhX2V4cGFuZF9wcm9sb2d1ZSwgYWxwaGFfZXhwYW5kX2VwaWxvZ3VlKTogVXNlIGl0LgoJKG1vZGVfbWFza19vcGVyYW5kKTogRml4IHNpZ25lZC11bnNpZ25lZCBjb21wYXJpc29uIHdhcm5pbmcuCgkoYWxwaGFfZXhwYW5kX2Jsb2NrX21vdmUpOiBMaWtld2lzZS4KCShwcmludF9vcGVyYW5kKTogTGlrZXdpc2UuCgkoZ2V0X2FsaWduZWRfbWVtKTogVXNlIGNoYW5nZV9hZGRyZXNzLgoJKGFscGhhX3NldF9tZW1mbGFncywgYWxwaGFfc2V0X21lbWZsYWdzXzEpOiBTZXQgdGhlIGFsaWFzIHNldC4KCShhbHBoYWV2NF9pbnNuX3BpcGUsIGFscGhhZXY0X25leHRfZ3JvdXApOiBOZXcgZnVuY3Rpb25zLgoJKGFscGhhZXY0X25leHRfbm9wLCBhbHBoYWV2NV9uZXh0X25vcCk6IE5ldyBmdW5jdGlvbnMuCgkoYWxwaGFfYWxpZ25faW5zbnMpOiBSZW1hZGUgZnJvbSBvbGQgYWxwaGFldjVfYWxpZ25faW5zbnMKCXRvIGhhbmRsZSBtdWx0aXBsZSBwcm9jZXNzb3JzLgoJKGFscGhhX3Jlb3JnKTogQ2FsbCBhbHBoYV9hbGlnbl9pbnNucyBmb3IgYm90aCBldjQgYW5kIGV2NS4KCSogb3V0cHV0LmggKGxhYmVsX3RvX2FsaWdubWVudCk6IFByb3RvdHlwZS4KCgkqIHRyZWUuYyAobmV3X2FsaWFzX3NldCk6IE5ldyBmdW5jdGlvbi4KCSogdHJlZS5oIChuZXdfYWxpYXNfc2V0KTogRGVjbGFyZSBpdC4KCSogYy1jb21tb24uYyAoY19nZXRfYWxpYXNfc2V0KTogVXNlIGl0LgoKU3VuIFNlcCAyMCAxMjozNTo1NSAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZm9sZC1jb25zdC5jIChmb2xkKTogWWV0IGFub3RoZXIgQ09ORF9FWFBSIGJ1Zzogd2hlbiBmb2xkaW5nCgl0byBhbiBBQlMgZXhwciwgY29udmVydCBhbiB1bnNpZ25lZCBpbnB1dCB0byBzaWduZWQuCgpTdW4gU2VwIDIwIDEyOjE0OjQ1IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGZvbGQtY29uc3QuYyAoZm9sZCk6IEZpeCBhbm90aGVyIHR5cGUgaW4gQ09ORF9FWFBSIGhhbmRsaW5nIGNvZGUuCgoxOTk4LTA5LTIwICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWd1cmUuaW46IEFkZCBzdXBwb3J0IGZvciBjNHggdGFyZ2V0cy4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKU3VuIFNlcCAyMCAwMDowMDo1MSAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogY29tYmluZS5jIChkaXN0cmlidXRlX25vdGVzKTogSWYgYW4gaW5zbiBpcyBhIGNjMCB1c2VyLCBvbmx5CglkZWxldGUgaXQgaWYgd2UgY2FuIGFsc28gZGVsZXRlIHRoZSBjYzAgc2V0dGVyLgoKU3VuIFNlcCAyMCAwMDoyMjoyMyAxOTk4ICBNaWNoYWVsIFRpZW1hbm4gIDxtaWNoYWVsQGltcGFjdC50aWVtYW5uLm9yZz4KCgkqIGZvbGQtY29uc3QuYyAoZm9sZCk6IEZpeCB0eXBvIGluIENPTkRfRVhQUiBoYW5kbGluZyBjb2RlLgoJKGludmVydF90cnV0aHZhbHVlKTogRW5hYmxlIHRydXRodmFsdWUgaW52ZXJzaW9uIGZvcgoJZmxvYXRpbmctcG9pbnQgb3BlcmFuZHMgaWYgLWZmYXN0LW1hdGguCgpTYXQgU2VwIDE5IDIzOjU4OjA3IDE5OTggIE1lbGlzc2EgTydOZWlsbCAgPG9uZWlsbEBjcy5zZnUuY2E+CgoJKiBjb25maWd1cmUuaW46IERpc2FibGUgY29sbGVjdDIgZm9yIG5leHRzdGVwLiAgSW5zdGVhZCB1c2UKCWNydGJlZ2luL2NydGVuZC4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoJKiBjb25maWcvbmV4dHN0ZXAuaCAoU1RBUlRGSUxFX1NQRUMpOiBBZGQgY3J0YmVnaW4uCgkoRU5ERklMRV9TUEVDKTogRGVmaW5lLgoJKE9CSkVDVF9GT1JNQVRfTUFDSE8pOiBEZWZpbmUuCgkoRUhfRlJBTUVfU0VDVElPTl9BU01fT1ApOiBEZWZpbmUuCgkqIGNydHN0dWZmLmM6IEhhbmRsZSBNQUNITy4KClN1biBTZXAgMjAgMDA6MjQ6MjQgMTk5OCAgUm9iZXJ0IExpcGUgIDxyb2JlcnRsQGRnaWkuY29tPgoKCSogY29uZmlnL2kzODYvc2NvNS5oIChUQVJHRVRfTUVNX0ZVTkNUSU9OUyk6IERlZmluZS4KCjE5OTgtMDktMTkgIFRvcmJqb3JuIEdyYW5sdW5kICA8dGVnZUBtYXRlbWF0aWsuc3Uuc2U+CgoJKiBmcC1iaXQuYyAocGFja19kKTogRG8gbm90IGNsZWFyIFNJR04gd2hlbiBmcmFjdGlvbiBpcyAwLgoJKF9mcGFkZF9wYXJ0cyk6IEdldCBzaWduIHJpZ2h0IGZvciAwLgoKMTk5OC0wOS0xOSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogZ2luY2x1ZGUvdmFyYXJncy5oOiBBZGQgc3VwcG9ydCBmb3IgQzR4IHRhcmdldC4KCSogZ2luY2x1ZGUvc3RkYXJncy5oOiBMaWtld2lzZS4KClNhdCBTZXAgMTkgMTI6MDU6MDkgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGFscGhhLmMgKGFscGhhX3JldHVybl9hZGRyKTogU0VUIHNob3VsZCBiZSBWT0lEbW9kZS4KCShhbHBoYV9lbWl0X3NldF9sb25nX2NvbnN0KTogUmV3cml0ZSB0byBiZSBjYWxsYWJsZSBmcm9tIHJlbG9hZAoJYW5kIDMyLWJpdCBob3N0cy4KCShhbHBoYV9leHBhbmRfZXBpbG9ndWUpOiBVcGRhdGUgZm9yIGFscGhhX2VtaXRfc2V0X2xvbmdfY29uc3QuCgkqIGFscGhhLm1kIChtb3ZkaSk6IExpa2V3aXNlLgoKU2F0IFNlcCAxOSAwNzozMzozNiAxOTk4ICBSaWNoYXJkIEVhcm5zaGF3ICAocmVhcm5zaGFAYXJtLmNvbSkKCgkqIGFybS5jIChhZGRfY29uc3RhbnQpOiBOZXcgcGFyYW1ldGVyIGFkZHJlc3Nfb25seSwgY2hhbmdlIGNhbGxlci4KCVNldCBpdCBub24temVybyBpZiB0YWtpbmcgdGhlIGFkZHJlc3Mgb2YgYW4gaXRlbSBpbiB0aGUgcG9vbC4KCShhcm1fcmVvcmcpOiBIYW5kbGUgY2FzZXMgd2hlcmUgd2UgbmVlZCB0aGUgYWRkcmVzcyBvZiBhbiBpdGVtIGluCgl0aGUgcG9vbC4KCgkqIGFybS5jIChiYWRfc2lnbmVkX2J5dGVfb3BlcmFuZCk6IENoZWNrIGJvdGggYXJtcyBvZiBhIHN1bSBpbgoJYSBtZW1vcnkgYWRkcmVzcy4KCSogYXJtLm1kIChzcGxpdHMgZm9yICpleHRlbmRxaWhpX2luc24gYW5kICpleHRlbmRxaXNpX2luc24pOiBIYW5kbGUKCW1lbW9yeSBhZGRyZXNzZXMgdGhhdCBhcmUgbm90IGluIHN0YW5kYXJkIGNhbm9uaWNhbCBmb3JtLgoKU2F0IFNlcCAxOSAwMTowMDozMiAxOTk4ICBNaWNoYWVsIEhheWVzICAobXBoQGVsZWMuY2FudGVyYnVyeS5hYy5ueikKCgkqIFJFQURNRS5DNFg6IE5ldyBmaWxlIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIGM0eCBwb3J0cy4KCSogZ2luY2x1ZGUvdmEtYzR4Lmg6IE5ldyBmaWxlIGZvciBjNHggdmFyYXJncyBzdXBwb3J0LgoJKiBjb25maWcvYzR4OiBOZXcgZGlyZWN0b3J5IHdpdGggYzR4IHBvcnQgZmlsZXMuCgpGcmkgU2VwIDE4IDIyOjUyOjA1IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHMpOiBEbyBub3QgcmVwbGFjZSBhIHBzZXVkbyB3aXRoCgkoTUVNIChyZWdfZXF1aXZfYWRkcikpIGluIHRoZSBpbml0aWFsaXppbmcgaW5zbiBmb3IgdGhlCglwc2V1ZG8uCgpGcmkgU2VwIDE4IDIzOjUwOjU2IDE5OTggIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIHRvcGxldi5jIChyZXN0X29mX2NvbXBpbGF0aW9uKTogU2V0IGJjdF9wIG9uIHNlY29uZCBjYWxsIHRvCglsb29wX29wdGltaXplLgoJKiBsb29wLmMgKGxvb3Bfb3B0aW1pemUsIHNjYW5fbG9vcCwgc3RyZW5ndGhfcmVkdWNlKTogTmV3IGFyZ3VtZW50CgliY3RfcC4KCShzdHJlbmd0aF9yZWR1Y2UpOiBPbmx5IGNhbGwgYW5hbHl6ZV9sb29wX2l0ZXJhdGlvbnMgYW5kCglpbnNlcnRfYmN0IGlmIGJjdF9wIHNldC4KCShjaGVja19kYnJhX2xvb3ApOiBGaXggdHlwby4KCShpbnNlcnRfYmN0KTogVXNlIHdvcmRfbW9kZSBpbnN0ZWFkIG9mIFNJbW9kZS4KCShpbnN0cnVtZW50X2xvb3BfYmN0KTogTGlrZXdpc2UuICBEbyBub3QgZGVsZXRlIGl0ZXJhdGlvbiBjb3VudAoJY29uZGl0aW9uIGNvZGUgZ2VuZXJhdGlvbiBpbnNuLiAgSW5pdGlhbGl6ZSBpdGVyYXRpb24gY291bnQgYmVmb3JlCglsb29wIHN0YXJ0LgoJKiBydGwuaCAobG9vcF9vcHRpbWl6ZSk6IFVwZGF0ZSBwcm90b3R5cGUuCgoJKiBnaW5jbHVkZS92YS1wcGMuaCAodmFfYXJnKTogbG9uZ2xvbmcgdHlwZXMgaW4gb3ZlcmZsb3cgYXJlYSBhcmUKCW5vdCBkb3VibGV3b3JkIGFsaWduZWQuCgoJKiByczYwMDAuYyAob3B0aW1pemF0aW9uX29wdGlvbnMpOiBOZXcgZnVuY3Rpb24uCgkoc2Vjb25kYXJ5X3JlbG9hZF9jbGFzcyk6IE9ubHkgY2FsbCB0cnVlX3JlZ251bSBmb3IgUFNFVURPX1JFR3MuCgkqIHJzNjAwMC5oIChPUFRJTUlaQVRJT05fT1BUSU9OUyk6IERlZmluZS4KCShSRUdfQUxMT0NfT1JERVIpOiBBbGxvY2F0ZSBoaWdoZXN0IG51bWJlcmVkIGNvbmRpdGlvbiByZWdzaXRlcnMKCWZpcnN0OyBjcjEgY2FuIGJlIHVzZWQgZm9yIEZQIHJlY29yZCBjb25kaXRpb24gaW5zbnMuCgpGcmkgU2VwIDE4IDA5OjQ0OjU1IDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvbTMyci9tMzJyLmggKG0zMnJfYmxvY2tfaW1tZWRpYXRlX29wZXJhbmQpOiBBZGQgdG8KCVBSRURJQ0FURV9DT0RFUy4KCgkqIGNvbmZpZy9tMzJyL20zMnIubWQ6IEFkZCAibW92c3Ryc2kiIGFuZCAibW92c3Ryc2lfaW50ZXJuYWwiCglwYXR0ZXJucy4KCgkqIGNvbmZpZy9tMzJyL20zMnIuYyAobTMycl9wcmludF9vcGVyYW5kKTogQWRkICdzJyBhbmQgJ3AnCglvcGVyYXRvcnMuCgkoYmxvY2tfbW92ZV9jYWxsKTogTmV3IGZ1bmN0aW9uOiBDYWxsIGEgbGlicmFyeSByb3V0aW5lIHRvIGNvcHkgYQoJYmxvY2sgb2YgbWVtb3J5LgoJKG0zMnJfZXhwYW5kX2Jsb2NrX21vdmUpOiBOZXcgZnVuY3Rpb246IEV4cGFuZCBhICJtb3ZzdHJzaSIKCXBhdHRlcm4gaW50byBhIHNlcXVlbmNlIG9mIGluc25zLgoJKG0zMnJfb3V0cHV0X2Jsb2NrX21vdmUpOiBOZXcgZnVuY3Rpb246IEV4cGFuZCBhCgkibW92c3Ryc2lfaW50ZXJuYWwiIHBhdHRlcm4gaW50byBhIHNlcXVlbmNlIG9mIGFzc2VtYmxlciBvcGNvZGVzLgoJKG0zMnJfYmxvY2tfaW1tZWRpYXRlX29wZXJhbmQpOiBOZXcgZnVuY3Rpb246IFJldHVybiB0cnVlIGlmIHRoZQoJUlRMIGlzIGFuIGludGVnZXIgY29uc3RhbnQsIGxlc3MgdGhhbiBvciBlcXVhbCB0byBNQVhfTU9WRV9CWVRFUy4KClRodSBTZXAgMTcgMTY6NDI6MTYgMTk5OCAgQW5kcmV3IE1hY0xlb2QgIDxhbWFjbGVvZEBjeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKHN0YXJ0X2NhdGNoX2hhbmRsZXIpOiBJc3N1ZSAnZmF0YWwnIGluc3RlYWQgb2YgJ2Vycm9yJyBhbmQKCXJlLWFsaWduIHNvbWUgY29kZS4KCSogbGliZ2NjMi5jIChfX2VoX3J0aW1lX21hdGNoKTogZnByaW50ZiBhIHJ1bnRpbWUgZXJyb3IuIFVzZSA8c3RkaW8uaD4uCgpUaHUgU2VwIDE3IDEyOjI0OjMzIDE5OTggIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiByZWdtb3ZlLmMgKGNvcHlfc3JjX3RvX2Rlc3QpOiBDaGVjayB0aGF0IG1vZGVzIG1hdGNoLgoKV2VkIFNlcCAxNiAyMjoxMDo0MiAxOTk4ICBSb2JlcnQgTGlwZSAgPHJvYmVydGxAZGdpaS5jb20+CgoJKiBjb25maWcvaTM4Ni9zY281LmggKFNVUFBPUlRTX1dFQUspOiBUcnVlIG9ubHkgaWYgdGFyZ2V0aW5nIEVMRi4KCldlZCBTZXAgMTYgMTU6MjQ6NTQgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGkzODYuaCAoUFJFRkVSUkVEX1JFTE9BRF9DTEFTUyk6IFJlc3BlY3QgYW4gZXhpc3RpbmcgY2xhc3MKCW5hcnJvd2VyIHRoYW4gRkxPQVRfUkVHUy4KCldlZCBTZXAgMTYgMTc6NTE6MDAgMTk5OCAgQWxleGFuZHJlIE9saXZhICA8b2xpdmFAZGNjLnVuaWNhbXAuYnI+CgoJKiBjcHBsaWIuYzogUmVtb3ZlZCBPTERfR1BMVVNQTFVTX0lOQ0xVREVfRElSLgoJKiBjY2NwLmM6IExpa2V3aXNlLgoJKiBNYWtlZmlsZS5pbiAob2xkX2d4eF9pbmNsdWRlX2Rpcik6IFJlbW92ZWQuCgpXZWQgU2VwIDE2IDEyOjI5OjIyIDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvc2gvc2guaDogVXBkYXRlIGRlZmluaXRpb24gb2YgSEFORExFX1BSQUdNQSB0byBtYXRjaAoJbmV3IHNwZWNpZmljYXRpb24uCgoJKiBjb25maWcvc2gvc2guYyAoaGFuZGxlX3ByYWdtYSk6IFJlbmFtZSB0byBzaF9oYW5kbGVfcHJhZ21hKCkuCgkoc2hfaGFuZGxlX3ByYWdtYSk6IENoYW5nZSBmdW5jdGlvbiBhcmd1bWVudHMgdG8gbWF0Y2ggbmV3CglzcGVjaWZpY2F0aW9uIGZvciBIQU5ETEVfUFJBR01BLgoKV2VkIFNlcCAxNiAxMjo0MzoxOSAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBnZW4tcHJvdG9zLmMgKHBhcnNlX2ZuX3Byb3RvKTogQ2FzdCBhcmd1bWVudCBvZiBJU0FMTlVNIHRvCglgdW5zaWduZWQgY2hhcicuCgkobWFpbik6IE1hcmsgcGFyYW1ldGVyIGBhcmdjJyB3aXRoIEFUVFJJQlVURV9VTlVTRUQuCglXaGVuIGdlbmVyYXRpbmcgb3V0cHV0LCBpbml0aWFsaXplIG1pc3Npbmcgc3RydWN0IG1lbWJlciB0byB6ZXJvLgoKV2VkIFNlcCAxNiAxNDo0Nzo0MyAxOTk4ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogcmVnbW92ZS5jIChjb3B5X3NyY190b19kZXN0KTogRG9uJ3QgY29weSBpZiB0aGF0IHJlcXVpcmVzCgkoYSkgbmV3IHJlZ2lzdGVyKHMpLgoKV2VkIFNlcCAxNiAwMToyOToxMiAxOTk4ICBCZXJuZCBTY2htaWR0ICA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CgoJKiBnbG9iYWwuYyAocmVnX2FsbG9jbm8pOiBOb3cgc3RhdGljLgoJKiByZWxvYWQxLmMgKHJlZ19hbGxvY25vKTogRGVsZXRlIGRlY2xhcmF0aW9uLgoJKG9yZGVyX3JlZ3NfZm9yX3JlbG9hZCk6IFRha2Ugbm8gYXJndW1lbnRzLiAgRG9uJ3QgdHJlYXQgcmVncwoJYWxsb2NhdGVkIGJ5IGdsb2JhbCBkaWZmZXJlbnRseSB0aGFuIHRob3NlIGFsbG9jYXRlZCBieSBsb2NhbC1hbGxvYy4KCldlZCBTZXAgMTYgMDE6MDk6MDEgMTk5OCAgS2FtaWwgSXNrcmEgIDxpc2tyYUBzdHVkZW50LnVjaS5hZ2guZWR1LnBsPgoKCSogbTY4ay9tNjhrLmMgKG91dHB1dF9mdW5jdGlvbl9wcm9sb2d1ZSk6IFJldmVyc2UgTk9fQUREU1VCX1EKCWNvbmRpdGlvbiwgZml4IGZvcm1hdCBzdHJpbmdzLgoJKG91dHB1dF9mdW5jdGlvbl9lcGlsb2d1ZSk6IExpa2V3aXNlLgoKCSogbTY4ay9tNjhrLmM6IERvbid0IGluY2x1ZGUgPHN0ZGxpYi5oPiBkaXJlY3RseS4KCldlZCBTZXAgMTYgMDA6MzA6NTYgMTk5OCAgR2VvZmYgS2VhdGluZyAgPGdlb2Zma0BvemVtYWlsLmNvbS5hdT4KCgkqIGdjc2UuYzogTmV3IGRlZmluaXRpb24gTkVWRVJfU0VUIGZvciByZWdfZmlyc3Rfc2V0LCByZWdfbGFzdF9zZXQsCgltZW1fZmlyc3Rfc2V0LCBtZW1fbGFzdF9zZXQ7IGJlY2F1c2UgMCBjYW4gYmUgYSBDVUlELgoJKG9wcnNfdW5jaGFuZ2VkX3ApOiBVc2UgbmV3IGRlZmluaXRpb24uCgkocmVjb3JkX2xhc3RfcmVnX3NldF9pbmZvKTogTGlrZXdpc2UuCgkocmVjb3JkX2xhc3RfbWVtX3NldF9pbmZvKTogTGlrZXdpc2UuCgkoY29tcHV0ZV9oYXNoX3RhYmxlKTogTGlrZXdpc2UuCgpUdWUgU2VwIDE1IDIyOjU5OjUyIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHJzNjAwMC5jIChvdXRwdXRfZXBpbG9ndWUpOiBIYW5kbGUgQ2hpbGwuCgoJKiBtbjEwMjAwLmggKEFTTV9PVVRQVVRfRFdBUkYyX0FERFJfQ09OU1QpOiBEZWZpbmUuCgkqIG1uMTAzMDAuaCAoQVNNX09VVFBVVF9EV0FSRjJfQUREUl9DT05TVCk6IERlZmluZS4KCgkqIGNvbWJpbmUuYyAobWFrZV9leHRyYWN0aW9uKTogSWYgbm8gbW9kZSBpcyBzcGVjaWZpZWQgZm9yCglhbiBvcGVyYW5kIG9mIGluc3YsIGV4dHYsIG9yIGV4dHp2LCBkZWZhdWx0IGl0IHRvIHdvcmRfbW9kZS4KCShzaW1wbGlmeV9jb21wYXJpc29uKTogU2ltaWxhcmx5LgoJKiBleHBtZWQuYyAoc3RvcmVfYml0X2ZpZWxkKTogU2ltaWxhcmx5LgoJKGV4dHJhY3RfYml0X2ZpZWxkKTogU2ltaWxhcmx5LgoJKiBmdW5jdGlvbi5jIChmaXh1cF92YXJfcmVnc18xKTogU2ltaWxhcmx5LgoJKiByZWNvZy5jICh2YWxpZGF0ZV9yZXBsYWNlX3J0eF8xKTogU2ltaWxhcmx5LgoJKiBtaXBzLm1kIChleHR2LCBleHR6diwgaW5zdiBleHBhbmRlcnMpOiBEZWZhdWx0IG1vZGVzIGZvciBtb3N0CglvcGVyYW5kcy4gIEhhbmRsZSBUQVJHRVRfNjRCSVQuCgkobW92ZGlfdWxkLCBtb3ZkaV91c2QpOiBOZXcgcGF0dGVybnMuCgoJKiBwYS5jIChlbWl0X21vdmVfc2VxdWVuY2UpOiBEbyBub3QgcmVwbGFjZSBhIHBzZXVkbyB3aXRoIGl0cwoJZXF1aXZhbGVudCBtZW1vcnkgbG9jYXRpb24gdW5sZXNzIHdlIGhhdmUgYmVlbiBwcm92aWRlZCBhIHNjcmF0Y2gKCXJlZ2lzdGVyLiAgU2ltaWxhcmx5IGRvIG5vdCBjYWxsIGZpbmRfcmVwbGFjZW1lbnQgdW5sZXNzIGEKCXNjcmF0Y2ggcmVnaXN0ZXIgaGFzIGJlZW4gcHJvdmlkZWQuCgpUdWUgU2VwIDE1IDE5OjIzOjAxIDE5OTggIEJlcm5kIFNjaG1pZHQgIDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCgkqIGkzODYuaCAoUFJFRkVSUkVEX1JFTE9BRF9DTEFTUyk6IEZvciBzdGFuZGFyZCAzODcgY29uc3RhbnRzLAoJcmV0dXJuIEZMT0FUX1JFR1MuCgpUdWUgU2VwIDE1IDE5OjA5OjA2IDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiB0cmVlLmggKEJVSUxUX0lOX0NBTExFUl9SRVRVUk5fQUREUkVTUyk6IFVudXNlZC4gIEtpbGwuCgkoQlVJTFRfSU5fRlAsIEJVSUxUX0lOX1NQLCBCVUlMVF9JTl9TRVRfUkVUVVJOX0FERFJfUkVHKTogS2lsbC4KCShCVUlMVF9JTl9FSF9TVFVCX09MRCwgQlVJTFRfSU5fRUhfU1RVQiwgQlVJTFRfSU5fU0VUX0VIX1JFR1MpOiBLaWxsLgoJKEJVSUxUX0lOX0VIX1JFVFVSTiwgQlVJTFRfSU5fRFdBUkZfQ0ZBKTogTmV3LgoJKiBjLWRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBVcGRhdGUgYWNjb3JkaW5nbHkuCgkqIGV4cHIuYyAoZXhwYW5kX2J1aWx0aW4pOiBMaWtld2lzZS4KCgkqIHJ0bC5oIChnbG9iYWxfcnRsKTogQWRkIGNmYSBlbnRyeS4KCSh2aXJ0dWFsX2NmYV9ydHgsIFZJUlRVQUxfQ0ZBX1JFR05VTSk6IE5ldy4KCShMQVNUX1ZJUlRVQUxfUkVHSVNURVIpOiBVcGRhdGUuCgkqIGVtaXQtcnRsLmMgKGdsb2JhbF9ydGwpOiBBZGQgY2ZhIGVudHJ5LgoJKGluaXRfZW1pdCk6IEluaXRpYWxpemUgaXQuCgkqIGZ1bmN0aW9uLmMgKGNmYV9vZmZzZXQpOiBOZXcuCgkoaW5zdGFudGlhdGVfdmlydHVhbF9yZWdzKTogSW5pdGlhbGl6ZSBpdC4KCShpbnN0YW50aWF0ZV92aXJ0dWFsX3JlZ3NfMSk6IEluc3RhbnRpYXRlIHZpcnR1YWxfY2ZhX3J0eC4KCShleHBhbmRfZnVuY3Rpb25fZW5kKTogQ2FsbCBleHBhbmRfZWhfcmV0dXJuLgoJKiB0bS50ZXhpIChBUkdfUE9JTlRFUl9DRkFfT0ZGU0VUKTogTmV3LgoKCSogZXhjZXB0LmMgKGN1cnJlbnRfZnVuY3Rpb25fZWhfc3R1Yl9sYWJlbCk6IEtpbGwuCgkoY3VycmVudF9mdW5jdGlvbl9laF9vbGRfc3R1Yl9sYWJlbCk6IExpa3dpc2U7IHVwZGF0ZSBhbGwgcmVmZXJlbmNlcy4KCShleHBhbmRfYnVpbHRpbl9zZXRfcmV0dXJuX2FkZHJfcmVnKTogS2lsbC4KCShleHBhbmRfYnVpbHRpbl9laF9zdHViX29sZCwgZXhwYW5kX2J1aWx0aW5fZWhfc3R1Yik6IEtpbGwuCgkoZXhwYW5kX2J1aWx0aW5fc2V0X2VoX3JlZ3MpOiBLaWxsLgoJKGVoX3JlZ3MpOiBQcm9kdWNlIGEgdGhpcmQgcmVnIGZvciB0aGUgYWN0dWFsIGhhbmRsZXIgYWRkcmVzcy4KCShlaF9yZXR1cm5fY29udGV4dCwgZWhfcmV0dXJuX3N0YWNrX2FkanVzdCk6IE5ldy4KCShlaF9yZXR1cm5faGFuZGxlciwgZWhfcmV0dXJuX3N0dWJfbGFiZWwpOiBOZXcuCgkoaW5pdF9laF9mb3JfZnVuY3Rpb24pOiBJbml0aWFsaXplIHRoZW0uCgkoZXhwYW5kX2J1aWx0aW5fZWhfcmV0dXJuLCBleHBhbmRfZWhfcmV0dXJuKTogTmV3LgoJKiBleGNlcHQuaDogVXBkYXRlIHByb3RvdHlwZXMuCgkqIGZsb3cuYyAoZmluZF9iYXNpY19ibG9ja3NfMSk6IFVwZGF0ZSByZWZlcmVuY2VzIHRvIHRoZSBzdHViIGxhYmVsLgoJKiBmdW5jdGlvbi5oIChzdHJ1Y3QgZnVuY3Rpb24pOiBLaWxsIHN0dWIgbGFiZWwgZWxlbWVudHMuCgoJKiBsaWJnY2MyLmMgKGluX3JlZ193aW5kb3cpOiBGb3IgUkVHX1NBVkVEX1JFRywgY2hlY2sgdGhhdCB0aGUKCXJlZ2lzdGVyIG51bWJlciBpcyBvbmUgdGhhdCB3b3VsZCBiZSBpbiB0aGUgcHJldmlvdXMgd2luZG93LgoJUHJvdmlkZSBhIGR1bW15IGRlZmluaXRpb24gZm9yIG5vbi13aW5kb3dlZCB0YXJnZXRzLgoJKGdldF9yZWdfYWRkcik6IE5ldyBmdW5jdGlvbi4KCShnZXRfcmVnLCBwdXRfcmVnLCBjb3B5X3JlZyk6IFVzZSBpdC4KCShfX3Rocm93KTogUmVseSBvbiBpbl9yZWdfd2luZG93LCBub3QgSU5DT01JTkdfUkVHTk8uICBLaWxsIHN0dWIKCWdlbmVyYXRpbmcgY29kZSBhbmQgdXNlIF9fYnVpbHRpbl9laF9yZXR1cm4uICBVc2UgX19idWlsdGluX2R3YXJmX2NmYS4KCgkqIGFscGhhLmMgKGFscGhhX2VoX2VwaWxvZ3VlX3NwX29mcyk6IE5ldy4KCShhbHBoYV9pbml0X2V4cGFuZGVycyk6IEluaXRpYWxpemUgaXQuCgkoYWxwaGFfZXhwYW5kX2VwaWxvZ3VlKTogVXNlIGl0LgoJKiBhbHBoYS5oOiBEZWNsYXJlIGl0LgoJKiBhbHBoYS5tZCAoZWhfZXBpbG9ndWUpOiBOZXcuCgoJKiBtNjhoLmggKEFSR19QT0lOVEVSX0NGQV9PRkZTRVQpOiBOZXcuCgkqIHNwYXJjLmggKEFSR19QT0lOVEVSX0NGQV9PRkZTRVQpOiBOZXcuCgpUdWUgU2VwIDE1IDE5OjMxOjU4IDE5OTggIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgoKCSogaTk2MC5oIChDT05TVF9DT1NUUyk6IEZpeCB0aGlua28uICBUZXN0IGZsYWcsIG5vdCB0aGUgY29uc3RhbnQKCWZsYWcgYml0IG1hc2suCgpUdWUgU2VwIDE1IDE0OjEwOjU0IDE5OTggIEFuZHJldyBNYWNMZW9kICA8YW1hY2xlb2RAY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdC5oIChzdHJ1Y3QgZWhfZW50cnkpOiBBZGQgZmFsc2VfbGFiZWwgZmllbGQuCgkoZW5kX2NhdGNoX2hhbmRsZXIpOiBBZGQgcHJvdG90eXBlLgoJKiBleGNlcHQuYyAocHVzaF9laF9lbnRyeSk6IFNldCBmYWxzZV9sYWJlbCBmaWVsZCB0byBOVUxMX1JUWC4KCShzdGFydF9jYXRjaF9oYW5kbGVyKTogV2hlbiB1c2luZyBvbGQgc3R5bGUgZXhjZXB0aW9ucywgaXNzdWUKCXJ1bnRpbWUgdHlwZW1hdGNoIGNvZGUgYmVmb3JlIGNvbnRpbnVpbmcgd2l0aCB0aGUgaGFuZGxlci4KCShlbmRfY2F0Y2hfaGFuZGxlcik6IE5ldyBmdW5jdGlvbiwgZ2VuZXJhdGVzIGxhYmVsIGFmdGVyIGhhbmRsZXIKCWlmIG5lZWRlZCBieSBvbGRlciBzdHlsZSBleGNlcHRpb25zLgoJKGV4cGFuZF9zdGFydF9hbGxfY2F0Y2gpOiBObyBuZWVkIHRvIGNoZWNrIGZvciBuZXcgc3R5bGUgZXhjZXB0aW9ucy4KCShvdXRwdXRfZXhjZXB0aW9uX3RhYmxlX2VudHJ5KTogT25seSBvdXRwdXQgdGhlIGZpcnN0IGhhbmRsZXIgbGFiZWwKCWZvciBvbGQgc3R5bGUgZXhjZXB0aW9ucy4KCSogbGliZ2NjMi5jIChfX2VoX3J0aW1lX21hdGNoKTogTmV3IHJvdXRpbmUgdG8gbHVtcCBydW50aW1lIG1hdGNoaW5nCgltZWNoYW5pc20gaW50byBvbmUgZnVuY3Rpb24sIGlmIGEgcnVudGltZSBtYXRjaGVyIGlzIHByb3ZpZGVkLgoKVHVlIFNlcCAxNSAxMzo1Mzo1OSAxOTk4ICBBbmRyZXcgTWFjTGVvZCAgPGFtYWNsZW9kQGN5Z251cy5jb20+CgoJKiBjb25maWcvaTk2MC9pOTYwLmggKFNMT1dfQllURV9BQ0NFU1MpOiBDaGFuZ2UgZGVmaW5pdGlvbiB0byAxLgoKVHVlIFNlcCAxNSAwOTo1OTowMSAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogaW50ZWdyYXRlLmMgKGNvcHlfZGVjbF9saXN0KTogRml4IHR5cG8uCgpUdWUgU2VwIDE1IDA0OjE4OjUyIDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLm1kIChtb3ZkZl9jb25zdF9pbnRyZWdfc3AzMik6IEZpeCBsZW5ndGgKCWF0dHJpYnV0ZS4KCk1vbiBTZXAgMTQgMTQ6MDI6NTMgMTk5OCAgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpNb24gU2VwIDE0IDEwOjMzOjU2IDE5OTggIEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKTW9uIFNlcCAxNCAwOTo1MTowNSAxOTk4ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KClN1biBTZXAgMTMgMjI6MTA6MTggMTk5OCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcGllcmRvbC5jb2JhbHRtaWNyby5jb20+CgoJKiBpbnZva2UudGV4aSAoQyBEaWFsZWN0IE9wdGlvbnMpOiBQdXQgYmFjayBtaXNzaW5nIEBlbmQgaXRlbWl6ZS4KCk1vbiBTZXAgMTQgMDI6MzM6NDYgMTk5OCAgQWxleGFuZHJlIE9saXZhICA8b2xpdmFAZGNjLnVuaWNhbXAuYnI+CgoJKiBjb25maWd1cmUuaW46IFJlbW92ZSB1c2FnZSBvZiBgIScgdG8gbmVnYXRlIHRoZSByZXN1bHQgb2YgYQoJY29tbWFuZDsgc29tZSBjb21tb24gc2hlbGxzIGRvIG5vdCBzdXBwb3J0IGl0LgoKU3VuIFNlcCAxMyAxOToxNzozNSAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogSW4gc3BhcmM5LXNvbDIgY29uZmlnLCB1c2UgJ2lmIHRlc3QnIG5vdAoJYnJhY2tldHMuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KCgkqIGNvbmZpZy9zcGFyYy9zb2wyLXNsZC02NC5oIChTUEFSQ19ERUZBVUxUX0NNT0RFTCk6IENoYW5nZSB0bwoJQ01fTUVEQU5ZLgoJKENQUF9DUFVfU1BFQyk6IERvIG5vdCBkZWZpbmUgX0xQNjQsIGhlYWRlciBmaWxlcyBkbyB0aGlzLgoJKENQUF9DUFVfREVGQVVMVF9TUEVDKTogTGlrZXdpc2UuCgkqIGNvbmZpZy9zcGFyYy9zb2wyLmggKElOSVRfU1VCVEFSR0VUX09QVEFCUyk6IEdldCB0aGUgbmFtZXMgcmlnaHQKCWZvciBhcmNoNjQgbGliZnVuY3MuCgoJKiBjb25maWcvc3BhcmMvc3BhcmMubWQgKGdvdG9faGFuZGxlcl9hbmRfcmVzdG9yZSk6IEFsbG93IGFueSBtb2RlCglmb3Igb3BlcmFuZCB6ZXJvLgoKU3VuIFNlcCAxMyAwOToxMTo1OSAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBhY2NvbmZpZy5oIChORUVEX0RFQ0xBUkFUSU9OX1NUUlNJR05BTCk6IFByb3ZpZGUgYSBzdHViLgoKCSogY29sbGVjdDIuYzogRG9uJ3QgZGVjbGFyZSBgc3lzX3NpZ2xpc3QnIGhlcmUuCgkobXlfc3Ryc2lnbmFsKTogUHJvdG90eXBlIGFuZCBkZWZpbmUgbmV3IGZ1bmN0aW9uLiAgVXNlIGl0IGluCglwbGFjZSBvZiBgc3lzX3NpZ2xpc3QnIGhhY2tzLgoKCSogbWlwc190ZmlsZS5jOiBMaWtld2lzZS4KCgkqIGNvbmZpZ3VyZS5pbiAoQUNfQ0hFQ0tfRlVOQ1MpOiBDaGVjayBmb3Igc3Ryc2lnbmFsLgoJKEdDQ19ORUVEX0RFQ0xBUkFUSU9OUyk6IExpa2V3aXNlLgoKCSogc3lzdGVtLmggKHN0cnNpZ25hbCk6IFByb3RvdHlwZSBpdCwgaWYgbmVjZXNzYXJ5LgoJKHN5c19zaWdsaXN0KTogRGVjbGFyZSBpdCwgaWYgbmVjZXNzYXJ5LgoKU3VuIFNlcCAxMyAwNDozNzoyOCAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGxvb3AuYyAobW92ZV9tb3ZhYmxlcyk6IFdoaWxlIHJlbW92aW5nIGluc24gc2VxdWVuY2VzLCBwcmVzZXJ2ZQoJdGhlIG5leHQgcG9pbnRlciBvZiB0aGUgbW9zdCByZWNlbnRseSBkZWxldGVkIGluc24gd2hlbiB3ZSBza2lwCglvdmVyIGEgTk9URS4KClN1biBTZXAgMTMgMDg6MTM6MzkgMTk5OCAgQmVuIEVsbGlzdG9uICA8YmplQGN5Z251cy5jb20+CgoJKiBvYmpjL2NvbmZpZy1sYW5nLmluOiBEbyBub3Qgb3V0cHV0IHRoZSBuYW1lIG9mIHRoZSBzZWxlY3RlZAoJdGhyZWFkIGZpbGUgd2hlbiBidWlsZGluZyB0aGUgZnJvbnQtZW5kLiAgVGhlIE1ha2VmaWxlIGZvciB0aGUKCXJ1bnRpbWUgbGlicmFyeSB3aWxsIGRvIHRoaXMuCgoJKiBvYmpjL01ha2UtbGFuZy5pbjogRG8gbm90IGJ1aWxkIHRoZSBydW50aW1lIGxpYnJhcnkgb3IgaW5zdGFsbAoJdGhlIE9iamVjdGl2ZSBDIGhlYWRlciBmaWxlcy4gIFRoZSBNYWtlZmlsZSBmb3IgdGhlIHJ1bnRpbWUKCWxpYnJhcnkgd2lsbCBkbyB0aGlzLgoKCSogb2JqYy9NYWtlZmlsZS5pbiAoYWxsLmluZGlyZWN0KTogT25seSBidWlsZCB0aGUgZnJvbnQtZW5kLgoJKGNvbXBpbGVyKTogUmVuYW1lIHRvIGBmcm9udGVuZCcuCgkob2JqLXJ1bnRpbWUpOiBSZW1vdmUgdGFyZ2V0LgoJKGNvcHktaGVhZGVycyk6IExpa2V3aXNlLgoJKGNsZWFuKTogTm8gbmVlZCB0byByZW1vdmUgYGxpYm9iamMuYScgYW55IGxvbmdlci4KClNhdCBTZXAgMTIgMTE6Mzc6MTkgMTk5OCAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CgoJKiByczYwMDAuaCAoe0FTTSxDUFB9X0NQVV9TUEVDKTogQWRkIHN1cHBvcnQgZm9yIGFsbCBtYWNoaW5lcwoJc3VwcG9ydGVkIHdpdGggLW1jcHU9eHh4LgoKRnJpIFNlcCAxMSAyMzo1NTo1NCAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGZsb3cuYyAobWFya19zZXRfMSk6IFJlY29nbml6ZSBtdWx0aS1yZWdpc3RlciBzdHJ1Y3R1cmUgcmV0dXJuCgl2YWx1ZXMgaW4gQ0FMTCBpbnNucy4KCShtYXJrX3VzZWRfcmVncyk6IExpa2V3aXNlLgoJKGNvdW50X3JlZ19zZXRzXzEpOiBMaWtld2lzZS4KCShjb3VudF9yZWdfcmVmZXJlbmNlcyk6CUxpa2V3aXNlLgoJKiBydGxhbmFsLmMgKG5vdGVfc3RvcmVzKTogTGlrZXdpc2UuCgkocmVnX292ZXJsYXBfbWVudGlvbmVkX3ApOiBMaWtld2lzZS4KCSogaGFpZmEtc2NoZWQuYyAoY2hlY2tfbGl2ZV8xKTogTGlrZXdpc2UuCgkodXBkYXRlX2xpdmVfMSk6IExpa2V3aXNlLgoJKHNjaGVkX2FuYWx5emVfMSk6IExpa2V3aXNlLgoJKHNjaGVkX25vdGVfc2V0KTogTGlrZXdpc2UuCgkoYmlydGhpbmdfaW5zbl9wKTogTGlrZXdpc2UuCgkoYXR0YWNoX2RlYXRocyk6IExpa2V3aXNlLgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLm1kIChtb3ZkZl9jb25zdF9pbnRyZWdfc3A2NCk6IERpc2FibGUuCgpGcmkgU2VwIDExIDIyOjU3OjU1IDE5OTggIEVyaWMgRHVtYXpldCAgPGR1bWF6ZXRAY29zbW9zYmF5LmNvbT4KCgkqIGNvbmZpZy9pMzg2L3NjbzUuaCAoQVNNX1dFQUtFTl9MQUJFTCk6IERlZmluZWQgYXMgaW4gc3ZyNC5oLgoKVGh1IFNlcCAxMCAyMjowMjowNCAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGdsaW1pdHMuaCAoX19MT05HX01BWF9fKTogUmVjb2duaXplIF9fc3BhcmN2OSB0b28uCgpUaHUgU2VwIDEwIDIxOjE5OjEwIDE5OTggIEpha3ViIEplbGluZWsgIDxqakBzdW5zaXRlLm1zLm1mZi5jdW5pLmN6PgoKCSogY29uZmlndXJlLmluOiBBZGQgY2hlY2sgZm9yIEdBUyBzdWJzZWN0aW9uIC0xIHN1cHBvcnQuCgkqIGFjY29uZmlnLmggKEhBVkVfR0FTX1NVQlNFQ1RJT05fT1JERVJJTkcpOiBBZGQuCgkqIGNvbmZpZ3VyZSBjb25maWcuaW46IFJlYnVpbHQuCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5oIChDQVNFX1ZFQ1RPUl9NT0RFKTogRm9yIFY5IGZsYWdfcGljLCB1c2UKCVNJbW9kZSBpcyBzdWJzZWN0aW9uIC0xIHdvcmtzLCBlbHNlIHVzZSBESW1vZGUuCgkoQVNNX09VVFBVVF9BRERSX1ZFQ19TVEFSVCwgQVNNX09VVFBVVF9BRERSX1ZFQ19FTkQpOiBEZWZpbmUgaWYKCXN1YnNlY3Rpb24gLTEgd29ya3MuCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5jIChzcGFyY19vdXRwdXRfYWRkcl92ZWMsCglzcGFyY19vdXRwdXRfYWRkcl9kaWZmX3ZlYyk6IFVzZSB0aGVtIGlmIGRlZmluZWQuCgpUaHUgU2VwIDEwIDEwOjQ2OjAxIDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiB0cmVlLmggKERFQ0xfT1JJR0lOKTogTmV3IG1hY3JvLgoJKiBpbnRlZ3JhdGUuYyAoY29weV9hbmRfc2V0X2RlY2xfYWJzdHJhY3Rfb3JpZ2luKTogTmV3IGZ1bmN0aW9uLgoJKGNvcHlfZGVjbF9saXN0KTogVXNlIGl0LgoJKGludGVncmF0ZV9wYXJtX2RlY2xzKTogTGlrZXdpc2UuCgkoaW50ZWdyYXRlX2RlY2xfdHJlZSk6IExpa2V3aXNlLgoJKiBkd2FyZjJvdXQuYyAoZGVjbF91bHRpbWF0ZV9vcmlnaW4pOiBTaW1wbGlmeS4KCSogZHdhcmZvdXQuYyAoZGVjbF91bHRpbWF0ZV9vcmlnaW4pOiBMaWtld2lzZS4KCSogYy1kZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IFVzZSBERUNMX09SSUdJTi4KCShwdXNoZGVjbCk6IExpa2V3aXNlLgoKVGh1IFNlcCAxMCAwODowMTozMSAxOTk4ICBBbnRob255IEdyZWVuICA8Z3JlZW5AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9yczYwMDAvcnM2MDAwLmMgKG91dHB1dF9lcGlsb2cpOiBBZGQgSmF2YSBzdXBwb3J0LgoKVGh1IFNlcCAxMCAxNDo0ODo1OSAxOTk4ICBNYXJ0aW4gdm9uIEz2d2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogaW52b2tlLnRleGkgKEMrKyBEaWFsZWN0IE9wdGlvbnMpOiBEb2N1bWVudCAtZmhvbm9yLXN0ZC4KClRodSBTZXAgMTAgMDE6Mzg6MDUgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcmVnLXN0YWNrLmMgKHN0cmFpZ2h0ZW5fc3RhY2spOiBEbyBub3RoaW5nIGlmIHRoZSB2aXJ0dWFsIHN0YWNrIGlzCgllbXB0eSBvciBoYXMgYSBzaW5nbGUgZW50cnkuCgoJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IE9wZW4gdXAgdGhlIGR1bXAgZmlsZSBmb3IgcmVnLXN0YWNrCgliZWZvcmUgY2FsbGluZyByZWdfdG9fc3RhY2suCgpUaHUgU2VwIDEwIDAwOjAzOjM0IDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbHBoYS5jIChhbHBoYWV2NV9pbnNuX3BpcGUpOiBBYm9ydCBvbiBkZWZhdWx0IGNhc2UuCgkoYWxwaGFldjVfbmV4dF9ncm91cCk6IFN3YWxsb3cgQ0xPQkJFUnMgYW5kIFVTRXMuCgoJKiBjLXRyZWUuaCAod2Fybl9sb25nX2xvbmcpOiBEZWNsYXJlIGl0LgoKV2VkIFNlcCAgOSAyMzozMTozNiAxOTk4ICAoU3RlcGhlbiBMIE1vc2hpZXIpICA8bW9zaGllckB3b3JsZC5zdGQuY29tPgoKCSogZW1pdC1ydGwuYyAoZ2VuX2xvd3BhcnRfY29tbW9uKTogRGlzYWJsZSBvcHRpbWl6YXRpb24gb2YKCWluaXRpYWxpemVkIGZsb2F0LWludCB1bmlvbiBpZiB0aGUgdmFsdWUgaXMgYSBOYU4uCgpXZWQgU2VwICA5IDIzOjAwOjQ4IDE5OTggIE5hdGhhbiBTaWR3ZWxsICA8bmF0aGFuQGFjbS5vcmc+CgoJKiBjLWxleC5jIChyZWFsX3l5bGV4KTogRG9uJ3Qgd2FybiBhYm91dCBsb25nIGxvbmcgY29uc3RhbnRzIGlmCgl3ZSdyZSBhbGxvd2luZyBsb25nIGxvbmcKCldlZCBTZXAgIDkgMjE6NTg6NDEgMTk5OCAgQmVybmQgU2NobWlkdCAgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgoKCSogZXhjZXB0LmggKGN1cnJlbnRfZnVuY3Rpb25fZWhfc3R1Yl9sYWJlbCk6IERlY2xhcmUuCgkoY3VycmVudF9mdW5jdGlvbl9laF9vbGRfc3R1Yl9sYWJlbCk6IERlY2xhcmUuCgkqIGZ1bmN0aW9uLmggKHN0cnVjdCBmdW5jdGlvbik6IE5ldyBtZW1iZXJzIGVoX3N0dWJfbGFiZWwgYW5kCgllaF9vbGRfc3R1Yl9sYWJlbC4KCSogZXhjZXB0LmMgKGN1cnJlbnRfZnVuY3Rpb25fZWhfc3R1Yl9sYWJlbCk6IE5ldyB2YXJpYWJsZS4KCShjdXJyZW50X2Z1bmN0aW9uX2VoX29sZF9zdHViX2xhYmVsKTogTmV3IHZhcmlhYmxlLgoJKGluaXRfZWhfZm9yX2Z1bmN0aW9uKTogQ2xlYXIgdGhlbS4KCShzYXZlX2VoX3N0YXR1cyk6IFNhdmUgdGhlbS4KCShyZXN0b3JlX2VoX3N0YXR1cyk6IFJlc3RvcmUgdGhlbS4KCShleHBhbmRfYnVpbHRpbl9laF9zdHViKTogU2V0IGN1cnJlbnRfZnVuY3Rpb25fZWhfc3R1Yl9sYWJlbC4KCShleHBhbmRfYnVpbHRpbl9laF9zdHViX29sZCk6IFNldCBjdXJyZW50X2Z1bmN0aW9uX2VoX29sZF9zdHViX2xhYmVsLgoJKiBmbG93LmMgKGZpbmRfYmFzaWNfYmxvY2tzXzEpOiBXaGVuIGhhbmRsaW5nIGEgUkVHX0xBQkVMIG5vdGUsIGRvbid0CgltYWtlIGFuIGVkZ2UgZnJvbSB0aGUgYmxvY2sgdGhhdCBjb250YWlucyBpdCB0byB0aGUgYmxvY2sgc3RhcnRpbmcKCXdpdGggdGhlIGxhYmVsIGlmIHRoaXMgbGFiZWwgaXMgb25lIG9mIHRoZSBlaCBzdHViIGxhYmVscy4KCUlmIGVoIHN0dWIgbGFiZWxzIGV4aXN0LCBzaG93IHRoZXkgYXJlIHJlYWNoYWJsZSBmcm9tIHRoZSBsYXN0IGJsb2NrCglpbiB0aGUgZnVuY3Rpb24uCgoJKiByZWxvYWQxLmMgKHJlbG9hZCk6IEJyZWFrIG91dCBzZXZlcmFsIHN1YnJvdXRpbmVzIGFuZCBtYWtlIHNvbWUKCXZhcmlhYmxlcyBnbG9iYWwuCgkoY2FsY3VsYXRlX25lZWRzX2FsbF9pbnNucyk6IE5ldyBmdW5jdGlvbiwgYnJva2VuIG91dCBvZiByZWxvYWQuCgkoY2FsY3VsYXRlX25lZWRzKTogTGlrZXdpc2UuCgkoZmluZF9yZWxvYWRfcmVncyk6IExpa2V3aXNlLgoJKGZpbmRfZ3JvdXApOiBMaWtld2lzZS4KCShmaW5kX3R3b3JlZ19ncm91cCk6IExpa2V3aXNlLgoJKHNvbWV0aGluZ19uZWVkc19yZWxvYWRzKTogTmV3IGdsb2JhbCB2YXJpYWJsZSwgZm9ybWVybHkgaW4gcmVsb2FkLgoJKHNvbWV0aGluZ19uZWVkc19lbGltaW5hdGlvbik6IExpa2V3aXNlLgoJKGNhbGxlcl9zYXZlX3NwaWxsX2NsYXNzKTogTGlrZXdpc2UuCgkoY2FsbGVyX3NhdmVfZ3JvdXBfc2l6ZSk6IExpa2V3aXNlLgoJKG1heF9uZWVkcyk6IExpa2V3aXNlLgoJKGdyb3VwX3NpemUpOiBMaWtld2lzZS4KCShtYXhfZ3JvdXBzKTogTGlrZXdpc2UuCgkobWF4X25vbmdyb3Vwcyk6IExpa2V3aXNlLgoJKGdyb3VwX21vZGUpOiBMaWtld2lzZS4KCShtYXhfbmVlZHNfaW5zbik6IExpa2V3aXNlLgoJKG1heF9ncm91cHNfaW5zbik6IExpa2V3aXNlLgoJKG1heF9ub25ncm91cHNfaW5zbik6IExpa2V3aXNlLgoJKGZhaWx1cmUpOiBMaWtld2lzZS4KCgkqIHByaW50LXJ0bC5jIChwcmludF9ydHgpOiBGb3IgTUVNcywgcHJpbnQgTUVNX0FMSUFTX1NFVC4KCldlZCBTZXAgIDkgMTM6MTQ6NDEgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGxvb3AuYyAobG9hZF9tZW1zKTogQ29weSBydHggZm9yIG91dHB1dCBtZW0uCgpXZWQgU2VwICA5IDE1OjE2OjU4IDE5OTggIEdhdmluIFJvbWlnLUtvY2ggIDxnYXZpbkBjeWdudXMuY29tPgoKCSogbWlwcy9hYmk2NC5oIChMT05HX01BWF9TUEVDKTogRG9uJ3Qgc2V0IExPTkdfTUFYIGZvcgoJbWlwczEgb3IgbWlwczIgZWl0aGVyLgoKV2VkIFNlcCAgOSAxMjozMTozNSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBwYS5jIChwYV9yZW9yZyk6IE5ldyBtYXJraW5nIHNjaGVtZSBmb3IganVtcHMgaW5zaWRlIHN3aXRjaAoJdGFibGVzLgoJKHBhX2FkanVzdF9pbnNuX2xlbmd0aCk6IFVwZGF0ZSB0byB3b3JrIHdpdGggbmV3IG1hcmtpbmcgc2NoZW1lCglmb3IganVtcHMgaW5zaWRlIHN3aXRjaCB0YWJsZXMuCgkqIHBhLm1kIChzd2l0Y2hfanVtcCk6IFJlbW92ZSBwYXR0ZXJuLgoJKGp1bXApOiBIYW5kbGUganVtcHMgaW5zaWRlIGp1bXAgdGFibGVzLgoKCSogTWFrZWZpbGUuaW4gKHByb2ZpbGUubyk6IERlcGVuZCBvbiBpbnNuLWNvbmZpZy5oCgpXZWQgU2VwICA5IDA5OjM2OjUxIDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGlyaXM2LmggKERXQVJGMl9VTldJTkRfSU5GTyk6IFVuZGVmLgoKV2VkIFNlcCAgOSAwMTozMjowMSAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCglBZGQgcHJlbGltaW5hcnkgbmF0aXZlIHNwYXJjdjkgU29sYXJpcyBzdXBwb3J0LgoJKiBjb25maWd1cmUuaW46IFJlY29nbml6ZSBzcGFydjktKi1zb2xhcmlzMioKCSogY29uZmlndXJlOiBSZWJ1aWx0LgoJKiBjb25maWcuc3ViOiBSZWNvZ25pemUgc3BhcmN2OSBqdXN0IGxpa2Ugc3BhcmM2NC4KCSogY29uZmlnL3NwYXJjL3NvbDItYzEuYXNtIGNvbmZpZy9zcGFyYy9zb2wyLWNpLmFzbQoJY29uZmlnL3NwYXJjL3NvbDItY24uYXNtOiBNYWNyb2l6ZSBzbyBpdCBjYW4gYmUgc2hhcmVkIGJldHdlZW4KCTMyLWJpdCBhbmQgNjQtYml0IFNvbGFyaXMgc3lzdGVtcy4KCSogY29uZmlnL3NwYXJjL3Qtc29sMjogQXNzZW1ibGUgdGhvc2Ugd2l0aCBjcHAuCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5oIChUQVJHRVRfQ1BVX3NwYXJjdjkpOiBOZXcgYWxpYXMgZm9yIHY5LgoJKCpURipfTElCQ0FMTCk6IElmIEFSQ0g2NCB1c2UgVjkgbmFtZXMuCgkqIGNvbmZpZy9zcGFyYy97eG0tc3lzdjQtNjQsc29sMi1zbGQtNjR9Lmg6IE5ldwlmaWxlcy4KCldlZCBTZXAgIDkgMDE6MDc6MzAgMTk5OCAgSmFrdWIgSmVsaW5layAgPGpqQHN1bnNpdGUubXMubWZmLmN1bmkuY3o+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMuaCAoVEFSR0VUX0NNX01FRE1JRCk6IEZpeCBkb2N1bWVudGF0aW9uLgoJKENBU0VfVkVDVE9SX01PREUpOiBTZXQgdG8gU0ltb2RlIGV2ZW4gaWYgUFRSNjQsIHdoZW4gTUVETE9XIGFuZAoJbm90IGRvaW5nIHBpYy4KCShBU01fT1VUUFVUX0FERFJfe1ZFQyxESUZGfV9FTFQpOiBDaGVjayBDQVNFX1ZFQ1RPUl9NT0RFIG5vdAoJUG1vZGUuCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5tZCAodGFibGVqdW1wKTogTGlrZXdpc2UsIGFuZCBzaWduIGV4dGVuZCBvcDAKCXRvIFBtb2RlIGlmIENBU0VfVkVDVE9SX01PREUgaXMgc29tZXRoaW5nIGVsc2UuCgpXZWQgU2VwICA5IDAwOjEwOjMxIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHByZWZpeC5jICh1cGRhdGVfcGF0aCk6IENvcnJlY3RseSBoYW5kbGUgY2FzZXMgd2hlcmUgUEFUSCBpcwoJYSBzdWJzdHJpbmcgb2YgdGhlIGJ1aWx0aW4gcHJlZml4LCBidXQgc3BlY2lmaWVzIGEgZGlmZmVyZW50CglkaXJlY3RvcnkgbG9jYXRpb24uCgpUdWUgU2VwICA4IDIzOjQ2OjA0IDE5OTggIEhhbnMtUGV0ZXIgTmlsc3NvbiAgPGhwQGF4aXMuc2U+CgoJKiBleHByLmM6IENvcnJlY3RlZCBjb21tZW50IGFib3V0IHdoYXQgTU9WRV9SQVRJTyBkb2VzLgoJKiBjb25maWcvYWxwaGEvYWxwaGEuaDogTGlrZXdpc2UuCgkqIGNvbmZpZy8xNzUwYS8xNzUwYS5oOiBMaWtld2lzZS4KCSogY29uZmlnL2NsaXBwZXIvY2xpcHBlci5oOiBMaWtld2lzZS4KCSogY29uZmlnL2kzODYvaTM4Ni5oOiBMaWtld2lzZS4KClR1ZSBTZXAgIDggMjI6NTY6MTIgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluIChtNjhrLW5leHQtbmV4dHN0ZXAzKik6IFVzZSBjb2xsZWN0Mi4KCVNpbWlsYXJseSBmb3IgeDg2IE5lWFQgY29uZmlndXJhdGlvbnMuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KClR1ZSBTZXAgIDggMDE6Mzg6NTcgMTk5OCAgTmF0aGFuIFNpZHdlbGwgIDxuYXRoYW5AYWNtLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbjogRG9uJ3QgYXNzdW1lIHNyY2RpciBpcyAuLi4vZ2NjLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgpTYXQgU2VwICA1IDE2OjM0OjM0IDE5OTggIEpvaG4gV2VobGUgIChqb2huQGZlaXRoLmNvbSkKCgkqIGdsb2JhbC5jOiBVcGRhdGUgY29tbWVudHMuCgkoZ2xvYmFsX2FsbG9jKTogQXNzaWduIGFsbG9jYXRpb24tbnVtYmVycwoJZXZlbiBmb3IgcmVnaXN0ZXJzIGFsbG9jYXRlZCBieSBsb2NhbF9hbGxvYyBpbiBjYXNlCgl0aGV5IGFyZSBsYXRlciBzcGlsbGVkIGFuZCByZXRyeV9nbG9iYWxfYWxsb2MgaXMgY2FsbGVkLgoJKG1hcmtfcmVnX3N0b3JlLCBtYXJrX3JlZ19jbG9iYmVyLAoJbWFya19yZWdfY29uZmxpY3RzLCBtYXJrX3JlZ19kZWF0aCk6IEFsd2F5cyByZWNvcmQgYQoJY29uZmxpY3Qgd2l0aCBhIHBzZXVkbyByZWdpc3RlciBldmVuIGlmIGl0IGhhcyBiZWVuCglhc3NpZ25lZCB0byBhIGhhcmQgcmVnaXN0ZXIuCgkoZHVtcF9jb25mbGljdHMpOiBEb24ndCBsaXN0IHBzZXVkbyByZWdpc3RlcnMgYWxyZWFkeSBhc3NpZ25lZCB0bwoJYSBoYXJkIHJlZ2lzdGVyIGFzIG5lZWRpbmcgdG8gYmUgYWxsb2NhdGVkLCBidXQgZG8gbGlzdCB0aGVpcgoJY29uZmxpY3RzLgoJKiBsb2NhbC1hbGxvYy5jOiBVcGRhdGUgY29tbWVudC4KCk1vbiBTZXAgIDcgMjM6Mzg6MDEgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluOiBDaGVjayBmb3IgYm9ndXMgR0NDX0VYRUNfUFJFRklYIGFuZCBMSUJSQVJZX1BBVEguCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KCk1vbiBTZXAgIDcgMjI6NDE6NDYgMTk5OCAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CgoJKiByczYwMDAuYyAocnM2MDAwX292ZXJyaWRlX29wdGlvbnMpOiBGaXggbmFtZSBmb3IgZWM2MDNlLCB0byBhZGQKCW1pc3NpbmcgJ2MnLgoJKiB0LXBwY2NvbW0gKE1VTFRJTElCX01BVENIRVNfRkxPQVQpOiBBZGQgc3VwcG9ydCBmb3IgLW1jcHU9eHh4Cglmb3IgYWxsIHRhcmdldHMgdGhhdCBzZXQgLW1zb2Z0LWZsb2F0LgoKTW9uIFNlcCAgNyAyMzozMDowNyAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiB0b3BsZXYuYyAocHJpbnRfc3dpdGNoX3ZhbHVlcyk6IE1ha2Ugc3RhdGljIHRvIG1hdGNoIHByb3RvdHlwZS4KCk1vbiBTZXAgIDcgMTk6MTM6NTkgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluOiBJZiB3ZSBhcmUgdW5hYmxlIHRvIGZpbmQgdGhlICJnbmF0YmluZCIgcHJvZ3JhbSwKCXRoZW4gZG8gbm90IGNvbmZpZ3VyZSB0aGUgYWRhIHN1YmRpci4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKU3VuIFNlcCAgNiAxNDowMzo1OCAxOTk4ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KClN1biBTZXAgIDYgMTM6Mjg6MDcgMTk5OCAgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpTdW4gU2VwICA2IDA4OjU0OjE0IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIE1ha2VmaWxlLmluICh0b3BsZXYubyk6IERlcGVuZCBvbiAkKEVYUFJfSCkuCgkoaW5zbi1leHRyYWN0Lm8sIGluc24tYXR0cnRhYi5vKTogRGVwZW5kIG9uIHRvcGxldi5oLgoKCSogZ2Fuc2lkZWNsLmg6IERlZmluZSBBVFRSSUJVVEVfTk9SRVRVUk4uCgoJKiBnZW5hdHRydGFiLmM6IEhhdmUgaW5zbi1hdHRydGFiLmMgaW5jbHVkZSB0b3BsZXYuaC4KCgkqIGdlbmV4dHJhY3QuYzogSGF2ZSBpbnNuLWV4dHJhY3QuYyBpbmNsdWRlIHRvcGxldi5oLgoKCSogcnRsLmg6IERvbid0IHByb3RvdHlwZSBgZmF0YWxfaW5zbl9ub3RfZm91bmQnIGFuZCBgZmF0YWxfaW5zbicuCgoJKiB0b3BsZXYuYzogSW5jbHVkZSBleHByLmguCgkocmVhbGx5X3NvcnJ5LCBmYW5jeV9hYm9ydCk6IFJlbW92ZSBwcm90b3R5cGVzLgoJKHNldF90YXJnZXRfc3dpdGNoKTogQWRkIGFyZ3VtZW50IGluIHByb3RvdHlwZS4KCSh2ZmF0YWwpOiBNYXJrIHByb3RvdHlwZSB3aXRoIEFUVFJJQlVURV9OT1JFVFVSTi4KCSh2X3JlYWxseV9zb3JyeSk6IExpa2V3aXNlLgoJKHByaW50X3ZlcnNpb24sIHByaW50X3NpbmdsZV9zd2l0Y2gsIHByaW50X3N3aXRjaF92YWx1ZXMpOiBNYWtlCglzdGF0aWMgYW5kIGFkZCBwcm90b3R5cGUgYXJndW1lbnRzLgoJKGRlY2xfcHJpbnRhYmxlX25hbWUpOiBBZGQgcHJvdG90eXBlIGFyZ3VtZW50cy4KCShsYW5nX2V4cGFuZF9leHByX3QpOiBOZXcgdHlwZWRlZi4KCShsYW5nX2V4cGFuZF9leHByKTogRGVjbGFyZSBhcyBhIGxhbmdfZXhwYW5kX2V4cHJfdC4KCShpbmNvbXBsZXRlX2RlY2xfZmluYWxpemVfaG9vayk6IEFkZCBwcm90b3R5cGUgYXJndW1lbnQuCgkoZGVjbF9uYW1lKTogTWFyayB2YXJpYWJsZSBgdmVyYm9zaXR5JyB3aXRoIEFUVFJJQlVURV9VTlVTRUQuCgkoYm90Y2gpOiBMaWtld2lzZSBmb3IgdmFyaWFibGUgYHMnLgoJKHJlc3Rfb2ZfdHlwZV9jb21waWxhdGlvbik6IE1hcmsgdmFyaWFibGVzIGB0eXBlJyBhbmQgYHRvcGxldicKCXdpdGggQVRUUklCVVRFX1VOVVNFRCBpZiBub25lIG9mIERCWF9ERUJVR0dJTkdfSU5GTywKCVhDT0ZGX0RFQlVHR0lOR19JTkZPIG9yIFNEQl9ERUJVR0dJTkdfSU5GTyBhcmUgZGVmaW5lZC4KCShkaXNwbGF5X2hlbHApOiBNYWtlIHZhcmlhYmxlIGBpJyBhbiBgdW5zaWduZWQgbG9uZycuCgkobWFpbik6IFJlbW92ZSB1bnVzZWQgcGFyYW1ldGVyIGBlbnZwJy4KCUNhc3QgYXNzaWdubWVudCB0byBgbGFuZ19leHBhbmRfZXhwcicgdG8gYSBgbGFuZ19leHBhbmRfZXhwcl90Jy4KCUNhc3QgLTEgd2hlbiBjb21wYXJpbmcgaXQgd2l0aCBhIGBzaXplX3QnLgoKCSogdG9wbGV2LmggKGZhdGFsLCBmYXRhbF9pb19lcnJvciwgcGZhdGFsX3dpdGhfbmFtZSk6IE1hcmsKCXByb3RvdHlwZSB3aXRoIEFUVFJJQlVURV9OT1JFVFVSTi4KCShmYXRhbF9pbnNuX25vdF9mb3VuZCwgZmF0YWxfaW5zbiwgcmVhbGx5X3NvcnJ5LAoJcHVzaF9mbG9hdF9oYW5kbGVyLCBwb3BfZmxvYXRfaGFuZGxlcik6IEFkZCBwcm90b3R5cGVzLgoJKGZhbmN5X2Fib3J0KTogTWFyayBwcm90b3R5cGUgd2l0aCBBVFRSSUJVVEVfTk9SRVRVUk4uCgkoZG9fYWJvcnQsIGJvdGNoKTogQWRkIHByb3RvdHlwZXMuCgpTYXQgU2VwICA2IDEyOjA1OjE4IDE5OTggIEpvaG4gQ2FyciAgPGpmY0BtaXQuZWR1PgoKCSogZmluYWwuYyAoZmluYWwpOiBJZiBhIGxhYmVsIGlzIHJlYWNoZWQgb25seSBmcm9tIGEgc2luZ2xlIGp1bXAsCgljYWxsIE5PVElDRV9VUERBVEVfQ0Mgb24gdGhlIGp1bXAgYW5kIGl0cyBwcmVkZWNlc3NvciBiZWZvcmUKCWVtaXR0aW5nIHRoZSBpbnNuIGFmdGVyIHRoZSBsYWJlbC4KCgkqIGkzODYuaDogQWRkIEFNRCBLNiBzdXBwb3J0LgoJQ2hhbmdlIFRBUkdFVF8qIG1hY3JvcyB0byB1c2UgdGFibGUgbG9va3VwLgoJKElOSVRJQUxJWkVfVFJBTVBPTElORSk6IEltcHJvdmUgdHJhbXBvbGluZSBjb2RlLgoJKEFESlVTVF9DT1NUKTogQ2hhbmdlIGRlZmluaXRpb24gdG8gY2FsbCBmdW5jdGlvbiBpbiBpMzg2LmMuCgkoSVNTVUVfUkFURSk6IERlZmluZSBhcyAyIGZvciBhbnl0aGluZyBuZXdlciB0aGFuIGFuIDgwNDg2LgoJKiBpMzg2LmM6IEFkZCBBTUQgSzYgc3VwcG9ydC4KCUFkZCBjb25zdGFudHMgZm9yIGZlYXR1cmUgdGVzdHMgdXNlZCBieSBUQVJHRVRfKiBtYWNyb3MuCgkoc3BsaXRfZGkpOiBJZiBiZWZvcmUgcmVsb2FkLCBjYWxsIGdlbl9sb3dwYXJ0IGFuZCBnZW5faGlnaHBhcnQuCgkoeDg2X2FkanVzdF9jb3N0KTogTmV3IGZ1bmN0aW9uLgoJKHB1dF9qdW1wX2NvZGUpOiBOZXcgZnVuY3Rpb24uCgkocHJpbnRfb3BlcmFuZCk6IE5ldyBjb2RlcyAnRCcgYW5kICdkJy4KCSogaTM4Ni5tZDogTmV3IGluc24gdHlwZXMuICBOZXcgaW5zbiBhdHRyaWJ1dGUgIm1lbW9yeSIuCglSZWRlZmluZSBzY2hlZHVsaW5nIHBhcmFtZXRlcnMgdG8gdXNlIG5ldyB0eXBlcyBhbmQgYWRkIEFNRCBLNgoJc3VwcG9ydC4gIEV4cGxpY2l0bHkgc2V0IHR5cGUgb2YgbW9zdCBpbnNucy4KCShtb3ZlIGluc25zKTogSzYgcHJlZmVycyBtb3ZsICQwLHJlZyB0byB4b3JsIHJlZyxyZWcuICBQZW50aXVtCglQcm8gYW5kIEs2IHByZWZlciBtb3ZsICQxLHJlZyB0byBpbmNsIHJlZy4KCShhZGRkaTMsIHN1YmRpMyk6IFNldCBjY19zdGF0dXMuCgkoREltb2RlIHNoaWZ0IHBhdHRlcm5zKTogQ2hhbmdlIGxhYmVsIGNvdW50ZXJzIGZyb20gSE9TVF9XSURFX0lOVAoJdG8gaW50OyB4ODYgY2FuJ3QgaGF2ZSBtb3JlIHRoYW4gMl4zMSBESW1vZGUgc2hpZnRzIHBlcglmaWxlLgoJKHNldGNjKTogQ29tYmluZSBhbGwgc2V0Y2MgcGF0dGVybnMuICBBbGxvdyB3cml0aW5nIG1lbW9yeS4KCUNvbWJpbmUgYWxsIGp1bXAgcGF0dGVybnMgdXNpbmcgbWF0Y2hfb3BlcmF0b3IuCgkoKmJ6ZXJvKTogTmFtZSBwYXR0ZXJuLiAgRW1pdCBtdWx0aXBsZSBzdG9zIGluc3RydWN0aW9ucyB3aGVuIHRoYXQKCWlzIGZhc3RlciB0aGFuIHJlcCBzdG9zLgoJKHhvcmRpMywgYW5kZGkzLCBpb3JkaTMpOiBTaW1wbGlmeSBESW1vZGUgbG9naWNhbCBwYXR0ZXJucyBhbmQKCWFkZCBkZWZpbmVfc3BsaXQuCgpTdW4gU2VwICA2IDExOjE3OjIwIDE5OTggIERhdmUgTG92ZSAgPGQubG92ZUBkbC5hYy51az4KCgkqIGNvbmZpZy9tNjhrL3gtbmV4dCAoQk9PVF9MREZMQUdTKTogRGVmaW5lIHN1aXRhYmx5IGZvciBmNzcxCglsaW5raW5nLgoKU2F0IFNlcCAgNSAyMjowNToyNSAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEuYyAoYWxwaGFfcmFfZXZlcl9raWxsZWQpOiBJbnNwZWN0IHRoZSB0b3Btb3N0IHNlcXVlbmNlLAoJbm90IHdoYXRldmVyIHdlJ3JlIGdlbmVyYXRpbmcgbm93LgoKCSogYWxwaGEuYyAoc2V0X2ZyYW1lX3JlbGF0ZWRfcCwgRlJQKTogTmV3LgoJKGFscGhhX2V4cGFuZF9wcm9sb2d1ZSk6IE1hcmsgZnJhbWUgcmVsYXRlZCBpbnNucy4KCShhbHBoYV9leHBhbmRfZXBpbG9ndWUpOiBMaWtld2lzZSwgYnV0IHdpdGggYSBudWxsIEZSUC4KCSogYWxwaGEuaCAoSU5DT01JTkdfUkVUVVJOX0FERFJfUlRYKTogTmV3LgoJKiBhbHBoYS5tZCAoZXhjZXB0aW9uX3JlY2VpdmVyKTogTmV3LgoJKiBhbHBoYS9jcnRiZWdpbi5hc20gKC5laF9mcmFtZSk6IE5ldyBiZWdpbm5pbmcuCgkoX19kb19mcmFtZV9zZXR1cCwgX19kb19mcmFtZV90YWtlZG93bik6IE5ldy4KCSogYWxwaGEvY3J0ZW5kLmFzbSAoLmVoX2ZyYW1lKTogTmV3IGVuZGluZy4KCSogYWxwaGEvZWxmLmggKERXQVJGMl9ERUJVR0dJTkdfSU5GTyk6IERlZmluZS4KCShBU01fU1BFQyk6IERvbid0IGVtaXQgYm90aCBkd2FyZjIgYW5kIG1kZWJ1Zy4KCShBU01fRklMRV9TVEFSVCk6IERvbid0IGVtaXQgLmZpbGUgZm9yIGR3YXJmMi4KCgkqIHJ0bC5oIChlbnVtIHJlZ19ub3RlKTogQWRkIFJFR19GUkFNRV9SRUxBVEVEX0VYUFIuCgkqIHJ0bC5jIChyZWdfbm90ZV9uYW1lKTogTGlrZXdpc2UuCgkqIHJ0bC50ZXhpIChSRUdfTk9URVMpOiBMaWtld2lzZS4KCSogZHdhcmYyb3V0LmMgKGR3YXJmMm91dF9mcmFtZV9kZWJ1Zyk6IFVzZSBpdC4gIFJlY29nbml6ZSBhIHN0b3JlCgl3aXRob3V0IGFuIG9mZnNldC4KClNhdCBTZXAgIDUgMTQ6NDc6MTcgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGkzODYuaCAoUFJFRkVSUkVEX1JFTE9BRF9DTEFTUyk6IFN0YW5kYXJkIGZwIGNvbnN0YW50cyBsb2FkIHRvIFRPUy4KCSogaTM4Ni5tZCAobW92c2YsIG1vdmRmLCBtb3Z4Zik6IFZhbGlkYXRlIG1lbW9yeSBhZGRyZXNzIHJldHVybmVkCglmcm9tIGZvcmNlX2NvbnN0X21lbS4gIEtpbGwgdXNlbGVzcyBSRUdfRVFVQUwgc2V0dGluZyBjb2RlLgoKU2F0IFNlcCAgNSAxNDoyMzozMSAxOTk4ICBUb3Jiam9ybiBHcmFubHVuZCAgPHRlZ2VAbWF0ZW1hdGlrLnN1LnNlPgoKCSogbTY4ay5tZCAoemVyb19leHRlbmRzaWRpMik6IEZpeCB0eXBvLgoKU2F0IFNlcCAgNSAxMzo0MDoyNCAxOTk4ICBLcmlzdGVyIFdhbGZyaWRzc29uICA8Y2F0b0BkZi5sdGguc2U+CgoJKiBjb25maWd1cmUuaW46IFJlbW92ZWQgcmVmZXJlbmNlcyB0byB0aGUgcmVtb3ZlZCBmaWxlLgoJKiBjb25maWcveG0tbmV0YnNkLmg6IFVzZSAke2NwdV90eXBlfS94bS1uZXRic2QuaCBmb3IKCWFybSotKi1uZXRic2QqIGFuZCBuczMyay0qLW5ldGJzZCouCgkqIGNvbmZpZy9pMzg2L3htLW5ldGJzZC5oOiBSZW1vdmVkIHVubmVjZXNzYXJ5IGZpbGUuCgkqIGNvbmZpZy9tNjhrL3htLW5ldGJzZC5oOiBMaWtld2lzZS4KCSogY29uZmlnL3NwYXJjL3htLW5ldGJzZC5oOiBMaWtld2lzZS4KCSogY29uZmlnL21pcHMveG0tbmV0YnNkLmg6IExpa2V3aXNlLgoKU2F0IEF1ZyAyOSAxMzozMjo1OCAxOTk4ICBNdW1pdCBLaGFuICA8a2hhbkB4cmF5bGl0aC53aXNjLmVkdT4KCgkqIGkzODYvY3lnd2luMzIuaCAoQklHR0VTVF9BTElHTk1FTlQpOiBEZWZpbmUuCgkoUENDX0JJVEZJRUxEX1RZUEVfTUFUVEVSUyk6IERlZmluZSB0byBiZSAwLgoKCSogaTM4Ni9jeWd3aW4zMi5oIChBU01fT1VUUFVUX1NFQ1RJT05fTkFNRSk6IERvbid0IGNoZWNrIGZvcgoJZm9yIGV4YWN0IHNlY3Rpb24gYXR0cmlidXRpb25zLgoKCSogaTM4Ni9taW5ndzMyLmggKENQUF9QUkVERUZJTkVTKTogQWRkIF9fTVNWQ1JUX18gZm9yIG1zdmMKCXJ1bnRpbWUuCgkqIGkzODYvY3J0ZGxsLmggKENQUF9QUkVERUZJTkVTKTogRGVmaW5lLgoKU2F0IFNlcCAgNSAwMzoyMzowNSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBtNjhrLm1kICg1MjAwIG1vdnFpKTogRG8gbm90IGFsbG93IGJ5dGUgc2l6ZWQgbWVtb3J5IHJlZmVyZW5jZXMKCXVzaW5nIGFkZHJlc3MgcmVncy4KCSogbTY4ay5jIChvdXRwdXRfbW92ZV9xaW1vZGUpOiBEbyBub3QgdXNlIGJ5dGUgc2l6ZWQgb3BlcmF0aW9ucyBvbgoJYWRkcmVzcyByZWdpc3RlcnMuCgoJKiBNYWtlZmlsZS5pbiAocGV4ZWN1dGUubyk6IFVzZSBwZXhlY3V0ZS5jIGZyb20gbGliaWJlcnR5LiAgUHJvdmlkZQoJZXhwbGljaXQgcnVsZXMgZm9yIGJ1aWxkaW5nLiAgU2ltaWxhcmx5IGZvciBhbGxvY2EsIHZmcHJpbnRmLAoJY2hvb3NlLXRlbXAgYW5kIG1rc3RlbXAsIGdldG9wdCwgZ2V0b3B0MSwgYW5kIG9ic3RhY2suCgkoSU5DTFVERVMpOiBBZGQgJChzcmNkaXIpLy4uL2luY2x1ZGUuCgkqIHBleGVjdXRlLmMsIGFsbG9jYS5jLCB2ZnByaW50Zi5jLCBjaG9vc2UtdGVtcC5jLCBta3N0ZW1wLmM6IERlbGV0ZS4KCSogZ2V0b3B0LmgsIGdldG9wdC5jIGdldG9wdDEuYywgb2JzdGFjay5jLCBvYnN0YWNrLmg6IExpa2V3aXNlLgoKRnJpIFNlcCAgNCAxMTo1Nzo1MCAxOTk4ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBnY2MuYyAoZG9fc3BlY18xKTogW2Nhc2UgJ28nXSBBY2NvdW50IGZvcgoJbGFuZ19zcGVjaWZpY19leHRyYV9vdXRmaWxlcy4KCShtYWluKTogQ29ycmVjdGx5IGNsZWFyIGFsbCBzbG90cyBpbiBvdXRmaWxlcyBmb3IKCWxhbmdfc3BlY2lmaWNfZXh0cmFfb3V0ZmlsZXMuICBTZXQgaW5wdXRfZmlsZV9udW1iZXIgYmVmb3JlCgljYWxsaW5nIGxhbmdfc3BlY2lmaWNfcHJlX2xpbmsuCgpGcmkgU2VwICA0IDEwOjM3OjA3IDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGxvb3AuYyAobG9hZF9tZW1zKTogRml4IEpVTVBfTEFCRUwgZmllbGQgYWZ0ZXIgZm9yX2VhY2hfcnR4IGNhbGwuCgpGcmkgU2VwICA0IDAyOjAxOjA1IDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLmMgKG91dHB1dF9kb3VibGVfaW50KTogSW4gYWxsIFY5IHN5bWJvbGljCgljYXNlcywgdXNlIHh3b3JkLgoJKHNwYXJjX291dHB1dF9kZWZlcnJlZF9jYXNlX3ZlY3RvcnMpOiBJZiBubyB3b3JrIHRvIGRvLCByZXR1cm4uCglGaXggdGhpbmtvIGluIFNlcHQgMSBjaGFuZ2UuCgoxOTk4LTA5LTAzICBTTCBCYXVyICA8c3RldmVAYWx0YWlyLnhlbWFjcy5vcmc+CgoJKiBNYWtlZmlsZS5pbjogQWRkIHNlbWljb2xvbiBpbiBCSVNPTiBkZWZpbml0aW9uIGZvciBwb3J0YWJpbGl0eS4KClRodSBTZXAgIDMgMTM6MzQ6NDEgMTk5OCAgVG9vbiBNb2VuZSAgPHRvb25AbW9lbmUuaW5kaXYubmx1dWcubmw+CgoJKiBjb25maWcvbmV4dHN0ZXAuYyAoaGFuZGxlX3ByYWdtYSk6IENvcnJlY3QgbmFtZSBvZiB0aGlyZAoJYXJndW1lbnQuCgpUdWUgU2VwICAxIDExOjMwOjMzIDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvbTMyci9tMzJyLm1kOiBDaGFuZ2UgKHJlZzpDQyAxNykgdG8gKHJlZzpTSSAxNykuCgkqIGNvbmZpZy9tMzJyL20zMnIuaDogTWFrZSByZWdpc3RlciAxNyBiZSBmaXhlZC4KCSogY29uZmlnL20zMnIvbTMyci5jOiBVc2UgU0ltb2RlIGZvciBjYyBvcGVyYXRpb25zLgoKVGh1IFNlcCAgMyAxODoxNzozNCAxOTk4ICBCZW5qYW1pbiBLb3NuaWsgIDxia296QGN5Z251cy5jb20+CgoJKiBpbnZva2UudGV4aSAoV2FybmluZyBPcHRpb25zKTogQWRkIC1Xbm9uLXRlbXBsYXRlLWZyaWVuZAoJZG9jdW1lbnRhdGlvbi4KClRodSBTZXAgIDMgMTg6MTY6MTYgMTk5OCAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CgoJKiByczYwMDAuYyAocnM2MDAwX292ZXJyaWRlX29wdGlvbnMpOiBBZGQgLW1jcHU9ezQwMSxlNjAzZX0uCgpUaHUgU2VwICAzIDE4OjA1OjE2IDE5OTggIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIHJzNjAwMC5tZCAobW92c2YpOiBEaXNhYmxlIGV4cGxpY2l0IHNlY29uZGFyeS1yZWxvYWQtbGlrZQoJZnVuY3Rpb25hbGl0eSBpZiBUQVJHRVRfUE9XRVJQQzY0LgoJKG1vdmRmKTogUmVtb3ZlIFRBUkdFVF9QT1dFUlBDNjQgZXhwbGljaXQgc2Vjb25kYXJ5LXJlbG9hZC1saWtlCglmdW5jdGlvbmFsaXR5LgoKVGh1IFNlcCAgMyAxMTo0MTo0MCAxOTk4ICBSb2JlcnQgTGlwZSAgPHJvYmVydGxAZGdpaS5jb20+CgoJKiBmaXhpbmMuc2NvOiBCb3Jyb3cgY29kZSB0byB3cmFwICdib29sJyB0eXBlZGVmcyBmcm9tIHRpbmZvLmgKCWFuZCB0ZXJtLmggZnJvbSBmaXhpbmMud3JhcC4KClRodSBTZXAgIDMgMDk6NDc6MzEgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogYWNsb2NhbC5tNCAoR0NDX0hFQURFUl9TVFJJTkcpOiBOZXcgbWFjcm8gdG8gZGV0ZWN0IGlmIGl0IGlzCglzYWZlIHRvIGluY2x1ZGUgYm90aCBzdHJpbmcuaCBhbmQgc3RyaW5ncy5oIHRvZ2V0aGVyLgoJKEdDQ19ORUVEX0RFQ0xBUkFUSU9OKTogVGVzdCBTVFJJTkdfV0lUSF9TVFJJTkdTIHdoZW4gZGVjaWRpbmcKCXdoaWNoIGhlYWRlcnMgdG8gc2VhcmNoIGZvciBmdW5jdGlvbiBkZWNsYXJhdGlvbnMuICBDb250aW51ZSB0bwoJcHJlZmVyIHN0cmluZy5oIG92ZXIgc3RyaW5ncy5oIHdoZW4gYm90aCBhcmUgbm90IGFjY2VwdGFibGUuCgoJKiBhY2NvbmZpZy5oIChTVFJJTkdfV0lUSF9TVFJJTkdTKTogQWRkIHN0dWIuCgoJKiBjb25maWd1cmUuaW46IENhbGwgR0NDX0hFQURFUl9TVFJJTkcuCgoJKiBzeXN0ZW0uaDogVGVzdCBTVFJJTkdfV0lUSF9TVFJJTkdTIHdoZW4gZGVjaWRpbmcgd2hpY2ggaGVhZGVycwoJdG8gaW5jbHVkZS4gIENvbnRpbnVlIHRvIHByZWZlciBzdHJpbmcuaCBvdmVyIHN0cmluZ3MuaCB3aGVuIGJvdGgKCWFyZSBub3QgYWNjZXB0YWJsZS4KCldlZCBTZXAgIDIgMjM6NTY6MjkgMTk5OCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcGllcmRvbC5jb2JhbHRtaWNyby5jb20+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMuYyAob3V0cHV0X2RvdWJsZV9pbnQpOiBJZiBWOSBhbmQgTUVETE9XLCBkbwoJbm90IGFzc3VtZSB0b3AgMzItYml0cyBvZiBzeW1ib2xpYyBhZGRyZXNzZXMgYXJlIHplcm8gaWYKCWZsYWdfcGljLgoKVGh1IFNlcCAgMyAwMDoyMzoyMSAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZ2luY2x1ZGUvdmEtYWxwaGEuaDogUHJvdGVjdCBlbnRpcmUgc2Vjb25kIHBvcnRpb24gb2YgdGhlCglmaWxlIGFnYWluc3QgZG91YmxlIGluY2x1c2lvbi4KClRodSBTZXAgIDMgMDA6Mzc6NTUgMTk5OCAgT3ZpZGl1IFByZWRlc2N1ICA8b3ZpZGl1QGFyYWNuZXQuY29tPgoKCUFkZGVkIHN1cHBvcnQgZm9yIHRoZSBCb2VobSdzIGdhcmJhZ2UgY29sbGVjdG9yLgoJKiBjb25maWd1cmUuaW46IEhhbmRsZSAtLWVuYWJsZS1vYmpjLWdjLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgkqIE1ha2VmaWxlLmluIChDSEVDS19UQVJHRVRTKTogQWRkIGNoZWNrLW9iamMuCgkoY2hlY2stb2JqYyk6IE5ldyBydWxlLgoJKiBvYmpjL01ha2UtbGFuZy5pbjogQnVpbGQgYSBkaWZmZXJlbnQgT2JqZWN0aXZlLUMgbGlicmFyeSB0aGF0CglydW5zIHdpdGggdGhlIEJvZWhtJ3MgY29sbGVjdG9yLgoJKiBvYmpjL2VuY29kaW5nLmMgKG9iamNfcm91bmRfYWNjX3NpemVfZm9yX3R5cGVzKTogTmV3IGZ1bmN0aW9uLgoJKiBvYmpjL2VuY29kaW5nLmM6IENvcnJlY3RseSBjb21wdXRlIHRoZSBzaXplIG9mIGNvbXBvdW5kIHR5cGVzIGluCgl0aGUgcHJlc2VuY2Ugb2YgYml0ZmllbGRzLiBTa2lwIHRoZSB2YXJpYWJsZSBuYW1lIG9mIHRoZSB0eXBlIGlmCglhbnkuIEFkZGVkIHN1cHBvcnQgZm9yIGxvbmcgbG9uZy4KCSogb2JqYy9lbmNvZGluZy5oIChfQ19HQ0lOVklTSUJMRSk6IE5ldyBzcGVjaWZpZXIuCgkoX0ZfR0NJTlZJU0lCTEUpOiBOZXcgbWFzay4KCSogb2JqYy9nYy5jOiBOZXcgZmlsZS4gQ29tcHV0ZSB0aGUgdHlwZSBtZW1vcnkgbWFzayBhc3NvY2lhdGVkIHdpdGgKCWEgY2xhc3MgYmFzZWQgb24gdGhlIHJ1bnRpbWUgaW5mb3JtYXRpb24uCgkqIG9iamMvbWlzYy5jOiBBZGRlZCB0aGUgaG9va3MgdGhhdCB1c2UgdGhlIEJvZWhtJ3MgY29sbGVjdG9yCglhbGxvY2F0aW9uIGZ1bmN0aW9ucy4KCSogb2JqYy9vYmpjLWFjdC5jIChidWlsZF9jbGFzc190ZW1wbGF0ZSk6IEdlbmVyYXRlIGEgbmV3IGNsYXNzCgltZW1iZXIgKGdjX29iamVjdF90eXBlKSB0byBob2xkIHRoZSBjbGFzcycgdHlwZSBtZW1vcnkgbWFzay4KCShidWlsZF9zaGFyZWRfc3RydWN0dXJlX2luaXRpYWxpemVyKTogSW5pdGlhbGl6ZSB0aGUgbmV3IG1lbWJlciB0bwoJTlVMTC4KCShlbmNvZGVfY29tcGxldGVfYml0ZmllbGQpOiBOZXcgZnVuY3Rpb24uIEdlbmVyYXRlIHRoZSBuZXcKCWVuY29kaW5nLgoJKGVuY29kZV9maWVsZF9kZWNsKTogR2VuZXJhdGUgdGhlIG5ldyBlbmNvZGluZyBvbmx5IGZvciB0aGUgR05VCglydW50aW1lLgoJKiBvYmpjL29iamMtYXBpLmggKF9DX0xOR19MTkcsIF9DX1VMTkdfTE5HKTogTmV3IHNwZWNpZmllcnMgZm9yIHRoZQoJbG9uZyBsb25nIHR5cGVzLgoJKGNsYXNzX2dldF9nY19vYmplY3RfdHlwZSk6IE5ldyBmdW5jdGlvbiB0byBtYXJrIGEgcG9pbnRlciBpbnN0YW5jZQoJdmFyaWFibGUgYXMgYSB3ZWFrIHBvaW50ZXIuCgkqIG9iamMvb2JqYy1mZWF0dXJlcy50ZXhpOiBOZXcgZmlsZS4KCSogb2JqYy9vYmpjLmggKGdjX29iamVjdF90eXBlKTogTmV3IGNsYXNzIG1lbWJlci4KCSogb2JqYy9vYmplY3RzLmMgKGNsYXNzX2NyZWF0ZV9pbnN0YW5jZSk6IENyZWF0ZSBhIHR5cGVkIG1lbW9yeQoJb2JqZWN0IHdoZW4gY29tcGlsZWQgd2l0aCBCb2VobSdzIGNvbGxlY3RvciBzdXBwb3J0LgoJKiBvYmpjL3NlbmRtc2cuYyAoX19vYmpjX2luaXRfaW5zdGFsbF9kdGFibGUpOiBDYWxsCglfX29iamNfc2VuZF9pbml0aWFsaXplIGluc3RlYWQgb2Ygc2V0dGluZyB0aGUgaW5pdGlhbGl6ZSBmbGFnLgoJKF9fb2JqY19zZW5kX2luaXRpYWxpemUpOiBDYWxsIF9fb2JqY19nZW5lcmF0ZV9nY190eXBlX2Rlc2NyaXB0aW9uCgl0byBnZW5lcmF0ZSB0aGUgY2xhc3MgdHlwZSBtZW1vcnkgbWFzay4gUmV3cml0ZSB0aGUgY29kZSB0aGF0CglzZW5kcyB0aGUgK2luaXRpYWxpemUgc28gdGhhdCBpdCBpcyBjYWxsZWQgb25seSBvbmNlIChidWcgcmVwb3J0CglhbmQgZml4IGZyb20gUm9uYWxkIFBpam5hY2tlciA8Um9uYWxkLlBpam5hY2tlckBiZXN0Lm1zLnBoaWxpcHMuY29tPikuCgkqIHRlc3RzdWl0ZS9vYmpjOiBOZXcgdGVzdHN1aXRlIGZvciBPYmplY3RpdmUtQyB0eXBlIGVuY29kaW5nLgoJKiB0ZXN0c3VpdGUvbGliL29iamMtdG9ydHVyZS5leHA6IE5ldyBmaWxlLgoJKiB0ZXN0c3VpdGUvbGliL29iamMuZXhwOiBOZXcgZmlsZS4KCldlZCBTZXAgIDIgMTQ6NDc6MzYgMTk5OCAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSoganVtcC5jIChqdW1wX29wdGltaXplKTogSW4gaWYvdGhlbi9lbHNlIHRyYW5zZm9ybWF0aW9ucywgYWRkCglhbm90aGVyIGNhbGwgdG8gbW9kaWZpZWRfYmV0d2Vlbl9wIGZvciB0aGUganVtcCBpbnNuLgoKV2VkIFNlcCAgMiAxNDoxNjo0OSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBmaXgtaGVhZGVyLmMgKHN5bWxpbmspOiBUcmVhdCBsaWtlIHJlYWRsaW5rLgoKV2VkIFNlcCAgMiAxOTozMDowNiAxOTk4ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogZHdhcmZvdXQuYyAoZnVuZGFtZW50YWxfdHlwZV9jb2RlKTogRW5jb2RlIDMyIGJpdCBmbG9hdHMvZG91YmxlcwoJYXMgRlRfZmxvYXQuCgpXZWQgU2VwICAyIDEwOjA2OjA3IDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvbmV4dHN0ZXAuaDogICAgVXBkYXRlIEhBTkRMRV9QUkFHTUEgbWFjcm8uCgkqIGNvbmZpZy9oODMwMC9oODMwMC5oOiBVcGRhdGUgSEFORExFX1BSQUdNQSBtYWNyby4KCSogY29uZmlnL2k5NjAvaTk2MC5oOiAgIFVwZGF0ZSBIQU5ETEVfUFJBR01BIG1hY3JvLgoKCSogY29uZmlnL25leHRzdGVwLmMgKGhhbmRsZV9wcmFnbWEpOiBUYWtlIHRocmVlIGFyZ3VtZW50cywgYXMgcGVyCgl0aGUgbmV3IEhBTkRMRV9QUkFHTUEgbWFjcm8gc3BlY2lmaWNhdGlvbi4KCSogY29uZmlnL2g4MzAwL2g4MzAwLmMgKGhhbmRsZV9wcmFnbWEpOiBUYWtlIHRocmVlIGFyZ3VtZW50cywgYXMKCXBlciB0aGUgbmV3IEhBTkRMRV9QUkFHTUEgbWFjcm8gc3BlY2lmaWNhdGlvbi4KCSogY29uZmlnL2k5NjAvaTk2MC5jIChwcm9jZXNzX3ByYWdtYSk6IFRha2UgdGhyZWUgYXJndW1lbnRzLCBhcwoJcGVyIHRoZSBuZXcgSEFORExFX1BSQUdNQSBtYWNybyBzcGVjaWZpY2F0aW9uLgoKV2VkIFNlcCAgMiAwOToyNToyOSAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogYy1sZXguYyAoY2hlY2tfbmV3bGluZSk6IENhbGwgSEFORExFX1BSQUdNQSBiZWZvcmUKCUhBTkRMRV9TWVNWX1BSQUdNQSBpZiBib3RoIGFyZSBkZWZpbmVkLiAgR2VuZXJhdGUgd2FybmluZyBtZXNzYWdlcwoJaWYgdW5rbm93biBwcmFnbWFzIGFyZSBlbmNvdW50ZXJlZC4KCShoYW5kbGVfc3lzdl9wcmFnbWEpOiBJbnRlcnByZXQgcmV0dXJuIGNvZGUgZnJvbQoJaGFuZGxlX3ByYWdtYV90b2tlbiAoKS4gIFJldHVybiBzdWNjZXNzL2ZhaWx1cmUgaW5kaWNhdGlvbiByYXRoZXIKCXRoYW4gbmV4dCB1bnByb2Nlc3NlZCBjaGFyYWN0ZXIuCgkocHJhZ21hX2dldGMpOiBOZXcgZnVuY3Rpb246IHJldHJpZXZlcyBjaGFyYWN0ZXJzIGZyb20gdGhlCglpbnB1dCBzdHJlYW0uICBEZWZpbmVkIHdoZW4gSEFORExFX1BSQUdNQSBpcyBlbmFibGVkLgoJKHByYWdtYV91bmdldGMpOiBOZXcgZnVuY3Rpb246IHJlcGxhY2VzIGNoYXJhY3RlcnMgYmFjayBpbnRvIHRoZQoJaW5wdXQgc3RyZWFtLiAgRGVmaW5lZCB3aGVuIEhBTkRMRV9QUkFHTUEgaXMgZW5hYmxlZC4KCgkqIGMtcHJhZ21hLmMgKGhhbmRsZV9wcmFnbWFfdG9rZW4pOiBSZXR1cm4gc3VjY2Vzcy9mYWlsdXJlIHN0YXR1cwoJb2YgdGhlIHBhcnNlLgoKCSogYy1wcmFnbWEuaDogQ2hhbmdlIHByb3RvdHlwZSBvZiBoYW5kbGVfcHJhZ21hX3Rva2VuKCkuCgoJKiB2YXJhc20uYyAoaGFuZGxlX3ByYWdtYV93ZWFrKTogT25seSBjcmVhdGUgdGhpcyBmdW5jdGlvbiBpZgoJSEFORExFX1BSQUdNQV9XRUFLIGlzIGRlZmluZWQuCgoJKiBjLWNvbW1vbixjIChkZWNsX2F0dHJpYnV0ZXMpOiBJZiBkZWZpbmVkIGNhbGwgdGhlIGV4cHJlc3Npb24KCWNvbnRhaW5lZCB3aXRoaW4gdGhlIElOU0VSVF9BVFRSSUJVVEVTIG1hY3JvIGJlZm9yZSBhZGRpbmcKCWF0dHJpYnV0ZXMgdG8gYSBkZWNsLgoKCSogdG0udGV4aSAoSEFORExFX1BSQUdNQSk6IERvY3VtZW50IHRoZSBuZXcgdmVyc2lvbiBvZgoJSEFORExFX1BSQUdNQSwgd2hpY2ggdGFrZXMgdGhyZWUgYXJndW1lbnRzLgoJKElOU0VSVF9BVFRSSUJVVEVTKTogRG9jdW1lbnQgdGhpcyBuZXcgbWFjcm8uCgoJKiBMQU5HVUFHRVM6IERvY3VtZW50IHRoZSBuZXcgdmVyc2lvbiBvZiBIQU5ETEVfUFJBR01BIGFuZCB0aGUKCW5ldyBJTlNFUlRfQVRUUklCVVRFUyBtYWNyby4KCldlZCBTZXAgIDIgMDI6MDM6MjMgMTk5OCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcGllcmRvbC5jb2JhbHRtaWNyby5jb20+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMubWQgKG1vdmRmKTogT25seSBnZW5lcmF0ZSBzcGVjaWFsIFJUTCBmb3IKCUxBQkVMX1JFRnMgd2hlbiBQSUMuCgkobW92ZV9sYWJlbF9kaSk6IFJlbW92ZS4KCShtb3ZkaV9waWNfbGFiZWxfcmVmLCBtb3ZkaV9oaWdoX3BpY19sYWJlbF9yZWYsCgltb3ZkaV9sb19zdW1fcGljX2xhYmVsX3JlZik6IE5ldyBwYXR0ZXJucyBmb3IgNjQtYml0IGxhYmVsCglyZWZlcmVuY2VzIHdoZW4gUElDLgoJKiBjb25maWcvc3BhcmMvc3BhcmMuaCAoQVNNX09VVFBVVF9BRERSX1ZFQ19FTFQsCglBU01fT1VUUFVUX0FERFJfRElGRl9FTFQpOiBEb24ndCBkbyBhbnl0aGluZyBzcGVjaWFsIGZvciBNRURMT1csCglvdXRwdXQgYW4gLnh3b3JkIGZvciBhbGwgNjQtYml0IGNhc2VzLgoKVHVlIFNlcCAgMSAxNTo1NToxNyAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5jIChmaW5hbGl6ZV9waWMpOiBEb24ndCBvdXRwdXQgYXJiaXRyYXJ5CglhbGlnbm1lbnQsIHVzZSBGVU5DVElPTl9CT1VOREFSWSBpbnN0ZWFkLgoJKHNwYXJjX291dHB1dF9kZWZlcnJlZF9jYXNlX3ZlY3RvcnMpOiBMaWtld2lzZS4KCk1vbiBBdWcgMzEgMTc6MjU6NDEgMTk5OCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcGllcmRvbC5jb2JhbHRtaWNyby5jb20+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMubWQgKG1vdnNmX2NvbnN0X2ludHJlZyk6IEtpbGwgd2FybmluZy4KCShtb3Z0Zl9pbnNuX3NwNjQsIG1vdnRmX25vX2VfaW5zbl9zcDY0KTogUmVvcmRlciBhbHRlcm5hdGl2ZXMuCgpNb24gQXVnIDMxIDEzOjU3OjU1IDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbHBoYS92YV9saXN0Lmg6IE5ldyBmaWxlLgoJKiBhbHBoYS94LWFscGhhIChFWFRSQV9IRUFERVJTKTogTmV3LiAgQWRkIHZhX2xpc3QuaC4KCk1vbiBBdWcgMzEgMTQ6NTU6MDIgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogTkVXUzogQWRkIFNDTyBPcGVuc2VydmVyIGFuZCBVbml4d2FyZSA3IG5vdGVzLgoKCSogTkVXUzogRml4IHR5cG9zLgoKTW9uIEF1ZyAzMSAxNTo0MjoxOCAxOTk4ICBEYXZlIEJyb2xsZXkgIDxicm9sbGV5QGN5Z251cy5jb20+CgoJKiB2YXJhc20uYyAoY29tcGFyZV9jb25zdGFudF8xKTogSGFuZGxlIFJBTkdFX0VYUFIuCgkocmVjb3JkX2NvbnN0YW50XzEpOiBIYW5kbGUgUkFOR0VfRVhQUi4KCk1vbiBBdWcgMzEgMTA6NTQ6MDMgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHByaW50LXJ0bC5jIChwcmludF9ydHgpOiBOT1RFX0lOU05fTElWRSBoYXMgYW4gcnR4IG5vdCBhIGJpdG1hcC4KCSogaGFpZmEtc2NoZWQuYyAoc2NoZWRfYW5hbHl6ZSk6IEhhbmRsZSBOT1RFX0lOU05fUkFOR0VfU1RBUlQKCWFuZCBOT1RFX0lOU05fUkFOR0VfRU5EIHNwZWNpYWxseS4KCShyZWVtaXRfbm90ZXMpOiBMaWtld2lzZS4KCk1vbiBBdWcgMzEgMTA6MTg6NTIgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogc3BhcmMuYyAoVE1BU0ssIFVNQVNLKTogVXNlIGAodW5zaWduZWQpMScgbm90IGAxVScuCgkodWx0cmFzcGFyY19zY2hlZF9pbml0KTogUmVtb3ZlIHVubmVlZGVkICYuCgpNb24gQXVnIDMxIDEwOjQ3OjE2IDE5OTggIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmluZm9ybWF0aWsudW5pLWRvcnRtdW5kLmRlPgoKCSogY29uZmlnL202OGsvbTY4ay5oIChUQVJHRVRfU1dJVENIRVMpOiBEb24ndCByZW1vdmUgTUFTS182ODA0MAoJZm9yIG02ODAyMC02MCwgdG8gcHJldmVudCB0aGUgdXNlIG9mIGZpbnRyei4KClN1biBBdWcgMzAgMjI6MTc6MjAgMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogSWYgdGhlIG5hdGl2ZSBjb21waWxlciBpcyBHQ0MgdXNlICQoV0FSTl9DRkxBR1MpCglldmVuIGluIHN0YWdlMS4KCSogTWFrZWZpbGUuaW46IExpa2V3aXNlLgoJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGVkLgoKU3VuIEF1ZyAzMCAyMjoxNTo0MSAxOTk4ICBILkouIEx1ICAoaGpsQGdudS5vcmcpCgoJKiBjb25maWd1cmUuaW4gKGd4eF9pbmNsdWRlX2Rpcik6IENoYW5nZWQgdG8KCScke3ByZWZpeH0vaW5jbHVkZS9nKysnLSR7bGlic3RkY3h4X2ludGVyZmFjZX0uCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KClN1biBBdWcgMzAgMjA6MTk6NDMgMTk5OCAgSGFucy1QZXRlciBOaWxzc29uICA8aHBAYXhpcy5zZT4KCgkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBDaGFuZ2UgIj4iIHRvICI+PSIgbWFraW5nIE1PVkVfUkFUSU8gdXNlCgljb25zaXN0ZW50LgoJKiB0bS50ZXhpIChDb3N0cyk6IFNheSBNT1ZFX1JBVElPIGlzIG51bWJlciBvZiBtZW0tbWVtIG1vdmUKCSpzZXF1ZW5jZXMqICpiZWxvdyogd2hpY2ggc2NhbGFyIG1vdmVzIHdpbGwgYmUgdXNlZC4KClN1biBBdWcgMzAgMTc6MTg6NDMgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogY29sbGVjdDIuYyAobWt0ZW1wKTogRGVsZXRlIHVudXNlZCBkZWNsYXJhdGlvbi4KCgkqIGNvbmZpZy94bS1uZXRic2QuaDogUmVtb3ZlIHVubmVjZXNzYXJ5IGZpbGUuCgkqIGNvbmZpZy8qL3htLW5ldGJzZC5oOiBEbyBub3QgaW5jbHVkZSB0aGUgZ2VuZXJpYyB4bS1uZXRic2QuaAoJZmlsZSBhbnltb3JlLCBpdCBpcyBub3QgbmVlZGVkLgoKU3VuIEF1ZyAzMCAxNjowNTo0NSAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY29udmVydC5jIChjb252ZXJ0X3RvX2ludGVnZXIpOiBJc3N1ZSBhbiBlcnJvciBvbiBjb252ZXJzaW9ucyB0bwoJaW5jb21wbGV0ZSB0eXBlcy4KClN1biBBdWcgMzAgMTY6NDc6MjAgMTk5OCAgTWFydGluIHZvbiBMdndpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIE1ha2VmaWxlLmluOiBBZGQgbGFuZ190cmVlX2ZpbGVzIGFuZCBnZW5jaGVjay5oLgoJKiBjb25maWd1cmUuaW46IEdlbmVyYXRlIHRoZW0uCgkqIGdlbmNoZWNrLmM6IEluY2x1ZGUgZ2VuY2hlY2suaC4KClNhdCBBdWcgMjkgMjE6Mzg6MjQgMTk5OCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcGllcmRvbC5jb2JhbHRtaWNyby5jb20+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMubWQgKHBpY19sb19zdW1fZGksIHBpY19zZXRoaV9kaSk6IFJlbmFtZSB0bwoJbW92ZGlfbG9fc3VtX3BpYyBhbmQgbW92ZGlfaGlnaF9waWMgYW5kIG1ha2UgdmlzaWJsZS4KCSogY29uZmlnL3NwYXJjL3NwYXJjLmMgKGxlZ2l0aW1pemVfcGljX2FkZHJlc3MpOiBGb3IgLWZQSUMsCgllbWl0IHRoZXNlIHdoZW4gUG1vZGUgaXMgbm90IFNJbW9kZS4KCSogY29uZmlnL3NwYXJjL2xpbnV4NjQuaCAoU1BBUkNfREVGQVVMVF9DTU9ERUwpOiBNYWtlIENNX01FRExPVy4KClNhdCBBdWcgMjkgMTQ6NTk6MzIgMTk5OCAgTXVtaXQgS2hhbiAgPGtoYW5AeHJheWxpdGgud2lzYy5lZHU+CgoJKiBpMzg2L2N5Z3dpbjMyLmggKEFTTV9PVVRQVVRfU0VDVElPTl9OQU1FKTogRG9uJ3QgZW1pdAoJLmxpbmtvbmNlIGRpcmVjdGl2ZSBhZnRlciB0aGUgZmlyc3QgdGltZS4KClNhdCBBdWcgMjkgMTI6Mzk6NTYgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbTY4ay5tZCAoYmVxMF9kaSk6IEdlbmVyYXRlIGNvcnJlY3QgKGFuZCBtb3JlIGVmZmljaWVudCkgY29kZSB3aGVuCgl0aGUgY2xvYmJlcmVkIG9wZXJhbmQgb3ZlcmxhcHMgd2l0aCBhbiBpbnB1dC4KCShibmUwX2RpKTogU2ltaWxhcmx5LgoKCSogTWFrZWZpbGUuaW4gKElOU1RBTEwpOiBSZW1vdmUgIi0tbm8taGVhZGVyIiBhcmd1bWVudC4KCgkqIE5FV1M6IFZhcmlvdXMgdXBkYXRlcy4KCkZyaSBBdWcgMjggMTk6MDA6NDQgMTk5OCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcGllcmRvbC5jb2JhbHRtaWNyby5jb20+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMuYyAoYXJpdGhfb3BlcmFuZCwgY29uc3Q2NF9vcGVyYW5kLAoJY29uc3Q2NF9oaWdoX29wZXJhbmQsIGFyaXRoX2RvdWJsZV80MDk2X29wZXJhbmQpOiBNYXJrIG1vZGUgYXMKCXVudXNlZC4KCShjcmVhdGVfc2ltcGxlX2ZvY3VzX2JpdHMpOiBSZW1vdmUgdW51c2VkIGFyZyBoaWdoZXN0X2JpdF9zZXQsIGFsbAoJY2FsbGVycyBjaGFuZ2VkLgoJKHNwYXJjX2VtaXRfc2V0X2NvbnN0NjQpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGkuCgkoc3BhcmNfc3BsaXRkaV9sZWdpdGltYXRlKTogTGlrZXdpc2UgZm9yIGFkZHJfcGFydC4KCSh1bHRyYV9jb2RlX2Zyb21fbWFzayk6IExpa2V3aXNlIGZvciBtYXNrLgoJKHVsdHJhX2Ntb3ZlX3Jlc3VsdHNfcmVhZHlfcCk6IEZpeHVwIGVudHJ5IG1vZHVsbyBjYWxjLiBhbmQKCXJldmVyc2UgcmV0dXJuIHZhbHVlcyBzbyBpdCBtYXRjaGVzIHVzYWdlIGFuZCBjb21tZW50cy4KCSh1bHRyYV9mbHVzaF9waXBlbGluZSk6IExpa2V3aXNlLgoJKHVsdHJhX2ZwbW9kZV9jb25mbGljdF9leGlzdHMpOiBMaWtld2lzZSwgcmVtb3ZlIHVudXNlZCB2YXJpYWJsZQoJdGhpc190eXBlLCBhbmQgYWxsb3cgbG9hZHMgYW5kIHN0b3JlcyBvZiBkaWZmZXJpbmcgRlAgbW9kZXMgYXMKCXRoZXkgZG8gbm90IGNyZWF0ZSBhIGNvbmZsaWN0LgoJKHVsdHJhX2ZpbmRfdHlwZSk6IEluaXRpYWxpemUgZnBtb2RlIHRvIFNGbW9kZSwgZml4CglwYXJlbnRoZXNpemF0aW9uIHRoaW5rb3MgaW4gbGFyZ2UgY29uZGl0aW9uYWwuCgkodWx0cmFzcGFyY19zY2hlZF9pbml0KTogTWFyayBkdW1wIGFuZCBzY2hlZF92ZXJib3NlIGFzIHVudXNlZC4KCUluaXQgZnJlZV9zbG90X21hc2sgYWZ0ZXIgdWx0cmFfY3VyX2hpc3QgaXMgcmVzZXQsIG5vdCBiZWZvcmUuCgkodWx0cmFzcGFyY19yZXNjYW5fcGlwZWxpbmVfc3RhdGUpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIHVjb2RlLgoJKHVsdHJhc3BhcmNfc2NoZWRfcmVvcmRlcik6IERvbid0IGJ6ZXJvIGN1cnJlbnQgcGlwZWxpbmUgc3RhdGUsCgl1c2UgdWx0cmFfZmx1c2hfcGlwZWxpbmUgaW5zdGVhZCwgdGhlbiByZS1pbml0IGdyb3VwIHBvaW50ZXIuCglGaXggc3RhdGVtZW50IHdpdGggbm8gZWZmZWN0LiAgSWYgbm8gcHJvZ3Jlc3MgbWFkZSBpbiwgYW5kIG5vCglpbnN0cnVjdGlvbnMgc2NoZWR1bGVkIGF0IGFsbCwgYWR2YW5jZSB0byBuZXcgcGlwZWxpbmUgY3ljbGUgZWxzZQoJd2UgZ2V0IGludG8gYW4gZW5kbGVzcyBsb29wLgoJKHVsdHJhc3BhcmNfYWRqdXN0X2Nvc3QpOiBSZW1vdmUgcHJldmlvdXMgYXJnLgoJKiBjb25maWcvc3BhcmMvc3BhcmMuaCAoQURKVVNUX0NPU1QpOiBVcGRhdGUgdG8gcmVmbGVjdCB0aGF0LgoKRnJpIEF1ZyAyOCAxMzo1MjozNSAxOTk4ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBzcGFyYy5tZCAoREltb2RlLCBERm1vZGUsIFRGbW9kZSBzcGxpdHMpOiBEZWxldGUgc2VsZl9yZWZlcmVuY2UKCWNvZGUuICBVc2UgcmVnX292ZXJsYXBfbWVudGlvbmVkX3AgdG8gZGV0ZWN0IHdoZW4gc291cmNlIGFuZAoJZGVzdGluYXRpb24gb3ZlcmxhcC4KCShuZWd0ZjJfbm90djkrMSk6IFVzZSBERm1vZGUgaW5zdGVhZCBvZiBTRm1vZGUgaW4gbGFzdCB0d28gb3BlcmFuZHMuCgoxOTk4LTA4LTI4ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBjeWdudXMuY29tPgoKCSogbG9vcC5jIChjaGVja19kYnJhX2xvb3ApOiBQYXNzIENPTVBBUklTT05fVkFMVUUsIG5vdAoJQ09NUEFSSVNPTl9WQUwsIGludG8gaW52YXJpYW50X3AuCgpGcmkgQXVnIDI4IDE1OjEzOjI1IDE5OTggIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiByZWdtb3ZlLmMgKHJlZ2NsYXNzX2NvbXBhdGlibGVfcCk6IE5ldyBmdW5jdGlvbi4KCShyZWdtb3ZlX29wdGltaXplKTogVXNlIGl0LgoKCVVzZSBOUkVHUyBwYXJhbWV0ZXIgaW5zdGVhZCBvZiBjYWxsaW5nIG1heF9yZWdfbnVtLgoKCShmaXh1cF9tYXRjaF8xKTogRG9uJ3QgdXNlIGNvZGUgPSBNSU5VUyB3aGVuIGxhdGVyIHRpZWluZyB3aXRoCglhIGhhcmQgcmVnaXN0ZXIgaXMgbGlrZWx5LgoKRnJpIEF1ZyAyOCAxNDo1NDowNyAxOTk4ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogbG9vcC5jIChjaGVja19kYnJhX2xvb3ApOiBGaXggY2FsY3VsYXRpb24gb2YgRklOQUxfVkFMVUUgd2hlbgoJQ09NUEFSSVNPTl9WQUwgd2FzIG5vcm1hbGl6ZWQuCgpUaHUgQXVnIDI3IDIwOjEwOjQ2IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGxvb3AuYyAoY2hlY2tfZGJyYV9sb29wKTogVGhlIGxvb3AgZW5kaW5nIGNvbXBhcmlzb24gdmFsdWUKCW11c3QgYmUgYW4gaW52YXJpYW50IG9yIHdlIGNhbiBub3QgcmV2ZXJzZSB0aGUgbG9vcC4KCgkqIGxvb3AuYyAoc2Nhbl9sb29wKTogQ291bnQgZG93biBmcm9tIG1heF9yZWdfbnVtIC0gMSB0bwoJRklSU1RfUFNFVURPX1JFR0lTVEVSIHRvIGF2b2lkIGNhbGxpbmcgbWF4X3JlZ19udW0gZWFjaCBpdGVyYXRpb24KCW9mIHRoZSBsb29wLgoJKGxvYWRfbWVtc19hbmRfcmVjb3VudF9sb29wX3JlZ3Nfc2V0KTogTGlrZXdpc2UuCgoJKiBpMzg2LmMgKHByaW50X29wZXJhbmQpOiBSZW1vdmUgb2Jzb2xldGUgJ2MnIGRvY3MuCgpXZWQgQXVnIDI2IDE3OjEzOjM3IDE5OTggIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGd0aHIuaDogRG9jdW1lbnQgX19HVEhSRUFEX01VVEVYX0lOSVRfRlVOQ1RJT04uCgkqIGZyYW1lLmMgKGluaXRfb2JqZWN0X211dGV4KTogTmV3IGZ1bmN0aW9uLgoJKGluaXRfb2JqZWN0X211dGV4X29uY2UpOiBMaWtld2lzZS4KCShmaW5kX2ZkZSk6IENhbGwgaXQuCgkoX19yZWdpc3Rlcl9mcmFtZV9pbmZvKTogTGlrZXdpc2UuCgkoX19yZWdpc3Rlcl9mcmFtZV9pbmZvX3RhYmxlKTogTGlrZXdpc2UuCgkoX19kZXJlZ2lzdGVyX2ZyYW1lX2luZm8pOiBMaWtld2lzZS4KClRodSBBdWcgMjcgMTU6MTQ6MTggMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogaGFpZmEtc2NoZWQuYyAoc2NoZWRfYW5hbHl6ZV9pbnNuKTogRml4IHRoaW5rbyBpbiBsYXN0IGNoYW5nZS4KClRodSBBdWcgMjcgMTY6MzQ6NTEgMTk5OCAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGxvb3AuYyAoY2hlY2tfZGJyYV9sb29wKTogRW5hYmxlIGNvZGUgZm9yIHJldmVyc2FsCglvZiBzb21lIGxvb3BzIHdpdGhvdXQgYSBrbm93biBjb25zdGFudCBsb29wIGVuZC4KCldlZCBBdWcgMjYgMTg6Mzg6MTUgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGhhaWZhLXNjaGVkLmMgKGxhc3RfY2xvY2tfdmFyKTogTmV3LgoJKHNjaGVkdWxlX2Jsb2NrKTogSW5pdGlhbGl6ZSBpdC4KCShzY2hlZHVsZV9pbnNuKTogVXNlIGl0IHRvIGZpbGwgaW5zbiBtb2RlcyB3aXRoIGlzc3VlIGluZm9ybWF0aW9uLgoKCSogYWxwaGEuYyAoYWxwaGFfaGFuZGxlX3RyYXBfc2hhZG93cyk6IFJlbW92ZSBkby1ub3RoaW5nIGV4aXQuCglUYWcgdHJhcGIgYW5kIG5leHQgaW5zbiB3aXRoIFRJbW9kZS4KCShhbHBoYWV2NV9pbnNuX3BpcGUsIGFscGhhZXY1X25leHRfZ3JvdXAsIGFscGhhZXY1X2FsaWduX2luc25zKTogTmV3LgoJKGFscGhhX3Jlb3JnKTogQWRkIGNvbmRpdGlvbmFsIGZvciBhbHBoYV9oYW5kbGVfdHJhcF9zaGFkb3dzLgoJSW52b2tlIGFscGhhZXY1X2FsaWduX2luc25zIGFzIGFwcHJvcHJpYXRlLgoJKiBhbHBoYS5oIChMQUJFTF9BTElHTl9BRlRFUl9CQVJSSUVSKTogV2FzIEFMSUdOX0xBQkVMX0FGVEVSX0JBUlJJRVIuCgkoTURfU0NIRURfVkFSSUFCTEVfSVNTVUUpOiBOZXcuCgkqIGFscGhhLm1kIChhdHRyIHR5cGUpOiBBZGQgbXVsdGkuCgkoZGVmaW5lX2FzbV9hdHRyaWJ1dGVzKTogTmV3LgoJKHByb2xvZ3VlX3N0YWNrX3Byb2JlX2xvb3AsIGJ1aWx0aW5fc2V0am1wX3JlY2VpdmVyKTogU2V0IHR5cGUgbXVsdGkuCgkoYXJnX2hvbWUpOiBMaWtld2lzZS4KCShmbm9wLCB1bm9wLCByZWFsaWduKTogTmV3LgoKV2VkIEF1ZyAyNiAxNTo1NTo0MSAxOTk4ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBpcmlzNS5oIChQUkVGRVJSRURfREVCVUdHSU5HX1RZUEUpOiBVbmRlZi4KCSogaXJpczVnYXMuaCAoUFJFRkVSUkVEX0RFQlVHR0lOR19UWVBFKTogRGVmaW5lLgoKCSogY29uZmlndXJlLmluIChwb3dlcnBjLWlibS1haXg0LlsxMl0qKTogQ2hhbmdlIGZyb20gNC5bMTJdLiouCgkocnM2MDAwLWlibS1haXg0LlsxMl0qKTogTGlrZXdpc2UuCgkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KCldlZCBBdWcgMjYgMDk6MzA6NTkgMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9hcm0vdGh1bWIuYyAodGh1bWJfZXhpdCk6IERvIG5vdCBtb3ZlIGE0IGludG8gbHIgaWYgaXQKCWFscmVhZHkgY29udGFpbnMgdGhlIHJldHVybiBhZGRyZXNzLgoKV2VkIEF1ZyAyNiAxMjo1NzowOSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjYWxscy5jIChleHBhbmRfY2FsbCk6IFVzZSBiaXRmaWVsZCBpbnN0cnVjdGlvbnMgdG8gZXh0cmFjdC9kZXBvc2l0Cgl3b3JkIHNpemVkIGh1bmtzIHdoZW4gbG9hZGluZyB1bmFsaWduZWQgYXJncyBpbnRvIHJlZ2lzdGVycy4KCgkqIGhhaWZhLXNjaGVkLmMgKHNjaGVkX2FuYWx5emVfaW5zbik6IE9ubHkgY3JlYXRlIHNjaGVkdWxpbmcKCWJhcnJpZXJzIGZvciBMT09QLCBFSCBhbmQgU0VUSk1QIG5vdGVzIG9uIHRoZSBsb29wX25vdGVzIGxpc3QuCgoJKiBtbjEwMzAwLmggKFJUWF9DT1NUUyk6IEhhbmRsZSBVRElWIGFuZCBVTU9EIHRvby4KCldlZCBBdWcgMjYgMTY6MzU6MzcgMTk5OCAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGxvb3AuYyAoY2hlY2tfZGJyYV9sb29wKTogQWRkIHNvbWUgY29kZSB0aGF0IHdvdWxkIGFsbG93IHJldmVyc2FsCglvZiBzb21lIGxvb3BzIHdpdGhvdXQgYSBrbm93biBjb25zdGFudCBsb29wIGVuZCBpZiBpdCB3ZXJlIGVuYWJsZWQuCgpXZWQgQXVnIDI2IDExOjA4OjQ0IDE5OTggIEdhdmluIFJvbWlnLUtvY2ggIDxnYXZpbkBjeWdudXMuY29tPgoKCSogbWlwcy5tZCAobHNocnNpM19pbnRlcm5hbDIrMik6IEZpeCB0eXBlLW8uCgpXZWQgQXVnIDI2IDEwOjUzOjAzIDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIHN5c3RlbS5oOiBJbmNsdWRlIHN0ZGFyZy5oL3ZhcmFyZ3MuaCwgbWFrZSBzdXJlIHRoZXkgYXJlIG9yZGVyZWQKCWNvcnJlY3RseSB3aXRoIHJlZ2FyZHMgdG8gc3RkaW8uaC4KCgkqIGNhbGxzLmM6IFJlbW92ZSBzdGRhcmcuaC92YXJhcmdzLmguCgkqIGNjY3AuYzogTGlrZXdpc2UuCgkqIGNleHAueTogTGlrZXdpc2UuCgkqIGNvbWJpbmUuYzogTGlrZXdpc2UuCgkqIGNwcGVycm9yLmM6IExpa2V3aXNlLgoJKiBjcHBsaWIuYzogTGlrZXdpc2UuCgkqIGNwcGxpYi5oOiBMaWtld2lzZS4KCSogZG9wcmludC5jOiBMaWtld2lzZS4KCSogZW1pdC1ydGwuYzogTGlrZXdpc2UuCgkqIGZpbmFsLmM6IExpa2V3aXNlLgoJKiBmaXgtaGVhZGVyLmM6IExpa2V3aXNlLgoJKiBnY2MuYzogTGlrZXdpc2UuCgkqIGdlbmF0dHIuYzogTGlrZXdpc2UuCgkqIGdlbmF0dHJ0YWIuYzogTGlrZXdpc2UuCgkqIGdlbmNvZGVzLmM6IExpa2V3aXNlLgoJKiBnZW5jb25maWcuYzogTGlrZXdpc2UuCgkqIGdlbmVtaXQuYzogTGlrZXdpc2UuCgkqIGdlbmV4dHJhY3QuYzogTGlrZXdpc2UuCgkqIGdlbmZsYWdzLmM6IExpa2V3aXNlLgoJKiBnZW5vcGluaXQuYzogTGlrZXdpc2UuCgkqIGdlbm91dHB1dC5jOiBMaWtld2lzZS4KCSogZ2VucGVlcC5jOiBMaWtld2lzZS4KCSogZ2VucmVjb2cuYzogTGlrZXdpc2UuCgkqIG1pcHMtdGZpbGUuYzogTGlrZXdpc2UuCgkqIHByZWZpeC5jOiBMaWtld2lzZS4KCSogcHJvdG9pemUuYzogTGlrZXdpc2UuCgkqIHJlZ21vdmUuYzogTGlrZXdpc2UuCgkqIHRvcGxldi5jOiBMaWtld2lzZS4KCSogdHJlZS5jOiBMaWtld2lzZS4KCldlZCBBdWcgMjYgMDU6MDk6MjcgMTk5OCAgSmFrdWIgSmVsaW5layAgPGpqQHN1bnNpdGUubXMubWZmLmN1bmkuY3o+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMuYyAoc3BhcmNfb3ZlcnJpZGVfb3B0aW9ucyk6IElmIG5vdAoJVEFSR0VUX0ZQVSwgdHVybiBvZmYgVEFSR0VUX1ZJUy4KCSogY29uZmlnL3NwYXJjL3NwYXJjLmggKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCBuby12aXMuCgkoTEVHSVRJTUFURV9DT05TVEFOVF9QKTogQWxsb3cgU0YvREYgbW9kZSB6ZXJvIHdoZW4gVEFSR0VUX1ZJUy4KCSogY29uZmlnL3NwYXJjL3NwYXJjLm1kIChtb3ZzaV9pbnNuKTogVXNlIGZ6ZXJvcyBub3QgZnplcm8uCgkobW92ZGlfaW5zbl9zcDY0KTogQWRkIFZJUyBmemVybyBhbHRlcm5hdGl2ZS4KCShjbGVhcl9zZiwgY2xlYXJfZGYpOiBOZXcgVklTIHBhdHRlcm5zLgoJKG1vdnNmLCBtb3ZkZiBleHBhbmRlcnMpOiBBbGxvdyBmcF96ZXJvX29wZXJhbmQgZmxhdCBvdXQgd2hlbgoJVEFSR0VUX1ZJUy4KCShvbmVfY21wbGRpMl9zcDY0KTogUHJvdmlkZSBuZXcgZm5vdDEgVklTIGFsdGVybmF0aXZlLgoKVHVlIEF1ZyAyNSAxMDo1Nzo0MSAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogbG9vcC5jIChuX3RpbWVzX3NldCwgbl90aW1lc191c2VkLCBtYXlfbm90X29wdGltaXplLAoJcmVnX3NpbmdsZV91c2FnZSk6IENvbnZlcnQgdG8gdmFycmF5cy4gIEFsbCB1c2VzIGNoYW5nZWQuCgkoaW5zZXJ0X2xvb3BfbWVtKTogUmV0dXJuIGEgdmFsdWUuCgkoc2Nhbl9sb29wKTogVHdlYWsgQVZPSURfQ0NfTU9ERV9DT1BJRVMgY29kZS4KCShsb2FkX21lbXNfYW5kX3JlY291bnRfbG9vcF9yZWdzX3NldCk6IExpa2V3aXNlLiAgR3JvdyB0aGUgYXJyYXlzLCBpZgoJbmVjZXNzYXJ5LgoKVHVlIEF1ZyAyNSAyMzo1NzoxMiAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBGcm9tIEFsZXhhbmRyZToKCSogY29uZmlndXJlLmluOiBEbyBub3Qgc2V0IHRocmVhZF9maWxlIHRvICJpcml4IiBzaW5jZSBubyBzdWNoCglzdXBwb3J0IGV4aXN0cyB5ZXQuCgoJKiBzcGFyYy5tZCAoZmxvYXQgYWJzL25lZyBzcGxpdHMpOiBDaGVjayByZWxvYWRfY29tcGxldGVkIGJlZm9yZQoJY2FsbGluZyBhbHRlcl9zdWJyZWcuCgpUdWUgQXVnIDI1IDE5OjE3OjU5IDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLmMgKHNwYXJjX2Fic25lZ2Zsb2F0X3NwbGl0X2xlZ2l0aW1hdGUpOiBOZXcKCWZ1bmN0aW9uLgoJKiBjb25maWcvc3BhcmMvc3BhcmMuaDogRGVjbGFyZSBpdC4KCSogY29uZmlnL3NwYXJjL3NwYXJjLm1kIChmbG9hdCBhYnMvbmVnIHNwbGl0cyk6IFVzZSBpdC4KCShhbGwgb3RoZXIgc3BsaXRzKTogSGFuZGxlIFNVQlJFR3MgcHJvcGVybHkgd2hlcmUgbmVjZXNzYXJ5LgoJKHVubmFtZWQgKDE8PHgpLTEgVjhQTFVTIHBhdHRlcm4pOiBEaXNhYmxlIGZvciBub3cuCgpUdWUgQXVnIDI1IDE5OjQ4OjQ2IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHJlb3JnLmMgKGZpbGxfc2ltcGxlX2RlbGF5X3Nsb3RzKTogRG8gbm90IGFib3J0IGlmIHdlIGVuY291bnRlcgoJYW4gaW5zbiBvbiB0aGUgdW5maWxsZWRfc2xvdHNfbGlzdCB0aGF0IGhhcyBubyBkZWxheSBzbG90cy4KCShmaWxsX2VhZ2VyX2RlbGF5X3Nsb3RzKTogU2ltaWxhcmx5LgoKVHVlIEF1ZyAyNSAxMzozNToyMCAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL3Y4NTAvdjg1MC5jIChtb3ZzaV9zb3VyY2Vfb3BlcmFuZCk6IFRyZWF0IENPTlNUQU5UX1BfUlRYCglhcyBhbiBvcmRpbmFyeSBvcGVyYW5kLgoKVHVlIEF1ZyAyNSAxMjo1NDo1NyAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0cmVlLmMgKHZhbGlkX21hY2hpbmVfYXR0cmlidXRlKTogRG9uJ3QgYXBwbHkgYXR0cmlidXRlcyB0byBib3RoCglkZWNsIGFuZCB0eXBlLgoKVHVlIEF1ZyAyNSAxMjoyMzoyMCAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogcmVsb2FkLmMgKG9wZXJhbmRzX21hdGNoX3ApOiBIYW5kbGUgcnR2ZWNzLgoKCSogaTM4Ni5jIChsZWdpdGltYXRlX3BpY19hZGRyZXNzX2Rpc3BfcCk6IE5ldy4KCShsZWdpdGltYXRlX2FkZHJlc3NfcCk6IFVzZSBpdC4KCShsZWdpdGltaXplX3BpY19hZGRyZXNzKTogVXNlIHVuc3BlY3MgdG8gcmVwcmVzZW50IEBHT1QgYW5kIEBHT1RPRkYuCglIYW5kbGUgY29uc3RhbnQgcG9vbCBzeW1ib2xzIGp1c3QgbGlrZSBzdGF0aWNzLgoJKGVtaXRfcGljX21vdmUpOiBVc2UgUG1vZGUgbm90IFNJbW9kZSBmb3IgY2xhcml0eS4KCShvdXRwdXRfcGljX2FkZHJfY29uc3QpIFtTWU1CT0xfUkVGXTogUmVtb3ZlIEBHT1QgYW5kIEBHT1RPRkYgaGFja3MuCglbVU5TUEVDXTogTmV3LCBoYW5kbGluZyB3aGF0IHdlIGtpbGxlZCBhYm92ZS4KCVtQTFVTXTogRGV0ZWN0IGFuZCBhYm9ydCBvbiBpbnZhbGlkIHN5bWJvbCBhcml0aG1ldGljLgoJKiBpMzg2LmggKENPTlNUQU5UX0FERFJFU1NfUCk6IFJlbW92ZSBISUdILgoKVHVlIEF1ZyAyNSAxMjowMjoyMyAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogYWxpYXMuYzogSW5jbHVkZSBvdXRwdXQuaC4KCShESUZGRVJFTlRfQUxJQVNfU0VUU19QKTogRG9uJ3QgdHJlYXQgYWxpYXMgc2V0cyBhcwoJZGlmZmVyZW50IGlmIHdlJ3JlIGluIGEgdmFyYXJncyBmdW5jdGlvbi4KCSogTWFrZWZpbGUuaW4gKGFsaWFzLm8pOiBEZXBlbmQgb24gb3V0cHV0LmgKClR1ZSBBdWcgMjUgMTk6MjA6MTIgMTk5OCAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHNoLmggKEdJVl9TT1JUX0NSSVRFUklPTik6IERlbGV0ZS4KClR1ZSBBdWcgMjUgMTM6MTk6NDYgMTk5OCAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKCSogcmVnY2xhc3MuYyAocmVnY2xhc3MpOiBVc2UgeG1hbGxvYy9mcmVlIGluc3RlYWQgb2YgYWxsb2NhLgoJKiBzdHVwaWQuYyAoc3R1cGlkX2xpZmVfYW5hbHlzaXMpOiBMaWtld2lzZS4KCSogcmVsb2FkMS5jIChyZWxvYWQpOiBMaWtld2lzZS4KClR1ZSBBdWcgMjUgMDU6NDg6MTggMTk5OCAgSmFrdWIgSmVsaW5layAgPGpqQHN1bnNpdGUubXMubWZmLmN1bmkuY3o+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMuYyAoYXJpdGhfNDA5Nl9vcGVyYW5kLCBhcml0aF9hZGRfb3BlcmFuZCwKCWFyaXRoX2RvdWJsZV80MDk2X29wZXJhbmQsIGFyaXRoX2RvdWJsZV9hZGRfb3BlcmFuZCk6IE5ldwoJcHJlZGljYXRlcy4KCSogY29uZmlnL3NwYXJjL3NwYXJjLmggKFBSRURJQ0FURV9DT0RFUyk6IEFkZCB0aGVtLCBkZWNsYXJlIHRoZW0uCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5tZCAoYWRkZGkzLCBhZGRzaTMsIHN1YmRpMywgc3Vic2kzKTogVXNlCgl0aGVtIHRvIHRyYW5zZm9ybSBhZGQvc3ViIDQwOTYgaW50byBhZGQvc3ViIC00MDk2LgoKTW9uIEF1ZyAyNCAyMzozMTowMyAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGxvb3AuYyAoc2Nhbl9sb29wKTogQWxsb2NhdGUgc29tZSBzbG9wIHRvIGhhbmRsZSBwc2V1ZG9zCglnZW5lcmF0ZWQgYnkgbW92ZV9tb3ZhYmxlcy4KCShsb2FkX21lbXNfYW5kX3JlY291bnRfbG9vcF9yZWdzX3NldCk6IEhvbm9yIEFWT0lEX0NDX01PREVfQ09QSUVTCgloZXJlIHRvby4KCk1vbiBBdWcgMjQgMTk6NDU6NDAgMTk5OCAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogdHJlZS5kZWYgKERFQ0xfUkVTVUxUKTogQ29ycmVjdCBkb2N1bWVudGF0aW9uLgoKVHVlIEF1ZyAyNSAwMToxNToyNyAxOTk4ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogcmVsb2FkMS5jIChyZWxvYWRfcmVnX2ZyZWVfYmVmb3JlX3ApOiBOZXcgYXJndW1lbnQgRVFVSVY7ICBDaGFuZ2VkCglhbGwgY2FsbGVycy4gIEFib3J0IGZvciBSRUxPQURfRk9SX0lOU04uICBSRUxPQURfRk9SX09VVEFERFJfQUREUjoKCWNvbmZsaWN0cyB3aWxsIGFsbCBSRUxPQURfRk9SX09VVFBVVCByZWxvYWRzLgoKCSogcmVsb2FkMS5jIChyZWxvYWRfY3NlX3JlZ3NfMSk6IFdoZW4gZGVsZXRpbmcgYSBuby1vcCBtb3ZlIHRoYXQKCWxvYWRzIHRoZSBmdW5jdGlvbiByZXN1bHQsIHN1YnN0aXR1dGUgd2l0aCBhIFVTRS4KCk1vbiBBdWcgMjQgMTU6MjA6MTkgMTk5OCAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogcnM2MDAwLmggKEdPX0lGX0xFR0lUSU1BVEVfQUREUkVTUyk6IFVzZSBUQVJHRVRfUE9XRVJQQzY0Cgl3aGVuIHRlc3RpbmcgTEVHSVRJTUFURV9JTkRFWEVEX0FERFJFU1NfUCBERm1vZGUgYW5kIERJbW9kZS4KCShMRUdJVElNSVpFX0FERFJFU1MpOiBVc2UgVEFSR0VUX1BPV0VSUEM2NCBmb3IgSU5ERVhFRCBmaXh1cC4KCSogcnM2MDAwLmMgKHByaW50X29wZXJhbmQsIGNhc2UgJ0wnKTogQWRkIFVOSVRTX1BFUl9XT1JELCBub3QgNC4KCShwcmludF9vcGVyYW5kLCBjYXNlcyAnTycgYW5kICdUJyk6IEZpeCB0eXBvcyBpbiBsb3NzYWdlIHN0cmluZ3MuCgkqIHJzNjAwMC5tZCAoZml4X3RydW5jZGZzaTJfc3RvcmUpOiBSZW1vdmUgJXcgZnJvbSBub24tQ09OU1RfSU5UCglvcGVyYW5kLgoJKG1vdmRmX3NvZnRmbG9hdDMyLCBtb3ZkZl9oYXJkZmxvYXQ2NCwgbW92ZGZfc29mdGZsb2F0NjQpOiBDaGFuZ2UKCSdvJyB0byAnbScgZm9yIEdQUiB2YXJpYW50IGNvbnN0cmFpbnRzLgoKTW9uIEF1ZyAyNCAxMDoyNTo0NiAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBsb29wLmMgKHNjYW5fbG9vcCk6IEhvbm9yIEFWT0lEX0NDX01PREVfQ09QSUVTLgoKCSogaDgzMDAuaCAoU1RSSVBfTkFNRV9FTkNPRElORyk6IEZpeCB0eXBvLgoKCSogc3BhcmMubWQgKFRGbW9kZSBzcGxpdHMpOiBVc2UgcmVnX292ZXJsYXBfbWVudGlvbmVkX3AgdG8gZGV0ZWN0Cgl3aGVuIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIG92ZXJsYXAuCgoJKiBzdG10LmMgKGVtaXRfY2FzZV9ub2Rlcyk6IENoYW5nZSBydHhfZnVuY3Rpb24gdG8gcnR4X2ZuIHRvIGF2b2lkCgljbGFzaCB3aXRoIGdsb2JhbCB0eXBlLgoKTW9uIEF1ZyAyNCAwMDo1Mzo1MyAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBmaXhpbmMuaXJpeDogQWRkIGN1cnNlcy5oIGhhbmRsaW5nIGZyb20gZml4aW5jLndyYXAuCgoJKiBjLWNvbW1vbi5jIChjb21iaW5lX3N0cmluZ3MpOiBBbHNvIHNldCBUUkVFX1JFQURPTkxZLgoJQ2hhbmdlIHdhcm5fd3JpdGVfc3RyaW5ncyB0byBmbGFnX2NvbnN0X3N0cmluZ3MuCgkqIGMtZGVjbC5jLCBjLXRyZWUuaDogTGlrZXdpc2UuCgpTdW4gQXVnIDIzIDE4OjM5OjExIDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLmMgKHNwYXJjX2VtaXRfc2V0X2NvbnN0MzIpOiBJZiBvdXRwdXR0aW5nIGEKCUNPTlNUX0lOVCwgbm90IGEgc3ltYm9saWMgcmVmZXJlbmNlLCBkb24ndCB1c2UgYSBISUdIL0xPX1NVTQoJc2VxdWVuY2UsIHVzZSBTRVQvSU9SIGluc3RlYWQgc28gQ1NFIGNhbiBzZWUgaXQuCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5tZCAobW92aGlfY29uc3Q2NF9zcGVjaWFsLAoJbW92c2lfY29uc3Q2NF9zcGVjaWFsKTogTmV3IHBhdHRlcm5zIG5lY2Vzc2l0YXRlZCBieSB0aGF0IGNoYW5nZS4KCShtb3ZoaV9oaWdoKTogUmVtb3ZlLgoJKG1vdmhpX2xvX3N1bSk6IENoYW5nZSB0byBtYXRjaCBhbiBJT1IuCgkobW92ZGZfaW5zbl9zcDMyKTogVGVzdCBUQVJHRVRfVjkgbm90IFRBUkdFVF9BUkNINjQuCgkobW92ZGZfaW5zbl92OW9ubHkpOiBOZXcgcGF0dGVybiBmb3Igd2hlbiBWOSBidXQgbm90IEFSQ0g2NC4KCShtb3ZkZl9pbnNuX3NwNjQpOiBUZXN0IGJvdGggVEFSR0VUX1Y5IGFuZCBUQVJHRVRfQVJDSDY0LgoJKG1vdmRmIHNwbGl0cyk6IEFsbG93IHdoZW4gbm90IFY5IG9yIHdoZW4gbm90IEFSQ0g2NCBhbmQgaW50ZWdlcgoJcmVnaXN0ZXJzIGFyZSBpbnZvbHZlZC4KCShzbmVzaV96ZXJvX2V4dGVuZCBzcGxpdCk6IFJlbW92ZSByZWxvYWRfY29tcGxldGVkIHRlc3QuCgkodW5uYW1lZCBwbHVzIGFuZCBtaW51cyB6ZXJvX2V4dGVuZCBzaWRpIHNwbGl0cyk6IEFkZCBpdC4KClN1biBBdWcgMjMgMTE6NTY6MDggMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGV4dGVuZC50ZXhpOiBSZW1vdmUgZGVzY3JpcHRpb24gb2YgZXh0ZW5zaW9uIHRvIGV4cGxpY2l0CglpbnN0YW50aWF0aW9uIHRoYXQgaXMgbm93IGVuZG9yc2VkIGJ5IHN0YW5kYXJkIEMrKy4KClN1biBBdWcgMjMgMDk6Mzk6MDkgMTk5OCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcGllcmRvbC5jb2JhbHRtaWNyby5jb20+CgoJKiBjb25maWcvYXJjL2FyYy5jIChhcmNfaW5pdGlhbGl6ZV9waWMpOiBSZW1vdmUuCgkqIGNvbmZpZy9hcmMvYXJjLmggKElOSVRJQUxJWkVfUElDKTogU2ltaWxhcmx5LCB0aGlzIHJvdXRpbmUgZG9lcwoJbm90aGluZyBvbiBhbnkgcGxhdGZvcm0gYW5kIGlzIGludm9rZWQgYnkgbm8tb25lLCBpdCBkb2VzIG5vdCBldmVuCglhcHBlYXIgaW4gdGhlIGRvY3VtZW50YXRpb24uCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5oIChJTklUSUFMSVpFX1BJQyk6IExpa2V3aXNlLgoJKiBjb25maWcvc3BhcmMvc3BhcmMuYyAoaW5pdGlhbGl6ZV9waWMpOiBMaWtld2lzZS4KCShmaW5kX2FkZHJfcmVnKTogUmVtb3ZlIHRoaXMgYXMgd2VsbCwgbm8gbG9uZ2VyIHJlZmVyZW5jZWQgYWZ0ZXIKCW15IHJld3JpdGUuCgpTdW4gQXVnIDIzIDAwOjE3OjE0IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHJlY29nLmMgKHZhbGlkYXRlX3JlcGxhY2VfcnR4X2dyb3VwKTogTmV3IGZ1bmN0aW9uLgoJKiByZWNvZy5oICh2YWxpZGF0ZV9yZXBsYWNlX3J0eF9ncm91cCk6IERlY2xhcmUgaXQuCgkqIHJlZ21vdmUuYyAob3B0aW1pemVfcmVnX2NvcHlfMyk6IElmIGFueSBzdWJzdGl0dXRpb24gZmFpbHMsIHRoZW4gdW5kbwoJdGhlIGVudGlyZSBncm91cCBvZiBzdWJzdGl0dXRpb25zLgoKU2F0IEF1ZyAyMiAyMzozMTowMCAxOTk4ICBLbGF1cy1HZW9yZyBBZGFtcyAgKEtsYXVzLUdlb3JnLkFkYW1zQGNoZW1pZS51bmkta2FybHNydWhlLmRlKQoKCSogbG9vcC5jIChsb2FkX21lbXMpOiBGaXggaW5pdGlhbGl6ZXJzLgoKRnJpIEF1ZyAyMSAyMzowNzo0NiAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5tZCAoVEZtb2RlIHNwbGl0cyk6IEhhbmRsZSBkZXN0aW5hdGlvbgoJcmVnaXN0ZXJzIGJlaW5nIHJlZmVyZW5jZWQgaW4gdGhlIGFkZHJlc3MgY29ycmVjdGx5LgoKCSogZXhwbWVkLmMgKG1ha2VfdHJlZSkgW0NPTlNUX0lOVF06IFNpZ24gZXh0ZW5kIGV2ZW4gaWYKCVRSRUVfVU5TSUdORUQsIHdoZW4gYml0c2l6ZSBvZiB0eXBlJ3MgbW9kZSBpcyBsYXJnZXIgdGhhbgoJSE9TVF9CSVRTX1BFUl9XSURFX0lOVC4KCkZyaSBBdWcgMjEgMTk6MzE6MzEgMTk5OCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiB0cmVlLmRlZiAoTEFCRUxFRF9CTE9DS19FWFBSLCBFWElUX0JMT0NLX0VYUFIpOiBOZXcgdHJlZSBub2Rlcy4KCSogdHJlZS5oIChMQUJFTEVEX0JMT0NLX0xBQkVMLCBMQUJFTEVEX0JMT0NLX0JPRFksCglFWElUX0JMT0NLX0xBQkVMRURfQkxPQ0ssIEVYSVRfQkxPQ0tfUkVUVVJOLCBMT09QX0VYUFJfQk9EWSk6IE5ldwoJbWFjcm9zLgoJKiBleHByLmMgKGV4cGFuZF9leHByKTogSGFuZGxlIExBQkVMRURfQkxPQ0tfRVhQUiBhbmQKCUVYSVRfQkxPQ0tfRVhQUi4KClRodSBBdWcgMjAgMTk6NDM6NDQgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogaDgzMDAuYyAoaDgzMDBfZW5jb2RlX2xhYmVsKTogVXNlICcmJyBmb3IgdGlueSBkYXRhIGl0ZW1zLgoJKiBoODMwMC5oIChUSU5ZX0RBVEFfTkFNRV9QKTogTGlrZXdpc2UuCgkoU1RSSVBfTkFNRV9FTkNPRElORyk6IEhhbmRsZSAnJicuCgoJKiBtbjEwMjAwLmggKFJFR19PS19GT1JfSU5ERVhfUCk6IERvIG5vdCBjaGVjayB0aGUgbW9kZSBvZiB0aGUKCXJlZ2lzdGVyIChpdCBjb3VsZCBiZSBhY2Nlc3NlZCB2aWEgYW4gb3V0ZXIgU1VCUkVHKS4KCShSRUdfT0tfRk9SX0JBU0VfUCk6IExpa2V3aXNlLgoJKEdPX0lGX0xFR0lUSU1BVEVfQUREUkVTUyk6IENvbnNpc3RlbnRseSB1c2UgUkVHTk9fT0tfRk9SX0JBU0VfUC4KCgkqIHJlbW92ZS5jIChvcHRpbWl6ZV9yZWdfY29weV8zKTogQWJvcnQgaW5zdGVhZCBvZiBzaWxlbnRseSBnZW5lcmF0aW5nCglib2d1cyBydGwuCgoJKiBqdW1wLmMgKHJ0eF9yZW51bWJlcmVkX2VxdWFsX3ApOiBEbyBub3QgY29uc2lkZXIgUExVUyBjb21tdXRhdGl2ZS4KClRodSBBdWcgMjAgMTc6MzU6MjAgMTk5OCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcGllcmRvbC5jb2JhbHRtaWNyby5jb20+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMubWQgKG1vdnRmX2luc25fc3AzMik6IEFsbCBtZW1vcnkgb3BlcmFuZHMKCW11c3QgYmUgb2Zmc2V0dGFibGUgc28gdGhlIHNwbGl0cyBjYW4gYmUgbWFkZS4KClRodSBBdWcgMjAgMTM6NTY6NTMgMTk5OCAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CgoJKiBjb25maWcvaTM4Ni93aW5udC5jOiBJbmNsdWRlIHN5c3RlbS5oLCBub3Qgc3RkaW8uaCB0byBnZXQKCXN5cy9wYXJhbS5oIHB1bGxlZCBpbiBiZWZvcmUgcnRsLmggaW4gY2FzZSB0aGUgc3lzdGVtIGRlZmluZXMgTUlOCglhbmQgTUFYLgoKVGh1IEF1ZyAyMCAxMzo0NDoyMCAxOTk4ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiByczYwMDAubWQgKG1vdnFpLCBtb3ZoaSk6IEFkZCBDT05TVEFOVF9QX1JUWC4KClRodSBBdWcgMjAgMTM6MTU6MTEgMTk5OCAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKCSogc3Rvci1sYXlvdXQuYyAobGF5b3V0X3R5cGUpOiBDb21wdXRlIFRZUEVfU0laRV9VTklUIGNvcnJlY3RseSBmb3IKCWFycmF5cyBvZiBiaXRzLgoJKiBjcHBsaWIuYyAoY3BwX2RlZmluZSk6IEhhbmRsZSBtYWNyb3Mgd2l0aCBwYXJhbWV0ZXJzLgoKV2VkIEF1ZyAxOSAyMTozMzoxOSAxOTk4ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiByczYwMDAuYyAocnM2MDAwX291dHB1dF9sb2FkX3RvY190YWJsZSk6IFVzZSBsZCBmb3IgNjQtYml0LgoJKG91dHB1dF90b2MpOiBVc2Ugc2luZ2xlIFRPQyBzbG90IG9yIGxsb25nIG1pbmltYWwtdG9jIGZvciBERm1vZGUKCWFuZCBESW1vZGUgNjQtYml0LiAgVXNlIGxsb25nIGZvciBtaW5pbWFsLXRvYyBTRm1vZGUgYW5kCglTWU1CT0xfUkVGIC8gTEFCRUxfUkVGIDY0LWJpdC4KCShvdXRwdXRfZnVuY3Rpb25fcHJvZmlsZXIpOiBVc2UgbGxvbmcgZm9yIHByb2ZpbGVyIGxhYmVsIGFuZCBsZCB0bwoJbG9hZCA2NC1iaXQgbGFiZWwgYWRkcmVzcy4KCldlZCBBdWcgMTkgMTc6NTI6MjcgMTk5OCAgTmljayBDbGlmdG9uICAobmlja2NAY3lnbnVzLmNvbSkKCgkqIGNvbmZpZy9hcm0vdGh1bWIubWQgKGV4dGVuZHFpc2kyX2luc24pOiBDb3BlIHdpdGggUkVHICsKCU9GRlNFVCBhZGRyZXNzaW5nLgoKV2VkIEF1ZyAxOSAxNDoxMzozMSAxOTk4ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KCldlZCBBdWcgMTkgMTM6MTA6MzAgMTk5OCAgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpXZWQgQXVnIDE5IDEzOjA2OjQ3IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNvbGxlY3QyLmMgKGV4dHJhY3RfaW5pdF9wcmlvcml0eSk6IFVzZSBhdG9pIGluc3RlYWQgb2Ygc3RydG91bC4KCldlZCBBdWcgMTkgMTM6NTE6MzUgMTk5OCAgSGFucy1QZXRlciBOaWxzc29uICA8aHBAYXhpcy5zZT4KCgkqIHRtLnRleGkgKE1pc2MpOiBGaXggdHlwbyAidGVoIi4KCgkqIHRtLnRleGkgKFBJQyk6IEZpeCB0eXBvICJQUElDIi4KCgkqIHRtLnRleGkgKENhbGxlciBTYXZlcyk6IFNheSB0aGF0IERFRkFVTFRfQ0FMTEVSX1NBVkVTIGhhcyBubwoJZWZmZWN0IHdoZW4gLU8yIGFuZCBoaWdoZXIuCgkqIGludm9rZS50ZXhpIChPcHRpbWl6ZSBPcHRpb25zKTogTGlrZXdpc2UgZm9yIC1mY2FsbGVyLXNhdmVzLgoKMTk5OC0wOC0xOSAgTWljaGFlbCBIYXllcyAgPG1pY2hhZWxoQG9uZ2FvbmdhLmNoY2guY3JpLm56PgoKCSogcmVnY2xhc3MuYzogQ2hhbmdlZCByZWdpc3RlciBzZXQgZG9jdW1lbnRhdGlvbiB0byBiZSBjb25zaXN0ZW50Cgl3aXRoIEdDQyBiZWhhdmlvci4KCgkqIGZpbmFsLmMgKGZpbmFsX3N0YXJ0X2Z1bmN0aW9uKTogUmVtb3ZlZCByZWR1bmRhbnQgdGVzdCBmb3IKCWNhbGxfZml4ZWRfcmVncy4KCldlZCBBdWcgMTkgMTM6Mjg6NDEgMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIHJ0bC5oIChydHhfZnVuY3Rpb24pOiBOZXcgdHlwZS4KCShmb3JfZWFjaF9ydHgpOiBOZXcgZnVuY3Rpb24uCgkqIHJ0bGFuYWwuYyAoZm9yX2VhY2hfcnR4KTogRGVmaW5lIGl0LgoKCSogcmVjb2cuYyAoY2hhbmdlX3QpOiBOZXcgdHlwZS4KCShjaGFuZ2Vfb2JqZWN0cywgY2hhbmdlX29sZF9jb2RlcywgY2hhbmdlX2xvY3MsIGNoYW5nZV9vbGRzKToKCVJlcGxhY2Ugd2l0aCAuLi4KCShjaGFuZ2VzKTogTmV3IHZhcmlhYmxlLgoJKHZhbGlkYXRlX2NoYW5nZSk6IER5bmFtaWNhbGx5IGFsbG9jYXRlIHJvb20gZm9yIG1vcmUgY2hhbmdlcywgaWYKCW5lY2Vzc2FyeS4gIFVzZXMgY2hhbmdlcyBhcnJheSBpbnN0ZWFkIG9mIGNoYW5nZV9vYmplY3RzLCBldGMuCgkoYXBwbHlfY2hhbmdlX2dyb3VwKTogVXNlIGNoYW5nZXMgYXJyYXkgaW5zdGVhZCBvZgoJY2hhbmdlX29iamVjdHMsIGV0Yy4KCgkqIGxvb3AuYyAobG9vcF9tZW1faW5mbyk6IE5ldyB0eXBlLgoJKGxvb3BfbWVtcyk6IE5ldyB2YXJpYWJsZS4KCShsb29wX21lbXNfaWR4KTogTGlrZXdpc2UuCgkobG9vb3BfbWVtc19hbGxvY2F0ZWQpOiBMaWtld2lzZS4KCShzY2FuX2xvb3ApOiBSZW1vdmUgbnJlZ3MgcGFyYW1ldGVyLgoJKG5leHRfaW5zbl9pbl9sb29wKTogTmV3IGZ1bmN0aW9uLgoJKGxvYWRfbWVtc19hbmRfcmVjb3VudF9sb29wX3JlZ3Nfc2V0KTogTGlrZXdpc2UuCgkobG9hZF9tZW1zKTogTGlrZXdpc2UuCgkoaW5zZXJ0X2xvb3BfbWVtKTogTGlrZXdpc2UuCgkocmVwbGFjZV9sb29wX21lbSk6IExpa2V3aXNlLgoJKHJlcGxhY2VfbGFiZWwpOiBMaWtld2lzZS4KCShJTlNOX0lOX1JBTkdFX1ApOiBOZXcgbWFjcm8uCgkobG9vcF9vcHRpbWl6ZSk6IERvbid0IHBhc3MgbWF4X3JlZ19udW0oKSB0byBzY2FuX2xvb3AuCgkoc2Nhbl9sb29wKTogUmVtb3ZlIG5yZWdzIHBhcmFtZXRlciwgY29tcHV0ZSBpdCBhZnRlciBhbnkgbmV3CglyZWdpc3RlcnMgYXJlIGNyZWF0ZWQgYnkgbG9hZF9tZW1zLiAgVXNlIElOU05fSU5fUkFOR0VfUCBhbmQKCW5leHRfaW5zbl9pbl9sb29wIHJhdGhlciB0aGFuIGV4cGFuZGluZyB0aGVtIGlubGluZS4gIENhbGwKCWxvYWRfbWVtcyB0byBsb2FkIG1lbW9yeSBpbnRvIHBzZXVkb3MsIGlmIGFwcHJvcHJpYXRlLgoJKHByZXNjYW5fbG9vcCk6IEZpZ3VyZSBvdXQgd2hldGhlciBvciBub3QgdGhlcmUgYXJlIGp1bXBzIGZyb20gdGhlCglsb29wIHRvIHRhcmdldHMgb3RoZXIgdGhhbiB0aGUgbGFiZWwgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZQoJbG9vcC4gIENhbGwgaW5zZXJ0X2xvb3BfbWVtIHRvIG5vdGljZSBhbGwgdGhlIE1FTXMgdXNlZCBpbiB0aGUKCWxvb3AsIGlmIGl0IGNvdWxkIGJlIHNhZmUgdG8gcHVsbCBNRU1zIGludG8gUkVHcyBmb3IgdGhlIGR1cmF0aW9uCglvZiB0aGUgbG9vcC4KCShzdHJlbmd0aF9yZWR1Y2UpOiBVc2UgbmV4dF9pbnNuX2luX2xvb3AuICBUd2VhayBjb21tZW50cy4KCldlZCBBdWcgMTkgMDg6Mjk6NDQgMTk5OCAgUmljaGFyZCBFYXJuc2hhdyAgKHJlYXJuc2hhQGFybS5jb20pCgoJKiBhcm0uYyAoYXJtX292ZXJyaWRlX29wdGlvbnMpOiBSZW1vdmUgbGllIGFib3V0IGlnbm9yaW5nIFBJQyBmbGFnLgoKV2VkIEF1ZyAxOSAwNzowODoxNSAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5jIChmaW5hbGl6ZV9waWMpOiBDaGVjayBmb3IgdGhlIGNvcnJlY3QKCW5vbmxvY2FsX2dvdG9fcmVjZWl2ZXIgVU5TUEVDIG51bWJlci4KCSogY29uZmlnL3NwYXJjL3NwYXJjLm1kIChub25sb2NhbF9nb3RvX3JlY2VpdmVyKTogQWRkIGNvbW1lbnQKCW1ha2luZyBub3RlIG9mIHRoaXMgZGVwZW5kZW5jeSBleGlzdGluZyBpbiBzcGFyYy5jLgoJKG5lZ3RmMl9ub3R2OSBzcGxpdCk6IEdpdmUgTkVHIFNGbW9kZS4KCShuZWdzZjIpOiBGaXggaW5zbiBvdXRwdXQgc3RyaW5nLgoKVHVlIEF1ZyAxOCAxMjo0MDoyNyAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYy1jb21tb24uYyAoZGVjbF9hdHRyaWJ1dGVzKTogSXNzdWUgYW4gZXJyb3IgaWYgdGhlIGFyZ3VtZW50Cgl0byBhbGlhcyBpcyBub3QgYSBzdHJpbmcuCgpUdWUgQXVnIDE4IDEwOjMzOjMwIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGhhaWZhLXNjaGVkLmMgKHNjaGVkX2FuYWx5emUpOiBQdXQgYWxsIEpVTVBfSU5TTnMgb24gdGhlIGxhc3QKCXBlbmRpbmcgbWVtb3J5IGZsdXNoIGxpc3QuCgoJKiBjb21iaW5lLmMgKGNhbl9jb21iaW5lX3ApOiBBbGxvdyBjb21iaW5pbmcgaW5zbnMgd2l0aCBSRUdfUkVUVkFMCglub3Rlcy4KCSh0cnlfY29tYmluZSk6IEFsbG93IGNvbWJpbmluZyBpbnNucyB3aXRoIFJFR19MSUJDQUxMIG5vdGVzLgoKCSogZXhwci5jIChlbWl0X2Jsb2NrX21vdmUpOiBEbyBub3QgY2FsbCBtZW1jcHkgYXMgYSBsaWJjYWxsCglpbnN0ZWFkIGJ1aWxkIHVwIGEgQ0FMTF9FWFBSIGFuZCBjYWxsIGl0IGxpa2UgYW55IG90aGVyCglmdW5jdGlvbi4KCShjbGVhcl9zdG9yYWdlKTogU2ltaWxhcmx5IGZvciBtZW1zZXQuCgoJKiByZWdtb3ZlLmMgKGZpeHVwX21hdGNoXzIpOiBEbyBub3QgY2FsbCByZWdfb3ZlcmxhcF9tZW50aW9uZWRfcAoJb24gbm90ZXMuCgoJKiBNYWtlZmlsZS5pbiAoY3BsdXMtZGVtLm8pOiBQcm92aWRlIGV4cGxpY2l0IHJ1bGVzIGZvciBidWlsZGluZwoJY3BsdXMtZGVtLm8uCgoJKiByZWdtb3ZlLmMgKG9wdGltaXplX3JlZ19jb3B5XzEpOiBVcGRhdGUgUkVHX05fQ0FMTFNfQ1JPU1NFRAoJYW5kIFJFR19MSVZFX0xFTkdUSCBhcyBzdWNjZXNzZnVsIHN1YnN0aXR1dGlvbnMgYXJlIG1hZGUuCgpUdWUgQXVnIDE4IDA3OjE1OjI3IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5jICh1bHRyYV9maW5kX3R5cGUpOiBBZGQgZW1wdHkgc2VtaWNvbG9uCglzdGF0ZW1lbnQgYWZ0ZXIgZW5kIG9mIGxvb3AgbGFiZWwuCgpUdWUgQXVnIDE4IDA3OjEzOjI3IDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLmMgKHVsdHJhX3R5cGVzX2F2YWlsKTogTmV3IHZhcmlhYmxlLgoJKHVsdHJhX2J1aWxkX3R5cGVzX2F2YWlsKTogTmV3IGZ1bmN0aW9uIHRvIHJlY29yZCBtYXNrIG9mIGluc24KCXR5cGVzIGluIHJlYWR5IGxpc3QgYXQgdGhpcyBjeWNsZS4KCSh1bHRyYXNwYXJjX3NjaGVkX3Jlb3JkZXIpOiBDYWxsIGl0LgoJKHVsdHJhX2ZpbmRfdHlwZSk6IFVzZSBpdCB0byBxdWlja2VuIHRoZSBzZWFyY2guICBBbHNvIHNpbXBsaWYKCWRlcGVuZGVuY3kgY2hlY2ssIGRvbid0IHVzZSBydHhfZXF1YWxfcCBiZWNhdXNlIHdlIGtub3cgZXhhY3RseQoJd2hhdCB3ZSBhcmUgbG9va2luZyBmb3IuCgpUdWUgQXVnIDE4IDAzOjIwOjUzIDE5OTggIFJpY2hhcmQgRWFybnNoYXcgIChyZWFybnNoYUBhcm0uY29tKQoKCSogYXJtLmggKFNFQ09OREFSWV9JTlBVVF9SRUxPQURfQ0xBU1MpOiBSZXR1cm4gTk9fUkVHUyBpZiBjb21waWxpbmcKCWZvciBhcmNoaXRlY3R1cmUgdjQuCgpNb24gQXVnIDE3IDIxOjI2OjM4IDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLm1kIChzbHR1LCBzZ2V1KTogRG9uJ3QgRkFJTCwgY2FsbAoJZ2VuX2NvbXBhcmVfcmVnLgoJKG1vdnNmX2NvbnN0X2ludHJlZywgbW92c2ZfY29uc3RfaGlnaCwgbW92c2ZfY29uc3RfbG8sCgltb3ZkZl9jb25zdF9pbnRyZWcgYW5kIGhlbHBlciBzcGxpdHMpOiBOZXcgcGF0dGVybnMgdG8gbW92ZSBmbG9hdAoJY29uc3RhbnRzIGludG8gaW50ZWdlciByZWdpc3RlcnMuCgkobmVndGYyLCBuZWdkZjIsIGFic3RmMiwgYWJzZGYyKTogUmV3b3JrIHVzaW5nIG5ldyBwYXR0ZXJucyBhbmQKCXNwbGl0cy4KCk1vbiBBdWcgMTcgMTE6NDY6MTkgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogRnJvbSBHcmFoYW0KCSogdHJlZS5jIChidWlsZF9pbmRleF90eXBlKTogQ29weSBUWVBFX1NJWkVfVU5JVCBmcm9tIHNpemV0eXBlCgl0byBpdHlwZS4KCSogYy1kZWNsLmMgKGZpbmlzaF9lbnVtKTogQ29weSBUWVBFX1NJWl9VTklUIGZyb20gZW51bXR5cGUgdG8gdGVtLgoKCSogcnM2MDAwLmMgKHNlY29uZGFyeV9yZWxvYWRfY2xhc3MpOiBGb3IgVEFSR0VUX0VMRiwgaW5kaWNhdGUgdGhhdAoJYSBCQVNFX1JFR1MgcmVnaXN0ZXIgaXMgbmVlZGVkIGFzIGFuIGludGVybWVkaWF0ZSB3aGVuIGNvcHlpbmcKCWEgc3ltYm9saWMgdmFsdWUgaW50byBhbnkgcmVnaXN0ZXIgY2xhc3Mgb3RoZXIgdGhhbiBCQVNFX1JFR1MuCgoJKiBleHByLmMgKG1vdmVfYnlfcGllY2VzKTogTm8gbG9uZ2VyIHN0YXRpYy4gIFJlbW92ZSBwcm90b3R5cGUuCgkqIHJ0bC5oIChtb3ZlX2J5X3BpZWNlcyk6IEFkZCBleHRlcm4gcHJvdG90eXBlLgoJKiBtaXBzLmMgKGV4cGFuZF9ibG9ja19tb3ZlKTogSGFuZGxlIGFsaWduZWQgc3RyYWlnaHQgbGluZSBjb3B5IGJ5CgljYWxsaW5nIG1vdmVfYnlfcGllY2VzLgoKCSogZXhwci5jIChleHBhbmRfZXhwcik6IEFsbG93IGFzc2lnbm1lbnRzIGZyb20gVEltb2RlIFBBUk1fREVDTHMKCWFuZCBWQVJfREVDTHMuCgpNb24gQXVnIDE3IDEwOjI4OjUyIDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBzdG10LmMgKGV4cGFuZF9lbmRfbG9vcCk6IFRpZHkuICBBbGxvdyB1bmNvbmRpdGlvbmFsCglqdW1wcyBvdXQgb2YgdGhlIGxvb3AgdG8gYmUgdHJlYXRlZCBhcyBwYXJ0IG9mIHRoZSBleGl0IHRlc3QuCgpNb24gQXVnIDE3IDEwOjA2OjExIDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCQkJICBKZWZmIExhdyAgPGxhd0BjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKGNwbHVzLWRlcC5vKTogVXNlIGNwbHVzLWRlbS5jIGZyb20gbGliaWJlcnR5LgoJKiBjcGx1cy1kZW0uYzogRGVsZXRlLgoKCSogTWFrZWZpbGUuaW4gKGZvbGQtY29uc3Qubyk6IERlcGVuZCBvbiAkKFJUTF9IKS4KCgkqIGZvbGQtY29uc3QuYzogSW5jbHVkZSBydGwuaCB0byBnZXQgdGhlIHByb3RvdHlwZSBmb3IKCWBzZXRfaWRlbnRpZmllcl9sb2NhbF92YWx1ZScuCgoJKiBsb29wLmMgKGV4cHJlc3NfZnJvbV8xKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBgdG1wJy4KCShjb21iaW5lX2dpdnMpOiBDYXN0IHRoZSBmaXJzdCBhcmd1bWVudCBvZiBiemVybyB0byBjaGFyICouCgoJKiB0b3BsZXYuYyAoZGlzcGxheV9oZWxwKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBgbG9va2luZ19mb3Jfc3RhcnQnLgoKCSogYy1kZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogUmVtb3ZlIHVubmVlZGVkICYuCgoJKiBhbHBoYS5oIChhbHBoYV9pbml0aWFsaXplX3RyYW1wb2xpbmUpOiBQcm92aWRlIHByb3RvdHlwZS4KCgkqIGV4Y2VwdC5jIChzZXRfZXhjZXB0aW9uX2xhbmdfY29kZSwgc2V0X2V4Y2VwdGlvbl92ZXJzaW9uX2NvZGUpOgoJQ2hhbmdlIHBhcmFtZXRlciBmcm9tIGBzaG9ydCcgdG8gYGludCcgdG8gYXZvaWQgdXNpbmcgYSBnY2MKCWV4dGVuc2lvbi4KCgkqIGV4Y2VwdC5oIChzZXRfZXhjZXB0aW9uX2xhbmdfY29kZSwgc2V0X2V4Y2VwdGlvbl92ZXJzaW9uX2NvZGUpOgoJTGlrZXdpc2UgZm9yIHByb3RvdHlwZXMuCgoJKiBmbG93LmMgKGNvdW50X3JlZ19yZWZlcmVuY2VzKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZXMgYHJlZ25vJwoJYW5kIGBpJy4KCgkqIGdjc2UuYyAoaGFzaF9zY2FuX2luc24pOiBEZWNsYXJlIHBhcmFtZXRlciBgaW5fbGliY2FsbF9ibG9jaycuCgoJKiBwcmVmaXguYyAodHJhbnNsYXRlX25hbWUpOiBDYXN0IHRoZSByZXN1bHQgb2YgYGFsbG9jYScuCgoJKiB2YXJyYXkuaCAoVkFSUkFZX0ZSRUUpOiBSZWltcGxlbWVudCBhcyBhIGBkby13aGlsZSgwKScgc3RhdGVtZW50LgoKTW9uIEF1ZyAxNyAwOToyMzo0MiAxOTk4ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5pbmZvcm1hdGlrLnVuaS1kb3J0bXVuZC5kZT4KCgkqIGNvbmZpZy9tNjhrL202OGsuYzogSW5jbHVkZSAic3lzdGVtLmgiIGluc3RlYWQgb2YgPHN0ZGlvLmg+LgoJSW5jbHVkZSAidG9wbGV2LmgiLgoJKHZhbGlkX2RiY2NfY29tcGFyaXNvbl9wKTogTWFyayBtb2RlIGFyZ3VtZW50IGFzIHVudXNlZC4KCShzeW1ib2xpY19vcGVyYW5kKTogTGlrZXdpc2UuCgkobGVnaXRpbWl6ZV9waWNfYWRkcmVzcyk6IExpa2V3aXNlLgoJKGNvbnN0X3VpbnQzMl9vcGVyYW5kKTogTGlrZXdpc2UuCgkoY29uc3Rfc2ludDMyX29wZXJhbmQpOiBMaWtld2lzZS4KCSogc2NoZWQuYyBbIUlOU05fU0NIRURVTElOR106IERlZmluZSBvbmx5IGR1bW15IGZ1bmN0aW9uCglzY2hlZHVsZV9pbnNucyBhbmQgY29tbWVudCBvdXQgcmVzdCBvZiBmaWxlLgoKCSogbTY4ay5jIChvdXRwdXRfbW92ZV9zaW1vZGVfY29uc3QpOiBVc2Ugc3VibCB0byBtb3ZlIGEgemVybyBpbnRvIGFuCglhZGRyZXNzIHJlZ2lzdGVyLgoJKG91dHB1dF9tb3ZlX1tocV1pbW9kZSk6IExpa2V3aXNlLgoKTW9uIEF1ZyAxNyAwOToxNTo0NyAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB0b3BsZXYuYyAobWFpbik6IEVuYWJsZSAtZnN0cmljdC1hbGlhc2luZyBmb3IgLU8yIGFuZCBhYm92ZS4KCSogaW52b2tlLnRleGk6IENvcnJlc3BvbmRpbmcgY2hhbmdlcy4KCk1vbiBBdWcgMTcgMDI6MDM6NTUgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHJlZ2NsYXNzLmMgKGFsbG9jYXRlX3JlZ19pbmZvKTogUmVzcGVjdCBNSU4gd2hlbiBjbGVhcmluZyBkYXRhLgoKU3VuIEF1ZyAxNiAxNzozNzowNiAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5jICh1bHRyYV9jb2RlX2Zyb21fbWFzaywKCXVsdHJhX2Ntb3ZlX3Jlc3VsdHNfcmVhZHlfcCwgdWx0cmFfZnBtb2RlX2NvbmZsaWN0X2V4aXN0cywKCXVsdHJhX2ZpbmRfdHlwZSwgdWx0cmFfc2NoZWR1bGVfaW5zbiwgdWx0cmFfZmx1c2hfcGlwZWxpbmUsCgl1bHRyYXNwYXJjX3NjaGVkX2luaXQsIHVsdHJhc3BhcmNfdmFyaWFibGVfaXNzdWUsCgl1bHRyYV9yZXNjYW5fcGlwZWxpbmVfc3RhdGUsIHVsdHJhc3BhcmNfc2NoZWRfcmVvcmRlcik6IE5ldwoJZnVuY3Rpb25zIHRvIGRlc2NyaWJlIFVsdHJhU1BBUkMgcGlwZWxpbmUgZXhhY3RseSB0byBIYWlmYS4KCSh1bHRyYXNwYXJjX2FkanVzdF9jb3N0KTogSW5kaWNhdGUgSU1VTCB0eXBlIGluc25zIGhhdmUgemVybyBjb3N0LAoJYXMgdGhlcmUgaXMgbm90aGluZyB0aGUgc2NoZWR1bGVyIGNhbiBkbyBhYm91dCBpdC4gIEluZGljYXRlIHRoYXQKCVJFR19ERVBfT1VUUFVUJ3MgY29sbGlkZS4gIEZpeHVwIGZvcm1hdHRpbmcuCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5oIChSVFhfQ09TVFMpOiBGaXh1cCBpbnRlZ2VyIG11bHRpcGx5IGFuZAoJZGl2aWRlIGNvc3RzIG9uIFVsdHJhIGZvciBESW1vZGUuCgkoTURfU0NIRURfSU5JVCwgTURfU0NIRURfUkVPUkRFUiwgTURfU0NIRURfVkFSSUFCTEVfSVNTVUUpOgoJRGVmaW5lLgoJKiBjb25maWcvc3BhcmMvc3BhcmMubWQgKGlldV91bm5hbWVkIGZ1bmN0aW9uIHVuaXQpOiBSZW5hbWUgdG8KCWlldU4gYW5kIGFkZCBjYWxsX25vX2RlbGF5X3Nsb3QgdG8gdHlwZSBsaXN0LgoJKGN0aSBmdW5jdGlvbiB1bml0KTogTmV3IHVuaXQgZm9yIGJyYW5jaGVzIG9uIFVsdHJhU1BBUkMuCgkoc3VieC9hZGR4IGluc25zKTogU2V0IHR5cGUgdG8gbWlzYy4KCShzaWRpIHplcm8vc2lnbiBleHRlbnNpb24gaW5zbnMgb24gYXJjaDY0KTogU2V0IHR5cGUgdG8gc2hpZnQuCgkoc2lnbl9leHRlbmRoaWRpMl9pbnNuKTogU2V0IHR5cGUgdG8gc2xvYWQuCgpTdW4gQXVnIDE2IDEzOjUyOjAwIDE5OTggIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIHJzNjAwMC5jIChyczYwMDBfc3RhY2tfaW5mbyk6IFVzZSBpZiA9PSAwIGZvciBzaXplcy4KCShvdXRwdXRfZXBpbG9nKTogVXNlIGlmICE9IDAgZm9yIG9mZnNldC4KCShyczYwMDBfZmF0YWxfYmFkX2FkZHJlc3MpOiBQcmVwYXJlIGZvciBJbnRsLgoJKiByczYwMDAuaCAocnM2MDAwX2ZhdGFsX2JhZF9hZGRyZXNzKTogRGVjbGFyZS4KCSogcnM2MDAwLm1kIChtb3ZzZmNjLCBtb3ZkZmNjKTogVXNlIGVsc2UgaWYuCgkoZWxmX2hpZ2gpOiBVc2Uge2xpdXxsaXN9LgoJKGVsZl9sb3cpOiBVc2Uge2NhbHxsYX0uICBSZW1vdmUgJWEgdGVtcGxhdGUgZnJvbSBvbGQgbW5lbW9uaWNzLgoJKG1vdnNpKTogVXNlIHJzNjAwMF9mYXRhbF9iYWRfYWRkcmVzcy4KClN1biBBdWcgMTYgMDE6NTM6MjEgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHJlbG9hZC5jIChmaW5kX2VxdWl2X3JlZyk6IFJlamVjdCBlcXVpdmFsZW5jZXMgc2VwYXJhdGVkCglieSBhIHZvbGF0aWxlIGluc3RydWN0aW9uLgoKU3VuIEF1ZyAxNiAwMDoyMTo0NCAxOTk4ICBGcmFueiBTaXJsICA8RnJhbnouU2lybC1rZXJuZWxAbGF1dGVyYmFjaC5jb20+CgoJKiByczYwMDAvbGludXguaCAoQ1BQX09TX0RFRkFVTFRfU1BFQyk6IERlZmluZS4KClNhdCBBdWcgMTUgMjA6NTE6MzUgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGFscGhhLm1kIChtb3ZzaWNjKTogRml4IG1vZGUgbWlzbWF0Y2guCgpTYXQgQXVnIDE1IDIwOjIyOjMzIDE5OTggIEguSi4gTHUgIChoamxAZ251Lm9yZykKCgkqIGNvbmZpZy9hbHBoYS9hbHBoYS5oIChBU01fT1VUUFVUX01JX1RIVU5LKTogSGFuZGxlIGFnZ3JlZ2F0ZWQKCXJldHVybiB0eXBlLgoJKiBjb25maWcvYWxwaGEvd2luLW50LmggKEFTTV9PVVRQVVRfTUlfVEhVTkspOiBMaWtld2lzZS4KClNhdCBBdWcgMTUgMDg6Mzk6NDkgMTk5OCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcGllcmRvbC5jb2JhbHRtaWNyby5jb20+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMubWQgKG1vdnNpX2xvX3N1bV9waWNfbGFiZWxfcmVnKTogUmVtb3ZlCgl3cml0ZS1vbmx5IG1vZGlmaWVyIGZyb20gb3BlcmFuZCAxIGNvbnN0cmFpbnQuCgpTYXQgQXVnIDE1IDA2OjI4OjE5IDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLmMgKHNwYXJjX2VtaXRfc2V0X2NvbnN0NjRfcXVpY2sxKTogSWYKCWVtaXR0aW5nIGEgWE9SIG9mIC0xIGF0IHRoZSBlbmQsIGVtaXQgYSBOT1QgaW5zdGVhZCBmb3IgY29tYmluZSdzCglzYWtlLgoJKHNwYXJjX2VtaXRfc2V0X2NvbnN0NjQpOiBMaWtld2lzZSwgYWxzbyB3aGVuIGNvbXB1dGluZyB0cmFpbGluZwoJYml0cyBkbyBub3QgbmVnYXRlIGxvd19iaXRzIGFuZCBtYWtlIGZhc3RfaW50IGFuIGludC4KCkZyaSBBdWcgMTQgMjE6MDc6MDMgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbG9vcC5jIChhZGRfbGFiZWxfbm90ZXMpOiBEbyBub3QgaWdub3JlIHJlZmVyZW5jZXMgdG8gbGFiZWxzCgliZWZvcmUgZGlzcGF0Y2ggdGFibGVzLiAgTWlycm9ycyBBcHIgOCBjaGFuZ2UgdG8gbWFya19qdW1wX2xhYmVsLgoJKiBnY3NlLmMgKGFkZF9sYWJlbF9ub3Rlcyk6IFNpbWlsYXJseS4KCgkqIHBhLmggKEFTTV9PVVRQVVRfTUlfVEhVTkspOiBTdHJpcCBuYW1lIGVuY29kaW5nLgoKCSogbTY4ay5tZCAoYWRkZGlfZGlsc2hyMzIpOiBPbmUgb2YgdGhlIG9wZXJhbmRzIG11c3QgYmUgYSByZWdpc3Rlci4KCShhZGRkaV9kaXNobDMyKTogU2ltaWxhcmx5LgoKRnJpIEF1ZyAxNCAxNDoxMjo1OSAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBpMzg2LmggKE1PREVTX1RJRUFCTEVfUCk6IFJlb3JnYW5pemUgdG8gc2h1dCB1cCB3YXJuaW5ncy4KCSogYWxpYXMuYyAobWVtcmVmc19jb25mbGljdF9wKTogQWRkIGJyYWNlcyB0byBzaHV0IHVwIHdhcm5pbmdzLgoJKiBjc2UuYyAoY3NlX2Jhc2ljX2Jsb2NrKTogQWRkIHBhcmVucyB0byBzaHV0IHVwIHdhcm5pbmdzLgoKRnJpIEF1ZyAxNCAxMjo1ODoyMSAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5jIChzcGFyY19lbWl0X3NldF9jb25zdDY0X3F1aWNrMiwKCXNwYXJjX2VtaXRfc2V0X2NvbnN0NjRfbG9uZ3dheSwgY29uc3Q2NF9pc18yaW5zbnMsCgljcmVhdGVfc2ltcGxlX2ZvY3VzX2JpdHMsIHNwYXJjX2VtaXRfc2V0X2NvbnN0NjQpOiBGaXggbW9yZSBidWdzCglpbiA2NC1iaXQgY29uc3RhbnQgZm9ybWF0aW9uLgoJKiBjb25maWcvc3BhcmMvc3BhcmMubWQgKHNuZXNpX3plcm9fZXh0ZW5kIHNwbGl0KTogR2VuZXJhdGUKCXJ0bCBmb3IgYWRkeCBub3Qgc3VieC4KCShkZWZpbmVfaW5zbiBtb3ZkaV9jb25zdDY0X3NwZWNpYWwpOiBNYWtlIGF2YWlsYWJsZSBldmVuIHdoZW4KCUhPU1RfQklUU19QRVJfV0lERV9JTlQgaXMgbm90IDY0LgoJKG1vdmRpX2xvX3N1bV9zcDY0X2NpbnQsIG1vdmRpX2hpZ2hfc3A2NF9jaW50KTogUmVtb3ZlLgoJKGxvc3VtX2RpX21lZGxvdywgc2V0aG0sIHNldGxvKTogTWFrZSBvcDIgc3ltYm9saWNfb3BlcmFuZC4KCShjbXBfc2lxaV90cnVuY19zZXQsIGNtcF9kaXFpX3RydW5jX3NldCk6IEVuY2Fwc3VsYXRlIGJvdGgKCWluc3RhbmNlcyBvZiBvcGVyYW5kIDEgaW5zaWRlIGEgUUkgc3VicmVnLgoJKHhvcmRpM19zcDY0X2RibCk6IFJlbW92ZSAnJScgY29uc3RyYWludCBmb3Igb3AxLgoJKG9uZV9jbXBsZGkyX3NwNjQpOiBGaXggb3V0cHV0IHN0cmluZy4KCShvbmVfY21wbHNpMl9ub3RfbGl2ZWcwKTogUmV3cml0ZSB0byByZW1vdmUgdW5uZWVkZWQgZXh0cmEKCWFsdGVybmF0aXZlIGNhc2UuCgkodW5uYW1lZCBhcmNoNjQgYXNoaWZ0IERJKTogVHJ1bmNhdGUgc2hpZnQgY291bnQgaWYgZ3JlYXRlciB0aGFuCgk2Mywgbm90IDMxLgoKRnJpIEF1ZyAxNCAyMTo1Mjo1MyAxOTk4ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogZXhwci5jIChzdG9yZV9leHByKTogRG9uJ3Qgb3B0aW1pemUgYXdheSBsb2FkLXN0b3JlIHBhaXIKCXdoZW4gZWl0aGVyIHNvdXJjZSBvciBkZXN0aW5hdGlvbiBoYXZlIGEgc2lkZSBlZmZlY3QuCgpGcmkgQXVnIDE0IDE2OjUwOjEwIDE5OTggIEpvaG4gQ2FyciAgPGpmY0BtaXQuZWR1PgoKCSogZ2VucmVjb2cuYyAoYWRkX3RvX3NlcXVlbmNlKTogRmF0YWwgZXJyb3IgaWYgdGhlIG1vZGVzIG9mIHRoZQoJb3BlcmFuZHMgb2YgU0VUIGFyZSBpbmNvbXBhdGlibGUuCgoJKiBhbHBoYS5tZDogRml4IG1heCBhbmQgbWluIHBhdHRlcm5zIHNvIG1vZGVzIG9mIFNFVCBvcGVyYW5kcyBtYXRjaC4KCkZyaSBBdWcgMTQgMTI6MjI6NTUgMTk5OCAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogY29uZmlndXJlLmluOiBBdm9pZCBbWyBieSB1c2luZyB0ZXN0IGFuZCBjaGFuZ2VxdW90ZS4KCSogY29uZmlndXJlOiBSZWJ1aWxkLgoKRnJpIEF1ZyAxNCAwMToyMjozMSAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIHJ0bC5kZWYgKENPTlNUQU5UX1BfUlRYKTogRml4IHR5cG8gaW4gc3RyaW5nIG5hbWUuCgoJKiBjb25maWcvc3BhcmMvc3BhcmMubWQgKHNlcWRpX3NwZWNpYWxfdHJ1bmMsIHNuZWRpX3NwZWNpYWxfdHJ1bmMsCglzZXFzaV9zcGVjaWFsX2V4dGVuZCwgc25lc2lfc3BlY2lhbF9leHRlbmQsIHNuZXNpX3plcm9fZXh0ZW5kIGFuZAoJc3BsaXQsIHNuZWRpX3plcm9fdHJ1bmMgYW5kIHNwbGl0LCBzZXFzaV96ZXJvX2V4dGVuZCBhbmQgc3BsaXQsCglzZXFkaV96ZXJvX3RydW5jIGFuZCBzcGxpdCwgcGljX2xvX3N1bV9kaSwgcGljX3NldGhpX2RpLAoJbW92ZGlfY2Nfc3A2NF90cnVuYywgbW92ZGlfY2NfcmVnX3NwNjRfdHJ1bmMsIGFkZHhfZXh0ZW5kX3NwMzIgYW5kCglzcGxpdCwgYWRkeF9leHRlbmRfc3A2NCwgc3VieF9leHRlbmRfc3A2NCwgc3VieF9leHRlbmQgYW5kIHNwbGl0KToKCUZpeCBtaXNtYXRjaGluZyBtb2RlcyBpbiBTRVQgb3BlcmFuZHMuCgkoY29uZGl0aW9uYWwgbW92ZSBwYXR0ZXJucyk6IEZpeCBmb3JtYXR0aW5nLgoJKHVubmFtZWQgc3VieCBhcmNoNjQgcGF0dGVybik6IFJlbW92ZSBkdXBsaWNhdGUgaW5zbi4KCkZyaSBBdWcgMTQgMDA6MzQ6MzQgMTk5OCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcGllcmRvbC5jb2JhbHRtaWNyby5jb20+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMuYyAoY29uc3Q2NF9vcGVyYW5kLCBjb25zdDY0X2hpZ2hfb3BlcmFuZCk6CglHZXQgaXQgcmlnaHQgd2hlbiBIT1NUX0JJVFNfUEVSX1dJREVfSU5UIGlzIG5vdCA2NC4KCShpbnB1dF9vcGVyYW5kKTogRml4dXAgdGVzdCBmb3Igd2hhdCB3ZSBhY2NlcHQgZm9yIGNvbnN0YW50CglpbnRlZ2Vycy4KCShzcGFyY19lbWl0X3NldF9jb25zdDMyLCBzcGFyY19lbWl0X3NldF9zeW1ib2xpY19jb25zdDY0KTogR2l2ZQoJc2V0IFZPSURtb2RlLgoJKHNhZmVfY29uc3RESSk6IFJlbW92ZS4KCShzcGFyY19lbWl0X3NldF9zYWZlX0hJR0g2NCwgZ2VuX3NhZmVfU0VUNjQsIGdlbl9zYWZlX09SNjQsCglnZW5fc2FmZV9YT1I2NCk6IE5ldyBmdW5jdGlvbnMuCgkoc3BhcmNfZW1pdF9zZXRfY29uc3Q2NF9xdWljazEsIHNwYXJjX2VtaXRfc2V0X2NvbnN0NjRfcXVpY2syLAoJc3BhcmNfZW1pdF9zZXRfY29uc3Q2NF9sb25nd2F5LCBzcGFyY19lbWl0X3NldF9jb25zdDY0KTogVXNlCgl0aGVtLgoJKiBjb25maWcvc3BhcmMvc3BhcmMubWQgKGRlZmluZV9pbnNuIHhvcmRpM19zcDY0X2RibCk6IE9ubHkgbWFrZQoJYXZhaWxhYmxlIHdoZW4gSE9TVF9CSVRTX1BFUl9XSURFX0lOVCBpcyBub3QgNjQuCgkoZGVmaW5lX2luc24gbW92ZGlfc3A2NF9kYmwsIG1vdmRpX2NvbnN0NjRfc3BlY2lhbCk6IExpa2V3aXNlIGFuZAoJbW92ZSBiZWZvcmUgbW92ZGlfaW5zbl9zcDY0IHBhdHRlcm4uCgkoZGVmaW5lX2luc24gbW92ZGlfbG9fc3VtX3NwNjRfZGJsLCBtb3ZkaV9oaWdoX3NwNjRfZGJsKTogUmVtb3ZlLgoJKGRlZmluZV9pbnNuIHNldGhpX2RpX21lZGxvdywgc2V0aDQ0LCBzZXRtNDQsIHNldGhoKTogVXNlCglzeW1ib2xpY19vcGVyYW5kIGFzIHByZWRpY2F0ZSBmb3Igc2Vjb25kIG9wZXJhbmQuCgkoREltb2RlIG1pbnVzIHNwbGl0IG9uIGFyY2gzMiwgbmVnc2kyIGV4cGFuZGVyLCBvbmVfY21wbHNpMgoJZXhwYW5kZXIpOiBHaXZlIHNldCBWT0lEbW9kZS4KCkZyaSBBdWcgMTQgMDE6NDU6MDYgMTk5OCAgTXVtaXQgS2hhbiAgPGtoYW5AeHJheWxpdGgud2lzYy5lZHU+CgoJKiBpMzg2L2N5Z3dpbjMyIChERUZBVUxUX1BDQ19TVFJVQ1RfUkVUVVJOKTogRGVmaW5lLgoKRnJpIEF1ZyAxNCAwMTo0MDoyMSAxOTk4ICBHZW9mZnJleSBLZWF0aW5nICA8Z2VvZmZrQG96ZW1haWwuY29tLmF1PgoKCSogcnM2MDAwL2xpbnV4LmggKExJTktfU1BFQyk6IFBhc3MgLUcgYXJncyB0byB0aGUgbGlua2VyLgoKRnJpIEF1ZyAxNCAwMToyMzoyMyAxOTk4ICBSaWNoYXJkIEVhcm5zaGF3ICAocmVhcm5zaGFAYXJtLmNvbSkKCgkqIGFybS9uZXRic2QuaCAoVEFSR0VUX0RFRkFVTFQpOiBEZWZhdWx0IGluY2x1ZGVzIHNvZnR3YXJlIGZsb2F0aW5nCglwb2ludC4KCShDUFBfRkxPQVRfREVGQVVMVF9TUEVDKTogUmUtZGVmaW5lIGFjY29yZGluZ2x5LgoKRnJpIEF1ZyAxNCAwMToxOTowOCAxOTk4ICBSb2JlcnQgTGlwZSAgPHJvYmVydGxAZGdpaS5jb20+CgoJKiBpbnN0YWxsLnRleGk6IFZhcmlvdXMgU0NPIE9wZW5TZXJ2ZXIgdHdlYWtzLgoKVGh1IEF1ZyAxMyAyMDoxNDo0MCAxOTk4ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiByZWxvYWQxLmMgKGVsaW1pbmF0ZV9yZWdzX2luX2luc24pOiBIYW5kbGUgYW5vdGhlciBjYXNlIHdoZW4KCWVsaW1pbmF0aW5nIHRoZSBmcmFtZSBwb2ludGVyIHRvIHRoZSBoYXJkIGZyYW1lIHBvaW50ZXIuICBBZGQKCW1pc3NpbmcJZXAtPnRvX3J0eCBjaGVjayB0byBvbmUgZXhpc3RpbmcgY2FzZS4KCgkqIG1pcHMvbWlwcy5tZCAobW92aGlfaW50ZXJuYWwyKzIpOiBGaXggdHlwbyBtZW06U0kgLT4gbWVtOkhJLgoKVGh1IEF1ZyAxMyAxNzowODoxMSAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0cmVlLmg6IERlLWNvbmRpdGlvbmFsaXplIGluaXRfcHJpb3JpdHkgY29kZS4KCgkqIG1pcHMuaCAoTk1fRkxBR1MpOiBDaGFuZ2UgZnJvbSAtQnAgdG8gLUJuLgoJKiBjb2xsZWN0Mi5jIChOTV9GTEFHUyk6IENoYW5nZSBmcm9tIC1wIHRvIC1uLgoKCSogY29uZmlndXJlLmluOiBUdXJuIG9uIGNvbGxlY3QyIGZvciBtaXBzdHgzOS1lbGYuCglIYW5kbGUgdXNlX2NvbGxlY3QyPW5vIHByb3Blcmx5LgoKCSogYy1jb21tb24uYzogRGUtY29uZGl0aW9uYWxpemUgaW5pdF9wcmlvcml0eSBjb2RlLgoJKiBjb2xsZWN0Mi5jIChleHRyYWN0X2luaXRfcHJpb3JpdHksIHNvcnRfaWRzKTogTmV3IGZucy4KCShtYWluKTogQ2FsbCBzb3J0X2lkcy4KCU1vdmUgc2VxdWVuY2VfbnVtYmVyIHRvIGZpbGUgc2NvcGUuCgoJKiBjb25maWd1cmUuaW46IEhhbmRsZSAtLWVuYWJsZS1pbml0LXByaW9yaXR5LgoJKiBjLWNvbW1vbi5jIChhdHRycyk6IEFkZCBBX0lOSVRfUFJJT1JJVFkuCgkoaW5pdF9hdHRyaWJ1dGVzLCBkZWNsX2F0dHJpYnV0ZXMpOiBMaWtld2lzZS4KCSogdHJlZS5oIChERUZBVUxUX0lOSVRfUFJJT1JJVFksIE1BWF9JTklUX1BSSU9SSVRZKTogTmV3IG1hY3Jvcy4KCSogdHJlZS5jIChnZXRfZmlsZV9mdW5jdGlvbl9uYW1lX2xvbmcpOiBTcGxpdCBvdXQuLi4KCShnZXRfZmlsZV9mdW5jdGlvbl9uYW1lKTogLi4uZnJvbSBoZXJlLgoKVGh1IEF1ZyAxMyAxNjowOTo1MyAxOTk4ICBNYXJ0aW4gdm9uIExvZXdpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIGV4cHIuYyAoc2FmZV9mcm9tX3ApOiBDaGFuZ2UgY29kZSB0byBFUlJPUl9NQVJLIG9ubHkgd2hlbiBub3QKCWFjY2Vzc2luZyBub2Rlcy4KClRodSBBdWcgMTMgMTU6MjQ6NDggMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdG9wbGV2LmMgKGRpc3BsYXlfaGVscCk6IEFkZCBicmFjZXMgdG8gc2h1dCB1cCB3YXJuaW5ncy4KCSogdHJlZS5jIChzaW1wbGVfY3N0X2VxdWFsKTogTGlrZXdpc2UuCgoJKiBmb2xkLWNvbnN0LmMgKG5vbl9sdmFsdWUpOiBEb24ndCBkZWFsIHdpdGggbnVsbCBwb2ludGVyCgljb25zdGFudHMgaGVyZS4KCShmb2xkLCBjYXNlIENPTVBPVU5EX0VYUFIpOiBXcmFwIGEgY29uc3RhbnQgMCBpbiBhIE5PUF9FWFBSLgoKCSogYy10eXBlY2suYyAoaW5pdGlhbGl6ZXJfY29uc3RhbnRfdmFsaWRfcCk6IEFsbG93IGNvbnZlcnNpb24gb2YgMAoJb2YgYW55IHNpemUgdG8gYSBwb2ludGVyLgoKVGh1IEF1ZyAxMyAxMjo1MzoxMyAxOTk4ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBpMzg2L3dpbm50LmMgKGkzODZfcGVfYXNtX2ZpbGVfZW5kKTogQ2hlY2sgVFJFRV9TWU1CT0xfUkVGRVJFTkNFRC4KCldlZCBBdWcgMTIgMTc6MjU6MTggMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbW4xMDMwMC5jIChSRUdfU0FWRV9CWVRFUyk6IE9ubHkgcmVzZXJ2ZSBzcGFjZSBmb3IgcmVnaXN0ZXJzCgl3aGljaCB3aWxsIGJlIHNhdmVkLgoJKiBtbjEwMzAwLm1kIChwcm9sb2d1ZSBpbnNuKTogT25seSBzYXZlIHJlZ2lzdGVycyB3aGljaCBuZWVkIHNhdmluZy4KCShlcGlsb2d1ZSBpbnNuKTogU2ltaWxhcmx5LgoKCSogbW4xMDMwMC5jLCBtbjEwMzAwLmgsIG1uMTAzMDAubWQ6IFJlbW92ZSAiZ2xvYmFsIHplcm8gcmVnaXN0ZXIiCglvcHRpbWl6YXRpb25zLgoKV2VkIEF1ZyAxMiAxMjozOToxNiAxOTk4ICBHYXZpbiBSb21pZy1Lb2NoICA8Z2F2aW5AY3lnbnVzLmNvbT4KCgkqIG1pcHMvbWlwcy5oIChFTkNPREVfU0VDVElPTl9JTkZPKTogU2V0IFNZTUJPTF9SRUZfRkxBRyBmb3IKCVZBUl9ERUNMJ3MgaW4gZ3AgYWRkcmVzc2FibGUgc2VjdGlvbnMuCgpUdWUgQXVnIDExIDIzOjAyOjMxIDE5OTggIEpvaG4gQ2FyciAgPGpmY0BtaXQuZWR1PgoKCSogc3BhcmMuYzogQ2hhbmdlIHJldHVybiA8ZXhwPiB0byA8ZXhwPjsgcmV0dXJuOyBpbiBmdW5jdGlvbnMKCXJldHVybmluZyB2b2lkLgoJKiBzcGFyYy5tZDogQWRkIGVtcHR5IHNlbWljb2xvbiBzdGF0ZW1lbnQgYWZ0ZXIgZmluYWwgbGFiZWwgaW4KCW1vdmUgZXhwYW5kZXJzLgoKVHVlIEF1ZyAxMSAyMjo0MjowMSAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5tZCAoZGVmaW5lX2luc24gYWRkeF9leHRlbmQpOiBSZW5hbWUgdG8KCWFkZHhfZXh0ZW5kX3NwNjQsIG9ubHkgYWxsb3cgd2hlbiBUQVJHRVRfQVJDSDY0LgoJKGRlZmluZV9pbnNuIGFkZHhfZXh0ZW5kX3NwMzIgYW5kIHNwbGl0KTogVmVyc2lvbiB0aGF0IHdvcmtzIHdoZW4KCW5vdCBUQVJHRVRfQVJDSDY0LgoJKGRlZmluZV9pbnNuIHN1YnhfZXh0ZW5kKTogTGlrZXdpc2UuCgkoZGVmaW5lX3NwbGl0IGFkZGRpMyBhbmQgc3ViZGkzIHdpdGggemVybyBleHRlbnNpb24pOiBGaXh1cCBhbmQKCWNvcnJlY3QgYnVncyB3aGVuIG5vdCBUQVJHRVRfQVJDSDY0LgoKVHVlIEF1ZyAxMSAxNjowNDozNCAxOTk4ICBKb2huIENhcnIgIDxqZmNAbWl0LmVkdT4KCgkqIGV4Y2VwdC5jIChzZXRfZXhjZXB0aW9uX2xhbmdfY29kZSwgc2V0X2V4Y2VwdGlvbl92ZXJzaW9uX2NvZGUpOgoJVXNlIHByb3RvdHlwZS1zdHlsZSBkZWZpbml0aW9uIGlmIF9fU1REQ19fLCB0byBtYXRjaCBkZWNsYXJhdGlvbgoJaW4gZXhjZXB0LmguCgoJKiBnZW5lbWl0LmM6IENoYW5nZSBGQUlMIGFuZCBET05FIG1hY3JvcyBub3QgdG8gdXNlIGxvb3BzLgoKVHVlIEF1ZyAxMSAxMjoyNzowMyAxOTk4ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBkd2FyZjJvdXQuYyAoQVNNX09VVFBVVF9EV0FSRl9BRERSX0NPTlNUKTogVXNlCglBU01fT1VUUFVUX0RXQVJGMl9BRERSX0NPTlNUIGlmIGRlZmluZWQuCgoJKiBtaXBzL21pcHMubWQgKHJlbG9hZF9vdXRzaSk6IFVzZSBNMTZfUkVHX1Agd2hlbiBUQVJHRVRfTUlQUzE2LgoKVHVlIEF1ZyAxMSAxODoxMjo1MyAxOTk4ICBEYXZlIExvdmUgIDxkLmxvdmVAZGwuYWMudWs+CgoJKiBSRUFETUUuZzc3OiBVcGRhdGUgZnJvbSBDcmFpZy4KClR1ZSBBdWcgMTEgMDQ6NDY6MDEgMTk5OCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcGllcmRvbC5jb2JhbHRtaWNyby5jb20+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMuYyAoc3BhcmNfZW1pdF9zZXRfY29uc3QzMik6IElOVFZBTCBpcyBvZgoJdHlwZSBIT1NUX1dJREVfSU5ULgoJKHNhZmVfY29uc3RESSBzcGFyY19lbWl0X3NldF9jb25zdDY0X3F1aWNrMSwKCXNwYXJjX2VtaXRfc2V0X2NvbnN0NjRfcXVpY2syLCBzcGFyY19lbWl0X3NldF9jb25zdDY0X2xvbmd3YXksCglhbmFseXplXzY0Yml0X2NvbnN0YW50LCBjb25zdDY0X2lzXzJpbnNucywKCWNyZWF0ZV9zaW1wbGVfZm9jdXNfYml0cyk6IEZpeCBzb21lIGJ1Z3Mgd2hlbiBjb21waWxlZCBvbiByZWFsCgk2NC1iaXQgaG9zdHMuCgkoZnVuY3Rpb25fYXJnX3JlY29yZF92YWx1ZV8zLCBmdW5jdGlvbl9hcmdfcmVjb3JkX3ZhbHVlXzIsCglmdW5jdGlvbl9hcmdfcmVjb3JkX3ZhbHVlKTogQWRkIGZ1bGx5IHByb3RvdHlwZWQgZm9yd2FyZCBkZWNscy4KCSogY29uZmlnL3NwYXJjL3NwYXJjLm1kIChkZWZpbmVfaW5zbiBjbXBzaV9pbnNuX3NwMzIpOiBSZW5hbWUgYmFjawoJdG8gY21wc2lfaW5zbiBhbmQgdXNlIG9uIGJvdGggNjQgYW5kIDMyIGJpdCB0YXJnZXRzLgoJKGRlZmluZV9pbnNuIGNtcHNpX2luc25fc3A2NCk6IFJlbW92ZS4KCShkZWZpbmVfZXhwYW5kIHplcm9fZXh0ZW5kc2lkaTIpOiBBbGxvdyBmb3IgMzItYml0IHRhcmdldCB0b28uCgkoZGVmaW5lX2luc24gemVyb19leHRlbmRzaWRpMl9pbnNuKTogUmVuYW1lIHRvCgl6ZXJvX2V4dGVuZHNpZGkyX2luc25fc3A2NC4KCShkZWZpbmVfaW5zbiB6ZXJvX2V4dGVuZHNpZGkyX2luc25fc3AzMik6IE5ldyBwYXR0ZXJuIGFuZAoJYXNzb2NpYXRlZCBmb3JjZWQgc3BsaXQgZm9yIGl0LgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLmMgKGNvbnN0NjRfb3BlcmFuZCwgY29uc3Q2NF9oaWdoX29wZXJhbmQpOgoJTmV3IHByZWRpY2F0ZXMuCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5oOiBEZWNsYXJlIHRoZW0uCgkoUFJFRElDQVRFX0NPREVTKTogQWRkIHRoZW0uCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5tZCAobW92ZGlfbG9fc3VtX3NwNjRfZGJsLAoJbW92ZGlfaGlnaF9zcDY0X2RibCwgeG9yZGkzX3NwNjRfZGJsKTogVXNlIHRoZW0uCgpNb24gQXVnIDEwIDIyOjU3OjI0IDE5OTggIEpvaG4gQ2FyciAgPGpmY0BtaXQuZWR1PgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLm1kIChkZWZpbmVfaW5zbiBqdW1wKTogT3V0cHV0IGJhLHB0IG5vdCBiLHB0CglpbiB2OSBjYXNlIGFzIHRoZSBsYXR0ZXIgbWFrZXMgdGhlIFNvbGFyaXMgYXNzZW1ibGVyIGNyYXNoLgoKTW9uIEF1ZyAxMCAyMjozOTowOSAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5jIChpbnB1dF9vcGVyYW5kKTogRG8gbm90IGFjY2VwdCBhIExPX1NVTSBNRU0KCWZvciBURm1vZGUgd2hlbiAhdjkuICBXZSByZXF1aXJlIG9mZnNldHRhYmxlIG1lbW9yeSBhZGRyZXNzZXMuCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5oIChBTFRFUl9IQVJEX1NVQlJFRyk6IEhhbmRsZSBURm1vZGUgdG8KCURGbW9kZSByZWdpc3RlciBudW1iZXIgY29udmVyc2lvbnMuCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5tZCAoZGVmaW5lX3NwbGl0IERGbW9kZSBtb3Zlcyk6IElmIHJlZ2lzdGVyCglpcyBhIFNVQlJFRyBkbyBhbHRlcl9zdWJyZWcgb24gaXQgYmVmb3JlIHVzaW5nLgoJKGRlZmluZV9leHBhbmQgbW92dGYpOiBGaXh1cCBjb21tZW50IGFib3V0IGFsaWdubWVudCBvbiB2OS4KCShkZWZpbmVfc3BsaXQgVEZtb2RlIG1vdmVzKTogRG9uJ3QgdXNlIGdlbl97aGlnaCxsb3d9cGFydCwgY3JlYXRlCglleHBsaWNpdCBTVUJSRUdzIGluc3RlYWQuCgpNb24gQXVnIDEwIDE5OjAyOjU1IDE5OTggIEpvaG4gQ2FyciAgPGpmY0BtaXQuZWR1PgoKCSogTWFrZWZpbGUuaW4gKG1iY2hhci5vKTogRGVwZW5kIG9uIG1iY2hhci5jLgoKTW9uIEF1ZyAxMCAwNDoyODoxMyAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCQkJICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCVJld3JpdGUgU3BhcmMgYmFja2VuZCBmb3IgYmV0dGVyIGNvZGUgZ2VuZXJhdGlvbiBhbmQKCWltcHJvdmVkIHNwYXJjNjQgc3VwcG9ydC4KCSogY29uZmlnL3NwYXJjL3NwNjQtZWxmLmg6IFNldCBKVU1QX1RBQkxFU19JTl9URVhUX1NFQ1RJT04gdG8KCXplcm8uCgkqIGNvbmZpZy9zcGFyYy9zeXN2NC5oOiBMaWtld2lzZS4KCSogY29uZmlnL3NwYXJjL3NwYXJjLmMgKHY4cGx1c19yZWdjbXBfcCwgc3BhcmNfb3BlcmFuZCwKCW1vdmVfb3BlcmFuZCwgdjhwbHVzX3JlZ2NtcF9vcCwgZW1pdF9tb3ZlX3NlcXVlbmNlLAoJc2luZ2xlbW92ZV9zdHJpbmcsIGRvdWJsZW1vdmVfc3RyaW5nLCBtZW1fYWxpZ25lZF84LAoJb3V0cHV0X21vdmVfZG91YmxlLCBvdXRwdXRfbW92ZV9xdWFkLCBvdXRwdXRfZnBfbW92ZV9kb3VibGUsCgltb3ZlX3F1YWRfZGlyZWN0aW9uLCBvdXRwdXRfZnBfbW92ZV9xdWFkLCBvdXRwdXRfc2NjX2luc24pOgoJUmVtb3ZlLgoJKHNtYWxsX2ludF9vcl9kb3VibGUpOiBOZXcgcHJlZGljYXRlLgoJKGdlbl9jb21wYXJlX3JlZyk6IFJlbW92ZSBUQVJHRVRfVjhQTFVTIGNtcGRpX3Y4cGx1cyBlbWlzc2lvbi4KCShsZWdpdGltaXplX3BpY19hZGRyZXNzKTogRW1pdCBtb3ZzaV97aGlnaCxsb19zdW19X3BpYyBpbnN0ZWFkIG9mCglvbGQgcGljX3tzZXRoaSxsb19zdW19X3NpIHBhdHRlcm5zLgoJKG1lbV9taW5fYWxpZ25tZW50KTogTmV3IGdlbmVyaWMgZnVuY3Rpb24gdG8gcmVwbGFjZQoJbWVtX2FsaWduZWRfOCwgd2hpY2ggdXNlcyBSRUdOT19QT0lOVEVSX0FMSUdOIGluZm9ybWF0aW9uIHdoZW4KCWF2YWlsYWJsZSBhbmQgY2FuIHRlc3QgZm9yIGFyYml0cmFyeSBhbGlnbm1lbnRzLiAgQWxsIGNhbGxlcnMKCWNoYW5nZWQuCgkoc2F2ZV9yZWdzLCByZXN0b3JlX3JlZ3MsIGJ1aWxkX2JpZ19udW1iZXIsCglvdXRwdXRfZnVuY3Rpb25fcHJvbG9ndWUsIG91dHB1dF9jYnJhbmNoLCBvdXRwdXRfcmV0dXJuLAoJc3BhcmNfZmxhdF9zYXZlX3Jlc3RvcmUsIHNwYXJjX2ZsYXRfb3V0cHV0X2Z1bmN0aW9uX3Byb2xvZ3VlLAoJc3BhcmNfZmxhdF9vdXRwdXRfZnVuY3Rpb25fZXBpbG9ndWUpOiBQcmV0dGlmeQoJaW5zbiBvdXRwdXQuCgkob3V0cHV0X2Z1bmN0aW9uX2VwaWxvZ3VlKTogTGlrZXdpc2UgYW5kIGFkZCBjb2RlIHRvIG91dHB1dAoJZGVmZXJyZWQgY2FzZSB2ZWN0b3JzLgoJKG91dHB1dF92OWJyYW5jaCk6IExpa2V3aXNlLCBhZGQgbmV3IGFyZyBJTlNOIGFuZCB1c2UgaXQgdG8gdGFjawoJb24gYnJhbmNoIHByZWRpY3Rpb24gc2V0dGluZ3MuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgoJKHByaW50X29wZXJhbmQpOiBMaWtld2lzZSBhbmQgb3V0cHV0ICVsNDQgZm9yIExPX1NVTXMgd2hlbgoJVEFSR0VUX0NNX01FRE1JRC4KCShzcGFyY19zcGxpdGRpX2xlZ2l0aW1hdGUpOiBOZXcgZnVuY3Rpb24gdG8gbWFrZSBzdXJlIERJbW9kZQoJc3BsaXRzIGNhbiBiZSBydW4gcHJvcGVybHkgd2hlbiAhYXJjaDY0LgoJKHNwYXJjX2luaXRpYWxpemVfdHJhbXBvbGluZSwgc3BhcmM2NF9pbml0aWFsaXplX3RyYW1wb2xpbmUpOgoJUmVmb3JtYXQgZXhhbXBsZSBjb2RlIGluIGNvbW1lbnRzLgoJKHNldF9leHRlbmRzKTogUmVtb3ZlIFVOU1BFQy92OHBsdXNfY2xlYXJfaGlnaCBjYXNlLgoJKHNwYXJjX2FkZHJfZGlmZl9saXN0LCBzcGFyY19hZGRyX2xpc3QpOiBOZXcgc3RhdGljcyB0byBrZWVwIHRyYWNrCglvZiBkZWZlcnJlZCBjYXNlIHZlY3RvcnMgd2UgbmVlZCB0byBvdXRwdXQuCgkoc3BhcmNfZGVmZXJfY2FzZV92ZWN0b3IpOiBSZWNvcmQgYSBjYXNlIHZlY3Rvci4KCShzcGFyY19vdXRwdXRfYWRkcl92ZWMsIHNwYXJjX291dHB1dF9hZGRyX2RpZmZfdmVjLAoJc3BhcmNfb3V0cHV0X2RlZmVycmVkX2Nhc2VfdmVjdG9ycyk6IE5ldyBmdW5jdGlvbnMgdG8gb3V0cHV0IHRoZW0uCgkoc3BhcmNfZW1pdF9zZXRfY29uc3QzMik6IE5ldyBmdW5jdGlvbiB0byBmb3JtIDMyLWJpdCBjb25zdGFudHMgaW4KCXJlZ2lzdGVycyB3aGVuIHRoYXQgcmVxdWlyZXMgbW9yZSB0aGFuIG9uZSBpbnN0cnVjdGlvbi4KCShzYWZlX2NvbnN0REksIHNwYXJjX2VtaXRfc2V0X2NvbnN0NjRfcXVpY2sxLAoJc3BhcmNfZW1pdF9zZXRfY29uc3Q2NF9xdWljazIsIHNwYXJjX2VtaXRfc2V0X2NvbnN0NjRfbG9uZ3dheSwKCWFuYWx5emVfNjRiaXRfY29uc3RhbnQsIGNvbnN0NjRfaXNfMmluc25zLAoJY3JlYXRlX3NpbXBsZV9mb2N1c19iaXRzLCBzcGFyY19lbWl0X3NldF9jb25zdDY0KTogTmV3IGZ1bmN0aW9ucwoJd2hpY2ggZG8gdGhlIHNhbWUgZm9yIDY0LWJpdCBjb25zdGFudHMgd2hlbiBhcmNoNjQuCgkoc3BhcmNfZW1pdF9zZXRfc3ltYm9saWNfY29uc3Q2NCk6IE5ldyBmdW5jdGlvbiB0byBlbWl0IGFkZHJlc3MKCWxvYWRpbmcgZm9yIGFsbCBjb2RlIG1vZGVscyBvbiB2OS4KCSogY29uZmlnL3NwYXJjL3NwYXJjLmggKENPTkRJVElPTkFMX1JFR0lTVEVSX1VTQUdFKTogRG8gbm90IG1ha2UKCSVnMSBmaXhlZCB3aGVuIGFyY2g2NCwgdW5maXggJWcwIHdoZW4gVEFSR0VUX0xJVkVfRzAuCgkoQUxURVJfSEFSRF9TVUJSRUcpOiBGaXggdGhpbmtvLCByZXR1cm4gUkVHTk8gKyAxIG5vdCAxLgoJKFNFQ09OREFSWV9JTlBVVF9SRUxPQURfQ0xBU1MsIFNFQ09OREFSWV9PVVRQVVRfUkVMT0FEX0NMQVNTKTogRml4CglpbmFjY3VyYWNpZXMgaW4gY29tbWVudHMsIGFkZCBzeW1ib2xpYyBhbmQgdGV4dF9zZWdtZW50IG9wZXJhbmRzCgl3aGVuIFRBUkdFVF9DTV9NRURBTlkgYW5kIFRBUkdFVF9DTV9FTUJNRURBTlkgcmVzcGVjdGl2ZWx5LiAgVXNlCglHRU5FUkFMX1JFR1MgaW4gdGhlc2UgY2FzZXMgYXMgYSB0ZW1wIFJFRyBpcyBuZWVkZWQgdG8gbG9hZCB0aGVzZQoJYWRkcmVzc2VzIGludG8gYSByZWdpc3RlciBwcm9wZXJseS4KCShFWFRSQV9DT05TVFJBSU5UKTogRG9jdW1lbnQgbW9yZSBhY2N1cmF0ZWx5LCByZW1vdmUgUSBjYXNlIGFzIGl0CglpcyBubyBsb25nZXIgdXNlZC4KCShHT19JRl9MRUdJVElNQVRFX0FERFJFU1MpOiBBbGxvdyBURm1vZGUgZm9yIExPX1NVTSBvbiB2OSBzaW5jZSBmcAoJcXVhZHMgYXJlIGd1YXJhbnRlZWQgdG8gaGF2ZSAxNi1ieXRlIGFsaWdubWVudC4KCShMRUdJVElNSVpFX0FERFJFU1MpOiBGb3IgU1lNQk9MX1JFRiwgQ09OU1QsIGFuZCBMQUJFTF9SRUYgdXNlCgljb3B5X3RvX3N1Z2dlc3RlZF9yZWcgaW5zdGVhZCBvZiBleHBsaWNpdCBMT19TVU0gYW5kIEhJR0guCgkoQVNNX09VVFBVVF9BRERSX1ZFQywgQVNNX09VVFBVVF9BRERSX0RJRkZfVkVDKTogTmV3IG1hY3JvcyBmb3IKCWRlZmVycmVkIGNhc2UgdmVjdG9yIGltcGxlbWVudGF0aW9uLgoJKEFTTV9PVVRQVVRfQUREUl9WRUNfRUxUKTogVXNlIGZwdXRjIHRvIG91dHB1dCBuZXdsaW5lLgoJKEFTTV9PVVRQVVRfQUREUl9ESUZGX0VMVCk6IFBhcmVudGhlc2l6ZSBMQUJFTCBpbiBtYWNybyBjYWxscy4KCUdlbmVyYXRlICJpbnRlcm5hbCBsYWJlbCAtIGxhYmVsIiBpbnN0ZWFkIG9mICJsYWJlbCAtIDFiIi4KCShQUklOVF9PUEVSQU5EX0FERFJFU1MpOiBGb3IgTE9fU1VNIHVzZSAlbDQ0IG9uIFRBUkdFVF9DTV9NRURNSUQuCgkoUFJFRElDQVRFX0NPREVTKTogUmVtb3ZlIHNwYXJjX29wZXJhbmQsIG1vdmVfb3BlcmFuZCwKCXY4cGx1c19yZWdjbXBfb3AuICBBZGQgc21hbGxfaW50X29yX2RvdWJsZSwgaW5wdXRfb3BlcmFuZCwgYW5kCgl6ZXJvX29wZXJhbmQuCgkoZG91YmxlbW92ZV9zdHJpbmcsIG91dHB1dF9ibG9ja19tb3ZlLCBvdXRwdXRfZnBfbW92ZV9kb3VibGUsCglvdXRwdXRfZnBfbW92ZV9xdWFkLCBvdXRwdXRfbW92ZV9kb3VibGUsIG91dHB1dF9tb3ZlX3F1YWQsCglvdXRwdXRfc2NjX2luc24sIHNpbmdsZW1vdmVfc3RyaW5nLCBtZW1fYWxpZ25lZF84LCBtb3ZlX29wZXJhbmQsCglzcGFyY19vcGVyYW5kLCB2OHBsdXNfcmVnY21wX29wLCB2OHBsdXNfcmVnY21wX3ApOiBSZW1vdmUgZXh0ZXJucy4KCShzcGFyY19lbWl0X3NldF9jb25zdDMyLCBzcGFyY19lbWl0X3NldF9jb25zdDY0LAoJc3BhcmNfZW1pdF9zZXRfc3ltYm9saWNfY29uc3Q2NCwgaW5wdXRfb3BlcmFuZCwgemVyb19vcGVyYW5kLAoJbWVtX21pbl9hbGlnbm1lbnQsIHNtYWxsX2ludF9vcl9kb3VibGUpOiBBZGQgZXh0ZXJucy4KCSogY29uZmlnL3NwYXJjL3NwYXJjLm1kOiBEb2N1bWVudCB0aGUgbWFueSB1c2VzIG9mIFVOU1BFQyBhbmQKCVVOU1BFQ19WT0xBVElMRSBpbiB0aGlzIGJhY2tlbmQuCgkoZGVmaW5lX2Z1bmN0aW9uX3VuaXQgaWV1KTogUmVuYW1lIHRvIGlldV91bm5hbWVkLiAgQWRkIG1vdmUgYW5kCgl1bmFyeSB0byB0eXBlcyB3aGljaCBleGVjdXRlIGluIGl0LgoJKGRlZmluZV9mdW5jdGlvbl91bml0IGlldV9zaGlmdCk6IFJlbmFtZSB0byBpZXUwLgoJKGRlZmluZV9mdW5jdGlvbl91bml0IGlldTEpOiBOZXcsIGV4ZWN1dGVzIGNvbXBhcmUsIGNhbGwsIGFuZAoJdW5jb25kX2JyYW5jaCB0eXBlIGluc25zLgoJKGRlZmluZV9mdW5jdGlvbl91bml0cyBmb3IgdHlwZSBmZGl2cywgZmRpdmQsIGZzcXJ0KTogVGhlc2UKCWV4ZWN1dGUgaW4gdGhlIGZwdSBtdWx0aXBseSB1bml0IG5vdCB0aGUgYWRkZXIgb24gVWx0cmFTcGFyYy4KCShkZWZpbmVfZXhwYW5kIGNtcGRpKTogRGlzYWxsb3cgVEFSR0VUX1Y4UExVUy4KCShkZWZpbmVfaW5zbiBjbXBzaV9pbnNuKTogUmVuYW1lIHRvIGNtcHNpX2luc25fc3AzMi4KCShkZWZpbmVfaW5zbiBjbXBzaV9pbnNuX3NwNjQpOiBOZXcsIHNhbWUgYXMgc3AzMiB2YXJpYW50IGV4Y2VwdCBpdAoJYWxsb3dzIHRoZSBhcml0aF9kb3VibGVfb3BlcmFuZCBwcmVkaWNhdGUgYW5kIHJISSBjb25zdHJhaW50IHdoZW4KCVRBUkdFVF9BUkNINjQuCgkoZGVmaW5lX2luc24gY21wZGlfc3A2NCwgY21wc2ZfZnBlLCBjbXBkZl9mcGUsIGNtcHRmX2ZwZSwKCWNtcHNmX2ZwLCBjbXBkZl9mcCwgY21wdGZfZnAsIHNsdHVfaW5zbiwgbmVnX3NsdHVfaW5zbiwKCW5lZ19zbHR1X21pbnV4X3gsIG5lZ19zbHR1X3BsdXNfeCwgc2dldV9pbnNuLCBuZWdfc2dldV9pbnNuLAoJc2x0dV9wbHVzX3gsIHNsdHVfcGx1c194LCBzbHR1X3BsdXNfeF9wbHVzX3ksIHhfbWludXNfc2x0dSwKCXNnZXVfcGx1c194LCB4X21pbnVzX3NnZXUsIG1vdnFpX2NjX3NwNjQsIG1vdmhpX2NjX3NwNjQsCgltb3ZzaV9jY19zcDY0LCBtb3ZkaV9jY19zcDY0LCBtb3ZzZl9jY19zcDY0LCBtb3ZkZl9jY19zcDY0LAoJbW92dGZfY2Nfc3A2NCwgbW92cWlfY2NfcmVnX3NwNjQsIG1vdmhpX2NjX3JlZ19zcDY0LAoJbW92c2lfY2NfcmVnX3NwNjQsIG1vdmRpX2NjX3JlZ19zcDY0LCBtb3ZzZl9jY19yZWdfc3A2NCwKCW1vdmRmX2NjX3JlZ19zcDY0LCBtb3Z0Zl9jY19yZWdfc3A2NCwgemVyb19leHRlbmRoaXNpMl9pbnNuLAoJY21wX3NpcWlfdHJ1bmMsIGNtcF9zaXFpX3RydW5jX3NldCwgc2lnbl9leHRlbmRoaXNpMl9pbnNuLAoJc2lnbl9leHRlbmRxaWhpMl9pbnNuLCBzaWduX2V4dGVuZHFpc2kyX2luc24sCglzaWduX2V4dGVuZHFpZGkyX2luc24sIHNpZ25fZXh0ZW5kaGlkaTJfaW5zbiwKCWV4dGVuZHNmZGYyLCBleHRlbmRzZnRmMiwgZXh0ZW5kZGZ0ZjIsIHRydW5jZGZzZjIsIHRydW5jdGZzZjIsCgl0cnVuY3RmZGYyLCBmbG9hdHNpc2YyLCBmbG9hdHNpZGYyLCBmbG9hdHNpdGYyLCBmbG9hdGRpc2YyLAoJZmxvYXRkaWRmMiwgZmxvYXRkaXRmMiwgZml4X3RydW5jc2ZzaTIsIGZpeF90cnVuY2Rmc2kyLAoJZml4X3RydW5jdGZzaTIsIGZpeF90cnVuY3NmZGkyLCBmaXhfdHJ1bmNkZmRpMiwgZml4X3RydW5jdGZkaTIsCglhZGRkaTNfc3A2NCwgYWRkc2kzLCBjbXBfY2N4X3BsdXMsIGNtcF9jY19wbHVzX3NldCwgc3ViZGlfc3A2NCwKCXN1YnNpMywgY21wX21pbnVzX2NjeCwgY21wX21pbnVzX2NjeF9zZXQsIG11bHNpMywgbXVsZGkzLAoJbXVsZGkzX3Y4cGx1cywgY21wX211bF9zZXQsIG11bHNpZGkzLCBtdWxzaWRpM192OHBsdXMsCgljb25zdF9tdWxzaWRpM192OHBsdXMsIG11bHNpZGkzX3NwMzIsIGNvbnN0X211bHNpZGkzLAoJc211bHNpM19oaWdocGFydF92OHBsdXMsIHVubmFtZWQgc3VicmVnIG11bHQsCgljb25zdF9zbXVsc2kzX2hpZ2hwYXJ0X3Y4cGx1cywgc211bHNpM19oaWdocGFydF9zcDMyLAoJY29uc3Rfc211bHNpM19oaWdocGFydCwgdW11bHNpZGkzX3Y4cGx1cywgdW11bHNpZGkzX3NwMzIsCgljb25zdF91bXVsc2lkaTMsIGNvbnN0X3VtdWxzaWRpM192OHBsdXMsIHVtdWxzaTNfaGlnaHBhcnRfdjhwbHVzLAoJY29uc3RfdW11bHNpM19oaWdocGFydF92OHBsdXMsIHVtdWxzaTNfaGlnaHBhcnRfc3AzMiwKCWNvbnN0X3VtdWxzaTNfaGlnaHBhcnQsIGRpdnNpMywgZGl2ZGkzLCBjbXBfc2Rpdl9jY19zZXQsIHVkaXZzaTMsCgl1ZGl2ZGkzLCBjbXBfdWRpdl9jY19zZXQsIHNtYWNzaSwgc21hY2RpLCB1bWFjZGksIGFuZGRpM19zcDY0LAoJYW5kc2kzLCBhbmRfbm90X2RpX3NwNjQsIGFuZF9ub3Rfc2ksIGlvcmRpM19zcDY0LCBpb3JzaTMsCglvcl9ub3RfZGlfc3A2NCwgb3Jfbm90X3NpLCB4b3JkaTNfc3A2NCwgeG9yc2kzLCB4b3Jfbm90X2RpX3NwNjQsCgl4b3Jfbm90X3NpLCBjbXBfY2NfYXJpdGhfb3AsIGNtcF9jY3hfYXJpdGhfb3AsCgljbXBfY2NfYXJpdGhfb3Bfc2V0LCBjbXBfY2N4X2FyaXRoX29wX3NldCwgY21wX2NjeF94b3Jfbm90LAoJY21wX2NjX3hvcl9ub3Rfc2V0LCBjbXBfY2N4X3hvcl9ub3Rfc2V0LCBjbXBfY2NfYXJpdGhfb3Bfbm90LAoJY21wX2NjeF9hcml0aF9vcF9ub3QsIGNtcF9jY19hcml0aF9vcF9ub3Rfc2V0LAoJY21wX2NjeF9hcml0aF9vcF9ub3Rfc2V0LCBuZWdkaTJfc3A2NCwgY21wX2NjX25lZywgY21wX2NjeF9uZWcsCgljbXBfY2Nfc2V0X25lZywgY21wX2NjeF9zZXRfbmVnLCBvbmVfY21wbGRpMl9zcDY0LCBjbXBfY2Nfbm90LAoJY21wX2NjeF9ub3QsIGNtcF9jY19zZXRfbm90LCBjbXBfY2N4X3NldF9ub3QsIGFkZHRmMywgYWRkZGYzLAoJYWRkc2YzLCBzdWJ0ZjMsIHN1YmRmMywgc3Vic2YzLCBtdWx0ZjMsIG11bGRmMywgbXVsc2YzLAoJbXVsZGYzX2V4dGVuZCwgbXVsdGYzX2V4dGVuZCwgZGl2dGYzLCBkaXZkZjMsIGRpdnNmMywgbmVndGYyLAoJbmVnZGYyLCBuZWdzZjIsIGFic3RmMiwgYWJzZGYyLCBhYnNzZjIsIHNxcnR0ZjIsIHNxcnRkZjIsIHNxcnRzZjIsCglhc2hsc2kzLCBhc2hsZGkzLCB1bm5hbWVkIERJIGFzaGlmdCwgY21wX2NjX2FzaGlmdF8xLAoJY21wX2NjX3NldF9hc2hpZnRfMSwgYXNocnNpMywgYXNocmRpMywgdW5uYW1lZCBESSBhc2hpZnRydCwKCWFzaHJkaTNfdjhwbHVzLCBsc2hyc2kzLCBsc2hyZGkzLCB1bm5hbWVkIERJIGxzaGlmdHJ0LAoJbHNocmRpM192OHBsdXMsIHRhYmxlanVtcF9zcDMyLCB0YWJsZWp1bXBfc3A2NCwgY2FsbF9hZGRyZXNzX3NwMzIsCgljYWxsX3N5bWJvbGljX3NwMzIsIGNhbGxfYWRkcmVzc19zcDY0LCBjYWxsX3N5bWJvbGljX3NwNjQsCgljYWxsX2FkZHJlc3Nfc3RydWN0X3ZhbHVlX3NwMzIsIGNhbGxfc3ltYm9saWNfc3RydWN0X3ZhbHVlX3NwMzIsCgljYWxsX2FkZHJlc3NfdW50eXBlZF9zdHJ1Y3RfdmFsdWVfc3AzMiwKCWNhbGxfc3ltYm9saWNfdW50eXBlZF9zdHJ1Y3RfdmFsdWVfc3AzMiwgY2FsbF92YWx1ZV9hZGRyZXNzX3NwMzIsCgljYWxsX3ZhbHVlX3N5bWJvbGljX3NwMzIsIGNhbGxfdmFsdWVfYWRkcmVzc19zcDY0LAoJY2FsbF92YWx1ZV9zeW1ib2xpY19zcDY0LCBicmFuY2hfc3AzMiwgYnJhbmNoX3NwNjQsCglmbHVzaF9yZWdpc3Rlcl93aW5kb3dzLCBnb3RvX2hhbmRsZXJfYW5kX3Jlc3RvcmUsCglnb3RvX2hhbmRsZXJfYW5kX3Jlc3RvcmVfdjksIGdvdG9faGFuZGxlcl9hbmRfcmVzdG9yZV92OV9zcDY0LAoJZmx1c2gsIGFsbCBsZGQvc3RkIHBlZXBob2xlcywgcmV0dXJuX3FpLCByZXR1cm5faGksIHJldHVybl9zaSwKCXJldHVybl9hZGRzaSwgcmV0dXJuX2RpLCByZXR1cm5fYWRkZGksIHJldHVybl9zZiwgYWxsIGNhbGwranVtcAoJcGVlcGhvbGVzLCB0cmFwLCB1bm5hbWVkIHRyYXAgaW5zbnMpOiBQcmV0dGlmeSBvdXRwdXQgc3RyaW5ncy4KCShkZWZpbmVfaW5zbiBhbmRkaTNfc3AzMiwgYW5kX25vdF9kaV9zcDMyLCBpb3JkaTNfc3AzMiwKCW9yX25vdF9kaV9zcDMyLCB4b3JkaTNfc3AzMiwgeG9yX25vdF9kaV9zcDMyLCBvbmVfY21wbGRpMik6CglMaWtld2lzZSBhbmQgZm9yY2UgKyBpbXBsZW1lbnQgc3BsaXRzIGZvciBpbnRlZ2VyIGNhc2VzLgoJKGRlZmluZV9pbnNuIHJldHVybl9zZl9ub19mcHUpOiBMaWtld2lzZSBhbmQgYWxsb3cgdG8gbWF0Y2ggd2hlbgoJbm8tZnB1IGJlY2F1c2Ugb2Ygb3VyIHN1YnJlZyBTRm1vZGUgc3BsaXRzLgoJKGRlZmluZV9pbnNuIHplcm9fZXh0ZW5kcWloaTIsIHplcm9fZXh0ZW5kcWlzaTJfaW5zbiwKCXplcm9fZXh0ZW5kcWlkaTJfaW5zbiwgemVyb19leHRlbmRoaWRpMl9pbnNuLAoJemVyb19leHRlbmRzaWRpMl9pbnNuLCBzaWduX2V4dGVuZHNpZGkyX2luc24pOiBMaWtld2lzZSBhbmQgdXNlCglpbnB1dF9vcGVyYW5kIGZvciBzZWNvbmQgb3BlcmFuZC4KCShjbXBfbWludXNfY2MsIGNtcF9taW51c19jY19zZXQpOiBMaWtld2lzZSBhbmQgdXNlCglyZWdfb3JfMF9vcGVyYW5kIGZvciBvcGVyYW5kIDIgc28gbmV3IHNwbGl0cyBjYW4gdXNlIGl0LgoJKGNtcF96ZXJvX2V4dGVuZHFpc2kyLCBjbXBfemVyb19leHRlbmRxaXNpMl9zZXQsIGNtcF9jY19wbHVzLAoJY21wX2NjX3hvcl9ub3QpOiBMaWtld2lzZSBhbmQgZG9uJ3QgZm9yZ2V0IHRvIGNoZWNrIFRBUkdFVF9MSVZFX0cwCgl0b28uCgkoY21wX3plcm9fZXh0cmFjdCwgY21wX3plcm9fZXh0cmFjdF9zcDY0KTogTGlrZXdpc2UgYW5kIGFsbG93CglDT05TVF9ET1VCTEVzIGZvciBvcGVyYW5kIDIuCgkoZGVmaW5lX2luc24gbW92ZV9sYWJlbF9kaSk6IExpa2V3aXNlIGFuZCBsYWJlbCBkaXN0YW5jZQoJb3B0aW1pemF0aW9uIGJlY2F1c2UgaXQgbm8gbG9uZ2VyIHdvcmtzIHdpdGggbmV3IGRlZmVycmVkIGNhc2UKCXZlY3RvciBzY2hlbWUuICBUbyBiZSByZXZpc2l0ZWQuCgkoZGVmaW5lX2luc24geF9taW51c195X21pbnVzX3NsdHUsIHhfbWludXNfc2x0dV9wbHVzX3kpOiBMaWtld2lzZQoJYW5kIGFsbG93IHJlZ19vcl8wX29wZXJhbmQgYW5kIEogY29uc3RyYWludCBmb3Igc2Vjb25kIG9wZXJhbmQuCgkoZGVmaW5lX2luc24ganVtcCk6IFNldCBicmFuY2ggcHJlZGljdCB0YWtlbiBvbiBWOS4KCShkZWZpbmVfaW5zbiB0YWJsZWp1bXApOiBFbWl0IExBQkVMX1JFRiArIFBMVVMgbWVtb3J5IGFkZHJlc3MgZm9yCgluZXcgZGVmZXJyZWQgY2FzZSB2ZWN0b3Igc2NoZW1lLgoJKGRlZmluZV9pbnNuIHBpY190YWJsZWp1bXBfMzIsIHBpY190YWJsZWp1bXBfNjQpOiBSZW1vdmUuCgkoZGVmaW5lX2luc24gbmVnZGkyX3NwMzIpOiBGb3JjZSArIGltcGxlbWVudCBzcGxpdHMuCgkoZGVmaW5lX2luc24gbmVnc2kyLCBvbmVfY21wbHNpMik6IFJlbmFtZSB0byBuZWdzaTJfbm90X2xpdmVnMCBhbmQKCW9uZV9jbXBsc2kyX25vdF9saXZlZzAgcmVzcGVjdGl2ZWx5LCBhbmQgY3JlYXRlCWV4cGFuZGVyIG9mIG9yaWdpbmFsCgluYW1lcyB3aGljaCBlbWl0IHNwZWNpYWwgcnRsIGZvciBUQVJHRVRfTElWRV9HMC4KCShkZWZpbmVfaW5zbiBjbXBkaV92OHBsdXMsIHNjY19zaSwgc2NjX2RpKTogUmVtb3ZlLgoJKGRlZmluZV9pbnNuIHNlcSwgc25lLCBzbHQsIHNnZSwgc2xlLCBzbHR1LCBzZ2V1KTogRG9uJ3QgZG8KCWdlbl9jb21wYXJlX3JlZywgRkFJTCBpbnN0ZWFkLgoJKGRlZmluZV9pbnNuIHNndHUsIHNsZXUpOiBMaWtld2lzZSBhbmQgY2hlY2sgZ2VuX3MqKCkgcmV0dXJuCgl2YWx1ZXMgd2hlbiB0cnlpbmcgdG8gcmV2ZXJzZSBjb25kaXRpb24gY29kZXMsIGlmIHRoZXkgRkFJTCB0aGVuCglkbyBsaWtld2lzZS4KCShkZWZpbmVfaW5zbiBzbmVzaV96ZXJvLCBuZWdfc25lc2lfemVybywgc25lc2lfemVyb19leHRlbmQsCglzbmVkaV96ZXJvLCBuZWdfc25lZGlfemVybywgc25lZGlfemVyb190cnVuYywgc2Vxc2lfemVybywKCW5lZ19zZXFzaV96ZXJvLCBzZXFzaV96ZXJvX2V4dGVuZCwgc2VxZGlfemVybywgbmVnX3NlcWRpX3plcm8sCglzZXFkaV96ZXJvX3RydW5jLCB4X3BsdXNfaV9uZV8wLCB4X21pbnVzX2lfbmVfMCwgeF9wbHVzX2lfZXFfMCwKCXhfbWludXNfaV9lcV8wKTogQWRkIG5ldyBzcGxpdHMgdG8gcGVyZm9ybSB0aGVzZSBtdWx0aS1pbnNuIGNhc2VzLAoJc2V0IG91dHB1dCBzdHJpbmcgdG8gIyB0byBpbmRpY2F0ZSB0aGV5IGFyZSBtYW5kYXRvcnkgc3BsaXRzLgoJKGRlZmluZV9pbnNuIHBpY19sb19zdW1fc2ksIHBpY19zZXRoaV9zaSwgcGljX2xvX3N1bV9kaSwKCXBpY19zZXRoaV9kaSwgbW92ZV9waWNfbGFiZWxfc2kpOiBSZW1vdmUuCgkoZGVmaW5lX2luc24gbW92c2lfbG93X3N1bSwgbW92c2lfaGlnaCwgbW92c2lfbG9fc3VtX3BpYywKCW1vdnNpX2hpZ2hfcGljLCBtb3ZzaV9waWNfbGFiZWxfcmVnKTogTmV3IHBhdHRlcm5zIHRvIHRha2UgdGhlaXIKCXBsYWNlLgoJKGRlZmluZV9leHBhbmQgbW92c2lfcGljX2xhYmVsX3JlZiwgZGVmaW5lX2luc24KCW1vdnNpX2hpZ2hfcGljX2xhYmVsX3JlZiwgbW92c2lfbG9fc3VtX3BpY19sYWJlbF9yZWYpOiBOZXcKCWV4cGFuZGVyIGFuZCBpbnNucyB0byBoYW5kbGUgUElDIGxhYmVsIHJlZmVyZW5jZXMgYW5kIGRlZmVycmVkCgljYXNlIHZlY3RvcnMuCgkoZGVmaW5lX2luc24gZ2V0X3BjX3ZpYV9yZHBjKTogQ29tbWVudCBvdXQgYXMgaXQgaXMgbm8gbG9uZ2VyCgl1c2VkLgoJKGRlZmluZV9leHBhbmQgbW92cWksIG1vdmhpLCBtb3ZzaSwgbW92ZGksIG1vdnNmLCBtb3ZkZiwgbW92dGYpOgoJUmV3cml0ZSB0byBub3QgdXNlIGVtaXRfbW92ZV9zZXF1ZW5jZSwgbWFrZSB1c2Ugb2YgbmV3IGNvbnN0YW50Cglmb3JtYXRpb24gY29kZSwgYW5kIG5ldyBzcGxpdHMgZm9yIGFsbCBtdWx0aS1pbnNuIGNhc2VzLgoJKGRlZmluZV9pbnNuIG1vdnFpX2luc24pOiBSZW1vdmUgc2V0aGkgY2FzZSwgaXQgY2FuIG5ldmVyIGhhcHBlbi4KCVVzZSByZWdfb3JfemVyb19vcGVyYW5kIGluc3RlYWQgb2YgY29uc3QwX3J0eCBleHBsaWNpdCB0ZXN0LAoJdXNlIGlucHV0X29wZXJhbmQgaW5zdGVhZCBvZiBtb3ZlX29wZXJhbmQgZm9yIHNvdXJjZSwgYW5kIHVzZQoJZ2VuZXJhbF9vcGVyYW5kIG5vdyBmb3IgZGVzdC4KCShkZWZpbmVfaW5zbiBtb3ZoaV9pbnNuKTogU2ltaWxhciBidXQgbGVhdmUgc2V0aGkgY2FzZS4KCShkZWZpbmVfaW5zbiBsb19zdW1fcWksIHN0b3JlX3FpLCBzdG9yZV9oaSk6IFJlbW92ZS4KCShkZWZpbmVfaW5zbiBzZXRoaV9oaSBsb19zdW1faGkpOiBSZW5hbWUgdG8gbW92aGlfaGlnaCBhbmQKCW1vdmhpX2xvX3N1bSByZXNwZWN0aXZlbHksIHByZXR0aWZ5IG91dHB1dCBzdHJpbmcuCgkoZGVmaW5lX2luc24gbW92c2lfemVyb19saXZlZzApOiBOZXcgcGF0dGVybiB0byBwdXQgemVybyBpbnRvIGEKCXJlZ2lzdGVyIHdoZW4gbmVlZGVkIG9uIFRBUkdFVF9MSVZFX0cwLgoJKGRlZmluZV9pbnNuIG1vdnNpX2luc24pOiBVc2UgZ2VuZXJhbF9vcGVyYW5kIGFuZCBpbnB1dF9vcGVyYW5kCglmb3IgZGVzdCBhbmQgc3JjIHJlc3BlY3RpdmVseS4gIFNpbXBsaWZ5IGFwcGxpY2FiaWxpdHkgdGVzdC4KCVByZXR0aWZ5IG91dHB1dCBzdHJpbmdzLCBhbmQgYWRkIGNsciBhbHRlcm5hdGl2ZSBmb3IgSgoJY29uc3RyYWludC4KCShkZWZpbmVfaW5zbiBtb3ZkaV9zcDMyX3Y5LCBtb3ZkaV9zcDMyLCBkZWZpbmVfc3BsaXRzIGZvcgoJZGVwcmVjYXRlZCBzdGQgYW5kIHJlZy1yZWcgREkgbW92ZXMpOiBSZW1vdmUgYW5kLi4uCgkoZGVmaW5lX2luc24gbW92ZGlfaW5zbl9zcDMyLCBtb3ZkaV9pbnNuX3NwNjQpOiBSZXBsYWNlIHdpdGggbmV3CglpbXBsZW1lbnRhdGlvbiB3aGljaCB1c2VzIGZvcmNlZCBzcGxpdHMgZm9yIGFsbCBub24tc2luZ2xlIGluc24KCWNhc2VzLgoJKGRlZmluZV9zcGxpdCBESSBtb3ZlIGNhc2VzIG9uICFhcmNoNjQpOiBOZXcgc3BsaXRzIHRvIGhhbmRsZSBhbGwKCXNpdHVhdGlvbnMgb2YgNjQtYml0IGRvdWJsZSByZWdpc3RlciBESW1vZGUgb24gMzJiaXQsIGFuZAoJdW5hbGlnbmVkIHJlZ2lzdGVycyBhbmQgbWVtb3J5IGFkZHJlc3NlcyBmb3IgYWxsIHN1YnRhcmdldHMuCgkoZGVmaW5lX2luc24gbW92c2ZfY29uc3RfaW5zbiwgbW92ZGZfY29uc3RfaW5zbiwgc3RvcmVfc2YpOgoJUmVtb3ZlLgoJKGRlZmluZV9pbnNuIG1vdnNmX2luc24sIG1vdnNmX25vX2ZfaW5zbik6IFVzZSBnZW5lcmFsX29wZXJhbmQgYW5kCglpbnB1dF9vcGVyYW5kIGZvciBkZXN0IGFuZCBzcmMgcmVzcGVjdGl2ZWx5LCBwcmV0dGlmeSBvdXRwdXQKCXN0cmluZ3MuCgkoZGVmaW5lX2luc24gbW92ZGZfaW5zbiwgbW92ZGZfbm9fZV9pbnNuLCBzdG9yZV9kZiwKCW1vdnRmX2NvbnN0X2luc24sIG1vdnRmX2luc24sIG1vdnRmX25vX2VfaW5zbiwgc3RvcmVfdGYpOiBSZW1vdmUKCWFuZC4uLgoJKGRlZmluZV9pbnNuIG1vdmRmX2luc25fc3AzMiwgbW92ZGZfbm9fZV9pbnNuX3NwMzIsCgltb3ZkZl9pbnNuX3NwNjQsIG1vdmRmX25vX2VfaW5zbl9zcDY0LCBtb3Z0Zl9pbnNuLAoJbW92dGZfbm9fZV9pbnNuX3NwMzIsIG1vdnRmX2luc25faHFfc3A2NCwgbW92dGZfaW5zbl9zcDY0LAoJbW92dGZfbm9fZV9pbnNuX3NwNjQpOiBSZXBsYWNlIHdpdGggbmV3CglpbXBsZW1lbnRhdGlvbiB3aGljaCB1c2VzIGZvcmNlZCBzcGxpdHMgZm9yIGFsbCBub24tc2luZ2xlIGluc24KCWNhc2VzLgoJKGRlZmluZV9zcGxpdCBERiBtb3ZlIGNhc2VzKTogTmV3IHNwbGl0cyBpbiBzaW1pbGFyIHZlaW4gdG8gREkKCW1vdmUgY291bnRlcnBhcnRzLgoJKGRlZmluZV9pbnNuIHNldGhpX2RpX21lZGxvdywgc2V0aGlfZGlfbWVkaXVtX3BpYywKCXNldGhpX2RpX2VtYm1lZGFueV9kYXRhLCBzZXRoaV9kaV9lbWJtZWRhbnlfdGV4dCwgc2V0aGlfZGlfc3A2NCwKCW1vdmRpX3NwNjRfaW5zbik6IFJlbW92ZSBvbGQgdjkgY29kZSBtb2RlbCBhbmQgY29uc3RhbnQgbG9hZGluZwoJc3VwcG9ydCBpbnNucyBhbmQuLgoJKGRlZmluZV9pbnNuIHBpY19sb19zdW1fZGksIHBpY19zZXRoaV9kaSwKCXNldGhpX2RpX21lZGxvd19lbWJtZWRhbnlfcGljLCBzZXRoaV9kaV9tZWRsb3csIGxvc3VtX2RpX21lZGxvdywKCXNldGg0NCwgc2V0bTQ0LCBzZXRsNDQsIHNldGhoLCBzZXRsbSwgc2V0aG0sIHNldGxvLAoJZW1ibWVkYW55X3NldGhpLCBlbWJtZWRhbnlfbG9zdW0sIGVtYm1lZGFueV9icnN1bSwKCWVtYm1lZGFueV90ZXh0dWhpLCBlbWJtZWRhbnlfdGV4dGhpLCBlbWJtZWRhbnlfdGV4dHVsbywKCWVtYm1lZGFueV90ZXh0bG8sIG1vdmRpX2xvX3N1bV9zcDY0X2NpbnQsIG1vdmRpX2xvX3N1bV9zcDY0X2RibCwKCW1vdmRpX2hpZ2hfc3A2NF9jaW50LCBtb3ZkaV9oaWdoX3NwNjRfZGJsKTogUmVwbGFjZSB3aXRoIG5ldwoJc2NoZW1lLCB1c2luZyB1bnNwZWNzLCBzZWNvbmRhcnkgcmVsb2FkcywgYW5kIG9uZSB0byBvbmUgc3BhcmMKCWluc24gdG8gcnRsIGluc24gbWFwcGluZyBmb3IgYmV0dGVyIHNjaGVkdWxpbmcgYW5kIGNvZGUgZ2VuLgoJKGRlZmluZV9leHBhbmQgcmVsb2FkX2luZGksIHJlbG9hZF9vdXRkaSk6IFJlbG9hZCBoZWxwZXJzIGZvcgoJTUVEQU5ZIGFuZCBFTUJNRURBTlkgc3ltYm9sIGFkZHJlc3MgbG9hZGluZyBjYXNlcyB3aGljaCByZXF1aXJlIGEKCXRlbXBvcmFyeSByZWdpc3Rlci4KCShkZWZpbmVfZXhwYW5kIG1vdnNpY2MpOiBSZW1vdmUgdjhwbHVzX3JlZ2NtcCBjYXNlcy4KCShkZWZpbmVfaW5zbiBtb3ZkaV9jY19zcDY0X3RydW5jLCBtb3ZkaV9jY19yZWdfc3A2NF90cnVuYywKCWNtcF96ZXJvX2V4dGVuZHFpZGkyLCBjbXBfemVyb19leHRlbmRxaWRpMl9zZXQsIGNtcF9xaWRpX3RydW5jLAoJY21wX2RpcWlfdHJ1bmNfc2V0KTogTmV3IHBhdHRlcm5zIHVzZWQgYnkgc29tZSBvZiB0aGUgbmV3IHNjYwoJc3BsaXRzIG9uIGFyY2g2NC4KCShkZWZpbmVfaW5zbiB4b3JkaTNfc3A2NF9kYmwpOiBOZXcgcGF0dGVybiB1c2VkIGZvciBjb25zdGFudAoJZm9ybWF0aW9uIHdoZW4gY3Jvc3NpbmcgZnJvbSAzMi1iaXQgdGFyZ2V0cy4KCShkZWZpbmVfaW5zbiBtb3ZzaV9jY19yZWdfdjhwbHVzLCB2OHBsdXNfY2xlYXJfaGlnaCwgYW5kIGhlbHBlcgoJc3BsaXQpOiBSZW1vdmUuCgkoZGVmaW5lX2luc24gYWRkeCwgc3VieCk6IE1ha2UgdmlzaWJsZSBhbmQgcHJldHRpZnkuCgkoZGVmaW5lX2luc24gYWRkZGkzX2luc25fc3AzMik6IExpa2V3aXNlIGFuZCBmb3JjZSBzcGxpdC4KCShkZWZpbmVfaW5zbiBhZGR4X2V4dGVuZCwgc3VieF9leHRlbmQsIHVubmFtZWQpOiBOZXcgcGF0dGVybnMgZm9yCgk2NGJpdCBzY2Mgc3BsaXQgdXNhZ2UuCgkoZGVmaW5lX2luc24gdW5uYW1lZCBwbHVzREkgemVyb19leHRlbmQsIHVubmFtZWQgbWludXNESQoJemVyb19leHRlbmQsIHN1YmRpMyk6IEZvcmNlIGFuZCBpbXBsZW1lbnQgc3BsaXRzLgoKCSogZmluYWwuYyAoZmluYWxfc2Nhbl9pbnNuKTogRG9uJ3Qgb3V0cHV0IGxhYmVscyBpZiB0YXJnZXQKCXNwZWNpZmllcyBBU01fT1VUUFVUX0FERFJfe0RJRkZ9X1ZFQy4gIERvIHRoZXNlIG1hY3JvIG9wZXJhdGlvbnMKCWluc3RlYWQuCgoJKiByZW9yZy5jIChkYnJfc2NoZWR1bGUpOiBXaGVuIHRha2luZyBvbiBCUl9QUkVEIG5vdGVzIGF0IHRoZSBlbmQsCglkb24ndCBmb3JnZXQgdG8gd2FsayBpbnNpZGUgU0VRVUVOQ0VTcyB0b28gYXMgdGhlc2UgYXJlIHdoYXQgdGhlCglkZWxheSBzbG90IHNjaGVkdWxlciB3aWxsIGNyZWF0ZS4KCk1vbiBBdWcgMTAgMDE6MjE6MDEgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGFscGhhLm1kIChleHR4bCsxLCsyKTogTmV3IHBhdHRlcm5zIHRvIHdvcmsgYXJvdW5kCgljb21iaW5lIGxvc3NhZ2UuCgpTYXQgQXVnICA4IDE5OjIwOjIyIDE5OTggIEdhcnkgVGhvbWFzICAoZ2R0QGxpbnV4cHBjLm9yZykKCgkqIHJzNjAwMC5jIChyczYwMDBfYWxsb2NhdGVfc3RhY2tfc3BhY2UpOiBGaXggdHlwbyB3aGljaAoJY2F1c2VkIGJhZCBhc3NlbWJseSBjb2RlIHRvIGJlIGdlbmVyYXRlZC4KClNhdCBBdWcgIDggMTg6NTM6MjggMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbmV0YnNkLmg6IEZpeCB0eXBvLgoKTW9uIEF1ZyAgMyAwMDowNjo0MiAxOTk4ICBSb2JlcnQgTGlwZSAgPHJvYmVydGxAZGdpaS5jb20+CgoJKiBjb25maWcuc3ViOiBGaXggdHlwby4KClN1biBBdWcgIDIgMjI6Mzk6MDggMTk5OCAgSGFucy1QZXRlciBOaWxzc29uICA8aHBAYXhpcy5zZT4KCgkqIGludm9rZS50ZXhpIChFbnZpcm9ubWVudCBWYXJpYWJsZXMpOiBUeXBvOiBDaGFuZ2UgImFzY3BlY3RzIgoJaW50byAiYXNwZWN0cyIuCgkoUnVubmluZyBQcm90b2l6ZSk6IFR5cG86IENoYW5nZSAidGhlciIgaW50byAib3RoZXIiLgoKU3VuIEF1ZyAgMiAwMDo0Mjo1MCAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBpMzg2L25ldGJzZC5oOiBVbmRvIHByZXZpb3VzIGNoYW5nZSB0byBEV0FSRjJfVU5XSU5EX0lORk8uCgkqIG02OGsvbmV0YnNkLmg6IExpa2V3aXNlLgoJKiBuczMyay9uZXRic2QuaDogTGlrZXdpc2UuCgkqIHNwYXJjL25ldGJzZC5oOiBMaWtld2lzZS4KClNhdCBBdWcgIDEgMTc6NTk6MzAgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGdpbmNsdWRlL3ZhLWFscGhhLmggKHZhX2xpc3QpOiBVc2UgYSB0eXBlZGVmLCBub3QgYSBkZWZpbmUuCgkqIGdpbmNsdWRlL3ZhLWNsaXBwZXIuaCAodmFfbGlzdCk6IExpa2V3aXNlLgoKRnJpIEp1bCAzMSAyMDoyMjowMiAxOTk4ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAY3lnbnVzLmNvbT4KCgkqIHJzNjAwMC5jIChyczYwMDBfb3ZlcnJpZGVfb3B0aW9ucyk6IElmIGJpZyBlbmRpYW4gYW5kIC1PcywgdXNlCglsb2FkL3N0b3JlIG11bHRpcGxlIGluc3RydWN0aW9ucyB1bmxlc3MgdXNlciBvdmVycmlkZXMuCgpGcmkgSnVsIDMxIDE3OjA4OjU5IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIG5zMzJrL25ldGJzZC5oOiBGaXggdHlwby4KCkZyaSBKdWwgMzEgMTA6MjM6NTUgMTk5OCAgRG91ZyBFdmFucyAgPGRldmFuc0BjYW51Y2suY3lnbnVzLmNvbT4KCgkqIG0zMnIvbTMyci5oIChBU01fT1VUUFVUX1NPVVJDRV9MSU5FKTogQWx3YXlzIG91dHB1dCBsaW5lIG51bWJlcgoJbGFiZWxzIHdpdGggLmRlYnVnc3ltIGlmIG5vIHBhcmFsbGVsIGluc25zLgoKVGh1IEp1bCAzMCAxOToxNTo1MyAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEubWQgKGZwIGNtcCk6IFJlcGxpY2F0ZSBwYXR0ZXJucyBmb3IgQUxQSEFfVFBfSU5TTi4KCShmY21vdik6IFJlbW92ZSBBTFBIQV9UUF9JTlNOIHBhdHRlcm5zIC0tIGZjbW92IGRvZXNuJ3QgdHJhcC4KClRodSBKdWwgMzAgMTk6NTA6MTUgMTk5OCAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogcnM2MDAwL3gtYWl4NDMgKEFSX0ZPUl9UQVJHRVRfRkxBR1MpOiBEZWxldGUuCgkoQVJfRk9SX1RBUkdFVCk6IERlZmluZS4KClRodSBKdWwgMzAgMTI6Mjk6MTIgMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGR5bi1zdHJpbmcuaDogTmV3IGZpbGUuCgkqIGR5bi1zdHJpbmcuYzogTGlrZXdpc2UuCgkqIE1ha2VmaWxlLmluIChPQkpTKTogQWRkIGR5bi1zdHJpbmcuby4KCShkd2FyZjJvdXQubyk6IEFkZCBkeW4tc3RyaW5nLmggZGVwZW5kZW5jeS4KCShkeW4tc3RyaW5nLm8pOiBMaXN0IGRlcGVuZGVuY2llcy4KCSogZHdhcmYyb3V0LmM6IEluY2x1ZGUgZHluLXN0cmluZy5oLgoJKEFTTV9OQU1FX1RPX1NUUklORyk6IFVzZSBkeW5fc3RyaW5nX2FwcGVuZCwgcmF0aGVyIHRoYW4gc3RyY3B5LgoJKGFkZHJfY29uc3RfdG9fc3RyaW5nKTogVGFrZSBhIGR5bl9zdHJpbmdfdCwgbm90IGEgY2hhciogYXMgYQoJcHJvdG90eXBlLiAgVXNlIGR5bl9zdHJpbmdfYXBwZW5kIHJhdGhlciB0aGFuIHN0cmNhdCwgdGhyb3VnaG91dC4KCShhZGRyX3RvX3N0cmluZyk6IFVzZSBkeW5fc3RyaW5nX3QuCgpUaHUgSnVsIDMwIDEzOjA4OjA3IDE5OTggIEtlbiBSYWVidXJuICA8cmFlYnVybkBjeWdudXMuY29tPgoKCUZ1bmN0aW9uIGVudHJ5L2V4aXQgcHJvZmlsaW5nIGluc3RydW1lbnRhdGlvbjoKCSogZXhwci5oIChwcm9maWxlX2Z1bmN0aW9uX2VudHJ5X2xpYmZ1bmMsCglwcm9maWxlX2Z1bmN0aW9uX2V4aXRfbGliZnVuYyk6IERlY2xhcmUgbmV3IHZhcmlhYmxlcy4KCSogb3B0YWJzLmM6IERlZmluZSB0aGVtIGhlcmUuCgkoaW5pdF9vcHRhYnMpOiBJbml0aWFsaXplIHRoZW0uCgkqIHRyZWUuaCAoc3RydWN0IHRyZWVfZGVjbCk6IE5ldyBmbGFnCglub19pbnN0cnVtZW50X2Z1bmN0aW9uX2VudHJ5X2V4aXQuCgkoREVDTF9OT19JTlNUUlVNRU5UX0ZVTkNUSU9OX0VOVFJZX0VYSVQpOiBOZXcgYWNjZXNzb3IgbWFjcm8uCgkqIGMtZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBNZXJnZSBpdC4KCSogYy1jb21tb24uYyAoZW51bSBhdHRycyk6IE5ldyB2YWx1ZSBBX05PX0lOU1RSVU1FTlRfRlVOQ1RJT04uCgkoaW5pdF9hdHRyaWJ1dGVzKTogVXNlIGl0IGZvciAibm9faW5zdHJ1bWVudF9mdW5jdGlvbiIuCgkoZGVjbF9hdHRyaWJ1dGVzKTogSGFuZGxlIGl0LCBmb3IgZnVuY3Rpb25zIHRoYXQgaGF2ZSBub3QgeWV0IGJlZW4KCWNvbXBpbGVkLiAgU2V0IGRlY2wgZmxhZy4KCSogZmxhZ3MuaCAoZmxhZ19pbnN0cnVtZW50X2Z1bmN0aW9uX2VudHJ5X2V4aXQpOiBEZWNsYXJlIG5ldwoJdmFyaWFibGUuCgkqIHRvcGxldi5jIChmbGFnX2luc3RydW1lbnRfZnVuY3Rpb25fZW50cnlfZXhpdCk6IERlZmluZSBpdCBoZXJlLgoJKGZfb3B0aW9ucyk6IE5ldyBvcHRpb24gImluc3RydW1lbnQtZnVuY3Rpb25zIi4KCSogZnVuY3Rpb24uaCAoc3RydWN0IGZ1bmN0aW9uKTogTmV3IGZpZWxkIGluc3RydW1lbnRfZW50cnlfZXhpdC4KCSogZnVuY3Rpb24uYyAoY3VycmVudF9mdW5jdGlvbl9pbnN0cnVtZW50X2VudHJ5X2V4aXQpOiBOZXcKCXZhcmlhYmxlLgoJKHB1c2hfZnVuY3Rpb25fY29udGV4dF90bywgcG9wX2Z1bmN0aW9uX2NvbnRleHRfZnJvbSk6IFNhdmUgYW5kCglyZXN0b3JlLgoJKGV4cGFuZF9mdW5jdGlvbl9zdGFydCk6IFNldCBjdXJyZW50XyB2YXJpYWJsZSwgbWF5YmUgZW1pdCByZXR1cm4KCWxhYmVsIGFuZCBlbnRyeSBwcm9maWxlIGNhbGwuCgkoZXhwYW5kX2Z1bmN0aW9uX2VuZCk6IE1heWJlIGVtaXQgZXhpdCBwcm9maWxlIGNhbGwuCgpUaHUgSnVsIDMwIDAwOjU4OjM0IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGkzODYubWQgKG1vdnFpKTogV2hlbiBvcHRpbWl6aW5nIGEgbG9hZCBvZiAoY29uc3RfaW50IDEpIGludG8gYQoJTk9OX1FJX1JFR19QLCBwcmV0ZW5kIHRoZSByZWdpc3RlciBpcyBTSW1vZGUuCgpXZWQgSnVsIDI5IDIzOjQ5OjIzIDE5OTggIFRvZGQgVmllcmxpbmcgIDx0dkBuZXRic2Qub3JnPgoKCSogY29uZmlndXJlLmluOiBVc2UgeG0tbmV0YnNkLmggYXMgdGhlIE5ldEJTRCB4bSBmaWxlIChub3QgeG0tc2lnbGlzdCkuCglBY2NlcHQgYXJtMzIgYXMgYXJtLCBtNjhrNGsgYXMgbTY4aywgbWlwc2xlIGFzIG1pcHMtZGVjLCBhbmQgYW55CgltYW51ZmFjdHVyZXIgaWQgZm9yIG5zMzJrLgoJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGVkLgoJKiBjb25maWcvbmV0YnNkLmg6IFdoZW4gdXNpbmcgQVNNX1dFQUtFTl9MQUJFTCwgbWFrZSBpdCBnbG9iYWwgdG9vLgoJKiBjb25maWcvdC1uZXRic2Q6IERvbid0IGNvbXBpbGUgbGliZ2NjMS10ZXN0IGFzIHRoZSBmbnMgYXJlIGluIGxpYmMuCgkqIGNvbmZpZy9pMzg2L25ldGJzZC5oOiBVbmRlZmluZSBEV0FSRjJfVU5XSU5EX0lORk8sIG5vdCBkZWZpbmUgYXMgMC4KCSogY29uZmlnL202OGsvbmV0YnNkLmg6IFNhbWUuCgkqIGNvbmZpZy9uczMyay9uZXRic2QuaDogU2FtZS4KCSogY29uZmlnL3NwYXJjL25ldGJzZC5oOiBTYW1lLgoKV2VkIEp1bCAyOSAyMjozOToyMSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB1bnJvbGwuYyAodW5yb2xsX2xvb3ApOiBEbyBub3QgYWJvcnQgZm9yIGFuIFVOUk9MTF9NT0RVTE8KCW9yIFVOUk9MTF9DT01QTEVURUxZIGxvb3AgdGhhdCBzdGFydHMgd2l0aCBhIGp1bXAgdG8gaXRzCglleGl0IGNvZGUuCgpXZWQgSnVsIDI5IDIyOjE4OjE0IDE5OTggIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIHJzNjAwMC9yczYwMDAubWQgKGFic2RpMiBkZWZpbmVfc3BsaXQpOiBTd2FwIG9wZXJhbmRzIG9mIE1JTlVTLgoJKiByczYwMDAvcnM2MDAwLmMgKG1hc2s2NF9vcGVyYW5kKTogVXNlIEhPU1RfQklUU19QRVJfV0lERV9JTlQuCgkocHJpbnRfb3BlcmFuZCwgY2FzZSAnQicpOiBEb24ndCBmYWxsIHRocm91Z2guCgkocHJpbnRfb3BlcmFuZCwgY2FzZSAnUycpOiBDb3JyZWN0IG1hc2sgYmVnaW4vZW5kIGNvbXB1dGF0aW9uLgoJVXNlIEhPU1RfQklUU19QRVJfV0lERV9JTlQuCgkqIHJzNjAwMC9yczYwMDAuaCAoQ1BQX1BSRURFRklORVMpOiBEZWZpbmUgX0xPTkdfTE9ORy4KCShDT05ESVRJT05BTF9SRUdJU1RFUl9VU0FHRSk6IEdQUjEzIGZpeGVkIGlmIFRBUkdFVF82NEJJVC4KCSogcnM2MDAwL2FpeDQxLmggKENQUF9QUkVERUZJTkVTKTogU2FtZS4KCSogcnM2MDAwL2FpeDQzLmggKENQUF9QUkVERUZJTkVTKTogU2FtZS4KCldlZCBKdWwgMjkgMTE6NDc6MTAgMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9hcm0vdGh1bWIubWQgKGV4dGVuZHFpc2kyX2luc24pOiBSZW1vdmUgZWFybHljbG9iYmVyCgljb25zdHJhaW50IGZyb20gc2Vjb25kIGFsdGVybmF0aXZlLgoKVHVlIEp1bCAyOCAyMzoyOTowNCAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjb25maWd1cmUuaW46IEZpeCAtLXdpdGhvdXQvLS1kaXNhYmxlIGNhc2VzIGZvciBsb2NhbC1wcmVmaXgsCglneHgtaW5jbHVkZS1kaXIgYW5kIGNoZWNraW5nLgoKVHVlIEp1bCAyOCAyMjowMToyMyAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiAoZW5hYmxlX2hhaWZhKTogU2V0IGJ5IGRlZmF1bHQgZm9yIHNwYXJjNjQgdG9vLgoJY29uZmlndXJlOiBSZWJ1aWx0LgoKVHVlIEp1bCAyOCAyMzoyOTowNCAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBpMzg2L2N5Z3dpbjMyLmggKFZBTElEX01BQ0hJTkVfVFlQRV9BVFRSSUJVVEUpOiBOZXcgbWFjcm8uCgkqIGkzODYvd2lubnQuYyAoYXNzb2NpYXRlZF90eXBlKTogTmV3IGZuLgoJKGkzODZfcGVfdmFsaWRfdHlwZV9hdHRyaWJ1dGVfcCk6IE5ldyBmbi4KCShpMzg2X3BlX2NoZWNrX3Z0YWJsZV9pbXBvcnRleHBvcnQpOiBSZW1vdmUuCgkoaTM4Nl9wZV9kbGxleHBvcnRfcCk6IFVzZSBhc3NvY2lhdGVkX3R5cGUuCgkoaTM4Nl9wZV9kbGxpbXBvcnRfcCk6IExpa2V3aXNlLgoKCUZyb20gQW50b25pbyBNLiBPLiBOZXRvIDxhbm1lbmRlc0BjcnV6ZWlyb25ldC5jb20uYnI+OgoJKiBpMzg2LmMgKGkzODZfdmFsaWRfdHlwZV9hdHRyaWJ1dGVfcCk6IEFsc28gYWNjZXB0CglhdHRyaWJ1dGVzIGZvciBNRVRIT0RfVFlQRXMuCgpUdWUgSnVsIDI4IDIzOjE3OjM5IDE5OTggIFBldGVyIEdlcndpbnNraSAgPHBldGVyQGdlcndpbnNraS5kZT4KCgkqIHRyZWUuYyAoYnVpbGRfcmFuZ2VfdHlwZSk6IENvcHkgVFlQRV9TSVpFX1VOSVQuCgpUdWUgSnVsIDI4IDIyOjMxOjEyIDE5OTggIENyYWlnIEJ1cmxleSAgPGJ1cmxleUBnbnUub3JnPgoKCSogZ2NjLmM6IEZpeCBjb21tZW50YXJ5IGRlc2NyaWJpbmcgJWcsICV1LCAlVSwgYW5kICVPLgoKCSogZ2NjLmMgKGRvX3NwZWNfMSk6IEZpeCBoYW5kbGluZyBvZiAlZyVPIGFuZCAlVSVPIHRvIHByZXZlbnQKCXRoZW0gZnJvbSBnZW5lcmF0aW5nIGEgbmV3IGJhc2UgbmFtZSBmb3IgZWFjaCBvY2N1cnJlbmNlIG9mCglhIHNwZWNpZmljIHN1ZmZpeC4KCjE5OTgtMDctMjggIFZsYWRpbWlyIE4uIE1ha2Fyb3YgIDx2bWFrYXJvdkBjeWdudXMuY29tPgoKCSogY3NlLmMgKGNzZV9pbnNuKTogRW5hYmxlIHN1YnN0aXR1dGlvbiBpbnNpZGUgbGliY2FsbCBvbmx5IGZvciBSRUcsCglTVUJSRUcsIE1FTS4KCSogcnRsYW5hbC5jIChyZXBsYWNlX3J0eCk6IFByb2hpYml0IHJlcGxhY2VzIGluCUNPTlNUX0RPVUJMRS4KCgkqIGNwbHVzLWRlbS5jICh0eXBlX2tpbmRfdCk6IE5ldyB0eXBlLgoJKGRlbWFuZ2xlX3RlbXBsYXRlX3ZhbHVlX3Bhcm0pOiBBZGQgdHlwZV9raW5kX3QgcGFyYW1ldGVyLiAgUmVseQoJb24gdGhpcyBwYXJhbWV0ZXIsIHJhdGhlciB0aGFuIGRlbWFuZ2xpbmcgdGhlIHR5cGUgYWdhaW4uCgkoZGVtYW5nbGVfaW50ZWdyYWxfdmFsdWUpOiBQYXNzIHRrX2ludGVncmFsLgoJKGRlbWFuZ2xlX3RlbXBsYXRlXzogUGFzcyB0aGUgdmFsdWUgcmV0dXJuZWQgZnJvbSBkb190eXBlLgoJKGRvX3R5cGUpOiBSZXR1cm4gYSB0eXBlX2tpbmRfdC4gIFBhc3MgdGtfaW50ZWdyYWwgdG8KCWRlbWFuZ2xlX3RlbXBsYXRlX3ZhbHVlX3Bhcm0gZm9yIGFycmF5IGJvdW5kcy4KCShkZW1hbmdsZV9mdW5kX3R5cGUpOiBMaWtld2lzZS4KCk1vbiBKdWwgMjcgMDA6NTQ6NDEgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHJlZS5jIChzaW1wbGVfY3N0X2VxdWFsLCBjYXNlIENPTlNUUlVDVE9SKTogT0sgaWYgdGhlIGVsdHMgYXJlCglpZGVudGljYWwuCgpNb24gSnVsIDI3IDIyOjE4OjM2IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHBhLmMgKG1vdmVfb3BlcmFuZCk6IEFjY2VwdCBDT05TVEFOVF9QX1JUWC4KCk1vbiBKdWwgMjcgMTc6MTg6NTIgMTk5OCAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKCSogc3Rvci1sYXlvdXQuYyAobGF5b3V0X3R5cGUpOiBIYW5kbGUgYXJyYXlzIG9mIGJpdHMsIGZvciBDaGlsbC4KCgkqIGV4cHIuYyAoZ2V0X2lubmVyX3JlZmVyZW5jZSk6IEhhbmRsZSB6ZXJvLWJhc2VkLCB1bnNpZ25lZCwgYXJyYXkKCWluZGV4IGNvbnZlcnNpb24uCgpNb24gSnVsIDI3IDE0OjUxOjMzIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIG1uMTAzMDAuaCAoREVCVUdHRVJfQVVUT19PRkZTRVQpOiBEZWZpbmUuCgkoREVCVUdHRVJfQVJHX09GRlNFVCk6IExpa2V3aXNlLgoKCSogbW4xMDMwMC5tZCAobW92c2YpOiBSZW1vdmUgbGFzdCBjaGFuZ2UuICBOb3QgbmVlZGVkLgoKTW9uIEp1bCAyNyAxNDoyMjozNiAxOTk4ICBEYXZlIEJyb2xsZXkgIDxicm9sbGV5QGN5Z251cy5jb20+CgoJKiBjLWxleC5jICh5eWxleCk6IEZpeCBib3VuZGFyeSBjb25kaXRpb25zIGluIGNoYXJhY3RlciBsaXRlcmFsIGFuZAoJc3RyaW5nIGxpdGVyYWwgbG9vcHMuCgpNb24gSnVsIDI3IDExOjQzOjU0IDE5OTggIFN0YW4gQ294ICA8c2NveEBjeWdudXMuY29tPgoKCSogbG9uZ2xvbmcuaCAoY291bnRfbGVhZGluZ196ZXJvcyk6IFNwYXJjbGl0ZSBzY2FuIGluc3RydWN0aW9uIHdhcwoJYmVpbmcgaW52b2tlZCBpbmNvcnJlY3RseS4KCgkqIGkzODYuYyAoaXg4Nl9wcm9sb2d1ZSk6IEFkZGVkIFNVQlRBUkdFVF9QUk9MT0dVRSBpbnZvY2F0aW9uLgoJKiBpMzg2L2N5Z3dpbjMyLmggKFNUQVJURklMRV9TUEVDLCBMSUJfU1BFQywgU1VCVEFSR0VUX1BST0xPR1VFKToKCUFkZCAtcGcgc3VwcG9ydC4KCSogaTM4Ni93aW4zMi5oOiBOZXcgZmlsZS4gIEh5YnJpZCBtaW5ndzMyLmgvY3lnd2luMzIuaCBjb25maWd1cmF0aW9uLgoJKiBjb25maWd1cmUuaW46IEFkZGVkIGlbMzQ1NjddODYtKi13aW4zMi4KCSogY29uZmlnLnN1YjogTGlrZXdpc2UuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KClN1biBKdWwgMjYgMDE6MTE6MTIgMTk5OCAgSC5KLiBMdSAgKGhqbEBnbnUub3JnKQoKCSogaTM4Ni5oIChDT05TVF9ET1VCTEVfT0tfRk9SX0xFVFRFUl9QKTogUmV0dXJuIDAgd2hlbiBlbGltaW5hdGluZwoJdGhlIGZyYW1lIHBvaW50ZXIgYW5kIGNvbXBpbGluZyBQSUMgY29kZSBhbmQgcmVsb2FkIGhhcyBub3QgY29tcGxldGVkLgoKCSogaTM4Ni5jIChvdXRwdXRfdG9fcmVnKTogQWRkIGNvZGUgdG8gZW11bGF0ZSBub24tcG9wcGluZyBESW1vZGUKCWNhc2UuCgpTdW4gSnVsIDI2IDAxOjAxOjMyIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHJlZ21vdmUuYyAocmVnbW92ZV9vcHRpbWl6ZSk6IEZpeCB0eXBvIGluaXRpYWxpemluZyByZWdtb3ZlX2JiX2hlYWQuCgpTYXQgSnVsIDI1IDIzOjI5OjIzIDE5OTggIEdlcmFsZCBQZmVpZmVyICA8cGZlaWZlckBkYmFpLnR1d2llbi5hYy5hdD4KCgkqIE1ha2VmaWxlLmluIChpbnN0YWxsLWluZm8pOiBPbmx5IHRyeSB0byB1cGRhdGUgdGhlIGluZm8KCWRpcmVjdG9yeSBmaWxlIGlmIGl0IGV4aXN0cyBpbiB0aGUgZmlyc3QgcGxhY2UuCgpGcmkgSnVsIDI0IDE4OjU4OjM3IDE5OTggIEtsYXVzIEVzcGVubGF1YiAgPGtlc3BlbmxhQHN0dWRlbnQuaW5mb3JtYXRpay51bmktdWxtLmRlPgoKCSogcnM2MDAwLmggKEFTTV9PVVRQVVRfQ09OU1RSVUNUT1IsIEFTTV9PVVRQVVRfREVTVFJVQ1RPUik6IERlbGV0ZS4KCkZyaSBKdWwgMjQgMTQ6MjA6MjYgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbW4xMDMwMC5tZCAobW92cWksIG1vdmhpLCBtb3ZzaSwgbW92c2YpOiBDb3JyZWN0bHkgaGFuZGxlCglDT05TVF9ET1VCTEUgc291cmNlLgoKRnJpIEp1bCAyNCAxMToxNzowNCAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL2FybS90aHVtYi5jICh0aHVtYl9wcmludF9vcGVyYW5kKTogRGVjb2RlICVfIGluIGFzbQoJc3RyaW5ncyBhcyB0aGUgaW5zZXJ0aW9uIG9mIFVTRVJfTEFCRUxfUFJFRklYLgoJKiBjb25maWcvYXJtL3RodW1iLmggKFBSSU5UX09QRVJBTkRfUFVOQ1RfVkFMSURfUCk6IEFjY2VwdCBfIGFzIGEKCXZhbGlkIGNvZGUuCgkqIGNvbmZpZy9hcm0vdGh1bWIubWQ6IFVzZSAlXyBhcyBhIHByZWZpeCB0byBnY2MgbGlicmFyeSBmdW5jdGlvbgoJY2FsbHMuCgpUaHUgSnVsIDIzIDE4OjUzOjIwIDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGRieG91dC5jIChkYnhvdXRfcmFuZ2VfdHlwZSk6IE9ubHkgY2FsbCBkYnhvdXRfdHlwZV9pbmRleCBmb3IKCWFscmVhZHkgZGVmaW5lZCB0eXBlLgoKVGh1IEp1bCAyMyAxMzo0OTo0MSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBleHByLmMgKGNoZWNrX21heF9pbnRlZ2VyX2NvbXB1dGF0aW9uX21vZGUpOiBBbGxvdyBjb252ZXJzaW9ucwoJb2YgY29uc3RhbnQgaW50ZWdlcnMgdG8gTUFYX0lOVEVHRVJfQ09NUFVUQVRJT05fTU9ERS4KCShleHBhbmRfZXhwcik6IExpa2V3aXNlLgoKVGh1IEp1bCAyMyAxMToxMjowNiAxOTk4ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBFeHBhbmQgUkVUVVJOX0VYUFIuCgpUaHUgSnVsIDIzIDExOjAwOjI5IDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGR3YXJmMm91dC5jIChkd2FyZjJvdXRfZmluaXNoKTogQ2FsbCBzdHJpcGF0dHJpYnV0ZXMgb24gVEVYVF9TRUNUSU9OLgoKV2VkIEp1bCAyMiAxOToxMDowMCAxOTk4ICBDYXRoZXJpbmUgTW9vcmUgIDxjbG1AY3lnbnVzLmNvbT4KCgkqIGR3YXJmMm91dC5jIChvdXRwdXRfYXJhbmdlcyk6IENhbGwgc3RyaXBhdHRyaWJ1dGVzCglmb3IgVEVYVF9TRUNUSU9OIHJlZmVyZW5jZXMuCgkob3V0cHV0X2xpbmVfaW5mbyk6IExpa2V3aXNlLgoKV2VkIEp1bCAyMiAxNDowODo1NCAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIHByb2ZpbGUuYyAoYnJhbmNoX3Byb2IpOiBDYWxsIGFsbG9jYXRlX3JlZ19pbmZvIGFmdGVyIG91dHB1dHRpbmcKCXByb2ZpbGUgcnRsIGluIGluc3RydW1lbnRfYXJjcy4KCldlZCBKdWwgMjIgMTI6NDc6NDkgMTk5OCAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogZml4aW5jLmlyaXggKG1hdGguaCk6IEluc3RhbGwgd3JhcHBlciBpbnN0ZWFkIG9mIGNvcHlpbmcuCgpXZWQgSnVsIDIyIDEyOjM3OjE0IDE5OTggIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogdHJlZS5kZWYgKEVYUFJfV0lUSF9GSUxFX0xPQ0FUSU9OKTogRGVmaW5lZCBhcyBhbiAnZScgZXhwcmVzc2lvbgoJc28gV0ZMIGFyZSBleHBhbmRlZCBjb3JyZWN0bHkgd2hlbiBjb250YWluZWQgaW4gYSBDT01QT1VORF9FWFBSLgoJKiB0cmVlLmggKEVYUFJfV0ZMX0VNSVRfTElORV9OT1RFKTogQ2hhbmdlIG1hY3JvIG5vdCB0byB1c2UKCWxhbmdfZmxhZ18wLiBBZGRlZCBkb2N1bWVudGF0aW9uIGluIHRoZSBmbGFnIHRhYmxlLgoKVHVlIEp1bCAyMSAyMzoyODozNSAxOTk4ICBLbGF1cyBLYWVtcGYgIDxra2FlbXBmQHJtaS5kZT4KCgkqIGNjY3AuYyAoZG9faW5jbHVkZSk6IEZpeCB2YXggYyBzdHlsZSBpbmNsdWRlIGhhbmRsaW5nLgoKVHVlIEp1bCAyMSAxMzoyODoxOSAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjcGx1cy1kZW0uYyAoZG9fdHlwZSk6IFVzZSBkZW1hbmdsZV90ZW1wbGF0ZV92YWx1ZV9wYXJtIGZvciBhcnJheXMuCgpTdW4gSnVsIDEyIDAxOjI3OjA1IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGZvbGQtY29uc3QuYyAobm9uX2x2YWx1ZSk6IERvbid0IGRlYWwgd2l0aCBudWxsIHBvaW50ZXIKCWNvbnN0YW50cyBoZXJlLgoJKGZvbGQsIGNhc2UgQ09NUE9VTkRfRVhQUik6IFdyYXAgYSBjb25zdGFudCAwIGluIGEgTk9QX0VYUFIuCgpUdWUgSnVsIDIxIDE1OjQ5OjMxIDE5OTggIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIHJzNjAwMC5oIChQUkVESUNBVEVfQ09ERVMpOiBBZGQgQ09OU1RBTlRfUF9SVFguCgkqIHJzNjAwMC5tZCAobW92c2ksIG1vdmRpKTogQWRkIENPTlNUQU5UX1BfUlRYLgoJKiByczYwMDAuYyAoc2hvcnRfY2ludF9vcGVyYW5kKTogQWRkIENPTlNUQU5UX1BfUlRYLgoJKHVfc2hvcnRfY2ludF9vcGVyYW5kKTogU2FtZS4KCShyZWdfb3JfY2ludF9vcGVyYW5kKTogU2FtZS4KCShsb2dpY2FsX29wZXJhbmQpOiBTYW1lLgoJKGlucHV0X29wZXJhbmQpOiBTYW1lLgoJKHJlZ19vcl9zaG9ydF9vcGVyYW5kKTogVXNlIHVfc2hvcnRfY2ludF9vcGVyYW5kLgoKVHVlIEp1bCAyMSAwODo1Njo0MiAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEubWQgKGZpeF90cnVuY2Rmc2kyLCBmaXhfdHJ1bmNzZnNpMik6IFJlbW92ZSB0aGUgZGVmaW5lX2V4cGFuZHMsCglidXQga2VlcCB0aGUgaW5zbnMgYW5kIHNwbGl0cy4gIEFkanVzdCBzbyB3aGVuIHRoZSB1bHRpbWF0ZSBkZXN0aW5hdGlvbgoJaXMgbWVtb3J5LCB1c2UgY3Z0cWwuCgpUdWUgSnVsIDIxIDA4OjU1OjA5IDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBmbG93LmMgKHJlZ25vX3VuaW5pdGlhbGl6ZWQpOiBGaXhlZCByZWdzIGFyZSBuZXZlciB1bmluaXRpYWxpemVkLgoKVHVlIEp1bCAyMSAwMDozMTowMSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBnY2MuYyAoZG9fc3BlYyk6IENhbGwgImVycm9yIiBub3QgIndhcm5pbmciLgoKCSogY29uZmlndXJlLmluOiBGaXggbWlub3IgcHJvYmxlbXMgd2l0aCBnYXMgZmVhdHVyZSBkZXRlY3Rpb24gY29kZS4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKCSogZ2NjLmMgKGRvX3NwZWMpOiBJc3N1ZSBhIHdhcm5pbmcgZm9yICclW10nIHVzYWdlLgoKCSogVW5kbyB0aGlzIGNoYW5nZS4KCSogZ2NjLmM6IERlbGV0ZSAlW3NwZWNdIHN1cHBvcnQuCgkoZG9fc3BlY18xLCBjYXNlICcoJyk6IExpa2V3aXNlLgoJKGRvX3NwZWNfMSwgY2FzZSAnWycpOiBDYWxsIGVycm9yLgoKTW9uIEp1bCAyMCAyMjozNDoxNyAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEuaCAoQ1BQX1NQRUMpOiBUaWR5LiAgSG9vayB0byBjcHBfY3B1IGFuZCBjcHBfc3VidGFyZ2V0LgoJKENQUF9TVUJUQVJHRVRfU1BFQyk6IERlZmF1bHQgdG8gZW1wdHkgc3RyaW5nLgoJKENQUF9BTV8qLCBDUFBfSU1fKiwgQ1BQX0NQVV8qLCBDUFBfQ1BVX1NQRUMpOiBOZXcuCgkoRVhUUkFfU1BFQ1MsIFNVQlRBUkdFVF9FWFRSQV9TUEVDUyk6IE5ldy4KCSogYWxwaGEvZWxmLmggKExEX1NQRUMpOiBVc2UgJShlbGZfZHluYW1pY19saW5rZXIpLgoJKiBhbHBoYS9saW51eC1lbGYuaCAoU1VCVEFSR0VUX0VYVFJBX1NQRUNTKTogTmV3LgoJKExJQl9TUEVDKTogVGlkeS4KCSogYWxwaGEvbGludXguaCAoQ1BQX1BSRURFRklORVMpOiBUaWR5LgoJKiBhbHBoYS9uZXRic2QtZWxmLmggKFNVQlRBUkdFVF9FWFRSQV9TUEVDUyk6IE5ldy4KCSogYWxwaGEvbmV0YnNkLmggKENQUF9QUkVERUZJTkVTKTogVGlkeS4KCSogYWxwaGEvb3NmLmggKENQUF9QUkVERUZJTkVTKTogUmVtb3ZlIGJpdHMgc3Vic3VtZWQgYnkgQ1BQX0NQVV9TUEVDLgoJKiBhbHBoYS93aW4tbnQuaCAoQ1BQX1BSRURFRklORVMpOiBMaWtld2lzZS4KCSogYWxwaGEvdnNmLmggKENQUF9QUkVERUZJTkVTKTogTGlrZXdpc2UuCgkoQ1BQX1NVQlRBUkdFVF9TUEVDKTogTmV3LiAgRG8gdGhpcyBpbnN0ZWFkIG9mIG92ZXJyaWRpbmcgQ1BQX1NQRUMuCgkqIGFscGhhL3Z4d29ya3MuaDogTGlrZXdpc2UuCgpNb24gSnVsIDIwIDIyOjUxOjU3IDE5OTggIEtlbiBSYWVidXJuICA8cmFlYnVybkBjeWdudXMuY29tPgoKCSogbWlwcy5tZCAocmVsb2FkX291dHNpKTogQWRkZWQgbWlzc2luZyBSRUdOTyBjYWxsLgoJKHNtdWxzaTNfaGlnaHBhcnQsIHVtdWxzaTNfaGlnaHBhcnQpOiBQcm92aWRlIHByb3RvdHlwZSBmb3IKCWZ1bmN0aW9uIHBvaW50ZXIuCgkobXVsX2FjY19kaSwgbXVsX2FjY182NGJpdF9kaSk6IERvbid0IHVzZSBtYXRjaF9vcF9kdXAsIHVzZQoJYW5vdGhlciBtYXRjaF9vcGVyYXRvciBhbmQgY29tcGFyZSB0aGUgY29kZXMuCgoJKiBtaXBzLmggKE1BU0tfREVCVUdfRSwgTUFTS19ERUJVR19JKTogU2V0IHRvIHplcm8uCgoJKiBNSVBTIG11bHRpcGx5IHBhdHRlcm4gZml4ZXM6CgkqIG1pcHMuaCAoZW51bSByZWdfY2xhc3MsIFJFR19DTEFTU19OQU1FUywgUkVHX0NMQVNTX0NPTlRFTlRTKToKCUFkZCB1bmlvbiBjbGFzc2VzIGZvciBISSwgTE8sIG9yIEhJTE8gcGx1cyBnZW5lcmFsIHJlZ2lzdGVycy4KCShHRU5FUkFURV9NQUREKTogRGVsZXRlZC4KCSogbWlwcy5tZCAobXVsc2kzX211bHQzKTogRG9uJ3QgZGlzcGFyYWdlIG91dHB1dC1MTyBhbHRlcm5hdGl2ZS4KCUFkZCBUQVJHRVRfTUFEIHRvIGNvbmRpdGlvbi4KCShtdWxzaTMpOiBUZXN0IEhBVkVfbXVsc2kzX211bHQzLCBub3Qgc3BlY2lmaWMgZmxhZ3MuCgkobXVsX2FjY19zaSk6IEV4cGFuZCBHRU5FUkFURV9NQUREIGhlcmU7IGl0J3MgdGhlIG9ubHkgdXNlLiAgVXNlCgkiKmQiIGZvciBhY2N1bXVsYXRvciwgdG8gZ2l2ZSBwcmVmZXJlbmNlIHRvIExPIGluaXRpYWxseSBidXQgbm90CglkdXJpbmcgcmVsb2FkLgoKTW9uIEp1bCAyMCAxNjoxNjozOCAxOTk4ICBEYXZlIEJyb2xsZXkgIDxicm9sbGV5QGN5Z251cy5jb20+CgoJKiBjb25maWd1cmUuaW4gKGVuYWJsZV9jX21iY2hhcik6IE5ldyBjb25maWd1cmUgb3B0aW9uLgoJKGV4dHJhX2NwcF9vYmpzKTogQWx3YXlzIGF2YWlsYWJsZSBub3cuCgoJKiBjZXhwLnkgKG1iY2hhci5oKTogI2luY2x1ZGUgaXQuCgkoeXlsZXgpOiBIYW5kbGUgTXVsdGlieXRlIGNoYXJhY3RlcnMgaW4gY2hhcmFjdGVyIGxpdGVyYWxzLgoKCSogY2NjcC5jIChtYmNoYXIuaCk6ICNpbmNsdWRlIGl0LgoJKG1haW4pOiBTZXQgY2hhcmFjdGVyIHNldCBiYXNlZCBvbiBMQU5HIGVudmlyb25tZW50IHZhcmlhYmxlLgoJKHJlc2Nhbik6IEhhbmRsZSBtdWx0aWJ5dGUgY2hhcmFjdGVycyBpbiBjb21tZW50cy4KCShza2lwX2lmX2dyb3VwKTogU2VlIGFib3ZlLgoJKHZhbGlkYXRlX2Vsc2UpOiBTZWUgYWJvdmUuCgkoc2tpcF90b19lbmRfb2ZfY29tbWVudCk6IFNlZSBhYm92ZS4KCShtYWNhcmcxKTogU2VlIGFib3ZlLgoJKGRpc2NhcmRfY29tbWVudHMpOiBTZWUgYWJvdmUuCgkocmVzY2FuKTogSGFuZGxlIG11bHRpYnl0ZSBjaGFyYWN0ZXJzIGluIHN0cmluZyBhbmQgY2hhcmFjdGVyIGxpdGVyYWxzLgoJKGNvbGxlY3RfZXhwYW5zaW9uKTogU2VlIGFib3ZlLgoJKHNraXBfcXVvdGVkX3N0cmluZyk6IFNlZSBhYm92ZS4KCShtYWNyb2V4cGFuZCk6IFNlZSBhYm92ZS4KCShtYWNhcmcxKTogU2VlIGFib3ZlLgoJKGRpc2NhcmRfY29tbWVudHMpOiBTZWUgYWJvdmUuCgkoY2hhbmdlX25ld2xpbmVzKTogU2VlIGFib3ZlLgoKCSogYy1sZXguYyAobWJjaGFyLmgpOiAjaW5jbHVkZSBpdC4KCShHRVRfRU5WSVJPTk1FTlQpOiBOZXcgbWFjcm8uCgkoaW5pdF9sZXgpOiBTZXQgY2hhcmFjdGVyIHNldCBiYXNlZCBvbiBMQU5HIGVudmlyb25tZW50IHZhcmlhYmxlLgoJKHl5bGV4KTogSGFuZGxlIG11bHRpYnl0ZSBjaGFyYWN0ZXJzIGluIGNoYXJhY3RlciBsaXRlcmFscy4KCSh5eWxleCk6IEhhbmRsZSBtdWx0aWJ5dGUgY2hhcmFjdGVycyBpbiBzdHJpbmcgbGl0ZXJhbHMuCgoJKiBNYWtlZmlsZS5pbiAobWJjaGFyLm8pOiBOZXcgdGFyZ2V0LgoJKGNjY3AkKGV4ZWV4dCkpOiBAZXh0cmFfY3BwX29ianNAIGlzIGFsd2F5cyBhdmFpbGFibGUuCgkoY3BwbWFpbiQoZXhlZXh0KSk6IEBleHRyYV9jcHBfb2Jqc0AgaXMgYWx3YXlzIGF2YWlsYWJsZS4KCgkqIG1iY2hhci5bY2hdOiBOZXcgZmlsZXMgZm9yIG11bHRpYnl0ZSBjaGFyYWN0ZXIgaGFuZGxpbmcuCgpNb24gSnVsIDIwIDAxOjExOjExIDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSoganVtcC5jIChqdW1wX29wdGltaXplKTogV2hlbiBzaW1wbGlmeWluZyBub29wIG1vdmVzIGFuZAoJUFVTSF9ST1VORElORywgZml4IHRoaW5rbyBzbyB3ZSB1c2Ugc2FtZSBjcml0ZXJpb24gZm9yIGlkZW50aWZ5aW5nCgl0aGUgUFVTSGVzIHRvIHJld3JpdGUgaW4gc2Vjb25kIGxvb3AgYXMgd2UgZGlkIGluIHRoZSBmaXJzdC4KClN1biBKdWwgMTkgMDg6MjM6NTMgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY3BsdXMtZGVtLmMgKGRlbWFuZ2xlX25lc3RlZF9hcmdzKTogTWFrZSBmdW5jdGlvbiBkZWZpbml0aW9uCglzdGF0aWMgdG8gbWF0Y2ggdGhlIHByb3RvdHlwZS4KCkZyaSBKdWwgMTcgMTQ6NTg6NDQgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGFsbG9jYS5jOiBSZXNwZWN0IFVTRV9DX0FMTE9DQS4KCSogZ2VuY2hlY2suYyAoeG1hbGxvYyk6IElnbm9yZSBfX0dOVUNfXyBmb3IgZGVmaW5pdGlvbi4KCSogZ2VuZ2VucnRsLmMgKHhtYWxsb2MpOiBMaWtld2lzZS4KCkZyaSBKdWwgMTcgMTQ6MTg6MTQgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGxvb3AuaCAoc3RydWN0IGluZHVjdGlvbik6IEFkZCBub19jb25zdF9hZGR2YWwuCgkqIGxvb3AuYyAodGhlX21vdmFibGVzLCByZWdfYWRkcmVzc19jb3N0KTogTmV3IHZhcmlhYmxlcy4KCShpbml0X2xvb3ApOiBJbml0IHJlZ19hZGRyZXNzX2Nvc3QuCgkobG9vcF9vcHRpbWl6ZSk6IENhbGwgZW5kX2FsaWFzX2FuYWx5c2lzLgoJKHNjYW5fbG9vcCk6IEluaXQgdGhlX21vdmFibGVzLgoJKHJlY29yZF9naXYpOiBJbml0IGluZHVjdGlvbi0+bm9fY29uc3RfYWRkdmFsLgoJKGJhc2ljX2luZHVjdGlvbl92YXIpIFtQTFVTXTogVXNlIHJ0eF9lcXVhbF9wIGluc3RlYWQgb2YgPT0uCglbUkVHXTogUmVhcnJhbmdlIGxvb3Agc2VhcmNoIHRlc3QgdG8gY2F0Y2ggbW9yZSBjYXNlcy4KCShnZW5lcmFsX2luZHVjdGlvbl92YXIpOiBSZXR1cm4gc3VjY2VzcyBub3QgYmVuZWZpdDsgdGFrZSBhbiBleHRyYQoJYXJndW1lbnQgZm9yIHRoYXQuICBDaGFuZ2UgYWxsIGNhbGxlcnMuCgkoc2ltcGxpZnlfZ2l2X2V4cHIpIFtQTFVTXTogQWx3YXlzIGNvbWJpbmUgaW52YXJpYW50cy4gIFVzZSBzZ2VfcGx1cy4KCVtNVUxUXTogVXNlIHJ0eF9lcXVhbF9wIGluc3RlYWQgb2YgPT0uICBDb21iaW5lIHNpbXBsZSBpbnZhcmlhbnRzLgoJW2RlZmF1bHRdOiBTZWFyY2ggdGhlX21vdmFibGVzIGZvciBhZGRpdGlvbmFsIGNvbWJpbmF0aW9ucy4KCShzZ2VfcGx1c19jb25zdGFudCwgc2dlX3BsdXMpOiBOZXcgZnVuY3Rpb25zLgoJKGV4cHJlc3NfZnJvbV8xKTogTmV3IGZ1bmN0aW9uLgoJKGV4cHJlc3NfZnJvbSk6IEFsd2F5cyBkZWZpbmUuICBSZXdyaXRlIHVzaW5nIGV4cHJlc3NfZnJvbV8xLgoJKGNvbWJpbmVfZ2l2c19wKTogSGFuZGxlIG1vcmUgY2FzZXMuICBJZ25vcmUgYWRkcmVzcyBjb3N0LgoJKGNtcF9jb21iaW5lX2dpdnNfc3RhdHMpOiBOZXcgZnVuY3Rpb24uCgkoY29tYmluZV9naXZzX3VzZWRfb25jZSwgY29tYmluZV9naXZzX2JlbmVmaXRfZnJvbSk6IE5ldyBmdW5jdGlvbnMuCgkoY29tYmluZV9naXZzKTogUmV3cml0ZSB0byBkbyBiZXN0LWZpdCBjb21iaW5hdGlvbi4KCgkqIGZvbGQtY29uc3QuYyAob3BlcmFuZF9lcXVhbF9wKTogSGFuZGxlIFJUTF9FWFBSLgoJKGZvbGQpOiBEbyBhIGNvbXBsZXRlIChBKkMpKyhCKkMpIGFzc29jaWF0aW9uIGNoZWNrLgoKRnJpIEp1bCAxNyAxMToyMTo1NSAxOTk4ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBmdW5jdGlvbi5jIChmaXh1cF92YXJfcmVmc19pbnNucyk6IEhhbmRsZSBDTE9CQkVSIG9mIGEgQ09OQ0FULgoKRnJpIEp1bCAxNyAxMTo0ODo1NSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBtbjEwMzAwLmMgKE1PREVTX1RJRUFCTEVfUCk6IEZpeCB0eXBvLgoKRnJpIEp1bCAxNyAwMzoyNjoxMiAxOTk4ICBSaWhjYXJkIEVhcm5zaGF3ICAocmVhcm5zaGFAYXJtLmNvbSkKCgkqIHRyZWUuYyAodmFsaWRfbWFjaGluZV9hdHRyaWJ1dGUpOiBPbmx5IGNyZWF0ZSBhIG5ldyB0eXBlIHZhcmlhbnQgaWYKCXRoZXJlIGlzIGEgZGVjbCB0byB1c2UgaXQuCgpUaHUgSnVsIDE2IDE0OjQ4OjA0IDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBnY2MuYyAoZG9fc3BlY18xKTogQ29wZSB3aXRoICVnLyV1LyVVIG9wdGlvbnMgd2hpY2ggZG8gbm90IGhhdmUKCWEgc3VmZml4LgoKRnJpIEp1bCAxNyAwMzoyNDo0MCAxOTk4ICBIYW5zLVBldGVyIE5pbHNzb24gIDxocEBheGlzLnNlPgoKCSogZXh0ZW5kLnRleGkgKEV4cGxpY2l0IFJlZyBWYXJzKTogVHlwbzogY2hhbmdlICJtYXkgZGVsZXRlZCIgaW50byAibWF5CgliZSBkZWxldGVkIgoKVGh1IEp1bCAxNiAxNDo0ODo0NyAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBtbjEwMzAwLmMgKGNvdW50X3RzdF9pbnNucyk6IE5ldyBhcmcgb3JlZ19jb3VudHAuICBDYWxsZXJzIGNoYW5nZWQuCglTaW1wbGlmeSB0ZXN0cyBmb3IgY2xlYXJpbmcgYW4gYWRkcmVzcyByZWdpc3Rlci4KCShleHBhbmRfcHJvbG9ndWUpOiBDb3JyZXNwb25kaW5nIGNoYW5nZXMuCgoJKiBtbjEwMzAwLm1kIChtb3ZYWCBwYXR0ZXJucyk6IE1ha2Ugc3VyZSB0aGUgZGVzdGluYXRpb24gaXMgYW4KCUFERFJFU1NfUkVHIHdoZW4gc3Vic3RpdHV0aW5nICJ6ZXJvX2FyZWciIGZvciAoY29uc3RfaW50IDApLgoJKGxvZ2ljYWwgcGF0dGVybnMpOiBTcGxpdCBpbnRvIGV4cGFuZGVycyArIHBhdHRlcm5zLgoJKHplcm8gYW5kIHNpZ24gZXh0ZW5zaW9uIHBhdHRlcm5zKTogU2ltaWxhcmx5LgoJKHNoaWZ0IHBhdHRlcm5zKTogU2ltaWxhcmx5LgoKVGh1IEp1bCAxNiAwMToxNzo0NCAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogbG9vcC5jIChlbWl0X2l2X2FkZF9tdWx0KTogU2NhbiB0aGUgZW50aXJlIGluc24gbGlzdCBnZW5lcmF0ZWQKCWZvciB0aGUgc2VxdWVuY2UsIHJlY29yZGluZyBiYXNlIHZhbHVlcy4KCldlZCBKdWwgMTUgMTA6NDk6NTUgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGkzODYuaCAoQ1BQX0NQVV9TUEVDKTogUmVtb3ZlIC1Bc3lzdGVtKHVuaXgpLgoKVHVlIEp1bCAxNCAxNDoxNTozMCAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogZ2NjLmM6IFJlbW92ZSBBTlNJLUMgaXNtIGZyb20gLS1oZWxwIGNvZGUuCgoJKiB0b3BsZXYuYzogU3VwcG9ydCAtLWhlbHAgd2l0aCBVU0VfQ1BQTElCLgoKVHVlIEp1bCAxNCAxNDo0NjowOCAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW46IFJld29yayBnYXMgZmVhdHVyZSBjb2RlIHRvIHdvcmsgd2l0aCBzeW1saW5rIGJhc2VkCglzb3VyY2UgdHJlZXMuCgoJKiBleHRlbmQudGV4aTogQ2xhcmlmeSBzb21lIGlzc3VlcyByZWxhdGVkIHRvIGxvY2FsIHZhcmlhYmxlcwoJYXNzaWduZWQgdG8gZXhwbGljaXQgcmVnaXN0ZXJzLgoKCSogbW4xMDMwMC5tZCAobXVsc2kpOiBUdXJuIGludG8gZXhwYW5kZXIgKyBwYXR0ZXJuLgoKCSogbW4xMDMwMC5tZCAobW92c2ksIG1vdnNmLCBtb3ZkaSwgbW92ZGYpOiBSZW1vdmUgIngiIGZyb20gSSAtPiBhCglhbHRlcm5hdGl2ZS4KClR1ZSBKdWwgMTQgMDc6NDE6NTkgMTk5OCAgUmljaGFyZCBFYXJuc2hhdyAgKHJlYXJuc2hhQGFybS5jb20pCgoJKiBhcm0vdGNvZmYuaCAoVVNFUl9MQUJFTF9QUkVGSVgpOiBNYWtlIGl0IGVtcHR5IHRvIG1hdGNoIGNvZmYuaC4KClR1ZSBKdWwgMTQgMDM6MDI6NDQgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGFnYWluIHRvIGRpc3Rpbmd1aXNoIG1haW5saW5lIHRyZWUgZnJvbSB0aGUKCWVnY3MtMS4xIGJyYW5jaC4KClNlZSBDaGFuZ2VMb2cuMCBmb3IgZWFybGllciBjaGFuZ2VzLgoKTG9jYWwgVmFyaWFibGVzOgphZGQtbG9nLXRpbWUtZm9ybWF0OiBjdXJyZW50LXRpbWUtc3RyaW5nCkVuZDoK