IyEgL2Jpbi9zaAouICIke3NyY2Rpcj0ufS9pbml0LnNoIjsgcGF0aF9wcmVwZW5kXyAuIC4uL3NyYyAuLi8uLi9nZXR0ZXh0LXJ1bnRpbWUvc3JjCgojIFRlc3Qgb2YgZ2V0dGV4dCBmYWNpbGl0aWVzIGluIHRoZSBiYXNoIGxhbmd1YWdlLgojIEFzc3VtZXMgYW4gZnJfRlIgbG9jYWxlIGlzIGluc3RhbGxlZC4KIyBBc3N1bWVzIHRoZSBmb2xsb3dpbmcgcGFja2FnZXMgYXJlIGluc3RhbGxlZDogYmFzaCAyLjAgb3IgbmV3ZXIuCgojIFRoaXMgdGVzdCBmYWlscyBvbiBNYWNPUyBYIDEwLjUgYmVjYXVzZSBpdHMgJ2Jhc2gnIGNvbW1hbmQgaXMgYnVpbHQgd2l0aAojIGFuIGluY2x1ZGVkIGludGwgZGlyZWN0b3J5IHdpdGhvdXQgaWNvbnYgc3VwcG9ydDsgaGVuY2UgaXQgcHJvZHVjZXMgd3JvbmcKIyBvdXRwdXQgd2hlbiBhY2Nlc3NpbmcgYW55IC5tbyBmaWxlIG5vdCBnZW5lcmF0ZWQgZnJvbSBhIC5wbyBmaWxlIGluIFVURi04CiMgZW5jb2RpbmcuCgojIFRoaXMgdGVzdCBmYWlscyBpZiB0aGUgZ2V0dGV4dCBwYWNrYWdlIHdhcyBjb25maWd1cmVkIHdpdGggLS1kaXNhYmxlLW5scywKIyBiZWNhdXNlIGluIHRoaXMgY2FzZSB0aGUgZ2V0dGV4dC1ydW50aW1lL3NyYy9nZXR0ZXh0IHByb2dyYW0gZG9lcyBub3QgZG8KIyBhbnkgbWVzc2FnZSBjYXRhbG9nIGxvb2t1cHMuCgpjYXQgPDxcRU9GID4gcHJvZy5iYXNoCiMhIC9iaW4vYmFzaAoKbj0kMQoKLiBnZXR0ZXh0LnNoCgpURVhURE9NQUlOPXByb2cKZXhwb3J0IFRFWFRET01BSU4KVEVYVERPTUFJTkRJUj0uCmV4cG9ydCBURVhURE9NQUlORElSCgokZWNobyAkIidZb3VyIGNvbW1hbmQsIHBsZWFzZT8nLCBhc2tlZCB0aGUgd2FpdGVyLiIKCiRlY2hvICJgZXZhbF9uZ2V0dGV4dCAiYSBwaWVjZSBvZiBjYWtlIiAiXFwkbiBwaWVjZXMgb2YgY2FrZSIgJG5gIgpFT0YKCjogJHtYR0VUVEVYVD14Z2V0dGV4dH0KTENfTUVTU0FHRVM9QyBMQ19BTEw9IFwKJHtYR0VUVEVYVH0gLW8gcHJvZy50bXAgLS1vbWl0LWhlYWRlciAtLW5vLWxvY2F0aW9uIHByb2cuYmFzaCBcCiAgPnByb2cuZXJyIDI+JjEKcmVzdWx0PSQ/CmNhdCBwcm9nLmVyciB8IGdyZXAgLXYgJ3dhcm5pbmc6IHRoZSBzeW50YXggXCQiXC5cLlwuIiBpcyBkZXByZWNhdGVkIGR1ZSB0byBzZWN1cml0eSByZWFzb25zJwp0ZXN0ICRyZXN1bHQgPSAwIHx8IHsgRXhpdCAxOyB9CkxDX0FMTD1DIHRyIC1kICdccicgPCBwcm9nLnRtcCA+IHByb2cucG90IHx8IEV4aXQgMQoKY2F0IDw8XEVPRiA+IHByb2cub2sKbXNnaWQgIidZb3VyIGNvbW1hbmQsIHBsZWFzZT8nLCBhc2tlZCB0aGUgd2FpdGVyLiIKbXNnc3RyICIiCgojLCBzaC1mb3JtYXQKbXNnaWQgImEgcGllY2Ugb2YgY2FrZSIKbXNnaWRfcGx1cmFsICIkbiBwaWVjZXMgb2YgY2FrZSIKbXNnc3RyWzBdICIiCm1zZ3N0clsxXSAiIgpFT0YKCjogJHtESUZGPWRpZmZ9CiR7RElGRn0gcHJvZy5vayBwcm9nLnBvdCB8fCBFeGl0IDEKCmNhdCA8PFxFT0YgPiBmci5wbwptc2dpZCAiIgptc2dzdHIgIiIKIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1JU08tODg1OS0xXG4iCiJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiA+IDEpO1xuIgoKbXNnaWQgIidZb3VyIGNvbW1hbmQsIHBsZWFzZT8nLCBhc2tlZCB0aGUgd2FpdGVyLiIKbXNnc3RyICKrVm90cmUgY29tbWFuZGUsIHMnaWwgdm91cyBwbGFpdLssIGRpdCBsZSBnYXLnb24uIgoKIyBMZXMgZ2F0ZWF1eCBhbGxlbWFuZHMgc29udCBsZXMgbWVpbGxldXJzIGR1IG1vbmRlLgojLCBzaC1mb3JtYXQKbXNnaWQgImEgcGllY2Ugb2YgY2FrZSIKbXNnaWRfcGx1cmFsICIkbiBwaWVjZXMgb2YgY2FrZSIKbXNnc3RyWzBdICJ1biBtb3JjZWF1IGRlIGdhdGVhdSIKbXNnc3RyWzFdICIkbiBtb3JjZWF1eCBkZSBnYXRlYXUiCkVPRgoKOiAke01TR01FUkdFPW1zZ21lcmdlfQoke01TR01FUkdFfSAtcSAtbyBmci5wby50bXAgZnIucG8gcHJvZy5wb3QgfHwgRXhpdCAxCkxDX0FMTD1DIHRyIC1kICdccicgPCBmci5wby50bXAgPiBmci5wby5uZXcgfHwgRXhpdCAxCgo6ICR7RElGRj1kaWZmfQoke0RJRkZ9IGZyLnBvIGZyLnBvLm5ldyB8fCBFeGl0IDEKCnRlc3QgLWQgZnIgfHwgbWtkaXIgZnIKdGVzdCAtZCBmci9MQ19NRVNTQUdFUyB8fCBta2RpciBmci9MQ19NRVNTQUdFUwoKOiAke01TR0ZNVD1tc2dmbXR9CiR7TVNHRk1UfSAtbyBmci9MQ19NRVNTQUdFUy9wcm9nLm1vIGZyLnBvCgojIFRlc3QgZm9yIHByZXNlbmNlIG9mIGJhc2ggdmVyc2lvbiAyLjAgb3IgbmV3ZXIuCihiYXNoIC1jIDopID4vZGV2L251bGwgMj4vZGV2L251bGwgXAogIHx8IHsgZWNobyAiU2tpcHBpbmcgdGVzdDogYmFzaCBub3QgZm91bmQiOyBFeGl0IDc3OyB9CmNhc2UgYGJhc2ggLWMgJ2VjaG8gJEJBU0hfVkVSU0lPTidgIGluCiAgWzItOV0uKikgOzsKICAqKSBlY2hvICJTa2lwcGluZyB0ZXN0OiBiYXNoIHZlcnNpb24gdG9vIG9sZCI7IEV4aXQgNzc7Owplc2FjCgojIFRlc3Qgd2hpY2ggb2YgdGhlIGZyX0ZSIGxvY2FsZXMgYXJlIGluc3RhbGxlZC4KOiAke0xPQ0FMRV9GUj1mcl9GUn0KOiAke0xPQ0FMRV9GUl9VVEY4PWZyX0ZSLlVURi04fQppZiB0ZXN0ICRMT0NBTEVfRlIgIT0gbm9uZTsgdGhlbgogIExDX0FMTD0kTE9DQUxFX0ZSIC4uL3Rlc3Rsb2NhbGUKICBjYXNlICQ/IGluCiAgICAwKSA7OwogICAgNzcpIExPQ0FMRV9GUj1ub25lOzsKICAgICopIEV4aXQgMTs7CiAgZXNhYwpmaQppZiB0ZXN0ICRMT0NBTEVfRlJfVVRGOCAhPSBub25lOyB0aGVuCiAgTENfQUxMPSRMT0NBTEVfRlJfVVRGOCAuLi90ZXN0bG9jYWxlCiAgY2FzZSAkPyBpbgogICAgMCkgOzsKICAgIDc3KSBMT0NBTEVfRlJfVVRGOD1ub25lOzsKICAgICopIEV4aXQgMTs7CiAgZXNhYwpmaQppZiB0ZXN0ICRMT0NBTEVfRlIgPSBub25lICYmIHRlc3QgJExPQ0FMRV9GUl9VVEY4ID0gbm9uZTsgdGhlbgogIGlmIHRlc3QgLWYgL3Vzci9iaW4vbG9jYWxlZGVmOyB0aGVuCiAgICBlY2hvICJTa2lwcGluZyB0ZXN0OiBubyBmcmVuY2ggbG9jYWxlIGlzIGluc3RhbGxlZCIKICBlbHNlCiAgICBlY2hvICJTa2lwcGluZyB0ZXN0OiBubyBmcmVuY2ggbG9jYWxlIGlzIHN1cHBvcnRlZCIKICBmaQogIEV4aXQgNzcKZmkKCmNhc2UgIiRob3N0X29zIiBpbgogIGRhcndpbiopCiAgICBpZiB0ZXN0ICRMT0NBTEVfRlIgIT0gbm9uZTsgdGhlbgogICAgICBMQ19BTEw9JExPQ0FMRV9GUiBiYXNoIC0taGVscCBcCiAgICAgICAgfCBncmVwICdeVXRpbGlzYXRpb24nID4gL2Rldi9udWxsIDI+JjEgfHwgRXhpdCA3NwogICAgZmkKICAgIGlmIHRlc3QgJExPQ0FMRV9GUl9VVEY4ICE9IG5vbmU7IHRoZW4KICAgICAgTENfQUxMPSRMT0NBTEVfRlJfVVRGOCBiYXNoIC0taGVscCBcCiAgICAgICAgfCBncmVwICdeVXRpbGlzYXRpb24nID4gL2Rldi9udWxsIDI+JjEgfHwgRXhpdCA3NwogICAgZmkKICA7Owplc2FjCgojIEV4cGVjdGVkIHJlc3VsdCB3aGVuIGJhc2ggaXMgYnVpbHQgd2l0aG91dCBpMThuIHN1cHBvcnQuCmNhdCA8PFxFT0YgPiBwcm9nLm5vawonWW91ciBjb21tYW5kLCBwbGVhc2U/JywgYXNrZWQgdGhlIHdhaXRlci4KMiBtb3JjZWF1eCBkZSBnYXRlYXUKRU9GCiMgRXhwZWN0ZWQgcmVzdWx0IHdoZW4gYmFzaCBpcyBidWlsdCB3aXRoIGkxOG4gc3VwcG9ydC4KY2F0IDw8XEVPRiA+IHByb2cub2sKq1ZvdHJlIGNvbW1hbmRlLCBzJ2lsIHZvdXMgcGxhaXS7LCBkaXQgbGUgZ2Fy529uLgoyIG1vcmNlYXV4IGRlIGdhdGVhdQpFT0YKY2F0IDw8XEVPRiA+IHByb2cub2t1CsKrVm90cmUgY29tbWFuZGUsIHMnaWwgdm91cyBwbGFpdMK7LCBkaXQgbGUgZ2Fyw6dvbi4KMiBtb3JjZWF1eCBkZSBnYXRlYXUKRU9GCgo6ICR7TE9DQUxFX0ZSPWZyX0ZSfQo6ICR7TE9DQUxFX0ZSX1VURjg9ZnJfRlIuVVRGLTh9CmlmIHRlc3QgJExPQ0FMRV9GUiAhPSBub25lOyB0aGVuCiAgcHJlcGFyZV9sb2NhbGVfIGZyICRMT0NBTEVfRlIKICBMQU5HVUFHRT0gTENfQUxMPSRMT0NBTEVfRlIgYmFzaCAuL3Byb2cuYmFzaCAyID4gcHJvZy5vdXQgfHwgRXhpdCAxCiAgOiAke0RJRkY9ZGlmZn0KICAke0RJRkZ9IHByb2cubm9rIHByb2cub3V0ID4gL2Rldi9udWxsICYmIHsKICAgIGVjaG8gIlNraXBwaW5nIHRlc3Q6IGJhc2ggaXMgYnVpbHQgd2l0aG91dCBpMThuIHN1cHBvcnQiCiAgICBFeGl0IDc3CiAgfQogICR7RElGRn0gcHJvZy5vayBwcm9nLm91dCB8fCBFeGl0IDEKZmkKaWYgdGVzdCAkTE9DQUxFX0ZSX1VURjggIT0gbm9uZTsgdGhlbgogIHByZXBhcmVfbG9jYWxlXyBmciAkTE9DQUxFX0ZSX1VURjgKICBMQU5HVUFHRT0gTENfQUxMPSRMT0NBTEVfRlJfVVRGOCBiYXNoIC4vcHJvZy5iYXNoIDIgPiBwcm9nLm91dCB8fCBFeGl0IDEKICA6ICR7RElGRj1kaWZmfQogICR7RElGRn0gcHJvZy5ub2sgcHJvZy5vdXQgPiAvZGV2L251bGwgJiYgewogICAgZWNobyAiU2tpcHBpbmcgdGVzdDogYmFzaCBpcyBidWlsdCB3aXRob3V0IGkxOG4gc3VwcG9ydCIKICAgIEV4aXQgNzcKICB9CiAgJHtESUZGfSBwcm9nLm9rdSBwcm9nLm91dCB8fCBFeGl0IDEKZmkKCkV4aXQgMAo=