Résumé

A l’aide de la méthode des moindres carrés, cette étude montre que la fréquence du temps de parole des femmes sur l’audiovisuel public depuis 1995 est nettement moins élevée que sur l’audiovisuel privé.

Objectif et préparation des données

Les données ont été mises à disposition par l’Institut national de l’audiovisuel sur le site d’ouverture des données publiques, data.gouv.fr. Elles sont accessibles à l’adresse suivante : https://www.data.gouv.fr/fr/datasets/temps-de-parole-des-hommes-et-des-femmes-a-la-television-et-a-la-radio/

Les variables du jeu de données sont :

  • le type de média : radio ou télévision ;
  • le nom du média ;
  • l’appartenance, ou non, du média au service public audiovisuel ;
  • l’année ;
  • l’heure de diffusion (entre 5h et minuit pour la radio, entre 10h et minuit pour la télévision) ;
  • la fréquence du temps de parole féminin pour cette heure ;
  • nbobs, que l’on suppose être le nombre d’observations.

Le jeu de données ne requiert pas d’autres préparations que des étapes techniques pour changer la dénomination de certains labels ou la nature de certaines variables.

library(readr)
library(tidyverse)
library(ggplot2)
library(caret)
Stats <- read_csv("hour-stats.csv")
Stats <- data.frame(Stats)
sum(is.na(Stats)) # 0
[1] 0
Stats$is_public_channel <- factor(Stats$is_public_channel)
Stats$year <- factor(Stats$year)
Stats$media_type <- factor(Stats$media_type)
Stats$channel_name <- factor(Stats$channel_name)
Stats$hour <- factor(Stats$hour)
# Recodage de Stats$is_public_channel
Stats$is_public_channel <- recode(Stats$is_public_channel,
                                  "FALSE" = "Privé",
                                  "TRUE" = "Public")
str(Stats)
'data.frame':   9033 obs. of  7 variables:
 $ media_type       : Factor w/ 2 levels "radio","tv": 1 1 1 1 1 1 1 1 1 1 ...
 $ channel_name     : Factor w/ 43 levels "ARTE","BFM TV",..: 5 5 5 5 5 5 5 5 5 5 ...
 $ is_public_channel: Factor w/ 2 levels "Privé","Public": 1 1 1 1 1 1 1 1 1 1 ...
 $ year             : Factor w/ 24 levels "1995","1996",..: 8 8 8 9 9 9 9 9 9 9 ...
 $ hour             : Factor w/ 19 levels "5","6","7","8",..: 1 4 9 1 2 3 4 5 6 7 ...
 $ fexpr            : num  59.3 53.5 48.7 51.1 57.8 ...
 $ nbobs            : num  26 21 20 41 26 21 31 29 25 25 ...
summary(Stats)
 media_type                        channel_name  is_public_channel      year           hour          fexpr         
 radio:6458   France Culture             : 451   Privé :5554       2017   : 707   13     : 528   Min.   : 0.08859  
 tv   :2575   France Musique             : 449   Public:3479       2018   : 707   14     : 528   1st Qu.:22.19248  
              France Info                : 444                     2015   : 704   10     : 527   Median :29.69581  
              France Inter               : 444                     2016   : 700   20     : 527   Mean   :31.23658  
              Radio France Internationale: 355                     2013   : 699   12     : 526   3rd Qu.:39.44302  
              RTL                        : 340                     2014   : 697   16     : 526   Max.   :95.13298  
              (Other)                    :6550                     (Other):4819   (Other):5871                     
     nbobs      
 Min.   :20.00  
 1st Qu.:28.00  
 Median :33.00  
 Mean   :35.72  
 3rd Qu.:42.00  
 Max.   :73.00  
                

Exploration des données

L’exploration descriptive des données fait apparaître les éléments suivants :

  • pour la moitié des observations, le temps de parole féminin est compris entre 22% et 39% du temps de parole disponible, avec une forte tendance centrale autour de 30% ;
  • la fréquence médiane de temps de parole féminin est très proche entre l’audiovisuel privé et public, mais ce dernier comporte davantage de valeurs extrêmes dans le sens d’un plus fort temps de parole ;
  • la fréquence médiane de temps de parole féminin est très proche entre la télévision et la radio, mais cette dernière comporte davantage de valeurs extrêmes dans le sens d’un plus fort temps de parole, en particulier sur les radios publics ;
  • il existe une très forte hétérogénéité de fréquence de temps de parole féminin en fonction des différents médias, Europe 1, Radio Classique et France Musique présentant les dispersions les plus élevées ;
  • les heures de diffusion en milieu de journée semblent associées à une fréquence plus élevée de temps de parole féminin ;
  • la fréquence médiane de temps de parole féminin n’a que faiblement augmenté entre 2002 et 2018 et demeure très éloignée de la parité ;
  • le nombre d’observations est bien plus important pour la télévision que pour la radio et a augmenté depuis 1995 plus rapidement que la fréquence de temps de parole féminin.
# examine the response variable
summary(Stats$fexpr) 
    Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
 0.08859 22.19248 29.69581 31.23658 39.44302 95.13298 
#hist(Stats$fexpr)
ggplot(data = Stats) + 
        geom_histogram(mapping = aes(x = fexpr), binwidth = 1) + 
        labs(title = "Histogramme de la fréquence de temps de parole des femmes", 
             x = "Temps de parole des femmes en pourcentage du temps d'antenne")

# categorical features
ggplot(data = Stats) +
        geom_boxplot(mapping = aes(x = is_public_channel, y = fexpr)) +
        labs(title = "Service public et chaînes privées", 
             x = "", y = "Fréquence de temps de parole féminin")

ggplot(data = Stats) +
        geom_boxplot(mapping = aes(x = media_type, y = fexpr)) +
        labs(title = "Type de média", 
             x = "", y = "Fréquence de temps de parole féminin")

ggplot(data = Stats) +
        geom_boxplot(mapping = aes(x = media_type, y = fexpr, fill = is_public_channel)) +
        labs(title = "Type de média et nature du média", 
             x = "", y = "Fréquence de temps de parole féminin")

ggplot(data = Stats) +
        geom_boxplot(mapping = aes(x = channel_name, y = fexpr)) +
        labs(title = "Média", x = "", y = "Fréquence de temps de parole féminin") +
        coord_flip()

ggplot(data = Stats) +
        geom_boxplot(mapping = aes(x = hour, y = fexpr)) +
        labs(title = "Heure", x = "", y = "Fréquence de temps de parole féminin") +
        coord_flip()

ggplot(data = Stats) +
        geom_boxplot(mapping = aes(x = year, y = fexpr)) +
        labs(title = "Année", x = "", y = "Fréquence de temps de parole féminin") +
        coord_flip()

# subset a random sample for the scatter plots
mysample <- Stats[sample(1:nrow(Stats), 600, replace=FALSE),] 
# numeric
ggplot(data = mysample) +
        geom_point(mapping = aes(x = nbobs, y = fexpr, color = media_type)) +
        labs(title = "Nombre d'observations", x = "", y = "Fréquence de temps de parole féminin")

ggplot(data = mysample) +
        geom_point(mapping = aes(x = nbobs, y = fexpr, color = year)) +
        labs(title = "Nombre d'observations", x = "", y = "Fréquence de temps de parole féminin")

ggplot(data = mysample) +
        geom_point(mapping = aes(x = nbobs, y = fexpr, color = hour)) +
        labs(title = "Nombre d'observations", x = "", y = "Fréquence de temps de parole féminin")

Lien entre la nature publique ou privée du média et la fréquence de temps de parole des femmes

A travers cette étude, nous cherchons l’existence d’un lien entre la nature, publique ou privée, du média audiovisuel et la fréquence de temps de parole des femmes ; la variable explicative d’intérêt est donc une variable discrète pouvant prendre deux modalités, tandis que la variable dépendante est une variable continue, certes bornée entre 0 et 1.

Nous utilisons la méthode des moindres carrés, et nous contrôlons la régression pour les cinq variables suivantes : nom du média, type de média (radio ou télévision), année, heure de diffusion, nombre d’observations. Du reste, nous supposons valide l’hypothèse “toutes choses égales par ailleurs”.

Il apparait que la fréquence de temps de parole féminin est moins élevée sur l’audiovisuel public que sur l’audiovisuel privé, de l’ordre de -8 points (sur 100). La relation est très significative. A noter par ailleurs que les variables indépendantes présentes dans le jeu de données expliquent environ 34 % de la variance de la variable dépendante.

model_1 <- train(fexpr ~ is_public_channel + media_type + nbobs + 
                       year + hour + channel_name, data = Stats, method = "lm")
summary(model_1)

Call:
lm(formula = .outcome ~ ., data = dat)

Residuals:
    Min      1Q  Median      3Q     Max 
-38.078  -6.606  -0.812   5.374  68.070 

Coefficients: (2 not defined because of singularities)
                                           Estimate Std. Error t value Pr(>|t|)    
