Set-up

Following are few of the packages required for working of given tasks.



library(readr)
library(tidyr)
package 㤼㸱tidyr㤼㸲 was built under R version 3.6.3
library(dplyr)
package 㤼㸱dplyr㤼㸲 was built under R version 3.6.3
library(Hmisc)
package 㤼㸱Hmisc㤼㸲 was built under R version 3.6.3package 㤼㸱survival㤼㸲 was built under R version 3.6.3package 㤼㸱ggplot2㤼㸲 was built under R version 3.6.3
library(outliers)

Import WHO

The WHO has the information related to Tuberculosis cases across the world recorded in the period 1995 to 2013. It follows different coding scheme to describe data which is untidy. Let us import the data and proceed with the tasks.


WorldHealth <- read.csv("WHO.csv")

Task No 1:

As the data is spread across the table, let us use gather function of tidyr package to reshape the data and obtain the required result.



Tidyt1 <- WorldHealth %>% gather(`new_sp_m014`,`new_sp_m1524`,`new_sp_m2534`,`new_sp_m3544`,
                       `new_sp_m4554`,`new_sp_m5564`,`new_sp_m65`,`new_sp_f014`,
                       `new_sp_f1524`,`new_sp_f2534`,`new_sp_f3544`,`new_sp_f4554`,
                       `new_sp_f5564`,`new_sp_f65`,`new_sn_m014`,`new_sn_m1524`,
                       `new_sn_m2534`,
                       `new_sn_m3544`,`new_sn_m4554`,`new_sn_m5564`,`new_sn_m65`,
                       `new_sn_f014`,`new_sn_f1524`,`new_sn_f2534`,`new_sn_f3544`,
                       `new_sn_f4554`,`new_sn_f5564`,`new_sn_f65`,`new_ep_m014`,
                       `new_ep_m1524`,`new_ep_m2534`,`new_ep_m3544`,`new_ep_m4554`,
                       `new_ep_m5564`,`new_ep_m65`,`new_ep_f014`,`new_ep_f1524`,
                       `new_ep_f2534`,`new_ep_f3544`,`new_ep_f4554`,`new_ep_f5564`,
                       `new_ep_f65`,`new_rel_m014`,`new_rel_m1524`,`new_rel_m2534`,
                       `new_rel_m3544`,`new_rel_m4554`,`new_rel_m5564`,`new_rel_m65`,
                       `new_rel_f014`,`new_rel_f1524`,`new_rel_f2534`,`new_rel_f3544`,
                       `new_rel_f4554`,`new_rel_f5564`,`new_rel_f65`,key ="code",
                        value ="value") 
Tidyt1
NA
NA

Task No 2:

The task here is to separate the information hidden in column code and make it meaningful and efficient to understand. The separate function is used to do the same.



Tidyt2 <- Tidyt1 %>%  separate(code, into = c("new", "var", "sex"), sep="_") %>% separate(sex, into = c("sex", "age"), sep=1)
Tidyt2
NA
NA
NA
NA

Task No 3:

The chore of separating each variable into different columns could be achieved using the spread function. The function uses var as the key and value as value.




Tidyt3 <- spread(Tidyt2, key = 'var', value = value)
Tidyt3
NA
NA

Task No 4:

The two variables sex and age are factorised separately here and mutate function is used accordingly. This task uses the cut function in order to break the age labels into ranges as specified.


 
Tidyt4a <- Tidyt3 %>% mutate(sex=factor(sex, levels = c("m", "f")))
Tidyt4a$age <- as.numeric(Tidyt4a$age) #converting the data type
Tidyt4a$age <- cut(Tidyt4a$age, #applying cut function
               breaks = c(0,15,25,35,45,55,65,Inf),
               labels = c("<15","15-24", "25-34", "35-44", "45-54", "55-64", "65>="),
               right = FALSE)

Tidyt4b <- Tidyt4a %>% mutate(age= factor(age, levels= c("<15","15-24","25-34","35-44","45-54","55-64","65>=")))
Tidyt4b
NA
NA
NA
NA
NA

Task No 5: Filtering and Selecting

The redundant data is eliminated in two steps and hence tidy data is made ready. Further, the data related to countries Australia, Bhutan and Brazil has been filtered. The filtered information is saved as a data frame with the name WHO_subset.


 


Tidyt5 <- Tidyt4b[,-2]
Tidyt5a <- Tidyt5[,-4] 

WHO_subset <- Tidyt5a %>% filter(country == "Australia" | country == "Bhutan" | country == "Brazil")
WHO_subset
NA
NA

Import Species & Surveys

The species and surveys dataset is imported here using the read function.



species <- read.csv("species.csv")
surveys <- read.csv("surveys.csv")

Task No 6: Joining datasets

This complete chore of joining is achieved using the left_join operator on surveys from species. The combined data frame which is represented by Joint6 is renamed as surveys_combined.



Joint6 <-species %>% left_join(surveys, by = "species_id")
Column `species_id` joining factors with different levels, coercing to character vector
surveys_combined <- Joint6
surveys_combined
NA
NA
NA
NA

Task No 7:

The mean weight and hind foot length of one particular species i,e *intermedius across different months exclusive of missing values is extracted in this task.


 

meanweight <- surveys_combined %>% select(month,species, weight) %>% filter(species == "intermedius") %>% group_by(month)
avgweight <- meanweight %>% mutate(mean(weight, na.rm = TRUE)) %>% group_by(month)
avgweight
avgweight <- avgweight[,-c(2,3)] # removes redundant information of species and weight
names(avgweight) <- c("month", "avg_weight") #names the columns
avgweight

meanhfl <- surveys_combined %>% select(month, species, hindfoot_length) %>% filter(species == "intermedius") %>% group_by(month)
avghfl <- meanhfl %>% mutate(mean(hindfoot_length, na.rm = TRUE)) %>% group_by(month)
avghfl
avghfl <- avghfl[,-c(2,3)]
names(avghfl) <- c("month", "avg_hindfoot_length")
avghfl

