
    dPf                        d dl mZ ddl ddlmZ ddlmZ ddlmZm	Z	m
Z
 ddlmZmZmZ d	 Zd
 Zd Zd Zd ZddZddZd Zdad Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$ ed  fi d!ed"ed#ed$ed%ed&ed'ed(ed)ed*ed+e"d,ed-ed.ed/ed0e!d1ed2e d3e$d4e$d5e$d6e$d7e#d8e$d9eZ% e&di d)d:d4d;d5d;d-d<d'd<d(d<d0d=d6d;d3d;d,d<d+d>d.d<d1d=d/d<d&d?d!d?d"d?d#d?d$d?d%d?d@dd*dd8dAd7d>d9d?Z'e(dBe)dCe*dDe+dEiZ,i e-dFe.dGe/dHe0dIe1dJe2dKe3dLe4dMe5dNe6dOe7dPe8dQe9dRe:dSe;dTe<dUe=dVi e>dWe?dXe@dYeAdZeBd[eCd\eDd]eEd^eFd_eGd`eHdaeIdbeJdceKddeLdeeMdfeNdgeOdhePdieQdjeRdkeSdleTdmeUdneVdoeWdpi	ZXi eYdqeZdre[dse\dte]due^dve_dwe`dxeadyebdzecd{edd|eed}efd~egdehdeidejdekdeldemdendeodepdiZqerdesdetdiZuevdewdexdiZyezde{de|diZ}e~dededediZededediZedediZ e&dddddddd      ZddZddZi Zd Zd Zd Z ed fi d ee,dd      d eeXdd      d eeqd      d eeud      d eeyd      d ee}d      d eed      d eed      d eed      dededededededededededededededededededeZg dТZg dѢZg dҢZ G dӄ de      Zy)    )defaultdict   )*)DWARFExprParser)DIE   )preserve_stream_posdwarf_assert	bytes2str)instruction_nameCIEFDEc                     | a y N)_MACHINE_ARCH)machine_archs    =/usr/lib/python3/dist-packages/elftools/dwarf/descriptions.pyset_global_machine_archr      s     M    c                     t         | j                     } || ||      }t        | j                     } || ||      }t	        |      dz   |z   S )aE   Given an attribute attr, return the textual representation of its
        value, suitable for tools like readelf.

        To cover all cases, this function needs some extra arguments:

        die: the DIE this attribute was extracted from
        section_offset: offset in the stream of the section the DIE belongs to
    	)_ATTR_DESCRIPTION_MAPform_EXTRA_INFO_DESCRIPTION_MAPnamestr)attrdiesection_offset
descr_funcval_descriptionextra_info_func
extra_infos          r   describe_attr_valuer$      sS     'tyy1J sN;O 2$))<O sN;J$&33r   c                      fd}d }t         t              r }n j                  } d   }d} j                  D ]F  }t	        |j
                        }|dv r2|d| ||j                  d         |j                  d   |d	   z  fz  z  }O|d
v r |d|d ||j                  d         dz  }s|dk(  r5|d|d ||j                  d         d ||j                  d         z  }|dk(  r|j                  d   }|d||fz  z  }|dv r2 ||       |j                  d   |d   z  }|d|||z   fz  z  }||z  }|dv r
|d|z  z  }|dk(  r1|d|d ||j                  d         d|j                  d   dz  }F|dk(  r7|d|d ||j                  d         d|j                  d   |d	   z  dz  }|dv r|d|d|j                  d   dz  }|dk(  r?t         j                        }	|d|d|	j                  |j                  d         dz  }|dk(  rUt         j                        }	|d|d ||j                  d         d|	j                  |j                  d         dz  }?|d|z  z  }I |S ) za Given a CFI entry (CIE or FDE), return the textual description of its
        instructions.
    c                 @    t        t        t              d| z         y )Nz%Unexpected instruction "%s" for a CIE)r
   
