library(readr)
library(dplyr)
library(jiebaR)
library(tidyr)
library(tidytext)
library(igraph)
library(topicmodels)
library(stringr)
library(ggplot2)
library(data.table)

*載入世界杯舉辦年度與舉辦國家之相關資料

#setwd("D:/Learning/31class/report")
#讀取資料
getwd()
[1] "/Users/arielchang/Desktop"
setwd("/Users/arielchang/Desktop/0514") 
The working directory was changed to /Users/arielchang/Desktop/0514 inside a notebook chunk. The working directory will be reset when the chunk is finished running. Use the knitr root.dir option in the setup chunk to change the working directory for notebook chunks.
worldCups<-fread("WorldCups.csv",
              header = T,stringsAsFactors = F, encoding = "UTF-8")
head(worldCups,20)
    Year      Country     Winner     Runners-Up       Third
 1: 1930      Uruguay    Uruguay      Argentina         USA
 2: 1934        Italy      Italy Czechoslovakia     Germany
 3: 1938       France      Italy        Hungary      Brazil
 4: 1950       Brazil    Uruguay         Brazil      Sweden
 5: 1954  Switzerland Germany FR        Hungary     Austria
 6: 1958       Sweden     Brazil         Sweden      France
 7: 1962        Chile     Brazil Czechoslovakia       Chile
 8: 1966      England    England     Germany FR    Portugal
 9: 1970       Mexico     Brazil          Italy  Germany FR
10: 1974      Germany Germany FR    Netherlands      Poland
11: 1978    Argentina  Argentina    Netherlands      Brazil
12: 1982        Spain      Italy     Germany FR      Poland
13: 1986       Mexico  Argentina     Germany FR      France
14: 1990        Italy Germany FR      Argentina       Italy
15: 1994          USA     Brazil          Italy      Sweden
16: 1998       France     France         Brazil     Croatia
17: 2002  Korea/Japan     Brazil        Germany      Turkey
18: 2006      Germany      Italy         France     Germany
19: 2010 South Africa      Spain    Netherlands     Germany
20: 2014       Brazil    Germany      Argentina Netherlands
            Fourth GoalsScored QualifiedTeams MatchesPlayed
 1:     Yugoslavia          70             13            18
 2:        Austria          70             16            17
 3:         Sweden          84             15            18
 4:          Spain          88             13            22
 5:        Uruguay         140             16            26
 6:     Germany FR         126             16            35
 7:     Yugoslavia          89             16            32
 8:   Soviet Union          89             16            32
 9:        Uruguay          95             16            32
10:         Brazil          97             16            38
11:          Italy         102             16            38
12:         France         146             24            52
13:        Belgium         132             24            52
14:        England         115             24            52
15:       Bulgaria         141             24            52
16:    Netherlands         171             32            64
17: Korea Republic         161             32            64
18:       Portugal         147             32            64
19:        Uruguay         145             32            64
20:         Brazil         171             32            64
    Attendance
 1:    590.549
 2:    363.000
 3:    375.700
 4:  1.045.246
 5:    768.607
 6:    819.810
 7:    893.172
 8:  1.563.135
 9:  1.603.975
10:  1.865.753
11:  1.545.791
12:  2.109.723
13:  2.394.031
14:  2.516.215
15:  3.587.538
16:  2.785.100
17:  2.705.197
18:  3.359.439
19:  3.178.856
20:  3.386.810

*載入世界杯舉辦比賽資訊

# 讀取資料
getwd()
[1] "/Users/arielchang/Desktop"
setwd("/Users/arielchang/Desktop/0514") 
The working directory was changed to /Users/arielchang/Desktop/0514 inside a notebook chunk. The working directory will be reset when the chunk is finished running. Use the knitr root.dir option in the setup chunk to change the working directory for notebook chunks.
WorldCupMatches<-fread("WorldCupMatches.csv",
              header = T,stringsAsFactors = F, encoding = "UTF-8")
head(WorldCupMatches)
   Year             Datetime   Stage        Stadium
1: 1930 13 Jul 1930 - 15:00  Group 1        Pocitos
2: 1930 13 Jul 1930 - 15:00  Group 4 Parque Central
3: 1930 14 Jul 1930 - 12:45  Group 2 Parque Central
4: 1930 14 Jul 1930 - 14:50  Group 3        Pocitos
5: 1930 15 Jul 1930 - 16:00  Group 1 Parque Central
6: 1930 16 Jul 1930 - 14:45  Group 1 Parque Central
          City Home Team Name Home Team Goals
1: Montevideo          France               4
2: Montevideo             USA               3
3: Montevideo      Yugoslavia               2
4: Montevideo         Romania               3
5: Montevideo       Argentina               1
6: Montevideo           Chile               3
   Away Team Goals Away Team Name Win conditions Attendance
1:               1         Mexico                      4444
2:               0        Belgium                     18346
3:               1         Brazil                     24059
4:               1           Peru                      2549
5:               0         France                     23409
6:               0         Mexico                      9249
   Half-time Home Goals Half-time Away Goals
1:                    3                    0
2:                    2                    0
3:                    2                    0
4:                    1                    0
5:                    0                    0
6:                    1                    0
                  Referee              Assistant 1
1: LOMBARDI Domingo (URU)    CRISTOPHE Henry (BEL)
2:      MACIAS Jose (ARG) MATEUCCI Francisco (URU)
3:    TEJADA Anibal (URU)  VALLARINO Ricardo (URU)
4:  WARNKEN Alberto (CHI)      LANGENUS Jean (BEL)
5:    REGO Gilberto (BRA)     SAUCEDO Ulises (BOL)
6:  CRISTOPHE Henry (BEL)  APHESTEGUY Martin (URU)
                  Assistant 2 RoundID MatchID
1:        REGO Gilberto (BRA)     201    1096
2:      WARNKEN Alberto (CHI)     201    1090
3:        BALWAY Thomas (FRA)     201    1093
4:   MATEUCCI Francisco (URU)     201    1098
5: RADULESCU Constantin (ROU)     201    1085
6:        LANGENUS Jean (BEL)     201    1095
   Home Team Initials Away Team Initials
1:                FRA                MEX
2:                USA                BEL
3:                YUG                BRA
4:                ROU                PER
5:                ARG                FRA
6:                CHI                MEX

*載入世界杯比賽球員資料

getwd()
[1] "/Users/arielchang/Desktop"
setwd("/Users/arielchang/Desktop/0514") 
The working directory was changed to /Users/arielchang/Desktop/0514 inside a notebook chunk. The working directory will be reset when the chunk is finished running. Use the knitr root.dir option in the setup chunk to change the working directory for notebook chunks.
WorldCupPlayers<-fread("WorldCupPlayers.csv",
              header = T,stringsAsFactors = F, encoding = "UTF-8")
head(WorldCupPlayers,20)
    RoundID MatchID Team Initials          Coach Name
 1:     201    1096           FRA CAUDRON Raoul (FRA)
 2:     201    1096           MEX    LUQUE Juan (MEX)
 3:     201    1096           FRA CAUDRON Raoul (FRA)
 4:     201    1096           MEX    LUQUE Juan (MEX)
 5:     201    1096           FRA CAUDRON Raoul (FRA)
 6:     201    1096           MEX    LUQUE Juan (MEX)
 7:     201    1096           FRA CAUDRON Raoul (FRA)
 8:     201    1096           MEX    LUQUE Juan (MEX)
 9:     201    1096           FRA CAUDRON Raoul (FRA)
10:     201    1096           MEX    LUQUE Juan (MEX)
11:     201    1096           FRA CAUDRON Raoul (FRA)
12:     201    1096           MEX    LUQUE Juan (MEX)
13:     201    1096           FRA CAUDRON Raoul (FRA)
14:     201    1096           MEX    LUQUE Juan (MEX)
15:     201    1096           FRA CAUDRON Raoul (FRA)
16:     201    1096           MEX    LUQUE Juan (MEX)
17:     201    1096           FRA CAUDRON Raoul (FRA)
18:     201    1096           MEX    LUQUE Juan (MEX)
19:     201    1096           FRA CAUDRON Raoul (FRA)
20:     201    1096           MEX    LUQUE Juan (MEX)
    Line-up Shirt Number       Player Name Position
 1:       S            0       Alex THEPOT       GK
 2:       S            0   Oscar BONFIGLIO       GK
 3:       S            0  Marcel LANGILLER         
 4:       S            0      Juan CARRENO         
 5:       S            0   Ernest LIBERATI         
 6:       S            0      Rafael GARZA        C
 7:       S            0   Andre MASCHINOT         
 8:       S            0     Hilario LOPEZ         
 9:       S            0   Etienne MATTLER         
10:       S            0    Dionisio MEJIA         
11:       S            0      Marcel PINEL         
12:       S            0      Felipe ROSAS         
13:       S            0   Alex VILLAPLANE        C
14:       S            0      Manuel ROSAS         
15:       S            0    Lucien LAURENT         
16:       S            0         Jose RUIZ         
17:       S            0    Marcel CAPELLE         
18:       S            0   Alfredo SANCHEZ         
19:       S            0 Augustin CHANTREL         
20:       S            0    Efrain AMEZCUA         
        Event
 1:          
 2:          
 3:      G40'
 4:      G70'
 5:          
 6:          
 7: G43' G87'
 8:          
 9:          
10:          
11:          
12:          
13:          
14:          
15:      G19'
16:          
17:          
18:          
19:          
20:          
# 只選取需要的欄位
allData = merge(WorldCupMatches,WorldCupPlayers,by=c("RoundID","MatchID")) 
head(allData)
   RoundID MatchID Year             Datetime   Stage
1:     201    1084 1930 22 Jul 1930 - 14:45  Group 1
2:     201    1084 1930 22 Jul 1930 - 14:45  Group 1
3:     201    1084 1930 22 Jul 1930 - 14:45  Group 1
4:     201    1084 1930 22 Jul 1930 - 14:45  Group 1
5:     201    1084 1930 22 Jul 1930 - 14:45  Group 1
6:     201    1084 1930 22 Jul 1930 - 14:45  Group 1
              Stadium        City Home Team Name
1: Estadio Centenario Montevideo       Argentina
2: Estadio Centenario Montevideo       Argentina
3: Estadio Centenario Montevideo       Argentina
4: Estadio Centenario Montevideo       Argentina
5: Estadio Centenario Montevideo       Argentina
6: Estadio Centenario Montevideo       Argentina
   Home Team Goals Away Team Goals Away Team Name
1:               3               1          Chile
2:               3               1          Chile
3:               3               1          Chile
4:               3               1          Chile
5:               3               1          Chile
6:               3               1          Chile
   Win conditions Attendance Half-time Home Goals
1:                     41459                    2
2:                     41459                    2
3:                     41459                    2
4:                     41459                    2
5:                     41459                    2
6:                     41459                    2
   Half-time Away Goals             Referee
1:                    1 LANGENUS Jean (BEL)
2:                    1 LANGENUS Jean (BEL)
3:                    1 LANGENUS Jean (BEL)
4:                    1 LANGENUS Jean (BEL)
5:                    1 LANGENUS Jean (BEL)
6:                    1 LANGENUS Jean (BEL)
             Assistant 1          Assistant 2
1: CRISTOPHE Henry (BEL) SAUCEDO Ulises (BOL)
2: CRISTOPHE Henry (BEL) SAUCEDO Ulises (BOL)
3: CRISTOPHE Henry (BEL) SAUCEDO Ulises (BOL)
4: CRISTOPHE Henry (BEL) SAUCEDO Ulises (BOL)
5: CRISTOPHE Henry (BEL) SAUCEDO Ulises (BOL)
6: CRISTOPHE Henry (BEL) SAUCEDO Ulises (BOL)
   Home Team Initials Away Team Initials Team Initials
1:                ARG                CHI           ARG
2:                ARG                CHI           CHI
3:                ARG                CHI           ARG
4:                ARG                CHI           CHI
5:                ARG                CHI           ARG
6:                ARG                CHI           CHI
               Coach Name Line-up Shirt Number
1: OLAZAR Francisco (ARG)       S            0
2:      ORTH Gyorgy (HUN)       S            0
3: OLAZAR Francisco (ARG)       S            0
4:      ORTH Gyorgy (HUN)       S            0
5: OLAZAR Francisco (ARG)       S            0
6:      ORTH Gyorgy (HUN)       S            0
          Player Name Position Event
1:       Angel BOSSIO       GK      
2:     Roberto CORTES       GK      
3:  Francisco VARALLO               
4:     Victor MORALES               
5:   Jose DELLA TORRE               
6: Guillermo SAAVEDRA               

建立社群網路圖

# 取出阿根廷隊、先發各隊長與勝場得分的關係,勝場分數2分以上的角度觀察
link <- allData %>%
      filter(.$'Home Team Name'=="Argentina") %>%
      filter(.$'Home Team Goals'>=1 & .$`Line-up`=="S" &  .$Position=="C"
             & .$`Team Initials`=="ARG") %>%
      select('Player Name', 'Home Team Goals')
link
         Player Name Home Team Goals
1    Manuel FERREIRA               3
2    Manuel FERREIRA               1
3    Manuel FERREIRA               6
4     Pedro DELLACHA               1
5     Pedro DELLACHA               3
6      Ruben NAVARRO               1
7     Antonio RATTIN               2
8     Antonio RATTIN               2
9    Roberto PERFUMO               4
10   Roberto PERFUMO               1
11   Miguel BRINDISI               1
12     Enrique WOLFF               1
13 Daniel PASSARELLA               2
14 Daniel PASSARELLA               2
15 Daniel PASSARELLA               6
16 Daniel PASSARELLA               2
17 Daniel PASSARELLA               2
18 Daniel PASSARELLA               4
19 Daniel PASSARELLA               1
20    Diego MARADONA               2
21    Diego MARADONA               3
22    Diego MARADONA               1
23    Diego MARADONA               1
24    Diego MARADONA               2
25    Diego MARADONA               4
26    Diego MARADONA               2
27 Daniel PASSARELLA               3
28    Diego MARADONA               2
29     Diego SIMEONE               1
30     Diego SIMEONE               5
31 Gabriel BATISTUTA               1
32     Diego SIMEONE               2
33    Diego MARADONA               3
34    Diego MARADONA               2
35        MASCHERANO               3
36        MASCHERANO               4
37        MASCHERANO               1
38             MESSI               1
39             MESSI               2
40             MESSI               1
41             MESSI               1
42             MESSI               1
43             MESSI               1
44             MESSI               1
45             MESSI               1
46             MESSI               1
47             MESSI               1
48             VERON               1
49             SORIN               2
50             SORIN               6
51             SORIN               2
# 建立網路關係
FIFANetwork <- graph_from_data_frame(d=link, directed=F)
FIFANetwork
IGRAPH 12143b8 UN-- 21 51 -- 
+ attr: name (v/c)
+ edges from 12143b8 (vertex names):
 [1] Manuel FERREIRA  --3 Manuel FERREIRA  --1
 [3] Manuel FERREIRA  --6 Pedro DELLACHA   --1
 [5] Pedro DELLACHA   --3 Ruben NAVARRO    --1
 [7] Antonio RATTIN   --2 Antonio RATTIN   --2
 [9] Roberto PERFUMO  --4 Roberto PERFUMO  --1
