Skip to content
KernelIndex
Search⌘K

amd-mixture-of-experts · submission 25695

KernelBot user 430 · python · License unknown

Use it

Vendorable · source mirrored · license unknownView source →

No package. Vendor the mirrored source: 1 lines, June 9 Researcher Reciprocity License v1.0.

moe.py
curl "https://kernelindex.com/api/v1/implementations/kernelbot-amd-mixture-of-experts-25695?include=source"
interfacepython
Compatibility
measured onAMD Instinct MI300X
declared hardwareAMD Instinct MI300X
architecturesgfx942
dtypesfp16

Benchmark evidence

2 measurements across 1 GPU, fastest first.

Operation / workload
Hardware
Latency
Rank
Observed
AMD DeepSeek-style MoE layerfp16 · [1, 2048, 7168]
AMD Instinct MI300X
200.4ms
#76 of 118
2025-05-21
AMD DeepSeek-style MoE layerfp16 · [1, 8192, 7168]
AMD Instinct MI300X
206.4ms
#74 of 118
2025-05-21

Reported · How evidence levels are derived →

Source and license

sourceavailable
revision digestsha256:5490d3508013564d73efabbd8324e39c7e477fc8e07f1851213ecf3a40fe15f9
license declaredunknown
license concludedunknown
imported2026-08-15

Kernel source

