1 Loading packages


library(ggplot2);library(mgcv);library(itsadug);library(tidyverse);library(gganimate); library(doParallel)
Le chargement a nécessité le package : nlme
This is mgcv 1.8-39. For overview type 'help("mgcv-package")'.
Le chargement a nécessité le package : plotfunctions

Attachement du package : ‘plotfunctions’

L'objet suivant est masqué depuis ‘package:ggplot2’:

    alpha

Loaded package itsadug 2.4 (see 'help("itsadug")' ).
Registered S3 methods overwritten by 'dbplyr':
  method         from
  print.tbl_lazy     
  print.tbl_sql      
── Attaching packages ────────────────────────────────────────────────── tidyverse 1.3.1 ──
✓ tibble  3.1.6     ✓ dplyr   1.0.8
✓ tidyr   1.2.0     ✓ stringr 1.4.0
✓ readr   2.1.2     ✓ forcats 0.5.1
✓ purrr   0.3.4     
── Conflicts ───────────────────────────────────────────────────── tidyverse_conflicts() ──
x plotfunctions::alpha() masks ggplot2::alpha()
x dplyr::collapse()      masks nlme::collapse()
x dplyr::filter()        masks stats::filter()
x dplyr::lag()           masks stats::lag()
No renderer backend detected. gganimate will default to writing frames to separate files
Consider installing:
- the `gifski` package for gif output
- the `av` package for video output
and restarting the R session
Le chargement a nécessité le package : foreach

Attachement du package : ‘foreach’

Les objets suivants sont masqués depuis ‘package:purrr’:

    accumulate, when

Le chargement a nécessité le package : iterators
Le chargement a nécessité le package : parallel

2 Demo Linear Model vs GAM

In this demo, data obtained from a Jordanian Arabic speaker producing the word /du:d/ “worm” is used. F2 frequencies obtained at 5 ms interval from onset to midpoint of the vowel are used. Let’s plot the F2 frequencies by interval number. The second plot displays a linear regression line superimposed on the plot. As can be seen, the linear regression line is not able to cope with the curviness of the data, and is unable to cope with it. The third plot superimposes a spline obtained from a GAM model.

demoGAMProd <- read.csv("dataProd_duud.csv")
head(demoGAMProd)
ggplot.demo1 <- ggplot(demoGAMProd,aes(x=IntervalsN,y=F2))+
                geom_point()+theme_bw(base_size = 20)+coord_cartesian(ylim=c(600,1800))+
                labs(y = "F2 Hz", x = "Intervals number")
ggplot.demo1


ggplot.demo2 <- ggplot(demoGAMProd,aes(x=IntervalsN,y=F2))+
  geom_point()+theme_bw(base_size = 20)+coord_cartesian(ylim=c(600,1800))+
  labs(y = "F2 Hz", x = "Intervals number")+geom_smooth(method = lm, se=F)

ggplot.demo2
`geom_smooth()` using formula 'y ~ x'

ggplot.demo3 <- ggplot(demoGAMProd,aes(x=IntervalsN,y=predict(bam(F2 ~ s(IntervalsN, bs="cr"), data = demoGAMProd))))+
  geom_point()+theme_bw(base_size = 20)+coord_cartesian(ylim=c(600,1800))+
  labs(y = "F2 Hz", x = "Intervals number")+geom_smooth(method = lm, formula = y ~ splines::bs(x, 3),se=F)

ggplot.demo3

3 Actual data analyses

This data is obtained from a single speaker producing various consonants in the frame VCV, with V = symmetric /i: a: u:/ (=vowel) and C is one of 17 consonants put into five contexts “plain”, “velar”, “uvular”, “pharyngealised” and “pharyngeal” (=context). The data is from Ultrasound Tongue Imaging. Tongue contours were obtained at the consonant onset, midpoint and offset (=time). A total of 51 words (=word) were obtained and these were repeated 3 times. Tongue splines were extracted with X-Y coordinates (=y outcome). 42 Fan positions (=Fan) were extracted and these are used as a normalisation between contexts. The outcome is y, the predictors are Fan, time, context and vowel, and the random factor is word.

3.1 Creating new variables

Before running the actual GAM model on the data, we need to:

  1. Create two new variables for context and vowel. These will be “ordered” predictors and sum coded
  2. To run an Auto-Regressive Model, we need to find the autocorrelation in the dataframe:
  • We rearrange the data by time, ID, and Fan
  • We add a new variable “start” that marks the start of Fan
pharDF <- read.csv("resultsFull.c_NoRelNoz.csv")
str(pharDF)
'data.frame':   18900 obs. of  23 variables:
 $ X.1                        : int  1 2 3 4 5 6 7 8 9 10 ...
 $ ID                         : int  1 2 3 7 8 9 10 11 12 13 ...
 $ Client.Surname             : chr  "Sara" "Sara" "Sara" "Sara" ...
 $ Time.of.sample.in.recording: num  3.84 5.37 2.37 5.3 2.26 ...
 $ Prompt                     : chr  "2aataa.... 2aataa.... 2aataa.... 2aattaa.... 2aattaa.... 2aattaa" "2aataa.... 2aataa.... 2aataa.... 2aattaa.... 2aattaa.... 2aattaa" "2aataa.... 2aataa.... 2aataa.... 2aattaa.... 2aattaa.... 2aattaa" "2aataa.... 2aataa.... 2aataa.... 2aattaa.... 2aattaa.... 2aattaa" ...
 $ word                       : chr  "2aataa" "2aataa" "2aataa" "2aataa" ...
 $ context                    : chr  "plain" "plain" "plain" "plain" ...
 $ consonant                  : chr  "t" "t" "t" "t" ...
 $ consType                   : chr  "plosive" "plosive" "plosive" "plosive" ...
 $ vowel                      : chr  "aa" "aa" "aa" "aa" ...
 $ labelNew                   : chr  "CL_Mid" "CL_Mid" "CL_Mid" "CL_Ons" ...
 $ label                      : chr  "CL_Mid" "CL_Mid" "CL_Mid" "CL_Ons" ...
 $ repetition                 : int  2 3 1 3 1 2 3 1 2 2 ...
 $ Fan                        : int  1 1 1 1 1 1 1 1 1 1 ...
 $ x                          : num  18.8 18.9 21.5 19.1 17.7 ...
 $ y                          : num  15.6 15.6 14.1 15.5 16.3 ...
 $ vowel2                     : chr  "a<U+02D0>" "a<U+02D0>" "a<U+02D0>" "a<U+02D0>" ...
 $ labelNew2                  : int  2 2 2 1 1 1 3 3 3 2 ...
 $ context.ord                : chr  "plain" "plain" "plain" "plain" ...
 $ vowel.ord                  : chr  "aa" "aa" "aa" "aa" ...
 $ fan_line                   : int  1 1 1 1 1 1 1 1 1 1 ...
 $ X                          : num  18.8 18.9 21.5 19.1 17.7 ...
 $ Y                          : num  15.6 15.6 14.1 15.5 16.3 ...
levels(pharDF$context)
NULL
pharDF$context <- factor(pharDF$context, 
                                levels = c("plain","velar","uvular","pharyngealised","pharyngeal"))
levels(pharDF$vowel)
NULL
pharDF$vowel <- factor(pharDF$vowel, 
                              levels = c("ii","aa","uu"))
levels(pharDF$labelNew)
NULL
pharDF$labelNew <- factor(pharDF$labelNew, 
                                 levels = c("CL_Ons","CL_Mid","CL_Off"))


pharDF$ID <- as.numeric(pharDF$ID)
pharDF$Fan <- as.numeric(pharDF$Fan)
pharDF$labelNew2 <- as.numeric(pharDF$labelNew2)
pharDF$time <- pharDF$labelNew2
pharDF$word <- as.factor(pharDF$word)



pharDF$context.ord <- as.ordered(pharDF$context)
contrasts(pharDF$context.ord) <- "contr.treatment"

pharDF$vowel.ord <- as.ordered(pharDF$vowel)
contrasts(pharDF$vowel.ord) <- "contr.treatment"

## to find autocorrelation in the data. Rearrange dataframe and add a variable "start" to indicate 
## when Fan == 1
pharDF <- arrange(pharDF, time, ID, Fan)
pharDF$start <- pharDF$Fan==1
ncores = 10

3.2 Visualising the data

Before running anything, we start by visualising the data and use an animated figure

pl <- ggplot(pharDF, aes(x=Fan, y=y, col=context, frame=time)) +
  facet_grid(vowel ~ context) +
  geom_line(aes(group=ID))+theme_bw()+
transition_manual(time)
animate(pl, width=800, height=300)
nframes and fps adjusted to match transition

Rendering [=================>-------------------------------------] at 2.7 fps ~ eta:  1s
Rendering [====================================>------------------] at 2.1 fps ~ eta:  0s
Rendering [=======================================================] at 2.2 fps ~ eta:  0s
                                                                                         
[1] "./gganim_plot0001.png" "./gganim_plot0002.png" "./gganim_plot0003.png"
attr(,"frame_vars")

3.3 Running our first GAM model

This is our first GAM model. This will be used to find the level of autocorrelation in the data. Our model has double non-linear predictors (fan and time), two factor predictors (context and vowel) and one random effect (word). Interactions between fan and time are used. In addition, by context*vowel interaction is added to account for the two-way interaction with respect to each of fan and time. The function itsadug::acf_resid is used, and we display the level of autocorrelation for each of the “Fan”, the “time”, the “context”, the “vowel” finally the “word”


mdl.sys.time1 <- system.time(phar.gam.noAR <- bam(y ~ context.ord*vowel.ord +
                        ## 1d smooths
                        s(Fan, bs="cr", k=10) +
                        s(time, bs="cr", k=3) +
                        ## 1d smooths * factors
                        s(Fan, k=10, bs="cr", by=context.ord) +
                        s(Fan, k=10, bs="cr", by=vowel.ord) +
                        s(Fan, k=10, bs="cr", by=interaction(context.ord, vowel.ord)) +
                        s(time, k=3, bs="cr", by=context.ord) +
                        s(time, k=3, bs="cr", by=vowel.ord) +
                        s(time, k=3, bs="cr", by=interaction(context.ord, vowel.ord)) +
                        ## 2d smooths
                        ti(Fan, time, bs="cr", k=c(10,3))+
                        ## 2d smooths * factors
                        ti(Fan, time, bs="cr", k=c(10,3), by=context.ord)+
                        ti(Fan, time, bs="cr", k=c(10,3), by=vowel.ord)+
                        ti(Fan, time, bs="cr", k=c(10,3),by=interaction(context.ord, vowel.ord)) +
                        ## random smooths by word
                        s(Fan, word, bs="fs", k=10, m=1, xt=list(bs = "tp")) +
                        s(time, word, bs="fs", k=3, m=1, xt=list(bs = "tp")),
                        data=pharDF, nthreads = ncores, method="fREML", discrete = TRUE))
mdl.sys.time1
utilisateur     système      écoulé 
     85.518       0.460      23.230 

3.3.1 Summary and Rho

summary(phar.gam.noAR)

Family: gaussian 
Link function: identity 

Formula:
y ~ context.ord * vowel.ord + s(Fan, bs = "cr", k = 10) + s(time, 
    bs = "cr", k = 3) + s(Fan, k = 10, bs = "cr", by = context.ord) + 
    s(Fan, k = 10, bs = "cr", by = vowel.ord) + s(Fan, k = 10, 
    bs = "cr", by = interaction(context.ord, vowel.ord)) + s(time, 
    k = 3, bs = "cr", by = context.ord) + s(time, k = 3, bs = "cr", 
    by = vowel.ord) + s(time, k = 3, bs = "cr", by = interaction(context.ord, 
    vowel.ord)) + ti(Fan, time, bs = "cr", k = c(10, 3)) + ti(Fan, 
    time, bs = "cr", k = c(10, 3), by = context.ord) + ti(Fan, 
    time, bs = "cr", k = c(10, 3), by = vowel.ord) + ti(Fan, 
    time, bs = "cr", k = c(10, 3), by = interaction(context.ord, 
        vowel.ord)) + s(Fan, word, bs = "fs", k = 10, m = 1, 
    xt = list(bs = "tp")) + s(time, word, bs = "fs", k = 3, m = 1, 
    xt = list(bs = "tp"))

Parametric coefficients:
                                      Estimate Std. Error t value Pr(>|t|)    
(Intercept)                            35.7762     0.3566 100.340  < 2e-16 ***
context.ordvelar                        1.8198     0.5042   3.609 0.000308 ***
context.orduvular                       2.4191     0.7973   3.034 0.002415 ** 
context.ordpharyngealised               0.8235     0.4784   1.721 0.085191 .  
context.ordpharyngeal                   0.5458     0.6176   0.884 0.376842    
vowel.ordaa                             0.6929     0.4784   1.449 0.147483    
vowel.orduu                             0.9109     0.4784   1.904 0.056902 .  
context.ordvelar:vowel.ordaa           -0.6105     0.6950  -0.878 0.379757    
context.orduvular:vowel.ordaa          -2.7389     1.1162  -2.454 0.014142 *  
context.ordpharyngealised:vowel.ordaa  -1.2107     0.6574  -1.841 0.065572 .  
context.ordpharyngeal:vowel.ordaa       0.6388     0.8587   0.744 0.456955    
context.ordvelar:vowel.orduu           -2.0721     0.6950  -2.981 0.002875 ** 
context.orduvular:vowel.orduu          -3.1064     1.1162  -2.783 0.005390 ** 
context.ordpharyngealised:vowel.orduu  -1.7974     0.6574  -2.734 0.006266 ** 
context.ordpharyngeal:vowel.orduu      -0.6710     0.8587  -0.781 0.434568    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Approximate significance of smooth terms:
                                                                        edf    Ref.df
s(Fan)                                                            7.660e+00 7.704e+00
s(time)                                                           2.394e-04 2.554e-04
s(Fan):context.ordvelar                                           6.639e+00 6.821e+00
s(Fan):context.orduvular                                          6.694e+00 6.905e+00
s(Fan):context.ordpharyngealised                                  7.574e+00 7.651e+00
s(Fan):context.ordpharyngeal                                      2.753e-04 3.002e-04
s(Fan):vowel.ordaa                                                6.945e+00 7.093e+00
s(Fan):vowel.orduu                                                7.107e+00 7.251e+00
s(Fan):interaction(context.ord, vowel.ord)plain.ii                6.900e+00 7.166e+00
s(Fan):interaction(context.ord, vowel.ord)velar.ii                1.001e+00 1.001e+00
s(Fan):interaction(context.ord, vowel.ord)uvular.ii               1.000e+00 1.000e+00
s(Fan):interaction(context.ord, vowel.ord)pharyngealised.ii       1.000e+00 1.000e+00
s(Fan):interaction(context.ord, vowel.ord)pharyngeal.ii           6.652e+00 6.946e+00
s(Fan):interaction(context.ord, vowel.ord)plain.aa                4.221e+00 4.458e+00
s(Fan):interaction(context.ord, vowel.ord)velar.aa                3.245e+00 3.416e+00
s(Fan):interaction(context.ord, vowel.ord)uvular.aa               1.001e+00 1.001e+00
s(Fan):interaction(context.ord, vowel.ord)pharyngealised.aa       6.391e+00 6.683e+00
s(Fan):interaction(context.ord, vowel.ord)pharyngeal.aa           1.000e+00 1.000e+00
s(Fan):interaction(context.ord, vowel.ord)plain.uu                1.000e+00 1.000e+00
s(Fan):interaction(context.ord, vowel.ord)velar.uu                7.436e+00 7.671e+00
s(Fan):interaction(context.ord, vowel.ord)uvular.uu               5.422e+00 5.722e+00
s(Fan):interaction(context.ord, vowel.ord)pharyngealised.uu       1.000e+00 1.000e+00
s(Fan):interaction(context.ord, vowel.ord)pharyngeal.uu           4.064e+00 4.307e+00
s(time):context.ordvelar                                          8.318e-01 8.432e-01
s(time):context.orduvular                                         5.462e-04 5.894e-04
s(time):context.ordpharyngealised                                 6.189e-04 6.586e-04
s(time):context.ordpharyngeal                                     6.224e-04 6.734e-04
s(time):vowel.ordaa                                               3.347e-04 3.594e-04
s(time):vowel.orduu                                               2.055e-04 2.185e-04
s(time):interaction(context.ord, vowel.ord)plain.ii               1.784e+00 1.798e+00
s(time):interaction(context.ord, vowel.ord)velar.ii               1.000e+00 1.000e+00
s(time):interaction(context.ord, vowel.ord)uvular.ii              1.678e+00 1.697e+00
s(time):interaction(context.ord, vowel.ord)pharyngealised.ii      1.000e+00 1.000e+00
s(time):interaction(context.ord, vowel.ord)pharyngeal.ii          1.853e+00 1.864e+00
s(time):interaction(context.ord, vowel.ord)plain.aa               1.000e+00 1.000e+00
s(time):interaction(context.ord, vowel.ord)velar.aa               1.805e+00 1.818e+00
s(time):interaction(context.ord, vowel.ord)uvular.aa              1.001e+00 1.001e+00
s(time):interaction(context.ord, vowel.ord)pharyngealised.aa      1.559e+00 1.581e+00
s(time):interaction(context.ord, vowel.ord)pharyngeal.aa          1.000e+00 1.000e+00
s(time):interaction(context.ord, vowel.ord)plain.uu               1.474e+00 1.496e+00
s(time):interaction(context.ord, vowel.ord)velar.uu               1.000e+00 1.000e+00
s(time):interaction(context.ord, vowel.ord)uvular.uu              1.000e+00 1.000e+00
s(time):interaction(context.ord, vowel.ord)pharyngealised.uu      1.645e+00 1.665e+00
s(time):interaction(context.ord, vowel.ord)pharyngeal.uu          1.000e+00 1.000e+00
ti(time,Fan)                                                      8.224e+00 9.815e+00
ti(time,Fan):context.ordvelar                                     9.022e+00 1.126e+01
ti(time,Fan):context.orduvular                                    1.360e+01 1.549e+01
ti(time,Fan):context.ordpharyngealised                            8.357e+00 1.052e+01
ti(time,Fan):context.ordpharyngeal                                6.037e+00 7.684e+00
ti(time,Fan):vowel.ordaa                                          1.304e+01 1.466e+01
ti(time,Fan):vowel.orduu                                          1.247e+01 1.438e+01
ti(time,Fan):interaction(context.ord, vowel.ord)plain.ii          7.203e+00 8.133e+00
ti(time,Fan):interaction(context.ord, vowel.ord)velar.ii          1.933e+00 1.972e+00
ti(time,Fan):interaction(context.ord, vowel.ord)uvular.ii         1.871e+00 1.967e+00
ti(time,Fan):interaction(context.ord, vowel.ord)pharyngealised.ii 1.533e+01 1.686e+01
ti(time,Fan):interaction(context.ord, vowel.ord)pharyngeal.ii     1.114e+01 1.317e+01
ti(time,Fan):interaction(context.ord, vowel.ord)plain.aa          1.062e+01 1.277e+01
ti(time,Fan):interaction(context.ord, vowel.ord)velar.aa          1.355e+01 1.580e+01
ti(time,Fan):interaction(context.ord, vowel.ord)uvular.aa         1.000e+00 1.001e+00
ti(time,Fan):interaction(context.ord, vowel.ord)pharyngealised.aa 1.010e+00 1.013e+00
ti(time,Fan):interaction(context.ord, vowel.ord)pharyngeal.aa     4.450e+00 5.272e+00
ti(time,Fan):interaction(context.ord, vowel.ord)plain.uu          9.520e+00 1.153e+01
ti(time,Fan):interaction(context.ord, vowel.ord)velar.uu          4.587e+00 5.521e+00
ti(time,Fan):interaction(context.ord, vowel.ord)uvular.uu         8.803e+00 1.102e+01
ti(time,Fan):interaction(context.ord, vowel.ord)pharyngealised.uu 1.001e+00 1.001e+00
ti(time,Fan):interaction(context.ord, vowel.ord)pharyngeal.uu     1.303e+01 1.513e+01
s(Fan,word)                                                       3.433e+02 4.850e+02
s(time,word)                                                      9.173e+01 1.200e+02
                                                                        F  p-value    
s(Fan)                                                            109.757  < 2e-16 ***
s(time)                                                             0.002 0.999412    
s(Fan):context.ordvelar                                             7.719  < 2e-16 ***
s(Fan):context.orduvular                                           10.417  < 2e-16 ***
s(Fan):context.ordpharyngealised                                   32.030  < 2e-16 ***
s(Fan):context.ordpharyngeal                                        0.061 0.996573    
s(Fan):vowel.ordaa                                                 11.843  < 2e-16 ***
s(Fan):vowel.orduu                                                 16.429  < 2e-16 ***
s(Fan):interaction(context.ord, vowel.ord)plain.ii                 42.972  < 2e-16 ***
s(Fan):interaction(context.ord, vowel.ord)velar.ii                215.288  < 2e-16 ***
s(Fan):interaction(context.ord, vowel.ord)uvular.ii                38.402  < 2e-16 ***
s(Fan):interaction(context.ord, vowel.ord)pharyngealised.ii       164.512  < 2e-16 ***
s(Fan):interaction(context.ord, vowel.ord)pharyngeal.ii            14.980  < 2e-16 ***
s(Fan):interaction(context.ord, vowel.ord)plain.aa                 28.096  < 2e-16 ***
s(Fan):interaction(context.ord, vowel.ord)velar.aa                 29.473  < 2e-16 ***
s(Fan):interaction(context.ord, vowel.ord)uvular.aa                18.151 2.07e-05 ***
s(Fan):interaction(context.ord, vowel.ord)pharyngealised.aa        19.330  < 2e-16 ***
s(Fan):interaction(context.ord, vowel.ord)pharyngeal.aa            43.132  < 2e-16 ***
s(Fan):interaction(context.ord, vowel.ord)plain.uu                156.421  < 2e-16 ***
s(Fan):interaction(context.ord, vowel.ord)velar.uu                 23.373  < 2e-16 ***
s(Fan):interaction(context.ord, vowel.ord)uvular.uu                 6.384 2.37e-06 ***
s(Fan):interaction(context.ord, vowel.ord)pharyngealised.uu       127.985  < 2e-16 ***
s(Fan):interaction(context.ord, vowel.ord)pharyngeal.uu            10.190  < 2e-16 ***
s(time):context.ordvelar                                            5.863 0.026195 *  
s(time):context.orduvular                                           0.391 0.987883    
s(time):context.ordpharyngealised                                   0.457 0.986153    
s(time):context.ordpharyngeal                                       0.631 0.983553    
s(time):vowel.ordaa                                                 0.124 0.994670    
s(time):vowel.orduu                                                 0.161 0.995269    
s(time):interaction(context.ord, vowel.ord)plain.ii                 9.361 0.003289 ** 
s(time):interaction(context.ord, vowel.ord)velar.ii                 0.441 0.506426    
s(time):interaction(context.ord, vowel.ord)uvular.ii                0.757 0.389453    
s(time):interaction(context.ord, vowel.ord)pharyngealised.ii        2.293 0.129933    
s(time):interaction(context.ord, vowel.ord)pharyngeal.ii            2.669 0.070209 .  
s(time):interaction(context.ord, vowel.ord)plain.aa                 0.000 0.998328    
s(time):interaction(context.ord, vowel.ord)velar.aa                 1.832 0.156321    
s(time):interaction(context.ord, vowel.ord)uvular.aa                0.000 0.996139    
s(time):interaction(context.ord, vowel.ord)pharyngealised.aa        1.713 0.332576    
s(time):interaction(context.ord, vowel.ord)pharyngeal.aa            0.011 0.917418    
s(time):interaction(context.ord, vowel.ord)plain.uu                 7.232 0.010802 *  
s(time):interaction(context.ord, vowel.ord)velar.uu                 0.095 0.758498    
s(time):interaction(context.ord, vowel.ord)uvular.uu                0.016 0.901081    
s(time):interaction(context.ord, vowel.ord)pharyngealised.uu        3.424 0.121664    
s(time):interaction(context.ord, vowel.ord)pharyngeal.uu            0.101 0.750587    
ti(time,Fan)                                                        3.008 0.000751 ***
ti(time,Fan):context.ordvelar                                       2.533 0.004742 ** 
ti(time,Fan):context.orduvular                                     14.433  < 2e-16 ***
ti(time,Fan):context.ordpharyngealised                              1.260 0.401719    
ti(time,Fan):context.ordpharyngeal                                  1.841 0.097808 .  
ti(time,Fan):vowel.ordaa                                            9.638  < 2e-16 ***
ti(time,Fan):vowel.orduu                                            5.402  < 2e-16 ***
ti(time,Fan):interaction(context.ord, vowel.ord)plain.ii            9.158  < 2e-16 ***
ti(time,Fan):interaction(context.ord, vowel.ord)velar.ii            8.937 0.000385 ***
ti(time,Fan):interaction(context.ord, vowel.ord)uvular.ii           6.314 0.004897 ** 
ti(time,Fan):interaction(context.ord, vowel.ord)pharyngealised.ii  47.129  < 2e-16 ***
ti(time,Fan):interaction(context.ord, vowel.ord)pharyngeal.ii      15.427  < 2e-16 ***
ti(time,Fan):interaction(context.ord, vowel.ord)plain.aa            5.973  < 2e-16 ***
ti(time,Fan):interaction(context.ord, vowel.ord)velar.aa           15.279  < 2e-16 ***
ti(time,Fan):interaction(context.ord, vowel.ord)uvular.aa          18.581 1.64e-05 ***
ti(time,Fan):interaction(context.ord, vowel.ord)pharyngealised.aa 134.167  < 2e-16 ***
ti(time,Fan):interaction(context.ord, vowel.ord)pharyngeal.aa       3.090 0.007342 ** 
ti(time,Fan):interaction(context.ord, vowel.ord)plain.uu            9.768  < 2e-16 ***
ti(time,Fan):interaction(context.ord, vowel.ord)velar.uu            7.195 3.01e-06 ***
ti(time,Fan):interaction(context.ord, vowel.ord)uvular.uu           3.492 6.80e-05 ***
ti(time,Fan):interaction(context.ord, vowel.ord)pharyngealised.uu   6.160 0.013055 *  
ti(time,Fan):interaction(context.ord, vowel.ord)pharyngeal.uu      16.508  < 2e-16 ***
s(Fan,word)                                                        30.757  < 2e-16 ***
s(time,word)                                                       11.488  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Rank: 1282/1303
R-sq.(adj) =  0.986   Deviance explained = 98.6%
fREML =  35486  Scale est. = 2.2096    n = 18900
rho_est <- start_value_rho(phar.gam.noAR)
rho_est
[1] 0.9416749

3.3.2 ACF first GAM

The five plots below show the autocorrelation in the residuals. As can be see, the first plot using Fan, has a complete zero correlations. It is possible that because the various fan points obtained alongside the tongue contour are already correlated with each other, and hence the correlations between fan 1 to 2, 2 to 3, 41 to 42 are already taken into account by the model. The four additional plots show the autocorrelation in the residuals for time, context, vowel and word. All of these predictors are showing autocorrelations between their successive data points. This means that for a specific time (onset, midpoint or offset), there is already correlations between tongue splines obtained at the onset, the midpoint and the offset. It is crucial to tell the model to account for this, otherwise there is overconfidence in the estimates.

3.3.2.1 ACF by Fan

acf_resid(phar.gam.noAR,split_pred=list(pharDF$Fan),main = "Average ACF No.AR by Fan",cex.lab=1.5,cex.axis=1.5)

3.3.2.2 ACF by Time

acf_resid(phar.gam.noAR,split_pred=list(pharDF$time),main = "Average ACF No.AR by Time",cex.lab=1.5,cex.axis=1.5)

3.3.2.3 ACF by Context

acf_resid(phar.gam.noAR,split_pred=list(pharDF$context.ord),main = "Average ACF No.AR by Context",cex.lab=1.5,cex.axis=1.5)

3.3.2.4 ACF by Vowel

acf_resid(phar.gam.noAR,split_pred=list(pharDF$vowel.ord),main = "Average ACF No.AR by Vowel",cex.lab=1.5,cex.axis=1.5)

3.3.2.5 ACF by Word

acf_resid(phar.gam.noAR,split_pred=list(pharDF$word),main = "Average ACF No.AR by Word",cex.lab=1.5,cex.axis=1.5)

3.4 Running our second Autoregressive GAM

Our second GAM model is identical to the first, but takes into account the autocorrelation. By including AR.start and rho, we are using information obtained from original model to account for the autocorrelation

mdl.sys.time2 <- system.time(phar.gam.AR <- bam(y ~ context.ord*vowel.ord +
                       ## 1d smooths
                       s(Fan, bs="cr", k=10) +
                       s(time, bs="cr", k=3) +
                       ## 1d smooths * factors
                       s(Fan, k=10, bs="cr", by=context.ord) +
                       s(Fan, k=10, bs="cr", by=vowel.ord) +
                       s(Fan, k=10, bs="cr", by=interaction(context.ord, vowel.ord)) +
                       s(time, k=3, bs="cr", by=context.ord) +
                       s(time, k=3, bs="cr", by=vowel.ord) +
                       s(time, k=3, bs="cr", by=interaction(context.ord, vowel.ord)) +
                       ## 2d smooths
                       ti(Fan, time, bs="cr", k=c(10,3))+
                       ## 2d smooths * factors
                       ti(Fan, time, bs="cr", k=c(10,3), by=context.ord)+
                       ti(Fan, time, bs="cr", k=c(10,3), by=vowel.ord)+
                       ti(Fan, time, bs="cr", k=c(10,3),  by=interaction(context.ord, vowel.ord))+
                       ## random smooths by word
                       s(Fan, word, bs="fs", k=10, m=1, xt=list(bs = "tp")) +
                       s(time, word, bs="fs", k=3, m=1, xt=list(bs = "tp")),
                       data=pharDF,
                       AR.start=pharDF$start, rho=rho_est, nthreads = ncores, method="fREML", discrete = TRUE))
mdl.sys.time2
utilisateur     système      écoulé 
     89.537       0.438      21.479 

3.4.1 Summary

summary(phar.gam.AR)

Family: gaussian 
Link function: identity 

Formula:
y ~ context.ord * vowel.ord + s(Fan, bs = "cr", k = 10) + s(time, 
    bs = "cr", k = 3) + s(Fan, k = 10, bs = "cr", by = context.ord) + 
    s(Fan, k = 10, bs = "cr", by = vowel.ord) + s(Fan, k = 10, 
    bs = "cr", by = interaction(context.ord, vowel.ord)) + s(time, 
    k = 3, bs = "cr", by = context.ord) + s(time, k = 3, bs = "cr", 
    by = vowel.ord) + s(time, k = 3, bs = "cr", by = interaction(context.ord, 
    vowel.ord)) + ti(Fan, time, bs = "cr", k = c(10, 3)) + ti(Fan, 
    time, bs = "cr", k = c(10, 3), by = context.ord) + ti(Fan, 
    time, bs = "cr", k = c(10, 3), by = vowel.ord) + ti(Fan, 
    time, bs = "cr", k = c(10, 3), by = interaction(context.ord, 
        vowel.ord)) + s(Fan, word, bs = "fs", k = 10, m = 1, 
    xt = list(bs = "tp")) + s(time, word, bs = "fs", k = 3, m = 1, 
    xt = list(bs = "tp"))

