Console Output
Skipping 23,379 KB..
Full LogTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTest
+ cp -r /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT075/master/params/master/camera_driver /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT075/master/params/master/recorder.toml /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT075/master/params/master/system-ros /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT075/master/params/
[Pipeline] sh
+ mkdir -p params_module_orin_master_HNYP_JLX7E_AT075_2026-10-16_10-42-08/
+ mv params/ params_module_orin_master_HNYP_JLX7E_AT075_2026-10-16_10-42-08/
[Pipeline] sh
+ zip -rq params_module_orin_master_HNYP_JLX7E_AT075_2026-10-16_10-42-08.zip params_module_orin_master_HNYP_JLX7E_AT075_2026-10-16_10-42-08 ./version.json
[Pipeline] echo
/root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT075/master/params_module_orin_master_HNYP_JLX7E_AT075_2026-10-16_10-42-08.zip,/root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT075/master/version.json
[Pipeline] sh
+ curl -X POST http://183.255.70.81:50080/ota-api/otaUploadFileAndVersion --form 'Content-Type="multipart/form-data"' --form 'file=@"/root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT075/master/params_module_orin_master_HNYP_JLX7E_AT075_2026-10-16_10-42-08.zip"' --form 'version=@"/root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT075/master/version.json"'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
5 169M 0 0 5 9472k 0 10.7M 0:00:15 --:--:-- 0:00:15 10.7M
14 169M 0 0 14 24.3M 0 12.9M 0:00:13 0:00:01 0:00:12 12.9M
23 169M 0 0 23 40.3M 0 14.0M 0:00:12 0:00:02 0:00:10 14.0M
33 169M 0 0 33 56.1M 0 14.5M 0:00:11 0:00:03 0:00:08 14.5M
42 169M 0 0 42 71.9M 0 14.7M 0:00:11 0:00:04 0:00:07 14.7M
51 169M 0 0 51 87.8M 0 14.9M 0:00:11 0:00:05 0:00:06 15.7M
61 169M 0 0 61 103M 0 15.0M 0:00:11 0:00:06 0:00:05 15.9M
70 169M 0 0 70 118M 0 14.9M 0:00:11 0:00:07 0:00:04 15.5M
79 169M 0 0 79 134M 0 15.2M 0:00:11 0:00:08 0:00:03 15.7M
89 169M 0 0 89 150M 0 15.2M 0:00:11 0:00:09 0:00:02 15.7M
98 169M 0 0 98 166M 0 15.3M 0:00:11 0:00:10 0:00:01 15.7M
100 169M 0 0 100 169M 0 14.0M 0:00:12 0:00:12 --:--:-- 12.6M
100 169M 0 0 100 169M 0 12.9M 0:00:13 0:00:13 --:--:-- 9.8M
100 169M 0 0 100 169M 0 12.0M 0:00:14 0:00:14 --:--:-- 6791k
100 169M 0 0 100 169M 0 11.2M 0:00:15 0:00:15 --:--:-- 3672k
100 169M 0 0 100 169M 0 10.5M 0:00:16 0:00:16 --:--:-- 534k
100 169M 0 0 100 169M 0 9.9M 0:00:17 0:00:17 --:--:-- 0
100 169M 0 0 100 169M 0 9597k 0:00:18 0:00:18 --:--:-- 0
100 169M 0 0 100 169M 0 9093k 0:00:19 0:00:19 --:--:-- 0
100 169M 0 0 100 169M 0 8638k 0:00:20 0:00:20 --:--:-- 0
100 169M 0 0 100 169M 0 8228k 0:00:21 0:00:21 --:--:-- 0
100 169M 0 0 100 169M 0 7854k 0:00:22 0:00:22 --:--:-- 0
100 169M 0 0 100 169M 0 7513k 0:00:23 0:00:23 --:--:-- 0
100 169M 0 0 100 169M 0 7200k 0:00:24 0:00:24 --:--:-- 0
100 169M 0 0 100 169M 0 6913k 0:00:25 0:00:25 --:--:-- 0
100 169M 0 0 100 169M 0 6647k 0:00:26 0:00:26 --:--:-- 0
100 169M 0 0 100 169M 0 6401k 0:00:27 0:00:27 --:--:-- 0
100 169M 0 0 100 169M 0 6173k 0:00:28 0:00:28 --:--:-- 0
100 169M 0 0 100 169M 0 5960k 0:00:29 0:00:29 --:--:-- 0
100 169M 0 0 100 169M 0 5762k 0:00:30 0:00:30 --:--:-- 0
100 169M 0 0 100 169M 0 5576k 0:00:31 0:00:31 --:--:-- 0
100 169M 0 0 100 169M 0 5402k 0:00:32 0:00:32 --:--:-- 0
100 169M 0 43 100 169M 1 5284k 0:00:32 0:00:32 --:--:-- 9
[Pipeline] echo
{"msg":"操作成功","code":200,"data":""}
[Pipeline] readJSON
[Pipeline] echo
[msg:操作成功, code:200, data:]
[Pipeline] echo
status:200
[Pipeline] echo
{"msg":"操作成功","code":200,"data":""}
[Pipeline] }
[Pipeline] // dir
[Pipeline] sh
+ rm -rf /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT075/master@tmp
[Pipeline] sh
+ rm -rf /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT075/master/params_submodule/
[Pipeline] echo
------------------------------------- HNYP_JLX7E_AT075压缩并上传,slave -------------------------------------------
[Pipeline] dir
Running in /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT075/slave
[Pipeline] {
[Pipeline] sh
+ cd /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT075/slave/params/
+ ls -d crane_align/ data_collection/ extrinsics/ hardware/ hdmap/ hdmap_interface/ hesai_lidar/ imv_spreader_detection/ lane_detection/ lidar_correction_files/ lidar_loc_v2/ master/ new_truck_spreader_detection/ perception/ pncc_common_config/ pncc_port_related_config/ pncc_vehicle_related_config/ pointcloud/ prediction/ rslidar_sdk/ segmentation/ slave/ system-ros/
[Pipeline] echo
crane_align/
data_collection/
extrinsics/
hardware/
hdmap/
hdmap_interface/
hesai_lidar/
imv_spreader_detection/
lane_detection/
lidar_correction_files/
lidar_loc_v2/
master/
new_truck_spreader_detection/
perception/
pncc_common_config/
pncc_port_related_config/
pncc_vehicle_related_config/
pointcloud/
prediction/
rslidar_sdk/
segmentation/
slave/
system-ros/
[Pipeline] echo
最终目录包含slave目录,进行合并操作
[Pipeline] sh
+ cp -r /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT075/slave/params/slave/camera_driver /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT075/slave/params/slave/recorder.toml /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT075/slave/params/slave/system-ros /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT075/slave/params/
[Pipeline] sh
+ mkdir -p params_module_orin_slave_HNYP_JLX7E_AT075_2026-10-16_10-42-08/
+ mv params/ params_module_orin_slave_HNYP_JLX7E_AT075_2026-10-16_10-42-08/
[Pipeline] sh
+ zip -rq params_module_orin_slave_HNYP_JLX7E_AT075_2026-10-16_10-42-08.zip params_module_orin_slave_HNYP_JLX7E_AT075_2026-10-16_10-42-08 ./version.json
[Pipeline] echo
/root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT075/slave/params_module_orin_slave_HNYP_JLX7E_AT075_2026-10-16_10-42-08.zip,/root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT075/slave/version.json
[Pipeline] sh
+ curl -X POST http://183.255.70.81:50080/ota-api/otaUploadFileAndVersion --form 'Content-Type="multipart/form-data"' --form 'file=@"/root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT075/slave/params_module_orin_slave_HNYP_JLX7E_AT075_2026-10-16_10-42-08.zip"' --form 'version=@"/root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT075/slave/version.json"'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
5 159M 0 0 5 8896k 0 10.1M 0:00:15 --:--:-- 0:00:15 10.1M
15 159M 0 0 15 24.5M 0 13.2M 0:00:12 0:00:01 0:00:11 13.2M
25 159M 0 0 25 40.3M 0 14.1M 0:00:11 0:00:02 0:00:09 14.1M
35 159M 0 0 35 56.1M 0 14.5M 0:00:10 0:00:03 0:00:07 14.5M
45 159M 0 0 45 71.9M 0 14.8M 0:00:10 0:00:04 0:00:06 14.8M
54 159M 0 0 54 87.7M 0 15.0M 0:00:10 0:00:05 0:00:05 15.8M
64 159M 0 0 64 103M 0 15.1M 0:00:10 0:00:06 0:00:04 15.8M
74 159M 0 0 74 119M 0 15.2M 0:00:10 0:00:07 0:00:03 15.8M
84 159M 0 0 84 135M 0 15.2M 0:00:10 0:00:08 0:00:02 15.8M
94 159M 0 0 94 151M 0 15.3M 0:00:10 0:00:09 0:00:01 15.8M
100 159M 0 0 100 159M 0 14.0M 0:00:11 0:00:11 --:--:-- 12.9M
100 159M 0 0 100 159M 0 12.8M 0:00:12 0:00:12 --:--:-- 10.1M
100 159M 0 0 100 159M 0 11.9M 0:00:13 0:00:13 --:--:-- 7423k
100 159M 0 0 100 159M 0 11.0M 0:00:14 0:00:14 --:--:-- 4502k
100 159M 0 0 100 159M 0 10.3M 0:00:15 0:00:15 --:--:-- 1584k
100 159M 0 0 100 159M 0 9963k 0:00:16 0:00:16 --:--:-- 0
100 159M 0 0 100 159M 0 9390k 0:00:17 0:00:17 --:--:-- 0
100 159M 0 0 100 159M 0 8879k 0:00:18 0:00:18 --:--:-- 0
100 159M 0 0 100 159M 0 8421k 0:00:19 0:00:19 --:--:-- 0
100 159M 0 0 100 159M 0 8008k 0:00:20 0:00:20 --:--:-- 0
100 159M 0 0 100 159M 0 7634k 0:00:21 0:00:21 --:--:-- 0
100 159M 0 0 100 159M 0 7293k 0:00:22 0:00:22 --:--:-- 0
100 159M 0 0 100 159M 0 6981k 0:00:23 0:00:23 --:--:-- 0
100 159M 0 0 100 159M 0 6694k 0:00:24 0:00:24 --:--:-- 0
100 159M 0 0 100 159M 0 6431k 0:00:25 0:00:25 --:--:-- 0
100 159M 0 0 100 159M 0 6187k 0:00:26 0:00:26 --:--:-- 0
100 159M 0 0 100 159M 0 5961k 0:00:27 0:00:27 --:--:-- 0
100 159M 0 0 100 159M 0 5751k 0:00:28 0:00:28 --:--:-- 0
100 159M 0 0 100 159M 0 5555k 0:00:29 0:00:29 --:--:-- 0
100 159M 0 0 100 159M 0 5373k 0:00:30 0:00:30 --:--:-- 0
100 159M 0 0 100 159M 0 5201k 0:00:31 0:00:31 --:--:-- 0
100 159M 0 43 100 159M 1 5120k 0:00:31 0:00:31 --:--:-- 9
100 159M 0 43 100 159M 1 5120k 0:00:31 0:00:31 --:--:-- 12
[Pipeline] echo
{"msg":"操作成功","code":200,"data":""}
[Pipeline] readJSON
[Pipeline] echo
[msg:操作成功, code:200, data:]
[Pipeline] echo
status:200
[Pipeline] echo
{"msg":"操作成功","code":200,"data":""}
[Pipeline] }
[Pipeline] // dir
[Pipeline] sh
+ rm -rf /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT075/slave@tmp
[Pipeline] sh
+ rm -rf /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT075/slave/params_submodule/
[Pipeline] echo
------------------------------------- HNYP_JLX7E_AT095压缩并上传,master -------------------------------------------
[Pipeline] dir
Running in /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT095/master
[Pipeline] {
[Pipeline] sh
+ cd /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT095/master/params/
+ ls -d crane_align/ data_collection/ extrinsics/ hardware/ hdmap/ hdmap_interface/ hesai_lidar/ imv_spreader_detection/ lane_detection/ lidar_correction_files/ lidar_loc_v2/ master/ new_truck_spreader_detection/ perception/ pncc_common_config/ pncc_port_related_config/ pncc_vehicle_related_config/ pointcloud/ prediction/ rslidar_sdk/ segmentation/ slave/ system-ros/
[Pipeline] echo
crane_align/
data_collection/
extrinsics/
hardware/
hdmap/
hdmap_interface/
hesai_lidar/
imv_spreader_detection/
lane_detection/
lidar_correction_files/
lidar_loc_v2/
master/
new_truck_spreader_detection/
perception/
pncc_common_config/
pncc_port_related_config/
pncc_vehicle_related_config/
pointcloud/
prediction/
rslidar_sdk/
segmentation/
slave/
system-ros/
[Pipeline] echo
最终目录包含master目录,进行合并操作
[Pipeline] sh
+ cp -r /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT095/master/params/master/camera_driver /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT095/master/params/master/recorder.toml /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT095/master/params/master/system-ros /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT095/master/params/
[Pipeline] sh
+ mkdir -p params_module_orin_master_HNYP_JLX7E_AT095_2026-10-16_10-42-08/
+ mv params/ params_module_orin_master_HNYP_JLX7E_AT095_2026-10-16_10-42-08/
[Pipeline] sh
+ zip -rq params_module_orin_master_HNYP_JLX7E_AT095_2026-10-16_10-42-08.zip params_module_orin_master_HNYP_JLX7E_AT095_2026-10-16_10-42-08 ./version.json
[Pipeline] echo
/root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT095/master/params_module_orin_master_HNYP_JLX7E_AT095_2026-10-16_10-42-08.zip,/root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT095/master/version.json
[Pipeline] sh
+ curl -X POST http://183.255.70.81:50080/ota-api/otaUploadFileAndVersion --form 'Content-Type="multipart/form-data"' --form 'file=@"/root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT095/master/params_module_orin_master_HNYP_JLX7E_AT095_2026-10-16_10-42-08.zip"' --form 'version=@"/root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT095/master/version.json"'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
4 169M 0 0 4 7104k 0 9574k 0:00:18 --:--:-- 0:00:18 9561k
13 169M 0 0 13 22.6M 0 13.0M 0:00:12 0:00:01 0:00:11 13.0M
22 169M 0 0 22 38.0M 0 13.8M 0:00:12 0:00:02 0:00:10 13.8M
31 169M 0 0 31 53.8M 0 14.3M 0:00:11 0:00:03 0:00:08 14.3M
41 169M 0 0 41 69.6M 0 14.6M 0:00:11 0:00:04 0:00:07 14.6M
50 169M 0 0 50 85.4M 0 14.8M 0:00:11 0:00:05 0:00:06 15.7M
59 169M 0 0 59 101M 0 15.0M 0:00:11 0:00:06 0:00:05 15.7M
69 169M 0 0 69 117M 0 15.1M 0:00:11 0:00:07 0:00:04 15.8M
78 169M 0 0 78 132M 0 15.0M 0:00:11 0:00:08 0:00:03 15.5M
87 169M 0 0 87 147M 0 15.1M 0:00:11 0:00:09 0:00:02 15.6M
96 169M 0 0 96 163M 0 15.2M 0:00:11 0:00:10 0:00:01 15.6M
100 169M 0 0 100 169M 0 13.9M 0:00:12 0:00:12 --:--:-- 12.7M
100 169M 0 0 100 169M 0 12.9M 0:00:13 0:00:13 --:--:-- 9976k
100 169M 0 0 100 169M 0 12.0M 0:00:14 0:00:14 --:--:-- 7122k
100 169M 0 0 100 169M 0 11.2M 0:00:15 0:00:15 --:--:-- 4071k
100 169M 0 0 100 169M 0 10.5M 0:00:16 0:00:16 --:--:-- 1033k
100 169M 0 0 100 169M 0 9.8M 0:00:17 0:00:17 --:--:-- 0
100 169M 0 0 100 169M 0 9572k 0:00:18 0:00:18 --:--:-- 0
100 169M 0 0 100 169M 0 9071k 0:00:19 0:00:19 --:--:-- 0
100 169M 0 0 100 169M 0 8619k 0:00:20 0:00:20 --:--:-- 0
100 169M 0 0 100 169M 0 8210k 0:00:21 0:00:21 --:--:-- 0
100 169M 0 0 100 169M 0 7838k 0:00:22 0:00:22 --:--:-- 0
100 169M 0 0 100 169M 0 7498k 0:00:23 0:00:23 --:--:-- 0
100 169M 0 0 100 169M 0 7186k 0:00:24 0:00:24 --:--:-- 0
100 169M 0 0 100 169M 0 6900k 0:00:25 0:00:25 --:--:-- 0
100 169M 0 0 100 169M 0 6635k 0:00:26 0:00:26 --:--:-- 0
100 169M 0 0 100 169M 0 6390k 0:00:27 0:00:27 --:--:-- 0
100 169M 0 0 100 169M 0 6162k 0:00:28 0:00:28 --:--:-- 0
100 169M 0 0 100 169M 0 5951k 0:00:29 0:00:29 --:--:-- 0
100 169M 0 0 100 169M 0 5753k 0:00:30 0:00:30 --:--:-- 0
100 169M 0 0 100 169M 0 5568k 0:00:31 0:00:31 --:--:-- 0
100 169M 0 0 100 169M 0 5394k 0:00:32 0:00:32 --:--:-- 0
100 169M 0 0 100 169M 0 5231k 0:00:33 0:00:33 --:--:-- 0
100 169M 0 0 100 169M 0 5077k 0:00:34 0:00:34 --:--:-- 0
100 169M 0 0 100 169M 0 4933k 0:00:35 0:00:35 --:--:-- 0
100 169M 0 43 100 169M 1 4860k 0:00:35 0:00:35 --:--:-- 9
[Pipeline] echo
{"msg":"操作成功","code":200,"data":""}
[Pipeline] readJSON
[Pipeline] echo
[msg:操作成功, code:200, data:]
[Pipeline] echo
status:200
[Pipeline] echo
{"msg":"操作成功","code":200,"data":""}
[Pipeline] }
[Pipeline] // dir
[Pipeline] sh
+ rm -rf /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT095/master@tmp
[Pipeline] sh
+ rm -rf /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT095/master/params_submodule/
[Pipeline] echo
------------------------------------- HNYP_JLX7E_AT095压缩并上传,slave -------------------------------------------
[Pipeline] dir
Running in /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT095/slave
[Pipeline] {
[Pipeline] sh
+ cd /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT095/slave/params/
+ ls -d crane_align/ data_collection/ extrinsics/ hardware/ hdmap/ hdmap_interface/ hesai_lidar/ imv_spreader_detection/ lane_detection/ lidar_correction_files/ lidar_loc_v2/ master/ new_truck_spreader_detection/ perception/ pncc_common_config/ pncc_port_related_config/ pncc_vehicle_related_config/ pointcloud/ prediction/ rslidar_sdk/ segmentation/ slave/ system-ros/
[Pipeline] echo
crane_align/
data_collection/
extrinsics/
hardware/
hdmap/
hdmap_interface/
hesai_lidar/
imv_spreader_detection/
lane_detection/
lidar_correction_files/
lidar_loc_v2/
master/
new_truck_spreader_detection/
perception/
pncc_common_config/
pncc_port_related_config/
pncc_vehicle_related_config/
pointcloud/
prediction/
rslidar_sdk/
segmentation/
slave/
system-ros/
[Pipeline] echo
最终目录包含slave目录,进行合并操作
[Pipeline] sh
+ cp -r /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT095/slave/params/slave/camera_driver /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT095/slave/params/slave/recorder.toml /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT095/slave/params/slave/system-ros /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT095/slave/params/
[Pipeline] sh
+ mkdir -p params_module_orin_slave_HNYP_JLX7E_AT095_2026-10-16_10-42-08/
+ mv params/ params_module_orin_slave_HNYP_JLX7E_AT095_2026-10-16_10-42-08/
[Pipeline] sh
+ zip -rq params_module_orin_slave_HNYP_JLX7E_AT095_2026-10-16_10-42-08.zip params_module_orin_slave_HNYP_JLX7E_AT095_2026-10-16_10-42-08 ./version.json
[Pipeline] echo
/root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT095/slave/params_module_orin_slave_HNYP_JLX7E_AT095_2026-10-16_10-42-08.zip,/root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT095/slave/version.json
[Pipeline] sh
+ curl -X POST http://183.255.70.81:50080/ota-api/otaUploadFileAndVersion --form 'Content-Type="multipart/form-data"' --form 'file=@"/root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT095/slave/params_module_orin_slave_HNYP_JLX7E_AT095_2026-10-16_10-42-08.zip"' --form 'version=@"/root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT095/slave/version.json"'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
5 159M 0 0 5 9152k 0 10.4M 0:00:15 --:--:-- 0:00:15 10.4M
15 159M 0 0 15 24.7M 0 13.3M 0:00:11 0:00:01 0:00:10 13.3M
25 159M 0 0 25 40.0M 0 14.0M 0:00:11 0:00:02 0:00:09 14.0M
34 159M 0 0 34 55.8M 0 14.4M 0:00:11 0:00:03 0:00:08 14.4M
44 159M 0 0 44 71.6M 0 14.7M 0:00:10 0:00:04 0:00:06 14.7M
54 159M 0 0 54 87.4M 0 14.9M 0:00:10 0:00:05 0:00:05 15.7M
64 159M 0 0 64 103M 0 15.0M 0:00:10 0:00:06 0:00:04 15.7M
74 159M 0 0 74 119M 0 15.1M 0:00:10 0:00:07 0:00:03 15.8M
84 159M 0 0 84 134M 0 15.1M 0:00:10 0:00:08 0:00:02 15.7M
94 159M 0 0 94 150M 0 15.2M 0:00:10 0:00:09 0:00:01 15.7M
100 159M 0 0 100 159M 0 13.9M 0:00:11 0:00:11 --:--:-- 12.8M
100 159M 0 0 100 159M 0 12.8M 0:00:12 0:00:12 --:--:-- 10.0M
100 159M 0 0 100 159M 0 11.8M 0:00:13 0:00:13 --:--:-- 7415k
100 159M 0 0 100 159M 0 11.0M 0:00:14 0:00:14 --:--:-- 4602k
100 159M 0 0 100 159M 0 10.3M 0:00:15 0:00:15 --:--:-- 1708k
100 159M 0 0 100 159M 0 9930k 0:00:16 0:00:16 --:--:-- 0
100 159M 0 0 100 159M 0 9361k 0:00:17 0:00:17 --:--:-- 0
100 159M 0 0 100 159M 0 8853k 0:00:18 0:00:18 --:--:-- 0
100 159M 0 0 100 159M 0 8398k 0:00:19 0:00:19 --:--:-- 0
100 159M 0 0 100 159M 0 7987k 0:00:20 0:00:20 --:--:-- 0
100 159M 0 0 100 159M 0 7614k 0:00:21 0:00:21 --:--:-- 0
100 159M 0 0 100 159M 0 7275k 0:00:22 0:00:22 --:--:-- 0
100 159M 0 0 100 159M 0 6964k 0:00:23 0:00:23 --:--:-- 0
100 159M 0 0 100 159M 0 6679k 0:00:24 0:00:24 --:--:-- 0
100 159M 0 0 100 159M 0 6417k 0:00:25 0:00:25 --:--:-- 0
100 159M 0 0 100 159M 0 6174k 0:00:26 0:00:26 --:--:-- 0
100 159M 0 0 100 159M 0 5949k 0:00:27 0:00:27 --:--:-- 0
100 159M 0 0 100 159M 0 5740k 0:00:28 0:00:28 --:--:-- 0
100 159M 0 0 100 159M 0 5545k 0:00:29 0:00:29 --:--:-- 0
100 159M 0 0 100 159M 0 5363k 0:00:30 0:00:30 --:--:-- 0
100 159M 0 0 100 159M 0 5192k 0:00:31 0:00:31 --:--:-- 0
100 159M 0 43 100 159M 1 5114k 0:00:31 0:00:31 --:--:-- 9
100 159M 0 43 100 159M 1 5114k 0:00:31 0:00:31 --:--:-- 12
[Pipeline] echo
{"msg":"操作成功","code":200,"data":""}
[Pipeline] readJSON
[Pipeline] echo
[msg:操作成功, code:200, data:]
[Pipeline] echo
status:200
[Pipeline] echo
{"msg":"操作成功","code":200,"data":""}
[Pipeline] }
[Pipeline] // dir
[Pipeline] sh
+ rm -rf /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT095/slave@tmp
[Pipeline] sh
+ rm -rf /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT095/slave/params_submodule/
[Pipeline] echo
------------------------------------- HNYP_JLX7E_AT096压缩并上传,master -------------------------------------------
[Pipeline] dir
Running in /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT096/master
[Pipeline] {
[Pipeline] sh
+ cd /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT096/master/params/
+ ls -d crane_align/ data_collection/ extrinsics/ hardware/ hdmap/ hdmap_interface/ hesai_lidar/ imv_spreader_detection/ lane_detection/ lidar_correction_files/ lidar_loc_v2/ master/ new_truck_spreader_detection/ perception/ pncc_common_config/ pncc_port_related_config/ pncc_vehicle_related_config/ pointcloud/ prediction/ rslidar_sdk/ segmentation/ slave/ system-ros/
[Pipeline] echo
crane_align/
data_collection/
extrinsics/
hardware/
hdmap/
hdmap_interface/
hesai_lidar/
imv_spreader_detection/
lane_detection/
lidar_correction_files/
lidar_loc_v2/
master/
new_truck_spreader_detection/
perception/
pncc_common_config/
pncc_port_related_config/
pncc_vehicle_related_config/
pointcloud/
prediction/
rslidar_sdk/
segmentation/
slave/
system-ros/
[Pipeline] echo
最终目录包含master目录,进行合并操作
[Pipeline] sh
+ cp -r /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT096/master/params/master/camera_driver /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT096/master/params/master/recorder.toml /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT096/master/params/master/system-ros /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT096/master/params/
[Pipeline] sh
+ mkdir -p params_module_orin_master_HNYP_JLX7E_AT096_2026-10-16_10-42-08/
+ mv params/ params_module_orin_master_HNYP_JLX7E_AT096_2026-10-16_10-42-08/
[Pipeline] sh
+ zip -rq params_module_orin_master_HNYP_JLX7E_AT096_2026-10-16_10-42-08.zip params_module_orin_master_HNYP_JLX7E_AT096_2026-10-16_10-42-08 ./version.json
[Pipeline] echo
/root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT096/master/params_module_orin_master_HNYP_JLX7E_AT096_2026-10-16_10-42-08.zip,/root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT096/master/version.json
[Pipeline] sh
+ curl -X POST http://183.255.70.81:50080/ota-api/otaUploadFileAndVersion --form 'Content-Type="multipart/form-data"' --form 'file=@"/root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT096/master/params_module_orin_master_HNYP_JLX7E_AT096_2026-10-16_10-42-08.zip"' --form 'version=@"/root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT096/master/version.json"'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
3 169M 0 0 3 5888k 0 9058k 0:00:19 --:--:-- 0:00:19 9044k
12 169M 0 0 12 21.5M 0 13.0M 0:00:12 0:00:01 0:00:11 13.0M
21 169M 0 0 21 36.8M 0 13.8M 0:00:12 0:00:02 0:00:10 13.8M
31 169M 0 0 31 52.6M 0 14.4M 0:00:11 0:00:03 0:00:08 14.4M
40 169M 0 0 40 68.4M 0 14.7M 0:00:11 0:00:04 0:00:07 14.7M
49 169M 0 0 49 84.2M 0 14.9M 0:00:11 0:00:05 0:00:06 15.7M
59 169M 0 0 59 100M 0 15.0M 0:00:11 0:00:06 0:00:05 15.7M
67 169M 0 0 67 114M 0 14.8M 0:00:11 0:00:07 0:00:04 15.4M
77 169M 0 0 77 131M 0 15.1M 0:00:11 0:00:08 0:00:03 15.7M
86 169M 0 0 86 147M 0 15.2M 0:00:11 0:00:09 0:00:02 15.7M
96 169M 0 0 96 162M 0 15.2M 0:00:11 0:00:10 0:00:01 15.7M
100 169M 0 0 100 169M 0 14.0M 0:00:12 0:00:12 --:--:-- 12.7M
100 169M 0 0 100 169M 0 12.9M 0:00:13 0:00:13 --:--:-- 10.2M
100 169M 0 0 100 169M 0 12.0M 0:00:14 0:00:14 --:--:-- 7191k
100 169M 0 0 100 169M 0 11.2M 0:00:15 0:00:15 --:--:-- 4194k
100 169M 0 0 100 169M 0 10.5M 0:00:16 0:00:16 --:--:-- 1187k
100 169M 0 0 100 169M 0 9.9M 0:00:17 0:00:17 --:--:-- 0
100 169M 0 0 100 169M 0 9592k 0:00:18 0:00:18 --:--:-- 0
100 169M 0 0 100 169M 0 9088k 0:00:19 0:00:19 --:--:-- 0
100 169M 0 0 100 169M 0 8634k 0:00:20 0:00:20 --:--:-- 0
100 169M 0 0 100 169M 0 8224k 0:00:21 0:00:21 --:--:-- 0
100 169M 0 0 100 169M 0 7851k 0:00:22 0:00:22 --:--:-- 0
100 169M 0 0 100 169M 0 7510k 0:00:23 0:00:23 --:--:-- 0
100 169M 0 0 100 169M 0 7197k 0:00:24 0:00:24 --:--:-- 0
100 169M 0 0 100 169M 0 6910k 0:00:25 0:00:25 --:--:-- 0
100 169M 0 0 100 169M 0 6644k 0:00:26 0:00:26 --:--:-- 0
100 169M 0 0 100 169M 0 6399k 0:00:27 0:00:27 --:--:-- 0
100 169M 0 0 100 169M 0 6170k 0:00:28 0:00:28 --:--:-- 0
100 169M 0 0 100 169M 0 5958k 0:00:29 0:00:29 --:--:-- 0
100 169M 0 0 100 169M 0 5760k 0:00:30 0:00:30 --:--:-- 0
100 169M 0 0 100 169M 0 5574k 0:00:31 0:00:31 --:--:-- 0
100 169M 0 43 100 169M 1 5573k 0:00:31 0:00:31 --:--:-- 10
[Pipeline] echo
{"msg":"操作成功","code":200,"data":""}
[Pipeline] readJSON
[Pipeline] echo
[msg:操作成功, code:200, data:]
[Pipeline] echo
status:200
[Pipeline] echo
{"msg":"操作成功","code":200,"data":""}
[Pipeline] }
[Pipeline] // dir
[Pipeline] sh
+ rm -rf /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT096/master@tmp
[Pipeline] sh
+ rm -rf /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT096/master/params_submodule/
[Pipeline] echo
------------------------------------- HNYP_JLX7E_AT096压缩并上传,slave -------------------------------------------
[Pipeline] dir
Running in /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT096/slave
[Pipeline] {
[Pipeline] sh
+ cd /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT096/slave/params/
+ ls -d crane_align/ data_collection/ extrinsics/ hardware/ hdmap/ hdmap_interface/ hesai_lidar/ imv_spreader_detection/ lane_detection/ lidar_correction_files/ lidar_loc_v2/ master/ new_truck_spreader_detection/ perception/ pncc_common_config/ pncc_port_related_config/ pncc_vehicle_related_config/ pointcloud/ prediction/ rslidar_sdk/ segmentation/ slave/ system-ros/
[Pipeline] echo
crane_align/
data_collection/
extrinsics/
hardware/
hdmap/
hdmap_interface/
hesai_lidar/
imv_spreader_detection/
lane_detection/
lidar_correction_files/
lidar_loc_v2/
master/
new_truck_spreader_detection/
perception/
pncc_common_config/
pncc_port_related_config/
pncc_vehicle_related_config/
pointcloud/
prediction/
rslidar_sdk/
segmentation/
slave/
system-ros/
[Pipeline] echo
最终目录包含slave目录,进行合并操作
[Pipeline] sh
+ cp -r /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT096/slave/params/slave/camera_driver /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT096/slave/params/slave/recorder.toml /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT096/slave/params/slave/system-ros /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT096/slave/params/
[Pipeline] sh
+ mkdir -p params_module_orin_slave_HNYP_JLX7E_AT096_2026-10-16_10-42-08/
+ mv params/ params_module_orin_slave_HNYP_JLX7E_AT096_2026-10-16_10-42-08/
[Pipeline] sh
+ zip -rq params_module_orin_slave_HNYP_JLX7E_AT096_2026-10-16_10-42-08.zip params_module_orin_slave_HNYP_JLX7E_AT096_2026-10-16_10-42-08 ./version.json
[Pipeline] echo
/root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT096/slave/params_module_orin_slave_HNYP_JLX7E_AT096_2026-10-16_10-42-08.zip,/root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT096/slave/version.json
[Pipeline] sh
+ curl -X POST http://183.255.70.81:50080/ota-api/otaUploadFileAndVersion --form 'Content-Type="multipart/form-data"' --form 'file=@"/root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT096/slave/params_module_orin_slave_HNYP_JLX7E_AT096_2026-10-16_10-42-08.zip"' --form 'version=@"/root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT096/slave/version.json"'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
0 159M 0 0 0 1024k 0 2547k 0:01:04 --:--:-- 0:01:04 2540k
10 159M 0 0 10 17.0M 0 12.3M 0:00:12 0:00:01 0:00:11 12.3M
20 159M 0 0 20 32.2M 0 13.6M 0:00:11 0:00:02 0:00:09 13.6M
30 159M 0 0 30 48.0M 0 14.2M 0:00:11 0:00:03 0:00:08 14.2M
40 159M 0 0 40 63.8M 0 14.6M 0:00:10 0:00:04 0:00:06 14.6M
49 159M 0 0 49 79.6M 0 14.8M 0:00:10 0:00:05 0:00:05 15.8M
59 159M 0 0 59 95.5M 0 14.9M 0:00:10 0:00:06 0:00:04 15.7M
69 159M 0 0 69 111M 0 14.9M 0:00:10 0:00:07 0:00:03 15.5M
79 159M 0 0 79 126M 0 15.1M 0:00:10 0:00:08 0:00:02 15.7M
89 159M 0 0 89 142M 0 15.1M 0:00:10 0:00:09 0:00:01 15.7M
99 159M 0 0 99 158M 0 15.2M 0:00:10 0:00:10 --:--:-- 15.7M
100 159M 0 0 100 159M 0 13.9M 0:00:11 0:00:11 --:--:-- 12.5M
100 159M 0 0 100 159M 0 12.8M 0:00:12 0:00:12 --:--:-- 9906k
100 159M 0 0 100 159M 0 11.8M 0:00:13 0:00:13 --:--:-- 6634k
100 159M 0 0 100 159M 0 11.0M 0:00:14 0:00:14 --:--:-- 3450k
100 159M 0 0 100 159M 0 10.3M 0:00:15 0:00:15 --:--:-- 269k
100 159M 0 0 100 159M 0 9925k 0:00:16 0:00:16 --:--:-- 0
100 159M 0 0 100 159M 0 9357k 0:00:17 0:00:17 --:--:-- 0
100 159M 0 0 100 159M 0 8850k 0:00:18 0:00:18 --:--:-- 0
100 159M 0 0 100 159M 0 8395k 0:00:19 0:00:19 --:--:-- 0
100 159M 0 0 100 159M 0 7984k 0:00:20 0:00:20 --:--:-- 0
100 159M 0 0 100 159M 0 7612k 0:00:21 0:00:21 --:--:-- 0
100 159M 0 0 100 159M 0 7273k 0:00:22 0:00:22 --:--:-- 0
100 159M 0 0 100 159M 0 6962k 0:00:23 0:00:23 --:--:-- 0
100 159M 0 0 100 159M 0 6678k 0:00:24 0:00:24 --:--:-- 0
100 159M 0 0 100 159M 0 6415k 0:00:25 0:00:25 --:--:-- 0
100 159M 0 0 100 159M 0 6172k 0:00:26 0:00:26 --:--:-- 0
100 159M 0 0 100 159M 0 5947k 0:00:27 0:00:27 --:--:-- 0
100 159M 0 0 100 159M 0 5738k 0:00:28 0:00:28 --:--:-- 0
100 159M 0 0 100 159M 0 5543k 0:00:29 0:00:29 --:--:-- 0
100 159M 0 43 100 159M 1 5475k 0:00:29 0:00:29 --:--:-- 9
[Pipeline] echo
{"msg":"操作成功","code":200,"data":""}
[Pipeline] readJSON
[Pipeline] echo
[msg:操作成功, code:200, data:]
[Pipeline] echo
status:200
[Pipeline] echo
{"msg":"操作成功","code":200,"data":""}
[Pipeline] }
[Pipeline] // dir
[Pipeline] sh
+ rm -rf /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT096/slave@tmp
[Pipeline] sh
+ rm -rf /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT096/slave/params_submodule/
[Pipeline] echo
------------------------------------- HNYP_JLX7E_AT097压缩并上传,master -------------------------------------------
[Pipeline] dir
Running in /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT097/master
[Pipeline] {
[Pipeline] sh
+ cd /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT097/master/params/
+ ls -d crane_align/ data_collection/ extrinsics/ hardware/ hdmap/ hdmap_interface/ hesai_lidar/ imv_spreader_detection/ lane_detection/ lidar_correction_files/ lidar_loc_v2/ master/ new_truck_spreader_detection/ perception/ pncc_common_config/ pncc_port_related_config/ pncc_vehicle_related_config/ pointcloud/ prediction/ rslidar_sdk/ segmentation/ slave/ system-ros/
[Pipeline] echo
crane_align/
data_collection/
extrinsics/
hardware/
hdmap/
hdmap_interface/
hesai_lidar/
imv_spreader_detection/
lane_detection/
lidar_correction_files/
lidar_loc_v2/
master/
new_truck_spreader_detection/
perception/
pncc_common_config/
pncc_port_related_config/
pncc_vehicle_related_config/
pointcloud/
prediction/
rslidar_sdk/
segmentation/
slave/
system-ros/
[Pipeline] echo
最终目录包含master目录,进行合并操作
[Pipeline] sh
+ cp -r /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT097/master/params/master/camera_driver /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT097/master/params/master/recorder.toml /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT097/master/params/master/system-ros /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT097/master/params/
[Pipeline] sh
+ mkdir -p params_module_orin_master_HNYP_JLX7E_AT097_2026-10-16_10-42-08/
+ mv params/ params_module_orin_master_HNYP_JLX7E_AT097_2026-10-16_10-42-08/
[Pipeline] sh
+ zip -rq params_module_orin_master_HNYP_JLX7E_AT097_2026-10-16_10-42-08.zip params_module_orin_master_HNYP_JLX7E_AT097_2026-10-16_10-42-08 ./version.json
[Pipeline] echo
/root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT097/master/params_module_orin_master_HNYP_JLX7E_AT097_2026-10-16_10-42-08.zip,/root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT097/master/version.json
[Pipeline] sh
+ curl -X POST http://183.255.70.81:50080/ota-api/otaUploadFileAndVersion --form 'Content-Type="multipart/form-data"' --form 'file=@"/root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT097/master/params_module_orin_master_HNYP_JLX7E_AT097_2026-10-16_10-42-08.zip"' --form 'version=@"/root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT097/master/version.json"'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
0 169M 0 0 0 320k 0 1070k 0:02:41 --:--:-- 0:02:41 1066k
9 169M 0 0 9 15.2M 0 11.9M 0:00:14 0:00:01 0:00:13 11.9M
18 169M 0 0 18 30.5M 0 13.4M 0:00:12 0:00:02 0:00:10 13.4M
27 169M 0 0 27 46.3M 0 14.1M 0:00:11 0:00:03 0:00:08 14.1M
36 169M 0 0 36 62.1M 0 14.5M 0:00:11 0:00:04 0:00:07 14.5M
46 169M 0 0 46 78.0M 0 14.7M 0:00:11 0:00:05 0:00:06 15.6M
55 169M 0 0 55 93.8M 0 14.9M 0:00:11 0:00:06 0:00:05 15.7M
64 169M 0 0 64 109M 0 15.0M 0:00:11 0:00:07 0:00:04 15.8M
74 169M 0 0 74 125M 0 15.1M 0:00:11 0:00:08 0:00:03 15.8M
83 169M 0 0 83 141M 0 15.1M 0:00:11 0:00:09 0:00:02 15.6M
92 169M 0 0 92 156M 0 15.2M 0:00:11 0:00:10 0:00:01 15.7M
100 169M 0 0 100 169M 0 14.0M 0:00:12 0:00:12 --:--:-- 12.9M
100 169M 0 0 100 169M 0 12.9M 0:00:13 0:00:13 --:--:-- 10.2M
100 169M 0 0 100 169M 0 12.0M 0:00:14 0:00:14 --:--:-- 7713k
100 169M 0 0 100 169M 0 11.2M 0:00:15 0:00:15 --:--:-- 4954k
100 169M 0 0 100 169M 0 10.5M 0:00:16 0:00:16 --:--:-- 2230k
100 169M 0 0 100 169M 0 9.9M 0:00:17 0:00:17 --:--:-- 0
100 169M 0 0 100 169M 0 9578k 0:00:18 0:00:18 --:--:-- 0
100 169M 0 0 100 169M 0 9076k 0:00:19 0:00:19 --:--:-- 0
100 169M 0 0 100 169M 0 8624k 0:00:20 0:00:20 --:--:-- 0
100 169M 0 0 100 169M 0 8214k 0:00:21 0:00:21 --:--:-- 0
100 169M 0 0 100 169M 0 7842k 0:00:22 0:00:22 --:--:-- 0
100 169M 0 0 100 169M 0 7502k 0:00:23 0:00:23 --:--:-- 0
100 169M 0 0 100 169M 0 7190k 0:00:24 0:00:24 --:--:-- 0
100 169M 0 0 100 169M 0 6903k 0:00:25 0:00:25 --:--:-- 0
100 169M 0 0 100 169M 0 6638k 0:00:26 0:00:26 --:--:-- 0
100 169M 0 0 100 169M 0 6393k 0:00:27 0:00:27 --:--:-- 0
100 169M 0 0 100 169M 0 6165k 0:00:28 0:00:28 --:--:-- 0
100 169M 0 0 100 169M 0 5953k 0:00:29 0:00:29 --:--:-- 0
100 169M 0 0 100 169M 0 5755k 0:00:30 0:00:30 --:--:-- 0
100 169M 0 43 100 169M 1 5605k 0:00:30 0:00:30 --:--:-- 8
100 169M 0 43 100 169M 1 5604k 0:00:30 0:00:30 --:--:-- 11
[Pipeline] echo
{"msg":"操作成功","code":200,"data":""}
[Pipeline] readJSON
[Pipeline] echo
[msg:操作成功, code:200, data:]
[Pipeline] echo
status:200
[Pipeline] echo
{"msg":"操作成功","code":200,"data":""}
[Pipeline] }
[Pipeline] // dir
[Pipeline] sh
+ rm -rf /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT097/master@tmp
[Pipeline] sh
+ rm -rf /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT097/master/params_submodule/
[Pipeline] echo
------------------------------------- HNYP_JLX7E_AT097压缩并上传,slave -------------------------------------------
[Pipeline] dir
Running in /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT097/slave
[Pipeline] {
[Pipeline] sh
+ cd /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT097/slave/params/
+ ls -d crane_align/ data_collection/ extrinsics/ hardware/ hdmap/ hdmap_interface/ hesai_lidar/ imv_spreader_detection/ lane_detection/ lidar_correction_files/ lidar_loc_v2/ master/ new_truck_spreader_detection/ perception/ pncc_common_config/ pncc_port_related_config/ pncc_vehicle_related_config/ pointcloud/ prediction/ rslidar_sdk/ segmentation/ slave/ system-ros/
[Pipeline] echo
crane_align/
data_collection/
extrinsics/
hardware/
hdmap/
hdmap_interface/
hesai_lidar/
imv_spreader_detection/
lane_detection/
lidar_correction_files/
lidar_loc_v2/
master/
new_truck_spreader_detection/
perception/
pncc_common_config/
pncc_port_related_config/
pncc_vehicle_related_config/
pointcloud/
prediction/
rslidar_sdk/
segmentation/
slave/
system-ros/
[Pipeline] echo
最终目录包含slave目录,进行合并操作
[Pipeline] sh
+ cp -r /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT097/slave/params/slave/camera_driver /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT097/slave/params/slave/recorder.toml /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT097/slave/params/slave/system-ros /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT097/slave/params/
[Pipeline] sh
+ mkdir -p params_module_orin_slave_HNYP_JLX7E_AT097_2026-10-16_10-42-08/
+ mv params/ params_module_orin_slave_HNYP_JLX7E_AT097_2026-10-16_10-42-08/
[Pipeline] sh
+ zip -rq params_module_orin_slave_HNYP_JLX7E_AT097_2026-10-16_10-42-08.zip params_module_orin_slave_HNYP_JLX7E_AT097_2026-10-16_10-42-08 ./version.json
[Pipeline] echo
/root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT097/slave/params_module_orin_slave_HNYP_JLX7E_AT097_2026-10-16_10-42-08.zip,/root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT097/slave/version.json
[Pipeline] sh
+ curl -X POST http://183.255.70.81:50080/ota-api/otaUploadFileAndVersion --form 'Content-Type="multipart/form-data"' --form 'file=@"/root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT097/slave/params_module_orin_slave_HNYP_JLX7E_AT097_2026-10-16_10-42-08.zip"' --form 'version=@"/root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT097/slave/version.json"'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
0 159M 0 0 0 192k 0 806k 0:03:22 --:--:-- 0:03:22 803k
9 159M 0 0 9 14.5M 0 11.8M 0:00:13 0:00:01 0:00:12 11.8M
18 159M 0 0 18 29.8M 0 13.4M 0:00:11 0:00:02 0:00:09 13.4M
28 159M 0 0 28 45.6M 0 14.1M 0:00:11 0:00:03 0:00:08 14.1M
38 159M 0 0 38 61.4M 0 14.5M 0:00:10 0:00:04 0:00:06 14.5M
48 159M 0 0 48 77.2M 0 14.7M 0:00:10 0:00:05 0:00:05 15.4M
58 159M 0 0 58 93.1M 0 14.9M 0:00:10 0:00:06 0:00:04 15.7M
68 159M 0 0 68 108M 0 15.0M 0:00:10 0:00:07 0:00:03 15.8M
78 159M 0 0 78 124M 0 15.1M 0:00:10 0:00:08 0:00:02 15.8M
87 159M 0 0 87 140M 0 15.1M 0:00:10 0:00:09 0:00:01 15.7M
97 159M 0 0 97 155M 0 15.2M 0:00:10 0:00:10 --:--:-- 15.7M
100 159M 0 0 100 159M 0 13.9M 0:00:11 0:00:11 --:--:-- 12.6M
100 159M 0 0 100 159M 0 12.7M 0:00:12 0:00:12 --:--:-- 9906k
100 159M 0 0 100 159M 0 11.8M 0:00:13 0:00:13 --:--:-- 6813k
100 159M 0 0 100 159M 0 11.0M 0:00:14 0:00:14 --:--:-- 3824k
100 159M 0 0 100 159M 0 10.3M 0:00:15 0:00:15 --:--:-- 736k
100 159M 0 0 100 159M 0 9919k 0:00:16 0:00:16 --:--:-- 0
100 159M 0 0 100 159M 0 9351k 0:00:17 0:00:17 --:--:-- 0
100 159M 0 0 100 159M 0 8844k 0:00:18 0:00:18 --:--:-- 0
100 159M 0 0 100 159M 0 8390k 0:00:19 0:00:19 --:--:-- 0
100 159M 0 0 100 159M 0 7980k 0:00:20 0:00:20 --:--:-- 0
100 159M 0 0 100 159M 0 7607k 0:00:21 0:00:21 --:--:-- 0
100 159M 0 0 100 159M 0 7269k 0:00:22 0:00:22 --:--:-- 0
100 159M 0 0 100 159M 0 6959k 0:00:23 0:00:23 --:--:-- 0
100 159M 0 0 100 159M 0 6675k 0:00:24 0:00:24 --:--:-- 0
100 159M 0 0 100 159M 0 6412k 0:00:25 0:00:25 --:--:-- 0
100 159M 0 0 100 159M 0 6170k 0:00:26 0:00:26 --:--:-- 0
100 159M 0 0 100 159M 0 5945k 0:00:27 0:00:27 --:--:-- 0
100 159M 0 0 100 159M 0 5736k 0:00:28 0:00:28 --:--:-- 0
100 159M 0 0 100 159M 0 5542k 0:00:29 0:00:29 --:--:-- 0
100 159M 0 43 100 159M 1 5502k 0:00:29 0:00:29 --:--:-- 10
[Pipeline] echo
{"msg":"操作成功","code":200,"data":""}
[Pipeline] readJSON
[Pipeline] echo
[msg:操作成功, code:200, data:]
[Pipeline] echo
status:200
[Pipeline] echo
{"msg":"操作成功","code":200,"data":""}
[Pipeline] }
[Pipeline] // dir
[Pipeline] sh
+ rm -rf /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT097/slave@tmp
[Pipeline] sh
+ rm -rf /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT097/slave/params_submodule/
[Pipeline] echo
------------------------------------- HNYP_JLX7E_AT098压缩并上传,master -------------------------------------------
[Pipeline] dir
Running in /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT098/master
[Pipeline] {
[Pipeline] sh
+ cd /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT098/master/params/
+ ls -d crane_align/ data_collection/ extrinsics/ hardware/ hdmap/ hdmap_interface/ hesai_lidar/ imv_spreader_detection/ lane_detection/ lidar_correction_files/ lidar_loc_v2/ master/ new_truck_spreader_detection/ perception/ pncc_common_config/ pncc_port_related_config/ pncc_vehicle_related_config/ pointcloud/ prediction/ rslidar_sdk/ segmentation/ slave/ system-ros/
[Pipeline] echo
crane_align/
data_collection/
extrinsics/
hardware/
hdmap/
hdmap_interface/
hesai_lidar/
imv_spreader_detection/
lane_detection/
lidar_correction_files/
lidar_loc_v2/
master/
new_truck_spreader_detection/
perception/
pncc_common_config/
pncc_port_related_config/
pncc_vehicle_related_config/
pointcloud/
prediction/
rslidar_sdk/
segmentation/
slave/
system-ros/
[Pipeline] echo
最终目录包含master目录,进行合并操作
[Pipeline] sh
+ cp -r /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT098/master/params/master/camera_driver /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT098/master/params/master/recorder.toml /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT098/master/params/master/system-ros /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT098/master/params/
[Pipeline] sh
+ mkdir -p params_module_orin_master_HNYP_JLX7E_AT098_2026-10-16_10-42-08/
+ mv params/ params_module_orin_master_HNYP_JLX7E_AT098_2026-10-16_10-42-08/
[Pipeline] sh
+ zip -rq params_module_orin_master_HNYP_JLX7E_AT098_2026-10-16_10-42-08.zip params_module_orin_master_HNYP_JLX7E_AT098_2026-10-16_10-42-08 ./version.json
[Pipeline] echo
/root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT098/master/params_module_orin_master_HNYP_JLX7E_AT098_2026-10-16_10-42-08.zip,/root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT098/master/version.json
[Pipeline] sh
+ curl -X POST http://183.255.70.81:50080/ota-api/otaUploadFileAndVersion --form 'Content-Type="multipart/form-data"' --form 'file=@"/root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT098/master/params_module_orin_master_HNYP_JLX7E_AT098_2026-10-16_10-42-08.zip"' --form 'version=@"/root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT098/master/version.json"'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
0 169M 0 0 0 320k 0 1142k 0:02:31 --:--:-- 0:02:31 1138k
8 169M 0 0 8 15.1M 0 12.2M 0:00:13 0:00:01 0:00:12 12.2M
17 169M 0 0 17 30.4M 0 13.6M 0:00:12 0:00:02 0:00:10 13.6M
27 169M 0 0 27 46.2M 0 14.3M 0:00:11 0:00:03 0:00:08 14.3M
36 169M 0 0 36 62.0M 0 14.6M 0:00:11 0:00:04 0:00:07 14.6M
46 169M 0 0 46 77.8M 0 14.8M 0:00:11 0:00:05 0:00:06 15.6M
55 169M 0 0 55 93.5M 0 15.0M 0:00:11 0:00:06 0:00:05 15.6M
64 169M 0 0 64 109M 0 15.1M 0:00:11 0:00:07 0:00:04 15.8M
73 169M 0 0 73 124M 0 15.1M 0:00:11 0:00:08 0:00:03 15.7M
83 169M 0 0 83 140M 0 15.2M 0:00:11 0:00:09 0:00:02 15.7M
92 169M 0 0 92 156M 0 15.2M 0:00:11 0:00:10 0:00:01 15.7M
100 169M 0 0 100 169M 0 14.0M 0:00:12 0:00:12 --:--:-- 13.0M
100 169M 0 0 100 169M 0 12.9M 0:00:13 0:00:13 --:--:-- 10.2M
100 169M 0 0 100 169M 0 12.0M 0:00:14 0:00:14 --:--:-- 7820k
100 169M 0 0 100 169M 0 11.2M 0:00:15 0:00:15 --:--:-- 5020k
100 169M 0 0 100 169M 0 10.5M 0:00:16 0:00:16 --:--:-- 2230k
100 169M 0 0 100 169M 0 9.9M 0:00:17 0:00:17 --:--:-- 0
100 169M 0 0 100 169M 0 9600k 0:00:18 0:00:18 --:--:-- 0
100 169M 0 0 100 169M 0 9095k 0:00:19 0:00:19 --:--:-- 0
100 169M 0 0 100 169M 0 8641k 0:00:20 0:00:20 --:--:-- 0
100 169M 0 0 100 169M 0 8230k 0:00:21 0:00:21 --:--:-- 0
100 169M 0 0 100 169M 0 7856k 0:00:22 0:00:22 --:--:-- 0
100 169M 0 0 100 169M 0 7515k 0:00:23 0:00:23 --:--:-- 0
100 169M 0 0 100 169M 0 7202k 0:00:24 0:00:24 --:--:-- 0
100 169M 0 0 100 169M 0 6914k 0:00:25 0:00:25 --:--:-- 0
100 169M 0 0 100 169M 0 6648k 0:00:26 0:00:26 --:--:-- 0
100 169M 0 0 100 169M 0 6402k 0:00:27 0:00:27 --:--:-- 0
100 169M 0 0 100 169M 0 6174k 0:00:28 0:00:28 --:--:-- 0
100 169M 0 0 100 169M 0 5961k 0:00:29 0:00:29 --:--:-- 0
100 169M 0 0 100 169M 0 5763k 0:00:30 0:00:30 --:--:-- 0
100 169M 0 0 100 169M 0 5577k 0:00:31 0:00:31 --:--:-- 0
100 169M 0 43 100 169M 1 5522k 0:00:31 0:00:31 --:--:-- 9
100 169M 0 43 100 169M 1 5522k 0:00:31 0:00:31 --:--:-- 12
[Pipeline] echo
{"msg":"操作成功","code":200,"data":""}
[Pipeline] readJSON
[Pipeline] echo
[msg:操作成功, code:200, data:]
[Pipeline] echo
status:200
[Pipeline] echo
{"msg":"操作成功","code":200,"data":""}
[Pipeline] }
[Pipeline] // dir
[Pipeline] sh
+ rm -rf /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT098/master@tmp
[Pipeline] sh
+ rm -rf /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT098/master/params_submodule/
[Pipeline] echo
------------------------------------- HNYP_JLX7E_AT098压缩并上传,slave -------------------------------------------
[Pipeline] dir
Running in /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT098/slave
[Pipeline] {
[Pipeline] sh
+ cd /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT098/slave/params/
+ ls -d crane_align/ data_collection/ extrinsics/ hardware/ hdmap/ hdmap_interface/ hesai_lidar/ imv_spreader_detection/ lane_detection/ lidar_correction_files/ lidar_loc_v2/ master/ new_truck_spreader_detection/ perception/ pncc_common_config/ pncc_port_related_config/ pncc_vehicle_related_config/ pointcloud/ prediction/ rslidar_sdk/ segmentation/ slave/ system-ros/
[Pipeline] echo
crane_align/
data_collection/
extrinsics/
hardware/
hdmap/
hdmap_interface/
hesai_lidar/
imv_spreader_detection/
lane_detection/
lidar_correction_files/
lidar_loc_v2/
master/
new_truck_spreader_detection/
perception/
pncc_common_config/
pncc_port_related_config/
pncc_vehicle_related_config/
pointcloud/
prediction/
rslidar_sdk/
segmentation/
slave/
system-ros/
[Pipeline] echo
最终目录包含slave目录,进行合并操作
[Pipeline] sh
+ cp -r /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT098/slave/params/slave/camera_driver /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT098/slave/params/slave/recorder.toml /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT098/slave/params/slave/system-ros /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT098/slave/params/
[Pipeline] sh
+ mkdir -p params_module_orin_slave_HNYP_JLX7E_AT098_2026-10-16_10-42-08/
+ mv params/ params_module_orin_slave_HNYP_JLX7E_AT098_2026-10-16_10-42-08/
[Pipeline] sh
+ zip -rq params_module_orin_slave_HNYP_JLX7E_AT098_2026-10-16_10-42-08.zip params_module_orin_slave_HNYP_JLX7E_AT098_2026-10-16_10-42-08 ./version.json
[Pipeline] echo
/root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT098/slave/params_module_orin_slave_HNYP_JLX7E_AT098_2026-10-16_10-42-08.zip,/root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT098/slave/version.json
[Pipeline] sh
+ curl -X POST http://183.255.70.81:50080/ota-api/otaUploadFileAndVersion --form 'Content-Type="multipart/form-data"' --form 'file=@"/root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT098/slave/params_module_orin_slave_HNYP_JLX7E_AT098_2026-10-16_10-42-08.zip"' --form 'version=@"/root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT098/slave/version.json"'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
2 159M 0 0 2 4288k 0 8029k 0:00:20 --:--:-- 0:00:20 8014k
12 159M 0 0 12 19.9M 0 12.9M 0:00:12 0:00:01 0:00:11 12.9M
22 159M 0 0 22 35.3M 0 13.9M 0:00:11 0:00:02 0:00:09 13.9M
32 159M 0 0 32 51.1M 0 14.4M 0:00:11 0:00:03 0:00:08 14.4M
41 159M 0 0 41 66.9M 0 14.7M 0:00:10 0:00:04 0:00:06 14.7M
51 159M 0 0 51 82.7M 0 14.9M 0:00:10 0:00:05 0:00:05 15.7M
61 159M 0 0 61 98.5M 0 15.0M 0:00:10 0:00:06 0:00:04 15.7M
71 159M 0 0 71 114M 0 15.1M 0:00:10 0:00:07 0:00:03 15.8M
81 159M 0 0 81 130M 0 15.2M 0:00:10 0:00:08 0:00:02 15.8M
91 159M 0 0 91 146M 0 15.3M 0:00:10 0:00:09 0:00:01 15.8M
100 159M 0 0 100 159M 0 14.0M 0:00:11 0:00:11 --:--:-- 13.1M
100 159M 0 0 100 159M 0 12.8M 0:00:12 0:00:12 --:--:-- 10.4M
100 159M 0 0 100 159M 0 11.9M 0:00:13 0:00:13 --:--:-- 7892k
100 159M 0 0 100 159M 0 11.0M 0:00:14 0:00:14 --:--:-- 5127k
100 159M 0 0 100 159M 0 10.3M 0:00:15 0:00:15 --:--:-- 2363k
100 159M 0 0 100 159M 0 9965k 0:00:16 0:00:16 --:--:-- 0
100 159M 0 0 100 159M 0 9391k 0:00:17 0:00:17 --:--:-- 0
100 159M 0 0 100 159M 0 8880k 0:00:18 0:00:18 --:--:-- 0
100 159M 0 0 100 159M 0 8422k 0:00:19 0:00:19 --:--:-- 0
100 159M 0 0 100 159M 0 8009k 0:00:20 0:00:20 --:--:-- 0
100 159M 0 0 100 159M 0 7634k 0:00:21 0:00:21 --:--:-- 0
100 159M 0 0 100 159M 0 7293k 0:00:22 0:00:22 --:--:-- 0
100 159M 0 0 100 159M 0 6981k 0:00:23 0:00:23 --:--:-- 0
100 159M 0 0 100 159M 0 6695k 0:00:24 0:00:24 --:--:-- 0
100 159M 0 0 100 159M 0 6431k 0:00:25 0:00:25 --:--:-- 0
100 159M 0 0 100 159M 0 6187k 0:00:26 0:00:26 --:--:-- 0
100 159M 0 0 100 159M 0 5961k 0:00:27 0:00:27 --:--:-- 0
100 159M 0 0 100 159M 0 5751k 0:00:28 0:00:28 --:--:-- 0
100 159M 0 0 100 159M 0 5555k 0:00:29 0:00:29 --:--:-- 0
100 159M 0 43 100 159M 1 5423k 0:00:30 0:00:30 --:--:-- 9
100 159M 0 43 100 159M 1 5422k 0:00:30 0:00:30 --:--:-- 11
[Pipeline] echo
{"msg":"操作成功","code":200,"data":""}
[Pipeline] readJSON
[Pipeline] echo
[msg:操作成功, code:200, data:]
[Pipeline] echo
status:200
[Pipeline] echo
{"msg":"操作成功","code":200,"data":""}
[Pipeline] }
[Pipeline] // dir
[Pipeline] sh
+ rm -rf /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT098/slave@tmp
[Pipeline] sh
+ rm -rf /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT098/slave/params_submodule/
[Pipeline] echo
------------------------------------- HNYP_JLX7E_AT099压缩并上传,master -------------------------------------------
[Pipeline] dir
Running in /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT099/master
[Pipeline] {
[Pipeline] sh
+ cd /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT099/master/params/
+ ls -d crane_align/ data_collection/ extrinsics/ hardware/ hdmap/ hdmap_interface/ hesai_lidar/ imv_spreader_detection/ lane_detection/ lidar_correction_files/ lidar_loc_v2/ master/ new_truck_spreader_detection/ perception/ pncc_common_config/ pncc_port_related_config/ pncc_vehicle_related_config/ pointcloud/ prediction/ rslidar_sdk/ segmentation/ slave/ system-ros/
[Pipeline] echo
crane_align/
data_collection/
extrinsics/
hardware/
hdmap/
hdmap_interface/
hesai_lidar/
imv_spreader_detection/
lane_detection/
lidar_correction_files/
lidar_loc_v2/
master/
new_truck_spreader_detection/
perception/
pncc_common_config/
pncc_port_related_config/
pncc_vehicle_related_config/
pointcloud/
prediction/
rslidar_sdk/
segmentation/
slave/
system-ros/
[Pipeline] echo
最终目录包含master目录,进行合并操作
[Pipeline] sh
+ cp -r /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT099/master/params/master/camera_driver /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT099/master/params/master/recorder.toml /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT099/master/params/master/system-ros /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT099/master/params/
[Pipeline] sh
+ mkdir -p params_module_orin_master_HNYP_JLX7E_AT099_2026-10-16_10-42-08/
+ mv params/ params_module_orin_master_HNYP_JLX7E_AT099_2026-10-16_10-42-08/
[Pipeline] sh
+ zip -rq params_module_orin_master_HNYP_JLX7E_AT099_2026-10-16_10-42-08.zip params_module_orin_master_HNYP_JLX7E_AT099_2026-10-16_10-42-08 ./version.json
[Pipeline] echo
/root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT099/master/params_module_orin_master_HNYP_JLX7E_AT099_2026-10-16_10-42-08.zip,/root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT099/master/version.json
[Pipeline] sh
+ curl -X POST http://183.255.70.81:50080/ota-api/otaUploadFileAndVersion --form 'Content-Type="multipart/form-data"' --form 'file=@"/root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT099/master/params_module_orin_master_HNYP_JLX7E_AT099_2026-10-16_10-42-08.zip"' --form 'version=@"/root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT099/master/version.json"'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
6 169M 0 0 6 10.8M 0 10.8M 0:00:15 0:00:01 0:00:14 10.8M
15 169M 0 0 15 26.2M 0 13.0M 0:00:12 0:00:02 0:00:10 13.0M
24 169M 0 0 24 42.0M 0 13.9M 0:00:12 0:00:03 0:00:09 13.9M
34 169M 0 0 34 57.8M 0 14.4M 0:00:11 0:00:04 0:00:07 14.4M
43 169M 0 0 43 73.6M 0 14.7M 0:00:11 0:00:05 0:00:06 14.8M
52 169M 0 0 52 89.5M 0 14.8M 0:00:11 0:00:06 0:00:05 15.7M
62 169M 0 0 62 105M 0 15.0M 0:00:11 0:00:07 0:00:04 15.8M
71 169M 0 0 71 120M 0 15.0M 0:00:11 0:00:08 0:00:03 15.6M
80 169M 0 0 80 136M 0 15.1M 0:00:11 0:00:09 0:00:02 15.7M
90 169M 0 0 90 152M 0 15.2M 0:00:11 0:00:10 0:00:01 15.7M
99 169M 0 0 99 168M 0 15.2M 0:00:11 0:00:11 --:--:-- 15.7M
100 169M 0 0 100 169M 0 14.0M 0:00:12 0:00:12 --:--:-- 12.5M
100 169M 0 0 100 169M 0 12.9M 0:00:13 0:00:13 --:--:-- 9851k
100 169M 0 0 100 169M 0 12.0M 0:00:14 0:00:14 --:--:-- 6602k
100 169M 0 0 100 169M 0 11.2M 0:00:15 0:00:15 --:--:-- 3409k
100 169M 0 0 100 169M 0 10.5M 0:00:16 0:00:16 --:--:-- 218k
100 169M 0 0 100 169M 0 9.9M 0:00:17 0:00:17 --:--:-- 0
100 169M 0 0 100 169M 0 9577k 0:00:18 0:00:18 --:--:-- 0
100 169M 0 0 100 169M 0 9075k 0:00:19 0:00:19 --:--:-- 0
100 169M 0 0 100 169M 0 8623k 0:00:20 0:00:20 --:--:-- 0
100 169M 0 0 100 169M 0 8213k 0:00:21 0:00:21 --:--:-- 0
100 169M 0 0 100 169M 0 7841k 0:00:22 0:00:22 --:--:-- 0
100 169M 0 0 100 169M 0 7501k 0:00:23 0:00:23 --:--:-- 0
100 169M 0 0 100 169M 0 7189k 0:00:24 0:00:24 --:--:-- 0
100 169M 0 0 100 169M 0 6902k 0:00:25 0:00:25 --:--:-- 0
100 169M 0 0 100 169M 0 6637k 0:00:26 0:00:26 --:--:-- 0
100 169M 0 0 100 169M 0 6392k 0:00:27 0:00:27 --:--:-- 0
100 169M 0 0 100 169M 0 6164k 0:00:28 0:00:28 --:--:-- 0
100 169M 0 0 100 169M 0 5952k 0:00:29 0:00:29 --:--:-- 0
100 169M 0 0 100 169M 0 5754k 0:00:30 0:00:30 --:--:-- 0
100 169M 0 0 100 169M 0 5569k 0:00:31 0:00:31 --:--:-- 0
100 169M 0 0 100 169M 0 5395k 0:00:32 0:00:32 --:--:-- 0
100 169M 0 0 100 169M 0 5232k 0:00:33 0:00:33 --:--:-- 0
100 169M 0 43 100 169M 1 5183k 0:00:33 0:00:33 --:--:-- 9
[Pipeline] echo
{"msg":"操作成功","code":200,"data":""}
[Pipeline] readJSON
[Pipeline] echo
[msg:操作成功, code:200, data:]
[Pipeline] echo
status:200
[Pipeline] echo
{"msg":"操作成功","code":200,"data":""}
[Pipeline] }
[Pipeline] // dir
[Pipeline] sh
+ rm -rf /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT099/master@tmp
[Pipeline] sh
+ rm -rf /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT099/master/params_submodule/
[Pipeline] echo
------------------------------------- HNYP_JLX7E_AT099压缩并上传,slave -------------------------------------------
[Pipeline] dir
Running in /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT099/slave
[Pipeline] {
[Pipeline] sh
+ cd /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT099/slave/params/
+ ls -d crane_align/ data_collection/ extrinsics/ hardware/ hdmap/ hdmap_interface/ hesai_lidar/ imv_spreader_detection/ lane_detection/ lidar_correction_files/ lidar_loc_v2/ master/ new_truck_spreader_detection/ perception/ pncc_common_config/ pncc_port_related_config/ pncc_vehicle_related_config/ pointcloud/ prediction/ rslidar_sdk/ segmentation/ slave/ system-ros/
[Pipeline] echo
crane_align/
data_collection/
extrinsics/
hardware/
hdmap/
hdmap_interface/
hesai_lidar/
imv_spreader_detection/
lane_detection/
lidar_correction_files/
lidar_loc_v2/
master/
new_truck_spreader_detection/
perception/
pncc_common_config/
pncc_port_related_config/
pncc_vehicle_related_config/
pointcloud/
prediction/
rslidar_sdk/
segmentation/
slave/
system-ros/
[Pipeline] echo
最终目录包含slave目录,进行合并操作
[Pipeline] sh
+ cp -r /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT099/slave/params/slave/camera_driver /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT099/slave/params/slave/recorder.toml /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT099/slave/params/slave/system-ros /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT099/slave/params/
[Pipeline] sh
+ mkdir -p params_module_orin_slave_HNYP_JLX7E_AT099_2026-10-16_10-42-08/
+ mv params/ params_module_orin_slave_HNYP_JLX7E_AT099_2026-10-16_10-42-08/
[Pipeline] sh
+ zip -rq params_module_orin_slave_HNYP_JLX7E_AT099_2026-10-16_10-42-08.zip params_module_orin_slave_HNYP_JLX7E_AT099_2026-10-16_10-42-08 ./version.json
[Pipeline] echo
/root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT099/slave/params_module_orin_slave_HNYP_JLX7E_AT099_2026-10-16_10-42-08.zip,/root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT099/slave/version.json
[Pipeline] sh
+ curl -X POST http://183.255.70.81:50080/ota-api/otaUploadFileAndVersion --form 'Content-Type="multipart/form-data"' --form 'file=@"/root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT099/slave/params_module_orin_slave_HNYP_JLX7E_AT099_2026-10-16_10-42-08.zip"' --form 'version=@"/root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT099/slave/version.json"'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
0 159M 0 0 0 576k 0 1704k 0:01:35 --:--:-- 0:01:35 1699k
10 159M 0 0 10 16.6M 0 12.5M 0:00:12 0:00:01 0:00:11 12.5M
20 159M 0 0 20 32.0M 0 13.7M 0:00:11 0:00:02 0:00:09 13.7M
29 159M 0 0 29 47.8M 0 14.3M 0:00:11 0:00:03 0:00:08 14.3M
39 159M 0 0 39 63.6M 0 14.6M 0:00:10 0:00:04 0:00:06 14.6M
49 159M 0 0 49 79.5M 0 14.9M 0:00:10 0:00:05 0:00:05 15.7M
59 159M 0 0 59 95.3M 0 15.0M 0:00:10 0:00:06 0:00:04 15.7M
69 159M 0 0 69 111M 0 15.1M 0:00:10 0:00:07 0:00:03 15.8M
79 159M 0 0 79 126M 0 15.1M 0:00:10 0:00:08 0:00:02 15.7M
89 159M 0 0 89 142M 0 15.2M 0:00:10 0:00:09 0:00:01 15.7M
99 159M 0 0 99 158M 0 15.2M 0:00:10 0:00:10 --:--:-- 15.7M
100 159M 0 0 100 159M 0 13.9M 0:00:11 0:00:11 --:--:-- 12.6M
100 159M 0 0 100 159M 0 12.8M 0:00:12 0:00:12 --:--:-- 9730k
100 159M 0 0 100 159M 0 11.8M 0:00:13 0:00:13 --:--:-- 6654k
100 159M 0 0 100 159M 0 11.0M 0:00:14 0:00:14 --:--:-- 3479k
100 159M 0 0 100 159M 0 10.3M 0:00:15 0:00:15 --:--:-- 306k
100 159M 0 0 100 159M 0 9941k 0:00:16 0:00:16 --:--:-- 0
100 159M 0 0 100 159M 0 9370k 0:00:17 0:00:17 --:--:-- 0
100 159M 0 0 100 159M 0 8861k 0:00:18 0:00:18 --:--:-- 0
100 159M 0 0 100 159M 0 8405k 0:00:19 0:00:19 --:--:-- 0
100 159M 0 0 100 159M 0 7994k 0:00:20 0:00:20 --:--:-- 0
100 159M 0 0 100 159M 0 7621k 0:00:21 0:00:21 --:--:-- 0
100 159M 0 0 100 159M 0 7281k 0:00:22 0:00:22 --:--:-- 0
100 159M 0 0 100 159M 0 6970k 0:00:23 0:00:23 --:--:-- 0
100 159M 0 0 100 159M 0 6685k 0:00:24 0:00:24 --:--:-- 0
100 159M 0 0 100 159M 0 6422k 0:00:25 0:00:25 --:--:-- 0
100 159M 0 0 100 159M 0 6179k 0:00:26 0:00:26 --:--:-- 0
100 159M 0 0 100 159M 0 5953k 0:00:27 0:00:27 --:--:-- 0
100 159M 0 0 100 159M 0 5744k 0:00:28 0:00:28 --:--:-- 0
100 159M 0 0 100 159M 0 5549k 0:00:29 0:00:29 --:--:-- 0
100 159M 0 0 100 159M 0 5366k 0:00:30 0:00:30 --:--:-- 0
100 159M 0 0 100 159M 0 5195k 0:00:31 0:00:31 --:--:-- 0
100 159M 0 43 100 159M 1 5168k 0:00:31 0:00:31 --:--:-- 10
[Pipeline] echo
{"msg":"操作成功","code":200,"data":""}
[Pipeline] readJSON
[Pipeline] echo
[msg:操作成功, code:200, data:]
[Pipeline] echo
status:200
[Pipeline] echo
{"msg":"操作成功","code":200,"data":""}
[Pipeline] }
[Pipeline] // dir
[Pipeline] sh
+ rm -rf /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT099/slave@tmp
[Pipeline] sh
+ rm -rf /root/workspace/params-submodule/hainan-yangpu-submodule/HNYP_JLX7E_AT099/slave/params_submodule/
[Pipeline] fileExists
[Pipeline] readFile
[Pipeline] writeFile
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Declarative: Post Actions)
[Pipeline] script
[Pipeline] {
[Pipeline] echo
always
[Pipeline] }
[Pipeline] // script
[Pipeline] script
[Pipeline] {
[Pipeline] echo
success
[Pipeline] publishHTML
[htmlpublisher] Archiving HTML reports...
[htmlpublisher] Archiving at BUILD level /root/workspace/params-submodule/hainan-yangpu-submodule to /var/lib/jenkins/jobs/hainan-yangpu-submodule/builds/401/htmlreports/update_20message
[Pipeline] wrap
[Pipeline] {
[Pipeline] script
[Pipeline] {
[Pipeline] echo
user: , telphone:
[Pipeline] }
[Pipeline] // script
[Pipeline] sh
+ curl -X POST 'https://oapi.dingtalk.com/robot/send?access_token=c4e318472bbd19d0449efb4060de213f730dc32b4bf44819381a8fa7adf61983' -H 'Content-Type: application/json' -d '{"msgtype": "markdown","markdown": {"title":"jenkins通知","text": "# 参数发布通知
### [海南洋浦车辆参数]
---
- 状态:<font color=#01B468> 编译成功 </font>
- 执行人:liwenqian
- 更新车辆:
[HNYP_JLX7E_AT051master][HNYP_JLX7E_AT051slave][HNYP_JLX7E_AT052master][HNYP_JLX7E_AT052slave][HNYP_JLX7E_AT053master][HNYP_JLX7E_AT053slave][HNYP_JLX7E_AT054master][HNYP_JLX7E_AT054slave][HNYP_JLX7E_AT066master][HNYP_JLX7E_AT066slave][HNYP_JLX7E_AT067master][HNYP_JLX7E_AT067slave][HNYP_JLX7E_AT068master][HNYP_JLX7E_AT068slave][HNYP_JLX7E_AT069master][HNYP_JLX7E_AT069slave][HNYP_JLX7E_AT070master][HNYP_JLX7E_AT070slave][HNYP_JLX7E_AT071master][HNYP_JLX7E_AT071slave][HNYP_JLX7E_AT072master][HNYP_JLX7E_AT072slave][HNYP_JLX7E_AT073master][HNYP_JLX7E_AT073slave][HNYP_JLX7E_AT074master][HNYP_JLX7E_AT074slave][HNYP_JLX7E_AT075master][HNYP_JLX7E_AT075slave][HNYP_JLX7E_AT095master][HNYP_JLX7E_AT095slave][HNYP_JLX7E_AT096master][HNYP_JLX7E_AT096slave][HNYP_JLX7E_AT097master][HNYP_JLX7E_AT097slave][HNYP_JLX7E_AT098master][HNYP_JLX7E_AT098slave][HNYP_JLX7E_AT099master][HNYP_JLX7E_AT099slave]
- 分支名:main
- 具体模块分支:[点此链接](http://jenkins.vehicle.senior.auto:8080/jenkins/job/hainan-yangpu-submodule/401/update_20message/index.html)
---
> 请ota发布同学尽快发布验证,并在群里同步发布信息~@"},"at": {"atMobiles": [""],"isAtAll": "false"} }'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 1476 100 27 100 1449 139 7507 --:--:-- --:--:-- --:--:-- 7647
[Pipeline] echo
{"errcode":0,"errmsg":"ok"}
[Pipeline] }
[Pipeline] // wrap
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // timeout
[Pipeline] }
Lock released on resource [Label: built-in, Quantity: 1]
[Pipeline] // lock
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS