Merge branch 'master' into QHD

This commit is contained in:
Mirek Fidler 2026-04-17 14:02:16 +02:00
commit c31f87a2c7
19 changed files with 498 additions and 342 deletions

View file

@ -53,6 +53,10 @@ CONSOLE_APP_MAIN
if(h.GetCount() > 2) {
int codepoint = stou(~h[0], NULL, 16);
String text = h[1];
if((codepoint < 0x24F || codepoint >= 0x2070 && codepoint <= 0x209F || codepoint >= 0x2150 && codepoint <= 0x218F)
&& findarg(h[2], "No", "Sm") >= 0)
out.GetAdd("mathematical") << MakeTuple(codepoint , ToLower(text));
else
for(SymbolRange r : symbol_ranges) {
out2 << MakeTuple(codepoint , ToLower(text));
if(codepoint >= r.from && codepoint <= r.to) {

View file

@ -40,7 +40,7 @@ void EnterGuiMutex(int n)
bool TryEnterGuiMutex()
{
if(sGLockLevel == 0 && sGLock.TryEnter()) {
if(sGLockLevel || sGLock.TryEnter()) {
sGLockLevel++;
return true;
}

View file

@ -305,11 +305,14 @@ struct ImageSysDataMaker : LRUCache<ImageSysData, int64>::Maker {
virtual int Make(ImageSysData& object) const { object.Init(img); return (int)img.GetLength(); }
};
void SystemDraw::SysDrawImageOp(int x, int y, const Image& img, const Rect& src, Color color)
void SystemDraw::SysDrawImageOp(int x, int y, const Image& _img, const Rect& src, Color color)
{
LLOG("SysDrawImageOp " << img.GetSerialId() << ' ' << img.GetSize());
GuiLock __;
Image img = _img;
if(img.GetLength() == 0)
return;
@ -324,6 +327,11 @@ void SystemDraw::SysDrawImageOp(int x, int y, const Image& img, const Rect& src,
SetSurface(*this, x, y, sz.cx, sz.cy, ~img);
return;
}
if(!IsNull(color)) { // avoid SW emulation
img = CachedSetColorKeepAlpha(img, color);
color = Null;
}
ImageSysDataMaker m;
static LRUCache<ImageSysData, int64> cache;

View file

@ -6,7 +6,7 @@ const VectorMap<String, Vector<Tuple<int, String>>>& UnicodeSymbols()
{
static VectorMap<String, Vector<Tuple<int, String>>> map;
ONCELOCK {
const byte data[] = {
const byte data[] = { // generated by uppbox/UnicodeSymbolNames
120,156,164,125,5,120,28,71,210,182,29,102,114,226,216,137,19,175,157,216,142,172,40,96,135,233,130,151,99,102,158,221,
109,237,142,53,59,51,25,144,180,62,10,231,248,194,204,204,204,204,204,204,204,201,221,5,44,217,82,238,46,127,189,213,
61,51,61,180,210,125,255,147,199,209,78,85,53,85,87,87,87,119,87,87,215,141,192,152,184,220,242,126,187,85,117,44,
@ -807,273 +807,286 @@ const VectorMap<String, Vector<Tuple<int, String>>>& UnicodeSymbols()
108,158,219,26,209,238,58,204,112,219,128,51,197,243,245,182,136,64,151,78,138,51,53,60,215,134,23,153,18,194,237,136,
112,110,209,92,90,76,190,61,184,87,58,85,238,128,214,80,133,2,40,236,8,29,53,117,71,32,203,164,120,39,212,87,
103,93,25,225,206,136,131,167,102,227,18,146,93,16,84,143,217,34,2,131,159,5,82,167,245,118,212,127,255,175,178,171,
12,115,228,70,162,187,23,102,230,108,118,98,39,153,164,119,39,176,225,187,92,152,153,153,218,118,123,198,187,182,219,113,
219,3,27,102,102,188,48,51,51,231,152,153,153,153,113,142,47,87,175,196,234,110,219,243,125,243,99,172,122,85,82,75,
165,82,137,74,213,122,220,198,3,132,187,25,163,174,146,118,55,182,91,37,237,65,73,155,201,202,81,18,61,213,81,208,
61,135,245,142,67,197,49,28,110,221,162,174,246,34,232,112,246,135,232,70,86,95,180,55,140,106,210,140,39,170,245,112,
81,180,15,186,81,71,173,37,85,227,122,13,15,80,105,242,190,198,116,145,145,29,111,99,40,81,180,253,136,182,140,236,
142,251,67,213,165,207,39,82,14,224,238,148,109,30,14,36,218,230,226,43,82,197,165,255,105,232,198,11,14,18,124,16,
129,183,180,149,170,63,203,193,60,82,176,89,196,160,112,8,122,140,215,235,68,189,30,138,78,145,58,249,96,56,15,67,
19,56,107,228,156,175,215,129,153,237,240,97,142,210,209,26,0,122,196,176,183,239,145,137,58,114,216,219,67,201,68,29,
53,172,119,45,207,232,226,173,31,106,33,148,156,28,163,102,216,32,125,57,122,88,239,90,102,3,142,33,192,92,1,136,
38,203,120,53,47,141,57,118,88,239,69,170,213,23,14,45,36,139,50,121,28,70,22,217,70,190,12,241,106,237,241,236,
17,240,119,216,113,113,79,128,65,148,206,190,157,126,34,224,66,160,157,124,18,37,111,163,166,22,188,7,208,233,182,155,
124,32,163,209,8,233,3,227,78,70,233,79,54,102,73,114,245,132,159,98,50,145,23,231,7,201,228,84,147,137,228,234,
9,63,205,104,53,251,169,3,148,235,116,151,101,144,92,66,98,41,226,144,82,36,130,32,242,249,134,209,118,216,26,19,
55,253,21,174,4,29,200,105,63,133,41,195,18,10,204,24,63,109,146,139,172,24,223,72,232,12,227,163,97,4,73,66,
49,163,202,80,138,42,55,196,170,240,36,97,0,213,251,63,163,208,60,197,101,19,36,195,24,164,74,5,226,157,5,250,
66,42,2,222,221,74,116,129,106,232,74,18,36,189,205,12,212,66,180,160,154,112,243,51,58,77,121,232,42,19,190,136,
224,243,82,240,124,241,117,11,239,110,51,136,221,172,18,63,18,215,209,248,6,225,231,219,133,238,199,208,52,122,155,37,
63,71,69,98,226,90,48,102,238,182,14,200,214,50,234,62,200,199,156,129,143,239,145,139,143,111,67,188,48,23,242,212,
82,187,19,35,32,88,50,134,231,151,124,120,2,241,2,174,78,45,245,196,119,224,198,218,90,35,222,188,244,97,93,116,
31,71,111,178,113,227,16,135,167,186,74,97,103,40,53,225,174,212,70,107,29,156,81,156,24,0,214,153,136,39,225,190,
244,131,97,97,106,10,197,235,3,132,19,189,120,16,28,37,157,57,64,249,200,21,58,107,128,242,37,120,127,247,236,1,
128,60,164,159,51,64,1,177,86,113,110,79,92,147,31,141,38,247,160,121,158,157,177,94,247,48,119,177,116,139,156,63,
16,144,218,228,2,140,238,253,129,104,149,11,97,39,251,66,209,46,23,13,134,164,111,188,120,160,114,82,219,92,50,80,
57,185,117,46,29,8,202,237,115,217,64,5,69,11,93,222,7,105,218,232,10,66,142,228,182,101,86,99,93,57,51,14,
106,181,171,136,99,171,25,112,160,249,174,198,40,59,56,15,218,241,154,25,178,16,245,218,153,125,11,181,236,117,51,251,
22,110,226,235,103,198,195,109,125,195,204,62,6,141,126,227,160,44,166,245,111,50,235,8,57,151,109,248,164,238,205,4,
91,69,192,56,72,34,156,150,91,134,245,186,143,240,65,145,120,43,252,72,233,125,213,198,107,137,90,243,186,109,88,47,
253,164,222,40,51,36,63,219,219,13,201,63,211,124,7,60,165,74,59,172,154,163,118,41,246,59,97,166,164,100,108,94,
143,116,106,28,235,222,199,221,5,223,197,191,216,237,131,238,70,55,149,83,187,62,208,123,48,11,148,207,120,244,195,222,
11,5,148,21,54,24,199,125,168,20,235,20,131,69,186,31,243,57,238,61,35,21,220,141,24,225,161,56,67,6,68,63,
128,177,90,129,229,253,141,94,248,7,135,245,153,170,44,242,67,198,235,145,139,55,194,221,181,206,124,55,211,130,31,70,
207,200,224,210,167,231,51,120,30,25,150,135,177,228,161,189,20,224,81,120,108,114,178,28,55,203,225,120,52,226,46,107,
248,12,143,13,171,119,124,220,27,27,62,238,241,97,25,250,178,55,236,9,212,108,143,155,26,62,254,73,148,183,215,205,
11,159,225,41,203,195,52,211,87,127,146,235,115,61,109,184,172,233,108,63,174,103,136,107,91,117,23,105,6,185,61,203,
115,127,118,211,240,126,220,115,182,152,25,100,255,60,70,92,101,194,236,147,27,62,240,133,97,117,130,123,68,190,158,154,
161,199,47,14,171,179,224,22,200,55,72,47,101,129,124,73,47,103,129,124,35,245,138,177,25,253,50,125,53,31,234,103,
253,90,62,212,47,192,235,108,217,212,58,13,46,14,102,200,123,35,107,209,106,44,108,46,202,192,190,137,5,6,126,137,
157,195,192,103,32,222,50,70,183,39,238,109,194,109,196,143,159,232,101,55,31,242,14,230,175,106,122,173,53,233,240,233,
217,179,214,181,46,192,232,25,12,158,179,61,2,68,235,14,139,67,60,210,112,114,21,57,196,163,12,103,154,120,52,17,
231,202,213,135,188,172,143,177,48,121,37,56,54,37,39,157,215,113,41,57,105,204,241,132,153,147,85,144,113,236,36,2,
113,2,16,89,197,208,136,19,141,12,55,3,141,56,201,200,200,65,156,76,136,162,61,64,231,228,117,138,193,245,44,211,
169,190,188,156,124,79,243,229,229,224,78,159,158,237,60,108,166,17,165,110,37,4,45,171,52,68,43,25,62,87,50,209,
202,134,47,69,171,76,235,109,251,156,92,35,131,200,201,187,234,203,72,229,50,234,203,72,33,198,166,177,245,31,243,214,
43,34,90,117,212,25,53,189,18,67,128,249,189,0,67,181,166,218,3,96,194,194,105,14,199,81,175,85,178,241,139,136,
62,175,7,221,151,87,159,158,45,222,191,149,183,42,99,76,228,27,148,184,178,26,250,69,82,147,146,86,179,111,105,114,
106,60,205,15,26,43,207,66,36,182,184,136,229,118,173,197,81,41,66,234,67,209,144,189,246,49,173,79,24,244,64,181,
167,197,17,34,65,16,175,49,91,11,28,211,250,108,65,46,166,3,75,34,55,145,26,136,35,201,111,56,171,165,12,54,
51,19,252,104,74,138,56,78,196,93,44,63,125,198,139,159,19,36,96,251,60,1,61,57,39,137,115,231,20,231,160,235,
155,83,211,250,140,23,223,121,105,199,37,242,97,53,121,49,106,205,18,158,133,57,147,48,155,170,83,105,61,145,103,77,
123,7,220,160,117,221,228,108,148,193,74,86,135,113,36,249,156,105,60,101,143,13,106,108,237,199,164,55,231,82,202,90,
10,229,80,222,157,189,196,44,242,244,112,197,6,193,85,235,245,217,5,56,51,113,163,85,143,80,130,247,208,207,53,91,
97,187,83,11,113,136,178,90,141,176,204,72,63,150,32,194,138,60,22,15,69,147,181,164,147,44,9,164,72,168,196,81,
130,75,221,130,178,20,17,150,19,207,184,39,81,103,105,252,170,53,203,109,22,191,12,253,90,170,25,82,119,89,22,249,
70,34,211,161,184,186,28,253,92,13,34,66,82,56,157,186,124,1,143,60,139,184,137,58,113,133,2,246,93,197,105,73,
26,78,17,206,3,115,190,21,11,252,86,178,44,137,164,27,242,74,5,236,245,137,147,191,41,222,149,241,113,17,212,181,
138,189,158,184,186,10,37,172,212,28,9,169,202,233,119,165,91,238,172,74,41,171,136,148,114,44,211,86,51,105,73,183,
33,214,169,87,199,119,153,89,227,26,40,44,255,28,137,219,35,122,134,185,38,37,47,91,161,114,34,101,173,2,130,167,
234,57,101,157,122,208,218,168,53,68,105,101,214,117,80,57,106,231,73,7,172,93,23,101,228,231,221,85,202,122,40,143,
88,180,214,105,235,83,218,10,210,98,225,53,247,13,32,185,220,45,137,95,27,130,138,5,6,190,121,26,119,230,64,2,
118,187,200,60,215,248,166,70,39,222,8,101,173,53,171,181,102,173,51,53,23,12,98,161,82,44,171,162,65,249,191,141,
241,21,13,178,215,93,14,156,133,164,2,164,37,45,210,17,222,93,225,180,34,116,15,31,91,137,146,77,10,252,122,184,
108,50,145,184,41,50,80,119,36,41,247,205,184,142,227,206,144,149,54,12,76,61,30,149,82,43,155,163,206,213,239,184,
189,5,90,147,187,23,95,29,137,155,1,10,217,109,210,127,243,196,183,116,162,81,18,54,95,100,207,54,64,165,141,32,
77,190,255,164,210,182,132,22,66,105,112,90,64,37,110,197,170,217,109,243,211,241,42,113,107,112,143,199,245,110,195,164,
109,195,234,170,159,155,80,201,11,160,174,214,43,20,158,248,109,137,188,145,247,148,133,7,217,14,45,201,29,144,186,114,
180,61,234,181,20,149,195,110,18,237,128,239,109,67,29,119,68,205,152,246,220,9,44,80,59,86,171,157,233,215,210,209,
100,57,74,146,247,162,51,143,70,113,35,162,111,47,15,25,142,247,65,192,88,220,136,41,35,42,204,46,104,100,55,110,
242,251,145,36,109,77,69,196,84,222,21,213,192,55,187,58,124,132,100,49,245,143,221,88,163,225,189,224,73,151,221,193,
52,129,184,199,99,170,131,237,1,0,26,154,69,236,137,38,22,221,136,127,239,69,191,215,9,147,41,50,43,49,239,213,
213,167,116,56,230,189,11,216,98,133,237,200,166,239,67,244,181,195,22,229,51,89,163,78,26,89,164,125,137,52,236,146,
112,139,142,133,149,59,93,71,204,126,132,157,215,140,106,168,242,33,151,167,9,91,234,227,247,71,45,120,145,163,15,160,
180,53,88,186,155,126,32,172,147,147,70,18,21,241,32,54,189,66,39,185,50,14,70,130,12,38,203,136,67,96,10,16,
224,115,60,172,195,72,118,226,67,81,39,186,65,85,185,12,253,48,104,165,178,239,164,193,165,168,51,17,69,205,195,161,
7,252,109,33,13,27,28,130,128,188,129,70,173,115,4,234,48,37,143,51,63,146,72,155,101,87,47,190,2,34,40,29,
7,233,170,71,17,180,160,126,128,152,205,118,52,190,175,28,215,201,26,138,99,112,199,176,125,22,39,226,56,253,88,244,
62,182,125,181,166,102,59,78,27,68,149,114,60,212,172,28,183,219,81,210,138,155,28,85,227,4,30,157,146,14,231,153,
156,8,0,42,134,108,19,95,244,235,196,39,177,193,196,161,38,145,225,201,108,157,163,122,39,212,98,79,65,101,232,111,
44,145,27,18,177,117,164,254,114,42,235,173,178,130,165,169,211,208,224,106,87,156,82,20,215,233,248,34,30,50,101,66,
200,70,171,130,193,182,204,9,37,124,34,16,118,98,25,57,39,104,130,142,223,162,149,2,191,140,171,130,146,91,250,19,
65,185,156,32,227,22,177,90,224,87,149,53,27,30,151,86,180,81,216,40,151,209,38,143,129,108,88,85,199,81,228,26,
145,231,56,220,62,98,33,15,25,221,178,21,16,125,17,134,58,78,178,57,235,194,184,177,138,54,148,167,224,124,125,147,
7,236,184,99,36,197,170,254,108,65,45,152,85,213,135,77,209,155,86,133,156,65,144,141,21,196,41,190,141,106,187,223,
46,40,166,56,73,234,219,125,68,135,16,197,220,146,24,92,23,189,171,87,113,12,116,156,160,235,57,101,178,241,19,160,
250,69,50,129,232,209,51,179,139,99,243,76,217,176,84,105,52,223,98,12,179,173,118,84,198,139,194,103,226,71,210,45,
151,163,168,146,156,197,254,165,164,216,122,120,54,8,10,101,19,206,65,185,61,14,243,205,231,130,234,177,25,234,121,208,
1,237,96,72,33,231,59,137,146,247,2,30,158,68,128,253,184,122,33,219,0,21,41,63,174,94,164,156,144,112,72,99,
46,214,30,235,144,133,188,4,189,80,99,236,239,184,20,29,205,66,218,180,203,136,54,164,135,22,147,135,163,114,151,219,
117,239,100,234,192,174,128,229,55,18,84,192,37,77,191,178,192,79,9,24,230,20,226,42,52,24,31,99,37,196,213,40,
182,250,225,29,110,189,70,244,95,73,99,7,235,90,118,249,132,187,169,12,253,117,24,107,244,164,185,54,90,131,95,25,
87,175,47,152,155,201,246,152,160,138,113,3,250,106,154,205,134,220,8,239,68,221,81,11,91,55,217,63,187,173,155,121,
24,177,222,246,189,5,70,66,37,176,115,113,171,157,66,99,66,148,220,6,11,107,246,133,109,167,252,3,80,81,77,138,
141,143,125,59,26,93,17,28,143,252,142,130,142,72,96,206,166,105,234,157,60,60,73,170,24,109,238,178,203,140,109,147,
187,145,160,142,141,225,35,238,65,145,85,2,127,196,189,118,10,127,196,125,220,153,206,80,81,118,76,73,239,71,13,201,
243,11,97,121,209,3,208,122,113,250,129,126,61,40,188,67,60,178,68,191,30,130,205,197,11,81,244,255,195,160,132,73,
18,177,79,248,8,252,198,70,76,99,98,242,40,253,187,100,167,221,141,30,67,26,249,161,228,76,62,14,203,38,221,21,
251,100,149,58,55,65,147,125,26,13,235,209,19,5,126,231,200,125,247,19,56,153,230,193,159,228,113,216,244,101,26,138,
158,130,162,178,203,72,37,120,218,161,115,81,158,161,164,5,188,91,200,213,48,104,78,207,66,229,181,197,65,56,30,42,
123,84,103,149,127,78,244,98,105,111,92,218,243,208,115,234,138,13,188,95,218,45,141,182,99,170,190,184,250,2,244,220,
158,115,122,144,23,121,76,74,177,217,122,254,18,220,212,30,34,108,236,203,176,93,86,127,121,5,149,164,250,215,171,186,
107,55,194,214,107,24,195,200,152,144,123,71,254,15,230,23,11,187,168,171,33,114,141,218,181,201,215,33,136,167,81,84,
93,148,252,6,253,94,98,50,110,191,137,54,111,210,180,235,45,36,80,73,222,134,182,217,115,66,17,145,162,93,126,7,
77,226,222,34,254,32,91,77,158,50,91,19,184,15,241,88,237,164,198,237,15,115,117,114,162,61,153,251,8,138,37,146,
217,226,124,148,205,185,60,50,168,244,252,99,232,53,182,226,127,188,160,143,170,203,148,79,20,236,89,55,119,155,79,66,
137,75,241,68,167,22,125,170,160,222,193,147,85,77,243,60,60,71,131,39,8,197,251,147,106,222,242,233,130,122,55,166,
47,244,51,194,215,146,47,25,186,180,207,194,73,147,167,48,83,196,207,193,192,184,115,44,105,47,62,143,175,87,59,8,
170,230,190,128,74,118,19,169,146,191,88,224,120,41,172,241,98,124,248,82,193,76,128,213,136,240,101,56,172,214,164,88,
85,251,87,68,141,114,58,215,251,87,97,19,90,181,78,121,140,250,218,162,175,161,132,66,5,177,236,103,77,214,191,142,
102,52,30,133,138,208,240,13,48,56,30,132,162,124,19,37,224,213,46,215,53,252,22,44,179,73,183,121,191,93,224,221,
75,149,135,61,253,176,97,223,1,204,201,211,70,106,254,239,154,111,241,40,223,67,35,229,73,255,62,186,129,77,84,38,
228,7,62,65,217,143,31,22,248,205,123,215,61,209,125,249,71,14,85,242,104,234,143,11,252,180,175,94,141,206,26,65,
127,194,30,67,108,173,88,103,142,162,63,133,168,12,49,182,79,240,51,136,202,22,99,195,126,94,112,94,70,178,28,126,
227,148,253,34,213,10,153,176,95,194,44,106,43,156,9,249,21,123,8,202,24,103,66,126,13,165,65,106,218,192,254,6,
227,84,214,130,161,7,253,173,170,197,222,54,250,119,4,155,63,128,56,205,243,123,244,82,61,28,69,245,122,173,149,212,
146,63,96,180,160,254,143,125,67,59,122,155,162,255,17,70,91,191,76,169,3,170,40,242,159,136,188,161,245,206,100,10,
240,103,152,43,179,152,170,98,117,224,86,149,255,174,251,95,8,186,147,15,117,198,207,144,106,91,172,154,166,152,255,74,
204,187,250,75,183,51,19,241,55,116,0,159,25,70,157,159,174,154,134,49,245,169,152,159,146,212,191,179,143,155,153,185,
68,252,131,123,178,71,227,225,156,136,255,204,170,35,68,120,76,21,49,249,87,1,155,248,106,100,238,81,153,255,38,224,
14,46,112,208,122,248,15,177,238,226,45,93,207,72,192,127,217,63,117,88,101,53,252,143,125,240,12,209,146,254,46,154,
96,49,52,90,108,141,148,194,81,185,100,158,140,213,90,179,138,24,81,104,232,141,168,43,243,186,246,236,34,214,83,234,
52,100,96,25,145,183,186,223,67,73,75,141,197,221,36,90,162,40,94,13,211,7,107,150,44,170,87,195,116,210,82,69,
177,96,185,16,163,206,120,180,116,17,171,193,148,91,75,252,94,166,136,203,123,98,143,170,25,45,11,129,226,112,109,132,
187,63,163,203,21,121,5,136,143,209,138,148,229,33,79,196,21,172,199,113,123,133,162,94,190,230,223,43,210,239,213,100,
224,86,201,215,142,91,43,81,234,170,50,85,136,167,196,149,81,88,68,101,53,184,85,144,29,146,52,104,85,200,211,3,
53,155,94,170,149,213,192,42,141,167,140,231,176,58,37,45,65,46,210,26,69,220,112,137,70,161,106,107,210,255,75,99,
184,141,219,107,209,191,171,155,75,150,100,5,227,54,233,230,218,72,110,197,9,47,53,209,240,92,193,68,44,110,175,83,
196,178,115,45,154,168,132,157,80,26,251,117,41,109,237,86,29,171,211,177,220,108,226,183,6,168,56,235,1,174,183,234,
69,218,250,104,165,9,196,85,220,0,85,76,237,213,30,165,57,79,178,33,99,245,39,114,80,202,57,168,30,171,38,56,
113,35,20,205,169,51,78,158,91,68,148,29,167,130,57,125,8,21,5,25,50,10,152,88,210,222,152,82,215,148,104,135,
80,64,241,170,184,41,91,196,127,73,131,220,244,77,138,252,168,170,209,29,181,136,233,119,85,210,227,100,83,232,65,220,
226,122,91,20,77,109,134,210,146,31,152,68,24,146,177,68,201,133,27,70,254,147,88,83,12,77,76,199,161,82,60,185,
57,17,150,37,62,222,67,219,130,126,108,208,227,72,122,64,244,13,123,157,65,159,135,143,119,114,135,180,249,208,230,82,
212,36,253,136,120,22,57,130,132,242,20,169,113,133,122,83,173,51,181,37,74,141,190,26,138,67,127,212,79,170,84,17,
91,161,112,201,84,3,107,179,83,91,131,169,19,227,187,219,221,102,220,237,108,83,100,255,152,20,140,29,93,49,120,47,
128,230,82,143,23,203,138,33,245,176,109,185,94,113,55,119,59,244,145,50,101,64,42,83,194,206,130,245,59,169,53,23,
237,128,207,11,91,228,231,118,155,101,185,75,36,110,224,12,213,70,74,81,216,216,177,136,103,184,51,1,164,155,120,31,
16,65,158,118,34,212,80,54,10,100,49,70,238,156,47,138,65,98,207,232,189,132,42,244,68,241,236,224,125,69,236,169,
228,195,22,198,157,93,250,228,39,102,230,239,207,207,79,198,28,226,121,228,174,249,95,40,97,148,227,110,4,154,155,83,
89,88,116,128,246,238,78,152,98,54,6,103,241,52,110,143,62,85,202,192,61,9,180,73,15,144,150,184,87,31,160,118,
243,246,46,242,38,74,46,208,246,245,246,201,23,106,5,217,15,155,209,190,4,220,52,27,104,199,203,39,228,126,132,12,
122,150,211,137,236,187,63,193,231,245,128,251,71,181,14,40,242,246,70,143,86,212,53,118,32,44,82,54,84,47,171,104,
39,227,160,124,85,19,187,13,172,67,7,231,87,131,80,109,142,110,64,246,190,115,72,159,198,103,161,135,230,107,146,41,
33,105,229,97,249,26,174,223,54,160,170,63,60,255,131,57,79,39,82,244,17,249,159,34,151,153,148,215,113,100,126,159,
168,240,93,98,170,152,163,242,191,68,102,45,170,229,232,62,157,158,4,30,147,223,18,170,96,84,37,199,230,107,174,245,
30,3,85,202,113,125,244,209,11,21,125,124,175,110,22,35,208,161,84,152,19,122,20,128,21,70,1,79,204,215,88,181,
78,162,160,39,229,183,51,125,178,134,157,156,223,116,178,15,40,228,41,61,235,50,25,139,217,232,157,218,75,87,99,190,
71,26,86,78,203,23,165,173,108,216,62,189,143,218,243,118,97,152,111,161,84,11,83,205,192,67,170,37,165,30,93,36,
170,27,92,57,191,57,120,157,73,3,43,249,2,23,242,177,7,137,139,250,26,26,13,173,230,183,135,120,20,10,245,204,
221,100,52,31,41,22,162,52,114,44,31,41,22,156,116,238,53,66,206,207,70,58,211,122,205,176,48,191,63,139,179,87,
164,56,139,122,247,121,46,66,29,142,87,54,102,49,232,141,30,142,7,62,81,72,105,230,27,45,172,188,137,125,103,165,
207,113,159,65,80,47,126,180,250,216,35,181,7,124,70,143,206,169,109,185,40,104,59,63,111,101,221,4,48,33,224,250,
57,30,25,102,110,68,94,47,103,40,37,71,63,191,82,227,70,52,26,142,231,151,130,190,122,204,152,157,137,252,47,139,
90,73,205,174,213,201,252,202,66,129,53,110,42,63,111,46,155,6,46,206,255,8,46,228,153,152,129,241,186,140,142,227,
114,22,108,66,106,213,218,24,231,197,181,209,197,52,219,21,143,18,21,57,168,70,220,69,171,168,80,9,52,45,56,7,
174,113,9,215,63,69,102,231,210,239,57,122,86,206,75,56,226,17,207,90,165,130,254,27,119,206,131,55,78,179,108,177,
147,34,217,206,47,202,29,130,90,179,75,19,101,241,85,204,45,232,23,96,12,171,144,201,201,135,92,136,121,90,212,160,
79,197,133,96,145,118,81,145,15,202,53,244,132,81,36,95,92,204,12,23,43,35,63,56,165,191,164,200,231,226,120,118,
207,188,151,98,86,137,16,48,237,166,184,130,69,115,34,73,186,12,117,49,22,213,27,242,247,229,232,140,250,122,131,51,
27,179,94,129,185,162,104,109,157,233,176,187,104,133,43,49,52,149,176,124,161,194,55,41,182,118,103,204,188,226,112,21,
178,165,218,136,101,182,87,99,110,69,99,92,76,70,152,215,181,57,245,26,164,142,77,37,29,97,144,100,234,181,40,34,
31,212,231,64,207,181,14,14,236,183,186,157,161,177,145,206,84,75,241,94,151,135,170,219,168,235,97,191,90,52,99,174,
225,78,78,183,94,231,71,173,21,84,96,110,128,122,56,152,110,203,69,220,40,90,154,215,254,203,221,54,206,94,42,61,
174,198,237,6,102,182,55,21,113,144,49,102,159,54,26,81,250,46,81,55,231,91,2,88,161,91,48,117,171,68,229,26,
47,72,70,88,165,199,78,133,105,196,91,49,47,108,181,163,241,26,148,172,21,142,70,183,97,57,160,25,77,118,248,215,
7,208,17,90,109,92,73,75,202,34,206,21,243,221,142,116,106,34,106,91,39,253,14,53,85,118,238,171,203,40,218,113,
188,232,206,226,44,241,202,163,67,167,220,196,108,245,174,76,118,243,202,201,221,122,166,157,35,255,30,8,72,3,116,6,
247,102,11,48,57,220,7,247,66,140,148,162,175,168,139,217,34,15,177,152,113,63,218,53,11,164,243,121,32,79,140,200,
73,136,121,16,138,38,183,128,242,51,123,8,42,146,137,210,185,61,156,43,200,206,238,17,93,106,247,202,185,169,189,71,
139,188,154,159,66,72,115,214,170,69,229,232,177,28,41,166,10,31,39,196,58,46,81,151,244,9,243,49,121,133,120,18,
85,151,5,177,75,241,84,158,28,83,140,167,97,13,213,122,146,41,193,51,24,28,45,243,196,54,85,83,159,37,234,86,
86,20,106,108,6,89,81,85,220,188,228,78,217,115,134,71,160,52,83,70,53,73,158,231,209,239,244,25,98,92,112,124,
161,200,231,75,85,138,88,20,123,17,223,192,47,67,57,205,250,18,140,168,122,126,202,161,188,76,148,145,76,138,56,202,
149,150,245,10,100,181,195,10,143,1,106,145,129,5,188,90,84,47,8,152,117,231,120,146,43,236,181,162,126,65,32,69,
123,29,108,246,146,116,153,92,67,16,70,182,121,35,151,180,237,155,185,164,29,223,202,37,237,252,54,62,151,143,203,37,
157,182,178,105,67,94,76,24,236,79,234,213,203,119,136,99,235,65,56,236,53,204,15,98,9,161,31,147,24,84,121,224,
250,16,225,119,200,193,139,229,239,166,51,68,90,172,31,38,214,237,114,88,177,246,153,203,248,145,65,170,66,108,108,168,
215,64,136,99,167,153,150,82,49,127,172,199,39,230,148,83,177,126,28,254,248,32,77,128,131,195,159,232,81,31,185,133,
4,227,39,137,113,193,204,10,8,182,79,97,50,63,120,126,159,238,241,45,169,92,62,131,121,212,160,218,138,142,247,89,
88,150,25,40,43,120,62,87,52,231,255,171,113,220,249,60,44,13,205,28,186,109,53,70,127,129,157,60,108,184,200,132,
47,162,55,187,94,172,54,136,95,42,242,41,127,113,8,152,108,70,52,30,125,25,14,137,78,226,221,47,182,45,228,47,
183,59,95,113,136,156,36,168,192,125,21,99,71,6,39,214,239,25,154,124,205,65,152,116,35,227,235,240,32,178,16,11,
99,220,188,252,6,204,168,33,183,105,154,221,136,190,9,51,106,18,233,159,16,201,223,114,146,91,8,110,132,228,111,115,
253,132,184,34,49,202,235,238,223,161,132,37,171,221,36,250,110,81,110,142,88,190,195,247,138,102,31,196,74,254,126,81,
238,119,56,230,255,7,69,179,223,225,16,126,136,175,2,60,59,202,204,143,80,45,146,47,27,241,227,162,126,214,138,190,
174,21,45,174,117,27,63,65,91,216,27,12,182,189,248,41,190,146,212,42,132,54,53,163,36,249,25,37,44,139,168,67,
248,241,115,250,177,124,88,86,62,233,47,138,98,239,181,44,235,202,62,40,242,75,208,148,143,25,77,182,226,166,113,98,
127,133,249,92,230,51,5,234,38,152,180,9,191,46,234,183,164,220,141,22,15,247,27,120,58,233,103,18,60,212,111,141,
52,247,173,3,15,247,59,24,177,65,138,151,222,126,253,61,177,110,63,64,129,211,156,127,200,205,212,127,213,36,117,126,
237,143,232,219,97,61,164,137,1,95,19,249,19,124,245,132,212,134,55,242,254,12,42,206,53,181,5,245,47,240,133,245,
198,158,16,90,37,199,132,223,133,34,171,241,87,83,75,153,49,164,84,113,254,102,26,49,59,118,148,2,78,155,198,145,
192,172,55,86,254,158,202,54,251,41,174,127,20,205,193,36,187,18,254,89,52,193,113,149,153,35,227,67,181,240,175,162,
9,183,41,38,144,160,136,189,212,127,67,221,91,236,149,9,213,252,15,207,108,56,33,166,105,91,181,42,211,255,139,142,
164,210,101,218,255,138,188,13,203,204,245,40,106,201,228,119,33,34,46,209,220,158,79,201,79,169,169,225,172,128,58,179,
188,58,150,113,122,116,118,128,235,43,14,153,239,137,41,250,123,136,190,161,75,231,211,106,26,176,4,1,230,88,39,226,
52,65,159,152,88,50,192,17,195,92,4,178,91,42,192,41,23,113,151,77,30,5,178,58,181,102,88,218,20,86,194,92,
129,203,4,136,154,57,17,219,7,207,52,113,217,0,161,131,45,98,108,142,227,45,71,180,53,133,96,247,235,150,15,48,
226,196,149,110,61,22,230,189,219,88,33,224,67,152,202,55,230,111,80,158,253,138,40,32,230,186,237,174,125,135,75,139,
91,9,249,240,109,13,126,138,175,163,17,43,131,81,195,237,46,39,14,81,172,226,208,201,53,104,227,164,20,227,120,243,
103,213,64,158,14,238,138,211,160,122,10,190,90,128,229,55,231,42,151,20,195,247,5,137,186,128,199,88,43,81,190,59,
36,118,160,249,94,74,43,228,35,149,252,80,73,43,174,71,107,16,219,182,217,108,188,136,169,30,174,242,249,214,36,190,
225,20,31,95,51,105,150,235,221,10,247,184,177,136,177,107,17,214,84,160,20,18,202,136,52,170,62,215,134,118,34,98,
73,212,110,138,67,9,94,133,175,131,28,221,122,205,124,133,24,115,180,117,161,61,46,86,40,3,31,91,64,55,114,137,
182,138,174,79,228,53,92,50,171,230,6,148,190,150,155,46,183,153,54,36,202,218,62,135,88,79,156,67,164,37,225,65,
108,132,207,19,129,186,157,87,133,244,231,205,69,231,179,78,200,36,229,177,168,17,14,217,203,110,248,168,52,162,85,107,
81,101,111,12,249,25,68,121,2,38,110,22,8,176,177,190,55,42,91,216,122,192,70,28,134,42,18,106,51,15,197,58,
208,168,214,163,201,161,176,140,213,61,1,221,4,213,232,65,197,2,63,147,55,69,105,61,50,172,85,41,162,161,98,179,
92,94,38,15,227,99,252,178,118,75,242,74,58,117,222,205,81,89,30,64,62,172,34,235,117,139,128,143,191,53,221,47,
225,77,2,46,94,128,206,228,211,117,249,230,161,0,62,181,74,149,37,70,226,78,50,63,75,60,57,133,138,62,226,22,
176,214,180,158,10,19,245,189,37,76,169,131,176,158,7,19,144,173,2,246,159,249,16,48,253,137,88,175,242,36,239,214,
48,179,94,136,112,247,67,248,51,183,65,171,231,194,148,150,46,8,16,57,56,117,90,88,214,171,116,43,235,113,18,85,
182,13,176,190,208,192,57,1,9,218,14,221,50,43,135,140,111,222,158,176,155,231,96,83,95,191,3,12,154,190,100,145,
247,9,41,229,220,145,216,54,201,201,67,221,211,103,161,59,5,214,138,177,19,137,107,103,80,156,166,81,90,245,94,244,
116,171,217,45,210,251,136,52,55,39,95,133,217,37,224,69,123,220,222,224,99,189,92,129,239,71,95,224,175,71,56,250,
33,159,188,43,90,208,234,216,234,146,64,88,183,109,195,110,60,54,80,119,30,85,97,78,161,48,234,126,249,238,202,116,
233,97,88,105,201,30,160,136,145,87,110,48,168,111,219,51,64,212,123,67,145,182,110,47,100,148,22,37,169,123,67,237,
211,84,107,12,223,199,203,208,140,224,251,194,96,8,10,171,174,99,148,247,83,6,93,11,22,24,198,239,143,190,96,115,
242,49,198,148,140,3,0,203,144,97,208,44,227,64,35,173,68,51,46,216,179,102,69,206,2,173,225,224,32,130,109,237,
72,203,65,219,152,131,241,25,162,39,13,89,149,192,129,28,146,67,160,65,146,152,174,67,129,57,52,224,224,4,194,157,
72,187,87,135,5,198,183,181,221,170,195,41,61,200,203,151,75,236,244,233,35,144,139,237,120,185,70,229,72,232,128,229,
122,185,212,163,160,56,178,12,150,140,163,3,19,169,200,240,30,3,67,11,111,204,124,5,226,247,24,182,99,97,104,115,
1,113,251,56,116,41,28,55,227,100,249,206,198,241,200,203,77,36,81,39,160,97,109,143,145,116,182,30,182,90,94,142,
39,242,72,237,127,188,92,36,70,100,226,147,80,36,255,243,45,250,201,1,191,2,234,9,176,22,133,112,29,235,148,128,
223,47,117,133,120,152,83,109,140,213,12,92,135,178,199,157,102,183,133,198,40,195,126,122,102,81,244,237,11,1,10,217,
11,102,87,96,60,138,92,1,37,140,82,233,166,182,75,80,206,250,18,47,139,138,103,196,42,113,131,15,181,55,241,180,
150,184,134,76,201,17,74,107,155,58,126,47,197,3,85,161,155,214,163,38,222,200,61,202,134,66,223,116,118,85,115,140,
136,219,200,27,101,89,59,137,254,172,80,56,236,181,62,92,254,21,53,193,181,16,166,208,141,112,224,149,102,17,42,46,
11,97,249,17,117,152,203,164,214,168,193,7,87,198,153,127,53,216,148,196,205,209,118,23,46,153,43,186,25,168,155,34,
114,126,174,174,12,198,240,239,188,152,1,57,3,105,43,224,131,20,233,123,245,246,29,103,116,5,187,49,132,29,213,99,
103,27,116,51,146,10,170,133,79,208,226,105,126,183,82,58,150,65,177,46,243,119,149,233,160,74,32,187,208,229,109,100,
91,246,56,116,87,60,139,149,7,153,128,143,145,82,38,8,69,229,203,210,240,202,169,74,98,37,155,68,213,88,215,67,
132,123,136,152,26,134,109,138,205,136,123,93,73,122,218,181,38,6,138,197,16,146,190,184,228,96,206,12,156,251,72,12,
112,67,227,115,94,103,193,127,75,139,202,64,158,29,240,46,155,117,181,155,230,156,28,246,81,95,147,70,147,248,215,187,
125,208,185,4,26,233,41,198,40,164,248,146,243,48,92,246,19,235,51,157,79,76,243,7,204,134,63,239,2,98,216,106,
240,92,152,231,66,158,56,207,32,19,225,170,94,68,108,219,205,48,43,118,136,47,70,199,117,242,179,58,217,37,232,48,
190,84,139,126,41,250,175,97,230,145,155,227,241,143,240,92,220,190,66,117,25,65,183,112,68,245,66,95,238,42,6,160,
124,39,221,100,125,69,74,49,50,64,87,162,86,44,49,252,213,162,239,138,60,229,213,62,78,183,133,93,149,170,206,222,
188,58,143,171,121,136,243,114,84,22,83,153,170,107,8,84,204,144,238,227,174,133,159,148,39,44,93,232,235,0,239,33,
214,43,234,245,89,149,51,200,55,223,144,83,57,125,43,250,70,98,220,59,245,61,142,146,230,150,194,129,221,4,65,253,
64,57,165,114,48,55,67,207,82,221,196,190,27,121,11,26,52,11,97,103,127,43,12,80,79,49,190,45,185,13,6,168,
159,88,159,233,3,240,91,210,42,232,101,117,59,166,156,121,40,91,252,29,232,146,54,176,231,23,220,25,240,69,192,222,
104,91,252,93,24,245,45,149,214,146,238,102,15,207,16,108,166,123,80,166,28,133,77,15,216,247,162,76,249,29,34,205,
112,31,178,150,131,119,147,134,163,200,58,239,127,191,53,153,145,52,91,216,3,24,213,114,88,93,47,245,193,192,191,9,
234,248,246,138,233,161,32,21,72,70,76,217,52,226,225,192,137,124,34,103,76,165,41,17,115,249,17,12,233,14,191,7,
120,212,29,22,61,106,86,119,120,44,53,44,14,192,244,120,128,45,54,56,236,216,227,36,166,39,2,126,153,141,230,57,
226,247,147,129,138,81,39,19,108,159,237,41,180,136,5,182,105,79,227,11,83,254,80,169,219,104,77,137,130,60,131,241,
71,95,166,85,214,206,12,41,22,239,179,128,234,75,181,61,161,207,97,13,169,135,84,123,160,122,30,216,30,98,109,236,
11,80,48,79,174,149,237,139,32,123,162,44,242,75,236,188,186,220,182,244,151,3,14,144,226,176,219,244,87,2,251,226,
177,244,37,93,215,251,213,192,190,120,156,9,121,13,186,157,81,10,15,246,58,96,25,133,241,96,111,4,230,166,190,18,
250,102,96,223,222,23,18,222,66,154,12,254,162,108,226,219,60,171,86,1,95,84,234,59,129,9,19,163,55,129,132,242,
176,175,252,193,192,14,19,147,133,248,16,250,185,45,33,107,21,141,145,31,22,109,111,203,202,197,126,4,70,57,51,128,
142,231,148,125,84,232,105,102,60,29,15,250,177,192,9,137,147,210,152,143,7,94,72,156,20,226,19,162,193,93,9,238,
116,231,147,60,254,165,132,184,160,79,97,242,224,203,241,218,250,211,24,188,210,130,60,212,103,208,229,125,73,182,26,127,
86,20,217,23,99,67,62,199,223,45,239,165,242,241,54,121,174,89,151,247,243,129,137,193,35,15,179,249,144,47,4,184,
74,40,172,159,40,207,23,161,132,58,69,20,224,75,176,208,14,202,110,175,47,163,129,60,14,155,254,149,192,68,85,146,
166,67,162,190,42,40,146,69,209,0,252,90,128,51,219,46,15,126,124,61,176,227,48,185,210,190,17,32,188,154,162,201,
81,70,176,125,147,72,91,250,36,107,205,176,36,94,57,48,155,30,81,231,91,108,149,205,53,114,84,157,88,32,144,103,
204,191,141,236,116,8,13,57,137,141,112,41,180,245,29,12,5,157,118,72,211,97,68,210,117,143,88,124,55,16,241,91,
23,145,180,239,209,255,203,55,227,166,252,249,125,54,0,124,204,70,199,245,249,129,73,211,151,188,126,136,86,19,105,242,
6,204,143,224,133,208,231,81,33,43,53,177,121,40,190,229,199,112,194,157,171,230,114,229,196,11,155,243,19,152,178,172,
40,59,162,32,10,246,83,192,178,162,240,184,176,159,25,159,43,51,102,143,139,254,57,143,224,56,64,196,141,80,109,171,
91,200,226,178,58,191,79,234,202,250,5,247,31,183,82,156,53,241,95,178,209,176,107,200,117,94,126,133,106,113,233,82,
153,92,161,191,14,56,220,24,103,174,19,127,19,240,205,119,177,216,38,184,127,11,101,112,118,156,245,229,236,223,193,106,
232,91,229,217,152,223,7,118,248,9,113,47,86,109,35,171,235,232,252,110,138,138,102,245,7,8,205,184,171,96,111,43,
254,177,55,134,13,246,159,80,79,94,21,218,244,63,7,124,48,94,198,131,241,215,75,101,164,9,52,134,139,113,237,230,
95,131,156,152,82,165,90,19,71,6,212,238,202,223,48,179,203,194,101,231,59,13,235,33,225,98,137,74,101,248,119,88,
9,73,241,157,216,127,192,255,112,105,182,43,248,207,188,217,66,102,112,198,127,229,205,22,242,2,54,254,27,38,89,230,
46,3,64,251,181,240,31,116,49,177,126,158,85,23,234,27,255,107,249,248,74,146,162,253,143,104,171,139,243,99,54,239,
187,48,75,226,148,70,154,72,134,99,214,77,183,207,158,245,127,100,248,12,143,
12,115,228,56,218,231,152,153,153,214,146,237,181,199,183,102,76,204,204,204,60,146,70,187,186,147,52,178,102,180,112,118,
204,204,108,199,204,204,204,14,51,147,29,102,230,124,201,58,236,175,222,106,238,153,209,106,159,103,127,172,170,222,170,238,
105,168,174,166,234,122,51,238,226,1,194,221,140,81,87,164,221,141,237,86,164,61,136,180,177,44,28,165,209,107,58,10,
186,231,176,222,113,168,57,134,195,45,91,148,213,94,4,29,206,255,16,93,201,234,139,246,134,81,77,218,241,68,189,25,
206,143,246,65,55,74,213,90,82,61,110,54,240,0,149,102,239,107,76,23,25,217,241,46,134,18,197,219,143,120,139,203,
238,184,63,154,186,244,249,4,229,0,238,78,249,230,225,64,226,109,34,190,34,147,93,250,159,134,110,188,224,32,193,7,
17,120,115,187,81,205,44,114,48,143,20,108,22,49,40,28,130,30,227,245,58,81,174,135,162,83,100,78,62,24,201,195,
80,5,206,26,57,167,235,117,96,22,59,124,152,163,116,116,6,128,30,49,236,237,123,228,162,142,28,246,246,80,114,81,
71,13,235,93,203,51,122,120,235,135,106,8,57,39,199,168,29,182,168,189,28,61,172,119,45,243,1,199,16,96,125,1,
136,38,171,120,53,47,139,57,118,88,239,69,170,213,23,14,45,36,179,50,121,28,70,22,89,71,190,14,241,106,237,241,
236,17,240,119,216,113,113,79,128,65,148,206,190,77,63,17,112,161,208,38,159,68,228,173,212,212,130,247,0,210,94,183,
205,7,50,90,173,144,62,48,78,115,114,127,178,49,75,82,170,47,252,20,147,136,188,56,63,72,34,167,154,68,164,84,
95,248,105,166,85,179,159,58,64,190,78,119,69,6,73,37,36,145,50,14,41,69,34,8,34,159,111,24,237,134,157,49,
113,211,95,225,42,104,3,5,245,167,48,85,88,66,129,25,227,167,77,10,145,53,227,27,137,54,195,248,104,24,65,146,
144,205,168,54,148,225,202,13,177,58,60,73,24,64,245,254,207,40,90,158,146,178,25,82,96,12,90,101,3,226,157,5,
250,66,202,2,222,221,74,116,134,26,232,74,18,36,189,205,28,212,60,212,160,154,112,243,51,58,109,121,232,42,23,62,
159,224,155,101,224,197,234,155,22,222,221,102,16,187,89,21,126,36,46,213,248,22,225,231,218,153,158,73,160,109,218,109,
158,254,130,38,18,147,212,214,99,230,110,235,128,98,29,211,220,7,249,152,51,240,241,125,82,241,241,93,168,23,230,66,
158,90,234,166,49,2,130,37,99,120,126,201,135,39,80,47,224,234,212,82,95,124,10,55,214,110,53,226,205,75,31,214,
67,247,113,218,77,62,110,28,234,240,84,87,37,76,135,50,19,238,90,99,180,145,226,140,226,196,0,176,116,34,158,132,
251,50,19,12,11,83,83,200,222,12,64,56,209,11,6,193,17,233,204,1,242,71,174,208,89,3,228,47,193,251,187,31,
30,0,200,67,250,217,3,100,16,107,21,231,244,197,181,249,209,104,114,15,218,231,218,9,235,117,15,115,23,75,215,200,
121,3,1,169,78,206,199,232,62,51,16,181,114,1,236,228,140,80,212,203,133,131,33,233,27,47,26,40,159,84,55,23,
15,148,79,174,157,75,6,130,114,253,92,58,80,70,81,67,151,205,128,52,117,116,57,33,71,10,235,50,175,178,174,152,
157,4,213,218,149,36,177,197,44,36,80,125,87,97,148,29,92,6,245,120,245,44,69,136,123,205,236,190,133,106,246,218,
217,125,11,87,241,117,179,147,225,186,190,126,118,31,131,74,191,97,80,17,83,251,55,154,117,132,130,203,54,124,82,247,
38,130,45,47,96,28,36,17,78,203,205,195,122,221,71,248,160,32,222,2,63,82,122,95,141,241,70,162,214,188,110,29,
214,75,63,153,55,202,12,203,79,246,54,195,242,207,52,223,14,79,169,214,13,235,230,168,93,70,252,14,152,41,169,25,
155,215,35,105,131,99,221,251,184,59,225,187,248,23,187,125,208,93,232,166,114,106,55,3,244,110,204,2,229,51,30,51,
97,239,65,3,148,5,54,152,196,189,40,20,235,20,131,197,186,15,243,57,238,61,35,53,220,141,24,225,161,56,71,7,
84,223,143,177,90,129,229,253,141,126,248,7,134,245,153,170,60,246,131,198,235,145,139,55,194,221,181,206,124,183,179,138,
31,66,207,200,145,210,167,231,115,100,30,30,150,135,177,228,161,189,12,224,17,120,108,114,178,28,183,171,225,120,52,226,
46,107,248,2,143,14,171,119,124,220,27,27,62,238,177,97,25,250,178,63,236,113,148,108,159,155,26,62,254,9,228,183,
223,205,11,95,224,73,203,195,52,211,87,127,146,235,75,61,101,164,172,233,236,76,82,79,147,212,54,234,46,210,44,82,
123,134,231,254,236,166,225,253,184,103,109,53,179,72,254,57,140,184,202,132,217,39,55,124,224,243,195,234,4,247,136,124,
61,53,167,29,191,48,172,206,130,91,32,223,32,189,152,7,242,53,189,148,7,242,141,212,203,198,102,204,148,232,43,197,
80,63,233,87,139,161,126,6,94,99,203,166,214,105,112,113,48,71,223,235,121,139,86,99,97,123,126,14,246,13,44,48,
240,75,236,28,6,62,7,241,166,49,186,125,113,111,17,110,61,126,252,68,47,187,249,144,183,49,127,85,211,107,221,146,
14,159,94,104,206,26,214,5,24,61,131,193,115,182,71,128,105,221,97,113,152,71,26,73,46,34,135,121,148,145,204,50,
143,38,230,250,114,245,161,40,233,99,44,76,81,14,142,205,232,201,166,117,92,70,79,22,115,60,97,214,205,203,200,56,
118,18,129,56,1,136,188,108,104,196,137,70,135,155,128,70,156,100,116,20,32,78,38,68,217,30,160,11,210,58,197,224,
250,230,233,84,95,95,65,186,167,249,250,10,112,167,79,47,228,60,108,166,17,149,94,45,4,47,47,55,196,171,24,57,
87,51,241,170,70,46,195,171,77,235,109,251,130,84,35,131,40,72,187,238,235,200,164,50,234,235,200,32,198,166,177,245,
31,243,214,43,34,90,165,234,140,154,94,137,33,192,220,126,128,161,70,91,237,1,48,99,222,52,135,227,104,54,106,249,
248,249,196,223,172,15,223,215,215,156,94,72,188,127,43,111,85,198,152,200,183,136,184,156,26,250,5,169,77,164,21,237,
91,154,76,141,167,249,65,99,229,89,8,98,135,179,88,237,54,58,28,149,34,164,62,20,13,217,107,31,211,250,132,65,
31,84,119,90,28,33,18,12,241,26,179,181,192,49,173,207,22,20,98,82,88,18,185,137,212,66,28,73,126,195,89,45,
101,176,153,153,224,71,83,50,204,113,98,238,108,249,233,179,94,252,156,32,5,219,21,41,232,43,57,73,146,59,101,36,
7,93,223,156,154,214,103,188,248,206,75,55,174,144,15,171,217,11,80,106,150,242,60,204,153,132,217,72,157,74,235,139,
60,107,218,59,224,134,86,215,75,62,140,60,88,100,117,24,71,178,207,158,198,83,246,216,160,198,214,126,76,237,230,28,
162,172,170,80,14,231,253,157,22,38,15,110,206,156,57,75,234,217,206,206,115,56,230,167,138,102,10,210,46,68,90,218,
58,129,176,43,253,94,209,9,83,10,234,89,68,93,86,175,157,99,160,59,155,40,139,114,88,213,39,232,191,37,200,41,
98,224,179,244,99,121,164,55,98,166,83,207,129,38,130,145,138,22,75,147,233,231,145,140,67,131,15,255,170,143,164,137,
250,27,68,91,123,188,215,28,13,187,67,245,110,88,229,122,195,113,4,244,64,202,228,155,196,95,35,143,143,83,252,111,
17,115,61,159,41,206,97,73,241,228,157,57,216,52,112,119,242,145,235,247,240,201,206,244,175,51,132,119,168,173,220,45,
136,186,244,217,30,17,115,248,94,134,72,115,216,241,33,239,227,104,30,62,49,228,21,3,207,180,39,125,42,207,165,167,
124,165,152,45,47,24,194,110,148,69,212,117,125,166,175,132,43,228,172,33,60,104,105,171,54,85,127,46,241,150,67,252,
88,243,117,231,13,97,219,95,147,168,88,207,119,41,84,149,23,136,239,170,216,21,121,161,171,10,101,114,145,71,162,18,
185,216,213,69,229,113,137,171,139,75,227,82,151,198,101,113,153,171,12,37,113,249,16,118,195,53,73,151,195,21,174,56,
151,194,149,162,212,42,217,50,56,124,131,130,214,198,89,73,199,142,192,3,157,121,124,202,66,58,118,100,17,55,133,236,
81,133,92,220,38,63,26,207,40,102,154,170,190,107,126,76,145,112,189,81,79,199,142,45,18,102,110,114,28,158,235,203,
239,6,2,112,124,222,103,243,145,9,193,63,161,40,117,108,169,143,157,152,43,205,155,160,96,39,39,229,229,14,210,92,
151,99,39,227,37,200,252,220,9,64,114,74,94,254,57,1,9,56,53,79,5,87,153,66,156,134,183,65,53,171,221,107,
201,160,211,148,141,203,242,178,143,214,47,139,126,78,9,215,20,17,160,186,217,92,168,132,9,97,220,234,52,35,88,241,
15,208,207,85,58,100,72,26,33,14,162,215,235,17,182,106,232,199,194,196,88,134,231,51,67,209,100,35,73,147,69,128,
20,132,90,28,37,8,140,33,56,139,18,99,201,168,213,193,81,175,40,93,12,191,26,237,106,151,213,47,78,191,22,109,
135,228,114,44,129,116,35,145,232,80,92,95,146,126,174,8,21,100,159,13,117,169,18,44,132,136,61,171,137,75,151,112,
118,69,156,56,167,41,9,66,34,97,221,108,153,18,191,55,47,115,34,249,134,189,108,9,231,37,196,237,137,140,236,114,
248,184,8,67,126,29,251,229,113,125,121,34,44,219,30,9,105,216,162,223,181,94,53,93,129,40,203,11,74,53,150,180,
21,13,45,233,181,196,94,223,74,248,46,51,84,172,140,204,242,207,145,184,59,162,251,240,42,68,94,162,22,139,94,189,
106,9,1,168,181,97,110,146,23,178,26,74,13,145,174,89,116,117,20,142,218,189,215,65,191,215,64,30,187,112,45,21,
101,77,228,71,108,252,105,218,90,68,91,90,122,125,244,101,233,218,208,92,237,85,196,175,117,192,69,183,224,219,251,113,
186,46,52,224,196,0,185,184,13,190,237,150,198,235,33,175,141,118,189,209,110,164,83,235,67,64,108,246,136,173,41,84,
40,255,183,1,190,162,69,62,111,143,131,15,130,84,130,182,164,67,109,132,71,89,166,149,209,246,240,177,181,40,217,16,
124,93,101,130,184,17,18,80,247,204,41,245,141,185,140,227,116,200,162,13,3,211,140,71,165,214,218,38,40,115,245,59,
238,110,138,218,100,23,133,175,223,197,237,0,153,236,181,233,191,205,196,183,164,209,40,41,155,43,146,103,63,74,209,70,
64,147,111,232,41,218,230,104,133,104,52,48,31,138,184,5,55,205,94,183,30,86,13,114,75,72,143,199,77,234,140,154,
182,21,55,87,253,100,143,34,111,141,230,106,189,228,227,169,223,134,216,235,121,207,1,121,144,109,81,147,220,1,169,43,
71,219,161,92,43,81,53,236,37,209,246,248,222,46,154,227,14,40,25,83,159,59,66,4,205,142,155,213,78,244,107,177,
104,178,74,238,211,7,209,153,71,163,184,21,209,183,87,135,140,196,135,160,96,44,110,197,148,16,101,102,103,84,178,27,
123,126,23,144,164,191,86,19,113,233,119,69,49,240,237,216,148,143,225,45,160,254,177,27,183,104,204,0,241,44,214,238,
16,154,128,83,54,166,58,216,30,0,160,162,89,197,158,168,98,209,141,248,247,94,244,123,245,48,153,34,179,18,179,207,
214,156,210,33,237,247,46,225,152,10,108,71,62,127,31,226,175,22,118,40,157,201,6,117,210,200,98,237,75,172,97,151,
133,155,200,172,172,154,246,28,53,251,17,118,179,118,212,64,145,15,185,50,109,216,82,31,191,63,74,193,139,190,127,0,
209,86,102,237,46,253,64,88,39,135,70,26,21,243,32,54,189,162,77,114,97,28,12,130,12,200,205,136,67,96,10,16,
36,121,60,108,194,72,166,241,161,40,19,93,161,42,95,134,127,24,90,165,178,239,212,130,43,81,58,17,69,237,195,209,
14,248,219,66,114,189,57,140,11,57,199,173,70,122,4,202,48,163,143,19,63,146,88,27,231,23,47,190,2,42,136,142,
195,200,245,163,8,90,82,63,192,204,23,59,26,223,87,141,155,100,13,133,39,115,12,219,103,225,212,48,253,88,244,62,
182,125,141,182,22,59,78,27,68,69,57,30,205,172,26,119,187,81,210,137,219,28,153,232,4,30,157,146,148,211,76,78,
4,0,5,67,182,137,47,75,167,241,73,108,48,113,48,84,36,120,50,91,231,168,153,134,90,237,41,40,12,253,141,21,
154,202,69,108,29,169,191,156,202,237,86,89,193,202,212,105,168,112,117,178,136,40,74,234,116,124,17,15,153,146,16,178,
209,170,97,176,173,50,161,130,79,4,194,38,86,145,114,130,42,72,253,26,173,149,248,117,113,53,21,178,218,79,132,198,
229,204,128,44,102,189,196,47,211,107,49,234,180,154,55,10,27,229,10,218,236,49,176,141,168,234,56,138,221,32,246,186,
142,180,143,152,199,67,70,175,106,61,42,49,31,67,29,147,108,201,166,48,110,220,68,91,202,83,112,190,190,205,3,118,
156,26,77,177,42,63,91,81,7,102,85,245,97,147,245,182,85,32,103,16,100,3,5,113,178,111,163,186,238,183,11,142,
201,78,146,249,118,31,145,18,162,92,152,19,131,235,161,119,245,203,142,129,142,19,116,77,39,79,54,126,2,92,63,75,
230,49,15,244,204,252,236,216,50,83,54,44,147,27,45,183,0,195,108,167,27,85,241,42,251,153,248,145,244,170,213,40,
170,37,103,177,127,41,57,118,59,252,48,24,10,101,51,206,70,190,61,9,243,205,231,128,235,137,25,238,185,104,3,218,
193,144,74,206,115,136,82,246,124,30,158,196,35,37,113,253,2,182,1,234,181,145,184,126,161,114,66,194,33,141,185,72,
123,172,67,22,242,226,146,156,136,241,47,251,59,46,41,233,137,106,134,119,41,241,134,244,208,98,210,112,154,220,101,118,
217,59,137,58,176,203,97,249,141,6,21,180,78,243,175,40,241,115,44,70,56,131,184,18,21,198,11,8,132,184,10,217,
86,63,188,11,2,87,139,254,43,121,236,96,93,195,46,159,112,55,149,161,191,22,99,141,94,120,108,140,54,224,87,198,
245,235,74,38,186,131,61,38,168,108,92,143,190,154,21,179,33,55,192,59,81,247,124,195,206,141,246,207,94,231,38,30,
70,172,247,209,111,134,145,80,4,118,46,110,177,41,52,38,68,201,173,176,176,230,108,141,237,148,127,4,77,84,179,98,
227,99,223,134,74,87,12,199,35,191,189,164,163,186,152,243,189,154,123,7,15,79,146,43,70,155,59,237,60,99,235,249,
46,16,212,209,91,124,196,221,200,178,34,240,71,220,99,83,248,35,238,229,206,116,134,138,84,102,114,122,31,74,72,158,
1,11,171,243,239,71,171,23,39,200,232,215,3,194,59,196,67,117,244,235,65,216,92,188,178,71,255,63,4,78,152,36,
17,251,132,15,195,111,108,197,52,38,38,143,208,191,139,164,221,94,244,40,104,228,135,146,51,249,24,44,155,116,87,236,
211,169,234,236,89,175,219,166,209,176,25,61,94,226,183,226,220,183,147,129,147,52,15,254,4,143,195,166,47,211,80,244,
100,73,46,212,33,7,79,57,124,206,202,211,68,218,154,79,92,112,49,12,154,210,51,104,242,218,226,32,164,25,229,61,
106,114,147,127,86,244,98,105,111,92,222,115,104,231,212,21,91,120,3,186,87,25,237,198,84,124,113,253,121,180,115,123,
206,233,65,94,224,49,41,35,102,183,243,23,225,166,246,81,97,99,95,130,237,178,250,203,203,40,36,213,191,94,209,93,
187,21,118,94,197,24,70,198,132,220,59,242,127,48,191,152,215,67,89,13,145,107,212,109,76,190,6,69,60,141,162,226,
34,242,235,244,123,225,201,184,251,6,234,188,77,211,174,55,65,160,156,188,133,214,102,207,9,69,84,159,110,245,109,84,
137,27,137,225,163,108,53,121,202,108,77,224,62,198,99,181,67,141,187,31,231,226,100,162,61,153,251,4,178,37,200,108,
113,62,201,230,92,30,187,86,237,252,83,232,53,118,195,255,116,73,95,247,145,148,207,148,236,89,55,119,155,207,162,17,
87,226,137,180,17,125,174,164,222,18,149,69,77,243,60,172,174,224,25,87,241,134,175,154,183,124,190,164,222,222,154,17,
250,5,225,107,201,215,96,93,222,23,225,164,201,147,236,25,230,151,96,96,220,57,150,180,23,95,198,215,171,93,88,85,
114,95,65,33,187,68,42,228,175,150,56,230,20,183,120,49,62,124,173,100,38,192,106,68,248,58,28,86,107,82,172,138,
253,27,162,68,153,206,229,254,77,216,132,78,35,173,142,81,95,155,255,45,228,80,52,65,108,157,88,147,245,111,163,26,
141,71,161,162,220,188,3,1,199,131,80,156,119,145,3,222,49,112,93,195,239,192,50,27,186,45,251,221,18,159,0,81,
105,216,211,15,27,246,61,192,156,52,109,164,150,255,190,249,22,143,243,3,84,82,145,246,31,162,27,216,76,101,66,126,
228,51,148,253,248,49,70,7,223,61,209,125,249,39,14,87,202,104,238,79,75,252,60,186,222,209,203,27,65,127,198,30,
67,108,237,250,229,142,162,63,135,170,28,53,182,79,240,11,168,202,87,99,195,126,89,114,94,151,179,28,126,227,148,253,
42,83,11,185,176,95,195,44,106,43,156,11,249,13,123,8,202,24,231,66,126,139,70,3,106,214,192,254,14,227,84,222,
130,161,7,253,189,42,197,254,54,250,15,4,155,59,128,58,45,243,71,244,82,61,28,69,205,102,163,147,52,146,63,97,
180,160,254,143,45,41,59,2,166,226,255,25,70,91,191,238,171,131,82,41,246,95,136,189,142,245,86,111,6,240,87,152,
43,179,152,170,226,29,225,102,170,73,140,102,152,241,252,232,255,8,186,163,15,117,198,207,144,74,91,172,154,102,132,255,
70,194,187,250,75,183,179,83,241,119,116,0,95,24,70,157,159,255,155,134,49,245,185,152,159,146,214,247,216,199,205,77,
92,34,254,193,61,217,227,241,112,78,204,127,230,149,17,54,31,50,89,76,254,85,194,65,40,53,50,247,41,204,127,19,
112,123,23,56,104,57,252,135,68,119,246,150,174,103,165,224,191,236,159,58,162,178,24,254,199,62,120,142,106,201,127,31,
85,176,0,45,90,236,35,86,194,81,185,100,158,140,53,58,115,202,188,163,24,182,34,234,202,188,174,189,80,25,235,41,
77,26,50,176,140,200,199,133,62,64,164,69,199,226,94,18,45,92,22,47,47,234,195,137,139,148,213,203,139,154,180,104,
89,44,88,206,195,168,51,30,45,86,198,106,48,165,214,17,191,23,47,227,2,180,216,231,111,71,75,64,161,184,160,16,
225,254,228,232,146,101,94,1,226,171,8,130,178,20,244,137,216,172,205,56,238,46,93,214,203,215,252,123,25,250,189,162,
12,126,45,229,186,113,103,89,162,174,32,169,66,61,17,151,67,102,17,217,218,224,150,71,114,32,105,208,10,208,167,7,
106,181,135,188,34,68,165,241,148,49,113,86,34,210,194,228,34,173,92,198,45,193,104,20,77,109,21,250,127,49,12,183,
113,119,85,250,119,37,115,81,157,172,96,220,165,182,185,26,200,157,56,225,165,38,26,158,107,152,136,197,221,213,203,88,
118,110,68,19,181,48,13,165,177,95,131,104,171,117,154,88,157,142,229,134,61,191,215,66,217,89,19,112,125,220,73,208,
214,66,45,77,32,54,237,218,40,98,170,175,238,40,205,121,146,117,24,171,63,145,3,251,174,139,226,177,74,130,137,235,
33,107,78,153,49,121,253,50,34,149,57,5,204,244,33,20,20,116,200,72,138,98,73,123,3,162,174,34,209,14,163,132,
236,213,17,109,160,140,255,146,22,185,233,27,150,249,97,106,211,118,212,34,166,223,85,169,29,39,27,161,29,196,29,46,
183,249,209,212,198,200,45,249,129,73,132,33,25,75,148,156,185,97,164,63,137,53,197,208,196,197,29,170,196,147,155,16,
99,9,146,227,115,8,155,210,143,181,251,92,235,9,136,191,78,191,123,60,155,225,227,157,212,161,109,46,90,115,37,106,
83,251,136,120,22,57,2,66,117,138,154,113,141,122,83,35,157,218,28,185,70,95,13,197,193,105,234,39,117,42,136,45,
144,185,100,170,133,181,217,169,45,33,148,198,248,238,110,175,29,247,210,173,202,236,31,83,3,99,71,87,12,222,91,163,
229,82,143,23,203,138,33,245,176,109,184,92,17,223,96,91,244,145,42,37,64,77,166,130,157,5,235,119,210,104,207,223,
30,159,23,118,200,207,237,181,171,114,151,72,220,98,28,106,140,84,162,176,181,3,1,54,200,7,80,219,196,27,171,8,
148,183,35,161,134,242,81,96,139,49,114,167,98,85,12,18,123,70,31,36,84,169,47,138,103,7,31,42,99,79,165,24,
54,47,78,119,158,33,61,49,51,223,165,56,61,25,183,141,231,145,187,22,127,161,132,81,138,187,17,104,253,130,194,194,
162,3,90,239,238,132,41,231,99,112,158,89,227,246,152,161,72,25,184,39,129,54,236,3,210,26,247,154,1,168,221,188,
189,203,188,137,82,8,180,125,189,125,138,149,90,15,149,132,237,104,95,2,110,148,15,180,223,28,33,228,126,132,12,250,
230,211,137,142,190,63,193,55,235,3,247,143,187,30,80,230,237,141,62,181,168,75,236,64,88,164,124,168,94,86,209,78,
198,65,197,77,77,236,54,112,27,58,184,184,24,68,211,230,8,49,100,239,211,67,102,168,124,86,122,104,113,75,50,57,
164,86,121,88,113,11,215,239,195,80,209,31,94,252,193,156,166,19,109,255,136,226,79,145,203,76,202,235,56,178,184,79,
212,56,30,3,21,204,81,197,95,34,147,22,197,114,244,12,157,158,20,30,83,92,19,42,99,84,36,199,22,183,92,235,
77,27,42,148,227,102,104,143,94,184,253,227,251,117,179,24,193,98,101,131,57,161,79,6,184,193,40,224,137,197,45,86,
173,147,40,232,73,197,245,76,159,172,97,39,23,87,157,236,3,10,121,74,223,178,76,198,98,54,122,167,246,107,171,49,
223,197,15,107,167,21,171,210,86,54,236,158,62,67,179,231,237,194,176,216,66,169,26,166,146,129,135,212,72,42,125,186,
72,212,52,184,106,113,117,240,58,147,6,214,138,21,206,227,99,15,18,23,205,104,104,52,180,94,92,31,226,97,61,148,
51,119,147,209,98,164,88,136,210,200,177,98,164,88,112,210,169,55,8,57,55,31,233,76,235,181,192,188,226,254,44,206,
175,82,195,153,223,191,207,115,22,154,112,188,242,49,11,192,111,245,113,60,240,137,66,75,187,216,104,97,229,77,236,59,
171,246,28,207,48,8,234,197,143,206,12,246,72,237,1,159,209,167,115,106,91,46,50,218,45,78,91,89,55,1,76,8,
184,86,129,71,134,153,27,177,215,44,24,74,201,209,47,46,212,184,21,141,134,227,197,185,160,175,30,51,102,103,162,248,
203,162,78,210,176,75,117,178,184,176,144,97,141,155,42,78,155,243,166,129,11,138,63,130,51,121,38,102,96,188,46,163,
99,97,157,5,155,144,89,181,54,198,121,65,99,116,1,205,118,197,195,110,101,14,76,20,247,80,43,42,220,12,77,11,
206,134,107,92,193,21,122,145,216,57,101,156,218,179,79,21,203,135,144,27,181,26,250,111,156,158,11,111,156,102,217,98,
39,69,138,157,87,150,59,4,141,118,143,38,202,226,171,88,90,240,207,199,24,86,35,147,83,12,185,0,243,180,168,69,
159,138,160,10,130,118,97,153,15,202,181,244,132,81,144,47,42,231,134,220,150,209,115,156,220,95,92,230,115,113,60,187,
103,217,75,48,171,68,24,173,110,91,92,99,165,57,145,100,93,138,178,24,139,154,45,249,251,50,116,70,125,69,204,153,
141,89,47,105,93,94,182,182,206,116,232,114,212,194,21,24,154,42,88,190,80,33,240,148,88,55,29,51,47,225,92,137,
100,169,52,98,153,236,85,152,91,209,24,23,147,17,230,117,109,166,94,13,234,216,84,146,10,131,36,169,215,32,139,124,
217,137,131,229,55,82,92,122,234,244,210,161,177,145,116,170,163,100,175,45,66,53,109,212,117,176,95,29,154,49,55,112,
175,177,215,108,142,112,104,106,9,21,152,235,209,60,28,76,175,227,34,110,16,53,205,107,255,213,94,23,103,47,85,59,
174,199,221,22,102,182,55,150,113,144,49,102,159,54,26,81,237,93,162,110,42,182,4,176,66,55,99,234,86,139,170,13,
94,144,140,176,74,143,157,10,83,137,183,96,94,216,233,70,227,13,52,178,78,56,26,221,138,229,128,118,52,153,242,175,
143,160,35,116,186,184,214,155,84,69,172,64,150,187,13,116,170,34,170,91,135,126,187,154,42,59,49,63,228,75,4,113,
60,255,142,242,28,241,82,174,195,167,212,196,108,245,206,92,113,243,82,212,93,122,166,93,160,255,110,40,200,2,116,2,
247,228,43,48,41,220,11,247,66,140,148,162,175,168,224,22,34,13,177,152,113,31,234,53,15,164,211,185,191,72,141,72,
73,168,121,0,13,77,110,1,21,39,246,32,154,72,46,74,167,246,80,161,34,59,185,135,117,174,221,176,29,166,244,30,
41,243,106,126,6,33,205,89,167,17,85,163,71,11,180,152,34,124,140,16,171,187,76,157,211,199,205,199,20,101,226,9,
20,93,30,196,206,197,147,69,122,76,54,158,130,53,84,235,73,38,7,79,99,112,180,204,19,219,84,205,125,134,184,91,
88,145,252,177,25,100,69,166,114,211,146,59,101,207,26,25,129,210,66,57,197,36,101,158,43,243,197,1,121,134,24,151,
196,159,47,243,249,82,69,17,139,98,47,224,27,248,117,61,167,90,95,132,17,85,79,248,57,156,151,136,51,146,203,17,
71,185,178,186,94,134,174,110,88,227,49,64,45,50,176,130,87,202,234,21,22,179,238,28,79,114,129,189,90,214,175,176,
100,120,175,65,204,94,146,174,146,107,8,198,200,86,175,23,178,182,121,163,144,181,195,155,133,172,157,222,194,231,242,113,
185,36,237,42,155,54,228,197,213,194,254,164,94,189,124,155,36,182,28,68,194,94,195,252,40,150,16,102,18,18,131,42,
15,92,31,35,252,246,5,120,177,252,221,118,134,72,75,244,227,36,186,109,129,40,214,62,11,5,63,49,72,81,136,141,
13,245,162,18,73,236,56,219,92,42,225,79,245,249,196,130,124,42,209,79,195,31,31,164,10,112,112,248,51,125,202,163,
48,147,16,252,44,9,110,61,187,12,66,236,115,152,204,15,158,222,231,251,124,75,38,149,47,96,30,53,104,107,69,199,
251,34,44,203,44,26,43,100,190,84,54,231,255,235,113,156,126,25,150,134,102,14,189,174,26,163,191,194,78,30,54,92,
36,225,171,232,205,174,23,171,13,226,215,202,124,202,95,28,2,38,155,17,141,71,95,135,67,162,73,188,251,197,182,133,
252,229,110,250,13,135,201,36,193,5,238,155,24,59,114,36,177,126,207,208,228,91,14,194,208,141,142,111,195,131,200,67,
204,139,113,123,253,29,152,81,195,238,210,52,187,21,189,11,51,106,136,244,79,8,242,119,28,114,7,1,226,64,254,46,
151,79,136,43,18,163,188,238,254,61,34,44,82,239,37,209,247,203,114,115,196,242,29,126,80,54,251,32,22,249,135,101,
185,223,225,152,255,31,149,205,126,135,195,248,49,190,10,240,252,72,93,63,65,177,72,185,124,196,79,203,250,105,64,250,
186,78,180,160,209,107,253,12,117,97,111,48,216,246,226,231,248,74,106,86,33,90,83,59,74,146,95,16,97,9,68,110,
195,143,95,210,143,165,194,170,242,73,127,85,22,123,175,85,89,86,246,65,145,95,131,167,124,204,104,178,19,183,141,19,
251,27,204,231,114,159,122,81,183,105,165,77,248,109,89,191,199,231,110,180,120,184,223,193,211,201,62,53,227,161,126,111,
180,185,239,197,120,184,63,192,136,13,146,189,236,246,235,31,73,116,187,1,50,156,149,252,83,97,162,254,203,80,153,243,
107,127,70,223,14,155,33,77,12,248,154,200,95,224,171,39,212,108,120,35,239,175,224,226,92,83,87,112,255,15,190,176,
222,216,19,74,235,228,152,240,219,122,100,53,254,102,74,41,55,14,159,202,206,223,77,37,230,199,223,83,192,105,83,57,
18,152,247,78,213,123,153,100,243,159,51,252,71,217,28,76,178,11,225,159,101,19,96,92,153,57,50,62,84,10,255,42,
155,144,197,98,2,9,142,216,75,253,55,154,123,135,189,50,209,52,255,195,51,27,38,196,52,109,171,215,37,253,191,232,
72,138,46,105,255,43,243,54,44,11,55,163,168,35,201,239,67,69,92,161,185,61,159,146,159,82,83,195,57,1,117,102,
121,117,44,231,244,232,66,1,174,175,56,108,190,39,166,248,31,32,254,58,46,159,79,171,105,192,194,4,88,215,58,17,
167,25,250,196,196,34,1,142,24,22,34,144,220,162,1,78,185,136,187,108,242,40,144,213,169,181,192,98,38,179,18,230,
42,92,60,64,228,225,137,216,62,120,166,153,75,4,8,191,110,49,99,115,28,111,73,226,173,34,20,187,95,183,84,128,
17,39,174,245,154,177,48,239,189,214,210,1,31,194,84,190,49,127,131,242,236,151,65,6,49,215,237,246,236,59,92,90,
221,178,72,135,111,107,240,115,166,169,70,44,7,65,13,183,187,156,56,68,177,188,195,39,215,160,139,147,82,140,227,205,
159,21,2,121,58,184,39,78,131,234,41,248,138,1,150,223,156,171,92,82,13,223,23,36,238,214,60,198,90,68,249,118,
155,216,129,230,123,41,157,144,143,84,242,99,79,157,184,25,173,76,98,219,228,139,241,34,166,122,252,207,151,91,133,228,
134,51,114,124,205,164,93,109,246,106,220,227,198,34,198,174,74,88,83,128,82,73,40,163,122,169,242,92,13,173,147,202,
27,75,66,226,80,130,87,224,171,35,69,183,92,115,95,114,199,28,109,13,180,30,23,43,26,3,31,91,64,55,114,153,
118,19,93,139,216,43,187,108,110,154,107,19,125,85,151,46,183,153,214,33,206,106,190,132,88,79,92,151,88,139,192,131,
88,15,159,39,30,59,112,94,102,211,159,183,62,58,159,117,66,38,169,142,69,173,112,200,94,118,195,71,101,17,157,70,
135,10,123,3,232,207,97,202,19,48,113,187,68,128,13,244,189,81,89,195,214,35,96,226,48,84,153,80,27,123,40,110,
3,173,122,51,154,28,10,171,88,221,19,208,13,81,140,30,84,44,240,51,123,35,228,214,99,195,90,85,34,26,42,54,
46,148,101,246,48,62,198,207,171,125,179,126,19,20,150,7,144,143,83,201,114,221,52,224,227,111,109,247,75,120,147,128,
179,23,160,51,249,124,157,191,205,144,1,159,91,167,194,18,35,113,154,204,205,83,79,78,161,226,143,184,25,108,180,173,
231,22,69,121,111,14,83,234,32,172,39,22,5,100,139,128,253,103,62,4,76,127,34,94,182,60,201,187,37,204,108,78,
112,6,239,112,219,86,168,245,66,152,106,165,91,7,136,190,158,57,45,44,203,85,186,149,205,56,137,106,219,4,88,95,
104,225,156,128,4,109,139,110,153,151,66,206,55,111,71,216,77,10,176,153,175,223,30,6,77,95,178,40,250,132,76,227,
220,129,196,54,44,72,67,197,58,97,165,59,6,214,138,177,19,206,98,39,112,156,170,81,173,234,131,232,233,86,181,91,
172,15,17,107,253,130,116,21,102,231,128,23,237,113,123,131,143,245,114,1,238,130,190,192,95,143,39,61,134,124,246,174,
168,65,171,99,171,75,2,97,211,182,13,187,241,216,64,221,121,84,133,138,70,131,81,247,203,119,87,166,75,15,195,170,
149,236,1,142,24,121,229,6,131,250,182,61,3,188,28,98,56,210,214,237,133,132,178,170,36,119,111,52,251,44,215,26,
195,247,241,18,52,35,248,190,48,24,130,195,77,215,49,202,251,41,131,174,21,11,12,227,247,71,95,176,37,249,24,99,
70,199,1,128,229,232,48,104,214,113,160,209,86,161,25,23,236,89,187,38,103,129,214,112,112,16,193,182,116,180,21,160,
109,204,193,248,12,209,147,134,172,66,224,96,56,201,33,104,65,146,153,45,67,129,57,52,224,224,4,194,157,200,186,87,
135,5,198,183,181,221,170,195,137,30,20,165,203,57,118,250,244,17,72,197,118,188,92,163,114,36,218,128,229,122,185,220,
163,208,112,100,30,44,29,71,7,38,218,155,145,61,6,134,22,222,152,249,10,196,64,51,98,199,194,208,22,2,226,238,
113,232,82,56,110,198,100,249,86,209,241,72,203,37,146,170,19,80,177,182,199,72,109,182,25,118,58,94,138,39,242,72,
237,127,188,92,36,70,116,247,147,144,37,255,243,45,254,201,1,191,164,236,41,176,22,133,112,29,235,148,128,223,128,118,
149,120,152,83,109,140,85,13,92,134,178,199,157,102,215,133,198,40,195,126,122,110,86,244,237,11,1,10,217,11,102,87,
96,60,138,92,5,21,140,82,217,170,182,115,80,205,251,18,47,137,154,103,196,106,113,139,15,181,183,241,60,161,184,134,
76,228,8,185,181,77,29,191,57,229,129,234,104,155,86,92,26,111,228,30,101,67,161,111,58,187,77,115,140,152,91,201,
27,101,121,59,137,254,172,80,56,236,141,25,164,252,43,106,66,106,30,76,161,27,225,192,203,205,124,20,92,30,194,242,
35,154,48,151,73,163,213,128,15,174,140,51,255,106,177,41,137,219,163,221,30,92,50,87,117,59,80,55,69,228,252,92,
93,25,140,225,223,121,49,3,10,6,210,78,192,7,41,178,247,234,237,59,206,232,10,118,101,8,59,170,199,206,46,248,
102,36,21,92,11,159,160,198,179,242,110,161,164,150,65,177,46,243,247,148,233,160,66,32,187,208,227,109,100,91,247,56,
218,174,136,150,83,4,153,128,143,145,105,76,80,138,194,151,185,225,149,83,69,226,70,54,137,162,177,174,135,8,247,16,
49,53,140,216,20,155,17,247,186,146,244,180,27,109,12,20,11,160,36,123,113,201,193,156,25,56,247,145,24,224,62,47,
194,105,157,5,255,45,171,42,7,249,225,128,119,217,172,171,221,52,231,228,208,185,250,154,52,170,196,191,222,237,131,206,
33,208,72,95,53,166,65,138,47,57,23,195,229,76,106,125,161,243,72,104,238,128,201,240,231,157,79,2,91,12,158,10,
203,92,192,19,231,89,36,34,92,213,11,73,108,219,89,38,197,14,241,69,232,184,78,122,86,39,187,24,29,198,215,106,
241,47,65,255,53,194,60,114,243,155,38,35,60,23,183,175,80,93,74,208,77,29,85,253,208,151,185,13,3,80,190,147,
110,146,190,60,211,48,114,64,87,160,84,44,53,252,213,162,239,138,52,229,213,62,166,219,202,174,204,20,103,127,89,157,
198,85,60,196,121,41,42,139,169,76,213,213,4,42,231,104,247,113,215,192,79,42,82,150,205,244,181,128,247,81,235,101,
245,186,188,194,25,228,155,175,47,40,156,25,11,250,6,18,220,59,243,61,78,35,45,204,133,3,187,17,138,102,2,21,
228,202,193,220,132,118,150,233,38,246,221,200,155,81,161,121,8,59,249,91,96,128,250,170,241,109,201,173,48,64,51,169,
245,133,62,2,191,37,219,4,189,164,110,195,148,179,8,101,171,191,29,93,210,6,246,253,130,59,2,190,8,216,31,109,
171,191,19,163,190,213,164,181,166,187,216,195,51,12,91,232,110,228,169,160,193,102,7,236,123,144,167,226,14,145,21,184,
23,73,203,193,187,77,195,81,100,157,247,191,207,154,204,72,158,173,236,126,140,106,5,162,174,151,250,64,224,223,4,117,
124,123,37,244,96,144,9,36,35,166,108,26,241,80,224,68,62,145,51,166,202,148,136,91,255,48,134,116,71,222,3,60,
226,14,139,30,55,175,59,60,154,25,22,7,16,122,44,192,22,27,28,118,236,113,146,208,227,1,191,110,73,243,28,241,
251,137,64,197,168,147,4,219,103,123,18,53,98,129,109,222,83,248,194,140,63,84,233,181,58,83,34,35,79,99,252,209,
151,105,149,181,51,67,138,37,251,12,160,250,82,109,95,232,179,88,67,234,163,213,30,168,158,3,182,143,90,27,251,60,
26,152,167,215,74,246,5,176,61,85,22,251,69,118,94,93,105,91,251,75,1,7,72,113,196,109,254,203,129,125,241,88,
250,146,174,235,253,74,96,95,60,206,133,188,138,182,157,147,11,15,246,26,96,57,153,241,96,175,7,230,166,190,82,250,
70,96,223,222,23,26,222,12,100,108,208,200,76,45,222,10,116,220,84,139,250,118,96,194,196,232,77,32,209,120,216,87,
254,104,96,135,137,201,67,124,12,253,220,214,144,183,138,198,200,143,139,186,183,117,21,98,63,1,163,156,27,64,199,115,
202,62,41,218,105,110,60,29,15,250,169,192,9,137,147,105,49,159,14,188,144,56,25,196,103,68,133,187,26,220,233,206,
103,121,252,203,40,113,65,159,195,228,193,215,227,213,245,231,49,120,101,21,121,168,47,160,203,251,154,236,102,252,69,145,
101,95,141,13,249,18,127,183,188,151,202,199,219,228,185,102,157,223,47,7,38,6,143,60,204,230,67,190,18,224,42,161,
176,126,34,63,95,69,35,212,20,145,129,175,193,66,59,40,187,190,190,142,10,242,36,108,254,55,2,19,85,73,154,14,
137,250,102,160,195,5,91,60,0,191,21,200,240,185,30,253,219,129,29,135,201,213,246,78,128,240,106,138,39,71,25,33,
246,46,177,54,247,89,214,154,97,69,188,20,99,54,61,162,244,59,108,149,205,53,114,20,157,88,32,144,103,204,191,139,
228,116,8,13,57,137,141,112,41,180,243,61,12,5,105,55,164,233,48,162,145,187,71,44,190,31,136,248,173,243,73,219,
15,232,255,165,218,113,91,254,252,33,27,0,62,102,163,227,250,252,200,208,244,37,175,31,163,214,4,77,222,128,249,9,
188,16,250,60,202,100,173,33,54,15,197,183,252,20,78,184,115,213,92,174,156,120,97,115,126,6,83,150,23,101,71,100,
68,193,126,14,88,94,20,30,23,246,11,227,115,229,198,236,113,209,191,228,17,28,7,136,184,18,234,93,117,11,89,92,
86,231,55,158,93,93,191,226,254,227,22,138,179,38,254,107,54,26,118,9,185,206,203,111,80,44,46,95,54,38,87,233,
111,3,14,55,198,137,107,226,239,2,190,249,46,22,219,132,244,239,209,24,156,29,103,125,57,251,15,176,26,250,86,121,
62,230,143,129,29,126,66,220,139,85,219,200,234,58,58,191,61,165,162,89,253,9,74,115,238,42,216,219,138,127,238,143,
97,131,253,23,148,147,87,132,54,255,175,1,31,140,151,241,96,252,245,82,25,105,2,149,225,98,92,187,249,183,160,32,
166,84,165,209,198,145,1,181,187,242,119,204,236,242,112,249,233,78,195,122,72,184,88,162,82,9,190,7,43,33,57,190,
19,251,15,248,31,46,207,118,5,255,89,52,91,200,13,206,248,175,162,217,66,81,192,198,127,195,36,203,212,101,16,125,
191,20,254,131,46,38,214,207,243,202,66,125,227,127,45,31,95,105,82,188,255,17,111,37,113,126,204,150,125,31,102,73,
156,210,200,50,201,112,204,121,247,238,133,230,252,63,100,183,217,149,
};
LoadFromString(map, ZDecompress(data, __countof(data)));
}

View file

@ -21,6 +21,8 @@ IMAGE_ID(CopyLeft)
IMAGE_ID(CopyLeft__UHD)
IMAGE_ID(CopyRight)
IMAGE_ID(CopyRight__UHD)
IMAGE_ID(Indent__UHD)
IMAGE_ID(Indent)
IMAGE_BEGIN_DATA
IMAGE_DATA(120,156,237,219,59,82,195,48,20,133,97,53,52,84,233,104,50,147,150,37,164,163,101,3,212,176,161,172,33,125,54,1)
@ -237,3 +239,17 @@ IMAGE_DATA(143,254,249,209,63,63,250,231,71,255,252,232,175,255,127,157,74,233,1
IMAGE_DATA(44,233,117,29,97,232,167,125,150,246,89,218,103,105,159,165,125,150,246,89,218,103,105,159,165,125,150,246,89,218,103,105)
IMAGE_DATA(159,165,125,150,246,89,218,103,105,159,165,125,150,246,0,0,0,0,0,0,0,0,64,159,79,13,244,113,151,0,0,0)
IMAGE_END_DATA(288, 2)
IMAGE_BEGIN_DATA
IMAGE_DATA(120,156,237,208,91,110,194,64,20,68,65,214,147,85,177,6,246,47,37,255,17,52,126,76,27,143,169,146,230,183,237,123)
IMAGE_DATA(126,238,183,251,13,0,0,0,0,0,0,0,0,96,54,143,199,227,183,189,255,236,53,191,57,147,118,15,253,179,118,19)
IMAGE_DATA(253,179,118,23,253,179,118,27,253,179,118,31,253,179,87,125,70,53,210,63,75,253,71,116,210,63,123,215,127,111,43,253)
IMAGE_DATA(179,37,253,247,244,210,63,91,218,127,107,51,253,179,53,253,183,116,211,63,91,219,127,109,59,253,179,45,253,215,244,211)
IMAGE_DATA(63,219,218,127,105,67,253,179,61,253,151,116,212,63,219,219,255,93,75,253,179,17,253,83,79,253,179,81,253,95,53,213)
IMAGE_DATA(63,27,217,255,89,87,253,179,209,253,255,183,29,213,191,241,159,87,126,250,127,254,233,127,222,167,191,254,87,127,169,155)
IMAGE_DATA(254,253,246,35,251,95,85,179,125,218,255,212,189,103,211,108,159,246,63,113,235,25,53,219,167,253,163,239,60,171,102,251)
IMAGE_DATA(180,127,228,141,103,214,108,159,246,143,186,239,236,154,237,211,254,17,183,205,160,217,62,237,183,239,154,69,179,125,218,111)
IMAGE_DATA(222,52,147,102,251,180,223,186,103,54,205,246,105,191,113,203,140,154,237,211,254,232,59,102,213,108,159,246,71,222,48,179)
IMAGE_DATA(102,251,180,63,234,255,103,215,108,159,246,71,252,251,21,52,219,167,253,17,219,87,208,238,163,127,214,110,163,127,214,238)
IMAGE_DATA(162,127,214,110,162,127,214,238,161,127,214,110,161,63,0,0,0,0,0,0,0,0,124,143,63,152,66,11,252,0,0,0)
IMAGE_END_DATA(352, 1)

View file

@ -9,8 +9,14 @@ namespace Upp {
TextDiffCtrl::TextDiffCtrl()
{
left.SetLeft();
indent.SetImage(DiffImg::Indent());
indent.Tip("Compare indentation");
indent <<= true;
next.SetImage(DiffImg::Next());
next.Tip("Next difference");
prev.SetImage(DiffImg::Prev());
prev.Tip("Previous difference");
left.scroll.y.AddFrame(indent);
left.scroll.y.AddFrame(prev);
left.scroll.y.AddFrame(next);
next << [=] { FindDiff(true); };
@ -70,7 +76,7 @@ static bool SmallDiff(const char *s1, const char *s2)
void TextDiffCtrl::Set(Stream& l, Stream& r)
{
bool ignore_indent = DirDiffDlg::GetIgnoreIndentation(this);
bool ignore_indent = !indent;
Vector<String> ll = GetLineMap(l, ignore_indent);
Vector<String> rl = GetLineMap(r, ignore_indent);
Array<TextSection> sections = CompareLineMaps(ll, rl);
@ -259,6 +265,8 @@ Event<const String&, Vector<LineEdit::Highlight>&, const WString&> DiffDlg::When
DiffDlg::DiffDlg()
{
Icon(DiffImg::Diff());
Add(diff.SizePos());
Sizeable().Zoomable();
diff.InsertFrameLeft(p);
@ -329,6 +337,7 @@ FileDiff::FileDiff(FileSel& fs_)
Icon(DiffImg::Diff());
diff.InsertFrameRight(r);
r <<= THISBACK(Open);
diff.indent << [=] { Finish(); };
}
void FileDiff::Set(const String& f)

View file

@ -11,12 +11,11 @@ DirDiffDlg::DirDiffDlg()
hidden.SetLabel(t_("Hidden"));
split_lines.SetLabel(t_("Split long lines"));
ignore_indentation.SetLabel(t_("Ignore indentation"));
added.SetColor(Green()).SetLabel(t_("New"));
modified.SetLabel(t_("Modified"));
removed.SetColor(Red()).SetLabel(t_("Removed"));
recent <<= Null;
recent.Add(Null, "All");
recent.Add(1, "1 Day");
@ -27,22 +26,21 @@ DirDiffDlg::DirDiffDlg()
recent.Add(60, "3 Months");
recent.Add(180, "6 Months");
recent.Add(365, "1 Year");
compare.SetLabel(t_("Compare"));
int bcy = max(cy, compare.GetStdSize().cy);
files_pane.Add(dir1.TopPos(0, cy).HSizePos());
files_pane.Add(dir2.TopPos(cy + div, cy).HSizePos());
files_pane.Add(hidden.TopPos(2 * cy + 2 * div, bcy).LeftPos(0, bcx));
files_pane.Add(split_lines.TopPos(2 * cy + 2 * div, bcy).LeftPosZ(55, 100));
files_pane.Add(ignore_indentation.TopPos(2 * cy + 2 * div, bcy).LeftPosZ(152, 120));
files_pane.Add(split_lines.TopPos(2 * cy + 2 * div, bcy).LeftPosZ(52, 100));
files_pane.Add(added.TopPos(3 * cy + 3 * div, bcy).LeftPosZ(2, 60));
files_pane.Add(modified.TopPos(3 * cy + 3 * div, bcy).LeftPosZ(52, 70));
files_pane.Add(removed.TopPos(3 * cy + 3 * div, bcy).LeftPosZ(128, 80));
files_pane.Add(recent.TopPos(3 * cy + 3 * div, bcy).RightPos(0, bcx + Zx(8)));
files_pane.Add(extension.TopPos(3 * cy + 3 * div, bcy).RightPos(bcx + Zx(8) + DPI(8), bcx));
removed = 1;
added = 1;
modified = 1;
@ -50,7 +48,7 @@ DirDiffDlg::DirDiffDlg()
clearFind.SetLabel("X");
clearFind.RightPosZ(1, 16).VSizePosZ(1, 1);
find.AddChild(&clearFind);
files_pane.Add(compare.TopPos(2 * cy + 2 * div, bcy).RightPos(0, bcx));
files_pane.Add(files.VSizePos(3 * cy + bcy + 4 * div, Zy(24)).HSizePos());
files_pane.Add(find.BottomPosZ(4, 19).HSizePosZ());
@ -59,19 +57,19 @@ DirDiffDlg::DirDiffDlg()
files_diff.Set(files_pane, diff);
files_diff.SetPos(2000);
files_diff.SetMinPixels(0, Zx(256));
Sizeable().Zoomable();
seldir1.Attach(dir1);
seldir2.Attach(dir2);
seldir1.Title("First directory to compare");
seldir2.Title("Second directory to compare");
compare <<= THISBACK(Compare);
dir1 <<= THISBACK(ClearFiles);
dir2 <<= THISBACK(ClearFiles);
modified << [=] { ShowResult(); };
removed << [=] { ShowResult(); };
added << [=] { ShowResult(); };
@ -79,7 +77,7 @@ DirDiffDlg::DirDiffDlg()
extension << [=] { ShowResult(); };
recent << [=] { ShowResult(); };
clearFind << [=] { find.Clear(); ShowResult();};
files.WhenSel = THISBACK(File);
diff.InsertFrameLeft(left);
@ -98,7 +96,7 @@ DirDiffDlg::DirDiffDlg()
right.Add(copyleft.VSizePos().LeftPosZ(0, 70));
right.Add(removeright.VSizePos().LeftPosZ(74, 70));
right.Add(revertright.VSizePos().LeftPosZ(148, 70));
auto SetupCopy = [=](Button& copy, bool left) {
copy.SetImage(left ? DiffImg::CopyLeft() : DiffImg::CopyRight());
copy.SetLabel("Copy");
@ -106,7 +104,7 @@ DirDiffDlg::DirDiffDlg()
copy.Disable();
copy << [=] { Copy(left); };
};
SetupCopy(copyleft, true);
SetupCopy(copyright, false);
@ -124,39 +122,39 @@ DirDiffDlg::DirDiffDlg()
}
};
};
SetupRevert(revertleft, &dir1);
SetupRevert(revertright, &dir2);
auto SetupRemove = [=](Button& remove, TextCompareCtrl *text, EditString *dir)
{
remove.SetLabel("Remove");
remove.Tip("F8");
remove.SetImage(CtrlImg::remove());
remove.Disable();
remove << [=] {
String path = AppendFileName(~*dir, files.GetCurrentName());
Backup(path);
SaveFile(path, text->RemoveSelected(HasCrs(path)));
Refresh();
};
text->WhenSel << [=, &remove] {
remove.Enable(text->IsSelection());
};
};
SetupRemove(removeleft, &diff.left, &dir1);
SetupRemove(removeright, &diff.right, &dir2);
split_lines << [=] { File(); };
ignore_indentation << [=] { File(); };
diff.indent << [=] { File(); };
Icon(DiffImg::DirDiff());
WhenIcon = [](const char *path) -> Image { return NativePathIcon(path); };
Title("Compare directories");
};
@ -182,23 +180,19 @@ void DirDiffDlg::GatherFilesDeep(VectorMap<String, Time>& files, const String& b
bool DirDiffDlg::FileEqual(const String& f1, const String& f2, int& kind)
{
FileIn in1(f1);
in1.SetBufferSize(1024*256);
in1.SetBufferSize(1024*256);
FileIn in2(f2);
if(in1 && in2) {
kind = NORMAL_FILE;
if(in1.GetSize() != in2.GetSize())
return false;
while(!in1.IsEof() && !in2.IsEof()) {
String a = in1.Get(64*1024);
String b = in2.Get(64*1024);
if(a != b)
while(!in1.IsEof() && !in2.IsEof())
if(in1.GetLine() != in2.GetLine())
return false;
}
return true;
}
else
kind = in1 ? DELETED_FILE : NEW_FILE;
return false;
}
@ -213,12 +207,12 @@ void DirDiffDlg::Compare()
removeleft.Disable();
removeright.Disable();
files.Clear();
SortByKey(fs);
Progress pi(t_("Comparing.."));
pi.SetTotal(fs.GetCount());
list.Clear();
Index<String> exts;
for(int i = 0; i < fs.GetCount(); i++) {
@ -241,13 +235,13 @@ void DirDiffDlg::Compare()
m.kind = kind;
}
}
extension.Clear();
extension.Add(Null, "*.*");
for(int ii : GetSortOrder(exts))
extension.Add(exts[ii], "*" + exts[ii]);
extension.Enable();
ShowResult();
}
@ -346,8 +340,8 @@ void DirDiffDlg::File()
};
diff.Set(Null, Null);
String f1 = LoadFile(p1);
String f2 = LoadFile(p2);
f1 = LoadFile(p1);
f2 = LoadFile(p2);
if(split_lines) {
f1 = SplitLines(f1);
f2 = SplitLines(f2);
@ -396,10 +390,11 @@ void DirDiffDlg::Copy(bool left)
}
if(PromptYesNo("Copy [* \1" + src + "\1]&to [* \1" + dst + "\1] ?")) {
Backup(dst);
FileIn in(src);
FileOut out(dst);
CopyStream(out, in);
out.Close();
String src_data = f1;
String dst_data = f2;
if(left)
Swap(src_data, dst_data);
SaveFile(dst, src_data);
Refresh();
}
}

View file

@ -193,6 +193,7 @@ public:
struct TextDiffCtrl : public Splitter {
TextCompareCtrl left;
TextCompareCtrl right;
FrameTop<ButtonOption> indent;
FrameTop<Button> next, prev;
int cl = 0; // to lock WhenCursor -> SetLine
@ -292,7 +293,6 @@ protected:
WithDropChoice<EditString> dir2;
Option hidden;
Option split_lines;
Option ignore_indentation;
Button compare;
Option removed, added, modified;
@ -307,6 +307,8 @@ protected:
bool editable_left = true;
bool editable_right = true;
String f1, f2;
int lmid = 0; // for git support
int rmid = 0; // for git support
@ -357,7 +359,7 @@ public:
int GetLMid() const { return lmid; }
int GetRMid() const { return rmid; }
static bool GetIgnoreIndentation(Ctrl *q) { auto *p = q->GetAscendant<DirDiffDlg>(); return p && p->ignore_indentation; }
static bool GetIgnoreIndentation(Ctrl *q) { auto *p = q->GetAscendant<DirDiffDlg>(); return p && !p->diff.indent; }
DirDiffDlg();
};

View file

@ -297,11 +297,39 @@ void AssistEditor::SyncAssist()
Buffer<bool> found(assist_item.GetCount(), false);
VectorMap<String, int> found_name; // to accelerate resolving duplicities
Index<String> cpp;
bool iml1 = false;
bool iml2 = false;
bool iml3 = false;
for(int i = 0; i < assist_item.GetCount(); i++) {
const AssistItem& m = assist_item[i];
if(m.pretty == "Upp::Iml& Iml()")
iml1 = true;
if(m.pretty == "Upp::Image Get(int i)")
iml2 = true;
if(m.pretty.EndsWith("::COUNT"))
iml3 = true;
}
bool isiml = iml1 && iml2 && iml3;
auto ImlIgnore = [&](const String& name) {
if(!isiml)
return false;
static String ie[] = {
"__DARK", "__UHD", "__100", "__150", "__200", "__250", "__300", "__350", "__600"
};
for(const String& s : ie)
if(name.EndsWith(s))
return true;
return false;
};
for(int pass = 0; pass < 2; pass++) {
for(int i = 0; i < assist_item.GetCount(); i++) {
const AssistItem& m = assist_item[i];
if(!found[i] &&
(typei < 0 || m.typei == typei) &&
(typei < 0 || m.typei == typei) && !ImlIgnore(m.name) &&
((pass ? m.uname.StartsWith(uname) : m.name.StartsWith(name)) || m.kind == KIND_ERROR)) {
int q = found_name.Find(m.name);
if(q >= 0) { // resolve duplicities

View file

@ -87,10 +87,12 @@ int PaintCpp(Draw& w, const Rect& r, int kind, const String& name, const String&
#endif
Vector<ItemTextPart> n = ParsePretty(name, pretty);
bool hasdecltype = pretty.StartsWith("decltype");
int count = n.GetCount();
if(retval_last) {
for(int i = 0; i < n.GetCount(); i++)
if(findarg(n[i].type, ITEM_NAME, ITEM_OPERATOR) >= 0 || pretty[n[i].pos] == '(') {
if(findarg(n[i].type, ITEM_NAME, ITEM_OPERATOR) >= 0 ||
pretty[n[i].pos] == '(' && !hasdecltype) {
PaintText(w, x, y, pretty, n, i, count - i, focuscursor, ink, false);
count = i;
while(count) { // remove trailing spaces

View file

@ -208,6 +208,27 @@ String DecoratedItem(const String& name, const String& pretty)
return qtf + "]";
}
String RemoveQualifications(const char *s)
{
String r;
const char *s0 = s;
while(*s) {
if(iscib(*s)) {
r.Cat(s0, s);
s0 = s;
while(iscid(*s) || *s == ':') {
if(*s == ':')
s0 = s + 1;
s++;
}
}
else
s++;
}
r.Cat(s0, s);
return r;
}
String CreateQtf(const AnnotationItem& m, const String& lang, bool onlyhdr = false)
{
String qtf;
@ -216,7 +237,8 @@ String CreateQtf(const AnnotationItem& m, const String& lang, bool onlyhdr = fal
qtf << "[s4 &]";
String st = str ? "[s2;" : "[s1;";
String k = st + ":" + DeQtf(m.id) + ": ";
String pretty = m.pretty;
String pretty = RemoveQualifications(m.pretty);
if(IsStruct(m.kind)) {
pretty = m.pretty0; // because otherwise it is just a name
int q = pretty.ReverseFind("{");

View file

@ -32,7 +32,7 @@ DirRepoDiffDlg::DirRepoDiffDlg()
for(String s : git)
l.Add(s, "git " + s);
AddSelectGit(l);
branch[i] << [=] { Revs(i); };
};
@ -53,8 +53,7 @@ DirRepoDiffDlg::DirRepoDiffDlg()
}
files_pane.Add(hidden.TopPos(y, bcy).LeftPos(0, bcx));
files_pane.Add(split_lines.TopPos(y, bcy).LeftPosZ(55, 100));
files_pane.Add(ignore_indentation.TopPos(y, bcy).LeftPosZ(152, 120));
files_pane.Add(split_lines.TopPos(y, bcy).LeftPosZ(52, 100));
files_pane.Add(compare.TopPos(y, bcy).RightPos(0, bcx));
y += bcy + div;
@ -67,19 +66,19 @@ DirRepoDiffDlg::DirRepoDiffDlg()
files_pane.Add(files.VSizePos(y, Zy(24)).HSizePos());
files_pane.Add(find.BottomPosZ(6, 19).HSizePosZ());
extension.Disable();
Mode(0);
Mode(1);
compare ^= [=] { Compare(); };
dir1 << [=] { SyncCompare(); };
dir2 << [=] { SyncCompare(); };
session_id = String() << Random() << Random() << Random() << Random();
branch[0].SetDropLines(32);
branch[1].SetDropLines(32);
r[0].SetDropLines(32);
@ -127,10 +126,10 @@ void DirRepoDiffDlg::Mode(int i)
LoadBranches(branch[i], ~~dl);
Revs(i);
}
ClearFiles();
SyncCompare();
editable_left = !IsGit(0);
editable_right = !IsGit(1);
}
@ -175,4 +174,4 @@ void DirRepoDiffDlg::Compare()
};
if(Clone(0, dir1, lmid) && Clone(1, dir2, rmid))
DirDiffDlg::Compare();
}
}

View file

@ -222,7 +222,10 @@ bool RepoSync::ListGit(const String& path)
if(h.GetCount() > 3) {
if(!h.TrimEnd("/"))
h.TrimEnd("\\");
String file = AppendFileName(path, h.Mid(3));
String n = h.Mid(3);
n.TrimStart("\"");
n.TrimEnd("\"");
String file = AppendFileName(path, n);
actions = true;
int action = String("M.?DR").Find(h[1]);
if(action < 0 || h[0] != '?' && h[0] != ' ')

View file

@ -970,7 +970,7 @@ void Ide::Diff()
DoDiff(&diffdlg);
}
void Ide::DiffWith(const String& path)
void Ide::DiffWith(const String& path, const Image& icon)
{
#ifdef CPU_64
int64 maxsize = 2000*1024*1024;
@ -984,6 +984,7 @@ void Ide::DiffWith(const String& path)
return;
}
FileDiff& diffdlg = CreateNewWindow<FileDiff>(AnySourceFs());
diffdlg.Icon(icon);
diffdlg.Set(editfile, path);
DoDiff(&diffdlg);
}

View file

@ -857,7 +857,7 @@ public:
void Print();
void DoDiff(FileDiff *diffdlg);
void Diff();
void DiffWith(const String& path);
void DiffWith(const String& path, const Image& icon);
void DiffFiles(const char *lname, const String& l, const char *rname, const String& r);
String LoadConflictFile(const String& n);

View file

@ -106,6 +106,7 @@ IMAGE_ID(svn_dir)
IMAGE_ID(svn_dir__DARK)
IMAGE_ID(svn_dir__UHD)
IMAGE_ID(svn_dir__UHD__DARK)
IMAGE_ID(DiffClip__UHD)
IMAGE_ID(DiffLog__UHD)
IMAGE_ID(DiffNext__UHD)
IMAGE_ID(Diff__UHD)
@ -161,6 +162,7 @@ IMAGE_ID(Navigator)
IMAGE_ID(opposite)
IMAGE_ID(HelpAll)
IMAGE_ID(show)
IMAGE_ID(DiffClip)
IMAGE_ID(Go_forward)
IMAGE_ID(star)
IMAGE_ID(CurrentOK)
@ -4255,6 +4257,30 @@ IMAGE_DATA(122,253,55,101,75,248,147,77,6,213,49,24,178,37,253,111,71,50,72,92,2
IMAGE_DATA(229,146,65,11,54,217,100,240,59,77,212,48,39,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
IMAGE_END_DATA(2208, 10)
IMAGE_BEGIN_DATA
IMAGE_DATA(120,156,237,221,49,110,219,64,16,133,97,30,38,85,14,224,36,149,174,224,218,128,19,31,66,141,78,96,55,134,125,140)
IMAGE_DATA(20,46,82,164,79,151,155,36,77,0,193,85,82,218,102,65,123,33,236,48,92,238,44,103,118,247,31,96,42,11,228,236)
IMAGE_DATA(247,164,145,224,134,239,175,134,171,129,162,40,106,170,243,139,47,79,177,182,158,171,245,146,220,201,161,124,45,181,39,3)
IMAGE_DATA(253,90,226,75,6,249,165,241,190,230,179,145,94,218,59,165,247,29,117,125,57,60,197,58,117,135,151,246,151,90,154,191)
IMAGE_DATA(164,153,102,149,240,79,157,1,127,252,173,170,85,255,221,110,87,69,151,240,79,157,1,127,253,239,223,45,236,91,240,191)
IMAGE_DATA(249,60,68,251,231,221,59,247,254,227,140,210,252,225,61,142,199,163,219,158,243,207,205,224,246,254,199,108,231,218,227,191)
IMAGE_DATA(46,7,141,107,246,226,175,149,129,102,135,179,245,224,239,37,135,216,76,61,249,91,102,32,205,211,170,255,175,175,103,42)
IMAGE_DATA(253,91,104,173,235,227,143,63,254,248,227,143,63,254,248,107,249,75,110,165,61,83,239,139,63,254,248,227,143,63,254,248)
IMAGE_DATA(247,237,63,12,195,166,254,227,253,240,127,179,183,240,159,50,232,217,127,114,176,242,31,187,87,255,208,192,210,95,43,131)
IMAGE_DATA(154,252,79,207,111,237,175,145,65,45,254,177,179,123,240,207,205,160,6,127,233,220,94,252,115,50,240,238,63,119,102,79)
IMAGE_DATA(254,107,51,240,236,255,191,243,122,243,95,147,129,87,255,37,103,245,232,159,154,129,71,255,165,231,244,220,181,250,91,187)
IMAGE_DATA(109,157,129,39,127,107,47,139,12,36,103,233,245,248,183,235,223,90,6,57,251,199,202,191,149,12,114,191,127,45,253,45)
IMAGE_DATA(126,127,46,241,209,182,247,236,191,52,3,111,254,41,246,222,253,151,100,160,229,255,231,225,67,180,195,179,107,219,207,181)
IMAGE_DATA(52,79,171,255,127,203,245,215,180,247,230,63,151,129,7,127,109,123,143,254,82,6,214,254,37,236,189,250,199,50,176,244)
IMAGE_DATA(47,101,239,217,255,52,3,43,255,146,246,222,253,195,12,180,252,31,191,125,140,118,120,246,233,158,167,185,148,112,150,230)
IMAGE_DATA(241,226,63,101,176,181,127,236,115,209,171,255,154,206,241,151,246,18,254,248,227,143,63,254,245,250,255,253,254,41,218,169)
IMAGE_DATA(185,164,182,116,125,105,30,252,241,199,31,127,252,211,251,112,56,224,111,104,143,191,173,253,156,255,191,151,179,197,90,114)
IMAGE_DATA(40,221,210,60,181,249,143,230,251,253,254,181,241,223,254,125,143,191,237,206,193,223,118,231,76,61,254,13,255,237,119,206)
IMAGE_DATA(100,143,191,205,206,9,95,147,250,251,211,91,123,245,159,219,57,248,219,238,28,252,109,119,14,254,182,59,7,127,219,157)
IMAGE_DATA(131,191,237,206,9,59,124,102,135,116,150,90,186,198,231,143,72,207,79,177,182,92,99,142,63,254,248,183,241,252,53,107)
IMAGE_DATA(87,252,235,232,218,253,41,138,162,40,138,162,40,138,162,40,42,167,158,1,38,104,208,111,0,0,0,0,0,0,0,0)
IMAGE_END_DATA(672, 1)
IMAGE_BEGIN_DATA
IMAGE_DATA(120,156,237,216,177,106,2,65,16,6,224,171,83,167,75,17,235,52,137,144,126,123,11,173,82,36,66,8,118,233,45,180)
IMAGE_DATA(8,6,172,3,41,108,181,79,94,34,207,32,62,128,144,90,124,133,139,87,156,44,199,236,184,251,223,200,78,96,70,166)

View file

@ -587,14 +587,14 @@ void Ide::FilePropertiesMenu(Bar& menu)
if(i >= 0 && i < fileindex.GetCount() && fileindex[i] < actual.file.GetCount())
path = SourcePath(actualpackage, actual.file[fileindex[i]]);
menu.Sub(candiff, "Compare with", [=](Bar& bar) {
bar.AddMenu(candiff, AK_DIFF, IdeImg::Diff(), THISBACK(Diff))
bar.AddMenu(candiff, AK_DIFF, IdeImg::Diff(), [=] { Diff(); })
.Help("Show differences between the current and selected file");
bar.AddMenu(candiff && FileExists(GetTargetLogPath()),
AK_DIFFLOG, IdeImg::DiffLog(), [=] { DiffWith(GetTargetLogPath()); })
AK_DIFFLOG, IdeImg::DiffLog(), [=] { DiffWith(GetTargetLogPath(), IdeImg::DiffLog()); })
.Help("Show differences between the current file and the log");
if(FileExists(path))
bar.AddMenu(candiff && FileExists(path), path,
IdeImg::DiffNext(), [=] { DiffWith(path); })
IdeImg::DiffNext(), [=] { DiffWith(path, IdeImg::DiffNext()); })
.Help("Show differences between the current and the next file");
Vector<String> file;
if(bar.IsMenuBar()) {
@ -613,7 +613,7 @@ void Ide::FilePropertiesMenu(Bar& menu)
sep = false;
if(++ii > 80) // sanity..
return;
bar.AddMenu(p, IdeImg::DiffNext(), [=] { DiffWith(p); })
bar.AddMenu(p, IdeImg::DiffNext(), [=] { DiffWith(p, IdeImg::DiffNext()); })
.Help("Show differences between the current and that file");
}
}
@ -1111,12 +1111,16 @@ void Ide::EditorMenu(Bar& bar)
bar.MenuSeparator();
OnlineSearchMenu(bar);
bar.Add(IsClipboardAvailableText() && (editor.IsSelection() || editor.GetLength() < 1024*1024),
"Compare with clipboard..", [=]() {
"Compare with clipboard..", IdeImg::DiffClip(), [=]() {
DiffDlg& dlg = CreateNewWindow<DiffDlg>();
dlg.diff.left.RemoveFrame(dlg.p);
dlg.diff.Set(ReadClipboardText(), editor.IsSelection() ? editor.GetSelection()
: editor.Get());
String left = ReadClipboardText();
String right = editor.IsSelection() ? editor.GetSelection() : editor.Get();
dlg.diff.Set(left, right);
dlg.diff.indent <<= false;
dlg.diff.indent << [=, &dlg] { dlg.diff.Set(left, right); };
dlg.Title("Compare with clipboard");
dlg.Icon(IdeImg::DiffClip());
dlg.OpenMain();
});
bar.MenuSeparator();

View file

@ -0,0 +1,9 @@
uses
CtrlLib;
file
main.cpp;
mainconfig
"" = "GUI";

View file

@ -0,0 +1,15 @@
#include <CtrlLib/CtrlLib.h>
using namespace Upp;
struct MyApp : TopWindow {
void Paint(Draw& w) override {
w.DrawRect(GetSize(), White());
w.DrawImage(100, 100, CtrlImg::undo(), Red());
}
};
GUI_APP_MAIN
{
MyApp().Run();
}