HEX
Server: Apache
System: Linux ns517114.ip-158-69-26.net 6.12.0-124.55.3.el10_1.x86_64 #1 SMP PREEMPT_DYNAMIC Thu May 7 16:54:02 EDT 2026 x86_64
User: urgentelectrical (1063)
PHP: 8.2.33
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //lib64/python3.12/site-packages/setools/diff/__pycache__/terules.cpython-312.opt-1.pyc
�

���i�c���ddlZddlmZddlmZmZddlmZddlm	Z	ddl
mZddlZddl
mZmZd	d
lmZd	dlmZd	dlmZmZmZd	d
lmZmZd	dlmZd	dlmZe	d�Ze	d�Zedd��Gd�de��Z edd��Gd�de��Z!edd��Gd�de��Z"Gd�de�Z#eGd�d��Z$eGd�d��Z%eGd �d!��Z&ejNe(zZ)e*e(zZ+e,e)e,e+e,e(e,e(e,e(e%fffffZ-d"e.ej^d#e-d$e&d%e#d&df
d'�Z0d#e-d&dfd(�Z1d#e-d$e&d&e2e.ej^e.ej^e.e ffd)�Z3d*ejhd&ed+gdffd,�Z5d"eejld&ed-fd.�Z7d*ejhd&ed+gdffd/�Z8d*ejhd&eejrgdffd0�Z:Gd1�d+e�Z;Gd2�d-eejl�Z<Gd3�d4e�Z=y)5�N)�defaultdict)�Callable�Iterable)�	dataclass)�intern)�Enum�)�	exception�	policyrep�)�conditional_wrapper_factory)�DiffResultDescriptor)�
Difference�DifferenceResult�Wrapper)�type_wrapper_factory�type_or_attr_wrapper_factory)�RuleList)�class_wrapper_factoryz<<unconditional>>�TrueT)�frozen�orderc�`�eZdZUdZej
ed<eeed<eeed<eeed<y)�ModifiedAVRule�5Difference details for a modified access vector rule.�rule�added_perms�
removed_perms�
matched_permsN)	�__name__�
__module__�__qualname__�__doc__r�AVRule�__annotations__�set�str���;/usr/lib64/python3.12/site-packages/setools/diff/terules.pyrrs2��@�
�
�
���S����s�8���s�8�r)rc��eZdZUdZej
ed<ejed<ejed<ejed<y)�ModifiedAVRuleXpermrrrrrN)r r!r"r#r�AVRuleXpermr%�XpermSetr(r)r*r,r,&s8��@�
�
�
���#�#�#��%�%�%��%�%�%r)r,c�l�eZdZUdZej
ed<ejed<ejed<y)�ModifiedTERulez.Difference details for a modified type_* rule.r�
added_default�removed_defaultN)r r!r"r#rr$r%�Typer(r)r*r0r01s'��9�
�
�
���>�>�!��^�^�#r)r0c��eZdZdZdZy)�SiderrN)r r!r"�left�rightr(r)r*r5r5>s���D�
�Er)r5c�<�eZdZUeeed<ejed<y)�RuleDBSideDataRecord�perms�	orig_ruleN)r r!r"r&r'r%rr$r(r)r*r9r9Cs���s�8�O����r)r9c�.�eZdZUedzed<edzed<y)�RuleDBSidesRecordNr6r7)r r!r"r9r%r(r)r*r=r=Is��
��
%�%��$�&�&r)r=c�^�eZdZUeeejfed<eeejfed<y)�TypeDBRecordr6r7N)r r!r"�dictr'rr3r%r(r)r*r?r?Os*��
�s�I�N�N�"�
#�#���Y�^�^�#�$�$r)r?�	rule_list�rule_db�type_db�side�returnc��|tjk(r
|j}n|j}|D�]�}	tt	|j
��}tt	|j��}||vrt�||<t�|||<n|||vrt�|||<|jj}t|j�}	t!|	|�}
|||}|j"j%�D�](}|j}
|
|vr|||
<|
|vr
t�||
<|j&j%�D]�}|j}||vr|||<|||
vrt�||
|<d}d}|||
|vr#||
||}|j}|j}|tjk(r.|s|
}nV	|j|	z}|j(}t!||�}n-|s|
}n(	|j|	z}|j(}t!||�}t+||�||
||<����+��y#tj$rt}t}Y���wxYw)aP
    Using rule_list, build up rule_db which is a data structure which consists
    of nested dicts that store BOTH the left and the right policies. All of the
    keys are interned strings. The permissions are stored as a set. The basic
    structure is rule_db[cond_exp][block_bool][src][tgt][tclass] = sides
    where:
      cond_exp is a boolean expression
      block_bool is either true or false
      src is the source type
      tgt is the target type
      tclass is the target class
      sides is a named tuple with attributes "left" and "right" referring to the
        left or right policy. Each attribute in the sides named tuple refers to a
        named tuple with attributes "perms" and "orig_rule" which refer to a
        permission set and the original unexpanded rule.
        sides = ((left_perms, left_orig_rule),(right_perms, right_orig_rule))
    There are a few advantages to this structure. First, it takes up way less
    memory. Second, it allows redundant rules to be easily eliminated. And,
    third, it makes it easy to create the added, removed, and modified rules.
    N)r5r6r7rr'�conditional�conditional_blockr
�RuleNotConditional�TERULES_UNCONDITIONAL�TERULES_UNCONDITIONAL_BLOCKr@�tclass�namer&r:r9�source�expand�targetr;r=)rArBrCrD�types�unexpanded_rule�cond_exp�
block_boolrLr:�	side_data�block�src�src_str�tgt�tgt_str�	left_side�
right_side�sides�p�origs                     r*�_avrule_expand_generatorr`[sc��,�t�y�y�������
�
��$��	5��c�/�"=�"=�>�?�H���O�$E�$E� F�G�J�
�7�"� $��G�H��,0�F�G�H��j�)�
�w�x�0�
0�,0�F�G�H��j�)� �'�'�,�,���O�)�)�*��(���@�	���!�*�-��"�)�)�0�0�2�C��h�h�G��e�#�!$��g���e�#�!%���g��&�-�-�4�4�6���(�(���%�'�%(�E�'�N��%��.�0�.2�f�E�'�N�7�+� �	�!�
��U�7�^�G�4�4�!�'�N�7�3�F�;�E� %�
�
�I�!&���J��4�9�9�$�$�$-�	��&�O�O�e�3��(�2�2��$8��D�$A�	�%�%.�
��'�,�,�u�4��)�3�3��%9�!�T�%B�
�2C�I�z�2Z��g��w�'��/�I7�
3�'%���+�+�	5�,�H�4�J�	5�s�<H2�2I�Ic	�b�|tt}|j�D�]�\}}|tk(r�|j�D�]g}|j�D�]P\}}||vr�|j�D�]1\}}|||vr�|j�D�]\}	}
|	|||vr�||||	}|
j}|
j
}
|jr`|r^|j|jjz}|r9|j|z
}|rt||j�}nd}t||
�||	<|j
s��|
s��|
j|j
jz}|s��|
j|z
}|rt||
j�}
nd}
t||
�||	<����4��S��j���y�N)
rJrK�items�valuesr6r7r:r9r;r=)rB�uncond_blockrS�cond_blocksrVrW�src_datarY�tgt_datarLrU�uncond_side_datar[r\�cr^s                r*�_av_remove_redundant_rulesrk�s����0�1�2M�N�L�!(������+��,�,�� �'�'�)�E�!&����
��X��l�*��%-�^�^�%5�M�C���,�s�"3�3� �-5�^�^�-=�)��	�!��c�):�3�)?�?�$�+7��+<�S�+A�&�+I�(�$-�N�N�	�%.�_�_�
�+�0�0�Y� )���2B�2G�2G�2M�2M� M�A� �$-�O�O�a�$7��#$�0D�Q�	�H[�H[�0\�I�04�I�3D�Y�PZ�3[��� 0�+�1�1�j� *� 0� 0�3C�3I�3I�3O�3O� O�A� �$.�$4�$4�q�$8��#$�1E�a��I]�I]�1^�J�15�J�3D�Y�PZ�3[��� 0�/.>�&6�"/�*�"1r)c
���g}g}g}|j�D�]B}|j�D�]+}|j�D�]\}}|j�D�]�\}	}
|
j�D�]�}|jr�|jr�|jj|jjz}|jj|z
}
|jj|z
}|
s|s��|jj
}|j
|j||j|	|jj�}|jt|||
|����|jrj|jj
}|j
|j||j|	|jj�}|j|���k|js��y|jj
}|j
|j||j|	|jj�}|j|�����������.��E|||fSrb)	rdrcr6r7r:r;�derive_expanded�appendr)rBrC�added�removed�modifiedrfrVrWrgrYrhrU�common_perms�
left_perms�right_perms�
original_rulers                 r*�_av_generate_diffsrv�s���%'�E�&(�G�%'�H��~�~�'�� �'�'�)�E�!&����
��X�%-�^�^�%5�M�C��%-�_�_�%6�	�$�>�>�i�o�o�+4�>�>�+?�+?�)�/�/�BW�BW�+W�L�)2���)=�)=��)L�J�*3�/�/�*?�*?�,�*N�K�)�[�09���0H�0H�
�'4�'D�'D�$+�L�L��$5�w�|�|�C�7H�$-�N�N�$8�$8�(:��!)����t�[�?I�?K�1M�!N�'�^�^�,5�N�N�,D�,D�M�#0�#@�#@� '���S� 1�7�<�<��3D� )��� 4� 4�$6�D�$�N�N�4�0�&�_�_�,5�O�O�,E�,E�M�#0�#@�#@� '�
�
�c� 2�G�M�M�#�4F� )��� 5� 5�$7�D�"�L�L��.�1&7�&6�"/�*�(�<�'�8�#�#r)�ruletype�TERulesDifferencec���d�fd�}|S)z�
    This is a template for the access vector diff functions.

    Parameters:
    ruletype    The rule type, e.g. "allow".
    c�<��|jjd��d|j�d|j���|j�|j
�|j
�tt�t��}t�}t�|t<t�|tt<|jjd|j�d��t|j�||tj�|jjd|j�d��t|j
�||tj�|jjd�t|�|jjd�t!||�\}}}|jj#�|jj#�|j#�t%|d	��d
�|�t%|d��d
�|�t%|d��d
�|�y)
�6Generate the difference in rules between the policies.�Generating � differences from � to NzExpanding AV rules from �.zRemoving redundant AV rules.zGenerating AV rule diff.�added_�s�removed_�	modified_)�log�info�left_policy�right_policy�_left_te_rules�_right_te_rules�_create_te_rule_listsr?r@rJrKr`r5r6r7rkrv�clear�setattr)�selfrCrBrorprqrws      �r*�diffzav_diff_template.<locals>.diffs����	
���
�
��(��#5�d�6F�6F�5G�t�D�L]�L]�K^�_�	a����&�$�*>�*>�*F��&�&�(��t�v�t�v�.���&��)-���%�&�FJ�f��%�&�'B�C����
�
�0��1A�1A�0B�!�D�E� ��!4�!4�X�!>���RV�R[�R[�\����
�
�0��1B�1B�0C�1�E�F� ��!5�!5�h�!?��'�SW�S]�S]�^����
�
�4�5�"�7�+����
�
�0�1�#5�g�w�#G� ��w���������
�
�����
�
�����x�j��*�E�2�����
�!�,�g�6���	�(��1�-�x�8r)�rENr(�rwr�s` r*�av_diff_templater�s��� 9�D�Kr)�AVRuleXpermWrapperc�`�t�}|D]E}|j�D]0}t|�}	||xj|jzc_�2�G|r5tjt�jdt|��d��|j�S#t$r|||<Y��wxYw)z`
    Generator that yields wrapped, expanded, av(x) rules with
    unioned permission sets.
    z	Expanded z rules)r@rOr�r:�KeyError�logging�	getLoggerr �debug�len�keys)rArcrR�
