o
    vhE                     @   s  d dl Z d dlZzd dlmZ W n
   d dlmZ Y ze W n ey*   eZY nw G dd dZG dd deZG dd	 d	eZ	G d
d deZ
G dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd dZG dd dZG dd dZG dd dZG d d! d!Zd"d# ed$D Zd%d# ed$D Zed&D ]Zd'e> ee< qed&d$D ]Zeed(  eed)  A eed*  A eed&  A ee< qed+D ]Zeeee < qG d,d- d-ZG d.d/ d/ZG d0d1 d1ZdS )2    N)zip_longest)izip_longestc                   @   s\   e Zd ZdZdZdZdd Zdd Zedd Z	d	d
 Z
dd Zdd Zdd Zdd ZdS )QRNr   c                 C   s   | j r
|  |s
t|| _d S N)valid
ValueErrordataselfr    r   b/var/www/html/hyperkenya/venv/lib/python3.10/site-packages/reportlab/graphics/barcode/qrencoder.py__init__*   s   
zQR.__init__c                 C   
   t | jS r   lenr   r
   r   r   r   __len__/      
z
QR.__len__c                 C   sF   | j d u rdS tt| t| j \}}|t| j  t| j d |  S Nr   )bitsdivmodr   sum)r
   qrr   r   r   	bitlength2   s   
 zQR.bitlengthc                 C   sR   d|  k r
dk rn n| j d S |dk r| j d S |dk r#| j d S td| )Nr   
         )      zUnknown version: )
lengthbitsr   )r
   verr   r   r   getLengthBits9   s   


zQR.getLengthBitsc                 C   r   r   r   r   r   r   r   	getLengthB   r   zQR.getLengthc                 C   r   r   )reprr   r   r   r   r   __repr__E   r   zQR.__repr__c                 C   s6   | | jd | |}|r| t| j| d S d S )N   putmoder"   r   r   r
   bufferversionlenbitsr   r   r   write_headerH   s
   
zQR.write_headerc                 C   s   |  || tt| jg| j  D ]2}d}d}t| jD ] }|| d ur<|t| j9 }|| j|| 7 }|| j	| 7 }q|
|| qd S r   )r.   r   iterr   groupranger   charsindexr   r(   )r
   r+   r,   gr   nir   r   r   writeN   s   zQR.write)__name__
__module____qualname__r   r   r0   r   r   propertyr   r"   r#   r%   r.   r7   r   r   r   r   r   %   s    
	r   c                   @   s,   e Zd ZedjZdZdZdZ	dZ
dZdS )QRNumberz[0-9]*$
0123456789)r&      r>   r>   r   )r         Nr8   r9   r:   recompilematchr   r2   r   r0   r)   r    r   r   r   r   r<   Z       r<   c                   @   s,   e Zd ZedjZdZdZdZ	dZ
dZdS )
QRAlphaNumz[-0-9A-Z $%*+./:]*$z-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:)      r   )	         NrA   r   r   r   r   rF   b   rE   rF   c                   @   s,   e Zd ZdZdZdZdZdd Zdd Zd	S )

QR8bitByte)   r   r&   )rM      rN   c                 C   s$   t |tr|d| _d S || _d S )Nzutf-8)
isinstanceunicodeencoder   r	   r   r   r   r   p   s   

zQR8bitByte.__init__c                 C   s:   |  || | jD ]}t|trt|}||d q	d S )NrM   )r.   r   rO   strordr(   )r
   r+   r,   cr   r   r   r7   v   s   

zQR8bitByte.writeN)	r8   r9   r:   r   r0   r)   r    r   r7   r   r   r   r   rL   j   s    rL   c                   @   s4   e Zd ZdZdZdZdZdd Zdd Zd	d
 Z	dS )QRKanjirK   r   rM   rM   r   r?   c                 C   *   z	|  || _W d S  ty   tdw )NzNot valid kanji)unicode_to_qrkanjir   UnicodeEncodeErrorr   r	   r   r   r   r      
   zQRKanji.__init__c                 C   H  g }t |D ]\}}z|d}z	tt|\}}W n ty&   |\}}Y nw W n) tyA } ztd|||d |jd d }~w tyQ   td|||d dw |d> |B }d|  krbdkrun n|d8 }|d	@ d? d
 |d@  }n'd|  krdkrn n|d8 }|d	@ d? d
 |d@  }n
td|||d d|| q|S )Nz	shift-jisqrkanjir   r&   illegal multibyte sequencerM   i@  i           i@  i  i@  		enumeraterQ   maprS   	TypeErrorrZ   argsr   appendr
   r   codesr6   rT   der   r   r   rY      <   
zQRKanji.unicode_to_qrkanjic                 C   (   |  || | jD ]}||d q	d S NrK   r.   r   r(   r
   r+   r,   rj   r   r   r   r7         
zQRKanji.writeN)
r8   r9   r:   r   r0   r)   r    r   rY   r7   r   r   r   r   rU   }   s    rU   c                   @   s<   e Zd ZdZdZdZdZdd Zdd Zd	d
 Z	dd Z
dS )QRHanzirV   r   rK   rW   c                 C   rX   )NzNot valid hanzi)unicode_to_qrhanzir   rZ   r   r	   r   r   r   r      r[   zQRHanzi.__init__c                 C   r\   )Ngb2312qrhanzir   r&   r^   rM   i  i  r_   `   ra   i  i  i  rb   rh   r   r   r   rs      rl   zQRHanzi.unicode_to_qrhanzic                 C   sB   | | jd | dd | |}|r| t| j| d S d S )Nr&   r   r'   r*   r   r   r   r.      s   
zQRHanzi.write_headerc                 C   rm   rn   ro   rp   r   r   r   r7      rq   zQRHanzi.writeN)r8   r9   r:   r   r0   r)   r    r   rs   r.   r7   r   r   r   r   rr      s    rr   c                   @   $   e Zd ZdZdZdd Zdd ZdS )QRECI   r   r   r   c                 C   s.   d|  k rdk st d t d|| _d S )Nr   i?B zECI out of range)r   r   r	   r   r   r   r      s
   
zQRECI.__init__c                 C   sl   |  || | jdkr|| jd d S | jdkr$|| jdB d d S | jdkr4|| jdB d d S d S )	N   rM   i?  i   rN   i i      ro   r
   r+   r,   r   r   r   r7      s   


zQRECI.writeNr8   r9   r:   r)   r    r   r7   r   r   r   r   rx      s
    rx   c                   @   rw   )QRStructAppendr>   rz   c                 C   s^   d|  k rdkst d t dd|  k rdks$t d t d|| _|| _|| _d S )Nr   rN   zpart out of range [1,16]ztotal out of range [1,16])r   parttotalparity)r
   r   r   r   r   r   r   r      s   
zQRStructAppend.__init__c                 C   s:   |  || || jd || jd || jd d S )Nr&   rM   )r.   r(   r   r   r   r}   r   r   r   r7      s   zQRStructAppend.writeNr~   r   r   r   r   r      s
    	r   c                   @   rw   )QRFNC1FirstrH   rz   c                 C   s   d S r   r   r   r   r   r   r   
  s   zQRFNC1First.__init__c                 C   s   |  || d S r   )r.   r}   r   r   r   r7     s   zQRFNC1First.writeNr~   r   r   r   r   r     s
    r   c                   @   s(   e Zd ZedjZdZdZdd Z	dS )QRFNC1Secondz^([A-Za-z]|[0-9][0-9])$rI   rz   c                 C   sD   |  || | j}t|dkrt|d }nt|}||d d S )Nr   d   rM   )r.   r   r   rS   intr(   rp   r   r   r   r7     s   zQRFNC1Second.writeN)
r8   r9   r:   rB   rC   rD   r   r)   r    r7   r   r   r   r   r     s
    r   c                   @   s  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	g dg dg dg dg dg dg dgZ
dd Zdd Zdd Zg dg dg dg dg dgZdd Zdd Zdd  Zd!d" Zd#Zd$d% Zd&d' Zd#Zd(d) Zd*d+ Zd,Zd-Zed.d/ Zed0d1 Zd#S )2QRCodec                 C   s(   || _ || _d | _d| _d | _g | _d S r   )r,   errorCorrectLevelmodulesmoduleCount	dataCachedataList)r
   r,   r   r   r   r   r      s   
zQRCode.__init__c              	   C   s\   t |tr|}nttttfD ]}z||}W  n ty    Y qw t| j| d | _	d S r   )
rO   r   r<   rF   rU   rL   r   r   rg   r   )r
   r   newDataconvr   r   r   addData(  s   

zQRCode.addDatac                 C   s   | j | | S r   )r   )r
   rowcolr   r   r   isDark8  s   zQRCode.isDarkc                 C      | j S r   r   r   r   r   r   getModuleCount;     zQRCode.getModuleCountc                 C   sv   t ddD ]3}t|| j}tdd |D }d}| jD ]}|d7 }|||7 }||j7 }q||d kr8 |S q|S )Nr   (   c                 s   s    | ]}|j V  qd S r   )	dataCount).0blockr   r   r   	<genexpr>B  s    z+QRCode.calculate_version.<locals>.<genexpr>r   r&   rM   )r1   	QRRSBlockgetRSBlocksr   r   r   r"   r   )r
   r,   rsBlockstotalDataCountlengthr   r   r   r   calculate_version>  s   
zQRCode.calculate_versionc                 C   s(   | j d u r
|  | _ | d|   d S )NF)r,   r   makeImplgetBestMaskPatternr   r   r   r   makeL  s   

zQRCode.makec                    s    j d d  _ fddt jD  _ dd   jd d  d jd         ||  j dkrE |  j	d krUt
 j  j j _	  j	| d S )Nr&      c                    s   g | ]}d g j  qS )Fr   r   xr   r   r   
<listcomp>S  s    z#QRCode.makeImpl.<locals>.<listcomp>r   ry   )r,   r   r1   r   setupPositionProbePatternsetupPositionAdjustPatternsetupTimingPatternsetupTypeInfosetupTypeNumberr   r   
createDatar   r   mapData)r
   testmaskPatternr   r   r   r   Q  s$   



zQRCode.makeImpl)TTTTTTT)TFFFFFT)TFTTTFTc                 C   s   |dkr0dgd | j |d  ||d < |dkr$d| j |d  |d < nd| j |d  |d < ndgd | j |d  ||d < t| jD ],\}}|| j ||  ||d < |dkrfd| j ||  |d < qEd| j ||  |d < qEd S )Nr   Fry   r   rM   )r   rc   _positionProbePattern)r
   r   r   r   r   r   r   r   r   m  s     z QRCode.setupPositionProbePatternc                 C   sH   d}d}t dD ]}| d| t| }|dks||kr!|}|}q|S )Nr   rM   T)r1   r   QRUtilgetLostPoint)r
   minLostPointpatternr6   	lostPointr   r   r   r     s   
zQRCode.getBestMaskPatternc                 C   s`   t d| jd D ]}|d dk| j| d< qttddg| jd | jd d| jd < d S )NrM   r   r   rG   TFrN   )r1   r   r   	itertoolsislicecycle)r
   r   r   r   r   r     s
   zQRCode.setupTimingPattern)TTTTT)TFFFT)TFTFTc                 C   s   t | j}| jd }t||D ]5\}}|dkr"|dks!||kr"q||kr+|dkr+qt| jD ]\}}|| j|| d  |d |d < q0qd S )NrM   r   r>   )	r   getPatternPositionr,   r   r   productrc   _positionAdjustPatternr   )r
   posmaxposr   r   r   r   r   r   r   r     s   
$z!QRCode.setupPositionAdjustPatternc                 C   s   t | j}tdD ]}| o||? d@ dk}|| j|d  |d | j d d < q
tdD ]}| o:||? d@ dk}|| j|d | j d d  |d < q.d S )N   r   r>   rM   )r   getBCHTypeNumberr,   r1   r   r   )r
   r   r   r6   modr   r   r   r     s   &&zQRCode.setupTypeNumberc                 C   s"  | j d> |B }t|}tdD ]3}| o||? d@ dk}|dk r)|| j| d< q|dk r7|| j|d  d< q|| j| jd |  d< qtdD ];}| oT||? d@ dk}|dk rf|| jd | j| d < qH|dk rx|| jd d| d d < qH|| jd d| d < qH| | j| jd  d< d S )Nr>      r   rG   rM   rI   )r   r   getBCHTypeInfor1   r   r   )r
   r   r   r   r   r6   r   r   r   r   r     s"   
zQRCode.setupTypeInfoc           
      c   s   t t| jd ddtddd}ttd| jd tt tdtd| jttd| jf}td	d
 |D }t| j}t	t j
dd
 |D }| jd }|D ]o}||}}|dkrbd}n|| jd krld}nd}|| D ]P}tdD ]I}	||	 }	| jdkr|dk r|	| jd krqx|dk r|| jd krqx||v r|	|v r|dk r|	dk s|	|ks|	dk r|dk s||ksqx|	|fV  qxqrqTd S )Nr   rG   rH   r   rI   rM   ry   c                 s   s    | ]	}t t|V  qd S r   )listreversed)r   r   r   r   r   r     s    z*QRCode._dataPosIterator.<locals>.<genexpr>c                 s   s.    | ]}|d  |d ||d |d  fV  qdS )r   r   Nr   )r   pr   r   r   r     s    
rJ   r   )r   chainr1   r   r   tupler   r   r,   setfrom_iterable)
r
   colsrowsrrowspposr   r   rowidxr   rT   r   r   r   _dataPosIterator  sF   




zQRCode._dataPosIteratorNc                 C   s   | j s
t|  | _ | j S r   )_dataPosListr   r   r   r   r   r   dataPosIterator  s   zQRCode.dataPosIteratorc                 c   s(    |D ]}dD ]	}t ||@ V  qqd S )N)   @       rN   rM   r&   r   r   )bool)r
   r   bytebitr   r   r   _dataBitIterator  s   zQRCode._dataBitIteratorc                 C   s    | j st| || _ t| j S r   )_dataBitListr   r   r/   r	   r   r   r   dataBitIterator  s   
zQRCode.dataBitIteratorc                 C   sP   |  |}t|}t|  |ddD ]\\}}}||||A | j| |< qd S )NF	fillvalue)r   r   getMaskr   r   r   )r
   r   r   r   maskr   r   darkr   r   r   r     s   


zQRCode.mapData   r   c                 C   s  t | |}t }|D ]}|||  qd}|D ]}||j7 }q| |d kr4td| |d f | d |d krD|dd | d dkrY|d | d dksL	 | |d krcn|t	j
d | |d krsn|t	jd qZt	||S )Nr   rM   zcode length overflow. (%d > %d)r&   F)r   r   QRBitBufferr7   r   getLengthInBits	Exceptionr(   putBitr   PAD0PAD1createBytes)r,   r   r   r   r+   r   r   r   r   r   r   r     s2   
zQRCode.createDatac                    s   d}d}d}d}g }g }|D ]Y}||j 7 }|j}	|j |	 }
t||	}t||
}|| j|||	   ||	7 }t|
}t|d | d }|	| | d }  }| fddt
|| |D  qdd tt| t| D }|S )Nr   r   c                    s"   g | ]}|d kr  |nd qS )r   )get)r   r6   modPolyr   r   r   5  s    z&QRCode.createBytes.<locals>.<listcomp>c                 S   s"   g | ]}|D ]}|d ur|qqS r   r   )r   ddrj   r   r   r   r   8  s    
)
totalCountr   maxrg   r+   r   getErrorCorrectPolynomialQRPolynomialr#   r   r1   r   r   r   )r+   r   offset
maxDcCount
maxEcCounttotalCodeCountdcdataecdatar   dcCountecCountrsPolyrawPolyrLenmLenr   r   r   r   r      s4   







zQRCode.createBytes)r8   r9   r:   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   staticmethodr   r   r   r   r   r   r     sR    
	!
r   c                   @   s   e Zd ZdZdZdZdZdS )QRErrorCorrectLevelr   r   r>   r   N)r8   r9   r:   LMQHr   r   r   r   r  >  s
    r  c                   @   s,   e Zd ZdZdZdZdZdZdZdZ	dZ
d	S )
QRMaskPatternr   r   r   r>   r&   rH   rG   ry   N)r8   r9   r:   
PATTERN000
PATTERN001
PATTERN010
PATTERN011
PATTERN100
PATTERN101
PATTERN110
PATTERN111r   r   r   r   r  D  s    r  c                	   @   s  e Zd Zg g ddgddgddgddgddgg dg dg d	g d
g dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg d g d!g d"g d#g d$g d%g d&g d'g d(Zd)Zd*Zd+Zed,d- Zed.d/ Z	ed0d1 Z
ed2d3 Zd4d5 d6d5 d7d5 d8d5 d9d5 d:d5 d;d5 d<d5 d=Zed>d? Zed@dA ZedBdC ZedDdE Zeg dFfdGdHZedIdJ ZedKdL ZdMS )Nr   rG   r            "   )rG   r  &   )rG   r|   *   )rG   r  .   )rG      2   )rG   r  6   )rG   r   :   )rG   r  >   )rG   r  r  B   )rG   r  0   F   )rG   r  r  J   )rG   r  r  N   )rG   r  8   R   )rG   r  r  V   )rG   r  r  Z   )rG   r  r  H   ^   )rG   r  r  r  b   )rG   r  r  r  f   )rG   r  r  P   j   )rG   r   r  T   n   )rG   r  r  r"  r   )rG   r  r  r#  v   )rG   r  r  r  r&  z   )rG   r  r  r  r'  ~   )rG   r  4   r  h      )rG   r  r   r!  l      )rG   r  <   r"  p      )rG   r  r  r"  r,     )rG   r  r  r#  r-     )rG   r  r  r  r'  r/     )rG   r|   r  L   r'  r      )rG   r  r  r(  r)        )rG   r   r  r*  r+        )rG   r  r  r!  r+  r7     )rG   r  r  r"  r,  r8     i7  i%  iT  c                 C   sn   | d> }t |t t j dkr.|t jt |t t j > N }t |t t j dks| d> |B t jA S )Nr   r   )r   getBCHDigitG15G15_MASKr   rj   r   r   r   r     s   
zQRUtil.getBCHTypeInfoc                 C   sh   | d> }t |t t j dkr.|t jt |t t j > N }t |t t j dks| d> |B S )Nr?   r   )r   rC  G18rF  r   r   r   r     s   
zQRUtil.getBCHTypeNumberc                 C   s(   d}| dkr|d7 }| dL } | dks|S Nr   r   r   )r   digitr   r   r   rC    s   zQRUtil.getBCHDigitc                 C   s   t j| d  S Nr   )r   PATTERN_POSITION_TABLE)r,   r   r   r   r     s   zQRUtil.getPatternPositionc                 C      | | d dkS Nr   r   r   r6   jr   r   r   <lambda>      zQRUtil.<lambda>c                 C   s   | d dkS rM  r   rN  r   r   r   rP        c                 C   s   |d dkS Nr>   r   r   rN  r   r   r   rP    rR  c                 C   rL  rS  r   rN  r   r   r   rP    rQ  c                 C   s   | d |d  d dkS Nr   r>   r   r   rN  r   r   r   rP        c                 C   s   | | d | | d  dkS rT  r   rN  r   r   r   rP    s    c                 C   s    | | d | | d  d dkS rT  r   rN  r   r   r   rP         c                 C   s    | | d | | d  d dkS )Nr>   r   r   r   rN  r   r   r   rP    rV  )r   r   r   r>   r&   rH   rG   ry   c                 C   
   | j | S r   )r   )clsr   r   r   r   r     s   