[11] Miguel BRINDISI  --1 Enrique WOLFF    --1
[13] Daniel PASSARELLA--2 Daniel PASSARELLA--2
[15] Daniel PASSARELLA--6 Daniel PASSARELLA--2
+ ... omitted several edges
#畫出網路圖
set.seed(777)
plot(FIFANetwork)

#由圖中可以看出到2014為止勝場得分幅度最大的是
#Daniel PASSARELLA及MARADONA
#而MESSI當隊長時平均勝場得分是1-2分,可能是因為有名的關係,
#他當隊長,敵隊比較謹慎,也有可能正直青黃交接期隊友素質參差不齊
set.seed(777)
# 接著我們分析我們比較關注的角色MESSI跟MARADONA,上顏色的
#V(FIFANetwork)$color <- ifelse(V(FIFANetwork)$type=="poster", "gold", "lightblue")
#V(FIFANetwork)$color<-
#  ifelse(V(FIFANetwork)$'Player Name'=="MESSI","red","lightblue")
V(FIFANetwork)$color="lightblue"
V(FIFANetwork)["MESSI"]$color="red"
V(FIFANetwork)["Diego MARADONA"]$color="gold"
#V(FIFANetwork)[c("MESSI")]$color="lightblue"
plot(FIFANetwork )

set.seed(777)
# 顯示有超過4個關聯,也就是當過四次隊長以上的資料顯示出來
labels <- degree(FIFANetwork)
V(FIFANetwork)$label <- names(labels)
plot(FIFANetwork, vertex.size=15, edge.arrow.size=.2,
     vertex.label=ifelse(degree(FIFANetwork) > 4, V(FIFANetwork)$label, NA),  vertex.label.ces=.5)

#從圖中可以看出 MESSI、MARADONA、PASSARELLA這三位擔任隊長期間有四次以上

接著我們找出隊長與敗場的關係

# 取出阿根廷隊、先發各隊長與敗場得分的關係,勝場0分不算,以有進球的角度觀察
link <- allData %>%
      filter(.$'Home Team Name'=="Argentina") %>%
      filter(.$'Away Team Goals'>=1 & .$`Line-up`=="S" &  .$Position=="C" 
             & .$`Team Initials`=="ARG") %>%
      select('Player Name', 'Away Team Goals')
link
         Player Name Away Team Goals
1    Manuel FERREIRA               1
2    Manuel FERREIRA               1
3     Pedro DELLACHA               3
4     Pedro DELLACHA               1
5     Antonio RATTIN               1
6    Roberto PERFUMO               1
7    Roberto PERFUMO               1
8    Miguel BRINDISI               2
9      Enrique WOLFF               1
10 Daniel PASSARELLA               1
11 Daniel PASSARELLA               1
12 Daniel PASSARELLA               1
13 Daniel PASSARELLA               1
14 Daniel PASSARELLA               3
15    Diego MARADONA               1
16    Diego MARADONA               1
17    Diego MARADONA               1
18    Diego MARADONA               1
19     Oscar RUGGERI               2
20 Daniel PASSARELLA               1
21    Diego MARADONA               1
22     Diego SIMEONE               2
23    Diego MARADONA               2
24        MASCHERANO               1
25        MASCHERANO               4
26        MASCHERANO               1
27             MESSI               1
28             VERON               1
29             SORIN               1
30             SORIN               1
#畫出網路圖
set.seed(999)
# 建立網路關係
FIFANetwork <- graph_from_data_frame(d=link, directed=F)
V(FIFANetwork)$color="lightblue"
V(FIFANetwork)["MESSI"]$color="red"
V(FIFANetwork)["Diego MARADONA"]$color="gold"
plot(FIFANetwork)

