
    gdt                     b   d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ d d	lmZ d d
lmZ ddgZ ej"                  eej&                        Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d  d!e      Z G d" d#e      Z  G d$ d%e      Z! G d& d'e      Z" G d( d)e      Z#i ejH                  jJ                   e       ejL                  jJ                   e       ejN                  jJ                   e       ejP                  jJ                   e       ejR                  jJ                   e       ejT                  jJ                   e       ejV                  jJ                   e       ejX                  jJ                   e       ejZ                  jJ                   e       ej\                  jJ                   e       ej^                  jJ                   e!       ej`                  jJ                   e!       ejb                  jJ                   e"       ejd                  jJ                   e       ejf                  jJ                   e       ejh                  jJ                   e       ejj                  jJ                   e       ejl                  jJ                   e       ejn                  jJ                   e       ejp                  jJ                   e       ejr                  jJ                   e       ejt                  jJ                   e       ejv                  jJ                   e       ejx                  jJ                   e       ejz                  jJ                   e       ej|                  jJ                   e       ej~                  jJ                   e       i
Z@i ejL                  j                   e       ejN                  j                   e       ejP                  j                   e       ejR                  j                   e       ejT                  j                   e       ejV                  j                   e       ejX                  j                   e       ejZ                  j                   e       ej\                  j                   e       ej                  j                   e        ej`                  j                   e!       ej                  j                   e        ej^                  j                   e!       ejb                  j                   e"       ej                  j                   e#       ejd                  j                   e       ejf                  j                   e       ejh                  j                   e       ejj                  j                   e       ejl                  j                   e       ejn                  j                   e       ejp                  j                   e       ejr                  j                   e       ejt                  j                   e       ejv                  j                   e       ejx                  j                   e       ejz                  j                   e       ej|                  j                   e       ej~                  j                   e       iZE G d* d+e      ZF G d, de      ZG eG       ZHd-eIfd.ZJy)/    N)debug)error)eoo)_MISSING)to_bytes)char)tag)univ)usefulEncoderencode)flagsc                   >    e Zd ZdZdZ ee      Zd Zd Zd Z	ddZ
y)	AbstractItemEncoderT)r   r   c                     |\  }}}||z  }|r|t         j                  z  }|dk  r||z  fS |dz  f}|dz  }|rd|dz  z  f|z   }|dz  }|r|dz  f|z   S )N            )r	   tagFormatConstructed)self	singleTagisConstructedtagClass	tagFormattagId
encodedTag	substrates           u/var/www/html/FastMealFinder_FlaskServer-InitialRelease/venv/lib/python3.12/site-packages/pyasn1/codec/ber/encoder.py	encodeTagzAbstractItemEncoder.encodeTag!   s    %.")U	)
#222J2:%&& IaKE!UT\24y@	!  %')33    c                     |s| j                   ry|dk  r|fS d}|r|dz  f|z   }|dz  }|rt        |      }|dkD  rt        j                  d|z        d|z  f|z   S )N)r   r          ~   zLength octets overflow (%d))supportIndefLenModelenr   PyAsn1Error)r   lengthdefModer   substrateLens        r   encodeLengthz AbstractItemEncoder.encodeLength5   s    433D=7N I#d],y8	1  y>Lc!''(E(TUU<')I55r!   c                 ,    t        j                  d      )NzNot implemented)r   r)   r   valueasn1Spec	encodeFunoptionss        r   encodeValuezAbstractItemEncoder.encodeValueI   s     122r!   Nc                    ||j                   }n|j                   }|s | j                  |||fi |\  }}}|S |j                  dd      }	d}t        |j                        D ]\  \  }
}|	}|
sk	  | j                  |||fi |\  }}}t        rt        d|xr dxs dd	|d
|       |s|r|j                  dd      r|c S |sd}t        rt        d       | j                  |      }t        r8t        d|xr dxs dd|d
t        j                  t        |                   || j                  t        |      |      z  }t        r6t        dt        |      dt        j                  t        |                   r#t        |      |z   }|r4|| j                  z  }E||z   }|rN|| j                  z  }_ st        |      }|S # t
        j                  $ r }t        j                  d|d|      d }~ww xY w)Nr+   Tr!   zError encoding z: zencoded zconstructed  zvalue z into 
ifNotEmptyFz;overridden encoding mode into definitive for primitive typeztag z octets (tag + payload) into )tagSetr4   get	enumerate	superTagsr   r)   LOGr    r   hexdumpbytesr-   r(   eooOctetsSubstrateeooIntegerSubstrate)r   r0   r1   r2   r3   r8   r   r   isOctetsr+   idxr   defModeOverrideexcheaders                  r   r   zAbstractItemEncoder.encodeL   s*   \\F__F 1A1A1Ax2.52.I}h ++i.	'(8(89 4	:NC%O @9I9I9Ix:6=:6I}h %8.>B>y  !]w{{<QV7W$$$&*OYZ^^I}=F!4n::u}}U6];= > d''IHHF	NEMM%-$@B C !&MI5	&!8!88I #Y.	&!9!99Ii4	:l i(I] (( @++38#>@ @@s   .GH$G??H)NN)__name__
__module____qualname__r'   r@   r>   r?   r    r-   r4   r   r#   r!   r   r   r      s1     !234(6(3Kr!   r   c                       e Zd Zd Zy)EndOfOctetsEncoderc                      yNr!   FTr#   r/   s        r   r4   zEndOfOctetsEncoder.encodeValue       r!   NrF   rG   rH   r4   r#   r!   r   rJ   rJ      s     r!   rJ   c                       e Zd ZdZd Zy)BooleanEncoderFc                     |xr dxs dddfS )N)   r   Fr#   r/   s        r   r4   zBooleanEncoder.encodeValue   s    ~%ue33r!   NrF   rG   rH   r'   r4   r#   r!   r   rQ   rQ      s    4r!   rQ   c                       e Zd ZdZdZd Zy)IntegerEncoderFc                     |dk(  r4t         r t        d| j                  xr dxs dz         | j                  ryyt        t        |      d      d	dfS )
Nr   z#encoding %spayload for zero INTEGERzno r6   )r#   FF)rT   FFT)signedF)r<   supportCompactZeror   intr/   s        r   r4   zIntegerEncoder.encodeValue   sX    A:9++5; 
 &&')E
40%==r!   N)rF   rG   rH   r'   rZ   r4   r#   r!   r   rW   rW      s    >r!   rW   c                       e Zd Zd Zy)BitStringEncoderc                 R   ||j                  |      }t        |      }|dz  r|d|dz  z
  z  }n|}|j                  dd      }|rt        |      |dz  k  r1|j                         }t	        t        |      dz  |z
  f      |z   ddfS t
        rt        d|z         |j                  j                  }	|	rt        j                  |	|	      }
nt        j                         }
|j                  |
      }d}d}||k  r*|}t        ||dz  z   |      }| |||| |fi |z  }||k  r*|ddfS )	Nr%   maxChunkSizer   FT#encoding into up to %s-octet chunksr8   r!   )cloner(   r9   asOctetsr>   r<   r8   baseTagr	   TagSetmin)r   r0   r1   r2   r3   valueLengthalignedValuer_   r   rd   r8   stopstarts                r   r4   zBitStringEncoder.encodeValue   sQ   NN5)E%j? Qq%89L L{{>15s<0L14DD$--/I#i.1,{:<=	I5RVVV5DE,,&& ZZ1F ZZ\F#)))8	[ Eu|a//=D<d#;XQQQI [ 
 $$$r!   NrO   r#   r!   r   r]   r]      s    %%r!   r]   c                       e Zd Zd Zy)OctetStringEncoderc                    ||j                         }n2t        |t              s |j                  |      j                         }n|}|j	                  dd      }|rt        |      |k  r|ddfS t        rt        d|z         |V|j                  j                  }|rt        j                  ||      }nt        j                         }|j                  |      }net        |t              sU|j                  j                  }|rt        j                  ||      }nt        j                         }|j                  |      }d}	d}	 ||	|	|z    }
|
sn| ||
|fi |z  }|	|z  }	|ddfS )Nr_   r   FTr`   ra   r!   )rc   
isinstancer>   rb   r9   r(   r<   r8   rd   r	   re   )r   r0   r1   r2   r3   r   r_   rd   r8   poschunks              r   r4   zOctetStringEncoder.encodeValue   sd   (IE5) u-668I I{{>15s9~=eT))5DE ll**G GW5 {{&{1HE5)oo--G GW5 ~~V~4H	#cL01E5(>g>>I<C  $$$r!   NrO   r#   r!   r   rl   rl      s    8%r!   rl   c                       e Zd ZdZd Zy)NullEncoderFc                      yrL   r#   r/   s        r   r4   zNullEncoder.encodeValue#  rN   r!   NrU   r#   r!   r   rr   rr      s     r!   rr   c                       e Zd ZdZd Zy)ObjectIdentifierEncoderFc                    ||j                  |      }|j                         }	 |d   }|d   }d|cxk  rdk  rNn nK|dk(  r|dz   f|dd  z   }nc|dk(  r
|f|dd  z   }nT|dk(  r|dz   f|dd  z   }nBt        j                  d|      |dk(  r|dz   f|dd  z   }nt        j                  d|      d	}|D ]]  }	d|	cxk  rd
k  r
n n||	fz  }|	d
kD  r'|	d
z  f}
|	dz  }	|	rd|	d
z  z  f|
z   }
|	dz  }	|	r||
z  }Dt        j                  d|	d|       |ddfS # t        $ r t        j                  d|      w xY w)Nr   rS   z
Short OID '   (      P   z Impossible first/second arcs at r#   r   r   r   zNegative OID arc  at F)rb   asTuple
IndexErrorr   r)   )r   r0   r1   r2   r3   oidfirstsecondoctetssubOidress              r   r4   z#ObjectIdentifierEncoder.encodeValue*  s   NN5)Emmo	?FEVF
 "z{ns12w.!i#ab')!{ns12w.''PU(WXXaZB;.3qr7*C ##E$STT  	WFF!c!6)##}&16D=13c9CqLF 
 # ''vu(UVV%	W( ue##U  	?##e$=>>	?s   