Calct7 <- cbind(avgweight,avghfl) #appends the two data frames
Calct7 <- Calct7[,-c(3)] #removes redundant data of months
Calct7 <- unique(Calct7) #keeps the distint information
Calct7
NA
NA
NA

Task No 8:

The data frame is renamed as surveys_combined_year and the missing weights are replaced with the mean values. All these values are grouped by species.




MVt8a <- surveys_combined %>% select(year, weight, species) %>% filter(year == 1981) %>% group_by(species)
surveys_combined_year <- MVt8a
surveys_combined_year %>% select(weight) %>% group_by(species)
Adding missing grouping variables: `species`
sum(is.na(surveys_combined_year$weight)) #sums all the NA's in weight column
[1] 59
weight <- impute(surveys_combined_year$weight, fun = mean)
surveys_weight_imputed <- weight
head(surveys_weight_imputed,500)
        1         2         3         4         5         6         7         8         9        10        11        12        13        14        15        16        17        18 
65.84389* 65.84389* 65.84389* 65.84389* 65.84389* 65.84389* 65.84389* 65.84389* 65.84389* 65.84389* 65.84389* 65.84389*  34.00000  49.00000  46.00000  38.00000  49.00000  34.00000 
       19        20        21        22        23        24        25        26        27        28        29        30        31        32        33        34        35        36 
 48.00000  46.00000  43.00000  51.00000  45.00000  47.00000  50.00000  46.00000  40.00000  37.00000  55.00000  48.00000  41.00000  47.00000  49.00000  47.00000  40.00000  48.00000 
       37        38        39        40        41        42        43        44        45        46        47        48        49        50        51        52        53        54 
 49.00000  32.00000  50.00000  47.00000  55.00000  53.00000  54.00000  47.00000  53.00000  41.00000  50.00000  33.00000  61.00000  53.00000  56.00000  52.00000  44.00000 65.84389* 
       55        56        57        58        59        60        61        62        63        64        65        66        67        68        69        70        71        72 
 33.00000  46.00000  47.00000  42.00000  38.00000  35.00000  55.00000  53.00000  37.00000  60.00000  49.00000  55.00000  47.00000  46.00000  48.00000  46.00000  43.00000  48.00000 
       73        74        75        76        77        78        79        80        81        82        83        84        85        86        87        88        89        90 
 41.00000  39.00000  50.00000  53.00000  51.00000  47.00000  50.00000  48.00000  36.00000  49.00000  49.00000  44.00000  39.00000  39.00000  49.00000  47.00000  39.00000  44.00000 
       91        92        93        94        95        96        97        98        99       100       101       102       103       104       105       106       107       108 
 54.00000  39.00000  56.00000  38.00000  42.00000  52.00000  51.00000  51.00000  43.00000  49.00000  50.00000  47.00000  45.00000  49.00000  58.00000  51.00000  29.00000  43.00000 
      109       110       111       112       113       114       115       116       117       118       119       120       121       122       123       124       125       126 
 45.00000  48.00000  50.00000  56.00000  22.00000  51.00000  45.00000  42.00000  50.00000  60.00000  30.00000  40.00000  39.00000  49.00000  39.00000  44.00000  50.00000  43.00000 
      127       128       129       130       131       132       133       134       135       136       137       138       139       140       141       142       143       144 
 52.00000  44.00000  43.00000  49.00000  50.00000  43.00000  47.00000  46.00000  40.00000  52.00000  49.00000  47.00000  38.00000  45.00000  52.00000  46.00000  43.00000  49.00000 
      145       146       147       148       149       150       151       152       153       154       155       156       157       158       159       160       161       162 
 47.00000  44.00000  40.00000 65.84389*  47.00000  43.00000  45.00000  48.00000  54.00000  43.00000  47.00000  48.00000  44.00000  24.00000  44.00000  52.00000  50.00000  43.00000 
      163       164       165       166       167       168       169       170       171       172       173       174       175       176       177       178       179       180 
 43.00000  50.00000  42.00000  44.00000  54.00000  53.00000  47.00000  43.00000  51.00000  38.00000  47.00000  41.00000  59.00000  48.00000  39.00000  46.00000  36.00000  49.00000 
      181       182       183       184       185       186       187       188       189       190       191       192       193       194       195       196       197       198 
 47.00000  36.00000  42.00000  45.00000  49.00000  41.00000  51.00000  48.00000 65.84389*  45.00000  50.00000  49.00000  42.00000  48.00000  43.00000  38.00000  40.00000  40.00000 
      199       200       201       202       203       204       205       206       207       208       209       210       211       212       213       214       215       216 
 45.00000  45.00000  46.00000  43.00000  49.00000  46.00000  40.00000  41.00000  42.00000  45.00000  45.00000  48.00000  46.00000  48.00000  43.00000  50.00000  34.00000  43.00000 
      217       218       219       220       221       222       223       224       225       226       227       228       229       230       231       232       233       234 
 44.00000  41.00000  27.00000 65.84389*  40.00000  45.00000  44.00000  42.00000  48.00000  60.00000  39.00000  51.00000  50.00000  46.00000  54.00000  44.00000  44.00000  35.00000 
      235       236       237       238       239       240       241       242       243       244       245       246       247       248       249       250       251       252 
 43.00000  47.00000  46.00000  39.00000  47.00000  46.00000  48.00000  44.00000  52.00000  50.00000  44.00000  42.00000  45.00000  42.00000  34.00000  46.00000  46.00000  45.00000 
      253       254       255       256       257       258       259       260       261       262       263       264       265       266       267       268       269       270 
 46.00000  44.00000  42.00000  48.00000  47.00000 65.84389*  46.00000  41.00000  46.00000  44.00000  46.00000  46.00000  49.00000  51.00000  46.00000  42.00000  44.00000  46.00000 
      271       272       273       274       275       276       277       278       279       280       281       282       283       284       285       286       287       288 
 41.00000  49.00000  37.00000  46.00000  48.00000  42.00000  42.00000  49.00000  43.00000  48.00000  49.00000  34.00000  46.00000  21.00000  60.00000  53.00000  44.00000  45.00000 
      289       290       291       292       293       294       295       296       297       298       299       300       301       302       303       304       305       306 
 42.00000  31.00000  29.00000  43.00000  46.00000  41.00000  56.00000  42.00000 65.84389* 65.84389*  31.00000  46.00000  44.00000  45.00000  43.00000  46.00000  50.00000  46.00000 
      307       308       309       310       311       312       313       314       315       316       317       318       319       320       321       322       323       324 
 45.00000  46.00000  38.00000  41.00000  47.00000  48.00000  45.00000  42.00000  44.00000  41.00000  46.00000  48.00000  39.00000  47.00000  41.00000  17.00000  17.00000  48.00000 
      325       326       327       328       329       330       331       332       333       334       335       336       337       338       339       340       341       342 
 41.00000  47.00000  35.00000  41.00000  46.00000  44.00000  45.00000  48.00000  50.00000  46.00000  48.00000  41.00000  53.00000  28.00000  46.00000  38.00000  49.00000  24.00000 
      343       344       345       346       347       348       349       350       351       352       353       354       355       356       357       358       359       360 
 38.00000  48.00000  43.00000  46.00000  39.00000  42.00000  36.00000  44.00000  44.00000  26.00000  42.00000  36.00000  40.00000  45.00000  53.00000  33.00000  22.00000  45.00000 
      361       362       363       364       365       366       367       368       369       370       371       372       373       374       375       376       377       378 
 46.00000  22.00000  61.00000  47.00000  37.00000  43.00000  45.00000  46.00000  48.00000  39.00000  52.00000  50.00000  44.00000  44.00000  48.00000  47.00000  44.00000  31.00000 
      379       380       381       382       383       384       385       386       387       388       389       390       391       392       393       394       395       396 
 47.00000  46.00000  34.00000  46.00000  26.00000  58.00000  38.00000  40.00000  48.00000  45.00000  31.00000  50.00000  49.00000  27.00000  47.00000  44.00000  43.00000  28.00000 
      397       398       399       400       401       402       403       404       405       406       407       408       409       410       411       412       413       414 
 48.00000  45.00000  47.00000  45.00000  54.00000  41.00000  45.00000  47.00000  37.00000  46.00000  42.00000  45.00000  53.00000  39.00000  46.00000  32.00000  41.00000  44.00000 
      415       416       417       418       419       420       421       422       423       424       425       426       427       428       429       430       431       432 
 45.00000  56.00000  43.00000  44.00000  42.00000  44.00000  54.00000  36.00000  46.00000  41.00000  58.00000  44.00000  45.00000  44.00000  47.00000  46.00000  19.00000  27.00000 
      433       434       435       436       437       438       439       440       441       442       443       444       445       446       447       448       449       450 
 35.00000  33.00000  21.00000  47.00000  42.00000  46.00000  46.00000  42.00000  37.00000  47.00000  53.00000  49.00000  49.00000  42.00000  44.00000  47.00000  50.00000  45.00000 
      451       452       453       454       455       456       457       458       459       460       461       462       463       464       465       466       467       468 
 43.00000  46.00000  47.00000  57.00000  32.00000  27.00000  51.00000  48.00000  42.00000  58.00000  47.00000  44.00000  52.00000  48.00000  42.00000  38.00000  49.00000  46.00000 
      469       470       471       472       473       474       475       476       477       478       479       480       481       482       483       484       485       486 
 47.00000  48.00000  41.00000  39.00000  43.00000  43.00000  42.00000  27.00000  25.00000  26.00000  44.00000  44.00000  43.00000  22.00000  51.00000  46.00000  49.00000  45.00000 
      487       488       489       490       491       492       493       494       495       496       497       498       499       500 
 54.00000  40.00000  39.00000  42.00000  40.00000  45.00000  49.00000  43.00000  42.00000  47.00000  38.00000  51.00000  49.00000  38.00000 

