Load Data

'data.frame':   4500 obs. of  11 variables:
 $ X                             : int  1 2 3 4 5 6 7 8 9 10 ...
 $ id                            : int  71 96 103 106 109 118 120 188 191 211 ...
 $ outliersPro                   : num  0.14002 0.06416 0.00631 0.00589 0.15473 ...
 $ estimated_rate_Before_Handling: num  1.316 0.444 0.296 0.511 1.309 ...
 $ estimated_rate_After_Q_b_F_C  : num  2.262 0.5 0.297 0.515 3.781 ...
 $ estimated_rate_After_mean     : num  3.96 0.623 0.302 0.524 6.258 ...
 $ estimated_rate_After_median   : num  4.473 0.648 0.303 0.525 6.83 ...
 $ Before_P_value                : num  0 0 1 0.404 0 ...
 $ Q_b_F_C_P_value               : num  0 0 1 0.579 0 ...
 $ mean_P_value                  : num  0 0 1 0.662 0.997 0 0 0 1 0.483 ...
 $ median_P_value                : num  0 0 1 0.637 0 ...

Univariae Visualization

Outliers Proportion

p1 <- results %>%   ggplot(aes(y = (outliersPro ))) +
  geom_boxplot() + labs(title = "Outliers Proportion")

p2 <- results %>%   ggplot(aes(x = (outliersPro ))) +
  geom_histogram() + labs(title = "Outliers Proportion")

gridExtra::grid.arrange(p1,p2 ,  ncol = 2 )
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Estimated Rate Before Handling

p1 <- results %>%   ggplot(aes(y = (estimated_rate_Before_Handling ))) +
  geom_boxplot() + labs(title = "Estimated Rate Before Handling")

p2 <- results %>%   ggplot(aes(x = (estimated_rate_Before_Handling ))) +
  geom_histogram() + labs(title = "Estimated Rate Before Handling" , subtitle = "scale X >> Log(10) "           ) + scale_x_log10()

gridExtra::grid.arrange(p1,p2 ,  ncol = 2 )
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

qqnorm((results$estimated_rate_Before_Handling), pch = 1, frame = FALSE)
qqline((results$estimated_rate_Before_Handling), col = "steelblue", lwd = 2)

Estimated Rate After Handling {Mean}

p1 <- results %>%   ggplot(aes(y = (estimated_rate_After_mean      ))) +
  geom_boxplot() + labs(title = "Estimated Rate After Handling {Mean}")

p2 <- results %>%   ggplot(aes(x = (estimated_rate_After_mean      ))) +
  geom_histogram()  + labs(title = "Estimated Rate After Handling {Mean}"
                          , subtitle = "scale X >> Log(10) "
                           ) + scale_x_log10()
  

gridExtra::grid.arrange(p1,p2 ,  ncol = 2 )
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

results %>%   select(estimated_rate_Before_Handling , 
                     estimated_rate_After_Q_b_F_C , 
                     estimated_rate_After_mean , 
                     estimated_rate_After_median 
                     ) %>% 
  gather("Method" , "estimatedRate" , estimated_rate_Before_Handling , estimated_rate_After_Q_b_F_C , estimated_rate_After_mean ,estimated_rate_After_median  ) %>% 
  ggplot(aes(x = (estimatedRate))) + 
     geom_histogram( aes( fill  = as.factor(Method))) + 
   labs(title = "Estimated Rate After Handling "
                          , subtitle = "scale X >> Log(10) " ) + scale_x_log10()+
  

  facet_wrap(.~Method)
