library(readr)
library(dplyr)
Results for SVR linear using a reduced set of features
#RESULTS %>% arrange(cells)
#readr::write_csv(RESULTS,path = "./devcon_challenge.svr_results_feat_less.csv")
readr::read_csv("./devcon_challenge.svr_results_feat_less.csv") %>% filter(datasets %in% c("DS446395","DS500","CIAS4","CIVA3"))
readr::read_csv("./devcon_challenge.svr_results_feat_less.csv") %>% filter(datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>% summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
NA
Results for SVR linear using a full set of features
#RESULTS %>% arrange(cells)
#readr::write_csv(RESULTS,path = "./devcon_challenge.svr_full_results.csv")
readr::read_csv("./devcon_challenge.svr_full_results.csv") %>% filter(datasets %in% c("DS446395","DS500","CIAS4","CIVA3"))
readr::read_csv("./devcon_challenge.svr_full_results.csv") %>% filter(datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>% summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
NA
NA
Results for SVR Radial using a full set of features
#readr::write_csv(RESULTS,path = "./devcon_challenge.svr_radial_results.csv")
readr::read_csv("./devcon_challenge.svr_radial_results.csv") %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3"))
readr::read_csv("./devcon_challenge.svr_radial_results.csv") %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>% summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
NA
Results for SVR Radial using a reduced set of features
readr::write_csv(RESULTS,path = "./devcon_challenge.svr_radial_results_less_feat.csv")
readr::read_csv("./devcon_challenge.svr_radial_results_less_feat.csv") %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>% summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
Parsed with column specification:
cols(
datasets = [31mcol_character()[39m,
cells = [31mcol_character()[39m,
pearson = [32mcol_double()[39m,
spearman = [32mcol_double()[39m
)
Results for liblinear using a full set of features (11 – L2-regularized L2-loss support vector regression (primal))
#readr::write_csv(RESULTS,path = "./devcon_challenge.liblinear_11_results.csv")
readr::read_csv("./devcon_challenge.liblinear_11_results.csv") %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3"))
readr::read_csv("./devcon_challenge.liblinear_11_results.csv") %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>% summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
Results for liblinear using a full set of features ( 12 - L2-regularized L2-loss support vector regression (dual))
#readr::write_csv(RESULTS,path = "./devcon_challenge.liblinear_12_results.csv")
readr::read_csv("./devcon_challenge.liblinear_12_results.csv") %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3"))
readr::read_csv("./devcon_challenge.liblinear_12_results.csv") %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>% summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
Results for liblinear using a full set of features (13 L2-regularized L1-loss support vector regression (dual))
#readr::write_csv(RESULTS,path = "./devcon_challenge.liblinear_13_results.csv")
readr::read_csv("./devcon_challenge.liblinear_13_results.csv") %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3"))
readr::read_csv("./devcon_challenge.liblinear_13_results.csv") %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>% summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
NA
Results for liblinear using a reduced set of features (11 – L2-regularized L2-loss support vector regression (primal))
#readr::write_csv(RESULTS,path = "./devcon_challenge.liblinear_less_feat_results_11.csv")
readr::read_csv("./devcon_challenge.liblinear_less_feat_results_11.csv") %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3"))
readr::read_csv("./devcon_challenge.liblinear_less_feat_results_11.csv") %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>% summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
Results for liblinear using a reduced set of features ( 12 - L2-regularized L2-loss support vector regression (dual))
#readr::write_csv(RESULTS,path = "./devcon_challenge.liblinear_less_feat_results_12.csv")
readr::read_csv("./devcon_challenge.liblinear_less_feat_results_12.csv") %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3"))
Parsed with column specification:
cols(
datasets = [31mcol_character()[39m,
cells = [31mcol_character()[39m,
pearson = [32mcol_double()[39m,
spearman = [32mcol_double()[39m
)
readr::read_csv("./devcon_challenge.liblinear_less_feat_results_12.csv") %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>% summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
Parsed with column specification:
cols(
datasets = [31mcol_character()[39m,
cells = [31mcol_character()[39m,
pearson = [32mcol_double()[39m,
spearman = [32mcol_double()[39m
)
Results for liblinear 13 using a reduced set of features (13 L2-regularized L1-loss support vector regression (dual))
#readr::write_csv(RESULTS,path = "./devcon_challenge.liblinear_less_feat_results_13.csv")
readr::read_csv("./devcon_challenge.liblinear_less_feat_results_13.csv") %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3"))
readr::read_csv("./devcon_challenge.liblinear_less_feat_results_13.csv") %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>% summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
NA
NA
Results for rf using a full set of features
#readr::write_csv(RESULTS,path = "./devcon_challenge.rf_results.csv")
readr::read_csv("./devcon_challenge.rf_results.csv") %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3"))
readr::read_csv("./devcon_challenge.rf_results.csv") %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>% summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
Results for liblinear using a full set of features (noscale) ( 12 - L2-regularized L2-loss support vector regression (dual))
#readr::write_csv(RESULTS,path = "./devcon_challenge.liblinear_12_results_noscale.csv")
readr::read_csv("./devcon_challenge.liblinear_12_results_noscale.csv") %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3"))
readr::read_csv("./devcon_challenge.liblinear_12_results_noscale.csv") %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>% summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
Results for liblinear using (noscale) 1000 features ( 12 - L2-regularized L2-loss support vector regression (dual))
#readr::write_csv(RESULTS,path = "./devcon_challenge.liblinear_12_results_noscale_rf_selected_features.csv")
readr::read_csv("./devcon_challenge.liblinear_12_results_noscale_rf_selected_features.csv") %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3"))
readr::read_csv("./devcon_challenge.liblinear_12_results_noscale_rf_selected_features.csv") %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>% summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
Results for liblinear using a full set of features (noscale) 1500 features ( 12 - L2-regularized L2-loss support vector regression (dual))
#readr::write_csv(RESULTS,path = "./devcon_challenge.liblinear_12_results_noscale_rf_selected_features_1500.csv")
readr::read_csv("./devcon_challenge.liblinear_12_results_noscale_rf_selected_features_1500.csv") %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3"))
readr::read_csv("./devcon_challenge.liblinear_12_results_noscale_rf_selected_features_1500.csv") %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>% summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
Results for liblinear (noscale) 1500 features. (13 L2-regularized L1-loss support vector regression (dual))
#readr::write_csv(RESULTS,path = "./devcon_challenge.liblinear_13_results_noscale_rf_selected_features_1500.csv")
readr::read_csv("./devcon_challenge.liblinear_13_results_noscale_rf_selected_features_1500.csv") %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3"))
readr::read_csv("./devcon_challenge.liblinear_13_results_noscale_rf_selected_features_1500.csv") %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>% summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
Results for liblinear features (noscale) 1000 features. (13 L2-regularized L1-loss support vector regression (dual))
#readr::write_csv(RESULTS,path = "./devcon_challenge.liblinear_13_results_noscale_rf_selected_features_1000.csv")
readr::read_csv("./devcon_challenge.liblinear_13_results_noscale_rf_selected_features_1000.csv") %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3"))
readr::read_csv("./devcon_challenge.liblinear_13_results_noscale_rf_selected_features_1000.csv") %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>% summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
Results for liblinear (noscale) 2000 features. (13 L2-regularized L1-loss support vector regression (dual))
#readr::write_csv(RESULTS,path = "./devcon_challenge.liblinear_13_results_noscale_rf_selected_features_2000.csv")
readr::read_csv("./devcon_challenge.liblinear_13_results_noscale_rf_selected_features_2000.csv") %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3"))
readr::read_csv("./devcon_challenge.liblinear_13_results_noscale_rf_selected_features_2000.csv") %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>% summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
Results for liblinear using (noscale) 250 features. (13 L2-regularized L1-loss support vector regression (dual))
#readr::write_csv(RESULTS,path = "./devcon_challenge.liblinear_13_results_noscale_rf_selected_features_250.csv")
readr::read_csv("./devcon_challenge.liblinear_13_results_noscale_rf_selected_features_250.csv") %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3"))
readr::read_csv("./devcon_challenge.liblinear_13_results_noscale_rf_selected_features_250.csv") %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>% summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
Results for glmnet using 5000 features
readr::write_csv(RESULTS,path = "./devcon_challenge.gmlnet_results_noscale_rf_selected_features_5000.csv")
readr::read_csv("./devcon_challenge.gmlnet_results_noscale_rf_selected_features_5000.csv") %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3"))
readr::read_csv("./devcon_challenge.gmlnet_results_noscale_rf_selected_features_5000.csv") %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>% summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
Results for glmnet using 250 features
readr::write_csv(RESULTS,path = "./devcon_challenge.gmlnet_results_noscale_rf_selected_features_250.csv")
readr::read_csv("./devcon_challenge.gmlnet_results_noscale_rf_selected_features_250.csv") %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3"))
readr::read_csv("./devcon_challenge.gmlnet_results_noscale_rf_selected_features_250.csv") %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>% summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
Results for glmnet using 500 features
#readr::write_csv(RESULTS,path = "./devcon_challenge.gmlnet_results_noscale_rf_selected_features_500.csv")
readr::read_csv("./devcon_challenge.gmlnet_results_noscale_rf_selected_features_500.csv") %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3"))
readr::read_csv("./devcon_challenge.gmlnet_results_noscale_rf_selected_features_500.csv") %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>% summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
Results for glmnet using 1000 features
#readr::write_csv(RESULTS,path = "./devcon_challenge.gmlnet_results_noscale_rf_selected_features_1000.csv")
readr::read_csv("./devcon_challenge.gmlnet_results_noscale_rf_selected_features_1000.csv") %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3"))
readr::read_csv("./devcon_challenge.gmlnet_results_noscale_rf_selected_features_1000.csv") %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>% summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
Results for glmnet using 1500 features
#readr::write_csv(RESULTS,path = "./devcon_challenge.gmlnet_results_noscale_rf_selected_features_1500.csv")
readr::read_csv("./devcon_challenge.gmlnet_results_noscale_rf_selected_features_1500.csv") %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3"))
readr::read_csv("./devcon_challenge.gmlnet_results_noscale_rf_selected_features_1500.csv") %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>% summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
Results for glmnet using 2500 features
#readr::write_csv(RESULTS,path = "./devcon_challenge.gmlnet_results_noscale_rf_selected_features_2500.csv")
readr::read_csv("./devcon_challenge.gmlnet_results_noscale_rf_selected_features_2500.csv") %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3"))
readr::read_csv("./devcon_challenge.gmlnet_results_noscale_rf_selected_features_2500.csv") %>% filter(!is.na(pearson)) %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>% summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
LS0tCnRpdGxlOiAiREVWQ09OIENoYWxsZW5nZSByZXN1bHRzIgpvdXRwdXQ6IAogIGh0bWxfbm90ZWJvb2s6IAogICAgY29kZV9mb2xkaW5nOiBoaWRlCiAgICB0b2M6IHllcwotLS0KYGBge3J9CmxpYnJhcnkocmVhZHIpCmxpYnJhcnkoZHBseXIpCmBgYAoKIyBSZXN1bHRzIGZvciBTVlIgbGluZWFyIHVzaW5nIGEgcmVkdWNlZCBzZXQgb2YgZmVhdHVyZXMKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KI1JFU1VMVFMgJT4lIGFycmFuZ2UoY2VsbHMpCiNyZWFkcjo6d3JpdGVfY3N2KFJFU1VMVFMscGF0aCA9ICIuL2RldmNvbl9jaGFsbGVuZ2Uuc3ZyX3Jlc3VsdHNfZmVhdF9sZXNzLmNzdiIpCnJlYWRyOjpyZWFkX2NzdigiLi9kZXZjb25fY2hhbGxlbmdlLnN2cl9yZXN1bHRzX2ZlYXRfbGVzcy5jc3YiKSAgJT4lIGZpbHRlcihkYXRhc2V0cyAlaW4lIGMoIkRTNDQ2Mzk1IiwiRFM1MDAiLCJDSUFTNCIsIkNJVkEzIikpIAoKcmVhZHI6OnJlYWRfY3N2KCIuL2RldmNvbl9jaGFsbGVuZ2Uuc3ZyX3Jlc3VsdHNfZmVhdF9sZXNzLmNzdiIpICAlPiUgZmlsdGVyKGRhdGFzZXRzICVpbiUgYygiRFM0NDYzOTUiLCJEUzUwMCIsIkNJQVM0IiwiQ0lWQTMiKSkgJT4lIHN1bW1hcmlzZShwZWFyc29uX21lYW49bWVhbihwZWFyc29uKSxzcGVhcm1hbl9tZWFuPW1lYW4oc3BlYXJtYW4pKQoKYGBgCgojIFJlc3VsdHMgZm9yIFNWUiBsaW5lYXIgdXNpbmcgYSBmdWxsIHNldCBvZiBmZWF0dXJlcwoKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KI1JFU1VMVFMgJT4lIGFycmFuZ2UoY2VsbHMpCiNyZWFkcjo6d3JpdGVfY3N2KFJFU1VMVFMscGF0aCA9ICIuL2RldmNvbl9jaGFsbGVuZ2Uuc3ZyX2Z1bGxfcmVzdWx0cy5jc3YiKQpyZWFkcjo6cmVhZF9jc3YoIi4vZGV2Y29uX2NoYWxsZW5nZS5zdnJfZnVsbF9yZXN1bHRzLmNzdiIpICAlPiUgZmlsdGVyKGRhdGFzZXRzICVpbiUgYygiRFM0NDYzOTUiLCJEUzUwMCIsIkNJQVM0IiwiQ0lWQTMiKSkgCnJlYWRyOjpyZWFkX2NzdigiLi9kZXZjb25fY2hhbGxlbmdlLnN2cl9mdWxsX3Jlc3VsdHMuY3N2IikgICU+JSBmaWx0ZXIoZGF0YXNldHMgJWluJSBjKCJEUzQ0NjM5NSIsIkRTNTAwIiwiQ0lBUzQiLCJDSVZBMyIpKSAlPiUgc3VtbWFyaXNlKHBlYXJzb25fbWVhbj1tZWFuKHBlYXJzb24pLHNwZWFybWFuX21lYW49bWVhbihzcGVhcm1hbikpCgoKYGBgCgoKCiMgUmVzdWx0cyBmb3IgU1ZSIFJhZGlhbCB1c2luZyBhIGZ1bGwgc2V0IG9mIGZlYXR1cmVzCgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQojcmVhZHI6OndyaXRlX2NzdihSRVNVTFRTLHBhdGggPSAiLi9kZXZjb25fY2hhbGxlbmdlLnN2cl9yYWRpYWxfcmVzdWx0cy5jc3YiKQpyZWFkcjo6cmVhZF9jc3YoIi4vZGV2Y29uX2NoYWxsZW5nZS5zdnJfcmFkaWFsX3Jlc3VsdHMuY3N2IikgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpICU+JSBmaWx0ZXIoIGRhdGFzZXRzICVpbiUgYygiRFM0NDYzOTUiLCJEUzUwMCIsIkNJQVM0IiwiQ0lWQTMiKSkgCgoKcmVhZHI6OnJlYWRfY3N2KCIuL2RldmNvbl9jaGFsbGVuZ2Uuc3ZyX3JhZGlhbF9yZXN1bHRzLmNzdiIpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAlPiUgZmlsdGVyKCBkYXRhc2V0cyAlaW4lIGMoIkRTNDQ2Mzk1IiwiRFM1MDAiLCJDSUFTNCIsIkNJVkEzIikpICU+JSAgc3VtbWFyaXNlKHBlYXJzb25fbWVhbj1tZWFuKHBlYXJzb24pLHNwZWFybWFuX21lYW49bWVhbihzcGVhcm1hbikpCgpgYGAKCiMgUmVzdWx0cyBmb3IgU1ZSIFJhZGlhbCB1c2luZyBhIHJlZHVjZWQgc2V0IG9mIGZlYXR1cmVzCgpgYGB7cn0KcmVhZHI6OndyaXRlX2NzdihSRVNVTFRTLHBhdGggPSAiLi9kZXZjb25fY2hhbGxlbmdlLnN2cl9yYWRpYWxfcmVzdWx0c19sZXNzX2ZlYXQuY3N2IikKcmVhZHI6OnJlYWRfY3N2KCIuL2RldmNvbl9jaGFsbGVuZ2Uuc3ZyX3JhZGlhbF9yZXN1bHRzX2xlc3NfZmVhdC5jc3YiKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgJT4lIGZpbHRlciggZGF0YXNldHMgJWluJSBjKCJEUzQ0NjM5NSIsIkRTNTAwIiwiQ0lBUzQiLCJDSVZBMyIpKSAlPiUgIHN1bW1hcmlzZShwZWFyc29uX21lYW49bWVhbihwZWFyc29uKSxzcGVhcm1hbl9tZWFuPW1lYW4oc3BlYXJtYW4pKQpgYGAKCgoKCiMgUmVzdWx0cyBmb3IgbGlibGluZWFyICB1c2luZyBhIGZ1bGwgc2V0IG9mICBmZWF0dXJlcyAoMTEg4oCTIEwyLXJlZ3VsYXJpemVkIEwyLWxvc3Mgc3VwcG9ydCB2ZWN0b3IgcmVncmVzc2lvbiAocHJpbWFsKSkKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KI3JlYWRyOjp3cml0ZV9jc3YoUkVTVUxUUyxwYXRoID0gIi4vZGV2Y29uX2NoYWxsZW5nZS5saWJsaW5lYXJfMTFfcmVzdWx0cy5jc3YiKQpyZWFkcjo6cmVhZF9jc3YoIi4vZGV2Y29uX2NoYWxsZW5nZS5saWJsaW5lYXJfMTFfcmVzdWx0cy5jc3YiKSAgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpICU+JSBmaWx0ZXIoIGRhdGFzZXRzICVpbiUgYygiRFM0NDYzOTUiLCJEUzUwMCIsIkNJQVM0IiwiQ0lWQTMiKSkKCnJlYWRyOjpyZWFkX2NzdigiLi9kZXZjb25fY2hhbGxlbmdlLmxpYmxpbmVhcl8xMV9yZXN1bHRzLmNzdiIpICAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgJT4lIGZpbHRlciggZGF0YXNldHMgJWluJSBjKCJEUzQ0NjM5NSIsIkRTNTAwIiwiQ0lBUzQiLCJDSVZBMyIpKSAlPiUgIHN1bW1hcmlzZShwZWFyc29uX21lYW49bWVhbihwZWFyc29uKSxzcGVhcm1hbl9tZWFuPW1lYW4oc3BlYXJtYW4pKQpgYGAKIyBSZXN1bHRzIGZvciBsaWJsaW5lYXIgdXNpbmcgYSBmdWxsIHNldCBvZiAgZmVhdHVyZXMgKCAxMiAtIEwyLXJlZ3VsYXJpemVkIEwyLWxvc3Mgc3VwcG9ydCB2ZWN0b3IgcmVncmVzc2lvbiAoZHVhbCkpCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CiNyZWFkcjo6d3JpdGVfY3N2KFJFU1VMVFMscGF0aCA9ICIuL2RldmNvbl9jaGFsbGVuZ2UubGlibGluZWFyXzEyX3Jlc3VsdHMuY3N2IikKcmVhZHI6OnJlYWRfY3N2KCIuL2RldmNvbl9jaGFsbGVuZ2UubGlibGluZWFyXzEyX3Jlc3VsdHMuY3N2IikgICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAlPiUgZmlsdGVyKCBkYXRhc2V0cyAlaW4lIGMoIkRTNDQ2Mzk1IiwiRFM1MDAiLCJDSUFTNCIsIkNJVkEzIikpIApyZWFkcjo6cmVhZF9jc3YoIi4vZGV2Y29uX2NoYWxsZW5nZS5saWJsaW5lYXJfMTJfcmVzdWx0cy5jc3YiKSAgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpICU+JSBmaWx0ZXIoIGRhdGFzZXRzICVpbiUgYygiRFM0NDYzOTUiLCJEUzUwMCIsIkNJQVM0IiwiQ0lWQTMiKSkgJT4lICBzdW1tYXJpc2UocGVhcnNvbl9tZWFuPW1lYW4ocGVhcnNvbiksc3BlYXJtYW5fbWVhbj1tZWFuKHNwZWFybWFuKSkKYGBgCgojIFJlc3VsdHMgZm9yIGxpYmxpbmVhciB1c2luZyBhIGZ1bGwgc2V0IG9mICBmZWF0dXJlcyAoMTMgTDItcmVndWxhcml6ZWQgTDEtbG9zcyBzdXBwb3J0IHZlY3RvciByZWdyZXNzaW9uIChkdWFsKSkKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KI3JlYWRyOjp3cml0ZV9jc3YoUkVTVUxUUyxwYXRoID0gIi4vZGV2Y29uX2NoYWxsZW5nZS5saWJsaW5lYXJfMTNfcmVzdWx0cy5jc3YiKQpyZWFkcjo6cmVhZF9jc3YoIi4vZGV2Y29uX2NoYWxsZW5nZS5saWJsaW5lYXJfMTNfcmVzdWx0cy5jc3YiKSAgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpICU+JSBmaWx0ZXIoIGRhdGFzZXRzICVpbiUgYygiRFM0NDYzOTUiLCJEUzUwMCIsIkNJQVM0IiwiQ0lWQTMiKSkgCgpyZWFkcjo6cmVhZF9jc3YoIi4vZGV2Y29uX2NoYWxsZW5nZS5saWJsaW5lYXJfMTNfcmVzdWx0cy5jc3YiKSAgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpICU+JSBmaWx0ZXIoIGRhdGFzZXRzICVpbiUgYygiRFM0NDYzOTUiLCJEUzUwMCIsIkNJQVM0IiwiQ0lWQTMiKSkgJT4lICBzdW1tYXJpc2UocGVhcnNvbl9tZWFuPW1lYW4ocGVhcnNvbiksc3BlYXJtYW5fbWVhbj1tZWFuKHNwZWFybWFuKSkKCmBgYAoKCiMgUmVzdWx0cyBmb3IgbGlibGluZWFyICB1c2luZyBhIHJlZHVjZWQgc2V0IG9mICBmZWF0dXJlcyAoMTEg4oCTIEwyLXJlZ3VsYXJpemVkIEwyLWxvc3Mgc3VwcG9ydCB2ZWN0b3IgcmVncmVzc2lvbiAocHJpbWFsKSkKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KI3JlYWRyOjp3cml0ZV9jc3YoUkVTVUxUUyxwYXRoID0gIi4vZGV2Y29uX2NoYWxsZW5nZS5saWJsaW5lYXJfbGVzc19mZWF0X3Jlc3VsdHNfMTEuY3N2IikKcmVhZHI6OnJlYWRfY3N2KCIuL2RldmNvbl9jaGFsbGVuZ2UubGlibGluZWFyX2xlc3NfZmVhdF9yZXN1bHRzXzExLmNzdiIpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAlPiUgZmlsdGVyKCBkYXRhc2V0cyAlaW4lIGMoIkRTNDQ2Mzk1IiwiRFM1MDAiLCJDSUFTNCIsIkNJVkEzIikpIApyZWFkcjo6cmVhZF9jc3YoIi4vZGV2Y29uX2NoYWxsZW5nZS5saWJsaW5lYXJfbGVzc19mZWF0X3Jlc3VsdHNfMTEuY3N2IikgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpICU+JSBmaWx0ZXIoIGRhdGFzZXRzICVpbiUgYygiRFM0NDYzOTUiLCJEUzUwMCIsIkNJQVM0IiwiQ0lWQTMiKSkgJT4lICBzdW1tYXJpc2UocGVhcnNvbl9tZWFuPW1lYW4ocGVhcnNvbiksc3BlYXJtYW5fbWVhbj1tZWFuKHNwZWFybWFuKSkKYGBgCgojIFJlc3VsdHMgZm9yIGxpYmxpbmVhciAgdXNpbmcgYSByZWR1Y2VkIHNldCBvZiAgZmVhdHVyZXMgKCAxMiAtIEwyLXJlZ3VsYXJpemVkIEwyLWxvc3Mgc3VwcG9ydCB2ZWN0b3IgcmVncmVzc2lvbiAoZHVhbCkpCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CiNyZWFkcjo6d3JpdGVfY3N2KFJFU1VMVFMscGF0aCA9ICIuL2RldmNvbl9jaGFsbGVuZ2UubGlibGluZWFyX2xlc3NfZmVhdF9yZXN1bHRzXzEyLmNzdiIpCnJlYWRyOjpyZWFkX2NzdigiLi9kZXZjb25fY2hhbGxlbmdlLmxpYmxpbmVhcl9sZXNzX2ZlYXRfcmVzdWx0c18xMi5jc3YiKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgJT4lIGZpbHRlciggZGF0YXNldHMgJWluJSBjKCJEUzQ0NjM5NSIsIkRTNTAwIiwiQ0lBUzQiLCJDSVZBMyIpKSAKcmVhZHI6OnJlYWRfY3N2KCIuL2RldmNvbl9jaGFsbGVuZ2UubGlibGluZWFyX2xlc3NfZmVhdF9yZXN1bHRzXzEyLmNzdiIpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAlPiUgZmlsdGVyKCBkYXRhc2V0cyAlaW4lIGMoIkRTNDQ2Mzk1IiwiRFM1MDAiLCJDSUFTNCIsIkNJVkEzIikpICU+JSAgc3VtbWFyaXNlKHBlYXJzb25fbWVhbj1tZWFuKHBlYXJzb24pLHNwZWFybWFuX21lYW49bWVhbihzcGVhcm1hbikpCmBgYAoKIyBSZXN1bHRzIGZvciBsaWJsaW5lYXIgMTMgdXNpbmcgYSByZWR1Y2VkIHNldCBvZiAgZmVhdHVyZXMgKDEzIEwyLXJlZ3VsYXJpemVkIEwxLWxvc3Mgc3VwcG9ydCB2ZWN0b3IgcmVncmVzc2lvbiAoZHVhbCkpCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CiNyZWFkcjo6d3JpdGVfY3N2KFJFU1VMVFMscGF0aCA9ICIuL2RldmNvbl9jaGFsbGVuZ2UubGlibGluZWFyX2xlc3NfZmVhdF9yZXN1bHRzXzEzLmNzdiIpCgpyZWFkcjo6cmVhZF9jc3YoIi4vZGV2Y29uX2NoYWxsZW5nZS5saWJsaW5lYXJfbGVzc19mZWF0X3Jlc3VsdHNfMTMuY3N2IikgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpICU+JSBmaWx0ZXIoIGRhdGFzZXRzICVpbiUgYygiRFM0NDYzOTUiLCJEUzUwMCIsIkNJQVM0IiwiQ0lWQTMiKSkgCnJlYWRyOjpyZWFkX2NzdigiLi9kZXZjb25fY2hhbGxlbmdlLmxpYmxpbmVhcl9sZXNzX2ZlYXRfcmVzdWx0c18xMy5jc3YiKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgJT4lIGZpbHRlciggZGF0YXNldHMgJWluJSBjKCJEUzQ0NjM5NSIsIkRTNTAwIiwiQ0lBUzQiLCJDSVZBMyIpKSAlPiUgIHN1bW1hcmlzZShwZWFyc29uX21lYW49bWVhbihwZWFyc29uKSxzcGVhcm1hbl9tZWFuPW1lYW4oc3BlYXJtYW4pKQoKCmBgYAoKIyBSZXN1bHRzIGZvciByZiAgdXNpbmcgYSBmdWxsIHNldCBvZiAgZmVhdHVyZXMKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KI3JlYWRyOjp3cml0ZV9jc3YoUkVTVUxUUyxwYXRoID0gIi4vZGV2Y29uX2NoYWxsZW5nZS5yZl9yZXN1bHRzLmNzdiIpCnJlYWRyOjpyZWFkX2NzdigiLi9kZXZjb25fY2hhbGxlbmdlLnJmX3Jlc3VsdHMuY3N2IikgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpICU+JSBmaWx0ZXIoIGRhdGFzZXRzICVpbiUgYygiRFM0NDYzOTUiLCJEUzUwMCIsIkNJQVM0IiwiQ0lWQTMiKSkgCgpyZWFkcjo6cmVhZF9jc3YoIi4vZGV2Y29uX2NoYWxsZW5nZS5yZl9yZXN1bHRzLmNzdiIpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAlPiUgZmlsdGVyKCBkYXRhc2V0cyAlaW4lIGMoIkRTNDQ2Mzk1IiwiRFM1MDAiLCJDSUFTNCIsIkNJVkEzIikpICU+JSAgc3VtbWFyaXNlKHBlYXJzb25fbWVhbj1tZWFuKHBlYXJzb24pLHNwZWFybWFuX21lYW49bWVhbihzcGVhcm1hbikpCmBgYAoKIyBSZXN1bHRzIGZvciBsaWJsaW5lYXIgdXNpbmcgYSBmdWxsIHNldCBvZiAgZmVhdHVyZXMgKG5vc2NhbGUpICggMTIgLSBMMi1yZWd1bGFyaXplZCBMMi1sb3NzIHN1cHBvcnQgdmVjdG9yIHJlZ3Jlc3Npb24gKGR1YWwpKQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQoKI3JlYWRyOjp3cml0ZV9jc3YoUkVTVUxUUyxwYXRoID0gIi4vZGV2Y29uX2NoYWxsZW5nZS5saWJsaW5lYXJfMTJfcmVzdWx0c19ub3NjYWxlLmNzdiIpCnJlYWRyOjpyZWFkX2NzdigiLi9kZXZjb25fY2hhbGxlbmdlLmxpYmxpbmVhcl8xMl9yZXN1bHRzX25vc2NhbGUuY3N2IikgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpICU+JSBmaWx0ZXIoIGRhdGFzZXRzICVpbiUgYygiRFM0NDYzOTUiLCJEUzUwMCIsIkNJQVM0IiwiQ0lWQTMiKSkgCgpyZWFkcjo6cmVhZF9jc3YoIi4vZGV2Y29uX2NoYWxsZW5nZS5saWJsaW5lYXJfMTJfcmVzdWx0c19ub3NjYWxlLmNzdiIpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAlPiUgZmlsdGVyKCBkYXRhc2V0cyAlaW4lIGMoIkRTNDQ2Mzk1IiwiRFM1MDAiLCJDSUFTNCIsIkNJVkEzIikpICU+JSAgc3VtbWFyaXNlKHBlYXJzb25fbWVhbj1tZWFuKHBlYXJzb24pLHNwZWFybWFuX21lYW49bWVhbihzcGVhcm1hbikpCmBgYAoKCiMgUmVzdWx0cyBmb3IgbGlibGluZWFyICB1c2luZyAgKG5vc2NhbGUpIDEwMDAgZmVhdHVyZXMgKCAxMiAtIEwyLXJlZ3VsYXJpemVkIEwyLWxvc3Mgc3VwcG9ydCB2ZWN0b3IgcmVncmVzc2lvbiAoZHVhbCkpCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CiNyZWFkcjo6d3JpdGVfY3N2KFJFU1VMVFMscGF0aCA9ICIuL2RldmNvbl9jaGFsbGVuZ2UubGlibGluZWFyXzEyX3Jlc3VsdHNfbm9zY2FsZV9yZl9zZWxlY3RlZF9mZWF0dXJlcy5jc3YiKQoKcmVhZHI6OnJlYWRfY3N2KCIuL2RldmNvbl9jaGFsbGVuZ2UubGlibGluZWFyXzEyX3Jlc3VsdHNfbm9zY2FsZV9yZl9zZWxlY3RlZF9mZWF0dXJlcy5jc3YiKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgJT4lIGZpbHRlciggZGF0YXNldHMgJWluJSBjKCJEUzQ0NjM5NSIsIkRTNTAwIiwiQ0lBUzQiLCJDSVZBMyIpKSAKCnJlYWRyOjpyZWFkX2NzdigiLi9kZXZjb25fY2hhbGxlbmdlLmxpYmxpbmVhcl8xMl9yZXN1bHRzX25vc2NhbGVfcmZfc2VsZWN0ZWRfZmVhdHVyZXMuY3N2IikgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpICU+JSBmaWx0ZXIoIGRhdGFzZXRzICVpbiUgYygiRFM0NDYzOTUiLCJEUzUwMCIsIkNJQVM0IiwiQ0lWQTMiKSkgJT4lICBzdW1tYXJpc2UocGVhcnNvbl9tZWFuPW1lYW4ocGVhcnNvbiksc3BlYXJtYW5fbWVhbj1tZWFuKHNwZWFybWFuKSkKYGBgCgoKCiMgUmVzdWx0cyBmb3IgbGlibGluZWFyIHVzaW5nIGEgZnVsbCBzZXQgb2YgIGZlYXR1cmVzIChub3NjYWxlKSAxNTAwIGZlYXR1cmVzICggMTIgLSBMMi1yZWd1bGFyaXplZCBMMi1sb3NzIHN1cHBvcnQgdmVjdG9yIHJlZ3Jlc3Npb24gKGR1YWwpKQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQojcmVhZHI6OndyaXRlX2NzdihSRVNVTFRTLHBhdGggPSAiLi9kZXZjb25fY2hhbGxlbmdlLmxpYmxpbmVhcl8xMl9yZXN1bHRzX25vc2NhbGVfcmZfc2VsZWN0ZWRfZmVhdHVyZXNfMTUwMC5jc3YiKQpyZWFkcjo6cmVhZF9jc3YoIi4vZGV2Y29uX2NoYWxsZW5nZS5saWJsaW5lYXJfMTJfcmVzdWx0c19ub3NjYWxlX3JmX3NlbGVjdGVkX2ZlYXR1cmVzXzE1MDAuY3N2IikgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpICU+JSBmaWx0ZXIoIGRhdGFzZXRzICVpbiUgYygiRFM0NDYzOTUiLCJEUzUwMCIsIkNJQVM0IiwiQ0lWQTMiKSkgCnJlYWRyOjpyZWFkX2NzdigiLi9kZXZjb25fY2hhbGxlbmdlLmxpYmxpbmVhcl8xMl9yZXN1bHRzX25vc2NhbGVfcmZfc2VsZWN0ZWRfZmVhdHVyZXNfMTUwMC5jc3YiKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgJT4lIGZpbHRlciggZGF0YXNldHMgJWluJSBjKCJEUzQ0NjM5NSIsIkRTNTAwIiwiQ0lBUzQiLCJDSVZBMyIpKSAlPiUgIHN1bW1hcmlzZShwZWFyc29uX21lYW49bWVhbihwZWFyc29uKSxzcGVhcm1hbl9tZWFuPW1lYW4oc3BlYXJtYW4pKQpgYGAKCiMgUmVzdWx0cyBmb3IgbGlibGluZWFyICAobm9zY2FsZSkgMTUwMCBmZWF0dXJlcy4gKDEzIEwyLXJlZ3VsYXJpemVkIEwxLWxvc3Mgc3VwcG9ydCB2ZWN0b3IgcmVncmVzc2lvbiAoZHVhbCkpCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CiNyZWFkcjo6d3JpdGVfY3N2KFJFU1VMVFMscGF0aCA9ICIuL2RldmNvbl9jaGFsbGVuZ2UubGlibGluZWFyXzEzX3Jlc3VsdHNfbm9zY2FsZV9yZl9zZWxlY3RlZF9mZWF0dXJlc18xNTAwLmNzdiIpCgpyZWFkcjo6cmVhZF9jc3YoIi4vZGV2Y29uX2NoYWxsZW5nZS5saWJsaW5lYXJfMTNfcmVzdWx0c19ub3NjYWxlX3JmX3NlbGVjdGVkX2ZlYXR1cmVzXzE1MDAuY3N2IikgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpICU+JSBmaWx0ZXIoIGRhdGFzZXRzICVpbiUgYygiRFM0NDYzOTUiLCJEUzUwMCIsIkNJQVM0IiwiQ0lWQTMiKSkgCgpyZWFkcjo6cmVhZF9jc3YoIi4vZGV2Y29uX2NoYWxsZW5nZS5saWJsaW5lYXJfMTNfcmVzdWx0c19ub3NjYWxlX3JmX3NlbGVjdGVkX2ZlYXR1cmVzXzE1MDAuY3N2IikgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpICU+JSBmaWx0ZXIoIGRhdGFzZXRzICVpbiUgYygiRFM0NDYzOTUiLCJEUzUwMCIsIkNJQVM0IiwiQ0lWQTMiKSkgICU+JSBzdW1tYXJpc2UocGVhcnNvbl9tZWFuPW1lYW4ocGVhcnNvbiksc3BlYXJtYW5fbWVhbj1tZWFuKHNwZWFybWFuKSkKYGBgCgojIFJlc3VsdHMgZm9yIGxpYmxpbmVhciBmZWF0dXJlcyAobm9zY2FsZSkgMTAwMCBmZWF0dXJlcy4gKDEzIEwyLXJlZ3VsYXJpemVkIEwxLWxvc3Mgc3VwcG9ydCB2ZWN0b3IgcmVncmVzc2lvbiAoZHVhbCkpCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CiNyZWFkcjo6d3JpdGVfY3N2KFJFU1VMVFMscGF0aCA9ICIuL2RldmNvbl9jaGFsbGVuZ2UubGlibGluZWFyXzEzX3Jlc3VsdHNfbm9zY2FsZV9yZl9zZWxlY3RlZF9mZWF0dXJlc18xMDAwLmNzdiIpCnJlYWRyOjpyZWFkX2NzdigiLi9kZXZjb25fY2hhbGxlbmdlLmxpYmxpbmVhcl8xM19yZXN1bHRzX25vc2NhbGVfcmZfc2VsZWN0ZWRfZmVhdHVyZXNfMTAwMC5jc3YiKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgJT4lIGZpbHRlciggZGF0YXNldHMgJWluJSBjKCJEUzQ0NjM5NSIsIkRTNTAwIiwiQ0lBUzQiLCJDSVZBMyIpKSAgCnJlYWRyOjpyZWFkX2NzdigiLi9kZXZjb25fY2hhbGxlbmdlLmxpYmxpbmVhcl8xM19yZXN1bHRzX25vc2NhbGVfcmZfc2VsZWN0ZWRfZmVhdHVyZXNfMTAwMC5jc3YiKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgJT4lIGZpbHRlciggZGF0YXNldHMgJWluJSBjKCJEUzQ0NjM5NSIsIkRTNTAwIiwiQ0lBUzQiLCJDSVZBMyIpKSAgJT4lICBzdW1tYXJpc2UocGVhcnNvbl9tZWFuPW1lYW4ocGVhcnNvbiksc3BlYXJtYW5fbWVhbj1tZWFuKHNwZWFybWFuKSkKYGBgCgojIFJlc3VsdHMgZm9yIGxpYmxpbmVhciAgKG5vc2NhbGUpIDIwMDAgZmVhdHVyZXMuICgxMyBMMi1yZWd1bGFyaXplZCBMMS1sb3NzIHN1cHBvcnQgdmVjdG9yIHJlZ3Jlc3Npb24gKGR1YWwpKQoKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KI3JlYWRyOjp3cml0ZV9jc3YoUkVTVUxUUyxwYXRoID0gIi4vZGV2Y29uX2NoYWxsZW5nZS5saWJsaW5lYXJfMTNfcmVzdWx0c19ub3NjYWxlX3JmX3NlbGVjdGVkX2ZlYXR1cmVzXzIwMDAuY3N2IikKcmVhZHI6OnJlYWRfY3N2KCIuL2RldmNvbl9jaGFsbGVuZ2UubGlibGluZWFyXzEzX3Jlc3VsdHNfbm9zY2FsZV9yZl9zZWxlY3RlZF9mZWF0dXJlc18yMDAwLmNzdiIpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAlPiUgZmlsdGVyKCBkYXRhc2V0cyAlaW4lIGMoIkRTNDQ2Mzk1IiwiRFM1MDAiLCJDSUFTNCIsIkNJVkEzIikpIApyZWFkcjo6cmVhZF9jc3YoIi4vZGV2Y29uX2NoYWxsZW5nZS5saWJsaW5lYXJfMTNfcmVzdWx0c19ub3NjYWxlX3JmX3NlbGVjdGVkX2ZlYXR1cmVzXzIwMDAuY3N2IikgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpICU+JSBmaWx0ZXIoIGRhdGFzZXRzICVpbiUgYygiRFM0NDYzOTUiLCJEUzUwMCIsIkNJQVM0IiwiQ0lWQTMiKSkgJT4lICBzdW1tYXJpc2UocGVhcnNvbl9tZWFuPW1lYW4ocGVhcnNvbiksc3BlYXJtYW5fbWVhbj1tZWFuKHNwZWFybWFuKSkKYGBgCiMgUmVzdWx0cyBmb3IgbGlibGluZWFyIHVzaW5nIChub3NjYWxlKSAyNTAgZmVhdHVyZXMuICgxMyBMMi1yZWd1bGFyaXplZCBMMS1sb3NzIHN1cHBvcnQgdmVjdG9yIHJlZ3Jlc3Npb24gKGR1YWwpKQoKCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CiNyZWFkcjo6d3JpdGVfY3N2KFJFU1VMVFMscGF0aCA9ICIuL2RldmNvbl9jaGFsbGVuZ2UubGlibGluZWFyXzEzX3Jlc3VsdHNfbm9zY2FsZV9yZl9zZWxlY3RlZF9mZWF0dXJlc18yNTAuY3N2IikKcmVhZHI6OnJlYWRfY3N2KCIuL2RldmNvbl9jaGFsbGVuZ2UubGlibGluZWFyXzEzX3Jlc3VsdHNfbm9zY2FsZV9yZl9zZWxlY3RlZF9mZWF0dXJlc18yNTAuY3N2IikgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpICU+JSBmaWx0ZXIoIGRhdGFzZXRzICVpbiUgYygiRFM0NDYzOTUiLCJEUzUwMCIsIkNJQVM0IiwiQ0lWQTMiKSkgCnJlYWRyOjpyZWFkX2NzdigiLi9kZXZjb25fY2hhbGxlbmdlLmxpYmxpbmVhcl8xM19yZXN1bHRzX25vc2NhbGVfcmZfc2VsZWN0ZWRfZmVhdHVyZXNfMjUwLmNzdiIpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAlPiUgZmlsdGVyKCBkYXRhc2V0cyAlaW4lIGMoIkRTNDQ2Mzk1IiwiRFM1MDAiLCJDSUFTNCIsIkNJVkEzIikpICU+JSAgc3VtbWFyaXNlKHBlYXJzb25fbWVhbj1tZWFuKHBlYXJzb24pLHNwZWFybWFuX21lYW49bWVhbihzcGVhcm1hbikpCmBgYAoKCiMgUmVzdWx0cyBmb3IgZ2xtbmV0IHVzaW5nIDUwMDAgZmVhdHVyZXMKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KI3JlYWRyOjp3cml0ZV9jc3YoUkVTVUxUUyxwYXRoID0gIi4vZGV2Y29uX2NoYWxsZW5nZS5nbWxuZXRfcmVzdWx0c19ub3NjYWxlX3JmX3NlbGVjdGVkX2ZlYXR1cmVzXzUwMDAuY3N2IikKcmVhZHI6OnJlYWRfY3N2KCIuL2RldmNvbl9jaGFsbGVuZ2UuZ21sbmV0X3Jlc3VsdHNfbm9zY2FsZV9yZl9zZWxlY3RlZF9mZWF0dXJlc181MDAwLmNzdiIpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAlPiUgZmlsdGVyKCBkYXRhc2V0cyAlaW4lIGMoIkRTNDQ2Mzk1IiwiRFM1MDAiLCJDSUFTNCIsIkNJVkEzIikpIApyZWFkcjo6cmVhZF9jc3YoIi4vZGV2Y29uX2NoYWxsZW5nZS5nbWxuZXRfcmVzdWx0c19ub3NjYWxlX3JmX3NlbGVjdGVkX2ZlYXR1cmVzXzUwMDAuY3N2IikgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpICU+JSBmaWx0ZXIoIGRhdGFzZXRzICVpbiUgYygiRFM0NDYzOTUiLCJEUzUwMCIsIkNJQVM0IiwiQ0lWQTMiKSkgJT4lICBzdW1tYXJpc2UocGVhcnNvbl9tZWFuPW1lYW4ocGVhcnNvbiksc3BlYXJtYW5fbWVhbj1tZWFuKHNwZWFybWFuKSkKYGBgCgojIFJlc3VsdHMgZm9yIGdsbW5ldCB1c2luZyAyNTAgZmVhdHVyZXMKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KcmVhZHI6OndyaXRlX2NzdihSRVNVTFRTLHBhdGggPSAiLi9kZXZjb25fY2hhbGxlbmdlLmdtbG5ldF9yZXN1bHRzX25vc2NhbGVfcmZfc2VsZWN0ZWRfZmVhdHVyZXNfMjUwLmNzdiIpCnJlYWRyOjpyZWFkX2NzdigiLi9kZXZjb25fY2hhbGxlbmdlLmdtbG5ldF9yZXN1bHRzX25vc2NhbGVfcmZfc2VsZWN0ZWRfZmVhdHVyZXNfMjUwLmNzdiIpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAlPiUgZmlsdGVyKCBkYXRhc2V0cyAlaW4lIGMoIkRTNDQ2Mzk1IiwiRFM1MDAiLCJDSUFTNCIsIkNJVkEzIikpIApyZWFkcjo6cmVhZF9jc3YoIi4vZGV2Y29uX2NoYWxsZW5nZS5nbWxuZXRfcmVzdWx0c19ub3NjYWxlX3JmX3NlbGVjdGVkX2ZlYXR1cmVzXzI1MC5jc3YiKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgJT4lIGZpbHRlciggZGF0YXNldHMgJWluJSBjKCJEUzQ0NjM5NSIsIkRTNTAwIiwiQ0lBUzQiLCJDSVZBMyIpKSAlPiUgIHN1bW1hcmlzZShwZWFyc29uX21lYW49bWVhbihwZWFyc29uKSxzcGVhcm1hbl9tZWFuPW1lYW4oc3BlYXJtYW4pKQpgYGAKCgojIFJlc3VsdHMgZm9yIGdsbW5ldCB1c2luZyA1MDAgZmVhdHVyZXMKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KI3JlYWRyOjp3cml0ZV9jc3YoUkVTVUxUUyxwYXRoID0gIi4vZGV2Y29uX2NoYWxsZW5nZS5nbWxuZXRfcmVzdWx0c19ub3NjYWxlX3JmX3NlbGVjdGVkX2ZlYXR1cmVzXzUwMC5jc3YiKQpyZWFkcjo6cmVhZF9jc3YoIi4vZGV2Y29uX2NoYWxsZW5nZS5nbWxuZXRfcmVzdWx0c19ub3NjYWxlX3JmX3NlbGVjdGVkX2ZlYXR1cmVzXzUwMC5jc3YiKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgJT4lIGZpbHRlciggZGF0YXNldHMgJWluJSBjKCJEUzQ0NjM5NSIsIkRTNTAwIiwiQ0lBUzQiLCJDSVZBMyIpKSAKcmVhZHI6OnJlYWRfY3N2KCIuL2RldmNvbl9jaGFsbGVuZ2UuZ21sbmV0X3Jlc3VsdHNfbm9zY2FsZV9yZl9zZWxlY3RlZF9mZWF0dXJlc181MDAuY3N2IikgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpICU+JSBmaWx0ZXIoIGRhdGFzZXRzICVpbiUgYygiRFM0NDYzOTUiLCJEUzUwMCIsIkNJQVM0IiwiQ0lWQTMiKSkgJT4lICBzdW1tYXJpc2UocGVhcnNvbl9tZWFuPW1lYW4ocGVhcnNvbiksc3BlYXJtYW5fbWVhbj1tZWFuKHNwZWFybWFuKSkKYGBgCgojIFJlc3VsdHMgZm9yIGdsbW5ldCB1c2luZyAxMDAwIGZlYXR1cmVzCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CiNyZWFkcjo6d3JpdGVfY3N2KFJFU1VMVFMscGF0aCA9ICIuL2RldmNvbl9jaGFsbGVuZ2UuZ21sbmV0X3Jlc3VsdHNfbm9zY2FsZV9yZl9zZWxlY3RlZF9mZWF0dXJlc18xMDAwLmNzdiIpCnJlYWRyOjpyZWFkX2NzdigiLi9kZXZjb25fY2hhbGxlbmdlLmdtbG5ldF9yZXN1bHRzX25vc2NhbGVfcmZfc2VsZWN0ZWRfZmVhdHVyZXNfMTAwMC5jc3YiKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgJT4lIGZpbHRlciggZGF0YXNldHMgJWluJSBjKCJEUzQ0NjM5NSIsIkRTNTAwIiwiQ0lBUzQiLCJDSVZBMyIpKSAKcmVhZHI6OnJlYWRfY3N2KCIuL2RldmNvbl9jaGFsbGVuZ2UuZ21sbmV0X3Jlc3VsdHNfbm9zY2FsZV9yZl9zZWxlY3RlZF9mZWF0dXJlc18xMDAwLmNzdiIpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAlPiUgZmlsdGVyKCBkYXRhc2V0cyAlaW4lIGMoIkRTNDQ2Mzk1IiwiRFM1MDAiLCJDSUFTNCIsIkNJVkEzIikpICU+JSAgc3VtbWFyaXNlKHBlYXJzb25fbWVhbj1tZWFuKHBlYXJzb24pLHNwZWFybWFuX21lYW49bWVhbihzcGVhcm1hbikpCmBgYAoKIyBSZXN1bHRzIGZvciBnbG1uZXQgdXNpbmcgMTUwMCBmZWF0dXJlcwpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQojcmVhZHI6OndyaXRlX2NzdihSRVNVTFRTLHBhdGggPSAiLi9kZXZjb25fY2hhbGxlbmdlLmdtbG5ldF9yZXN1bHRzX25vc2NhbGVfcmZfc2VsZWN0ZWRfZmVhdHVyZXNfMTUwMC5jc3YiKQpyZWFkcjo6cmVhZF9jc3YoIi4vZGV2Y29uX2NoYWxsZW5nZS5nbWxuZXRfcmVzdWx0c19ub3NjYWxlX3JmX3NlbGVjdGVkX2ZlYXR1cmVzXzE1MDAuY3N2IikgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpICU+JSBmaWx0ZXIoIGRhdGFzZXRzICVpbiUgYygiRFM0NDYzOTUiLCJEUzUwMCIsIkNJQVM0IiwiQ0lWQTMiKSkgCnJlYWRyOjpyZWFkX2NzdigiLi9kZXZjb25fY2hhbGxlbmdlLmdtbG5ldF9yZXN1bHRzX25vc2NhbGVfcmZfc2VsZWN0ZWRfZmVhdHVyZXNfMTUwMC5jc3YiKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgJT4lIGZpbHRlciggZGF0YXNldHMgJWluJSBjKCJEUzQ0NjM5NSIsIkRTNTAwIiwiQ0lBUzQiLCJDSVZBMyIpKSAlPiUgIHN1bW1hcmlzZShwZWFyc29uX21lYW49bWVhbihwZWFyc29uKSxzcGVhcm1hbl9tZWFuPW1lYW4oc3BlYXJtYW4pKQpgYGAKCiMgUmVzdWx0cyBmb3IgZ2xtbmV0IHVzaW5nIDI1MDAgZmVhdHVyZXMKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KI3JlYWRyOjp3cml0ZV9jc3YoUkVTVUxUUyxwYXRoID0gIi4vZGV2Y29uX2NoYWxsZW5nZS5nbWxuZXRfcmVzdWx0c19ub3NjYWxlX3JmX3NlbGVjdGVkX2ZlYXR1cmVzXzI1MDAuY3N2IikKcmVhZHI6OnJlYWRfY3N2KCIuL2RldmNvbl9jaGFsbGVuZ2UuZ21sbmV0X3Jlc3VsdHNfbm9zY2FsZV9yZl9zZWxlY3RlZF9mZWF0dXJlc18yNTAwLmNzdiIpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAlPiUgZmlsdGVyKCBkYXRhc2V0cyAlaW4lIGMoIkRTNDQ2Mzk1IiwiRFM1MDAiLCJDSUFTNCIsIkNJVkEzIikpIApyZWFkcjo6cmVhZF9jc3YoIi4vZGV2Y29uX2NoYWxsZW5nZS5nbWxuZXRfcmVzdWx0c19ub3NjYWxlX3JmX3NlbGVjdGVkX2ZlYXR1cmVzXzI1MDAuY3N2IikgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpICU+JSBmaWx0ZXIoIGRhdGFzZXRzICVpbiUgYygiRFM0NDYzOTUiLCJEUzUwMCIsIkNJQVM0IiwiQ0lWQTMiKSkgJT4lICBzdW1tYXJpc2UocGVhcnNvbl9tZWFuPW1lYW4ocGVhcnNvbiksc3BlYXJtYW5fbWVhbj1tZWFuKHNwZWFybWFuKSkKYGBgCgo=