zQRUtil.getMaskc                 C   s8   t dgd}t| D ]}|t dt|gd}q
|S )Nr   r   )r   r1   multiplyQRMathgexp)errorCorrectLengthar6   r   r   r   r     s   z QRUtil.getErrorCorrectPolynomialc                 C   s   d}dg}d }|D ].}|r5dd t ||D }dd t||ddD }|t|7 }dd t||ddD }|}q	|tdd |D 7 }|S )Nr   c                 S   s   g | ]\}}||A qS r   r   r   r]  br   r   r   r     rU  z-QRUtil.maskScoreRule1vert.<locals>.<listcomp>c                 S   s(   g | ]\}}|d kr|o|d  d qS r&   r>   r   r^  r   r   r   r     s    r   c                 S   s    g | ]\}}|r
d n|d qS )r   r   r   r^  r   r   r   r     s    c                 S   s    g | ]}|d kr|d  d qS r`  r   )r   r_  r   r   r   r     rV  )zipr   r   )rX  r   score	lastCountlastRowr   changedscoresr   r   r   maskScoreRule1vert  s$   zQRUtil.maskScoreRule1vertc           	      C   s   d}|d }|dd  D ]9}|d |d }}t |dd  |dd  D ]\}}||  kr7|  kr7|kr=n n|d7 }||}}q$|}q|S )Nr   r   r>   )ra  )	rX  r   rb  rd  r   lastCol0lastCol1col0col1r   r   r   maskScoreRule2  s   ""zQRUtil.maskScoreRule2)TFTTTFTFFFFc                 C   sh   t |}d}|D ])}d}t || }||k r1||||  |kr)|d7 }||7 }n|d7 }||k sq|S )Nr   r   r   )r   )rX  r   r   
patternlenrb  r   rO  maxjr   r   r   maskScoreRule3hor  s   
zQRUtil.maskScoreRule3horc                 C   s:   t |d }tdd |D }dtd| | d d  S )Nr   c                 s   s    | ]}t |V  qd S r   )r   )r   r   r   r   r   r     s    z(QRUtil.maskScoreRule4.<locals>.<genexpr>r   r   r  rH   )r   r   abs)rX  r   	cellCountcountr   r   r   maskScoreRule4  s   zQRUtil.maskScoreRule4c                 C   sp   d}||  |j7 }||  t|j 7 }|| |j7 }|| |j7 }|| t|j 7 }|| |j7 }|S r   )rg  r   ra  rl  ro  rs  )rX  qrCoder   r   r   r   r     s   zQRUtil.getLostPointN)r8   r9   r:   rK  rD  rG  rE  r   r   r   rC  r   r   classmethodr   r   rg  rl  ro  rs  r   r   r   r   r   r   N  s    	
 !"#$%&'(+








r   c                   @   s$   e Zd Zedd Zedd ZdS )rZ  c                 C   s    | dk rt d|  d t|  S )Nr   zglog())r   	LOG_TABLEr5   r   r   r   glog  s   zQRMath.glogc                 C   s8   | dk r| d7 } | dk s| dkr| d8 } | dkst |  S )Nr   ra      )	EXP_TABLErx  r   r   r   r[    s   zQRMath.gexpN)r8   r9   r:   r   ry  r[  r   r   r   r   rZ    s
    
rZ  c                 C      g | ]}|qS r   r   r   r   r   r   r     rQ  r   rz  c                 C   r|  r   r   r   r   r   r   r     rQ  rM   r   r&   rH   rG   ra   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )r   c                 C   sx   t |dkrtt |d | d}|t |k r.|| dkr.|d7 }|t |k r.|| dks||d  dg|  | _d S )Nr   /r   )r   r   num)r
   r~  shiftr   r   r   r   r     s   zQRPolynomial.__init__c                 C   rW  r   )r~  )r
   r3   r   r   r   r     r   zQRPolynomial.getc                 C   r   r   )r   r~  r   r   r   r   r#   "  r   zQRPolynomial.getLengthc                 C   s~   dg|   |   d  }t|   D ]&}t|  D ]}|||   tt| |t|| N  < qqt|dS rH  )r#   r1   rZ  r[  ry  r   r   )r
   rk   r~  r6   rO  r   r   r   rY  %  s   
zQRPolynomial.multiplyc                    sv   |   |  k r
| S t| jd t|jd    fddt| j|jD }|| j|  d  7 }t|d|S )Nr   c                    s(   g | ]\}}|t t |  A qS r   )rZ  r[  ry  )r   nnenratior   r   r   1  s    z$QRPolynomial.mod.<locals>.<listcomp>)r#   rZ  ry  r~  ra  r   r   )r
   rk   r~  r   r  r   r   -  s    
zQRPolynomial.modN)r8   r9   r:   r   r   r#   rY  r   r   r   r   r   r     s    r   c                   @   s0  e Zd Zg g dg dg dg dg dg dg dg dg d	g d
g dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg d g d!g d"g d#g d$g d%g d&g d'g d(g d)g d*g d+g d,g d-g d.g d/g d0g d1g d2g d3g d4g d5g d6g d7g d8g d9g d:g d;g d<g d=g d>g d?g d@g dAg dBg dCg dDg dEg dFg dGg dHg dIg dJg dKg dLg dMg dNg dOg dPg dQg dRg dSg dTg dUg dVg dWg dXg dYg dZg d[g d\g d]g d^g d_g d`g dag dbg dcg ddg deg dfg dgg dhg dig djg dkg dlg dmg dng dog dpg dqg drg dsg dtg dug dvg dwg dxg dyg dzg d{g d|g d}g d~g dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dZdd Zedd Zedd ZdS )r   )r   r     )r   r  rN   )r   r  rK   )r   r  rI   )r   ,   r  )r   r  r  )r   r  r  )r   r  rN   )r   r  7   )r   r  r  )r   #   r   )r   r  rK   )r   r   r(  )r   r  r   )r   r  r|   )r&      rI   )r   r4  r3  )r   C   +   )r   !   r   r   r  rN   )r   r  rJ   r   r  r?   )r   r"  D   )r&   r  r   )r&   r  r  )r&   r  r   )r   r&  r  )r&   1      )r   r   r@   r&   r  r   )r&   '   rK   r   r   r@   )r   y   a   )r   r5  r  r   =   r  )r&   r   r   r   r   r  )r&   r   r@   r   r   r   )r   r9  t   )r>   r  $   r   ;   %   )r&   r  rN   r&   r  r   )r&   r  r?   r&   r  rK   )r   r"  r  r   W   E   )r&   r  r  r   r  r  )rG   r  r  r   r     )rG   r  r   r   r  rN   )r&   e   Q   )r   r(  r  r&   r  3   )r&   r  r  r&   r     )r>   r  r?   rM   r  rK   )r   r  \   r   u   ]   )rG   r  r  r   r  r  )r&   r  r  rG   /      )ry   r  r@   r&   r  r   )r&      k   )rM   r  r  r   r5  r  )rM   r  r  r&   -   r  )r?   r  rJ   r&   r  r?   )r>      s   r   r9  r  )r&   r   r   rH   A   r   )rJ   r  rN   rH   r  r   )rJ   r  r?   rH   r  rK   )rH   m   r  r   r+  X   )rH   r  r   rH   r  r  )rH   r  r|   ry   r  r  )rJ   r  r?   )rH   r.  r&  r   {   c   )ry   I   r  r>   r  r  )r   r  r  r   r  r  )r>   r  r   rK   r  rN   )r      r  rH   r?  r3  )r   r  r  r   K   r  )r   r  r  r   r  r  )r   r  r@   r   r  r   )rH   r:  x   r      r  )rI   r  r  r&   r  r  )r   r  r  r   r  r  )r   r  r@   r  r  r   )r>      q   r&   r8  r,  )r>   r  r  rJ   G   r  )r   r  r  r&   r  r  )rI   r  rK   rN   r   r@   )r>   r  r  rH   r?  r3  )r>   r  r   rK   r  r  )r   r  r|   rH   r  r  )r   r  r   r   r  rN   )r&      r  r&   r  r  )r   r  r  )r   r  r  rG   r  r  )r  r  rN   rG   r  r   )r      o   ry      r6  )r   r  r  )ry   r  r|   rN   r  r  )r  r  rK   )r&   r  r  rH      r.  )r&   r  r  r@   r;  r  )rJ   r  r|   r@   r  r  )rN   r  r   r@   r  rN   )rG      r  r&      r-  )rG   r  r  r@   r  r  )rJ   r  r|   rN   r  r  )r  r  rN   r   r  r   )rM   r=  r)  r&   r  r  )rM   r  r  rK   r;  r  )ry   r  r|   r  r  r  )r  r  r   rK   r  rN   )r   r8  r,  r      r  )r  r  r  r&   r  r  )r  r  r  rG   r  r  )r  r  rN   r&   r  r   )rM   r  r.  r&      r  )r  r  r  r>   r  r  )rM   5   r  r  r  r|   )r?   r  r   r  r  rN   )r>   r  r  r   r  r-  )r>   r  r  r  r  r  )r&   r  r|   r  r  r  )rJ   r  r   r  r  rN   )ry   r9  r  ry   r  r  )r  r  r  ry   r  r  )r   r  r  r  r  r|   )r  r  r   r  r  rN   )rH   r  r  r   r9  r  )r  r  r  r   r;  r  )r   r  r|   r  r  r  )r  r  r   r  r  rN   )rK   r  r  r>   r9  r  )r   r  r     r  r  )r  r  r|   r   r  r  )r  r  r   r  r  rN   )r   r  r  )r   r  r  r  r  r  )r   r  r|   r  r  r  )r  r  r   r  r  rN   )r   r  r  r   r9  r  )r@   r  r  r  r  r  )r  r  r|   r  r  r  )rJ   r  r   r  r  rN   )rK   r  r  rG   r9  r  )r@   r  r  r  r  r  )r  r  r|   ry   r  r  )r  r  rN   r   r  r   )r?   r  r  ry   r  r.  )r?   r  r  r  r;  r  )r  r  r|   r@   r  r  )r  r  r   r   r  rN   )rG   r  r  r@   r  r.  )rG   r  r  r  r;  r  )r  r  r|   r   r  r  )r   r  r   r   r  rN   )r   r  r.  r&   r  r  )r  r  r  r@   r  r  )r  r  r|   r   r  r  )r|   r  r   r  r  rN   )r&   r  r.  r   r  r  )rK   r  r  r   r  r  )r  r  r|   r@   r  r  )r  r  r   r   r  rN   )r  r  r  r&   r  r-  )r   r  r  ry   r;  r  )r  r  r|   r  r  r  )r   r  r   r  r  rN   )r  r  r-  rG      w   )r   r  r  r  r;  r  )r  r  r|   r  r  r  )r  r  r   r  r  rN   c                 C   s   || _ || _d S r   )r   r   )r
   r   r   r   r   r   r   0     