D "D=NrU   r#   r!   r   ru   ru   '  s    5$r!   ru   c                       e Zd ZdZd Zy)RelativeOIDEncoderFc                    ||j                  |      }d}|j                         D ]]  }d|cxk  rdk  r
n n||fz  }|dkD  r'|dz  f}|dz  }|rd|dz  z  f|z   }|dz  }|r||z  }Dt        j                  d|d|       |ddfS )	Nr#   r   r   r   r   zNegative RELATIVE-OID arc r{   F)rb   r|   r   r)   )r   r0   r1   r2   r3   r   r   r   s           r   r4   zRelativeOIDEncoder.encodeValuee  s    NN5)E mmo 	`FF!c!6)##}&16D=13c9CqLF 
 # ''PVX](^__%	`( ue##r!   NrU   r#   r!   r   r   r   b  s    $r!   r   c                   0    e Zd ZdZdZed        Zd Zd Zy)RealEncoderFry   c                 <   d\  }}| dk  rd}|dk  rd}| |z  } |dk(  r)| dt        |      dz  |z  z  z  } t        |      dz  |z  }n-|dk(  r(| dt        |      dz  |z  z  z  } t        |      dz  |z  }	 t        |       | k7  r| |z  } |d	z  }	 |t        |       ||fS )
N)rS   rS   r   r%   ry            rS   )absr[   )mencbaseemsess        r   _dropFloatingPointzRealEncoder._dropFloatingPoint  s    Bq5Bq5B	Ra<s1vzB''AA!b A]s1vzB''AA!b A1v{WQ3q67A%%r!   c           
      Z   |\  }}}g d}|j                   |v r| j                  ||j                   |      S | j                   |v r| j                  || j                   |      S |||g}|||g}d}d}	t        d      }t        d      D ]  }
| j                  ||
   ||
   ||
         \  }||
<   ||
<   ||
<   t	        ||
         t	        |      k  s$t	        ||
         t	        |      k(  sb||
   |k  sk||
   }t        ||
         }||
   }	 t        rt        d|	d|d|d	|       |||	|fS )
N)ry   r%   r   rS   ry   infr   z(automatically chosen REAL encoding base z, sign z, mantissa z, exponent )
binEncBaser   floatranger   r[   r<   )r   r0   r   br   encBasemantissaexponentsignr   is              r   _chooseEncBasezRealEncoder._chooseEncBase  s\   1aw&**1e.>.>BB__'**1dooqAA q!9q!9%Lq 		%A !33HQKXVW[YTa[QZa[8A;#a&(S!-=Q-GHUVKZ[OQK$!!*		% !($16 7 Q""r!   c                    ||j                  |      }|j                  ry|j                  ry|\  }}}|sy|dk(  r't        rt        d       d||dk(  xr dxs d	|fz  d
dfS |dk(  rd}| j	                  |      \  }	}}
}|	dk  r|dz  }|
dk(  r|dz  dk(  rZ|dz  }|dz  }|dz  dk(  rnF|
dk(  r!|dz  dk(  r|dz  }|dz  }|dz  dk(  r|dz  }n |dz  dk(  r|dz  }|dz  }|dz  dk(  r|dz  }d}|dz  dk(  r|dz  }|dz  }|dz  dk(  r|dkD  rt        j                  d      ||dz  z  }d	}|dk(  s|dk(  rt        |dz  f      }nZ|dvrt        |dz  f      |z   }|dz  }|dvr|dk(  r|r|d   dz  rt        d      |z   }|dk(  r|r|d   dz  st        d      |z   }t        |      }|dkD  rt        j                  d      |dk(  rn-|dk(  r|dz  }n"|dk(  r|dz  }n|dz  }t        |dz  f      |z   }d	}|rt        |dz  f      |z   }|dz  }|rt        |f      |z   |z   }|d
dfS t        j                  d|z        )N))@   FF))A   FFrM   
   z!encoding REAL into character forms   %dE%s%dr      +r!   FTry   r   r   rS   r%   r   r   r      r       zScale factor overflowr   r$   )r   r   rT   )r$   zReal exponent overflowzProhibited Real base %s)	rb   	isPlusInf
