mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-07-11 22:03:01 -06:00
Controls4U: Added SliderCtrlX and StarIndicator. Removed internal MyBufferPainter
git-svn-id: svn://ultimatepp.org/upp/trunk@3774 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
parent
a369e62194
commit
5296318800
23 changed files with 7244 additions and 4358 deletions
|
|
@ -11,6 +11,30 @@ using namespace Upp;
|
|||
#define IMAGEFILE <Controls4U/Controls4U.iml>
|
||||
#include <Draw/iml.h>
|
||||
|
||||
void PaintCenterText(Painter &w, double x, double y, String text, Font fnt, Color color) {
|
||||
Size sz = GetTextSize(text, fnt);
|
||||
w.Text(x - sz.cx / 2., y - sz.cy / 2., text, fnt).Fill(color);
|
||||
}
|
||||
|
||||
void PaintArc(Painter &w, double cx, double cy, double R, double ang0, double ang1,
|
||||
int direction, double width, Color color) {
|
||||
if (direction == -1) {
|
||||
double c = ang0;
|
||||
ang0 = ang1;
|
||||
ang1 = c;
|
||||
}
|
||||
ang0 = ToRad(ang0);
|
||||
ang1 = ToRad(ang1);
|
||||
double delta = ToRad(0.5);
|
||||
if (ang0 > ang1)
|
||||
ang1 += 2*M_PI;
|
||||
|
||||
double x1, y1;
|
||||
x1 = cx + R*cos(ang0 + delta);
|
||||
y1 = cy - R*sin(ang0 + delta);
|
||||
w.Move(x1, y1).Arc(cx, cy, R, R, -ang0, ang0-ang1).Stroke(width, color);
|
||||
}
|
||||
|
||||
void EditFileFolder::Init() {
|
||||
//EditString::AddFrame(butLeft);
|
||||
//EditString::AddFrame(butRight);
|
||||
|
|
@ -277,7 +301,7 @@ StaticImage::StaticImage() {
|
|||
void StaticRectangle::Paint(Draw& w) {
|
||||
Size sz = GetSize();
|
||||
ImageBuffer ib(sz);
|
||||
MyBufferPainter sw(ib);
|
||||
BufferPainter sw(ib);
|
||||
|
||||
sw.Clear(RGBAZero());
|
||||
double wid;
|
||||
|
|
@ -316,7 +340,7 @@ StaticRectangle::StaticRectangle() {
|
|||
void StaticEllipse::Paint(Draw& w) {
|
||||
Size sz = GetSize();
|
||||
ImageBuffer ib(sz);
|
||||
MyBufferPainter sw(ib);
|
||||
BufferPainter sw(ib);
|
||||
|
||||
sw.Clear(RGBAZero());
|
||||
double wid;
|
||||
|
|
@ -356,7 +380,7 @@ void StaticLine::FramePaint(Draw& w, const Rect& rr) {
|
|||
int off = int(0.25*max(rr.GetWidth(), rr.GetHeight()));
|
||||
|
||||
ImageBuffer ib(rr.GetWidth()+2*off, rr.GetHeight()+2*off);
|
||||
MyBufferPainter sw(ib);
|
||||
BufferPainter sw(ib);
|
||||
Rect r = rr;
|
||||
r.Offset(off, off);
|
||||
|
||||
|
|
@ -430,7 +454,7 @@ void StaticArrow::FramePaint(Draw& w, const Rect& rr) {
|
|||
int off = int(0.25*max(rr.GetWidth(), rr.GetHeight()));
|
||||
|
||||
ImageBuffer ib(rr.GetWidth()+2*off, rr.GetHeight()+2*off);
|
||||
MyBufferPainter sw(ib);
|
||||
BufferPainter sw(ib);
|
||||
Rect r = rr;
|
||||
r.Offset(off, off);
|
||||
|
||||
|
|
@ -514,34 +538,34 @@ void StaticArrow::FramePaint(Draw& w, const Rect& rr) {
|
|||
}
|
||||
}
|
||||
if (orientation == OrVert)
|
||||
sw.DrawLine(x0, y0, x1, y1, width, color);
|
||||
sw.Move(x0, y0).Line(x1, y1).Stroke(width, color);
|
||||
else if (orientation == OrHor)
|
||||
sw.DrawLine(x0, y0, x1, y1, width, color);
|
||||
sw.Move(x0, y0).Line(x1, y1).Stroke(width, color);
|
||||
else if (orientation == OrSW_NE)
|
||||
sw.DrawLine(x0, y0, x1, y1, width, color);
|
||||
sw.Move(x0, y0).Line(x1, y1).Stroke(width, color);
|
||||
else if (orientation == OrNW_SE_HVH) {
|
||||
middle = (r.left+r.right)/2;
|
||||
sw.DrawLine(x0, y0, middle, y0, width, color);
|
||||
sw.DrawLine(middle, y0, middle, y1, width, color);
|
||||
sw.DrawLine(middle, y1, x1, y1, width, color);
|
||||
sw.Move(x0, y0).Line(middle, y0).Stroke(width, color);
|
||||
sw.Move(middle, y0).Line(middle, y1).Stroke(width, color);
|
||||
sw.Move(middle, y1).Line(x1, y1).Stroke(width, color);
|
||||
} else if (orientation == OrSW_NE_HVH) {
|
||||
middle = (r.left + r.right)/2;
|
||||
sw.DrawLine(x0, y0, middle, y0, width, color);
|
||||
sw.DrawLine(middle, y0, middle, y1, width, color);
|
||||
sw.DrawLine(middle, y1, x1, y1, width, color);
|
||||
sw.Move(x0, y0).Line(middle, y0).Stroke(width, color);
|
||||
sw.Move(middle, y0).Line(middle, y1).Stroke(width, color);
|
||||
sw.Move(middle, y1).Line(x1, y1).Stroke(width, color);
|
||||
} else if (orientation == OrNW_SE_VHV) {
|
||||
middle = (r.top + r.bottom)/2;
|
||||
sw.DrawLine(x0, y0, x0, middle, width, color);
|
||||
sw.DrawLine(x0, middle, x1, middle, width, color);
|
||||
sw.DrawLine(x1, middle, x1, y1, width, color);
|
||||
sw.Move(x0, y0).Line(x0, middle).Stroke(width, color);
|
||||
sw.Move(x0, middle).Line(x1, middle).Stroke(width, color);
|
||||
sw.Move(x1, middle).Line(x1, y1).Stroke(width, color);
|
||||
} else if (orientation == OrSW_NE_VHV) {
|
||||
middle = (r.top + r.bottom)/2;
|
||||
sw.DrawLine(x0, y0, x0, middle, width, color);
|
||||
sw.DrawLine(x0, middle, x1, middle, width, color);
|
||||
sw.DrawLine(x1, middle, x1, y1, width, color);
|
||||
} else {
|
||||
sw.DrawLine(x0, y0, x1, y1, width, color);
|
||||
}
|
||||
sw.Move(x0, y0).Line(x0, middle).Stroke(width, color);
|
||||
sw.Move(x0, middle).Line(x1, middle).Stroke(width, color);
|
||||
sw.Move(x1, middle).Line(x1, y1).Stroke(width, color);
|
||||
} else
|
||||
sw.Move(x0, y0).Line(x1, y1).Stroke(width, color);
|
||||
|
||||
w.DrawImage(-off, -off, ib);
|
||||
}
|
||||
|
||||
|
|
@ -586,7 +610,7 @@ StaticArrow::StaticArrow() {
|
|||
ends = EndLeft;
|
||||
}
|
||||
|
||||
void StaticClock::PaintPtr(MyBufferPainter &w, double cmx, double cmy, double pos, double m, double d, Color color, double cf) {
|
||||
void StaticClock::PaintPtr(BufferPainter &w, double cmx, double cmy, double pos, double m, double d, Color color, double cf) {
|
||||
double dx = m * sin(pos * 2 * M_PI);
|
||||
double dy = m * cos(pos * 2 * M_PI);
|
||||
|
||||
|
|
@ -595,13 +619,13 @@ void StaticClock::PaintPtr(MyBufferPainter &w, double cmx, double cmy, double po
|
|||
double ex = cmx + dx * cf;
|
||||
double ey = cmy - dy * cf;
|
||||
|
||||
w.DrawLine(sx, sy, ex, ey, d, color);
|
||||
w.Move(sx, sy).Line(ex, ey).Stroke(d, color);
|
||||
}
|
||||
|
||||
void StaticClock::Paint(Draw& ww) {
|
||||
Size sz = GetSize();
|
||||
ImageBuffer ib(sz);
|
||||
MyBufferPainter w(ib);
|
||||
BufferPainter w(ib);
|
||||
|
||||
w.Clear(RGBAZero());
|
||||
w.LineCap(LINECAP_BUTT);
|
||||
|
|
@ -635,19 +659,19 @@ void StaticClock::Paint(Draw& ww) {
|
|||
double y = cmy - (0.95 * cos(i * M_PI / 30.0) * cf);
|
||||
if (hourType == StaticClock::Square) {
|
||||
if(i % 5 == 0)
|
||||
w.DrawRect(x, y, 3*bigF, 3*bigF, letterColor);
|
||||
w.Rectangle(x, y, 3*bigF, 3*bigF).Fill(letterColor);
|
||||
else
|
||||
w.DrawRect(x, y, 2*bigF, 2*bigF, letterColor);
|
||||
w.Rectangle(x, y, 2*bigF, 2*bigF).Fill(letterColor);
|
||||
} else if (hourType == StaticClock::Rectangle) {
|
||||
if(i % 5 == 0) {
|
||||
double x2 = cmx + (0.7 * sin(i * M_PI / 30.0) * cf);
|
||||
double y2 = cmy - (0.7 * cos(i * M_PI / 30.0) * cf);
|
||||
w.DrawLine(x, y, x2, y2, 4*bigF, Gray());
|
||||
w.DrawLine(x, y, x2, y2, 2*bigF, letterColor);
|
||||
w.Move(x, y).Line(x2, y2).Stroke(4*bigF, Gray());
|
||||
w.Move(x, y).Line(x2, y2).Stroke(2*bigF, letterColor);
|
||||
} else {
|
||||
double x2 = cmx + (0.8 * sin(i * M_PI / 30.0) * cf);
|
||||
double y2 = cmy - (0.8 * cos(i * M_PI / 30.0) * cf);
|
||||
w.DrawLine(x, y, x2, y2, 1*bigF, Gray());
|
||||
w.Move(x, y).Line(x2, y2).Stroke(1*bigF, Gray());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -682,9 +706,9 @@ void StaticClock::Paint(Draw& ww) {
|
|||
double x = cmx + (numberd * sin(i * M_PI / 6.0) * cf);
|
||||
double y = cmy - (numberd * cos(i * M_PI / 6.0) * cf);
|
||||
if (i % 3 == 0)
|
||||
w.DrawCenterText(x, y, FormatInt(i), fnt4, letterColor);
|
||||
PaintCenterText(w, x, y, FormatInt(i), fnt4, letterColor);
|
||||
else if (numberType != StaticClock::Big4)
|
||||
w.DrawCenterText(x, y, FormatInt(i), fnt, letterColor);
|
||||
PaintCenterText(w, x, y, FormatInt(i), fnt, letterColor);
|
||||
}
|
||||
}
|
||||
double handleF = bigF;
|
||||
|
|
@ -827,7 +851,7 @@ StaticClock::StaticClock() {
|
|||
StaticClock::~StaticClock() {
|
||||
}
|
||||
|
||||
void Meter::PaintMarks(MyBufferPainter &w, double cx, double cy, double R, double ang0,
|
||||
void Meter::PaintMarks(BufferPainter &w, double cx, double cy, double R, double ang0,
|
||||
double ang1, int direction, double step, double bigF, Color color) {
|
||||
if (direction == -1)
|
||||
Swap(ang0, ang1);
|
||||
|
|
@ -842,7 +866,7 @@ void Meter::PaintMarks(MyBufferPainter &w, double cx, double cy, double R, doubl
|
|||
double y0 = cy - R*sin(i);
|
||||
double x1 = cx + 0.93*R*cos(i);
|
||||
double y1 = cy - 0.93*R*sin(i);
|
||||
w.DrawLine(x0, y0, x1, y1, width, color);
|
||||
w.Move(x0, y0).Line(x1, y1).Stroke(width, color);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -856,7 +880,7 @@ double AngAdd(double ang, double val)
|
|||
return ang;
|
||||
}
|
||||
|
||||
void Meter::PaintNumbers(MyBufferPainter &w, double cx, double cy, double R, double a0,
|
||||
void Meter::PaintNumbers(BufferPainter &w, double cx, double cy, double R, double a0,
|
||||
double step, int direction, double minv, double maxv, double stepv, double bigF, Color color)
|
||||
{
|
||||
a0 = ToRad(a0);
|
||||
|
|
@ -865,13 +889,13 @@ void Meter::PaintNumbers(MyBufferPainter &w, double cx, double cy, double R, dou
|
|||
while (minv <= maxv) {
|
||||
double x = cx + 0.8*R*cos(a0);
|
||||
double y = cy - 0.8*R*sin(a0);
|
||||
w.DrawCenterText(x, y, FormatDouble(minv), fnt, color);
|
||||
PaintCenterText(w, x, y, FormatDouble(minv), fnt, color);
|
||||
a0 += step*direction;
|
||||
minv += stepv;
|
||||
}
|
||||
}
|
||||
|
||||
void Meter::PaintHand(MyBufferPainter &w, double cx, double cy, double R, double val,
|
||||
void Meter::PaintHand(BufferPainter &w, double cx, double cy, double R, double val,
|
||||
double bigF, int colorType)
|
||||
{
|
||||
Color letterColor;
|
||||
|
|
@ -885,22 +909,22 @@ void Meter::PaintHand(MyBufferPainter &w, double cx, double cy, double R, double
|
|||
double y0 = cy - 0.90*R*sin(val);
|
||||
double x1 = cx;
|
||||
double y1 = cy;
|
||||
w.DrawLine(x0, y0, x1, y1, 5*bigF, LtGray());
|
||||
w.Move(x0, y0).Line(x1, y1).Stroke(5*bigF, LtGray());
|
||||
double x2 = cx + 0.4*R*cos(val);
|
||||
double y2 = cy - 0.4*R*sin(val);
|
||||
w.DrawLine(x0, y0, x2, y2, 4*bigF, letterColor);
|
||||
w.Move(x0, y0).Line(x2, y2).Stroke(4*bigF, letterColor);
|
||||
double x3 = cx - 0.3*R*cos(val);
|
||||
double y3 = cy + 0.3*R*sin(val);
|
||||
w.DrawLine(x1, y1, x3, y3, 5*bigF, letterColor);
|
||||
w.Move(x1, y1).Line(x3, y3).Stroke(5*bigF, letterColor);
|
||||
|
||||
w.DrawCircle(cx, cy, bigF*18, LtGray());
|
||||
w.DrawCircle(cx, cy, bigF*15, Black());
|
||||
w.Circle(cx, cy, bigF*18).Fill(LtGray());
|
||||
w.Circle(cx, cy, bigF*15).Fill(Black());
|
||||
}
|
||||
|
||||
void Meter::Paint(Draw& ww) {
|
||||
Size sz = GetSize();
|
||||
ImageBuffer ib(sz);
|
||||
MyBufferPainter w(ib);
|
||||
BufferPainter w(ib);
|
||||
|
||||
w.Clear(RGBAZero());
|
||||
w.LineCap(LINECAP_BUTT);
|
||||
|
|
@ -975,17 +999,17 @@ void Meter::Paint(Draw& ww) {
|
|||
else
|
||||
cy = r.bottom + 1.08*R*maxy;
|
||||
|
||||
w.DrawArc(cx, cy, R, a, b, direction, fceil(0.8*bigF), letterColor);
|
||||
PaintArc(w, cx, cy, R, a, b, direction, fceil(0.8*bigF), letterColor);
|
||||
|
||||
if (peak < max && peak > min) {
|
||||
double valpk = peak*maxgrad/(max-min);
|
||||
for (double i = 0.93; i < 0.98; i+= 0.004)
|
||||
w.DrawArc(cx, cy, i*R, a + valpk*direction, b, direction, (int)(2*bigF), LtRed());
|
||||
PaintArc(w, cx, cy, i*R, a + valpk*direction, b, direction, (int)(2*bigF), LtRed());
|
||||
double fsize = 7*Upp::min(bigF, bigH);
|
||||
Font fnt = Arial((int)fsize);
|
||||
double txtx = cx + R*cos(ToRad(b))/2;
|
||||
double txty = cy - R*sin(ToRad(b))/2;
|
||||
w.DrawCenterText(txtx, txty, " PEAK", fnt, Gray());
|
||||
PaintCenterText(w, txtx, txty, " PEAK", fnt, Gray());
|
||||
Image light;
|
||||
if (value < peak)
|
||||
light = Controls4UImg::LightOff();
|
||||
|
|
@ -1002,7 +1026,7 @@ void Meter::Paint(Draw& ww) {
|
|||
double angtxt = ToRad(a + maxgrad*direction/2);
|
||||
double txtx = cx + R*cos(angtxt)/2;
|
||||
double txty = cy - R*sin(angtxt)/2;
|
||||
w.DrawCenterText(txtx, txty, text, fnt, letterColor);
|
||||
PaintCenterText(w, txtx, txty, text, fnt, letterColor);
|
||||
|
||||
double vala = (value-min)*maxgrad/(max-min);
|
||||
PaintHand(w, cx, cy, R, a + vala*direction, bigF, colorType);
|
||||
|
|
@ -1097,7 +1121,7 @@ Knob::Knob() : value(0), minv(0), maxv(100), minorstep(10), majorstep(20), keySt
|
|||
Transparent();
|
||||
}
|
||||
|
||||
void Knob::PaintMarks(MyBufferPainter &w, double cx, double cy, double R, double begin, double end,
|
||||
void Knob::PaintMarks(BufferPainter &w, double cx, double cy, double R, double begin, double end,
|
||||
double ang0, double ang1, int direction, double minorstep, double bigF, Color color) {
|
||||
if (direction == -1)
|
||||
Swap(ang0, ang1);
|
||||
|
|
@ -1113,18 +1137,18 @@ void Knob::PaintMarks(MyBufferPainter &w, double cx, double cy, double R, double
|
|||
double y0 = cy - end*R*sin(iang);
|
||||
double x1 = cx + begin*R*cos(iang);
|
||||
double y1 = cy - begin*R*sin(iang);
|
||||
w.DrawLine(x0, y0, x1, y1, width, color);
|
||||
w.Move(x0, y0).Line(x1, y1).Stroke(width, color);
|
||||
inum++;
|
||||
} else {
|
||||
double x0 = cx + (begin+end)*R*cos(iang)/2;
|
||||
double y0 = cy - (begin+end)*R*sin(iang)/2;
|
||||
w.DrawCircle(x0, y0, 0.2*(begin-end)*R, color);
|
||||
w.Circle(x0, y0, 0.2*(begin-end)*R).Fill(color);
|
||||
imin++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Knob::PaintNumbers(MyBufferPainter &w, double cx, double cy, double R, double a0,
|
||||
void Knob::PaintNumbers(BufferPainter &w, double cx, double cy, double R, double a0,
|
||||
double step, int direction, double minv, double maxv, double stepv, double bigF, Color color) {
|
||||
double range = maxv - minv;
|
||||
a0 = ToRad(a0);
|
||||
|
|
@ -1136,13 +1160,13 @@ void Knob::PaintNumbers(MyBufferPainter &w, double cx, double cy, double R, doub
|
|||
double x = cx + 0.8*R*cos(a0);
|
||||
double y = cy - 0.8*R*sin(a0);
|
||||
strminv = FormatDoubleAdjust(minv, range);
|
||||
w.DrawCenterText(x, y, strminv, fnt, color);
|
||||
PaintCenterText(w, x, y, strminv, fnt, color);
|
||||
a0 += step*direction;
|
||||
minv += stepv;
|
||||
}
|
||||
}
|
||||
|
||||
void Knob::PaintRugged(MyBufferPainter &sw, double cx, double cy, double angle, double r, double rugg, int numRug, Color &color) {
|
||||
void Knob::PaintRugged(BufferPainter &sw, double cx, double cy, double angle, double r, double rugg, int numRug, Color &color) {
|
||||
double deltaAngle = 360./numRug;
|
||||
|
||||
double iang = angle;
|
||||
|
|
@ -1150,10 +1174,10 @@ void Knob::PaintRugged(MyBufferPainter &sw, double cx, double cy, double angle,
|
|||
if (deltaAngle > 360)
|
||||
deltaAngle -= 360;
|
||||
|
||||
sw.DrawArc(cx, cy, r-rugg/2-1, iang, iang+0.6*deltaAngle, 1, rugg, color);
|
||||
sw.DrawArc(cx, cy, r, iang, iang+0.6*deltaAngle, 1, 1, Gray());
|
||||
PaintArc(sw, cx, cy, r-rugg/2-1, iang, iang+0.6*deltaAngle, 1, rugg, color);
|
||||
PaintArc(sw, cx, cy, r, iang, iang+0.6*deltaAngle, 1, 1, Gray());
|
||||
double riang = ToRad(iang);
|
||||
sw.DrawLine(cx+r*cos(riang), cx-r*sin(riang), cx+(r-rugg)*cos(riang), cx-(r-rugg)*sin(riang), 1, Gray());
|
||||
sw.Move(cx+r*cos(riang), cx-r*sin(riang)).Line(cx+(r-rugg)*cos(riang), cx-(r-rugg)*sin(riang)).Stroke(1, Gray());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1170,7 +1194,7 @@ void Knob::Layout() {
|
|||
dangle = angleBegin + dangle;
|
||||
double angle = ToRad(dangle);
|
||||
ImageBuffer ib(int(2*R), int(2*R));
|
||||
MyBufferPainter sw(ib);
|
||||
BufferPainter sw(ib);
|
||||
sw.Clear(RGBAZero());
|
||||
int direction;
|
||||
if (clockWise)
|
||||
|
|
@ -1234,7 +1258,7 @@ void Knob::Layout() {
|
|||
}
|
||||
{
|
||||
ImageBuffer ib(int(2*r)+1, int(2*r)+1);
|
||||
MyBufferPainter sw(ib);
|
||||
BufferPainter sw(ib);
|
||||
sw.Clear(RGBAZero());
|
||||
|
||||
if (colorType == WhiteType) {
|
||||
|
|
@ -1277,7 +1301,7 @@ void Knob::Paint(Draw& w) {
|
|||
double cy = r;
|
||||
|
||||
ImageBuffer ib(sz);
|
||||
MyBufferPainter sw(ib);
|
||||
BufferPainter sw(ib);
|
||||
sw.Clear(RGBAZero());
|
||||
|
||||
int direction;
|
||||
|
|
@ -1342,16 +1366,16 @@ void Knob::Paint(Draw& w) {
|
|||
|
||||
Color lineColor = (colorType == SimpleWhiteType) ? Color(20, 20, 20) : White();
|
||||
if (mark == Line)
|
||||
sw.DrawLine(cx+(r-capt)*cos(angle), cy-(r-capt)*sin(angle),
|
||||
cx+0.5*r*cos(angle), cy-0.5*r*sin(angle), r/25., lineColor);
|
||||
sw.Move(cx+(r-capt)*cos(angle), cy-(r-capt)*sin(angle))
|
||||
.Line(cx+0.5*r*cos(angle), cy-0.5*r*sin(angle)).Stroke(r/25., lineColor);
|
||||
else if (mark == Circle)
|
||||
sw.Circle(cx+0.7*r*cos(angle), cy-0.7*r*sin(angle), 0.15*r).Stroke(1, lineColor).Fill(fill);
|
||||
} else if (colorType == WhiteType || colorType == BlackType) {
|
||||
Color lineColor = (colorType == WhiteType) ? Black() : White();
|
||||
Color almostColor = (colorType == WhiteType) ? Color(220, 220, 220) : Color(60, 60, 60);
|
||||
if (mark == Line)
|
||||
sw.DrawLine(cx+realR*cos(angle), cy-realR*sin(angle),
|
||||
cx+0.5*r*cos(angle), cy-0.5*r*sin(angle), r/25., lineColor);
|
||||
sw.Move(cx+realR*cos(angle), cy-realR*sin(angle))
|
||||
.Line(cx+0.5*r*cos(angle), cy-0.5*r*sin(angle)).Stroke(r/25., lineColor);
|
||||
else if (mark == Circle) {
|
||||
double ccx = cx+0.7*r*cos(angle);
|
||||
double ccy = cy-0.7*r*sin(angle);
|
||||
|
|
|
|||
|
|
@ -2,66 +2,17 @@
|
|||
#define _Controls4U_Controls4U_h_
|
||||
|
||||
#include <Painter/Painter.h>
|
||||
#include "Functions4U/Functions4U.h"
|
||||
#include <Functions4U/Functions4U.h>
|
||||
#if defined(PLATFORM_WIN32)
|
||||
#include "Controls4U/ActiveX.h"
|
||||
#endif
|
||||
#include "Controls4U/ImgCtrl.h"
|
||||
#include "Controls4U/DrawingCanvas.h"
|
||||
#include "Controls4U/SliderCtrlX.h"
|
||||
#include "Controls4U/StarIndicator.h"
|
||||
|
||||
double AngAdd(double ang, double val);
|
||||
|
||||
#ifndef flagNOPAINTER
|
||||
class MyBufferPainter : public BufferPainter {
|
||||
public:
|
||||
MyBufferPainter(ImageBuffer& ib, int mode = MODE_ANTIALIASED) : BufferPainter(ib, mode) {};
|
||||
void DrawLine(double x1, double y1, double x2, double y2, double width, Color color) {
|
||||
Move(x1, y1).Line(x2, y2).Stroke(width, color);
|
||||
}
|
||||
void DrawRect(double x, double y, double cx, double cy, Color color) {
|
||||
Move(x, y).Line(x + cx, y).Line(x + cx, y + cy).Line(x, y + cy).Close();
|
||||
Fill(color);
|
||||
}
|
||||
void DrawRect(const Rect &r, Color color) {
|
||||
DrawRect(r.left, r.top, r.right-r.left, r.bottom-r.top, color);
|
||||
}
|
||||
void DrawEllipse(double x, double y, double rx, double ry, Color color) {
|
||||
Ellipse(x, y, rx, ry);
|
||||
Fill(color);
|
||||
}
|
||||
void DrawEllipse(const Rect& r, Color color) {
|
||||
Sizef sz = r.GetSize();
|
||||
Ellipse(r.left + sz.cx / 2, r.top + sz.cy / 2, sz.cx / 2, sz.cy / 2);
|
||||
Fill(color);
|
||||
}
|
||||
void DrawCircle(double x, double y, double r, Color color) {
|
||||
Ellipse(x, y, r, r);
|
||||
Fill(color);
|
||||
}
|
||||
void DrawCenterText(double x, double y, String text, Font fnt, Color color) {
|
||||
Size sz = GetTextSize(text, fnt);
|
||||
DrawText((int)(x - sz.cx / 2.), (int)(y - sz.cy / 2.), text, fnt, color);
|
||||
}
|
||||
void DrawArc(double cx, double cy, double R, double ang0, double ang1, int direction,
|
||||
double width, Color color) {
|
||||
if (direction == -1) {
|
||||
double c = ang0;
|
||||
ang0 = ang1;
|
||||
ang1 = c;
|
||||
}
|
||||
ang0 = ToRad(ang0);
|
||||
ang1 = ToRad(ang1);
|
||||
double delta = ToRad(0.5);
|
||||
if (ang0 > ang1)
|
||||
ang1 += 2*M_PI;
|
||||
|
||||
double x1, y1;
|
||||
x1 = cx + R*cos(ang0 + delta);
|
||||
y1 = cy - R*sin(ang0 + delta);
|
||||
Move(x1, y1).Arc(cx, cy, R, R, -ang0, ang0-ang1).Stroke(width, color);
|
||||
}
|
||||
|
||||
};
|
||||
#endif
|
||||
|
||||
class EditFileFolder : public EditString {
|
||||
typedef EditFileFolder CLASSNAME;
|
||||
protected:
|
||||
|
|
@ -272,7 +223,7 @@ public:
|
|||
enum ColorType {WhiteType, BlackType};
|
||||
|
||||
protected:
|
||||
void PaintPtr(MyBufferPainter &w, double cmx, double cmy, double pos, double m, double d,
|
||||
void PaintPtr(BufferPainter &w, double cmx, double cmy, double pos, double m, double d,
|
||||
Color color, double cf);
|
||||
int hourType;
|
||||
int numberType;
|
||||
|
|
@ -329,12 +280,12 @@ protected:
|
|||
int sensibility;
|
||||
volatile Atomic running, kill;
|
||||
|
||||
void PaintMarks(MyBufferPainter &w, double cx, double cy, double R, double ang0,
|
||||
void PaintMarks(BufferPainter &w, double cx, double cy, double R, double ang0,
|
||||
double ang1, int direction, double step, double bigF, Color color);
|
||||
void PaintNumbers(MyBufferPainter &w, double cx, double cy, double R, double a0,
|
||||
void PaintNumbers(BufferPainter &w, double cx, double cy, double R, double a0,
|
||||
double step, int direction, double minv, double maxv, double stepv, double bigF,
|
||||
Color color);
|
||||
void PaintHand(MyBufferPainter &w, double cx, double cy, double R, double val, double bigF,
|
||||
void PaintHand(BufferPainter &w, double cx, double cy, double R, double val, double bigF,
|
||||
int colorType);
|
||||
void RefreshValue() {Refresh();};
|
||||
|
||||
|
|
@ -374,11 +325,11 @@ private:
|
|||
int style;
|
||||
|
||||
double SliderToClient(Point pos);
|
||||
void PaintMarks(MyBufferPainter &w, double cx, double cy, double R, double begin, double end, double ang0,
|
||||
void PaintMarks(BufferPainter &w, double cx, double cy, double R, double begin, double end, double ang0,
|
||||
double ang1, int direction, double minorstep, double bigF, Color color);
|
||||
void PaintNumbers(MyBufferPainter &w, double cx, double cy, double R, double a0,
|
||||
void PaintNumbers(BufferPainter &w, double cx, double cy, double R, double a0,
|
||||
double step, int direction, double minv, double maxv, double stepv, double bigF, Color color);
|
||||
void PaintRugged(MyBufferPainter &w, double cx, double cy, double angle, double r,
|
||||
void PaintRugged(BufferPainter &w, double cx, double cy, double angle, double r,
|
||||
double rugg, int numRug, Color &color);
|
||||
|
||||
virtual void Paint(Draw& draw);
|
||||
|
|
|
|||
|
|
@ -9,6 +9,10 @@ uses(!NOPAINTER) Painter;
|
|||
file
|
||||
Controls4U.cpp,
|
||||
Controls4U.h,
|
||||
DrawingCanvas.cpp,
|
||||
DrawingCanvas.h,
|
||||
ImgCtrl.cpp,
|
||||
ImgCtrl.h,
|
||||
Controls4U.usc,
|
||||
Controls4U.lay,
|
||||
Controls4U.iml,
|
||||
|
|
@ -22,8 +26,17 @@ file
|
|||
IExplorerBrowser.cpp,
|
||||
FirefoxBrowser.cpp,
|
||||
VLCPlayer.cpp,
|
||||
vlc readonly separator,
|
||||
VLC readonly separator,
|
||||
plugin\vlc\axvlc_idl.c,
|
||||
plugin\vlc\axvlc_idl.h,
|
||||
License.txt;
|
||||
License.txt,
|
||||
JBControls readonly separator,
|
||||
SliderCtrlX.cpp,
|
||||
SliderCtrlX.h,
|
||||
SliderCtrlX.iml,
|
||||
SliderCtrlX.usc,
|
||||
StarIndicator.cpp,
|
||||
StarIndicator.h,
|
||||
StarIndicator.iml,
|
||||
StarIndicator.usc;
|
||||
|
||||
|
|
|
|||
560
bazaar/Controls4U/DrawingCanvas.cpp
Normal file
560
bazaar/Controls4U/DrawingCanvas.cpp
Normal file
|
|
@ -0,0 +1,560 @@
|
|||
#include "Controls4U.h"
|
||||
#include "DrawingCanvas.h"
|
||||
|
||||
String GetValueStringXml(String str, const char* var);
|
||||
Color GetColorXml(String text);
|
||||
void ParseG(GraphElemList &elems, XmlParser &xp, Svg2DTransform transf, SvgStyle style, const char *svgFolder);
|
||||
|
||||
void GraphElemList::Paint(Painter &sw, Svg2DTransform _transf, SvgStyle _style, bool firstLayer) {
|
||||
_transf += transf;
|
||||
_transf.Apply(sw);
|
||||
_style += style;
|
||||
_style.Apply(sw);
|
||||
for (int i = 0; i < elems.GetCount(); ++i) {
|
||||
elems[i].Paint(sw, _transf, _style, false);
|
||||
}
|
||||
if (firstLayer)
|
||||
PaintLimits(sw);
|
||||
}
|
||||
|
||||
void GraphElemList::Clear() {
|
||||
elems.Clear();
|
||||
}
|
||||
|
||||
void SvgStyle::Set(String str) {
|
||||
String value;
|
||||
Color color;
|
||||
|
||||
color = GetColorXml(GetValueStringXml(str, "stroke:"));
|
||||
if (!color.IsNullInstance())
|
||||
strokeColor = color;
|
||||
|
||||
value = GetValueStringXml(str, "stroke-width:");
|
||||
if (value != "")
|
||||
strokeWidth = atoi(value);
|
||||
|
||||
color = GetColorXml(GetValueStringXml(str, "fill:"));
|
||||
if (!color.IsNullInstance())
|
||||
strokeFill = color;
|
||||
|
||||
value = GetValueStringXml(str, "opacity:");
|
||||
if (value != "")
|
||||
strokeOpacity = atof(value);
|
||||
}
|
||||
|
||||
void SvgStyle::Apply(Painter &sw) {
|
||||
sw.Opacity(strokeOpacity);
|
||||
if (!strokeFill.IsNullInstance())
|
||||
sw.Fill(strokeFill);
|
||||
sw.Stroke(strokeWidth, strokeColor);
|
||||
}
|
||||
|
||||
SvgStyle &SvgStyle::operator=(const SvgStyle &style) {
|
||||
if (this == &style) // Same object?
|
||||
return *this;
|
||||
strokeColor = style.strokeColor;
|
||||
strokeFill = style.strokeFill;
|
||||
strokeOpacity = style.strokeOpacity;
|
||||
strokeWidth = style.strokeWidth;
|
||||
return *this;
|
||||
}
|
||||
|
||||
SvgStyle &SvgStyle::operator+=(const SvgStyle &style) {
|
||||
if (this == &style) // Same object?
|
||||
return *this;
|
||||
if (!IsNull(style.strokeColor))
|
||||
strokeColor = style.strokeColor;
|
||||
if (!IsNull(style.strokeFill))
|
||||
strokeFill = style.strokeFill;
|
||||
if (!IsNull(style.strokeOpacity))
|
||||
strokeOpacity = style.strokeOpacity;
|
||||
if (!IsNull(style.strokeWidth))
|
||||
strokeWidth = style.strokeWidth;
|
||||
return *this;
|
||||
}
|
||||
|
||||
String GetValueStringXml(String str, const char* var) {
|
||||
int pos, endpos;
|
||||
|
||||
if ((pos = str.Find(var)) >= 0) {
|
||||
pos += strlen(var);
|
||||
endpos = str.Find(';', pos+1);
|
||||
if (endpos == -1)
|
||||
endpos = str.GetCount();
|
||||
return NormalizeSpaces(str.Mid(pos, endpos-pos));
|
||||
} else
|
||||
return "";
|
||||
}
|
||||
|
||||
Color HtmlToColor(const char *str) {
|
||||
int col;
|
||||
sscanf(str+1, "%x", &col);
|
||||
return Color(col >> 16, (col >> 8) & 255, col & 255);
|
||||
}
|
||||
|
||||
Color GetColorXml(String text) {
|
||||
text = ToLower(text);
|
||||
if (text == "none" || text.IsEmpty())
|
||||
return Null;
|
||||
else if (text[0] == '#')
|
||||
return HtmlToColor(text);
|
||||
else
|
||||
return GetSvgColor(text);
|
||||
}
|
||||
|
||||
Array<double> GetTransformArgs(String str, const char *command) {
|
||||
Array<double> args;
|
||||
int pos, endpos;
|
||||
|
||||
if ((pos = str.Find(command)) < 0)
|
||||
return args;
|
||||
|
||||
pos += strlen(command);
|
||||
pos = 1 + str.Find('(', pos);
|
||||
|
||||
while (true) {
|
||||
if ((endpos = str.Find(',', pos)) < 0)
|
||||
break;
|
||||
double &d = args.Add();
|
||||
d = atof(str.Mid(pos, endpos-pos));
|
||||
pos = endpos+1;
|
||||
}
|
||||
if (!args.IsEmpty()) {
|
||||
if ((endpos = str.Find(')', pos)) >= 0) {
|
||||
double &d = args.Add();
|
||||
d = atof(str.Mid(pos, endpos-pos));
|
||||
}
|
||||
}
|
||||
return args;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void SvgGet_Rect(GraphElemList &elems, XmlParser &xp) {
|
||||
RectElem &elem = static_cast<RectElem&>(elems.elems.Add(new RectElem()));
|
||||
|
||||
for (int i = 0; i < xp.GetAttrCount(); ++i) {
|
||||
String attr = xp.GetAttr(i);
|
||||
if (attr == "x")
|
||||
elem.x = atoi(xp[i]);
|
||||
else if (attr == "y")
|
||||
elem.y = atoi(xp[i]);
|
||||
else if (attr == "width")
|
||||
elem.width = atoi(xp[i]);
|
||||
else if (attr == "height")
|
||||
elem.height = atoi(xp[i]);
|
||||
else if (attr == "style")
|
||||
elem.style.Set(xp[i]);
|
||||
else if (attr == "transform") {
|
||||
Array<double> args;
|
||||
args = GetTransformArgs(xp[i], "translate");
|
||||
if (!args.IsEmpty())
|
||||
elem.transf.Translate(args[0], args[1]);
|
||||
args = GetTransformArgs(xp[i], "scale");
|
||||
if (!args.IsEmpty())
|
||||
elem.transf.Scale(args[0], args[1]);
|
||||
}
|
||||
}
|
||||
elem.SetLimits();
|
||||
}
|
||||
|
||||
void SvgGet_Image(GraphElemList &elems, XmlParser &xp, const char *svgFolder) {
|
||||
ImageElem &elem = static_cast<ImageElem&>(elems.elems.Add(new ImageElem()));
|
||||
|
||||
for (int i = 0; i < xp.GetAttrCount(); ++i) {
|
||||
String attr = xp.GetAttr(i);
|
||||
if (attr == "x")
|
||||
elem.x = atoi(xp[i]);
|
||||
else if (attr == "y")
|
||||
elem.y = atoi(xp[i]);
|
||||
else if (attr == "width")
|
||||
elem.width = atoi(xp[i]);
|
||||
else if (attr == "height")
|
||||
elem.height = atoi(xp[i]);
|
||||
else if (attr == "xlink:href") {
|
||||
elem.fileName = xp[i];
|
||||
if (!FileExists(elem.fileName))
|
||||
elem.fileName = AppendFileName(svgFolder, elem.fileName);
|
||||
} else if (attr == "style")
|
||||
elem.style.Set(xp[i]);
|
||||
else if (attr == "transform") {
|
||||
Array<double> args;
|
||||
args = GetTransformArgs(xp[i], "translate");
|
||||
if (!args.IsEmpty())
|
||||
elem.transf.Translate(args[0], args[1]);
|
||||
args = GetTransformArgs(xp[i], "scale");
|
||||
if (!args.IsEmpty())
|
||||
elem.transf.Scale(args[0], args[1]);
|
||||
}
|
||||
}
|
||||
elem.SetLimits();
|
||||
}
|
||||
|
||||
void SvgGet_Ellipse(GraphElemList &elems, XmlParser &xp) {
|
||||
EllipseElem &elem = static_cast<EllipseElem&>(elems.elems.Add(new EllipseElem()));
|
||||
|
||||
for (int i = 0; i < xp.GetAttrCount(); ++i) {
|
||||
String attr = xp.GetAttr(i);
|
||||
if (attr == "cx")
|
||||
elem.x = atoi(xp[i]);
|
||||
else if (attr == "cy")
|
||||
elem.y = atoi(xp[i]);
|
||||
else if (attr == "rx")
|
||||
elem.width = atoi(xp[i]);
|
||||
else if (attr == "ry")
|
||||
elem.height = atoi(xp[i]);
|
||||
else if (attr == "style")
|
||||
elem.style.Set(xp[i]);
|
||||
else if (attr == "transform") {
|
||||
Array<double> args;
|
||||
args = GetTransformArgs(xp[i], "translate");
|
||||
if (!args.IsEmpty())
|
||||
elem.transf.Translate(args[0], args[1]);
|
||||
args = GetTransformArgs(xp[i], "scale");
|
||||
if (!args.IsEmpty())
|
||||
elem.transf.Scale(args[0], args[1]);
|
||||
}
|
||||
}
|
||||
elem.SetLimits();
|
||||
}
|
||||
|
||||
void SvgGet_Line(GraphElemList &elems, XmlParser &xp) {
|
||||
LineElem &elem = dynamic_cast<LineElem&>(elems.elems.Add(new LineElem()));
|
||||
|
||||
for (int i = 0; i < xp.GetAttrCount(); ++i) {
|
||||
String attr = xp.GetAttr(i);
|
||||
if (attr == "x1")
|
||||
elem.x1 = atoi(xp[i]);
|
||||
else if (attr == "y1")
|
||||
elem.y1 = atoi(xp[i]);
|
||||
else if (attr == "x2")
|
||||
elem.x2 = atoi(xp[i]);
|
||||
else if (attr == "y2")
|
||||
elem.y2 = atoi(xp[i]);
|
||||
else if (attr == "style")
|
||||
elem.style.Set(xp[i]);
|
||||
else if (attr == "transform") {
|
||||
Array<double> args;
|
||||
args = GetTransformArgs(xp[i], "translate");
|
||||
if (!args.IsEmpty())
|
||||
elem.transf.Translate(args[0], args[1]);
|
||||
args = GetTransformArgs(xp[i], "scale");
|
||||
if (!args.IsEmpty())
|
||||
elem.transf.Scale(args[0], args[1]);
|
||||
}
|
||||
}
|
||||
elem.SetLimits();
|
||||
}
|
||||
|
||||
Array<Pointf> GetPolygonPointsXml(String &strpoints) {
|
||||
Array<Pointf> points;
|
||||
int newpos, pos;
|
||||
char separator;
|
||||
|
||||
if (strpoints.Find(',') >= 0)
|
||||
separator = ',';
|
||||
else
|
||||
separator = ' ';
|
||||
|
||||
pos = newpos = 0;
|
||||
while (newpos != strpoints.GetCount()) {
|
||||
int x, y;
|
||||
if ((newpos = strpoints.Find(separator, pos)) < 0)
|
||||
break;
|
||||
x = atoi(strpoints.Mid(pos, newpos+1));
|
||||
pos = newpos+1;
|
||||
if ((newpos = strpoints.Find(' ', pos+1 < strpoints.GetCount()? pos+1: pos)) < 0) // Jump possible spaces
|
||||
newpos = strpoints.GetCount();
|
||||
y = atoi(strpoints.Mid(pos, newpos+1));
|
||||
pos = newpos+1;
|
||||
Pointf &point = points.Add();
|
||||
point.x = x;
|
||||
point.y = y;
|
||||
}
|
||||
return points;
|
||||
}
|
||||
|
||||
void SvgGet_Polygon(GraphElemList &elems, XmlParser &xp) {
|
||||
PolygonElem &elem = static_cast<PolygonElem&>(elems.elems.Add(new PolygonElem()));
|
||||
|
||||
for (int i = 0; i < xp.GetAttrCount(); ++i) {
|
||||
String attr = xp.GetAttr(i);
|
||||
if (attr == "points") {
|
||||
String strpoints;
|
||||
strpoints = NormalizeSpaces(xp[i]);
|
||||
elem.points = GetPolygonPointsXml(strpoints);
|
||||
} else if (attr == "style")
|
||||
elem.style.Set(xp[i]);
|
||||
else if (attr == "transform") {
|
||||
Array<double> args;
|
||||
args = GetTransformArgs(xp[i], "translate");
|
||||
if (!args.IsEmpty())
|
||||
elem.transf.Translate(args[0], args[1]);
|
||||
args = GetTransformArgs(xp[i], "scale");
|
||||
if (!args.IsEmpty())
|
||||
elem.transf.Scale(args[0], args[1]);
|
||||
}
|
||||
}
|
||||
elem.SetLimits();
|
||||
}
|
||||
|
||||
void SvgGet_Title(GraphElemList &elems, XmlParser &xp) {
|
||||
elems.title = xp.ReadText();
|
||||
}
|
||||
|
||||
void SvgGet_Text(GraphElemList &elems, XmlParser &xp) {
|
||||
TextElem &elem = static_cast<TextElem&>(elems.elems.Add(new TextElem()));
|
||||
|
||||
elem.text = xp.ReadText();
|
||||
elem.text.Replace("\n", " ");
|
||||
elem.text.Replace("\r", "");
|
||||
|
||||
for (int i = 0; i < xp.GetAttrCount(); ++i) {
|
||||
String attr = xp.GetAttr(i);
|
||||
if (attr == "x")
|
||||
elem.x = atoi(xp[i]);
|
||||
else if (attr == "y")
|
||||
elem.y = atoi(xp[i]);
|
||||
else if (attr == "style") {
|
||||
elem.style.Set(xp[i]);
|
||||
|
||||
if (elem.style.strokeColor.IsNullInstance())
|
||||
elem.style.strokeColor = Black();
|
||||
if (elem.style.strokeFill.IsNullInstance())
|
||||
elem.style.strokeFill = elem.style.strokeColor;
|
||||
String fontText;
|
||||
fontText = GetValueStringXml(xp[i], "font-family:");
|
||||
if (fontText.Find("Roman") >= 0)
|
||||
elem.f.Face(Font::ROMAN);
|
||||
else if (fontText.Find("Arial") >= 0)
|
||||
elem.f.Face(Font::ARIAL);
|
||||
else if (fontText.Find("Courier") >= 0)
|
||||
elem.f.Face(Font::COURIER);
|
||||
elem.f.Height(atoi(GetValueStringXml(xp[i], "font-size:"))*elem.factor);
|
||||
if (elem.f.GetHeight() == 0)
|
||||
elem.f.Height(12*elem.factor);
|
||||
} else if (attr == "transform") {
|
||||
Array<double> args;
|
||||
args = GetTransformArgs(xp[i], "translate");
|
||||
if (!args.IsEmpty())
|
||||
elem.transf.Translate(args[0], args[1]);
|
||||
args = GetTransformArgs(xp[i], "scale");
|
||||
if (!args.IsEmpty())
|
||||
elem.transf.Scale(args[0], args[1]);
|
||||
}
|
||||
}
|
||||
elem.SetLimits();
|
||||
}
|
||||
|
||||
void SvgGet_Path(GraphElemList &elems, XmlParser &xp) {
|
||||
PathElem &elem = static_cast<PathElem&>(elems.elems.Add(new PathElem()));
|
||||
|
||||
for (int i = 0; i < xp.GetAttrCount(); ++i) {
|
||||
String attr = xp.GetAttr(i);
|
||||
if (attr == "d")
|
||||
elem.path = xp[i];
|
||||
else if (attr == "style")
|
||||
elem.style.Set(xp[i]);
|
||||
else if (attr == "transform") {
|
||||
Array<double> args;
|
||||
args = GetTransformArgs(xp[i], "translate");
|
||||
if (!args.IsEmpty())
|
||||
elem.transf.Translate(args[0], args[1]);
|
||||
args = GetTransformArgs(xp[i], "scale");
|
||||
if (!args.IsEmpty())
|
||||
elem.transf.Scale(args[0], args[1]);
|
||||
}
|
||||
}
|
||||
elem.SetLimits();
|
||||
}
|
||||
|
||||
void SvgGet_G(GraphElemList &elems, XmlParser &xp, const char *svgFolder) {
|
||||
GraphElemList &elem = static_cast<GraphElemList&>(elems.elems.Add(new GraphElemList()));
|
||||
|
||||
for (int i = 0; i < xp.GetAttrCount(); ++i) {
|
||||
String attr = xp.GetAttr(i);
|
||||
if (attr == "style")
|
||||
elem.style.Set(xp[i]);
|
||||
else if (attr == "transform") {
|
||||
Array<double> args;
|
||||
args = GetTransformArgs(xp[i], "translate");
|
||||
if (!args.IsEmpty())
|
||||
elem.transf.Translate(args[0], args[1]);
|
||||
args = GetTransformArgs(xp[i], "scale");
|
||||
if (!args.IsEmpty())
|
||||
elem.transf.Scale(args[0], args[1]);
|
||||
}
|
||||
}
|
||||
while(!xp.End())
|
||||
ParseG(elem, xp, elem.transf, elem.style, svgFolder);
|
||||
elem.SetLimits();
|
||||
}
|
||||
|
||||
void ParseG(GraphElemList &elems, XmlParser &xp, Svg2DTransform transf, SvgStyle style, const char *svgFolder) {
|
||||
if(xp.TagE("rect"))
|
||||
SvgGet_Rect(elems, xp);
|
||||
else if(xp.TagE("ellipse"))
|
||||
SvgGet_Ellipse(elems, xp);
|
||||
else if(xp.TagE("line"))
|
||||
SvgGet_Line(elems, xp);
|
||||
else if(xp.TagE("polygon"))
|
||||
SvgGet_Polygon(elems, xp);
|
||||
else if(xp.TagE("polyline"))
|
||||
SvgGet_Polygon(elems, xp);
|
||||
else if(xp.TagE("path"))
|
||||
SvgGet_Path(elems, xp);
|
||||
else if(xp.TagE("image"))
|
||||
SvgGet_Image(elems, xp, svgFolder);
|
||||
else if(xp.Tag("text")) {
|
||||
SvgGet_Text(elems, xp);
|
||||
xp.PassEnd();
|
||||
} else if(xp.Tag("g"))
|
||||
SvgGet_G(elems, xp, svgFolder);
|
||||
else if(xp.Tag("title")) {
|
||||
SvgGet_Title(elems, xp);
|
||||
xp.PassEnd();
|
||||
} else
|
||||
xp.Skip();
|
||||
}
|
||||
|
||||
bool ParseSVG(DrawingCanvas &canvas, const char *svgFile, const char *svgFolder) {
|
||||
XmlParser xp(svgFile);
|
||||
while(!xp.IsTag())
|
||||
xp.Skip();
|
||||
xp.PassTag("svg");
|
||||
Svg2DTransform transf;
|
||||
SvgStyle style;
|
||||
style.SetStrokeFill(Black()).SetStrokeOpacity(1);
|
||||
//p.Begin();
|
||||
while(!xp.End()) {
|
||||
transf.Init();
|
||||
style.Init();
|
||||
ParseG(canvas.elemList, xp, transf, style, svgFolder);
|
||||
}
|
||||
//p.End();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
DrawingCanvas::DrawingCanvas() {
|
||||
transparent = false;
|
||||
translateX = translateY = 0;
|
||||
rotate = 0;
|
||||
scale = 1;
|
||||
|
||||
quality = MODE_ANTIALIASED; // 1 or 2 MODE_NOAA = 1, MODE_SUBPIXEL = 2,
|
||||
linejoin = LINEJOIN_MITER;
|
||||
linecap = LINECAP_BUTT;
|
||||
transparent = false;
|
||||
opacity = 1;
|
||||
scaleFactor = 1.2;
|
||||
|
||||
focusMove.focusMoving = false;
|
||||
selectionWindow.isSelected = false;
|
||||
}
|
||||
|
||||
void DrawingCanvas::Paint(Draw& w) {
|
||||
Size sz = GetSize();
|
||||
if(transparent) {
|
||||
for(int y = 0; y + 32 < sz.cy; y += 32)
|
||||
for(int x = 0; x + 32 < sz.cx; x += 32)
|
||||
w.DrawRect(x, y, 32, 32, (x ^ y) & 32 ? Color(254, 172, 120) : Color(124, 135, 253));
|
||||
}
|
||||
ImageBuffer ib(sz);
|
||||
BufferPainter sw(ib, quality);
|
||||
DoPaint(sw);
|
||||
if (selectionWindow.isSelected) {
|
||||
sw.Rectangle(selectionWindow.selected.left, selectionWindow.selected.top,
|
||||
selectionWindow.selected.GetWidth(), selectionWindow.selected.GetHeight())
|
||||
.Opacity(0.4).Dash("1").Stroke(1, Black()).Fill(LtGray());
|
||||
//sw.RectPath(selectionWindow.selected).Dash("1").Stroke(0.5, Black());
|
||||
}
|
||||
w.DrawImage(0, 0, ib);
|
||||
}
|
||||
|
||||
void DrawingCanvas::DoPaint(Painter& sw) {
|
||||
sw.Translate(translateX, translateY);
|
||||
sw.Rotate(rotate);
|
||||
sw.Scale(scale, scale);
|
||||
sw.Opacity(opacity);
|
||||
sw.LineCap(linecap);
|
||||
sw.LineJoin(linejoin);
|
||||
{ PAINTER_TIMING("FILL");
|
||||
if(transparent)
|
||||
sw.Clear(RGBAZero());
|
||||
else
|
||||
sw.Clear(White());
|
||||
}
|
||||
Svg2DTransform trans;
|
||||
SvgStyle style;
|
||||
style.SetStrokeFill(Null).SetStrokeColor(Black()).SetStrokeOpacity(1).SetStrokeWidth(1);
|
||||
|
||||
sw.Begin();
|
||||
elemList.Paint(sw, trans, style, true);
|
||||
sw.End();
|
||||
}
|
||||
|
||||
|
||||
bool LoadSvg(DrawingCanvas &canvas, String fileName) {
|
||||
if (!FileExists(fileName))
|
||||
return false;
|
||||
|
||||
return ParseSVG(canvas, LoadFileBOM(fileName), GetFileDirectory(fileName));
|
||||
}
|
||||
|
||||
void DrawingCanvas::MouseWheel(Point p, int zdelta, dword keyflags) {
|
||||
Size sz = GetSize();
|
||||
double factor;
|
||||
if(zdelta > 0)
|
||||
factor = scaleFactor;
|
||||
else
|
||||
factor = 1/scaleFactor;
|
||||
|
||||
scale *= factor;
|
||||
translateX = sz.cx*(1-factor)/2. + translateX*factor;
|
||||
translateY = sz.cy*(1-factor)/2. + translateY*factor;
|
||||
|
||||
Refresh();
|
||||
}
|
||||
|
||||
void DrawingCanvas::MiddleDown(Point p, dword keyflags) {
|
||||
focusMove.lastFocusPoint = p;
|
||||
focusMove.focusMoving = true;
|
||||
}
|
||||
|
||||
void DrawingCanvas::MiddleUp(Point p, dword keyflags) {
|
||||
focusMove.focusMoving = false;
|
||||
}
|
||||
|
||||
void DrawingCanvas::MouseLeave() {
|
||||
focusMove.focusMoving = false;
|
||||
}
|
||||
|
||||
void DrawingCanvas::MouseMove(Point p, dword keyflags) {
|
||||
if (focusMove.focusMoving) {
|
||||
translateX -= focusMove.lastFocusPoint.x - p.x;
|
||||
translateY -= focusMove.lastFocusPoint.y - p.y;
|
||||
focusMove.lastFocusPoint = p;
|
||||
|
||||
Refresh();
|
||||
}
|
||||
if (selectionWindow.isSelected) {
|
||||
selectionWindow.selected.right = p.x;
|
||||
selectionWindow.selected.bottom = p.y;
|
||||
|
||||
Refresh();
|
||||
}
|
||||
}
|
||||
|
||||
void DrawingCanvas::LeftDown(Point p, dword keyflags) {
|
||||
selectionWindow.isSelected = true;
|
||||
selectionWindow.selected.left = selectionWindow.selected.right = p.x;
|
||||
selectionWindow.selected.top = selectionWindow.selected.bottom = p.y;
|
||||
}
|
||||
|
||||
void DrawingCanvas::LeftUp(Point p, dword keyflags) {
|
||||
if (selectionWindow.isSelected) {
|
||||
Refresh();
|
||||
selectionWindow.isSelected = false;
|
||||
}
|
||||
}
|
||||
497
bazaar/Controls4U/DrawingCanvas.h
Normal file
497
bazaar/Controls4U/DrawingCanvas.h
Normal file
|
|
@ -0,0 +1,497 @@
|
|||
#ifndef _Controls4U_DrawingCanvas_h_
|
||||
#define _Controls4U_DrawingCanvas_h_
|
||||
|
||||
class Svg2DTransform {
|
||||
public:
|
||||
Svg2DTransform() {Init();}
|
||||
Svg2DTransform(Svg2DTransform &transf) {*this = transf;}
|
||||
void Init() {
|
||||
transX = transY = 0;
|
||||
angle = 0;
|
||||
scaleX = scaleY = 1;
|
||||
}
|
||||
void Apply(Painter &sw) {
|
||||
sw.End();
|
||||
sw.Begin();
|
||||
sw.Translate(transX, transY);
|
||||
sw.Scale(scaleX, scaleY);
|
||||
sw.Rotate(angle);
|
||||
}
|
||||
void Translate(double x, double y) {
|
||||
transX += x;
|
||||
transY += y;
|
||||
}
|
||||
void Scale(double x, double y) {
|
||||
scaleX *= x;
|
||||
scaleY *= y;
|
||||
}
|
||||
void Rotate(double ang) {
|
||||
angle += ang;
|
||||
}
|
||||
Svg2DTransform &operator=(const Svg2DTransform &transf) {
|
||||
if (this == &transf) // Same object?
|
||||
return *this;
|
||||
transX = transf.transX;
|
||||
transY = transf.transY;
|
||||
angle = transf.angle;
|
||||
scaleX = transf.scaleX;
|
||||
scaleY = transf.scaleY;
|
||||
return *this;
|
||||
}
|
||||
Svg2DTransform &operator+=(const Svg2DTransform &transf) {
|
||||
if (this == &transf) // Same object?
|
||||
return *this;
|
||||
transX += transf.transX;
|
||||
transY += transf.transY;
|
||||
angle += transf.angle;
|
||||
scaleX *= transf.scaleX;
|
||||
scaleY *= transf.scaleY;
|
||||
return *this;
|
||||
}
|
||||
Svg2DTransform &SetTranslate(double x, double y) {
|
||||
transX = x;
|
||||
transY = y;
|
||||
return *this;
|
||||
}
|
||||
Svg2DTransform &SetScale(double x, double y) {
|
||||
scaleX = x;
|
||||
scaleY = y;
|
||||
return *this;
|
||||
}
|
||||
Svg2DTransform &SetRotate(double a) {
|
||||
angle = a;
|
||||
return *this;
|
||||
}
|
||||
|
||||
private:
|
||||
double transX;
|
||||
double transY;
|
||||
double angle;
|
||||
double scaleX;
|
||||
double scaleY;
|
||||
};
|
||||
|
||||
class SvgStyle {
|
||||
public:
|
||||
SvgStyle() {Init();}
|
||||
SvgStyle(SvgStyle &transf) {*this = transf;}
|
||||
void Init() {
|
||||
strokeWidth = Null;
|
||||
strokeFill = Null;
|
||||
strokeColor = Null;
|
||||
strokeOpacity = Null;
|
||||
}
|
||||
void Set(String str);
|
||||
void Apply(Painter &sw);
|
||||
SvgStyle &operator=(const SvgStyle &style);
|
||||
SvgStyle &operator+=(const SvgStyle &style);
|
||||
|
||||
SvgStyle &SetStrokeWidth(int c) {strokeWidth = c; return *this;}
|
||||
SvgStyle &SetStrokeFill(Color c) {strokeFill = c; return *this;}
|
||||
SvgStyle &SetStrokeColor(Color c) {strokeColor = c; return *this;}
|
||||
SvgStyle &SetStrokeOpacity(double c) {strokeOpacity = c; return *this;}
|
||||
|
||||
public:
|
||||
int strokeWidth;
|
||||
Color strokeFill;
|
||||
Color strokeColor;
|
||||
double strokeOpacity;
|
||||
};
|
||||
|
||||
class GraphElemLimits : public Rectf {
|
||||
public:
|
||||
GraphElemLimits() {
|
||||
Reset();
|
||||
}
|
||||
void Reset() {
|
||||
left = top = -DOUBLE_NULL_LIM;
|
||||
right = bottom = DOUBLE_NULL_LIM;
|
||||
}
|
||||
void UpdateLimits(const Pointf &p) {
|
||||
UpdateLimitsH(p.x);
|
||||
UpdateLimitsV(p.y);
|
||||
}
|
||||
void UpdateLimitsH(double x) {
|
||||
if (x > right)
|
||||
right = x;
|
||||
if (x < left)
|
||||
left = x;
|
||||
}
|
||||
void UpdateLimitsV(double y) {
|
||||
if (y > bottom)
|
||||
bottom = y;
|
||||
if (y < top)
|
||||
top = y;
|
||||
}
|
||||
void Cubic(const Pointf& p1, const Pointf& p2, const Pointf& p, bool rel) {
|
||||
/*DoMove0();
|
||||
CubicData& m = PathAdd<CubicData>(CUBIC);
|
||||
m.p1 = PathPoint(p1, rel);
|
||||
ccontrol = m.p2 = PathPoint(p2, rel);
|
||||
m.p = EndPoint(p, rel);*/
|
||||
//UpdateLimits(p1);
|
||||
UpdateLimits(p2);
|
||||
UpdateLimits(p);
|
||||
}
|
||||
};
|
||||
|
||||
class GraphElem {
|
||||
public:
|
||||
Svg2DTransform transf;
|
||||
SvgStyle style;
|
||||
GraphElemLimits limits;
|
||||
|
||||
virtual void Paint(Painter &sw, Svg2DTransform transf, SvgStyle style, bool firstLayer) {};
|
||||
virtual void SetLimits() {};
|
||||
virtual void PaintLimits(Painter &sw) {
|
||||
if (limits == GraphElemLimits())
|
||||
return;
|
||||
|
||||
sw.Rectangle(limits.left, limits.top, limits.GetWidth(), limits.GetHeight())
|
||||
.Opacity(0.3).Stroke(0.5, Black()).Fill(LtBlue());
|
||||
sw.Move(limits.left, limits.top);
|
||||
sw.Line(limits.right, limits.bottom).Opacity(0.3).Stroke(0.5, Black());
|
||||
sw.Move(limits.right, limits.top);
|
||||
sw.Line(limits.left, limits.bottom).Opacity(0.3).Stroke(0.5, Black());
|
||||
}
|
||||
virtual ~GraphElem() {};
|
||||
};
|
||||
|
||||
|
||||
class LineElem : public GraphElem {
|
||||
public:
|
||||
virtual void Paint(Painter &sw, Svg2DTransform _transf, SvgStyle _style, bool) {
|
||||
_transf += transf;
|
||||
_transf.Apply(sw);
|
||||
sw.Move(x1, y1);
|
||||
sw.Line(x2, y2);
|
||||
_style += style;
|
||||
_style.Apply(sw);
|
||||
PaintLimits(sw);
|
||||
}
|
||||
virtual void SetLimits() {
|
||||
limits.left = x1;
|
||||
limits.top = y1;
|
||||
limits.right = x2;
|
||||
limits.bottom = y2;
|
||||
}
|
||||
LineElem(double x1, double y1, double x2, double y2) : x1(x1), x2(x2), y1(y1), y2(y2) {SetLimits();}
|
||||
LineElem() {x1 = x2 = y1 = y2 = 0;}
|
||||
|
||||
//private:
|
||||
double x1, y1, x2, y2;
|
||||
};
|
||||
|
||||
class RectElem : public GraphElem {
|
||||
public:
|
||||
virtual void Paint(Painter &sw, Svg2DTransform _transf, SvgStyle _style, bool) {
|
||||
_transf += transf;
|
||||
_transf.Apply(sw);
|
||||
sw.Rectangle(x, y, width, height);
|
||||
_style += style;
|
||||
_style.Apply(sw);
|
||||
PaintLimits(sw);
|
||||
}
|
||||
virtual void SetLimits() {
|
||||
limits.left = x;
|
||||
limits.top = y;
|
||||
limits.right = x + width;
|
||||
limits.bottom = y + height;
|
||||
}
|
||||
RectElem(double x, double y, double width, double height) : x(x), y(y), width(width), height(height) {SetLimits();}
|
||||
RectElem() {x = y = width = height = 0;}
|
||||
|
||||
//private:
|
||||
double x, y, width, height;
|
||||
};
|
||||
|
||||
class EllipseElem : public GraphElem {
|
||||
public:
|
||||
virtual void Paint(Painter &sw, Svg2DTransform _transf, SvgStyle _style, bool) {
|
||||
_transf += transf;
|
||||
_transf.Apply(sw);
|
||||
sw.Ellipse(x, y, width, height);
|
||||
_style += style;
|
||||
_style.Apply(sw);
|
||||
PaintLimits(sw);
|
||||
}
|
||||
virtual void SetLimits() {
|
||||
limits.left = x - width;
|
||||
limits.top = y - height;
|
||||
limits.right = x + width;
|
||||
limits.bottom = y + height;
|
||||
}
|
||||
EllipseElem(double x, double y, double width, double height) : x(x), y(y), width(width), height(height) {SetLimits();}
|
||||
EllipseElem() {x = y = width = height = 0;}
|
||||
|
||||
//private:
|
||||
double x, y, width, height;
|
||||
};
|
||||
|
||||
class ImageElem : public GraphElem {
|
||||
public:
|
||||
virtual void Paint(Painter &sw, Svg2DTransform _transf, SvgStyle _style, bool) {
|
||||
if (IsNull(img))
|
||||
img = StreamRaster::LoadFileAny(fileName);
|
||||
_transf += transf;
|
||||
_transf.Apply(sw);
|
||||
sw.Rectangle(x, y, width, height).Fill(img, x, y, width, 0).Stroke(0, Black());
|
||||
_style += style;
|
||||
_style.Apply(sw);
|
||||
PaintLimits(sw);
|
||||
}
|
||||
virtual void SetLimits() {
|
||||
limits.left = x;
|
||||
limits.top = y;
|
||||
limits.right = x + width;
|
||||
limits.bottom = y + height;
|
||||
}
|
||||
ImageElem(double x, double y, double width, double height, String fileName) : x(x), y(y),
|
||||
width(width), height(height), fileName(fileName) {img = Null; SetLimits();}
|
||||
ImageElem() {x = y = width = height = 0; img = Null;}
|
||||
|
||||
//private:
|
||||
double x, y, width, height;
|
||||
String fileName;
|
||||
Image img;
|
||||
};
|
||||
|
||||
class PolygonElem : public GraphElem {
|
||||
public:
|
||||
virtual void Paint(Painter &sw, Svg2DTransform _transf, SvgStyle _style, bool) {
|
||||
_transf += transf;
|
||||
_transf.Apply(sw);
|
||||
sw.Move(points[0].x, points[0].y);
|
||||
for (int i = 1; i < points.GetCount(); ++i)
|
||||
sw.Line(points[i].x, points[i].y);
|
||||
_style += style;
|
||||
_style.Apply(sw);
|
||||
PaintLimits(sw);
|
||||
}
|
||||
virtual void SetLimits() {
|
||||
limits.Reset();
|
||||
for (int i = 0; i < points.GetCount(); ++i)
|
||||
limits.UpdateLimits(points[i]);
|
||||
}
|
||||
PolygonElem() {}
|
||||
|
||||
//private:
|
||||
Array<Pointf> points;
|
||||
};
|
||||
|
||||
class TextElem : public GraphElem {
|
||||
public:
|
||||
virtual void Paint(Painter &sw, Svg2DTransform _transf, SvgStyle _style, bool) {
|
||||
_transf.Translate(x, y-f.GetHeight()/factor);
|
||||
_transf.Scale(1./factor, 1./factor);
|
||||
_transf += transf;
|
||||
_transf.Apply(sw);
|
||||
sw.Text(0, 0, text, f);
|
||||
_style += style;
|
||||
_style.Apply(sw);
|
||||
PaintLimits(sw);
|
||||
}
|
||||
virtual void SetLimits() {
|
||||
limits.left = 0;
|
||||
limits.top = 0;
|
||||
|
||||
FontInfo fi = f.Info();
|
||||
limits.right = limits.left;
|
||||
WString wtext(text);
|
||||
for (int i = 0; i < wtext.GetCount(); ++i)
|
||||
limits.right += fi[wtext[i]];
|
||||
limits.bottom = limits.top + f.GetHeight();
|
||||
}
|
||||
TextElem() {
|
||||
factor = 20;
|
||||
f.Face(Font::ARIAL);
|
||||
f.Height(12);
|
||||
}
|
||||
|
||||
//private:
|
||||
double x, y;
|
||||
String text;
|
||||
String font;
|
||||
Font f;
|
||||
int factor;
|
||||
};
|
||||
|
||||
class PathElem : public GraphElem {
|
||||
public:
|
||||
virtual void Paint(Painter &sw, Svg2DTransform _transf, SvgStyle _style, bool) {
|
||||
_transf += transf;
|
||||
_transf.Apply(sw);
|
||||
if (!path.IsEmpty())
|
||||
sw.Path(path);
|
||||
_style += style;
|
||||
_style.Apply(sw);
|
||||
PaintLimits(sw);
|
||||
}
|
||||
bool ReadBool(CParser& p) { // Painter::
|
||||
while(p.Char(','));
|
||||
if(p.Char('1')) return true;
|
||||
p.Char('0');
|
||||
return false;
|
||||
}
|
||||
double ReadDouble(CParser& p) { // Painter::
|
||||
while(p.Char(','));
|
||||
return p.IsDouble() ? p.ReadDouble() : 0;
|
||||
}
|
||||
Pointf ReadPoint(CParser& p) { // Painter::
|
||||
Pointf t;
|
||||
t.x = ReadDouble(p);
|
||||
t.y = ReadDouble(p);
|
||||
return t;
|
||||
}
|
||||
virtual void SetLimits() {
|
||||
CParser p(path);
|
||||
limits.Reset();
|
||||
while(!p.IsEof()) {
|
||||
int c = p.GetChar();
|
||||
p.Spaces();
|
||||
bool rel = IsLower(c);
|
||||
Pointf t, t1, t2;
|
||||
switch(ToUpper(c)) {
|
||||
case 'M':
|
||||
t = ReadPoint(p);
|
||||
//Move(t, rel);
|
||||
limits.UpdateLimits(t);
|
||||
case 'L':
|
||||
while(p.IsDouble()) {
|
||||
t = ReadPoint(p);
|
||||
//Line(t, rel);
|
||||
limits.UpdateLimits(t);
|
||||
}
|
||||
break;
|
||||
case 'Z':
|
||||
//Close();
|
||||
break;
|
||||
case 'H':
|
||||
while(p.IsDouble())
|
||||
//Line(p.ReadDouble(), Null, rel);
|
||||
limits.UpdateLimitsH(p.ReadDouble());
|
||||
break;
|
||||
case 'V':
|
||||
while(p.IsDouble())
|
||||
//Line(Null, p.ReadDouble(), rel);
|
||||
limits.UpdateLimitsV(p.ReadDouble());
|
||||
;
|
||||
break;
|
||||
case 'C':
|
||||
while(p.IsDouble()) {
|
||||
t1 = ReadPoint(p);
|
||||
t2 = ReadPoint(p);
|
||||
t = ReadPoint(p);
|
||||
limits.Cubic(t1, t2, t, rel);
|
||||
//Cubic(t1, t2, t, rel);
|
||||
}
|
||||
break;
|
||||
case 'S':
|
||||
while(p.IsDouble()) {
|
||||
t2 = ReadPoint(p);
|
||||
t = ReadPoint(p);
|
||||
//Cubic(t2, t, rel);
|
||||
//limits.UpdateLimits(t2);
|
||||
limits.UpdateLimits(t);
|
||||
}
|
||||
break;
|
||||
case 'Q':
|
||||
while(p.IsDouble()) {
|
||||
t1 = ReadPoint(p);
|
||||
t = ReadPoint(p);
|
||||
//Quadratic(t1, t, rel);
|
||||
//limits.UpdateLimits(t1);
|
||||
limits.UpdateLimits(t);
|
||||
}
|
||||
break;
|
||||
case 'T':
|
||||
while(p.IsDouble()) {
|
||||
t = ReadPoint(p);
|
||||
//Quadratic(t, rel);
|
||||
limits.UpdateLimits(t);
|
||||
}
|
||||
break;
|
||||
case 'A':
|
||||
while(p.IsDouble()) {
|
||||
t1 = ReadPoint(p);
|
||||
double xangle = ReadDouble(p);
|
||||
bool large = ReadBool(p);
|
||||
bool sweep = ReadBool(p);
|
||||
t = ReadPoint(p);
|
||||
//SvgArc(t1, xangle * M_PI / 180.0, large, sweep, t, rel);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
PathElem() {}
|
||||
|
||||
//private:
|
||||
String path;
|
||||
};
|
||||
|
||||
|
||||
class GraphElemList : public GraphElem {
|
||||
public:
|
||||
Array<GraphElem> elems;
|
||||
|
||||
String title;
|
||||
|
||||
void Paint(Painter &sw, Svg2DTransform transf, SvgStyle style, bool firstLayer = false);
|
||||
void Clear();
|
||||
};
|
||||
|
||||
|
||||
class CanvasSelector {
|
||||
typedef CanvasSelector CLASSNAME;
|
||||
public:
|
||||
|
||||
};
|
||||
|
||||
class DrawingCanvas : public Ctrl {
|
||||
typedef DrawingCanvas CLASSNAME;
|
||||
public:
|
||||
DrawingCanvas();
|
||||
|
||||
GraphElemList elemList;
|
||||
|
||||
protected:
|
||||
virtual void Paint(Draw& draw);
|
||||
|
||||
private:
|
||||
double translateX, translateY;
|
||||
double rotate;
|
||||
double scale;
|
||||
bool transparent;
|
||||
double opacity;
|
||||
int linejoin, linecap;
|
||||
int quality;
|
||||
double scaleFactor;
|
||||
|
||||
void DoPaint(Painter& sw);
|
||||
|
||||
virtual void MouseMove(Point p, dword keyflags);
|
||||
virtual void MouseWheel(Point p, int zdelta, dword keyflags);
|
||||
virtual void MiddleDown(Point p, dword keyflags);
|
||||
virtual void MiddleUp(Point p, dword keyflags);
|
||||
virtual void MouseLeave();
|
||||
struct FocusMove {
|
||||
bool focusMoving;
|
||||
Point lastFocusPoint;
|
||||
} focusMove;
|
||||
|
||||
virtual void LeftDown(Point p, dword keyflags);
|
||||
virtual void LeftUp(Point p, dword keyflags);
|
||||
struct SelectionWindow {
|
||||
bool isSelected;
|
||||
Rect selected;
|
||||
} selectionWindow;
|
||||
};
|
||||
|
||||
bool LoadSvg(DrawingCanvas &canvas, String fileName);
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
267
bazaar/Controls4U/ImgCtrl.cpp
Normal file
267
bazaar/Controls4U/ImgCtrl.cpp
Normal file
|
|
@ -0,0 +1,267 @@
|
|||
#include <CtrlLib/CtrlLib.h>
|
||||
|
||||
using namespace Upp;
|
||||
|
||||
//#include "ImageProcessing.h"
|
||||
#include "ImgCtrl.h"
|
||||
#include "SysInfo/SysInfo.h"
|
||||
#include "Candidates/CandidatesGui.h"
|
||||
|
||||
ImgCtrl::ImgCtrl()
|
||||
{
|
||||
BackPaint();
|
||||
|
||||
x0 = y0 = xDelta = yDelta = 0.;
|
||||
|
||||
moving = false;
|
||||
lastPoint = Point(0,0);
|
||||
|
||||
factor = 0.0;
|
||||
width = height = 0;
|
||||
|
||||
showZoom = true;
|
||||
thumb = true;
|
||||
}
|
||||
|
||||
bool ImgCtrl::IsEmpty()
|
||||
{
|
||||
return width == 0;
|
||||
}
|
||||
|
||||
void ImgCtrl::Paint(Draw& w)
|
||||
{
|
||||
WString strTemp;
|
||||
Size sz = GetSize();
|
||||
|
||||
w.DrawRect(GetSize(), White);
|
||||
if(imageRep) {
|
||||
w.DrawImage((int)x0, (int)y0, imageRep);
|
||||
if(showZoom) {
|
||||
strTemp = Format(t_("Zoom: %2.2f"), factor).ToWString();
|
||||
w.DrawText(sz.cx-120, sz.cy-13, strTemp, Arial(10));
|
||||
}
|
||||
}
|
||||
if (thumb && width > 0) {
|
||||
double rate = 100./width;
|
||||
int twidth = 100;
|
||||
int theight = int(rate*height);
|
||||
int tx = sz.cx-twidth-20;
|
||||
int ty = sz.cy-theight-20;
|
||||
|
||||
Color black = Black();
|
||||
DrawRectLine(w, tx-1, ty-1, twidth+1, theight+1, 1, black); // Borde de la imagen principal
|
||||
w.DrawImage(tx, ty, twidth, theight, image);
|
||||
double rateRep = 100./imageRep.GetWidth();
|
||||
DrawRectLine(w, int(tx-x0*rateRep-1), int(ty-y0*rateRep-1),
|
||||
1+int(twidth*sz.cx/imageRep.GetWidth()),
|
||||
1+int(theight*sz.cy/imageRep.GetHeight()), 1, black); // Rectangulo con la parte visible de la imagen
|
||||
}
|
||||
}
|
||||
|
||||
Size ZoomProportional(Size frame, Size space, double &x0, double &y0, double scale, double step) {
|
||||
if (scale == 0)
|
||||
return Null;
|
||||
|
||||
int frameWidth = frame.cx;
|
||||
int frameHeight = frame.cy;
|
||||
|
||||
Size ret((int)(scale*space.cx), (int)(scale*space.cy));
|
||||
|
||||
scale = step;
|
||||
x0 = frameWidth*(1-scale)/2 + x0*scale;
|
||||
y0 = frameHeight*(1-scale)/2 + y0*scale;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void ImgCtrl::Zoom(double m_fStep)
|
||||
{
|
||||
if(factor*m_fStep > MAX_ZOOM_FACTOR || factor*m_fStep < MIN_ZOOM_FACTOR)
|
||||
return;
|
||||
|
||||
factor = factor*m_fStep;
|
||||
Size s = ZoomProportional(GetSize(), image.GetSize(), x0, y0, factor, m_fStep);
|
||||
|
||||
xDelta = x0;
|
||||
yDelta = y0;
|
||||
imageRep = Rescale(image, s, Rect(0, 0, width, height));
|
||||
|
||||
Refresh();
|
||||
}
|
||||
|
||||
/*
|
||||
Rectf ZoomProportional(Size frame, Rectf &image, double step) {
|
||||
// if (scale == 0)
|
||||
// return Null;
|
||||
|
||||
int frameWidth = frame.cx;
|
||||
int frameHeight = frame.cy;
|
||||
|
||||
Rectf ret;
|
||||
ret.left = frameWidth*(1-step)/2 + image.left*step;
|
||||
ret.top = frameHeight*(1-step)/2 + image.top*step;
|
||||
ret.right = ret.left + step*image.GetWidth();
|
||||
ret.bottom = ret.top + step*image.GetHeight();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void ImgCtrl::Zoom(double m_fStep)
|
||||
{
|
||||
if(m_fFactor*m_fStep > MAX_ZOOM_FACTOR || m_fFactor*m_fStep < MIN_ZOOM_FACTOR)
|
||||
return;
|
||||
|
||||
Rectf r = Rectf(x0, m_p0y, m_fFactor*m_Img.GetWidth(), m_fFactor*m_Img.GetHeight());
|
||||
Rectf rr = ZoomProportional(GetSize(), r, m_fStep);
|
||||
m_fFactor = m_fFactor*m_fStep;
|
||||
|
||||
m_pUx = x0 = rr.left;
|
||||
m_pUy = m_p0y = rr.top;
|
||||
m_ImgRep = Rescale(m_Img, Size(rr.GetWidth(), rr.GetHeight()), Rect(0, 0, Width, Height));
|
||||
|
||||
Refresh();
|
||||
}
|
||||
*/
|
||||
// Resize and center to fit in the control
|
||||
void ImgCtrl::Fit()
|
||||
{
|
||||
if (image) {
|
||||
Size szImage = image.GetSize();
|
||||
|
||||
Rect r = FitInFrame(GetSize(), szImage);
|
||||
|
||||
factor = r.GetWidth()/(double)szImage.cx;
|
||||
|
||||
xDelta = x0 = r.left;
|
||||
yDelta = y0 = r.top;
|
||||
imageRep = Rescale(image, Size(r.Width(), r.Height()), Rect(0, 0, szImage.cx, szImage.cy));
|
||||
}
|
||||
Refresh();
|
||||
}
|
||||
// Resize to real img size
|
||||
void ImgCtrl::RealSize()
|
||||
{
|
||||
if(image) {
|
||||
xDelta = x0 = 0.;
|
||||
yDelta = y0 = 0.;
|
||||
factor = 1.0;
|
||||
imageRep = image;
|
||||
|
||||
Refresh();
|
||||
}
|
||||
}
|
||||
void ImgCtrl::GetRectRep(double &left, double &top, double &_width, double &_height)
|
||||
{
|
||||
left = x0;
|
||||
top = y0;
|
||||
_width = imageRep.GetWidth();
|
||||
_height = imageRep.GetHeight();
|
||||
}
|
||||
void ImgCtrl::GetRepXY(double x, double y, int &repx, int &repy)
|
||||
{
|
||||
repx = int(x*imageRep.GetWidth()/GetWidth() + x0);
|
||||
repy = int(y*imageRep.GetHeight()/GetHeight() + y0);
|
||||
}
|
||||
void ImgCtrl::GetXYRep(int repx, int repy, double &x, double &y)
|
||||
{
|
||||
x = double((repx - xDelta)*GetWidth() - x0)/imageRep.GetWidth();
|
||||
y = double((repy - yDelta)*GetHeight() - y0)/imageRep.GetHeight();
|
||||
}
|
||||
void ImgCtrl::MouseWheel(Point p, int zdelta, dword keyflags)
|
||||
{
|
||||
if(zdelta > 0)
|
||||
Zoom(1.2);
|
||||
else
|
||||
Zoom(1/1.2);
|
||||
}
|
||||
void ImgCtrl::LocalMenu(Bar& bar)
|
||||
{
|
||||
if(imageRep) {
|
||||
bar.Add("Window size", THISBACK(Fit));
|
||||
bar.Add("Real size", THISBACK(RealSize));
|
||||
bar.Add("B&N", THISBACK(BW));
|
||||
}
|
||||
}
|
||||
void ImgCtrl::RightDown(Point p, dword keyflags)
|
||||
{
|
||||
MenuBar::Execute(THISBACK(LocalMenu));
|
||||
}
|
||||
void ImgCtrl::LeftDown(Point p, dword keyflags)
|
||||
{
|
||||
lastPoint = p;
|
||||
moving = true;
|
||||
}
|
||||
void ImgCtrl::LeftUp(Point p, dword keyflags)
|
||||
{
|
||||
xDelta = x0; //Largou-se o rapo, guardar deslocamento onde parou
|
||||
yDelta = y0;
|
||||
moving = false;
|
||||
}
|
||||
void ImgCtrl::MouseMove(Point p, dword keyflags)
|
||||
{
|
||||
Point pDif;
|
||||
|
||||
if(moving) {
|
||||
pDif = lastPoint - p;
|
||||
|
||||
//Exclamation(Format("Last(%d,%d) Actual(%d,%d), Dif(%d,%d)",m_pLastPoint.x,m_pLastPoint.y,p.x,p.y,pDif.x,pDif.y));
|
||||
int deslocX = -pDif.x;
|
||||
int deslocY = -pDif.y;
|
||||
|
||||
x0 = xDelta + deslocX;
|
||||
y0 = yDelta + deslocY;
|
||||
|
||||
Refresh();
|
||||
}
|
||||
}
|
||||
void ImgCtrl::Load(const WString fileName)
|
||||
{
|
||||
image.Clear();
|
||||
|
||||
image = StreamRaster::LoadFileAny(fileName.ToString());
|
||||
if(image)
|
||||
SetImage(image);
|
||||
}
|
||||
|
||||
bool ImgCtrl::Save(String fileName, String ext, int qualityBpp)
|
||||
{
|
||||
return SaveImage(image, qualityBpp, fileName, ext);
|
||||
};
|
||||
|
||||
void ImgCtrl::Print(int n_draw_origin_x, int n_draw_origin_y, int n_image_cx, int n_image_cy)
|
||||
{
|
||||
PrintImage(image, n_draw_origin_x, n_draw_origin_y, n_image_cx, n_image_cy);
|
||||
}
|
||||
|
||||
void ImgCtrl::SetImage(ImageBuffer img) {
|
||||
image = img;
|
||||
width = image.GetWidth();
|
||||
height = image.GetHeight();
|
||||
Fit();
|
||||
};
|
||||
|
||||
void ImgCtrl::SetImage(Image img) {
|
||||
image = img;
|
||||
width = image.GetWidth();
|
||||
height = image.GetHeight();
|
||||
Fit();
|
||||
};
|
||||
|
||||
void ImgCtrl::SetImage(const char *fileName) {
|
||||
SetImage(StreamRaster::LoadFileAny(fileName));
|
||||
}
|
||||
|
||||
void ImgCtrl::SetZoomVisible(const bool b_show)
|
||||
{
|
||||
showZoom = b_show;
|
||||
}
|
||||
void ImgCtrl::SetThumbVisible(bool _thumb)
|
||||
{
|
||||
thumb = _thumb;;
|
||||
}
|
||||
|
||||
void ImgCtrl::BW()
|
||||
{
|
||||
image = Grayscale(image);
|
||||
Zoom(1);
|
||||
}
|
||||
67
bazaar/Controls4U/ImgCtrl.h
Normal file
67
bazaar/Controls4U/ImgCtrl.h
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
#ifndef _Controls4U_ImgCtrl_h_
|
||||
#define _Controls4U_ImgCtrl_h_
|
||||
|
||||
#define MAX_STEP 0.5
|
||||
#define MIN_ZOOM_FACTOR 0.1
|
||||
#define MAX_ZOOM_FACTOR 5.00
|
||||
|
||||
class ImgCtrl : public Ctrl {
|
||||
public:
|
||||
typedef ImgCtrl CLASSNAME;
|
||||
ImgCtrl();
|
||||
|
||||
void Zoom(double m_fStep);
|
||||
void Fit();
|
||||
void RealSize();
|
||||
|
||||
void SetStepZoomFactor(double f_step);
|
||||
void SetZoomVisible(bool b_show);
|
||||
void SetThumbVisible(bool _thumb);
|
||||
|
||||
Image &GetImage() {return image;};
|
||||
void SetImage(ImageBuffer img);
|
||||
void SetImage(Image img);
|
||||
void SetImage(const char *fileName);
|
||||
|
||||
virtual void MouseWheel(Point p, int zdelta, dword keyflags);
|
||||
virtual void RightDown(Point p, dword keyflags);
|
||||
|
||||
virtual void LeftDown(Point p, dword keyflags);
|
||||
virtual void LeftUp(Point p, dword keyflags);
|
||||
virtual void MouseMove(Point p, dword keyflags);
|
||||
|
||||
int GetHeight() {return image.GetHeight();};
|
||||
int GetWidth() {return image.GetWidth();};
|
||||
void GetRectRep(double &left, double &top, double &width, double &height);
|
||||
void GetRepXY(double x, double y, int &repx, int &repy);
|
||||
void GetXYRep(int repx, int repy, double &x, double &y);
|
||||
|
||||
void Load(const WString str_img_path);
|
||||
bool Save(String fileName, String ext, int qualityBpp = -1);
|
||||
void Print(int n_draw_origin_x=0,int n_draw_origin_y=0,int n_image_cx=1000,int n_image_cy=1000);
|
||||
|
||||
bool IsEmpty();
|
||||
|
||||
void BW();
|
||||
|
||||
virtual void Paint(Draw& w);
|
||||
|
||||
private:
|
||||
void LocalMenu(Bar& bar);
|
||||
|
||||
double x0, y0; //Coordenada origem para desenho
|
||||
double xDelta, yDelta; //Guarda o ultimo deslocamento em relação ao 0,0
|
||||
|
||||
int width, height;
|
||||
|
||||
Image image;
|
||||
Image imageRep;
|
||||
double factor;
|
||||
|
||||
bool moving;
|
||||
Point lastPoint;
|
||||
bool showZoom;
|
||||
bool thumb;
|
||||
};
|
||||
|
||||
#endif
|
||||
575
bazaar/Controls4U/SliderCtrlX.cpp
Normal file
575
bazaar/Controls4U/SliderCtrlX.cpp
Normal file
|
|
@ -0,0 +1,575 @@
|
|||
/***********************************************************************************************
|
||||
* SliderCtrlX
|
||||
*
|
||||
* Enhanced Slider Control / Slider indicator
|
||||
*
|
||||
* Autors : avpavp, jerson, jibe, koldo
|
||||
* Last modified : June 09, 2011
|
||||
*
|
||||
* 2do : adjust default values when changing CONTROL/INDICATOR
|
||||
* Better .usc file
|
||||
* Known bugs : Invalid memory access when choosing FillColor with .lay designer (seems to be
|
||||
* only with ubuntu. See http://www.ultimatepp.org/forum/index.php?t=msg&th=6022&start=0&
|
||||
**********************************************************************************************/
|
||||
|
||||
#include <CtrlLib/CtrlLib.h>
|
||||
|
||||
using namespace Upp;
|
||||
|
||||
#include "SliderCtrlX.h"
|
||||
|
||||
#define IMAGECLASS SliderThumbsImg
|
||||
#define IMAGEFILE <Controls4U/SliderCtrlX.iml>
|
||||
#include <Draw/iml.h>
|
||||
|
||||
SliderCtrlX::SliderCtrlX()
|
||||
: m_nMin(0)
|
||||
, m_nMax(100)
|
||||
, m_bInverted(false)
|
||||
, m_nStep(1)
|
||||
, m_bRound_step(false)
|
||||
, m_bJump(false)
|
||||
, m_bUseCustomThumbs( 0 )
|
||||
, m_nMajorTicks( 10 )
|
||||
, m_nMinorTicks( 2 )
|
||||
, m_nMajorTickSize( 30 )
|
||||
, m_nMinorTickSize( 20 )
|
||||
, m_nTickPosition( TOP )
|
||||
, m_nThickness( 2 )
|
||||
, m_nSliderType( 0 )
|
||||
, m_nThumbNumber( 1 )
|
||||
/***********************************************************************************************
|
||||
* Constructor
|
||||
* public
|
||||
**********************************************************************************************/
|
||||
{
|
||||
SetValue( 0 );
|
||||
|
||||
border2 = m_nThickness * BORDER_SIZE;
|
||||
Transparent();
|
||||
|
||||
m_ThumbImg.Clear();
|
||||
}
|
||||
|
||||
SliderCtrlX::~SliderCtrlX()
|
||||
/***********************************************************************************************
|
||||
* Destructor
|
||||
* virtual - public
|
||||
**********************************************************************************************/
|
||||
{
|
||||
}
|
||||
|
||||
SliderCtrlX& SliderCtrlX::AddOutCtrl( Ctrl* c )
|
||||
/***********************************************************************************************
|
||||
* public
|
||||
**********************************************************************************************/
|
||||
{
|
||||
m_vctrlOutput.Add( c );
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
int SliderCtrlX::ClientToSlider(int p) const
|
||||
/***********************************************************************************************
|
||||
* Converts Slider values to canvas coordinates
|
||||
* private
|
||||
**********************************************************************************************/
|
||||
{
|
||||
p -= HoVe(m_ThumbSize.cx/2, m_ThumbSize.cy/2);
|
||||
|
||||
return minmax(m_nMin + iscale(p, m_nMax - m_nMin,
|
||||
HoVe(GetSize().cx - border2 - m_ThumbSize.cx, GetSize().cy - border2 - m_ThumbSize.cy)), Min(), Max());
|
||||
}
|
||||
|
||||
void SliderCtrlX::Dec()
|
||||
/***********************************************************************************************
|
||||
* decrements the slider value
|
||||
* public
|
||||
**********************************************************************************************/
|
||||
{
|
||||
int n = m_vValues[0];
|
||||
if(IsNull(m_vValues[0]))
|
||||
n = Max();
|
||||
else
|
||||
if(n > Min()) {
|
||||
if(m_bRound_step && m_nStep > 1)
|
||||
n = idivfloor(n - 1, m_nStep) * m_nStep;
|
||||
else
|
||||
n -= m_nStep;
|
||||
if(n < Min())
|
||||
n = Min();
|
||||
}
|
||||
if(n != m_vValues[0]) {
|
||||
SetValue( n );
|
||||
WhenSlideFinish();
|
||||
UpdateActionRefresh();
|
||||
}
|
||||
}
|
||||
|
||||
void SliderCtrlX::DrawTick( Draw &w, MAJORMINOR Type, HOVE Orientation, int nPos, int nVal )
|
||||
/***********************************************************************************************
|
||||
* draws a tickmark at nPos on canvas
|
||||
* protected
|
||||
**********************************************************************************************/
|
||||
{
|
||||
Size size = GetSize();
|
||||
int sz = Orientation == HORZ ? size.cy : size.cx;
|
||||
int nMajorSize = (int)( m_nMajorTickSize / 100.0f * sz * .5 + 0.5f );
|
||||
int nMinorSize = (int)( m_nMinorTickSize / 100.0f * sz * .5 + 0.5f );
|
||||
int nMajorWidth = 3;
|
||||
int TickBottomMaj, TickBottomMin, TickTop;
|
||||
|
||||
String txt;
|
||||
|
||||
if (LabelFormat)
|
||||
LabelFormat(txt, nVal);
|
||||
else
|
||||
txt = AsString(nVal);
|
||||
|
||||
switch (m_nTickPosition) {
|
||||
case TOP : TickTop = -2;
|
||||
TickBottomMaj = -nMajorSize -2;
|
||||
TickBottomMin = -nMinorSize -2;
|
||||
break;
|
||||
case MIDDLE_TOP : TickTop = +2 +m_nThickness;
|
||||
TickBottomMaj = -nMajorSize +2 +m_nThickness;
|
||||
TickBottomMin = -nMinorSize +2 +m_nThickness;
|
||||
break;
|
||||
case MIDDLE_BOTTOM : TickTop = 0;
|
||||
TickBottomMaj = nMajorSize;
|
||||
TickBottomMin = nMinorSize;
|
||||
break;
|
||||
case BOTTOM : TickTop = +2 +m_nThickness;
|
||||
TickBottomMaj = nMajorSize +2 +m_nThickness;
|
||||
TickBottomMin = nMinorSize +2 +m_nThickness;
|
||||
break;
|
||||
}
|
||||
|
||||
if( Orientation == HORZ ) {
|
||||
if( Type == MAJOR ) {
|
||||
w.DrawLine( max( nPos, nMajorWidth >> 1 ),
|
||||
(int)( size.cy * .5 + TickTop),
|
||||
max( nPos, nMajorWidth >> 1 ),
|
||||
(int)(size.cy * .5 + TickBottomMaj),
|
||||
nMajorWidth );
|
||||
|
||||
Size sz = GetTextSize( txt, StdFont() );
|
||||
int nTextPos = nPos - (int)( sz.cx / 2.0f + 0.5f );
|
||||
nTextPos = min( max( 0, nTextPos ), size.cx - sz.cx );
|
||||
w.DrawText( nTextPos, 0, txt );
|
||||
}
|
||||
else {
|
||||
w.DrawLine( nPos,
|
||||
(int)( size.cy * .5 + TickTop),
|
||||
nPos,
|
||||
(int)(size.cy * .5 + TickBottomMin ) );
|
||||
}
|
||||
}
|
||||
else { // vert
|
||||
if( Type == MAJOR ) {
|
||||
w.DrawLine( (int)( size.cx * .5 + TickTop),
|
||||
max( nPos, nMajorWidth >> 1 ),
|
||||
(int)(size.cx * .5 + TickBottomMaj),
|
||||
max( nPos, nMajorWidth >> 1 ),
|
||||
nMajorWidth );
|
||||
|
||||
Size sz = GetTextSize( txt, StdFont() );
|
||||
int nTextPos = nPos - (int)( sz.cy / 2.0f + 0.5f );
|
||||
nTextPos = min( max( 0, nTextPos ), size.cy - sz.cy );
|
||||
w.DrawText( 0, nTextPos, txt );
|
||||
}
|
||||
else {
|
||||
w.DrawLine( (int)(size.cx / 2 + TickTop),
|
||||
nPos,
|
||||
(int)(size.cx * .5 + TickBottomMin),
|
||||
nPos );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Value SliderCtrlX::GetData() const
|
||||
/***********************************************************************************************
|
||||
* default read of slider value
|
||||
* virtual - public
|
||||
**********************************************************************************************/
|
||||
{
|
||||
return m_vValues[0];
|
||||
}
|
||||
|
||||
Value SliderCtrlX::GetData( int nIndex ) const
|
||||
/***********************************************************************************************
|
||||
* reads the slider[n] value
|
||||
* virtual - public
|
||||
**********************************************************************************************/
|
||||
{
|
||||
return m_vValues[nIndex];
|
||||
}
|
||||
|
||||
void SliderCtrlX::GotFocus()
|
||||
/***********************************************************************************************
|
||||
* virtual - public
|
||||
**********************************************************************************************/
|
||||
{
|
||||
Refresh();
|
||||
}
|
||||
|
||||
int SliderCtrlX::HoVe(int x, int y) const
|
||||
/***********************************************************************************************
|
||||
* returns x for Hslider or y for Vslider
|
||||
* private
|
||||
**********************************************************************************************/
|
||||
{
|
||||
return IsVert() ? y : x;
|
||||
}
|
||||
|
||||
int& SliderCtrlX::HoVeR(int& x, int& y) const
|
||||
/***********************************************************************************************
|
||||
* returns &x for Hslider or &y for Vslider
|
||||
* private
|
||||
**********************************************************************************************/
|
||||
{
|
||||
return IsVert() ? y : x;
|
||||
}
|
||||
|
||||
void SliderCtrlX::Inc()
|
||||
/***********************************************************************************************
|
||||
* increments
|
||||
* virtual - public
|
||||
**********************************************************************************************/
|
||||
{
|
||||
int n = m_vValues[0];
|
||||
if(IsNull(m_vValues[0]))
|
||||
n = Min();
|
||||
else
|
||||
if(n < Max()) {
|
||||
if(m_bRound_step && m_nStep > 1)
|
||||
n = idivceil(n + 1, m_nStep) * m_nStep;
|
||||
else
|
||||
n += m_nStep;
|
||||
if(n > Max())
|
||||
n = Max();
|
||||
}
|
||||
if(n != m_vValues[0]) {
|
||||
SetValue( n );
|
||||
WhenSlideFinish();
|
||||
UpdateActionRefresh();
|
||||
}
|
||||
}
|
||||
|
||||
bool SliderCtrlX::IsVert() const
|
||||
/***********************************************************************************************
|
||||
* Checks if the slider is vertically oriented
|
||||
* public
|
||||
**********************************************************************************************/
|
||||
{
|
||||
return GetSize().cx < GetSize().cy;
|
||||
}
|
||||
|
||||
bool SliderCtrlX::Key(dword key, int repcnt)
|
||||
/***********************************************************************************************
|
||||
* handles keys addressed to the slider (GotFocussed)
|
||||
* only if it is a CONTROL
|
||||
* virtual - public
|
||||
**********************************************************************************************/
|
||||
{
|
||||
// No thumb action for indicator
|
||||
if (m_nSliderType == INDICATOR) return Ctrl::Key(key, repcnt);
|
||||
|
||||
if(IsEditable())
|
||||
switch(key) {
|
||||
case K_LEFT:
|
||||
case K_DOWN:
|
||||
Dec();
|
||||
return true;
|
||||
case K_RIGHT:
|
||||
case K_UP:
|
||||
Inc();
|
||||
return true;
|
||||
}
|
||||
return Ctrl::Key(key, repcnt);
|
||||
}
|
||||
|
||||
void SliderCtrlX::LeftDown(Point pos, dword keyflags)
|
||||
/***********************************************************************************************
|
||||
* handles the left mouse button if the slider is s CONTROL
|
||||
* virtual - public
|
||||
**********************************************************************************************/
|
||||
{
|
||||
if(!IsEditable())
|
||||
return;
|
||||
|
||||
// No thumb action for indicator
|
||||
if (m_nSliderType == INDICATOR) return;
|
||||
|
||||
SetWantFocus();
|
||||
int thumbPos = SliderToClient(m_vValues[0]);
|
||||
int p = HoVe(pos.x, pos.y);
|
||||
|
||||
if(IsNull(thumbPos)) {
|
||||
SetValue( ClientToSlider(p) );
|
||||
WhenSlideFinish();
|
||||
UpdateActionRefresh();
|
||||
}
|
||||
// Did we click on the thumb?
|
||||
else if( ( p >= ( thumbPos - nHalfThumb ) ) &&
|
||||
( p < ( thumbPos + nHalfThumb ) ) )
|
||||
SetCapture();
|
||||
|
||||
else if( m_bJump )
|
||||
{
|
||||
m_vValues[0] = ClientToSlider(p);
|
||||
WhenSlideFinish();
|
||||
UpdateActionRefresh();
|
||||
}
|
||||
else
|
||||
{
|
||||
if( ( ( p < thumbPos) && (m_nMin == Min() ) ) || ( (p > thumbPos) && ( m_nMin == Max() ) ) )
|
||||
IsInverted() ? Inc() : Dec();
|
||||
else
|
||||
IsInverted() ? Dec() : Inc();
|
||||
}
|
||||
|
||||
Refresh();
|
||||
}
|
||||
|
||||
void SliderCtrlX::LeftRepeat(Point p, dword f)
|
||||
/***********************************************************************************************
|
||||
* virtual - public
|
||||
**********************************************************************************************/
|
||||
{
|
||||
if(!HasCapture())
|
||||
LeftDown(p, f);
|
||||
}
|
||||
|
||||
void SliderCtrlX::LeftUp(Point pos, dword keyflags)
|
||||
/***********************************************************************************************
|
||||
* virtual - public
|
||||
**********************************************************************************************/
|
||||
{
|
||||
if (HasCapture())
|
||||
WhenSlideFinish();
|
||||
Refresh();
|
||||
}
|
||||
|
||||
void SliderCtrlX::LostFocus()
|
||||
/***********************************************************************************************
|
||||
* virtual - public
|
||||
**********************************************************************************************/
|
||||
{
|
||||
Refresh();
|
||||
}
|
||||
|
||||
SliderCtrlX& SliderCtrlX::MinMax(int _min, int _max)
|
||||
/***********************************************************************************************
|
||||
* Restricts slider to Min, Max values
|
||||
* public
|
||||
**********************************************************************************************/
|
||||
{
|
||||
if(m_nMin != _min || m_nMax != _max) {
|
||||
m_nMin = _min;
|
||||
m_nMax = _max;
|
||||
if(!IsNull(m_vValues[0])) {
|
||||
int v = minmax(m_vValues[0], Min(), Max());
|
||||
if(m_vValues[0] != v) {
|
||||
SetValue( v );
|
||||
Update();
|
||||
}
|
||||
}
|
||||
Refresh();
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
void SliderCtrlX::MouseMove(Point pos, dword keyflags)
|
||||
/***********************************************************************************************
|
||||
* virtual - public
|
||||
**********************************************************************************************/
|
||||
{
|
||||
if(HasCapture()) {
|
||||
int n;
|
||||
int p = HoVe(pos.x, pos.y);
|
||||
int thumbPos = SliderToClient(m_vValues[0]);
|
||||
if (IsInverted())
|
||||
n = ClientToSlider(HoVe(GetSize().cx-pos.x, GetSize().cy-pos.y));
|
||||
else
|
||||
n = ClientToSlider(HoVe(pos.x, pos.y));
|
||||
if(n != m_vValues[0]) {
|
||||
SetValue( n );
|
||||
UpdateActionRefresh();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void SliderCtrlX::Paint(Draw& w)
|
||||
/***********************************************************************************************
|
||||
* Draws the slider on the canvas w
|
||||
* virtual - public
|
||||
**********************************************************************************************/
|
||||
{
|
||||
Size size = GetSize();
|
||||
if (m_ThumbImg.IsEmpty())
|
||||
SetThumbType(m_nThumbNumber);
|
||||
|
||||
if(IsVert()) { // Vertical slider
|
||||
// Draw Line Border
|
||||
int half = size.cx >> 1;
|
||||
DrawBorder(w, half - BORDER1, BORDER1, border2, size.cy - border2, InsetBorder);
|
||||
|
||||
if (IsInverted())
|
||||
// draw the fill where bottom is the min value
|
||||
w.DrawRect(half - BORDER1+1, SliderToClient(m_vValues[0])+1,
|
||||
border2-2, size.cy-SliderToClient(m_vValues[0])-BORDER1-2,
|
||||
m_FillColor);
|
||||
else
|
||||
// draw the fill where top is the min value
|
||||
w.DrawRect(half - BORDER1+1, BORDER1+1,
|
||||
border2-2, SliderToClient(m_vValues[0])-BORDER1-2,
|
||||
m_FillColor);
|
||||
}
|
||||
else { // Horz slider
|
||||
// Draw Line Border
|
||||
int half = size.cy >> 1;
|
||||
DrawBorder(w, BORDER1, half - BORDER1, size.cx - border2, border2, InsetBorder);
|
||||
|
||||
if (IsInverted())
|
||||
// draw the fill where left is the min value
|
||||
w.DrawRect(SliderToClient(m_vValues[0]), half - BORDER1+2, size.cx-SliderToClient(m_vValues[0])-2, border2-3, m_FillColor);
|
||||
else
|
||||
// draw the fill where right is the min value
|
||||
w.DrawRect(BORDER1, half - BORDER1+2, SliderToClient(m_vValues[0])-2, border2-3, m_FillColor);
|
||||
}
|
||||
|
||||
// draw gradations
|
||||
for( int i = Min();
|
||||
( m_nMajorTicks > 0 ) && ( i <= Max() ) ;
|
||||
i += ( m_nMinorTicks == 0 ? m_nMajorTicks : m_nMinorTicks ) ) {
|
||||
|
||||
int nPos = SliderToClient( i );
|
||||
|
||||
if( ( m_nMajorTicks != 0 ) && ( i % m_nMajorTicks ) == 0 )
|
||||
DrawTick( w, MAJOR, (HOVE)HoVe( HORZ, VERT ), nPos, i );
|
||||
else if( ( m_nMinorTicks != 0 ) && ( i % m_nMinorTicks ) == 0 )
|
||||
DrawTick( w, MINOR, (HOVE)HoVe( HORZ, VERT ), nPos, i );
|
||||
}
|
||||
|
||||
// Draw thumbs
|
||||
if(IsVert()) { // Vertical slider
|
||||
for( int i = m_vValues.GetCount() - 1 ; i >= 0 ; i-- ) {
|
||||
if(!IsNull(m_vValues[i])) {
|
||||
w.DrawImage((size.cx - m_ThumbSize.cx ) >> 1,
|
||||
SliderToClient(m_vValues[i]) - ( m_ThumbSize.cy >> 1 ),
|
||||
HasCapture() || HasFocus() ? ( m_bUseCustomThumbs ? m_vThumbImgsFocus[i] : m_ThumbFImg ) : ( m_bUseCustomThumbs ? m_vThumbImgs[i] : m_ThumbImg ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
else { // Horz slider
|
||||
for( int i = m_vValues.GetCount() - 1 ; i >= 0 ; i-- ) {
|
||||
if(!IsNull(m_vValues[i])) {
|
||||
w.DrawImage(SliderToClient(m_vValues[i]) - ( m_ThumbSize.cx >> 1 ),
|
||||
m_nThickness + ((size.cy - m_ThumbSize.cy) >> 1),
|
||||
HasCapture() || HasFocus() ? (m_bUseCustomThumbs ? m_vThumbImgsFocus[i] : m_ThumbFImg) : (m_bUseCustomThumbs ? m_vThumbImgs[i] : m_ThumbImg));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(HasFocus())
|
||||
DrawFocus(w, size);
|
||||
}
|
||||
|
||||
void SliderCtrlX::SetData(const Value& v)
|
||||
/***********************************************************************************************
|
||||
* sets the slider value within its' range
|
||||
* virtual - public
|
||||
**********************************************************************************************/
|
||||
{
|
||||
SetValue( v );
|
||||
}
|
||||
|
||||
SliderCtrlX& SliderCtrlX::SetThumbType(int n)
|
||||
/***********************************************************************************************
|
||||
* Selects the thumb according to the choosen type
|
||||
* public
|
||||
**********************************************************************************************/
|
||||
{
|
||||
m_nThumbNumber = n;
|
||||
// This is called before size is known, so we cannot choose the right thumb...
|
||||
if (GetSize().IsEmpty()) {
|
||||
m_ThumbImg.Clear();
|
||||
return *this;
|
||||
}
|
||||
m_nThumbType = m_nThumbNumber*2;
|
||||
if (IsVert()) m_nThumbNumber = 0;
|
||||
m_ThumbImg = SliderThumbsImg::Get(m_nThumbType);
|
||||
m_ThumbFImg = SliderThumbsImg::Get(m_nThumbType+1);
|
||||
if (IsVert()) {
|
||||
m_ThumbImg = RotateAntiClockwise(m_ThumbImg);
|
||||
m_ThumbFImg = RotateAntiClockwise(m_ThumbFImg);
|
||||
}
|
||||
if (m_nTickPosition == BOTTOM) {
|
||||
IsVert() ? m_ThumbImg = MirrorHorz(m_ThumbImg) : m_ThumbImg = MirrorVert(m_ThumbImg);
|
||||
IsVert() ? m_ThumbFImg = MirrorHorz(m_ThumbFImg) : m_ThumbFImg = MirrorVert(m_ThumbFImg);
|
||||
}
|
||||
m_ThumbSize = m_bUseCustomThumbs ? m_vThumbImgs[0].GetSize() : m_ThumbImg.GetSize();
|
||||
nHalfThumb = HoVe(m_ThumbSize.cx, m_ThumbSize.cy) >> 1;
|
||||
return *this;
|
||||
}
|
||||
|
||||
Value SliderCtrlX::SetValue( const Value& v, int nIndex /*= 0 */ )
|
||||
/***********************************************************************************************
|
||||
* sets the value for the slider position
|
||||
* public
|
||||
**********************************************************************************************/
|
||||
{
|
||||
int n = v;
|
||||
|
||||
if(!IsNull(n))
|
||||
{
|
||||
n = minmax(n, Min(), Max() );
|
||||
|
||||
if(n < Max() && n > Min()) {
|
||||
if(m_bRound_step && m_nStep > 1)
|
||||
n = idivceil(n, m_nStep) * m_nStep;
|
||||
if(n > Max())
|
||||
n = Max();
|
||||
if (n < Min())
|
||||
n = Min();
|
||||
}
|
||||
|
||||
if( m_vValues.At(nIndex) != n )
|
||||
{
|
||||
m_vValues.At(nIndex) = n;
|
||||
|
||||
if( m_vctrlOutput.GetCount() > nIndex )
|
||||
m_vctrlOutput[nIndex]->SetData( n );
|
||||
|
||||
UpdateRefresh();
|
||||
}
|
||||
}
|
||||
|
||||
return m_vValues.At(nIndex);
|
||||
}
|
||||
|
||||
int SliderCtrlX::SliderToClient(int v) const
|
||||
/***********************************************************************************************
|
||||
* CONVERTS SLIDER VALUES TO Canvas coordinates
|
||||
* private
|
||||
**********************************************************************************************/
|
||||
{
|
||||
if(IsNull(v))
|
||||
return Null;
|
||||
v = minmax(v, Min(), Max());
|
||||
|
||||
if( v < 0 )
|
||||
v = iscalefloor(v - m_nMin, HoVe(GetSize().cx - border2 - m_ThumbSize.cx,
|
||||
GetSize().cy - border2 - m_ThumbSize.cy), m_nMax - m_nMin);
|
||||
else
|
||||
v = iscaleceil(v - m_nMin, HoVe(GetSize().cx - border2 - m_ThumbSize.cx,
|
||||
GetSize().cy - border2 - m_ThumbSize.cy), m_nMax - m_nMin);
|
||||
|
||||
v += HoVe(m_ThumbSize.cx/2, m_ThumbSize.cy/2);
|
||||
|
||||
if (IsInverted())
|
||||
IsVert() ? v = GetSize().cy - v : v = GetSize().cx - v;
|
||||
|
||||
return v;
|
||||
}
|
||||
111
bazaar/Controls4U/SliderCtrlX.h
Normal file
111
bazaar/Controls4U/SliderCtrlX.h
Normal file
|
|
@ -0,0 +1,111 @@
|
|||
#define BORDER_SIZE 2
|
||||
#define BORDER1 BORDER_SIZE
|
||||
#define BORDER2 ( 2 * BORDER_SIZE )
|
||||
|
||||
class SliderCtrlX : public Ctrl {
|
||||
|
||||
typedef enum { HORZ, VERT } HOVE;
|
||||
|
||||
typedef enum { MAJOR, MINOR } MAJORMINOR;
|
||||
|
||||
public:
|
||||
typedef enum { TOP, MIDDLE_TOP, MIDDLE_BOTTOM, BOTTOM,
|
||||
RIGHT = TOP, LEFT = BOTTOM, MIDDLE_LEFT = MIDDLE_BOTTOM, MIDDLE_RIGHT = MIDDLE_TOP } TICK_ALIGNMENT;
|
||||
|
||||
typedef enum {CONTROL, INDICATOR} SLIDERTYPES;
|
||||
|
||||
typedef enum {TYPE_0, TYPE_1, TYPE_2, TYPE_3, TYPE_4} THUMB_TYPES;
|
||||
|
||||
private:
|
||||
int border2; //
|
||||
bool m_bInverted; // True if origin is right or down
|
||||
bool m_bJump; // Jumps directly to mouse pos if click on the scale
|
||||
bool m_bRound_step; // Uses the defined Step
|
||||
bool m_bUseCustomThumbs;
|
||||
Color m_FillColor; // what color to use for filling the slider
|
||||
int m_nMax;
|
||||
// eg a slider from -180 to 180, setting MajorTix to 30 would put Major tix
|
||||
// on the endpoints, as well as every 30, so: -180, -150, -120, -90, -60, -30, 0, 30...
|
||||
// Text Labels are drawn on all Major Tick points.
|
||||
// Setting MinorTix to 5 would draw minor tix every 5, eg: -175, -170, -165...
|
||||
int m_nMajorTicks; // This is the "increment" for major tix
|
||||
int m_nMajorTickSize; // Percent of the space from the line to the edge, eg 30
|
||||
int m_nMin;
|
||||
int m_nMinorTicks; // This is the "increment" for minor tix
|
||||
int m_nMinorTickSize; // Percent of the space from the line to the edge, eg 20
|
||||
int m_nSliderType; // either a CONTROL / INDICATOR
|
||||
int m_nStep; // Value of steps to inc/dec
|
||||
int m_nTextAlign;
|
||||
int m_nThickness; // Thickness of the thumb guide
|
||||
int m_nThumbNumber; // Number of the thumb
|
||||
int m_nThumbType; // Index of thumb in Image list
|
||||
int m_nTickPosition;
|
||||
Image m_ThumbImg; // Image of the thumb
|
||||
Image m_ThumbFImg; // Image of the focused thumb
|
||||
Size m_ThumbSize; // Size of the thumb;
|
||||
Vector<Ctrl*> m_vctrlOutput;
|
||||
Vector<int> m_vValues;
|
||||
Vector<Image> m_vThumbImgs;
|
||||
Vector<Image> m_vThumbImgsFocus;
|
||||
int nHalfThumb;
|
||||
|
||||
int ClientToSlider(int x) const;
|
||||
int HoVe(int x, int y) const;
|
||||
int& HoVeR(int& x, int& y) const;
|
||||
int Max() const { return Upp::max( m_nMin, m_nMax ); };
|
||||
int Min() const { return Upp::min( m_nMin, m_nMax ); };
|
||||
int SliderToClient(int value) const;
|
||||
|
||||
protected:
|
||||
|
||||
void DrawTick( Draw &w, MAJORMINOR Type, HOVE Orientation, int nPos, int nVal );
|
||||
|
||||
public:
|
||||
typedef SliderCtrl CLASSNAME;
|
||||
|
||||
Callback WhenSlideFinish;
|
||||
Callback2<String&, int> LabelFormat;
|
||||
|
||||
SliderCtrlX();
|
||||
virtual ~SliderCtrlX();
|
||||
|
||||
SliderCtrlX& AddOutCtrl( Ctrl* c );
|
||||
void Dec();
|
||||
SliderCtrlX& FillColor( Color c ) { m_FillColor = c; return *this; };
|
||||
virtual Value GetData() const;
|
||||
virtual Value GetData( int nIndex ) const;
|
||||
int GetMax() const { return m_nMax; }
|
||||
int GetMin() const { return m_nMin; }
|
||||
int GetStep() const { return m_nStep; }
|
||||
virtual void GotFocus();
|
||||
void Inc();
|
||||
bool IsInverted() const { return m_bInverted; };
|
||||
bool IsRoundStep() const { return m_bRound_step; }
|
||||
bool IsVert() const;
|
||||
SliderCtrlX& Jump(bool v = false) { m_bJump = v; return *this; }
|
||||
virtual bool Key(dword key, int repcnt);
|
||||
virtual void LeftDown(Point pos, dword keyflags);
|
||||
virtual void LeftRepeat(Point pos, dword keyflags);
|
||||
virtual void LeftUp(Point pos, dword keyflags);
|
||||
virtual void LostFocus();
|
||||
virtual void MouseMove(Point pos, dword keyflags);
|
||||
SliderCtrlX& MinMax(int _min, int _max);
|
||||
virtual void Paint(Draw& draw);
|
||||
SliderCtrlX& Range(int max) { return MinMax(0, max); }
|
||||
SliderCtrlX& SetCustomThumb( Image i, int nIndex = 0 ) { m_vThumbImgs.At( nIndex ) = i; m_vThumbImgsFocus.At( nIndex ) = i; return *this; };
|
||||
virtual void SetData(const Value& value);
|
||||
SliderCtrlX& SetInverted(bool b) { m_bInverted = b; return *this; };
|
||||
SliderCtrlX& SetMajorTicks( int n ) { m_nMajorTicks = n; return *this; };
|
||||
SliderCtrlX& SetMajorTicksSize( int n ) { m_nMajorTickSize = n; return *this; };
|
||||
SliderCtrlX& SetMaxi( int n=100 ) { m_nMax = n; return *this; };
|
||||
SliderCtrlX& SetMini( int n=0 ) { m_nMin = n; return *this; };
|
||||
SliderCtrlX& SetMinorTicks( int n ) { m_nMinorTicks = n; return *this; };
|
||||
SliderCtrlX& SetMinorTicksSize( int n ) { m_nMinorTickSize = n; return *this; };
|
||||
SliderCtrlX& SetSliderType(int n=0) { m_nSliderType = n; return *this;};
|
||||
SliderCtrlX& SetThickness( int n = 2 ) { m_nThickness = n; border2 = m_nThickness * BORDER_SIZE; return *this; };
|
||||
SliderCtrlX& SetTickPosition(int n ) { m_nTickPosition = n; return *this; };
|
||||
Value SetValue( const Value& v, int nIndex = 0 );
|
||||
SliderCtrlX& Step(int _step, bool _r = true) { m_nStep = _step; m_bRound_step = _r; return *this; }
|
||||
SliderCtrlX& SetThumbType(int n=0);
|
||||
SliderCtrlX& UseCustomThumbs( bool b = true ) { m_bUseCustomThumbs = b; return *this; };
|
||||
};
|
||||
33
bazaar/Controls4U/SliderCtrlX.iml
Normal file
33
bazaar/Controls4U/SliderCtrlX.iml
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
PREMULTIPLIED
|
||||
IMAGE_ID(Thumb01H)
|
||||
IMAGE_ID(Thumb01F)
|
||||
IMAGE_ID(Thumb02H)
|
||||
IMAGE_ID(Thumb02F)
|
||||
IMAGE_ID(Thumb03H)
|
||||
IMAGE_ID(Thumb03F)
|
||||
IMAGE_ID(Thumb04H)
|
||||
IMAGE_ID(Thumb04F)
|
||||
IMAGE_ID(Thumb05H)
|
||||
IMAGE_ID(Thumb05F)
|
||||
|
||||
IMAGE_BEGIN_DATA
|
||||
IMAGE_DATA(120,156,237,218,49,110,194,64,16,5,80,247,73,218,72,105,210,228,8,62,0,103,160,228,2,148,41,136,83,113,5,26)
|
||||
IMAGE_DATA(238,146,11,160,208,80,82,210,34,184,66,218,141,150,100,208,247,48,51,59,27,217,86,72,214,210,200,177,121,51,107,155)
|
||||
IMAGE_DATA(221,145,176,82,221,85,183,149,99,11,30,196,60,69,95,57,65,136,174,115,36,159,202,203,205,177,188,150,151,155,227,241)
|
||||
IMAGE_DATA(60,47,55,39,199,127,197,111,154,124,235,245,58,123,242,65,142,107,242,69,79,225,200,9,74,142,57,249,208,59,198,186)
|
||||
IMAGE_DATA(24,195,49,150,232,141,177,212,49,140,177,76,47,140,149,63,249,238,217,228,155,78,167,161,203,160,154,147,201,36,44,22)
|
||||
IMAGE_DATA(139,78,34,214,162,250,116,238,120,60,138,17,111,82,250,155,7,213,193,186,154,205,169,75,181,255,115,221,195,225,208,75)
|
||||
IMAGE_DATA(221,253,126,223,75,221,221,110,39,214,237,99,158,117,177,46,150,203,101,107,93,116,181,142,155,166,105,173,227,63,211,44)
|
||||
IMAGE_DATA(172,78,26,230,243,83,88,221,87,106,22,169,14,237,169,75,181,75,221,235,175,219,199,60,235,163,89,116,21,23,205,226)
|
||||
IMAGE_DATA(166,122,104,53,139,186,174,67,42,208,205,102,51,53,48,135,206,81,135,13,208,125,185,71,199,45,249,98,139,45,214,182)
|
||||
IMAGE_DATA(222,245,230,93,199,57,253,225,71,141,37,247,130,208,81,55,14,208,169,165,198,130,157,59,176,174,94,108,177,197,166,173)
|
||||
IMAGE_DATA(119,189,245,212,88,30,43,109,123,217,110,183,117,211,188,198,80,17,216,211,192,9,27,93,248,126,121,19,247,150,247,90)
|
||||
IMAGE_DATA(186,78,110,37,239,181,120,239,146,69,239,181,120,108,89,172,87,108,177,127,221,74,107,131,7,185,148,141,14,173,229,185)
|
||||
IMAGE_DATA(227,158,106,93,56,171,105,62,111,54,31,79,227,241,91,12,21,129,141,251,148,141,14,31,160,229,189,150,174,147,91,201)
|
||||
IMAGE_DATA(123,45,222,187,100,209,123,45,30,155,118,181,122,247,90,28,187,216,98,175,209,74,107,131,7,185,148,141,14,173,229,185)
|
||||
IMAGE_DATA(227,158,106,93,56,171,105,198,109,52,26,5,19,128,139,191,187,83,158,28,133,230,209,197,99,205,115,71,27,247,113,143)
|
||||
IMAGE_DATA(193,107,88,159,225,53,88,247,87,236,48,54,53,119,114,44,119,150,247,90,205,73,222,107,83,14,253,144,86,59,167,61)
|
||||
IMAGE_DATA(127,233,60,158,179,158,37,218,212,247,169,173,103,201,123,28,250,100,211,172,42,255,255,173,196,119,10,14,223,122,87,97)
|
||||
IMAGE_DATA(120,52,149,225,91,142,54,193,7,22,173,26,214,103,120,13,137,251,43,118,0,235,152,59,57,182,229,18,222,107,69,167)
|
||||
IMAGE_DATA(120,175,53,29,243,131,89,237,156,241,252,77,107,61,75,180,169,239,147,172,225,206,222,233,206,254,19,223,138,148,167,0)
|
||||
IMAGE_END_DATA(608, 10)
|
||||
177
bazaar/Controls4U/SliderCtrlX.usc
Normal file
177
bazaar/Controls4U/SliderCtrlX.usc
Normal file
|
|
@ -0,0 +1,177 @@
|
|||
fn DeflateRect(&r)
|
||||
{
|
||||
r.top++;
|
||||
r.left++;
|
||||
r.right--;
|
||||
r.bottom--;
|
||||
}
|
||||
|
||||
fn DrawFrame(w, &r, c1, c2) {
|
||||
w.DrawRect(r.left, r.top, r.right - r.left, 1, c1);
|
||||
w.DrawRect(r.left, r.top, 1, r.bottom - r.top, c1);
|
||||
w.DrawRect(r.right - 1, r.top, 1, r.bottom - r.top, c2);
|
||||
w.DrawRect(r.left, r.bottom - 1, r.right - r.left, 1, c2);
|
||||
DeflateRect(r);
|
||||
}
|
||||
|
||||
fn DrawBorder(w, &r, ...)
|
||||
{
|
||||
for(i = 0; i < count(argv); i += 2)
|
||||
DrawFrame(w, r, argv[i], argv[i + 1]);
|
||||
}
|
||||
|
||||
fn DrawButtonFrame(w, &r)
|
||||
{
|
||||
DrawBorder(w, r, :SWhite, :SBlack, :SWhiteGray, :SGray);
|
||||
}
|
||||
|
||||
fn DrawEdgeButtonFrame(w, &r)
|
||||
{
|
||||
DrawBorder(w, r, :SWhiteGray, :SBlack, :SWhite, :SGray);
|
||||
}
|
||||
|
||||
fn DrawEdgeButton(w, &r)
|
||||
{
|
||||
DrawEdgeButtonFrame(w, r);
|
||||
w.DrawRect(r, :SLtGray);
|
||||
}
|
||||
|
||||
fn DrawInsetFrame(w, &r)
|
||||
{
|
||||
DrawBorder(w, r, :SGray, :SWhite, :SBlack, :SLtGray);
|
||||
}
|
||||
|
||||
fn DrawCtrlFrame(w, &r, frame)
|
||||
{
|
||||
width = r.right - r.left;
|
||||
height = r.bottom - r.top;
|
||||
switch(frame) {
|
||||
case "FieldFrame()":
|
||||
case "InsetFrame()": DrawInsetFrame(w, r); break;
|
||||
case "OutsetFrame()": DrawBorder(w, r, :SLtGray, :SBlack, :SWhite, :SGray); break;
|
||||
case "ButtonFrame()": DrawButtonFrame(w, r); break;
|
||||
case "ThinInsetFrame()": DrawBorder(w, r, :SGray, :SWhite); break;
|
||||
case "ThinOutsetFrame()": DrawBorder(w, r, :SWhite, :SGray); break;
|
||||
case "BlackFrame()": DrawBorder(w, r, :SBlack, :SBlack); break;
|
||||
case "TopSeparatorFrame()":
|
||||
w.DrawRect(r.left, r.top, width, 1, :SGray);
|
||||
w.DrawRect(r.left, r.top + 1, width, 1, :SWhite);
|
||||
r.top += 2;
|
||||
break;
|
||||
case "BottomSeparatorFrame()":
|
||||
w.DrawRect(r.left, r.bottom - 2, width, 1, :SGray);
|
||||
w.DrawRect(r.left, r.bottom - 1, width, 1, :SWhite);
|
||||
r.bottom -= 2;
|
||||
break;
|
||||
case "LeftSeparatorFrame()":
|
||||
w.DrawRect(r.left, r.top, 1, height, :SGray);
|
||||
w.DrawRect(r.left + 1, r.top, 1, height, :SWhite);
|
||||
r.left += 2;
|
||||
break;
|
||||
case "RightSeparatorFrame()":
|
||||
w.DrawRect(r.right - 2, r.top, 1, height, :SGray);
|
||||
w.DrawRect(r.right - 1, r.top, 1, height, :SWhite);
|
||||
r.right -= 2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
fn GradientColor(fc, tc, i, n)
|
||||
{
|
||||
return Color(
|
||||
fc.r + i * (tc.r - fc.r) / n,
|
||||
fc.g + i * (tc.g - fc.g) / n,
|
||||
fc.b + i * (tc.b - fc.b) / n
|
||||
);
|
||||
}
|
||||
|
||||
fn max(a, b)
|
||||
{
|
||||
return a > b ? a : b;
|
||||
}
|
||||
|
||||
fn min(a, b)
|
||||
{
|
||||
return a < b ? a : b;
|
||||
}
|
||||
|
||||
enum_property SLIDERTYPES {
|
||||
"0" : "CONTROL",
|
||||
"1" : "INDICATOR"
|
||||
};
|
||||
|
||||
enum_property TICK_ALIGNMENT {
|
||||
"0" : "TOP",
|
||||
"1" : "MIDDLE_TOP",
|
||||
"2" : "MIDDLE_BOTTOM",
|
||||
"3" : "BOTTOM",
|
||||
"4" : "RIGHT = TOP",
|
||||
"5" : "LEFT = BOTTOM",
|
||||
"6" : "MIDDLE_LEFT = MIDDLE_BOTTOM",
|
||||
"7" : "MIDDLE_RIGHT = MIDDLE_TOP"
|
||||
};
|
||||
|
||||
enum_property THUMB_TYPES {
|
||||
"0" : "TYPE_0",
|
||||
"1" : "TYPE_1",
|
||||
"2" : "TYPE_2",
|
||||
"3" : "TYPE_3",
|
||||
"4" : "TYPE_4"
|
||||
};
|
||||
|
||||
ctrl SliderCtrlX {
|
||||
group "Progress";
|
||||
|
||||
GetMinSize() { return Size(0, 0); }
|
||||
GetStdSize() { return Size(64, 24); }
|
||||
|
||||
Frame SetFrame @1;
|
||||
|
||||
SLIDERTYPES SetSliderType = 0;
|
||||
int SetMini = 0;
|
||||
int SetMaxi = 100;
|
||||
bool SetInverted = false;
|
||||
Color FillColor;
|
||||
int SetMajorTicks=10;
|
||||
int SetMinorTicks=2;
|
||||
int SetMajorTicksSize=30;
|
||||
int SetMinorTicksSize=20;
|
||||
TICK_ALIGNMENT SetTickPosition = 0;
|
||||
int SetThickness = 2;
|
||||
THUMB_TYPES SetThumbType = 1;
|
||||
int Step = 1;
|
||||
bool Jump = false;
|
||||
|
||||
Paint(w) {
|
||||
r = GetRect();
|
||||
DrawCtrlFrame(w, r, .SetFrame);
|
||||
|
||||
sz = Size(r.right - r.left, r.bottom - r.top);
|
||||
|
||||
halfX = int(r.left + r.right) >> 1;
|
||||
halfY = int(r.top + r.bottom) >> 1;
|
||||
|
||||
if (sz.cx < sz.cy) {
|
||||
DrawInsetFrame(w, Rect(halfX , r.top + 2, sz.cx, r.bottom - 2));
|
||||
w.DrawRect(halfX , halfY, halfX-2, halfY-2, .FillColor);
|
||||
if (.SetSliderType == "0")
|
||||
{
|
||||
// imgSz = GetImageSize("JBControls/SlideCtrlX.iml::ThumbH");
|
||||
// w.DrawImage(halfX - (imgSz.cx >> 1), halfY - (imgSz.cy >> 1), "JBControls/SlideCtrlX.iml::ThumbH");
|
||||
imgSz = GetImageSize("CtrlImg::vthumb");
|
||||
w.DrawImage(halfX - (imgSz.cx >> 1), halfY - (imgSz.cy >> 1), "CtrlImg::vthumb");
|
||||
}
|
||||
} else {
|
||||
DrawInsetFrame(w, Rect(r.left + 2, halfY, r.right - 2, r.bottom-2 ));
|
||||
w.DrawRect( 2 , halfY, halfX-2, halfY - 2,.FillColor);
|
||||
if (.SetSliderType == "0")
|
||||
{
|
||||
// imgSz = GetImageSize("JBControls/SlideCtrlX.iml::ThumbV");
|
||||
// w.DrawImage(halfX - (imgSz.cx >> 1), halfY - (imgSz.cy >> 1), "JBControls/SlideCtrlX.iml::ThumbV");
|
||||
imgSz = GetImageSize("CtrlImg::hthumb");
|
||||
w.DrawImage(halfX - (imgSz.cx >> 1), halfY - (imgSz.cy >> 1), "CtrlImg::hthumb");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
167
bazaar/Controls4U/StarIndicator.cpp
Normal file
167
bazaar/Controls4U/StarIndicator.cpp
Normal file
|
|
@ -0,0 +1,167 @@
|
|||
/***********************************************************************************************
|
||||
* StarIndicator
|
||||
*
|
||||
* Displays stars rating with number of votes
|
||||
*
|
||||
* Colors are used to show the confidence we can give to the grade, according to the number of
|
||||
* votes :
|
||||
* - Light blue if undefined,
|
||||
* - Red if less than m_nVotesLow,
|
||||
* - Yellow if more than m_nVotesLow and less than m_nVotesHigh,
|
||||
* - Light Green if more than m_nVotesHigh
|
||||
*
|
||||
* Autors : jibe
|
||||
* Last modified : May 26, 2011
|
||||
*
|
||||
* 2do : Make better graphics
|
||||
* Known bugs : Invalid memory access when choosing SetFontColor with .lay designer (only under
|
||||
* linux ?)
|
||||
**********************************************************************************************/
|
||||
|
||||
#include <CtrlLib/CtrlLib.h>
|
||||
|
||||
//NAMESPACE_UPP
|
||||
using namespace Upp;
|
||||
|
||||
#include "StarIndicator.h"
|
||||
|
||||
#define IMAGECLASS StarsImg
|
||||
#define IMAGEFILE <Controls4U/StarIndicator.iml>
|
||||
#include <Draw/iml.h>
|
||||
|
||||
StarIndicator::StarIndicator()
|
||||
:ProgressIndicator()
|
||||
, m_FontColor(Black)
|
||||
, m_nVotes(0)
|
||||
, m_nVotesHigh(50)
|
||||
, m_nVotesLow(5)
|
||||
, votes(true)
|
||||
/***********************************************************************************************
|
||||
* Constructor
|
||||
* public
|
||||
**********************************************************************************************/
|
||||
{
|
||||
m_bMouseInside=false;
|
||||
}
|
||||
|
||||
StarIndicator::~StarIndicator()
|
||||
/***********************************************************************************************
|
||||
* Destructor
|
||||
* virtual - public
|
||||
**********************************************************************************************/
|
||||
{
|
||||
}
|
||||
|
||||
void StarIndicator::Layout() {
|
||||
/***********************************************************************************************
|
||||
* virtual - public
|
||||
**********************************************************************************************/
|
||||
Rect r=GetRect();
|
||||
Size size=r.GetSize();
|
||||
int x=size.cx;
|
||||
int y=int(ceil(double(x/5)));
|
||||
x=5*y;
|
||||
r.SetSize(x, y);
|
||||
Set(actual, total);
|
||||
}
|
||||
|
||||
void StarIndicator::Paint(Draw& w) {
|
||||
/***********************************************************************************************
|
||||
* Paints the control
|
||||
* virtual - public
|
||||
**********************************************************************************************/
|
||||
Font fnt = StdFont();
|
||||
Size sz = GetSize();
|
||||
Size msz = GetMsz();
|
||||
Rect r;
|
||||
String pt;
|
||||
int p0 = 0;
|
||||
int p = pxp;
|
||||
if(total <= 0) {
|
||||
int l = max(msz.cx, msz.cy) & ~7;
|
||||
p0 = pxp - l / 4;
|
||||
p = min(p - p0, max(msz.cx, msz.cy) - p0);
|
||||
if(style->bound && p0 < 0) {
|
||||
p += p0;
|
||||
p0 = 0;
|
||||
}
|
||||
}
|
||||
ChPaintEdge(w, sz, EditFieldEdge());
|
||||
Rect mg = ChMargins(EditFieldEdge());
|
||||
sz -= Size(mg.left + mg.right, mg.top + mg.bottom);
|
||||
Rect r1, r2, r3;
|
||||
r = r1 = r2 = r3 = RectC(mg.left, mg.top, sz.cx, sz.cy);
|
||||
w.Clip(r1);
|
||||
if(sz.cx > sz.cy) {
|
||||
r1.right = r2.left = min(p, sz.cx) + mg.left + p0;
|
||||
r3.right = mg.left + p0;
|
||||
r3.bottom = r1.bottom;
|
||||
}
|
||||
else {
|
||||
r2.bottom = r1.top = sz.cy - min(p, sz.cy) + mg.left + p0;
|
||||
r3.bottom = mg.top + p0;
|
||||
r3.right = r1.right;
|
||||
}
|
||||
if (m_nVotes) {
|
||||
w.DrawRect(r1, Nvl(color, SColorHighlight()));
|
||||
w.DrawRect(r2, SColorPaper);
|
||||
w.DrawRect(r3, SColorPaper);
|
||||
w.DrawImage(r,StarsImg::Get(0),Nvl(color, SColorHighlight()));
|
||||
w.DrawImage(r,StarsImg::Get(1),SColorPaper);
|
||||
}
|
||||
percent ? pt = Format("%d %%", 100 * actual / max(total, 1)) : pt = Format("%3.1f / 5", 5. * actual / max(total, 1));
|
||||
if (votes && m_nVotes > 0) {
|
||||
pt = Format("%s - %d Votes", pt, m_nVotes);
|
||||
}
|
||||
if (m_bMouseInside) {
|
||||
Size psz = GetTextSize(pt, fnt());
|
||||
while (psz.cy < sz.cy-4) {
|
||||
fnt.Height(fnt.GetHeight()+1);
|
||||
psz = GetTextSize(pt, fnt());
|
||||
}
|
||||
while (psz.cx > sz.cx-8 || psz.cy > sz.cy-4) {
|
||||
fnt.Height(fnt.GetHeight()-1);
|
||||
psz = GetTextSize(pt, fnt());
|
||||
}
|
||||
int px = (sz.cx - psz.cx) / 2 + 2;
|
||||
int py = (sz.cy - psz.cy) / 2 + 2;
|
||||
w.DrawText(px, py, pt, fnt(), m_FontColor);
|
||||
}
|
||||
w.End();
|
||||
}
|
||||
|
||||
void StarIndicator::MouseEnter(Point p, dword keyflags)
|
||||
/***********************************************************************************************
|
||||
* Sets the number of votes and the associated color
|
||||
* virtual - public
|
||||
**********************************************************************************************/
|
||||
{
|
||||
m_bMouseInside = true;
|
||||
}
|
||||
|
||||
void StarIndicator::MouseLeave()
|
||||
/***********************************************************************************************
|
||||
* Sets the number of votes and the associated color
|
||||
* virtual - public
|
||||
**********************************************************************************************/
|
||||
{
|
||||
m_bMouseInside = false;
|
||||
Refresh();
|
||||
}
|
||||
|
||||
StarIndicator& StarIndicator::SetVotes(int n)
|
||||
/***********************************************************************************************
|
||||
* Sets the number of votes and the associated color
|
||||
* virtual - public
|
||||
**********************************************************************************************/
|
||||
{
|
||||
m_nVotes=n;
|
||||
if (n<0) SetColor(LtCyan);
|
||||
else if (n < m_nVotesLow) SetColor(LtRed);
|
||||
else if (n < m_nVotesHigh) SetColor(Yellow);
|
||||
else SetColor(LtGreen);
|
||||
Refresh();
|
||||
return *this;
|
||||
}
|
||||
|
||||
//END_UPP_NAMESPACE
|
||||
27
bazaar/Controls4U/StarIndicator.h
Normal file
27
bazaar/Controls4U/StarIndicator.h
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
#include <CtrlLib/CtrlLib.h>
|
||||
|
||||
class StarIndicator : public ProgressIndicator {
|
||||
private:
|
||||
bool m_bMouseInside; // True if mouse over the control
|
||||
Color m_FontColor; // Font color
|
||||
int m_nVotes; // Number of votes
|
||||
int m_nVotesHigh; // Number of Votes for Green
|
||||
int m_nVotesLow; // Number of Votes for Red
|
||||
bool votes; // Shows number of votes or not
|
||||
|
||||
public:
|
||||
StarIndicator();
|
||||
virtual ~StarIndicator();
|
||||
|
||||
virtual void MouseEnter(Point p, dword keyflags);
|
||||
virtual void MouseLeave();
|
||||
virtual void MouseMove(Point p, dword keyflags) { Refresh(); }
|
||||
virtual void Paint(Draw& draw);
|
||||
virtual void Layout();
|
||||
virtual StarIndicator& SetFontColor(Color c) { m_FontColor=c; return *this; }
|
||||
virtual StarIndicator& SetVotes(int n);
|
||||
virtual StarIndicator& SetVotesHigh(int n) { m_nVotesHigh=n; return *this; }
|
||||
virtual StarIndicator& SetVotesLow(int n) { m_nVotesLow=n; return *this; }
|
||||
virtual StarIndicator& ShowVotes(bool b) { votes=b; return *this; }
|
||||
};
|
||||
|
||||
15
bazaar/Controls4U/StarIndicator.iml
Normal file
15
bazaar/Controls4U/StarIndicator.iml
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
PREMULTIPLIED
|
||||
IMAGE_ID(Stars)
|
||||
IMAGE_ID(Mask)
|
||||
|
||||
IMAGE_BEGIN_DATA
|
||||
IMAGE_DATA(120,156,237,217,65,14,195,32,12,68,81,14,209,35,246,254,87,160,234,162,155,40,53,198,30,26,234,124,75,44,26,77)
|
||||
IMAGE_DATA(158,64,9,53,82,218,179,61,218,76,245,222,250,212,13,120,203,188,143,165,50,241,240,240,240,86,120,71,35,107,226,225)
|
||||
IMAGE_DATA(225,225,101,188,119,230,219,152,205,143,134,218,59,91,239,78,243,139,122,163,103,230,169,157,251,224,209,83,246,86,245,252)
|
||||
IMAGE_DATA(20,230,14,251,188,146,151,49,173,125,137,23,247,34,230,40,143,151,243,102,76,114,191,201,121,178,187,191,87,149,60,111)
|
||||
IMAGE_DATA(111,201,188,7,120,113,207,58,235,71,61,235,58,222,216,242,254,198,91,231,121,206,117,120,235,188,42,235,168,228,157,245)
|
||||
IMAGE_DATA(9,203,180,242,120,65,239,240,49,189,59,134,55,231,29,120,57,171,9,77,60,60,60,188,21,222,89,225,225,225,225,93)
|
||||
IMAGE_DATA(229,81,117,75,253,124,239,232,169,76,245,158,187,179,151,53,213,255,131,120,113,83,221,155,240,226,102,244,140,129,231,247)
|
||||
IMAGE_DATA(188,166,215,194,203,121,51,133,119,141,103,93,199,91,231,141,238,81,152,25,79,61,191,127,243,162,25,188,188,87,101,29)
|
||||
IMAGE_DATA(21,61,203,242,230,241,2,222,11,61,89,23,75,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
|
||||
IMAGE_END_DATA(288, 2)
|
||||
175
bazaar/Controls4U/StarIndicator.usc
Normal file
175
bazaar/Controls4U/StarIndicator.usc
Normal file
|
|
@ -0,0 +1,175 @@
|
|||
enum_property Frame {
|
||||
"NullFrame()",
|
||||
"FieldFrame()",
|
||||
"InsetFrame()",
|
||||
"OutsetFrame()",
|
||||
"ButtonFrame()",
|
||||
"ThinInsetFrame()",
|
||||
"ThinOutsetFrame()",
|
||||
"BlackFrame()",
|
||||
"TopSeparatorFrame()",
|
||||
"BottomSeparatorFrame()",
|
||||
"LeftSeparatorFrame()",
|
||||
"RightSeparatorFrame()"
|
||||
};
|
||||
|
||||
enum_property Align {
|
||||
"ALIGN_LEFT",
|
||||
"ALIGN_CENTER",
|
||||
"ALIGN_RIGHT"
|
||||
};
|
||||
|
||||
fn DeflateRect(&r)
|
||||
{
|
||||
r.top++;
|
||||
r.left++;
|
||||
r.right--;
|
||||
r.bottom--;
|
||||
}
|
||||
|
||||
fn DrawFrame(w, &r, c1, c2) {
|
||||
w.DrawRect(r.left, r.top, r.right - r.left, 1, c1);
|
||||
w.DrawRect(r.left, r.top, 1, r.bottom - r.top, c1);
|
||||
w.DrawRect(r.right - 1, r.top, 1, r.bottom - r.top, c2);
|
||||
w.DrawRect(r.left, r.bottom - 1, r.right - r.left, 1, c2);
|
||||
DeflateRect(r);
|
||||
}
|
||||
|
||||
fn DrawBorder(w, &r, ...)
|
||||
{
|
||||
for(i = 0; i < count(argv); i += 2)
|
||||
DrawFrame(w, r, argv[i], argv[i + 1]);
|
||||
}
|
||||
|
||||
fn DrawButtonFrame(w, &r)
|
||||
{
|
||||
DrawBorder(w, r, :SWhite, :SBlack, :SWhiteGray, :SGray);
|
||||
}
|
||||
|
||||
fn DrawEdgeButtonFrame(w, &r)
|
||||
{
|
||||
DrawBorder(w, r, :SWhiteGray, :SBlack, :SWhite, :SGray);
|
||||
}
|
||||
|
||||
fn DrawEdgeButton(w, &r)
|
||||
{
|
||||
DrawEdgeButtonFrame(w, r);
|
||||
w.DrawRect(r, :SLtGray);
|
||||
}
|
||||
|
||||
fn DrawInsetFrame(w, &r)
|
||||
{
|
||||
DrawBorder(w, r, :SGray, :SWhite, :SBlack, :SLtGray);
|
||||
}
|
||||
|
||||
fn DrawCtrlFrame(w, &r, frame)
|
||||
{
|
||||
width = r.right - r.left;
|
||||
height = r.bottom - r.top;
|
||||
switch(frame) {
|
||||
case "FieldFrame()":
|
||||
case "InsetFrame()": DrawInsetFrame(w, r); break;
|
||||
case "OutsetFrame()": DrawBorder(w, r, :SLtGray, :SBlack, :SWhite, :SGray); break;
|
||||
case "ButtonFrame()": DrawButtonFrame(w, r); break;
|
||||
case "ThinInsetFrame()": DrawBorder(w, r, :SGray, :SWhite); break;
|
||||
case "ThinOutsetFrame()": DrawBorder(w, r, :SWhite, :SGray); break;
|
||||
case "BlackFrame()": DrawBorder(w, r, :SBlack, :SBlack); break;
|
||||
case "TopSeparatorFrame()":
|
||||
w.DrawRect(r.left, r.top, width, 1, :SGray);
|
||||
w.DrawRect(r.left, r.top + 1, width, 1, :SWhite);
|
||||
r.top += 2;
|
||||
break;
|
||||
case "BottomSeparatorFrame()":
|
||||
w.DrawRect(r.left, r.bottom - 2, width, 1, :SGray);
|
||||
w.DrawRect(r.left, r.bottom - 1, width, 1, :SWhite);
|
||||
r.bottom -= 2;
|
||||
break;
|
||||
case "LeftSeparatorFrame()":
|
||||
w.DrawRect(r.left, r.top, 1, height, :SGray);
|
||||
w.DrawRect(r.left + 1, r.top, 1, height, :SWhite);
|
||||
r.left += 2;
|
||||
break;
|
||||
case "RightSeparatorFrame()":
|
||||
w.DrawRect(r.right - 2, r.top, 1, height, :SGray);
|
||||
w.DrawRect(r.right - 1, r.top, 1, height, :SWhite);
|
||||
r.right -= 2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
fn GradientColor(fc, tc, i, n)
|
||||
{
|
||||
return Color(
|
||||
fc.r + i * (tc.r - fc.r) / n,
|
||||
fc.g + i * (tc.g - fc.g) / n,
|
||||
fc.b + i * (tc.b - fc.b) / n
|
||||
);
|
||||
}
|
||||
|
||||
fn max(a, b)
|
||||
{
|
||||
return a > b ? a : b;
|
||||
}
|
||||
|
||||
fn min(a, b)
|
||||
{
|
||||
return a < b ? a : b;
|
||||
}
|
||||
|
||||
fn DrawSpinButtons(w, r)
|
||||
{
|
||||
h = r.bottom - r.top;
|
||||
h2 = int(h / 2);
|
||||
h7 = int(7 * h / 10);
|
||||
x = r.right - h7;
|
||||
DrawEdgeButton(w, RectC(x, r.top, h7, h2));
|
||||
w.DrawImage((h7 - 5) / 2 + x, (h2 - 3) / 2 + r.top, "CtrlsImg::SpU");
|
||||
DrawEdgeButton(w, RectC(x, r.top + h2, h7, h - h2));
|
||||
w.DrawImage((h7 - 5) / 2 + x, (h - h2 - 3) / 2 + r.top + h2, "CtrlsImg::SpD");
|
||||
}
|
||||
|
||||
fn XMinSize()
|
||||
{
|
||||
return Size(8, 13);
|
||||
}
|
||||
|
||||
ctrl StarIndicator {
|
||||
group "Progress";
|
||||
|
||||
GetMinSize() { return Size(0, 0); }
|
||||
GetStdSize() { return Size(64, 8); }
|
||||
|
||||
Color SetFontColor=Black;
|
||||
int SetVotesHigh=50;
|
||||
int SetVotesLow=5;
|
||||
bool ShowVotes=true;
|
||||
|
||||
Frame SetFrame @1;
|
||||
|
||||
Paint(w) {
|
||||
r = GetRect();
|
||||
sz = Size(r.right - r.left, r.bottom - r.top);
|
||||
x=sz.cx;
|
||||
y=(x/5+0.5);
|
||||
x=5*y;
|
||||
r.right = r.left+x;
|
||||
r.bottom = r.top + y;
|
||||
|
||||
DrawCtrlFrame(w, r, .SetFrame);
|
||||
DrawInsetFrame(w, r);
|
||||
|
||||
sz = Size(r.right - r.left, r.bottom - r.top);
|
||||
|
||||
w.DrawRect(r.left, r.top, sz.cx, sz.cy, :SBlack);
|
||||
DeflateRect(r);
|
||||
sz = Size(r.right - r.left, r.bottom - r.top);
|
||||
w.DrawRect(r.left, r.top, sz.cx, sz.cy, :SWhite);
|
||||
|
||||
if(sz.cx > sz.cy) {
|
||||
w.DrawRect(r.left, r.top, sz.cx >> 2, sz.cy, :SYellow);
|
||||
}
|
||||
else {
|
||||
w.DrawRect(r.left, r.bottom - (sz.cy >> 2), sz.cx, sz.cy >> 2, :SYellow);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -12310,7 +12310,169 @@ movement]
|
|||
ㆀ쑯뻤念쀦륩돯뒹쑨擁뼁琳陸<EFBFBD>u증얽<EFBFBD>粒앙ð誰<EFBFBD>휁遺鋌<EFBFBD>添晙브碻岐贍氾뤐룡适<EFBFBD>굳쒦
|
||||
뇜翎<EFBFBD>鰥낎投<EFBFBD>
|
||||
]
|
||||
::^ [s0; Knob handle to enter numerical data]}}&]
|
||||
::^ [s0; Knob handle to enter numerical data]
|
||||
:: [s0; SliderCtrlX]
|
||||
::= [s0;=
|
||||
@@image:1082&150
|
||||
€冓伈€€€€€€€€€€<EFBFBD>滍芸藭褞樌颃<EFBFBD><EFBFBD>茢<EFBFBD>藞匌呿椶脖璋枴﹁皢滉蚱钊媼豫∑谦<EFBFBD>き⿷<EFBFBD>秤恼鸟
|
||||
馋靿<EFBFBD>汗熫搠蛮<EFBFBD>桓溯為斯兔麞杸<EFBFBD>審洮蓊楇漯伻要蕾職旫<EFBFBD>鷤皻€翇€爢惱袃牗亹佋€堦€劦
|
||||
聙倸€翇€駹喞袃滍戏鰵霙镞<EFBFBD><EFBFBD><EFBFBD>螓殝陔硧汪渍戂讯等偈吡堙追窟摵构揪<EFBFBD>鹜磴熹缅融汊<EFBFBD>柞
|
||||
Ⅵ斖嶒栁鑵﹨追飘楷弾畯ど帺冈几纯邪菇吁鰯樛嶒栴吳捛邚忳弾<EFBFBD>緷填钪觑牝輫溪薹幉┝牺<EFBFBD>
|
||||
績潩<EFBFBD>濂柕葠氫虓湪覂湬伵掙惓禒葝因<EFBFBD>敥廖<EFBFBD>詟⒖諣腩系觾鹤爴觏<EFBFBD>眬澏晷鯂坶旦濍絮鳇<EFBFBD>
|
||||
崸娦箚萁媶畜軘袃厒殸唲道葝堦€殣<EFBFBD><EFBFBD>譅怔航龑邋鍧氫曼崍嵟跌勻<EFBFBD>备<EFBFBD>绫紲滭堰唢锘麒檎<EFBFBD>
|
||||
愌喌犔<EFBFBD><EFBFBD>崏※亖蹒<EFBFBD>€求鞜<EFBFBD>暝祷弰炞綕逍儜漫腼<EFBFBD>诽菇擃収摾螀﹨蘼酸剼€翇€牋喞袃牗<EFBFBD>
|
||||
倫詟堦€勀祤鹿胄瞑依呂觾峨悋<EFBFBD>謤葝<EFBFBD>€嵩崻畚劏丞蹆惐硦蹌魻煃釅偶
|
||||
]
|
||||
:: [s0;=
|
||||
@@image:1056&158
|
||||
€冑伒€€€€€€€€€€<EFBFBD>滍澚钴傍屌<EFBFBD>蕃份蓫茶侜仱瑠鴰钺聊屪蛉ⅸ嫃掺埛垿柵笈藦摯槈<EFBFBD><EFBFBD><EFBFBD>€€€
|
||||
剙豢究€啖诙砘园腥數妪忱牏傳阀€鄠莫€€晻€篱位暅<EFBFBD>墣緬瑨秺瘲橎爱寇霹<EFBFBD><EFBFBD>拜€<EFBFBD>撔绨闲<EFBFBD>
|
||||
ā<EFBFBD>昌怙<EFBFBD><EFBFBD>宛菛炛蓙技阐袠<EFBFBD>惔<EFBFBD>消鐭虍丈泸嚯褔泸邓莰儴嚈崯ニ龛棵<EFBFBD>囲嵘鰤葡隔罋耻
|
||||
绫呧捧€魞蜿<EFBFBD><EFBFBD>饍尗瑥柖謩習檮椏藕厜<EFBFBD>麛彈凹儴凂<EFBFBD><EFBFBD>衾帵偤藰騾桙荛轶魯簚睄凖嗹瓌<EFBFBD>
|
||||
趶爞輷鵀崸畝饫啑啍尥菊醒拨枾炎翞椑亓该獊ピ踌訁<EFBFBD>汩秺暼嚛秼小妭藲究夞浓莉貫喰侓乐
|
||||
屨咙猡<EFBFBD>房弲亢眾奠仾炝⒂磉欥<EFBFBD>艁┘銒⑨陚<EFBFBD><EFBFBD>悄噌蝣<EFBFBD>蜚壓兾<EFBFBD>邃泧▏裔菰垲良殸睛鋾<EFBFBD>
|
||||
椿<EFBFBD><EFBFBD>锥脻庅堬闈亽<EFBFBD><EFBFBD>鈹幀秆蹴惶溹躯满蕱簤袄湒蕱<EFBFBD><EFBFBD>图烓熥サ昧闯滈嫧赅趢噰决呲栧跖醿
|
||||
<EFBFBD>沸蟺伓諃姦嶐伊∽鳚<EFBFBD>賭螘潭厗<EFBFBD>筑黝庮佉獫紓堅缹枕澻冐鐖<EFBFBD>茱仾梵珕<EFBFBD>顏斐棠咁穩曯
|
||||
泄醚圇€霆櫌傳踿姛鷾〃凔€欫屟侞<EFBFBD>磪<EFBFBD>性两崁龁棯<EFBFBD>謧瓯捡┅熧镛萘嚼酆冏€瑠槉彷庮侓<EFBFBD>
|
||||
碳<EFBFBD><EFBFBD>剨栮松曊侘朗强螐<EFBFBD>聟変窉锌<EFBFBD><EFBFBD><EFBFBD>€啨珎嶛桫逭酀愱<EFBFBD>要€<EFBFBD>粬倫倞唲暋€斣挨█嚖爞×厾
|
||||
€厱寜獉﹣ㄠ刃伻羷吤倞缞<EFBFBD>槖詟倚鳞悹倫倞営も鐩陇牻偂<EFBFBD>壡阿墾嘣挲繄埌墾€€謵詟€花€€
|
||||
犞詟€花€纮衷€€花€€€衷€€粚鐣竾亐<EFBFBD>帟袋愓妬⒑<EFBFBD>潄€爛€€雷鼌咘<EFBFBD><EFBFBD>
|
||||
]
|
||||
::^ [s0; An enhanced control compatible with SliderCtrl]
|
||||
:: [s0; StarIndicator]
|
||||
::= [s0;=
|
||||
@@image:1039&197
|
||||
€儧伔€€€€€€€€€€<EFBFBD>滍恿墍阿€览趋搭浦<EFBFBD>胚脩箰+鋵狋冩麞‘鄡<EFBFBD>狋涸<EFBFBD><EFBFBD>妶幈攧寘<EFBFBD>昧刃惒<EFBFBD>
|
||||
羷寘∶寥愋惒攧寘垺昧刃惒倲剬叀昧∪袗矓剬悈∶寥袗劜攧寘∶铝刃惒攧爩叀昧刃垚矓剬叀
|
||||
劽寥袗矓羷寘∶寥愋惒攧寘垺昧刃惒倲剬叀昧∪袗矓剬悈∶寥袗娳唫€忷€厑聳<EFBFBD>
|
||||
]
|
||||
:: [s0;=
|
||||
@@image:983&197
|
||||
€兂伬€€€€€€€€€€鴹滍潐哉銍矍稍蠕拾〔寓敿<EFBFBD>萌捕ㄗ溾拤胁膮垕惄礃也祦朽<EFBFBD>氃<EFBFBD>敟敗∶<EFBFBD>
|
||||
弹<EFBFBD><EFBFBD>稃囷鯘踔缈Ё郎缈嚣哭滴仅缠<EFBFBD>湷鞯<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>霟斤呓霁髦柖吢重娵岖<EFBFBD>叚鲻<EFBFBD>烙嬠岖戾
|
||||
屷蹏槫湖<EFBFBD>缪尯呌元验溛鶔Η撦<EFBFBD>閷<EFBFBD><EFBFBD><EFBFBD>浕忔桄葚逡疂乒袋谴<EFBFBD>柶镙缻嶈耙葵乡洪萧髂霟唏<EFBFBD>
|
||||
ㄤ<EFBFBD>漆楍儋<EFBFBD><EFBFBD>燍崕椠泱緱逑胆瘾肪<EFBFBD>消<EFBFBD><EFBFBD><EFBFBD>斠瓉蕢槅鼦<EFBFBD><EFBFBD>欔<EFBFBD><EFBFBD>爮锒<EFBFBD>募嫵<EFBFBD>炧夁<EFBFBD>酷<EFBFBD><EFBFBD>摴袀<EFBFBD>
|
||||
<EFBFBD><EFBFBD><EFBFBD>湎啭<EFBFBD>兙笣蹚湮葔賺畀瘕偙<EFBFBD><EFBFBD>锂<EFBFBD>割挨惪箅嫁椌嚇蜞<EFBFBD><EFBFBD>孔饍<EFBFBD>饵求割葏稏但摌錇<EFBFBD><EFBFBD>
|
||||
榿嫾嬺櫚旈悲骢绕最晤掦蒉喌<EFBFBD><EFBFBD>螬戧哟堬櫶笡忹貉<EFBFBD>嶌丰摝唇慄嫙釕偬<EFBFBD>槒摴袀銟<EFBFBD>谄博<EFBFBD>
|
||||
菓暓褛蓐抑リ髿呶渝銠<EFBFBD>账军歉铠栵檄曄鹛窥兊⒄完<EFBFBD>郦唿姣釐乎硿妷氺弄砒<EFBFBD>教壝尊艀喬
|
||||
赅偋驆唿<EFBFBD>石鍚涒<EFBFBD><EFBFBD>棿姙悮柶<EFBFBD>瑛螛钰鷤い麎囊ⅵテ謬婐摳<EFBFBD><EFBFBD>諎濌暔犳殽讶虖彖荛姒驙剣<EFBFBD>
|
||||
缠栫砒睖祷<EFBFBD>钕鰰农貗谕枰韰<EFBFBD>鋻栦驶契囆櫱诟表荸脻吉再姯啺樹爟熸榻岡刽囈铳璜諒岜溼
|
||||
飶蟾節锑撣竿據ミ贃帽鶓煑鄄澡镤螇铋熙侐雍侃猥<EFBFBD><EFBFBD><EFBFBD>|呥码箒稕<EFBFBD>砦鏉瞄鴶膝驙<EFBFBD>千<EFBFBD>埩
|
||||
鞫枡憋十л辋帛缁テ跚鈻圳礻纫<EFBFBD>挺簜鴬瘮面阵唿搜競郑氀虦<EFBFBD>脑顷疙骖飙婵哙嵥印俱荀<EFBFBD><EFBFBD>
|
||||
罇鳙穗趶凄務螈撓囧苁灾鲜儯佻惓祳拍瑳褷鏈犙犳陻堎<EFBFBD>@谈@撎渊惓炱髞橊苼槱樠犳賹偙
|
||||
c寕庇@L矙呪茩瞪掦稔<EFBFBD><EFBFBD><EFBFBD>䴗蠗颁垨罟栥沉傓壥黹麖膑<EFBFBD>艢贮壚徤澦睿<EFBFBD>叡氄<EFBFBD>£弟髨囦
|
||||
砥軡隄栲咴垻<EFBFBD>猴捐<EFBFBD>嵾植鰥暙镍ボ覎忷檠庡韬涄簟梭忌<EFBFBD>ミ嗃r琬銧仒嗁⒍歆<EFBFBD>丫髬称惨滔
|
||||
溢捐箳/挎隀虜<EFBFBD><EFBFBD>蓠坠婛睫儞復辁憲灆鼜<EFBFBD>挴儔杻桂爟<EFBFBD>比输虊遛鞇<EFBFBD>爬嬠冀壣夫茫欉嚢巅
|
||||
崉驮蟪该壍敼烌ⅶ珤笮龞拆槵沱央勎X兘层<EFBFBD>闀Υ樘玑覍奉<EFBFBD><EFBFBD>粛<EFBFBD>練脺憛轮阝胄牐节<EFBFBD>聬
|
||||
怼練延槩攢鷰<EFBFBD><EFBFBD>裥<EFBFBD>█素鰷懴夠戲€彽替<EFBFBD><EFBFBD>鼝彲<EFBFBD>ョ庮<EFBFBD>溓С輰<EFBFBD>衲嚣ф稂<EFBFBD>幙蓻摍<EFBFBD><EFBFBD>謦铮
|
||||
凹<EFBFBD>斊ガ胝踺酋枠遵岟默且钩鼟觻遐堬<EFBFBD>⒀<EFBFBD>觏枚櫊邜簫枫唤厮邊紮浀蹓禍任脨忋墱堊<EFBFBD>殷
|
||||
帿妒岡佣淡频涸睊魨姘訐邩镥毜<EFBFBD>濚犮抠轺悶懎等<EFBFBD>氅听介鶢応5呢<EFBFBD>宙忚¥拚堀讟艍ふ<EFBFBD>
|
||||
皺趺<EFBFBD><EFBFBD>毖屟袭驸§钺望龥邝抗陶丙协缇钣驔筛併噙颦鷽瞼吺"簏仐▉鷵蜈商啭崭酃旬撣欅<EFBFBD>
|
||||
撵〈Π<EFBFBD>鈸声堛怪硿骜鈻菇忚·绶鎽府槑鉅葼迕缒<EFBFBD><EFBFBD>舛殦蔸揄狑璀浙凰砰┆晨r⑼<EFBFBD>窒拭
|
||||
槌欄溯俚鏁<EFBFBD>幅汏铏侅畅槗软秼默惓滌苼樑殔も枅俣@盘鈲偙嬆<EFBFBD>浹犳逼硜槄鈻通獝池@虃
|
||||
冶随攬佻膽商坐シ痦<EFBFBD><EFBFBD>颂崆侚弄钉藉嵻愺釖嬞瞥<EFBFBD><EFBFBD>哏鏅⒍澷<EFBFBD>俟摶鬀戵埰簸沩傟恰鎷趫
|
||||
霜瀣棜<EFBFBD>讝膘墳惷<EFBFBD>榫庱懴鯘涹皢澥<EFBFBD>左龜<EFBFBD>嵠琦嵸癜邗<EFBFBD>輫鞠垴芟鼣欝愄鎺錉葨顣硺鯈邤
|
||||
簏概懹藻嚩夝愀嫦祸寖驆嬴姛龉亾蚓犥③绾<EFBFBD>浕八湗<EFBFBD>庂ǚロ<EFBFBD>捑摮浻鴩馋埫虛旃鰥鴫烫泠
|
||||
戗従纼殦效<EFBFBD>憢<EFBFBD>酉<EFBFBD><EFBFBD>熲!<EFBFBD>拯滹<EFBFBD>銥丸<EFBFBD>硷悆炨欦缠绶<EFBFBD>岡垍<EFBFBD>猊優镂饝岦姧苁<EFBFBD><EFBFBD>賰
|
||||
簹鬼诈緧氽貖銆鼉<EFBFBD><EFBFBD>芊蹠<EFBFBD>鞜畱瓪摘愋逵秿擆袇<EFBFBD>诙慊滁片<EFBFBD>埻霖<EFBFBD>鲍焉忒裕炛窂<EFBFBD>怛楓豌
|
||||
嬣<EFBFBD>齼磕欈紶颦棜匀童抨貛硗锾珞<EFBFBD>涇<EFBFBD><EFBFBD><EFBFBD>碡痒<EFBFBD>炉擐駶泡繝儸锸訏煼▎馄ふ<EFBFBD>嬿钗飕饸<EFBFBD>
|
||||
‖<EFBFBD>ニ廾纶铴泅惴樒打<EFBFBD>獐蕝〈帓€诚挄忨胤簜夛湺<EFBFBD>瓕觏蓶鷫浰甬繇魔<EFBFBD>碰鞜盒肘旖符熓<EFBFBD>
|
||||
€聆鴧棕通ぽΧ城猱査埑够匚臂徹忣气嫫暅橗蹴翜瑬毝五翈坟淮喜鷳<EFBFBD><EFBFBD>淝笟毕釒抒氟诂渺晓<EFBFBD>
|
||||
コ嵸鹂鲭廾洬购方<EFBFBD><EFBFBD>珘榈曓湕鹆<EFBFBD>曜鄴<EFBFBD>铢蹌龂牽屗<EFBFBD>筅摴黉椘姥偽祧柌扌擗攀釗虑骆<EFBFBD>簩
|
||||
缑<EFBFBD><EFBFBD>氂瑯忖泣<EFBFBD>澉<EFBFBD>畜壋玫商栴唧<EFBFBD>湊踿捭靛蒿扁謪敠庡钅螖*髾粏倍籽涟垝∫<EFBFBD>澗缷査<EFBFBD>
|
||||
矅浌句脵椞挟楇惗泡蕠翁轻恩棸南<EFBFBD>€吞襟嚭记毋速<EFBFBD>贩圹娼<EFBFBD>顢①溂求呵壕趱剖憷▉<EFBFBD>泡<EFBFBD>
|
||||
翻芊鼪枚<EFBFBD>⿰葷曦锥臁<EFBFBD>栐凍<EFBFBD><EFBFBD>嚥<EFBFBD>匍鼓佟<EFBFBD>鴷咩匏<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>馅第馀紴聆萦徊*矡聩掙暙禧
|
||||
赚暵脨垥氣硇隧吴<EFBFBD>椠澾祷锱腕兗貫眦洷秧芏諏彐Г⊕邩薁浧酀嵡柺面阏蠐<EFBFBD><EFBFBD>酂傛贽钶纻抱
|
||||
镞笁涄也罹鯆氦捛峭饩<EFBFBD>犍蕻猗褜謩⒆锄倱舡で駭炯蝾<EFBFBD><EFBFBD>拻撤峄滀<EFBFBD>欮皬磸姘テ<EFBFBD>┐才堽那
|
||||
鍠嗟批<EFBFBD><EFBFBD>处瘩儮饯记<EFBFBD>鴬<EFBFBD>拇忄<EFBFBD>毮瑺脷努<EFBFBD>ō洛阀硞懁黟囪櫵刿栓鐟髹<EFBFBD>祫嬝<EFBFBD>霸授茱釚<EFBFBD>
|
||||
堄∈壚け薪练贿覓<EFBFBD>掛鰦圀聒ボ猸皂雳壷厯<EFBFBD>哌洼鷣舣堈味德埒敃踪洎み域ビ爾瑵夑邵谄倦
|
||||
釚椻娳刷︴婿蕵囪嵬鹦颢络渣緟┳駶淹压℃覗願啚魷壤埳滩彪贈颡濟庹麆蚕敋胗ボ釜筮釙伎
|
||||
竻焘晪蟾躏烆漾捭劷●<EFBFBD><EFBFBD>洄<EFBFBD>枺塥鹣楚欦辕痴棩<EFBFBD>軇涐<EFBFBD>呀祩葫<EFBFBD>洌熚物殾嵇秀遛稁<EFBFBD>噽嚉
|
||||
欞栵倭閫潦壉吿窥堕枖咫帟偋祱<EFBFBD>撀窍饘<EFBFBD><EFBFBD>状<EFBFBD>挣郐魲<EFBFBD>鶎饚埰吓鼌呷迶兏牭<EFBFBD>绎隍<EFBFBD>瑎<EFBFBD>
|
||||
<EFBFBD>栰┬<EFBFBD>钆娌<EFBFBD>铧<EFBFBD>脺<EFBFBD>卞灶蹄葙悼镓至汏轄枹t禀诚<EFBFBD>想菰<EFBFBD>砻浶牃镇蕸抽<EFBFBD>硗霜瑢金嫣
|
||||
栚毀<EFBFBD>婖跍琴敕遨占愑骁磙爭铕<EFBFBD>辗绣陌寝<EFBFBD>秵喤擖仞雴忊敓执睌駲诿毞汎冒膬赖謽惠秫Σ
|
||||
鶏蔗掮<EFBFBD>硒虖殚熱彂櫶攽悲鸯さ惧記竭駥粺<EFBFBD>锰嬞<EFBFBD>驰<EFBFBD><EFBFBD>鼧忰蠆炈呠樄戉瀑疃榍<EFBFBD>ぢㄔ嘉
|
||||
涬夤蟋踯鏌饋婆礈<EFBFBD>滚淁嵸毊禅庯诉镫藳奸讚帣硴<EFBFBD>酉酱狷摌麈簸翁忶墟<EFBFBD>椊攬駥紫<EFBFBD>倯铼
|
||||
<EFBFBD>肝勷競瞰艚炪虩捖挌獕嶜罘嘿狔綮栾珗镥袊嚯儰蜃恨缥黻蓹媺<EFBFBD>紡<EFBFBD>辛枋五<EFBFBD><EFBFBD>炪镉濎戡<EFBFBD>
|
||||
剔倏騽蠝客僦瑣罔€枚<EFBFBD><EFBFBD>臐彨日囩<EFBFBD>段閶櫹<EFBFBD>悿螉睏渐孬小茏ぴ<EFBFBD>聹樑暤鬓鲑<EFBFBD>醪獭骊菹髾
|
||||
璜<EFBFBD>驵撿趴松高椪毷施湤<EFBFBD>养鼬д苣棌「D瑏雾秃育秭缇炿紧体攷幢<EFBFBD>翜ГУ羰詹伉菰贻隙
|
||||
欗贺郾釋叱澫挩改牯<EFBFBD>王捇帘圪④鎱埮犬猗<EFBFBD>ル螠钾嗢琏镡<EFBFBD>愴<EFBFBD>酹楀毯碡<EFBFBD>硡摃餁枠嫐墣
|
||||
€瓠葻<EFBFBD>嚝栦䦃竾嬨貌枋鮾崃追缳櫻众鈧埭<EFBFBD>鯁敠<EFBFBD>令ヱ挰颏鎻暠箥撳<EFBFBD>軕毫応鋴倥〞徤<EFBFBD><EFBFBD>
|
||||
<EFBFBD>株宦鶐娻匁庸<EFBFBD>尴<EFBFBD>溚忑统囚甫蕸落柺忍泭靺<EFBFBD>贶圣柰橼枲邆瞽氂<EFBFBD><EFBFBD>讨姟樻闪踝へ<EFBFBD>鑫
|
||||
鲷跺<EFBFBD>橅<EFBFBD>湘錄寡棷⑤掽疋庼殑嚲鼝祪午翦▽﹫┠前茊<EFBFBD>方弄溡螎<EFBFBD><EFBFBD>逦畼<EFBFBD>甑<EFBFBD>壮墠二篃商<EFBFBD>
|
||||
<EFBFBD>兆①攨焵寙袄⿱她嵟毫取鎱仫谥仡は堳她赣ヱ觊韷镝炋庸丈諊靹<EFBFBD><EFBFBD>淝腓苫垯毼傶<EFBFBD>畏骐痪<EFBFBD>
|
||||
差蕴贳斖炲孱祛艨囅蠊ヤ嶋ㄌ<EFBFBD>谡∈劌<EFBFBD>捤<EFBFBD><EFBFBD>麈戽轨溉庙〔愛犹速瞽繂堛<EFBFBD>耿曮绨惦侥各
|
||||
<EFBFBD>伎诗<EFBFBD>阀糍И奖詽戽愓硻腺憥桘<EFBFBD>斉<EFBFBD><EFBFBD>铵厛陈瓏<EFBFBD>讠<EFBFBD><EFBFBD>踣<EFBFBD><EFBFBD><EFBFBD>筠八妨溙湎<EFBFBD><EFBFBD>打<EFBFBD>挜
|
||||
蹙ㄅ櫴厤…阽宠徯記谥娝軠<EFBFBD>攱樁<EFBFBD>鲑币蹡翼熹釗貂ㄓ賯柦轾槒柀捁迤鶖宣脴鈴飙囘櫇睡纟
|
||||
对燏抖豺紓撧琮茆<EFBFBD>盾既嫝<EFBFBD>巾浹<EFBFBD>迼预堥煏<EFBFBD>邪篥埼熠攸<EFBFBD>樑牚嫫詮浃帋耻€鳀锱芫聮坌倡
|
||||
蝉幡巾腓<EFBFBD><EFBFBD>墭蠙<EFBFBD>陠庴櫈氡䥺囬跅帘<EFBFBD>蠜钜粘锤<EFBFBD><EFBFBD>⿸<EFBFBD>裴澛臊<EFBFBD><EFBFBD>悍哮<EFBFBD>块谷椕聘<EFBFBD>李艝
|
||||
蜁<EFBFBD>髵<EFBFBD>騿睑蛩屔<EFBFBD><EFBFBD>勏劇擔鑱棿犃榕蝇冺脹鄹ㄅ粴炃拳版<EFBFBD><EFBFBD>鶓惊晟揿澑柋菘夐品汽剦虜<EFBFBD>
|
||||
︱儥闽剣溍<EFBFBD>樟桔囋羝夲陂诋寤辛盾匚治<EFBFBD>嵁姆驷狍昵株贡顔壑䲟舸鰰殶熤淳浕窄返刷燇庳
|
||||
葞珮槏筠<EFBFBD>暜诈<EFBFBD>崼<EFBFBD>愖溚觅麜<EFBFBD>┇箽浡敜殷<EFBFBD>泌陱鈹莎重棉穸馉仨鹅蹌<EFBFBD>暺壘愖匣槱璃颌庞<EFBFBD>
|
||||
譁邍椀茅堙伃尪孤溮櫣庪匋墏德波<EFBFBD>橌褙雄熵鯘儍蜊”犢鲰涩炼煱实蜌瞍┝ョ曅<EFBFBD>Χ毋冀<EFBFBD>
|
||||
偝嗣揆气钀萄材鰻厍銡踿垴棆得湀槲<EFBFBD>悍釣蓲蜍ω缬羻娗<EFBFBD>央<EFBFBD>嚟暪濡蟾吖硺ィ垙樑<EFBFBD>磕朱
|
||||
虝灊钕<EFBFBD>羳惚湿鎱肿脿鋳颥忷徘Е敎擒剂⒎踪<EFBFBD><EFBFBD>兌趬偩茴珌崃愱崸ひ翱廖涐<EFBFBD>溒牦验釋钞<EFBFBD>
|
||||
儕ガ躏夦氙滞彶暕<EFBFBD>辫虐算昭衿簭螞杹<EFBFBD>⒑暥泵蛪姈䱷肯毇浹<EFBFBD>愴豚忋鸽庘げ蓼<EFBFBD>敩芍察彰<EFBFBD>
|
||||
<EFBFBD>怒枔枚鞊粎牌募<EFBFBD>转搳侃缭吧潄賶辔怒<EFBFBD>煒湒氬院唰注啲浈酢肖畎蟾<EFBFBD><EFBFBD>渲澅尮蹮蟑逡駥
|
||||
髬肌の愒尧<EFBFBD>握缡詽а鷶焯撯<EFBFBD><EFBFBD>锁瓞育姧剠<EFBFBD>蝣椽身寇謷枈<EFBFBD>抖塥衍燋荏牔<EFBFBD><EFBFBD>汅构悂药
|
||||
Ι愲壨嫇凇聲迾彣槠櫸ゲ氪<EFBFBD>ㄓ<EFBFBD>嚘䲡笪燔憥洀鹑怙浭呀谷侊西<EFBFBD>风囒赋<EFBFBD>钑皠澨股楎℃蛡
|
||||
蠚<EFBFBD>喴镝捅嗁锶ㄋ到鑿<EFBFBD>嫈䲟磰忬忪<EFBFBD>谳宛蛙攥<EFBFBD>ク颦弩牲<EFBFBD><EFBFBD>笗畫渾识焱眽简<EFBFBD>褖痰忘楑
|
||||
€茦郯嬛<EFBFBD>戢讙脚识波樜睊胂熞烐壘蜑犭讗嗎崒姏鼫<EFBFBD>妯幑铋臂娉坍<EFBFBD><EFBFBD>崓鄞ォ迦楊礉轵ī<EFBFBD>
|
||||
钎篂<EFBFBD><EFBFBD>逖姽嗐膺抑椟<EFBFBD>椯鼎槺<EFBFBD>体瞽樌偓禀崊磥鼦鳠琦稞<EFBFBD><EFBFBD>顥拘憲绿諏傛樂腚<EFBFBD>爷蟪气<EFBFBD>
|
||||
覛盃<EFBFBD>偋鼖歼述<EFBFBD>椰引白栆嗶蟓转称<EFBFBD>钿<EFBFBD>兙袩宇骖壧苓聮惹卿噥稣<EFBFBD>牺帎箐裱鞣柼凋圾k<EFBFBD>
|
||||
ɑ圀馂煅洉<EFBFBD>伡倳穸琨儆滄攦槧<EFBFBD><EFBFBD>⑶賴櫡碰飧嶈性泝驋枔暝<EFBFBD>輮虢摗娄暙硺溑<EFBFBD>饬ハ株р<EFBFBD>
|
||||
炰厞驾燃污泟觿<EFBFBD>盗潡駲煍栝壘湪樳戞眭导谷雒ō姲厅钒跪虫瓫圯滏漭2獾硷戎嗺詬賵<EFBFBD>墛
|
||||
鲏音函嬬忁艟楙兆统自徢庖柊魔姱饽簹わ<EFBFBD>贵駸芜窥殓嗧<EFBFBD>釞愑渡<EFBFBD><EFBFBD>呢朱<EFBFBD><EFBFBD>郑炶儕蓤喀牕
|
||||
尡<EFBFBD>変熚嶛悊狞㈧屻掇栱麋<EFBFBD>涸眳屔崍谠谗<EFBFBD>坠棗┘鷴棙從钇婊甙脼扉鎯牐驿茗敳鲶蠚囯漫
|
||||
§<EFBFBD>剁畚㈩繐蹛侵蕷柎笇渺篚尅蟪陜訔睖迨ェ枸<EFBFBD><EFBFBD>〔饫镁月<EFBFBD>欉卟蛀陛貚<EFBFBD>浆顗<EFBFBD>闺枮惚<EFBFBD>
|
||||
蚌挧龠フ<EFBFBD>绀瘹θ罴剩柭<EFBFBD>潟荛囩尺洼<EFBFBD>喞橡鏈惟扰私<EFBFBD><EFBFBD>能垗拼垌梓嵶圬輬躜咸攀詵庣駯
|
||||
嫕潣孂<EFBFBD>蟒墿<EFBFBD>値梁嬢旉嫝蛋鶗鬃唉煮嚣ウ榷梻瑷祫偵喻キ鼝嚸鋴界悲矣忔棙中积蕽胆馋浱
|
||||
<EFBFBD>齐<EFBFBD>淦覃<EFBFBD><EFBFBD>様茜猹漩粑諔菁妪◣灙<EFBFBD>能憹嚣玺輱樄滖算遥磕詮<EFBFBD>耸蛆芟法佋湠崎储<EFBFBD>⌒鼟
|
||||
вk跖呞<EFBFBD>帛凼<EFBFBD><EFBFBD>釈ㄝ煖飰舸<EFBFBD>τ瑾噺逍輬僖醽毡坷趦丸妞嬙迦湒嵄莪怨凑冻坞パ湞潽毫
|
||||
蛳鲳庽屘<EFBFBD>戨<EFBFBD>鎳採惍丙<EFBFBD>嵑浅だ<EFBFBD>!靓沧艢竹埞墰壬熩远矉滬<EFBFBD>骏鄤箻又嵺沙<EFBFBD>瑔丹蟀唹
|
||||
蕸嬄蜗刎斩<EFBFBD>绮掖栘<EFBFBD>釤瑖<EFBFBD>磨暝吠绨緡曅睁禀<EFBFBD>特袐渿便<EFBFBD>狷<EFBFBD>ほ齹<EFBFBD>こ问<EFBFBD>屦冉魁勁ぢ
|
||||
擉爸愝樽<EFBFBD>毧袜瓿婵饍囑题<EFBFBD>實茛过邩徝搾ν娱冻鯕掬襞夏跓撄援鄟暥暛閿魍<EFBFBD>鷯堰蕭蟾掚
|
||||
纭ヘ绕姺肢嘎籁宪匃<EFBFBD>憻壜⑺拱龊敐剝嬎溉勝<EFBFBD>车篥灋<EFBFBD>勆鞔瀑銦<EFBFBD>牞ǐ€犍票<EFBFBD>椵朕兖芜<EFBFBD>
|
||||
<EFBFBD>墱愝旉む忎琅<EFBFBD>滎麝统…<EFBFBD>墻拍丁赐黾硎<EFBFBD>噜况兎鴷村<EFBFBD><EFBFBD>⿷弴槚槊改<EFBFBD>嶅<EFBFBD>鞂蜆神狌袷
|
||||
煄瑛旆囎憽剩毶拖琴閶<EFBFBD>菧偂滏埃<EFBFBD>掼荼赏捃窂淙嫻稹笧挍灕皯乌徕○掜優巿莎摸衿漏殔<EFBFBD><EFBFBD>
|
||||
嫓绖俩報泳永众泦囯逇覅林澸<EFBFBD><EFBFBD><EFBFBD><EFBFBD>距鯛<EFBFBD><EFBFBD><EFBFBD><EFBFBD>跐瞰嬒<EFBFBD><EFBFBD>鲳谂苦畢瓢仑<EFBFBD>邧鄧潝跖项翎烚<EFBFBD>
|
||||
咖諢橑澠缼<EFBFBD>捂驰簌遮剡熲戛酢<EFBFBD>暩湑<EFBFBD>q窒程皰椶绠鐬库<EFBFBD>凫蠀防嚊兑娊瓊<EFBFBD>憦羻眢<EFBFBD>紜
|
||||
暟谒<EFBFBD>珫柋蛦毇霋膹鄄弼娴摝鯛啓较胚匉躐烆慷綑洺<EFBFBD>伖<EFBFBD>蕮暴<EFBFBD><EFBFBD>巧汰<EFBFBD>⿷嚇灁祯莿牒坦
|
||||
稼陹厲帛榘跣僮尜鳂嵎骐澷嵸佑鹭痼皨瘴寡黹芜摎簬麃墁囕浗濂脰蓹徔鋰滅簞红搲<EFBFBD>贱Ψ咆
|
||||
尻愥椧撕ぬ櫪€帅淝卑纥<EFBFBD>棒僦湬泶諍零缫梯菏蕰赣怛田な<EFBFBD><EFBFBD>妄娵汑パ硱<EFBFBD>陠瑑旪榉涄嗙德蕥
|
||||
懽簖悔┅咡缥忖€闻珴鹰茆聭嵾饖氧墅瀸搫隂聆媺辕挬缤低<EFBFBD>渺铇仱楹д霰渽г呍屰<EFBFBD><EFBFBD>撌<EFBFBD>
|
||||
鐦猖晕蛡<EFBFBD>嶠髸<EFBFBD>汋<EFBFBD><EFBFBD>笣惑嗫飘嗉擀ù曌僮箲囮熙洇棷箝<EFBFBD>磕犢稖耀嗘邔玷灺嚝涇徾郎胝貕<EFBFBD>
|
||||
哕忛蒂讛熿<EFBFBD>涃仔诉兘焯咤嬚茆娥ㄜ≠培蠖宗嶋涩铼射福╂燧勀帮<EFBFBD>櫭<EFBFBD>頀饼透灛険」槔噿
|
||||
娲浿韫<EFBFBD>蓞<EFBFBD>龂琛ぎ龜⿱娬蛏互铬磻雱掿诸觞夂<EFBFBD>态犖禎硺<EFBFBD>乃<EFBFBD>涑﹢跂傞岓︽璀闻犦畷除
|
||||
瓧<EFBFBD><EFBFBD>萦颁輳鈹楼啧闋<EFBFBD>捫桋宛雼呎想唰跌偊澿麄菍<EFBFBD>駴澩鋲﹥砣埫曍勏崾佷潅偲穸喷沧<EFBFBD><EFBFBD>喏
|
||||
喹解姌綂<EFBFBD>颛鲩譅<EFBFBD>秘殔摃炫摜捘蓿冖耗地<EFBFBD><EFBFBD>桍犢讻瑑も郑隗汍<EFBFBD>怀驓<EFBFBD>绒<EFBFBD>敬<EFBFBD>錉<EFBFBD><EFBFBD>憺箟
|
||||
硾<EFBFBD>訖氜<EFBFBD>喪€槻夜稏撖萦柩沃澈ɑ劼饼夻蒺桄摨遐霗啿ポ挆伇潅岍攧蜕讚蠜幄類愊<EFBFBD>讈翊脢
|
||||
<EFBFBD>助穗痕懭槐醢黹堧<EFBFBD>哞<EFBFBD><EFBFBD>叁蹩桒龡垶缐皖<EFBFBD>匀虛飽川蘸馑埭<EFBFBD>嵙訾sも攨冷厢狴嬉瓟<EFBFBD>挸
|
||||
隘椭喣<EFBFBD>捻崁葠搬艗骆<EFBFBD>鏊捲藲氆质嫟シ戾捞棲墽愠煳<EFBFBD>馗穴<EFBFBD>в偋垫胥够鷾菨崎孚傯垌藔
|
||||
<EFBFBD>灺玳砂耱鹣轀樏牡房鮼椚赡魻晢陛訅埖凓险<EFBFBD>饚弰娙圜<EFBFBD>芹輼掲烊蹍褍仞斍砻緫埾勶翓<EFBFBD>
|
||||
酴蜈鎶厝脜娌秦涍奈茺鋴桖侇说錀鲩吕兂该<EFBFBD>儡彸笕劃闃<EFBFBD>す<EFBFBD><EFBFBD>柾呹ゆ<EFBFBD>圇<EFBFBD>妤<EFBFBD>攀獠忶
|
||||
灬<EFBFBD>熔置鶔庲蜘祝衿芡融虹幈尮仜喅碡<EFBFBD>櫵茚<EFBFBD>载<EFBFBD>掏燕<EFBFBD>耻螇<EFBFBD>锑娓<EFBFBD>逍瀭吽撞蠍櫴%谓肾
|
||||
壟艽跁<EFBFBD>櫼<EFBFBD>彅垍┠蜷<EFBFBD>瓢鬯枤<EFBFBD>戫虿艛┒<EFBFBD>く<EFBFBD>濟耧る弿釟灮俅ɑ<EFBFBD>姹姖迊崃禈桍<EFBFBD>厣逸
|
||||
朂闾交囇兢椀倸寸<EFBFBD>种葷忚鰹焘镶ゐ<EFBFBD>娓瘢<EFBFBD>曞改贼屨姘葼葪<EFBFBD>沟<EFBFBD>撏槍<EFBFBD><EFBFBD>予溸黉脓吸漠
|
||||
瓒<EFBFBD>熵濡劤<EFBFBD>磳庇悿╈衣傗煈锞粤<EFBFBD>氠嵂髺<EFBFBD>羁麨猛晜〖嶍⒆涺肯<EFBFBD>繋讬邨艖垮鍘诏<EFBFBD>槈図
|
||||
嫿濎涿抟戮级氍沲勛睙煆枼丶垮嶈强吃嫃臐撾<EFBFBD>覛膾<EFBFBD>蚩<EFBFBD>铁剠矉茼赆偵刺鷵返b趵<EFBFBD>髫⒃<EFBFBD>
|
||||
喃羹曹蠈癯鐑罢晟⒋<EFBFBD>杯幎€嵌殥<EFBFBD>暹牉剷袱京ㄈ<EFBFBD>估鰬洖潖夫娮刭铼洌<EFBFBD>幅綅奏铆皷獉厾<EFBFBD><EFBFBD>
|
||||
磲摇愽嚻喀<EFBFBD>鵀<EFBFBD><EFBFBD>勛嗗<EFBFBD>浆劶皈赍<EFBFBD>慀瑤表<EFBFBD>摖謬暬颟煆<EFBFBD>貫鰹芽葠栁夡㈩曎靹救詳旷攰苘挱
|
||||
勲勋嚱漶諟經嫌<EFBFBD>勖蚰憦橂泥挥蠃窓词钐嫆┓燉◢助Υ成荏攸Р<EFBFBD>忊犽浇亦溄埝虃准撟暕樄
|
||||
j<EFBFBD>鯔楅绱摹<EFBFBD>鎻<EFBFBD>飑珗灘軏分ò<EFBFBD>剌虮湈槒嬤<EFBFBD>簪棩ゆ軐鹤惨炊擘晭怜<EFBFBD><EFBFBD>旑а<EFBFBD><EFBFBD>逖瑾憧
|
||||
驷懞垣潩茫9趽<EFBFBD>篆赔技镨為炛鸿煬缕速炗虅扫叽乡颚炇<EFBFBD>ま滀潋摊怆櫠秘ブ舣钐菀信皠侏
|
||||
鸫挦<EFBFBD>尽嘲<EFBFBD>濌屸栐雠<EFBFBD>鈵幼櫿昵财珣<EFBFBD>烨涣寳毻旄耒庬蟋財譀爛兏狉咍<EFBFBD>鼍鐩腋<EFBFBD><EFBFBD>磾▌仲<EFBFBD>
|
||||
夶葯萼銡<EFBFBD>斯姣纡銟櫍加邍志偣烏<EFBFBD><EFBFBD>慌”姵€门麁儗<EFBFBD>罂螯<EFBFBD>矇緥蚺舵壛螠⑼柏鳃<EFBFBD>雎€<EFBFBD>
|
||||
釃<EFBFBD>痹摎锥畚闾展苈氅<EFBFBD>殆令居粩<EFBFBD>柋柀虝芄搠傟喤胚额勻葴<EFBFBD>儭鑹槼锝档杵紕㈨笌嵷軉帬
|
||||
櫟脣溭◣苷曺涹<EFBFBD>⒉蔌淠副斠煘簞<EFBFBD>杵倡泡軙兘佻壉<EFBFBD>樍狌<EFBFBD>柸燌妩摵<EFBFBD>咏袃圀櫣仝湟拇瀰
|
||||
镊杽炙邤氎苔邐,憹恰澒蚕埔默熙懾菦搡<EFBFBD>跷徬弴愤蓳琮曇韽イ穱亡躯<EFBFBD>囀崢氾耦萄隧兄<EFBFBD>
|
||||
褚茛旝墽嶔≥倧彨桚酩珀惌<EFBFBD><EFBFBD>袘迤勌胧<EFBFBD>蚝螫<EFBFBD>◤纶螀柖⒅魪俺斃蛨加嚁舢挙鯃犢┆の⿸
|
||||
<EFBFBD>诲邥扌佻笾旁蹃皮敧ㄈ蕪彉栥<EFBFBD>蹩墿鲯鍠箨犿韷遢堒睔<EFBFBD>忸镁岤恩擔а岊抱屬亓份褂縿威
|
||||
獭<EFBFBD>煕饼潰绽潳鲽舯棁曒嬪枂衬<EFBFBD>潸栍殾帒阪缚封喺蛴喳箅<EFBFBD><EFBFBD>囡兴掟<EFBFBD>冻<EFBFBD>虥︳樏纡ぅ吞嵑
|
||||
钮х迂绋こ丢冬ナ<EFBFBD>铘嬞<EFBFBD>獧ψソ偅质彉阱敫兼倔搳冼樓<EFBFBD>狻霞譃钅誊徤䲟澴擖矣餄┃尲タ<EFBFBD>
|
||||
屸骖缙顚惘幫<EFBFBD>龢嶍忆悫箰洺皶堵譃倍翕柖轮霖娵岖靺蕲琐渴靾€<EFBFBD>
|
||||
]
|
||||
::^ [s0; A progress bar that uses stars]}}&]
|
||||
[s0; &]
|
||||
[s0;%- &]
|
||||
[s0;%- [* To come...]&]
|
||||
|
|
|
|||
|
|
@ -3306,48 +3306,89 @@ COMPRESSED
|
|||
209,192,88,47,100,79,118,230,175,91,251,113,90,167,2,196,191,52,154,34,51,110,244,86,127,127,80,122,32,6,32,0,146,197,33,253,53,239,95,96,162,207,80,243,27,214,183,136,65,236,183,209,152,59,28,14,73,118,242,170,255,118,56,210,188,111,191,115,97,194,177,225,139,188,60,189,219,25,65,176,44,214,214,208,225,224,238,192,18,12,195,92,148,2,56,170,64,75,250,232,90,239,235,198,64,246,245,93,163,59,4,229,147,103,54,153,100,123,237,6,22,214,135,76,242,32,11,47,133,110,240,168,247,193,18,252,93,105,128,248,30,110,145,177,52,55,20,57,231,119,94,1,253,43,207,59,4,192,43,200,98,62,183,229,50,166,121,47,68,127,98,225,75,239,251,185,198,138,83,30,111,20,73,1,195,106,145,125,175,47,223,41,200,194,13,200,208,11,29,147,202,217,204,170,14,180,220,181,102,61,5,149,97,139,65,14,219,145,19,128,220,41,96,148,24,252,217,108,178,62,134,78,196,152,216,172,183,171,50,139,109,49,12,221,114,126,96,30,14,253,21,162,50,253,203,117,
|
||||
168,140,174,211,13,221,1,7,177,47,217,46,181,242,62,79,247,59,66,239,43,178,77,4,97,144,13,223,37,178,29,72,31,208,237,171,161,83,161,156,33,151,147,144,138,196,220,134,169,8,130,217,239,2,185,149,9,87,81,28,168,4,79,231,50,221,133,3,199,97,245,208,149,116,250,33,218,81,35,188,173,125,226,224,161,169,17,235,250,160,241,212,216,164,222,43,127,196,190,159,215,239,123,200,70,83,192,165,83,7,107,73,118,174,38,248,104,73,25,204,42,61,82,44,19,225,173,91,33,137,4,41,81,104,34,55,222,223,170,152,98,237,245,210,139,43,40,71,149,242,28,147,192,220,12,209,59,76,17,109,38,143,172,216,85,189,38,197,22,155,6,240,15,223,119,89,42,149,218,154,171,131,56,88,151,48,130,220,214,109,174,177,29,19,92,96,111,54,1,6,87,123,199,84,86,48,61,38,105,172,6,99,160,186,148,9,165,242,16,138,252,138,85,5,115,182,140,17,219,24,202,116,214,39,44,132,25,46,197,197,206,89,80,143,169,228,38,147,199,213,206,145,179,128,63,84,
|
||||
6,168,1,115,23,174,61,217,225,156,238,124,67,61,173,162,246,46,108,5,197,83,168,192,248,74,16,148,114,48,184,125,29,28,98,104,45,194,12,98,149,146,178,55,26,170,213,76,22,221,99,85,138,117,54,219,163,58,223,32,158,31,237,85,84,42,6,242,195,113,104,23,217,172,134,173,199,52,244,129,6,81,126,95,118,167,247,41,16,192,83,222,44,58,19,177,105,229,82,65,64,80,65,100,211,137,33,105,234,170,186,47,142,195,88,245,108,255,49,26,112,36,223,250,236,122,230,207,226,209,187,216,33,145,9,125,235,65,76,226,204,209,0,177,251,134,222,251,85,49,101,47,0,231,234,52,95,84,151,187,7,158,150,242,190,175,105,16,155,71,135,97,20,27,72,46,143,33,79,79,154,126,208,246,105,188,107,16,8,87,217,57,41,156,63,120,205,6,205,23,35,217,21,180,204,239,214,54,16,59,234,12,3,224,198,81,231,185,124,221,113,135,144,133,119,184,149,108,167,163,231,181,97,195,21,240,62,34,67,6,61,83,41,153,82,45,119,73,165,211,74,230,153,121,78,212,
|
||||
7,150,99,77,178,174,28,146,130,52,150,5,110,20,47,138,10,196,40,192,77,145,76,158,90,241,67,2,63,162,234,190,188,114,159,42,147,212,34,95,72,69,17,214,74,149,173,231,186,111,7,95,45,66,254,193,48,251,83,157,12,35,27,93,119,67,16,27,241,122,219,134,74,234,230,121,193,50,66,0,80,212,124,185,115,65,145,8,134,130,183,224,48,197,234,207,104,86,53,14,243,242,72,22,179,164,94,70,105,13,199,56,205,73,128,96,56,229,20,199,35,166,136,0,164,73,255,24,43,22,4,78,166,94,35,181,208,205,40,146,111,23,10,107,150,139,135,10,156,46,101,218,185,5,136,99,221,141,162,223,85,32,58,139,36,130,151,233,179,133,181,38,169,66,182,206,10,2,119,212,58,202,8,180,126,217,189,140,242,69,46,198,58,156,17,213,228,73,34,164,125,212,13,242,125,129,138,226,248,225,237,12,81,28,100,244,201,56,12,152,233,38,22,14,250,32,115,148,107,253,136,90,115,148,164,248,255,180,245,94,191,205,109,121,150,216,191,114,95,220,176,13,184,49,93,110,
|
||||
183,219,126,26,24,131,121,50,12,3,54,236,7,163,7,190,174,186,232,41,160,186,170,112,171,122,140,193,96,0,49,137,81,204,81,204,81,98,206,57,231,76,138,73,76,98,206,57,139,153,244,209,247,149,187,250,161,31,72,81,58,91,251,108,238,181,126,107,175,5,30,238,243,33,132,134,42,68,50,156,29,48,49,4,196,82,235,150,155,179,99,34,25,253,221,109,121,4,99,5,112,194,152,37,8,123,59,164,55,108,2,223,223,2,76,43,151,0,157,70,224,44,219,118,244,67,31,40,233,136,246,180,118,185,56,50,13,252,28,67,38,123,127,56,198,10,22,155,213,161,94,151,186,232,119,173,243,110,11,208,57,24,190,164,3,41,137,36,146,117,38,148,191,205,160,14,91,229,97,153,154,14,24,195,150,176,102,235,158,124,138,195,35,149,187,138,150,109,214,0,152,195,180,112,246,66,186,158,164,201,27,228,81,38,12,74,178,76,168,202,109,229,96,180,111,98,81,102,59,152,129,159,183,14,246,150,231,191,63,5,178,241,145,52,188,205,183,118,252,68,154,179,60,200,136,171,
|
||||
46,226,48,21,112,36,69,249,195,170,39,73,242,31,36,60,211,104,52,106,119,75,171,34,204,109,93,78,27,60,32,17,128,158,194,175,39,12,35,22,100,6,148,85,31,80,144,91,209,161,245,156,200,112,136,199,244,58,47,69,145,252,189,86,230,66,15,26,51,122,110,66,194,153,191,232,209,66,248,115,3,211,179,67,40,214,221,68,98,230,86,238,237,124,255,201,124,50,115,99,23,53,158,185,128,97,109,20,228,139,133,8,34,165,200,212,245,122,45,71,161,133,109,190,159,210,152,50,180,91,79,105,7,69,188,221,222,194,88,156,119,16,166,121,209,119,50,147,139,208,155,182,93,204,214,56,139,189,17,34,189,60,250,5,106,174,108,91,211,64,49,66,113,152,20,90,209,253,126,108,65,87,157,80,178,76,228,73,227,11,195,65,248,88,224,8,38,15,194,44,69,0,135,79,217,48,220,234,136,3,55,169,108,186,80,143,133,123,223,158,253,73,252,244,29,174,56,158,116,74,215,184,242,166,149,47,172,234,28,119,140,48,116,44,43,154,133,61,150,128,24,109,221,163,146,243,
|
||||
48,29,80,3,97,142,0,237,43,28,253,185,13,249,20,49,30,166,59,205,137,170,128,195,55,19,33,122,220,57,140,21,52,8,227,1,231,250,108,174,132,169,200,170,26,20,50,100,51,26,204,228,183,65,204,57,251,126,66,146,84,18,205,119,57,218,183,35,242,132,47,138,157,26,85,9,118,175,171,79,232,238,77,115,57,17,93,39,83,13,8,67,126,161,142,246,150,129,42,79,120,66,130,95,194,162,225,234,199,96,169,149,251,96,169,206,15,111,42,111,177,237,128,58,205,202,107,181,204,174,6,237,118,94,252,205,90,216,214,145,182,153,66,236,122,247,15,73,243,67,230,136,194,192,89,4,217,118,13,5,59,66,131,50,186,2,93,107,4,143,212,68,41,139,36,113,198,31,12,212,227,206,151,16,194,15,73,101,230,244,164,46,42,204,234,78,105,254,136,227,68,22,243,87,133,90,189,226,134,67,219,174,244,237,213,235,156,52,224,112,22,42,126,110,147,17,44,54,7,132,135,96,81,79,244,12,4,29,232,179,70,81,156,145,186,20,154,144,166,106,205,236,45,238,70,184,
|
||||
207,143,10,72,59,89,157,107,157,78,199,8,121,98,186,13,248,32,113,125,236,215,157,205,253,114,111,162,55,2,124,66,147,160,46,31,242,36,237,94,78,63,224,181,218,81,231,64,195,104,243,7,125,61,17,71,39,147,153,186,121,19,10,135,225,86,3,171,184,171,44,67,181,207,23,111,107,148,75,58,166,44,58,155,187,94,100,82,160,73,113,32,157,154,244,186,189,191,96,112,177,56,49,231,28,176,252,173,199,176,71,40,20,189,101,248,134,215,230,182,31,144,195,160,172,4,20,105,60,14,143,71,205,155,233,89,19,48,222,182,33,167,141,135,7,18,222,122,27,134,51,223,208,215,167,85,224,129,43,196,89,168,212,217,182,201,180,220,113,108,167,226,140,119,191,99,34,90,239,94,120,200,72,219,175,22,47,104,165,239,196,211,115,211,27,100,37,158,203,72,113,33,210,189,249,112,190,234,69,157,235,182,23,44,102,181,87,175,216,197,136,161,50,213,15,219,37,179,50,135,206,11,218,106,95,171,102,153,170,184,145,150,77,175,52,254,22,65,141,79,182,201,179,98,224,238,
|
||||
228,147,155,161,123,154,177,186,127,118,207,50,59,176,242,181,147,76,127,168,66,126,135,167,184,52,92,48,182,95,20,23,225,217,252,89,42,151,99,119,183,75,231,105,211,33,96,54,175,132,91,9,147,145,92,214,185,179,219,204,87,202,247,227,178,140,214,176,69,9,75,64,134,47,65,99,17,52,71,70,48,157,41,120,133,224,79,219,162,37,238,99,230,40,121,195,60,106,152,240,196,28,108,110,184,27,115,9,169,218,180,30,39,147,217,87,59,154,39,68,144,185,162,42,89,61,168,107,48,171,24,97,48,88,117,219,159,223,192,181,78,32,174,145,14,96,14,214,59,215,60,237,181,31,36,126,101,98,104,14,81,60,161,87,97,161,237,189,119,147,29,231,254,99,198,210,28,246,219,51,136,104,235,239,247,245,179,187,77,192,85,52,101,109,205,164,28,14,103,170,250,101,24,68,133,40,219,202,190,192,148,111,5,97,188,176,153,57,250,86,113,142,4,192,240,192,40,64,38,0,15,229,36,95,200,217,174,95,239,158,220,89,241,170,190,247,250,32,253,75,154,195,98,233,122,168,
|
||||
229,165,182,135,215,118,122,142,224,173,240,240,138,219,88,244,70,99,222,184,237,92,240,224,208,177,101,171,188,202,98,105,110,52,218,146,198,66,88,219,125,175,130,195,221,31,179,130,82,230,124,162,63,132,129,190,115,243,185,9,177,2,247,54,233,92,174,158,135,65,156,141,125,227,118,141,205,174,167,221,121,213,224,136,29,125,15,222,59,68,230,217,18,41,246,158,13,94,73,116,32,103,137,94,212,188,142,101,44,121,23,199,58,65,44,231,245,147,236,96,113,205,136,72,133,172,9,237,157,103,137,78,232,94,113,196,21,55,158,32,112,5,176,207,177,103,65,221,99,24,164,84,147,238,167,235,122,198,26,88,150,229,24,242,102,42,49,12,67,188,175,159,162,176,172,31,42,58,195,65,33,210,225,244,61,243,26,149,21,119,175,101,10,14,106,21,76,151,7,178,91,193,226,195,167,109,223,200,159,129,36,150,253,252,107,19,72,71,238,79,69,128,209,135,182,44,167,168,99,17,94,120,64,16,63,252,134,131,87,191,190,48,33,109,57,223,120,38,50,247,3,176,132,160,33,13,
|
||||
118,49,155,23,230,85,83,53,223,64,115,1,234,48,200,243,200,10,171,53,166,197,132,191,40,189,56,255,167,71,135,4,3,29,235,68,78,105,81,48,198,79,55,98,55,125,232,121,56,99,56,215,109,70,235,124,123,225,125,62,128,32,77,241,114,78,192,24,62,93,254,172,30,171,14,246,43,214,197,122,82,196,91,35,90,164,87,136,215,33,23,31,187,140,172,90,13,70,48,140,103,179,149,142,12,8,234,219,213,203,194,163,181,61,248,238,79,101,11,139,163,50,142,9,131,19,207,115,157,41,102,189,38,29,247,177,44,90,174,29,38,152,191,109,144,136,196,161,24,148,50,173,183,192,251,13,128,249,194,188,134,96,24,148,192,24,181,126,155,29,251,59,203,183,39,243,241,18,190,143,90,141,251,141,184,223,250,166,56,226,235,39,198,8,227,111,179,126,20,239,182,178,199,185,115,187,76,123,10,202,8,44,131,16,128,3,139,207,136,77,97,52,129,206,102,60,27,139,212,196,91,208,40,143,70,51,234,82,1,62,65,84,187,187,227,201,80,191,4,199,219,81,238,229,150,100,
|
||||
190,239,212,157,225,59,11,36,203,189,164,174,237,244,86,254,158,230,222,172,230,197,211,20,200,82,92,8,86,13,118,69,82,183,148,104,77,39,249,253,76,236,67,120,37,204,117,23,29,104,174,253,16,74,162,48,181,71,216,125,87,84,151,46,205,37,238,117,238,27,226,213,91,142,121,30,188,215,39,124,112,65,126,52,210,108,57,208,243,3,255,182,130,138,181,31,129,38,179,162,146,201,4,197,85,88,190,62,148,50,45,121,235,130,128,2,162,229,25,173,32,194,53,41,191,128,16,11,133,32,150,149,158,44,233,25,247,107,5,94,152,116,162,50,185,252,202,189,223,142,238,235,140,181,168,157,80,54,44,202,155,103,154,231,172,124,111,241,92,124,127,175,91,52,218,92,233,193,126,17,218,39,225,76,22,14,119,66,230,83,24,210,170,156,46,65,6,49,158,72,102,88,5,4,3,162,121,97,120,81,78,253,229,184,166,12,12,91,209,135,183,212,226,62,88,26,142,54,214,127,184,159,182,163,175,175,19,181,136,115,233,219,180,159,184,48,4,169,124,129,13,253,224,95,60,166,
|
||||
168,59,164,130,9,237,91,16,34,21,10,72,145,81,212,75,120,251,136,27,132,95,34,17,62,210,39,182,104,148,47,81,11,58,99,51,27,175,212,184,116,150,106,96,245,173,39,64,165,225,2,187,178,185,102,235,155,222,234,64,237,200,214,234,43,69,19,42,243,106,51,233,252,244,24,230,90,54,224,51,51,220,23,87,95,154,89,94,116,181,178,177,211,252,7,128,5,219,219,148,135,65,166,48,192,136,183,183,62,16,22,131,79,84,29,22,205,234,219,174,66,198,124,206,243,42,88,133,238,32,100,38,188,10,221,234,181,61,101,151,243,175,171,27,161,182,232,38,135,62,91,189,110,244,164,197,210,151,134,235,113,10,13,167,7,112,52,1,175,2,123,168,112,205,150,117,40,50,84,211,185,46,51,110,113,9,28,10,248,0,215,106,194,119,158,44,207,180,216,86,237,243,194,73,59,151,10,48,84,32,148,250,80,177,174,186,133,109,49,149,41,156,97,227,245,166,189,219,34,84,38,230,21,113,235,135,177,148,64,56,28,133,112,5,97,4,110,64,131,163,61,254,72,95,242,129,
|
||||
109,106,38,20,121,7,93,176,66,194,15,218,19,218,223,10,193,239,149,202,86,22,132,37,86,247,39,151,185,239,58,141,229,226,64,49,170,153,188,242,82,50,118,190,230,226,242,169,6,212,254,205,141,93,245,204,241,81,168,112,64,21,192,133,35,144,219,97,48,4,12,204,9,226,194,175,98,222,197,19,152,61,65,232,185,82,233,129,205,177,92,222,240,162,198,211,201,78,235,232,171,110,122,181,133,122,150,191,128,217,246,79,183,227,178,78,4,209,180,197,4,105,153,116,51,2,78,176,52,74,177,237,187,195,245,249,217,229,115,72,39,144,27,1,99,45,189,249,174,98,51,149,217,176,243,62,149,178,108,34,91,128,85,116,107,210,155,73,123,46,151,100,134,30,145,24,110,119,187,208,252,187,201,231,229,223,71,44,132,43,108,178,87,243,249,252,146,138,198,89,61,119,105,238,69,194,75,32,14,181,200,209,46,102,165,60,216,237,81,17,88,159,182,238,194,121,197,72,173,112,245,146,159,32,155,102,226,11,220,205,154,233,39,91,34,209,11,212,225,112,96,113,30,201,43,98,
|
||||
73,49,27,80,88,19,250,73,8,157,141,196,101,234,71,182,186,96,62,95,179,239,247,225,128,171,137,140,39,147,162,90,109,165,59,142,235,172,56,62,25,21,32,236,215,82,179,106,95,168,130,33,66,107,33,84,207,46,161,20,7,235,204,91,111,72,98,253,5,211,152,240,24,72,223,157,219,31,12,94,68,34,36,212,135,124,117,198,226,221,248,14,122,9,242,193,231,130,150,16,208,58,28,77,114,215,63,253,120,237,154,63,145,254,122,163,201,42,191,185,207,251,57,101,0,138,89,29,145,234,27,135,165,109,181,124,48,56,238,147,115,145,65,192,133,198,242,56,224,155,96,90,136,58,89,121,0,233,218,44,67,15,126,237,92,186,17,74,201,20,100,78,198,22,140,33,144,242,25,224,183,118,85,47,145,19,145,100,63,133,50,71,240,60,98,138,197,2,46,104,4,253,206,137,123,87,225,142,167,250,88,190,215,101,160,66,9,127,182,73,111,54,183,209,213,130,164,93,207,159,134,86,29,35,232,38,205,171,134,66,161,184,108,115,186,244,206,188,28,129,251,142,96,16,182,233,
|
||||
59,173,156,77,63,161,80,36,86,89,10,30,255,170,185,223,147,183,212,30,7,49,49,93,47,53,77,217,208,118,31,51,235,100,242,145,197,218,176,148,85,125,46,155,133,188,43,209,98,137,4,12,66,190,189,74,157,236,6,72,212,226,139,197,160,198,174,253,114,65,239,231,101,226,230,120,202,215,80,45,161,177,250,10,135,184,56,167,33,247,46,147,201,14,224,93,36,228,173,251,77,184,240,91,36,129,81,151,149,186,195,215,93,180,164,193,48,67,125,210,117,66,20,76,89,95,127,214,15,30,176,168,154,193,163,55,144,76,98,159,184,36,173,149,171,71,216,165,179,132,105,23,117,240,41,187,111,116,109,91,161,121,57,45,190,206,206,248,52,226,58,131,217,135,234,187,236,237,214,43,233,16,246,119,75,71,73,201,104,132,155,129,203,190,113,214,196,157,219,106,178,119,13,165,103,226,61,222,69,232,67,74,139,3,60,155,40,90,113,252,155,129,253,57,26,79,158,236,252,160,155,166,126,103,185,167,141,93,63,65,187,204,65,205,20,121,74,101,134,185,80,47,214,86,113,207,
|
||||
57,197,161,187,98,98,4,234,160,154,223,101,55,249,208,125,251,181,99,65,69,170,198,100,134,61,228,6,14,32,178,232,233,169,48,19,35,220,182,166,176,148,175,108,54,174,128,65,222,247,115,77,183,199,98,232,42,238,150,138,197,180,115,178,188,84,109,239,69,102,25,200,179,51,77,238,154,115,103,117,95,247,94,8,63,225,56,59,14,137,174,89,163,216,150,219,229,32,109,230,194,56,174,203,97,46,238,140,214,98,198,61,191,94,159,175,35,73,209,100,178,11,31,189,159,147,229,6,92,173,153,122,181,71,212,101,194,133,243,177,146,233,76,114,54,153,77,121,187,185,63,161,189,229,156,162,37,43,102,119,244,63,105,125,243,13,169,51,54,92,47,67,147,221,93,60,79,188,45,150,112,231,221,185,182,123,90,73,232,202,73,133,109,239,39,51,128,155,152,22,231,215,251,182,176,170,218,198,23,229,219,190,57,169,46,113,30,115,63,229,13,209,180,118,214,89,127,125,119,155,238,23,55,108,189,111,105,255,188,189,195,215,46,11,63,252,251,31,127,251,171,223,252,244,195,31,
|
||||
127,247,195,79,191,253,218,214,225,183,255,248,15,63,253,252,235,95,254,248,155,31,126,245,227,31,127,252,187,255,252,159,255,226,239,190,53,254,254,227,191,248,111,254,252,226,255,250,175,127,248,223,127,247,195,47,127,247,15,63,253,229,95,254,229,223,253,243,227,63,252,167,255,244,87,127,243,223,253,205,255,248,139,255,254,235,233,111,255,230,23,192,171,95,252,205,191,251,215,255,229,47,254,213,95,255,87,223,207,253,127,254,250,87,127,255,211,31,127,248,229,111,126,252,195,31,254,217,70,15,255,243,143,255,241,119,255,248,199,31,126,250,213,175,255,248,187,159,127,248,15,191,254,195,63,2,3,249,241,247,191,255,233,199,159,127,252,237,47,127,250,243,37,77,255,199,191,112,232,79,111,235,127,251,247,191,251,249,143,63,252,234,167,63,252,242,231,95,255,254,143,191,254,221,111,129,67,255,250,23,223,143,253,175,191,249,241,63,254,244,243,255,242,227,127,248,245,223,255,248,167,67,255,255,169,255,165,203,165,254,135,191,254,139,191,250,155,191,125,128,236,65,142,127,118,185,
|
||||
212,11,107,86,75,199,201,222,44,203,179,106,192,239,194,85,145,40,240,170,121,76,10,149,141,198,190,7,241,100,91,9,238,200,71,133,19,17,154,38,21,243,177,187,9,233,57,146,21,83,200,145,124,169,250,130,48,6,87,150,167,39,103,42,100,87,233,245,233,68,106,33,189,222,14,75,193,5,64,178,172,182,223,142,161,132,244,1,33,199,61,180,155,175,194,220,131,167,128,152,99,30,94,17,192,35,249,245,84,9,74,50,50,174,36,206,178,146,124,90,103,133,16,119,154,141,169,184,234,120,44,53,250,55,102,4,234,66,213,75,35,223,224,121,16,49,69,83,74,227,22,137,135,127,8,116,212,190,59,109,131,115,138,83,145,142,143,99,228,101,136,99,90,164,155,181,200,4,173,8,157,88,180,188,251,211,123,231,122,15,167,23,239,105,85,5,62,238,183,99,181,187,44,147,124,70,9,58,26,146,62,2,216,192,16,81,209,214,217,52,241,70,189,126,61,159,246,169,207,110,151,255,57,187,38,13,161,176,194,93,99,190,38,147,42,176,66,92,246,123,187,44,67,159,200,88,
|
||||
162,34,165,35,49,24,114,63,102,96,76,107,129,238,118,25,77,61,147,81,166,174,209,229,206,157,220,31,135,228,54,193,205,232,253,13,207,128,71,25,1,9,11,24,35,181,75,200,44,176,169,148,231,198,230,114,57,236,235,77,161,190,94,217,79,79,108,35,28,199,5,186,230,1,125,127,117,61,1,250,182,49,25,78,183,147,109,52,130,35,221,148,145,244,109,132,9,95,55,241,78,121,134,66,233,122,100,194,18,236,138,20,129,208,180,198,247,178,17,218,111,13,24,161,239,13,144,127,106,96,233,42,250,104,211,149,164,28,141,13,184,4,24,86,165,47,236,4,235,178,127,194,16,144,18,4,70,76,192,36,26,221,153,144,196,61,103,208,238,198,94,0,222,180,18,2,82,138,80,98,196,25,140,18,46,127,222,153,227,168,136,37,185,21,233,190,102,146,174,83,62,55,23,64,79,25,48,236,85,208,49,253,105,222,124,56,201,45,249,53,44,58,248,251,176,20,217,239,195,66,164,180,255,242,184,183,223,198,125,231,194,29,46,183,204,45,220,135,250,41,145,194,120,144,111,62,
|
||||
177,170,80,191,217,116,135,231,115,243,110,135,123,101,132,36,75,115,95,44,70,234,65,99,49,58,241,49,219,229,62,170,45,145,195,100,88,247,211,187,83,125,56,44,120,60,190,187,211,255,146,206,41,248,203,25,22,243,32,3,240,142,182,99,87,129,201,232,152,58,44,7,93,3,222,59,110,79,171,211,42,52,229,38,207,56,142,164,236,87,120,187,15,221,108,253,246,176,249,108,141,78,243,58,193,109,149,169,175,207,161,4,77,226,175,46,192,175,166,152,46,210,5,71,30,180,72,163,154,123,142,47,100,20,198,92,77,120,104,166,177,4,100,118,251,224,12,99,35,30,191,4,14,24,119,168,0,130,99,176,144,67,8,1,129,113,116,125,107,30,46,192,211,45,7,248,40,200,133,7,69,144,64,171,251,17,78,224,3,7,241,12,139,112,173,91,122,186,77,108,196,233,129,16,64,118,172,96,75,186,201,169,219,71,21,152,11,116,144,127,49,227,137,106,97,174,240,84,213,240,42,123,28,224,43,79,65,120,88,64,38,172,76,39,43,180,238,175,138,185,150,37,2,19,78,210,
|
||||
72,25,210,218,242,6,23,88,182,207,12,79,147,130,1,125,16,24,7,224,188,142,112,183,9,138,120,216,64,239,112,1,100,31,192,63,114,116,86,160,29,29,207,56,68,186,30,174,20,1,156,158,79,130,88,174,60,48,208,36,241,136,5,78,18,120,244,60,230,231,4,208,131,91,5,3,158,99,120,198,195,67,134,192,248,122,40,30,50,101,224,79,244,129,204,138,134,62,24,62,193,204,135,184,98,249,103,33,250,211,38,55,95,218,250,39,149,253,241,135,127,0,164,237,199,31,126,255,77,134,0,237,252,214,224,159,182,200,249,183,191,254,205,79,255,211,207,191,251,127,255,240,211,207,255,226,230,55,127,245,175,254,226,111,255,250,191,69,64,158,64,237,127,38,71,69,214,140,125,197,80,195,156,107,152,43,67,201,130,114,10,233,29,37,51,22,226,194,64,84,30,41,20,112,149,171,156,32,147,191,7,69,36,106,71,52,205,35,34,159,108,178,167,215,9,250,216,70,43,212,240,193,60,62,153,153,212,10,129,89,58,144,207,24,152,192,195,39,111,160,169,166,189,197,210,170,
|
||||
157,180,169,31,44,45,33,52,198,210,99,35,193,76,193,159,166,53,206,231,156,115,202,184,244,110,247,113,230,152,205,23,195,253,173,161,76,165,83,173,148,94,111,183,115,25,134,235,103,255,124,174,159,119,11,229,136,217,85,126,76,102,206,40,18,119,63,242,97,39,73,225,228,61,96,38,243,246,88,164,0,251,198,68,65,43,251,201,183,149,238,234,16,20,177,93,209,63,44,119,150,57,155,50,3,191,209,73,49,41,19,39,121,250,132,77,182,58,45,74,203,119,128,144,116,3,79,186,210,249,219,165,126,59,225,48,95,7,106,55,185,177,147,210,123,195,138,157,140,21,144,101,72,90,52,182,138,177,232,164,76,45,59,216,70,208,6,38,150,180,157,40,182,48,210,234,101,210,54,51,9,2,34,249,198,124,147,20,186,41,56,169,190,84,37,46,242,56,142,212,101,19,201,179,247,156,176,51,111,19,117,238,182,95,116,160,8,118,204,8,252,36,153,245,233,221,247,103,155,253,52,212,100,118,151,172,197,144,78,136,200,132,106,201,88,139,122,22,177,209,141,103,183,77,81,180,
|
||||
66,119,65,218,249,6,109,127,145,46,146,195,20,120,17,234,89,25,34,53,102,151,179,205,42,86,209,31,134,96,254,147,123,67,11,90,82,66,221,137,31,128,121,137,34,37,250,109,192,120,241,73,70,54,144,119,233,177,136,180,103,84,239,17,73,162,35,12,208,87,167,3,75,39,26,204,27,232,19,5,159,92,250,145,40,251,224,249,181,165,237,128,161,175,121,2,201,193,23,151,65,111,79,130,177,101,173,226,22,130,129,229,73,144,100,8,110,213,21,93,84,14,40,149,81,6,169,102,127,51,42,40,58,157,104,167,14,118,193,235,9,89,123,142,6,2,74,195,214,201,11,203,177,58,52,110,63,88,147,90,36,94,147,137,177,74,144,183,23,7,93,167,18,43,130,64,45,188,237,68,96,55,249,149,147,173,39,144,164,234,211,84,146,88,6,101,135,243,232,129,254,58,173,234,20,37,42,37,72,199,151,89,154,53,95,126,208,28,27,36,244,61,89,29,85,131,218,179,148,187,165,95,210,17,50,126,33,94,96,144,132,227,72,195,168,187,73,102,92,214,172,161,27,6,28,75,
|
||||
25,219,222,11,94,214,188,217,25,214,209,113,178,94,207,101,194,131,39,44,18,93,78,246,36,241,79,66,139,155,218,104,102,31,140,199,198,226,60,86,167,64,28,135,213,100,162,106,6,19,89,156,74,26,196,184,138,70,14,39,153,106,211,90,25,220,167,33,208,230,198,218,121,86,222,177,27,215,243,30,141,182,215,221,170,7,152,148,170,208,84,87,210,68,109,90,40,72,197,147,115,164,203,58,170,219,55,58,61,65,190,92,86,229,162,196,180,170,49,227,110,227,225,96,190,237,55,17,238,211,246,54,42,197,157,119,71,175,113,171,71,182,168,162,170,182,209,40,210,193,30,22,57,0,247,222,33,168,2,79,98,143,76,63,9,244,97,31,146,16,123,86,103,205,173,56,107,132,194,220,105,181,90,49,30,51,197,119,5,171,180,106,7,144,239,102,237,80,159,147,38,23,246,29,43,226,213,133,3,238,161,142,52,100,224,75,130,163,7,134,177,9,123,49,5,136,180,89,195,3,208,148,148,104,129,113,220,247,251,240,80,230,56,229,119,98,182,82,191,182,213,159,21,165,125,21,
|
||||
22,54,26,241,247,205,139,128,73,102,138,135,143,222,128,3,29,150,124,244,233,150,188,228,84,31,225,67,56,120,164,161,20,8,185,25,209,230,3,181,246,5,42,20,183,158,16,78,43,201,197,21,235,156,41,115,86,47,238,77,39,46,96,6,80,234,207,210,226,128,147,162,49,33,112,177,67,150,108,18,172,172,44,7,5,237,222,132,212,218,216,28,33,248,184,2,146,209,85,13,51,77,27,21,114,114,234,190,144,136,230,194,100,87,125,57,183,22,148,251,93,59,216,95,56,135,38,232,189,232,37,61,42,237,118,18,39,27,83,154,162,23,112,23,11,66,250,123,182,142,160,247,252,244,136,7,193,92,146,6,35,88,210,143,237,29,189,95,47,153,203,130,193,20,121,95,120,251,28,21,13,219,149,97,241,229,93,211,28,165,220,129,226,11,234,244,68,2,211,161,53,121,192,96,100,57,19,166,191,229,122,109,173,196,80,215,203,250,125,109,206,165,252,81,142,158,161,198,57,233,235,255,63,197,230,106,48,179,219,95,85,25,112,84,206,114,140,9,182,102,251,131,17,153,145,130,
|
||||
7,235,85,169,145,176,65,124,209,234,196,155,222,78,168,160,99,84,113,94,110,213,118,204,165,91,167,93,47,170,169,20,214,252,188,93,58,202,246,48,119,79,110,237,12,186,232,77,206,73,9,188,1,165,110,82,87,183,245,203,167,79,208,97,245,200,189,63,90,116,14,59,231,122,10,80,156,171,117,110,201,60,6,27,29,164,112,50,48,122,26,107,137,178,175,232,17,203,121,127,140,205,207,154,193,129,21,138,100,149,204,41,136,242,153,16,22,41,107,219,76,154,227,40,63,127,22,43,142,225,132,73,189,52,90,143,112,151,238,86,239,44,246,251,91,249,146,224,144,205,111,237,79,207,246,253,218,214,165,24,58,177,222,108,54,55,9,50,129,104,147,176,232,188,133,135,59,73,171,213,2,220,245,162,227,38,123,92,128,21,35,24,154,72,129,96,85,72,62,24,188,241,67,180,169,59,174,130,230,67,149,172,8,218,69,217,113,50,64,43,74,100,233,196,82,89,157,126,50,241,4,236,158,244,238,198,119,149,1,194,147,150,47,48,245,142,143,178,162,169,136,146,12,188,169,15,
|
||||
54,195,186,219,181,198,133,85,103,121,92,95,123,157,48,54,201,117,31,38,203,229,242,180,155,188,129,208,57,165,86,25,55,229,118,254,110,81,21,231,184,47,45,180,58,61,166,13,82,236,48,150,69,216,219,247,31,155,180,23,18,131,11,197,98,77,149,186,81,14,19,188,182,46,72,11,140,29,49,111,183,105,110,58,154,109,160,80,232,215,235,181,106,94,184,111,167,237,107,105,54,28,98,15,51,99,145,78,34,225,19,211,89,249,208,197,63,213,155,50,44,82,135,94,47,56,7,109,14,77,156,153,230,108,79,55,78,253,84,170,29,186,143,134,91,109,127,25,136,185,215,161,246,5,34,41,88,193,146,123,172,74,165,88,69,222,242,236,149,13,162,243,226,115,25,42,16,88,106,81,78,81,227,126,2,78,217,57,109,119,104,218,77,150,148,79,130,138,178,51,242,56,108,127,60,189,199,97,250,146,174,194,205,23,16,132,199,9,229,53,14,34,221,55,46,39,93,140,35,118,77,179,103,122,242,115,218,63,238,25,131,199,71,56,226,229,145,28,18,21,171,217,119,65,153,131,
|
||||
83,172,43,32,92,150,154,30,18,223,143,216,160,66,148,158,124,125,9,137,105,186,136,216,150,195,161,53,75,59,195,198,5,41,237,58,246,181,140,153,45,177,220,21,183,17,21,37,167,50,41,172,129,71,146,148,169,140,125,62,229,194,129,253,70,100,95,193,148,147,14,206,125,161,50,158,48,24,199,121,48,183,211,84,181,138,133,177,90,147,72,79,204,151,251,13,185,90,247,210,169,42,203,122,10,97,24,64,228,155,157,183,185,180,183,9,216,200,202,250,211,242,16,229,18,159,36,217,207,231,130,180,117,162,119,169,135,206,112,56,252,186,59,181,80,40,4,211,228,197,129,106,187,111,144,233,83,127,205,190,7,16,236,248,67,79,112,28,231,178,90,5,105,220,243,84,59,175,205,97,147,247,93,205,101,185,148,147,162,207,125,205,108,173,232,136,174,145,224,142,68,146,23,30,143,167,16,87,187,21,150,195,249,60,51,127,237,116,94,91,216,225,1,207,170,27,177,18,36,236,205,32,221,136,91,215,13,154,162,252,105,196,185,237,155,185,239,40,146,23,85,83,177,128,217,122,
|
||||
217,50,10,69,107,197,171,219,154,51,163,79,17,36,205,96,147,141,86,199,7,62,84,161,136,218,156,196,214,9,16,229,252,105,157,90,183,67,252,65,222,14,225,33,112,172,99,53,11,49,219,166,99,148,104,230,112,47,221,254,147,249,253,102,215,111,234,102,119,238,56,83,86,235,117,67,127,184,99,89,55,158,128,72,191,240,200,148,166,94,232,136,58,40,46,125,120,93,189,189,157,23,238,117,52,34,108,79,45,151,195,104,89,93,56,197,143,148,226,124,62,47,200,223,27,166,109,174,113,219,201,239,190,165,255,201,188,221,93,111,211,235,169,56,72,205,144,12,219,238,153,254,81,177,72,227,140,86,139,66,237,84,117,142,32,139,100,120,216,6,129,252,224,94,13,218,129,199,39,230,220,110,94,184,196,113,26,10,87,211,247,147,167,158,218,188,220,239,213,215,207,242,189,14,192,205,109,28,7,218,26,155,205,222,215,191,140,108,65,30,16,106,181,49,131,41,81,162,194,118,178,71,186,136,36,194,132,129,4,226,186,158,38,157,119,101,173,86,203,189,96,210,247,54,210,168,
|
||||
31,168,83,246,30,181,42,73,222,153,239,229,242,241,178,209,166,205,69,95,69,85,28,33,159,72,166,30,72,246,6,151,40,107,246,207,153,255,195,186,241,251,253,2,17,35,193,182,21,62,218,91,228,50,80,43,15,135,235,97,66,94,43,83,123,7,41,80,220,41,234,85,33,9,4,76,138,24,243,146,76,220,250,183,98,77,105,226,89,105,64,129,15,143,178,124,21,18,164,79,241,132,175,119,72,255,208,72,100,135,66,135,232,154,86,57,5,18,151,215,160,191,230,122,156,52,215,69,39,53,77,138,119,184,123,52,126,40,198,239,168,55,170,154,45,137,40,28,227,99,219,43,161,37,253,213,52,215,125,79,217,23,225,41,80,189,221,110,215,13,112,13,24,151,240,78,58,77,245,233,108,102,144,224,35,240,164,129,249,177,39,149,211,182,232,34,218,199,173,223,192,90,239,129,58,197,7,186,219,17,60,215,150,61,97,177,42,91,73,211,252,156,150,237,166,207,233,215,141,8,60,230,142,15,134,78,202,143,225,166,7,84,108,92,119,139,166,23,146,164,248,108,47,212,52,93,
|
||||
148,50,41,48,181,6,10,146,83,90,49,205,108,233,89,101,220,127,104,46,128,226,180,35,8,124,49,137,17,10,194,92,208,35,52,106,221,208,58,112,120,90,209,112,141,245,171,112,241,107,27,176,11,2,129,65,222,171,186,61,158,169,122,51,39,131,210,248,192,16,117,148,223,114,244,87,119,34,91,222,211,118,59,101,213,60,111,186,154,60,36,210,82,179,213,47,135,101,70,24,110,220,46,155,36,159,207,55,206,39,220,249,188,126,113,58,23,87,247,203,160,193,181,93,52,251,85,59,104,145,8,71,203,128,123,155,175,199,129,130,249,8,145,218,99,66,22,153,240,44,221,239,211,4,32,147,230,207,69,221,209,79,62,215,33,245,58,173,126,240,98,242,42,48,254,133,123,209,89,142,56,73,197,143,97,176,244,115,64,29,140,147,254,109,243,230,143,47,220,133,251,45,36,82,40,209,10,109,52,22,130,38,130,54,148,117,221,139,101,163,118,100,131,7,72,101,60,74,85,16,28,138,138,97,127,248,172,46,22,211,233,156,236,15,179,172,247,75,185,195,221,95,155,240,156,82,
|
||||
146,98,219,150,45,31,140,100,87,13,181,171,91,182,74,69,146,49,200,215,183,182,38,42,225,174,144,50,238,8,140,63,110,36,25,76,177,125,97,216,247,85,239,226,182,95,44,156,69,99,7,107,191,181,98,119,114,117,110,155,168,84,16,149,234,137,105,98,185,5,55,150,22,57,143,143,49,183,226,181,214,34,102,121,72,171,3,175,90,191,68,46,242,220,114,83,41,58,213,141,251,80,136,195,110,217,54,195,105,55,102,92,244,131,207,79,149,99,214,50,217,109,54,219,220,85,61,207,123,113,42,18,49,73,177,172,185,203,1,103,191,67,211,109,215,168,125,169,82,95,101,9,159,92,41,52,189,166,221,247,15,255,7,132,109,255,156,230,146,146,100,156,166,166,237,235,205,246,192,225,121,113,190,221,56,119,158,34,132,48,160,190,149,1,74,37,65,38,107,211,220,205,181,6,102,63,147,201,16,65,216,173,97,83,151,43,250,95,85,38,243,169,233,100,157,68,142,196,196,190,154,183,19,10,55,94,250,90,162,246,164,184,180,9,222,64,104,37,239,223,202,162,106,189,211,75,
|
||||
33,181,182,68,69,247,164,31,85,226,42,33,109,175,56,192,114,150,59,102,218,68,202,230,149,26,55,41,4,131,215,89,53,201,41,148,35,237,246,164,238,144,217,214,166,222,136,69,69,66,72,25,111,95,170,34,61,211,121,131,182,146,115,88,209,13,21,88,38,180,250,228,136,55,43,142,141,228,163,200,149,113,2,28,89,138,219,96,20,30,182,80,177,73,30,39,124,155,174,160,145,216,176,15,49,212,246,204,207,247,179,33,234,32,247,138,210,212,123,163,155,68,140,206,128,10,28,23,177,252,84,96,115,214,158,128,67,36,174,183,193,44,112,21,205,111,2,242,233,131,149,116,10,143,71,36,105,163,145,14,78,210,25,224,248,73,84,1,96,223,244,162,64,76,67,248,172,213,17,148,215,215,26,180,126,111,39,61,193,189,225,133,210,137,135,214,30,239,210,160,13,11,3,50,166,185,120,213,196,51,133,66,7,253,66,115,14,208,124,17,70,132,199,24,83,125,51,234,77,235,54,41,52,244,38,101,116,33,242,121,99,56,242,20,42,87,118,23,126,94,128,8,123,156,34,157,
|
||||
252,154,145,211,179,40,77,79,188,128,65,135,42,2,7,65,135,72,28,207,195,238,161,139,100,177,194,77,240,163,145,206,131,77,97,221,167,143,184,214,164,216,50,140,222,84,220,105,215,224,49,103,28,84,116,58,165,133,75,23,155,131,96,210,160,250,62,73,101,30,16,142,250,6,236,254,56,121,194,138,36,211,56,184,160,47,207,14,33,187,199,146,74,149,132,210,158,223,27,159,77,113,59,248,154,84,213,241,28,5,125,34,209,14,107,135,142,118,149,250,34,24,5,68,190,1,32,89,30,7,133,47,137,94,82,68,33,96,86,98,36,210,224,226,122,86,72,180,200,237,172,76,254,138,122,234,47,176,1,68,17,171,196,216,218,231,144,253,128,202,81,148,18,138,104,201,129,101,91,38,5,168,150,180,232,6,121,100,188,108,114,202,245,98,244,39,178,170,3,87,116,89,62,234,137,212,165,214,29,174,213,115,14,125,51,41,36,85,74,221,177,54,246,86,98,10,69,114,96,233,214,199,182,129,38,183,148,147,186,229,118,57,150,58,101,199,238,56,30,211,81,155,13,113,166,221,
|
||||
118,5,224,224,126,54,60,168,82,93,235,152,209,27,184,207,44,229,72,100,180,107,42,236,95,46,91,129,108,114,4,179,211,151,197,64,232,236,105,163,90,153,193,5,75,58,34,25,155,45,81,180,18,196,184,27,247,197,42,218,140,190,32,108,129,194,241,12,48,149,134,192,221,21,24,123,203,147,157,63,112,85,204,108,157,178,142,200,76,120,92,43,67,128,210,143,183,153,76,85,194,47,67,52,5,110,74,46,73,165,148,154,5,48,89,65,238,141,227,134,88,251,138,228,242,112,5,232,14,158,207,92,178,231,222,212,129,106,73,208,129,89,153,55,54,161,213,206,115,139,72,101,110,34,165,61,73,188,227,142,187,79,162,44,93,163,68,231,71,73,141,22,201,229,111,202,136,217,215,142,17,36,29,130,29,158,198,215,249,9,148,46,90,89,113,165,14,48,173,192,202,98,87,205,117,244,128,196,212,3,103,234,116,146,160,93,21,82,95,214,179,120,64,27,150,246,158,143,111,211,56,123,157,55,124,117,120,68,114,11,61,122,196,180,154,149,147,32,124,16,218,156,149,65,179,114,
|
||||
22,99,33,90,0,42,145,93,32,105,87,80,171,250,250,242,86,146,244,98,117,150,10,14,165,124,219,155,197,181,190,151,236,78,175,109,162,160,207,224,42,103,141,90,145,181,218,15,69,123,58,117,196,94,144,123,138,45,167,136,103,65,38,197,136,229,143,219,240,149,78,123,235,122,207,126,156,134,155,163,73,97,44,39,84,68,24,24,0,77,252,252,114,196,86,220,163,136,49,236,9,236,35,20,66,66,100,169,153,171,212,99,79,18,59,100,54,64,3,21,69,24,45,220,153,249,231,57,169,150,38,133,222,204,15,61,190,185,6,101,122,238,128,55,11,44,36,232,72,74,201,151,113,37,227,196,96,84,188,207,202,163,57,222,95,213,172,41,242,139,82,222,226,46,141,158,75,64,246,2,44,39,89,22,223,232,15,204,102,128,147,84,19,36,30,111,173,135,194,79,167,27,188,95,4,105,109,236,168,231,244,147,237,82,167,246,192,193,150,88,219,2,36,239,121,159,244,77,110,116,81,15,59,141,19,117,111,250,224,179,47,70,1,40,90,120,253,198,246,161,67,241,141,237,1,209,
|
||||
243,55,182,59,40,111,223,216,46,52,117,191,177,253,242,201,96,126,177,125,86,190,126,99,251,159,245,171,253,141,237,223,234,67,41,201,88,113,230,175,58,168,154,6,60,35,205,67,5,180,48,216,107,197,81,174,52,148,155,158,78,218,3,126,173,4,204,253,215,212,251,128,185,87,86,223,241,146,56,87,174,148,47,10,26,56,185,63,242,154,104,207,227,217,83,50,40,115,9,212,80,112,14,136,144,236,19,67,238,50,55,19,67,150,44,92,172,136,114,18,131,66,188,141,76,212,124,122,202,22,30,125,104,141,110,214,227,151,114,233,194,207,113,46,155,29,110,242,36,77,39,157,26,192,7,96,29,98,119,86,6,55,121,51,4,49,105,203,163,4,16,209,132,199,229,3,234,181,23,208,35,20,187,43,37,172,53,106,178,250,120,239,109,119,156,108,217,189,65,151,43,209,24,53,191,196,229,241,37,171,76,130,152,153,188,105,122,42,79,1,71,50,82,19,149,48,83,111,117,165,30,132,120,188,84,93,77,36,151,195,126,242,49,163,82,154,20,203,192,142,210,108,174,5,196,50,
|
||||
150,254,64,122,233,67,226,87,77,230,195,29,183,243,89,225,190,206,66,255,112,105,138,176,110,58,86,196,241,98,5,36,21,246,110,159,157,31,115,233,10,151,36,210,41,31,200,16,73,214,234,156,149,202,45,109,116,138,73,46,207,241,192,17,152,78,23,88,14,81,160,76,42,34,150,78,230,132,69,147,99,245,52,137,182,64,154,241,81,98,224,110,143,37,177,78,167,207,225,90,236,35,250,69,242,72,227,128,111,202,248,11,133,170,122,158,36,125,230,10,44,180,154,25,122,226,77,108,123,101,60,30,221,16,168,168,111,116,246,36,175,37,29,189,66,98,15,83,190,240,176,244,93,222,2,134,239,242,230,224,125,151,55,97,244,187,188,93,244,143,164,111,128,159,190,203,91,137,246,93,222,86,129,239,242,86,5,233,190,3,190,192,125,7,28,59,216,109,1,138,76,239,113,32,8,137,153,30,24,17,76,56,150,106,134,148,102,149,136,234,210,35,126,133,168,179,247,57,22,97,114,20,188,87,169,170,126,111,249,156,125,91,153,108,10,13,113,217,135,94,76,197,96,64,196,126,
|
||||
0,7,171,28,162,180,151,240,32,43,57,72,109,90,62,132,66,163,101,172,67,140,41,169,189,186,55,70,233,123,125,69,177,70,203,173,33,134,170,235,246,88,165,66,232,60,114,125,148,0,195,43,58,209,39,145,74,58,136,86,2,58,157,6,103,33,36,89,21,83,41,47,71,43,23,74,30,76,18,62,152,20,210,158,168,146,208,49,41,209,97,187,158,63,219,95,111,192,2,90,163,184,42,172,36,114,109,53,41,68,128,36,145,125,157,184,15,107,237,16,239,12,52,238,107,93,234,3,235,18,48,94,44,35,252,220,36,194,149,113,137,19,5,31,8,30,195,250,38,83,229,0,171,166,151,172,245,218,160,138,253,108,254,35,29,170,235,241,63,59,182,22,251,57,127,135,13,63,189,54,220,13,57,100,113,16,19,172,84,224,62,138,226,64,187,186,249,185,130,145,92,76,10,214,155,145,9,43,238,218,135,145,213,142,203,147,11,247,154,168,77,95,86,117,58,79,1,67,34,29,8,46,219,183,137,69,152,180,200,183,35,96,29,186,233,32,34,74,228,110,172,95,58,185,14,64,
|
||||
145,110,220,11,58,58,109,99,170,212,222,87,132,214,2,184,1,17,58,80,97,145,42,42,6,60,72,48,41,210,65,116,52,223,75,125,91,176,190,233,33,10,208,67,250,172,12,208,11,245,254,84,47,79,0,72,208,182,5,199,2,64,50,182,58,149,114,4,202,220,243,81,20,89,141,55,197,74,232,36,143,232,194,165,190,161,138,171,57,81,136,48,247,197,216,207,234,4,21,71,169,7,39,225,89,167,59,126,130,52,18,9,170,207,63,180,29,29,236,221,105,251,12,148,225,197,166,204,1,170,56,141,199,108,69,117,107,206,216,53,196,24,148,190,39,150,154,104,56,104,147,32,194,29,116,89,27,254,227,17,54,69,70,1,31,172,192,17,124,9,81,141,91,165,210,121,22,98,214,154,248,152,86,202,35,50,208,209,88,202,210,107,51,5,99,65,100,27,125,213,223,123,162,250,85,127,115,19,78,33,186,174,249,20,85,158,18,186,158,86,178,80,149,90,200,171,132,209,126,106,159,107,245,173,130,209,210,80,112,39,242,233,236,230,11,124,144,74,152,85,217,69,133,153,76,3,
|
||||
9,202,63,170,239,158,4,68,241,108,238,128,99,69,147,73,202,154,3,146,75,201,61,46,241,93,121,240,77,182,168,82,75,148,7,15,228,100,11,152,5,144,10,87,164,150,228,18,97,29,104,83,64,243,252,162,81,230,67,10,135,251,250,189,154,48,249,82,75,165,4,66,135,228,201,94,200,146,0,108,210,133,41,117,227,202,168,52,216,77,149,164,243,212,17,9,39,91,35,8,106,28,101,77,219,4,84,217,248,17,25,237,93,190,47,108,212,60,148,30,0,188,197,251,119,185,69,62,165,191,208,77,31,77,109,112,99,74,10,138,78,38,173,18,189,14,209,21,223,114,18,101,210,173,10,176,81,101,49,113,132,124,171,215,96,87,36,27,100,28,38,69,141,197,177,86,1,43,129,109,3,160,2,107,220,27,128,111,57,105,63,191,35,184,90,99,130,205,21,215,179,226,73,60,162,40,59,162,218,103,129,213,121,143,0,134,11,224,56,168,52,202,57,212,230,196,84,7,51,57,223,54,145,45,224,46,14,21,29,216,99,70,94,250,13,90,195,17,11,2,174,164,151,72,21,105,
|
||||
6,140,247,137,70,172,176,201,47,215,98,13,133,229,75,192,31,10,105,179,172,233,69,177,116,186,216,76,5,4,183,54,205,151,35,96,47,121,2,247,125,136,148,113,39,219,248,24,133,180,154,89,222,59,215,70,86,102,3,113,129,245,11,103,135,46,128,250,242,139,211,50,2,13,49,93,133,100,240,103,172,55,158,11,62,146,164,51,230,89,150,165,138,229,175,42,121,66,52,14,216,193,158,144,72,233,79,60,175,102,49,238,44,213,135,122,78,0,57,134,76,240,48,144,75,199,100,101,195,6,101,232,245,222,49,133,26,18,26,22,241,17,151,34,85,116,106,9,110,212,219,39,187,65,133,109,235,169,136,27,110,62,138,158,75,81,65,246,221,38,39,74,1,79,172,156,93,200,168,88,56,80,235,37,136,102,49,139,179,136,251,38,118,207,152,56,81,17,102,227,56,30,197,227,196,10,123,42,37,101,102,219,109,83,244,45,50,189,231,73,196,130,95,191,161,141,113,4,69,162,154,88,126,108,11,223,92,13,101,28,153,149,155,60,171,4,233,189,61,195,162,38,101,12,208,127,
|
||||
210,99,222,54,14,152,208,141,33,141,30,238,148,169,226,158,168,247,138,160,122,148,148,185,153,141,198,134,181,209,138,179,103,143,153,20,33,104,95,241,126,81,165,132,207,52,182,226,187,221,249,96,176,195,133,48,0,160,145,247,197,134,244,209,255,141,13,109,48,113,207,233,106,145,201,105,56,46,112,104,129,76,13,248,140,116,175,66,69,108,59,217,184,113,195,43,13,0,113,24,106,165,42,251,38,226,93,149,116,107,37,113,86,213,159,136,254,252,215,162,219,27,196,229,177,93,0,31,45,124,148,1,22,216,244,18,172,25,25,221,10,170,64,59,99,175,87,57,197,79,198,58,22,96,15,12,239,5,132,244,29,57,140,107,179,25,41,108,60,38,149,145,143,18,78,25,50,244,229,1,51,101,157,72,25,151,108,98,247,170,18,177,175,53,209,77,57,70,142,8,16,73,191,199,179,138,183,90,30,144,22,161,245,154,62,122,81,85,10,236,199,23,186,20,60,43,203,14,3,94,208,59,126,139,37,189,202,64,195,37,140,68,251,12,192,46,206,192,143,0,110,166,157,20,254,129,
|
||||
82,103,53,200,118,38,174,99,36,243,150,131,45,35,199,203,83,31,1,33,224,55,139,241,167,203,195,180,156,13,181,180,94,25,49,141,36,241,76,10,244,157,227,206,15,137,177,63,249,209,71,144,177,199,239,105,212,117,83,159,65,208,209,95,35,203,42,21,188,91,209,151,182,161,0,165,222,80,81,94,125,143,65,77,211,16,58,17,135,43,1,252,116,67,234,25,63,208,177,222,112,103,50,140,115,131,109,15,148,245,14,72,50,211,77,3,1,201,128,53,45,149,35,90,207,50,17,32,44,17,239,51,158,166,26,122,247,80,163,49,35,179,0,91,24,208,24,210,219,128,42,142,167,104,8,50,152,218,40,156,83,26,239,158,13,16,16,54,11,157,145,175,125,58,61,128,123,250,166,206,233,160,18,17,133,126,73,237,242,40,243,37,136,7,32,164,0,197,78,126,145,128,14,181,215,114,162,77,2,162,197,235,215,231,10,198,175,176,103,53,137,105,109,122,126,157,116,188,122,191,116,187,146,16,176,214,156,2,96,216,44,207,197,158,2,176,79,118,144,188,87,102,37,64,218,7,
|
||||
192,189,149,171,84,75,23,210,91,43,69,31,178,102,190,217,173,85,179,236,55,227,42,145,144,208,202,108,106,176,76,165,192,37,197,148,213,12,53,57,187,71,133,180,35,96,246,169,239,96,169,83,25,255,72,161,202,180,94,60,59,73,176,80,153,142,232,124,31,89,20,158,108,46,232,205,241,30,212,195,215,68,162,58,71,39,197,56,67,131,186,238,9,192,154,104,129,234,232,113,192,158,54,227,89,253,154,64,79,244,207,221,97,221,8,184,37,251,173,8,164,44,85,189,5,94,210,84,215,252,62,184,5,169,10,3,68,72,216,14,198,199,134,56,45,172,196,183,28,253,254,201,150,136,230,159,31,133,226,93,192,21,80,202,223,51,253,169,16,235,86,202,181,246,207,238,1,106,238,63,72,88,158,50,31,96,251,177,88,198,61,207,75,68,161,23,245,13,213,35,255,146,231,208,233,123,131,242,124,176,157,240,89,41,94,160,140,63,217,28,80,45,54,26,95,6,156,179,242,126,84,99,133,72,137,69,71,226,79,174,21,65,106,91,156,65,133,244,225,0,94,131,214,92,187,175,
|
||||
244,164,224,29,237,135,180,106,17,126,1,240,71,148,79,32,202,56,192,96,36,223,15,105,150,207,109,226,18,208,71,137,82,36,147,33,203,138,139,176,214,100,13,129,204,68,87,100,131,48,80,35,223,2,223,180,4,118,223,134,165,171,75,109,36,82,44,1,53,168,204,32,157,142,234,43,46,232,111,168,30,101,60,95,66,176,5,146,250,42,158,35,180,137,129,1,253,155,127,114,104,227,222,133,59,218,38,50,253,37,106,240,216,73,32,190,173,207,49,163,82,69,8,139,168,147,190,151,242,133,119,166,157,157,91,7,4,28,162,162,11,109,205,19,3,87,88,173,125,197,192,131,251,5,182,217,250,254,124,209,198,159,63,118,253,183,191,251,205,175,126,250,249,251,45,75,126,253,155,159,126,248,127,190,127,162,250,253,134,37,255,230,231,31,255,254,255,254,139,127,243,243,239,126,255,195,175,127,251,195,143,255,244,17,236,63,93,231,242,119,255,31,136,123,154,41,
|
||||
7,150,99,77,178,174,28,146,130,52,150,5,110,20,47,138,10,196,40,192,77,145,76,158,90,241,67,2,63,162,234,190,188,114,159,42,147,212,34,95,72,69,17,214,74,149,173,231,186,111,7,95,45,66,254,193,48,251,83,157,12,35,27,93,119,67,16,27,241,122,219,134,74,234,230,121,193,50,66,0,80,212,124,185,115,65,145,8,134,130,183,224,48,197,234,207,104,86,53,14,243,242,72,22,179,164,94,70,105,13,199,56,205,73,128,96,56,229,20,199,35,166,136,0,164,73,255,24,43,22,4,78,166,94,35,181,208,205,40,146,111,23,10,107,150,139,135,10,156,46,101,218,185,5,136,99,221,141,162,223,85,32,58,139,36,130,151,233,179,133,181,38,169,66,182,206,10,2,119,212,58,202,8,180,126,217,189,140,242,69,46,198,58,156,17,213,228,73,34,164,125,212,13,242,125,129,138,226,248,225,237,12,81,28,100,244,201,56,12,152,233,38,22,14,250,32,115,148,107,253,136,90,115,148,164,248,255,112,246,94,175,14,173,89,158,216,191,114,95,220,216,6,55,157,166,167,
|
||||
218,79,99,27,12,6,99,12,99,108,131,105,195,117,215,165,187,160,186,171,184,117,123,204,48,12,40,30,229,156,115,206,210,81,206,249,40,30,229,156,117,116,148,179,116,148,179,100,221,186,53,83,53,118,61,249,65,91,223,214,90,123,125,107,127,97,173,245,19,107,175,221,16,65,194,53,34,25,198,9,90,24,66,98,165,125,207,47,56,49,177,146,94,242,218,94,64,88,33,140,48,97,11,35,254,46,41,131,77,224,7,219,231,74,171,86,158,118,26,142,179,109,59,239,13,99,176,98,32,58,211,250,175,229,137,101,18,228,25,74,101,9,112,138,21,109,14,187,75,187,174,244,80,37,189,251,225,8,210,185,104,129,180,11,174,136,165,210,117,54,92,184,207,33,46,71,13,240,149,154,13,25,163,182,168,233,232,157,223,212,199,23,42,111,245,94,117,216,131,32,46,203,198,61,136,232,70,146,174,96,82,189,179,160,16,146,109,74,213,108,107,71,179,115,19,123,103,117,66,89,216,101,235,226,108,249,129,7,38,152,139,143,21,145,109,161,189,19,36,210,220,175,163,146,184,234,
|
||||
193,143,51,33,87,90,86,1,86,125,105,82,0,144,242,45,227,241,184,211,171,172,202,80,175,253,107,214,226,63,17,1,16,19,145,159,209,140,88,136,21,212,212,223,158,27,114,43,62,182,153,137,44,151,120,74,175,11,10,36,41,208,111,103,175,244,144,57,107,228,37,164,220,133,204,136,18,193,152,45,116,223,9,166,216,119,83,169,149,87,123,116,10,3,140,245,108,229,197,174,90,60,107,9,197,58,40,8,153,141,8,36,165,200,212,245,122,173,66,162,68,29,65,128,210,154,49,244,91,95,101,7,129,103,238,153,8,22,231,31,70,104,126,212,131,204,226,193,141,150,109,15,189,53,207,99,25,66,180,95,64,201,32,214,218,182,61,11,150,163,20,151,69,173,23,63,30,167,54,100,213,13,39,171,68,190,34,190,52,29,69,47,69,174,112,10,16,229,40,66,24,108,198,129,226,86,39,28,232,147,202,161,139,140,88,152,63,195,12,36,241,179,18,76,125,58,27,52,158,73,45,163,87,45,237,218,60,111,2,55,117,109,43,154,141,51,145,2,25,29,195,139,134,11,152,13,
|
||||
169,193,8,87,136,122,43,158,2,249,13,249,28,53,31,103,59,221,153,170,134,193,54,83,17,106,210,61,78,212,52,48,3,128,243,236,63,87,162,84,116,85,15,137,24,202,57,13,106,9,56,192,214,188,243,48,37,73,107,137,207,146,10,245,182,35,242,69,50,245,78,139,172,133,122,183,213,30,178,203,232,174,103,162,231,108,105,62,193,80,64,100,160,101,178,16,205,25,79,72,8,42,88,20,76,251,18,170,180,243,13,246,235,5,144,121,245,151,59,46,136,219,170,185,213,171,156,122,200,233,228,199,51,246,226,246,3,225,152,171,37,158,82,96,68,90,28,179,39,36,26,198,38,40,183,107,8,200,21,30,86,81,53,200,90,39,124,161,38,42,57,4,137,59,105,48,144,47,187,183,132,8,118,76,106,178,103,140,182,172,182,106,187,149,197,11,142,27,93,46,228,106,173,118,197,139,132,183,61,69,70,238,119,79,91,48,24,27,25,191,116,200,112,54,135,11,196,131,177,72,12,61,11,70,5,7,236,241,59,206,76,253,18,89,16,150,122,211,234,47,239,198,184,125,163,6,
|
||||
212,79,87,151,102,183,219,53,131,49,44,175,9,31,34,174,79,131,15,247,231,225,235,96,161,183,130,2,194,39,65,91,61,22,72,250,131,138,126,196,235,245,227,238,145,134,214,23,142,198,143,68,28,149,76,102,63,172,155,112,36,2,179,155,216,229,93,237,43,220,220,203,252,237,113,62,233,154,177,233,28,222,122,153,77,1,167,229,161,98,102,49,26,14,129,162,201,195,230,198,220,139,103,200,223,126,137,248,68,34,113,38,43,48,201,63,183,131,160,10,10,97,39,32,8,243,105,116,58,233,50,22,166,46,104,190,111,195,110,7,31,255,68,120,235,109,4,198,202,160,110,152,85,16,192,19,225,108,84,234,124,251,201,178,61,112,28,183,250,130,247,150,208,81,189,255,32,58,102,21,29,185,205,15,92,25,187,241,244,194,146,1,175,36,11,37,41,46,66,120,55,13,183,220,40,238,222,182,253,80,57,167,191,249,37,30,70,12,153,173,55,28,215,236,202,26,190,44,105,171,67,179,158,99,189,198,205,180,92,122,165,11,180,9,90,124,178,67,158,151,131,15,183,128,252,25,
|
||||
126,164,25,171,199,190,119,81,58,159,158,175,147,100,5,194,53,114,9,150,226,209,112,161,216,97,89,94,70,230,11,166,66,165,194,238,238,215,46,102,211,37,160,55,114,194,189,130,206,74,175,235,252,197,107,21,104,84,135,73,85,73,107,57,222,9,95,79,51,124,13,153,203,192,5,34,138,238,206,64,43,184,96,214,17,127,225,26,115,87,197,31,225,83,35,4,12,107,184,185,227,238,172,47,112,221,161,247,185,89,172,129,214,245,121,134,135,88,43,170,134,221,135,120,134,243,154,25,10,133,214,183,131,197,29,212,236,6,227,58,197,16,234,98,151,120,214,89,191,3,144,6,52,137,145,53,76,241,133,229,162,98,199,255,232,37,187,238,67,99,206,214,29,15,219,11,144,232,24,28,14,31,23,111,135,128,171,233,170,250,166,69,51,26,205,95,63,174,163,16,50,76,217,214,14,69,150,106,43,140,224,69,159,217,211,219,42,206,149,62,231,240,200,40,130,167,207,117,168,34,189,133,221,157,143,219,195,151,191,168,229,218,71,127,0,52,202,210,92,54,219,208,71,126,93,155,
|
||||
7,88,115,103,228,10,51,69,128,28,183,177,25,205,230,130,121,219,189,226,65,225,83,219,81,147,43,99,105,222,251,123,91,17,11,99,29,143,195,43,12,230,109,204,139,26,165,27,67,7,68,158,178,243,139,133,5,190,2,245,55,233,124,254,163,0,5,187,91,135,214,253,22,155,223,206,187,203,170,197,149,184,6,62,188,127,132,40,112,164,10,236,35,23,186,145,232,79,156,37,150,105,249,93,219,68,90,146,196,186,33,44,87,190,39,187,216,60,43,60,90,35,235,194,7,247,69,106,16,121,87,92,73,205,139,39,8,61,65,44,51,198,20,126,248,76,195,212,235,180,183,247,220,46,88,19,219,246,53,1,103,44,21,134,105,132,127,27,164,40,108,123,227,149,206,112,81,136,116,24,253,192,186,189,43,203,59,121,149,130,131,216,133,179,175,35,217,171,102,11,96,179,206,219,56,144,5,39,190,6,5,249,231,19,29,121,247,234,32,99,0,105,219,206,239,174,101,100,233,3,130,3,176,59,14,86,255,241,129,9,69,219,157,225,91,200,188,198,51,36,4,142,104,208,171,213,
|
||||
186,180,174,62,95,23,27,72,62,72,29,133,248,62,101,113,181,70,183,89,48,153,198,143,11,236,125,6,4,232,41,216,32,118,43,202,194,9,126,182,145,120,233,35,31,224,130,230,222,182,89,189,59,35,227,239,1,64,240,167,228,107,65,64,155,246,158,64,206,136,213,134,6,53,251,114,61,45,227,237,81,61,194,47,194,27,16,203,198,46,171,172,215,67,81,52,131,105,181,211,17,65,225,199,118,37,91,250,244,14,192,219,3,83,181,177,185,175,230,9,97,120,230,251,110,115,245,188,255,73,199,53,190,202,182,91,151,5,18,108,91,36,34,113,36,1,166,44,235,237,243,126,131,32,129,168,160,35,152,134,21,16,90,107,220,230,38,129,238,87,6,99,61,93,35,143,113,187,245,184,19,15,219,183,25,142,40,223,163,205,80,193,54,23,64,242,239,43,103,156,183,112,42,245,231,144,146,192,54,137,158,211,129,197,103,37,150,8,138,64,231,48,152,230,50,53,145,9,153,85,239,239,89,109,165,8,155,194,235,189,221,233,108,250,184,134,38,219,113,94,118,79,178,74,59,109,
|
||||
119,84,98,3,149,121,89,234,214,73,111,85,165,52,239,110,183,46,49,179,39,150,226,129,177,90,144,39,154,186,167,196,107,58,41,16,96,97,1,145,149,40,223,91,118,33,249,14,32,156,68,162,155,47,208,199,174,172,173,92,63,191,112,242,197,219,8,175,221,114,173,139,208,227,99,42,0,21,85,39,51,205,145,7,50,1,130,251,10,34,209,55,130,159,172,218,171,82,41,44,175,34,170,245,177,146,109,171,218,87,56,228,105,180,124,227,21,88,180,38,21,150,96,98,177,24,194,178,211,211,47,122,214,43,175,193,138,211,238,187,82,165,186,241,30,247,147,247,54,103,47,155,103,164,3,139,244,23,88,214,5,187,208,95,50,203,165,210,135,77,167,207,87,0,206,171,200,57,141,100,115,48,152,27,188,152,65,17,118,205,236,11,104,146,224,137,100,134,93,72,48,193,63,175,12,63,210,109,188,158,214,148,161,105,43,110,248,43,109,30,192,214,114,117,176,129,227,227,188,29,255,248,56,81,155,184,80,100,102,131,196,149,33,76,21,138,28,72,67,112,245,89,222,189,225,87,
|
||||
168,200,185,5,194,83,225,160,2,241,142,148,69,182,47,184,97,68,22,141,10,16,111,18,155,78,35,123,183,161,178,14,171,249,70,141,43,230,169,22,214,216,198,60,173,52,76,232,212,124,174,57,198,79,127,125,168,117,229,154,31,43,245,39,68,233,215,103,211,133,217,41,194,179,109,64,23,86,100,32,169,203,62,115,252,247,213,202,193,73,11,0,207,85,176,189,207,248,104,68,10,253,212,120,123,31,60,193,98,8,67,53,96,81,236,129,227,38,98,44,22,124,191,154,93,236,13,195,86,130,92,228,213,174,157,41,167,74,112,91,221,9,205,101,47,57,122,115,124,124,152,125,105,137,66,214,242,188,204,32,145,244,16,134,34,224,95,65,62,42,76,183,101,31,203,140,215,217,194,144,157,180,121,4,46,5,116,132,233,117,145,7,95,89,96,217,28,171,206,101,233,166,93,42,69,40,50,24,78,53,94,217,55,195,210,177,156,41,213,238,136,249,118,215,63,28,81,42,11,45,135,223,7,17,44,37,24,137,188,131,121,194,8,28,55,164,193,80,190,64,116,32,109,96,63,117,
|
||||
83,138,170,139,42,218,193,17,128,254,140,10,180,195,176,71,173,182,85,134,160,137,213,3,227,177,14,60,231,137,74,18,44,191,235,166,114,126,74,201,41,52,61,60,1,213,132,60,100,188,216,85,223,26,31,135,139,71,100,17,84,60,61,113,59,20,10,135,130,184,33,92,68,46,225,95,125,193,57,6,76,207,87,42,0,14,215,118,205,224,197,45,204,217,73,235,26,235,94,122,189,141,100,170,100,32,142,115,239,117,93,215,137,16,138,182,156,34,108,211,94,86,200,13,85,198,41,142,115,119,188,49,153,158,55,151,98,10,190,19,208,246,74,230,237,38,177,82,89,45,39,127,175,81,230,18,185,34,180,102,88,147,50,22,253,165,90,81,154,250,68,98,164,211,235,65,10,37,203,155,95,240,24,179,225,158,136,197,89,47,20,10,95,84,20,206,238,123,40,242,50,41,63,1,63,54,163,39,167,132,157,242,97,183,39,117,112,125,222,122,139,151,21,35,181,194,125,84,2,4,229,44,27,95,226,238,246,236,32,217,22,139,101,16,151,203,133,197,249,164,114,248,23,197,106,66,
|
||||
98,45,40,140,8,50,31,75,170,212,70,174,190,100,49,111,185,210,99,52,228,233,162,147,233,180,172,213,218,233,174,211,58,39,137,79,199,69,48,71,94,249,172,59,151,175,161,48,161,189,20,105,231,215,112,138,139,117,23,236,119,4,241,67,134,110,77,249,12,196,219,131,55,24,14,101,98,49,2,242,134,144,187,99,241,94,124,7,185,134,4,160,75,81,79,8,234,93,174,79,114,47,48,107,200,123,214,61,34,240,209,250,100,87,51,222,203,97,65,25,2,99,118,87,180,158,225,178,245,237,246,27,20,134,219,115,175,74,48,168,216,250,58,13,5,22,168,30,172,77,214,0,64,67,135,109,234,195,110,221,107,47,74,169,88,66,172,233,196,134,54,5,83,111,38,216,189,83,55,74,85,68,4,57,64,161,44,224,124,159,132,98,179,129,138,58,225,160,123,230,61,94,113,167,243,199,68,117,48,100,33,34,169,96,190,73,111,54,247,241,205,134,160,221,46,123,83,251,3,45,236,37,173,171,150,90,173,190,110,243,134,244,206,250,53,6,13,92,161,16,116,51,112,219,185,155,
|
||||
65,66,173,78,172,114,20,60,94,174,123,60,146,247,212,1,7,182,176,60,178,166,174,106,234,120,79,217,117,50,249,194,102,111,216,154,186,49,159,203,129,75,26,148,68,42,5,1,17,25,185,194,205,105,1,197,109,129,68,2,108,237,58,178,43,234,176,168,18,55,167,115,161,137,108,139,204,117,57,12,236,225,158,71,188,135,82,169,60,130,118,209,176,255,35,96,193,69,50,209,4,90,91,213,24,142,63,190,69,75,17,138,48,180,103,67,55,76,65,87,141,31,76,227,16,128,69,54,77,62,163,137,100,145,188,73,42,138,102,181,126,130,94,187,95,80,253,242,3,116,206,29,90,61,199,86,100,253,154,149,229,243,11,62,13,191,205,161,206,145,246,161,204,220,251,21,3,220,89,178,117,53,148,172,78,180,25,122,156,27,119,83,210,189,175,166,7,207,72,113,33,62,226,61,184,49,172,177,185,64,243,169,186,29,199,103,76,156,253,120,50,197,56,5,33,47,77,91,98,123,103,173,221,32,65,187,46,128,159,41,242,140,202,138,240,32,126,172,163,230,93,112,203,35,111,205,
|
||||
194,8,126,0,155,1,143,211,242,134,26,56,111,93,27,50,90,55,39,179,156,17,47,120,4,146,197,24,76,113,46,129,123,29,159,162,74,161,182,217,120,130,38,213,32,192,179,220,95,202,225,155,164,87,41,151,211,238,233,215,181,238,40,149,89,213,39,158,157,235,242,183,188,55,103,248,241,221,11,17,12,142,187,227,146,232,186,53,146,99,187,95,143,138,207,124,4,199,243,184,172,229,157,217,94,206,122,23,183,27,243,54,150,150,45,22,167,232,197,191,159,126,109,64,245,166,165,223,124,65,94,167,60,152,0,43,157,205,165,23,139,213,82,112,90,7,83,90,38,239,22,127,177,99,78,215,96,79,27,88,239,8,131,185,229,145,141,44,78,111,249,50,245,183,217,162,157,127,231,217,30,104,21,145,39,175,16,117,252,123,86,16,55,181,44,47,242,199,182,184,170,59,38,87,77,230,240,57,173,127,225,124,214,65,202,31,166,233,157,236,139,241,86,242,90,30,87,47,116,125,104,235,127,95,222,225,199,42,11,223,252,195,183,255,244,243,95,126,247,205,15,191,250,230,187,127,
|
||||
250,177,172,195,63,253,243,63,126,247,253,47,254,238,219,95,126,243,243,111,127,248,246,63,86,111,248,215,191,252,197,207,191,251,254,191,251,225,251,95,254,239,127,180,46,195,207,254,226,79,254,252,95,252,25,0,92,3,26,254,32,177,72,203,158,55,188,113,74,22,75,247,173,238,216,71,152,252,136,195,33,55,232,156,246,97,208,143,116,84,129,116,164,123,97,79,214,225,69,20,133,42,72,4,225,136,74,128,16,107,20,132,139,220,152,15,22,131,43,195,126,134,184,100,29,118,94,227,227,240,118,186,30,157,182,120,147,59,142,219,147,129,11,149,10,184,219,209,184,158,186,185,160,77,123,95,192,104,78,233,171,190,49,201,119,49,240,12,210,49,1,126,12,128,255,130,247,101,192,124,57,16,15,44,0,224,19,0,196,252,6,0,253,150,178,226,191,60,41,236,121,218,186,103,78,89,203,86,226,113,53,174,47,76,84,109,106,68,37,183,229,34,161,158,181,152,163,213,88,203,223,144,149,173,222,22,201,97,183,123,60,39,209,87,114,222,157,245,2,253,104,173,219,81,122,202,
|
||||
59,225,158,156,196,172,169,169,17,84,1,45,91,195,175,94,53,14,251,138,19,191,99,21,182,130,203,102,242,102,116,118,119,126,183,39,211,127,228,90,64,35,196,72,11,135,59,224,176,15,15,39,177,88,148,38,203,201,186,9,75,43,63,172,88,131,194,159,186,87,188,96,14,71,211,239,75,168,230,40,158,217,75,96,216,242,28,152,173,0,134,136,19,188,209,204,143,98,114,107,233,11,249,201,249,40,0,132,222,34,127,186,72,155,243,96,71,153,79,154,204,229,1,61,128,99,153,100,118,176,250,216,172,224,76,51,187,253,245,128,145,33,51,246,151,166,27,245,146,217,52,200,25,48,20,196,228,191,64,204,190,40,230,57,28,76,124,234,81,226,23,207,14,247,13,221,239,247,57,204,222,219,21,3,199,132,204,71,200,250,100,211,219,174,147,161,222,197,102,95,179,173,214,114,233,60,140,198,197,58,62,251,98,230,39,94,77,247,41,6,33,56,1,129,187,225,77,1,136,108,102,188,227,97,82,48,59,113,16,110,217,205,233,103,192,132,183,251,116,169,244,88,19,118,55,105,
|
||||
1,149,145,124,169,231,0,125,188,197,219,144,159,38,230,183,195,255,156,24,16,254,167,137,9,154,1,111,246,105,102,33,207,249,160,169,60,216,50,197,195,30,37,64,20,35,102,2,218,5,140,178,158,130,200,43,138,58,24,175,55,34,235,144,45,159,135,105,35,66,174,63,154,223,246,215,207,101,248,51,0,184,10,52,255,193,50,148,177,231,28,255,162,161,59,162,67,55,217,135,218,218,124,199,24,70,192,51,80,172,70,30,177,139,182,63,136,46,175,163,66,5,10,103,216,194,173,112,41,53,180,9,197,113,36,19,29,241,250,184,107,159,2,32,0,167,215,227,5,124,10,107,150,185,179,160,203,68,201,230,254,205,232,227,11,65,7,171,12,240,9,10,42,1,0,10,5,224,27,167,156,20,246,3,129,247,16,213,68,11,82,75,163,239,116,175,222,70,232,244,4,195,101,93,19,160,172,144,50,67,93,58,211,148,11,46,71,195,173,179,84,247,47,165,228,87,132,202,45,189,3,93,46,195,37,67,127,45,226,77,74,87,250,50,228,173,95,139,239,221,245,231,52,11,235,174,
|
||||
205,241,166,28,44,135,49,48,60,73,124,62,242,6,238,59,216,172,253,190,71,132,211,182,173,143,105,108,12,245,208,207,208,14,176,5,175,39,202,168,122,249,5,70,171,212,56,170,165,4,241,83,24,16,154,55,228,128,34,84,241,11,25,71,211,185,192,114,240,234,36,187,58,182,62,172,20,228,136,211,215,80,234,181,49,30,111,182,100,7,64,143,1,223,94,246,26,72,171,134,227,131,154,164,35,23,35,123,5,116,124,47,180,23,242,71,210,83,204,100,13,82,170,44,91,246,115,105,190,138,223,22,80,2,37,5,227,44,15,21,98,187,99,11,146,18,133,41,44,168,140,0,9,138,51,61,94,196,42,36,247,173,43,220,151,12,112,235,43,161,139,254,107,71,172,148,91,189,56,168,215,161,71,154,103,64,229,204,47,204,207,91,140,189,20,20,2,42,92,93,148,176,61,1,189,22,30,145,224,103,123,189,87,102,215,93,132,3,156,122,245,245,123,63,254,105,152,107,55,11,245,133,223,197,228,123,164,61,74,221,228,84,63,202,150,0,7,91,135,47,199,28,32,145,252,232,
|
||||
144,177,106,91,118,55,119,38,216,159,145,203,219,57,70,117,32,116,62,54,53,70,21,129,4,224,164,139,123,226,149,37,230,128,223,100,100,143,81,242,201,103,13,0,131,121,246,173,26,181,191,11,181,193,229,187,53,147,6,0,45,69,0,82,138,249,202,249,5,229,3,71,121,172,2,82,148,132,5,250,162,140,150,238,135,5,118,1,204,41,57,46,16,188,224,67,23,231,156,6,184,50,132,11,145,141,37,80,57,218,168,94,132,79,242,204,152,8,66,23,86,0,101,155,177,7,178,176,3,96,175,100,60,87,72,29,128,228,157,217,2,57,248,2,96,92,208,89,224,69,227,51,65,111,169,76,193,239,198,0,110,47,52,229,241,86,2,77,244,174,149,66,193,171,46,63,154,126,183,175,238,0,151,1,106,36,29,217,110,62,229,110,141,9,23,247,1,65,82,39,241,119,74,17,120,240,197,34,222,20,238,241,6,69,244,172,196,140,151,242,120,181,1,94,164,42,16,230,60,58,246,139,159,28,252,228,34,201,41,1,178,128,147,10,194,131,144,47,16,138,0,64,46,232,196,114,
|
||||
0,76,204,7,9,252,80,62,0,74,65,35,148,0,5,80,254,25,205,0,163,126,8,52,0,66,250,144,74,31,157,88,0,228,50,254,58,158,255,219,43,243,226,206,144,245,38,230,187,65,2,197,17,17,209,9,17,242,207,194,228,230,133,195,117,8,57,0,80,122,238,94,128,243,217,224,151,126,106,248,0,191,107,0,126,106,160,135,20,27,12,8,208,54,176,20,211,21,95,68,2,133,14,245,129,3,4,240,159,12,190,242,21,10,61,93,6,244,223,251,163,255,230,159,158,62,232,233,143,254,238,187,159,127,243,119,63,21,8,122,126,255,227,175,191,253,225,183,101,135,126,91,112,232,247,126,232,247,174,233,135,111,191,255,31,254,233,231,79,159,245,195,175,190,255,163,206,233,47,255,230,79,254,252,111,254,37,0,204,2,90,255,83,231,148,247,35,0,58,33,192,231,139,28,76,139,112,233,17,106,5,8,118,188,72,213,67,243,183,224,193,133,42,120,253,4,11,152,252,173,163,192,126,32,225,88,61,25,130,134,10,32,1,127,52,131,55,144,253,63,158,60,219,248,31,79,
|
||||
158,109,184,224,39,2,136,252,19,65,16,253,137,128,135,254,68,128,24,126,34,188,253,116,57,132,255,211,229,25,248,79,151,255,255,150,139,172,189,128,0,184,51,0,10,124,163,174,254,191,70,241,111,126,246,151,63,221,189,17,232,251,127,149,76,66,20,138,93,88,61,242,94,136,246,98,58,129,161,32,36,187,20,95,129,168,193,34,47,179,59,68,68,198,16,132,194,81,120,133,137,158,51,152,129,153,207,87,5,179,160,12,146,37,100,129,32,224,50,107,79,247,123,107,121,129,45,119,156,93,105,232,149,201,110,236,161,55,125,242,126,152,83,238,189,225,248,96,27,15,102,237,229,177,123,180,30,83,158,123,217,114,239,85,135,18,213,2,125,43,85,144,245,182,74,57,131,106,246,251,91,192,151,71,61,207,102,125,116,187,14,163,139,29,119,213,96,152,69,59,160,249,130,50,59,102,167,78,68,169,140,212,124,140,209,197,135,218,193,114,226,6,163,65,179,210,207,189,114,194,118,211,53,98,186,175,168,225,101,211,135,193,140,116,57,239,37,61,116,140,211,219,67,112,202,107,
|
||||
173,154,242,158,148,23,110,211,86,213,170,144,122,243,243,78,24,236,232,214,221,120,104,253,180,89,190,82,89,61,143,244,229,17,120,144,115,26,96,12,65,127,185,210,152,15,198,132,244,224,227,150,22,1,38,232,66,25,31,220,79,68,235,152,244,182,47,15,146,61,3,10,60,232,143,94,186,117,186,93,193,30,27,167,142,235,165,162,136,42,102,161,253,186,129,244,23,239,125,176,124,189,70,108,11,157,24,239,221,76,93,31,52,15,140,190,254,188,77,84,98,111,249,11,44,35,89,174,145,141,109,17,133,90,168,102,21,137,222,227,94,114,27,58,16,229,66,173,25,58,242,88,175,29,60,227,234,242,34,181,32,110,154,31,47,230,135,132,188,81,16,38,121,19,124,201,72,216,88,184,139,35,171,16,96,102,214,54,73,106,114,227,175,40,94,155,80,77,220,187,116,220,143,122,117,233,178,123,45,108,80,36,34,4,138,108,85,107,78,114,37,201,100,195,108,165,242,253,46,67,187,46,198,61,63,234,117,164,46,211,26,74,250,43,225,61,131,205,194,98,114,162,148,214,149,173,
|
||||
235,64,219,198,56,118,70,54,18,193,156,133,148,161,163,122,224,78,32,2,229,175,16,224,37,49,249,4,201,214,152,214,245,17,211,246,241,172,206,233,124,241,208,76,72,46,158,73,13,159,149,195,99,138,190,168,157,65,98,241,5,17,204,9,165,146,112,9,134,252,34,217,222,31,69,20,103,66,145,243,7,76,73,54,154,192,245,71,141,241,64,186,230,67,96,114,195,145,58,12,29,245,108,179,83,123,89,164,247,148,144,162,130,170,37,71,185,57,244,117,210,35,82,123,49,103,120,7,203,48,34,53,155,126,222,84,4,56,46,101,161,138,212,188,232,232,61,62,152,55,24,187,209,39,251,22,150,91,74,70,170,34,174,173,103,183,151,184,141,205,206,73,124,146,234,182,36,233,46,105,85,169,1,253,137,192,163,213,13,133,209,178,151,66,44,198,169,29,112,157,119,84,21,29,21,238,161,9,138,174,208,214,219,212,14,180,176,212,198,121,106,192,9,140,143,228,180,100,205,151,66,34,79,119,8,247,31,44,84,134,126,25,123,149,53,199,119,131,118,232,148,132,119,145,14,181,
|
||||
94,155,77,162,57,17,38,41,117,128,142,72,45,57,48,40,110,90,215,120,214,6,42,137,152,217,4,251,17,44,68,38,182,249,96,49,211,12,188,173,79,76,60,47,240,116,27,135,171,159,230,163,30,84,241,105,13,23,254,132,20,55,66,82,26,214,111,196,10,165,116,12,44,170,170,159,193,28,50,20,84,179,178,252,1,155,255,60,76,200,240,170,210,34,242,37,108,34,31,41,81,144,227,141,179,240,6,72,95,133,129,116,5,253,73,175,162,65,122,81,247,121,200,139,124,162,132,129,1,237,132,25,230,119,226,102,121,191,91,31,143,59,59,77,211,245,224,212,133,157,218,53,250,65,31,136,216,124,124,193,77,15,234,207,16,179,116,69,248,112,239,156,248,66,116,107,64,245,204,162,118,45,152,152,27,27,56,172,55,15,55,56,19,206,232,179,85,128,11,181,39,199,210,51,122,96,90,37,195,30,73,81,5,143,146,70,14,131,59,143,179,216,254,200,193,170,109,5,241,141,235,253,33,105,189,212,69,235,225,189,203,7,210,95,170,66,203,76,118,202,101,61,27,148,49,108,
|
||||
200,37,210,185,161,103,100,39,138,180,222,193,132,145,32,219,31,205,85,217,142,60,185,63,192,36,92,114,124,38,208,184,140,43,238,122,36,106,193,8,42,216,254,197,7,75,105,250,104,172,151,64,244,63,102,120,181,62,228,67,213,93,110,196,187,117,29,16,49,90,48,93,187,142,129,36,11,27,163,45,128,48,147,237,220,181,80,166,34,110,50,55,170,225,139,174,238,94,178,83,72,74,84,1,187,13,221,215,183,49,69,106,26,39,134,237,28,218,186,184,191,201,78,78,204,73,229,97,6,216,132,167,161,169,117,166,25,190,200,93,19,177,223,240,115,129,135,153,205,211,133,100,192,25,123,122,172,50,234,153,28,16,175,236,217,132,52,98,77,88,3,112,230,196,224,9,145,240,56,237,77,36,25,98,23,199,50,59,34,51,54,209,143,85,48,125,146,13,150,215,219,43,214,251,206,34,49,174,87,237,97,47,89,138,116,46,101,141,28,150,168,167,197,93,51,178,163,210,203,43,244,33,168,142,228,236,198,43,49,15,232,215,224,203,179,85,152,213,76,38,243,128,133,193,111,225,
|
||||
29,24,107,215,233,174,196,91,80,23,131,101,174,35,204,236,104,42,128,199,117,17,108,120,249,54,201,109,176,42,75,12,125,202,91,204,154,176,217,81,208,19,183,152,129,46,79,106,209,151,125,166,89,74,226,236,249,93,111,117,124,192,115,9,26,115,244,84,152,42,18,55,247,248,196,199,77,68,230,96,229,222,45,13,112,35,145,248,163,216,144,148,233,33,132,184,40,68,234,24,187,128,20,249,208,103,209,217,244,235,160,35,152,45,218,201,203,141,85,59,120,237,137,162,254,146,209,12,61,139,252,154,245,110,3,118,63,91,107,205,153,101,0,64,99,34,225,230,10,164,201,129,103,210,186,246,158,104,157,138,182,186,61,251,74,170,51,234,212,224,76,96,146,234,4,132,14,233,253,4,239,218,75,70,246,96,213,161,218,221,184,145,64,60,180,14,8,182,87,58,182,195,143,242,251,129,97,240,228,61,43,58,22,38,169,121,254,152,243,15,35,77,177,235,140,135,198,10,165,209,43,90,11,147,218,247,231,54,8,140,141,140,90,188,89,53,15,40,154,130,245,196,60,141,24,207,
|
||||
0,74,65,39,69,231,22,84,240,185,67,216,179,231,234,15,49,161,226,14,21,94,125,238,141,80,162,131,1,233,81,65,225,111,183,141,62,108,4,210,161,29,106,82,174,196,27,43,207,157,3,202,233,227,131,231,54,82,7,9,239,137,242,81,98,253,154,43,243,151,108,60,209,142,0,79,33,165,69,236,238,99,26,248,77,155,136,170,134,141,247,206,235,71,107,56,96,8,45,156,234,107,182,106,39,57,55,44,194,6,30,222,138,187,115,208,36,34,24,160,106,240,184,178,175,166,49,79,141,50,85,63,67,112,241,1,85,115,236,193,174,8,233,29,135,181,209,189,112,98,42,69,121,115,35,75,175,152,240,240,132,169,174,116,181,157,102,220,132,121,210,245,85,35,125,37,51,54,248,196,0,219,227,71,169,11,138,145,190,195,180,200,155,171,45,68,200,23,250,48,11,226,171,107,27,164,157,123,52,120,141,169,30,145,188,189,29,72,90,123,248,13,97,125,232,80,137,89,78,93,156,77,87,229,177,85,185,85,50,191,119,137,30,146,145,149,63,194,12,123,120,32,65,154,217,247,
|
||||
200,35,34,145,232,238,39,114,156,199,7,102,146,50,178,211,154,128,18,170,242,105,217,85,153,226,117,68,2,1,186,120,237,45,143,247,46,55,57,186,216,92,75,60,152,219,102,28,12,199,161,245,30,71,159,224,80,213,71,71,2,230,46,83,95,4,244,21,41,107,196,238,13,33,188,10,118,48,237,243,162,194,131,169,214,43,200,46,224,10,54,62,26,214,58,69,105,159,241,94,9,26,102,81,137,207,244,243,22,12,233,43,3,85,142,106,150,174,211,120,13,171,37,20,120,210,95,17,99,245,170,236,123,75,91,16,113,75,86,156,128,213,89,211,14,201,46,234,163,124,189,129,189,65,198,135,139,191,214,208,152,133,104,82,27,154,84,176,243,228,50,49,220,220,111,172,198,227,117,249,218,159,87,178,7,225,237,77,219,146,173,56,161,166,151,15,86,47,99,121,34,207,42,127,233,132,197,197,187,21,117,88,164,102,234,47,102,86,160,126,221,73,226,31,129,183,218,82,26,217,119,173,244,176,105,125,222,119,180,49,168,192,132,37,2,140,105,34,5,183,170,88,29,32,196,146,
|
||||
109,81,173,53,232,201,252,157,122,70,176,226,95,175,219,121,80,166,153,134,246,51,158,35,83,234,204,220,214,11,47,38,0,172,246,71,104,185,146,148,139,155,82,139,49,210,121,165,198,225,70,187,179,146,210,215,113,21,220,34,124,28,132,41,108,250,109,55,247,179,213,84,166,37,213,247,99,173,21,167,41,109,120,218,178,71,47,98,99,234,211,109,108,172,107,61,215,212,129,89,250,78,149,24,49,213,47,239,126,250,17,96,169,236,14,171,187,252,80,33,198,102,202,7,155,246,229,215,52,38,229,79,226,169,181,56,213,33,55,24,223,139,142,191,246,55,53,146,189,218,163,133,125,89,80,106,182,167,26,62,50,45,121,40,214,38,189,69,222,6,178,189,3,61,12,156,243,15,102,94,77,239,116,194,87,49,182,119,184,118,50,27,132,49,96,126,79,80,23,173,205,77,201,198,215,1,31,93,115,191,185,212,119,74,80,178,20,219,95,4,83,100,145,114,195,112,190,232,45,229,172,95,7,39,10,114,106,11,199,227,67,81,227,81,3,140,101,247,244,2,12,90,34,243,74,155,
|
||||
226,45,161,102,12,150,74,68,218,150,3,77,23,76,95,91,128,100,194,189,129,57,92,145,84,55,94,189,59,173,214,122,125,224,22,239,22,100,97,149,237,138,108,28,17,135,103,187,11,199,186,62,57,80,118,14,53,169,86,77,195,122,101,5,44,34,138,2,25,229,76,42,101,203,76,32,38,83,11,224,189,12,170,201,193,12,215,123,117,108,15,86,5,210,203,145,210,234,126,196,79,15,217,227,158,72,215,204,181,78,200,197,93,237,155,121,167,65,164,52,240,86,39,226,132,162,154,93,202,106,202,91,0,15,167,48,59,243,76,124,158,234,92,63,70,55,78,203,236,92,134,146,27,176,171,194,157,239,89,250,236,188,97,41,162,251,3,153,88,78,108,209,99,124,86,248,147,131,137,80,99,129,65,183,152,38,49,31,159,60,208,96,242,177,104,250,64,122,217,178,101,67,176,106,57,195,194,179,67,57,196,196,72,36,217,241,200,46,147,211,199,107,71,152,69,151,32,194,178,241,12,34,109,53,226,200,138,236,113,173,23,217,7,145,104,180,182,157,236,222,49,207,184,235,112,38,
|
||||
220,64,39,9,43,219,10,147,33,4,191,7,35,125,234,167,57,116,70,62,76,82,211,10,44,116,139,93,17,245,233,25,17,168,131,166,206,167,128,203,12,170,249,1,102,72,253,144,107,222,250,86,153,17,68,16,31,190,96,35,70,188,82,143,203,135,132,67,253,188,51,67,80,21,49,74,87,136,213,26,203,54,245,1,207,11,98,8,159,88,159,113,251,173,206,86,142,168,218,18,103,123,20,108,179,122,58,223,142,166,48,223,203,17,37,40,73,171,108,181,146,205,51,112,171,133,23,83,22,243,91,253,72,166,148,171,61,133,184,149,95,75,242,124,170,154,131,152,188,215,107,97,207,180,77,165,117,144,181,184,80,186,203,236,99,116,216,168,157,252,202,172,85,111,195,194,213,3,85,148,87,156,108,50,107,23,12,114,212,5,242,133,187,101,71,125,240,247,132,65,63,173,178,214,74,206,185,83,188,64,12,105,50,115,154,151,52,108,202,77,171,77,113,121,109,208,89,135,130,218,216,118,75,238,34,123,254,232,66,220,130,21,236,209,147,169,164,84,81,67,249,149,54,222,25,135,
|
||||
130,214,88,164,73,148,150,6,132,213,62,87,178,110,51,200,113,58,151,123,34,94,42,181,100,74,151,231,76,183,255,97,193,170,50,48,60,140,201,216,82,151,85,255,24,224,143,33,244,208,103,28,106,25,83,201,253,41,150,2,146,153,225,167,201,115,217,167,191,208,167,87,89,176,108,250,177,226,157,116,75,19,224,78,232,47,44,60,156,14,61,35,183,232,7,25,108,227,155,53,154,220,178,182,126,90,30,0,84,181,162,206,20,25,245,231,34,52,48,156,170,139,171,140,17,96,11,208,250,126,97,145,232,62,221,138,119,89,41,249,153,167,38,159,42,20,109,171,7,99,250,88,74,79,155,5,213,116,30,96,101,248,204,226,58,198,50,142,181,201,121,50,174,84,163,221,95,131,4,181,198,148,157,106,200,93,141,29,169,78,173,253,122,209,133,207,15,134,243,15,62,118,241,37,15,20,173,153,126,80,23,249,184,136,44,47,47,33,210,181,242,53,125,193,117,200,188,146,73,79,94,49,106,1,166,149,121,12,232,130,96,159,185,68,119,54,151,71,169,225,132,41,182,63,134,183,
|
||||
72,234,152,192,141,199,188,54,142,240,12,139,8,122,109,118,38,54,123,250,121,150,187,181,66,59,121,151,64,32,129,170,170,23,198,250,173,162,14,94,233,184,93,26,201,141,67,27,116,59,225,51,92,93,88,198,145,251,90,252,38,47,184,82,172,105,199,190,81,239,26,3,222,23,48,28,50,177,111,1,251,158,245,244,60,204,215,217,17,187,140,183,150,211,56,203,53,46,147,176,12,35,73,72,202,167,221,166,246,153,68,63,12,182,226,84,2,119,202,12,110,122,154,155,12,95,161,203,233,187,5,68,88,42,47,102,91,10,242,101,3,45,84,91,55,183,155,224,17,223,136,76,37,2,115,89,88,29,85,254,105,59,27,45,85,240,101,63,3,251,156,130,197,235,178,227,99,152,154,79,222,25,40,132,86,237,122,34,146,140,127,20,75,245,149,227,7,183,187,204,115,102,19,245,33,241,81,245,174,33,105,182,55,89,45,169,49,149,17,32,96,81,119,143,151,32,7,167,138,22,97,195,83,202,146,26,163,24,233,7,94,156,66,62,85,145,84,84,25,65,163,44,46,92,67,111,
|
||||
108,122,136,98,62,124,236,171,218,243,206,144,16,12,38,205,244,134,49,82,73,112,131,79,210,44,228,141,191,219,90,180,34,51,22,83,176,133,42,93,246,120,56,202,138,141,32,13,39,176,137,130,106,96,106,158,116,228,111,203,253,208,195,157,186,183,137,62,25,107,210,43,211,126,182,76,44,51,111,99,69,67,229,216,44,60,5,90,24,115,71,165,174,111,163,91,70,78,154,40,183,5,39,91,41,40,185,35,58,253,250,122,85,216,24,64,225,161,232,211,50,92,62,36,211,20,219,85,121,153,13,247,203,206,235,20,63,87,215,119,74,90,63,225,152,87,206,5,35,148,68,89,50,169,116,20,19,129,7,124,105,162,188,59,31,166,162,246,238,8,27,12,213,13,24,70,177,29,184,237,47,91,135,85,70,246,25,123,130,26,98,205,96,247,66,150,30,67,254,133,100,69,84,175,197,3,28,69,111,199,144,250,18,106,131,224,240,227,38,61,84,53,36,167,224,222,95,167,183,107,172,52,113,190,157,176,200,79,200,46,111,87,22,63,210,170,19,59,57,187,37,141,145,173,77,26,
|
||||
99,189,245,168,177,104,130,133,156,65,213,153,73,35,38,25,37,199,53,42,191,5,90,104,152,249,171,242,213,144,40,33,5,244,193,187,127,87,22,87,68,172,125,106,191,181,244,181,113,250,92,61,79,15,122,44,123,150,166,21,54,137,215,85,7,187,103,66,96,158,43,222,12,78,13,183,125,57,90,1,87,4,35,186,240,203,77,96,117,135,148,236,92,10,19,126,244,83,175,244,199,196,172,54,151,141,8,140,229,110,231,189,39,148,143,98,89,88,37,67,121,0,244,139,206,167,64,197,111,152,144,195,31,21,12,160,149,101,173,84,89,136,211,240,93,252,102,203,75,86,147,241,28,177,108,115,19,121,123,241,189,8,155,65,76,79,111,57,29,189,59,225,12,102,10,116,214,118,83,214,193,212,233,17,26,22,133,196,164,78,78,114,251,253,197,108,177,245,194,210,27,187,164,135,153,202,19,119,103,173,40,136,65,36,202,49,49,174,253,20,106,14,131,217,192,62,179,69,3,115,129,1,95,207,39,226,213,133,198,251,2,239,42,243,118,33,101,51,212,153,167,238,160,237,112,245,
|
||||
185,188,49,213,109,100,149,109,171,50,165,91,95,224,204,6,248,162,145,145,174,18,176,212,203,197,74,14,169,215,218,213,82,6,133,27,223,52,176,179,160,38,57,199,94,11,187,186,140,50,125,108,62,116,113,171,159,157,232,165,111,9,109,202,180,86,102,137,146,157,71,30,98,196,160,24,129,166,54,52,142,112,153,60,171,86,66,198,27,236,107,128,140,162,91,94,23,251,170,62,87,167,230,230,179,94,155,180,219,201,243,85,16,245,25,144,211,113,84,5,209,222,15,159,200,153,75,128,222,193,205,52,176,22,131,19,215,14,78,150,2,239,108,177,24,214,46,16,233,105,22,26,157,135,165,225,138,162,132,175,19,247,156,149,149,223,62,104,5,49,124,204,163,168,149,25,221,102,15,79,205,106,149,171,198,74,15,241,149,131,112,1,215,19,99,177,198,6,224,64,93,134,26,158,55,98,61,99,84,25,118,109,169,123,62,29,29,195,218,54,130,158,102,148,47,147,23,236,134,193,157,234,239,47,176,113,141,230,215,171,253,105,214,34,87,52,154,108,143,135,130,120,53,135,218,156,
|
||||
183,233,237,184,184,118,28,214,244,241,154,240,142,237,81,90,32,108,83,111,125,139,16,53,73,185,141,54,68,237,120,253,50,63,175,227,232,119,210,3,146,134,8,72,231,17,144,102,226,251,199,161,188,26,252,52,157,117,155,60,228,100,114,35,81,141,110,32,75,93,164,39,130,71,57,121,255,152,113,108,84,125,211,139,24,135,173,225,11,4,145,32,107,66,210,53,152,17,216,67,96,236,128,24,85,244,187,235,176,194,54,140,56,215,198,181,215,190,51,227,183,52,42,169,82,74,83,198,188,6,173,131,118,123,51,137,148,38,118,253,226,165,94,186,147,182,166,61,133,201,123,154,86,15,203,89,212,88,205,113,33,111,211,169,68,177,42,58,29,179,249,120,80,94,139,138,87,13,70,245,192,151,217,201,64,245,66,81,238,20,42,59,147,245,70,22,231,54,143,64,109,242,180,203,239,218,82,37,240,177,178,124,241,43,115,203,172,14,145,238,41,97,132,7,95,78,59,233,10,191,108,45,12,229,215,37,118,11,70,51,7,20,13,25,80,131,182,216,223,216,117,134,29,59,133,92,
|
||||
17,32,243,155,65,174,160,209,55,171,74,166,62,171,236,56,96,240,186,46,208,243,171,251,249,187,218,111,225,233,98,230,36,115,33,86,248,37,67,74,230,52,146,90,82,93,151,91,19,2,25,227,207,30,195,199,17,62,145,53,4,247,252,74,164,203,172,3,234,43,26,202,28,96,195,199,169,219,155,195,218,230,190,19,215,13,105,101,152,247,191,32,35,178,39,142,85,119,97,26,138,189,47,221,216,90,118,35,93,34,130,227,232,33,217,209,27,44,205,18,20,46,103,145,126,248,1,93,125,76,57,128,150,202,1,126,15,185,86,227,206,161,136,76,74,102,71,26,46,191,208,90,174,158,18,90,11,216,82,67,128,60,141,133,10,216,246,227,39,24,153,56,167,243,250,83,172,182,226,202,14,79,54,217,113,27,109,124,69,128,145,18,245,110,137,216,79,181,165,36,206,64,81,168,218,250,81,72,23,239,22,179,171,176,3,151,98,81,129,15,161,131,98,209,7,146,8,36,245,78,245,166,153,42,86,86,173,192,207,167,159,184,174,109,138,237,136,13,31,226,99,139,172,126,47,25,
|
||||
102,197,192,219,85,24,210,80,73,1,203,140,228,132,134,194,65,215,233,84,86,146,144,85,197,176,160,123,231,0,171,136,207,84,72,35,38,242,232,108,42,179,95,112,124,202,202,194,23,117,79,178,19,100,196,11,221,198,166,178,191,142,123,37,142,30,109,175,243,54,218,126,110,133,222,160,92,2,113,10,95,200,9,175,133,84,113,24,43,112,100,217,51,121,150,32,117,78,135,123,57,126,252,82,231,111,72,25,4,170,14,174,247,38,229,251,220,219,40,17,169,72,229,194,98,105,40,179,13,222,161,177,225,75,47,7,117,129,185,177,219,241,192,156,66,170,192,79,17,73,20,169,38,120,163,124,208,113,242,113,152,145,146,24,166,38,9,83,158,191,203,97,210,59,101,147,154,53,8,88,22,238,43,218,89,178,98,89,183,61,10,92,166,14,154,163,117,8,171,219,140,199,195,136,162,131,112,18,246,119,218,90,48,72,130,210,204,227,229,37,183,108,39,245,47,213,101,84,30,55,187,71,184,107,29,69,190,147,76,72,220,166,51,59,7,107,205,228,87,178,209,82,31,15,18,237,
|
||||
90,211,223,188,95,111,1,5,221,70,121,69,177,95,98,150,89,82,143,112,173,37,228,44,34,97,78,94,105,59,64,152,94,215,161,74,183,249,68,85,38,186,67,49,139,65,78,79,233,137,211,52,47,199,221,35,60,73,110,123,90,198,191,180,49,104,36,235,202,214,206,6,114,172,125,49,214,215,7,198,196,171,198,127,113,99,48,117,147,68,209,143,210,22,38,206,120,45,87,208,35,18,59,55,243,232,103,145,246,151,110,167,149,43,141,174,66,45,173,106,145,210,245,26,87,162,191,208,208,125,32,117,245,128,129,154,128,87,218,129,55,60,45,111,178,253,253,190,160,121,50,4,218,91,162,136,6,13,232,214,233,244,120,205,105,55,198,240,81,157,206,49,117,252,7,72,118,69,185,90,177,253,45,144,83,231,110,186,50,53,247,178,221,104,202,74,99,88,4,95,244,238,71,176,39,195,203,47,6,11,68,162,209,122,35,70,35,145,30,12,184,47,74,16,169,59,22,191,233,173,178,7,43,53,97,94,59,143,162,169,90,238,132,109,190,184,179,44,139,162,124,7,186,64,148,149,
|
||||
101,120,169,230,217,3,50,152,206,151,192,31,194,72,21,198,176,134,246,29,27,102,148,41,176,192,107,34,149,52,41,168,226,77,228,212,77,18,188,73,41,42,35,157,29,146,179,58,126,73,186,52,145,117,94,184,61,40,210,213,140,186,82,117,22,36,15,145,54,204,126,14,109,197,224,145,71,99,132,135,45,167,183,8,131,249,206,236,178,71,247,1,185,6,169,75,92,173,58,251,218,56,208,176,234,205,222,160,215,20,25,58,102,215,50,90,122,57,20,48,85,184,38,130,64,30,16,185,173,67,139,26,226,62,182,30,218,165,88,78,26,203,5,92,164,147,163,234,130,50,164,182,19,116,48,197,203,83,201,190,89,241,82,45,239,121,60,124,154,201,70,155,129,207,91,222,17,143,96,165,52,187,185,85,206,146,136,59,2,35,223,225,94,41,95,134,214,43,238,136,30,47,133,57,227,95,130,87,225,12,221,181,124,80,231,135,225,237,224,40,232,161,232,119,12,188,86,48,28,46,146,178,157,70,83,184,206,68,26,29,23,92,132,7,206,150,46,192,157,141,7,96,190,104,208,107,
|
||||
28,201,134,253,38,205,132,77,223,238,130,217,195,50,172,167,132,11,47,169,142,143,148,98,76,170,201,134,14,204,54,59,180,96,99,156,128,243,52,61,187,31,147,200,70,245,139,90,130,23,24,58,190,128,167,240,166,105,51,90,45,67,233,162,111,86,48,18,154,91,189,64,188,22,236,83,42,183,171,223,232,246,68,89,181,37,41,158,6,67,177,150,41,141,46,92,49,17,245,237,118,226,80,26,99,216,208,248,68,29,242,201,139,47,253,53,96,167,20,209,80,220,125,44,104,202,193,6,28,19,54,213,231,163,3,166,92,175,52,225,187,117,58,17,138,21,168,216,225,138,138,226,112,232,168,211,229,107,125,71,40,84,125,16,214,239,64,53,201,19,148,208,172,59,81,202,101,157,180,180,73,159,36,210,168,133,6,26,201,205,16,208,123,254,32,209,92,241,176,64,15,229,30,234,181,185,60,110,64,163,151,50,206,91,140,99,150,27,246,172,132,244,24,158,94,150,189,240,234,34,66,157,197,116,114,99,216,81,246,246,219,84,145,208,116,245,111,114,44,87,249,8,54,8,156,244,
|
||||
105,184,109,98,232,118,246,42,222,205,137,188,193,2,238,17,143,69,78,141,180,85,14,44,176,185,225,177,73,40,91,11,50,87,162,44,47,154,238,66,208,154,226,102,208,214,99,218,79,9,180,141,146,55,121,236,37,98,107,122,42,150,31,41,97,184,126,166,9,175,230,218,192,162,222,235,171,129,147,163,129,24,85,232,71,217,84,140,190,169,41,216,77,69,139,49,53,149,100,217,28,142,210,225,95,167,247,95,216,3,58,161,245,18,166,218,237,0,70,92,225,95,245,23,165,21,227,136,24,197,62,77,79,36,216,75,13,229,16,179,180,130,219,17,172,232,59,175,86,176,24,80,236,139,16,226,149,124,66,236,244,124,9,83,127,55,94,221,234,23,179,120,163,123,65,196,88,168,183,84,186,82,41,90,174,225,161,33,103,162,86,238,251,54,79,13,211,104,130,146,73,193,154,28,234,60,48,74,166,184,175,30,78,173,68,37,131,98,195,244,221,215,70,251,124,180,138,235,55,128,122,43,54,166,98,202,82,255,43,234,246,222,32,33,241,27,105,163,43,225,155,227,178,198,193,244,
|
||||
38,63,39,198,129,247,11,12,171,37,58,23,61,26,211,20,218,111,45,58,46,64,34,74,147,249,177,197,184,99,126,244,182,161,116,176,198,251,184,22,94,63,129,20,11,69,51,38,31,146,218,217,25,147,109,197,136,27,27,113,58,20,72,42,209,48,210,90,82,217,222,182,146,116,3,114,184,30,8,60,196,155,48,110,215,237,29,100,14,4,140,138,219,162,144,234,69,97,52,111,246,92,238,201,9,121,63,152,194,213,46,239,158,227,171,229,42,192,228,20,214,107,21,180,230,244,163,250,149,106,53,111,59,4,27,255,92,33,226,79,92,207,23,186,236,217,139,195,36,105,20,104,238,109,132,52,20,180,8,76,201,189,107,30,147,50,63,63,189,123,176,245,72,49,245,213,113,205,73,65,192,193,232,212,113,192,22,60,102,48,125,249,121,134,78,210,223,87,252,221,42,198,195,14,143,51,43,172,76,16,196,68,204,247,100,58,82,29,163,174,214,8,27,36,232,13,116,34,245,236,99,212,212,191,39,63,26,86,92,47,138,178,127,9,108,92,34,139,43,213,17,82,181,118,71,240,
|
||||
69,156,131,185,88,248,187,54,112,95,133,223,20,76,168,227,129,98,251,32,126,5,124,147,247,228,125,165,26,235,5,54,253,96,230,160,254,18,167,246,144,60,148,83,207,231,142,127,158,89,31,90,121,141,179,80,161,210,202,188,210,189,255,170,133,188,159,175,208,176,238,173,34,227,181,168,159,48,14,121,23,74,47,182,109,238,157,233,149,21,121,244,3,39,236,195,158,230,169,129,177,190,57,21,107,149,22,175,51,81,236,4,55,7,197,198,166,220,195,162,85,41,109,76,232,136,180,143,225,235,144,235,237,168,210,213,89,26,106,245,193,88,150,28,210,173,1,201,47,4,156,255,101,190,81,42,93,40,138,174,22,63,7,84,84,170,62,249,194,84,77,137,65,92,221,208,223,15,204,36,233,142,255,194,112,167,67,45,200,121,183,226,46,188,22,55,131,101,212,90,128,118,1,43,70,210,43,180,133,75,38,242,158,208,92,158,99,9,163,115,201,179,93,4,50,117,36,236,174,218,132,8,165,26,180,99,221,46,83,45,15,170,7,58,230,25,168,115,170,152,106,62,255,85,249,218,
|
||||
232,80,197,148,61,59,31,167,90,36,166,3,123,1,54,212,176,38,203,221,151,4,168,239,12,156,183,7,99,15,29,16,199,140,132,144,33,93,103,169,53,84,233,79,240,109,90,46,238,16,39,24,62,64,92,214,139,232,117,131,235,169,164,219,86,75,108,197,220,84,68,250,187,195,92,162,233,136,197,40,182,124,103,157,88,138,99,221,71,242,134,172,51,207,146,172,17,255,152,188,168,193,228,219,216,202,170,189,12,205,111,49,20,161,188,185,57,107,10,5,244,62,76,117,58,128,84,72,197,201,75,26,157,55,2,166,245,133,204,238,98,23,46,154,4,153,176,86,123,20,162,160,37,42,134,73,115,82,189,15,204,70,116,160,120,236,144,21,247,122,54,84,86,128,22,208,117,249,252,238,35,197,216,67,186,225,94,72,37,65,18,18,230,190,161,8,95,153,187,228,195,198,113,110,62,189,225,215,79,87,75,42,55,81,202,213,178,157,0,155,164,118,61,41,77,187,25,63,188,65,126,213,194,206,169,94,6,45,244,112,196,125,131,169,88,13,92,253,198,158,22,43,136,88,171,129,
|
||||
27,155,171,101,50,111,118,84,179,170,229,76,188,5,118,207,18,173,62,170,216,232,88,190,228,13,65,53,244,185,177,148,107,152,233,187,122,169,124,239,217,68,138,193,172,9,9,234,150,231,58,35,160,89,205,137,250,91,210,198,85,79,72,2,251,216,7,35,14,76,172,210,200,254,186,120,135,190,170,111,176,145,64,252,122,35,43,80,200,226,250,221,41,177,237,76,132,41,132,120,43,45,118,207,96,254,53,159,80,243,83,102,142,145,126,247,6,227,26,87,207,168,0,212,168,160,49,122,35,29,140,52,169,16,191,249,74,49,222,52,180,210,163,153,215,245,154,207,240,248,77,210,218,141,249,119,15,49,67,221,37,191,166,40,104,49,61,253,148,153,143,32,41,231,243,2,138,160,85,250,21,139,147,236,33,20,224,121,20,30,160,84,32,233,118,12,216,227,128,64,225,149,37,52,52,148,239,143,214,254,83,227,238,32,233,110,228,105,188,150,237,199,37,254,41,17,168,48,159,248,120,22,34,73,136,193,15,81,77,232,8,154,43,150,7,117,207,175,150,89,106,176,184,83,18,213,
|
||||
54,204,131,74,230,52,174,153,218,80,244,227,188,243,152,148,165,30,191,255,32,112,237,8,35,75,221,207,51,152,31,143,151,24,128,110,200,217,45,212,143,123,51,63,202,166,74,70,135,220,9,121,211,223,16,247,230,215,104,64,210,246,107,83,198,139,65,210,36,210,128,122,14,168,173,32,67,146,239,101,82,154,213,22,46,240,248,180,252,94,6,174,76,1,164,106,95,58,199,167,142,58,33,234,212,239,116,243,49,124,122,148,182,70,162,71,244,190,243,82,143,55,26,156,235,67,36,23,218,120,33,154,32,45,169,38,121,209,209,137,63,1,123,1,227,223,139,69,27,113,135,12,245,245,210,237,246,105,144,211,144,149,74,162,81,167,77,150,94,130,234,100,112,142,1,68,241,186,118,136,248,54,184,231,246,113,98,33,206,156,170,74,49,148,88,98,157,245,125,9,154,10,33,235,26,103,169,155,184,98,203,202,229,23,89,30,36,51,15,86,93,187,243,204,142,112,194,227,65,13,180,173,207,227,0,5,157,251,54,28,191,235,86,235,175,116,147,77,15,4,205,86,239,14,72,139,
|
||||
190,7,183,124,202,139,190,153,71,192,205,224,115,186,120,250,252,194,226,32,200,232,231,225,238,142,212,155,116,226,97,22,173,67,179,224,202,23,57,50,15,120,8,240,52,100,233,167,106,198,59,197,186,54,64,86,162,1,232,192,16,169,176,90,193,84,227,210,67,81,79,192,69,220,220,163,237,199,111,62,176,209,22,144,32,124,13,156,113,19,133,112,198,244,123,66,108,151,17,46,101,106,18,58,17,15,100,116,216,225,168,29,72,94,251,161,88,199,128,59,205,218,39,73,180,94,10,156,136,216,117,73,81,22,173,194,141,100,180,230,24,98,159,49,59,144,245,98,156,87,30,140,120,163,45,128,21,42,247,74,34,153,253,60,234,140,141,20,226,145,248,28,216,110,245,126,134,11,130,198,203,134,52,158,17,19,73,82,238,247,61,34,212,48,213,40,74,17,35,167,145,226,200,112,168,34,184,30,11,120,97,93,61,78,101,10,25,132,249,218,16,34,43,44,183,177,88,123,127,227,156,87,75,241,20,135,107,51,185,206,170,73,238,188,212,6,122,36,231,227,9,111,204,116,234,94,
|
||||
251,86,121,207,53,41,183,110,194,237,132,101,61,98,154,25,196,52,13,213,167,82,41,202,193,141,246,220,89,39,221,17,127,169,159,122,172,68,23,9,165,111,11,22,182,232,226,64,23,229,71,105,50,176,221,124,203,147,146,116,180,12,121,26,229,71,236,86,181,23,146,165,174,193,215,145,69,113,155,85,250,82,136,241,53,110,66,235,243,120,177,98,150,123,3,117,120,132,165,167,224,87,26,152,109,140,118,67,189,183,23,222,11,55,144,164,128,4,46,204,92,88,102,109,189,233,139,209,139,45,51,90,180,16,193,219,239,99,107,218,227,27,29,1,155,163,220,156,89,47,240,145,123,243,184,44,79,152,183,131,148,245,60,30,142,42,169,184,188,125,204,40,226,53,22,80,184,32,135,52,189,206,115,204,32,81,241,181,246,62,111,232,12,129,26,80,141,249,164,13,122,55,37,206,36,171,89,212,217,249,30,135,138,176,112,251,84,217,238,134,70,26,189,50,14,193,186,226,228,93,104,146,86,245,26,172,5,16,177,48,137,74,117,191,197,231,66,40,54,177,71,33,143,62,236,190,
|
||||
61,129,197,229,224,172,107,100,185,82,93,42,123,162,135,245,228,198,148,63,3,26,29,85,9,128,242,239,29,209,188,157,19,224,247,176,176,87,42,33,28,185,182,7,164,252,210,191,84,220,106,136,235,75,54,233,63,240,71,53,86,63,215,108,73,252,18,140,226,92,43,120,184,71,133,187,231,102,189,81,60,53,133,216,8,23,148,234,12,226,137,22,200,222,29,25,217,104,16,53,144,105,86,5,115,247,86,69,182,155,149,206,191,190,213,3,235,32,1,71,159,6,63,157,249,234,201,202,48,197,22,9,20,81,97,229,237,228,152,210,89,106,50,190,55,54,149,171,204,32,161,224,58,252,169,219,157,251,100,187,235,247,4,168,236,34,149,41,10,186,93,52,145,50,119,12,218,120,104,10,10,238,162,1,238,49,83,168,224,92,69,3,101,45,201,117,74,95,165,185,214,179,177,116,28,170,245,216,10,105,18,241,160,129,118,148,159,97,147,101,42,164,96,253,90,233,135,152,77,94,200,178,175,115,17,164,159,29,41,187,222,65,155,224,40,168,56,156,128,72,100,175,145,132,186,178,
|
||||
38,212,113,185,150,35,238,152,91,114,140,120,234,183,112,188,202,205,39,32,239,242,150,41,61,92,75,185,49,33,64,252,193,238,245,214,9,109,103,202,176,4,42,146,210,86,187,72,52,115,153,144,14,82,85,126,153,136,82,241,206,35,48,234,142,105,206,4,221,161,22,246,161,71,7,159,47,51,138,147,136,33,172,34,104,179,179,136,211,143,166,49,147,51,219,106,136,157,111,212,21,114,137,197,7,128,109,252,53,116,167,96,239,61,67,86,206,230,124,152,200,114,72,169,154,64,220,162,140,230,103,151,41,227,197,237,3,237,224,220,165,51,68,174,124,11,86,242,128,236,220,157,80,123,213,56,67,2,61,210,8,8,132,46,0,48,90,253,185,241,174,175,218,189,1,225,65,173,67,150,1,194,159,98,11,147,186,74,244,44,38,236,223,132,93,111,27,166,81,235,11,36,102,217,82,79,117,19,69,123,227,109,170,16,34,77,39,255,194,147,119,146,143,109,170,158,170,72,80,26,246,143,3,104,242,18,10,181,44,11,200,58,202,150,97,193,130,17,130,110,92,186,205,230,81,216,
|
||||
5,17,206,109,88,76,165,241,130,229,51,204,1,20,187,38,199,54,138,148,19,107,163,21,11,13,205,99,47,104,211,147,115,60,174,3,114,28,141,194,70,85,168,217,160,128,221,85,53,66,175,202,208,253,252,157,0,69,141,242,142,253,43,201,113,238,228,221,25,48,108,195,176,87,107,189,92,208,196,133,6,15,84,72,41,222,34,51,235,9,105,11,41,82,19,56,17,1,199,110,72,135,115,65,117,106,71,168,68,88,31,103,149,106,151,194,165,113,48,107,235,157,52,188,81,114,115,156,68,108,133,37,247,145,139,70,1,139,97,232,204,229,106,145,200,198,231,153,146,202,181,202,53,133,228,3,66,134,217,10,154,32,28,78,69,189,237,196,195,9,94,243,58,18,64,51,132,126,24,146,152,198,4,236,181,99,35,147,237,229,184,183,90,10,74,181,8,75,91,156,206,72,246,37,225,174,60,140,188,125,37,138,119,112,126,85,161,20,167,20,196,215,188,179,223,162,124,100,170,234,77,41,84,168,3,195,98,178,82,30,141,225,112,116,106,247,117,187,243,34,20,7,98,159,186,153,
|
||||
240,231,115,68,191,9,111,232,153,106,69,103,17,240,160,207,150,3,233,44,203,162,23,122,25,186,90,241,91,155,246,188,23,146,188,39,4,106,35,143,165,191,113,132,69,31,71,188,63,110,245,52,24,165,137,234,83,95,140,65,181,160,119,166,230,153,82,44,161,54,176,121,173,157,151,226,58,95,184,108,166,233,199,231,50,19,39,126,157,19,22,227,181,148,96,73,183,244,192,224,44,150,36,19,24,71,72,34,27,230,43,67,185,216,104,81,90,212,146,216,41,177,216,162,170,170,176,146,33,45,75,220,32,81,41,134,163,215,250,83,155,107,224,217,144,144,213,59,61,242,232,8,210,174,18,119,17,76,52,112,239,119,18,167,76,186,230,242,75,142,66,134,118,73,188,86,116,103,176,24,134,23,232,174,22,155,84,14,110,116,204,60,215,155,203,237,120,150,81,71,177,188,149,184,122,203,182,67,125,54,252,191,205,222,154,65,63,52,241,189,55,54,131,3,88,127,144,192,247,205,175,191,255,213,223,127,255,221,111,126,243,205,255,245,237,247,223,252,240,15,223,254,240,205,63,255,
|
||||
230,187,223,124,243,155,31,190,253,254,55,127,251,239,255,253,159,252,237,111,249,126,250,250,207,254,171,223,55,254,143,255,242,155,255,229,87,63,38,251,125,247,167,127,250,167,127,251,135,244,111,254,221,191,251,243,191,254,23,127,253,95,255,197,191,252,241,240,179,191,254,139,103,235,47,254,250,255,252,87,255,249,95,252,217,95,253,23,63,117,251,191,253,226,231,127,255,221,15,223,252,221,47,191,253,205,111,254,32,255,239,127,252,246,223,254,234,159,127,248,230,187,159,255,226,135,95,125,255,205,191,249,197,111,254,249,219,95,126,243,237,175,127,253,221,183,223,255,152,99,248,251,76,185,255,245,143,144,126,119,71,255,250,31,126,245,253,15,223,252,252,187,223,252,221,247,191,248,245,15,191,248,213,63,61,73,255,234,47,126,162,253,207,191,252,246,223,126,247,253,255,244,237,191,249,197,223,127,251,59,210,127,232,250,143,165,38,255,205,95,253,201,159,255,245,207,0,224,3,208,245,159,166,38,55,211,113,178,63,199,246,173,90,176,135,104,85,38,10,253,90,62,139,66,229,160,
|
||||
176,165,16,158,236,168,192,92,133,119,209,84,140,162,41,36,2,236,110,74,98,70,115,18,10,57,90,168,212,101,112,115,104,101,195,96,220,169,176,243,213,104,76,39,82,75,197,237,126,252,18,94,247,172,96,85,235,188,159,194,9,5,0,174,194,1,58,159,114,81,30,224,43,194,23,104,128,28,254,252,36,127,60,212,66,210,172,146,39,141,179,237,164,55,189,187,70,136,187,173,230,84,252,245,116,170,180,6,119,86,20,226,65,126,84,198,111,67,230,48,106,121,79,105,204,91,4,30,214,16,26,168,3,111,218,1,227,150,103,98,131,0,199,40,40,225,167,180,216,48,111,147,9,122,49,42,177,108,251,15,231,82,247,246,136,164,151,165,244,107,13,54,25,116,98,205,135,50,155,100,34,133,93,29,201,24,133,228,131,97,162,186,99,112,232,226,173,143,143,219,229,124,72,237,123,61,193,126,126,75,154,194,17,181,183,201,146,39,147,175,32,181,164,26,240,247,216,166,1,145,241,133,140,86,78,196,80,216,251,146,133,178,236,69,186,215,99,182,244,45,102,165,182,73,87,185,
|
||||
119,170,64,28,156,223,132,54,227,82,6,207,128,189,51,130,82,246,83,71,106,143,144,93,98,83,41,223,157,195,227,113,57,183,187,90,123,187,113,48,24,142,25,134,227,61,69,243,159,178,127,20,61,125,202,118,176,24,110,175,155,99,54,131,162,189,148,153,244,91,13,19,111,189,68,137,194,132,64,232,70,68,194,22,234,137,213,193,240,172,41,240,115,224,250,223,50,48,194,63,49,32,126,199,96,235,169,7,40,203,141,164,25,79,76,184,4,8,90,167,47,157,4,251,215,224,140,38,32,164,112,180,132,128,78,180,122,115,17,137,119,201,162,188,173,131,16,180,105,39,132,164,20,161,194,136,51,24,21,92,225,178,179,198,145,81,91,114,43,54,252,56,146,116,131,134,249,185,124,74,202,130,160,114,97,215,242,187,113,123,195,73,239,201,31,213,162,131,126,82,75,157,251,73,45,120,74,255,199,245,222,254,86,239,7,15,230,242,120,149,94,209,33,60,72,137,213,230,163,106,179,199,190,134,7,79,112,29,89,44,172,187,29,78,206,8,75,191,172,3,137,4,97,4,78,36,
|
||||
168,68,99,190,203,55,234,109,177,203,98,90,15,210,187,243,199,104,84,244,249,222,30,238,128,44,157,87,11,190,230,88,52,64,249,156,239,247,78,236,38,180,152,93,51,151,237,104,104,193,250,167,237,121,117,94,133,103,188,228,5,199,149,86,3,106,127,15,208,203,125,220,1,155,125,123,124,94,124,16,188,118,165,246,198,12,39,104,210,64,125,9,146,91,98,134,104,15,20,5,232,17,102,45,239,18,95,42,41,140,133,150,0,248,76,99,9,136,220,22,224,142,96,163,190,128,20,118,230,251,32,66,48,142,193,70,140,192,4,56,218,213,123,91,243,113,65,190,225,107,136,127,7,122,240,192,40,226,201,245,56,193,8,130,39,17,207,176,137,214,134,47,95,239,19,27,117,251,192,4,160,19,43,220,146,238,42,234,246,229,21,196,123,10,40,200,172,120,162,86,148,47,98,234,58,126,237,128,219,2,225,231,16,44,34,36,19,86,150,179,29,242,17,168,75,120,182,47,56,58,146,164,145,178,164,181,45,3,19,218,182,76,134,239,147,130,6,54,8,140,227,179,95,87,164,247,
|
||||
9,140,250,56,79,233,48,33,248,16,196,191,112,13,246,39,31,29,207,56,70,123,62,158,2,254,236,94,64,2,219,110,124,208,147,37,241,130,125,118,18,124,241,189,20,22,4,32,192,251,10,125,30,99,120,6,0,144,37,48,126,252,168,1,217,234,243,39,250,80,105,71,65,0,166,61,136,5,136,171,191,126,111,136,126,247,194,212,31,159,211,249,221,19,59,223,126,243,143,79,211,246,237,55,191,254,173,25,250,15,9,211,255,49,43,250,191,255,197,47,191,251,111,191,255,213,255,253,155,239,254,120,78,244,159,255,217,159,252,236,175,254,18,14,198,0,59,127,96,142,202,236,57,231,134,166,70,184,183,8,79,137,84,134,84,20,82,9,169,52,23,227,162,224,187,42,90,44,226,106,55,21,65,169,42,133,196,36,106,87,60,43,192,163,123,14,217,215,239,134,222,56,102,59,196,212,96,157,48,86,22,181,70,96,85,142,228,11,26,42,244,9,200,27,72,234,211,217,102,235,181,110,218,44,0,82,84,224,58,115,229,165,149,96,165,96,152,89,147,187,95,112,207,89,143,209,
|
||||
235,61,205,93,243,197,114,116,184,183,52,169,116,170,157,50,26,157,78,30,195,116,219,15,46,151,143,203,110,169,25,179,122,154,198,116,238,126,71,224,30,39,1,244,44,45,158,253,71,244,116,209,153,136,213,160,183,9,81,216,206,237,5,142,202,67,27,134,192,183,43,122,195,246,96,91,115,41,235,243,140,78,138,41,88,56,41,102,15,157,110,13,122,164,94,224,2,34,232,38,190,98,101,8,116,42,131,78,194,101,189,13,181,94,114,107,167,160,247,71,53,39,25,43,36,43,17,180,247,216,42,198,166,147,178,205,220,255,83,212,121,46,165,243,183,105,254,84,254,175,246,72,166,230,44,182,106,159,173,153,217,154,170,169,153,173,231,8,20,5,9,74,166,105,114,106,90,137,2,10,72,144,140,132,110,64,64,66,147,37,71,201,18,68,216,214,223,214,60,239,91,196,239,117,221,159,251,186,170,193,238,173,162,180,71,17,157,179,26,233,87,68,206,252,118,212,180,139,88,74,54,247,40,122,133,115,237,228,21,167,54,51,162,7,29,194,224,180,37,108,238,36,159,85,181,62,
|
||||
154,108,139,183,25,132,182,60,229,90,20,189,218,195,147,46,216,206,11,157,174,125,223,148,94,31,50,79,143,41,20,226,178,202,69,107,53,230,155,198,7,71,185,203,57,166,242,115,237,41,103,29,232,53,131,5,16,210,17,245,76,136,42,52,188,112,234,147,195,151,211,161,54,130,103,125,130,226,198,187,228,135,159,146,42,203,94,17,34,250,217,144,129,246,218,19,220,6,224,129,243,220,63,243,61,65,230,47,106,135,68,225,128,228,199,203,187,103,55,29,100,63,218,151,151,55,60,102,98,22,164,80,93,61,225,221,187,185,69,184,188,123,99,113,220,10,53,118,254,122,163,28,62,45,140,178,92,56,52,219,43,19,2,229,177,60,7,33,44,100,48,196,4,156,170,235,213,170,231,89,44,208,250,62,220,38,44,70,92,243,87,44,20,50,60,174,158,229,17,29,221,66,99,108,122,11,206,59,71,222,16,93,59,96,202,241,214,13,90,140,106,125,24,159,133,215,53,68,240,114,239,164,153,26,74,225,148,111,198,48,58,11,107,183,95,131,51,240,110,92,182,232,139,0,47,12,
|
||||
50,49,177,105,161,208,109,77,187,58,135,118,74,148,7,229,176,249,75,35,91,129,135,84,148,203,156,170,167,215,20,214,110,96,18,212,188,28,59,35,99,55,129,143,61,233,19,70,111,110,148,183,11,249,228,139,216,178,72,51,126,223,97,36,191,66,159,96,75,86,123,3,7,71,47,211,227,189,213,46,217,90,119,245,233,215,240,62,121,46,117,59,108,54,192,212,27,105,17,128,211,139,203,244,245,44,3,30,155,83,102,237,85,192,196,226,127,88,171,95,19,108,45,169,127,127,109,104,52,87,205,107,60,35,106,0,189,169,60,215,160,213,113,46,167,81,143,190,162,109,241,238,190,121,4,65,148,123,56,204,177,2,108,155,87,69,136,215,186,221,218,143,155,101,84,118,179,58,14,138,200,243,201,221,169,31,107,209,21,181,96,172,46,77,250,84,184,67,167,244,8,157,252,5,53,39,135,93,209,241,39,11,236,119,47,80,181,111,254,101,58,22,38,245,151,136,108,92,46,151,172,187,116,33,175,23,23,231,205,16,37,111,55,247,31,178,154,196,212,181,22,71,253,150,72,200,
|
||||
219,183,112,250,2,102,81,185,243,17,175,157,170,78,92,127,206,89,46,174,66,151,120,64,125,34,74,189,167,83,127,139,73,159,117,39,118,166,84,251,110,222,127,150,12,174,121,68,85,175,35,249,229,173,82,196,21,169,251,36,127,200,77,139,192,149,46,248,244,6,239,107,3,230,11,227,42,90,55,40,85,178,52,180,172,80,23,129,80,137,231,125,96,69,82,6,110,97,46,254,74,99,210,249,173,119,217,66,148,162,16,245,254,179,56,221,50,52,180,235,23,66,161,197,133,151,168,56,163,205,94,158,175,95,85,64,117,104,143,178,2,50,37,199,234,41,71,68,182,165,145,50,218,183,111,57,108,123,110,180,46,223,126,189,79,121,167,147,185,183,57,72,183,141,243,124,193,207,33,25,92,46,142,52,19,55,216,98,7,66,155,126,78,9,118,156,45,101,71,120,67,98,158,19,61,112,93,16,46,62,12,93,173,135,224,3,252,161,13,135,147,220,77,238,245,115,80,120,92,205,31,167,63,223,131,76,73,13,58,55,85,161,172,129,40,122,221,226,55,228,248,155,209,102,109,215,
|
||||
221,149,204,239,124,71,251,150,78,38,24,104,74,15,88,5,139,125,93,90,63,56,63,63,255,169,182,151,195,233,245,230,219,152,38,196,116,98,247,144,229,108,52,43,130,232,132,19,222,58,190,13,38,88,114,174,128,230,123,249,248,184,167,134,221,131,210,243,225,88,110,198,61,150,69,202,115,107,28,107,136,141,207,227,161,101,104,246,179,167,196,202,37,0,161,87,157,52,169,244,135,12,150,81,237,190,249,48,187,249,60,223,206,73,178,19,233,201,226,118,73,191,247,33,222,243,124,145,157,137,118,225,122,139,162,26,245,172,190,250,2,54,116,245,29,54,246,22,140,75,20,25,59,33,52,167,114,28,240,7,143,140,125,177,34,144,161,186,74,167,164,110,76,248,89,40,185,251,35,17,112,168,191,147,174,60,150,99,173,53,221,108,142,216,1,149,114,237,175,205,79,223,42,255,221,180,36,5,22,245,131,221,110,111,176,180,74,104,137,62,89,252,185,179,19,199,108,54,227,222,245,211,16,155,11,81,210,213,100,129,41,154,99,57,244,112,69,32,31,158,197,26,150,221,60,108,
|
||||
223,150,185,250,176,11,202,12,19,33,126,1,214,166,208,153,161,60,254,20,49,89,244,13,39,239,101,182,13,33,214,141,89,161,180,117,118,36,109,193,86,160,194,61,127,178,34,17,56,214,235,247,97,110,222,154,237,22,223,157,86,132,158,144,121,183,163,217,108,182,95,143,94,207,105,89,131,217,128,216,178,235,96,187,96,68,164,222,195,59,237,62,53,228,247,146,146,8,93,204,218,184,54,149,101,202,127,17,191,82,169,213,166,50,176,52,244,81,121,211,18,230,135,134,238,184,191,221,176,55,220,141,38,62,40,224,247,247,119,217,62,245,30,247,171,187,226,164,223,167,111,39,214,2,200,225,48,209,241,4,219,182,153,55,181,134,150,78,177,208,22,83,233,214,156,165,177,39,182,15,137,175,141,0,159,134,123,183,165,82,247,222,187,110,123,106,217,119,223,124,123,1,231,28,4,248,20,47,3,60,7,228,199,38,119,146,115,80,142,124,104,169,161,208,204,76,125,134,234,167,61,254,43,91,251,213,154,198,63,106,19,186,81,88,143,61,71,73,253,102,229,38,143,16,31,138,
|
||||
150,146,236,45,71,102,145,70,188,59,228,156,115,90,122,158,65,53,131,221,182,77,132,96,226,115,220,221,109,4,61,18,233,138,124,75,226,190,64,133,114,38,175,196,164,12,253,162,116,206,200,0,169,62,59,191,163,135,245,80,106,244,243,64,11,145,237,0,73,158,182,219,247,73,234,57,98,157,114,82,158,93,215,44,152,56,209,217,186,176,138,26,121,89,163,77,239,8,145,56,26,145,33,254,121,147,141,132,54,75,200,53,39,26,70,45,134,247,0,8,110,174,175,221,95,189,15,23,223,88,45,61,9,230,11,14,231,70,116,123,58,82,230,139,78,42,89,22,59,246,47,215,130,114,213,54,249,90,101,83,254,6,30,35,75,139,207,167,179,152,140,125,3,103,62,133,57,205,251,30,108,3,219,86,191,223,31,99,15,50,149,74,69,224,235,10,61,227,106,83,231,130,227,96,213,181,193,21,108,5,95,110,174,24,210,195,124,30,230,203,190,198,230,143,234,7,113,148,95,87,61,79,7,44,1,125,110,170,118,71,201,194,246,12,148,39,10,133,59,245,249,124,57,228,222,171,
|
||||
127,218,126,125,77,236,222,195,44,88,157,186,174,66,190,121,59,234,96,193,146,101,47,85,71,28,139,58,95,143,125,90,25,94,215,242,35,176,131,116,5,227,88,173,20,189,223,174,4,185,130,163,228,183,172,236,233,193,39,116,145,18,72,184,86,135,187,194,124,41,241,160,166,20,93,61,227,70,249,250,116,140,29,171,62,115,171,107,190,48,47,174,232,238,249,228,69,212,180,237,98,108,187,84,118,104,119,111,236,249,163,235,97,89,179,123,179,187,137,161,92,171,61,118,251,107,177,99,233,11,65,15,83,159,214,96,235,188,236,168,91,253,161,123,85,187,95,29,191,166,222,69,44,170,106,142,159,14,219,193,172,60,125,86,147,120,133,143,143,143,156,46,95,183,173,178,245,227,90,119,10,204,130,55,246,213,250,251,56,254,222,23,122,201,9,69,224,92,11,193,74,233,73,131,8,222,223,121,64,171,108,113,135,197,156,199,179,85,24,239,15,222,121,175,25,34,221,136,62,92,246,169,71,141,240,169,140,234,67,55,177,239,220,219,103,155,205,253,247,39,118,170,225,114,203,234,
|
||||
187,158,185,42,145,72,54,181,159,32,155,211,133,84,102,115,252,209,134,22,1,226,90,75,2,33,14,116,29,193,27,136,231,123,63,106,229,13,213,106,53,123,123,157,58,53,41,214,135,222,125,210,213,1,202,112,226,36,202,99,216,238,176,52,167,236,133,64,201,88,24,80,110,56,182,206,185,246,245,10,54,84,93,159,147,96,197,177,12,6,131,74,72,128,74,156,185,74,115,69,153,133,170,88,191,191,232,163,186,42,6,116,182,26,124,184,147,192,183,30,14,133,108,250,184,232,144,64,143,221,99,161,106,176,201,29,124,124,192,251,59,237,91,249,34,12,142,153,172,159,191,16,172,152,96,237,54,215,98,123,198,101,105,142,35,147,215,193,187,108,71,154,146,121,64,78,195,166,207,95,121,7,195,179,2,114,162,190,2,247,18,56,170,119,15,119,77,63,204,79,4,203,41,153,247,148,116,77,35,99,124,122,219,237,182,23,247,26,254,190,84,39,206,126,252,144,202,164,123,168,130,204,228,244,236,164,142,70,199,95,209,10,180,128,172,118,36,152,253,91,96,204,12,181,87,131,
|
||||
171,108,83,123,67,167,27,157,69,83,227,115,140,185,108,159,227,167,253,90,235,179,183,2,68,90,66,183,139,52,124,231,133,250,247,122,218,240,95,36,120,1,231,45,144,2,161,164,77,127,93,173,83,47,178,6,199,117,35,83,20,26,173,155,138,233,128,19,167,25,37,51,11,137,107,149,50,34,59,39,93,198,28,75,126,235,234,42,165,175,123,134,15,243,72,225,231,145,210,7,50,249,154,114,42,91,54,76,145,241,213,158,8,107,144,222,99,204,141,189,102,193,59,47,154,193,54,252,245,218,80,182,127,52,60,13,57,133,242,84,117,214,14,219,89,90,21,169,31,15,203,132,66,161,176,126,140,100,31,31,181,195,243,243,244,219,123,219,171,203,156,7,211,102,222,12,63,193,170,193,44,228,93,189,213,16,124,96,42,47,156,230,144,149,161,160,190,153,55,63,70,113,76,218,63,167,53,119,55,33,172,93,212,106,252,218,214,127,253,102,36,48,111,101,7,203,211,142,1,151,130,215,2,241,195,7,78,7,235,168,123,92,190,6,145,169,55,119,58,190,64,122,3,77,111,142,
|
||||
197,95,46,209,176,147,234,88,116,226,153,152,139,82,151,227,168,68,98,128,158,229,214,151,30,55,219,207,242,116,58,30,127,112,131,17,177,227,116,192,90,178,205,119,227,42,107,128,147,18,231,236,61,64,228,184,140,125,243,252,152,41,3,20,238,53,229,238,181,105,138,193,178,57,69,43,27,16,152,187,37,156,190,46,52,15,2,215,166,236,159,30,55,211,233,115,193,218,162,187,142,239,241,19,183,252,225,28,25,141,23,70,227,141,200,38,246,42,143,98,51,229,3,25,94,31,11,223,213,119,118,70,78,113,184,153,198,197,109,244,160,203,206,150,165,194,243,125,253,212,87,49,232,43,137,243,113,191,30,10,14,15,189,207,79,163,123,242,110,115,57,157,206,15,79,249,235,163,131,0,20,242,40,41,118,100,15,91,134,235,116,153,106,122,6,205,67,25,184,211,162,1,157,65,101,187,75,121,79,149,96,229,66,226,250,28,103,19,112,2,225,223,243,55,181,70,179,231,246,221,62,191,30,165,39,185,254,133,252,72,253,29,3,170,17,166,36,170,227,236,209,179,192,79,63,157,
|
||||
78,179,207,233,171,199,101,77,167,239,254,76,153,54,112,15,114,45,176,142,114,29,255,185,188,137,234,189,76,205,93,17,232,104,24,41,219,85,157,108,134,243,191,99,81,118,156,192,226,203,189,185,8,208,58,154,74,153,61,71,53,205,185,20,95,103,217,93,186,201,230,45,239,0,196,166,87,246,238,38,229,132,52,135,69,155,205,81,205,173,117,46,108,157,129,24,160,92,112,210,254,174,198,200,17,130,242,94,211,32,221,206,193,199,18,49,253,50,255,148,170,151,115,169,147,19,224,233,12,8,235,138,82,68,156,68,158,156,158,43,57,97,210,72,225,180,228,76,176,147,126,22,167,174,190,20,111,221,204,11,208,203,222,81,77,181,206,224,8,171,105,233,243,156,212,195,198,110,114,18,233,194,23,114,67,234,90,147,32,38,148,105,138,6,142,207,0,177,104,209,251,124,16,220,164,81,220,210,196,115,72,26,228,0,74,60,190,61,64,161,184,137,245,89,173,145,121,119,119,213,203,218,169,153,240,133,55,143,183,188,22,242,178,240,249,103,143,230,136,42,164,21,217,11,223,38,
|
||||
36,157,203,181,104,183,252,231,30,77,1,93,67,204,107,107,178,107,167,190,154,189,54,189,9,108,240,6,7,182,66,62,188,162,236,95,176,210,250,160,120,83,146,35,190,103,200,162,251,78,235,192,12,213,212,81,79,137,151,125,35,75,74,6,47,96,183,176,223,222,182,41,98,113,164,65,32,89,65,57,113,76,108,223,84,16,179,77,191,18,88,253,73,228,217,101,98,94,127,49,46,161,253,62,165,154,121,36,82,178,136,127,249,208,229,24,237,61,214,238,161,78,60,145,70,55,116,8,30,35,132,220,3,54,217,190,184,124,79,201,100,81,165,233,4,253,200,100,204,88,95,45,56,101,139,220,157,123,64,209,102,196,220,119,55,203,192,173,114,16,130,2,61,28,89,62,55,79,1,199,14,73,182,10,15,43,113,14,167,119,240,8,245,176,153,178,154,96,220,159,170,119,255,35,54,174,40,121,142,14,29,93,41,55,136,83,142,103,128,121,208,76,74,204,188,219,244,231,213,196,147,165,247,70,65,48,219,179,238,65,77,251,164,148,45,132,146,37,163,160,222,112,218,64,205,237,
|
||||
153,11,179,180,163,77,15,151,121,53,247,194,218,153,171,121,60,120,43,182,44,118,205,71,190,238,9,75,88,102,171,217,80,243,172,221,181,135,72,220,2,52,234,234,116,179,233,9,93,17,186,153,72,175,12,120,22,113,171,63,116,154,60,97,209,232,96,221,208,187,126,82,182,158,210,144,42,39,251,159,136,65,182,184,82,214,123,67,154,17,46,90,216,92,122,166,200,51,195,228,97,27,9,196,75,230,244,67,78,245,126,30,65,210,248,81,62,134,78,158,208,208,143,141,214,193,208,183,126,226,108,97,22,182,8,245,121,230,143,33,94,23,105,138,68,70,52,168,37,55,148,94,94,54,1,240,138,141,28,129,171,231,118,134,200,99,188,249,77,145,201,25,185,203,245,213,91,250,144,249,234,140,221,212,119,152,22,154,96,242,161,141,118,255,252,245,206,6,68,203,104,113,195,81,175,101,195,246,13,148,1,77,6,218,219,32,97,50,83,100,138,37,70,158,252,60,125,144,99,33,75,34,99,100,241,54,186,4,161,185,131,81,108,225,199,138,111,22,151,241,195,2,134,96,91,135,
|
||||
144,174,129,28,101,179,172,2,110,23,19,36,100,142,104,58,194,221,235,24,145,44,222,30,127,94,112,71,145,229,58,96,212,54,159,96,137,115,102,248,178,49,193,206,39,88,230,250,137,253,132,91,137,235,57,215,180,149,213,114,160,171,123,79,112,110,29,207,197,156,219,160,91,117,38,136,57,112,155,89,63,152,27,212,75,33,161,44,93,80,231,92,179,185,162,111,142,199,238,248,45,101,195,115,102,245,72,230,220,166,31,136,131,136,147,89,106,53,87,158,124,166,178,239,47,119,54,189,21,67,141,108,34,1,23,77,45,188,221,209,75,222,65,212,26,241,133,54,81,30,11,133,158,170,246,50,176,235,192,241,109,122,137,95,96,228,169,98,185,147,232,77,248,193,169,166,56,47,175,246,179,142,194,94,189,20,249,78,120,54,11,77,97,90,52,105,80,104,101,240,16,237,13,10,167,9,54,248,96,6,203,166,5,79,119,48,232,222,101,51,171,239,16,210,222,226,235,36,35,86,88,131,161,201,4,79,146,247,44,216,231,175,118,168,204,241,120,201,12,66,23,239,75,23,85,152,
|
||||
186,113,30,106,64,135,16,126,87,155,223,113,228,9,55,137,192,232,8,66,29,250,24,97,91,94,31,194,194,64,156,135,91,52,119,247,235,246,190,91,255,235,246,16,36,252,117,187,155,247,250,235,118,149,173,253,235,246,195,167,64,244,227,246,9,246,253,235,246,127,240,171,249,235,246,223,249,48,192,105,7,195,254,51,7,101,91,79,110,229,251,0,156,133,225,206,59,66,245,164,46,101,169,241,168,217,83,84,139,248,217,255,28,125,0,63,123,67,57,207,132,17,153,206,160,155,230,76,87,220,238,192,111,227,11,135,147,155,68,88,235,81,222,95,18,178,120,133,148,236,5,58,143,189,129,246,197,218,72,161,4,101,225,71,189,122,21,29,221,43,192,164,51,50,168,152,173,94,49,233,135,92,150,136,16,145,73,36,145,134,28,110,60,131,64,136,25,34,182,216,237,9,70,104,200,39,100,118,194,249,70,85,94,64,35,185,76,129,211,107,163,4,163,60,151,39,169,170,214,171,218,218,112,227,111,182,158,37,218,83,29,212,25,104,215,247,138,162,76,174,128,231,105,148,157,30,
|
||||
189,154,58,70,95,142,193,177,2,104,41,34,122,112,120,146,103,42,38,83,115,95,70,19,179,126,55,65,74,27,13,54,253,44,180,230,53,26,11,37,27,163,131,103,156,219,238,5,242,109,74,87,188,136,75,33,142,116,45,79,96,197,99,42,16,219,169,120,129,33,143,231,40,0,49,239,154,124,145,178,169,146,140,3,89,12,103,220,11,56,227,120,158,20,177,119,115,108,124,157,152,125,33,161,29,126,156,30,130,238,66,79,181,25,217,116,144,43,141,64,163,93,121,63,138,189,159,155,134,59,248,81,182,218,21,213,22,203,67,150,241,46,217,209,110,97,18,95,74,56,26,144,91,30,96,20,142,18,1,123,137,248,50,159,60,118,212,203,248,234,91,64,218,121,47,46,161,174,245,185,3,223,21,45,96,137,35,233,39,3,145,126,241,15,222,66,143,127,240,230,150,255,193,155,42,246,7,111,135,7,18,231,87,240,253,31,188,21,249,127,240,54,15,253,193,91,249,220,242,71,240,41,227,143,224,244,222,122,133,91,100,124,66,240,34,164,22,249,136,108,2,107,87,172,62,38,
|
||||
77,115,52,102,73,13,20,37,182,197,213,149,62,169,18,131,240,169,12,24,187,157,153,48,243,58,183,57,245,38,246,172,123,121,176,21,194,33,72,114,70,8,151,165,108,77,7,245,81,74,217,139,234,24,219,190,188,12,102,241,22,59,110,0,58,53,127,156,215,245,7,10,106,147,89,86,37,247,141,223,171,93,25,184,0,229,220,218,0,37,92,149,44,208,39,27,224,108,161,185,18,4,249,87,98,50,156,49,138,12,58,44,86,58,240,222,8,28,213,153,77,175,233,64,37,212,34,226,197,250,205,218,219,151,235,238,136,47,208,42,207,83,18,39,40,11,135,77,15,225,72,226,6,90,72,128,238,104,177,79,2,26,227,103,47,117,241,189,132,191,95,186,32,34,108,176,175,12,8,252,76,189,234,41,73,145,135,134,200,232,38,24,199,135,140,227,187,14,168,131,18,5,9,188,180,116,20,159,45,231,187,68,248,118,34,246,63,253,78,198,145,210,23,75,201,35,186,70,233,221,65,8,126,93,205,46,44,93,195,7,155,94,252,106,21,17,11,235,230,118,224,112,49,222,184,185,
|
||||
83,21,106,130,179,178,197,226,203,93,115,56,91,150,199,249,123,176,100,155,153,242,186,195,163,67,59,21,38,199,216,178,165,227,135,147,139,208,37,197,203,184,165,197,198,205,235,50,208,249,169,208,102,92,55,188,66,135,74,98,78,201,40,184,10,179,108,250,84,152,22,123,235,36,127,23,214,47,15,169,56,15,193,9,134,219,139,154,191,169,97,35,92,18,154,115,42,125,194,37,25,58,158,13,58,50,213,222,9,240,244,25,147,63,41,70,45,48,137,150,59,212,150,128,186,156,133,94,88,31,129,184,68,120,143,2,12,94,45,60,138,76,90,237,225,205,69,29,69,129,64,176,239,220,185,37,235,253,74,136,143,225,193,105,200,226,84,28,35,113,103,225,254,253,67,176,174,171,175,169,15,29,181,198,198,103,92,54,88,16,99,107,201,56,153,21,18,113,76,137,225,57,88,207,96,5,80,168,42,43,3,160,252,137,157,113,160,149,113,9,27,112,241,23,26,106,196,15,230,116,206,154,131,156,131,159,249,203,163,229,159,249,251,176,49,244,208,247,66,193,51,190,241,94,190,247,
|
||||
115,237,75,25,200,189,25,85,177,110,114,147,125,239,58,148,131,217,99,206,139,190,165,50,203,31,241,207,141,170,140,209,5,229,38,90,211,69,88,87,41,231,125,232,133,94,104,111,17,226,5,155,77,35,254,192,145,203,203,146,102,204,182,46,252,170,157,150,129,34,239,204,119,177,119,134,236,202,139,146,12,186,135,179,104,196,114,190,204,209,228,65,104,144,174,104,174,174,2,221,78,85,149,184,173,38,147,74,149,27,190,113,229,50,28,92,155,84,110,12,44,61,105,163,137,190,44,115,44,190,26,25,125,150,152,148,97,147,27,51,53,109,248,148,13,73,148,88,231,240,103,177,1,111,151,96,8,207,22,249,63,184,165,220,164,126,212,77,237,108,77,66,125,204,9,67,123,155,217,64,91,188,128,250,223,158,196,27,181,203,74,122,204,80,64,119,23,191,243,26,110,67,218,94,218,109,211,87,197,82,71,25,143,18,244,38,46,42,190,227,94,113,125,177,132,235,43,79,150,153,173,168,68,166,174,101,212,35,36,170,199,220,49,179,80,233,120,62,69,241,192,133,123,252,188,56,
|
||||
200,186,239,237,232,216,66,180,61,191,46,163,43,60,93,108,75,22,130,207,78,57,116,235,252,186,59,30,198,83,73,7,77,22,248,143,215,254,27,62,187,36,225,222,126,23,170,84,186,2,38,84,244,154,6,102,234,196,232,32,168,182,3,56,112,171,227,55,44,74,240,115,71,87,129,10,100,64,158,37,86,82,236,226,189,145,145,231,101,78,174,33,19,66,148,142,31,157,221,150,16,245,39,47,142,49,50,237,194,246,173,226,18,62,227,157,225,135,178,146,224,124,93,11,181,25,64,173,187,51,234,80,104,24,114,17,124,47,144,33,136,10,231,147,184,108,146,236,94,250,246,184,57,250,34,66,63,148,77,197,181,216,227,146,250,216,233,228,175,115,85,202,101,4,82,144,15,5,0,218,191,43,143,192,241,83,82,7,136,171,90,50,234,189,178,239,32,97,49,166,204,228,157,58,182,6,207,196,134,201,129,75,141,71,66,213,14,202,182,171,197,210,41,18,24,185,124,67,246,200,200,154,12,17,38,85,46,141,231,54,0,47,105,151,184,156,99,218,49,58,62,189,113,216,185,224,
|
||||
195,146,63,100,176,244,104,25,157,85,86,185,223,84,195,27,70,39,88,67,238,128,41,254,163,144,24,179,25,226,56,255,57,164,55,231,48,100,163,213,251,124,48,210,194,0,117,7,234,220,145,1,159,129,247,97,151,208,232,17,115,172,244,220,113,197,109,250,151,203,174,62,127,48,38,85,66,190,68,255,39,238,84,4,146,72,46,130,11,104,149,255,184,33,181,11,254,186,161,73,96,111,164,109,51,37,49,142,32,74,183,25,239,212,120,206,72,117,74,0,121,213,202,32,214,165,188,216,195,225,208,55,107,140,174,101,212,63,47,90,22,6,246,164,252,176,103,7,223,126,150,110,167,135,232,226,235,16,51,150,171,96,184,11,156,15,48,221,78,137,173,148,101,252,58,107,167,83,218,35,123,107,141,142,187,135,200,244,227,32,205,83,250,136,57,147,214,16,135,67,14,70,33,193,82,236,162,31,120,195,195,148,99,164,17,28,50,232,250,206,8,73,190,171,208,209,48,164,12,88,23,112,183,35,119,168,87,102,57,222,22,47,107,213,135,216,193,88,202,73,72,183,160,134,48,193,
|
||||
180,219,158,60,236,31,190,198,19,126,67,168,238,81,69,99,93,1,30,23,39,4,18,174,155,109,173,185,170,80,239,51,38,74,51,141,88,4,137,183,167,173,51,173,99,234,146,149,144,10,207,155,5,228,230,112,54,198,50,47,239,102,191,150,157,162,112,228,54,61,237,36,245,190,245,217,241,255,159,71,73,231,214,142,162,99,186,175,217,186,2,150,5,188,139,206,202,0,97,61,7,103,206,190,146,122,191,4,168,254,135,142,0,72,241,201,22,72,42,131,241,60,93,215,248,134,103,32,221,31,105,141,250,136,44,220,244,93,138,243,56,146,69,94,254,57,222,12,196,227,34,22,53,251,102,104,136,53,35,231,39,114,83,249,37,239,3,98,113,171,40,71,156,62,210,174,57,175,61,64,141,36,249,100,46,1,168,231,190,146,38,255,70,130,27,144,56,121,249,162,220,117,65,48,196,184,249,165,115,42,108,32,199,46,127,80,59,219,105,3,40,123,139,151,20,124,216,185,183,240,249,182,122,135,161,77,14,94,45,238,126,238,43,88,127,202,158,195,166,230,55,193,183,69,194,125,
|
||||
231,255,225,118,9,85,138,23,210,28,30,216,158,132,133,142,30,143,79,174,115,93,7,19,163,231,230,51,60,189,97,101,224,169,125,209,89,24,160,138,182,241,214,104,87,203,25,201,171,117,142,162,48,31,147,0,97,12,224,93,193,133,164,195,126,105,123,110,239,244,154,150,82,212,5,242,4,205,179,1,169,36,169,24,191,131,100,70,168,152,154,110,65,95,167,193,147,222,151,201,134,253,89,249,217,125,255,14,69,203,31,180,132,154,241,88,7,22,29,37,193,20,203,1,238,142,148,224,107,10,132,247,119,40,109,244,32,108,247,107,86,60,45,185,142,5,188,101,25,107,239,132,25,223,248,253,182,9,175,206,141,185,30,249,69,213,12,35,195,71,132,31,49,48,223,221,221,238,222,137,198,222,132,36,149,122,29,242,132,12,186,124,186,59,86,209,189,6,157,217,245,217,222,94,218,187,103,176,216,135,41,112,183,239,10,24,67,248,81,100,171,252,212,95,85,119,138,195,155,20,4,55,143,134,175,173,115,207,204,104,152,74,3,114,227,116,95,154,233,49,100,22,122,158,96,155,
|
||||
65,85,252,194,65,167,45,56,152,88,232,195,64,83,157,166,190,60,68,66,76,19,205,244,221,190,3,19,202,60,45,120,241,94,141,42,114,120,62,226,125,226,85,198,77,32,80,20,193,139,6,246,213,100,207,112,62,194,6,72,171,165,96,250,131,170,218,16,247,241,206,4,234,51,97,226,121,253,237,157,112,52,179,36,93,39,29,188,47,54,41,20,53,124,94,7,68,97,16,164,118,245,7,218,175,170,59,173,60,128,42,87,120,83,159,35,89,86,147,29,234,129,191,249,201,109,70,252,83,111,172,201,22,5,139,64,120,215,66,201,191,251,57,110,53,24,89,17,8,24,117,253,188,31,189,211,205,204,135,163,199,98,144,75,150,151,149,125,244,40,83,149,171,63,53,112,235,189,37,46,87,129,127,124,104,227,31,183,93,255,249,191,254,227,95,254,245,239,127,253,237,63,255,229,175,127,251,247,255,248,215,191,254,247,159,59,170,127,254,23,213,63,253,253,111,255,231,127,253,143,127,250,251,127,253,223,191,254,253,63,255,250,219,127,223,130,253,239,207,185,252,207,255,7,9,226,
|
||||
189,111,
|
||||
|
||||
|
|
|
|||
|
|
@ -4,7 +4,13 @@ topic "News and changes log";
|
|||
[{_}%EN-US
|
||||
[s0; [*R+184 Controls4U. News and changes log]&]
|
||||
[s0;%- &]
|
||||
[ {{1441:8559f0;g0;^t/25b/25 [s0;# [2 2011/03/23]]
|
||||
[ {{1441:8559f0;g0;^t/25b/25 [s0;# [2 2011/07/26]]
|
||||
:: [s0; [2 Removed internal MyBufferPainter]]
|
||||
:: [s0;# [2 2011/07/24]]
|
||||
:: [s0; [2 Added SliderCtrlX and StarIndicator]]
|
||||
:: [s0;# [2 2011/07/11]]
|
||||
:: [s0; [2 Added IsValid().]]
|
||||
:: [s0;# [2 2011/03/23]]
|
||||
:: [s0; [2 Changed IExplorerBrowser name to InternetExplorerBrowser.]]
|
||||
:: [s0;# [2 2010/08/11]]
|
||||
:: [s0; [2 Added Knob control.]]
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
TITLE("News and changes log")
|
||||
COMPRESSED
|
||||
120,156,133,84,253,79,219,48,16,253,87,78,2,38,96,131,216,249,40,105,250,83,233,152,84,77,48,9,134,52,169,202,192,77,174,169,69,106,35,219,41,67,136,255,125,231,166,124,100,180,90,164,72,177,125,247,238,222,123,231,76,96,119,151,125,97,59,236,63,79,246,21,103,162,169,93,62,17,105,52,56,188,236,81,30,167,188,136,71,156,241,94,24,159,196,33,139,88,24,243,48,225,105,26,243,147,36,141,250,189,94,86,136,123,39,181,202,39,79,55,207,123,103,23,71,215,87,48,177,108,0,147,195,203,207,60,141,97,164,149,51,186,182,241,245,49,92,224,131,5,161,74,40,230,66,85,104,161,214,85,254,41,247,241,123,71,64,31,240,244,196,227,152,103,105,146,244,103,108,80,177,193,111,23,132,201,148,222,21,234,14,76,66,8,25,231,1,139,130,48,202,243,44,91,87,11,97,180,194,44,97,124,246,231,190,214,6,205,169,209,15,22,13,40,177,64,112,26,198,202,161,81,232,254,57,63,126,69,121,65,103,1,75,3,206,59,232,195,178,36,236,239,74,79,161,104,
|
||||
25,109,204,235,109,206,187,66,119,229,132,107,172,239,99,88,56,185,196,95,47,56,118,35,80,18,68,93,32,210,14,22,186,68,176,82,85,53,17,154,27,20,30,91,42,16,101,41,189,9,30,125,65,38,202,183,211,253,243,159,7,199,107,141,87,240,99,138,154,75,11,133,176,8,231,72,146,0,9,87,18,226,92,88,80,218,129,69,101,9,110,41,221,227,202,44,223,185,44,70,181,46,238,60,145,97,227,171,248,78,100,27,47,60,31,225,176,220,66,36,140,187,251,173,36,175,42,212,194,90,252,40,2,235,7,60,12,194,126,71,132,182,149,241,66,84,8,101,59,176,48,21,197,93,101,116,227,199,74,147,177,190,45,103,132,178,247,194,160,114,29,242,239,242,179,117,31,215,22,135,246,244,21,99,255,96,197,217,224,66,47,253,48,249,208,111,210,221,102,217,91,204,182,94,147,238,254,86,221,26,235,71,31,173,165,50,86,55,166,216,78,63,218,14,233,221,162,153,120,143,156,145,181,72,138,250,227,82,99,107,143,66,226,65,1,83,164,114,51,170,56,167,53,37,75,7,
|
||||
166,81,22,166,143,244,105,177,158,109,233,129,39,155,236,163,178,63,140,36,125,133,31,188,181,106,180,121,166,74,75,171,198,79,41,160,106,22,190,148,109,42,186,237,52,33,190,24,5,26,148,183,55,74,56,161,4,126,188,71,109,89,22,118,247,71,52,208,30,225,221,255,36,207,159,159,91,115,33,255,11,63,198,129,54,
|
||||
120,156,133,84,127,79,219,48,16,253,42,39,1,19,99,131,196,249,81,218,244,175,210,49,169,154,96,19,29,19,82,149,129,27,95,91,139,212,70,182,3,67,136,239,190,115,82,160,25,173,86,169,82,98,223,123,119,247,222,93,38,176,187,27,126,14,119,194,255,252,178,47,56,227,85,233,242,9,239,198,253,131,139,14,225,24,225,98,22,179,144,117,162,228,56,137,194,56,140,18,22,165,172,219,77,216,113,218,141,123,157,78,86,240,59,39,181,202,39,79,215,207,123,167,231,135,151,99,152,216,176,15,147,131,139,79,172,155,192,80,43,103,116,105,147,203,35,56,199,7,11,92,9,40,22,92,205,209,66,169,231,249,135,220,199,239,29,2,61,192,211,19,75,18,150,117,211,180,55,11,251,243,176,255,219,5,81,58,165,127,205,186,3,147,8,162,144,177,32,60,14,162,78,158,103,217,42,91,4,23,184,212,247,40,64,42,135,70,241,18,206,30,79,170,217,12,205,15,94,31,189,6,183,73,146,22,201,64,8,162,24,151,82,160,25,58,83,94,213,229,142,29,55,35,37,100,
|
||||
193,157,222,194,195,216,6,158,145,253,197,137,106,255,227,209,38,80,28,68,113,11,52,172,85,33,216,233,159,187,82,27,52,39,70,63,88,52,160,248,18,193,105,24,213,173,161,251,231,254,61,123,24,132,221,205,37,125,83,122,10,69,227,201,70,92,103,51,110,140,142,84,112,149,245,117,12,10,39,239,241,234,133,199,110,36,74,131,184,77,68,238,195,82,11,4,43,213,188,164,134,22,6,185,168,29,3,46,132,244,99,228,217,151,52,134,242,237,118,255,236,39,233,215,76,73,77,63,162,168,133,180,80,112,139,112,134,36,9,144,112,130,24,23,220,130,210,14,44,42,75,116,247,210,61,190,248,231,100,49,44,117,113,235,27,25,84,62,139,175,68,54,241,220,247,195,29,138,45,141,172,13,201,206,155,36,175,42,148,220,90,124,47,66,216,11,88,20,68,189,150,8,77,41,163,37,159,35,136,102,229,96,202,139,219,185,209,149,95,12,77,198,250,178,156,225,202,222,113,131,202,181,154,95,195,103,171,58,46,45,14,236,201,43,199,254,199,186,103,179,90,135,58,244,171,116,
|
||||
55,89,246,22,179,173,214,180,125,190,85,183,202,250,229,69,107,41,141,213,149,41,182,183,31,111,167,244,110,209,76,172,51,103,100,45,146,162,254,90,104,108,236,81,72,125,80,192,20,41,221,140,50,46,232,157,192,210,129,169,148,133,233,35,61,90,44,103,91,106,96,233,38,251,40,237,119,35,73,95,238,7,111,165,26,29,158,42,97,233,173,242,83,10,168,170,165,79,101,171,57,125,175,104,66,124,50,10,52,40,111,174,21,119,92,113,124,191,71,77,218,48,106,159,15,105,160,61,195,218,23,49,207,159,159,27,115,33,255,11,147,243,185,205,
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,8 @@ topic "Controls4U_Demo review";
|
|||
[s0; [*R+184 Controls4U`_Demo]&]
|
||||
[s0;2 &]
|
||||
[s0; [2 Controls4U`_Demo package does a visual review of classes and
|
||||
features. Here there are some screenshots:]&]
|
||||
features in different tabs. Here there are some screenshots of
|
||||
them:]&]
|
||||
[s0;2 &]
|
||||
[s0; &]
|
||||
[s0;i150;O0; [*2 VLC ActiveX]&]
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -21,6 +21,16 @@ limited to:]&]
|
|||
[s0;i150;O0; [2 Mirek Fidler]&]
|
||||
[s0; &]
|
||||
[s0; &]
|
||||
[s0; [*2 SliderCtrlX control]&]
|
||||
[s0;*2 &]
|
||||
[s0; [2 Made by avpavp, jerson and jibe based on SliderCtrl.]&]
|
||||
[s0;2 &]
|
||||
[s0;2 &]
|
||||
[s0; [*2 StarIndicator control]&]
|
||||
[s0;2 &]
|
||||
[s0; [2 Made by jibe.]&]
|
||||
[s0;2 &]
|
||||
[s0; &]
|
||||
[s0; [*^http`:`/`/en`.wikipedia`.org`/wiki`/File`:Biandintz`_eta`_zaldiak`_`-`_modified2`.jpg^2 H
|
||||
orses picture]&]
|
||||
[s0;*2 &]
|
||||
|
|
@ -32,4 +42,10 @@ retouche by Richard Bartz.]&]
|
|||
[s0; [2 This picture was awarded Wikimedia Commons Picture of the Year
|
||||
2008]&]
|
||||
[s0; [2 ]&]
|
||||
[s0; ]
|
||||
[s0; &]
|
||||
[s0; [*2 SVG demo files]&]
|
||||
[s0;2 &]
|
||||
[s0; [2 SVG files used in Controls4U`_demo are taken from http://www.openclipart.org
|
||||
and licensed Public Domain Dedication, CC0 1.0 Universal (CC0
|
||||
1.0).]&]
|
||||
[s0;2 ]
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
TITLE("Credits")
|
||||
COMPRESSED
|
||||
120,156,133,83,107,79,219,64,16,252,43,43,149,242,129,130,99,92,16,52,8,85,33,129,66,31,80,65,81,91,69,33,119,177,55,246,146,243,157,123,94,199,37,85,255,123,215,33,164,81,21,21,127,241,61,230,102,246,230,102,251,176,177,17,110,135,47,194,103,190,118,15,199,186,50,60,232,255,26,254,126,121,122,185,115,123,3,253,50,60,130,254,214,245,171,221,195,61,232,58,203,222,153,114,239,54,128,174,199,132,184,28,108,14,230,144,197,175,191,21,65,39,102,154,226,55,136,23,232,5,68,118,158,64,17,92,48,212,174,50,9,88,199,48,66,40,92,89,210,200,32,176,131,196,1,103,88,226,146,0,106,226,204,85,220,44,3,217,169,54,149,110,176,25,154,2,198,222,229,237,193,95,102,88,140,105,119,63,60,186,106,214,238,50,230,66,181,85,75,181,234,186,86,129,220,144,114,205,88,20,42,112,62,85,173,177,243,85,174,90,100,19,252,169,130,34,43,212,91,86,199,121,153,170,205,212,177,83,199,209,254,254,65,164,54,239,34,184,39,109,211,123,170,102,25,61,
|
||||
171,19,187,4,211,202,87,205,72,232,187,162,215,186,80,59,151,162,132,133,119,169,215,178,170,61,83,108,240,81,182,21,239,189,62,120,35,50,239,113,60,134,119,70,51,47,84,86,189,235,216,4,180,49,80,160,43,26,199,50,205,144,233,41,66,130,83,52,174,192,4,122,231,93,246,6,202,2,99,18,232,3,140,196,189,198,106,67,57,177,0,216,253,223,179,8,122,218,18,26,248,224,202,53,155,159,180,60,87,238,160,39,136,51,76,208,224,58,16,121,156,192,25,37,6,253,63,49,89,166,101,197,51,180,42,168,105,66,82,63,233,197,203,52,115,213,58,35,49,168,125,34,214,39,100,121,166,134,200,90,13,103,218,8,112,162,134,106,71,13,115,151,208,152,48,137,84,112,95,164,226,224,185,243,37,150,80,80,204,149,199,117,17,188,212,57,182,159,112,206,194,35,63,207,32,119,149,101,77,54,128,19,204,36,20,77,236,114,232,136,150,91,238,149,16,107,219,4,183,68,180,193,138,149,157,74,162,234,219,114,249,137,120,115,229,25,83,61,207,40,156,122,143,150,209,147,
|
||||
222,134,19,93,254,168,80,250,73,216,252,195,246,60,224,160,193,35,187,42,150,144,143,30,224,154,226,76,251,68,160,158,103,171,10,31,41,70,91,74,233,210,129,186,233,52,161,201,115,39,37,117,152,61,201,75,147,220,230,70,14,99,199,72,21,16,5,225,202,241,47,25,45,109,129,90,151,160,107,145,145,72,124,21,175,243,198,251,37,223,231,5,202,141,231,157,247,29,181,135,40,12,15,215,36,7,6,127,0,247,199,115,83,
|
||||
120,156,133,84,129,110,26,71,16,253,149,145,154,88,109,130,143,243,213,86,18,162,168,194,16,39,78,26,39,74,234,180,21,34,236,112,55,112,3,123,187,215,221,61,168,169,250,239,157,61,19,76,44,212,32,36,150,221,183,243,102,223,188,153,17,60,120,144,118,210,31,210,239,124,122,67,154,97,163,195,120,244,207,228,223,135,47,175,142,175,63,193,200,167,207,97,244,232,227,227,147,167,167,48,176,38,56,171,253,233,117,2,3,71,5,7,63,62,26,183,144,237,207,232,81,6,253,60,240,138,254,128,124,139,222,66,228,228,43,40,131,203,0,107,219,232,2,140,13,48,37,168,173,247,60,213,4,193,66,97,33,148,228,105,23,0,214,28,74,219,132,184,13,108,86,168,27,140,216,146,116,13,51,103,171,222,248,46,50,108,215,124,114,150,62,127,31,247,190,148,33,212,170,167,186,170,187,94,175,85,34,47,228,10,3,213,181,74,172,155,171,238,204,186,166,82,93,54,5,253,173,146,186,172,213,47,65,189,168,252,92,29,205,109,176,234,69,118,118,246,36,83,71,95,50,88,
|
||||
48,154,249,130,155,77,201,223,229,201,109,65,243,198,53,113,37,225,7,194,215,189,84,199,87,194,68,181,179,115,135,178,139,46,112,174,233,150,182,155,159,254,252,228,153,208,188,161,217,12,94,105,12,97,203,178,175,93,223,20,128,90,67,77,182,142,138,149,24,160,196,21,65,65,43,210,182,166,2,134,175,7,193,105,240,53,229,44,208,27,152,138,122,81,106,205,21,7,1,4,251,255,154,101,48,68,195,164,225,173,245,7,14,223,161,148,171,178,48,20,196,5,21,164,233,16,136,29,45,225,130,11,77,238,158,77,246,220,242,73,115,65,46,166,187,115,204,33,195,188,195,130,96,122,3,184,170,229,219,129,5,57,111,13,160,104,177,96,49,208,20,189,60,75,118,238,226,37,247,180,203,190,161,13,232,46,77,193,57,6,235,238,17,31,226,141,36,247,3,222,197,219,43,61,25,149,172,121,201,82,6,198,173,193,226,127,213,189,96,169,115,239,92,28,84,176,9,27,53,161,128,106,178,65,45,192,165,154,168,99,53,169,108,193,51,166,34,83,201,162,158,139,17,94,91,231,
|
||||
201,67,205,121,104,28,29,18,230,10,43,234,125,197,201,251,111,227,135,13,84,182,49,1,217,36,112,78,165,120,59,118,79,5,125,225,178,187,51,15,57,154,216,127,158,200,36,123,142,232,55,210,113,174,39,53,92,74,137,223,187,64,115,108,91,13,94,58,71,38,144,99,236,192,57,250,191,26,146,177,32,209,220,77,167,237,83,64,112,20,108,147,151,173,110,31,57,47,209,21,2,117,97,179,207,240,43,231,100,188,164,46,131,4,227,192,144,48,85,101,37,165,126,8,142,197,176,28,171,41,151,169,175,37,11,200,146,116,239,250,111,37,239,100,129,53,122,192,181,208,136,5,126,23,173,171,168,253,46,222,135,45,202,206,218,1,242,39,161,131,44,77,159,30,104,128,111,28,242,249,149,116,148,152,124,38,117,243,7,172,17,1,237,25,52,209,123,108,246,230,163,154,180,87,37,121,8,184,36,115,171,93,116,73,175,27,167,67,34,109,106,114,205,181,200,18,61,210,26,89,223,74,82,192,135,102,42,107,24,218,74,106,36,77,214,218,84,228,232,192,96,144,194,73,146,194,
|
||||
181,17,197,156,71,13,63,110,183,126,186,115,231,248,63,60,131,242,52,
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue