Ë
   ÿÐéÉÂW4ã                  ój  — d Z ddlmZ ddlZddlmc mZ ddl	Z	ddl
mZ ddlZddlmZmZmZmZmZmZ ddlmZmZmZ ddlmZmZ ddlmZmZmZ  G d	„ d
e«      Z ejB                  d2d„«       Z"ejB                  d3d„«       Z#d4d„Z$d5d„Z%ejB                  d6d„«       Z&ejB                  d7d„«       Z'	 	 	 	 	 	 	 	 	 	 d8d„Z(ejR                  j                  	 	 	 	 	 	 	 	 d9d„«       Z*ejR                  j                  	 	 	 	 	 	 	 	 d9d„«       Z+ejR                  j                  	 	 	 	 	 	 d:d„«       Z,	 	 	 	 d;d„Z-ejR                  j]                  dg d¢«      	 	 	 	 	 	 	 	 	 	 d<d„«       Z/ejR                  j]                  dg d¢«      	 	 	 	 	 	 	 	 d=d„«       Z0	 	 	 	 d;d„Z1	 	 	 	 	 	 d>d„Z2	 	 	 	 d?d„Z3ejR                  j]                  dd d!d"d#gd$g«      	 	 	 	 	 	 	 	 d@d%„«       Z4	 	 	 	 d;d&„Z5dAd'„Z6dAd(„Z7dAd)„Z8	 	 	 	 d;d*„Z9dAd+„Z:d6d,„Z;ejR                  j]                  d-g d.¢«      dBd/„«       Z<	 	 	 	 d;d0„Z=	 	 	 	 	 	 d>d1„Z>y)CaŸ  Tests for the pentest path: the sandbox network profile and the tool catalog.

Two units are covered together because they are one permission chain.
``agents.engagement`` and ``agents.pentest_catalog`` decide whether a pentest
tool call may be reconstructed at all; the Bubblewrap profile decides what the
reconstructed call runs inside. ``allow_network`` is the single flag that widens
that profile, and it appeared nowhere in the suite - which is how the profile
shipped with an argument vector ``bwrap`` refuses at run time.

Nothing here opens a socket, starts a scan, or launches Bubblewrap. The argv the
provider builds is read at the single point where it is handed to
``asyncio.create_subprocess_exec``, which the fixture below replaces. That is
the same seam ``tests/test_execution_provider.py::no_process_launch`` already
uses to prove nothing was spawned; no production hook was added to make the
vector observable.
é    )ÚannotationsN)ÚPath)ÚMAX_ENGAGEMENT_LEVELÚTOOL_CLASS_BY_LEVELÚTOOL_CLASSESÚEngagementAuthorizationÚTargetScopeÚTargetScopeError)ÚPentestRefusalÚauthorize_tool_callÚtool_class_for_level)ÚNETWORK_TMPFS_SIZE_BYTESÚBubblewrapExecutionProvider)ÚAuditEventTypeÚAuditLogÚ
AuditQueryc                  ó$   ‡ — e Zd ZdZdˆ fd„Zˆ xZS )Ú_ArgvCapturedzGRaised by the stubbed launcher so a test stops before a process exists.c                ó2   •— t         ‰| �  d«       || _        y )Nzargv captured before launch)ÚsuperÚ__init__Úargv)Úselfr   Ú	__class__s     €ú:/home/oem/CyberBrain26-unified/tests/test_pentest_agent.pyr   z_ArgvCaptured.__init__0   s   ø€ Ü‰ÑÐ6Ô7Øˆ�	ó    )r   ú	list[str]ÚreturnÚNone)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú__classcell__)r   s   @r   r   r   -   s   ø„ ÙQ÷ñ r   r   c                ól   ‡— g Šdˆfd„}| j                  t        d|«       | j                  dd„ «       ‰S )a•  Return the argument vectors the provider builds, launching nothing.

    The provider hands its argv to ``asyncio.create_subprocess_exec`` and to
    nothing else, so replacing that one call is what lets the vector be read on
    a host with no Bubblewrap installed, no namespace permission and no network.
    The returned list stays empty when the provider refused before reaching the
    launcher.
    c               Ÿ  ó~   •K  — | D �cg c]  }t        |«      ‘Œ }}‰j                  |«       t        |«      ‚c c}w ­w)N)ÚstrÚappendr   )ÚargsÚkwargsÚargr   Úrecordeds       €r   Ú_recordz$captured_bwrap_argv.<locals>._recordA   s:   øè ø€ Ø$(Ö)˜S”�C•Ð)ˆÐ)Ø�‰˜ÔÜ˜DÓ!Ð!ùò *ùs   ƒ=ˆ8š#=Úcreate_subprocess_execz=cyberbrain26.execution_plane.bubblewrap_provider.shutil.whichc                ó   — d| › �S )Nz	/usr/bin/© )Únames    r   ú<lambda>z%captured_bwrap_argv.<locals>.<lambda>K   s   € �y  Ð'€ r   )r)   Úobjectr*   r3   r   r   )ÚsetattrÚasyncio)Úmonkeypatchr-   r,   s     @r   Úcaptured_bwrap_argvr7   5   sA   ø€ ð !#€Hõ"ð
 ×ÑœÐ!9¸7ÔCð ×ÑØGÙ'ôð €Or   c                ó~   — | dz  }|j                  dd¬«       |j                  dt        |«      «       t        |«      S )a�  Point the provider at a resolver file that provably exists.

    The bind is emitted only when the host's resolver is a file, so on a host
    without one the ``allow_network`` profile legitimately skips it. Redirecting
    the module constant at a file this test creates makes the assertions below
    about the profile's *rule* rather than about the machine the suite happens
    to run on.
    zresolv.confznameserver 127.0.0.53