isMinusInfr<   r   r   r)   r>   r(   )r   r0   r1   r2   r3   r   r   r   for   r   sfeonpor   s                   r   r4   zRealEncoder.encodeValue  s   NN5)E??((1a#778!QQ4(>3$BBE4OO!VB $ 3 3E :B7AAvd
 !|#gl!GAFA #gl A#gl!GAFA #gl d
 #gl!GAFA #gl d
Bc'Q,aa c'Q, Av''(?@@"'MBBAvbAH;' w&D{+b0B!GA w& 6bRUT\tr)B7r2a54<w",BBA4x''(@AAAvaaaa aAH;'",BAH;'",a  rer)B.IeT)) ##$=$ABBr!   N)	rF   rG   rH   r'   r   staticmethodr   r   r4   r#   r!   r   r   r     s,    J& &6#BcCr!   r   c                       e Zd ZdZd Zy)SequenceEncoderFc           
      v   d}|j                  d| j                        }t        rt        d|xr dxs dz         ||j                  }|r-t	        j
                  d|j                  j                   d      |j                  }t        |j                               D ]Z  \  }	}
|r||	   }|j                  r!|
j                  st        rt        d|       ;|j                  r$|
|j                  k(  rt        rt        d	|       k|r|j                  |j                  
       |rj                   r|j                  }|j"                  t$        j&                  j"                  t$        j(                  j"                  fv r$| ||
|fi t+        ||j                        z  } ||
|fi |}|j-                  |
      r||z  })| |||fi |z  }t        s>t        d|       N| ||
|fi |z  }] nt        |j                  j.                        D ]c  \  }	}	 ||j0                     }
|j                  r#|j0                  |vrt        rt        d|       F|j                  r$|
|j                  k(  rt        rt        d	|       v|r|j                  |j                  
       |j                  }|j                   r|j"                  t$        j&                  j"                  t$        j(                  j"                  fv r$| ||
|fi t+        ||j                        z  } ||
|fi |}|j-                  |
      r||z  }2| |||fi |z  }t        sGt        d|       W| ||
|fi |z  }f |ddfS # t2        $ r& t	        j
                  d|j0                  d|      w xY w)Nr!   omitEmptyOptionalsz$%sencoding empty OPTIONAL componentsznot r6   ASN.1 object  is inconsistentz not encoding OPTIONAL component znot encoding DEFAULT component )r7   )wrapTypewrapped with wrap type zComponent name "z" not found in T)r9   r   r<   isInconsistentr   r)   	__class__rF   componentTyper:   values
isOptionalisValueisDefaulted
asn1ObjectupdateopenTypetypeIdr
   SetOf
