IyBjb25maWd1cmUgb3B0aW9ucwolZGVmaW5lIAl3aXRoX3NubXAJMQolZGVmaW5lCQl3aXRoX3Z0eXNoCTEKJWRlZmluZQkJd2l0aF9vc3BmX3RlCTEKJWRlZmluZQkJd2l0aF9uc3NhCTEKJWRlZmluZQkJd2l0aF9vcGFxdWVfbHNhIDEKJWRlZmluZQkJd2l0aF90Y3BfemVicmEJMAolZGVmaW5lCQl3aXRoX3Z0eXNoCTEKJWRlZmluZQkJd2l0aF9wYW0JMQolZGVmaW5lCQl3aXRoX2lwdjYJMQolZGVmaW5lCQl3aXRoX29zcGZjbGllbnQgMQolZGVmaW5lCQl3aXRoX29zcGZhcGkJMQolZGVmaW5lCQl3aXRoX2lyZHAJMQolZGVmaW5lCQl3aXRoX2lzaXNkCTAKJWRlZmluZQkJd2l0aF9zaGFyZWQJMQolZGVmaW5lCQl3aXRoX211bHRpcGF0aAk2NAolZGVmaW5lCQlxdWFnZ2FfdXNlcglxdWFnZ2EKJWRlZmluZQkJdnR5X2dyb3VwCXF1YWdnYXZ0eQoKIyBwYXRoIGRlZmluZXMKJWRlZmluZQkJX3N5c2NvbmZkaXIJL2V0Yy9xdWFnZ2EKJWRlZmluZQkJemViX3NyYwkJJXtfYnVpbGRkaXJ9LyV7bmFtZX0tJXt2ZXJzaW9ufQolZGVmaW5lCQl6ZWJfcmhfc3JjCSV7emViX3NyY30vcmVkaGF0CiVkZWZpbmUJCXplYl9kb2NzCSV7emViX3NyY30vZG9jCgojIGRlZmluZXMgZm9yIGNvbmZpZ3VyZQolZGVmaW5lCQlfbGliZXhlY2Rpcgkle19leGVjX3ByZWZpeH0vbGliZXhlYy9xdWFnZ2EKJWRlZmluZQkJX2xpYmRpcgkJJXtfZXhlY19wcmVmaXh9LyV7X2xpYn0vcXVhZ2dhCiVkZWZpbmUJCV9pbmNsdWRlZGlyCSV7X3ByZWZpeH0vaW5jbHVkZQolZGVmaW5lCQlfbG9jYWxzdGF0ZWRpcgkvdmFyL3J1bi9xdWFnZ2EKCiMgbWlzYyBpbnRlcm5hbCBkZWZpbmVzCiVkZWZpbmUgICAgICAgICBxdWFnZ2FfdWlkICAgICAgOTIKJWRlZmluZSAgICAgICAgIHF1YWdnYV9naWQgICAgICA5MgolZGVmaW5lCQlkYWVtb25fbGlzdAl6ZWJyYSByaXBkIG9zcGZkIGJncGQKCiVpZiAle3dpdGhfaXB2Nn0KJWRlZmluZQkJZGFlbW9udjZfbGlzdAlyaXBuZ2Qgb3NwZjZkCiVlbHNlCiVkZWZpbmUJCWRhZW1vbnY2X2xpc3QJIiIKJWVuZGlmCgolaWYgJXt3aXRoX2lzaXNkfQolZGVmaW5lCQlkYWVtb25fb3RoZXIJaXNpc2QKJWVsc2UKJWRlZmluZQkJZGFlbW9uX290aGVyCSIiCiVlbmRpZgoKJWRlZmluZQkJYWxsX2RhZW1vbnMJJXtkYWVtb25fbGlzdH0gJXtkYWVtb252Nl9saXN0fSAle2RhZW1vbl9vdGhlcn0gd2F0Y2hxdWFnZ2EKCiMgYWxsb3cgYnVpbGQgZGlyIHRvIGJlIGtlcHQKJWRlZmluZQkJa2VlcF9idWlsZAkwCgpTdW1tYXJ5OiBSb3V0aW5nIGRhZW1vbgpOYW1lOgkJcXVhZ2dhClZlcnNpb246CUBWRVJTSU9OQApSZWxlYXNlOglAQ09ORkRBVEVAMDEKTGljZW5zZToJR1BMCkdyb3VwOiBTeXN0ZW0gRW52aXJvbm1lbnQvRGFlbW9ucwpTb3VyY2UwOglodHRwOi8vd3d3LnF1YWdnYS5uZXQvc25hcHNob3RzL2N2cy8le25hbWV9LSV7dmVyc2lvbn0udGFyLmd6ClVSTDoJCWh0dHA6Ly93d3cucXVhZ2dhLm5ldAolaWYgJXt3aXRoX3NubXB9CkJ1aWxkUmVxdWlyZXM6CW5ldC1zbm1wLWRldmVsClByZXJlcToJCW5ldC1zbm1wCiVlbmRpZgolaWYgJXt3aXRoX3Z0eXNofQpCdWlsZFJlcXVpcmVzOglyZWFkbGluZSByZWFkbGluZS1kZXZlbCBuY3Vyc2VzIG5jdXJzZXMtZGV2ZWwKUHJlcmVxOgkJcmVhZGxpbmUgbmN1cnNlcwolZW5kaWYKQnVpbGRSZXF1aXJlczoJdGV4aW5mbyB0ZXRleCBhdXRvY29uZiBwYW0tZGV2ZWwgcGF0Y2ggbGliY2FwLWRldmVsCiMgSW5pdHNjcmlwdHMgPiA1LjYwIGlzIHJlcXVpcmVkIGZvciBJUHY2IHN1cHBvcnQKUHJlcmVxOgkJaW5pdHNjcmlwdHMgPj0gNS42MApQcmVyZXE6CQluY3Vyc2VzIHJlYWRsaW5lIHBhbQpQcmVyZXE6CQkvc2Jpbi9pbnN0YWxsLWluZm8KUHJvdmlkZXM6CXJvdXRpbmdkYWVtb24KQnVpbGRSb290Ogkle190bXBwYXRofS8le25hbWV9LSV7dmVyc2lvbn0tcm9vdApPYnNvbGV0ZXM6CWJpcmQgZ2F0ZWQgbXJ0IHplYnJhCgolZGVzY3JpcHRpb24KUXVhZ2dhIGlzIGEgZnJlZSBzb2Z0d2FyZSB0aGF0IG1hbmFnZXMgVENQL0lQIGJhc2VkIHJvdXRpbmcKcHJvdG9jb2wuIEl0IHRha2VzIG11bHRpLXNlcnZlciBhbmQgbXVsdGktdGhyZWFkIGFwcHJvYWNoIHRvIHJlc29sdmUKdGhlIGN1cnJlbnQgY29tcGxleGl0eSBvZiB0aGUgSW50ZXJuZXQuCgpRdWFnZ2Egc3VwcG9ydHMgQkdQNCwgQkdQNCssIE9TUEZ2MiwgT1NQRnYzLCBSSVB2MSwgUklQdjIsIGFuZCBSSVBuZy4KClF1YWdnYSBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGFzIGEgUm91dGUgU2VydmVyIGFuZCBhIFJvdXRlIFJlZmxlY3Rvci4gSXQgaXMKbm90IGEgdG9vbGtpdCwgaXQgcHJvdmlkZXMgZnVsbCByb3V0aW5nIHBvd2VyIHVuZGVyIGEgbmV3IGFyY2hpdGVjdHVyZS4KUXVhZ2dhIGJ5IGRlc2lnbiBoYXMgYSBwcm9jZXNzIGZvciBlYWNoIHByb3RvY29sLgoKUXVhZ2dhIGlzIGEgZm9yayBvZiBHTlUgWmVicmEuCgolcGFja2FnZSBjb250cmliClN1bW1hcnk6IGNvbnRyaWIgdG9vbHMgZm9yIHF1YWdnYQpHcm91cDogU3lzdGVtIEVudmlyb25tZW50L0RhZW1vbnMKCiVkZXNjcmlwdGlvbiBjb250cmliCkNvbnRyaWJ1dGVkLzNyZCBwYXJ0eSB0b29scyB3aGljaCBtYXkgYmUgb2YgdXNlIHdpdGggcXVhZ2dhLgoKJXBhY2thZ2UgZGV2ZWwKU3VtbWFyeTogSGVhZGVyIGFuZCBvYmplY3QgZmlsZXMgZm9yIHF1YWdnYSBkZXZlbG9wbWVudApHcm91cDogU3lzdGVtIEVudmlyb25tZW50L0RhZW1vbnMKCiVkZXNjcmlwdGlvbiBkZXZlbApUaGUgcXVhZ2dhLWRldmVsIHBhY2thZ2UgY29udGFpbnMgdGhlIGhlYWRlciBhbmQgb2JqZWN0IGZpbGVzIG5lY2Nlc3NhcnkgZm9yCmRldmVsb3BpbmcgT1NQRi1BUEkgYW5kIHF1YWdnYSBhcHBsaWNhdGlvbnMuCgolcHJlcAolc2V0dXAgIC1xCgolYnVpbGQKCiMgRm9yIHN0YW5kYXJkIGdjYyB2ZXJib3NpdHksIHVuY29tbWVudCB0aGVzZSBsaW5lczoKI0NGTEFHUz0iJXtvcHRmbGFnc30gLVdhbGwgLVdzaWduLWNvbXBhcmUgLVdwb2ludGVyLWFyaXRoIgojQ0ZMQUdTPSIke0NGTEFHU30gLVdiYWQtZnVuY3Rpb24tY2FzdCAtV3dyaXRlLXN0cmluZ3MiCgojIEZvciB1bHRyYSBnY2MgdmVyYm9zaXR5LCB1bmNvbW1lbnQgdGhlc2UgbGluZXMgYWxzbzoKI0NGTEFHUz0iJHtDRkxBR1N9IC1XIC1XY2FzdC1xdWFsIC1Xc3RyaWN0LXByb3RvdHlwZXMiCiNDRkxBR1M9IiR7Q0ZMQUdTfSAtV21pc3NpbmctZGVjbGFyYXRpb25zIC1XbWlzc2luZy1ub3JldHVybiIKI0NGTEFHUz0iJHtDRkxBR1N9IC1XbWlzc2luZy1mb3JtYXQtYXR0cmlidXRlIC1XdW5yZWFjaGFibGUtY29kZSIKI0NGTEFHUz0iJHtDRkxBR1N9IC1XcGFja2VkIC1XcGFkZGVkIgoKJWNvbmZpZ3VyZSBcCiVpZiAhJXt3aXRoX3NoYXJlZH0KCS0tZGlzYWJsZS1zaGFyZWQgXAolZW5kaWYKJWlmICV7d2l0aF9pcHY2fQoJLS1lbmFibGUtaXB2NiBcCiVlbmRpZgolaWYgJXt3aXRoX3NubXB9CgktLWVuYWJsZS1zbm1wIFwKJWVuZGlmCiVpZiAle3dpdGhfbXVsdGlwYXRofQoJLS1lbmFibGUtbXVsdGlwYXRoPSV7d2l0aF9tdWx0aXBhdGh9IFwKJWVuZGlmCiVpZiAle3dpdGhfdGNwX3plYnJhfQoJLS1lbmFibGUtdGNwLXplYnJhIFwKJWVuZGlmCiVpZiAle3dpdGhfbnNzYX0KCS0tZW5hYmxlLW5zc2EgXAolZW5kaWYKJWlmICV7d2l0aF9vcGFxdWVfbHNhfQoJLS1lbmFibGUtb3BhcXVlLWxzYSBcCiVlbmRpZgolaWYgJXt3aXRoX29zcGZfdGV9CgktLWVuYWJsZS1vc3BmLXRlIFwKJWVuZGlmCiVpZiAle3dpdGhfdnR5c2h9CgktLWVuYWJsZS12dHlzaCBcCiVlbmRpZgolaWYgJXt3aXRoX29zcGZjbGllbnR9CgktLWVuYWJsZS1vc3BmY2xpZW50PXllcyBcCiVlbHNlCgktLWVuYWJsZS1vc3BmY2xpZW50PW5vXAolZW5kaWYKJWlmICV7d2l0aF9vc3BmYXBpfQoJLS1lbmFibGUtb3NwZmFwaT15ZXMgXAolZWxzZQoJLS1lbmFibGUtb3NwZmFwaT1ubyBcCiVlbmRpZgolaWYgJXt3aXRoX2lyZHB9CgktLWVuYWJsZS1pcmRwPXllcyBcCiVlbHNlCgktLWVuYWJsZS1pcmRwPW5vIFwKJWVuZGlmCiVpZiAle3dpdGhfaXNpc2R9CgktLWVuYWJsZS1pc2lzZCBcCiVlbHNlCgktLWRpc2FibGUtaXNpc2QgXAolZW5kaWYKJWlmICV7d2l0aF9wYW19CgktLXdpdGgtbGlicGFtIFwKJWVuZGlmCiVpZiAlcXVhZ2dhX3VzZXIKCS0tZW5hYmxlLXVzZXI9JXF1YWdnYV91c2VyIFwKCS0tZW5hYmxlLWdyb3VwPSVxdWFnZ2FfdXNlciBcCiVlbmRpZgolaWYgJXZ0eV9ncm91cAoJLS1lbmFibGUtdnR5LWdyb3VwPSV2dHlfZ3JvdXAgXAolZW5kaWYKLS1lbmFibGUtbmV0bGluawoKbWFrZSAlez9fc21wX21mbGFnc30gTUFLRUlORk89Im1ha2VpbmZvIC0tbm8tc3BsaXQiCgpwdXNoZCBkb2MKbWFrZWluZm8gLS1uby1zcGxpdCAtLWh0bWwgLW8gcXVhZ2dhLmh0bWwgcXVhZ2dhLnRleGkKcG9wZAoKJWluc3RhbGwKcm0gLXJmICRSUE1fQlVJTERfUk9PVAoKaW5zdGFsbCAtZCAkUlBNX0JVSUxEX1JPT1QvZXRjL3tyYy5kL2luaXQuZCxzeXNjb25maWcsbG9ncm90YXRlLmQscGFtLmR9IFwKCSRSUE1fQlVJTERfUk9PVC92YXIvbG9nL3F1YWdnYSAkUlBNX0JVSUxEX1JPT1Qle19pbmZvZGlyfQoKbWFrZSBpbnN0YWxsIFwKCURFU1RESVI9JFJQTV9CVUlMRF9ST09UCgojIFJlbW92ZSB0aGlzIGZpbGUsIGFzIGl0IGlzIHVuaW5zdGFsbGVkIGFuZCBjYXVzZXMgZXJyb3JzIHdoZW4gYnVpbGRpbmcgb24gUkg5CnJtIC1yZiAkUlBNX0JVSUxEX1JPT1QvdXNyL3NoYXJlL2luZm8vZGlyCgojIGluc3RhbGwgZXRjIHNvdXJjZXMKZm9yIGRhZW1vbiBpbiAle2FsbF9kYWVtb25zfSA7IGRvCglpZiBbIHgiJHtkYWVtb259IiAhPSB4IiIgXSA7IHRoZW4KCQlpbnN0YWxsICV7emViX3JoX3NyY30vJHtkYWVtb259LmluaXQgXAoJCQkkUlBNX0JVSUxEX1JPT1QvZXRjL3JjLmQvaW5pdC5kLyR7ZGFlbW9ufQoJZmkKZG9uZQppbnN0YWxsIC1tNjQ0ICV7emViX3JoX3NyY30vcXVhZ2dhLnBhbSBcCgkkUlBNX0JVSUxEX1JPT1QvZXRjL3BhbS5kL3F1YWdnYQppbnN0YWxsIC1tNjQ0ICV7emViX3JoX3NyY30vcXVhZ2dhLmxvZ3JvdGF0ZSBcCgkkUlBNX0JVSUxEX1JPT1QvZXRjL2xvZ3JvdGF0ZS5kL3F1YWdnYQppbnN0YWxsIC1tNjQ0ICV7emViX3JoX3NyY30vcXVhZ2dhLnN5c2NvbmZpZyBcCgkkUlBNX0JVSUxEX1JPT1QvZXRjL3N5c2NvbmZpZy9xdWFnZ2EKaW5zdGFsbCAtZCAtbTc1MCAgJFJQTV9CVUlMRF9ST09UL3Zhci9ydW4vcXVhZ2dhCgolcHJlCiMgYWRkIHZ0eV9ncm91cAolaWYgJXZ0eV9ncm91cApncm91cGFkZCAtciAldnR5X2dyb3VwIDI+IC9kZXYvbnVsbCB8fCA6CiVlbmRpZgojIGFkZCBxdWFnZ2EgdXNlciBhbmQgZ3JvdXAKJWlmICVxdWFnZ2FfdXNlcgovdXNyL3NiaW4vZ3JvdXBhZGQgLWcgJXF1YWdnYV9naWQgcXVhZ2dhIDI+IC9kZXYvbnVsbCB8fCA6Ci91c3Ivc2Jpbi91c2VyYWRkICAtdSAlcXVhZ2dhX3VpZCAtZyAlcXVhZ2dhX2dpZCBcCiAtTSAtciAtcyAvc2Jpbi9ub2xvZ2luIC1jICJRdWFnZ2Egcm91dGluZyBzdWl0ZSIgXAogLWQgJV9sb2NhbHN0YXRlZGlyICVxdWFnZ2FfdXNlciAyPiAvZGV2L251bGwgfHwgOgolZW5kaWYKCiVwb3N0CiMgemVicmFfc3BlY19hZGRfc2VydmljZSA8c2VydmljZSBuYW1lPiA8cG9ydC9wcm90bz4gPGNvbW1lbnQ+CiMgZS5nLiB6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlIHplYnJhc3J2IDI2MDAvdGNwICJ6ZWJyYSBzZXJ2aWNlIgoKemVicmFfc3BlY19hZGRfc2VydmljZSAoKQp7CiAgIyBBZGQgcG9ydCAvZXRjL3NlcnZpY2VzIGVudHJ5IGlmIGl0IGlzbid0IGFscmVhZHkgdGhlcmUgCiAgaWYgWyAtZiAvZXRjL3NlcnZpY2VzIF0gJiYgXAogICAgICAhICVfX3NlZCAtZSAncy8jLiokLy8nIC9ldGMvc2VydmljZXMgfCAlX19ncmVwIC13cSAkMSA7IHRoZW4KICAgIGVjaG8gIiQxCQkkMgkJCSMgJDMiICA+PiAvZXRjL3NlcnZpY2VzCiAgZmkKfQoKemVicmFfc3BlY19hZGRfc2VydmljZSB6ZWJyYXNydiAyNjAwL3RjcCAiemVicmEgc2VydmljZSIKemVicmFfc3BlY19hZGRfc2VydmljZSB6ZWJyYSAgICAyNjAxL3RjcCAiemVicmEgdnR5Igp6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlIHJpcGQgICAgIDI2MDIvdGNwICJSSVBkIHZ0eSIKJWlmICV7d2l0aF9pcHY2fQp6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlIHJpcG5nZCAgIDI2MDMvdGNwICJSSVBuZ2QgdnR5IgolZW5kaWYKemVicmFfc3BlY19hZGRfc2VydmljZSBvc3BmZCAgICAyNjA0L3RjcCAiT1NQRmQgdnR5Igp6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlIGJncGQgICAgIDI2MDUvdGNwICJCR1BkIHZ0eSIKJWlmICV7d2l0aF9pcHY2fQp6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlIG9zcGY2ZCAgIDI2MDYvdGNwICJPU1BGNmQgdnR5IgolZW5kaWYKJWlmICV7d2l0aF9vc3BmYXBpfQp6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlIG9zcGZhcGkgIDI2MDcvdGNwICJPU1BGLUFQSSIKJWVuZGlmCiVpZiAle3dpdGhfaXNpc2R9CnplYnJhX3NwZWNfYWRkX3NlcnZpY2UgaXNpc2QgICAgMjYwOC90Y3AgIklTSVNkIHZ0eSIKJWVuZGlmCgpmb3IgZGFlbW9uIGluICVkYWVtb25fbGlzdCA7IGRvCgkvc2Jpbi9jaGtjb25maWcgLS1hZGQgJHtkYWVtb259CmRvbmUKCi9zYmluL2luc3RhbGwtaW5mbyAle19pbmZvZGlyfS9xdWFnZ2EuaW5mby5neiAle19pbmZvZGlyfS9kaXIKCiMgQ3JlYXRlIGR1bW15IGZpbGVzIGlmIHRoZXkgZG9uJ3QgZXhpc3Qgc28gYmFzaWMgZnVuY3Rpb25zIGNhbiBiZSB1c2VkLgppZiBbICEgLWUgJXtfc3lzY29uZmRpcn0vemVicmEuY29uZiBdOyB0aGVuCgllY2hvICJob3N0bmFtZSBgaG9zdG5hbWVgIiA+ICV7X3N5c2NvbmZkaXJ9L3plYnJhLmNvbmYKCWNobW9kIDY0MCAle19zeXNjb25mZGlyfS96ZWJyYS5jb25mCmZpCmlmIFsgISAtZSAle19zeXNjb25mZGlyfS92dHlzaC5jb25mIF07IHRoZW4KCXRvdWNoICV7X3N5c2NvbmZkaXJ9L3Z0eXNoLmNvbmYKCWNobW9kIDY0MCAle19zeXNjb25mZGlyfS92dHlzaC5jb25mCmZpCgolcG9zdHVuCmlmIFsgIiQxIiAtZ2UgICIxIiBdOyB0aGVuCglmb3IgZGFlbW9uIGluICVhbGxfZGFlbW9ucyA7IGRvCgkJL2V0Yy9yYy5kL2luaXQuZC8ke2RhZW1vbn0gY29uZHJlc3RhcnQgPi9kZXYvbnVsbCAyPiYxCglkb25lCmZpCgolcHJldW4KaWYgWyAiJDEiID0gIjAiIF07IHRoZW4KCWZvciBkYWVtb24gaW4gJWFsbF9kYWVtb25zIDsgZG8KCQkvZXRjL3JjLmQvaW5pdC5kLyR7ZGFlbW9ufSBzdG9wICA+L2Rldi9udWxsIDI+JjEKCQkvc2Jpbi9jaGtjb25maWcgLS1kZWwgJHtkYWVtb259Cglkb25lCgkvc2Jpbi9pbnN0YWxsLWluZm8gLS1kZWxldGUgJXtfaW5mb2Rpcn0vcXVhZ2dhLmluZm8uZ3ogJXtfaW5mb2Rpcn0vZGlyCmZpCgolY2xlYW4KJWlmICEle2tlZXBfYnVpbGR9CnJtIC1yZiAkUlBNX0JVSUxEX1JPT1QKJWVuZGlmCgolZmlsZXMKJWRlZmF0dHIoLSxyb290LHJvb3QpCiVkb2MgKi8qLnNhbXBsZSogQVVUSE9SUyBDT1BZSU5HCiVkb2MgZG9jL3F1YWdnYS5odG1sCiVkb2MgZG9jL21wbHMKJWRvYyBDaGFuZ2VMb2cgSU5TVEFMTCBORVdTIFJFQURNRSBSRVBPUlRJTkctQlVHUyBTRVJWSUNFUyBUT0RPCiVpZiAle3F1YWdnYV91c2VyfQolZGlyICVhdHRyKDc1MSwlcXVhZ2dhX3VzZXIsJXF1YWdnYV91c2VyKSAle19zeXNjb25mZGlyfQolZGlyICVhdHRyKDc1MCwlcXVhZ2dhX3VzZXIsJXF1YWdnYV91c2VyKSAvdmFyL2xvZy9xdWFnZ2EgCiVkaXIgJWF0dHIoNzUxLCVxdWFnZ2FfdXNlciwlcXVhZ2dhX3VzZXIpIC92YXIvcnVuL3F1YWdnYQolZWxzZQolZGlyICVhdHRyKDc1MCxyb290LHJvb3QpICV7X3N5c2NvbmZkaXJ9CiVkaXIgJWF0dHIoNzUwLHJvb3Qscm9vdCkgL3Zhci9sb2cvcXVhZ2dhCiVkaXIgJWF0dHIoNzU1LHJvb3Qscm9vdCkgL3Vzci9zaGFyZS9pbmZvCiVkaXIgJWF0dHIoNzUwLHJvb3Qscm9vdCkgL3Zhci9ydW4vcXVhZ2dhCiVlbmRpZgolaWYgJXt2dHlfZ3JvdXB9CiVhdHRyKDc1MCwlcXVhZ2dhX3VzZXIsJXZ0eV9ncm91cCkgJXtfc3lzY29uZmRpcn0vdnR5c2guY29uZi5zYW1wbGUKJWVuZGlmCiV7X2luZm9kaXJ9LyppbmZvKgole19tYW5kaXJ9L21hbiovKgole19zYmluZGlyfS96ZWJyYQole19zYmluZGlyfS9vc3BmZAole19zYmluZGlyfS9yaXBkCiV7X3NiaW5kaXJ9L2JncGQKJXtfc2JpbmRpcn0vd2F0Y2hxdWFnZ2EKJWlmICV7d2l0aF9pcHY2fQole19zYmluZGlyfS9yaXBuZ2QKJXtfc2JpbmRpcn0vb3NwZjZkCiVlbmRpZgolaWYgJXt3aXRoX2lzaXNkfQole19zYmluZGlyfS9pc2lzZAolZW5kaWYKJWRpciAlYXR0cig3NTUscm9vdCxyb290KSAle19saWJkaXJ9CiVpZiAle3dpdGhfc2hhcmVkfQole19saWJkaXJ9L2xpYiouc28KJXtfbGliZGlyfS9saWIqLnNvLioKJWVuZGlmCiVpZiAle3dpdGhfdnR5c2h9CiV7X2JpbmRpcn0vKgolZW5kaWYKJWNvbmZpZyAvZXRjL3F1YWdnYS9bIXZdKgolY29uZmlnIC9ldGMvcmMuZC9pbml0LmQvKgolY29uZmlnKG5vcmVwbGFjZSkgL2V0Yy9zeXNjb25maWcvcXVhZ2dhCiVjb25maWcobm9yZXBsYWNlKSAvZXRjL3BhbS5kL3F1YWdnYQolY29uZmlnKG5vcmVwbGFjZSkgJWF0dHIoNjQwLHJvb3Qscm9vdCkgL2V0Yy9sb2dyb3RhdGUuZC8qCgolZmlsZXMgY29udHJpYgolZGVmYXR0cigtLHJvb3Qscm9vdCkKJWRvYyB0b29scwoKJWZpbGVzIGRldmVsCiVkZWZhdHRyKC0scm9vdCxyb290KQolaWYgJXt3aXRoX29zcGZjbGllbnR9CiV7X3NiaW5kaXJ9L29zcGZjbGllbnQKJWVuZGlmCiV7X2xpYmRpcn0vKi5hCiV7X2xpYmRpcn0vKi5sYQolZGlyICVhdHRyKDc1NSxyb290LHJvb3QpICV7X2luY2x1ZGVkaXJ9LyV7bmFtZX0KJXtfaW5jbHVkZWRpcn0vJW5hbWUvKi5oCiVkaXIgJWF0dHIoNzU1LHJvb3Qscm9vdCkgJXtfaW5jbHVkZWRpcn0vJXtuYW1lfS9vc3BmZAole19pbmNsdWRlZGlyfS8lbmFtZS9vc3BmZC8qLmgKJWlmICV7d2l0aF9vc3BmYXBpfQolZGlyICVhdHRyKDc1NSxyb290LHJvb3QpICV7X2luY2x1ZGVkaXJ9LyV7bmFtZX0vb3NwZmFwaQole19pbmNsdWRlZGlyfS8lbmFtZS9vc3BmYXBpLyouaAolZW5kaWYKCiVjaGFuZ2Vsb2cKJWNoYW5nZWxvZwoqIFdlZCBEZWMgMjIgMjAwNCBBbmRyZXcgSi4gU2Nob3JyIDxhanNjaG9yckBhbHVtbmkucHJpbmNldG9uLmVkdT4KLSBkYWVtb252Nl9saXN0IHNob3VsZCBjb250YWluIG9ubHkgSVB2NiBkYWVtb25zCgoqIFdlZCBEZWMgMjIgMjAwNCBBbmRyZXcgSi4gU2Nob3JyIDxhanNjaG9yckBhbHVtbmkucHJpbmNldG9uLmVkdT4KLSB3YXRjaHF1YWdnYSBhZGRlZAotIG9uIHVwZ3JhZGUsIGFsbCBkYWVtb25zIHNob3VsZCBiZSBjb25kcmVzdGFydCdlZAotIG9uIHJlbW92YWwsIGFsbCBkYWVtb25zIHNob3VsZCBiZSBzdG9wcGVkCgoqIE1vbiBOb3YgMDggMjAwNCBQYXVsIEpha21hIDxwYXVsQGRpc2hvbmUuc3Q+Ci0gVXNlIG1ha2VpbmZvIC0taHRtbCB0byBnZW5lcmF0ZSBxdWFnZ2EuaHRtbAoKKiBTdW4gTm92IDA3IDIwMDQgUGF1bCBKYWttYSA8cGF1bEBkaXNob25lLnN0PgotIEZpeCB3aXRoX2lwdjYgc2V0IHRvIDAgYnVpbGQKCiogU2F0IE9jdCAyMyAyMDA0IFBhdWwgSmFrbWEgPHBhdWxAZGlzaG9uZS5zdD4KLSBVcGRhdGUgdG8gMC45Ny4yCgoqIFNhdCBPY3QgMjMgMjAwNCBBbmRyZXcgSi4gU2Nob3JyIDxhc2Nob3JyQHRlbGVtZXRyeS1pbnZlc3RtZW50cy5jb20+Ci0gTWFrZSBkaXJlY3RvcmllcyBiZSBvd25lZCBieSB0aGUgcGFja2FnZXMgY29uY2VybmVkCi0gVXBkYXRlIGxvZ3JvdGF0ZSBzY3JpcHRzIHRvIHVzZSBjb3JyZWN0IHBhdGggdG8ga2lsbGFsbCBhbmQgdXNlIHBpZCBmaWxlcwoKKiBGcmkgT2N0IDA4IDIwMDQgUGF1bCBKYWttYSA8cGF1bEBkaXNob25lLnN0PgotIFVwZGF0ZSB0byAwLjk3LjAKCiogV2VkIFNlcCAxNSAyMDA0IFBhdWwgSmFrbWEgPHBhdWxAZGlzaG9uZS5zdD4KLSBidWlsZCBzbm1wIHN1cHBvcnQgYnkgZGVmYXVsdAotIGJ1aWxkIGlyZHAgc3VwcG9ydAotIGJ1aWxkIHdpdGggc2hhcmVkIGxpYnMKLSBkZXZlbCBzdWJwYWNrYWdlIGZvciBhcmNoaXZlcyBhbmQgaGVhZGVycwoKKiBUaHUgSmFuIDA4IDIwMDQgUGF1bCBKYWttYSA8cGF1bEBkaXNob25lLnN0PgotIHVwZGF0ZWQgc3lzY29uZmlnIGZpbGVzIHRvIHNwZWNpZnkgbG9jYWwgZGlyCi0gYWRkZWQgb3NwZl9kdW1wLmMgY3Jhc2ggcXVpY2sgZml4IHBhdGNoCi0gYWRkZWQgb3NwZmQgcGVyc2lzdGVudCBpbnRlcmZhY2UgY29uZmlndXJhdGlvbiBwYXRjaAoKKiBUdWUgRGVjIDMwIDIwMDMgUGF1bCBKYWttYSA8cGF1bEBkaXNob25lLnN0PgotIHN5bmMgdG8gQ1ZTCi0gaW50ZWdyYXRlIFJIIHN5c2NvbmZpZyBwYXRjaCB0byBzcGVjaWZ5IGRhZW1vbiBvcHRpb25zIChSSCkKLSBkZWZhdWx0IHRvIGhhdmUgdnR5IGxpc3RlbiBvbmx5IHRvIDEyNy4xIChSSCkKLSBhZGQgdXNlciB3aXRoIGZpeGVkIFVJRC9HSUQgKFJIKQotIGNyZWF0ZSB1c2VyIHdpdGggc2hlbGwgL3NiaW4vbm9sb2dpbiByYXRoZXIgdGhhbiAvYmluL2ZhbHNlIChSSCkKLSBzdG9wIGRhZW1vbnMgb24gdW5pbnN0YWxsIChSSCkKLSBkZWxldGUgaW5mbyBmaWxlIG9uICVwcmV1biwgbm90ICVwb3N0dW4gdG8gYXZvaWQgZGVsZXRpb24gb24gdXBncmFkZS4gKFJIKQotIGlzaXNkIGFkZGVkCi0gY2xlYW51cCB0YXNrcyBjYXJyaWVkIG91dCBmb3IgZXZlcnkgZGFlbW9uCgoqIFN1biBOb3YgMiAyMDAzIFBhdWwgSmFrbWEgPHBhdWxAZGlzaG9uZS5zdD4KLSBGaXggLWRldmVsIHBhY2thZ2UgdG8gaW5jbHVkZSBhbGwgZmlsZXMKLSBTeW5jIHRvIDAuOTYuNAoKKiBUdWUgQXVnIDEyIDIwMDMgUGF1bCBKYWttYSA8cGF1bEBkaXNob25lLnN0PgotIFJlbmFtZWQgdG8gUXVhZ2dhCi0gU3luYyB0byBRdWFnZ2EgcmVsZWFzZSAwLjk2CgoqIFR1ZSBNYXIgMjAgMjAwMyBQYXVsIEpha21hIDxwYXVsQGRpc2hvbmUuc3Q+Ci0gemVicmEgcHJpdmlsZWdlcyBzdXBwb3J0CgoqIE1vbiBNYXIgMTggMjAwMyBQYXVsIEpha21hIDxwYXVsQGRpc2hvbmUuc3Q+Ci0gRml4IG1lbSBsZWFrIGluICdzaG93IHRocmVhZCBjcHUnCi0gUmFscGggS2VsbGVyJ3MgT1NQRi1BUEkKLSBBbWlyOiBGaXggY29uZmlndXJlLmFjIGZvciBuZXQtc25tcAoKKiBTYXQgTWFyIDEgMjAwMyBQYXVsIEpha21hIDxwYXVsQGRpc2hvbmUuc3Q+Ci0gb3NwZmQgSU9TIHByZWZpeCB0byBpbnRlcmZhY2UgbWF0Y2hpbmcgZm9yICduZXR3b3JrJyBzdGF0ZW1lbnQKLSB0ZW1wb3JhcnkgZml4IGZvciBQdFAgYW5kIElQdjYKLSBzeW5jIHRvIHplYnJhLm9yZyBDVlMKCiogTW9uIEphbiAyMCAyMDAzIFBhdWwgSmFrbWEgPHBhdWxAZGlzaG9uZS5zdD4KLSB1cGRhdGUgdG8gbGF0ZXN0IGN2cwotIFlvbidzICJzaG93IHRocmVhZCBjcHUiIHBhdGNoIC0gMTcyMTcKLSB3YWxrIHVwIHRyZWUgLSAxNzIxOAotIG9zcGZkIE5TU0EgZml4ZXMgLSAxNjY4MQotIG9zcGZkIG5zbSBmaXhlcyAtIDE2ODI0Ci0gb3NwZmQgT0xTQSBmaXhlcyBhbmQgbmV3IGZlYXR1cmUgLSAxNjgyMyAKLSBLQU1FIGFuZCBpZmluZGV4IGZpeGVzIC0gMTY1MjUKLSBzcGVjIGZpbGUgY2hhbmdlcyB0byBhbGxvdyByZWRoYXQgZmlsZXMgdG8gYmUgaW4gdHJlZQoKKiBTYXQgRGVjIDI4IDIwMDIgQWxleGFuZGVyIEhvb2dlcmh1aXMgPGFsZXhoQGloYXRlbnQuY29tPgotIEFkZGVkIGNvbmRpdGlvbmFscyBmb3IgYnVpbGRpbmcgd2l0aChvdXQpIElQdjYsIHZ0eXNoLCBSSVAsIEJHUAotIEZpeGVkIHVwIHNvbWUgYnVpbGQgcmVxdWlyZW1lbnRzIChwYXRjaCkKLSBBZGRlZCBjb25kaXRpb25hbCBidWlsZCByZXF1aXJlbWVudHMgZm9yIHZ0eXNoIC8gc25tcAotIEFkZGVkIGNvbmRpdGlvbmFsIHRvICVmaWxlcyBmb3IgJV9iaW5kaXIgZGVwZW5kaW5nIG9uIHZ0eXNoCgoqIE1vbiBOb3YgMTEgMjAwMiBQYXVsIEpha21hIDxwYXVsakBhbHBoeXJhLmllPgotIHVwZGF0ZSB0byBsYXRlc3QgQ1ZTCi0gYWRkIEdyZWcgVHJveGVsJ3MgbWQ1IGJ1ZmZlciBjb3B5L2R1cCBmaXgKLSBhZGQgUklQdjEgZml4Ci0gYWRkIEZyYW5rJ3MgbXVsdGljYXN0IGZsYWcgZml4CgoqIFdlZCBPY3QgMDkgMjAwMiBQYXVsIEpha21hIDxwYXVsakBhbHBoeXJhLmllPgotIHVwZGF0ZSB0byBsYXRlc3QgQ1ZTCi0gdGltZXN0YW1wZWQgY3J5cHRfc2VxbnVtIHBhdGNoCi0gb2ktPm9uX3dyaXRlX3EgZml4CgoqIE1vbiBTZXAgMzAgMjAwMiBQYXVsIEpha21hIDxwYXVsakBhbHBoeXJhLmllPgotIHVwZGF0ZSB0byBsYXRlc3QgQ1ZTCi0gYWRkIHZ0eXNoICd3cml0ZS1jb25maWcgKGludGVncmF0ZWR8ZGFlbW9uKScgcGF0Y2gKLSBhbHdheXMgJ21ha2UgcmVidWlsZCcgaW4gdnR5c2gvIHRvIGNhdGNoIG5ldyBjb21tYW5kcwoKKiBGcmkgU2VwIDEzIDIwMDIgUGF1bCBKYWttYSA8cGF1bGpAYWxwaHlyYS5pZT4KLSB1cGRhdGUgdG8gMC45M2IKCiogV2VkIFNlcCAxMSAyMDAyIFBhdWwgSmFrbWEgPHBhdWxqQGFscGh5cmEuaWU+Ci0gdXBkYXRlIHRvIGxhdGVzdCBDVlMKLSBhZGQgIi9zYmluL2lwIHJvdXRlIGZsdXNoIHByb3RvIHplYnJhIiB0byB6ZWJyYSBSSCBpbml0IG9uIHN0YXJ0dXAKCiogU2F0IEF1ZyAyNCAyMDAyIFBhdWwgSmFrbWEgPHBhdWxqQGFscGh5cmEuaWU+Ci0gdXBkYXRlIHRvIGN1cnJlbnQgQ1ZTCi0gYWRkIE9TUEYgcG9pbnQgdG8gbXVsdGlwb2ludCBwYXRjaAotIGFkZCBPU1BGIGJ1Z2ZpeGVzCi0gYWRkIEJHUCBoYXNoIG9wdGltaXNhdGlvbiBwYXRjaAoKKiBGcmkgSnVuIDE0IDIwMDIgUGF1bCBKYWttYSA8cGF1bGpAYWxwaHlyYS5pZT4KLSB1cGRhdGUgdG8gMC45My1wcmUxIC8gQ1ZTCi0gYWRkIGxpbmsgc3RhdGUgZGV0ZWN0aW9uIHN1cHBvcnQKLSBhZGQgZ2VuZXJpYyBQdFAgYW5kIFJGQzMwMjEgc3VwcG9ydAotIHZhcmlvdXMgYnVnIGZpeGVzCgoqIFRodSBBdWcgMDkgMjAwMSBFbGxpb3QgTGVlIDxzb3B3aXRoQHJlZGhhdC5jb20+IDAuOTFhLTYKLSBGaXggYnVnICM1MTMzNgoKKiBXZWQgQXVnICAxIDIwMDEgVHJvbmQgRWl2aW5kIEdsb21zcvhkIDx0ZWdAcmVkaGF0LmNvbT4gMC45MWEtNQotIFVzZSBnZW5lcmljIGluaXRzY3JpcHQgc3RyaW5ncyBpbnN0ZWFkIG9mIGluaXRzY3JpcHQgc3BlY2lmaWMKICAoICJTdGFydGluZyBmb286ICIgLT4gIlN0YXJ0aW5nICRwcm9nOiIgKQoKKiBGcmkgSnVsIDI3IDIwMDEgRWxsaW90IExlZSA8c29wd2l0aEByZWRoYXQuY29tPiAwLjkxYS00Ci0gQnVtcCB0aGUgcmVsZWFzZSB3aGVuIHJlYnVpbGRpbmcgaW50byB0aGUgZGlzdC4KCiogVHVlIEZlYiAgNiAyMDAxIFRpbSBQb3dlcnMgPHRpbXBAcmVkaGF0LmNvbT4KLSBidWlsdCBmb3IgUG93ZXJ0b29scwoKKiBTdW4gRmViICA0IDIwMDEgUGVra2EgU2F2b2xhIDxwZWtrYXNAbmV0Y29yZS5maT4gCi0gSGFja2VkIHVwIGZyb20gUExEIExpbnV4IDAuOTAtMSwgTWFuZHJha2UgMC45MC0xbWRrIGFuZCBvbmUgZnJvbSB6ZWJyYS5vcmcuCi0gVXBkYXRlIHRvIDAuOTFhCi0gVmVyeSBoZWF2eSBtb2RpZmljYXRpb25zIHRvIGluaXQuZC8qLCAuc3BlYywgcGFtLCBpMThuLCBsb2dyb3RhdGUsIGV0Yy4KLSBTaG91bGQgYmUgcXVpdGUgUmVkIEhhdCdpc3F1ZSBub3cuCg==