zutf-8)Úencodingz>cyberbrain26.execution_plane.bubblewrap_provider.RESOLVER_PATH)Ú
write_textr4   r'   )Útmp_pathr6   Úresolvers      r   Úhost_resolverr=   P   sE   € ð ˜-Ñ'€HØ×ÑÐ1¸GÐÔDØ×ÑØHÌ#ÈhË-ôô ˆx‹=Ðr   c                óp   — t        | «      D ��cg c]  \  }}|dk(  r| |dz      | |dz      f‘Œ c}}S c c}}w )zHReturn the ``(source, destination)`` of every ``--ro-bind`` in ``argv``.z	--ro-bindé   é   )Ú	enumerate)r   ÚindexÚtokens      r   Ú	_ro_bindsrD   b   sI   € ô & d›O÷áˆE�5Ø�KÒð 
ˆe�a‰i‰˜$˜u q™y™/Ò*óð ùó s   �2c                ó0   — | | j                  d«      dz      S )zCReturn the rlimit shim the provider execs, located inside ``argv``.z-cr?   )rB   )r   s    r   Ú_limiter_sourcerF   k   s   € à�—
‘
˜4Ó  1Ñ$Ñ%Ð%r   c                 ó6   — t        dddt        dh«      d¬«      S )z?A level-1 recon engagement over exactly one authorised network.úsecurity-reviewer©z10.10.10.0/24r?   Úrecon)zno raw sockets)ÚownerÚtargetsÚ	max_levelÚallowed_tool_classesÚrules_of_engagement©r   Ú	frozensetr0   r   r   Ú
engagementrR   p   s'   € ô #Ø!Ø"ØÜ&¨ yÓ1Ø/ôð r   c                 ó   — t        «       S )zIAn in-memory audit log; nothing is persisted to the developer's data dir.)r   r0   r   r   Ú	audit_logrT   |   s   € ô ‹:Ðr   c                ó‚  — | j                  t        t        j                  |¬«      «      }t	        |«      }d}||k(  }|�st        j                  d|fd||f«      dt        j                  «       v st        j                  t        «      rt        j                  t        «      nddt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      dœz  }t        j                  d«      d	z   d
|iz  }	t        t        j                  |	«      «      ‚dx}x}}|d   }
|
j                  }d}||k(  }|s­t        j                  d|fd||f«      dt        j                  «       v st        j                  |
«      rt        j                  |
«      ndt        j                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚dx}x}}|
j                  }||k(  }|sÚt        j                  d|fd||f«      dt        j                  «       v st        j                  |
«      rt        j                  |
«      ndt        j                  |«      dt        j                  «       v st        j                  |«      rt        j                  |«      nddœz  }dd|iz  }t        t        j                  |«      «      ‚dx}}|
j                   }d}||k(  }|s­t        j                  d|fd||f«      dt        j                  «       v st        j                  |
«      rt        j                  |
«      ndt        j                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚dx}x}}|
j"                  }d}||k(  }|s­t        j                  d|fd||f«      dt        j                  «       v st        j                  |
«      rt        j                  |
«      ndt        j                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚dx}x}}|
j$                  d   }|j&                  }||k(  }|s­t        j                  d|fd||f«      t        j                  |«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚dx}x}}|
j$                  d   }|s8d d!t        j                  |«      iz  }t        t        j                  |«      «      ‚d}y)"z<Assert a refusal left exactly one attributable audit record.)Ú
event_typeÚtask_idr?   ©ú==©z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sÚlenÚevents©Úpy0Úpy1Úpy3Úpy6z/a refusal has to leave exactly one audit recordz
>assert %(py8)sÚpy8Nr   Úrefused)z.%(py2)s
{%(py2)s = %(py0)s.result
} == %(py5)sÚevent©r^   Úpy2Úpy5úassert %(py7)sÚpy7)z-%(py2)s
{%(py2)s = %(py0)s.error
} == %(py4)sÚreason_code)r^   rf   Úpy4úassert %(py6)sra   Ú	pentester)z-%(py2)s
{%(py2)s = %(py0)s.actor
} == %(py5)s)z0%(py2)s
{%(py2)s = %(py0)s.agent_id
} == %(py5)sÚengagement_digest)z.%(py1)s == %(py5)s
{%(py5)s = %(py3)s.digest
}rR   ©r_   r`   rg   Údetailzassert %(py1)sr_   )Úqueryr   r   ÚPERMISSION_CHECKr[   Ú
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚ_format_assertmsgÚAssertionErrorÚ_format_explanationÚresultÚerrorÚactorÚagent_idÚmetadataÚdigest)ÚauditrR   rj   rW   r\   Ú@py_assert2Ú@py_assert5Ú@py_assert4Ú@py_format7Ú@py_format9rd   Ú@py_assert1Ú@py_assert3Ú@py_format6Ú@py_format8Ú@py_format5Ú@py_assert0Ú@py_format2s                     r   Ú_assert_refusal_auditedr�   ‚   s7  € ð �[‰[Üœn×=Ñ=ÀwÔOó€Fô ˆv‹;ÐN˜!ÐNˆ;˜!Ñ×N×NÖNˆ;˜!×N×N×N×N×NÑNŒ3×N×NÓNŒ3×N×N×N×N×NÒNˆv×N×NÓNˆv×N×NÔNˆ;×N×NÒN˜!×N×N×NÐN×N×N×N×N×N×NÐNØ�1‰I€EØ�<‰<Ð$˜9Ð$ˆ<˜9Ñ$×$×$Õ$ˆ<˜9×$×$×$×$×$Ñ$ˆ5×$×$Ó$ˆ5×$×$Ô$ˆ<×$×$Ò$˜9×$×$×$×$×$×$Ó$Ø�;‰;Ð%ˆ;˜+Ñ%×%×%Õ%ˆ;˜+×%×%×%×%×%Ñ%ˆ5×%×%Ó%ˆ5×%×%Ô%ˆ;×%×%×%×%×%Ð%˜+×%×%Ó%˜+×%×%×%×%×%×%Ó%Ø�;‰;Ð%˜+Ð%ˆ;˜+Ñ%×%×%Õ%ˆ;˜+×%×%×%×%×%Ñ%ˆ5×%×%Ó%ˆ5×%×%Ô%ˆ;×%×%Ò%˜+×%×%×%×%×%×%Ó%Ø�>‰>Ð(˜[Ð(ˆ>˜[Ñ(×(×(Õ(ˆ>˜[×(×(×(×(×(Ñ(ˆ5×(×(Ó(ˆ5×(×(Ô(ˆ>×(×(Ò(˜[×(×(×(×(×(×(Ó(Ø�>‰>Ð-Ñ.ÐC°*×2CÑ2CÐCÐ.Ð2CÑC×C×CÕCÐ.Ð2C×C×CÓCÐ.×C×C×C×C×CÐC°*×C×CÓC°*×C×CÔCÐ2C×C×C×C×C×C×CÓCØ�>‰>˜(Ñ#Ð#Ñ#×#×#Ð#Ð#×#×#×#×#×#Ð#r   c              ƒ  óN  K  — | dz  }|j                  «        t        d¬«      }t        j                  t        «      5  |j                  ddt        |«      ¬«      ƒ d {  –—†  d d d «       t        |«      }d}||k(  }|söt        j                  d|fd	||f«      d
t        j                  «       v st        j                  t        «      rt        j                  t        «      nd
dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      dœz  }dd|iz  }	t        t        j                  |	«      «      ‚d x}x}}|d   }
|
d   }d}||k(  }|slt        j                  d|fd||f«      t        j                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}}d}||
v }|s™t        j                  d|fd||
f«      t        j                  |«      dt        j                  «       v st        j                  |
«      rt        j                  |
«      nddœz  }dd|iz  }t        t        j                  |«      «      ‚d x}}d}||
v }|s™t        j                  d|fd||
f«      t        j                  |«      dt        j                  «       v st        j                  |
«      rt        j                  |
«      nddœz  }dd|iz  }t        t        j                  |«      «      ‚d x}}|
j                   }d} ||«      }|
j                   }d} ||«      }||k  }|�s>t        j                  d|fd||f«      dt        j                  «       v st        j                  |
«      rt        j                  |
«      ndt        j                  |«      t        j                  |«      t        j                  |«      dt        j                  «       v st        j                  |
«      rt        j                  |
«      ndt        j                  |«      t        j                  |«      t        j                  |«      dœz  }d d!|iz  }t        t        j                  |«      «      ‚d x}x}x}x}x}x}}|
j!                  d"«      }|
||d#z    }d"d$g}||k(  }|slt        j                  d|fd||f«      t        j                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}}|
|d#z
  | }d%t        t"        «      g}||k(  }|slt        j                  d|fd||f«      t        j                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}}|
j                   }d%} ||«      }||k  }|�st        j                  d|fd&||f«      dt        j                  «       v st        j                  |
«      rt        j                  |
«      ndt        j                  |«      t        j                  |«      t        j                  |«      d't        j                  «       v st        j                  |«      rt        j                  |«      nd'd(œz  }	d)d*|	iz  }t        t        j                  |«      «      ‚d x}x}x}}t%        |
«      }|j&                  }||f} ||«      }d}||k(  }|�s2t        j                  d|fd+||f«      d,t        j                  «       v st        j                  t$        «      rt        j                  t$        «      nd,dt        j                  «       v st        j                  |
«      rt        j                  |
«      ndt        j                  |«      t        j                  |«      t        j                  |«      t        j                  |«      t        j                  |«      d-œz  }d.d/|iz  }t        t        j                  |«      «      ‚d x}x}x}x}x}}d0}t)        |
«      }||v }|söt        j                  d|fd1||f«      t        j                  |«      d2t        j                  «       v st        j                  t(        «      rt        j                  t(        «      nd2dt        j                  «       v st        j                  |
«      rt        j                  |
«      ndt        j                  |«      d3œz  }dd|iz  }	t        t        j                  |	«      «      ‚d x}x}}y 7 �	Œ7# 1 sw Y   �	Œ7xY w­w)4NÚ	workspaceT©Úallow_networkúprint('never runs')Úpython©r‘   r?   rX   rZ   r[   r7   r]   úassert %(py8)srb   r   z/usr/bin/bwrap©z%(py1)s == %(py4)s©r_   rk   rl   ra   ú--share-net©Úin©z%(py1)s in %(py3)sr   ©r_   r`   úassert %(py5)srg   ú--unshare-all©ú<©zˆ%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.index
}(%(py4)s)
} < %(py14)s
{%(py14)s = %(py10)s
{%(py10)s = %(py8)s.index
}(%(py12)s)
}©r^   rf   rk   ra   rb   Úpy10Úpy12Úpy14úassert %(py16)sÚpy16ú--tmpfsr@   ú/tmpú--size)zJ%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.index
}(%(py4)s)
} < %(py8)sÚtmpfs_index)r^   rf   rk   ra   rb   úassert %(py10)sr¥   )zj%(py9)s
{%(py9)s = %(py5)s
{%(py5)s = %(py3)s
{%(py3)s = %(py0)s(%(py1)s)
}.count
}(%(py7)s)
} == %(py12)srD   )r^   r_   r`   rg   ri   Úpy9r¦   úassert %(py14)sr§   ÚRLIMIT_NPROC©z0%(py1)s in %(py6)s
{%(py6)s = %(py3)s(%(py4)s)
}rF   ©r_   r`   rk   ra   )Úmkdirr   ÚpytestÚraisesr   Úexecuter'   r[   rs   rt   ru   rv   rw   rx   rz   r{   rB   r   rD   ÚcountrF   )Úsandbox_workspaces_rootr7   r=   r‘   Úproviderrƒ   r„   r…   r†   r‡   r   r�   r‰   rŒ   Ú@py_format4rŠ   rˆ   Ú@py_assert9Ú@py_assert11Ú@py_assert13Ú@py_assert7Ú@py_format15Ú@py_format17r­   Ú@py_format11Ú@py_assert6Ú@py_assert8Ú@py_assert10Ú@py_format13s                                r   ÚKtest_allow_network_shares_the_namespace_and_ceils_tmpfs_before_declaring_itrÇ   ž   sà  è ø€ ð (¨+Ñ5€IØ‡O�OÔÜ*¸Ô>€Hä	�‰”}Ó	%ñ ZØ×ÑÐ4°hÌ#ÈiË.ÐÓY×YÐY÷Zô Ð"Ó#Ð( qÐ(Ð# qÑ(×(×(Õ(Ð# q×(×(×(×(×(Ñ(Œ3×(×(Ó(Œ3×(×(×(×(×(Ò(Ð"×(×(Ó(Ð"×(×(Ô(Ð#×(×(Ò( q×(×(×(×(×(×(Ó(Ø˜qÑ!€DØ�‰7Ð&Ð&Ð&ˆ7Ð&Ñ&×&×&Õ&ˆ7Ð&×&×&Ó&ˆ7×&×&Ò&Ð&×&×&×&×&×&×&Ó&ð Ð ˆ=˜DÐ × × Õ ˆ=˜D× × Ó ˆ=× × × × × Ð ˜D× × Ó ˜D× × × × × × Ó ð Ð"ˆ?˜dÐ"×"×"Õ"ˆ?˜d×"×"Ó"ˆ?×"×"×"×"×"Ð"˜d×"×"Ó"˜d×"×"×"×"×"×"Ó"Ø�:‰:ÐB�oÐB‰:�oÓ&ÐB¨¯©ÐB°MÐB©°MÓ)BÐBÐ&Ð)BÑB×B×BÖBÐ&Ð)B×B×B×B×B×BÑBˆ4×B×BÓBˆ4×B×BÔBˆ:×B×BÒB�o×B×BÒBÐ&×B×B×B×B×BÐB¨×B×BÓB¨×B×BÔB¨×B×BÒB°M×B×BÒBÐ)B×B×B×B×B×B×B×BÓBð —*‘*˜YÓ'€KØ�˜k¨A™oÐ.ÐE°9¸fÐ2EÐEÐ.Ð2EÑE×E×EÕEÐ.Ð2E×E×EÓEÐ.×E×EÒEÐ2E×E×E×E×E×E×EÓEØ�˜a‘ +Ð.Ð[°8¼SÔAYÓ=ZÐ2[Ð[Ð.Ð2[Ñ[×[×[Õ[Ð.Ð2[×[×[Ó[Ð.×[×[Ò[Ð2[×[×[×[×[×[×[Ó[Ø�:‰:Ð-�hÐ-‰:�hÓÐ-Ð +Ñ-×-×-Ö-Ð +×-×-×-×-×-Ñ-ˆ4×-×-Ó-ˆ4×-×-Ô-ˆ:×-×-Ò-�h×-×-Ò-Ð×-×-×-×-×-Ð- +×-×-Ó- +×-×-×-×-×-×-×-ô �T‹?ÐEˆ?× Ñ ÐE -°Ð!?ÐEÑ Ð!?Ó@ÐEÀAÐEÐ@ÀAÑE×E×EÖEÐ@ÀA×E×E×E×E×EÑEŒ9×E×EÓEŒ9×E×E×E×E×EÒE�T×E×EÓE�T×E×EÔEˆ?×E×EÒEÐ ×E×EÒEÐ!?×E×EÒEÐ@×E×EÒEÀA×E×E×E×E×E×E×EÑEð Ð2œ_¨TÓ2Ð2ˆ>Ð2Ð2×2×2Õ2ˆ>Ð2×2×2Ó2ˆ>×2×2×2×2×2Ð2œ_×2×2Ó2œ_×2×2×2×2×2Ò2¨T×2×2Ó2¨T×2×2Ô2Ð2×2×2×2×2×2×2Ô2ðC 	Zù÷Zñ Züs/   ‚;f%½!fÁfÁfÁ#d2f%æfæf"æf%c              ƒ  óp  K  — | dz  }|j                  «        t        «       }t        j                  t        «      5  |j                  ddt        |«      ¬«      ƒ d {  –—†  d d d «       |d   }d}||v }|s™t        j                  d|fd||f«      t        j                  |«      d	t        j                  «       v st        j                  |«      rt        j                  |«      nd	d
œz  }dd|iz  }	t        t        j                  |	«      «      ‚d x}}d}||v}|s™t        j                  d|fd||f«      t        j                  |«      d	t        j                  «       v st        j                  |«      rt        j                  |«      nd	d
œz  }dd|iz  }	t        t        j                  |	«      «      ‚d x}}d}||v}|s™t        j                  d|fd||f«      t        j                  |«      d	t        j                  «       v st        j                  |«      rt        j                  |«      nd	d
œz  }dd|iz  }	t        t        j                  |	«      «      ‚d x}}|j                  d«      }
||
|
dz    }g d¢}||k(  }|slt        j                  d|fd||f«      t        j                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}}||v}|sÆt        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndd	t        j                  «       v st        j                  |«      rt        j                  |«      nd	dœz  }dd|iz  }t        t        j                  |«      «      ‚d }t!        |«      D ��ch c]  \  }}|’Œ	 }}}||v}|s™t        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      dœz  }dd|iz  }	t        t        j                  |	«      «      ‚d x}}d }t!        |«      }||v }|söt        j                  d|fd!||f«      t        j                  |«      d"t        j                  «       v st        j                  t         «      rt        j                  t         «      nd"d	t        j                  «       v st        j                  |«      rt        j                  |«      nd	t        j                  |«      d#œz  }d$d%|iz  }t        t        j                  |«      «      ‚d x}x}}d&}t#        |«      }||v}|söt        j                  d|fd'||f«      t        j                  |«      d(t        j                  «       v st        j                  t"        «      rt        j                  t"        «      nd(d	t        j                  «       v st        j                  |«      rt        j                  |«      nd	t        j                  |«      d#œz  }d$d%|iz  }t        t        j                  |«      «      ‚d x}x}}y 7 �ŒD# 1 sw Y   �ŒDxY wc c}}w ­w))Nr‘   r”   r•   r–   r   r    r›   r�   r   rž   rŸ   rg   rš   )únot in)z%(py1)s not in %(py3)sr¬   ú--procé   )rÊ   z/procrª   r«   rX   r˜   r™   rl   ra   )z%(py0)s not in %(py2)sr=   )r^   rf   zassert %(py4)srk   )z%(py0)s not in %(py3)s)r^   r`   )ú/usrrÌ   r²   rD   r³   r—   rb   r±   )z4%(py1)s not in %(py6)s
{%(py6)s = %(py3)s(%(py4)s)
}rF   )r´   r   rµ   r¶   r   r·   r'   rs   rt   rx   ru   rv   rw   rz   r{   rB   rD   rF   )r¹   r7   r=   r‘   rº   r   r�   rƒ   r»   rŠ   Ú
proc_indexr‰   rŒ   r†   rˆ   Ú@py_format3ÚsourceÚ_r„   r‡   s                       r   ÚMtest_the_default_profile_still_unshares_everything_and_declares_a_plain_tmpfsrÑ   Í   sõ  è ø€ ð (¨+Ñ5€IØ‡O�OÔÜ*Ó,€Hä	�‰”}Ó	%ñ ZØ×ÑÐ4°hÌ#ÈiË.ÐÓY×YÐY÷Zð ˜qÑ!€DØÐ"ˆ?˜dÐ"×"×"Õ"ˆ?˜d×"×"Ó"ˆ?×"×"×"×"×"Ð"˜d×"×"Ó"˜d×"×"×"×"×"×"Ó"ØÐ$ˆ= Ð$×$×$Õ$ˆ= ×$×$Ó$ˆ=×$×$×$×$×$Ð$ ×$×$Ó$ ×$×$×$×$×$×$Ó$ð Ðˆ8˜4Ð××Õˆ8˜4××Óˆ8×××××Ð˜4××Ó˜4××××××Óà—‘˜HÓ%€JØ�
˜Z¨!™^Ð,ÐVÒ0VÐVÐ,Ð0VÑV×V×VÕVÐ,Ð0V×V×VÓVÐ,×V×VÒVÐ0V×V×V×V×V×V×VÓVð  Ð$×$×$Õ$ˆ= ×$×$×$×$×$Ñ$ˆ=×$×$Ó$ˆ=×$×$×$×$×$Ò$ ×$×$Ó$ ×$×$×$×$×$×$Ñ$Ü9BÀ4»× I©I¨F°A¢Ð IÐIÑ Iˆ=Ð IÐI×I×IÕIˆ=Ð I×I×I×I×I×IÑIˆ=×I×IÓIˆ=×I×IÔIÐ I×I×I×I×I×I×IÑIØÐ.œy¨›Ð.Ð˜Ð.×.×.Õ.Ð˜×.×.Ó.Ð×.×.×.×.×.Ð.œy×.×.Ó.œy×.×.×.×.×.Ò.¨×.×.Ó.¨×.×.Ô.˜×.×.×.×.×.×.Ó.ð Ð6¤°Ó!6Ð6ˆ>Ð!6Ð6×6×6Õ6ˆ>Ð!6×6×6Ó6ˆ>×6×6×6×6×6Ð6¤×6×6Ó6¤×6×6×6×6×6Ò6°×6×6Ó6°×6×6Ô6Ð!6×6×6×6×6×6×6Ô6ð' 	Zù÷Zñ Züó  !Jùs<   ‚9Z6»!Z#ÁZ ÁZ#Á!M.Z6ÏZ0ÏKZ6Ú Z#Ú#Z-Ú(Z6c              ƒ  ó€	  K  — | dz  }|j                  «        t        «       }t        d¬«      }|df|dffD ]M  \  }}t        j                  t        «      5  |j                  ddt        |«      |¬«      ƒ d {  –—†  d d d «       ŒO |\  }}d}	|	|v }
|
s™t        j                  d	|
fd
|	|f«      t        j                  |	«      dt        j                  «       v st        j                  |«      rt        j                  |«      nddœz  }dd|iz  }t        t        j                  |«      «      ‚d x}	}
d}	|	|v }
|
s™t        j                  d	|
fd
|	|f«      t        j                  |	«      dt        j                  «       v st        j                  |«      rt        j                  |«      nddœz  }dd|iz  }t        t        j                  |«      «      ‚d x}	}
||fD �]Ð  }d}	|	|v }
|
s™t        j                  d	|
fd
|	|f«      t        j                  |	«      dt        j                  «       v st        j                  |«      rt        j                  |«      nddœz  }dd|iz  }t        t        j                  |«      «      ‚d x}	}
|j                  }d} ||«      }|j                  }d} ||«      }||k  }|�s>t        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      t        j                  |«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}x}x}x}x}}|j                  d«      }||dz
  |dz    }	dt        t         «      ddg}|	|k(  }
