-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathComoxV2.vex
More file actions
1 lines (1 loc) · 24.5 KB
/
ComoxV2.vex
File metadata and controls
1 lines (1 loc) · 24.5 KB
1
./___ThIsisATemPoRaRyFiLE___.json 000666 000000 000000 0000055260 13417736017 017202 0 ustar 00 000000 000000 13417736017 13417736017 {"title":"ComoxV2","description":"Use this template for all competition code.","version":"0.0.1","icon":"USER000x.bmp","files":{"robot-config.h":"dmV4OjpicmFpbiBCcmFpbjsKdmV4Ojpjb250cm9sbGVyIENvbnRyb2xsZXI7Cgp2ZXg6Om1vdG9yIExlZnREcml2ZUYgPSB2ZXg6Om1vdG9yKHZleDo6UE9SVDMpOwp2ZXg6Om1vdG9yIExlZnREcml2ZUIgPSB2ZXg6Om1vdG9yKHZleDo6UE9SVDExKTsKdmV4Ojptb3RvciBSaWdodERyaXZlRiA9IHZleDo6bW90b3IodmV4OjpQT1JUMTAsIHRydWUpOwp2ZXg6Om1vdG9yIFJpZ2h0RHJpdmVCID0gdmV4Ojptb3Rvcih2ZXg6OlBPUlQxOSwgdHJ1ZSk7Cgp2ZXg6Om1vdG9yIExvYWRlciA9IHZleDo6bW90b3IodmV4OjpQT1JUMSk7CnZleDo6bW90b3IgQ2F0aXB1bHQgPSB2ZXg6Om1vdG9yKHZleDo6UE9SVDIwLCB0cnVlKTsKCnZleDo6bW90b3IgVG93ZXIgPSB2ZXg6Om1vdG9yKHZleDo6UE9SVDkpOwp2ZXg6Om1vdG9yIEZsaXBwZXIgPSB2ZXg6Om1vdG9yKHZleDo6UE9SVDEyKTsKCnZleDo6YnVtcGVyIFRvd2VyTGltaXQgPSB2ZXg6OmJ1bXBlcihCcmFpbi5UaHJlZVdpcmVQb3J0LkEpOwoKdmV4OjpsaW1pdCBBdXRvbkNvbG91ciA9IHZleDo6bGltaXQoQnJhaW4uVGhyZWVXaXJlUG9ydC5CKTsKdmV4OjpsaW1pdCBBdXRvbkVuZCA9IHZleDo6bGltaXQoQnJhaW4uVGhyZWVXaXJlUG9ydC5DKTs=","main.cpp":"I2luY2x1ZGUgInJvYm90LWNvbmZpZy5oIgoKLy9DcmVhdGVzIGEgY29tcGV0aXRpb24gb2JqZWN0IHRoYXQgYWxsb3dzIGFjY2VzcyB0byBDb21wZXRpdGlvbiBtZXRob2RzLgp2ZXg6OmNvbXBldGl0aW9uICAgIENvbXBldGl0aW9uOwoKaW50IGxvYWRlck1vZGUgPSAwOyAvLzAgbWVhbnMgbm90IG1vdmluZy4KaW50IGRyaXZlTW9kZSA9IDA7IC8vU3RhcnRzIGF0IDAuIEp1c3QgZ28gd2l0aCBpdC4KaW50IHRvdGFsRHJpdmVNb2RlcyA9IDM7IC8vVGhlIG51bWJlciBvZiBtb2Rlcy4KYm9vbCBicmFrZXMgPSBmYWxzZTsgLy9GYWxzZSBtZWFucyBjb2FzdC4KYm9vbCBkaXJlY3Rpb24gPSBmYWxzZTsgLy9GYWxzZSBtZWFucyBub3JtYWwKCmJvb2wgc2tpbGxzID0gZmFsc2U7CgovL0RlZmluaW5nIGZ1bmN0aW9ucyBmb3IgZHJpdmVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kdm9pZCB0YW5rQ29udHJvbCgpOwp2b2lkIGZwc0NvbnRyb2woKTsKdm9pZCBwb3dlckRyaXZlKGludCBsZWZ0ZiwgaW50IGxlZnRiLCBpbnQgcmlnaHRmLCBpbnQgcmlnaHRiKTsKdm9pZCB1cGRhdGVMb2FkZXIoKTsKdm9pZCB1cGRhdGVDYXRpcHVsdCgpOwp2b2lkIHVwZGF0ZVRvd2VyKCk7CnZvaWQgdXBkYXRlRmxpcHBlcigpOwp2b2lkIGxvYWRlclNwaW5Eb3duKCk7CnZvaWQgbG9hZGVyU3BpblVwKCk7CnZvaWQgc2xvd0Rvd24oKTsKdm9pZCBicmFrZSgpOwp2b2lkIGZpcmUoKTsKdm9pZCBkaXJlY3Rpb25Td2FwKCk7Ci8vRW5kIGRlZmluaW5nIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLy9BdXRvbm9tb3VzIEV2ZXJ5dGhpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmJvb2wgcmVkID0gZmFsc2U7CmJvb2wgdG9wID0gZmFsc2U7IC8vVGhlIHNpZGUgd2l0aCBmbGFncwp2b2lkIGRyaXZlKGludCBkaXN0YW5jZSwgaW50IHNwZWVkKTsKdm9pZCB0dXJuVXAoaW50IGRpc3RhbmNlLCBpbnQgc3BlZWQpOyAvLyJVcCBtZWFucyB0b3dhcmRzIHRoZSBmbGFncy4gUmVnYXJkbGVzcyBvZiBhdXRvbiBzaWRlLiIKdm9pZCBzbGlkZVVwKGludCBkaXN0YW5jZSwgaW50IHNwZWVkKTsKdm9pZCBkcml2ZUFzeW5jKGludCBkaXN0YW5jZSwgaW50IHNwZWVkKTsKdm9pZCBjb25maWdBdXRvbigpOwp2b2lkIGF1dG9uQ29tbW9uKCk7CnZvaWQgYXV0b25Ub3AoKTsKdm9pZCBhdXRvbkJvdHRvbSgpOwp2b2lkIGF1dG9uUmV2ZXJzZWQoKTsKdm9pZCBhdXRvblNraWxscygpOwovL0VuZCBBdXRvbm9tb3VzIERlZmluaXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCnZvaWQgcHJlX2F1dG9uKCB2b2lkICkgewogICAgLy9TZXR1cCBpbml0aWFsIHZlbG9jaXR5IGZvciBzb21lIG9mIHRoZSBzeXN0ZW1zLiBKdXN0IGFkZCB2ZWxvY2l0eSB0byB3aGVlbHMgZXZlcnkgdGltZS4KICAgIExvYWRlci5zZXRWZWxvY2l0eSg3NSwgdmV4Ojp2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgQ2F0aXB1bHQuc2V0VmVsb2NpdHkoMTAwLCB2ZXg6OnZlbG9jaXR5VW5pdHM6OnBjdCk7CiAgICBDYXRpcHVsdC5zZXRTdG9wcGluZyh2ZXg6OmJyYWtlVHlwZTo6Y29hc3QpOwogICAgQ2F0aXB1bHQuc2V0VGltZW91dCgzMDAwLCB2ZXg6OnRpbWVVbml0czo6bXNlYyk7CiAgICBGbGlwcGVyLnNldFZlbG9jaXR5KDEwMCwgdmV4Ojp2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgRmxpcHBlci5zZXRTdG9wcGluZyh2ZXg6OmJyYWtlVHlwZTo6aG9sZCk7CiAgICBUb3dlci5zZXRWZWxvY2l0eSgxNSwgdmV4Ojp2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgVG93ZXIuc2V0U3RvcHBpbmcodmV4OjpicmFrZVR5cGU6OmhvbGQpOwogICAgCiAgICBMZWZ0RHJpdmVGLnNldFN0b3BwaW5nKHZleDo6YnJha2VUeXBlOjpjb2FzdCk7CiAgICBMZWZ0RHJpdmVCLnNldFN0b3BwaW5nKHZleDo6YnJha2VUeXBlOjpicmFrZSk7CiAgICBSaWdodERyaXZlRi5zZXRTdG9wcGluZyh2ZXg6OmJyYWtlVHlwZTo6Y29hc3QpOwogICAgUmlnaHREcml2ZUIuc2V0U3RvcHBpbmcodmV4OjpicmFrZVR5cGU6OmJyYWtlKTsKICAgIAogICAgLy9TZXR1cCBjb250cm9sIGNhbGxiYWNrcyBmb3IgZWFjaCBmdW5jdGlvbi4KICAgIENvbnRyb2xsZXIuQnV0dG9uWC5wcmVzc2VkKCBsb2FkZXJTcGluVXAgKTsKICAgIENvbnRyb2xsZXIuQnV0dG9uQi5wcmVzc2VkKCBsb2FkZXJTcGluRG93biApOwogICAgQ29udHJvbGxlci5CdXR0b25MMS5wcmVzc2VkKCBzbG93RG93biApOwogICAgQ29udHJvbGxlci5CdXR0b25MMi5wcmVzc2VkKCBicmFrZSApOwogICAgQ29udHJvbGxlci5CdXR0b25ZLnByZXNzZWQoIGZpcmUgKTsKICAgIENvbnRyb2xsZXIuQnV0dG9uQS5wcmVzc2VkKCBkaXJlY3Rpb25Td2FwICk7CiAgICBjb25maWdBdXRvbigpOyAvL0luaXRpYWwgY2hlY2suIFRoaW5ncyBzaG91bGQgcHJib2FibHkgYmUgcmVhZHkgaGVyZS4KfQoKdm9pZCBhdXRvbm9tb3VzKCB2b2lkICkgewogICAgY29uZmlnQXV0b24oKTsgLy9Hb29kIHRvIGRvIGl0IGFnYWluIGp1c3QgaW5jYXNlIHRoZXJlIGFyZSBpc3N1ZXMuCiAgICAKICAgIGlmKHNraWxscyA9PSB0cnVlKXsKICAgICAgICBhdXRvblNraWxscygpOwogICAgfWVsc2UgaWYodG9wID09IHRydWUgJiYgc2tpbGxzID09IGZhbHNlKXsKICAgICAgICBhdXRvblRvcCgpOwogICAgfWVsc2UgaWYodG9wID09IGZhbHNlICYmIHNraWxscyA9PSBmYWxzZSl7CiAgICAgICAgYXV0b25SZXZlcnNlZCgpOwogICAgfQp9Cgp2b2lkIGNvbmZpZ0F1dG9uKCl7CiAgICAvL1VzZSB0aGUgUG90IHRvIGRlY2lkZSBhdXRvbiBzZXR1cC4KICAgIGlmKEF1dG9uQ29sb3VyLnByZXNzaW5nKCkgPT0gMSAmJiBBdXRvbkVuZC5wcmVzc2luZygpID09IDApewogICAgICAgIHJlZCA9IHRydWU7CiAgICAgICAgdG9wID0gZmFsc2U7CiAgICB9ZWxzZSBpZihBdXRvbkNvbG91ci5wcmVzc2luZygpID09IDEgJiYgQXV0b25FbmQucHJlc3NpbmcoKSA9PSAxKXsKICAgICAgICByZWQgPSB0cnVlOwogICAgICAgIHRvcCA9IHRydWU7CiAgICB9ZWxzZSBpZihBdXRvbkNvbG91ci5wcmVzc2luZygpID09IDAgJiYgQXV0b25FbmQucHJlc3NpbmcoKSA9PSAxKXsKICAgICAgICByZWQgPSBmYWxzZTsKICAgICAgICB0b3AgPSB0cnVlOwogICAgfWVsc2UgaWYoQXV0b25Db2xvdXIucHJlc3NpbmcoKSA9PSAwICYmIEF1dG9uRW5kLnByZXNzaW5nKCkgPT0gMCl7CiAgICAgICAgcmVkID0gZmFsc2U7CiAgICAgICAgdG9wID0gZmFsc2U7CiAgICB9CiAgICAKICAgIC8vUHJpbnQgd2hhdCB3ZSB0aGluayBpcyBoYXBwZW5pbmcgdG8gdGhlIGNvbnRyb2xsZXIuCiAgICBpZih0b3ApewogICAgICAgIENvbnRyb2xsZXIuU2NyZWVuLnByaW50KCIgICAgVE9QIik7CiAgICB9ZWxzZXsKICAgICAgICBDb250cm9sbGVyLlNjcmVlbi5wcmludCgiICAgIEJUTSIpOwogICAgfQogICAgLy9QcmludCB3aGF0IHdlIHRoaW5rIGlzIGhhcHBlbmluZyB0byB0aGUgcm9ib3Qgc2NyZWVuIGFuZCBmaW5pc2ggdGhlIGNvbnRyb2xsZXIgc2NyZWVuIGRpc3BsYXkuCiAgICBpZihyZWQpewogICAgICAgIENvbnRyb2xsZXIuU2NyZWVuLnByaW50KCJSRUQiKTsKICAgICAgICBCcmFpbi5TY3JlZW4uY2xlYXJTY3JlZW4odmV4Ojpjb2xvcjo6cmVkKTsKICAgIH1lbHNlewogICAgICAgIENvbnRyb2xsZXIuU2NyZWVuLnByaW50KCJCTFUiKTsKICAgICAgICBCcmFpbi5TY3JlZW4uY2xlYXJTY3JlZW4odmV4Ojpjb2xvcjo6Ymx1ZSk7CiAgICB9CiAgICAvL1ByaW50IHRoZSBlbmQgdG8gdGhlIHNjcmVhbiBhZnRlciBjbGVhcmluZyB0aGUgc2NyZWVuLgogICAgaWYodG9wKXsKICAgICAgICBCcmFpbi5TY3JlZW4ucHJpbnRBdCg1MCwgNTAsICJUT1AiKTsKICAgIH1lbHNlewogICAgICAgIEJyYWluLlNjcmVlbi5wcmludEF0KDUwLCA1MCwgIkJPVFRPTSIpOwogICAgfQp9CgovL1RoaW5ncyB3ZSBjYW4gdXNlIGZvciBib3RoIGF1dG9uIGVuZHMuCnZvaWQgYXV0b25Db21tb24oKXsKICAgIExvYWRlci5zcGluKHZleDo6ZGlyZWN0aW9uVHlwZTo6cmV2KTsKICAgIGRyaXZlKDExMTUsIDUwKTsKICAgIExvYWRlci5zdGFydFJvdGF0ZUZvcigtMTA4MCwgdmV4Ojpyb3RhdGlvblVuaXRzOjpkZWcsIDEwMCwgdmV4Ojp2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgTG9hZGVyLnN0b3AodmV4OjpicmFrZVR5cGU6OmhvbGQpOwp9CgovL1RoZSB0b3AgKGZsYWcpIGF1dG9uLgp2b2lkIGF1dG9uVG9wKCl7CiAgICBhdXRvbkNvbW1vbigpOwogICAgCiAgICBkcml2ZSgtMTAwMCwgNTApOwogICAgdHVyblVwKDY1MCwgNTApOwogICAgZHJpdmUoMzAwLCA1MCk7CiAgICBDYXRpcHVsdC5yb3RhdGVGb3IoMTA4MCwgdmV4Ojpyb3RhdGlvblVuaXRzOjpkZWcsIDEwMCwgdmV4Ojp2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgTG9hZGVyLnNwaW4odmV4OjpkaXJlY3Rpb25UeXBlOjpyZXYpOwogICAgZHJpdmUoNTAwLCA1MCk7CiAgICBMb2FkZXIucm90YXRlRm9yKC0yMTYwLCB2ZXg6OnJvdGF0aW9uVW5pdHM6OmRlZyk7CiAgICBDYXRpcHVsdC5yb3RhdGVGb3IoMTA4MCwgdmV4Ojpyb3RhdGlvblVuaXRzOjpkZWcsIDEwMCwgdmV4Ojp2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgc2xpZGVVcCgxNzAsIDEwMCk7CiAgICBkcml2ZSg2MDAsIDUwKTsKfQoKLy9UaGUgYm90dG9tIChjcm93ZCkgYXV0b24uCnZvaWQgYXV0b25Cb3R0b20oKXsKICAgIGF1dG9uQ29tbW9uKCk7CiAgICAKICAgIGRyaXZlKC00MDAsIDUwKTsKICAgIExvYWRlci5zcGluKHZleDo6ZGlyZWN0aW9uVHlwZTo6ZndkKTsKICAgIC8vQnJhaW4uU2NyZWVuLmNsZWFyU2NyZWVuKHZleDo6Y29sb3I6OmdyZWVuKTsKICAgIAogICAgc2xpZGVVcCgtNjc1LCAxMDApOwogICAgCiAgICAvL0xvYWRlci5zdG9wKCk7CiAgICBkcml2ZSg0NTAsIDI1KTsKICAgIGRyaXZlKC0xMTU1LCA1MCk7CiAgICBMb2FkZXIuc3RvcCgpOwogICAgc2xpZGVVcCgxNjUwLCAxMDApOwogICAgZHJpdmUoMTUwMCwgMTAwKTsKfQoKdm9pZCBhdXRvblJldmVyc2VkKCl7CiAgICBGbGlwcGVyLnN0YXJ0Um90YXRlVG8oNTkwLCB2ZXg6OnJvdGF0aW9uVW5pdHM6OmRlZywgMTAwLCB2ZXg6OnZlbG9jaXR5VW5pdHM6OnBjdCk7CiAgICBkcml2ZSgtMTExNSwgMTAwKTsKICAgIEZsaXBwZXIucm90YXRlVG8oMCwgdmV4Ojpyb3RhdGlvblVuaXRzOjpkZWcpOwogICAgZHJpdmUoNTAwLCA1MCk7OwogICAgc2xpZGVVcCg2NzUsIDUwKTsKICAgIEZsaXBwZXIucm90YXRlVG8oNTkwLCB2ZXg6OnJvdGF0aW9uVW5pdHM6OmRlZyk7CiAgICBkcml2ZUFzeW5jKC01MDAsIDgwKTsKICAgIHZleDo6dGFzazo6c2xlZXAoMzAwKTsKICAgIEZsaXBwZXIucm90YXRlVG8oMCwgdmV4Ojpyb3RhdGlvblVuaXRzOjpkZWcpOwp9Cgp2b2lkIGF1dG9uU2tpbGxzKCl7CiAgICBhdXRvblRvcCgpOwogICAgLy9CcmlkZ2UKICAgIHR1cm5VcCgzMCwgNTApOwogICAgZHJpdmUoLTI3NTAsIDUwKTsKICAgIHR1cm5VcCgtNjUwLCA1MCk7CiAgICBkcml2ZSgxMzAsIDI1KTsKICAgIC8vRW5kIEJyaWRnZQogICAgYXV0b25Cb3R0b20oKTsKfQoKdm9pZCB1c2VyY29udHJvbCggdm9pZCApIHsKICB3aGlsZSAoMSkgewogICAgZnBzQ29udHJvbCgpOyAvL1F1aW5uJ3MgcHJlZmZlcmFuY2UKICAgICAgCiAgICB1cGRhdGVMb2FkZXIoKTsgLy9UaGUgbWV0aG9kIHRvIGNoZWNrIGlmIHRoZSBsb2FkZXIgc2hvdWxkIGJlIG1vdmluZyBvciBzdG9wcGVkIGJhc2VkIG9uIHNpbmdsZSBidXR0b25zLgogICAgdXBkYXRlQ2F0aXB1bHQoKTsgLy9UaGUgY2F0aXB1bHQgd2F0Y2hkb2cgd2hpY2gga2lsbHMgcG93ZXIgaWYgaXQgaXNuJ3QgbW92aW5nLgogICAgdXBkYXRlVG93ZXIoKTsgICAgICAgICAgCiAgICB1cGRhdGVGbGlwcGVyKCk7ICAKICAgICAgCiAgICB2ZXg6OnRhc2s6OnNsZWVwKDIwKTsgLy9TbGVlcCB0aGUgdGFzayBmb3IgYSBzaG9ydCBhbW91bnQgb2YgdGltZSB0byBwcmV2ZW50IHdhc3RlZCByZXNvdXJjZXMuIAogIH0KfQoKdm9pZCB0YW5rQ29udHJvbCgpewogICAgaW50IHNpZGVsID0gQ29udHJvbGxlci5BeGlzMS52YWx1ZSgpOwogICAgaW50IHNpZGVyID0gQ29udHJvbGxlci5BeGlzNC52YWx1ZSgpOwogICAgaW50IGxlZnQgPSBDb250cm9sbGVyLkF4aXMzLnZhbHVlKCk7CiAgICBpbnQgcmlnaHQgPSBDb250cm9sbGVyLkF4aXMyLnZhbHVlKCk7CiAgICAKICAgIGludCBzaWRlQXZnID0gKHNpZGVsK3NpZGVyKSAvIDI7CgogICAgaWYoZHJpdmVNb2RlID09IDApeyAvL0RyaXZpbmcgU3BlZWQgLS0tLS0tLS0tLS0tLS0KICAgICAgICAvL0RvIG5vdGhpbmcKICAgIH1lbHNlIGlmKGRyaXZlTW9kZSA9PSAxKXsgLy8gMy80IHNwZWVkPwogICAgICAgIGxlZnQgKj0gMzsKICAgICAgICByaWdodCAqPSAzOwogICAgICAgIHNpZGVBdmcgKj0gMzsKICAgICAgICAKICAgICAgICBsZWZ0IC89IDQ7CiAgICAgICAgcmlnaHQgLz0gNDsKICAgICAgICBzaWRlQXZnIC89IDQ7CiAgICB9ZWxzZSBpZihkcml2ZU1vZGUgPT0gMil7IC8vIDEvMyBzcGVlZD8KICAgICAgICBsZWZ0IC89IDM7CiAgICAgICAgcmlnaHQgLz0gMzsKICAgICAgICBzaWRlQXZnIC89IDM7CiAgICB9CiAgICAgIAogICAgaW50IGxlZnRmID0gbGVmdDsKICAgIGludCBsZWZ0YiA9IGxlZnQ7CiAgICBpbnQgcmlnaHRmID0gcmlnaHQ7CiAgICBpbnQgcmlnaHRiID0gcmlnaHQ7CiAgICAgICAKICAgIGlmKHNpZGVBdmcgPiAxMCB8fCBzaWRlQXZnIDwgMTApeyAvL1dpZXJkbmVzcwogICAgICAgIGxlZnRmICs9IHNpZGVBdmc7CiAgICAgICAgbGVmdGIgLT0gc2lkZUF2ZzsKICAgICAgICByaWdodGYgLT0gc2lkZUF2ZzsKICAgICAgICByaWdodGIgKz0gc2lkZUF2ZzsKICAgIH0KICAgIAogICAgcG93ZXJEcml2ZShsZWZ0ZiwgbGVmdGIsIHJpZ2h0ZiwgcmlnaHRiKTsKfQoKdm9pZCBmcHNDb250cm9sKCl7CiAgICBpbnQgZm9yd2FyZCA9IENvbnRyb2xsZXIuQXhpczIudmFsdWUoKTsKICAgIGludCBzaWRlID0gQ29udHJvbGxlci5BeGlzMS52YWx1ZSgpOwogICAgaW50IHR1cm4gPSBDb250cm9sbGVyLkF4aXM0LnZhbHVlKCk7CiAgICAKICAgIGludCBsZWZ0ZiA9IGZvcndhcmQgKyB0dXJuICsgc2lkZTsKICAgIGludCBsZWZ0YiA9IGZvcndhcmQgKyB0dXJuIC0gc2lkZTsKICAgIGludCByaWdodGYgPSBmb3J3YXJkIC0gdHVybiAtIHNpZGU7CiAgICBpbnQgcmlnaHRiID0gZm9yd2FyZCAtIHR1cm4gKyBzaWRlOwogICAgCiAgICBpZihkcml2ZU1vZGUgPT0gMCl7IC8vRHJpdmluZyBTcGVlZCAtLS0tLS0tLS0tLS0tLQogICAgICAgIC8vRG8gbm90aGluZwogICAgfWVsc2UgaWYoZHJpdmVNb2RlID09IDEpeyAvLyAzLzQgc3BlZWQ/CiAgICAgICAgbGVmdGYgKj0gMzsKICAgICAgICBsZWZ0YiAqPSAzOwogICAgICAgIHJpZ2h0ZiAqPSAzOwogICAgICAgIHJpZ2h0YiAqPSAzOwogICAgICAgIAogICAgICAgIGxlZnRmIC89IDQ7CiAgICAgICAgbGVmdGIgLz0gNDsKICAgICAgICByaWdodGYgLz0gNDsKICAgICAgICByaWdodGIgLz0gNDsKICAgIH1lbHNlIGlmKGRyaXZlTW9kZSA9PSAyKXsgLy8gMS8zIHNwZWVkPwogICAgICAgIGxlZnRmIC89IDM7CiAgICAgICAgbGVmdGIgLz0gMzsKICAgICAgICByaWdodGYgLz0gMzsKICAgICAgICByaWdodGIgLz0gMzsKICAgIH0KICAgIAogICAgcG93ZXJEcml2ZShsZWZ0ZiwgbGVmdGIsIHJpZ2h0ZiwgcmlnaHRiKTsKfQoKdm9pZCBwb3dlckRyaXZlKGludCBsZWZ0ZiwgaW50IGxlZnRiLCBpbnQgcmlnaHRmLCBpbnQgcmlnaHRiKXsKICAgIGlmKCFicmFrZXMpewogICAgICAgIGlmKCFkaXJlY3Rpb24pewogICAgICAgICAgICBMZWZ0RHJpdmVGLnNwaW4odmV4OjpkaXJlY3Rpb25UeXBlOjpmd2QsIGxlZnRmLCB2ZXg6OnZlbG9jaXR5VW5pdHM6OnBjdCk7CiAgICAgICAgICAgIExlZnREcml2ZUIuc3Bpbih2ZXg6OmRpcmVjdGlvblR5cGU6OmZ3ZCwgbGVmdGIsIHZleDo6dmVsb2NpdHlVbml0czo6cGN0KTsKICAgICAgICAgICAgUmlnaHREcml2ZUYuc3Bpbih2ZXg6OmRpcmVjdGlvblR5cGU6OmZ3ZCwgcmlnaHRmLCB2ZXg6OnZlbG9jaXR5VW5pdHM6OnBjdCk7CiAgICAgICAgICAgIFJpZ2h0RHJpdmVCLnNwaW4odmV4OjpkaXJlY3Rpb25UeXBlOjpmd2QsIHJpZ2h0YiwgdmV4Ojp2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgICAgIH1lbHNlewogICAgICAgICAgICBMZWZ0RHJpdmVGLnNwaW4odmV4OjpkaXJlY3Rpb25UeXBlOjpyZXYsIHJpZ2h0YiwgdmV4Ojp2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgICAgICAgICBMZWZ0RHJpdmVCLnNwaW4odmV4OjpkaXJlY3Rpb25UeXBlOjpyZXYsIHJpZ2h0ZiwgdmV4Ojp2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgICAgICAgICBSaWdodERyaXZlRi5zcGluKHZleDo6ZGlyZWN0aW9uVHlwZTo6cmV2LCBsZWZ0YiwgdmV4Ojp2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgICAgICAgICBSaWdodERyaXZlQi5zcGluKHZleDo6ZGlyZWN0aW9uVHlwZTo6cmV2LCBsZWZ0ZiwgdmV4Ojp2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgICAgIH0KICAgIH0KfQoKLy9Mb2FkZXIgU3R1ZmYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQp2b2lkIHVwZGF0ZUxvYWRlcigpewogICAgLy9Mb2FkZXIgLSBBbHNvIGhhbmRsZWQgYnkgZXZlbnQgc3R1ZmYuCiAgICBpZihDb250cm9sbGVyLkJ1dHRvblIyLnByZXNzaW5nKCkpewogICAgICAgIExvYWRlci5zcGluKHZleDo6ZGlyZWN0aW9uVHlwZTo6ZndkKTsKICAgICAgICBsb2FkZXJNb2RlID0gMDsKICAgIH1lbHNlIGlmKENvbnRyb2xsZXIuQnV0dG9uUjEucHJlc3NpbmcoKSl7CiAgICAgICAgTG9hZGVyLnNwaW4odmV4OjpkaXJlY3Rpb25UeXBlOjpyZXYpOwogICAgICAgIGxvYWRlck1vZGUgPSAwOwogICAgfWVsc2UgaWYobG9hZGVyTW9kZSA9PSAwKXsKICAgICAgICBMb2FkZXIuc3RvcCh2ZXg6OmJyYWtlVHlwZTo6YnJha2UpOwogICAgfQp9Cgp2b2lkIGxvYWRlclNwaW5Eb3duKCl7CiAgICBpZihsb2FkZXJNb2RlICE9IDEpewogICAgICAgIGxvYWRlck1vZGUgPSAxOwogICAgICAgIExvYWRlci5zcGluKHZleDo6ZGlyZWN0aW9uVHlwZTo6ZndkLCAxMDAsIHZleDo6dmVsb2NpdHlVbml0czo6cGN0KTsKICAgIH1lbHNlIGlmKGxvYWRlck1vZGUgPT0gMSl7CiAgICAgICAgbG9hZGVyTW9kZSA9IDA7CiAgICAgICAgTG9hZGVyLnN0b3AodmV4OjpicmFrZVR5cGU6OmJyYWtlKTsKICAgIH0KfQoKdm9pZCBsb2FkZXJTcGluVXAoKXsKICAgIGlmKGxvYWRlck1vZGUgIT0gMil7CiAgICAgICAgbG9hZGVyTW9kZSA9IDI7CiAgICAgICAgTG9hZGVyLnNwaW4odmV4OjpkaXJlY3Rpb25UeXBlOjpyZXYsIDc1LCB2ZXg6OnZlbG9jaXR5VW5pdHM6OnBjdCk7CiAgICB9ZWxzZSBpZihsb2FkZXJNb2RlID09IDIpewogICAgICAgIGxvYWRlck1vZGUgPSAwOwogICAgICAgIExvYWRlci5zdG9wKHZleDo6YnJha2VUeXBlOjpicmFrZSk7CiAgICB9Cn0KLy9FbmQgbG9hZGVyIHN0dWZmIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgovL1Rvd2VyIFN0dWZmIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kdm9pZCB1cGRhdGVUb3dlcigpewogICAgaWYoQ29udHJvbGxlci5CdXR0b25VcC5wcmVzc2luZygpID09IDEpewogICAgICAgIFRvd2VyLnNwaW4odmV4OjpkaXJlY3Rpb25UeXBlOjpmd2QpOwogICAgfWVsc2UgaWYoQ29udHJvbGxlci5CdXR0b25Eb3duLnByZXNzaW5nKCkgPT0gMSAmJiBUb3dlckxpbWl0LnByZXNzaW5nKCkgPT0gMCl7CiAgICAgICAgVG93ZXIuc3Bpbih2ZXg6OmRpcmVjdGlvblR5cGU6OnJldik7CiAgICB9ZWxzZXsKICAgICAgICBUb3dlci5zdG9wKHZleDo6YnJha2VUeXBlOjpob2xkKTsKICAgIH0KfQovL0VuZCBUb3dlciBTdHVmZiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi8vRmxpcHBlciBTdHVmZiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQp2b2lkIHVwZGF0ZUZsaXBwZXIoKXsKICAgIGlmKENvbnRyb2xsZXIuQnV0dG9uUmlnaHQucHJlc3NpbmcoKSA9PSAxICYmIEZsaXBwZXIucm90YXRpb24odmV4Ojpyb3RhdGlvblVuaXRzOjpkZWcpIDw9IDU2MCl7CiAgICAgICAgRmxpcHBlci5zcGluKHZleDo6ZGlyZWN0aW9uVHlwZTo6ZndkKTsKICAgIH1lbHNlIGlmKENvbnRyb2xsZXIuQnV0dG9uTGVmdC5wcmVzc2luZygpID09IDEgJiYgRmxpcHBlci5yb3RhdGlvbih2ZXg6OnJvdGF0aW9uVW5pdHM6OmRlZykgPj0gNSl7CiAgICAgICAgRmxpcHBlci5zcGluKHZleDo6ZGlyZWN0aW9uVHlwZTo6cmV2KTsKICAgIH1lbHNlewogICAgICAgIEZsaXBwZXIuc3RvcCh2ZXg6OmJyYWtlVHlwZTo6aG9sZCk7CiAgICB9Cn0KLy9FbmQgRmxpcHBlciBTdHVmZgoKLy9TbG93IE1vZGUgU3R1ZmYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnZvaWQgc2xvd0Rvd24oKXsKICAgIGRyaXZlTW9kZSsrOwogICAgaWYoZHJpdmVNb2RlID49IHRvdGFsRHJpdmVNb2Rlcyl7CiAgICAgICAgZHJpdmVNb2RlID0gMDsKICAgIH0KICAgIAogICAgQ29udHJvbGxlci5TY3JlZW4uc2V0Q3Vyc29yKDEsIDApOwogICAgLy9Db250cm9sbGVyLlNjcmVlbi5wcmludCgiU3BlZWQgPSAlZCIsIGRyaXZlTW9kZSk7CiAgICBpZihkcml2ZU1vZGUgPT0gMCl7CiAgICAgICAgQ29udHJvbGxlci5TY3JlZW4ucHJpbnQoIlNwZWVkID0xMDAlIik7CiAgICAgICAgQnJhaW4uU2NyZWVuLmNsZWFyU2NyZWVuKHZleDo6Y29sb3I6OnB1cnBsZSk7CiAgICB9ZWxzZSBpZihkcml2ZU1vZGUgPT0gMSl7CiAgICAgICAgQ29udHJvbGxlci5TY3JlZW4ucHJpbnQoIlNwZWVkID0gNzUlIik7CiAgICAgICAgQnJhaW4uU2NyZWVuLmNsZWFyU2NyZWVuKHZleDo6Y29sb3I6OmJsYWNrKTsKICAgIH1lbHNlIGlmKGRyaXZlTW9kZSA9PSAyKXsKICAgICAgICBDb250cm9sbGVyLlNjcmVlbi5wcmludCgiU3BlZWQgPSAzMyUiKTsKICAgICAgICBCcmFpbi5TY3JlZW4uY2xlYXJTY3JlZW4odmV4Ojpjb2xvcjo6Y3lhbik7CiAgICB9Cn0KLy9FbmQgU2xvdyBNb2RlIFN0dWZmIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLy9CcmFrZSBTdHVmZiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQp2b2lkIGJyYWtlKCl7CiAgICBpZihicmFrZXMpewogICAgICAgIExlZnREcml2ZUYuc3RvcCh2ZXg6OmJyYWtlVHlwZTo6Y29hc3QpOyAgCiAgICAgICAgTGVmdERyaXZlQi5zdG9wKHZleDo6YnJha2VUeXBlOjpicmFrZSk7CiAgICAgICAgUmlnaHREcml2ZUYuc3RvcCh2ZXg6OmJyYWtlVHlwZTo6Y29hc3QpOwogICAgICAgIFJpZ2h0RHJpdmVCLnN0b3AodmV4OjpicmFrZVR5cGU6OmJyYWtlKTsKICAgICAgICBicmFrZXMgPSBmYWxzZTsKICAgICAgICBDb250cm9sbGVyLlNjcmVlbi5zZXRDdXJzb3IoMywgMCk7CiAgICAgICAgQ29udHJvbGxlci5TY3JlZW4ucHJpbnQoIkJSS1NPRkYiKTsKICAgICAgICBCcmFpbi5TY3JlZW4uY2xlYXJTY3JlZW4odmV4Ojpjb2xvcjo6Z3JlZW4pOwogICAgfWVsc2V7CiAgICAgICAgTGVmdERyaXZlRi5zdG9wKHZleDo6YnJha2VUeXBlOjpob2xkKTsgIAogICAgICAgIExlZnREcml2ZUIuc3RvcCh2ZXg6OmJyYWtlVHlwZTo6aG9sZCk7CiAgICAgICAgUmlnaHREcml2ZUYuc3RvcCh2ZXg6OmJyYWtlVHlwZTo6aG9sZCk7CiAgICAgICAgUmlnaHREcml2ZUIuc3RvcCh2ZXg6OmJyYWtlVHlwZTo6aG9sZCk7CiAgICAgICAgYnJha2VzID0gdHJ1ZTsKICAgICAgICBDb250cm9sbGVyLlNjcmVlbi5zZXRDdXJzb3IoMywgMCk7CiAgICAgICAgQ29udHJvbGxlci5TY3JlZW4ucHJpbnQoIkJSQUtTT04iKTsKICAgICAgICBCcmFpbi5TY3JlZW4uY2xlYXJTY3JlZW4odmV4Ojpjb2xvcjo6cmVkKTsKICAgIH0KfQovL0VuZCBCcmFrZSBTdHVmZiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgovL0NhdGlwdWx0IFN0dWZmIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnZvaWQgZmlyZSgpewogICAgQ2F0aXB1bHQuc3RhcnRSb3RhdGVGb3IoMTA4MCwgdmV4Ojpyb3RhdGlvblVuaXRzOjpkZWcpOwogICAgQnJhaW4uU2NyZWVuLmNsZWFyU2NyZWVuKHZleDo6Y29sb3I6OndoaXRlKTsKfQppbnQgbGFzdEpveSA9IDA7CnZvaWQgdXBkYXRlQ2F0aXB1bHQoKXsKICAgIGlmKENhdGlwdWx0LnBvd2VyKHZleDo6cG93ZXJVbml0czo6d2F0dCkgPiAxLjAgJiYgIUNhdGlwdWx0LmlzU3Bpbm5pbmcoKSl7CiAgICAgICAgLy9DYXRpcHVsdC5zdG9wKHZleDo6YnJha2VUeXBlOjpjb2FzdCk7CiAgICAgICAgQnJhaW4uU2NyZWVuLmNsZWFyU2NyZWVuKHZleDo6Y29sb3I6Om9yYW5nZSk7CiAgICB9CiAgICBpZihDb250cm9sbGVyLkF4aXMzLnZhbHVlKCkgLSBsYXN0Sm95ID4gNTApewogICAgICAgIENhdGlwdWx0LnN0b3AodmV4OjpicmFrZVR5cGU6OmNvYXN0KTsKICAgIH0KICAgIGxhc3RKb3kgPSBDb250cm9sbGVyLkF4aXMzLnZhbHVlKCk7Cn0KLy9FbmQgQ2F0aXB1bHQgU3R1ZmYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLy9EaXJlY3Rpb24gU3dhcHBpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQp2b2lkIGRpcmVjdGlvblN3YXAoKXsKICAgIGlmKGRpcmVjdGlvbiA9PSB0cnVlKXsKICAgICAgICBkaXJlY3Rpb24gPSBmYWxzZTsKICAgICAgICBDb250cm9sbGVyLlNjcmVlbi5zZXRDdXJzb3IoMiwgMCk7CiAgICAgICAgQ29udHJvbGxlci5TY3JlZW4ucHJpbnQoIkZGRkZGRkZGRkYiKTsKICAgIH1lbHNlIGlmKGRpcmVjdGlvbiA9PSBmYWxzZSl7CiAgICAgICAgZGlyZWN0aW9uID0gdHJ1ZTsKICAgICAgICBDb250cm9sbGVyLlNjcmVlbi5zZXRDdXJzb3IoMiwgMCk7CiAgICAgICAgQ29udHJvbGxlci5TY3JlZW4ucHJpbnQoIkJCQkJCQkJCQkIiKTsKICAgIH0KfQovL0VuZCBEaXJlY3Rpb24gU3dhcHBpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLy9BdXRvbm9tb3VzIEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kdm9pZCBkcml2ZShpbnQgZGlzdGFuY2UsIGludCBzcGVlZCl7CiAgICBMZWZ0RHJpdmVGLnN0YXJ0Um90YXRlRm9yKGRpc3RhbmNlLCB2ZXg6OnJvdGF0aW9uVW5pdHM6OmRlZywgc3BlZWQsIHZleDo6dmVsb2NpdHlVbml0czo6cGN0KTsKICAgIExlZnREcml2ZUIuc3RhcnRSb3RhdGVGb3IoZGlzdGFuY2UsIHZleDo6cm90YXRpb25Vbml0czo6ZGVnLCBzcGVlZCwgdmV4Ojp2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgUmlnaHREcml2ZUYuc3RhcnRSb3RhdGVGb3IoZGlzdGFuY2UsIHZleDo6cm90YXRpb25Vbml0czo6ZGVnLCBzcGVlZCwgdmV4Ojp2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgUmlnaHREcml2ZUIucm90YXRlRm9yKGRpc3RhbmNlLCB2ZXg6OnJvdGF0aW9uVW5pdHM6OmRlZywgc3BlZWQsIHZleDo6dmVsb2NpdHlVbml0czo6cGN0KTsKfQoKdm9pZCBkcml2ZUFzeW5jKGludCBkaXN0YW5jZSwgaW50IHNwZWVkKXsKICAgIExlZnREcml2ZUYuc3RhcnRSb3RhdGVGb3IoZGlzdGFuY2UsIHZleDo6cm90YXRpb25Vbml0czo6ZGVnLCBzcGVlZCwgdmV4Ojp2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgTGVmdERyaXZlQi5zdGFydFJvdGF0ZUZvcihkaXN0YW5jZSwgdmV4Ojpyb3RhdGlvblVuaXRzOjpkZWcsIHNwZWVkLCB2ZXg6OnZlbG9jaXR5VW5pdHM6OnBjdCk7CiAgICBSaWdodERyaXZlRi5zdGFydFJvdGF0ZUZvcihkaXN0YW5jZSwgdmV4Ojpyb3RhdGlvblVuaXRzOjpkZWcsIHNwZWVkLCB2ZXg6OnZlbG9jaXR5VW5pdHM6OnBjdCk7CiAgICBSaWdodERyaXZlQi5zdGFydFJvdGF0ZUZvcihkaXN0YW5jZSwgdmV4Ojpyb3RhdGlvblVuaXRzOjpkZWcsIHNwZWVkLCB2ZXg6OnZlbG9jaXR5VW5pdHM6OnBjdCk7Cn0KCnZvaWQgdHVyblVwKGludCBkaXN0YW5jZSwgaW50IHNwZWVkKXsKICAgIGlmKCFyZWQpewogICAgICAgIExlZnREcml2ZUYuc3RhcnRSb3RhdGVGb3IoZGlzdGFuY2UsIHZleDo6cm90YXRpb25Vbml0czo6ZGVnLCBzcGVlZCwgdmV4Ojp2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgICAgIExlZnREcml2ZUIuc3RhcnRSb3RhdGVGb3IoZGlzdGFuY2UsIHZleDo6cm90YXRpb25Vbml0czo6ZGVnLCBzcGVlZCwgdmV4Ojp2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgICAgIFJpZ2h0RHJpdmVGLnN0YXJ0Um90YXRlRm9yKC1kaXN0YW5jZSwgdmV4Ojpyb3RhdGlvblVuaXRzOjpkZWcsIHNwZWVkLCB2ZXg6OnZlbG9jaXR5VW5pdHM6OnBjdCk7CiAgICAgICAgUmlnaHREcml2ZUIucm90YXRlRm9yKC1kaXN0YW5jZSwgdmV4Ojpyb3RhdGlvblVuaXRzOjpkZWcsIHNwZWVkLCB2ZXg6OnZlbG9jaXR5VW5pdHM6OnBjdCk7CiAgICB9ZWxzZXsKICAgICAgICBMZWZ0RHJpdmVGLnN0YXJ0Um90YXRlRm9yKC1kaXN0YW5jZSwgdmV4Ojpyb3RhdGlvblVuaXRzOjpkZWcsIHNwZWVkLCB2ZXg6OnZlbG9jaXR5VW5pdHM6OnBjdCk7CiAgICAgICAgTGVmdERyaXZlQi5zdGFydFJvdGF0ZUZvcigtZGlzdGFuY2UsIHZleDo6cm90YXRpb25Vbml0czo6ZGVnLCBzcGVlZCwgdmV4Ojp2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgICAgIFJpZ2h0RHJpdmVGLnN0YXJ0Um90YXRlRm9yKGRpc3RhbmNlLCB2ZXg6OnJvdGF0aW9uVW5pdHM6OmRlZywgc3BlZWQsIHZleDo6dmVsb2NpdHlVbml0czo6cGN0KTsKICAgICAgICBSaWdodERyaXZlQi5yb3RhdGVGb3IoZGlzdGFuY2UsIHZleDo6cm90YXRpb25Vbml0czo6ZGVnLCBzcGVlZCwgdmV4Ojp2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgfQp9Cgp2b2lkIHNsaWRlVXAoaW50IGRpc3RhbmNlLCBpbnQgc3BlZWQpewogICAgaWYoIXJlZCl7CiAgICAgICAgTGVmdERyaXZlRi5zdGFydFJvdGF0ZUZvcihkaXN0YW5jZSwgdmV4Ojpyb3RhdGlvblVuaXRzOjpkZWcsIHNwZWVkLCB2ZXg6OnZlbG9jaXR5VW5pdHM6OnBjdCk7CiAgICAgICAgTGVmdERyaXZlQi5zdGFydFJvdGF0ZUZvcigtZGlzdGFuY2UsIHZleDo6cm90YXRpb25Vbml0czo6ZGVnLCBzcGVlZCwgdmV4Ojp2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgICAgIFJpZ2h0RHJpdmVGLnN0YXJ0Um90YXRlRm9yKC1kaXN0YW5jZSwgdmV4Ojpyb3RhdGlvblVuaXRzOjpkZWcsIHNwZWVkLCB2ZXg6OnZlbG9jaXR5VW5pdHM6OnBjdCk7CiAgICAgICAgUmlnaHREcml2ZUIucm90YXRlRm9yKGRpc3RhbmNlLCB2ZXg6OnJvdGF0aW9uVW5pdHM6OmRlZywgc3BlZWQsIHZleDo6dmVsb2NpdHlVbml0czo6cGN0KTsKICAgIH1lbHNlewogICAgICAgIExlZnREcml2ZUYuc3RhcnRSb3RhdGVGb3IoLWRpc3RhbmNlLCB2ZXg6OnJvdGF0aW9uVW5pdHM6OmRlZywgc3BlZWQsIHZleDo6dmVsb2NpdHlVbml0czo6cGN0KTsKICAgICAgICBMZWZ0RHJpdmVCLnN0YXJ0Um90YXRlRm9yKGRpc3RhbmNlLCB2ZXg6OnJvdGF0aW9uVW5pdHM6OmRlZywgc3BlZWQsIHZleDo6dmVsb2NpdHlVbml0czo6cGN0KTsKICAgICAgICBSaWdodERyaXZlRi5zdGFydFJvdGF0ZUZvcihkaXN0YW5jZSwgdmV4Ojpyb3RhdGlvblVuaXRzOjpkZWcsIHNwZWVkLCB2ZXg6OnZlbG9jaXR5VW5pdHM6OnBjdCk7CiAgICAgICAgUmlnaHREcml2ZUIucm90YXRlRm9yKC1kaXN0YW5jZSwgdmV4Ojpyb3RhdGlvblVuaXRzOjpkZWcsIHNwZWVkLCB2ZXg6OnZlbG9jaXR5VW5pdHM6OnBjdCk7CiAgICB9Cn0KLy9FbmQgQXV0b25vbW91cyBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmludCBtYWluKCkgewogICAgCiAgICAvL1J1biB0aGUgcHJlLWF1dG9ub21vdXMgZnVuY3Rpb24uIAogICAgcHJlX2F1dG9uKCk7CiAgICAKICAgIC8vU2V0IHVwIGNhbGxiYWNrcyBmb3IgYXV0b25vbW91cyBhbmQgZHJpdmVyIGNvbnRyb2wgcGVyaW9kcy4KICAgIENvbXBldGl0aW9uLmF1dG9ub21vdXMoIGF1dG9ub21vdXMgKTsKICAgIENvbXBldGl0aW9uLmRyaXZlcmNvbnRyb2woIHVzZXJjb250cm9sICk7CgogICAgLy9QcmV2ZW50IG1haW4gZnJvbSBleGl0aW5nIHdpdGggYW4gaW5maW5pdGUgbG9vcC4KICAgIHdoaWxlKDEpIHsKICAgICAgdmV4Ojp0YXNrOjpzbGVlcCgxMDApOy8vU2xlZXAgdGhlIHRhc2sgZm9yIGEgc2hvcnQgYW1vdW50IG9mIHRpbWUgdG8gcHJldmVudCB3YXN0ZWQgcmVzb3VyY2VzLgogICAgfSAgICAKICAgICAgIAp9"},"device":{"slot":1,"type":"vexV5"},"language":{"name":"c++"},"components":[]}