Task No 9:

This section of the report checks for special and inconsitent values in the imputed data. There exist no special or inconsistent values. Hence doesnt require any further refinement.


Check_spl_vals <- surveys_weight_imputed %>% is.finite() %>% is.infinite() %>% is.nan() #checksspecial values
head(Check_spl_vals,250)
    1     2     3     4     5     6     7     8     9    10    11    12    13    14    15    16    17    18    19    20    21    22    23    24    25    26    27    28    29    30 
FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 
   31    32    33    34    35    36    37    38    39    40    41    42    43    44    45    46    47    48    49    50    51    52    53    54    55    56    57    58    59    60 
FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 
   61    62    63    64    65    66    67    68    69    70    71    72    73    74    75    76    77    78    79    80    81    82    83    84    85    86    87    88    89    90 
FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 
   91    92    93    94    95    96    97    98    99   100   101   102   103   104   105   106   107   108   109   110   111   112   113   114   115   116   117   118   119   120 
FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 
  121   122   123   124   125   126   127   128   129   130   131   132   133   134   135   136   137   138   139   140   141   142   143   144   145   146   147   148   149   150 
FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 
  151   152   153   154   155   156   157   158   159   160   161   162   163   164   165   166   167   168   169   170   171   172   173   174   175   176   177   178   179   180 
FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 
  181   182   183   184   185   186   187   188   189   190   191   192   193   194   195   196   197   198   199   200   201   202   203   204   205   206   207   208   209   210 
FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 
  211   212   213   214   215   216   217   218   219   220   221   222   223   224   225   226   227   228   229   230   231   232   233   234   235   236   237   238   239   240 
FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 
  241   242   243   244   245   246   247   248   249   250 
FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 
surveyspos <- (surveys_weight_imputed>=0) #checks for inconsistencies
head(surveyspos,250)
   1    2    3    4    5    6    7    8    9   10   11   12   13   14   15   16   17   18   19   20   21   22   23   24   25   26   27   28   29   30   31   32   33   34   35   36 
TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE 
  37   38   39   40   41   42   43   44   45   46   47   48   49   50   51   52   53   54   55   56   57   58   59   60   61   62   63   64   65   66   67   68   69   70   71   72 
TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE 
  73   74   75   76   77   78   79   80   81   82   83   84   85   86   87   88   89   90   91   92   93   94   95   96   97   98   99  100  101  102  103  104  105  106  107  108 
TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE 
 109  110  111  112  113  114  115  116  117  118  119  120  121  122  123  124  125  126  127  128  129  130  131  132  133  134  135  136  137  138  139  140  141  142  143  144 
TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE 
 145  146  147  148  149  150  151  152  153  154  155  156  157  158  159  160  161  162  163  164  165  166  167  168  169  170  171  172  173  174  175  176  177  178  179  180 
TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE 
 181  182  183  184  185  186  187  188  189  190  191  192  193  194  195  196  197  198  199  200  201  202  203  204  205  206  207  208  209  210  211  212  213  214  215  216 
TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE 
 217  218  219  220  221  222  223  224  225  226  227  228  229  230  231  232  233  234  235  236  237  238  239  240  241  242  243  244  245  246  247  248  249  250 
TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE 

Task No 10:

This section of report checks for the outliers of hindfoot length. The existing outliers are handled by deleting them.

The deleting method involves the calculation of z-score. Unfortunately, the base R-function doesnt support the same. Hence, a package related to it is installed and z-score is calculated.


install.packages(c("R.basic"), contriburl="http://www.braju.com/R/repos/") #zscorepackage
WARNING: Rtools is required to build R packages but is not currently installed. Please download and install the appropriate version of Rtools before proceeding:

https://cran.rstudio.com/bin/windows/Rtools/
Installing package into 㤼㸱C:/Users/Wajahath/Documents/R/win-library/3.6㤼㸲
(as 㤼㸱lib㤼㸲 is unspecified)
also installing the dependencies 㤼㸱R.methodsS3㤼㸲, 㤼㸱R.oo㤼㸲, 㤼㸱R.utils㤼㸲

trying URL 'http://www.braju.com/R/repos//R.methodsS3_1.6.1.zip'
Content type 'application/zip' length 55826 bytes (54 KB)
downloaded 54 KB

trying URL 'http://www.braju.com/R/repos//R.oo_1.18.0.zip'
Content type 'application/zip' length 769208 bytes (751 KB)
downloaded 751 KB

trying URL 'http://www.braju.com/R/repos//R.utils_1.29.8.zip'
Content type 'application/zip' length 910181 bytes (888 KB)
downloaded 888 KB

trying URL 'http://www.braju.com/R/repos//R.basic_0.53.0.zip'
Content type 'application/zip' length 185242 bytes (180 KB)
downloaded 180 KB
package ‘R.methodsS3’ successfully unpacked and MD5 sums checked
package ‘R.oo’ successfully unpacked and MD5 sums checked
package ‘R.utils’ successfully unpacked and MD5 sums checked
package ‘R.basic’ successfully unpacked and MD5 sums checked

The downloaded binary packages are in
    C:\Users\Wajahath\AppData\Local\Temp\RtmpGYUE5S\downloaded_packages
library(R.basic)
Loading required package: R.methodsS3
R.methodsS3 v1.6.1 (2014-01-04) successfully loaded. See ?R.methodsS3 for help.
Loading required package: R.oo
Registered S3 method overwritten by 'R.oo':
  method        from       
  throw.default R.methodsS3
R.oo v1.18.0 (2014-02-22) successfully loaded. See ?R.oo for help.

Attaching package: 㤼㸱R.oo㤼㸲

The following objects are masked from 㤼㸱package:methods㤼㸲:

    getClasses, getMethods

The following objects are masked from 㤼㸱package:base㤼㸲:

    attach, detach, gc, load, save

Loading required package: R.utils
R.utils v1.29.8 (2014-01-27) successfully loaded. See ?R.utils for help.

Attaching package: 㤼㸱R.utils㤼㸲

The following object is masked from 㤼㸱package:Hmisc㤼㸲:

    capitalize

The following object is masked from 㤼㸱package:tidyr㤼㸲:

    extract

The following object is masked from 㤼㸱package:utils㤼㸲:

    timestamp

The following objects are masked from 㤼㸱package:base㤼㸲:

    cat, commandArgs, getOption, inherits, isOpen, parse, warnings

R.basic v0.53.0 (2013-05-30) successfully loaded. See ?R.basic for help.

Attaching package: 㤼㸱R.basic㤼㸲

The following object is masked from 㤼㸱package:R.utils㤼㸲:

    insert.default

The following objects are masked from 㤼㸱package:graphics㤼㸲:

    abline, hist.default

The following object is masked from 㤼㸱package:base㤼㸲:

    factorial