isinstancer   )instrentrys    r   _assert_FDE_instructionz:describe_CFI_instructions.<locals>._assert_FDE_instruction-   s    uc"3e;	=r   c                 D    t        | t        d      }|r	d| d|dS d| z  S )NFr ()r%s)describe_reg_namer   )regnumregnames     r   _full_reg_namez1describe_CFI_instructions.<locals>._full_reg_name2   s(    #FM5A!'116>!r   initial_location )DW_CFA_offsetDW_CFA_offset_extendedDW_CFA_offset_extended_sfDW_CFA_val_offsetDW_CFA_val_offset_sfz  %s: %s at cfa%+d
r   r   data_alignment_factor)DW_CFA_restoreDW_CFA_restore_extendedDW_CFA_undefinedDW_CFA_same_valueDW_CFA_def_cfa_registerz  : 
DW_CFA_registerz in DW_CFA_set_locz  %s: %08x
)DW_CFA_advance_loc1DW_CFA_advance_loc2DW_CFA_advance_loc4DW_CFA_advance_loccode_alignment_factorz  %s: %s to %08x
)DW_CFA_remember_stateDW_CFA_restore_state
DW_CFA_nopz  %s
DW_CFA_def_cfaz ofs DW_CFA_def_cfa_sf)DW_CFA_def_cfa_offsetDW_CFA_GNU_args_sizeDW_CFA_def_cfa_expressionr-   z)
DW_CFA_expressionz  %s: <??>
)
r'   r   cieinstructionsr   opcodeargs
ExprDumperstructs	dump_expr)
r)   r*   r3   rS   pcsr(   r   factored_offsetexpr_dumpers
   `         r   describe_CFI_instructionsr^   )   s   =
" %ii%&
A## 1'- A A 'nUZZ]3

1$; <<+> > >A  3 3 ~ejjm'DEEA&&nUZZ]3uzz!}-/ /A %%AB4*,,A E E#E*#jjmc2I.JJO%o';)= = =A/!B & &D A%%nUZZ]3UZZ]D DA((nUZZ]3

1$; <<> >A FFuzz!}55A00$U]]3K$(=(=ejjm(LMMA(($U]]3KnUZZ]3%0%:%:5::a=%IK KA $&&Ac1'f Hr   c                     t         | j                     }| j                  dv r|d| j                  z  z  }|S | j                  dk(  r|t        | j                        z  }|S )N)OFFSET
VAL_OFFSETz%+dREGISTER)_DESCR_CFI_REGISTER_RULE_TYPEtypeargr0   )ruler[   s     r   describe_CFI_register_rulerg   v   s^    %dii0Ayy,,	UTXX H 
j	 	txx((Hr   c                 d    | j                   rydt        | j                        | j                  fz  S )Nexpz%s%+d)exprr0   regoffset)rf   s    r   describe_CFI_CFA_rulerm      s*    yy+DHH5t{{CCCr   Nc                     t        |      }|t        vrt        |      t        |<   t        |   }d|j                  | |      z   dz   S )z Textual description of a DWARF expression encoded in 'expr'.
        structs should come from the entity encompassing the expression - it's
        needed to be able to parse it correctly.
    (r.   )id_DWARF_EXPR_DUMPER_CACHErW   rY   )rj   rX   	cu_offset	cache_keydwarf_expr_dumpers        r   describe_DWARF_exprru      sQ     7I00w 	!+0;",,T9==CCr   Tc                 v    |t         }|dk(  r	t        |    S |dk(  r	t        |    S |dk(  r	t        |    S |rd| z  S y)z} Provide a textual description for a register name, given its serial
        number. The number is expected to be valid.
    Nx86x64AArch64r/   )r   _REG_NAMES_x86_REG_NAMES_x64_REG_NAMES_AArch64)r1   r   defaults      r   r0   r0      sX     $uf%%		f%%		"!&))	v~r   c                     t         |    S )a  For a given form name, determine its value class.

    For example, given 'DW_FORM_data1' returns 'constant'.

    For some forms, like DW_FORM_indirect and DW_FORM_sec_offset, the class is
    not hard-coded and extra information is required. For these, None is
    returned.
    )_FORM_CLASS)r   s    r   describe_form_classr      s     tr   c                     | dk7  rd| z  S dS )Nr   z0x%x0 )ns    r   _format_hexr      s    a6A:(S(r   c                 `    dt        | j                  |j                  j                  z         z  S Nz<%s>)r   valuecurr   r   r   r   s      r   _describe_attr_refr      s%    K

