§
    Cý®j­M  ã                   ó¬   — d Z ddlZddlmc mZ ddlZddlZddl	Z	ddl
mZ ddlmZ ddlmZm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dS )uŠ  
Unit Tests for Optical Inventory Scanner & Hooded One Identify All (Doc 48 / Doc 43 P1-5)
==========================================================================================
Kiá»ƒm thá»­ cÃ¡c báº¥t biáº¿n kiáº¿n trÃºc:
- INV-UI-INVENTORY-ROW1: Ä�á»™ khá»›p tá»�a Ä‘á»™ Slot 0..11 trÃªn 2560x1440 vÃ  1920x1080 (Sai sá»‘ Delta = 0px).
- INV-NPC-01: Interlock an toÃ n vÃ¹ng Town/Hideout, fail-closed khi cÃ³ quÃ¡i váº­t.
- Full Inventory Detection: PhÃ¡t hiá»‡n chÃ­nh xÃ¡c tráº¡ng thÃ¡i tÃºi Ä‘á»“ Ä‘áº§y (>= 48/60 slots).
- Opcode 8 Emission: Gá»­i lá»‡nh EXECUTE_NPC_INTERACT_ROUTINE vá»›i mode 1 (IdentifyAll) khi tÃºi Ä‘áº§y táº¡i lÃ ng.
é    N)ÚImage)ÚOpticalInventoryScanner)ÚAutonomousLifecycleManagerÚLifecyclePhasec                  ó  — t          dd¬¦  «        } |                      dd¦  «        \  }}d}||k    }|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}||k    }|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d¦  «        \  }}d}||k    }|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}||k    }|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d¦  «        \  }	}
d}|	|k    }|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}|
|k    }|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d¦  «        \  }}d}||k    }|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}||k    }|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d¦  «        \  }}d}||k    }|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}||k    }|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S )uk   Kiá»ƒm tra Ä‘á»™ khá»›p tá»�a Ä‘á»™ 1440p so vá»›i Ground-Truth thá»±c Ä‘á»‹a táº¡i 0ms (Doc 48 Má»¥c 2.1).é 
  é   ©Úscreen_wÚscreen_hr   iÃ  ©ú==©z%(py0)s == %(py3)sÚc0_x©Úpy0Úpy3úassert %(py5)sÚpy5Ni6  Úc0_yé   i	  Úc1_xÚc1_yé   iÛ  Úc4_xÚc4_yé   iÅ	  Úc11_xÚc11_yÚc0_r4_xiN  Úc0_r4_y)
r   Úget_slot_centerÚ
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanation)Úscanner_1440r   r   Ú@py_assert2Ú@py_assert1Ú@py_format4Ú@py_format6r   r   r   r   r   r   r    r!   s                  ú<C:\Projects\AutoPOE2\tests\test_optical_inventory_scanner.pyÚ*test_optical_inventory_coordinates_scalingr1      s,  € å*°DÀ4ÐHÑHÔH€Lð ×-Ò-¨a°Ñ3Ô3�J€Dˆ$ØÐˆ4�4Š<ÐÐÐÕÔÐÐÐÐˆ4�4ÐÑÔÐÕÔÑÔÐÐÕÔˆ4ÑÔÐÕÔˆ4ÑÔÐÐÕÔ�4ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØÐˆ4�3Š;ÐÐÐÕÔÐÐÐÐˆ4�3ÐÑÔÐÕÔÑÔÐÐÕÔˆ4ÑÔÐÕÔˆ4ÑÔÐÐÕÔ�3ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐð ×-Ò-¨a°Ñ3Ô3�J€Dˆ$ØÐˆ4�4Š<ÐÐÐÕÔÐÐÐÐˆ4�4ÐÑÔÐÕÔÑÔÐÐÕÔˆ4ÑÔÐÕÔˆ4ÑÔÐÐÕÔ�4ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØÐˆ4�3Š;ÐÐÐÕÔÐÐÐÐˆ4�3ÐÑÔÐÕÔÑÔÐÐÕÔˆ4ÑÔÐÕÔˆ4ÑÔÐÐÕÔ�3ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐð ×-Ò-¨a°Ñ3Ô3�J€Dˆ$ØÐˆ4�4Š<ÐÐÐÕÔÐÐÐÐˆ4�4ÐÑÔÐÕÔÑÔÐÐÕÔˆ4ÑÔÐÕÔˆ4ÑÔÐÐÕÔ�4ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØÐˆ4�3Š;ÐÐÐÕÔÐÐÐÐˆ4�3ÐÑÔÐÕÔÑÔÐÐÕÔˆ4ÑÔÐÕÔˆ4ÑÔÐÐÕÔ�3ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐð  ×/Ò/°°AÑ6Ô6�L€Eˆ5ØÐˆ5�DŠ=ÐÐÐÕÔÐÐÐÐˆ5�DÐÑÔÐÕÔÑÔÐÐÕÔˆ5ÑÔÐÕÔˆ5ÑÔÐÐÕÔ�DÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØÐˆ5�CŠ<ÐÐÐÕÔÐÐÐÐˆ5�CÐÑÔÐÕÔÑÔÐÐÕÔˆ5ÑÔÐÕÔˆ5ÑÔÐÐÕÔ�CÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐð $×3Ò3°A°qÑ9Ô9Ñ€GˆWØÐˆ7�dŠ?ÐÐÐÕÔÐÐÐÐˆ7�dÐÑÔÐÕÔÑÔÐÐÕÔˆ7ÑÔÐÕÔˆ7ÑÔÐÐÕÔ�dÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØÐˆ7�dŠ?ÐÐÐÕÔÐÐÐÐˆ7�dÐÑÔÐÕÔÑÔÐÐÕÔˆ7ÑÔÐÕÔˆ7ÑÔÐÐÕÔ�dÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐó    c            	      ó¦  — t          dd¬¦  «        } t          j        ¦   «         5 }t          j                             |d¦  «        }t          j        ddd¦  «        }t          d¦  «        D ]_}|  	                    |d	¦  «        \  }}t          d
d¦  «        D ]3}t          d
d¦  «        D ] }| 
                    ||z   ||z   fd¦  «         Œ!Œ4Œ`|                     |¦  «         |                      |¦  «        }	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 ¦   «         }g d¢}
||
k    }|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dd¦  «         dS # 1 swxY w Y   dS )u=   Kiá»ƒm tra phÃ¡t hiá»‡n Waystone trÃªn áº£nh thá»±c nghiá»‡m.r   r	   r
   ztest_inv.pngÚRGB©r   r	   ©é   r7   r7   é   r   iñÿÿÿé   ©éx   én   éZ   r   )z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sÚlenÚfound©r   Úpy1r   Úpy6úassert %(py8)sÚpy8Nc                 ó   — g | ]
}|d          ‘ŒS )r   © )Ú.0Úfs     r0   ú
<listcomp>zCtest_optical_inventory_row1_waystones_detection.<locals>.<listcomp>F   s   € Ð*Ð*Ð*˜q�a˜”dÐ*Ð*Ð*r2   )r   r   é   é   r   r   Ú
found_colsr   r   r   )r   ÚtempfileÚTemporaryDirectoryÚosÚpathÚjoinr   ÚnewÚranger"   ÚputpixelÚsaveÚscan_row1_waystonesr>   r#   r$   r%   r&   r'   r(   r)   r*   )ÚscannerÚtmpdirÚimg_pathÚimgÚcolÚcxÚcyÚdxÚdyr?   r,   Ú@py_assert5Ú@py_assert4Ú@py_format7Ú@py_format9rL   r-   r.   r/   s                      r0   Ú/test_optical_inventory_row1_waystones_detectionrd   3   sZ  € å%¨t¸dÐCÑCÔC€Gå	Ô	$Ñ	&Ô	&ð -¨&Ý”7—<’< ¨Ñ7Ô7ˆÝŒi˜˜|¨YÑ7Ô7ˆõ ˜‘8”8ð 	Eð 	EˆCØ×,Ò,¨S°!Ñ4Ô4‰FˆB�Ý˜C ‘n”nð Eð E�Ý  R™.œ.ð Eð E�BØ—L’L " r¡'¨2°©7Ð!3°^ÑDÔDÐDÐDðEðEð 	�Š�ÑÔÐà×+Ò+¨HÑ5Ô5ˆÝ�5‰zŒzÐ˜QÐˆz˜QŠÐÐÐÕÔÐÐÐÐˆz˜QÐÑÔÐÕÔÑÔÐÐÕÔ�sÑÔÐÕÔ�sÑÔÐÐÐÕÔÑÔÐÐÕÔ�5ÑÔÐÕÔ�5ÑÔÐÐÕÔˆzÑÔÕÔ˜QÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐØ*Ð* EÐ*Ñ*Ô*ˆ
Ø,˜_˜_Ð,ˆz˜_Ò,Ð,Ð,Ð,Õ,Ô,Ð,Ð,Ð,Ð,ˆz˜_Ð,Ñ,Ô,Ð,Õ,Ô,Ñ,Ô,Ð,Ð,Õ,Ô,ˆzÑ,Ô,Ð,Õ,Ô,ˆzÑ,Ô,Ð,Ð,Õ,Ô,˜_Ñ,Ô,Ð,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,ð!-ð -ð -ñ -ô -ð -ð -ð -ð -ð -ð -ð -øøøð -ð -ð -ð -ð -ð -s   ¥JKËK
ËK
c            
      óx  — t          dd¬¦  «        } t          j        ¦   «         5 }t          j                             |d¦  «        }t          j        ddd¦  «        }d}t          d	¦  «        D ]|}t          d
¦  «        D ]j}|dk     rb|  	                    ||¦  «        \  }}t          dd¦  «        D ]3}	t          dd¦  «        D ] }
| 
                    ||	z   ||
z   fd¦  «         Œ!Œ4|dz  }ŒkŒ}|                     |¦  «         |                      |¦  «        }|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         }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         }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         }d}||u }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t!          t          j        |¦  «        ¦  «        ‚dx}x}}ddd¦  «         dS # 1 swxY w Y   dS )uV   Kiá»ƒm tra phÃ¡t hiá»‡n tÃºi Ä‘á»“ Ä‘áº§y (is_full == True khi >= 48 slots cÃ³ Ä‘á»“).r   r	   r
   úfull_inv.pngr4   r5   r6   r   r8   é   é2   éöÿÿÿr   ©éd   rk   rk   r   Útotal_slotsé<   r   ©z%(py1)s == %(py4)s©rA   Úpy4úassert %(py6)srB   NÚoccupied_countÚempty_counté
   Úis_fullT©Úis©z%(py1)s is %(py4)s)r   rM   rN   rO   rP   rQ   r   rR   rS   r"   rT   rU   Úscan_full_inventoryr#   r$   r(   r)   r*   )rW   rX   rY   rZ   ÚoccupiedÚrÚcr\   r]   r^   r_   ÚresÚ@py_assert0Ú@py_assert3r,   Ú@py_format5rb   s                    r0   Ú%test_optical_inventory_full_detectionr�   J   s2  € å%¨t¸dÐCÑCÔC€Gå	Ô	$Ñ	&Ô	&ð &¨&Ý”7—<’< ¨Ñ7Ô7ˆÝŒi˜˜|¨YÑ7Ô7ˆð ˆÝ�q‘”ð 	"ð 	"ˆAÝ˜2‘Y”Yð "ð "�Ø˜b’=�=Ø$×4Ò4°Q¸Ñ:Ô:‘F�B˜Ý# C¨™nœnð Nð N˜Ý"'¨¨R¡.¤.ð Nð N˜BØŸLšL¨"¨r©'°2¸±7Ð);¸_ÑMÔMÐMÐMðNà ‘M�Høð"ð 	�Š�ÑÔÐà×)Ò)¨(Ñ3Ô3ˆØ�=Ô!Ð' RÐ'Ð! RÒ'Ð'Ð'Ð'Õ'Ô'Ð'Ð'Ð'Ð'Ð! RÐ'Ñ'Ô'Õ'Ô'Ð!Ñ'Ô'Õ'Ô' RÑ'Ô'Ð'Ð'Ñ'Ð'Ð'Ð'Ð'Ð'Ñ'Ð'Õ'Õ'Ô'Ð'Ñ'Ô'Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'ØÐ#Ô$Ð*¨Ð*Ð$¨Ò*Ð*Ð*Ð*Õ*Ô*Ð*Ð*Ð*Ð*Ð$¨Ð*Ñ*Ô*Õ*Ô*Ð$Ñ*Ô*Õ*Ô*¨Ñ*Ô*Ð*Ð*Ñ*Ð*Ð*Ð*Ð*Ð*Ñ*Ð*Õ*Õ*Ô*Ð*Ñ*Ô*Ñ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ø�=Ô!Ð' RÐ'Ð! RÒ'Ð'Ð'Ð'Õ'Ô'Ð'Ð'Ð'Ð'Ð! RÐ'Ñ'Ô'Õ'Ô'Ð!Ñ'Ô'Õ'Ô' RÑ'Ô'Ð'Ð'Ñ'Ð'Ð'Ð'Ð'Ð'Ñ'Ð'Õ'Õ'Ô'Ð'Ñ'Ô'Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ø�9Œ~Ð% Ð%ˆ~ Ð%Ð%Ð%Ð%Õ%Ô%Ð%Ð%Ð%Ð%ˆ~ Ð%Ñ%Ô%Õ%Ô%ˆ~Ñ%Ô%Õ%Ô% Ñ%Ô%Ð%Ð%Ñ%Ð%Ð%Ð%Ð%Ð%Ñ%Ð%Õ%Õ%Ô%Ð%Ñ%Ô%Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%Ð%ð+&ð &ð &ñ &ô &ð &ð &ð &ð &ð &ð &ð &øøøð &ð &ð &ð &ð &ð &s   ¥K=L/Ì/L3Ì6L3c            
      ó�  — t          dd¬¦  «        }  G d„ d¦  «        } |¦   «         }t          j        ¦   «         5 }t          j                             |d¦  «        }t          j        ddd	¦  «        }d
}t          d¦  «        D ]|}t          d¦  «        D ]j}|dk     rb|  	                    ||¦  «        \  }	}
t          dd¦  «        D ]3}t          dd¦  «        D ] }| 
                    |	|z   |
|z   fd¦  «         Œ!Œ4|dz  }ŒkŒ}|                     |¦  «         |                      ||dd
¬¦  «        }|d         }d}||u }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t!          t          j        |¦  «        ¦  «        ‚dx}x}}d}|d         }||v }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t!          t          j        |¦  «        ¦  «        ‚d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        |¦  «        t          j        |¦  «        d"œz  }d#d$|iz  }t!          t          j        |¦  «        ¦  «        ‚dx}x}}|                      ||d%d¬¦  «        }|d         }d}||u }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t!          t          j        |¦  «        ¦  «        ‚dx}x}}d&}|d         }||v }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t!          t          j        |¦  «        ¦  «        ‚d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        |¦  «        t          j        |¦  «        d"œz  }d#d$|iz  }t!          t          j        |¦  «        ¦  «        ‚dx}x}}|                      ||d%d
¬¦  «        }|d         }d'}||u }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t!          t          j        |¦  «        ¦  «        ‚dx}x}}|d(         }d'}||u }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t!          t          j        |¦  «        ¦  «        ‚dx}x}}|d)         }d'}||u }|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        |¦  «        d"œz  }d#d$|iz  }t!          t          j        |¦  «        ¦  «        ‚dx}x}}ddd¦  «         dS # 1 swxY w Y   dS )-uv   Kiá»ƒm tra báº¥t biáº¿n INV-NPC-01: Chá»‰ kÃ­ch hoáº¡t Identify All táº¡i Town/Hideout vÃ  khi khÃ´ng cÃ³ quÃ¡i váº­t.r   r	   r
   c                   ó2   — e Zd Zd„ Zddedededed	ef
d
„ZdS )ú@test_hooded_one_identify_trigger_town_safety.<locals>.MockBridgec                 ó   — d | _         d S ©N©Ú	last_call©Úselfs    r0   Ú__init__zItest_hooded_one_identify_trigger_town_safety.<locals>.MockBridge.__init__k   ó   € Ø!ˆDŒNˆNˆNr2   r   r   é˜:  Únpc_idÚmodeÚ
option_idxÚ
timeout_msÚreturnc                 ó   — ||||f| _         dS ©NTr‡   ©rŠ   rŽ   r�   r�   r‘   s        r0   Úsend_npc_interactzRtest_hooded_one_identify_trigger_town_safety.<locals>.MockBridge.send_npc_interactn   ó   € Ø$ d¨J¸
ÐCˆDŒNØ�4r2   N©r   r   r   r�   ©Ú__name__Ú
__module__Ú__qualname__r‹   ÚintÚboolr–   rF   r2   r0   Ú
MockBridger„   j   ób   € € € € € ð	"ð 	"ð 	"ð	ð 	¨Cð 	¸3ð 	ÐPSð 	Ðehð 	Ðuyð 	ð 	ð 	ð 	ð 	ð 	r2   rŸ   zinv.pngr4   r5   r6   r   r8   rg   é7   ri   r   rj   r   zMap Deserted©Ú	area_nameÚmonster_countÚ	triggeredFrv   rx   ro   rq   rB   Nzkhong phai la Town/HideoutÚerror©Úin©z%(py1)s in %(py4)s©z1%(py2)s
{%(py2)s = %(py0)s.last_call
} is %(py5)sÚmock_bridge©r   Úpy2r   úassert %(py7)sÚpy7úShoreline HideoutzVi pham INV-NPC-01TÚ
is_in_townru   ©r   r   r   r�   r   ©z1%(py2)s
{%(py2)s = %(py0)s.last_call
} == %(py5)s)r   rM   rN   rO   rP   rQ   r   rR   rS   r"   rT   rU   Ú%check_and_trigger_hooded_one_identifyr#   r$   r(   r)   r*   rˆ   r%   r&   r'   )rW   rŸ   r«   rX   rY   rZ   rz   r{   r|   r\   r]   r^   r_   Ú
res_combatr~   r   r,   r€   rb   r-   ra   r/   Ú@py_format8Úres_monstersÚres_oks                            r0   Ú,test_hooded_one_identify_trigger_town_safetyr¹   f   sy	  € å%¨t¸dÐCÑCÔC€Gðð ð ð ð ñ ô ð ð �*‘,”,€Kå	Ô	$Ñ	&Ô	&ð &9¨&Ý”7—<’< ¨	Ñ2Ô2ˆÝŒi˜˜|¨YÑ7Ô7ˆàˆÝ�q‘”ð 	"ð 	"ˆAÝ˜2‘Y”Yð "ð "�Ø˜b’=�=Ø$×4Ò4°Q¸Ñ:Ô:‘F�B˜Ý# C¨™nœnð Nð N˜Ý"'¨¨R¡.¤.ð Nð N˜BØŸLšL¨"¨r©'°2¸±7Ð);¸_ÑMÔMÐMÐMðNà ‘M�Høð"ð 	�Š�ÑÔÐð ×BÒBØ�k¨^È1ð Cñ 
ô 
ˆ
ð ˜+Ô&Ð/¨%Ð/Ð&¨%Ð/Ð/Ð/Ð/Õ/Ô/Ð/Ð/Ð/Ð/Ð&¨%Ð/Ñ/Ô/Õ/Ô/Ð&Ñ/Ô/Õ/Ô/¨%Ñ/Ô/Ð/Ð/Ñ/Ð/Ð/Ð/Ð/Ð/Ñ/Ð/Õ/Õ/Ô/Ð/Ñ/Ô/Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ø+ÐB¨z¸'Ô/BÐBÐ+Ð/BÐBÐBÐBÐBÕBÔBÐBÐBÐBÐBÐ+Ð/BÐBÑBÔBÕBÔBÐ+ÑBÔBÕBÔBÐ/BÑBÔBÐBÐBÑBÐBÐBÐBÐBÐBÑBÐBÕBÕBÔBÐBÑBÔBÑBÔBÐBÐBÐBÐBÐBÐBÐBØÔ$Ð,¨Ð,Ð$¨Ð,Ð,Ð,Ð,Õ,Ô,Ð,Ð,Ð,Ð,Ð$¨Ð,Ñ,Ô,Ð,Õ,Ô,Ñ,Ô,Ð,Ð,Õ,Ô,ˆ{Ñ,Ô,Ð,Õ,Ô,ˆ{Ñ,Ô,Ð,Ð,Õ,Ô,Ð$Ñ,Ô,Õ,Ô,¨Ñ,Ô,Ð,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,ð ×DÒDØ�kÐ-@ÐPQð Eñ 
ô 
ˆð ˜KÔ(Ð1¨EÐ1Ð(¨EÐ1Ð1Ð1Ð1Õ1Ô1Ð1Ð1Ð1Ð1Ð(¨EÐ1Ñ1Ô1Õ1Ô1Ð(Ñ1Ô1Õ1Ô1¨EÑ1Ô1Ð1Ð1Ñ1Ð1Ð1Ð1Ð1Ð1Ñ1Ð1Õ1Õ1Ô1Ð1Ñ1Ô1Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ø#Ð< |°GÔ'<Ð<Ð#Ð'<Ð<Ð<Ð<Ð<Õ<Ô<Ð<Ð<Ð<Ð<Ð#Ð'<Ð<Ñ<Ô<Õ<Ô<Ð#Ñ<Ô<Õ<Ô<Ð'<Ñ<Ô<Ð<Ð<Ñ<Ð<Ð<Ð<Ð<Ð<Ñ<Ð<Õ<Õ<Ô<Ð<Ñ<Ô<Ñ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<ØÔ$Ð,¨Ð,Ð$¨Ð,Ð,Ð,Ð,Õ,Ô,Ð,Ð,Ð,Ð,Ð$¨Ð,Ñ,Ô,Ð,Õ,Ô,Ñ,Ô,Ð,Ð,Õ,Ô,ˆ{Ñ,Ô,Ð,Õ,Ô,ˆ{Ñ,Ô,Ð,Ð,Õ,Ô,Ð$Ñ,Ô,Õ,Ô,¨Ñ,Ô,Ð,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,ð ×>Ò>Ø�kÐ-@ÐPQð ?ñ 
ô 
ˆð �kÔ"Ð* dÐ*Ð" dÐ*Ð*Ð*Ð*Õ*Ô*Ð*Ð*Ð*Ð*Ð" dÐ*Ñ*Ô*Õ*Ô*Ð"Ñ*Ô*Õ*Ô* dÑ*Ô*Ð*Ð*Ñ*Ð*Ð*Ð*Ð*Ð*Ñ*Ð*Õ*Õ*Ô*Ð*Ñ*Ô*Ñ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ø�lÔ#Ð+ tÐ+Ð# tÐ+Ð+Ð+Ð+Õ+Ô+Ð+Ð+Ð+Ð+Ð# tÐ+Ñ+Ô+Õ+Ô+Ð#Ñ+Ô+Õ+Ô+ tÑ+Ô+Ð+Ð+Ñ+Ð+Ð+Ð+Ð+Ð+Ñ+Ð+Õ+Õ+Ô+Ð+Ñ+Ô+Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ø�iÔ Ð( DÐ(Ð  DÐ(Ð(Ð(Ð(Õ(Ô(Ð(Ð(Ð(Ð(Ð  DÐ(Ñ(Ô(Õ(Ô(Ð Ñ(Ô(Õ(Ô( DÑ(Ô(Ð(Ð(Ñ(Ð(Ð(Ð(Ð(Ð(Ñ(Ð(Õ(Õ(Ô(Ð(Ñ(Ô(Ñ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(ØÔ$Ð8Ð(8Ð8Ð$Ð(8Ò8Ð8Ð8Ð8Õ8Ô8Ð8Ð8Ð8Ð8Ð$Ð(8Ð8Ñ8Ô8Ð8Õ8Ô8Ñ8Ô8Ð8Ð8Õ8Ô8ˆ{Ñ8Ô8Ð8Õ8Ô8ˆ{Ñ8Ô8Ð8Ð8Õ8Ô8Ð$Ñ8Ô8Õ8Ô8Ð(8Ñ8Ô8Ð8Ð8Ñ8Ð8Ð8Ð8Ð8Ð8Ñ8Ð8Õ8Õ8Ô8Ð8Ñ8Ô8Ñ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8Ð8ðM&9ð &9ð &9ñ &9ô &9ð &9ð &9ð &9ð &9ð &9ð &9ð &9øøøð &9ð &9ð &9ð &9ð &9ð &9s   ¼[2\;Ü;\?Ý\?c            
      ó  —  G d„ d¦  «        }  | ¦   «         }t          |¬¦  «        }d|_        d|_        t          j        ¦   «         5 }t
          j                             |d¦  «        }t          j	        ddd	¦  «        }t          d
¦  «        D ]v}t          d¦  «        D ]d}|j                             ||¦  «        \  }}	t          dd¦  «        D ]3}
t          dd¦  «        D ] }|                     ||
z   |	|z   fd¦  «         Œ!Œ4ŒeŒw|                     |¦  «         |                     |¦  «        }|d         }d}||u }|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        |¦  «        dœz  }dd|iz  }t'          t!          j        |¦  «        ¦  «        ‚dx}x}}ddd¦  «         dS # 1 swxY w Y   dS )uO   Kiá»ƒm tra tÃ­ch há»£p Hooded One Identify All vÃ o AutonomousLifecycleManager.c                   ó2   — e Zd Zd„ Zddedededed	ef
d
„ZdS )úDtest_autonomous_lifecycle_hooded_one_integration.<locals>.MockBridgec                 ó   — d | _         d S r†   r‡   r‰   s    r0   r‹   zMtest_autonomous_lifecycle_hooded_one_integration.<locals>.MockBridge.__init__    rŒ   r2   r   r   r�   rŽ   r�   r�   r‘   r’   c                 ó   — ||||f| _         dS r”   r‡   r•   s        r0   r–   zVtest_autonomous_lifecycle_hooded_one_integration.<locals>.MockBridge.send_npc_interact£   r—   r2   Nr˜   r™   rF   r2   r0   rŸ   r¼   Ÿ   r    r2   rŸ   )Úcore_bridger°   Trf   r4   r5   r6   r8   rg   ri   r   ©r;   r;   r;   r¥   rv   rx   ro   rq   rB   Nr²   r   r³   Úbridger¬   r®   r¯   )r   Úcurrent_area_namer±   rM   rN   rO   rP   rQ   r   rR   rS   Úinventory_scannerr"   rT   rU   Útrigger_hooded_one_identifyr#   r$   r(   r)   r*   rˆ   r%   r&   r'   )rŸ   rÁ   ÚmanagerrX   rY   rZ   r{   r|   r\   r]   r^   r_   r}   r~   r   r,   r€   rb   r-   ra   r/   r¶   s                         r0   Ú0test_autonomous_lifecycle_hooded_one_integrationrÆ   �   sV  € ðð ð ð ð ñ ô ð ð ˆZ‰\Œ\€FÝ(°VÐ<Ñ<Ô<€GØ 3€GÔØ€GÔå	Ô	$Ñ	&Ô	&ð 4¨&Ý”7—<’< ¨Ñ7Ô7ˆÝŒi˜˜|¨YÑ7Ô7ˆÝ�q‘”ð 	Jð 	JˆAÝ˜2‘Y”Yð Jð J�Ø Ô2×BÒBÀ1ÀaÑHÔH‘��BÝ  R™.œ.ð Jð J�BÝ# C¨™nœnð Jð J˜ØŸš b¨2¡g¨r°B©wÐ%7¸ÑIÔIÐIÐIðJðJðJð
 	�Š�ÑÔÐà×1Ò1°(Ñ;Ô;ˆØ�;ÔÐ' 4Ð'Ð 4Ð'Ð'Ð'Ð'Õ'Ô'Ð'Ð'Ð'Ð'Ð 4Ð'Ñ'Ô'Õ'Ô'ÐÑ'Ô'Õ'Ô' 4Ñ'Ô'Ð'Ð'Ñ'Ð'Ð'Ð'Ð'Ð'Ñ'Ð'Õ'Õ'Ô'Ð'Ñ'Ô'Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'ØÔÐ3Ð#3Ð3ÐÐ#3Ò3Ð3Ð3Ð3Õ3Ô3Ð3Ð3Ð3Ð3ÐÐ#3Ð3Ñ3Ô3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3ˆvÑ3Ô3Ð3Õ3Ô3ˆvÑ3Ô3Ð3Ð3Õ3Ô3ÐÑ3Ô3Õ3Ô3Ð#3Ñ3Ô3Ð3Ð3Ñ3Ð3Ð3Ð3Ð3Ð3Ñ3Ð3Õ3Õ3Ô3Ð3Ñ3Ô3Ñ3Ô3Ð3Ð3Ð3Ð3Ð3Ð3Ð3ð4ð 4ð 4ñ 4ô 4ð 4ð 4ð 4ð 4ð 4ð 4ð 4øøøð 4ð 4ð 4ð 4ð 4ð 4s   Á	H*J Ê JÊJc            
      óö  — t          dd¬¦  «        }  G d„ d¦  «        } |¦   «         }t          j        ¦   «         5 }t          j                             |d¦  «        }t          j        ddd	¦  «        }d
}t          d¦  «        D ]|}t          d¦  «        D ]j}|dk     rb|  	                    ||¦  «        \  }	}
t          dd¦  «        D ]3}t          dd¦  «        D ] }| 
                    |	|z   |
|z   fd¦  «         Œ!Œ4|dz  }ŒkŒ}|                     |¦  «         |                      |¦  «        }|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         }d}||u }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t!          t          j        |¦  «        ¦  «        ‚dx}x}}|                      ||dd
¬¦  «        }|d         }d}||u }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t!          t          j        |¦  «        ¦  «        ‚dx}x}}|d         }d}||u }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t!          t          j        |¦  «        ¦  «        ‚dx}x}}d }|d!         }||v }|slt          j        d"|fd#||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t!          t          j        |¦  «        ¦  «        ‚d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        |¦  «        t          j        |¦  «        d&œz  }d'd(|iz  }t!          t          j        |¦  «        ¦  «        ‚dx}x}}t          j                             |d)¦  «        }t          j        ddd	¦  «        }d
}t          d¦  «        D ]|}t          d¦  «        D ]j}|d*k     rb|  	                    ||¦  «        \  }	}
t          dd¦  «        D ]3}t          dd¦  «        D ] }| 
                    |	|z   |
|z   fd¦  «         Œ!Œ4|dz  }ŒkŒ}|                     |¦  «         |                      |¦  «        }|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         }d+}||u }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t!          t          j        |¦  «        ¦  «        ‚dx}x}}|                      ||dd
¬¦  «        }|d         }d+}||u }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t!          t          j        |¦  «        ¦  «        ‚dx}x}}|d         }d+}||u }|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        |¦  «        d&œz  }d'd(|iz  }t!          t          j        |¦  «        ¦  «        ‚dx}x}}ddd¦  «         dS # 1 swxY w Y   dS ).ux   Kiá»ƒm tra chÃ­nh xÃ¡c ngÆ°á»¡ng biÃªn: 47 slots (ChÆ°a Ä‘áº§y, khÃ´ng kÃ­ch hoáº¡t) vs 48 slots (Ä�áº§y, kÃ­ch hoáº¡t).r   r	   r
   c                   ó2   — e Zd Zd„ Zddedededed	ef
d
„ZdS )ú<test_optical_inventory_boundary_47_vs_48.<locals>.MockBridgec                 ó   — d | _         d S r†   r‡   r‰   s    r0   r‹   zEtest_optical_inventory_boundary_47_vs_48.<locals>.MockBridge.__init__Á   rŒ   r2   r   r   r�   rŽ   r�   r�   r‘   r’   c                 ó   — ||||f| _         dS r”   r‡   r•   s        r0   r–   zNtest_optical_inventory_boundary_47_vs_48.<locals>.MockBridge.send_npc_interactÄ   r—   r2   Nr˜   r™   rF   r2   r0   rŸ   rÉ   À   r    r2   rŸ   z
inv_47.pngr4   r5   r6   r   r8   rg   é/   ri   r   rÀ   r   rr   r   rn   ro   rq   rB   Nru   Frv   rx   r°   r¢   r¥   zTui do chua day (47/60 o)r¦   r§   r©   rª   r«   r¬   r®   r¯   z
inv_48.pngé0   Tr²   r³   )r   rM   rN   rO   rP   rQ   r   rR   rS   r"   rT   rU   ry   r#   r$   r(   r)   r*   r´   rˆ   r%   r&   r'   )rW   rŸ   r«   rX   Úimg_47_pathÚimg_47rz   r{   r|   r\   r]   r^   r_   Úres_47r~   r   r,   r€   rb   Ú
trigger_47r-   ra   r/   r¶   Úimg_48_pathÚimg_48Úres_48Ú
trigger_48s                               r0   Ú(test_optical_inventory_boundary_47_vs_48rÖ   ¼   sÞ
  € å%¨t¸dÐCÑCÔC€Gðð ð ð ð ñ ô ð ð �*‘,”,€Kå	Ô	$Ñ	&Ô	&ð 29¨&å”g—l’l 6¨<Ñ8Ô8ˆÝ”˜5 ,°	Ñ:Ô:ˆØˆÝ�q‘”ð 	"ð 	"ˆAÝ˜2‘Y”Yð "ð "�Ø˜b’=�=Ø$×4Ò4°Q¸Ñ:Ô:‘F�B˜Ý# C¨™nœnð Qð Q˜Ý"'¨¨R¡.¤.ð Qð Q˜BØ"ŸOšO¨R°"©W°b¸2±gÐ,>ÀÑPÔPÐPÐPðQà ‘M�Høð"ð 	�Š�KÑ Ô Ð à×,Ò,¨[Ñ9Ô9ˆØÐ&Ô'Ð-¨2Ð-Ð'¨2Ò-Ð-Ð-Ð-Õ-Ô-Ð-Ð-Ð-Ð-Ð'¨2Ð-Ñ-Ô-Õ-Ô-Ð'Ñ-Ô-Õ-Ô-¨2Ñ-Ô-Ð-Ð-Ñ-Ð-Ð-Ð-Ð-Ð-Ñ-Ð-Õ-Õ-Ô-Ð-Ñ-Ô-Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ø�iÔ Ð) EÐ)Ð  EÐ)Ð)Ð)Ð)Õ)Ô)Ð)Ð)Ð)Ð)Ð  EÐ)Ñ)Ô)Õ)Ô)Ð Ñ)Ô)Õ)Ô) EÑ)Ô)Ð)Ð)Ñ)Ð)Ð)Ð)Ð)Ð)Ñ)Ð)Õ)Õ)Ô)Ð)Ñ)Ô)Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)à×BÒBØ˜Ð0CÐSTð Cñ 
ô 
ˆ
ð ˜+Ô&Ð/¨%Ð/Ð&¨%Ð/Ð/Ð/Ð/Õ/Ô/Ð/Ð/Ð/Ð/Ð&¨%Ð/Ñ/Ô/Õ/Ô/Ð&Ñ/Ô/Õ/Ô/¨%Ñ/Ô/Ð/Ð/Ñ/Ð/Ð/Ð/Ð/Ð/Ñ/Ð/Õ/Õ/Ô/Ð/Ñ/Ô/Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ø˜)Ô$Ð-¨Ð-Ð$¨Ð-Ð-Ð-Ð-Õ-Ô-Ð-Ð-Ð-Ð-Ð$¨Ð-Ñ-Ô-Õ-Ô-Ð$Ñ-Ô-Õ-Ô-¨Ñ-Ô-Ð-Ð-Ñ-Ð-Ð-Ð-Ð-Ð-Ñ-Ð-Õ-Õ-Ô-Ð-Ñ-Ô-Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ø*ÐA¨j¸Ô.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ÐAÑAÐAÕAÕAÔAÐAÑAÔAÑAÔAÐAÐAÐAÐAÐAÐAÐAØÔ$Ð,¨Ð,Ð$¨Ð,Ð,Ð,Ð,Õ,Ô,Ð,Ð,Ð,Ð,Ð$¨Ð,Ñ,Ô,Ð,Õ,Ô,Ñ,Ô,Ð,Ð,Õ,Ô,ˆ{Ñ,Ô,Ð,Õ,Ô,ˆ{Ñ,Ô,Ð,Ð,Õ,Ô,Ð$Ñ,Ô,Õ,Ô,¨Ñ,Ô,Ð,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,õ ”g—l’l 6¨<Ñ8Ô8ˆÝ”˜5 ,°	Ñ:Ô:ˆØˆÝ�q‘”ð 	"ð 	"ˆAÝ˜2‘Y”Yð "ð "�Ø˜b’=�=Ø$×4Ò4°Q¸Ñ:Ô:‘F�B˜Ý# C¨™nœnð Qð Q˜Ý"'¨¨R¡.¤.ð Qð Q˜BØ"ŸOšO¨R°"©W°b¸2±gÐ,>ÀÑPÔPÐPÐPðQà ‘M�Høð"ð 	�Š�KÑ Ô Ð à×,Ò,¨[Ñ9Ô9ˆØÐ&Ô'Ð-¨2Ð-Ð'¨2Ò-Ð-Ð-Ð-Õ-Ô-Ð-Ð-Ð-Ð-Ð'¨2Ð-Ñ-Ô-Õ-Ô-Ð'Ñ-Ô-Õ-Ô-¨2Ñ-Ô-Ð-Ð-Ñ-Ð-Ð-Ð-Ð-Ð-Ñ-Ð-Õ-Õ-Ô-Ð-Ñ-Ô-Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ø�iÔ Ð( DÐ(Ð  DÐ(Ð(Ð(Ð(Õ(Ô(Ð(Ð(Ð(Ð(Ð  DÐ(Ñ(Ô(Õ(Ô(Ð Ñ(Ô(Õ(Ô( DÑ(Ô(Ð(Ð(Ñ(Ð(Ð(Ð(Ð(Ð(Ñ(Ð(Õ(Õ(Ô(Ð(Ñ(Ô(Ñ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(à×BÒBØ˜Ð0CÐSTð Cñ 
ô 
ˆ
ð ˜+Ô&Ð.¨$Ð.Ð&¨$Ð.Ð.Ð.Ð.Õ.Ô.Ð.Ð.Ð.Ð.Ð&¨$Ð.Ñ.Ô.Õ.Ô.Ð&Ñ.Ô.Õ.Ô.¨$Ñ.Ô.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ø˜)Ô$Ð,¨Ð,Ð$¨Ð,Ð,Ð,Ð,Õ,Ô,Ð,Ð,Ð,Ð,Ð$¨Ð,Ñ,Ô,Õ,Ô,Ð$Ñ,Ô,Õ,Ô,¨Ñ,Ô,Ð,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,ØÔ$Ð8Ð(8Ð8Ð$Ð(8Ò8Ð8Ð8Ð8Õ8Ô8Ð8Ð8Ð8Ð8Ð$Ð(8Ð8Ñ8Ô8Ð8Õ8Ô8Ñ8Ô8Ð8Ð8Õ8Ô8ˆ{Ñ8Ô8Ð8Õ8Ô8ˆ{Ñ8Ô8Ð8Ð8Õ8Ô8Ð$Ñ8Ô8Õ8Ô8Ð(8Ñ8Ô8Ð8Ð8Ñ8Ð8Ð8Ð8Ð8Ð8Ñ8Ð8Õ8Õ8Ô8Ð8Ñ8Ô8Ñ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8Ð8ðe29ð 29ð 29ñ 29ô 29ð 29ð 29ð 29ð 29ð 29ð 29ð 29øøøð 29ð 29ð 29ð 29ð 29ð 29s   ¼`%a.á.a2á5a2c            
      óØ  — t          dd¬¦  «        } t          j        ¦   «         5 }t          j                             |d¦  «        }t          j        ddd¦  «        }t          d¦  «        D ]_}|  	                    |d	¦  «        \  }}t          d
d¦  «        D ]3}t          d
d¦  «        D ] }| 
                    ||z   ||z   fd¦  «         Œ!Œ4Œ`d	}	t          dd¦  «        D ]|}
t          d¦  «        D ]j}|	dk     rb|  	                    ||
¦  «        \  }}t          dd¦  «        D ]3}t          dd¦  «        D ] }| 
                    ||z   ||z   fd¦  «         Œ!Œ4|	dz  }	ŒkŒ}|                     |¦  «         |                      |¦  «        }|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         }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         }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         }d}||u }|slt          j        d |fd!||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t!          t          j        |¦  «        ¦  «        ‚dx}x}}|                      |¦  «        }|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$         }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%         }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&         }d}||u }|slt          j        d |fd!||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t!          t          j        |¦  «        ¦  «        ‚d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}}ddd¦  «         dS # 1 swxY w Y   dS )-uW   Kiá»ƒm tra phÃ¢n vÃ¹ng Row 0 (Reserved Zone) vÃ  Rows 1-4 (Loot Zone) theo Doc 63 SSoT.r   r	   r
   zpartition_test.pngr4   r5   r6   rK   r   iôÿÿÿé   r:   r   r8   rg   é-   ri   r   rj   Útotal_reserved_slotsr   rn   ro   rq   rB   NÚready_countrs   é	   Úhas_waystoneTrv   rx   Útotal_loot_slotsrÍ   Úoccupied_loot_slotsÚempty_loot_slotsÚis_loot_full)zW%(py5)s
{%(py5)s = %(py2)s
{%(py2)s = %(py0)s.is_inventory_full
}(%(py3)s)
} is %(py8)srW   rY   )r   r­   r   r   rD   zassert %(py10)sÚpy10)r   rM   rN   rO   rP   rQ   r   rR   rS   r"   rT   rU   Úscan_row0_statusr#   r$   r(   r)   r*   Úscan_loot_capacityÚis_inventory_fullr%   r&   r'   )rW   rX   rY   rZ   r|   r\   r]   r^   r_   Úloot_occupiedr{   Úrow0r~   r   r,   r€   rb   Úloot_capr-   ra   Ú@py_assert7Ú@py_assert6rc   Ú@py_format11s                           r0   Ú.test_optical_inventory_row0_and_loot_partitionrì   ÿ   sÐ  € å%¨t¸dÐCÑCÔC€Gå	Ô	$Ñ	&Ô	&ð %;¨&Ý”7—<’< Ð(<Ñ=Ô=ˆÝŒi˜˜|¨YÑ7Ô7ˆõ �q‘”ð 	Eð 	EˆAØ×,Ò,¨Q°Ñ2Ô2‰FˆB�Ý˜C ‘n”nð Eð E�Ý  R™.œ.ð Eð E�BØ—L’L " r¡'¨2°©7Ð!3°^ÑDÔDÐDÐDðEðEð
 ˆÝ�q˜!‘”ð 	'ð 	'ˆAÝ˜2‘Y”Yð 'ð '�Ø  2Ò%Ð%Ø$×4Ò4°Q¸Ñ:Ô:‘F�B˜Ý# C¨™nœnð Nð N˜Ý"'¨¨R¡.¤.ð Nð N˜BØŸLšL¨"¨r©'°2¸±7Ð);¸_ÑMÔMÐMÐMðNà! QÑ&�Møð'ð 	�Š�ÑÔÐð ×'Ò'¨Ñ1Ô1ˆØÐ*Ô+Ð1¨rÐ1Ð+¨rÒ1Ð1Ð1Ð1Õ1Ô1Ð1Ð1Ð1Ð1Ð+¨rÐ1Ñ1Ô1Õ1Ô1Ð+Ñ1Ô1Õ1Ô1¨rÑ1Ô1Ð1Ð1Ñ1Ð1Ð1Ð1Ð1Ð1Ñ1Ð1Õ1Õ1Ô1Ð1Ñ1Ô1Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ø�MÔ"Ð' aÐ'Ð" aÒ'Ð'Ð'Ð'Õ'Ô'Ð'Ð'Ð'Ð'Ð" aÐ'Ñ'Ô'Õ'Ô'Ð"Ñ'Ô'Õ'Ô' aÑ'Ô'Ð'Ð'Ñ'Ð'Ð'Ð'Ð'Ð'Ñ'Ð'Õ'Õ'Ô'Ð'Ñ'Ô'Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ø�MÔ"Ð' aÐ'Ð" aÒ'Ð'Ð'Ð'Õ'Ô'Ð'Ð'Ð'Ð'Ð" aÐ'Ñ'Ô'Õ'Ô'Ð"Ñ'Ô'Õ'Ô' aÑ'Ô'Ð'Ð'Ñ'Ð'Ð'Ð'Ð'Ð'Ñ'Ð'Õ'Õ'Ô'Ð'Ñ'Ô'Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ø�NÔ#Ð+ tÐ+Ð# tÐ+Ð+Ð+Ð+Õ+Ô+Ð+Ð+Ð+Ð+Ð# tÐ+Ñ+Ô+Õ+Ô+Ð#Ñ+Ô+Õ+Ô+ tÑ+Ô+Ð+Ð+Ñ+Ð+Ð+Ð+Ð+Ð+Ñ+Ð+Õ+Õ+Ô+Ð+Ñ+Ô+Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+ð ×-Ò-¨hÑ7Ô7ˆØÐ*Ô+Ð1¨rÐ1Ð+¨rÒ1Ð1Ð1Ð1Õ1Ô1Ð1Ð1Ð1Ð1Ð+¨rÐ1Ñ1Ô1Õ1Ô1Ð+Ñ1Ô1Õ1Ô1¨rÑ1Ô1Ð1Ð1Ñ1Ð1Ð1Ð1Ð1Ð1Ñ1Ð1Õ1Õ1Ô1Ð1Ñ1Ô1Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð1ØÐ-Ô.Ð4°"Ð4Ð.°"Ò4Ð4Ð4Ð4Õ4Ô4Ð4Ð4Ð4Ð4Ð.°"Ð4Ñ4Ô4Õ4Ô4Ð.Ñ4Ô4Õ4Ô4°"Ñ4Ô4Ð4Ð4Ñ4Ð4Ð4Ð4Ð4Ð4Ñ4Ð4Õ4Õ4Ô4Ð4Ñ4Ô4Ñ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4Ð4ØÐ*Ô+Ð0¨qÐ0Ð+¨qÒ0Ð0Ð0Ð0Õ0Ô0Ð0Ð0Ð0Ð0Ð+¨qÐ0Ñ0Ô0Õ0Ô0Ð+Ñ0Ô0Õ0Ô0¨qÑ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Ð/Ð'¨4Ð/Ð/Ð/Ð/Õ/Ô/Ð/Ð/Ð/Ð/Ð'¨4Ð/Ñ/Ô/Õ/Ô/Ð'Ñ/Ô/Õ/Ô/¨4Ñ/Ô/Ð/Ð/Ñ/Ð/Ð/Ð/Ð/Ð/Ñ/Ð/Õ/Õ/Ô/Ð/Ñ/Ô/Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/ØÔ(Ð:Ð(Ð(¨Ñ2Ô2Ð:°dÐ:Ð2°dÐ:Ð:Ð:Ð:Õ:Ô:Ð:Ð:Ð:Ð:Ð2°dÐ:Ñ:Ô:Ð:Õ:Ô:Ñ:Ô:Ð:Ð:Õ:Ô:ˆwÑ:Ô:Ð:Õ:Ô:ˆwÑ:Ô:Ð:Ð:Õ:Ô:Ð(Ñ:Ô:Ð:Õ:Ô:Ñ:Ô:Ð:Ð:Õ:Ô:¨Ñ:Ô:Ð:Õ:Ô:¨Ñ:Ô:Ð:Ð:Õ:Ô:Ð2Ñ:Ô:Õ:Ô:°dÑ:Ô:Ð:Ð:Ñ:Ð:Ð:Ð:Ð:Ð:Ñ:Ð:Õ:Õ:Ô:Ð:Ñ:Ô:Ñ:Ô:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:ðK%;ð %;ð %;ñ %;ô %;ð %;ð %;ð %;ð %;ð %;ð %;ð %;øøøð %;ð %;ð %;ð %;ð %;ð %;s   ¥Z-[Û[#Û&[#c                  óž  — ddl m} m} d}t          j                             |¦  «        st          j        d|› �¦  «          | |¦  «        }d}||u }|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	t          j        |¦  «        t          j        |¦  «        d
œz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}t!          dd¬¦  «        }|                     |¦  «        }	g }|	|k    }
|
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}
}|                     |¦  «        }g }||k    }
|
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         }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         }d}||u }|slt          j	        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}d }|d!         }||v }|slt          j	        d"|fd#||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}|                     |¦  «        }|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%         }d}||u }|slt          j	        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}d }|d!         }||v }|slt          j	        d"|fd#||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}|                     |dd&d¬'¦  «        }|d(         }d}||u }|slt          j	        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}d }|d!         }||v }|slt          j	        d"|fd#||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}} ||¦  «        }g }
t-          |t.          ¦  «        }|}|rt1          |¦  «        }d)}||k    }|}|�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  }|
                     |¦  «         |ræt          j	        d|fd/||f¦  «        d0t          j        ¦   «         v st          j        t0          ¦  «        rt          j        t0          ¦  «        nd0d,t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd,t          j        |¦  «        t          j        |¦  «        d1œz  }d2d3|iz  }|
                     |¦  «         t          j        |
d¦  «        i z  }d4d5|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}
x}x}x}}g }
|d         }d}||k    }|}|r|d6         }d}||k    }|}|�st          j	        d7|fd8||f¦  «        t          j        |¦  «        t          j        |¦  «        d9œz  }d:d|iz  }|
                     |¦  «         |r`t          j	        d7|fd;||f¦  «        t          j        |¦  «        t          j        |¦  «        d<œz  }d2d3|iz  }|
                     |¦  «         t          j        |
