{"version":3,"sources":["kendo.dataviz.qrcode.js"],"names":["f","define","defined","value","UNDEFINED","round","precision","power","pow","math","p","limitValue","min","max","rad","degrees","DEG_TO_RAD","deg","radians","isNumber","val","isNaN","valueOrDefault","defaultValue","sqr","objectKey","object","key","parts","push","sort","join","hashKey","str","i","hash","length","charCodeAt","hashObject","arrayLimits","arr","MAX_NUM","MIN_NUM","arrayMin","arrayMax","sparseArrayMin","sparseArrayLimits","sparseArrayMax","n","isFinite","undefined","last","array","append","first","second","apply","renderTemplate","text","kendo","template","useWithBlock","paramName","renderAttr","name","renderAllAttr","attrs","output","renderStyle","renderSize","size","renderPos","pos","result","toHyphens","split","isTransparent","color","arabicToRoman","literals",1,10,100,2,20,200,3,30,300,4,40,400,5,50,500,6,60,600,7,70,700,8,80,800,9,90,900,1000,"values","roman","shift","romanToArabic","r","digits","prev","v","toLowerCase","x","l","c","d","m","charAt","memoize","cache","Object","create","id","arguments","this","ucs2decode","string","extra","counter","ucs2encode","map","String","fromCharCode","Math","window","deepExtend","PI","Number","MAX_VALUE","now","Date","getTime","util","drawing","dataviz","amd","a1","a2","a3","$","zeroSize","width","height","baseline","measureText","style","measureBox","TextMetrics","current","measure","loadFonts","fonts","callback","promises","document","font","load","e","logToConsole","Promise","all","then","doc","Class","LRUCache","extend","init","_size","_length","_map","put","lru","entry","_head","_tail","newer","older","get","defaultMeasureBox","options","_cache","_initOptions","baselineMarkerSize","box","styleKey","cacheKey","cachedResult","baselineMarker","_baselineMarker","cloneNode","appendChild","body","offsetWidth","offsetHeight","offsetTop","parentNode","removeChild","jQuery","encodeBase64","input","chr1","chr2","chr3","enc1","enc2","enc3","enc4","encodeUTF8","KEY_STR","inArray","ObserversMixin","observers","_observers","addObserver","element","removeObserver","index","splice","trigger","methodName","event","observer","idx","_suspended","optionsChange","geometryChange","suspend","resume","_observerField","field","mixins","toDecimal","parseInt","toBitsString","toString","Array","splitInto","substring","fillFunctionCell","matrices","bit","y","fillDataCell","maskPatternConditions","generatePowersOfTwo","powersOfTwoResult","powersOfTwo","generateGeneratorPolynomials","firstPolynomial","secondPolynomial","maxErrorCorrectionCodeWordsCount","generatorPolynomials","multiplyPolynomials","multiplyByConstant","polynomial","getNumberAt","scoreFinderPatternOccurance","patterns","scores","rowColumn","finderPatternValue","scoreAdjacentSameBits","previousBits","adjacentBits","calculateDarkModulesRatioScore","darkModules","total","percent","floor","mod5","previous","abs","next","score","modeInstances","mode","FreeCellVisitor","fillData","padDataString","xorPolynomials","generateErrorCodewords","getBlocks","chooseMode","getModes","getDataCodewordsCount","getVersion","getDataString","encodeFormatInformation","encodeBCH","dividePolynomials","initMatrices","addFormatInformation","encodeVersionInformation","addVersionInformation","addCentricPattern","addFinderSeparator","addFinderPatterns","addAlignmentPatterns","addTimingFunctions","scoreMaskMatrixes","EncodingResult","IsoEncoder","UTF8Encoder","QRCodeDataEncoder","encodeData","QRCodeDefaults","QRCode","draw","Widget","ui","Box2D","terminator","NUMERIC","ALPHA_NUMERIC","BYTE","0","irregularAlignmentPatternsStartDistance",15,16,18,19,22,24,26,28,31,32,33,36,37,39,"versionsCodewordsInformation","L","groups","totalDataCodewords","errorCodewordsPerBlock","M","Q","H","finderPattern","alignmentPattern","errorCorrectionPatterns","formatMaskPattern","formatGeneratorPolynomial","versionGeneratorPolynomial","paddingCodewords","row","column","numberRegex","alphaPattern","alphaExclusiveSet","alphaRegex","RegExp","alphaNumericRegex","byteRegex","initMinNumericBeforeAlpha","initMinNumericBeforeByte","initMinAlphaBeforeByte","minNumericBeforeAlpha","minNumericBeforeByte","minAlphaBeforeByte","QRDataMode","getVersionIndex","version","getBitsCharacterCount","bitsInCharacterCount","getModeCountString","modeIndicator","encode","getStringBitsLength","getValue","modes","character","inputLength","mod3","characters","A","B","C","D","E","F","G","I","J","K","N","O","P","R","S","T","U","V","W","X","Y","Z"," ","%","*","+","-",".","/",":","code","Error","matrix","that","startColumn","dir","move","getNextCell","getNextRemainderCell","blocks","block","codewordIdx","cell","blockIdx","j","cellVisitor","dataString","dataBitsCount","terminatorIndex","paddingCodewordIndex","data","errorCodewordsCount","divisor","generator","concat","generatorPolynomial","steps","errorCodewords","dataStream","versionCodewordsInformation","dataBlock","blockCodewordsCount","groupBlocksCount","messagePolynomial","codeword","groupIdx","codewordStart","dataBlocks","errorBlocks","versionGroups","previousMode","modeString","numeric","exec","numericMatch","alpha","alphaMatch","alphaNumeric","alphaNumericMatch","test","nextMode","substr","ceil","dataCodewordsCount","errorCorrectionLevel","format","encodedString","formatNumber","codeLength","generatorNumber","polynomialLength","valueNumber","valueString","numberX","numberY","yLength","xLength","modules","formatString","quotient","mod","x1","y1","x2","y2","pattern","direction","nextX","nextY","pointsCount","points","startDistance","distance","k","minIdx","adjacentSameBits","getEncodingResult","inputString","encodingMode","fn","prototype","utfBOM","initialModeCountStringLength","dataLength","encodeCharacter","significantOnes","bytesCount","getBytesCount","bc","ranges","encoding","indexOf","optimalMatrix","encoder","encodingResult","versionInformation","DEFAULT_SIZE","QUIET_ZONE_LENGTH","DEFAULT_ERROR_CORRECTION_LEVEL","DEFAULT_BACKGROUND","DEFAULT_DARK_MODULE_COLOR","MIN_BASE_UNIT_SIZE","call","wrapper","addClass","surfaceWrap","css","appendTo","surface","Surface","type","renderAs","setOptions","redraw","_getSize","clear","createVisual","visual","getSize","dimensions","_resize","_render","exportVisual","baseUnit","quietZoneSize","dataSize","contentSize","_value","border","padding","borderWidth","Group","errorCorrection","_calculateBaseUnit","_renderBackground","_renderMatrix","matrixSize","path","MultiPath","fill","stroke","moveTo","lineTo","close","unpad","Path","fromRect","toRect","background","ExportMixin","plugin","QRCodeFunctions","QRCodeFields"],"mappings":"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","file":"kendo.dataviz.qrcode.min.js","sourcesContent":["/*!\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n*/\n(function (f, define) {\n define('util/main', ['kendo.core'], f);\n}(function () {\n (function () {\n var math = Math, kendo = window.kendo, deepExtend = kendo.deepExtend;\n var DEG_TO_RAD = math.PI / 180, MAX_NUM = Number.MAX_VALUE, MIN_NUM = -Number.MAX_VALUE, UNDEFINED = 'undefined';\n function defined(value) {\n return typeof value !== UNDEFINED;\n }\n function round(value, precision) {\n var power = pow(precision);\n return math.round(value * power) / power;\n }\n function pow(p) {\n if (p) {\n return math.pow(10, p);\n } else {\n return 1;\n }\n }\n function limitValue(value, min, max) {\n return math.max(math.min(value, max), min);\n }\n function rad(degrees) {\n return degrees * DEG_TO_RAD;\n }\n function deg(radians) {\n return radians / DEG_TO_RAD;\n }\n function isNumber(val) {\n return typeof val === 'number' && !isNaN(val);\n }\n function valueOrDefault(value, defaultValue) {\n return defined(value) ? value : defaultValue;\n }\n function sqr(value) {\n return value * value;\n }\n function objectKey(object) {\n var parts = [];\n for (var key in object) {\n parts.push(key + object[key]);\n }\n return parts.sort().join('');\n }\n function hashKey(str) {\n var hash = 2166136261;\n for (var i = 0; i < str.length; ++i) {\n hash += (hash << 1) + (hash << 4) + (hash << 7) + (hash << 8) + (hash << 24);\n hash ^= str.charCodeAt(i);\n }\n return hash >>> 0;\n }\n function hashObject(object) {\n return hashKey(objectKey(object));\n }\n var now = Date.now;\n if (!now) {\n now = function () {\n return new Date().getTime();\n };\n }\n function arrayLimits(arr) {\n var length = arr.length, i, min = MAX_NUM, max = MIN_NUM;\n for (i = 0; i < length; i++) {\n max = math.max(max, arr[i]);\n min = math.min(min, arr[i]);\n }\n return {\n min: min,\n max: max\n };\n }\n function arrayMin(arr) {\n return arrayLimits(arr).min;\n }\n function arrayMax(arr) {\n return arrayLimits(arr).max;\n }\n function sparseArrayMin(arr) {\n return sparseArrayLimits(arr).min;\n }\n function sparseArrayMax(arr) {\n return sparseArrayLimits(arr).max;\n }\n function sparseArrayLimits(arr) {\n var min = MAX_NUM, max = MIN_NUM;\n for (var i = 0, length = arr.length; i < length; i++) {\n var n = arr[i];\n if (n !== null && isFinite(n)) {\n min = math.min(min, n);\n max = math.max(max, n);\n }\n }\n return {\n min: min === MAX_NUM ? undefined : min,\n max: max === MIN_NUM ? undefined : max\n };\n }\n function last(array) {\n if (array) {\n return array[array.length - 1];\n }\n }\n function append(first, second) {\n first.push.apply(first, second);\n return first;\n }\n function renderTemplate(text) {\n return kendo.template(text, {\n useWithBlock: false,\n paramName: 'd'\n });\n }\n function renderAttr(name, value) {\n return defined(value) && value !== null ? ' ' + name + '=\\'' + value + '\\' ' : '';\n }\n function renderAllAttr(attrs) {\n var output = '';\n for (var i = 0; i < attrs.length; i++) {\n output += renderAttr(attrs[i][0], attrs[i][1]);\n }\n return output;\n }\n function renderStyle(attrs) {\n var output = '';\n for (var i = 0; i < attrs.length; i++) {\n var value = attrs[i][1];\n if (defined(value)) {\n output += attrs[i][0] + ':' + value + ';';\n }\n }\n if (output !== '') {\n return output;\n }\n }\n function renderSize(size) {\n if (typeof size !== 'string') {\n size += 'px';\n }\n return size;\n }\n function renderPos(pos) {\n var result = [];\n if (pos) {\n var parts = kendo.toHyphens(pos).split('-');\n for (var i = 0; i < parts.length; i++) {\n result.push('k-pos-' + parts[i]);\n }\n }\n return result.join(' ');\n }\n function isTransparent(color) {\n return color === '' || color === null || color === 'none' || color === 'transparent' || !defined(color);\n }\n function arabicToRoman(n) {\n var literals = {\n 1: 'i',\n 10: 'x',\n 100: 'c',\n 2: 'ii',\n 20: 'xx',\n 200: 'cc',\n 3: 'iii',\n 30: 'xxx',\n 300: 'ccc',\n 4: 'iv',\n 40: 'xl',\n 400: 'cd',\n 5: 'v',\n 50: 'l',\n 500: 'd',\n 6: 'vi',\n 60: 'lx',\n 600: 'dc',\n 7: 'vii',\n 70: 'lxx',\n 700: 'dcc',\n 8: 'viii',\n 80: 'lxxx',\n 800: 'dccc',\n 9: 'ix',\n 90: 'xc',\n 900: 'cm',\n 1000: 'm'\n };\n var values = [\n 1000,\n 900,\n 800,\n 700,\n 600,\n 500,\n 400,\n 300,\n 200,\n 100,\n 90,\n 80,\n 70,\n 60,\n 50,\n 40,\n 30,\n 20,\n 10,\n 9,\n 8,\n 7,\n 6,\n 5,\n 4,\n 3,\n 2,\n 1\n ];\n var roman = '';\n while (n > 0) {\n if (n < values[0]) {\n values.shift();\n } else {\n roman += literals[values[0]];\n n -= values[0];\n }\n }\n return roman;\n }\n function romanToArabic(r) {\n r = r.toLowerCase();\n var digits = {\n i: 1,\n v: 5,\n x: 10,\n l: 50,\n c: 100,\n d: 500,\n m: 1000\n };\n var value = 0, prev = 0;\n for (var i = 0; i < r.length; ++i) {\n var v = digits[r.charAt(i)];\n if (!v) {\n return null;\n }\n value += v;\n if (v > prev) {\n value -= 2 * prev;\n }\n prev = v;\n }\n return value;\n }\n function memoize(f) {\n var cache = Object.create(null);\n return function () {\n var id = '';\n for (var i = arguments.length; --i >= 0;) {\n id += ':' + arguments[i];\n }\n if (id in cache) {\n return cache[id];\n }\n return f.apply(this, arguments);\n };\n }\n function ucs2decode(string) {\n var output = [], counter = 0, length = string.length, value, extra;\n while (counter < length) {\n value = string.charCodeAt(counter++);\n if (value >= 55296 && value <= 56319 && counter < length) {\n extra = string.charCodeAt(counter++);\n if ((extra & 64512) == 56320) {\n output.push(((value & 1023) << 10) + (extra & 1023) + 65536);\n } else {\n output.push(value);\n counter--;\n }\n } else {\n output.push(value);\n }\n }\n return output;\n }\n function ucs2encode(array) {\n return array.map(function (value) {\n var output = '';\n if (value > 65535) {\n value -= 65536;\n output += String.fromCharCode(value >>> 10 & 1023 | 55296);\n value = 56320 | value & 1023;\n }\n output += String.fromCharCode(value);\n return output;\n }).join('');\n }\n deepExtend(kendo, {\n util: {\n MAX_NUM: MAX_NUM,\n MIN_NUM: MIN_NUM,\n append: append,\n arrayLimits: arrayLimits,\n arrayMin: arrayMin,\n arrayMax: arrayMax,\n defined: defined,\n deg: deg,\n hashKey: hashKey,\n hashObject: hashObject,\n isNumber: isNumber,\n isTransparent: isTransparent,\n last: last,\n limitValue: limitValue,\n now: now,\n objectKey: objectKey,\n round: round,\n rad: rad,\n renderAttr: renderAttr,\n renderAllAttr: renderAllAttr,\n renderPos: renderPos,\n renderSize: renderSize,\n renderStyle: renderStyle,\n renderTemplate: renderTemplate,\n sparseArrayLimits: sparseArrayLimits,\n sparseArrayMin: sparseArrayMin,\n sparseArrayMax: sparseArrayMax,\n sqr: sqr,\n valueOrDefault: valueOrDefault,\n romanToArabic: romanToArabic,\n arabicToRoman: arabicToRoman,\n memoize: memoize,\n ucs2encode: ucs2encode,\n ucs2decode: ucs2decode\n }\n });\n kendo.drawing.util = kendo.util;\n kendo.dataviz.util = kendo.util;\n }());\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('util/text-metrics', [\n 'kendo.core',\n 'util/main'\n ], f);\n}(function () {\n (function ($) {\n var doc = document, kendo = window.kendo, Class = kendo.Class, util = kendo.util, defined = util.defined;\n var LRUCache = Class.extend({\n init: function (size) {\n this._size = size;\n this._length = 0;\n this._map = {};\n },\n put: function (key, value) {\n var lru = this, map = lru._map, entry = {\n key: key,\n value: value\n };\n map[key] = entry;\n if (!lru._head) {\n lru._head = lru._tail = entry;\n } else {\n lru._tail.newer = entry;\n entry.older = lru._tail;\n lru._tail = entry;\n }\n if (lru._length >= lru._size) {\n map[lru._head.key] = null;\n lru._head = lru._head.newer;\n lru._head.older = null;\n } else {\n lru._length++;\n }\n },\n get: function (key) {\n var lru = this, entry = lru._map[key];\n if (entry) {\n if (entry === lru._head && entry !== lru._tail) {\n lru._head = entry.newer;\n lru._head.older = null;\n }\n if (entry !== lru._tail) {\n if (entry.older) {\n entry.older.newer = entry.newer;\n entry.newer.older = entry.older;\n }\n entry.older = lru._tail;\n entry.newer = null;\n lru._tail.newer = entry;\n lru._tail = entry;\n }\n return entry.value;\n }\n }\n });\n var defaultMeasureBox = $('
')[0];\n function zeroSize() {\n return {\n width: 0,\n height: 0,\n baseline: 0\n };\n }\n var TextMetrics = Class.extend({\n init: function (options) {\n this._cache = new LRUCache(1000);\n this._initOptions(options);\n },\n options: { baselineMarkerSize: 1 },\n measure: function (text, style, box) {\n if (!text) {\n return zeroSize();\n }\n var styleKey = util.objectKey(style), cacheKey = util.hashKey(text + styleKey), cachedResult = this._cache.get(cacheKey);\n if (cachedResult) {\n return cachedResult;\n }\n var size = zeroSize();\n var measureBox = box ? box : defaultMeasureBox;\n var baselineMarker = this._baselineMarker().cloneNode(false);\n for (var key in style) {\n var value = style[key];\n if (defined(value)) {\n measureBox.style[key] = value;\n }\n }\n $(measureBox).text(text);\n measureBox.appendChild(baselineMarker);\n doc.body.appendChild(measureBox);\n if ((text + '').length) {\n size.width = measureBox.offsetWidth - this.options.baselineMarkerSize;\n size.height = measureBox.offsetHeight;\n size.baseline = baselineMarker.offsetTop + this.options.baselineMarkerSize;\n }\n if (size.width > 0 && size.height > 0) {\n this._cache.put(cacheKey, size);\n }\n measureBox.parentNode.removeChild(measureBox);\n return size;\n },\n _baselineMarker: function () {\n return $('')[0];\n }\n });\n TextMetrics.current = new TextMetrics();\n function measureText(text, style, measureBox) {\n return TextMetrics.current.measure(text, style, measureBox);\n }\n function loadFonts(fonts, callback) {\n var promises = [];\n if (fonts.length > 0 && document.fonts) {\n try {\n promises = fonts.map(function (font) {\n return document.fonts.load(font);\n });\n } catch (e) {\n kendo.logToConsole(e);\n }\n Promise.all(promises).then(callback, callback);\n } else {\n callback();\n }\n }\n kendo.util.TextMetrics = TextMetrics;\n kendo.util.LRUCache = LRUCache;\n kendo.util.loadFonts = loadFonts;\n kendo.util.measureText = measureText;\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('util/base64', ['util/main'], f);\n}(function () {\n (function () {\n var kendo = window.kendo, deepExtend = kendo.deepExtend, fromCharCode = String.fromCharCode;\n var KEY_STR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n function encodeBase64(input) {\n var output = '';\n var chr1, chr2, chr3, enc1, enc2, enc3, enc4;\n var i = 0;\n input = encodeUTF8(input);\n while (i < input.length) {\n chr1 = input.charCodeAt(i++);\n chr2 = input.charCodeAt(i++);\n chr3 = input.charCodeAt(i++);\n enc1 = chr1 >> 2;\n enc2 = (chr1 & 3) << 4 | chr2 >> 4;\n enc3 = (chr2 & 15) << 2 | chr3 >> 6;\n enc4 = chr3 & 63;\n if (isNaN(chr2)) {\n enc3 = enc4 = 64;\n } else if (isNaN(chr3)) {\n enc4 = 64;\n }\n output = output + KEY_STR.charAt(enc1) + KEY_STR.charAt(enc2) + KEY_STR.charAt(enc3) + KEY_STR.charAt(enc4);\n }\n return output;\n }\n function encodeUTF8(input) {\n var output = '';\n for (var i = 0; i < input.length; i++) {\n var c = input.charCodeAt(i);\n if (c < 128) {\n output += fromCharCode(c);\n } else if (c < 2048) {\n output += fromCharCode(192 | c >>> 6);\n output += fromCharCode(128 | c & 63);\n } else if (c < 65536) {\n output += fromCharCode(224 | c >>> 12);\n output += fromCharCode(128 | c >>> 6 & 63);\n output += fromCharCode(128 | c & 63);\n }\n }\n return output;\n }\n deepExtend(kendo.util, {\n encodeBase64: encodeBase64,\n encodeUTF8: encodeUTF8\n });\n }());\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('mixins/observers', ['kendo.core'], f);\n}(function () {\n (function ($) {\n var math = Math, kendo = window.kendo, deepExtend = kendo.deepExtend, inArray = $.inArray;\n var ObserversMixin = {\n observers: function () {\n this._observers = this._observers || [];\n return this._observers;\n },\n addObserver: function (element) {\n if (!this._observers) {\n this._observers = [element];\n } else {\n this._observers.push(element);\n }\n return this;\n },\n removeObserver: function (element) {\n var observers = this.observers();\n var index = inArray(element, observers);\n if (index != -1) {\n observers.splice(index, 1);\n }\n return this;\n },\n trigger: function (methodName, event) {\n var observers = this._observers;\n var observer;\n var idx;\n if (observers && !this._suspended) {\n for (idx = 0; idx < observers.length; idx++) {\n observer = observers[idx];\n if (observer[methodName]) {\n observer[methodName](event);\n }\n }\n }\n return this;\n },\n optionsChange: function (e) {\n e = e || {};\n e.element = this;\n this.trigger('optionsChange', e);\n },\n geometryChange: function () {\n this.trigger('geometryChange', { element: this });\n },\n suspend: function () {\n this._suspended = (this._suspended || 0) + 1;\n return this;\n },\n resume: function () {\n this._suspended = math.max((this._suspended || 0) - 1, 0);\n return this;\n },\n _observerField: function (field, value) {\n if (this[field]) {\n this[field].removeObserver(this);\n }\n this[field] = value;\n value.addObserver(this);\n }\n };\n deepExtend(kendo, { mixins: { ObserversMixin: ObserversMixin } });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dataviz.qrcode', [\n 'kendo.dataviz.core',\n 'kendo.drawing'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dataviz.qrcode',\n name: 'QRCode',\n category: 'dataviz',\n description: 'QRCode widget.',\n depends: [\n 'dataviz.core',\n 'drawing'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, extend = $.extend, draw = kendo.drawing, dataviz = kendo.dataviz, Widget = kendo.ui.Widget, Box2D = dataviz.Box2D, terminator = '0000', NUMERIC = 'numeric', ALPHA_NUMERIC = 'alphanumeric', BYTE = 'byte', powersOfTwo = { '1': 0 }, powersOfTwoResult = { '0': 1 }, generatorPolynomials = [\n [\n 1,\n 0\n ],\n [\n 1,\n 25,\n 0\n ]\n ], irregularAlignmentPatternsStartDistance = {\n 15: 20,\n 16: 20,\n 18: 24,\n 19: 24,\n 22: 20,\n 24: 22,\n 26: 24,\n 28: 20,\n 30: 20,\n 31: 24,\n 32: 28,\n 33: 24,\n 36: 18,\n 37: 22,\n 39: 20,\n 40: 24\n }, versionsCodewordsInformation = [\n {\n L: {\n groups: [[\n 1,\n 19\n ]],\n totalDataCodewords: 19,\n errorCodewordsPerBlock: 7\n },\n M: {\n groups: [[\n 1,\n 16\n ]],\n totalDataCodewords: 16,\n errorCodewordsPerBlock: 10\n },\n Q: {\n groups: [[\n 1,\n 13\n ]],\n totalDataCodewords: 13,\n errorCodewordsPerBlock: 13\n },\n H: {\n groups: [[\n 1,\n 9\n ]],\n totalDataCodewords: 9,\n errorCodewordsPerBlock: 17\n }\n },\n {\n L: {\n groups: [[\n 1,\n 34\n ]],\n totalDataCodewords: 34,\n errorCodewordsPerBlock: 10\n },\n M: {\n groups: [[\n 1,\n 28\n ]],\n totalDataCodewords: 28,\n errorCodewordsPerBlock: 16\n },\n Q: {\n groups: [[\n 1,\n 22\n ]],\n totalDataCodewords: 22,\n errorCodewordsPerBlock: 22\n },\n H: {\n groups: [[\n 1,\n 16\n ]],\n totalDataCodewords: 16,\n errorCodewordsPerBlock: 28\n }\n },\n {\n L: {\n groups: [[\n 1,\n 55\n ]],\n totalDataCodewords: 55,\n errorCodewordsPerBlock: 15\n },\n M: {\n groups: [[\n 1,\n 44\n ]],\n totalDataCodewords: 44,\n errorCodewordsPerBlock: 26\n },\n Q: {\n groups: [[\n 2,\n 17\n ]],\n totalDataCodewords: 34,\n errorCodewordsPerBlock: 18\n },\n H: {\n groups: [[\n 2,\n 13\n ]],\n totalDataCodewords: 26,\n errorCodewordsPerBlock: 22\n }\n },\n {\n L: {\n groups: [[\n 1,\n 80\n ]],\n totalDataCodewords: 80,\n errorCodewordsPerBlock: 20\n },\n M: {\n groups: [[\n 2,\n 32\n ]],\n totalDataCodewords: 64,\n errorCodewordsPerBlock: 18\n },\n Q: {\n groups: [[\n 2,\n 24\n ]],\n totalDataCodewords: 48,\n errorCodewordsPerBlock: 26\n },\n H: {\n groups: [[\n 4,\n 9\n ]],\n totalDataCodewords: 36,\n errorCodewordsPerBlock: 16\n }\n },\n {\n L: {\n groups: [[\n 1,\n 108\n ]],\n totalDataCodewords: 108,\n errorCodewordsPerBlock: 26\n },\n M: {\n groups: [[\n 2,\n 43\n ]],\n totalDataCodewords: 86,\n errorCodewordsPerBlock: 24\n },\n Q: {\n groups: [\n [\n 2,\n 15\n ],\n [\n 2,\n 16\n ]\n ],\n totalDataCodewords: 62,\n errorCodewordsPerBlock: 18\n },\n H: {\n groups: [\n [\n 2,\n 11\n ],\n [\n 2,\n 12\n ]\n ],\n totalDataCodewords: 46,\n errorCodewordsPerBlock: 22\n }\n },\n {\n L: {\n groups: [[\n 2,\n 68\n ]],\n totalDataCodewords: 136,\n errorCodewordsPerBlock: 18\n },\n M: {\n groups: [[\n 4,\n 27\n ]],\n totalDataCodewords: 108,\n errorCodewordsPerBlock: 16\n },\n Q: {\n groups: [[\n 4,\n 19\n ]],\n totalDataCodewords: 76,\n errorCodewordsPerBlock: 24\n },\n H: {\n groups: [[\n 4,\n 15\n ]],\n totalDataCodewords: 60,\n errorCodewordsPerBlock: 28\n }\n },\n {\n L: {\n groups: [[\n 2,\n 78\n ]],\n totalDataCodewords: 156,\n errorCodewordsPerBlock: 20\n },\n M: {\n groups: [[\n 4,\n 31\n ]],\n totalDataCodewords: 124,\n errorCodewordsPerBlock: 18\n },\n Q: {\n groups: [\n [\n 2,\n 14\n ],\n [\n 4,\n 15\n ]\n ],\n totalDataCodewords: 88,\n errorCodewordsPerBlock: 18\n },\n H: {\n groups: [\n [\n 4,\n 13\n ],\n [\n 1,\n 14\n ]\n ],\n totalDataCodewords: 66,\n errorCodewordsPerBlock: 26\n }\n },\n {\n L: {\n groups: [[\n 2,\n 97\n ]],\n totalDataCodewords: 194,\n errorCodewordsPerBlock: 24\n },\n M: {\n groups: [\n [\n 2,\n 38\n ],\n [\n 2,\n 39\n ]\n ],\n totalDataCodewords: 154,\n errorCodewordsPerBlock: 22\n },\n Q: {\n groups: [\n [\n 4,\n 18\n ],\n [\n 2,\n 19\n ]\n ],\n totalDataCodewords: 110,\n errorCodewordsPerBlock: 22\n },\n H: {\n groups: [\n [\n 4,\n 14\n ],\n [\n 2,\n 15\n ]\n ],\n totalDataCodewords: 86,\n errorCodewordsPerBlock: 26\n }\n },\n {\n L: {\n groups: [[\n 2,\n 116\n ]],\n totalDataCodewords: 232,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 3,\n 36\n ],\n [\n 2,\n 37\n ]\n ],\n totalDataCodewords: 182,\n errorCodewordsPerBlock: 22\n },\n Q: {\n groups: [\n [\n 4,\n 16\n ],\n [\n 4,\n 17\n ]\n ],\n totalDataCodewords: 132,\n errorCodewordsPerBlock: 20\n },\n H: {\n groups: [\n [\n 4,\n 12\n ],\n [\n 4,\n 13\n ]\n ],\n totalDataCodewords: 100,\n errorCodewordsPerBlock: 24\n }\n },\n {\n L: {\n groups: [\n [\n 2,\n 68\n ],\n [\n 2,\n 69\n ]\n ],\n totalDataCodewords: 274,\n errorCodewordsPerBlock: 18\n },\n M: {\n groups: [\n [\n 4,\n 43\n ],\n [\n 1,\n 44\n ]\n ],\n totalDataCodewords: 216,\n errorCodewordsPerBlock: 26\n },\n Q: {\n groups: [\n [\n 6,\n 19\n ],\n [\n 2,\n 20\n ]\n ],\n totalDataCodewords: 154,\n errorCodewordsPerBlock: 24\n },\n H: {\n groups: [\n [\n 6,\n 15\n ],\n [\n 2,\n 16\n ]\n ],\n totalDataCodewords: 122,\n errorCodewordsPerBlock: 28\n }\n },\n {\n L: {\n groups: [[\n 4,\n 81\n ]],\n totalDataCodewords: 324,\n errorCodewordsPerBlock: 20\n },\n M: {\n groups: [\n [\n 1,\n 50\n ],\n [\n 4,\n 51\n ]\n ],\n totalDataCodewords: 254,\n errorCodewordsPerBlock: 30\n },\n Q: {\n groups: [\n [\n 4,\n 22\n ],\n [\n 4,\n 23\n ]\n ],\n totalDataCodewords: 180,\n errorCodewordsPerBlock: 28\n },\n H: {\n groups: [\n [\n 3,\n 12\n ],\n [\n 8,\n 13\n ]\n ],\n totalDataCodewords: 140,\n errorCodewordsPerBlock: 24\n }\n },\n {\n L: {\n groups: [\n [\n 2,\n 92\n ],\n [\n 2,\n 93\n ]\n ],\n totalDataCodewords: 370,\n errorCodewordsPerBlock: 24\n },\n M: {\n groups: [\n [\n 6,\n 36\n ],\n [\n 2,\n 37\n ]\n ],\n totalDataCodewords: 290,\n errorCodewordsPerBlock: 22\n },\n Q: {\n groups: [\n [\n 4,\n 20\n ],\n [\n 6,\n 21\n ]\n ],\n totalDataCodewords: 206,\n errorCodewordsPerBlock: 26\n },\n H: {\n groups: [\n [\n 7,\n 14\n ],\n [\n 4,\n 15\n ]\n ],\n totalDataCodewords: 158,\n errorCodewordsPerBlock: 28\n }\n },\n {\n L: {\n groups: [[\n 4,\n 107\n ]],\n totalDataCodewords: 428,\n errorCodewordsPerBlock: 26\n },\n M: {\n groups: [\n [\n 8,\n 37\n ],\n [\n 1,\n 38\n ]\n ],\n totalDataCodewords: 334,\n errorCodewordsPerBlock: 22\n },\n Q: {\n groups: [\n [\n 8,\n 20\n ],\n [\n 4,\n 21\n ]\n ],\n totalDataCodewords: 244,\n errorCodewordsPerBlock: 24\n },\n H: {\n groups: [\n [\n 12,\n 11\n ],\n [\n 4,\n 12\n ]\n ],\n totalDataCodewords: 180,\n errorCodewordsPerBlock: 22\n }\n },\n {\n L: {\n groups: [\n [\n 3,\n 115\n ],\n [\n 1,\n 116\n ]\n ],\n totalDataCodewords: 461,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 4,\n 40\n ],\n [\n 5,\n 41\n ]\n ],\n totalDataCodewords: 365,\n errorCodewordsPerBlock: 24\n },\n Q: {\n groups: [\n [\n 11,\n 16\n ],\n [\n 5,\n 17\n ]\n ],\n totalDataCodewords: 261,\n errorCodewordsPerBlock: 20\n },\n H: {\n groups: [\n [\n 11,\n 12\n ],\n [\n 5,\n 13\n ]\n ],\n totalDataCodewords: 197,\n errorCodewordsPerBlock: 24\n }\n },\n {\n L: {\n groups: [\n [\n 5,\n 87\n ],\n [\n 1,\n 88\n ]\n ],\n totalDataCodewords: 523,\n errorCodewordsPerBlock: 22\n },\n M: {\n groups: [\n [\n 5,\n 41\n ],\n [\n 5,\n 42\n ]\n ],\n totalDataCodewords: 415,\n errorCodewordsPerBlock: 24\n },\n Q: {\n groups: [\n [\n 5,\n 24\n ],\n [\n 7,\n 25\n ]\n ],\n totalDataCodewords: 295,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 11,\n 12\n ],\n [\n 7,\n 13\n ]\n ],\n totalDataCodewords: 223,\n errorCodewordsPerBlock: 24\n }\n },\n {\n L: {\n groups: [\n [\n 5,\n 98\n ],\n [\n 1,\n 99\n ]\n ],\n totalDataCodewords: 589,\n errorCodewordsPerBlock: 24\n },\n M: {\n groups: [\n [\n 7,\n 45\n ],\n [\n 3,\n 46\n ]\n ],\n totalDataCodewords: 453,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 15,\n 19\n ],\n [\n 2,\n 20\n ]\n ],\n totalDataCodewords: 325,\n errorCodewordsPerBlock: 24\n },\n H: {\n groups: [\n [\n 3,\n 15\n ],\n [\n 13,\n 16\n ]\n ],\n totalDataCodewords: 253,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 1,\n 107\n ],\n [\n 5,\n 108\n ]\n ],\n totalDataCodewords: 647,\n errorCodewordsPerBlock: 28\n },\n M: {\n groups: [\n [\n 10,\n 46\n ],\n [\n 1,\n 47\n ]\n ],\n totalDataCodewords: 507,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 1,\n 22\n ],\n [\n 15,\n 23\n ]\n ],\n totalDataCodewords: 367,\n errorCodewordsPerBlock: 28\n },\n H: {\n groups: [\n [\n 2,\n 14\n ],\n [\n 17,\n 15\n ]\n ],\n totalDataCodewords: 283,\n errorCodewordsPerBlock: 28\n }\n },\n {\n L: {\n groups: [\n [\n 5,\n 120\n ],\n [\n 1,\n 121\n ]\n ],\n totalDataCodewords: 721,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 9,\n 43\n ],\n [\n 4,\n 44\n ]\n ],\n totalDataCodewords: 563,\n errorCodewordsPerBlock: 26\n },\n Q: {\n groups: [\n [\n 17,\n 22\n ],\n [\n 1,\n 23\n ]\n ],\n totalDataCodewords: 397,\n errorCodewordsPerBlock: 28\n },\n H: {\n groups: [\n [\n 2,\n 14\n ],\n [\n 19,\n 15\n ]\n ],\n totalDataCodewords: 313,\n errorCodewordsPerBlock: 28\n }\n },\n {\n L: {\n groups: [\n [\n 3,\n 113\n ],\n [\n 4,\n 114\n ]\n ],\n totalDataCodewords: 795,\n errorCodewordsPerBlock: 28\n },\n M: {\n groups: [\n [\n 3,\n 44\n ],\n [\n 11,\n 45\n ]\n ],\n totalDataCodewords: 627,\n errorCodewordsPerBlock: 26\n },\n Q: {\n groups: [\n [\n 17,\n 21\n ],\n [\n 4,\n 22\n ]\n ],\n totalDataCodewords: 445,\n errorCodewordsPerBlock: 26\n },\n H: {\n groups: [\n [\n 9,\n 13\n ],\n [\n 16,\n 14\n ]\n ],\n totalDataCodewords: 341,\n errorCodewordsPerBlock: 26\n }\n },\n {\n L: {\n groups: [\n [\n 3,\n 107\n ],\n [\n 5,\n 108\n ]\n ],\n totalDataCodewords: 861,\n errorCodewordsPerBlock: 28\n },\n M: {\n groups: [\n [\n 3,\n 41\n ],\n [\n 13,\n 42\n ]\n ],\n totalDataCodewords: 669,\n errorCodewordsPerBlock: 26\n },\n Q: {\n groups: [\n [\n 15,\n 24\n ],\n [\n 5,\n 25\n ]\n ],\n totalDataCodewords: 485,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 15,\n 15\n ],\n [\n 10,\n 16\n ]\n ],\n totalDataCodewords: 385,\n errorCodewordsPerBlock: 28\n }\n },\n {\n L: {\n groups: [\n [\n 4,\n 116\n ],\n [\n 4,\n 117\n ]\n ],\n totalDataCodewords: 932,\n errorCodewordsPerBlock: 28\n },\n M: {\n groups: [[\n 17,\n 42\n ]],\n totalDataCodewords: 714,\n errorCodewordsPerBlock: 26\n },\n Q: {\n groups: [\n [\n 17,\n 22\n ],\n [\n 6,\n 23\n ]\n ],\n totalDataCodewords: 512,\n errorCodewordsPerBlock: 28\n },\n H: {\n groups: [\n [\n 19,\n 16\n ],\n [\n 6,\n 17\n ]\n ],\n totalDataCodewords: 406,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 2,\n 111\n ],\n [\n 7,\n 112\n ]\n ],\n totalDataCodewords: 1006,\n errorCodewordsPerBlock: 28\n },\n M: {\n groups: [[\n 17,\n 46\n ]],\n totalDataCodewords: 782,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 7,\n 24\n ],\n [\n 16,\n 25\n ]\n ],\n totalDataCodewords: 568,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [[\n 34,\n 13\n ]],\n totalDataCodewords: 442,\n errorCodewordsPerBlock: 24\n }\n },\n {\n L: {\n groups: [\n [\n 4,\n 121\n ],\n [\n 5,\n 122\n ]\n ],\n totalDataCodewords: 1094,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 4,\n 47\n ],\n [\n 14,\n 48\n ]\n ],\n totalDataCodewords: 860,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 11,\n 24\n ],\n [\n 14,\n 25\n ]\n ],\n totalDataCodewords: 614,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 16,\n 15\n ],\n [\n 14,\n 16\n ]\n ],\n totalDataCodewords: 464,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 6,\n 117\n ],\n [\n 4,\n 118\n ]\n ],\n totalDataCodewords: 1174,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 6,\n 45\n ],\n [\n 14,\n 46\n ]\n ],\n totalDataCodewords: 914,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 11,\n 24\n ],\n [\n 16,\n 25\n ]\n ],\n totalDataCodewords: 664,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 30,\n 16\n ],\n [\n 2,\n 17\n ]\n ],\n totalDataCodewords: 514,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 8,\n 106\n ],\n [\n 4,\n 107\n ]\n ],\n totalDataCodewords: 1276,\n errorCodewordsPerBlock: 26\n },\n M: {\n groups: [\n [\n 8,\n 47\n ],\n [\n 13,\n 48\n ]\n ],\n totalDataCodewords: 1000,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 7,\n 24\n ],\n [\n 22,\n 25\n ]\n ],\n totalDataCodewords: 718,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 22,\n 15\n ],\n [\n 13,\n 16\n ]\n ],\n totalDataCodewords: 538,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 10,\n 114\n ],\n [\n 2,\n 115\n ]\n ],\n totalDataCodewords: 1370,\n errorCodewordsPerBlock: 28\n },\n M: {\n groups: [\n [\n 19,\n 46\n ],\n [\n 4,\n 47\n ]\n ],\n totalDataCodewords: 1062,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 28,\n 22\n ],\n [\n 6,\n 23\n ]\n ],\n totalDataCodewords: 754,\n errorCodewordsPerBlock: 28\n },\n H: {\n groups: [\n [\n 33,\n 16\n ],\n [\n 4,\n 17\n ]\n ],\n totalDataCodewords: 596,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 8,\n 122\n ],\n [\n 4,\n 123\n ]\n ],\n totalDataCodewords: 1468,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 22,\n 45\n ],\n [\n 3,\n 46\n ]\n ],\n totalDataCodewords: 1128,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 8,\n 23\n ],\n [\n 26,\n 24\n ]\n ],\n totalDataCodewords: 808,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 12,\n 15\n ],\n [\n 28,\n 16\n ]\n ],\n totalDataCodewords: 628,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 3,\n 117\n ],\n [\n 10,\n 118\n ]\n ],\n totalDataCodewords: 1531,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 3,\n 45\n ],\n [\n 23,\n 46\n ]\n ],\n totalDataCodewords: 1193,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 4,\n 24\n ],\n [\n 31,\n 25\n ]\n ],\n totalDataCodewords: 871,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 11,\n 15\n ],\n [\n 31,\n 16\n ]\n ],\n totalDataCodewords: 661,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 7,\n 116\n ],\n [\n 7,\n 117\n ]\n ],\n totalDataCodewords: 1631,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 21,\n 45\n ],\n [\n 7,\n 46\n ]\n ],\n totalDataCodewords: 1267,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 1,\n 23\n ],\n [\n 37,\n 24\n ]\n ],\n totalDataCodewords: 911,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 19,\n 15\n ],\n [\n 26,\n 16\n ]\n ],\n totalDataCodewords: 701,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 5,\n 115\n ],\n [\n 10,\n 116\n ]\n ],\n totalDataCodewords: 1735,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 19,\n 47\n ],\n [\n 10,\n 48\n ]\n ],\n totalDataCodewords: 1373,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 15,\n 24\n ],\n [\n 25,\n 25\n ]\n ],\n totalDataCodewords: 985,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 23,\n 15\n ],\n [\n 25,\n 16\n ]\n ],\n totalDataCodewords: 745,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 13,\n 115\n ],\n [\n 3,\n 116\n ]\n ],\n totalDataCodewords: 1843,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 2,\n 46\n ],\n [\n 29,\n 47\n ]\n ],\n totalDataCodewords: 1455,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 42,\n 24\n ],\n [\n 1,\n 25\n ]\n ],\n totalDataCodewords: 1033,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 23,\n 15\n ],\n [\n 28,\n 16\n ]\n ],\n totalDataCodewords: 793,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [[\n 17,\n 115\n ]],\n totalDataCodewords: 1955,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 10,\n 46\n ],\n [\n 23,\n 47\n ]\n ],\n totalDataCodewords: 1541,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 10,\n 24\n ],\n [\n 35,\n 25\n ]\n ],\n totalDataCodewords: 1115,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 19,\n 15\n ],\n [\n 35,\n 16\n ]\n ],\n totalDataCodewords: 845,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 17,\n 115\n ],\n [\n 1,\n 116\n ]\n ],\n totalDataCodewords: 2071,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 14,\n 46\n ],\n [\n 21,\n 47\n ]\n ],\n totalDataCodewords: 1631,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 29,\n 24\n ],\n [\n 19,\n 25\n ]\n ],\n totalDataCodewords: 1171,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 11,\n 15\n ],\n [\n 46,\n 16\n ]\n ],\n totalDataCodewords: 901,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 13,\n 115\n ],\n [\n 6,\n 116\n ]\n ],\n totalDataCodewords: 2191,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 14,\n 46\n ],\n [\n 23,\n 47\n ]\n ],\n totalDataCodewords: 1725,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 44,\n 24\n ],\n [\n 7,\n 25\n ]\n ],\n totalDataCodewords: 1231,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 59,\n 16\n ],\n [\n 1,\n 17\n ]\n ],\n totalDataCodewords: 961,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 12,\n 121\n ],\n [\n 7,\n 122\n ]\n ],\n totalDataCodewords: 2306,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 12,\n 47\n ],\n [\n 26,\n 48\n ]\n ],\n totalDataCodewords: 1812,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 39,\n 24\n ],\n [\n 14,\n 25\n ]\n ],\n totalDataCodewords: 1286,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 22,\n 15\n ],\n [\n 41,\n 16\n ]\n ],\n totalDataCodewords: 986,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 6,\n 121\n ],\n [\n 14,\n 122\n ]\n ],\n totalDataCodewords: 2434,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 6,\n 47\n ],\n [\n 34,\n 48\n ]\n ],\n totalDataCodewords: 1914,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 46,\n 24\n ],\n [\n 10,\n 25\n ]\n ],\n totalDataCodewords: 1354,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 2,\n 15\n ],\n [\n 64,\n 16\n ]\n ],\n totalDataCodewords: 1054,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 17,\n 122\n ],\n [\n 4,\n 123\n ]\n ],\n totalDataCodewords: 2566,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 29,\n 46\n ],\n [\n 14,\n 47\n ]\n ],\n totalDataCodewords: 1992,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 49,\n 24\n ],\n [\n 10,\n 25\n ]\n ],\n totalDataCodewords: 1426,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 24,\n 15\n ],\n [\n 46,\n 16\n ]\n ],\n totalDataCodewords: 1096,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 4,\n 122\n ],\n [\n 18,\n 123\n ]\n ],\n totalDataCodewords: 2702,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 13,\n 46\n ],\n [\n 32,\n 47\n ]\n ],\n totalDataCodewords: 2102,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 48,\n 24\n ],\n [\n 14,\n 25\n ]\n ],\n totalDataCodewords: 1502,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 42,\n 15\n ],\n [\n 32,\n 16\n ]\n ],\n totalDataCodewords: 1142,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 20,\n 117\n ],\n [\n 4,\n 118\n ]\n ],\n totalDataCodewords: 2812,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 40,\n 47\n ],\n [\n 7,\n 48\n ]\n ],\n totalDataCodewords: 2216,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 43,\n 24\n ],\n [\n 22,\n 25\n ]\n ],\n totalDataCodewords: 1582,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 10,\n 15\n ],\n [\n 67,\n 16\n ]\n ],\n totalDataCodewords: 1222,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 19,\n 118\n ],\n [\n 6,\n 119\n ]\n ],\n totalDataCodewords: 2956,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 18,\n 47\n ],\n [\n 31,\n 48\n ]\n ],\n totalDataCodewords: 2334,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 34,\n 24\n ],\n [\n 34,\n 25\n ]\n ],\n totalDataCodewords: 1666,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 20,\n 15\n ],\n [\n 61,\n 16\n ]\n ],\n totalDataCodewords: 1276,\n errorCodewordsPerBlock: 30\n }\n }\n ], finderPattern = [\n 1,\n 0,\n 1,\n 1,\n 1\n ], alignmentPattern = [\n 1,\n 0,\n 1\n ], errorCorrectionPatterns = {\n L: '01',\n M: '00',\n Q: '11',\n H: '10'\n }, formatMaskPattern = '101010000010010', formatGeneratorPolynomial = '10100110111', versionGeneratorPolynomial = '1111100100101', paddingCodewords = [\n '11101100',\n '00010001'\n ], finderPatternValue = 93, maskPatternConditions = [\n function (row, column) {\n return (row + column) % 2 === 0;\n },\n function (row) {\n return row % 2 === 0;\n },\n function (row, column) {\n return column % 3 === 0;\n },\n function (row, column) {\n return (row + column) % 3 === 0;\n },\n function (row, column) {\n return (Math.floor(row / 2) + Math.floor(column / 3)) % 2 === 0;\n },\n function (row, column) {\n return row * column % 2 + row * column % 3 === 0;\n },\n function (row, column) {\n return (row * column % 2 + row * column % 3) % 2 === 0;\n },\n function (row, column) {\n return ((row + column) % 2 + row * column % 3) % 2 === 0;\n }\n ], numberRegex = /^\\d+/, alphaPattern = 'A-Z0-9 $%*+./:-', alphaExclusiveSet = 'A-Z $%*+./:-', alphaRegex = new RegExp('^[' + alphaExclusiveSet + ']+'), alphaNumericRegex = new RegExp('^[' + alphaPattern + ']+'), byteRegex = new RegExp('^[^' + alphaPattern + ']+'), initMinNumericBeforeAlpha = 8, initMinNumericBeforeByte = 5, initMinAlphaBeforeByte = 8, minNumericBeforeAlpha = 17, minNumericBeforeByte = 9, minAlphaBeforeByte = 16, round = Math.round;\n function toDecimal(value) {\n return parseInt(value, 2);\n }\n function toBitsString(value, length) {\n var result = Number(value).toString(2);\n if (result.length < length) {\n result = new Array(length - result.length + 1).join(0) + result;\n }\n return result;\n }\n function splitInto(str, n) {\n var result = [], idx = 0;\n while (idx < str.length) {\n result.push(str.substring(idx, idx + n));\n idx += n;\n }\n return result;\n }\n var QRDataMode = kendo.Class.extend({\n getVersionIndex: function (version) {\n if (version < 10) {\n return 0;\n } else if (version > 26) {\n return 2;\n }\n return 1;\n },\n getBitsCharacterCount: function (version) {\n var mode = this;\n return mode.bitsInCharacterCount[mode.getVersionIndex(version || 40)];\n },\n getModeCountString: function (length, version) {\n var mode = this;\n return mode.modeIndicator + toBitsString(length, mode.getBitsCharacterCount(version));\n },\n encode: function () {\n },\n getStringBitsLength: function () {\n },\n getValue: function () {\n },\n modeIndicator: '',\n bitsInCharacterCount: []\n });\n var modes = {};\n modes[NUMERIC] = QRDataMode.extend({\n bitsInCharacterCount: [\n 10,\n 12,\n 14\n ],\n modeIndicator: '0001',\n getValue: function (character) {\n return parseInt(character, 10);\n },\n encode: function (str, version) {\n var mode = this, parts = splitInto(str, 3), result = mode.getModeCountString(str.length, version);\n for (var i = 0; i < parts.length - 1; i++) {\n result += toBitsString(parts[i], 10);\n }\n return result + toBitsString(parts[i], 1 + 3 * parts[i].length);\n },\n getStringBitsLength: function (inputLength, version) {\n var mod3 = inputLength % 3;\n return 4 + this.getBitsCharacterCount(version) + 10 * Math.floor(inputLength / 3) + 3 * mod3 + (mod3 === 0 ? 0 : 1);\n }\n });\n modes[ALPHA_NUMERIC] = QRDataMode.extend({\n characters: {\n '0': 0,\n '1': 1,\n '2': 2,\n '3': 3,\n '4': 4,\n '5': 5,\n '6': 6,\n '7': 7,\n '8': 8,\n '9': 9,\n 'A': 10,\n 'B': 11,\n 'C': 12,\n 'D': 13,\n 'E': 14,\n 'F': 15,\n 'G': 16,\n 'H': 17,\n 'I': 18,\n 'J': 19,\n 'K': 20,\n 'L': 21,\n 'M': 22,\n 'N': 23,\n 'O': 24,\n 'P': 25,\n 'Q': 26,\n 'R': 27,\n 'S': 28,\n 'T': 29,\n 'U': 30,\n 'V': 31,\n 'W': 32,\n 'X': 33,\n 'Y': 34,\n 'Z': 35,\n ' ': 36,\n '$': 37,\n '%': 38,\n '*': 39,\n '+': 40,\n '-': 41,\n '.': 42,\n '/': 43,\n ':': 44\n },\n bitsInCharacterCount: [\n 9,\n 11,\n 13\n ],\n modeIndicator: '0010',\n getValue: function (character) {\n return this.characters[character];\n },\n encode: function (str, version) {\n var mode = this, parts = splitInto(str, 2), result = mode.getModeCountString(str.length, version), value;\n for (var i = 0; i < parts.length - 1; i++) {\n value = 45 * mode.getValue(parts[i].charAt(0)) + mode.getValue(parts[i].charAt(1));\n result += toBitsString(value, 11);\n }\n value = parts[i].length == 2 ? 45 * mode.getValue(parts[i].charAt(0)) + mode.getValue(parts[i].charAt(1)) : mode.getValue(parts[i].charAt(0));\n return result + toBitsString(value, 1 + 5 * parts[i].length);\n },\n getStringBitsLength: function (inputLength, version) {\n return 4 + this.getBitsCharacterCount(version) + 11 * Math.floor(inputLength / 2) + 6 * (inputLength % 2);\n }\n });\n modes[BYTE] = QRDataMode.extend({\n bitsInCharacterCount: [\n 8,\n 16,\n 16\n ],\n modeIndicator: '0100',\n getValue: function (character) {\n var code = character.charCodeAt(0);\n if (code <= 127 || 160 <= code && code <= 255) {\n return code;\n } else {\n throw new Error('Unsupported character: ' + character);\n }\n },\n encode: function (str, version) {\n var mode = this, result = mode.getModeCountString(str.length, version);\n for (var i = 0; i < str.length; i++) {\n result += toBitsString(mode.getValue(str.charAt(i)), 8);\n }\n return result;\n },\n getStringBitsLength: function (inputLength, version) {\n return 4 + this.getBitsCharacterCount(version) + 8 * inputLength;\n }\n });\n var modeInstances = {};\n for (var mode in modes) {\n modeInstances[mode] = new modes[mode]();\n }\n var FreeCellVisitor = function (matrix) {\n var that = this, row = matrix.length - 1, column = matrix.length - 1, startColumn = column, dir = -1, c = 0;\n that.move = function () {\n row += dir * c;\n c ^= 1;\n column = startColumn - c;\n };\n that.getNextCell = function () {\n while (matrix[row][column] !== undefined) {\n that.move();\n if (row < 0 || row >= matrix.length) {\n dir = -dir;\n startColumn -= startColumn != 8 ? 2 : 3;\n column = startColumn;\n row = dir < 0 ? matrix.length - 1 : 0;\n }\n }\n return {\n row: row,\n column: column\n };\n };\n that.getNextRemainderCell = function () {\n that.move();\n if (matrix[row][column] === undefined) {\n return {\n row: row,\n column: column\n };\n }\n };\n };\n function fillFunctionCell(matrices, bit, x, y) {\n for (var i = 0; i < matrices.length; i++) {\n matrices[i][x][y] = bit;\n }\n }\n function fillDataCell(matrices, bit, x, y) {\n for (var i = 0; i < maskPatternConditions.length; i++) {\n matrices[i][x][y] = maskPatternConditions[i](x, y) ? bit ^ 1 : parseInt(bit, 10);\n }\n }\n var fillData = function (matrices, blocks) {\n var cellVisitor = new FreeCellVisitor(matrices[0]), block, codewordIdx, cell;\n for (var blockIdx = 0; blockIdx < blocks.length; blockIdx++) {\n block = blocks[blockIdx];\n codewordIdx = 0;\n while (block.length > 0) {\n for (var i = 0; i < block.length; i++) {\n for (var j = 0; j < 8; j++) {\n cell = cellVisitor.getNextCell();\n fillDataCell(matrices, block[i][codewordIdx].charAt(j), cell.row, cell.column);\n }\n }\n codewordIdx++;\n while (block[0] && codewordIdx == block[0].length) {\n block.splice(0, 1);\n }\n }\n }\n while (cell = cellVisitor.getNextRemainderCell()) {\n fillDataCell(matrices, 0, cell.row, cell.column);\n }\n };\n var padDataString = function (dataString, totalDataCodewords) {\n var dataBitsCount = totalDataCodewords * 8, terminatorIndex = 0, paddingCodewordIndex = 0;\n while (dataString.length < dataBitsCount && terminatorIndex < terminator.length) {\n dataString += terminator.charAt(terminatorIndex++);\n }\n if (dataString.length % 8 !== 0) {\n dataString += new Array(9 - dataString.length % 8).join('0');\n }\n while (dataString.length < dataBitsCount) {\n dataString += paddingCodewords[paddingCodewordIndex];\n paddingCodewordIndex ^= 1;\n }\n return dataString;\n };\n function generatePowersOfTwo() {\n var result;\n for (var power = 1; power < 255; power++) {\n result = powersOfTwoResult[power - 1] * 2;\n if (result > 255) {\n result = result ^ 285;\n }\n powersOfTwoResult[power] = result;\n powersOfTwo[result] = power;\n }\n result = powersOfTwoResult[power - 1] * 2 ^ 285;\n powersOfTwoResult[power] = result;\n powersOfTwoResult[-1] = 0;\n }\n var xorPolynomials = function (x, y) {\n var result = [], idx = x.length - 2;\n for (var i = idx; i >= 0; i--) {\n result[i] = x[i] ^ y[i];\n }\n return result;\n };\n var multiplyPolynomials = function (x, y) {\n var result = [];\n for (var i = 0; i < x.length; i++) {\n for (var j = 0; j < y.length; j++) {\n if (result[i + j] === undefined) {\n result[i + j] = (x[i] + (y[j] >= 0 ? y[j] : 0)) % 255;\n } else {\n result[i + j] = powersOfTwo[powersOfTwoResult[result[i + j]] ^ powersOfTwoResult[(x[i] + y[j]) % 255]];\n }\n }\n }\n return result;\n };\n function generateGeneratorPolynomials() {\n var maxErrorCorrectionCodeWordsCount = 68;\n for (var idx = 2; idx <= maxErrorCorrectionCodeWordsCount; idx++) {\n var firstPolynomial = generatorPolynomials[idx - 1], secondPolynomial = [\n idx,\n 0\n ];\n generatorPolynomials[idx] = multiplyPolynomials(firstPolynomial, secondPolynomial);\n }\n }\n generatePowersOfTwo();\n generateGeneratorPolynomials();\n function multiplyByConstant(polynomial, power) {\n var result = [], idx = polynomial.length - 1;\n do {\n result[idx] = powersOfTwoResult[(polynomial[idx] + power) % 255];\n idx--;\n } while (polynomial[idx] !== undefined);\n return result;\n }\n var generateErrorCodewords = function (data, errorCodewordsCount) {\n var generator = generatorPolynomials[errorCodewordsCount - 1], result = new Array(errorCodewordsCount).concat(data), generatorPolynomial = new Array(result.length - generator.length).concat(generator), steps = data.length, errorCodewords = [], divisor, idx;\n for (idx = 0; idx < steps; idx++) {\n divisor = multiplyByConstant(generatorPolynomial, powersOfTwo[result[result.length - 1]]);\n generatorPolynomial.splice(0, 1);\n result = xorPolynomials(divisor, result);\n }\n for (idx = result.length - 1; idx >= 0; idx--) {\n errorCodewords[errorCodewordsCount - 1 - idx] = toBitsString(result[idx], 8);\n }\n return errorCodewords;\n };\n var getBlocks = function (dataStream, versionCodewordsInformation) {\n var codewordStart = 0, dataBlocks = [], errorBlocks = [], dataBlock, versionGroups = versionCodewordsInformation.groups, blockCodewordsCount, groupBlocksCount, messagePolynomial, codeword;\n for (var groupIdx = 0; groupIdx < versionGroups.length; groupIdx++) {\n groupBlocksCount = versionGroups[groupIdx][0];\n for (var blockIdx = 0; blockIdx < groupBlocksCount; blockIdx++) {\n blockCodewordsCount = versionGroups[groupIdx][1];\n dataBlock = [];\n messagePolynomial = [];\n for (var codewordIdx = 1; codewordIdx <= blockCodewordsCount; codewordIdx++) {\n codeword = dataStream.substring(codewordStart, codewordStart + 8);\n dataBlock.push(codeword);\n messagePolynomial[blockCodewordsCount - codewordIdx] = toDecimal(codeword);\n codewordStart += 8;\n }\n dataBlocks.push(dataBlock);\n errorBlocks.push(generateErrorCodewords(messagePolynomial, versionCodewordsInformation.errorCodewordsPerBlock));\n }\n }\n return [\n dataBlocks,\n errorBlocks\n ];\n };\n var chooseMode = function (str, minNumericBeforeAlpha, minNumericBeforeByte, minAlphaBeforeByte, previousMode) {\n var numeric = numberRegex.exec(str), numericMatch = numeric ? numeric[0] : '', alpha = alphaRegex.exec(str), alphaMatch = alpha ? alpha[0] : '', alphaNumeric = alphaNumericRegex.exec(str), alphaNumericMatch = alphaNumeric ? alphaNumeric[0] : '', mode, modeString;\n if (numericMatch && (numericMatch.length >= minNumericBeforeAlpha || str.length == numericMatch.length || numericMatch.length >= minNumericBeforeByte && !alphaNumericRegex.test(str.charAt(numericMatch.length)))) {\n mode = NUMERIC;\n modeString = numericMatch;\n } else if (alphaNumericMatch && (str.length == alphaNumericMatch.length || alphaNumericMatch.length >= minAlphaBeforeByte || previousMode == ALPHA_NUMERIC)) {\n mode = ALPHA_NUMERIC;\n modeString = numericMatch || alphaMatch;\n } else {\n mode = BYTE;\n if (alphaNumericMatch) {\n modeString = alphaNumericMatch + byteRegex.exec(str.substring(alphaNumericMatch.length))[0];\n } else {\n modeString = byteRegex.exec(str)[0];\n }\n }\n return {\n mode: mode,\n modeString: modeString\n };\n };\n var getModes = function (str) {\n var modes = [], previousMode, idx = 0;\n modes.push(chooseMode(str, initMinNumericBeforeAlpha, initMinNumericBeforeByte, initMinAlphaBeforeByte, previousMode));\n previousMode = modes[0].mode;\n str = str.substr(modes[0].modeString.length);\n while (str.length > 0) {\n var nextMode = chooseMode(str, minNumericBeforeAlpha, minNumericBeforeByte, minAlphaBeforeByte, previousMode);\n if (nextMode.mode != previousMode) {\n previousMode = nextMode.mode;\n modes.push(nextMode);\n idx++;\n } else {\n modes[idx].modeString += nextMode.modeString;\n }\n str = str.substr(nextMode.modeString.length);\n }\n return modes;\n };\n var getDataCodewordsCount = function (modes) {\n var length = 0, mode;\n for (var i = 0; i < modes.length; i++) {\n mode = modeInstances[modes[i].mode];\n length += mode.getStringBitsLength(modes[i].modeString.length);\n }\n return Math.ceil(length / 8);\n };\n var getVersion = function (dataCodewordsCount, errorCorrectionLevel) {\n var x = 0, y = versionsCodewordsInformation.length - 1, version = Math.floor(versionsCodewordsInformation.length / 2);\n do {\n if (dataCodewordsCount < versionsCodewordsInformation[version][errorCorrectionLevel].totalDataCodewords) {\n y = version;\n } else {\n x = version;\n }\n version = x + Math.floor((y - x) / 2);\n } while (y - x > 1);\n if (dataCodewordsCount <= versionsCodewordsInformation[x][errorCorrectionLevel].totalDataCodewords) {\n return version + 1;\n }\n return y + 1;\n };\n var getDataString = function (modes, version) {\n var dataString = '', mode;\n for (var i = 0; i < modes.length; i++) {\n mode = modeInstances[modes[i].mode];\n dataString += mode.encode(modes[i].modeString, version);\n }\n return dataString;\n };\n var encodeFormatInformation = function (format) {\n var formatNumber = toDecimal(format), encodedString, result = '';\n if (formatNumber === 0) {\n return '101010000010010';\n } else {\n encodedString = encodeBCH(toDecimal(format), formatGeneratorPolynomial, 15);\n }\n for (var i = 0; i < encodedString.length; i++) {\n result += encodedString.charAt(i) ^ formatMaskPattern.charAt(i);\n }\n return result;\n };\n var encodeBCH = function (value, generatorPolynomial, codeLength) {\n var generatorNumber = toDecimal(generatorPolynomial), polynomialLength = generatorPolynomial.length - 1, valueNumber = value << polynomialLength, length = codeLength - polynomialLength, valueString = toBitsString(value, length), result = dividePolynomials(valueNumber, generatorNumber);\n result = valueString + toBitsString(result, polynomialLength);\n return result;\n };\n var dividePolynomials = function (numberX, numberY) {\n var yLength = numberY.toString(2).length, xLength = numberX.toString(2).length;\n do {\n numberX ^= numberY << xLength - yLength;\n xLength = numberX.toString(2).length;\n } while (xLength >= yLength);\n return numberX;\n };\n function getNumberAt(str, idx) {\n return parseInt(str.charAt(idx), 10);\n }\n var initMatrices = function (version) {\n var matrices = [], modules = 17 + 4 * version;\n for (var i = 0; i < maskPatternConditions.length; i++) {\n matrices[i] = new Array(modules);\n for (var j = 0; j < modules; j++) {\n matrices[i][j] = new Array(modules);\n }\n }\n return matrices;\n };\n var addFormatInformation = function (matrices, formatString) {\n var matrix = matrices[0], x, y, idx = 0, length = formatString.length;\n for (x = 0, y = 8; x <= 8; x++) {\n if (x !== 6) {\n fillFunctionCell(matrices, getNumberAt(formatString, length - 1 - idx++), x, y);\n }\n }\n for (x = 8, y = 7; y >= 0; y--) {\n if (y !== 6) {\n fillFunctionCell(matrices, getNumberAt(formatString, length - 1 - idx++), x, y);\n }\n }\n idx = 0;\n for (y = matrix.length - 1, x = 8; y >= matrix.length - 8; y--) {\n fillFunctionCell(matrices, getNumberAt(formatString, length - 1 - idx++), x, y);\n }\n fillFunctionCell(matrices, 1, matrix.length - 8, 8);\n for (x = matrix.length - 7, y = 8; x < matrix.length; x++) {\n fillFunctionCell(matrices, getNumberAt(formatString, length - 1 - idx++), x, y);\n }\n };\n var encodeVersionInformation = function (version) {\n return encodeBCH(version, versionGeneratorPolynomial, 18);\n };\n var addVersionInformation = function (matrices, dataString) {\n var matrix = matrices[0], modules = matrix.length, x1 = 0, y1 = modules - 11, x2 = modules - 11, y2 = 0, quotient, mod, value;\n for (var idx = 0; idx < dataString.length; idx++) {\n quotient = Math.floor(idx / 3);\n mod = idx % 3;\n value = getNumberAt(dataString, dataString.length - idx - 1);\n fillFunctionCell(matrices, value, x1 + quotient, y1 + mod);\n fillFunctionCell(matrices, value, x2 + mod, y2 + quotient);\n }\n };\n var addCentricPattern = function (matrices, pattern, x, y) {\n var size = pattern.length + 2, length = pattern.length + 1, value;\n for (var i = 0; i < pattern.length; i++) {\n for (var j = i; j < size - i; j++) {\n value = pattern[i];\n fillFunctionCell(matrices, value, x + j, y + i);\n fillFunctionCell(matrices, value, x + i, y + j);\n fillFunctionCell(matrices, value, x + length - j, y + length - i);\n fillFunctionCell(matrices, value, x + length - i, y + length - j);\n }\n }\n };\n var addFinderSeparator = function (matrices, direction, x, y) {\n var nextX = x, nextY = y, matrix = matrices[0];\n do {\n fillFunctionCell(matrices, 0, nextX, y);\n fillFunctionCell(matrices, 0, x, nextY);\n nextX += direction[0];\n nextY += direction[1];\n } while (nextX >= 0 && nextX < matrix.length);\n };\n var addFinderPatterns = function (matrices) {\n var modules = matrices[0].length;\n addCentricPattern(matrices, finderPattern, 0, 0);\n addFinderSeparator(matrices, [\n -1,\n -1\n ], 7, 7);\n addCentricPattern(matrices, finderPattern, modules - 7, 0);\n addFinderSeparator(matrices, [\n 1,\n -1\n ], modules - 8, 7);\n addCentricPattern(matrices, finderPattern, 0, modules - 7);\n addFinderSeparator(matrices, [\n -1,\n 1\n ], 7, modules - 8);\n };\n var addAlignmentPatterns = function (matrices, version) {\n if (version < 2) {\n return;\n }\n var matrix = matrices[0], modules = matrix.length, pointsCount = Math.floor(version / 7), points = [6], startDistance, distance, idx = 0;\n if (startDistance = irregularAlignmentPatternsStartDistance[version]) {\n distance = (modules - 13 - startDistance) / pointsCount;\n } else {\n startDistance = distance = (modules - 13) / (pointsCount + 1);\n }\n points.push(points[idx++] + startDistance);\n while (points[idx] + distance < modules) {\n points.push(points[idx++] + distance);\n }\n for (var i = 0; i < points.length; i++) {\n for (var j = 0; j < points.length; j++) {\n if (matrix[points[i]][points[j]] === undefined) {\n addCentricPattern(matrices, alignmentPattern, points[i] - 2, points[j] - 2);\n }\n }\n }\n };\n var addTimingFunctions = function (matrices) {\n var row = 6, column = 6, value = 1, modules = matrices[0].length;\n for (var i = 8; i < modules - 8; i++) {\n fillFunctionCell(matrices, value, row, i);\n fillFunctionCell(matrices, value, i, column);\n value ^= 1;\n }\n };\n var scoreMaskMatrixes = function (matrices) {\n var scores = [], previousBits = [], darkModules = [], patterns = [], adjacentSameBits = [], matrix, i, row = 0, column = 1, modules = matrices[0].length;\n for (i = 0; i < matrices.length; i++) {\n scores[i] = 0;\n darkModules[i] = 0;\n adjacentSameBits[i] = [\n 0,\n 0\n ];\n patterns[i] = [\n 0,\n 0\n ];\n previousBits[i] = [];\n }\n for (i = 0; i < modules; i++) {\n for (var j = 0; j < modules; j++) {\n for (var k = 0; k < matrices.length; k++) {\n matrix = matrices[k];\n darkModules[k] += parseInt(matrix[i][j], 10);\n if (previousBits[k][row] === matrix[i][j] && i + 1 < modules && j - 1 >= 0 && matrix[i + 1][j] == previousBits[k][row] && matrix[i + 1][j - 1] == previousBits[k][row]) {\n scores[k] += 3;\n }\n scoreFinderPatternOccurance(k, patterns, scores, row, matrix[i][j]);\n scoreFinderPatternOccurance(k, patterns, scores, column, matrix[j][i]);\n scoreAdjacentSameBits(k, scores, previousBits, matrix[i][j], adjacentSameBits, row);\n scoreAdjacentSameBits(k, scores, previousBits, matrix[j][i], adjacentSameBits, column);\n }\n }\n }\n var total = modules * modules, minIdx, min = Number.MAX_VALUE;\n for (i = 0; i < scores.length; i++) {\n scores[i] += calculateDarkModulesRatioScore(darkModules[i], total);\n if (scores[i] < min) {\n min = scores[i];\n minIdx = i;\n }\n }\n return minIdx;\n };\n function scoreFinderPatternOccurance(idx, patterns, scores, rowColumn, bit) {\n patterns[idx][rowColumn] = (patterns[idx][rowColumn] << 1 ^ bit) % 128;\n if (patterns[idx][rowColumn] == finderPatternValue) {\n scores[idx] += 40;\n }\n }\n function scoreAdjacentSameBits(idx, scores, previousBits, bit, adjacentBits, rowColumn) {\n if (previousBits[idx][rowColumn] == bit) {\n adjacentBits[idx][rowColumn]++;\n } else {\n previousBits[idx][rowColumn] = bit;\n if (adjacentBits[idx][rowColumn] >= 5) {\n scores[idx] += 3 + adjacentBits[idx][rowColumn] - 5;\n }\n adjacentBits[idx][rowColumn] = 1;\n }\n }\n function calculateDarkModulesRatioScore(darkModules, total) {\n var percent = Math.floor(darkModules / total * 100), mod5 = percent % 5, previous = Math.abs(percent - mod5 - 50), next = Math.abs(percent + 5 - mod5 - 50), score = 10 * Math.min(previous / 5, next / 5);\n return score;\n }\n var EncodingResult = function (dataString, version) {\n this.dataString = dataString;\n this.version = version;\n };\n var IsoEncoder = function () {\n this.getEncodingResult = function (inputString, errorCorrectionLevel) {\n var modes = getModes(inputString), dataCodewordsCount = getDataCodewordsCount(modes), version = getVersion(dataCodewordsCount, errorCorrectionLevel), dataString = getDataString(modes, version);\n return new EncodingResult(dataString, version);\n };\n };\n var UTF8Encoder = function () {\n this.mode = modeInstances[this.encodingMode];\n };\n UTF8Encoder.fn = UTF8Encoder.prototype = {\n encodingMode: BYTE,\n utfBOM: '111011111011101110111111',\n initialModeCountStringLength: 20,\n getEncodingResult: function (inputString, errorCorrectionLevel) {\n var that = this, data = that.encode(inputString), dataCodewordsCount = that.getDataCodewordsCount(data), version = getVersion(dataCodewordsCount, errorCorrectionLevel), dataString = that.mode.getModeCountString(data.length / 8, version) + data;\n return new EncodingResult(dataString, version);\n },\n getDataCodewordsCount: function (data) {\n var that = this, dataLength = data.length, dataCodewordsCount = Math.ceil((that.initialModeCountStringLength + dataLength) / 8);\n return dataCodewordsCount;\n },\n encode: function (str) {\n var that = this, result = that.utfBOM;\n for (var i = 0; i < str.length; i++) {\n result += that.encodeCharacter(str.charCodeAt(i));\n }\n return result;\n },\n encodeCharacter: function (code) {\n var bytesCount = this.getBytesCount(code), bc = bytesCount - 1, result = '';\n if (bytesCount == 1) {\n result = toBitsString(code, 8);\n } else {\n var significantOnes = 8 - bytesCount;\n for (var i = 0; i < bc; i++) {\n result = toBitsString(code >> i * 6 & 63 | 128, 8) + result;\n }\n result = (code >> bc * 6 | 255 >> significantOnes << significantOnes).toString(2) + result;\n }\n return result;\n },\n getBytesCount: function (code) {\n var ranges = this.ranges;\n for (var i = 0; i < ranges.length; i++) {\n if (code < ranges[i]) {\n return i + 1;\n }\n }\n },\n ranges: [\n 128,\n 2048,\n 65536,\n 2097152,\n 67108864\n ]\n };\n var QRCodeDataEncoder = function (encoding) {\n if (encoding && encoding.toLowerCase().indexOf('utf_8') >= 0) {\n return new UTF8Encoder();\n } else {\n return new IsoEncoder();\n }\n };\n var encodeData = function (inputString, errorCorrectionLevel, encoding) {\n var encoder = new QRCodeDataEncoder(encoding), encodingResult = encoder.getEncodingResult(inputString, errorCorrectionLevel), version = encodingResult.version, versionInformation = versionsCodewordsInformation[version - 1][errorCorrectionLevel], dataString = padDataString(encodingResult.dataString, versionInformation.totalDataCodewords), blocks = getBlocks(dataString, versionInformation), matrices = initMatrices(version);\n addFinderPatterns(matrices);\n addAlignmentPatterns(matrices, version);\n addTimingFunctions(matrices);\n if (version >= 7) {\n addVersionInformation(matrices, toBitsString(0, 18));\n }\n addFormatInformation(matrices, toBitsString(0, 15));\n fillData(matrices, blocks);\n var minIdx = scoreMaskMatrixes(matrices), optimalMatrix = matrices[minIdx];\n if (version >= 7) {\n addVersionInformation([optimalMatrix], encodeVersionInformation(version));\n }\n var formatString = errorCorrectionPatterns[errorCorrectionLevel] + toBitsString(minIdx, 3);\n addFormatInformation([optimalMatrix], encodeFormatInformation(formatString));\n return optimalMatrix;\n };\n var QRCodeDefaults = {\n DEFAULT_SIZE: 200,\n QUIET_ZONE_LENGTH: 4,\n DEFAULT_ERROR_CORRECTION_LEVEL: 'L',\n DEFAULT_BACKGROUND: '#fff',\n DEFAULT_DARK_MODULE_COLOR: '#000',\n MIN_BASE_UNIT_SIZE: 1\n };\n var QRCode = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that.element = $(element);\n that.wrapper = that.element;\n that.element.addClass('k-qrcode');\n that.surfaceWrap = $('').css('position', 'relative').appendTo(this.element);\n that.surface = draw.Surface.create(that.surfaceWrap, { type: that.options.renderAs });\n that.setOptions(options);\n },\n redraw: function () {\n var size = this._getSize();\n this.surfaceWrap.css({\n width: size,\n height: size\n });\n this.surface.clear();\n this.createVisual();\n this.surface.draw(this.visual);\n },\n getSize: function () {\n return kendo.dimensions(this.element);\n },\n _resize: function () {\n this.redraw();\n },\n createVisual: function () {\n this.visual = this._render();\n },\n exportVisual: function () {\n return this._render();\n },\n _render: function () {\n var that = this, value = that._value, baseUnit, border = that.options.border || {}, padding = that.options.padding || 0, borderWidth = border.width || 0, quietZoneSize, matrix, size, dataSize, contentSize;\n border.width = borderWidth;\n var visual = new draw.Group();\n if (value) {\n matrix = encodeData(value, that.options.errorCorrection, that.options.encoding);\n size = that._getSize();\n contentSize = size - 2 * (borderWidth + padding);\n baseUnit = that._calculateBaseUnit(contentSize, matrix.length);\n dataSize = matrix.length * baseUnit;\n quietZoneSize = borderWidth + padding + (contentSize - dataSize) / 2;\n visual.append(that._renderBackground(size, border));\n visual.append(that._renderMatrix(matrix, baseUnit, quietZoneSize));\n }\n return visual;\n },\n _getSize: function () {\n var that = this, size;\n if (that.options.size) {\n size = parseInt(that.options.size, 10);\n } else {\n var element = that.element, min = Math.min(element.width(), element.height());\n if (min > 0) {\n size = min;\n } else {\n size = QRCodeDefaults.DEFAULT_SIZE;\n }\n }\n return size;\n },\n _calculateBaseUnit: function (size, matrixSize) {\n var baseUnit = Math.floor(size / matrixSize);\n if (baseUnit < QRCodeDefaults.MIN_BASE_UNIT_SIZE) {\n throw new Error('Insufficient size.');\n }\n if (baseUnit * matrixSize >= size && baseUnit - 1 >= QRCodeDefaults.MIN_BASE_UNIT_SIZE) {\n baseUnit--;\n }\n return baseUnit;\n },\n _renderMatrix: function (matrix, baseUnit, quietZoneSize) {\n var path = new draw.MultiPath({\n fill: { color: this.options.color },\n stroke: null\n });\n for (var row = 0; row < matrix.length; row++) {\n var y = quietZoneSize + row * baseUnit;\n var column = 0;\n while (column < matrix.length) {\n while (matrix[row][column] === 0 && column < matrix.length) {\n column++;\n }\n if (column < matrix.length) {\n var x = column;\n while (matrix[row][column] == 1) {\n column++;\n }\n var x1 = round(quietZoneSize + x * baseUnit);\n var y1 = round(y);\n var x2 = round(quietZoneSize + column * baseUnit);\n var y2 = round(y + baseUnit);\n path.moveTo(x1, y1).lineTo(x1, y2).lineTo(x2, y2).lineTo(x2, y1).close();\n }\n }\n }\n return path;\n },\n _renderBackground: function (size, border) {\n var box = Box2D(0, 0, size, size).unpad(border.width / 2);\n return draw.Path.fromRect(box.toRect(), {\n fill: { color: this.options.background },\n stroke: {\n color: border.color,\n width: border.width\n }\n });\n },\n setOptions: function (options) {\n var that = this;\n options = options || {};\n that.options = extend(that.options, options);\n if (options.value !== undefined) {\n that._value = that.options.value + '';\n }\n that.redraw();\n },\n value: function (value) {\n var that = this;\n if (value === undefined) {\n return that._value;\n }\n that._value = value + '';\n that.redraw();\n },\n options: {\n name: 'QRCode',\n renderAs: 'svg',\n encoding: 'ISO_8859_1',\n value: '',\n errorCorrection: QRCodeDefaults.DEFAULT_ERROR_CORRECTION_LEVEL,\n background: QRCodeDefaults.DEFAULT_BACKGROUND,\n color: QRCodeDefaults.DEFAULT_DARK_MODULE_COLOR,\n size: '',\n padding: 0,\n border: {\n color: '',\n width: 0\n }\n }\n });\n dataviz.ExportMixin.extend(QRCode.fn);\n dataviz.ui.plugin(QRCode);\n kendo.deepExtend(dataviz, {\n QRCode: QRCode,\n QRCodeDefaults: QRCodeDefaults,\n QRCodeFunctions: {\n FreeCellVisitor: FreeCellVisitor,\n fillData: fillData,\n padDataString: padDataString,\n generateErrorCodewords: generateErrorCodewords,\n xorPolynomials: xorPolynomials,\n getBlocks: getBlocks,\n multiplyPolynomials: multiplyPolynomials,\n chooseMode: chooseMode,\n getModes: getModes,\n getDataCodewordsCount: getDataCodewordsCount,\n getVersion: getVersion,\n getDataString: getDataString,\n encodeFormatInformation: encodeFormatInformation,\n encodeBCH: encodeBCH,\n dividePolynomials: dividePolynomials,\n initMatrices: initMatrices,\n addFormatInformation: addFormatInformation,\n encodeVersionInformation: encodeVersionInformation,\n addVersionInformation: addVersionInformation,\n addCentricPattern: addCentricPattern,\n addFinderSeparator: addFinderSeparator,\n addFinderPatterns: addFinderPatterns,\n addAlignmentPatterns: addAlignmentPatterns,\n addTimingFunctions: addTimingFunctions,\n scoreMaskMatrixes: scoreMaskMatrixes,\n encodeData: encodeData,\n UTF8Encoder: UTF8Encoder\n },\n QRCodeFields: {\n modes: modeInstances,\n powersOfTwo: powersOfTwo,\n powersOfTwoResult: powersOfTwoResult,\n generatorPolynomials: generatorPolynomials\n }\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));"],"sourceRoot":"/source/"}