#include <stdio.h>
#include <stdint.h>
typedef struct
{
//0
uint32_t pulse_detect_enable : 1;
uint32_t reg0_31_1 : 31;
//1
uint32_t cfar_lead : 3;
uint32_t detection_algo : 1;
uint32_t stop_on_buffer_full : 1;
uint32_t reg1_5 : 1; //reserved
uint32_t min_pulse_length : 3;
uint32_t required_valid_fields : 4;
uint32_t reg1_15_13 : 3; //reserved
uint32_t dsp_width_threshold : 16;
//2
uint32_t num_rays_per_line : 12;
uint32_t derated_samples_per_ray : 13;
uint32_t reg2_31_25 : 7;
//3
uint32_t reg3_12_0 : 13;
uint32_t ray_start_idx : 13;
uint32_t reg3_31_26 : 6;
//4
uint32_t reset_start_idx : 13;
uint32_t reset_end_idx : 13;
uint32_t reg4_31_26 : 6;
//5
uint32_t ot0_start_idx : 13;
uint32_t ot0_end_idx : 13;
uint32_t reg5_31_26 : 6;
//6
uint32_t dsp_sat_peak_threshold : 12;
uint32_t reg6_15_12 : 4;
uint32_t leading_search_window : 8;
uint32_t trailing_search_window : 8;
//7
uint32_t dsp_time_offset : 16;
uint32_t fraction_of_local_max_to_declare_peak : 8;
uint32_t fraction_of_local_min_to_declare_saddle : 8;
//8
uint32_t negative_energy_sum_threshold; //32
//9
uint32_t fixed_start_threshold : 12;
//uint32_t fixed_cfar_end_threshold : 12;
uint32_t reg9_23_12 : 12;
uint32_t reg9_31_24 : 8;
//10
uint32_t width_threshold_enable : 1;
uint32_t retro_detect_enable : 1;
uint32_t range_threshold_enable : 1;
uint32_t noise_threshold_enable : 1;
uint32_t noise_measurement_enable : 1;
uint32_t median_select : 1;
uint32_t reg10_7_6 : 2; //reserved
uint32_t pulse_width_start_threshold : 12;
uint32_t retro_detect_threshold : 12;
//11,12
uint32_t start_threshold_width_scale_constant_table[2]; //6 x 8bit (idx0: 0-3, idx1: 4,5)
//13,14
//uint32_t cfar_end_threshold_width_scale_constant_table[2]; //6 x 8bit (idx0: 0-3, idx1: 4,5)
uint32_t reg13;
uint32_t reg14;
//15-18
uint32_t range_scale_boundary_index_table[4]; //8 x 13bit
//19,20
uint32_t start_threshold_range_scale_constant_offset_table[2]; //8 x 8bit
//21-24
uint32_t start_threshold_range_scale_constant_slope_table[4]; //8 x 16bit
//25,26
uint32_t enable_raw_pulse_format : 1;
uint32_t standard_pulse_format_num_groups : 3;
uint32_t reg25_4 : 1;
uint32_t standard_pulse_format_group0 : 5;
uint32_t standard_pulse_format_group1 : 5;
uint32_t standard_pulse_format_group2 : 5;
uint32_t standard_pulse_format_group3 : 5;
uint32_t standard_pulse_format_group4 : 5;
uint32_t reg25_31_30 : 2;
uint32_t standard_pulse_format_group5 : 5;
uint32_t standard_pulse_format_group6 : 5;
uint32_t standard_pulse_format_group7 : 5;
uint32_t reg26_31_15 : 17;
//27,28
uint32_t enable_saturated_pulse_format : 1;
uint32_t saturated_pulse_format_num_groups : 3;
uint32_t reg27_4 : 1;
uint32_t saturated_pulse_format_group0 : 5;
uint32_t saturated_pulse_format_group1 : 5;
uint32_t saturated_pulse_format_group2 : 5;
uint32_t saturated_pulse_format_group3 : 5;
uint32_t saturated_pulse_format_group4 : 5;
uint32_t reg27_31_30 : 2;
uint32_t saturated_pulse_format_group5 : 5;
uint32_t saturated_pulse_format_group6 : 5;
uint32_t saturated_pulse_format_group7 : 5;
uint32_t reg28_31_15 : 17;
//29,30
uint32_t enable_fused_pulse_format : 1;
uint32_t fused_pulse_format_num_groups : 3;
uint32_t reg29_4 : 1;
uint32_t fused_pulse_format_group0 : 5;
uint32_t fused_pulse_format_group1 : 5;
uint32_t fused_pulse_format_group2 : 5;
uint32_t fused_pulse_format_group3 : 5;
uint32_t fused_pulse_format_group4 : 5;
uint32_t reg29_31_30 : 2;
uint32_t fused_pulse_format_group5 : 5;
uint32_t fused_pulse_format_group6 : 5;
uint32_t fused_pulse_format_group7 : 5;
uint32_t reg30_31_15 : 17;
//31
uint32_t reg31;
//32
uint32_t signal_preprocessor_enable : 1;
uint32_t filter_enable : 1;
uint32_t rounding_enable : 1;
uint32_t reg32_31_3 : 29;
//33
uint32_t adc_offset_constant : 16;
uint32_t adc_scale_constant : 16;
//34
uint32_t filter_select : 1;
uint32_t reg34_3_1 : 3; //reserved
uint32_t cic_width : 4;
uint32_t cic_order : 2;
uint32_t reg34_15_10 : 6; //reserved
uint32_t one_over_cic_gain : 16;
//35-42
uint32_t firCoefficients[8];
//43
uint32_t reg43;
} dsp_config_channel_t;
typedef struct
{
uint32_t max_returns : 4;
uint32_t down_selection_method : 4;
uint32_t reg0_31_8 : 24;
uint32_t farDetectionSamePulseWindowWidth;
uint32_t superLowGainDetectionSamePulseWindowWidth;
uint32_t align64pad_0;
} dsp_config_channel_fusion_t;
typedef struct
{
uint32_t reserved[8];
} stream_data_compiler_t;
typedef struct
{
uint32_t adpBiasValueCoarse;
uint32_t adpBiasValueFine;
} dsp_config_roic_t;
typedef struct
{
uint32_t enable;
uint32_t detectionAlgo;
float rangeOffset;
float retroRangeOffset;
float azimuthOffset;
float elevationOffset;
dsp_config_channel_t nearHighGainChannel;
dsp_config_channel_t superLowGainChannel;
dsp_config_channel_t farHighGainChannel;
dsp_config_channel_fusion_t channelFusion;
dsp_config_roic_t roic;
stream_data_compiler_t streamDataCompiler;
} dsp_config_site_t;
typedef struct
{
uint8_t prf_offset_lsrdrv1[8][8];
uint8_t prf_offset_lsrdrv2[8][8];
uint8_t prf_offset_roic_rst[8][8];
uint32_t laser_period : 16;
uint32_t pad : 16;
uint32_t lsrdrv1_pulse_width : 8;
uint32_t lsrdrv2_pulse_width : 8;
uint32_t lsrdrv1_high_res_pulse_width : 8;
uint32_t lsrdrv2_high_res_pulse_width : 8;
uint32_t reserved[8];
} dsp_config_laser_timing_t;
typedef struct
{
uint32_t simulationModeEnable : 1;
uint32_t rcv_setting : 3;
uint32_t rcv_mode : 2;
uint32_t rcv_type : 3;
uint32_t pad : 23;
float tecSetPoint;
uint32_t pointCloudFormat;
uint32_t positionCalculationMethod;
dsp_config_laser_timing_t laserTiming;
} dsp_config_general_t;
typedef struct
{
uint32_t structVersion;
uint32_t align64pad;
dsp_config_general_t generalSettings;
dsp_config_site_t site[4];
} dsp_config_parameter_block_version_1_t;
#define SIMULATION_MODE 1
#define DSP_CONFIG_STRUCT_VERSION 8
#define POSITION_CALCULATION_METHOD 3
#define FIR_01_00 0x00080007 // FIR Tap 1 | 0 ( 0.0002, 0.0002)
#define FIR_03_02 0xffc3fff2 // FIR Tap 3 | 2 (-0.0019, -0.0005)
#define FIR_05_04 0x0015ffb4 // FIR Tap 5 | 4 ( 0.0006, -0.0023)
#define FIR_07_06 0x018000e8 // FIR Tap 7 | 6 ( 0.0117, 0.0071)
#define FIR_09_08 0xfe3600c0 // FIR Tap 9 | 8 (-0.0140, 0.0059)
#define FIR_11_10 0xfb1afb47 // FIR Tap 11 | 10 (-0.0383, -0.0369)
#define FIR_13_12 0x0c1800a9 // FIR Tap 13 | 12 ( 0.0945, 0.0052)
#define FIR_15_14 0x227e1974 // FIR Tap 15 | 14 ( 0.2695, 0.1989)
#define FIR_INIT { FIR_01_00, FIR_03_02, FIR_05_04, FIR_07_06, FIR_09_08, FIR_11_10, FIR_13_12, FIR_15_14 }
#define START_THRESHOLD_WIDTH_SCALE_CONSTANT_TABLE { 0, 126 << 8 }
#define RANGE_SCALE_BOUNDARY_INDEX_TABLE { 0, 0, 0, 0 }
#define START_THRESHOLD_RANGE_SCALE_CONSTANT_OFFSET_TABLE { 0, 0 }
#define START_THRESHOLD_RANGE_SCALE_CONSTANT_SLOPE_TABLE { 0, 0, 0, 0 }
#if defined (ADV_A2_J) || defined (ADV_A3_STAGING) || defined (ADV_A3)
#define RAY_START_INDEX 304
#else
#define RAY_START_INDEX 488
#endif
#define DSP_CONFIG_SITE_0_CHANNEL_0_INIT \
{ \
.pulse_detect_enable = 1, \
.cfar_lead = 3, \
.detection_algo = 1, \
.stop_on_buffer_full = 0, \
.min_pulse_length = 3, \
.required_valid_fields = 15, \
.dsp_width_threshold = 50, \
.num_rays_per_line = 960, \
.derated_samples_per_ray = 8191, \
.ray_start_idx = RAY_START_INDEX, \
.reset_start_idx = 0, \
.reset_end_idx = 16, \
.ot0_start_idx = 0, \
.ot0_end_idx = 16, \
.dsp_sat_peak_threshold = 1200, \
.leading_search_window = 5, \
.trailing_search_window = 5, \
.dsp_time_offset = 0, \
.negative_energy_sum_threshold = 0, \
.fixed_start_threshold = 175, \
.width_threshold_enable = 0, \
.retro_detect_enable = 1, \
.range_threshold_enable = 0, \
.noise_threshold_enable = 0, \
.noise_measurement_enable = 1, \
.median_select = 0, \
.pulse_width_start_threshold = 0, \
.retro_detect_threshold = 250, \
.start_threshold_width_scale_constant_table = START_THRESHOLD_WIDTH_SCALE_CONSTANT_TABLE, \
.range_scale_boundary_index_table = RANGE_SCALE_BOUNDARY_INDEX_TABLE, \
.start_threshold_range_scale_constant_offset_table = START_THRESHOLD_RANGE_SCALE_CONSTANT_OFFSET_TABLE, \
.start_threshold_range_scale_constant_slope_table = START_THRESHOLD_RANGE_SCALE_CONSTANT_SLOPE_TABLE, \
.signal_preprocessor_enable = 1, \
.filter_enable = 1, \
.rounding_enable = 1, \
.fraction_of_local_min_to_declare_saddle = 51, \
.fraction_of_local_max_to_declare_peak = 205, \
.adc_offset_constant = 1200, \
.adc_scale_constant = 5600, \
.filter_select = 0, \
.cic_width = 5, \
.cic_order = 3, \
.one_over_cic_gain = 13107, \
.firCoefficients = FIR_INIT, \
}
#define DSP_CONFIG_SITE_0_CHANNEL_1_INIT \
{ \
.pulse_detect_enable = 1, \
.cfar_lead = 3, \
.detection_algo = 1, \
.stop_on_buffer_full = 0, \
.min_pulse_length = 3, \
.required_valid_fields = 15, \
.dsp_width_threshold = 50, \
.num_rays_per_line = 960, \
.derated_samples_per_ray = 8191, \
.ray_start_idx = RAY_START_INDEX, \
.reset_start_idx = 0, \
.reset_end_idx = 16, \
.ot0_start_idx = 0, \
.ot0_end_idx = 16, \
.dsp_sat_peak_threshold = 1200, \
.leading_search_window = 5, \
.trailing_search_window = 5, \
.dsp_time_offset = 0, \
.negative_energy_sum_threshold = 0, \
.fixed_start_threshold = 175, \
.width_threshold_enable = 0, \
.retro_detect_enable = 1, \
.range_threshold_enable = 0, \
.noise_threshold_enable = 0, \
.noise_measurement_enable = 1, \
.median_select = 0, \
.pulse_width_start_threshold = 0, \
.retro_detect_threshold = 250, \
.start_threshold_width_scale_constant_table = START_THRESHOLD_WIDTH_SCALE_CONSTANT_TABLE, \
.range_scale_boundary_index_table = RANGE_SCALE_BOUNDARY_INDEX_TABLE, \
.start_threshold_range_scale_constant_offset_table = START_THRESHOLD_RANGE_SCALE_CONSTANT_OFFSET_TABLE, \
.start_threshold_range_scale_constant_slope_table = START_THRESHOLD_RANGE_SCALE_CONSTANT_SLOPE_TABLE, \
.signal_preprocessor_enable = 1, \
.filter_enable = 1, \
.rounding_enable = 1, \
.fraction_of_local_min_to_declare_saddle = 51, \
.fraction_of_local_max_to_declare_peak = 205, \
.adc_offset_constant = 1200, \
.adc_scale_constant = 5600, \
.filter_select = 0, \
.cic_width = 5, \
.cic_order = 3, \
.one_over_cic_gain = 13107, \
.firCoefficients = FIR_INIT, \
}
#define DSP_CONFIG_SITE_0_CHANNEL_2_INIT \
{ \
.pulse_detect_enable = 1, \
.cfar_lead = 3, \
.detection_algo = 1, \
.stop_on_buffer_full = 0, \
.min_pulse_length = 3, \
.required_valid_fields = 15, \
.dsp_width_threshold = 50, \
.num_rays_per_line = 960, \
.derated_samples_per_ray = 8191, \
.ray_start_idx = RAY_START_INDEX, \
.reset_start_idx = 0, \
.reset_end_idx = 16, \
.ot0_start_idx = 0, \
.ot0_end_idx = 16, \
.dsp_sat_peak_threshold = 1200, \
.leading_search_window = 5, \
.trailing_search_window = 5, \
.dsp_time_offset = 0, \
.negative_energy_sum_threshold = 0, \
.fixed_start_threshold = 175, \
.width_threshold_enable = 0, \
.retro_detect_enable = 1, \
.range_threshold_enable = 0, \
.noise_threshold_enable = 0, \
.noise_measurement_enable = 1, \
.median_select = 0, \
.pulse_width_start_threshold = 0, \
.retro_detect_threshold = 250, \
.start_threshold_width_scale_constant_table = START_THRESHOLD_WIDTH_SCALE_CONSTANT_TABLE, \
.range_scale_boundary_index_table = RANGE_SCALE_BOUNDARY_INDEX_TABLE, \
.start_threshold_range_scale_constant_offset_table = START_THRESHOLD_RANGE_SCALE_CONSTANT_OFFSET_TABLE, \
.start_threshold_range_scale_constant_slope_table = START_THRESHOLD_RANGE_SCALE_CONSTANT_SLOPE_TABLE, \
.signal_preprocessor_enable = 1, \
.filter_enable = 1, \
.rounding_enable = 1, \
.fraction_of_local_min_to_declare_saddle = 51, \
.fraction_of_local_max_to_declare_peak = 205, \
.adc_offset_constant = 1200, \
.adc_scale_constant = 5600, \
.filter_select = 0, \
.cic_width = 5, \
.cic_order = 3, \
.one_over_cic_gain = 13107, \
.firCoefficients = FIR_INIT, \
}
#define DSP_CONFIG_SITE_1_CHANNEL_0_INIT \
{ \
.pulse_detect_enable = 1, \
.cfar_lead = 3, \
.detection_algo = 1, \
.stop_on_buffer_full = 0, \
.min_pulse_length = 3, \
.required_valid_fields = 15, \
.dsp_width_threshold = 50, \
.num_rays_per_line = 960, \
.derated_samples_per_ray = 8191, \
.ray_start_idx = RAY_START_INDEX, \
.reset_start_idx = 0, \
.reset_end_idx = 16, \
.ot0_start_idx = 0, \
.ot0_end_idx = 16, \
.dsp_sat_peak_threshold = 1200, \
.leading_search_window = 5, \
.trailing_search_window = 5, \
.dsp_time_offset = 0, \
.negative_energy_sum_threshold = 0, \
.fixed_start_threshold = 175, \
.width_threshold_enable = 0, \
.retro_detect_enable = 1, \
.range_threshold_enable = 0, \
.noise_threshold_enable = 0, \
.noise_measurement_enable = 1, \
.median_select = 0, \
.pulse_width_start_threshold = 0, \
.retro_detect_threshold = 250, \
.start_threshold_width_scale_constant_table = START_THRESHOLD_WIDTH_SCALE_CONSTANT_TABLE, \
.range_scale_boundary_index_table = RANGE_SCALE_BOUNDARY_INDEX_TABLE, \
.start_threshold_range_scale_constant_offset_table = START_THRESHOLD_RANGE_SCALE_CONSTANT_OFFSET_TABLE, \
.start_threshold_range_scale_constant_slope_table = START_THRESHOLD_RANGE_SCALE_CONSTANT_SLOPE_TABLE, \
.signal_preprocessor_enable = 1, \
.filter_enable = 1, \
.rounding_enable = 1, \
.fraction_of_local_min_to_declare_saddle = 51, \
.fraction_of_local_max_to_declare_peak = 205, \
.adc_offset_constant = 1200, \
.adc_scale_constant = 5600, \
.filter_select = 0, \
.cic_width = 5, \
.cic_order = 3, \
.one_over_cic_gain = 13107, \
.firCoefficients = FIR_INIT, \
}
#define DSP_CONFIG_SITE_1_CHANNEL_1_INIT \
{ \
.pulse_detect_enable = 1, \
.cfar_lead = 3, \
.detection_algo = 1, \
.stop_on_buffer_full = 0, \
.min_pulse_length = 3, \
.required_valid_fields = 15, \
.dsp_width_threshold = 50, \
.num_rays_per_line = 960, \
.derated_samples_per_ray = 8191, \
.ray_start_idx = RAY_START_INDEX, \
.reset_start_idx = 0, \
.reset_end_idx = 16, \
.ot0_start_idx = 0, \
.ot0_end_idx = 16, \
.dsp_sat_peak_threshold = 1200, \
.leading_search_window = 5, \
.trailing_search_window = 5, \
.dsp_time_offset = 0, \
.negative_energy_sum_threshold = 0, \
.fixed_start_threshold = 175, \
.width_threshold_enable = 0, \
.retro_detect_enable = 1, \
.range_threshold_enable = 0, \
.noise_threshold_enable = 0, \
.noise_measurement_enable = 1, \
.median_select = 0, \
.pulse_width_start_threshold = 0, \
.retro_detect_threshold = 250, \
.start_threshold_width_scale_constant_table = START_THRESHOLD_WIDTH_SCALE_CONSTANT_TABLE, \
.range_scale_boundary_index_table = RANGE_SCALE_BOUNDARY_INDEX_TABLE, \
.start_threshold_range_scale_constant_offset_table = START_THRESHOLD_RANGE_SCALE_CONSTANT_OFFSET_TABLE, \
.start_threshold_range_scale_constant_slope_table = START_THRESHOLD_RANGE_SCALE_CONSTANT_SLOPE_TABLE, \
.signal_preprocessor_enable = 1, \
.filter_enable = 1, \
.rounding_enable = 1, \
.fraction_of_local_min_to_declare_saddle = 51, \
.fraction_of_local_max_to_declare_peak = 205, \
.adc_offset_constant = 1200, \
.adc_scale_constant = 5600, \
.filter_select = 0, \
.cic_width = 5, \
.cic_order = 3, \
.one_over_cic_gain = 13107, \
.firCoefficients = FIR_INIT, \
}
#define DSP_CONFIG_SITE_1_CHANNEL_2_INIT \
{ \
.pulse_detect_enable = 1, \
.cfar_lead = 3, \
.detection_algo = 1, \
.stop_on_buffer_full = 0, \
.min_pulse_length = 3, \
.required_valid_fields = 15, \
.dsp_width_threshold = 50, \
.num_rays_per_line = 960, \
.derated_samples_per_ray = 8191, \
.ray_start_idx = RAY_START_INDEX, \
.reset_start_idx = 0, \
.reset_end_idx = 16, \
.ot0_start_idx = 0, \
.ot0_end_idx = 16, \
.dsp_sat_peak_threshold = 1200, \
.leading_search_window = 5, \
.trailing_search_window = 5, \
.dsp_time_offset = 0, \
.negative_energy_sum_threshold = 0, \
.fixed_start_threshold = 175, \
.width_threshold_enable = 0, \
.retro_detect_enable = 1, \
.range_threshold_enable = 0, \
.noise_threshold_enable = 0, \
.noise_measurement_enable = 1, \
.median_select = 0, \
.pulse_width_start_threshold = 0, \
.retro_detect_threshold = 250, \
.start_threshold_width_scale_constant_table = START_THRESHOLD_WIDTH_SCALE_CONSTANT_TABLE, \
.range_scale_boundary_index_table = RANGE_SCALE_BOUNDARY_INDEX_TABLE, \
.start_threshold_range_scale_constant_offset_table = START_THRESHOLD_RANGE_SCALE_CONSTANT_OFFSET_TABLE, \
.start_threshold_range_scale_constant_slope_table = START_THRESHOLD_RANGE_SCALE_CONSTANT_SLOPE_TABLE, \
.signal_preprocessor_enable = 1, \
.filter_enable = 1, \
.rounding_enable = 1, \
.fraction_of_local_min_to_declare_saddle = 51, \
.fraction_of_local_max_to_declare_peak = 205, \
.adc_offset_constant = 1200, \
.adc_scale_constant = 5600, \
.filter_select = 0, \
.cic_width = 5, \
.cic_order = 3, \
.one_over_cic_gain = 13107, \
.firCoefficients = FIR_INIT, \
}
#define DSP_CONFIG_SITE_2_CHANNEL_0_INIT DSP_CONFIG_SITE_1_CHANNEL_0_INIT
#define DSP_CONFIG_SITE_2_CHANNEL_1_INIT DSP_CONFIG_SITE_1_CHANNEL_1_INIT
#define DSP_CONFIG_SITE_2_CHANNEL_2_INIT DSP_CONFIG_SITE_1_CHANNEL_2_INIT
#define DSP_CONFIG_SITE_3_CHANNEL_0_INIT DSP_CONFIG_SITE_1_CHANNEL_0_INIT
#define DSP_CONFIG_SITE_3_CHANNEL_1_INIT DSP_CONFIG_SITE_1_CHANNEL_1_INIT
#define DSP_CONFIG_SITE_3_CHANNEL_2_INIT DSP_CONFIG_SITE_1_CHANNEL_2_INIT
#define CHANNEL_FUSION_INIT \
{ \
.max_returns = 8, \
.down_selection_method = 0, \
.reg0_31_8 = 0, \
.farDetectionSamePulseWindowWidth = 20, \
.superLowGainDetectionSamePulseWindowWidth = 20, \
.align64pad_0 = 0, \
}
#define DSP_CONFIG_SITE_0_INIT \
{ \
.enable = 1, \
.detectionAlgo = 1, \
.rangeOffset = 0.0f, \
.retroRangeOffset = 0.0f, \
.azimuthOffset = 0.0145f - 1.0472f, \
.elevationOffset = 0.0049f, \
.nearHighGainChannel = DSP_CONFIG_SITE_0_CHANNEL_0_INIT, \
.superLowGainChannel = DSP_CONFIG_SITE_0_CHANNEL_1_INIT, \
.farHighGainChannel = DSP_CONFIG_SITE_0_CHANNEL_2_INIT, \
.channelFusion = CHANNEL_FUSION_INIT, \
.roic = { 22,0 }, \
}
#if defined (ADV_A2_J)
#define PULSE_DETECT_ENABLE 1
#elif defined (ADV_A3_STAGING) || defined (ADV_A3)
#define PULSE_DETECT_ENABLE 1
#else
#define PULSE_DETECT_ENABLE 1
#endif
#define DSP_CONFIG_SITE_1_INIT \
{ \
.enable = PULSE_DETECT_ENABLE, \
.detectionAlgo = 1, \
.rangeOffset = 0.0f, \
.retroRangeOffset = 0.0f, \
.azimuthOffset = -0.0145f - 1.0472f, \
.elevationOffset = -0.0049f, \
.nearHighGainChannel = DSP_CONFIG_SITE_1_CHANNEL_0_INIT, \
.superLowGainChannel = DSP_CONFIG_SITE_1_CHANNEL_1_INIT, \
.farHighGainChannel = DSP_CONFIG_SITE_1_CHANNEL_2_INIT, \
.channelFusion = CHANNEL_FUSION_INIT, \
.roic = { 22,0 }, \
}
//TODO: Update these values (mainly offsets)
#define DSP_CONFIG_SITE_2_INIT \
{ \
.enable = PULSE_DETECT_ENABLE, \
.detectionAlgo = 1, \
.rangeOffset = 0.0f, \
.retroRangeOffset = 0.0f, \
.azimuthOffset = 0.f - 1.0472f, \
.elevationOffset = 0.f, \
.nearHighGainChannel = DSP_CONFIG_SITE_2_CHANNEL_0_INIT, \
.superLowGainChannel = DSP_CONFIG_SITE_2_CHANNEL_1_INIT, \
.farHighGainChannel = DSP_CONFIG_SITE_2_CHANNEL_2_INIT, \
.channelFusion = CHANNEL_FUSION_INIT, \
.roic = { 22,0 }, \
}
#define DSP_CONFIG_SITE_3_INIT \
{ \
.enable = PULSE_DETECT_ENABLE, \
.detectionAlgo = 1, \
.rangeOffset = 0.0f, \
.retroRangeOffset = 0.0f, \
.azimuthOffset = -0.0290f - 1.0472f, \
.elevationOffset = -0.0098f, \
.nearHighGainChannel = DSP_CONFIG_SITE_3_CHANNEL_0_INIT, \
.superLowGainChannel = DSP_CONFIG_SITE_3_CHANNEL_1_INIT, \
.farHighGainChannel = DSP_CONFIG_SITE_3_CHANNEL_2_INIT, \
.channelFusion = CHANNEL_FUSION_INIT, \
.roic = { 22,0 }, \
}
#define PRF_OFFSET_LSRDRV1_INIT \
{ \
0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, \
}
#define PRF_OFFSET_LSRDRV2_INIT \
{ \
0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, \
}
#define PRF_OFFSET_ROIC_RST_INIT \
{ \
0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, \
0, 0, 0, 0, 0, 0, 0, 0, \
}
#define DSP_CONFIG_LASER_TIMING_INIT \
{ \
.prf_offset_lsrdrv1 = PRF_OFFSET_LSRDRV1_INIT, \
.prf_offset_lsrdrv2 = PRF_OFFSET_LSRDRV2_INIT, \
.prf_offset_roic_rst = PRF_OFFSET_ROIC_RST_INIT, \
.laser_period = 0, \
.lsrdrv1_pulse_width = 0, \
.lsrdrv2_pulse_width = 0, \
.lsrdrv1_high_res_pulse_width = 0, \
.lsrdrv2_high_res_pulse_width = 0, \
}
/* For 4 beams ROICs, the APDs are connected to the middle sites,
so sites 2,3,4 & 5 are active. Site 0,1,6,7 are inactive.
The mode used is JTX2 to begin with, the mode is changed in TC4, and is only for monitoring purposes
J1=0 , JTX1=1, JTX2=2, JTX3=3
rcv_type tells which ROIC type is used, 1 is 711, 2 is 711a (needs to be sent to Rfsoc for monitoring purposes)
*/
#define DSP_CONFIG_GENERAL_INIT \
{ \
.simulationModeEnable = SIMULATION_MODE, \
.rcv_setting = 2, \
.rcv_mode = 2, \
.rcv_type = 1, \
.tecSetPoint = 35.0, \
.pointCloudFormat = 1, \
.positionCalculationMethod = POSITION_CALCULATION_METHOD, \
.laserTiming = DSP_CONFIG_LASER_TIMING_INIT, \
}
dsp_config_parameter_block_version_1_t const default_dsp_config =
{
.structVersion = DSP_CONFIG_STRUCT_VERSION,
.generalSettings = DSP_CONFIG_GENERAL_INIT,
.site = { DSP_CONFIG_SITE_0_INIT, DSP_CONFIG_SITE_1_INIT, DSP_CONFIG_SITE_2_INIT, DSP_CONFIG_SITE_3_INIT },
};
int main(void) {
// your code goes here
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRpbnQuaD4KCnR5cGVkZWYgc3RydWN0CnsKICAgIC8vMAogICAgdWludDMyX3QgcHVsc2VfZGV0ZWN0X2VuYWJsZSA6IDE7CiAgICB1aW50MzJfdCByZWcwXzMxXzEgOiAzMTsKICAgIC8vMQogICAgdWludDMyX3QgY2Zhcl9sZWFkIDogMzsKICAgIHVpbnQzMl90IGRldGVjdGlvbl9hbGdvIDogMTsKICAgIHVpbnQzMl90IHN0b3Bfb25fYnVmZmVyX2Z1bGwgOiAxOwogICAgdWludDMyX3QgcmVnMV81IDogMTsgLy9yZXNlcnZlZAogICAgdWludDMyX3QgbWluX3B1bHNlX2xlbmd0aCA6IDM7CiAgICB1aW50MzJfdCByZXF1aXJlZF92YWxpZF9maWVsZHMgOiA0OwogICAgdWludDMyX3QgcmVnMV8xNV8xMyA6IDM7IC8vcmVzZXJ2ZWQKICAgIHVpbnQzMl90IGRzcF93aWR0aF90aHJlc2hvbGQgOiAxNjsKICAgIC8vMgogICAgdWludDMyX3QgbnVtX3JheXNfcGVyX2xpbmUgOiAxMjsKICAgIHVpbnQzMl90IGRlcmF0ZWRfc2FtcGxlc19wZXJfcmF5IDogMTM7CiAgICB1aW50MzJfdCByZWcyXzMxXzI1IDogNzsKICAgIC8vMwogICAgdWludDMyX3QgcmVnM18xMl8wIDogMTM7CiAgICB1aW50MzJfdCByYXlfc3RhcnRfaWR4IDogMTM7CiAgICB1aW50MzJfdCByZWczXzMxXzI2IDogNjsKICAgIC8vNAogICAgdWludDMyX3QgcmVzZXRfc3RhcnRfaWR4IDogMTM7CiAgICB1aW50MzJfdCByZXNldF9lbmRfaWR4IDogMTM7CiAgICB1aW50MzJfdCByZWc0XzMxXzI2IDogNjsKICAgIC8vNQogICAgdWludDMyX3Qgb3QwX3N0YXJ0X2lkeCA6IDEzOwogICAgdWludDMyX3Qgb3QwX2VuZF9pZHggOiAxMzsKICAgIHVpbnQzMl90IHJlZzVfMzFfMjYgOiA2OwogICAgLy82CiAgICB1aW50MzJfdCBkc3Bfc2F0X3BlYWtfdGhyZXNob2xkIDogMTI7CiAgICB1aW50MzJfdCByZWc2XzE1XzEyIDogNDsKICAgIHVpbnQzMl90IGxlYWRpbmdfc2VhcmNoX3dpbmRvdyA6IDg7CiAgICB1aW50MzJfdCB0cmFpbGluZ19zZWFyY2hfd2luZG93IDogODsKICAgIC8vNwogICAgdWludDMyX3QgZHNwX3RpbWVfb2Zmc2V0IDogMTY7CiAgICB1aW50MzJfdCBmcmFjdGlvbl9vZl9sb2NhbF9tYXhfdG9fZGVjbGFyZV9wZWFrIDogODsKICAgIHVpbnQzMl90IGZyYWN0aW9uX29mX2xvY2FsX21pbl90b19kZWNsYXJlX3NhZGRsZSA6IDg7CiAgICAvLzgKICAgIHVpbnQzMl90IG5lZ2F0aXZlX2VuZXJneV9zdW1fdGhyZXNob2xkOyAvLzMyCiAgICAvLzkKICAgIHVpbnQzMl90IGZpeGVkX3N0YXJ0X3RocmVzaG9sZCA6IDEyOwogICAgLy91aW50MzJfdCBmaXhlZF9jZmFyX2VuZF90aHJlc2hvbGQgOiAxMjsKICAgIHVpbnQzMl90IHJlZzlfMjNfMTIgOiAxMjsKICAgIHVpbnQzMl90IHJlZzlfMzFfMjQgOiA4OwogICAgLy8xMAogICAgdWludDMyX3Qgd2lkdGhfdGhyZXNob2xkX2VuYWJsZSA6IDE7CiAgICB1aW50MzJfdCByZXRyb19kZXRlY3RfZW5hYmxlIDogMTsKICAgIHVpbnQzMl90IHJhbmdlX3RocmVzaG9sZF9lbmFibGUgOiAxOwogICAgdWludDMyX3Qgbm9pc2VfdGhyZXNob2xkX2VuYWJsZSA6IDE7CiAgICB1aW50MzJfdCBub2lzZV9tZWFzdXJlbWVudF9lbmFibGUgOiAxOwogICAgdWludDMyX3QgbWVkaWFuX3NlbGVjdCA6IDE7CiAgICB1aW50MzJfdCByZWcxMF83XzYgOiAyOyAvL3Jlc2VydmVkCiAgICB1aW50MzJfdCBwdWxzZV93aWR0aF9zdGFydF90aHJlc2hvbGQgOiAxMjsKICAgIHVpbnQzMl90IHJldHJvX2RldGVjdF90aHJlc2hvbGQgOiAxMjsKICAgIC8vMTEsMTIKICAgIHVpbnQzMl90IHN0YXJ0X3RocmVzaG9sZF93aWR0aF9zY2FsZV9jb25zdGFudF90YWJsZVsyXTsgLy82IHggOGJpdCAoaWR4MDogMC0zLCBpZHgxOiA0LDUpCiAgICAvLzEzLDE0CiAgICAvL3VpbnQzMl90IGNmYXJfZW5kX3RocmVzaG9sZF93aWR0aF9zY2FsZV9jb25zdGFudF90YWJsZVsyXTsgLy82IHggOGJpdCAoaWR4MDogMC0zLCBpZHgxOiA0LDUpCiAgICB1aW50MzJfdCByZWcxMzsKICAgIHVpbnQzMl90IHJlZzE0OwogICAgLy8xNS0xOAogICAgdWludDMyX3QgcmFuZ2Vfc2NhbGVfYm91bmRhcnlfaW5kZXhfdGFibGVbNF07IC8vOCB4IDEzYml0CiAgICAvLzE5LDIwCiAgICB1aW50MzJfdCBzdGFydF90aHJlc2hvbGRfcmFuZ2Vfc2NhbGVfY29uc3RhbnRfb2Zmc2V0X3RhYmxlWzJdOyAvLzggeCA4Yml0CiAgICAvLzIxLTI0CiAgICB1aW50MzJfdCBzdGFydF90aHJlc2hvbGRfcmFuZ2Vfc2NhbGVfY29uc3RhbnRfc2xvcGVfdGFibGVbNF07IC8vOCB4IDE2Yml0CiAgICAvLzI1LDI2CiAgICB1aW50MzJfdCBlbmFibGVfcmF3X3B1bHNlX2Zvcm1hdCA6IDE7CiAgICB1aW50MzJfdCBzdGFuZGFyZF9wdWxzZV9mb3JtYXRfbnVtX2dyb3VwcyA6IDM7CiAgICB1aW50MzJfdCByZWcyNV80IDogMTsKICAgIHVpbnQzMl90IHN0YW5kYXJkX3B1bHNlX2Zvcm1hdF9ncm91cDAgOiA1OwogICAgdWludDMyX3Qgc3RhbmRhcmRfcHVsc2VfZm9ybWF0X2dyb3VwMSA6IDU7CiAgICB1aW50MzJfdCBzdGFuZGFyZF9wdWxzZV9mb3JtYXRfZ3JvdXAyIDogNTsKICAgIHVpbnQzMl90IHN0YW5kYXJkX3B1bHNlX2Zvcm1hdF9ncm91cDMgOiA1OwogICAgdWludDMyX3Qgc3RhbmRhcmRfcHVsc2VfZm9ybWF0X2dyb3VwNCA6IDU7CiAgICB1aW50MzJfdCByZWcyNV8zMV8zMCA6IDI7CiAgICB1aW50MzJfdCBzdGFuZGFyZF9wdWxzZV9mb3JtYXRfZ3JvdXA1IDogNTsKICAgIHVpbnQzMl90IHN0YW5kYXJkX3B1bHNlX2Zvcm1hdF9ncm91cDYgOiA1OwogICAgdWludDMyX3Qgc3RhbmRhcmRfcHVsc2VfZm9ybWF0X2dyb3VwNyA6IDU7CiAgICB1aW50MzJfdCByZWcyNl8zMV8xNSA6IDE3OwogICAgLy8yNywyOAogICAgdWludDMyX3QgZW5hYmxlX3NhdHVyYXRlZF9wdWxzZV9mb3JtYXQgOiAxOwogICAgdWludDMyX3Qgc2F0dXJhdGVkX3B1bHNlX2Zvcm1hdF9udW1fZ3JvdXBzIDogMzsKICAgIHVpbnQzMl90IHJlZzI3XzQgOiAxOwogICAgdWludDMyX3Qgc2F0dXJhdGVkX3B1bHNlX2Zvcm1hdF9ncm91cDAgOiA1OwogICAgdWludDMyX3Qgc2F0dXJhdGVkX3B1bHNlX2Zvcm1hdF9ncm91cDEgOiA1OwogICAgdWludDMyX3Qgc2F0dXJhdGVkX3B1bHNlX2Zvcm1hdF9ncm91cDIgOiA1OwogICAgdWludDMyX3Qgc2F0dXJhdGVkX3B1bHNlX2Zvcm1hdF9ncm91cDMgOiA1OwogICAgdWludDMyX3Qgc2F0dXJhdGVkX3B1bHNlX2Zvcm1hdF9ncm91cDQgOiA1OwogICAgdWludDMyX3QgcmVnMjdfMzFfMzAgOiAyOwogICAgdWludDMyX3Qgc2F0dXJhdGVkX3B1bHNlX2Zvcm1hdF9ncm91cDUgOiA1OwogICAgdWludDMyX3Qgc2F0dXJhdGVkX3B1bHNlX2Zvcm1hdF9ncm91cDYgOiA1OwogICAgdWludDMyX3Qgc2F0dXJhdGVkX3B1bHNlX2Zvcm1hdF9ncm91cDcgOiA1OwogICAgdWludDMyX3QgcmVnMjhfMzFfMTUgOiAxNzsKICAgIC8vMjksMzAKICAgIHVpbnQzMl90IGVuYWJsZV9mdXNlZF9wdWxzZV9mb3JtYXQgOiAxOwogICAgdWludDMyX3QgZnVzZWRfcHVsc2VfZm9ybWF0X251bV9ncm91cHMgOiAzOwogICAgdWludDMyX3QgcmVnMjlfNCA6IDE7CiAgICB1aW50MzJfdCBmdXNlZF9wdWxzZV9mb3JtYXRfZ3JvdXAwIDogNTsKICAgIHVpbnQzMl90IGZ1c2VkX3B1bHNlX2Zvcm1hdF9ncm91cDEgOiA1OwogICAgdWludDMyX3QgZnVzZWRfcHVsc2VfZm9ybWF0X2dyb3VwMiA6IDU7CiAgICB1aW50MzJfdCBmdXNlZF9wdWxzZV9mb3JtYXRfZ3JvdXAzIDogNTsKICAgIHVpbnQzMl90IGZ1c2VkX3B1bHNlX2Zvcm1hdF9ncm91cDQgOiA1OwogICAgdWludDMyX3QgcmVnMjlfMzFfMzAgOiAyOwogICAgdWludDMyX3QgZnVzZWRfcHVsc2VfZm9ybWF0X2dyb3VwNSA6IDU7CiAgICB1aW50MzJfdCBmdXNlZF9wdWxzZV9mb3JtYXRfZ3JvdXA2IDogNTsKICAgIHVpbnQzMl90IGZ1c2VkX3B1bHNlX2Zvcm1hdF9ncm91cDcgOiA1OwogICAgdWludDMyX3QgcmVnMzBfMzFfMTUgOiAxNzsKICAgIC8vMzEKICAgIHVpbnQzMl90IHJlZzMxOwogICAgLy8zMgogICAgdWludDMyX3Qgc2lnbmFsX3ByZXByb2Nlc3Nvcl9lbmFibGUgOiAxOwogICAgdWludDMyX3QgZmlsdGVyX2VuYWJsZSA6IDE7CiAgICB1aW50MzJfdCByb3VuZGluZ19lbmFibGUgOiAxOwogICAgdWludDMyX3QgcmVnMzJfMzFfMyA6IDI5OwogICAgLy8zMwogICAgdWludDMyX3QgYWRjX29mZnNldF9jb25zdGFudCA6IDE2OwogICAgdWludDMyX3QgYWRjX3NjYWxlX2NvbnN0YW50IDogMTY7CiAgICAvLzM0CiAgICB1aW50MzJfdCBmaWx0ZXJfc2VsZWN0IDogMTsKICAgIHVpbnQzMl90IHJlZzM0XzNfMSA6IDM7IC8vcmVzZXJ2ZWQKICAgIHVpbnQzMl90IGNpY193aWR0aCA6IDQ7CiAgICB1aW50MzJfdCBjaWNfb3JkZXIgOiAyOwogICAgdWludDMyX3QgcmVnMzRfMTVfMTAgOiA2OyAvL3Jlc2VydmVkCiAgICB1aW50MzJfdCBvbmVfb3Zlcl9jaWNfZ2FpbiA6IDE2OwogICAgLy8zNS00MgogICAgdWludDMyX3QgZmlyQ29lZmZpY2llbnRzWzhdOwogICAgLy80MwogICAgdWludDMyX3QgcmVnNDM7Cn0gZHNwX2NvbmZpZ19jaGFubmVsX3Q7Cgp0eXBlZGVmIHN0cnVjdAp7CiAgICB1aW50MzJfdCBtYXhfcmV0dXJucyA6IDQ7CiAgICB1aW50MzJfdCBkb3duX3NlbGVjdGlvbl9tZXRob2QgOiA0OwogICAgdWludDMyX3QgcmVnMF8zMV84IDogMjQ7CiAgICB1aW50MzJfdCBmYXJEZXRlY3Rpb25TYW1lUHVsc2VXaW5kb3dXaWR0aDsKICAgIHVpbnQzMl90IHN1cGVyTG93R2FpbkRldGVjdGlvblNhbWVQdWxzZVdpbmRvd1dpZHRoOwogICAgdWludDMyX3QgYWxpZ242NHBhZF8wOwp9IGRzcF9jb25maWdfY2hhbm5lbF9mdXNpb25fdDsKCnR5cGVkZWYgc3RydWN0CnsKICAgIHVpbnQzMl90IHJlc2VydmVkWzhdOwp9IHN0cmVhbV9kYXRhX2NvbXBpbGVyX3Q7Cgp0eXBlZGVmIHN0cnVjdAp7CiAgICB1aW50MzJfdCBhZHBCaWFzVmFsdWVDb2Fyc2U7CiAgICB1aW50MzJfdCBhZHBCaWFzVmFsdWVGaW5lOwp9IGRzcF9jb25maWdfcm9pY190OwoKdHlwZWRlZiBzdHJ1Y3QKewogICAgdWludDMyX3QgICAgICAgICAgICAgICAgICAgIGVuYWJsZTsKICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgICAgICBkZXRlY3Rpb25BbGdvOwogICAgZmxvYXQgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlT2Zmc2V0OwogICAgZmxvYXQgICAgICAgICAgICAgICAgICAgICAgIHJldHJvUmFuZ2VPZmZzZXQ7CiAgICBmbG9hdCAgICAgICAgICAgICAgICAgICAgICAgYXppbXV0aE9mZnNldDsKICAgIGZsb2F0ICAgICAgICAgICAgICAgICAgICAgICBlbGV2YXRpb25PZmZzZXQ7CiAgICBkc3BfY29uZmlnX2NoYW5uZWxfdCAgICAgICAgbmVhckhpZ2hHYWluQ2hhbm5lbDsKICAgIGRzcF9jb25maWdfY2hhbm5lbF90ICAgICAgICBzdXBlckxvd0dhaW5DaGFubmVsOwogICAgZHNwX2NvbmZpZ19jaGFubmVsX3QgICAgICAgIGZhckhpZ2hHYWluQ2hhbm5lbDsKICAgIGRzcF9jb25maWdfY2hhbm5lbF9mdXNpb25fdCBjaGFubmVsRnVzaW9uOwogICAgZHNwX2NvbmZpZ19yb2ljX3QgICAgICAgICAgIHJvaWM7CiAgICBzdHJlYW1fZGF0YV9jb21waWxlcl90ICAgICAgc3RyZWFtRGF0YUNvbXBpbGVyOwp9IGRzcF9jb25maWdfc2l0ZV90OwoKdHlwZWRlZiBzdHJ1Y3QKewogICAgdWludDhfdCAgcHJmX29mZnNldF9sc3JkcnYxWzhdWzhdOwogICAgdWludDhfdCAgcHJmX29mZnNldF9sc3JkcnYyWzhdWzhdOwogICAgdWludDhfdCAgcHJmX29mZnNldF9yb2ljX3JzdFs4XVs4XTsKICAgIHVpbnQzMl90IGxhc2VyX3BlcmlvZCA6IDE2OwogICAgdWludDMyX3QgcGFkIDogMTY7CiAgICB1aW50MzJfdCBsc3JkcnYxX3B1bHNlX3dpZHRoIDogODsKICAgIHVpbnQzMl90IGxzcmRydjJfcHVsc2Vfd2lkdGggOiA4OwogICAgdWludDMyX3QgbHNyZHJ2MV9oaWdoX3Jlc19wdWxzZV93aWR0aCA6IDg7CiAgICB1aW50MzJfdCBsc3JkcnYyX2hpZ2hfcmVzX3B1bHNlX3dpZHRoIDogODsKICAgIHVpbnQzMl90IHJlc2VydmVkWzhdOwp9IGRzcF9jb25maWdfbGFzZXJfdGltaW5nX3Q7Cgp0eXBlZGVmIHN0cnVjdAp7CiAgICB1aW50MzJfdCAgICAgICAgICAgICAgICAgIHNpbXVsYXRpb25Nb2RlRW5hYmxlIDogMTsKICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgICAgcmN2X3NldHRpbmcgOiAzOwogICAgdWludDMyX3QgICAgICAgICAgICAgICAgICByY3ZfbW9kZSA6IDI7CiAgICB1aW50MzJfdCAgICAgICAgICAgICAgICAgIHJjdl90eXBlIDogMzsKICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgICAgcGFkIDogMjM7CiAgICBmbG9hdCAgICAgICAgICAgICAgICAgICAgIHRlY1NldFBvaW50OwogICAgdWludDMyX3QgICAgICAgICAgICAgICAgICBwb2ludENsb3VkRm9ybWF0OwogICAgdWludDMyX3QgICAgICAgICAgICAgICAgICBwb3NpdGlvbkNhbGN1bGF0aW9uTWV0aG9kOwogICAgZHNwX2NvbmZpZ19sYXNlcl90aW1pbmdfdCBsYXNlclRpbWluZzsKfSBkc3BfY29uZmlnX2dlbmVyYWxfdDsKCnR5cGVkZWYgc3RydWN0CnsKICAgIHVpbnQzMl90ICAgICAgICAgICAgIHN0cnVjdFZlcnNpb247CiAgICB1aW50MzJfdCAgICAgICAgICAgICBhbGlnbjY0cGFkOwogICAgZHNwX2NvbmZpZ19nZW5lcmFsX3QgZ2VuZXJhbFNldHRpbmdzOwogICAgZHNwX2NvbmZpZ19zaXRlX3QgICAgc2l0ZVs0XTsKfSBkc3BfY29uZmlnX3BhcmFtZXRlcl9ibG9ja192ZXJzaW9uXzFfdDsKCiNkZWZpbmUgU0lNVUxBVElPTl9NT0RFIDEKI2RlZmluZSBEU1BfQ09ORklHX1NUUlVDVF9WRVJTSU9OIDgKI2RlZmluZSBQT1NJVElPTl9DQUxDVUxBVElPTl9NRVRIT0QgMwojZGVmaW5lIEZJUl8wMV8wMCAweDAwMDgwMDA3IC8vIEZJUiBUYXAgIDEgfCAgMCAoIDAuMDAwMiwgIDAuMDAwMikKI2RlZmluZSBGSVJfMDNfMDIgMHhmZmMzZmZmMiAvLyBGSVIgVGFwICAzIHwgIDIgKC0wLjAwMTksIC0wLjAwMDUpCiNkZWZpbmUgRklSXzA1XzA0IDB4MDAxNWZmYjQgLy8gRklSIFRhcCAgNSB8ICA0ICggMC4wMDA2LCAtMC4wMDIzKQojZGVmaW5lIEZJUl8wN18wNiAweDAxODAwMGU4IC8vIEZJUiBUYXAgIDcgfCAgNiAoIDAuMDExNywgIDAuMDA3MSkKI2RlZmluZSBGSVJfMDlfMDggMHhmZTM2MDBjMCAvLyBGSVIgVGFwICA5IHwgIDggKC0wLjAxNDAsICAwLjAwNTkpCiNkZWZpbmUgRklSXzExXzEwIDB4ZmIxYWZiNDcgLy8gRklSIFRhcCAxMSB8IDEwICgtMC4wMzgzLCAtMC4wMzY5KQojZGVmaW5lIEZJUl8xM18xMiAweDBjMTgwMGE5IC8vIEZJUiBUYXAgMTMgfCAxMiAoIDAuMDk0NSwgIDAuMDA1MikKI2RlZmluZSBGSVJfMTVfMTQgMHgyMjdlMTk3NCAvLyBGSVIgVGFwIDE1IHwgMTQgKCAwLjI2OTUsICAwLjE5ODkpCgojZGVmaW5lIEZJUl9JTklUIHsgRklSXzAxXzAwLCBGSVJfMDNfMDIsIEZJUl8wNV8wNCwgRklSXzA3XzA2LCBGSVJfMDlfMDgsIEZJUl8xMV8xMCwgRklSXzEzXzEyLCBGSVJfMTVfMTQgfQoKI2RlZmluZSBTVEFSVF9USFJFU0hPTERfV0lEVEhfU0NBTEVfQ09OU1RBTlRfVEFCTEUgeyAwLCAxMjYgPDwgOCB9CiNkZWZpbmUgUkFOR0VfU0NBTEVfQk9VTkRBUllfSU5ERVhfVEFCTEUgeyAwLCAwLCAwLCAwIH0KI2RlZmluZSBTVEFSVF9USFJFU0hPTERfUkFOR0VfU0NBTEVfQ09OU1RBTlRfT0ZGU0VUX1RBQkxFIHsgMCwgMCB9CiNkZWZpbmUgU1RBUlRfVEhSRVNIT0xEX1JBTkdFX1NDQUxFX0NPTlNUQU5UX1NMT1BFX1RBQkxFIHsgMCwgMCwgMCwgMCB9CgojaWYgZGVmaW5lZCAoQURWX0EyX0opIHx8IGRlZmluZWQgKEFEVl9BM19TVEFHSU5HKSB8fCBkZWZpbmVkIChBRFZfQTMpCiAgICAjZGVmaW5lIFJBWV9TVEFSVF9JTkRFWCAgICAgICAgICAgICAzMDQKI2Vsc2UKICAgICNkZWZpbmUgUkFZX1NUQVJUX0lOREVYICAgICAgICAgICAgIDQ4OAojZW5kaWYKI2RlZmluZSBEU1BfQ09ORklHX1NJVEVfMF9DSEFOTkVMXzBfSU5JVCAgICAgICAgICAgICAgICAgICAgICAgXAp7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAucHVsc2VfZGV0ZWN0X2VuYWJsZSA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5jZmFyX2xlYWQgPSAzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLmRldGVjdGlvbl9hbGdvID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAuc3RvcF9vbl9idWZmZXJfZnVsbCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5taW5fcHVsc2VfbGVuZ3RoID0gMywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLnJlcXVpcmVkX3ZhbGlkX2ZpZWxkcyA9IDE1LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAuZHNwX3dpZHRoX3RocmVzaG9sZCA9IDUwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5udW1fcmF5c19wZXJfbGluZSA9IDk2MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLmRlcmF0ZWRfc2FtcGxlc19wZXJfcmF5ID0gODE5MSwgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAucmF5X3N0YXJ0X2lkeCA9IFJBWV9TVEFSVF9JTkRFWCwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5yZXNldF9zdGFydF9pZHggPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLnJlc2V0X2VuZF9pZHggPSAxNiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAub3QwX3N0YXJ0X2lkeCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5vdDBfZW5kX2lkeCA9IDE2LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLmRzcF9zYXRfcGVha190aHJlc2hvbGQgPSAxMjAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAubGVhZGluZ19zZWFyY2hfd2luZG93ID0gNSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC50cmFpbGluZ19zZWFyY2hfd2luZG93ID0gNSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLmRzcF90aW1lX29mZnNldCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAubmVnYXRpdmVfZW5lcmd5X3N1bV90aHJlc2hvbGQgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5maXhlZF9zdGFydF90aHJlc2hvbGQgPSAxNzUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLndpZHRoX3RocmVzaG9sZF9lbmFibGUgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAucmV0cm9fZGV0ZWN0X2VuYWJsZSA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5yYW5nZV90aHJlc2hvbGRfZW5hYmxlID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLm5vaXNlX3RocmVzaG9sZF9lbmFibGUgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAubm9pc2VfbWVhc3VyZW1lbnRfZW5hYmxlID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5tZWRpYW5fc2VsZWN0ID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLnB1bHNlX3dpZHRoX3N0YXJ0X3RocmVzaG9sZCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAucmV0cm9fZGV0ZWN0X3RocmVzaG9sZCA9IDI1MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5zdGFydF90aHJlc2hvbGRfd2lkdGhfc2NhbGVfY29uc3RhbnRfdGFibGUgPSBTVEFSVF9USFJFU0hPTERfV0lEVEhfU0NBTEVfQ09OU1RBTlRfVEFCTEUsICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAucmFuZ2Vfc2NhbGVfYm91bmRhcnlfaW5kZXhfdGFibGUgPSBSQU5HRV9TQ0FMRV9CT1VOREFSWV9JTkRFWF9UQUJMRSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLnN0YXJ0X3RocmVzaG9sZF9yYW5nZV9zY2FsZV9jb25zdGFudF9vZmZzZXRfdGFibGUgPSBTVEFSVF9USFJFU0hPTERfUkFOR0VfU0NBTEVfQ09OU1RBTlRfT0ZGU0VUX1RBQkxFLCAgICAgICAgIFwKICAgIC5zdGFydF90aHJlc2hvbGRfcmFuZ2Vfc2NhbGVfY29uc3RhbnRfc2xvcGVfdGFibGUgPSBTVEFSVF9USFJFU0hPTERfUkFOR0VfU0NBTEVfQ09OU1RBTlRfU0xPUEVfVEFCTEUsICAgICAgICAgICBcCiAgICAuc2lnbmFsX3ByZXByb2Nlc3Nvcl9lbmFibGUgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5maWx0ZXJfZW5hYmxlID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLnJvdW5kaW5nX2VuYWJsZSA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAuZnJhY3Rpb25fb2ZfbG9jYWxfbWluX3RvX2RlY2xhcmVfc2FkZGxlID0gNTEsICAgICAgICAgICAgIFwKICAgIC5mcmFjdGlvbl9vZl9sb2NhbF9tYXhfdG9fZGVjbGFyZV9wZWFrID0gMjA1LCAgICAgICAgICAgICAgXAogICAgLmFkY19vZmZzZXRfY29uc3RhbnQgPSAxMjAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAuYWRjX3NjYWxlX2NvbnN0YW50ID0gNTYwMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5maWx0ZXJfc2VsZWN0ID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLmNpY193aWR0aCA9IDUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAuY2ljX29yZGVyID0gMywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5vbmVfb3Zlcl9jaWNfZ2FpbiA9IDEzMTA3LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLmZpckNvZWZmaWNpZW50cyA9IEZJUl9JTklULCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCn0KCiNkZWZpbmUgRFNQX0NPTkZJR19TSVRFXzBfQ0hBTk5FTF8xX0lOSVQgICAgICAgICAgICAgICAgICAgICAgIFwKeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLnB1bHNlX2RldGVjdF9lbmFibGUgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAuY2Zhcl9sZWFkID0gMywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5kZXRlY3Rpb25fYWxnbyA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLnN0b3Bfb25fYnVmZmVyX2Z1bGwgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAubWluX3B1bHNlX2xlbmd0aCA9IDMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5yZXF1aXJlZF92YWxpZF9maWVsZHMgPSAxNSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLmRzcF93aWR0aF90aHJlc2hvbGQgPSA1MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAubnVtX3JheXNfcGVyX2xpbmUgPSA5NjAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5kZXJhdGVkX3NhbXBsZXNfcGVyX3JheSA9IDgxOTEsICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLnJheV9zdGFydF9pZHggPSBSQVlfU1RBUlRfSU5ERVgsICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAucmVzZXRfc3RhcnRfaWR4ID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5yZXNldF9lbmRfaWR4ID0gMTYsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLm90MF9zdGFydF9pZHggPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAub3QwX2VuZF9pZHggPSAxNiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5kc3Bfc2F0X3BlYWtfdGhyZXNob2xkID0gMTIwMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLmxlYWRpbmdfc2VhcmNoX3dpbmRvdyA9IDUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAudHJhaWxpbmdfc2VhcmNoX3dpbmRvdyA9IDUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5kc3BfdGltZV9vZmZzZXQgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLm5lZ2F0aXZlX2VuZXJneV9zdW1fdGhyZXNob2xkID0gMCwgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAuZml4ZWRfc3RhcnRfdGhyZXNob2xkID0gMTc1LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC53aWR0aF90aHJlc2hvbGRfZW5hYmxlID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLnJldHJvX2RldGVjdF9lbmFibGUgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAucmFuZ2VfdGhyZXNob2xkX2VuYWJsZSA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5ub2lzZV90aHJlc2hvbGRfZW5hYmxlID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLm5vaXNlX21lYXN1cmVtZW50X2VuYWJsZSA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAubWVkaWFuX3NlbGVjdCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5wdWxzZV93aWR0aF9zdGFydF90aHJlc2hvbGQgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLnJldHJvX2RldGVjdF90aHJlc2hvbGQgPSAyNTAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAuc3RhcnRfdGhyZXNob2xkX3dpZHRoX3NjYWxlX2NvbnN0YW50X3RhYmxlID0gU1RBUlRfVEhSRVNIT0xEX1dJRFRIX1NDQUxFX0NPTlNUQU5UX1RBQkxFLCAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLnJhbmdlX3NjYWxlX2JvdW5kYXJ5X2luZGV4X3RhYmxlID0gUkFOR0VfU0NBTEVfQk9VTkRBUllfSU5ERVhfVEFCTEUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5zdGFydF90aHJlc2hvbGRfcmFuZ2Vfc2NhbGVfY29uc3RhbnRfb2Zmc2V0X3RhYmxlID0gU1RBUlRfVEhSRVNIT0xEX1JBTkdFX1NDQUxFX0NPTlNUQU5UX09GRlNFVF9UQUJMRSwgICAgICAgICBcCiAgICAuc3RhcnRfdGhyZXNob2xkX3JhbmdlX3NjYWxlX2NvbnN0YW50X3Nsb3BlX3RhYmxlID0gU1RBUlRfVEhSRVNIT0xEX1JBTkdFX1NDQUxFX0NPTlNUQU5UX1NMT1BFX1RBQkxFLCAgICAgICAgICAgXAogICAgLnNpZ25hbF9wcmVwcm9jZXNzb3JfZW5hYmxlID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAuZmlsdGVyX2VuYWJsZSA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5yb3VuZGluZ19lbmFibGUgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLmZyYWN0aW9uX29mX2xvY2FsX21pbl90b19kZWNsYXJlX3NhZGRsZSA9IDUxLCAgICAgICAgICAgICBcCiAgICAuZnJhY3Rpb25fb2ZfbG9jYWxfbWF4X3RvX2RlY2xhcmVfcGVhayA9IDIwNSwgICAgICAgICAgICAgIFwKICAgIC5hZGNfb2Zmc2V0X2NvbnN0YW50ID0gMTIwMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLmFkY19zY2FsZV9jb25zdGFudCA9IDU2MDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAuZmlsdGVyX3NlbGVjdCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5jaWNfd2lkdGggPSA1LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLmNpY19vcmRlciA9IDMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAub25lX292ZXJfY2ljX2dhaW4gPSAxMzEwNywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5maXJDb2VmZmljaWVudHMgPSBGSVJfSU5JVCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAp9CgojZGVmaW5lIERTUF9DT05GSUdfU0lURV8wX0NIQU5ORUxfMl9JTklUICAgICAgICAgICAgICAgICAgICAgICBcCnsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5wdWxzZV9kZXRlY3RfZW5hYmxlID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLmNmYXJfbGVhZCA9IDMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAuZGV0ZWN0aW9uX2FsZ28gPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5zdG9wX29uX2J1ZmZlcl9mdWxsID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLm1pbl9wdWxzZV9sZW5ndGggPSAzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAucmVxdWlyZWRfdmFsaWRfZmllbGRzID0gMTUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5kc3Bfd2lkdGhfdGhyZXNob2xkID0gNTAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLm51bV9yYXlzX3Blcl9saW5lID0gOTYwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAuZGVyYXRlZF9zYW1wbGVzX3Blcl9yYXkgPSA4MTkxLCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5yYXlfc3RhcnRfaWR4ID0gUkFZX1NUQVJUX0lOREVYLCAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLnJlc2V0X3N0YXJ0X2lkeCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAucmVzZXRfZW5kX2lkeCA9IDE2LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5vdDBfc3RhcnRfaWR4ID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLm90MF9lbmRfaWR4ID0gMTYsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAuZHNwX3NhdF9wZWFrX3RocmVzaG9sZCA9IDEyMDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5sZWFkaW5nX3NlYXJjaF93aW5kb3cgPSA1LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLnRyYWlsaW5nX3NlYXJjaF93aW5kb3cgPSA1LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAuZHNwX3RpbWVfb2Zmc2V0ID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5uZWdhdGl2ZV9lbmVyZ3lfc3VtX3RocmVzaG9sZCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLmZpeGVkX3N0YXJ0X3RocmVzaG9sZCA9IDE3NSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAud2lkdGhfdGhyZXNob2xkX2VuYWJsZSA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5yZXRyb19kZXRlY3RfZW5hYmxlID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLnJhbmdlX3RocmVzaG9sZF9lbmFibGUgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAubm9pc2VfdGhyZXNob2xkX2VuYWJsZSA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5ub2lzZV9tZWFzdXJlbWVudF9lbmFibGUgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLm1lZGlhbl9zZWxlY3QgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAucHVsc2Vfd2lkdGhfc3RhcnRfdGhyZXNob2xkID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5yZXRyb19kZXRlY3RfdGhyZXNob2xkID0gMjUwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLnN0YXJ0X3RocmVzaG9sZF93aWR0aF9zY2FsZV9jb25zdGFudF90YWJsZSA9IFNUQVJUX1RIUkVTSE9MRF9XSURUSF9TQ0FMRV9DT05TVEFOVF9UQUJMRSwgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5yYW5nZV9zY2FsZV9ib3VuZGFyeV9pbmRleF90YWJsZSA9IFJBTkdFX1NDQUxFX0JPVU5EQVJZX0lOREVYX1RBQkxFLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAuc3RhcnRfdGhyZXNob2xkX3JhbmdlX3NjYWxlX2NvbnN0YW50X29mZnNldF90YWJsZSA9IFNUQVJUX1RIUkVTSE9MRF9SQU5HRV9TQ0FMRV9DT05TVEFOVF9PRkZTRVRfVEFCTEUsICAgICAgICAgXAogICAgLnN0YXJ0X3RocmVzaG9sZF9yYW5nZV9zY2FsZV9jb25zdGFudF9zbG9wZV90YWJsZSA9IFNUQVJUX1RIUkVTSE9MRF9SQU5HRV9TQ0FMRV9DT05TVEFOVF9TTE9QRV9UQUJMRSwgICAgICAgICAgIFwKICAgIC5zaWduYWxfcHJlcHJvY2Vzc29yX2VuYWJsZSA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLmZpbHRlcl9lbmFibGUgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAucm91bmRpbmdfZW5hYmxlID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5mcmFjdGlvbl9vZl9sb2NhbF9taW5fdG9fZGVjbGFyZV9zYWRkbGUgPSA1MSwgICAgICAgICAgICAgXAogICAgLmZyYWN0aW9uX29mX2xvY2FsX21heF90b19kZWNsYXJlX3BlYWsgPSAyMDUsICAgICAgICAgICAgICBcCiAgICAuYWRjX29mZnNldF9jb25zdGFudCA9IDEyMDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5hZGNfc2NhbGVfY29uc3RhbnQgPSA1NjAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLmZpbHRlcl9zZWxlY3QgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAuY2ljX3dpZHRoID0gNSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5jaWNfb3JkZXIgPSAzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLm9uZV9vdmVyX2NpY19nYWluID0gMTMxMDcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAuZmlyQ29lZmZpY2llbnRzID0gRklSX0lOSVQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKfQoKI2RlZmluZSBEU1BfQ09ORklHX1NJVEVfMV9DSEFOTkVMXzBfSU5JVCAgICAgICAgICAgICAgICAgICAgICAgXAp7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAucHVsc2VfZGV0ZWN0X2VuYWJsZSA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5jZmFyX2xlYWQgPSAzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLmRldGVjdGlvbl9hbGdvID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAuc3RvcF9vbl9idWZmZXJfZnVsbCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5taW5fcHVsc2VfbGVuZ3RoID0gMywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLnJlcXVpcmVkX3ZhbGlkX2ZpZWxkcyA9IDE1LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAuZHNwX3dpZHRoX3RocmVzaG9sZCA9IDUwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5udW1fcmF5c19wZXJfbGluZSA9IDk2MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLmRlcmF0ZWRfc2FtcGxlc19wZXJfcmF5ID0gODE5MSwgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAucmF5X3N0YXJ0X2lkeCA9IFJBWV9TVEFSVF9JTkRFWCwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5yZXNldF9zdGFydF9pZHggPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLnJlc2V0X2VuZF9pZHggPSAxNiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAub3QwX3N0YXJ0X2lkeCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5vdDBfZW5kX2lkeCA9IDE2LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLmRzcF9zYXRfcGVha190aHJlc2hvbGQgPSAxMjAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAubGVhZGluZ19zZWFyY2hfd2luZG93ID0gNSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC50cmFpbGluZ19zZWFyY2hfd2luZG93ID0gNSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLmRzcF90aW1lX29mZnNldCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAubmVnYXRpdmVfZW5lcmd5X3N1bV90aHJlc2hvbGQgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5maXhlZF9zdGFydF90aHJlc2hvbGQgPSAxNzUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLndpZHRoX3RocmVzaG9sZF9lbmFibGUgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAucmV0cm9fZGV0ZWN0X2VuYWJsZSA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5yYW5nZV90aHJlc2hvbGRfZW5hYmxlID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLm5vaXNlX3RocmVzaG9sZF9lbmFibGUgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAubm9pc2VfbWVhc3VyZW1lbnRfZW5hYmxlID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5tZWRpYW5fc2VsZWN0ID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLnB1bHNlX3dpZHRoX3N0YXJ0X3RocmVzaG9sZCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAucmV0cm9fZGV0ZWN0X3RocmVzaG9sZCA9IDI1MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5zdGFydF90aHJlc2hvbGRfd2lkdGhfc2NhbGVfY29uc3RhbnRfdGFibGUgPSBTVEFSVF9USFJFU0hPTERfV0lEVEhfU0NBTEVfQ09OU1RBTlRfVEFCTEUsICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAucmFuZ2Vfc2NhbGVfYm91bmRhcnlfaW5kZXhfdGFibGUgPSBSQU5HRV9TQ0FMRV9CT1VOREFSWV9JTkRFWF9UQUJMRSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLnN0YXJ0X3RocmVzaG9sZF9yYW5nZV9zY2FsZV9jb25zdGFudF9vZmZzZXRfdGFibGUgPSBTVEFSVF9USFJFU0hPTERfUkFOR0VfU0NBTEVfQ09OU1RBTlRfT0ZGU0VUX1RBQkxFLCAgICAgICAgIFwKICAgIC5zdGFydF90aHJlc2hvbGRfcmFuZ2Vfc2NhbGVfY29uc3RhbnRfc2xvcGVfdGFibGUgPSBTVEFSVF9USFJFU0hPTERfUkFOR0VfU0NBTEVfQ09OU1RBTlRfU0xPUEVfVEFCTEUsICAgICAgICAgICBcCiAgICAuc2lnbmFsX3ByZXByb2Nlc3Nvcl9lbmFibGUgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5maWx0ZXJfZW5hYmxlID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLnJvdW5kaW5nX2VuYWJsZSA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAuZnJhY3Rpb25fb2ZfbG9jYWxfbWluX3RvX2RlY2xhcmVfc2FkZGxlID0gNTEsICAgICAgICAgICAgIFwKICAgIC5mcmFjdGlvbl9vZl9sb2NhbF9tYXhfdG9fZGVjbGFyZV9wZWFrID0gMjA1LCAgICAgICAgICAgICAgXAogICAgLmFkY19vZmZzZXRfY29uc3RhbnQgPSAxMjAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAuYWRjX3NjYWxlX2NvbnN0YW50ID0gNTYwMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5maWx0ZXJfc2VsZWN0ID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLmNpY193aWR0aCA9IDUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAuY2ljX29yZGVyID0gMywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5vbmVfb3Zlcl9jaWNfZ2FpbiA9IDEzMTA3LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLmZpckNvZWZmaWNpZW50cyA9IEZJUl9JTklULCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCn0KCiNkZWZpbmUgRFNQX0NPTkZJR19TSVRFXzFfQ0hBTk5FTF8xX0lOSVQgICAgICAgICAgICAgICAgICAgICAgIFwKeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLnB1bHNlX2RldGVjdF9lbmFibGUgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAuY2Zhcl9sZWFkID0gMywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5kZXRlY3Rpb25fYWxnbyA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLnN0b3Bfb25fYnVmZmVyX2Z1bGwgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAubWluX3B1bHNlX2xlbmd0aCA9IDMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5yZXF1aXJlZF92YWxpZF9maWVsZHMgPSAxNSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLmRzcF93aWR0aF90aHJlc2hvbGQgPSA1MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAubnVtX3JheXNfcGVyX2xpbmUgPSA5NjAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5kZXJhdGVkX3NhbXBsZXNfcGVyX3JheSA9IDgxOTEsICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLnJheV9zdGFydF9pZHggPSBSQVlfU1RBUlRfSU5ERVgsICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAucmVzZXRfc3RhcnRfaWR4ID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5yZXNldF9lbmRfaWR4ID0gMTYsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLm90MF9zdGFydF9pZHggPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAub3QwX2VuZF9pZHggPSAxNiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5kc3Bfc2F0X3BlYWtfdGhyZXNob2xkID0gMTIwMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLmxlYWRpbmdfc2VhcmNoX3dpbmRvdyA9IDUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAudHJhaWxpbmdfc2VhcmNoX3dpbmRvdyA9IDUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5kc3BfdGltZV9vZmZzZXQgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLm5lZ2F0aXZlX2VuZXJneV9zdW1fdGhyZXNob2xkID0gMCwgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAuZml4ZWRfc3RhcnRfdGhyZXNob2xkID0gMTc1LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC53aWR0aF90aHJlc2hvbGRfZW5hYmxlID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLnJldHJvX2RldGVjdF9lbmFibGUgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAucmFuZ2VfdGhyZXNob2xkX2VuYWJsZSA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5ub2lzZV90aHJlc2hvbGRfZW5hYmxlID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLm5vaXNlX21lYXN1cmVtZW50X2VuYWJsZSA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAubWVkaWFuX3NlbGVjdCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5wdWxzZV93aWR0aF9zdGFydF90aHJlc2hvbGQgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLnJldHJvX2RldGVjdF90aHJlc2hvbGQgPSAyNTAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAuc3RhcnRfdGhyZXNob2xkX3dpZHRoX3NjYWxlX2NvbnN0YW50X3RhYmxlID0gU1RBUlRfVEhSRVNIT0xEX1dJRFRIX1NDQUxFX0NPTlNUQU5UX1RBQkxFLCAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLnJhbmdlX3NjYWxlX2JvdW5kYXJ5X2luZGV4X3RhYmxlID0gUkFOR0VfU0NBTEVfQk9VTkRBUllfSU5ERVhfVEFCTEUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5zdGFydF90aHJlc2hvbGRfcmFuZ2Vfc2NhbGVfY29uc3RhbnRfb2Zmc2V0X3RhYmxlID0gU1RBUlRfVEhSRVNIT0xEX1JBTkdFX1NDQUxFX0NPTlNUQU5UX09GRlNFVF9UQUJMRSwgICAgICAgICBcCiAgICAuc3RhcnRfdGhyZXNob2xkX3JhbmdlX3NjYWxlX2NvbnN0YW50X3Nsb3BlX3RhYmxlID0gU1RBUlRfVEhSRVNIT0xEX1JBTkdFX1NDQUxFX0NPTlNUQU5UX1NMT1BFX1RBQkxFLCAgICAgICAgICAgXAogICAgLnNpZ25hbF9wcmVwcm9jZXNzb3JfZW5hYmxlID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAuZmlsdGVyX2VuYWJsZSA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5yb3VuZGluZ19lbmFibGUgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLmZyYWN0aW9uX29mX2xvY2FsX21pbl90b19kZWNsYXJlX3NhZGRsZSA9IDUxLCAgICAgICAgICAgICBcCiAgICAuZnJhY3Rpb25fb2ZfbG9jYWxfbWF4X3RvX2RlY2xhcmVfcGVhayA9IDIwNSwgICAgICAgICAgICAgIFwKICAgIC5hZGNfb2Zmc2V0X2NvbnN0YW50ID0gMTIwMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLmFkY19zY2FsZV9jb25zdGFudCA9IDU2MDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAuZmlsdGVyX3NlbGVjdCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5jaWNfd2lkdGggPSA1LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLmNpY19vcmRlciA9IDMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAub25lX292ZXJfY2ljX2dhaW4gPSAxMzEwNywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5maXJDb2VmZmljaWVudHMgPSBGSVJfSU5JVCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAp9CgojZGVmaW5lIERTUF9DT05GSUdfU0lURV8xX0NIQU5ORUxfMl9JTklUICAgICAgICAgICAgICAgICAgICAgICBcCnsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5wdWxzZV9kZXRlY3RfZW5hYmxlID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLmNmYXJfbGVhZCA9IDMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAuZGV0ZWN0aW9uX2FsZ28gPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5zdG9wX29uX2J1ZmZlcl9mdWxsID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLm1pbl9wdWxzZV9sZW5ndGggPSAzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAucmVxdWlyZWRfdmFsaWRfZmllbGRzID0gMTUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5kc3Bfd2lkdGhfdGhyZXNob2xkID0gNTAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLm51bV9yYXlzX3Blcl9saW5lID0gOTYwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAuZGVyYXRlZF9zYW1wbGVzX3Blcl9yYXkgPSA4MTkxLCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5yYXlfc3RhcnRfaWR4ID0gUkFZX1NUQVJUX0lOREVYLCAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLnJlc2V0X3N0YXJ0X2lkeCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAucmVzZXRfZW5kX2lkeCA9IDE2LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5vdDBfc3RhcnRfaWR4ID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLm90MF9lbmRfaWR4ID0gMTYsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAuZHNwX3NhdF9wZWFrX3RocmVzaG9sZCA9IDEyMDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5sZWFkaW5nX3NlYXJjaF93aW5kb3cgPSA1LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLnRyYWlsaW5nX3NlYXJjaF93aW5kb3cgPSA1LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAuZHNwX3RpbWVfb2Zmc2V0ID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5uZWdhdGl2ZV9lbmVyZ3lfc3VtX3RocmVzaG9sZCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLmZpeGVkX3N0YXJ0X3RocmVzaG9sZCA9IDE3NSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAud2lkdGhfdGhyZXNob2xkX2VuYWJsZSA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5yZXRyb19kZXRlY3RfZW5hYmxlID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLnJhbmdlX3RocmVzaG9sZF9lbmFibGUgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAubm9pc2VfdGhyZXNob2xkX2VuYWJsZSA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5ub2lzZV9tZWFzdXJlbWVudF9lbmFibGUgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLm1lZGlhbl9zZWxlY3QgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAucHVsc2Vfd2lkdGhfc3RhcnRfdGhyZXNob2xkID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5yZXRyb19kZXRlY3RfdGhyZXNob2xkID0gMjUwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLnN0YXJ0X3RocmVzaG9sZF93aWR0aF9zY2FsZV9jb25zdGFudF90YWJsZSA9IFNUQVJUX1RIUkVTSE9MRF9XSURUSF9TQ0FMRV9DT05TVEFOVF9UQUJMRSwgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5yYW5nZV9zY2FsZV9ib3VuZGFyeV9pbmRleF90YWJsZSA9IFJBTkdFX1NDQUxFX0JPVU5EQVJZX0lOREVYX1RBQkxFLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAuc3RhcnRfdGhyZXNob2xkX3JhbmdlX3NjYWxlX2NvbnN0YW50X29mZnNldF90YWJsZSA9IFNUQVJUX1RIUkVTSE9MRF9SQU5HRV9TQ0FMRV9DT05TVEFOVF9PRkZTRVRfVEFCTEUsICAgICAgICAgXAogICAgLnN0YXJ0X3RocmVzaG9sZF9yYW5nZV9zY2FsZV9jb25zdGFudF9zbG9wZV90YWJsZSA9IFNUQVJUX1RIUkVTSE9MRF9SQU5HRV9TQ0FMRV9DT05TVEFOVF9TTE9QRV9UQUJMRSwgICAgICAgICAgIFwKICAgIC5zaWduYWxfcHJlcHJvY2Vzc29yX2VuYWJsZSA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLmZpbHRlcl9lbmFibGUgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAucm91bmRpbmdfZW5hYmxlID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5mcmFjdGlvbl9vZl9sb2NhbF9taW5fdG9fZGVjbGFyZV9zYWRkbGUgPSA1MSwgICAgICAgICAgICAgXAogICAgLmZyYWN0aW9uX29mX2xvY2FsX21heF90b19kZWNsYXJlX3BlYWsgPSAyMDUsICAgICAgICAgICAgICBcCiAgICAuYWRjX29mZnNldF9jb25zdGFudCA9IDEyMDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5hZGNfc2NhbGVfY29uc3RhbnQgPSA1NjAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLmZpbHRlcl9zZWxlY3QgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAuY2ljX3dpZHRoID0gNSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5jaWNfb3JkZXIgPSAzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLm9uZV9vdmVyX2NpY19nYWluID0gMTMxMDcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAuZmlyQ29lZmZpY2llbnRzID0gRklSX0lOSVQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKfQoKI2RlZmluZSBEU1BfQ09ORklHX1NJVEVfMl9DSEFOTkVMXzBfSU5JVCBEU1BfQ09ORklHX1NJVEVfMV9DSEFOTkVMXzBfSU5JVAojZGVmaW5lIERTUF9DT05GSUdfU0lURV8yX0NIQU5ORUxfMV9JTklUIERTUF9DT05GSUdfU0lURV8xX0NIQU5ORUxfMV9JTklUCiNkZWZpbmUgRFNQX0NPTkZJR19TSVRFXzJfQ0hBTk5FTF8yX0lOSVQgRFNQX0NPTkZJR19TSVRFXzFfQ0hBTk5FTF8yX0lOSVQKI2RlZmluZSBEU1BfQ09ORklHX1NJVEVfM19DSEFOTkVMXzBfSU5JVCBEU1BfQ09ORklHX1NJVEVfMV9DSEFOTkVMXzBfSU5JVAojZGVmaW5lIERTUF9DT05GSUdfU0lURV8zX0NIQU5ORUxfMV9JTklUIERTUF9DT05GSUdfU0lURV8xX0NIQU5ORUxfMV9JTklUCiNkZWZpbmUgRFNQX0NPTkZJR19TSVRFXzNfQ0hBTk5FTF8yX0lOSVQgRFNQX0NPTkZJR19TSVRFXzFfQ0hBTk5FTF8yX0lOSVQKCiNkZWZpbmUgQ0hBTk5FTF9GVVNJT05fSU5JVCAgICAgICAgICAgICAgICAgICAgICAJICAgICAgICBcCnsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5tYXhfcmV0dXJucyA9IDgsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLmRvd25fc2VsZWN0aW9uX21ldGhvZCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAucmVnMF8zMV84ID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5mYXJEZXRlY3Rpb25TYW1lUHVsc2VXaW5kb3dXaWR0aCA9IDIwLCAgICAgICAgICAgICAgICAgICAgXAogICAgLnN1cGVyTG93R2FpbkRldGVjdGlvblNhbWVQdWxzZVdpbmRvd1dpZHRoID0gMjAsICAgICAgICAgICBcCiAgICAuYWxpZ242NHBhZF8wID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIH0KCgojZGVmaW5lIERTUF9DT05GSUdfU0lURV8wX0lOSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCnsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5lbmFibGUgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLmRldGVjdGlvbkFsZ28gPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAucmFuZ2VPZmZzZXQgPSAwLjBmLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5yZXRyb1JhbmdlT2Zmc2V0ID0gMC4wZiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLmF6aW11dGhPZmZzZXQgPSAwLjAxNDVmIC0gMS4wNDcyZiwgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAuZWxldmF0aW9uT2Zmc2V0ID0gMC4wMDQ5ZiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5uZWFySGlnaEdhaW5DaGFubmVsID0gRFNQX0NPTkZJR19TSVRFXzBfQ0hBTk5FTF8wX0lOSVQsICAgXAogICAgLnN1cGVyTG93R2FpbkNoYW5uZWwgPSBEU1BfQ09ORklHX1NJVEVfMF9DSEFOTkVMXzFfSU5JVCwgICBcCiAgICAuZmFySGlnaEdhaW5DaGFubmVsID0gRFNQX0NPTkZJR19TSVRFXzBfQ0hBTk5FTF8yX0lOSVQsICAgIFwKICAgIC5jaGFubmVsRnVzaW9uID0gQ0hBTk5FTF9GVVNJT05fSU5JVCwgICAgICAgICAgICAgICAgICAgICAgXAogICAgLnJvaWMgPSB7IDIyLDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCn0KCiNpZiBkZWZpbmVkIChBRFZfQTJfSikKICAgICNkZWZpbmUgUFVMU0VfREVURUNUX0VOQUJMRSAgMQojZWxpZiBkZWZpbmVkIChBRFZfQTNfU1RBR0lORykgfHwgZGVmaW5lZCAoQURWX0EzKQogICAgI2RlZmluZSBQVUxTRV9ERVRFQ1RfRU5BQkxFICAxCiNlbHNlCiAgICAjZGVmaW5lIFBVTFNFX0RFVEVDVF9FTkFCTEUgIDEKI2VuZGlmCgojZGVmaW5lIERTUF9DT05GSUdfU0lURV8xX0lOSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCnsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5lbmFibGUgPSBQVUxTRV9ERVRFQ1RfRU5BQkxFLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLmRldGVjdGlvbkFsZ28gPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAucmFuZ2VPZmZzZXQgPSAwLjBmLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5yZXRyb1JhbmdlT2Zmc2V0ID0gMC4wZiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLmF6aW11dGhPZmZzZXQgPSAtMC4wMTQ1ZiAtIDEuMDQ3MmYsICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAuZWxldmF0aW9uT2Zmc2V0ID0gLTAuMDA0OWYsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5uZWFySGlnaEdhaW5DaGFubmVsID0gRFNQX0NPTkZJR19TSVRFXzFfQ0hBTk5FTF8wX0lOSVQsICAgXAogICAgLnN1cGVyTG93R2FpbkNoYW5uZWwgPSBEU1BfQ09ORklHX1NJVEVfMV9DSEFOTkVMXzFfSU5JVCwgICBcCiAgICAuZmFySGlnaEdhaW5DaGFubmVsID0gRFNQX0NPTkZJR19TSVRFXzFfQ0hBTk5FTF8yX0lOSVQsICAgIFwKICAgIC5jaGFubmVsRnVzaW9uID0gQ0hBTk5FTF9GVVNJT05fSU5JVCwgICAgICAgICAgICAgICAgICAgICAgXAogICAgLnJvaWMgPSB7IDIyLDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCn0KCi8vVE9ETzogVXBkYXRlIHRoZXNlIHZhbHVlcyAobWFpbmx5IG9mZnNldHMpCiNkZWZpbmUgRFNQX0NPTkZJR19TSVRFXzJfSU5JVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLmVuYWJsZSA9IFBVTFNFX0RFVEVDVF9FTkFCTEUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAuZGV0ZWN0aW9uQWxnbyA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5yYW5nZU9mZnNldCA9IDAuMGYsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLnJldHJvUmFuZ2VPZmZzZXQgPSAwLjBmLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAuYXppbXV0aE9mZnNldCA9IDAuZiAtIDEuMDQ3MmYsICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5lbGV2YXRpb25PZmZzZXQgPSAwLmYsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLm5lYXJIaWdoR2FpbkNoYW5uZWwgPSBEU1BfQ09ORklHX1NJVEVfMl9DSEFOTkVMXzBfSU5JVCwgICBcCiAgICAuc3VwZXJMb3dHYWluQ2hhbm5lbCA9IERTUF9DT05GSUdfU0lURV8yX0NIQU5ORUxfMV9JTklULCAgIFwKICAgIC5mYXJIaWdoR2FpbkNoYW5uZWwgPSBEU1BfQ09ORklHX1NJVEVfMl9DSEFOTkVMXzJfSU5JVCwgICAgXAogICAgLmNoYW5uZWxGdXNpb24gPSBDSEFOTkVMX0ZVU0lPTl9JTklULCAgICAgICAgICAgICAgICAgICAgICBcCiAgICAucm9pYyA9IHsgMjIsMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKfQoKCiNkZWZpbmUgRFNQX0NPTkZJR19TSVRFXzNfSU5JVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLmVuYWJsZSA9IFBVTFNFX0RFVEVDVF9FTkFCTEUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAuZGV0ZWN0aW9uQWxnbyA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5yYW5nZU9mZnNldCA9IDAuMGYsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLnJldHJvUmFuZ2VPZmZzZXQgPSAwLjBmLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAuYXppbXV0aE9mZnNldCA9IC0wLjAyOTBmIC0gMS4wNDcyZiwgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5lbGV2YXRpb25PZmZzZXQgPSAtMC4wMDk4ZiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLm5lYXJIaWdoR2FpbkNoYW5uZWwgPSBEU1BfQ09ORklHX1NJVEVfM19DSEFOTkVMXzBfSU5JVCwgICBcCiAgICAuc3VwZXJMb3dHYWluQ2hhbm5lbCA9IERTUF9DT05GSUdfU0lURV8zX0NIQU5ORUxfMV9JTklULCAgIFwKICAgIC5mYXJIaWdoR2FpbkNoYW5uZWwgPSBEU1BfQ09ORklHX1NJVEVfM19DSEFOTkVMXzJfSU5JVCwgICAgXAogICAgLmNoYW5uZWxGdXNpb24gPSBDSEFOTkVMX0ZVU0lPTl9JTklULCAgICAgICAgICAgICAgICAgICAgICBcCiAgICAucm9pYyA9IHsgMjIsMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKfQoKI2RlZmluZSBQUkZfT0ZGU0VUX0xTUkRSVjFfSU5JVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAp7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAp9CiNkZWZpbmUgUFJGX09GRlNFVF9MU1JEUlYyX0lOSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAp9CiNkZWZpbmUgUFJGX09GRlNFVF9ST0lDX1JTVF9JTklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKfQogICAgICAgICAgIAojZGVmaW5lIERTUF9DT05GSUdfTEFTRVJfVElNSU5HX0lOSVQgICAgICAgICAgICAgICAgICAgICAgICAgICBcCnsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5wcmZfb2Zmc2V0X2xzcmRydjEgPSBQUkZfT0ZGU0VUX0xTUkRSVjFfSU5JVCwgICAgICAgICAgICAgXAogICAgLnByZl9vZmZzZXRfbHNyZHJ2MiA9IFBSRl9PRkZTRVRfTFNSRFJWMl9JTklULCAgICAgICAgICAgICBcCiAgICAucHJmX29mZnNldF9yb2ljX3JzdCA9IFBSRl9PRkZTRVRfUk9JQ19SU1RfSU5JVCwgICAgICAgICAgIFwKICAgIC5sYXNlcl9wZXJpb2QgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLmxzcmRydjFfcHVsc2Vfd2lkdGggPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAubHNyZHJ2Ml9wdWxzZV93aWR0aCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC5sc3JkcnYxX2hpZ2hfcmVzX3B1bHNlX3dpZHRoID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLmxzcmRydjJfaGlnaF9yZXNfcHVsc2Vfd2lkdGggPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICBcCn0KLyogRm9yIDQgYmVhbXMgUk9JQ3MsIHRoZSBBUERzIGFyZSBjb25uZWN0ZWQgdG8gdGhlIG1pZGRsZSBzaXRlcywKc28gc2l0ZXMgMiwzLDQgJiA1IGFyZSBhY3RpdmUuIFNpdGUgMCwxLDYsNyBhcmUgaW5hY3RpdmUuCgpUaGUgbW9kZSB1c2VkIGlzIEpUWDIgdG8gYmVnaW4gd2l0aCwgdGhlIG1vZGUgaXMgY2hhbmdlZCBpbiBUQzQsIGFuZCBpcyBvbmx5IGZvciBtb25pdG9yaW5nIHB1cnBvc2VzCkoxPTAgLCBKVFgxPTEsIEpUWDI9MiwgSlRYMz0zCgpyY3ZfdHlwZSB0ZWxscyB3aGljaCBST0lDIHR5cGUgaXMgdXNlZCwgMSBpcyA3MTEsIDIgaXMgNzExYSAobmVlZHMgdG8gYmUgc2VudCB0byBSZnNvYyBmb3IgbW9uaXRvcmluZyBwdXJwb3NlcykKKi8KI2RlZmluZSBEU1BfQ09ORklHX0dFTkVSQUxfSU5JVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAp7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAuc2ltdWxhdGlvbk1vZGVFbmFibGUgPSBTSU1VTEFUSU9OX01PREUsICAgICAgICAgICAgICAgICAgIFwKICAgIC5yY3Zfc2V0dGluZyA9IDIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLnJjdl9tb2RlID0gMiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAucmN2X3R5cGUgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIC50ZWNTZXRQb2ludCA9IDM1LjAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgLnBvaW50Q2xvdWRGb3JtYXQgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAucG9zaXRpb25DYWxjdWxhdGlvbk1ldGhvZCA9IFBPU0lUSU9OX0NBTENVTEFUSU9OX01FVEhPRCwgIFwKICAgIC5sYXNlclRpbWluZyA9IERTUF9DT05GSUdfTEFTRVJfVElNSU5HX0lOSVQsICAgICAgICAgICAgICAgXAp9Cgpkc3BfY29uZmlnX3BhcmFtZXRlcl9ibG9ja192ZXJzaW9uXzFfdCBjb25zdCBkZWZhdWx0X2RzcF9jb25maWcgPQp7CiAgICAuc3RydWN0VmVyc2lvbiA9IERTUF9DT05GSUdfU1RSVUNUX1ZFUlNJT04sCiAgICAuZ2VuZXJhbFNldHRpbmdzID0gRFNQX0NPTkZJR19HRU5FUkFMX0lOSVQsCiAgICAuc2l0ZSA9IHsgRFNQX0NPTkZJR19TSVRFXzBfSU5JVCwgRFNQX0NPTkZJR19TSVRFXzFfSU5JVCwgRFNQX0NPTkZJR19TSVRFXzJfSU5JVCwgRFNQX0NPTkZJR19TSVRFXzNfSU5JVCB9LAp9OwoKaW50IG1haW4odm9pZCkgewoJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoJcmV0dXJuIDA7Cn0K