|
slt        j                  d|
fd|	|f«      t        j                  |	«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}	x}
}�ŒÓ y 7 �Œ7# 1 sw Y   �Œ…xY w­w) Nr‘   Tr’   Fr”   r•   )r‘   r“   rš   r›   r�   Úper_call_argvrž   rŸ   rg   Úper_constructor_argvr    r   r¡   r£   r¤   r¨   r©   rª   r@   r¬   r«   rX   r˜   r™   rl   ra   )r´   r   rµ   r¶   r   r·   r'   rs   rt   rx   ru   rv   rw   rz   r{   rB   r   )r¹   r7   r‘   Úgranted_by_callÚgranted_by_constructorrº   r“   rÓ   rÔ   r�   rƒ   r»   rŠ   r   rˆ   r‰   r„   r¼   r½   r¾   r¿   rÀ   rÁ   r­   rŒ   r†   s                             r   ÚBtest_the_per_call_flag_can_grant_the_profile_but_never_withdraw_itr×   ó   sw  è ø€ ð (¨+Ñ5€IØ‡O�OÔÜ1Ó3€OÜ8ÀtÔLÐà%4°dÐ$;Ð>TÐV[Ð=\Ð#]ò Ñˆ�-Ü�]‰]œ=Ó)ñ 	Ø×"Ñ"Ø% x¼3¸y»>Ø+ð #ó ÷ ð ÷	ð 	ðð +>Ñ'€MÐ'ØÐ)ˆ=˜MÐ)×)×)Õ)ˆ=˜M×)×)Ó)ˆ=×)×)×)×)×)Ð)˜M×)×)Ó)˜M×)×)×)×)×)×)Ó)ØÐ0ˆ=Ð0Ð0×0×0Õ0ˆ=Ð0×0×0Ó0ˆ=×0×0×0×0×0Ð0Ð0×0×0Ó0Ð0×0×0×0×0×0×0Ó0ØÐ 4Ð5ó 
ˆð Ð&ˆ $Ð&×&×&Õ&ˆ $×&×&Ó&ˆ×&×&×&×&×&Ð& $×&×&Ó& $×&×&×&×&×&×&Ó&Ø�z‰zÐF˜/ÐF‰z˜/Ó*ÐF¨T¯Z©ZÐF¸ÐF©Z¸Ó-FÐFÐ*Ð-FÑF×F×FÖFÐ*Ð-F×F×F×F×F×FÑFˆt×F×FÓFˆt×F×FÔFˆz×F×FÒF˜/×F×FÒFÐ*×F×F×F×F×FÐF¨T×F×FÓF¨T×F×FÔF¨Z×F×FÒF¸×F×FÒFÐ-F×F×F×F×F×F×F×FÓFØ—j‘j Ó+ˆØ�K !‘O k°A¡oÐ6ð 	
ØÜÔ(Ó)ØØð	;
ð 	
Ð6ð ;
ñ 
÷ 	
ï
é ó	
Ð6ð ;
÷ 	
ñ 	
÷
 