Error in select(., estimated_rate_Before_Handling, estimated_rate_After_Q_b_F_C,  : 
  unused arguments (estimated_rate_Before_Handling, estimated_rate_After_Q_b_F_C, estimated_rate_After_mean, estimated_rate_After_median)

Relation Between Outliers Proportion and P-value Before


p1 = results %>%
  mutate(fitted = ifelse(Before_P_value > 0.05,TRUE,FALSE)) %>% 
  ggplot(aes(x = results$outliersPro , y= Before_P_value)) + 
  geom_point(aes(color = fitted , alpha = .9)) +
    labs(title = "Outliers Proportion And P_value Before"
                             ) 

p2 = results %>%
  mutate(fitted = ifelse(Before_P_value > 0.05,TRUE,FALSE)) %>% 
  ggplot(aes(x= fitted)) + 
  geom_bar(aes(fill=fitted)) +
    labs(title = "Outliers Proportion And P_value Before"
                             )

gridExtra::grid.arrange(p1,p2 ,  ncol = 2 )

Relation Between Outliers Proportion and P-value After {Mean}


p1 = results %>%
  mutate(fitted = ifelse(mean_P_value > 0.05,TRUE,FALSE)) %>% 
  ggplot(aes(x = results$outliersPro , y= results$mean_P_value)) + 
  geom_point(aes(color = fitted , alpha = .5) ) +
    labs(title = "Outliers Proportion And P_value After"
                             )  

p2 = results %>%
  mutate(fitted = ifelse(mean_P_value > 0.05,TRUE,FALSE)) %>% 
  ggplot(aes(x= fitted)) + 
  geom_bar(aes(fill=fitted)) +
    labs(title = "Outliers Proportion And P_value After"
                             )

gridExtra::grid.arrange(p1,p2 ,  ncol = 2 )

Parametric Test for Association Between { Fitted Value Before And Fitted Values After {Mean} }


ddd <-results %>%
  mutate(fittedBefore = ifelse(Before_P_value > 0.05,TRUE,FALSE)) %>%
  mutate(fittedAfter = ifelse(mean_P_value > 0.05,TRUE,FALSE)) 

 
library(MASS)
tb1<-table(ddd$fittedBefore, ddd$fittedAfter)
tb1
       
        FALSE TRUE
  FALSE  1494 1590
  TRUE      4 1412
chisq.test(tb1)

    Pearson's Chi-squared test with Yates' continuity correction

data:  tb1
X-squared = 1011.4, df = 1, p-value < 2.2e-16

Relation Between Outliers Proportion and P-value After {Median}


p1 = results %>%
  mutate(fitted = ifelse(median_P_value   > 0.05,TRUE,FALSE)) %>% 
  ggplot(aes(x = results$outliersPro , y= results$median_P_value)) + 
  geom_point(aes(color = fitted , alpha = .5) ) +
    labs(title = "Outliers Proportion And P_value After"
                             )  

p2 = results %>%
  mutate(fitted = ifelse(median_P_value > 0.05,TRUE,FALSE)) %>% 
  ggplot(aes(x= fitted)) + 
  geom_bar(aes(fill=fitted)) +
    labs(title = "Outliers Proportion And P_value After"
                             )

gridExtra::grid.arrange(p1,p2 ,  ncol = 2 )



ddd <-results %>%
  mutate(fittedBefore = ifelse(Before_P_value > 0.05,TRUE,FALSE)) %>%
  mutate(fittedAfter = ifelse(median_P_value > 0.05,TRUE,FALSE)) 

 
library(MASS)
tb1<-table(ddd$fittedBefore, ddd$fittedAfter)
tb1
       
        FALSE TRUE
  FALSE  1761 1323
  TRUE      4 1412
chisq.test(tb1)

    Pearson's Chi-squared test with Yates' continuity correction

data:  tb1
X-squared = 1311.8, df = 1, p-value < 2.2e-16

Relation Between Outliers Proportion and P-value After {Q_b_F_C_P}


p1 = results %>%
  mutate(fitted = ifelse(Q_b_F_C_P_value   > 0.05,TRUE,FALSE)) %>% 
  ggplot(aes(x = results$outliersPro , y= results$Q_b_F_C_P_value)) + 
  geom_point(aes(color = fitted , alpha = .5) ) +
    labs(title = "Outliers Proportion And P_value After"
                             )  

p2 = results %>%
  mutate(fitted = ifelse(Q_b_F_C_P_value > 0.05,TRUE,FALSE)) %>% 
  ggplot(aes(x= fitted)) + 
  geom_bar(aes(fill=fitted)) +
    labs(title = "Outliers Proportion And P_value After"
                             )

gridExtra::grid.arrange(p1,p2 ,  ncol = 2 )



ddd <-results %>%
  mutate(fittedBefore = ifelse(Before_P_value > 0.05,TRUE,FALSE)) %>%
  mutate(fittedAfter = ifelse(Q_b_F_C_P_value > 0.05,TRUE,FALSE)) 

 

library(MASS)
tb1<-table(ddd$fittedBefore, ddd$fittedAfter)
tb1
       
        FALSE TRUE
  FALSE  1988 1096
  TRUE      0 1416
chisq.test(tb1)

    Pearson's Chi-squared test with Yates' continuity correction

data:  tb1
X-squared = 1632.5, df = 1, p-value < 2.2e-16
LS0tDQp0aXRsZTogIkFwcGxpY2F0aW9uIEV4cG9uZW50aWFsIERpc3RyaWJ1dGlvbiINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQogDQogDQoNCmBgYHtyIGVycm9yPUZBTFNFICwgd2FybmluZz1GQUxTRSxlY2hvPUZBTFNFfQ0KIGxpYnJhcnkodGlkeXZlcnNlKSAgDQogbGlicmFyeShsdWJyaWRhdGUpDQogbGlicmFyeShwbG90bHkpDQogbGlicmFyeShocmJydGhlbWVzKQ0KYGBgDQoNCiANCiMgTG9hZCBEYXRhIA0KYGBge3IgZXJyb3I9RkFMU0UgLCB3YXJuaW5nPUZBTFNFLGVjaG89RkFMU0V9DQpyZXN1bHRzIDwtIHJlYWQuY3N2KCJyZXN1bHRzLmNzdiIpDQpzdHIocmVzdWx0cykNCmBgYA0KIyBVbml2YXJpYWUgVmlzdWFsaXphdGlvbg0KDQojIyBPdXRsaWVycyBQcm9wb3J0aW9uDQpgYGB7cn0NCnAxIDwtIHJlc3VsdHMgJT4lICAgZ2dwbG90KGFlcyh5ID0gKG91dGxpZXJzUHJvICkpKSArDQogIGdlb21fYm94cGxvdCgpICsgbGFicyh0aXRsZSA9ICJPdXRsaWVycyBQcm9wb3J0aW9uIikNCg0KcDIgPC0gcmVzdWx0cyAlPiUgICBnZ3Bsb3QoYWVzKHggPSAob3V0bGllcnNQcm8gKSkpICsNCiAgZ2VvbV9oaXN0b2dyYW0oKSArIGxhYnModGl0bGUgPSAiT3V0bGllcnMgUHJvcG9ydGlvbiIpDQoNCmdyaWRFeHRyYTo6Z3JpZC5hcnJhbmdlKHAxLHAyICwgIG5jb2wgPSAyICkNCg0KYGBgDQoNCg0KIyMgRXN0aW1hdGVkIFJhdGUgQmVmb3JlIEhhbmRsaW5nDQpgYGB7cn0NCnAxIDwtIHJlc3VsdHMgJT4lICAgZ2dwbG90KGFlcyh5ID0gKGVzdGltYXRlZF9yYXRlX0JlZm9yZV9IYW5kbGluZyApKSkgKw0KICBnZW9tX2JveHBsb3QoKSArIGxhYnModGl0bGUgPSAiRXN0aW1hdGVkIFJhdGUgQmVmb3JlIEhhbmRsaW5nIikNCg0KcDIgPC0gcmVzdWx0cyAlPiUgICBnZ3Bsb3QoYWVzKHggPSAoZXN0aW1hdGVkX3JhdGVfQmVmb3JlX0hhbmRsaW5nICkpKSArDQogIGdlb21faGlzdG9ncmFtKCkgKyBsYWJzKHRpdGxlID0gIkVzdGltYXRlZCBSYXRlIEJlZm9yZSBIYW5kbGluZyIgLCBzdWJ0aXRsZSA9ICJzY2FsZSBYID4+IExvZygxMCkgIiAgICAgICAgICAgKSArIHNjYWxlX3hfbG9nMTAoKQ0KDQpncmlkRXh0cmE6OmdyaWQuYXJyYW5nZShwMSxwMiAsICBuY29sID0gMiApDQoNCmBgYA0KDQpgYGB7cn0NCnFxbm9ybSgocmVzdWx0cyRlc3RpbWF0ZWRfcmF0ZV9CZWZvcmVfSGFuZGxpbmcpLCBwY2ggPSAxLCBmcmFtZSA9IEZBTFNFKQ0KcXFsaW5lKChyZXN1bHRzJGVzdGltYXRlZF9yYXRlX0JlZm9yZV9IYW5kbGluZyksIGNvbCA9ICJzdGVlbGJsdWUiLCBsd2QgPSAyKQ0KDQpgYGANCg0KDQoNCiMjIEVzdGltYXRlZCBSYXRlIEFmdGVyIEhhbmRsaW5nIHtNZWFufQ0KYGBge3J9DQpwMSA8LSByZXN1bHRzICU+JSAgIGdncGxvdChhZXMoeSA9IChlc3RpbWF0ZWRfcmF0ZV9BZnRlcl9tZWFuICAgICAgKSkpICsNCiAgZ2VvbV9ib3hwbG90KCkgKyBsYWJzKHRpdGxlID0gIkVzdGltYXRlZCBSYXRlIEFmdGVyIEhhbmRsaW5nIHtNZWFufSIpDQoNCnAyIDwtIHJlc3VsdHMgJT4lICAgZ2dwbG90KGFlcyh4ID0gKGVzdGltYXRlZF9yYXRlX0FmdGVyX21lYW4gICAgICApKSkgKw0KICBnZW9tX2hpc3RvZ3JhbSgpICArIGxhYnModGl0bGUgPSAiRXN0aW1hdGVkIFJhdGUgQWZ0ZXIgSGFuZGxpbmcge01lYW59Ig0KICAgICAgICAgICAgICAgICAgICAgICAgICAsIHN1YnRpdGxlID0gInNjYWxlIFggPj4gTG9nKDEwKSAiDQogICAgICAgICAgICAgICAgICAgICAgICAgICApICsgc2NhbGVfeF9sb2cxMCgpDQogIA0KDQpncmlkRXh0cmE6OmdyaWQuYXJyYW5nZShwMSxwMiAsICBuY29sID0gMiApDQoNCmBgYA0KDQoNCg0KYGBge3J9DQpyZXN1bHRzICU+JSAgIHNlbGVjdChlc3RpbWF0ZWRfcmF0ZV9CZWZvcmVfSGFuZGxpbmcgLCANCiAgICAgICAgICAgICAgICAgICAgIGVzdGltYXRlZF9yYXRlX0FmdGVyX1FfYl9GX0MgLCANCiAgICAgICAgICAgICAgICAgICAgIGVzdGltYXRlZF9yYXRlX0FmdGVyX21lYW4gLCANCiAgICAgICAgICAgICAgICAgICAgIGVzdGltYXRlZF9yYXRlX0FmdGVyX21lZGlhbiANCiAgICAgICAgICAgICAgICAgICAgICkgJT4lIA0KICBnYXRoZXIoIk1ldGhvZCIgLCAiZXN0aW1hdGVkUmF0ZSIgLCBlc3RpbWF0ZWRfcmF0ZV9CZWZvcmVfSGFuZGxpbmcgLCBlc3RpbWF0ZWRfcmF0ZV9BZnRlcl9RX2JfRl9DICwgZXN0aW1hdGVkX3JhdGVfQWZ0ZXJfbWVhbiAsZXN0aW1hdGVkX3JhdGVfQWZ0ZXJfbWVkaWFuICApICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gKGVzdGltYXRlZFJhdGUpKSkgKyANCiAgICAgZ2VvbV9oaXN0b2dyYW0oIGFlcyggZmlsbCAgPSBhcy5mYWN0b3IoTWV0aG9kKSkpICsgDQogICBsYWJzKHRpdGxlID0gIkVzdGltYXRlZCBSYXRlIEFmdGVyIEhhbmRsaW5nICINCiAgICAgICAgICAgICAgICAgICAgICAgICAgLCBzdWJ0aXRsZSA9ICJzY2FsZSBYID4+IExvZygxMCkgIiApICsgc2NhbGVfeF9sb2cxMCgpKw0KICANCg0KICBmYWNldF93cmFwKC5+TWV0aG9kKQ0KDQoNCmBgYA0KDQoNCg0KIyBSZWxhdGlvbiBCZXR3ZWVuIE91dGxpZXJzIFByb3BvcnRpb24gYW5kIFAtdmFsdWUgQmVmb3JlIA0KYGBge3J9DQoNCnAxID0gcmVzdWx0cyAlPiUNCiAgbXV0YXRlKGZpdHRlZCA9IGlmZWxzZShCZWZvcmVfUF92YWx1ZSA+IDAuMDUsVFJVRSxGQUxTRSkpICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gcmVzdWx0cyRvdXRsaWVyc1BybyAsIHk9IEJlZm9yZV9QX3ZhbHVlKSkgKyANCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBmaXR0ZWQgLCBhbHBoYSA9IC45KSkgKw0KICAgIGxhYnModGl0bGUgPSAiT3V0bGllcnMgUHJvcG9ydGlvbiBBbmQgUF92YWx1ZSBCZWZvcmUiDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgDQoNCnAyID0gcmVzdWx0cyAlPiUNCiAgbXV0YXRlKGZpdHRlZCA9IGlmZWxzZShCZWZvcmVfUF92YWx1ZSA+IDAuMDUsVFJVRSxGQUxTRSkpICU+JSANCiAgZ2dwbG90KGFlcyh4PSBmaXR0ZWQpKSArIA0KICBnZW9tX2JhcihhZXMoZmlsbD1maXR0ZWQpKSArDQogICAgbGFicyh0aXRsZSA9ICJPdXRsaWVycyBQcm9wb3J0aW9uIEFuZCBQX3ZhbHVlIEJlZm9yZSINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KDQpncmlkRXh0cmE6OmdyaWQuYXJyYW5nZShwMSxwMiAsICBuY29sID0gMiApDQpgYGANCg0KDQojIFJlbGF0aW9uIEJldHdlZW4gT3V0bGllcnMgUHJvcG9ydGlvbiBhbmQgUC12YWx1ZSBBZnRlciB7TWVhbn0gDQpgYGB7cn0NCg0KcDEgPSByZXN1bHRzICU+JQ0KICBtdXRhdGUoZml0dGVkID0gaWZlbHNlKG1lYW5fUF92YWx1ZSA+IDAuMDUsVFJVRSxGQUxTRSkpICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gcmVzdWx0cyRvdXRsaWVyc1BybyAsIHk9IHJlc3VsdHMkbWVhbl9QX3ZhbHVlKSkgKyANCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBmaXR0ZWQgLCBhbHBoYSA9IC41KSApICsNCiAgICBsYWJzKHRpdGxlID0gIk91dGxpZXJzIFByb3BvcnRpb24gQW5kIFBfdmFsdWUgQWZ0ZXIiDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgIA0KDQpwMiA9IHJlc3VsdHMgJT4lDQogIG11dGF0ZShmaXR0ZWQgPSBpZmVsc2UobWVhbl9QX3ZhbHVlID4gMC4wNSxUUlVFLEZBTFNFKSkgJT4lIA0KICBnZ3Bsb3QoYWVzKHg9IGZpdHRlZCkpICsgDQogIGdlb21fYmFyKGFlcyhmaWxsPWZpdHRlZCkpICsNCiAgICBsYWJzKHRpdGxlID0gIk91dGxpZXJzIFByb3BvcnRpb24gQW5kIFBfdmFsdWUgQWZ0ZXIiDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCg0KZ3JpZEV4dHJhOjpncmlkLmFycmFuZ2UocDEscDIgLCAgbmNvbCA9IDIgKQ0KDQpgYGANCg0KDQpQYXJhbWV0cmljIFRlc3QgZm9yIEFzc29jaWF0aW9uIEJldHdlZW4geyBGaXR0ZWQgVmFsdWUgQmVmb3JlIEFuZCBGaXR0ZWQgVmFsdWVzIEFmdGVyIHtNZWFufSB9DQpgYGB7cn0NCg0KZGRkIDwtcmVzdWx0cyAlPiUNCiAgbXV0YXRlKGZpdHRlZEJlZm9yZSA9IGlmZWxzZShCZWZvcmVfUF92YWx1ZSA+IDAuMDUsVFJVRSxGQUxTRSkpICU+JQ0KICBtdXRhdGUoZml0dGVkQWZ0ZXIgPSBpZmVsc2UobWVhbl9QX3ZhbHVlID4gMC4wNSxUUlVFLEZBTFNFKSkgDQoNCiANCmxpYnJhcnkoTUFTUykNCnRiMTwtdGFibGUoZGRkJGZpdHRlZEJlZm9yZSwgZGRkJGZpdHRlZEFmdGVyKQ0KdGIxDQpjaGlzcS50ZXN0KHRiMSkNCg0KYGBgDQoNCg0KDQojIFJlbGF0aW9uIEJldHdlZW4gT3V0bGllcnMgUHJvcG9ydGlvbiBhbmQgUC12YWx1ZSBBZnRlciB7TWVkaWFufSANCmBgYHtyfQ0KDQpwMSA9IHJlc3VsdHMgJT4lDQogIG11dGF0ZShmaXR0ZWQgPSBpZmVsc2UobWVkaWFuX1BfdmFsdWUgICA+IDAuMDUsVFJVRSxGQUxTRSkpICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gcmVzdWx0cyRvdXRsaWVyc1BybyAsIHk9IHJlc3VsdHMkbWVkaWFuX1BfdmFsdWUpKSArIA0KICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IGZpdHRlZCAsIGFscGhhID0gLjUpICkgKw0KICAgIGxhYnModGl0bGUgPSAiT3V0bGllcnMgUHJvcG9ydGlvbiBBbmQgUF92YWx1ZSBBZnRlciINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSAgDQoNCnAyID0gcmVzdWx0cyAlPiUNCiAgbXV0YXRlKGZpdHRlZCA9IGlmZWxzZShtZWRpYW5fUF92YWx1ZSA+IDAuMDUsVFJVRSxGQUxTRSkpICU+JSANCiAgZ2dwbG90KGFlcyh4PSBmaXR0ZWQpKSArIA0KICBnZW9tX2JhcihhZXMoZmlsbD1maXR0ZWQpKSArDQogICAgbGFicyh0aXRsZSA9ICJPdXRsaWVycyBQcm9wb3J0aW9uIEFuZCBQX3ZhbHVlIEFmdGVyIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQoNCmdyaWRFeHRyYTo6Z3JpZC5hcnJhbmdlKHAxLHAyICwgIG5jb2wgPSAyICkNCg0KDQpkZGQgPC1yZXN1bHRzICU+JQ0KICBtdXRhdGUoZml0dGVkQmVmb3JlID0gaWZlbHNlKEJlZm9yZV9QX3ZhbHVlID4gMC4wNSxUUlVFLEZBTFNFKSkgJT4lDQogIG11dGF0ZShmaXR0ZWRBZnRlciA9IGlmZWxzZShtZWRpYW5fUF92YWx1ZSA+IDAuMDUsVFJVRSxGQUxTRSkpIA0KDQogDQpsaWJyYXJ5KE1BU1MpDQp0YjE8LXRhYmxlKGRkZCRmaXR0ZWRCZWZvcmUsIGRkZCRmaXR0ZWRBZnRlcikNCnRiMQ0KY2hpc3EudGVzdCh0YjEpDQoNCg0KYGBgDQoNCg0KDQoNCiMgUmVsYXRpb24gQmV0d2VlbiBPdXRsaWVycyBQcm9wb3J0aW9uIGFuZCBQLXZhbHVlIEFmdGVyIHtRX2JfRl9DX1B9IA0KYGBge3J9DQoNCnAxID0gcmVzdWx0cyAlPiUNCiAgbXV0YXRlKGZpdHRlZCA9IGlmZWxzZShRX2JfRl9DX1BfdmFsdWUgICA+IDAuMDUsVFJVRSxGQUxTRSkpICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gcmVzdWx0cyRvdXRsaWVyc1BybyAsIHk9IHJlc3VsdHMkUV9iX0ZfQ19QX3ZhbHVlKSkgKyANCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBmaXR0ZWQgLCBhbHBoYSA9IC41KSApICsNCiAgICBsYWJzKHRpdGxlID0gIk91dGxpZXJzIFByb3BvcnRpb24gQW5kIFBfdmFsdWUgQWZ0ZXIiDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgIA0KDQpwMiA9IHJlc3VsdHMgJT4lDQogIG11dGF0ZShmaXR0ZWQgPSBpZmVsc2UoUV9iX0ZfQ19QX3ZhbHVlID4gMC4wNSxUUlVFLEZBTFNFKSkgJT4lIA0KICBnZ3Bsb3QoYWVzKHg9IGZpdHRlZCkpICsgDQogIGdlb21fYmFyKGFlcyhmaWxsPWZpdHRlZCkpICsNCiAgICBsYWJzKHRpdGxlID0gIk91dGxpZXJzIFByb3BvcnRpb24gQW5kIFBfdmFsdWUgQWZ0ZXIiDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCg0KZ3JpZEV4dHJhOjpncmlkLmFycmFuZ2UocDEscDIgLCAgbmNvbCA9IDIgKQ0KDQoNCmRkZCA8LXJlc3VsdHMgJT4lDQogIG11dGF0ZShmaXR0ZWRCZWZvcmUgPSBpZmVsc2UoQmVmb3JlX1BfdmFsdWUgPiAwLjA1LFRSVUUsRkFMU0UpKSAlPiUNCiAgbXV0YXRlKGZpdHRlZEFmdGVyID0gaWZlbHNlKFFfYl9GX0NfUF92YWx1ZSA+IDAuMDUsVFJVRSxGQUxTRSkpIA0KDQogDQoNCmxpYnJhcnkoTUFTUykNCnRiMTwtdGFibGUoZGRkJGZpdHRlZEJlZm9yZSwgZGRkJGZpdHRlZEFmdGVyKQ0KdGIxDQpjaGlzcS50ZXN0KHRiMSkNCg0KDQoNCmBgYA0KDQoNCg0KDQogDQoNCg0K