ГЪРМИ ГОЛЯМ СКАНДАЛ! Вижте нова афера с машините - зам.-министърът Стойнов изпратил кода на шефа на "Информационно обслужване" (СНИМКИ)

Епицентър

ГЪРМИ ГОЛЯМ СКАНДАЛ! Вижте нова афера с машините - зам.-министърът Стойнов изпратил кода на шефа на "Информационно обслужване" (СНИМКИ)

233113
на 29.10.2023
ГЪРМИ ГОЛЯМ СКАНДАЛ! Вижте нова афера с машините - зам.-министърът Стойнов изпратил кода на шефа на Информационно обслужване (СНИМКИ)
Автор:   ПИК

Последвайте ни в Google News Showcase

Няколко медии тази сутрин получиха сигнал, свързан с поредната афера с кода на машините. Сигналът разкрива кореспонденция между зам.-министърът на електронното управление Михайл Стойнов и шефът на "Информационно обслужване" Ивайло Филипов. В мейлът, който изпраща Стойнов, той публикува и част от изходния код за машините с инструкции "може да се използва".

препоръчано

Публикуваме сигнала без редакторска намеса, както и кодът, който е изпратен до шефа на "Информационно обслужване":

Subject: СИГНАЛ: Кореспонденция за готвената измама с машините от заместник министър Стойнов

Уважаеми дами и господа,

Приложено изпращам e-mail кореспонденция, в която зам.-министър Михаил Стойнов изпраща части код на Ивайло Филипов, изпълнителен директор на "Информационно обслужване" АД, които извършват броене на резултатите от изборите, с инструкции това да "може да се използва", както и че го чака да каже дали е ок за да продължи със стъпките.

Поне на мен ми се струва че това е пряка подготовка за подмяна на резултати, с или без машини!

Предвид функциите ми на държавен служител моля да остана анонимен.

С пожелание за успех в борбата с измамите!

Г. Коларов

E-Mail log extract:

From: Mihail Stoynov
Date: Thursday, 26 October 2023 at 09:24
To: Ivaylo Filipov
Subject: За преглед

Здрасти,

Както говорихме, прегледах нещата и извадих следното, което може да ползваш при подготовката за уикенда. Когато си готов ми кажи и да задействам останалата част защото нямаме много време.

Ето извадката:

// Fix some compatibility issues
 
if (typeof console === "undefined") console = {};
 
if (typeof console.log === "undefined") console.log = function(n) {};
 
if (typeof Array.prototype.push === "undefined") {
 
Array.prototype.push = function(n) {
 
var i;
 
if (n instanceof Array) {
 
for (i = 0; i < n.length; i++) this[this.length] = n[i];
 
return this;
 
}
 
this[this.length] = n;
 
return this;
 
};
 
}
 
if (typeof Array.prototype.forEach === "undefined") {
 
Array.prototype.forEach = function(n) {
 
var i;
 
for (i = 0; i < this.length; i++) n(this[i]);
 
};
 
}
 
if (typeof Array.prototype.map === "undefined") {
 
Array.prototype.map = function(n) {
 
var i;
 
var a = [];
 
for (i = 0; i < this.length; i++) a[a.length] = n(this[i]);
 
return a;
 
};
 
}
 
if (typeof Object.prototype.keys === "undefined") {
 
Object.prototype.keys = function(n) {
 
var i;
 
var a = [];
 
for (i in n) {
 
a[a.length] = i;
 
}
 
return a;
 
};
 
}
 
if (typeof document.getElementsByClassName === "undefined") {
 
document.getElementsByClassName = function(n) {
 
var a = [];
 
var cl = n.split(/ +/);
 
var e = document.getElementsByTagName('*');
 
var i;
 
var j;
 
for (i = 0; i < e.length; i++) {
 
for (j = 0; j < cl.length; j++) {
 
if (RegExp(' ' + cl[j] + ' ').test(' ' + e[i].className + ' ')) {
 
a[a.length] = e[i];
 
break;
 
}
 
}
 
}
 
return a;
 
};
 
}
 
 
 
// ----
 
 
 