�	ð 7÷ 	
ð 	
÷
 
�	ð;
÷ 	
÷ 	
÷ 	
ñ 	
ï
é ÷	
÷ 	
ñ 	
ñ
ðù÷	ñ 	üs1   ‚AR>Á"R1Á7R.Á8R1Á<P2R>Ò.R1Ò1R;	Ò6R>c                ó’  — t        ddddgddœ| ¬«      }|j                  }d}||k(  }|s­t        j                  d	|fd
||f«      dt	        j
                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}}|j                  }d}||k(  }|s­t        j                  d	|fd||f«      dt	        j
                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}}|j                  }d}||k(  }|s­t        j                  d	|fd||f«      dt	        j
                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}}|j                  }d}||k(  }|s­t        j                  d	|fd||f«      dt	        j
                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}}|j                  }| j                  }||k(  }|sît        j                  d	|fd||f«      dt	        j
                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      dt	        j
                  «       v st        j                  | «      rt        j                  | «      ndt        j                  |«      dœz  }dd|iz  }	t        t        j                  |	«      «      ‚d x}x}}y )NÚnmapú
10.10.10.5ú-sTú-p22,443r?   ©ÚtoolÚtargetr)   Úlevel©rR   )z/usr/bin/nmaprÛ   rÜ   rÚ   rX   ©z,%(py2)s
{%(py2)s = %(py0)s.argv
} == %(py5)sr|   re   rh   ri   )z-%(py2)s
{%(py2)s = %(py0)s.level
} == %(py5)sÚscan_network)z.%(py2)s
{%(py2)s = %(py0)s.action
} == %(py5)s)z.%(py2)s
{%(py2)s = %(py0)s.target
} == %(py5)s)zU%(py2)s
{%(py2)s = %(py0)s.engagement_digest
} == %(py6)s
{%(py6)s = %(py4)s.digest
}rR   ©r^   rf   rk   ra   r—   rb   )r   r   rs   rt   ru   rv   rw   rx   rz   r{   rà   Úactionrß   rn   r�   )
rR   r|   rˆ   r…   r‰   rŠ   r‹   r„   r†   r‡   s
             r   Ú<test_a_scoped_level_1_scan_is_reconstructed_from_the_catalogræ      s}  € ô !àØ"Ø˜JÐ'Øñ		
ð ô€Fð �;‰;ÐLÐLÐLˆ;ÐLÑL×L×LÕLˆ;ÐL×L×L×L×L×LÑLˆ6×L×LÓLˆ6×L×LÔLˆ;×L×LÒLÐL×L×L×L×L×L×LÓLØ�<‰<Ð˜1Ðˆ<˜1Ñ××Õˆ<˜1×××××Ñˆ6××Óˆ6××Ôˆ<××Ò˜1××××××ÓØ�=‰=Ð*˜NÐ*ˆ=˜NÑ*×*×*Õ*ˆ=˜N×*×*×*×*×*Ñ*ˆ6×*×*Ó*ˆ6×*×*Ô*ˆ=×*×*Ò*˜N×*×*×*×*×*×*Ó*Ø�=‰=Ð(˜LÐ(ˆ=˜LÑ(×(×(Õ(ˆ=˜L×(×(×(×(×(Ñ(ˆ6×(×(Ó(ˆ6×(×(Ô(ˆ=×(×(Ò(˜L×(×(×(×(×(×(Ó(Ø×#Ñ#Ð8 z×'8Ñ'8Ð8Ð#Ð'8Ñ8×8×8Õ8Ð#Ð'8×8×8×8×8×8Ñ8ˆ6×8×8Ó8ˆ6×8×8Ô8Ð#×8×8×8×8×8Ð8 z×8×8Ó8 z×8×8Ô8Ð'8×8×8×8×8×8×8Ô8r   )rC   rj   ))ú-sSÚforbidden_argument)z-oNreport.xmlrè   )z--script=vulnrè   )z--tracerouterè   )z--not-in-the-catalogÚargument_not_allowedc           	     óÎ  — t        j                  t        «      5 }t        dd|gdddœ| |¬«       d d d «       j                  }|j
                  }||k(  }|sît        j                  d|fd||f«      d	t        j                  «       v st        j                  |«      rt        j                  |«      nd	t        j                  |«      t        j                  |«      d
t        j                  «       v st        j                  |«      rt        j                  |«      nd
dœz  }dd|iz  }	t        t        j                  |	«      «      ‚d x}x}}t        || |d«       y # 1 sw Y   �Œ,xY w)NrÙ   rÚ   r?   zpentest-args©rÞ   rß   r)   rà   rW   ©rR   rT   rX   ©zN%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.value
}.reason_code
} == %(py6)sÚexcinforj   rä   r—   rb   )rµ   r¶   r   r   Úvaluerj   rs   rt   ru   rv   rw   rx   rz   r{   r�   )
rR   rT   rC   rj   rî   rˆ   r‰   r„   r†   r‡   s
             r   Ú3test_catalog_refuses_an_argument_it_does_not_permitrð   5  sí   € ô  
�‰”~Ó	&ð 
¨'ÜØ |¸e¸WÈqØ&ñ(à!Øõ		
÷
ð �=‰=Ð3ˆ=×$Ñ$Ð3Ð$¨Ñ3×3×3Õ3Ð$¨×3×3×3×3×3Ñ3ˆ7×3×3Ó3ˆ7×3×3Ô3ˆ=×3×3Ò3Ð$×3×3×3×3×3Ð3¨×3×3Ó3¨×3×3×3×3×3×3Õ3Ü˜I z°;ÀÕO÷
ñ 
ús   šEÅE$rß   )ú192.168.5.5ú
10.0.0.0/8zelsewhere.example.comc           	     ó2  — t        j                  t        «      5 }t        d|dgdddœ| |¬«       d d d «       j                  }|j
                  }d}||k(  }|sÁt        j                  d|fd	||f«      d
t        j                  «       v st        j                  |«      rt        j                  |«      nd
t        j                  |«      t        j                  |«      t        j                  |«      dœz  }dd|iz  }	t        t        j                  |	«      «      ‚d x}x}x}}|j                  }
t        |
«      }||v }|�s7t        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      nddt        j                  «       v st        j                  t        «      rt        j                  t        «      ndd
t        j                  «       v st        j                  |«      rt        j                  |«      nd
t        j                  |
«      t        j                  |«      dœz  }dd|iz  }	t        t        j                  |	«      «      ‚d x}x}
}t        || dd«       y # 1 sw Y   �Œ^xY w)NrÙ   rÛ   r?   zpentest-scoperë   rì   Útarget_out_of_scoperX   ©zN%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.value
}.reason_code
} == %(py7)srî   ©r^   rf   rk   ri   úassert %(py9)sr¯   r›   )zK%(py0)s in %(py7)s
{%(py7)s = %(py2)s(%(py5)s
{%(py5)s = %(py3)s.value
})
}rß   r'   )r^   rf   r`   rg   ri   ©rµ   r¶   r   r   rï   rj   rs   rt   ru   rv   rw   rx   rz   r{   r'   r�   )rR   rT   rß   rî   rˆ   r‰   rÃ   r„   r‹   Ú@py_format10r…   s              r   Ú:test_catalog_refuses_a_target_outside_the_engagement_scoperú   Q  s–  € ô 
�‰”~Ó	&ð 
¨'ÜØ v¸°wÈØ'ñ)à!Øõ		
÷
ð �=‰=Ð=ˆ=×$Ñ$Ð=Ð(=Ð=Ð$Ð(=Ñ=×=×=Õ=Ð$Ð(=×=×=×=×=×=Ñ=ˆ7×=×=Ó=ˆ7×=×=Ô=ˆ=×=×=Ò=Ð$×=×=Ò=Ð(=×=×=×=×=×=×=Õ=Ø Ÿ™Ð'”S˜Ó'Ð'ˆ6Ð'Ð'×'×'Ö'ˆ6Ð'×'×'×'×'×'Ñ'ˆ6×'×'Ó'ˆ6×'×'×'×'×'Ò'”S×'×'Ó'”S×'×'×'×'×'Ò'˜×'×'Ó'˜×'×'Ô'˜×'×'Ò'Ð'×'×'×'×'×'×'Ó'Ü˜I zÐ3HÈ/ÕZ÷
ñ 
ús   šJÊJc                óD
  — | j                   }t        |t        «      }|�sddt        j                  «       v st        j                  t        «      rt        j                  t        «      nddt        j                  «       v st        j                  |«      rt        j                  |«      nddt        j                  «       v st        j                  t        «      rt        j                  t        «      ndt        j                  |«      dœz  }t        t        j                  |«      «      ‚d }|j                  }d} ||«      }d}||u }|sÕt        j                  d|fd	||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      t        j                  |«      t        j                  |«      d
œz  }dd|iz  }	t        t        j                  |	«      «      ‚d x}x}x}x}}|j                  }d} ||«      }d}||u }|sÕt        j                  d|fd	||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      t        j                  |«      t        j                  |«      d
œz  }dd|iz  }	t        t        j                  |	«      «      ‚d x}x}x}x}}|j                  }d} ||«      }d}||u }|sÕt        j                  d|fd	||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      t        j                  |«      t        j                  |«      d
œz  }dd|iz  }	t        t        j                  |	«      «      ‚d x}x}x}x}}|j                  }d} ||«      }d}||u }|sÕt        j                  d|fd	||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      t        j                  |«      t        j                  |«      d
œz  }dd|iz  }	t        t        j                  |	«      «      ‚d x}x}x}x}}y )Nz5assert %(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
}Ú
isinstanceÚscoper	   )r^   r_   rf   rk   rÚ   T©Úis)zL%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.allows
}(%(py4)s)
} is %(py9)s©r^   rf   rk   ra   r¯   úassert %(py11)sÚpy11z10.10.10.0/28rò   Fz
10.10.11.5)rý   rü   r	   ru   rv   rs   rw   rx   rz   r{   Úallowsrt   )
rR   rý   r‰   rŒ   rˆ   r„   rÄ   r¿   rù   Ú@py_format12s
             r   ÚNtest_the_scope_the_engagement_derives_is_the_one_the_target_is_checked_againstr  k  sî  € ð
 ×Ñ€Eä�eœ[Ó)Ð)Ò)×)×)×)×)Õ)Œ:×)×)Ó)Œ:×)×)×)×)×)Ò)�e×)×)Ó)�e×)×)×)×)×)Ò)œ[×)×)Ó)œ[×)×)Ô)Ð)×)×)×)×)×)Ð)Ø�<‰<Ð-˜Ð-‰<˜Ó%Ð-¨Ð-Ð%¨Ð-×-×-Õ-Ð%¨×-×-×-×-×-Ñ-ˆ5×-×-Ó-ˆ5×-×-Ô-ˆ<×-×-Ò-˜×-×-Ò-Ð%×-×-Ò-¨×-×-×-×-×-×-×-Ø�<‰<Ð0˜Ð0‰<˜Ó(Ð0¨DÐ0Ð(¨DÐ0×0×0Õ0Ð(¨D×0×0×0×0×0Ñ0ˆ5×0×0Ó0ˆ5×0×0Ô0ˆ<×0×0Ò0˜×0×0Ò0Ð(×0×0Ò0¨D×0×0×0×0×0×0×0Ø�<‰<Ð.˜Ð.‰<˜Ó%Ð.¨Ð.Ð%¨Ð.×.×.Õ.Ð%¨×.×.×.×.×.Ñ.ˆ5×.×.Ó.ˆ5×.×.Ô.ˆ<×.×.Ò.˜×.×.Ò.Ð%×.×.Ò.¨×.×.×.×.×.×.×.Ø�<‰<Ð.˜Ð.‰<˜Ó%Ð.¨Ð.Ð%¨Ð.×.×.Õ.Ð%¨×.×.×.×.×.Ñ.ˆ5×.×.Ó.ˆ5×.×.Ô.ˆ<×.×.Ò.˜×.×.Ò.Ð%×.×.Ò.¨×.×.×.×.×.×.×.Ð.r   c           	     óÞ  — t        j                  t        «      5 }t        ddg dddœ| |¬«       d d d «       j                  }|j
                  }d}||k(  }|sÁt        j                  d|fd	||f«      d
t        j                  «       v st        j                  |«      rt        j                  |«      nd
t        j                  |«      t        j                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}x}}d}	|j                  }t        |«      }
|	|
v }|�s
t        j                  d|fd|	|
f«      t        j                  |	«      dt        j                  «       v st        j                  t        «      rt        j                  t        «      ndd
t        j                  «       v st        j                  |«      rt        j                  |«      nd
t        j                  |«      t        j                  |
«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}	x}x}}
t        || dd«       y # 1 sw Y   �Œ5xY w)NÚnucleirÚ   r@   zpentest-levelrë   rì   Úlevel_not_engagedrX   rõ   rî   rö   r÷   r¯   zlevel 1r›   ©zK%(py1)s in %(py8)s
{%(py8)s = %(py3)s(%(py6)s
{%(py6)s = %(py4)s.value
})
}r'   ©r_   r`   rk   ra   rb   r®   r¥   rø   )rR   rT   rî   rˆ   r‰   rÃ   r„   r‹   rù   r�   r¿   rƒ   r‡   rÂ   s                 r   Ú5test_a_tool_above_the_engagement_max_level_is_refusedr  y  s…  € ô 
�‰”~Ó	&ð 
¨'ÜØ¨¸rÈAØ'ñ)à!Øõ		
÷
ð �=‰=Ð;ˆ=×$Ñ$Ð;Ð(;Ð;Ð$Ð(;Ñ;×;×;Õ;Ð$Ð(;×;×;×;×;×;Ñ;ˆ7×;×;Ó;ˆ7×;×;Ô;ˆ=×;×;Ò;Ð$×;×;Ò;Ð(;×;×;×;×;×;×;Õ;ØÐ*˜GŸM™MÐ*œ˜MÓ*Ð*ˆ9Ð*Ð*×*×*Ö*ˆ9Ð*×*×*Ó*ˆ9×*×*×*×*×*Ð*œ×*×*Ó*œ×*×*×*×*×*Ò*˜G×*×*Ó*˜G×*×*Ô*˜M×*×*Ò*Ð*×*×*×*×*×*×*Õ*Ü˜I zÐ3FÈÕX÷
ñ 
ús   šI"É"I,c           	     ó  — t        dddt        dh«      ¬«      }t        j                  t        «      5 }t        ddg dd	d
œ|| ¬«       d d d «       j                  }|j                  }d}||k(  }|sÁt        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}x}}d}	|j                  }t!        |«      }
|	|
v }|�s
t        j                  d|fd|	|
f«      t        j                  |	«      dt        j                  «       v st        j                  t         «      rt        j                  t         «      nddt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |
«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}	x}x}}
t#        | |dd	«       y # 1 sw Y   �Œ5xY w)NrH   rI   é   rJ   ©rK   rL   rM   rN   r  rÚ   r@   zpentest-classrë   rì   r  rX   rõ   rî   rö   r÷   r¯   Úvulnerabilityr›   r	  r'   r
  r®   r¥   )r   rQ   rµ   r¶   r   r   rï   rj   rs   rt   ru   rv   rw   rx   rz   r{   r'   r�   )rT   Únarrowrî   rˆ   r‰   rÃ   r„   r‹   rù   r�   r¿   rƒ   r‡   rÂ   s                 r   ÚEtest_a_level_the_engagement_numbers_but_does_not_authorise_is_refusedr  Š  s¤  € ô %Ø!Ø"ØÜ&¨ yÓ1ô	€Fô 
�‰”~Ó	&ð 
¨'ÜØ¨¸rÈAØ'ñ)àØõ		
÷
ð �=‰=Ð;ˆ=×$Ñ$Ð;Ð(;Ð;Ð$Ð(;Ñ;×;×;Õ;Ð$Ð(;×;×;×;×;×;Ñ;ˆ7×;×;Ó;ˆ7×;×;Ô;ˆ=×;×;Ò;Ð$×;×;Ò;Ð(;×;×;×;×;×;×;Õ;ØÐ0 '§-¡-Ð0œc -Ó0Ð0ˆ?Ð0Ð0×0×0Ö0ˆ?Ð0×0×0Ó0ˆ?×0×0×0×0×0Ð0œc×0×0Ó0œc×0×0×0×0×0Ò0 '×0×0Ó0 '×0×0Ô0 -×0×0Ò0Ð0×0×0×0×0×0×0Õ0Ü˜I vÐ/BÀOÕT÷
ñ 
ús   ³I;É;Jrà   Ú1ç      ð?Tr?   ó   1c           	     ó  — | j                   } ||«      }d}||u }|�st        j                  d|fd||f«      dt        j                  «       v st        j
                  | «      rt        j                  | «      ndt        j                  |«      dt        j                  «       v st        j
                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}x}}| j                  } ||«      }d}||u }|�st        j                  d|fd	||f«      dt        j                  «       v st        j
                  | «      rt        j                  | «      ndt        j                  |«      dt        j                  «       v st        j
                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}x}}t        j                  t        «      5 }	t        d
dg |ddœ| |¬«       d d d «       	j                  }|j                  }
d}|
|k(  }|sÁt        j                  d|fd|
|f«      dt        j                  «       v st        j
                  |	«      rt        j                  |	«      ndt        j                  |«      t        j                  |
«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}
x}}t!        || dd«       y # 1 sw Y   �ŒxY w)NFrþ   )zS%(py5)s
{%(py5)s = %(py2)s
{%(py2)s = %(py0)s.engages_level
}(%(py3)s)
} is %(py8)srR   rà   )r^   rf   r`   rg   rb   r®   r¥   )zR%(py5)s
{%(py5)s = %(py2)s
{%(py2)s = %(py0)s.allows_level
}(%(py3)s)
} is %(py8)srÙ   rÚ   zpentest-level-typerë   rì   Úlevel_malformedrX   rõ   rî   rö   r÷   r¯   )Úengages_levelrs   rt   ru   rv   rw   rx   rz   r{   Úallows_levelrµ   r¶   r   r   rï   rj   r�   )rR   rT   rà   rˆ   r…   r¿   rÃ   r‡   rÂ   rî   r‰   r„   r‹   rù   s                 r   Ú5test_a_malformed_level_is_refused_rather_than_coercedr  ¤  s2  € ð ×#Ñ#Ð3Ñ# EÓ*Ð3¨eÐ3Ð*¨eÐ3×3×3Ö3Ð*¨e×3×3×3×3×3Ñ3ˆ:×3×3Ó3ˆ:×3×3Ô3Ð#×3×3×3×3×3Ð3 E×3×3Ó3 E×3×3Ô3Ð*×3×3Ò3¨e×3×3×3×3×3×3Õ3Ø×"Ñ"Ð2Ñ" 5Ó)Ð2¨UÐ2Ð)¨UÐ2×2×2Ö2Ð)¨U×2×2×2×2×2Ñ2ˆ:×2×2Ó2ˆ:×2×2Ô2Ð"×2×2×2×2×2Ð2 5×2×2Ó2 5×2×2Ô2Ð)×2×2Ò2¨U×2×2×2×2×2×2Õ2ä	�‰”~Ó	&ð 
¨'ÜØ |¸RÈ%Ø,ñ.à!Øõ		
÷
ð �=‰=Ð9ˆ=×$Ñ$Ð9Ð(9Ð9Ð$Ð(9Ñ9×9×9Õ9Ð$Ð(9×9×9×9×9×9Ñ9ˆ7×9×9Ó9ˆ7×9×9Ô9ˆ=×9×9Ò9Ð$×9×9Ò9Ð(9×9×9×9×9×9×9Õ9Ü˜I zÐ3DÐFZÕ[÷
ñ 
ús   É(M>Í>Nc                óH  — | j                   }d } ||«      }d}||u }|sÕt        j                  d|fd||f«      dt        j                  «       v st        j
                  | «      rt        j                  | «      ndt        j                  |«      t        j                  |«      t        j                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}x}x}}t        dd	d
gdœ| ¬«      }|j                  }| j                  }||k(  }|sît        j                  d|fd||f«      dt        j                  «       v st        j
                  |«      rt        j                  |«      ndt        j                  |«      dt        j                  «       v st        j
                  | «      rt        j                  | «      ndt        j                  |«      dœz  }	dd|	iz  }
t        t        j                  |
«      «      ‚d x}x}}y )NFrþ   )zS%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.engages_level
}(%(py4)s)
} is %(py9)srR   r   r  r  rÙ   rÚ   rÛ   ©rÞ   rß   r)   rá   rX   )zL%(py2)s
{%(py2)s = %(py0)s.level
} == %(py6)s
{%(py6)s = %(py4)s.max_level
}r|   rä   r—   rb   )r  rs   rt   ru   rv   rw   rx   rz   r{   r   rà   rM   )rR   rˆ   r‰   r„   rÄ   r¿   rù   r  r|   r†   r‡   s              r   Ú:test_a_missing_level_declares_nothing_and_is_never_coercedr  »  sL  € ð ×#Ñ#Ð2 DÐ2Ñ# DÓ)Ð2¨UÐ2Ð)¨UÐ2×2×2Õ2Ð)¨U×2×2×2×2×2Ñ2ˆ:×2×2Ó2ˆ:×2×2Ô2Ð#×2×2Ò2 D×2×2Ò2Ð)×2×2Ò2¨U×2×2×2×2×2×2×2Ü Ø <¸%¸ÑAÈjô€Fð �<‰<Ð/˜:×/Ñ/Ð/ˆ<Ð/Ñ/×/×/Õ/ˆ<Ð/×/×/×/×/×/Ñ/ˆ6×/×/Ó/ˆ6×/×/Ô/ˆ<×/×/×/×/×/Ð/˜:×/×/Ó/˜:×/×/Ô/Ð/×/×/×/×/×/×/Ô/r   c                 ó”   — t        j                  t        d¬«      5  t        ddt	        dh«      ¬«       d d d «       y # 1 sw Y   y xY w)Nzunknown engagement tool class)ÚmatchrH   rI   Úexfiltration)rK   rL   rN   )rµ   r¶   r
   r   rQ   r0   r   r   Ú@test_an_unknown_tool_class_is_refused_when_the_artifact_is_builtr   É  s@   € Ü	�‰Ô'Ð/NÔ	Oñ 
ÜØ%Ø&Ü!*¨NÐ+;Ó!<õ	
÷
÷ 
ñ 
ús	   œ>¾Ac                 óX  — t        j                  t        «      5 } t        t        dz   «       d d d «        j
                  }|j                  }d}||k(  }|sÁt        j                  d|fd||f«      dt        j                  «       v st        j                  | «      rt        j                  | «      ndt        j                  |«      t        j                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}x}}y # 1 sw Y   ŒôxY w)	Nr?   Úunknown_levelrX   rõ   rî   rö   r÷   r¯   )rµ   r¶   r   r   r   rï   rj   rs   rt   ru   rv   rw   rx   rz   r{   ©rî   rˆ   r‰   rÃ   r„   r‹   rù   s          r   Ú;test_an_unregistered_level_has_no_tool_class_and_is_refusedr$  Ò  s»   € Ü	�‰”~Ó	&ð 7¨'ÜÔ1°AÑ5Ô6÷7ð �=‰=Ð7ˆ=×$Ñ$Ð7¨Ð7Ð$¨Ñ7×7×7Õ7Ð$¨×7×7×7×7×7Ñ7ˆ7×7×7Ó7ˆ7×7×7Ô7ˆ=×7×7Ò7Ð$×7×7Ò7¨×7×7×7×7×7×7Ö7÷7ð 7ús   šD Ä D)c                 ó„  — t         j                  }  | «       }t        |«      }t        t        «      }||k(  }|�s¸t	        j
                  d|fd||f«      dt        j                  «       v st	        j                  t        «      rt	        j                  t        «      nddt        j                  «       v st	        j                  t         «      rt	        j                  t         «      ndt	        j                  | «      t	        j                  |«      t	        j                  |«      dt        j                  «       v st	        j                  t        «      rt	        j                  t        «      nddt        j                  «       v st	        j                  t        «      rt	        j                  t        «      ndt	        j                  |«      dœz  }dd|iz  }t        t	        j                  |«      «      ‚d x} x}x}x}}t        t         «      } d	}t        |z   }t        |«      }t        |«      }| |k(  }|�st	        j
                  d|fd
| |f«      dt        j                  «       v st	        j                  t        «      rt	        j                  t        «      nddt        j                  «       v st	        j                  t         «      rt	        j                  t         «      ndt	        j                  | «      dt        j                  «       v st	        j                  t        «      rt	        j                  t        «      nddt        j                  «       v st	        j                  t        «      rt	        j                  t        «      nddt        j                  «       v st	        j                  t        «      rt	        j                  t        «      ndt	        j                  |«      t	        j                  |«      t	        j                  |«      dœ	z  }dd|iz  }	t        t	        j                  |	«      «      ‚d x} x}x}x}x}}y )NrX   )z„%(py7)s
{%(py7)s = %(py0)s(%(py5)s
{%(py5)s = %(py3)s
{%(py3)s = %(py1)s.values
}()
})
} == %(py12)s
{%(py12)s = %(py9)s(%(py10)s)
}Úsetr   r   )r^   r_   r`   rg   ri   r¯   r¥   r¦   r°   r§   r?   )z|%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py14)s
{%(py14)s = %(py5)s(%(py12)s
{%(py12)s = %(py6)s((%(py7)s + %(py9)s))
})
}ÚsortedÚlistÚranger   )	r^   r_   r`   rg   ra   ri   r¯   r¦   r§   r¨   r©   )r   Úvaluesr&  r   rs   rt   ru   rv   rw   rx   rz   r{   r'  r   r)  r(  )
rƒ   r…   rÃ   r½   rÄ   rÆ   rÀ   rÅ   r¾   rÁ   s
             r   ÚAtest_every_level_the_engagement_defines_has_a_declared_tool_classr+  Ù  s9  € ô #×)Ñ)ÐAÑ)Ó+ÐAŒ3Ð+Ó,ÐA´´LÓ0AÐAÐ,Ð0AÑA×A×AÖAÐ,Ð0A×A×A×A×A×AÑAŒ3×A×AÓAŒ3×A×A×A×A×AÒAÔ"×A×AÓAÔ"×A×AÔAÐ)×A×AÒAÐ+×A×AÒAÐ,×A×A×A×A×AÐA´×A×AÓA´×A×A×A×A×AÒA´L×A×AÓA´L×A×AÔAÐ0A×A×A×A×A×A×A×AÜÔ%Ó&ÐOÈAÐOÔ5IÈAÑ5MÐO¬uÐ5MÓ/NÐO¬$Ð/NÓ*OÐOÐ&Ð*OÑO×O×OÖOÐ&Ð*O×O×O×O×O×OÑOŒ6×O×OÓOŒ6×O×O×O×O×OÒOÔ%×O×OÓOÔ%×O×OÔOÐ&×O×O×O×O×OÐO¬$×O×OÓO¬$×O×O×O×O×OÒO¬u×O×OÓO¬u×O×O×O×O×OÒOÔ5I×O×OÓOÔ5I×O×OÔOÈA×O×OÒOÐ/N×O×OÒOÐ*O×O×O×O×O×O×O×OÒOr   c                óº  — t        | j                  | j                  dt        dh«      dd¬«      }t	        j
                  t        «      5 }t        dddgdd	œ|d
¬«       d d d «       j                  }|j                  }d}||k(  }|sÁt        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      t        j                  |«      dœz  }dd|iz  }t!        t        j"                  |«      «      ‚d x}x}x}}y # 1 sw Y   ŒôxY w)Nr?   rJ   g      Y@g      i@)rK   rL   rM   rN   Úwindow_startÚ
window_endrÙ   rÚ   rÛ   rÝ   r  )rR   ÚnowÚengagement_window_closedrX   rõ   rî   rö   r÷   r¯   )r   rK   rL   rQ   rµ   r¶   r   r   rï   rj   rs   rt   ru   rv   rw   rx   rz   r{   )	rR   Úclosedrî   rˆ   r‰   rÃ   r„   r‹   rù   s	            r   Ú0test_a_closed_engagement_window_refuses_the_callr2  á  s   € ô %Ø×ÑØ×"Ñ"ØÜ&¨ yÓ1ØØô€Fô 
�‰”~Ó	&ð 
¨'ÜØ |¸e¸WÈqÑQØØõ	
÷
ð �=‰=ÐBˆ=×$Ñ$ÐBÐ(BÐBÐ$Ð(BÑB×B×BÕBÐ$Ð(B×B×B×B×B×BÑBˆ7×B×BÓBˆ7×B×BÔBˆ=×B×BÒBÐ$×B×BÒBÐ(B×B×B×B×B×B×BÖB÷
ð 
ús   Á	EÅEc                 óV  — t        j                  t        «      5 } t        ddg dœd ¬«       d d d «        j                  }|j
                  }d}||k(  }|sÁt        j                  d|fd||f«      dt        j                  «       v st        j                  | «      rt        j                  | «      ndt        j                  |«      t        j                  |«      t        j                  |«      d	œz  }d
d|iz  }t        t        j                  |«      «      ‚d x}x}x}}y # 1 sw Y   ŒôxY w)NrÙ   rÚ   r  rá   Úno_engagementrX   rõ   rî   rö   r÷   r¯   )rµ   r¶   r   r   rï   rj   rs   rt   ru   rv   rw   rx   rz   r{   r#  s          r   ÚEtest_no_engagement_artifact_is_a_refusal_and_not_a_default_engagementr5  ÷  sÁ   € Ü	�‰”~Ó	&ð 
¨'ÜØ |¸RÑ@ÈTõ	
÷
ð
 �=‰=Ð7ˆ=×$Ñ$Ð7¨Ð7Ð$¨Ñ7×7×7Õ7Ð$¨×7×7×7×7×7Ñ7ˆ7×7×7Ó7ˆ7×7×7Ô7ˆ=×7×7Ò7Ð$×7×7Ò7¨×7×7×7×7×7×7Ö7÷
ð 
ús   šDÄD(c                 ó4   — t        dddt        dh«      ¬«      S )NrH   rI   r  Úexploitationr  rP   r0   r   r   Ú_exploitation_engagementr8    s#   € Ü"Ø!Ø"ØÜ&¨Ð'7Ó8ô	ð r   )rC   Ú
authorised))z-T12.5T)z-T60T)z-T0T)z-T61F)z-TfastFc                ó@  — ddd| gddœ}|�s#t        j                  t        «      5 }t        |t	        «       ¬«       d d d «       j
                  }|j                  }ddh}||v }|sÁt        j                  d	|fd
||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      t        j                  |«      dœz  }dd|iz  }	t        t        j                  |	«      «      ‚d x}x}x}}y t        |t	        «       ¬«      }
|
j                  }dd| ddf}||k(  }|s­t        j                  d|fd||f«      dt        j                  «       v st        j                  |
«      rt        j                  |
«      ndt        j                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}}y # 1 sw Y   �ŒÙxY w)NÚhydrarÚ   z-ladminr  rÝ   rá   Úvalue_out_of_rangeÚvalue_malformedr›   )zN%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.value
}.reason_code
} in %(py7)srî   rö   r÷   r¯   z/usr/bin/hydraÚsshrX   râ   r|   re   rh   ri   )rµ   r¶   r   r   r8  rï   rj   rs   rt   ru   rv   rw   rx   rz   r{   r   )rC   r9  Úintentrî   rˆ   r‰   rÃ   r„   r‹   rù   r|   r…   rŠ   s                r   Ú5test_the_hydra_task_size_option_keeps_its_float_ranger@    sw  € ð ØØ˜EÐ"Øñ	€Fò Ü�]‰]œ>Ó*ð 	O¨gÜ Ô3KÓ3MÕN÷	Oà�}‰}ÐUˆ}×(Ñ(ÐUÐ-AÐCTÐ,UÐUÐ(Ð,UÐU×U×UÕUÐ(Ð,U×U×U×U×U×UÑUˆw×U×UÓUˆw×U×UÔUˆ}×U×UÒUÐ(×U×UÒUÐ,U×U×U×U×U×U×UÕUØä  Ô4LÓ4NÔO€Fð �;‰;ÐSÐ+¨Y¸¸|ÈUÐSÐSˆ;ÐSÑS×S×SÕSˆ;ÐS×S×S×S×S×SÑSˆ6×S×SÓSˆ6×S×SÔSˆ;×S×SÒSÐS×S×S×S×S×S×SÔS÷	Oñ 	Oús   ¦HÈHc                ót  — t        dddgddœ| ¬«      }d}|j                  }||v }|s­t        j                  d|fd||f«      t        j                  |«      d	t        j                  «       v st        j                  |«      rt        j                  |«      nd	t        j                  |«      d
œz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}}t        j                  t        «      5 }t        dddgddœ| ¬«       d d d «       j                  }|j                  }	d}
|	|
k(  }|sÁt        j                  d|fd|	|
f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |	«      t        j                  |
«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}	x}}
d}|j                  }t        |«      }||v }|�s
t        j                  d|fd||f«      t        j                  |«      dt        j                  «       v st        j                  t        «      rt        j                  t        «      nddt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}x}}y # 1 sw Y   �Œ'xY w)NÚcurlzhttp://10.10.10.5/z--max-time5r?   rÝ   rá   r›   )z,%(py1)s in %(py5)s
{%(py5)s = %(py3)s.argv
}r9  ro   rh   ri   z--max-time5.5r=  rX   rõ   rî   rö   r÷   r¯   znot an integerr	  r'   r
  r®   r¥   )r   r   rs   rt   rx   ru   rv   rw   rz   r{   rµ   r¶   r   rï   rj   r'   )rR   r9  r�   r…   rƒ   rŠ   r‹   rî   rˆ   r‰   rÃ   r„   rù   r¿   r‡   rÂ   s                   r   Ú7test_an_integer_option_still_refuses_a_fractional_valuerC  +  s  € ô %àØ*Ø"�OØñ		
ð ô€Jð Ð+˜JŸO™OÐ+ˆ=˜OÐ+×+×+Õ+ˆ=˜O×+×+Ó+ˆ=×+×+×+×+×+Ð+˜J×+×+Ó+˜J×+×+Ô+˜O×+×+×+×+×+×+Ó+ä	�‰”~Ó	&ð 	
¨'ÜàØ.Ø(Ð)Øñ	ð "õ	
÷	
ð �=‰=Ð9ˆ=×$Ñ$Ð9Ð(9Ð9Ð$Ð(9Ñ9×9×9Õ9Ð$Ð(9×9×9×9×9×9Ñ9ˆ7×9×9Ó9ˆ7×9×9Ô9ˆ=×9×9Ò9Ð$×9×9Ò9Ð(9×9×9×9×9×9×9Õ9ØÐ1 7§=¡=Ð1œs =Ó1Ð1ÐÐ1Ð1×1×1Ö1ÐÐ1×1×1Ó1Ð×1×1×1×1×1Ð1œs×1×1Ó1œs×1×1×1×1×1Ò1 7×1×1Ó1 7×1×1Ô1 =×1×1Ò1Ð1×1×1×1×1×1×1Ö1÷	
ñ 	
ús   Ã4L-Ì-L7c                óÀ  — ddg dddœdfdddgdd	dœd
fddg dddœdfddg dddœdfddg dddœdfddddddœdfg}|D �]I  \  }}t        j                  t        «      5 }t        || |¬«       d d d «       j                  }|j
                  }||k(  }|sît        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      dt        j                  «       v st        j                  |«      rt        j                  |«      nddœz  }	dd|	iz  }
t        t        j                  |
«      «      ‚d x}x}}�ŒL |j                  t        t         j"                  ¬ «      «      }t%        |«      }t%        |«      }||k(  }|�s€t        j                  d|fd!||f«      d"t        j                  «       v st        j                  t$        «      rt        j                  t$        «      nd"d#t        j                  «       v st        j                  |«      rt        j                  |«      nd#t        j                  |«      d"t        j                  «       v st        j                  t$        «      rt        j                  t$        «      nd"d$t        j                  «       v st        j                  |«      rt        j                  |«      nd$t        j                  |«      d%œz  }
d&d'|
iz  }t        t        j                  |«      «      ‚d x}x}}|D �ch c]  }|j&                  ’Œ }}|D ��ch c]  \  }}|’Œ	 }}}||k(  }|slt        j                  d|fd(||f«      t        j                  |«      t        j                  |«      d)œz  }d*d+|iz  }	t        t        j                  |	«      «      ‚d x}x}}|D �ch c]  }|j(                  ’Œ }}d,h}||k(  }|slt        j                  d|fd(||f«      t        j                  |«      t        j                  |«      d)œz  }d*d+|iz  }	t        t        j                  |	«      «      ‚d x}x}}|D �ch c]  }|j*                  ’Œ }}d-h}||k(  }|slt        j                  d|fd(||f«      t        j                  |«      t        j                  |«      d)œz  }d*d+|iz  }	t        t        j                  |	«      «      ‚d x}x}}|D �ch c]  }|j,                  ’Œ }}t%        |«      }t%        |«      }||k(  }|�sSt        j                  d|fd.||f«      d"t        j                  «       v st        j                  t$        «      rt        j                  t$        «      nd"t        j                  |«      t        j                  |«      d"t        j                  «       v st        j                  t$        «      rt        j                  t$        «      nd"d$t        j                  «       v st        j                  |«      rt        j                  |«      nd$t        j                  |«      d/œz  }d0d1|iz  }t        t        j                  |«      «      ‚d x}x}x}}y # 1 sw Y   �ŒPxY wc c}w c c}}w c c}w c c}w c c}w )2Nzrm -rf /rÚ   r?   zpentest-unknown-toolrë   Úunknown_toolrÙ   rç   zpentest-forbidden-argrè   rñ   zpentest-out-of-scoperô   r  r@   zpentest-above-max-levelr  r  zpentest-malformed-levelr  Únopezpentest-malformed-argsÚargs_malformedrì   rX   rí   rî   rj   rä   r—   rb   )rV   )zN%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py8)s
{%(py8)s = %(py5)s(%(py6)s)
}r[   r\   Úcases)r^   r_   r`   rg   ra   rb   r®   r¥   r˜   r™   rl   ra   rc   rm   )zN%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} == %(py9)s
{%(py9)s = %(py6)s(%(py7)s)
})r^   rf   rk   ra   ri   r¯   r  r  )rµ   r¶   r   r   rï   rj   rs   rt   ru   rv   rw   rx   rz   r{   rq   r   r   rr   r[   r}   r|   r   rW   )rR   rT   rH  r?  rj   rî   rˆ   r‰   r„   r†   r‡   r\   rƒ   r¿   r…   rÂ   rd   r�   rÐ   rŒ   rÄ   rù   r  s                          r   Ú:test_every_catalog_refusal_is_audited_with_its_reason_coderI  K  s“  € ð  ¨<ÀÈaØ.ñ0àð	
ð  |¸e¸WÈqØ/ñ1à ð	
ð  }¸bÈ1Ø.ñ0à!ð	
ð ¨¸rÈAØ1ñ3àð	
ð  |¸RÈ#Ø1ñ3àð	
ð  |¸VÈaØ0ñ2àð	
ð52€EðB  %ó 8Ñˆ�Ü�]‰]œ>Ó*ð 	T¨gÜ °:ÈÕS÷	Tà�}‰}Ð7ˆ}×(Ñ(Ð7Ð(¨KÑ7×7×7Õ7Ð(¨K×7×7×7×7×7Ñ7ˆw×7×7Ó7ˆw×7×7Ô7ˆ}×7×7Ò7Ð(×7×7×7×7×7Ð7¨K×7×7Ó7¨K×7×7×7×7×7×7×7ð8ð
 �_‰_œZ´>×3RÑ3RÔSÓT€FÜˆv‹;Ð$œ#˜e›*Ð$ˆ;˜*Ñ$×$×$Ö$ˆ;˜*×$×$×$×$×$Ñ$Œ3×$×$Ó$Œ3×$×$×$×$×$Ò$ˆv×$×$Ó$ˆv×$×$Ô$ˆ;×$×$×$×$×$Ð$œ#×$×$Ó$œ#×$×$×$×$×$Ò$˜e×$×$Ó$˜e×$×$Ô$˜*×$×$×$×$×$×$Ó$Ø%+Ö,˜EˆE�K‹KÐ,ÐYÐ,ÐSX×0YÁÀÀK²Ð0YÐYÑ0YÐ,Ð0YÑY×Y×YÕYÐ,Ð0Y×Y×YÓYÐ,×Y×YÒYÐ0Y×Y×Y×Y×Y×Y×YÓYØ&,Ö-˜UˆE�L‹LÐ-Ð<Ð-°)°Ð<Ð-°Ñ<×<×<Õ<Ð-°×<×<Ó<Ð-×<×<Ò<°×<×<×<×<×<×<Ó<Ø(.Ö/˜uˆE�N‹NÐ/Ð@Ð/°K°=Ð@Ð/°=Ñ@×@×@Õ@Ð/°=×@×@Ó@Ð/×@×@Ò@°=×@×@×@×@×@×@Ó@Ø+1Ö2 %�—“Ð2ÐAÐ2Œ3Ð2Ó3ÐA´s¸5³zÐAÐ3°zÑA×A×AÖAÐ3°z×A×A×A×A×AÑAŒ3×A×AÓAŒ3×A×AÔAÐ2×A×AÒAÐ3×A×A×A×A×AÐA´s×A×AÓA´s×A×A×A×A×AÒA¸5×A×AÓA¸5×A×AÔA°z×A×A×A×A×A×AÖA÷	Tñ 	Tüò -ùÓ0YùÚ-ùÚ/ùÚ2s*   ÁZ9Í[Í4[Ð [Ò[Ô*[Ú9[	)r6   úpytest.MonkeyPatchr   úlist[list[str]])r;   r   r6   rJ  r   r'   )r   r   r   zlist[tuple[str, str]])r   r   r   r'   )r   r   )r   r   )
r‚   r   rR   r   rj   r'   rW   r'   r   r   )r¹   r   r7   rK  r=   r'   r   r   )r¹   r   r7   rK  r   r   )rR   r   r   r   )
rR   r   rT   r   rC   r'   rj   r'   r   r   )rR   r   rT   r   rß   r'   r   r   )rR   r   rT   r   r   r   )rT   r   r   r   )rR   r   rT   r   rà   r3   r   r   )r   r   )rC   r'   r9  Úboolr   r   )?r#   Ú
__future__r   Úbuiltinsru   Ú_pytest.assertion.rewriteÚ	assertionÚrewriters   r5   Úpathlibr   rµ   Úcyberbrain26.agents.engagementr   r   r   r   r	   r
   Ú#cyberbrain26.agents.pentest_catalogr   r   r   Ú0cyberbrain26.execution_plane.bubblewrap_providerr   r   Ú!cyberbrain26.security_plane.auditr   r   r   Ú	Exceptionr   Úfixturer7   r=   rD   rF   rR   rT   r�   ÚmarkrÇ   rÑ   r×   ræ   Úparametrizerð   rú   r  r  r  r  r  r   r$  r+  r2  r5  r8  r@  rC  rI  r0   r   r   ú<module>r[     s¿  ðñõ" #ç  „ ƒÝ ã ÷÷ ÷ñ ÷
÷ SÑ Rô�Iô ð ‡�òó ðð4 ‡�òó ðó"ó&ð
 ‡�òó ðð ‡�òó ðð
$Øð$à'ð$ð ð$ð ð	$ð
 
ó$ð8 ‡�×Ñð+3Ø!ð+3à(ð+3ð ð+3ð 
ò	+3ó ð+3ð\ ‡�×Ñð"7Ø!ð"7à(ð"7ð ð"7ð 
ò	"7ó ð"7ðJ ‡�×Ñð"
Ø!ð"
à(ð"
ð 
ò"
ó ð"
ðX9Ø'ð9à	ó9ð* ‡�×ÑØòó	ðPØ'ðPàðPð ðPð ð	Pð
 
òPó	ðPð$ ‡�×ÑØòóð[Ø'ð[àð[ð ð[ð 
ò	[óð[ð$/Ø'ð/à	ó/ðYØ'ðYØ4<ðYà	óYð"UØðUà	óUð4 ‡�×Ñ˜ 3¨¨T°A°3¸Ð"=Ó>ð\Ø'ð\Ø4<ð\ØEKð\à	ò\ó ?ð\ð,0Ø'ð0à	ó0ó
ó8óPðCØ'ðCà	óCó,8ó"ð ‡�×ÑØÚYóòTó	ðTð,2Ø'ð2à	ó2ð@1BØ'ð1BØ4<ð1Bà	ô1Br   