d¦  «        i z  }d4d5|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}
x}x}x}x}x}}dS )=u~   Kiá»ƒm tra chá»‘ng Ä‘á»�c nháº§m hÃ¬nh ná»�n artwork Loading Screen thÃ nh Waystone / Ã´ tÃºi Ä‘á»“ (INV-LOADING-SCREEN-GATE).r   )Úis_loading_screenÚfind_map_device_screen_poszDcaptures/pipeline_run/20260918_132025_748_STAGE2_MAP_DEVICE_VIEW.pngz1Khong tim thay tap tin chup loading screen that: Trv   )z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} is %(py6)srî   Úreal_loading_imgr@   rC   rD   Ni¥  i{  r
   r   r   Úwaystones_row1r   r   r   Úall_waystonesrr   rn   ro   rq   rB   ru   Frx   ÚLOADING_SCREEN_DETECTEDr¦   r§   r©   rß   rá   r°   r¢   r¥   rJ   z.%(py6)s
{%(py6)s = %(py2)s(%(py3)s, %(py4)s)
}Ú
isinstanceÚposÚtuple)r­   r   rp   rB   )z3%(py11)s
{%(py11)s = %(py8)s(%(py9)s)
} == %(py14)sr>   )rD   Úpy9Úpy11Úpy14z%(py16)sÚpy16zassert %(py19)sÚpy19r   ©ú>)z%(py3)s > %(py6)s)r   rB   z%(py8)s)z%(py11)s > %(py14)s)rø   rù   )Úsrc.common.vision_ocrrî   rï   rO   rP   ÚexistsÚpytestÚskipr#   r$   r%   r&   r'   r(   r)   r*   r   rV   Úscan_all_waystonesry   rä   r´   rô   rö   r>   ÚappendÚ_format_boolop)rî   rï   rð   r,   r`   ra   rb   rc   rW   rñ   r-   r.   r/   rò   Úinv_datar~   r   r€   Ú	loot_dataÚtrigger_resrõ   Ú@py_assert10Ú@py_assert13Ú@py_assert12Ú@py_format15Ú@py_format17Ú@py_format18Ú@py_format20s                               r0   Ú8test_optical_inventory_scanner_loading_screen_protectionr  +  s   € àSÐSÐSÐSÐSÐSÐSÐSà]ÐÝŒ7�>Š>Ð*Ñ+Ô+ð \ÝŒÐZÐHXÐZÐZÑ[Ô[Ð[ð ÐÐ-Ñ.Ô.Ð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Ô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Ð6Ð6å%¨t¸cÐBÑBÔB€Gð ×0Ò0Ð1AÑBÔB€NØÐˆ>˜RÒÐÐÐÕÔÐÐÐÐˆ>˜RÐÑÔÐÕÔÑÔÐÐÕÔˆ>ÑÔÐÕÔˆ>ÑÔÐÐÕÔ˜RÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐð ×.Ò.Ð/?Ñ@Ô@€MØÐˆ=˜BÒÐÐÐÕÔÐÐÐÐˆ=˜BÐÑÔÐÕÔÑÔÐÐÕÔˆ=ÑÔÐÕÔˆ=ÑÔÐÐÕÔ˜BÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐð ×*Ò*Ð+;Ñ<Ô<€HØÐ$Ô%Ð*¨Ð*Ð%¨Ò*Ð*Ð*Ð*Õ*Ô*Ð*Ð*Ð*Ð*Ð%¨Ð*Ñ*Ô*Õ*Ô*Ð%Ñ*Ô*Õ*Ô*¨Ñ*Ô*Ð*Ð*Ñ*Ð*Ð*Ð*Ð*Ð*Ñ*Ð*Õ*Õ*Ô*Ð*Ñ*Ô*Ñ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ø�IÔÐ' %Ð'Ð %Ð'Ð'Ð'Ð'Õ'Ô'Ð'Ð'Ð'Ð'Ð %Ð'Ñ'Ô'Õ'Ô'ÐÑ'Ô'Õ'Ô' %Ñ'Ô'Ð'Ð'Ñ'Ð'Ð'Ð'Ð'Ð'Ñ'Ð'Õ'Õ'Ô'Ð'Ñ'Ô'Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ø$Ð9¨°Ô(9Ð9Ð$Ð(9Ð9Ð9Ð9Ð9Õ9Ô9Ð9Ð9Ð9Ð9Ð$Ð(9Ð9Ñ9Ô9Õ9Ô9Ð$Ñ9Ô9Õ9Ô9Ð(9Ñ9Ô9Ð9Ð9Ñ9Ð9Ð9Ð9Ð9Ð9Ñ9Ð9Õ9Õ9Ô9Ð9Ñ9Ô9Ñ9Ô9Ð9Ð9Ð9Ð9Ð9Ð9Ð9ð ×*Ò*Ð+;Ñ<Ô<€IØÐ*Ô+Ð0¨qÐ0Ð+¨qÒ0Ð0Ð0Ð0Õ0Ô0Ð0Ð0Ð0Ð0Ð+¨qÐ0Ñ0Ô0Õ0Ô0Ð+Ñ0Ô0Õ0Ô0¨qÑ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Ø�^Ô$Ð-¨Ð-Ð$¨Ð-Ð-Ð-Ð-Õ-Ô-Ð-Ð-Ð-Ð-Ð$¨Ð-Ñ-Ô-Õ-Ô-Ð$Ñ-Ô-Õ-Ô-¨Ñ-Ô-Ð-Ð-Ñ-Ð-Ð-Ð-Ð-Ð-Ñ-Ð-Õ-Õ-Ô-Ð-Ñ-Ô-Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ø$Ð:¨	°'Ô(:Ð:Ð$Ð(:Ð:Ð:Ð:Ð:Õ:Ô:Ð:Ð:Ð:Ð:Ð$Ð(:Ð:Ñ:Ô:Õ:Ô:Ð$Ñ:Ô:Õ:Ô:Ð(:Ñ:Ô:Ð:Ð:Ñ:Ð:Ð:Ð:Ð:Ð:Ñ:Ð:Õ:Õ:Ô:Ð:Ñ:Ô:Ñ:Ô:Ð:Ð:Ð:Ð:Ð:Ð:Ð:ð ×?Ò?Ø˜$Ð*=ÈQð @ñ ô €Kð �{Ô#Ð, uÐ,Ð# uÐ,Ð,Ð,Ð,Õ,Ô,Ð,Ð,Ð,Ð,Ð# uÐ,Ñ,Ô,Õ,Ô,Ð#Ñ,Ô,Õ,Ô, uÑ,Ô,Ð,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ø$Ð<¨°GÔ(<Ð<Ð$Ð(<Ð<Ð<Ð<Ð<Õ<Ô<Ð<Ð<Ð<Ð<Ð$Ð(<Ð<Ñ<Ô<Õ<Ô<Ð$Ñ<Ô<Õ<Ô<Ð(<Ñ<Ô<Ð<Ð<Ñ<Ð<Ð<Ð<Ð<Ð<Ñ<Ð<Õ<Õ<Ô<Ð<Ñ<Ô<Ñ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<ð %Ð
$Ð%5Ñ
6Ô
6€CØ3Ð3�:�c�5Ñ!Ô!Ð3Ð!Ð3Ð!Ð3¥c¨#¡h¤hÐ3°!Ð3 h°!¢mÐ3Ð3Ð3Ð3Ñ3Ð3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3�:Ñ3Ô3Ð3Õ3Ô3�:Ñ3Ô3Ð3Ð3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3�cÑ3Ô3Ð3Õ3Ô3�cÑ3Ô3Ð3Ð3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3�5Ñ3Ô3Ð3Õ3Ô3�5Ñ3Ô3Ð3Ð3Õ3Ô3Ð!Ñ3Ô3Ð3Ð3Ñ3Ð3Ð3×3Ò3Ð3Ñ3Ô3Ð3Ð!Ð3Õ3Ô3Ð3Ð3Ð3Ð3 h°!Ð3Ñ3Ô3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3¥cÑ3Ô3Ð3Õ3Ô3¥cÑ3Ô3Ð3Ð3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3¨#Ñ3Ô3Ð3Õ3Ô3¨#Ñ3Ô3Ð3Ð3Õ3Ô3 hÑ3Ô3Õ3Ô3°!Ñ3Ô3Ð3Ð3Ñ3Ð3Ð3Ð3Ð3Ð3Ñ3Ð3Ð3×3Ò3Ð3Ñ3Ô3Ð3Õ3Ô3Ð3Ð3Ñ3Ô3Ð3Ñ3Ð3Ð3Ð3Ð3Ð3Ñ3Ð3Õ3Õ3Ô3Ð3Ñ3Ô3Ñ3Ô3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ø$Ð$ˆ3ˆqŒ6Ð$�AÐ$ˆ6�AŠ:Ð$Ð$Ð$Ð$Ð$˜#˜aœ&Ð$ 1Ð$˜& 1š*Ð$Ð$Ð$Ð$Ñ$Õ$Ô$Ð$Ð$Ð$Ð$ˆ6�AÐ$Ñ$Ô$Õ$Ô$ˆ6Ñ$Ô$Õ$Ô$�AÑ$Ô$Ð$Ð$Ñ$Ð$Ð$Ð$Ð$Ð$Ñ$Ð$Ð$×$Ò$Ð$Ñ$Ô$Ð$Ð$Ð$Õ$Ô$Ð$Ð$Ð$Ð$˜& 1Ð$Ñ$Ô$Õ$Ô$˜&Ñ$Ô$Õ$Ô$ 1Ñ$Ô$Ð$Ð$Ñ$Ð$Ð$Ð$Ð$Ð$Ñ$Ð$Ð$×$Ò$Ð$Ñ$Ô$Ð$Õ$Ô$Ð$Ð$Ñ$Ô$Ð$Ñ$Ð$Ð$Ð$Ð$Ð$Ñ$Ð$Õ$Õ$Ô$Ð$Ñ$Ô$Ñ$Ô$Ð$Ð$Ð$Ð$Ð$Ð$Ð$Ð$Ð$Ð$Ð$Ð$Ð$Ð$Ð$Ð$Ð$Ð$Ð$r2   c                  ó\
  — ddl } ddlm}m}m} d}t
          j                             |¦  «        st          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        |¦  «        d	œz  }d
