program QuadraticFit;
uses
SysUtils, Math;
const
N = 25; // 5x5 точек данных
type
TMatrix = array[1..6, 1..7] of Double;
TVector = array[1..6] of Double;
procedure SolveLinearSystem(var Matrix: TMatrix; var Solution: TVector);
var
i, j, k, m: Integer;
Temp: Double;
begin
// Метод Гаусса с выбором главного элемента
for k := 1 to 6 do
begin
// Выбор главного элемента
m := k;
for i := k+1 to 6 do
if Abs(Matrix[i,k]) > Abs(Matrix[m,k]) then
m := i;
// Перестановка строк
if m <> k then
for j := k to 7 do
begin
Temp := Matrix[k,j];
Matrix[k,j] := Matrix[m,j];
Matrix[m,j] := Temp;
end;
// Исключение переменной
for i := k+1 to 6 do
begin
Temp := Matrix[i,k]/Matrix[k,k];
for j := k to 7 do
Matrix[i,j] := Matrix[i,j] - Temp*Matrix[k,j];
end;
end;
// Обратный ход
for i := 6 downto 1 do
begin
Solution[i] := Matrix[i,7];
for j := i+1 to 6 do
Solution[i] := Solution[i] - Matrix[i,j]*Solution[j];
Solution[i] := Solution[i]/Matrix[i,i];
end;
end;
var
x, y, z: array[1..N] of Double;
// Основные суммы
Sx, Sy, Sz, Sx2, Sy2, Sxy, Sxz, Syz: Double;
// Дополнительные суммы
Sx3, Sy3, Sx2y, Sxy2, Sx4, Sy4, Sx2y2, Sx3y, Sxy3, Sx2z, Sxyz, Sy2z: Double;
A, B, C, D, E, F: Double;
Matrix: TMatrix;
Solution: TVector;
i: Integer;
begin
// Инициализация данных
// Координаты x и y остаются прежними, z пересчитывается по формуле z = 5 + 4x + 3y + 2x² + xy
// Строка 1 (y=1)
x[1] := 0; y[1] := 1; z[1] := 5 + 4*0 + 3*1 + 2*0*0 + 0*1; // z = 8
x[2] := 1; y[2] := 1; z[2] := 5 + 4*1 + 3*1 + 2*1*1 + 1*1; // z = 15
x[3] := 2; y[3] := 1; z[3] := 5 + 4*2 + 3*1 + 2*2*2 + 2*1; // z = 26
x[4] := 3; y[4] := 1; z[4] := 5 + 4*3 + 3*1 + 2*3*3 + 3*1; // z = 41
x[5] := 4; y[5] := 1; z[5] := 5 + 4*4 + 3*1 + 2*4*4 + 4*1; // z = 60
// Строка 2 (y=2)
x[6] := 0; y[6] := 2; z[6] := 5 + 4*0 + 3*2 + 2*0*0 + 0*2; // z = 11
x[7] := 1; y[7] := 2; z[7] := 5 + 4*1 + 3*2 + 2*1*1 + 1*2; // z = 19
x[8] := 2; y[8] := 2; z[8] := 5 + 4*2 + 3*2 + 2*2*2 + 2*2; // z = 31
x[9] := 3; y[9] := 2; z[9] := 5 + 4*3 + 3*2 + 2*3*3 + 3*2; // z = 47
x[10] := 4; y[10] := 2; z[10] := 5 + 4*4 + 3*2 + 2*4*4 + 4*2; // z = 67
// Строка 3 (y=3)
x[11] := 0; y[11] := 3; z[11] := 5 + 4*0 + 3*3 + 2*0*0 + 0*3; // z = 14
x[12] := 1; y[12] := 3; z[12] := 5 + 4*1 + 3*3 + 2*1*1 + 1*3; // z = 23
x[13] := 2; y[13] := 3; z[13] := 5 + 4*2 + 3*3 + 2*2*2 + 2*3; // z = 36
x[14] := 3; y[14] := 3; z[14] := 5 + 4*3 + 3*3 + 2*3*3 + 3*3; // z = 53
x[15] := 4; y[15] := 3; z[15] := 5 + 4*4 + 3*3 + 2*4*4 + 4*3; // z = 74
// Строка 4 (y=4)
x[16] := 0; y[16] := 4; z[16] := 5 + 4*0 + 3*4 + 2*0*0 + 0*4; // z = 17
x[17] := 1; y[17] := 4; z[17] := 5 + 4*1 + 3*4 + 2*1*1 + 1*4; // z = 27
x[18] := 2; y[18] := 4; z[18] := 5 + 4*2 + 3*4 + 2*2*2 + 2*4; // z = 41
x[19] := 3; y[19] := 4; z[19] := 5 + 4*3 + 3*4 + 2*3*3 + 3*4; // z = 59
x[20] := 4; y[20] := 4; z[20] := 5 + 4*4 + 3*4 + 2*4*4 + 4*4; // z = 81
// Строка 5 (y=5)
x[21] := 0; y[21] := 5; z[21] := 5 + 4*0 + 3*5 + 2*0*0 + 0*5; // z = 20
x[22] := 1; y[22] := 5; z[22] := 5 + 4*1 + 3*5 + 2*1*1 + 1*5; // z = 31
x[23] := 2; y[23] := 5; z[23] := 5 + 4*2 + 3*5 + 2*2*2 + 2*5; // z = 46
x[24] := 3; y[24] := 5; z[24] := 5 + 4*3 + 3*5 + 2*3*3 + 3*5; // z = 65
x[25] := 4; y[25] := 5; z[25] := 5 + 4*4 + 3*5 + 2*4*4 + 4*5; // z = 88
// Обнуление всех сумм
Sx := 0; Sy := 0; Sz := 0;
Sx2 := 0; Sy2 := 0; Sxy := 0;
Sxz := 0; Syz := 0;
Sx3 := 0; Sy3 := 0;
Sx2y := 0; Sxy2 := 0;
Sx4 := 0; Sy4 := 0;
Sx2y2 := 0;
Sx3y := 0; Sxy3 := 0;
Sx2z := 0; Sxyz := 0; Sy2z := 0;
// Вычисление всех необходимых сумм
for i := 1 to N do
begin
Sx := Sx + x[i];
Sy := Sy + y[i];
Sz := Sz + z[i];
Sx2 := Sx2 + x[i]*x[i];
Sy2 := Sy2 + y[i]*y[i];
Sxy := Sxy + x[i]*y[i];
Sxz := Sxz + x[i]*z[i];
Syz := Syz + y[i]*z[i];
Sx3 := Sx3 + x[i]*x[i]*x[i];
Sy3 := Sy3 + y[i]*y[i]*y[i];
Sx2y := Sx2y + x[i]*x[i]*y[i];
Sxy2 := Sxy2 + x[i]*y[i]*y[i];
Sx4 := Sx4 + x[i]*x[i]*x[i]*x[i];
Sy4 := Sy4 + y[i]*y[i]*y[i]*y[i];
Sx2y2 := Sx2y2 + x[i]*x[i]*y[i]*y[i];
Sx3y := Sx3y + x[i]*x[i]*x[i]*y[i];
Sxy3 := Sxy3 + x[i]*y[i]*y[i]*y[i];
Sx2z := Sx2z + x[i]*x[i]*z[i];
Sxyz := Sxyz + x[i]*y[i]*z[i];
Sy2z := Sy2z + y[i]*y[i]*z[i];
end;
// Формирование системы уравнений
Matrix[1,1] := N; Matrix[1,2] := Sx; Matrix[1,3] := Sy; Matrix[1,4] := Sx2; Matrix[1,5] := Sxy; Matrix[1,6] := Sy2; Matrix[1,7] := Sz;
Matrix[2,1] := Sx; Matrix[2,2] := Sx2; Matrix[2,3] := Sxy; Matrix[2,4] := Sx3; Matrix[2,5] := Sx2y; Matrix[2,6] := Sxy2; Matrix[2,7] := Sxz;
Matrix[3,1] := Sy; Matrix[3,2] := Sxy; Matrix[3,3] := Sy2; Matrix[3,4] := Sxy2; Matrix[3,5] := Sy3; Matrix[3,6] := Sx2y; Matrix[3,7] := Syz;
Matrix[4,1] := Sx2; Matrix[4,2] := Sx3; Matrix[4,3] := Sx2y; Matrix[4,4] := Sx4; Matrix[4,5] := Sx3y; Matrix[4,6] := Sx2y2; Matrix[4,7] := Sx2z;
Matrix[5,1] := Sxy; Matrix[5,2] := Sx2y; Matrix[5,3] := Sy3; Matrix[5,4] := Sx3y; Matrix[5,5] := Sx2y2; Matrix[5,6] := Sxy3; Matrix[5,7] := Sxyz;
Matrix[6,1] := Sy2; Matrix[6,2] := Sxy2; Matrix[6,3] := Sx2y; Matrix[6,4] := Sx2y2; Matrix[6,5] := Sxy3; Matrix[6,6] := Sy4; Matrix[6,7] := Sy2z;
// Решение системы
SolveLinearSystem(Matrix, Solution);
// Присвоение коэффициентов
A := Solution[1];
B := Solution[2];
C := Solution[3];
D := Solution[4];
E := Solution[5];
F := Solution[6];
// Вывод результатов
Writeln('Коэффициенты функции F(x,y) = A + Bx + Cy + Dx² + Exy + Fy²:');
Writeln('A = ', A:0:6);
Writeln('B = ', B:0:6);
Writeln('C = ', C:0:6);
Writeln('D = ', D:0:6);
Writeln('E = ', E:0:6);
Writeln('F = ', F:0:6);
end.
cHJvZ3JhbSBRdWFkcmF0aWNGaXQ7Cgp1c2VzCiAgU3lzVXRpbHMsIE1hdGg7Cgpjb25zdAogIE4gPSAyNTsgLy8gNXg1INGC0L7Rh9C10Log0LTQsNC90L3Ri9GFCgp0eXBlCiAgVE1hdHJpeCA9IGFycmF5WzEuLjYsIDEuLjddIG9mIERvdWJsZTsKICBUVmVjdG9yID0gYXJyYXlbMS4uNl0gb2YgRG91YmxlOwoKcHJvY2VkdXJlIFNvbHZlTGluZWFyU3lzdGVtKHZhciBNYXRyaXg6IFRNYXRyaXg7IHZhciBTb2x1dGlvbjogVFZlY3Rvcik7CnZhcgogIGksIGosIGssIG06IEludGVnZXI7CiAgVGVtcDogRG91YmxlOwpiZWdpbgogIC8vINCc0LXRgtC+0LQg0JPQsNGD0YHRgdCwINGBINCy0YvQsdC+0YDQvtC8INCz0LvQsNCy0L3QvtCz0L4g0Y3Qu9C10LzQtdC90YLQsAogIGZvciBrIDo9IDEgdG8gNiBkbwogIGJlZ2luCiAgICAvLyDQktGL0LHQvtGAINCz0LvQsNCy0L3QvtCz0L4g0Y3Qu9C10LzQtdC90YLQsAogICAgbSA6PSBrOwogICAgZm9yIGkgOj0gaysxIHRvIDYgZG8KICAgICAgaWYgQWJzKE1hdHJpeFtpLGtdKSA+IEFicyhNYXRyaXhbbSxrXSkgdGhlbgogICAgICAgIG0gOj0gaTsKICAgIAogICAgLy8g0J/QtdGA0LXRgdGC0LDQvdC+0LLQutCwINGB0YLRgNC+0LoKICAgIGlmIG0gPD4gayB0aGVuCiAgICAgIGZvciBqIDo9IGsgdG8gNyBkbwogICAgICBiZWdpbgogICAgICAgIFRlbXAgOj0gTWF0cml4W2ssal07CiAgICAgICAgTWF0cml4W2ssal0gOj0gTWF0cml4W20sal07CiAgICAgICAgTWF0cml4W20sal0gOj0gVGVtcDsKICAgICAgZW5kOwoKICAgIC8vINCY0YHQutC70Y7Rh9C10L3QuNC1INC/0LXRgNC10LzQtdC90L3QvtC5CiAgICBmb3IgaSA6PSBrKzEgdG8gNiBkbwogICAgYmVnaW4KICAgICAgVGVtcCA6PSBNYXRyaXhbaSxrXS9NYXRyaXhbayxrXTsKICAgICAgZm9yIGogOj0gayB0byA3IGRvCiAgICAgICAgTWF0cml4W2ksal0gOj0gTWF0cml4W2ksal0gLSBUZW1wKk1hdHJpeFtrLGpdOwogICAgZW5kOwogIGVuZDsKCiAgLy8g0J7QsdGA0LDRgtC90YvQuSDRhdC+0LQKICBmb3IgaSA6PSA2IGRvd250byAxIGRvCiAgYmVnaW4KICAgIFNvbHV0aW9uW2ldIDo9IE1hdHJpeFtpLDddOwogICAgZm9yIGogOj0gaSsxIHRvIDYgZG8KICAgICAgU29sdXRpb25baV0gOj0gU29sdXRpb25baV0gLSBNYXRyaXhbaSxqXSpTb2x1dGlvbltqXTsKICAgIFNvbHV0aW9uW2ldIDo9IFNvbHV0aW9uW2ldL01hdHJpeFtpLGldOwogIGVuZDsKZW5kOwoKdmFyCiAgeCwgeSwgejogYXJyYXlbMS4uTl0gb2YgRG91YmxlOwogIC8vINCe0YHQvdC+0LLQvdGL0LUg0YHRg9C80LzRiwogIFN4LCBTeSwgU3osIFN4MiwgU3kyLCBTeHksIFN4eiwgU3l6OiBEb3VibGU7CiAgLy8g0JTQvtC/0L7Qu9C90LjRgtC10LvRjNC90YvQtSDRgdGD0LzQvNGLCiAgU3gzLCBTeTMsIFN4MnksIFN4eTIsIFN4NCwgU3k0LCBTeDJ5MiwgU3gzeSwgU3h5MywgU3gyeiwgU3h5eiwgU3kyejogRG91YmxlOwogIEEsIEIsIEMsIEQsIEUsIEY6IERvdWJsZTsKICBNYXRyaXg6IFRNYXRyaXg7CiAgU29sdXRpb246IFRWZWN0b3I7CiAgaTogSW50ZWdlcjsKYmVnaW4KICAvLyDQmNC90LjRhtC40LDQu9C40LfQsNGG0LjRjyDQtNCw0L3QvdGL0YUKICAvLyDQmtC+0L7RgNC00LjQvdCw0YLRiyB4INC4IHkg0L7RgdGC0LDRjtGC0YHRjyDQv9GA0LXQttC90LjQvNC4LCB6INC/0LXRgNC10YHRh9C40YLRi9Cy0LDQtdGC0YHRjyDQv9C+INGE0L7RgNC80YPQu9C1IHogPSA1ICsgNHggKyAzeSArIDJ4wrIgKyB4eQogIC8vINCh0YLRgNC+0LrQsCAxICh5PTEpCiAgeFsxXSA6PSAwOyB5WzFdIDo9IDE7IHpbMV0gOj0gNSArIDQqMCArIDMqMSArIDIqMCowICsgMCoxOyAvLyB6ID0gOAogIHhbMl0gOj0gMTsgeVsyXSA6PSAxOyB6WzJdIDo9IDUgKyA0KjEgKyAzKjEgKyAyKjEqMSArIDEqMTsgLy8geiA9IDE1CiAgeFszXSA6PSAyOyB5WzNdIDo9IDE7IHpbM10gOj0gNSArIDQqMiArIDMqMSArIDIqMioyICsgMioxOyAvLyB6ID0gMjYKICB4WzRdIDo9IDM7IHlbNF0gOj0gMTsgels0XSA6PSA1ICsgNCozICsgMyoxICsgMiozKjMgKyAzKjE7IC8vIHogPSA0MQogIHhbNV0gOj0gNDsgeVs1XSA6PSAxOyB6WzVdIDo9IDUgKyA0KjQgKyAzKjEgKyAyKjQqNCArIDQqMTsgLy8geiA9IDYwCiAgCiAgLy8g0KHRgtGA0L7QutCwIDIgKHk9MikKICB4WzZdIDo9IDA7IHlbNl0gOj0gMjsgels2XSA6PSA1ICsgNCowICsgMyoyICsgMiowKjAgKyAwKjI7IC8vIHogPSAxMQogIHhbN10gOj0gMTsgeVs3XSA6PSAyOyB6WzddIDo9IDUgKyA0KjEgKyAzKjIgKyAyKjEqMSArIDEqMjsgLy8geiA9IDE5CiAgeFs4XSA6PSAyOyB5WzhdIDo9IDI7IHpbOF0gOj0gNSArIDQqMiArIDMqMiArIDIqMioyICsgMioyOyAvLyB6ID0gMzEKICB4WzldIDo9IDM7IHlbOV0gOj0gMjsgels5XSA6PSA1ICsgNCozICsgMyoyICsgMiozKjMgKyAzKjI7IC8vIHogPSA0NwogIHhbMTBdIDo9IDQ7IHlbMTBdIDo9IDI7IHpbMTBdIDo9IDUgKyA0KjQgKyAzKjIgKyAyKjQqNCArIDQqMjsgLy8geiA9IDY3CiAgCiAgLy8g0KHRgtGA0L7QutCwIDMgKHk9MykKICB4WzExXSA6PSAwOyB5WzExXSA6PSAzOyB6WzExXSA6PSA1ICsgNCowICsgMyozICsgMiowKjAgKyAwKjM7IC8vIHogPSAxNAogIHhbMTJdIDo9IDE7IHlbMTJdIDo9IDM7IHpbMTJdIDo9IDUgKyA0KjEgKyAzKjMgKyAyKjEqMSArIDEqMzsgLy8geiA9IDIzCiAgeFsxM10gOj0gMjsgeVsxM10gOj0gMzsgelsxM10gOj0gNSArIDQqMiArIDMqMyArIDIqMioyICsgMiozOyAvLyB6ID0gMzYKICB4WzE0XSA6PSAzOyB5WzE0XSA6PSAzOyB6WzE0XSA6PSA1ICsgNCozICsgMyozICsgMiozKjMgKyAzKjM7IC8vIHogPSA1MwogIHhbMTVdIDo9IDQ7IHlbMTVdIDo9IDM7IHpbMTVdIDo9IDUgKyA0KjQgKyAzKjMgKyAyKjQqNCArIDQqMzsgLy8geiA9IDc0CiAgCiAgLy8g0KHRgtGA0L7QutCwIDQgKHk9NCkKICB4WzE2XSA6PSAwOyB5WzE2XSA6PSA0OyB6WzE2XSA6PSA1ICsgNCowICsgMyo0ICsgMiowKjAgKyAwKjQ7IC8vIHogPSAxNwogIHhbMTddIDo9IDE7IHlbMTddIDo9IDQ7IHpbMTddIDo9IDUgKyA0KjEgKyAzKjQgKyAyKjEqMSArIDEqNDsgLy8geiA9IDI3CiAgeFsxOF0gOj0gMjsgeVsxOF0gOj0gNDsgelsxOF0gOj0gNSArIDQqMiArIDMqNCArIDIqMioyICsgMio0OyAvLyB6ID0gNDEKICB4WzE5XSA6PSAzOyB5WzE5XSA6PSA0OyB6WzE5XSA6PSA1ICsgNCozICsgMyo0ICsgMiozKjMgKyAzKjQ7IC8vIHogPSA1OQogIHhbMjBdIDo9IDQ7IHlbMjBdIDo9IDQ7IHpbMjBdIDo9IDUgKyA0KjQgKyAzKjQgKyAyKjQqNCArIDQqNDsgLy8geiA9IDgxCiAgCiAgLy8g0KHRgtGA0L7QutCwIDUgKHk9NSkKICB4WzIxXSA6PSAwOyB5WzIxXSA6PSA1OyB6WzIxXSA6PSA1ICsgNCowICsgMyo1ICsgMiowKjAgKyAwKjU7IC8vIHogPSAyMAogIHhbMjJdIDo9IDE7IHlbMjJdIDo9IDU7IHpbMjJdIDo9IDUgKyA0KjEgKyAzKjUgKyAyKjEqMSArIDEqNTsgLy8geiA9IDMxCiAgeFsyM10gOj0gMjsgeVsyM10gOj0gNTsgelsyM10gOj0gNSArIDQqMiArIDMqNSArIDIqMioyICsgMio1OyAvLyB6ID0gNDYKICB4WzI0XSA6PSAzOyB5WzI0XSA6PSA1OyB6WzI0XSA6PSA1ICsgNCozICsgMyo1ICsgMiozKjMgKyAzKjU7IC8vIHogPSA2NQogIHhbMjVdIDo9IDQ7IHlbMjVdIDo9IDU7IHpbMjVdIDo9IDUgKyA0KjQgKyAzKjUgKyAyKjQqNCArIDQqNTsgLy8geiA9IDg4CgogIC8vINCe0LHQvdGD0LvQtdC90LjQtSDQstGB0LXRhSDRgdGD0LzQvAogIFN4IDo9IDA7IFN5IDo9IDA7IFN6IDo9IDA7CiAgU3gyIDo9IDA7IFN5MiA6PSAwOyBTeHkgOj0gMDsKICBTeHogOj0gMDsgU3l6IDo9IDA7CiAgU3gzIDo9IDA7IFN5MyA6PSAwOwogIFN4MnkgOj0gMDsgU3h5MiA6PSAwOwogIFN4NCA6PSAwOyBTeTQgOj0gMDsKICBTeDJ5MiA6PSAwOwogIFN4M3kgOj0gMDsgU3h5MyA6PSAwOwogIFN4MnogOj0gMDsgU3h5eiA6PSAwOyBTeTJ6IDo9IDA7CgogIC8vINCS0YvRh9C40YHQu9C10L3QuNC1INCy0YHQtdGFINC90LXQvtCx0YXQvtC00LjQvNGL0YUg0YHRg9C80LwKICBmb3IgaSA6PSAxIHRvIE4gZG8KICBiZWdpbgogICAgU3ggOj0gU3ggKyB4W2ldOwogICAgU3kgOj0gU3kgKyB5W2ldOwogICAgU3ogOj0gU3ogKyB6W2ldOwogICAgU3gyIDo9IFN4MiArIHhbaV0qeFtpXTsKICAgIFN5MiA6PSBTeTIgKyB5W2ldKnlbaV07CiAgICBTeHkgOj0gU3h5ICsgeFtpXSp5W2ldOwogICAgU3h6IDo9IFN4eiArIHhbaV0qeltpXTsKICAgIFN5eiA6PSBTeXogKyB5W2ldKnpbaV07CiAgICBTeDMgOj0gU3gzICsgeFtpXSp4W2ldKnhbaV07CiAgICBTeTMgOj0gU3kzICsgeVtpXSp5W2ldKnlbaV07CiAgICBTeDJ5IDo9IFN4MnkgKyB4W2ldKnhbaV0qeVtpXTsKICAgIFN4eTIgOj0gU3h5MiArIHhbaV0qeVtpXSp5W2ldOwogICAgU3g0IDo9IFN4NCArIHhbaV0qeFtpXSp4W2ldKnhbaV07CiAgICBTeTQgOj0gU3k0ICsgeVtpXSp5W2ldKnlbaV0qeVtpXTsKICAgIFN4MnkyIDo9IFN4MnkyICsgeFtpXSp4W2ldKnlbaV0qeVtpXTsKICAgIFN4M3kgOj0gU3gzeSArIHhbaV0qeFtpXSp4W2ldKnlbaV07CiAgICBTeHkzIDo9IFN4eTMgKyB4W2ldKnlbaV0qeVtpXSp5W2ldOwogICAgU3gyeiA6PSBTeDJ6ICsgeFtpXSp4W2ldKnpbaV07CiAgICBTeHl6IDo9IFN4eXogKyB4W2ldKnlbaV0qeltpXTsKICAgIFN5MnogOj0gU3kyeiArIHlbaV0qeVtpXSp6W2ldOwogIGVuZDsKCiAgLy8g0KTQvtGA0LzQuNGA0L7QstCw0L3QuNC1INGB0LjRgdGC0LXQvNGLINGD0YDQsNCy0L3QtdC90LjQuQogIE1hdHJpeFsxLDFdIDo9IE47ICAgIE1hdHJpeFsxLDJdIDo9IFN4OyAgIE1hdHJpeFsxLDNdIDo9IFN5OyAgIE1hdHJpeFsxLDRdIDo9IFN4MjsgIE1hdHJpeFsxLDVdIDo9IFN4eTsgIE1hdHJpeFsxLDZdIDo9IFN5MjsgIE1hdHJpeFsxLDddIDo9IFN6OwogIE1hdHJpeFsyLDFdIDo9IFN4OyAgIE1hdHJpeFsyLDJdIDo9IFN4MjsgIE1hdHJpeFsyLDNdIDo9IFN4eTsgIE1hdHJpeFsyLDRdIDo9IFN4MzsgIE1hdHJpeFsyLDVdIDo9IFN4Mnk7IE1hdHJpeFsyLDZdIDo9IFN4eTI7IE1hdHJpeFsyLDddIDo9IFN4ejsKICBNYXRyaXhbMywxXSA6PSBTeTsgICBNYXRyaXhbMywyXSA6PSBTeHk7ICBNYXRyaXhbMywzXSA6PSBTeTI7ICBNYXRyaXhbMyw0XSA6PSBTeHkyOyBNYXRyaXhbMyw1XSA6PSBTeTM7ICBNYXRyaXhbMyw2XSA6PSBTeDJ5OyBNYXRyaXhbMyw3XSA6PSBTeXo7CiAgTWF0cml4WzQsMV0gOj0gU3gyOyAgTWF0cml4WzQsMl0gOj0gU3gzOyAgTWF0cml4WzQsM10gOj0gU3gyeTsgTWF0cml4WzQsNF0gOj0gU3g0OyAgTWF0cml4WzQsNV0gOj0gU3gzeTsgTWF0cml4WzQsNl0gOj0gU3gyeTI7IE1hdHJpeFs0LDddIDo9IFN4Mno7CiAgTWF0cml4WzUsMV0gOj0gU3h5OyAgTWF0cml4WzUsMl0gOj0gU3gyeTsgTWF0cml4WzUsM10gOj0gU3kzOyAgTWF0cml4WzUsNF0gOj0gU3gzeTsgTWF0cml4WzUsNV0gOj0gU3gyeTI7IE1hdHJpeFs1LDZdIDo9IFN4eTM7IE1hdHJpeFs1LDddIDo9IFN4eXo7CiAgTWF0cml4WzYsMV0gOj0gU3kyOyAgTWF0cml4WzYsMl0gOj0gU3h5MjsgTWF0cml4WzYsM10gOj0gU3gyeTsgTWF0cml4WzYsNF0gOj0gU3gyeTI7IE1hdHJpeFs2LDVdIDo9IFN4eTM7IE1hdHJpeFs2LDZdIDo9IFN5NDsgIE1hdHJpeFs2LDddIDo9IFN5Mno7CgogIC8vINCg0LXRiNC10L3QuNC1INGB0LjRgdGC0LXQvNGLCiAgU29sdmVMaW5lYXJTeXN0ZW0oTWF0cml4LCBTb2x1dGlvbik7CgogIC8vINCf0YDQuNGB0LLQvtC10L3QuNC1INC60L7RjdGE0YTQuNGG0LjQtdC90YLQvtCyCiAgQSA6PSBTb2x1dGlvblsxXTsKICBCIDo9IFNvbHV0aW9uWzJdOwogIEMgOj0gU29sdXRpb25bM107CiAgRCA6PSBTb2x1dGlvbls0XTsKICBFIDo9IFNvbHV0aW9uWzVdOwogIEYgOj0gU29sdXRpb25bNl07CgogIC8vINCS0YvQstC+0LQg0YDQtdC30YPQu9GM0YLQsNGC0L7QsgogIFdyaXRlbG4oJ9Ca0L7RjdGE0YTQuNGG0LjQtdC90YLRiyDRhNGD0L3QutGG0LjQuCBGKHgseSkgPSBBICsgQnggKyBDeSArIER4wrIgKyBFeHkgKyBGecKyOicpOwogIFdyaXRlbG4oJ0EgPSAnLCBBOjA6Nik7CiAgV3JpdGVsbignQiA9ICcsIEI6MDo2KTsKICBXcml0ZWxuKCdDID0gJywgQzowOjYpOwogIFdyaXRlbG4oJ0QgPSAnLCBEOjA6Nik7CiAgV3JpdGVsbignRSA9ICcsIEU6MDo2KTsKICBXcml0ZWxuKCdGID0gJywgRjowOjYpOwplbmQu