IyBjb25maWd1cmUgb3B0aW9ucwolZGVmaW5lIAl3aXRoX3NubXAJMAolZGVmaW5lCQl3aXRoX3Z0eXNoCTEKJWRlZmluZQkJd2l0aF9vc3BmX3RlCTEKJWRlZmluZQkJd2l0aF9uc3NhCTEKJWRlZmluZQkJd2l0aF9vcGFxdWVfbHNhIDEKJWRlZmluZQkJd2l0aF90Y3BfemVicmEJMAolZGVmaW5lCQl3aXRoX3Z0eXNoCTEKJWRlZmluZQkJd2l0aF9wYW0JMQolZGVmaW5lCQl3aXRoX2lwdjYJMQolZGVmaW5lCQl3aXRoX29zcGZjbGllbnQgMQolZGVmaW5lCQl3aXRoX29zcGZhcGkJMQolZGVmaW5lCQl3aXRoX211bHRpcGF0aAk2NAolZGVmaW5lCQlxdWFnZ2FfdXNlcglxdWFnZ2EKJWRlZmluZQkJdnR5X2dyb3VwCXF1YWdnYXZ0eQoKIyBwYXRoIGRlZmluZXMKJWRlZmluZQkJX3N5c2NvbmZkaXIJL2V0Yy9xdWFnZ2EKJWRlZmluZQkJemViX3NyYwkJJXtfYnVpbGRkaXJ9LyV7bmFtZX0tJXt2ZXJzaW9ufQolZGVmaW5lCQl6ZWJfcmhfc3JjCSV7emViX3NyY30vcmVkaGF0CiVkZWZpbmUJCXplYl9kb2NzCSV7emViX3NyY30vZG9jCgojIGRlZmluZXMgZm9yIGNvbmZpZ3VyZQolZGVmaW5lCQlfbGliZXhlY2Rpcgkle19leGVjX3ByZWZpeH0vbGliZXhlYy9xdWFnZ2EKJWRlZmluZQkJX2xpYmRpcgkJJXtfZXhlY19wcmVmaXh9LyV7X2xpYn0vcXVhZ2dhCiVkZWZpbmUJCV9pbmNsdWRlZGlyCSV7X3ByZWZpeH0vaW5jbHVkZQolZGVmaW5lCQlfbG9jYWxzdGF0ZWRpcgkvdmFyL3J1bi9xdWFnZ2EKCiMgbWlzYyBpbnRlcm5hbCBkZWZpbmVzCiVkZWZpbmUgICAgICAgICBxdWFnZ2FfdWlkICAgICAgOTIKJWRlZmluZSAgICAgICAgIHF1YWdnYV9naWQgICAgICA5MgolaWYgJXdpdGhfaXB2NgolZGVmaW5lCQlkYWVtb25fbGlzdAl6ZWJyYSByaXBkIGlzaXNkIG9zcGZkIHJpcG5nZCBvc3BmNmQgYmdwZAolZWxzZQolZGVmaW5lCQlkYWVtb25fbGlzdAl6ZWJyYSByaXBkIGlzaXNkIG9zcGZkIGJncGQKJWVuZGlmCgpTdW1tYXJ5OiBSb3V0aW5nIGRhZW1vbgpOYW1lOgkJcXVhZ2dhClZlcnNpb246CUBWRVJTSU9OQApSZWxlYXNlOglAQ09ORkRBVEVAMDEKTGljZW5zZToJR1BMCkdyb3VwOiBTeXN0ZW0gRW52aXJvbm1lbnQvRGFlbW9ucwpTb3VyY2UwOglodHRwOi8vd3d3LnF1YWdnYS5uZXQvc25hcHNob3RzL2N2cy8le25hbWV9LSV7dmVyc2lvbn0udGFyLmd6ClVSTDoJCWh0dHA6Ly93d3cucXVhZ2dhLm5ldAolaWYgJXdpdGhfc25tcApCdWlsZFJlcXVpcmVzOgl1Y2Qtc25tcC1kZXZlbApQcmVyZXE6CQl1Y2Qtc25tcAolZW5kaWYKJWlmICV3aXRoX3Z0eXNoCkJ1aWxkUmVxdWlyZXM6CXJlYWRsaW5lIHJlYWRsaW5lLWRldmVsIG5jdXJzZXMgbmN1cnNlcy1kZXZlbApQcmVyZXE6CQlyZWFkbGluZSBuY3Vyc2VzCiVlbmRpZgpCdWlsZFJlcXVpcmVzOgl0ZXhpbmZvIHRldGV4IGF1dG9jb25mIHBhbS1kZXZlbCBwYXRjaCBsaWJjYXAtZGV2ZWwKIyBJbml0c2NyaXB0cyA+IDUuNjAgaXMgcmVxdWlyZWQgZm9yIElQdjYgc3VwcG9ydApQcmVyZXE6CQlpbml0c2NyaXB0cyA+PSA1LjYwClByZXJlcToJCW5jdXJzZXMgcmVhZGxpbmUgcGFtClByZXJlcToJCS9zYmluL2luc3RhbGwtaW5mbwpQcm92aWRlczoJcm91dGluZ2RhZW1vbgpCdWlsZFJvb3Q6CSV7X3RtcHBhdGh9LyV7bmFtZX0tJXt2ZXJzaW9ufS1yb290Ck9ic29sZXRlczoJYmlyZCBnYXRlZCBtcnQgemVicmEKCiVkZXNjcmlwdGlvbgpRdWFnZ2EgaXMgYSBmcmVlIHNvZnR3YXJlIHRoYXQgbWFuYWdlcyBUQ1AvSVAgYmFzZWQgcm91dGluZwpwcm90b2NvbC4gSXQgdGFrZXMgbXVsdGktc2VydmVyIGFuZCBtdWx0aS10aHJlYWQgYXBwcm9hY2ggdG8gcmVzb2x2ZQp0aGUgY3VycmVudCBjb21wbGV4aXR5IG9mIHRoZSBJbnRlcm5ldC4KClF1YWdnYSBzdXBwb3J0cyBCR1A0LCBCR1A0KywgT1NQRnYyLCBPU1BGdjMsIFJJUHYxLCBSSVB2MiwgYW5kIFJJUG5nLgoKUXVhZ2dhIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgYXMgYSBSb3V0ZSBTZXJ2ZXIgYW5kIGEgUm91dGUgUmVmbGVjdG9yLiBJdCBpcwpub3QgYSB0b29sa2l0LCBpdCBwcm92aWRlcyBmdWxsIHJvdXRpbmcgcG93ZXIgdW5kZXIgYSBuZXcgYXJjaGl0ZWN0dXJlLgpRdWFnZ2EgYnkgZGVzaWduIGhhcyBhIHByb2Nlc3MgZm9yIGVhY2ggcHJvdG9jb2wuCgpRdWFnZ2EgaXMgYSBmb3JrIG9mIEdOVSBaZWJyYS4KCiVwYWNrYWdlIGNvbnRyaWIKU3VtbWFyeTogY29udHJpYiB0b29scyBmb3IgcXVhZ2dhCkdyb3VwOiBTeXN0ZW0gRW52aXJvbm1lbnQvRGFlbW9ucwoKJWRlc2NyaXB0aW9uIGNvbnRyaWIKQ29udHJpYnV0ZWQvM3JkIHBhcnR5IHRvb2xzIHdoaWNoIG1heSBiZSBvZiB1c2Ugd2l0aCBxdWFnZ2EuCgolcGFja2FnZSBkZXZlbApTdW1tYXJ5OiBIZWFkZXIgYW5kIG9iamVjdCBmaWxlcyBmb3IgcXVhZ2dhIGRldmVsb3BtZW50Ckdyb3VwOiBTeXN0ZW0gRW52aXJvbm1lbnQvRGFlbW9ucwoKJWRlc2NyaXB0aW9uIGRldmVsClRoZSBxdWFnZ2EtZGV2ZWwgcGFja2FnZSBjb250YWlucyB0aGUgaGVhZGVyIGFuZCBvYmplY3QgZmlsZXMgbmVjY2Vzc2FyeSBmb3IKZGV2ZWxvcGluZyBPU1BGLUFQSSBhbmQgcXVhZ2dhIGFwcGxpY2F0aW9ucy4KCiVwcmVwCiVzZXR1cCAgLXEKCiVidWlsZAolY29uZmlndXJlIFwKJWlmICV3aXRoX2lwdjYKCS0tZW5hYmxlLWlwdjYgXAolZW5kaWYKJWlmICV3aXRoX3NubXAKCS0tZW5hYmxlLXNubXAgXAolZW5kaWYKJWlmICV3aXRoX211bHRpcGF0aAoJLS1lbmFibGUtbXVsdGlwYXRoPSV3aXRoX211bHRpcGF0aCBcCiVlbmRpZgolaWYgJXdpdGhfdGNwX3plYnJhCgktLWVuYWJsZS10Y3AtemVicmEgXAolZW5kaWYKJWlmICV3aXRoX25zc2EKCS0tZW5hYmxlLW5zc2EgXAolZW5kaWYKJWlmICV3aXRoX29wYXF1ZV9sc2EKCS0tZW5hYmxlLW9wYXF1ZS1sc2EgXAolZW5kaWYKJWlmICV3aXRoX29zcGZfdGUKCS0tZW5hYmxlLW9zcGYtdGUgXAolZW5kaWYKJWlmICV3aXRoX3Z0eXNoCgktLWVuYWJsZS12dHlzaCBcCiVlbmRpZgolaWYgJXdpdGhfb3NwZmNsaWVudCAKCS0tZW5hYmxlLW9zcGZjbGllbnQ9eWVzIFwKJWVsc2UKCS0tZW5hYmxlLW9zcGZjbGllbnQ9bm9cCiVlbmRpZgolaWYgJXdpdGhfb3NwZmFwaQoJLS1lbmFibGUtb3NwZmFwaT15ZXMgXAolZWxzZQoJLS1lbmFibGUtb3NwZmFwaT1ubyBcCiVlbmRpZgolaWYgJXdpdGhfcGFtCgktLXdpdGgtbGlicGFtIFwKJWVuZGlmCiVpZiAlcXVhZ2dhX3VzZXIKCS0tZW5hYmxlLXVzZXI9JXF1YWdnYV91c2VyIFwKCS0tZW5hYmxlLWdyb3VwPSVxdWFnZ2FfdXNlciBcCiVlbmRpZgolaWYgJXZ0eV9ncm91cAoJLS1lbmFibGUtdnR5LWdyb3VwPSV2dHlfZ3JvdXAgXAolZW5kaWYKLS1lbmFibGUtbmV0bGluawoKbWFrZSAlez9fc21wX21mbGFnc30gTUFLRUlORk89Im1ha2VpbmZvIC0tbm8tc3BsaXQiCgpwdXNoZCBkb2MKdGV4aTJodG1sIHF1YWdnYS50ZXhpCnBvcGQKCiVpbnN0YWxsCnJtIC1yZiAkUlBNX0JVSUxEX1JPT1QKCmluc3RhbGwgLWQgJFJQTV9CVUlMRF9ST09UL2V0Yy97cmMuZC9pbml0LmQsc3lzY29uZmlnLGxvZ3JvdGF0ZS5kLHBhbS5kfSBcCgkkUlBNX0JVSUxEX1JPT1QvdmFyL2xvZy9xdWFnZ2EgJFJQTV9CVUlMRF9ST09UJXtfaW5mb2Rpcn0KCm1ha2UgaW5zdGFsbCBcCglERVNURElSPSRSUE1fQlVJTERfUk9PVAoKIyBSZW1vdmUgdGhpcyBmaWxlLCBhcyBpdCBpcyB1bmluc3RhbGxlZCBhbmQgY2F1c2VzIGVycm9ycyB3aGVuIGJ1aWxkaW5nIG9uIFJIOQpybSAtcmYgJFJQTV9CVUlMRF9ST09UL3Vzci9zaGFyZS9pbmZvL2RpcgoKIyBpbnN0YWxsIGV0YyBzb3VyY2VzCmZvciBkYWVtb24gaW4gJWRhZW1vbl9saXN0IDsgZG8KCWluc3RhbGwgJXt6ZWJfcmhfc3JjfS8ke2RhZW1vbn0uaW5pdCBcCgkJJFJQTV9CVUlMRF9ST09UL2V0Yy9yYy5kL2luaXQuZC8ke2RhZW1vbn0KZG9uZQppbnN0YWxsIC1tNjQ0ICV7emViX3JoX3NyY30vcXVhZ2dhLnBhbSBcCgkkUlBNX0JVSUxEX1JPT1QvZXRjL3BhbS5kL3F1YWdnYQppbnN0YWxsIC1tNjQ0ICV7emViX3JoX3NyY30vcXVhZ2dhLmxvZ3JvdGF0ZSBcCgkkUlBNX0JVSUxEX1JPT1QvZXRjL2xvZ3JvdGF0ZS5kL3F1YWdnYQppbnN0YWxsIC1tNjQ0ICV7emViX3JoX3NyY30vcXVhZ2dhLnN5c2NvbmZpZyBcCgkkUlBNX0JVSUxEX1JPT1QvZXRjL3N5c2NvbmZpZy9xdWFnZ2EKaW5zdGFsbCAtZCAtbTc1MCAgJFJQTV9CVUlMRF9ST09UL3Zhci9ydW4vcXVhZ2dhCgolcHJlCiMgYWRkIHZ0eV9ncm91cAolaWYgJXZ0eV9ncm91cApncm91cGFkZCAtciAldnR5X2dyb3VwIDI+IC9kZXYvbnVsbCB8fCA6CiVlbmRpZgojIGFkZCBxdWFnZ2EgdXNlciBhbmQgZ3JvdXAKJWlmICVxdWFnZ2FfdXNlcgovdXNyL3NiaW4vZ3JvdXBhZGQgLWcgJXF1YWdnYV9naWQgcXVhZ2dhIDI+IC9kZXYvbnVsbCB8fCA6Ci91c3Ivc2Jpbi91c2VyYWRkICAtdSAlcXVhZ2dhX3VpZCAtZyAlcXVhZ2dhX2dpZCBcCiAtTSAtciAtcyAvc2Jpbi9ub2xvZ2luIC1jICJRdWFnZ2Egcm91dGluZyBzdWl0ZSIgXAogLWQgJV9sb2NhbHN0YXRlZGlyICVxdWFnZ2FfdXNlciAyPiAvZGV2L251bGwgfHwgOgolZW5kaWYKCiVwb3N0CiMgemVicmFfc3BlY19hZGRfc2VydmljZSA8c2VydmljZSBuYW1lPiA8cG9ydC9wcm90bz4gPGNvbW1lbnQ+CiMgZS5nLiB6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlIHplYnJhc3J2IDI2MDAvdGNwICJ6ZWJyYSBzZXJ2aWNlIgoKemVicmFfc3BlY19hZGRfc2VydmljZSAoKQp7CiAgIyBBZGQgcG9ydCAvZXRjL3NlcnZpY2VzIGVudHJ5IGlmIGl0IGlzbid0IGFscmVhZHkgdGhlcmUgCiAgaWYgWyAtZiAvZXRjL3NlcnZpY2VzIF0gJiYgISBncmVwIC1xICJeJDFbXmEtekEtWjAtOV0iIC9ldGMvc2VydmljZXMgOyB0aGVuCiAgICBlY2hvICIkMQkJJDIJCQkjICQzIiAgPj4gL2V0Yy9zZXJ2aWNlcwogIGZpCn0KCnplYnJhX3NwZWNfYWRkX3NlcnZpY2UgemVicmFzcnYgMjYwMC90Y3AgInplYnJhIHNlcnZpY2UiCnplYnJhX3NwZWNfYWRkX3NlcnZpY2UgemVicmEgICAgMjYwMS90Y3AgInplYnJhIHZ0eSIKemVicmFfc3BlY19hZGRfc2VydmljZSByaXBkICAgICAyNjAyL3RjcCAiUklQZCB2dHkiCiVpZiAld2l0aF9pcHY2CnplYnJhX3NwZWNfYWRkX3NlcnZpY2UgcmlwbmdkICAgMjYwMy90Y3AgIlJJUG5nZCB2dHkiCiVlbmRpZgp6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlIG9zcGZkICAgIDI2MDQvdGNwICJPU1BGZCB2dHkiCnplYnJhX3NwZWNfYWRkX3NlcnZpY2UgYmdwZCAgICAgMjYwNS90Y3AgIkJHUGQgdnR5IgolaWYgJXdpdGhfaXB2Ngp6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlIG9zcGY2ZCAgIDI2MDYvdGNwICJPU1BGNmQgdnR5IgolZW5kaWYKJWlmICV3aXRoX29zcGZhcGkKemVicmFfc3BlY19hZGRfc2VydmljZSBvc3BmYXBpICAyNjA3L3RjcCAiT1NQRi1BUEkiCiVlbmRpZgp6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlIGlzaXNkICAgIDI2MDgvdGNwICJJU0lTZCB2dHkiCgpmb3IgZGFlbW9uIGluICVkYWVtb25fbGlzdCA7IGRvCgkvc2Jpbi9jaGtjb25maWcgLS1hZGQgJHtkYWVtb259CmRvbmUKCi9zYmluL2luc3RhbGwtaW5mbyAle19pbmZvZGlyfS9xdWFnZ2EuaW5mby5neiAle19pbmZvZGlyfS9kaXIKCiMgQ3JlYXRlIGR1bW15IGZpbGVzIGlmIHRoZXkgZG9uJ3QgZXhpc3Qgc28gYmFzaWMgZnVuY3Rpb25zIGNhbiBiZSB1c2VkLgppZiBbICEgLWUgJXtfc3lzY29uZmRpcn0vemVicmEuY29uZiBdOyB0aGVuCgllY2hvICJob3N0bmFtZSBgaG9zdG5hbWVgIiA+ICV7X3N5c2NvbmZkaXJ9L3plYnJhLmNvbmYKCWNobW9kIDY0MCAle19zeXNjb25mZGlyfS96ZWJyYS5jb25mCmZpCmlmIFsgISAtZSAle19zeXNjb25mZGlyfS92dHlzaC5jb25mIF07IHRoZW4KCXRvdWNoICV7X3N5c2NvbmZkaXJ9L3Z0eXNoLmNvbmYKCWNobW9kIDY0MCAle19zeXNjb25mZGlyfS92dHlzaC5jb25mCmZpCgolcG9zdHVuCmlmIFsgIiQxIiAtZ2UgICIxIiBdOyB0aGVuCglmb3IgZGFlbW9uIGluICVkYWVtb25fbGlzdCA7IGRvCgkJL2V0Yy9yYy5kL2luaXQuZC8ke2RhZW1vbn0gY29uZHJlc3RhcnQgPi9kZXYvbnVsbCAyPiYxCglkb25lCmZpCgolcHJldW4KaWYgWyAiJDEiID0gIjAiIF07IHRoZW4KCWZvciBkYWVtb24gaW4gJWRhZW1vbl9saXN0IDsgZG8KCQkvZXRjL3JjLmQvaW5pdC5kLyR7ZGFlbW9ufSBzdG9wICA+L2Rldi9udWxsIDI+JjEKCQkvc2Jpbi9jaGtjb25maWcgLS1kZWwgJHtkYWVtb259Cglkb25lCgkvc2Jpbi9pbnN0YWxsLWluZm8gLS1kZWxldGUgJXtfaW5mb2Rpcn0vcXVhZ2dhLmluZm8uZ3ogJXtfaW5mb2Rpcn0vZGlyCmZpCgolY2xlYW4KI3JtIC1yZiAkUlBNX0JVSUxEX1JPT1QKCiVmaWxlcwolZGVmYXR0cigtLHJvb3Qscm9vdCkKJWRvYyAqLyouc2FtcGxlKiBBVVRIT1JTIENPUFlJTkcKJWRvYyBkb2MvcXVhZ2dhLmh0bWwKJWRvYyBkb2MvbXBscwolZG9jIENoYW5nZUxvZyBJTlNUQUxMIE5FV1MgUkVBRE1FIFJFUE9SVElORy1CVUdTIFNFUlZJQ0VTIFRPRE8KJWlmICVxdWFnZ2FfdXNlcgolZGlyICVhdHRyKDc1MSwlcXVhZ2dhX3VzZXIsJXF1YWdnYV91c2VyKSAle19zeXNjb25mZGlyfQolZGlyICVhdHRyKDc1MCwlcXVhZ2dhX3VzZXIsJXF1YWdnYV91c2VyKSAvdmFyL2xvZy9xdWFnZ2EgCiVkaXIgJWF0dHIoNzUxLCVxdWFnZ2FfdXNlciwlcXVhZ2dhX3VzZXIpIC92YXIvcnVuL3F1YWdnYQolZWxzZQolZGlyICVhdHRyKDc1MCxyb290LHJvb3QpICV7X3N5c2NvbmZkaXJ9CiVkaXIgJWF0dHIoNzUwLHJvb3Qscm9vdCkgL3Zhci9sb2cvcXVhZ2dhCiVkaXIgJWF0dHIoNzU1LHJvb3Qscm9vdCkgL3Vzci9zaGFyZS9pbmZvCiVkaXIgJWF0dHIoNzUwLHJvb3Qscm9vdCkgL3Zhci9ydW4vcXVhZ2dhCiVlbmRpZgolaWYgJXZ0eV9ncm91cAolYXR0cig3NTAsJXF1YWdnYV91c2VyLCV2dHlfZ3JvdXApICV7X3N5c2NvbmZkaXJ9L3Z0eXNoLmNvbmYuc2FtcGxlCiVlbmRpZgole19pbmZvZGlyfS8qaW5mbyoKJXtfbWFuZGlyfS9tYW4qLyoKJXtfc2JpbmRpcn0vKgolaWYgJXdpdGhfdnR5c2gKJXtfYmluZGlyfS8qCiVlbmRpZgolY29uZmlnIC9ldGMvcXVhZ2dhL1shdl0qCiVjb25maWcgL2V0Yy9yYy5kL2luaXQuZC8qCiVjb25maWcobm9yZXBsYWNlKSAvZXRjL3N5c2NvbmZpZy9xdWFnZ2EKJWNvbmZpZyhub3JlcGxhY2UpIC9ldGMvcGFtLmQvcXVhZ2dhCiVjb25maWcobm9yZXBsYWNlKSAlYXR0cig2NDAscm9vdCxyb290KSAvZXRjL2xvZ3JvdGF0ZS5kLyoKCiVmaWxlcyBjb250cmliCiVkZWZhdHRyKC0scm9vdCxyb290KQolZG9jIHRvb2xzCgolZmlsZXMgZGV2ZWwKJWRlZmF0dHIoLSxyb290LHJvb3QpCiVkaXIgJXtfbGliZGlyfS8qCiVkaXIgJXtfaW5jbHVkZWRpcn0vJW5hbWUvKi5oCiVkaXIgJXtfaW5jbHVkZWRpcn0vJW5hbWUvb3NwZmQvKi5oCiVpZiAld2l0aF9vc3BmYXBpCiVkaXIgJXtfaW5jbHVkZWRpcn0vJW5hbWUvb3NwZmFwaS8qLmgKJWVuZGlmCgolY2hhbmdlbG9nCiVjaGFuZ2Vsb2cKKiBUaHUgSmFuIDA4IDIwMDQgUGF1bCBKYWttYSA8cGF1bEBkaXNob25lLnN0PgotIHVwZGF0ZWQgc3lzY29uZmlnIGZpbGVzIHRvIHNwZWNpZnkgbG9jYWwgZGlyCi0gYWRkZWQgb3NwZl9kdW1wLmMgY3Jhc2ggcXVpY2sgZml4IHBhdGNoCi0gYWRkZWQgb3NwZmQgcGVyc2lzdGVudCBpbnRlcmZhY2UgY29uZmlndXJhdGlvbiBwYXRjaAoKKiBUdWUgRGVjIDMwIDIwMDMgUGF1bCBKYWttYSA8cGF1bEBkaXNob25lLnN0PgotIHN5bmMgdG8gQ1ZTCi0gaW50ZWdyYXRlIFJIIHN5c2NvbmZpZyBwYXRjaCB0byBzcGVjaWZ5IGRhZW1vbiBvcHRpb25zIChSSCkKLSBkZWZhdWx0IHRvIGhhdmUgdnR5IGxpc3RlbiBvbmx5IHRvIDEyNy4xIChSSCkKLSBhZGQgdXNlciB3aXRoIGZpeGVkIFVJRC9HSUQgKFJIKQotIGNyZWF0ZSB1c2VyIHdpdGggc2hlbGwgL3NiaW4vbm9sb2dpbiByYXRoZXIgdGhhbiAvYmluL2ZhbHNlIChSSCkKLSBzdG9wIGRhZW1vbnMgb24gdW5pbnN0YWxsIChSSCkKLSBkZWxldGUgaW5mbyBmaWxlIG9uICVwcmV1biwgbm90ICVwb3N0dW4gdG8gYXZvaWQgZGVsZXRpb24gb24gdXBncmFkZS4gKFJIKQotIGlzaXNkIGFkZGVkCi0gY2xlYW51cCB0YXNrcyBjYXJyaWVkIG91dCBmb3IgZXZlcnkgZGFlbW9uCgoqIFN1biBOb3YgMiAyMDAzIFBhdWwgSmFrbWEgPHBhdWxAZGlzaG9uZS5zdD4KLSBGaXggLWRldmVsIHBhY2thZ2UgdG8gaW5jbHVkZSBhbGwgZmlsZXMKLSBTeW5jIHRvIDAuOTYuNAoKKiBUdWUgQXVnIDEyIDIwMDMgUGF1bCBKYWttYSA8cGF1bEBkaXNob25lLnN0PgotIFJlbmFtZWQgdG8gUXVhZ2dhCi0gU3luYyB0byBRdWFnZ2EgcmVsZWFzZSAwLjk2CgoqIFR1ZSBNYXIgMjAgMjAwMyBQYXVsIEpha21hIDxwYXVsQGRpc2hvbmUuc3Q+Ci0gemVicmEgcHJpdmlsZWdlcyBzdXBwb3J0CgoqIE1vbiBNYXIgMTggMjAwMyBQYXVsIEpha21hIDxwYXVsQGRpc2hvbmUuc3Q+Ci0gRml4IG1lbSBsZWFrIGluICdzaG93IHRocmVhZCBjcHUnCi0gUmFscGggS2VsbGVyJ3MgT1NQRi1BUEkKLSBBbWlyOiBGaXggY29uZmlndXJlLmFjIGZvciBuZXQtc25tcAoKKiBTYXQgTWFyIDEgMjAwMyBQYXVsIEpha21hIDxwYXVsQGRpc2hvbmUuc3Q+Ci0gb3NwZmQgSU9TIHByZWZpeCB0byBpbnRlcmZhY2UgbWF0Y2hpbmcgZm9yICduZXR3b3JrJyBzdGF0ZW1lbnQKLSB0ZW1wb3JhcnkgZml4IGZvciBQdFAgYW5kIElQdjYKLSBzeW5jIHRvIHplYnJhLm9yZyBDVlMKCiogTW9uIEphbiAyMCAyMDAzIFBhdWwgSmFrbWEgPHBhdWxAZGlzaG9uZS5zdD4KLSB1cGRhdGUgdG8gbGF0ZXN0IGN2cwotIFlvbidzICJzaG93IHRocmVhZCBjcHUiIHBhdGNoIC0gMTcyMTcKLSB3YWxrIHVwIHRyZWUgLSAxNzIxOAotIG9zcGZkIE5TU0EgZml4ZXMgLSAxNjY4MQotIG9zcGZkIG5zbSBmaXhlcyAtIDE2ODI0Ci0gb3NwZmQgT0xTQSBmaXhlcyBhbmQgbmV3IGZlYXR1cmUgLSAxNjgyMyAKLSBLQU1FIGFuZCBpZmluZGV4IGZpeGVzIC0gMTY1MjUKLSBzcGVjIGZpbGUgY2hhbmdlcyB0byBhbGxvdyByZWRoYXQgZmlsZXMgdG8gYmUgaW4gdHJlZQoKKiBTYXQgRGVjIDI4IDIwMDIgQWxleGFuZGVyIEhvb2dlcmh1aXMgPGFsZXhoQGloYXRlbnQuY29tPgotIEFkZGVkIGNvbmRpdGlvbmFscyBmb3IgYnVpbGRpbmcgd2l0aChvdXQpIElQdjYsIHZ0eXNoLCBSSVAsIEJHUAotIEZpeGVkIHVwIHNvbWUgYnVpbGQgcmVxdWlyZW1lbnRzIChwYXRjaCkKLSBBZGRlZCBjb25kaXRpb25hbCBidWlsZCByZXF1aXJlbWVudHMgZm9yIHZ0eXNoIC8gc25tcAotIEFkZGVkIGNvbmRpdGlvbmFsIHRvICVmaWxlcyBmb3IgJV9iaW5kaXIgZGVwZW5kaW5nIG9uIHZ0eXNoCgoqIE1vbiBOb3YgMTEgMjAwMiBQYXVsIEpha21hIDxwYXVsakBhbHBoeXJhLmllPgotIHVwZGF0ZSB0byBsYXRlc3QgQ1ZTCi0gYWRkIEdyZWcgVHJveGVsJ3MgbWQ1IGJ1ZmZlciBjb3B5L2R1cCBmaXgKLSBhZGQgUklQdjEgZml4Ci0gYWRkIEZyYW5rJ3MgbXVsdGljYXN0IGZsYWcgZml4CgoqIFdlZCBPY3QgMDkgMjAwMiBQYXVsIEpha21hIDxwYXVsakBhbHBoeXJhLmllPgotIHVwZGF0ZSB0byBsYXRlc3QgQ1ZTCi0gdGltZXN0YW1wZWQgY3J5cHRfc2VxbnVtIHBhdGNoCi0gb2ktPm9uX3dyaXRlX3EgZml4CgoqIE1vbiBTZXAgMzAgMjAwMiBQYXVsIEpha21hIDxwYXVsakBhbHBoeXJhLmllPgotIHVwZGF0ZSB0byBsYXRlc3QgQ1ZTCi0gYWRkIHZ0eXNoICd3cml0ZS1jb25maWcgKGludGVncmF0ZWR8ZGFlbW9uKScgcGF0Y2gKLSBhbHdheXMgJ21ha2UgcmVidWlsZCcgaW4gdnR5c2gvIHRvIGNhdGNoIG5ldyBjb21tYW5kcwoKKiBGcmkgU2VwIDEzIDIwMDIgUGF1bCBKYWttYSA8cGF1bGpAYWxwaHlyYS5pZT4KLSB1cGRhdGUgdG8gMC45M2IKCiogV2VkIFNlcCAxMSAyMDAyIFBhdWwgSmFrbWEgPHBhdWxqQGFscGh5cmEuaWU+Ci0gdXBkYXRlIHRvIGxhdGVzdCBDVlMKLSBhZGQgIi9zYmluL2lwIHJvdXRlIGZsdXNoIHByb3RvIHplYnJhIiB0byB6ZWJyYSBSSCBpbml0IG9uIHN0YXJ0dXAKCiogU2F0IEF1ZyAyNCAyMDAyIFBhdWwgSmFrbWEgPHBhdWxqQGFscGh5cmEuaWU+Ci0gdXBkYXRlIHRvIGN1cnJlbnQgQ1ZTCi0gYWRkIE9TUEYgcG9pbnQgdG8gbXVsdGlwb2ludCBwYXRjaAotIGFkZCBPU1BGIGJ1Z2ZpeGVzCi0gYWRkIEJHUCBoYXNoIG9wdGltaXNhdGlvbiBwYXRjaAoKKiBGcmkgSnVuIDE0IDIwMDIgUGF1bCBKYWttYSA8cGF1bGpAYWxwaHlyYS5pZT4KLSB1cGRhdGUgdG8gMC45My1wcmUxIC8gQ1ZTCi0gYWRkIGxpbmsgc3RhdGUgZGV0ZWN0aW9uIHN1cHBvcnQKLSBhZGQgZ2VuZXJpYyBQdFAgYW5kIFJGQzMwMjEgc3VwcG9ydAotIHZhcmlvdXMgYnVnIGZpeGVzCgoqIFRodSBBdWcgMDkgMjAwMSBFbGxpb3QgTGVlIDxzb3B3aXRoQHJlZGhhdC5jb20+IDAuOTFhLTYKLSBGaXggYnVnICM1MTMzNgoKKiBXZWQgQXVnICAxIDIwMDEgVHJvbmQgRWl2aW5kIEdsb21zcvhkIDx0ZWdAcmVkaGF0LmNvbT4gMC45MWEtNQotIFVzZSBnZW5lcmljIGluaXRzY3JpcHQgc3RyaW5ncyBpbnN0ZWFkIG9mIGluaXRzY3JpcHQgc3BlY2lmaWMKICAoICJTdGFydGluZyBmb286ICIgLT4gIlN0YXJ0aW5nICRwcm9nOiIgKQoKKiBGcmkgSnVsIDI3IDIwMDEgRWxsaW90IExlZSA8c29wd2l0aEByZWRoYXQuY29tPiAwLjkxYS00Ci0gQnVtcCB0aGUgcmVsZWFzZSB3aGVuIHJlYnVpbGRpbmcgaW50byB0aGUgZGlzdC4KCiogVHVlIEZlYiAgNiAyMDAxIFRpbSBQb3dlcnMgPHRpbXBAcmVkaGF0LmNvbT4KLSBidWlsdCBmb3IgUG93ZXJ0b29scwoKKiBTdW4gRmViICA0IDIwMDEgUGVra2EgU2F2b2xhIDxwZWtrYXNAbmV0Y29yZS5maT4gCi0gSGFja2VkIHVwIGZyb20gUExEIExpbnV4IDAuOTAtMSwgTWFuZHJha2UgMC45MC0xbWRrIGFuZCBvbmUgZnJvbSB6ZWJyYS5vcmcuCi0gVXBkYXRlIHRvIDAuOTFhCi0gVmVyeSBoZWF2eSBtb2RpZmljYXRpb25zIHRvIGluaXQuZC8qLCAuc3BlYywgcGFtLCBpMThuLCBsb2dyb3RhdGUsIGV0Yy4KLSBTaG91bGQgYmUgcXVpdGUgUmVkIEhhdCdpc3F1ZSBub3cuCg==