var ReverseUnicode = { mirrorMap: { 'a': '\u0250', 'b': '\u0183', 'c': '\u0254', 'd': '\u018A', 'e': '\u01DD', 'f': '\u025F', 'g': '\u0283', 'h': '\u0265', 'i': '\u0131', 'j': '\u027F', 'k': '\u029E', 'l': '\u026F', 'm': '\u026D', 'n': '\u014B', 'o': '\u0275', 'p': '\u028C', 'q': '\u0250', 'r': '\u027E', 's': '\u0282', 't': '\u0287', 'u': '\u028A', 'v': '\u028C', 'w': '\u026D', 'x': '\u00D7', 'y': '\u028E', 'z': '\u0251', 'A': '\u2200', 'B': '\u0181', 'C': '\u0186', 'D': '\u018A', 'E': '\u018E', 'F': '\u2132', 'G': '\u0193', 'H': '\u0179', 'I': '\u0196', 'J': '\u017F', 'K': '\u0198', 'L': '\u02E1', 'M': '\u019C', 'N': '\u014A', 'O': '\u019F', 'P': '\u01A3', 'Q': '\u024A', 'R': '\u0280', 'S': '\u0161', 'T': '\u0166', 'U': '\u0168', 'V': '\u0245', 'W': '\u024B', 'X': '\u00D7', 'Y': '\u01B4', 'Z': '\u023F', '0': '0', '1': '1', '2': '2', '3': '3', '4': '4', '5': '5', '6': '6', '7': '7', '8': '8', '9': '9', ' ': ' ', '.': '\u02D9', ',': '\u02CC', '!': '\u00A1', '?': '\u00BF', '(': ')', ')': '(', '[': ']', ']': '[', '{': '}', '}': '{', '<': '>', '>': '<', '"': '"', "'": "'" }, reverse: function(input) { return input.split('').reverse().join(''); }, mirror: function(input) { var self = this; return input.split('').map(function(ch) { return self.mirrorMap[ch] || ch; }).join(''); }, restore: function(input) { var reverseMap = {}; var self = this; Object.keys(this.mirrorMap).forEach(function(k) { reverseMap[self.mirrorMap[k]] = k; }); return input.split('').map(function(ch) { return reverseMap[ch] || ch; }).join(''); } };