d|iz  }	t!          t          j        |	¦  «        ¦  «        ‚dx}}|                      ¦   «         }
 ||¦  «        }|                      ¦   «         |
z
  dz  }d}||u }|s¬t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        d	œz  }t          j        d¦  «        dz   d|iz  }	t!          t          j        |	¦  «        ¦  «        ‚dx}}d}||k     }|s±t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        d	œz  }t          j        d|d›d�¦  «        dz   d|iz  }	t!          t          j        |	¦  «        ¦  «        ‚dx}}|                      ¦   «         } ||¦  «        }|                      ¦   «         |z
  dz  }d}||u }|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}||k     }|s±t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        d	œz  }t          j        d|d›d�¦  «        dz   d|iz  }	t!          t          j        |	¦  «        ¦  «        ‚dx}}d}t
          j                             |¦  «        r|n|} ||¦  «        }d}||v }|s°t          j        d|fd ||f¦  «        d!t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd!t          j        |¦  «        d	œz  }t          j        d"|› d#�¦  «        dz   d|iz  }	t!          t          j        |	¦  «        ¦  «        ‚dx}}dS )$ux   Kiá»ƒm tra Fast-Path cá»§a is_loading_screen trÃªn áº£nh in-game tháº­t tráº£ vá»� False < 10ms (Rule 5 Authentic Data).r   N)rî   rï   Ú_load_imagez.captures/reconnect/RECONNECT_STEP4_IN_GAME.pngzKhong tim thay artifact: ©úis not©z%(py0)s is not %(py3)sÚimg_objr   r   r   g     @�@Frv   )z%(py0)s is %(py3)sÚ
