diff --git a/app.py b/app.py index 0e0d3a7..bf02ef8 100644 --- a/app.py +++ b/app.py @@ -515,6 +515,23 @@ def upload_project_pdfs(project_name): if pdf_file and pdf_file.filename and pdf_file.filename.lower().endswith('.pdf'): pdf_filename = secure_filename(pdf_file.filename) pdf_save_path = os.path.join(pdf_dir_path, pdf_filename) + + # --- Check for overwrite and delete corresponding TXT --- + if os.path.isfile(pdf_save_path): + print(f"Overwriting existing PDF: {pdf_save_path}") + try: + base_name, _ = os.path.splitext(pdf_filename) + txt_output_dir = os.path.join(project_base_path, 'extracted_texts') + txt_file_path = os.path.join(txt_output_dir, base_name + '.txt') + if os.path.isfile(txt_file_path): + print(f"Deleting corresponding TXT file due to overwrite: {txt_file_path}") + os.remove(txt_file_path) + else: + print(f"Corresponding TXT file not found for overwritten PDF: {txt_file_path}") + except OSError as txt_err: + print(f"Warning: Could not delete corresponding TXT file {txt_file_path} during overwrite: {txt_err}") + # --- End TXT deletion check --- + try: print(f"Saving uploaded PDF file to: {pdf_save_path}") pdf_file.save(pdf_save_path) @@ -654,9 +671,33 @@ def add_project(): if pdf_file and pdf_file.filename and pdf_file.filename.lower().endswith('.pdf'): pdf_filename = secure_filename(pdf_file.filename) pdf_save_path = os.path.join(pdf_dir_path, pdf_filename) - print(f"Saving PDF file to: {pdf_save_path}") - pdf_file.save(pdf_save_path) - saved_pdfs.append(pdf_filename) + + # --- Check for overwrite and delete corresponding TXT --- + if os.path.isfile(pdf_save_path): + print(f"Overwriting existing PDF: {pdf_save_path}") + try: + base_name, _ = os.path.splitext(pdf_filename) + txt_output_dir = os.path.join(project_base_path, 'extracted_texts') + txt_file_path = os.path.join(txt_output_dir, base_name + '.txt') + if os.path.isfile(txt_file_path): + print(f"Deleting corresponding TXT file due to overwrite: {txt_file_path}") + os.remove(txt_file_path) + else: + print(f"Corresponding TXT file not found for overwritten PDF: {txt_file_path}") + except OSError as txt_err: + print(f"Warning: Could not delete corresponding TXT file {txt_file_path} during overwrite: {txt_err}") + # --- End TXT deletion check --- + + # --- Save the PDF --- (Ensure this block is correctly indented relative to the outer `if pdf_file...`) + try: + print(f"Saving uploaded PDF file to: {pdf_save_path}") + pdf_file.save(pdf_save_path) + saved_pdfs.append(pdf_filename) + except Exception as e: + print(f"Error saving uploaded PDF {pdf_filename} for {safe_project_name}: {e}") + # Store error message if needed, but don't necessarily stop processing other files + # errors.append(f"Error saving {pdf_filename}: {e}") # Example if you collect errors + elif pdf_file and pdf_file.filename: print(f"Warning: Skipped non-PDF file during initial project add: {pdf_file.filename}") # Optionally add to an errors list to return to the user diff --git a/projects/MTN6/extracted_texts/MTN6_SYSDL-MCM01.txt b/projects/MTN6/extracted_texts/MTN6_SYSDL-MCM01.txt new file mode 100644 index 0000000..dc6504f --- /dev/null +++ b/projects/MTN6/extracted_texts/MTN6_SYSDL-MCM01.txt @@ -0,0 +1,475 @@ +SQR4010T +S7000 +SQR4010TS7000 +SQR4010T +S7000 +SQR4010TS7000 +SQR4010TS7000 SQR4010TS7000 +SQR4010TS7000 SQR4010TS7000 +SQR4010T +S7000 +SQR4010TS7000 +SQR4010T +S7000 +SQR4010TS7000 +SQR4010TS7000 +SQR4010TS7000 +SQR4010TS7000 SQR4010TS7000 +SQR4010TS7000 SQR4010TS7000 +SQR4010TS7000 +SQR4010TS7000 +SQR4010TS7000 +SQR4010TS7000 +SQR4010TS7000 SQR4010TS7000 +SQR4010TS7000 SQR4010TS7000 +SQR4010TS7000 SQR4010TS7000 +SQR4010TS7000 +SQR4010TS7000 +SQR4010TS7000 +SQR4010TS7000 +ST 1.5kW 1.4375 +ST 1.5kW 1.4375 +ST 1.5kW 1.4375ST 1.5kW 1.4375 +PALLET STAGING +PALLET STAGING +SQR4010TS7000 SQR4010TS7000 +SQR4010TS7000 SQR4010TS7000 +SQR40 +10T +S7000 +SQR4010T +S7000 +SQR4010T +S7000 +SQR4010T +S7000 +SQR4010TS7000 SQR4010TS7000 +SQR4010TS7000 SQR4010TS7000 +SQR4010TS7000 SQR4010TS7000 +SQR40 +10T +S7000 +SQR4010T +S7000 +ST 1.5kW 1.4375 +ST 1.5kW 1.4375 +ST 1.5kW 1.4375 +ST 1.5kW 1.4375 +SQR4010T +S7000 +SQR4010TS7000 +SQR4010T +S7000 +SQR4010TS7000 +SQR4010TS7000 SQR4010TS7000 +SQR4010TS7000 SQR4010TS7000 +SQR4010T +S7000 +SQR4010TS7000 +SQR4010T +S7000 +SQR4010TS7000 +SQR4010TS7000 +SQR4010TS7000 +SQR4010TS7000 SQR4010TS7000 +TRAILER DIMENSIONS +TRAILER DIMENSIONS +EL. 2'-6" +EL. 2'-6"EL. 2'-6" +EL. 5'-2"TYP. (2) PLCS +EL. 6'-4"TYP. (2) PLCS +EL. 13'-1"EL. 3'-1" (PLTF)TYP. (4) PLCS +EL. 2'-6" +EL. 5'-2"TYP. (2) PLCS +EL. 6'-4"TYP. (2) PLCS +EL. 13'-1"EL. 3'-1" (PLTF)TYP. (3) PLCS +UL1_3_VFD15HP280 FPM UL1_4_VFD15HP280 FPMUL1_5_VFD13HP420 FPMUL1_6_VFD13HP420 FPMUL1_7_VFD13HP420 FPM +UL1_8_VFD13HP420 FPM UL1_9_VFD15HP280 FPM UL1_10A_VFD13HP280 FPMUL1_10B_VFD13HP280 FPM +UL1_11_VFD12HP280 FPMUL1_12_VFD12HP280 FPMUL1_13_VFD15HP280 FPM +UL2_3_VFD13HP280 FPM UL2_4_VFD15HP280 FPM +UL2_5_VFD13HP280 FPMUL2_6_VFD13HP420 FPMUL2_7_VFD13HP420 FPMUL2_8_VFD13HP420 FPMUL2_9_VFD13HP420 FPMUL2_10_VFD13HP420 FPM +UL3_1_VFD12HP120 FPM +UL3_2_VFD17.5HP280 FPMUL3_3_VFD13HP280 FPMUL3_4_VFD12HP280 FPMUL3_5_VFD13HP420 FPMUL3_6_VFD13HP420 FPMUL3_7_VFD13HP420 FPMUL3_8_VFD13HP420 FPMUL3_9_VFD13HP420 FPM +UL4_3_VFD13HP280 FPM UL4_4_VFD15HP280 FPM +UL4_9_VFD13HP280 FPM +UL5_3_VFD13HP280 FPM UL5_4_VFD15HP280 FPM +UL3_3_ENC1 +UL3_5_ENC1UL3_6_ENC1UL3_7_ENC1UL3_8_ENC1UL2_9_ENC1UL2_8_ENC1UL2_7_ENC1UL2_6_ENC1 +UL2_5_ENC1 +UL1_5_ENC1UL1_6_ENC1UL1_7_ENC1 +UL5_3_ENC1 UL5_4_ENC1 +UL4_3_ENC1 UL4_4_ENC1 +UL3_2_ENC1 +UL3_4_ENC1UL2_3_ENC1 UL2_4_ENC1 +UL1_3_ENC1 UL1_4_ENC1 UL1_9_ENC1 +UL1_5_TPE1UL1_6_TPE1UL1_7_TPE1 +UL1_9_TPE3 +UL1_9_TPE1 +UL1_9_TPE2 +UL1_9_TPE4 +UL1_9_TPE5 +UL1_11_TPE1UL1_11_TPE2 +UL1_12_TPE1 +UL4_9_TPE1 +UL4_9_TPE2 +UL4_9_TPE3 +UL4_9_TPE4 +UL4_9_TPE5 +UL5_3_TPE2UL4_3_TPE2 +UL3_1_TPE1 +UL2_3_TPE2UL1_3_TPE2 +UL1_4_TPE1UL2_4_TPE1 UL5_4_TPE1 +UL3_4_TPE1 +UL3_4_TPE2UL3_5_TPE1UL3_6_TPE1UL3_7_TPE1UL3_8_TPE1UL2_9_TPE1UL2_8_TPE1 +UL2_7_TPE1UL2_6_TPE2UL2_6_TPE1 +EPCUL5_4_EPC2 +EPCUL5_4_EPC1 +EPCUL4_4_EPC2 +EPCUL4_4_EPC1 +EPCUL3_2_EPC2 +EPCUL3_2_EPC1EPCUL2_4_EPC2 +EPCUL2_4_EPC1 +EPCUL1_4_EPC2 +EPCUL1_4_EPC1 +RBBGUL5_4_S2 +RBBGUL5_4_S1RBBGUL4_4_S2 +RBBGUL4_4_S1 +RBBGUL3_2_S2 +RBBGUL2_4_S2RBBGUL3_2_S1 +RBBGUL2_4_S1RBBGUL1_4_S2 +RBBGUL1_4_S1 +EPCUL4_9_EPC2 +EPCUL4_9_EPC1 +RBBGUL4_9_S2 +RBBGUL4_9_S1A +EPCUL1_9_EPC2 +EPCUL1_9_EPC1 +RBBGUL1_9_S2 +RBBGUL1_9_S1A +RBB +RBBGPS1_1_S2 +STOP THE EPC AT 8'-3" +STOP THE EPC AT 8'-3" +EPCUL3_1_EPC2EPCUL3_1_EPC1 +RGUL3_1_SS1 +WUL1_9_JR1 +WUL1_9_JR2 +WUL4_9_JR2 +WUL4_9_JR1 +UL7_3_VFD15HP280 FPMUL7_4_VFD15HP280 FPM +UL9_3_VFD15HP280 FPM +UL9_4_VFD15HP280 FPM +UL11_3_VFD15HP280 FPM +UL11_11A_VFD13HP280 FPMUL11_11B_VFD13HP280 FPMUL11_12_VFD12HP280 FPMUL11_13_VFD12HP280 FPM +UL11_14_VFD15HP280 FPM +UL12_3_VFD15HP280 FPM +UL7_3_TPE2 +UL11_9_ENC1UL11_12_ENC1UL11_13_ENC1 +UL7_4_ENC1UL7_3_ENC1 +EPCUL11_9_EPC1 +EPCUL11_10_EPC1 +RBBGUL11_9_S1A +RBBGUL11_10_S1 +BB +GPS3_1_S2 +RBBGPS4_1_S2 +RA +STOP THE EPC AT 8'-3" +STOP THE EPC AT 8'-3" +WUL11_9_JR1 +V +PS2_3_VFD15HP300 FPM +PS1_1_VFD12HP300 FPMPS1_2_VFD12HP300 FPM +PS2_4_VFD13HP300 FPM PS2_5_VFD17.5HP300 FPMPS2_6_VFD13HP300 FPM +PS1_4_VFD17.5HP300 FPMPS1_3_VFD12HP300 FPM +PS1_5_VFD15HP300 FPM +EPCPS1_1_EP2EPCPS1_1_EPC1RBBGPS1_1_S1 +EPCPS2_6_EPC2RBBGPS2_6_S2 +EPCPS1_5_EPC1 +RBBGPS1_5_S1 +PS1_2_TPE1 +PS1_4_TPE1 +PS1_4_TPE2 +PS2_5_TPE1 +PS2_5_TPE2 +BBA +PS1_2_TPE2 EPCPS1_5_EPC2 +RBBGPS1_5_S2 +STOP THE EPC AT 8'-3" +EPCPS2_6_EPC1PS2_6_TPE1PS1_5_TPE1 +PS2_3_JPE1 +RBBGPS2_6_S1 +PS4_1_VFD12HP300 FPMPS4_2_VFD13HP300 FPMPS4_3_VFD12HP220 FPMPS4_4_VFD13HP220 FPMPS4_5_VFD15HP300 FPM PS4_6_VFD17.5HP300 FPM PS4_7_VFD17.5HP300 FPM PS4_8_VFD15HP300 FPM +PS3_1_VFD12HP300 FPMPS3_2_VFD13HP300 FPM +PS3_3_VFD13HP300 FPMPS3_4_VFD12HP300 FPM PS3_5_VFD15HP300 FPM PS3_6_VFD15HP300 FPM PS3_7_VFD110HP300 FPM +PS4_9_VFD13HP300 FPM +PS3_8_VFD13HP300 FPMPS3_9_VFD15HP300 FPMPS3_10_VFD15HP300 FPM +PS4_11_VFD15HP300 FPMPS4_12_VFD13HP300 FPM +PS3_11_VFD13HP300 FPMPS3_12_VFD13HP300 FPM +PS4_13_VFD13HP300 FPMPS4_14_VFD13HP300 FPM +EPCPS4_1_EPC2EPCPS4_1_EPC1RBBGPS4_1_S1 +EPCPS3_1_EPC1EPCPS3_1_EPC2RBBGPS3_1_S1 +EPCPS4_14_EPC1R +EPCPS3_12_EPC1RBBGPS3_12_S1 +PS4_2_TPE1 +PS3_1_TPE1 +PS3_5_TPE1 +PS3_5_TPE2 PS3_9_TPE1 +PS4_14_TPE1 +PS3_12_TPE1 +BBAWPS3_3_JR1PS3_3_JPE1 +STOP THE EPC AT 8'-3" +STOP THE EPC AT 8'-3" +EPCPS3_12_EPC2 +RBBGPS3_12_S2A +STOP THE EPC AT 8'-3" +STOP THE EPC AT 8'-3" +EPCPS4_14_EPC2 +BBA +BBA +BBGPS4_14_S1A +RBBGPS4_14_S2BBA +WPS4_8_JR1 +WPS4_13_JR1 +WPS3_7_JR1 +WPS2_3_JR1RBB +STOP THE EPC AT 8'-3" +EPCUL2_3_EPC2 +EPCUL2_3_EPC1 +RBB +STOP THE EPC AT 8'-3" +EPCUL1_3_EPC2 +EPCUL1_3_EPC1 +ST 1.5kW 1.4375 +ST 1.5kW 1.4375 +STOP THE EPC AT 8'-3" +ST 1.5kW 1.4375 +X-SQ-41.5_43-90-P2.5+ +ST 4.0kW 1.4375 +ST 1.5kW 1.4375 +X-SQ-41.5_43-90-P2.5+ +ST 4.0kW 1.4375 +X-SQ-41.5_43-90-P2.5+ +ST 4.0kW 1.4375 +X-SQ-41.5_43-90-P2.5+ +ST 4.0kW 1.4375 +STOP THE EPC AT 8'-3" +STOP THE EPC AT 8'-3" +STOP THE EPC AT 8'-3" +STOP THE EPC AT 8'-3" +V +PS3_2_TPE1 +EPCUL4_3_EPC2 +EPCUL4_3_EPC1 +RBBEPCUL5_3_EPC2 +EPCUL5_3_EPC1 +EPCUL7_1_EPC2 +EPCUL7_1_EPC1 +GUL2_3_S2 +GUL1_3_S2 +UL3_2_TPE2 +GUL5_3_S2 +STOP THE EPC AT 8'-3" +STOP THE EPC AT 8'-3" +UL1_3_TPE1UL2_3_TPE1 +UL2_3_LPE1 +UL2_3_LPE2UL4_3_TPE1 +UL4_3_LPE1 +UL4_3_LPE2UL5_3_TPE1 +UL5_3_LPE2 +UL5_3_LPE1 +UL2_3_FIO1 +UL1_3_FIO1 +UL3_2_TPE1UL3_2_LPE2 +UL3_2_LPE1 +UL3_2_FIO1 +UL4_3_FIO1 +UL5_3_FIO1 +UL6_2_FIO1 +UL7_3_FIO1 +UL8_2_FIO1 +UL9_3_FIO1 +UL10_2_FIO1 +UL11_3_FIO1 +UL12_3_FIO1 +RBBGUL1_3_S1 +RBBGUL2_3_S1 +UL1_3_LPE1 +UL1_3_DPE2 +UL1_8_ENC1UL1_8_TPE1 +RBB +RBBGUL4_3_S2 +RBBGUL4_3_S1 UL4_5_VFD13HP420 FPMUL4_6_VFD13HP420 FPMUL4_7_VFD13HP420 FPM +UL4_8_VFD13HP420 FPM +UL4_5_ENC1UL4_6_ENC1UL4_7_ENC1UL4_5_TPE1UL4_6_TPE1UL4_7_TPE1 +UL4_4_TPE1 +UL4_8_ENC1UL4_8_TPE1 UL4_10A_VFD13HP280 FPMUL4_10B_VFD13HP280 FPM +UL4_11_VFD12HP280 FPMUL4_12_VFD12HP280 FPMUL4_13_VFD15HP280 FPM +UL4_11_TPE1UL4_11_TPE2 +UL4_12_TPE1RBBGPS2_1_S2EPCPS2_1_EP2EPCPS2_1_EPC1RBBGPS2_1_S1PS2_2_TPE1PS2_1_VFD12HP300 FPMPS2_2_VFD12HP300 FPMPS2_2_TPE2 +RBBGUL5_3_S1 +UL5_5_VFD13HP280 FPMUL5_6_VFD13HP420 FPMUL5_7_VFD13HP420 FPMUL5_8_VFD13HP420 FPMUL5_9_VFD13HP420 FPMUL5_10_VFD13HP420 FPMUL5_9_ENC1UL5_8_ENC1UL5_7_ENC1UL5_6_ENC1 +UL5_5_ENC1 +UL5_9_TPE1UL5_8_TPE1 +UL5_7_TPE1UL5_6_TPE2UL5_6_TPE1 +UL6_1_VFD12HP120 FPM UL6_2_VFD17.5HP280 FPM +UL6_3_VFD13HP280 FPM +UL6_4_VFD12HP280 FPMUL6_5_VFD13HP420 FPMUL6_6_VFD13HP420 FPMUL6_7_VFD13HP420 FPMUL6_8_VFD13HP420 FPMUL6_9_VFD13HP420 FPM +UL6_3_ENC1 +UL6_5_ENC1UL6_6_ENC1UL6_7_ENC1UL6_8_ENC1 +UL6_2_ENC1 +UL6_4_ENC1 +UL6_1_TPE1 UL6_4_TPE1 +UL6_4_TPE2UL6_5_TPE1UL6_6_TPE1UL6_7_TPE1UL6_8_TPE1 +EPCUL6_2_EPC2 +EPCUL6_2_EPC1 +RBBGUL6_2_S2RBBGUL6_2_S1 +RBBEPCUL6_1_EPC2EPCUL6_1_EPC1 +RGUL6_1_SS1 +UL6_2_TPE2 +UL6_2_TPE1UL6_2_LPE2 +UL6_2_LPE1RBB +UL12_DPM1MCM01 +UL11_DPM1MCM01 +UL10_DPM1MCM01 +UL9_DPM1MCM01 +UL8_DPM1MCM01 +UL7_DPM1MCM01 +UL6_DPM1MCM01 +UL5_DPM1MCM01 +UL4_DPM1MCM01 +UL3_DPM1MCM01 +UL2_DPM1MCM01 +UL1_DPM1MCM01 +PS1_DPM1MCM01 +PS3_DPM1MCM01 PS3_DPM2MCM01 +MCM01 +RBBGUL7_3_S2UL7_3_TPE1 +UL7_3_LPE2 +UL7_3_LPE1RBBGUL7_3_S1 UL7_9_VFD13HP280 FPM +UL7_9_TPE2 +UL7_9_TPE4 +UL7_9_TPE5EPCUL7_4_EPC2 +EPCUL7_4_EPC1 +RBBGUL7_4_S2 +RBBGUL7_4_S1 +EPCUL7_9_EPC2 +EPCUL7_9_EPC1 +RBBGUL7_9_S2 +RBBGUL7_9_S1A +WUL7_9_JR2 +WUL7_9_JR1 +UL7_5_VFD13HP420 FPMUL7_6_VFD13HP420 FPMUL7_7_VFD13HP420 FPM +UL7_8_VFD13HP420 FPM +UL7_5_ENC1UL7_6_ENC1UL7_7_ENC1UL7_5_TPE1UL7_6_TPE1UL7_7_TPE1 +UL7_4_TPE1 +UL7_8_ENC1UL7_8_TPE1 UL7_10A_VFD13HP280 FPMUL7_10B_VFD13HP280 FPM +UL7_11_VFD12HP280 FPMUL7_12_VFD12HP280 FPM +UL7_13_VFD15HP280 FPM +UL7_11_TPE1UL7_11_TPE2 +UL7_12_TPE1 +UL7_9_TPE1 +PS3_6_TPE1 +PS3_7_JPE1 +PS3_9_TPE2 +PS3_10_JPE1 +PS3_12_TPE2 +UL8_1_VFD12HP120 FPM +UL8_1_TPE1 +RBBEPCUL8_1_EPC2EPCUL8_1_EPC1 +RGUL8_1_SS1 +UL8_2_TPE1UL8_2_LPE2 +UL8_2_LPE1RBB +UL8_3_VFD15HP280 FPMUL8_3_ENC1 +UL8_3_TPE1 +EPCUL8_3_EPC2RBBGUL8_3_S2 +RBBGUL8_3_S1 +UL8_4_VFD13HP280 FPMUL8_5_VFD13HP420 FPMUL8_6_VFD13HP420 FPMUL8_7_VFD13HP420 FPMUL8_8_VFD13HP420 FPMUL8_9_VFD13HP420 FPMUL8_8_ENC1UL8_7_ENC1UL8_6_ENC1 +UL8_5_ENC1 +UL8_4_ENC1 +UL8_8_TPE1UL8_7_TPE1 +UL8_6_TPE1UL8_5_TPE2UL8_5_TPE1 +UL8_2_VFD17.5HP120 FPM +EPCUL8_3_EPC1 +EPCUL9_1_EPC2 +EPCUL9_1_EPC1 +RBBGUL9_3_S2UL9_3_TPE1 +UL9_3_LPE2 +UL9_3_LPE1RBBGUL9_3_S1 UL9_3_ENC1 +UL9_5_VFD12HP280 FPM +UL9_6_VFD12HP280 FPMUL9_7_VFD13HP420 FPMUL9_8_VFD13HP420 FPMUL9_9_VFD13HP420 FPMUL9_10_VFD13HP420 FPMUL9_11_VFD12HP420 FPM +UL9_5_ENC1 +UL9_7_ENC1UL9_8_ENC1UL9_9_ENC1UL9_10_ENC1 +UL9_6_ENC1 +UL9_6_TPE1 +UL9_6_TPE2UL9_7_TPE1UL9_8_TPE1UL9_9_TPE1UL9_10_TPE1 +EPCUL9_4_EPC2 +EPCUL9_4_EPC1 +RBBGUL9_4_S2RBBGUL9_4_S1UL9_4_ENC1 +UL8_2_TPE2 +UL9_3_TPE2 +UL9_4_TPE1 +UL10_1_VFD12HP120 FPM +UL10_1_TPE1 +RBBEPCUL10_1_EPC2EPCUL10_1_EPC1 +RGUL10_1_SS1 +UL10_2_TPE1 +UL10_2_LPE2 +UL10_2_LPE1RBB +UL10_2_VFD17.5HP120 FPM EPCUL10_3_EPC2RBBGUL10_3_S2RBBGUL10_3_S1EPCUL10_3_EPC1 +UL10_2_TPE2UL10_3_VFD12HP120 FPMUL10_4_VFD13HP420 FPMUL10_5_VFD13HP420 FPMUL10_6_VFD13HP420 FPMUL10_7_VFD13HP420 FPM +UL10_4_ENC1UL10_5_ENC1UL10_6_ENC1UL10_4_TPE1UL10_5_TPE1UL10_6_TPE1 +UL10_3_TPE1 +UL10_7_ENC1UL10_7_TPE1UL10_8_VFD13HP420 FPMUL10_9_VFD13HP420 FPM +UL10_10_VFD12HP420 FPM +UL10_8_ENC1 +UL10_9_TPE1UL10_9_TPE2UL10_9_ENC1 +EPCUL11_1_EPC2EPCUL11_1_EPC1 +RBBG +UL11_3_S2 +UL11_3_TPE1UL11_3_LPE2 +UL11_3_LPE1RBBGUL11_3_S1 UL11_3_ENC1UL11_3_TPE2 +EPCUL11_4_EPC2 +EPCUL11_4_EPC1 +RBBGUL11_4_S2RBBGUL11_4_S1 +UL11_8_VFD13HP300 FPM +UL11_5_ENC1UL11_6_ENC1UL11_7_ENC1 +UL11_5_TPE1UL11_6_TPE1UL11_7_TPE1UL11_4_TPE1 +UL11_8_ENC1UL11_8_TPE1 +UL11_7_VFD13HP300 FPMUL11_6_VFD13HP300 FPMUL11_5_VFD13HP300 FPMUL11_4_VFD15HP420 FPM +UL11_9_TPE1UL11_9_TPE2 +UL11_9_TPE3UL11_9_VFD13HP300 FPMUL11_10_VFD15HP280 FPM +UL11_10_ENC1 +UL11_10_TPE1 +UL11_10_TPE2 +UL11_12_TPE1 +UL11_12_TPE2 +UL11_13_TPE1 +EPCUL12_3_EPC2 +EPCUL12_3_EPC1 +RBBG +UL12_3_S2UL12_3_TPE1UL12_3_LPE2 +UL12_3_LPE1RBBGUL12_3_S1 +UL12_3_TPE2UL12_3_ENC1 +UL12_4_VFD15HP280 FPMUL12_4_ENC1 +UL12_4_TPE1 +EPCUL12_4_EPC2 +EPCUL12_4_EPC1 +RBBGUL12_4_S2 +RBBGUL12_4_S1 +UL12_5_VFD12HP280 FPMUL12_6_VFD13HP420 FPMUL12_8_VFD13HP420 FPM +UL12_9_VFD13HP420 FPMUL12_10_VFD12HP420 FPMUL12_9_ENC1UL12_8_ENC1UL12_7_ENC1UL12_6_ENC1 +UL12_5_ENC1 +UL12_9_TPE1UL12_8_TPE1UL12_7_TPE1UL12_6_TPE2UL12_6_TPE1UL12_7_VFD13HP420 FPM +UL11_14_TPE1 +PS4_2_JPE1 +PS4_4_TPE1PS4_4_TPE2 +BBA +WPS4_2_JR1 +PS4_5_TPE1 PS4_6_TPE1 PS4_7_TPE1 PS4_8_JPE1 +PS4_10_TPE1 +PS4_10_VFD110HP300 FPM +PS4_10_TPE2 +PS4_11_TPE1 +PS4_12_JPE1 +MCM01 \ No newline at end of file diff --git a/projects/MTN6/extracted_texts/MTN6_SYSDL-MCM02.txt b/projects/MTN6/extracted_texts/MTN6_SYSDL-MCM02.txt new file mode 100644 index 0000000..d38cf7f --- /dev/null +++ b/projects/MTN6/extracted_texts/MTN6_SYSDL-MCM02.txt @@ -0,0 +1,401 @@ +SQR4010TS7000 SQR4010TS7000 +SQR4010TS7000 SQR4010TS7000 +SQR4010TS7000 SQR4010TS7000 +SQR4010TS7000 +SQR4010TS7000 +SQR4010TS7000 +SQR4010TS7000 +SQR4010TS7000 SQR4010TS7000 +SQR4010TS7000 SQR4010TS7000 +SQR4010TS7000 +SQR4010TS7000 +SQR4010TS7000 SQR4010TS7000 +SQR40 +10T +S7000 +SQR4010T +S7000 +SQR4010T +S7000 +SQR4010T +S7000 +SQR4010TS7000 SQR4010TS7000 +SQR4010TS7000 SQR4010TS7000 +SQR4010TS7000 SQR4010TS7000 +SQR40 +10T +S7000 +SQR4010T +S7000 +SQR4010TS7000 +SQR4010TS7000 +SQR4010TS7000 SQR4010TS7000 +SQR4010TS7000 SQR4010TS7000 +SQR4010TS7000 +SQR40 +10T +S7000 +SQR4010TS7000 +SQR4010T +S7000 +SQR4010TS7000 SQR4010TS7000 +SQR4010TS7000 SQR4010TS7000 +SQR4010TS7000 SQR4010TS7000 +SQR4010TS7000 +SQR40 +10T +S7000 +ST 1.5kW 1.4375 +ST 1.5kW 1.4375 +ST 1.5kW 1.4375 +ST 1.5kW 1.4375 +ST 1.5kW 1.4375 +ST 1.5kW 1.4375 +PS5_12_TPE2 +UL16_3_TPE2 UL17_4_TPE1 +UL16_2_TPE2UL16_3_TPE1UL15_4_TPE1 +UL15_3_TPE2 +UL14_3_TPE2 +UL13_10_TPE2 +UL13_11_TPE1 +UL21_16_TPE1 +UL21_15_TPE2 +UL21_11_ENC1 +UL18_10_ENC1 +UL18_3_ENC1 +UL17_3_ENC1 UL17_4_ENC1 +UL16_2_ENC1 +UL15_3_ENC1 UL15_4_ENC1 +UL15_6_ENC1 +UL13_8_ENC1 +UL14_3_ENC1 +UL21_13_TPE1 +UL21_13_TPE2 +UL13_8_TPE5 +UL13_8_TPE4 +UL13_8_TPE3 +UL13_8_TPE2 +UL13_8_TPE1 +UL18_12_TPE2 +PS5_8_JPE1 +UL21_11_TPE2 +UL21_11_TPE3 +UL21_11_TPE4 +UL16_4_TPE1 +UL17_5_TPE1UL17_7_TPE1UL17_7_TPE2UL17_8_TPE1UL17_9_TPE1 +UL16_6_TPE1 +UL15_6_TPE1 +UL18_10_TPE1 +UL18_10_TPE2UL18_10_TPE3 +UL18_10_TPE4PS5_10_TPE1 +UL13_10_ENC1UL13_11_ENC1 +UL18_14_ENC1UL18_15_ENC1 +UL21_15_ENC1UL21_16_ENC1UL21_13_ENC1UL16_4_ENC1 +UL17_5_ENC1UL17_6_ENC1 +UL17_7_ENC1UL17_8_ENC1UL17_9_ENC1 +UL16_5_ENC1 UL21_12_ENC1 +UL15_11_ENC1 +EPCUL17_4_EPC2 +EPCUL17_4_EPC1 +EPCUL16_2_EPC2 +EPCUL16_2_EPC1 +EPCUL15_4_EPC2 +EPCUL15_4_EPC1 +RBBGUL17_4_S2 +RBBGUL17_4_S1RBBGUL16_2_S2 +RBBGUL16_2_S1RBBGUL15_4_S2 +RBBGUL15_4_S1 +EPC +UL21_11_EPC1 +EPCUL21_11_EPC2 +RBBGUL21_11_S1A +RBBGUL21_11_S2 +EPCUL21_13_EPC1RBBGUL21_13_S1 +EPCUL21_13_EPC2RBBGUL21_13_S2 +EPC +UL18_10_EPC1RBBGUL18_10_S1A +EPCUL18_10_EPC2RBBGUL18_10_S2 +EPCUL13_8_EPC2 +EPCUL13_8_EPC1 +RBBGUL13_8_S2 +RBBGUL13_8_S1A +BBGPS7_1_S2 +BBGPS6_1_S2 +BBGPS5_1_S2 +RA +RA +RA +STOP THE EPC AT 8'-3" +STOP THE EPC AT 8'-3" +RBB +STOP THE EPC AT 8'-3" +WUL13_8_JR2 +WUL13_8_JR1 +WUL18_10_JR3 +W +UL18_10_JR1 +WUL21_11_JR1 +V +PS5_1_VFD12HP300 FPMPS5_2_VFD13HP300 FPM +PS6_1_VFD12HP300 FPMPS6_2_VFD13HP300 FPM +PS7_1_VFD12HP300 FPMPS7_2_VFD13HP300 FPM +PS5_3_VFD13HP300 FPM +PS5_4_VFD13HP300 FPM +PS5_5_VFD15HP300 FPM PS5_6_VFD15HP300 FPMPS5_7_VFD110HP300 FPM +PS5_8_VFD15HP300 FPM +PS5_9_VFD13HP300 FPM +PS5_10_VFD110HP300 FPM +PS5_11_VFD12HP300 FPMPS5_12_VFD110HP300 FPMPS5_13_VFD13HP300 FPM +PS6_5_VFD15HP300 FPM +PS6_7_VFD17.5HP300 FPM +PS6_9_VFD13HP300 FPM +PS6_10_VFD110HP300 FPM +PS6_11_VFD13HP300 FPMPS6_12_VFD110HP300 FPMPS6_13_VFD13HP300 FPM +PS7_3_VFD12HP300 FPMPS7_4_VFD13HP300 FPMPS7_5_VFD17.5HP300 FPM +PS7_6_VFD17.5HP300 FPM +PS7_7_VFD110HP300 FPM PS7_8_VFD110HP300 FPM PS7_9_VFD17.5HP300 FPM PS7_10_VFD13HP300 FPM +PS7_14_VFD17.5HP300 FPM +PS5_4_TPE1PS5_4_TPE2 PS5_5_JPE1 +PS5_7_TPE1 +UL18_10_TPE5 +PS5_10_JPE1PS5_12_TPE1 +PS5_13_TPE1PS6_12_TPE2 +PS6_8_JPE1 +UL21_15_TPE1 +PS6_4_TPE1 +PS7_14_TPE2 +EPCPS5_1_EPC1EPCPS5_1_EPC2 +RBBGPS5_1_S1 +EPCPS6_1_EPC1EPCPS6_1_EPC2 +RBBGPS6_1_S1 +EPCPS7_1_EPC1EPCPS7_1_EPC2 +RBBGPS7_1_S1 +EPCPS5_13_EPC1 +EPCPS6_13_EPC2 +EPCPS7_14_EPC1 +RBB +PS5_2_JPE1 BBA +WPS5_6_JR1 +STOP THE EPC AT 8'-3" +STOP THE EPC AT 8'-3" +BBA +WPS7_13_JR1 EPCPS7_14_EPC2 +RBB +EPCPS7_9_EPC1 +RBBGPS7_9_S2EPCPS7_9_EPC2 +RBBGPS7_9_S1 +WPS5_9_JR1 +BBA +WPS6_8_JR1 +BBA +WPS5_9_JR2 +W +PS6_9_JR1 +W +UL21_5_JR1 +BBA +WPS6_11_JR1 +EPCPS5_13_EPC2 +EPCPS6_13_EPC1RBB +W +PS5_10_JR1 +BBA +WPS5_11_JR1 +RBB +ST 1.5kW 1.4375 +ST 1.5kW 1.4375 +ST 1.5kW 1.4375 +X-SQ-96_43-90-P2.5+ +ST 4.0kW 1.4375 +X-SQ-41.5_43-180-P4.0 +ST 4.0kW 1.4375 +X-SQ-41.5_43-180-P4.0 +ST 4.0kW 1.4375 +X-SQ-96_43-90-P2.5+ +ST 4.0kW 1.4375 +X-SQ-96_43-90-P2.5+ +ST 4.0kW 1.4375 +STOP THE EPC AT 8'-3" +STOP THE EPC AT 8'-3" +V +UL13_10_TPE1 +UL13_2_FIO1 +UL14_3_FIO1 +UL15_3_FIO1 +UL16_2_FIO1 +UL17_3_FIO1 +UL18_3_FIO1 +UL19_2_FIO1 +PS7_DPM3MCM02 +PS5_DPM1MCM02 +UL13_DPM1MCM02 +UL14_DPM1MCM02 +UL15_DPM1MCM02 +PS6_DPM1MCM02 +PS7_DPM1MCM02 PS7_DPM2MCM02 +UL16_DPM1MCM02 +UL18_DPM1MCM02 +UL19_DPM1MCM02 +UL20_DPM1MCM02 +MCM02 +UL17_DPM1MCM02 +UL21_DPM1MCM02 +UL13_1_VFD12HP120 FPM +UL13_1_TPE1 +RBBEPCUL13_1_EPC2EPCUL13_1_EPC1 +RGUL13_1_SS1 +UL13_2_TPE1UL13_2_LPE2 +UL13_2_LPE1RBB +EPCUL13_4_EPC2 +EPCUL13_4_EPC1 +RBBGUL13_4_S2 +RBBGUL13_4_S1UL13_4_VFD13HP300 FPMUL13_5_VFD13HP300 FPMUL13_6_VFD3HP300 FPM +UL13_7_VFD13HP300 FPM +UL13_4_ENC1UL13_5_ENC1UL13_6_ENC1UL13_4_TPE1UL13_5_TPE1UL13_6_TPE1 +UL13_3_TPE1 +UL13_7_ENC1UL13_7_TPE1UL13_3_VFD13HP280 FPMUL13_2_VFD17.5HP280 FPM UL13_8_VFD15HP280 FPMUL13_9A_VFD13HP300 FPMUL13_9B_VFD13HP300 FPMUL13_10_VFD12HP280 FPMUL13_11_VFD12HP280 FPMUL13_12_VFD15HP280 FPM +PS5_2_TPE1 +RGPS5_13_SS1 +PS5_12_FIO1 +EPCUL14_3_EPC2 +EPCUL14_3_EPC1 +UL14_3_TPE1 +UL14_3_LPE1 +UL14_3_LPE2RBBGUL14_3_S2 +RBBGUL14_3_S1 +RBB +UL14_3_VFD15HP280 FPM UL14_4_VFD15HP280 FPM +UL14_5_VFD13HP280 FPMUL14_6_VFD13HP420 FPMUL14_8_VFD13HP420 FPMUL14_9_VFD13HP420 FPMUL14_10_VFD13HP420 FPMUL14_9_ENC1UL14_8_ENC1UL14_7_ENC1UL14_6_ENC1UL14_4_ENC1 +UL14_4_TPE1UL14_9_TPE1 +UL14_8_TPE1 +UL14_7_TPE2UL14_7_TPE1UL14_5_TPE1 +EPCUL14_4_EPC2 +EPCUL14_4_EPC1 +RBBGUL14_4_S2 +RBBGUL14_4_S1 +UL14_5_ENC1 +EPCUL15_3_EPC2 +EPCUL15_3_EPC1 +UL15_3_TPE1 +UL15_3_LPE1 +UL15_3_LPE2RBBGUL15_3_S2 +RBBGUL15_3_S1UL15_3_VFD15HP280 FPM UL15_4_VFD15HP280 FPM +UL15_5_VFD12HP280 FPMUL15_5_ENC1 +UL15_6_VFD13HP420 FPMUL15_7_VFD13HP420 FPMUL15_8_VFD13HP420 FPMUL15_9_VFD13HP420 FPMUL15_10_VFD13HP420 FPMUL15_11_VFD12HP420 FPM +UL15_6_TPE2UL15_7_ENC1UL15_7_TPE1UL15_8_TPE1UL15_9_TPE1 +UL15_10_TPE1 +UL15_8_ENC1UL15_9_ENC1UL15_10_ENC1 +UL16_1_VFD12HP120 FPM +UL16_1_TPE1 +RBBEPCUL16_1_EPC2EPCUL16_1_EPC1 +RGUL16_1_SS1 +UL16_2_TPE1UL16_2_LPE2 +UL16_2_LPE1RBB UL16_2_VFD17.5HP280 FPMUL16_3_VFD13HP280 FPM +UL16_4_VFD13HP280 FPMUL16_5_VFD12HP280 FPM +UL16_6_ENC1UL16_7_ENC1UL16_8_ENC1UL16_6_TPE2UL16_7_TPE1UL16_8_TPE1UL16_6_VFD13HP280 FPMUL16_7_VFD13HP280 FPMUL16_8_VFD13HP280 FPMUL16_9_VFD12HP280 FPM +EPCUL17_3_EPC2 +EPCUL17_3_EPC1 +UL17_3_TPE1 +UL17_3_LPE1 +UL17_3_LPE2RBBGUL17_3_S2 +RBBGUL17_3_S1UL17_3_VFD15HP120 FPM UL17_4_VFD15HP280 FPM +UL17_5_VFD13HP420 FPMUL17_6_VFD12HP280 FPMUL17_7_VFD13HP420 FPMUL17_8_VFD13HP420 FPM +UL17_10_VFD12HP420 FPMUL17_9_VFD13HP420 FPM +EPCUL18_3_EPC2 +EPCUL18_3_EPC1 +UL18_3_TPE1 +UL18_3_LPE1 +UL18_3_LPE2RBBGUL18_3_S2 +RBBGUL18_3_S1UL18_3_VFD15HP120 FPM +UL18_3_TPE2 UL18_4_TPE1 +UL18_4_ENC1 +UL18_5_TPE1UL18_5_ENC1 +EPCUL18_4_EPC2 +EPCUL18_4_EPC1 +RBBGUL18_4_S2 +RBBGUL18_4_S1UL18_4_VFD15HP280 FPM +UL18_5_VFD13HP420 FPMUL18_6_VFD15HP280 FPMUL18_6_ENC1UL18_7_TPE1UL18_7_ENC1UL18_7_TPE2UL18_8_TPE1UL18_9_TPE1 +UL18_8_ENC1UL18_9_ENC1 +UL18_7_VFD13HP280 FPMUL18_8_VFD13HP280 FPMUL18_9_VFD13HP280 FPM +WUL18_10_JR2 +UL18_10_VFD15HP280 FPM +UL18_12_TPE1 +UL18_11_VFD15HP280 FPMUL18_12_VFD13HP280 FPM +UL18_12_ENC1 +UL18_11_ENC1UL18_13A_VFD13HP280 FPMUL18_13B_VFD13HP280 FPM +UL18_14_TPE1 +UL18_14_TPE2 +UL18_15_TPE1 +UL18_14_VFD12HP280 FPMUL18_15_VFD12HP280 FPMUL18_16_VFD15HP280 FPM +UL19_1_VFD12HP120 FPM +UL19_1_TPE1 +RBBEPCUL19_1_EPC2EPCUL19_1_EPC1 +RGUL19_1_SS1 +UL19_2_TPE1UL19_2_LPE2 +UL19_2_LPE1RBB +UL20_3_ENC1UL20_3_FIO1EPCUL20_3_EPC2 +EPCUL20_3_EPC1 +UL20_3_TPE1 +UL20_3_LPE1 +UL20_3_LPE2RBBGUL20_3_S2 +RBBGUL20_3_S1UL20_3_VFD15HP120 FPM +UL20_3_TPE2 +UL21_3_ENC1UL21_3_FIO1EPCUL21_3_EPC2 +EPCUL21_3_EPC1 +UL21_3_TPE1 +UL21_3_LPE1 +UL21_3_LPE2RBBGUL21_3_S2 +RBBGUL21_3_S1UL21_3_VFD15HP120 FPM +UL21_3_TPE2 +UL19_2_ENC1EPCUL19_2_EPC2 +EPCUL19_2_EPC1 +RBBGUL19_2_S2 +RBBGUL19_2_S1UL19_2_VFD17.5HP280 FPMUL19_2_TPE2 +UL19_3_VFD12HP280 FPMUL19_3_ENC1 +UL19_4_TPE1 +UL19_4_TPE2 +UL19_4_ENC1UL19_4_VFD12HP280 FPMUL19_5_ENC1UL19_6_ENC1UL19_7_ENC1UL19_8_ENC1UL19_5_TPE1UL19_6_TPE1UL19_7_TPE1UL19_8_TPE1UL19_9_VFD12HP420 FPMUL19_8_VFD13HP420 FPM +UL19_7_VFD13HP420 FPMUL19_6_VFD13HP420 FPMUL19_5_VFD13HP420 FPM +UL20_4_ENC1EPCUL20_4_EPC2 +EPCUL20_4_EPC1 +RBBGUL20_4_S2 +RBBGUL20_4_S1UL20_4_VFD15HP280 FPMUL20_44_TPE1 +UL20_5_VFD12HP280 FPMUL20_5_ENC1 +UL20_6_TPE1UL20_6_ENC1 +UL20_11_VFD12HP420 FPMUL20_10_VFD13HP420 FPMUL20_9_VFD13HP420 FPM +UL20_7_VFD13HP420 FPMUL20_8_VFD13HP420 FPM +UL20_6_VFD13HP420 FPM +UL20_6_TPE2UL20_7_TPE1UL20_8_TPE1UL20_9_TPE1UL20_10_TPE1 +UL20_7_ENC1UL20_8_ENC1UL20_9_ENC1UL20_10_ENC1 +UL21_4_ENC1EPCUL21_4_EPC2 +EPCUL21_4_EPC1 +RBBGUL21_4_S2 +RBBGUL21_4_S1UL21_4_VFD15HP280 FPMUL21_4_TPE1UL21_6_TPE1 +UL21_5_VFD15HP280 FPM +UL21_5_ENC1UL21_6_ENC1UL21_7_ENC1UL21_8_ENC1UL21_9_ENC1UL21_10_ENC1 +UL21_6_TPE2UL21_7_TPE1UL21_8_TPE1UL21_9_TPE1UL21_10_TPE1UL21_11_TPE1 +UL21_6_VFD13HP300 FPMUL21_7_VFD13HP300 FPMUL21_8_VFD13HP300 FPMUL21_9_VFD13HP300 FPMUL21_10_VFD13HP300 FPM +WUL21_11_JR2 +UL21_11_VFD17.5HP280 FPM +UL21_11_TPE5 +UL21_12_VFD15HP280 FPM UL21_13_VFD12HP280 FPMUL21_14A_VFD13HP280 FPMUL21_14B_VFD13HP280 FPMUL21_15_VFD12HP280 FPM +UL21_16_VFD12HP280 FPM +UL21_17_VFD15HP280 FPMPS6_2_JPE1PS6_2_TPE1 +PS6_3_VFD12HP300 FPM +PS6_4_TPE2 +PS6_4_VFD13HP300 FPM PS6_6_VFD15HP300 FPM +PS6_5_JPE1 +PS6_7_TPE1BBA +WPS6_6_JR1 +PS6_8_VFD15HP300 FPMPS6_10_TPE1 +PS6_10_JPE1PS6_12_TPE1 +RGPS6_13_SS1 +PS7_2_TPE1PS7_2_JPE1PS7_4_TPE1PS7_4_TPE2 PS7_5_TPE1 PS7_6_TPE1 PS7_7_TPE1 PS7_8_TPE1 PS7_9_TPE1PS7_10_JPE1BBA +WPS7_11_JR1 +PS7_11_VFD13HP300 FPM +PS7_12_TPE1 +PS7_12_VFD13HP300 FPM +PS7_12_JPE1PS7_13_VFD13HP300 FPMPS7_14_TPE1 +RGPS7_14_SS1PS7_14_FIO1 +BBA +MCM02 \ No newline at end of file diff --git a/projects/MTN6/extracted_texts/MTN6_SYSDL-MCM03.txt b/projects/MTN6/extracted_texts/MTN6_SYSDL-MCM03.txt new file mode 100644 index 0000000..f811859 --- /dev/null +++ b/projects/MTN6/extracted_texts/MTN6_SYSDL-MCM03.txt @@ -0,0 +1,181 @@ +ST 1.5kW 1.4375 +ST 1.5kW 1.4375 +ST 1.5kW 1.4375 +ST 1.5kW 1.4375 +UL1_14_VFD13HP420 FPMUL1_15_VFD13HP420 FPMUL1_16_VFD13HP420 FPMUL1_17_VFD13HP420 FPM +UL1_18_VFD15HP420 FPM +UL1_19_VFD13HP420 FPM +UL1_20_VFD12HP420 FPM +UL1_18_ENC1 +UL1_14_TPE1 +UL1_15_TPE1 +UL1_16_TPE1 +UL1_17_TPE1 +UL1_19_TPE2UL1_19_TPE1EPCUL1_14_EPC1 +EPCUL1_14_EPC2 +BBGUL1_14_S1RA +UL7_14_VFD13HP420 FPMUL7_15_VFD13HP420 FPMUL7_16_VFD13HP420 FPM +UL7_17_VFD13HP420 FPM +UL7_18_VFD15HP420 FPM +UL7_19_VFD13HP420 FPM +UL7_20_VFD13HP420 FPM +UL11_15_VFD13HP420 FPMUL11_16_VFD13HP420 FPMUL11_17_VFD13HP420 FPMUL11_18_VFD13HP420 FPM +UL11_19_VFD15HP420 FPM +UL11_20_VFD13HP420 FPM +UL11_21_VFD13HP420 FPM +EPCUL7_14_EPC1 +EPCUL7_14_EPC2 +EPCUL11_15_EPC1 +EPCXXXX_EPC1 +RBBGUL7_14_S2 +BBGUL11_15_S1RA +RBBGUL1_14_S2A +RBBGUL11_15_S2 +RBBGUL7_14_S1 +A +NCP1_1_VFD7.5HP300 FPM +NCP1_2_VFD17.5HP300 FPM +NCP1_3_VFD17.5HP300 FPM +NCP1_4_VFD15HP300 FPM +NCP1_5_VFD17.5HP350 FPM NCP1_6_VFD15HP350 FPM NCP1_7_VFD17.5HP350 FPM NCP1_8_VFD17.5HP350 FPM +NCP_005_ENW1 +EPCNCP1_1_EPC1RBB +EPCNCP1_1_EPC2 +RBBA +A +EPCNCP1_2_EPC1 +RBB +EPCNCP1_2_EPC2 +RBB +A +EPCNCP1_3_EPC1RBB +EPCNCP1_3_EPC2 +RBB +WNCP1_3_JR3ABB +EPCNCP1_8_EPC1 +EPCNCP1_8_EPC2 +V +GNCP1_1_S2 +GNCP1_1_S1 +GNCP1_2_S2GNCP1_2_S1 +GNCP1_3_S2GNCP1_3_S1 +NCP1_1_ENC1 +NCP1_2_ENC1 +NCP1_3_ENC1 +NCP1_1_TPE1 +NCP1_5_TPE1 NCP1_5_TPE2NCP1_6_TPE1 +UL13_DPM2MCM03 +UL1_DPM2MCM03 +UL7_DPM2MCM03 +MCM03 +NCP_DPM1MCM03 +UL4_14_VFD12HP420 FPMUL4_15_VFD13HP420 FPMUL4_16_VFD13HP420 FPMUL4_17_VFD13HP420 FPM +UL4_18_VFD15HP420 FPM +UL4_19_VFD13HP420 FPM +UL4_20_VFD12HP420 FPM +UL4_18_ENC1 +UL4_14_TPE1 +UL4_15_TPE1 +UL4_16_TPE1 +UL4_17_TPE1 +UL4_19_TPE2UL4_19_TPE1BBGUL4_14_S1RA +RBBGUL4_14_S2A +ST 1.5kW 1.4375 +ST 1.5kW 1.4375 +ST 1.5kW 1.4375 +UL13_13_TPE1 +UL13_13_ENC1 +EPCUL21_18_EPC1 +EPCUL21_18_EPC2 +EPCUL18_17_EPC1 +EPCUL18_17_EPC2 +EPCUL13_13_EPC1 +EPCUL13_13_EPC2 +RBBGUL21_18_S2 +RBBGUL18_17_S2 +RBBGUL13_13_S2 +A +A +RBBGUL18_17_S1 +RBBGUL21_18_S1 +ARBBGUL13_13_S1 +EPCUL4_14_EPC2 +EPCUL4_14_EPC1 +UL7_18_ENC1 +UL7_14_TPE1 +UL7_15_TPE1 +UL7_16_TPE1 +UL7_17_TPE1 +UL7_19_TPE2UL7_19_TPE1 +UL11_15_TPE1 +UL11_16_TPE1 +UL11_17_TPE1 +UL11_18_TPE1 +UL11_19_ENC1 +UL11_20_TPE2UL11_20_TPE1 +UL13_13_VFD13HP420 FPM +UL1_14_ENC1UL1_15_ENC1UL1_16_ENC1UL1_17_ENC1 +UL1_19_ENC1 +UL4_14_ENC1UL4_15_ENC1UL4_16_ENC1UL4_17_ENC1 +UL4_19_ENC1 +UL7_14_ENC1UL7_15_ENC1UL7_16_ENC1UL7_17_ENC1 +UL7_19_ENC1 +UL11_15_ENC1UL11_16_ENC1UL11_17_ENC1UL11_18_ENC1 +UL11_20_ENC1 +UL13_14_VFD13HP420 FPMUL13_15_VFD13HP420 FPMUL13_16_VFD13HP420 FPMUL13_17_VFD15HP420 FPM +UL13_18_VFD13HP420 FPM +UL13_19_VFD12HP420 FPM +UL13_14_TPE1 +UL13_15_TPE1 +UL13_16_TPE1 +UL13_18_TPE2 +UL13_18_TPE1UL13_18_ENC1 +UL13_14_ENC1UL13_15_ENC1UL13_16_ENC1 +UL13_17_ENC1 +UL18_17_TPE1 +UL18_17_ENC1UL18_17_VFD13HP420 FPMUL18_18_VFD13HP420 FPMUL18_19_VFD13HP420 FPMUL18_20_VFD13HP420 FPMUL18_21_VFD15HP420 FPM +UL18_18_TPE1 +UL18_19_TPE1 +UL18_20_TPE1 +UL18_18_ENC1UL18_19_ENC1UL18_20_ENC1 +UL18_21_ENC1 +UL18_22_VFD13HP420 FPM +UL18_23_VFD12HP420 FPMUL18_22_TPE2 +UL18_22_TPE1UL18_22_ENC1 +UL21_18_TPE1 +UL21_18_ENC1 +UL21_18_VFD13HP420 FPMUL21_19_VFD13HP420 FPMUL21_20_VFD13HP420 FPMUL21_21_VFD13HP420 FPMUL21_22_VFD15HP420 FPM +UL21_19_TPE1 +UL21_20_TPE1 +UL21_21_TPE1 +UL21_19_ENC1UL21_20_ENC1UL21_21_ENC1 +UL21_22_ENC1 +UL21_23_VFD13HP420 FPM +UL21_24_VFD12HP420 FPMUL21_23_TPE2 +UL21_23_TPE1UL21_23_ENC1 +NCP1_1_TPE2 +NCP1_1_TPE3 +NCP1_1_TPE4 +WNCP1_1_JR1BBA +NCP1_1_TPE5 +NCP1_2_TPE1 +NCP1_2_TPE2 +NCP1_2_TPE3 +NCP1_2_TPE4 +WNCP1_2_JR1BBA +NCP1_2_TPE5 +WNCP1_3_JR1BBA +WNCP1_3_JR2BBA +NCP1_3_TPE1 +NCP1_3_TPE2 +NCP1_3_TPE3 +NCP1_3_TPE4 +NCP1_3_TPE5 +NCP1_3_TPE6 +NCP1_3_TPE7 +NCP1_7_TPE1 RBB +RBB +GNCP1_8_S1 +GNCP1_8_S2 +NCP1_8_TPE1NCP1_8_FIO1 +MCM03 \ No newline at end of file diff --git a/projects/MTN6/extracted_texts/MTN6_SYSDL-MCM04.txt b/projects/MTN6/extracted_texts/MTN6_SYSDL-MCM04.txt new file mode 100644 index 0000000..7475db7 --- /dev/null +++ b/projects/MTN6/extracted_texts/MTN6_SYSDL-MCM04.txt @@ -0,0 +1,587 @@ +2'-1.5" EL +2'-3" EL +TRASH +PALLETSTAGINGAREA +PROBLEM SOLV.CART 80/20 +PROB. SOLV. CART +TRASH +TRASH +PALLETSTAGINGAREA +PROBLEM SOLV.CART 80/20 +PROB. SOLV. CART +TRASH +TRASH +PALLETSTAGINGAREA +PROBLEM SOLV.CART 80/20 +PROB. SOLV. CART +TRASH +TRASH +PALLETSTAGINGAREA +PROBLEM SOLV.CART 80/20 +PROB. SOLV. CART +TRASH +TRASH +PALLETSTAGINGAREA +PROBLEM SOLV.CART 80/20 +PROB. SOLV. CART +TRASH +TRASH +PALLETSTAGINGAREA +PROBLEM SOLV.CART 80/20 +PROB. SOLV. CART +TRASH +TRASH +PALLETSTAGINGAREA +PROBLEM SOLV.CART 80/20 +PROB. SOLV. CART +TRASH +TRASH +PALLETSTAGINGAREA +PROBLEM SOLV.CART 80/20 +PROB. SOLV. CART +TRASH +TRASH +PALLETSTAGINGAREA +PROBLEM SOLV.CART 80/20 +PROB. SOLV. CART +TRASH +TRASH +PALLETSTAGINGAREA +PROBLEM SOLV.CART 80/20 +PROB. SOLV. CART +TRASH +ERSCERSCERSCERSCERSCERSCERSCERSCERSCERSCERSCERSCERSCERSCERSC MDR POWER SUPPLY80AMDR POWER SUPPLY80A +V +11'-2" EL +1'-4" EL +FL_DPM1MCM04 +FL_DPM2MCM04 +ULGLB_DPM1MCM04 +ULGLC_DPM1MCM04 +MCM04 +PRS1_DPM1MCM04 +CH_DPM2MCM04 +FL1038_2_PE1ABBB +FL1038_1CH_PE1 +FL1038_2_PE2 +FL1038_2_VFD15HP350FPM +FL1038_3CH_PE1BBBWFL1038_2_JR2WFL1038_2_JR1 +WFL1038_1_JR1 +ULC8_3_VFD12HP80FPMULC7_3_VFD12HP80FPMULC6_3_VFD12HP80FPMULC5_3_VFD12HP80FPM +PS10_1_VFD15HP150FPMPS10_2_VFD115HP200FPM +PS10_5_VFD115HP240FPM +PS11_1_VFD15HP150FPMPS11_2_VFD15HP200FPMPS11_3_VFD110HP240FPM +PS11_4_VFD110HP240FPM +PS11_6_VFD110HP240FPM PS11_7_VFD120HP240FPM PS11_8_VFD115HP240FPM PS11_9_VFD115HP240FPM +PS11_11_VFD115HP240FPMULC8_3_JPE2ULC7_3_JPE2ULC6_3_JPE2ULC5_3_JPE2 +PS10_1_JPE2 +PS10_1_JPE1PS10_1_JPE3PS11_1_JPE1 +PS11_1_JPE2 +PS11_1_JPE3PS10_3_JPE1 PS11_2_JPE1 +PS10_5CH2_FPE1PS10_5CH2_JPE1 +PS10_5CH5_FPE2 +PS10_6CH_FPE1 +PS10_5_JPE4 +PS10_5_JPE5 +PS10_5_JPE3 +PS10_5_JPE2 +PS10_5_JPE1 +PS11_3_JPE2 +PS11_4_JPE1 +PS11_11_JPE1 +PS11_11_JPE2 +PS11_11_JPE3 +PS11_11_JPE4 +PS11_11_JPE5 +PS11_11CH1_JPE1 +EPCULC5_3_EPC1 +EPCULC5_3_EPC2 +EPCULC6_3_EPC1 +EPCULC7_3_EPC1 +EPCULC7_3_EPC2 +EPCULC8_3_EPC1 +EPCPS10_1_EPC1EPCPS11_1_EPC1 +EPCPS10_5_EPC1 +EPCPS11_11_EPC1 +WPS10_1_JR1 +WULC8_3_JR1 +WULC7_3_JR1 +WULC6_3_JR1 +WULC5_3_JR1W +PS11_1_JR2 +PS11_9_JPE1 +WPS11_11_JR1 +WPS11_11_JR2 +WPS10_5_JR1 +WPS10_5_JR2ABB +ABB +ABBR +GPS10_3_JR1 +GPS11_11_S1 +RABB RABB RABB RABB +ABBABBR ABBR +ABBR +ABB +ABB +PS11_1_FIO1PS10_1_FIO2 +PS10_5_FIO1 +PS10_5_FIO3 +PS11_11_FIO1 +PS10_5DIV1_LS1LSPS10_5DIV1_LS2LS +PS10_5DIV2_LS1LSPS10_5DIV2_LS2LS +PS10_5DIV3_LS1LSPS10_5DIV3_LS2LS +PS10_5DIV5_LS1LSPS10_5DIV5_LS2LS +PS11_11DIV1_LS1LSPS11_11DIV1_LS2LS +PS11_11DIV2_LS1LSPS11_11DIV2_LS2LS +PS11_11DIV3_LS1LSPS11_11DIV3_LS2LS +PS11_11DIV4_LS1LSPS11_11DIV4_LS2LS +PS11_11DIV5_LS1LSPS11_11DIV5_LS2LS +PS11_11DIV6_LS1LSPS11_11DIV6_LS2LS +SOLPS10_5DIV5_SOL1SOLPS10_5DIV5_SOL2 +SOLPS10_5DIV3_SOL1SOLPS10_5DIV3_SOL2 +SOLPS10_5DIV2_SOL1SOLPS10_5DIV2_SOL2SOLPS10_5DIV1_SOL1SOLPS10_5DIV1_SOL2 +SOLPS11_11DIV1_SOL1SOLPS11_11DIV1_SOL2 +SOLPS11_11DIV2_SOL1SOLPS11_11DIV2_SOL2 +SOLPS11_11DIV3_SOL1SOLPS11_11DIV3_SOL2 +SOLPS11_11DIV4_SOL1SOLPS11_11DIV4_SOL2 +SOLPS11_11DIV5_SOL1SOLPS11_11DIV5_SOL2 +SOLPS11_11DIV6_SOL1SOLPS11_11DIV6_SOL2 +PS10_5CH2_FPE2PS10_5CH1_JPE1PS10_5CH1_FPE1PS10_5CH1_FPE2 +PS10_5CH5_FPE1PS10_5CH5_JPE1 +PS10_1_JPE4 +PS11_11CH1_FPE1PS11_11CH1_FPE2PS11_11CH2_JPE1 +PS11_12CH_FPE1ULC8_3_JPE1ULC7_3_JPE1ULC6_3_JPE1 +ULC5_3_JPE1 +PS11_1_JPE4 +PRS3_2B_VFD12HP120 FPMPRS3_3B_VFD13HP120 FPM +PRS3_2A_VFD12HP120 FPMPRS3_3A_VFD12HP120 FPM +PRS3_5_VFD12HP120 FPM +ERSCPRS3_6_ERSC1ERSCPRS3_6_ERSC2ERSCPRS3_6_ERSC3ERSCPRS3_6_ERSC4ERSCPRS3_6_ERSC5ERSCPRS3_6_ERSC6ERSCPRS3_6_ERSC7ERSCPRS3_6_ERSC8ERSCPRS3_6_ERSC9ERSCPRS3_6_ERSC10ERSCPRS3_6_ERSC11ERSCPRS3_6_ERSC12ERSCPRS3_6_ERSC13ERSCPRS3_6_ERSC14ERSCPRS3_6_ERSC15 MDR POWER SUPPLYPRS3_6_PSU140AMDR POWER SUPPLYPRS3_6_PSU240A +PRS3_6_PE1PRS3_6_PE2PRS3_6_PE3PRS3_6_PE4PRS3_6_PE5PRS3_6_PE6PRS3_6_PE7PRS3_6_PE8PRS3_6_PE9PRS3_6_PE10PRS3_6_PE11PRS3_6_PE12PRS3_6_PE13PRS3_6_PE14PRS3_6_PE15PRS3_6_PE16PRS3_6_PE17PRS3_6_PE18PRS3_6_PE19PRS3_6_PE20PRS3_6_PE21PRS3_6_PE22PRS3_6_PE23PRS3_6_PE24PRS3_6_PE25PRS3_6_PE26PRS3_6_PE27PRS3_6_PE28PRS3_6_PE29PRS3_6_PE30 +PRS3_2B_JPE1 PRS3_2A_JPE1 +PRS3_1BCH_JPE1 PRS3_1ACH_JPE1 +PRS3_5_JPE1 +PRS3_3B_JPE1PRS3_3B_JPE2PRS3_3A_JPE2 PRS3_3A_JPE1 +PRS3_5_JPE2 +PRS4_1_JPE1PRS4_2_JPE1 EPCPRS3_5_EPC1 +EPCPRS3_5_EPC2 +EPCPRS4_1_EPC2 +EPCPRS4_1_EPC1 +EPCPRS4_2_EPC1 +EPCPRS4_2_EPC2 +GPRS4_2_S2ABBRGPRS4_1_S2GPRS4_1_S1 +GPRS4_2_S1 +GPRS3_5_S1GPRS3_5_S2 +BBR +BBR +ABBR BBR +ABB ABB +WPRS3_3B_JR1 +WPRS3_3A_JR1WPRS3_2B_JR1 +WPRS3_1BCH_JR1 WPRS3_1ACH_JR1 +WPRS3_2A_JR1 +ABB +ABB +ABB +ABB +BABB +PRS3_4CH_FPE1 +PRS3_4CH_FPE2B B +BB +GBBAB +GBBABGBBAB +GBBABGBBAB +GBBAB +GPS11_11CH1_S1 +GPS11_11CH2_S1 +GPS11_11CH3_S1 +GPS11_11CH4_S1 +GPS11_11CH5_S1 +GPS11_11CH6_S1 +GPS10_5CH2_S1 +GPS10_5CH1_S1 +GPS10_5CH5_S1 +GPS10_5CH3_S1 +GBBAB +GBBAB +GBBAB +GBBAB +PS10_1_ENC1PS10_2_ENC1 +PS10_5_ENC1 +PS11_3_ENC1 +PS11_6_ENC1 PS11_7_ENC1 PS11_8_ENC1 PS11_9_ENC1 +PS11_11_ENC1 +EPCPS11_7_EPC2 +EPCPS11_7_EPC1 +BBR +BBR +G +PS11_7_S2 +GPS11_7_S1 +ULC8_3_ENC1ULC7_3_ENC1ULC6_3_ENC1ULC5_3_ENC1 +PRS4_2_ENC1 +PRS4_1_ENC1 +PS10_5_PS1PS +PS11_11_PS1PS +PS10_5CH3_JPE1PS10_5CH3_FPE1PS10_5CH3_FPE2 +PS11_11CH2_FPE1PS11_11CH2_FPE2 +EPCPS11_8_EPC1BBR +G +PRS4_2_JPE2PS11_3_JPE1 +EPCPS11_4_EPC2 +EPCPS11_4_EPC1EPCPS11_3_EPC1 +EPCPS11_3_EPC2 +ABBR +BBR +BBR +GPS11_3_S1ABBR +GPS11_3_S2 +PS11_2_ENC1PS10_3_VFD115HP240FPMPS10_3_ENC1 PS11_1_ENC1 +PS11_4_ENC1 +PS11_11_JPE6WPS11_11_JR3ABB +PRS4_1_VFD17.5HP120FPM +PRS4_2_VFD15HP120FPM +RGULC5_3_SS1RGULC5_3_SS2 +PS11_1_FIO2 +RGULC6_3_SS2 +PS10_1_FIO1 +RGPS10_1_SS1 +PS10_2_TPE +PS10_5_FIO2 +PS10_5_FIO4PS10_5_FIO5 +WPS11_1_JR1 +PS11_3_FIO1 +GPS11_4_S2 +GPS11_4_S1 +PS11_4_FIO1 +PS11_7_FIO1 +PS11_11_FIO2 +PS11_11_FIO3 +PS11_11_FIO4 +PS11_11_FIO5 +PS11_11_FIO6 +PRS3_2B_FIO1 PRS3_2A_FIOM1 +PRS3_4CH_FIO1 +PRS4_2_FIO1 +WPRS4_2_JR1 +RGULC7_3_SS1 +RGULC7_3_SS2RGULC8_3_SS1 +PS10_5_TPE1 +PS11_6_TPE1 +PS11_6_TPE2 +PS11_7_TPE1 +PS11_8_TPE1 PS11_11_TPE1 +PS11_11CH3_JPE1PS11_11CH3_FPE1PS11_11CH3_FPE2PS11_11CH4_JPE1PS11_11CH4_FPE1PS11_11CH4_FPE2 +PS11_11CH5_JPE1PS11_11CH5_FPE1PS11_11CH5_FPE2PS11_11CH6_JPE1PS11_11CH6_FPE1PS11_11CH6_FPE2 +GDTC_NCH1_EN1 +CH_DPM1_FIOM1 +GDTC_NCH2_EN1 +GDTC_NCH3_EN1 +GDTC_NCH4_EN1CH_DPM1MCM04 +GDTC_NCH5_EN1 +CH_DPM1_FIOM2 +GDTC_NCH6_EN1 +GDTC_NCH7_EN1 +GDTC_NCH8_EN1 +GDTC_NCH9_EN1 +CH_DPM1_FIOM3 +GDTC_NCH10_EN1 +GDTC_NCH11_EN1 +GDTC_NCH12_EN1 +GDTC_NCH13_EN1 +CH_DPM1_FIOM4 +GDTC_NCH14_EN1 +GDTC_NCH15_EN1 +GDTC_NCH16_EN1 +CH_DPM1_FIOM5 +GDTC_NCH17_EN1 +FL1034_2_PE1ABBBFL1034_1CH_PE1 +FL1034_2_PE2 +FL1034_2_VFD15HP350FPM +FL1034_3CH_PE1BBBWFL1034_2_JR2WFL1034_2_JR1 +WFL1034_1_JR1FL1026_2_PE1ABBB +FL1026_1CH_PE1 +FL1026_2_PE2FL1026_3CH_PE1BBBWFL1026_2_JR2WFL1026_2_JR1 +WFL1026_1_JR1FL1022_2_PE1 +ABBB +FL1022_1CH_PE1 +FL1022_2_PE2FL1022_3CH_PE1BBBWFL1022_2_JR2WFL1022_2_JR1 +WFL1022_1_JR1FL1018_2_PE1ABBB +FL1018_1CH_PE1 +FL1018_2_PE2FL1018_3CH_PE1BBBWFL1018_2_JR2WFL1018_2_JR1 +WFL1018_1_JR1 +FL1014_2_PE1ABBB +FL1014_1CH_PE1 +FL1014_2_PE2FL1014_3CH_PE1BBBWFL1014_2_JR2WFL1014_2_JR1 +WFL1014_1_JR1 FL3012_2_PE1 +ABBB +FL3012_1CH_PE1 +FL3012_2_PE2FL3012_3CH_PE1BBBWFL3012_2_JR2WFL3012_2_JR1 +WFL3012_1_JR1FL3016_2_PE1 +ABBB +FL3016_1CH_PE1 +FL3016_2_PE2FL3016_3CH_PE1BBBWFL3016_2_JR2WFL3016_2_JR1 +WFL3016_1_JR1FL3020_2_PE1 +ABBB +FL3020_1CH_PE1 +FL3020_2_PE2FL3020_3CH_PE1BBBWFL3020_2_JR2WFL3020_2_JR1 +WFL3020_1_JR1FL3024_2_PE1 +ABBB +FL3024_1CH_PE1 +FL3024_2_PE2FL3024_3CH_PE1BBBWFL3024_2_JR2WFL3024_2_JR1 +WFL3024_1_JR1 +FL1026_2_VFD15HP350FPMFL1022_2_VFD15HP350FPMFL1018_2_VFD15HP350FPMFL1014_2_VFD15HP350FPM FL3012_2_VFD15HP350FPMFL3016_2_VFD15HP350FPMFL3020_2_VFD15HP350FPMFL3024_2_VFD15HP350FPM +CH_DPM2_FIOM2CH_DPM2_FIOM1 +CH_DPM2_FIOM4CH_DPM2_FIOM3CH_DPM2_FIOM6CH_DPM2_FIOM5 +BBGABBBGBBBGBBBGB BBGBBBGBBBGB BBGBBBGBBBGB BBGBBBGB BBGBBBGAB BBGAB BBGAB BBGAB +BBGAB BBGAB BBGAB BBGAB BBGAB BBGAB BBGAB +CH_DPM3MCM04 CH_DPM4MCM04 CH_DPM5MCM04 CH_DPM6MCM04 +PB_NCH1_FIOH1PB_NCH3_FIOH1PB_NCH5_FIOH1PB_NCH7_FIOH1PB_NCH9_FIOH1PB_NCH10_FIOH1PB_NCH11_FIOH1PB_NCH12_FIOH1PB_NCH13_FIOH1PB_NCH14_FIOH1PB_NCH15_FIOH1PB_NCH16_FIOH1PB_NCH18_FIOH1PB_NCH20_FIOH1 +CH_DPM3_FIOM2CH_DPM3_FIOM1CH_DPM3_FIOM4CH_DPM3_FIOM3CH_DPM3_FIOM6CH_DPM3_FIOM5CH_DPM3_FIOM8CH_DPM3_FIOM7 +PB_NCH21_FIOH1PB_NCH24_FIOH1PB_NCH25_FIOH1PB_NCH26_FIOH1PB_NCH27_FIOH1PB_NCH28_FIOH1PB_NCH29_FIOH1PB_NCH31_FIOH1PB_NCH33_FIOH1PB_NCH35_FIOH1PB_NCH37_FIOH1PB_NCH39_FIOH1PB_NCH41_FIOH1PB_NCH43_FIOH1PB_NCH45_FIOH1PB_NCH46_FIOH1PB_NCH48_FIOH1PB_NCH50_FIOH1PB_NCH52_FIOH1PB_NCH54_FIOH1PB_NCH56_FIOH1PB_NCH58_FIOH1PB_NCH60_FIOH1 +CH_DPM4_FIOM1CH_DPM4_FIOM3CH_DPM4_FIOM2CH_DPM4_FIOM5CH_DPM4_FIOM4CH_DPM4_FIOM7CH_DPM4_FIOM6CH_DPM5_FIOM2CH_DPM5_FIOM1CH_DPM5_FIOM4CH_DPM5_FIOM3CH_DPM5_FIOM6CH_DPM5_FIOM5CH_DPM5_FIOM8CH_DPM5_FIOM7CH_DPM6_FIOM2CH_DPM6_FIOM1CH_DPM6_FIOM4CH_DPM6_FIOM3CH_DPM6_FIOM6CH_DPM6_FIOM5CH_DPM6_FIOM8CH_DPM6_FIOM7 +BBGAB BBGAB BBGAB BBGAB BBGAB BBGAB BBGAB BBGAB BBGAB BBGAB BBGABBBGBBBGBBBGB BBGBBBGBBBGB BBGB BBGB BBGB BBGB BBGB BBGBBBGBBBGB BBGB BBGBBBGB BBGB BBGB BBGB BBGB BBGB BBGB BBGBBBGB BBGBBBGBBBGB BBGBBBGB BBGB BBGBBBGB BBGBBBGB BBGBBBGBBBGB BBGBBBGB BBGB +GDTC_NCH18_EN1 +GDTC_NCH19_EN1 +GDTC_NCH20_EN1 +GDTC_NCH21_EN1 +GDTC_NCH22_EN1 +GDTC_NCH23_EN1 +GDTC_NCH24_EN1 +GDTC_NCH25_EN1 +GDTC_NCH26_EN1 +GDTC_NCH27_EN1 +GDTC_NCH28_EN1 +GDTC_NCH29_EN1 +GDTC_NCH30_EN1 +GDTC_NCH31_EN1 +GDTC_NCH32_EN1 +GDTC_NCH33_EN1 +GDTC_NCH34_EN1 +GDTC_NCH35_EN1 +GDTC_NCH36_EN1 +GDTC_NCH37_EN1 +GDTC_NCH38_EN1 +GDTC_NCH39_EN1 +GDTC_CH40_EN1 +GDTC_CH41_EN1 +GDTC_CH42_EN1 +GDTC_CH43_EN1 +GDTC_CH44_EN1 +GDTC_CH45_EN1 +GDTC_CH46_EN1 +GDTC_CH47_EN1 +GDTC_CH48_EN1 +GDTC_CH49_EN1 +GDTC_CH50_EN1 +GDTC_NCH51_EN1 +GDTC_NCH52_EN1 +GDTC_NCH53_EN1 +GDTC_NCH54_EN1 +GDTC_NCH55_EN1 +GDTC_NCH56_EN1 +GDTC_NCH57_EN1 +GDTC_NCH58_EN1 +GDTC_NCH59_EN1 +GDTC_NCH60_EN1 +GDTC_NCH61_EN1 +GDTC_NCH62_EN1 +GDTC_NCH63_EN1 +GDTC_NCH64_EN1 +GDTC_NCH65_EN1 +GDTC_NCH66_EN1 +GDTC_NCH67_EN1 +GDTC_NCH68_EN1 +GDTC_NCH69_EN1 +GDTC_NCH70_EN1 +GDTC_NCH71_EN1 +GDTC_NCH72_EN1 +GDTC_NCH73_EN1 +GDTC_NCH74_EN1 +GDTC_NCH75_EN1 +GDTC_NCH76_EN1 +PB_NCH1_PE1 +PB_NCH1_PE2 +BBGABBBGB +WPB_NCH1_PKGREL_PB1SOLPB_NCH1_PKGREL_SOL1 +PB_NCH2_PE1 +PB_NCH2_PE2 +WPB_NCH2_PKGREL_PB1SOLPB_NCH2_PKGREL_SOL1 +PB_NCH3_PE1 +PB_NCH3_PE2 +WPB_NCH3_PKGREL_PB1SOLPB_NCH3_PKGREL_SOL1 +PB_NCH4_PE1 +PB_NCH4_PE2 +WPB_NCH4_PKGREL_PB1SOLPB_NCH4_PKGREL_SOL1 +PB_NCH5_PE1 +PB_NCH5_PE2 +WPB_NCH5_PKGREL_PB1SOLPB_NCH5_PKGREL_SOL1 +PB_NCH6_PE1 +PB_NCH6_PE2 +WPB_NCH6_PKGREL_PB1SOLPB_NCH6_PKGREL_SOL1 +PB_NCH7_PE1 +PB_NCH7_PE2 +WPB_NCH7_PKGREL_PB1SOLPB_NCH7_PKGREL_SOL1 +PB_NCH8_PE1 +PB_NCH8_PE2 +WPB_NCH8_PKGREL_PB1SOLPB_NCH8_PKGREL_SOL1 +PB_NCH9_PE1 +PB_NCH9_PE2 +WPB_NCH9_PKGREL_PB1SOLPB_NCH9_PKGREL_SOL1 +PB_NCH10_PE1 +PB_NCH10_PE2 +WPB_NCH10_PKGREL_PB1SOLPB_NCH10_PKGREL_SOL1 +PB_NCH11_PE1 +PB_NCH11_PE2 +WPB_NCH11_PKGREL_PB1SOLPB_NCH11_PKGREL_SOL1 +PB_NCH12_PE1 +PB_NCH12_PE2 +WPB_NCH12_PKGREL_PB1SOLPB_NCH12_PKGREL_SOL1 +PB_NCH13_PE1 +PB_NCH13_PE2 +WPB_NCH13_PKGREL_PB1SOLPB_NCH13_PKGREL_SOL1 +PB_NCH14_PE1 +PB_NCH14_PE2 +WPB_NCH14_PKGREL_PB1SOLPB_NCH14_PKGREL_SOL1 +PB_NCH15_PE1 +PB_NCH15_PE2 +WPB_NCH15_PKGREL_PB1SOLPB_NCH15_PKGREL_SOL1 +PB_NCH16_PE1 +PB_NCH16_PE2 +WPB_NCH16_PKGREL_PB1SOLPB_NCH16_PKGREL_SOL1 +PB_NCH17_PE1 +PB_NCH17_PE2 +WPB_NCH17_PKGREL_PB1SOLPB_NCH17_PKGREL_SOL1 +PB_NCH18_PE1 +PB_NCH18_PE2 +WPB_NCH18_PKGREL_PB1SOLPB_NCH18_PKGREL_SOL1 +PB_NCH19_PE1 +PB_NCH19_PE2 +WPB_NCH19_PKGREL_PB1SOLPB_NCH19_PKGREL_SOL1 +PB_NCH20_PE1 +PB_NCH20_PE2 +WPB_NCH20_PKGREL_PB1SOLPB_NCH20_PKGREL_SOL1 +PB_NCH21_PE1 +PB_NCH21_PE2 +WPB_NCH21_PKGREL_PB1SOLPB_NCH21_PKGREL_SOL1 +PB_NCH22_PE1 +PB_NCH22_PE2 +WPB_NCH22_PKGREL_PB1SOLPB_NCH22_PKGREL_SOL1 +PB_NCH23_PE1 +PB_NCH23_PE2 +WPB_NCH23_PKGREL_PB1SOLPB_NCH23_PKGREL_SOL1 +PB_NCH24_PE1 +PB_NCH24_PE2 +WPB_NCH24_PKGREL_PB1SOLPB_NCH24_PKGREL_SOL1 +PB_NCH25_PE1 +PB_NCH25_PE2 +WPB_NCH25_PKGREL_PB1SOLPB_NCH25_PKGREL_SOL1 +PB_NCH26_PE1 +PB_NCH26_PE2 +WPB_NCH26_PKGREL_PB1SOLPB_NCH26_PKGREL_SOL1 +PB_NCH27_PE1 +PB_NCH27_PE2 +WPB_NCH27_PKGREL_PB1SOLPB_NCH27_PKGREL_SOL1 +PB_NCH28_PE1 +PB_NCH28_PE2 +WPB_NCH28_PKGREL_PB1SOLPB_NCH28_PKGREL_SOL1 +PB_NCH29_PE1 +PB_NCH29_PE2 +WPB_NCH29_PKGREL_PB1SOLPB_NCH29_PKGREL_SOL1 +PB_NCH30_PE1 +PB_NCH30_PE2 +WPB_NCH30_PKGREL_PB1SOLPB_NCH30_PKGREL_SOL1 +PB_NCH31_PE1 +PB_NCH31_PE2 +WPB_NCH31_PKGREL_PB1SOLPB_NCH31_PKGREL_SOL1 +PB_NCH32_PE1 +PB_NCH32_PE2 +WPB_NCH32_PKGREL_PB1SOLPB_NCH32_PKGREL_SOL1 +PB_NCH33_PE1 +PB_NCH33_PE2 +WPB_NCH33_PKGREL_PB1SOLPB_NCH33_PKGREL_SOL1 +PB_NCH34_PE1 +PB_NCH34_PE2 +WPB_NCH34_PKGREL_PB1SOLPB_NCH34_PKGREL_SOL1 +PB_NCH35_PE1 +PB_NCH35_PE2 +WPB_NCH35_PKGREL_PB1SOLPB_NCH35_PKGREL_SOL1 +PB_NCH36_PE1 +PB_NCH36_PE2 +WPB_NCH36_PKGREL_PB1SOLPB_NCH36_PKGREL_SOL1 +PB_NCH37_PE1 +PB_NCH37_PE2 +WPB_NCH37_PKGREL_PB1SOLPB_NCH37_PKGREL_SOL1 +PB_NCH38_PE1 +PB_NCH38_PE2 +WPB_NCH38_PKGREL_PB1SOLPB_NCH38_PKGREL_SOL1 +PB_NCH39_PE1 +PB_NCH39_PE2 +WPB_NCH39_PKGREL_PB1SOLPB_NCH39_PKGREL_SOL1 +PB_NCH40_PE1 +PB_NCH40_PE2 +WPB_NCH40_PKGREL_PB1SOLPB_NCH40_PKGREL_SOL1 +PB_NCH41_PE1 +PB_NCH41_PE2 +WPB_NCH41_PKGREL_PB1SOLPB_NCH41_PKGREL_SOL1 +PB_NCH42_PE1 +PB_NCH42_PE2 +WPB_NCH42_PKGREL_PB1SOLPB_NCH42_PKGREL_SOL1 +PB_NCH43_PE1 +PB_NCH43_PE2 +WPB_NCH43_PKGREL_PB1SOLPB_NCH43_PKGREL_SOL1 +PB_NCH44_PE1 +PB_NCH44_PE2 +WPB_NCH44_PKGREL_PB1SOLPB_NCH44_PKGREL_SOL1 +PB_NCH45_PE1 +PB_NCH45_PE2 +WPB_NCH45_PKGREL_PB1SOLPB_NCH45_PKGREL_SOL1 +PB_NCH46_PE1 +PB_NCH46_PE2 +WPB_NCH46_PKGREL_PB1SOLPB_NCH46_PKGREL_SOL1 +PB_NCH47_PE1 +PB_NCH47_PE2 +WPB_NCH47_PKGREL_PB1SOLPB_NCH47_PKGREL_SOL1 +PB_NCH48_PE1 +PB_NCH48_PE2 +WPB_NCH48_PKGREL_PB1SOLPB_NCH48_PKGREL_SOL1 +PB_NCH49_PE1 +PB_NCH49_PE2 +WPB_NCH49_PKGREL_PB1SOLPB_NCH49_PKGREL_SOL1 +PB_NCH50_PE1 +PB_NCH50_PE2 +WPB_NCH50_PKGREL_PB1SOLPB_NCH50_PKGREL_SOL1 +PB_NCH51_PE1 +PB_NCH51_PE2 +WPB_NCH51_PKGREL_PB1SOLPB_NCH51_PKGREL_SOL1 +PB_NCH52_PE1 +PB_NCH52_PE2 +WPB_NCH52_PKGREL_PB1SOLPB_NCH52_PKGREL_SOL1 +PB_NCH53_PE1 +PB_NCH53_PE2 +WPB_NCH53_PKGREL_PB1SOLPB_NCH53_PKGREL_SOL1 +PB_NCH54_PE1 +PB_NCH54_PE2 +WPB_NCH54_PKGREL_PB1SOLPB_NCH54_PKGREL_SOL1 +PB_NCH55_PE1 +PB_NCH55_PE2 +WPB_NCH55_PKGREL_PB1SOLPB_NCH55_PKGREL_SOL1 +PB_NCH56_PE1 +PB_NCH56_PE2 +WPB_NCH56_PKGREL_PB1SOLPB_NCH56_PKGREL_SOL1 +PB_NCH57_PE1 +PB_NCH57_PE2 +WPB_NCH57_PKGREL_PB1SOLPB_NCH57_PKGREL_SOL1 +PB_NCH58_PE1 +PB_NCH58_PE2 +WPB_NCH58_PKGREL_PB1SOLPB_NCH58_PKGREL_SOL1 +PB_NCH59_PE1 +PB_NCH59_PE2 +WPB_NCH59_PKGREL_PB1SOLPB_NCH59_PKGREL_SOL1 +PB_NCH60_PE1 +PB_NCH60_PE2 +WPB_NCH60_PKGREL_PB1SOLPB_NCH60_PKGREL_SOL1 +PB_NCH61_PE1 +PB_NCH61_PE2 +WPB_NCH61_PKGREL_PB1SOLPB_NCH61_PKGREL_SOL1 +BBGAB BBGAB BBGAB BBGAB BBGAB BBGAB BBGAB BBGAB BBGAB BBGAB BBGAB BBGAB BBGAB BBGAB BBGAB BBGAB BBGAB BBGABBBGBBBGB BBGBBBGBBBGB BBGB BBGB BBGB BBGBBBGB BBGBBBGB BBGBBBGBBBGB BBGB BBGB BBGB BBGBBBGBBBGB BBGBBBGBBBGB BBGBBBGBBBGB BBGBBBGB BBGBBBGBBBGB BBGBBBGBBBGB BBGBBBGBBBGB BBGBBBGBBBGB \ No newline at end of file diff --git a/projects/MTN6/extracted_texts/MTN6_SYSDL-MCM05.txt b/projects/MTN6/extracted_texts/MTN6_SYSDL-MCM05.txt new file mode 100644 index 0000000..7c335cd --- /dev/null +++ b/projects/MTN6/extracted_texts/MTN6_SYSDL-MCM05.txt @@ -0,0 +1,806 @@ +TRASH +PALLETSTAGINGAREA +PROBLEM SOLV.CART 80/20 +PROB. SOLV. CART +TRASHTRASH +PALLETSTAGINGAREA +PROBLEM SOLV.CART 80/20 +PROB. SOLV. CART +TRASHTRASH +PALLETSTAGINGAREA +PROBLEM SOLV.CART 80/20 +PROB. SOLV. CART +TRASHTRASH +PALLETSTAGINGAREA +PROBLEM SOLV.CART 80/20 +PROB. SOLV. CART +TRASHTRASH +PALLETSTAGINGAREA +PROBLEM SOLV.CART 80/20 +PROB. SOLV. CART +TRASH +TRASH +PALLETSTAGINGAREA +PROBLEM SOLV.CART 80/20 +PROB. SOLV. CART +TRASHTRASH +PALLETSTAGINGAREA +PROBLEM SOLV.CART 80/20 +PROB. SOLV. CART +TRASHTRASH +PALLETSTAGINGAREA +PROBLEM SOLV.CART 80/20 +PROB. SOLV. CART +TRASHTRASH +PALLETSTAGINGAREA +PROBLEM SOLV.CART 80/20 +PROB. SOLV. CART +TRASH +PRS1_2A_VFD13HP120 FPMPRS1_2B_VFD13HP120 FPM +PRS1_3_VFD17.5HP120 FPM +PRS1_4_VFD13HP120 FPMPRS1_6_VFD12HP120 FPMPRS2_1_VFD17.5HP120 FPM +PRS1_2A_JPE1 +EPCPRS1_6_EPC1 +EPCPRS1_6_EPC2 +EPCPRS2_1_EPC1 +EPCPRS2_1_EPC2GPRS2_1_S1 +GPRS2_1_S2BBR +ABBWPRS1_2A_JR2 +ABBWPRS1_3_JR1 +ABBWPRS1_4_JR1GPRS1_6_S1BBR +GPRS1_6_S2BBR +11'-3" EL +9'-1" EL +ULC1_3_VFD12HP80FPMULC2_3_VFD12HP80FPMULC3_3_VFD12HP80FPMULC4_3_VFD12HP80FPM +PS8_1_VFD17.5HP140-200 FPM +PS8_2_VFD110HP180-240 FPM +PS8_4_VFD115HP240 FPM PS8_5_VFD115HP240 FPM +PS9_2_VFD17.5HP240 FPM +PS8_8_VFD17.5HP220-330 FPM +PS8_9_VFD115HP240 FPM +PS8_11_VFD110HP240 FPM +PS8_11_DIV1_LS1LSPS8_11_DIV1_LS2LSSOLPS8_11_DIV1_SOL1SOLPS8_11_DIV1_SOL2 +PS8_11_DIV2_LS1LSPS8_11_DIV2_LS2LSSOLPS8_11_DIV2_SOL1SOLPS8_11_DIV2_SOL2 +PS8_5_JPE1 +PS8_11_JPE1 +PS8_2_JPE1 +PS8_1_JPE6 +PS8_11_FIO1 +WPS8_11_JR1ABB +WPS8_11_JR2 +WPS8_9_JR1ABBPS8_5_SIO1 +ABB +WPS8_1_JR2ABB RABB EPCULC1_3_EPC1 +EPCULC1_3_EPC2 +EPCULC2_3_EPC1 +EPCULC3_3_EPC1 +EPCULC4_3_EPC1 +EPCPS8_2_EPC1 +EPCPS8_1_EPC1 +EPCPS8_11_EPC1 +GPS8_11_S1ABBR +EPCPS8_5_EPC2ABBR +GPS8_5_S2 +ABBR +EPCPS8_4_EPC1 +EPCPS8_4_EPC2 +BB +BBR +ARGPS8_4_S1 +GPS8_4_S2 EPCPS8_5_EPC1GPS8_5_S1ABBR +PS8_1_FIO1PS8_1_FIO2 +BB +PS8_12CH_FPE1 +GBBAB +EPCPS8_2_EPC2 +ULC1_3_JPE1 +B +EPCPS9_2_EPC1 +GPS9_2_S1 +PS8-12CH-PS1PS +PS8_11_CH1_JPE1PS8_11_CH1_FPE1GPS8_11_CH1_S1 +VV +FL_DPM3MCM05 +FL_DPM4MCM05 +ULGLA_DPM1MCM05 +PRS2_DPM1MCM05 +CH_DPM7MCM05 CH_DPM8MCM05 CH_DPM10MCM05 CH_DPM11MCM05 +R +GPS8_2_S2 +GPS8_2_S1BBR +PS8_4_SIO1 PS8_6_FIO1 +PS8_6_VFD15HP240 FPM +PS8_8_TPE1PS8_8_TPE2 PS8_9_SIO1PS8_9_JPE1 +PS8_11_TPE1 +PS8_11_CH1_FPE2PS8_11_JPE2PS8_11_CH2_JPE1PS8_11_CH2_FPE1PS8_11_CH2_FPE2 +GPS8_11_CH2_S1GBBAB PS8_11_FIO2 +PS8_11_DIV3_LS1LSPS8_11_DIV3_LS2LSSOLPS8_11_DIV3_SOL1SOLPS8_11_DIV3_SOL2 +PS8_11_DIV4_LS1LSPS8_11_DIV4_LS2LSSOLPS8_11_DIV4_SOL1SOLPS8_11_DIV4_SOL2 +PS8_11_FIO3GBBABPS8_11_CH3_JPE1PS8_11_CH3_FPE1GPS8_11_CH3_S1 +PS8_11_CH3_FPE2PS8_11_JPE4PS8_11_CH4_JPE1PS8_11_CH4_FPE1PS8_11_CH4_FPE2 +GPS8_11_CH4_S1GBBAB PS8_11_FIO4 +PS8_11_JPE3 +ABPS8_11_JPE5PS8_11_FIO5 +EPCPS9_2_EPC2BBRGPS9_2_S2PS9_1CH_JPE1 +PS9_2_TPE1 +PS9_3_VFD17.5HP190-270 FPM +WPS9_3_JR1ABB +PS9_3_FIO1 EPCPS9_3_EPC1ABBRB PS9-3-PS1PS +GPS9_3_S1 +PS9_3_JPE1 +GBBAB +GBBAB +GPS9_3CH2_S1 +GPS9_3CH1_S1 +PS9_3CH2_JPE1PS9_3CH2_FPE1PS9_3CH2_FPE2 +PS9_3CH1_JPE1PS9_3CH1_FPE1PS9_3CH1_FPE2 +GBBAB +GBBAB +GPS9_3CH4_S1 +GPS9_3CH6_S1 +PS9_3CH4_JPE1PS9_3CH4_FPE1PS9_3CH4_FPE2PS9_3CH3_JPE1PS9_3CH6_FPE1PS9_3CH6_FPE2 +PS9_3DIV1_LS1LSPS9_3DIV1_LS2LSSOLPS9_3DIV1_SOL1SOLPS9_3DIV1_SOL2 +PS9_3DIV2_LS1LSPS9_3DIV2_LS2LSSOLPS9_3DIV2_SOL1SOLPS9_3DIV2_SOL2 +PS9_3DIV3_LS1LSPS9_3DIV3_LS2LSSOLPS9_3DIV3_SOL1SOLPS9_3DIV3_SOL2 +PS9_3DIV4_LS1LSPS9_3DIV4_LS2LSSOLPS9_3DIV4_SOL1SOLPS9_3DIV4_SOL2 +PS9_3_FIO2PS9_3_JPE3 +PS9_3_FIO3PS9_3_JPE4 +PS9_3_FIO4 +PS9_3_JPE5PS9_4CH_FPE1 +RGULC1_3_SS1 +ULC1_3_ENC1 +PS8_1_ENC1 +PS8_2_ENC1 +PS8_4_ENC1 PS8_5_ENC1 PS8_8_ENC1 PS8_9_ENC1 +PS8_11_ENC1PS9_2_ENC1 +ULC1_3_JPE2 +RGULC1_3_SS2ULC2_3_JPE1ULC3_3_JPE1ULC4_3_JPE1 +ULC2_3_ENC1ULC3_3_ENC1ULC4_3_ENC1RABBULC2_3_JPE2RABBULC3_3_JPE2RABBULC4_3_JPE2 +WULC1_3_JR1 +WULC2_3_JR1 +WULC3_3_JR1 +WULC4_3_JR1 +RGULC2_3_SS1RGULC3_3_SS1RGULC4_3_SS1 +PS8_1_FIO3PS8_1_FIO4PS8_1_FIO5 +RGPS8_1_SS1 +PS8_1_JPE2PS8_1_JPE1PS8_1_JPE3PS8_1_JPE4PS8_1_JPE5 +WPS8_1_JR1ABB +PRS1_1ACH_JPE1 +WPRS1_2A_JR1ABBB +PRS1_2A_FIO1 +ABBRPRS2_1_JPE1 +PRS1_2A_JPE2 +PRS1_1BCH_JPE1ABBBPRS1_2B_JPE1 +WPRS1_2B_JR1PRS1_2B_FIO1PRS1_2B_JPE2ABBWPRS1_2B_JR2PRS1_3_FIO1 +PRS1_3_JPE1 +PRS1_4_FIO1 +PRS1_3_JPE2 +PRS1_4_JPE1PRS1_4_JPE2PRS1_5CH_JPE1PRS1_5CH_FPE1PRS1_6_TPE1 +PRS1_6_TPE2 +TRASH +PALLETSTAGINGAREA +PROBLEM SOLV.CART 80/20 +PROB. SOLV. CART +TRASHTRASH +PALLETSTAGINGAREA +PROBLEM SOLV.CART 80/20 +PROB. SOLV. CART +TRASHTRASH +PALLETSTAGINGAREA +PROBLEM SOLV.CART 80/20 +PROB. SOLV. CART +TRASHTRASH +PALLETSTAGINGAREA +PROBLEM SOLV.CART 80/20 +PROB. SOLV. CART +TRASHTRASH +PALLETSTAGINGAREA +PROBLEM SOLV.CART 80/20 +PROB. SOLV. CART +TRASH +TRASH +PALLETSTAGINGAREA +PROBLEM SOLV.CART 80/20 +PROB. SOLV. CART +TRASHTRASH +PALLETSTAGINGAREA +PROBLEM SOLV.CART 80/20 +PROB. SOLV. CART +TRASHTRASH +PALLETSTAGINGAREA +PROBLEM SOLV.CART 80/20 +PROB. SOLV. CART +TRASHTRASH +PALLETSTAGINGAREA +PROBLEM SOLV.CART 80/20 +PROB. SOLV. CART +TRASH +ERSCPRS1-7-ERSC1 +MDR POWER SUPPLYPRS1-7-PS180AMDR POWER SUPPLYPRS1-7-PS280A +PRS1_7_PE1PRS1_7_PE2PRS1_7_PE3PRS1_7_PE4PRS1_7_PE5PRS1_7_PE6PRS1_7_PE7PRS1_7_PE8PRS1_7_PE9PRS1_7_PE10PRS1_7_PE11PRS1_7_PE12PRS1_7_PE13PRS1_7_PE14PRS1_7_PE15PRS1_7_PE16PRS1_7_PE17PRS1_7_PE18PRS1_7_PE19PRS1_7_PE20PRS1_7_PE21PRS1_7_PE22PRS1_7_PE23PRS1_7_PE24PRS1_7_PE25PRS1_7_PE26PRS1_7_PE27 +ERSCPRS1-7-ERSC2 +ERSCPRS1-7-ERSC3 +ERSCPRS1-7-ERSC4 +ERSCPRS1-7-ERSC5 +ERSCPRS1-7-ERSC6 +ERSCPRS1-7-ERSC7 +ERSCPRS1-7-ERSC8 +ERSCPRS1-7-ERSC9 +ERSCPRS1-7-ERSC10 +ERSCPRS1-7-ERSC11 +ERSCPRS1-7-ERSC12 +ERSCPRS1-7-ERSC13 +ERSCPRS1-7-ERSC14 +GDTC_SCH1_EN1 +GDTC_SCH2_EN1BBGABBBGB +FL2074_2_PE1ABBB +FL2074_1CH_PE1 +FL2074_2_PE2 +FL2074_2_VFD15HP350FPM +FL2074_3CH_PE1BBBWFL2074_2_JR2 +WFL2074_2_JR1 +FL2078_2_PE1ABBB +FL2078_1CH_PE1 +FL2078_2_PE2 +FL2078_2_VFD15HP350FPM +FL2078_3CH_PE1BBBWFL2078_2_JR2 +WFL2078_2_JR1 +FL2086_2_PE1ABBB +FL2086_1CH_PE1 +FL2086_2_PE2 +FL2086_2_VFD15HP350FPM +FL2086_3CH_PE1BBBWFL2086_2_JR2 +WFL2086_2_JR1 +FL2090_2_PE1ABBB +FL2090_1CH_PE1 +FL2090_2_PE2 +FL2090_2_VFD15HP350FPM +FL2090_3CH_PE1BBBWFL2090_2_JR2 +WFL2090_2_JR1 +FL2094_2_PE1ABBB +FL2094_1CH_PE1 +FL2094_2_PE2 +FL2094_2_VFD15HP350FPM +FL2094_3CH_PE1BBBWFL2094_2_JR2 +WFL2094_2_JR1 +FL4082_2_PE1ABBB +FL4082_1CH_PE1 +FL4082_2_PE2 +FL4082_2_VFD15HP350FPM +FL4082_3CH_PE1BBBWFL4082_2_JR2 +WFL4082_2_JR1 +FL4078_2_PE1ABBB +FL4078_1CH_PE1 +FL4078_2_PE2 +FL4078_2_VFD15HP350FPM +FL4078_3CH_PE1BBBWFL4078_2_JR2 +WFL4078_2_JR1 +FL4074_2_PE1ABBB +FL4074_1CH_PE1 +FL4074_2_PE2 +FL4074_2_VFD15HP350FPM +FL4074_3CH_PE1BBBWFL4074_2_JR2 +WFL4074_2_JR1 +FL4070_2_PE1ABBB +FL4070_1CH_PE1 +FL4070_2_PE2 +FL4070_2_VFD15HP350FPM +FL4070_3CH_PE1BBBWFL4070_2_JR2 +WFL4070_2_JR1 +FL4066_2_PE1ABBB +FL4066_1CH_PE1 +FL4066_2_PE2 +FL4066_2_VFD15HP350FPM +FL4066_3CH_PE1BBBWFL4066_2_JR2 +WFL4066_2_JR1 +CH_DPM9MCM05 CH_DPM12MCM05CH_DPM7_FIOM2CH_DPM7_FIOM1CH_DPM7_FIOM4CH_DPM7_FIOM3CH_DPM7_FIOM6CH_DPM7_FIOM5CH_DPM7_FIOM8CH_DPM7_FIOM7CH_DPM8_FIOM2CH_DPM8_FIOM1CH_DPM8_FIOM4CH_DPM8_FIOM3CH_DPM8_FIOM6CH_DPM8_FIOM5CH_DPM8_FIOM8CH_DPM8_FIOM7CH_DPM9_FIOM2CH_DPM9_FIOM1CH_DPM9_FIOM4CH_DPM9_FIOM3CH_DPM9_FIOM5CH_DPM9_FIOM6 CH_DPM10_FIOM2CH_DPM10_FIOM1CH_DPM10_FIOM4CH_DPM10_FIOM3CH_DPM10_FIOM6CH_DPM10_FIOM5CH_DPM10_FIOM8CH_DPM10_FIOM7CH_DPM11_FIOM2CH_DPM11_FIOM1CH_DPM11_FIOM4CH_DPM11_FIOM3CH_DPM11_FIOM6CH_DPM11_FIOM5CH_DPM11_FIOM8CH_DPM11_FIOM7CH_DPM12_FIOM2CH_DPM12_FIOM1CH_DPM12_FIOM4CH_DPM12_FIOM3 +GDTC_SCH3_EN1BBGB +GDTC_SCH4_EN1BBGB +GDTC_SCH5_EN1BBGAB +GDTC_SCH6_EN1BBGB +GDTC_SCH7_EN1BBGB +GDTC_SCH8_EN1BBGB +GDTC_SCH10_EN1BBGB +GDTC_SCH11_EN1BBGB +GDTC_SCH12_EN1BBGB +GDTC_SCH14_EN1BBGB +GDTC_SCH15_EN1BBGB +GBBGB +GBBGB +GBBGB +GBBGB +GBBGB +GBBGB +GBBGB +GBBGB +GBBGB +GBBGB +GBBGB +GBBGB +GBBGB +GBBGB +GBBGB +GBBGB +GBBGB +GDTC_SCH41_EN1BBGB +GDTC_SCH42_EN1BBGB +GDTC_SCH45_EN1BBGB +GDTC_SCH48_EN1BBGB +GDTC_SCH50_EN1BBGB +GDTC_SCH51_EN1BBGB +GDTC_SCH52_EN1BBGB +GDTC_SCH54_EN1BBGB +GDTC_SCH55_EN1BBGB +GDTC_SCH57_EN1BBGB +GDTC_SCH58_EN1BBGB +GDTC_SCH60_EN1BBGB +GDTC_SCH61_EN1BBGB +GDTC_SCH63_EN1BBGB +GDTC_SCH64_EN1BBGB +GDTC_SCH65_EN1BBGB +GDTC_SCH67_EN1BBGB +GDTC_SCH68_EN1BBGB +GDTC_SCH69_EN1BBGB +GDTC_SCH9_EN1BBGAB +GDTC_SCH13_EN1BBGAB +GDTC_SCH16_EN1BBGAB BBGAB +G G G G GBBGAB BBGAB BBGAB BBGAB BBGAB +G +GDTC_SCH40_EN1BBGAB +GDTC_SCH43_EN1BBGAB +GDTC_SCH46_EN1BBGAB +GDTC_SCH49_EN1BBGAB +GDTC_SCH44_EN1BBGB +GDTC_SCH47_EN1BBGB +GDTC_SCH53_EN1BBGAB +GDTC_SCH56_EN1BBGAB +GDTC_SCH59_EN1BBGAB +GDTC_SCH62_EN1BBGAB +GDTC_SCH66_EN1BBGAB +PB_SCH1_FIOH1 +PB_SCH1_PE1 +PB_SCH1_PE2 +BBGAB +W +PB_SCH1_PKGREL_PB1 +SOLPB_SCH1_PKGREL_SOL1 +BBGB +PB_SCH2_PE1 +PB_SCH2_PE2 +SOL +PB_SCH2_PKGREL_SOL1 +WPB_SCH2_PKGREL_PB1 +PB_SCH3_FIOH1PB_SCH5_FIOH1PB_SCH7_FIOH1PB_SCH9_FIOH1PB_SCH11_FIOH1PB_SCH13_FIOH1PB_SCH15_FIOH1PB_SCH17_FIOH1PB_SCH18_FIOH1PB_SCH20_FIOH1PB_SCH22_FIOH1PB_SCH24_FIOH1PB_SCH26_FIOH1PB_SCH28_FIOH1PB_SCH30_FIOH1PB_SCH32_FIOH1PB_SCH33_FIOH1PB_SCH35_FIOH1PB_SCH36_FIOH1PB_SCH38_FIOH1PB_SCH39_FIOH1PB_SCH40_FIOH1PB_SCH41_FIOH1 PB_SCH42_FIOH1PB_SCH43_FIOH1PB_SCH44_FIOH1PB_SCH45_FIOH1PB_SCH46_FIOH1PB_SCH48_FIOH1PB_SCH50_FIOH1PB_SCH52_FIOH1PB_SCH54_FIOH1PB_SCH56_FIOH1PB_SCH58_FIOH1PB_SCH60_FIOH1PB_SCH62_FIOH1PB_SCH63_FIOH1PB_SCH65_FIOH1PB_SCH67_FIOH1PB_SCH69_FIOH1PB_SCH71_FIOH1PB_SCH73_FIOH1PB_SCH75_FIOH1 +BBGB +PB_SCH3_PE1 +PB_SCH3_PE2 +SOLPB_SCH3_PKGREL_SOL1 +W +PB_SCH3_PKGREL_PB1 +BBGB +PB_SCH4_PE1 +PB_SCH4_PE2 +SOL +PB_SCH4_PKGREL_SOL1 +WPB_SCH4_PKGREL_PB1 +BBGB +PB_SCH6_PE1 +PB_SCH6_PE2 +SOL +PB_SCH6_PKGREL_SOL1 +W +PB_SCH6_PKGREL_PB1 +BBGB +PB_SCH7_PE1 +PB_SCH7_PE2 +SOLPB_SCH7_PKGREL_SOL1 +W +PB_SCH7_PKGREL_PB1 +BBGB +PB_SCH8_PE1 +PB_SCH8_PE2 +SOLPB_SCH8_PKGREL_SOL1 +W +PB_SCH8_PKGREL_PB1 +BBGB +PB_SCH10_PE1 +PB_SCH10_PE2 +SOLPB_SCH10_PKGREL_SOL1 +W +PB_SCH10_PKGREL_PB1 +BBGB +PB_SCH11_PE1 +PB_SCH11_PE2 +SOLPB_SCH11_PKGREL_SOL1 +WPB_SCH11_PKGREL_PB1 +BBGB +PB_SCH12_PE1 +PB_SCH12_PE2 +SOLPB_SCH12_PKGREL_SOL1 +W +PB_SCH12_PKGREL_PB1 +BBGB +PB_SCH14_PE1 +PB_SCH14_PE2 +SOLPB_SCH14_PKGREL_SOL1 +W +PB_SCH14_PKGREL_PB1 +BBGB +PB_SCH15_PE1 +PB_SCH15_PE2 +SOL +PB_SCH15_PKGREL_SOL1 +WPB_SCH15_PKGREL_PB1 +BBGB +PB_SCH16_PE1 +PB_SCH16_PE2 +SOLPB_SCH16_PKGREL_SOL1 +W +PB_SCH16_PKGREL_PB1 +BBGB +PB_SCH18_PE1 +PB_SCH18_PE2 +SOLPB_SCH18_PKGREL_SOL1 +W +PB_SCH18_PKGREL_PB1 +BBGB +PB_SCH19_PE1 +PB_SCH19_PE2 +SOLPB_SCH19_PKGREL_SOL1 +W +PB_SCH19_PKGREL_PB1 +BBGB +PB_SCH21_PE1 +PB_SCH21_PE2 +SOLPB_SCH21_PKGREL_SOL1 +W +PB_SCH21_PKGREL_PB1 +BBGB +PB_SCH22_PE1 +PB_SCH22_PE2 +SOLPB_SCH22_PKGREL_SOL1 +WPB_SCH22_PKGREL_PB1 +BBGB +PB_SCH23_PE1 +PB_SCH23_PE2 +SOLPB_SCH23_PKGREL_SOL1 +W +PB_SCH23_PKGREL_PB1 +BBGB +PB_SCH25_PE1 +PB_SCH25_PE2 +SOLPB_SCH25_PKGREL_SOL1 +W +PB_SCH25_PKGREL_PB1 +BBGB +PB_SCH26_PE1 +PB_SCH26_PE2 +SOLPB_SCH26_PKGREL_SOL1 +W +PB_SCH26_PKGREL_PB1 +BBGB +PB_SCH27_PE1 +PB_SCH27_PE2 +SOLPB_SCH27_PKGREL_SOL1 +W +PB_SCH27_PKGREL_PB1 +BBGB +PB_SCH29_PE1 +PB_SCH29_PE2 +SOLPB_SCH29_PKGREL_SOL1 +WPB_SCH29_PKGREL_PB1 +BBGB +PB_SCH30_PE1 +PB_SCH30_PE2 +SOLPB_SCH30_PKGREL_SOL1 +W +PB_SCH30_PKGREL_PB1 +BBGB +PB_SCH31_PE1 +PB_SCH31_PE2 +SOLPB_SCH31_PKGREL_SOL1 +WPB_SCH31_PKGREL_PB1 +BBGB +PB_SCH33_PE1 +PB_SCH33_PE2 +SOLPB_SCH33_PKGREL_SOL1 +W +PB_SCH33_PKGREL_PB1 +BBGB +PB_SCH34_PE1 +PB_SCH34_PE2 +SOLPB_SCH34_PKGREL_SOL1 +W +PB_SCH34_PKGREL_PB1 +BBGB +PB_SCH36_PE1 +PB_SCH36_PE2 +SOL +PB_SCH36_PKGREL_SOL1 +WPB_SCH36_PKGREL_PB1 +BBGB +PB_SCH37_PE1 +PB_SCH37_PE2 +SOLPB_SCH37_PKGREL_SOL1 +W +PB_SCH37_PKGREL_PB1 +BBGB +PB_SCH39_PE1 +PB_SCH39_PE2 +SOLPB_SCH39_PKGREL_SOL1 +W +PB_SCH39_PKGREL_PB1 +BBGB +PB_SCH41_PE1 +PB_SCH41_PE2 +SOLPB_SCH41_PKGREL_SOL1 +W +PB_SCH41_PKGREL_PB1 +BBGB +PB_SCH43_PE1 +PB_SCH43_PE2 +SOLPB_SCH43_PKGREL_SOL1 +W +PB_SCH43_PKGREL_PB1 +BBGB +PB_SCH45_PE1 +PB_SCH45_PE2 +SOLPB_SCH45_PKGREL_SOL1 +W +PB_SCH45_PKGREL_PB1 +BBGB +PB_SCH47_PE1 +PB_SCH47_PE2 +SOL +PB_SCH47_PKGREL_SOL1 +WPB_SCH47_PKGREL_PB1 +BBGB +PB_SCH49_PE1 +PB_SCH49_PE2 +SOL +PB_SCH49_PKGREL_SOL1 +WPB_SCH49_PKGREL_PB1 +BBGB +PB_SCH50_PE1 +PB_SCH50_PE2 +SOLPB_SCH50_PKGREL_SOL1 +W +PB_SCH50_PKGREL_PB1 +BBGB +PB_SCH51_PE1 +PB_SCH51_PE2 +SOL +PB_SCH51_PKGREL_SOL1 +W +PB_SCH51_PKGREL_PB1 +BBGB +PB_SCH53_PE1 +PB_SCH53_PE2 +SOLPB_SCH53_PKGREL_SOL1 +W +PB_SCH53_PKGREL_PB1 +BBGB +PB_SCH54_PE1 +PB_SCH54_PE2 +SOLPB_SCH54_PKGREL_SOL1 +W +PB_SCH54_PKGREL_PB1 +BBGB +PB_SCH55_PE1 +PB_SCH55_PE2 +SOLPB_SCH55_PKGREL_SOL1 +W +PB_SCH55_PKGREL_PB1 +BBGB +PB_SCH57_PE1 +PB_SCH57_PE2 +SOLPB_SCH57_PKGREL_SOL1 +W +PB_SCH57_PKGREL_PB1 +BBGB +PB_SCH58_PE1 +PB_SCH58_PE2 +SOLPB_SCH58_PKGREL_SOL1 +WPB_SCH58_PKGREL_PB1 +BBGB +PB_SCH59_PE1 +PB_SCH59_PE2 +SOLPB_SCH59_PKGREL_SOL1 +W +PB_SCH59_PKGREL_PB1 +BBGB +PB_SCH61_PE1 +PB_SCH61_PE2 +SOLPB_SCH61_PKGREL_SOL1 +W +PB_SCH61_PKGREL_PB1 +BBGB +PB_SCH62_PE1 +PB_SCH62_PE2 +SOL +PB_SCH62_PKGREL_SOL1 +WPB_SCH62_PKGREL_PB1 +BBGB +PB_SCH64_PE1 +PB_SCH64_PE2 +SOLPB_SCH64_PKGREL_SOL1 +W +PB_SCH64_PKGREL_PB1 +BBGB +PB_SCH65_PE1 +PB_SCH65_PE2 +SOL +PB_SCH65_PKGREL_SOL1 +WPB_SCH65_PKGREL_PB1 +BBGB +PB_SCH66_PE1 +PB_SCH66_PE2 +SOLPB_SCH66_PKGREL_SOL1 +W +PB_SCH66_PKGREL_PB1 +BBGB +PB_SCH68_PE1 +PB_SCH68_PE2 +SOLPB_SCH68_PKGREL_SOL1 +W +PB_SCH68_PKGREL_PB1 +BBGB +PB_SCH69_PE1 +PB_SCH69_PE2 +SOL +PB_SCH69_PKGREL_SOL1 +W +PB_SCH69_PKGREL_PB1 +BBGB +PB_SCH70_PE1 +PB_SCH70_PE2 +SOLPB_SCH70_PKGREL_SOL1 +W +PB_SCH70_PKGREL_PB1 +BBGB +PB_SCH72_PE1 +PB_SCH72_PE2 +SOLPB_SCH72_PKGREL_SOL1 +W +PB_SCH72_PKGREL_PB1 +BBGB +PB_SCH73_PE1 +PB_SCH73_PE2 +SOLPB_SCH73_PKGREL_SOL1 +W +PB_SCH73_PKGREL_PB1 +BBGB +PB_SCH75_PE1 +PB_SCH75_PE2 +SOLPB_SCH75_PKGREL_SOL1 +W +PB_SCH75_PKGREL_PB1 +PB_SCH5_PE1 +PB_SCH5_PE2 +BBGAB +W +PB_SCH5_PKGREL_PB1 +SOLPB_SCH5_PKGREL_SOL1 +PB_SCH9_PE1 +PB_SCH9_PE2 +BBGAB +WPB_SCH9_PKGREL_PB1 +SOLPB_SCH9_PKGREL_SOL1 +PB_SCH13_PE1 +PB_SCH13_PE2 +BBGAB +WPB_SCH13_PKGREL_PB1 +SOLPB_SCH13_PKGREL_SOL1 +PB_SCH17_PE1 +PB_SCH17_PE2 +BBGAB +WPB_SCH17_PKGREL_PB1 +SOL +PB_SCH17_PKGREL_SOL1 +PB_SCH20_PE1 +PB_SCH20_PE2 +BBGAB +WPB_SCH20_PKGREL_PB1 +SOLPB_SCH20_PKGREL_SOL1 +PB_SCH24_PE1 +PB_SCH24_PE2 +BBGAB +WPB_SCH24_PKGREL_PB1 +SOL +PB_SCH24_PKGREL_SOL1 +PB_SCH28_PE1 +PB_SCH28_PE2 +BBGAB +W +PB_SCH28_PKGREL_PB1 +SOLPB_SCH28_PKGREL_SOL1 +PB_SCH32_PE1 +PB_SCH32_PE2 +BBGAB +W +PB_SCH32_PKGREL_PB1 +SOLPB_SCH32_PKGREL_SOL1 +PB_SCH35_PE1 +PB_SCH35_PE2 +BBGAB +W +PB_SCH35_PKGREL_PB1 +SOL +PB_SCH35_PKGREL_SOL1 +PB_SCH38_PE1 +PB_SCH38_PE2 +BBGAB +WPB_SCH38_PKGREL_PB1 +SOL +PB_SCH38_PKGREL_SOL1 +PB_SCH40_PE1 +PB_SCH40_PE2 +BBGAB +W +PB_SCH40_PKGREL_PB1 +SOLPB_SCH40_PKGREL_SOL1 +PB_SCH42_PE1 +PB_SCH42_PE2 +BBGAB +WPB_SCH42_PKGREL_PB1 +SOLPB_SCH42_PKGREL_SOL1 +PB_SCH44_PE1 +PB_SCH44_PE2 +BBGAB +W +PB_SCH44_PKGREL_PB1 +SOLPB_SCH44_PKGREL_SOL1 +PB_SCH46_PE1 +PB_SCH46_PE2 +BBGAB +W +PB_SCH46_PKGREL_PB1 +SOLPB_SCH46_PKGREL_SOL1 +PB_SCH48_PE1 +PB_SCH48_PE2 +BBGAB +W +PB_SCH48_PKGREL_PB1 +SOLPB_SCH48_PKGREL_SOL1 +PB_SCH52_PE1 +PB_SCH52_PE2 +BBGAB +W +PB_SCH52_PKGREL_PB1 +SOLPB_SCH52_PKGREL_SOL1 +PB_SCH56_PE1 +PB_SCH56_PE2 +BBGAB +WPB_SCH56_PKGREL_PB1 +SOLPB_SCH56_PKGREL_SOL1 +PB_SCH60_PE1 +PB_SCH60_PE2 +BBGAB +WPB_SCH60_PKGREL_PB1 +SOL +PB_SCH60_PKGREL_SOL1 +PB_SCH63_PE1 +PB_SCH63_PE2 +BBGAB +WPB_SCH63_PKGREL_PB1 +SOL +PB_SCH63_PKGREL_SOL1 +PB_SCH67_PE1 +PB_SCH67_PE2 +BBGAB +WPB_SCH67_PKGREL_PB1 +SOL +PB_SCH67_PKGREL_SOL1 +PB_SCH71_PE1 +PB_SCH71_PE2 +BBGAB +W +PB_SCH71_PKGREL_PB1 +SOLPB_SCH71_PKGREL_SOL1 +PB_SCH74_PE1 +PB_SCH74_PE2 +BBGAB +WPB_SCH74_PKGREL_PB1 +SOLPB_SCH74_PKGREL_SOL1 +MCM05 +MCM05 \ No newline at end of file diff --git a/projects/MTN6/extracted_texts/MTN6_SYSDL-MCM06.txt b/projects/MTN6/extracted_texts/MTN6_SYSDL-MCM06.txt new file mode 100644 index 0000000..41f0e78 --- /dev/null +++ b/projects/MTN6/extracted_texts/MTN6_SYSDL-MCM06.txt @@ -0,0 +1,387 @@ +ST 4.0kW 1.4375 +CL +ST 1.5kW 1.4375 +12'-11" +12'-11" +S02-101CH2S02-101CH4S02-101CH6S02-101CH8S02-101CH10S02-101CH12S02-101CH14S02-101CH16S02-101CH18S02-101CH20S02-101CH22S02-101CH24S02-101CH26S02-101CH28S02-101CH30 +S02-101CH1S02-101CH3S02-101CH5S02-101CH7S02-101CH9S02-101CH11S02-101CH13S02-101CH15S02-101CH17S02-101CH19S02-101CH21S02-101CH23S02-101CH25S02-101CH27S02-101CH29 +NCS2-050-CH2NCS2-050-CH4NCS2-050-CH6NCS2-050-CH8NCS2-050-CH10NCS2-050-CH12NCS2-050-CH14NCS2-050-CH16NCS2-050-CH18NCS2-050-CH20NCS2-050-CH22NCS2-050-CH24NCS2-050-CH26NCS2-050-CH28NCS2-050-CH30 +NCS2-050-CH1NCS2-050-CH3NCS2-050-CH5NCS2-050-CH7NCS2-050-CH9NCS2-050-CH11NCS2-050-CH13NCS2-050-CH15NCS2-050-CH17NCS2-050-CH19NCS2-050-CH21NCS2-050-CH23NCS2-050-CH25NCS2-050-CH27NCS2-050-CH29 +NCP1_9_VFD12HP350 FPM +NCP1_10B_VFD12HP350 FPMNCP1_10A_VFD12HP350 FPM +NCP1_11_VFD12HP350 FPMNCP1_12_VFD12HP350 FPMNCP1_13_VFD12HP350 FPM +NCP1_14A_VFD12HP350 FPMNCP1_14B_VFD12HP350 FPMNCP1_14C_VFD12HP350 FPM +NCP1_15_VFD17.5HP350 FPM +NCP1_16_VFD15HP350 FPMNCP1_17_VFD12HP350 FPMNCP1_18A_VFD12HP350 FPM +NCP1_19_VFD12HP350 FPM +NCP1_20_VFD15HP300 FPM +NCS1_1_VFD12HP300 FPMNCS1_2_VFD12HP300 FPMNCS1_3_VFD15HP300 FPM +NCS1_4_VFD12HP300 FPM +NCS1_5B_VFD12HP300 FPMNCS1_5A_VFD12HP300 FPM +NCS1_6_VFD12HP240 FPMNCS1_7_VFD12HP240 FPMNCS1_8_VFD12HP240 FPMNCS1_9_VFD12HP240 FPMS02_1_VFD130HP250 FPM +NCP1_21_VFD17.5HP300 FPM +NCP2_1_VFD15HP300 FPMNCS2_2_VFD12HP300 FPM +NCS2_3A_VFD12HP300 FPM +NCS2_4_VFD12HP240 FPMNCS2_5_VFD12HP240 FPMNCS2_6_VFD12HP240 FPMNCS2_7_VFD12HP240 FPM +WGS02_102CH_ER1 +S02_102CH_PE1 +S02_102CH_PE2 +SNDRCV +S02_1_LRPE1 +MCM06 +SNDRCV +S02_1_LRPE2 +MCM06 +RBB +EPCNCP1_9_EPC2RBB +EPCNCP1_15_EPC1RBB +EPCNCP1_15_EPC2ABB +NCP1_20_PE1(INFEED PRODUCT SENSOR) +NCP1_20_PE3(OUTFEED PRODUCT SENSOR) +NCP1_20_PE2(IDLE DEBRIS SENSOR) +NCP1_20_PE4(DRIVE END DEBRIS/SPROCKET ENGAGEMENT SENSOR) +NCP1_20_APS1APSNCP1_20_SOL1SOLNCP1_20_SOL2SOL +EPCNCP1_21_EPC1RBB +RGNCP1_21_SS1 +EPCNCP1_21_EPC2 +RG NCP1_21_SS2RBB +EPCNCS1_4_EPC4RBB +EPCNCS1_4_EPC2RBB +WNCP1_16_JR1ABB +WNCS1_3_JR1ABB +EPCNCS2_2_EPC2RBB +EPCNCS2_2_EPC1RBBRGNCS2_2_SS1 +BBBGBBBG +WS02_1_JR2 +A +WS02_1_JR1 +S02_1_JPE1S02_1CH_JPE1 +HBBBA +EPCNCS1_4_EPC3 +EPCNCS1_4_EPC1 +WNCP1_16_JR2R +GNCP1_9_S1 +GNCP1_9_S2 +GNCP1_15_S1 +GNCP1_15_S2 +GNCS1_4_S1 +GNCS1_4_S2EPCS02_1_EPC2 +EPCS02_1_EPC1 +NCP1_11_ENC1NCP1_12_ENC1NCP1-13-ENC1 NCP1_15_ENC1 +NCP1_17_ENC1 +NCP1_19_ENC1 +NCS1_2_ENC1 +NCS1_4_ENC1NCS1_6_ENC1NCS1_7_ENC1NCS1_8_ENC1NCS1_9_ENC1 +NCS2_7_ENC1NCS2_6_ENC1NCS2_5_ENC1NCS2_4_ENC1NCS2_2_ENC1 +NCP1_21_ENC1 +NCP1_15_JPE1 +NCP1_17_TPE1 +NCS1_1_TPE1 +NCS1_4_TPE1 +NCS2_2_TPE1 +NCP1_21_TPE1 +NCP1_9_TPE1NCP_11_TPE1 +V +ST 4.0kW 1.4375 +CL +ST 1.5kW 1.4375 +S02-101CH2S02-101CH4S02-101CH6S02-101CH8S02-101CH10S02-101CH12S02-101CH14S02-101CH16S02-101CH18S02-101CH20S02-101CH22S02-101CH24S02-101CH26S02-101CH28S02-101CH30 +S02-101CH1S02-101CH3S02-101CH5S02-101CH7S02-101CH9S02-101CH11S02-101CH13S02-101CH15S02-101CH17S02-101CH19S02-101CH21S02-101CH23S02-101CH25S02-101CH27S02-101CH29 +NCS2-050-CH2NCS2-050-CH4NCS2-050-CH6NCS2-050-CH8NCS2-050-CH10NCS2-050-CH12NCS2-050-CH14NCS2-050-CH16NCS2-050-CH18NCS2-050-CH20NCS2-050-CH22NCS2-050-CH24NCS2-050-CH26NCS2-050-CH28NCS2-050-CH30 +NCS2-050-CH1NCS2-050-CH3NCS2-050-CH5NCS2-050-CH7NCS2-050-CH9NCS2-050-CH11NCS2-050-CH13NCS2-050-CH15NCS2-050-CH17NCS2-050-CH19NCS2-050-CH21NCS2-050-CH23NCS2-050-CH25NCS2-050-CH27NCS2-050-CH29 +EPCNCP1_9_EPC1 +RGNCS2_2_SS2 +NCS2_DPM1MCM06 +NCS1_DPM1MCM06 +NCP_DPM3MCM06 +NCP_DPM2MCM06NCP_11_TPE2NCP1_12_TPE1NCP1_13_TPE1NCP1_15_TPE1 +NCP1_14D_VFD12HP350 FPM +NCP1_17_TPE2 +NCP1_18B_VFD12HP350 FPMNCP1_19_TPE1 +NCP1_19_TPE2 +NCS1_2_JPE1 +NCS1_4_TPE2 +NCS1_6_TPE1NCS1_6_TPE2NCS1_7_TPE1NCS1_8_TPE1NCS1_9_TPE1S02_104CH_FIOH1 +S02_1_FIO1S02_104CH_PE1 +S02_104CH_PE2 +S02_106CH_PE1 +S02_106CH_PE2 +S02_108CH_PE1 +S02_108CH_PE2 +S02_110CH_PE1 +S02_110CH_PE2 +S02_112CH_PE1 +S02_112CH_PE2 +S02_114CH_PE1 +S02_114CH_PE2 +S02_116CH_PE1 +S02_116CH_PE2 +S02_118CH_PE1 +S02_118CH_PE2 +S02_120CH_PE1 +S02_120CH_PE2 +S02_122CH_PE1 +S02_122CH_PE2 +S02_124CH_PE1 +S02_124CH_PE2 +S02_126CH_PE1 +S02_126CH_PE2 +S02_128CH_PE1 +S02_128CH_PE2 +S02_130CH_PE1 +S02_130CH_PE2 +S02_101CH_PE1 +S02_101CH_PE2BBBGA +WGS02_101CH_ER1 +S02_103CH_FIOH1S02_103CH_PE1 +S02_103CH_PE2 +S02_105CH_PE1 +S02_105CH_PE2 +S02_107CH_PE1 +S02_107CH_PE2 +S02_109CH_PE1 +S02_109CH_PE2 +S02_111CH_PE1 +S02_111CH_PE2 +S02_113CH_PE1 +S02_113CH_PE2 +S02_115CH_PE1 +S02_115CH_PE2 +S02_117CH_PE1 +S02_117CH_PE2 +S02_119CH_PE1 +S02_119CH_PE2 +S02_121CH_PE1 +S02_121CH_PE2 +S02_123CH_PE1 +S02_123CH_PE2 +S02_125CH_PE1 +S02_125CH_PE2 +S02_127CH_PE1 +S02_127CH_PE2 +S02_129CH_PE1 +S02_129CH_PE2 BBBG +WGS02_103CH_ER1WGS02_105CH_ER1WGS02_107CH_ER1WGS02_109CH_ER1WGS02_111CH_ER1WGS02_113CH_ER1WGS02_115CH_ER1WGS02_117CH_ER1WGS02_119CH_ER1WGS02_121CH_ER1WGS02_123CH_ER1WGS02_125CH_ER1WGS02_127CH_ER1WGS02_129CH_ER1 +WGS02_104CH_ER1WGS02_106CH_ER1WGS02_108CH_ER1WGS02_110CH_ER1WGS02_112CH_ER1WGS02_114CH_ER1WGS02_116CH_ER1WGS02_118CH_ER1WGS02_120CH_ER1WGS02_122CH_ER1WGS02_124CH_ER1WGS02_126CH_ER1WGS02_128CH_ER1WGS02_130CH_ER1 +SNDRCV +S02_1_LRPE3 +MCM06 +SNDRCV +S02_1_LRPE4 +MCM06 +WS02_1_JR4WS02_1_JR3 +SNDRCV +S02_1_LRPE5 +MCM06 +SNDRCV +S02_1_LRPE6 +MCM06 +WS02_1_JR6WS02_1_JR5 +SNDRCV +S02_1_LRPE7 +MCM06 +SNDRCV +S02_1_LRPE8 +MCM06 +WS02_1_JR8WS02_1_JR7 +SNDRCV +S02_1_LRPE9 +MCM06 +SNDRCV +S02_1_LRPE10 +MCM06 +WS02_1_JR10WS02_1_JR9 +BBBGA +BBBGA +BBBGA +BBBGA +BBBGA +BBBGA +BBBGA +BBBGA +BBBG +BBBG +BBBG +BBBG +BBBG +BBBG +BBBG +BBBG +BBBG +BBBG +BBBG +BBBG +BBBG +BBBG +BBBG +BBBG +BBBG +BBBG +S02_108CH_FIOH1 +S02_107CH_FIOH1 +S02_112CH_FIOH1 +S02_111CH_FIOH1 +S02_116CH_FIOH1 +S02_115CH_FIOH1 +S02_120CH_FIOH1 +S02_119CH_FIOH1 +S02_124CH_FIOH1 +S02_123CH_FIOH1 +S02_128CH_FIOH1 +S02_127CH_FIOH1 +S02_1_FIO2S02_1_FIO3S02_1_FIO4S02_1_FIO5S02_1_FIO6S02_1_FIO7S02_1_FIO8 +S02_129CH_FIOH1 +S02_2_VFD130HP250 FPM +WGS02_202CH_ER1 +S02_202CH_PE1 +S02_202CH_PE2 +SNDRCV +S02_2_LRPE1 +MCM06 +SNDRCV +S02_2_LRPE2 +MCM06 +BBBGBBBG +WS02_2_JR2 +A +WS02_2_JR1 +S02_2_JPE1S02_2CH_JPE1 +HBBBA +NCS2_050_PE1 +EPCS02_2_EPC2 +EPCS02_2_EPC1S02_204CH_FIOH1 +S02_2_FIO1S02_204CH_PE1 +S02_204CH_PE2 +S02_206CH_PE1 +S02_206CH_PE2 +S02_208CH_PE1 +S02_208CH_PE2 +S02_210CH_PE1 +S02_210CH_PE2 +S02_212CH_PE1 +S02_212CH_PE2 +S02_214CH_PE1 +S02_214CH_PE2 +S02_216CH_PE1 +S02_216CH_PE2 +S02_218CH_PE1 +S02_218CH_PE2 +S02_220CH_PE1 +S02_220CH_PE2 +S02_222CH_PE1 +S02_222CH_PE2 +S02_224CH_PE1 +S02_224CH_PE2 +S02_226CH_PE1 +S02_226CH_PE2 +S02_228CH_PE1 +S02_228CH_PE2 +S02_230CH_PE1 +S02_230CH_PE2 +S02_201CH_PE1 +S02_201CH_PE2BBBGA +WGS02_201CH_ER1 +S02_203CH_FIOH1S02_203CH_PE1 +S02_203CH_PE2 +S02_205CH_PE1 +S02_205CH_PE2 +S02_207CH_PE1 +S02_207CH_PE2 +S02_209CH_PE1 +S02_209CH_PE2 +S02_211CH_PE1 +S02_211CH_PE2 +S02_213CH_PE1 +S02_213CH_PE2 +S02_215CH_PE1 +S02_215CH_PE2 +S02_217CH_PE1 +S02_217CH_PE2 +S02_219CH_PE1 +S02_219CH_PE2 +S02_221CH_PE1 +S02_221CH_PE2 +S02_223CH_PE1 +S02_223CH_PE2 +S02_225CH_PE1 +S02_225CH_PE2 +S02_227CH_PE1 +S02_227CH_PE2 +S02_229CH_PE1 +S02_229CH_PE2 BBBG +WGS02_203CH_ER1WGS02_205CH_ER1WGS02_207CH_ER1WGS02_209CH_ER1WGS02_211CH_ER1WGS02_213CH_ER1WGS02_215CH_ER1WGS02_217CH_ER1WGS02_219CH_ER1WGS02_221CH_ER1WGS02_223CH_ER1WGS02_225CH_ER1WGS02_227CH_ER1WGS02_229CH_ER1 +WGS02_204CH_ER1WGS02_206CH_ER1WGS02_208CH_ER1WGS02_210CH_ER1WGS02_212CH_ER1WGS02_214CH_ER1WGS02_216CH_ER1WGS02_218CH_ER1WGS02_220CH_ER1WGS02_222CH_ER1WGS02_224CH_ER1WGS02_226CH_ER1WGS02_228CH_ER1WGS02_230CH_ER1 +SNDRCV +S02_2_LRPE3 +MCM06 +SNDRCV +S02_2_LRPE4 +MCM06 +WS02_2_JR4WS02_2_JR3 +SNDRCV +S02_2_LRPE5 +MCM06 +SNDRCV +S02_2_LRPE6 +MCM06 +WS02_2_JR6WS02_2_JR5 +SNDRCV +S02_2_LRPE7 +MCM06 +SNDRCV +S02_2_LRPE8 +MCM06 +WS02_2_JR8WS02_2_JR7 +SNDRCV +S02_2_LRPE9 +MCM06 +SNDRCV +S02_2_LRPE10 +MCM06 +WS02_2_JR10WS02_2_JR9 +BBBGA +BBBGA +BBBGA +BBBGA +BBBGA +BBBGA +BBBGA +BBBGA +BBBG +BBBG +BBBG +BBBG +BBBG +BBBG +BBBG +BBBG +BBBG +BBBG +BBBG +BBBG +BBBG +BBBG +BBBG +BBBG +BBBG +BBBG +S02_208CH_FIOH1 +S02_207CH_FIOH1 +S02_212CH_FIOH1 +S02_211CH_FIOH1 +S02_216CH_FIOH1 +S02_215CH_FIOH1 +S02_220CH_FIOH1 +S02_219CH_FIOH1 +S02_224CH_FIOH1 +S02_223CH_FIOH1 +S02_228CH_FIOH1 +S02_227CH_FIOH1 +S02_2_FIO2S02_2_FIO3S02_2_FIO4S02_2_FIO5S02_2_FIO6S02_2_FIO7S02_2_FIO8 +S02_229CH_FIOH1 +NCP1_21_JPE1 +NCS2_2_TPE2 +NCS2_3B_VFD12HP300 FPMNCS2_4_TPE1NCS2_4_TPE2NCS2_5_TPE1NCS2_6_TPE1 +NCS2_7_TPE1 +MCM06 +MCM06 \ No newline at end of file diff --git a/projects/MTN6/extracted_texts/MTN6_SYSDL-MCM07.txt b/projects/MTN6/extracted_texts/MTN6_SYSDL-MCM07.txt new file mode 100644 index 0000000..b725d5c --- /dev/null +++ b/projects/MTN6/extracted_texts/MTN6_SYSDL-MCM07.txt @@ -0,0 +1,449 @@ +BYAB_2_VFD15HP550 FPM BYAB_3_VFD15HP550 FPM +BYAB_4_VFD13HP500 FPM +BYAB_5_VFD15HP450 FPMBYAB_6_VFD13HP400 FPM +BYAB_7_VFD17.5HP350 FPMBYAB_8_VFD15HP300 FPMBYAB_9_VFD12HP300 FPM +BYAB_10_VFD13HP300 FPM +BYAB_11_VFD13HP300 FPM +BYAB_12_VFD17.5HP300 FPMBYAB_13_VFD110HP300 FPMBYAB_14_VFD110HP300 FPMBYAB_15_VFD13HP300 FPM +BYAD_2_VFD13HP550 FPM BYAD_3_VFD17.5HP500 FPMBYAD_4_VFD15HP450 FPM +BYAD_5_VFD17.5HP400 FPM +BYAD_6_VFD13HP350 FPM BYAD_7_VFD110HP300 FPM +BYAD_8_VFD110HP300 FPMBYAD_9_VFD13HP300 FPM +BYAC_2_VFD13HP550 FPM BYAC_3_VFD17.5HP500 FPMBYAC_4_VFD15HP450 FPM +BYAC_5_VFD15HP400 FPM +BYAC_6_VFD13HP350 FPMBYAC_7_VFD110HP300 FPMBYAC_8_VFD110HP300 FPMBYAC_9_VFD13HP300 FPM +BYAC_10_VFD15HP300 FPMBYAC_11_VFD13HP300 FPM +ABB +BYAC_2_JPE1 +SNDRCV +BYA_LRPE1 +MCM07 +BYAD_2_JPE1 +BYAB_2_JPE1 +BYAC_2_TPE1 BYAC_3_JPE1 +BYAC_5_TPE1 +BYAC_5_JPE1BYAC_7_TPE1BYAC_7_TPE2 +BYAC_8_TPE1BYAC_9_TPE1 +BYAC_11_TPE1 +BYAD_3_JPE1 +BYAB_2_JPE2 +BYAD_2_TPE1 +BYAB_6_TPE1BYAB_6_TPE2 +BYAB_7_TPE1BYAB_8_JPE1 +BYAB_12_TPE1BYAB_12_TPE2BYAB_13_TPE1 +BYAB_14_TPE1BYAB_15_TPE1 +BYAB_10_TPE1 +BYAB_10_JPE1 +BYAB_4_TPE1 +BYAB_4_JPE1 +BYAD_5_TPE1 +BYAD_5_JPE1BYAD_7_TPE1 BYAD_7_TPE2 +BYAD_8_TPE1BYAD_9_TPE1 +EPCBYAB_15_EPC1RBB +EPCBYAB_15_EPC2RBB +R +G +BYAB_2_S1RBBGBYAB_2_S2 +ABBR +ABBR +RBB +RBB +EPCBYAD_9_EPC1RBBGBYAD_9_S1 +EPCBYAD_9_EPC2RBBGBYAD_9_S2 +EPCBYAC_11_EPC1 +ABBGBYAC_11_S2EPCBYAC_11_EPC2 +RBBGBYAC_11_S1 +GBYAC_2_S1 +GBYAD_2_S2 +GBYAC_2_S2 +G +BYAD_2_S1 +V +BYBD_2_VFD13HP550 FPM BYBD_3_VFD110HP550 FPM BYBD_4_VFD110HP450 FPM +BYBD_5_VFD110HP400 FPM BYBD_6_VFD15HP350 FPM BYBD_7_VFD17.5HP300 FPM +BYBD_8_VFD13HP300 FPM +BYBD_9_VFD12HP300 FPM +BYBD_10_VFD110HP300 FPM +BYBD_11_VFD13HP300 FPM +BYBD_12_VFD110HP300 FPM +BYBD_13_VFD110HP300 FPM +BYBD_14_VFD12HP300 FPM +BYBC_2_VFD13HP550 FPM BYBC_3_VFD110HP500 FPM BYBC_4_VFD17.5HP450 FPM +BYBC_5_VFD15HP400 FPM +BYBC_6_VFD13HP350 FPM +BYBC_7_VFD13HP300 FPM BYBC_8_VFD110HP300 FPM +BYBC_9_VFD110HP300 FPMBYBC_10_VFD12HP300 FPM +BYBA_2_VFD13HP550 FPM BYBA_4_VFD17.5HP450 FPM +BYBA_5_VFD13HP400 FPM +BYBA_9_VFD110HP300 FPM BYBA_10_VFD17.5HP300 FPMBYBA_11_VFD12HP300 FPMBYBA_12_VFD13HP300 FPM +BYBA_13_VFD12HP300 FPM +BYBA_14_VFD13HP300 FPMBYBA_15_VFD12HP300 FPM +BYBC_2_JPE1 +BYBD_2_JPE1 +BYBC_2_TPE1 +BYBD_2_TPE1 BYBD_3_TPE1 +BYBC_3_TPE1 +BYBA_4_JPE1 +BYBC_4_JPE1 +BYBD_4_TPE1 BYBD_5_TPE1 BYBD_6_TPE1 +BYBD_7_JPE1 +BYBD_12_TPE1 BYBD_12_TPE2 +BYBD_13_TPE1BYBD_14_TPE1 +BYBA_10_TPE1 +BYBC_9_TPE1BYBC_10_TPE1BYBC_8_TPE1 BYBC_8_TPE2 +BYBA_10_JPE1BYBA_15_TPE1BYBA_15_TPE2 +BYBA_13_TPE1 +BYBC_6_JPE1 +BYBC_6_TPE1 +BYBD_9_TPE1 +BYBD_10_JPE1 EPCBYBD_14_EPC1RBBGBYBD_14_S1 +EPCBYBD_14_EPC2RBBGBYBD_14_S2 +EPCBYBC_10_EPC1RBB +GBYBC_10_S1 +EPCBYBC_10_EPC2RBBGBYBC_10_S2 +EPCBYBA_15_EPC2 +EPCBYBA_15_EPC1BB +GBYBA_15_S2RBB +BYCD_2_VFD15HP400 FPMBYCD_3_VFD15HP380 FPMBYCD_4_VFD12HP450 FPM +BYCD_5_VFD15HP400 FPM +BYCD_6_VFD13HP400 FPMBYCD_7_VFD12HP300 FPM +BYCD_8_VFD17.5HP300 FPM BYCD_9_VFD110HP300 FPM BYCD_10_VFD110HP300 FPM BYCD_11_VFD17.5HP300 FPMBYCD_12_VFD12HP300 FPM +BYCB_2_VFD13HP550 FPMBYCB_3_VFD15HP500 FPM +BYCB_4_VFD13HP450 FPM +BYCB_5_VFD15HP400 FPM +BYCB_6_VFD15HP350 FPMBYCB_7_VFD110HP300 FPMBYCB_8_VFD110HP300 FPM +BYCB_9_VFD15HP300 FPMBYCB_10_VFD12HP300 FPM +BYCA_2_VFD13HP550 FPMBYCA_3_VFD15HP500 FPM +BYCA_4_VFD15HP450 FPM +BYCA_5_VFD15HP400 FPM +BYCA_6_VFD110HP350 FPM +BYCA_7_VFD12HP300 FPMBYCA_8_VFD15HP300 FPMBYCA_9_VFD12HP300 FPM +BYCD_2_JPE1 +SND RCVBYC_LRPE1MCM07 +BYCB_2_TPE1BYCB_3_JPE1 +BYCD_2_JPE2 +BYCD_7_TPE1 +BYCB_7_TPE1 +BYCA_5_TPE1 +BYCA_9_TPE2 +EPCBYCD_12_EPC1RBBGBYCD_12_S1 +EPCBYCD_12_EPC2RBBGBYCD_12_S2 +EPCBYCB_10_EPC1RBBGBYCB_10_S1 +EPCBYCB_10_EPC2RBBGBYCB_10_S2 +EPCBYCA_9_EPC1RBBGBYCA_9_S1 +EPCBYCA_9_EPC2RBBGBYCA_9_S2 +BYDB_2_VFD13HP550 FPM +BYDB_3_VFD17.5HP500 FPMBYDB_4_VFD110HP450 FPMBYDB_5_VFD13HP400 FPMBYDB_6_VFD17.5HP350 FPMBYDB_7_VFD17.5HP300 FPMBYDB_8_VFD15HP300 FPMBYDB_9_VFD13HP300 FPMBYDB_10_VFD15HP300 FPM +BYDB_11_VFD15HP300 FPM +BYDB_12_VFD15HP300 FPMBYDB_13_VFD110HP300 FPMBYDB_14_VFD110HP300 FPMBYDB_15_VFD15HP300 FPMBYDB_16_VFD13HP300 FPM +BYDA_2_VFD13HP550 FPMBYDA_3_VFD17.5HP500 FPMBYDA_4_VFD110HP450 FPM +BYDA_5_VFD15HP400 FPM +BYDA_6_VFD110HP350 FPM +BYDA_7_VFD13HP300 FPMBYDA_8_VFD110HP300 FPMBYDA_9_VFD13HP300 FPM +BYDC_2_VFD13HP550 FPMBYDC_3_VFD17.5HP500 FPMBYDC_4_VFD110HP450 FPM +BYDC_5_VFD15HP400 FPM +BYDC_6_VFD110HP350 FPM +BYDC_7_VFD13HP300 FPM +BYDC_8_VFD110HP300 FPMBYDC_9_VFD110HP300 FPM +BYDC_10_VFD110HP300 FPMBYDC_11_VFD13HP300 FPM +BYDC_12_VFD15HP300 FPMBYDC_13_VFD13HP300 FPM +SND RCV +BYD_LRPE1 +MCM07 +WBYD_JR1BYDB_2_TPE1BYDB_11_TPE1 +EPCBYDC_13_EPC1 +ABBGBYDC_13_S2EPCBYDC_13_EPC2 +RBBGBYDC_13_S1 EPCBYDA_9_EPC1RBBGBYDA_9_S1 +EPCBYDA_9_EPC2RBBGBYDA_9_S2 +EPCBYDB_16_EPC1RBBGBYDB_16_S1 +EPCBYDB_16_EPC2RBBGBYDB_16_S2 +EPCBYDA_8_EPC1 +EPCBYDA_8_EPC2ABBGBYDA_8_S2 +RBBGBYDA_8_S1 +RR +R +BBA +WBYBA_5_JR1 +BBA +WBYBC_5_JR1 +BBA +WBYBC_7_JR1 +R +BBA +WBYCB_6_JR1 +BBA +WBYAB_11_JR1 +BBA +WBYDB_12_JR1 +BBA +WBYCB_4_JR1 +BBA +WBYAB_9_JR1 +BBA +WBYDB_10_JR1 +BBA +WBYCD_6_JR1 +BBA +WBYCD_3_JR1 +BBA +WBYBD_11_JR1 +BYBD_9_TPE2 +BBA +WBYAD_6_JR1 +BBA +WBYAD_4_JR1 +BBA +WBYAC_4_JR1 +EPCBYDA_6_EPC2 +EPCBYDA_6_EPC1 +EPCBYDB_4_EPC1 +EPCBYDB_4_EPC2 +EPCBYDC_6_EPC1 +EPCBYDC_6_EPC2ABBGBYDA_6_S1R ABBGBYDC_6_S1 +R +BBGBYDB_4_S2R +BBGBYDB_4_S1R +BBGBYDA_6_S2R BBGBYDC_6_S2R +GBYBA_15_S1 +BBA +WBYCA_8_JR1 +BBA +WBYBA_12_JR1 +BBA +WBYBD_8_JR1 +BBA +WBYAB_5_JR1 +BBA +WBYAB_3_JR1 +BYCD_4_TPE1 +BYCB_5_JPE1 +BYCB_5_TPE1 +BYAC_11_TPE2 +EPCBYAC_2_EPC1 +EPCBYAC_2_EPC2EPCBYAD_2_EPC1 +EPCBYAD_2_EPC2EPCBYAB_2_EPC2EPCBYAB_2_EPC1 +EPCBYAB_2_EPC4EPCBYAB_2_EPC3 +EPCBYDA_3_EPC1 +EPCBYDA_3_EPC2EPCBYDB_3_EPC1 +EPCBYDB_3_EPC2 +ABBR +RBBGBYBC_3_S2 +G +BYBC_3_S1EPCBYBC_3_EPC1 +EPCBYBC_3_EPC2ABBR +RBBGBYBD_3_S2 +G +BYBD_3_S1EPCBYBD_3_EPC1 +EPCBYBD_3_EPC2 +EPCBYCB_3_EPC1 +EPCBYCB_3_EPC2ABBR +RBBGBYCB_3_S2 +GBYCB_3_S1 +BBR +GBYCD_5_S1RBBGBYCD_5_S2 +ABBRGBYDA_3_S1 +ABBR +GBYDB_3_S1RBBGBYDA_3_S2 +RBBGBYDB_3_S2 +2'-5" EL (PLTF2)TYP. +2'-5" EL (PLTF2) +11'-0" EL (PLTF1)9'-0" EL (PLTF1)19'-0'' EL (FLOOR)9'-0" EL (PLTF1)6'-8'' EL (PLTF2)2'-9" EL (PLTF2) +7'-6" EL (PLTF2) +7'-6" EL (PLTF2)2'-9" EL (PLTF2) +2'-9" EL (PLTF2) +X-SQ-43.1875_43-90-P2.5+ +ST 4.0kW 1.4375 +X-SQ-41.5_43-90-P2.5+ +ST 4.0kW 1.4375 +X-SQ-41.5_43-90-P2.5+ +ST 4.0kW 1.4375 +X-SQ-41.5_43-90-P2.5+ +ST 4.0kW 1.4375 +X-SQ-96_43-90-P2.5+ +ST 4.0kW 1.4375 +X-SQ-41.5_43-60-P2.5+ +ST 1.5kW 1.4375 +X-SQ-41.5_43-90-P2.5+ +ST 4.0kW 1.4375 +X-SQ-41.5_43-90-P2.5+ +ST 4.0kW 1.4375 +TRANSITION CHUTES FROMCROSSBELT TO CONVEYORSURFACE WITH 3'' DROP +2'-5" EL (PLTF2)TYP. +7'-6" EL (PLTF2) +7'-6" EL (PLTF2) +7'-6" EL (PLTF2) +7'-6" EL (PLTF2) +7'-6" EL (PLTF2) +8'-8" EL (PLTF2)9'-0" EL (PLTF2)11'-0'' EL (PLTF1) +5'-1" EL (PLTF1)2'-9" EL (PLTF2) +X-SQ-41.5_43-90-P2.5+ +ST 4.0kW 1.4375 +X-SQ-41.5_43-90-P2.5+ +ST 4.0kW 1.4375 +X-SQ-41.5_43-90-P2.5+ +ST 4.0kW 1.4375 +X-SQ-41.5_43-90-P2.5+ +ST 4.0kW 1.4375 +X-SQ-41.5_43-90-P2.5+ +ST 4.0kW 1.4375 +X-SQ-41.5_43-90-P2.5+ +ST 4.0kW 1.4375 +X-SQ-41.5_43-90-P2.5+ +ST 4.0kW 1.4375 +X-SQ-41.5_43-90-P2.5+ +ST 4.0kW 1.4375 +2'-5" EL(PLTF2) +2'-5" EL (PLTF2)TYP. (3) PLCS +8'-0" EL (PLTF2)10'-4'' EL (PLTF1)TYP. (3) PLCS +X-SQ-41.5_43-90-P2.5+ +ST 4.0kW 1.4375 +8'-0" EL (PLTF2) +5'-8" EL (PLTF2)8'-0'' EL (PLTF1) +10'-8" EL (PLTF2) 10'-8" EL (PLTF2) +8'-0" EL (PLTF2) +8'-0" EL (PLTF2) +8'-0" EL (PLTF2) 8'-0" EL (PLTF2) 2'-9" EL (PLTF2) +8'-0" EL (PLTF2) +8'-0" EL (PLTF2) +8'-0" EL (PLTF2) +8'-0" EL (PLTF2) 8'-0" EL (PLTF2)2'-9" EL (PLTF2) 2'-9" EL (PLTF2) +2'-9" EL (PLTF2) +2'-9" EL (PLTF2)8'-0" EL (PLTF2) 8'-0" EL (PLTF2) +X-SQ-43.1875_43-90-P2.5+ +ST 4.0kW 1.4375 +X-SQ-41.5_43-90-P2.5+ +ST 4.0kW 1.4375 +X-SQ-41.5_43-90-P2.5+ +ST 4.0kW 1.4375 +X-SQ-41.5_43-60-P2.5+ +ST 1.5kW 1.4375 +X-SQ-96_43-90-P2.5+ +ST 4.0kW 1.4375 +TRANSITION CHUTES FROMCROSSBELT TO CONVEYORSURFACE WITH 3'' DROP2'-5" EL(PLTF2) +7'-4" EL(PLTF2) +6'-3" EL(PLTF2) 10'-8" EL(PLTF2) +JSA +JSA +2'-5" EL(PLTF2) +X-SQ-43.1875_43-90-P2.5+ +ST 4.0kW 1.4375 +X-SQ-96_43-90-P2.5+ +ST 4.0kW 1.4375 +X-SQ-43.1875_43-90-P2.5+ +ST 4.0kW 1.4375 +X-SQ-41.5_43-90-P2.5+ +ST 4.0kW 1.4375 +X-SQ-41.5_43-90-P2.5+ +ST 4.0kW 1.4375 +X-SQ-96_43-90-P2.5+ +ST 4.0kW 1.4375 +2'-5" EL (PLTF2)TYP. +8'-0" EL (PLTF2)TYP. +X-SQ-41.5_43-90-P2.5+ +ST 4.0kW 1.4375 +X-SQ-41.5_43-90-P2.5+ +ST 4.0kW 1.4375 +3'-6" EL (PLTF3) +7'-5" EL (PLTF3)11'-11'' EL (PLTF2) +11'-11" EL (PLTF2) +8'-8" EL (PLTF2)8'-8" EL (PLTF2)11'-0'' EL (PLTF1) +11'-0" EL (PLTF1) +11'-0" EL (PLTF1)11'-0" EL (PLTF1) +2'-9" EL (PLTF2)5'-4'' EL (PLTF1)2'-9" EL (PLTF2) +3'-6" EL (PLTF3) +3'-6" EL (PLTF3) +3'-6" EL (PLTF3) +3'-6" EL (PLTF3) +3'-6" EL (PLTF3)8'-0'' EL (PLTF2)8'-0" EL (PLTF2)2'-9" EL (PLTF2)2'-9" EL (PLTF2) 3'-6" EL (PLTF3)8'-0'' EL (PLTF2) +2'-9" EL (PLTF2) +STOP THE EPC AT 8'-3" +STOP THE EPC AT 8'-3" +BBA +WBYAC_6_JR1 +BYD1_DPM1MCM07 +BYD1_DPM2MCM07 +BYD3_DPM1MCM07 +BYA1_DPM1MCM07 +BYA3_DPM1MCM07 +BYB1_DPM1MCM07 +BYB2_DPM1MCM07 +BYB3_DPM1MCM07 +BYC1_DPM1MCM07 +BYC3_DPM1MCM07 +MCM07 +BYAB_2_FIO1 +BYAD_2_FIO1 +BYAC_2_FIO1BYCA_2_FIO1 +BYCB_2_FIO1 +GBYAB_15_S2 +GBYAB_15_S1BYAB_14_FIO1 +BYAD_8_FIO1 +BYAC_11_FIO1 +BYBD_2_FIO1 +BYBD_14_FIO1 +BYBC_2_FIO1 +BYBC_10_FIO1 +BYBA_2_FIO1BYBA_2_JPE1BYBA_2_TPE1ABBR +RBBGBYBA_3_S2 +G +BYBA_3_S1EPCBYBA_3_EPC1 +EPCBYBA_3_EPC2 BYBA_3_VFD110HP500 FPMBYBA_3_TPE1 +BYBA_6_TPE1 +BYBA_6_VFD13HP350 FPM +BYBA_6_JPE1 +BBA +WBYBA_7_JR1 +BYBA_7_VFD13HP300 FPMBYBA_8_TPE1 BYBA_8_VFD110HP300 FPM +BYBA_8_TPE2 BYBA_9_TPE1 +BYBA_13_JPE1BBA +WBYBA_14_JR1 +BYBA_15_FIO1 +EPCBYCD_5_EPC2 +EPCBYCD_5_EPC1 +BYCD_4_TPE2 +BYCD_5_JPE1 +BYCD_7_TPE2 +BYCD_8_TPE1 BYCD_9_TPE1 BYCD_10_TPE1 BYCD_11_TPE1BYCD_12_TPE1BYCD_11_FIO1 +BYCB_2_JPE1 +BYCA_2_JPE1 +BYCB_7_TPE2BYCB_8_TPE1BYCB_9_TPE1BYCB_10_TPE1 +BYCB_9_FIO1 +BYCA_2_TPE1 +EPCBYCA_3_EPC1 +EPCBYCA_3_EPC2ABBRRBB +GBYCA_3_S2 +GBYCA_3_S1BYCA_3_JPE1 +BBA +WBYCA_4_JR1 BYCA_5_TPE2 BYCA_6_TPE1BYCA_7_JPE1 +BYCA_9_TPE1 +SND RCV +BYB_LRPE1 +MCM07 +WBYB_JR1 +WBYC_JR1WBYA_JR1 +BYDB_2_FIO1 +BYDA_2_FIO1 +BYDC_2_FIO1BYDC_2_JPE1 +BYDA_2_JPE1 +BYDB_2_JPE1 +BYDB_3_TPE1BYDB_4_TPE1BYDB_5_TPE1BYDB_6_TPE1BYDB_7_TPE1BYDB_8_TPE1BYDB_9_JPE1 +BYDB_11_JPE1BYDB_13_TPE1BYDB_13_TPE2BYDB_14_TPE1 +BYDB_15_TPE1BYDB_16_TPE1 +BYDA_2_TPE1BYDA_3_TPE1BYDA_4_JPE1 +BYDA_6_TPE1 +BYDA_6_FIO1 +BYDA_6_JPE1BYDA_8_TPE1BYDA_8_FIO1BYDA_9_TPE1BYDA_8_TPE2BYDA_8_FIO2 +EPCBYDC_3_EPC1 +EPCBYDC_3_EPC2ABBRGBYDC_3_S1RBBGBYDC_3_S2BYDC_2_TPE1BYDC_3_TPE1BYDC_4_JPE1 +BYDC_6_FIO1 +BYDC_6_TPE1 +BYDC_6_JPE1 +BYDC_8_FIO1 +BYDC_8_TPE1 +EPCBYDC_8_EPC1 +EPCBYDC_8_EPC2ABB +GBYDC_8_S2 +RBBGBYDC_8_S1RBYDC_8_TPE2BYDC_9_TPE1 +BYDC_10_TPE1BYDC_11_JPE1BYDC_13_TPE1 +BYDC_13_TPE2 +MCM07 \ No newline at end of file diff --git a/projects/MTN6/manifest.csv b/projects/MTN6/manifest.csv new file mode 100644 index 0000000..4f029b7 --- /dev/null +++ b/projects/MTN6/manifest.csv @@ -0,0 +1,1738 @@ +Control Panel,Unit Number,Alias,Equipment Type,Type of Conveyor,Speed,Drive Hand,PSU,Live Load,Motor HP,VFD,Brake,Belting Type,Roll Center,Side Guard 1,Side Guard 2,Netting,Btm Guard,Diverts,Diverts 2,Remarks +BULK INBOUND NORTH,BS1-005,PS10-1,Powered-Belted,Level Belt,150,RH,460/3/60,25,5,Y,N,RPH3200BXB-FR,NA,24,12,N,Y,NA,NA,"36"" SG, Bi-directional" +BULK INBOUND NORTH,BS1-010,PS10-2,Powered-Belted,Incline Belt,200,LH,460/3/60,25,15,Y,N,APH150MFOXLN,NA,24,,N,Y,NA,NA,"36"" SG" +BULK INBOUND NORTH,BS1-011,PS10-3,Powered-Belted,Incline Belt,240,RH,460/3/60,25,15,Y,N,APH150MFOXLN,NA,24.00'',12'',,,,, +BULK INBOUND NORTH,BS1-015-CH,PS10-4CH,90° Spiral Chute,Chute,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',24.00'',NA,NA,NA,NA, +BULK INBOUND NORTH,BS1-020,PS10-5,Powered-Belted,Level Belt,240,LH,460/3/60,25,15,Y,N,RPH3200BXB-FR,NA,24.00'',12'',N,Y,Y,QTY 4, +BULK INBOUND NORTH,BS1-020-CH1,PS10-5CH1,Induct Chute,Chute,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',24.00'',NA,NA,NA,NA, +BULK INBOUND NORTH,BS1-020-CH2,PS10-5CH2,Induct Chute,Chute,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',24.00'',NA,NA,NA,NA, +BULK INBOUND NORTH,BS1-020-CH3,PS10-5CH3,Induct Chute,Chute,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',24.00'',NA,NA,NA,NA, +BULK INBOUND NORTH,BS1-020-CH4,PS10-5CH5,Induct Chute,Chute,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',24.00'',NA,NA,NA,NA, +BULK INBOUND NORTH,BS1-020-DIV1,PS10-5DIV1,Sorter,Divert Arm,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA, +BULK INBOUND NORTH,BS1-020-DIV2,PS10-5DIV2,Sorter,Divert Arm,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA, +BULK INBOUND NORTH,BS1-020-DIV3,PS10-5DIV3,Sorter,Divert Arm,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA, +BULK INBOUND NORTH,BS1-020-DIV4,PS10-5DIV5,Sorter,Divert Arm,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA, +BULK INBOUND NORTH,BS1-025-CH,PS10-6CH,90° Straight Chute,Chute,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',24.00'',NA,NA,NA,NA, +BULK INBOUND NORTH,BS2-005,PS11-1,Powered-Belted,Level Belt,150,RH,460/3/60,25,5,Y,N,RPH3200BXB-FR,NA,24.00'',12'',N,Y,NA,NA,"36"" SG" +BULK INBOUND NORTH,BS2-010,PS11-2,Powered-Belted,Incline Belt,200,RH,460/3/60,25,5,Y,N,APH150MFOXLN,NA,24.00'',12'',Y,Y,NA,NA,"36"" SG" +BULK INBOUND NORTH,BS2-015,PS11-3,Powered-Belted,Level Belt,240,RH,460/3/60,25,10,Y,N,RPH3200BXB-FR,NA,24.00'',12'',Y,Y,NA,NA, +BULK INBOUND NORTH,BS2-020,PS11-4,Powered-Belted,Incline Belt,240,LH,460/3/60,25,10,Y,N,APH150MFOXLN,NA,24.00'',-,N,Y,NA,NA, +BULK INBOUND NORTH,BS2-025-CH,PS11-5CH,90° Spiral Chute,Chute,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',24.00'',NA,NA,NA,NA, +BULK INBOUND NORTH,BS2-030,PS11-6,Powered-Belted,Incline Belt,240,RH,460/3/60,25,10,Y,N,APH150MFOXLN,NA,24.00'',-,N,Y,NA,NA,"36"" SG" +BULK INBOUND NORTH,BS2-035,PS11-7,Powered-Belted,Incline Belt,240,RH,460/3/60,25,20,Y,N,APH150MFOXLN,NA,24.00'',-,N,Y,NA,NA,"36"" SG" +BULK INBOUND NORTH,BS2-040,PS11-8,Powered-Belted,Incline Belt,240,RH,460/3/60,25,15,Y,N,APH150MFOXLN,NA,24.00'',-,N,Y,NA,NA,"36"" SG" +BULK INBOUND NORTH,BS2-045,PS11-9,Powered-Belted,Incline Belt,240,RH,460/3/60,25,15,Y,N,APH150MFOXLN,NA,24.00'',12'',N,Y,NA,NA,"36"" SG" +BULK INBOUND NORTH,BS2-050-CH,PS11-10CH,90° Spiral Chute,Chute,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',24.00'',NA,NA,NA,NA, +BULK INBOUND NORTH,BS2-055,PS11-11,Powered-Belted,Level Belt,240,LH,460/3/60,25,15,Y,N,RPH3200BXB-FR,NA,24.00'',12'',N,Y,Y,QTY 6, +BULK INBOUND NORTH,BS2-055-CH1,PS11-11CH1,Induct Chute,Chute,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',24.00'',NA,NA,NA,NA, +BULK INBOUND NORTH,BS2-055-CH2,PS11-11CH2,Induct Chute,Chute,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',24.00'',NA,NA,NA,NA, +BULK INBOUND NORTH,BS2-055-CH3,PS11-11CH3,Induct Chute,Chute,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',24.00'',NA,NA,NA,NA, +BULK INBOUND NORTH,BS2-055-CH4,PS11-11CH4,Induct Chute,Chute,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',24.00'',NA,NA,NA,NA, +BULK INBOUND NORTH,BS2-055-CH5,PS11-11CH5,Induct Chute,Chute,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',24.00'',NA,NA,NA,NA, +BULK INBOUND NORTH,BS2-055-CH6,PS11-11CH6,Induct Chute,Chute,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',24.00'',NA,NA,NA,NA, +BULK INBOUND NORTH,BS2-055-DIV1,PS11-11DIV1,Sorter,Divert Arm,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA, +BULK INBOUND NORTH,BS2-055-DIV2,PS11-11DIV2,Sorter,Divert Arm,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA, +BULK INBOUND NORTH,BS2-055-DIV3,PS11-11DIV3,Sorter,Divert Arm,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA, +BULK INBOUND NORTH,BS2-055-DIV4,PS11-11DIV4,Sorter,Divert Arm,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA, +BULK INBOUND NORTH,BS2-055-DIV5,PS11-11DIV5,Sorter,Divert Arm,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA, +BULK INBOUND NORTH,BS2-055-DIV6,PS11-11DIV6,Sorter,Divert Arm,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA, +BULK INBOUND NORTH,BS2-060-CH,PS1-12CH,90° Straight Chute,Chute,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',24.00'',NA,NA,NA,NA, +BULK INBOUND SOUTH,BS3-005,PS8-1,Powered-Belted,Level Belt,150,LH,460/3/60,25,7.5,Y,N,RPH3200BXB-FR,NA,24.00'',12'',N,Y,NA,NA, +BULK INBOUND SOUTH,BS3-010,PS8-2,Powered-Belted,Incline Belt,200,LH,460/3/60,25,10,Y,N,RPH3200BXB-FR,NA,24.00'',12'',Y,Y,NA,NA, +BULK INBOUND SOUTH,BS3-015-CH,PS8-3CH,90° Spiral Chute,Chute,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',24.00'',NA,NA,NA,NA, +BULK INBOUND SOUTH,BS3-020,PS8-4,Powered-Belted,Incline Belt,240,LH,460/3/60,25,15,Y,N,APH150MFOXLN,NA,24.00'',-,N,Y,NA,NA,"36"" SG" +BULK INBOUND SOUTH,BS3-025,PS8-5,Powered-Belted,Incline Belt,240,LH,460/3/60,25,15,Y,N,APH150MFOXLN,NA,24.00'',12'',N,Y,NA,NA,"36"" SG" +BULK INBOUND SOUTH,BS3-030,PS8-6,Sorter,Intralox Flowsplitter,240,LH,460/3/60,25,5,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA, +BULK INBOUND SOUTH,BS3-035-CH,PS8-7CH,Straight Chute,Chute,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',24.00'',NA,NA,NA,NA, +BULK INBOUND SOUTH,BS3-040,PS8-8,Powered-Belted,Incline Belt,240,RH,460/3/60,25,7.5,Y,N,APH150MFOXLN,NA,24.00'',-,N,Y,NA,NA, +BULK INBOUND SOUTH,BS3-045,PS8-9,Powered-Belted,Incline Belt,240,LH,460/3/60,25,15,Y,N,APH150MFOXLN,NA,24.00'',-,N,Y,NA,NA, +BULK INBOUND SOUTH,BS3-050-CH,PS8-10CH,90° Spiral Chute,Chute,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',24.00'',NA,NA,NA,NA, +BULK INBOUND SOUTH,BS3-055,PS8-11,Powered-Belted,Level Belt,240,RH,460/3/60,25,10,Y,N,RPH3200BXB-FR,NA,24.00'',12'',N,Y,Y,QTY 4, +BULK INBOUND SOUTH,BS3-055-CH1,PS8-11CH1,Induct Chute,Chute,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',24.00'',NA,NA,NA,NA, +BULK INBOUND SOUTH,BS3-055-CH2,PS8-11CH2,Induct Chute,Chute,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',24.00'',NA,NA,NA,NA, +BULK INBOUND SOUTH,BS3-055-CH3,PS8-11CH3,Induct Chute,Chute,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',24.00'',NA,NA,NA,NA, +BULK INBOUND SOUTH,BS3-055-CH4,PS8-11CH4,Induct Chute,Chute,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',24.00'',NA,NA,NA,NA, +BULK INBOUND SOUTH,BS3-055-DIV1,PS8-11DIV1,Sorter,Divert Arm,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA, +BULK INBOUND SOUTH,BS3-055-DIV2,PS8-11DIV2,Sorter,Divert Arm,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA, +BULK INBOUND SOUTH,BS3-055-DIV3,PS8-11DIV3,Sorter,Divert Arm,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA, +BULK INBOUND SOUTH,BS3-055-DIV4,PS8-11DIV4,Sorter,Divert Arm,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA, +BULK INBOUND SOUTH,BS3-060-CH,PS8-12CH,90° Straight Chute,Chute,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',24.00'',NA,NA,NA,NA, +BULK INBOUND SOUTH,BS4-005-CH,PS9-1CH,Straight Chute,Chute,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',24.00'',NA,NA,NA,NA, +BULK INBOUND SOUTH,BS4-010,PS9-2,Powered-Belted,Decline Belt,240,RH,460/3/60,25,7.5,Y,N,APH150MFOXLN,NA,24.00'',-,N,Y,NA,NA, +BULK INBOUND SOUTH,BS4-015,PS9-3,Powered-Belted,Level Belt,240,RH,460/3/60,25,7.5,Y,N,RPH3200BXB-FR,NA,24.00'',12'',N,Y,Y,QTY 4, +BULK INBOUND SOUTH,BS4-015-CH1,PS9-3CH1,Induct Chute,Chute,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',24.00'',NA,NA,NA,NA, +BULK INBOUND SOUTH,BS4-015-CH2,PS9-3CH2,Induct Chute,Chute,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',24.00'',NA,NA,NA,NA, +BULK INBOUND SOUTH,BS4-015-CH3,PS9-3CH3,Induct Chute,Chute,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',24.00'',NA,NA,NA,NA, +BULK INBOUND SOUTH,BS4-015-CH4,PS9-3CH4,Induct Chute,Chute,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',24.00'',NA,NA,NA,NA, +BULK INBOUND SOUTH,BS4-015-DIV1,PS9-3DIV1,Sorter,Divert Arm,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA, +BULK INBOUND SOUTH,BS4-015-DIV2,PS9-3DIV2,Sorter,Divert Arm,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA, +BULK INBOUND SOUTH,BS4-015-DIV3,PS9-3DIV3,Sorter,Divert Arm,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA, +BULK INBOUND SOUTH,BS4-015-DIV4,PS9-3DIV4,Sorter,Divert Arm,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA, +BULK INBOUND SOUTH,BS4-020-CH,PS9-4CH,Straight Chute,Chute,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',24.00'',NA,NA,NA,NA, +BYPASS VS-A,BYA-105-CH,BYAB-1CH,Gravity Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,12.00'',12'',NA,NA,NA,NA,NA +BYPASS VS-A,BYA-110,BYAB-2,Powered-Belted,HSS,550,RH,460/3/60,25,5,YES,NO,APH150MFOXLN,NA,12.00'',12'',NA,YES,NA,NA,NA +BYPASS VS-A,BYA-115,BYAB-3,Powered-Belted,CURVE - 90 DEG,550,RH,460/3/60,25,5,YES,NO,Forbo GSTR,NA,12.00'',12'',NO,YES,NA,NA,NA +BYPASS VS-A,BYA-120,BYAB-4,Powered-Belted,HSS,500,RH,460/3/60,25,3,YES,NO,APH150MFOXLN,NA,12.00'',12'',NO,YES,NA,NA,NA +BYPASS VS-A,BYA-125,BYAB-5,Powered-Belted,CURVE - 90 DEG,450,RH,460/3/60,25,5,YES,NO,Forbo GSTR,NA,12.00'',12'',NO,YES,NA,NA,NA +BYPASS VS-A,BYA-130,BYAB-6,Powered-Belted,HSQ-C,400,RH,460/3/60,25,3,YES,NO,NSL-11ESBV,NA,12.00'',12'',NO,YES,NA,NA,NA +BYPASS VS-A,BYA-135,BYAB-7,Powered-Belted,HSS,350,RH,460/3/60,25,7.5,YES,NO,APH150MFOXLN,NA,12.00'',24'',YES,YES,NA,NA,NA +BYPASS VS-A,BYA-140,BYAB-8,Powered-Belted,HSS,300,RH,460/3/60,25,5,YES,NO,APH150MFOXLN,NA,24.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-A,BYA-145,BYAB-9,Powered-Belted,CURVE - 60 DEG,300,RH,460/3/60,25,2,YES,NO,Forbo GSTR,NA,24.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-A,BYA-150,BYAB-10,Powered-Belted,HSS,300,LH,460/3/60,25,3,YES,NO,APH150MFOXLN,NA,24.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-A,BYA-155,BYAB-11,Powered-Belted,CURVE - 60 DEG,300,RH,460/3/60,25,3,YES,NO,Forbo GSTR,NA,24.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-A,BYA-160,BYAB-12,Powered-Belted,HSS,300,RH,460/3/60,25,7.5,YES,NO,APH150MFOXLN,NA,24.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-A,BYA-165,BYAB-13,Powered-Belted,HSS,300,RH,460/3/60,25,10,YES,NO,APH150MFOXLN,NA,24.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-A,BYA-170,BYAB-14,Powered-Belted,HSS,300,RH,460/3/60,25,10,YES,NO,APH150MFOXLN,NA,24.00'',12'',YES,YES,NA,NA,NA +BYPASS VS-A,BYA-175,BYAB-15,Powered-Belted,HSQ-C,300,RH,460/3/60,25,3,YES,NO,NSL-11ESBV,NA,12.00'',12'',NO,YES,NA,NA,NA +BYPASS VS-A,BYA-205-CH,BYAD-1CH,Gravity Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,12.00'',12'',NA,NA,NA,NA,NA +BYPASS VS-A,BYA-210,BYAD-2,Powered-Belted,HSS,550,RH,460/3/60,25,3,YES,NO,APH150MFOXLN,NA,12.00'',12'',NO,YES,NA,NA,NA +BYPASS VS-A,BYA-215,BYAD-3,Powered-Belted,HSS,500,RH,460/3/60,25,7.5,YES,NO,APH150MFOXLN,NA,12.00'',24'',YES,YES,NA,NA,NA +BYPASS VS-A,BYA-220,BYAD-4,Powered-Belted,CURVE - 90 DEG,450,RH,460/3/60,25,5,YES,NO,Forbo GSTR,NA,24.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-A,BYA-225,BYAD-5,Powered-Belted,HSS,400,RH,460/3/60,25,7.5,YES,NO,APH150MFOXLN,NA,24.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-A,BYA-230,BYAD-6,Powered-Belted,CURVE - 90 DEG,350,RH,460/3/60,25,3,YES,NO,Forbo GSTR,NA,24.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-A,BYA-235,BYAD-7,Powered-Belted,HSS,300,RH,460/3/60,25,10,YES,NO,APH150MFOXLN,NA,24.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-A,BYA-240,BYAD-8,Powered-Belted,HSS,300,RH,460/3/60,25,10,YES,NO,APH150MFOXLN,NA,24.00'',12'',YES,YES,NA,NA,NA +BYPASS VS-A,BYA-245,BYAD-9,Powered-Belted,HSQ-C,300,RH,460/3/60,25,3,YES,NO,NSL-11ESBV,NA,12.00'',12'',NO,YES,NA,NA,NA +BYPASS VS-A,BYA-305-CH,BYAC-1CH,Gravity Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,12.00'',12'',NA,NA,NA,NA,NA +BYPASS VS-A,BYA-310,BYAC-2,Powered-Belted,HSS,550,LH,460/3/60,25,3,YES,NO,APH150MFOXLN,NA,12.00'',12'',NO,YES,NA,NA,NA +BYPASS VS-A,BYA-315,BYAC-3,Powered-Belted,HSS,500,LH,460/3/60,25,7.5,YES,NO,APH150MFOXLN,NA,12.00'',24'',YES,YES,NA,NA,NA +BYPASS VS-A,BYA-320,BYAC-4,Powered-Belted,CURVE - 90 DEG,450,LH,460/3/60,25,5,YES,NO,Forbo GSTR,NA,24.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-A,BYA-325,BYAC-5,Powered-Belted,HSS,400,LH,460/3/60,25,5,YES,NO,APH150MFOXLN,NA,24.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-A,BYA-330,BYAC-6,Powered-Belted,CURVE - 90 DEG,350,LH,460/3/60,25,3,YES,NO,Forbo GSTR,NA,24.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-A,BYA-335,BYAC-7,Powered-Belted,HSS,300,LH,460/3/60,25,10,YES,NO,APH150MFOXLN,NA,24.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-A,BYA-340,BYAC-8,Powered-Belted,HSS,300,LH,460/3/60,25,10,YES,NO,APH150MFOXLN,NA,24.00'',12'',YES,YES,NA,NA,NA +BYPASS VS-A,BYA-345,BYAC-9,Powered-Belted,HSQ-C,300,LH,460/3/60,25,3,YES,NO,NSL-11ESBV,NA,12.00'',12'',NO,YES,NA,NA,NA +BYPASS VS-A,BYA-350,BYAC-10,Powered-Belted,CURVE - 180 DEG,300,LH,460/3/60,25,5,YES,NO,Forbo GSTR,NA,12.00'',12'',NO,YES,NA,NA,NA +BYPASS VS-A,BYA-355,BYAC-11,Powered-Belted,HSQ-C,300,LH,460/3/60,25,3,YES,NO,NSL-11ESBV,NA,12.00'',12'',NO,YES,NA,NA,NA +BYPASS VS-B,BYB-105-CH,BYBD-1CH,Gravity Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,12.00'',12'',NA,NA,NA,NA,NA +BYPASS VS-B,BYB-110,BYBD-2,Powered-Belted,HSS,550,RH,460/3/60,25,3,YES,NO,APH150MFOXLN,NA,12.00'',12'',NO,YES,NA,NA,NA +BYPASS VS-B,BYB-115,BYBD-3,Powered-Belted,HSS,550,RH,460/3/60,25,10,YES,NO,APH150MFOXLN,NA,12.00'',24'',YES,YES,NA,NA,NA +BYPASS VS-B,BYB-120,BYBD-4,Powered-Belted,HSS,450,RH,460/3/60,25,10,YES,NO,APH150MFOXLN,NA,24.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-B,BYB-125,BYBD-5,Powered-Belted,HSS,400,LH,460/3/60,25,10,YES,NO,APH150MFOXLN,NA,24.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-B,BYB-130,BYBD-6,Powered-Belted,HSS,350,LH,460/3/60,25,5,YES,NO,APH150MFOXLN,NA,24.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-B,BYB-135,BYBD-7,Powered-Belted,HSS,300,LH,460/3/60,25,7.5,YES,NO,APH150MFOXLN,NA,24.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-B,BYB-140,BYBD-8,Powered-Belted,CURVE - 90 DEG,300,RH,460/3/60,25,3,YES,NO,Forbo GSTR,NA,24.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-B,BYB-145,BYBD-9,Powered-Belted,HSS,300,RH,460/3/60,25,2,YES,NO,APH150MFOXLN,NA,24.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-B,BYB-150,BYBD-10,Powered-Belted,HSS,300,RH,460/3/60,25,10,YES,NO,APH150MFOXLN,NA,24.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-B,BYB-155,BYBD-11,Powered-Belted,CURVE - 90 DEG,300,RH,460/3/60,25,3,YES,NO,Forbo GSTR,NA,24.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-B,BYB-160,BYBD-12,Powered-Belted,HSS,300,LH,460/3/60,25,10,YES,NO,APH150MFOXLN,NA,24.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-B,BYB-165,BYBD-13,Powered-Belted,HSS,300,LH,460/3/60,25,10,YES,NO,APH150MFOXLN,NA,24.00'',12'',YES,YES,NA,NA,NA +BYPASS VS-B,BYB-170,BYBD-14,Powered-Belted,HSQ-C,300,LH,460/3/60,25,2,YES,NO,NSL-11ESBV,NA,12.00'',12'',NO,YES,NA,NA,NA +BYPASS VS-B,BYB-205-CH,BYBC-1CH,Gravity Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,12.00'',12'',NA,NA,NA,NA,NA +BYPASS VS-B,BYB-210,BYBC-2,Powered-Belted,HSS,550,RH,460/3/60,25,3,YES,NO,APH150MFOXLN,NA,12.00'',24'',NO,YES,NA,NA,NA +BYPASS VS-B,BYB-215,BYBC-3,Powered-Belted,HSS,500,RH,460/3/60,25,10,YES,NO,APH150MFOXLN,NA,24.00'',24'',YES,YES,NA,NA,NA +BYPASS VS-B,BYB-220,BYBC-4,Powered-Belted,HSS,450,RH,460/3/60,25,7.5,YES,NO,APH150MFOXLN,NA,24.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-B,BYB-225,BYBC-5,Powered-Belted,CURVE - 90 DEG,400,RH,460/3/60,25,5,YES,NO,Forbo GSTR,NA,24.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-B,BYB-230,BYBC-6,Powered-Belted,HSS,350,LH,460/3/60,25,3,YES,NO,APH150MFOXLN,NA,24.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-B,BYB-235,BYBC-7,Powered-Belted,CURVE - 90 DEG,300,LH,460/3/60,25,3,YES,NO,Forbo GSTR,NA,24.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-B,BYB-240,BYBC-8,Powered-Belted,HSS,300,RH,460/3/60,25,10,YES,NO,APH150MFOXLN,NA,24.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-B,BYB-245,BYBC-9,Powered-Belted,HSS,300,RH,460/3/60,25,10,YES,NO,APH150MFOXLN,NA,24.00'',12'',YES,YES,NA,NA,NA +BYPASS VS-B,BYB-250,BYBC-10,Powered-Belted,HSQ-C,300,RH,460/3/60,25,2,YES,NO,NSL-11ESBV,NA,12.00'',12'',NO,YES,NA,NA,NA +BYPASS VS-B,BYB-305-CH,BYBA-1CH,Gravity Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,12.00'',12'',NA,NA,NA,NA,NA +BYPASS VS-B,BYB-310,BYBA-2,Powered-Belted,HSS,550,RH,460/3/60,25,3,YES,NO,APH150MFOXLN,NA,12.00'',12'',NO,YES,NA,NA,NA +BYPASS VS-B,BYB-315,BYBA-3,Powered-Belted,HSS,500,RH,460/3/60,25,10,YES,NO,APH150MFOXLN,NA,12.00'',24'',YES,YES,NA,NA,NA +BYPASS VS-B,BYB-320,BYBA-4,Powered-Belted,HSS,450,RH,460/3/60,25,7.5,YES,NO,APH150MFOXLN,NA,24.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-B,BYB-325,BYBA-5,Powered-Belted,CURVE - 90 DEG,400,RH,460/3/60,25,5,YES,NO,Forbo GSTR,NA,24.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-B,BYB-330,BYBA-6,Powered-Belted,HSS,350,LH,460/3/60,25,3,YES,NO,APH150MFOXLN,NA,24.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-B,BYB-335,BYBA-7,Powered-Belted,CURVE - 90 DEG,300,LH,460/3/60,25,3,YES,NO,Forbo GSTR,NA,24.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-B,BYB-340,BYBA-8,Powered-Belted,HSS,300,LH,460/3/60,25,10,YES,NO,APH150MFOXLN,NA,24.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-B,BYB-345,BYBA-9,Powered-Belted,HSS,300,LH,460/3/60,25,10,YES,NO,APH150MFOXLN,NA,24.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-B,BYB-350,BYBA-10,Powered-Belted,HSS,300,LH,460/3/60,25,7.5,YES,NO,APH150MFOXLN,NA,24.00'',12'',YES,YES,NA,NA,NA +BYPASS VS-B,BYB-355,BYBA-11,Powered-Belted,HSQ-C,300,LH,460/3/60,25,2,YES,NO,NSL-11ESBV,NA,12.00'',12'',NO,YES,NA,NA,NA +BYPASS VS-B,BYB-360,BYBA-12,Powered-Belted,CURVE - 90 DEG,300,LH,460/3/60,25,3,YES,NO,Forbo GSTR,NA,12.00'',12'',NO,YES,NA,NA,NA +BYPASS VS-B,BYB-365,BYBA-13,Powered-Belted,HSQ-C,300,LH,460/3/60,25,2,YES,NO,NSL-11ESBV,NA,12.00'',12'',NO,YES,NA,NA,NA +BYPASS VS-B,BYB-370,BYBA-14,Powered-Belted,CURVE - 90 DEG,300,LH,460/3/60,25,3,YES,NO,Forbo GSTR,NA,12.00'',12'',NO,YES,NA,NA,NA +BYPASS VS-B,BYB-375,BYBA-15,Powered-Belted,HSS,300,LH,460/3/60,25,2,YES,NO,APH150MFOXLN,NA,12.00'',12'',NO,YES,NA,NA,NA +BYPASS VS-C,BYC-105-CH,BYCD-1CH,Gravity Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,12.00'',12'',NA,NA,NA,NA,NA +BYPASS VS-C,BYC-110,BYCD-2,Powered-Belted,HSS,550,LH,460/3/60,25,5,YES,NO,APH150MFOXLN,NA,12.00'',12'',NO,YES,NA,NA,NA +BYPASS VS-C,BYC-115,BYCD-3,Powered-Belted,CURVE - 90 DEG,500,LH,460/3/60,25,5,YES,NO,Forbo GSTR,NA,12.00'',12'',NO,YES,NA,NA,NA +BYPASS VS-C,BYC-120,BYCD-4,Powered-Belted,HSS,450,LH,460/3/60,25,2,YES,NO,APH150MFOXLN,NA,12.00'',12'',NO,YES,NA,NA,NA +BYPASS VS-C,BYC-125,BYCD-5,Powered-Belted,HSS,400,LH,460/3/60,25,5,YES,NO,APH150MFOXLN,NA,12.00'',24'',NO,YES,NA,NA,NA +BYPASS VS-C,BYC-130,BYCD-6,Powered-Belted,CURVE - 90 DEG,350,LH,460/3/60,25,3,YES,NO,Forbo GSTR,NA,24.00'',24'',YES,YES,NA,NA,NA +BYPASS VS-C,BYC-135,BYCD-7,Powered-Belted,HSQ-C,300,LH,460/3/60,25,2,YES,NO,APH150MFOXLN,NA,24.00'',24'',YES,YES,NA,NA,NA +BYPASS VS-C,BYC-140,BYCD-8,Powered-Belted,HSS,300,LH,460/3/60,25,7.5,YES,NO,APH150MFOXLN,NA,24.00'',24'',YES,YES,NA,NA,NA +BYPASS VS-C,BYC-145,BYCD-9,Powered-Belted,HSS,300,LH,460/3/60,25,10,YES,NO,APH150MFOXLN,NA,24.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-C,BYC-150,BYCD-10,Powered-Belted,HSS,300,LH,460/3/60,25,10,YES,NO,APH150MFOXLN,NA,24.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-C,BYC-155,BYCD-11,Powered-Belted,HSS,300,RH,460/3/60,25,7.5,YES,NO,APH150MFOXLN,NA,24.00'',12'',YES,YES,NA,NA,NA +BYPASS VS-C,BYC-160,BYCD-12,Powered-Belted,HSQ-C,300,RH,460/3/60,25,2,YES,NO,NSL-11ESBV,NA,12.00'',12'',NO,YES,NA,NA,NA +BYPASS VS-C,BYC-205-CH,BYCB-1CH,Gravity Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,12.00'',12'',NA,NA,NA,NA,NA +BYPASS VS-C,BYC-210,BYCB-2,Powered-Belted,HSS,550,LH,460/3/60,25,3,YES,NO,APH150MFOXLN,NA,12.00'',12'',NO,YES,NA,NA,NA +BYPASS VS-C,BYC-215,BYCB-3,Powered-Belted,HSS,500,LH,460/3/60,25,5,YES,NO,APH150MFOXLN,NA,12.00'',24'',YES,YES,NA,NA,NA +BYPASS VS-C,BYC-220,BYCB-4,Powered-Belted,CURVE - 60 DEG,450,RH,460/3/60,25,3,YES,NO,Forbo GSTR,NA,24.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-C,BYC-225,BYCB-5,Powered-Belted,HSS,400,LH,460/3/60,25,5,YES,NO,APH150MFOXLN,NA,24.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-C,BYC-230,BYCB-6,Powered-Belted,CURVE - 60 DEG,350,LH,460/3/60,25,5,YES,NO,Forbo GSTR,NA,24.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-C,BYC-235,BYCB-7,Powered-Belted,HSS,300,LH,460/3/60,25,10,YES,NO,APH150MFOXLN,NA,24.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-C,BYC-240,BYCB-8,Powered-Belted,HSS,300,LH,460/3/60,25,10,YES,NO,APH150MFOXLN,NA,24.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-C,BYC-245,BYCB-9,Powered-Belted,HSS,300,RH,460/3/60,25,5,YES,NO,APH150MFOXLN,NA,24.00'',12'',YES,YES,NA,NA,NA +BYPASS VS-C,BYC-250,BYCB-10,Powered-Belted,HSQ-C,300,RH,460/3/60,25,2,YES,NO,NSL-11ESBV,NA,12.00'',12'',NO,YES,NA,NA,NA +BYPASS VS-C,BYC-305-CH,BYCA-1CH,Gravity Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,12.00'',12'',NA,NA,NA,NA,NA +BYPASS VS-C,BYC-310,BYCA-2,Powered-Belted,HSS,550,RH,460/3/60,25,3,YES,NO,APH150MFOXLN,NA,12.00'',24'',NO,YES,NA,NA,NA +BYPASS VS-C,BYC-315,BYCA-3,Powered-Belted,HSS,500,RH,460/3/60,25,5,YES,NO,APH150MFOXLN,NA,24.00'',24'',YES,YES,NA,NA,NA +BYPASS VS-C,BYC-320,BYCA-4,Powered-Belted,CURVE - 180 DEG,450,RH,460/3/60,25,5,YES,NO,Forbo GSTR,NA,24.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-C,BYC-325,BYCA-5,Powered-Belted,HSS,400,RH,460/3/60,25,5,YES,NO,APH150MFOXLN,NA,24.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-C,BYC-330,BYCA-6,Powered-Belted,HSS,350,LH,460/3/60,25,10,YES,NO,APH150MFOXLN,NA,24.00'',12'',YES,YES,NA,NA,NA +BYPASS VS-C,BYC-335,BYCA-7,Powered-Belted,HSQ-C,300,LH,460/3/60,25,2,YES,NO,NSL-11ESBV,NA,12.00'',12'',NO,YES,NA,NA,NA +BYPASS VS-C,BYC-340,BYCA-8,Powered-Belted,CURVE - 180 DEG,300,LH,460/3/60,25,5,YES,NO,Forbo GSTR,NA,12.00'',12'',NO,YES,NA,NA,NA +BYPASS VS-C,BYC-345,BYCA-9,Powered-Belted,HSS,300,LH,460/3/60,25,2,YES,NO,APH150MFOXLN,NA,12.00'',12'',NO,YES,NA,NA,NA +BYPASS VS-D,BYD-105-CH,BYDB-1CH,Gravity Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,12.00'',12'',NA,NA,NA,NA,NA +BYPASS VS-D,BYD-110,BYDB-2,Powered,HSS,550,LH,460/3/60,25,3,YES,NO,APH150MFOXLN,NA,12.00'',12'',NO,YES,NA,NA,NA +BYPASS VS-D,BYD-115,BYDB-3,Powered-Belted,HSS,500,LH,460/3/60,25,7.5,YES,NO,APH150MFOXLN,NA,12.00'',24'',YES,YES,NA,NA,NA +BYPASS VS-D,BYD-120,BYDB-4,Powered-Belted,HSS,450,LH,460/3/60,25,7.5,YES,NO,APH150MFOXLN,NA,24.00'',12'',YES,YES,NA,NA,NA +BYPASS VS-D,BYD-125,BYDB-5,Powered-Belted,HSS,400,LH,460/3/60,25,3,YES,NO,APH150MFOXLN,NA,12.00'',12'',NO,NO,NA,NA,NA +BYPASS VS-D,BYD-130,BYDB-6,Powered-Belted,HSS,350,LH,460/3/60,25,7.5,YES,NO,APH150MFOXLN,NA,12.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-D,BYD-135,BYDB-7,Powered-Belted,HSS,300,LH,460/3/60,25,7.5,YES,NO,APH150MFOXLN,NA,24.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-D,BYD-140,BYDB-8,Powered-Belted,HSS,300,LH,460/3/60,25,3,YES,NO,APH150MFOXLN,NA,24.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-D,BYD-145,BYDB-9,Powered-Belted,HSQ-C,300,LH,460/3/60,25,3,YES,NO,NSL-11ESBV,NA,24.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-D,BYD-150,BYDB-10,Powered-Belted,CURVE - 60 DEG,300,LH,460/3/60,25,3,YES,NO,Forbo GSTR,NA,24.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-D,BYD-155,BYDB-11,Powered-Belted,HSS,300,LH,460/3/60,25,5,YES,NO,APH150MFOXLN,NA,24.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-D,BYD-160,BYDB-12,Powered-Belted,CURVE - 60 DEG,300,LH,460/3/60,25,3,YES,NO,Forbo GSTR,NA,24.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-D,BYD-165,BYDB-13,Powered-Belted,HSS,300,LH,460/3/60,25,10,YES,NO,APH150MFOXLN,NA,24.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-D,BYD-170,BYDB-14,Powered-Belted,HSS,300,LH,460/3/60,25,10,YES,NO,APH150MFOXLN,NA,24.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-D,BYD-175,BYDB-15,Powered-Belted,HSS,300,LH,460/3/60,25,5,YES,NO,APH150MFOXLN,NA,24.00'',12'',YES,YES,NA,NA,NA +BYPASS VS-D,BYD-180,BYDB-16,Powered-Belted,HSQ-C,300,LH,460/3/60,25,3,YES,NO,NSL-11ESBV,NA,12.00'',12'',NO,YES,NA,NA,NA +BYPASS VS-D,BYD-205-CH,BYDA-1CH,Gravity Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,12.00'',12'',NA,NA,NA,NA,NA +BYPASS VS-D,BYD-210,BYDA-2,Powered-Belted,HSS,550,LH,460/3/60,25,3,YES,NO,APH150MFOXLN,NA,12.00'',12'',NO,YES,NA,NA,NA +BYPASS VS-D,BYD-215,BYDA-3,Powered-Belted,HSS,500,LH,460/3/60,25,7.5,YES,NO,APH150MFOXLN,NA,12.00'',24'',YES,YES,NA,NA,NA +BYPASS VS-D,BYD-220,BYDA-4,Powered-Belted,HSS,450,RH,460/3/60,25,10,YES,NO,APH150MFOXLN,NA,24.00'',12'',NO,YES,NA,NA,NA +BYPASS VS-D,BYD-225,BYDA-5,Powered-Belted,CURVE - 90 DEG,400,LH,460/3/60,25,5,YES,NO,Forbo GSTR,NA,12.00'',12'',YES,YES,NA,NA,NA +BYPASS VS-D,BYD-230,BYDA-6,Powered-Belted,HSS,350,RH,460/3/60,25,10,YES,NO,APH150MFOXLN,NA,12.00'',24'',NO,YES,NA,NA,NA +BYPASS VS-D,BYD-235,BYDA-7,Powered-Belted,CURVE - 90 DEG,300,RH,460/3/60,25,3,YES,NO,Forbo GSTR,NA,12.00'',12'',YES,YES,NA,NA,NA +BYPASS VS-D,BYD-240,BYDA-8,Powered-Belted,HSS,300,RH,460/3/60,25,10,YES,NO,APH150MFOXLN,NA,12.00'',24'',YES,YES,NA,NA,NA +BYPASS VS-D,BYD-245,BYDA-9,Powered-Belted,HSQ-C,300,RH,460/3/60,25,3,YES,NO,NSL-11ESBV,NA,12.00'',12'',NO,YES,NA,NA,NA +BYPASS VS-D,BYD-305-CH,BYDC-1CH,Gravity Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,12.00'',12'',NA,NA,NA,NA,NA +BYPASS VS-D,BYD-310,BYDC-2,Powered-Belted,HSS,550,LH,460/3/60,25,3,YES,NO,APH150MFOXLN,NA,12.00'',12'',NO,YES,NA,NA,NA +BYPASS VS-D,BYD-315,BYDC-3,Powered-Belted,HSS,500,LH,460/3/60,25,7.5,YES,NO,APH150MFOXLN,NA,12.00'',24'',YES,YES,NA,NA,NA +BYPASS VS-D,BYD-320,BYDC-4,Powered-Belted,HSS,450,LH,460/3/60,25,10,YES,NO,APH150MFOXLN,NA,24.00'',12'',YES,YES,NA,NA,NA +BYPASS VS-D,BYD-325,BYDC-5,Powered-Belted,CURVE - 90 DEG,400,LH,460/3/60,25,5,YES,NO,Forbo GSTR,NA,12.00'',12'',NO,YES,NA,NA,NA +BYPASS VS-D,BYD-330,BYDC-6,Powered-Belted,HSS-HD,350,LH,460/3/60,25,10,YES,NO,APH150MFOXLN,NA,12.00'',24'',YES,YES,NA,NA,NA +BYPASS VS-D,BYD-335,BYDC-7,Powered-Belted,CURVE - 90 DEG,300,LH,460/3/60,25,3,YES,NO,Forbo GSTR,NA,12.00'',12'',NO,YES,NA,NA,NA +BYPASS VS-D,BYD-340,BYDC-8,Powered-Belted,HSS,300,LH,460/3/60,25,10,YES,NO,APH150MFOXLN,NA,12.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-D,BYD-345,BYDC-9,Powered-Belted,HSS,300,LH,460/3/60,25,10,YES,NO,APH150MFOXLN,NA,24.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-D,BYD-350,BYDC-10,Powered-Belted,HSS,300,LH,460/3/60,25,7.5,YES,NO,APH150MFOXLN,NA,24.00'',24'',YES,NO,NA,NA,NA +BYPASS VS-D,BYD-355,BYDC-11,Powered-Belted,HSQ-C,300,LH,460/3/60,25,3,YES,NO,NSL-11ESBV,NA,24.00'',24'',NO,NO,NA,NA,NA +BYPASS VS-D,BYD-360,BYDC-12,Powered-Belted,CURVE - 180 DEG,300,LH,460/3/60,25,5,YES,NO,Forbo GSTR,NA,24.00'',12'',NO,YES,NA,NA,NA +BYPASS VS-D,BYD-365,BYDC-13,Powered-Belted,HSQ-C,300,LH,460/3/60,25,3,YES,NO,NSL-11ESBV,NA,12.00'',12'',NO,YES,NA,NA,NA +FLUID LOAD,FL10-1-CH,FL3024-1CH,Tapered Straight Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',,NA,NA,NA,NA, +FLUID LOAD,FL10-2,FL3024-2,Powered-Belted,HSS,350,RH,460/3/60,25,5,Yes,No,APH150MFOXLN,-,24.00'',,No,No,,, +FLUID LOAD,FL10-3-CH,FL3024-3CH,Self-Centering Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',,NA,NA,NA,NA, +FLUID LOAD,FL10-4,FL3024-4,Caljan Loader,LOADER,-,-,-,-,AMZ PROVIDED,-,-,-,-,-,-,-,-,-,-,- +FLUID LOAD,FL11-1-CH,FL2074-1CH,Tapered Straight Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',,NA,NA,NA,NA, +FLUID LOAD,FL11-2,FL2074-2,Powered-Belted,HSS,350,RH,460/3/60,25,5,Yes,No,APH150MFOXLN,-,24.00'',,No,No,,, +FLUID LOAD,FL11-3-CH,FL2074-3CH,Self-Centering Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',,NA,NA,NA,NA, +FLUID LOAD,FL11-4,FL2074-4,Caljan Loader,LOADER,-,-,-,-,AMZ PROVIDED,-,-,-,-,-,-,-,-,-,-,- +FLUID LOAD,FL1-1-CH,FL1038-1CH,Tapered Straight Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',,NA,NA,NA,NA, +FLUID LOAD,FL1-2,FL1038-2,Powered-Belted,HSS,350,RH,460/3/60,25,5,Yes,No,APH150MFOXLN,-,24.00'',,No,No,,, +FLUID LOAD,FL12-1-CH,FL2078-1CH,Tapered Straight Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',,NA,NA,NA,NA, +FLUID LOAD,FL12-2,FL2078-2,Powered-Belted,HSS,350,RH,460/3/60,25,5,Yes,No,APH150MFOXLN,-,24.00'',,No,No,,, +FLUID LOAD,FL12-3-CH,FL2078-3CH,Self-Centering Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',,NA,NA,NA,NA, +FLUID LOAD,FL12-4,FL2078-4,Caljan Loader,LOADER,-,-,-,-,AMZ PROVIDED,-,-,-,-,-,-,-,-,-,-,- +FLUID LOAD,FL13-1-CH,FL2086-1CH,Tapered Straight Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',,NA,NA,NA,NA, +FLUID LOAD,FL13-2,FL2086-2,Powered-Belted,HSS,350,RH,460/3/60,25,5,Yes,No,APH150MFOXLN,-,24.00'',,No,No,,, +FLUID LOAD,FL13-3-CH,FL2086-3CH,Self-Centering Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',,NA,NA,NA,NA, +FLUID LOAD,FL13-4,FL2086-4,Caljan Loader,LOADER,-,-,-,-,AMZ PROVIDED,-,-,-,-,-,-,-,-,-,-,- +FLUID LOAD,FL1-3-CH,FL1038-3CH,Self-Centering Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',,NA,NA,NA,NA, +FLUID LOAD,FL1-4,FL1038-4,Caljan Loader,LOADER,-,-,-,-,AMZ PROVIDED,-,-,-,-,-,-,-,-,-,-,- +FLUID LOAD,FL14-1-CH,FL2090-1CH,Tapered Straight Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',,NA,NA,NA,NA, +FLUID LOAD,FL14-2,FL2090-2,Powered-Belted,HSS,350,RH,460/3/60,25,5,Yes,No,APH150MFOXLN,-,24.00'',,No,No,,, +FLUID LOAD,FL14-3-CH,FL2090-3CH,Self-Centering Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',,NA,NA,NA,NA, +FLUID LOAD,FL14-4,FL2090-4,Caljan Loader,LOADER,-,-,-,-,AMZ PROVIDED,-,-,-,-,-,-,-,-,-,-,- +FLUID LOAD,FL15-1-CH,FL2094-1CH,Tapered Straight Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',,NA,NA,NA,NA, +FLUID LOAD,FL15-2,FL2094-2,Powered-Belted,HSS,350,RH,460/3/60,25,5,Yes,No,APH150MFOXLN,-,24.00'',,No,No,,, +FLUID LOAD,FL15-3-CH,FL2094-3CH,Self-Centering Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',,NA,NA,NA,NA, +FLUID LOAD,FL15-4,FL2094-4,Caljan Loader,LOADER,-,-,-,-,AMZ PROVIDED,-,-,-,-,-,-,-,-,-,-,- +FLUID LOAD,FL16-1-CH,FL4082-1CH,Tapered Straight Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',,NA,NA,NA,NA, +FLUID LOAD,FL16-2,FL4082-2,Powered-Belted,HSS,350,LH,460/3/60,25,5,Yes,No,APH150MFOXLN,-,24.00'',,No,No,,, +FLUID LOAD,FL16-3-CH,FL4082-3CH,Self-Centering Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',,NA,NA,NA,NA, +FLUID LOAD,FL16-4,FL4082-4,Caljan Loader,LOADER,-,-,-,-,AMZ PROVIDED,-,-,-,-,-,-,-,-,-,-,- +FLUID LOAD,FL17-1-CH,FL4078-1CH,Tapered Straight Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',,NA,NA,NA,NA, +FLUID LOAD,FL17-2,FL4078-2,Powered-Belted,HSS,350,RH,460/3/60,25,5,Yes,No,APH150MFOXLN,-,24.00'',,No,No,,, +FLUID LOAD,FL17-3-CH,FL4078-3CH,Self-Centering Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',,NA,NA,NA,NA, +FLUID LOAD,FL17-4,FL4078-4,Caljan Loader,LOADER,-,-,-,-,AMZ PROVIDED,-,-,-,-,-,-,-,-,-,-,- +FLUID LOAD,FL18-1-CH,FL4074-1CH,Tapered Straight Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',,NA,NA,NA,NA, +FLUID LOAD,FL18-2,FL4074-2,Powered-Belted,HSS,350,RH,460/3/60,25,5,Yes,No,APH150MFOXLN,-,24.00'',,No,No,,, +FLUID LOAD,FL18-3-CH,FL4074-3CH,Self-Centering Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',,NA,NA,NA,NA, +FLUID LOAD,FL18-4,FL4074-4,Caljan Loader,LOADER,-,-,-,-,AMZ PROVIDED,-,-,-,-,-,-,-,-,-,-,- +FLUID LOAD,FL19-1-CH,FL4070-1CH,Tapered Straight Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',,NA,NA,NA,NA, +FLUID LOAD,FL19-2,FL4070-2,Powered-Belted,HSS,350,RH,460/3/60,25,5,Yes,No,APH150MFOXLN,-,24.00'',,No,No,,, +FLUID LOAD,FL19-3-CH,FL4070-3CH,Self-Centering Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',,NA,NA,NA,NA, +FLUID LOAD,FL19-4,FL4070-4,Caljan Loader,LOADER,-,-,-,-,AMZ PROVIDED,-,-,-,-,-,-,-,-,-,-,- +FLUID LOAD,FL20-1-CH,FL4066-1CH,Tapered Straight Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',,NA,NA,NA,NA, +FLUID LOAD,FL20-2,FL4066-2,Powered-Belted,HSS,350,LH,460/3/60,25,5,Yes,No,APH150MFOXLN,-,24.00'',,No,No,,, +FLUID LOAD,FL20-3-CH,FL4066-3CH,Self-Centering Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',,NA,NA,NA,NA, +FLUID LOAD,FL20-4,FL4066-4,Caljan Loader,LOADER,-,-,-,-,AMZ PROVIDED,-,-,-,-,-,-,-,-,-,-,- +FLUID LOAD,FL2-1-CH,FL1034-1CH,Tapered Straight Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',,NA,NA,NA,NA, +FLUID LOAD,FL2-2,FL1034-2,Powered-Belted,HSS,350,RH,460/3/60,25,5,Yes,No,APH150MFOXLN,-,24.00'',,No,No,,, +FLUID LOAD,FL2-3-CH,FL1034-3CH,Self-Centering Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',,NA,NA,NA,NA, +FLUID LOAD,FL2-4,FL1034-4,Caljan Loader,LOADER,-,-,-,-,AMZ PROVIDED,-,-,-,-,-,-,-,-,-,-,- +FLUID LOAD,FL3-1-CH,FL1026-1CH,Tapered Straight Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',,NA,NA,NA,NA, +FLUID LOAD,FL3-2,FL1026-2,Powered-Belted,HSS,350,RH,460/3/60,25,5,Yes,No,APH150MFOXLN,-,24.00'',,No,No,,, +FLUID LOAD,FL3-3-CH,FL1026-3CH,Self-Centering Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',,NA,NA,NA,NA, +FLUID LOAD,FL3-4,FL1026-4,Caljan Loader,LOADER,-,-,-,-,AMZ PROVIDED,-,-,-,-,-,-,-,-,-,-,- +FLUID LOAD,FL4-1-CH,FL1022-1CH,Tapered Straight Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',,NA,NA,NA,NA, +FLUID LOAD,FL4-2,FL1022-2,Powered-Belted,HSS,350,RH,460/3/60,25,5,Yes,No,APH150MFOXLN,-,24.00'',,No,No,,, +FLUID LOAD,FL4-3-CH,FL1022-3CH,Self-Centering Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',,NA,NA,NA,NA, +FLUID LOAD,FL4-4,FL1022-4,Caljan Loader,LOADER,-,-,-,-,AMZ PROVIDED,-,-,-,-,-,-,-,-,-,-,- +FLUID LOAD,FL5-1-CH,FL1018-1CH,Tapered Straight Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',,NA,NA,NA,NA, +FLUID LOAD,FL5-2,FL1018-2,Powered-Belted,HSS,350,LH,460/3/60,25,5,Yes,No,APH150MFOXLN,-,24.00'',,No,No,,, +FLUID LOAD,FL5-3-CH,FL1018-3CH,Self-Centering Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',,NA,NA,NA,NA, +FLUID LOAD,FL5-4,FL1018-4,Caljan Loader,LOADER,-,-,-,-,AMZ PROVIDED,-,-,-,-,-,-,-,-,-,-,- +FLUID LOAD,FL6-1-CH,FL1014-1CH,Tapered Straight Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',,NA,NA,NA,NA, +FLUID LOAD,FL6-2,FL1014-2,Powered-Belted,HSS,350,RH,460/3/60,25,5,Yes,No,APH150MFOXLN,-,24.00'',,No,No,,, +FLUID LOAD,FL6-3-CH,FL1014-3CH,Self-Centering Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',,NA,NA,NA,NA, +FLUID LOAD,FL6-4,FL1014-4,Caljan Loader,LOADER,-,-,-,-,AMZ PROVIDED,-,-,-,-,-,-,-,-,-,-,- +FLUID LOAD,FL7-1-CH,FL3012-1CH,Tapered Straight Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',,NA,NA,NA,NA, +FLUID LOAD,FL7-2,FL3012-2,Powered-Belted,HSS,350,RH,460/3/60,25,5,Yes,No,APH150MFOXLN,-,24.00'',,No,No,,, +FLUID LOAD,FL7-3-CH,FL3012-3CH,Self-Centering Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',,NA,NA,NA,NA, +FLUID LOAD,FL7-4,FL3012-4,Caljan Loader,LOADER,-,-,-,-,AMZ PROVIDED,-,-,-,-,-,-,-,-,-,-,- +FLUID LOAD,FL8-1-CH,FL3016-1CH,Tapered Straight Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',,NA,NA,NA,NA, +FLUID LOAD,FL8-2,FL3016-2,Powered-Belted,HSS,350,RH,460/3/60,25,5,Yes,No,APH150MFOXLN,-,24.00'',,No,No,,, +FLUID LOAD,FL8-3-CH,FL3016-3CH,Self-Centering Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',,NA,NA,NA,NA, +FLUID LOAD,FL8-4,FL3016-4,Caljan Loader,LOADER,-,-,-,-,AMZ PROVIDED,-,-,-,-,-,-,-,-,-,-,- +FLUID LOAD,FL9-1-CH,FL3020-1CH,Tapered Straight Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',,NA,NA,NA,NA, +FLUID LOAD,FL9-2,FL3020-2,Powered-Belted,HSS,350,RH,460/3/60,25,5,Yes,No,APH150MFOXLN,-,24.00'',,No,No,,, +FLUID LOAD,FL9-3-CH,FL3020-3CH,Self-Centering Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',,NA,NA,NA,NA, +FLUID LOAD,FL9-4,FL3020-4,Caljan Loader,LOADER,-,-,-,-,AMZ PROVIDED,-,-,-,-,-,-,-,-,-,-,- +MF CHUTES,MFA-1-CH,QAA-1CH,Gravity Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,,,NA,NA,NA,NA,NA +MF CHUTES,MFA-2-CH,QAA-2CH,Gravity Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,,,NA,NA,NA,NA,NA +MF CHUTES,MFA-3-CH,QAA-3CH,Gravity Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,,,NA,NA,NA,NA,NA +MF CHUTES,MFA-4-CH,QAA-4CH,Gravity Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,,,NA,NA,NA,NA,NA +MF CHUTES,MFA-5-CH,QAA-5CH,Gravity Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,,,NA,NA,NA,NA,NA +MF CHUTES,MFB-1-CH,QAB-1CH,Gravity Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,,,NA,NA,NA,NA,NA +MF CHUTES,MFB-2-CH,QAB-2CH,Gravity Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,,,NA,NA,NA,NA,NA +MF CHUTES,MFB-3-CH,QAB-3CH,Gravity Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,,,NA,NA,NA,NA,NA +MF CHUTES,MFB-4-CH,QAB-4CH,Gravity Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,,,NA,NA,NA,NA,NA +MF CHUTES,MFB-5-CH,QAB-5CH,Gravity Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,,,NA,NA,NA,NA,NA +MF CHUTES,MFB-6-CH,QAB-6CH,Gravity Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,,,NA,NA,NA,NA,NA +MF CHUTES,MFB-7-CH,QAB-7CH,Gravity Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,,,NA,NA,NA,NA,NA +MF CHUTES,MFC-1-CH,QAC-1CH,Gravity Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,,,NA,NA,NA,NA,NA +MF CHUTES,MFC-2-CH,QAC-2CH,Gravity Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,,,NA,NA,NA,NA,NA +MF CHUTES,MFC-3-CH,QAC-3CH,Gravity Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,,,NA,NA,NA,NA,NA +MF CHUTES,MFC-4-CH,QAC-4CH,Gravity Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,,,NA,NA,NA,NA,NA +MF CHUTES,MFC-5-CH,QAC-5CH,Gravity Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,,,NA,NA,NA,NA,NA +MF CHUTES,MFC-6-CH,QAC-6CH,Gravity Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,,,NA,NA,NA,NA,NA +MF CHUTES,MFC-7-CH,QAC-7CH,Gravity Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,,,NA,NA,NA,NA,NA +MF CHUTES,MFD-1-CH,QAD-1CH,Gravity Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,,,NA,NA,NA,NA,NA +MF CHUTES,MFD-2-CH,QAD-2CH,Gravity Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,,,NA,NA,NA,NA,NA +MF CHUTES,MFD-3-CH,QAD-3CH,Gravity Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,,,NA,NA,NA,NA,NA +MF CHUTES,MFD-4-CH,QAD-4CH,Gravity Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,,,NA,NA,NA,NA,NA +MF CHUTES,MFD-5-CH,QAD-5CH,Gravity Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,,,NA,NA,NA,NA,NA +MF CHUTES,MFD-6-CH,QAD-6CH,Gravity Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,,,NA,NA,NA,NA,NA +MF CHUTES,MFD-7-CH,QAD-7CH,Gravity Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,,,NA,NA,NA,NA,NA +MF CHUTES,MFD-8-CH,QAD-8CH,Gravity Chute,CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,,,NA,NA,NA,NA,NA +NON CON,NCP-005,NCP1-1,Powered-Belted,HSS-HD,300,RH,460/3/60,25,7.5,Yes,No,RPH3200BXB-FR,NA,"12""",12'',No,Yes,NA,NA,NA +NON CON,NCP-010,NCP1-2,Powered-Belted,HSS-HD,300,RH,460/3/60,25,7.5,Yes,No,RPH3200BXB-FR,NA,"12""",12'',No,Yes,NA,NA,NA +NON CON,NCP-015,NCP1-3,Powered-Belted,HSS-HD,300,RH,460/3/60,25,7.5,Yes,No,RPH3200BXB-FR,NA,"12""",12'',No,Yes,NA,NA,NA +NON CON,NCP-020,NCP1-4,Powered-Belted,CURVE - 90 DEG,300,RH,460/3/60,25,5,Yes,No,FORBO GSTR,NA,"12""",12'',No,Yes,NA,NA,NA +NON CON,NCP-025,NCP1-5,Powered-Belted,HSS-HD,350,LH,460/3/60,25,7.5,Yes,No,APH150MFOXLN,NA,"12""",12'',Yes,Yes,NA,NA,NA +NON CON,NCP-030,NCP1-6,Powered-Belted,HSS-HD,350,LH,460/3/60,25,5,Yes,No,APH150MFOXLN,NA,"12""",12'',Yes,No,NA,NA,NA +NON CON,NCP-035,NCP1-7,Powered-Belted,HSS-HD,350,RH,460/3/60,25,7.5,Yes,No,APH150MFOXLN,NA,"12""",12'',Yes,No,NA,NA,NA +NON CON,NCP-040,NCP1-8,Powered-Belted,HSS-HD,350,RH,460/3/60,25,7.5,Yes,No,APH150MFOXLN,NA,"12""",12'',Yes,Yes,NA,NA,NA +NON CON,NCP-045,NCP1-9,Powered-Belted,HSS-HD,350,RH,460/3/60,25,2,Yes,No,APH150MFOXLN,NA,"12""",36'',No,Yes,NA,NA,NA +NON CON,NCP-050A,NCP1-10A,Powered - Roller,ALIGNER,350,RH,460/3/60,25,2,Yes,No,NA,2.50'',"36""",36'',No,Yes,NA,NA,NA +NON CON,NCP-050B,NCP1-10B,Powered - Roller,ALIGNER,350,RH,460/3/60,25,2,Yes,No,NA,2.50'',36.00'',36'',No,Yes,NA,NA,NA +NON CON,NCP-055,NCP1-11,Powered-Belted,HSS-HD,350,RH,460/3/60,25,2,Yes,No,APH150MFOXLN,NA,36.00'',12'',No,Yes,NA,NA,NA +NON CON,NCP-060,NCP1-12,Powered-Belted,HSS-HD,350,RH,460/3/60,25,2,Yes,No,APH150MFOXLN,NA,"12""",12'',No,Yes,NA,NA,NA +NON CON,NCP-065,NCP1-13,Powered-Belted,HSS-HD,350,RH,460/3/60,25,2,Yes,No,APH150MFOXLN,NA,"12""",12'',No,Yes,NA,NA,NA +NON CON,NCP-070A,NCP1-14A,Powered-Belted,SCALE,350,RH,460/3/60,25,2,Yes,No,NA,NA,NA,NA,No,Yes,NA,NA,NA +NON CON,NCP-070B,NCP1-14B,Powered-Belted,SCALE,350,RH,460/3/60,25,2,Yes,No,NA,NA,NA,NA,No,Yes,NA,NA,NA +NON CON,NCP-070C,NCP1-14C,Powered-Belted,SCALE,350,RH,460/3/60,25,2,Yes,No,NA,NA,NA,NA,No,Yes,NA,NA,NA +NON CON,NCP-070D,NCP1-14D,Powered-Belted,SCALE,350,RH,460/3/60,25,2,Yes,No,NA,NA,NA,NA,No,Yes,NA,NA,NA +NON CON,NCP-075,NCP1-15,Powered-Belted,HSS-HD,350,RH,460/3/60,25,7.5,Yes,No,APH150MFOXLN,NA,"12""",12'',No,Yes,NA,NA,NA +NON CON,NCP-080,NCP1-16,Powered-Belted,CURVE - 90 DEG,350,LH,460/3/60,25,5,Yes,No,FORBO GSTR,NA,"12""",12'',No,Yes,NA,NA,NA +NON CON,NCP-085,NCP1-17,Powered-Belted,HSS-HD,350,RH,460/3/60,25,2,Yes,No,APH150MFOXLN,NA,"12""",36'',No,Yes,NA,NA,NA +NON CON,NCP-090A,NCP1-18A,Powered - Roller,ALIGNER,350,RH,460/3/60,25,3,Yes,No,NA,2.50'',"36""",36'',No,Yes,NA,NA,NA +NON CON,NCP-090B,NCP1-18B,Powered - Roller,ALIGNER,350,RH,460/3/60,25,3,Yes,No,NA,2.50'',36.00'',36'',No,Yes,NA,NA,NA +NON CON,NCP-095,NCP1-19,Powered-Belted,HSS-HD,300,RH,460/3/60,25,2,Yes,No,APH150MFOXLN,NA,36.00'',12'',No,Yes,NA,NA,NA +NON CON,NCP-100,NCP1-20,Powered - Roller,FLOW SPLITTER,300,LH,460/3/60,25,5,Yes,No,NA,,"17""",17'',No,Yes,NA,NA,NA +NON CON,NCS1-005,NCS1-1,Powered-Strip Belt,SPUR - 22 DEG,320,RH,460/3/60,25,2,Yes,No,NSL-11ESBV,NA,"12""",12'',No,Yes,NA,NA,NA +NON CON,NCS1-010,NCS1-2,Powered-Belted,HSS-HD,300,RH,460/3/60,25,2,Yes,No,APH150MFOXLN,NA,"12""",12'',No,Yes,NA,NA,NA +NON CON,NCS1-015,NCS1-3,Powered-Belted,CURVE - 60 DEG,300,RH,460/3/60,25,5,Yes,No,FORBO GSTR,NA,"12""",12'',No,Yes,NA,NA,NA +NON CON,NCS1-020,NCS1-4,Powered-Belted,HSS-HD,300,RH,460/3/60,25,2,Yes,No,APH150MFOXLN,NA,"12""","36""",No,Yes,NA,NA,NA +NON CON,NCS1-025A,NCS1-5A,Powered - Roller,ALIGNER,250,LH,460/3/60,25,2,Yes,No,NA,2.50'',"36""",36'',No,Yes,NA,NA,NA +NON CON,NCS1-025B,NCS1-5B,Powered - Roller,ALIGNER,250,LH,460/3/60,25,2,Yes,No,NA,2.50'',36.00'',36'',No,Yes,NA,NA,NA +NON CON,NCS1-030,NCS1-6,Powered-Belted,HSS-HD,250,RH,460/3/60,25,2,Yes,No,APH150MFOXLN,NA,36.00'',12'',No,Yes,NA,NA,NA +NON CON,NCS1-035,NCS1-7,Powered-Belted,HSS-HD,250,RH,460/3/60,25,2,Yes,No,APH150MFOXLN,NA,"12""",12'',No,Yes,NA,NA,NA +NON CON,NCS1-040,NCS1-8,Powered-Belted,HSS-HD,250,RH,460/3/60,25,2,Yes,No,APH150MFOXLN,NA,"12""",12'',No,Yes,NA,NA,NA +NON CON,NCS1-045,NCS1-9,Powered-Belted,HSS-HD,250,RH,460/3/60,25,2,Yes,No,APH150MFOXLN,NA,"12""",12'',No,Yes,NA,NA,NA +NON CON,NCS1-050,S02-1,Powered-Belted,INTRALOX SORTER,250,RH,460/3/60,25,30,NA,No,NA,NA,NA,NA,No,Yes,NA,NA,NA +NON CON,NCS1-050-CH1,S02-101CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS1-050-CH10,S02-110CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS1-050-CH11,S02-111CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS1-050-CH12,S02-112CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS1-050-CH13,S02-113CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS1-050-CH14,S02-114CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS1-050-CH15,S01-115CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS1-050-CH16,S02-116CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS1-050-CH17,S02-117CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS1-050-CH18,S02-118CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS1-050-CH19,S02-119CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS1-050-CH2,S02-102CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS1-050-CH20,S02-120CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS1-050-CH21,S02-121CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS1-050-CH22,S02-122CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS1-050-CH23,S02-123CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS1-050-CH24,S02-124CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS1-050-CH25,S02-125CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS1-050-CH26,S02-126CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS1-050-CH27,S02-127CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS1-050-CH28,S02-128CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS1-050-CH29,S02-129CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS1-050-CH3,S02-103CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS1-050-CH30,S02-130CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS1-050-CH4,S02-104CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS1-050-CH5,S02-105CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS1-050-CH6,S02-106CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS1-050-CH7,S02-107CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS1-050-CH8,S02-108CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS1-050-CH9,S02-109CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON PRS,NCS1-055-CH,NCPRS1-1CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,25,NA,NA,NA,NA,NA,,,NO,NA,NA,NA,NA +NON CON PRS,NCS1-060,NCPRS1-2,Powered - Roller,MDR,180,NA,(1) 40A PSU,25,-,Yes,No,NA,"2""","6.5""",NA,No,No,NA,NA,NA +NON CON PRS,NCS1-065,NCPRS1-3,Gravity,Ball Table,NA,NA,NA,25,NA,NA,NA,NA,NA,6.50'',"12""",No,No,NA,NA,NA +NON CON PRS,NCS1-070,NCPRS1-4,Gravity,Roller,NA,NA,NA,25,NA,No,No,NA,2.00'',1.00'',"1.00""",No,No,NA,NA,NA +NON CON PRS,NCS1-075,NCPRS1-5,Gravity,Roller,NA,NA,NA,25,NA,No,No,NA,2.00'',1.00'',"1.00""",No,No,NA,NA,NA +NON CON,NCS2-010,NCP1-21,Powered-Belted,HSS-HD,300,RH,460/3/60,25,7.5,Yes,No,APH150MFOXLN,NA,"12""",12'',No,Yes,NA,NA,NA +NON CON,NCS2-015,NCP2-1,Powered-Belted,CURVE - 90 DEG,300,RH,460/3/60,25,5,Yes,No,FORBO GSTR,NA,"12""",12'',No,Yes,NA,NA,NA +NON CON,NCS2-020,NCS2-2,Powered-Belted,HSS-HD,300,RH,460/3/60,25,2,Yes,No,APH150MFOXLN,NA,"12""","36""",No,Yes,NA,NA,NA +NON CON,NCS2-025A,NCS2-3A,Powered - Roller,ALIGNER,250,LH,460/3/60,25,2,Yes,No,NA,2.50'',"36""",36'',No,Yes,NA,NA,NA +NON CON,NCS2-025B,NCS2-3B,Powered - Roller,ALIGNER,250,LH,460/3/60,25,2,Yes,No,NA,2.50'',36.00'',36'',No,Yes,NA,NA,NA +NON CON,NCS2-030,NCS2-4,Powered-Belted,HSS-HD,250,RH,460/3/60,25,2,Yes,No,APH150MFOXLN,NA,36.00'',12'',No,Yes,NA,NA,NA +NON CON,NCS2-035,NCS2-5,Powered-Belted,HSS-HD,250,RH,460/3/60,25,2,Yes,No,APH150MFOXLN,NA,"12""",12'',No,Yes,NA,NA,NA +NON CON,NCS2-040,NCS2-6,Powered-Belted,HSS-HD,250,RH,460/3/60,25,2,Yes,No,APH150MFOXLN,NA,"12""",12'',No,Yes,NA,NA,NA +NON CON,NCS2-045,NCS2-7,Powered-Belted,HSS-HD,250,RH,460/3/60,25,2,Yes,No,APH150MFOXLN,NA,"12""",12'',No,Yes,NA,NA,NA +NON CON,NCS2-050,S02-2,Powered-Belted,INTRALOX SORTER,-,RH,460/3/60,25,AMZ PROVIDED,NA,No,NA,NA,NA,NA,No,Yes,NA,NA,NA +NON CON,NCS2-050-CH1,S02-201CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS2-050-CH10,S02-210CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS2-050-CH11,S02-211CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS2-050-CH12,S02-212CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS2-050-CH13,S02-213CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS2-050-CH14,S02-214CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS2-050-CH15,S01-215CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS2-050-CH16,S02-216CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS2-050-CH17,S02-217CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS2-050-CH18,S02-218CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS2-050-CH19,S02-219CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS2-050-CH2,S02-202CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS2-050-CH20,S02-220CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS2-050-CH21,S02-221CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS2-050-CH22,S02-222CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS2-050-CH23,S02-223CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS2-050-CH24,S02-224CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS2-050-CH25,S02-225CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS2-050-CH26,S02-226CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS2-050-CH27,S02-227CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS2-050-CH28,S02-228CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS2-050-CH29,S02-229CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS2-050-CH3,S02-203CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS2-050-CH30,S02-230CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS2-050-CH4,S02-204CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS2-050-CH5,S02-205CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS2-050-CH6,S02-206CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS2-050-CH7,S02-207CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS2-050-CH8,S02-208CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON,NCS2-050-CH9,S02-209CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,NA,NA,No,NA,NA,NA,NA +NON CON PRS,NCS2-055-CH,NCPRS2-1CH,Tapered Straight Chute,SSI CHUTE,NA,NA,NA,NA,NA,No,No,NA,NA,,,No,NA,NA,NA,NA +NON CON PRS,NCS2-060,NCPRS2-2,Powered - Roller,MDR,180,NA,(1) 40A PSU,25,-,Yes,No,NA,2.00'',6.50'',NA,No,No,NA,NA,NA +NON CON PRS,NCS2-065,NCPRS2-3,Gravity,Ball Table,NA,NA,NA,NA,NA,No,No,NA,NA,6.50'',NA,No,No,NA,NA,NA +NON CON PRS,NCS2-070,NCPRS2-4,Gravity,Roller,NA,NA,NA,25,NA,No,No,NA,2.00'',1.00'',0'',No,No,NA,NA,NA +NON CON PRS,NCS2-075,NSPRS2-5,Gravity,Roller,NA,NA,NA,25,NA,No,No,NA,2.00'',1.00'',0'',No,No,NA,NA,NA +PROBLEM SOLVE NORTH,PRS1-105,PRS2-1,Powered-Belted,Incline Belt,120,RH,460/3/60,25,7.5,Yes,No,RPH3200BXB-FR,NA,24.00'',36'',No,Yes,NA,NA,NA +PROBLEM SOLVE NORTH,PRS1-110,PRS2-2,Powered-Belted,Incline Belt,120,RH,460/3/60,25,5,Yes,No,RPH3200BXB-FR,NA,24.00'',36'',No,Yes,NA,NA,NA +PROBLEM SOLVE NORTH,PRS1-205-CH,PRS3-1ACH,Induct Chute,Chute,N/A,NA,NA,25,NA,NA,NA,NA,NA,"24""",NA,NA,NA,NA,NA,NA +PROBLEM SOLVE NORTH,PRS1-210,PRS3-2A,Powered-Belted,Level Belt,120,LH,460/3/60,25,2,Yes,No,APH150MFOXLN,NA,24.00'',NA,No,No,NA,NA,NA +PROBLEM SOLVE NORTH,PRS1-215,PRS3-3A,Powered-Belted,Level Belt,120,LH,460/3/60,25,3,Yes,No,RPH3200BXB-FR,NA,24.00'',NA,No,No,NA,NA,NA +PROBLEM SOLVE NORTH,PRS1-220-CH,PRS3-1ACH,Induct Chute,Chute,N/A,NA,NA,25,NA,NA,NA,NA,NA,"24""",NA,NA,NA,NA,NA,NA +PROBLEM SOLVE NORTH,PRS1-225,PRS3-2A,Powered-Belted,Level Belt,120,RH,460/3/60,25,2,Yes,No,APH150MFOXLN,NA,24.00'',NA,No,No,NA,NA,NA +PROBLEM SOLVE NORTH,PRS1-230,PRS3-3A,Powered-Belted,Level Belt,120,RH,460/3/60,25,2,Yes,No,RPH3200BXB-FR,NA,24.00'',NA,No,No,NA,NA,NA +PROBLEM SOLVE NORTH,PRS1-235-CH,PRS1-4CH,Dual Entry Chute,Chute,N/A,NA,NA,25,NA,NA,NA,NA,NA,"24""",NA,NA,NA,NA,NA,NA +PROBLEM SOLVE NORTH,PRS1-240,PRS3-5,Powered-Belted,Level Belt,120,RH,460/3/60,25,2,Yes,No,APH150MFOXLN,NA,12.00'',24'',No,Yes,NA,NA,NA +PROBLEM SOLVE NORTH,PRS1-245,PRS3-6,Powered-Roller,MDR,120,NA,(2) 40A PSU,25,-,Yes,No,NA,"2""",2.00'',NA,No,NA,NA,NA,NA +PROBLEM SOLVE NORTH,PRS1-250-CH,PRS3-WS-1CH,Station Chute,Chute,N/A,NA,NA,25,NA,NA,NA,NA,NA,"24""",NA,NA,NA,NA,NA,NA +PROBLEM SOLVE NORTH,PRS1-255-CH,PRS3-WS-2CH,Station Chute,Chute,N/A,NA,NA,25,NA,NA,NA,NA,NA,"24""",NA,NA,NA,NA,NA,NA +PROBLEM SOLVE NORTH,PRS1-260-CH,PRS3-WS-3CH,Station Chute,Chute,N/A,NA,NA,25,NA,NA,NA,NA,NA,"24""",NA,NA,NA,NA,NA,NA +PROBLEM SOLVE NORTH,PRS1-265-CH,PRS3-WS-4CH,Station Chute,Chute,N/A,NA,NA,25,NA,NA,NA,NA,NA,"24""",NA,NA,NA,NA,NA,NA +PROBLEM SOLVE NORTH,PRS1-270-CH,PRS3-WS-5CH,Station Chute,Chute,N/A,NA,NA,25,NA,NA,NA,NA,NA,"24""",NA,NA,NA,NA,NA,NA +PROBLEM SOLVE NORTH,PRS1-275-CH,PRS3-WS-6CH,Station Chute,Chute,N/A,NA,NA,25,NA,NA,NA,NA,NA,"24""",NA,NA,NA,NA,NA,NA +PROBLEM SOLVE NORTH,PRS1-280-CH,PRS3-WS-7CH,Station Chute,Chute,N/A,NA,NA,25,NA,NA,NA,NA,NA,"24""",NA,NA,NA,NA,NA,NA +PROBLEM SOLVE NORTH,PRS1-285-CH,PRS3-WS-8CH,Station Chute,Chute,N/A,NA,NA,25,NA,NA,NA,NA,NA,"24""",NA,NA,NA,NA,NA,NA +PROBLEM SOLVE NORTH,PRS1-290-CH,PRS3-WS-9CH,Station Chute,Chute,N/A,NA,NA,25,NA,NA,NA,NA,NA,"24""",NA,NA,NA,NA,NA,NA +PROBLEM SOLVE NORTH,PRS1-295-CH,PRS3-WS-10CH,Station Chute,Chute,N/A,NA,NA,25,NA,NA,NA,NA,NA,"24""",NA,NA,NA,NA,NA,NA +PROBLEM SOLVE SOUTH,PRS2-105,PRS2-1,Powered-Belted,Incline Belt,120,RH,460/3/60,25,7.5,Yes,No,RPH3200BXB-FR,NA,24.00'',36'',No,Yes,NA,NA,NA +PROBLEM SOLVE SOUTH,PRS2-205-CH,PRS1-1ACH,Induct Chute,Chute,N/A,NA,NA,25,NA,NA,NA,NA,NA,"24""",NA,NA,NA,NA,NA,NA +PROBLEM SOLVE SOUTH,PRS2-210,PRS1-2A,Powered-Belted,Level Belt,120,RH,460/3/60,25,3,Yes,No,RPH3200BXB-FR,NA,24.00'',NA,No,No,NA,NA,NA +PROBLEM SOLVE SOUTH,PRS2-215-CH,PRS1-1B,Induct Chute,Chute,N/A,NA,NA,25,NA,NA,NA,NA,NA,"24""",NA,NA,NA,NA,NA,NA +PROBLEM SOLVE SOUTH,PRS2-220,PRS3-4,Powered-Belted,Level Belt,120,LH,460/3/60,25,3,Yes,No,RPH3200BXB-FR,NA,24.00'',NA,No,No,NA,NA,NA +PROBLEM SOLVE SOUTH,PRS2-225,PRS3-5,Powered-Belted,Level Belt,120,RH,460/3/60,25,7.5,Yes,No,RPH3200BXB-FR,NA,24.00'',NA,No,No,NA,NA,NA +PROBLEM SOLVE SOUTH,PRS2-230,PRS3-6,Powered-Belted,Level Belt,120,RH,460/3/60,25,3,Yes,No,RPH3200BXB-FR,NA,24.00'',12'',Yes,Yes,NA,NA,NA +PROBLEM SOLVE SOUTH,PRS2-235-CH,PRS3-7CH,Collection Chute,Chute,N/A,NA,NA,25,NA,NA,NA,NA,NA,"24""",NA,NA,NA,NA,NA,NA +PROBLEM SOLVE SOUTH,PRS2-240,PRS3-8,Powered-Belted,Level Belt,120,RH,460/3/60,25,2,Yes,No,APH150MFOXLN,NA,12.00'',12'',No,Yes,NA,NA,NA +PROBLEM SOLVE SOUTH,PRS2-245,PRS3-9,Powered-Roller,MDR,120,NA,(2) 40A PSU,25,-,Yes,No,NA,"2""",2.00'',NA,No,NA,NA,NA,NA +PROBLEM SOLVE SOUTH,PRS2-250-CH,PRS1-WS-2CH,Station Chute,Chute,N/A,NA,NA,25,NA,NA,NA,NA,NA,"24""",NA,NA,NA,NA,NA,NA +PROBLEM SOLVE SOUTH,PRS2-255-CH,PRS1-WS-1CH,Station Chute,Chute,N/A,NA,NA,25,NA,NA,NA,NA,NA,"24""",NA,NA,NA,NA,NA,NA +PROBLEM SOLVE SOUTH,PRS2-260-CH,PRS1-WS-4CH,Station Chute,Chute,N/A,NA,NA,25,NA,NA,NA,NA,NA,"24""",NA,NA,NA,NA,NA,NA +PROBLEM SOLVE SOUTH,PRS2-265-CH,PRS1-WS-3CH,Station Chute,Chute,N/A,NA,NA,25,NA,NA,NA,NA,NA,"24""",NA,NA,NA,NA,NA,NA +PROBLEM SOLVE SOUTH,PRS2-270-CH,PRS1-WS-6CH,Station Chute,Chute,N/A,NA,NA,25,NA,NA,NA,NA,NA,"24""",NA,NA,NA,NA,NA,NA +PROBLEM SOLVE SOUTH,PRS2-275-CH,PRS1-WS-5CH,Station Chute,Chute,N/A,NA,NA,25,NA,NA,NA,NA,NA,"24""",NA,NA,NA,NA,NA,NA +PROBLEM SOLVE SOUTH,PRS2-280-CH,PRS1-WS-8CH,Station Chute,Chute,N/A,NA,NA,25,NA,NA,NA,NA,NA,"24""",NA,NA,NA,NA,NA,NA +PROBLEM SOLVE SOUTH,PRS2-285-CH,PRS1-WS-7CH,Station Chute,Chute,N/A,NA,NA,25,NA,NA,NA,NA,NA,"24""",NA,NA,NA,NA,NA,NA +PROBLEM SOLVE SOUTH,PRS2-290-CH,PRS1-WS-10CH,Station Chute,Chute,N/A,NA,NA,25,NA,NA,NA,NA,NA,"24""",NA,NA,NA,NA,NA,NA +AUTO INDUCT,PS1-005,PS1-1,Powered-Strip Belt,SPUR - 30 DEG,300,RH,460/3/60,25,2,Yes,No,NSL-11ESBV,NA,12.00'',,No,Yes,N/A,N/A, +AUTO INDUCT,PS1-010,PS1-2,Powered-Belted,Level Belt,300,RH,460/3/60,25,2,Yes,No,APH150MFOXLN,NA,12.00'',,No,Yes,N/A,N/A, +AUTO INDUCT,PS1-015,PS1-3,Powered-Belted,CURVE - 30 DEG,300,RH,460/3/60,25,2,Yes,No,Forbo GSTR,NA,12.00'',,No,Yes,N/A,N/A, +AUTO INDUCT,PS1-020,PS1-4,Powered-Belted,Level Belt,300,RH,460/3/60,25,7.5,Yes,No,APH150MFOXLN,NA,12.00'',,No,Yes,N/A,N/A, +AUTO INDUCT,PS1-025,PS1-5,Powered-Belted,HSS,300,LH,460/3/60,25,5,Yes,NO,APH150MFOXLN,NA,12.00'',,No,Yes,N/A,N/A, +AUTO INDUCT,PS2-005,PS2-1,Powered-Strip Belt,SPUR - 30 DEG,300,RH,460/3/60,25,2,Yes,No,NSL-11ESBV,NA,12.00'',,No,Yes,N/A,N/A, +AUTO INDUCT,PS2-010,PS2-2,Powered-Belted,HSQ - Level Belt,300,RH,460/3/60,25,3,Yes,No,NSL-11ESBV,NA,12.00'',,No,Yes,N/A,N/A, +AUTO INDUCT,PS2-015,PS2-3,Powered-Belted,HSS,300,RH,460/3/60,25,5,Yes,NO,APH150MFOXLN,NA,12.00'',24'',No,Yes,N/A,N/A, +AUTO INDUCT,PS2-020,PS2-4,Powered-Belted,CURVE - 30 DEG,300,RH,460/3/60,25,2,Yes,No,Forbo GSTR,NA,24.00'',,No,Yes,N/A,N/A, +AUTO INDUCT,PS2-025,PS2-5,Powered-Belted,HSS,300,RH,460/3/60,25,7.5,Yes,NO,APH150MFOXLN,NA,24.00'',12'',No,Yes,N/A,N/A, +AUTO INDUCT,PS2-030,PS2-6,Powered-Belted,HSQ - Level Belt,300,RH,460/3/60,25,3,Yes,No,NSL-11ESBV,NA,12.00'',,No,Yes,N/A,N/A, +AUTO INDUCT,PS3-005,PS3-1,Powered-Strip Belt,SPUR - 30 DEG,300,LH,460/3/60,25,2,Yes,No,NSL-11ESBV,NA,12.00'',,No,Yes,N/A,N/A, +AUTO INDUCT,PS3-010,PS3-2,Powered-Belted,HSQ - Level Belt,300,LH,460/3/60,25,3,Yes,No,NSL-11ESBV,NA,12.00'',,No,Yes,N/A,N/A, +AUTO INDUCT,PS3-015,PS3-3,Powered-Belted,HSS,300,LH,460/3/60,25,3,Yes,NO,APH150MFOXLN,NA,12.00'',24'',No,Yes,N/A,N/A, +AUTO INDUCT,PS3-020,PS3-4,Powered-Belted,CURVE - 30 DEG,300,RH,460/3/60,25,2,Yes,No,Forbo GSTR,NA,24.00'',,No,Yes,N/A,N/A, +AUTO INDUCT,PS3-025,PS3-5,Powered-Belted,Level Belt,300,RH,460/3/60,25,5,Yes,No,APH150MFOXLN,NA,24.00'',,No,Yes,N/A,N/A, +AUTO INDUCT,PS3-030,PS3-6,Powered-Belted,HSS,300,RH,460/3/60,25,5,Yes,NO,APH150MFOXLN,NA,24.00'',,No,Yes,N/A,N/A, +AUTO INDUCT,PS3-035,PS3-7,Powered-Belted,Level Belt,300,RH,460/3/60,25,10,Yes,No,APH150MFOXLN,NA,24.00'',,No,No,N/A,N/A, +AUTO INDUCT,PS3-040,PS3-8,Powered-Belted,CURVE - 90 DEG,300,RH,460/3/60,25,3,Yes,No,Forbo GSTR,NA,24.00'',,No,Yes,N/A,N/A, +AUTO INDUCT,PS3-045,PS3-9,Powered-Belted,HSS,300,RH,460/3/60,25,5,Yes,NO,APH150MFOXLN,NA,24.00'',12'',No,Yes,N/A,N/A, +AUTO INDUCT,PS3-050,PS3-10,Powered-Belted,Level Belt,300,RH,460/3/60,25,5,Yes,No,APH150MFOXLN,NA,12.00'',,No,Yes,N/A,N/A, +AUTO INDUCT,PS3-055,PS3-11,Powered-Belted,CURVE - 90 DEG,300,RH,460/3/60,25,3,Yes,No,Forbo GSTR,NA,12.00'',,No,Yes,N/A,N/A, +AUTO INDUCT,PS3-060,PS3-12,Powered-Belted,HSQ - Level Belt,300,RH,460/3/60,25,3,Yes,No,NSL-11ESBV,NA,12.00'',,No,Yes,N/A,N/A, +AUTO INDUCT,PS4-005,PS4-1,Powered-Strip Belt,SPUR - 30 DEG,300,RH,460/3/60,25,2,Yes,No,NSL-11ESBV,NA,12.00'',,No,Yes,N/A,N/A, +AUTO INDUCT,PS4-010,PS4-2,Powered-Belted,Level Belt,300,RH,460/3/60,25,3,Yes,No,APH150MFOXLN,NA,12.00'',,No,Yes,N/A,N/A, +AUTO INDUCT,PS4-015,PS4-3,Powered-Belted,CURVE - 30 DEG,300,RH,460/3/60,25,2,Yes,No,Forbo GSTR,NA,12.00'',,No,Yes,N/A,N/A, +AUTO INDUCT,PS4-020,PS4-4,Powered-Belted,HSQ - Level Belt,300,RH,460/3/60,25,3,Yes,No,NSL-11ESBV,NA,12.00'',,No,Yes,N/A,N/A, +AUTO INDUCT,PS4-025,PS4-5,Powered-Belted,HSS,300,RH,460/3/60,25,5,Yes,NO,APH150MFOXLN,NA,12.00'',24'',No,Yes,N/A,N/A, +AUTO INDUCT,PS4-030,PS4-6,Powered-Belted,HSS,300,RH,460/3/60,25,7.5,Yes,NO,APH150MFOXLN,NA,24.00'',,No,Yes,N/A,N/A, +AUTO INDUCT,PS4-035,PS4-7,Powered-Belted,Level Belt,300,RH,460/3/60,25,7.5,Yes,No,APH150MFOXLN,NA,24.00'',,No,No,N/A,N/A, +AUTO INDUCT,PS4-040,PS4-8,Powered-Belted,Level Belt,300,RH,460/3/60,25,5,Yes,No,APH150MFOXLN,NA,24.00'',,No,No,N/A,N/A, +AUTO INDUCT,PS4-045,PS4-9,Powered-Belted,CURVE - 90 DEG,300,RH,460/3/60,25,3,Yes,No,Forbo GSTR,NA,24.00'',,No,Yes,N/A,N/A, +AUTO INDUCT,PS4-050,PS4-10,Powered-Belted,Level Belt,300,RH,460/3/60,25,10,Yes,NO,APH150MFOXLN,NA,24.00'',,No,No,N/A,N/A, +AUTO INDUCT,PS4-055,PS4-11,Powered-Belted,HSS,300,RH,460/3/60,25,5,Yes,NO,APH150MFOXLN,NA,24.00'',12'',No,Yes,N/A,N/A, +AUTO INDUCT,PS4-060,PS4-12,Powered-Belted,Level Belt,300,RH,460/3/60,25,3,Yes,No,APH150MFOXLN,NA,12.00'',,No,Yes,N/A,N/A, +AUTO INDUCT,PS4-065,PS4-13,Powered-Belted,CURVE - 90 DEG,300,RH,460/3/60,25,3,Yes,No,Forbo GSTR,NA,12.00'',,No,Yes,N/A,N/A, +AUTO INDUCT,PS4-070,PS4-14,Powered-Belted,Level Belt,300,RH,460/3/60,25,3,Yes,No,APH150MFOXLN,NA,12.00'',,No,Yes,N/A,N/A, +AUTO INDUCT,PS5-005,PS5-1,Powered-Strip Belt,SPUR - 30 DEG,300,LH,460/3/60,25,2,Yes,No,NSL-11ESBV,NA,12.00'',,No,Yes,N/A,N/A, +AUTO INDUCT,PS5-010,PS5-2,Powered-Belted,HSQ - Level Belt,300,LH,460/3/60,25,3,Yes,No,NSL-11ESBV,NA,12.00'',,No,Yes,N/A,N/A, +AUTO INDUCT,PS5-015,PS5-3,Powered-Belted,CURVE - 30 DEG,300,LH,460/3/60,25,2,Yes,No,Forbo GSTR,NA,12.00'',,No,Yes,N/A,N/A, +AUTO INDUCT,PS5-020,PS5-4,Powered-Belted,HSQ - Level Belt,300,LH,460/3/60,25,3,Yes,No,NSL-11ESBV,NA,12.00'',,No,Yes,N/A,N/A, +AUTO INDUCT,PS5-025,PS5-5,Powered-Belted,HSS,300,LH,460/3/60,25,5,Yes,NO,APH150MFOXLN,NA,12.00'',24'',No,Yes,N/A,N/A, +AUTO INDUCT,PS5-030,PS5-6,Powered-Belted,CURVE - 180 DEG,300,LH,460/3/60,25,5,Yes,No,Forbo GSTR,NA,24.00'',,No,Yes,N/A,N/A, +AUTO INDUCT,PS5-035,PS5-7,Powered-Belted,Level Belt,300,LH,460/3/60,25,10,Yes,No,APH150MFOXLN,NA,24.00'',,No,No,N/A,N/A, +AUTO INDUCT,PS5-040,PS5-8,Powered-Belted,Level Belt,300,RH,460/3/60,25,5,Yes,No,APH150MFOXLN,NA,24.00'',,No,No,N/A,N/A, +AUTO INDUCT,PS5-045,PS5-9,Powered-Belted,CURVE - 60 DEG,300,RH,460/3/60,25,3,Yes,No,Forbo GSTR,NA,24.00'',,No,Yes,N/A,N/A, +AUTO INDUCT,PS5-050,PS5-10,Powered-Belted,Level Belt,300,RH,460/3/60,25,10,Yes,No,APH150MFOXLN,NA,24.00'',,No,No,N/A,N/A, +AUTO INDUCT,PS5-055,PS5-11,Powered-Belted,CURVE - 60 DEG,300,LH,460/3/60,25,2,Yes,No,Forbo GSTR,NA,24.00'',,No,Yes,N/A,N/A, +AUTO INDUCT,PS5-060,PS5-12,Powered-Belted,HSS,300,LH,460/3/60,25,10,Yes,NO,APH150MFOXLN,NA,24.00'',12'',No,Yes,N/A,N/A, +AUTO INDUCT,PS5-065,PS5-13,Powered-Belted,HSQ - Level Belt,300,RH,460/3/60,25,3,Yes,No,NSL-11ESBV,NA,12.00'',,No,Yes,N/A,N/A, +AUTO INDUCT,PS6-005,PS6-1,Powered-Strip Belt,SPUR - 30 DEG,300,LH,460/3/60,25,2,Yes,No,NSL-11ESBV,NA,12.00'',,No,Yes,N/A,N/A, +AUTO INDUCT,PS6-010,PS6-2,Powered-Belted,HSQ - Level Belt,300,LH,460/3/60,25,3,Yes,No,NSL-11ESBV,NA,12.00'',,No,Yes,N/A,N/A, +AUTO INDUCT,PS6-015,PS6-3,Powered-Belted,CURVE - 30 DEG,300,LH,460/3/60,25,2,Yes,No,Forbo GSTR,NA,12.00'',,No,Yes,N/A,N/A, +AUTO INDUCT,PS6-020,PS6-4,Powered-Belted,HSQ - Level Belt,300,LH,460/3/60,25,3,Yes,No,NSL-11ESBV,NA,12.00'',,No,Yes,N/A,N/A, +AUTO INDUCT,PS6-025,PS6-5,Powered-Belted,HSS,300,LH,460/3/60,25,5,Yes,NO,APH150MFOXLN,NA,12.00'',24'',No,Yes,N/A,N/A, +AUTO INDUCT,PS6-030,PS6-6,Powered-Belted,CURVE - 180 DEG,300,LH,460/3/60,25,5,Yes,No,Forbo GSTR,NA,24.00'',,No,Yes,N/A,N/A, +AUTO INDUCT,PS6-035,PS6-7,Powered-Belted,Level Belt,300,LH,460/3/60,25,7.5,Yes,No,APH150MFOXLN,NA,24.00'',,No,No,N/A,N/A, +AUTO INDUCT,PS6-040,PS6-8,Powered-Belted,Level Belt,300,RH,460/3/60,25,5,Yes,No,APH150MFOXLN,NA,24.00'',,No,No,N/A,N/A, +AUTO INDUCT,PS6-045,PS6-9,Powered-Belted,CURVE - 60 DEG,300,RH,460/3/60,25,3,Yes,No,Forbo GSTR,NA,24.00'',,No,Yes,N/A,N/A, +AUTO INDUCT,PS6-050,PS6-10,Powered-Belted,Level Belt,300,RH,460/3/60,25,10,Yes,No,APH150MFOXLN,NA,24.00'',,No,No,N/A,N/A, +AUTO INDUCT,PS6-055,PS6-11,Powered-Belted,CURVE - 60 DEG,300,RH,460/3/60,25,3,Yes,No,Forbo GSTR,NA,24.00'',,No,Yes,N/A,N/A, +AUTO INDUCT,PS6-060,PS6-12,Powered-Belted,HSS,300,RH,460/3/60,25,10,Yes,NO,APH150MFOXLN,NA,24.00'',12'',No,Yes,N/A,N/A, +AUTO INDUCT,PS6-065,PS6-13,Powered-Belted,HSQ - Level Belt,300,RH,460/3/60,25,3,Yes,No,NSL-11ESBV,NA,12.00'',,No,Yes,N/A,N/A, +AUTO INDUCT,PS7-005,PS7-1,Powered-Strip Belt,SPUR - 30 DEG,300,LH,460/3/60,25,2,Yes,No,NSL-11ESBV,NA,12.00'',,No,Yes,N/A,N/A, +AUTO INDUCT,PS7-010,PS7-2,Powered-Belted,HSQ - Level Belt,300,LH,460/3/60,25,3,Yes,No,NSL-11ESBV,NA,12.00'',,No,Yes,N/A,N/A, +AUTO INDUCT,PS7-015,PS7-3,Powered-Belted,CURVE - 30 DEG,300,LH,460/3/60,25,2,Yes,No,Forbo GSTR,NA,12.00'',,No,Yes,N/A,N/A, +AUTO INDUCT,PS7-020,PS7-4,Powered-Belted,HSQ - Level Belt,300,LH,460/3/60,25,3,Yes,No,NSL-11ESBV,NA,12.00'',,No,Yes,N/A,N/A, +AUTO INDUCT,PS7-025,PS7-5,Powered-Belted,HSS,300,LH,460/3/60,25,7.5,Yes,NO,APH150MFOXLN,NA,12.00'',24'',No,Yes,N/A,N/A, +AUTO INDUCT,PS7-030,PS7-6,Powered-Belted,Level Belt,300,RH,460/3/60,25,7.5,Yes,No,APH150MFOXLN,NA,24.00'',,No,No,N/A,N/A, +AUTO INDUCT,PS7-035,PS7-7,Powered-Belted,Level Belt,300,LH,460/3/60,25,10,Yes,No,APH150MFOXLN,NA,24.00'',,No,No,N/A,N/A, +AUTO INDUCT,PS7-040,PS7-8,Powered-Belted,Level Belt,300,LH,460/3/60,25,10,Yes,No,APH150MFOXLN,NA,24.00'',,No,No,N/A,N/A, +AUTO INDUCT,PS7-045,PS7-9,Powered-Belted,HSS,300,LH,460/3/60,25,7.5,Yes,NO,APH150MFOXLN,NA,24.00'',,No,Yes,N/A,N/A, +AUTO INDUCT,PS7-050,PS7-10,Powered-Belted,HSQ - Level Belt,300,RH,460/3/60,25,3,Yes,No,NSL-11ESBV,NA,24.00'',,No,No,N/A,N/A, +AUTO INDUCT,PS7-055,PS7-11,Powered-Belted,CURVE - 90 DEG,300,RH,460/3/60,25,3,Yes,No,Forbo GSTR,NA,24.00'',,No,No,N/A,N/A, +AUTO INDUCT,PS7-060,PS7-12,Powered-Belted,Level Belt,300,RH,460/3/60,25,3,Yes,No,APH150MFOXLN,NA,24.00'',,No,No,N/A,N/A, +AUTO INDUCT,PS7-065,PS7-13,Powered-Belted,CURVE - 90 DEG,300,RH,460/3/60,25,3,Yes,No,Forbo GSTR,NA,24.00'',,No,No,N/A,N/A, +AUTO INDUCT,PS7-070,PS7-14,Powered-Belted,Level Belt,300,RH,460/3/60,25,7.5,Yes,No,APH150MFOXLN,NA,24.00'',12'',No,Yes,N/A,N/A, +FLUID INBOUND,UL10-005,UL10-1,Powered-Belted,HSS-HD,120,RH,460/3/60,25,2,Yes,NO,RPH3200BXB-FR,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL10-010,UL10-2,Powered-Belted,HSS,280,RH,460/3/60,25,7.5,Yes,NO,APH150MFOXLN,NA,12.00'',12'',Yes,Yes,NA,NA,NA +FLUID INBOUND,UL10-015,UL10-3,Powered-Belted,HSS,280,RH,460/3/60,25,2,Yes,NO,APH150MFOXLN,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL10-020,UL10-4,Powered-Belted,HSQ,420,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL10-025,UL10-5,Powered-Belted,HSQ,420,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL10-030,UL10-6,Powered-Belted,HSQ,420,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL10-035,UL10-7,Powered-Belted,HSQ,420,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL10-040,UL10-8,Powered-Belted,CURVE - 30 DEG,420,RH,460/3/60,25,3,Yes,NO,Forbo GSTR,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL10-045,UL10-9,Powered-Belted,HSQ,420,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL1-005,UL1-1,NA,Destuffit,-,-,-,-,AMZ PROVIDED,-,-,-,-,-,-,-,-,-,-,- +FLUID INBOUND,UL10-050,UL10-10,Powered-Strip Belt,SPUR - 30 DEG,420,RH,460/3/60,25,2,Yes,NO,NSL-11ESBV,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL1-010,UL1-2,NA,CBC,-,-,-,-,AMZ PROVIDED,-,-,-,-,-,-,-,-,-,-,- +FLUID INBOUND,UL1-015,UL1-3,Powered-Belted,HSS,280,RH,460/3/60,25,5,Yes,NO,APH150MFOXLN,NA,12.00'',,Y,Y,NA,NA,NA +FLUID INBOUND,UL1-020,UL1-4,Powered-Belted,HSS,280,RH,460/3/60,25,5,Yes,NO,APH150MFOXLN,NA,12.00'',,Y,Y,NA,NA,NA +FLUID INBOUND,UL1-025,UL1-5,Powered-Belted,HSQ,420,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',N,Yes,NA,NA,NA +FLUID INBOUND,UL1-030,UL1-6,Powered-Belted,HSQ,420,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',N,Yes,NA,NA,NA +FLUID INBOUND,UL1-035,UL1-7,Powered-Belted,HSQ,420,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',N,Yes,NA,NA,NA +FLUID INBOUND,UL1-040,UL1-8,Powered-Belted,HSQ,420,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',N,Yes,NA,NA,NA +FLUID INBOUND,UL1-045,UL1-9,Powered-Belted,HSS-HD,280,RH,460/3/60,25,5,Yes,NO,RPH3200BXB-FR,NA,12.00'',,N,Y,NA,NA,NA +FLUID INBOUND,UL1-050A,UL1-10A,Powered - Roller,ALIGNER,280,LH,460/3/60,25,3,Yes,NO,NA,2.50'',12.00'',,N,Y,NA,NA,NA +FLUID INBOUND,UL1-050B,UL1-10B,Powered - Roller,ALIGNER,280,LH,460/3/60,25,3,Yes,NO,NA,2.50'',12.00'',,N,Y,NA,NA,NA +FLUID INBOUND,UL1-055,UL1-11,Powered-Belted,HSS,280,LH,460/3/60,25,2,Yes,NO,APH150MFOXLN,NA,12.00'',,N,Y,NA,NA,NA +FLUID INBOUND,UL1-060,UL1-12,Powered-Belted,HSS,280,LH,460/3/60,25,2,Yes,NO,APH150MFOXLN,NA,12.00'',36'',N,Y,NA,NA,NA +FLUID INBOUND,UL1-065,UL1-13,Powered - Roller,FLOW SPLITTER,280,LH,460/3/60,25,5,Yes,NO,NA,,12.00'',12'',N,Y,NA,NA,NA +FLUID INBOUND,UL1-070,UL1-14,Powered-Belted,HSS,420,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV,NA,12.00'',36'',N,Yes,NA,NA,NA +FLUID INBOUND,UL1-075,UL1-15,Powered-Belted,HSQ,420,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',N,Yes,NA,NA,NA +FLUID INBOUND,UL1-080,UL1-16,Powered-Belted,HSQ,420,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',N,Yes,NA,NA,NA +FLUID INBOUND,UL1-085,UL1-17,Powered-Belted,HSQ,420,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',N,Yes,NA,NA,NA +FLUID INBOUND,UL1-090,UL1-18,Powered-Belted,CURVE - 60 DEG,420,RH,460/3/60,25,5,Yes,NO,Forbo GSTR,NA,12.00'',,N,Y,NA,NA,NA +FLUID INBOUND,UL1-095,UL1-19,Powered-Belted,HSQ,420,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',N,Yes,NA,NA,NA +FLUID INBOUND,UL1-100,UL1-20,Powered-Strip Belt,SPUR - 30 DEG,420,LH,460/3/60,25,2,Yes,NO,NSL-11ESBV,NA,12.00'',,N,Y,NA,NA,NA +FLUID INBOUND,UL11-005,UL11-1,NA,Destuffit,-,-,-,-,AMZ PROVIDED,-,-,-,-,-,-,-,-,-,-,- +FLUID INBOUND,UL11-010,UL11-2,NA,CBC,-,-,-,-,AMZ PROVIDED,-,-,-,-,-,-,-,-,-,-,- +FLUID INBOUND,UL11-015,UL11-3,Powered-Belted,HSS,280,LH,460/3/60,25,5,Yes,NO,APH150MFOXLN,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL11-020,UL11-4,Powered-Belted,HSS,280,LH,460/3/60,25,5,Yes,NO,APH150MFOXLN,NA,12.00'',12'',Yes,Yes,NA,NA,NA +FLUID INBOUND,UL11-025,UL11-5,Powered-Belted,HSS,280,LH,460/3/60,25,2,Yes,NO,APH150MFOXLN,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL11-030,UL11-6,Powered-Belted,HSQ,300,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL11-035,UL11-7,Powered-Belted,HSQ,300,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL11-040,UL11-8,Powered-Belted,HSQ,300,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL11-045,UL11-9,Powered-Belted,HSQ,300,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL11-050,UL11-10,Powered-Belted,HSS-HD,280,RH,460/3/60,25,5,Yes,NO,RPH3200BXB-FR,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL11-055A,UL11-11A,Powered - Roller,ALIGNER,280,LH,460/3/60,25,3,Yes,NO,NA,2.50'',12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL11-055B,UL11-11B,Powered - Roller,ALIGNER,280,LH,460/3/60,25,3,Yes,NO,NA,2.50'',12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL11-060,UL11-12,Powered-Belted,HSS,280,RH,460/3/60,25,2,Yes,NO,APH150MFOXLN,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL11-065,UL11-13,Powered-Belted,HSS,280,RH,460/3/60,25,2,Yes,NO,APH150MFOXLN,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL11-070,UL11-14,Powered - Roller,FLOW SPLITTER,280,LH,460/3/60,25,5,Yes,NO,NA,,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL11-075,UL11-15,Powered-Belted,HSS,420,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL11-080,UL11-16,Powered-Belted,HSQ,420,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL11-085,UL11-17,Powered-Belted,HSQ,420,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL11-090,UL11-18,Powered-Belted,HSQ,420,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL11-095,UL11-19,Powered-Belted,CURVE - 60 DEG,420,RH,460/3/60,25,5,Yes,NO,Forbo GSTR,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL11-100,UL11-20,Powered-Belted,HSQ,420,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL11-105,UL11-21,Powered-Strip Belt,SPUR - 30 DEG,420,LH,460/3/60,25,2,Yes,NO,NSL-11ESBV,NA,,,,,NA,NA,NA +FLUID INBOUND,UL12-005,UL12-1,NA,Destuffit,-,-,-,-,AMZ PROVIDED,-,-,-,-,-,-,-,-,-,-,- +FLUID INBOUND,UL12-010,UL12-2,NA,CBC,-,-,-,-,AMZ PROVIDED,-,-,-,-,-,-,-,-,-,-,- +FLUID INBOUND,UL12-015,UL12-3,Powered-Belted,HSS,280,LH,460/3/60,25,5,Yes,NO,APH150MFOXLN,NA,12.00'',12.00'',No,Yes,NA,NA,NA +FLUID INBOUND,UL12-020,UL12-4,Powered-Belted,HSS,280,LH,460/3/60,25,5,Yes,NO,APH150MFOXLN,NA,12.00'',12.00'',Yes,Yes,NA,NA,NA +FLUID INBOUND,UL12-025,UL12-5,Powered-Belted,CURVE - 30 DEG,280,LH,460/3/60,25,2,Yes,NO,Forbo GSTR,NA,12.00'',12.00'',No,Yes,NA,NA,NA +FLUID INBOUND,UL12-030,UL12-6,Powered-Belted,HSQ,420,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12.00'',No,Yes,NA,NA,NA +FLUID INBOUND,UL12-035,UL12-7,Powered-Belted,HSQ,420,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12.00'',No,Yes,NA,NA,NA +FLUID INBOUND,UL12-040,UL12-8,Powered-Belted,HSQ,420,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12.00'',No,Yes,NA,NA,NA +FLUID INBOUND,UL12-045,UL12-9,Powered-Belted,HSQ,420,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12.00'',No,Yes,NA,NA,NA +FLUID INBOUND,UL12-050,UL12-10,Powered-Strip Belt,SPUR - 30 DEG,420,LH,460/3/60,25,2,Yes,NO,NSL-11ESBV,NA,12.00'',12.00'',No,Yes,NA,NA,NA +FLUID INBOUND,UL13-005,UL13-1,Powered-Belted,HSS,120,RH,460/3/60,25,2,Yes,NO,RPH3200BXB-FR,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL13-010,UL13-2,Powered-Belted,HSS,280,RH,460/3/60,25,7.5,Yes,NO,APH150MFOXLN,NA,12.00'',12'',Yes,Yes,NA,NA,NA +FLUID INBOUND,UL13-015,UL13-3,Powered-Belted,HSQ,280,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL13-020,UL13-4,Powered-Belted,HSQ,300,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL13-025,UL13-5,Powered-Belted,HSQ,300,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL13-030,UL13-6,Powered-Belted,HSQ,300,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL13-035,UL13-7,Powered-Belted,HSS-HD,280,RH,460/3/60,25,5,Yes,NO,RPH3200BXB-FR,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL13-040A,UL13-8A,Powered - Roller,ALIGNER,300,LH,460/3/60,25,3,Yes,NO,NA,2.50'',12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL13-040B,UL13-8B,Powered - Roller,ALIGNER,300,LH,460/3/60,25,3,Yes,NO,NA,2.50'',12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL13-045,UL13-9,Powered-Belted,HSS,280,RH,460/3/60,25,2,Yes,NO,APH150MFOXLN,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL13-050,UL13-10,Powered-Belted,HSS,280,RH,460/3/60,25,2,Yes,NO,APH150MFOXLN,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL13-055,UL13-11,Powered - Roller,FLOW SPLITTER,280,RH,460/3/60,25,5,Yes,NO,NA,,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL13-060,UL13-12,Powered-Belted,HSS,420,RH,460/3/60,25,3,Yes,NO,APH150MFOXLN,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL13-065,UL13-13,Powered-Belted,HSQ,420,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL13-070,UL13-14,Powered-Belted,HSQ,420,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL13-075,UL13-15,Powered-Belted,HSQ,420,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL13-080,UL13-16,Powered-Belted,CURVE - 60 DEG,420,RH,460/3/60,25,5,Yes,NO,FORBO GSTR,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL13-085,UL13-17,Powered-Belted,HSQ,420,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL13-090,UL13-18,Powered-Strip Belt,SPUR - 30 DEG,420,LH,460/3/60,25,2,Yes,NO,NSL-11ESBV,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL14-005,UL14-1,NA,Destuffit,-,-,-,-,AMZ PROVIDED,-,-,-,-,-,-,-,-,-,-,- +FLUID INBOUND,UL14-010,UL14-2,NA,CBC,-,-,-,-,AMZ PROVIDED,-,-,-,-,-,-,-,-,-,-,- +FLUID INBOUND,UL14-015,UL14-3,Powered-Belted,HSS,280,LH,460/3/60,25,5,Yes,NO,APH150MFOXLN,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL14-020,UL14-4,Powered-Belted,HSS,280,LH,460/3/60,25,5,Yes,NO,APH150MFOXLN,NA,12.00'',12'',Yes,Yes,NA,NA,NA +FLUID INBOUND,UL14-025,UL14-5,Powered-Belted,HSQ,280,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL14-030,UL14-6,Powered-Belted,CURVE - 30 DEG,280,LH,460/3/60,25,2,Yes,NO,Forbo GSTR,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL14-035,UL14-7,Powered-Belted,HSQ,420,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL14-040,UL14-8,Powered-Belted,HSQ,420,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL14-045,UL14-9,Powered-Belted,HSQ,420,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL14-050,UL14-10,Powered-Strip Belt,SPUR - 30 DEG,420,LH,460/3/60,25,2,Yes,NO,NSL-11ESBV,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL15-005,UL15-1,NA,Destuffit,-,-,-,-,AMZ PROVIDED,-,-,-,-,-,-,-,-,-,-,- +FLUID INBOUND,UL15-010,UL15-2,NA,CBC,-,-,-,-,AMZ PROVIDED,-,-,-,-,-,-,-,-,-,-,- +FLUID INBOUND,UL15-015,UL15-3,Powered-Belted,HSS,120,LH,460/3/60,25,5,Yes,NO,APH150MFOXLN,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL15-020,UL15-4,Powered-Belted,HSS,280,LH,460/3/60,25,5,Yes,NO,APH150MFOXLN,NA,12.00'',12'',Yes,Yes,NA,NA,NA +FLUID INBOUND,UL15-025,UL15-5,Powered-Belted,CURVE - 30 DEG,280,LH,460/3/60,25,2,Yes,NO,Forbo GSTR,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL15-030,UL15-6,Powered-Belted,HSS,280,LH,460/3/60,25,3,Yes,NO,APH150MFOXLN,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL15-035,UL15-7,Powered-Belted,HSQ,420,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL15-040,UL15-8,Powered-Belted,HSQ,420,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL15-045,UL15-9,Powered-Belted,HSQ,420,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL15-050,UL15-10,Powered-Belted,HSQ,420,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL15-055,UL15-11,Powered-Strip Belt,SPUR - 30 DEG,420,LH,460/3/60,25,2,Yes,NO,NSL-11ESBV,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL16-005,UL16-1,Powered-Belted,HSS,120,RH,460/3/60,25,2,Yes,NO,RPH3200BXB-FR,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL16-010,UL16-2,Powered-Belted,HSS,280,RH,460/3/60,25,7.5,Yes,NO,APH150MFOXLN,NA,12.00'',12'',Yes,Yes,NA,NA,NA +FLUID INBOUND,UL16-013,UL16-3,Powered-Belted,HSS,280,RH,460/3/60,25,3,Yes,NO,APH150MFOXLN,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL16-015,UL16-4,Powered-Belted,HSQ,280,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL16-020,UL16-5,Powered-Belted,FLOWTURN CURVE,280,RH,460/3/60,25,2,Yes,NO,FORBO GSTR,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL16-025,UL16-6,Powered-Belted,HSQ,420,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL16-030,UL16-7,Powered-Belted,HSQ,420,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL16-035,UL16-8,Powered-Belted,HSQ,420,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL16-040,UL16-9,Powered-Strip Belt,SPUR - 30 DEG,420,RH,460/3/60,25,2,Yes,NO,NSL-11ESBV,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL17-005,UL17-1,NA,Destuffit,-,-,-,-,AMZ PROVIDED,-,-,-,-,-,-,-,-,-,-,- +FLUID INBOUND,UL17-010,UL17-2,NA,CBC,-,-,-,-,AMZ PROVIDED,-,-,-,-,-,-,-,-,-,-,- +FLUID INBOUND,UL17-015,UL17-3,Powered-Belted,HSS,280,LH,460/3/60,25,5,Yes,NO,APH150MFOXLN,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL17-020,UL17-4,Powered-Belted,HSS,280,LH,460/3/60,25,5,Yes,NO,APH150MFOXLN,NA,12.00'',12'',Yes,Yes,NA,NA,NA +FLUID INBOUND,UL17-025,UL17-5,Powered-Belted,HSQ,280,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL17-030,UL17-6,Powered-Belted,FLOWTURN CURVE,280,LH,460/3/60,25,2,Yes,NO,FORBO GSTR,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL17-035,UL17-7,Powered-Belted,HSQ,420,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL17-040,UL17-8,Powered-Belted,HSQ,420,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL17-045,UL17-9,Powered-Belted,HSQ,420,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL17-050,UL17-10,Powered-Strip Belt,SPUR - 30 DEG,420,RH,460/3/60,25,2,Yes,NO,NSL-11ESBV,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL18-005,UL18-1,NA,Destuffit,-,-,-,-,AMZ PROVIDED,-,-,-,-,-,-,-,-,-,-,- +FLUID INBOUND,UL18-010,UL18-2,NA,CBC,-,-,-,-,AMZ PROVIDED,-,-,-,-,-,-,-,-,-,-,- +FLUID INBOUND,UL18-015,UL18-3,Powered-Belted,HSS,280,LH,460/3/60,25,5,Yes,NO,APH150MFOXLN,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL18-020,UL18-4,Powered-Belted,HSS,280,LH,460/3/60,25,5,Yes,NO,APH150MFOXLN,NA,12.00'',12'',Yes,Yes,NA,NA,NA +FLUID INBOUND,UL18-025,UL18-5,Powered-Belted,HSQ,280,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL18-030,UL18-6,Powered-Belted,FLOWTURN CURVE,280,LH,460/3/60,25,5,Yes,NO,FORBO GSTR,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL18-035,UL18-7,Powered-Belted,HSQ,300,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL18-040,UL18-8,Powered-Belted,HSQ,300,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL18-045,UL18-9,Powered-Belted,HSQ,300,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL18-050,UL18-10,Powered-Belted,HSS-HD,280,LH,460/3/60,25,5,Yes,NO,RPH3200BXB-FR,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL18-055,UL18-11,Powered-Belted,FLOWTURN CURVE,280,RH,460/3/60,25,5,Yes,NO,FORBO GSTR,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL18-060,UL18-12,Powered-Belted,HSS,280,RH,460/3/60,25,3,Yes,NO,APH150MFOXLN,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL18-065A,UL18-13A,Powered - Roller,ALIGNER,300,LH,460/3/60,25,3,Yes,NO,NA,2.50'',12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL18-065B,UL18-13B,Powered - Roller,ALIGNER,300,LH,460/3/60,25,3,Yes,NO,NA,2.50'',12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL18-070,UL18-14,Powered-Belted,HSS,320,RH,460/3/60,25,2,Yes,NO,APH150MFOXLN,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL18-075,UL18-15,Powered-Belted,HSS,300,RH,460/3/60,25,2,Yes,NO,APH150MFOXLN,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL18-080,UL18-16,Powered - Roller,FLOW SPLITTER,280,RH,460/3/60,25,5,Yes,NO,NA,,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL18-085,UL18-17,Powered-Belted,HSS,420,RH,460/3/60,25,3,Yes,NO,APH150MFOXLN,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL18-090,UL18-18,Powered-Belted,HSQ,420,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL18-095,UL18-19,Powered-Belted,HSQ,420,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL18-100,UL18-20,Powered-Belted,HSQ,420,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL18-105,UL18-21,Powered-Belted,FLOWTURN CURVE,420,RH,460/3/60,25,5,Yes,NO,FORBO GSTR,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL18-110,UL18-22,Powered-Belted,HSQ,420,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL18-115,UL18-23,Powered-Strip Belt,SPUR - 30 DEG,420,LH,460/3/60,25,2,Yes,NO,NSL-11ESBV,NA,,,,,NA,NA,NA +FLUID INBOUND,UL19-005,UL19-1,Powered-Belted,HSS,120,LH,460/3/60,25,2,Yes,NO,RPH3200BXB-FR,NA,12.00'',12'',NO,YES,NA,NA,NA +FLUID INBOUND,UL19-010,UL19-2,Powered-Belted,HSS,280,RH,460/3/60,25,7.5,Yes,NO,APH150MFOXLN,NA,12.00'',12'',YES,YES,NA,NA,NA +FLUID INBOUND,UL19-015,UL19-3,Powered-Belted,CURVE - 30 DEG,280,RH,460/3/60,25,2,Yes,NO,Forbo GSTR,NA,12.00'',12'',NO,YES,NA,NA,NA +FLUID INBOUND,UL19-020,UL19-4,Powered-Belted,HSS,280,RH,460/3/60,25,2,Yes,NO,NSL-11ESBV,NA,12.00'',12'',NO,YES,NA,NA,NA +FLUID INBOUND,UL19-025,UL19-5,Powered-Belted,HSQ,420,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',NO,Yes,NA,NA,NA +FLUID INBOUND,UL19-030,UL19-6,Powered-Belted,HSQ,420,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',NO,Yes,NA,NA,NA +FLUID INBOUND,UL19-035,UL19-7,Powered-Belted,HSQ,420,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',NO,Yes,NA,NA,NA +FLUID INBOUND,UL19-040,UL19-8,Powered-Belted,HSQ,420,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',NO,Yes,NA,NA,NA +FLUID INBOUND,UL19-045,UL19-9,Powered-Strip Belt,SPUR - 30 DEG,420,RH,460/3/60,25,2,Yes,NO,NSL-11ESBV,NA,12.00'',12'',NO,YES,NA,NA,NA +FLUID INBOUND,UL20-005,UL20-1,NA,Destuffit,-,-,-,-,AMZ PROVIDED,-,-,-,-,-,-,-,-,-,-,- +FLUID INBOUND,UL20-010,UL20-2,NA,CBC,-,-,-,-,AMZ PROVIDED,-,-,-,-,-,-,-,-,-,-,- +FLUID INBOUND,UL20-015,UL20-3,Powered-Belted,HSS,280,RH,460/3/60,25,5,Yes,NO,APH150MFOXLN,NA,12.00'',12'',NO,YES,NA,NA,NA +FLUID INBOUND,UL20-020,UL20-4,Powered-Belted,HSS,280,RH,460/3/60,25,5,Yes,NO,APH150MFOXLN,NA,12.00'',12'',YES,YES,NA,NA,NA +FLUID INBOUND,UL20-025,UL20-5,Powered-Belted,CURVE - 30 DEG,280,RH,460/3/60,25,2,Yes,NO,Forbo GSTR,NA,12.00'',12'',NO,YES,NA,NA,NA +FLUID INBOUND,UL20-030,UL20-6,Powered-Belted,HSS,280,RH,460/3/60,25,2,Yes,NO,APH150MFOXLN,NA,12.00'',12'',NO,YES,NA,NA,NA +FLUID INBOUND,UL20-035,UL20-7,Powered-Belted,HSQ,420,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',NO,Yes,NA,NA,NA +FLUID INBOUND,UL20-040,UL20-8,Powered-Belted,HSQ,420,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',NO,Yes,NA,NA,NA +FLUID INBOUND,UL20-045,UL20-9,Powered-Belted,HSQ,420,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',NO,Yes,NA,NA,NA +FLUID INBOUND,UL2-005,UL2-1,NA,Destuffit,-,-,-,-,AMZ PROVIDED,-,-,-,-,-,-,-,-,-,-,- +FLUID INBOUND,UL20-050,UL2-2,Powered-Belted,HSQ,420,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',NO,Yes,NA,NA,NA +FLUID INBOUND,UL20-055,UL2-3,Powered-Strip Belt,SPUR - 30 DEG,420,RH,460/3/60,25,2,Yes,NO,NSL-11ESBV,NA,12.00'',12'',NO,YES,NA,NA,NA +FLUID INBOUND,UL2-010,UL2-4,NA,CBC,-,-,-,-,AMZ PROVIDED,-,-,-,-,-,-,-,-,-,-,- +FLUID INBOUND,UL2-015,UL2-5,Powered-Belted,HSS,280,RH,460/3/60,25,5,Yes,NO,APH150MFOXLN,NA,12.00'',,Y,Y,NA,NA,NA +FLUID INBOUND,UL2-020,UL2-6,Powered-Belted,HSS,280,RH,460/3/60,25,5,Yes,NO,APH150MFOXLN,NA,12.00'',,y,Y,NA,NA,NA +FLUID INBOUND,UL2-025,UL2-7,Powered-Belted,CURVE - 30 DEG,280,RH,460/3/60,25,2,Yes,NO,Forbo GSTR,NA,12.00'',,N,Y,NA,NA,NA +FLUID INBOUND,UL2-030,UL2-8,Powered-Belted,HSQ,420,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',,N,Yes,NA,NA,NA +FLUID INBOUND,UL2-035,UL2-9,Powered-Belted,HSQ,420,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',,N,Yes,NA,NA,NA +FLUID INBOUND,UL2-040,UL2-10,Powered-Belted,HSQ,420,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',,N,Yes,NA,NA,NA +FLUID INBOUND,UL2-045,UL2-11,Powered-Belted,HSQ,420,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',,N,Yes,NA,NA,NA +FLUID INBOUND,UL2-050,UL2-12,Powered-Strip Belt,SPUR - 30 DEG,420,LH,460/3/60,25,2,Yes,NO,NSL-11ESBV,NA,12.00'',,N,Y,NA,NA,NA +FLUID INBOUND,UL21-005,UL21-1,NA,Destuffit,-,-,-,-,AMZ PROVIDED,-,-,-,-,-,-,-,-,-,-,- +FLUID INBOUND,UL21-010,UL21-2,NA,CBC,-,-,-,-,AMZ PROVIDED,-,-,-,-,-,-,-,-,-,-,- +FLUID INBOUND,UL21-015,UL21-3,Powered-Belted,HSS,280,LH,460/3/60,25,5,Yes,NO,APH150MFOXLN,NA,12.00'',12'',NO,YES,NA,NA,NA +FLUID INBOUND,UL21-020,UL21-4,Powered-Belted,HSS,280,LH,460/3/60,25,5,Yes,NO,APH150MFOXLN,NA,12.00'',12'',YES,YES,NA,NA,NA +FLUID INBOUND,UL21-025,UL21-5,Powered-Belted,CURVE - 60 DEG,280,LH,460/3/60,25,5,Yes,NO,Forbo GSTR,NA,12.00'',12'',NO,YES,NA,NA,NA +FLUID INBOUND,UL21-030,UL21-6,Powered-Belted,HSQ,280,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',NO,Yes,NA,NA,NA +FLUID INBOUND,UL21-035,UL21-7,Powered-Belted,HSQ,300,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',NO,Yes,NA,NA,NA +FLUID INBOUND,UL21-040,UL21-8,Powered-Belted,HSQ,300,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',NO,Yes,NA,NA,NA +FLUID INBOUND,UL21-045,UL21-9,Powered-Belted,HSQ,300,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',NO,Yes,NA,NA,NA +FLUID INBOUND,UL21-050,UL21-10,Powered-Belted,HSQ,300,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',NO,Yes,NA,NA,NA +FLUID INBOUND,UL21-055,UL21-11,Powered-Belted,HSS-HD,280,LH,460/3/60,25,7.5,Yes,NO,RPH3200BXB-FR,NA,12.00'',12'',NO,YES,NA,NA,NA +FLUID INBOUND,UL21-060,UL21-12,Powered-Belted,CURVE - 60 DEG,280,RH,460/3/60,25,5,Yes,NO,Forbo GSTR,NA,12.00'',12'',NO,YES,NA,NA,NA +FLUID INBOUND,UL21-065,UL21-13,Powered-Belted,HSS,280,RH,460/3/60,25,2,Yes,NO,APH150MFOXLN,NA,12.00'',12'',NO,YES,NA,NA,NA +FLUID INBOUND,UL21-070A,UL21-14A,Powered - Roller,ALIGNER,300,LH,460/3/60,25,3,Yes,NO,NA,2.50'',12.00'',12'',NO,YES,NA,NA,NA +FLUID INBOUND,UL21-070B,UL21-14B,Powered - Roller,ALIGNER,300,LH,460/3/60,25,3,Yes,NO,NA,2.50'',12.00'',12'',NO,YES,NA,NA,NA +FLUID INBOUND,UL21-075,UL21-15,Powered-Belted,HSS,280,RH,460/3/60,25,2,Yes,NO,APH150MFOXLN,NA,12.00'',12'',NO,YES,NA,NA,NA +FLUID INBOUND,UL21-080,UL21-16,Powered-Belted,HSS,280,RH,460/3/60,25,2,Yes,NO,APH150MFOXLN,NA,12.00'',12'',NO,YES,NA,NA,NA +FLUID INBOUND,UL21-085,UL21-17,Powered - Roller,FLOW SPLITTER,280,RH,460/3/60,25,5,Yes,NO,NA,NA,12.00'',12'',NO,YES,NA,NA,NA +FLUID INBOUND,UL21-090,UL21-18,Powered-Belted,HSS,420,RH,460/3/60,25,3,Yes,NO,APH150MFOXLN,NA,12.00'',12'',NO,YES,NA,NA,NA +FLUID INBOUND,UL21-095,UL21-19,Powered-Belted,HSQ,420,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',NO,Yes,NA,NA,NA +FLUID INBOUND,UL21-100,UL21-20,Powered-Belted,HSQ,420,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',NO,Yes,NA,NA,NA +FLUID INBOUND,UL21-105,UL21-21,Powered-Belted,HSQ,420,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',NO,Yes,NA,NA,NA +FLUID INBOUND,UL21-110,UL21-22,Powered-Belted,CURVE - 60 DEG,420,RH,460/3/60,25,5,Yes,NO,Forbo GSTR,NA,12.00'',12'',NO,YES,NA,NA,NA +FLUID INBOUND,UL21-115,UL21-23,Powered-Belted,HSQ,420,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',NO,Yes,NA,NA,NA +FLUID INBOUND,UL21-120,UL21-24,Powered-Strip Belt,SPUR - 30 DEG,420,LH,460/3/60,25,2,Yes,NO,NSL-11ESBV,NA,12.00'',12'',NO,YES,NA,NA,NA +FLUID INBOUND,UL3-005,UL3-1,Powered-Belted,HSS-HD,120,RH,460/3/60,25,2,Yes,NO,RPH3200BXB-FR,NA,2.00'',36'',Y,Y,NA,NA,NA +FLUID INBOUND,UL3-010,UL3-2,Powered-Belted,HSS,280,LH,460/3/60,25,7.5,Yes,NO,APH150MFOXLN,NA,12.00'',,Y,Y,NA,NA,NA +FLUID INBOUND,UL3-015,UL3-3,Powered-Belted,CURVE - 30 DEG,280,LH,460/3/60,25,2,Yes,NO,Forbo GSTR,NA,12.00'',,N,Y,NA,NA,NA +FLUID INBOUND,UL3-020,UL3-4,Powered-Belted,HSS,280,LH,460/3/60,25,2,Yes,NO,APH150MFOXLN,NA,12.00'',,N,Y,NA,NA,NA +FLUID INBOUND,UL3-025,UL3-5,Powered-Belted,HSQ,420,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',N,Yes,NA,NA,NA +FLUID INBOUND,UL3-030,UL3-6,Powered-Belted,HSQ,420,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',N,Yes,NA,NA,NA +FLUID INBOUND,UL3-035,UL3-7,Powered-Belted,HSQ,420,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',N,Yes,NA,NA,NA +FLUID INBOUND,UL3-040,UL3-8,Powered-Belted,HSQ,420,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',N,Yes,NA,NA,NA +FLUID INBOUND,UL3-045,UL3-9,Powered-Strip Belt,SPUR - 30 DEG,420,LH,460/3/60,25,2,Yes,NO,NSL-11ESBV,NA,12.00'',,N,Y,NA,NA,NA +FLUID INBOUND,UL4-005,UL4-1,NA,Destuffit,-,-,-,-,AMZ PROVIDED,-,-,-,-,-,-,-,-,-,-,- +FLUID INBOUND,UL4-010,UL4-2,NA,CBC,-,-,-,-,AMZ PROVIDED,-,-,-,-,-,-,-,-,-,-,- +FLUID INBOUND,UL4-015,UL4-3,Powered-Belted,HSS,280,RH,460/3/60,25,5,Yes,NO,APH150MFOXLN,NA,12.00'',,Y,Y,NA,NA,NA +FLUID INBOUND,UL4-020,UL4-4,Powered-Belted,HSS,280,RH,460/3/60,25,5,Yes,NO,APH150MFOXLN,NA,12.00'',,y,Y,NA,NA,NA +FLUID INBOUND,UL4-025,UL4-5,Powered-Belted,HSQ,300,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',N,Yes,NA,NA,NA +FLUID INBOUND,UL4-030,UL4-6,Powered-Belted,HSQ,300,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',N,Yes,NA,NA,NA +FLUID INBOUND,UL4-035,UL4-7,Powered-Belted,HSQ,300,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',N,Yes,NA,NA,NA +FLUID INBOUND,UL4-040,UL4-8,Powered-Belted,HSQ,300,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',N,Yes,NA,NA,NA +FLUID INBOUND,UL4-045,UL4-9,Powered-Belted,HSS-HD,280,RH,460/3/60,25,5,Yes,NO,RPH3200BXB-FR,NA,12.00'',12'',N,Y,NA,NA,NA +FLUID INBOUND,UL4-050A,UL4-10A,Powered - Roller,ALIGNER,280,LH,460/3/60,25,3,Yes,NO,NA,2.50'',12.00'',12'',N,Y,NA,NA,NA +FLUID INBOUND,UL4-050B,UL4-10B,Powered - Roller,ALIGNER,280,LH,460/3/60,25,3,Yes,NO,NA,2.50'',12'',12'',N,Y,NA,NA,NA +FLUID INBOUND,UL4-055,UL4-11,Powered-Belted,HSS,280,LH,460/3/60,25,2,Yes,NO,APH150MFOXLN,NA,12.00'',,N,Y,NA,NA,NA +FLUID INBOUND,UL4-060,UL4-12,Powered-Belted,HSS,280,LH,460/3/60,25,2,Yes,NO,APH150MFOXLN,NA,12.00'',36'',N,Y,NA,NA,NA +FLUID INBOUND,UL4-065,UL4-13,Powered - Roller,FLOW SPLITTER,280,LH,460/3/60,25,5,Yes,NO,NA,NA,12'',12'',N,Y,NA,NA,NA +FLUID INBOUND,UL4-070,UL4-14,Powered-Belted,HSS,420,LH,460/3/60,25,2,Yes,NO,APH150MFOXLN,NA,12.00'',36'',N,Y,NA,NA,NA +FLUID INBOUND,UL4-075,UL4-15,Powered-Belted,HSQ,420,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',N,Yes,NA,NA,NA +FLUID INBOUND,UL4-080,UL4-16,Powered-Belted,HSQ,420,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',N,Yes,NA,NA,NA +FLUID INBOUND,UL4-085,UL4-17,Powered-Belted,HSQ,420,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',N,Yes,NA,NA,NA +FLUID INBOUND,UL4-090,UL4-18,Powered-Belted,CURVE - 60 DEG,420,RH,460/3/60,25,5,Yes,NO,Forbo GSTR,NA,12.00'',,N,Y,NA,NA,NA +FLUID INBOUND,UL4-095,UL4-19,Powered-Belted,HSQ,420,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',N,Yes,NA,NA,NA +FLUID INBOUND,UL4-100,UL4-20,Powered-Strip Belt,SPUR - 30 DEG,420,LH,460/3/60,25,2,Yes,NO,NSL-11ESBV,NA,12.00'',,N,Y,NA,NA,NA +FLUID INBOUND,UL5-005,UL5-1,NA,Destuffit,-,-,-,-,AMZ PROVIDED,-,-,-,-,-,-,-,-,-,-,- +FLUID INBOUND,UL5-010,UL5-2,NA,CBC,-,-,-,-,AMZ PROVIDED,-,-,-,-,-,-,-,-,-,-,- +FLUID INBOUND,UL5-015,UL5-3,Powered-Belted,HSS,280,LH,460/3/60,25,5,Yes,NO,APH150MFOXLN,NA,12.00'',,Y,Y,NA,NA,NA +FLUID INBOUND,UL5-020,UL5-4,Powered-Belted,HSS,280,LH,460/3/60,25,5,Yes,NO,APH150MFOXLN,NA,12.00'',,y,Y,NA,NA,NA +FLUID INBOUND,UL5-025,UL5-5,Powered-Belted,CURVE - 30 DEG,280,LH,460/3/60,25,2,Yes,NO,Forbo GSTR,NA,12.00'',,N,Y,NA,NA,NA +FLUID INBOUND,UL5-030,UL5-6,Powered-Belted,HSQ,420,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',N,Yes,NA,NA,NA +FLUID INBOUND,UL5-035,UL5-7,Powered-Belted,HSQ,420,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',N,Yes,NA,NA,NA +FLUID INBOUND,UL5-040,UL5-8,Powered-Belted,HSQ,420,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',N,Yes,NA,NA,NA +FLUID INBOUND,UL5-045,UL5-9,Powered-Belted,HSQ,420,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',N,Yes,NA,NA,NA +FLUID INBOUND,UL5-050,UL5-10,Powered-Strip Belt,SPUR - 30 DEG,420,LH,460/3/60,25,2,Yes,NO,NSL-11ESBV,NA,12'',,,,NA,NA,NA +FLUID INBOUND,UL6-005,UL6-1,Powered-Belted,HSS-HD,120,LH,460/3/60,25,2,Yes,NO,RPH3200BXB-FR,NA,12.00'',36'',Y,Yes,NA,NA,NA +FLUID INBOUND,UL6-010,UL6-2,Powered-Belted,HSS,280,LH,460/3/60,25,7.5,Yes,NO,APH150MFOXLN,NA,12.00'',,Y,Yes,NA,NA,NA +FLUID INBOUND,UL6-015,UL6-3,Powered-Belted,CURVE - 30 DEG,280,LH,460/3/60,25,2,Yes,NO,Forbo GSTR,NA,12.00'',,N,Yes,NA,NA,NA +FLUID INBOUND,UL6-020,UL6-4,Powered-Belted,HSS,280,LH,460/3/60,25,2,Yes,NO,APH150MFOXLN,NA,12.00'',,N,Yes,NA,NA,NA +FLUID INBOUND,UL6-025,UL6-5,Powered-Belted,HSQ,420,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',,N,Yes,NA,NA,NA +FLUID INBOUND,UL6-030,UL6-6,Powered-Belted,HSQ,420,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',,N,Yes,NA,NA,NA +FLUID INBOUND,UL6-035,UL6-7,Powered-Belted,HSQ,420,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',,N,Yes,NA,NA,NA +FLUID INBOUND,UL6-040,UL6-8,Powered-Belted,HSQ,420,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',,N,Yes,NA,NA,NA +FLUID INBOUND,UL6-045,UL6-9,Powered-Strip Belt,SPUR - 30 DEG,420,LH,460/3/60,25,2,Yes,NO,NSL-11ESBV,NA,12.00'',,N,Yes,NA,NA,NA +FLUID INBOUND,UL7-005,UL7-1,NA,Destuffit,-,-,-,-,AMZ PROVIDED,-,-,-,-,-,-,-,-,-,-,- +FLUID INBOUND,UL7-010,UL7-2,NA,CBC,-,-,-,-,AMZ PROVIDED,-,-,-,-,-,-,-,-,-,-,- +FLUID INBOUND,UL7-015,UL7-3,Powered-Belted,HSS,280,LH,460/3/60,25,5,Yes,NO,APH150MFOX,NA,12.00'',,Yes,Yes,NA,NA,NA +FLUID INBOUND,UL7-020,UL7-4,Powered-Belted,HSS,280,LH,460/3/60,25,5,Yes,NO,APH150MFOX,NA,12.00'',,Yes,Yes,NA,NA,NA +FLUID INBOUND,UL7-025,UL7-5,Powered-Belted,HSQ,300,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',,No,Yes,NA,NA,NA +FLUID INBOUND,UL7-030,UL7-6,Powered-Belted,HSQ,300,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',,No,Yes,NA,NA,NA +FLUID INBOUND,UL7-035,UL7-7,Powered-Belted,HSQ,300,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',,No,Yes,NA,NA,NA +FLUID INBOUND,UL7-040,UL7-8,Powered-Belted,HSQ,300,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',,No,Yes,NA,NA,NA +FLUID INBOUND,UL7-045,UL7-9,Powered-Belted,HSS-HD,280,RH,460/3/60,25,5,Yes,NO,RPH3200BXB-FR,NA,12.00'',,No,Yes,NA,NA,NA +FLUID INBOUND,UL7-050A,UL7-10A,Powered - Roller,ALIGNER,280,LH,460/3/60,25,3,Yes,NO,NA,2.50'',12'',,No,Yes,NA,NA,NA +FLUID INBOUND,UL7-050B,UL7-10B,Powered - Roller,ALIGNER,280,LH,460/3/60,25,3,Yes,NO,NA,2.50'',12'',,No,Yes,NA,NA,NA +FLUID INBOUND,UL7-055,UL7-11,Powered-Belted,HSS,280,RH,460/3/60,25,2,Yes,NO,APH150MFOX,NA,12.00'',,No,Yes,NA,NA,NA +FLUID INBOUND,UL7-060,UL7-12,Powered-Belted,HSS,280,RH,460/3/60,25,2,Yes,NO,APH150MFOX,NA,12.00'',36'',No,Yes,NA,NA,NA +FLUID INBOUND,UL7-065,UL7-13,Powered - Roller,FLOW SPLITTER,280,RH,460/3/60,25,5,Yes,NO,NA,NA,12'',,No,Yes,NA,NA,NA +FLUID INBOUND,UL7-070,UL7-14,Powered-Belted,HSS,420,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV,NA,12.00'',36'',No,Yes,NA,NA,NA +FLUID INBOUND,UL7-075,UL7-15,Powered-Belted,HSQ,420,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',,No,Yes,NA,NA,NA +FLUID INBOUND,UL7-080,UL7-16,Powered-Belted,HSQ,420,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',,No,Yes,NA,NA,NA +FLUID INBOUND,UL7-085,UL7-17,Powered-Belted,HSQ,420,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',,No,Yes,NA,NA,NA +FLUID INBOUND,UL7-090,UL7-18,Powered-Belted,CURVE - 60 DEG,420,RH,460/3/60,25,5,Yes,NO,Forbo GSTR,NA,12.00'',,No,Yes,NA,NA,NA +FLUID INBOUND,UL7-095,UL7-19,Powered-Belted,HSQ,420,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',,No,Yes,NA,NA,NA +FLUID INBOUND,UL7-100,UL7-20,Powered-Strip Belt,SPUR - 30 DEG,420,LH,460/3/60,25,2,Yes,NO,NSL-11ESBV,NA,12.00'',,No,Yes,NA,NA,NA +FLUID INBOUND,UL8-005,UL8-1,Powered-Belted,HSS-HD,120,LH,460/3/60,25,2,Yes,NO,RPH3200BXB-FR,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL8-010,UL8-2,Powered-Belted,HSS,280,LH,460/3/60,25,7.5,Yes,NO,APH150MFOXLN,NA,12.00'',12'',Yes,Yes,NA,NA,NA +FLUID INBOUND,UL8-015,UL8-3,Powered-Belted,HSS,280,LH,460/3/60,25,2,Yes,NO,APH150MFOXLN,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL8-020,UL8-4,Powered-Belted,CURVE - 30 DEG,280,LH,460/3/60,25,2,Yes,NO,Forbo GSTR,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL8-025,UL8-5,Powered-Belted,HSQ,420,RH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL8-030,UL8-6,Powered-Belted,HSQ,420,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL8-035,UL8-7,Powered-Belted,HSQ,420,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL8-040,UL8-8,Powered-Belted,HSQ,420,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL8-045,UL8-9,Powered-Strip Belt,SPUR - 30 DEG,420,LH,460/3/60,25,2,Yes,NO,NSL-11ESBV,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL9-005,UL9-1,NA,Destuffit,-,-,-,-,AMZ PROVIDED,-,-,-,-,-,-,-,-,-,-,- +FLUID INBOUND,UL9-010,UL9-2,NA,CBC,-,-,-,-,AMZ PROVIDED,-,-,-,-,-,-,-,-,-,-,- +FLUID INBOUND,UL9-015,UL9-3,Powered-Belted,HSS,280,LH,460/3/60,25,5,Yes,NO,APH150MFOXLN,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL9-020,UL9-4,Powered-Belted,HSS,280,LH,460/3/60,25,5,Yes,NO,APH150MFOXLN,NA,12.00'',12'',Yes,Yes,NA,NA,NA +FLUID INBOUND,UL9-025,UL9-5,Powered-Belted,CURVE - 30 DEG,280,LH,460/3/60,25,2,Yes,NO,Forbo GSTR,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL9-030,UL9-6,Powered-Belted,HSS,280,LH,460/3/60,25,2,Yes,NO,APH150MFOXLN,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL9-035,UL9-7,Powered-Belted,HSQ,420,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL9-040,UL9-8,Powered-Belted,HSQ,420,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL9-045,UL9-9,Powered-Belted,HSQ,420,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL9-050,UL9-10,Powered-Belted,HSQ,420,LH,460/3/60,25,3,Yes,NO,NSL-11ESBV13,NA,12.00'',12'',No,Yes,NA,NA,NA +FLUID INBOUND,UL9-055,UL9-11,Powered-Strip Belt,SPUR - 30 DEG,420,LH,460/3/60,25,2,Yes,NO,NSL-11ESBV,NA,12.00'',12'',No,Yes,NA,NA,NA +BULK INBOUND NORTH,ULGL1-005,ULC8-1,Shuttle Tipper,Tipper,NA,NA,460/3/60,25,2,N,NA,NA,NA,NA,NA,NA,NA,NA,NA, +BULK INBOUND NORTH,ULGL1-010-CH,ULC8-2CH,Straight Chute,Chute,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',24.00'',NA,NA,NA,NA, +BULK INBOUND NORTH,ULGL1-015,ULC8-3,Powered-Belted,Level Belt,80,LH,460/3/60,25,2,Y,N,APH150MFOXLN,NA,24.00'',-,N,Y,NA,NA, +BULK INBOUND NORTH,ULGL2-005,ULC7-1,Shuttle Tipper,Tipper,NA,NA,460/3/60,25,2,N,NA,NA,NA,NA,NA,NA,NA,NA,NA, +BULK INBOUND NORTH,ULGL2-010-CH,ULC7-2CH,Straight Chute,Chute,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',24.00'',NA,NA,NA,NA, +BULK INBOUND NORTH,ULGL2-015,ULC7-3,Powered-Belted,Level Belt,80,LH,460/3/60,25,2,Y,N,APH150MFOXLN,NA,24.00'',-,N,Y,NA,NA, +BULK INBOUND NORTH,ULGL3-005,ULC6-1,Shuttle Tipper,Tipper,NA,NA,460/3/60,25,2,N,NA,NA,NA,NA,NA,NA,NA,NA,NA, +BULK INBOUND NORTH,ULGL3-010-CH,ULC6-2CH,Straight Chute,Chute,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',24.00'',NA,NA,NA,NA, +BULK INBOUND NORTH,ULGL3-015,ULC6-3,Powered-Belted,Level Belt,80,LH,460/3/60,25,2,Y,N,APH150MFOXLN,NA,24.00'',-,N,Y,NA,NA, +BULK INBOUND NORTH,ULGL4-005,ULC5-1,Shuttle Tipper,Tipper,NA,NA,460/3/60,25,2,N,NA,NA,NA,NA,NA,NA,NA,NA,NA, +BULK INBOUND NORTH,ULGL4-010-CH,UL5C-2CH,Straight Chute,Chute,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',24.00'',NA,NA,NA,NA, +BULK INBOUND NORTH,ULGL4-015,ULC5-3,Powered-Belted,Level Belt,80,LH,460/3/60,25,2,Y,N,APH150MFOXLN,NA,24.00'',-,N,Y,NA,NA, +BULK INBOUND SOUTH,ULGL5-005,ULC1-1,Shuttle Tipper,Tipper,NA,NA,460/3/60,25,2,N,NA,NA,NA,NA,NA,NA,NA,NA,NA, +BULK INBOUND SOUTH,ULGL5-010-CH,ULC1-2CH,Straight Chute,Chute,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',24.00'',NA,NA,NA,NA, +BULK INBOUND SOUTH,ULGL5-015,ULC1-3,Powered-Belted,Level Belt,80,LH,460/3/60,25,2,Y,N,APH150MFOXLN,NA,24.00'',-,N,Y,NA,NA, +BULK INBOUND SOUTH,ULGL6-005,ULC2-1,Shuttle Tipper,Tipper,NA,NA,460/3/60,25,2,N,NA,NA,NA,NA,NA,NA,NA,NA,NA, +BULK INBOUND SOUTH,ULGL6-010-CH,ULC2-2CH,Straight Chute,Chute,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',24.00'',NA,NA,NA,NA, +BULK INBOUND SOUTH,ULGL6-015,ULC2-3,Powered-Belted,Level Belt,80,LH,460/3/60,25,2,Y,N,APH150MFOXLN,NA,24.00'',-,N,Y,NA,NA, +BULK INBOUND SOUTH,ULGL7-005,ULC3-1,Shuttle Tipper,Tipper,NA,NA,460/3/60,25,2,N,NA,NA,NA,NA,NA,NA,NA,NA,NA, +BULK INBOUND SOUTH,ULGL7-010-CH,ULC3-2CH,Straight Chute,Chute,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',24.00'',NA,NA,NA,NA, +BULK INBOUND SOUTH,ULGL7-015,ULC3-3,Powered-Belted,Level Belt,80,LH,460/3/60,25,2,Y,N,APH150MFOXLN,NA,24.00'',-,N,Y,NA,NA, +BULK INBOUND SOUTH,ULGL8-005,ULC4-1,Shuttle Tipper,Tipper,NA,NA,460/3/60,25,2,N,NA,NA,NA,NA,NA,NA,NA,NA,NA, +BULK INBOUND SOUTH,ULGL8-010-CH,ULC4-2CH,Straight Chute,Chute,NA,NA,NA,25,NA,NA,NA,NA,NA,24.00'',24.00'',NA,NA,NA,NA, +BULK INBOUND SOUTH,ULGL8-015,ULC4-3,Powered-Belted,Level Belt,80,LH,460/3/60,25,2,Y,N,APH150MFOXLN,NA,24.00'',-,N,Y,NA,NA, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,,,, diff --git a/projects/MTN6/pdfs/MTN6_SYSDL-MCM01.pdf b/projects/MTN6/pdfs/MTN6_SYSDL-MCM01.pdf new file mode 100644 index 0000000..817cad6 Binary files /dev/null and b/projects/MTN6/pdfs/MTN6_SYSDL-MCM01.pdf differ diff --git a/projects/MTN6/pdfs/MTN6_SYSDL-MCM02.pdf b/projects/MTN6/pdfs/MTN6_SYSDL-MCM02.pdf new file mode 100644 index 0000000..a137ce6 Binary files /dev/null and b/projects/MTN6/pdfs/MTN6_SYSDL-MCM02.pdf differ diff --git a/projects/MTN6/pdfs/MTN6_SYSDL-MCM03.pdf b/projects/MTN6/pdfs/MTN6_SYSDL-MCM03.pdf new file mode 100644 index 0000000..37b7690 Binary files /dev/null and b/projects/MTN6/pdfs/MTN6_SYSDL-MCM03.pdf differ diff --git a/projects/MTN6/pdfs/MTN6_SYSDL-MCM04.pdf b/projects/MTN6/pdfs/MTN6_SYSDL-MCM04.pdf new file mode 100644 index 0000000..4b99ec7 Binary files /dev/null and b/projects/MTN6/pdfs/MTN6_SYSDL-MCM04.pdf differ diff --git a/projects/MTN6/pdfs/MTN6_SYSDL-MCM05.pdf b/projects/MTN6/pdfs/MTN6_SYSDL-MCM05.pdf new file mode 100644 index 0000000..e576ada Binary files /dev/null and b/projects/MTN6/pdfs/MTN6_SYSDL-MCM05.pdf differ diff --git a/projects/MTN6/pdfs/MTN6_SYSDL-MCM06.pdf b/projects/MTN6/pdfs/MTN6_SYSDL-MCM06.pdf new file mode 100644 index 0000000..99aaa24 Binary files /dev/null and b/projects/MTN6/pdfs/MTN6_SYSDL-MCM06.pdf differ diff --git a/projects/MTN6/pdfs/MTN6_SYSDL-MCM07.pdf b/projects/MTN6/pdfs/MTN6_SYSDL-MCM07.pdf new file mode 100644 index 0000000..c24023d Binary files /dev/null and b/projects/MTN6/pdfs/MTN6_SYSDL-MCM07.pdf differ diff --git a/projects/MTN6/project_info.txt b/projects/MTN6/project_info.txt new file mode 100644 index 0000000..00b7d3d --- /dev/null +++ b/projects/MTN6/project_info.txt @@ -0,0 +1,2 @@ +ProjectName: MTN6 +RepoURL: http://192.168.5.191:3000/LCI/MTN6.git diff --git a/projects/MTN6/repo b/projects/MTN6/repo new file mode 160000 index 0000000..456de12 --- /dev/null +++ b/projects/MTN6/repo @@ -0,0 +1 @@ +Subproject commit 456de12cca56c09bc1881660b163ac3b5dff593a diff --git a/static/css/style.css b/static/css/style.css index 02d3eb9..e898922 100644 --- a/static/css/style.css +++ b/static/css/style.css @@ -28,6 +28,15 @@ body { padding: 20px; padding-bottom: 60px; /* Account for status bar */ } margin: 0 auto; /* Center the canvas */ cursor: pointer; /* Indicate clickable */ } + +/* NEW: Style for overall charts */ +.overall-chart-canvas { + max-width: 300px; /* Adjust as needed */ + max-height: 300px; /* Adjust as needed */ + margin: 0 auto; /* Center the canvas */ + cursor: pointer; /* Indicate clickable */ +} + #scada-panels-progress, #drawing-panels-progress { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); /* Responsive grid */ diff --git a/static/js/api.js b/static/js/api.js new file mode 100644 index 0000000..63450ff --- /dev/null +++ b/static/js/api.js @@ -0,0 +1,149 @@ +// --- API Interaction Functions --- + +/** + * Makes a fetch request and handles common scenarios like JSON parsing and HTTP errors. + * @param {string} url - The URL to fetch. + * @param {object} options - Fetch options (method, headers, body, etc.). + * @returns {Promise} - A promise that resolves with the parsed JSON data. + * @throws {Error} - Throws an error if the fetch fails or the response is not ok. + */ +async function fetchApi(url, options = {}) { + try { + const response = await fetch(url, options); + + // Try to parse JSON regardless of status code for potential error details + let data = {}; + try { + // Handle potential non-JSON responses (e.g., empty body on 204) + const text = await response.text(); + if (text) { + data = JSON.parse(text); + } else { + data = { success: response.ok, message: response.statusText }; // Basic success/failure if body empty + } + } catch (e) { + console.warn(`Could not parse JSON response from ${url}. Status: ${response.status}`); + // If JSON parsing fails, still check the HTTP status + if (!response.ok) { + throw new Error(options.errorMessage || `Request failed with status ${response.status}. No details available.`); + } + // If response was OK but JSON failed, might be acceptable depending on endpoint + // Or return a default success object if appropriate + data = { success: true, message: "Operation successful, but response was not valid JSON." }; + } + + if (!response.ok) { + // Use the message from parsed JSON if available, otherwise default error + throw new Error(data.message || options.errorMessage || `Request failed with status ${response.status}`); + } + + // Ensure the returned data always has a `success` property if not present + if (typeof data.success === 'undefined') { + data.success = true; // Assume success if HTTP status was OK and no success flag found + } + + return data; + } catch (error) { + console.error(`API Error (${options.method || 'GET'} ${url}):`, error); + // Re-throw the error so the calling function can handle it (e.g., display to user) + throw error; // Keep original error type/message if possible + } +} + +// --- Specific API Call Functions --- + +/** + * Fetches the list of PDF files for a given project. + * @param {string} projectName - The name of the project. + * @returns {Promise} - The API response (e.g., { success: true, files: [...] }). + */ +async function apiListPdfs(projectName) { + return fetchApi(`/list_pdfs/${encodeURIComponent(projectName)}`, { + errorMessage: 'Failed to list PDF files' + }); +} + +/** + * Deletes a specific PDF file from a project. + * @param {string} projectName - The name of the project. + * @param {string} filename - The name of the PDF file to delete. + * @returns {Promise} - The API response (e.g., { success: true, message: "..." }). + */ +async function apiDeletePdf(projectName, filename) { + return fetchApi(`/delete_pdf/${encodeURIComponent(projectName)}`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ filename: filename }), + errorMessage: 'Failed to delete PDF file' + }); +} + +/** + * Uploads one or more PDF files to a project. + * @param {string} projectName - The name of the project. + * @param {FormData} formData - The FormData object containing the files. + * @returns {Promise} - The API response (e.g., { success: true, message: "..." }). + */ +async function apiUploadPdfs(projectName, formData) { + return fetchApi(`/upload_pdfs/${encodeURIComponent(projectName)}`, { + method: 'POST', + body: formData, // FormData sets Content-Type automatically + errorMessage: 'File upload failed' + }); +} + +/** + * Triggers a background analysis for a specific project. + * @param {string} projectName - The name of the project. + * @returns {Promise} - The API response (e.g., { success: true, message: "..." }). + */ +async function apiTriggerAnalysis(projectName) { + return fetchApi(`/trigger_analysis/${encodeURIComponent(projectName)}`, { + method: 'POST', + errorMessage: 'Failed to trigger analysis' + }); +} + +/** + * Adds a new project. + * @param {FormData} formData - The FormData object containing project details and files. + * @returns {Promise} - The API response (e.g., { success: true, message: "..." }). + */ +async function apiAddProject(formData) { + return fetchApi('/add_project', { + method: 'POST', + body: formData, + errorMessage: 'Failed to add project' + }); +} + +/** + * Deletes an entire project. + * @param {string} projectName - The name of the project to delete. + * @returns {Promise} - The API response (e.g., { success: true, message: "..." }). + */ +async function apiDeleteProject(projectName) { + return fetchApi(`/delete_project/${encodeURIComponent(projectName)}`, { + method: 'POST', // Backend expects POST + errorMessage: 'Failed to delete project' + }); +} + +/** + * Uploads and overwrites the manifest file for a project. + * @param {string} projectName - The name of the project. + * @param {FormData} formData - The FormData object containing the manifest file. + * @returns {Promise} - The API response (e.g., { success: true, message: "..." }). + */ +async function apiUploadManifest(projectName, formData) { + return fetchApi(`/upload_manifest/${encodeURIComponent(projectName)}`, { + method: 'POST', + body: formData, + errorMessage: 'Failed to upload manifest' + }); +} + +// --- Export (if using modules in the future) --- +// export { apiListPdfs, apiDeletePdf, apiUploadPdfs, apiTriggerAnalysis, apiAddProject, apiDeleteProject, apiUploadManifest }; \ No newline at end of file diff --git a/static/js/chartManager.js b/static/js/chartManager.js new file mode 100644 index 0000000..de78bf0 --- /dev/null +++ b/static/js/chartManager.js @@ -0,0 +1,274 @@ +// --- Chart Management --- + +// Keep chart instances internal to this module +let chartInstancesScada = {}; +let chartInstancesDrawing = {}; + +// --- Chart Configurations --- +const scadaChartLabels = ['Found in SCADA', 'Not Found in SCADA']; +// const scadaChartColors = ['rgb(13, 110, 253)', 'rgb(220, 53, 69)']; // Removed +const drawingChartLabels = ['Found in Drawing', 'Not Found in Drawing']; +// const drawingChartColors = ['rgb(25, 135, 84)', 'rgb(220, 53, 69)']; // Removed + +// Unified colors: Green for Found, Red for Not Found +const commonChartColors = ['rgb(25, 135, 84)', 'rgb(220, 53, 69)']; + +// --- Chart Click Handler --- +// Note: This needs access to showDetailsModal, which might need to be passed or refactored. +function handleChartClick(event, elements, chart, context) { + if (elements.length > 0 && selectedProjectName) { // Relies on global selectedProjectName for now + const clickedElementIndex = elements[0].index; + const isOverallChart = chart.canvas.id.startsWith('overall-'); + const identifier = isOverallChart ? '__overall__' : chart.canvas.id.replace(`chart-${context}-`, ''); + const categoryType = clickedElementIndex === 0 ? 'found' : 'notFound'; + + // TODO: Refactor showDetailsModal call - currently global + // showDetailsModal(selectedProjectName, identifier, categoryType, context); + // Call modalManager function instead + modalManagerShowDetails(selectedProjectName, identifier, categoryType, context); + } +} + +// --- Generic Helper to create chart config --- +// Note: Relies on global currentProjectData and selectedProjectName for tooltips +function createChartConfig(chartCounts, total, context, identifier, projectName) { + const labels = context === 'scada' ? scadaChartLabels : drawingChartLabels; + // const colors = context === 'scada' ? scadaChartColors : drawingChartColors; // Use common colors instead + const datasetLabel = context === 'scada' ? 'SCADA Match' : 'Drawing Match'; + + // Retrieve the correct project's progress data for tooltip calculation + // TODO: Find a way to access state without global reliance (e.g., pass data in) + const projectProgress = (currentProjectData[projectName] && currentProjectData[projectName].progress) ? currentProjectData[projectName].progress : {}; + + return { + type: 'pie', + data: { + labels: labels, + datasets: [{ + label: datasetLabel, + data: chartCounts, + backgroundColor: commonChartColors, // Use unified colors + hoverOffset: 4 + }] + }, + options: { + responsive: true, + maintainAspectRatio: false, + onClick: (event, elements, chart) => handleChartClick(event, elements, chart, context), // Pass context + plugins: { + legend: { display: false }, + tooltip: { + callbacks: { + label: function(ctxTooltip) { + let label = ctxTooltip.label || ''; + if (label) label += ': '; + const value = ctxTooltip.parsed; + if (value !== null) label += value; + // Use total passed for panel charts, access stored data for overall + const chartTotal = (identifier === 'overall' && projectProgress.overall) + ? projectProgress.overall.total_csv + : total; + if (chartTotal && chartTotal > 0 && value !== null) { + label += ` (${((value / chartTotal) * 100).toFixed(1)}%)`; + } + return label; + } + } + } + } + } + }; +} + +// --- Update Functions --- + +/** + * Updates or creates the overall progress chart for a context (scada/drawing). + * @param {string} context - 'scada' or 'drawing' + * @param {string} canvasId - The ID of the canvas element. + * @param {Array} chartCounts - The data array for the chart (e.g., [found, notFound]). + * @param {number} total - The total number of items for percentage calculation. + * @param {boolean} isVisible - Whether the section containing the chart is currently visible. + */ +function updateOverallChart(context, canvasId, chartCounts, total, isVisible) { + console.log(`[ChartManager] updateOverallChart called for context: ${context}, canvasId: ${canvasId}`); // Log entry + console.log(`[ChartManager] Received chartCounts: ${JSON.stringify(chartCounts)}, total: ${total}`); // Log data + const chartInstances = context === 'scada' ? chartInstancesScada : chartInstancesDrawing; + const chartKey = 'overall'; + // Find the parent container based on context + const parentContainer = context === 'scada' ? uiElements.overallScadaProgress : uiElements.overallDrawingProgress; + console.log(`[ChartManager] Parent container for ${context}:`, parentContainer); // Log container found + + if (!parentContainer) { + console.error(`[ChartManager] Parent container for overall ${context} chart not found.`); + return; + } + + let canvas = document.getElementById(canvasId); + console.log(`[ChartManager] Existing canvas found for ${canvasId}:`, canvas); + + // Check if the found canvas is unusable (zero dimensions) + if (canvas && (canvas.offsetWidth === 0 || canvas.offsetHeight === 0)) { + console.warn(`[ChartManager] Found canvas ${canvasId} has zero dimensions. Removing and recreating.`); + // Destroy the associated Chart.js instance if it exists + if (chartInstances[chartKey]) { + console.log(`[ChartManager] Destroying Chart.js instance for zero-dimension canvas ${canvasId}.`); + chartInstances[chartKey].destroy(); + delete chartInstances[chartKey]; + } + canvas.remove(); // Remove the faulty canvas element + canvas = null; // Force recreation below + } + + // If canvas doesn't exist (or was removed), create and append it + if (!canvas) { + console.log(`[ChartManager] Canvas ${canvasId} needs creation.`); + canvas = document.createElement('canvas'); + canvas.id = canvasId; + canvas.className = 'overall-chart-canvas'; + parentContainer.innerHTML = ''; // Clear the container first before adding canvas + parentContainer.appendChild(canvas); + console.log(`[ChartManager] Canvas ${canvasId} created and appended.`); + } + + // Now canvas definitely exists (or we returned early) + if (chartInstances[chartKey]) { + // Update existing chart data if it changed + if (JSON.stringify(chartInstances[chartKey].data.datasets[0].data) !== JSON.stringify(chartCounts)) { + console.log(`Updating overall ${context} chart data.`); + chartInstances[chartKey].data.datasets[0].data = chartCounts; + chartInstances[chartKey].update('none'); // Update without animation + } + } else { // No existing chart instance, create new one + // Create new chart + console.log(`Creating overall ${context} chart.`); + const ctx = canvas.getContext('2d'); + if (ctx) { + chartInstances[chartKey] = new Chart(ctx, createChartConfig(chartCounts, total, context, chartKey, selectedProjectName)); // Relies on global selectedProjectName + } else { + console.error(`[ChartManager] Failed to get 2D context for canvas ${canvasId}.`); + } + } +} + + +/** + * Updates or creates/destroys panel-specific charts for a context. + * @param {string} context - 'scada' or 'drawing' + * @param {HTMLElement} panelsContainer - The container element for panel charts. + * @param {object} panelsData - The progress data object for all panels. + * @param {boolean} isVisible - Whether the section containing the charts is currently visible. + */ +function updatePanelCharts(context, panelsContainer, panelsData, isVisible) { + const chartInstances = context === 'scada' ? chartInstancesScada : chartInstancesDrawing; + const incomingPanelNames = new Set(Object.keys(panelsData || {}).sort()); + const existingInstanceNames = new Set(Object.keys(chartInstances).filter(k => k !== 'overall')); + + if (!isVisible) { + // If section is not visible, destroy all existing panel charts for this context + console.log(`[ChartManager] Destroying hidden panel charts for context: ${context}`); + existingInstanceNames.forEach(panelName => { + if (chartInstances[panelName]) { + chartInstances[panelName].destroy(); + delete chartInstances[panelName]; + } + }); + // Remove any dynamically created chart containers if section is hidden + panelsContainer.querySelectorAll(`.chart-container[id^="chart-container-${context}-"]`).forEach(el => el.remove()); + if (!panelsContainer.querySelector('p')) { // Add placeholder if empty + panelsContainer.innerHTML = '

Panel data hidden.

'; + } + return; // Don't proceed further if the section is hidden + } + + // Clear placeholder/hidden message if we have data and are visible + const placeholder = panelsContainer.querySelector('p'); + if(placeholder) placeholder.remove(); + + // Update/Create charts for incoming panels + if (incomingPanelNames.size > 0) { + incomingPanelNames.forEach(panelName => { + const panel = panelsData[panelName]; + const panelTotal = (panel && panel.total) || 0; + let panelChartCounts = [0, 0]; + + if (panel) { + if (context === 'scada') { + panelChartCounts = [(panel.found_both || 0) + (panel.found_scada_only || 0), (panel.found_drawing_only || 0) + (panel.missing_both || 0)]; + } else { // drawing + panelChartCounts = [(panel.found_both || 0) + (panel.found_drawing_only || 0), (panel.found_scada_only || 0) + (panel.missing_both || 0)]; + } + } + + const chartKey = panelName; + const canvasId = `chart-${context}-${panelName}`; + const containerId = `chart-container-${context}-${panelName}`; + + if (chartInstances[chartKey]) { + // Update existing chart + if (JSON.stringify(chartInstances[chartKey].data.datasets[0].data) !== JSON.stringify(panelChartCounts)) { + chartInstances[chartKey].data.datasets[0].data = panelChartCounts; + // Update tooltip data source if needed (or ensure createChartConfig handles it) + chartInstances[chartKey].update('none'); + } + } else { + // Create new chart element and instance + let container = document.getElementById(containerId); + if (!container) { + console.log(`Creating new ${context} panel elements and chart (visible) for: ${panelName}`); + container = document.createElement('div'); + container.id = containerId; + container.className = 'chart-container'; + container.innerHTML = ` + ${panelName} + + `; + panelsContainer.appendChild(container); + } + + const canvas = document.getElementById(canvasId); + if (canvas) { + const ctx = canvas.getContext('2d'); + chartInstances[chartKey] = new Chart(ctx, createChartConfig(panelChartCounts, panelTotal, context, chartKey, selectedProjectName)); // Relies on global selectedProjectName + } else { + console.error(`Canvas element with ID ${canvasId} not found after creation.`); + } + } + }); + } else { + // No panel data, ensure placeholder is shown + if (!panelsContainer.querySelector('p')) { + panelsContainer.innerHTML = '

No panel data available yet.

'; + } + } + + // Remove charts and elements for panels that no longer exist + existingInstanceNames.forEach(panelName => { + if (!incomingPanelNames.has(panelName)) { + console.log(`Removing ${context} panel elements and chart for: ${panelName}`); + if (chartInstances[panelName]) { + chartInstances[panelName].destroy(); + delete chartInstances[panelName]; + } + const chartElement = document.getElementById(`chart-container-${context}-${panelName}`); + if (chartElement) { + chartElement.remove(); + } + } + }); +} + +/** + * Destroys all tracked chart instances. + */ +function chartManagerDestroyAll() { + console.log("[ChartManager] Destroying all chart instances."); + Object.values(chartInstancesScada).forEach(chart => chart?.destroy()); + chartInstancesScada = {}; + + Object.values(chartInstancesDrawing).forEach(chart => chart?.destroy()); + chartInstancesDrawing = {}; +} + +// --- Export (if using modules in the future) --- +// export { updateOverallChart, updatePanelCharts, chartManagerDestroyAll }; \ No newline at end of file diff --git a/static/js/events.js b/static/js/events.js new file mode 100644 index 0000000..90c052d --- /dev/null +++ b/static/js/events.js @@ -0,0 +1,425 @@ +// --- Event Listener Setup and Handlers --- + +// Note: Relies on MANY globally accessible functions and variables: +// - State: setSelectedProject, selectedProject, selectedProjectName, currentProjectData +// - State helpers: isProcessing +// - UI: uiUpdateStatusBar, uiShowProcessingState, uiClearProcessingState, uiClearProjectDisplay, +// uiUpdateProjectNameDisplay, uiShowSection, uiShowStatusMessage (via specific wrappers like uiShowUploadStatus), +// uiClearManageFilesStatusMessages +// - API: apiAddProject, apiUploadPdfs, apiTriggerAnalysis, apiDeletePdf, apiDeleteProject, apiUploadManifest +// - Charting: chartManagerDestroyAll +// - Modals: modalManagerHide, modalManagerUpdateManageFilesTitle +// - Other Core Logic: handleLoadAndDisplayPdfs, updateUIScadaCore, updateUIDrawingCore, updateUIConflictsCore + +// --- Core Handler Functions --- + +/** + * Handles the change event for the project selector dropdown. + * Updates the global state and triggers a full UI refresh for the selected project. + */ +function handleProjectChange() { + // selectedProjectName should have been updated by the calling event listener + console.log(`[Events] Project selection changed to: ${selectedProjectName}`); + + chartManagerDestroyAll(); // Clear charts immediately + + const projectData = currentProjectData[selectedProjectName]; // Access global state + if (projectData) { + console.log(`[Events] Data found for ${selectedProjectName}. Status: ${projectData.status}`); + uiUpdateStatusBar(selectedProjectName, projectData.status, projectData.last_commit); + + if (isProcessing(projectData.status)) { + console.log(`[Events] Project processing. Showing loading state.`); + uiShowProcessingState(projectData.status); + } else { + console.log(`[Events] Triggering redraw for newly selected project: ${selectedProjectName}`); + uiClearProcessingState(); // Clear any potential global loaders + // Draw immediately instead of using setTimeout + const latestData = currentProjectData[selectedProjectName]; + if (latestData && !isProcessing(latestData.status)) { + updateUIScadaCore(latestData); + updateUIDrawingCore(latestData); + updateUIConflictsCore(latestData); + } else { + // If status is *still* processing (e.g., changed between checks), show loading + console.warn("[Events:ProjectChange] State indicates processing on immediate draw attempt."); + uiShowProcessingState(latestData?.status || "Processing..."); + } + } + } else { + if (selectedProjectName) { + console.log(`[Events] No data found yet for selected project: ${selectedProjectName}. Showing loading.`); + uiUpdateStatusBar(selectedProjectName, 'Loading data...', 'N/A'); + uiShowProcessingState('Loading data...'); + } else { + console.log(`[Events] No project selected.`); + uiUpdateStatusBar('...', 'No project selected', 'N/A'); + uiUpdateProjectNameDisplay('No Projects'); + uiClearProjectDisplay(); + } + } + // Manage Files button state is handled by the selector's listener directly +} + +// --- Add Project Form Handler --- + +async function handleAddProjectSubmit(event) { + event.preventDefault(); + const form = event.target; + const statusDiv = document.getElementById('addProjectStatus'); + const submitButton = form.querySelector('button[type="submit"]'); + const modalElement = form.closest('.modal'); + + // UI update: Show submitting status + statusDiv.style.display = 'none'; // Use direct style manipulation or a UI function + statusDiv.textContent = ''; + statusDiv.className = 'mt-3 alert alert-info'; + statusDiv.textContent = 'Submitting project...'; + statusDiv.style.display = 'block'; + submitButton.disabled = true; + + // Validation + const projectNameInput = document.getElementById('projectName'); + const projectName = projectNameInput.value.trim(); + const manifestFile = document.getElementById('manifestFile').files[0]; + const pdfFiles = document.getElementById('pdfFiles').files; + let validationError = null; + if (!/^[a-zA-Z0-9_-]+$/.test(projectName)) validationError = 'Invalid Project Name. Use only letters, numbers, underscores, or hyphens.'; + else if (!manifestFile) validationError = 'Manifest CSV file is required.'; + else if (pdfFiles.length === 0) validationError = 'At least one Drawing PDF file is required.'; + + if (validationError) { + statusDiv.className = 'mt-3 alert alert-danger'; + statusDiv.textContent = validationError; + submitButton.disabled = false; + return; + } + + // Call API + try { + const formData = new FormData(form); + const result = await apiAddProject(formData); // Use API module + statusDiv.className = 'mt-3 alert alert-success'; + statusDiv.textContent = result.message || 'Project added successfully.'; + form.reset(); + modalManagerHide(modalElement); // Use Modal module + setTimeout(() => { submitButton.disabled = false; }, 500); + } catch (error) { + statusDiv.className = 'mt-3 alert alert-danger'; + statusDiv.textContent = `Error: ${error.message || 'Could not add project.'}`; + submitButton.disabled = false; + } +} + + +// --- Manage Files Modal Action Handlers --- + +async function handlePdfDeleteAction(projectName, filename) { + if (!confirm(`Are you sure you want to delete the file: ${filename}? This cannot be undone.`)) { + return; + } + console.log(`[Events] Requesting deletion of ${filename} from project ${projectName}`); + uiClearManageFilesStatusMessages(); + uiShowManageFilesStatus(`Deleting ${filename}...`, 'info'); + + try { + const data = await apiDeletePdf(projectName, filename); // Use API module + uiShowManageFilesStatus(data.message || `Successfully deleted ${filename}.`, 'success'); + await handleLoadAndDisplayPdfs(projectName); // Refresh list (function in script.js) + uiShowAnalysisTriggerStatus('File deleted. Trigger analysis to update progress.', 'info'); + } catch (error) { + console.error('[Events] Error deleting PDF:', error); + uiShowManageFilesStatus(`Error deleting file: ${error.message}`, 'danger'); + } +} + +async function handlePdfUploadAction(form) { + // selectedProject accessed globally + if (!selectedProject) return; + + const formData = new FormData(form); + const fileInput = document.getElementById('newPdfFiles'); + + if (!fileInput || !fileInput.files || fileInput.files.length === 0) { + uiShowUploadStatus('Please select at least one PDF file to upload.', 'warning'); + return; + } + + console.log(`[Events] Uploading ${fileInput.files.length} file(s) to project ${selectedProject}`); + uiClearManageFilesStatusMessages(); + uiShowUploadStatus('Uploading files...', 'info', false); + + try { + const data = await apiUploadPdfs(selectedProject, formData); // Use API module + uiShowUploadStatus(data.message || `Successfully uploaded files.`, 'success'); + form.reset(); + await handleLoadAndDisplayPdfs(selectedProject); // Refresh list (function in script.js) + uiShowAnalysisTriggerStatus('Files uploaded. Trigger analysis to update progress.', 'info'); + } catch (error) { + console.error('[Events] Error uploading PDFs:', error); + uiShowUploadStatus(`Upload failed: ${error.message}`, 'danger'); + } + // Can't easily clear the 'uploading' message here if error occurs before final state + // Consider removing the direct DOM check from the original function +} + +async function handleTriggerAnalysisAction() { + // selectedProject accessed globally + if (!selectedProject) return; + console.log(`[Events] Requesting manual analysis trigger for project ${selectedProject}`); + uiClearManageFilesStatusMessages(); + // --- Set global flag to true --- + isAnalysisGloballyActive = true; + console.log(`[State] isAnalysisGloballyActive set to: ${isAnalysisGloballyActive}`); + // Show status in modal immediately + uiShowAnalysisTriggerStatus('Triggering analysis...', 'info', false); + + // Also update main UI immediately to show processing state + const statusMsg = "Analysis triggered..."; + const currentCommit = currentProjectData[selectedProject]?.last_commit || 'N/A'; // Get current commit if available + uiUpdateStatusBar(selectedProject, statusMsg, currentCommit); + uiShowProcessingState(statusMsg); + + try { + const data = await apiTriggerAnalysis(selectedProject); // Use API module + // Update modal status on success, main UI is already showing processing + uiShowAnalysisTriggerStatus(data.message || 'Analysis triggered successfully. Monitor status bar for updates.', 'success', false); + } catch (error) { + console.error('[Events] Error triggering analysis:', error); + uiShowAnalysisTriggerStatus(`Error: ${error.message}`, 'danger'); + // If trigger fails, reset global flag and clear processing state? Maybe. + isAnalysisGloballyActive = false; // Reset flag on error + uiClearProcessingState(); + // Restore status bar to previous state? Or show error? + uiUpdateStatusBar(selectedProject, `Error triggering: ${error.message}`, currentCommit); + } +} + +async function handleDeleteProjectAction() { + // selectedProject accessed globally + if (!selectedProject) { + uiShowDeleteProjectStatus('No project selected to delete.', 'warning'); + return; + } + + const confirmation = prompt( + `This action is IRREVERSIBLE and will permanently delete the project '${selectedProject}' and all its data (manifest, PDFs, text files, cloned repository) from the server.\n\nType the project name '${selectedProject}' below to confirm deletion:` + ); + + if (confirmation !== selectedProject) { + uiShowDeleteProjectStatus('Project deletion cancelled or confirmation mismatch.', 'info'); + return; + } + + console.log(`[Events] Requesting deletion of project ${selectedProject}`); + uiClearManageFilesStatusMessages(); + uiShowDeleteProjectStatus(`Deleting project '${selectedProject}'...`, 'info', false); + const deleteBtn = document.getElementById('deleteProjectBtn'); // Direct access ok for disabling? + if (deleteBtn) deleteBtn.disabled = true; + + try { + const data = await apiDeleteProject(selectedProject); // Use API module + uiShowDeleteProjectStatus(`Project '${selectedProject}' deleted successfully.`, 'success', false); + + // Remove setTimeout for immediate UI update + // setTimeout(() => { + const manageModalElem = document.getElementById('manageFilesModal'); + modalManagerHide(manageModalElem); // Use Modal module + + // Update project selector UI + const selector = document.getElementById('projectSelector'); + let newSelectedIndex = -1; + for (let i = 0; i < selector.options.length; i++) { + if (selector.options[i].value === selectedProject) { + newSelectedIndex = (i > 0) ? i - 1 : 0; + selector.remove(i); + break; + } + } + + // Update state and trigger UI refresh + if (selector.options.length > 0) { + selector.selectedIndex = newSelectedIndex >= 0 ? newSelectedIndex : 0; + setSelectedProject(selector.value); + handleProjectChange(); // Trigger full refresh + } else { + selector.innerHTML = ''; + setSelectedProject(null); + uiUpdateProjectNameDisplay('No Projects'); + uiUpdateStatusBar('...', 'No projects available', 'N/A'); + uiClearProjectDisplay(); + const manageFilesBtn = document.getElementById('manageFilesBtn'); + if(manageFilesBtn) manageFilesBtn.disabled = true; + } + if (deleteBtn) deleteBtn.disabled = false; // Re-enable after operation + + // }, 1500); + + } catch (error) { + console.error('[Events] Error deleting project:', error); + uiShowDeleteProjectStatus(`Error: ${error.message}`, 'danger', false); + if (deleteBtn) deleteBtn.disabled = false; // Re-enable on error + } +} + +async function handleManifestUploadAction(form) { + // selectedProject accessed globally + if (!selectedProject) return; + + const formData = new FormData(form); + const fileInput = document.getElementById('newManifestFile'); + + // Validation + if (!fileInput || !fileInput.files || fileInput.files.length === 0) { + uiShowUploadManifestStatus('Please select a manifest CSV file to upload.', 'warning'); + return; + } + const manifestFile = fileInput.files[0]; + if (!manifestFile.name.toLowerCase().endsWith('.csv')) { + uiShowUploadManifestStatus('Invalid file type. Please select a .csv file.', 'warning'); + return; + } + + console.log(`[Events] Uploading new manifest for project ${selectedProject}`); + uiClearManageFilesStatusMessages(); + uiShowUploadManifestStatus('Uploading manifest...', 'info', false); + + try { + const data = await apiUploadManifest(selectedProject, formData); // Use API module + uiShowUploadManifestStatus(data.message || 'Manifest updated successfully.', 'success'); + form.reset(); + uiShowAnalysisTriggerStatus('Manifest updated. Trigger analysis to see changes.', 'info'); + } catch (error) { + console.error('[Events] Error uploading manifest:', error); + uiShowUploadManifestStatus(`Upload failed: ${error.message}`, 'danger'); + } +} + + +// --- Initialization Function --- + +/** + * Initializes the application state and attaches all necessary event listeners. + */ +function initializeEventListeners() { + console.log("[Events] Initializing event listeners and initial UI state..."); + + // --- Get DOM element references --- + const projectSelector = document.getElementById('projectSelector'); + const manageFilesBtn = document.getElementById('manageFilesBtn'); + const addProjectForm = document.getElementById('addProjectForm'); + const manageFilesModalElement = document.getElementById('manageFilesModal'); + const uploadPdfsForm = document.getElementById('uploadPdfsForm'); + const triggerAnalysisBtn = document.getElementById('triggerAnalysisBtn'); + const deleteProjectBtn = document.getElementById('deleteProjectBtn'); + const uploadManifestForm = document.getElementById('uploadManifestForm'); + const existingPdfListDiv = document.getElementById('existingPdfList'); + + // --- Setup Initial State & UI --- + // initialServerData is expected to be globally available from the HTML template + initialStatuses = initialServerData.status || {}; // Store initial statuses globally + + if (projectSelector && projectSelector.options.length > 0 && projectSelector.value) { + setSelectedProject(projectSelector.value); + console.log("[Events] Initial project selected:", selectedProject); + if (manageFilesBtn) manageFilesBtn.disabled = !selectedProject; + // Set initial status bar text using potentially embedded initial status + const initialStatus = initialStatuses[selectedProject] || 'Initializing...'; + uiUpdateStatusBar(selectedProject, initialStatus, 'N/A'); + // Perform initial UI setup (will show loading if status is processing) + handleProjectChange(); + } else { + console.log("[Events] No projects found initially or selector empty."); + setSelectedProject(null); + if (manageFilesBtn) manageFilesBtn.disabled = true; + uiUpdateProjectNameDisplay('No Projects'); + uiUpdateStatusBar('...', 'No projects discovered.', 'N/A'); + uiClearProjectDisplay(); + } + + // Show initial section (SCADA by default) after potentially setting initial state + uiShowSection('scada'); + + // --- Attach Event Listeners --- + + // Project Selector + if (projectSelector) { + projectSelector.addEventListener('change', (event) => { + setSelectedProject(event.target.value); + handleProjectChange(); // Trigger full update + if (manageFilesBtn) manageFilesBtn.disabled = !selectedProject; + }); + } + + // Navigation Tabs + document.querySelectorAll('.nav-link[data-view]').forEach(link => { + link.addEventListener('click', (event) => { + event.preventDefault(); + const targetSection = link.getAttribute('data-view'); + uiShowSection(targetSection); + }); + }); + + // Add Project Form + if (addProjectForm) { + addProjectForm.addEventListener('submit', handleAddProjectSubmit); + } + + // Manage Files Modal: Show + if (manageFilesModalElement && manageFilesBtn) { + manageFilesModalElement.addEventListener('show.bs.modal', async () => { + // selectedProject accessed globally + if (!selectedProject) return; + modalManagerUpdateManageFilesTitle(selectedProject); + uiClearManageFilesStatusMessages(); + await handleLoadAndDisplayPdfs(selectedProject); // Calls function in script.js + }); + } + + // Manage Files Modal: PDF Upload Form + if (uploadPdfsForm) { + uploadPdfsForm.addEventListener('submit', (event) => { + event.preventDefault(); + handlePdfUploadAction(event.target); + }); + } + + // Manage Files Modal: Trigger Analysis Button + if (triggerAnalysisBtn) { + triggerAnalysisBtn.addEventListener('click', handleTriggerAnalysisAction); + } + + // Manage Files Modal: Delete PDF Button (Event Delegation) + if (existingPdfListDiv) { + existingPdfListDiv.addEventListener('click', (event) => { + if (event.target.classList.contains('pdf-delete-btn')) { + const button = event.target; + const filename = button.dataset.filename; + const projectName = button.dataset.project; + if (filename && projectName) { + handlePdfDeleteAction(projectName, filename); + } else { + console.error("[Events] Missing filename or project name on delete button.", button); + } + } + }); + } + + // Manage Files Modal: Delete Project Button + if (deleteProjectBtn) { + deleteProjectBtn.addEventListener('click', handleDeleteProjectAction); + } + + // Manage Files Modal: Manifest Upload Form + if (uploadManifestForm) { + uploadManifestForm.addEventListener('submit', (event) => { + event.preventDefault(); + handleManifestUploadAction(event.target); + }); + } + + console.log("[Events] Event listeners attached."); +} + +// --- Export (if using modules) --- +// export { initializeEventListeners }; \ No newline at end of file diff --git a/static/js/modalManager.js b/static/js/modalManager.js new file mode 100644 index 0000000..86407d3 --- /dev/null +++ b/static/js/modalManager.js @@ -0,0 +1,187 @@ +// --- Modal Management --- + +// Store modal instances internally +let detailsModalInstance = null; +let addProjectModalInstance = null; +let manageFilesModalInstance = null; + +// Function to initialize Bootstrap modal instances +// Call this once when the DOM is ready +function initializeModals() { + const detailsModalElement = document.getElementById('detailsModal'); + if (detailsModalElement) { + detailsModalInstance = new bootstrap.Modal(detailsModalElement); + } + const addProjectModalElement = document.getElementById('addProjectModal'); + if (addProjectModalElement) { + addProjectModalInstance = new bootstrap.Modal(addProjectModalElement); + } + const manageFilesModalElement = document.getElementById('manageFilesModal'); + if (manageFilesModalElement) { + manageFilesModalInstance = new bootstrap.Modal(manageFilesModalElement); + } + console.log("[ModalManager] Modals initialized."); +} + +/** + * Hides a given Bootstrap modal element. + * @param {HTMLElement} modalElement - The DOM element of the modal to hide. + */ +function modalManagerHide(modalElement) { + if (!modalElement) return; + const instance = bootstrap.Modal.getInstance(modalElement); + if (instance) { + instance.hide(); + } else { + console.warn("Modal instance not found for element:", modalElement); + } +} + +// --- Details Modal --- + +/** + * Shows the details modal, populating it with data based on chart click context. + * Relies on global state: currentProjectData, scadaListKeysMap, drawingListKeysMap. + * @param {string} projectName - The name of the selected project. + * @param {string} identifier - '__overall__' or the panel name. + * @param {string} categoryType - 'found' or 'notFound'. + * @param {string} context - 'scada' or 'drawing'. + */ +function modalManagerShowDetails(projectName, identifier, categoryType, context) { + console.log(`[ModalManager] Showing details for: ${projectName} - ${identifier} (${context} / ${categoryType})`); + if (!detailsModalInstance) { + console.error("[ModalManager] Details modal instance not initialized."); + alert("Error: Details modal is not available."); + return; + } + + let sourceData = null; + let panelNameDisplay = ""; + const listKeysMap = context === 'scada' ? scadaListKeysMap : drawingListKeysMap; // Uses global state + const listTypeLabel = categoryType === 'found' + ? (context === 'scada' ? 'Found in SCADA' : 'Found in Drawing') + : (context === 'scada' ? 'Not Found in SCADA' : 'Not Found in Drawing'); + + // Get the specific project's progress data - uses global state + const projectProgress = (currentProjectData[projectName] && currentProjectData[projectName].progress) ? currentProjectData[projectName].progress : {}; + + if (identifier === '__overall__') { + sourceData = projectProgress.overall || null; + panelNameDisplay = `Overall (${projectName})`; + } else { + sourceData = (projectProgress.panels) ? projectProgress.panels[identifier] : null; + panelNameDisplay = `${identifier} (${projectName})`; + } + + if (!sourceData) { + console.error(`[ModalManager] Could not find source data for modal. Project: ${projectName}, Identifier: ${identifier}, Context: ${context}`); + alert("Error: Could not load details data."); + return; + } + + const backendListKeys = listKeysMap[categoryType]; + if (!backendListKeys) { + console.error(`[ModalManager] Invalid categoryType: ${categoryType}`); + alert("Error: Invalid data category."); + return; + } + + let combinedDataList = []; + backendListKeys.forEach(key => { + if (sourceData[key]) { + combinedDataList = combinedDataList.concat(sourceData[key]); + } + }); + + // Get modal elements + const modalElement = document.getElementById('detailsModal'); + const modalTitleElement = modalElement?.querySelector('.modal-title'); // Use more specific ID if available + const modalTableBody = modalElement?.querySelector('.modal-body tbody'); + + if (!modalTitleElement || !modalTableBody) { + console.error("[ModalManager] Details modal title or table body element not found."); + alert("Error: Could not display details."); + return; + } + + if (combinedDataList.length === 0) { + // Optionally show a message in the modal instead of alert + console.log(`[ModalManager] No items found for ${panelNameDisplay} - ${listTypeLabel}.`); + alert(`No items found for ${panelNameDisplay} - ${listTypeLabel}.`); + return; // Don't show empty modal + } + + modalTitleElement.innerHTML = `${listTypeLabel} Items for ${panelNameDisplay} ${combinedDataList.length}`; + modalTableBody.innerHTML = ''; // Clear previous content + + combinedDataList.sort((a, b) => a.alias.localeCompare(b.alias)).forEach(item => { + const row = document.createElement('tr'); + row.insertCell().textContent = item.alias; + row.insertCell().textContent = item.control_panel; + const scadaCell = row.insertCell(); scadaCell.innerHTML = item.found_scada ? 'Yes' : 'No'; + const drawingCell = row.insertCell(); drawingCell.innerHTML = item.found_drawing ? 'Yes' : 'No'; + row.insertCell().textContent = item.equipment_type || 'N/A'; + row.insertCell().textContent = item.conveyor_type || 'N/A'; + if (item.found_scada && !item.found_drawing) { row.classList.add('table-warning'); } + modalTableBody.appendChild(row); + }); + + detailsModalInstance.show(); +} + +// --- Manage Files Modal --- + +/** + * Populates the PDF list within the Manage Files modal. + * @param {HTMLElement} pdfListDiv - The container element for the list. + * @param {string} projectName - The name of the current project. + * @param {Array} pdfFiles - An array of PDF filenames. + */ +function modalManagerPopulatePdfList(pdfListDiv, projectName, pdfFiles) { + pdfListDiv.innerHTML = ''; // Clear loading/previous state + + if (pdfFiles && pdfFiles.length > 0) { + pdfFiles.forEach(filename => { + const listItem = document.createElement('div'); + listItem.className = 'list-group-item d-flex justify-content-between align-items-center'; + + const nameSpan = document.createElement('span'); + nameSpan.textContent = filename; + nameSpan.title = filename; // Show full name on hover + nameSpan.style.overflow = 'hidden'; + nameSpan.style.textOverflow = 'ellipsis'; + nameSpan.style.whiteSpace = 'nowrap'; + nameSpan.style.marginRight = '10px'; + + const deleteButton = document.createElement('button'); + deleteButton.className = 'btn btn-danger btn-sm flex-shrink-0 pdf-delete-btn'; // Add class for event delegation + deleteButton.textContent = 'Delete'; + deleteButton.title = `Delete ${filename}`; + deleteButton.dataset.filename = filename; // Store filename in data attribute + deleteButton.dataset.project = projectName; // Store projectname in data attribute + // Remove inline onclick, use event delegation in events.js + // deleteButton.onclick = () => handleDeletePdfClick(projectName, filename); + + listItem.appendChild(nameSpan); + listItem.appendChild(deleteButton); + pdfListDiv.appendChild(listItem); + }); + } else { + pdfListDiv.innerHTML = '
No PDF files found for this project.
'; + } +} + +/** + * Updates the title of the Manage Files modal. + * @param {string} projectName - The name of the selected project. + */ +function modalManagerUpdateManageFilesTitle(projectName) { + const manageFilesModalElement = document.getElementById('manageFilesModal'); + if (!manageFilesModalElement) return; + manageFilesModalElement.querySelectorAll('.project-name-display').forEach(span => { + span.textContent = projectName || '...'; // Handle null/empty projectName + }); +} + +// --- Export (if using modules in the future) --- +// export { initializeModals, modalManagerShowDetails, modalManagerPopulatePdfList, modalManagerUpdateManageFilesTitle, modalManagerHide }; \ No newline at end of file diff --git a/static/js/script.js b/static/js/script.js index f9fc373..f53fdaf 100644 --- a/static/js/script.js +++ b/static/js/script.js @@ -1,211 +1,59 @@ // --- Global State Variables --- -let chartInstancesScada = {}; // Separate instances for SCADA -let chartInstancesDrawing = {}; // Separate instances for Drawing -let currentProjectData = {}; // Stores the LATEST full data received from SSE { project: {status, commit, progress}, ... } -let selectedProjectName = null; // Track the currently selected project -let detailsModalInstance = null; -let currentVisibleSection = 'scada'; // Track visible section: 'scada', 'drawing', 'conflicts' -let eventSource = null; -let selectedProject = null; // Store the currently selected project name -let initialStatuses = initialServerData.status || {}; // Use embedded status initially -const projectSelector = document.getElementById('projectSelector'); -const manageFilesBtn = document.getElementById('manageFilesBtn'); // Get manage files button +// MOVED to state.js +// let chartInstancesScada = {}; +// let chartInstancesDrawing = {}; +// let currentProjectData = {}; +// let selectedProjectName = null; +// let detailsModalInstance = null; +// let currentVisibleSection = 'scada'; +// let eventSource = null; +// let selectedProject = null; +// let initialStatuses = initialServerData.status || {}; +// const projectSelector = document.getElementById('projectSelector'); // Keep DOM element refs here for now +// const manageFilesBtn = document.getElementById('manageFilesBtn'); // --- Chart Configurations --- -const scadaChartLabels = ['Found in SCADA', 'Not Found in SCADA']; -const scadaChartColors = ['rgb(13, 110, 253)', 'rgb(220, 53, 69)']; -const drawingChartLabels = ['Found in Drawing', 'Not Found in Drawing']; -const drawingChartColors = ['rgb(25, 135, 84)', 'rgb(220, 53, 69)']; +// MOVED to chartManager.js +// const scadaChartLabels = ['Found in SCADA', 'Not Found in SCADA']; +// const scadaChartColors = ['rgb(13, 110, 253)', 'rgb(220, 53, 69)']; +// const drawingChartLabels = ['Found in Drawing', 'Not Found in Drawing']; +// const drawingChartColors = ['rgb(25, 135, 84)', 'rgb(220, 53, 69)']; // Map backend list keys for modal clicks (can be combined or kept separate if needed) -const scadaListKeysMap = { - found: ['found_both_list', 'found_scada_only_list'], - notFound: ['found_drawing_only_list', 'missing_list'] -}; -const drawingListKeysMap = { - found: ['found_both_list', 'found_drawing_only_list'], - notFound: ['found_scada_only_list', 'missing_list'] -}; +// MOVED to state.js +// const scadaListKeysMap = { ... }; +// const drawingListKeysMap = { ... }; // --- Debounce Utility (Only need one) --- -function debounce(func, wait) { - let timeout; - return function executedFunction(...args) { - const later = () => { - clearTimeout(timeout); - func(...args); - }; - clearTimeout(timeout); - timeout = setTimeout(later, wait); - }; -} +// MOVED to state.js +// function debounce(func, wait) { ... } // --- NEW: Helper Functions for Processing State --- // Checks if the status message indicates ongoing processing -function isProcessing(statusMsg) { - if (!statusMsg) return false; // Handle undefined/null status - const lowerStatus = statusMsg.toLowerCase(); - // Keywords indicating processing (adjust as needed based on app.py status messages) - return lowerStatus.includes('initializ') || // initializing, initial... - lowerStatus.includes('cloning') || - lowerStatus.includes('fetching') || - lowerStatus.includes('pulling') || - lowerStatus.includes('checking') || // checking repo, checking scada, checking drawings - lowerStatus.includes('reading manifest') || - lowerStatus.includes('calculating') || - lowerStatus.includes('extracting') || // If PDF extraction status is sent - lowerStatus.includes('loading data'); // From handleProjectChange initial state -} +// MOVED to state.js +// function isProcessing(statusMsg) { ... } // Displays a loading indicator in a container element -function showLoadingIndicator(containerElement, message = "Processing project data...") { - if (!containerElement) return; - - // Hide existing content - for (const child of containerElement.children) { - if (!child.classList.contains('processing-indicator')) { - child.classList.add('content-hidden-by-loader'); - } - } - - let indicatorDiv = containerElement.querySelector('.processing-indicator'); - if (!indicatorDiv) { - indicatorDiv = document.createElement('div'); - indicatorDiv.className = 'text-center p-4 processing-indicator'; - indicatorDiv.innerHTML = ` -
- Loading... -
-

- `; - // Prepend to ensure it's visible even if container had position: relative children - containerElement.prepend(indicatorDiv); - } - - // Update message - const messageElement = indicatorDiv.querySelector('p'); - if (messageElement) { - // Sanitize message slightly before displaying - const safeMessage = message.replace(//g, ">"); - messageElement.textContent = safeMessage; - } - indicatorDiv.style.display = 'block'; // Ensure indicator is visible -} +// MOVED to ui.js +// function showLoadingIndicator(containerElement, message = "Processing data...") { ... } // Removes the loading indicator from a container -function clearLoadingIndicator(containerElement) { - if (!containerElement) return; - - // Remove indicator - const indicatorDiv = containerElement.querySelector('.processing-indicator'); - if (indicatorDiv) { - // indicatorDiv.remove(); // Or hide it if preferred - indicatorDiv.style.display = 'none'; - } - - // Show original content - for (const child of containerElement.children) { - child.classList.remove('content-hidden-by-loader'); - } - - // Remove default "Loading panel data..." placeholders if they still exist - const placeholderP = Array.from(containerElement.querySelectorAll('p.fst-italic')).find(p => - p.textContent.toLowerCase().includes('loading') && - !p.closest('.processing-indicator') - ); - if (placeholderP) { - placeholderP.remove(); - } -} +// MOVED to ui.js +// function clearLoadingIndicator(containerElement) { ... } // Sets the entire UI to reflect a processing state -function showProcessingStateUI(projectData) { - const statusMsg = projectData ? projectData.status : "Loading data..."; - const containers = [ - document.getElementById('overall-scada-progress'), - document.getElementById('scada-panels-progress'), - document.getElementById('overall-drawing-progress'), - document.getElementById('drawing-panels-progress'), - document.getElementById('panels-conflicts') - ]; - - console.log(`[UI State] Setting processing state: "${statusMsg}"`); - - // Destroy all existing charts immediately to prevent rendering issues - Object.values(chartInstancesScada).forEach(chart => chart?.destroy()); - chartInstancesScada = {}; - Object.values(chartInstancesDrawing).forEach(chart => chart?.destroy()); - chartInstancesDrawing = {}; - - // Show loading indicator in all content containers - containers.forEach(container => { - if (container) { - showLoadingIndicator(container, statusMsg); // Show the actual status message - } - }); - - // Clear text content that is updated directly (like overall percentages) - const overallScadaText = document.getElementById('overall-scada-text'); - if (overallScadaText) overallScadaText.textContent = ''; - const overallDrawingText = document.getElementById('overall-drawing-text'); - if (overallDrawingText) overallDrawingText.textContent = ''; - const conflictCount = document.getElementById('conflict-count'); - if (conflictCount) { - conflictCount.textContent = '...'; - conflictCount.style.display = 'inline-block'; // Show it while loading - } - - // Ensure the correct section's container is visible if it was hidden - // (showSection handles visibility, but this prevents blank screens if called directly) - const scadaContent = document.getElementById('scada-content'); - const drawingsContent = document.getElementById('drawings-content'); - const conflictsContent = document.getElementById('conflicts-content'); - if (scadaContent && currentVisibleSection === 'scada') scadaContent.style.display = 'block'; - if (drawingsContent && currentVisibleSection === 'drawings') drawingsContent.style.display = 'block'; - if (conflictsContent && currentVisibleSection === 'conflicts') conflictsContent.style.display = 'block'; -} +// MOVED to ui.js +// function showProcessingStateUI(projectData) { ... } +// Use uiShowProcessingState(projectData?.status) instead // Clears loading indicators and triggers the actual UI rendering -function showReadyStateUI(projectData) { - console.log(`[UI State] Setting ready state for project: ${selectedProjectName}`); - const containers = [ - document.getElementById('overall-scada-progress'), - document.getElementById('scada-panels-progress'), - document.getElementById('overall-drawing-progress'), - document.getElementById('drawing-panels-progress'), - document.getElementById('panels-conflicts') - ]; - // Clear loading indicators from all containers - containers.forEach(container => { - if(container) clearLoadingIndicator(container); - }); - - // Call core update functions (wrapped in setTimeout for smooth rendering) - console.log(`Project state is ready. Queueing core redraw.`); - setTimeout(() => { - console.log(`Passing project data to UI updates:`, projectData); - updateUIScadaCore(projectData); - updateUIDrawingCore(projectData); - updateUIConflictsCore(projectData); - }, 0); -} - -// --- Chart Click Handler (Needs PROJECT CONTEXT) --- -function handleChartClick(event, elements, chart, context) { - if (elements.length > 0 && selectedProjectName) { // Check if a project is selected - const clickedElementIndex = elements[0].index; - const isOverallChart = chart.canvas.id.startsWith('overall-'); - const identifier = isOverallChart ? '__overall__' : chart.canvas.id.replace(`chart-${context}-`, ''); - const categoryType = clickedElementIndex === 0 ? 'found' : 'notFound'; - - // Pass selectedProjectName to the modal function - showDetailsModal(selectedProjectName, identifier, categoryType, context); - } -} +// MOVED to ui.js +// function showReadyStateUI(projectData) { ... } +// Call uiClearProcessingState() and then call core update functions // --- Core UI Update Functions (Need selected project data) --- - +// These become orchestrators, calling ui.js and chartManager.js function updateUIScadaCore(projectData) { // Accepts data for the selected project console.log(`Running core SCADA UI redraw logic for project: ${selectedProjectName}`); const progressDetails = (projectData && projectData.progress) ? projectData.progress : { overall: {}, panels: {} }; @@ -217,41 +65,23 @@ function updateUIScadaCore(projectData) { // Accepts data for the selected proje const overallPercentageFound = overallTotal > 0 ? ((overallFoundScada / overallTotal) * 100).toFixed(1) : 0; const overallChartCounts = [overallFoundScada, overallNotFoundScada]; - // Update project name display in headers - document.querySelectorAll('.project-name-display').forEach(el => el.textContent = selectedProjectName || '...'); - - const overallScadaTextElement = document.getElementById('overall-scada-text'); - if (overallScadaTextElement) { - overallScadaTextElement.textContent = `Found in SCADA: ${overallFoundScada}/${overallTotal} (${overallPercentageFound}%)`; - } else { - console.warn("Element with ID 'overall-scada-text' not found when trying to update SCADA text."); - } + // Call UI functions + uiUpdateProjectNameDisplay(selectedProjectName); + uiUpdateOverallStatsText('scada', overallFoundScada, overallTotal, overallPercentageFound); const isSectionVisible = (currentVisibleSection === 'scada'); - if (isSectionVisible) { - const overallScadaCanvas = document.getElementById('overall-scada-chart-canvas'); - if (chartInstancesScada['overall']) { - if (JSON.stringify(chartInstancesScada['overall'].data.datasets[0].data) !== JSON.stringify(overallChartCounts)) { - chartInstancesScada['overall'].data.datasets[0].data = overallChartCounts; - chartInstancesScada['overall'].update('none'); - } - } else if (overallScadaCanvas) { - console.log("Creating overall SCADA chart (visible)."); - const ctxOverall = overallScadaCanvas.getContext('2d'); - // Pass selectedProjectName to identify data context for clicks/tooltips - chartInstancesScada['overall'] = new Chart(ctxOverall, createChartConfig(overallChartCounts, overallTotal, 'scada', 'overall', selectedProjectName)); - } - } else { - if (chartInstancesScada['overall']) { - console.log("Destroying hidden overall SCADA chart."); - chartInstancesScada['overall'].destroy(); - delete chartInstancesScada['overall']; - } - } + // Call Chart Manager functions using the correct function name and canvas ID + updateOverallChart( + 'scada', // context + 'overall-scada-chart-canvas', // canvas ID + overallChartCounts, // chart data + overallTotal, // total for percentage display + isSectionVisible // visibility flag + ); - const panelsContainer = document.getElementById('scada-panels-progress'); + const panelsContainer = uiElements.scadaPanelsProgress; // Use uiElements const panelsData = progressDetails.panels || {}; - updatePanelCharts(panelsContainer, panelsData, chartInstancesScada, 'scada'); + updatePanelCharts('scada', panelsContainer, panelsData, isSectionVisible); // Pass visibility flag console.log("Finished SCADA UI core redraw."); } @@ -267,39 +97,23 @@ function updateUIDrawingCore(projectData) { // Accepts data for the selected pro const overallPercentageFound = overallTotal > 0 ? ((overallFoundDrawing / overallTotal) * 100).toFixed(1) : 0; const overallChartCounts = [overallFoundDrawing, overallNotFoundDrawing]; - document.querySelectorAll('.project-name-display').forEach(el => el.textContent = selectedProjectName || '...'); - - const overallDrawingTextElement = document.getElementById('overall-drawing-text'); - if (overallDrawingTextElement) { - overallDrawingTextElement.textContent = `Found in Drawing: ${overallFoundDrawing}/${overallTotal} (${overallPercentageFound}%)`; - } else { - console.warn("Element with ID 'overall-drawing-text' not found when trying to update Drawing text."); - } + // Call UI functions + uiUpdateProjectNameDisplay(selectedProjectName); + uiUpdateOverallStatsText('drawing', overallFoundDrawing, overallTotal, overallPercentageFound); const isSectionVisible = (currentVisibleSection === 'drawings'); - if (isSectionVisible) { - const overallDrawingCanvas = document.getElementById('overall-drawing-chart-canvas'); - if (chartInstancesDrawing['overall']) { - if (JSON.stringify(chartInstancesDrawing['overall'].data.datasets[0].data) !== JSON.stringify(overallChartCounts)) { - chartInstancesDrawing['overall'].data.datasets[0].data = overallChartCounts; - chartInstancesDrawing['overall'].update('none'); - } - } else if (overallDrawingCanvas) { - console.log("Creating overall drawing chart (visible)."); - const ctxOverall = overallDrawingCanvas.getContext('2d'); - chartInstancesDrawing['overall'] = new Chart(ctxOverall, createChartConfig(overallChartCounts, overallTotal, 'drawing', 'overall', selectedProjectName)); - } - } else { - if (chartInstancesDrawing['overall']) { - console.log("Destroying hidden overall Drawing chart."); - chartInstancesDrawing['overall'].destroy(); - delete chartInstancesDrawing['overall']; - } - } + // Call Chart Manager functions using the correct function name and canvas ID + updateOverallChart( + 'drawing', // context + 'overall-drawing-chart-canvas', // canvas ID + overallChartCounts, // chart data + overallTotal, // total for percentage display + isSectionVisible // visibility flag + ); - const panelsContainer = document.getElementById('drawing-panels-progress'); + const panelsContainer = uiElements.drawingPanelsProgress; // Use uiElements const panelsData = progressDetails.panels || {}; - updatePanelCharts(panelsContainer, panelsData, chartInstancesDrawing, 'drawings'); + updatePanelCharts('drawing', panelsContainer, panelsData, isSectionVisible); // Pass visibility flag console.log("Finished Drawing UI core redraw."); } @@ -307,1244 +121,113 @@ function updateUIDrawingCore(projectData) { // Accepts data for the selected pro function updateUIConflictsCore(projectData) { // Accepts data for the selected project console.log(`Running core Conflicts UI redraw logic for project: ${selectedProjectName}`); const progressDetails = (projectData && projectData.progress) ? projectData.progress : { overall: {}, panels: {} }; - - const panelsContainer = document.getElementById('panels-conflicts'); - panelsContainer.innerHTML = ''; - - document.querySelectorAll('.project-name-display').forEach(el => el.textContent = selectedProjectName || '...'); - const panelsData = progressDetails.panels || {}; - let totalConflicts = 0; - let panelsWithConflicts = 0; - if (!panelsData || Object.keys(panelsData).length === 0) { - panelsContainer.innerHTML = '

No panel data available yet.

'; - } else { - const sortedPanels = Object.keys(panelsData).sort(); - sortedPanels.forEach(panelName => { - const panel = panelsData[panelName]; - const conflictsList = panel.found_scada_only_list || []; - if (conflictsList.length > 0) { - panelsWithConflicts++; - totalConflicts += conflictsList.length; - // ... (Create header and table as in conflicts.html) ... - const panelHeader = document.createElement('h4'); - panelHeader.className = 'mt-4 mb-2'; - panelHeader.textContent = `${panelName} (${conflictsList.length} conflicts)`; - panelsContainer.appendChild(panelHeader); + // Call UI functions + uiUpdateProjectNameDisplay(selectedProjectName); + uiUpdateConflictsTable(panelsData); - const table = document.createElement('table'); - table.className = 'table table-sm table-striped table-hover table-bordered'; - const thead = table.createTHead(); - thead.innerHTML = `AliasPanelSCADA StatusDrawing StatusEquipment TypeType of Conveyor`; - const tbody = table.createTBody(); - conflictsList.sort((a, b) => a.alias.localeCompare(b.alias)).forEach(item => { - const row = tbody.insertRow(); - row.classList.add('table-warning'); - row.insertCell().textContent = item.alias; - row.insertCell().textContent = item.control_panel; - row.insertCell().innerHTML = 'Yes'; - row.insertCell().innerHTML = 'No'; - row.insertCell().textContent = item.equipment_type || 'N/A'; - row.insertCell().textContent = item.conveyor_type || 'N/A'; - }); - panelsContainer.appendChild(table); - } - }); - if (panelsWithConflicts === 0) { - panelsContainer.innerHTML = '

No conflicts found across all panels.

'; - } - } - // Update total count badge - const countBadge = document.getElementById('conflict-count'); - if (countBadge) { - countBadge.textContent = totalConflicts; - countBadge.style.display = totalConflicts > 0 ? 'inline-block' : 'none'; - } console.log("Finished Conflicts UI core redraw."); } -// --- Generic Panel Chart Update Logic --- -function updatePanelCharts(panelsContainer, panelsData, chartInstances, context) { // context: 'scada' or 'drawing' - const incomingPanelNames = new Set(Object.keys(panelsData).sort()); - const existingInstanceNames = new Set(Object.keys(chartInstances).filter(k => k !== 'overall')); +// --- Process Update: Extracts data for selected project --- (Will move to sse.js) +// MOVED to sse.js +// function processUpdate(fullData) { ... } - // --- Check if the context matches the currently visible section --- - const isSectionVisible = (context === currentVisibleSection); - if (!isSectionVisible) { - // If section is not visible, destroy existing panel chart instances for this context - console.log(`Destroying hidden panel charts for context: ${context}`); - existingInstanceNames.forEach(panelName => { - if (chartInstances[panelName]) { - chartInstances[panelName].destroy(); - delete chartInstances[panelName]; - } - }); - // Don't proceed further if the section is hidden - return; - } - - if (incomingPanelNames.size > 0) { - const loadingMsg = panelsContainer.querySelector('p'); - if (loadingMsg) { loadingMsg.remove(); } - - incomingPanelNames.forEach(panelName => { - const panel = panelsData[panelName]; - const panelTotal = (panel && panel.total) || 0; - let panelChartCounts = [0, 0]; // Default to [0, 0] - - if (panel) { // Only calculate if panel data exists - if (context === 'scada') { - panelChartCounts = [(panel.found_both || 0) + (panel.found_scada_only || 0), (panel.found_drawing_only || 0) + (panel.missing_both || 0)]; - } else { // drawing - panelChartCounts = [(panel.found_both || 0) + (panel.found_drawing_only || 0), (panel.found_scada_only || 0) + (panel.missing_both || 0)]; - } - } - - // --- Only update/create chart if section is visible --- - if (isSectionVisible) { - if (chartInstances[panelName]) { - if (JSON.stringify(chartInstances[panelName].data.datasets[0].data) !== JSON.stringify(panelChartCounts)) { - chartInstances[panelName].data.datasets[0].data = panelChartCounts; - chartInstances[panelName].update('none'); - } - } else { - let canvas = document.getElementById(`chart-${context}-${panelName}`); // Use context in ID - if (canvas) { - console.log(`Recreating ${context} chart instance for panel (visible): ${panelName}`); - const ctx = canvas.getContext('2d'); - chartInstances[panelName] = new Chart(ctx, createChartConfig(panelChartCounts, panelTotal, context, panelName, selectedProjectName)); - } else { - console.log(`Creating new ${context} panel elements and chart (visible) for: ${panelName}`); - const chartContainer = document.createElement('div'); - chartContainer.id = `chart-container-${context}-${panelName}`; // Use context in ID - chartContainer.className = 'chart-container'; - const label = document.createElement('span'); - label.className = 'chart-label'; label.textContent = panelName; - canvas = document.createElement('canvas'); // Reassign canvas variable - canvas.id = `chart-${context}-${panelName}`; // Use context in ID - canvas.className = 'panel-chart-canvas'; - chartContainer.appendChild(label); - chartContainer.appendChild(canvas); - // Added Log before append - console.log(`[updatePanelCharts] Appending chartContainer (${chartContainer.id}) to panelsContainer (${panelsContainer ? panelsContainer.id : 'null'})`); - panelsContainer.appendChild(chartContainer); // Append to the main panels progress div - const ctx = canvas.getContext('2d'); - chartInstances[panelName] = new Chart(ctx, createChartConfig(panelChartCounts, panelTotal, context, panelName, selectedProjectName)); - } - } - } - // --- End visibility check --- - }); - } else { - if (!panelsContainer.querySelector('p')) { - panelsContainer.innerHTML = '

No panel data available yet.

'; - } - } - - existingInstanceNames.forEach(panelName => { - if (!incomingPanelNames.has(panelName)) { - console.log(`Removing ${context} panel elements and chart for: ${panelName}`); - // Ensure chart is destroyed before removing element - if (chartInstances[panelName]) { - chartInstances[panelName].destroy(); - delete chartInstances[panelName]; - } - const chartElement = document.getElementById(`chart-container-${context}-${panelName}`); // Use context - if (chartElement) { - chartElement.remove(); - } - } - }); -} - -// --- Generic Helper to create chart config --- Needs PROJECT context --- -function createChartConfig(chartCounts, total, context, identifier, projectName) { // Added projectName - const labels = context === 'scada' ? scadaChartLabels : drawingChartLabels; - const colors = context === 'scada' ? scadaChartColors : drawingChartColors; - const datasetLabel = context === 'scada' ? 'SCADA Match' : 'Drawing Match'; - - // Retrieve the correct project's progress data for tooltip calculation - const projectProgress = (currentProjectData[projectName] && currentProjectData[projectName].progress) ? currentProjectData[projectName].progress : {}; - - return { - type: 'pie', - data: { - labels: labels, - datasets: [{ - label: datasetLabel, - data: chartCounts, - backgroundColor: colors, - hoverOffset: 4 - }] - }, - options: { - responsive: true, - maintainAspectRatio: false, - onClick: (event, elements, chart) => handleChartClick(event, elements, chart, context), // Pass context - plugins: { - legend: { display: false }, - tooltip: { - callbacks: { - label: function(ctxTooltip) { - let label = ctxTooltip.label || ''; - if (label) label += ': '; - const value = ctxTooltip.parsed; - if (value !== null) label += value; - // Workaround: Use total passed to function for panel charts, access stored data for overall - const chartTotal = (identifier === 'overall' && projectProgress.overall) - ? projectProgress.overall.total_csv - : total; // Use the 'total' passed in for panel charts - if (chartTotal && chartTotal > 0 && value !== null) { // Add null check for value - label += ` (${((value / chartTotal) * 100).toFixed(1)}%)`; - } - return label; - } - } - } - } - } - }; -} - -// --- Process Update: Extracts data for selected project --- -function processUpdate(fullData) { - console.log("SSE Received Full Data:", fullData); // Log the raw data - - // Store the latest full data - currentProjectData = {}; // Reset first - const incomingProjects = fullData.projects || []; // Ensure it's an array - incomingProjects.forEach(projName => { - currentProjectData[projName] = { - status: fullData.status ? fullData.status[projName] : 'Unknown', - last_commit: fullData.last_commit ? fullData.last_commit[projName] : 'N/A', - progress: fullData.progress ? fullData.progress[projName] : { overall: {}, panels: {} } - }; - }); - - // --- NEW: Update Project Selector Dropdown --- - const projectSelector = document.getElementById('projectSelector'); - const currentOptions = Array.from(projectSelector.options).map(opt => opt.value); - const hasChanged = incomingProjects.length !== currentOptions.length || - incomingProjects.some(p => !currentOptions.includes(p)) || - currentOptions.some(p => !incomingProjects.includes(p)); - - if (hasChanged) { - console.log("Project list changed. Rebuilding project selector."); - const previouslySelected = projectSelector.value; // Store current selection - projectSelector.innerHTML = ''; // Clear existing options - - if (incomingProjects.length > 0) { - incomingProjects.sort().forEach(projName => { - const option = document.createElement('option'); - option.value = projName; - option.textContent = projName; - projectSelector.appendChild(option); - }); - // Try to re-select the previous project if it still exists, otherwise select the first - if (incomingProjects.includes(previouslySelected)) { - projectSelector.value = previouslySelected; - } else { - projectSelector.selectedIndex = 0; // Select the first one - // Manually trigger change handler if selection had to be reset - handleProjectChange(); - } - } else { - // Handle empty project list - const option = document.createElement('option'); - option.value = ''; - option.textContent = 'No projects found'; - option.disabled = true; - projectSelector.appendChild(option); - selectedProjectName = null; // Clear selection - selectedProject = null; // Clear other selection var too - clearAllProjectSpecificUI(); // Clear the main UI - updateStatusBar('...', 'No projects available', 'N/A'); - } - // Update button state based on selection - manageFilesBtn.disabled = !projectSelector.value; - } - // --- End Project Selector Update --- - - - // Get current selection AFTER storing data and potentially updating selector - selectedProjectName = projectSelector.value; // Update from potentially modified selector - selectedProject = selectedProjectName; // Keep both synced for now - console.log(`Selected project (post-update): ${selectedProjectName}`); - - // Enable/Disable Manage Files button based on whether a project is selected - manageFilesBtn.disabled = !selectedProjectName; - - - if (!selectedProjectName || !currentProjectData[selectedProjectName]) { - console.log("No project selected or no data for selected project. UI updates skipped."); - // Optionally clear the UI or show a message if selector isn't empty but data is missing - if (projectSelector.options.length > 0 && projectSelector.value) { - updateStatusBar(selectedProjectName, 'Waiting for data...', 'N/A'); - showProcessingStateUI(null); // Show generic loading - } else { - // Handled by the selector update logic above if projects list is empty - } - return; - } - - // Extract data for the selected project - const projectData = currentProjectData[selectedProjectName]; - - // Update status bar immediately for the selected project - updateStatusBar(selectedProjectName, projectData.status, projectData.last_commit); - - // Check the processing state and update UI accordingly - if (isProcessing(projectData.status)) { - console.log(`Project ${selectedProjectName} is processing. Showing loading state.`); - showProcessingStateUI(projectData); - } else { - console.log(`Project ${selectedProjectName} is ready/error. Showing final state.`); - // TODO: Add check here if commit hash changed? Or just always update? - // For now, always update the UI if the state is not 'processing'. - showReadyStateUI(projectData); - } -} - -// --- Debounced version of the processing function --- -const debouncedProcessUpdate = debounce(processUpdate, 250); // Single debouncer +// --- Debounced version of the processing function --- (Will move to sse.js) +// MOVED to sse.js +// const debouncedProcessUpdate = debounce(processUpdate, 250); // --- Modal Display Function (Needs PROJECT context) --- -function showDetailsModal(projectName, identifier, categoryType, context) { // Added projectName - let sourceData = null; - let panelNameDisplay = ""; - const listKeysMap = context === 'scada' ? scadaListKeysMap : drawingListKeysMap; - const listTypeLabel = categoryType === 'found' - ? (context === 'scada' ? 'Found in SCADA' : 'Found in Drawing') - : (context === 'scada' ? 'Not Found in SCADA' : 'Not Found in Drawing'); - - // Get the specific project's progress data - const projectProgress = (currentProjectData[projectName] && currentProjectData[projectName].progress) ? currentProjectData[projectName].progress : {}; - - if (identifier === '__overall__') { - sourceData = projectProgress.overall || null; - panelNameDisplay = `Overall (${projectName})`; - } else { - sourceData = (projectProgress.panels) ? projectProgress.panels[identifier] : null; - panelNameDisplay = `${identifier} (${projectName})`; - } - - if (!sourceData) { - console.error(`Could not find source data for modal. Project: ${projectName}, Identifier: ${identifier}, Context: ${context}`); - alert("Error: Could not load details data."); - return; - } - - const backendListKeys = listKeysMap[categoryType]; - if (!backendListKeys) { /* ... error handling ... */ return; } - - let combinedDataList = []; - backendListKeys.forEach(key => { - if (sourceData[key]) { - combinedDataList = combinedDataList.concat(sourceData[key]); - } - }); - - if (combinedDataList.length === 0) { /* ... alert handling ... */ return; } - - const modalTitleElement = document.getElementById('detailsModalLabel'); - const modalTableBody = document.querySelector('#detailsModal .modal-body tbody'); - - modalTitleElement.innerHTML = `${listTypeLabel} Items for ${panelNameDisplay} ${combinedDataList.length}`; - modalTableBody.innerHTML = ''; - - combinedDataList.sort((a, b) => a.alias.localeCompare(b.alias)).forEach(item => { - const row = document.createElement('tr'); - row.insertCell().textContent = item.alias; - row.insertCell().textContent = item.control_panel; - const scadaCell = row.insertCell(); scadaCell.innerHTML = item.found_scada ? 'Yes' : 'No'; - const drawingCell = row.insertCell(); drawingCell.innerHTML = item.found_drawing ? 'Yes' : 'No'; - row.insertCell().textContent = item.equipment_type || 'N/A'; - row.insertCell().textContent = item.conveyor_type || 'N/A'; - if (item.found_scada && !item.found_drawing) { row.classList.add('table-warning'); } - modalTableBody.appendChild(row); - }); - - if (!detailsModalInstance) { - detailsModalInstance = new bootstrap.Modal(document.getElementById('detailsModal')); - } - detailsModalInstance.show(); -} +// MOVED to modalManager.js +// function showDetailsModal(projectName, identifier, categoryType, context) { ... } // --- Update Status Bar Helper --- -function updateStatusBar(projectName, statusMsg, commitHash) { - document.getElementById('selected-project-status-name').textContent = projectName || '...'; - document.getElementById('status-message').textContent = statusMsg || 'N/A'; - document.getElementById('last-commit').textContent = commitHash || 'N/A'; -} +// MOVED to ui.js +// function updateStatusBar(projectName, statusMsg, commitHash) { ... } // --- Navigation Handling --- -function showSection(sectionId) { - console.log("Showing section:", sectionId); - document.getElementById('scada-content').style.display = 'none'; - document.getElementById('drawings-content').style.display = 'none'; - document.getElementById('conflicts-content').style.display = 'none'; +// MOVED to ui.js +// function showSection(sectionId) { ... } - const elementToShow = document.getElementById(`${sectionId}-content`); - if (elementToShow) { - elementToShow.style.display = 'block'; - currentVisibleSection = sectionId; +// --- Initialize SSE Connection --- (Will move to sse.js) +// MOVED to sse.js +// function initializeSSE() { ... } - // --- Update content based on current project state --- - const projectData = currentProjectData[selectedProjectName]; - if (projectData) { - const statusMsg = projectData.status; - console.log(`[ShowSection] Updating visible section ${sectionId} for project ${selectedProjectName}. Status: ${statusMsg}`); - if (isProcessing(statusMsg)) { - // Project is processing, ensure loading indicator is shown in the relevant containers for this section - console.log(`[ShowSection] Project processing, showing loading indicator for ${sectionId}.`); - if (sectionId === 'scada') { - showLoadingIndicator(document.getElementById('overall-scada-progress'), statusMsg); - showLoadingIndicator(document.getElementById('scada-panels-progress'), statusMsg); - } else if (sectionId === 'drawings') { - showLoadingIndicator(document.getElementById('overall-drawing-progress'), statusMsg); - showLoadingIndicator(document.getElementById('drawing-panels-progress'), statusMsg); - } else if (sectionId === 'conflicts') { - showLoadingIndicator(document.getElementById('panels-conflicts'), statusMsg); - } - // Destroy any charts that might have been left over (belt and braces) - if (sectionId === 'scada') { - Object.values(chartInstancesScada).forEach(chart => chart?.destroy()); - chartInstancesScada = {}; - } else if (sectionId === 'drawings') { - Object.values(chartInstancesDrawing).forEach(chart => chart?.destroy()); - chartInstancesDrawing = {}; - } - } else { - // Project is ready, trigger the specific update function for the visible section - console.log(`[ShowSection] Project ready, calling update function for ${sectionId}.`); - // Use setTimeout to ensure DOM update (display: block) is processed first - setTimeout(() => { - // Re-fetch projectData in case it changed slightly between checks - const currentData = currentProjectData[selectedProjectName]; - if (currentData && !isProcessing(currentData.status)) { // Double check status - if (sectionId === 'scada') { - updateUIScadaCore(currentData); - } else if (sectionId === 'drawings') { - updateUIDrawingCore(currentData); - } else if (sectionId === 'conflicts') { - updateUIConflictsCore(currentData); - } - } else { - console.log(`[ShowSection] Status changed to processing before UI update could run for ${sectionId}.`) - // If it became processing again, show indicator - showProcessingStateUI(currentData); - } - }, 0); // Delay slightly - } - } else { - console.log(`[ShowSection] Section ${sectionId} shown, but no data currently available for project ${selectedProjectName}.`); - // Show loading indicator in the visible section as data is missing - const msg = "Loading data..."; - if (sectionId === 'scada') { showLoadingIndicator(document.getElementById('overall-scada-progress'), msg); showLoadingIndicator(document.getElementById('scada-panels-progress'), msg); } - else if (sectionId === 'drawings') { showLoadingIndicator(document.getElementById('overall-drawing-progress'), msg); showLoadingIndicator(document.getElementById('drawing-panels-progress'), msg); } - else if (sectionId === 'conflicts') { showLoadingIndicator(document.getElementById('panels-conflicts'), msg); } - } - // --- End section update trigger --- - - } else { - console.error("Attempted to show unknown section:", sectionId); - document.getElementById('scada-content').style.display = 'block'; // Default back to SCADA - currentVisibleSection = 'scada'; - } - - // Update active nav link - document.querySelectorAll('.nav-link').forEach(link => { - link.classList.remove('active'); - // Match link's data-view attribute to sectionId - if (link.getAttribute('data-view') === sectionId) { - link.classList.add('active'); - } - }); -} - -document.addEventListener('DOMContentLoaded', () => { - console.log("DOM Loaded, setting up navigation and project selector..."); - - const projectSelector = document.getElementById('projectSelector'); - if(projectSelector) { - // Set initial selection based on first option (or potentially embedded initial data) - selectedProjectName = projectSelector.value; - projectSelector.addEventListener('change', handleProjectChange); - console.log(`Initial project selected: ${selectedProjectName}`); - // Update initial status bar text - const initialStatus = (initialServerData && initialServerData.status && initialServerData.status[selectedProjectName]) - ? initialServerData.status[selectedProjectName] - : 'Initializing...'; - updateStatusBar(selectedProjectName, initialStatus, 'N/A'); - } - - document.querySelectorAll('.nav-link').forEach(link => { - // Get the target section directly from the data-view attribute - const targetSection = link.getAttribute('data-view'); - - if (targetSection) { // Ensure the attribute exists - link.addEventListener('click', (event) => { - event.preventDefault(); // Prevent page reload - // Use the targetSection directly when calling showSection - showSection(targetSection); - }); - } else { - console.warn("Nav link found without data-view attribute:", link); - } - }); - - // Show initial section (SCADA by default) - showSection('scada'); - - setupAddProjectForm(); // Call the setup function for the new form - - // Event Listener for Project Selector Change - projectSelector.addEventListener('change', (event) => { - selectedProject = event.target.value; - console.log("Project selected:", selectedProject); - updateUIForSelectedProject(); - // Enable manage files button if a project is selected, disable if no project - manageFilesBtn.disabled = !selectedProject; - // If no project selected (e.g., placeholder), update display accordingly - if (!selectedProject) { - document.querySelectorAll('.project-name-display').forEach(span => span.textContent = 'No Project Selected'); - document.getElementById('status-message').textContent = 'N/A'; - document.getElementById('last-commit').textContent = 'N/A'; - document.getElementById('selected-project-status-name').textContent = '...'; - // Optionally clear charts/tables or show a placeholder message - clearAllProjectSpecificUI(); // Assuming a function to clear UI elements - } - }); - - // Event Listener for Add Project Form - const addProjectForm = document.getElementById('addProjectForm'); - if (addProjectForm) { - setupAddProjectForm(); // Call the setup function for the new form - } - - // --- NEW: Event Listeners for Manage Files Modal --- - const manageFilesModalElement = document.getElementById('manageFilesModal'); - const uploadPdfsForm = document.getElementById('uploadPdfsForm'); - const triggerAnalysisBtn = document.getElementById('triggerAnalysisBtn'); - - if (manageFilesBtn && manageFilesModalElement && uploadPdfsForm && triggerAnalysisBtn) { - // When the Manage Files modal is shown, fetch the PDF list - manageFilesModalElement.addEventListener('show.bs.modal', async () => { - if (!selectedProject) return; // Should not happen if button is enabled correctly - // Update modal title *before* loading - manageFilesModalElement.querySelectorAll('.project-name-display').forEach(span => { - span.textContent = selectedProject; - }); - // Clear previous statuses immediately - clearManageFilesStatusMessages(); - // Load files - await loadAndDisplayPdfs(selectedProject); - }); - - // Handle PDF Upload Form Submission - uploadPdfsForm.addEventListener('submit', handlePdfUploadSubmit); - - // Handle Trigger Analysis Button Click - triggerAnalysisBtn.addEventListener('click', handleTriggerAnalysisClick); - - // --- NEW: Handle Delete Project Button Click --- - const deleteProjectBtn = document.getElementById('deleteProjectBtn'); - if (deleteProjectBtn) { - deleteProjectBtn.addEventListener('click', handleDeleteProjectClick); - } else { - console.warn("Delete Project button (deleteProjectBtn) not found."); - } - - // --- NEW: Handle Manifest Upload Form Submit --- - const uploadManifestForm = document.getElementById('uploadManifestForm'); - if (uploadManifestForm) { - uploadManifestForm.addEventListener('submit', handleManifestUploadSubmit); - } else { - console.warn("Upload Manifest form (uploadManifestForm) not found."); - } - - } else { - console.warn("Manage Files Modal elements (button, modal, form, trigger btn) not all found. File management disabled."); - if(manageFilesBtn) manageFilesBtn.style.display = 'none'; // Hide button if modal isn't functional - } - - // --- Adjust Initial State Setting --- - const initialProjects = initialServerData.projects || []; - if (projectSelector.options.length > 0 && projectSelector.value) { - selectedProject = projectSelector.value; // Get initial value from selector - selectedProjectName = selectedProject; // Sync both - console.log("Initial project selected:", selectedProject); - if (manageFilesBtn) manageFilesBtn.disabled = !selectedProject; // Enable button if a project is initially selected - handleProjectChange(); // Call the main handler to set initial state correctly - connectEventSource(); // Connect to SSE - } else { - console.log("No projects found initially or selector empty."); - if (manageFilesBtn) manageFilesBtn.disabled = true; // Ensure button is disabled - document.querySelectorAll('.project-name-display').forEach(span => span.textContent = 'No Projects'); - updateStatusDisplay('No projects discovered.', '...', 'N/A'); - clearAllProjectSpecificUI(); - } - - // Initialize details modal instance (if it exists) - const detailsModalElement = document.getElementById('detailsModal'); - if (detailsModalElement) { - detailsModalInstance = new bootstrap.Modal(detailsModalElement); - } - - // Add event listeners for navigation tabs - document.querySelectorAll('#viewTabs .nav-link').forEach(tab => { - tab.addEventListener('click', (event) => { - event.preventDefault(); - const newView = event.target.getAttribute('data-view'); - switchView(newView); - }); - }); -}); - -// --- Connect to SSE stream (Single connection) --- -console.log("Initializing SSE connection..."); -eventSource = new EventSource("/stream"); - -eventSource.onmessage = function(event) { - try { - const data = JSON.parse(event.data); - debouncedProcessUpdate(data); // Call the single debounced processor - } catch (error) { - console.error("Error parsing SSE data:", error); - document.getElementById('status-message').textContent = 'Error processing update from server.'; - } -}; - -eventSource.onerror = function(err) { - console.error("EventSource failed:", err); - document.getElementById('status-message').textContent = 'Connection to server lost. Retrying...'; -}; - -console.log("SSE handler set up."); - -// --- Project Selector Change Handler --- -function handleProjectChange() { - selectedProjectName = document.getElementById('projectSelector').value; - selectedProject = selectedProjectName; // Keep synced - console.log(`Project selection changed to: ${selectedProjectName}`); - - // --- NEW: Explicitly destroy existing charts immediately --- - destroyAllCharts(); - // --- End Explicit destroy --- - - // Immediately update status bar for the selected project using stored data - const projectData = currentProjectData[selectedProjectName]; - if (projectData) { - console.log(`[Project Change] Data found for ${selectedProjectName}. Status: ${projectData.status}`); - updateStatusBar(selectedProjectName, projectData.status, projectData.last_commit); - - // Update UI based on the current state of the selected project - if (isProcessing(projectData.status)) { - console.log(`[Project Change] Project processing. Showing loading state.`); - showProcessingStateUI(projectData); - } else { - // Trigger a UI redraw using the stored data for the newly selected project - console.log(`[Project Change] Triggering redraw for newly selected project: ${selectedProjectName}`); - // Call showReadyStateUI AFTER destroying charts - showReadyStateUI(projectData); - } - } else { - // Handle case where data might not be available yet for the selected project OR no project selected - if (selectedProjectName) { // A project is selected, but data not yet available - const loadingStatus = 'Loading data...'; - console.log(`[Project Change] No data found yet for selected project: ${selectedProjectName}. Showing loading state.`); - updateStatusBar(selectedProjectName, loadingStatus, 'N/A'); - // Show processing/loading indicators in all sections - showProcessingStateUI(null); // Pass null to show generic loading message - } else { - // No project is selected (e.g., after deletion and list is empty) - console.log(`[Project Change] No project selected.`); - updateStatusBar('...', 'No project selected', 'N/A'); - clearAllProjectSpecificUI(); // Ensure UI is fully cleared - } - } - // Update manage files button state - manageFilesBtn.disabled = !selectedProjectName; -} - -// --- Initialize Add Project Form --- -function setupAddProjectForm() { - const form = document.getElementById('addProjectForm'); - const statusDiv = document.getElementById('addProjectStatus'); - const submitButton = form.querySelector('button[type="submit"]'); - - if (!form) { - console.log("Add Project form not found on this page."); - return; // Exit if the form isn't present - } - - form.addEventListener('submit', async (event) => { - event.preventDefault(); // Prevent default HTML form submission - statusDiv.style.display = 'none'; - statusDiv.textContent = ''; - statusDiv.className = 'mt-3 alert'; // Reset classes - submitButton.disabled = true; - statusDiv.classList.add('alert-info'); - statusDiv.textContent = 'Uploading project data...'; - statusDiv.style.display = 'block'; - - const formData = new FormData(form); - const projectNameInput = document.getElementById('projectName'); - - // Basic validation for project name (allow letters, numbers, underscore, hyphen) - const projectName = projectNameInput.value.trim(); - if (!/^[a-zA-Z0-9_-]+$/.test(projectName)) { - statusDiv.classList.remove('alert-info'); - statusDiv.classList.add('alert-danger'); - statusDiv.textContent = 'Invalid Project Name. Use only letters, numbers, underscores, or hyphens.'; - statusDiv.style.display = 'block'; - submitButton.disabled = false; - return; - } - - // Additional Client-Side Validation (Optional but recommended) - const manifestFile = document.getElementById('manifestFile').files[0]; - const pdfFiles = document.getElementById('pdfFiles').files; - - if (!manifestFile) { - statusDiv.classList.remove('alert-info'); - statusDiv.classList.add('alert-danger'); - statusDiv.textContent = 'Manifest CSV file is required.'; - statusDiv.style.display = 'block'; - submitButton.disabled = false; - return; - } - if (pdfFiles.length === 0) { - statusDiv.classList.remove('alert-info'); - statusDiv.classList.add('alert-danger'); - statusDiv.textContent = 'At least one Drawing PDF file is required.'; - statusDiv.style.display = 'block'; - submitButton.disabled = false; - return; - } - - try { - const response = await fetch('/add_project', { - method: 'POST', - body: formData // FormData handles multipart/form-data encoding - }); - - const result = await response.json(); - - statusDiv.classList.remove('alert-info'); - if (response.ok && result.success) { - statusDiv.classList.add('alert-success'); - statusDiv.textContent = result.message || 'Project added successfully.'; - form.reset(); // Clear the form on success - - // Hide the modal on success - const modalElement = form.closest('.modal'); - if (modalElement) { - const modalInstance = bootstrap.Modal.getInstance(modalElement); - if (modalInstance) { - modalInstance.hide(); - } else { - console.warn('Could not get modal instance to hide it.'); - } - } - // Re-enable button shortly after modal starts closing (optional, could leave disabled) - setTimeout(() => { submitButton.disabled = false; }, 500); - - } else { - statusDiv.classList.add('alert-danger'); - statusDiv.textContent = 'Error: ' + (result.message || 'Unknown error occurred.'); - submitButton.disabled = false; // Re-enable button on error - } - } catch (error) { - console.error('Error submitting add project form:', error); - statusDiv.classList.remove('alert-info'); - statusDiv.classList.add('alert-danger'); - statusDiv.textContent = 'Network error or server unavailable. Please try again.'; - submitButton.disabled = false; // Re-enable button on network error - } - statusDiv.style.display = 'block'; // Ensure status is visible - }); -} +// --- Project Selector Change Handler --- (Will move to events.js) +// MOVED to events.js +// function handleProjectChange() { ... } // --- NEW: File Management Functions --- +// These action handlers are now called by event listeners (setup in events.js) -async function loadAndDisplayPdfs(projectName) { +// Handles the overall process of loading and displaying PDFs in the modal +// Stays here as it coordinates API and Modal calls +async function handleLoadAndDisplayPdfs(projectName) { const pdfListDiv = document.getElementById('existingPdfList'); - const statusDiv = document.getElementById('manageFilesStatus'); - if (!pdfListDiv || !statusDiv) return; - - // --- NEW: Robustness Check --- - if (!projectName || !currentProjectData[projectName]) { - console.warn(`loadAndDisplayPdfs called for invalid or non-existent project: ${projectName}. Aborting.`); - pdfListDiv.innerHTML = '
Error: Invalid project selected.
'; - return; // Don't proceed if the project isn't valid in our current state - } - // --- End Robustness Check --- - - pdfListDiv.innerHTML = '
Loading files...
'; // Show loading state within list-group - statusDiv.style.display = 'none'; // Hide general status - + if (!pdfListDiv) return; + // ... robustness check ... + pdfListDiv.innerHTML = '
Loading files...
'; + uiClearManageFilesStatusMessages(); try { - // Use the validated projectName - const response = await fetch(`/list_pdfs/${encodeURIComponent(projectName)}`); - const data = await response.json(); - - pdfListDiv.innerHTML = ''; // Clear loading state - - if (!response.ok || !data.success) { - throw new Error(data.message || `Failed to list PDF files (HTTP ${response.status})`); - } - - if (data.files && data.files.length > 0) { - data.files.forEach(filename => { - const listItem = document.createElement('div'); - listItem.className = 'list-group-item d-flex justify-content-between align-items-center'; - - const nameSpan = document.createElement('span'); - nameSpan.textContent = filename; - nameSpan.title = filename; // Show full name on hover if needed - nameSpan.style.overflow = 'hidden'; - nameSpan.style.textOverflow = 'ellipsis'; - nameSpan.style.whiteSpace = 'nowrap'; - nameSpan.style.marginRight = '10px'; - - const deleteButton = document.createElement('button'); - deleteButton.className = 'btn btn-danger btn-sm flex-shrink-0'; // Prevent button shrinking - deleteButton.textContent = 'Delete'; - deleteButton.title = `Delete ${filename}`; - // Pass the validated projectName to the delete handler - deleteButton.onclick = () => handleDeletePdfClick(projectName, filename); - - listItem.appendChild(nameSpan); - listItem.appendChild(deleteButton); - pdfListDiv.appendChild(listItem); - }); - } else { - pdfListDiv.innerHTML = '
No PDF files found for this project.
'; - } - + const data = await apiListPdfs(projectName); + modalManagerPopulatePdfList(pdfListDiv, projectName, data.files || []); } catch (error) { console.error('Error loading PDF list:', error); pdfListDiv.innerHTML = '
Error loading files.
'; - showManageFilesStatus(`Error loading PDF list: ${error.message}`, 'danger'); + uiShowManageFilesStatus(`Error loading PDF list: ${error.message}`, 'danger'); } } -async function handleDeletePdfClick(projectName, filename) { - if (!confirm(`Are you sure you want to delete the file: ${filename}? This cannot be undone.`)) { - return; - } +// --- PDF Delete Handling (will move actual listener setup to events.js) --- +// This function is now called BY the event listener in events.js +// MOVED to events.js +// async function handlePdfDeleteAction(projectName, filename) { ... } - console.log(`Requesting deletion of ${filename} from project ${projectName}`); - clearManageFilesStatusMessages(); // Clear previous messages - showManageFilesStatus(`Deleting ${filename}...`, 'info'); // Show deleting status - try { - const response = await fetch(`/delete_pdf/${encodeURIComponent(projectName)}`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ filename: filename }) - }); +// --- PDF Upload Handling (will move listener setup to events.js) --- +// This function is now called BY the event listener in events.js +// MOVED to events.js +// async function handlePdfUploadAction(form) { ... } - const data = await response.json(); +// --- Trigger Analysis Handling (will move listener setup to events.js) --- +// This function is now called BY the event listener in events.js +// MOVED to events.js +// async function handleTriggerAnalysisAction() { ... } - if (!response.ok || !data.success) { - throw new Error(data.message || `Failed to delete PDF file (HTTP ${response.status})`); - } - showManageFilesStatus(data.message || `Successfully deleted ${filename}.`, 'success'); - // Refresh the list after deletion - await loadAndDisplayPdfs(projectName); - // Recommend triggering analysis - showAnalysisTriggerStatus('File deleted. Trigger analysis to update progress.', 'info'); +// --- Delete Project Handling (will move listener setup to events.js) --- +// This function is now called BY the event listener in events.js +// MOVED to events.js +// async function handleDeleteProjectAction() { ... } - } catch (error) { - console.error('Error deleting PDF:', error); - showManageFilesStatus(`Error deleting file: ${error.message}`, 'danger'); - } -} -async function handlePdfUploadSubmit(event) { - event.preventDefault(); - if (!selectedProject) return; +// --- Manifest Upload Handling (will move listener setup to events.js) --- +// This function is now called BY the event listener in events.js +// MOVED to events.js +// async function handleManifestUploadAction(form) { ... } - const form = event.target; - const formData = new FormData(form); - const fileInput = document.getElementById('newPdfFiles'); - const uploadStatusDiv = document.getElementById('uploadStatus'); - if (!fileInput || !fileInput.files || fileInput.files.length === 0) { - showUploadStatus('Please select at least one PDF file to upload.', 'warning'); - return; - } +// --- Initialize Add Project Form --- (will move listener setup to events.js) +// MOVED to events.js (The listener part) +// function setupAddProjectForm() { ... } - console.log(`Uploading ${fileInput.files.length} file(s) to project ${selectedProject}`); - clearManageFilesStatusMessages(); - showUploadStatus('Uploading files...', 'info', false); // Show persistent uploading message +// --- Event Listeners Setup (Will move to events.js) --- +// MOVED to events.js +// document.addEventListener('DOMContentLoaded', () => { ... }); - try { - const response = await fetch(`/upload_pdfs/${encodeURIComponent(selectedProject)}`, { - method: 'POST', - body: formData // FormData handles multipart/form-data automatically - }); +// --- Main Initialization --- +document.addEventListener('DOMContentLoaded', () => { + console.log("DOM Loaded, initializing application modules..."); - // Try to parse JSON regardless of status for potential error messages - let data = {}; - try { - data = await response.json(); - } catch(e) { - console.warn("Could not parse JSON response from upload endpoint."); - // If JSON parsing fails on error, create a basic error object - if (!response.ok) { - data = { success: false, message: `Upload failed with status ${response.status}. No error details available.` }; - } - } + // Initialize modal instances (must be done before listeners might use them) + initializeModals(); // From modalManager.js - if (!response.ok || !data.success) { - throw new Error(data.message || `File upload failed (HTTP ${response.status})`); - } + // Initialize UI state and attach all event listeners + initializeEventListeners(); // From events.js - showUploadStatus(data.message || `Successfully uploaded files.`, 'success'); - form.reset(); // Clear the file input - await loadAndDisplayPdfs(selectedProject); // Refresh the list - // Recommend triggering analysis - showAnalysisTriggerStatus('Files uploaded. Trigger analysis to update progress.', 'info'); + // Initialize Server-Sent Events connection + sseInitialize(); // From sse.js - } catch (error) { - console.error('Error uploading PDFs:', error); - showUploadStatus(`Upload failed: ${error.message}`, 'danger'); - } finally { - // Ensure the 'Uploading files...' message is cleared if it wasn't replaced by success/error - if (uploadStatusDiv && uploadStatusDiv.textContent === 'Uploading files...') { - uploadStatusDiv.style.display = 'none'; - } - } -} - -async function handleTriggerAnalysisClick() { - if (!selectedProject) return; - - console.log(`Requesting manual analysis trigger for project ${selectedProject}`); - clearManageFilesStatusMessages(); - showAnalysisTriggerStatus('Triggering analysis...', 'info', false); - - try { - const response = await fetch(`/trigger_analysis/${encodeURIComponent(selectedProject)}`, { - method: 'POST' - }); - - const data = await response.json(); - - if (!response.ok || !data.success) { - throw new Error(data.message || `Failed to trigger analysis (HTTP ${response.status})`); - } - - showAnalysisTriggerStatus(data.message || 'Analysis triggered successfully. Monitor status bar for updates.', 'success', false); // Keep success message visible - - } catch (error) { - console.error('Error triggering analysis:', error); - showAnalysisTriggerStatus(`Error: ${error.message}`, 'danger'); - } -} - -function showManageFilesStatus(message, type = 'info') { - const statusDiv = document.getElementById('manageFilesStatus'); - if (!statusDiv) return; - statusDiv.className = `mt-3 alert alert-${type}`; - statusDiv.textContent = message; - statusDiv.style.display = 'block'; -} - -function showUploadStatus(message, type = 'info', autoClear = true) { - const statusDiv = document.getElementById('uploadStatus'); - if (!statusDiv) return; - statusDiv.className = `mt-2 text-${type}`; - if (type === 'danger' || type === 'warning' || type === 'success') { - statusDiv.className += ' fw-bold'; - } - statusDiv.textContent = message; - statusDiv.style.display = 'block'; - // Clear previous timeouts if any - if (statusDiv.timeoutId) clearTimeout(statusDiv.timeoutId); - if (autoClear) { - statusDiv.timeoutId = setTimeout(() => { statusDiv.style.display = 'none'; statusDiv.timeoutId = null; }, 5000); // Hide after 5 seconds - } -} - -function showAnalysisTriggerStatus(message, type = 'info', autoClear = true) { - const statusDiv = document.getElementById('analysisTriggerStatus'); - if (!statusDiv) return; - statusDiv.className = `mt-2 text-${type}`; - if (type === 'danger' || type === 'warning' || type === 'success') { - statusDiv.className += ' fw-bold'; - } - statusDiv.textContent = message; - statusDiv.style.display = 'block'; - // Clear previous timeouts if any - if (statusDiv.timeoutId) clearTimeout(statusDiv.timeoutId); - if (autoClear) { - statusDiv.timeoutId = setTimeout(() => { statusDiv.style.display = 'none'; statusDiv.timeoutId = null; }, 8000); // Hide after 8 seconds (longer for analysis trigger) - } -} - -function clearManageFilesStatusMessages() { - const manageStatus = document.getElementById('manageFilesStatus'); - const uploadStatus = document.getElementById('uploadStatus'); - const analysisStatus = document.getElementById('analysisTriggerStatus'); - const deleteStatus = document.getElementById('deleteProjectStatus'); - const manifestStatus = document.getElementById('uploadManifestStatus'); // Added - if(manageStatus) manageStatus.style.display = 'none'; - if(uploadStatus) { uploadStatus.style.display = 'none'; if (uploadStatus.timeoutId) clearTimeout(uploadStatus.timeoutId); uploadStatus.timeoutId = null; } - if(analysisStatus) { analysisStatus.style.display = 'none'; if (analysisStatus.timeoutId) clearTimeout(analysisStatus.timeoutId); analysisStatus.timeoutId = null; } - if(deleteStatus) { deleteStatus.style.display = 'none'; if (deleteStatus.timeoutId) clearTimeout(deleteStatus.timeoutId); deleteStatus.timeoutId = null; } // Clear timeout for delete too - if(manifestStatus) { manifestStatus.style.display = 'none'; if (manifestStatus.timeoutId) clearTimeout(manifestStatus.timeoutId); manifestStatus.timeoutId = null; } // Added -} - -function clearAllProjectSpecificUI() { - console.log("[UI Clear] Clearing all project-specific UI elements."); - // Clear Overall Charts & Text - destroyAllCharts(); - - // Clear canvas elements and text placeholders - const overallScadaCanvas = document.getElementById('overall-scada-chart-canvas'); - const overallDrawingCanvas = document.getElementById('overall-drawing-chart-canvas'); - if (overallScadaCanvas) { - const ctx = overallScadaCanvas.getContext('2d'); - ctx.clearRect(0, 0, overallScadaCanvas.width, overallScadaCanvas.height); // Clear canvas visually - } - if (overallDrawingCanvas) { - const ctx = overallDrawingCanvas.getContext('2d'); - ctx.clearRect(0, 0, overallDrawingCanvas.width, overallDrawingCanvas.height); // Clear canvas visually - } - - const overallScadaText = document.getElementById('overall-scada-text'); - if (overallScadaText) overallScadaText.textContent = 'Found in SCADA: N/A'; - const overallDrawingText = document.getElementById('overall-drawing-text'); - if (overallDrawingText) overallDrawingText.textContent = 'Found in Drawing: N/A'; - - // Clear Panel Sections - const scadaPanelsContainer = document.getElementById('scada-panels-progress'); - const drawingPanelsContainer = document.getElementById('drawing-panels-progress'); - const conflictsContainer = document.getElementById('panels-conflicts'); - const defaultPanelMsg = '

Select a project to view data.

'; - - if(scadaPanelsContainer) scadaPanelsContainer.innerHTML = defaultPanelMsg; - if(drawingPanelsContainer) drawingPanelsContainer.innerHTML = defaultPanelMsg; - if(conflictsContainer) conflictsContainer.innerHTML = defaultPanelMsg; - - const conflictCount = document.getElementById('conflict-count'); - if (conflictCount) { - conflictCount.textContent = '0'; - conflictCount.style.display = 'none'; // Hide badge when cleared - } -} - -function destroyAllCharts() { - console.log("[Chart Destroy] Destroying all SCADA and Drawing chart instances."); - // Target the correct instance objects - Object.values(chartInstancesScada).forEach(chart => chart?.destroy()); - chartInstancesScada = {}; // Reset the object - - Object.values(chartInstancesDrawing).forEach(chart => chart?.destroy()); - chartInstancesDrawing = {}; // Reset the object -} - -// Add a helper to update UI for selected project -function updateUIForSelectedProject() { - // This function seems redundant now. handleProjectChange covers the logic. - // console.log("Updating UI for selected project:", selectedProject); - // We can likely remove calls to this function as well. - const data = currentProjectData[selectedProject]; - if (data) { - if (isProcessing(data.status)) { - showProcessingStateUI(data); - } else { - showReadyStateUI(data); - } - } else if (selectedProject) { - showProcessingStateUI(null); // Show loading if project selected but no data - } else { - clearAllProjectSpecificUI(); // Clear if no project selected - } -} - -// Add a helper to switch view -function switchView(newView) { - console.log("Switching to view:", newView); - showSection(newView); -} - -// Add a helper to update status display -function updateStatusDisplay(statusMessage, projectName, commitHash) { - const statusMsgSpan = document.getElementById('status-message'); - const statusProjSpan = document.getElementById('selected-project-status-name'); - const commitSpan = document.getElementById('last-commit'); - - if (statusMsgSpan) statusMsgSpan.textContent = statusMessage || 'N/A'; - if (statusProjSpan) statusProjSpan.textContent = projectName || '...'; - if (commitSpan) commitSpan.textContent = commitHash ? commitHash.substring(0, 7) : 'N/A'; // Show abbreviated hash - } - -// --- NEW: Delete Project Function --- -async function handleDeleteProjectClick() { - if (!selectedProject) { - showDeleteProjectStatus('No project selected to delete.', 'warning'); - return; - } - - // VERY IMPORTANT: Double confirmation with project name - const confirmation = prompt( - `This action is IRREVERSIBLE and will permanently delete the project '${selectedProject}' and all its data (manifest, PDFs, text files, cloned repository) from the server.\n\nType the project name '${selectedProject}' below to confirm deletion:` - ); - - if (confirmation !== selectedProject) { - showDeleteProjectStatus('Project deletion cancelled or confirmation mismatch.', 'info'); - return; - } - - console.log(`Requesting deletion of project ${selectedProject}`); - clearManageFilesStatusMessages(); // Clear other messages - showDeleteProjectStatus(`Deleting project '${selectedProject}'...`, 'info', false); // Show persistent status - // Optionally disable buttons while deleting - document.getElementById('deleteProjectBtn').disabled = true; - - try { - const response = await fetch(`/delete_project/${encodeURIComponent(selectedProject)}`, { - method: 'POST' // Backend route expects POST - }); - - const data = await response.json(); - - if (!response.ok || !data.success) { - throw new Error(data.message || `Failed to delete project (HTTP ${response.status})`); - } - - showDeleteProjectStatus(`Project '${selectedProject}' deleted successfully.`, 'success', false); - // Give user time to read the success message before closing modal - setTimeout(() => { - // Close the modal - const manageModalElem = document.getElementById('manageFilesModal'); - const manageModalInstance = bootstrap.Modal.getInstance(manageModalElem); - if (manageModalInstance) { - manageModalInstance.hide(); - } - - // Remove the project from the selector - const selector = document.getElementById('projectSelector'); - let newSelectedIndex = -1; - for (let i = 0; i < selector.options.length; i++) { - if (selector.options[i].value === selectedProject) { - // Determine next index to select (previous or first) - newSelectedIndex = (i > 0) ? i - 1 : 0; - selector.remove(i); - break; - } - } - - // Select the next/previous/first remaining project or clear UI - if (selector.options.length > 0) { - selector.selectedIndex = newSelectedIndex >= 0 ? newSelectedIndex : 0; - // Manually trigger the change handler for the new selection - handleProjectChange(); - } else { - // No projects left - selector.innerHTML = ''; - selectedProject = null; - selectedProjectName = null; // Clear global state var too - document.querySelectorAll('.project-name-display').forEach(span => span.textContent = 'No Projects'); - updateStatusDisplay('No projects available.', '...', 'N/A'); - clearAllProjectSpecificUI(); // Clear charts/tables - manageFilesBtn.disabled = true; // Disable manage files button - } - }, 1500); // Delay closing modal - - } catch (error) { - console.error('Error deleting project:', error); - showDeleteProjectStatus(`Error: ${error.message}`, 'danger', false); - // Re-enable button on error - document.getElementById('deleteProjectBtn').disabled = false; - } -} - -function showDeleteProjectStatus(message, type = 'info', autoClear = true) { - const statusDiv = document.getElementById('deleteProjectStatus'); - if (!statusDiv) return; - statusDiv.className = `mt-2 text-${type}`; - if (type === 'danger' || type === 'warning' || type === 'success') { - statusDiv.className += ' fw-bold'; - } - statusDiv.textContent = message; - statusDiv.style.display = 'block'; - - if (autoClear) { - // Clear previous timeouts if any - if (statusDiv.timeoutId) clearTimeout(statusDiv.timeoutId); - statusDiv.timeoutId = setTimeout(() => { statusDiv.style.display = 'none'; statusDiv.timeoutId = null; }, 6000); - } -} - -// --- NEW: Handle Manifest Upload Form Submission --- -async function handleManifestUploadSubmit(event) { - event.preventDefault(); - if (!selectedProject) return; - - const form = event.target; - const formData = new FormData(form); - const fileInput = document.getElementById('newManifestFile'); - const statusDiv = document.getElementById('uploadManifestStatus'); - - if (!fileInput || !fileInput.files || fileInput.files.length === 0) { - showUploadManifestStatus('Please select a manifest CSV file to upload.', 'warning'); - return; - } - const manifestFile = fileInput.files[0]; - if (!manifestFile.name.toLowerCase().endsWith('.csv')) { - showUploadManifestStatus('Invalid file type. Please select a .csv file.', 'warning'); - return; - } - - console.log(`Uploading new manifest for project ${selectedProject}`); - clearManageFilesStatusMessages(); - showUploadManifestStatus('Uploading manifest...', 'info', false); - - try { - const response = await fetch(`/upload_manifest/${encodeURIComponent(selectedProject)}`, { - method: 'POST', // Backend route expects POST - body: formData - }); - - const data = await response.json(); - - if (!response.ok || !data.success) { - throw new Error(data.message || `Failed to upload manifest (HTTP ${response.status})`); - } - - showUploadManifestStatus(data.message || 'Manifest updated successfully.', 'success'); - form.reset(); // Clear the file input - // Recommend triggering analysis - showAnalysisTriggerStatus('Manifest updated. Trigger analysis to see changes.', 'info'); - - } catch (error) { - console.error('Error uploading manifest:', error); - showUploadManifestStatus(`Upload failed: ${error.message}`, 'danger'); - } -} - -function showUploadManifestStatus(message, type = 'info', autoClear = true) { - const statusDiv = document.getElementById('uploadManifestStatus'); - if (!statusDiv) return; - statusDiv.className = `mt-2 text-${type}`; - if (type === 'danger' || type === 'warning' || type === 'success') { - statusDiv.className += ' fw-bold'; - } - statusDiv.textContent = message; - statusDiv.style.display = 'block'; - - if (autoClear) { - if (statusDiv.timeoutId) clearTimeout(statusDiv.timeoutId); - statusDiv.timeoutId = setTimeout(() => { statusDiv.style.display = 'none'; statusDiv.timeoutId = null; }, 5000); - } -} \ No newline at end of file + console.log("Application initialization complete."); +}); \ No newline at end of file diff --git a/static/js/sse.js b/static/js/sse.js new file mode 100644 index 0000000..86a2908 --- /dev/null +++ b/static/js/sse.js @@ -0,0 +1,166 @@ +// --- Server-Sent Events (SSE) Management --- + +// Note: Relies on several functions and variables being globally accessible: +// - Global state: currentProjectData, selectedProjectName, eventSource +// - State helpers: isProcessing, setSelectedProject +// - UI functions: uiUpdateStatusBar, uiShowProcessingState, uiClearProcessingState, uiUpdateProjectSelector, uiClearProjectDisplay +// - Core update functions: handleProjectChange, updateUIScadaCore, updateUIDrawingCore, updateUIConflictsCore +// - Utility: debounce + +/** + * Processes the full data update received from the SSE stream. + * Updates the internal state and triggers UI updates based on the data. + * @param {object} fullData - The complete data object from the server. + */ +function sseProcessUpdate(fullData) { + console.log("[SSE] Received Full Data:", fullData); + + // Store the latest full data globally + currentProjectData = {}; // Reset first + const incomingProjects = fullData.projects || []; + incomingProjects.forEach(projName => { + currentProjectData[projName] = { + status: fullData.status ? fullData.status[projName] : 'Unknown', + last_commit: fullData.last_commit ? fullData.last_commit[projName] : 'N/A', + // Ensure progress exists and has expected structure + progress: (fullData.progress && fullData.progress[projName]) + ? fullData.progress[projName] + : { overall: {}, panels: {} } + }; + }); + + // --- Update Project Selector Dropdown --- + const selectionChanged = uiUpdateProjectSelector(incomingProjects); + if (selectionChanged) { + // If the selection was forced (e.g., previous deleted, list empty) + // handleProjectChange will update the UI for the new/empty selection + console.log("[SSE] Project selection changed by dropdown update. Calling handleProjectChange."); + handleProjectChange(); // Needs global access + return; // Stop further processing here + } + + // --- Process data for the currently selected project --- + const currentSelection = document.getElementById('projectSelector')?.value; // Check selector exists + // Update global state if needed (should normally match after selector update) + if (selectedProjectName !== currentSelection) { + setSelectedProject(currentSelection); // Needs global access + } + + if (!selectedProjectName || !currentProjectData[selectedProjectName]) { + console.log("[SSE] No project selected or no data available for selected project."); + // Update UI to reflect lack of selection/data + const projectSelector = document.getElementById('projectSelector'); + if (projectSelector && projectSelector.options.length > 0 && projectSelector.value) { + uiUpdateStatusBar(selectedProjectName, 'Waiting for data...', 'N/A'); + uiShowProcessingState('Waiting for data...'); + } else { + uiUpdateStatusBar('...', 'No projects available', 'N/A'); + uiClearProjectDisplay(); + } + return; + } + + const projectData = currentProjectData[selectedProjectName]; + + // Update status bar immediately + uiUpdateStatusBar(selectedProjectName, projectData.status, projectData.last_commit); + + // Update main UI based on processing state + if (isProcessing(projectData.status)) { // Needs global access + console.log(`[SSE] Project ${selectedProjectName} is processing.`); + // If *any* project is processing, the global flag should remain true + // (or be set to true if it wasn't already) + isAnalysisGloballyActive = true; + console.log(`[State] isAnalysisGloballyActive set/kept true due to processing status: "${projectData.status}"`); + uiShowProcessingState(projectData.status); + } else { + console.log(`[SSE] Project ${selectedProjectName} is ready/error.`); + // --- Update Global Flag: Check if ANY project is still processing --- + let anyProjectStillProcessing = false; + const projectNames = Object.keys(currentProjectData); + for (const projName of projectNames) { + if (currentProjectData[projName] && isProcessing(currentProjectData[projName].status)) { + anyProjectStillProcessing = true; + console.log(`[State] Project ${projName} is still processing. Keeping isAnalysisGloballyActive true.`); + break; // Found one, no need to check others + } + } + if (!anyProjectStillProcessing) { + isAnalysisGloballyActive = false; + console.log("[State] No projects are processing. isAnalysisGloballyActive set to false."); + } + // --- End Global Flag Update --- + + uiClearProcessingState(); + // Call core redraws immediately + const latestData = currentProjectData[selectedProjectName]; // Get current data + if(latestData && !isProcessing(latestData.status)) { // Double-check status + console.log("[SSE] Triggering immediate redraw after non-processing update."); + updateUIScadaCore(latestData); // Needs global access + updateUIDrawingCore(latestData); // Needs global access + updateUIConflictsCore(latestData); // Needs global access + } else { + // If state somehow changed *back* to processing (unlikely here, but safe check) + console.warn("[SSE] State seems to indicate processing immediately after non-processing update."); + uiShowProcessingState(latestData?.status || "Processing..."); + } + } +} + +// Create a debounced version of the process update function +const debouncedProcessUpdate = debounce(sseProcessUpdate, 250); + +/** + * Initializes the Server-Sent Events connection and sets up message handlers. + */ +function sseInitialize() { + console.log("[SSE] Initializing connection..."); + // Use global eventSource variable from state.js + if (eventSource) { + console.log("[SSE] Closing existing connection."); + eventSource.close(); + } + + try { + eventSource = new EventSource("/stream"); + + eventSource.onmessage = function(event) { + try { + const data = JSON.parse(event.data); + // Call the debounced processor + debouncedProcessUpdate(data); + } catch (error) { + console.error("[SSE] Error parsing data:", error, "Data:", event.data); + // Update UI to show error + uiUpdateStatusBar(selectedProjectName, 'Error processing server update.', 'N/A'); + } + }; + + eventSource.onerror = function(err) { + console.error("[SSE] Connection error:", err); + // Update UI to show error + uiUpdateStatusBar(selectedProjectName, 'Connection lost. Retrying...', 'N/A'); + // Simple retry mechanism: close and re-initialize after a delay + if (eventSource) { + eventSource.close(); + eventSource = null; // Nullify to allow re-creation + } + setTimeout(sseInitialize, 5000); // Attempt to reconnect after 5 seconds + }; + + eventSource.onopen = function() { + console.log("[SSE] Connection opened."); + // Optionally update UI to show connected status + uiUpdateStatusBar(selectedProjectName, "Connected. Waiting for updates...", currentProjectData[selectedProjectName]?.last_commit); + }; + + console.log("[SSE] Event handlers set up."); + + } catch (error) { + console.error("[SSE] Failed to create EventSource:", error); + uiUpdateStatusBar(selectedProjectName, 'Failed to connect to server.', 'N/A'); + } +} + +// --- Export (if using modules) --- +// export { sseInitialize }; \ No newline at end of file diff --git a/static/js/state.js b/static/js/state.js new file mode 100644 index 0000000..75fc66a --- /dev/null +++ b/static/js/state.js @@ -0,0 +1,84 @@ +// --- Global State Variables --- +// MOVED chart instances to chartManager.js +// let chartInstancesScada = {}; // Separate instances for SCADA +// let chartInstancesDrawing = {}; // Separate instances for Drawing +let currentProjectData = {}; // Stores the LATEST full data received from SSE { project: {status, commit, progress}, ... } +let selectedProjectName = null; // Track the currently selected project (string) +let selectedProject = null; // Duplicate of selectedProjectName? Keep for now, investigate later. +// MOVED to modalManager.js +// let detailsModalInstance = null; // Bootstrap modal instance for the details popup +let currentVisibleSection = 'scada'; // Track visible section: 'scada', 'drawings', 'conflicts' +let eventSource = null; // Reference to the SSE EventSource object +let initialStatuses = {}; // Initial statuses passed from server (if any) +let isAnalysisGloballyActive = false; // NEW: Flag to indicate if *any* background analysis/check might be running + +// Map backend list keys for modal clicks +const scadaListKeysMap = { + found: ['found_both_list', 'found_scada_only_list'], + notFound: ['found_drawing_only_list', 'missing_list'] +}; +const drawingListKeysMap = { + found: ['found_both_list', 'found_drawing_only_list'], + notFound: ['found_scada_only_list', 'missing_list'] +}; + + +// --- Utility Functions --- + +// Debounce function to limit the rate at which a function can fire. +function debounce(func, wait) { + let timeout; + return function executedFunction(...args) { + const later = () => { + clearTimeout(timeout); + func(...args); + }; + clearTimeout(timeout); + timeout = setTimeout(later, wait); + }; +} + +// Checks if the status message indicates ongoing processing +function isProcessing(statusMsg) { + if (!statusMsg) return false; // Handle undefined/null status + const lowerStatus = statusMsg.toLowerCase(); + + // --- Keywords that indicate FINAL/NON-PROCESSING states --- + // (Return false immediately if any of these are found) + if (lowerStatus.includes('analysis complete') || + lowerStatus.includes('no changes') || // Covers "Checked repo... No changes." + lowerStatus.includes('error') || // Any error message is a final state + lowerStatus.includes('warning') || // Warnings are usually non-processing + lowerStatus.includes('n/a') || // Not applicable / initial state before selection + lowerStatus.includes('no project') || // No project selected state + lowerStatus.includes('updated successfully') || // Manifest/PDF upload success + lowerStatus.includes('deleted successfully') // PDF/Project deletion success + ) { + return false; + } + + // --- Keywords indicating ACTIVE processing --- + // (Return true if any of these are found AFTER checking final states) + return lowerStatus.includes('initializ') || // initializing, initial... + lowerStatus.includes('cloning') || + lowerStatus.includes('fetching') || + lowerStatus.includes('pulling') || + lowerStatus.includes('checking') || // checking repo, checking scada, checking drawings (but NOT "Checked repo... no changes") + lowerStatus.includes('reading manifest') || + lowerStatus.includes('calculating') || + lowerStatus.includes('extracting') || // If PDF extraction status is sent + lowerStatus.includes('loading data') || // From handleProjectChange initial state + lowerStatus.includes('pending') || // e.g., Re-analysis pending + lowerStatus.includes('triggered'); // e.g., Manual analysis triggered... +} + +// Function to update the selected project state globally +function setSelectedProject(projectName) { + selectedProjectName = projectName; + selectedProject = projectName; // Keep both synced for now + console.log(`[State] Selected project updated to: ${selectedProjectName}`); +} + +// --- Export (if using modules in the future) --- +// export { chartInstancesScada, chartInstancesDrawing, currentProjectData, selectedProjectName, ... }; +// For now, these are global, but designed for future modularity. \ No newline at end of file diff --git a/static/js/ui.js b/static/js/ui.js new file mode 100644 index 0000000..5bf44be --- /dev/null +++ b/static/js/ui.js @@ -0,0 +1,532 @@ +// --- UI Update Functions --- + +// Store references to frequently used DOM elements +const uiElements = { + overallScadaProgress: document.getElementById('overall-scada-progress'), + scadaPanelsProgress: document.getElementById('scada-panels-progress'), + overallDrawingProgress: document.getElementById('overall-drawing-progress'), + drawingPanelsProgress: document.getElementById('drawing-panels-progress'), + panelsConflicts: document.getElementById('panels-conflicts'), + overallScadaText: document.getElementById('overall-scada-text'), + overallDrawingText: document.getElementById('overall-drawing-text'), + conflictCountBadge: document.getElementById('conflict-count'), + statusBarProjectName: document.getElementById('selected-project-status-name'), + statusBarMessage: document.getElementById('status-message'), + statusBarCommit: document.getElementById('last-commit'), + scadaContent: document.getElementById('scada-content'), + drawingsContent: document.getElementById('drawings-content'), + conflictsContent: document.getElementById('conflicts-content'), + navLinks: document.querySelectorAll('.nav-link'), + projectNameDisplays: document.querySelectorAll('.project-name-display'), + // Status message elements for Manage Files modal + manageFilesStatus: document.getElementById('manageFilesStatus'), + uploadStatus: document.getElementById('uploadStatus'), + analysisTriggerStatus: document.getElementById('analysisTriggerStatus'), + deleteProjectStatus: document.getElementById('deleteProjectStatus'), + uploadManifestStatus: document.getElementById('uploadManifestStatus') +}; + +// --- Loading Indicators --- + +/** + * Displays a loading indicator within a container element. + * @param {HTMLElement} containerElement - The DOM element to show the indicator in. + * @param {string} message - The message to display below the spinner. + */ +function uiShowLoadingIndicator(containerElement, message = "Processing data...") { + if (!containerElement) return; + + let indicatorDiv = containerElement.querySelector('.processing-indicator'); + + // --- Check if projects exist --- + const projectSelector = document.getElementById('projectSelector'); + const noProjectsExist = projectSelector && projectSelector.options.length === 1 && projectSelector.options[0].disabled; + // Determine appropriate message if none was explicitly provided + let displayMessage = message; + if (message === "Processing data..." || message === "Select a project" || message === "Loading data...") { // Check against default/generic messages + displayMessage = noProjectsExist ? "No projects available. Please add one." : (selectedProjectName ? "Loading data..." : "Select a project"); + } + // --- End Check --- + + if (!indicatorDiv) { + // If indicator doesn't exist, clear the container first + containerElement.innerHTML = ''; + // Create and add the indicator + indicatorDiv = document.createElement('div'); + indicatorDiv.className = 'text-center p-4 processing-indicator'; + indicatorDiv.innerHTML = ` +
+ Loading... +
+

+ `; + containerElement.prepend(indicatorDiv); + } else { + // If indicator already exists, ensure it's visible (it might have been hidden) + indicatorDiv.style.display = 'block'; + } + + // Update message (simple text sanitization) + const messageElement = indicatorDiv.querySelector('p'); + if (messageElement) { + // Use the determined displayMessage + const safeMessage = displayMessage.replace(//g, ">"); + messageElement.textContent = safeMessage; + } +} + +/** + * Removes the loading indicator from a container element and restores content visibility. + * @param {HTMLElement} containerElement - The DOM element to clear the indicator from. + */ +function uiClearLoadingIndicator(containerElement) { + if (!containerElement) return; + + const indicatorDiv = containerElement.querySelector('.processing-indicator'); + if (indicatorDiv) { + // Remove the indicator element completely + indicatorDiv.remove(); + } + + // No longer need to manage 'content-hidden-by-loader' class + + // Remove default "Loading panel data..." placeholders if they still exist + const placeholderP = Array.from(containerElement.querySelectorAll('p.fst-italic')).find(p => + p.textContent.toLowerCase().includes('loading') && + !p.closest('.processing-indicator') + ); + if (placeholderP) { + placeholderP.remove(); + } +} + +// --- Overall UI State --- + +/** + * Sets the entire UI to reflect a processing state, showing loading indicators. + * @param {string} statusMsg - The status message to display in the indicators. + */ +function uiShowProcessingState(statusMsg = "Loading data...") { + console.log(`[UI] Setting processing state: "${statusMsg}"`); + const containers = [ + uiElements.overallScadaProgress, + uiElements.scadaPanelsProgress, + uiElements.overallDrawingProgress, + uiElements.drawingPanelsProgress, + uiElements.panelsConflicts + ]; + + // Destroy existing charts (delegated to chartManager) + chartManagerDestroyAll(); + + // Show loading indicator in all main content containers + containers.forEach(container => { + if (container) { + uiShowLoadingIndicator(container, statusMsg); + } + }); + + // Clear text content that is updated directly + if (uiElements.overallScadaText) uiElements.overallScadaText.textContent = ''; + if (uiElements.overallDrawingText) uiElements.overallDrawingText.textContent = ''; + if (uiElements.conflictCountBadge) { + uiElements.conflictCountBadge.textContent = '...'; + uiElements.conflictCountBadge.style.display = 'inline-block'; // Show badge while loading + } + + // Ensure the currently selected section's container is visible + // (uiShowSection handles this, but good belt-and-braces) + const sectionId = currentVisibleSection; // Assumes currentVisibleSection is accessible (global state) + if (sectionId === 'scada' && uiElements.scadaContent) uiElements.scadaContent.style.display = 'block'; + else if (sectionId === 'drawings' && uiElements.drawingsContent) uiElements.drawingsContent.style.display = 'block'; + else if (sectionId === 'conflicts' && uiElements.conflictsContent) uiElements.conflictsContent.style.display = 'block'; +} + +/** + * Clears loading indicators and prepares the UI for content rendering. + * Note: Actual content rendering is triggered by calling core update functions. + */ +function uiClearProcessingState() { + console.log(`[UI] Clearing processing state.`); + const containers = [ + uiElements.overallScadaProgress, + uiElements.scadaPanelsProgress, + uiElements.overallDrawingProgress, + uiElements.drawingPanelsProgress, + uiElements.panelsConflicts + ]; + containers.forEach(container => { + if (container) uiClearLoadingIndicator(container); + }); +} + +// --- Section/Tab Navigation --- + +/** + * Shows the specified content section and hides others. Updates active nav link. + * @param {string} sectionId - 'scada', 'drawings', or 'conflicts'. + */ +function uiShowSection(sectionId) { + console.log("[UI] Showing section:", sectionId); + // Hide all sections first + if (uiElements.scadaContent) uiElements.scadaContent.style.display = 'none'; + if (uiElements.drawingsContent) uiElements.drawingsContent.style.display = 'none'; + if (uiElements.conflictsContent) uiElements.conflictsContent.style.display = 'none'; + + let elementToShow = null; + if (sectionId === 'scada' && uiElements.scadaContent) elementToShow = uiElements.scadaContent; + else if (sectionId === 'drawings' && uiElements.drawingsContent) elementToShow = uiElements.drawingsContent; + else if (sectionId === 'conflicts' && uiElements.conflictsContent) elementToShow = uiElements.conflictsContent; + + if (elementToShow) { + elementToShow.style.display = 'block'; + // Update global state (This might move to an event handler later) + currentVisibleSection = sectionId; + console.log(`[UI] Current visible section set to: ${currentVisibleSection}`); + + // Trigger redraw of the newly visible section + // Needs access to global state: currentProjectData, selectedProjectName, isAnalysisGloballyActive + const projectData = currentProjectData[selectedProjectName]; + // Check if analysis is globally marked as active OR if the specific project status indicates processing + const analysisIsActive = typeof isAnalysisGloballyActive !== 'undefined' && isAnalysisGloballyActive; + const projectIsProcessing = projectData && isProcessing(projectData.status); // isProcessing needs to be accessible + + if (analysisIsActive || projectIsProcessing) { + const statusMsg = projectData?.status || "Analysis in progress..."; // Use project status if available, otherwise generic message + console.log(`[UI] Section ${sectionId} shown, project processing. Status: "${statusMsg}"`); + // Ensure loading indicator is visible in the right place + if (sectionId === 'scada') { + uiShowLoadingIndicator(uiElements.overallScadaProgress, statusMsg); + uiShowLoadingIndicator(uiElements.scadaPanelsProgress, statusMsg); + } else if (sectionId === 'drawings') { + uiShowLoadingIndicator(uiElements.overallDrawingProgress, statusMsg); + uiShowLoadingIndicator(uiElements.drawingPanelsProgress, statusMsg); + } else if (sectionId === 'conflicts') { + uiShowLoadingIndicator(uiElements.panelsConflicts, statusMsg); + } + chartManagerDestroyAll(); // Ensure charts are gone if processing + + } else if (projectData) { // Project exists and is NOT processing + // Project is ready, draw the content immediately + console.log(`[UI] Section ${sectionId} shown, project ready. Drawing content.`); + + // Double check status before actually drawing (good practice) + const currentData = currentProjectData[selectedProjectName]; + const stillNotProcessing = currentData && !isProcessing(currentData.status); + const stillGloballyInactive = typeof isAnalysisGloballyActive !== 'undefined' && !isAnalysisGloballyActive; + + if (stillNotProcessing && stillGloballyInactive) { + // Explicitly clear any loading indicators before drawing + uiClearProcessingState(); + + // Call core update functions directly + if (sectionId === 'scada') updateUIScadaCore(currentData); + else if (sectionId === 'drawings') updateUIDrawingCore(currentData); + else if (sectionId === 'conflicts') updateUIConflictsCore(currentData); + } else { + // If state somehow changed back to processing *just* as we switched tabs, show loading + const currentStatusMsg = currentData?.status || (isAnalysisGloballyActive ? "Analysis in progress..." : "State changed..."); + console.log(`[UI] Status changed back to processing just before drawing for ${sectionId}. Status: "${currentStatusMsg}"`); + uiShowProcessingState(currentStatusMsg); + } + + } else { // No project data found for the selected project + console.log(`[UI] Section ${sectionId} shown, but no data for project ${selectedProjectName}. Showing loading.`); + // Show loading indicator as data is missing or project not selected + // --- Check if projects exist --- + const projectSelectorCheck = document.getElementById('projectSelector'); + const noProjectsExistCheck = projectSelectorCheck && projectSelectorCheck.options.length === 1 && projectSelectorCheck.options[0].disabled; + const msg = noProjectsExistCheck ? "No projects available. Please add one." : (selectedProjectName ? "Loading data..." : "Select a project"); + // --- End Check --- + if (sectionId === 'scada') { uiShowLoadingIndicator(uiElements.overallScadaProgress, msg); uiShowLoadingIndicator(uiElements.scadaPanelsProgress, msg); } + else if (sectionId === 'drawings') { uiShowLoadingIndicator(uiElements.overallDrawingProgress, msg); uiShowLoadingIndicator(uiElements.drawingPanelsProgress, msg); } + else if (sectionId === 'conflicts') { uiShowLoadingIndicator(uiElements.panelsConflicts, msg); } + } + } else { + console.error("[UI] Attempted to show unknown section:", sectionId); + // Default back to SCADA maybe? + if(uiElements.scadaContent) uiElements.scadaContent.style.display = 'block'; + currentVisibleSection = 'scada'; + } + + // Update active nav link state + uiElements.navLinks.forEach(link => { + link.classList.remove('active'); + if (link.getAttribute('data-view') === sectionId) { + link.classList.add('active'); + } + }); +} + + +// --- Content Updates --- + +/** + * Updates all elements displaying the current project name. + * @param {string} projectName - The name of the project. + */ +function uiUpdateProjectNameDisplay(projectName) { + uiElements.projectNameDisplays.forEach(el => el.textContent = projectName || '...'); +} + +/** + * Updates the status bar content. + * @param {string} projectName - Name of the current project. + * @param {string} statusMsg - Status message to display. + * @param {string} commitHash - Last commit hash (abbreviated). + */ +function uiUpdateStatusBar(projectName, statusMsg, commitHash) { + if (uiElements.statusBarProjectName) uiElements.statusBarProjectName.textContent = projectName || '...'; + if (uiElements.statusBarMessage) uiElements.statusBarMessage.textContent = statusMsg || 'N/A'; + if (uiElements.statusBarCommit) uiElements.statusBarCommit.textContent = commitHash ? commitHash.substring(0, 7) : 'N/A'; +} + +/** + * Updates the text displaying overall statistics for SCADA or Drawing views. + * @param {string} context - 'scada' or 'drawing'. + * @param {number} foundCount - Number of items found. + * @param {number} totalCount - Total number of items. + * @param {number} percentage - Calculated percentage found. + */ +function uiUpdateOverallStatsText(context, foundCount, totalCount, percentage) { + const element = context === 'scada' ? uiElements.overallScadaText : uiElements.overallDrawingText; + if (element) { + element.textContent = context === 'scada' + ? `Found in SCADA: ${foundCount}/${totalCount} (${percentage}%)` + : `Found in Drawing: ${foundCount}/${totalCount} (${percentage}%)`; + } else { + console.warn(`[UI] Element not found for overall stats text: ${context}`); + } +} + +/** + * Updates the conflicts table display. + * @param {object} panelsData - The panels data containing conflict lists. + */ +function uiUpdateConflictsTable(panelsData) { + const container = uiElements.panelsConflicts; + if (!container) return; + + container.innerHTML = ''; // Clear previous content + + let totalConflicts = 0; + let panelsWithConflicts = 0; + + if (!panelsData || Object.keys(panelsData).length === 0) { + container.innerHTML = '

No panel data available yet.

'; + } else { + const sortedPanels = Object.keys(panelsData).sort(); + sortedPanels.forEach(panelName => { + const panel = panelsData[panelName]; + const conflictsList = panel.found_scada_only_list || []; + if (conflictsList.length > 0) { + panelsWithConflicts++; + totalConflicts += conflictsList.length; + + const panelHeader = document.createElement('h4'); + panelHeader.className = 'mt-4 mb-2'; + panelHeader.textContent = `${panelName} (${conflictsList.length} conflicts)`; + container.appendChild(panelHeader); + + const table = document.createElement('table'); + table.className = 'table table-sm table-striped table-hover table-bordered'; + table.innerHTML = ` + + AliasPanelSCADA StatusDrawing StatusEquipment TypeType of Conveyor + + + `; + const tbody = table.querySelector('tbody'); + conflictsList.sort((a, b) => a.alias.localeCompare(b.alias)).forEach(item => { + const row = tbody.insertRow(); + row.classList.add('table-warning'); + row.insertCell().textContent = item.alias; + row.insertCell().textContent = item.control_panel; + row.insertCell().innerHTML = 'Yes'; + row.insertCell().innerHTML = 'No'; + row.insertCell().textContent = item.equipment_type || 'N/A'; + row.insertCell().textContent = item.conveyor_type || 'N/A'; + }); + container.appendChild(table); + } + }); + if (panelsWithConflicts === 0) { + container.innerHTML = '

No conflicts found across all panels.

'; + } + } + // Update total count badge + if (uiElements.conflictCountBadge) { + uiElements.conflictCountBadge.textContent = totalConflicts; + uiElements.conflictCountBadge.style.display = totalConflicts > 0 ? 'inline-block' : 'none'; + } +} + +/** + * Clears all project-specific display areas (charts, text, tables). + */ +function uiClearProjectDisplay() { + console.log("[UI] Clearing project display."); + // Clear charts (delegated) + chartManagerDestroyAll(); + + // Clear text + if (uiElements.overallScadaText) uiElements.overallScadaText.textContent = 'Found in SCADA: N/A'; + if (uiElements.overallDrawingText) uiElements.overallDrawingText.textContent = 'Found in Drawing: N/A'; + if (uiElements.conflictCountBadge) { + uiElements.conflictCountBadge.textContent = '0'; + uiElements.conflictCountBadge.style.display = 'none'; + } + + // Clear containers + // --- Check if projects exist --- + const projectSelector = document.getElementById('projectSelector'); + const noProjectsExist = projectSelector && projectSelector.options.length === 1 && projectSelector.options[0].disabled; + const defaultMsg = noProjectsExist + ? "

No projects loaded. Use 'Add Project' to create one.

" + : "

Select a project to view data.

"; + // --- End Check --- + + if(uiElements.scadaPanelsProgress) uiElements.scadaPanelsProgress.innerHTML = defaultMsg; + if(uiElements.drawingPanelsProgress) uiElements.drawingPanelsProgress.innerHTML = defaultMsg; + if(uiElements.panelsConflicts) uiElements.panelsConflicts.innerHTML = defaultMsg; +} + +// --- Status Messages --- + +/** + * Shows a status message in a specific element, optionally auto-clearing. + * @param {HTMLElement} element - The status display element. + * @param {string} message - The message to show. + * @param {string} type - 'info', 'success', 'warning', 'danger'. + * @param {boolean} autoClear - Whether to hide the message after a delay. + * @param {number} delay - Delay in milliseconds for auto-clear. + */ +function uiShowStatusMessage(element, message, type = 'info', autoClear = true, delay = 5000) { + if (!element) return; + // Use text-based classes for inline messages, alert classes for block messages + const isAlert = element.classList.contains('alert'); + if (isAlert) { + element.className = `mt-3 alert alert-${type}`; + } else { + element.className = `mt-2 text-${type}`; + if (type === 'danger' || type === 'warning' || type === 'success') { + element.className += ' fw-bold'; + } + } + element.textContent = message; + element.style.display = 'block'; + + // Clear previous timeouts if any + if (element.timeoutId) clearTimeout(element.timeoutId); + element.timeoutId = null; // Clear the stored ID + + if (autoClear) { + element.timeoutId = setTimeout(() => { + element.style.display = 'none'; + element.timeoutId = null; + }, delay); + } +} + +function uiShowManageFilesStatus(message, type = 'info') { + uiShowStatusMessage(uiElements.manageFilesStatus, message, type, false); // Not auto-clearing by default +} + +function uiShowUploadStatus(message, type = 'info', autoClear = true) { + uiShowStatusMessage(uiElements.uploadStatus, message, type, autoClear, 5000); +} + +function uiShowAnalysisTriggerStatus(message, type = 'info', autoClear = true) { + uiShowStatusMessage(uiElements.analysisTriggerStatus, message, type, autoClear, 8000); +} + +function uiShowDeleteProjectStatus(message, type = 'info', autoClear = true) { + uiShowStatusMessage(uiElements.deleteProjectStatus, message, type, autoClear, 6000); +} + +function uiShowUploadManifestStatus(message, type = 'info', autoClear = true) { + uiShowStatusMessage(uiElements.uploadManifestStatus, message, type, autoClear, 5000); +} + +/** Clears all status messages within the Manage Files modal. */ +function uiClearManageFilesStatusMessages() { + const elements = [ + uiElements.manageFilesStatus, + uiElements.uploadStatus, + uiElements.analysisTriggerStatus, + uiElements.deleteProjectStatus, + uiElements.uploadManifestStatus + ]; + elements.forEach(element => { + if (element) { + element.style.display = 'none'; + if (element.timeoutId) { + clearTimeout(element.timeoutId); + element.timeoutId = null; + } + } + }); +} + + +// --- Project Selector Update --- +/** + * Rebuilds the project selector dropdown based on the provided list. + * Tries to maintain the current selection if possible. + * @param {Array} incomingProjects - List of project names. + * @returns {boolean} - True if the selection was changed/reset, false otherwise. + */ +function uiUpdateProjectSelector(incomingProjects) { + const projectSelector = document.getElementById('projectSelector'); // Get fresh reference + if (!projectSelector) return false; + + const currentOptions = Array.from(projectSelector.options).map(opt => opt.value); + const previouslySelected = projectSelector.value; + let selectionChanged = false; + + // Check if the list of projects has actually changed + const hasChanged = incomingProjects.length !== currentOptions.length || + incomingProjects.some(p => !currentOptions.includes(p)) || + currentOptions.some(p => !incomingProjects.includes(p)); + + if (hasChanged) { + console.log("[UI] Project list changed. Rebuilding project selector."); + projectSelector.innerHTML = ''; // Clear existing options + + if (incomingProjects.length > 0) { + incomingProjects.sort().forEach(projName => { + const option = document.createElement('option'); + option.value = projName; + option.textContent = projName; + projectSelector.appendChild(option); + }); + // Try to re-select the previous project if it still exists + if (incomingProjects.includes(previouslySelected)) { + projectSelector.value = previouslySelected; + } else { + projectSelector.selectedIndex = 0; // Select the first one + selectionChanged = true; // Selection was reset to the first item + } + } else { + // Handle empty project list + const option = document.createElement('option'); + option.value = ''; + option.textContent = 'No projects found'; + option.disabled = true; + projectSelector.appendChild(option); + selectionChanged = true; // Selection is now empty/disabled + } + } + + // Update button state based on current selection (even if list didn't change) + const manageFilesBtn = document.getElementById('manageFilesBtn'); // Get fresh reference + if (manageFilesBtn) { + manageFilesBtn.disabled = !projectSelector.value; + } + + return selectionChanged; +} + + +// --- Export (if using modules in the future) --- +// export { uiShowLoadingIndicator, uiClearLoadingIndicator, ... }; \ No newline at end of file diff --git a/templates/index.html b/templates/index.html index e4fe73c..d246097 100644 --- a/templates/index.html +++ b/templates/index.html @@ -57,8 +57,8 @@
Overall SCADA Progress -
Found in SCADA: 0/0 (0%)
+
Found in SCADA: 0/0 (0%)

@@ -76,8 +76,8 @@
Overall Drawing Progress -
Found in Drawing: 0/0 (0%)
+
Found in Drawing: 0/0 (0%)

@@ -249,8 +249,8 @@ - + + + + + + + + + \ No newline at end of file