IyEgL2Jpbi9zaAouICIke3NyY2Rpcj0ufS9pbml0LnNoIjsgcGF0aF9wcmVwZW5kXyAuIC4uL3NyYyAuLi8uLi9nZXR0ZXh0LXJ1bnRpbWUvc3JjCgojIFRlc3Qgb2YgZ2V0dGV4dCBmYWNpbGl0aWVzIGluIHRoZSBzaCBsYW5ndWFnZS4KIyBBc3N1bWVzIGFuIGZyX0ZSIGxvY2FsZSBpcyBpbnN0YWxsZWQuCiMgQXNzdW1lcyB0aGUgZm9sbG93aW5nIHBhY2thZ2VzIGFyZSBpbnN0YWxsZWQ6IGJhc2guCgojIE5vdGU6IFRoaXMgdGVzdCBmYWlscyBvbiBCZU9TIGJlY2F1c2UgdGhlcmUgYWxsIGxvY2FsZXMgdXNlIHRoZSBVVEYtOAojIGVuY29kaW5nLCBldmVuIHRoZSBsb2NhbGUgZnJfRlIsIHRodXMgdGhlIG91dHB1dCBjb21lcyBvdXQgaW4gVVRGLTguCgojIFRoaXMgdGVzdCBmYWlscyBpZiB0aGUgZ2V0dGV4dCBwYWNrYWdlIHdhcyBjb25maWd1cmVkIHdpdGggLS1kaXNhYmxlLW5scywKIyBiZWNhdXNlIGluIHRoaXMgY2FzZSB0aGUgZ2V0dGV4dC1ydW50aW1lL3NyYy9nZXR0ZXh0IHByb2dyYW0gZG9lcyBub3QgZG8KIyBhbnkgbWVzc2FnZSBjYXRhbG9nIGxvb2t1cHMuCgpjYXQgPDxcRU9GID4gcHJvZy5zaAojISAvYmluL3NoCgpuPSQxCgouIGdldHRleHQuc2gKClRFWFRET01BSU49cHJvZwpleHBvcnQgVEVYVERPTUFJTgpURVhURE9NQUlORElSPS4KZXhwb3J0IFRFWFRET01BSU5ESVIKCiRlY2hvICJgZ2V0dGV4dCBcIidZb3VyIGNvbW1hbmQsIHBsZWFzZT8nLCBhc2tlZCB0aGUgd2FpdGVyLlwiYCIKCiRlY2hvICJgZXZhbF9uZ2V0dGV4dCBcImEgcGllY2Ugb2YgY2FrZVwiIFwiXFwkbiBwaWVjZXMgb2YgY2FrZVwiICRuYCIKCiRlY2hvICJgZ2V0dGV4dCAtYyBGaWxlIFwiT3BlblwiYCIKCiRlY2hvICJgZ2V0dGV4dCAtLWNvbnRleHQgRmlsZSBcIkNsb3NlXCJgIgoKJGVjaG8gImBnZXR0ZXh0IC0tY29udGV4dD1GaWxlIFwiU2F2ZVwiYCIKCiRlY2hvICJgZXZhbF9ucGdldHRleHQgRmlsZSBcIlxcJG4gZmlsZSBvcGVuXCIgXCJcXCRuIGZpbGVzIG9wZW5cIiAkbmAiCkVPRgoKOiAke1hHRVRURVhUPXhnZXR0ZXh0fQoke1hHRVRURVhUfSAtbyBwcm9nLnRtcCAtLW9taXQtaGVhZGVyIC0tbm8tbG9jYXRpb24gcHJvZy5zaCB8fCBFeGl0IDEKTENfQUxMPUMgdHIgLWQgJ1xyJyA8IHByb2cudG1wID4gcHJvZy5wb3QgfHwgRXhpdCAxCgpjYXQgPDxcRU9GID4gcHJvZy5vawptc2dpZCAiJ1lvdXIgY29tbWFuZCwgcGxlYXNlPycsIGFza2VkIHRoZSB3YWl0ZXIuIgptc2dzdHIgIiIKCiMsIHNoLWZvcm1hdAptc2dpZCAiYSBwaWVjZSBvZiBjYWtlIgptc2dpZF9wbHVyYWwgIiRuIHBpZWNlcyBvZiBjYWtlIgptc2dzdHJbMF0gIiIKbXNnc3RyWzFdICIiCgptc2djdHh0ICJGaWxlIgptc2dpZCAiT3BlbiIKbXNnc3RyICIiCgptc2djdHh0ICJGaWxlIgptc2dpZCAiQ2xvc2UiCm1zZ3N0ciAiIgoKbXNnY3R4dCAiRmlsZSIKbXNnaWQgIlNhdmUiCm1zZ3N0ciAiIgoKIywgc2gtZm9ybWF0Cm1zZ2N0eHQgIkZpbGUiCm1zZ2lkICIkbiBmaWxlIG9wZW4iCm1zZ2lkX3BsdXJhbCAiJG4gZmlsZXMgb3BlbiIKbXNnc3RyWzBdICIiCm1zZ3N0clsxXSAiIgpFT0YKCjogJHtESUZGPWRpZmZ9CiR7RElGRn0gcHJvZy5vayBwcm9nLnBvdCB8fCBFeGl0IDEKCmNhdCA8PFxFT0YgPiBmci5wbwptc2dpZCAiIgptc2dzdHIgIiIKIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1JU08tODg1OS0xXG4iCiJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiA+IDEpO1xuIgoKbXNnaWQgIidZb3VyIGNvbW1hbmQsIHBsZWFzZT8nLCBhc2tlZCB0aGUgd2FpdGVyLiIKbXNnc3RyICKrVm90cmUgY29tbWFuZGUsIHMnaWwgdm91cyBwbGFpdLssIGRpdCBsZSBnYXLnb24uIgoKIyBMZXMgZ2F0ZWF1eCBhbGxlbWFuZHMgc29udCBsZXMgbWVpbGxldXJzIGR1IG1vbmRlLgojLCBzaC1mb3JtYXQKbXNnaWQgImEgcGllY2Ugb2YgY2FrZSIKbXNnaWRfcGx1cmFsICIkbiBwaWVjZXMgb2YgY2FrZSIKbXNnc3RyWzBdICJ1biBtb3JjZWF1IGRlIGdhdGVhdSIKbXNnc3RyWzFdICIkbiBtb3JjZWF1eCBkZSBnYXRlYXUiCgptc2djdHh0ICJGaWxlIgptc2dpZCAiT3BlbiIKbXNnc3RyICJPdXZyaXIiCgptc2djdHh0ICJGaWxlIgptc2dpZCAiQ2xvc2UiCm1zZ3N0ciAiRmVybWVyIgoKbXNnY3R4dCAiRmlsZSIKbXNnaWQgIlNhdmUiCm1zZ3N0ciAiU2F1dmVnYXJkZXIiCgojLCBzaC1mb3JtYXQKbXNnY3R4dCAiRmlsZSIKbXNnaWQgIiRuIGZpbGUgb3BlbiIKbXNnaWRfcGx1cmFsICIkbiBmaWxlcyBvcGVuIgptc2dzdHJbMF0gIiRuIGZpY2hpZXIgb3V2ZXJ0Igptc2dzdHJbMV0gIiRuIGZpY2hpZXJzIG91dmVydHMiCkVPRgoKOiAke01TR01FUkdFPW1zZ21lcmdlfQoke01TR01FUkdFfSAtcSAtbyBmci5wby50bXAgZnIucG8gcHJvZy5wb3QgfHwgRXhpdCAxCkxDX0FMTD1DIHRyIC1kICdccicgPCBmci5wby50bXAgPiBmci5wby5uZXcgfHwgRXhpdCAxCgo6ICR7RElGRj1kaWZmfQoke0RJRkZ9IGZyLnBvIGZyLnBvLm5ldyB8fCBFeGl0IDEKCnRlc3QgLWQgZnIgfHwgbWtkaXIgZnIKdGVzdCAtZCBmci9MQ19NRVNTQUdFUyB8fCBta2RpciBmci9MQ19NRVNTQUdFUwoKOiAke01TR0ZNVD1tc2dmbXR9CiR7TVNHRk1UfSAtbyBmci9MQ19NRVNTQUdFUy9wcm9nLm1vIGZyLnBvCgojIFRlc3Qgd2hpY2ggb2YgdGhlIGZyX0ZSIGxvY2FsZXMgYXJlIGluc3RhbGxlZC4KOiAke0xPQ0FMRV9GUj1mcl9GUn0KOiAke0xPQ0FMRV9GUl9VVEY4PWZyX0ZSLlVURi04fQppZiB0ZXN0ICRMT0NBTEVfRlIgIT0gbm9uZTsgdGhlbgogIExDX0FMTD0kTE9DQUxFX0ZSIC4uL3Rlc3Rsb2NhbGUKICBjYXNlICQ/IGluCiAgICAwKSA7OwogICAgNzcpIExPQ0FMRV9GUj1ub25lOzsKICAgICopIEV4aXQgMTs7CiAgZXNhYwpmaQppZiB0ZXN0ICRMT0NBTEVfRlJfVVRGOCAhPSBub25lOyB0aGVuCiAgTENfQUxMPSRMT0NBTEVfRlJfVVRGOCAuLi90ZXN0bG9jYWxlCiAgY2FzZSAkPyBpbgogICAgMCkgOzsKICAgIDc3KSBMT0NBTEVfRlJfVVRGOD1ub25lOzsKICAgICopIEV4aXQgMTs7CiAgZXNhYwpmaQppZiB0ZXN0ICRMT0NBTEVfRlIgPSBub25lICYmIHRlc3QgJExPQ0FMRV9GUl9VVEY4ID0gbm9uZTsgdGhlbgogIGlmIHRlc3QgLWYgL3Vzci9iaW4vbG9jYWxlZGVmOyB0aGVuCiAgICBlY2hvICJTa2lwcGluZyB0ZXN0OiBubyBmcmVuY2ggbG9jYWxlIGlzIGluc3RhbGxlZCIKICBlbHNlCiAgICBlY2hvICJTa2lwcGluZyB0ZXN0OiBubyBmcmVuY2ggbG9jYWxlIGlzIHN1cHBvcnRlZCIKICBmaQogIEV4aXQgNzcKZmkKCjogJHtESUZGPWRpZmZ9CmNhdCA8PFxFT0YgPiBwcm9nLm9rCqtWb3RyZSBjb21tYW5kZSwgcydpbCB2b3VzIHBsYWl0uywgZGl0IGxlIGdhcudvbi4KMiBtb3JjZWF1eCBkZSBnYXRlYXUKT3V2cmlyCkZlcm1lcgpTYXV2ZWdhcmRlcgoyIGZpY2hpZXJzIG91dmVydHMKRU9GCmNhdCA8PFxFT0YgPiBwcm9nLm9rdQrCq1ZvdHJlIGNvbW1hbmRlLCBzJ2lsIHZvdXMgcGxhaXTCuywgZGl0IGxlIGdhcsOnb24uCjIgbW9yY2VhdXggZGUgZ2F0ZWF1Ck91dnJpcgpGZXJtZXIKU2F1dmVnYXJkZXIKMiBmaWNoaWVycyBvdXZlcnRzCkVPRgoKOiAke0xPQ0FMRV9GUj1mcl9GUn0KOiAke0xPQ0FMRV9GUl9VVEY4PWZyX0ZSLlVURi04fQppZiB0ZXN0ICRMT0NBTEVfRlIgIT0gbm9uZTsgdGhlbgogIHByZXBhcmVfbG9jYWxlXyBmciAkTE9DQUxFX0ZSCiAgTEFOR1VBR0U9IExDX0FMTD0kTE9DQUxFX0ZSIHNoIC4vcHJvZy5zaCAyID4gcHJvZy5vdXQgfHwgRXhpdCAxCiAgJHtESUZGfSBwcm9nLm9rIHByb2cub3V0IHx8IEV4aXQgMQpmaQppZiB0ZXN0ICRMT0NBTEVfRlJfVVRGOCAhPSBub25lOyB0aGVuCiAgcHJlcGFyZV9sb2NhbGVfIGZyICRMT0NBTEVfRlJfVVRGOAogIExBTkdVQUdFPSBMQ19BTEw9JExPQ0FMRV9GUl9VVEY4IHNoIC4vcHJvZy5zaCAyID4gcHJvZy5vdXQgfHwgRXhpdCAxCiAgJHtESUZGfSBwcm9nLm9rdSBwcm9nLm91dCB8fCBFeGl0IDEKZmkKCkV4aXQgMAo=