1ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Copyright 2014 PDFium Authors. All rights reserved.
2ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Use of this source code is governed by a BSD-style license that can be
3ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// found in the LICENSE file.
4ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
5ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Original code is licensed as follows:
7ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann/*
8ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * Copyright 2007 ZXing authors
9ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann *
10ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * Licensed under the Apache License, Version 2.0 (the "License");
11ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * you may not use this file except in compliance with the License.
12ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * You may obtain a copy of the License at
13ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann *
14ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann *      http://www.apache.org/licenses/LICENSE-2.0
15ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann *
16ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * Unless required by applicable law or agreed to in writing, software
17ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * distributed under the License is distributed on an "AS IS" BASIS,
18ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * See the License for the specific language governing permissions and
20ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * limitations under the License.
21ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann */
22ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
23ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa/src/fxbarcode/barcode.h"
24ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa/src/fxbarcode/utils.h"
25ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa/src/fxbarcode/common/BC_CommonBitMatrix.h"
26ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "BC_QRCoderECB.h"
27ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "BC_QRCoderFormatInformation.h"
28ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "BC_QRCoderErrorCorrectionLevel.h"
29ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "BC_QRCoderBitVector.h"
30ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "BC_QRCoderECBlocks.h"
31ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "BC_QRCoderVersion.h"
32ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannconst int32_t CBC_QRCoderVersion::VERSION_DECODE_INFO[] = {
33ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    0x07C94, 0x085BC, 0x09A99, 0x0A4D3, 0x0BBF6, 0x0C762, 0x0D847,
34ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    0x0E60D, 0x0F928, 0x10B78, 0x1145D, 0x12A17, 0x13532, 0x149A6,
35ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    0x15683, 0x168C9, 0x177EC, 0x18EC4, 0x191E1, 0x1AFAB, 0x1B08E,
36ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    0x1CC1A, 0x1D33F, 0x1ED75, 0x1F250, 0x209D5, 0x216F0, 0x228BA,
37ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    0x2379F, 0x24B0B, 0x2542E, 0x26A64, 0x27541, 0x28C69};
38ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCFX_PtrArray* CBC_QRCoderVersion::VERSION = NULL;
39ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CBC_QRCoderVersion::Initialize() {
40ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  VERSION = new CFX_PtrArray();
41ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
42ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CBC_QRCoderVersion::Finalize() {
43ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  for (int32_t i = 0; i < VERSION->GetSize(); i++) {
44ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CBC_QRCoderVersion* v = (CBC_QRCoderVersion*)(VERSION->GetAt(i));
45ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    delete v;
46ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
47ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  delete VERSION;
48ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
49ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCBC_QRCoderVersion::CBC_QRCoderVersion(int32_t versionNumber,
50ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                       CBC_QRCoderECBlocks* ecBlocks1,
51ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                       CBC_QRCoderECBlocks* ecBlocks2,
52ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                       CBC_QRCoderECBlocks* ecBlocks3,
53ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                       CBC_QRCoderECBlocks* ecBlocks4) {
54ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_versionNumber = versionNumber;
55ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_ecBlocks.Add(ecBlocks1);
56ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_ecBlocks.Add(ecBlocks2);
57ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_ecBlocks.Add(ecBlocks3);
58ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_ecBlocks.Add(ecBlocks4);
59ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t total = 0;
60ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t ecCodeWords = ecBlocks1->GetECCodeWordsPerBlock();
61ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_PtrArray* ecbArray = ecBlocks1->GetECBlocks();
62ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  for (int32_t i = 0; i < ecbArray->GetSize(); i++) {
63ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CBC_QRCoderECB* ecBlock = (CBC_QRCoderECB*)((*ecbArray)[i]);
64ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    total += ecBlock->GetCount() * (ecBlock->GetDataCodeWords() + ecCodeWords);
65ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
66ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_totalCodeWords = total;
67ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  switch (versionNumber) {
68ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case 1:
69ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
70ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case 2:
71ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
72ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(18);
73ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
74ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case 3:
75ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
76ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(22);
77ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
78ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case 4:
79ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
80ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(26);
81ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
82ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case 5:
83ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
84ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(30);
85ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
86ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case 6:
87ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
88ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(34);
89ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
90ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case 7:
91ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
92ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(22);
93ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(38);
94ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
95ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case 8:
96ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
97ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(24);
98ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(42);
99ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
100ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case 9:
101ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
102ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(26);
103ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(46);
104ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
105ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case 10:
106ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
107ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(28);
108ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(50);
109ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
110ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case 11:
111ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
112ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(30);
113ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(54);
114ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
115ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case 12:
116ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
117ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(32);
118ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(58);
119ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
120ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case 13:
121ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
122ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(34);
123ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(62);
124ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
125ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case 14:
126ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
127ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(26);
128ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(46);
129ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(66);
130ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
131ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case 15:
132ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
133ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(26);
134ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(48);
135ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(70);
136ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
137ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case 16:
138ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
139ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(26);
140ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(50);
141ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(74);
142ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
143ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case 17:
144ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
145ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(30);
146ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(54);
147ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(78);
148ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
149ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case 18:
150ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
151ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(30);
152ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(56);
153ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(82);
154ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
155ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case 19:
156ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
157ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(30);
158ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(58);
159ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(86);
160ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
161ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case 20:
162ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
163ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(34);
164ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(62);
165ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(90);
166ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
167ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case 21:
168ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
169ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(28);
170ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(50);
171ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(72);
172ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(94);
173ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
174ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case 22:
175ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
176ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(26);
177ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(50);
178ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(74);
179ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(98);
180ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
181ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case 23:
182ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
183ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(30);
184ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(54);
185ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(74);
186ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(102);
187ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
188ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case 24:
189ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
190ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(28);
191ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(54);
192ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(80);
193ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(106);
194ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
195ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case 25:
196ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
197ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(32);
198ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(58);
199ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(84);
200ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(110);
201ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
202ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case 26:
203ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
204ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(30);
205ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(58);
206ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(86);
207ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(114);
208ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
209ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case 27:
210ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
211ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(34);
212ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(62);
213ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(90);
214ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(118);
215ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
216ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case 28:
217ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
218ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(26);
219ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(50);
220ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(74);
221ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(98);
222ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(122);
223ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
224ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case 29:
225ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
226ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(30);
227ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(54);
228ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(78);
229ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(102);
230ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(126);
231ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
232ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case 30:
233ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
234ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(26);
235ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(52);
236ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(78);
237ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(104);
238ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(130);
239ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
240ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case 31:
241ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
242ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(30);
243ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(56);
244ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(82);
245ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(108);
246ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(134);
247ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
248ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case 32:
249ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
250ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(34);
251ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(60);
252ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(86);
253ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(112);
254ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(138);
255ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
256ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case 33:
257ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
258ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(30);
259ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(58);
260ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(86);
261ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(114);
262ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(142);
263ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
264ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case 34:
265ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
266ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(34);
267ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(62);
268ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(90);
269ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(118);
270ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(146);
271ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
272ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case 35:
273ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
274ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(30);
275ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(54);
276ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(78);
277ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(102);
278ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(126);
279ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(150);
280ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
281ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case 36:
282ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
283ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(24);
284ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(50);
285ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(76);
286ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(102);
287ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(128);
288ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(154);
289ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
290ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case 37:
291ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
292ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(28);
293ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(54);
294ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(80);
295ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(106);
296ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(132);
297ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(158);
298ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
299ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case 38:
300ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
301ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(32);
302ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(58);
303ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(84);
304ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(110);
305ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(136);
306ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(162);
307ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
308ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case 39:
309ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
310ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(26);
311ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(54);
312ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(82);
313ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(110);
314ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(138);
315ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(166);
316ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
317ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case 40:
318ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(6);
319ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(30);
320ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(58);
321ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(86);
322ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(114);
323ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(142);
324ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_alignmentPatternCenters.Add(170);
325ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
326ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
327ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
328ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCBC_QRCoderVersion::~CBC_QRCoderVersion() {
329ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (m_ecBlocks.GetSize() != 0) {
330ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    int32_t itBeg = 0;
331ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    int32_t itEnd = m_ecBlocks.GetSize();
332ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    while (itBeg != itEnd) {
333ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      delete ((CBC_QRCoderECBlocks*)(m_ecBlocks[itBeg]));
334ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      itBeg++;
335ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
336ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
337ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
338ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint32_t CBC_QRCoderVersion::GetVersionNumber() {
339ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return m_versionNumber;
340ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
341ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCFX_Int32Array* CBC_QRCoderVersion::GetAlignmentPatternCenters() {
342ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return &m_alignmentPatternCenters;
343ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
344ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint32_t CBC_QRCoderVersion::GetTotalCodeWords() {
345ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return m_totalCodeWords;
346ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
347ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint32_t CBC_QRCoderVersion::GetDimensionForVersion() {
348ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return 17 + 4 * m_versionNumber;
349ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
350ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCBC_QRCoderECBlocks* CBC_QRCoderVersion::GetECBlocksForLevel(
351ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CBC_QRCoderErrorCorrectionLevel* ecLevel) {
352ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return (CBC_QRCoderECBlocks*)m_ecBlocks[ecLevel->Ordinal()];
353ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
354ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCBC_QRCoderVersion* CBC_QRCoderVersion::GetProvisionalVersionForDimension(
355ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    int32_t dimension,
356ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    int32_t& e) {
357ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if ((dimension % 4) != 1) {
358ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    e = BCExceptionRead;
359ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
360ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
361ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CBC_QRCoderVersion* qcv = GetVersionForNumber((dimension - 17) >> 2, e);
362ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
363ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return qcv;
364ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
365ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCBC_QRCoderVersion* CBC_QRCoderVersion::DecodeVersionInformation(
366ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    int32_t versionBits,
367ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    int32_t& e) {
368ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t bestDifference = FXSYS_IntMax;
369ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t bestVersion = 0;
370ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  for (int32_t i = 0; i < 34; i++) {
371ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    int32_t targetVersion = VERSION_DECODE_INFO[i];
372ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (targetVersion == versionBits) {
373ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CBC_QRCoderVersion* qcv = GetVersionForNumber(i + 7, e);
374ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
375ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return qcv;
376ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
377ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    int32_t bitsDifference = CBC_QRCoderFormatInformation::NumBitsDiffering(
378ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        versionBits, targetVersion);
379ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (bitsDifference < bestDifference) {
380ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      bestVersion = i + 7;
381ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      bestDifference = bitsDifference;
382ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
383ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
384ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (bestDifference <= 3) {
385ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CBC_QRCoderVersion* qcv = GetVersionForNumber(bestVersion, e);
386ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
387ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return qcv;
388ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
389ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return NULL;
390ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
391ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCBC_CommonBitMatrix* CBC_QRCoderVersion::BuildFunctionPattern(int32_t& e) {
392ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t dimension = GetDimensionForVersion();
393ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CBC_CommonBitMatrix* bitMatrix = new CBC_CommonBitMatrix();
394ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  bitMatrix->Init(dimension);
395ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  bitMatrix->SetRegion(0, 0, 9, 9, e);
396ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
397ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  bitMatrix->SetRegion(dimension - 8, 0, 8, 9, e);
398ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
399ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  bitMatrix->SetRegion(0, dimension - 8, 9, 8, e);
400ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
401ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t max = m_alignmentPatternCenters.GetSize();
402ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  for (int32_t x = 0; x < max; x++) {
403ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    int32_t i = m_alignmentPatternCenters[x] - 2;
404ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    for (int32_t y = 0; y < max; y++) {
405ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if ((x == 0 && (y == 0 || y == max - 1)) || (x == max - 1 && y == 0)) {
406ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        continue;
407ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
408ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      bitMatrix->SetRegion(m_alignmentPatternCenters[y] - 2, i, 5, 5, e);
409ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
410ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
411ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
412ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  bitMatrix->SetRegion(6, 9, 1, dimension - 17, e);
413ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
414ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  bitMatrix->SetRegion(9, 6, dimension - 17, 1, e);
415ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
416ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (m_versionNumber > 6) {
417ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    bitMatrix->SetRegion(dimension - 11, 0, 3, 6, e);
418ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
419ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    bitMatrix->SetRegion(0, dimension - 11, 6, 3, e);
420ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
421ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
422ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return bitMatrix;
423ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
424ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCBC_QRCoderVersion* CBC_QRCoderVersion::GetVersionForNumber(
425ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    int32_t versionNumber,
426ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    int32_t& e) {
427ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (VERSION->GetSize() == 0) {
428ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
429ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        1, new CBC_QRCoderECBlocks(7, new CBC_QRCoderECB(1, 19)),
430ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(10, new CBC_QRCoderECB(1, 16)),
431ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(13, new CBC_QRCoderECB(1, 13)),
432ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(17, new CBC_QRCoderECB(1, 9))));
433ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
434ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        2, new CBC_QRCoderECBlocks(10, new CBC_QRCoderECB(1, 34)),
435ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(16, new CBC_QRCoderECB(1, 28)),
436ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(1, 22)),
437ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(1, 16))));
438ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
439ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        3, new CBC_QRCoderECBlocks(15, new CBC_QRCoderECB(1, 55)),
440ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(1, 44)),
441ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(18, new CBC_QRCoderECB(2, 17)),
442ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(2, 13))));
443ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
444ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        4, new CBC_QRCoderECBlocks(20, new CBC_QRCoderECB(1, 80)),
445ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(18, new CBC_QRCoderECB(2, 32)),
446ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(2, 24)),
447ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(16, new CBC_QRCoderECB(4, 9))));
448ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
449ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        5, new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(1, 108)),
450ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(2, 43)),
451ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(18, new CBC_QRCoderECB(2, 15),
452ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(2, 16)),
453ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(2, 11),
454ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(2, 12))));
455ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
456ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        6, new CBC_QRCoderECBlocks(18, new CBC_QRCoderECB(2, 68)),
457ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(16, new CBC_QRCoderECB(4, 27)),
458ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(4, 19)),
459ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(4, 15))));
460ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
461ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        7, new CBC_QRCoderECBlocks(20, new CBC_QRCoderECB(2, 78)),
462ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(18, new CBC_QRCoderECB(4, 31)),
463ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(18, new CBC_QRCoderECB(2, 14),
464ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(4, 15)),
465ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(4, 13),
466ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(1, 14))));
467ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
468ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        8, new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(2, 97)),
469ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(2, 38),
470ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(2, 39)),
471ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(4, 18),
472ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(2, 19)),
473ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(4, 14),
474ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(2, 15))));
475ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
476ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        9, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(2, 116)),
477ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(3, 36),
478ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(2, 37)),
479ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(20, new CBC_QRCoderECB(4, 16),
480ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(4, 17)),
481ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(4, 12),
482ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(4, 13))));
483ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
484ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        10, new CBC_QRCoderECBlocks(18, new CBC_QRCoderECB(2, 68),
485ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    new CBC_QRCoderECB(2, 69)),
486ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(4, 43),
487ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(1, 44)),
488ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(6, 19),
489ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(2, 20)),
490ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(6, 15),
491ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(2, 16))));
492ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
493ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        11, new CBC_QRCoderECBlocks(20, new CBC_QRCoderECB(4, 81)),
494ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(1, 50),
495ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(4, 51)),
496ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(4, 22),
497ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(4, 23)),
498ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(3, 12),
499ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(8, 13))));
500ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
501ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        12, new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(2, 92),
502ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    new CBC_QRCoderECB(2, 93)),
503ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(6, 36),
504ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(2, 37)),
505ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(4, 20),
506ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(6, 21)),
507ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(7, 14),
508ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(4, 15))));
509ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
510ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        13, new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(4, 107)),
511ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(8, 37),
512ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(1, 38)),
513ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(8, 20),
514ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(4, 21)),
515ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(12, 11),
516ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(4, 12))));
517ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
518ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        14, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(3, 115),
519ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    new CBC_QRCoderECB(1, 116)),
520ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(4, 40),
521ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(5, 41)),
522ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(20, new CBC_QRCoderECB(11, 16),
523ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(5, 17)),
524ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(11, 12),
525ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(5, 13))));
526ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
527ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        15, new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(5, 87),
528ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    new CBC_QRCoderECB(1, 88)),
529ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(5, 41),
530ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(5, 42)),
531ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(5, 24),
532ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(7, 25)),
533ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(11, 12),
534ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(7, 13))));
535ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
536ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        16, new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(5, 98),
537ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    new CBC_QRCoderECB(1, 99)),
538ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(7, 45),
539ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(3, 46)),
540ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(15, 19),
541ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(2, 20)),
542ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(3, 15),
543ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(13, 16))));
544ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
545ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        17, new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(1, 107),
546ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    new CBC_QRCoderECB(5, 108)),
547ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(10, 46),
548ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(1, 47)),
549ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(1, 22),
550ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(15, 23)),
551ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(2, 14),
552ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(17, 15))));
553ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
554ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        18, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(5, 120),
555ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    new CBC_QRCoderECB(1, 121)),
556ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(9, 43),
557ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(4, 44)),
558ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(17, 22),
559ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(1, 23)),
560ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(2, 14),
561ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(19, 15))));
562ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
563ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        19, new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(3, 113),
564ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    new CBC_QRCoderECB(4, 114)),
565ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(3, 44),
566ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(11, 45)),
567ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(17, 21),
568ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(4, 22)),
569ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(9, 13),
570ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(16, 14))));
571ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
572ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        20, new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(3, 107),
573ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    new CBC_QRCoderECB(5, 108)),
574ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(3, 41),
575ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(13, 42)),
576ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(15, 24),
577ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(5, 25)),
578ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(15, 15),
579ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(10, 16))));
580ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
581ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        21, new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(4, 116),
582ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    new CBC_QRCoderECB(4, 117)),
583ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(17, 42)),
584ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(17, 22),
585ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(6, 23)),
586ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(19, 16),
587ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(6, 17))));
588ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
589ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        22, new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(2, 111),
590ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    new CBC_QRCoderECB(7, 112)),
591ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(17, 46)),
592ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(7, 24),
593ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(16, 25)),
594ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(34, 13))));
595ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
596ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        23, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(4, 121),
597ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    new CBC_QRCoderECB(5, 122)),
598ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(4, 47),
599ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(14, 48)),
600ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(11, 24),
601ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(14, 25)),
602ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(16, 15),
603ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(14, 16))));
604ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
605ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        24, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(6, 117),
606ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    new CBC_QRCoderECB(4, 118)),
607ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(6, 45),
608ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(14, 46)),
609ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(11, 24),
610ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(16, 25)),
611ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(30, 16),
612ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(2, 17))));
613ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
614ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        25, new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(8, 106),
615ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    new CBC_QRCoderECB(4, 107)),
616ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(8, 47),
617ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(13, 48)),
618ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(7, 24),
619ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(22, 25)),
620ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(22, 15),
621ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(13, 16))));
622ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
623ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        26, new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(10, 114),
624ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    new CBC_QRCoderECB(2, 115)),
625ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(19, 46),
626ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(4, 47)),
627ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(28, 22),
628ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(6, 23)),
629ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(33, 16),
630ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(4, 17))));
631ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
632ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        27, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(8, 122),
633ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    new CBC_QRCoderECB(4, 123)),
634ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(22, 45),
635ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(3, 46)),
636ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(8, 23),
637ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(26, 24)),
638ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(12, 15),
639ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(28, 16))));
640ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
641ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        28, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(3, 117),
642ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    new CBC_QRCoderECB(10, 118)),
643ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(3, 45),
644ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(23, 46)),
645ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(4, 24),
646ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(31, 25)),
647ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(11, 15),
648ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(31, 16))));
649ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
650ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        29, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(7, 116),
651ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    new CBC_QRCoderECB(7, 117)),
652ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(21, 45),
653ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(7, 46)),
654ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(1, 23),
655ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(37, 24)),
656ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(19, 15),
657ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(26, 16))));
658ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
659ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        30, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(5, 115),
660ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    new CBC_QRCoderECB(10, 116)),
661ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(19, 47),
662ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(10, 48)),
663ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(15, 24),
664ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(25, 25)),
665ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(23, 15),
666ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(25, 16))));
667ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
668ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        31, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(13, 115),
669ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    new CBC_QRCoderECB(3, 116)),
670ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(2, 46),
671ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(29, 47)),
672ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(42, 24),
673ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(1, 25)),
674ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(23, 15),
675ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(28, 16))));
676ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
677ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        32, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(17, 115)),
678ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(10, 46),
679ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(23, 47)),
680ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(10, 24),
681ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(35, 25)),
682ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(19, 15),
683ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(35, 16))));
684ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
685ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        33, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(17, 115),
686ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    new CBC_QRCoderECB(1, 116)),
687ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(14, 46),
688ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(21, 47)),
689ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(29, 24),
690ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(19, 25)),
691ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(11, 15),
692ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(46, 16))));
693ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
694ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        34, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(13, 115),
695ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    new CBC_QRCoderECB(6, 116)),
696ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(14, 46),
697ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(23, 47)),
698ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(44, 24),
699ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(7, 25)),
700ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(59, 16),
701ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(1, 17))));
702ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
703ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        35, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(12, 121),
704ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    new CBC_QRCoderECB(7, 122)),
705ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(12, 47),
706ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(26, 48)),
707ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(39, 24),
708ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(14, 25)),
709ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(22, 15),
710ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(41, 16))));
711ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
712ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        36, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(6, 121),
713ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    new CBC_QRCoderECB(14, 122)),
714ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(6, 47),
715ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(34, 48)),
716ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(46, 24),
717ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(10, 25)),
718ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(2, 15),
719ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(64, 16))));
720ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
721ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        37, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(17, 122),
722ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    new CBC_QRCoderECB(4, 123)),
723ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(29, 46),
724ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(14, 47)),
725ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(49, 24),
726ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(10, 25)),
727ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(24, 15),
728ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(46, 16))));
729ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
730ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        38, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(4, 122),
731ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    new CBC_QRCoderECB(18, 123)),
732ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(13, 46),
733ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(32, 47)),
734ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(48, 24),
735ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(14, 25)),
736ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(42, 15),
737ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(32, 16))));
738ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
739ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        39, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(20, 117),
740ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    new CBC_QRCoderECB(4, 118)),
741ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(40, 47),
742ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(7, 48)),
743ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(43, 24),
744ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(22, 25)),
745ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(10, 15),
746ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(67, 16))));
747ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    VERSION->Add(new CBC_QRCoderVersion(
748ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        40, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(19, 118),
749ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    new CBC_QRCoderECB(6, 119)),
750ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(18, 47),
751ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(31, 48)),
752ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(34, 24),
753ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(34, 25)),
754ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(20, 15),
755ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                new CBC_QRCoderECB(61, 16))));
756ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
757ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (versionNumber < 1 || versionNumber > 40) {
758ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    e = BCExceptionIllegalArgument;
759ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
760ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
761ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return (CBC_QRCoderVersion*)(*VERSION)[versionNumber - 1];
762ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
763ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CBC_QRCoderVersion::Destroy() {
764ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t i;
765ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  for (i = 0; i < VERSION->GetSize(); i++) {
766ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    delete ((CBC_QRCoderVersion*)(*VERSION)[i]);
767ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
768ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
769