<s> import math <EOL> class QR8bitByte : <EOL> def __init__ ( self , data ) : <EOL> self . mode = QRMode . MODE_8BIT_BYTE <EOL> self . data = data <EOL> def getLength ( self ) : <EOL> return len ( self . data ) <EOL> def write ( self , buffer ) : <EOL> for i in range ( len ( self . data ) ) : <EOL> buffer . put ( ord ( self . data [ i ] ) , <NUM_LIT:8> ) <EOL> def __repr__ ( self ) : <EOL> return self . data <EOL> class QRCode : <EOL> def __init__ ( self , typeNumber , errorCorrectLevel ) : <EOL> self . typeNumber = typeNumber <EOL> self . errorCorrectLevel = errorCorrectLevel <EOL> self . modules = None <EOL> self . moduleCount = <NUM_LIT:0> <EOL> self . dataCache = None <EOL> self . dataList = [ ] <EOL> def addData ( self , data ) : <EOL> newData = QR8bitByte ( data ) <EOL> self . dataList . append ( newData ) <EOL> self . dataCache = None <EOL> def isDark ( self , row , col ) : <EOL> if ( row < <NUM_LIT:0> or self . moduleCount <= row or col < <NUM_LIT:0> or self . moduleCount <= col ) : <EOL> raise Exception ( "<STR_LIT>" % ( row , col , self . moduleCount ) ) <EOL> return self . modules [ row ] [ col ] <EOL> def getModuleCount ( self ) : <EOL> return self . moduleCount <EOL> def make ( self ) : <EOL> self . makeImpl ( False , self . getBestMaskPattern ( ) ) <EOL> def makeImpl ( self , test , maskPattern ) : <EOL> self . moduleCount = self . typeNumber * <NUM_LIT:4> + <NUM_LIT> <EOL> self . modules = [ None for x in range ( self . moduleCount ) ] <EOL> for row in range ( self . moduleCount ) : <EOL> self . modules [ row ] = [ None for x in range ( self . moduleCount ) ] <EOL> for col in range ( self . moduleCount ) : <EOL> self . modules [ row ] [ col ] = None <EOL> self . setupPositionProbePattern ( <NUM_LIT:0> , <NUM_LIT:0> ) <EOL> self . setupPositionProbePattern ( self . moduleCount - <NUM_LIT:7> , <NUM_LIT:0> ) <EOL> self . setupPositionProbePattern ( <NUM_LIT:0> , self . moduleCount - <NUM_LIT:7> ) <EOL> self . setupPositionAdjustPattern ( ) <EOL> self . setupTimingPattern ( ) <EOL> self . setupTypeInfo ( test , maskPattern ) <EOL> if ( self . typeNumber >= <NUM_LIT:7> ) : <EOL> self . setupTypeNumber ( test ) <EOL> if ( self . dataCache == None ) : <EOL> self . dataCache = QRCode . createData ( self . typeNumber , self . errorCorrectLevel , self . dataList ) <EOL> self . mapData ( self . dataCache , maskPattern ) <EOL> def setupPositionProbePattern ( self , row , col ) : <EOL> for r in range ( - <NUM_LIT:1> , <NUM_LIT:8> ) : <EOL> if ( row + r <= - <NUM_LIT:1> or self . moduleCount <= row + r ) : continue <EOL> for c in range ( - <NUM_LIT:1> , <NUM_LIT:8> ) : <EOL> if ( col + c <= - <NUM_LIT:1> or self . moduleCount <= col + c ) : continue <EOL> if ( ( <NUM_LIT:0> <= r and r <= <NUM_LIT:6> and ( c == <NUM_LIT:0> or c == <NUM_LIT:6> ) ) <EOL> or ( <NUM_LIT:0> <= c and c <= <NUM_LIT:6> and ( r == <NUM_LIT:0> or r == <NUM_LIT:6> ) ) <EOL> or ( <NUM_LIT:2> <= r and r <= <NUM_LIT:4> and <NUM_LIT:2> <= c and c <= <NUM_LIT:4> ) ) : <EOL> self . modules [ row + r ] [ col + c ] = True ; <EOL> else : <EOL> self . modules [ row + r ] [ col + c ] = False ; <EOL> def getBestMaskPattern ( self ) : <EOL> minLostPoint = <NUM_LIT:0> <EOL> pattern = <NUM_LIT:0> <EOL> for i in range ( <NUM_LIT:8> ) : <EOL> self . makeImpl ( True , i ) ; <EOL> lostPoint = QRUtil . getLostPoint ( self ) ; <EOL> if ( i == <NUM_LIT:0> or minLostPoint > lostPoint ) : <EOL> minLostPoint = lostPoint <EOL> pattern = i <EOL> return pattern <EOL> def setupTimingPattern ( self ) : <EOL> for r in range ( <NUM_LIT:8> , self . moduleCount - <NUM_LIT:8> ) : <EOL> if ( self . modules [ r ] [ <NUM_LIT:6> ] != None ) : <EOL> continue <EOL> self . modules [ r ] [ <NUM_LIT:6> ] = ( r % <NUM_LIT:2> == <NUM_LIT:0> ) <EOL> for c in range ( <NUM_LIT:8> , self . moduleCount - <NUM_LIT:8> ) : <EOL> if ( self . modules [ <NUM_LIT:6> ] [ c ] != None ) : <EOL> continue <EOL> self . modules [ <NUM_LIT:6> ] [ c ] = ( c % <NUM_LIT:2> == <NUM_LIT:0> ) <EOL> def setupPositionAdjustPattern ( self ) : <EOL> pos = QRUtil . getPatternPosition ( self . typeNumber ) <EOL> for i in range ( len ( pos ) ) : <EOL> for j in range ( len ( pos ) ) : <EOL> row = pos [ i ] <EOL> col = pos [ j ] <EOL> if ( self . modules [ row ] [ col ] != None ) : <EOL> continue <EOL> for r in range ( - <NUM_LIT:2> , <NUM_LIT:3> ) : <EOL> for c in range ( - <NUM_LIT:2> , <NUM_LIT:3> ) : <EOL> if ( r == - <NUM_LIT:2> or r == <NUM_LIT:2> or c == - <NUM_LIT:2> or c == <NUM_LIT:2> or ( r == <NUM_LIT:0> and c == <NUM_LIT:0> ) ) : <EOL> self . modules [ row + r ] [ col + c ] = True <EOL> else : <EOL> self . modules [ row + r ] [ col + c ] = False <EOL> def setupTypeNumber ( self , test ) : <EOL> bits = QRUtil . getBCHTypeNumber ( self . typeNumber ) <EOL> for i in range ( <NUM_LIT> ) : <EOL> mod = ( not test and ( ( bits >> i ) & <NUM_LIT:1> ) == <NUM_LIT:1> ) <EOL> self . modules [ i // <NUM_LIT:3> ] [ i % <NUM_LIT:3> + self . moduleCount - <NUM_LIT:8> - <NUM_LIT:3> ] = mod ; <EOL> for i in range ( <NUM_LIT> ) : <EOL> mod = ( not test and ( ( bits >> i ) & <NUM_LIT:1> ) == <NUM_LIT:1> ) <EOL> self . modules [ i % <NUM_LIT:3> + self . moduleCount - <NUM_LIT:8> - <NUM_LIT:3> ] [ i // <NUM_LIT:3> ] = mod ; <EOL> def setupTypeInfo ( self , test , maskPattern ) : <EOL> data = ( self . errorCorrectLevel << <NUM_LIT:3> ) | maskPattern <EOL> bits = QRUtil . getBCHTypeInfo ( data ) <EOL> for i in range ( <NUM_LIT:15> ) : <EOL> mod = ( not test and ( ( bits >> i ) & <NUM_LIT:1> ) == <NUM_LIT:1> ) <EOL> if ( i < <NUM_LIT:6> ) : <EOL> self . modules [ i ] [ <NUM_LIT:8> ] = mod <EOL> elif ( i < <NUM_LIT:8> ) : <EOL> self . modules [ i + <NUM_LIT:1> ] [ <NUM_LIT:8> ] = mod <EOL> else : <EOL> self . modules [ self . moduleCount - <NUM_LIT:15> + i ] [ <NUM_LIT:8> ] = mod <EOL> for i in range ( <NUM_LIT:15> ) : <EOL> mod = ( not test and ( ( bits >> i ) & <NUM_LIT:1> ) == <NUM_LIT:1> ) ; <EOL> if ( i < <NUM_LIT:8> ) : <EOL> self . modules [ <NUM_LIT:8> ] [ self . moduleCount - i - <NUM_LIT:1> ] = mod <EOL> elif ( i < <NUM_LIT:9> ) : <EOL> self . modules [ <NUM_LIT:8> ] [ <NUM_LIT:15> - i - <NUM_LIT:1> + <NUM_LIT:1> ] = mod <EOL> else : <EOL> self . modules [ <NUM_LIT:8> ] [ <NUM_LIT:15> - i - <NUM_LIT:1> ] = mod <EOL> self . modules [ self . moduleCount - <NUM_LIT:8> ] [ <NUM_LIT:8> ] = ( not test ) <EOL> def mapData ( self , data , maskPattern ) : <EOL> inc = - <NUM_LIT:1> <EOL> row = self . moduleCount - <NUM_LIT:1> <EOL> bitIndex = <NUM_LIT:7> <EOL> byteIndex = <NUM_LIT:0> <EOL> for col in range ( self . moduleCount - <NUM_LIT:1> , <NUM_LIT:0> , - <NUM_LIT:2> ) : <EOL> if ( col == <NUM_LIT:6> ) : col -= <NUM_LIT:1> <EOL> while ( True ) : <EOL> for c in range ( <NUM_LIT:2> ) : <EOL> if ( self . modules [ row ] [ col - c ] == None ) : <EOL> dark = False <EOL> if ( byteIndex < len ( data ) ) : <EOL> dark = ( ( ( data [ byteIndex ] >> bitIndex ) & <NUM_LIT:1> ) == <NUM_LIT:1> ) <EOL> mask = QRUtil . getMask ( maskPattern , row , col - c ) <EOL> if ( mask ) : <EOL> dark = not dark <EOL> self . modules [ row ] [ col - c ] = dark <EOL> bitIndex -= <NUM_LIT:1> <EOL> if ( bitIndex == - <NUM_LIT:1> ) : <EOL> byteIndex += <NUM_LIT:1> <EOL> bitIndex = <NUM_LIT:7> <EOL> row += inc <EOL> if ( row < <NUM_LIT:0> or self . moduleCount <= row ) : <EOL> row -= inc <EOL> inc = - inc <EOL> break <EOL> PAD0 = <NUM_LIT> <EOL> PAD1 = <NUM_LIT> <EOL> @ staticmethod <EOL> def createData ( typeNumber , errorCorrectLevel , dataList ) : <EOL> rsBlocks = QRRSBlock . getRSBlocks ( typeNumber , errorCorrectLevel ) <EOL> buffer = QRBitBuffer ( ) ; <EOL> for i in range ( len ( dataList ) ) : <EOL> data = dataList [ i ] <EOL> buffer . put ( data . mode , <NUM_LIT:4> ) <EOL> buffer . put ( data . getLength ( ) , QRUtil . getLengthInBits ( data . mode , typeNumber ) ) <EOL> data . write ( buffer ) <EOL> totalDataCount = <NUM_LIT:0> ; <EOL> for i in range ( len ( rsBlocks ) ) : <EOL> totalDataCount += rsBlocks [ i ] . dataCount <EOL> if ( buffer . getLengthInBits ( ) > totalDataCount * <NUM_LIT:8> ) : <EOL> raise Exception ( "<STR_LIT>" <EOL> + buffer . getLengthInBits ( ) <EOL> + "<STR_LIT:>>" <EOL> + totalDataCount * <NUM_LIT:8> <EOL> + "<STR_LIT:)>" ) <EOL> if ( buffer . getLengthInBits ( ) + <NUM_LIT:4> <= totalDataCount * <NUM_LIT:8> ) : <EOL> buffer . put ( <NUM_LIT:0> , <NUM_LIT:4> ) <EOL> while ( buffer . getLengthInBits ( ) % <NUM_LIT:8> != <NUM_LIT:0> ) : <EOL> buffer . putBit ( False ) <EOL> while ( True ) : <EOL> if ( buffer . getLengthInBits ( ) >= totalDataCount * <NUM_LIT:8> ) : <EOL> break <EOL> buffer . put ( QRCode . PAD0 , <NUM_LIT:8> ) <EOL> if ( buffer . getLengthInBits ( ) >= totalDataCount * <NUM_LIT:8> ) : <EOL> break <EOL> buffer . put ( QRCode . PAD1 , <NUM_LIT:8> ) <EOL> return QRCode . createBytes ( buffer , rsBlocks ) <EOL> @ staticmethod <EOL> def createBytes ( buffer , rsBlocks ) : <EOL> offset = <NUM_LIT:0> <EOL> maxDcCount = <NUM_LIT:0> <EOL> maxEcCount = <NUM_LIT:0> <EOL> dcdata = [ <NUM_LIT:0> for x in range ( len ( rsBlocks ) ) ] <EOL> ecdata = [ <NUM_LIT:0> for x in range ( len ( rsBlocks ) ) ] <EOL> for r in range ( len ( rsBlocks ) ) : <EOL> dcCount = rsBlocks [ r ] . dataCount <EOL> ecCount = rsBlocks [ r ] . totalCount - dcCount <EOL> maxDcCount = max ( maxDcCount , dcCount ) <EOL> maxEcCount = max ( maxEcCount , ecCount ) <EOL> dcdata [ r ] = [ <NUM_LIT:0> for x in range ( dcCount ) ] <EOL> for i in range ( len ( dcdata [ r ] ) ) : <EOL> dcdata [ r ] [ i ] = <NUM_LIT> & buffer . buffer [ i + offset ] <EOL> offset += dcCount <EOL> rsPoly = QRUtil . getErrorCorrectPolynomial ( ecCount ) <EOL> rawPoly = QRPolynomial ( dcdata [ r ] , rsPoly . getLength ( ) - <NUM_LIT:1> ) <EOL> modPoly = rawPoly . mod ( rsPoly ) <EOL> ecdata [ r ] = [ <NUM_LIT:0> for x in range ( rsPoly . getLength ( ) - <NUM_LIT:1> ) ] <EOL> for i in range ( len ( ecdata [ r ] ) ) : <EOL> modIndex = i + modPoly . getLength ( ) - len ( ecdata [ r ] ) <EOL> if ( modIndex >= <NUM_LIT:0> ) : <EOL> ecdata [ r ] [ i ] = modPoly . get ( modIndex ) <EOL> else : <EOL> ecdata [ r ] [ i ] = <NUM_LIT:0> <EOL> totalCodeCount = <NUM_LIT:0> <EOL> for i in range ( len ( rsBlocks ) ) : <EOL> totalCodeCount += rsBlocks [ i ] . totalCount <EOL> data = [ None for x in range ( totalCodeCount ) ] <EOL> index = <NUM_LIT:0> <EOL> for i in range ( maxDcCount ) : <EOL> for r in range ( len ( rsBlocks ) ) : <EOL> if ( i < len ( dcdata [ r ] ) ) : <EOL> data [ index ] = dcdata [ r ] [ i ] <EOL> index += <NUM_LIT:1> <EOL> for i in range ( maxEcCount ) : <EOL> for r in range ( len ( rsBlocks ) ) : <EOL> if ( i < len ( ecdata [ r ] ) ) : <EOL> data [ index ] = ecdata [ r ] [ i ] <EOL> index += <NUM_LIT:1> <EOL> return data <EOL> class QRMode : <EOL> MODE_NUMBER = <NUM_LIT:1> << <NUM_LIT:0> <EOL> MODE_ALPHA_NUM = <NUM_LIT:1> << <NUM_LIT:1> <EOL> MODE_8BIT_BYTE = <NUM_LIT:1> << <NUM_LIT:2> <EOL> MODE_KANJI = <NUM_LIT:1> << <NUM_LIT:3> <EOL> class QRErrorCorrectLevel : <EOL> L = <NUM_LIT:1> <EOL> M = <NUM_LIT:0> <EOL> Q = <NUM_LIT:3> <EOL> H = <NUM_LIT:2> <EOL> class QRMaskPattern : <EOL> PATTERN000 = <NUM_LIT:0> <EOL> PATTERN001 = <NUM_LIT:1> <EOL> PATTERN010 = <NUM_LIT:2> <EOL> PATTERN011 = <NUM_LIT:3> <EOL> PATTERN100 = <NUM_LIT:4> <EOL> PATTERN101 = <NUM_LIT:5> <EOL> PATTERN110 = <NUM_LIT:6> <EOL> PATTERN111 = <NUM_LIT:7> <EOL> class QRUtil ( object ) : <EOL> PATTERN_POSITION_TABLE = [ <EOL> [ ] , <EOL> [ <NUM_LIT:6> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:6> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:6> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:6> , <NUM_LIT:30> ] , <EOL> [ <NUM_LIT:6> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:6> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:6> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:6> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:6> , <NUM_LIT> , <NUM_LIT:50> ] , <EOL> [ <NUM_LIT:6> , <NUM_LIT:30> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:6> , <NUM_LIT:32> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:6> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:6> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:6> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:6> , <NUM_LIT> , <NUM_LIT:50> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:6> , <NUM_LIT:30> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:6> , <NUM_LIT:30> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:6> , <NUM_LIT:30> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:6> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:6> , <NUM_LIT> , <NUM_LIT:50> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:6> , <NUM_LIT> , <NUM_LIT:50> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:6> , <NUM_LIT:30> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:6> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:6> , <NUM_LIT:32> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:6> , <NUM_LIT:30> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:6> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:6> , <NUM_LIT> , <NUM_LIT:50> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:6> , <NUM_LIT:30> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:6> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:6> , <NUM_LIT:30> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:6> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:6> , <NUM_LIT:30> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:6> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:6> , <NUM_LIT:30> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:6> , <NUM_LIT> , <NUM_LIT:50> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:6> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:6> , <NUM_LIT:32> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:6> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:6> , <NUM_LIT:30> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] <EOL> ] <EOL> G15 = ( <NUM_LIT:1> << <NUM_LIT:10> ) | ( <NUM_LIT:1> << <NUM_LIT:8> ) | ( <NUM_LIT:1> << <NUM_LIT:5> ) | ( <NUM_LIT:1> << <NUM_LIT:4> ) | ( <NUM_LIT:1> << <NUM_LIT:2> ) | ( <NUM_LIT:1> << <NUM_LIT:1> ) | ( <NUM_LIT:1> << <NUM_LIT:0> ) <EOL> G18 = ( <NUM_LIT:1> << <NUM_LIT:12> ) | ( <NUM_LIT:1> << <NUM_LIT:11> ) | ( <NUM_LIT:1> << <NUM_LIT:10> ) | ( <NUM_LIT:1> << <NUM_LIT:9> ) | ( <NUM_LIT:1> << <NUM_LIT:8> ) | ( <NUM_LIT:1> << <NUM_LIT:5> ) | ( <NUM_LIT:1> << <NUM_LIT:2> ) | ( <NUM_LIT:1> << <NUM_LIT:0> ) <EOL> G15_MASK = ( <NUM_LIT:1> << <NUM_LIT> ) | ( <NUM_LIT:1> << <NUM_LIT:12> ) | ( <NUM_LIT:1> << <NUM_LIT:10> ) | ( <NUM_LIT:1> << <NUM_LIT:4> ) | ( <NUM_LIT:1> << <NUM_LIT:1> ) <EOL> @ staticmethod <EOL> def getBCHTypeInfo ( data ) : <EOL> d = data << <NUM_LIT:10> ; <EOL> while ( QRUtil . getBCHDigit ( d ) - QRUtil . getBCHDigit ( QRUtil . G15 ) >= <NUM_LIT:0> ) : <EOL> d ^= ( QRUtil . G15 << ( QRUtil . getBCHDigit ( d ) - QRUtil . getBCHDigit ( QRUtil . G15 ) ) ) <EOL> return ( ( data << <NUM_LIT:10> ) | d ) ^ QRUtil . G15_MASK <EOL> @ staticmethod <EOL> def getBCHTypeNumber ( data ) : <EOL> d = data << <NUM_LIT:12> ; <EOL> while ( QRUtil . getBCHDigit ( d ) - QRUtil . getBCHDigit ( QRUtil . G18 ) >= <NUM_LIT:0> ) : <EOL> d ^= ( QRUtil . G18 << ( QRUtil . getBCHDigit ( d ) - QRUtil . getBCHDigit ( QRUtil . G18 ) ) ) <EOL> return ( data << <NUM_LIT:12> ) | d <EOL> @ staticmethod <EOL> def getBCHDigit ( data ) : <EOL> digit = <NUM_LIT:0> ; <EOL> while ( data != <NUM_LIT:0> ) : <EOL> digit += <NUM_LIT:1> <EOL> data >>= <NUM_LIT:1> <EOL> return digit <EOL> @ staticmethod <EOL> def getPatternPosition ( typeNumber ) : <EOL> return QRUtil . PATTERN_POSITION_TABLE [ typeNumber - <NUM_LIT:1> ] <EOL> @ staticmethod <EOL> def getMask ( maskPattern , i , j ) : <EOL> if maskPattern == QRMaskPattern . PATTERN000 : return ( i + j ) % <NUM_LIT:2> == <NUM_LIT:0> <EOL> if maskPattern == QRMaskPattern . PATTERN001 : return i % <NUM_LIT:2> == <NUM_LIT:0> <EOL> if maskPattern == QRMaskPattern . PATTERN010 : return j % <NUM_LIT:3> == <NUM_LIT:0> <EOL> if maskPattern == QRMaskPattern . PATTERN011 : return ( i + j ) % <NUM_LIT:3> == <NUM_LIT:0> <EOL> if maskPattern == QRMaskPattern . PATTERN100 : return ( math . floor ( i / <NUM_LIT:2> ) + math . floor ( j / <NUM_LIT:3> ) ) % <NUM_LIT:2> == <NUM_LIT:0> <EOL> if maskPattern == QRMaskPattern . PATTERN101 : return ( i * j ) % <NUM_LIT:2> + ( i * j ) % <NUM_LIT:3> == <NUM_LIT:0> <EOL> if maskPattern == QRMaskPattern . PATTERN110 : return ( ( i * j ) % <NUM_LIT:2> + ( i * j ) % <NUM_LIT:3> ) % <NUM_LIT:2> == <NUM_LIT:0> <EOL> if maskPattern == QRMaskPattern . PATTERN111 : return ( ( i * j ) % <NUM_LIT:3> + ( i + j ) % <NUM_LIT:2> ) % <NUM_LIT:2> == <NUM_LIT:0> <EOL> raise Exception ( "<STR_LIT>" + maskPattern ) ; <EOL> @ staticmethod <EOL> def getErrorCorrectPolynomial ( errorCorrectLength ) : <EOL> a = QRPolynomial ( [ <NUM_LIT:1> ] , <NUM_LIT:0> ) ; <EOL> for i in range ( errorCorrectLength ) : <EOL> a = a . multiply ( QRPolynomial ( [ <NUM_LIT:1> , QRMath . gexp ( i ) ] , <NUM_LIT:0> ) ) <EOL> return a <EOL> @ staticmethod <EOL> def getLengthInBits ( mode , type ) : <EOL> if <NUM_LIT:1> <= type and type < <NUM_LIT:10> : <EOL> if mode == QRMode . MODE_NUMBER : return <NUM_LIT:10> <EOL> if mode == QRMode . MODE_ALPHA_NUM : return <NUM_LIT:9> <EOL> if mode == QRMode . MODE_8BIT_BYTE : return <NUM_LIT:8> <EOL> if mode == QRMode . MODE_KANJI : return <NUM_LIT:8> <EOL> raise Exception ( "<STR_LIT>" + mode ) <EOL> elif ( type < <NUM_LIT> ) : <EOL> if mode == QRMode . MODE_NUMBER : return <NUM_LIT:12> <EOL> if mode == QRMode . MODE_ALPHA_NUM : return <NUM_LIT:11> <EOL> if mode == QRMode . MODE_8BIT_BYTE : return <NUM_LIT:16> <EOL> if mode == QRMode . MODE_KANJI : return <NUM_LIT:10> <EOL> raise Exception ( "<STR_LIT>" + mode ) <EOL> elif ( type < <NUM_LIT> ) : <EOL> if mode == QRMode . MODE_NUMBER : return <NUM_LIT> <EOL> if mode == QRMode . MODE_ALPHA_NUM : return <NUM_LIT> <EOL> if mode == QRMode . MODE_8BIT_BYTE : return <NUM_LIT:16> <EOL> if mode == QRMode . MODE_KANJI : return <NUM_LIT:12> <EOL> raise Exception ( "<STR_LIT>" + mode ) <EOL> else : <EOL> raise Exception ( "<STR_LIT>" + type ) <EOL> @ staticmethod <EOL> def getLostPoint ( qrCode ) : <EOL> moduleCount = qrCode . getModuleCount ( ) ; <EOL> lostPoint = <NUM_LIT:0> ; <EOL> for row in range ( moduleCount ) : <EOL> for col in range ( moduleCount ) : <EOL> sameCount = <NUM_LIT:0> ; <EOL> dark = qrCode . isDark ( row , col ) ; <EOL> for r in range ( - <NUM_LIT:1> , <NUM_LIT:2> ) : <EOL> if ( row + r < <NUM_LIT:0> or moduleCount <= row + r ) : <EOL> continue <EOL> for c in range ( - <NUM_LIT:1> , <NUM_LIT:2> ) : <EOL> if ( col + c < <NUM_LIT:0> or moduleCount <= col + c ) : <EOL> continue <EOL> if ( r == <NUM_LIT:0> and c == <NUM_LIT:0> ) : <EOL> continue <EOL> if ( dark == qrCode . isDark ( row + r , col + c ) ) : <EOL> sameCount += <NUM_LIT:1> <EOL> if ( sameCount > <NUM_LIT:5> ) : <EOL> lostPoint += ( <NUM_LIT:3> + sameCount - <NUM_LIT:5> ) <EOL> for row in range ( moduleCount - <NUM_LIT:1> ) : <EOL> for col in range ( moduleCount - <NUM_LIT:1> ) : <EOL> count = <NUM_LIT:0> ; <EOL> if ( qrCode . isDark ( row , col ) ) : count += <NUM_LIT:1> <EOL> if ( qrCode . isDark ( row + <NUM_LIT:1> , col ) ) : count += <NUM_LIT:1> <EOL> if ( qrCode . isDark ( row , col + <NUM_LIT:1> ) ) : count += <NUM_LIT:1> <EOL> if ( qrCode . isDark ( row + <NUM_LIT:1> , col + <NUM_LIT:1> ) ) : count += <NUM_LIT:1> <EOL> if ( count == <NUM_LIT:0> or count == <NUM_LIT:4> ) : <EOL> lostPoint += <NUM_LIT:3> <EOL> for row in range ( moduleCount ) : <EOL> for col in range ( moduleCount - <NUM_LIT:6> ) : <EOL> if ( qrCode . isDark ( row , col ) <EOL> and not qrCode . isDark ( row , col + <NUM_LIT:1> ) <EOL> and qrCode . isDark ( row , col + <NUM_LIT:2> ) <EOL> and qrCode . isDark ( row , col + <NUM_LIT:3> ) <EOL> and qrCode . isDark ( row , col + <NUM_LIT:4> ) <EOL> and not qrCode . isDark ( row , col + <NUM_LIT:5> ) <EOL> and qrCode . isDark ( row , col + <NUM_LIT:6> ) ) : <EOL> lostPoint += <NUM_LIT> <EOL> for col in range ( moduleCount ) : <EOL> for row in range ( moduleCount - <NUM_LIT:6> ) : <EOL> if ( qrCode . isDark ( row , col ) <EOL> and not qrCode . isDark ( row + <NUM_LIT:1> , col ) <EOL> and qrCode . isDark ( row + <NUM_LIT:2> , col ) <EOL> and qrCode . isDark ( row + <NUM_LIT:3> , col ) <EOL> and qrCode . isDark ( row + <NUM_LIT:4> , col ) <EOL> and not qrCode . isDark ( row + <NUM_LIT:5> , col ) <EOL> and qrCode . isDark ( row + <NUM_LIT:6> , col ) ) : <EOL> lostPoint += <NUM_LIT> <EOL> darkCount = <NUM_LIT:0> ; <EOL> for col in range ( moduleCount ) : <EOL> for row in range ( moduleCount ) : <EOL> if ( qrCode . isDark ( row , col ) ) : <EOL> darkCount += <NUM_LIT:1> <EOL> ratio = abs ( <NUM_LIT:100> * darkCount / moduleCount / moduleCount - <NUM_LIT:50> ) / <NUM_LIT:5> <EOL> lostPoint += ratio * <NUM_LIT:10> <EOL> return lostPoint <EOL> class QRMath : <EOL> @ staticmethod <EOL> def glog ( n ) : <EOL> if ( n < <NUM_LIT:1> ) : <EOL> raise Exception ( "<STR_LIT>" + n + "<STR_LIT:)>" ) <EOL> return LOG_TABLE [ n ] ; <EOL> @ staticmethod <EOL> def gexp ( n ) : <EOL> while n < <NUM_LIT:0> : <EOL> n += <NUM_LIT:255> <EOL> while n >= <NUM_LIT> : <EOL> n -= <NUM_LIT:255> <EOL> return EXP_TABLE [ n ] ; <EOL> EXP_TABLE = [ x for x in range ( <NUM_LIT> ) ] <EOL> LOG_TABLE = [ x for x in range ( <NUM_LIT> ) ] <EOL> for i in range ( <NUM_LIT:8> ) : <EOL> EXP_TABLE [ i ] = <NUM_LIT:1> << i ; <EOL> for i in range ( <NUM_LIT:8> , <NUM_LIT> ) : <EOL> EXP_TABLE [ i ] = EXP_TABLE [ i - <NUM_LIT:4> ] ^ EXP_TABLE [ i - <NUM_LIT:5> ] ^ EXP_TABLE [ i - <NUM_LIT:6> ] ^ EXP_TABLE [ i - <NUM_LIT:8> ] <EOL> for i in range ( <NUM_LIT:255> ) : <EOL> LOG_TABLE [ EXP_TABLE [ i ] ] = i <EOL> class QRPolynomial : <EOL> def __init__ ( self , num , shift ) : <EOL> if ( len ( num ) == <NUM_LIT:0> ) : <EOL> raise Exception ( num . length + "<STR_LIT:/>" + shift ) <EOL> offset = <NUM_LIT:0> <EOL> while offset < len ( num ) and num [ offset ] == <NUM_LIT:0> : <EOL> offset += <NUM_LIT:1> <EOL> self . num = [ <NUM_LIT:0> for x in range ( len ( num ) - offset + shift ) ] <EOL> for i in range ( len ( num ) - offset ) : <EOL> self . num [ i ] = num [ i + offset ] <EOL> def get ( self , index ) : <EOL> return self . num [ index ] <EOL> def getLength ( self ) : <EOL> return len ( self . num ) <EOL> def multiply ( self , e ) : <EOL> num = [ <NUM_LIT:0> for x in range ( self . getLength ( ) + e . getLength ( ) - <NUM_LIT:1> ) ] ; <EOL> for i in range ( self . getLength ( ) ) : <EOL> for j in range ( e . getLength ( ) ) : <EOL> num [ i + j ] ^= QRMath . gexp ( QRMath . glog ( self . get ( i ) ) + QRMath . glog ( e . get ( j ) ) ) <EOL> return QRPolynomial ( num , <NUM_LIT:0> ) ; <EOL> def mod ( self , e ) : <EOL> if ( self . getLength ( ) - e . getLength ( ) < <NUM_LIT:0> ) : <EOL> return self ; <EOL> ratio = QRMath . glog ( self . get ( <NUM_LIT:0> ) ) - QRMath . glog ( e . get ( <NUM_LIT:0> ) ) <EOL> num = [ <NUM_LIT:0> for x in range ( self . getLength ( ) ) ] <EOL> for i in range ( self . getLength ( ) ) : <EOL> num [ i ] = self . get ( i ) ; <EOL> for i in range ( e . getLength ( ) ) : <EOL> num [ i ] ^= QRMath . gexp ( QRMath . glog ( e . get ( i ) ) + ratio ) <EOL> return QRPolynomial ( num , <NUM_LIT:0> ) . mod ( e ) ; <EOL> class QRRSBlock : <EOL> RS_BLOCK_TABLE = [ <EOL> [ <NUM_LIT:1> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:1> , <NUM_LIT> , <NUM_LIT:16> ] , <EOL> [ <NUM_LIT:1> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:1> , <NUM_LIT> , <NUM_LIT:9> ] , <EOL> [ <NUM_LIT:1> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:1> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:1> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:1> , <NUM_LIT> , <NUM_LIT:16> ] , <EOL> [ <NUM_LIT:1> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:1> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:2> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:2> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:1> , <NUM_LIT:100> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:2> , <NUM_LIT:50> , <NUM_LIT:32> ] , <EOL> [ <NUM_LIT:2> , <NUM_LIT:50> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:4> , <NUM_LIT> , <NUM_LIT:9> ] , <EOL> [ <NUM_LIT:1> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:2> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:2> , <NUM_LIT> , <NUM_LIT:15> , <NUM_LIT:2> , <NUM_LIT> , <NUM_LIT:16> ] , <EOL> [ <NUM_LIT:2> , <NUM_LIT> , <NUM_LIT:11> , <NUM_LIT:2> , <NUM_LIT> , <NUM_LIT:12> ] , <EOL> [ <NUM_LIT:2> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:4> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:4> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:4> , <NUM_LIT> , <NUM_LIT:15> ] , <EOL> [ <NUM_LIT:2> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:4> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:2> , <NUM_LIT:32> , <NUM_LIT> , <NUM_LIT:4> , <NUM_LIT> , <NUM_LIT:15> ] , <EOL> [ <NUM_LIT:4> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:1> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:2> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:2> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:2> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:4> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:2> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:4> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:2> , <NUM_LIT> , <NUM_LIT:15> ] , <EOL> [ <NUM_LIT:2> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:3> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:2> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:4> , <NUM_LIT> , <NUM_LIT:16> , <NUM_LIT:4> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:4> , <NUM_LIT> , <NUM_LIT:12> , <NUM_LIT:4> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:2> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:2> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:4> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:1> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:6> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:2> , <NUM_LIT> , <NUM_LIT:20> ] , <EOL> [ <NUM_LIT:6> , <NUM_LIT> , <NUM_LIT:15> , <NUM_LIT:2> , <NUM_LIT> , <NUM_LIT:16> ] , <EOL> [ <NUM_LIT:4> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:1> , <NUM_LIT> , <NUM_LIT:50> , <NUM_LIT:4> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:4> , <NUM_LIT:50> , <NUM_LIT> , <NUM_LIT:4> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:3> , <NUM_LIT> , <NUM_LIT:12> , <NUM_LIT:8> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:2> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:2> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:6> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:2> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:4> , <NUM_LIT> , <NUM_LIT:20> , <NUM_LIT:6> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:7> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:4> , <NUM_LIT> , <NUM_LIT:15> ] , <EOL> [ <NUM_LIT:4> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:8> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:1> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:8> , <NUM_LIT> , <NUM_LIT:20> , <NUM_LIT:4> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:12> , <NUM_LIT> , <NUM_LIT:11> , <NUM_LIT:4> , <NUM_LIT> , <NUM_LIT:12> ] , <EOL> [ <NUM_LIT:3> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:1> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:4> , <NUM_LIT:64> , <NUM_LIT> , <NUM_LIT:5> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:11> , <NUM_LIT> , <NUM_LIT:16> , <NUM_LIT:5> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:11> , <NUM_LIT> , <NUM_LIT:12> , <NUM_LIT:5> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:5> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:1> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:5> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:5> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:5> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:7> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:11> , <NUM_LIT> , <NUM_LIT:12> ] , <EOL> [ <NUM_LIT:5> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:1> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:7> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:3> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:15> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:2> , <NUM_LIT> , <NUM_LIT:20> ] , <EOL> [ <NUM_LIT:3> , <NUM_LIT> , <NUM_LIT:15> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:16> ] , <EOL> [ <NUM_LIT:1> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:5> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:10> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:1> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:1> , <NUM_LIT:50> , <NUM_LIT> , <NUM_LIT:15> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:2> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:15> ] , <EOL> [ <NUM_LIT:5> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:1> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:9> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:4> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT:50> , <NUM_LIT> , <NUM_LIT:1> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:2> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:15> ] , <EOL> [ <NUM_LIT:3> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:4> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:3> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:11> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:4> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:9> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:16> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:3> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:5> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:3> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:15> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:5> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:15> , <NUM_LIT> , <NUM_LIT:15> , <NUM_LIT:10> , <NUM_LIT> , <NUM_LIT:16> ] , <EOL> [ <NUM_LIT:4> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:4> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT:50> , <NUM_LIT> , <NUM_LIT:6> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT:16> , <NUM_LIT:6> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:2> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:7> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:7> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:16> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:4> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:5> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:4> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:11> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:16> , <NUM_LIT> , <NUM_LIT:15> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:16> ] , <EOL> [ <NUM_LIT:6> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:4> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:6> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:11> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:16> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:30> , <NUM_LIT> , <NUM_LIT:16> , <NUM_LIT:2> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:8> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:4> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:8> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:7> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT:15> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:16> ] , <EOL> [ <NUM_LIT:10> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:2> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:4> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT:50> , <NUM_LIT> , <NUM_LIT:6> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT:16> , <NUM_LIT:4> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:8> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:4> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:3> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:8> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:12> , <NUM_LIT> , <NUM_LIT:15> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:16> ] , <EOL> [ <NUM_LIT:3> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:10> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:3> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:4> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:11> , <NUM_LIT> , <NUM_LIT:15> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:16> ] , <EOL> [ <NUM_LIT:7> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:7> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:7> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:1> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT:15> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:16> ] , <EOL> [ <NUM_LIT:5> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:10> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:10> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:15> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT:15> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:16> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:3> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:2> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:1> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT:15> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:16> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:10> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:10> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT:15> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:16> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:1> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:11> , <NUM_LIT> , <NUM_LIT:15> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:16> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:6> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:7> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT:16> , <NUM_LIT:1> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:12> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:7> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:12> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT:15> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:16> ] , <EOL> [ <NUM_LIT:6> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:6> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:10> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:2> , <NUM_LIT> , <NUM_LIT:15> , <NUM_LIT:64> , <NUM_LIT> , <NUM_LIT:16> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:4> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:10> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT:15> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:16> ] , <EOL> [ <NUM_LIT:4> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:32> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT:15> , <NUM_LIT:32> , <NUM_LIT> , <NUM_LIT:16> ] , <EOL> [ <NUM_LIT:20> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:4> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:7> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:10> , <NUM_LIT> , <NUM_LIT:15> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:16> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:6> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:20> , <NUM_LIT> , <NUM_LIT:15> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:16> ] <EOL> ] <EOL> def __init__ ( self , totalCount , dataCount ) : <EOL> self . totalCount = totalCount <EOL> self . dataCount = dataCount <EOL> @ staticmethod <EOL> def getRSBlocks ( typeNumber , errorCorrectLevel ) : <EOL> rsBlock = QRRSBlock . getRsBlockTable ( typeNumber , errorCorrectLevel ) ; <EOL> if rsBlock == None : <EOL> raise Exception ( "<STR_LIT>" + typeNumber + "<STR_LIT>" + errorCorrectLevel ) <EOL> length = len ( rsBlock ) / <NUM_LIT:3> <EOL> list = [ ] <EOL> for i in range ( length ) : <EOL> count = rsBlock [ i * <NUM_LIT:3> + <NUM_LIT:0> ] <EOL> totalCount = rsBlock [ i * <NUM_LIT:3> + <NUM_LIT:1> ] <EOL> dataCount = rsBlock [ i * <NUM_LIT:3> + <NUM_LIT:2> ] <EOL> for j in range ( count ) : <EOL> list . append ( QRRSBlock ( totalCount , dataCount ) ) <EOL> return list ; <EOL> @ staticmethod <EOL> def getRsBlockTable ( typeNumber , errorCorrectLevel ) : <EOL> if errorCorrectLevel == QRErrorCorrectLevel . L : <EOL> return QRRSBlock . RS_BLOCK_TABLE [ ( typeNumber - <NUM_LIT:1> ) * <NUM_LIT:4> + <NUM_LIT:0> ] ; <EOL> elif errorCorrectLevel == QRErrorCorrectLevel . M : <EOL> return QRRSBlock . RS_BLOCK_TABLE [ ( typeNumber - <NUM_LIT:1> ) * <NUM_LIT:4> + <NUM_LIT:1> ] ; <EOL> elif errorCorrectLevel == QRErrorCorrectLevel . Q : <EOL> return QRRSBlock . RS_BLOCK_TABLE [ ( typeNumber - <NUM_LIT:1> ) * <NUM_LIT:4> + <NUM_LIT:2> ] ; <EOL> elif errorCorrectLevel == QRErrorCorrectLevel . H : <EOL> return QRRSBlock . RS_BLOCK_TABLE [ ( typeNumber - <NUM_LIT:1> ) * <NUM_LIT:4> + <NUM_LIT:3> ] ; <EOL> else : <EOL> return None ; <EOL> class QRBitBuffer : <EOL> def __init__ ( self ) : <EOL> self . buffer = [ ] <EOL> self . length = <NUM_LIT:0> <EOL> def __repr__ ( self ) : <EOL> return "<STR_LIT:.>" . join ( [ str ( n ) for n in self . buffer ] ) <EOL> def get ( self , index ) : <EOL> bufIndex = math . floor ( index / <NUM_LIT:8> ) <EOL> val = ( ( self . buffer [ bufIndex ] >> ( <NUM_LIT:7> - index % <NUM_LIT:8> ) ) & <NUM_LIT:1> ) == <NUM_LIT:1> <EOL> print "<STR_LIT>" , val <EOL> return ( ( self . buffer [ bufIndex ] >> ( <NUM_LIT:7> - index % <NUM_LIT:8> ) ) & <NUM_LIT:1> ) == <NUM_LIT:1> <EOL> def put ( self , num , length ) : <EOL> for i in range ( length ) : <EOL> self . putBit ( ( ( num >> ( length - i - <NUM_LIT:1> ) ) & <NUM_LIT:1> ) == <NUM_LIT:1> ) <EOL> def getLengthInBits ( self ) : <EOL> return self . length <EOL> def putBit ( self , bit ) : <EOL> bufIndex = self . length // <NUM_LIT:8> <EOL> if len ( self . buffer ) <= bufIndex : <EOL> self . buffer . append ( <NUM_LIT:0> ) <EOL> if bit : <EOL> self . buffer [ bufIndex ] |= ( <NUM_LIT> >> ( self . length % <NUM_LIT:8> ) ) <EOL> self . length += <NUM_LIT:1> </s>