surveys_combined$hindfoot_length
   [1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
  [59] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [117] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [175] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [233] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [291] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [349] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [407] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [465] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [523] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [581] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [639] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 35 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 31 NA NA NA NA NA NA NA NA
 [697] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 13 12 14 13 14 14 14 14 14 14 15 13
 [755] 14 13 14 14 14 12 13 12 11 12 12 14 14 14  7 13 13 NA 14 12 16 14 12 13 12 13 13 14 13  6 13 12 14 14 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [813] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [871] NA 37 36 35 37 34 38 35 NA 36 36 34 36 35 31 36 38 37 35 36 NA 38 35 36 36 34 36 35 36 35 32 36 32 36 26 36 37 36 34 NA 33 35 35 35 37 34 35 35 36 32 34 35 37 35 35 33 35 35
 [929] 35 NA 36 38 36 36 38 37 35 35 35 35 35 37 37 32 34 37 33 35 35 33 37 36 35 30 33 34 34 34 37 33 37 35 35 37 33 36 34 35 37 36 37 37 35 35 38 35 36 36 37 37 39 36 36 36 37 36
 [987] 36 37 33 33 37 34 35 37 34 36 33 36 36 37
 [ reached getOption("max.print") -- omitted 33792 entries ]
surveys_combined$hindfoot_length %>% boxplot() #checks for the outliers


z.scr <- zscore(surveys_combined$hindfoot_length,na.rm = getOption("na.rm", TRUE))

hfl_clean<- surveys_combined$hindfoot_length[ - which( abs(z.scr) >3 )]
head(hfl_clean, 500)
  [1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [59] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[117] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[175] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[233] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[291] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[349] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[407] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[465] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
boxplot(hfl_clean) #re-checking for outliers



LS0tDQp0aXRsZTogIk1BVEgyMzQ5IFNlbWVzdGVyIDEsIDIwMTkiDQphdXRob3I6ICJTeWVkIFdhamFoYXRoIC0gUzM3NTAwMzkiDQpzdWJ0aXRsZTogQXNzaWdubWVudCBObyAyDQpvdXRwdXQ6DQogIGh0bWxfbm90ZWJvb2s6IGRlZmF1bHQNCi0tLQ0KDQojIyBTZXQtdXANCg0KRm9sbG93aW5nIGFyZSBmZXcgb2YgdGhlIHBhY2thZ2VzIHJlcXVpcmVkIGZvciB3b3JraW5nIG9mIGdpdmVuIHRhc2tzLg0KDQoNCmBgYHtyLCBlY2hvID0gVFJVRSwgbWVzc2FnZT1GQUxTRX0NCg0KDQpsaWJyYXJ5KHJlYWRyKQ0KbGlicmFyeSh0aWR5cikNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KEhtaXNjKQ0KbGlicmFyeShvdXRsaWVycykNCg0KYGBgDQoNCg0KIyMgSW1wb3J0IFdITw0KDQpUaGUgKipXSE8qKiBoYXMgdGhlIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gVHViZXJjdWxvc2lzIGNhc2VzIGFjcm9zcyB0aGUgd29ybGQgcmVjb3JkZWQgaW4gdGhlIHBlcmlvZCAxOTk1IHRvIDIwMTMuIEl0IGZvbGxvd3MgZGlmZmVyZW50IGNvZGluZyBzY2hlbWUgdG8gZGVzY3JpYmUgZGF0YSB3aGljaCBpcyB1bnRpZHkuIExldCB1cyBpbXBvcnQgdGhlIGRhdGEgYW5kIHByb2NlZWQgd2l0aCB0aGUgdGFza3MuDQpgYGB7cn0NCg0KV29ybGRIZWFsdGggPC0gcmVhZC5jc3YoIldITy5jc3YiKQ0KDQpgYGANCg0KDQoNCg0KIyMgVGFzayBObyAxOg0KDQpBcyB0aGUgZGF0YSBpcyBzcHJlYWQgYWNyb3NzIHRoZSB0YWJsZSwgbGV0IHVzIHVzZSBgZ2F0aGVyYCBmdW5jdGlvbiBvZiB0aWR5ciBwYWNrYWdlIHRvIHJlc2hhcGUgdGhlIGRhdGEgYW5kIG9idGFpbiB0aGUgcmVxdWlyZWQgcmVzdWx0Lg0KDQoNCmBgYHtyLCBlY2hvPVRSVUV9DQoNCg0KVGlkeXQxIDwtIFdvcmxkSGVhbHRoICU+JSBnYXRoZXIoYG5ld19zcF9tMDE0YCxgbmV3X3NwX20xNTI0YCxgbmV3X3NwX20yNTM0YCxgbmV3X3NwX20zNTQ0YCwNCiAgICAgICAgICAgICAgICAgICAgICAgYG5ld19zcF9tNDU1NGAsYG5ld19zcF9tNTU2NGAsYG5ld19zcF9tNjVgLGBuZXdfc3BfZjAxNGAsDQogICAgICAgICAgICAgICAgICAgICAgIGBuZXdfc3BfZjE1MjRgLGBuZXdfc3BfZjI1MzRgLGBuZXdfc3BfZjM1NDRgLGBuZXdfc3BfZjQ1NTRgLA0KICAgICAgICAgICAgICAgICAgICAgICBgbmV3X3NwX2Y1NTY0YCxgbmV3X3NwX2Y2NWAsYG5ld19zbl9tMDE0YCxgbmV3X3NuX20xNTI0YCwNCiAgICAgICAgICAgICAgICAgICAgICAgYG5ld19zbl9tMjUzNGAsDQogICAgICAgICAgICAgICAgICAgICAgIGBuZXdfc25fbTM1NDRgLGBuZXdfc25fbTQ1NTRgLGBuZXdfc25fbTU1NjRgLGBuZXdfc25fbTY1YCwNCiAgICAgICAgICAgICAgICAgICAgICAgYG5ld19zbl9mMDE0YCxgbmV3X3NuX2YxNTI0YCxgbmV3X3NuX2YyNTM0YCxgbmV3X3NuX2YzNTQ0YCwNCiAgICAgICAgICAgICAgICAgICAgICAgYG5ld19zbl9mNDU1NGAsYG5ld19zbl9mNTU2NGAsYG5ld19zbl9mNjVgLGBuZXdfZXBfbTAxNGAsDQogICAgICAgICAgICAgICAgICAgICAgIGBuZXdfZXBfbTE1MjRgLGBuZXdfZXBfbTI1MzRgLGBuZXdfZXBfbTM1NDRgLGBuZXdfZXBfbTQ1NTRgLA0KICAgICAgICAgICAgICAgICAgICAgICBgbmV3X2VwX201NTY0YCxgbmV3X2VwX202NWAsYG5ld19lcF9mMDE0YCxgbmV3X2VwX2YxNTI0YCwNCiAgICAgICAgICAgICAgICAgICAgICAgYG5ld19lcF9mMjUzNGAsYG5ld19lcF9mMzU0NGAsYG5ld19lcF9mNDU1NGAsYG5ld19lcF9mNTU2NGAsDQogICAgICAgICAgICAgICAgICAgICAgIGBuZXdfZXBfZjY1YCxgbmV3X3JlbF9tMDE0YCxgbmV3X3JlbF9tMTUyNGAsYG5ld19yZWxfbTI1MzRgLA0KICAgICAgICAgICAgICAgICAgICAgICBgbmV3X3JlbF9tMzU0NGAsYG5ld19yZWxfbTQ1NTRgLGBuZXdfcmVsX201NTY0YCxgbmV3X3JlbF9tNjVgLA0KICAgICAgICAgICAgICAgICAgICAgICBgbmV3X3JlbF9mMDE0YCxgbmV3X3JlbF9mMTUyNGAsYG5ld19yZWxfZjI1MzRgLGBuZXdfcmVsX2YzNTQ0YCwNCiAgICAgICAgICAgICAgICAgICAgICAgYG5ld19yZWxfZjQ1NTRgLGBuZXdfcmVsX2Y1NTY0YCxgbmV3X3JlbF9mNjVgLGtleSA9ImNvZGUiLA0KICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSJ2YWx1ZSIpIA0KVGlkeXQxDQoNCg0KYGBgDQoNCg0KDQojIyBUYXNrIE5vIDI6DQoNClRoZSB0YXNrIGhlcmUgaXMgdG8gc2VwYXJhdGUgdGhlIGluZm9ybWF0aW9uIGhpZGRlbiBpbiBjb2x1bW4gYGNvZGVgIGFuZCBtYWtlIGl0IG1lYW5pbmdmdWwgYW5kIGVmZmljaWVudCB0byB1bmRlcnN0YW5kLiBUaGUgKipzZXBhcmF0ZSoqIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZG8gdGhlIHNhbWUuDQoNCg0KYGBge3J9DQoNCg0KVGlkeXQyIDwtIFRpZHl0MSAlPiUgIHNlcGFyYXRlKGNvZGUsIGludG8gPSBjKCJuZXciLCAidmFyIiwgInNleCIpLCBzZXA9Il8iKSAlPiUgc2VwYXJhdGUoc2V4LCBpbnRvID0gYygic2V4IiwgImFnZSIpLCBzZXA9MSkNClRpZHl0Mg0KDQoNCg0KDQpgYGANCg0KDQojIyBUYXNrIE5vIDM6DQoNClRoZSBjaG9yZSBvZiBzZXBhcmF0aW5nIGVhY2ggdmFyaWFibGUgaW50byBkaWZmZXJlbnQgY29sdW1ucyBjb3VsZCBiZSBhY2hpZXZlZCB1c2luZyB0aGUgYHNwcmVhZGAgZnVuY3Rpb24uIFRoZSBmdW5jdGlvbiB1c2VzICp2YXIqIGFzIHRoZSBrZXkgYW5kICp2YWx1ZSogYXMgdmFsdWUuICANCg0KDQpgYGB7cn0NCg0KDQoNClRpZHl0MyA8LSBzcHJlYWQoVGlkeXQyLCBrZXkgPSAndmFyJywgdmFsdWUgPSB2YWx1ZSkNClRpZHl0Mw0KDQoNCmBgYA0KDQoNCiMjIFRhc2sgTm8gNDogDQoNClRoZSB0d28gdmFyaWFibGVzIGBzZXhgIGFuZCBgYWdlYCBhcmUgZmFjdG9yaXNlZCBzZXBhcmF0ZWx5IGhlcmUgYW5kIG11dGF0ZSBmdW5jdGlvbiBpcyB1c2VkIGFjY29yZGluZ2x5LiBUaGlzIHRhc2sgdXNlcyB0aGUgKipjdXQqKiBmdW5jdGlvbiBpbiBvcmRlciB0byBicmVhayB0aGUgYWdlIGxhYmVscyBpbnRvIHJhbmdlcyBhcyBzcGVjaWZpZWQuDQoNCmBgYHtyfQ0KDQogDQpUaWR5dDRhIDwtIFRpZHl0MyAlPiUgbXV0YXRlKHNleD1mYWN0b3Ioc2V4LCBsZXZlbHMgPSBjKCJtIiwgImYiKSkpDQpUaWR5dDRhJGFnZSA8LSBhcy5udW1lcmljKFRpZHl0NGEkYWdlKSAjY29udmVydGluZyB0aGUgZGF0YSB0eXBlDQpUaWR5dDRhJGFnZSA8LSBjdXQoVGlkeXQ0YSRhZ2UsICNhcHBseWluZyBjdXQgZnVuY3Rpb24NCiAgICAgICAgICAgICAgIGJyZWFrcyA9IGMoMCwxNSwyNSwzNSw0NSw1NSw2NSxJbmYpLA0KICAgICAgICAgICAgICAgbGFiZWxzID0gYygiPDE1IiwiMTUtMjQiLCAiMjUtMzQiLCAiMzUtNDQiLCAiNDUtNTQiLCAiNTUtNjQiLCAiNjU+PSIpLA0KICAgICAgICAgICAgICAgcmlnaHQgPSBGQUxTRSkNCg0KVGlkeXQ0YiA8LSBUaWR5dDRhICU+JSBtdXRhdGUoYWdlPSBmYWN0b3IoYWdlLCBsZXZlbHM9IGMoIjwxNSIsIjE1LTI0IiwiMjUtMzQiLCIzNS00NCIsIjQ1LTU0IiwiNTUtNjQiLCI2NT49IikpKQ0KVGlkeXQ0Yg0KDQoNCg0KDQoNCmBgYA0KDQojIyBUYXNrIE5vIDU6IEZpbHRlcmluZyBhbmQgU2VsZWN0aW5nDQoNCg0KVGhlIHJlZHVuZGFudCBkYXRhIGlzIGVsaW1pbmF0ZWQgaW4gdHdvIHN0ZXBzIGFuZCBoZW5jZSB0aWR5IGRhdGEgaXMgbWFkZSByZWFkeS4gRnVydGhlciwgdGhlIGRhdGEgcmVsYXRlZCB0byBjb3VudHJpZXMgKipBdXN0cmFsaWEsIEJodXRhbiBhbmQgQnJhemlsKiogaGFzIGJlZW4gZmlsdGVyZWQuIFRoZSBmaWx0ZXJlZCBpbmZvcm1hdGlvbiBpcyBzYXZlZCBhcyBhIGRhdGEgZnJhbWUgd2l0aCB0aGUgbmFtZSBgV0hPX3N1YnNldGAuDQoNCg0KYGBge3J9DQoNCiANCg0KDQpUaWR5dDUgPC0gVGlkeXQ0YlssLTJdDQpUaWR5dDVhIDwtIFRpZHl0NVssLTRdIA0KDQpXSE9fc3Vic2V0IDwtIFRpZHl0NWEgJT4lIGZpbHRlcihjb3VudHJ5ID09ICJBdXN0cmFsaWEiIHwgY291bnRyeSA9PSAiQmh1dGFuIiB8IGNvdW50cnkgPT0gIkJyYXppbCIpDQpXSE9fc3Vic2V0DQoNCg0KYGBgDQoNCg0KDQojIyBJbXBvcnQgU3BlY2llcyAmIFN1cnZleXMgDQoNClRoZSBzcGVjaWVzIGFuZCBzdXJ2ZXlzIGRhdGFzZXQgaXMgaW1wb3J0ZWQgaGVyZSB1c2luZyB0aGUgcmVhZCBmdW5jdGlvbi4gDQpgYGB7cn0NCg0KDQpzcGVjaWVzIDwtIHJlYWQuY3N2KCJzcGVjaWVzLmNzdiIpDQpzdXJ2ZXlzIDwtIHJlYWQuY3N2KCJzdXJ2ZXlzLmNzdiIpDQoNCg0KDQpgYGANCg0KDQoNCg0KIyMgVGFzayBObyA2OiBKb2luaW5nIGRhdGFzZXRzICANCg0KVGhpcyBjb21wbGV0ZSBjaG9yZSBvZiBqb2luaW5nIGlzIGFjaGlldmVkIHVzaW5nIHRoZSBgbGVmdF9qb2luYCBvcGVyYXRvciBvbiBzdXJ2ZXlzIGZyb20gc3BlY2llcy4gVGhlIGNvbWJpbmVkIGRhdGEgZnJhbWUgd2hpY2ggaXMgcmVwcmVzZW50ZWQgYnkgYEpvaW50NmAgaXMgcmVuYW1lZCBhcyBgc3VydmV5c19jb21iaW5lZGAuDQoNCg0KDQpgYGB7cn0NCg0KDQpKb2ludDYgPC1zcGVjaWVzICU+JSBsZWZ0X2pvaW4oc3VydmV5cywgYnkgPSAic3BlY2llc19pZCIpDQpzdXJ2ZXlzX2NvbWJpbmVkIDwtIEpvaW50Ng0Kc3VydmV5c19jb21iaW5lZA0KDQoNCg0KDQpgYGANCg0KDQoNCiMjIFRhc2sgTm8gNzoNCg0KVGhlIG1lYW4gd2VpZ2h0IGFuZCBoaW5kIGZvb3QgbGVuZ3RoIG9mIG9uZSBwYXJ0aWN1bGFyIHNwZWNpZXMgaSxlICppbnRlcm1lZGl1cyBhY3Jvc3MgZGlmZmVyZW50IG1vbnRocyBleGNsdXNpdmUgb2YgbWlzc2luZyB2YWx1ZXMgaXMgZXh0cmFjdGVkIGluIHRoaXMgdGFzay4NCg0KYGBge3J9DQoNCiANCg0KbWVhbndlaWdodCA8LSBzdXJ2ZXlzX2NvbWJpbmVkICU+JSBzZWxlY3QobW9udGgsc3BlY2llcywgd2VpZ2h0KSAlPiUgZmlsdGVyKHNwZWNpZXMgPT0gImludGVybWVkaXVzIikgJT4lIGdyb3VwX2J5KG1vbnRoKQ0KYXZnd2VpZ2h0IDwtIG1lYW53ZWlnaHQgJT4lIG11dGF0ZShtZWFuKHdlaWdodCwgbmEucm0gPSBUUlVFKSkgJT4lIGdyb3VwX2J5KG1vbnRoKQ0KYXZnd2VpZ2h0DQphdmd3ZWlnaHQgPC0gYXZnd2VpZ2h0WywtYygyLDMpXSAjIHJlbW92ZXMgcmVkdW5kYW50IGluZm9ybWF0aW9uIG9mIHNwZWNpZXMgYW5kIHdlaWdodA0KbmFtZXMoYXZnd2VpZ2h0KSA8LSBjKCJtb250aCIsICJhdmdfd2VpZ2h0IikgI25hbWVzIHRoZSBjb2x1bW5zDQphdmd3ZWlnaHQNCg0KbWVhbmhmbCA8LSBzdXJ2ZXlzX2NvbWJpbmVkICU+JSBzZWxlY3QobW9udGgsIHNwZWNpZXMsIGhpbmRmb290X2xlbmd0aCkgJT4lIGZpbHRlcihzcGVjaWVzID09ICJpbnRlcm1lZGl1cyIpICU+JSBncm91cF9ieShtb250aCkNCmF2Z2hmbCA8LSBtZWFuaGZsICU+JSBtdXRhdGUobWVhbihoaW5kZm9vdF9sZW5ndGgsIG5hLnJtID0gVFJVRSkpICU+JSBncm91cF9ieShtb250aCkNCmF2Z2hmbA0KYXZnaGZsIDwtIGF2Z2hmbFssLWMoMiwzKV0NCm5hbWVzKGF2Z2hmbCkgPC0gYygibW9udGgiLCAiYXZnX2hpbmRmb290X2xlbmd0aCIpDQphdmdoZmwNCg0KQ2FsY3Q3IDwtIGNiaW5kKGF2Z3dlaWdodCxhdmdoZmwpICNhcHBlbmRzIHRoZSB0d28gZGF0YSBmcmFtZXMNCkNhbGN0NyA8LSBDYWxjdDdbLC1jKDMpXSAjcmVtb3ZlcyByZWR1bmRhbnQgZGF0YSBvZiBtb250aHMNCkNhbGN0NyA8LSB1bmlxdWUoQ2FsY3Q3KSAja2VlcHMgdGhlIGRpc3RpbnQgaW5mb3JtYXRpb24NCkNhbGN0Nw0KDQoNCg0KYGBgDQoNCg0KDQojIyBUYXNrIE5vIDg6IA0KDQpUaGUgZGF0YSBmcmFtZSBpcyByZW5hbWVkIGFzIGBzdXJ2ZXlzX2NvbWJpbmVkX3llYXJgIGFuZCB0aGUgbWlzc2luZyB3ZWlnaHRzIGFyZSByZXBsYWNlZCB3aXRoIHRoZSBtZWFuIHZhbHVlcy4gQWxsIHRoZXNlIHZhbHVlcyBhcmUgZ3JvdXBlZCBieSBzcGVjaWVzLg0KDQoNCg0KYGBge3J9DQoNCg0KDQpNVnQ4YSA8LSBzdXJ2ZXlzX2NvbWJpbmVkICU+JSBzZWxlY3QoeWVhciwgd2VpZ2h0LCBzcGVjaWVzKSAlPiUgZmlsdGVyKHllYXIgPT0gMTk4MSkgJT4lIGdyb3VwX2J5KHNwZWNpZXMpDQpzdXJ2ZXlzX2NvbWJpbmVkX3llYXIgPC0gTVZ0OGENCnN1cnZleXNfY29tYmluZWRfeWVhciAlPiUgc2VsZWN0KHdlaWdodCkgJT4lIGdyb3VwX2J5KHNwZWNpZXMpDQpzdW0oaXMubmEoc3VydmV5c19jb21iaW5lZF95ZWFyJHdlaWdodCkpICNzdW1zIGFsbCB0aGUgTkEncyBpbiB3ZWlnaHQgY29sdW1uDQp3ZWlnaHQgPC0gaW1wdXRlKHN1cnZleXNfY29tYmluZWRfeWVhciR3ZWlnaHQsIGZ1biA9IG1lYW4pDQpzdXJ2ZXlzX3dlaWdodF9pbXB1dGVkIDwtIHdlaWdodA0KaGVhZChzdXJ2ZXlzX3dlaWdodF9pbXB1dGVkLDUwMCkNCg0KDQoNCmBgYA0KDQoNCg0KDQoNCiMjIFRhc2sgTm8gOTogDQoNClRoaXMgc2VjdGlvbiBvZiB0aGUgcmVwb3J0IGNoZWNrcyBmb3Igc3BlY2lhbCBhbmQgaW5jb25zaXRlbnQgdmFsdWVzIGluIHRoZSBpbXB1dGVkIGRhdGEuIFRoZXJlIGV4aXN0IG5vIHNwZWNpYWwgb3IgaW5jb25zaXN0ZW50IHZhbHVlcy4gSGVuY2UgZG9lc250IHJlcXVpcmUgYW55IGZ1cnRoZXIgcmVmaW5lbWVudC4NCmBgYHtyfQ0KDQpDaGVja19zcGxfdmFscyA8LSBzdXJ2ZXlzX3dlaWdodF9pbXB1dGVkICU+JSBpcy5maW5pdGUoKSAlPiUgaXMuaW5maW5pdGUoKSAlPiUgaXMubmFuKCkgI2NoZWNrc3NwZWNpYWwgdmFsdWVzDQpoZWFkKENoZWNrX3NwbF92YWxzLDI1MCkNCg0Kc3VydmV5c3BvcyA8LSAoc3VydmV5c193ZWlnaHRfaW1wdXRlZD49MCkgI2NoZWNrcyBmb3IgaW5jb25zaXN0ZW5jaWVzDQpoZWFkKHN1cnZleXNwb3MsMjUwKQ0KDQpgYGANCg0KDQoNCg0KIyMgVGFzayBObyAxMDogDQoNClRoaXMgc2VjdGlvbiBvZiByZXBvcnQgY2hlY2tzIGZvciB0aGUgb3V0bGllcnMgb2YgaGluZGZvb3QgbGVuZ3RoLiBUaGUgZXhpc3Rpbmcgb3V0bGllcnMgYXJlIGhhbmRsZWQgYnkgZGVsZXRpbmcgdGhlbS4NCg0KVGhlIGRlbGV0aW5nIG1ldGhvZCBpbnZvbHZlcyB0aGUgY2FsY3VsYXRpb24gb2Ygei1zY29yZS4gVW5mb3J0dW5hdGVseSwgdGhlIGJhc2UgUi1mdW5jdGlvbiBkb2VzbnQgc3VwcG9ydCB0aGUgc2FtZS4gSGVuY2UsIGEgcGFja2FnZSByZWxhdGVkIHRvIGl0IGlzIGluc3RhbGxlZCBhbmQgei1zY29yZSBpcyBjYWxjdWxhdGVkLg0KIA0KDQpgYGB7cn0NCg0KaW5zdGFsbC5wYWNrYWdlcyhjKCJSLmJhc2ljIiksIGNvbnRyaWJ1cmw9Imh0dHA6Ly93d3cuYnJhanUuY29tL1IvcmVwb3MvIikgI3pzY29yZXBhY2thZ2UNCmxpYnJhcnkoUi5iYXNpYykNCg0Kc3VydmV5c19jb21iaW5lZCRoaW5kZm9vdF9sZW5ndGgNCnN1cnZleXNfY29tYmluZWQkaGluZGZvb3RfbGVuZ3RoICU+JSBib3hwbG90KCkgI2NoZWNrcyBmb3IgdGhlIG91dGxpZXJzDQoNCnouc2NyIDwtIHpzY29yZShzdXJ2ZXlzX2NvbWJpbmVkJGhpbmRmb290X2xlbmd0aCxuYS5ybSA9IGdldE9wdGlvbigibmEucm0iLCBUUlVFKSkNCg0KaGZsX2NsZWFuPC0gc3VydmV5c19jb21iaW5lZCRoaW5kZm9vdF9sZW5ndGhbIC0gd2hpY2goIGFicyh6LnNjcikgPjMgKV0NCmhlYWQoaGZsX2NsZWFuLCA1MDApDQoNCmJveHBsb3QoaGZsX2NsZWFuKSAjcmUtY2hlY2tpbmcgZm9yIG91dGxpZXJzDQoNCmBgYA0KDQoNCg0KDQo8YnI+DQo8YnI+DQo=