IyBjb25maWd1cmUgb3B0aW9ucwolZGVmaW5lIAl3aXRoX3NubXAJMAolZGVmaW5lCQl3aXRoX3Z0eXNoCTEKJWRlZmluZQkJd2l0aF9vc3BmX3RlCTEKJWRlZmluZQkJd2l0aF9uc3NhCTEKJWRlZmluZQkJd2l0aF9vcGFxdWVfbHNhIDEKJWRlZmluZQkJd2l0aF90Y3BfemVicmEJMAolZGVmaW5lCQl3aXRoX3Z0eXNoCTEKJWRlZmluZQkJd2l0aF9wYW0JMQolZGVmaW5lCQl3aXRoX2lwdjYJMQolZGVmaW5lCQl3aXRoX29zcGZjbGllbnQgMQolZGVmaW5lCQl3aXRoX29zcGZhcGkJMQolZGVmaW5lCQl3aXRoX211bHRpcGF0aAk2NAolZGVmaW5lCQl6ZWJyYV91c2VyCXplYnJhCiVkZWZpbmUJCXZ0eV9ncm91cAl6ZWJyYXZ0eQoKIyBwYXRoIGRlZmluZXMKJWRlZmluZQkJX3N5c2NvbmZkaXIJL2V0Yy96ZWJyYQolZGVmaW5lCQl6ZWJfc3JjCQkle19idWlsZGRpcn0vJXtuYW1lfS0le3ZlcnNpb259CiVkZWZpbmUJCXplYl9yaF9zcmMJJXt6ZWJfc3JjfS9yZWRoYXQKJWRlZmluZQkJemViX2RvY3MJJXt6ZWJfc3JjfS9kb2MKCiMgZGVmaW5lcyBmb3IgY29uZmlndXJlCiVkZWZpbmUJCV9saWJleGVjZGlyCSV7X2V4ZWNfcHJlZml4fS9saWJleGVjL3plYnJhCiVkZWZpbmUJCV9pbmNsdWRlZGlyCSV7X3ByZWZpeH0vaW5jbHVkZS96ZWJyYQolZGVmaW5lCQlfbGliZGlyCQkle19leGVjX3ByZWZpeH0vJXtfbGlifS96ZWJyYQolZGVmaW5lCQlfbG9jYWxzdGF0ZWRpcgkvdmFyL3J1bi96ZWJyYQoKU3VtbWFyeTogUm91dGluZyBkYWVtb24KTmFtZToJCXplYnJhClZlcnNpb246CUBWRVJTSU9OQApSZWxlYXNlOglAQ09ORkRBVEVAMDEKTGljZW5zZToJR1BMCkdyb3VwOiBTeXN0ZW0gRW52aXJvbm1lbnQvRGFlbW9ucwpTb3VyY2UwOglmdHA6Ly9mdHAuemVicmEub3JnL3B1Yi96ZWJyYS8le25hbWV9LSV7dmVyc2lvbn0udGFyLmd6ClVSTDoJCWh0dHA6Ly93d3cuemVicmEub3JnLwolaWYgJXdpdGhfc25tcAojQnVpbGRSZXF1aXJlczoJdWNkLXNubXAtZGV2ZWwKUHJlcmVxOgkJdWNkLXNubXAKJWVuZGlmCiVpZiAld2l0aF92dHlzaApCdWlsZFJlcXVpcmVzOglyZWFkbGluZSByZWFkbGluZS1kZXZlbCBuY3Vyc2VzIG5jdXJzZXMtZGV2ZWwKUHJlcmVxOgkJcmVhZGxpbmUgbmN1cnNlcwolZW5kaWYKQnVpbGRSZXF1aXJlczoJdGV4aW5mbyB0ZXRleCBhdXRvY29uZiBvcGVuc3NsLWRldmVsIHBhbS1kZXZlbCBwYXRjaAojIEluaXRzY3JpcHRzID4gNS42MCBpcyByZXF1aXJlZCBmb3IgSVB2NiBzdXBwb3J0ClByZXJlcToJCWluaXRzY3JpcHRzID49IDUuNjAKUHJlcmVxOgkJb3BlbnNzbCBuY3Vyc2VzIHJlYWRsaW5lIHBhbQpQcmVyZXE6CQkvc2Jpbi9pbnN0YWxsLWluZm8KUHJvdmlkZXM6CXJvdXRpbmdkYWVtb24KQnVpbGRSb290Ogkle190bXBwYXRofS8le25hbWV9LSV7dmVyc2lvbn0tcm9vdApPYnNvbGV0ZXM6CWJpcmQgZ2F0ZWQgbXJ0CgolZGVzY3JpcHRpb24KR05VIFplYnJhIGlzIGEgZnJlZSBzb2Z0d2FyZSB0aGF0IG1hbmFnZXMgVENQL0lQIGJhc2VkIHJvdXRpbmcKcHJvdG9jb2wuIEl0IHRha2VzIG11bHRpLXNlcnZlciBhbmQgbXVsdGktdGhyZWFkIGFwcHJvYWNoIHRvIHJlc29sdmUKdGhlIGN1cnJlbnQgY29tcGxleGl0eSBvZiB0aGUgSW50ZXJuZXQuCgpHTlUgWmVicmEgc3VwcG9ydHMgQkdQNCwgQkdQNCssIE9TUEZ2MiwgT1NQRnYzLCBSSVB2MSwgUklQdjIsIGFuZCBSSVBuZy4KCkdOVSBaZWJyYSBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGFzIGEgUm91dGUgU2VydmVyIGFuZCBhIFJvdXRlClJlZmxlY3Rvci4gSXQgaXMgbm90IGEgdG9vbGtpdCwgaXQgcHJvdmlkZXMgZnVsbCByb3V0aW5nIHBvd2VyIHVuZGVyCmEgbmV3IGFyY2hpdGVjdHVyZS4gR05VIFplYnJhIGlzIHVuaXF1ZSBpbiBkZXNpZ24gaW4gdGhhdCBpdCBoYXMgYQpwcm9jZXNzIGZvciBlYWNoIHByb3RvY29sLgoKJXBhY2thZ2UgY29udHJpYgpTdW1tYXJ5OiBjb250cmliIHRvb2xzIGZvciB6ZWJyYQpHcm91cDogU3lzdGVtIEVudmlyb25tZW50L0RhZW1vbnMKCiVkZXNjcmlwdGlvbiBjb250cmliCkNvbnRyaWJ1dGVkLzNyZCBwYXJ0eSB0b29scyB3aGljaCBtYXkgYmUgb2YgdXNlIHdpdGggemVicmEuCgolcGFja2FnZSBkZXZlbApTdW1tYXJ5OiBIZWFkZXIgYW5kIG9iamVjdCBmaWxlcyBmb3IgemVicmEgZGV2ZWxvcG1lbnQKR3JvdXA6IFN5c3RlbSBFbnZpcm9ubWVudC9EYWVtb25zCgolZGVzY3JpcHRpb24gZGV2ZWwKVGhlIHplYnJhLWRldmVsIHBhY2thZ2UgY29udGFpbnMgdGhlIGhlYWRlciBhbmQgb2JqZWN0IGZpbGVzIG5lY2Nlc3NhcnkgZm9yCmRldmVsb3BpbmcgT1NQRi1BUEkgYW5kIHplYnJhIGFwcGxpY2F0aW9ucy4KCiVwcmVwCiVzZXR1cCAgLXEKCiVidWlsZAolY29uZmlndXJlIFwKJWlmICV3aXRoX2lwdjYKCS0tZW5hYmxlLWlwdjYgXAolZW5kaWYKJWlmICV3aXRoX3NubXAKCS0tZW5hYmxlLXNubXAgXAolZW5kaWYKJWlmICV3aXRoX211bHRpcGF0aAoJLS1lbmFibGUtbXVsdGlwYXRoPSV3aXRoX211bHRpcGF0aCBcCiVlbmRpZgolaWYgJXdpdGhfdGNwX3plYnJhCgktLWVuYWJsZS10Y3AtemVicmEgXAolZW5kaWYKJWlmICV3aXRoX25zc2EKCS0tZW5hYmxlLW5zc2EgXAolZW5kaWYKJWlmICV3aXRoX29wYXF1ZV9sc2EKCS0tZW5hYmxlLW9wYXF1ZS1sc2EgXAolZW5kaWYKJWlmICV3aXRoX29zcGZfdGUKCS0tZW5hYmxlLW9zcGYtdGUgXAolZW5kaWYKJWlmICV3aXRoX3Z0eXNoCgktLWVuYWJsZS12dHlzaCBcCiVlbmRpZgolaWYgJXdpdGhfb3NwZmNsaWVudCAKCS0tZW5hYmxlLW9zcGZjbGllbnQ9eWVzIFwKJWVsc2UKCS0tZW5hYmxlLW9zcGZjbGllbnQ9bm9cCiVlbmRpZgolaWYgJXdpdGhfb3NwZmFwaQoJLS1lbmFibGUtb3NwZmFwaT15ZXMgXAolZWxzZQoJLS1lbmFibGUtb3NwZmFwaT1ubyBcCiVlbmRpZgolaWYgJXdpdGhfcGFtCgktLXdpdGgtbGlicGFtIFwKJWVuZGlmCiVpZiAlemVicmFfdXNlcgoJLS1lbmFibGUtdXNlcj0lemVicmFfdXNlciBcCgktLWVuYWJsZS1ncm91cD0lemVicmFfdXNlciBcCiVlbmRpZgolaWYgJXZ0eV9ncm91cAoJLS1lbmFibGUtdnR5LWdyb3VwPSV2dHlfZ3JvdXAgXAolZW5kaWYKLS13aXRoLWNmbGFncz0iLU8yIiBcCi0tZW5hYmxlLW5ldGxpbmsKCm1ha2UgJXs/X3NtcF9tZmxhZ3N9IE1BS0VJTkZPPSJtYWtlaW5mbyAtLW5vLXNwbGl0IgoKcHVzaGQgZG9jCnRleGkyaHRtbCB6ZWJyYS50ZXhpCnBvcGQKCiVpbnN0YWxsCnJtIC1yZiAkUlBNX0JVSUxEX1JPT1QKCmluc3RhbGwgLWQgJFJQTV9CVUlMRF9ST09UL2V0Yy97cmMuZC9pbml0LmQsc3lzY29uZmlnLGxvZ3JvdGF0ZS5kLHBhbS5kfSBcCgkkUlBNX0JVSUxEX1JPT1QvdmFyL2xvZy96ZWJyYSAkUlBNX0JVSUxEX1JPT1Qle19pbmZvZGlyfQoKbWFrZSBpbnN0YWxsIFwKCURFU1RESVI9JFJQTV9CVUlMRF9ST09UCgojIFJlbW92ZSB0aGlzIGZpbGUsIGFzIGl0IGlzIHVuaW5zdGFsbGVkIGFuZCBjYXVzZXMgZXJyb3JzIHdoZW4gYnVpbGRpbmcgb24gUkg5CnJtIC1yZiAkUlBNX0JVSUxEX1JPT1QvdXNyL3NoYXJlL2luZm8vZGlyCgppbnN0YWxsICV7emViX3JoX3NyY30vemVicmEuaW5pdCAkUlBNX0JVSUxEX1JPT1QvZXRjL3JjLmQvaW5pdC5kL3plYnJhCmluc3RhbGwgJXt6ZWJfcmhfc3JjfS9iZ3BkLmluaXQgJFJQTV9CVUlMRF9ST09UL2V0Yy9yYy5kL2luaXQuZC9iZ3BkCiVpZiAld2l0aF9pcHY2Cmluc3RhbGwgJXt6ZWJfcmhfc3JjfS9vc3BmNmQuaW5pdCAkUlBNX0JVSUxEX1JPT1QvZXRjL3JjLmQvaW5pdC5kL29zcGY2ZAppbnN0YWxsICV7emViX3JoX3NyY30vcmlwbmdkLmluaXQgJFJQTV9CVUlMRF9ST09UL2V0Yy9yYy5kL2luaXQuZC9yaXBuZ2QKJWVuZGlmCmluc3RhbGwgJXt6ZWJfcmhfc3JjfS9vc3BmZC5pbml0ICRSUE1fQlVJTERfUk9PVC9ldGMvcmMuZC9pbml0LmQvb3NwZmQKaW5zdGFsbCAle3plYl9yaF9zcmN9L3JpcGQuaW5pdCAkUlBNX0JVSUxEX1JPT1QvZXRjL3JjLmQvaW5pdC5kL3JpcGQKaW5zdGFsbCAtbTY0NCAle3plYl9yaF9zcmN9L3plYnJhLnBhbSAkUlBNX0JVSUxEX1JPT1QvZXRjL3BhbS5kL3plYnJhCmluc3RhbGwgLW02NDQgJXt6ZWJfcmhfc3JjfS96ZWJyYS5sb2dyb3RhdGUgJFJQTV9CVUlMRF9ST09UL2V0Yy9sb2dyb3RhdGUuZC96ZWJyYQppbnN0YWxsIC1kIC1tNzUwICAkUlBNX0JVSUxEX1JPT1QvdmFyL3J1bi96ZWJyYQoKJXByZQojIGFkZCB2dHlfZ3JvdXAKJWlmICV2dHlfZ3JvdXAKZ3JvdXBhZGQgLXIgJXZ0eV9ncm91cCAyPiAvZGV2L251bGwgfHwgOgolZW5kaWYKIyBhZGQgemVicmEgdXNlciBhbmQgZ3JvdXAKJWlmICV6ZWJyYV91c2VyCi91c3Ivc2Jpbi91c2VyYWRkIC1NIC1yIC1zIC9iaW4vZmFsc2UgLWMgIlplYnJhIHJvdXRpbmcgc3VpdGUiIFwKIC1kICVfbG9jYWxzdGF0ZWRpciAlemVicmFfdXNlciAyPiAvZGV2L251bGwgfHwgOgolZW5kaWYKCiVwb3N0CiMgemVicmFfc3BlY19hZGRfc2VydmljZSA8c2VydmljZSBuYW1lPiA8cG9ydC9wcm90bz4gPGNvbW1lbnQ+CiMgZS5nLiB6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlIHplYnJhc3J2IDI2MDAvdGNwICJ6ZWJyYSBzZXJ2aWNlIgoKemVicmFfc3BlY19hZGRfc2VydmljZSAoKQp7CiAgIyBBZGQgcG9ydCAvZXRjL3NlcnZpY2VzIGVudHJ5IGlmIGl0IGlzbid0IGFscmVhZHkgdGhlcmUgCiAgaWYgWyAtZiAvZXRjL3NlcnZpY2VzIF0gJiYgISBncmVwIC1xICJeJDFbXmEtekEtWjAtOV0iIC9ldGMvc2VydmljZXMgOyB0aGVuCiAgICBlY2hvICIkMQkJJDIJCQkjICQzIiAgPj4gL2V0Yy9zZXJ2aWNlcwogIGZpCn0KCnplYnJhX3NwZWNfYWRkX3NlcnZpY2UgemVicmFzcnYgMjYwMC90Y3AgInplYnJhIHNlcnZpY2UiCnplYnJhX3NwZWNfYWRkX3NlcnZpY2UgemVicmEgICAgMjYwMS90Y3AgInplYnJhIHZ0eSIKemVicmFfc3BlY19hZGRfc2VydmljZSByaXBkICAgICAyNjAyL3RjcCAiUklQZCB2dHkiCiVpZiAld2l0aF9pcHY2CnplYnJhX3NwZWNfYWRkX3NlcnZpY2UgcmlwbmdkICAgMjYwMy90Y3AgIlJJUG5nZCB2dHkiCiVlbmRpZgp6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlIG9zcGZkICAgIDI2MDQvdGNwICJPU1BGZCB2dHkiCnplYnJhX3NwZWNfYWRkX3NlcnZpY2UgYmdwZCAgICAgMjYwNS90Y3AgIkJHUGQgdnR5IgolaWYgJXdpdGhfaXB2Ngp6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlIG9zcGY2ZCAgIDI2MDYvdGNwICJPU1BGNmQgdnR5IgolZW5kaWYKJWlmICV3aXRoX29zcGZhcGkKemVicmFfc3BlY19hZGRfc2VydmljZSBvc3BmYXBpICAyNjA3L3RjcCAiT1NQRi1BUEkiCiVlbmRpZgoKL3NiaW4vY2hrY29uZmlnIC0tYWRkIHplYnJhIAovc2Jpbi9jaGtjb25maWcgLS1hZGQgcmlwZAolaWYgJXdpdGhfaXB2Ngovc2Jpbi9jaGtjb25maWcgLS1hZGQgcmlwbmdkCi9zYmluL2Noa2NvbmZpZyAtLWFkZCBvc3BmNmQKJWVuZGlmCi9zYmluL2Noa2NvbmZpZyAtLWFkZCBvc3BmZAovc2Jpbi9jaGtjb25maWcgLS1hZGQgYmdwZAoKL3NiaW4vaW5zdGFsbC1pbmZvICV7X2luZm9kaXJ9L3plYnJhLmluZm8uZ3ogJXtfaW5mb2Rpcn0vZGlyCgojIENyZWF0ZSBkdW1teSBmaWxlcyBpZiB0aGV5IGRvbid0IGV4aXN0IHNvIGJhc2ljIGZ1bmN0aW9ucyBjYW4gYmUgdXNlZC4KaWYgWyAhIC1lICV7X3N5c2NvbmZkaXJ9L3plYnJhLmNvbmYgXTsgdGhlbgoJZWNobyAiaG9zdG5hbWUgYGhvc3RuYW1lYCIgPiAle19zeXNjb25mZGlyfS96ZWJyYS5jb25mCgljaG1vZCA2NDAgJXtfc3lzY29uZmRpcn0vemVicmEuY29uZgpmaQppZiBbICEgLWUgJXtfc3lzY29uZmRpcn0vdnR5c2guY29uZiBdOyB0aGVuCgl0b3VjaCAle19zeXNjb25mZGlyfS92dHlzaC5jb25mCgljaG1vZCA2NDAgJXtfc3lzY29uZmRpcn0vdnR5c2guY29uZgpmaQoKJXBvc3R1bgppZiBbICIkMSIgLWdlICAiMSIgXTsgdGhlbgoJL2V0Yy9yYy5kL2luaXQuZC96ZWJyYSAgY29uZHJlc3RhcnQgPi9kZXYvbnVsbCAyPiYxCgkvZXRjL3JjLmQvaW5pdC5kL3JpcGQgICBjb25kcmVzdGFydCA+L2Rldi9udWxsIDI+JjEKJWlmICV3aXRoX2lwdjYKCS9ldGMvcmMuZC9pbml0LmQvcmlwbmdkIGNvbmRyZXN0YXJ0ID4vZGV2L251bGwgMj4mMQolZW5kaWYKCS9ldGMvcmMuZC9pbml0LmQvb3NwZmQgIGNvbmRyZXN0YXJ0ID4vZGV2L251bGwgMj4mMQolaWYgJXdpdGhfaXB2NgoJL2V0Yy9yYy5kL2luaXQuZC9vc3BmNmQgY29uZHJlc3RhcnQgPi9kZXYvbnVsbCAyPiYxCiVlbmRpZgoJL2V0Yy9yYy5kL2luaXQuZC9iZ3BkICAgY29uZHJlc3RhcnQgPi9kZXYvbnVsbCAyPiYxCmZpCi9zYmluL2luc3RhbGwtaW5mbyAtLWRlbGV0ZSAle19pbmZvZGlyfS96ZWJyYS5pbmZvLmd6ICV7X2luZm9kaXJ9L2RpcgoKJXByZXVuCmlmIFsgIiQxIiA9ICIwIiBdOyB0aGVuCiAgICAgICAgL3NiaW4vY2hrY29uZmlnIC0tZGVsIHplYnJhCgkvc2Jpbi9jaGtjb25maWcgLS1kZWwgcmlwZAolaWYgJXdpdGhfaXB2NgoJL3NiaW4vY2hrY29uZmlnIC0tZGVsIHJpcG5nZAolZW5kaWYKCS9zYmluL2Noa2NvbmZpZyAtLWRlbCBvc3BmZAolaWYgJXdpdGhfaXB2NgoJL3NiaW4vY2hrY29uZmlnIC0tZGVsIG9zcGY2ZAolZW5kaWYKCS9zYmluL2Noa2NvbmZpZyAtLWRlbCBiZ3BkCmZpCgolY2xlYW4KI3JtIC1yZiAkUlBNX0JVSUxEX1JPT1QKCiVmaWxlcwolZGVmYXR0cigtLHJvb3Qscm9vdCkKJWRvYyAqLyouc2FtcGxlKiBBVVRIT1JTIENPUFlJTkcKJWRvYyBkb2MvemVicmEuaHRtbAolZG9jIGRvYy9tcGxzCiVkb2MgQ2hhbmdlTG9nIElOU1RBTEwgTkVXUyBSRUFETUUgUkVQT1JUSU5HLUJVR1MgU0VSVklDRVMgVE9ETwolaWYgJXplYnJhX3VzZXIKJWRpciAlYXR0cig3NTEsJXplYnJhX3VzZXIsJXplYnJhX3VzZXIpICV7X3N5c2NvbmZkaXJ9CiVkaXIgJWF0dHIoNzUwLCV6ZWJyYV91c2VyLCV6ZWJyYV91c2VyKSAvdmFyL2xvZy96ZWJyYSAKJWRpciAlYXR0cig3NTEsJXplYnJhX3VzZXIsJXplYnJhX3VzZXIpIC92YXIvcnVuL3plYnJhCiVlbHNlCiVkaXIgJWF0dHIoNzUwLHJvb3Qscm9vdCkgJXtfc3lzY29uZmRpcn0KJWRpciAlYXR0cig3NTAscm9vdCxyb290KSAvdmFyL2xvZy96ZWJyYQolZGlyICVhdHRyKDc1NSxyb290LHJvb3QpIC91c3Ivc2hhcmUvaW5mbwolZGlyICVhdHRyKDc1MCxyb290LHJvb3QpIC92YXIvcnVuL3plYnJhCiVlbmRpZgolaWYgJXZ0eV9ncm91cAolYXR0cig3NTAsJXplYnJhX3VzZXIsJXZ0eV9ncm91cCkgJXtfc3lzY29uZmRpcn0vdnR5c2guY29uZi5zYW1wbGUKJWVuZGlmCiV7X2luZm9kaXJ9LyppbmZvKgole19tYW5kaXJ9L21hbiovKgole19zYmluZGlyfS8qCiVpZiAld2l0aF92dHlzaAole19iaW5kaXJ9LyoKJWVuZGlmCiVjb25maWcgL2V0Yy96ZWJyYS9bIXZdKgolY29uZmlnIC9ldGMvcmMuZC9pbml0LmQvKgolY29uZmlnKG5vcmVwbGFjZSkgL2V0Yy9wYW0uZC96ZWJyYQolY29uZmlnKG5vcmVwbGFjZSkgJWF0dHIoNjQwLHJvb3Qscm9vdCkgL2V0Yy9sb2dyb3RhdGUuZC8qCgolZmlsZXMgY29udHJpYgolZGVmYXR0cigtLHJvb3Qscm9vdCkKJWRvYyB0b29scwoKJWZpbGVzIGRldmVsCiVkZWZhdHRyKC0scm9vdCxyb290KQolZGlyICV7X2xpYmRpcn0vKgolZGlyICV7X2luY2x1ZGVkaXJ9L29zcGZkLyoKJWlmICV3aXRoX29zcGZhcGkKJWRpciAle19pbmNsdWRlZGlyfS9vc3BmYXBpLyoKJWVuZGlmCgolY2hhbmdlbG9nCiogVHVlIE1hciAyMCAyMDAzIFBhdWwgSmFrbWEgPHBhdWxAZGlzaG9uZS5zdD4KLSB6ZWJyYSBwcml2aWxlZ2VzIHN1cHBvcnQKCiogTW9uIE1hciAxOCAyMDAzIFBhdWwgSmFrbWEgPHBhdWxAZGlzaG9uZS5zdD4KLSBGaXggbWVtIGxlYWsgaW4gJ3Nob3cgdGhyZWFkIGNwdScKLSBSYWxwaCBLZWxsZXIncyBPU1BGLUFQSQotIEFtaXI6IEZpeCBjb25maWd1cmUuYWMgZm9yIG5ldC1zbm1wCgoqIFNhdCBNYXIgMSAyMDAzIFBhdWwgSmFrbWEgPHBhdWxAZGlzaG9uZS5zdD4KLSBvc3BmZCBJT1MgcHJlZml4IHRvIGludGVyZmFjZSBtYXRjaGluZyBmb3IgJ25ldHdvcmsnIHN0YXRlbWVudAotIHRlbXBvcmFyeSBmaXggZm9yIFB0UCBhbmQgSVB2NgotIHN5bmMgdG8gemVicmEub3JnIENWUwoKKiBNb24gSmFuIDIwIDIwMDMgUGF1bCBKYWttYSA8cGF1bEBkaXNob25lLnN0PgotIHVwZGF0ZSB0byBsYXRlc3QgY3ZzCi0gWW9uJ3MgInNob3cgdGhyZWFkIGNwdSIgcGF0Y2ggLSAxNzIxNwotIHdhbGsgdXAgdHJlZSAtIDE3MjE4Ci0gb3NwZmQgTlNTQSBmaXhlcyAtIDE2NjgxCi0gb3NwZmQgbnNtIGZpeGVzIC0gMTY4MjQKLSBvc3BmZCBPTFNBIGZpeGVzIGFuZCBuZXcgZmVhdHVyZSAtIDE2ODIzIAotIEtBTUUgYW5kIGlmaW5kZXggZml4ZXMgLSAxNjUyNQotIHNwZWMgZmlsZSBjaGFuZ2VzIHRvIGFsbG93IHJlZGhhdCBmaWxlcyB0byBiZSBpbiB0cmVlCgoqIFNhdCBEZWMgMjggMjAwMiBBbGV4YW5kZXIgSG9vZ2VyaHVpcyA8YWxleGhAaWhhdGVudC5jb20+Ci0gQWRkZWQgY29uZGl0aW9uYWxzIGZvciBidWlsZGluZyB3aXRoKG91dCkgSVB2NiwgdnR5c2gsIFJJUCwgQkdQCi0gRml4ZWQgdXAgc29tZSBidWlsZCByZXF1aXJlbWVudHMgKHBhdGNoKQotIEFkZGVkIGNvbmRpdGlvbmFsIGJ1aWxkIHJlcXVpcmVtZW50cyBmb3IgdnR5c2ggLyBzbm1wCi0gQWRkZWQgY29uZGl0aW9uYWwgdG8gJWZpbGVzIGZvciAlX2JpbmRpciBkZXBlbmRpbmcgb24gdnR5c2gKCiogTW9uIE5vdiAxMSAyMDAyIFBhdWwgSmFrbWEgPHBhdWxqQGFscGh5cmEuaWU+Ci0gdXBkYXRlIHRvIGxhdGVzdCBDVlMKLSBhZGQgR3JlZyBUcm94ZWwncyBtZDUgYnVmZmVyIGNvcHkvZHVwIGZpeAotIGFkZCBSSVB2MSBmaXgKLSBhZGQgRnJhbmsncyBtdWx0aWNhc3QgZmxhZyBmaXgKCiogV2VkIE9jdCAwOSAyMDAyIFBhdWwgSmFrbWEgPHBhdWxqQGFscGh5cmEuaWU+Ci0gdXBkYXRlIHRvIGxhdGVzdCBDVlMKLSB0aW1lc3RhbXBlZCBjcnlwdF9zZXFudW0gcGF0Y2gKLSBvaS0+b25fd3JpdGVfcSBmaXgKCiogTW9uIFNlcCAzMCAyMDAyIFBhdWwgSmFrbWEgPHBhdWxqQGFscGh5cmEuaWU+Ci0gdXBkYXRlIHRvIGxhdGVzdCBDVlMKLSBhZGQgdnR5c2ggJ3dyaXRlLWNvbmZpZyAoaW50ZWdyYXRlZHxkYWVtb24pJyBwYXRjaAotIGFsd2F5cyAnbWFrZSByZWJ1aWxkJyBpbiB2dHlzaC8gdG8gY2F0Y2ggbmV3IGNvbW1hbmRzCgoqIEZyaSBTZXAgMTMgMjAwMiBQYXVsIEpha21hIDxwYXVsakBhbHBoeXJhLmllPgotIHVwZGF0ZSB0byAwLjkzYgoKKiBXZWQgU2VwIDExIDIwMDIgUGF1bCBKYWttYSA8cGF1bGpAYWxwaHlyYS5pZT4KLSB1cGRhdGUgdG8gbGF0ZXN0IENWUwotIGFkZCAiL3NiaW4vaXAgcm91dGUgZmx1c2ggcHJvdG8gemVicmEiIHRvIHplYnJhIFJIIGluaXQgb24gc3RhcnR1cAoKKiBTYXQgQXVnIDI0IDIwMDIgUGF1bCBKYWttYSA8cGF1bGpAYWxwaHlyYS5pZT4KLSB1cGRhdGUgdG8gY3VycmVudCBDVlMKLSBhZGQgT1NQRiBwb2ludCB0byBtdWx0aXBvaW50IHBhdGNoCi0gYWRkIE9TUEYgYnVnZml4ZXMKLSBhZGQgQkdQIGhhc2ggb3B0aW1pc2F0aW9uIHBhdGNoCgoqIEZyaSBKdW4gMTQgMjAwMiBQYXVsIEpha21hIDxwYXVsakBhbHBoeXJhLmllPgotIHVwZGF0ZSB0byAwLjkzLXByZTEgLyBDVlMKLSBhZGQgbGluayBzdGF0ZSBkZXRlY3Rpb24gc3VwcG9ydAotIGFkZCBnZW5lcmljIFB0UCBhbmQgUkZDMzAyMSBzdXBwb3J0Ci0gdmFyaW91cyBidWcgZml4ZXMKCiogVGh1IEF1ZyAwOSAyMDAxIEVsbGlvdCBMZWUgPHNvcHdpdGhAcmVkaGF0LmNvbT4gMC45MWEtNgotIEZpeCBidWcgIzUxMzM2CgoqIFdlZCBBdWcgIDEgMjAwMSBUcm9uZCBFaXZpbmQgR2xvbXNy+GQgPHRlZ0ByZWRoYXQuY29tPiAwLjkxYS01Ci0gVXNlIGdlbmVyaWMgaW5pdHNjcmlwdCBzdHJpbmdzIGluc3RlYWQgb2YgaW5pdHNjcmlwdCBzcGVjaWZpYwogICggIlN0YXJ0aW5nIGZvbzogIiAtPiAiU3RhcnRpbmcgJHByb2c6IiApCgoqIEZyaSBKdWwgMjcgMjAwMSBFbGxpb3QgTGVlIDxzb3B3aXRoQHJlZGhhdC5jb20+IDAuOTFhLTQKLSBCdW1wIHRoZSByZWxlYXNlIHdoZW4gcmVidWlsZGluZyBpbnRvIHRoZSBkaXN0LgoKKiBUdWUgRmViICA2IDIwMDEgVGltIFBvd2VycyA8dGltcEByZWRoYXQuY29tPgotIGJ1aWx0IGZvciBQb3dlcnRvb2xzCgoqIFN1biBGZWIgIDQgMjAwMSBQZWtrYSBTYXZvbGEgPHBla2thc0BuZXRjb3JlLmZpPiAKLSBIYWNrZWQgdXAgZnJvbSBQTEQgTGludXggMC45MC0xLCBNYW5kcmFrZSAwLjkwLTFtZGsgYW5kIG9uZSBmcm9tIHplYnJhLm9yZy4KLSBVcGRhdGUgdG8gMC45MWEKLSBWZXJ5IGhlYXZ5IG1vZGlmaWNhdGlvbnMgdG8gaW5pdC5kLyosIC5zcGVjLCBwYW0sIGkxOG4sIGxvZ3JvdGF0ZSwgZXRjLgotIFNob3VsZCBiZSBxdWl0ZSBSZWQgSGF0J2lzcXVlIG5vdy4K