diff --git a/docs/firmwares/install-and-update-rooted-firmware-ender3.md b/docs/firmwares/install-and-update-rooted-firmware-ender3.md
index 95fe5862..0f366f03 100644
--- a/docs/firmwares/install-and-update-rooted-firmware-ender3.md
+++ b/docs/firmwares/install-and-update-rooted-firmware-ender3.md
@@ -9,10 +9,14 @@ This guide explain how to install firmware and enable Root access.
- Ender-3 V3:
:material-google-drive: [1.2.3.10 (Google Drive)](https://drive.google.com/file/d/10C3l2vppEA_tmbGjGqz5hRkYXvc29V0D/view?usp=drive_link) / :material-note-text: [Changelog](https://raw.githubusercontent.com/Guilouz/Creality-Helper-Script-Wiki/main/downloads/Changelogs/Ender-3V3/Changelog_1.2.3.10.txt)
+
+ :material-google-drive: [1.2.3.21 (Google Drive)](https://drive.google.com/file/d/1M-mxhIKSw2jmhW5YX_K6QvIhRx0EJ6UO/view?usp=drive_link) / :material-note-text: [Changelog](https://raw.githubusercontent.com/Guilouz/Creality-Helper-Script-Wiki/main/downloads/Changelogs/Ender-3V3/Changelog_1.2.3.21.txt)
- Ender-3 V3 Plus:
:material-google-drive: [1.2.3.8 (Google Drive)](https://drive.google.com/file/d/12tCO7zBVLqz-Wrbc7WgQnIuNbYdtdhdl/view?usp=drive_link) / :material-note-text: [Changelog](https://raw.githubusercontent.com/Guilouz/Creality-Helper-Script-Wiki/main/downloads/Changelogs/Ender-3V3-Plus/Changelog_1.2.3.8.txt)
+
+ :material-google-drive: [1.2.3.21 (Google Drive)](https://drive.google.com/file/d/10EOuyyhm4bGDt1yL7Vga5ZkZlgIlJsb0/view?usp=drive_link) / :material-note-text: [Changelog](https://raw.githubusercontent.com/Guilouz/Creality-Helper-Script-Wiki/main/downloads/Changelogs/Ender-3V3-Plus/Changelog_1.2.3.21.txt)
## Installation & Update
diff --git a/downloads/Changelogs/Ender-3V3-Plus/Changelog_1.2.3.21.txt b/downloads/Changelogs/Ender-3V3-Plus/Changelog_1.2.3.21.txt
new file mode 100644
index 00000000..030c0aff
--- /dev/null
+++ b/downloads/Changelogs/Ender-3V3-Plus/Changelog_1.2.3.21.txt
@@ -0,0 +1,9 @@
+Version Update V1.2.3.21
+
+1. Add Z-axis offset save control and risk reminder confirmation pop-up interface.
+2. Boot animation: change the page to a green theme.
+3. Fixed frequent disconnections of the cloud camera, optimized WebRTC connection speed.
+4. Adjusted the camera AI interface layout.
+5. Adjusted leveling anomaly prompts.
+6. Fixed other known UI issues.
+7. Updated privacy policy text.
\ No newline at end of file
diff --git a/downloads/Changelogs/Ender-3V3/Changelog_1.2.3.21.txt b/downloads/Changelogs/Ender-3V3/Changelog_1.2.3.21.txt
new file mode 100644
index 00000000..030c0aff
--- /dev/null
+++ b/downloads/Changelogs/Ender-3V3/Changelog_1.2.3.21.txt
@@ -0,0 +1,9 @@
+Version Update V1.2.3.21
+
+1. Add Z-axis offset save control and risk reminder confirmation pop-up interface.
+2. Boot animation: change the page to a green theme.
+3. Fixed frequent disconnections of the cloud camera, optimized WebRTC connection speed.
+4. Adjusted the camera AI interface layout.
+5. Adjusted leveling anomaly prompts.
+6. Fixed other known UI issues.
+7. Updated privacy policy text.
\ No newline at end of file
diff --git a/downloads/Stock Config Files/Ender-3V3/1.2.3.21/factory_printer.cfg b/downloads/Stock Config Files/Ender-3V3/1.2.3.21/factory_printer.cfg
new file mode 100644
index 00000000..3ac7aec2
--- /dev/null
+++ b/downloads/Stock Config Files/Ender-3V3/1.2.3.21/factory_printer.cfg
@@ -0,0 +1,351 @@
+# K1-MAX
+# Printer_size: 300x300x300
+# Version: v1.0.1
+# CreateDate: 2023/03/21
+# Nozzle_mcu: chip: GD32F303CBT6
+# version: K1-NOZZLE-M_V12
+# Leveling_mcu: chip: GD32E230F8P6
+# version: K1-MAX-L-V11
+# mcu: chip: GD32F303RET6
+# version: CR4CU220812S12
+
+[include sensorless.cfg]
+[include gcode_macro.cfg]
+[include printer_params.cfg]
+
+[mcu]
+serial: /dev/ttyS7
+baud: 230400
+restart_method: command
+
+[mcu nozzle_mcu]
+serial: /dev/ttyS1
+baud: 230400
+restart_method: command
+
+[mcu leveling_mcu]
+serial: /dev/ttyS9
+baud: 230400
+restart_method: command
+
+[verify_heater extruder]
+[verify_heater heater_bed]
+
+[mcu rpi]
+serial: /tmp/klipper_host_mcu
+
+[bl24c16f]
+i2c_mcu: rpi
+i2c_bus: i2c.2
+i2c_speed: 400000
+
+[idle_timeout]
+timeout: 99999999
+
+[virtual_sdcard]
+path: /usr/data/printer_data/gcodes
+
+[gcode_arcs]
+resolution: 1.0
+
+[temperature_sensor mcu_temp]
+sensor_type: temperature_mcu
+min_temp: 0
+max_temp: 100
+
+[temperature_sensor chamber_temp]
+sensor_type: EPCOS 100K B57560G104F
+sensor_pin: PC5
+min_temp: -273
+max_temp: 999
+
+[stepper_x]
+step_pin: PC2
+dir_pin: !PB9
+enable_pin: !PC3
+microsteps: 32
+rotation_distance: 72
+endstop_pin: tmc2209_stepper_x:virtual_endstop
+position_endstop: 306.5
+position_min: -2
+position_max: 306.5
+homing_speed: 36
+homing_retract_dist:0
+
+[tmc2209 stepper_x]
+uart_pin:PA9
+interpolate: True
+run_current:1.5
+hold_current:1.0
+sense_resistor: 0.100
+stealthchop_threshold: 0
+uart_address:3
+diag_pin: ^PB12
+# driver_IHOLDDELAY: 8
+# driver_TPOWERDOWN: 20
+# driver_TBL: 1
+# driver_TOFF: 1
+# driver_HEND: 0
+# driver_HSTRT: 7
+driver_SGTHRS: 65
+
+[stepper_y]
+step_pin: PB8
+dir_pin: !PB7
+enable_pin: !PC3
+microsteps: 32
+rotation_distance: 72
+endstop_pin: tmc2209_stepper_y:virtual_endstop
+position_endstop: -2
+position_min: -2
+position_max: 306
+homing_speed: 36
+homing_retract_dist:0
+
+[tmc2209 stepper_y]
+uart_pin:PA10
+interpolate: True
+run_current:1.5
+hold_current:1.0
+sense_resistor: 0.100
+stealthchop_threshold: 0
+uart_address:3
+diag_pin: ^PB13
+# driver_IHOLDDELAY: 8
+# driver_TPOWERDOWN: 20
+# driver_TBL: 1
+# driver_TOFF: 1
+# driver_HEND: 0
+# driver_HSTRT: 7
+driver_SGTHRS: 65
+
+[stepper_z]
+step_pin: PB6
+dir_pin: !PB5
+enable_pin: !PC3
+microsteps: 16
+rotation_distance:8
+gear_ratio: 64:20
+endstop_pin: tmc2209_stepper_z:virtual_endstop# PA15 #probe:z_virtual_endstop
+position_endstop: 0
+position_max: 305
+position_min: -10
+homing_speed: 10
+second_homing_speed: 1
+homing_retract_dist: 2.0
+
+[tmc2209 stepper_z]
+uart_pin: PA11
+uart_address: 3
+run_current: 0.8
+diag_pin: ^PB14
+stealthchop_threshold: 0
+sense_resistor: 0.100
+# driver_IHOLDDELAY: 8
+# driver_TPOWERDOWN: 20
+# driver_TBL: 1
+# driver_TOFF: 1
+# driver_HEND: 2
+# driver_HSTRT: 2
+driver_SGTHRS: 0
+
+[extruder]
+max_extrude_only_distance: 1000.0
+max_extrude_cross_section: 80
+step_pin: nozzle_mcu:PB1
+dir_pin: nozzle_mcu:PB0
+enable_pin: !nozzle_mcu:PB2
+microsteps: 16
+rotation_distance: 6.9
+nozzle_diameter: 0.400
+filament_diameter: 1.750
+heater_pin: nozzle_mcu:PB7
+sensor_type: EPCOS 100K B57560G104F
+sensor_pin: nozzle_mcu:PA0
+pressure_advance: 0.04
+pressure_advance_smooth_time: 0.040
+control: pid
+pid_Kp: 25.013
+pid_Ki: 2.566
+pid_Kd: 60.966
+min_temp: 0
+max_temp: 320
+
+[tmc2209 extruder]
+uart_pin: nozzle_mcu: PB11
+tx_pin: nozzle_mcu: PB10
+uart_address: 3
+run_current: 0.5
+sense_resistor: 0.150
+stealthchop_threshold: 0
+# driver_IHOLDDELAY: 8
+# driver_TPOWERDOWN: 20
+# driver_TBL: 2
+# driver_TOFF: 3
+# driver_HEND: 0
+# driver_HSTRT: 5
+
+[heater_bed]
+heater_pin: PC12
+sensor_type: EPCOS 100K B57560G104F
+sensor_pin: PC4
+control: pid
+pid_Kp: 54.901
+pid_Ki: 1.142
+pid_Kd: 375.483
+min_temp: 0
+max_temp: 140
+
+[filament_switch_sensor filament_sensor]
+pause_on_runout: true
+switch_pin: ^!PC15
+
+[multi_pin heater_fans]
+pins:nozzle_mcu:PB5
+
+[heater_fan hotend_fan]
+pin: multi_pin:heater_fans
+heater: extruder
+heater_temp: 40
+
+[static_digital_output my_fan_output_pins]
+pins: nozzle_mcu: PB6
+
+[output_pin fan0]
+pin: nozzle_mcu: PB8
+pwm: True
+cycle_time: 0.0100
+hardware_pwm: false
+value: 0.00
+scale: 255
+shutdown_value: 0.0
+
+[output_pin fan1]
+pin: PC0
+pwm: True
+cycle_time: 0.0100
+hardware_pwm: false
+value: 0.00
+scale: 255
+shutdown_value: 0.0
+
+[output_pin fan2]
+pin: PB1
+pwm: True
+cycle_time: 0.0100
+hardware_pwm: false
+value: 0.00
+scale: 255
+shutdown_value: 0.0
+
+[output_pin LED]
+pin:PB0
+pwm: True
+cycle_time: 0.010
+
+[output_pin PA0]
+pin:PA0
+pwm: True
+cycle_time: 0.010
+
+[output_pin PB2]
+pin:PB2
+pwm: True
+cycle_time: 0.010
+
+[output_pin PB10]
+pin:PB10
+pwm: True
+cycle_time: 0.010
+
+[output_pin PC8]
+pin:PC8
+pwm: True
+cycle_time: 0.010
+
+[output_pin PC9]
+pin:PC9
+pwm: True
+cycle_time: 0.010
+
+[adxl345]
+cs_pin: nozzle_mcu:PA4
+spi_speed: 5000000
+axes_map: x,-z,y
+spi_software_sclk_pin: nozzle_mcu:PA5
+spi_software_mosi_pin: nozzle_mcu:PA7
+spi_software_miso_pin: nozzle_mcu:PA6
+
+[resonance_tester]
+accel_chip: adxl345
+accel_per_hz: 50
+probe_points:
+ 150,150,10
+
+[prtouch_v2]
+z_offset: 0
+step_base:2
+pres_cnt: 4
+#show_msg: True
+noz_ex_com: 0.1
+tilt_corr_dis: 0.00
+#pres0_clk_pins: leveling_mcu:PA5
+#pres0_sdo_pins: leveling_mcu:PA1
+#pres1_clk_pins: leveling_mcu:PA2
+#pres1_sdo_pins: leveling_mcu:PA0
+#pres2_clk_pins: leveling_mcu:PA6
+#pres2_sdo_pins: leveling_mcu:PA3
+#pres3_clk_pins: leveling_mcu:PA7
+#pres3_sdo_pins: leveling_mcu:PA4
+#step_swap_pin: mcu:PC10
+#pres_swap_pin: leveling_mcu:PB1
+pres0_clk_pins: leveling_mcu:PB13
+pres0_sdo_pins: leveling_mcu:PB12
+pres1_clk_pins: leveling_mcu:PB15
+pres1_sdo_pins: leveling_mcu:PB14
+pres2_clk_pins: leveling_mcu:PA9
+pres2_sdo_pins: leveling_mcu:PA8
+pres3_clk_pins: leveling_mcu:PA11
+pres3_sdo_pins: leveling_mcu:PA10
+step_swap_pin: mcu:PC10
+pres_swap_pin: leveling_mcu:PA12
+best_above_z: 2
+low_spd_nul:2
+rdy_xy_spd:400
+clr_noz_start_x: 85
+clr_noz_start_y: 219
+clr_noz_len_x: 50
+clr_noz_len_y: 2
+tri_min_hold:2000
+tri_hftr_cut:1
+
+# correct_tri_hold: 6000
+# correct_step_mm: 0.02
+z_high_default: -264.0
+min_z_pos: -250
+retract_z_dist: 230
+retract_z_speed: 3600
+
+
+[bed_mesh]
+speed: 150
+mesh_min: 5,5
+mesh_max: 295,295
+probe_count: 5,5
+fade_start: 3.0
+fade_end: 10.0
+
+[display_status]
+
+[printer]
+kinematics: corexy
+max_velocity: 1000
+max_accel: 20000
+max_accel_to_decel: 10000
+max_z_velocity: 20
+square_corner_velocity: 5.0
+max_z_accel: 300
+
+
+
+[pause_resume]
diff --git a/downloads/Stock Config Files/Ender-3V3/1.2.3.21/gcode_macro.cfg b/downloads/Stock Config Files/Ender-3V3/1.2.3.21/gcode_macro.cfg
new file mode 100755
index 00000000..41007246
--- /dev/null
+++ b/downloads/Stock Config Files/Ender-3V3/1.2.3.21/gcode_macro.cfg
@@ -0,0 +1,816 @@
+# F001
+# CreateDate: 2023/08/17
+
+[gcode_macro PRINTER_PARAM]
+variable_z_safe_pause: 0.0
+variable_z_safe_g28: 3.0
+variable_max_x_position: 220.0
+variable_max_y_position: 220.0
+variable_max_z_position: 250.0
+variable_fans: 3
+variable_auto_g29: 0
+variable_fan0_min: 90
+variable_fan1_min: 50
+variable_fan2_min: 50
+variable_fan2_speed: 0
+variable_hotend_temp: 0
+variable_e_min_current: 0.27
+variable_z_coefficient: 0.9972
+variable_z_pwl_offset: 0.43
+gcode:
+
+[gcode_macro STRUCTURE_PARAM]
+variable_bed_length: 220.0
+variable_bed_width: 220.0
+variable_bed_hight: 250.0
+gcode:
+
+[gcode_macro AUTOTUNE_SHAPERS]
+variable_autotune_shapers: 'ei'
+gcode:
+
+[gcode_macro LOAD_MATERIAL_CLOSE_FAN2]
+variable_fan2_value: 0
+gcode:
+ SAVE_GCODE_STATE NAME=myMoveState
+ {% if printer['output_pin fan2'].value > 0.0 %}
+ SET_GCODE_VARIABLE MACRO=LOAD_MATERIAL_CLOSE_FAN2 VARIABLE=fan2_value VALUE={printer['output_pin fan2'].value}
+ M107 P2
+ {% endif %}
+ RESTORE_E_CURRENT
+
+[gcode_macro LOAD_MATERIAL_RESTORE_FAN2]
+gcode:
+ {% set fan2_value = printer['gcode_macro LOAD_MATERIAL_CLOSE_FAN2'].fan2_value|float %}
+ RESTORE_GCODE_STATE NAME=myMoveState
+ {% if fan2_value > 0.0 %}
+ {% set s_value = (fan2_value * 255 - printer["gcode_macro PRINTER_PARAM"].fan2_min) * 255 / (255 - printer["gcode_macro PRINTER_PARAM"].fan2_min) %}
+ M106 P2 S{s_value} G1
+ SET_GCODE_VARIABLE MACRO=LOAD_MATERIAL_CLOSE_FAN2 VARIABLE=fan2_value VALUE=0
+ {% endif %}
+ SET_E_MIN_CURRENT
+
+[gcode_macro SET_E_MIN_CURRENT]
+gcode:
+ {% set e_current = printer['gcode_macro PRINTER_PARAM'].e_min_current %}
+ M400
+ SET_TMC_CURRENT STEPPER=extruder CURRENT={e_current} HOLDCURRENT={e_current}
+ G4 P2000
+
+[gcode_macro RESTORE_E_CURRENT]
+gcode:
+ {% set e_current = printer.configfile.settings['tmc2209 extruder'].run_current %}
+ M400
+ SET_TMC_CURRENT STEPPER=extruder CURRENT={e_current} HOLDCURRENT={e_current}
+ G4 P2000
+
+[gcode_macro LOAD_MATERIAL]
+gcode:
+ LOAD_MATERIAL_CLOSE_FAN2
+ M109 S{printer.custom_macro.default_extruder_temp}
+ G91
+ G1 E160 F180
+ LOAD_MATERIAL_RESTORE_FAN2
+
+[gcode_macro QUIT_MATERIAL]
+gcode:
+ SAVE_GCODE_STATE NAME=myMoveState
+ RESTORE_E_CURRENT
+ M109 S{printer.custom_macro.default_extruder_temp}
+ M83
+ G1 E100 F300
+ G1 E-15 F3000
+ G1 E-22.4700 F2400
+ G1 E-6.4200 F1200
+ G1 E-3.2100 F720
+ G1 E5.0000 F356
+ G1 E-5.0000 F384
+ G1 E5.0000 F412
+ G1 E-5.0000 F440
+ G1 E5.0000 F467
+ G1 E-5.0000 F495
+ G1 E5.0000 F523
+ G1 E-5.0000 F3000
+ G1 E-15 F3000
+ SET_E_MIN_CURRENT
+ RESTORE_GCODE_STATE NAME=myMoveState
+
+[gcode_macro Qmode]
+variable_flag: 0
+variable_accel: 0
+variable_accel_to_decel: 0
+variable_velocity: 0
+variable_square_corner_velocity: 0
+variable_pressure_advance:0.0
+variable_fan0_value: 0.00
+variable_fan1_value: 0.00
+variable_fan2_value: 0.00
+variable_speed_factor: 0
+variable_max_accel: 3000
+variable_max_accel_to_decel: 3000
+gcode:
+ {% set printer_state = printer.print_stats.state %}
+ {% if printer['gcode_macro Qmode'].flag|int == 0 %}
+ {% if printer_state == "printing" or printer_state == "paused" %}
+ SET_GCODE_VARIABLE MACRO=Qmode VARIABLE=accel VALUE={printer.toolhead.max_accel}
+ SET_GCODE_VARIABLE MACRO=Qmode VARIABLE=accel_to_decel VALUE={printer.toolhead.max_accel_to_decel}
+ SET_GCODE_VARIABLE MACRO=Qmode VARIABLE=velocity VALUE={printer.toolhead.max_velocity}
+ SET_GCODE_VARIABLE MACRO=Qmode VARIABLE=square_corner_velocity VALUE={printer.toolhead.square_corner_velocity}
+ SET_GCODE_VARIABLE MACRO=Qmode VARIABLE=pressure_advance VALUE={printer.extruder.pressure_advance}
+ SET_GCODE_VARIABLE MACRO=Qmode VARIABLE=speed_factor VALUE={printer.gcode_move.speed_factor}
+ SET_GCODE_VARIABLE MACRO=Qmode VARIABLE=fan0_value VALUE={printer['output_pin fan0'].value}
+ SET_GCODE_VARIABLE MACRO=Qmode VARIABLE=fan1_value VALUE={printer['output_pin fan1'].value}
+ SET_GCODE_VARIABLE MACRO=Qmode VARIABLE=fan2_value VALUE={printer['output_pin fan2'].value}
+ SET_TMC_FIELD STEPPER=stepper_x FIELD=en_spreadcycle VALUE=0
+ SET_TMC_FIELD STEPPER=stepper_y FIELD=en_spreadcycle VALUE=0
+
+ SET_TMC_CURRENT STEPPER=stepper_x CURRENT=0.9
+ SET_TMC_CURRENT STEPPER=stepper_y CURRENT=0.9
+ G4 P500
+
+ # Set Motion Parameters
+ SET_VELOCITY_LIMIT ACCEL=3000
+ SET_VELOCITY_LIMIT ACCEL_TO_DECEL=3000
+ SET_VELOCITY_LIMIT VELOCITY=160
+ SET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY=5
+ SET_PRESSURE_ADVANCE ADVANCE=0.05
+ M220 S50
+
+ {% set tmp = printer['output_pin fan0'].value * 255 %}
+ SET_GCODE_VARIABLE MACRO=Qmode VARIABLE=fan0_value VALUE={tmp}
+ {% if tmp - printer['gcode_macro PRINTER_PARAM'].fan0_min > (255 - printer['gcode_macro PRINTER_PARAM'].fan0_min) / 2 %}
+ {% set tmp = printer['gcode_macro PRINTER_PARAM'].fan0_min + (255 - printer['gcode_macro PRINTER_PARAM'].fan0_min) / 2 %}
+ SET_PIN PIN=fan0 VALUE={tmp}
+ {% endif %}
+
+ {% set tmp = printer['output_pin fan1'].value * 255 %}
+ SET_GCODE_VARIABLE MACRO=Qmode VARIABLE=fan1_value VALUE={printer['output_pin fan1'].value * 255}
+ {% if tmp - printer['gcode_macro PRINTER_PARAM'].fan1_min > (255 - printer['gcode_macro PRINTER_PARAM'].fan1_min) / 2 %}
+ {% set tmp = printer['gcode_macro PRINTER_PARAM'].fan1_min + (255 - printer['gcode_macro PRINTER_PARAM'].fan1_min) / 2 %}
+ SET_PIN PIN=fan1 VALUE={tmp}
+ {% endif %}
+
+ {% set tmp = printer['output_pin fan2'].value * 255 %}
+ SET_GCODE_VARIABLE MACRO=Qmode VARIABLE=fan2_value VALUE={printer['output_pin fan2'].value * 255}
+ {% if tmp - printer['gcode_macro PRINTER_PARAM'].fan2_min > (255 - printer['gcode_macro PRINTER_PARAM'].fan2_min) / 2 %}
+ {% set tmp = printer['gcode_macro PRINTER_PARAM'].fan2_min + (255 - printer['gcode_macro PRINTER_PARAM'].fan2_min) / 2 %}
+ SET_PIN PIN=fan2 VALUE={tmp}
+ {% endif %}
+
+ SET_GCODE_VARIABLE MACRO=Qmode VARIABLE=flag VALUE=1
+ SET_QMODE_FLAG FLAG=1
+ {% endif %}
+ {% endif %}
+
+[gcode_macro Qmode_exit]
+gcode:
+ {% set printer_state = printer.print_stats.state %}
+ {% if printer['gcode_macro Qmode'].flag|int == 1 %}
+ {% if printer_state == "printing" or printer_state == "paused" %}
+ SET_VELOCITY_LIMIT ACCEL={printer['gcode_macro Qmode'].accel}
+ SET_VELOCITY_LIMIT ACCEL_TO_DECEL={printer['gcode_macro Qmode'].accel_to_decel}
+ SET_VELOCITY_LIMIT VELOCITY={printer['gcode_macro Qmode'].velocity}
+ SET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY={printer['gcode_macro Qmode'].square_corner_velocity}
+ SET_PRESSURE_ADVANCE ADVANCE={printer['gcode_macro Qmode'].pressure_advance}
+ M220 S{printer['gcode_macro Qmode'].speed_factor * 100}
+
+ {% set X_RUN_CUR = printer.configfile.settings['tmc2209 stepper_x'].run_current %}
+ {% set Y_RUN_CUR = printer.configfile.settings['tmc2209 stepper_y'].run_current %}
+ SET_TMC_CURRENT STEPPER=stepper_x CURRENT={X_RUN_CUR}
+ SET_TMC_CURRENT STEPPER=stepper_y CURRENT={Y_RUN_CUR}
+
+ SET_TMC_FIELD STEPPER=stepper_x FIELD=en_spreadcycle VALUE=1
+ SET_TMC_FIELD STEPPER=stepper_y FIELD=en_spreadcycle VALUE=1
+ G4 P500
+
+ SET_GCODE_VARIABLE MACRO=Qmode VARIABLE=flag VALUE=0
+ SET_QMODE_FLAG FLAG=0
+
+ {% if printer['output_pin fan0'].value != 0 %}
+ {action_respond_info("fan0_value = %s" % printer['gcode_macro Qmode'].fan0_value)}
+ SET_PIN PIN=fan0 VALUE={printer['gcode_macro Qmode'].fan0_value}
+ SET_GCODE_VARIABLE MACRO=Qmode VARIABLE=fan0_value VALUE=0
+ {% endif %}
+ {% if printer['output_pin fan1'].value != 0 %}
+ {action_respond_info("fan1_value = %s" % printer['gcode_macro Qmode'].fan1_value)}
+ SET_PIN PIN=fan1 VALUE={printer['gcode_macro Qmode'].fan1_value}
+ SET_GCODE_VARIABLE MACRO=Qmode VARIABLE=fan1_value VALUE=0
+ {% endif %}
+ {% if printer['output_pin fan2'].value != 0 %}
+ {action_respond_info("fan2_value = %s" % printer['gcode_macro Qmode'].fan2_value)}
+ SET_PIN PIN=fan2 VALUE={printer['gcode_macro Qmode'].fan2_value}
+ SET_GCODE_VARIABLE MACRO=Qmode VARIABLE=fan2_value VALUE=0
+ {% endif %}
+ {% endif %}
+ {% endif %}
+
+[gcode_macro M204]
+rename_existing: M204.1
+gcode:
+ # {% if printer['gcode_macro Qmode'].flag|int == 0 %}
+ {% set get_params = "" %}
+ {% set qmode_max_accel = printer['gcode_macro Qmode'].max_accel|string %}
+ {% if 'S' in params|upper %}
+ {% if printer['gcode_macro Qmode'].flag|int == 1 and params.S|float > qmode_max_accel|float %}
+ {% set get_params = (get_params + ' ' + 'S' + qmode_max_accel) %}
+ {% else %}
+ {% set get_params = (get_params + ' ' + 'S' + params.S) %}
+ {% endif %}
+ {% endif %}
+ {% if 'P' in params|upper %}
+ {% if printer['gcode_macro Qmode'].flag|int == 1 and params.P|float > qmode_max_accel|float %}
+ {% set get_params = (get_params + ' ' + 'P' + qmode_max_accel) %}
+ {% else %}
+ {% set get_params = (get_params + ' ' + 'P' + params.P) %}
+ {% endif %}
+ {% endif %}
+ {% if 'T' in params|upper %}
+ {% if printer['gcode_macro Qmode'].flag|int == 1 and params.T|float > qmode_max_accel|float %}
+ {% set get_params = (get_params + ' ' + 'T' + qmode_max_accel) %}
+ {% else %}
+ {% set get_params = (get_params + ' ' + 'T' + params.T) %}
+ {% endif %}
+ {% endif %}
+ M204.1 {get_params}
+ # {% endif %}
+
+[gcode_macro M205]
+gcode:
+ {% if 'X' in params %}
+ SET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY={params.X}
+ {% elif 'Y' in params %}
+ SET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY={params.Y}
+ {% endif %}
+
+[gcode_macro M106]
+variable_user_flag: 0
+gcode:
+
+ {% if (params.U is defined and params.U|int == 1) or (params.U is not defined and printer["gcode_macro M106"].user_flag|int == 0) or (params.G is defined)%}
+ {% if (params.U is defined and params.U|int == 1) %}
+ SET_GCODE_VARIABLE MACRO=M106 VARIABLE=user_flag VALUE={params.U|int}
+ {% endif %}
+
+
+ {% set fans = printer["gcode_macro PRINTER_PARAM"].fans|int %}
+ {% set fan = 0 %}
+ {% set value = 0 %}
+ {% if params.P is defined %}
+ {% set tmp = params.P|int %}
+ {% if tmp < fans %}
+ {% set fan = tmp %}
+ {% endif %}
+ {% endif %}
+ {% if params.S is defined %}
+ {% set tmp = params.S|float %}
+ {% else %}
+ {% set tmp = 255 %}
+ {% endif %}
+ {% if tmp > 0 %}
+ {% if fan == 0 %}
+ {% set value = (255 - printer["gcode_macro PRINTER_PARAM"].fan0_min) / 255 * tmp %}
+ {% if printer['gcode_macro Qmode'].flag | int == 1 %}
+ SET_GCODE_VARIABLE MACRO=Qmode VARIABLE=fan0_value VALUE={printer["gcode_macro PRINTER_PARAM"].fan0_min + value}
+ {% if value > (255 - printer['gcode_macro PRINTER_PARAM'].fan0_min) / 2 %}
+ {% set value = printer["gcode_macro PRINTER_PARAM"].fan0_min + (255 - printer['gcode_macro PRINTER_PARAM'].fan0_min) / 2 %}
+ {% else %}
+ {% set value = printer["gcode_macro PRINTER_PARAM"].fan0_min + value %}
+ {% endif %}
+ {% else %}
+ {% set value = printer["gcode_macro PRINTER_PARAM"].fan0_min + value %}
+ {% endif %}
+ {% endif %}
+ {% if fan == 1 %}
+ {% set value = (255 - printer["gcode_macro PRINTER_PARAM"].fan1_min) / 255 * tmp %}
+ {% if printer['gcode_macro Qmode'].flag | int == 1 %}
+ SET_GCODE_VARIABLE MACRO=Qmode VARIABLE=fan1_value VALUE={printer["gcode_macro PRINTER_PARAM"].fan1_min + value}
+ {% if value > (255 - printer['gcode_macro PRINTER_PARAM'].fan1_min) / 2 %}
+ {% set value = printer["gcode_macro PRINTER_PARAM"].fan1_min + (255 - printer['gcode_macro PRINTER_PARAM'].fan1_min) / 2 %}
+ {% else %}
+ {% set value = printer["gcode_macro PRINTER_PARAM"].fan1_min + value %}
+ {% endif %}
+ {% else %}
+ {% set value = printer["gcode_macro PRINTER_PARAM"].fan1_min + value %}
+ {% endif %}
+ {% endif %}
+ {% if fan == 2 %}
+ {% set value = (255 - printer["gcode_macro PRINTER_PARAM"].fan2_min) / 255 * tmp %}
+ {% if printer['gcode_macro Qmode'].flag | int == 1 %}
+ SET_GCODE_VARIABLE MACRO=Qmode VARIABLE=fan2_value VALUE={printer["gcode_macro PRINTER_PARAM"].fan2_min + value}
+ {% if value > (255 - printer['gcode_macro PRINTER_PARAM'].fan2_min) / 2 %}
+ {% set value = printer["gcode_macro PRINTER_PARAM"].fan2_min + (255 - printer['gcode_macro PRINTER_PARAM'].fan2_min) / 2 %}
+ {% else %}
+ {% set value = printer["gcode_macro PRINTER_PARAM"].fan2_min + value %}
+ {% endif %}
+ {% else %}
+ {% set value = printer["gcode_macro PRINTER_PARAM"].fan2_min + value %}
+ {% endif %}
+ {% endif %}
+ {% endif %}
+ {% if value >= 255 %}
+ {% set value = 255 %}
+ {% endif %}
+ SET_PIN PIN=fan{fan} VALUE={value}
+ {% endif %}
+
+[gcode_macro M107]
+gcode:
+ {% set fans = printer["gcode_macro PRINTER_PARAM"].fans|int %}
+ {% if params.P is defined %}
+ {% if params.P|int < fans %}
+ SET_PIN PIN=fan{params.P|int} VALUE=0
+ {% else %}
+ SET_PIN PIN=fan0 VALUE=0
+ {% endif %}
+ {% else %}
+ SET_PIN PIN=fan0 VALUE=0
+ SET_PIN PIN=fan2 VALUE=0
+ {% endif %}
+
+[gcode_macro M900]
+gcode:
+ {% if 'K' in params %}
+ {% if 'E' in params %}
+ SET_PRESSURE_ADVANCE EXTRUDER={params.E} ADVANCE={params.K}
+ {% else %}
+ SET_PRESSURE_ADVANCE ADVANCE={params.K}
+ {% endif %}
+ {% endif %}
+
+[delayed_gcode wait_temp]
+# initial_duration: 2.
+gcode:
+ {% set cur_temp = printer.extruder.temperature %}
+ {% if cur_temp|int < 40 %}
+ #{action_respond_info("end_temp!\n")}
+ WAIT_TEMP_END
+ {% else %}
+ #{action_respond_info("cur_temp = %s \n" % (cur_temp))}
+ UPDATE_DELAYED_GCODE ID=wait_temp DURATION=5
+ {% endif %}
+
+[gcode_macro WAIT_TEMP_START]
+gcode:
+ UPDATE_DELAYED_GCODE ID=wait_temp DURATION=1
+ #M106 P0 S255 G1
+ M106 P2 S127 G1
+
+[gcode_macro WAIT_TEMP_END]
+gcode:
+ UPDATE_DELAYED_GCODE ID=wait_temp DURATION=0
+ M106 P0 S0 G1
+ M106 P2 S0 G1
+
+[gcode_macro PRINT_CALIBRATION]
+# This part of the command is replaced by the application side without passing parameters
+gcode:
+ CX_PRINT_LEVELING_CALIBRATION
+
+[gcode_macro FIRST_FLOOR_PAUSE_POSITION]
+gcode:
+ {% set extruder_temp = printer.custom_macro.g28_ext_temp %}
+ M104 S{extruder_temp}
+ {% set y_park = 5 %}
+ {% set x_park = 5 %}
+ G90
+ G1 Z2 F600
+ G1 X{x_park} Y{y_park} F6000
+ G1 Z0.2 F600
+
+[gcode_macro ACCURATE_G28]
+gcode:
+ {% if printer['gcode_macro START_PRINT'].z_sensorless|int == 1 %}
+ G4 P1000
+ STEPPER_Z_SENEORLESS
+ M400
+ G4 P500
+ SET_KINEMATIC_POSITION
+ {% set retract_z = printer.configfile.settings['prtouch_v2'].retract_z_dist %}
+ {% set retract_speed = printer.configfile.settings['prtouch_v2'].retract_z_speed %}
+ G91
+ G1 Z-{retract_z} F{retract_speed}
+ M400
+ G90
+ G4 P1000
+ {action_respond_info("STEPPER_Z_SENEORLESS \n")}
+ Z_SENSORLESS_CLEAR
+ {% endif %}
+ ACCURATE_HOME_Z
+
+[gcode_macro Z_SENSORLESS_SET]
+gcode:
+ SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=z_sensorless VALUE=1
+ {action_respond_info("set z_sensorless")}
+
+[gcode_macro Z_SENSORLESS_CLEAR]
+gcode:
+ SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=z_sensorless VALUE=0
+ {action_respond_info("clear z_sensorless")}
+
+[gcode_macro START_PRINT]
+variable_prepare: 0
+variable_z_sensorless: 0
+gcode:
+ SET_GCODE_VARIABLE MACRO=M106 VARIABLE=user_flag VALUE=0
+ WAIT_TEMP_END
+ CLEAR_PAUSE
+ SET_TEMPERATURE_FAN_TARGET temperature_fan=soc_fan target=5
+ {% set g28_extruder_temp = printer.custom_macro.g28_ext_temp %}
+ {% set bed_temp = printer.custom_macro.default_bed_temp %}
+ {% set extruder_temp = printer.custom_macro.default_extruder_temp %}
+
+ {% if 'BED_TEMP' in params|upper and (params.BED_TEMP|float) %}
+ {% set bed_temp = params.BED_TEMP %}
+ {% endif %}
+
+ {% if 'EXTRUDER_TEMP' in params|upper and (params.EXTRUDER_TEMP|float) %}
+ {% set extruder_temp = params.EXTRUDER_TEMP %}
+ {% endif %}
+
+ {% if printer['gcode_macro START_PRINT'].prepare|int == 0 %}
+ {action_respond_info("not prepare.\n")}
+
+ PRINT_PREPARE_CLEAR
+ CX_ROUGH_G28 EXTRUDER_TEMP={extruder_temp} BED_TEMP={bed_temp}
+ CX_NOZZLE_CLEAR
+ Z_SENSORLESS_SET
+ ACCURATE_G28
+ {% else %}
+ PRINT_PREPARE_CLEAR
+ {% endif %}
+
+ CX_PRINT_DRAW_ONE_LINE
+
+
+[gcode_macro PRINT_PREPARED]
+gcode:
+ SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=prepare VALUE=1
+ {action_respond_info("print prepared")}
+
+[gcode_macro PRINT_PREPARE_CLEAR]
+gcode:
+ SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=prepare VALUE=0
+
+[gcode_macro END_PRINT_POINT_WITHOUT_LIFTING]
+gcode:
+ {% if "xyz" in printer.toolhead.homed_axes %}
+ {% set E = printer["gcode_macro PAUSE"].extrude|float %}
+ G91
+ {% if printer.extruder.can_extrude|lower == 'true' %}
+ G1 E-1.0 F180
+ G1 E-{E} F4000
+ {% else %}
+ {action_respond_info("Extruder not hot enough")}
+ {% endif %}
+ G1 Z2.0 F600
+ G90
+ {% set y_park = printer.toolhead.axis_maximum.y/2 %}
+ {% set x_park = printer.toolhead.axis_maximum.x|float - 10.0 %}
+ G1 X{x_park} Y{y_park} F12000
+ {% else %}
+ {action_respond_info("end print xyz_axes is NULL\n")}
+ {% endif %}
+
+[gcode_macro END_PRINT_POINT]
+gcode:
+ {% if "xyz" in printer.toolhead.homed_axes %}
+ {% set E = printer["gcode_macro PAUSE"].extrude|float %}
+ {% set max_z = printer["gcode_macro PRINTER_PARAM"].max_z_position|float %}
+ {% set act_z = printer.toolhead.position.z|float %}
+ {% set z_safe = 0.0 %}
+ {% if act_z < (max_z ) %}
+ {% set z_safe = (max_z ) - act_z %}
+ {% elif act_z < max_z %}
+ {% set z_safe = 2.0 %}
+ {% endif %}
+ G91
+ {% if printer.extruder.can_extrude|lower == 'true' %}
+ G1 E-1.0 F180
+ G1 E-{E} F4000
+ {% else %}
+ {action_respond_info("Extruder not hot enough")}
+ {% endif %}
+ G1 Z2.0 F1200
+ G90
+ {% set y_park = printer.toolhead.axis_maximum.y|float - 2.0 %}
+ {% set x_park = printer.toolhead.axis_maximum.x|float - 10.0 %}
+ G1 X{x_park} Y144 F6000
+ {% if z_safe > 2.0 %}
+ G91
+ {% set z_safe = z_safe - 2.0 %}
+ G1 Z{z_safe} F1200
+ G90
+ {% endif %}
+ {% else %}
+ {action_respond_info("end print xyz_axes is NULL\n")}
+ {% endif %}
+
+[gcode_macro END_SELF_TEST_POINT]
+gcode:
+ {% if "xyz" in printer.toolhead.homed_axes %}
+ {% set E = printer["gcode_macro PAUSE"].extrude|float %}
+ {% set max_z = printer["gcode_macro PRINTER_PARAM"].max_z_position|float %}
+ {% set act_z = printer.toolhead.position.z|float %}
+ {% set z_safe = 0.0 %}
+ {% if act_z < (max_z ) %}
+ {% set z_safe = (max_z ) - act_z %}
+ {% elif act_z < max_z %}
+ {% set z_safe = 2.0 %}
+ {% endif %}
+ G91
+ G1 Z2.0 F1200
+ G90
+
+ {% if z_safe > 2.0 %}
+ G91
+ {% set z_safe = z_safe - 2.0 %}
+ G1 Z{z_safe} F1200
+ G90
+ {% endif %}
+ {% else %}
+ {action_respond_info("end print xyz_axes is NULL\n")}
+ {% endif %}
+
+[gcode_macro END_PRINT]
+gcode:
+ SET_GCODE_VARIABLE MACRO=M106 VARIABLE=user_flag VALUE=0
+ Qmode_exit
+ EXCLUDE_OBJECT_RESET
+ PRINT_PREPARE_CLEAR
+ M220 S100
+ SET_VELOCITY_LIMIT ACCEL=5000 ACCEL_TO_DECEL=2500
+ TURN_OFF_HEATERS
+ M107 P1
+ M107 P2
+ END_PRINT_POINT
+ WAIT_TEMP_START
+ M84
+ SET_TEMPERATURE_FAN_TARGET temperature_fan=soc_fan target=45
+
+[gcode_macro END_SELF_TEST]
+gcode:
+ Qmode_exit
+ EXCLUDE_OBJECT_RESET
+ PRINT_PREPARE_CLEAR
+ M220 S100
+ SET_VELOCITY_LIMIT ACCEL=5000 ACCEL_TO_DECEL=2500
+ TURN_OFF_HEATERS
+ M107 P1
+ M107 P2
+ END_SELF_TEST_POINT
+ WAIT_TEMP_START
+ M84
+ SET_TEMPERATURE_FAN_TARGET temperature_fan=soc_fan target=45
+
+[gcode_macro FIRST_FLOOR_PAUSE]
+description: Pause the first floor print
+# change this if you need more or less extrusion
+variable_extrude: 2.0
+gcode:
+ ##### read E from pause macro #####
+ {% set E = printer["gcode_macro FIRST_FLOOR_PAUSE"].extrude|float %}
+ ##### set park positon for x and y #####
+ # default is your max posion from your printer.cfg
+ {% set y_park = 5 %}
+ {% set x_park = 5 %}
+ ##### calculate save lift position #####
+ {% set max_z = printer["gcode_macro PRINTER_PARAM"].max_z_position|float %}
+ {% set act_z = printer.toolhead.position.z|float %}
+ {% set z_safe = 0.0 %}
+ {% if act_z < (max_z - 2.0) %}
+ {% set z_safe = 2.0 %}
+ {% elif act_z < max_z %}
+ {% set z_safe = max_z - act_z %}
+ {% endif %}
+ ##### end of definitions #####
+ SET_GCODE_VARIABLE MACRO=PRINTER_PARAM VARIABLE=z_safe_pause VALUE={z_safe|float}
+ PAUSE_BASE
+ G91
+ {% if "xyz" in printer.toolhead.homed_axes %}
+ {% if printer.extruder.can_extrude|lower == 'true' %}
+ G1 E-1.0 F180
+ G1 E-{E} F4000
+ {% else %}
+ {action_respond_info("Extruder not hot enough")}
+ {% endif %}
+ G1 Z{z_safe} F600
+ G90
+ G1 X{x_park} Y{y_park} F12000
+ {% else %}
+ {action_respond_info("Printer not homed")}
+ {% endif %}
+ # save fan2 value and turn off fan2
+ SET_GCODE_VARIABLE MACRO=PRINTER_PARAM VARIABLE=fan2_speed VALUE={printer['output_pin fan2'].value}
+ {% set fspeed = printer['gcode_macro PRINTER_PARAM'].fan2_speed %}
+ {action_respond_info("fan2_value = %s \n" % (fspeed))}
+ # SET_PIN PIN=fan2 VALUE=0
+ M106 P2 S0 G1
+ SET_E_MIN_CURRENT
+
+[gcode_macro FIRST_FLOOR_RESUME]
+description: Resume the first floor print
+gcode:
+ RESTORE_E_CURRENT
+ {% if printer['gcode_macro PRINTER_PARAM'].fan2_speed > 0 %}
+ # {% set fspeed = printer['gcode_macro PRINTER_PARAM'].fan2_speed %}
+ # {action_respond_info("fan2_value2 = %s \n" % (fspeed))}
+ # SET_PIN PIN=fan2 VALUE={(printer['gcode_macro PRINTER_PARAM'].fan2_speed * 255 + 0.5)|int}
+ {% set s_value = (printer['gcode_macro PRINTER_PARAM'].fan2_speed * 255 - printer['gcode_macro PRINTER_PARAM'].fan2_min) * 255 / (255 - printer['gcode_macro PRINTER_PARAM'].fan2_min)|float %}
+ M106 P2 S{s_value} G1
+ {% endif %}
+ ##### read E from pause macro #####
+ {% set E = printer["gcode_macro FIRST_FLOOR_PAUSE"].extrude|float + 1.0 %}
+ #### get VELOCITY parameter if specified ####
+ {% if 'VELOCITY' in params|upper %}
+ {% set get_params = ('VELOCITY=' + params.VELOCITY) %}
+ {%else %}
+ {% set get_params = "" %}
+ {% endif %}
+ ##### end of definitions #####
+ {% if printer.extruder.can_extrude|lower == 'true' %}
+ G91
+ G1 E{E} F2100
+ {% else %}
+ {action_respond_info("Extruder not hot enough")}
+ {% endif %}
+ M400
+ RESUME_BASE {get_params}
+
+[gcode_macro PAUSE]
+description: Pause the actual running print
+rename_existing: PAUSE_BASE
+# change this if you need more or less extrusion
+variable_extrude: 2.0
+gcode:
+ ##### read E from pause macro #####
+ {% set E = printer["gcode_macro PAUSE"].extrude|float %}
+ ##### set park positon for x and y #####
+ # default is your max posion from your printer.cfg
+ {% set y_park = printer.toolhead.axis_maximum.y/2 %}
+ {% set x_park = printer.toolhead.axis_maximum.x|float - 10.0 %}
+ ##### calculate save lift position #####
+ {% set max_z = printer["gcode_macro PRINTER_PARAM"].max_z_position|float %}
+ {% set act_z = printer.toolhead.position.z|float %}
+ {% set z_safe = 0.0 %}
+ {% if act_z < 48.0 %}
+ {% set z_safe = 50.0 - act_z %}
+ {% elif act_z < (max_z - 2.0) %}
+ {% set z_safe = 2.0 %}
+ {% elif act_z < max_z %}
+ {% set z_safe = max_z - act_z %}
+ {% endif %}
+ {action_respond_info("z_safe = %s"% (z_safe))}
+ ##### end of definitions #####
+ SET_GCODE_VARIABLE MACRO=PRINTER_PARAM VARIABLE=z_safe_pause VALUE={z_safe|float}
+ PAUSE_BASE
+ G91
+ SET_GCODE_VARIABLE MACRO=PRINTER_PARAM VARIABLE=hotend_temp VALUE={printer.extruder.target}
+ M104 S140
+ {% if "xyz" in printer.toolhead.homed_axes %}
+ {% if printer.extruder.can_extrude|lower == 'true' %}
+ G1 E-1.0 F180
+ G1 E-{E} F4000
+ {% else %}
+ {action_respond_info("Extruder not hot enough")}
+ {% endif %}
+ G1 Z{z_safe} F600
+ M400
+ G90
+ G1 X{x_park} Y{y_park} F12000
+ {% else %}
+ {action_respond_info("Printer not homed")}
+ {% endif %}
+ # save fan2 value and turn off fan2
+ SET_GCODE_VARIABLE MACRO=PRINTER_PARAM VARIABLE=fan2_speed VALUE={printer['output_pin fan2'].value}
+ {% set fspeed = printer['gcode_macro PRINTER_PARAM'].fan2_speed %}
+ {action_respond_info("fan2_value = %s \n" % (fspeed))}
+ # SET_PIN PIN=fan2 VALUE=0
+ M106 P2 S0 G1
+ SET_E_MIN_CURRENT
+
+[gcode_macro INPUTSHAPER]
+gcode:
+ SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0
+ #SET_FILAMENT_SENSOR SENSOR=filament_sensor_2 ENABLE=0
+ SET_TEMPERATURE_FAN_TARGET temperature_fan=soc_fan target=5
+ G90
+ G28
+ {% set POSITION_X = printer.configfile.settings['stepper_x'].position_max/2 %}
+ {% set POSITION_Y = printer.configfile.settings['stepper_y'].position_max/2 %}
+ G1 X{POSITION_X} Y{POSITION_Y} F6000
+ G1 Z20 F1200
+ SHAPER_CALIBRATE
+ CXSAVE_CONFIG
+ SET_TEMPERATURE_FAN_TARGET temperature_fan=soc_fan target=45
+ SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1
+ #SET_FILAMENT_SENSOR SENSOR=filament_sensor_2 ENABLE=1
+
+[gcode_macro BEDPID]
+gcode:
+ PID_CALIBRATE HEATER=heater_bed TARGET=100
+ SAVE_CONFIG
+
+[gcode_macro TUNOFFINPUTSHAPER]
+gcode:
+ SET_INPUT_SHAPER SHAPER_FREQ_X=0 SHAPER_FREQ_Y=0
+
+[gcode_macro RESUME]
+description: Resume the actual running print
+rename_existing: RESUME_BASE
+gcode:
+ RESTORE_E_CURRENT
+ {% if printer['gcode_macro PRINTER_PARAM'].hotend_temp|int != 0 %}
+ {% if printer['gcode_macro PRINTER_PARAM'].hotend_temp|int > printer.extruder.temperature %}
+ M109 S{printer['gcode_macro PRINTER_PARAM'].hotend_temp|int}
+ {% else %}
+ M104 S{printer['gcode_macro PRINTER_PARAM'].hotend_temp|int}
+ {% endif %}
+ SET_GCODE_VARIABLE MACRO=PRINTER_PARAM VARIABLE=hotend_temp VALUE=0
+ {% endif %}
+ {% if printer['gcode_macro PRINTER_PARAM'].fan2_speed > 0 %}
+ # {% set fspeed = printer['gcode_macro PRINTER_PARAM'].fan2_speed %}
+ # {action_respond_info("fan2_value2 = %s \n" % (fspeed))}
+ # SET_PIN PIN=fan2 VALUE={(printer['gcode_macro PRINTER_PARAM'].fan2_speed * 255 + 0.5)|int}
+ {% set s_value = (printer['gcode_macro PRINTER_PARAM'].fan2_speed * 255 - printer['gcode_macro PRINTER_PARAM'].fan2_min) * 255 / (255 - printer['gcode_macro PRINTER_PARAM'].fan2_min)|float %}
+ M106 P2 S{s_value} G1
+ {% endif %}
+ {% set z_resume_move = printer['gcode_macro PRINTER_PARAM'].z_safe_pause|int %}
+ {% if z_resume_move > 2 %}
+ {% set z_resume_move = z_resume_move - 2 %}
+ G91
+ G1 Z-{z_resume_move} F600
+ M400
+ {% endif %}
+ {action_respond_info("z_resume_move = %s"% (z_resume_move))}
+ ##### read E from pause macro #####
+ {% set E = printer["gcode_macro PAUSE"].extrude|float + 1.0 %}
+ #### get VELOCITY parameter if specified ####
+ {% if 'VELOCITY' in params|upper %}
+ {% set get_params = ('VELOCITY=' + params.VELOCITY) %}
+ {%else %}
+ {% set get_params = "" %}
+ {% endif %}
+ ##### end of definitions #####
+ {% if printer.extruder.can_extrude|lower == 'true' %}
+ G91
+ G1 E{E} F2100
+ G90
+ {% else %}
+ {action_respond_info("Extruder not hot enough")}
+ {% endif %}
+ M400
+ RESUME_BASE {get_params}
+
+[gcode_macro CANCEL_PRINT]
+description: Cancel the actual running print
+rename_existing: CANCEL_PRINT_BASE
+gcode:
+ END_PRINT
+ CANCEL_PRINT_BASE
+
+[gcode_macro G29]
+gcode:
+ {% if 'PROBE_COUNT' in params|upper %}
+ {% set get_count = ('PROBE_COUNT' + params.PROBE_COUNT) %}
+ {%else %}
+ {% set get_count = "" %}
+ {% endif %}
+
+ {% set bed_temp = printer.custom_macro.default_bed_temp %}
+ {% set extruder_temp = printer.custom_macro.g28_ext_temp %}
+ {% set nozzle_clear_temp = printer.custom_macro.default_extruder_temp %}
+
+ {% if 'BED_TEMP' in params|upper %}
+ {% set bed_temp = params.BED_TEMP %}
+ {% endif %}
+
+ {% if 'EXTRUDER_TEMP' in params|upper %}
+ {% set nozzle_clear_temp = params.EXTRUDER_TEMP %}
+ {% endif %}
+ SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0
+ #SET_FILAMENT_SENSOR SENSOR=filament_sensor_2 ENABLE=0
+ SET_TEMPERATURE_FAN_TARGET temperature_fan=soc_fan target=5
+ M109 S140
+ G28
+ BED_MESH_CLEAR
+ NOZZLE_CLEAR HOT_MIN_TEMP={extruder_temp} HOT_MAX_TEMP={nozzle_clear_temp} BED_MAX_TEMP={bed_temp}
+ M204 S5000
+ SET_VELOCITY_LIMIT ACCEL_TO_DECEL=5000
+ BED_MESH_CALIBRATE {get_count}
+ BED_MESH_OUTPUT
+ {% set y_park = printer.toolhead.axis_maximum.y/2 %}
+ {% set x_park = printer.toolhead.axis_maximum.x|float - 10.0 %}
+ G1 Z50 F3600
+ CXSAVE_CONFIG
+ TURN_OFF_HEATERS
+ SET_TEMPERATURE_FAN_TARGET temperature_fan=soc_fan target=45
+ SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1
+ #SET_FILAMENT_SENSOR SENSOR=filament_sensor_2 ENABLE=1
+
+# [gcode_macro G299]
+# gcode:
+# BED_MESH_CLEAR
+# G28
+# PRTOUCH_READY
+# BED_MESH_CALIBRATE
+# BED_MESH_OUTPUT
diff --git a/downloads/Stock Config Files/Ender-3V3/1.2.3.21/printer.cfg b/downloads/Stock Config Files/Ender-3V3/1.2.3.21/printer.cfg
new file mode 100755
index 00000000..be616b12
--- /dev/null
+++ b/downloads/Stock Config Files/Ender-3V3/1.2.3.21/printer.cfg
@@ -0,0 +1,347 @@
+# F001
+# Printer_size: 220x220x250
+# Version: v1.8.1
+# CreateDate: 2023/09/01
+# Nozzle_mcu: chip: GD32F303CBT6
+# version: CR-K1-MAX-NOZZLE-V1.0.0
+# Leveling_mcu: chip: GD32E230F8P6
+# version: CR-K1-MAX-LEVELING-V1.0.0
+# mcu: chip: GD32F303RET6
+# version: CR4CU220812S12
+[include sensorless.cfg]
+[include gcode_macro.cfg]
+[include printer_params.cfg]
+
+[mcu]
+serial: /dev/ttyS7
+baud: 230400
+restart_method: command
+
+[mcu nozzle_mcu]
+serial: /dev/ttyS1
+baud: 230400
+restart_method: command
+
+[mcu leveling_mcu]
+serial: /dev/ttyS9
+baud: 230400
+restart_method: command
+
+[gap_auto_comp]
+#show_msg: True
+x_gaps: 0.05
+y_gaps: 0
+z_gaps: 0
+
+[prtouch_v2]
+pr_version: 1
+step_base: 2
+z_offset: 0
+noz_ex_com: 0.10
+tilt_corr_dis: 0
+tri_min_hold: 2500
+tri_max_hold: 6000
+pres_cnt: 4
+pres0_clk_pins: leveling_mcu:PB13
+pres0_sdo_pins: leveling_mcu:PB12
+pres1_clk_pins: leveling_mcu:PB15
+pres1_sdo_pins: leveling_mcu:PB14
+pres2_clk_pins: leveling_mcu:PA9
+pres2_sdo_pins: leveling_mcu:PA8
+pres3_clk_pins: leveling_mcu:PA11
+pres3_sdo_pins: leveling_mcu:PA10
+step_swap_pin: mcu:PC10
+pres_swap_pin: leveling_mcu:PA12
+g28_wait_cool_down: true
+pa_clr_down_mm: -0.15
+rdy_xy_spd:400
+clr_noz_start_x: 85
+clr_noz_start_y: 219
+clr_noz_len_x: 50
+clr_noz_len_y: 2
+speeds: 2.5,1.0
+tri_hftr_cut: 2,1
+tri_lftr_k1: 0.70,0.30
+tri_try_max_times: 10
+tri_min_hold: 2500,20000
+tri_max_hold: 6000,60000
+need_self_check:false
+
+# correct_tri_hold: 6000
+# correct_step_mm: 0.02
+z_high_default: -264.0
+min_z_pos: -250
+retract_z_dist: 250
+retract_z_speed: 3600
+
+# [filament_switch_sensor filament_sensor_2]
+# pause_on_runout: true
+# switch_pin: nozzle_mcu:PA1
+[filament_switch_sensor filament_sensor]
+pause_on_runout: true
+switch_pin: !PC15
+
+[verify_heater extruder]
+check_gain_time:30
+[verify_heater heater_bed]
+check_gain_time:120
+heating_gain: 1.0
+hysteresis: 10
+
+[mcu rpi]
+serial: /tmp/klipper_host_mcu
+
+[bl24c16f]
+i2c_mcu: rpi
+i2c_bus: i2c.2
+i2c_speed: 400000
+
+[idle_timeout]
+timeout: 99999999
+
+[virtual_sdcard]
+path: /usr/data/printer_data/gcodes
+
+[gcode_arcs]
+resolution: 1.0
+
+[duplicate_pin_override]
+pins:PC6
+[temperature_fan soc_fan]
+pin:PB2
+sensor_type: temperature_mcu
+control:watermark
+kick_start_time:0.500
+shutdown_speed:0
+off_below:0.1
+target_temp:45
+min_temp:-15
+max_temp:100
+max_speed:1
+min_speed:0.3
+tachometer_pin:PC6
+# [output_pin soc_fan]
+# pin: PB2
+# pwm: True
+# cycle_time: 0.0100
+# hardware_pwm: false
+# value: 0.00
+# scale: 255
+# shutdown_value: 0.0
+
+[stepper_x]
+step_pin:PC2
+dir_pin:PB9
+enable_pin:!PC3
+microsteps:32
+rotation_distance:39.94
+# endstop_pin:tmc2209_stepper_x:virtual_endstop
+endstop_pin:PA5
+position_endstop:-2
+position_min:-2
+position_max:227
+homing_speed:60
+homing_retract_dist:0#10
+
+[tmc2209 stepper_x]
+uart_pin:PA9
+driver_SGTHRS: 85
+uart_address:3
+interpolate: true
+run_current:1.5
+sense_resistor: 0.10
+stealthchop_threshold: 0
+diag_pin: ^PB12
+driver_TBL: 1
+driver_TOFF: 2
+driver_HEND: 2
+driver_HSTRT: 4
+
+[stepper_y]
+step_pin: PB8
+dir_pin: PB7
+enable_pin: !PC3
+microsteps: 32
+rotation_distance: 40
+endstop_pin: tmc2209_stepper_y:virtual_endstop
+position_endstop: -5
+position_min: -10
+position_max: 221.5
+homing_speed: 30
+homing_retract_dist:0
+
+[tmc2209 stepper_y]
+uart_pin:PA10
+driver_SGTHRS: 78
+uart_address:3
+interpolate: true
+run_current:1.5
+sense_resistor: 0.10
+stealthchop_threshold: 0
+diag_pin: ^PB13
+driver_TBL: 1
+driver_TOFF: 2
+driver_HEND: 2
+driver_HSTRT: 4
+
+[stepper_z]
+step_pin: PB6
+dir_pin: PB5
+enable_pin: !PC3
+microsteps: 32
+rotation_distance:39.94
+# endstop_pin: tmc2209_stepper_z:virtual_endstop
+endstop_pin:PA15
+position_endstop: 268
+position_min: -10
+position_max: 275
+homing_speed: 60
+homing_retract_dist:0 #10
+
+[tmc2209 stepper_z]
+uart_pin:PA11
+driver_SGTHRS: 80
+uart_address:3
+interpolate: true
+run_current:1.5
+#hold_current:1.5
+sense_resistor: 0.10
+stealthchop_threshold: 0
+diag_pin: ^PB14
+driver_TBL: 1
+driver_TOFF: 2
+driver_HEND: 2
+driver_HSTRT: 4
+
+[extruder]
+max_extrude_cross_section: 80
+max_extrude_only_distance:1000.0
+step_pin:nozzle_mcu:PB5
+dir_pin:nozzle_mcu:PB4
+enable_pin:!nozzle_mcu:PB2
+microsteps:16
+rotation_distance:6.9
+nozzle_diameter:0.400
+filament_diameter:1.750
+heater_pin:nozzle_mcu:PB8
+sensor_type: EPCOS 100K B57560G104F
+sensor_pin:nozzle_mcu:PA0#PC5
+pressure_advance: 0.04
+pressure_advance_smooth_time: 0.040
+control:pid
+pid_Kp:24.669
+pid_Ki:2.937
+pid_Kd:51.804
+min_temp:-15
+max_temp:320
+
+[tmc2209 extruder]
+uart_pin:nozzle_mcu:PB11
+tx_pin:nozzle_mcu:PB10
+uart_address:3
+interpolate: false
+run_current:0.55
+hold_current:0.5
+sense_resistor: 0.150
+stealthchop_threshold: 0
+
+[heater_bed]
+heater_pin: PB10
+sensor_type: EPCOS 100K B57560G104F
+sensor_pin: PC4
+control: pid
+pid_kp: 27
+pid_ki: 0.08
+pid_kd: 0
+min_temp: -15
+max_temp: 115
+
+#喉管风扇#
+[heater_fan my_nozzle_fan]
+pin:nozzle_mcu:PB6
+heater:extruder
+heater_temp:50.0
+cycle_time: 0.0100
+hardware_pwm: false
+shutdown_speed: 0.0
+fan_speed:1
+
+
+[static_digital_output my_board_fan]
+pins:nozzle_mcu:PB7
+#喷嘴风扇#
+[output_pin fan0]
+pin: !nozzle_mcu: PB3
+pwm: True
+cycle_time: 0.0100
+hardware_pwm: false
+value: 0.00
+scale: 255
+shutdown_value: 0.0
+
+[output_pin fan2]
+pin:nozzle_mcu:PB9
+pwm: True
+cycle_time: 0.0100
+hardware_pwm: false
+value: 0.00
+scale: 255
+shutdown_value: 0.0
+
+[output_pin fan1]
+pin:!nozzle_mcu:PC14
+pwm: True
+cycle_time: 0.0100
+hardware_pwm: false
+value: 0.00
+scale: 255
+shutdown_value: 0.0
+
+[adxl345 adx_x]
+cs_pin: nozzle_mcu:PA4
+spi_speed: 5000000
+axes_map: y,-z,x
+spi_software_sclk_pin: nozzle_mcu:PA5
+spi_software_mosi_pin: nozzle_mcu:PA7
+spi_software_miso_pin: nozzle_mcu:PA6
+
+[adxl345 adx_y]
+cs_pin: leveling_mcu:PA4
+spi_speed: 5000000
+axes_map: y,x,z
+spi_software_sclk_pin: leveling_mcu:PA5
+spi_software_mosi_pin: leveling_mcu:PA7
+spi_software_miso_pin: leveling_mcu:PA6
+
+[resonance_tester]
+accel_chip_x:adxl345 adx_x
+accel_chip_y:adxl345 adx_y
+#accel_per_hz: 50
+probe_points:
+ 110,110,20
+
+[bed_mesh]
+speed:80
+mesh_min:5,5
+mesh_max:215,215
+probe_count:5,5
+algorithm:bicubic
+fade_start: 5.0
+fade_end: 50.0
+
+[display_status]
+
+[printer]
+kinematics:corexz
+max_velocity:600
+max_accel:20000
+max_accel_to_decel: 10000
+max_z_velocity:500
+square_corner_velocity: 5.0
+square_corner_max_velocity: 200.0
+[pause_resume]
+
+[soft_homing]
+diff_step:20
+
+[exclude_object]
diff --git a/downloads/Stock Config Files/Ender-3V3/1.2.3.21/printer_params.cfg b/downloads/Stock Config Files/Ender-3V3/1.2.3.21/printer_params.cfg
new file mode 100755
index 00000000..0906f7a0
--- /dev/null
+++ b/downloads/Stock Config Files/Ender-3V3/1.2.3.21/printer_params.cfg
@@ -0,0 +1,23 @@
+# F001
+# Printer_size: 220x220x250
+# Version: v1.0.0
+# CreateDate: 2023/07/18
+# Nozzle_mcu: chip: GD32F303CBT6
+# version: CR-K1-MAX-NOZZLE-V1.0.0
+# Leveling_mcu: chip: GD32E230F8P6
+# version: CR-K1-MAX-LEVELING-V1.0.0
+# mcu: chip: GD32F303RET6
+# version: CR4CU220812S12
+
+[fan_feedback]
+# fan0_pin: nozzle_mcu:PB3 # model fan
+#fan0_pin: nozzle_mcu:PB4 # throat fan
+fan0_pin: PC6 # backplane fan
+print_delay_time: 5
+current_delay_time: 2
+
+[custom_macro]
+default_bed_temp: 60
+default_extruder_temp: 240
+g28_ext_temp: 140
+
diff --git a/downloads/Stock Config Files/Ender-3V3/1.2.3.21/sensorless.cfg b/downloads/Stock Config Files/Ender-3V3/1.2.3.21/sensorless.cfg
new file mode 100755
index 00000000..2cd200d5
--- /dev/null
+++ b/downloads/Stock Config Files/Ender-3V3/1.2.3.21/sensorless.cfg
@@ -0,0 +1,201 @@
+# Createdate: 2023/08/08
+
+[force_move]
+ enable_force_move: true
+
+[gcode_macro xyz_ready]
+variable_x_ready: 0
+variable_y_ready: 0
+variable_z_ready: 0
+variable_xy_moved: 0
+variable_z_moved: 0
+variable_safe_z: 3
+gcode:
+
+[gcode_macro _IF_HOME_Z]
+gcode:
+ {% if printer['gcode_macro xyz_ready'].z_ready|int == 1 %}
+ {% if printer.toolhead.position.z|int < 5 %}
+ {% set z_park = 5.0 - printer.toolhead.position.z|int %}
+ G91
+ G1 z{z_park} F600
+ G90
+ {% endif %}
+ {% else %}
+ {% if printer['gcode_macro xyz_ready'].z_moved|int == 0 %}
+ # BED_MESH_SET_DISABLE
+ {% if printer.print_stats.power_loss == 1 %}
+ # SET_KINEMATIC_POSITION
+ # G91
+ # G1 z{printer["gcode_macro PRINTER_PARAM"].z_safe_g28} F600
+ # G90
+ # G4 P2000
+ {% else %}
+ # SET_KINEMATIC_POSITION
+ # G91
+ # G1 z2 F600
+ # G90
+ # G4 P2000
+ {% endif %}
+ SET_GCODE_VARIABLE MACRO=xyz_ready VARIABLE=z_moved VALUE=1
+ {% endif %}
+ {% endif %}
+
+[gcode_macro _IF_MOVE_XY]
+gcode:
+ _IF_HOME_Z
+ {% if printer['gcode_macro xyz_ready'].xy_moved|int == 0 %}
+ SET_GCODE_VARIABLE MACRO=xyz_ready VARIABLE=xy_moved VALUE=1
+ #G4 P1000
+ {% endif %}
+
+[gcode_macro _HOME_X]
+gcode:
+ _IF_MOVE_XY
+ {% if printer['gcode_macro xyz_ready'].x_ready|int == 1 %}
+ {% if (printer.toolhead.position.x)|int < 10 %}
+ G91
+ G1 x10 F3600
+ G90
+ G4 P2000
+ {% endif %}
+ {% endif %}
+ # Home
+ G28 X
+ G91
+ G1 x10 F3600
+ M400
+ G90
+ G4 P500
+ # SOFTX_G28
+ SET_GCODE_VARIABLE MACRO=xyz_ready VARIABLE=x_ready VALUE=1
+
+[gcode_macro _HOME_Y]
+gcode:
+ # _IF_MOVE_XY
+ #{% set HOME_CUR = 0.500 %}
+ #{% set driver_config = printer.configfile.settings['tmc2209 stepper_y'] %}
+ #{% set RUN_CUR = driver_config.run_current %}
+ #SET_TMC_CURRENT STEPPER=stepper_y CURRENT={HOME_CUR}
+ #G4 P2000
+ {% if printer['gcode_macro xyz_ready'].y_ready|int == 1 %}
+ {% if (printer.toolhead.position.y)|int < 10 %}
+ G91
+ G1 y10 F3600
+ G90
+ G4 P2000
+ {% endif %}
+ {% endif %}
+
+ # Home
+ #G28 Y
+ SOFTY_G28
+ SET_GCODE_VARIABLE MACRO=xyz_ready VARIABLE=y_ready VALUE=1
+ #SET_TMC_CURRENT STEPPER=stepper_y CURRENT={RUN_CUR}
+ #G4 P1000
+[gcode_macro _HOME_Z]
+gcode:
+ {% if printer['gcode_macro xyz_ready'].y_ready|int == 1 %}
+ {% if printer['gcode_macro xyz_ready'].x_ready|int == 1 %}
+ _IF_HOME_Z
+ {% endif %}
+ {% endif %}
+
+ {% set POSITION_X = printer.configfile.settings['stepper_x'].position_max/2 %}
+ {% set POSITION_Y = printer.configfile.settings['stepper_y'].position_max/2 %}
+ G91
+ {% set x_park = POSITION_X - printer.toolhead.position.x|int %}
+ {% set y_park = POSITION_Y - printer.toolhead.position.y|int %}
+ {action_respond_info("x_park = %s \n" % (x_park))}
+ {action_respond_info("y_park = %s \n" % (y_park))}
+ G1 x{x_park} y{y_park} F3600
+ G90
+ M400
+
+ G28 Z
+ SET_GCODE_VARIABLE MACRO=xyz_ready VARIABLE=z_ready VALUE=1
+
+[homing_override]
+axes: xyz
+gcode:
+ M220 S100
+ SET_VELOCITY_LIMIT ACCEL=5000 ACCEL_TO_DECEL=2500
+ BED_MESH_CLEAR
+ {% set x_axes = printer.toolhead.homed_axes %}
+ {% if x_axes is defined and x_axes[0] is defined %}
+ {action_respond_info(
+ "x_axes: %s \n"
+ % (x_axes))}
+ {% else %}
+ SET_GCODE_VARIABLE MACRO=xyz_ready VARIABLE=x_ready VALUE=0
+ SET_GCODE_VARIABLE MACRO=xyz_ready VARIABLE=y_ready VALUE=0
+ SET_GCODE_VARIABLE MACRO=xyz_ready VARIABLE=z_ready VALUE=0
+ SET_GCODE_VARIABLE MACRO=xyz_ready VARIABLE=xy_moved VALUE=0
+ SET_GCODE_VARIABLE MACRO=xyz_ready VARIABLE=z_moved VALUE=0
+ {action_respond_info(
+ "x_axes is NULL\n")}
+ {% endif %}
+
+ {% if x_axes is defined and x_axes[0] is defined and x_axes[1] is defined %}
+ {action_respond_info("x_axes: %s \n"% (x_axes))}
+ {% set position_y = printer.toolhead.position.y|int %}
+ {% set max_y_position = printer["gcode_macro PRINTER_PARAM"].max_y_position|int %}
+ {% if position_y >= max_y_position %}
+ G91
+ G0 Y-10 F3600
+ G90
+ {% endif %}
+ {% endif %}
+
+ {% set home_all = 'X' not in params and 'Y' not in params %}
+ {% if 'Z' in params and 'X' not in params and 'Y' not in params %}
+ {% if x_axes[0] is defined and x_axes[1] is defined %}
+ {% set home_all = 0 %}
+ {% endif %}
+ {% endif %}
+
+ {% if home_all or 'X' in params %}
+ {% if printer.print_stats.power_loss == 0 %}
+ SET_KINEMATIC_POSITION
+ G91
+ G1 X3 F1200
+ M400
+ G90
+ {% endif %}
+ STEPPER_Z_SENEORLESS
+ M400
+ _HOME_X
+ {% if printer.print_stats.power_loss == 0 %}
+ SET_KINEMATIC_POSITION
+ {% set retract_z = printer.configfile.settings['prtouch_v2'].retract_z_dist %}
+ {% set retract_speed = printer.configfile.settings['prtouch_v2'].retract_z_speed %}
+ G91
+ G1 Z-{retract_z} F{retract_speed}
+ M400
+ G90
+ G4 P500
+ {% endif %}
+ {% endif %}
+
+ {% if home_all or 'Y' in params %}
+ {% if printer.print_stats.power_loss == 1 %}
+ SOFT_CHECK_ERROR FLAG=1
+ {% endif %}
+ _HOME_Y
+
+ SOFT_CHECK_ERROR FLAG=0
+ {% endif %}
+
+ # {% if home_all or 'X' in params %}
+ # _HOME_X
+ # {% endif %}
+
+ # {% if home_all or 'Y' in params %}
+ # _HOME_Y
+ # {% endif %}
+
+ {% if home_all or 'Z' in params %}
+ _HOME_Z
+ BED_MESH_PROFILE LOAD="default"
+ {% endif %}
+ G4 P500