#由圖中可以看出MASHERANO、DELLACHA、PASSARELLA這些隊長可能是運氣比較不好
#以高分落敗#而我們關心的馬拉杜納跟梅西大部分是以1-2分落敗

接著我們找勝敗雙方球員的關係 取出跟阿根廷隊,交戰的隊伍成員資料

# 取出跟阿根廷隊係,交戰的隊伍成員資料
enemy_team <- allData %>%
      filter( (.$'Home Team Name'=="Argentina"|.$'Away Team Name'=="Argentina")
              & .$`Team Initials`!="ARG") %>%
        mutate(win=ifelse(.$'Home Team Name'=="Argentina",1,0)) %>%
          mutate(lose=ifelse(.$'Home Team Name'!="Argentina",1,0)) %>%
      select(ename='Player Name', loseg='Away Team Goals', wing='Home Team Goals',  
             MatchID,RoundID ,oteam=`Team Initials`,win,lose)
head(enemy_team)
               ename loseg wing MatchID RoundID oteam win
1     Roberto CORTES     1    3    1084     201   CHI   1
2     Victor MORALES     1    3    1084     201   CHI   1
3 Guillermo SAAVEDRA     1    3    1084     201   CHI   1
4 Guillermo SUBIABRE     1    3    1084     201   CHI   1
5      Arturo TORRES     1    3    1084     201   CHI   1
6    Casimiro TORRES     1    3    1084     201   CHI   1
  lose
1    0
2    0
3    0
4    0
5    0
6    0

*取出跟阿根廷隊資料並且統計跟敵人之間的勝場關係

# 取出跟阿根廷隊係,交戰的隊伍成員資料
agentina_team <- allData %>%
  filter( .$`Team Initials`=="ARG") %>%
      select(name='Player Name', MatchID,RoundID ) %>%
      left_join(enemy_team) %>%
      group_by(name , ename ,oteam ) %>%
      summarise(losesum=sum(lose),winsum=sum(win))
Joining, by = c("MatchID", "RoundID")
head(agentina_team)
#畫出網路圖
#set.seed(999)
# 建立網路關係
agentina_network <- agentina_team %>%
  filter(oteam=="GER" & winsum >=1 )%>%
  select(name,winsum) %>%
graph_from_data_frame(directed=F)
Adding missing grouping variables: `ename`
#V(agentina_network)$color="lightblue"
#V(agentina_network)["MESSI"]$color="red"
#V(agentina_network)["Diego MARADONA"]$color="gold"
plot(agentina_network)

