diff --git a/src/core/operations/Lorenz.mjs b/src/core/operations/Lorenz.mjs index 169ef848..c1b29fdd 100644 --- a/src/core/operations/Lorenz.mjs +++ b/src/core/operations/Lorenz.mjs @@ -1,6 +1,6 @@ /** * Emulation of the Lorenz SZ40/42a/42b cipher attachment. - * + * * @author VirtualColossus [martin@virtualcolossus.co.uk] * @copyright Crown Copyright 2019 * @license Apache-2.0 @@ -36,26 +36,26 @@ class Lorenz extends Operation { name: "Wheel Pattern", type: "argSelector", "value": [ - { - name: "KH Pattern", - off: [19,20,21,22,23,24,25,26,27,28,29,30], - }, - { - name: "ZMUG Pattern", - off: [19,20,21,22,23,24,25,26,27,28,29,30] - }, - { - name: "BREAM Pattern", - off: [19,20,21,22,23,24,25,26,27,28,29,30] - }, - { - name: "No Pattern", - off: [19,20,21,22,23,24,25,26,27,28,29,30] - }, - { - name: "Custom", - on: [19,20,21,22,23,24,25,26,27,28,29,30] - } + { + name: "KH Pattern", + off: [19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30] + }, + { + name: "ZMUG Pattern", + off: [19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30] + }, + { + name: "BREAM Pattern", + off: [19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30] + }, + { + name: "No Pattern", + off: [19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30] + }, + { + name: "Custom", + on: [19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30] + } ] }, { @@ -66,16 +66,16 @@ class Lorenz extends Operation { name: "Mode", type: "argSelector", "value": [ - { - name: "Send", - on: [4], - off: [5] - }, - { - name: "Receive", - off: [4], - on: [5] - } + { + name: "Send", + on: [4], + off: [5] + }, + { + name: "Receive", + off: [4], + on: [5] + } ] }, { @@ -89,129 +89,129 @@ class Lorenz extends Operation { "value": ["Plaintext", "ITA2"] }, { - name: "ITA2 Format", - type: "option", + name: "ITA2 Format", + type: "option", "value": ["5/8/9", "+/-/."] }, { - name: "Ψ1 start (1-43)", - type: "number", - "value": 1 + name: "Ψ1 start (1-43)", + type: "number", + "value": 1 }, { - name: "Ψ2 start (1-47)", - type: "number", - "value": 1 + name: "Ψ2 start (1-47)", + type: "number", + "value": 1 }, { - name: "Ψ3 start (1-51)", - type: "number", - "value": 1 + name: "Ψ3 start (1-51)", + type: "number", + "value": 1 }, { - name: "Ψ4 start (1-53)", - type: "number", - "value": 1 + name: "Ψ4 start (1-53)", + type: "number", + "value": 1 }, { - name: "Ψ5 start (1-59)", - type: "number", - "value": 1 + name: "Ψ5 start (1-59)", + type: "number", + "value": 1 }, { - name: "Μ37 start (1-37)", - type: "number", - "value": 1 + name: "Μ37 start (1-37)", + type: "number", + "value": 1 }, { - name: "Μ61 start (1-61)", - type: "number", - "value": 1 + name: "Μ61 start (1-61)", + type: "number", + "value": 1 }, { - name: "Χ1 start (1-41)", - type: "number", - "value": 1 + name: "Χ1 start (1-41)", + type: "number", + "value": 1 }, { - name: "Χ2 start (1-31)", - type: "number", - "value": 1 + name: "Χ2 start (1-31)", + type: "number", + "value": 1 }, { - name: "Χ3 start (1-29)", - type: "number", - "value": 1 + name: "Χ3 start (1-29)", + type: "number", + "value": 1 }, { - name: "Χ4 start (1-26)", - type: "number", - "value": 1 + name: "Χ4 start (1-26)", + type: "number", + "value": 1 }, { - name: "Χ5 start (1-23)", - type: "number", - "value": 1 + name: "Χ5 start (1-23)", + type: "number", + "value": 1 }, { - name: "Ψ1 lugs (43)", - type: "string", - value: ".x...xx.x.x..xxx.x.x.xxxx.x.x.x.x.x..x.xx.x" + name: "Ψ1 lugs (43)", + type: "string", + value: ".x...xx.x.x..xxx.x.x.xxxx.x.x.x.x.x..x.xx.x" }, { - name: "Ψ2 lugs (47)", - type: "string", - value: ".xx.x.xxx..x.x.x..x.xx.x.xxx.x....x.xx.x.x.x..x" + name: "Ψ2 lugs (47)", + type: "string", + value: ".xx.x.xxx..x.x.x..x.xx.x.xxx.x....x.xx.x.x.x..x" }, { - name: "Ψ3 lugs (51)", - type: "string", - value: ".x.x.x..xxx....x.x.xx.x.x.x..xxx.x.x..x.x.xx..x.x.x" + name: "Ψ3 lugs (51)", + type: "string", + value: ".x.x.x..xxx....x.x.xx.x.x.x..xxx.x.x..x.x.xx..x.x.x" }, { - name: "Ψ4 lugs (53)", - type: "string", - value: ".xx...xxxxx.x.x.xx...x.xx.x.x..x.x.xx.x..x.x.x.x.x.x." + name: "Ψ4 lugs (53)", + type: "string", + value: ".xx...xxxxx.x.x.xx...x.xx.x.x..x.x.xx.x..x.x.x.x.x.x." }, { - name: "Ψ5 lugs (59)", - type: "string", - value: "xx...xx.x..x.xx.x...x.x.x.x.x.x.x.x.xx..xxxx.x.x...xx.x..x." + name: "Ψ5 lugs (59)", + type: "string", + value: "xx...xx.x..x.xx.x...x.x.x.x.x.x.x.x.xx..xxxx.x.x...xx.x..x." }, { - name: "Μ37 lugs (37)", - type: "string", - value: "x.x.x.x.x.x...x.x.x...x.x.x...x.x...." + name: "Μ37 lugs (37)", + type: "string", + value: "x.x.x.x.x.x...x.x.x...x.x.x...x.x...." }, { - name: "Μ61 lugs (61)", - type: "string", - value: ".xxxx.xxxx.xxx.xxxx.xx....xxx.xxxx.xxxx.xxxx.xxxx.xxx.xxxx..." + name: "Μ61 lugs (61)", + type: "string", + value: ".xxxx.xxxx.xxx.xxxx.xx....xxx.xxxx.xxxx.xxxx.xxxx.xxx.xxxx..." }, { - name: "Χ1 lugs (41)", - type: "string", - value: ".x...xxx.x.xxxx.x...x.x..xxx....xx.xxxx.." + name: "Χ1 lugs (41)", + type: "string", + value: ".x...xxx.x.xxxx.x...x.x..xxx....xx.xxxx.." }, { - name: "Χ2 lugs (31)", - type: "string", - value: "x..xxx...x.xxxx..xx..x..xx.xx.." + name: "Χ2 lugs (31)", + type: "string", + value: "x..xxx...x.xxxx..xx..x..xx.xx.." }, { - name: "Χ3 lugs (29)", - type: "string", - value: "..xx..x.xxx...xx...xx..xx.xx." + name: "Χ3 lugs (29)", + type: "string", + value: "..xx..x.xxx...xx...xx..xx.xx." }, { - name: "Χ4 lugs (26)", - type: "string", - value: "xx..x..xxxx..xx.xxx....x.." + name: "Χ4 lugs (26)", + type: "string", + value: "xx..x..xxxx..xx.xxx....x.." }, { - name: "Χ5 lugs (23)", - type: "string", - value: "xx..xx....xxxx.x..x.x.." + name: "Χ5 lugs (23)", + type: "string", + value: "xx..xx....xxxx.x..x.x.." } ]; } @@ -222,330 +222,325 @@ class Lorenz extends Operation { * @returns {string} */ run(input, args) { - - const model = args[0], - pattern = args[1], - kt = args[2], - mode = args[3], - format = args[6]; - var intype = args[4], - outtype = args[5], - s1 = args[7], - s2 = args[8], - s3 = args[9], - s4 = args[10], - s5 = args[11], - m37 = args[12], - m61 = args[13], - x1 = args[14], - x2 = args[15], - x3 = args[16], - x4 = args[17], - x5 = args[18], - lugs1 = args[19], - lugs2 = args[20], - lugs3 = args[21], - lugs4 = args[22], - lugs5 = args[23], - lugm37 = args[24], - lugm61 = args[25], - lugx1 = args[26], - lugx2 = args[27], - lugx3 = args[28], - lugx4 = args[29], - lugx5 = args[30], - figShifted = false; + const model = args[0], + pattern = args[1], + kt = args[2], + mode = args[3], + format = args[6]; + + let intype = args[4], + outtype = args[5], + s1 = args[7], + s2 = args[8], + s3 = args[9], + s4 = args[10], + s5 = args[11], + m37 = args[12], + m61 = args[13], + x1 = args[14], + x2 = args[15], + x3 = args[16], + x4 = args[17], + x5 = args[18], + lugs1 = args[19], + lugs2 = args[20], + lugs3 = args[21], + lugs4 = args[22], + lugs5 = args[23], + lugm37 = args[24], + lugm61 = args[25], + lugx1 = args[26], + lugx2 = args[27], + lugx3 = args[28], + lugx4 = args[29], + lugx5 = args[30], + figShifted = false; this.reverseTable(); - - if (s1<1 || s1>43) throw new OperationError("Ψ1 start must be between 1 and 43"); - if (s2<1 || s2>47) throw new OperationError("Ψ2 start must be between 1 and 47"); - if (s3<1 || s3>51) throw new OperationError("Ψ3 start must be between 1 and 51"); - if (s4<1 || s4>53) throw new OperationError("Ψ4 start must be between 1 and 53"); - if (s5<1 || s5>59) throw new OperationError("Ψ5 start must be between 1 and 59"); - if (m37<1 || m37>37) throw new OperationError("Μ37 start must be between 1 and 37"); - if (m61<1 || m61>61) throw new OperationError("Μ61 start must be between 1 and 61"); - if (x1<1 || x1>41) throw new OperationError("Χ1 start must be between 1 and 41"); - if (x2<1 || x2>31) throw new OperationError("Χ2 start must be between 1 and 31"); - if (x3<1 || x3>29) throw new OperationError("Χ3 start must be between 1 and 29"); - if (x4<1 || x4>26) throw new OperationError("Χ4 start must be between 1 and 26"); - if (x5<1 || x5>23) throw new OperationError("Χ5 start must be between 1 and 23"); + + if (s1<1 || s1>43) throw new OperationError("Ψ1 start must be between 1 and 43"); + if (s2<1 || s2>47) throw new OperationError("Ψ2 start must be between 1 and 47"); + if (s3<1 || s3>51) throw new OperationError("Ψ3 start must be between 1 and 51"); + if (s4<1 || s4>53) throw new OperationError("Ψ4 start must be between 1 and 53"); + if (s5<1 || s5>59) throw new OperationError("Ψ5 start must be between 1 and 59"); + if (m37<1 || m37>37) throw new OperationError("Μ37 start must be between 1 and 37"); + if (m61<1 || m61>61) throw new OperationError("Μ61 start must be between 1 and 61"); + if (x1<1 || x1>41) throw new OperationError("Χ1 start must be between 1 and 41"); + if (x2<1 || x2>31) throw new OperationError("Χ2 start must be between 1 and 31"); + if (x3<1 || x3>29) throw new OperationError("Χ3 start must be between 1 and 29"); + if (x4<1 || x4>26) throw new OperationError("Χ4 start must be between 1 and 26"); + if (x5<1 || x5>23) throw new OperationError("Χ5 start must be between 1 and 23"); // Initialise chosen wheel pattern - if(pattern=="Custom") { - var re = new RegExp("^[\.xX]*$"); - if (lugs1.length != 43 || !re.test(lugs1) ) throw new OperationError("Ψ1 custom lugs must be 43 long and can only include . or x "); - if (lugs2.length != 47 || !re.test(lugs2) ) throw new OperationError("Ψ2 custom lugs must be 47 long and can only include . or x"); - if (lugs3.length != 51 || !re.test(lugs3) ) throw new OperationError("Ψ3 custom lugs must be 51 long and can only include . or x"); - if (lugs4.length != 53 || !re.test(lugs4) ) throw new OperationError("Ψ4 custom lugs must be 53 long and can only include . or x"); - if (lugs5.length != 59 || !re.test(lugs5) ) throw new OperationError("Ψ5 custom lugs must be 59 long and can only include . or x"); - if (lugm37.length != 37 || !re.test(lugm37) ) throw new OperationError("M37 custom lugs must be 37 long and can only include . or x"); - if (lugm61.length != 61 || !re.test(lugm61) ) throw new OperationError("M61 custom lugs must be 61 long and can only include . or x"); - if (lugx1.length != 41 || !re.test(lugx1) ) throw new OperationError("Χ1 custom lugs must be 41 long and can only include . or x"); - if (lugx2.length != 31 || !re.test(lugx2) ) throw new OperationError("Χ2 custom lugs must be 31 long and can only include . or x"); - if (lugx3.length != 29 || !re.test(lugx3) ) throw new OperationError("Χ3 custom lugs must be 29 long and can only include . or x"); - if (lugx4.length != 26 || !re.test(lugx4) ) throw new OperationError("Χ4 custom lugs must be 26 long and can only include . or x"); - if (lugx5.length != 23 || !re.test(lugx5) ) throw new OperationError("Χ5 custom lugs must be 23 long and can only include . or x"); - var chosenSetting = INIT_PATTERNS["No Pattern"]; - chosenSetting["S"][1] = this.readLugs(lugs1); - chosenSetting["S"][2] = this.readLugs(lugs2); - chosenSetting["S"][3] = this.readLugs(lugs3); - chosenSetting["S"][4] = this.readLugs(lugs4); - chosenSetting["S"][5] = this.readLugs(lugs5); - chosenSetting["M"][1] = this.readLugs(lugm37); - chosenSetting["M"][2] = this.readLugs(lugm61); - chosenSetting["X"][1] = this.readLugs(lugx1); - chosenSetting["X"][2] = this.readLugs(lugx2); - chosenSetting["X"][3] = this.readLugs(lugx3); - chosenSetting["X"][4] = this.readLugs(lugx4); - chosenSetting["X"][5] = this.readLugs(lugx5); + let chosenSetting = ''; + if (pattern === "Custom") { + let re = new RegExp("^[.xX]*$"); + if (lugs1.length !== 43 || !re.test(lugs1)) throw new OperationError("Ψ1 custom lugs must be 43 long and can only include . or x "); + if (lugs2.length !== 47 || !re.test(lugs2)) throw new OperationError("Ψ2 custom lugs must be 47 long and can only include . or x"); + if (lugs3.length !== 51 || !re.test(lugs3)) throw new OperationError("Ψ3 custom lugs must be 51 long and can only include . or x"); + if (lugs4.length !== 53 || !re.test(lugs4)) throw new OperationError("Ψ4 custom lugs must be 53 long and can only include . or x"); + if (lugs5.length !== 59 || !re.test(lugs5)) throw new OperationError("Ψ5 custom lugs must be 59 long and can only include . or x"); + if (lugm37.length !== 37 || !re.test(lugm37)) throw new OperationError("M37 custom lugs must be 37 long and can only include . or x"); + if (lugm61.length !== 61 || !re.test(lugm61)) throw new OperationError("M61 custom lugs must be 61 long and can only include . or x"); + if (lugx1.length !== 41 || !re.test(lugx1)) throw new OperationError("Χ1 custom lugs must be 41 long and can only include . or x"); + if (lugx2.length !== 31 || !re.test(lugx2)) throw new OperationError("Χ2 custom lugs must be 31 long and can only include . or x"); + if (lugx3.length !== 29 || !re.test(lugx3)) throw new OperationError("Χ3 custom lugs must be 29 long and can only include . or x"); + if (lugx4.length !== 26 || !re.test(lugx4)) throw new OperationError("Χ4 custom lugs must be 26 long and can only include . or x"); + if (lugx5.length !== 23 || !re.test(lugx5)) throw new OperationError("Χ5 custom lugs must be 23 long and can only include . or x"); + chosenSetting = INIT_PATTERNS["No Pattern"]; + chosenSetting.S[1] = this.readLugs(lugs1); + chosenSetting.S[2] = this.readLugs(lugs2); + chosenSetting.S[3] = this.readLugs(lugs3); + chosenSetting.S[4] = this.readLugs(lugs4); + chosenSetting.S[5] = this.readLugs(lugs5); + chosenSetting.M[1] = this.readLugs(lugm37); + chosenSetting.M[2] = this.readLugs(lugm61); + chosenSetting.X[1] = this.readLugs(lugx1); + chosenSetting.X[2] = this.readLugs(lugx2); + chosenSetting.X[3] = this.readLugs(lugx3); + chosenSetting.X[4] = this.readLugs(lugx4); + chosenSetting.X[5] = this.readLugs(lugx5); } else { - var chosenSetting = INIT_PATTERNS[pattern]; + chosenSetting = INIT_PATTERNS[pattern]; } - var chiSettings = chosenSetting["X"]; // Pin settings for Chi links (X) - var psiSettings = chosenSetting["S"]; // Pin settings for Psi links (S) - var muSettings = chosenSetting["M"]; // Pin settings for Motor links (M) + var chiSettings = chosenSetting.X; // Pin settings for Chi links (X) + var psiSettings = chosenSetting.S; // Pin settings for Psi links (S) + var muSettings = chosenSetting.M; // Pin settings for Motor links (M) - var ita2 = ""; - if(mode == "Send") { + let ita2 = ""; + if (mode === "Send") { - // Convert input text to ITA2 (including figure/letter shifts) - ita2 = Array.prototype.map.call(input, function(character) { - var letter = character.toUpperCase(); - - if(intype == "Plaintext") { - if (validChars.indexOf(letter) === -1) throw new OperationError("Invalid Plaintext character : "+letter); + // Convert input text to ITA2 (including figure/letter shifts) + ita2 = Array.prototype.map.call(input, function(character) { + let letter = character.toUpperCase(); + + if (intype === "Plaintext") { + if (validChars.indexOf(letter) === -1) throw new OperationError("Invalid Plaintext character : "+letter); - if( !figShifted && figShiftedChars.indexOf(letter) !== -1 ) { - // in letters mode and next char needs to be figure shifted - figShifted = true; - return "55" + figShiftArr[letter]; - } else if( figShifted ) { - // in figures mode and next char needs to be letter shifted - if(letter=="\n") return "34"; - if(letter=="\r") return "4"; - if( figShiftedChars.indexOf(letter) === -1 ) { - figShifted = false; - return "88" + letter; - } else { - return figShiftArr[letter]; - } - - } else { - if(letter=="\n") return "34"; - if(letter=="\r") return "4"; + if(!figShifted && figShiftedChars.indexOf(letter) !== -1) { + // in letters mode and next char needs to be figure shifted + figShifted = true; + return "55" + figShiftArr[letter]; + } else if (figShifted) { + // in figures mode and next char needs to be letter shifted + if (letter==="\n") return "34"; + if (letter==="\r") return "4"; + if (figShiftedChars.indexOf(letter) === -1) { + figShifted = false; + return "88" + letter; + } else { + return figShiftArr[letter]; + } + + } else { + if (letter==="\n") return "34"; + if (letter==="\r") return "4"; return letter; - } + } - } else { + } else { - if (validITA2.indexOf(letter) === -1) { - var errltr = letter; - if(errltr=="\n") errltr = "Carriage Return"; - if(errltr==" ") errltr = "Space"; + if (validITA2.indexOf(letter) === -1) { + let errltr = letter; + if (errltr==="\n") errltr = "Carriage Return"; + if (errltr===" ") errltr = "Space"; throw new OperationError("Invalid ITA2 character : "+errltr); - } - return letter; + } + return letter; - } + } - }); + }); } else { - // Receive input should always be ITA2 - ita2 = Array.prototype.map.call(input, function(character) { - var letter = character.toUpperCase(); - if (validITA2.indexOf(letter) === -1) { + // Receive input should always be ITA2 + ita2 = Array.prototype.map.call(input, function(character) { + let letter = character.toUpperCase(); + if (validITA2.indexOf(letter) === -1) { var errltr = letter; - if(errltr=="\n") errltr = "Carriage Return"; - if(errltr==" ") errltr = "Space"; + if (errltr==="\n") errltr = "Carriage Return"; + if(errltr===" ") errltr = "Space"; throw new OperationError("Invalid ITA2 character : "+errltr); } - return letter; - }); + return letter; + }); } const ita2Input = ita2.join(""); - var thisPsi = []; - var thisChi = []; - var thisMu = []; - var m61lug = muSettings[1][m61-1]; - var m37lug = muSettings[2][m37-1]; - var p5 = [0,0,0]; + let thisPsi = []; + let thisChi = []; + let m61lug = muSettings[1][m61-1]; + let m37lug = muSettings[2][m37-1]; + let p5 = [0,0,0]; const self = this; const letters = Array.prototype.map.call(ita2Input, function(character) { const letter = character.toUpperCase(); - var x2bptr = x2+1; - if(x2bptr==32) x2bptr=1; - var s1bptr = s1+1; - if(s1bptr==44) s1bptr=1; + let x2bptr = x2+1; + if (x2bptr===32) x2bptr=1; + let s1bptr = s1+1; + if (s1bptr===44) s1bptr=1; thisChi = [ - chiSettings[1][x1-1], - chiSettings[2][x2-1], - chiSettings[3][x3-1], - chiSettings[4][x4-1], - chiSettings[5][x5-1] - ]; + chiSettings[1][x1-1], + chiSettings[2][x2-1], + chiSettings[3][x3-1], + chiSettings[4][x4-1], + chiSettings[5][x5-1] + ]; - thisPsi = [ - psiSettings[1][s1-1], - psiSettings[2][s2-1], - psiSettings[3][s3-1], - psiSettings[4][s4-1], - psiSettings[5][s5-1] - ]; - - thisMu = [ - muSettings[1][m61-1], - muSettings[2][m37-1] - ]; + thisPsi = [ + psiSettings[1][s1-1], + psiSettings[2][s2-1], + psiSettings[3][s3-1], + psiSettings[4][s4-1], + psiSettings[5][s5-1] + ]; if (typeof ITA2_TABLE[letter] == "undefined") { return ""; } - var xorSum = []; + let xorSum = []; for(var i=0;i<=4;i++) { xorSum[i] = ITA2_TABLE[letter][i] ^ thisPsi[i] ^ thisChi[i]; } const resultStr = xorSum.join(""); // Move Chi wheels one back after each letter - if(--x1 < 1) x1 = 41; - if(--x2 < 1) x2 = 31; - if(--x3 < 1) x3 = 29; - if(--x4 < 1) x4 = 26; - if(--x5 < 1) x5 = 23; + if (--x1 < 1) x1 = 41; + if (--x2 < 1) x2 = 31; + if (--x3 < 1) x3 = 29; + if (--x4 < 1) x4 = 26; + if (--x5 < 1) x5 = 23; // Motor wheel (61 pin) also moves one each letter - if(--m61 < 1) m61 = 61; + if (--m61 < 1) m61 = 61; // If M61 is set, we also move M37 - if(m61lug == 1) { - if(--m37 < 1) m37 = 37; + if (m61lug === 1) { + if (--m37 < 1) m37 = 37; } - var basicmotor = m37lug; - var totalmotor = basicmotor; - var lim = 0; + let basicmotor = m37lug; + let totalmotor = basicmotor; + let lim = 0; p5[2] = p5[1]; p5[1] = p5[0]; - if(mode=="Send") { + if (mode==="Send") { p5[0] = ITA2_TABLE[letter][4]; } else { p5[0] = xorSum[4]; } - // Limitations here - if(model=='SZ42a') { - // Chi 2 one back lim - The active character of chi 2 (2nd Chi wheel) in the previous position - lim = chiSettings[2][x2bptr-1]; - if(kt) { - if(lim==p5[2]) { lim = 0; } else { lim=1; } //p5 back 2 - } + // Limitations here + if (model==='SZ42a') { + // Chi 2 one back lim - The active character of chi 2 (2nd Chi wheel) in the previous position + lim = chiSettings[2][x2bptr-1]; + if(kt) { + if (lim===p5[2]) { lim = 0; } else { lim=1; } //p5 back 2 + } - // If basic motor = 0 and limitation = 1, Total motor = 0 [no move], otherwise, total motor = 1 [move] - if(basicmotor==0 && lim==1) { - totalmotor = 0; - } else { - totalmotor = 1; - } + // If basic motor = 0 and limitation = 1, Total motor = 0 [no move], otherwise, total motor = 1 [move] + if (basicmotor===0 && lim===1) { + totalmotor = 0; + } else { + totalmotor = 1; + } - } else if(model=='SZ42b') { - // Chi 2 one back + Psi 1 one back. - const x2b1lug = chiSettings[2][x2bptr-1]; - const s1b1lug = psiSettings[1][s1bptr-1]; - lim = 1; - if(x2b1lug==s1b1lug) lim=0; - if(kt) { - if(lim==p5[2]) { lim=0; } else { lim=1; } //p5 back 2 - } - // If basic motor = 0 and limitation = 1, Total motor = 0 [no move], otherwise, total motor = 1 [move] - if(basicmotor==0 && lim==1) { - totalmotor = 0; - } else { - totalmotor = 1; - } + } else if(model=='SZ42b') { + // Chi 2 one back + Psi 1 one back. + const x2b1lug = chiSettings[2][x2bptr-1]; + const s1b1lug = psiSettings[1][s1bptr-1]; + lim = 1; + if (x2b1lug===s1b1lug) lim=0; + if(kt) { + if (lim===p5[2]) { lim=0; } else { lim=1; } //p5 back 2 + } + // If basic motor = 0 and limitation = 1, Total motor = 0 [no move], otherwise, total motor = 1 [move] + if (basicmotor===0 && lim===1) { + totalmotor = 0; + } else { + totalmotor = 1; + } - } else if(model=="SZ40") { - // SZ40 - totalmotor = basicmotor; - } else { - throw new OperationError("Lorenz model type not recognised"); - } + } else if (model==="SZ40") { + // SZ40 + totalmotor = basicmotor; + } else { + throw new OperationError("Lorenz model type not recognised"); + } - // increment Psi wheels when current totalmotor active - if(totalmotor == 1) { - if(--s1 < 1) s1 = 43; - if(--s2 < 1) s2 = 47; - if(--s3 < 1) s3 = 51; - if(--s4 < 1) s4 = 53; - if(--s5 < 1) s5 = 59; - } + // increment Psi wheels when current totalmotor active + if (totalmotor === 1) { + if(--s1 < 1) s1 = 43; + if(--s2 < 1) s2 = 47; + if(--s3 < 1) s3 = 51; + if(--s4 < 1) s4 = 53; + if(--s5 < 1) s5 = 59; + } m61lug = muSettings[1][m61-1]; m37lug = muSettings[2][m37-1]; - var rtnstr = self.REVERSE_ITA2_TABLE[resultStr]; - if(format=="5/8/9") { - if(rtnstr=="+") rtnstr="5"; - if(rtnstr=="-") rtnstr="8"; - if(rtnstr==".") rtnstr="9"; + let rtnstr = self.REVERSE_ITA2_TABLE[resultStr]; + if (format==="5/8/9") { + if (rtnstr==="+") rtnstr="5"; + if (rtnstr==="-") rtnstr="8"; + if (rtnstr===".") rtnstr="9"; } return rtnstr; }); - var ita2output = letters.join(""); - var output = ""; + let ita2output = letters.join(""); + let output = ""; - if(mode == "Receive") { + if (mode === "Receive") { - figShifted = false; + figShifted = false; - // Convert output ITA2 to plaintext (including figure/letter shifts) - const out = Array.prototype.map.call(ita2output, function(letter) { - - if(outtype == "Plaintext") { + // Convert output ITA2 to plaintext (including figure/letter shifts) + const out = Array.prototype.map.call(ita2output, function(letter) { + + if (outtype === "Plaintext") { - if( letter == "5" || letter == "+" ) { - figShifted = true; - return; - } else if( letter == "8" || letter == "-" ) { - figShifted = false; - return; - } else if( letter == "9" ) { - return " "; - } else if( letter == "3" ) { + if (letter === "5" || letter === "+") { + figShifted = true; + return; + } else if (letter === "8" || letter === "-") { + figShifted = false; + return; + } else if (letter === "9") { + return " "; + } else if (letter === "3") { return "\n"; - } else if( letter == "4" ) { + } else if (letter === "4") { return ""; } - if(figShifted) { - return self.REVERSE_FIGSHIFT_TABLE[letter]; - } else { - return letter; - } + if (figShifted) { + return self.REVERSE_FIGSHIFT_TABLE[letter]; + } else { + return letter; + } - } else { - return letter; - } + } else { + return letter; + } - }); - output = out.join(""); + }); + output = out.join(""); - } else { - output = ita2output; - } + } else { + output = ita2output; + } return output; @@ -563,20 +558,20 @@ class Lorenz extends Operation { this.REVERSE_ITA2_TABLE[code] = letter; } for (const letter in figShiftArr) { - const ltr = figShiftArr[letter]; - this.REVERSE_FIGSHIFT_TABLE[ltr] = letter; + const ltr = figShiftArr[letter]; + this.REVERSE_FIGSHIFT_TABLE[ltr] = letter; } } readLugs(lugstr) { - var arr = Array.prototype.map.call(lugstr, function(lug) { - if(lug==".") { - return 0; - } else { - return 1; - } - }); - return arr; + let arr = Array.prototype.map.call(lugstr, function(lug) { + if(lug==".") { + return 0; + } else { + return 1; + } + }); + return arr; } } @@ -625,118 +620,118 @@ const validITA2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ34589+-./"; const figShiftedChars = "1234567890+-'()/:=?,." const figShiftArr = { - "1" : "Q", - "2" : "W", - "3" : "E", - "4" : "R", - "5" : "T", - "6" : "Y", - "7" : "U", - "8" : "I", - "9" : "O", - "0" : "P", - " " : "9", - "-" : "A", - "?" : "B", - ":" : "C", - "#" : "D", - "%" : "F", - "@" : "G", - "£" : "H", - "(" : "K", - ")" : "L", - "." : "M", - "," : "N", - "'" : "S", - "=" : "V", - "/" : "X", - "+" : "Z", - "\n" : "3", - "\r" : "4" + "1": "Q", + "2": "W", + "3": "E", + "4": "R", + "5": "T", + "6": "Y", + "7": "U", + "8": "I", + "9": "O", + "0": "P", + " ": "9", + "-": "A", + "?": "B", + ":": "C", + "#": "D", + "%": "F", + "@": "G", + "£": "H", + "(": "K", + ")": "L", + ".": "M", + ",": "N", + "'": "S", + "=": "V", + "/": "X", + "+": "Z", + "\n": "3", + "\r": "4" }; const INIT_PATTERNS = { - "No Pattern" : { - "X" : { - 1 : [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], - 2 : [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], - 3 : [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], - 4 : [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], - 5 : [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] - }, - "S" : { - 1 : [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], - 2 : [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], - 3 : [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], - 4 : [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], - 5 : [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] - }, - "M" : { - 1 : [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], - 2 : [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] + "No Pattern": { + "X": { + 1: [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], + 2: [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], + 3: [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], + 4: [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], + 5: [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] + }, + "S": { + 1: [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], + 2: [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], + 3: [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], + 4: [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], + 5: [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] + }, + "M": { + 1: [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], + 2: [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] } }, - "KH Pattern" : { - "X" : { - 1 : [0,1,0,0,0,1,1,1,0,1,0,1,1,1,1,0,1,0,0,0,1,0,1,0,0,1,1,1,0,0,0,0,1,1,0,1,1,1,1,0,0], - 2 : [1,0,0,1,1,1,0,0,0,1,0,1,1,1,1,0,0,1,1,0,0,1,0,0,1,1,0,1,1,0,0], - 3 : [0,0,1,1,0,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,0,0,1,1,0,1,1,0], - 4 : [1,1,0,0,1,0,0,1,1,1,1,0,0,1,1,0,1,1,1,0,0,0,0,1,0,0], - 5 : [1,1,0,0,1,1,0,0,0,0,1,1,1,1,0,1,0,0,1,0,1,0,0] - }, - "S" : { - 1 : [0,1,0,0,0,1,1,0,1,0,1,0,0,1,1,1,0,1,0,1,0,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,0,1,0,1,1,0,1], - 2 : [0,1,1,0,1,0,1,1,1,0,0,1,0,1,0,1,0,0,1,0,1,1,0,1,0,1,1,1,0,1,0,0,0,0,1,0,1,1,0,1,0,1,0,1,0,0,1], - 3 : [0,1,0,1,0,1,0,0,1,1,1,0,0,0,0,1,0,1,0,1,1,0,1,0,1,0,1,0,0,1,1,1,0,1,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,0,1], - 4 : [0,1,1,0,0,0,1,1,1,1,1,0,1,0,1,0,1,1,0,0,0,1,0,1,1,0,1,0,1,0,0,1,0,1,0,1,1,0,1,0,0,1,0,1,0,1,0,1,0,1,0,1,0], - 5 : [1,1,0,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,0,0,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,0,0,1,0] - }, + "KH Pattern": { + "X": { + 1: [0,1,0,0,0,1,1,1,0,1,0,1,1,1,1,0,1,0,0,0,1,0,1,0,0,1,1,1,0,0,0,0,1,1,0,1,1,1,1,0,0], + 2: [1,0,0,1,1,1,0,0,0,1,0,1,1,1,1,0,0,1,1,0,0,1,0,0,1,1,0,1,1,0,0], + 3: [0,0,1,1,0,0,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1,0,0,1,1,0,1,1,0], + 4: [1,1,0,0,1,0,0,1,1,1,1,0,0,1,1,0,1,1,1,0,0,0,0,1,0,0], + 5: [1,1,0,0,1,1,0,0,0,0,1,1,1,1,0,1,0,0,1,0,1,0,0] + }, + "S": { + 1: [0,1,0,0,0,1,1,0,1,0,1,0,0,1,1,1,0,1,0,1,0,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,0,1,0,1,1,0,1], + 2: [0,1,1,0,1,0,1,1,1,0,0,1,0,1,0,1,0,0,1,0,1,1,0,1,0,1,1,1,0,1,0,0,0,0,1,0,1,1,0,1,0,1,0,1,0,0,1], + 3: [0,1,0,1,0,1,0,0,1,1,1,0,0,0,0,1,0,1,0,1,1,0,1,0,1,0,1,0,0,1,1,1,0,1,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,0,1], + 4: [0,1,1,0,0,0,1,1,1,1,1,0,1,0,1,0,1,1,0,0,0,1,0,1,1,0,1,0,1,0,0,1,0,1,0,1,1,0,1,0,0,1,0,1,0,1,0,1,0,1,0,1,0], + 5: [1,1,0,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,0,0,1,1,1,1,0,1,0,1,0,0,0,1,1,0,1,0,0,1,0] + }, "M": { - 1 : [0,1,1,1,1,0,1,1,1,1,0,1,1,1,0,1,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,1,1,1,0,1,1,1,1,0,1,1,1,1,0,1,1,1,1,0,1,1,1,0,1,1,1,1,0,0,0], - 2 : [1,0,1,0,1,0,1,0,1,0,1,0,0,0,1,0,1,0,1,0,0,0,1,0,1,0,1,0,0,0,1,0,1,0,0,0,0] + 1: [0,1,1,1,1,0,1,1,1,1,0,1,1,1,0,1,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,1,1,1,0,1,1,1,1,0,1,1,1,1,0,1,1,1,1,0,1,1,1,0,1,1,1,1,0,0,0], + 2: [1,0,1,0,1,0,1,0,1,0,1,0,0,0,1,0,1,0,1,0,0,0,1,0,1,0,1,0,0,0,1,0,1,0,0,0,0] } }, - "ZMUG Pattern" : { - "X" : { - 1 : [0,1,1,0,1,1,0,0,0,1,1,0,1,1,0,0,1,0,0,0,0,1,1,1,0,0,1,1,1,0,0,0,0,1,1,1,0,0,1,1,0], - 2 : [1,1,0,1,1,0,0,0,0,1,1,1,0,1,1,1,1,0,1,0,0,0,1,1,0,0,1,1,0,0,0], - 3 : [0,0,1,0,0,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,0,1,1,0,1,1,1,1,0], - 4 : [1,0,1,0,1,0,0,1,1,0,0,0,1,1,0,0,1,0,1,1,1,0,0,1,0,1], - 5 : [0,1,0,0,1,1,1,1,0,0,0,1,0,1,1,1,0,0,0,0,1,0,1], - }, - "S" : { - 1 : [1,1,0,1,0,0,1,1,0,0,0,1,1,1,0,0,1,1,0,0,0,1,1,0,0,0,1,1,1,1,0,0,1,1,1,0,0,1,1,1,0,0,0], - 2 : [0,0,0,1,0,0,0,1,1,1,0,0,1,1,0,0,1,1,1,0,0,0,1,1,1,1,0,0,0,1,1,0,0,1,1,1,0,0,1,1,1,0,0,1,0,1,1], - 3 : [0,1,0,0,1,1,0,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,1,1,1,1,0,0,0,1,0,0,0,1,1,1,0,0,0,1,1,0,0,0,1,1,0,0,1,1,1], - 4 : [0,0,1,1,1,0,0,1,1,0,0,1,1,1,0,0,1,1,1,1,0,0,0,1,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,0,1,1,0,0,1,1,1,0,1], - 5 : [1,0,0,1,1,1,0,0,0,1,0,0,0,1,1,1,1,0,0,1,1,1,0,0,1,0,0,1,1,1,1,0,0,0,1,1,0,0,1,1,1,0,0,1,1,0,0,1,1,1,0,0,1,0,0,0,1,1,0] - }, - "M" : { - 1 : [1,0,1,1,0,1,0,1,1,1,0,1,1,1,0,1,0,1,0,1,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,0,1,0,1,1,1,1,0,1,0,1,0,1], - 2 : [0,1,0,1,0,1,1,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,1,0,1,1,1,0,1,1,1,0,1,1,1] + "ZMUG Pattern": { + "X": { + 1: [0,1,1,0,1,1,0,0,0,1,1,0,1,1,0,0,1,0,0,0,0,1,1,1,0,0,1,1,1,0,0,0,0,1,1,1,0,0,1,1,0], + 2: [1,1,0,1,1,0,0,0,0,1,1,1,0,1,1,1,1,0,1,0,0,0,1,1,0,0,1,1,0,0,0], + 3: [0,0,1,0,0,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,0,1,1,0,1,1,1,1,0], + 4: [1,0,1,0,1,0,0,1,1,0,0,0,1,1,0,0,1,0,1,1,1,0,0,1,0,1], + 5: [0,1,0,0,1,1,1,1,0,0,0,1,0,1,1,1,0,0,0,0,1,0,1] + }, + "S": { + 1: [1,1,0,1,0,0,1,1,0,0,0,1,1,1,0,0,1,1,0,0,0,1,1,0,0,0,1,1,1,1,0,0,1,1,1,0,0,1,1,1,0,0,0], + 2: [0,0,0,1,0,0,0,1,1,1,0,0,1,1,0,0,1,1,1,0,0,0,1,1,1,1,0,0,0,1,1,0,0,1,1,1,0,0,1,1,1,0,0,1,0,1,1], + 3: [0,1,0,0,1,1,0,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,1,1,1,1,0,0,0,1,0,0,0,1,1,1,0,0,0,1,1,0,0,0,1,1,0,0,1,1,1], + 4: [0,0,1,1,1,0,0,1,1,0,0,1,1,1,0,0,1,1,1,1,0,0,0,1,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,0,1,1,0,0,1,1,1,0,1], + 5: [1,0,0,1,1,1,0,0,0,1,0,0,0,1,1,1,1,0,0,1,1,1,0,0,1,0,0,1,1,1,1,0,0,0,1,1,0,0,1,1,1,0,0,1,1,0,0,1,1,1,0,0,1,0,0,0,1,1,0] + }, + "M": { + 1: [1,0,1,1,0,1,0,1,1,1,0,1,1,1,0,1,0,1,0,1,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,0,1,0,1,1,1,1,0,1,0,1,0,1], + 2: [0,1,0,1,0,1,1,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,1,0,1,1,1,0,1,1,1,0,1,1,1] } }, - "BREAM Pattern" : { - "X" : { - 1 : [0,1,1,1,1,0,1,0,1,1,0,1,0,1,1,0,0,1,0,0,1,1,0,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,0,0,0], - 2 : [0,1,1,1,0,0,0,0,1,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,1,1,1,0,0,1,1], - 3 : [1,1,0,0,1,1,0,1,1,0,0,1,1,1,0,0,0,0,1,0,0,1,1,0,1,1,1,0,0], - 4 : [1,1,1,1,0,0,1,0,0,1,1,0,0,1,0,0,1,1,0,1,0,0,1,1,0,0], - 5 : [0,1,1,1,0,1,1,1,0,0,0,1,0,0,1,1,0,1,0,0,0,1,0] - }, - "S" : { - 1 : [0,0,0,1,1,1,0,0,1,1,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,1,0,0,1,0,0,1,0,1,0,1,0,1,0,1,0,0], - 2 : [1,1,0,1,0,0,1,1,1,0,0,0,0,0,1,1,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,1,0,1,0,1,0,1,0,1,1,0,1,0,0], - 3 : [1,0,0,1,0,0,1,1,0,1,1,1,0,0,0,1,1,1,0,0,0,0,1,1,1,1,0,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1], - 4 : [0,1,0,0,0,0,1,0,0,1,0,1,1,1,1,1,0,1,1,0,0,1,1,0,0,1,1,0,0,0,0,1,0,1,1,0,1,0,1,0,1,0,1,0,1,0,1,1,0,0,1,0,1], - 5 : [1,0,1,0,1,0,0,1,1,0,0,1,1,0,1,1,0,0,1,0,0,0,1,0,0,0,0,1,0,1,1,0,1,1,1,1,0,1,1,1,0,0,1,0,1,0,0,0,1,1,0,1,0,1,0,1,0,1,0] - }, - "M" : { - 1 : [1,0,0,0,0,1,1,0,0,0,1,1,0,0,1,1,0,1,1,1,1,0,0,0,0,1,1,0,0,0,1,1,0,1,1,0,1,0,1,1,1,1,0,0,0,1,1,0,0,1,1,0,0,1,1,0,1,0,1,1,1], - 2 : [0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1,0,1,0,1,0,0,1,0,1,0,1,0,1,0,1,1,1,0,1] + "BREAM Pattern": { + "X": { + 1: [0,1,1,1,1,0,1,0,1,1,0,1,0,1,1,0,0,1,0,0,1,1,0,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,0,0,0], + 2: [0,1,1,1,0,0,0,0,1,0,0,0,1,1,0,1,0,1,0,0,0,1,1,0,1,1,1,0,0,1,1], + 3: [1,1,0,0,1,1,0,1,1,0,0,1,1,1,0,0,0,0,1,0,0,1,1,0,1,1,1,0,0], + 4: [1,1,1,1,0,0,1,0,0,1,1,0,0,1,0,0,1,1,0,1,0,0,1,1,0,0], + 5: [0,1,1,1,0,1,1,1,0,0,0,1,0,0,1,1,0,1,0,0,0,1,0] + }, + "S": { + 1: [0,0,0,1,1,1,0,0,1,1,1,0,1,1,0,0,1,0,1,0,1,1,0,1,1,0,1,0,0,1,0,0,1,0,1,0,1,0,1,0,1,0,0], + 2: [1,1,0,1,0,0,1,1,1,0,0,0,0,0,1,1,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,1,0,1,0,1,0,1,0,1,1,0,1,0,0], + 3: [1,0,0,1,0,0,1,1,0,1,1,1,0,0,0,1,1,1,0,0,0,0,1,1,1,1,0,1,0,1,0,1,1,0,0,1,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1], + 4: [0,1,0,0,0,0,1,0,0,1,0,1,1,1,1,1,0,1,1,0,0,1,1,0,0,1,1,0,0,0,0,1,0,1,1,0,1,0,1,0,1,0,1,0,1,0,1,1,0,0,1,0,1], + 5: [1,0,1,0,1,0,0,1,1,0,0,1,1,0,1,1,0,0,1,0,0,0,1,0,0,0,0,1,0,1,1,0,1,1,1,1,0,1,1,1,0,0,1,0,1,0,0,0,1,1,0,1,0,1,0,1,0,1,0] + }, + "M": { + 1: [1,0,0,0,0,1,1,0,0,0,1,1,0,0,1,1,0,1,1,1,1,0,0,0,0,1,1,0,0,0,1,1,0,1,1,0,1,0,1,1,1,1,0,0,0,1,1,0,0,1,1,0,0,1,1,0,1,0,1,1,1], + 2: [0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1,0,1,0,1,0,0,1,0,1,0,1,0,1,0,1,1,1,0,1] } } }; -export default Lorenz; +export default Lorenz; \ No newline at end of file