From a3126275b4b5140e86e001bbdbdac02f2979c917 Mon Sep 17 00:00:00 2001 From: "BADIM-PC\\Vadim" Date: Tue, 13 Feb 2018 19:25:39 +0300 Subject: [PATCH] fixed cursor rendering --- bin/assets/config.tic.dat | 2 +- config.tic | Bin 10847 -> 10869 bytes src/config.c | 28 ++++++- src/main.c | 163 ++++++++++++++++++++++---------------- src/studio.h | 5 +- 5 files changed, 126 insertions(+), 72 deletions(-) diff --git a/bin/assets/config.tic.dat b/bin/assets/config.tic.dat index f66a40b..6d9a994 100644 --- a/bin/assets/config.tic.dat +++ b/bin/assets/config.tic.dat @@ -1 +1 @@ -0x78, 0xda, 0xed, 0x59, 0x4d, 0x6c, 0x1b, 0xc7, 0x15, 0x1e, 0xf9, 0x27, 0x09, 0xd7, 0xaa, 0x47, 0x04, 0x8a, 0x20, 0x4d, 0xd3, 0x7a, 0xc1, 0xe6, 0x20, 0x03, 0x12, 0x4c, 0x8b, 0x8a, 0x1b, 0x08, 0x60, 0x50, 0x85, 0x5c, 0x8b, 0x6c, 0x24, 0x52, 0xe0, 0x8f, 0x5d, 0xc3, 0x40, 0x54, 0x46, 0xe6, 0xda, 0x04, 0x24, 0x32, 0x21, 0xa5, 0x18, 0x71, 0x21, 0x20, 0x30, 0x10, 0x80, 0x39, 0x29, 0x07, 0x17, 0x28, 0x4f, 0x4c, 0xe1, 0x4b, 0xa1, 0x5e, 0x7a, 0xd1, 0xa5, 0x3c, 0x08, 0xed, 0x31, 0x40, 0x8b, 0x22, 0x28, 0x7a, 0x08, 0x82, 0x5e, 0x8a, 0x5c, 0x57, 0x73, 0x32, 0x6a, 0x04, 0xf0, 0x74, 0x66, 0x76, 0x96, 0x9c, 0x9d, 0x7d, 0x43, 0xa9, 0x40, 0x92, 0x02, 0x05, 0x67, 0xf5, 0xf8, 0x76, 0xe6, 0xed, 0x7b, 0xf3, 0xf3, 0xbd, 0x37, 0xb3, 0x6f, 0x35, 0xf5, 0xe9, 0x73, 0xe8, 0x19, 0x65, 0x25, 0x91, 0x48, 0xec, 0x77, 0xbb, 0xdd, 0x7d, 0xce, 0x59, 0x75, 0x9f, 0x92, 0x21, 0x51, 0x7a, 0xec, 0x25, 0x12, 0xd4, 0xeb, 0x76, 0x89, 0x97, 0x78, 0x48, 0x3c, 0xba, 0x4f, 0x28, 0xd9, 0x27, 0x24, 0x20, 0xa1, 0x1f, 0x8f, 0xc7, 0x5b, 0xae, 0xeb, 0xb6, 0x38, 0x67, 0xd5, 0x16, 0xd3, 0x0b, 0x88, 0xeb, 0xc7, 0xe3, 0xd4, 0x73, 0x5d, 0xe2, 0xc5, 0x6b, 0x4c, 0xbf, 0x45, 0x3c, 0xe2, 0xd3, 0x31, 0x69, 0x21, 0x2a, 0xf4, 0xb3, 0xd9, 0x6c, 0xbf, 0xd7, 0xeb, 0xf5, 0x39, 0x67, 0xd5, 0x3e, 0x66, 0xc4, 0x74, 0xfb, 0x52, 0x3f, 0x9b, 0xa5, 0x5e, 0xaf, 0x47, 0xbc, 0xec, 0x23, 0xa6, 0xdf, 0x27, 0x1e, 0x66, 0x44, 0xfa, 0x4c, 0xbf, 0x2f, 0xf5, 0xab, 0xd5, 0xea, 0xd1, 0x60, 0x30, 0x38, 0xe2, 0x9c, 0x55, 0x05, 0x61, 0x84, 0x39, 0xe7, 0xfa, 0xd5, 0x2a, 0xf5, 0x06, 0x03, 0xe2, 0x55, 0x0f, 0x99, 0xfe, 0x11, 0xb3, 0x79, 0x44, 0x08, 0x62, 0xc4, 0xf9, 0xa7, 0x07, 0x07, 0xd6, 0x01, 0x2f, 0x4b, 0x8f, 0x0f, 0x0e, 0x52, 0xa9, 0x83, 0xa5, 0x54, 0xea, 0x31, 0xaf, 0xb2, 0x9f, 0xa5, 0x64, 0x2a, 0x75, 0x36, 0x90, 0x8b, 0x76, 0x26, 0x17, 0xcf, 0x45, 0xe4, 0x8f, 0xa5, 0xbe, 0xe4, 0xac, 0x1e, 0x92, 0x2f, 0x49, 0xfb, 0x4b, 0x52, 0x7f, 0x69, 0xa4, 0xff, 0x87, 0xc1, 0xe0, 0xc2, 0xe0, 0xf6, 0xe1, 0x60, 0x70, 0x78, 0xdb, 0xa7, 0x6a, 0x55, 0x70, 0xd6, 0x72, 0x7b, 0xbd, 0x5a, 0x3d, 0xff, 0x4b, 0xd7, 0x7d, 0xce, 0x8d, 0xd7, 0x5c, 0xb7, 0xf6, 0xa2, 0xab, 0x72, 0x76, 0xf7, 0xe2, 0x4c, 0x3c, 0x3e, 0xf5, 0x61, 0xb7, 0xfb, 0x42, 0xf7, 0xe1, 0x6c, 0x57, 0xd0, 0xec, 0xc3, 0x6e, 0x70, 0xcf, 0xee, 0x66, 0xed, 0x44, 0xe2, 0xcc, 0x27, 0xbd, 0x5e, 0xac, 0xf7, 0x28, 0xdf, 0x13, 0x94, 0xcf, 0xb2, 0x55, 0xe6, 0xfc, 0x51, 0xef, 0x11, 0xfb, 0xfd, 0x59, 0x36, 0x7b, 0x4e, 0xe0, 0xcd, 0xb1, 0x17, 0xd7, 0xbf, 0xc5, 0xfd, 0x15, 0xe6, 0x07, 0x14, 0x11, 0xbe, 0xb6, 0xcf, 0xe8, 0x3e, 0xa2, 0x0c, 0xfb, 0xe3, 0x7d, 0x86, 0x7f, 0x57, 0x12, 0xf7, 0x07, 0x44, 0x8e, 0x3d, 0x4a, 0x3d, 0x4f, 0xe0, 0xcd, 0xb1, 0x77, 0x9f, 0x30, 0xce, 0x2f, 0xd7, 0xbd, 0xc4, 0xfc, 0x60, 0xa8, 0xdf, 0x22, 0x84, 0x61, 0x2f, 0xa8, 0xe5, 0x12, 0x2a, 0xfc, 0x20, 0x3e, 0xd2, 0x17, 0x78, 0x73, 0xec, 0x9f, 0x3e, 0x7d, 0xda, 0xef, 0xf5, 0xfb, 0xfc, 0xbe, 0xc8, 0xfc, 0x60, 0xa8, 0xdf, 0x27, 0x84, 0x61, 0x4f, 0x9e, 0x32, 0xea, 0xf7, 0x08, 0x15, 0x7e, 0x90, 0x1d, 0xe9, 0x0b, 0xac, 0x39, 0xf6, 0x03, 0xce, 0xbf, 0x16, 0xf7, 0x1b, 0xcc, 0x0f, 0x86, 0xfa, 0x47, 0x88, 0x32, 0xec, 0x8f, 0x8f, 0x18, 0xfe, 0x03, 0x49, 0xdc, 0x1f, 0x02, 0x7d, 0xc4, 0x8a, 0xc9, 0x07, 0x78, 0xbb, 0x2a, 0xd7, 0x7d, 0x20, 0x2c, 0x8f, 0xfa, 0x40, 0x48, 0x0e, 0xf8, 0x40, 0x20, 0x37, 0xf9, 0x00, 0x6f, 0xe7, 0x72, 0x93, 0x0f, 0xf0, 0x76, 0x2e, 0x37, 0xf9, 0x00, 0x6f, 0xe7, 0x72, 0x93, 0x0f, 0xf0, 0x76, 0x30, 0x7e, 0x45, 0x71, 0x5b, 0x2d, 0xfa, 0x44, 0x8f, 0x5f, 0xca, 0xf1, 0x6c, 0x71, 0x4c, 0x19, 0x3d, 0x61, 0x84, 0xd0, 0x4c, 0x9c, 0xfd, 0xc5, 0x11, 0xd3, 0x9d, 0x91, 0x14, 0x2a, 0xac, 0x7f, 0xfe, 0xc3, 0x5c, 0x95, 0x3f, 0x12, 0xd0, 0x54, 0x40, 0x6f, 0x57, 0x3d, 0xef, 0xf0, 0xeb, 0xaf, 0xbc, 0xc3, 0x81, 0x4f, 0xbc, 0xae, 0x16, 0x34, 0x29, 0xdf, 0x6a, 0x19, 0xc5, 0x2f, 0xe7, 0x4f, 0x68, 0x34, 0x7e, 0x11, 0x8f, 0xd9, 0x63, 0x16, 0xbb, 0xc2, 0x07, 0xf4, 0xf8, 0x0d, 0x60, 0x0e, 0xb0, 0x17, 0x00, 0x73, 0x7f, 0xe0, 0x7e, 0x21, 0xb0, 0x1f, 0x62, 0x2d, 0xb1, 0x9f, 0xf2, 0xfd, 0x41, 0xf6, 0xff, 0x46, 0xca, 0xf3, 0x3a, 0xf7, 0xff, 0x35, 0x24, 0x5e, 0x57, 0xcb, 0x99, 0xcf, 0x2e, 0x4d, 0x40, 0x9a, 0x94, 0x49, 0x99, 0x14, 0x73, 0xa1, 0x0a, 0x21, 0x85, 0xcb, 0xc2, 0x4f, 0x29, 0x4e, 0xa6, 0xc2, 0x65, 0x94, 0xe2, 0x10, 0x0f, 0xc9, 0x59, 0x1b, 0xc6, 0x9c, 0xb3, 0x0a, 0xbb, 0xa1, 0x9a, 0x7d, 0x26, 0x65, 0x42, 0x71, 0x23, 0x19, 0x0e, 0xeb, 0xfb, 0x6a, 0x88, 0xb0, 0x1f, 0x4c, 0x7c, 0xae, 0x19, 0x40, 0x64, 0xdc, 0xfc, 0xa4, 0x3c, 0x20, 0xcd, 0xfc, 0xa8, 0x0d, 0x1b, 0x6c, 0x61, 0xde, 0x3f, 0x16, 0xe3, 0xe7, 0x5c, 0xd7, 0x1f, 0xf6, 0x41, 0x11, 0x2c, 0x53, 0xfb, 0xc2, 0xe6, 0xf1, 0x12, 0x7a, 0x32, 0x54, 0x04, 0x4b, 0x1b, 0xd0, 0x04, 0x47, 0x2c, 0x62, 0x97, 0xb2, 0xd6, 0x80, 0x22, 0xfd, 0x50, 0xd9, 0x37, 0x0d, 0xee, 0xc3, 0x16, 0x04, 0x5e, 0x04, 0x4b, 0x3b, 0x3e, 0xc6, 0x61, 0xb9, 0x1c, 0x14, 0x5f, 0x1f, 0x62, 0xb6, 0x4f, 0x49, 0xf0, 0x2c, 0x8a, 0xe8, 0x53, 0xa5, 0x1f, 0xdd, 0x3f, 0x46, 0xfd, 0x22, 0x70, 0xfc, 0x6a, 0xff, 0x92, 0x81, 0xf3, 0x27, 0x06, 0xfd, 0x51, 0xbb, 0x0f, 0x4e, 0x44, 0xae, 0xac, 0x39, 0xb4, 0xfe, 0xba, 0x3c, 0x82, 0xaf, 0x82, 0x8d, 0x00, 0x87, 0x98, 0xb1, 0x87, 0x7c, 0x20, 0xa4, 0x07, 0xf8, 0x0e, 0x51, 0xe6, 0x0f, 0xc6, 0xaf, 0xf4, 0x5b, 0x4c, 0xfd, 0xc8, 0x32, 0xcd, 0x5f, 0x10, 0xf5, 0xb9, 0x8e, 0xbf, 0x2f, 0x1b, 0x71, 0x58, 0xdf, 0x84, 0x4f, 0xd8, 0xff, 0x28, 0x35, 0xe3, 0x6f, 0xf2, 0xaf, 0x90, 0x1c, 0x98, 0xbf, 0x68, 0x27, 0x58, 0xc1, 0x51, 0x75, 0xbf, 0xf0, 0xdc, 0xf4, 0xf9, 0x89, 0xe7, 0xc7, 0xfa, 0x3f, 0x1e, 0x82, 0x4c, 0x01, 0xff, 0x16, 0x36, 0xb9, 0x6f, 0x63, 0xe9, 0xe3, 0xfa, 0xfa, 0xe9, 0xa4, 0xdb, 0x27, 0x72, 0x6c, 0x62, 0x9f, 0xc4, 0x91, 0xfd, 0x4f, 0xd8, 0xc7, 0xf2, 0x19, 0x02, 0x8d, 0x7f, 0x7c, 0x7c, 0x87, 0xd6, 0x9f, 0x9a, 0xe3, 0x23, 0xac, 0x8f, 0xc7, 0xe8, 0x47, 0xd7, 0x8f, 0x06, 0xfb, 0x1f, 0x85, 0xfc, 0x03, 0x47, 0x17, 0x01, 0xc2, 0xc7, 0x34, 0x7e, 0x5d, 0x86, 0xa3, 0xe7, 0x07, 0xc6, 0xa3, 0x35, 0xa4, 0x04, 0xc6, 0x5f, 0x9d, 0x67, 0x38, 0x7e, 0xb1, 0x4f, 0xea, 0x38, 0x75, 0xfc, 0x95, 0xbd, 0x45, 0xc7, 0x8f, 0x68, 0xe7, 0x0b, 0x89, 0x1e, 0x4f, 0x5a, 0xec, 0x63, 0xf0, 0x4c, 0x18, 0x9e, 0x3f, 0x18, 0xd8, 0xde, 0x49, 0xf4, 0x5c, 0x34, 0x9e, 0x11, 0x14, 0xc3, 0xfb, 0xc7, 0x09, 0x3a, 0x7c, 0xef, 0xf6, 0xf7, 0x6f, 0xc0, 0x7f, 0x35, 0x1f, 0x80, 0xf4, 0xc5, 0x32, 0xe1, 0x68, 0xff, 0x48, 0xda, 0x34, 0xd9, 0x1f, 0xfa, 0x20, 0x51, 0xfc, 0x28, 0x34, 0x00, 0xec, 0xaf, 0xbd, 0xe4, 0x04, 0xc3, 0xfb, 0x27, 0x96, 0x71, 0x84, 0xb4, 0x18, 0xa5, 0xc0, 0x1e, 0x14, 0x99, 0x20, 0x1a, 0x9d, 0x81, 0xd0, 0xf8, 0xd5, 0x8d, 0x1e, 0x43, 0xf6, 0xd5, 0xfd, 0x11, 0xc0, 0x57, 0x25, 0x04, 0xcc, 0x3f, 0x38, 0x1b, 0x45, 0xfc, 0x63, 0x40, 0x3e, 0x6e, 0xfc, 0x5a, 0x0c, 0x43, 0x67, 0xc8, 0xc9, 0x7b, 0x80, 0x86, 0x0f, 0x31, 0x9c, 0x01, 0xc0, 0xfe, 0xab, 0xe2, 0x0f, 0xc6, 0xbf, 0x8e, 0x1d, 0x30, 0xff, 0xa0, 0x6f, 0x93, 0x7f, 0x0c, 0xc7, 0x4e, 0x40, 0xf5, 0xf0, 0x1e, 0x40, 0xa0, 0xf5, 0xf5, 0xd7, 0x25, 0xf0, 0x33, 0x53, 0xff, 0x04, 0xf0, 0x9f, 0xc8, 0x1e, 0x40, 0x01, 0xff, 0xc1, 0x4a, 0x1c, 0xd3, 0x68, 0xfc, 0x46, 0x08, 0x8a, 0x7f, 0x6a, 0x88, 0x7f, 0xe4, 0xbf, 0x00, 0x13, 0x32, 0x49, 0x55, 0x26, 0x65, 0x52, 0x26, 0xe5, 0x1b, 0x2e, 0xfa, 0xbe, 0x84, 0xff, 0xcf, 0xf2, 0x7f, 0xa2, 0xcd, 0x91, 0x7c, 0xc3, 0xf9, 0xbf, 0xd4, 0x13, 0xe7, 0x02, 0x3e, 0xe1, 0x5d, 0x6b, 0xcc, 0x58, 0x29, 0xc5, 0xa7, 0xc7, 0xeb, 0xbf, 0xcc, 0xff, 0xc5, 0xf9, 0x86, 0x0d, 0xef, 0x07, 0x38, 0xfc, 0x0e, 0x0a, 0xe5, 0x0f, 0x41, 0x5e, 0x8c, 0x4d, 0xf9, 0x3f, 0x92, 0xf9, 0x3f, 0x64, 0x9f, 0xc8, 0xf7, 0xaa, 0x31, 0xf9, 0x3f, 0x56, 0xfa, 0x81, 0xf2, 0xcb, 0x40, 0x8e, 0x4d, 0xf9, 0xbf, 0xb6, 0x06, 0x51, 0x7d, 0x1c, 0xe2, 0xb0, 0x1c, 0xce, 0xff, 0x43, 0x6b, 0x8e, 0x4f, 0xc0, 0x04, 0xc2, 0xf7, 0x14, 0xf9, 0x7f, 0xb0, 0xa6, 0x90, 0x0f, 0x9c, 0x9c, 0xff, 0xa3, 0xe1, 0xfa, 0x83, 0xf1, 0x7b, 0x8a, 0xfc, 0x1f, 0xcb, 0xcb, 0xc7, 0x22, 0xfa, 0xee, 0x87, 0x25, 0x2e, 0x18, 0xc1, 0xf9, 0x5d, 0x28, 0xbc, 0x28, 0xac, 0x3f, 0xea, 0xc3, 0x8c, 0xbf, 0xc9, 0xbf, 0x54, 0x39, 0x46, 0x86, 0xfe, 0x09, 0x56, 0x70, 0xd4, 0xde, 0x0d, 0x95, 0xb9, 0x45, 0xe7, 0x87, 0x43, 0xf1, 0x6f, 0xf4, 0x6f, 0x49, 0xd0, 0xfe, 0x85, 0xe5, 0x7b, 0x29, 0x06, 0xf2, 0x34, 0xfd, 0xd5, 0x8f, 0x02, 0xe3, 0xa3, 0x64, 0x94, 0xfb, 0x47, 0xf5, 0xfd, 0xb8, 0x15, 0x72, 0x12, 0x95, 0x13, 0x6d, 0x7d, 0xa1, 0xf8, 0x55, 0xd7, 0x1e, 0x23, 0x33, 0xfe, 0x60, 0xfe, 0x17, 0xd1, 0xc7, 0xe0, 0xfa, 0x13, 0x43, 0xfc, 0xea, 0xeb, 0x0b, 0xe6, 0xef, 0x63, 0xc6, 0x1f, 0x92, 0x91, 0x31, 0xfa, 0x32, 0x77, 0xd2, 0xcf, 0x1f, 0x55, 0x8f, 0x80, 0xf8, 0x68, 0xb6, 0x31, 0xf4, 0x7d, 0x71, 0x14, 0x7b, 0xa6, 0xf7, 0x7f, 0x64, 0x78, 0xff, 0xff, 0xae, 0xf3, 0xff, 0xc8, 0xf8, 0x0c, 0x7b, 0x4e, 0x24, 0xc7, 0x46, 0x3e, 0x21, 0xe0, 0xfb, 0x81, 0xc8, 0x9d, 0xa4, 0x1c, 0xdc, 0x1f, 0x85, 0xbe, 0xec, 0x86, 0x02, 0x13, 0x18, 0x63, 0x7f, 0xf4, 0x8d, 0x18, 0x4b, 0x7d, 0xe0, 0xa3, 0x77, 0xf0, 0x5d, 0xc1, 0x74, 0xbe, 0xca, 0xf1, 0x21, 0xe5, 0x2c, 0x32, 0x8e, 0x1f, 0xfc, 0x07, 0x80, 0xec, 0x97, 0x00, 0x6b, 0x45, 0x54, 0x43, 0x3e, 0xa9, 0x18, 0xf9, 0x4d, 0x38, 0xd4, 0xc7, 0xd8, 0x0d, 0x80, 0xc0, 0xf9, 0x7f, 0xe0, 0xbf, 0x50, 0xfe, 0x3f, 0x76, 0xfc, 0xca, 0xfc, 0x09, 0xc2, 0x60, 0x82, 0xae, 0xe3, 0x47, 0x4e, 0xc4, 0x1f, 0x1b, 0xf4, 0x0d, 0xae, 0x24, 0xf3, 0x7b, 0x28, 0x77, 0x8e, 0x60, 0x47, 0xa0, 0x33, 0x6e, 0xbc, 0x7f, 0x0c, 0xe5, 0x04, 0xc6, 0x5f, 0xdd, 0x03, 0xa0, 0x77, 0xd5, 0xe1, 0xba, 0x04, 0x7e, 0x62, 0xb0, 0x0f, 0xf9, 0xcf, 0xe8, 0x1b, 0xbb, 0x32, 0x97, 0xff, 0x49, 0xfe, 0x7f, 0x6e, 0x06, 0xa1, 0x17, 0x62, 0xd6, 0x85, 0xe9, 0xef, 0x5d, 0xc4, 0x2f, 0xfd, 0xe0, 0xe5, 0x1f, 0xbe, 0xf2, 0xa3, 0x1f, 0x5f, 0x3a, 0xff, 0xbb, 0x33, 0xa8, 0x92, 0x73, 0xd6, 0x9c, 0xb4, 0xf5, 0x2b, 0x2b, 0x96, 0xa9, 0x96, 0xca, 0xc5, 0x52, 0xda, 0x8a, 0xb1, 0xfb, 0x58, 0x79, 0xbd, 0x94, 0xaf, 0x38, 0xe9, 0xf9, 0xab, 0x73, 0xac, 0xb2, 0x9e, 0xff, 0x85, 0xb3, 0xba, 0xb1, 0xee, 0x94, 0xae, 0x3b, 0x99, 0x4a, 0x7a, 0xa7, 0xbd, 0x5b, 0x67, 0xad, 0x7b, 0x73, 0x16, 0xd3, 0x29, 0x66, 0x1d, 0x5b, 0xaa, 0xbc, 0xb9, 0x62, 0xf3, 0x92, 0x16, 0x2a, 0xe5, 0x4a, 0x29, 0x5f, 0x58, 0x61, 0x95, 0x45, 0x5e, 0x2b, 0x54, 0xd7, 0xde, 0x74, 0x4a, 0xac, 0x96, 0xe2, 0xb5, 0xb7, 0x9c, 0x5b, 0x37, 0x8b, 0xa5, 0x6c, 0xfa, 0x1a, 0xaf, 0x2c, 0xaf, 0xe7, 0x7d, 0x2d, 0xa1, 0x96, 0x29, 0xae, 0xad, 0x39, 0x85, 0x4a, 0xfa, 0xa7, 0xc2, 0x46, 0x7e, 0xa5, 0x20, 0x44, 0x49, 0x5e, 0xbb, 0xb1, 0x5c, 0xf2, 0x1f, 0x7c, 0x8d, 0xd7, 0x8a, 0x6c, 0xdc, 0xac, 0x9e, 0x16, 0xa2, 0xb2, 0xb3, 0xca, 0x06, 0x66, 0xa7, 0x85, 0x75, 0x7f, 0x1a, 0xb6, 0x6f, 0xbd, 0x9c, 0x5b, 0xce, 0x16, 0x6f, 0xda, 0xa1, 0x31, 0xaf, 0x2c, 0xaf, 0x39, 0xeb, 0xcb, 0x59, 0x39, 0xea, 0x4a, 0xb1, 0x9a, 0xc9, 0xb1, 0x7b, 0x51, 0x89, 0x2d, 0xaf, 0xae, 0xe7, 0x96, 0xd3, 0x57, 0x5f, 0x17, 0x66, 0xf7, 0x7c, 0x8d, 0x3d, 0xcb, 0xca, 0xe4, 0x9c, 0xcc, 0x5b, 0x1b, 0x05, 0xe7, 0xe6, 0xc6, 0x0d, 0xa7, 0x54, 0xce, 0x17, 0x0b, 0x69, 0xb7, 0xb6, 0xd5, 0xa9, 0x5b, 0x85, 0xe2, 0x46, 0xb9, 0x58, 0x2d, 0x64, 0x65, 0x75, 0x25, 0x7f, 0x7d, 0x63, 0xd5, 0x29, 0xac, 0x54, 0x72, 0xe9, 0x85, 0xa4, 0x3d, 0x3f, 0x6f, 0x37, 0x9a, 0x76, 0xa7, 0xbe, 0xd9, 0x6a, 0xde, 0xe9, 0x08, 0x59, 0x39, 0xb3, 0xbc, 0xea, 0xa4, 0x17, 0x2c, 0x8b, 0x89, 0x76, 0x3b, 0x75, 0xfb, 0x46, 0xbd, 0xbd, 0xd3, 0xd8, 0xac, 0x6d, 0xd9, 0xe5, 0x0f, 0x9a, 0x9b, 0xf7, 0xda, 0xad, 0x66, 0xe3, 0x41, 0x6d, 0xa7, 0xd1, 0x6a, 0x72, 0x79, 0xc3, 0xb5, 0x6b, 0xef, 0xd7, 0x1a, 0xb5, 0x77, 0xb6, 0xea, 0x56, 0xb5, 0xec, 0x6c, 0xdc, 0x28, 0xdf, 0x2a, 0x64, 0x64, 0x3f, 0x5c, 0xde, 0xb9, 0xd7, 0xba, 0x6f, 0xf3, 0x36, 0x7b, 0xab, 0xf6, 0x4e, 0x7d, 0xcb, 0xe6, 0x6d, 0xf7, 0xef, 0xd5, 0x9b, 0x76, 0x25, 0x9f, 0xb1, 0xef, 0xb4, 0x5b, 0xef, 0x76, 0xec, 0x6b, 0xc9, 0xdc, 0x03, 0xdb, 0x6d, 0xd7, 0xb6, 0xeb, 0x1d, 0xab, 0x9c, 0x2b, 0xde, 0xdc, 0x08, 0x9b, 0x30, 0x16, 0xcb, 0xdd, 0x6d, 0x6e, 0xf2, 0x71, 0x70, 0x5b, 0xb3, 0x97, 0xad, 0xd8, 0xe6, 0x56, 0x87, 0xb3, 0xad, 0x16, 0x1f, 0xab, 0xe8, 0x2e, 0x9d, 0xa8, 0xdc, 0x6b, 0x74, 0x6c, 0xf6, 0xd7, 0xf9, 0xa0, 0xb3, 0x53, 0xdf, 0xb6, 0xd9, 0x24, 0xdd, 0xc6, 0xdd, 0xdd, 0xb6, 0x18, 0xbf, 0xbd, 0x59, 0x6b, 0xef, 0xb4, 0x1b, 0x77, 0xee, 0xd6, 0x13, 0x81, 0x56, 0xa7, 0xf1, 0xa0, 0x9e, 0x7e, 0xb7, 0xdd, 0x68, 0xee, 0xcc, 0x0a, 0x03, 0x73, 0xc9, 0xb9, 0xf9, 0x6b, 0xcc, 0xa6, 0xda, 0x34, 0xbb, 0xb0, 0x98, 0x9c, 0xe7, 0x0f, 0x5e, 0xbe, 0x72, 0x65, 0x61, 0x6e, 0xf6, 0x6a, 0xea, 0x1a, 0x7b, 0x84, 0xdd, 0x5e, 0xb6, 0xea, 0xcd, 0x3b, 0xb1, 0x3f, 0x21, 0x74, 0x5e, 0x5c, 0x38, 0xc6, 0xaf, 0x0b, 0xe2, 0x12, 0xf7, 0xe8, 0x34, 0xd7, 0x19, 0x11, 0x0a, 0x67, 0xf9, 0x75, 0x8e, 0x5d, 0xcf, 0xb3, 0x6b, 0xfa, 0xec, 0x74, 0x0c, 0x85, 0xaf, 0x69, 0xed, 0x52, 0x2d, 0x9c, 0x65, 0x26, 0x3e, 0x44, 0x17, 0xd1, 0xc5, 0xa9, 0x8b, 0x53, 0xa7, 0xeb, 0x53, 0xbf, 0xce, 0x59, 0xc9, 0xe0, 0x98, 0xf5, 0x5f, 0x74, 0x38, 0x9f, 0x59, 0xa8, 0xbc, 0xff, 0x9b, 0x3f, 0x7e, 0xf9, 0xec, 0xf8, 0x2f, 0xbf, 0xff, 0xf8, 0xae, 0xf3, 0x93, 0xa9, 0xa0, 0x1e, 0xf0, 0x69, 0xa6, 0xf3, 0xfd, 0xe9, 0x57, 0xb2, 0xaf, 0x2e, 0x26, 0x17, 0xb7, 0x0b, 0x3f, 0x2f, 0x7c, 0xb4, 0x9a, 0x5c, 0xac, 0xbf, 0xfa, 0xb7, 0xeb, 0xb9, 0xdd, 0xf7, 0x6a, 0xb7, 0xf6, 0xfe, 0xfa, 0xf9, 0xde, 0xdc, 0x47, 0xbf, 0xfe, 0xed, 0xf6, 0xc1, 0xdc, 0xe7, 0x07, 0xbd, 0xed, 0x3f, 0x7f, 0xf6, 0xc5, 0xdf, 0xdf, 0xfe, 0xa7, 0xf7, 0x8f, 0xff, 0x00, 0x2b, 0x8b, 0x25, 0x6c, \ No newline at end of file +0x78, 0xda, 0xed, 0x59, 0x5d, 0x68, 0x5b, 0xc9, 0x15, 0x1e, 0xe7, 0x67, 0xbb, 0xba, 0x71, 0x33, 0x16, 0x94, 0xa5, 0x3f, 0xdb, 0xe6, 0xa2, 0xee, 0x83, 0x03, 0x36, 0x51, 0x2c, 0x37, 0x2d, 0x06, 0x95, 0x2a, 0xd2, 0x8d, 0xa5, 0xae, 0x2d, 0x19, 0xfd, 0xc4, 0x0d, 0x81, 0x75, 0xb5, 0x8e, 0x6e, 0x22, 0xb0, 0xa5, 0xad, 0x64, 0x6f, 0xd8, 0x14, 0xc3, 0x12, 0x58, 0x50, 0x9f, 0xdc, 0x87, 0x14, 0xaa, 0x27, 0x6d, 0xc9, 0x9b, 0xfb, 0xd2, 0x17, 0xbf, 0x54, 0x50, 0xd3, 0x3e, 0x2e, 0xb4, 0x94, 0xa5, 0xf4, 0xa1, 0x94, 0xbe, 0x94, 0xbe, 0x5e, 0xcf, 0x53, 0x68, 0x58, 0xc8, 0xf4, 0xcc, 0xdc, 0xb9, 0xd2, 0xdc, 0xb9, 0x33, 0xb2, 0x0b, 0xdb, 0x16, 0x8a, 0xe6, 0xe6, 0xf8, 0xcc, 0xcc, 0xb9, 0xe7, 0xcc, 0xcf, 0x77, 0xce, 0xcc, 0x3d, 0xca, 0xcc, 0xc7, 0xaf, 0xa1, 0x57, 0x14, 0x4a, 0x22, 0x91, 0x38, 0xec, 0xf5, 0x7a, 0x87, 0x8c, 0x43, 0xf3, 0x90, 0x92, 0x11, 0x51, 0x7a, 0xea, 0x25, 0x12, 0xd4, 0xeb, 0xf5, 0x88, 0x97, 0x78, 0x4a, 0x3c, 0x7a, 0x48, 0x28, 0x39, 0x24, 0x24, 0x20, 0xae, 0x1f, 0x8f, 0xc7, 0xdb, 0xae, 0xeb, 0xb6, 0x19, 0x87, 0x66, 0x1b, 0xf4, 0x02, 0x62, 0xfa, 0xf1, 0x38, 0xf5, 0x5c, 0x97, 0x78, 0xf1, 0x3a, 0xe8, 0xb7, 0x89, 0x47, 0x7c, 0x3a, 0x25, 0x6d, 0x44, 0xb9, 0x7e, 0x2e, 0x97, 0x1b, 0xf4, 0xfb, 0xfd, 0x01, 0xe3, 0xd0, 0x1c, 0x60, 0x20, 0xd0, 0x1d, 0x08, 0xfd, 0x5c, 0x8e, 0x7a, 0xfd, 0x3e, 0xf1, 0x72, 0xcf, 0x40, 0x7f, 0x40, 0x3c, 0x0c, 0x44, 0x06, 0xa0, 0x3f, 0x10, 0xfa, 0xb5, 0x5a, 0xed, 0x64, 0x38, 0x1c, 0x9e, 0x30, 0x0e, 0x4d, 0x4e, 0x18, 0x61, 0xc6, 0x99, 0x7e, 0xad, 0x46, 0xbd, 0xe1, 0x90, 0x78, 0xb5, 0x63, 0xd0, 0x3f, 0x01, 0x9b, 0x27, 0x84, 0x20, 0x20, 0xc6, 0x3f, 0x3e, 0x3a, 0xb2, 0x8e, 0x58, 0x59, 0x79, 0x7e, 0x74, 0x94, 0x4a, 0x1d, 0xad, 0xa4, 0x52, 0xcf, 0x59, 0x13, 0xfe, 0xac, 0x24, 0x53, 0xa9, 0x8b, 0x81, 0x9c, 0xf7, 0x83, 0x9c, 0xbf, 0x17, 0x91, 0x3f, 0x17, 0xfa, 0x82, 0x43, 0x3b, 0x24, 0x5f, 0x11, 0xf6, 0x57, 0x84, 0xfe, 0xca, 0x58, 0xff, 0x57, 0xc3, 0xe1, 0x95, 0xe1, 0xfd, 0xe3, 0xe1, 0xf0, 0xf8, 0xbe, 0x4f, 0xb5, 0x1a, 0xe7, 0xd0, 0x73, 0x7f, 0xa3, 0x56, 0xbb, 0xfc, 0x43, 0xd7, 0x7d, 0xcd, 0x8d, 0xd7, 0x5d, 0xb7, 0xfe, 0x86, 0x2b, 0x73, 0xa8, 0xbd, 0x31, 0x17, 0x8f, 0xcf, 0x7c, 0xd8, 0xeb, 0xbd, 0xde, 0x7b, 0x3a, 0xdf, 0xe3, 0x34, 0xff, 0xb4, 0x17, 0xd4, 0xa1, 0x36, 0x6f, 0x27, 0x12, 0x17, 0x7e, 0xda, 0xef, 0xc7, 0xfa, 0xcf, 0x0a, 0x7d, 0x4e, 0x85, 0x1c, 0xec, 0x32, 0xe3, 0xcf, 0xfa, 0xcf, 0xe0, 0xef, 0xf7, 0x72, 0xb9, 0x4b, 0x1c, 0x6f, 0x86, 0x3d, 0x7f, 0xfe, 0xc9, 0xeb, 0x37, 0xc0, 0x0f, 0x28, 0x22, 0x6c, 0x6f, 0x5f, 0xd1, 0x43, 0x44, 0x01, 0xfb, 0xd3, 0x43, 0xc0, 0xbf, 0x27, 0x88, 0xf9, 0x03, 0x22, 0xa7, 0x1e, 0xa5, 0x9e, 0xc7, 0xf1, 0x66, 0xd8, 0xbb, 0x2f, 0x80, 0xb3, 0xc7, 0x75, 0xaf, 0x81, 0x1f, 0x8c, 0xf4, 0xdb, 0x84, 0x00, 0xf6, 0x9c, 0xda, 0x2e, 0xa1, 0xdc, 0x0f, 0xe2, 0x63, 0x7d, 0x8e, 0x37, 0xc3, 0xfe, 0xe5, 0xcb, 0x97, 0x83, 0xfe, 0x60, 0xc0, 0xea, 0x25, 0xf0, 0x83, 0x91, 0xfe, 0x80, 0x10, 0xc0, 0x9e, 0xbc, 0x04, 0x1a, 0xf4, 0x09, 0xe5, 0x7e, 0x90, 0x1b, 0xeb, 0x73, 0xac, 0x19, 0xf6, 0x43, 0xc6, 0x3f, 0xe3, 0xf5, 0x2d, 0xf0, 0x83, 0x91, 0xfe, 0x09, 0xa2, 0x80, 0xfd, 0xe9, 0x09, 0xe0, 0x3f, 0x14, 0xc4, 0xfc, 0x21, 0xd0, 0x47, 0x50, 0x4c, 0x3e, 0xc0, 0xfa, 0x65, 0xb9, 0xea, 0x03, 0x61, 0x79, 0xd4, 0x07, 0x42, 0x72, 0x8d, 0x0f, 0x04, 0x72, 0x93, 0x0f, 0xb0, 0x7e, 0x26, 0x37, 0xf9, 0x00, 0xeb, 0x67, 0x72, 0x93, 0x0f, 0xb0, 0x7e, 0x26, 0x37, 0xf9, 0x00, 0xeb, 0xd7, 0xc6, 0x2f, 0x2f, 0x6e, 0xbb, 0x4d, 0x5f, 0xa8, 0xf1, 0x4b, 0x19, 0x9e, 0x6d, 0x86, 0x29, 0xd0, 0x0b, 0x20, 0x84, 0xe6, 0xe2, 0xf0, 0x2f, 0x8e, 0x40, 0x77, 0x4e, 0x50, 0xa8, 0xc0, 0xf8, 0xec, 0x0f, 0xb8, 0x2a, 0x7b, 0x25, 0xa0, 0x99, 0x80, 0xde, 0xa9, 0x79, 0xde, 0xf1, 0x67, 0xff, 0xf0, 0x8e, 0x87, 0x3e, 0xb1, 0xb6, 0x5c, 0xd0, 0xb4, 0xfc, 0x47, 0xcb, 0x38, 0x7e, 0x19, 0x7f, 0x41, 0xa3, 0xf1, 0x8b, 0x58, 0xcc, 0x9e, 0x42, 0xec, 0x72, 0x1f, 0x50, 0xe3, 0x37, 0x80, 0x39, 0xc0, 0x9e, 0x03, 0xcc, 0xfc, 0x81, 0xf9, 0x05, 0xc7, 0x7e, 0x84, 0xb5, 0xc0, 0x7e, 0xc6, 0xf7, 0x07, 0x31, 0xfe, 0x77, 0x53, 0x9e, 0xd7, 0x7d, 0xfc, 0xf7, 0x11, 0xb1, 0xb6, 0x5c, 0x2e, 0x7c, 0x72, 0x6d, 0x0a, 0xd2, 0xb4, 0x4c, 0xcb, 0xb4, 0x98, 0x0b, 0x95, 0x08, 0x49, 0x5c, 0x14, 0x76, 0x4b, 0x31, 0x32, 0x15, 0x26, 0xa3, 0x14, 0x87, 0x78, 0x48, 0x0e, 0x7d, 0x18, 0x33, 0x0e, 0x0d, 0xa8, 0x50, 0xc5, 0x3e, 0x48, 0x41, 0xc8, 0x2b, 0x82, 0xe1, 0xb0, 0xbe, 0xaf, 0x86, 0x08, 0xfc, 0xc1, 0xc4, 0xe7, 0x8a, 0x01, 0x44, 0x26, 0xad, 0x4f, 0xc8, 0x03, 0x52, 0xcc, 0x8f, 0xfb, 0xb0, 0xc1, 0x16, 0x66, 0xe3, 0x63, 0x3e, 0x7f, 0xc6, 0x55, 0xfd, 0xd1, 0x18, 0x14, 0xe9, 0x65, 0xf2, 0x58, 0xd8, 0x3c, 0x5f, 0x42, 0xcf, 0x86, 0x8a, 0x60, 0x61, 0x43, 0xb7, 0xc0, 0x31, 0x8b, 0xd8, 0xa5, 0xd0, 0x1b, 0x50, 0x64, 0x1c, 0x2a, 0xc6, 0xa6, 0x41, 0x3d, 0x6c, 0x81, 0xe3, 0x45, 0xb0, 0xb0, 0xe3, 0x63, 0x1c, 0x96, 0x8b, 0x49, 0xb1, 0xfd, 0x21, 0x66, 0xfb, 0x94, 0x04, 0xef, 0xa2, 0x88, 0x3e, 0x95, 0xc6, 0x51, 0xfd, 0x63, 0x3c, 0x2e, 0xd2, 0xce, 0x5f, 0x1e, 0x5f, 0x30, 0xed, 0xfa, 0x89, 0x41, 0x7f, 0xdc, 0xef, 0x83, 0x13, 0x91, 0x4b, 0x7b, 0xae, 0xdb, 0x7f, 0x55, 0x1e, 0xc1, 0x57, 0xc2, 0x86, 0x83, 0x43, 0xcc, 0xd8, 0xeb, 0x7c, 0x20, 0xa4, 0xa7, 0xf1, 0x1d, 0x22, 0xad, 0x5f, 0x1b, 0xbf, 0xc2, 0x6f, 0x31, 0xf5, 0x23, 0xcb, 0xb4, 0x7e, 0x4e, 0xd4, 0xe7, 0x2a, 0xfe, 0xbe, 0x6c, 0xcc, 0xf5, 0xfa, 0x26, 0x7c, 0xc2, 0xfe, 0x47, 0xa9, 0x19, 0x7f, 0x93, 0x7f, 0x85, 0xe4, 0x9a, 0xf5, 0xf3, 0x7e, 0x82, 0x25, 0x1c, 0x65, 0xf7, 0x0b, 0xaf, 0x4d, 0x5d, 0x1f, 0x7f, 0x7f, 0xa2, 0xff, 0xe3, 0x11, 0xc8, 0x54, 0xe3, 0xdf, 0xdc, 0x26, 0xf3, 0x6d, 0x2c, 0x7c, 0x5c, 0xdd, 0x3f, 0x95, 0x54, 0xfb, 0x44, 0xcc, 0x8d, 0x9f, 0x93, 0x38, 0x72, 0xfe, 0x71, 0xfb, 0x58, 0xbc, 0x43, 0x74, 0xf3, 0x9f, 0x1c, 0xdf, 0xa1, 0xfd, 0xa7, 0xe6, 0xf8, 0x08, 0xeb, 0xe3, 0x09, 0xfa, 0xd1, 0xfd, 0xa3, 0xc1, 0xf9, 0x47, 0x75, 0xfe, 0x81, 0xa3, 0x9b, 0xa0, 0xc3, 0xc7, 0x34, 0x7f, 0x55, 0x86, 0xa3, 0xf7, 0x07, 0xc6, 0xe3, 0x3d, 0xa4, 0x44, 0x8f, 0xbf, 0xbc, 0xce, 0x70, 0xfc, 0x62, 0x9f, 0xe4, 0x79, 0xaa, 0xf8, 0x4b, 0x67, 0x8b, 0x8a, 0x1f, 0x51, 0xee, 0x17, 0x12, 0xbd, 0x9e, 0x94, 0xd8, 0xc7, 0xda, 0x3b, 0x61, 0x74, 0xff, 0x60, 0xcd, 0xf1, 0x4e, 0xa2, 0xf7, 0xa2, 0xf1, 0x8e, 0xa0, 0x58, 0x7f, 0x7e, 0x9c, 0xa1, 0xc3, 0xce, 0x6e, 0xff, 0xfc, 0xd6, 0xf8, 0xaf, 0xe2, 0x03, 0x3a, 0x7d, 0xbe, 0x4d, 0x38, 0x3a, 0x3e, 0x12, 0x36, 0x4d, 0xf6, 0x47, 0x3e, 0x48, 0x24, 0x3f, 0x0a, 0x4d, 0x00, 0xfb, 0x7b, 0x2f, 0x38, 0xc1, 0xfa, 0xf3, 0x13, 0x8b, 0x38, 0x42, 0x4a, 0x8c, 0x52, 0xcd, 0x19, 0x14, 0x59, 0x20, 0x1a, 0xdf, 0x81, 0xba, 0xf9, 0xcb, 0x07, 0x3d, 0xd6, 0xd9, 0x97, 0xcf, 0x47, 0x0d, 0xbe, 0x32, 0x21, 0xcd, 0xfa, 0x83, 0xbb, 0x91, 0xc7, 0x3f, 0xd6, 0xc8, 0x27, 0xcd, 0x5f, 0x89, 0x61, 0xdd, 0x1d, 0x72, 0xf6, 0x19, 0xa0, 0xe0, 0x43, 0x0c, 0x77, 0x80, 0xe6, 0xfc, 0x95, 0xf1, 0xd7, 0xc6, 0xbf, 0x8a, 0x9d, 0x66, 0xfd, 0xc1, 0xd8, 0x26, 0xff, 0x18, 0xcd, 0x9d, 0x68, 0xd5, 0xc3, 0x67, 0x00, 0xd1, 0xed, 0xaf, 0xbf, 0x2f, 0x81, 0x9f, 0x99, 0xc6, 0x27, 0x1a, 0xff, 0x89, 0x9c, 0x01, 0x54, 0xe3, 0x3f, 0x58, 0x8a, 0x63, 0x1a, 0x8d, 0xdf, 0x08, 0xe9, 0xe2, 0x9f, 0x1a, 0xe2, 0x1f, 0xf9, 0x1f, 0xc0, 0x84, 0x4c, 0x53, 0x95, 0x69, 0x99, 0x96, 0x69, 0xf9, 0x9c, 0x8b, 0x7a, 0x2e, 0xe1, 0xff, 0xb3, 0xfc, 0x9f, 0x28, 0x6b, 0x24, 0x9f, 0x73, 0xfe, 0x2f, 0xf4, 0xf8, 0xbd, 0x80, 0xcf, 0xf8, 0xd6, 0x9a, 0x30, 0x57, 0x4a, 0xf1, 0xf9, 0xf1, 0xfa, 0x37, 0xf3, 0x7f, 0x7e, 0xbf, 0x61, 0xc3, 0xf7, 0x01, 0x0e, 0x7f, 0x83, 0xea, 0xf2, 0x87, 0x20, 0x2f, 0xc6, 0xa6, 0xfc, 0x1f, 0x89, 0xfc, 0x5f, 0x67, 0x9f, 0x88, 0xef, 0xaa, 0x09, 0xf9, 0x3f, 0x96, 0xc6, 0xd1, 0xe5, 0x97, 0x81, 0x1c, 0x9b, 0xf2, 0x7f, 0x65, 0x0f, 0xa2, 0xfa, 0x38, 0xc4, 0xf5, 0x72, 0x7d, 0xfe, 0x1f, 0xda, 0x73, 0x7c, 0x06, 0x26, 0x3a, 0x7c, 0xcf, 0x91, 0xff, 0x07, 0x7b, 0xaa, 0xf3, 0x81, 0xb3, 0xf3, 0x7f, 0x34, 0xda, 0x7f, 0x6d, 0xfc, 0x9e, 0x23, 0xff, 0xc7, 0xe2, 0xf1, 0xb1, 0x88, 0x7e, 0xfb, 0x61, 0x81, 0x0b, 0x46, 0xfa, 0xfc, 0x2e, 0x14, 0x5e, 0x54, 0xaf, 0x3f, 0x1e, 0xc3, 0x8c, 0xbf, 0xc9, 0xbf, 0x64, 0x39, 0x46, 0x86, 0xf1, 0x09, 0x96, 0x70, 0x54, 0xbe, 0x0d, 0xa5, 0xb5, 0x45, 0xd7, 0x87, 0x43, 0xf1, 0x6f, 0xf4, 0x6f, 0x41, 0xba, 0xf3, 0x0b, 0x8b, 0xef, 0x52, 0xac, 0xc9, 0xd3, 0xd4, 0x4f, 0x3f, 0xaa, 0x99, 0x1f, 0x25, 0xe3, 0xdc, 0x3f, 0xaa, 0xef, 0xc7, 0x2d, 0x97, 0x93, 0xa8, 0x9c, 0x28, 0xfb, 0xab, 0x8b, 0x5f, 0x79, 0xef, 0x31, 0x32, 0xe3, 0xaf, 0xcd, 0xff, 0x22, 0xfa, 0x58, 0xbb, 0xff, 0xc4, 0x10, 0xbf, 0xea, 0xfe, 0x6a, 0xf3, 0xf7, 0x09, 0xf3, 0x0f, 0xc9, 0xc8, 0x04, 0x7d, 0x91, 0x3b, 0xa9, 0xf7, 0x8f, 0xac, 0x47, 0xb4, 0xf8, 0x28, 0xb6, 0xb1, 0xee, 0xf7, 0xc5, 0x71, 0xec, 0x99, 0xbe, 0xff, 0x91, 0xe1, 0xfb, 0xff, 0xbf, 0x9d, 0xff, 0x47, 0xe6, 0x67, 0x38, 0x73, 0x22, 0x39, 0x36, 0xf2, 0x09, 0x69, 0x7e, 0x3f, 0xe0, 0xb9, 0x93, 0x90, 0x6b, 0xcf, 0x47, 0xae, 0x2f, 0x86, 0xa1, 0x9a, 0x05, 0x4c, 0xb0, 0x3f, 0xfe, 0x8d, 0x18, 0x0b, 0x7d, 0xcd, 0x8f, 0xde, 0xc1, 0xef, 0x0a, 0xa6, 0xfb, 0x55, 0xcc, 0x0f, 0x49, 0x77, 0x91, 0x71, 0xfe, 0xda, 0xff, 0x00, 0x10, 0xe3, 0x12, 0xcd, 0x5e, 0x11, 0xd9, 0x90, 0x4f, 0x32, 0x46, 0x7e, 0x17, 0x0e, 0x8d, 0x31, 0xf1, 0x00, 0x20, 0xfa, 0xfc, 0x3f, 0xf0, 0x5f, 0x5d, 0xfe, 0x3f, 0x71, 0xfe, 0xd2, 0xfa, 0x09, 0xc2, 0xda, 0x04, 0x5d, 0xc5, 0x8f, 0x9c, 0x89, 0x3f, 0x36, 0xe8, 0x1b, 0x5c, 0x49, 0xe4, 0xf7, 0xba, 0xdc, 0x39, 0x82, 0x1d, 0xd1, 0xdd, 0x71, 0x93, 0xfd, 0x63, 0x24, 0x27, 0x7a, 0xfc, 0xe5, 0x33, 0x40, 0xf7, 0xad, 0x3a, 0xda, 0x97, 0xc0, 0x4f, 0x0c, 0xf6, 0x75, 0xfe, 0x33, 0xfe, 0x8d, 0x5d, 0x5a, 0xcb, 0xff, 0x24, 0xff, 0xbf, 0x34, 0x87, 0xd0, 0xeb, 0x31, 0xeb, 0xca, 0xec, 0x17, 0xaf, 0xe2, 0x2f, 0x7f, 0xe5, 0xab, 0x5f, 0x7b, 0xf3, 0xeb, 0xdf, 0xb8, 0x76, 0xf9, 0x37, 0x17, 0x50, 0x35, 0xef, 0xac, 0x3b, 0x69, 0xeb, 0xc7, 0x56, 0x2c, 0x5b, 0x2b, 0x57, 0x4a, 0xe5, 0xb4, 0x15, 0x83, 0x7a, 0x2c, 0x53, 0x2e, 0x97, 0x36, 0xd3, 0x8b, 0x37, 0x17, 0xa0, 0x9e, 0xcf, 0x14, 0x73, 0xa2, 0x5a, 0xb8, 0xed, 0x64, 0xd6, 0x45, 0x7d, 0xa3, 0xf0, 0x03, 0x67, 0x6d, 0x6b, 0xc3, 0x29, 0xdf, 0x71, 0xb2, 0xd5, 0xf4, 0x5e, 0x67, 0xbf, 0x01, 0xbd, 0x07, 0x0b, 0x16, 0x58, 0x2a, 0xe5, 0x1c, 0x5b, 0x18, 0xba, 0xbd, 0x6a, 0xb3, 0x92, 0xe6, 0x2a, 0x95, 0x6a, 0xb9, 0x50, 0x5c, 0x85, 0xc6, 0x32, 0x6b, 0x15, 0x6b, 0xeb, 0xb7, 0x9d, 0x32, 0xb4, 0x52, 0xac, 0xf5, 0xb6, 0x73, 0x6f, 0xb3, 0x54, 0xce, 0xa5, 0x6f, 0xb1, 0x46, 0x66, 0xa3, 0xe0, 0x6b, 0x71, 0xb5, 0x6c, 0x69, 0x7d, 0xdd, 0x29, 0x56, 0xd3, 0xdf, 0xe6, 0x36, 0x0a, 0xab, 0x45, 0x2e, 0x4a, 0xb2, 0xd6, 0xdd, 0x4c, 0xd9, 0x7f, 0xf1, 0x5b, 0xac, 0x55, 0x82, 0xd5, 0x40, 0x3b, 0xcd, 0x45, 0x15, 0x67, 0x0d, 0x26, 0x66, 0xa7, 0xb9, 0x75, 0x7f, 0x71, 0xb6, 0x6f, 0xbd, 0x92, 0xcf, 0xe4, 0x4a, 0x9b, 0x76, 0x68, 0xce, 0xab, 0x99, 0x75, 0x67, 0x23, 0x93, 0x13, 0xb3, 0xae, 0x96, 0x6a, 0xd9, 0x3c, 0xd4, 0x79, 0x23, 0x96, 0x59, 0xdb, 0xc8, 0x67, 0xd2, 0x37, 0xbf, 0xc3, 0xcd, 0x1e, 0xf8, 0x1a, 0x07, 0x96, 0x95, 0xcd, 0x3b, 0xd9, 0xb7, 0xb7, 0x8a, 0xce, 0xe6, 0xd6, 0x5d, 0xa7, 0x5c, 0x29, 0x94, 0x8a, 0x69, 0xb7, 0xbe, 0xd3, 0x6d, 0x58, 0xc5, 0xd2, 0x56, 0xa5, 0x54, 0x83, 0x3d, 0xf3, 0x9b, 0xab, 0x85, 0x3b, 0x5b, 0x6b, 0x4e, 0x71, 0xb5, 0x9a, 0x4f, 0x2f, 0x25, 0xed, 0xc5, 0x45, 0xbb, 0xd9, 0xb2, 0xbb, 0x8d, 0xed, 0x76, 0xeb, 0x41, 0x97, 0xcb, 0x2a, 0xd9, 0xcc, 0x9a, 0x93, 0x5e, 0xb2, 0x2c, 0x10, 0xed, 0x77, 0x1b, 0xf6, 0xdd, 0x46, 0x67, 0xaf, 0xb9, 0x5d, 0xdf, 0xb1, 0x2b, 0x1f, 0xb4, 0xb6, 0x1f, 0x75, 0xda, 0xad, 0xe6, 0x93, 0xfa, 0x5e, 0xb3, 0xdd, 0x62, 0xf2, 0xa6, 0x6b, 0xd7, 0xdf, 0xaf, 0x37, 0xeb, 0xef, 0xee, 0x34, 0xac, 0x5a, 0xc5, 0xd9, 0xba, 0x5b, 0xb9, 0x57, 0xcc, 0x8a, 0x71, 0x98, 0xbc, 0xfb, 0xa8, 0xfd, 0xd8, 0x66, 0x7d, 0xf6, 0x4e, 0xfd, 0xdd, 0xc6, 0x8e, 0xcd, 0xfa, 0x1e, 0x3f, 0x6a, 0xb4, 0xec, 0x6a, 0x21, 0x6b, 0x3f, 0xe8, 0xb4, 0xdf, 0xeb, 0xda, 0xb7, 0x92, 0xf9, 0x27, 0xb6, 0xdb, 0xa9, 0xef, 0x36, 0xba, 0x56, 0x25, 0x5f, 0xda, 0xdc, 0x0a, 0x9b, 0x30, 0x16, 0xcb, 0xdd, 0x6f, 0x6d, 0xb3, 0x79, 0x30, 0x5b, 0xf3, 0xd7, 0xad, 0xd8, 0xf6, 0x4e, 0x97, 0xb1, 0x9d, 0x36, 0x9b, 0x2b, 0x1f, 0x2e, 0x9d, 0xa8, 0x3e, 0x6a, 0x76, 0x6d, 0xf8, 0xd7, 0xfd, 0xa0, 0xbb, 0xd7, 0xd8, 0xb5, 0x61, 0x91, 0x6e, 0xf3, 0xe1, 0x7e, 0x87, 0xcf, 0xdf, 0xde, 0xae, 0x77, 0xf6, 0x3a, 0xcd, 0x07, 0x0f, 0x1b, 0x89, 0x40, 0xab, 0xdb, 0x7c, 0xd2, 0x48, 0xbf, 0xd7, 0x69, 0xb6, 0xf6, 0xe6, 0xb9, 0x81, 0x85, 0xe4, 0xc2, 0xe2, 0x2d, 0xb0, 0x29, 0x77, 0xcd, 0x2f, 0x2d, 0x27, 0x17, 0xd9, 0x8b, 0xd7, 0x6f, 0xdc, 0x58, 0x5a, 0x98, 0xbf, 0x99, 0xba, 0x05, 0xaf, 0x40, 0xf5, 0xba, 0xd5, 0x68, 0x3d, 0x88, 0xfd, 0x16, 0xa1, 0xcb, 0xfc, 0xc1, 0x31, 0xf6, 0x5c, 0xe1, 0x0f, 0xaf, 0xa3, 0xf3, 0x3c, 0x17, 0x78, 0x80, 0x5c, 0x64, 0xcf, 0x25, 0x78, 0xbe, 0x00, 0xcf, 0xec, 0xc5, 0xd9, 0x18, 0x0a, 0x3f, 0xb3, 0xca, 0x23, 0x5b, 0xb8, 0x08, 0x26, 0x3e, 0x44, 0x57, 0xd1, 0xd5, 0x99, 0xab, 0x33, 0xe7, 0x1b, 0x53, 0x7d, 0x2e, 0x59, 0xc9, 0xe0, 0xf2, 0xf5, 0x3f, 0x7f, 0x18, 0x9f, 0x5b, 0xaa, 0xbe, 0xff, 0xf3, 0x5f, 0xff, 0xf5, 0xd5, 0xe9, 0xef, 0x7f, 0xf9, 0x93, 0x87, 0xce, 0x37, 0x67, 0x82, 0x76, 0xc0, 0x67, 0x41, 0xe7, 0x4b, 0xb3, 0x6f, 0xe6, 0xde, 0x5a, 0x4e, 0x2e, 0xef, 0x16, 0xbf, 0x5f, 0xfc, 0x68, 0x2d, 0xb9, 0xdc, 0x78, 0xeb, 0x8f, 0x77, 0xf2, 0xfb, 0x3f, 0xaa, 0xdf, 0x3b, 0xf8, 0xc3, 0xa7, 0x07, 0x0b, 0x1f, 0xfd, 0xec, 0x17, 0xbb, 0x47, 0x0b, 0x9f, 0x1e, 0xf5, 0x77, 0x7f, 0xf7, 0xc9, 0x5f, 0xfe, 0xf4, 0xce, 0xdf, 0xbc, 0x3f, 0xff, 0x0b, 0x69, 0xc0, 0x29, 0x75, \ No newline at end of file diff --git a/config.tic b/config.tic index 5d7a779bb2f693ec4c98ece387bf034f930b1d33..184f60d7bdfac817f260b5a2049971ef52e7520e 100644 GIT binary patch delta 67 zcmcZ~@-<{byPDZPCWa6XS6^3Ku4*n$=g^>F{~%i~P9U4pF(}AC+*a362gvqt^mBnS PJ)K+~eK#*x+rbO~nFA5x delta 45 zcmewwazA84yPCoZCWa6XS6^3Ku4*n$=g^>F{~%i~P9U2zI3UO~#C7vtwH?d=RR0ax diff --git a/src/config.c b/src/config.c index f09137f..7e0af5e 100644 --- a/src/config.c +++ b/src/config.c @@ -93,14 +93,36 @@ static void readCursorTheme(Config* config, lua_State* lua) if(lua_type(lua, -1) == LUA_TTABLE) { { - lua_getfield(lua, -1, "SPRITE"); + lua_getfield(lua, -1, "ARROW"); if(lua_isinteger(lua, -1)) { - config->data.theme.cursor.sprite = (s32)lua_tointeger(lua, -1); + config->data.theme.cursor.arrow = (s32)lua_tointeger(lua, -1); } - lua_pop(lua, 1); + lua_pop(lua, 1); + } + + { + lua_getfield(lua, -1, "HAND"); + + if(lua_isinteger(lua, -1)) + { + config->data.theme.cursor.hand = (s32)lua_tointeger(lua, -1); + } + + lua_pop(lua, 1); + } + + { + lua_getfield(lua, -1, "IBEAM"); + + if(lua_isinteger(lua, -1)) + { + config->data.theme.cursor.ibeam = (s32)lua_tointeger(lua, -1); + } + + lua_pop(lua, 1); } { diff --git a/src/main.c b/src/main.c index e020efe..8a21f14 100644 --- a/src/main.c +++ b/src/main.c @@ -48,6 +48,12 @@ static struct } part; } gamepad; + struct + { + SDL_Texture* texture; + const u8* src; + } mouse; + bool missedFrame; bool fullscreen; } platform; @@ -244,9 +250,9 @@ static void calcTextureRect(SDL_Rect* rect) // point.x /= Fingers; // point.y /= Fingers; -// studioImpl.gesture.pos = point; +// platform.gesture.pos = point; -// studioImpl.gesture.active = true; +// platform.gesture.active = true; // } // } @@ -709,97 +715,120 @@ static void renderGamepad() platform.gamepad.show = false; } -// static void blitCursor(const u8* in) -// { - // if(!studioImpl.mouse.texture) - // { - // studioImpl.mouse.texture = SDL_CreateTexture(studioImpl.renderer, STUDIO_PIXEL_FORMAT, SDL_TEXTUREACCESS_STREAMING, TIC_SPRITESIZE, TIC_SPRITESIZE); - // SDL_SetTextureBlendMode(studioImpl.mouse.texture, SDL_BLENDMODE_BLEND); - // } +static void blitCursor(const u8* in) +{ + if(!platform.mouse.texture) + { + platform.mouse.texture = SDL_CreateTexture(platform.renderer, STUDIO_PIXEL_FORMAT, SDL_TEXTUREACCESS_STREAMING, TIC_SPRITESIZE, TIC_SPRITESIZE); + SDL_SetTextureBlendMode(platform.mouse.texture, SDL_BLENDMODE_BLEND); + } - // if(studioImpl.mouse.src != in) - // { - // studioImpl.mouse.src = in; + if(platform.mouse.src != in) + { + platform.mouse.src = in; - // void* pixels = NULL; - // s32 pitch = 0; - // SDL_LockTexture(studioImpl.mouse.texture, NULL, &pixels, &pitch); + void* pixels = NULL; + s32 pitch = 0; + SDL_LockTexture(platform.mouse.texture, NULL, &pixels, &pitch); - // { - // const u8* end = in + sizeof(tic_tile); - // const u32* pal = tic_palette_blit(&studioImpl.studio.tic->ram.vram.palette); - // u32* out = pixels; + { + const u8* end = in + sizeof(tic_tile); + const u32* pal = tic_palette_blit(&platform.studio->tic->ram.vram.palette); + u32* out = pixels; - // while(in != end) - // { - // u8 low = *in & 0x0f; - // u8 hi = (*in & 0xf0) >> TIC_PALETTE_BPP; - // *out++ = low ? (*(pal + low) | 0xff000000) : 0; - // *out++ = hi ? (*(pal + hi) | 0xff000000) : 0; + while(in != end) + { + u8 low = *in & 0x0f; + u8 hi = (*in & 0xf0) >> TIC_PALETTE_BPP; + *out++ = low ? (*(pal + low) | 0xff000000) : 0; + *out++ = hi ? (*(pal + hi) | 0xff000000) : 0; - // in++; - // } - // } + in++; + } + } - // SDL_UnlockTexture(studioImpl.mouse.texture); - // } + SDL_UnlockTexture(platform.mouse.texture); + } - // tic_rect rect = {0, 0, 0, 0}; - // calcTextureRect(&rect); - // s32 scale = rect.w / TIC80_WIDTH; + SDL_Rect rect = {0, 0, 0, 0}; + calcTextureRect(&rect); + s32 scale = rect.w / TIC80_WIDTH; - // tic_rect src = {0, 0, TIC_SPRITESIZE, TIC_SPRITESIZE}; - // tic_rect dst = {0, 0, TIC_SPRITESIZE * scale, TIC_SPRITESIZE * scale}; + SDL_Rect src = {0, 0, TIC_SPRITESIZE, TIC_SPRITESIZE}; + SDL_Rect dst = {0, 0, TIC_SPRITESIZE * scale, TIC_SPRITESIZE * scale}; - // SDL_GetMouseState(&dst.x, &dst.y); + SDL_GetMouseState(&dst.x, &dst.y); - // if(getConfig()->theme.cursor.pixelPerfect) - // { - // dst.x -= (dst.x - rect.x) % scale; - // dst.y -= (dst.y - rect.y) % scale; - // } - - // if(SDL_GetWindowFlags(studioImpl.window) & SDL_WINDOW_MOUSE_FOCUS) - // SDL_RenderCopy(studioImpl.renderer, studioImpl.mouse.texture, &src, &dst); -// } + if(getConfig()->theme.cursor.pixelPerfect) + { + dst.x -= (dst.x - rect.x) % scale; + dst.y -= (dst.y - rect.y) % scale; + } + if(SDL_GetWindowFlags(platform.window) & SDL_WINDOW_MOUSE_FOCUS) + SDL_RenderCopy(platform.renderer, platform.mouse.texture, &src, &dst); +} static void renderCursor() { if(platform.studio->tic->ram.vram.vars.cursor.system) { - SDL_SystemCursor sdlCursor = SDL_SYSTEM_CURSOR_ARROW; - switch(platform.studio->tic->ram.vram.vars.cursor.sprite) { - case tic_cursor_hand: sdlCursor = SDL_SYSTEM_CURSOR_HAND; break; - case tic_cursor_ibeam: sdlCursor = SDL_SYSTEM_CURSOR_IBEAM; break; - default: sdlCursor = SDL_SYSTEM_CURSOR_ARROW; + case tic_cursor_hand: + { + if(getConfig()->theme.cursor.hand >= 0) + { + SDL_ShowCursor(SDL_DISABLE); + blitCursor(platform.studio->tic->config.bank0.tiles.data[getConfig()->theme.cursor.hand].data); + } + else + { + SDL_ShowCursor(SDL_ENABLE); + SDL_SetCursor(SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_HAND)); + } + } + break; + case tic_cursor_ibeam: + { + if(getConfig()->theme.cursor.ibeam >= 0) + { + SDL_ShowCursor(SDL_DISABLE); + blitCursor(platform.studio->tic->config.bank0.tiles.data[getConfig()->theme.cursor.ibeam].data); + } + else + { + SDL_ShowCursor(SDL_ENABLE); + SDL_SetCursor(SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_IBEAM)); + } + } + break; + default: + { + if(getConfig()->theme.cursor.arrow >= 0) + { + SDL_ShowCursor(SDL_DISABLE); + blitCursor(platform.studio->tic->config.bank0.tiles.data[getConfig()->theme.cursor.arrow].data); + } + else + { + SDL_ShowCursor(SDL_ENABLE); + SDL_SetCursor(SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_ARROW)); + } + } } - - SDL_SetCursor(SDL_CreateSystemCursor(sdlCursor)); } else { - // render cursor here + SDL_ShowCursor(SDL_DISABLE); + blitCursor(platform.studio->tic->ram.sprites.data[platform.studio->tic->ram.vram.vars.cursor.sprite].data); } -// if(studioImpl.mode == TIC_RUN_MODE && !studioImpl.studio.tic->input.mouse) +// if(platform.mode == TIC_RUN_MODE && !platform.studio.tic->input.mouse) // { // SDL_ShowCursor(SDL_DISABLE); // return; // } -// if(studioImpl.mode == TIC_RUN_MODE && studioImpl.studio.tic->ram.vram.vars.cursor) -// { -// SDL_ShowCursor(SDL_DISABLE); -// blitCursor(studioImpl.studio.tic->ram.sprites.data[studioImpl.studio.tic->ram.vram.vars.cursor].data); -// return; -// } - -// SDL_ShowCursor(getConfig()->theme.cursor.sprite >= 0 ? SDL_DISABLE : SDL_ENABLE); - -// if(getConfig()->theme.cursor.sprite >= 0) -// blitCursor(studioImpl.studio.tic->config.bank0.tiles.data[getConfig()->theme.cursor.sprite].data); } static void tick() @@ -1016,8 +1045,8 @@ s32 main(s32 argc, char **argv) if(platform.audio.cvt.buf) SDL_free(platform.audio.cvt.buf); - // if(platform.mouse.texture) - // SDL_DestroyTexture(platform.mouse.texture); + if(platform.mouse.texture) + SDL_DestroyTexture(platform.mouse.texture); SDL_DestroyTexture(platform.gamepad.texture); diff --git a/src/studio.h b/src/studio.h index d7d3aec..a898d45 100644 --- a/src/studio.h +++ b/src/studio.h @@ -74,7 +74,10 @@ typedef struct { struct { - s32 sprite; + s32 arrow; + s32 hand; + s32 ibeam; + bool pixelPerfect; } cursor;