-
Notifications
You must be signed in to change notification settings - Fork 3
/
GTA Drive.vex
1 lines (1 loc) · 20 KB
/
GTA Drive.vex
1
./___ThIsisATemPoRaRyFiLE___.json 000666 000000 000000 0000044754 13427670135 017205 0 ustar 00 000000 000000 13427670135 13427670135 {"title":"GTA Drive","description":"C++ Test program to drive the tank","version":"0.0.1","icon":"USER000x.bmp","competition":true,"files":{"robot-config.h":"dXNpbmcgbmFtZXNwYWNlIHZleDsKdmV4OjpicmFpbiBCcmFpbjsKdmV4Ojptb3RvciBNb3RvcjA0ZHIgKHZleDo6UE9SVDEsIHZleDo6Z2VhclNldHRpbmc6OnJhdGlvMThfMSx0cnVlKTsKdmV4Ojptb3RvciBNb3RvcjE2ZHIgKHZleDo6UE9SVDIsIHZleDo6Z2VhclNldHRpbmc6OnJhdGlvMThfMSx0cnVlKTsKdmV4Ojptb3RvciBNb3RvcjAxZGwgKHZleDo6UE9SVDksIHZleDo6Z2VhclNldHRpbmc6OnJhdGlvMThfMSxmYWxzZSk7CnZleDo6bW90b3IgTW90b3IxMWRsICh2ZXg6OlBPUlQxMCwgdmV4OjpnZWFyU2V0dGluZzo6cmF0aW8xOF8xLGZhbHNlKTsKdmV4Ojptb3RvciBNb3RvcjA1c3AgKHZleDo6UE9SVDExLCB2ZXg6OmdlYXJTZXR0aW5nOjpyYXRpbzZfMSxmYWxzZSk7CnZleDo6bW90b3IgTW90b3IwMmRyICh2ZXg6OlBPUlQxMiwgdmV4OjpnZWFyU2V0dGluZzo6cmF0aW8xOF8xLHRydWUpOwp2ZXg6Om1vdG9yIE1vdG9yMDNkbCAodmV4OjpQT1JUMjAsIHZleDo6Z2VhclNldHRpbmc6OnJhdGlvMThfMSxmYWxzZSk7CnZleDo6Y29udHJvbGxlciBDb250cm9sbGVyMTsKdmV4Ojpjb21wZXRpdGlvbiBDb21wZXRpdGlvbjs=","main.cpp":"I2luY2x1ZGUgInJvYm90LWNvbmZpZy5oIgoKLyogRGVmaW5lIGFkZGl0aW9uYWwgZGlnaXRhbCBvdXRwdXRzLgogKiBGb2xsb3cgdGhpcyBmb3JtYXQ6CiAqIAogKiB2ZXg6OmRpZ2l0YWxfb3V0IDx2YXIgbmFtZT4gPSB2ZXg6OmRpZ2l0YWxfb3V0KCBQT1JUICk7CiAqIAogKiBXaGVyZSBQT1JUIGlzIGEgQnJhaW4uVGhyZWVXaXJlUG9ydC5bbGV0dGVyXSA9IGh0dHBzOi8vd3d3LnJvYm90bWVzaC5jb20vZG9jcy92ZXh2NS1jcHAvaHRtbC9jbGFzc3ZleF8xXzF0cmlwb3J0Lmh0bWwKICogSWUgQnJhaW4uVGhyZWVXaXJlUG9ydC5BCiAqLwovL0NyZWF0ZXMgYSBjb21wZXRpdGlvbiBvYmplY3QgdGhhdCBhbGxvd3MgYWNjZXNzIHRvIENvbXBldGl0aW9uIG1ldGhvZHMuCi8qIENvbnRyb2xsZXIgc2NyZWVuIGxpbmVzLCBpZiAwLCBkbyBub3QgcHJpbnQgKi8KY29uc3QgaW50IEpPWVNUSUNLX0xJTkUgPSAxOwpjb25zdCBpbnQgTU9UT1JfTElORSA9IDI7CmNvbnN0IGludCBTUElOTkVSX0xJTkUgPSAzOwoKLy8gV2hldGhlciB0byBwcmludCBkcml2ZSBpbmZvIG9uIGNvbnRyb2xsZXIgc2NyZWVuCi8vIChBIGxvdCBvZiBwcmludGluZyBtYXkgc3RyYWluIHRoZSBjb21tdW5pY2F0aW9uIGxpbmssIHNvIHR1cm4gaXQgb2ZmIGluIGNvbXBldGl0aW9uLikKc3RhdGljIGJvb2wgcHJpbnRfaW5mbyA9IHRydWU7Cgp2b2lkIHRvZ2dsZV9wcmludF9pbmZvKCl7CiAgICBwcmludF9pbmZvID0gIXByaW50X2luZm87CiAgICBpZiAoIXByaW50X2luZm8pIHsKICAgICAgICAvLyB0dXJuZWQgb2ZmOyBjbGVhciBzdGFsZSBpbmZvCiAgICAgICAgaWYgKEpPWVNUSUNLX0xJTkUgPiAwKSBDb250cm9sbGVyMS5TY3JlZW4uY2xlYXJMaW5lKEpPWVNUSUNLX0xJTkUpOwogICAgICAgIGlmIChNT1RPUl9MSU5FID4gMCkgQ29udHJvbGxlcjEuU2NyZWVuLmNsZWFyTGluZShNT1RPUl9MSU5FKTsKICAgIH0KfQoKCi8vIERyaXZlIGNvZGUKbW90b3IgbG1vdG9yc1tdIHtNb3RvcjExZGwsIE1vdG9yMDFkbCwgTW90b3IwM2RsfTsKbW90b3Igcm1vdG9yc1tdIHtNb3RvcjA0ZHIsIE1vdG9yMTZkciwgTW90b3IwMmRyfTsKY29uc3QgaW50IE5VTV9NT1RPUlMgPSAzOyAvLyBwZXIgc2lkZQoKLyoqCiAqIFJldmVyc2luZyBvZiBtb3RvcnMuIElmIHJldmVyc2VkIGlzIHRydWUgdGhlbiBmcm9udCBhbmQgYmFjayBvZiB0aGUgcm9ib3QgYXJlIHJldmVyc2VkLgogKi8Kc3RhdGljIGJvb2wgcmV2ZXJzZWQgPSBmYWxzZTsgLy8gQXJlIGFsbCBtb3RvcnMgcmV2ZXJzZWQ/CgovLyBTdG9wcGluZyBtb2RlIGZvciB0aGUgbW90b3JzCi8vIDAgLSBjb2FzdCwgMSAtYnJha2UsIDIgLSBob2xkCnN0YXRpYyBpbnQgc3RvcHBpbmdfbW9kZV9udW0gPSAwOwpjb25zdCBjaGFyIHN0b3BwaW5nX21vZGVfY2hhcltdID0geydDJywgJ0InLCAnSCd9Owpjb25zdCBicmFrZVR5cGUgc3RvcHBpbmdfbW9kZVtdID0ge2JyYWtlVHlwZTo6Y29hc3QsIGJyYWtlVHlwZTo6YnJha2UsIGJyYWtlVHlwZTo6aG9sZH07CgovLyBDdXJyZW50IGxlZnQvcmlnaHQgbW90b3IgcG93ZXIKc3RhdGljIGRvdWJsZSBjdXJfbHAgPSAwLjsKc3RhdGljIGRvdWJsZSBjdXJfcnAgPSAwLjsKCnZvaWQgcHJpbnRfbW90b3JfbGluZSgpIHsKICAgIGlmIChwcmludF9pbmZvICYmIE1PVE9SX0xJTkUgPiAwKSB7CiAgICAgICAgICAgIC8vIFByaW50IG1vdG9yIHZhbHVlcyBmb3IgaW5mb3JtYXRpb24KICAgICAgICAgICAgQ29udHJvbGxlcjEuU2NyZWVuLnNldEN1cnNvcihNT1RPUl9MSU5FLCAxKTsKICAgICAgICAgICAgQ29udHJvbGxlcjEuU2NyZWVuLnByaW50KCJNOiAlYyAlYyAlMy4wZiUlICUzLjBmJSUgICAgICIsIChyZXZlcnNlZCA/ICdSJyA6ICdGJyksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcHBpbmdfbW9kZV9jaGFyW3N0b3BwaW5nX21vZGVfbnVtXSwgY3VyX2xwLCBjdXJfcnApOwogICAgICAgIH0KfQoKdm9pZCBzcGluX21vdG9ycyhkb3VibGUgbHAsIGRvdWJsZSBycCkgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fTU9UT1JTOyBpKyspIHsKICAgICAgICBsbW90b3JzW2ldLnNwaW4odmV4OjpkaXJlY3Rpb25UeXBlOjpmd2QsIGxwLCBwZXJjZW50VW5pdHM6OnBjdCk7CiAgICAgICAgcm1vdG9yc1tpXS5zcGluKHZleDo6ZGlyZWN0aW9uVHlwZTo6ZndkLCBycCwgcGVyY2VudFVuaXRzOjpwY3QpOwogICAgfQp9Cgp2b2lkIHNldF9zdG9wcGluZ19tb2RlX2Zvcl9tb3RvcnMoYnJha2VUeXBlIG1vZGUpIHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX01PVE9SUzsgaSsrKSB7CiAgICAgICAgbG1vdG9yc1tpXS5zZXRTdG9wcGluZyhtb2RlKTsKICAgICAgICBybW90b3JzW2ldLnNldFN0b3BwaW5nKG1vZGUpOwogICAgfQp9Cgp2b2lkIHJldmVyc2VfdG9nZ2xlKCkgewogICAgcmV2ZXJzZWQgPSAhcmV2ZXJzZWQ7CiAgICBzcGluX21vdG9ycygwLiwgMC4pOyAgLy8gbW9tZW50YXJpbHkgc2xvdyBkb3duIHRvIDAsIHNvIGFzIG5vdCBiZSB0b28gYWJydXB0IAogICAgcHJpbnRfbW90b3JfbGluZSgpOwogICAgQ29udHJvbGxlcjEucnVtYmxlKCIuPSIpOwp9Cgp2b2lkIHN0b3BwaW5nX21vZGVfdG9nZ2xlKCkgewogICAgKytzdG9wcGluZ19tb2RlX251bSAlPSAzOyAgLy8gc2FtZSBhcyBzdG9wcGluZ19tb2RlX251bSA9IChzdG9wcGluZ19tb2RlX251bSArIDEpICUgMzsKICAgIHNldF9zdG9wcGluZ19tb2RlX2Zvcl9tb3RvcnMoc3RvcHBpbmdfbW9kZVtzdG9wcGluZ19tb2RlX251bV0pOwogICAgcHJpbnRfbW90b3JfbGluZSgpOwogICAgQ29udHJvbGxlcjEucnVtYmxlKCIuLiIpOwp9CgovKioKICogU3RvcCBhbGwgd2hlZWwgbW90b3JzIAogKi8Kdm9pZCBzdG9wQWxsTW90b3JzKCkgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fTU9UT1JTOyBpKyspIHsKICAgICAgICBsbW90b3JzW2ldLnN0b3AoKTsKICAgICAgICBybW90b3JzW2ldLnN0b3AoKTsKICAgIH0KfQoKdm9pZCBzdG9wQWxsTW90b3JzKGJyYWtlVHlwZSBidCkgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fTU9UT1JTOyBpKyspIHsKICAgICAgICBsbW90b3JzW2ldLnN0b3AoYnQpOwogICAgICAgIHJtb3RvcnNbaV0uc3RvcChidCk7CiAgICB9Cn0KCnZvaWQgYWNjZWxlcmF0ZU1vdG9yKG1vdG9yIG0sIGRpcmVjdGlvblR5cGUgZGlyKSB7CiAgICBkb3VibGUgcHdyID0gKG0udmVsb2NpdHkodmVsb2NpdHlVbml0czo6cGN0KSk7CiAgICBpZihwd3IgPCAxMDApIHsKICAgICAgICBwd3IgKz0gMjA7CiAgICB9CiAgICBtLnNldFZlbG9jaXR5KHB3ciwgdmVsb2NpdHlVbml0czo6cGN0KTsKfQoKdm9pZCBhY2NlbGVyYXRlQWxsTW90b3JzKGJvb2wgbGVmdCwgZGlyZWN0aW9uVHlwZSBkaXIpIHsKICAgIGlmKGxlZnQpIHsKICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgMzsgaSsrKSB7CiAgICAgICAgICAgIGFjY2VsZXJhdGVNb3RvcihsbW90b3JzW2ldLCBkaXIpOwogICAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IDM7IGkrKykgewogICAgICAgICAgICBhY2NlbGVyYXRlTW90b3Iocm1vdG9yc1tpXSwgZGlyKTsKICAgICAgICB9CiAgICB9Cn0KCmRvdWJsZSBhdmVyYWdlUG93ZXIoYm9vbCBsZWZ0KXsKICAgIGRvdWJsZSBhdmcgPSAwLjA7CiAgICBpZihsZWZ0KSB7CiAgICAgICAgYXZnICs9ICggbG1vdG9yc1swXS5wb3dlcihwb3dlclVuaXRzOjp3YXR0KSArIGxtb3RvcnNbMV0ucG93ZXIocG93ZXJVbml0czo6d2F0dCkgKyBsbW90b3JzWzJdLnBvd2VyKHBvd2VyVW5pdHM6OndhdHQpICkgLyAzOwogICAgfSBlbHNlIHsKICAgICAgICBhdmcgKz0gKCBsbW90b3JzWzBdLnBvd2VyKHBvd2VyVW5pdHM6OndhdHQpICsgbG1vdG9yc1sxXS5wb3dlcihwb3dlclVuaXRzOjp3YXR0KSArIGxtb3RvcnNbMl0ucG93ZXIocG93ZXJVbml0czo6d2F0dCkgKSAvIDM7CiAgICB9CiAgICByZXR1cm4gYXZnOwp9Cgp2b2lkIEdUQWRyaXZlKCkgewogICAgYm9vbCBmd2QgPSBDb250cm9sbGVyMS5CdXR0b25VcC5wcmVzc2luZygpOwogICAgYm9vbCByZXYgPSBDb250cm9sbGVyMS5CdXR0b25Eb3duLnByZXNzaW5nKCk7CiAgICBib29sIGxlZnQgPSBDb250cm9sbGVyMS5CdXR0b25MZWZ0LnByZXNzaW5nKCk7CiAgICBib29sIHJpZ2h0ID0gQ29udHJvbGxlcjEuQnV0dG9uUmlnaHQucHJlc3NpbmcoKTsKICAgIGJvb2wgYnJha2UgPSBDb250cm9sbGVyMS5CdXR0b25SMS5wcmVzc2luZygpOwogICAgCiAgICBpZihmd2QpewogICAgICAgIGFjY2VsZXJhdGVBbGxNb3RvcnModHJ1ZSwgdmV4OjpkaXJlY3Rpb25UeXBlOjpmd2QpOwogICAgICAgIGFjY2VsZXJhdGVBbGxNb3RvcnMoZmFsc2UsIHZleDo6ZGlyZWN0aW9uVHlwZTo6ZndkKTsKICAgICAgICB2ZXg6OnRhc2s6OnNsZWVwKDEwKTsKICAgIH0KICAgIGlmKHJldil7CiAgICAgICAgYWNjZWxlcmF0ZUFsbE1vdG9ycyh0cnVlLCB2ZXg6OmRpcmVjdGlvblR5cGU6OmZ3ZCk7CiAgICAgICAgYWNjZWxlcmF0ZUFsbE1vdG9ycyhmYWxzZSwgdmV4OjpkaXJlY3Rpb25UeXBlOjpmd2QpOwogICAgICAgIHZleDo6dGFzazo6c2xlZXAoMTApOwogICAgfQogICAgaWYobGVmdCkgewogICAgICAgIGFjY2VsZXJhdGVBbGxNb3RvcnModHJ1ZSwgdmV4OjpkaXJlY3Rpb25UeXBlOjpyZXYpOwogICAgICAgIHZleDo6dGFzazo6c2xlZXAoMTApOwogICAgfQogICAgaWYocmlnaHQpIHsKICAgICAgICBhY2NlbGVyYXRlQWxsTW90b3JzKGZhbHNlLCB2ZXg6OmRpcmVjdGlvblR5cGU6OnJldik7CiAgICAgICAgdmV4Ojp0YXNrOjpzbGVlcCgxMCk7CiAgICB9CiAgIC8qIAogICAgZG91YmxlIGxwd3IgPSBhdmVyYWdlUG93ZXIodHJ1ZSk7CiAgICBkb3VibGUgcnB3ciA9IGF2ZXJhZ2VQb3dlcihmYWxzZSk7CiAgICBkb3VibGUgYXZlcmFnZV9wb3dlciA9IChscHdyICsgcnB3cikgLyAyOwogICAgCiAgICAvL0xldmVsaW5nIG91dCBhZnRlciBhIHR1cm4KICAgIGlmKCAoZndkIHx8IHJldikgJiYgKCFicmFrZSAmJiAhbGVmdCAmJiAhcmlnaHQgJiYgbHB3ciAhPSBycHdyKSkgewogICAgICAgIHNwaW5fbW90b3JzKGF2ZXJhZ2VfcG93ZXIsIGF2ZXJhZ2VfcG93ZXIpOwogICAgfSovCiAgICBpZihicmFrZSkgewogICAgICAgIHN0b3BBbGxNb3RvcnMoc3RvcHBpbmdfbW9kZVsxXSk7Ly9tYXkgc2tpZCBidXQgaG9wZWZ1bGx5IHBlcm1pdHMgZHJpZnRpbmcKICAgIH0KICAgIHNldF9zdG9wcGluZ19tb2RlX2Zvcl9tb3RvcnMoc3RvcHBpbmdfbW9kZVswXSk7Cn0KCi8qKgogKiBEZWFsIHdpdGggdGhlIHNwaW5uZXIgYXQgdGhlIGZyb250IG9mIHRoZSByb2JvdC4KICovCi8vIFNwaW5uZXIgc3RhdGVzIDAgLSBzdG9wcGVkOyAxIC0gZm9yd2FyZDsgMiAtIHN0b3BwZWQ7IDMgLSByZXZlcnNlZDsKLy8gU3RhdGVzIHN5Y2xlIDAtMS0yLTMtNC0wLS4uLiB3aXRoIGJ1dHRvbiBwcmVzcy4Kc3RhdGljIGludCBzcGlubmVyX3N0YXRlID0gMDsKc3RhdGljIGRvdWJsZSBzcGlubmVyX3JwbSA9IDUwMC47CmNvbnN0IGRvdWJsZSBzcGlubmVyX3JwbV9tdWx0ID0gMS4wNTsgCgp2b2lkIHByaW50X3NwaW4oKSB7CiAgICBpZiAoU1BJTk5FUl9MSU5FIDw9IDApIHJldHVybjsgIC8vIGRvIG5vdGhpbmcKICAgIENvbnRyb2xsZXIxLlNjcmVlbi5zZXRDdXJzb3IoU1BJTk5FUl9MSU5FLCAxKTsKICAgIENvbnRyb2xsZXIxLlNjcmVlbi5wcmludCgiUzogJXMgcnBtICU1LjBmICAgIiwgKHNwaW5uZXJfc3RhdGUgJSAyID09IDAgPyAiT0ZGIjogKHNwaW5uZXJfc3RhdGUgPT0gMSA/ICJGV0QiIDogIlJFViIpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwaW5uZXJfcnBtKTsgCn0KCnZvaWQgc2V0X3NwaW4oKSB7CiAgICBpZiAoc3Bpbm5lcl9zdGF0ZSAlIDIgPT0gMCkgeyAvLyBzdGF0ZXMgMCBhbmQgMgogICAgICAgIE1vdG9yMDVzcC5zdG9wKGJyYWtlVHlwZTo6Y29hc3QpOyAgICAgICAgCiAgICB9IGVsc2UgewogICAgICAgIE1vdG9yMDVzcC5zcGluKChzcGlubmVyX3N0YXRlID09IDEgPyBkaXJlY3Rpb25UeXBlOjpmd2QgOiBkaXJlY3Rpb25UeXBlOjpyZXYpLCBzcGlubmVyX3JwbSwgdmVsb2NpdHlVbml0czo6cnBtKTsvL2lmIGVxdWFsIHRvIDEsIHJvdGF0ZSBmd2QsIGVsc2Ugcm90YXRlIHJldgogICAgfQp9Cgp2b2lkIHNwaW5uZXJfdG9nZ2xlKCkgewogICAgKytzcGlubmVyX3N0YXRlICU9IDQ7ICAvLyBzYW1lIGFzIHNwaW5uZXJfc3RhdGUgPSAoc3Bpbm5lcl9zdGF0ZSArIDEpICUgNDsKICAgIHNldF9zcGluKCk7CiAgICBwcmludF9zcGluKCk7Cn0KCnZvaWQgc3Bpbm5lcl9ycG1fdXAoKSB7CiAgICBzcGlubmVyX3JwbSAqPSBzcGlubmVyX3JwbV9tdWx0OwogICAgc2V0X3NwaW4oKTsKICAgIHByaW50X3NwaW4oKTsKfQoKdm9pZCBzcGlubmVyX3JwbV9kb3duKCkgewogICAgc3Bpbm5lcl9ycG0gLz0gc3Bpbm5lcl9ycG1fbXVsdDsKICAgIHNldF9zcGluKCk7CiAgICBwcmludF9zcGluKCk7Cn0KCgovL0NPTVBFVElUSU9OIFNUVUZGCgovKioKICogQXV0b25vbW91cyBtZXRob2RzCiAqLwppbnQgYXV0b25TdGF0ZSA9IDE7Ci8qKgogKiBtb3ZlU3RyYWlnaHQgd2l0aCBwb3dlciwgZm9yd2FyZCBkaXJlY3Rpb24gYW5kIHRpbWUKICoKICogQHBhcmFtIHBvd2VyPTEwMCAgUG93ZXIKICogQHBhcmFtIGZ3ZD10cnVlICAgR28gZm9yd2FyZD8KICogQHBhcmFtIHRpbWU9MTAwMCAgRGVsYXkgaW4gbXMgYmVmb3JlIHN0b3BwaW5nCiAqLwp2b2lkIG1vdmVTdHJhaWdodCAoaW50IHBvd2VyPTEwMCwgYm9vbCBmd2Q9dHJ1ZSwgaW50IHRpbWU9MTAwMCkgewogICAgdmV4OjpkaXJlY3Rpb25UeXBlIGRpciA9IGZ3ZCA/IHZleDo6ZGlyZWN0aW9uVHlwZTo6ZndkIDogdmV4OjpkaXJlY3Rpb25UeXBlOjpyZXY7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9NT1RPUlM7IGkrKykgewogICAgICAgIGxtb3RvcnNbaV0uc3BpbihkaXIsIHBvd2VyLCBwZXJjZW50VW5pdHM6OnBjdCk7CiAgICAgICAgcm1vdG9yc1tpXS5zcGluKGRpciwgcG93ZXIsIHBlcmNlbnRVbml0czo6cGN0KTsKICAgIH0KICAgIAogICAgdGFzazo6c2xlZXAodGltZSk7CiAgICBzZXRfc3RvcHBpbmdfbW9kZV9mb3JfbW90b3JzKGhvbGQpOwogICAgc3RvcEFsbE1vdG9ycygpOwp9CgovKioKICogTW92ZSBmb3J3YXJkIGEgY2VydGFpbiBkaXN0YW5jZQogKiBAcGFyYW0gZGlzdGFuY2UgIERpc3RhbmNlIHRvIG1vdmUgaW4gbWV0ZXJzCiAqIEBwYXJhbSBmd2Q9dHJ1ZSAgTW92ZSBmb3J3YXJkIG9yIGJhY2t3YXJkcz8KICovCnZvaWQgbW92ZVN0cmFpZ2h0RGlzdGFuY2UoZG91YmxlIGRpc3RhbmNlLCBib29sIGZ3ZD10cnVlKSB7CiAgICAvLyBSb2JvdCBtb3ZlcyBhdCBhcHByb3hpbWF0ZWx5IDEuMyBtL3MKICAgIG1vdmVTdHJhaWdodCgxMDAsIGZ3ZCwgZGlzdGFuY2UgLyAxLjMgKiAxMDAwKTsKfQoKLyoKICogQXR0ZW1wdCB0byByb3RhdGUgYW4gYW5nbGUuIE5lZ2F0aXZlIGlzIGxlZnQsIAogKiBwb3NpdGl2ZSBpcyByaWdodC4gQW5nbGUgaXMgaW4gZGVncmVlcy4gTm90IDEwMCUgYWNjdXJhdGUuCiAqCiAqIEBwYXJhbSBhbmdsZSBBbmdsZSB0byByb3RhdGUgaW4gZGVncmVlcwogKi8Kdm9pZCByb3RhdGUoaW50IGFuZ2xlKSB7CiAgICAvKiBJZiB0dXJuaW5nIGxlZnQsIHJpZ2h0IGlzIGZvcndhcmQsIGxlZnQgYmFja3dhcmRzCiAgICAgKiBJZiB0dXJuaW5nIHJpZ2h0LCByaWdodCBpcyBiYWNrd2FyZHMsIGxlZnQgZm9yd2FyZHMgKi8KICAgIHZleDo6ZGlyZWN0aW9uVHlwZSBkaXJMID0gYW5nbGUgPCAwID8gdmV4OjpkaXJlY3Rpb25UeXBlOjpmd2QgOiB2ZXg6OmRpcmVjdGlvblR5cGU6OnJldjsKICAgIHZleDo6ZGlyZWN0aW9uVHlwZSBkaXJSID0gYW5nbGUgPiAwID8gdmV4OjpkaXJlY3Rpb25UeXBlOjpmd2QgOiB2ZXg6OmRpcmVjdGlvblR5cGU6OnJldjsKICAgIAogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fTU9UT1JTOyBpKyspIHsKICAgICAgICBsbW90b3JzW2ldLnNwaW4oZGlyTCwgMTAwLCBwZXJjZW50VW5pdHM6OnBjdCk7CiAgICAgICAgcm1vdG9yc1tpXS5zcGluKGRpclIsIDEwMCwgcGVyY2VudFVuaXRzOjpwY3QpOwogICAgfQogICAgLyogQ2FsY3VsYXRlIHRpbWUgdG8gcm90YXRlIChSb3RhdGVzIGF0IGFyb3VuZCAwLjM2IGRlZy9tcykgKi8KICAgIGludCBhYnNBbmcgPSBhbmdsZSA8IDAgPyAtYW5nbGUgOiBhbmdsZTsKICAgIGludCB0aW1lID0gYWJzQW5nIC8gOSAqIDI1OwogICAgCiAgICAvKiBTbGlnaHQgYWRqdXN0bWVudHMgZm9yIGxvd2VyIGFuZ2xlcyAqLwogICAgaWYgKGFic0FuZyA8IDgwKSB0aW1lICs9IDE1MDAgLyBhYnNBbmc7CiAgICBlbHNlIGlmIChhYnNBbmcgPCAxOTApIHRpbWUgKz0gMjMwMCAvIGFic0FuZzsKICAgIGVsc2UgdGltZSAtPSA3MDAgLyBhYnNBbmc7CiAgICAKICAgIHRhc2s6OnNsZWVwKHRpbWUpOwogICAgc3RvcEFsbE1vdG9ycygpOwp9CgovKioKICogQXV0b246IGdvIGJhY2t3YXJkcyB0byBoaXQgdGhlIGZsYWcsIHRoZW4gZm9yd2FyZAogKiBhbmQgZ28gdG8gcGxhdGZvcm0gCiAqLwp2b2lkIGF1dG9uMTIoYm9vbCBpc1JlZCkgewogICAgbW92ZVN0cmFpZ2h0RGlzdGFuY2UoMS42NSk7CiAgICB0YXNrOjpzbGVlcCgxMDApOwogICAgbW92ZVN0cmFpZ2h0RGlzdGFuY2UoMi4zLCBmYWxzZSk7CiAgICB0YXNrOjpzbGVlcCgxMDApOwogICAgcm90YXRlKGlzUmVkID8gLTkwIDogOTApOwogICAgbW92ZVN0cmFpZ2h0RGlzdGFuY2UoMS44KTsKfQoKLyoqCiAqIEF1dG9uOiBSb3RhdGUgMzUgZGVncmVlcyB0aGVuIGdvIGZvcndhcmQgb250bwogKiB0aGUgcGxhdGZvcm0gCiAqLwp2b2lkIGF1dG9uMzQoYm9vbCBpc1JlZCkgewogICAgcm90YXRlKGlzUmVkID8gLTkwIDogOTApOwogICAgbW92ZVN0cmFpZ2h0RGlzdGFuY2UoMC42KTsKICAgIHJvdGF0ZShpc1JlZCA/IDkwIDogLTkwKTsKICAgIG1vdmVTdHJhaWdodERpc3RhbmNlKDEuMyk7Cn0KCi8qKgogKiBEaXNwbGF5IHRoZSBjdXJyZW50IGF1dG9uIHN0YXRlCiAqLwp2b2lkIGRpc3BsYXlDdXJyZW50QXV0b25TdGF0ZSgpIHsKICAgIHN3aXRjaCAoYXV0b25TdGF0ZSkgewogICAgICAgIGNhc2UgMToKICAgICAgICAgICAgQnJhaW4uU2NyZWVuLnNldEN1cnNvcigxLDApOwogICAgICAgICAgICBCcmFpbi5TY3JlZW4uY2xlYXJMaW5lKCk7CiAgICAgICAgICAgIEJyYWluLlNjcmVlbi5wcmludCgiQTEgLSBSZWQgZmxhZyIpOwogICAgICAgICAgICAKICAgICAgICAgICAgQnJhaW4uU2NyZWVuLnNldEN1cnNvcigyLDApOwogICAgICAgICAgICBCcmFpbi5TY3JlZW4uY2xlYXJMaW5lKCk7CiAgICAgICAgICAgIEJyYWluLlNjcmVlbi5wcmludCgiRmFjZSByb2JvdCBzcGlubmVyIHRvd2FyZHMgZmxhZyIpOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgIEJyYWluLlNjcmVlbi5zZXRDdXJzb3IoMSwwKTsKICAgICAgICAgICAgQnJhaW4uU2NyZWVuLmNsZWFyTGluZSgpOwogICAgICAgICAgICBCcmFpbi5TY3JlZW4ucHJpbnQoIkEyIC0gQmx1ZSBmbGFnIik7CiAgICAgICAgICAgIAogICAgICAgICAgICBCcmFpbi5TY3JlZW4uc2V0Q3Vyc29yKDIsMCk7CiAgICAgICAgICAgIEJyYWluLlNjcmVlbi5jbGVhckxpbmUoKTsKICAgICAgICAgICAgQnJhaW4uU2NyZWVuLnByaW50KCJGYWNlIHJvYm90IHNwaW5uZXIgdG93YXJkcyBmcm9tIGZsYWciKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAzOgogICAgICAgICAgICBCcmFpbi5TY3JlZW4uc2V0Q3Vyc29yKDEsMCk7CiAgICAgICAgICAgIEJyYWluLlNjcmVlbi5jbGVhckxpbmUoKTsKICAgICAgICAgICAgQnJhaW4uU2NyZWVuLnByaW50KCJBMyAtIFJlZCBwbGF0Zm9ybSIpOwogICAgICAgICAgICAKICAgICAgICAgICAgQnJhaW4uU2NyZWVuLnNldEN1cnNvcigyLDApOwogICAgICAgICAgICBCcmFpbi5TY3JlZW4uY2xlYXJMaW5lKCk7CiAgICAgICAgICAgIEJyYWluLlNjcmVlbi5wcmludCgiRmFjZSByb2JvdCBzcGlubmVyIHRvd2FyZHMgb3Bwb3NpdGUgc2lkZSIpOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgIEJyYWluLlNjcmVlbi5zZXRDdXJzb3IoMSwwKTsKICAgICAgICAgICAgQnJhaW4uU2NyZWVuLmNsZWFyTGluZSgpOwogICAgICAgICAgICBCcmFpbi5TY3JlZW4ucHJpbnQoIkE0IC0gQmx1ZSBwbGF0Zm9ybSIpOwogICAgICAgICAgICAKICAgICAgICAgICAgQnJhaW4uU2NyZWVuLnNldEN1cnNvcigyLDApOwogICAgICAgICAgICBCcmFpbi5TY3JlZW4uY2xlYXJMaW5lKCk7CiAgICAgICAgICAgIEJyYWluLlNjcmVlbi5wcmludCgiRmFjZSByb2JvdCBzcGlubmVyIHRvd2FyZHMgb3Bwb3NpdGUgc2lkZSIpOwogICAgICAgICAgICBicmVhazsKCQljYXNlIDU6CiAgICAgICAgICAgIEJyYWluLlNjcmVlbi5zZXRDdXJzb3IoMSwwKTsKICAgICAgICAgICAgQnJhaW4uU2NyZWVuLmNsZWFyTGluZSgpOwogICAgICAgICAgICBCcmFpbi5TY3JlZW4ucHJpbnQoIkE1IC0gQVVUT04gZGlzYWJsZWQiKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIEJyYWluLlNjcmVlbi5zZXRDdXJzb3IoMiwwKTsKICAgICAgICAgICAgQnJhaW4uU2NyZWVuLmNsZWFyTGluZSgpOwogICAgICAgICAgICBCcmFpbi5TY3JlZW4ucHJpbnQoIlJvYm90IHdpbGwgbm93IGRvIG5vdGhpbmciKTsKICAgIH0KICAgIEJyYWluLlNjcmVlbi5yZW5kZXIoKTsKfQoKLyoqCiAqIFJ1bnMgd2hlbiBzY3JlZW4gaXMgcHJlc3NlZC4gVG9nZ2xlcyB0aGUKICogYXV0b24gc3RhdGUgKi8Kdm9pZCBzY3JlZW5wcmVzc2VkKHZvaWQpIHsKICAgIGF1dG9uU3RhdGUgPSBhdXRvblN0YXRlICUgNSArIDE7CiAgICBkaXNwbGF5Q3VycmVudEF1dG9uU3RhdGUoKTsKICAgIAogICAgQnJhaW4uU2NyZWVuLnNldEN1cnNvcigzLDApOwogICAgQnJhaW4uU2NyZWVuLmNsZWFyTGluZSgpOwogICAgQnJhaW4uU2NyZWVuLnByaW50KCJQcmVzcyBzY3JlZW4gdG8gdG9nZ2xlIGF1dG9uIHN0YXRlIik7Cn0KCgp2b2lkIGF1dG9ub21vdXModm9pZCl7CiAgICBzd2l0Y2ggKGF1dG9uU3RhdGUpIHsKICAgICAgICBjYXNlIDE6IGF1dG9uMTIodHJ1ZSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDI6IGF1dG9uMTIoZmFsc2UpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAzOiBhdXRvbjM0KHRydWUpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSA0OiBhdXRvbjM0KGZhbHNlKTsKICAgICAgICAgICAgICAgIGJyZWFrOwoJCWNhc2UgNTogYnJlYWs7CiAgICB9Cn0KCgoKdm9pZCBwcmVfYXV0b24oKSB7CiAgICAvLyBTZXQgdXAgYWN0aW9uIGJ1dHRvbiBiaW5kaW5ncyB0byBzY29yaW5nIGZ1bmN0aW9ucwogICAgQ29udHJvbGxlcjEuQnV0dG9uWC5wcmVzc2VkKHNwaW5uZXJfdG9nZ2xlKTsgICAgICAgCiAgICBDb250cm9sbGVyMS5CdXR0b25BLnByZXNzZWQoKnJldmVyc2VfdG9nZ2xlKTsKICAgIENvbnRyb2xsZXIxLkJ1dHRvblkucHJlc3NlZCh0b2dnbGVfcHJpbnRfaW5mbyk7CiAgICBDb250cm9sbGVyMS5CdXR0b25CLnByZXNzZWQoc3RvcHBpbmdfbW9kZV90b2dnbGUpOwogICAgCiAgICAvL1NldCB1cCBhY3Rpb24gYnV0dG9uIGJpbmRpbmdzIGZvciBkcml2aW5nCiAgICAvL0NvbnRyb2xsZXIxLkJ1dHRvblVwLnByZXNzZWQoKkdUQWRyaXZlKCkpOwogICAgLy9Db250cm9sbGVyMS5CdXR0b25Eb3duLnByZXNzZWQoR1RBZHJpdmUoKSk7CiAgICAvL0NvbnRyb2xsZXIxLkJ1dHRvbkxlZnQucHJlc3NlZChHVEFkcml2ZSgpKTsKICAgIC8vQ29udHJvbGxlcjEuQnV0dG9uUmlnaHQucHJlc3NlZChHVEFkcml2ZSgpKTsKICAgIC8vQ29udHJvbGxlcjEuQnV0dG9uTDEucHJlc3NlZChHVEFkcml2ZSgpKTsKICAgIC8vQ29udHJvbGxlcjEuQnV0dG9uUjEucHJlc3NlZChHVEFkcml2ZSgpKTsKICAgIAogICAgLy9Db250cm9sbGVyMS5CdXR0b25MMi5wcmVzc2VkKGF1dG9ub21vdXMpOwogICAgLy8gU2V0IHVwIGluaXRpYWwgc2NyZWVuCiAgICBDb250cm9sbGVyMS5TY3JlZW4uY2xlYXJTY3JlZW4oKTsKICAgIHByaW50X21vdG9yX2xpbmUoKTsKICAgIHByaW50X3NwaW4oKTsKCiAgICAvKiBEaXNwbGF5IGluaXRpYWwgdGV4dCAqLwogICAgZGlzcGxheUN1cnJlbnRBdXRvblN0YXRlKCk7CiAgICBCcmFpbi5TY3JlZW4uc2V0Q3Vyc29yKDMsMCk7CiAgICBCcmFpbi5TY3JlZW4uY2xlYXJMaW5lKCk7CiAgICBCcmFpbi5TY3JlZW4ucHJpbnQoIlByZXNzIHNjcmVlbiB0byB0b2dnbGUgYXV0b24gc3RhdGUiKTsKfQoKdm9pZCB1c2VyX2NvbnRyb2wodm9pZCl7CiAgICB3aGlsZSh0cnVlKSB7CiAgICAgICAgLy8gRHJpdmUgY29kZQogICAgICAgIEdUQWRyaXZlKCk7CiAgICAgICAgdmV4Ojp0YXNrOjpzbGVlcCg1KTsgLy9TbGVlcCB0aGUgdGFzayBmb3IgYSBzaG9ydCBhbW91bnQgb2YgdGltZSB0byBwcmV2ZW50IHdhc3RlZCByZXNvdXJjZXMuIAogICAgfQp9CgppbnQgbWFpbigpIHsKICAgIHByZV9hdXRvbigpOy8vc2V0dXAKCUNvbXBldGl0aW9uLmF1dG9ub21vdXMoYXV0b25vbW91cyk7CiAgICBDb21wZXRpdGlvbi5kcml2ZXJjb250cm9sKHVzZXJfY29udHJvbCk7Cn0KCg=="},"device":{"slot":3,"type":"vexV5"},"language":{"name":"vc++"},"components":[{"name":"Controller1","class":"vex::controller","left":769,"top":49,"type":"controller"},{"name":"Motor05sp","class":"vex::motor","port":"11","left":389,"top":0,"type":"motor","data":{"gears":600,"reversed":false}},{"name":"Motor03dl","class":"vex::motor","port":"20","left":36,"top":204,"type":"motor","data":{"gears":200,"reversed":false}},{"name":"Motor01dl","class":"vex::motor","port":"9","left":171,"top":288,"type":"motor","data":{"gears":200,"reversed":false}},{"name":"Motor02dr","class":"vex::motor","port":"12","left":405,"top":152,"type":"motor","data":{"gears":200,"reversed":true}},{"name":"Motor04dr","class":"vex::motor","port":"1","left":707,"top":362,"type":"motor","data":{"gears":200,"reversed":true}},{"name":"Motor16dr","class":"vex::motor","port":"2","left":537,"top":279,"type":"motor","data":{"gears":200,"reversed":true}},{"name":"Motor11dl","class":"vex::motor","port":"10","left":330,"top":379,"type":"motor","data":{"gears":200,"reversed":false}}]}