(Intercept)                                26.17752    1.78576  14.659  < 2e-16 ***
is_public_channelPublic                    -8.16658    1.38984  -5.876 4.36e-09 ***
media_typetv                                6.42498    1.27953   5.021 5.23e-07 ***
nbobs                                      -0.03626    0.02122  -1.709 0.087547 .  
year1996                                   -0.85856    1.83906  -0.467 0.640620    
year1997                                   -3.03440    1.83859  -1.650 0.098898 .  
year1998                                   -4.25743    1.84506  -2.307 0.021051 *  
year1999                                   -2.40316    1.83228  -1.312 0.189699    
year2000                                   -1.76756    1.72503  -1.025 0.305555    
year2001                                   -2.65351    1.56723  -1.693 0.090467 .  
year2002                                   -2.62737    1.53896  -1.707 0.087813 .  
year2003                                   -2.89372    1.47488  -1.962 0.049793 *  
year2004                                   -2.55005    1.47401  -1.730 0.083662 .  
year2005                                   -3.20764    1.47445  -2.175 0.029620 *  
year2006                                   -1.99863    1.47242  -1.357 0.174694    
year2007                                   -1.64843    1.47348  -1.119 0.263284    
year2008                                   -1.59074    1.46535  -1.086 0.277697    
year2009                                    0.48009    1.45245   0.331 0.740999    
year2010                                    1.18731    1.41197   0.841 0.400433    
year2011                                    1.16934    1.40751   0.831 0.406117    
year2012                                    1.48029    1.40675   1.052 0.292703    
year2013                                    2.71830    1.40074   1.941 0.052336 .  
year2014                                    2.41228    1.40168   1.721 0.085287 .  
year2015                                    2.34937    1.40116   1.677 0.093629 .  
year2016                                    2.67932    1.40108   1.912 0.055866 .  
year2017                                    3.32674    1.39907   2.378 0.017436 *  
year2018                                    3.88565    1.44598   2.687 0.007218 ** 
hour6                                       1.82557    0.84367   2.164 0.030503 *  
hour7                                       1.86211    0.84561   2.202 0.027684 *  
hour8                                      -0.01921    0.84302  -0.023 0.981824    
hour9                                       3.52664    0.84435   4.177 2.98e-05 ***
hour10                                      7.11384    0.77039   9.234  < 2e-16 ***
hour11                                      6.04077    0.77108   7.834 5.26e-15 ***
hour12                                      6.89406    0.77076   8.944  < 2e-16 ***
hour13                                      7.62528    0.77015   9.901  < 2e-16 ***
hour14                                      9.08841    0.77016  11.801  < 2e-16 ***
hour15                                      8.74739    0.77142  11.339  < 2e-16 ***
hour16                                      3.74171    0.77076   4.855 1.23e-06 ***
hour17                                      3.52497    0.77140   4.570 4.95e-06 ***
hour18                                      1.97835    0.77165   2.564 0.010370 *  
hour19                                      1.87763    0.77201   2.432 0.015030 *  
hour20                                      0.87624    0.77045   1.137 0.255439    
hour21                                     -1.12254    0.77076  -1.456 0.145317    
hour22                                     -2.07451    0.77232  -2.686 0.007243 ** 
hour23                                     -0.65583    0.77785  -0.843 0.399180    
`channel_nameBFM TV`                       -2.03934    1.38984  -1.467 0.142324    
`channel_nameCanal +`                     -12.50313    1.38983  -8.996  < 2e-16 ***
`channel_nameChérie 25`                     5.36249    1.55770   3.443 0.000579 ***
`channel_nameChérie FM`                    20.25874    1.00063  20.246  < 2e-16 ***
`channel_nameD8/C8`                        -9.97013    1.55195  -6.424 1.39e-10 ***
`channel_nameEurope 1`                      1.48614    0.98194   1.513 0.130194    
`channel_nameEurosport France`            -29.21653    1.39855 -20.891  < 2e-16 ***
`channel_nameFrance 2`                      8.24968    1.38984   5.936 3.03e-09 ***
`channel_nameFrance 24`                    14.55949    1.43363  10.156  < 2e-16 ***
`channel_nameFrance 3`                      1.98171    1.38983   1.426 0.153940    
`channel_nameFrance 5`                      4.45794    1.38987   3.207 0.001344 ** 
`channel_nameFrance Bleu`                  18.53572    1.70155  10.893  < 2e-16 ***
`channel_nameFrance Culture`                8.84061    1.68221   5.255 1.51e-07 ***
`channel_nameFrance Info`                   7.09232    1.68184   4.217 2.50e-05 ***
`channel_nameFrance Inter`                  7.67914    1.68199   4.566 5.05e-06 ***
`channel_nameFrance Musique`                8.74223    1.68230   5.197 2.07e-07 ***
`channel_nameFrance O`                      6.39182    1.38987   4.599 4.31e-06 ***
`channel_nameFun Radio`                     1.67102    0.99924   1.672 0.094499 .  
channel_nameHistoire                      -17.87583    1.48795 -12.014  < 2e-16 ***
`channel_nameI-Télé/CNews`                 -3.09037    1.38988  -2.223 0.026209 *  
`channel_nameL'Equipe 21`                 -20.18318    1.55751 -12.959  < 2e-16 ***
`channel_nameLa Chaîne Info`               -4.18470    1.38987  -3.011 0.002612 ** 
`channel_nameLCP/Public Sénat`              0.55391    1.38996   0.399 0.690264    
channel_nameM6                              4.91907    1.38984   3.539 0.000403 ***
`channel_nameMonte Carlo TMC`              -8.52257    1.38983  -6.132 9.04e-10 ***
channel_nameMOUV                            8.06313    1.85801   4.340 1.44e-05 ***
channel_nameNostalgie                       4.21575    1.00047   4.214 2.54e-05 ***
channel_nameNRJ                            -0.75103    0.99724  -0.753 0.451405    
`channel_nameNRJ 12`                       -5.04137    1.39014  -3.627 0.000289 ***
`channel_nameRadio Classique`              11.55130    1.11117  10.396  < 2e-16 ***
`channel_nameRadio France Internationale`  12.37114    1.69695   7.290 3.36e-13 ***
channel_nameRFM                             3.17675    1.00186   3.171 0.001525 ** 
`channel_nameRire et Chansons`             -3.83182    1.11176  -3.447 0.000570 ***
channel_nameRMC                            -6.94948    0.98151  -7.080 1.55e-12 ***
channel_nameRTL                             0.14013    0.97946   0.143 0.886240    
`channel_nameRTL 2`                         9.87720    1.00203   9.857  < 2e-16 ***
channel_nameSkyrock                        -5.20499    0.99059  -5.254 1.52e-07 ***
`channel_nameSud Radio`                    -0.28315    1.26061  -0.225 0.822283    
channel_nameTéva                           10.73351    1.48378   7.234 5.08e-13 ***
channel_nameTF1                             0.93861    1.38986   0.675 0.499482    
`channel_nameVirgin Radio`                       NA         NA      NA       NA    
channel_nameW9                                   NA         NA      NA       NA    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 11.03 on 8948 degrees of freedom
Multiple R-squared:  0.346, Adjusted R-squared:  0.3398 
F-statistic: 56.35 on 84 and 8948 DF,  p-value: < 2.2e-16
LS0tDQp0aXRsZTogIkxlIHRlbXBzIGRlIHBhcm9sZSBhdWRpb3Zpc3VlbCBkZXMgZmVtbWVzIGRlcHVpcyAxOTk1IHN1ciBsZSBzZXJ2aWNlIHB1YmxpYyBwYXIgcmFwcG9ydCBhdXggbelkaWFzIHByaXbpcyINCmF1dGhvcjogT2xpdmllciBWaW9sbGV0LCBvbGl2aWVyLnZpb2xsZXRbYV1nbWFpbC5jb20NCmRhdGU6IE1hcnMsIDIwMTkNCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCiMgUulzdW3pDQoNCkEgbCdhaWRlIGRlIGxhIG3pdGhvZGUgZGVzIG1vaW5kcmVzIGNhcnLpcywgY2V0dGUg6XR1ZGUgbW9udHJlIHF1ZSBsYSBmculxdWVuY2UgZHUgdGVtcHMgZGUgcGFyb2xlIGRlcyBmZW1tZXMgc3VyIGwnYXVkaW92aXN1ZWwgcHVibGljIGRlcHVpcyAxOTk1IGVzdCBuZXR0ZW1lbnQgbW9pbnMg6WxldullIHF1ZSBzdXIgbCdhdWRpb3Zpc3VlbCBwcml26S4NCg0KIyMgT2JqZWN0aWYgZXQgcHLpcGFyYXRpb24gZGVzIGRvbm7pZXMNCg0KTGVzIGRvbm7pZXMgb250IOl06SBtaXNlcyDgIGRpc3Bvc2l0aW9uIHBhciBsJyoqSW5zdGl0dXQgbmF0aW9uYWwgZGUgbCdhdWRpb3Zpc3VlbCoqIHN1ciBsZSBzaXRlIGQnb3V2ZXJ0dXJlIGRlcyBkb25u6WVzIHB1YmxpcXVlcywgZGF0YS5nb3V2LmZyLiBFbGxlcyBzb250IGFjY2Vzc2libGVzIOAgbCdhZHJlc3NlIHN1aXZhbnRlIDogaHR0cHM6Ly93d3cuZGF0YS5nb3V2LmZyL2ZyL2RhdGFzZXRzL3RlbXBzLWRlLXBhcm9sZS1kZXMtaG9tbWVzLWV0LWRlcy1mZW1tZXMtYS1sYS10ZWxldmlzaW9uLWV0LWEtbGEtcmFkaW8vDQoNCkxlcyB2YXJpYWJsZXMgZHUgamV1IGRlIGRvbm7pZXMgc29udCA6DQoNCi0gbGUgKip0eXBlKiogZGUgbelkaWEgOiByYWRpbyBvdSB06WzpdmlzaW9uIDsNCi0gbGUgKipub20qKiBkdSBt6WRpYSA7DQotIGwnYXBwYXJ0ZW5hbmNlLCBvdSBub24sIGR1IG3pZGlhIGF1ICoqc2VydmljZSBwdWJsaWMgYXVkaW92aXN1ZWwqKiA7DQotIGwnKiphbm7pZSoqIDsNCi0gbCcqKmhldXJlKiogZGUgZGlmZnVzaW9uIChlbnRyZSA1aCBldCBtaW51aXQgcG91ciBsYSByYWRpbywgZW50cmUgMTBoIGV0IG1pbnVpdCBwb3VyIGxhIHTpbOl2aXNpb24pIDsNCi0gbGEgKipmculxdWVuY2UqKiBkdSB0ZW1wcyBkZSBwYXJvbGUgZultaW5pbiBwb3VyIGNldHRlIGhldXJlIDsNCi0gKipuYm9icyoqLCBxdWUgbCdvbiBzdXBwb3NlIOp0cmUgbGUgbm9tYnJlIGQnb2JzZXJ2YXRpb25zLg0KDQpMZSBqZXUgZGUgZG9ubullcyBuZSByZXF1aWVydCBwYXMgZCdhdXRyZXMgcHLpcGFyYXRpb25zIHF1ZSBkZXMg6XRhcGVzIHRlY2huaXF1ZXMgcG91ciBjaGFuZ2VyIGxhIGTpbm9taW5hdGlvbiBkZSBjZXJ0YWlucyBsYWJlbHMgb3UgbGEgbmF0dXJlIGRlIGNlcnRhaW5lcyB2YXJpYWJsZXMuIA0KDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KbGlicmFyeShyZWFkcikNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShjYXJldCkNClN0YXRzIDwtIHJlYWRfY3N2KCJob3VyLXN0YXRzLmNzdiIpDQpTdGF0cyA8LSBkYXRhLmZyYW1lKFN0YXRzKQ0Kc3VtKGlzLm5hKFN0YXRzKSkgIyAwDQoNCmBgYA0KDQpgYGB7cn0NClN0YXRzJGlzX3B1YmxpY19jaGFubmVsIDwtIGZhY3RvcihTdGF0cyRpc19wdWJsaWNfY2hhbm5lbCkNClN0YXRzJHllYXIgPC0gZmFjdG9yKFN0YXRzJHllYXIpDQpTdGF0cyRtZWRpYV90eXBlIDwtIGZhY3RvcihTdGF0cyRtZWRpYV90eXBlKQ0KU3RhdHMkY2hhbm5lbF9uYW1lIDwtIGZhY3RvcihTdGF0cyRjaGFubmVsX25hbWUpDQpTdGF0cyRob3VyIDwtIGZhY3RvcihTdGF0cyRob3VyKQ0KDQojIFJlY29kYWdlIGRlIFN0YXRzJGlzX3B1YmxpY19jaGFubmVsDQpTdGF0cyRpc19wdWJsaWNfY2hhbm5lbCA8LSByZWNvZGUoU3RhdHMkaXNfcHVibGljX2NoYW5uZWwsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZBTFNFIiA9ICJQcml26SIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRSVUUiID0gIlB1YmxpYyIpDQoNCnN0cihTdGF0cykNCnN1bW1hcnkoU3RhdHMpDQoNCmBgYA0KDQojIyBFeHBsb3JhdGlvbiBkZXMgZG9ubullcw0KDQpMJ2V4cGxvcmF0aW9uIGRlc2NyaXB0aXZlIGRlcyBkb25u6WVzIGZhaXQgYXBwYXJh7nRyZSBsZXMg6WzpbWVudHMgc3VpdmFudHMgOg0KDQotIHBvdXIgbGEgbW9pdGnpIGRlcyBvYnNlcnZhdGlvbnMsIGxlIHRlbXBzIGRlIHBhcm9sZSBm6W1pbmluIGVzdCBjb21wcmlzIGVudHJlIDIyJSBldCAzOSUgZHUgdGVtcHMgZGUgcGFyb2xlIGRpc3BvbmlibGUsIGF2ZWMgdW5lIGZvcnRlICoqdGVuZGFuY2UgY2VudHJhbGUgYXV0b3VyIGRlIDMwJSoqIDsNCi0gbGEgZnLpcXVlbmNlIG3pZGlhbmUgZGUgdGVtcHMgZGUgcGFyb2xlIGbpbWluaW4gZXN0ICoqdHLocyBwcm9jaGUgZW50cmUgbCdhdWRpb3Zpc3VlbCBwcml26SBldCBwdWJsaWMqKiwgbWFpcyBjZSBkZXJuaWVyIGNvbXBvcnRlICoqZGF2YW50YWdlIGRlIHZhbGV1cnMgZXh0cuptZXMqKiBkYW5zIGxlIHNlbnMgZCd1biBwbHVzIGZvcnQgdGVtcHMgZGUgcGFyb2xlIDsNCi0gbGEgZnLpcXVlbmNlIG3pZGlhbmUgZGUgdGVtcHMgZGUgcGFyb2xlIGbpbWluaW4gZXN0ICoqdHLocyBwcm9jaGUgZW50cmUgbGEgdOls6XZpc2lvbiBldCBsYSByYWRpbyoqLCBtYWlzIGNldHRlIGRlcm5p6HJlIGNvbXBvcnRlICoqZGF2YW50YWdlIGRlIHZhbGV1cnMgZXh0cuptZXMqKiBkYW5zIGxlIHNlbnMgZCd1biBwbHVzIGZvcnQgdGVtcHMgZGUgcGFyb2xlLCBlbiBwYXJ0aWN1bGllciBzdXIgbGVzICoqcmFkaW9zIHB1YmxpY3MqKiA7IA0KLSBpbCBleGlzdGUgdW5lIHRy6HMgZm9ydGUgaOl06XJvZ+lu6Wl06SBkZSBmculxdWVuY2UgZGUgdGVtcHMgZGUgcGFyb2xlIGbpbWluaW4gKiplbiBmb25jdGlvbiBkZXMgZGlmZulyZW50cyBt6WRpYXMqKiwgRXVyb3BlIDEsIFJhZGlvIENsYXNzaXF1ZSBldCBGcmFuY2UgTXVzaXF1ZSBwculzZW50YW50IGxlcyBkaXNwZXJzaW9ucyBsZXMgcGx1cyDpbGV26WVzIDsNCi0gbGVzIGhldXJlcyBkZSBkaWZmdXNpb24gKiplbiBtaWxpZXUgZGUgam91cm7pZSoqIHNlbWJsZW50IGFzc29jaellcyDgIHVuZSBmculxdWVuY2UgcGx1cyDpbGV26WUgZGUgdGVtcHMgZGUgcGFyb2xlIGbpbWluaW4gOw0KLSBsYSBmculxdWVuY2UgbelkaWFuZSBkZSB0ZW1wcyBkZSBwYXJvbGUgZultaW5pbiBuJ2EgcXVlICoqZmFpYmxlbWVudCBhdWdtZW506SBlbnRyZSAyMDAyIGV0IDIwMTgqKiBldCBkZW1ldXJlIHRy6HMg6WxvaWdu6WUgZGUgbGEgcGFyaXTpIDsNCi0gbGUgbm9tYnJlIGQnb2JzZXJ2YXRpb25zIGVzdCBiaWVuIHBsdXMgaW1wb3J0YW50IHBvdXIgbGEgdOls6XZpc2lvbiBxdWUgcG91ciBsYSByYWRpbyBldCBhIGF1Z21lbnTpIGRlcHVpcyAxOTk1IHBsdXMgcmFwaWRlbWVudCBxdWUgbGEgZnLpcXVlbmNlIGRlIHRlbXBzIGRlIHBhcm9sZSBm6W1pbmluLg0KDQoNCmBgYHtyfQ0KIyBleGFtaW5lIHRoZSByZXNwb25zZSB2YXJpYWJsZQ0Kc3VtbWFyeShTdGF0cyRmZXhwcikgDQojaGlzdChTdGF0cyRmZXhwcikNCmdncGxvdChkYXRhID0gU3RhdHMpICsgDQogICAgICAgIGdlb21faGlzdG9ncmFtKG1hcHBpbmcgPSBhZXMoeCA9IGZleHByKSwgYmlud2lkdGggPSAxKSArIA0KICAgICAgICBsYWJzKHRpdGxlID0gIkhpc3RvZ3JhbW1lIGRlIGxhIGZy6XF1ZW5jZSBkZSB0ZW1wcyBkZSBwYXJvbGUgZGVzIGZlbW1lcyIsIA0KICAgICAgICAgICAgIHggPSAiVGVtcHMgZGUgcGFyb2xlIGRlcyBmZW1tZXMgZW4gcG91cmNlbnRhZ2UgZHUgdGVtcHMgZCdhbnRlbm5lIikNCg0KIyBjYXRlZ29yaWNhbCBmZWF0dXJlcw0KZ2dwbG90KGRhdGEgPSBTdGF0cykgKw0KICAgICAgICBnZW9tX2JveHBsb3QobWFwcGluZyA9IGFlcyh4ID0gaXNfcHVibGljX2NoYW5uZWwsIHkgPSBmZXhwcikpICsNCiAgICAgICAgbGFicyh0aXRsZSA9ICJTZXJ2aWNlIHB1YmxpYyBldCBjaGHubmVzIHByaXbpZXMiLCANCiAgICAgICAgICAgICB4ID0gIiIsIHkgPSAiRnLpcXVlbmNlIGRlIHRlbXBzIGRlIHBhcm9sZSBm6W1pbmluIikNCg0KZ2dwbG90KGRhdGEgPSBTdGF0cykgKw0KICAgICAgICBnZW9tX2JveHBsb3QobWFwcGluZyA9IGFlcyh4ID0gbWVkaWFfdHlwZSwgeSA9IGZleHByKSkgKw0KICAgICAgICBsYWJzKHRpdGxlID0gIlR5cGUgZGUgbelkaWEiLCANCiAgICAgICAgICAgICB4ID0gIiIsIHkgPSAiRnLpcXVlbmNlIGRlIHRlbXBzIGRlIHBhcm9sZSBm6W1pbmluIikNCg0KZ2dwbG90KGRhdGEgPSBTdGF0cykgKw0KICAgICAgICBnZW9tX2JveHBsb3QobWFwcGluZyA9IGFlcyh4ID0gbWVkaWFfdHlwZSwgeSA9IGZleHByLCBmaWxsID0gaXNfcHVibGljX2NoYW5uZWwpKSArDQogICAgICAgIGxhYnModGl0bGUgPSAiVHlwZSBkZSBt6WRpYSBldCBuYXR1cmUgZHUgbelkaWEiLCANCiAgICAgICAgICAgICB4ID0gIiIsIHkgPSAiRnLpcXVlbmNlIGRlIHRlbXBzIGRlIHBhcm9sZSBm6W1pbmluIikNCg0KZ2dwbG90KGRhdGEgPSBTdGF0cykgKw0KICAgICAgICBnZW9tX2JveHBsb3QobWFwcGluZyA9IGFlcyh4ID0gY2hhbm5lbF9uYW1lLCB5ID0gZmV4cHIpKSArDQogICAgICAgIGxhYnModGl0bGUgPSAiTelkaWEiLCB4ID0gIiIsIHkgPSAiRnLpcXVlbmNlIGRlIHRlbXBzIGRlIHBhcm9sZSBm6W1pbmluIikgKw0KICAgICAgICBjb29yZF9mbGlwKCkNCg0KZ2dwbG90KGRhdGEgPSBTdGF0cykgKw0KICAgICAgICBnZW9tX2JveHBsb3QobWFwcGluZyA9IGFlcyh4ID0gaG91ciwgeSA9IGZleHByKSkgKw0KICAgICAgICBsYWJzKHRpdGxlID0gIkhldXJlIiwgeCA9ICIiLCB5ID0gIkZy6XF1ZW5jZSBkZSB0ZW1wcyBkZSBwYXJvbGUgZultaW5pbiIpICsNCiAgICAgICAgY29vcmRfZmxpcCgpDQoNCmdncGxvdChkYXRhID0gU3RhdHMpICsNCiAgICAgICAgZ2VvbV9ib3hwbG90KG1hcHBpbmcgPSBhZXMoeCA9IHllYXIsIHkgPSBmZXhwcikpICsNCiAgICAgICAgbGFicyh0aXRsZSA9ICJBbm7pZSIsIHggPSAiIiwgeSA9ICJGculxdWVuY2UgZGUgdGVtcHMgZGUgcGFyb2xlIGbpbWluaW4iKSArDQogICAgICAgIGNvb3JkX2ZsaXAoKQ0KDQojIHN1YnNldCBhIHJhbmRvbSBzYW1wbGUgZm9yIHRoZSBzY2F0dGVyIHBsb3RzDQpteXNhbXBsZSA8LSBTdGF0c1tzYW1wbGUoMTpucm93KFN0YXRzKSwgNjAwLCByZXBsYWNlPUZBTFNFKSxdIA0KDQojIG51bWVyaWMNCmdncGxvdChkYXRhID0gbXlzYW1wbGUpICsNCiAgICAgICAgZ2VvbV9wb2ludChtYXBwaW5nID0gYWVzKHggPSBuYm9icywgeSA9IGZleHByLCBjb2xvciA9IG1lZGlhX3R5cGUpKSArDQogICAgICAgIGxhYnModGl0bGUgPSAiTm9tYnJlIGQnb2JzZXJ2YXRpb25zIiwgeCA9ICIiLCB5ID0gIkZy6XF1ZW5jZSBkZSB0ZW1wcyBkZSBwYXJvbGUgZultaW5pbiIpDQoNCmdncGxvdChkYXRhID0gbXlzYW1wbGUpICsNCiAgICAgICAgZ2VvbV9wb2ludChtYXBwaW5nID0gYWVzKHggPSBuYm9icywgeSA9IGZleHByLCBjb2xvciA9IHllYXIpKSArDQogICAgICAgIGxhYnModGl0bGUgPSAiTm9tYnJlIGQnb2JzZXJ2YXRpb25zIiwgeCA9ICIiLCB5ID0gIkZy6XF1ZW5jZSBkZSB0ZW1wcyBkZSBwYXJvbGUgZultaW5pbiIpDQoNCmdncGxvdChkYXRhID0gbXlzYW1wbGUpICsNCiAgICAgICAgZ2VvbV9wb2ludChtYXBwaW5nID0gYWVzKHggPSBuYm9icywgeSA9IGZleHByLCBjb2xvciA9IGhvdXIpKSArDQogICAgICAgIGxhYnModGl0bGUgPSAiTm9tYnJlIGQnb2JzZXJ2YXRpb25zIiwgeCA9ICIiLCB5ID0gIkZy6XF1ZW5jZSBkZSB0ZW1wcyBkZSBwYXJvbGUgZultaW5pbiIpDQpgYGANCg0KIyMgTGllbiBlbnRyZSBsYSBuYXR1cmUgcHVibGlxdWUgb3UgcHJpdullIGR1IG3pZGlhIGV0IGxhIGZy6XF1ZW5jZSBkZSB0ZW1wcyBkZSBwYXJvbGUgZGVzIGZlbW1lcw0KDQpBIHRyYXZlcnMgY2V0dGUg6XR1ZGUsIG5vdXMgY2hlcmNob25zIGwnZXhpc3RlbmNlIGQndW4gbGllbiBlbnRyZSBsYSBuYXR1cmUsIHB1YmxpcXVlIG91IHByaXbpZSwgZHUgbelkaWEgYXVkaW92aXN1ZWwgZXQgbGEgZnLpcXVlbmNlIGRlIHRlbXBzIGRlIHBhcm9sZSBkZXMgZmVtbWVzIDsgbGEgdmFyaWFibGUgZXhwbGljYXRpdmUgZCdpbnTpcup0IGVzdCBkb25jIHVuZSB2YXJpYWJsZSBkaXNjcuh0ZSBwb3V2YW50IHByZW5kcmUgZGV1eCBtb2RhbGl06XMsIHRhbmRpcyBxdWUgbGEgdmFyaWFibGUgZOlwZW5kYW50ZSBlc3QgdW5lIHZhcmlhYmxlIGNvbnRpbnVlLCBjZXJ0ZXMgYm9ybullIGVudHJlIDAgZXQgMS4gDQoNCk5vdXMgdXRpbGlzb25zIGxhICoqbel0aG9kZSBkZXMgbW9pbmRyZXMgY2FyculzKiosIGV0IG5vdXMgY29udHL0bG9ucyBsYSBy6WdyZXNzaW9uIHBvdXIgbGVzIGNpbnEgdmFyaWFibGVzIHN1aXZhbnRlcyA6IG5vbSBkdSBt6WRpYSwgdHlwZSBkZSBt6WRpYSAocmFkaW8gb3UgdOls6XZpc2lvbiksIGFubullLCBoZXVyZSBkZSBkaWZmdXNpb24sIG5vbWJyZSBkJ29ic2VydmF0aW9ucy4gRHUgcmVzdGUsIG5vdXMgc3VwcG9zb25zIHZhbGlkZSBsJ2h5cG90aOhzZSAidG91dGVzIGNob3NlcyDpZ2FsZXMgcGFyIGFpbGxldXJzIi4gDQoNCklsIGFwcGFyYWl0IHF1ZSBsYSBmculxdWVuY2UgZGUgdGVtcHMgZGUgcGFyb2xlIGbpbWluaW4gZXN0ICoqbW9pbnMg6WxldullIHN1ciBsJ2F1ZGlvdmlzdWVsIHB1YmxpYyBxdWUgc3VyIGwnYXVkaW92aXN1ZWwgcHJpdukqKiwgZGUgbCdvcmRyZSBkZSAqKi04IHBvaW50cyoqIChzdXIgMTAwKS4gTGEgcmVsYXRpb24gZXN0ICoqdHLocyBzaWduaWZpY2F0aXZlKiouIEEgbm90ZXIgcGFyIGFpbGxldXJzIHF1ZSBsZXMgdmFyaWFibGVzIGluZOlwZW5kYW50ZXMgcHLpc2VudGVzIGRhbnMgbGUgamV1IGRlIGRvbm7pZXMgZXhwbGlxdWVudCBlbnZpcm9uIDM0ICUgZGUgbGEgdmFyaWFuY2UgZGUgbGEgdmFyaWFibGUgZOlwZW5kYW50ZS4gDQoNCg0KYGBge3Igd2FybmluZz1GQUxTRX0NCg0KbW9kZWxfMSA8LSB0cmFpbihmZXhwciB+IGlzX3B1YmxpY19jaGFubmVsICsgbWVkaWFfdHlwZSArIG5ib2JzICsgDQogICAgICAgICAgICAgICAgICAgICAgIHllYXIgKyBob3VyICsgY2hhbm5lbF9uYW1lLCBkYXRhID0gU3RhdHMsIG1ldGhvZCA9ICJsbSIpDQpzdW1tYXJ5KG1vZGVsXzEpDQoNCmBgYA0KDQo=