function BgElections2013codeV4() {
 
// Translation from Visual Basic to JavaScript
 
var InputData;
 
var x;
 
var y;
 
var MIR;
 
var Parties;
 
var Total;
 
var lowPerc = parseFloat(document.getElementById("lowPerc").value);
 
 
 
MIR = parseInt(document.getElementById("dim_mir").value);
 
Parties = parseInt(document.getElementById("dim_party").value);
 
 
 
var p = readSpecs();
 
console.log(p);
 
filterLowPerc(p, lowPerc);
 
Parties = p.party.length; // Remove all the parties with less than 4%
 
console.log(p); // Lets dump what we have here
 
 
 
// Now we have in P only the values of the parties to compute
 
var i;
 
var j;
 
var mandates = [];
 
var totMandates = []; // we shall see when we use the totMandates at all, as it looks like the globalMandates is more important
 
// Distrubute the mandates
 
for (i = 0; i < Parties; i++) {
 
mandates[i] = [];
 
for (j = 0; j < MIR; j++) {
 
mandates[i][j] = p.mir[j].mandates * p.party[i].partyVotes[j] / p.mir[j].reTotalSum; // Error, not global totalsum
 
}
 
totMandates[i] = sumArray(mandates[i]);
 
}
 
 
 
// Distribution of the seats between the parties on a national level, 1st step
 
var globalMandates = [];
 
for (i = 0; i < Parties; i++) globalMandates[i] = p.totalMandates * p.party[i].partySum / p.reTotalSum;
 
 
 
// integer parts and fractions are separated in two new tables
 
var intMandates = [];
 
var intTotMandates = [];
 
var fracMandates = [];
 
var fracTotMandates = [];
 
for (i = 0; i < Parties; i++) {
 
intMandates[i] = [];
 
fracMandates[i] = [];
 
for (j = 0; j < MIR; j++) {
 
intMandates[i][j] = parseInt(mandates[i][j]);
 
fracMandates[i][j] = mandates[i][j] - intMandates[i][j];
 
}
 
intTotMandates[i] = parseInt(globalMandates[i]); // globalMandates instead of totMandates
 
fracTotMandates[i] = globalMandates[i] - intTotMandates[i]; // globalMandates instead of totMandates
 
}
 
 
 
// Lets compute the non distributed seats
 
// Here we compute the non-distributed seats by constituency (MIR)
 
var undistSeats = [];
 
for (j = 0; j < MIR; j++) {
 
undistSeats[j] = p.mir[j].mandates - sumCol(intMandates, j);
 
}
 
var totUndMandates = p.totalMandates - sumArray(intTotMandates); //totalMandates is missing
 
 
 
// Make some cells bold (used in the calculation later, those are the first X (undistributed) mandates in the column)
 
var bolded = [];
 
for (i = 0; i < Parties; i++) {
 
bolded[i] = [];
 
for (j = 0; j < MIR; j++) {
 
bolded[i][j] = 0;
 
var r = rankCol(fracMandates[i][j], fracMandates, j);
 
if (r <= undistSeats[j]) bolded[i][j] = 1;
 
}
 
}
 
 
 
var totBolded = [];
 
for (i = 0; i < Parties; i++) {
 
totBolded[i] = 0;
 
if (rank(fracTotMandates[i], fracTotMandates) <= totUndMandates) totBolded[i] = 1;
 
}
 
 
 
var winMandates = [];
 
// Calculate number of seats per party STEP 1
 
for (i = 0; i < Parties; i++) {
 
winMandates[i] = parseInt(globalMandates[i]) + totBolded[i];
 
} //globalMandates instead of totMandates
 
 
 
// Lets calculate the difference between the direct mandates and the mandate redistribution
 
// It is possible to have situation where we have removal of a mandate instead of adding one, which is wrong
 
var parMandates = [];
 
for (i = 0; i < Parties; i++) {
 
parMandates[i] = winMandates[i] - sumArray(intMandates[i]);
 
if (parMandates[i] < 0) {
 
alert("Sorry, we have a problem in STEP2nwe can not distribute a negative number of seatsnPlease send a message to [email protected]");
 
}
 
}
 
 
 
//
 
var diffMandates = []; // Here we compute the excedence
 
for (i = 0; i < Parties; i++) {
 
diffMandates[i] = sumArray(bolded[i]) - parMandates[i];
 
}
 
 
 
// the table with the whole and the distributed mandates together
 
var tab4Mandates = [];
 
for (i = 0; i < Parties; i++) {
 
tab4Mandates[i] = [];
 
for (j = 0; j < MIR; j++) {
 
tab4Mandates[i][j] = bolded[i][j] + intMandates[i][j];
 
}
 
}
 
 
 
var tab4giveMandates = [];
 
var tab4wonMandates = [];
 
for (i = 0; i < Parties; i++) {
 
tab4giveMandates[i] = sumArray(tab4Mandates[i]);
 
tab4wonMandates[i] = winMandates[i];
 
}
 
 
 
// Table 3
 
var tab3sumMandates = [];
 
for (i = 0; i < Parties; i++) {
 
tab3sumMandates[i] = sumArray(intMandates[i]);
 
}
 
 
 
var tab3leftMandates = [];
 
for (i = 0; i < Parties; i++) {
 
tab3leftMandates[i] = winMandates[i] - tab3sumMandates[i];
 
}
 
 
 
// ------ Mandate redistribution
 
// From now on we work only on table 5 (fracMandates)
 
 
 
// In the original code there is a duplication, so I am skipping it, diffMandates[i] contains the excedence already
 
 
 
// The main calculation for the mandate redistribution
 
var Timer;
 
var finalTable = [];
 
 
 
var boldCellPlus = [];
 
// var boldCellMinus = [];
 
var Iplus;
 
var Jplus;
 
var Iminus;
 
// var Jminus;
 
// var K;
 
var PlusCounter;
 
var cellMinus = [];
 
// var c = [];
 
var Min;
 
 
 
var colorIndex = []; // We are moving the colorIndex outside
 
// --- Checked up to here
 
for (Timer = 0; Timer < 200; Timer++) {
 
PlusCounter = 0;
 
boldCellPlus = [];
 
for (i = 0; i < Parties; i++) {
 
if (diffMandates[i] > 0) PlusCounter++;
 
}
 
 
 
if (PlusCounter === 0) {
 
alert("След " + Timer + " повторения имаме резултат!");
 
 
 
for (i = 0; i < Parties; i++) {
 
finalTable[i] = [];
 
for (j = 0; j < MIR; j++) {
 
finalTable[i][j] = bolded[i][j] + intMandates[i][j];
 
}
 
}
 
// Decoration is not copied
 
// .....
 
break;
 
}
 
 
 
// Article 24
 
var bBold = 0;
 
for (i = 0; i < Parties; i++) {
 
if (typeof colorIndex[i] === 'undefined') colorIndex[i] = [];
 
boldCellPlus[i] = [];
 
for (j = 0; j < MIR; j++) {
 
boldCellPlus[i][j] = 0;
 
if (bolded[i][j] && diffMandates[i] > 0 && colorIndex[i][j] !== 3) {
 
boldCellPlus[i][j] = 1; // Union
 
bBold = 1;
 
}
 
}
 
}
 
if (!bBold) {
 
alert("Внимание, настъпи проблем след " + Timer + " повторения в стъпка 3! Не може да се намери решение: Моля информирайте ЦИК на [email protected]");
 
break;
 
}
 
var res = crossTableMinMax(fracMandates, boldCellPlus, 0);
 
Min = res.val;
 
Iplus = res.row;
 
Jplus = res.col;
 
 
 
cellMinus = [];
 
var bCell = 0;
 
for (k = 0; k < Parties; k++) {
 
cellMinus[k] = [];
 
if (bolded[k][Jplus] === 0 && colorIndex[k][Jplus] !== 3) {
 
cellMinus[k][Jplus] = 1;
 
bCell = 1;
 
}
 
}
 
if (bCell) {
 
res = crossTableMinMax(fracMandates, cellMinus, 1);
 
Iminus = res.row;
 
// var counter = Jplus; //???
 
bolded[Iplus][Jplus] = 0;
 
bolded[Iminus][Jplus] = 1; // fixed typo
 
colorIndex[Iplus][Jplus] = 3;
 
colorIndex[Iminus][Jplus] = 5;
 
for (i = 0; i < Parties; i++) {
 
diffMandates[i] = sumArray(bolded[i]) - parMandates[i];
 
}
 
} else {
 
for (i = 0; i < Parties; i++) colorIndex[i][Jplus] = 3; // red color according to art. 26
 
}
 
}
 
 
 
console.log(finalTable);
 
 
 
// Visualization need to happen here
 
 
 
var visual = document.getElementById("outResults");
 
 
 
var t = "";
 
 
 
 
 
// ----------- Visualize Table of fractions
 
var t3 = [];
 
t3[0] = [""].concat(p.mir.map(function(n) {
 
return n.name;
 
})).concat(["Сборно", "Спечелени"]);
 
t3[1] = ["Мандати за:"].concat(p.mir.map(function(n) {
 
return n.mandates;
 
})).concat([p.totalMandates, p.totalMandates]);
 
for (i = 0; i < mandates.length; i++) {
 
t3.push([p.party[i].partyName]);
 
for (j = 0; j < mandates[i].length; j++) t3[2 + i][1 + j] = mandates[i][j].toFixed(3);
 
}
 
for (i = 0; i < Parties; i++) {
 
t3[2 + i][1 + MIR] = globalMandates[i].toFixed(3);
 
t3[2 + i][2 + MIR] = winMandates[i];
 
}
 
t += "

" + buildTable(t3, 'table3');
 
 
 
var t3i = [];
 
t3i[0] = [""].concat(p.mir.map(function(n) {
 
return n.name;
 
})).concat(["Раздадени", "Остават за раздаване"]);
 
for (i = 0; i < intMandates.length; i++) {
 
t3i.push([p.party[i].partyName].concat(intMandates[i]).concat([sumArray(intMandates[i]), winMandates[i] - sumArray(intMandates[i])]));
 
}
 
t += "

" + buildTable(t3i, 'table3i');
 
 
 
var t3p = [];
 
t3p[0] = [""].concat(p.mir.map(function(n) {
 
return n.name;
 
})).concat(["Раздадени", "Спечелени"]);
 
for (i = 0; i < intMandates.length; i++) {
 
t3p.push([p.party[i].partyName].concat(tab4Mandates[i]).concat([tab4giveMandates[i], tab4wonMandates[i]]));
 
}
 
t += "

" + buildTable(t3p, 'table3p');
 
 
 
// ------------ Visualize the Frac table, we need to add the colours here
 
var t4 = [
 
[""].concat(p.mir.map(function(n) {
 
return n.name;
 
})).concat(["", ""]), [""]
 
];
 
t4[1][1 + MIR] = "Остават";
 
t4[1][2 + MIR] = "";
 
for (i = 0; i < Parties; i++) {
 
t4[i + 2] = [p.party[i].partyName];
 
for (j = 0; j < MIR; j++) {
 
t4[i + 2][j + 1] = {
 
value: fracMandates[i][j].toFixed(3),
 
attr: []
 
};
 
if (bolded[i][j]) t4[i + 2][j + 1].attr.push("bolded");
 
try {
 
if (colorIndex[i][j]) t4[i + 2][j + 1].attr.push("colorIndex" + colorIndex[i][j]);
 
} catch (e) {};
 
}
 
t4[i + 2][MIR + 1] = sumArray(bolded[i]);
 
t4[i + 2][MIR + 2] = diffMandates[i];
 
}
 
for (j = 0; j < MIR; j++) t4[1][1 + j] = sumCol(bolded, j);
 
 
 
// ------------ Visualize Table 5
 
var t5 = [];
 
t5[0] = [""].concat(p.mir.map(function(n) {
 
return n.name;
 
})).concat("Сборно");
 
t5[1] = ["Мандати за:"];
 
var sum = 0;
 
for (i = 0; i < finalTable[0].length; i++) {
 
t5[1][1 + i] = sumCol(finalTable, i);
 
sum += t5[1][1 + i];
 
}
 
t5[1][i + 1] = sum;
 
for (i = 0; i < finalTable.length; i++) {
 
t5.push([p.party[i].partyName].concat(finalTable[i]).concat(sumArray(finalTable[i])));
 
}
 
t += "

" + buildTable(t5, 'finalTable');
 
// ----------- End of Table 5
 
 
 
visual.innerHTML = t;
 
}
 
 
 