SVV-=-= =>>>r   c                 2    dt        | j                        z  S )Nzsignature: %sr   r   r   s      r   _describe_attr_ref_sig8r      s    [444r   c                     | j                   S r   r   r   s      r    _describe_attr_value_passthroughr      s    ::r   c                 2    dt        | j                        z  S )Nz%sr   r   s      r   _describe_attr_hexr      s    +djj)))r   c                 2    dt        | j                        z  S r   r   r   s      r   _describe_attr_hex_addrr      s    K

+++r   c                 v    | j                   dz  }| j                   dz	  dz  }t        |      dt        |      S )Nl         )r   r   )r   r   r   low_word	high_words        r   _describe_attr_split_64bitr      s8    zzJ&Hr!Z/I!(+[-CDDr   c                 ^    dt        | j                        dt        | j                        S )Nz(indirect string, offset: ): r   	raw_valuer   r   r   s      r   _describe_attr_strpr      #    DNN#Ytzz%:< <r   c                 ^    dt        | j                        dt        | j                        S )Nz(indirect line string, offset: r   r   r   s      r   _describe_attr_line_strpr      r   r   c                 ,    t        | j                        S r   )r   r   r   s      r   _describe_attr_stringr      s    TZZ  r   c                 "    | j                   rdS dS )zZ To be consistent with readelf, generate 1 for True flags, 0 for False
        flags.
    1r   r   r   s      r   _describe_attr_deboolr      s     **3%#%r   c                      y)zc Some forms may simply mean that an attribute is present,
        without providing any value.
    r   r   r   s      r   _describe_attr_presentr      s     r   c                     dt        | j                        z  }|dj                  d | j                  D              dz   z  }|S )Nz%s byte block: r   c              3   &   K   | ]	  }d |z    ywz%xNr   ).0items     r   	<genexpr>z'_describe_attr_block.<locals>.<genexpr>   s     5$$+5   )lenr   joinr   r   r   r[   s       r   _describe_attr_blockr      s;    C