is_loadinguQ   áº¢nh in-game Hideout khÃ´ng Ä‘Æ°á»£c nháº­n diá»‡n nháº§m thÃ nh Loading Screen!ú
>assert %(py5)sg      $@©ú<)z%(py0)s < %(py3)sÚ
elapsed_msu   Fast-Path quÃ¡ cháº­m (z.2fzms >= 10ms)!Úis_loading_pathÚelapsed_path_msu%   Fast-Path qua file path quÃ¡ cháº­m (zDcaptures/pipeline_run/20260918_153346_454_STAGE2_MAP_DEVICE_VIEW.png))é2  é«   )éù   é­   )r  éÄ   r§   )z%(py0)s in %(py3)srõ   u"   Tá»�a Ä‘á»™ bá»‡ Ä‘Ã¡ Map Device (uF   ) khÃ´ng khá»›p nhÃ£n tháº­t (306, 171), (249, 173) hoáº·c (306, 196)!)Útimerþ   rî   rï   r  rO   rP   rÿ   r   r  r#   r$   r%   r&   r'   r(   r)   r*   Úperf_counterÚ_format_assertmsg)r"  rî   rï   r  rY   r  r,   r-   r.   r/   Út0r  r  Út0_pathr  r  Úmap_device_imgÚ
target_imgrõ   s                      r0   Ú(test_is_loading_screen_fast_path_in_gamer)  Y  sò  € à€K€K€KØ`Ð`Ð`Ð`Ð`Ð`Ð`Ð`Ð`Ð`à?€HÝŒ7�>Š>˜(Ñ#Ô#ð <ÝŒÐ:°Ð:Ð:Ñ;Ô;Ð;ð ˆk˜(Ñ#Ô#€GØÐˆ7˜$ÐÐÐÐÕÔÐÐÐÐˆ7˜$ÐÑÔÐÕÔÑÔÐÐÕÔˆ7ÑÔÐÕÔˆ7ÑÔÐÐÕÔ˜$ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐð 
×	Ò	Ñ	Ô	€BØ"Ð" 7Ñ+Ô+€JØ×#Ò#Ñ%Ô%¨Ñ*¨fÑ4€JàÐsˆ:˜ÐÐsÐsÐsÕsÔsÐsÐsÐsÐsˆ:˜ÐsÑsÔsÐsÕsÔsÑsÔsÐsÐsÕsÔsˆ:ÑsÔsÐsÕsÔsˆ:ÑsÔsÐsÐsÕsÔs˜ÑsÔsÐsÐsÑsÐsÕsÔsÐ sÑsÔsÐsÑsÐsÐsÐsÑsÐsÕsÕsÔsÐsÑsÔsÑsÔsÐsÐsÐsÐsÐsØÐTˆ:˜ÒÐTÐTÐTÕTÔTÐTÐTÐTÐTˆ:˜ÐTÑTÔTÐTÕTÔTÑTÔTÐTÐTÕTÔTˆ:ÑTÔTÐTÕTÔTˆ:ÑTÔTÐTÐTÕTÔT˜ÑTÔTÐTÐTÑTÐTÕTÔTÐT¸
ÐTÐTÐTÐTÑTÔTÐTÑTÐTÐTÐTÑTÐTÕTÕTÔTÐTÑTÔTÑTÔTÐTÐTÐTÐTÐTð ×ÒÑ!Ô!€GØ'Ð'¨Ñ1Ô1€OØ×(Ò(Ñ*Ô*¨WÑ4¸Ñ>€Oà#Ð#ˆ?˜eÐ#Ð#Ð#Ð#Õ#Ô#Ð#Ð#Ð#Ð#ˆ?˜eÐ#Ñ#Ô#Ð#Õ#Ô#Ñ#Ô#Ð#Ð#Õ#Ô#ˆ?Ñ#Ô#Ð#Õ#Ô#ˆ?Ñ#Ô#Ð#Ð#Õ#Ô#˜eÑ#Ô#Ð#Ð#Ñ#Ð#Ð#Ð#Ð#Ð#Ñ#Ð#Õ#Õ#Ô#Ð#Ñ#Ô#Ñ#Ô#Ð#Ð#Ð#Ð#Ð#Ø!Ðlˆ?˜TÒ!ÐlÐlÐlÕlÔlÐlÐlÐlÐlˆ?˜TÐlÑlÔlÐlÕlÔlÑlÔlÐlÐlÕlÔlˆ?ÑlÔlÐlÕlÔlˆ?ÑlÔlÐlÐlÕlÔl˜TÑlÔlÐlÐlÑlÐlÕlÔlÐ#lÈ?Ð#lÐ#lÐ#lÐ#lÑlÔlÐlÑlÐlÐlÐlÑlÐlÕlÕlÔlÐlÑlÔlÑlÔlÐlÐlÐlÐlÐlð \€NÝ#%¤7§>¢>°.Ñ#AÔ#AÐO��Àx€JØ
$Ð
$ ZÑ
0Ô
0€CØ6ð  iˆ3Ð6Ð6ð  ið  ið  iõ  iô  ið  ið  ið  ið  iˆ3Ð6ð  iñ  iô  ið  iõ  iô  iñ  iô  ið  ið  iõ  iô  iˆ3ñ  iô  ið  iõ  iô  iˆ3ñ  iô  ið  ið  iõ  iô  iÐ6ñ  iô  ið  ið  iñ  ið  iõ  iô  ið  9iÐ]`ð  9ið  9ið  9iñ  iô  ið  iñ  ið  ið  ið  iñ  ið  iõ  iõ  iô  ið  iñ  iô  iñ  iô  ið  ið  ið  ið  ið  ið  ið  ir2   c                  ó¢  — ddl m}   | ddd¬¦  «        }d}||k    }|s°t          j        d|fd||f¦  «        d	t	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd	t          j        |¦  «        d
œz  }t          j        d|› d�¦  «        dz   d|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}}d}d} | d||¬¦  «        }g }|d         }d}	|	|z  }
t          |
¦  «        }||k    }|}|r&|d         }d}||z  }t          |¦  «        }||k    }|}|�s4t          j        d|fd||f¦  «        t          j        |¦  «        dt	          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |	¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }|                     |¦  «         |rùt          j        d|fd||f¦  «        t          j        |¦  «        dt	          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        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          j        |d¦  «        i z  }dd |iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}x}x}x}	x}
x}x}x}x}x}}d!}|d         }||k    }d"}	||	k    }|r|s�t          j        d#||fd$|||	f¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |	¦  «        d%œz  }d&d'|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}x}x}}	d(}|d         }||k    }d)}	||	k    }|r|s�t          j        d#||fd$|||	f¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |	¦  «        d%œz  }d&d'|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}x}x}}	d*}t          j                             |¦  «        �r[ | |¦  «        }d+}|d         }||k    }d,}	||	k    }|r|s�t          j        d#||fd$|||	f¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |	¦  «        d%œz  }d&d'|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}x}x}}	d-}|d         }||k    }d.}	||	k    }|r|s�t          j        d#||fd$|||	f¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |	¦  «        d%œz  }d&d'|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}x}x}}	dS dS )/uf   Kiá»ƒm tra nháº­n diá»‡n tab ENDGAME trÃªn thanh tab World Map (chuáº©n hÃ³a pixel tham chiáº¿u ~65%).r   )Úfind_endgame_tab_posNg      ð?)Úscale_xÚscale_y)éo  é^   r   r   Úpos_1440_refr   u    Tá»�a Ä‘á»™ tham chiáº¿u 1440p (u'   ) pháº£i lÃ  (1647, 94) ~65% thanh tab!r  r   gÍÌÌÌÌìÝ?gïîîîîîã?r.  r   r/  )z>%(py3)s == %(py11)s
{%(py11)s = %(py5)s((%(py7)s * %(py8)s))
}r�   Úsx_win)r   r   r¯   rD   rø   z%(py13)sÚpy13)zB%(py16)s == %(py24)s
{%(py24)s = %(py18)s((%(py20)s * %(py21)s))
}Úsy_win)rú   Úpy18Úpy20Úpy21Úpy24z%(py26)sÚpy26zassert %(py29)sÚpy29iø  i  ©ú<=r;  ©z%(py1)s <= %(py5)sz%(py5)s <= %(py7)s©rA   r   r¯   úassert %(py9)sr÷   rh   éA   z8captures/20260913_101215_171_ATLAS_MAP_DEVICE_LOADED.pngiÜ  i¤  éF   r;   )rþ   r+  r#   r$   r%   r&   r'   r(   r$  r)   r*   r�   r  r  rO   rP   rÿ   )r+  r0  r,   r-   r.   r/   r1  r3  Úpos_win_refrê   Ú@py_assert9r  ra   r~   Ú@py_assert15Ú@py_assert19Ú@py_assert22Ú@py_assert23Ú@py_assert17Ú@py_format12Ú@py_format14Ú@py_format25Ú@py_format27Ú@py_format28Ú@py_format30r   r¶   Ú@py_format10Úimg_realÚdetected_poss                                 r0   Ú$test_endgame_tab_perception_contractrQ  }  sÇ  € à:Ð:Ð:Ð:Ð:Ð:ð (Ð'¨°cÀ3ÐGÑGÔG€LØ%Ðˆ<˜:Ò%ÐÐÐÕÔÐÐÐÐˆ<˜:ÐÑÔÐÕÔÑÔÐÐÕÔˆ<ÑÔÐÕÔˆ<ÑÔÐÐÕÔ˜:ÑÔÐÐÑÐÕÔÐ'È,Ð'Ð'Ð'ÑÔÐÑÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐð €FØ€FØ&Ð& t°VÀVÐLÑLÔL€KØVÐVˆ;�qŒ>ÐV ÐV ¨¡ÐV�S Ñ/Ô/ÐVˆ>Ð/Ò/ÐVÐVÐVÐVÐV°KÀ´NÐVÈ"ÐVÈ"ÈvÉ+ÐVÅcÈ+ÑFVÔFVÐV°NÐFVÒ4VÐVÐVÐVÐVÑVÕVÔVÐVÐVÐVÐVˆ>Ð/ÐVÑVÔVÕVÔVˆ>ÑVÔVÐVÕVÔVÑVÔVÐVÐVÕVÔV�SÑVÔVÐVÕVÔV�SÑVÔVÐVÐVÕVÔV ÑVÔVÐVÕVÔVÑVÔVÐVÐVÕVÔV¨ÑVÔVÐVÕVÔV¨ÑVÔVÐVÐVÕVÔVÐ/ÑVÔVÐVÐVÑVÐVÐVÐVÐVÐVÑVÐVÐV×VÒVÐVÑVÔVÐVÐVÐVÕVÔVÐVÐVÐVÐV°NÐFVÐVÑVÔVÕVÔV°NÑVÔVÐVÕVÔVÑVÔVÐVÐVÕVÔVÅcÑVÔVÐVÕVÔVÅcÑVÔVÐVÐVÕVÔVÈ"ÑVÔVÐVÕVÔVÑVÔVÐVÐVÕVÔVÈvÑVÔVÐVÕVÔVÈvÑVÔVÐVÐVÕVÔVÐFVÑVÔVÐVÐVÑVÐVÐVÐVÐVÐVÑVÐVÐV×VÒVÐVÑVÔVÐVÕVÔVÐVÐVÑVÔVÐVÑVÐVÐVÐVÐVÐVÑVÐVÕVÕVÔVÐVÑVÔVÑVÔVÐVÐVÐVÐVÐVÐVÐVÐVÐVÐVÐVÐVÐVÐVÐVÐVÐVÐVÐVÐVÐVÐVÐVÐVÐVØÐ'�+˜a”.Ð'ˆ3�.Ò'Ð' CÐ'�. CÒ'Ð'Ð'Ð'Ð'Ð'Õ'Ô'Ð'Ð'Ð'Ð'Ð'ˆ3�. CÐ'Ñ'Ô'Õ'Ô'ˆ3Ñ'Ô'Õ'Ô'�.Ñ'Ô'Õ'Ô' CÑ'Ô'Ð'Ð'Ñ'Ð'Ð'Ð'Ð'Ð'Ñ'Ð'Õ'Õ'Ô'Ð'Ñ'Ô'Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'ØÐ%�˜Q”Ð%ˆ2�Ò%Ð% 2Ð%� 2Ò%Ð%Ð%Ð%Ð%Ð%Õ%Ô%Ð%Ð%Ð%Ð%Ð%ˆ2� 2Ð%Ñ%Ô%Õ%Ô%ˆ2Ñ%Ô%Õ%Ô%�Ñ%Ô%Õ%Ô% 2Ñ%Ô%Ð%Ð%Ñ%Ð%Ð%Ð%Ð%Ð%Ñ%Ð%Õ%Õ%Ô%Ð%Ñ%Ô%Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%Ð%Ð%Ð%Ð%Ð%ð J€HÝ	„w‡~‚~�hÑÔñ ,Ø+Ð+¨HÑ5Ô5ˆàÐ.�| A”Ð.ˆt�Ò.Ð.¨$Ð.�¨$Ò.Ð.Ð.Ð.Ð.Ð.Õ.Ô.Ð.Ð.Ð.Ð.Ð.ˆt�¨$Ð.Ñ.Ô.Õ.Ô.ˆtÑ.Ô.Õ.Ô.�Ñ.Ô.Õ.Ô.¨$Ñ.Ô.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.ØÐ+�\ !”_Ð+ˆr�_Ò+Ð+¨Ð+�_¨Ò+Ð+Ð+Ð+Ð+Ð+Õ+Ô+Ð+Ð+Ð+Ð+Ð+ˆr�_¨Ð+Ñ+Ô+Õ+Ô+ˆrÑ+Ô+Õ+Ô+�_Ñ+Ô+Õ+Ô+¨Ñ+Ô+Ð+Ð+Ñ+Ð+Ð+Ð+Ð+Ð+Ñ+Ð+Õ+Õ+Ô+Ð+Ñ+Ô+Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+ð	,ð ,r2   c                  óÆ  — ddl m}  d}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}} | dd¬¦  «        }d}	||	k    }|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          j                             |¦  «        �r | |¦  «        }d}	||	u}|s¬t          j        d|fd||	f¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |	¦  «        dœz  }
t          j        d¦  «        dz   d|
iz  }t          t          j	        |¦  «        ¦  «        ‚dx}}	d}|d         }||k    }	d}||k    }|	r|s�t          j        d|	|fd|||f¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd |iz  }t          t          j	        |¦  «        ¦  «        ‚dx}x}	x}x}}d!}|d"         }||k    }	d#}||k    }|	r|s�t          j        d|	|fd|||f¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd |iz  }t          t          j	        |¦  «        ¦  «        ‚dx}x}	x}x}}dS dS )$up   Kiá»ƒm tra nháº­n diá»‡n nÃºt TRAVERSE (kÃ­ch thÆ°á»›c ~150x40 á»Ÿ panel phá»¥ báº£n giá»¯a/dÆ°á»›i mÃ n hÃ¬nh).r   )Úfind_traverse_button_screen_posNT)Úreturn_none_if_missingrv   )zP%(py6)s
{%(py6)s = %(py0)s(%(py2)s, return_none_if_missing=%(py4)s)
} is %(py9)srS  )r   r­   rp   rB   r÷   zassert %(py11)srø   F)iD  iì  r   r   Úref_posr   r   r   zBcaptures/pipeline_run/20260914_212020_423_STAGE3_NODE_SELECTED.pngr  r  rõ   uH   Pháº£i nháº­n diá»‡n Ä‘Æ°á»£c nÃºt TRAVERSE trÃªn áº£nh thá»±c nghiá»‡m!r  i   i   r:  r<  r=  r>  r÷   iø  r   ió  )rþ   rS  r#   r$   r%   r&   r'   r(   r)   r*   rO   rP   rÿ   r$  )rS  r-   r   r`   Ú@py_assert8ré   rN  rH  rU  r,   r.   r/   rO  rõ   r~   ra   rê   r¶   s                     r0   Ú(test_traverse_button_screen_pos_contractrW  –  sÙ  € àEÐEÐEÐEÐEÐEð ,0ÐUÈÐUÐ*Ð*¨4ÈÐMÑMÔMÐUÐQUÐUÐMÐQUÐUÐUÐUÐUÕUÔUÐUÐUÐUÐUÐMÐQUÐUÑUÔUÐUÕUÔUÑUÔUÐUÐUÕUÔUÐ*ÑUÔUÐUÕUÔUÐ*ÑUÔUÐUÐUÕUÔU¨4ÑUÔUÕUÔUÈÑUÔUÕUÔUÐMÑUÔUÕUÔUÐQUÑUÔUÐUÐUÑUÐUÐUÐUÐUÐUÑUÐUÕUÕUÔUÐUÑUÔUÑUÔUÐUÐUÐUÐUÐUÐUÐUÐUÐUÐUÐUð .Ð-¨dÈ5ÐQÑQÔQ€GØ!Ð!ˆ7�kÒ!Ð!Ð!Ð!Õ!Ô!Ð!Ð!Ð!Ð!ˆ7�kÐ!Ñ!Ô!Ð!Õ!Ô!Ñ!Ô!Ð!Ð!Õ!Ô!ˆ7Ñ!Ô!Ð!Õ!Ô!ˆ7Ñ!Ô!Ð!Ð!Õ!Ô!�kÑ!Ô!Ð!Ð!Ñ!Ð!Ð!Ð!Ð!Ð!Ñ!Ð!Õ!Õ!Ô!Ð!Ñ!Ô!Ñ!Ô!Ð!Ð!Ð!Ð!Ð!ð T€HÝ	„w‡~‚~�hÑÔñ %Ø-Ð-¨hÑ7Ô7ˆØÐjˆs˜$ˆÐjÐjÐjÕjÔjÐjÐjÐjÐjˆs˜$ÐjÑjÔjÐjÕjÔjÑjÔjÐjÐjÕjÔjˆsÑjÔjÐjÕjÔjˆsÑjÔjÐjÐjÕjÔj˜$ÑjÔjÐjÐjÑjÐjÕjÔjÐ jÑjÔjÐjÑjÐjÐjÐjÑjÐjÕjÕjÔjÐjÑjÔjÑjÔjÐjÐjÐjÐjÐjàÐ$�c˜!”fÐ$ˆs�fÒ$Ð$ Ð$�f Ò$Ð$Ð$Ð$Ð$Ð$Õ$Ô$Ð$Ð$Ð$Ð$Ð$ˆs�f Ð$Ñ$Ô$Õ$Ô$ˆsÑ$Ô$Õ$Ô$�fÑ$Ô$Õ$Ô$ Ñ$Ô$Ð$Ð$Ñ$Ð$Ð$Ð$Ð$Ð$Ñ$Ð$Õ$Õ$Ô$Ð$Ñ$Ô$Ñ$Ô$Ð$Ð$Ð$Ð$Ð$Ð$Ð$Ð$Ð$Ð$Ð$ØÐ$�c˜!”fÐ$ˆs�fÒ$Ð$ Ð$�f Ò$Ð$Ð$Ð$Ð$Ð$Õ$Ô$Ð$Ð$Ð$Ð$Ð$ˆs�f Ð$Ñ$Ô$Õ$Ô$ˆsÑ$Ô$Õ$Ô$�fÑ$Ô$Õ$Ô$ Ñ$Ô$Ð$Ð$Ñ$Ð$Ð$Ð$Ð$Ð$Ñ$Ð$Õ$Õ$Ô$Ð$Ñ$Ô$Ñ$Ô$Ð$Ð$Ð$Ð$Ð$Ð$Ð$Ð$Ð$Ð$Ð$Ð$Ð$ð%ð %r2   c            	      ó’  — ddl m} m} d}t          j                             |¦  «        �rœ ||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}d}||z  }t          |¦  «        }|
|k     }|sót          j        d|fd|
|f¦  «        t          j        |
¦  «        dt          j
        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }t          j        d|	› d�¦  «        dz   d|iz  }t          t          j        |¦  «        ¦  «        ‚dx}