function crossTableMinMax(t1, t2, max) {
 
var i;
 
var j;
 
var val = 'x';
 
var row;
 
var col;
 
 
 
for (i = 0; i < t2.length; i++) {
 
for (j = 0; j < t2[i].length; j++) {
 
if (!t2[i][j]) continue;
 
if (val === 'x' || (max ? (val < t1[i][j]) : (val > t1[i][j]))) {
 
val = t1[i][j];
 
row = i;
 
col = j;
 
}
 
}
 
}
 
 
 
return {
 
val: val,
 
row: row,
 
col: col
 
};
 
}
 
 
 
function rank(num, arr, order) { // Rank in row
 
var i;
 
var a = arr.slice(0); //copy array
 
a.sort().reverse(); // Sort the array
 
if (order) a.sort(); // Sort the array progresively
 
i = a.indexOf(num);
 
if (i >= 0) return i + 1;
 
return arr.length + 1;
 
}
 
 
 
function rankCol(num, arr, col, order) { // Rank in col
 
var i;
 
var a = [];

Disclaimer: This email and any attachments to it may contain confidential information. Any distribution or disclosure of the content is not allowed. If you are not intended to be an addressee of the email and you have received this email in error, please notify immediately the sender by return email and delete the email immediately from your system without copying or disclosing its content to any person.

Следвайте ПИК в Телеграм и Туитър

Сподели:
Бомба x
САМО В ПИК! Топ хороскопът на Алена за последния работен ден от седмицата: Финансови проблеми за Рака, Лъвовете да не пътуват САМО В ПИК! Топ хороскопът на Алена за последния работен ден от седмицата: Финансови проблеми за Рака, Лъвовете да не пътуват
ПИК TV x
Иван Таков пред ПИК TV: Нинова пречи на лявото обединение! Ето какво трябва да направим, за да е успешно (ВИДЕО) Иван Таков пред ПИК TV: Нинова пречи на лявото обединение! Ето какво трябва да направим, за да е успешно (ВИДЕО)
ново
Днес: 6
hot
най-четени новини в момента
Сега
-
четат ПИК