O+A5$**5	5	;;AHr   c                      t         S r   )r   r   r   r   <lambda>r      s    , r   DW_FORM_ref1DW_FORM_ref2DW_FORM_ref4DW_FORM_ref8DW_FORM_ref_udataDW_FORM_ref_addrDW_FORM_data4DW_FORM_data8DW_FORM_addrDW_FORM_sec_offsetDW_FORM_flagDW_FORM_data1DW_FORM_data2DW_FORM_sdataDW_FORM_udataDW_FORM_stringDW_FORM_strpDW_FORM_line_strpDW_FORM_block1DW_FORM_block2DW_FORM_block4DW_FORM_blockDW_FORM_flag_presentDW_FORM_exprlocDW_FORM_ref_sig8addressblockconstantstringflag	referenceDW_FORM_indirectexprlocz(not inlined)z	(inlined)z (declared as inline but ignored)z (declared as inline and inlined)z(ANSI C)z(non-ANSI C)z(Ada)z(C++)z
(Cobol 74)z
(Cobol 85)z(FORTRAN 77)z(Fortran 90)z(ANSI Pascal)z
(Modula 2)z(Java)z
(ANSI C99)z(ADA 95)z(Fortran 95)z(PLI)z(Objective C)z(Objective C++)z(Unified Parallel C)z(D)z(Python)z(OpenCL)z(Go)z
(Modula 3)z	(Haskell)z(C++03)z(C++11)z(OCaml)z(Rust)z(C11)z(Swift)z(Julia)z(Dylan)z(C++14)z(Fortran 03)z(Fortran 08)z(RenderScript)z(Bliss)z(MIPS assembler)z
(HP Bliss)z(HP Basic 91)z(HP Pascal 91)z(HP IMacro)z(HP assembler)z(void)z(machine address)z	(boolean)z(complex float)z(float)z(signed)z(signed char)z
(unsigned)z(unsigned char)z(imaginary float)z(decimal float)z(packed_decimal)z(numeric_string)z(edited)z(signed_fixed)z(unsigned_fixed)z(unicode string)z(HP_float80)z(HP_complex_float80)z(HP_float128)z(HP_complex_float128)z(HP_floathpintel)z(HP_imaginary_float80)z(HP_imaginary_float128)z(public)z(protected)z	(private)z(local)z
(exported)z(qualified)z(none)z	(virtual)z(pure virtual)z(case_sensitive)z	(up_case)z(down_case)z(case_insensitive)z(normal)z	(program)z(nocall)z(row major)z(column major)ur[   cvr5   ri   vexpa)	UNDEFINED
SAME_VALUEr`   ra   rb   
EXPRESSIONVAL_EXPRESSIONARCHITECTURALc                       fd}|S )zm Create a mapping function from attribute parameters to an extra
        value that should be displayed.
    c                 d    r| j                   z  }n}j                  | j                   |      S r   )r   get)r   r   r   dr}   default_interpolate_valuemappings       r   mapperz"_make_extra_mapper.<locals>.mapper  s.    $$**$AA{{4::q))r   r   )r   r}   r   r   s   ``` r   _make_extra_mapperr     s    * Mr   c                       fd}|S )zC Create an extra function that just returns a constant string.
    c                     S r   r   r   s      r   extraz!_make_extra_string.<locals>.extra  s    r   r   )r[   r   s   ` r   _make_extra_stringr     s    Lr   c                     | j                   dv ryt        | j                  |j                  j                  |j                  j
                        S )N)r   r   r   z(location list)r   ru   r   r   rX   rr   r   s      r   _location_list_extrar     s9     yyLL "4::svv~~svv?O?OPPr   c                     | j                   dv ryt        | j                  |j                  j                  |j                  j
                        S )N)r   r   r   r   r   r5   r   r   s      r   _data_member_location_extrar     s?     yy & & "4::svv~~svv?O?OPPr   c                    | j                   dk(  r|| j                  z   }n#| j                  |j                  j                  z   }|j                  j                         D ]~  }|d   |j                  z   |cxkD  r|j                  k\  s)n ,t        |j                        5  t        ||j                  |      }d d d        dj                  d|j                  dc S  y# 1 sw Y   *xY w)Nr   unit_lengthz[Abbrev Number: r-   z)]z	[unknown])r   r   r   rr   	dwarfinfoiter_CUsr	   streamr   abbrev_codetag)r   r   r   ref_die_offsetr   ref_dies         r   _import_extrar     s     yy&&'$**4 cff&6&66
 mm$$& 2mr||+nLL %SZZ0 >b#**n=> ##W[[2 22 > >s   CC(	c                      t        d      S )Nr5   )r   r   r   r   r   r     s    r" r   DW_AT_inlinez#(Unknown inline attribute value: %x)r   DW_AT_languagez(Unknown: %x)DW_AT_encodingz(unknown type)DW_AT_accessibilityz(unknown accessibility)DW_AT_visibilityz(unknown visibility)DW_AT_virtualityz(unknown virtuality)DW_AT_identifier_casez(unknown case)DW_AT_calling_conventionz(unknown convention)DW_AT_orderingz(undefined)DW_AT_frame_baseDW_AT_locationDW_AT_string_lengthDW_AT_return_addrDW_AT_data_member_locationDW_AT_vtable_elem_locationDW_AT_segmentDW_AT_static_linkDW_AT_use_locationDW_AT_allocatedDW_AT_associatedDW_AT_data_locationDW_AT_strideDW_AT_call_valueDW_AT_importDW_AT_GNU_call_site_valueDW_AT_GNU_call_site_data_valueDW_AT_GNU_call_site_target$DW_AT_GNU_call_site_target_clobbered)2eaxecxedxebxespebpesiedieipeflags<none>st0st1st2st3st4st5st6st7r%  r%  xmm0xmm1xmm2xmm3xmm4xmm5xmm6xmm7mm0mm1mm2mm3mm4mm5mm6mm7fcwfswmxcsrescsssdsfsgsr%  r%  trldtr)Craxrdxrcxrbxrsirdirbprspr8r9r10r11r12r13r14r15ripr.  r/  r0  r1  r2  r3  r4  r5  xmm8xmm9xmm10xmm11xmm12xmm13xmm14xmm15r&  r'  r(  r)  r*  r+  r,  r-  r6  r7  r8  r9  r:  r;  r<  r=  rflagsrA  rB  rC  rD  rE  rF  r%  r%  zfs.basezgs.baser%  r%  rG  rH  r@  r>  r?  )x0x1x2x3x4x5x6x7x8x9x10x11x12x13x14x15x16x17x18x19x20x21x22x23x24x25x26x27x28x29x30spr%  ELR_modeRA_SIGN_STATEr%  r%  r%  r%  r%  r%  r%  r%  r%  r%  r%  VGFFRp0p1p2p3p4p5p6p7p8p9p10p11p12p13p14p15v0v1v2v3v4v5v6v7v8v9v10v11v12v13v14v15v16v17v18v19v20v21v22v23v24v25v26v27v28v29v30v31z0z1z2z3z4z5z6z7z8z9z10z11z12z13z14z15z16z17z18z19z20z21z22z23z24z25z26z27z28z29z30z31c                   ,    e Zd ZdZd ZddZd ZddZy)rW   z A dumper for DWARF expressions that dumps a textual
        representation of the complete expression.

        Usage: after creation, call dump_expr repeatedly - it's stateless.
    c                 f    || _         t        | j                         | _        | j                          y r   )rX   r   expr_parser_init_lookups)selfrX   s     r   __init__zExprDumper.__init__K  s&    *4<<8r   Nc           	          | j                   j                  |      }g }|D ]C  }|j                  | j                  |j                  |j
                  |j                  |             E dj                  |      S )a   Parse and dump a DWARF expression. expr should be a list of
            (integer) byte values. cu_offset is the cu_offset
            value from the CU object where the expression resides.
            Only affects a handful of GNU opcodes, if None is provided,
            that's not a crash condition, only the expression dump will
            not be consistent of that of readelf.

            Returns a string representing the expression.
        z; )r  
parse_exprappend_dump_to_stringopop_namerV   r   )r  rj   rr   parsedr[   deos         r   rY   zExprDumper.dump_exprP  sg     !!,,T2 	UCHHT))#&&#++sxxST	Uyy|r   c                     t        g d      | _        t        dd      D ]   }| j                  j                  d|z         " t        ddg      | _        t        g d      | _        y )N)DW_OP_const1uDW_OP_const1sDW_OP_const2uDW_OP_const2sDW_OP_const4uDW_OP_const4sDW_OP_const8uDW_OP_const8sDW_OP_constuDW_OP_consts
DW_OP_pickDW_OP_plus_uconst	DW_OP_bra
DW_OP_skipDW_OP_fbregDW_OP_pieceDW_OP_deref_sizeDW_OP_xderef_size
DW_OP_regxr   r   zDW_OP_breg%sDW_OP_bregxDW_OP_bit_piece)
DW_OP_addrDW_OP_call2DW_OP_call4DW_OP_call_ref)set_ops_with_decimal_argrangeadd_ops_with_two_decimal_args_ops_with_hex_arg)r  r   s     r   r  zExprDumper._init_lookups`  sl    %( *D &E" q" 	?A&&**>A+=>	? +.}>O.P*Q'!$J"Lr   c                    |d}t        |      dk(  r7|j                  d      r$t        |dd        }|dt        |t              dS |S || j
                  v rt|j                  d      r)t        |dd        }|dt        |t              d|d   S |j                  d	      r|d