SequenceOfdictisSameTypeWith
namedTypesnameKeyError)r   r0   r1   r2   r3   r   r   inconsistencyr   rB   	component	namedTyper   rp   componentSpecs                  r   r4   zSequenceEncoder.encodeValue/  s   	$[[ $"9"9; 6&167R9 : !00M''#EOO$<$<#==MNP P ,,J"+ELLN"; *KY *3I ++I4E4E	 ST  ,,i>R>R1Ry RS ))2F2FG )"4"4(33H JJ--t/E/E+G G "Y )8&R"&w9O9O"P&R R	
 !*)X I I#229=%.I &5()Ng)NNI" #8$M N 9h!J'!JJIU*K\ #,H,B,B,M,M"N /PY0 %inn 5I ''INN%,GIOP((Y):N:N-N9NO%NNi.B.BNC ) 4 4 %%$++ JJ--t/E/E0G G "Y )=&W"&w9T9T"U&W W	
 !*)] Ng N(77	B%.I &5-)S7)SSI" #=$R S 9m!Ow!OOI_/Pb $$$Y   0++!-/ 0 00s   %N		/N8N)rF   rG   rH   r   r4   r#   r!   r   r   r   *  s    s%r!   r   c                       e Zd Zd Zd Zy)SequenceOfEncoderc                 ~   |;|j                   }|r9t        j                  d|j                  j                   d      |j
                  }g }|j                  dd       }t        |      D ]Q  \  }}	 ||	|fi |}
|/|j                  |	      s ||
|fi |}
t        rt        d|       |j                  |
       S |S )Nr   r   r   r   )r   r   r)   r   rF   r   popr:   r   r<   append)r   r0   r1   r2   r3   r   chunksr   rB   r   rp   s              r   _encodeComponentsz#SequenceOfEncoder._encodeComponents  s    !00M''#EOO$<$<#==MNP P  --H;;z40'. 	!NCi=W=E$ //	:!%=W=xABMM% 	! r!   c                 T     | j                   |||fi |}dj                  |      ddfS )Nr!   T)r   join)r   r0   r1   r2   r3   r   s         r   r4   zSequenceOfEncoder.encodeValue  s;    '''8Y3*13 xxt++r!   N)rF   rG   rH   r   r4   r#   r!   r   r   r     s    <,r!   r   c                       e Zd Zd Zy)ChoiceEncoderc                 R   ||j                         }n|j                  j                  D cg c]  }|j                  |v r|j                   }}t	        |      dk7  r+t        j                  t	        |      xr dxs dd|      |d   }||   }||   } |||fi |ddfS c c}w )NrS   z	Multiple zNone z components for Choice at r   T)getComponentr   r   r   r(   r   r)   )	r   r0   r1   r2   r3   r   r   namesr   s	            r   r4   zChoiceEncoder.encodeValue  s    **,I5=5K5K5V5V 1	!%/ ^^ 1E 15zQ''CPUJLf[fLqjqLqsx(yzz8DdI~HH88$DD1s   !B$NrO   r#   r!   r   r   r     s    Er!   r   c                       e Zd Zd Zy)
