14d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Copyright 2014 PDFium Authors. All rights reserved.
24d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Use of this source code is governed by a BSD-style license that can be
34d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// found in the LICENSE file.
44d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
54d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
64d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Original code is licensed as follows:
74d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann/*
84d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann * Copyright 2007 ZXing authors
94d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann *
104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann * Licensed under the Apache License, Version 2.0 (the "License");
114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann * you may not use this file except in compliance with the License.
124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann * You may obtain a copy of the License at
134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann *
144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann *      http://www.apache.org/licenses/LICENSE-2.0
154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann *
164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann * Unless required by applicable law or agreed to in writing, software
174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann * distributed under the License is distributed on an "AS IS" BASIS,
184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann * See the License for the specific language governing permissions and
204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann * limitations under the License.
214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann */
224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fxbarcode/common/BC_CommonBitMatrix.h"
244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fxbarcode/qrcode/BC_QRCoderBitVector.h"
254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fxbarcode/qrcode/BC_QRCoderECB.h"
264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fxbarcode/qrcode/BC_QRCoderECBlocks.h"
274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fxbarcode/qrcode/BC_QRCoderErrorCorrectionLevel.h"
284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fxbarcode/qrcode/BC_QRCoderVersion.h"
294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fxbarcode/utils.h"
304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannnamespace {
324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannconst uint8_t BITS_SET_IN_HALF_BYTE[] = {0, 1, 1, 2, 1, 2, 2, 3,
344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                         1, 2, 2, 3, 2, 3, 3, 4};
354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannint32_t NumBitsDiffering(int32_t a, int32_t b) {
374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  a ^= b;
384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return BITS_SET_IN_HALF_BYTE[a & 0x0F] +
394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann         BITS_SET_IN_HALF_BYTE[(a >> 4) & 0x0F] +
404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann         BITS_SET_IN_HALF_BYTE[(a >> 8) & 0x0F] +
414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann         BITS_SET_IN_HALF_BYTE[(a >> 12) & 0x0F] +
424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann         BITS_SET_IN_HALF_BYTE[(a >> 16) & 0x0F] +
434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann         BITS_SET_IN_HALF_BYTE[(a >> 20) & 0x0F] +
444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann         BITS_SET_IN_HALF_BYTE[(a >> 24) & 0x0F] +
454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann         BITS_SET_IN_HALF_BYTE[(a >> 28) & 0x0F];
464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}  // namespace
494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannconst int32_t CBC_QRCoderVersion::VERSION_DECODE_INFO[] = {
514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    0x07C94, 0x085BC, 0x09A99, 0x0A4D3, 0x0BBF6, 0x0C762, 0x0D847,
524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    0x0E60D, 0x0F928, 0x10B78, 0x1145D, 0x12A17, 0x13532, 0x149A6,
534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    0x15683, 0x168C9, 0x177EC, 0x18EC4, 0x191E1, 0x1AFAB, 0x1B08E,
544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    0x1CC1A, 0x1D33F, 0x1ED75, 0x1F250, 0x209D5, 0x216F0, 0x228BA,
554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    0x2379F, 0x24B0B, 0x2542E, 0x26A64, 0x27541, 0x28C69};
564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCFX_ArrayTemplate<CBC_QRCoderVersion*>* CBC_QRCoderVersion::VERSION = nullptr;
584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CBC_QRCoderVersion::Initialize() {
604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  VERSION = new CFX_ArrayTemplate<CBC_QRCoderVersion*>();
614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CBC_QRCoderVersion::Finalize() {
634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (int32_t i = 0; i < VERSION->GetSize(); i++)
644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    delete VERSION->GetAt(i);
654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  delete VERSION;
674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  VERSION = nullptr;
684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCBC_QRCoderVersion::CBC_QRCoderVersion(int32_t versionNumber,
704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                       CBC_QRCoderECBlocks* ecBlocks1,
714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                       CBC_QRCoderECBlocks* ecBlocks2,
724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                       CBC_QRCoderECBlocks* ecBlocks3,
734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                       CBC_QRCoderECBlocks* ecBlocks4) {
744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_versionNumber = versionNumber;
754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_ecBlocksArray.Add(ecBlocks1);
764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_ecBlocksArray.Add(ecBlocks2);
774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_ecBlocksArray.Add(ecBlocks3);
784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_ecBlocksArray.Add(ecBlocks4);
794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t total = 0;
804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t ecCodeWords = ecBlocks1->GetECCodeWordsPerBlock();
814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_ArrayTemplate<CBC_QRCoderECB*>* ecbArray = ecBlocks1->GetECBlocks();
824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (int32_t i = 0; i < ecbArray->GetSize(); i++) {
834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CBC_QRCoderECB* ecBlock = (*ecbArray)[i];
844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    total += ecBlock->GetCount() * (ecBlock->GetDataCodeWords() + ecCodeWords);
854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_totalCodeWords = total;
874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  switch (versionNumber) {
884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case 1:
894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case 2:
914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(18);
934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case 3:
954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(22);
974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case 4:
994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
1004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(26);
1014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
1024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case 5:
1034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
1044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(30);
1054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
1064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case 6:
1074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
1084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(34);
1094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
1104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case 7:
1114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
1124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(22);
1134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(38);
1144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
1154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case 8:
1164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
1174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(24);
1184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(42);
1194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
1204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case 9:
1214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
1224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(26);
1234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(46);
1244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
1254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case 10:
1264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
1274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(28);
1284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(50);
1294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
1304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case 11:
1314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
1324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(30);
1334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(54);
1344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
1354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case 12:
1364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
1374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(32);
1384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(58);
1394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
1404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case 13:
1414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
1424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(34);
1434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(62);
1444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
1454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case 14:
1464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
1474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(26);
1484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(46);
1494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(66);
1504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
1514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case 15:
1524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
1534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(26);
1544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(48);
1554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(70);
1564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
1574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case 16:
1584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
1594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(26);
1604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(50);
1614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(74);
1624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
1634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case 17:
1644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
1654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(30);
1664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(54);
1674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(78);
1684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
1694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case 18:
1704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
1714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(30);
1724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(56);
1734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(82);
1744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
1754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case 19:
1764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
1774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(30);
1784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(58);
1794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(86);
1804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
1814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case 20:
1824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
1834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(34);
1844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(62);
1854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(90);
1864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
1874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case 21:
1884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
1894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(28);
1904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(50);
1914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(72);
1924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(94);
1934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
1944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case 22:
1954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
1964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(26);
1974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(50);
1984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(74);
1994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(98);
2004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
2014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case 23:
2024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
2034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(30);
2044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(54);
2054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(74);
2064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(102);
2074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
2084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case 24:
2094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
2104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(28);
2114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(54);
2124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(80);
2134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(106);
2144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
2154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case 25:
2164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
2174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(32);
2184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(58);
2194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(84);
2204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(110);
2214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
2224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case 26:
2234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
2244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(30);
2254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(58);
2264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(86);
2274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(114);
2284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
2294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case 27:
2304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
2314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(34);
2324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(62);
2334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(90);
2344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(118);
2354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
2364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case 28:
2374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
2384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(26);
2394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(50);
2404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(74);
2414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(98);
2424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(122);
2434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
2444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case 29:
2454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
2464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(30);
2474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(54);
2484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(78);
2494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(102);
2504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(126);
2514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
2524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case 30:
2534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
2544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(26);
2554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(52);
2564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(78);
2574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(104);
2584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(130);
2594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
2604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case 31:
2614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
2624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(30);
2634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(56);
2644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(82);
2654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(108);
2664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(134);
2674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
2684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case 32:
2694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
2704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(34);
2714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(60);
2724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(86);
2734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(112);
2744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(138);
2754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
2764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case 33:
2774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
2784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(30);
2794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(58);
2804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(86);
2814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(114);
2824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(142);
2834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
2844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case 34:
2854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
2864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(34);
2874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(62);
2884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(90);
2894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(118);
2904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(146);
2914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
2924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case 35:
2934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
2944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(30);
2954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(54);
2964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(78);
2974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(102);
2984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(126);
2994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(150);
3004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
3014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case 36:
3024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
3034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(24);
3044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(50);
3054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(76);
3064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(102);
3074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(128);
3084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(154);
3094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
3104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case 37:
3114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
3124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(28);
3134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(54);
3144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(80);
3154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(106);
3164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(132);
3174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(158);
3184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
3194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case 38:
3204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
3214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(32);
3224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(58);
3234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(84);
3244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(110);
3254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(136);
3264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(162);
3274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
3284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case 39:
3294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
3304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(26);
3314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(54);
3324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(82);
3334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(110);
3344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(138);
3354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(166);
3364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
3374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    case 40:
3384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
3394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(30);
3404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(58);
3414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(86);
3424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(114);
3434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(142);
3444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_alignmentPatternCenters.Add(170);
3454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
3464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
3474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
3484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
3494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCBC_QRCoderVersion::~CBC_QRCoderVersion() {
3504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (int32_t i = 0; i < m_ecBlocksArray.GetSize(); ++i)
3514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    delete m_ecBlocksArray[i];
3524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
3534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
3544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannint32_t CBC_QRCoderVersion::GetVersionNumber() {
3554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return m_versionNumber;
3564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
35733357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. MoltmannCFX_ArrayTemplate<int32_t>* CBC_QRCoderVersion::GetAlignmentPatternCenters() {
3584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return &m_alignmentPatternCenters;
3594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
3604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannint32_t CBC_QRCoderVersion::GetTotalCodeWords() {
3614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return m_totalCodeWords;
3624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
3634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannint32_t CBC_QRCoderVersion::GetDimensionForVersion() {
3644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return 17 + 4 * m_versionNumber;
3654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
3664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCBC_QRCoderECBlocks* CBC_QRCoderVersion::GetECBlocksForLevel(
3674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CBC_QRCoderErrorCorrectionLevel* ecLevel) {
3684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return m_ecBlocksArray[ecLevel->Ordinal()];
3694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
3704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCBC_QRCoderVersion* CBC_QRCoderVersion::GetProvisionalVersionForDimension(
3714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    int32_t dimension,
3724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    int32_t& e) {
3734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if ((dimension % 4) != 1) {
3744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    e = BCExceptionRead;
37533357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann    return nullptr;
3764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
3774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CBC_QRCoderVersion* qcv = GetVersionForNumber((dimension - 17) >> 2, e);
37833357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  if (e != BCExceptionNO)
37933357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann    return nullptr;
3804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return qcv;
3814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
3824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCBC_QRCoderVersion* CBC_QRCoderVersion::DecodeVersionInformation(
3834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    int32_t versionBits,
3844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    int32_t& e) {
3854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t bestDifference = FXSYS_IntMax;
3864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t bestVersion = 0;
3874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (int32_t i = 0; i < 34; i++) {
3884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    int32_t targetVersion = VERSION_DECODE_INFO[i];
3894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (targetVersion == versionBits) {
3904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CBC_QRCoderVersion* qcv = GetVersionForNumber(i + 7, e);
39133357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann      if (e != BCExceptionNO)
39233357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann        return nullptr;
3934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return qcv;
3944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
3954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    int32_t bitsDifference = NumBitsDiffering(versionBits, targetVersion);
3964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (bitsDifference < bestDifference) {
3974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      bestVersion = i + 7;
3984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      bestDifference = bitsDifference;
3994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
4004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
4014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bestDifference <= 3) {
4024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CBC_QRCoderVersion* qcv = GetVersionForNumber(bestVersion, e);
40333357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann    if (e != BCExceptionNO)
40433357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann      return nullptr;
4054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return qcv;
4064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
4074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return nullptr;
4084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
4094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCBC_CommonBitMatrix* CBC_QRCoderVersion::BuildFunctionPattern(int32_t& e) {
4104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t dimension = GetDimensionForVersion();
4114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CBC_CommonBitMatrix* bitMatrix = new CBC_CommonBitMatrix();
4124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bitMatrix->Init(dimension);
4134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bitMatrix->SetRegion(0, 0, 9, 9, e);
41433357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  if (e != BCExceptionNO)
41533357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann    return nullptr;
4164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bitMatrix->SetRegion(dimension - 8, 0, 8, 9, e);
41733357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  if (e != BCExceptionNO)
41833357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann    return nullptr;
4194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bitMatrix->SetRegion(0, dimension - 8, 9, 8, e);
42033357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  if (e != BCExceptionNO)
42133357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann    return nullptr;
4224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t max = m_alignmentPatternCenters.GetSize();
4234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (int32_t x = 0; x < max; x++) {
4244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    int32_t i = m_alignmentPatternCenters[x] - 2;
4254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    for (int32_t y = 0; y < max; y++) {
4264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if ((x == 0 && (y == 0 || y == max - 1)) || (x == max - 1 && y == 0)) {
4274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        continue;
4284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      }
4294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      bitMatrix->SetRegion(m_alignmentPatternCenters[y] - 2, i, 5, 5, e);
43033357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann      if (e != BCExceptionNO)
43133357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann        return nullptr;
4324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
4334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
4344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bitMatrix->SetRegion(6, 9, 1, dimension - 17, e);
43533357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  if (e != BCExceptionNO)
43633357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann    return nullptr;
4374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bitMatrix->SetRegion(9, 6, dimension - 17, 1, e);
43833357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  if (e != BCExceptionNO)
43933357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann    return nullptr;
4404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (m_versionNumber > 6) {
4414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    bitMatrix->SetRegion(dimension - 11, 0, 3, 6, e);
44233357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann    if (e != BCExceptionNO)
44333357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann      return nullptr;
4444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    bitMatrix->SetRegion(0, dimension - 11, 6, 3, e);
44533357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann    if (e != BCExceptionNO)
44633357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann      return nullptr;
4474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
4484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return bitMatrix;
4494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
4504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCBC_QRCoderVersion* CBC_QRCoderVersion::GetVersionForNumber(
4514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    int32_t versionNumber,
4524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    int32_t& e) {
4534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (VERSION->GetSize() == 0) {
4544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
4554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        1, new CBC_QRCoderECBlocks(7, new CBC_QRCoderECB(1, 19)),
4564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(10, new CBC_QRCoderECB(1, 16)),
4574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(13, new CBC_QRCoderECB(1, 13)),
4584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(17, new CBC_QRCoderECB(1, 9))));
4594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
4604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        2, new CBC_QRCoderECBlocks(10, new CBC_QRCoderECB(1, 34)),
4614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(16, new CBC_QRCoderECB(1, 28)),
4624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(1, 22)),
4634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(1, 16))));
4644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
4654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        3, new CBC_QRCoderECBlocks(15, new CBC_QRCoderECB(1, 55)),
4664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(1, 44)),
4674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(18, new CBC_QRCoderECB(2, 17)),
4684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(2, 13))));
4694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
4704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        4, new CBC_QRCoderECBlocks(20, new CBC_QRCoderECB(1, 80)),
4714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(18, new CBC_QRCoderECB(2, 32)),
4724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(2, 24)),
4734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(16, new CBC_QRCoderECB(4, 9))));
4744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
4754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        5, new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(1, 108)),
4764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(2, 43)),
4774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(18, new CBC_QRCoderECB(2, 15),
4784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(2, 16)),
4794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(2, 11),
4804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(2, 12))));
4814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
4824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        6, new CBC_QRCoderECBlocks(18, new CBC_QRCoderECB(2, 68)),
4834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(16, new CBC_QRCoderECB(4, 27)),
4844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(4, 19)),
4854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(4, 15))));
4864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
4874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        7, new CBC_QRCoderECBlocks(20, new CBC_QRCoderECB(2, 78)),
4884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(18, new CBC_QRCoderECB(4, 31)),
4894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(18, new CBC_QRCoderECB(2, 14),
4904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(4, 15)),
4914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(4, 13),
4924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(1, 14))));
4934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
4944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        8, new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(2, 97)),
4954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(2, 38),
4964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(2, 39)),
4974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(4, 18),
4984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(2, 19)),
4994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(4, 14),
5004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(2, 15))));
5014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
5024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        9, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(2, 116)),
5034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(3, 36),
5044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(2, 37)),
5054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(20, new CBC_QRCoderECB(4, 16),
5064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(4, 17)),
5074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(4, 12),
5084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(4, 13))));
5094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
5104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        10, new CBC_QRCoderECBlocks(18, new CBC_QRCoderECB(2, 68),
5114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    new CBC_QRCoderECB(2, 69)),
5124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(4, 43),
5134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(1, 44)),
5144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(6, 19),
5154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(2, 20)),
5164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(6, 15),
5174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(2, 16))));
5184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
5194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        11, new CBC_QRCoderECBlocks(20, new CBC_QRCoderECB(4, 81)),
5204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(1, 50),
5214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(4, 51)),
5224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(4, 22),
5234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(4, 23)),
5244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(3, 12),
5254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(8, 13))));
5264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
5274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        12, new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(2, 92),
5284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    new CBC_QRCoderECB(2, 93)),
5294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(6, 36),
5304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(2, 37)),
5314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(4, 20),
5324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(6, 21)),
5334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(7, 14),
5344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(4, 15))));
5354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
5364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        13, new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(4, 107)),
5374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(8, 37),
5384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(1, 38)),
5394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(8, 20),
5404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(4, 21)),
5414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(12, 11),
5424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(4, 12))));
5434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
5444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        14, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(3, 115),
5454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    new CBC_QRCoderECB(1, 116)),
5464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(4, 40),
5474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(5, 41)),
5484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(20, new CBC_QRCoderECB(11, 16),
5494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(5, 17)),
5504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(11, 12),
5514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(5, 13))));
5524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
5534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        15, new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(5, 87),
5544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    new CBC_QRCoderECB(1, 88)),
5554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(5, 41),
5564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(5, 42)),
5574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(5, 24),
5584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(7, 25)),
5594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(11, 12),
5604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(7, 13))));
5614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
5624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        16, new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(5, 98),
5634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    new CBC_QRCoderECB(1, 99)),
5644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(7, 45),
5654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(3, 46)),
5664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(15, 19),
5674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(2, 20)),
5684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(3, 15),
5694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(13, 16))));
5704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
5714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        17, new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(1, 107),
5724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    new CBC_QRCoderECB(5, 108)),
5734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(10, 46),
5744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(1, 47)),
5754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(1, 22),
5764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(15, 23)),
5774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(2, 14),
5784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(17, 15))));
5794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
5804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        18, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(5, 120),
5814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    new CBC_QRCoderECB(1, 121)),
5824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(9, 43),
5834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(4, 44)),
5844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(17, 22),
5854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(1, 23)),
5864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(2, 14),
5874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(19, 15))));
5884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
5894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        19, new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(3, 113),
5904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    new CBC_QRCoderECB(4, 114)),
5914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(3, 44),
5924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(11, 45)),
5934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(17, 21),
5944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(4, 22)),
5954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(9, 13),
5964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(16, 14))));
5974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
5984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        20, new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(3, 107),
5994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    new CBC_QRCoderECB(5, 108)),
6004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(3, 41),
6014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(13, 42)),
6024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(15, 24),
6034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(5, 25)),
6044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(15, 15),
6054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(10, 16))));
6064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
6074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        21, new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(4, 116),
6084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    new CBC_QRCoderECB(4, 117)),
6094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(17, 42)),
6104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(17, 22),
6114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(6, 23)),
6124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(19, 16),
6134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(6, 17))));
6144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
6154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        22, new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(2, 111),
6164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    new CBC_QRCoderECB(7, 112)),
6174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(17, 46)),
6184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(7, 24),
6194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(16, 25)),
6204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(34, 13))));
6214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
6224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        23, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(4, 121),
6234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    new CBC_QRCoderECB(5, 122)),
6244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(4, 47),
6254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(14, 48)),
6264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(11, 24),
6274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(14, 25)),
6284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(16, 15),
6294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(14, 16))));
6304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
6314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        24, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(6, 117),
6324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    new CBC_QRCoderECB(4, 118)),
6334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(6, 45),
6344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(14, 46)),
6354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(11, 24),
6364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(16, 25)),
6374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(30, 16),
6384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(2, 17))));
6394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
6404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        25, new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(8, 106),
6414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    new CBC_QRCoderECB(4, 107)),
6424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(8, 47),
6434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(13, 48)),
6444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(7, 24),
6454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(22, 25)),
6464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(22, 15),
6474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(13, 16))));
6484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
6494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        26, new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(10, 114),
6504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    new CBC_QRCoderECB(2, 115)),
6514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(19, 46),
6524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(4, 47)),
6534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(28, 22),
6544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(6, 23)),
6554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(33, 16),
6564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(4, 17))));
6574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
6584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        27, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(8, 122),
6594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    new CBC_QRCoderECB(4, 123)),
6604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(22, 45),
6614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(3, 46)),
6624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(8, 23),
6634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(26, 24)),
6644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(12, 15),
6654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(28, 16))));
6664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
6674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        28, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(3, 117),
6684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    new CBC_QRCoderECB(10, 118)),
6694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(3, 45),
6704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(23, 46)),
6714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(4, 24),
6724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(31, 25)),
6734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(11, 15),
6744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(31, 16))));
6754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
6764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        29, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(7, 116),
6774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    new CBC_QRCoderECB(7, 117)),
6784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(21, 45),
6794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(7, 46)),
6804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(1, 23),
6814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(37, 24)),
6824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(19, 15),
6834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(26, 16))));
6844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
6854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        30, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(5, 115),
6864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    new CBC_QRCoderECB(10, 116)),
6874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(19, 47),
6884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(10, 48)),
6894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(15, 24),
6904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(25, 25)),
6914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(23, 15),
6924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(25, 16))));
6934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
6944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        31, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(13, 115),
6954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    new CBC_QRCoderECB(3, 116)),
6964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(2, 46),
6974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(29, 47)),
6984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(42, 24),
6994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(1, 25)),
7004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(23, 15),
7014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(28, 16))));
7024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
7034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        32, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(17, 115)),
7044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(10, 46),
7054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(23, 47)),
7064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(10, 24),
7074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(35, 25)),
7084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(19, 15),
7094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(35, 16))));
7104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
7114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        33, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(17, 115),
7124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    new CBC_QRCoderECB(1, 116)),
7134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(14, 46),
7144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(21, 47)),
7154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(29, 24),
7164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(19, 25)),
7174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(11, 15),
7184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(46, 16))));
7194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
7204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        34, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(13, 115),
7214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    new CBC_QRCoderECB(6, 116)),
7224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(14, 46),
7234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(23, 47)),
7244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(44, 24),
7254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(7, 25)),
7264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(59, 16),
7274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(1, 17))));
7284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
7294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        35, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(12, 121),
7304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    new CBC_QRCoderECB(7, 122)),
7314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(12, 47),
7324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(26, 48)),
7334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(39, 24),
7344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(14, 25)),
7354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(22, 15),
7364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(41, 16))));
7374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
7384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        36, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(6, 121),
7394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    new CBC_QRCoderECB(14, 122)),
7404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(6, 47),
7414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(34, 48)),
7424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(46, 24),
7434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(10, 25)),
7444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(2, 15),
7454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(64, 16))));
7464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
7474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        37, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(17, 122),
7484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    new CBC_QRCoderECB(4, 123)),
7494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(29, 46),
7504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(14, 47)),
7514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(49, 24),
7524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(10, 25)),
7534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(24, 15),
7544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(46, 16))));
7554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
7564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        38, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(4, 122),
7574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    new CBC_QRCoderECB(18, 123)),
7584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(13, 46),
7594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(32, 47)),
7604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(48, 24),
7614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(14, 25)),
7624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(42, 15),
7634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(32, 16))));
7644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
7654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        39, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(20, 117),
7664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    new CBC_QRCoderECB(4, 118)),
7674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(40, 47),
7684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(7, 48)),
7694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(43, 24),
7704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(22, 25)),
7714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(10, 15),
7724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(67, 16))));
7734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
7744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        40, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(19, 118),
7754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    new CBC_QRCoderECB(6, 119)),
7764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(18, 47),
7774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(31, 48)),
7784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(34, 24),
7794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(34, 25)),
7804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(20, 15),
7814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                new CBC_QRCoderECB(61, 16))));
7824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
7834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (versionNumber < 1 || versionNumber > 40) {
7844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    e = BCExceptionIllegalArgument;
78533357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann    return nullptr;
7864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
7874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return (*VERSION)[versionNumber - 1];
7884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
7894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
7904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CBC_QRCoderVersion::Destroy() {
7914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (int32_t i = 0; i < VERSION->GetSize(); i++)
7924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    delete (*VERSION)[i];
7934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  VERSION->RemoveAll();
7944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
795