zQRRSBlock.__init__c           
      C   s   t | |}|d krtd|  d | t|d }g }t|D ])}||d d  }||d d  }||d d  }t|D ]
}	|t || q>q |S )Nzbad rs block @ version:z/errorCorrectLevel:r>   r   r   r   )r   getRsBlockTabler   r   r1   rg   )
r,   r   rsBlockr   r   r6   rr  r   r   rO  r   r   r   r   4  s"   zQRRSBlock.getRSBlocksc                 C   s   |t jkrtj| d d d  S |t jkr tj| d d d  S |t jkr0tj| d d d  S |t jkr@tj| d d d  S d S )Nr   r&   r   r   r>   )r  r  r   RS_BLOCK_TABLEr  r  r  )r,   r   r   r   r   r  D  s   



zQRRSBlock.getRsBlockTableN)r8   r9   r:   r  r   r   r   r  r   r   r   r   r   7  s   	
 !"%&'(+,-.1234789:=>?@CDEFIJKLOPQRUVWX[\]^abcdghijmnopstuvyz{|             	                                 !  $  %  &  '  *  +  ,  -  0  1  2  3  6  7  8  9  <  =  >  ?  B  C  D  E  H  I  J  K  N  O  P  Q  T  U  V  W  Z  [  \  ]  `  a  b  c  f  g  h  i  l  m  n  o  r  s  t  u  y