x}x}x}x}}�Œ, | |dd¬¦  «        }d}||u}|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         }
d}|
|k     }|s…t          j        d|fd |
|f¦  «        t          j        |
¦  «        t          j        |¦  «        d!œz  }t          j        d|› d"�¦  «        d#z   d$|iz  }t          t          j        |¦  «        ¦  «        ‚dx}
x}}dS dS )%ux   Kiá»ƒm tra nháº­n diá»‡n Reachable Green Nodes trÃªn Atlas ná»­a bÃªn trÃ¡i khi Inventory má»Ÿ (x < 650 trÃªn 1197x897).r   )Úfind_reachable_green_nodeÚfind_all_reachable_green_nodeszBcaptures/20260914_055336_887_LIVE_CLEAR_SEARCH_TEST_CORRELATED.pngT)Úinventory_openrü   )z/%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} > %(py6)sr>   Ú	all_nodesr@   rC   rD   Nr   gš™™™™™á?r  )z=%(py1)s < %(py10)s
{%(py10)s = %(py3)s((%(py5)s * %(py7)s))
}r�   )rA   r   r   r¯   râ   zNode u9    vÆ°á»£t quÃ¡ ná»­a trÃ¡i mÃ n hÃ¬nh khi má»Ÿ tÃºi Ä‘á»“!z
>assert %(py12)sÚpy12iŠ  )r[  Úmax_xr  r  Ú	best_noder   r   r   )z%(py1)s < %(py4)sro   u;    pháº£i náº±m á»Ÿ ná»­a trÃ¡i (x < 650) khi inventory má»Ÿ!z
>assert %(py6)srB   )rþ   rY  rZ  rO   rP   rÿ   r>   r#   r$   r%   r&   r'   r(   r)   r*   r�   r$  )rY  rZ  rO  r\  r,   r`   ra   rb   rc   Únr~   rê   rV  rB  rë   Ú@py_format13r_  r-   r.   r/   r   r€   s                         r0   Ú0test_reachable_green_nodes_inventory_open_boundsrb  «  sr  € à_Ð_Ð_Ð_Ð_Ð_Ð_Ð_àS€HÝ	„w‡~‚~�hÑÔñ 
rà2Ð2°8ÈDÐQÑQÔQˆ	Ý�9‰~Œ~Ð! Ð!ˆ~ Ò!Ð!Ð!Ð!Õ!Ô!Ð!Ð!Ð!Ð!ˆ~ Ð!Ñ!Ô!Ð!Õ!Ô!Ñ!Ô!Ð!Ð!Õ!Ô!�sÑ!Ô!Ð!Õ!Ô!�sÑ!Ô!Ð!Ð!Ð!Õ!Ô!Ñ!Ô!Ð!Ð!Õ!Ô!�9Ñ!Ô!Ð!Õ!Ô!�9Ñ!Ô!Ð!Ð!Õ!Ô!ˆ~Ñ!Ô!Õ!Ô! Ñ!Ô!Ð!Ð!Ñ!Ð!Ð!Ð!Ð!Ð!Ñ!Ð!Õ!Õ!Ô!Ð!Ñ!Ô!Ñ!Ô!Ð!Ð!Ð!Ð!Ð!Ð!Ð!Øð 	qñ 	qˆAØ�Q”4Ðp˜dÐp TÐp˜d T™kÐp�#˜kÑ*Ô*Ðp�4Ð*Ò*ÐpÐpÐpÕpÔpÐpÐpÐpÐp�4Ð*ÐpÑpÔpÕpÔp�4ÑpÔpÐpÕpÔpÑpÔpÐpÐpÕpÔp�#ÑpÔpÐpÕpÔp�#ÑpÔpÐpÐpÕpÔp˜dÑpÔpÕpÔp TÑpÔpÕpÔpÐ*ÑpÔpÐpÐpÑpÐpÕpÔpÐ,p°AÐ,pÐ,pÐ,pÑpÔpÐpÑpÐpÐpÐpÑpÐpÕpÕpÔpÐpÑpÔpÑpÔpÐpÐpÐpÐpÐpÐpÐpÐpÐpÐpÐpÐpÐpÑpð .Ð-¨hÀtÐSVÐWÑWÔWˆ	Ø $Ð$ˆy Ð$Ð$Ð$Ð$Õ$Ô$Ð$Ð$Ð$Ð$ˆy Ð$Ñ$Ô$Ð$Õ$Ô$Ñ$Ô$Ð$Ð$Õ$Ô$ˆyÑ$Ô$Ð$Õ$Ô$ˆyÑ$Ô$Ð$Ð$Õ$Ô$ Ñ$Ô$Ð$Ð$Ñ$Ð$Ð$Ð$Ð$Ð$Ñ$Ð$Õ$Õ$Ô$Ð$Ñ$Ô$Ñ$Ô$Ð$Ð$Ð$Ð$Ð$Ø˜Œ|Ðq˜cÐqˆ|˜cÒ!ÐqÐqÐqÕqÔqÐqÐqÐqÐqˆ|˜cÐqÑqÔqÕqÔqˆ|ÑqÔqÕqÔq˜cÑqÔqÐqÐqÑqÐqÕqÔqÐ#q¨9Ð#qÐ#qÐ#qÑqÔqÐqÑqÐqÐqÐqÑqÐqÕqÕqÔqÐqÑqÔqÑqÔqÐqÐqÐqÐqÐqÐqÐqÐqÐqð
rð 
rr2   )Ú__doc__Úbuiltinsr%   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter#   rO   rM   r   ÚPILr   Ú,src.assistant_tool.optical_inventory_scannerr   Ú'src.assistant_tool.autonomous_lifecycler   r   r1   rd   r�   r¹   rÆ   rÖ   rì   r  r)  rQ  rW  rb  rF   r2   r0   ú<module>rk     sP  ððð ð € € € € € € € € € € € € €	€	€	€	Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð à PÐ PÐ PÐ PÐ PÐ PØ ^Ð ^Ð ^Ð ^Ð ^Ð ^Ð ^Ð ^ðð ð ð>-ð -ð -ð.&ð &ð &ð849ð 49ð 49ðn4ð 4ð 4ð>@9ð @9ð @9ðF);ð );ð );ðX+%ð +%ð +%ð\!ið !ið !iðH,ð ,ð ,ð2%ð %ð %ð*rð rð rð rð rr2   