IyBTZXJ2ZXItc2lkZQo8cmVwbHk+CgojIHRoaXMgaXMgcmV0dXJuZWQgZmlyc3Qgc2luY2Ugd2UgZ2V0IG5vIHByb3h5LWF1dGgKPGRhdGE+CkhUVFAvMS4xIDQwNyBBdXRob3JpemF0aW9uIFJlcXVpcmVkIHRvIHByb3h5IG1lIG15IGRlYXINClByb3h5LUF1dGhlbnRpY2F0ZTogRGlnZXN0IHJlYWxtPSJ3ZWlyZG9yZWFsbSIsIG5vbmNlPSIxMjM0NSINCg0KQW5kIHlvdSBzaG91bGQgaWdub3JlIHRoaXMgZGF0YS4KPC9kYXRhPgoKIyB0aGlzIGlzIHJldHVybmVkIHdoZW4gd2UgZ2V0IGEgR0VUIQo8ZGF0YTI+CkhUVFAvMS4xIDIwMCBPSwpEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVApDb250ZW50LUxlbmd0aDogNwpDb25uZWN0aW9uOiBjbG9zZQpDb250ZW50LVR5cGU6IHRleHQvaHRtbApGdW5ueS1oZWFkOiB5ZXN5ZXMKCmRhbmllbAo8L2RhdGEyPgoKIyB0aGVuIHRoaXMgaXMgcmV0dXJuZWQgd2hlbiB3ZSBnZXQgcHJveP0tYXV0aAo8ZGF0YTEwMDA+CkhUVFAvMS4xIDIwMCBPSyBzd3Nib3VuY2UNClNlcnZlcjogbm8KDQpOaWNlIHByb3h5IGF1dGggc2lyIQo8L2RhdGExMDAwPgoKPGRhdGFjaGVjaz4KSFRUUC8xLjEgNDA3IEF1dGhvcml6YXRpb24gUmVxdWlyZWQgdG8gcHJveHkgbWUgbXkgZGVhcg0KUHJveHktQXV0aGVudGljYXRlOiBEaWdlc3QgcmVhbG09IndlaXJkb3JlYWxtIiwgbm9uY2U9IjEyMzQ1Ig0KDQpIVFRQLzEuMSAyMDAgT0sgc3dzYm91bmNlDQpTZXJ2ZXI6IG5vCg0KSFRUUC8xLjEgMjAwIE9LCkRhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCkNvbnRlbnQtTGVuZ3RoOiA3CkNvbm5lY3Rpb246IGNsb3NlCkNvbnRlbnQtVHlwZTogdGV4dC9odG1sCkZ1bm55LWhlYWQ6IHllc3llcwoKZGFuaWVsCjwvZGF0YWNoZWNrPgo8L3JlcGx5PgoKIyBDbGllbnQtc2lkZQo8Y2xpZW50Pgo8c2VydmVyPgpodHRwCjwvc2VydmVyPgogPG5hbWU+CkhUVFAgcHJveHkgQ09OTkVDVCBhdXRoIERpZ2VzdAogPC9uYW1lPgogPGNvbW1hbmQ+Cmh0dHA6Ly90ZXN0LnJlbW90ZS5zZXJ2ZXIuY29tOjIwNi9wYXRoLzIwNjAwMDIgLS1wcm94eSBodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQgLS1wcm94eS11c2VyIHNpbGx5OnBlcnNvbiAtLXByb3h5LWRpZ2VzdCAtLXByb3h5dHVubmVsCjwvY29tbWFuZD4KPC90ZXN0PgoKIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKPHZlcmlmeT4KPHN0cmlwPgpeVXNlci1BZ2VudDogY3VybC8uKgo8L3N0cmlwPgo8cHJvdG9jb2w+CkNPTk5FQ1QgdGVzdC5yZW1vdGUuc2VydmVyLmNvbToyMDYgSFRUUC8xLjANCg0KQ09OTkVDVCB0ZXN0LnJlbW90ZS5zZXJ2ZXIuY29tOjIwNiBIVFRQLzEuMA0KUHJveHktQXV0aG9yaXphdGlvbjogRGlnZXN0IHVzZXJuYW1lPSJzaWxseSIsIHJlYWxtPSJ3ZWlyZG9yZWFsbSIsIG5vbmNlPSIxMjM0NSIsIHVyaT0idGVzdC5yZW1vdGUuc2VydmVyLmNvbToyMDYiLCByZXNwb25zZT0iNTA1OWE5NmM5NTQ5ODFjZWI5NGUxN2Q2NjdjOGQzZjgiDQoNCkdFVCAvcGF0aC8yMDYwMDAyIEhUVFAvMS4xDQpVc2VyLUFnZW50OiBjdXJsLzcuMTIuMy1DVlMgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTIuMy1DVlMgT3BlblNTTC8wLjkuNmIgemxpYi8xLjEuNA0KSG9zdDogdGVzdC5yZW1vdGUuc2VydmVyLmNvbToyMDYNClByYWdtYTogbm8tY2FjaGUNCkFjY2VwdDogKi8qDQoNCjwvcHJvdG9jb2w+CjwvdmVyaWZ5Pgo=