r   c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )r   c                 C   s   g | _ d| _d S r   )r+   r   r   r   r   r   r   R  r  zQRBitBuffer.__init__c                 C   s   d dd | jD S )N.c                 S   s   g | ]}t |qS r   )rR   )r   r5   r   r   r   r   W  s    z(QRBitBuffer.__repr__.<locals>.<listcomp>)joinr+   r   r   r   r   r%   V  s   zQRBitBuffer.__repr__c                 C   s&   |d }| j | d|d  ? d@ dkS )NrM   ry   r   )r+   )r
   r3   bufIndexr   r   r   r   Y  s   zQRBitBuffer.getc                 C   s0   t |D ]}| ||| d ? d@ dk qd S rJ  )r1   r   )r
   r~  r   r6   r   r   r   r(   ]  s    zQRBitBuffer.putc                 C   r   r   )r   r   r   r   r   r   a  r   zQRBitBuffer.getLengthInBitsc                 C   sV   | j d }t| j|kr| jd |r"| j|  d| j d ? O  < |  j d7  _ d S )NrM   r   r   r   )r   r   r+   rg   )r
   r   r  r   r   r   r   d  s   
zQRBitBuffer.putBitN)	r8   r9   r:   r   r%   r   r(   r   r   r   r   r   r   r   Q  s    r   )rB   r   r   r   rP   	NameErrorrR   r   r<   rF   rL   rU   rr   rx   r   r   r   r   r  r  r   rZ  r1   r{  rw  r6   r   r   r   r   r   r   r   <module>   s\   5-6  !
 0


!  