moe.py1 lines
aW1wb3J0IG1hdGgNCmltcG9ydCB0b3JjaA0KaW1wb3J0IHRvcmNoLm5uIGFzIG5uDQppbXBvcnQgdG9yY2gubm4uZnVuY3Rpb25hbCBhcyBGDQpmcm9tIHR5cGluZyBpbXBvcnQgQW55LCBEaWN0LCBUdXBsZSwgT3B0aW9uYWwsIExpc3QNCmltcG9ydCB0cml0b24ubGFuZ3VhZ2UgYXMgdGwNCmltcG9ydCB0cml0b24NCmltcG9ydCBmdW5jdG9vbHMNCmZyb20gdGFzayBpbXBvcnQgaW5wdXRfdCwgb3V0cHV0X3QNCmZyb20gdG9yY2gudXRpbHMuY3BwX2V4dGVuc2lvbiBpbXBvcnQgbG9hZF9pbmxpbmUNCmltcG9ydCBsem1hDQppbXBvcnQgYmFzZTY0DQoNCmltcG9ydCBvcyANCm9zLmVudmlyb25bJ1BZVE9SQ0hfUk9DTV9BUkNIJ10gPSAnZ2Z4OTQyJw0KDQpjdWRhX2NvZGUgPSAiIiJ7V3A0OFNeeGs5PUdMQEUwc3RXYTc2MVNNYlQ4JGo7N1JRZXZ8UnVOMzYqSGpvd2EwYEpBLTtPTW1wZFNNQGZETillZD1+SWtEUypmXkM3b21LcHBLNilyOSNgR0V1IWdBaUJWb2JoSX5DNUlhIU53ajQtNiFsfClqRW1NWm5uYGdhQFZgTStHM18+QjxmPDg2XkpwXndvfnNLNEQ+NXpIfEUxNTFvc1ROSUBIUl52U0ArXkp3VXxWPSRALXYtd1AkLW5HZExnfm1SKSEhJTdWWVBBXmZUKlFPRWNAUFRsWmRyTFJyOyFAUD1ARjhzODwreSFrfGNZbTI8bHZKaHdlY2coUHlTPEQxWWVBe1JlTyl0dWZTb0JQNkIqJHNrezdUKk9FQmluOHNDbTBMcnBsRi0jPU5iSXpGP0F6PGYyRS09LVdkcn5fblA1UE4kI2Q9TzJhZUI0dExTUmdRPG97ZXs1ZiZfVkR6JVlUc011VWtJYVpsSGhadVRpTEZxMnxfcjF1QWV5eGsxWEBtNX5rPjFYWFc9ODtycjdoQFZxWj9wdjZHZjZPSzx6PXJoKndNNkhJNmxDPkhRMnlqdDMkb3dGbzctdkkxOU16ZTJUO2N1JG5nLT5xYmo+LVohSCZ3WnQtfVRKVmkzenhgZ0h5QnkxLTwxZXhyZn1NVEw/NVd9WTQpV3lIPXQzLXImI25lMTZTUUl2eWViSjFZU1YwIU8rKE1qMTxeMiZ6LVYoeXN2cWRmSUVueDw0SHBCNkppSExIPFItM09jPSo2eTJ+S0huOW8waGZ0RHNBQ2wlMm4oQzRBX0hZPkNMcnZDWHI5VjVNfnZPfjcpb0BUKHEjX1BIcEJiZnI4bWs9MlJyeldMaitAPXdoRWRLU1lBdk52SnhYbChDRl8tUFdteSRgOGNpUlMmKEN3UGlqI2RDJFQ5MShFZ3BeMU92Uzc0aUBVT1hPeG9YJSZFQ2JRMU9YKUxTMHVwYXFNazc5Tk9Sa2BxNjltNmNEIXdGVmJVQ2dKfVlgUD5LOypyLWNMWCVJYF58ZyFPUzZuJDJ8Nig8YmB1WStle24+dXlPZF9MZWsqdz0pYjctKW1lWT81S2JkJT9uKjY8WkAoUmU3X2NJTGYoMD5EMStqUkpHREdmMGkrQlhDO354YXlAbGV3eShQPk1Ia3VBemlpUUI2bDBgb29pQHYhQnVXN2M+eUtZQkF0XnVHIW9FYztReXRmWkVaeDg2bjU3SjMhVWxlUThvUDNiRlAqcm1aQllFb2Q4Q0UkQ1U+fVNMTEhGelNFSjFlVX0yQWIlcSFtPnBER1dsZ0srXlZvRUgqTkpKPEAzRyEtPClvRilrJnFGNVNEMGhnOUJGWXRpajdZbCg0UllQKlooSSNLOFEpKTQ/dTJnfkRhRFRBOHlOfmMrX0pHJTF3cD9PKXtPK1RCdlVlY059TmN4KSRIezNgSnVaKEh8JEpHPEE7KHU8ZGl9KFVieVdASmYhQyM9QEkzSFR4WUMmOEVYJVphc0olQ0pGd3Z0Q1kqa3BqMW4kOTIyZkF+bS1YZWhqT0YyUSpebzRCYFdpcloweyljJm4jNTQ9cjZjVGM7WXBWSHtoI3RBel9nWiNUKTViKTk8dGBzbygwY1opITh5V1puVT5laFooP2F2cG9YJiVoYyRnZH1eTE5FZ011YEt6YTtnLWd2cXVBcFBjdEUrVURjMztTT25UYFpDM0pGVW9zXkR6RC15Nm45cWxGOHFZOURLZWgtWiY3SzE9bUc+NTk5NXRtbUUhKDhCNWdKcCNOVTd7JFN3V3t4SzhGTks1cnVRUkQlO0VocjJ4MXEyLURofDkrQGJAKEhZSUteYkgmfk9WX05HRyYqaUteREo+TXxnKXVEV2oqZSokaEA/WHMhckNJODEwO0N2UHVJV31eQSM4USteN3gjNHRhcCshQGhHR1RwO3QpMEl6SDwtOVBiTGZkU3dtKCgoKEoyNSpITmAzI1c3NUohRThCNTx0bSgxc0olND5iTFdDeGIkajl2SEg4bS1WQD1xVEtXait4PEUmdVBvN3xWPjljfnhacXgjdzZBbUhIRmBedGNpSUNNazxwYDhwRlE8KjZWK3xBU2w2NjBKM0dyUzk1YjZWRDwqUnUmUHEocHUxOyVqTHlUPFN+c3ZSMSQqQ2ZeVCpmTVV8TGBMQ3I1N09zMD4oXmhrJFJOZno5WEVeN147QVVLMyhSY1dCYm9hcjFsd0RyIWFwSktaUCRDQUt7ajd8Z3NESFZJU3MjSmRUNkArP3l1ak9JYGgrUzJSPntgQ1dCd2J3MiRsUnxzRnlBMEJKTTNaZmBVRmo7bHQoaHFpQUxqJDVvbD9ydCpJVm1pKnlkNj5sSm1pY3dvO25YOSopUlpBYikoVX5RfEQ2MU1gLXEzKyRLV3VSfGo0YjcjXkpsdEUlanlYSzc2cTRKZlBlWEZvS0xiRTc7IzsjKT14ZXZ8QV9aX2IhZyE4ZWtlZD97SUcrZVRURVQ/anNxYXA5MHkrK0lNM09Zd3c/Y0tjRzBiVV5HQmVaeFBENmNvfVlFO1pZXzwwQXxxLTl0YUsyX2VaSUVSO050X2BSQWJPeHRHcDI7bStvaj1gYGM0U3VZUSZUJFY4TzMqYnkqdVkoSEpsN1JjJj1Vbng2ZmtmMWgwUGVHcTQ3a1hYZSpIYlhpdHVKeWA+YG0xVURrNl5DX2tDJkl6U3haJHR6KVRSYkkwdlFaUW87KkpCUm1Pcn1rMTs4R1dWfVombWY2aVc+Wn54bDZsU25uI2c9elomYmJQM1Y1Y2NPUEhGKzZGJGNRSylMPnFSRnBONTVkS3twa2Bjaip+e2I1a15DNHo5cnFVdUhRK21GLWcjaH1aeWw7cjw9PFk0ekNQeFFHM0dlWHo9U1VpcG5LSSlpal9sQURCeGg9TlZkaDEkSUlVfFFHXmAwMW12XmIjbTUpMXo/IV85PF97Yi0rZS0xJDttU0ojTDhXSnxwWD5yc0VLUSN2TFYxMXdFRElZfFMmODFzaGB9bEQ0cF9SIVVaVURLUS1Nejw2WjM4KG0hMVZncWV5SUB8MmVJcmRwNklwQkYqbylmO2ctTWgqRndydmlOWFJDQV9Vb0pven48Ky17Y01rbEZrRnljWGc5YzVjSFNsTlZJSUV8azlzbFc2fHVsRF9eZ1pkemFtYyZGYWdJPWAzdWhzXyltKFd5ezg4bzxDaSFyT0NtQT9DNlB5TEpWdkU3X3YjUDVXe3hqYU5CVStZTFdRUDJwZWx2fiZ8Zz8tTSQ/OWpXUGc3K1o0VkI8di10aXJyYXx4VnpAI1BQRTY2PzR6XlFhaU9AczIhbiVJanIkMzAhdm4oayg9OSlAczEoeD1OKDxwM2ZSS1RDM1RGfkoycUYhSVRXJjZ4bkBhXkgpblEwaih0MkFiRTspKHtoVjVMdU8kYlJCTigwPGJ6cWhuV2Q7JTtwQSVqaE9FUVBpKnNlNGpiTjFyWVNwIVVDc0Z3JExfdjNnMjlXOTl0QCkmO0RGZ1VqV3ZvTDNrPG1IWVA4dFVVdlNfQkB+JnIqRl5kJncwRzs1ZHU5YUFWRHVkMUZHO3NFZjNzUERZUDA+Xnk5bChPJll+IUs8VnZGV3AqNkNlSWtCPm5zP3lHPlojbHMkTDI+KEkpNjslTU9Xa1hebDhSNEJicGZMKEZyTnwpT1I0aWQ1MjF2MEhnQFRLR15nYD57RExMPiVmdXkjQnF7PUVlfDA+VDNMWXpjNjBQTWxKWmIrbnowPXxwSiNwPklSUl5SdTVTKjtyPjZ5eFRHNCl+YyZXQUxTVX1nRXJFK2FMWSFgISZJcXdfOSV0aCtVaighWDI3KGVIdU9SbnlXLT4/T3hwZmg5RHVXQF93O1NLQDNVZWJ1cDJMZXRxeVp8aj1MWilyNU9YdkMjRGcpJipvNTd4ak9jWnRHeSE5dU1qfiMjOCVebDlMNDchNCNpQnUlKWFAO3VBKCtXRlk5al9OZyZTfE04eG5OQGdWNC1jQFgrRnxGKmlMdXlJWntCVkIkVT9LcklgKkp1WU8hVShMOF5zJEZ7V25QRmwkVDtPYy1CWVkjPV9BYCtNY2FkMUd6TDFAP2xZflBmRyRCe2xlJjA+PFVuK3xeNnhCM0hzfDRld3gxVSVGTyl0cTRrNnlTXjRedCsocS17bFNBJiordVErfkoqZnFvejxuVkE9TnpGZ0ZNciF5WVNOcV9pcEwzSX1DaEQxeXhsc0gxeHVYJT9XXk1DVzRxbjZNeWIlaTxgMXEwbTlaVDcheSo4V01wPHE4fD1OTWg9SFFFYWpqVGhDeXk4KGk+MDNCcWh6SCEwaTtyai1oaWx4PU9iQSVXRCg2biVjZUN1JlpgVWJYJWlFcEY2bztFWTNMa0dHSU83YWpwb2BEVVhvZUc9dGtiX1pRak9hKSVjcSFRamV8PktVZyVLJHkpQzhfXm4xTyRpcF9NR3wjJTZOKkh1SHRAM2dgZGgmNm08eXxrKSV0ailUX1V+aiFtNjV5MjlFU2ojeHd0VDk9YyREdUg+IXo+IUE2K15NcTlDT19hZ1lpJDx8ISR4YnlyYHJ6ZnY7PS0/TnBFUXArQURncT5tJG82QGNZRno4YUUqSF5mUWNKdkVWbFoqQU9ZJj45dU1OT3A+eWFYWkdONlctOUFodXY+eEdTe2NeYGJAaCVteUNeWkBsVEFEXmJsRWUyKHFAM2IrZm5AKCNjJjhmfl9jMGokSDhgTEJDI3dWamlfSDM9dWUkWDU8SD11T3MmUGNeVHlOQTltRDIoSFR+c0chP0l5eG9nfCUzRXVSY3IzaDRuKC1LJU4rQHlHfDlVO09Wbz1iNitldjRMcVA4TGxZRXM2dXtOZjl+eU8qbWlPKjcmUiU2amV2V2MmZmU1ZmhjUDBBNiFMMjVoN0sybjNQJH5nUU11P0FKVGNJK04pU0xxKDhvIW9kWFQhIzBTWVYle0MkNkkzdX0jKHtDYW1sIUN5fHpnbDRjPT9IanclRz9zRnRBcWk7QTIzYkZMT0tPdzhed2xBI3tXSWk9KE9IdCFWTU50eVEwdVJAOV9kcjhXJHgoZ1R5ZlhYMnJyMHk7KHVkN1ZJUU9zQis2VFJHWCs2NDBSSH1yblpTbzBKPCYlP3I5T3dfRUA/YEdNbW9iLTE1N2xhdnFyP08pYCR1OTg8VUNeOyElaU5FUWVNO0p4eXJ5ISEoSWZCNygjSEJsYnlyYzt5TEVRPSU/TWVeSz8xR3s1Uk5yKk09JV5ILVkjJXEwdGhtJXs9cUlPVitpU3R0ITx5SzI7dktKXypMWGJLWUFyWD82P3VLUVR3d2tGJnd+RzROK1JWXz81PUZVcnJea0FBOCkpYjhlciteUFZDWnNDZUdMcyhzNHc1YldWTz9oS24xKnlpdmNRJGcxazNuSjE0a0JzKURyVlpQYCUlM3NJISQ5SyVAbUx1az8jQG43ZyVCeFN0SEhxKVMqTDxpJUUqZXQ9aztpXzVCWE02SiRYSUREbGhFOzVSNWhoeSZifjMpJnoqbHVLamFEUChuKClUV2skS1hvVnk9NlRkPWxuWTdpS0FZPzhjIy1jPD4wME4tNiU2aHJqWjhlQUNUO0NeMXdSZChVPnJNSHtSajxKT01LN1Ikem4qVFB3bXUrelJlOXEhT3lBJSM7c1p+SDhTPXlkKC1wMmMlNHROUSFEeT8jIV5HLXNGM04mYEFYIVBsPn4+JlBQOE5udjxSS1lWbjZfNkhmRlYzbVU3fiZ2PFFoWkxRQ0pnQn5zQ18lR3RRRUBjcitrcDJjKmhYPX1ePVdWQzR9dWtYbzd4e3o7SWF5QiZjbm5zVVFOPStrQWVUVXUtbj9XOD9ybGR7OCo2VjN0PEprdWQ9RjBuLUVTIWV7QnxlY2ZHYSNZPXhFOHRDbmJYTFZQUmRsYXY7c18+UX43U0NOZGkhRHpPYExXel5QbCNyRTNGI1AjTjNaPj8xQHVEV08jQ2JgfE9zRDhFTD5QRmV4UjlfeU4qRDFJJmQmTD9fdWV1cjw4SFB9ZlBOVTtMJjlXM3x1bT0jPCV6OXNqfF9gZVNiJEp9dGg4XkVDJDdrNHpfIVZxSXlQMDhuV05MWGxQJT1tX2R3YD0jSyYqWV40OGkqKzNSWipkS2VTc25oYEFqMn1oN3M2T2coTkBNcjhTVDxjPCVybj4yYHtPQHs5SlF4KUhyQj07aFlMb2ArTEYrUzZ1ckExbVdQME8rc2BrTHVsR0FzZGVBM3M8SHZ0RSNqLXJ7UHYpOUxmR016KWxVKmVfJXdIOHhQOzhBVUtOfVBSR3NOVjhXZ3lYQXNhO0hsUThqaEI3SmZQUiUzdSs4PV81Nm1uOHo9OWA/PmtOfHEpOT8rdVUzUnExX3U8Vk8zdkUyRj9ocGVgYCpeJTYoUTFQUjRSWml9d0RiOXk9SnNDQHIqKGIjX1dNMypfcE5yc0MtZUBLZVZoX2Jle2h4RVFuV01DPFZoM0BHcllMQypGcHNme2R6enNlSlFkO01AfihFbT51QlN7UHlDPUNiJHQ1TlEyZHJfVHwlPkkhbl48S3FrYUloc0otXzdyKGxPbnpKNkNxWDdqPHZ1dX05TUNxdS1IY3dqKitXOyE4cnEwUUIlMXxlQl9Tb1JfTk1hJXErN3dJJEY/JGt2eGIqY1FSPz92NzE9enwySnk3Jm95bGhWRkUzI143MlpwOV8qUUxfOSglMXlIbHRIXjh2ZVUpaD9JeEpfLWZHajthTDgqYlFqUXRhM1kpZ2lmJGdWMnBvV1lhTkB+bi1OTWt5MiZubnFRUHVGV1lNLVVqTyF6fWZxTmZTM2greXlJZlQ/Nl5sPCojMjgySXZkSUQ+QmhAdVg9PElXQj1hYmdeLStSV3lVS2VJTkYxeiN3OCNaPSZxTzB2VjkxZXZDN3h9bGgkLWYpQWhmZ3k5Nj1YSChjP0YhbFkpMXI2TDxOfTEhWXRKeHsoWHVDITtAZC1qZGxpZ30tM3IoQGQxM0pIOVEob29QLVpSIUB5djFaWWRsYW5eQWZHdklSO0Z3Q0VkV3h4VFopRzcyQW9eZHRxcDUpbSFmYGduPnJBSGVWUHVUQGZsY1FpRmc9a3RhMl9oNTJvY0BVeC1ae2V5a2t6SHMzSHApX251cXcrVk9qdEhPemlaMVc0KzsqMDBHYjs/dm51a3JPemImdkJZUWwwc3NJMjAwZGNEIiIiDQoNCmNwcF9jb2RlID0gIiIie1dwNDhTXnhrOT1HTEBFMHN0V2E3NjFTTWJUOCRqLX5sQFRpQ3E4JThjZWdNVjdTPzFZeypoYVNQXnFZSnwkO2BvJSFiXiF2RjReTkV6TUFgNmY4T1BTV3RpaDM1NHwjMjJHamstcGcoJnxjVmNVI1BkNT9sT2ZUeXljVU05VEUqS2M2akI/UjhWRm1sPDspYld7S21gKGx9QHklVmcrZzQ8QSVjbkJOeGZXPTsmLTg8IyYoXllkZTRaVm8yYChsZ3MhcHdzY0ZHSjE8UVNXSHZrMDAwMDB7UnRTY0J7WiYkMDBFQHx5YUU2S2R8MVRldkJZUWwwc3NJMjAwZGNEIiIiDQoNCmN1ZGFfZGF0YSA9IGJhc2U2NC5iODVkZWNvZGUoY3VkYV9jb2RlKQ0KQ1VEQV9TUkMgPSBsem1hLmRlY29tcHJlc3MoY3VkYV9kYXRhKS5kZWNvZGUoJ3V0Zi04JykNCg0KY3BwX2RhdGEgPSBiYXNlNjQuYjg1ZGVjb2RlKGNwcF9jb2RlKQ0KQ1BQX1dSQVBQRVIgPSBsem1hLmRlY29tcHJlc3MoY3BwX2RhdGEpLmRlY29kZSgndXRmLTgnKQ0KDQpvcy5lbnZpcm9uWyJDWFgiXSA9ICJnKysiDQoNCm1vZHVsZSA9IGxvYWRfaW5saW5lKA0KICAgIG5hbWU9J21vZV9tb2R1bGUnLA0KICAgIGNwcF9zb3VyY2VzPVtDUFBfV1JBUFBFUl0sIA0KICAgIGN1ZGFfc291cmNlcz1bQ1VEQV9TUkNdLA0KICAgIGZ1bmN0aW9ucz1bJ3RvcGtfc29mdG1heCcsJ3NpbHVfYW5kX211bCcsJ21vZV9zdW0nXSwNCiAgICB2ZXJib3NlPVRydWUsDQogICAgZXh0cmFfY3VkYV9jZmxhZ3M9WyItLW9mZmxvYWQtYXJjaD1nZng5NDIiLCAiLXN0ZD1jKysyMCJdLA0KKQ0KDQpjbGFzcyBTaWx1QW5kTXVsKG5uLk1vZHVsZSk6DQogICAgZGVmIF9faW5pdF9fKHNlbGYpOg0KICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkNCg0KICAgIGRlZiBmb3J3YXJkKHNlbGYsIHg6IHRvcmNoLlRlbnNvcikgLT4gdG9yY2guVGVuc29yOg0KICAgICAgICBkID0geC5zaGFwZVstMV0gLy8gMg0KICAgICAgICByZXR1cm4gRi5zaWx1KHhbLi4uLCA6ZF0pICogeFsuLi4sIGQ6XQ0KDQpkZWYgZnVzZWRfdG9waygNCiAgICBoaWRkZW5fc3RhdGVzOiB0b3JjaC5UZW5zb3IsDQogICAgZ2F0aW5nX291dHB1dDogdG9yY2guVGVuc29yLA0KICAgIHRvcGs6IGludCwNCik6DQogICANCiAgICBhc3NlcnQgaGlkZGVuX3N0YXRlcy5zaGFwZVswXSA9PSBnYXRpbmdfb3V0cHV0LnNoYXBlWzBdLCAiTnVtYmVyIG9mIHRva2VucyBtaXNtYXRjaCINCg0KICAgIE0sIF8gPSBoaWRkZW5fc3RhdGVzLnNoYXBlDQogICAgdG9wa193ZWlnaHRzID0gdG9yY2guZW1wdHkoDQogICAgICAgIE0sIHRvcGssIGR0eXBlPXRvcmNoLmZsb2F0MzIsIGRldmljZT1oaWRkZW5fc3RhdGVzLmRldmljZQ0KICAgICkNCg0KICAgIHRvcGtfaWRzID0gdG9yY2guZW1wdHkoTSwgdG9waywgZHR5cGU9dG9yY2guaW50MzIsIGRldmljZT1oaWRkZW5fc3RhdGVzLmRldmljZSkNCiAgICB0b2tlbl9leHBlcnRfaW5kaWNpZXMgPSB0b3JjaC5lbXB0eSgNCiAgICAgICAgTSwgdG9waywgZHR5cGU9dG9yY2guaW50MzIsIGRldmljZT1oaWRkZW5fc3RhdGVzLmRldmljZQ0KICAgICkNCg0KICAgIG1vZHVsZS50b3BrX3NvZnRtYXgoDQogICAgICAgIHRvcGtfd2VpZ2h0cywNCiAgICAgICAgdG9wa19pZHMsDQogICAgICAgIHRva2VuX2V4cGVydF9pbmRpY2llcywNCiAgICAgICAgZ2F0aW5nX291dHB1dC5mbG9hdCgpDQogICAgKQ0KICAgIGRlbCB0b2tlbl9leHBlcnRfaW5kaWNpZXMNCiAgICByZXR1cm4gdG9wa193ZWlnaHRzLCB0b3BrX2lkcw0KDQpjbGFzcyBFeHBlcnRNTFAobm4uTW9kdWxlKToNCiAgICBkZWYgX19pbml0X18oDQogICAgICAgIHNlbGYsDQogICAgICAgIGhpZGRlbl9zaXplOiBpbnQsDQogICAgICAgIGludGVybWVkaWF0ZV9zaXplOiBpbnQsDQogICAgKSAtPiBOb25lOg0KICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkNCg0KICAgICAgICBzZWxmLmdhdGVfdXBfcHJvaiA9IG5uLkxpbmVhcigNCiAgICAgICAgICAgIGhpZGRlbl9zaXplLCANCiAgICAgICAgICAgIGludGVybWVkaWF0ZV9zaXplICogMiwgDQogICAgICAgICAgICBiaWFzPUZhbHNlDQogICAgICAgICkNCiAgICAgICAgDQogICAgICAgIHNlbGYuZG93bl9wcm9qID0gbm4uTGluZWFyKA0KICAgICAgICAgICAgaW50ZXJtZWRpYXRlX3NpemUsDQogICAgICAgICAgICBoaWRkZW5fc2l6ZSwNCiAgICAgICAgICAgIGJpYXM9RmFsc2UsDQogICAgICAgICkNCg0KICAgICAgICBzZWxmLmFjdF9mbiA9IFNpbHVBbmRNdWwoKQ0KDQogICAgZGVmIGZvcndhcmQoc2VsZiwgeCk6DQogICAgICAgIGdhdGVfdXAgPSBzZWxmLmdhdGVfdXBfcHJvaih4KQ0KICAgICAgICB4ID0gc2VsZi5hY3RfZm4oZ2F0ZV91cCkNCiAgICAgICAgeCA9IHNlbGYuZG93bl9wcm9qKHgpDQogICAgICAgIHJldHVybiB4DQoNCg0KZGVmIGdldF9kZWZhdWx0X2NvbmZpZygNCiAgICBudW1fdG9rZW5zOiBpbnQsDQopOg0KICAgIA0KICAgIGlmIG51bV90b2tlbnMgPiAyMDQ4Og0KICAgICAgICBjb25maWcgPSB7DQogICAgICAgICAgICAiQkxPQ0tfU0laRV9NIjogMjU2LA0KICAgICAgICAgICAgIkJMT0NLX1NJWkVfTiI6IDI1NiwNCiAgICAgICAgICAgICJCTE9DS19TSVpFX0siOiA2NCwNCiAgICAgICAgICAgICJHUk9VUF9TSVpFX00iOiAxLA0KICAgICAgICAgICAgIm51bV93YXJwcyI6IDgsDQogICAgICAgICAgICAibnVtX3N0YWdlcyI6IDIsDQogICAgICAgICAgICAid2F2ZXNfcGVyX2V1IjogMCwNCiAgICAgICAgICAgICJtYXRyaXhfaW5zdHJfbm9ua2RpbSI6IDE2LA0KICAgICAgICAgICAgImtwYWNrIjogMg0KICAgICAgICB9DQogICAgZWxzZToNCiAgICAgICAgY29uZmlnID0gew0KICAgICAgICAgICAgICAgICJCTE9DS19TSVpFX00iOiAxMjgsDQogICAgICAgICAgICAgICAgIkJMT0NLX1NJWkVfTiI6IDEyOCwNCiAgICAgICAgICAgICAgICAiQkxPQ0tfU0laRV9LIjogNjQsDQogICAgICAgICAgICAgICAgIkdST1VQX1NJWkVfTSI6IDEsDQogICAgICAgICAgICAgICAgIm51bV93YXJwcyI6IDQsDQogICAgICAgICAgICAgICAgIm51bV9zdGFnZXMiOiAyLA0KICAgICAgICAgICAgICAgICJ3YXZlc19wZXJfZXUiOiAwLA0KICAgICAgICAgICAgICAgICJtYXRyaXhfaW5zdHJfbm9ua2RpbSI6IDE2LA0KICAgICAgICAgICAgICAgICJrcGFjayI6IDINCiAgICAgICAgICAgIH0NCiAgICANCiAgICByZXR1cm4gY29uZmlnDQoNCkB0cml0b24uaml0DQpkZWYgZnVzZWRfbW9lX2tlcm5lbCgNCiAgICAjIFBvaW50ZXJzIHRvIG1hdHJpY2VzDQogICAgYV9wdHIsDQogICAgYl9wdHIsDQogICAgY19wdHIsDQogICAgdG9wa193ZWlnaHRzX3B0ciwNCiAgICBzb3J0ZWRfdG9rZW5faWRzX3B0ciwNCiAgICBleHBlcnRfaWRzX3B0ciwNCiAgICBudW1fdG9rZW5zX3Bvc3RfcGFkZGVkX3B0ciwNCiAgICBOLA0KICAgIEssDQogICAgRU0sDQogICAgbnVtX3ZhbGlkX3Rva2VucywNCiAgICBzdHJpZGVfYW0sDQogICAgc3RyaWRlX2FrLA0KICAgIHN0cmlkZV9iZSwNCiAgICBzdHJpZGVfYmssDQogICAgc3RyaWRlX2JuLA0KICAgIHN0cmlkZV9jbSwNCiAgICBzdHJpZGVfY24sDQogICAgQkxPQ0tfU0laRV9NOiB0bC5jb25zdGV4cHIsDQogICAgQkxPQ0tfU0laRV9OOiB0bC5jb25zdGV4cHIsDQogICAgQkxPQ0tfU0laRV9LOiB0bC5jb25zdGV4cHIsDQogICAgR1JPVVBfU0laRV9NOiB0bC5jb25zdGV4cHIsDQogICAgTVVMX1JPVVRFRF9XRUlHSFQ6IHRsLmNvbnN0ZXhwciwNCiAgICB0b3BfazogdGwuY29uc3RleHByLA0KICAgIGNvbXB1dGVfdHlwZTogdGwuY29uc3RleHByLA0KICAgIGV2ZW5fS3M6IHRsLmNvbnN0ZXhwciwNCik6DQogICAgcGlkID0gdGwucHJvZ3JhbV9pZChheGlzPTApDQogICAgbnVtX3BpZF9tID0gdGwuY2RpdihFTSwgQkxPQ0tfU0laRV9NKQ0KICAgIG51bV9waWRfbiA9IHRsLmNkaXYoTiwgQkxPQ0tfU0laRV9OKQ0KICAgIG51bV9waWRfaW5fZ3JvdXAgPSBHUk9VUF9TSVpFX00gKiBudW1fcGlkX24NCiAgICBncm91cF9pZCA9IHBpZCAvLyBudW1fcGlkX2luX2dyb3VwDQogICAgZmlyc3RfcGlkX20gPSBncm91cF9pZCAqIEdST1VQX1NJWkVfTQ0KICAgIGdyb3VwX3NpemVfbSA9IG1pbihudW1fcGlkX20gLSBmaXJzdF9waWRfbSwgR1JPVVBfU0laRV9NKQ0KICAgIHBpZF9tID0gZmlyc3RfcGlkX20gKyAoKHBpZCAlIG51bV9waWRfaW5fZ3JvdXApICUgZ3JvdXBfc2l6ZV9tKQ0KICAgIHBpZF9uID0gKHBpZCAlIG51bV9waWRfaW5fZ3JvdXApIC8vIGdyb3VwX3NpemVfbQ0KDQogICAgbnVtX3Rva2Vuc19wb3N0X3BhZGRlZCA9IHRsLmxvYWQobnVtX3Rva2Vuc19wb3N0X3BhZGRlZF9wdHIpDQogICAgaWYgcGlkX20gKiBCTE9DS19TSVpFX00gPj0gbnVtX3Rva2Vuc19wb3N0X3BhZGRlZDoNCiAgICAgICAgcmV0dXJuDQogICAgb2Zmc190b2tlbl9pZCA9IHBpZF9tICogQkxPQ0tfU0laRV9NICsgdGwuYXJhbmdlKDAsIEJMT0NLX1NJWkVfTSkNCiAgICBvZmZzX3Rva2VuID0gdGwubG9hZChzb3J0ZWRfdG9rZW5faWRzX3B0ciArIG9mZnNfdG9rZW5faWQpDQogICAgb2Zmc190b2tlbiA9IG9mZnNfdG9rZW4udG8odGwuaW50NjQpDQogICAgdG9rZW5fbWFzayA9IG9mZnNfdG9rZW4gPCBudW1fdmFsaWRfdG9rZW5zDQoNCiAgICBvZmZzX2JuID0gKHBpZF9uICogQkxPQ0tfU0laRV9OICsgdGwuYXJhbmdlKDAsIEJMT0NLX1NJWkVfTikpICUgTg0KICAgIG9mZnNfayA9IHRsLmFyYW5nZSgwLCBCTE9DS19TSVpFX0spDQogICAgYV9wdHJzID0gYV9wdHIgKyAoDQogICAgICAgIG9mZnNfdG9rZW5bOiwgTm9uZV0gLy8gdG9wX2sgKiBzdHJpZGVfYW0gKyBvZmZzX2tbTm9uZSwgOl0gKiBzdHJpZGVfYWsNCiAgICApDQoNCiAgICBvZmZfZXhwZXJ0cyA9IHRsLmxvYWQoZXhwZXJ0X2lkc19wdHIgKyBwaWRfbSkNCiAgICBiX3B0cnMgPSBiX3B0ciArICgNCiAgICAgICAgb2ZmX2V4cGVydHMgKiBzdHJpZGVfYmUNCiAgICAgICAgKyAob2Zmc19rWzosIE5vbmVdICogc3RyaWRlX2JrICsgb2Zmc19ibltOb25lLCA6XSAqIHN0cmlkZV9ibikNCiAgICApDQoNCiAgICBhY2N1bXVsYXRvciA9IHRsLnplcm9zKChCTE9DS19TSVpFX00sIEJMT0NLX1NJWkVfTiksIGR0eXBlPXRsLmZsb2F0MzIpDQoNCiAgICBmb3IgayBpbiByYW5nZSgwLCB0bC5jZGl2KEssIEJMT0NLX1NJWkVfSykpOg0KICAgICAgICBpZiBldmVuX0tzOg0KICAgICAgICAgICAgYSA9IHRsLmxvYWQoDQogICAgICAgICAgICAgICAgYV9wdHJzLA0KICAgICAgICAgICAgICAgIG1hc2s9dG9rZW5fbWFza1s6LCBOb25lXSwNCiAgICAgICAgICAgICAgICBvdGhlcj0wLjAsDQogICAgICAgICAgICApDQogICAgICAgICAgICBiID0gdGwubG9hZChiX3B0cnMpDQogICAgICAgIGVsc2U6DQogICAgICAgICAgICBhID0gdGwubG9hZCgNCiAgICAgICAgICAgICAgICBhX3B0cnMsDQogICAgICAgICAgICAgICAgbWFzaz10b2tlbl9tYXNrWzosIE5vbmVdICYgKG9mZnNfa1tOb25lLCA6XSA8IEsgLSBrICogQkxPQ0tfU0laRV9LKSwNCiAgICAgICAgICAgICAgICBvdGhlcj0wLjAsDQogICAgICAgICAgICApDQogICAgICAgICAgICBiID0gdGwubG9hZChiX3B0cnMsIG1hc2s9b2Zmc19rWzosIE5vbmVdIDwgSyAtIGsgKiBCTE9DS19TSVpFX0ssIG90aGVyPTAuMCkNCiAgICAgICAgYWNjdW11bGF0b3IgKz0gdGwuZG90KGEsIGIpDQogICAgICAgIGFfcHRycyArPSBCTE9DS19TSVpFX0sgKiBzdHJpZGVfYWsNCiAgICAgICAgYl9wdHJzICs9IEJMT0NLX1NJWkVfSyAqIHN0cmlkZV9iaw0KDQogICAgaWYgTVVMX1JPVVRFRF9XRUlHSFQ6DQogICAgICAgIG1vZV93ZWlnaHQgPSB0bC5sb2FkKHRvcGtfd2VpZ2h0c19wdHIgKyBvZmZzX3Rva2VuLCBtYXNrPXRva2VuX21hc2ssIG90aGVyPTApDQogICAgICAgIGFjY3VtdWxhdG9yID0gYWNjdW11bGF0b3IgKiBtb2Vfd2VpZ2h0WzosIE5vbmVdDQogICAgYWNjdW11bGF0b3IgPSBhY2N1bXVsYXRvci50byhjb21wdXRlX3R5cGUpDQogICAgb2Zmc19jbiA9IHBpZF9uICogQkxPQ0tfU0laRV9OICsgdGwuYXJhbmdlKDAsIEJMT0NLX1NJWkVfTikNCiAgICBjX3B0cnMgPSBjX3B0ciArIChzdHJpZGVfY20gKiBvZmZzX3Rva2VuWzosIE5vbmVdICsgc3RyaWRlX2NuICogb2Zmc19jbltOb25lLCA6XSkNCiAgICBjX21hc2sgPSB0b2tlbl9tYXNrWzosIE5vbmVdICYgKG9mZnNfY25bTm9uZSwgOl0gPCBOKQ0KICAgIHRsLnN0b3JlKGNfcHRycywgYWNjdW11bGF0b3IsIG1hc2s9Y19tYXNrKQ0KDQpkZWYgY2VpbF9kaXYoYSwgYik6DQogICAgcmV0dXJuIChhICsgYiAtIDEpIC8vIGINCiAgICANCmRlZiBpbnZva2VfZnVzZWRfbW9lX2tlcm5lbCgNCiAgICBBOiB0b3JjaC5UZW5zb3IsDQogICAgQjogdG9yY2guVGVuc29yLA0KICAgIEM6IHRvcmNoLlRlbnNvciwNCiAgICB0b3BrX3dlaWdodHM6IHRvcmNoLlRlbnNvciwNCiAgICB0b3BrX2lkczogdG9yY2guVGVuc29yLA0KICAgIHNvcnRlZF90b2tlbl9pZHM6IHRvcmNoLlRlbnNvciwNCiAgICBleHBlcnRfaWRzOiB0b3JjaC5UZW5zb3IsDQogICAgbnVtX3Rva2Vuc19wb3N0X3BhZGRlZDogdG9yY2guVGVuc29yLA0KICAgIG11bF9yb3V0ZWRfd2VpZ2h0OiBib29sLA0KICAgIHRvcF9rOiBpbnQsDQogICAgY29uZmlnOiBEaWN0W3N0ciwgQW55XSwNCiAgICBjb21wdXRlX3R5cGU6IHRsLmR0eXBlLA0KKSAtPiBOb25lOg0KICAgIGFzc2VydCB0b3BrX3dlaWdodHMuc3RyaWRlKDEpID09IDENCiAgICBhc3NlcnQgc29ydGVkX3Rva2VuX2lkcy5zdHJpZGUoMCkgPT0gMQ0KDQogICAgZ3JpZCA9IGxhbWJkYSBNRVRBOiAoDQogICAgICAgIHRyaXRvbi5jZGl2KHNvcnRlZF90b2tlbl9pZHMuc2hhcGVbMF0sIE1FVEFbIkJMT0NLX1NJWkVfTSJdKQ0KICAgICAgICAqIHRyaXRvbi5jZGl2KEIuc2hhcGVbMV0sIE1FVEFbIkJMT0NLX1NJWkVfTiJdKSwNCiAgICApDQoNCiAgICBLID0gQi5zaGFwZVsyXQ0KICAgIGlmIEsgJSBjb25maWdbIkJMT0NLX1NJWkVfSyJdID09IDA6DQogICAgICAgIGV2ZW5fS3MgPSBUcnVlDQogICAgZWxzZToNCiAgICAgICAgZXZlbl9LcyA9IEZhbHNlDQoNCiAgICBmdXNlZF9tb2Vfa2VybmVsW2dyaWRdKA0KICAgICAgICBBLA0KICAgICAgICBCLA0KICAgICAgICBDLA0KICAgICAgICB0b3BrX3dlaWdodHMsDQogICAgICAgIHNvcnRlZF90b2tlbl9pZHMsDQogICAgICAgIGV4cGVydF9pZHMsDQogICAgICAgIG51bV90b2tlbnNfcG9zdF9wYWRkZWQsDQogICAgICAgIEIuc2hhcGVbMV0sDQogICAgICAgIEIuc2hhcGVbMl0sDQogICAgICAgIHNvcnRlZF90b2tlbl9pZHMuc2hhcGVbMF0sDQogICAgICAgIHRvcGtfaWRzLm51bWVsKCksDQogICAgICAgIEEuc3RyaWRlKDApLA0KICAgICAgICBBLnN0cmlkZSgxKSwNCiAgICAgICAgQi5zdHJpZGUoMCksDQogICAgICAgIEIuc3RyaWRlKDIpLA0KICAgICAgICBCLnN0cmlkZSgxKSwNCiAgICAgICAgQy5zdHJpZGUoMSksDQogICAgICAgIEMuc3RyaWRlKDIpLA0KICAgICAgICBNVUxfUk9VVEVEX1dFSUdIVD1tdWxfcm91dGVkX3dlaWdodCwNCiAgICAgICAgdG9wX2s9dG9wX2ssDQogICAgICAgIGNvbXB1dGVfdHlwZT1jb21wdXRlX3R5cGUsDQogICAgICAgIGV2ZW5fS3M9ZXZlbl9LcywNCiAgICAgICAgKipjb25maWcsDQogICAgKQ0KDQpAdHJpdG9uLmppdA0KZGVmIG1vZV9hbGlnbl9ibG9ja19zaXplX3N0YWdlMSgNCiAgICB0b3BrX2lkc19wdHIsDQogICAgdG9rZW5zX2NudHNfcHRyLA0KICAgIG51bV9leHBlcnRzOiB0bC5jb25zdGV4cHIsDQogICAgbnVtZWw6IHRsLmNvbnN0ZXhwciwNCiAgICB0b2tlbnNfcGVyX3RocmVhZDogdGwuY29uc3RleHByLA0KKToNCiAgICBwaWQgPSB0bC5wcm9ncmFtX2lkKDApDQogICAgc3RhcnRfaWR4ID0gcGlkICogdG9rZW5zX3Blcl90aHJlYWQNCiAgICBvZmZfYyA9IChwaWQgKyAxKSAqIG51bV9leHBlcnRzDQogICAgZm9yIGkgaW4gcmFuZ2UodG9rZW5zX3Blcl90aHJlYWQpOg0KICAgICAgICBpZiBzdGFydF9pZHggKyBpIDwgbnVtZWw6DQogICAgICAgICAgICBpZHggPSB0bC5sb2FkKHRvcGtfaWRzX3B0ciArIChzdGFydF9pZHggKyBpKSkNCiAgICAgICAgICAgIHRva2VuX2NudCA9IHRsLmxvYWQodG9rZW5zX2NudHNfcHRyICsgKG9mZl9jICsgaWR4KSkNCiAgICAgICAgICAgIHRsLnN0b3JlKHRva2Vuc19jbnRzX3B0ciArIChvZmZfYyArIGlkeCksIHRva2VuX2NudCArIDEpDQoNCg0KQHRyaXRvbi5qaXQNCmRlZiBtb2VfYWxpZ25fYmxvY2tfc2l6ZV9zdGFnZTIoDQogICAgdG9rZW5zX2NudHNfcHRyLA0KICAgIG51bV9leHBlcnRzOiB0bC5jb25zdGV4cHIsDQopOg0KICAgIHBpZCA9IHRsLnByb2dyYW1faWQoMCkNCg0KICAgIGxhc3RfY250ID0gMA0KICAgIGZvciBpIGluIHJhbmdlKDEsIG51bV9leHBlcnRzICsgMSk6DQogICAgICAgIHRva2VuX2NudCA9IHRsLmxvYWQodG9rZW5zX2NudHNfcHRyICsgKGkgKiBudW1fZXhwZXJ0cyArIHBpZCkpDQogICAgICAgIGxhc3RfY250ID0gbGFzdF9jbnQgKyB0b2tlbl9jbnQNCiAgICAgICAgdGwuc3RvcmUodG9rZW5zX2NudHNfcHRyICsgKGkgKiBudW1fZXhwZXJ0cyArIHBpZCksIGxhc3RfY250KQ0KDQpAdHJpdG9uLmppdA0KZGVmIG1vZV9hbGlnbl9ibG9ja19zaXplX3N0YWdlMygNCiAgICB0b3RhbF90b2tlbnNfcG9zdF9wYWRfcHRyLA0KICAgIHRva2Vuc19jbnRzX3B0ciwNCiAgICBjdW1zdW1fcHRyLA0KICAgIG51bV9leHBlcnRzOiB0bC5jb25zdGV4cHIsDQogICAgYmxvY2tfc2l6ZTogdGwuY29uc3RleHByLA0KKToNCiAgICBsYXN0X2N1bXN1bSA9IDANCiAgICBvZmZfY250ID0gbnVtX2V4cGVydHMgKiBudW1fZXhwZXJ0cw0KICAgIGZvciBpIGluIHJhbmdlKDEsIG51bV9leHBlcnRzICsgMSk6DQogICAgICAgIHRva2VuX2NudCA9IHRsLmxvYWQodG9rZW5zX2NudHNfcHRyICsgKG9mZl9jbnQgKyBpIC0gMSkpDQogICAgICAgIGxhc3RfY3Vtc3VtID0gbGFzdF9jdW1zdW0gKyB0bC5jZGl2KHRva2VuX2NudCwgYmxvY2tfc2l6ZSkgKiBibG9ja19zaXplDQogICAgICAgIHRsLnN0b3JlKGN1bXN1bV9wdHIgKyBpLCBsYXN0X2N1bXN1bSkNCiAgICB0bC5zdG9yZSh0b3RhbF90b2tlbnNfcG9zdF9wYWRfcHRyLCBsYXN0X2N1bXN1bSkNCg0KDQpAdHJpdG9uLmppdA0KZGVmIG1vZV9hbGlnbl9ibG9ja19zaXplX3N0YWdlNCgNCiAgICB0b3BrX2lkc19wdHIsDQogICAgc29ydGVkX3Rva2VuX2lkc19wdHIsDQogICAgZXhwZXJ0X2lkc19wdHIsDQogICAgdG9rZW5zX2NudHNfcHRyLA0KICAgIGN1bXN1bV9wdHIsDQogICAgbnVtX2V4cGVydHM6IHRsLmNvbnN0ZXhwciwNCiAgICBibG9ja19zaXplOiB0bC5jb25zdGV4cHIsDQogICAgbnVtZWw6IHRsLmNvbnN0ZXhwciwNCiAgICB0b2tlbnNfcGVyX3RocmVhZDogdGwuY29uc3RleHByLA0KKToNCiAgICBwaWQgPSB0bC5wcm9ncmFtX2lkKDApDQogICAgc3RhcnRfaWR4ID0gdGwubG9hZChjdW1zdW1fcHRyICsgcGlkKQ0KICAgIGVuZF9pZHggPSB0bC5sb2FkKGN1bXN1bV9wdHIgKyAocGlkICsgMSkpDQoNCiAgICBmb3IgaSBpbiByYW5nZShzdGFydF9pZHgsIGVuZF9pZHgsIGJsb2NrX3NpemUpOg0KICAgICAgICB0bC5zdG9yZShleHBlcnRfaWRzX3B0ciArIGkgLy8gYmxvY2tfc2l6ZSwgcGlkKQ0KDQogICAgc3RhcnRfaWR4ID0gcGlkICogdG9rZW5zX3Blcl90aHJlYWQNCiAgICBvZmZfdCA9IHBpZCAqIG51bV9leHBlcnRzDQoNCiAgICBmb3IgaSBpbiByYW5nZShzdGFydF9pZHgsIHRsLm1pbmltdW0oc3RhcnRfaWR4ICsgdG9rZW5zX3Blcl90aHJlYWQsIG51bWVsKSk6DQogICAgICAgIGV4cGVydF9pZCA9IHRsLmxvYWQodG9wa19pZHNfcHRyICsgaSkNCiAgICAgICAgdG9rZW5fY250ID0gdGwubG9hZCh0b2tlbnNfY250c19wdHIgKyAob2ZmX3QgKyBleHBlcnRfaWQpKQ0KICAgICAgICByYW5rX3Bvc3RfcGFkID0gdG9rZW5fY250ICsgdGwubG9hZChjdW1zdW1fcHRyICsgZXhwZXJ0X2lkKQ0KICAgICAgICB0bC5zdG9yZShzb3J0ZWRfdG9rZW5faWRzX3B0ciArIHJhbmtfcG9zdF9wYWQsIGkpDQogICAgICAgIHRsLnN0b3JlKHRva2Vuc19jbnRzX3B0ciArIChvZmZfdCArIGV4cGVydF9pZCksIHRva2VuX2NudCArIDEpDQoNCg0KZGVmIG1vZV9hbGlnbl9ibG9ja19zaXplX3RyaXRvbigNCiAgICB0b3BrX2lkczogdG9yY2guVGVuc29yLA0KICAgIG51bV9leHBlcnRzOiBpbnQsDQogICAgYmxvY2tfc2l6ZTogaW50LA0KICAgIHNvcnRlZF90b2tlbl9pZHM6IHRvcmNoLlRlbnNvciwNCiAgICBleHBlcnRfaWRzOiB0b3JjaC5UZW5zb3IsDQogICAgbnVtX3Rva2Vuc19wb3N0X3BhZDogdG9yY2guVGVuc29yLA0KKSAtPiBOb25lOg0KICAgIG51bWVsID0gdG9wa19pZHMubnVtZWwoKQ0KICAgIGdyaWQgPSAobnVtX2V4cGVydHMsKQ0KICAgIHRva2Vuc19jbnRzID0gdG9yY2guemVyb3MoDQogICAgICAgIChudW1fZXhwZXJ0cyArIDEsIG51bV9leHBlcnRzKSwgZHR5cGU9dG9yY2guaW50MzIsIGRldmljZT10b3BrX2lkcy5kZXZpY2UNCiAgICApDQogICAgY3Vtc3VtID0gdG9yY2guemVyb3MoKG51bV9leHBlcnRzICsgMSwpLCBkdHlwZT10b3JjaC5pbnQzMiwgZGV2aWNlPXRvcGtfaWRzLmRldmljZSkNCiAgICB0b2tlbnNfcGVyX3RocmVhZCA9IGNlaWxfZGl2KG51bWVsLCBudW1fZXhwZXJ0cykNCg0KICAgIG1vZV9hbGlnbl9ibG9ja19zaXplX3N0YWdlMVtncmlkXSgNCiAgICAgICAgdG9wa19pZHMsDQogICAgICAgIHRva2Vuc19jbnRzLA0KICAgICAgICBudW1fZXhwZXJ0cywNCiAgICAgICAgbnVtZWwsDQogICAgICAgIHRva2Vuc19wZXJfdGhyZWFkLA0KICAgICkNCiAgICBtb2VfYWxpZ25fYmxvY2tfc2l6ZV9zdGFnZTJbZ3JpZF0oDQogICAgICAgIHRva2Vuc19jbnRzLA0KICAgICAgICBudW1fZXhwZXJ0cywNCiAgICApDQogICAgbW9lX2FsaWduX2Jsb2NrX3NpemVfc3RhZ2UzWygxLCldKA0KICAgICAgICBudW1fdG9rZW5zX3Bvc3RfcGFkLA0KICAgICAgICB0b2tlbnNfY250cywNCiAgICAgICAgY3Vtc3VtLA0KICAgICAgICBudW1fZXhwZXJ0cywNCiAgICAgICAgYmxvY2tfc2l6ZSwNCiAgICApDQogICAgbW9lX2FsaWduX2Jsb2NrX3NpemVfc3RhZ2U0W2dyaWRdKA0KICAgICAgICB0b3BrX2lkcywNCiAgICAgICAgc29ydGVkX3Rva2VuX2lkcywNCiAgICAgICAgZXhwZXJ0X2lkcywNCiAgICAgICAgdG9rZW5zX2NudHMsDQogICAgICAgIGN1bXN1bSwNCiAgICAgICAgbnVtX2V4cGVydHMsDQogICAgICAgIGJsb2NrX3NpemUsDQogICAgICAgIG51bWVsLA0KICAgICAgICB0b2tlbnNfcGVyX3RocmVhZCwNCiAgICApDQoNCmRlZiBtb2VfYWxpZ25fYmxvY2tfc2l6ZSgNCiAgICB0b3BrX2lkczogdG9yY2guVGVuc29yLCBibG9ja19zaXplOiBpbnQsIG51bV9leHBlcnRzOiBpbnQNCikgLT4gVHVwbGVbdG9yY2guVGVuc29yLCB0b3JjaC5UZW5zb3IsIHRvcmNoLlRlbnNvcl06DQogICAgbWF4X251bV90b2tlbnNfcGFkZGVkID0gdG9wa19pZHMubnVtZWwoKSArIG51bV9leHBlcnRzICogKGJsb2NrX3NpemUgLSAxKQ0KICAgIHNvcnRlZF9pZHMgPSB0b3JjaC5lbXB0eSgNCiAgICAgICAgKG1heF9udW1fdG9rZW5zX3BhZGRlZCwpLCBkdHlwZT10b3JjaC5pbnQzMiwgZGV2aWNlPXRvcGtfaWRzLmRldmljZQ0KICAgICkNCiAgICBzb3J0ZWRfaWRzLmZpbGxfKHRvcGtfaWRzLm51bWVsKCkpDQogICAgbWF4X251bV9tX2Jsb2NrcyA9IHRyaXRvbi5jZGl2KG1heF9udW1fdG9rZW5zX3BhZGRlZCwgYmxvY2tfc2l6ZSkNCiAgICBleHBlcnRfaWRzID0gdG9yY2guZW1wdHkoDQogICAgICAgIChtYXhfbnVtX21fYmxvY2tzLCksIGR0eXBlPXRvcmNoLmludDMyLCBkZXZpY2U9dG9wa19pZHMuZGV2aWNlDQogICAgKQ0KICAgIG51bV90b2tlbnNfcG9zdF9wYWQgPSB0b3JjaC5lbXB0eSgoMSksIGR0eXBlPXRvcmNoLmludDMyLCBkZXZpY2U9dG9wa19pZHMuZGV2aWNlKQ0KICAgIG1vZV9hbGlnbl9ibG9ja19zaXplX3RyaXRvbigNCiAgICAgICAgdG9wa19pZHMsDQogICAgICAgIG51bV9leHBlcnRzLA0KICAgICAgICBibG9ja19zaXplLA0KICAgICAgICBzb3J0ZWRfaWRzLA0KICAgICAgICBleHBlcnRfaWRzLA0KICAgICAgICBudW1fdG9rZW5zX3Bvc3RfcGFkLA0KICAgICkNCiAgICByZXR1cm4gc29ydGVkX2lkcywgZXhwZXJ0X2lkcywgbnVtX3Rva2Vuc19wb3N0X3BhZA0KDQpkZWYgZnVzZWRfZXhwZXJ0cygNCiAgICBoaWRkZW5fc3RhdGVzOiB0b3JjaC5UZW5zb3IsDQogICAgdzE6IHRvcmNoLlRlbnNvciwNCiAgICB3MjogdG9yY2guVGVuc29yLA0KICAgIHRvcGtfd2VpZ2h0czogdG9yY2guVGVuc29yLA0KICAgIHRvcGtfaWRzOiB0b3JjaC5UZW5zb3IsDQogICAgYXBwbHlfcm91dGVyX3dlaWdodF9vbl9pbnB1dDogYm9vbCA9IEZhbHNlLA0KKToNCiAgICBhc3NlcnQgKA0KICAgICAgICAgICAgaGlkZGVuX3N0YXRlcy5zaGFwZVsxXSA9PSB3MS5zaGFwZVsyXQ0KICAgICAgICApLCAiSGlkZGVuIHNpemUgbWlzbWF0Y2giDQogICAgYXNzZXJ0IHRvcGtfd2VpZ2h0cy5zaGFwZSA9PSB0b3BrX2lkcy5zaGFwZSwgInRvcGsgc2hhcGUgbWlzbWF0Y2giDQogICAgYXNzZXJ0IGhpZGRlbl9zdGF0ZXMuaXNfY29udGlndW91cygpLCAiSGlkZGVuX3N0YXRlcyBtdXN0IGJlIGNvbnRpZ3VvdXMiDQogICAgYXNzZXJ0IHcxLmlzX2NvbnRpZ3VvdXMoKSwgIkV4cGVydCB3ZWlnaHRzMSBtdXN0IGJlIGNvbnRpZ3VvdXMiDQogICAgYXNzZXJ0IHcyLmlzX2NvbnRpZ3VvdXMoKSwgIkV4cGVydCB3ZWlnaHRzMiBtdXN0IGJlIGNvbnRpZ3VvdXMiDQogICAgYXNzZXJ0IGhpZGRlbl9zdGF0ZXMuZHR5cGUgaW4gW3RvcmNoLmZsb2F0MzIsIHRvcmNoLmZsb2F0MTYsIHRvcmNoLmJmbG9hdDE2XQ0KDQogICAgbnVtX3Rva2VucywgXyA9IGhpZGRlbl9zdGF0ZXMuc2hhcGUNCiAgICBFLCBOLCBfID0gdzEuc2hhcGUNCg0KICAgIENIVU5LX1NJWkUgPSA2NCAqIDEwMjQNCiAgICBNID0gbWluKG51bV90b2tlbnMsIENIVU5LX1NJWkUpDQoNCiAgICBnZXRfY29uZmlnX2Z1bmMgPSBmdW5jdG9vbHMucGFydGlhbCgNCiAgICAgICAgZ2V0X2RlZmF1bHRfY29uZmlnLA0KICAgICAgICBNLA0KICAgICkNCg0KICAgIGNvbmZpZyA9IGdldF9jb25maWdfZnVuYygpDQoNCiAgICBjYWNoZSA9IHRvcmNoLmVtcHR5KA0KICAgICAgICBNICogdG9wa19pZHMuc2hhcGVbMV0gKiBtYXgoTiwgdzIuc2hhcGVbMV0pLA0KICAgICAgICBkZXZpY2U9aGlkZGVuX3N0YXRlcy5kZXZpY2UsDQogICAgICAgIGR0eXBlPWhpZGRlbl9zdGF0ZXMuZHR5cGUsDQogICAgKQ0KICAgIGludGVybWVkaWF0ZV9jYWNoZTEgPSBjYWNoZVs6IE0gKiB0b3BrX2lkcy5zaGFwZVsxXSAqIE5dLnZpZXcoDQogICAgICAgIChNLCB0b3BrX2lkcy5zaGFwZVsxXSwgTiksDQogICAgKQ0KICAgIGludGVybWVkaWF0ZV9jYWNoZTIgPSB0b3JjaC5lbXB0eSgNCiAgICAgICAgKE0gKiB0b3BrX2lkcy5zaGFwZVsxXSwgTiAvLyAyKSwNCiAgICAgICAgZGV2aWNlPWhpZGRlbl9zdGF0ZXMuZGV2aWNlLA0KICAgICAgICBkdHlwZT1oaWRkZW5fc3RhdGVzLmR0eXBlLA0KICAgICkNCiAgICBpbnRlcm1lZGlhdGVfY2FjaGUzID0gY2FjaGVbOiBNICogdG9wa19pZHMuc2hhcGVbMV0gKiB3Mi5zaGFwZVsxXV0udmlldygNCiAgICAgICAgKE0sIHRvcGtfaWRzLnNoYXBlWzFdLCB3Mi5zaGFwZVsxXSksDQogICAgKQ0KDQogICAgY29tcHV0ZV90eXBlID0gdGwuYmZsb2F0MTYgaWYgaGlkZGVuX3N0YXRlcy5kdHlwZSA9PSB0b3JjaC5iZmxvYXQxNiBlbHNlIHRsLmZsb2F0MTYNCg0KICAgIG91dF9oaWRkZW5fc3RhdGVzID0gaGlkZGVuX3N0YXRlcw0KDQogICAgZm9yIGNodW5rIGluIHJhbmdlKChudW1fdG9rZW5zIC8vIENIVU5LX1NJWkUpICsgMSk6DQogICAgICAgIGJlZ2luX2NodW5rX2lkeCwgZW5kX2NodW5rX2lkeCA9ICgNCiAgICAgICAgICAgIGNodW5rICogQ0hVTktfU0laRSwNCiAgICAgICAgICAgIG1pbigoY2h1bmsgKyAxKSAqIENIVU5LX1NJWkUsIG51bV90b2tlbnMpLA0KICAgICAgICApDQogICAgICAgIGN1cnJfaGlkZGVuX3N0YXRlcyA9IGhpZGRlbl9zdGF0ZXNbYmVnaW5fY2h1bmtfaWR4OmVuZF9jaHVua19pZHhdDQogICAgICAgIHRva2Vuc19pbl9jaHVuaywgXyA9IGN1cnJfaGlkZGVuX3N0YXRlcy5zaGFwZQ0KDQogICAgICAgIGlmIHRva2Vuc19pbl9jaHVuayA9PSAwOg0KICAgICAgICAgICAgYnJlYWsNCg0KICAgICAgICBpZiB0b2tlbnNfaW5fY2h1bmsgPCBDSFVOS19TSVpFIGFuZCBjaHVuayA+IDA6DQogICAgICAgICAgICBpbnRlcm1lZGlhdGVfY2FjaGUxID0gaW50ZXJtZWRpYXRlX2NhY2hlMVs6dG9rZW5zX2luX2NodW5rXQ0KICAgICAgICAgICAgaW50ZXJtZWRpYXRlX2NhY2hlMiA9IGludGVybWVkaWF0ZV9jYWNoZTJbDQogICAgICAgICAgICAgICAgOiB0b2tlbnNfaW5fY2h1bmsgKiB0b3BrX2lkcy5zaGFwZVsxXQ0KICAgICAgICAgICAgXQ0KICAgICAgICAgICAgaW50ZXJtZWRpYXRlX2NhY2hlMyA9IGludGVybWVkaWF0ZV9jYWNoZTNbOnRva2Vuc19pbl9jaHVua10NCiAgICAgICAgICAgIGNvbmZpZyA9IGdldF9jb25maWdfZnVuYyh0b2tlbnNfaW5fY2h1bmspDQoNCiAgICAgICAgY3Vycl90b3BrX2lkcyA9IHRvcGtfaWRzW2JlZ2luX2NodW5rX2lkeDplbmRfY2h1bmtfaWR4XQ0KICAgICAgICBjdXJyX3RvcGtfd2VpZ2h0cyA9IHRvcGtfd2VpZ2h0c1tiZWdpbl9jaHVua19pZHg6ZW5kX2NodW5rX2lkeF0NCg0KICAgICAgICBzb3J0ZWRfdG9rZW5faWRzLCBleHBlcnRfaWRzLCBudW1fdG9rZW5zX3Bvc3RfcGFkZGVkID0gbW9lX2FsaWduX2Jsb2NrX3NpemUoDQogICAgICAgICAgICBjdXJyX3RvcGtfaWRzLCBjb25maWdbIkJMT0NLX1NJWkVfTSJdLCBFDQogICAgICAgICkNCg0KICAgICAgICBpbnZva2VfZnVzZWRfbW9lX2tlcm5lbCgNCiAgICAgICAgICAgIGN1cnJfaGlkZGVuX3N0YXRlcywNCiAgICAgICAgICAgIHcxLA0KICAgICAgICAgICAgaW50ZXJtZWRpYXRlX2NhY2hlMSwNCiAgICAgICAgICAgIGN1cnJfdG9wa193ZWlnaHRzLA0KICAgICAgICAgICAgY3Vycl90b3BrX2lkcywNCiAgICAgICAgICAgIHNvcnRlZF90b2tlbl9pZHMsDQogICAgICAgICAgICBleHBlcnRfaWRzLA0KICAgICAgICAgICAgbnVtX3Rva2Vuc19wb3N0X3BhZGRlZCwNCiAgICAgICAgICAgIGFwcGx5X3JvdXRlcl93ZWlnaHRfb25faW5wdXQsDQogICAgICAgICAgICB0b3BrX2lkcy5zaGFwZVsxXSwNCiAgICAgICAgICAgIGNvbmZpZywNCiAgICAgICAgICAgIGNvbXB1dGVfdHlwZT1jb21wdXRlX3R5cGUsDQogICAgICAgICkNCiAgICAgICAgbW9kdWxlLnNpbHVfYW5kX211bCgNCiAgICAgICAgICAgICAgICBpbnRlcm1lZGlhdGVfY2FjaGUyLCBpbnRlcm1lZGlhdGVfY2FjaGUxLnZpZXcoLTEsIE4pDQogICAgICAgICAgICApDQoNCiAgICAgICAgaW52b2tlX2Z1c2VkX21vZV9rZXJuZWwoDQogICAgICAgICAgICBpbnRlcm1lZGlhdGVfY2FjaGUyLA0KICAgICAgICAgICAgdzIsDQogICAgICAgICAgICAoDQogICAgICAgICAgICAgICAgaW50ZXJtZWRpYXRlX2NhY2hlMw0KICAgICAgICAgICAgICAgIGlmIHRvcGtfaWRzLnNoYXBlWzFdICE9IDENCiAgICAgICAgICAgICAgICBlbHNlIG91dF9oaWRkZW5fc3RhdGVzW2JlZ2luX2NodW5rX2lkeDplbmRfY2h1bmtfaWR4XS51bnNxdWVlemUoMCkNCiAgICAgICAgICAgICksDQogICAgICAgICAgICBjdXJyX3RvcGtfd2VpZ2h0cywNCiAgICAgICAgICAgIGN1cnJfdG9wa19pZHMsDQogICAgICAgICAgICBzb3J0ZWRfdG9rZW5faWRzLA0KICAgICAgICAgICAgZXhwZXJ0X2lkcywNCiAgICAgICAgICAgIG51bV90b2tlbnNfcG9zdF9wYWRkZWQsDQogICAgICAgICAgICBub3QgYXBwbHlfcm91dGVyX3dlaWdodF9vbl9pbnB1dCwNCiAgICAgICAgICAgIDEsDQogICAgICAgICAgICBjb25maWcsDQogICAgICAgICAgICBjb21wdXRlX3R5cGU9Y29tcHV0ZV90eXBlLA0KICAgICAgICApDQoNCiAgICAgICAgbW9kdWxlLm1vZV9zdW0oDQogICAgICAgICAgICBpbnRlcm1lZGlhdGVfY2FjaGUzLnZpZXcoKmludGVybWVkaWF0ZV9jYWNoZTMuc2hhcGUpLA0KICAgICAgICAgICAgb3V0X2hpZGRlbl9zdGF0ZXNbYmVnaW5fY2h1bmtfaWR4OmVuZF9jaHVua19pZHhdLA0KICAgICAgICApDQoNCiAgICByZXR1cm4gb3V0X2hpZGRlbl9zdGF0ZXMNCg0KY2xhc3MgTW9FR2F0ZShubi5Nb2R1bGUpOg0KICAgIGRlZiBfX2luaXRfXygNCiAgICAgICAgc2VsZiwNCiAgICAgICAgY29uZmlnLA0KICAgICk6DQogICAgICAgIHN1cGVyKCkuX19pbml0X18oKQ0KDQogICAgICAgIHNlbGYubnVtX2V4cGVydHM6IGludCA9IGNvbmZpZ1sibl9yb3V0ZWRfZXhwZXJ0cyJdDQogICAgICAgIHNlbGYuZF9oaWRkZW46IGludCA9IGNvbmZpZ1siZF9oaWRkZW4iXQ0KICAgICAgICBzZWxmLnNlcV9sZW46IGludCA9IGNvbmZpZ1sic2VxX2xlbiJdDQogICAgICAgIHNlbGYudG9wX2sgPSBjb25maWdbIm5fZXhwZXJ0c19wZXJfdG9rZW4iXQ0KDQogICAgICAgIHNlbGYuV19nID0gbm4uTGluZWFyKHNlbGYuZF9oaWRkZW4sIHNlbGYubnVtX2V4cGVydHMsIGJpYXM9RmFsc2UpDQoNCiAgICBkZWYgZm9yd2FyZChzZWxmLCB4KToNCiAgICAgICAgbG9naXRzID0gc2VsZi5XX2coeCkudmlldygtMSwgc2VsZi5udW1fZXhwZXJ0cykNCiAgICAgICAgeF9mbGF0ID0geC52aWV3KC0xLCBzZWxmLmRfaGlkZGVuKQ0KICAgICAgICBpZiBzZWxmLnNlcV9sZW4gPiA2MTQ0Og0KICAgICAgICAgICAgc2NvcmVzID0gbG9naXRzLnNvZnRtYXgoZGltPS0xKQ0KICAgICAgICAgICAgdG9wa193ZWlnaHRzLCB0b3BrX2lkcyA9IHRvcmNoLnRvcGsoc2NvcmVzLCBrPXNlbGYudG9wX2ssIGRpbT0tMSwgc29ydGVkPUZhbHNlKQ0KICAgICAgICBlbHNlOg0KICAgICAgICAgICAgdG9wa193ZWlnaHRzLCB0b3BrX2lkcyA9IGZ1c2VkX3RvcGsoeF9mbGF0LCBsb2dpdHMsIHNlbGYudG9wX2spDQoNCiAgICAgICAgcmV0dXJuIHRvcGtfd2VpZ2h0cywgdG9wa19pZHMNCg0KDQpjbGFzcyBNb0Uobm4uTW9kdWxlKToNCiAgICBkZWYgX19pbml0X18oc2VsZiwgY29uZmlnOiBEaWN0LCANCiAgICAgICAgICAgICAgICBwYXJhbXNfZHR5cGU6IE9wdGlvbmFsW3RvcmNoLmR0eXBlXSA9IHRvcmNoLmZsb2F0MTYpOg0KICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkNCg0KICAgICAgICBzZWxmLm5fc2hhcmVkX2V4cGVydHMgPSBjb25maWdbIm5fc2hhcmVkX2V4cGVydHMiXQ0KICAgICAgICBzZWxmLm51bV9leHBlcnRzID0gY29uZmlnWyJuX3JvdXRlZF9leHBlcnRzIl0NCiAgICAgICAgc2VsZi5pbnRlcm1lZGlhdGVfc2l6ZSA9IGNvbmZpZ1siZF9leHBlcnQiXQ0KICAgICAgICBzZWxmLmhpZGRlbl9zaXplID0gY29uZmlnWyJkX2hpZGRlbiJdDQogICAgICAgIHNlbGYudG9wX2sgPSBjb25maWdbIm5fZXhwZXJ0c19wZXJfdG9rZW4iXQ0KDQogICAgICAgIHNlbGYuY29uZmlnID0gY29uZmlnDQogICAgICAgIGRldmljZSA9IHRvcmNoLmRldmljZSgiY3VkYSIpDQogICAgICAgIA0KICAgICAgICBzZWxmLncxM193ZWlnaHQgPSB0b3JjaC5ubi5QYXJhbWV0ZXIoDQogICAgICAgICAgICB0b3JjaC5lbXB0eSgNCiAgICAgICAgICAgICAgICBzZWxmLm51bV9leHBlcnRzLCAyICogc2VsZi5pbnRlcm1lZGlhdGVfc2l6ZSwgc2VsZi5oaWRkZW5fc2l6ZSwgZHR5cGU9cGFyYW1zX2R0eXBlLCBkZXZpY2U9ZGV2aWNlDQogICAgICAgICAgICApLA0KICAgICAgICAgICAgcmVxdWlyZXNfZ3JhZD1GYWxzZSwNCiAgICAgICAgKQ0KICAgICAgICBzZWxmLnJlZ2lzdGVyX3BhcmFtZXRlcigidzEzX3dlaWdodCIsIHNlbGYudzEzX3dlaWdodCkNCg0KICAgICAgICBzZWxmLncyX3dlaWdodCA9IHRvcmNoLm5uLlBhcmFtZXRlcigNCiAgICAgICAgICAgIHRvcmNoLmVtcHR5KA0KICAgICAgICAgICAgICAgIHNlbGYubnVtX2V4cGVydHMsIHNlbGYuaGlkZGVuX3NpemUsIHNlbGYuaW50ZXJtZWRpYXRlX3NpemUsIGR0eXBlPXBhcmFtc19kdHlwZSxkZXZpY2U9ZGV2aWNlDQogICAgICAgICAgICApLA0KICAgICAgICAgICAgcmVxdWlyZXNfZ3JhZD1GYWxzZSwNCiAgICAgICAgKQ0KICAgICAgICBzZWxmLnJlZ2lzdGVyX3BhcmFtZXRlcigidzJfd2VpZ2h0Iiwgc2VsZi53Ml93ZWlnaHQpDQogICAgICAgIA0KICAgICAgICBzZWxmLmdhdGUgPSBNb0VHYXRlKGNvbmZpZz1jb25maWcpDQogICAgICAgIA0KICAgICAgICBpbnRlcm1lZGlhdGVfc2l6ZSA9IGNvbmZpZ1siZF9leHBlcnQiXSAqIHNlbGYubl9zaGFyZWRfZXhwZXJ0cyANCiAgICAgICAgc2VsZi5zaGFyZWRfZXhwZXJ0cyA9IEV4cGVydE1MUCgNCiAgICAgICAgICAgIGhpZGRlbl9zaXplPXNlbGYuaGlkZGVuX3NpemUsDQogICAgICAgICAgICBpbnRlcm1lZGlhdGVfc2l6ZT1pbnRlcm1lZGlhdGVfc2l6ZSwNCiAgICAgICAgKQ0KDQogICAgZGVmIGZvcndhcmQoc2VsZiwgeDogdG9yY2guVGVuc29yKSAtPiB0b3JjaC5UZW5zb3I6DQogICAgICAgIG9yaWdfc2hhcGUgPSB4LnNoYXBlDQogICAgICAgIHNoYXJlZF9vdXRwdXQgPSBzZWxmLnNoYXJlZF9leHBlcnRzKHgpDQogICAgICAgIHRvcGtfd2VpZ2h0cywgdG9wa19pZHMgPSBzZWxmLmdhdGUoeCkNCiAgICAgICAgeF9mbGF0ID0geC52aWV3KC0xLCBzZWxmLmhpZGRlbl9zaXplKQ0KICAgICAgICByb3V0ZWRfb3V0cHV0XyA9IGZ1c2VkX2V4cGVydHMoDQogICAgICAgICAgICAgICAgICAgICAgICBoaWRkZW5fc3RhdGVzPXhfZmxhdCwNCiAgICAgICAgICAgICAgICAgICAgICAgIHcxPXNlbGYudzEzX3dlaWdodCwNCiAgICAgICAgICAgICAgICAgICAgICAgIHcyPXNlbGYudzJfd2VpZ2h0LA0KICAgICAgICAgICAgICAgICAgICAgICAgdG9wa193ZWlnaHRzPXRvcGtfd2VpZ2h0cywNCiAgICAgICAgICAgICAgICAgICAgICAgIHRvcGtfaWRzPXRvcGtfaWRzDQogICAgICAgICAgICAgICAgICAgICkNCiAgICAgICAgcm91dGVkX291dHB1dCA9IHJvdXRlZF9vdXRwdXRfLnZpZXcoKm9yaWdfc2hhcGUpDQogICAgICAgIHJldHVybiByb3V0ZWRfb3V0cHV0ICsgc2hhcmVkX291dHB1dA0KDQoNCmRlZiBjdXN0b21fa2VybmVsKGRhdGE6IGlucHV0X3QpIC0+IG91dHB1dF90Og0KICAgICIiIg0KICAgIFN1Ym1pc3Npb24gdGVtcGxhdGUgZm9yIERlZXBTZWVrLXN0eWxlIE1peHR1cmUgb2YgRXhwZXJ0cyB1c2luZyBQeVRvcmNoLg0KICAgIA0KICAgIEFyZ3M6DQogICAgICAgIGRhdGE6IFR1cGxlIG9mIChpbnB1dDogdG9yY2guVGVuc29yLCB3ZWlnaHRzOiBEaWN0W3N0ciwgdG9yY2guVGVuc29yXSwgY29uZmlnOiBEaWN0KQ0KICAgICAgICAgICAgLSBpbnB1dDogSW5wdXQgdGVuc29yIG9mIHNoYXBlIFtiYXRjaF9zaXplLCBzZXFfbGVuLCBoaWRkZW5fc2l6ZV0NCiAgICAgICAgICAgIC0gd2VpZ2h0czogRGljdGlvbmFyeSBjb250YWluaW5nIG1vZGVsIHdlaWdodHMNCiAgICAgICAgICAgIC0gY29uZmlnOiBEaWN0aW9uYXJ5IGNvbnRhaW5pbmcgbW9kZWwgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzDQogICAgICAgICAgICANCiAgICBSZXR1cm5zOg0KICAgICAgICBUdXBsZSBjb250YWluaW5nOg0KICAgICAgICAgICAgLSBvdXRwdXQ6IFByb2Nlc3NlZCB0ZW5zb3IgW2JhdGNoX3NpemUsIHNlcV9sZW4sIGRfbW9kZWxdDQogICAgICAgICAgICAtIGF1eF9kYXRhOiBEaWN0aW9uYXJ5IHdpdGggYXV4aWxpYXJ5IGRhdGENCiAgICAiIiINCiAgICBpbnB1dF90ZW5zb3IsIHdlaWdodHMsIGNvbmZpZyA9IGRhdGENCiAgICBudW1fZXhwZXJ0cyA9IGNvbmZpZ1sibl9yb3V0ZWRfZXhwZXJ0cyJdDQogICAgbW9lID0gTW9FKGNvbmZpZykNCg0KICAgICMgRmlsbCBpbiB0aGUgZ2l2ZW4gd2VpZ2h0cyBvZiB0aGUgbW9kZWwNCiAgICBtb2UuZ2F0ZS5XX2cud2VpZ2h0ID0gbm4uUGFyYW1ldGVyKHdlaWdodHNbJ3JvdXRlci53ZWlnaHQnXSkNCg0KICAgIGZvciBpIGluIHJhbmdlKG51bV9leHBlcnRzKToNCiAgICAgICAgZ2F0ZV9wcm9qX3dlaWdodCA9IHdlaWdodHNbZidleHBlcnRzLntpfS4wLndlaWdodCddLnQoKQ0KICAgICAgICB1cF9wcm9qX3dlaWdodCA9IHdlaWdodHNbZidleHBlcnRzLntpfS4xLndlaWdodCddLnQoKQ0KICAgICAgICBkb3duX3Byb2pfd2VpZ2h0ID0gd2VpZ2h0c1tmJ2V4cGVydHMue2l9LjIud2VpZ2h0J10udCgpDQoNCiAgICAgICAgY29tYmluZWQgPSB0b3JjaC5jYXQoWw0KICAgICAgICAgICAgICAgIGdhdGVfcHJval93ZWlnaHQsICANCiAgICAgICAgICAgICAgICB1cF9wcm9qX3dlaWdodCAgIA0KICAgICAgICAgICAgXSwgZGltPTApIA0KICAgICAgIA0KICAgICAgICAjIEFzc2lnbiB0byB0aGUgY29ycmVzcG9uZGluZyBleHBlcnQgcG9zaXRpb24gaW4gdzEzX3dlaWdodA0KICAgICAgICBtb2UudzEzX3dlaWdodC5kYXRhW2ldID0gY29tYmluZWQuY3VkYSgpDQogICAgICAgICMgQXNzaWduIGRvd25fcHJvaiAodHJhbnNwb3NlZCkgdG8gdzJfd2VpZ2h0DQogICAgICAgIG1vZS53Ml93ZWlnaHQuZGF0YVtpXSA9IGRvd25fcHJval93ZWlnaHQNCg0KICAgIHNoYXJlZF9leHBlcnRfd2VpZ2h0MCA9IHdlaWdodHNbJ3NoYXJlZF9leHBlcnRzLjAud2VpZ2h0J10udCgpDQogICAgc2hhcmVkX2V4cGVydF93ZWlnaHQxID0gd2VpZ2h0c1snc2hhcmVkX2V4cGVydHMuMS53ZWlnaHQnXS50KCkNCiAgICBtb2Uuc2hhcmVkX2V4cGVydHMuZ2F0ZV91cF9wcm9qLndlaWdodCA9IG5uLlBhcmFtZXRlcih0b3JjaC5jYXQoKHNoYXJlZF9leHBlcnRfd2VpZ2h0MCwgc2hhcmVkX2V4cGVydF93ZWlnaHQxKSwgZGltPTApKQ0KICAgIG1vZS5zaGFyZWRfZXhwZXJ0cy5kb3duX3Byb2oud2VpZ2h0ID0gbm4uUGFyYW1ldGVyKHdlaWdodHNbJ3NoYXJlZF9leHBlcnRzLjIud2VpZ2h0J10udCgpKQ0KDQogICAgIyBSdW4gdGhlIG1vZGVsDQogICAgb3V0cHV0ID0gbW9lKGlucHV0X3RlbnNvcikNCg0KICAgIHJldHVybiBvdXRwdXQNCg==

Source code from GPU Mode and the KernelBot dataset · June 9 Researcher Reciprocity License v1.0

Best evidence level for this revision: reported

JSON