Parametric coefficients:
                                      Estimate Std. Error t value Pr(>|t|)    
(Intercept)                            35.7836     0.3498 102.295  < 2e-16 ***
context.ordvelar                        1.8356     0.4947   3.711 0.000207 ***
context.orduvular                       2.4247     0.7819   3.101 0.001933 ** 
context.ordpharyngealised               0.8374     0.4693   1.785 0.074347 .  
context.ordpharyngeal                   0.5581     0.6059   0.921 0.356992    
vowel.ordaa                             0.7040     0.4693   1.500 0.133574    
vowel.orduu                             0.9126     0.4693   1.945 0.051834 .  
context.ordvelar:vowel.ordaa           -0.6253     0.6818  -0.917 0.359087    
context.orduvular:vowel.ordaa          -2.7150     1.0942  -2.481 0.013103 *  
context.ordpharyngealised:vowel.ordaa  -1.2354     0.6450  -1.915 0.055454 .  
context.ordpharyngeal:vowel.ordaa       0.6256     0.8423   0.743 0.457665    
context.ordvelar:vowel.orduu           -2.0672     0.6818  -3.032 0.002434 ** 
context.orduvular:vowel.orduu          -3.1006     1.0949  -2.832 0.004632 ** 
context.ordpharyngealised:vowel.orduu  -1.8018     0.6448  -2.794 0.005209 ** 
context.ordpharyngeal:vowel.orduu      -0.6707     0.8424  -0.796 0.425971    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Approximate significance of smooth terms:
                                                                        edf    Ref.df
s(Fan)                                                            8.724e+00 8.770e+00
s(time)                                                           2.974e-04 5.341e-04
s(Fan):context.ordvelar                                           6.974e+00 7.161e+00
s(Fan):context.orduvular                                          7.046e+00 7.244e+00
s(Fan):context.ordpharyngealised                                  7.697e+00 7.763e+00
s(Fan):context.ordpharyngeal                                      7.952e-05 9.977e-05
s(Fan):vowel.ordaa                                                7.050e+00 7.217e+00
s(Fan):vowel.orduu                                                7.190e+00 7.348e+00
s(Fan):interaction(context.ord, vowel.ord)plain.ii                7.559e+00 7.824e+00
s(Fan):interaction(context.ord, vowel.ord)velar.ii                3.153e+00 3.478e+00
s(Fan):interaction(context.ord, vowel.ord)uvular.ii               1.000e+00 1.000e+00
s(Fan):interaction(context.ord, vowel.ord)pharyngealised.ii       1.000e+00 1.000e+00
s(Fan):interaction(context.ord, vowel.ord)pharyngeal.ii           7.113e+00 7.446e+00
s(Fan):interaction(context.ord, vowel.ord)plain.aa                4.307e+00 4.695e+00
s(Fan):interaction(context.ord, vowel.ord)velar.aa                1.001e+00 1.001e+00
s(Fan):interaction(context.ord, vowel.ord)uvular.aa               1.001e+00 1.001e+00
s(Fan):interaction(context.ord, vowel.ord)pharyngealised.aa       6.680e+00 7.045e+00
s(Fan):interaction(context.ord, vowel.ord)pharyngeal.aa           1.000e+00 1.000e+00
s(Fan):interaction(context.ord, vowel.ord)plain.uu                1.000e+00 1.001e+00
s(Fan):interaction(context.ord, vowel.ord)velar.uu                7.606e+00 7.872e+00
s(Fan):interaction(context.ord, vowel.ord)uvular.uu               6.575e+00 6.962e+00
s(Fan):interaction(context.ord, vowel.ord)pharyngealised.uu       1.000e+00 1.001e+00
s(Fan):interaction(context.ord, vowel.ord)pharyngeal.uu           4.828e+00 5.252e+00
s(time):context.ordvelar                                          7.306e-01 9.105e-01
s(time):context.orduvular                                         4.284e-04 8.150e-04
s(time):context.ordpharyngealised                                 5.822e-04 1.036e-03
s(time):context.ordpharyngeal                                     1.193e-03 2.282e-03
s(time):vowel.ordaa                                               2.588e-04 4.807e-04
s(time):vowel.orduu                                               4.581e-04 8.308e-04
s(time):interaction(context.ord, vowel.ord)plain.ii               1.459e+00 1.703e+00
s(time):interaction(context.ord, vowel.ord)velar.ii               1.000e+00 1.000e+00
s(time):interaction(context.ord, vowel.ord)uvular.ii              1.579e+00 1.821e+00
s(time):interaction(context.ord, vowel.ord)pharyngealised.ii      1.000e+00 1.001e+00
s(time):interaction(context.ord, vowel.ord)pharyngeal.ii          1.793e+00 1.957e+00
s(time):interaction(context.ord, vowel.ord)plain.aa               1.000e+00 1.000e+00
s(time):interaction(context.ord, vowel.ord)velar.aa               1.758e+00 1.926e+00
s(time):interaction(context.ord, vowel.ord)uvular.aa              1.000e+00 1.000e+00
s(time):interaction(context.ord, vowel.ord)pharyngealised.aa      1.340e+00 1.560e+00
s(time):interaction(context.ord, vowel.ord)pharyngeal.aa          1.000e+00 1.000e+00
s(time):interaction(context.ord, vowel.ord)plain.uu               1.138e+00 1.256e+00
s(time):interaction(context.ord, vowel.ord)velar.uu               1.000e+00 1.001e+00
s(time):interaction(context.ord, vowel.ord)uvular.uu              1.000e+00 1.000e+00
s(time):interaction(context.ord, vowel.ord)pharyngealised.uu      1.447e+00 1.689e+00
s(time):interaction(context.ord, vowel.ord)pharyngeal.uu          1.001e+00 1.001e+00
ti(time,Fan)                                                      5.065e+00 6.412e+00
ti(time,Fan):context.ordvelar                                     7.295e+00 9.281e+00
ti(time,Fan):context.orduvular                                    1.523e+01 1.650e+01
ti(time,Fan):context.ordpharyngealised                            1.254e+01 1.431e+01
ti(time,Fan):context.ordpharyngeal                                1.682e+00 2.235e+00
ti(time,Fan):vowel.ordaa                                          1.314e+01 1.464e+01
ti(time,Fan):vowel.orduu                                          1.216e+01 1.371e+01
ti(time,Fan):interaction(context.ord, vowel.ord)plain.ii          8.345e+00 8.839e+00
ti(time,Fan):interaction(context.ord, vowel.ord)velar.ii          6.120e+00 7.798e+00
ti(time,Fan):interaction(context.ord, vowel.ord)uvular.ii         1.001e+00 1.002e+00
ti(time,Fan):interaction(context.ord, vowel.ord)pharyngealised.ii 1.653e+01 1.749e+01
ti(time,Fan):interaction(context.ord, vowel.ord)pharyngeal.ii     1.579e+01 1.733e+01
ti(time,Fan):interaction(context.ord, vowel.ord)plain.aa          1.079e+01 1.331e+01
ti(time,Fan):interaction(context.ord, vowel.ord)velar.aa          1.559e+01 1.702e+01
ti(time,Fan):interaction(context.ord, vowel.ord)uvular.aa         1.001e+00 1.001e+00
ti(time,Fan):interaction(context.ord, vowel.ord)pharyngealised.aa 1.326e+00 1.435e+00
ti(time,Fan):interaction(context.ord, vowel.ord)pharyngeal.aa     7.798e+00 1.031e+01
ti(time,Fan):interaction(context.ord, vowel.ord)plain.uu          1.165e+01 1.401e+01
ti(time,Fan):interaction(context.ord, vowel.ord)velar.uu          5.552e+00 6.490e+00
ti(time,Fan):interaction(context.ord, vowel.ord)uvular.uu         1.093e+01 1.411e+01
ti(time,Fan):interaction(context.ord, vowel.ord)pharyngealised.uu 2.277e+00 2.785e+00
ti(time,Fan):interaction(context.ord, vowel.ord)pharyngeal.uu     1.516e+01 1.691e+01
s(Fan,word)                                                       3.770e+02 4.890e+02
s(time,word)                                                      1.415e+01 1.250e+02
                                                                        F  p-value    
s(Fan)                                                            146.962  < 2e-16 ***
s(time)                                                             0.026  0.99701    
s(Fan):context.ordvelar                                             9.096  < 2e-16 ***
s(Fan):context.orduvular                                            9.053  < 2e-16 ***
s(Fan):context.ordpharyngealised                                   34.585  < 2e-16 ***
s(Fan):context.ordpharyngeal                                        0.004  0.99950    
s(Fan):vowel.ordaa                                                 12.329  < 2e-16 ***
s(Fan):vowel.orduu                                                 16.218  < 2e-16 ***
s(Fan):interaction(context.ord, vowel.ord)plain.ii                  5.550  < 2e-16 ***
s(Fan):interaction(context.ord, vowel.ord)velar.ii                  1.402  0.22305    
s(Fan):interaction(context.ord, vowel.ord)uvular.ii                 0.000  0.99998    
s(Fan):interaction(context.ord, vowel.ord)pharyngealised.ii         0.000  0.99998    
s(Fan):interaction(context.ord, vowel.ord)pharyngeal.ii             3.041  0.00232 ** 
s(Fan):interaction(context.ord, vowel.ord)plain.aa                  0.706  0.54776    
s(Fan):interaction(context.ord, vowel.ord)velar.aa                  0.000  0.99998    
s(Fan):interaction(context.ord, vowel.ord)uvular.aa                 0.000  0.99998    
s(Fan):interaction(context.ord, vowel.ord)pharyngealised.aa         3.347  0.00160 ** 
s(Fan):interaction(context.ord, vowel.ord)pharyngeal.aa             0.000  0.99999    
s(Fan):interaction(context.ord, vowel.ord)plain.uu                  0.000  0.99999    
s(Fan):interaction(context.ord, vowel.ord)velar.uu                  6.458  < 2e-16 ***
s(Fan):interaction(context.ord, vowel.ord)uvular.uu                 2.243  0.03089 *  
s(Fan):interaction(context.ord, vowel.ord)pharyngealised.uu         0.000  0.99999    
s(Fan):interaction(context.ord, vowel.ord)pharyngeal.uu             2.282  0.03235 *  
s(time):context.ordvelar                                            2.978  0.09965 .  
s(time):context.orduvular                                           0.192  0.99001    
s(time):context.ordpharyngealised                                   0.443  0.98291    
s(time):context.ordpharyngeal                                       0.405  0.97575    
s(time):vowel.ordaa                                                 0.030  0.99697    
s(time):vowel.orduu                                                 0.224  0.98911    
s(time):interaction(context.ord, vowel.ord)plain.ii                14.401 5.19e-05 ***
s(time):interaction(context.ord, vowel.ord)velar.ii                 0.916  0.33842    
s(time):interaction(context.ord, vowel.ord)uvular.ii                0.567  0.48825    
s(time):interaction(context.ord, vowel.ord)pharyngealised.ii        4.530  0.03329 *  
s(time):interaction(context.ord, vowel.ord)pharyngeal.ii            1.855  0.15363    
s(time):interaction(context.ord, vowel.ord)plain.aa                 0.000  0.99948    
s(time):interaction(context.ord, vowel.ord)velar.aa                 1.609  0.19535    
s(time):interaction(context.ord, vowel.ord)uvular.aa                0.001  0.97747    
s(time):interaction(context.ord, vowel.ord)pharyngealised.aa        2.081  0.21691    
s(time):interaction(context.ord, vowel.ord)pharyngeal.aa            0.015  0.90163    
s(time):interaction(context.ord, vowel.ord)plain.uu                14.364  0.00011 ***
s(time):interaction(context.ord, vowel.ord)velar.uu                 0.187  0.66604    
s(time):interaction(context.ord, vowel.ord)uvular.uu                0.027  0.87099    
s(time):interaction(context.ord, vowel.ord)pharyngealised.uu        4.750  0.03422 *  
s(time):interaction(context.ord, vowel.ord)pharyngeal.uu            0.165  0.68517    
ti(time,Fan)                                                        0.043  0.99990    
ti(time,Fan):context.ordvelar                                       0.991  0.39702    
ti(time,Fan):context.orduvular                                      9.891  < 2e-16 ***
ti(time,Fan):context.ordpharyngealised                              3.070 8.96e-05 ***
ti(time,Fan):context.ordpharyngeal                                  0.054  0.92423    
ti(time,Fan):vowel.ordaa                                            4.595  < 2e-16 ***
ti(time,Fan):vowel.orduu                                            3.936 5.12e-07 ***
ti(time,Fan):interaction(context.ord, vowel.ord)plain.ii           11.080  < 2e-16 ***
ti(time,Fan):interaction(context.ord, vowel.ord)velar.ii            0.900  0.63496    
ti(time,Fan):interaction(context.ord, vowel.ord)uvular.ii           0.000  1.00000    
ti(time,Fan):interaction(context.ord, vowel.ord)pharyngealised.ii  18.888  < 2e-16 ***
ti(time,Fan):interaction(context.ord, vowel.ord)pharyngeal.ii       7.897  < 2e-16 ***
ti(time,Fan):interaction(context.ord, vowel.ord)plain.aa            2.172  0.00777 ** 
ti(time,Fan):interaction(context.ord, vowel.ord)velar.aa            5.689  < 2e-16 ***
ti(time,Fan):interaction(context.ord, vowel.ord)uvular.aa           0.000  1.00000    
ti(time,Fan):interaction(context.ord, vowel.ord)pharyngealised.aa   0.000  0.99973    
ti(time,Fan):interaction(context.ord, vowel.ord)pharyngeal.aa       1.413  0.16403    
ti(time,Fan):interaction(context.ord, vowel.ord)plain.uu            2.310  0.00357 ** 
ti(time,Fan):interaction(context.ord, vowel.ord)velar.uu            1.727  0.12905    
ti(time,Fan):interaction(context.ord, vowel.ord)uvular.uu           1.500  0.11389    
ti(time,Fan):interaction(context.ord, vowel.ord)pharyngealised.uu   0.080  0.97179    
ti(time,Fan):interaction(context.ord, vowel.ord)pharyngeal.uu       6.158  < 2e-16 ***
s(Fan,word)                                                        12.279  < 2e-16 ***
s(time,word)                                                        0.190  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Rank: 1284/1303
R-sq.(adj) =  0.984   Deviance explained = 98.5%
fREML =  12752  Scale est. = 1.6981    n = 18900

3.4.2 ACF second GAM

The following five plots show (in the same order as above) the autocorrelation in the residuals. As can be seen, for all five plots, the levels of autocorrelations in the residuals are reduced massively. We have now more confidence in our estimates, and can continue work

3.4.2.1 ACF by Fan

acf_resid(phar.gam.AR,split_pred=list(pharDF$Fan),main = "Average ACF AR by Fan",cex.lab=1.5,cex.axis=1.5)

3.4.2.2 ACF by Time

acf_resid(phar.gam.AR,split_pred=list(pharDF$time),main = "Average ACF AR by Time",cex.lab=1.5,cex.axis=1.5)

3.4.2.3 ACF by Context

acf_resid(phar.gam.AR,split_pred=list(pharDF$context.ord),main = "Average ACF AR by Context",cex.lab=1.5,cex.axis=1.5)

3.4.2.4 ACF by Vowel

acf_resid(phar.gam.AR,split_pred=list(pharDF$vowel.ord),main = "Average ACF AR by Vowel",cex.lab=1.5,cex.axis=1.5)

3.4.2.5 ACF by Word

acf_resid(phar.gam.AR,split_pred=list(pharDF$word),main = "Average ACF AR by Word",cex.lab=1.5,cex.axis=1.5)

3.4.3 Gam Check

gam.check(phar.gam.AR)


Method: fREML   Optimizer: perf chol
$grad
 [1] -4.495788e-05 -1.416679e-04 -8.724631e-07 -3.369139e-05 -2.322772e-05 -2.646267e-05
 [7] -3.934153e-05  8.572465e-06  8.587223e-06 -6.083851e-05 -1.765828e-05 -6.894936e-05
[13]  7.645017e-06  1.132933e-05  3.365540e-05 -7.907573e-05 -1.394622e-05 -7.157765e-05
[19] -9.047854e-05 -2.281925e-05  1.471309e-05 -7.980586e-05 -3.026176e-05  2.033256e-08
[25] -1.358484e-04 -6.164180e-05 -1.347668e-04 -1.221928e-04 -1.359857e-04  2.845275e-08
[31] -6.222191e-05 -3.619593e-08 -1.309497e-04  2.290468e-09 -6.255144e-05 -4.840882e-08
[37] -5.999826e-05 -3.398253e-08 -6.173596e-05 -3.697374e-08 -1.404164e-04 -6.020312e-05
[43]  1.088059e-07 -1.516741e-04  1.320886e-07 -4.487331e-08 -8.561040e-09  1.888781e-08
[49] -1.303608e-08  5.673040e-09 -9.978420e-08 -5.220367e-08  2.270234e-07  1.380112e-07
[55]  4.946025e-07  9.444100e-08  2.411116e-07  1.656954e-08 -8.164500e-05  1.610296e-09
[61] -3.780627e-08 -8.289301e-09 -4.829854e-05 -5.810627e-05 -3.609381e-08  7.586333e-08
[67] -3.783145e-09 -6.419241e-08  9.913513e-08 -1.850878e-07 -5.265704e-07 -8.102783e-08
[73] -3.352521e-05 -9.251367e-05 -1.012569e-04 -2.177566e-09  5.302926e-07 -3.395690e-07
[79] -2.511117e-07 -6.949732e-08 -9.181318e-05 -4.868114e-09 -3.533558e-08  7.032578e-08
[85]  6.009735e-09  5.400447e-09 -1.280399e-07  1.015886e-07  4.694833e-05 -1.064926e-12
[91] -1.449279e-04  1.127987e-12  3.939912e-04

$hess
           [,1]          [,2]          [,3]          [,4]          [,5]          [,6]
   3.880516e+00 -9.231245e-09  3.352108e-02 -6.079133e-02 -7.561573e-02 -1.306881e-06
  -9.231245e-09  1.416279e-04 -2.396216e-09 -1.217396e-09 -7.030217e-10 -4.475964e-15
   3.352108e-02 -2.396216e-09  3.063521e+00 -5.037472e-02  4.452336e-02 -1.541643e-06
  -6.079133e-02 -1.217396e-09 -5.037472e-02  3.088378e+00 -1.087565e-01 -1.243132e-06
  -7.561573e-02 -7.030217e-10  4.452336e-02 -1.087565e-01  3.699925e+00 -5.288553e-07
  -1.306881e-06 -4.475964e-15 -1.541643e-06 -1.243132e-06 -5.288553e-07  2.646208e-05
  -7.386708e-02 -5.397808e-10  1.241113e-02 -2.294418e-02 -1.046438e-01  1.544368e-06
  -6.651738e-02 -2.084358e-09 -9.398017e-02 -1.082492e-01 -4.609894e-02 -1.120971e-06
   3.168294e-02 -2.353574e-09 -1.362277e-01  3.010183e-02  7.470902e-02  3.039897e-07
   1.886826e-03 -1.242707e-09 -1.130408e-01  1.760305e-02  3.081848e-02 -2.694112e-06
           [,7]          [,8]          [,9]         [,10]         [,11]         [,12]
  -7.386708e-02 -6.651738e-02  3.168294e-02  1.886826e-03  5.634728e-06  3.846927e-07
  -5.397808e-10 -2.084358e-09 -2.353574e-09 -1.242707e-09  2.582525e-12 -1.359434e-12
   1.241113e-02 -9.398017e-02 -1.362277e-01 -1.130408e-01  2.045724e-07 -2.959935e-06
  -2.294418e-02 -1.082492e-01  3.010183e-02  1.760305e-02 -6.362596e-06 -2.426906e-06
  -1.046438e-01 -4.609894e-02  7.470902e-02  3.081848e-02  8.981694e-07  3.401909e-07
   1.544368e-06 -1.120971e-06  3.039897e-07 -2.694112e-06 -6.096108e-10 -1.185073e-09
   3.168059e+00 -1.400483e-01  2.517356e-01  1.289316e-01  5.651562e-06 -9.746541e-06
  -1.400483e-01  3.434102e+00  9.930986e-02  9.395547e-02  1.905946e-06 -1.727356e-05
   2.517356e-01  9.930986e-02  2.641230e+00 -6.922503e-02 -6.731657e-07  8.618486e-06
   1.289316e-01  9.395547e-02 -6.922503e-02  5.777377e-01  1.290994e-05  1.423419e-05
          [,13]         [,14]         [,15]         [,16]         [,17]         [,18]
  -5.203275e-02 -8.101122e-03 -6.829396e-06  2.440404e-05  1.113617e-02  4.098931e-07
   6.902940e-10 -3.832186e-10  1.963794e-13  1.194605e-11  3.511318e-10  1.220394e-13
   1.127289e-01  2.892477e-01  9.334737e-05  1.030646e-06  9.302451e-02 -7.417308e-06
   9.433554e-02  2.432500e-02  8.628293e-07  2.193618e-05  1.151931e-02 -2.872032e-06
   5.312686e-02 -3.631227e-02  1.776242e-06  3.720593e-06 -2.713051e-02 -8.078355e-07
  -1.816205e-06  1.287658e-06 -9.772332e-10 -3.160866e-09  8.674988e-07 -1.641933e-09
   1.054539e-01  6.959904e-02 -9.282993e-06  2.523865e-05  2.963905e-02 -7.497790e-08
   1.757226e-01  5.750532e-02  1.626081e-05  9.207492e-06 -2.017819e-04 -2.358560e-06
  -8.677889e-02  8.632740e-02  3.577239e-06 -1.308149e-06 -2.700188e-02 -1.002436e-06
  -9.759511e-02  6.825345e-02  1.612873e-04  6.002560e-05  1.210630e-01 -7.466222e-06
          [,19]         [,20]         [,21]         [,22]         [,23]         [,24]
   2.061847e-05  1.568823e-02  2.070870e-02  3.879169e-06 -3.096236e-02 -1.655954e-06
  -1.750854e-12  1.590399e-09  6.967492e-10 -1.741780e-12  5.235087e-10 -2.092667e-05
  -1.492154e-07  1.516842e-02 -1.563553e-02  4.237501e-06 -4.056766e-03 -1.195639e-05
   1.184043e-05  5.174802e-02  4.686380e-01  3.625668e-06 -1.190407e-02  4.983402e-07
   1.945853e-05 -1.620299e-02 -1.270778e-02  6.448958e-06 -2.083891e-02  1.360887e-06
  -1.699780e-09  1.104628e-06  5.062559e-07 -1.307979e-09  6.357167e-06 -1.731097e-10
   1.420582e-05 -6.763091e-02 -1.486598e-02 -1.434376e-06 -4.002712e-02  1.008156e-05
  -1.766062e-05  2.259639e-01  1.045988e-01  8.983086e-06  1.744797e-02  3.452653e-06
  -7.256747e-06 -5.503627e-02 -2.834194e-02  7.988652e-06  2.100196e-02 -2.348533e-06
   1.296229e-06  1.337902e-01  1.507348e-04  9.768909e-06  3.165542e-02 -1.767604e-04
          [,25]         [,26]         [,27]         [,28]         [,29]         [,30]
   3.265209e-10 -3.893029e-08  6.312674e-08  1.137752e-09 -1.329929e-08 -3.200142e-06
  -9.401247e-09 -1.026679e-08 -4.935443e-08 -1.557929e-08 -1.036833e-08  3.032464e-06
   1.330483e-09 -4.288783e-10  5.291355e-08  2.658805e-09 -2.295977e-09 -1.082912e-06
  -1.839684e-08 -2.241399e-09  4.802360e-08  3.441774e-10 -2.833924e-09 -1.578634e-06
   3.478690e-10  2.213815e-08  2.309450e-08  6.153528e-10 -2.430916e-09 -2.637644e-06
   4.106925e-14 -3.139119e-13 -5.360871e-12 -4.901709e-14 -5.086145e-14  8.360148e-11
  -1.777194e-09 -1.212029e-08 -6.825188e-08 -6.380347e-09 -3.615073e-09 -6.829540e-06
   1.015228e-09 -2.219131e-08  4.672150e-08  1.811195e-09  4.092122e-08 -7.632424e-06
   4.015328e-11 -1.148983e-08  1.573944e-08  9.277874e-11 -3.866582e-09  3.414489e-06
  -4.800814e-09 -7.841221e-08 -3.741928e-07 -1.546083e-08 -6.789147e-08  2.716654e-06
          [,31]         [,32]         [,33]         [,34]         [,35]         [,36]
  -2.688591e-10 -1.165793e-06  1.654150e-08  3.391188e-07  5.080242e-10 -6.552068e-06
  -2.003328e-10 -5.349227e-06 -8.284787e-09 -7.315062e-06 -5.348580e-09 -2.311796e-06
   8.280140e-11 -4.294313e-06  1.569163e-09  2.817869e-07  1.797107e-09 -2.537036e-05
  -2.932931e-11 -3.836578e-05  2.741519e-09 -3.814272e-07  8.646153e-10 -2.243224e-06
  -1.087929e-10 -1.924828e-06 -1.046466e-09 -5.304137e-08  3.107219e-10 -5.691117e-06
   2.454251e-15 -2.846024e-11  1.063626e-13 -1.711038e-10  1.112930e-13  5.148062e-10
  -4.691354e-10  8.047957e-06  7.450781e-09  3.358679e-06 -2.308910e-09 -3.238718e-05
  -4.068212e-10 -4.474724e-07  1.510681e-08  2.681581e-06  1.522871e-09 -1.603381e-05
  -6.427479e-12 -2.409476e-06  5.385300e-09 -2.043741e-06 -3.696220e-10 -7.134633e-07
   4.851659e-09  1.633855e-05  3.734111e-08 -2.442146e-07 -3.179787e-09  3.388410e-04
          [,37]         [,38]         [,39]         [,40]         [,41]         [,42]
   8.597876e-10  1.377403e-05  1.766274e-09 -2.686100e-05 -5.586287e-09  2.177771e-10
  -1.899172e-09  1.876233e-06 -1.503681e-09  5.130881e-07 -2.038772e-09 -1.547531e-10
   1.523671e-09 -5.289914e-07  1.490746e-09 -3.712547e-06  2.167220e-09  1.046974e-10
  -9.122522e-09  1.890687e-06  1.420635e-09 -4.780670e-06 -2.722174e-10 -1.057790e-09
   6.272275e-10  3.091680e-06  6.051140e-10 -8.930859e-06 -1.435015e-09  8.367147e-11
   4.044007e-14 -4.276019e-11 -1.159225e-13 -3.915910e-10 -4.382897e-14  5.337302e-15
  -1.816727e-09  1.458865e-05 -2.228177e-09 -9.814590e-06 -4.287393e-09  5.434933e-11
   1.803798e-09  9.361259e-06  1.509368e-09  9.539391e-06 -6.365378e-09  4.691302e-10
   3.923203e-10  4.480139e-06  5.576079e-10 -8.524391e-06 -5.902612e-10  3.976194e-11
  -4.424200e-09  6.698160e-05 -1.086912e-08 -5.806584e-05  2.810178e-08  9.665810e-11
          [,43]         [,44]         [,45]         [,46]         [,47]         [,48]
   4.961272e-05  1.569969e-09 -6.248696e-05 -1.063685e-04  1.212921e-04  1.734702e-04
   2.727882e-06 -1.189373e-08 -1.218900e-06  7.683570e-08 -2.496446e-07  2.176618e-08
   1.290101e-05  1.040451e-09 -2.582515e-05  1.390319e-06  3.765130e-04  1.394995e-04
   1.596921e-05 -1.873458e-10  2.686613e-05 -4.526913e-05 -2.571018e-05 -7.577537e-05
   2.473865e-05  1.424518e-09 -2.978307e-05 -3.012419e-04  9.855081e-05  1.640293e-04
   4.451673e-10 -8.546503e-13  7.289116e-10 -6.077916e-10  1.021675e-09  1.999488e-10
   1.961332e-05  3.668778e-09 -1.382468e-04 -6.308237e-04  2.610396e-04 -6.269350e-05
   7.275647e-05 -3.390595e-09  6.481517e-05  1.574318e-04  1.679877e-04  2.093997e-04
   1.822809e-05 -1.430880e-09 -4.446656e-04 -3.921748e-04 -2.730952e-04  2.446572e-04
   7.712028e-05 -2.224655e-09  7.509315e-05  2.753300e-05  1.000807e-04 -3.240569e-04
          [,49]         [,50]         [,51]         [,52]         [,53]         [,54]
  -1.927636e-06 -1.608036e-06 -2.047974e-04  1.032375e-04 -8.806881e-05 -1.325197e-04
   2.769470e-07  1.924865e-08 -1.984063e-07  1.026867e-08 -3.000348e-07 -1.037069e-07
   4.765585e-06  2.521469e-05 -1.036905e-04 -3.865351e-04  1.097437e-04  9.632640e-05
   1.107460e-03  6.677721e-03  2.036808e-04  4.465681e-04 -9.070326e-06 -1.481947e-04
   1.079891e-05  5.009462e-05  8.715721e-04  1.757358e-03 -8.285945e-06 -9.043058e-05
  -1.675060e-09  6.426617e-12 -1.765829e-09  2.586346e-09  8.383160e-09  1.008948e-08
  -8.564795e-05 -3.040854e-04  5.740880e-06  1.081109e-04  8.537711e-05  1.424100e-04
  -3.171806e-05 -1.674678e-04  6.286227e-05  1.946736e-04 -1.182877e-05 -7.175743e-05
   6.608251e-05  1.335481e-04 -6.633133e-06  2.574265e-06  7.719769e-05  1.881947e-04
   4.652378e-05  4.943491e-05 -3.893308e-05 -1.977136e-04  8.065448e-05 -2.325817e-05
          [,55]         [,56]         [,57]         [,58]         [,59]         [,60]
   7.779693e-05 -1.371318e-04 -4.285991e-04 -1.113889e-05  1.054221e-08  1.277034e-05
   9.278719e-07  2.300509e-07 -7.795448e-09 -4.077571e-09 -8.575662e-11  2.383884e-12
  -3.131755e-04 -6.610723e-04  1.138528e-04  6.888940e-05  7.978160e-08  1.281620e-05
  -2.650148e-05 -5.003459e-04 -2.149603e-05 -6.049110e-05 -1.207444e-08  8.357234e-06
   1.422042e-05 -4.489022e-04 -3.423386e-04 -2.277916e-05 -2.490271e-08  4.991327e-06
   9.661978e-10 -2.577332e-10 -6.478925e-09 -6.341739e-10 -4.903237e-14  2.937526e-11
  -4.237246e-04 -9.505363e-04 -7.281194e-04  1.067245e-04 -7.888064e-08 -2.196882e-05
  -9.200836e-06 -1.511014e-04 -1.416398e-03 -3.006152e-04  1.082006e-08  2.104007e-06
  -2.307988e-04 -7.136348e-04 -1.379618e-05 -1.320609e-05 -2.024645e-07 -2.011284e-04
  -4.614063e-05  1.437906e-04  4.221458e-05  6.518958e-05  8.098373e-09  3.462061e-06
          [,61]         [,62]         [,63]         [,64]         [,65]         [,66]
  -7.745547e-05  1.741222e-04 -3.463914e-08 -1.542720e-07 -2.265386e-04 -8.852772e-05
   2.716727e-08  2.634004e-08  1.404968e-12  1.471061e-11  8.212657e-08 -6.281976e-08
  -8.068890e-05 -8.254552e-04 -8.745653e-11  2.076558e-09  7.353201e-05  4.578471e-04
   2.898750e-06  1.809928e-04  8.175340e-09  2.237611e-08 -7.012344e-05 -5.493256e-05
  -8.887564e-06  1.412022e-04 -1.026374e-08 -7.568038e-08  1.373583e-05  4.562690e-05
   2.458730e-09  2.489184e-09  1.112567e-12  4.086080e-12 -3.898017e-09  3.965688e-10
  -1.401805e-04 -4.301723e-04 -6.819771e-08 -3.231013e-07 -2.199648e-04 -4.998866e-04
  -2.145994e-05  3.929836e-04 -2.033087e-08 -1.543082e-07 -2.819000e-04 -3.806232e-04
   9.012389e-05  6.973290e-05  3.438449e-08  2.098704e-07  3.159693e-04  1.350864e-03
  -3.861760e-04 -3.696667e-04  3.685551e-08  1.153315e-07  1.798065e-04  1.690016e-04
          [,67]         [,68]         [,69]         [,70]         [,71]         [,72]
   5.550998e-08 -4.230004e-04  1.347997e-05 -1.429260e-04 -1.805754e-04  6.355694e-05
  -1.030470e-08 -2.826231e-09 -7.427712e-07  1.456594e-07 -1.639508e-06 -1.225000e-09
  -1.207505e-06  1.973117e-04  1.053600e-04  3.281021e-04  1.744033e-03  9.276566e-04
   1.394714e-06 -3.267243e-04  6.104505e-05 -8.467440e-05  2.691489e-05 -5.686220e-05
  -5.267839e-06 -4.051927e-04 -4.934743e-06 -9.707250e-05 -1.195002e-04 -3.023727e-04
  -1.895297e-09 -1.611598e-09  8.588749e-09  1.816996e-09  4.673649e-10  1.822324e-09
  -3.754149e-05  1.288706e-04  4.010423e-05  9.380054e-06 -4.227716e-04 -1.151053e-03
   2.339128e-07  6.626226e-05  7.563158e-06 -8.123387e-06  2.015915e-04 -7.553682e-05
   2.740743e-05 -8.852078e-04 -3.315583e-05 -6.615090e-04  3.109355e-04  1.259760e-04
   4.205022e-05 -9.460767e-05  2.131245e-05  8.107435e-05  1.057420e-03 -6.067939e-04
          [,73]         [,74]         [,75]         [,76]         [,77]         [,78]
  -3.505856e-08 -1.462401e-08  5.758811e-08  2.379183e-06 -2.156888e-04  1.527339e-05
   1.342997e-11 -1.357342e-13 -1.494040e-11 -1.972284e-13 -3.055093e-07 -1.295831e-08
  -2.256786e-09 -4.356680e-09  2.810473e-08 -2.455881e-07 -1.722873e-04 -1.055557e-05
   3.814156e-10 -5.932430e-09 -2.611136e-08 -1.736375e-07 -4.220483e-04 -6.233044e-05
  -5.365332e-09  7.199458e-10 -4.807192e-08  8.198609e-07 -1.494463e-04 -1.617201e-05
   7.909948e-13 -1.382118e-13  2.620552e-12  8.930481e-12  2.887069e-08 -2.223846e-08
  -3.692115e-08  3.560778e-08  1.477152e-07  5.756755e-06  4.045381e-04 -1.054618e-04
  -1.014286e-08 -5.174053e-09 -4.689058e-08  3.803534e-07 -2.476594e-04 -5.283923e-05
   1.825399e-08  1.929210e-08 -7.124301e-09 -2.896370e-06  3.532382e-04  5.196455e-04
  -4.675594e-08  7.135731e-09 -4.897608e-08 -3.293468e-06  1.803410e-05 -2.412502e-04
          [,79]         [,80]         [,81]         [,82]         [,83]         [,84]
   3.398022e-05  2.944639e-05 -7.838411e-09 -1.648772e-06  1.287580e-05  1.227354e-04
  -1.385051e-06  8.982407e-08  9.014620e-14  2.507491e-12 -2.221692e-07  1.107679e-07
   2.674542e-04  6.402785e-04  3.330847e-09 -1.778458e-05  2.559663e-05  2.371739e-04
   2.647604e-04  4.608897e-04 -3.197002e-08 -7.643634e-06  6.250969e-04 -7.288908e-04
   4.205654e-04  5.685452e-04 -9.495112e-09 -5.508952e-06  5.026475e-05  6.965235e-05
   1.280436e-08  9.769795e-09  8.361440e-14 -5.388466e-11 -1.445034e-09 -1.528459e-09
   3.048675e-04  6.051042e-04 -7.492241e-09 -1.179487e-05 -5.460006e-06 -2.865809e-05
  -2.045172e-04 -4.839180e-04  1.084807e-08 -1.009710e-05  5.382291e-05  1.331002e-04
  -2.401406e-04 -1.252667e-03 -3.211251e-08  3.382290e-06  2.113107e-05  2.874313e-04
  -5.747380e-04 -3.152930e-04  2.288397e-09 -2.511918e-06 -4.040092e-06  7.206640e-05
          [,85]         [,86]         [,87]         [,88]         [,89]         [,90]
  -8.777671e-06  1.414501e-05 -1.205317e-05  3.142690e-05  9.270843e-03  4.065915e-17
  -1.491851e-08 -1.170314e-09 -4.793302e-07  2.488867e-08  6.030278e-09 -3.723499e-23
  -3.848509e-05 -3.686426e-05 -1.400584e-05  2.748247e-06  5.805769e-01  4.693900e-17
  -6.602956e-07  1.384728e-05  7.747518e-06  7.809550e-05 -4.941868e-01  1.140126e-16
   4.350306e-05  7.549797e-05  3.562933e-05  2.343392e-04 -5.510659e-02  9.726937e-17
  -2.481791e-10  1.394424e-09 -7.109867e-10 -4.300773e-09 -7.863366e-06  2.172329e-21
   4.655552e-05  1.285271e-04 -1.878453e-05  1.348932e-04  4.475946e-01  9.110115e-17
  -3.561916e-05 -1.506822e-06  7.091318e-06  8.576493e-05  6.089240e-02  1.791356e-16
  -9.233890e-06 -2.698747e-05  1.927428e-05  1.082807e-04 -7.976729e-01 -2.184689e-16
   1.871155e-05 -7.351948e-05 -8.549989e-05  1.253963e-06 -4.869340e-02 -1.775974e-16
          [,91]         [,92]         [,93]
  -3.744708e-10 -3.754766e-17 -3.862284e+00
  -4.218537e-09 -1.591030e-21 -7.014975e-06
   1.079393e-09  1.068495e-16 -3.486955e+00
  -2.952418e-09  4.361281e-17 -3.522822e+00
  -6.925414e-10 -1.013151e-17 -3.848667e+00
  -1.150989e-13  2.763347e-21 -1.329747e-05
  -1.507948e-09 -1.344285e-16 -3.524951e+00
   9.086843e-09  4.192677e-17 -3.594991e+00
   4.910376e-11  4.297865e-18 -3.279486e+00
   1.622137e-09  9.054853e-17 -1.076270e+00
 [ getOption("max.print") est atteint -- 83 lignes omises ]

Model rank =  1284 / 1303 

Basis dimension (k) checking results. Low p-value (k-index<1) may
indicate that k is too low, especially if edf is close to k'.

                                                                        k'      edf
s(Fan)                                                            9.00e+00 8.72e+00
s(time)                                                           2.00e+00 2.97e-04
s(Fan):context.ordvelar                                           9.00e+00 6.97e+00
s(Fan):context.orduvular                                          9.00e+00 7.05e+00
s(Fan):context.ordpharyngealised                                  9.00e+00 7.70e+00
s(Fan):context.ordpharyngeal                                      9.00e+00 7.95e-05
s(Fan):vowel.ordaa                                                9.00e+00 7.05e+00
s(Fan):vowel.orduu                                                9.00e+00 7.19e+00
s(Fan):interaction(context.ord, vowel.ord)plain.ii                9.00e+00 7.56e+00
s(Fan):interaction(context.ord, vowel.ord)velar.ii                9.00e+00 3.15e+00
s(Fan):interaction(context.ord, vowel.ord)uvular.ii               9.00e+00 1.00e+00
s(Fan):interaction(context.ord, vowel.ord)pharyngealised.ii       9.00e+00 1.00e+00
s(Fan):interaction(context.ord, vowel.ord)pharyngeal.ii           9.00e+00 7.11e+00
s(Fan):interaction(context.ord, vowel.ord)plain.aa                9.00e+00 4.31e+00
s(Fan):interaction(context.ord, vowel.ord)velar.aa                9.00e+00 1.00e+00
s(Fan):interaction(context.ord, vowel.ord)uvular.aa               9.00e+00 1.00e+00
s(Fan):interaction(context.ord, vowel.ord)pharyngealised.aa       9.00e+00 6.68e+00
s(Fan):interaction(context.ord, vowel.ord)pharyngeal.aa           9.00e+00 1.00e+00
s(Fan):interaction(context.ord, vowel.ord)plain.uu                9.00e+00 1.00e+00
s(Fan):interaction(context.ord, vowel.ord)velar.uu                9.00e+00 7.61e+00
s(Fan):interaction(context.ord, vowel.ord)uvular.uu               9.00e+00 6.57e+00
s(Fan):interaction(context.ord, vowel.ord)pharyngealised.uu       9.00e+00 1.00e+00
s(Fan):interaction(context.ord, vowel.ord)pharyngeal.uu           9.00e+00 4.83e+00
s(time):context.ordvelar                                          2.00e+00 7.31e-01
s(time):context.orduvular                                         2.00e+00 4.28e-04
s(time):context.ordpharyngealised                                 2.00e+00 5.82e-04
s(time):context.ordpharyngeal                                     2.00e+00 1.19e-03
s(time):vowel.ordaa                                               2.00e+00 2.59e-04
s(time):vowel.orduu                                               2.00e+00 4.58e-04
s(time):interaction(context.ord, vowel.ord)plain.ii               2.00e+00 1.46e+00
s(time):interaction(context.ord, vowel.ord)velar.ii               2.00e+00 1.00e+00
s(time):interaction(context.ord, vowel.ord)uvular.ii              2.00e+00 1.58e+00
s(time):interaction(context.ord, vowel.ord)pharyngealised.ii      2.00e+00 1.00e+00
s(time):interaction(context.ord, vowel.ord)pharyngeal.ii          2.00e+00 1.79e+00
s(time):interaction(context.ord, vowel.ord)plain.aa               2.00e+00 1.00e+00
s(time):interaction(context.ord, vowel.ord)velar.aa               2.00e+00 1.76e+00
s(time):interaction(context.ord, vowel.ord)uvular.aa              2.00e+00 1.00e+00
s(time):interaction(context.ord, vowel.ord)pharyngealised.aa      2.00e+00 1.34e+00
s(time):interaction(context.ord, vowel.ord)pharyngeal.aa          2.00e+00 1.00e+00
s(time):interaction(context.ord, vowel.ord)plain.uu               2.00e+00 1.14e+00
s(time):interaction(context.ord, vowel.ord)velar.uu               2.00e+00 1.00e+00
s(time):interaction(context.ord, vowel.ord)uvular.uu              2.00e+00 1.00e+00
s(time):interaction(context.ord, vowel.ord)pharyngealised.uu      2.00e+00 1.45e+00
s(time):interaction(context.ord, vowel.ord)pharyngeal.uu          2.00e+00 1.00e+00
ti(time,Fan)                                                      1.80e+01 5.06e+00
ti(time,Fan):context.ordvelar                                     1.80e+01 7.29e+00
ti(time,Fan):context.orduvular                                    1.80e+01 1.52e+01
ti(time,Fan):context.ordpharyngealised                            1.80e+01 1.25e+01
ti(time,Fan):context.ordpharyngeal                                1.80e+01 1.68e+00
ti(time,Fan):vowel.ordaa                                          1.80e+01 1.31e+01
ti(time,Fan):vowel.orduu                                          1.80e+01 1.22e+01
ti(time,Fan):interaction(context.ord, vowel.ord)plain.ii          1.80e+01 8.34e+00
ti(time,Fan):interaction(context.ord, vowel.ord)velar.ii          1.80e+01 6.12e+00
ti(time,Fan):interaction(context.ord, vowel.ord)uvular.ii         1.80e+01 1.00e+00
ti(time,Fan):interaction(context.ord, vowel.ord)pharyngealised.ii 1.80e+01 1.65e+01
ti(time,Fan):interaction(context.ord, vowel.ord)pharyngeal.ii     1.80e+01 1.58e+01
ti(time,Fan):interaction(context.ord, vowel.ord)plain.aa          1.80e+01 1.08e+01
ti(time,Fan):interaction(context.ord, vowel.ord)velar.aa          1.80e+01 1.56e+01
ti(time,Fan):interaction(context.ord, vowel.ord)uvular.aa         1.80e+01 1.00e+00
ti(time,Fan):interaction(context.ord, vowel.ord)pharyngealised.aa 1.80e+01 1.33e+00
ti(time,Fan):interaction(context.ord, vowel.ord)pharyngeal.aa     1.80e+01 7.80e+00
ti(time,Fan):interaction(context.ord, vowel.ord)plain.uu          1.80e+01 1.17e+01
ti(time,Fan):interaction(context.ord, vowel.ord)velar.uu          1.80e+01 5.55e+00
ti(time,Fan):interaction(context.ord, vowel.ord)uvular.uu         1.80e+01 1.09e+01
ti(time,Fan):interaction(context.ord, vowel.ord)pharyngealised.uu 1.80e+01 2.28e+00
ti(time,Fan):interaction(context.ord, vowel.ord)pharyngeal.uu     1.80e+01 1.52e+01
s(Fan,word)                                                       5.00e+02 3.77e+02
s(time,word)                                                      1.50e+02 1.41e+01
                                                                  k-index p-value  
s(Fan)                                                               1.03   0.975  
s(time)                                                              1.02   0.830  
s(Fan):context.ordvelar                                              1.03   0.970  
s(Fan):context.orduvular                                             1.03   0.980  
s(Fan):context.ordpharyngealised                                     1.03   0.980  
s(Fan):context.ordpharyngeal                                         1.03   0.975  
s(Fan):vowel.ordaa                                                   1.03   0.980  
s(Fan):vowel.orduu                                                   1.03   1.000  
s(Fan):interaction(context.ord, vowel.ord)plain.ii                   1.03   0.980  
s(Fan):interaction(context.ord, vowel.ord)velar.ii                   1.03   0.990  
s(Fan):interaction(context.ord, vowel.ord)uvular.ii                  1.03   0.985  
s(Fan):interaction(context.ord, vowel.ord)pharyngealised.ii          1.03   0.990  
s(Fan):interaction(context.ord, vowel.ord)pharyngeal.ii              1.03   0.970  
s(Fan):interaction(context.ord, vowel.ord)plain.aa                   1.03   0.975  
s(Fan):interaction(context.ord, vowel.ord)velar.aa                   1.03   0.980  
s(Fan):interaction(context.ord, vowel.ord)uvular.aa                  1.03   0.980  
s(Fan):interaction(context.ord, vowel.ord)pharyngealised.aa          1.03   0.980  
s(Fan):interaction(context.ord, vowel.ord)pharyngeal.aa              1.03   0.970  
s(Fan):interaction(context.ord, vowel.ord)plain.uu                   1.03   0.985  
s(Fan):interaction(context.ord, vowel.ord)velar.uu                   1.03   0.975  
s(Fan):interaction(context.ord, vowel.ord)uvular.uu                  1.03   0.970  
s(Fan):interaction(context.ord, vowel.ord)pharyngealised.uu          1.03   0.970  
s(Fan):interaction(context.ord, vowel.ord)pharyngeal.uu              1.03   0.980  
s(time):context.ordvelar                                             1.02   0.870  
s(time):context.orduvular                                            1.02   0.825  
s(time):context.ordpharyngealised                                    1.02   0.840  
s(time):context.ordpharyngeal                                        1.02   0.830  
s(time):vowel.ordaa                                                  1.02   0.825  
s(time):vowel.orduu                                                  1.02   0.880  
s(time):interaction(context.ord, vowel.ord)plain.ii                  1.02   0.850  
s(time):interaction(context.ord, vowel.ord)velar.ii                  1.02   0.890  
s(time):interaction(context.ord, vowel.ord)uvular.ii                 1.02   0.850  
s(time):interaction(context.ord, vowel.ord)pharyngealised.ii         1.02   0.860  
s(time):interaction(context.ord, vowel.ord)pharyngeal.ii             1.02   0.880  
s(time):interaction(context.ord, vowel.ord)plain.aa                  1.02   0.850  
s(time):interaction(context.ord, vowel.ord)velar.aa                  1.02   0.835  
s(time):interaction(context.ord, vowel.ord)uvular.aa                 1.02   0.900  
s(time):interaction(context.ord, vowel.ord)pharyngealised.aa         1.02   0.870  
s(time):interaction(context.ord, vowel.ord)pharyngeal.aa             1.02   0.860  
s(time):interaction(context.ord, vowel.ord)plain.uu                  1.02   0.905  
s(time):interaction(context.ord, vowel.ord)velar.uu                  1.02   0.865  
s(time):interaction(context.ord, vowel.ord)uvular.uu                 1.02   0.860  
s(time):interaction(context.ord, vowel.ord)pharyngealised.uu         1.02   0.870  
s(time):interaction(context.ord, vowel.ord)pharyngeal.uu             1.02   0.835  
ti(time,Fan)                                                         0.98   0.120  
ti(time,Fan):context.ordvelar                                        0.98   0.155  
ti(time,Fan):context.orduvular                                       0.98   0.135  
ti(time,Fan):context.ordpharyngealised                               0.98   0.100 .
ti(time,Fan):context.ordpharyngeal                                   0.98   0.135  
ti(time,Fan):vowel.ordaa                                             0.98   0.120  
ti(time,Fan):vowel.orduu                                             0.98   0.130  
ti(time,Fan):interaction(context.ord, vowel.ord)plain.ii             0.98   0.160  
ti(time,Fan):interaction(context.ord, vowel.ord)velar.ii             0.98   0.185  
ti(time,Fan):interaction(context.ord, vowel.ord)uvular.ii            0.98   0.100 .
ti(time,Fan):interaction(context.ord, vowel.ord)pharyngealised.ii    0.98   0.165  
ti(time,Fan):interaction(context.ord, vowel.ord)pharyngeal.ii        0.98   0.150  
ti(time,Fan):interaction(context.ord, vowel.ord)plain.aa             0.98   0.155  
ti(time,Fan):interaction(context.ord, vowel.ord)velar.aa             0.98   0.145  
ti(time,Fan):interaction(context.ord, vowel.ord)uvular.aa            0.98   0.165  
ti(time,Fan):interaction(context.ord, vowel.ord)pharyngealised.aa    0.98   0.130  
ti(time,Fan):interaction(context.ord, vowel.ord)pharyngeal.aa        0.98   0.125  
ti(time,Fan):interaction(context.ord, vowel.ord)plain.uu             0.98   0.180  
ti(time,Fan):interaction(context.ord, vowel.ord)velar.uu             0.98   0.165  
ti(time,Fan):interaction(context.ord, vowel.ord)uvular.uu            0.98   0.125  
ti(time,Fan):interaction(context.ord, vowel.ord)pharyngealised.uu    0.98   0.095 .
ti(time,Fan):interaction(context.ord, vowel.ord)pharyngeal.uu        0.98   0.090 .
s(Fan,word)                                                          1.03   0.980  
s(time,word)                                                         1.02   0.865  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

3.5 Significance testing second Autoregressive GAM

To test for significance of context, we run a model with a ML as method and evaluate significance through a maximum likelihood estimate.

3.5.1 Models

We ran three models

  1. A full model with all predictors (phar.gam.AR.ML)
  2. A reduced model without any terms associated with the predictor “context” (phar.gam.AR.ML.Min.Context)
  3. An intercept only model (=Null) without any terms associated with the predictor “vowel” (phar.gam.AR.ML.Min.ContextAndVowel)
mdl.sys.time3 <- system.time(phar.gam.AR.ML <- bam(y ~ context.ord*vowel.ord +
                           # 1d smooths
                           s(Fan, bs="cr",k=10) +
                           s(time, bs="cr", k=3) +
                           # 1d smooth * factor
                           s(Fan, k=10, bs="cr", by=context.ord) +
                           s(Fan, k=10, bs="cr", by=vowel.ord) +
                           s(Fan, k=10, bs="cr", by=interaction(context.ord, vowel.ord)) +
                           s(time, k=3, bs="cr", by=context.ord) +
                           s(time, k=3, bs="cr", by=vowel.ord) +
                           s(time, k=3, bs="cr", by=interaction(context.ord, vowel.ord)) +
                           # 2d smooth
                           ti(Fan, time, bs="cr", k=c(10,3))+
                           ti(Fan, time, bs="cr", k=c(10,3),by=context.ord)+
                           ti(Fan, time, bs="cr", k=c(10,3),by=vowel.ord)+
                           ti(Fan, time, bs="cr", k=c(10,3),by=interaction(context.ord, vowel.ord))+                      
                           # random smooths by word
                           s(Fan, word, bs="fs", k=10, m=1, xt=list(bs = "tp")) +
                           s(time, word, bs="fs", k=3, m=1, xt=list(bs = "tp")),
                           data=pharDF,
                           method="ML", 
                           AR.start=pharDF$start, rho=rho_est, nthreads = ncores, discrete = TRUE))

mdl.sys.time3
utilisateur     système      écoulé 
  21433.768     179.089   12276.728 
mdl.sys.time4 <- system.time(phar.gam.AR.ML.Min.Context <- bam(y ~ vowel.ord +
                                      # 1d smooths
                                      s(Fan, bs="cr",k=10) +
                                      s(time, bs="cr", k=3) +
                                      # 1d smooth * factor
                                      ##s(Fan, k=10, bs="cr", by=context.ord) +
                                      s(Fan, k=10, bs="cr", by=vowel.ord) +
                                      ##s(Fan, k=10, bs="cr", by=context.ord:vowel.ord) +
                                      ##s(time, k=3, bs="cr", by=context.ord) +
                                      s(time, k=3, bs="cr", by=vowel.ord) +
                                      ##s(time, k=3, bs="cr", by=context.ord:vowel.ord) +
                                      # 2d smooth
                                      ti(Fan, time, bs="cr", k=c(10,3))+
                                      ##ti(Fan, time, bs="cr", k=c(10,3),by=context.ord)+
                                      ###ti(Fan, time, bs="cr", k=c(10,3),by=vowel.ord)+
                                      ##ti(Fan, time, bs="cr", k=c(10,3),by=context.ord:vowel.ord)+                      
                                      # random smooths by word
                                      s(Fan, word, bs="fs", k=10, m=1, xt=list(bs = "tp")) +
                                      s(time, word, bs="fs", k=3, m=1, xt=list(bs = "tp")),
                                      data=pharDF,
                                      method="ML", 
                                      AR.start=pharDF$start, rho=rho_est, nthreads = ncores, discrete = TRUE))
mdl.sys.time4
utilisateur     système      écoulé 
    474.920       7.668     251.698 
mdl.sys.time5 <- system.time(phar.gam.AR.ML.Min.ContextAndVowel <- bam(y ~ 1 +
                                    # 1d smooths
                                    s(Fan, bs="cr",k=10) +
                                    s(time, bs="cr", k=3) +
                                    # 1d smooth * factor
                                    ##s(Fan, k=10, bs="cr", by=context.ord) +
                                    ###s(Fan, k=10, bs="cr", by=vowel.ord) +
                                    ##s(Fan, k=10, bs="cr", by=context.ord:vowel.ord) +
                                    ##s(time, k=3, bs="cr", by=context.ord) +
                                    ###s(time, k=3, bs="cr", by=vowel.ord) +
                                    ##s(time, k=3, bs="cr", by=context.ord:vowel.ord) +
                                    # 2d smooth
                                    ##ti(Fan, time, bs="cr", k=c(10,3),by=context.ord)+
                                    ###ti(Fan, time, bs="cr", k=c(10,3),by=vowel.ord)+
                                    ##ti(Fan, time, bs="cr", k=c(10,3),by=context.ord:vowel.ord)+                      
                                    # random smooths by word
                                    s(Fan, word, bs="fs", k=10, m=1, xt=list(bs = "tp")) +
                                    s(time, word, bs="fs", k=3, m=1, xt=list(bs = "tp")),
                                    data=pharDF,
                                    method="ML", 
                                    AR.start=pharDF$start, rho=rho_est, nthreads = ncores, discrete = TRUE))
mdl.sys.time5
utilisateur     système      écoulé 
    832.054      13.665     387.945 

3.5.2 Model comparison

Then we compare results of these models as shown below.

3.5.2.1 Effect of Context vs null

compareML(phar.gam.AR.ML, phar.gam.AR.ML.Min.Context)
phar.gam.AR.ML: y ~ context.ord * vowel.ord + s(Fan, bs = "cr", k = 10) + s(time, 
    bs = "cr", k = 3) + s(Fan, k = 10, bs = "cr", by = context.ord) + 
    s(Fan, k = 10, bs = "cr", by = vowel.ord) + s(Fan, k = 10, 
    bs = "cr", by = interaction(context.ord, vowel.ord)) + s(time, 
    k = 3, bs = "cr", by = context.ord) + s(time, k = 3, bs = "cr", 
    by = vowel.ord) + s(time, k = 3, bs = "cr", by = interaction(context.ord, 
    vowel.ord)) + ti(Fan, time, bs = "cr", k = c(10, 3)) + ti(Fan, 
    time, bs = "cr", k = c(10, 3), by = context.ord) + ti(Fan, 
    time, bs = "cr", k = c(10, 3), by = vowel.ord) + ti(Fan, 
    time, bs = "cr", k = c(10, 3), by = interaction(context.ord, 
        vowel.ord)) + s(Fan, word, bs = "fs", k = 10, m = 1, 
    xt = list(bs = "tp")) + s(time, word, bs = "fs", k = 3, m = 1, 
    xt = list(bs = "tp"))

phar.gam.AR.ML.Min.Context: y ~ vowel.ord + s(Fan, bs = "cr", k = 10) + s(time, bs = "cr", 
    k = 3) + s(Fan, k = 10, bs = "cr", by = vowel.ord) + s(time, 
    k = 3, bs = "cr", by = vowel.ord) + ti(Fan, time, bs = "cr", 
    k = c(10, 3)) + s(Fan, word, bs = "fs", k = 10, m = 1, xt = list(bs = "tp")) + 
    s(time, word, bs = "fs", k = 3, m = 1, xt = list(bs = "tp"))

Chi-square test of ML scores
-----

AIC difference: -2736.64, model phar.gam.AR.ML has lower AIC.

3.5.2.2 Effect of Vowel vs Null

compareML(phar.gam.AR.ML,phar.gam.AR.ML.Min.ContextAndVowel)
phar.gam.AR.ML: y ~ context.ord * vowel.ord + s(Fan, bs = "cr", k = 10) + s(time, 
    bs = "cr", k = 3) + s(Fan, k = 10, bs = "cr", by = context.ord) + 
    s(Fan, k = 10, bs = "cr", by = vowel.ord) + s(Fan, k = 10, 
    bs = "cr", by = interaction(context.ord, vowel.ord)) + s(time, 
    k = 3, bs = "cr", by = context.ord) + s(time, k = 3, bs = "cr", 
    by = vowel.ord) + s(time, k = 3, bs = "cr", by = interaction(context.ord, 
    vowel.ord)) + ti(Fan, time, bs = "cr", k = c(10, 3)) + ti(Fan, 
    time, bs = "cr", k = c(10, 3), by = context.ord) + ti(Fan, 
    time, bs = "cr", k = c(10, 3), by = vowel.ord) + ti(Fan, 
    time, bs = "cr", k = c(10, 3), by = interaction(context.ord, 
        vowel.ord)) + s(Fan, word, bs = "fs", k = 10, m = 1, 
    xt = list(bs = "tp")) + s(time, word, bs = "fs", k = 3, m = 1, 
    xt = list(bs = "tp"))

phar.gam.AR.ML.Min.ContextAndVowel: y ~ 1 + s(Fan, bs = "cr", k = 10) + s(time, bs = "cr", k = 3) + 
    s(Fan, word, bs = "fs", k = 10, m = 1, xt = list(bs = "tp")) + 
    s(time, word, bs = "fs", k = 3, m = 1, xt = list(bs = "tp"))

Chi-square test of ML scores
-----

AIC difference: -3053.28, model phar.gam.AR.ML has lower AIC.

3.5.2.3 Effect of Context vs Vowel

compareML(phar.gam.AR.ML.Min.Context,phar.gam.AR.ML.Min.ContextAndVowel)
phar.gam.AR.ML.Min.Context: y ~ vowel.ord + s(Fan, bs = "cr", k = 10) + s(time, bs = "cr", 
    k = 3) + s(Fan, k = 10, bs = "cr", by = vowel.ord) + s(time, 
    k = 3, bs = "cr", by = vowel.ord) + ti(Fan, time, bs = "cr", 
    k = c(10, 3)) + s(Fan, word, bs = "fs", k = 10, m = 1, xt = list(bs = "tp")) + 
    s(time, word, bs = "fs", k = 3, m = 1, xt = list(bs = "tp"))

phar.gam.AR.ML.Min.ContextAndVowel: y ~ 1 + s(Fan, bs = "cr", k = 10) + s(time, bs = "cr", k = 3) + 
    s(Fan, word, bs = "fs", k = 10, m = 1, xt = list(bs = "tp")) + 
    s(time, word, bs = "fs", k = 3, m = 1, xt = list(bs = "tp"))

Chi-square test of ML scores
-----

AIC difference: -316.64, model phar.gam.AR.ML.Min.Context has lower AIC.

From the results above, both “context” and “vowel” are improving the model fit. “Context” is improving the model fit more than “vowel” (see 3rd comparison)

3.6 Visualising smooths from second Autoregressive GAM

We use the function itsadug::plot_smooth to plot the five smooths for context “plain”, “velar”, “uvular”, “pharyngealised” and “pharyngeal”, in each of the vowel contexts /i: a: u:/ at the onset, midpoint and offset.

The results show that at the midpoint and offset, the three contexts, uvular, pharyngealised and pharyngeal are different from each other: uvular has a higher tongue position (y coordinate); intermediate in pharyngealised and lower and fronted in pharyngeal. At the onset, the same pattern is seen though to a lower degree in /a:/.

3.6.1 Vowel /i:/

3.6.1.1 Onset

plot_smooth(phar.gam.AR, view = "Fan",cond = list(context.ord="plain",vowel.ord="ii",time=1),col="darkmagenta",ylim = c(10,65),ylab="",xlab="",
            main="GAM smooths in /i:/ at Onset",hide.label=T,cex.axis=1.3,rm.ranef=T)
Summary:
    * context.ord : factor; set to the value(s): plain. 
    * vowel.ord : factor; set to the value(s): ii. 
    * Fan : numeric predictor; with 30 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 1. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 
plot_smooth(phar.gam.AR, view = "Fan",cond = list(context.ord="velar",vowel.ord="ii",time=1),col="gray70",add=TRUE,ylim = c(10,65),hide.label=T,cex.axis=1.3,rm.ranef=T)
Summary:
    * context.ord : factor; set to the value(s): velar. 
    * vowel.ord : factor; set to the value(s): ii. 
    * Fan : numeric predictor; with 30 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 1. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 
plot_smooth(phar.gam.AR, view = "Fan",cond = list(context.ord="uvular",vowel.ord="ii",time=1),col="green",add=TRUE,ylim = c(10,65),hide.label=T,cex.axis=1.3,rm.ranef=T)
Summary:
    * context.ord : factor; set to the value(s): uvular. 
    * vowel.ord : factor; set to the value(s): ii. 
    * Fan : numeric predictor; with 30 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 1. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 
plot_smooth(phar.gam.AR, view = "Fan",cond = list(context.ord="pharyngealised",vowel.ord="ii",time=1),col="red",add=TRUE,ylim = c(10,65),hide.label=T,cex.axis=1.3,rm.ranef=T)
Summary:
    * context.ord : factor; set to the value(s): pharyngealised. 
    * vowel.ord : factor; set to the value(s): ii. 
    * Fan : numeric predictor; with 30 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 1. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 
plot_smooth(phar.gam.AR, view = "Fan",cond = list(context.ord="pharyngeal",vowel.ord="ii",time=1),col="blue",add=TRUE,ylim = c(10,65),hide.label=T,cex.axis=1.3,rm.ranef=T)
Summary:
    * context.ord : factor; set to the value(s): pharyngeal. 
    * vowel.ord : factor; set to the value(s): ii. 
    * Fan : numeric predictor; with 30 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 1. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 
legend("topleft", legend=c("Plain", "Velar", "Uvular","Pharyngealised","Pharyngeal"), 
       col=c("darkmagenta","gray70","green","red","blue"), lwd=4)

3.6.1.2 Midpoint

plot_smooth(phar.gam.AR, view = "Fan",cond = list(context.ord="plain",vowel.ord="ii",time=2),col="darkmagenta",ylim = c(10,65),ylab="",xlab="",
            main="GAM smooths in /i:/ at Mid",hide.label=T,cex.axis=1.3,rm.ranef=T)
Summary:
    * context.ord : factor; set to the value(s): plain. 
    * vowel.ord : factor; set to the value(s): ii. 
    * Fan : numeric predictor; with 30 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 2. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 
plot_smooth(phar.gam.AR, view = "Fan",cond = list(context.ord="velar",vowel.ord="ii",time=2),col="gray70",add=TRUE,ylim = c(10,65),hide.label=T,cex.axis=1.3,rm.ranef=T)
Summary:
    * context.ord : factor; set to the value(s): velar. 
    * vowel.ord : factor; set to the value(s): ii. 
    * Fan : numeric predictor; with 30 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 2. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 
plot_smooth(phar.gam.AR, view = "Fan",cond = list(context.ord="uvular",vowel.ord="ii",time=2),col="green",add=TRUE,ylim = c(10,65),hide.label=T,cex.axis=1.3,rm.ranef=T)
Summary:
    * context.ord : factor; set to the value(s): uvular. 
    * vowel.ord : factor; set to the value(s): ii. 
    * Fan : numeric predictor; with 30 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 2. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 
plot_smooth(phar.gam.AR, view = "Fan",cond = list(context.ord="pharyngealised",vowel.ord="ii",time=2),col="red",add=TRUE,ylim = c(10,65),hide.label=T,cex.axis=1.3,rm.ranef=T)
Summary:
    * context.ord : factor; set to the value(s): pharyngealised. 
    * vowel.ord : factor; set to the value(s): ii. 
    * Fan : numeric predictor; with 30 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 2. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 
plot_smooth(phar.gam.AR, view = "Fan",cond = list(context.ord="pharyngeal",vowel.ord="ii",time=2),col="blue",add=TRUE,ylim = c(10,65),hide.label=T,cex.axis=1.3,rm.ranef=T)
Summary:
    * context.ord : factor; set to the value(s): pharyngeal. 
    * vowel.ord : factor; set to the value(s): ii. 
    * Fan : numeric predictor; with 30 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 2. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 
legend("topleft", legend=c("Plain", "Velar", "Uvular","Pharyngealised","Pharyngeal"), 
       col=c("darkmagenta","gray70","green","red","blue"), lwd=4)

3.6.1.3 Offset

plot_smooth(phar.gam.AR, view = "Fan",cond = list(context.ord="plain",vowel.ord="ii",time=3),col="darkmagenta",ylim = c(10,65),ylab="",xlab="",
            main="GAM smooths in /i:/ at Offset",hide.label=T,cex.axis=1.3,rm.ranef=T)
Summary:
    * context.ord : factor; set to the value(s): plain. 
    * vowel.ord : factor; set to the value(s): ii. 
    * Fan : numeric predictor; with 30 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 3. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 
plot_smooth(phar.gam.AR, view = "Fan",cond = list(context.ord="velar",vowel.ord="ii",time=3),col="gray70",add=TRUE,ylim = c(10,65),hide.label=T,cex.axis=1.3,rm.ranef=T)
Summary:
    * context.ord : factor; set to the value(s): velar. 
    * vowel.ord : factor; set to the value(s): ii. 
    * Fan : numeric predictor; with 30 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 3. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 
plot_smooth(phar.gam.AR, view = "Fan",cond = list(context.ord="uvular",vowel.ord="ii",time=3),col="green",add=TRUE,ylim = c(10,65),hide.label=T,cex.axis=1.3,rm.ranef=T)
Summary:
    * context.ord : factor; set to the value(s): uvular. 
    * vowel.ord : factor; set to the value(s): ii. 
    * Fan : numeric predictor; with 30 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 3. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 
plot_smooth(phar.gam.AR, view = "Fan",cond = list(context.ord="pharyngealised",vowel.ord="ii",time=3),col="red",add=TRUE,ylim = c(10,65),hide.label=T,cex.axis=1.3,rm.ranef=T)
Summary:
    * context.ord : factor; set to the value(s): pharyngealised. 
    * vowel.ord : factor; set to the value(s): ii. 
    * Fan : numeric predictor; with 30 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 3. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 
plot_smooth(phar.gam.AR, view = "Fan",cond = list(context.ord="pharyngeal",vowel.ord="ii",time=3),col="blue",add=TRUE,ylim = c(10,65),hide.label=T,cex.axis=1.3,rm.ranef=T)
Summary:
    * context.ord : factor; set to the value(s): pharyngeal. 
    * vowel.ord : factor; set to the value(s): ii. 
    * Fan : numeric predictor; with 30 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 3. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 
legend("topleft", legend=c("Plain", "Velar", "Uvular","Pharyngealised","Pharyngeal"), 
       col=c("darkmagenta","gray70","green","red","blue"), lwd=4)

3.6.2 Vowel /a:/

3.6.2.1 Onset

plot_smooth(phar.gam.AR, view = "Fan",cond = list(context.ord="plain",vowel.ord="aa",time=1),col="darkmagenta",ylim = c(10,65),ylab="",xlab="",
            main="GAM smooths in /a:/ at Onset",hide.label=T,cex.axis=1.3,rm.ranef=T)
Summary:
    * context.ord : factor; set to the value(s): plain. 
    * vowel.ord : factor; set to the value(s): aa. 
    * Fan : numeric predictor; with 30 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 1. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 
plot_smooth(phar.gam.AR, view = "Fan",cond = list(context.ord="velar",vowel.ord="aa",time=1),col="gray70",add=TRUE,ylim = c(10,65),hide.label=T,cex.axis=1.3,rm.ranef=T)
Summary:
    * context.ord : factor; set to the value(s): velar. 
    * vowel.ord : factor; set to the value(s): aa. 
    * Fan : numeric predictor; with 30 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 1. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 
plot_smooth(phar.gam.AR, view = "Fan",cond = list(context.ord="uvular",vowel.ord="aa",time=1),col="green",add=TRUE,ylim = c(10,65),hide.label=T,cex.axis=1.3,rm.ranef=T)
Summary:
    * context.ord : factor; set to the value(s): uvular. 
    * vowel.ord : factor; set to the value(s): aa. 
    * Fan : numeric predictor; with 30 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 1. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 
plot_smooth(phar.gam.AR, view = "Fan",cond = list(context.ord="pharyngealised",vowel.ord="aa",time=1),col="red",add=TRUE,ylim = c(10,65),hide.label=T,cex.axis=1.3,rm.ranef=T)
Summary:
    * context.ord : factor; set to the value(s): pharyngealised. 
    * vowel.ord : factor; set to the value(s): aa. 
    * Fan : numeric predictor; with 30 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 1. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 
plot_smooth(phar.gam.AR, view = "Fan",cond = list(context.ord="pharyngeal",vowel.ord="aa",time=1),col="blue",add=TRUE,ylim = c(10,65),hide.label=T,cex.axis=1.3,rm.ranef=T)
Summary:
    * context.ord : factor; set to the value(s): pharyngeal. 
    * vowel.ord : factor; set to the value(s): aa. 
    * Fan : numeric predictor; with 30 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 1. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 
legend("topleft", legend=c("Plain", "Velar", "Uvular","Pharyngealised","Pharyngeal"), 
       col=c("darkmagenta","gray70","green","red","blue"), lwd=4)

3.6.2.2 Midpoint

plot_smooth(phar.gam.AR, view = "Fan",cond = list(context.ord="plain",vowel.ord="aa",time=2),col="darkmagenta",ylim = c(10,65),ylab="",xlab="",
            main="GAM smooths in /a:/ at Mid",hide.label=T,cex.axis=1.3,rm.ranef=T)
Summary:
    * context.ord : factor; set to the value(s): plain. 
    * vowel.ord : factor; set to the value(s): aa. 
    * Fan : numeric predictor; with 30 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 2. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 
plot_smooth(phar.gam.AR, view = "Fan",cond = list(context.ord="velar",vowel.ord="aa",time=2),col="gray70",add=TRUE,ylim = c(10,65),hide.label=T,cex.axis=1.3,rm.ranef=T)
Summary:
    * context.ord : factor; set to the value(s): velar. 
    * vowel.ord : factor; set to the value(s): aa. 
    * Fan : numeric predictor; with 30 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 2. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 
plot_smooth(phar.gam.AR, view = "Fan",cond = list(context.ord="uvular",vowel.ord="aa",time=2),col="green",add=TRUE,ylim = c(10,65),hide.label=T,cex.axis=1.3,rm.ranef=T)
Summary:
    * context.ord : factor; set to the value(s): uvular. 
    * vowel.ord : factor; set to the value(s): aa. 
    * Fan : numeric predictor; with 30 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 2. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 
plot_smooth(phar.gam.AR, view = "Fan",cond = list(context.ord="pharyngealised",vowel.ord="aa",time=2),col="red",add=TRUE,ylim = c(10,65),hide.label=T,cex.axis=1.3,rm.ranef=T)
Summary:
    * context.ord : factor; set to the value(s): pharyngealised. 
    * vowel.ord : factor; set to the value(s): aa. 
    * Fan : numeric predictor; with 30 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 2. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 
plot_smooth(phar.gam.AR, view = "Fan",cond = list(context.ord="pharyngeal",vowel.ord="aa",time=2),col="blue",add=TRUE,ylim = c(10,65),hide.label=T,cex.axis=1.3,rm.ranef=T)
Summary:
    * context.ord : factor; set to the value(s): pharyngeal. 
    * vowel.ord : factor; set to the value(s): aa. 
    * Fan : numeric predictor; with 30 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 2. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 
legend("topleft", legend=c("Plain", "Velar", "Uvular","Pharyngealised","Pharyngeal"), 
       col=c("darkmagenta","gray70","green","red","blue"), lwd=4)

3.6.2.3 Offset

plot_smooth(phar.gam.AR, view = "Fan",cond = list(context.ord="plain",vowel.ord="aa",time=3),col="darkmagenta",ylim = c(10,65),ylab="",xlab="",
            main="GAM smooths in /a:/ at Offset",hide.label=T,cex.axis=1.3,rm.ranef=T)
Summary:
    * context.ord : factor; set to the value(s): plain. 
    * vowel.ord : factor; set to the value(s): aa. 
    * Fan : numeric predictor; with 30 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 3. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 
plot_smooth(phar.gam.AR, view = "Fan",cond = list(context.ord="velar",vowel.ord="aa",time=3),col="gray70",add=TRUE,ylim = c(10,65),hide.label=T,cex.axis=1.3,rm.ranef=T)
Summary:
    * context.ord : factor; set to the value(s): velar. 
    * vowel.ord : factor; set to the value(s): aa. 
    * Fan : numeric predictor; with 30 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 3. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 
plot_smooth(phar.gam.AR, view = "Fan",cond = list(context.ord="uvular",vowel.ord="aa",time=3),col="green",add=TRUE,ylim = c(10,65),hide.label=T,cex.axis=1.3,rm.ranef=T)
Summary:
    * context.ord : factor; set to the value(s): uvular. 
    * vowel.ord : factor; set to the value(s): aa. 
    * Fan : numeric predictor; with 30 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 3. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 
plot_smooth(phar.gam.AR, view = "Fan",cond = list(context.ord="pharyngealised",vowel.ord="aa",time=3),col="red",add=TRUE,ylim = c(10,65),hide.label=T,cex.axis=1.3,rm.ranef=T)
Summary:
    * context.ord : factor; set to the value(s): pharyngealised. 
    * vowel.ord : factor; set to the value(s): aa. 
    * Fan : numeric predictor; with 30 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 3. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 
plot_smooth(phar.gam.AR, view = "Fan",cond = list(context.ord="pharyngeal",vowel.ord="aa",time=3),col="blue",add=TRUE,ylim = c(10,65),hide.label=T,cex.axis=1.3,rm.ranef=T)
Summary:
    * context.ord : factor; set to the value(s): pharyngeal. 
    * vowel.ord : factor; set to the value(s): aa. 
    * Fan : numeric predictor; with 30 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 3. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 
legend("topleft", legend=c("Plain", "Velar", "Uvular","Pharyngealised","Pharyngeal"), 
       col=c("darkmagenta","gray70","green","red","blue"), lwd=4)

3.6.3 Vowel /u:/

3.6.3.1 Onset

plot_smooth(phar.gam.AR, view = "Fan",cond = list(context.ord="plain",vowel.ord="uu",time=1),col="darkmagenta",ylim = c(10,65),ylab="",xlab="",
            main="GAM smooths in /u:/ at Onset",hide.label=T,cex.axis=1.3,rm.ranef=T)
Summary:
    * context.ord : factor; set to the value(s): plain. 
    * vowel.ord : factor; set to the value(s): uu. 
    * Fan : numeric predictor; with 30 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 1. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 
plot_smooth(phar.gam.AR, view = "Fan",cond = list(context.ord="velar",vowel.ord="uu",time=1),col="gray70",add=TRUE,ylim = c(10,65),hide.label=T,cex.axis=1.3,rm.ranef=T)
Summary:
    * context.ord : factor; set to the value(s): velar. 
    * vowel.ord : factor; set to the value(s): uu. 
    * Fan : numeric predictor; with 30 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 1. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 
plot_smooth(phar.gam.AR, view = "Fan",cond = list(context.ord="uvular",vowel.ord="uu",time=1),col="green",add=TRUE,ylim = c(10,65),hide.label=T,cex.axis=1.3,rm.ranef=T)
Summary:
    * context.ord : factor; set to the value(s): uvular. 
    * vowel.ord : factor; set to the value(s): uu. 
    * Fan : numeric predictor; with 30 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 1. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 
plot_smooth(phar.gam.AR, view = "Fan",cond = list(context.ord="pharyngealised",vowel.ord="uu",time=1),col="red",add=TRUE,ylim = c(10,65),hide.label=T,cex.axis=1.3,rm.ranef=T)
Summary:
    * context.ord : factor; set to the value(s): pharyngealised. 
    * vowel.ord : factor; set to the value(s): uu. 
    * Fan : numeric predictor; with 30 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 1. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 
plot_smooth(phar.gam.AR, view = "Fan",cond = list(context.ord="pharyngeal",vowel.ord="uu",time=1),col="blue",add=TRUE,ylim = c(10,65),hide.label=T,cex.axis=1.3,rm.ranef=T)
Summary:
    * context.ord : factor; set to the value(s): pharyngeal. 
    * vowel.ord : factor; set to the value(s): uu. 
    * Fan : numeric predictor; with 30 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 1. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 
legend("topleft", legend=c("Plain", "Velar", "Uvular","Pharyngealised","Pharyngeal"), 
       col=c("darkmagenta","gray70","green","red","blue"), lwd=4)

3.6.3.2 Midpoint

plot_smooth(phar.gam.AR, view = "Fan",cond = list(context.ord="plain",vowel.ord="uu",time=2),col="darkmagenta",ylim = c(10,65),ylab="",xlab="",
            main="GAM smooths in /u:/ at Mid",hide.label=T,cex.axis=1.3,rm.ranef=T)
Summary:
    * context.ord : factor; set to the value(s): plain. 
    * vowel.ord : factor; set to the value(s): uu. 
    * Fan : numeric predictor; with 30 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 2. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 
plot_smooth(phar.gam.AR, view = "Fan",cond = list(context.ord="velar",vowel.ord="uu",time=2),col="gray70",add=TRUE,ylim = c(10,65),hide.label=T,cex.axis=1.3,rm.ranef=T)
Summary:
    * context.ord : factor; set to the value(s): velar. 
    * vowel.ord : factor; set to the value(s): uu. 
    * Fan : numeric predictor; with 30 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 2. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 
plot_smooth(phar.gam.AR, view = "Fan",cond = list(context.ord="uvular",vowel.ord="uu",time=2),col="green",add=TRUE,ylim = c(10,65),hide.label=T,cex.axis=1.3,rm.ranef=T)
Summary:
    * context.ord : factor; set to the value(s): uvular. 
    * vowel.ord : factor; set to the value(s): uu. 
    * Fan : numeric predictor; with 30 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 2. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 
plot_smooth(phar.gam.AR, view = "Fan",cond = list(context.ord="pharyngealised",vowel.ord="uu",time=2),col="red",add=TRUE,ylim = c(10,65),hide.label=T,cex.axis=1.3,rm.ranef=T)
Summary:
    * context.ord : factor; set to the value(s): pharyngealised. 
    * vowel.ord : factor; set to the value(s): uu. 
    * Fan : numeric predictor; with 30 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 2. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 
plot_smooth(phar.gam.AR, view = "Fan",cond = list(context.ord="pharyngeal",vowel.ord="uu",time=2),col="blue",add=TRUE,ylim = c(10,65),hide.label=T,cex.axis=1.3,rm.ranef=T)
Summary:
    * context.ord : factor; set to the value(s): pharyngeal. 
    * vowel.ord : factor; set to the value(s): uu. 
    * Fan : numeric predictor; with 30 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 2. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 
legend("topleft", legend=c("Plain", "Velar", "Uvular","Pharyngealised","Pharyngeal"), 
       col=c("darkmagenta","gray70","green","red","blue"), lwd=4)

3.6.3.3 Offset


plot_smooth(phar.gam.AR, view = "Fan",cond = list(context.ord="plain",vowel.ord="uu",time=3),col="darkmagenta",ylim = c(10,65),ylab="",xlab="",
            main="GAM smooths in /u:/ at Offset",hide.label=T,cex.axis=1.3,rm.ranef=T)
Summary:
    * context.ord : factor; set to the value(s): plain. 
    * vowel.ord : factor; set to the value(s): uu. 
    * Fan : numeric predictor; with 30 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 3. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 
plot_smooth(phar.gam.AR, view = "Fan",cond = list(context.ord="velar",vowel.ord="uu",time=3),col="gray70",add=TRUE,ylim = c(10,65),hide.label=T,cex.axis=1.3,rm.ranef=T)
Summary:
    * context.ord : factor; set to the value(s): velar. 
    * vowel.ord : factor; set to the value(s): uu. 
    * Fan : numeric predictor; with 30 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 3. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 
plot_smooth(phar.gam.AR, view = "Fan",cond = list(context.ord="uvular",vowel.ord="uu",time=3),col="green",add=TRUE,ylim = c(10,65),hide.label=T,cex.axis=1.3,rm.ranef=T)
Summary:
    * context.ord : factor; set to the value(s): uvular. 
    * vowel.ord : factor; set to the value(s): uu. 
    * Fan : numeric predictor; with 30 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 3. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 
plot_smooth(phar.gam.AR, view = "Fan",cond = list(context.ord="pharyngealised",vowel.ord="uu",time=3),col="red",add=TRUE,ylim = c(10,65),hide.label=T,cex.axis=1.3,rm.ranef=T)
Summary:
    * context.ord : factor; set to the value(s): pharyngealised. 
    * vowel.ord : factor; set to the value(s): uu. 
    * Fan : numeric predictor; with 30 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 3. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 
plot_smooth(phar.gam.AR, view = "Fan",cond = list(context.ord="pharyngeal",vowel.ord="uu",time=3),col="blue",add=TRUE,ylim = c(10,65),hide.label=T,cex.axis=1.3,rm.ranef=T)
Summary:
    * context.ord : factor; set to the value(s): pharyngeal. 
    * vowel.ord : factor; set to the value(s): uu. 
    * Fan : numeric predictor; with 30 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 3. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 
legend("topleft", legend=c("Plain", "Velar", "Uvular","Pharyngealised","Pharyngeal"), 
       col=c("darkmagenta","gray70","green","red","blue"), lwd=4)

NA
NA

3.7 Visualising Difference smooths from second Autoregressive GAM

We use the function itsadug::plot_diff to plot the differences between the following pairs: “pharyngealised” vs “plain”; “uvular” vs “pharyngealised” and “pharyngealised” vs “pharyngeal”, in each of the vowel contexts /i: a: u:/ at the onset, midpoint and offset.

The results show that:

  1. Pharyngealised vs Plain: pharyngealised is different in tongue shape. There is an increase in y coordinates (Fan 15-22) indicating “retraction”, decrease (Fan 25-35) indicating “depression” of the tongue and potential difference in larynx height (Fan 5-10)
  2. Uvular vs Pharyngealised: differences depend of vowels (Fan 15-34): uvular is fronter in /i:/ (Fan 22-34); “raised” in /a:/ (Fan 22-28) and /u:/ (Fan 15-25)
  3. Pharyngealised vs Pharyngeal: Pharyngealised is “retracted”/backed to mid-position (Fan 15-25), with “depression” of the tongue (Fan 22-35) and potential lowered larynx (Fan 5-10).

3.7.1 Pharyngealised vs Plain

3.7.1.1 Onset

par(oma=c(1, 0, 0, 3.5),mgp=c(2, 1, 0))
plot_diff(phar.gam.AR, view="Fan",comp=list(context.ord=c("pharyngealised","plain")),
          xlab="",cond=list(time=1,vowel.ord="ii"),main = "difference pharyngealised vs plain Onset",
          col='green',cex.main=1.1,mark.diff = TRUE,col.diff = "green",
          ylim=c(-15,15),hide.label=T,rm.ranef=T)
Summary:
    * vowel.ord : factor; set to the value(s): ii. 
    * Fan : numeric predictor; with 100 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 1. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 

Fan window(s) of significant difference(s):
    10.939394 - 23.363636
    26.262626 - 38.686869
plot_diff(phar.gam.AR, view="Fan",comp=list(context.ord=c("pharyngealised","plain")),
          xlab="",cond=list(time=1,vowel.ord="aa"),add=TRUE,
          col='red',mark.diff =  TRUE,col.diff = "red",
          ylim=c(-15,15),hide.label=T,rm.ranef=T)
Summary:
    * vowel.ord : factor; set to the value(s): aa. 
    * Fan : numeric predictor; with 100 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 1. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 

Fan window(s) of significant difference(s):
    11.353535 - 22.535354
    25.434343 - 35.373737
plot_diff(phar.gam.AR, view="Fan",comp=list(context.ord=c("pharyngealised","plain")),
          xlab="",cond=list(time=1,vowel.ord="uu"),add=TRUE,
          col='blue',mark.diff =  TRUE,col.diff = "blue",
          ylim=c(-15,15),hide.label=T,rm.ranef=T)
Summary:
    * vowel.ord : factor; set to the value(s): uu. 
    * Fan : numeric predictor; with 100 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 1. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 

Fan window(s) of significant difference(s):
    4.313131 - 9.282828
    15.080808 - 23.363636
    25.848485 - 37.858586
legend(par('usr')[2], par('usr')[4], bty='n', xpd=NA,lty=1, 
       legend=c("/i:/", "/a:/", "/u:/"),col=c("green","red","blue"), lwd=4, cex=1.2)

3.7.1.2 Midpoint

par(oma=c(1, 0, 0, 3.5),mgp=c(2, 1, 0))
plot_diff(phar.gam.AR, view="Fan",comp=list(context.ord=c("pharyngealised","plain")),
          xlab="",cond=list(time=2,vowel.ord="ii"),main = "difference pharyngealised vs plain Midpoint",
          col='green',cex.main=1.1,mark.diff = TRUE,col.diff = "green",
          ylim=c(-15,15),hide.label=T,rm.ranef=T)
Summary:
    * vowel.ord : factor; set to the value(s): ii. 
    * Fan : numeric predictor; with 100 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 2. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 

Fan window(s) of significant difference(s):
    4.727273 - 24.191919
    25.848485 - 41.171717
plot_diff(phar.gam.AR, view="Fan",comp=list(context.ord=c("pharyngealised","plain")),
          xlab="",cond=list(time=2,vowel.ord="aa"),add=TRUE,
          col='red',mark.diff =  TRUE,col.diff = "red",
          ylim=c(-15,15),hide.label=T,rm.ranef=T)
Summary:
    * vowel.ord : factor; set to the value(s): aa. 
    * Fan : numeric predictor; with 100 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 2. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 

Fan window(s) of significant difference(s):
    13.838384 - 23.363636
    25.848485 - 36.616162
plot_diff(phar.gam.AR, view="Fan",comp=list(context.ord=c("pharyngealised","plain")),
          xlab="",cond=list(time=2,vowel.ord="uu"),add=TRUE,
          col='blue',mark.diff =  TRUE,col.diff = "blue",
          ylim=c(-15,15),hide.label=T,rm.ranef=T)
Summary:
    * vowel.ord : factor; set to the value(s): uu. 
    * Fan : numeric predictor; with 100 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 2. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 

Fan window(s) of significant difference(s):
    5.141414 - 8.454545
    15.080808 - 24.191919
    26.676768 - 39.515152
legend(par('usr')[2], par('usr')[4], bty='n', xpd=NA,lty=1, 
       legend=c("/i:/", "/a:/", "/u:/"),col=c("green","red","blue"), lwd=4, cex=1.2)

3.7.1.3 Offset

par(oma=c(1, 0, 0, 3.5),mgp=c(2, 1, 0))
plot_diff(phar.gam.AR, view="Fan",comp=list(context.ord=c("pharyngealised","plain")),
          xlab="",cond=list(time=3,vowel.ord="ii"),main = "difference pharyngealised vs plain Offset",
          col='green',cex.main=1.1,mark.diff = TRUE,col.diff = "green",
          ylim=c(-15,15),hide.label=T,rm.ranef=T)
Summary:
    * vowel.ord : factor; set to the value(s): ii. 
    * Fan : numeric predictor; with 100 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 3. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 

Fan window(s) of significant difference(s):
    5.969697 - 25.020202
    26.676768 - 41.171717
plot_diff(phar.gam.AR, view="Fan",comp=list(context.ord=c("pharyngealised","plain")),
          xlab="",cond=list(time=3,vowel.ord="aa"),add=TRUE,
          col='red',mark.diff =  TRUE,col.diff = "red",
          ylim=c(-15,15),hide.label=T,rm.ranef=T)
Summary:
    * vowel.ord : factor; set to the value(s): aa. 
    * Fan : numeric predictor; with 100 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 3. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 

Fan window(s) of significant difference(s):
    1.828283 - 6.797980
    14.666667 - 23.363636
    26.262626 - 34.959596
plot_diff(phar.gam.AR, view="Fan",comp=list(context.ord=c("pharyngealised","plain")),
          xlab="",cond=list(time=3,vowel.ord="uu"),add=TRUE,
          col='blue',mark.diff =  TRUE,col.diff = "blue",
          ylim=c(-15,15),hide.label=T,rm.ranef=T)
Summary:
    * vowel.ord : factor; set to the value(s): uu. 
    * Fan : numeric predictor; with 100 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 3. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 

Fan window(s) of significant difference(s):
    14.252525 - 23.777778
    26.676768 - 38.686869
legend(par('usr')[2], par('usr')[4], bty='n', xpd=NA,lty=1, 
       legend=c("/i:/", "/a:/", "/u:/"),col=c("green","red","blue"), lwd=4, cex=1.2)

3.7.2 Uvular vs Pharyngealised

3.7.2.1 Onset

par(oma=c(1, 0, 0, 3.5),mgp=c(2, 1, 0))
plot_diff(phar.gam.AR, view="Fan",comp=list(context.ord=c("uvular","pharyngealised")),
          xlab="",cond=list(time=1,vowel.ord="ii"),main = "difference uvular vs pharyngealised Onset",
          col='green',cex.main=1.1,mark.diff = TRUE,col.diff = "green",
          ylim=c(-15,15),hide.label=T,rm.ranef=T)
Summary:
    * vowel.ord : factor; set to the value(s): ii. 
    * Fan : numeric predictor; with 100 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 1. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 

Difference is not significant.
plot_diff(phar.gam.AR, view="Fan",comp=list(context.ord=c("uvular","pharyngealised")),
          xlab="",cond=list(time=1,vowel.ord="aa"),add=TRUE,
          col='red',mark.diff =  TRUE,col.diff = "red",
          ylim=c(-15,15),hide.label=T,rm.ranef=T)
Summary:
    * vowel.ord : factor; set to the value(s): aa. 
    * Fan : numeric predictor; with 100 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 1. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 

Fan window(s) of significant difference(s):
    24.606061 - 30.404040
plot_diff(phar.gam.AR, view="Fan",comp=list(context.ord=c("uvular","pharyngealised")),
          xlab="",cond=list(time=1,vowel.ord="uu"),add=TRUE,
          col='blue',mark.diff =  TRUE,col.diff = "blue",
          ylim=c(-15,15),hide.label=T,rm.ranef=T)
Summary:
    * vowel.ord : factor; set to the value(s): uu. 
    * Fan : numeric predictor; with 100 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 1. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 

Difference is not significant.
legend(par('usr')[2], par('usr')[4], bty='n', xpd=NA,lty=1, 
       legend=c("/i:/", "/a:/", "/u:/"),col=c("green","red","blue"), lwd=4, cex=1.2)

3.7.2.2 Midpoint

par(oma=c(1, 0, 0, 3.5),mgp=c(2, 1, 0))
plot_diff(phar.gam.AR, view="Fan",comp=list(context.ord=c("uvular","pharyngealised")),
          xlab="",cond=list(time=2,vowel.ord="ii"),main = "difference uvular vs pharyngealised Midpoint",
          col='green',cex.main=1.1,mark.diff = TRUE,col.diff = "green",
          ylim=c(-15,15),hide.label=T,rm.ranef=T)
Summary:
    * vowel.ord : factor; set to the value(s): ii. 
    * Fan : numeric predictor; with 100 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 2. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 

Fan window(s) of significant difference(s):
    20.878788 - 32.474747
plot_diff(phar.gam.AR, view="Fan",comp=list(context.ord=c("uvular","pharyngealised")),
          xlab="",cond=list(time=2,vowel.ord="aa"),add=TRUE,
          col='red',mark.diff =  TRUE,col.diff = "red",
          ylim=c(-15,15),hide.label=T,rm.ranef=T)
Summary:
    * vowel.ord : factor; set to the value(s): aa. 
    * Fan : numeric predictor; with 100 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 2. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 

Fan window(s) of significant difference(s):
    19.636364 - 28.747475
    35.787879 - 37.858586
plot_diff(phar.gam.AR, view="Fan",comp=list(context.ord=c("uvular","pharyngealised")),
          xlab="",cond=list(time=2,vowel.ord="uu"),add=TRUE,
          col='blue',mark.diff =  TRUE,col.diff = "blue",
          ylim=c(-15,15),hide.label=T,rm.ranef=T)
Summary:
    * vowel.ord : factor; set to the value(s): uu. 
    * Fan : numeric predictor; with 100 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 2. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 

Fan window(s) of significant difference(s):
    18.808081 - 25.434343
legend(par('usr')[2], par('usr')[4], bty='n', xpd=NA,lty=1, 
       legend=c("/i:/", "/a:/", "/u:/"),col=c("green","red","blue"), lwd=4, cex=1.2)

3.7.2.3 Offset

par(oma=c(1, 0, 0, 3.5),mgp=c(2, 1, 0))
plot_diff(phar.gam.AR, view="Fan",comp=list(context.ord=c("uvular","pharyngealised")),
          xlab="",cond=list(time=3,vowel.ord="ii"),main = "difference uvular vs pharyngealised Offset",
          col='green',cex.main=1.1,mark.diff = TRUE,col.diff = "green",
          ylim=c(-15,15),hide.label=T,rm.ranef=T)
Summary:
    * vowel.ord : factor; set to the value(s): ii. 
    * Fan : numeric predictor; with 100 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 3. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 

Fan window(s) of significant difference(s):
    22.949495 - 33.303030
plot_diff(phar.gam.AR, view="Fan",comp=list(context.ord=c("uvular","pharyngealised")),
          xlab="",cond=list(time=3,vowel.ord="aa"),add=TRUE,
          col='red',mark.diff =  TRUE,col.diff = "red",
          ylim=c(-15,15),hide.label=T,rm.ranef=T)
Summary:
    * vowel.ord : factor; set to the value(s): aa. 
    * Fan : numeric predictor; with 100 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 3. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 

Fan window(s) of significant difference(s):
    21.707071 - 29.989899
plot_diff(phar.gam.AR, view="Fan",comp=list(context.ord=c("uvular","pharyngealised")),
          xlab="",cond=list(time=3,vowel.ord="uu"),add=TRUE,
          col='blue',mark.diff =  TRUE,col.diff = "blue",
          ylim=c(-15,15),hide.label=T,rm.ranef=T)
Summary:
    * vowel.ord : factor; set to the value(s): uu. 
    * Fan : numeric predictor; with 100 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 3. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 

Fan window(s) of significant difference(s):
    19.222222 - 25.848485
legend(par('usr')[2], par('usr')[4], bty='n', xpd=NA,lty=1, 
       legend=c("/i:/", "/a:/", "/u:/"),col=c("green","red","blue"), lwd=4, cex=1.2)

3.7.3 Pharyngealised vs Pharyngeal

3.7.3.1 Onset

par(oma=c(1, 0, 0, 3.5),mgp=c(2, 1, 0))
plot_diff(phar.gam.AR, view="Fan",comp=list(context.ord=c("pharyngealised","pharyngeal")),
          xlab="",cond=list(time=1,vowel.ord="ii"),main = "difference pharyngealised vs pharyngeal Onset",
          col='green',cex.main=1.1,mark.diff = TRUE,col.diff = "green",
          ylim=c(-15,15),hide.label=T,rm.ranef=T)
Summary:
    * vowel.ord : factor; set to the value(s): ii. 
    * Fan : numeric predictor; with 100 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 1. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 

Fan window(s) of significant difference(s):
    15.080808 - 26.262626
plot_diff(phar.gam.AR, view="Fan",comp=list(context.ord=c("pharyngealised","pharyngeal")),
          xlab="",cond=list(time=1,vowel.ord="aa"),add=TRUE,
          col='red',mark.diff =  TRUE,col.diff = "red",
          ylim=c(-15,15),hide.label=T,rm.ranef=T)
Summary:
    * vowel.ord : factor; set to the value(s): aa. 
    * Fan : numeric predictor; with 100 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 1. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 

Fan window(s) of significant difference(s):
    3.898990 - 5.141414
    13.838384 - 21.707071
    25.020202 - 36.202020
plot_diff(phar.gam.AR, view="Fan",comp=list(context.ord=c("pharyngealised","pharyngeal")),
          xlab="",cond=list(time=1,vowel.ord="uu"),add=TRUE,
          col='blue',mark.diff =  TRUE,col.diff = "blue",
          ylim=c(-15,15),hide.label=T,rm.ranef=T)
Summary:
    * vowel.ord : factor; set to the value(s): uu. 
    * Fan : numeric predictor; with 100 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 1. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 

Fan window(s) of significant difference(s):
    14.666667 - 21.707071
    27.090909 - 31.646465
legend(par('usr')[2], par('usr')[4], bty='n', xpd=NA,lty=1, 
       legend=c("/i:/", "/a:/", "/u:/"),col=c("green","red","blue"), lwd=4, cex=1.2)

3.7.3.2 Midpoint

par(oma=c(1, 0, 0, 3.5),mgp=c(2, 1, 0))
plot_diff(phar.gam.AR, view="Fan",comp=list(context.ord=c("pharyngealised","pharyngeal")),
          xlab="",cond=list(time=2,vowel.ord="ii"),main = "difference pharyngealised vs pharyngeal Midpoint",
          col='green',cex.main=1.1,mark.diff = TRUE,col.diff = "green",
          ylim=c(-15,15),hide.label=T,rm.ranef=T)
Summary:
    * vowel.ord : factor; set to the value(s): ii. 
    * Fan : numeric predictor; with 100 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 2. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 

Fan window(s) of significant difference(s):
    2.242424 - 9.696970
    15.494949 - 26.262626
    29.989899 - 38.272727
plot_diff(phar.gam.AR, view="Fan",comp=list(context.ord=c("pharyngealised","pharyngeal")),
          xlab="",cond=list(time=2,vowel.ord="aa"),add=TRUE,
          col='red',mark.diff =  TRUE,col.diff = "red",
          ylim=c(-15,15),hide.label=T,rm.ranef=T)
Summary:
    * vowel.ord : factor; set to the value(s): aa. 
    * Fan : numeric predictor; with 100 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 2. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 

Fan window(s) of significant difference(s):
    3.070707 - 7.626263
    16.737374 - 21.292929
    24.606061 - 34.131313
plot_diff(phar.gam.AR, view="Fan",comp=list(context.ord=c("pharyngealised","pharyngeal")),
          xlab="",cond=list(time=2,vowel.ord="uu"),add=TRUE,
          col='blue',mark.diff =  TRUE,col.diff = "blue",
          ylim=c(-15,15),hide.label=T,rm.ranef=T)
Summary:
    * vowel.ord : factor; set to the value(s): uu. 
    * Fan : numeric predictor; with 100 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 2. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 

Fan window(s) of significant difference(s):
    1.000000 - 13.838384
    17.151515 - 25.020202
legend(par('usr')[2], par('usr')[4], bty='n', xpd=NA,lty=1, 
       legend=c("/i:/", "/a:/", "/u:/"),col=c("green","red","blue"), lwd=4, cex=1.2)

3.7.3.3 Offset

par(oma=c(1, 0, 0, 3.5),mgp=c(2, 1, 0))
plot_diff(phar.gam.AR, view="Fan",comp=list(context.ord=c("pharyngealised","pharyngeal")),
          xlab="",cond=list(time=3,vowel.ord="ii"),main = "difference pharyngealised vs pharyngeal Offset",
          col='green',cex.main=1.1,mark.diff = TRUE,col.diff = "green",
          ylim=c(-15,15),hide.label=T,rm.ranef=T)
Summary:
    * vowel.ord : factor; set to the value(s): ii. 
    * Fan : numeric predictor; with 100 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 3. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 

Fan window(s) of significant difference(s):
    14.666667 - 26.262626
    29.161616 - 39.101010
plot_diff(phar.gam.AR, view="Fan",comp=list(context.ord=c("pharyngealised","pharyngeal")),
          xlab="",cond=list(time=3,vowel.ord="aa"),add=TRUE,
          col='red',mark.diff =  TRUE,col.diff = "red",
          ylim=c(-15,15),hide.label=T,rm.ranef=T)
Summary:
    * vowel.ord : factor; set to the value(s): aa. 
    * Fan : numeric predictor; with 100 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 3. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 

Fan window(s) of significant difference(s):
    4.313131 - 7.626263
    24.606061 - 33.717172
plot_diff(phar.gam.AR, view="Fan",comp=list(context.ord=c("pharyngealised","pharyngeal")),
          xlab="",cond=list(time=3,vowel.ord="uu"),add=TRUE,
          col='blue',mark.diff =  TRUE,col.diff = "blue",
          ylim=c(-15,15),hide.label=T,rm.ranef=T)
Summary:
    * vowel.ord : factor; set to the value(s): uu. 
    * Fan : numeric predictor; with 100 values ranging from 1.000000 to 42.000000. 
    * time : numeric predictor; set to the value(s): 3. 
    * word : factor; set to the value(s): 2aa3aa. (Might be canceled as random effect, check below.) 
    * NOTE : The following random effects columns are canceled: s(Fan,word),s(time,word)
 

Fan window(s) of significant difference(s):
    1.000000 - 14.666667
    18.393939 - 24.606061
    28.747475 - 31.646465
legend(par('usr')[2], par('usr')[4], bty='n', xpd=NA,lty=1, 
       legend=c("/i:/", "/a:/", "/u:/"),col=c("green","red","blue"), lwd=4, cex=1.2)

4 System Information

sessionInfo()
R version 4.1.3 (2022-03-10)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Rocky Linux 8.6 (Green Obsidian)

Matrix products: default
BLAS:   /opt/R/4.1.3/lib64/R/lib/libRblas.so
LAPACK: /opt/R/4.1.3/lib64/R/lib/libRlapack.so

locale:
 [1] LC_CTYPE=fr_FR.UTF-8       LC_NUMERIC=C               LC_TIME=fr_FR.UTF-8       
 [4] LC_COLLATE=fr_FR.UTF-8     LC_MONETARY=fr_FR.UTF-8    LC_MESSAGES=fr_FR.UTF-8   
 [7] LC_PAPER=fr_FR.UTF-8       LC_NAME=C                  LC_ADDRESS=C              
[10] LC_TELEPHONE=C             LC_MEASUREMENT=fr_FR.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] parallel  stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] doParallel_1.0.17 iterators_1.0.14  foreach_1.5.2     gganimate_1.0.7  
 [5] forcats_0.5.1     stringr_1.4.0     dplyr_1.0.8       purrr_0.3.4      
 [9] readr_2.1.2       tidyr_1.2.0       tibble_3.1.6      tidyverse_1.3.1  
[13] itsadug_2.4.1     plotfunctions_1.4 mgcv_1.8-39       nlme_3.1-155     
[17] ggplot2_3.3.5    

loaded via a namespace (and not attached):
 [1] Rcpp_1.0.8.3      lubridate_1.8.0   lattice_0.20-45   prettyunits_1.1.1
 [5] assertthat_0.2.1  digest_0.6.29     utf8_1.2.2        plyr_1.8.7       
 [9] R6_2.5.1          cellranger_1.1.0  backports_1.4.1   reprex_2.0.1     