expanded_rule�expanded_wrapped_rules     r*�_avxrule_expand_generatorr�0s���?C�f�E�$��,�3�3�5�M�$6�}�$E�!�
E��+�,�2�2�6K�6Q�6Q�Q�2�6�%�
����(�#�)�)�I�c�%�j�\��*H�I��:�:�<���
�
E�/D��+�,�
E�s�"B�B-�,B-c���d�fd�}|S)z�
    This is a template for the extended permission access vector diff functions.

    Parameters:
    ruletype    The rule type, e.g. "allowxperm".
    c�<��|jjd�
�d|j�d|j���|jr|j
s|j
�|jt|j�
�t|j
�
�d��\}}}g}|D]�\}}|j|j|jd��\}}}	|s|s�7|jt|jtj|�tj|�tjd�|	D������t|d�
�d�t!d	�|D���t|d
�
�d�t!d�|D���t|d�
�d�|�y
)r{r|r}r~F)�unwrapc3�&K�|]	}|d���y�w)rNr()�.0r^s  r*�	<genexpr>z2avx_diff_template.<locals>.diff.<locals>.<genexpr>rs����:W��A�1�Q�4��s�r�r�c3�4K�|]}|j���y�wrb��origin)r��as  r*r�z2avx_diff_template.<locals>.diff.<locals>.<genexpr>ts����/H�%�Q����%���r�c3�4K�|]}|j���y�wrbr�)r��rs  r*r�z2avx_diff_template.<locals>.diff.<locals>.<genexpr>us����1L�G�q�!�(�(�G�r�r�N)r�r�r�r�r�r�r��	_set_diffr�r:rnr,r�rr.r�r&)r�rorp�matchedrq�	left_rule�
right_rulerrrrws          �r*r�zavx_diff_template.<locals>.diffSs����	
���
�
��(��#5�d�6F�6F�5G�H��#�#�$�
&�	'��"�"�$�*>�*>��&�&�(�"&�.�.�%�d�&9�&9�(�&C�D�%�d�&:�&:�8�&D�E��#1�#���w��
��%,�!�I�z�9=���y���GQ�GW�GW�NS�9G�9U�5�K��
��m����'�	�(8�(8�(1�(:�(:�;�(G�(1�(:�(:�=�(I�(1�(:�(:�:W��:W�(W�Y�Z�&-�"	���x�j��*�C�/H�%�/H�,H�I�����
�!�,�c�1L�G�1L�.L�M���	�(��1�-�x�8r)r�r(r�s` r*�avx_diff_templater�Ks���#9�J�Kr)c���d�fd�}|S)z�
    This is a template for the type_* diff functions.

    Parameters:
    ruletype    The rule type, e.g. "type_transition".
    c���|jjd��d|j�d|j���|j�|j
�|j
�|j|j|j�t�|j|j
�t��\}}}g}|D]a\}}t|j�t|j�k7s�2|jt||j|j���ct|d��d�|�t|d��d�|�t|d��d�|�y)	r{r|r}r~Nr�r�r�r�)r�r�r�r�r�r�r�r��_expand_generator�
TERuleWrapperr�defaultrnr0r�)r�rorpr�rqr�r�rws       �r*r�zte_diff_template.<locals>.diff�sM���	
���
�
��(��#5�d�6F�6F�5G�t�D�L]�L]�K^�_�	a����&�$�*>�*>�*F��&�&�(�"&�.�.��"�"�4�#6�#6�x�#@�-�P��"�"�4�#7�#7��#A�=�Q�#S���w����%,�!�I�z�$�I�$5�$5�6�:N�z�Oa�Oa�:b�b�����y�/9�/A�/A�/8�/@�/@�!B�C�	&-�	���x�j��*�E�2�����
�!�,�g�6���	�(��1�-�x�8r)r�r(r�s` r*�te_diff_templater�{s���9�4�Kr)c��eZdZUdZeejj�Ze	eje�Ze	eje�Ze	e
e�Zeejj�Ze	eje�Ze	eje�Ze	e
e�Zeejj(�Ze	eje�Ze	eje�Ze	e
e�Zeejj2�Ze	eje�Ze	eje�Ze	e
e�Zeejj>�Z e	ejBe �Z"e	ejBe �Z#e	e$e �Z%eejjL�Z'e	ejBe'�Z(e	ejBe'�Z)e	e$e'�Z*eejjV�Z,e	ejBe,�Z-e	ejBe,�Z.e	e$e,�Z/eejj`�Z1e	ejBe1�Z2e	ejBe1�Z3e	e$e1�Z4e5ejjl�Z7e	ejpe7�Z9e	ejpe7�Z:e	e;e7�Z<e5ejjz�Z>e	ejpe>�Z?e	ejpe>�Z@e	e;e>�ZAe5ejj��ZCe	ejpeC�ZDe	ejpeC�ZEe	e;eC�ZFdZGeHejej�feJd<dZKeHejej�feJd<dd�ZLdd�ZMy)rxzV
    Determine the difference in type enforcement rules
    between two policies.
    Nr�r�c�z�|jjd|j���tt�|_|jj
�D]*}|j
|jj|��,|j
j�D]0\}}|jjdt|��d|�d���2|jjd|j���tt�|_|jj
�D]*}|j|jj|��,|jj�D]0\}}|jjdt|��d|�d���2|jjd�y)z$Create rule lists for both policies.zBuilding TE rule lists from zLoaded � z rules.z!Completed building TE rule lists.N)
r�r�r�r�listr��terulesrwrnrcr�r�r�)r�rrw�ruless    r*r�z'TERulesDifference._create_te_rule_lists�sa��	
�����5�d�6F�6F�5G�H�I�)�$�/����$�$�,�,�.�D�����
�
�.�5�5�d�;�/� $�2�2�8�8�:�O�H�e��H�H�N�N�W�S��Z�L��(��7�C�D� ;�	
�����5�d�6G�6G�5H�I�J�*�4�0����%�%�-�-�/�D�� � ����/�6�6�t�<�0� $�3�3�9�9�;�O�H�e��H�H�N�N�W�S��Z�L��(��7�C�D� <�	
�����:�;r)c���|jjd�|`|`|`|`|`|`|`|`	|`
|`|`|`
|`|`|`|`|`|`|`|`|`|`|`|`|`|`|`|`|`|`|` |`!|`"d|_#d|_$y)z%Reset diff results on policy changes.zResetting TE rule differencesN)%r�r��added_allows�removed_allows�modified_allows�added_auditallows�removed_auditallows�modified_auditallows�added_neverallows�removed_neverallows�modified_neverallows�added_dontaudits�removed_dontaudits�modified_dontaudits�added_allowxperms�removed_allowxperms�modified_allowxperms�added_auditallowxperms�removed_auditallowxperms�modified_auditallowxperms�added_neverallowxperms�removed_neverallowxperms�modified_neverallowxperms�added_dontauditxperms�removed_dontauditxperms�modified_dontauditxperms�added_type_transitions�removed_type_transitions�modified_type_transitions�added_type_changes�removed_type_changes�modified_type_changes�added_type_members�removed_type_members�modified_type_membersr�r��r�s r*�_reset_diffzTERulesDifference._reset_diff�s��������6�7������ ��"��$��%��"��$��%��!��#��$��"��$��%��'��)��*��'��)��*��&��(��)��'��)��*��#��%��&��#��%��&�#���#��r)r�)Nr r!r"r#r�r�
TERuletype�allow�diff_allowsrr$r�r�rr��
auditallow�diff_auditallowsr�r�r��
neverallow�diff_neverallowsr�r�r��	dontaudit�diff_dontauditsr�r�r�r��
allowxperm�diff_allowxpermsr-r�r�r,r��auditallowxperm�diff_auditallowxpermsr�r�r��neverallowxperm�diff_neverallowxpermsr�r�r��dontauditxperm�diff_dontauditxpermsr�r�r�r��type_transition�diff_type_transitions�TERuler�r�r0r��type_change�diff_type_changesr�r�r��type_member�diff_type_membersr�r�r�r�r�	AnyTERuler%r�r�r�r(r)r*rxrx�sa���
#�9�#7�#7�#=�#=�>�K�9�'�	�(8�(8�9�+�F�L�;�)�)�*:�*:�;�K�H�N�:�*�>�:�;�G�O�'�	�(<�(<�(G�(G�H��>�,�Y�-=�-=�>�?O�P��@�.�y�/?�/?�@�AQ�R��?�/��?�@P�Q��'�	�(<�(<�(G�(G�H��>�,�Y�-=�-=�>�?O�P��@�.�y�/?�/?�@�AQ�R��?�/��?�@P�Q��&�y�';�';�'E�'E�F�O�=�+�I�,<�,<�=�o�N��?�-�i�.>�.>�?��P��>�.�~�>��O��(��)=�)=�)H�)H�I��C�,�Y�-B�-B�C�DT�U��E�.�y�/D�/D�E�FV�W��D�/�0C�D�EU�V��-�i�.B�.B�.R�.R�S��H�1�)�2G�2G�H�I^�_��J�3�I�4I�4I�J�K`�a�� I� 4�5H� I�J_� `��-�i�.B�.B�.R�.R�S��H�1�)�2G�2G�H�I^�_��J�3�I�4I�4I�J�K`�a�� I� 4�5H� I�J_� `��,�Y�-A�-A�-P�-P�Q��G�0��1F�1F�G�H\�]��I�2�9�3H�3H�I�J^�_��H�3�4G�H�I]�^��,�Y�-A�-A�-Q�-Q�R��C�1�)�2B�2B�C�DY�Z��E�3�I�4D�4D�E�F[�\�� D� 4�^� D�EZ� [��(��)=�)=�)I�)I�J��?�-�i�.>�.>�?�@Q�R��A�/�	�0@�0@�A�BS�T��@�0��@�AR�S��(��)=�)=�)I�)I�J��?�-�i�.>�.>�?�@Q�R��A�/�	�0@�0@�A�BS�T��@�0��@�AR�S��JN�N�H�Y�1�1�9�3F�3F�F�G�N�KO�O�X�i�2�2�I�4G�4G�G�H�O�
<�,'$r)c�J�eZdZdZdZdejddfd�Zd�Zd�Z	d	�Z
y)
r�zEWrap extended permission access vector rules to allow set operations.)rNrPrL�
xperm_typer:rrENc�$�||_t|j�|_t|j�|_t	|j
�|_|j|_t|j�|_t|�|_
yrb)r�rrNrPrrLr�r&r:�hash�key�r�rs  r*�__init__zAVRuleXpermWrapper.__init__*s^�����2�4�;�;�?���2�4�;�;�?���+�D�K�K�8����/�/�������_��
���:��r)c��|jSrb�r�r�s r*�__hash__zAVRuleXpermWrapper.__hash__3����x�x�r)c�4�|j|jkSrbr�r��others  r*�__lt__zAVRuleXpermWrapper.__lt__6����x�x�%�)�)�#�#r)c���|j|jk(xrO|j|jk(xr4|j|jk(xr|j|jk(Srb)rNrPrLr�rs  r*�__eq__zAVRuleXpermWrapper.__eq__9s\���{�{�e�l�l�*�0��K�K�5�<�<�'�0��K�K�5�<�<�'�0�
�O�O�u�/�/�/�	0r))r r!r"r#�	__slots__rr-r�rrr	r(r)r*r�r�$s2��O�E�I��Y�2�2��t���$�0r)c�,�eZdZdZdZd�Zd�Zd�Zd�Zy)r�z*Wrap type_* rules to allow set operations.�rNrPrLrGrH�filenamec��||_t|j�|_t|j�|_t	|j
�|_t
|�|_	t|j�|_	|j|_
	|j|_
y#tj$rd|_	d|_
Y�6wxYw#tjtjf$r
d|_
YywxYwrb)r�rrNrPrrLr�r�r
rGrHr
rIr
�RuleUseError�TERuleNoFilenamer�s  r*r�zTERuleWrapper.__init__Hs������2�4�;�;�?���2�4�;�;�?���+�D�K�K�8�����:���	*�:�4�;K�;K�L�D��%)�%;�%;�D�"�
	!� �M�M�D�M���+�+�	*�#�D��%)�D�"�	*���&�&�	�(B�(B�C�	!� �D�M�	!�s$�'+B%�C�%!C	�C	�*C9�8C9c��|jSrbrr�s r*rzTERuleWrapper.__hash__[rr)c�4�|j|jkSrbrrs  r*rzTERuleWrapper.__lt__^rr)c�B�|j|jk(xr�|j|jk(xrj|j|jk(xrO|j|jk(xr4|j|jk(xr|j
|j
k(Srbrrs  r*r	zTERuleWrapper.__eq__as����{�{�e�l�l�*�,��K�K�5�<�<�'�,��K�K�5�<�<�'�,�
���� 1� 1�1�,�
�"�"�e�&=�&=�=�	,�

�M�M�U�^�^�+�	,r)N)	r r!r"r#r
r�rrr	r(r)r*r�r�Bs��4�^�I�!�&�$�,r)r�)>r��collectionsr�collections.abcrr�dataclassesr�sysr�enumr�typing�r
rrGr
�descriptorsr�
differencerrrrQrrr�objclassrrJrKrr,r0r5r9r=r?�Conditionalr'�CondExp�bool�	CondBlockr@�RuleDBr�r$r`rk�tuplervr�r�r-r�r��Anyr�rxr�r�r(r)r*�<module>r%s����#�.�!���
�#�4�-�=�=�E��+��2�3��$�V�n���$�d�#��%��$���$�d�#�&�*�&�$�&��$�d�#�$�%�$�$�$��4��
� � �� �
�'�'��'�
�%�%��%��
�
�#�
%���3�J�	�	
�g�t�I�t�C��c�4��EV�@V�;W�6W�1X�,X�'Y�Y�Z�Z�	[��X[��Y�-=�-=�(>�X[��X[�&2�X[�:>�X[�CG�X[�v#\��#\�4�#\�L$$��$$��$$�
�d�9�#�#�$�d�9�+;�+;�&<�d�>�>R�R�S�$$�N*�y�3�3�*��BU�AV�X\�A\�8]�*�Z��)�2G�2G�)H��#+�,@�#A��6-�	� 4� 4�-��CV�BW�Y]�B]�9^�-�`"�y�3�3�"��&�*�*��t�AS�8T�"�JA$�
�A$�H0���!6�!6�7�0�<',�G�',r)