|d   dt        |d   t              dS |d
|d   S || j                  v r
d||d   fz  S || j                  v r|d
|d   d|d   S |dv rX|ddj                  |d   D cg c]4  }| j                  |j                  |j                  |j                  |      6 c}      dS |dk(  r9|dt        |d         ddj                  |d   D cg c]  }d|z  	 c}      S |dk(  rd||d   |z   fz  S |dv rd||d   |d   fz  S |dv rd||d   |z   fz  S |dv rd||d   |d   |z   fz  S |dv r4d||d   |z   t        |d         dj                  d |d   D              fz  S |d v r#d!||d   t        |d   t              |d   |z   fz  S d"|z  S c c}w c c}w )#Nr   	DW_OP_reg	   r-   r.   
DW_OP_breg
   r   regxrA   z%s: %xr   r   )DW_OP_GNU_entry_valueDW_OP_entry_valuez: (,DW_OP_implicit_valuez byte block: r5   z%x DW_OP_GNU_parameter_refz
%s: <0x%x>)DW_OP_GNU_implicit_pointerDW_OP_implicit_pointerz%s: <0x%x> %d)DW_OP_GNU_convertDW_OP_convertz	%s <0x%x>)DW_OP_GNU_deref_typeDW_OP_deref_typez%s: %d <0x%x>)DW_OP_GNU_const_typeDW_OP_const_typez%s: <0x%x>  %d byte block: %s c              3   &   K   | ]	  }d |z    ywr   r   )r   bs     r   r   z-ExprDumper._dump_to_string.<locals>.<genexpr>  s        pK}~ptwxpx  pKr   )DW_OP_GNU_regval_typeDW_OP_regval_typez%s: %d (%s) <0x%x>z<unknown %s>)r   
startswithintr0   r   r   endswithr  r  r   r  r  r  rV   )r  rU   opcode_namerV   rr   r1   r  r  s           r   r  zExprDumper._dump_to_stringp  s3   
 It9>%%k2[_-%fm<> > #"D666%%l3[-.%fm<G  %%f-  G%d1g}=? ?
 $/Q88D222{DG444D;;;"-tAwQ@@JJ!,chh  CG  HI  CJ  8K{~8L8LSVVUXU`U`bebjbjlu8v  8K  /L  M  M22-8#d1g,dhijdkPl_`QVYZQZPlHmnn55;Q)0C"DDDTT"k47DG%DDDBB+tAw/B!CCCHH"k47DGi<O%PPPHH3{DGiDWY\]abc]dYegjgogo  pK  CG  HI  CJ  pK  hK  7L  L  LJJ';QARSWXYSZ\iAjlpqrlsvl  +A  A  A!K//! 8KPls   9I
Ir   )__name__
__module____qualname____doc__r  rY   r  r  r   r   r   rW   rW   E  s    

 L 40r   rW   r   )NTr   )F)r5   )collectionsr   	constants