[13] evaluate_0.15     httr_1.4.2        pillar_1.7.0      rlang_1.0.2      
[17] progress_1.2.2    readxl_1.4.0      rstudioapi_0.13   Matrix_1.4-0     
[21] rmarkdown_2.13    labeling_0.4.2    splines_4.1.3     munsell_0.5.0    
[25] broom_0.7.12      compiler_4.1.3    modelr_0.1.8      xfun_0.30        
[29] pkgconfig_2.0.3   htmltools_0.5.2   tidyselect_1.1.2  codetools_0.2-18 
[33] fansi_1.0.3       crayon_1.5.1      tzdb_0.3.0        dbplyr_2.1.1     
[37] withr_2.5.0       grid_4.1.3        jsonlite_1.8.0    gtable_0.3.0     
[41] lifecycle_1.0.1   DBI_1.1.2         magrittr_2.0.3    scales_1.1.1     
[45] cli_3.2.0         stringi_1.7.6     farver_2.1.0      fs_1.5.2         
[49] xml2_1.3.3        ellipsis_0.3.2    generics_0.1.2    vctrs_0.4.0      
[53] tools_4.1.3       glue_1.6.2        tweenr_1.0.2      hms_1.1.1        
[57] rsconnect_0.8.25  fastmap_1.1.0     yaml_2.3.5        colorspace_2.0-3 
[61] rvest_1.0.2       knitr_1.38        haven_2.4.3      
LS0tCnRpdGxlOiAiR0FNTXMgTGFiUGhvbiAxOCIKYXV0aG9yOiAKICBuYW1lOiAiSmFsYWwgQWwtVGFtaW1pIgogIGFmZmlsaWF0aW9uOiAiTmV3Y2FzdGxlIFVuaXZlcnNpdHkiCmRhdGU6ICI2IEp1bmUgMjAxODsgdXBkYXRlZCAxMCBBdWd1c3QgMjAyMiIKb3V0cHV0OiAKICBodG1sX25vdGVib29rOgogICAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlCiAgICB0b2M6IHRydWUKICAgIHRvY19kZXB0aDogNAogICAgdG9jX2Zsb2F0OgogICAgICBjb2xsYXBzZWQ6IHRydWUKLS0tCgojIExvYWRpbmcgcGFja2FnZXMgCmBgYHtyIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIGVycm9yPUZBTFNFfQoKbGlicmFyeShnZ3Bsb3QyKTtsaWJyYXJ5KG1nY3YpO2xpYnJhcnkoaXRzYWR1Zyk7bGlicmFyeSh0aWR5dmVyc2UpO2xpYnJhcnkoZ2dhbmltYXRlKTsgbGlicmFyeShkb1BhcmFsbGVsKQpgYGAKCiMgRGVtbyBMaW5lYXIgTW9kZWwgdnMgR0FNCkluIHRoaXMgZGVtbywgZGF0YSBvYnRhaW5lZCBmcm9tIGEgSm9yZGFuaWFuIEFyYWJpYyBzcGVha2VyIHByb2R1Y2luZyB0aGUgd29yZCAvZHU6ZC8gIndvcm0iIGlzIHVzZWQuIEYyIGZyZXF1ZW5jaWVzIG9idGFpbmVkIGF0IDUgbXMgaW50ZXJ2YWwgZnJvbSBvbnNldCB0byBtaWRwb2ludCBvZiB0aGUgdm93ZWwgYXJlIHVzZWQuCkxldCdzIHBsb3QgdGhlIEYyIGZyZXF1ZW5jaWVzIGJ5IGludGVydmFsIG51bWJlci4gVGhlIHNlY29uZCBwbG90IGRpc3BsYXlzIGEgbGluZWFyIHJlZ3Jlc3Npb24gbGluZSBzdXBlcmltcG9zZWQgb24gdGhlIHBsb3QuIEFzIGNhbiBiZSBzZWVuLCB0aGUgbGluZWFyIHJlZ3Jlc3Npb24gbGluZSBpcyBub3QgYWJsZSB0byBjb3BlIHdpdGggdGhlIGN1cnZpbmVzcyBvZiB0aGUgZGF0YSwgYW5kIGlzIHVuYWJsZSB0byBjb3BlIHdpdGggaXQuIFRoZSB0aGlyZCBwbG90IHN1cGVyaW1wb3NlcyBhIHNwbGluZSBvYnRhaW5lZCBmcm9tIGEgR0FNIG1vZGVsLgoKYGBge3J9CmRlbW9HQU1Qcm9kIDwtIHJlYWQuY3N2KCJkYXRhUHJvZF9kdXVkLmNzdiIpCmhlYWQoZGVtb0dBTVByb2QpCmBgYAoKCmBgYHtyIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIGVycm9yPUZBTFNFfQpnZ3Bsb3QuZGVtbzEgPC0gZ2dwbG90KGRlbW9HQU1Qcm9kLGFlcyh4PUludGVydmFsc04seT1GMikpKwogICAgICAgICAgICAgICAgZ2VvbV9wb2ludCgpK3RoZW1lX2J3KGJhc2Vfc2l6ZSA9IDIwKStjb29yZF9jYXJ0ZXNpYW4oeWxpbT1jKDYwMCwxODAwKSkrCiAgICAgICAgICAgICAgICBsYWJzKHkgPSAiRjIgSHoiLCB4ID0gIkludGVydmFscyBudW1iZXIiKQpnZ3Bsb3QuZGVtbzEKCmdncGxvdC5kZW1vMiA8LSBnZ3Bsb3QoZGVtb0dBTVByb2QsYWVzKHg9SW50ZXJ2YWxzTix5PUYyKSkrCiAgZ2VvbV9wb2ludCgpK3RoZW1lX2J3KGJhc2Vfc2l6ZSA9IDIwKStjb29yZF9jYXJ0ZXNpYW4oeWxpbT1jKDYwMCwxODAwKSkrCiAgbGFicyh5ID0gIkYyIEh6IiwgeCA9ICJJbnRlcnZhbHMgbnVtYmVyIikrZ2VvbV9zbW9vdGgobWV0aG9kID0gbG0sIHNlPUYpCgpnZ3Bsb3QuZGVtbzIKCmdncGxvdC5kZW1vMyA8LSBnZ3Bsb3QoZGVtb0dBTVByb2QsYWVzKHg9SW50ZXJ2YWxzTix5PXByZWRpY3QoYmFtKEYyIH4gcyhJbnRlcnZhbHNOLCBicz0iY3IiKSwgZGF0YSA9IGRlbW9HQU1Qcm9kKSkpKSsKICBnZW9tX3BvaW50KCkrdGhlbWVfYncoYmFzZV9zaXplID0gMjApK2Nvb3JkX2NhcnRlc2lhbih5bGltPWMoNjAwLDE4MDApKSsKICBsYWJzKHkgPSAiRjIgSHoiLCB4ID0gIkludGVydmFscyBudW1iZXIiKStnZW9tX3Ntb290aChtZXRob2QgPSBsbSwgZm9ybXVsYSA9IHkgfiBzcGxpbmVzOjpicyh4LCAzKSxzZT1GKQoKZ2dwbG90LmRlbW8zCgpgYGAKCiMgQWN0dWFsIGRhdGEgYW5hbHlzZXMKVGhpcyBkYXRhIGlzIG9idGFpbmVkIGZyb20gYSBzaW5nbGUgc3BlYWtlciBwcm9kdWNpbmcgdmFyaW91cyBjb25zb25hbnRzIGluIHRoZSBmcmFtZSBWQ1YsIHdpdGggViA9IHN5bW1ldHJpYyAvaTogYTogdTovICg9dm93ZWwpIGFuZCBDIGlzIG9uZSBvZiAxNyBjb25zb25hbnRzIHB1dCBpbnRvIGZpdmUgY29udGV4dHMgInBsYWluIiwgInZlbGFyIiwgInV2dWxhciIsICJwaGFyeW5nZWFsaXNlZCIgYW5kICJwaGFyeW5nZWFsIiAoPWNvbnRleHQpLiBUaGUgZGF0YSBpcyBmcm9tIFVsdHJhc291bmQgVG9uZ3VlIEltYWdpbmcuIFRvbmd1ZSBjb250b3VycyB3ZXJlIG9idGFpbmVkIGF0IHRoZSBjb25zb25hbnQgb25zZXQsIG1pZHBvaW50IGFuZCBvZmZzZXQgKD10aW1lKS4gQSB0b3RhbCBvZiA1MSB3b3JkcyAoPXdvcmQpIHdlcmUgb2J0YWluZWQgYW5kIHRoZXNlIHdlcmUgcmVwZWF0ZWQgMyB0aW1lcy4gVG9uZ3VlIHNwbGluZXMgd2VyZSBleHRyYWN0ZWQgd2l0aCBYLVkgY29vcmRpbmF0ZXMgKD15IG91dGNvbWUpLiA0MiBGYW4gcG9zaXRpb25zICg9RmFuKSB3ZXJlIGV4dHJhY3RlZCBhbmQgdGhlc2UgYXJlIHVzZWQgYXMgYSBub3JtYWxpc2F0aW9uIGJldHdlZW4gY29udGV4dHMuClRoZSBvdXRjb21lIGlzIHksIHRoZSBwcmVkaWN0b3JzIGFyZSBGYW4sIHRpbWUsIGNvbnRleHQgYW5kIHZvd2VsLCBhbmQgdGhlIHJhbmRvbSBmYWN0b3IgaXMgd29yZC4KCiMjIENyZWF0aW5nIG5ldyB2YXJpYWJsZXMKQmVmb3JlIHJ1bm5pbmcgdGhlIGFjdHVhbCBHQU0gbW9kZWwgb24gdGhlIGRhdGEsIHdlIG5lZWQgdG86CgoxLiBDcmVhdGUgdHdvIG5ldyB2YXJpYWJsZXMgZm9yIGNvbnRleHQgYW5kIHZvd2VsLiBUaGVzZSB3aWxsIGJlICJvcmRlcmVkIiBwcmVkaWN0b3JzIGFuZCBzdW0gY29kZWQKMi4gVG8gcnVuIGFuIEF1dG8tUmVncmVzc2l2ZSBNb2RlbCwgd2UgbmVlZCB0byBmaW5kIHRoZSBhdXRvY29ycmVsYXRpb24gaW4gdGhlIGRhdGFmcmFtZToKICArIFdlIHJlYXJyYW5nZSB0aGUgZGF0YSBieSB0aW1lLCBJRCwgYW5kIEZhbiAKICArIFdlIGFkZCBhIG5ldyB2YXJpYWJsZSAic3RhcnQiIHRoYXQgbWFya3MgdGhlIHN0YXJ0IG9mIEZhbgogIAoKYGBge3Igd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgZXJyb3I9RkFMU0V9CnBoYXJERiA8LSByZWFkLmNzdigicmVzdWx0c0Z1bGwuY19Ob1JlbE5vei5jc3YiKQpzdHIocGhhckRGKQoKbGV2ZWxzKHBoYXJERiRjb250ZXh0KQpwaGFyREYkY29udGV4dCA8LSBmYWN0b3IocGhhckRGJGNvbnRleHQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoInBsYWluIiwidmVsYXIiLCJ1dnVsYXIiLCJwaGFyeW5nZWFsaXNlZCIsInBoYXJ5bmdlYWwiKSkKbGV2ZWxzKHBoYXJERiR2b3dlbCkKcGhhckRGJHZvd2VsIDwtIGZhY3RvcihwaGFyREYkdm93ZWwsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJpaSIsImFhIiwidXUiKSkKbGV2ZWxzKHBoYXJERiRsYWJlbE5ldykKcGhhckRGJGxhYmVsTmV3IDwtIGZhY3RvcihwaGFyREYkbGFiZWxOZXcsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJDTF9PbnMiLCJDTF9NaWQiLCJDTF9PZmYiKSkKCgpwaGFyREYkSUQgPC0gYXMubnVtZXJpYyhwaGFyREYkSUQpCnBoYXJERiRGYW4gPC0gYXMubnVtZXJpYyhwaGFyREYkRmFuKQpwaGFyREYkbGFiZWxOZXcyIDwtIGFzLm51bWVyaWMocGhhckRGJGxhYmVsTmV3MikKcGhhckRGJHRpbWUgPC0gcGhhckRGJGxhYmVsTmV3MgpwaGFyREYkd29yZCA8LSBhcy5mYWN0b3IocGhhckRGJHdvcmQpCgoKCnBoYXJERiRjb250ZXh0Lm9yZCA8LSBhcy5vcmRlcmVkKHBoYXJERiRjb250ZXh0KQpjb250cmFzdHMocGhhckRGJGNvbnRleHQub3JkKSA8LSAiY29udHIudHJlYXRtZW50IgoKcGhhckRGJHZvd2VsLm9yZCA8LSBhcy5vcmRlcmVkKHBoYXJERiR2b3dlbCkKY29udHJhc3RzKHBoYXJERiR2b3dlbC5vcmQpIDwtICJjb250ci50cmVhdG1lbnQiCgojIyB0byBmaW5kIGF1dG9jb3JyZWxhdGlvbiBpbiB0aGUgZGF0YS4gUmVhcnJhbmdlIGRhdGFmcmFtZSBhbmQgYWRkIGEgdmFyaWFibGUgInN0YXJ0IiB0byBpbmRpY2F0ZSAKIyMgd2hlbiBGYW4gPT0gMQpwaGFyREYgPC0gYXJyYW5nZShwaGFyREYsIHRpbWUsIElELCBGYW4pCnBoYXJERiRzdGFydCA8LSBwaGFyREYkRmFuPT0xCm5jb3JlcyA9IDEwCgpgYGAKIyMgVmlzdWFsaXNpbmcgdGhlIGRhdGEKCkJlZm9yZSBydW5uaW5nIGFueXRoaW5nLCB3ZSBzdGFydCBieSB2aXN1YWxpc2luZyB0aGUgZGF0YSBhbmQgdXNlIGFuIGFuaW1hdGVkIGZpZ3VyZQoKYGBge3Igd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgZXJyb3I9RkFMU0V9CnBsIDwtIGdncGxvdChwaGFyREYsIGFlcyh4PUZhbiwgeT15LCBjb2w9Y29udGV4dCwgZnJhbWU9dGltZSkpICsKICBmYWNldF9ncmlkKHZvd2VsIH4gY29udGV4dCkgKwogIGdlb21fbGluZShhZXMoZ3JvdXA9SUQpKSt0aGVtZV9idygpKwp0cmFuc2l0aW9uX21hbnVhbCh0aW1lKQphbmltYXRlKHBsLCB3aWR0aD04MDAsIGhlaWdodD0zMDApCgpgYGAKCgojIyBSdW5uaW5nIG91ciBmaXJzdCBHQU0gbW9kZWwKVGhpcyBpcyBvdXIgZmlyc3QgR0FNIG1vZGVsLiBUaGlzIHdpbGwgYmUgdXNlZCB0byBmaW5kIHRoZSBsZXZlbCBvZiBhdXRvY29ycmVsYXRpb24gaW4gdGhlIGRhdGEuIE91ciBtb2RlbCBoYXMgZG91YmxlIG5vbi1saW5lYXIgcHJlZGljdG9ycyAoZmFuIGFuZCB0aW1lKSwgdHdvIGZhY3RvciBwcmVkaWN0b3JzIChjb250ZXh0IGFuZCB2b3dlbCkgYW5kIG9uZSByYW5kb20gZWZmZWN0ICh3b3JkKS4gSW50ZXJhY3Rpb25zIGJldHdlZW4gZmFuIGFuZCB0aW1lIGFyZSB1c2VkLiBJbiBhZGRpdGlvbiwgYnkgY29udGV4dCp2b3dlbCBpbnRlcmFjdGlvbiBpcyBhZGRlZCB0byBhY2NvdW50IGZvciB0aGUgdHdvLXdheSBpbnRlcmFjdGlvbiB3aXRoIHJlc3BlY3QgdG8gZWFjaCBvZiBmYW4gYW5kIHRpbWUuClRoZSBmdW5jdGlvbiBpdHNhZHVnOjphY2ZfcmVzaWQgaXMgdXNlZCwgYW5kIHdlIGRpc3BsYXkgdGhlIGxldmVsIG9mIGF1dG9jb3JyZWxhdGlvbiBmb3IgZWFjaCBvZiB0aGUgIkZhbiIsIHRoZSAidGltZSIsIHRoZSAiY29udGV4dCIsIHRoZSAidm93ZWwiIGZpbmFsbHkgdGhlICJ3b3JkIgoKYGBge3Igd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgZXJyb3I9RkFMU0V9CgptZGwuc3lzLnRpbWUxIDwtIHN5c3RlbS50aW1lKHBoYXIuZ2FtLm5vQVIgPC0gYmFtKHkgfiBjb250ZXh0Lm9yZCp2b3dlbC5vcmQgKwogICAgICAgICAgICAgICAgICAgICAgICAjIyAxZCBzbW9vdGhzCiAgICAgICAgICAgICAgICAgICAgICAgIHMoRmFuLCBicz0iY3IiLCBrPTEwKSArCiAgICAgICAgICAgICAgICAgICAgICAgIHModGltZSwgYnM9ImNyIiwgaz0zKSArCiAgICAgICAgICAgICAgICAgICAgICAgICMjIDFkIHNtb290aHMgKiBmYWN0b3JzCiAgICAgICAgICAgICAgICAgICAgICAgIHMoRmFuLCBrPTEwLCBicz0iY3IiLCBieT1jb250ZXh0Lm9yZCkgKwogICAgICAgICAgICAgICAgICAgICAgICBzKEZhbiwgaz0xMCwgYnM9ImNyIiwgYnk9dm93ZWwub3JkKSArCiAgICAgICAgICAgICAgICAgICAgICAgIHMoRmFuLCBrPTEwLCBicz0iY3IiLCBieT1pbnRlcmFjdGlvbihjb250ZXh0Lm9yZCwgdm93ZWwub3JkKSkgKwogICAgICAgICAgICAgICAgICAgICAgICBzKHRpbWUsIGs9MywgYnM9ImNyIiwgYnk9Y29udGV4dC5vcmQpICsKICAgICAgICAgICAgICAgICAgICAgICAgcyh0aW1lLCBrPTMsIGJzPSJjciIsIGJ5PXZvd2VsLm9yZCkgKwogICAgICAgICAgICAgICAgICAgICAgICBzKHRpbWUsIGs9MywgYnM9ImNyIiwgYnk9aW50ZXJhY3Rpb24oY29udGV4dC5vcmQsIHZvd2VsLm9yZCkpICsKICAgICAgICAgICAgICAgICAgICAgICAgIyMgMmQgc21vb3RocwogICAgICAgICAgICAgICAgICAgICAgICB0aShGYW4sIHRpbWUsIGJzPSJjciIsIGs9YygxMCwzKSkrCiAgICAgICAgICAgICAgICAgICAgICAgICMjIDJkIHNtb290aHMgKiBmYWN0b3JzCiAgICAgICAgICAgICAgICAgICAgICAgIHRpKEZhbiwgdGltZSwgYnM9ImNyIiwgaz1jKDEwLDMpLCBieT1jb250ZXh0Lm9yZCkrCiAgICAgICAgICAgICAgICAgICAgICAgIHRpKEZhbiwgdGltZSwgYnM9ImNyIiwgaz1jKDEwLDMpLCBieT12b3dlbC5vcmQpKwogICAgICAgICAgICAgICAgICAgICAgICB0aShGYW4sIHRpbWUsIGJzPSJjciIsIGs9YygxMCwzKSxieT1pbnRlcmFjdGlvbihjb250ZXh0Lm9yZCwgdm93ZWwub3JkKSkgKwogICAgICAgICAgICAgICAgICAgICAgICAjIyByYW5kb20gc21vb3RocyBieSB3b3JkCiAgICAgICAgICAgICAgICAgICAgICAgIHMoRmFuLCB3b3JkLCBicz0iZnMiLCBrPTEwLCBtPTEsIHh0PWxpc3QoYnMgPSAidHAiKSkgKwogICAgICAgICAgICAgICAgICAgICAgICBzKHRpbWUsIHdvcmQsIGJzPSJmcyIsIGs9MywgbT0xLCB4dD1saXN0KGJzID0gInRwIikpLAogICAgICAgICAgICAgICAgICAgICAgICBkYXRhPXBoYXJERiwgbnRocmVhZHMgPSBuY29yZXMsIG1ldGhvZD0iZlJFTUwiLCBkaXNjcmV0ZSA9IFRSVUUpKQptZGwuc3lzLnRpbWUxCmBgYAoKIyMjIFN1bW1hcnkgYW5kIFJobwoKYGBge3Igd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgZXJyb3I9RkFMU0V9CnN1bW1hcnkocGhhci5nYW0ubm9BUikKCnJob19lc3QgPC0gc3RhcnRfdmFsdWVfcmhvKHBoYXIuZ2FtLm5vQVIpCnJob19lc3QKYGBgCgojIyMgQUNGIGZpcnN0IEdBTQpUaGUgZml2ZSBwbG90cyBiZWxvdyBzaG93IHRoZSBhdXRvY29ycmVsYXRpb24gaW4gdGhlIHJlc2lkdWFscy4gQXMgY2FuIGJlIHNlZSwgdGhlIGZpcnN0IHBsb3QgdXNpbmcgRmFuLCBoYXMgYSBjb21wbGV0ZSB6ZXJvIGNvcnJlbGF0aW9ucy4gSXQgaXMgcG9zc2libGUgdGhhdCBiZWNhdXNlIHRoZSB2YXJpb3VzIGZhbiBwb2ludHMgb2J0YWluZWQgYWxvbmdzaWRlIHRoZSB0b25ndWUgY29udG91ciBhcmUgYWxyZWFkeSBjb3JyZWxhdGVkIHdpdGggZWFjaCBvdGhlciwgYW5kIGhlbmNlIHRoZSBjb3JyZWxhdGlvbnMgYmV0d2VlbiBmYW4gMSB0byAyLCAyIHRvIDMsIDQxIHRvIDQyIGFyZSBhbHJlYWR5IHRha2VuIGludG8gYWNjb3VudCBieSB0aGUgbW9kZWwuIApUaGUgZm91ciBhZGRpdGlvbmFsIHBsb3RzIHNob3cgdGhlIGF1dG9jb3JyZWxhdGlvbiBpbiB0aGUgcmVzaWR1YWxzIGZvciB0aW1lLCBjb250ZXh0LCB2b3dlbCBhbmQgd29yZC4gQWxsIG9mIHRoZXNlIHByZWRpY3RvcnMgYXJlIHNob3dpbmcgYXV0b2NvcnJlbGF0aW9ucyBiZXR3ZWVuIHRoZWlyIHN1Y2Nlc3NpdmUgZGF0YSBwb2ludHMuIFRoaXMgbWVhbnMgdGhhdCBmb3IgYSBzcGVjaWZpYyB0aW1lIChvbnNldCwgbWlkcG9pbnQgb3Igb2Zmc2V0KSwgdGhlcmUgaXMgYWxyZWFkeSBjb3JyZWxhdGlvbnMgYmV0d2VlbiB0b25ndWUgc3BsaW5lcyBvYnRhaW5lZCBhdCB0aGUgb25zZXQsIHRoZSBtaWRwb2ludCBhbmQgdGhlIG9mZnNldC4gSXQgaXMgY3J1Y2lhbCB0byB0ZWxsIHRoZSBtb2RlbCB0byBhY2NvdW50IGZvciB0aGlzLCBvdGhlcndpc2UgdGhlcmUgaXMgb3ZlcmNvbmZpZGVuY2UgaW4gdGhlIGVzdGltYXRlcy4gCgojIyMjIEFDRiBieSBGYW4KCmBgYHtyIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIGVycm9yPUZBTFNFfQphY2ZfcmVzaWQocGhhci5nYW0ubm9BUixzcGxpdF9wcmVkPWxpc3QocGhhckRGJEZhbiksbWFpbiA9ICJBdmVyYWdlIEFDRiBOby5BUiBieSBGYW4iLGNleC5sYWI9MS41LGNleC5heGlzPTEuNSkKYGBgCgojIyMjIEFDRiBieSBUaW1lCgpgYGB7ciB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCBlcnJvcj1GQUxTRX0KYWNmX3Jlc2lkKHBoYXIuZ2FtLm5vQVIsc3BsaXRfcHJlZD1saXN0KHBoYXJERiR0aW1lKSxtYWluID0gIkF2ZXJhZ2UgQUNGIE5vLkFSIGJ5IFRpbWUiLGNleC5sYWI9MS41LGNleC5heGlzPTEuNSkKYGBgCgojIyMjIEFDRiBieSBDb250ZXh0CgpgYGB7ciB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCBlcnJvcj1GQUxTRX0KYWNmX3Jlc2lkKHBoYXIuZ2FtLm5vQVIsc3BsaXRfcHJlZD1saXN0KHBoYXJERiRjb250ZXh0Lm9yZCksbWFpbiA9ICJBdmVyYWdlIEFDRiBOby5BUiBieSBDb250ZXh0IixjZXgubGFiPTEuNSxjZXguYXhpcz0xLjUpCmBgYAoKIyMjIyBBQ0YgYnkgVm93ZWwKCmBgYHtyIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIGVycm9yPUZBTFNFfQphY2ZfcmVzaWQocGhhci5nYW0ubm9BUixzcGxpdF9wcmVkPWxpc3QocGhhckRGJHZvd2VsLm9yZCksbWFpbiA9ICJBdmVyYWdlIEFDRiBOby5BUiBieSBWb3dlbCIsY2V4LmxhYj0xLjUsY2V4LmF4aXM9MS41KQpgYGAKCiMjIyMgQUNGIGJ5IFdvcmQKCmBgYHtyIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIGVycm9yPUZBTFNFfQphY2ZfcmVzaWQocGhhci5nYW0ubm9BUixzcGxpdF9wcmVkPWxpc3QocGhhckRGJHdvcmQpLG1haW4gPSAiQXZlcmFnZSBBQ0YgTm8uQVIgYnkgV29yZCIsY2V4LmxhYj0xLjUsY2V4LmF4aXM9MS41KQpgYGAKCgojIyBSdW5uaW5nIG91ciBzZWNvbmQgQXV0b3JlZ3Jlc3NpdmUgR0FNCgpPdXIgc2Vjb25kIEdBTSBtb2RlbCBpcyBpZGVudGljYWwgdG8gdGhlIGZpcnN0LCBidXQgdGFrZXMgaW50byBhY2NvdW50IHRoZSBhdXRvY29ycmVsYXRpb24uIEJ5IGluY2x1ZGluZyBBUi5zdGFydCBhbmQgcmhvLCB3ZSBhcmUgdXNpbmcgaW5mb3JtYXRpb24gb2J0YWluZWQgZnJvbSBvcmlnaW5hbCBtb2RlbCB0byBhY2NvdW50IGZvciB0aGUgYXV0b2NvcnJlbGF0aW9uCmBgYHtyIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIGVycm9yPUZBTFNFfQptZGwuc3lzLnRpbWUyIDwtIHN5c3RlbS50aW1lKHBoYXIuZ2FtLkFSIDwtIGJhbSh5IH4gY29udGV4dC5vcmQqdm93ZWwub3JkICsKICAgICAgICAgICAgICAgICAgICAgICAjIyAxZCBzbW9vdGhzCiAgICAgICAgICAgICAgICAgICAgICAgcyhGYW4sIGJzPSJjciIsIGs9MTApICsKICAgICAgICAgICAgICAgICAgICAgICBzKHRpbWUsIGJzPSJjciIsIGs9MykgKwogICAgICAgICAgICAgICAgICAgICAgICMjIDFkIHNtb290aHMgKiBmYWN0b3JzCiAgICAgICAgICAgICAgICAgICAgICAgcyhGYW4sIGs9MTAsIGJzPSJjciIsIGJ5PWNvbnRleHQub3JkKSArCiAgICAgICAgICAgICAgICAgICAgICAgcyhGYW4sIGs9MTAsIGJzPSJjciIsIGJ5PXZvd2VsLm9yZCkgKwogICAgICAgICAgICAgICAgICAgICAgIHMoRmFuLCBrPTEwLCBicz0iY3IiLCBieT1pbnRlcmFjdGlvbihjb250ZXh0Lm9yZCwgdm93ZWwub3JkKSkgKwogICAgICAgICAgICAgICAgICAgICAgIHModGltZSwgaz0zLCBicz0iY3IiLCBieT1jb250ZXh0Lm9yZCkgKwogICAgICAgICAgICAgICAgICAgICAgIHModGltZSwgaz0zLCBicz0iY3IiLCBieT12b3dlbC5vcmQpICsKICAgICAgICAgICAgICAgICAgICAgICBzKHRpbWUsIGs9MywgYnM9ImNyIiwgYnk9aW50ZXJhY3Rpb24oY29udGV4dC5vcmQsIHZvd2VsLm9yZCkpICsKICAgICAgICAgICAgICAgICAgICAgICAjIyAyZCBzbW9vdGhzCiAgICAgICAgICAgICAgICAgICAgICAgdGkoRmFuLCB0aW1lLCBicz0iY3IiLCBrPWMoMTAsMykpKwogICAgICAgICAgICAgICAgICAgICAgICMjIDJkIHNtb290aHMgKiBmYWN0b3JzCiAgICAgICAgICAgICAgICAgICAgICAgdGkoRmFuLCB0aW1lLCBicz0iY3IiLCBrPWMoMTAsMyksIGJ5PWNvbnRleHQub3JkKSsKICAgICAgICAgICAgICAgICAgICAgICB0aShGYW4sIHRpbWUsIGJzPSJjciIsIGs9YygxMCwzKSwgYnk9dm93ZWwub3JkKSsKICAgICAgICAgICAgICAgICAgICAgICB0aShGYW4sIHRpbWUsIGJzPSJjciIsIGs9YygxMCwzKSwgIGJ5PWludGVyYWN0aW9uKGNvbnRleHQub3JkLCB2b3dlbC5vcmQpKSsKICAgICAgICAgICAgICAgICAgICAgICAjIyByYW5kb20gc21vb3RocyBieSB3b3JkCiAgICAgICAgICAgICAgICAgICAgICAgcyhGYW4sIHdvcmQsIGJzPSJmcyIsIGs9MTAsIG09MSwgeHQ9bGlzdChicyA9ICJ0cCIpKSArCiAgICAgICAgICAgICAgICAgICAgICAgcyh0aW1lLCB3b3JkLCBicz0iZnMiLCBrPTMsIG09MSwgeHQ9bGlzdChicyA9ICJ0cCIpKSwKICAgICAgICAgICAgICAgICAgICAgICBkYXRhPXBoYXJERiwKICAgICAgICAgICAgICAgICAgICAgICBBUi5zdGFydD1waGFyREYkc3RhcnQsIHJobz1yaG9fZXN0LCBudGhyZWFkcyA9IG5jb3JlcywgbWV0aG9kPSJmUkVNTCIsIGRpc2NyZXRlID0gVFJVRSkpCm1kbC5zeXMudGltZTIKYGBgCgoKIyMjIFN1bW1hcnkKCmBgYHtyIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIGVycm9yPUZBTFNFfQpzdW1tYXJ5KHBoYXIuZ2FtLkFSKQpgYGAKCiMjIyBBQ0Ygc2Vjb25kIEdBTQpUaGUgZm9sbG93aW5nIGZpdmUgcGxvdHMgc2hvdyAoaW4gdGhlIHNhbWUgb3JkZXIgYXMgYWJvdmUpIHRoZSBhdXRvY29ycmVsYXRpb24gaW4gdGhlIHJlc2lkdWFscy4gQXMgY2FuIGJlIHNlZW4sIGZvciBhbGwgZml2ZSBwbG90cywgdGhlIGxldmVscyBvZiBhdXRvY29ycmVsYXRpb25zIGluIHRoZSByZXNpZHVhbHMgYXJlIHJlZHVjZWQgbWFzc2l2ZWx5LiBXZSBoYXZlIG5vdyBtb3JlIGNvbmZpZGVuY2UgaW4gb3VyIGVzdGltYXRlcywgYW5kIGNhbiBjb250aW51ZSB3b3JrCgojIyMjIEFDRiBieSBGYW4KCmBgYHtyIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIGVycm9yPUZBTFNFfQphY2ZfcmVzaWQocGhhci5nYW0uQVIsc3BsaXRfcHJlZD1saXN0KHBoYXJERiRGYW4pLG1haW4gPSAiQXZlcmFnZSBBQ0YgQVIgYnkgRmFuIixjZXgubGFiPTEuNSxjZXguYXhpcz0xLjUpCmBgYAoKCiMjIyMgQUNGIGJ5IFRpbWUKCmBgYHtyIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIGVycm9yPUZBTFNFfQphY2ZfcmVzaWQocGhhci5nYW0uQVIsc3BsaXRfcHJlZD1saXN0KHBoYXJERiR0aW1lKSxtYWluID0gIkF2ZXJhZ2UgQUNGIEFSIGJ5IFRpbWUiLGNleC5sYWI9MS41LGNleC5heGlzPTEuNSkKYGBgCgojIyMjIEFDRiBieSBDb250ZXh0CgpgYGB7ciB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCBlcnJvcj1GQUxTRX0KYWNmX3Jlc2lkKHBoYXIuZ2FtLkFSLHNwbGl0X3ByZWQ9bGlzdChwaGFyREYkY29udGV4dC5vcmQpLG1haW4gPSAiQXZlcmFnZSBBQ0YgQVIgYnkgQ29udGV4dCIsY2V4LmxhYj0xLjUsY2V4LmF4aXM9MS41KQpgYGAKCgojIyMjIEFDRiBieSBWb3dlbAoKYGBge3Igd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgZXJyb3I9RkFMU0V9CmFjZl9yZXNpZChwaGFyLmdhbS5BUixzcGxpdF9wcmVkPWxpc3QocGhhckRGJHZvd2VsLm9yZCksbWFpbiA9ICJBdmVyYWdlIEFDRiBBUiBieSBWb3dlbCIsY2V4LmxhYj0xLjUsY2V4LmF4aXM9MS41KQpgYGAKCiMjIyMgQUNGIGJ5IFdvcmQKCmBgYHtyIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIGVycm9yPUZBTFNFfQphY2ZfcmVzaWQocGhhci5nYW0uQVIsc3BsaXRfcHJlZD1saXN0KHBoYXJERiR3b3JkKSxtYWluID0gIkF2ZXJhZ2UgQUNGIEFSIGJ5IFdvcmQiLGNleC5sYWI9MS41LGNleC5heGlzPTEuNSkKYGBgCgoKIyMjIEdhbSBDaGVjawoKYGBge3J9CmdhbS5jaGVjayhwaGFyLmdhbS5BUikKYGBgCgoKIyMgU2lnbmlmaWNhbmNlIHRlc3Rpbmcgc2Vjb25kIEF1dG9yZWdyZXNzaXZlIEdBTQpUbyB0ZXN0IGZvciBzaWduaWZpY2FuY2Ugb2YgY29udGV4dCwgd2UgcnVuIGEgbW9kZWwgd2l0aCBhIE1MIGFzIG1ldGhvZCBhbmQgZXZhbHVhdGUgc2lnbmlmaWNhbmNlIHRocm91Z2ggYSBtYXhpbXVtIGxpa2VsaWhvb2QgZXN0aW1hdGUuIAoKIyMjIE1vZGVscwpXZSByYW4gdGhyZWUgbW9kZWxzCgoxLiBBIGZ1bGwgbW9kZWwgd2l0aCBhbGwgcHJlZGljdG9ycyAocGhhci5nYW0uQVIuTUwpCjIuIEEgcmVkdWNlZCBtb2RlbCB3aXRob3V0IGFueSB0ZXJtcyBhc3NvY2lhdGVkIHdpdGggdGhlIHByZWRpY3RvciAiY29udGV4dCIgKHBoYXIuZ2FtLkFSLk1MLk1pbi5Db250ZXh0KQozLiBBbiBpbnRlcmNlcHQgb25seSBtb2RlbCAoPU51bGwpIHdpdGhvdXQgYW55IHRlcm1zIGFzc29jaWF0ZWQgd2l0aCB0aGUgcHJlZGljdG9yICJ2b3dlbCIgKHBoYXIuZ2FtLkFSLk1MLk1pbi5Db250ZXh0QW5kVm93ZWwpCgpgYGB7ciB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCBlcnJvcj1GQUxTRX0KbWRsLnN5cy50aW1lMyA8LSBzeXN0ZW0udGltZShwaGFyLmdhbS5BUi5NTCA8LSBiYW0oeSB+IGNvbnRleHQub3JkKnZvd2VsLm9yZCArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICMgMWQgc21vb3RocwogICAgICAgICAgICAgICAgICAgICAgICAgICBzKEZhbiwgYnM9ImNyIixrPTEwKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHModGltZSwgYnM9ImNyIiwgaz0zKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICMgMWQgc21vb3RoICogZmFjdG9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHMoRmFuLCBrPTEwLCBicz0iY3IiLCBieT1jb250ZXh0Lm9yZCkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICBzKEZhbiwgaz0xMCwgYnM9ImNyIiwgYnk9dm93ZWwub3JkKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHMoRmFuLCBrPTEwLCBicz0iY3IiLCBieT1pbnRlcmFjdGlvbihjb250ZXh0Lm9yZCwgdm93ZWwub3JkKSkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICBzKHRpbWUsIGs9MywgYnM9ImNyIiwgYnk9Y29udGV4dC5vcmQpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgcyh0aW1lLCBrPTMsIGJzPSJjciIsIGJ5PXZvd2VsLm9yZCkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICBzKHRpbWUsIGs9MywgYnM9ImNyIiwgYnk9aW50ZXJhY3Rpb24oY29udGV4dC5vcmQsIHZvd2VsLm9yZCkpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAyZCBzbW9vdGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgdGkoRmFuLCB0aW1lLCBicz0iY3IiLCBrPWMoMTAsMykpKwogICAgICAgICAgICAgICAgICAgICAgICAgICB0aShGYW4sIHRpbWUsIGJzPSJjciIsIGs9YygxMCwzKSxieT1jb250ZXh0Lm9yZCkrCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpKEZhbiwgdGltZSwgYnM9ImNyIiwgaz1jKDEwLDMpLGJ5PXZvd2VsLm9yZCkrCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpKEZhbiwgdGltZSwgYnM9ImNyIiwgaz1jKDEwLDMpLGJ5PWludGVyYWN0aW9uKGNvbnRleHQub3JkLCB2b3dlbC5vcmQpKSsgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcmFuZG9tIHNtb290aHMgYnkgd29yZAogICAgICAgICAgICAgICAgICAgICAgICAgICBzKEZhbiwgd29yZCwgYnM9ImZzIiwgaz0xMCwgbT0xLCB4dD1saXN0KGJzID0gInRwIikpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgcyh0aW1lLCB3b3JkLCBicz0iZnMiLCBrPTMsIG09MSwgeHQ9bGlzdChicyA9ICJ0cCIpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YT1waGFyREYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZD0iTUwiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgQVIuc3RhcnQ9cGhhckRGJHN0YXJ0LCByaG89cmhvX2VzdCwgbnRocmVhZHMgPSBuY29yZXMsIGRpc2NyZXRlID0gVFJVRSkpCgptZGwuc3lzLnRpbWUzCgoKCm1kbC5zeXMudGltZTQgPC0gc3lzdGVtLnRpbWUocGhhci5nYW0uQVIuTUwuTWluLkNvbnRleHQgPC0gYmFtKHkgfiB2b3dlbC5vcmQgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgMWQgc21vb3RocwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMoRmFuLCBicz0iY3IiLGs9MTApICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzKHRpbWUsIGJzPSJjciIsIGs9MykgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgMWQgc21vb3RoICogZmFjdG9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyNzKEZhbiwgaz0xMCwgYnM9ImNyIiwgYnk9Y29udGV4dC5vcmQpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzKEZhbiwgaz0xMCwgYnM9ImNyIiwgYnk9dm93ZWwub3JkKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyNzKEZhbiwgaz0xMCwgYnM9ImNyIiwgYnk9Y29udGV4dC5vcmQ6dm93ZWwub3JkKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyNzKHRpbWUsIGs9MywgYnM9ImNyIiwgYnk9Y29udGV4dC5vcmQpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzKHRpbWUsIGs9MywgYnM9ImNyIiwgYnk9dm93ZWwub3JkKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyNzKHRpbWUsIGs9MywgYnM9ImNyIiwgYnk9Y29udGV4dC5vcmQ6dm93ZWwub3JkKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAyZCBzbW9vdGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aShGYW4sIHRpbWUsIGJzPSJjciIsIGs9YygxMCwzKSkrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyN0aShGYW4sIHRpbWUsIGJzPSJjciIsIGs9YygxMCwzKSxieT1jb250ZXh0Lm9yZCkrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMjdGkoRmFuLCB0aW1lLCBicz0iY3IiLCBrPWMoMTAsMyksYnk9dm93ZWwub3JkKSsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjI3RpKEZhbiwgdGltZSwgYnM9ImNyIiwgaz1jKDEwLDMpLGJ5PWNvbnRleHQub3JkOnZvd2VsLm9yZCkrICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcmFuZG9tIHNtb290aHMgYnkgd29yZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMoRmFuLCB3b3JkLCBicz0iZnMiLCBrPTEwLCBtPTEsIHh0PWxpc3QoYnMgPSAidHAiKSkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHModGltZSwgd29yZCwgYnM9ImZzIiwgaz0zLCBtPTEsIHh0PWxpc3QoYnMgPSAidHAiKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YT1waGFyREYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kPSJNTCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFSLnN0YXJ0PXBoYXJERiRzdGFydCwgcmhvPXJob19lc3QsIG50aHJlYWRzID0gbmNvcmVzLCBkaXNjcmV0ZSA9IFRSVUUpKQptZGwuc3lzLnRpbWU0CgptZGwuc3lzLnRpbWU1IDwtIHN5c3RlbS50aW1lKHBoYXIuZ2FtLkFSLk1MLk1pbi5Db250ZXh0QW5kVm93ZWwgPC0gYmFtKHkgfiAxICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAxZCBzbW9vdGhzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMoRmFuLCBicz0iY3IiLGs9MTApICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyh0aW1lLCBicz0iY3IiLCBrPTMpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAxZCBzbW9vdGggKiBmYWN0b3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyNzKEZhbiwgaz0xMCwgYnM9ImNyIiwgYnk9Y29udGV4dC5vcmQpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMjcyhGYW4sIGs9MTAsIGJzPSJjciIsIGJ5PXZvd2VsLm9yZCkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjI3MoRmFuLCBrPTEwLCBicz0iY3IiLCBieT1jb250ZXh0Lm9yZDp2b3dlbC5vcmQpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyNzKHRpbWUsIGs9MywgYnM9ImNyIiwgYnk9Y29udGV4dC5vcmQpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMjcyh0aW1lLCBrPTMsIGJzPSJjciIsIGJ5PXZvd2VsLm9yZCkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjI3ModGltZSwgaz0zLCBicz0iY3IiLCBieT1jb250ZXh0Lm9yZDp2b3dlbC5vcmQpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAyZCBzbW9vdGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyN0aShGYW4sIHRpbWUsIGJzPSJjciIsIGs9YygxMCwzKSxieT1jb250ZXh0Lm9yZCkrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjI3RpKEZhbiwgdGltZSwgYnM9ImNyIiwgaz1jKDEwLDMpLGJ5PXZvd2VsLm9yZCkrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjdGkoRmFuLCB0aW1lLCBicz0iY3IiLCBrPWMoMTAsMyksYnk9Y29udGV4dC5vcmQ6dm93ZWwub3JkKSsgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcmFuZG9tIHNtb290aHMgYnkgd29yZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzKEZhbiwgd29yZCwgYnM9ImZzIiwgaz0xMCwgbT0xLCB4dD1saXN0KGJzID0gInRwIikpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyh0aW1lLCB3b3JkLCBicz0iZnMiLCBrPTMsIG09MSwgeHQ9bGlzdChicyA9ICJ0cCIpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YT1waGFyREYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZD0iTUwiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVIuc3RhcnQ9cGhhckRGJHN0YXJ0LCByaG89cmhvX2VzdCwgbnRocmVhZHMgPSBuY29yZXMsIGRpc2NyZXRlID0gVFJVRSkpCm1kbC5zeXMudGltZTUKYGBgCgojIyMgTW9kZWwgY29tcGFyaXNvbgpUaGVuIHdlIGNvbXBhcmUgcmVzdWx0cyBvZiB0aGVzZSBtb2RlbHMgYXMgc2hvd24gYmVsb3cuICAgIAoKIyMjIyBFZmZlY3Qgb2YgQ29udGV4dCB2cyBudWxsCmBgYHtyIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIGVycm9yPUZBTFNFfQpjb21wYXJlTUwocGhhci5nYW0uQVIuTUwsIHBoYXIuZ2FtLkFSLk1MLk1pbi5Db250ZXh0KQpgYGAKCiMjIyMgRWZmZWN0IG9mIFZvd2VsIHZzIE51bGwKYGBge3Igd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgZXJyb3I9RkFMU0V9CmNvbXBhcmVNTChwaGFyLmdhbS5BUi5NTCxwaGFyLmdhbS5BUi5NTC5NaW4uQ29udGV4dEFuZFZvd2VsKQpgYGAKCiMjIyMgRWZmZWN0IG9mIENvbnRleHQgdnMgVm93ZWwKYGBge3Igd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgZXJyb3I9RkFMU0V9CmNvbXBhcmVNTChwaGFyLmdhbS5BUi5NTC5NaW4uQ29udGV4dCxwaGFyLmdhbS5BUi5NTC5NaW4uQ29udGV4dEFuZFZvd2VsKQpgYGAKCkZyb20gdGhlIHJlc3VsdHMgYWJvdmUsIGJvdGggImNvbnRleHQiIGFuZCAidm93ZWwiIGFyZSBpbXByb3ZpbmcgdGhlIG1vZGVsIGZpdC4gIkNvbnRleHQiIGlzIGltcHJvdmluZyB0aGUgbW9kZWwgZml0IG1vcmUgdGhhbiAidm93ZWwiIChzZWUgM3JkIGNvbXBhcmlzb24pCgojIyBWaXN1YWxpc2luZyBzbW9vdGhzIGZyb20gc2Vjb25kIEF1dG9yZWdyZXNzaXZlIEdBTQpXZSB1c2UgdGhlIGZ1bmN0aW9uIGl0c2FkdWc6OnBsb3Rfc21vb3RoIHRvIHBsb3QgdGhlIGZpdmUgc21vb3RocyBmb3IgY29udGV4dCAicGxhaW4iLCAidmVsYXIiLCAidXZ1bGFyIiwgInBoYXJ5bmdlYWxpc2VkIiBhbmQgInBoYXJ5bmdlYWwiLCBpbiBlYWNoIG9mIHRoZSB2b3dlbCBjb250ZXh0cyAvaTogYTogdTovIGF0IHRoZSBvbnNldCwgbWlkcG9pbnQgYW5kIG9mZnNldC4KClRoZSByZXN1bHRzIHNob3cgdGhhdCBhdCB0aGUgbWlkcG9pbnQgYW5kIG9mZnNldCwgdGhlIHRocmVlIGNvbnRleHRzLCB1dnVsYXIsIHBoYXJ5bmdlYWxpc2VkIGFuZCBwaGFyeW5nZWFsIGFyZSBkaWZmZXJlbnQgZnJvbSBlYWNoIG90aGVyOiB1dnVsYXIgaGFzIGEgaGlnaGVyIHRvbmd1ZSBwb3NpdGlvbiAoeSBjb29yZGluYXRlKTsgaW50ZXJtZWRpYXRlIGluIHBoYXJ5bmdlYWxpc2VkIGFuZCBsb3dlciBhbmQgZnJvbnRlZCBpbiBwaGFyeW5nZWFsLiBBdCB0aGUgb25zZXQsIHRoZSBzYW1lIHBhdHRlcm4gaXMgc2VlbiB0aG91Z2ggdG8gYSBsb3dlciBkZWdyZWUgaW4gL2E6Ly4KCiMjIyBWb3dlbCAvaTovCgojIyMjIE9uc2V0CmBgYHtyIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIGVycm9yPUZBTFNFfQpwbG90X3Ntb290aChwaGFyLmdhbS5BUiwgdmlldyA9ICJGYW4iLGNvbmQgPSBsaXN0KGNvbnRleHQub3JkPSJwbGFpbiIsdm93ZWwub3JkPSJpaSIsdGltZT0xKSxjb2w9ImRhcmttYWdlbnRhIix5bGltID0gYygxMCw2NSkseWxhYj0iIix4bGFiPSIiLAogICAgICAgICAgICBtYWluPSJHQU0gc21vb3RocyBpbiAvaTovIGF0IE9uc2V0IixoaWRlLmxhYmVsPVQsY2V4LmF4aXM9MS4zLHJtLnJhbmVmPVQpCnBsb3Rfc21vb3RoKHBoYXIuZ2FtLkFSLCB2aWV3ID0gIkZhbiIsY29uZCA9IGxpc3QoY29udGV4dC5vcmQ9InZlbGFyIix2b3dlbC5vcmQ9ImlpIix0aW1lPTEpLGNvbD0iZ3JheTcwIixhZGQ9VFJVRSx5bGltID0gYygxMCw2NSksaGlkZS5sYWJlbD1ULGNleC5heGlzPTEuMyxybS5yYW5lZj1UKQpwbG90X3Ntb290aChwaGFyLmdhbS5BUiwgdmlldyA9ICJGYW4iLGNvbmQgPSBsaXN0KGNvbnRleHQub3JkPSJ1dnVsYXIiLHZvd2VsLm9yZD0iaWkiLHRpbWU9MSksY29sPSJncmVlbiIsYWRkPVRSVUUseWxpbSA9IGMoMTAsNjUpLGhpZGUubGFiZWw9VCxjZXguYXhpcz0xLjMscm0ucmFuZWY9VCkKcGxvdF9zbW9vdGgocGhhci5nYW0uQVIsIHZpZXcgPSAiRmFuIixjb25kID0gbGlzdChjb250ZXh0Lm9yZD0icGhhcnluZ2VhbGlzZWQiLHZvd2VsLm9yZD0iaWkiLHRpbWU9MSksY29sPSJyZWQiLGFkZD1UUlVFLHlsaW0gPSBjKDEwLDY1KSxoaWRlLmxhYmVsPVQsY2V4LmF4aXM9MS4zLHJtLnJhbmVmPVQpCnBsb3Rfc21vb3RoKHBoYXIuZ2FtLkFSLCB2aWV3ID0gIkZhbiIsY29uZCA9IGxpc3QoY29udGV4dC5vcmQ9InBoYXJ5bmdlYWwiLHZvd2VsLm9yZD0iaWkiLHRpbWU9MSksY29sPSJibHVlIixhZGQ9VFJVRSx5bGltID0gYygxMCw2NSksaGlkZS5sYWJlbD1ULGNleC5heGlzPTEuMyxybS5yYW5lZj1UKQpsZWdlbmQoInRvcGxlZnQiLCBsZWdlbmQ9YygiUGxhaW4iLCAiVmVsYXIiLCAiVXZ1bGFyIiwiUGhhcnluZ2VhbGlzZWQiLCJQaGFyeW5nZWFsIiksIAogICAgICAgY29sPWMoImRhcmttYWdlbnRhIiwiZ3JheTcwIiwiZ3JlZW4iLCJyZWQiLCJibHVlIiksIGx3ZD00KQpgYGAKCiMjIyMgTWlkcG9pbnQKYGBge3Igd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgZXJyb3I9RkFMU0V9CnBsb3Rfc21vb3RoKHBoYXIuZ2FtLkFSLCB2aWV3ID0gIkZhbiIsY29uZCA9IGxpc3QoY29udGV4dC5vcmQ9InBsYWluIix2b3dlbC5vcmQ9ImlpIix0aW1lPTIpLGNvbD0iZGFya21hZ2VudGEiLHlsaW0gPSBjKDEwLDY1KSx5bGFiPSIiLHhsYWI9IiIsCiAgICAgICAgICAgIG1haW49IkdBTSBzbW9vdGhzIGluIC9pOi8gYXQgTWlkIixoaWRlLmxhYmVsPVQsY2V4LmF4aXM9MS4zLHJtLnJhbmVmPVQpCnBsb3Rfc21vb3RoKHBoYXIuZ2FtLkFSLCB2aWV3ID0gIkZhbiIsY29uZCA9IGxpc3QoY29udGV4dC5vcmQ9InZlbGFyIix2b3dlbC5vcmQ9ImlpIix0aW1lPTIpLGNvbD0iZ3JheTcwIixhZGQ9VFJVRSx5bGltID0gYygxMCw2NSksaGlkZS5sYWJlbD1ULGNleC5heGlzPTEuMyxybS5yYW5lZj1UKQpwbG90X3Ntb290aChwaGFyLmdhbS5BUiwgdmlldyA9ICJGYW4iLGNvbmQgPSBsaXN0KGNvbnRleHQub3JkPSJ1dnVsYXIiLHZvd2VsLm9yZD0iaWkiLHRpbWU9MiksY29sPSJncmVlbiIsYWRkPVRSVUUseWxpbSA9IGMoMTAsNjUpLGhpZGUubGFiZWw9VCxjZXguYXhpcz0xLjMscm0ucmFuZWY9VCkKcGxvdF9zbW9vdGgocGhhci5nYW0uQVIsIHZpZXcgPSAiRmFuIixjb25kID0gbGlzdChjb250ZXh0Lm9yZD0icGhhcnluZ2VhbGlzZWQiLHZvd2VsLm9yZD0iaWkiLHRpbWU9MiksY29sPSJyZWQiLGFkZD1UUlVFLHlsaW0gPSBjKDEwLDY1KSxoaWRlLmxhYmVsPVQsY2V4LmF4aXM9MS4zLHJtLnJhbmVmPVQpCnBsb3Rfc21vb3RoKHBoYXIuZ2FtLkFSLCB2aWV3ID0gIkZhbiIsY29uZCA9IGxpc3QoY29udGV4dC5vcmQ9InBoYXJ5bmdlYWwiLHZvd2VsLm9yZD0iaWkiLHRpbWU9MiksY29sPSJibHVlIixhZGQ9VFJVRSx5bGltID0gYygxMCw2NSksaGlkZS5sYWJlbD1ULGNleC5heGlzPTEuMyxybS5yYW5lZj1UKQpsZWdlbmQoInRvcGxlZnQiLCBsZWdlbmQ9YygiUGxhaW4iLCAiVmVsYXIiLCAiVXZ1bGFyIiwiUGhhcnluZ2VhbGlzZWQiLCJQaGFyeW5nZWFsIiksIAogICAgICAgY29sPWMoImRhcmttYWdlbnRhIiwiZ3JheTcwIiwiZ3JlZW4iLCJyZWQiLCJibHVlIiksIGx3ZD00KQpgYGAKCiMjIyMgT2Zmc2V0CmBgYHtyIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIGVycm9yPUZBTFNFfQpwbG90X3Ntb290aChwaGFyLmdhbS5BUiwgdmlldyA9ICJGYW4iLGNvbmQgPSBsaXN0KGNvbnRleHQub3JkPSJwbGFpbiIsdm93ZWwub3JkPSJpaSIsdGltZT0zKSxjb2w9ImRhcmttYWdlbnRhIix5bGltID0gYygxMCw2NSkseWxhYj0iIix4bGFiPSIiLAogICAgICAgICAgICBtYWluPSJHQU0gc21vb3RocyBpbiAvaTovIGF0IE9mZnNldCIsaGlkZS5sYWJlbD1ULGNleC5heGlzPTEuMyxybS5yYW5lZj1UKQpwbG90X3Ntb290aChwaGFyLmdhbS5BUiwgdmlldyA9ICJGYW4iLGNvbmQgPSBsaXN0KGNvbnRleHQub3JkPSJ2ZWxhciIsdm93ZWwub3JkPSJpaSIsdGltZT0zKSxjb2w9ImdyYXk3MCIsYWRkPVRSVUUseWxpbSA9IGMoMTAsNjUpLGhpZGUubGFiZWw9VCxjZXguYXhpcz0xLjMscm0ucmFuZWY9VCkKcGxvdF9zbW9vdGgocGhhci5nYW0uQVIsIHZpZXcgPSAiRmFuIixjb25kID0gbGlzdChjb250ZXh0Lm9yZD0idXZ1bGFyIix2b3dlbC5vcmQ9ImlpIix0aW1lPTMpLGNvbD0iZ3JlZW4iLGFkZD1UUlVFLHlsaW0gPSBjKDEwLDY1KSxoaWRlLmxhYmVsPVQsY2V4LmF4aXM9MS4zLHJtLnJhbmVmPVQpCnBsb3Rfc21vb3RoKHBoYXIuZ2FtLkFSLCB2aWV3ID0gIkZhbiIsY29uZCA9IGxpc3QoY29udGV4dC5vcmQ9InBoYXJ5bmdlYWxpc2VkIix2b3dlbC5vcmQ9ImlpIix0aW1lPTMpLGNvbD0icmVkIixhZGQ9VFJVRSx5bGltID0gYygxMCw2NSksaGlkZS5sYWJlbD1ULGNleC5heGlzPTEuMyxybS5yYW5lZj1UKQpwbG90X3Ntb290aChwaGFyLmdhbS5BUiwgdmlldyA9ICJGYW4iLGNvbmQgPSBsaXN0KGNvbnRleHQub3JkPSJwaGFyeW5nZWFsIix2b3dlbC5vcmQ9ImlpIix0aW1lPTMpLGNvbD0iYmx1ZSIsYWRkPVRSVUUseWxpbSA9IGMoMTAsNjUpLGhpZGUubGFiZWw9VCxjZXguYXhpcz0xLjMscm0ucmFuZWY9VCkKbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kPWMoIlBsYWluIiwgIlZlbGFyIiwgIlV2dWxhciIsIlBoYXJ5bmdlYWxpc2VkIiwiUGhhcnluZ2VhbCIpLCAKICAgICAgIGNvbD1jKCJkYXJrbWFnZW50YSIsImdyYXk3MCIsImdyZWVuIiwicmVkIiwiYmx1ZSIpLCBsd2Q9NCkKYGBgCgojIyMgVm93ZWwgL2E6LwoKIyMjIyBPbnNldApgYGB7ciB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCBlcnJvcj1GQUxTRX0KcGxvdF9zbW9vdGgocGhhci5nYW0uQVIsIHZpZXcgPSAiRmFuIixjb25kID0gbGlzdChjb250ZXh0Lm9yZD0icGxhaW4iLHZvd2VsLm9yZD0iYWEiLHRpbWU9MSksY29sPSJkYXJrbWFnZW50YSIseWxpbSA9IGMoMTAsNjUpLHlsYWI9IiIseGxhYj0iIiwKICAgICAgICAgICAgbWFpbj0iR0FNIHNtb290aHMgaW4gL2E6LyBhdCBPbnNldCIsaGlkZS5sYWJlbD1ULGNleC5heGlzPTEuMyxybS5yYW5lZj1UKQpwbG90X3Ntb290aChwaGFyLmdhbS5BUiwgdmlldyA9ICJGYW4iLGNvbmQgPSBsaXN0KGNvbnRleHQub3JkPSJ2ZWxhciIsdm93ZWwub3JkPSJhYSIsdGltZT0xKSxjb2w9ImdyYXk3MCIsYWRkPVRSVUUseWxpbSA9IGMoMTAsNjUpLGhpZGUubGFiZWw9VCxjZXguYXhpcz0xLjMscm0ucmFuZWY9VCkKcGxvdF9zbW9vdGgocGhhci5nYW0uQVIsIHZpZXcgPSAiRmFuIixjb25kID0gbGlzdChjb250ZXh0Lm9yZD0idXZ1bGFyIix2b3dlbC5vcmQ9ImFhIix0aW1lPTEpLGNvbD0iZ3JlZW4iLGFkZD1UUlVFLHlsaW0gPSBjKDEwLDY1KSxoaWRlLmxhYmVsPVQsY2V4LmF4aXM9MS4zLHJtLnJhbmVmPVQpCnBsb3Rfc21vb3RoKHBoYXIuZ2FtLkFSLCB2aWV3ID0gIkZhbiIsY29uZCA9IGxpc3QoY29udGV4dC5vcmQ9InBoYXJ5bmdlYWxpc2VkIix2b3dlbC5vcmQ9ImFhIix0aW1lPTEpLGNvbD0icmVkIixhZGQ9VFJVRSx5bGltID0gYygxMCw2NSksaGlkZS5sYWJlbD1ULGNleC5heGlzPTEuMyxybS5yYW5lZj1UKQpwbG90X3Ntb290aChwaGFyLmdhbS5BUiwgdmlldyA9ICJGYW4iLGNvbmQgPSBsaXN0KGNvbnRleHQub3JkPSJwaGFyeW5nZWFsIix2b3dlbC5vcmQ9ImFhIix0aW1lPTEpLGNvbD0iYmx1ZSIsYWRkPVRSVUUseWxpbSA9IGMoMTAsNjUpLGhpZGUubGFiZWw9VCxjZXguYXhpcz0xLjMscm0ucmFuZWY9VCkKbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kPWMoIlBsYWluIiwgIlZlbGFyIiwgIlV2dWxhciIsIlBoYXJ5bmdlYWxpc2VkIiwiUGhhcnluZ2VhbCIpLCAKICAgICAgIGNvbD1jKCJkYXJrbWFnZW50YSIsImdyYXk3MCIsImdyZWVuIiwicmVkIiwiYmx1ZSIpLCBsd2Q9NCkKYGBgCgojIyMjIE1pZHBvaW50CmBgYHtyIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIGVycm9yPUZBTFNFfQpwbG90X3Ntb290aChwaGFyLmdhbS5BUiwgdmlldyA9ICJGYW4iLGNvbmQgPSBsaXN0KGNvbnRleHQub3JkPSJwbGFpbiIsdm93ZWwub3JkPSJhYSIsdGltZT0yKSxjb2w9ImRhcmttYWdlbnRhIix5bGltID0gYygxMCw2NSkseWxhYj0iIix4bGFiPSIiLAogICAgICAgICAgICBtYWluPSJHQU0gc21vb3RocyBpbiAvYTovIGF0IE1pZCIsaGlkZS5sYWJlbD1ULGNleC5heGlzPTEuMyxybS5yYW5lZj1UKQpwbG90X3Ntb290aChwaGFyLmdhbS5BUiwgdmlldyA9ICJGYW4iLGNvbmQgPSBsaXN0KGNvbnRleHQub3JkPSJ2ZWxhciIsdm93ZWwub3JkPSJhYSIsdGltZT0yKSxjb2w9ImdyYXk3MCIsYWRkPVRSVUUseWxpbSA9IGMoMTAsNjUpLGhpZGUubGFiZWw9VCxjZXguYXhpcz0xLjMscm0ucmFuZWY9VCkKcGxvdF9zbW9vdGgocGhhci5nYW0uQVIsIHZpZXcgPSAiRmFuIixjb25kID0gbGlzdChjb250ZXh0Lm9yZD0idXZ1bGFyIix2b3dlbC5vcmQ9ImFhIix0aW1lPTIpLGNvbD0iZ3JlZW4iLGFkZD1UUlVFLHlsaW0gPSBjKDEwLDY1KSxoaWRlLmxhYmVsPVQsY2V4LmF4aXM9MS4zLHJtLnJhbmVmPVQpCnBsb3Rfc21vb3RoKHBoYXIuZ2FtLkFSLCB2aWV3ID0gIkZhbiIsY29uZCA9IGxpc3QoY29udGV4dC5vcmQ9InBoYXJ5bmdlYWxpc2VkIix2b3dlbC5vcmQ9ImFhIix0aW1lPTIpLGNvbD0icmVkIixhZGQ9VFJVRSx5bGltID0gYygxMCw2NSksaGlkZS5sYWJlbD1ULGNleC5heGlzPTEuMyxybS5yYW5lZj1UKQpwbG90X3Ntb290aChwaGFyLmdhbS5BUiwgdmlldyA9ICJGYW4iLGNvbmQgPSBsaXN0KGNvbnRleHQub3JkPSJwaGFyeW5nZWFsIix2b3dlbC5vcmQ9ImFhIix0aW1lPTIpLGNvbD0iYmx1ZSIsYWRkPVRSVUUseWxpbSA9IGMoMTAsNjUpLGhpZGUubGFiZWw9VCxjZXguYXhpcz0xLjMscm0ucmFuZWY9VCkKbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kPWMoIlBsYWluIiwgIlZlbGFyIiwgIlV2dWxhciIsIlBoYXJ5bmdlYWxpc2VkIiwiUGhhcnluZ2VhbCIpLCAKICAgICAgIGNvbD1jKCJkYXJrbWFnZW50YSIsImdyYXk3MCIsImdyZWVuIiwicmVkIiwiYmx1ZSIpLCBsd2Q9NCkKYGBgCgojIyMjIE9mZnNldApgYGB7ciB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCBlcnJvcj1GQUxTRX0KcGxvdF9zbW9vdGgocGhhci5nYW0uQVIsIHZpZXcgPSAiRmFuIixjb25kID0gbGlzdChjb250ZXh0Lm9yZD0icGxhaW4iLHZvd2VsLm9yZD0iYWEiLHRpbWU9MyksY29sPSJkYXJrbWFnZW50YSIseWxpbSA9IGMoMTAsNjUpLHlsYWI9IiIseGxhYj0iIiwKICAgICAgICAgICAgbWFpbj0iR0FNIHNtb290aHMgaW4gL2E6LyBhdCBPZmZzZXQiLGhpZGUubGFiZWw9VCxjZXguYXhpcz0xLjMscm0ucmFuZWY9VCkKcGxvdF9zbW9vdGgocGhhci5nYW0uQVIsIHZpZXcgPSAiRmFuIixjb25kID0gbGlzdChjb250ZXh0Lm9yZD0idmVsYXIiLHZvd2VsLm9yZD0iYWEiLHRpbWU9MyksY29sPSJncmF5NzAiLGFkZD1UUlVFLHlsaW0gPSBjKDEwLDY1KSxoaWRlLmxhYmVsPVQsY2V4LmF4aXM9MS4zLHJtLnJhbmVmPVQpCnBsb3Rfc21vb3RoKHBoYXIuZ2FtLkFSLCB2aWV3ID0gIkZhbiIsY29uZCA9IGxpc3QoY29udGV4dC5vcmQ9InV2dWxhciIsdm93ZWwub3JkPSJhYSIsdGltZT0zKSxjb2w9ImdyZWVuIixhZGQ9VFJVRSx5bGltID0gYygxMCw2NSksaGlkZS5sYWJlbD1ULGNleC5heGlzPTEuMyxybS5yYW5lZj1UKQpwbG90X3Ntb290aChwaGFyLmdhbS5BUiwgdmlldyA9ICJGYW4iLGNvbmQgPSBsaXN0KGNvbnRleHQub3JkPSJwaGFyeW5nZWFsaXNlZCIsdm93ZWwub3JkPSJhYSIsdGltZT0zKSxjb2w9InJlZCIsYWRkPVRSVUUseWxpbSA9IGMoMTAsNjUpLGhpZGUubGFiZWw9VCxjZXguYXhpcz0xLjMscm0ucmFuZWY9VCkKcGxvdF9zbW9vdGgocGhhci5nYW0uQVIsIHZpZXcgPSAiRmFuIixjb25kID0gbGlzdChjb250ZXh0Lm9yZD0icGhhcnluZ2VhbCIsdm93ZWwub3JkPSJhYSIsdGltZT0zKSxjb2w9ImJsdWUiLGFkZD1UUlVFLHlsaW0gPSBjKDEwLDY1KSxoaWRlLmxhYmVsPVQsY2V4LmF4aXM9MS4zLHJtLnJhbmVmPVQpCmxlZ2VuZCgidG9wbGVmdCIsIGxlZ2VuZD1jKCJQbGFpbiIsICJWZWxhciIsICJVdnVsYXIiLCJQaGFyeW5nZWFsaXNlZCIsIlBoYXJ5bmdlYWwiKSwgCiAgICAgICBjb2w9YygiZGFya21hZ2VudGEiLCJncmF5NzAiLCJncmVlbiIsInJlZCIsImJsdWUiKSwgbHdkPTQpCmBgYAoKIyMjIFZvd2VsIC91Oi8KCiMjIyMgT25zZXQKYGBge3Igd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgZXJyb3I9RkFMU0V9CnBsb3Rfc21vb3RoKHBoYXIuZ2FtLkFSLCB2aWV3ID0gIkZhbiIsY29uZCA9IGxpc3QoY29udGV4dC5vcmQ9InBsYWluIix2b3dlbC5vcmQ9InV1Iix0aW1lPTEpLGNvbD0iZGFya21hZ2VudGEiLHlsaW0gPSBjKDEwLDY1KSx5bGFiPSIiLHhsYWI9IiIsCiAgICAgICAgICAgIG1haW49IkdBTSBzbW9vdGhzIGluIC91Oi8gYXQgT25zZXQiLGhpZGUubGFiZWw9VCxjZXguYXhpcz0xLjMscm0ucmFuZWY9VCkKcGxvdF9zbW9vdGgocGhhci5nYW0uQVIsIHZpZXcgPSAiRmFuIixjb25kID0gbGlzdChjb250ZXh0Lm9yZD0idmVsYXIiLHZvd2VsLm9yZD0idXUiLHRpbWU9MSksY29sPSJncmF5NzAiLGFkZD1UUlVFLHlsaW0gPSBjKDEwLDY1KSxoaWRlLmxhYmVsPVQsY2V4LmF4aXM9MS4zLHJtLnJhbmVmPVQpCnBsb3Rfc21vb3RoKHBoYXIuZ2FtLkFSLCB2aWV3ID0gIkZhbiIsY29uZCA9IGxpc3QoY29udGV4dC5vcmQ9InV2dWxhciIsdm93ZWwub3JkPSJ1dSIsdGltZT0xKSxjb2w9ImdyZWVuIixhZGQ9VFJVRSx5bGltID0gYygxMCw2NSksaGlkZS5sYWJlbD1ULGNleC5heGlzPTEuMyxybS5yYW5lZj1UKQpwbG90X3Ntb290aChwaGFyLmdhbS5BUiwgdmlldyA9ICJGYW4iLGNvbmQgPSBsaXN0KGNvbnRleHQub3JkPSJwaGFyeW5nZWFsaXNlZCIsdm93ZWwub3JkPSJ1dSIsdGltZT0xKSxjb2w9InJlZCIsYWRkPVRSVUUseWxpbSA9IGMoMTAsNjUpLGhpZGUubGFiZWw9VCxjZXguYXhpcz0xLjMscm0ucmFuZWY9VCkKcGxvdF9zbW9vdGgocGhhci5nYW0uQVIsIHZpZXcgPSAiRmFuIixjb25kID0gbGlzdChjb250ZXh0Lm9yZD0icGhhcnluZ2VhbCIsdm93ZWwub3JkPSJ1dSIsdGltZT0xKSxjb2w9ImJsdWUiLGFkZD1UUlVFLHlsaW0gPSBjKDEwLDY1KSxoaWRlLmxhYmVsPVQsY2V4LmF4aXM9MS4zLHJtLnJhbmVmPVQpCmxlZ2VuZCgidG9wbGVmdCIsIGxlZ2VuZD1jKCJQbGFpbiIsICJWZWxhciIsICJVdnVsYXIiLCJQaGFyeW5nZWFsaXNlZCIsIlBoYXJ5bmdlYWwiKSwgCiAgICAgICBjb2w9YygiZGFya21hZ2VudGEiLCJncmF5NzAiLCJncmVlbiIsInJlZCIsImJsdWUiKSwgbHdkPTQpCmBgYAoKIyMjIyBNaWRwb2ludApgYGB7ciB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCBlcnJvcj1GQUxTRX0KcGxvdF9zbW9vdGgocGhhci5nYW0uQVIsIHZpZXcgPSAiRmFuIixjb25kID0gbGlzdChjb250ZXh0Lm9yZD0icGxhaW4iLHZvd2VsLm9yZD0idXUiLHRpbWU9MiksY29sPSJkYXJrbWFnZW50YSIseWxpbSA9IGMoMTAsNjUpLHlsYWI9IiIseGxhYj0iIiwKICAgICAgICAgICAgbWFpbj0iR0FNIHNtb290aHMgaW4gL3U6LyBhdCBNaWQiLGhpZGUubGFiZWw9VCxjZXguYXhpcz0xLjMscm0ucmFuZWY9VCkKcGxvdF9zbW9vdGgocGhhci5nYW0uQVIsIHZpZXcgPSAiRmFuIixjb25kID0gbGlzdChjb250ZXh0Lm9yZD0idmVsYXIiLHZvd2VsLm9yZD0idXUiLHRpbWU9MiksY29sPSJncmF5NzAiLGFkZD1UUlVFLHlsaW0gPSBjKDEwLDY1KSxoaWRlLmxhYmVsPVQsY2V4LmF4aXM9MS4zLHJtLnJhbmVmPVQpCnBsb3Rfc21vb3RoKHBoYXIuZ2FtLkFSLCB2aWV3ID0gIkZhbiIsY29uZCA9IGxpc3QoY29udGV4dC5vcmQ9InV2dWxhciIsdm93ZWwub3JkPSJ1dSIsdGltZT0yKSxjb2w9ImdyZWVuIixhZGQ9VFJVRSx5bGltID0gYygxMCw2NSksaGlkZS5sYWJlbD1ULGNleC5heGlzPTEuMyxybS5yYW5lZj1UKQpwbG90X3Ntb290aChwaGFyLmdhbS5BUiwgdmlldyA9ICJGYW4iLGNvbmQgPSBsaXN0KGNvbnRleHQub3JkPSJwaGFyeW5nZWFsaXNlZCIsdm93ZWwub3JkPSJ1dSIsdGltZT0yKSxjb2w9InJlZCIsYWRkPVRSVUUseWxpbSA9IGMoMTAsNjUpLGhpZGUubGFiZWw9VCxjZXguYXhpcz0xLjMscm0ucmFuZWY9VCkKcGxvdF9zbW9vdGgocGhhci5nYW0uQVIsIHZpZXcgPSAiRmFuIixjb25kID0gbGlzdChjb250ZXh0Lm9yZD0icGhhcnluZ2VhbCIsdm93ZWwub3JkPSJ1dSIsdGltZT0yKSxjb2w9ImJsdWUiLGFkZD1UUlVFLHlsaW0gPSBjKDEwLDY1KSxoaWRlLmxhYmVsPVQsY2V4LmF4aXM9MS4zLHJtLnJhbmVmPVQpCmxlZ2VuZCgidG9wbGVmdCIsIGxlZ2VuZD1jKCJQbGFpbiIsICJWZWxhciIsICJVdnVsYXIiLCJQaGFyeW5nZWFsaXNlZCIsIlBoYXJ5bmdlYWwiKSwgCiAgICAgICBjb2w9YygiZGFya21hZ2VudGEiLCJncmF5NzAiLCJncmVlbiIsInJlZCIsImJsdWUiKSwgbHdkPTQpCmBgYAoKIyMjIyBPZmZzZXQKYGBge3Igd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgZXJyb3I9RkFMU0V9CgpwbG90X3Ntb290aChwaGFyLmdhbS5BUiwgdmlldyA9ICJGYW4iLGNvbmQgPSBsaXN0KGNvbnRleHQub3JkPSJwbGFpbiIsdm93ZWwub3JkPSJ1dSIsdGltZT0zKSxjb2w9ImRhcmttYWdlbnRhIix5bGltID0gYygxMCw2NSkseWxhYj0iIix4bGFiPSIiLAogICAgICAgICAgICBtYWluPSJHQU0gc21vb3RocyBpbiAvdTovIGF0IE9mZnNldCIsaGlkZS5sYWJlbD1ULGNleC5heGlzPTEuMyxybS5yYW5lZj1UKQpwbG90X3Ntb290aChwaGFyLmdhbS5BUiwgdmlldyA9ICJGYW4iLGNvbmQgPSBsaXN0KGNvbnRleHQub3JkPSJ2ZWxhciIsdm93ZWwub3JkPSJ1dSIsdGltZT0zKSxjb2w9ImdyYXk3MCIsYWRkPVRSVUUseWxpbSA9IGMoMTAsNjUpLGhpZGUubGFiZWw9VCxjZXguYXhpcz0xLjMscm0ucmFuZWY9VCkKcGxvdF9zbW9vdGgocGhhci5nYW0uQVIsIHZpZXcgPSAiRmFuIixjb25kID0gbGlzdChjb250ZXh0Lm9yZD0idXZ1bGFyIix2b3dlbC5vcmQ9InV1Iix0aW1lPTMpLGNvbD0iZ3JlZW4iLGFkZD1UUlVFLHlsaW0gPSBjKDEwLDY1KSxoaWRlLmxhYmVsPVQsY2V4LmF4aXM9MS4zLHJtLnJhbmVmPVQpCnBsb3Rfc21vb3RoKHBoYXIuZ2FtLkFSLCB2aWV3ID0gIkZhbiIsY29uZCA9IGxpc3QoY29udGV4dC5vcmQ9InBoYXJ5bmdlYWxpc2VkIix2b3dlbC5vcmQ9InV1Iix0aW1lPTMpLGNvbD0icmVkIixhZGQ9VFJVRSx5bGltID0gYygxMCw2NSksaGlkZS5sYWJlbD1ULGNleC5heGlzPTEuMyxybS5yYW5lZj1UKQpwbG90X3Ntb290aChwaGFyLmdhbS5BUiwgdmlldyA9ICJGYW4iLGNvbmQgPSBsaXN0KGNvbnRleHQub3JkPSJwaGFyeW5nZWFsIix2b3dlbC5vcmQ9InV1Iix0aW1lPTMpLGNvbD0iYmx1ZSIsYWRkPVRSVUUseWxpbSA9IGMoMTAsNjUpLGhpZGUubGFiZWw9VCxjZXguYXhpcz0xLjMscm0ucmFuZWY9VCkKbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kPWMoIlBsYWluIiwgIlZlbGFyIiwgIlV2dWxhciIsIlBoYXJ5bmdlYWxpc2VkIiwiUGhhcnluZ2VhbCIpLCAKICAgICAgIGNvbD1jKCJkYXJrbWFnZW50YSIsImdyYXk3MCIsImdyZWVuIiwicmVkIiwiYmx1ZSIpLCBsd2Q9NCkKCgpgYGAKCiMjIFZpc3VhbGlzaW5nIERpZmZlcmVuY2Ugc21vb3RocyBmcm9tIHNlY29uZCBBdXRvcmVncmVzc2l2ZSBHQU0KV2UgdXNlIHRoZSBmdW5jdGlvbiBpdHNhZHVnOjpwbG90X2RpZmYgdG8gcGxvdCB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgZm9sbG93aW5nIHBhaXJzOiAicGhhcnluZ2VhbGlzZWQiIHZzICJwbGFpbiI7ICJ1dnVsYXIiIHZzICJwaGFyeW5nZWFsaXNlZCIgYW5kICJwaGFyeW5nZWFsaXNlZCIgdnMgInBoYXJ5bmdlYWwiLCBpbiBlYWNoIG9mIHRoZSB2b3dlbCBjb250ZXh0cyAvaTogYTogdTovIGF0IHRoZSBvbnNldCwgbWlkcG9pbnQgYW5kIG9mZnNldC4KClRoZSByZXN1bHRzIHNob3cgdGhhdDogCgoxLiBQaGFyeW5nZWFsaXNlZCB2cyBQbGFpbjogcGhhcnluZ2VhbGlzZWQgaXMgZGlmZmVyZW50IGluIHRvbmd1ZSBzaGFwZS4gVGhlcmUgaXMgYW4gaW5jcmVhc2UgaW4geSBjb29yZGluYXRlcyAoRmFuIDE1LTIyKSBpbmRpY2F0aW5nICJyZXRyYWN0aW9uIiwgZGVjcmVhc2UgKEZhbiAyNS0zNSkgaW5kaWNhdGluZyAiZGVwcmVzc2lvbiIgb2YgdGhlIHRvbmd1ZSBhbmQgcG90ZW50aWFsIGRpZmZlcmVuY2UgaW4gbGFyeW54IGhlaWdodCAoRmFuIDUtMTApCjIuIFV2dWxhciB2cyBQaGFyeW5nZWFsaXNlZDogZGlmZmVyZW5jZXMgZGVwZW5kIG9mIHZvd2VscyAoRmFuIDE1LTM0KTogdXZ1bGFyIGlzIGZyb250ZXIgaW4gL2k6LyAoRmFuIDIyLTM0KTsgInJhaXNlZCIgaW4gL2E6LyAoRmFuIDIyLTI4KSBhbmQgL3U6LyAoRmFuIDE1LTI1KQozLiBQaGFyeW5nZWFsaXNlZCB2cyBQaGFyeW5nZWFsOiBQaGFyeW5nZWFsaXNlZCBpcyAicmV0cmFjdGVkIi9iYWNrZWQgdG8gbWlkLXBvc2l0aW9uIChGYW4gMTUtMjUpLCB3aXRoICJkZXByZXNzaW9uIiBvZiB0aGUgdG9uZ3VlIChGYW4gMjItMzUpIGFuZCBwb3RlbnRpYWwgbG93ZXJlZCBsYXJ5bnggKEZhbiA1LTEwKS4KCiMjIyBQaGFyeW5nZWFsaXNlZCB2cyBQbGFpbgojIyMjIE9uc2V0CmBgYHtyIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIGVycm9yPUZBTFNFfQpwYXIob21hPWMoMSwgMCwgMCwgMy41KSxtZ3A9YygyLCAxLCAwKSkKcGxvdF9kaWZmKHBoYXIuZ2FtLkFSLCB2aWV3PSJGYW4iLGNvbXA9bGlzdChjb250ZXh0Lm9yZD1jKCJwaGFyeW5nZWFsaXNlZCIsInBsYWluIikpLAogICAgICAgICAgeGxhYj0iIixjb25kPWxpc3QodGltZT0xLHZvd2VsLm9yZD0iaWkiKSxtYWluID0gImRpZmZlcmVuY2UgcGhhcnluZ2VhbGlzZWQgdnMgcGxhaW4gT25zZXQiLAogICAgICAgICAgY29sPSdncmVlbicsY2V4Lm1haW49MS4xLG1hcmsuZGlmZiA9IFRSVUUsY29sLmRpZmYgPSAiZ3JlZW4iLAogICAgICAgICAgeWxpbT1jKC0xNSwxNSksaGlkZS5sYWJlbD1ULHJtLnJhbmVmPVQpCgpwbG90X2RpZmYocGhhci5nYW0uQVIsIHZpZXc9IkZhbiIsY29tcD1saXN0KGNvbnRleHQub3JkPWMoInBoYXJ5bmdlYWxpc2VkIiwicGxhaW4iKSksCiAgICAgICAgICB4bGFiPSIiLGNvbmQ9bGlzdCh0aW1lPTEsdm93ZWwub3JkPSJhYSIpLGFkZD1UUlVFLAogICAgICAgICAgY29sPSdyZWQnLG1hcmsuZGlmZiA9ICBUUlVFLGNvbC5kaWZmID0gInJlZCIsCiAgICAgICAgICB5bGltPWMoLTE1LDE1KSxoaWRlLmxhYmVsPVQscm0ucmFuZWY9VCkKCnBsb3RfZGlmZihwaGFyLmdhbS5BUiwgdmlldz0iRmFuIixjb21wPWxpc3QoY29udGV4dC5vcmQ9YygicGhhcnluZ2VhbGlzZWQiLCJwbGFpbiIpKSwKICAgICAgICAgIHhsYWI9IiIsY29uZD1saXN0KHRpbWU9MSx2b3dlbC5vcmQ9InV1IiksYWRkPVRSVUUsCiAgICAgICAgICBjb2w9J2JsdWUnLG1hcmsuZGlmZiA9ICBUUlVFLGNvbC5kaWZmID0gImJsdWUiLAogICAgICAgICAgeWxpbT1jKC0xNSwxNSksaGlkZS5sYWJlbD1ULHJtLnJhbmVmPVQpCmxlZ2VuZChwYXIoJ3VzcicpWzJdLCBwYXIoJ3VzcicpWzRdLCBidHk9J24nLCB4cGQ9TkEsbHR5PTEsIAogICAgICAgbGVnZW5kPWMoIi9pOi8iLCAiL2E6LyIsICIvdTovIiksY29sPWMoImdyZWVuIiwicmVkIiwiYmx1ZSIpLCBsd2Q9NCwgY2V4PTEuMikKYGBgCgojIyMjIE1pZHBvaW50CmBgYHtyIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIGVycm9yPUZBTFNFfQpwYXIob21hPWMoMSwgMCwgMCwgMy41KSxtZ3A9YygyLCAxLCAwKSkKcGxvdF9kaWZmKHBoYXIuZ2FtLkFSLCB2aWV3PSJGYW4iLGNvbXA9bGlzdChjb250ZXh0Lm9yZD1jKCJwaGFyeW5nZWFsaXNlZCIsInBsYWluIikpLAogICAgICAgICAgeGxhYj0iIixjb25kPWxpc3QodGltZT0yLHZvd2VsLm9yZD0iaWkiKSxtYWluID0gImRpZmZlcmVuY2UgcGhhcnluZ2VhbGlzZWQgdnMgcGxhaW4gTWlkcG9pbnQiLAogICAgICAgICAgY29sPSdncmVlbicsY2V4Lm1haW49MS4xLG1hcmsuZGlmZiA9IFRSVUUsY29sLmRpZmYgPSAiZ3JlZW4iLAogICAgICAgICAgeWxpbT1jKC0xNSwxNSksaGlkZS5sYWJlbD1ULHJtLnJhbmVmPVQpCgpwbG90X2RpZmYocGhhci5nYW0uQVIsIHZpZXc9IkZhbiIsY29tcD1saXN0KGNvbnRleHQub3JkPWMoInBoYXJ5bmdlYWxpc2VkIiwicGxhaW4iKSksCiAgICAgICAgICB4bGFiPSIiLGNvbmQ9bGlzdCh0aW1lPTIsdm93ZWwub3JkPSJhYSIpLGFkZD1UUlVFLAogICAgICAgICAgY29sPSdyZWQnLG1hcmsuZGlmZiA9ICBUUlVFLGNvbC5kaWZmID0gInJlZCIsCiAgICAgICAgICB5bGltPWMoLTE1LDE1KSxoaWRlLmxhYmVsPVQscm0ucmFuZWY9VCkKCnBsb3RfZGlmZihwaGFyLmdhbS5BUiwgdmlldz0iRmFuIixjb21wPWxpc3QoY29udGV4dC5vcmQ9YygicGhhcnluZ2VhbGlzZWQiLCJwbGFpbiIpKSwKICAgICAgICAgIHhsYWI9IiIsY29uZD1saXN0KHRpbWU9Mix2b3dlbC5vcmQ9InV1IiksYWRkPVRSVUUsCiAgICAgICAgICBjb2w9J2JsdWUnLG1hcmsuZGlmZiA9ICBUUlVFLGNvbC5kaWZmID0gImJsdWUiLAogICAgICAgICAgeWxpbT1jKC0xNSwxNSksaGlkZS5sYWJlbD1ULHJtLnJhbmVmPVQpCmxlZ2VuZChwYXIoJ3VzcicpWzJdLCBwYXIoJ3VzcicpWzRdLCBidHk9J24nLCB4cGQ9TkEsbHR5PTEsIAogICAgICAgbGVnZW5kPWMoIi9pOi8iLCAiL2E6LyIsICIvdTovIiksY29sPWMoImdyZWVuIiwicmVkIiwiYmx1ZSIpLCBsd2Q9NCwgY2V4PTEuMikKYGBgCgojIyMjIE9mZnNldApgYGB7ciB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCBlcnJvcj1GQUxTRX0KcGFyKG9tYT1jKDEsIDAsIDAsIDMuNSksbWdwPWMoMiwgMSwgMCkpCnBsb3RfZGlmZihwaGFyLmdhbS5BUiwgdmlldz0iRmFuIixjb21wPWxpc3QoY29udGV4dC5vcmQ9YygicGhhcnluZ2VhbGlzZWQiLCJwbGFpbiIpKSwKICAgICAgICAgIHhsYWI9IiIsY29uZD1saXN0KHRpbWU9Myx2b3dlbC5vcmQ9ImlpIiksbWFpbiA9ICJkaWZmZXJlbmNlIHBoYXJ5bmdlYWxpc2VkIHZzIHBsYWluIE9mZnNldCIsCiAgICAgICAgICBjb2w9J2dyZWVuJyxjZXgubWFpbj0xLjEsbWFyay5kaWZmID0gVFJVRSxjb2wuZGlmZiA9ICJncmVlbiIsCiAgICAgICAgICB5bGltPWMoLTE1LDE1KSxoaWRlLmxhYmVsPVQscm0ucmFuZWY9VCkKCnBsb3RfZGlmZihwaGFyLmdhbS5BUiwgdmlldz0iRmFuIixjb21wPWxpc3QoY29udGV4dC5vcmQ9YygicGhhcnluZ2VhbGlzZWQiLCJwbGFpbiIpKSwKICAgICAgICAgIHhsYWI9IiIsY29uZD1saXN0KHRpbWU9Myx2b3dlbC5vcmQ9ImFhIiksYWRkPVRSVUUsCiAgICAgICAgICBjb2w9J3JlZCcsbWFyay5kaWZmID0gIFRSVUUsY29sLmRpZmYgPSAicmVkIiwKICAgICAgICAgIHlsaW09YygtMTUsMTUpLGhpZGUubGFiZWw9VCxybS5yYW5lZj1UKQoKcGxvdF9kaWZmKHBoYXIuZ2FtLkFSLCB2aWV3PSJGYW4iLGNvbXA9bGlzdChjb250ZXh0Lm9yZD1jKCJwaGFyeW5nZWFsaXNlZCIsInBsYWluIikpLAogICAgICAgICAgeGxhYj0iIixjb25kPWxpc3QodGltZT0zLHZvd2VsLm9yZD0idXUiKSxhZGQ9VFJVRSwKICAgICAgICAgIGNvbD0nYmx1ZScsbWFyay5kaWZmID0gIFRSVUUsY29sLmRpZmYgPSAiYmx1ZSIsCiAgICAgICAgICB5bGltPWMoLTE1LDE1KSxoaWRlLmxhYmVsPVQscm0ucmFuZWY9VCkKbGVnZW5kKHBhcigndXNyJylbMl0sIHBhcigndXNyJylbNF0sIGJ0eT0nbicsIHhwZD1OQSxsdHk9MSwgCiAgICAgICBsZWdlbmQ9YygiL2k6LyIsICIvYTovIiwgIi91Oi8iKSxjb2w9YygiZ3JlZW4iLCJyZWQiLCJibHVlIiksIGx3ZD00LCBjZXg9MS4yKQpgYGAKCgojIyMgVXZ1bGFyIHZzIFBoYXJ5bmdlYWxpc2VkCgojIyMjIE9uc2V0CmBgYHtyIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIGVycm9yPUZBTFNFfQpwYXIob21hPWMoMSwgMCwgMCwgMy41KSxtZ3A9YygyLCAxLCAwKSkKcGxvdF9kaWZmKHBoYXIuZ2FtLkFSLCB2aWV3PSJGYW4iLGNvbXA9bGlzdChjb250ZXh0Lm9yZD1jKCJ1dnVsYXIiLCJwaGFyeW5nZWFsaXNlZCIpKSwKICAgICAgICAgIHhsYWI9IiIsY29uZD1saXN0KHRpbWU9MSx2b3dlbC5vcmQ9ImlpIiksbWFpbiA9ICJkaWZmZXJlbmNlIHV2dWxhciB2cyBwaGFyeW5nZWFsaXNlZCBPbnNldCIsCiAgICAgICAgICBjb2w9J2dyZWVuJyxjZXgubWFpbj0xLjEsbWFyay5kaWZmID0gVFJVRSxjb2wuZGlmZiA9ICJncmVlbiIsCiAgICAgICAgICB5bGltPWMoLTE1LDE1KSxoaWRlLmxhYmVsPVQscm0ucmFuZWY9VCkKCnBsb3RfZGlmZihwaGFyLmdhbS5BUiwgdmlldz0iRmFuIixjb21wPWxpc3QoY29udGV4dC5vcmQ9YygidXZ1bGFyIiwicGhhcnluZ2VhbGlzZWQiKSksCiAgICAgICAgICB4bGFiPSIiLGNvbmQ9bGlzdCh0aW1lPTEsdm93ZWwub3JkPSJhYSIpLGFkZD1UUlVFLAogICAgICAgICAgY29sPSdyZWQnLG1hcmsuZGlmZiA9ICBUUlVFLGNvbC5kaWZmID0gInJlZCIsCiAgICAgICAgICB5bGltPWMoLTE1LDE1KSxoaWRlLmxhYmVsPVQscm0ucmFuZWY9VCkKCnBsb3RfZGlmZihwaGFyLmdhbS5BUiwgdmlldz0iRmFuIixjb21wPWxpc3QoY29udGV4dC5vcmQ9YygidXZ1bGFyIiwicGhhcnluZ2VhbGlzZWQiKSksCiAgICAgICAgICB4bGFiPSIiLGNvbmQ9bGlzdCh0aW1lPTEsdm93ZWwub3JkPSJ1dSIpLGFkZD1UUlVFLAogICAgICAgICAgY29sPSdibHVlJyxtYXJrLmRpZmYgPSAgVFJVRSxjb2wuZGlmZiA9ICJibHVlIiwKICAgICAgICAgIHlsaW09YygtMTUsMTUpLGhpZGUubGFiZWw9VCxybS5yYW5lZj1UKQpsZWdlbmQocGFyKCd1c3InKVsyXSwgcGFyKCd1c3InKVs0XSwgYnR5PSduJywgeHBkPU5BLGx0eT0xLCAKICAgICAgIGxlZ2VuZD1jKCIvaTovIiwgIi9hOi8iLCAiL3U6LyIpLGNvbD1jKCJncmVlbiIsInJlZCIsImJsdWUiKSwgbHdkPTQsIGNleD0xLjIpCgpgYGAKCiMjIyMgTWlkcG9pbnQKYGBge3Igd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgZXJyb3I9RkFMU0V9CnBhcihvbWE9YygxLCAwLCAwLCAzLjUpLG1ncD1jKDIsIDEsIDApKQpwbG90X2RpZmYocGhhci5nYW0uQVIsIHZpZXc9IkZhbiIsY29tcD1saXN0KGNvbnRleHQub3JkPWMoInV2dWxhciIsInBoYXJ5bmdlYWxpc2VkIikpLAogICAgICAgICAgeGxhYj0iIixjb25kPWxpc3QodGltZT0yLHZvd2VsLm9yZD0iaWkiKSxtYWluID0gImRpZmZlcmVuY2UgdXZ1bGFyIHZzIHBoYXJ5bmdlYWxpc2VkIE1pZHBvaW50IiwKICAgICAgICAgIGNvbD0nZ3JlZW4nLGNleC5tYWluPTEuMSxtYXJrLmRpZmYgPSBUUlVFLGNvbC5kaWZmID0gImdyZWVuIiwKICAgICAgICAgIHlsaW09YygtMTUsMTUpLGhpZGUubGFiZWw9VCxybS5yYW5lZj1UKQoKcGxvdF9kaWZmKHBoYXIuZ2FtLkFSLCB2aWV3PSJGYW4iLGNvbXA9bGlzdChjb250ZXh0Lm9yZD1jKCJ1dnVsYXIiLCJwaGFyeW5nZWFsaXNlZCIpKSwKICAgICAgICAgIHhsYWI9IiIsY29uZD1saXN0KHRpbWU9Mix2b3dlbC5vcmQ9ImFhIiksYWRkPVRSVUUsCiAgICAgICAgICBjb2w9J3JlZCcsbWFyay5kaWZmID0gIFRSVUUsY29sLmRpZmYgPSAicmVkIiwKICAgICAgICAgIHlsaW09YygtMTUsMTUpLGhpZGUubGFiZWw9VCxybS5yYW5lZj1UKQoKcGxvdF9kaWZmKHBoYXIuZ2FtLkFSLCB2aWV3PSJGYW4iLGNvbXA9bGlzdChjb250ZXh0Lm9yZD1jKCJ1dnVsYXIiLCJwaGFyeW5nZWFsaXNlZCIpKSwKICAgICAgICAgIHhsYWI9IiIsY29uZD1saXN0KHRpbWU9Mix2b3dlbC5vcmQ9InV1IiksYWRkPVRSVUUsCiAgICAgICAgICBjb2w9J2JsdWUnLG1hcmsuZGlmZiA9ICBUUlVFLGNvbC5kaWZmID0gImJsdWUiLAogICAgICAgICAgeWxpbT1jKC0xNSwxNSksaGlkZS5sYWJlbD1ULHJtLnJhbmVmPVQpCmxlZ2VuZChwYXIoJ3VzcicpWzJdLCBwYXIoJ3VzcicpWzRdLCBidHk9J24nLCB4cGQ9TkEsbHR5PTEsIAogICAgICAgbGVnZW5kPWMoIi9pOi8iLCAiL2E6LyIsICIvdTovIiksY29sPWMoImdyZWVuIiwicmVkIiwiYmx1ZSIpLCBsd2Q9NCwgY2V4PTEuMikKYGBgCgojIyMjIE9mZnNldApgYGB7ciB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCBlcnJvcj1GQUxTRX0KcGFyKG9tYT1jKDEsIDAsIDAsIDMuNSksbWdwPWMoMiwgMSwgMCkpCnBsb3RfZGlmZihwaGFyLmdhbS5BUiwgdmlldz0iRmFuIixjb21wPWxpc3QoY29udGV4dC5vcmQ9YygidXZ1bGFyIiwicGhhcnluZ2VhbGlzZWQiKSksCiAgICAgICAgICB4bGFiPSIiLGNvbmQ9bGlzdCh0aW1lPTMsdm93ZWwub3JkPSJpaSIpLG1haW4gPSAiZGlmZmVyZW5jZSB1dnVsYXIgdnMgcGhhcnluZ2VhbGlzZWQgT2Zmc2V0IiwKICAgICAgICAgIGNvbD0nZ3JlZW4nLGNleC5tYWluPTEuMSxtYXJrLmRpZmYgPSBUUlVFLGNvbC5kaWZmID0gImdyZWVuIiwKICAgICAgICAgIHlsaW09YygtMTUsMTUpLGhpZGUubGFiZWw9VCxybS5yYW5lZj1UKQoKcGxvdF9kaWZmKHBoYXIuZ2FtLkFSLCB2aWV3PSJGYW4iLGNvbXA9bGlzdChjb250ZXh0Lm9yZD1jKCJ1dnVsYXIiLCJwaGFyeW5nZWFsaXNlZCIpKSwKICAgICAgICAgIHhsYWI9IiIsY29uZD1saXN0KHRpbWU9Myx2b3dlbC5vcmQ9ImFhIiksYWRkPVRSVUUsCiAgICAgICAgICBjb2w9J3JlZCcsbWFyay5kaWZmID0gIFRSVUUsY29sLmRpZmYgPSAicmVkIiwKICAgICAgICAgIHlsaW09YygtMTUsMTUpLGhpZGUubGFiZWw9VCxybS5yYW5lZj1UKQoKcGxvdF9kaWZmKHBoYXIuZ2FtLkFSLCB2aWV3PSJGYW4iLGNvbXA9bGlzdChjb250ZXh0Lm9yZD1jKCJ1dnVsYXIiLCJwaGFyeW5nZWFsaXNlZCIpKSwKICAgICAgICAgIHhsYWI9IiIsY29uZD1saXN0KHRpbWU9Myx2b3dlbC5vcmQ9InV1IiksYWRkPVRSVUUsCiAgICAgICAgICBjb2w9J2JsdWUnLG1hcmsuZGlmZiA9ICBUUlVFLGNvbC5kaWZmID0gImJsdWUiLAogICAgICAgICAgeWxpbT1jKC0xNSwxNSksaGlkZS5sYWJlbD1ULHJtLnJhbmVmPVQpCmxlZ2VuZChwYXIoJ3VzcicpWzJdLCBwYXIoJ3VzcicpWzRdLCBidHk9J24nLCB4cGQ9TkEsbHR5PTEsIAogICAgICAgbGVnZW5kPWMoIi9pOi8iLCAiL2E6LyIsICIvdTovIiksY29sPWMoImdyZWVuIiwicmVkIiwiYmx1ZSIpLCBsd2Q9NCwgY2V4PTEuMikKYGBgCgoKIyMjIFBoYXJ5bmdlYWxpc2VkIHZzIFBoYXJ5bmdlYWwKCiMjIyMgT25zZXQKYGBge3Igd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgZXJyb3I9RkFMU0V9CnBhcihvbWE9YygxLCAwLCAwLCAzLjUpLG1ncD1jKDIsIDEsIDApKQpwbG90X2RpZmYocGhhci5nYW0uQVIsIHZpZXc9IkZhbiIsY29tcD1saXN0KGNvbnRleHQub3JkPWMoInBoYXJ5bmdlYWxpc2VkIiwicGhhcnluZ2VhbCIpKSwKICAgICAgICAgIHhsYWI9IiIsY29uZD1saXN0KHRpbWU9MSx2b3dlbC5vcmQ9ImlpIiksbWFpbiA9ICJkaWZmZXJlbmNlIHBoYXJ5bmdlYWxpc2VkIHZzIHBoYXJ5bmdlYWwgT25zZXQiLAogICAgICAgICAgY29sPSdncmVlbicsY2V4Lm1haW49MS4xLG1hcmsuZGlmZiA9IFRSVUUsY29sLmRpZmYgPSAiZ3JlZW4iLAogICAgICAgICAgeWxpbT1jKC0xNSwxNSksaGlkZS5sYWJlbD1ULHJtLnJhbmVmPVQpCgpwbG90X2RpZmYocGhhci5nYW0uQVIsIHZpZXc9IkZhbiIsY29tcD1saXN0KGNvbnRleHQub3JkPWMoInBoYXJ5bmdlYWxpc2VkIiwicGhhcnluZ2VhbCIpKSwKICAgICAgICAgIHhsYWI9IiIsY29uZD1saXN0KHRpbWU9MSx2b3dlbC5vcmQ9ImFhIiksYWRkPVRSVUUsCiAgICAgICAgICBjb2w9J3JlZCcsbWFyay5kaWZmID0gIFRSVUUsY29sLmRpZmYgPSAicmVkIiwKICAgICAgICAgIHlsaW09YygtMTUsMTUpLGhpZGUubGFiZWw9VCxybS5yYW5lZj1UKQoKcGxvdF9kaWZmKHBoYXIuZ2FtLkFSLCB2aWV3PSJGYW4iLGNvbXA9bGlzdChjb250ZXh0Lm9yZD1jKCJwaGFyeW5nZWFsaXNlZCIsInBoYXJ5bmdlYWwiKSksCiAgICAgICAgICB4bGFiPSIiLGNvbmQ9bGlzdCh0aW1lPTEsdm93ZWwub3JkPSJ1dSIpLGFkZD1UUlVFLAogICAgICAgICAgY29sPSdibHVlJyxtYXJrLmRpZmYgPSAgVFJVRSxjb2wuZGlmZiA9ICJibHVlIiwKICAgICAgICAgIHlsaW09YygtMTUsMTUpLGhpZGUubGFiZWw9VCxybS5yYW5lZj1UKQpsZWdlbmQocGFyKCd1c3InKVsyXSwgcGFyKCd1c3InKVs0XSwgYnR5PSduJywgeHBkPU5BLGx0eT0xLCAKICAgICAgIGxlZ2VuZD1jKCIvaTovIiwgIi9hOi8iLCAiL3U6LyIpLGNvbD1jKCJncmVlbiIsInJlZCIsImJsdWUiKSwgbHdkPTQsIGNleD0xLjIpCmBgYAoKIyMjIyBNaWRwb2ludApgYGB7ciB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCBlcnJvcj1GQUxTRX0KcGFyKG9tYT1jKDEsIDAsIDAsIDMuNSksbWdwPWMoMiwgMSwgMCkpCnBsb3RfZGlmZihwaGFyLmdhbS5BUiwgdmlldz0iRmFuIixjb21wPWxpc3QoY29udGV4dC5vcmQ9YygicGhhcnluZ2VhbGlzZWQiLCJwaGFyeW5nZWFsIikpLAogICAgICAgICAgeGxhYj0iIixjb25kPWxpc3QodGltZT0yLHZvd2VsLm9yZD0iaWkiKSxtYWluID0gImRpZmZlcmVuY2UgcGhhcnluZ2VhbGlzZWQgdnMgcGhhcnluZ2VhbCBNaWRwb2ludCIsCiAgICAgICAgICBjb2w9J2dyZWVuJyxjZXgubWFpbj0xLjEsbWFyay5kaWZmID0gVFJVRSxjb2wuZGlmZiA9ICJncmVlbiIsCiAgICAgICAgICB5bGltPWMoLTE1LDE1KSxoaWRlLmxhYmVsPVQscm0ucmFuZWY9VCkKCnBsb3RfZGlmZihwaGFyLmdhbS5BUiwgdmlldz0iRmFuIixjb21wPWxpc3QoY29udGV4dC5vcmQ9YygicGhhcnluZ2VhbGlzZWQiLCJwaGFyeW5nZWFsIikpLAogICAgICAgICAgeGxhYj0iIixjb25kPWxpc3QodGltZT0yLHZvd2VsLm9yZD0iYWEiKSxhZGQ9VFJVRSwKICAgICAgICAgIGNvbD0ncmVkJyxtYXJrLmRpZmYgPSAgVFJVRSxjb2wuZGlmZiA9ICJyZWQiLAogICAgICAgICAgeWxpbT1jKC0xNSwxNSksaGlkZS5sYWJlbD1ULHJtLnJhbmVmPVQpCgpwbG90X2RpZmYocGhhci5nYW0uQVIsIHZpZXc9IkZhbiIsY29tcD1saXN0KGNvbnRleHQub3JkPWMoInBoYXJ5bmdlYWxpc2VkIiwicGhhcnluZ2VhbCIpKSwKICAgICAgICAgIHhsYWI9IiIsY29uZD1saXN0KHRpbWU9Mix2b3dlbC5vcmQ9InV1IiksYWRkPVRSVUUsCiAgICAgICAgICBjb2w9J2JsdWUnLG1hcmsuZGlmZiA9ICBUUlVFLGNvbC5kaWZmID0gImJsdWUiLAogICAgICAgICAgeWxpbT1jKC0xNSwxNSksaGlkZS5sYWJlbD1ULHJtLnJhbmVmPVQpCmxlZ2VuZChwYXIoJ3VzcicpWzJdLCBwYXIoJ3VzcicpWzRdLCBidHk9J24nLCB4cGQ9TkEsbHR5PTEsIAogICAgICAgbGVnZW5kPWMoIi9pOi8iLCAiL2E6LyIsICIvdTovIiksY29sPWMoImdyZWVuIiwicmVkIiwiYmx1ZSIpLCBsd2Q9NCwgY2V4PTEuMikKYGBgCgojIyMjIE9mZnNldAoKYGBge3Igd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgZXJyb3I9RkFMU0V9CnBhcihvbWE9YygxLCAwLCAwLCAzLjUpLG1ncD1jKDIsIDEsIDApKQpwbG90X2RpZmYocGhhci5nYW0uQVIsIHZpZXc9IkZhbiIsY29tcD1saXN0KGNvbnRleHQub3JkPWMoInBoYXJ5bmdlYWxpc2VkIiwicGhhcnluZ2VhbCIpKSwKICAgICAgICAgIHhsYWI9IiIsY29uZD1saXN0KHRpbWU9Myx2b3dlbC5vcmQ9ImlpIiksbWFpbiA9ICJkaWZmZXJlbmNlIHBoYXJ5bmdlYWxpc2VkIHZzIHBoYXJ5bmdlYWwgT2Zmc2V0IiwKICAgICAgICAgIGNvbD0nZ3JlZW4nLGNleC5tYWluPTEuMSxtYXJrLmRpZmYgPSBUUlVFLGNvbC5kaWZmID0gImdyZWVuIiwKICAgICAgICAgIHlsaW09YygtMTUsMTUpLGhpZGUubGFiZWw9VCxybS5yYW5lZj1UKQoKcGxvdF9kaWZmKHBoYXIuZ2FtLkFSLCB2aWV3PSJGYW4iLGNvbXA9bGlzdChjb250ZXh0Lm9yZD1jKCJwaGFyeW5nZWFsaXNlZCIsInBoYXJ5bmdlYWwiKSksCiAgICAgICAgICB4bGFiPSIiLGNvbmQ9bGlzdCh0aW1lPTMsdm93ZWwub3JkPSJhYSIpLGFkZD1UUlVFLAogICAgICAgICAgY29sPSdyZWQnLG1hcmsuZGlmZiA9ICBUUlVFLGNvbC5kaWZmID0gInJlZCIsCiAgICAgICAgICB5bGltPWMoLTE1LDE1KSxoaWRlLmxhYmVsPVQscm0ucmFuZWY9VCkKCnBsb3RfZGlmZihwaGFyLmdhbS5BUiwgdmlldz0iRmFuIixjb21wPWxpc3QoY29udGV4dC5vcmQ9YygicGhhcnluZ2VhbGlzZWQiLCJwaGFyeW5nZWFsIikpLAogICAgICAgICAgeGxhYj0iIixjb25kPWxpc3QodGltZT0zLHZvd2VsLm9yZD0idXUiKSxhZGQ9VFJVRSwKICAgICAgICAgIGNvbD0nYmx1ZScsbWFyay5kaWZmID0gIFRSVUUsY29sLmRpZmYgPSAiYmx1ZSIsCiAgICAgICAgICB5bGltPWMoLTE1LDE1KSxoaWRlLmxhYmVsPVQscm0ucmFuZWY9VCkKbGVnZW5kKHBhcigndXNyJylbMl0sIHBhcigndXNyJylbNF0sIGJ0eT0nbicsIHhwZD1OQSxsdHk9MSwgCiAgICAgICBsZWdlbmQ9YygiL2k6LyIsICIvYTovIiwgIi91Oi8iKSxjb2w9YygiZ3JlZW4iLCJyZWQiLCJibHVlIiksIGx3ZD00LCBjZXg9MS4yKQoKYGBgCgoKIyBTeXN0ZW0gSW5mb3JtYXRpb24KCmBgYHtyfQpzZXNzaW9uSW5mbygpCmBgYAoK