#由圖中可以看出MASHERANO、DELLACHA、PASSARELLA這些隊長可能是運氣比較不好
#以高分落敗#而我們關心的馬拉杜納跟梅西大部分是以1-2分落敗
LS0tCnRpdGxlOiAi5YiG5p6QRklGQeeQg+WToeWLneaVl+mXnOS/giIKYXV0aG9yOiAnJwpkYXRlOiAiMjAxOS8wNS8xMyIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6IGRlZmF1bHQKICBwZGZfZG9jdW1lbnQ6IGRlZmF1bHQKLS0tCgpgYGB7cn0KbGlicmFyeShyZWFkcikKbGlicmFyeShkcGx5cikKbGlicmFyeShqaWViYVIpCmxpYnJhcnkodGlkeXIpCmxpYnJhcnkodGlkeXRleHQpCmxpYnJhcnkoaWdyYXBoKQpsaWJyYXJ5KHRvcGljbW9kZWxzKQpsaWJyYXJ5KHN0cmluZ3IpCmxpYnJhcnkoZ2dwbG90MikKbGlicmFyeShkYXRhLnRhYmxlKQpgYGAKCgoq6LyJ5YWl5LiW55WM5p2v6IiJ6L6m5bm05bqm6IiH6IiJ6L6m5ZyL5a625LmL55u46Zec6LOH5paZCmBgYHtyfQojc2V0d2QoIkQ6L0xlYXJuaW5nLzMxY2xhc3MvcmVwb3J0IikKI+iugOWPluizh+aWmQpnZXR3ZCgpCnNldHdkKCIvVXNlcnMvYXJpZWxjaGFuZy9EZXNrdG9wLzA1MTQiKSAKd29ybGRDdXBzPC1mcmVhZCgiV29ybGRDdXBzLmNzdiIsCiAgICAgICAgICAgICAgaGVhZGVyID0gVCxzdHJpbmdzQXNGYWN0b3JzID0gRiwgZW5jb2RpbmcgPSAiVVRGLTgiKQpoZWFkKHdvcmxkQ3VwcywyMCkKYGBgCgoq6LyJ5YWl5LiW55WM5p2v6IiJ6L6m5q+U6LO96LOH6KiKCmBgYHtyfQojIOiugOWPluizh+aWmQpnZXR3ZCgpCnNldHdkKCIvVXNlcnMvYXJpZWxjaGFuZy9EZXNrdG9wLzA1MTQiKSAKV29ybGRDdXBNYXRjaGVzPC1mcmVhZCgiV29ybGRDdXBNYXRjaGVzLmNzdiIsCiAgICAgICAgICAgICAgaGVhZGVyID0gVCxzdHJpbmdzQXNGYWN0b3JzID0gRiwgZW5jb2RpbmcgPSAiVVRGLTgiKQpoZWFkKFdvcmxkQ3VwTWF0Y2hlcykKYGBgCgoq6LyJ5YWl5LiW55WM5p2v5q+U6LO955CD5ZOh6LOH5paZCmBgYHtyfQpnZXR3ZCgpCnNldHdkKCIvVXNlcnMvYXJpZWxjaGFuZy9EZXNrdG9wLzA1MTQiKSAKV29ybGRDdXBQbGF5ZXJzPC1mcmVhZCgiV29ybGRDdXBQbGF5ZXJzLmNzdiIsCiAgICAgICAgICAgICAgaGVhZGVyID0gVCxzdHJpbmdzQXNGYWN0b3JzID0gRiwgZW5jb2RpbmcgPSAiVVRGLTgiKQpoZWFkKFdvcmxkQ3VwUGxheWVycywyMCkKYGBgCgpgYGB7cn0KIyDlj6rpgbjlj5bpnIDopoHnmoTmrITkvY0KYWxsRGF0YSA9IG1lcmdlKFdvcmxkQ3VwTWF0Y2hlcyxXb3JsZEN1cFBsYXllcnMsYnk9YygiUm91bmRJRCIsIk1hdGNoSUQiKSkgCgpoZWFkKGFsbERhdGEpCmBgYAoKIyMg5bu656uL56S+576k57ay6Lev5ZyWCmBgYHtyfQojIOWPluWHuumYv+agueW7t+maiuOAgeWFiOeZvOWQhOmaiumVt+iIh+WLneWgtOW+l+WIhueahOmXnOS/gu+8jOWLneWgtOWIhuaVuDLliIbku6XkuIrnmoTop5Lluqbop4Dlr58KbGluayA8LSBhbGxEYXRhICU+JQogICAgICBmaWx0ZXIoLiQnSG9tZSBUZWFtIE5hbWUnPT0iQXJnZW50aW5hIikgJT4lCiAgICAgIGZpbHRlciguJCdIb21lIFRlYW0gR29hbHMnPj0xICYgLiRgTGluZS11cGA9PSJTIiAmICAuJFBvc2l0aW9uPT0iQyIKICAgICAgICAgICAgICYgLiRgVGVhbSBJbml0aWFsc2A9PSJBUkciKSAlPiUKICAgICAgc2VsZWN0KCdQbGF5ZXIgTmFtZScsICdIb21lIFRlYW0gR29hbHMnKQpsaW5rCmBgYAoKYGBge3J9CiMg5bu656uL57ay6Lev6Zec5L+CCkZJRkFOZXR3b3JrIDwtIGdyYXBoX2Zyb21fZGF0YV9mcmFtZShkPWxpbmssIGRpcmVjdGVkPUYpCkZJRkFOZXR3b3JrCmBgYAoKYGBge3J9CiPnlavlh7rntrLot6/lnJYKc2V0LnNlZWQoNzc3KQpwbG90KEZJRkFOZXR3b3JrKQoj55Sx5ZyW5Lit5Y+v5Lul55yL5Ye65YiwMjAxNOeCuuatouWLneWgtOW+l+WIhuW5heW6puacgOWkp+eahOaYrwojRGFuaWVsIFBBU1NBUkVMTEHlj4pNQVJBRE9OQQoj6ICMTUVTU0nnlbbpmorplbfmmYLlubPlnYfli53loLTlvpfliIbmmK8xLTLliIbvvIzlj6/og73mmK/lm6DngrrmnInlkI3nmoTpl5zkv4LvvIwKI+S7lueVtumaiumVt++8jOaVtemaiuavlOi8g+isueaFju+8jOS5n+acieWPr+iDveato+ebtOmdkum7g+S6pOaOpeacn+maiuWPi+e0oOizquWPg+W3ruS4jem9igoKYGBgCgpgYGB7cn0KCnNldC5zZWVkKDc3NykKIyDmjqXokZfmiJHlgJHliIbmnpDmiJHlgJHmr5TovIPpl5zms6jnmoTop5LoibJNRVNTSei3n01BUkFET05B77yM5LiK6aGP6Imy55qECiNWKEZJRkFOZXR3b3JrKSRjb2xvciA8LSBpZmVsc2UoVihGSUZBTmV0d29yaykkdHlwZT09InBvc3RlciIsICJnb2xkIiwgImxpZ2h0Ymx1ZSIpCiNWKEZJRkFOZXR3b3JrKSRjb2xvcjwtCiMgIGlmZWxzZShWKEZJRkFOZXR3b3JrKSQnUGxheWVyIE5hbWUnPT0iTUVTU0kiLCJyZWQiLCJsaWdodGJsdWUiKQoKVihGSUZBTmV0d29yaykkY29sb3I9ImxpZ2h0Ymx1ZSIKVihGSUZBTmV0d29yaylbIk1FU1NJIl0kY29sb3I9InJlZCIKVihGSUZBTmV0d29yaylbIkRpZWdvIE1BUkFET05BIl0kY29sb3I9ImdvbGQiCgojVihGSUZBTmV0d29yaylbYygiTUVTU0kiKV0kY29sb3I9ImxpZ2h0Ymx1ZSIKcGxvdChGSUZBTmV0d29yayApCmBgYAoKYGBge3J9CnNldC5zZWVkKDc3NykKIyDpoa/npLrmnInotoXpgY405YCL6Zec6IGv77yM5Lmf5bCx5piv55W26YGO5Zub5qyh6ZqK6ZW35Lul5LiK55qE6LOH5paZ6aGv56S65Ye65L6GCmxhYmVscyA8LSBkZWdyZWUoRklGQU5ldHdvcmspClYoRklGQU5ldHdvcmspJGxhYmVsIDwtIG5hbWVzKGxhYmVscykKCnBsb3QoRklGQU5ldHdvcmssIHZlcnRleC5zaXplPTE1LCBlZGdlLmFycm93LnNpemU9LjIsCiAgICAgdmVydGV4LmxhYmVsPWlmZWxzZShkZWdyZWUoRklGQU5ldHdvcmspID4gNCwgVihGSUZBTmV0d29yaykkbGFiZWwsIE5BKSwgIHZlcnRleC5sYWJlbC5jZXM9LjUpCiPlvp7lnJbkuK3lj6/ku6XnnIvlh7ogTUVTU0njgIFNQVJBRE9OQeOAgVBBU1NBUkVMTEHpgJnkuInkvY3mk5Tku7vpmorplbfmnJ/plpPmnInlm5vmrKHku6XkuIoKCmBgYAoK5o6l6JGX5oiR5YCR5om+5Ye66ZqK6ZW36IiH5pWX5aC055qE6Zec5L+CCmBgYHtyfQojIOWPluWHuumYv+agueW7t+maiuOAgeWFiOeZvOWQhOmaiumVt+iIh+aVl+WgtOW+l+WIhueahOmXnOS/gu+8jOWLneWgtDDliIbkuI3nrpfvvIzku6XmnInpgLLnkIPnmoTop5Lluqbop4Dlr58KbGluayA8LSBhbGxEYXRhICU+JQogICAgICBmaWx0ZXIoLiQnSG9tZSBUZWFtIE5hbWUnPT0iQXJnZW50aW5hIikgJT4lCiAgICAgIGZpbHRlciguJCdBd2F5IFRlYW0gR29hbHMnPj0xICYgLiRgTGluZS11cGA9PSJTIiAmICAuJFBvc2l0aW9uPT0iQyIgCiAgICAgICAgICAgICAmIC4kYFRlYW0gSW5pdGlhbHNgPT0iQVJHIikgJT4lCiAgICAgIHNlbGVjdCgnUGxheWVyIE5hbWUnLCAnQXdheSBUZWFtIEdvYWxzJykKbGluawpgYGAKCmBgYHtyfQoj55Wr5Ye657ay6Lev5ZyWCnNldC5zZWVkKDk5OSkKIyDlu7rnq4vntrLot6/pl5zkv4IKRklGQU5ldHdvcmsgPC0gZ3JhcGhfZnJvbV9kYXRhX2ZyYW1lKGQ9bGluaywgZGlyZWN0ZWQ9RikKVihGSUZBTmV0d29yaykkY29sb3I9ImxpZ2h0Ymx1ZSIKVihGSUZBTmV0d29yaylbIk1FU1NJIl0kY29sb3I9InJlZCIKVihGSUZBTmV0d29yaylbIkRpZWdvIE1BUkFET05BIl0kY29sb3I9ImdvbGQiCnBsb3QoRklGQU5ldHdvcmspCiPnlLHlnJbkuK3lj6/ku6XnnIvlh7pNQVNIRVJBTk/jgIFERUxMQUNIQeOAgVBBU1NBUkVMTEHpgJnkupvpmorplbflj6/og73mmK/pgYvmsKPmr5TovIPkuI3lpb0KI+S7pemrmOWIhuiQveaVlyPogIzmiJHlgJHpl5zlv4PnmoTppqzmi4nmnZzntI3ot5/mooXopb/lpKfpg6jliIbmmK/ku6UxLTLliIbokL3mlZcKCmBgYAoKKuaOpeiRl+aIkeWAkeaJvuWLneaVl+mbmeaWueeQg+WToeeahOmXnOS/ggoq5Y+W5Ye66Lef6Zi/5qC55bu36ZqK77yM5Lqk5oiw55qE6ZqK5LyN5oiQ5ZOh6LOH5paZCmBgYHtyfQojIOWPluWHuui3n+mYv+agueW7t+maiuS/gu+8jOS6pOaIsOeahOmaiuS8jeaIkOWToeizh+aWmQplbmVteV90ZWFtIDwtIGFsbERhdGEgJT4lCiAgICAgIGZpbHRlciggKC4kJ0hvbWUgVGVhbSBOYW1lJz09IkFyZ2VudGluYSJ8LiQnQXdheSBUZWFtIE5hbWUnPT0iQXJnZW50aW5hIikKICAgICAgICAgICAgICAmIC4kYFRlYW0gSW5pdGlhbHNgIT0iQVJHIikgJT4lCiAgICAgICAgbXV0YXRlKHdpbj1pZmVsc2UoLiQnSG9tZSBUZWFtIE5hbWUnPT0iQXJnZW50aW5hIiwxLDApKSAlPiUKICAgICAgICAgIG11dGF0ZShsb3NlPWlmZWxzZSguJCdIb21lIFRlYW0gTmFtZSchPSJBcmdlbnRpbmEiLDEsMCkpICU+JQogICAgICBzZWxlY3QoZW5hbWU9J1BsYXllciBOYW1lJywgbG9zZWc9J0F3YXkgVGVhbSBHb2FscycsIHdpbmc9J0hvbWUgVGVhbSBHb2FscycsICAKICAgICAgICAgICAgIE1hdGNoSUQsUm91bmRJRCAsb3RlYW09YFRlYW0gSW5pdGlhbHNgLHdpbixsb3NlKQpoZWFkKGVuZW15X3RlYW0pCmBgYAoKKuWPluWHuui3n+mYv+agueW7t+maiuizh+aWmeS4puS4lOe1seioiOi3n+aVteS6uuS5i+mWk+eahOWLneWgtOmXnOS/ggpgYGB7cn0KIyDlj5blh7rot5/pmL/moLnlu7fpmorkv4LvvIzkuqTmiLDnmoTpmorkvI3miJDlk6Hos4fmlpkKYWdlbnRpbmFfdGVhbSA8LSBhbGxEYXRhICU+JQogIGZpbHRlciggLiRgVGVhbSBJbml0aWFsc2A9PSJBUkciKSAlPiUKICAgICAgc2VsZWN0KG5hbWU9J1BsYXllciBOYW1lJywgTWF0Y2hJRCxSb3VuZElEICkgJT4lCiAgICAgIGxlZnRfam9pbihlbmVteV90ZWFtKSAlPiUKICAgICAgZ3JvdXBfYnkobmFtZSAsIGVuYW1lICxvdGVhbSApICU+JQogICAgICBzdW1tYXJpc2UobG9zZXN1bT1zdW0obG9zZSksd2luc3VtPXN1bSh3aW4pKQpoZWFkKGFnZW50aW5hX3RlYW0pCmBgYAoKYGBge3J9CiPnlavlh7rntrLot6/lnJYKI3NldC5zZWVkKDk5OSkKIyDlu7rnq4vntrLot6/pl5zkv4IKYWdlbnRpbmFfbmV0d29yayA8LSBhZ2VudGluYV90ZWFtICU+JQogIGZpbHRlcihvdGVhbT09IkdFUiIgJiB3aW5zdW0gPj0xICklPiUKICBzZWxlY3QobmFtZSx3aW5zdW0pICU+JQpncmFwaF9mcm9tX2RhdGFfZnJhbWUoZGlyZWN0ZWQ9RikKI1YoYWdlbnRpbmFfbmV0d29yaykkY29sb3I9ImxpZ2h0Ymx1ZSIKI1YoYWdlbnRpbmFfbmV0d29yaylbIk1FU1NJIl0kY29sb3I9InJlZCIKI1YoYWdlbnRpbmFfbmV0d29yaylbIkRpZWdvIE1BUkFET05BIl0kY29sb3I9ImdvbGQiCnBsb3QoYWdlbnRpbmFfbmV0d29yaykKI+eUseWcluS4reWPr+S7peeci+WHuk1BU0hFUkFOT+OAgURFTExBQ0hB44CBUEFTU0FSRUxMQemAmeS6m+maiumVt+WPr+iDveaYr+mBi+awo+avlOi8g+S4jeWlvQoj5Lul6auY5YiG6JC95pWXI+iAjOaIkeWAkemXnOW/g+eahOmmrOaLieadnOe0jei3n+aiheilv+Wkp+mDqOWIhuaYr+S7pTEtMuWIhuiQveaVlwoKYGBg