dwarf_exprr   r   r   common.utilsr	   r
   r   	callframer   r   r   r   r$   r^   rg   rm   ru   r0   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   dictr   DW_INL_not_inlinedDW_INL_inlinedDW_INL_declared_not_inlinedDW_INL_declared_inlined_DESCR_DW_INLDW_LANG_C89	DW_LANG_CDW_LANG_Ada83DW_LANG_C_plus_plusDW_LANG_Cobol74DW_LANG_Cobol85DW_LANG_Fortran77DW_LANG_Fortran90DW_LANG_Pascal83DW_LANG_Modula2DW_LANG_JavaDW_LANG_C99DW_LANG_Ada95DW_LANG_Fortran95DW_LANG_PLIDW_LANG_ObjCDW_LANG_ObjC_plus_plusDW_LANG_UPC	DW_LANG_DDW_LANG_PythonDW_LANG_OpenCL
DW_LANG_GoDW_LANG_Modula3DW_LANG_HaskellDW_LANG_C_plus_plus_03DW_LANG_C_plus_plus_11DW_LANG_OCamlDW_LANG_RustDW_LANG_C11DW_LANG_SwiftDW_LANG_JuliaDW_LANG_DylanDW_LANG_C_plus_plus_14DW_LANG_Fortran03DW_LANG_Fortran08DW_LANG_RenderScriptDW_LANG_BLISSDW_LANG_Mips_AssemblerDW_LANG_HP_BlissDW_LANG_HP_Basic91DW_LANG_HP_Pascal91DW_LANG_HP_IMacroDW_LANG_HP_Assembler_DESCR_DW_LANGDW_ATE_voidDW_ATE_addressDW_ATE_booleanDW_ATE_complex_floatDW_ATE_floatDW_ATE_signedDW_ATE_signed_charDW_ATE_unsignedDW_ATE_unsigned_charDW_ATE_imaginary_floatDW_ATE_decimal_floatDW_ATE_packed_decimalDW_ATE_numeric_stringDW_ATE_editedDW_ATE_signed_fixedDW_ATE_unsigned_fixed
DW_ATE_UTFDW_ATE_HP_float80DW_ATE_HP_complex_float80DW_ATE_HP_float128DW_ATE_HP_complex_float128DW_ATE_HP_floathpintelDW_ATE_HP_imaginary_float80DW_ATE_HP_imaginary_float128_DESCR_DW_ATEDW_ACCESS_publicDW_ACCESS_protectedDW_ACCESS_private_DESCR_DW_ACCESSDW_VIS_localDW_VIS_exportedDW_VIS_qualified_DESCR_DW_VISDW_VIRTUALITY_noneDW_VIRTUALITY_virtualDW_VIRTUALITY_pure_virtual_DESCR_DW_VIRTUALITYDW_ID_case_sensitiveDW_ID_up_caseDW_ID_down_caseDW_ID_case_insensitive_DESCR_DW_ID_CASEDW_CC_normalDW_CC_programDW_CC_nocall_DESCR_DW_CCDW_ORD_row_majorDW_ORD_col_major_DESCR_DW_ORDrc   r   r   rq   r   r   r   r   rz   r{   r|   objectrW   r   r   r   <module>r     sE   $  '  G G 1 1!
4$JZDD $	  )?5*,E
<<!& $, $ $	
 $ , ) - % % $ * ' 3 3  3!" 3#$ )%& %'( /)* (+, (-. (/0 '12 034 )56 -7 <    	
           !  !" #$ %& '( ")* +, -. /0  12 !3: K!C?	,,~, 7, 	,
 \, \, ~, ~, o, \, (, , :, ~, ,  /!," -#,$ '%,& u',( J),* J+,, -,. \/,0 [1,2 I3,4 I5,6 97,8 (9,: ;,< 9=,> 9?,@ 9A,B IC,D ~E,F ~*9.l)}*W,\' K +	
 ) :  \ + / + - - : )  -!" "#$ ~5 7/!9 ";18 j{  )\m ; 0  ,;]0	  *;* m&
 !%	! 
  Q	Q6 *"( $<"&(( &4I( &m5EF( +35( (-/( (46( -+-(" 0,.#(& &}&'(* *+(, (-(. -/(0 +1(2  ;3(4  45(6 '7(8 +9(: ,;(< )=(> *?(@ -A(B &C(D *E(F G(H 3I(J $8K(L  4M(N *>O( V
 (_0 _0r   