AnyEncoderc                     ||j                         }n/t        |t              s|j                  |      j                         }||j	                  dd       dfS )Nr+   T)rc   rn   r>   rb   r9   r/   s        r   r4   zAnyEncoder.encodeValue  sP    NN$EE5)NN5)224E'++i66<<r!   NrO   r#   r!   r   r   r     s    =r!   r   c                   0    e Zd ZdZdZeZeZeefdZddZ	y)SingleItemEncoderNc                 |    |t         ur|n| j                  | _        |t         ur|| _        y | j                  | _        y N)r   TAG_MAP_tagMapTYPE_MAP_typeMap)r   tagMaptypeMapignoreds       r   __init__zSingleItemEncoder.__init__4  s.    !'x!7vT\\#*(#:r!   c           
         	 ||j                   }n|j                   }t        rft	        d|j                  dd       xr dxs dd|j                  d	d
      d|d u xr |j                         xs |j                         d|       | j                  |j                  | j                         | j                  |j                  | j                         	 | j                  |   }t        r%t	        d|j                  j                  d|        |j&                  ||| fi |}t        r1t	        d|dt)        |      dt+        j,                  |      d       |S # t        $ r t        j                  d|d      w xY w# t        $ r ||j                  }n|j                  }t        j                   |j"                  |j"                        }	 | j$                  |   }n)# t        $ r t        j                  d|d|d      w xY wt        r%t	        d|j                  j                  d|       Y *w xY w)NzValue z4 is not ASN.1 type instance and "asn1Spec" not givenzencoder called in r+   Tinr6   zdef mode, chunk size r_   r   z
 for type z	, value:
)r+   )r_   zusing value codec z chosen by type ID zNo encoder for z ()z chosen by tagSet zcodec z built z octets of substrate: z
encoder completed)r   AttributeErrorr   r)   r<   r9   prettyPrintTypefixedDefLengthModer   fixedChunkSizer   r   rF   r   r8   r	   re   rd   r   r   r(   r   r=   )	r   r0   r1   r3   r   concreteEncoderr8   
baseTagSetr   s	            r   __call__zSingleItemEncoder.__call__8  s)   	K! $+KK	4$@ @ IT OR O 'NA > (D 0 LU5J5J5L !; ( 8 8 :!;<A	C D "".NN4#:#:N;*NN(;(;N<	I"mmF3O+55>>H I, +O**5(DLGL	.I$}}Y79 : e  	K##BG%J K K	K0  	I! FNNFNNCJT"&,,z": T''E6(RSST +55>>H I!	Is6   E" :F "#FAH?G'&H?'&H.H?>H?r   )
rF   rG   rH   r   r   r   r   r   r   r   r#   r!   r   r   r   -  s'    NGH& N9r!   r   c                   $    e Zd ZeZeefdZddZy)r   c                 8     | j                   d||d|| _        y )Nr   r   r#   )SINGLE_ITEM_ENCODER_singleItemEncoder)r   r   r   r3   s       r   r   zEncoder.__init__w  s)    ":$":": #
7#
.5#
r!   Nc                 ,     | j                   |fd|i|S )Nr1   )r   )r   pyObjectr1   r3   s       r   r   zEncoder.__call__|  s*    &t&&4'4+24 	4r!   r   )rF   rG   rH   r   r   r   r   r   r#   r!   r   r   r   t  s    +& 

4r!   attrc                     dddj                  |       x}r-t        j                  |  d| dt               t	               |   S t        |       )Nr   r   r   z is deprecated. Please use z	 instead.)r9   warningswarnDeprecationWarningglobalsr   )r   newAttrs     r   __getattr__r    sR    &:>BB4HHwH9')LN`ay!!

r!   )Ksysr   pyasn1r   r   pyasn1.codec.berr   pyasn1.compatr   pyasn1.compat.integerr   pyasn1.typer   r	   r
   r   __all__registerLoggeerF   DEBUG_ENCODERr<   objectr   rJ   rQ   rW   r]   rl   rr   ru   r   r   r   r   r   r   endOfOctetsr8   BooleanInteger	BitStringOctetStringNullObjectIdentifierRelativeOID
EnumeratedRealr   r   Choice
UTF8StringNumericStringPrintableStringTeletexStringVideotexString	IA5StringGraphicStringVisibleStringGeneralStringUniversalString	BMPStringObjectDescriptorGeneralizedTimeUTCTimer   r   SetSequenceAnyr   r   r   r   strr  r#   r!   r   <module>r+     s         " *    h
e85+>+>?~& ~B ,  
4( 4>( >(&%* &%R:%, :%z %  8$1 8$v$, $BdC% dCNx%) x%v#,+ #,LE' E$=# =OO.0LL) 	LL) 	NN+-	
 	/1 	IIkm 	  "9"; 	/1 	OON, 	IIkm 	OO-/ 	JJ(* 	KK  	OO.0!" 	13#$ 	!3!5%& 	13'( 	 2 4NN-/131313!3!5NN-/
""$6$8
!!#5#7
NN-/=D!LL)!LL)! 	NN+-! 	/1	!
 	IIkm! 	  "9";! 	/1! 	OON,! 	IIkm! 	HHOO_&! 	JJ(*! 	MM/+! 	OO-/! 	KK!  	HHOOZ\!!$ 	OO.0%!& 	13'!( 	!3!513 2 4NN-/131313!3!5NN-/
""$6$8
!!#5#7
NN-/A!HD DN
4f 
4@ 
c r!   