Relative importance

Here, we calculate the expected relative importance of our effect of interest only (for more information, see Indlekofer and Brandes, 2013). We present only a perspective of RI (a) aggregated over all actors and (b) at time-point 1.

The following scripts reproduces the pie charts presented in the manuscript (Figure 7):

# We use a function to load the objects under new names.
loadRData <- function(fileName){
  #loads an RData file, and returns it
  load(fileName)
  get(ls()[ls() != "fileName"])
}

# get the RSiena object lists for both models (frequency and volume)
mydata_freq <- loadRData("clubdata_rsiena_freq.RData")
mydata_vol <- loadRData("clubdata_rsiena_vol.RData")

# we calculate RI of effects pertaining to running activity dynamics (both frequency and volume) across clubs


# we make a list, in which we store RI-objects for each club
RI_list <- list()

for (i in 1:5) { # for each club

  #get sienaFit list 
 
  ansL <- loadRData(paste0("test/sienaFit/sienaFit_club", i, ".RData"))

  #take model 5 (avAttH, avAttL, indegree...)
  ans <- ansL[[5]]
  
  # get only parameters for the evaluation function
  theta.eval <- ans$theta[ans$effects$type[ans$effects$include]=="eval"]
  myeff.eval <- ans$effects[ans$effects$type[ans$effects$include]=="eval",]
  
  # only effects we are interested in
  myeff.eval.beh <- myeff.eval[c(1, 16:20), ] 
  # note: also include outdegree (or another effect pertaining to network dynamics); apparently this is needed...
  # first, I excluded the shape effects, as they heavily compound the resulting plots (they are most important...)
  theta.eval.beh <- theta.eval[c(1, 16:20)] 
  
  # algorithm used
  myalgo <- sienaAlgorithmCreate(projname = "test", nsub=5, n3=5000 )
  
  # use sienaRI()
  RI <- sienaRI(
    data = mydata_freq[[i]],
    theta = theta.eval.beh,
    algorithm = myalgo,
    effects = myeff.eval.beh
  )
  
  # extract RI for the behavior dynamics
  RI_beh <- RI[[2]]
  
  # take the statistics for time t
  t = 1
  RI_freq <- RI_beh$expectedRI[[t]]
  
  # and repeat the same procedure for volume
  ansL <- loadRData(paste0("test/sienaFit/volume/sienaFit_club", i, ".RData"))
  ans <- ansL[[5]]
  theta.eval <- ans$theta[ans$effects$type[ans$effects$include]=="eval"]
  myeff.eval <- ans$effects[ans$effects$type[ans$effects$include]=="eval",]
  myeff.eval.beh <- myeff.eval[c(1, 16:20), ]
  theta.eval.beh <- theta.eval[c(1, 16:20)]
  RI <- sienaRI(
    data = mydata_vol[[i]],
    theta = theta.eval.beh,
    algorithm = myalgo,
    effects = myeff.eval.beh
  )
  RI_beh <- RI[[2]]
  RI_vol <- RI_beh$expectedRI[[t]]
  
  # combine 
  RIc <- c(RI_freq, RI_vol)
  
  # put in the list
  RI_list[[i]] <- RIc
}

# we make a dataframe for plotting multiple pie charts
df_plot <- data.frame(
  ri = unlist(RI_list),
  eff = substring(RI[[2]]$effectNames, 15),
  y = rep(c("Frequency", "Volume"), 10, each=5),
  club = rep(c("Club 1", "Club 2", "Club 3", "Club 4", "Club 5"), 1, each = 10)

)

# alter effect names
df_plot$eff <- as.factor(df_plot$eff)
levels(df_plot$eff)[1] <- substring(levels(df_plot$eff)[1], 14)
levels(df_plot$eff)[2] <- "other activities"

# reorder effect for plot
df_plot$eff <- factor(df_plot$eff,
                     levels = c("indegree", "average attraction higher", "average attraction lower", "gender", "other activities"))
# nice colors
color <- brewer.pal(5, "Set2")

ggplot(df_plot, aes(x="", y=ri, fill=eff)) +
  geom_bar(width = 1, size = 1, color = "white", stat = "identity") +
  coord_polar("y") +
  geom_text(aes(label = paste0(round(100*ri), "%")), 
            position = position_stack(vjust = 0.5)) +
  labs(x = NULL, y = NULL, fill = "Effects", 
       title = "<b><span style = 'font-size:16pt'>Relative Importance (<i>RI</i>) of indegree and attraction higher/lower effects</span>",
       caption = "<span style = 'font-size:10pt'><i>Note</i>: percentages indicate the extent to which effects determine whether actors make changes in their running attributes (i.e., frequency and volume).
       Percentages indicate the importance of model parameters relative to one another. They should not be interpreted as absolute explained variance. Patterns presented here would change, would we include other effects (e.g., basic shape effects, covariate effects). 
       The pattern of relative importances of effects was consistent across time; here, we present t=1.") +
  guides(fill = guide_legend()) +
  scale_fill_manual(values = color) +
  facet_grid(y~club, switch = "y") +
  theme_classic() +
    theme(axis.line = element_blank(),
      axis.text = element_blank(),
      axis.ticks = element_blank(),
      legend.title = element_blank(),
      
      plot.title = element_textbox_simple(
        padding = margin(5.5, 5.5, 5.5, 5.5),
        margin = margin(0, 0, 5.5, 0),
        fill = "lightsteelblue2",
        lineheight=1),
      
      strip.text.x = element_textbox(
        size = 9,
        color = "white", fill = "#5D729D", box.color = "#4A618C",
        halign = 0.5, linetype = 1, r = unit(5, "pt"), width = unit(1, "npc"),
        padding = margin(2, 0, 1, 0), margin = margin(3, 3, 3, 3)
      ),
      
      strip.text.y = element_textbox_simple(
        size=12,
        face="bold.italic",
        vjust=1),
      
      strip.background = element_blank(),
      
      plot.caption = element_textbox_simple(
        padding = margin(2, 2, 2, 2),
        margin = margin(0, 0, 2, 0),
        fill = "lightsteelblue2",
        lineheight=1,
        vjust=1.5,
        r = grid::unit(8, "pt")))


References

Indlekofer, Natalie, and Ulrik Brandes. 2013. “Relative Importance of Effects in Stochastic Actor-Oriented Models.” Network Science 1 (3): 278–304. doi:10.1017/nws.2013.21.
LS0tDQp0aXRsZTogIlJlbGF0aXZlIGltcG9ydGFuY2UiDQpkYXRlOiAiTGFzdCBjb21waWxlZCBvbiBgciBmb3JtYXQoU3lzLnRpbWUoKSwgJyVCLCAlWScpYCINCmJpYmxpb2dyYXBoeTogcmVmZXJlbmNlcy5iaWINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDoNCiAgICBjc3M6IHR3ZWFrcy5jc3MNCiAgICB0b2M6IG5vDQogICAgdG9jX2Zsb2F0OiBubw0KICAgIGNvbGxhcHNlZDogZmFsc2UNCiAgICBudW1iZXJfc2VjdGlvbnM6IGZhbHNlDQogICAgdG9jX2RlcHRoOiAxDQogICAgY29kZV9mb2xkaW5nOiBzaG93DQogICAgY29kZV9kb3dubG9hZDogeWVzDQotLS0NCg0KYGBge3IsIGdsb2JhbHNldHRpbmdzLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCByZXN1bHRzPSdoaWRlJ30NClN5cy5zZXRlbnYoTEFORyA9ICJlbiIpDQoNCmxpYnJhcnkoa25pdHIpDQpsaWJyYXJ5KFJTaWVuYSkNCmxpYnJhcnkoUkNvbG9yQnJld2VyKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShnZ3RleHQpDQoNCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkNCm9wdHNfY2h1bmskc2V0KHRpZHkub3B0cz1saXN0KHdpZHRoLmN1dG9mZj0xMDApLHRpZHk9VFJVRSwgd2FybmluZyA9IEZBTFNFLCBtZXNzYWdlID0gRkFMU0UsY29tbWVudCA9ICIjPiIsIGNhY2hlPVRSVUUsIGNsYXNzLnNvdXJjZT1jKCJ0ZXN0IiksIGNsYXNzLm91dHB1dD1jKCJ0ZXN0MiIpKQ0Kb3B0aW9ucyh3aWR0aCA9IDEwMCkNCnJnbDo6c2V0dXBLbml0cigpDQoNCmNvbG9yaXplIDwtIGZ1bmN0aW9uKHgsIGNvbG9yKSB7c3ByaW50ZigiPHNwYW4gc3R5bGU9J2NvbG9yOiAlczsnPiVzPC9zcGFuPiIsIGNvbG9yLCB4KSB9DQoNCmBgYA0KDQpgYGB7ciBrbGlwcHksIGVjaG89RkFMU0UsIGluY2x1ZGU9VFJVRX0NCmtsaXBweTo6a2xpcHB5KHBvc2l0aW9uID0gYygndG9wJywgJ3JpZ2h0JykpDQoja2xpcHB5OjprbGlwcHkoY29sb3IgPSAnZGFya3JlZCcpDQoja2xpcHB5OjprbGlwcHkodG9vbHRpcF9tZXNzYWdlID0gJ0NsaWNrIHRvIGNvcHknLCB0b29sdGlwX3N1Y2Nlc3MgPSAnRG9uZScpDQpgYGANCg0KDQotLS0tDQoNCiMgUmVsYXRpdmUgaW1wb3J0YW5jZQ0KDQpIZXJlLCB3ZSBjYWxjdWxhdGUgdGhlIGV4cGVjdGVkIHJlbGF0aXZlIGltcG9ydGFuY2Ugb2Ygb3VyIGVmZmVjdCBvZiBpbnRlcmVzdCBvbmx5IFtmb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIEluZGxla29mZXIgYW5kIEJyYW5kZXMsIC1AaW5kbGVrb2ZlcjIwMTNdLiBXZSBwcmVzZW50IG9ubHkgYSBwZXJzcGVjdGl2ZSBvZiBSSSAoYSkgYWdncmVnYXRlZCBvdmVyIGFsbCBhY3RvcnMgYW5kIChiKSBhdCB0aW1lLXBvaW50IDEuIA0KDQoNClRoZSBmb2xsb3dpbmcgc2NyaXB0cyByZXByb2R1Y2VzIHRoZSBwaWUgY2hhcnRzIHByZXNlbnRlZCBpbiB0aGUgbWFudXNjcmlwdCAoRmlndXJlIDcpOg0KDQpgYGB7ciBldmFsPUZ9DQojIFdlIHVzZSBhIGZ1bmN0aW9uIHRvIGxvYWQgdGhlIG9iamVjdHMgdW5kZXIgbmV3IG5hbWVzLg0KbG9hZFJEYXRhIDwtIGZ1bmN0aW9uKGZpbGVOYW1lKXsNCiAgI2xvYWRzIGFuIFJEYXRhIGZpbGUsIGFuZCByZXR1cm5zIGl0DQogIGxvYWQoZmlsZU5hbWUpDQogIGdldChscygpW2xzKCkgIT0gImZpbGVOYW1lIl0pDQp9DQoNCiMgZ2V0IHRoZSBSU2llbmEgb2JqZWN0IGxpc3RzIGZvciBib3RoIG1vZGVscyAoZnJlcXVlbmN5IGFuZCB2b2x1bWUpDQpteWRhdGFfZnJlcSA8LSBsb2FkUkRhdGEoImNsdWJkYXRhX3JzaWVuYV9mcmVxLlJEYXRhIikNCm15ZGF0YV92b2wgPC0gbG9hZFJEYXRhKCJjbHViZGF0YV9yc2llbmFfdm9sLlJEYXRhIikNCg0KIyB3ZSBjYWxjdWxhdGUgUkkgb2YgZWZmZWN0cyBwZXJ0YWluaW5nIHRvIHJ1bm5pbmcgYWN0aXZpdHkgZHluYW1pY3MgKGJvdGggZnJlcXVlbmN5IGFuZCB2b2x1bWUpIGFjcm9zcyBjbHVicw0KDQoNCiMgd2UgbWFrZSBhIGxpc3QsIGluIHdoaWNoIHdlIHN0b3JlIFJJLW9iamVjdHMgZm9yIGVhY2ggY2x1Yg0KUklfbGlzdCA8LSBsaXN0KCkNCg0KZm9yIChpIGluIDE6NSkgeyAjIGZvciBlYWNoIGNsdWINCg0KICAjZ2V0IHNpZW5hRml0IGxpc3QgDQogDQogIGFuc0wgPC0gbG9hZFJEYXRhKHBhc3RlMCgidGVzdC9zaWVuYUZpdC9zaWVuYUZpdF9jbHViIiwgaSwgIi5SRGF0YSIpKQ0KDQogICN0YWtlIG1vZGVsIDUgKGF2QXR0SCwgYXZBdHRMLCBpbmRlZ3JlZS4uLikNCiAgYW5zIDwtIGFuc0xbWzVdXQ0KICANCiAgIyBnZXQgb25seSBwYXJhbWV0ZXJzIGZvciB0aGUgZXZhbHVhdGlvbiBmdW5jdGlvbg0KICB0aGV0YS5ldmFsIDwtIGFucyR0aGV0YVthbnMkZWZmZWN0cyR0eXBlW2FucyRlZmZlY3RzJGluY2x1ZGVdPT0iZXZhbCJdDQogIG15ZWZmLmV2YWwgPC0gYW5zJGVmZmVjdHNbYW5zJGVmZmVjdHMkdHlwZVthbnMkZWZmZWN0cyRpbmNsdWRlXT09ImV2YWwiLF0NCiAgDQogICMgb25seSBlZmZlY3RzIHdlIGFyZSBpbnRlcmVzdGVkIGluDQogIG15ZWZmLmV2YWwuYmVoIDwtIG15ZWZmLmV2YWxbYygxLCAxNjoyMCksIF0gDQogICMgbm90ZTogYWxzbyBpbmNsdWRlIG91dGRlZ3JlZSAob3IgYW5vdGhlciBlZmZlY3QgcGVydGFpbmluZyB0byBuZXR3b3JrIGR5bmFtaWNzKTsgYXBwYXJlbnRseSB0aGlzIGlzIG5lZWRlZC4uLg0KICAjIGZpcnN0LCBJIGV4Y2x1ZGVkIHRoZSBzaGFwZSBlZmZlY3RzLCBhcyB0aGV5IGhlYXZpbHkgY29tcG91bmQgdGhlIHJlc3VsdGluZyBwbG90cyAodGhleSBhcmUgbW9zdCBpbXBvcnRhbnQuLi4pDQogIHRoZXRhLmV2YWwuYmVoIDwtIHRoZXRhLmV2YWxbYygxLCAxNjoyMCldIA0KICANCiAgIyBhbGdvcml0aG0gdXNlZA0KICBteWFsZ28gPC0gc2llbmFBbGdvcml0aG1DcmVhdGUocHJvam5hbWUgPSAidGVzdCIsIG5zdWI9NSwgbjM9NTAwMCApDQogIA0KICAjIHVzZSBzaWVuYVJJKCkNCiAgUkkgPC0gc2llbmFSSSgNCiAgICBkYXRhID0gbXlkYXRhX2ZyZXFbW2ldXSwNCiAgICB0aGV0YSA9IHRoZXRhLmV2YWwuYmVoLA0KICAgIGFsZ29yaXRobSA9IG15YWxnbywNCiAgICBlZmZlY3RzID0gbXllZmYuZXZhbC5iZWgNCiAgKQ0KICANCiAgIyBleHRyYWN0IFJJIGZvciB0aGUgYmVoYXZpb3IgZHluYW1pY3MNCiAgUklfYmVoIDwtIFJJW1syXV0NCiAgDQogICMgdGFrZSB0aGUgc3RhdGlzdGljcyBmb3IgdGltZSB0DQogIHQgPSAxDQogIFJJX2ZyZXEgPC0gUklfYmVoJGV4cGVjdGVkUklbW3RdXQ0KICANCiAgIyBhbmQgcmVwZWF0IHRoZSBzYW1lIHByb2NlZHVyZSBmb3Igdm9sdW1lDQogIGFuc0wgPC0gbG9hZFJEYXRhKHBhc3RlMCgidGVzdC9zaWVuYUZpdC92b2x1bWUvc2llbmFGaXRfY2x1YiIsIGksICIuUkRhdGEiKSkNCiAgYW5zIDwtIGFuc0xbWzVdXQ0KICB0aGV0YS5ldmFsIDwtIGFucyR0aGV0YVthbnMkZWZmZWN0cyR0eXBlW2FucyRlZmZlY3RzJGluY2x1ZGVdPT0iZXZhbCJdDQogIG15ZWZmLmV2YWwgPC0gYW5zJGVmZmVjdHNbYW5zJGVmZmVjdHMkdHlwZVthbnMkZWZmZWN0cyRpbmNsdWRlXT09ImV2YWwiLF0NCiAgbXllZmYuZXZhbC5iZWggPC0gbXllZmYuZXZhbFtjKDEsIDE2OjIwKSwgXQ0KICB0aGV0YS5ldmFsLmJlaCA8LSB0aGV0YS5ldmFsW2MoMSwgMTY6MjApXQ0KICBSSSA8LSBzaWVuYVJJKA0KICAgIGRhdGEgPSBteWRhdGFfdm9sW1tpXV0sDQogICAgdGhldGEgPSB0aGV0YS5ldmFsLmJlaCwNCiAgICBhbGdvcml0aG0gPSBteWFsZ28sDQogICAgZWZmZWN0cyA9IG15ZWZmLmV2YWwuYmVoDQogICkNCiAgUklfYmVoIDwtIFJJW1syXV0NCiAgUklfdm9sIDwtIFJJX2JlaCRleHBlY3RlZFJJW1t0XV0NCiAgDQogICMgY29tYmluZSANCiAgUkljIDwtIGMoUklfZnJlcSwgUklfdm9sKQ0KICANCiAgIyBwdXQgaW4gdGhlIGxpc3QNCiAgUklfbGlzdFtbaV1dIDwtIFJJYw0KfQ0KDQojIHdlIG1ha2UgYSBkYXRhZnJhbWUgZm9yIHBsb3R0aW5nIG11bHRpcGxlIHBpZSBjaGFydHMNCmRmX3Bsb3QgPC0gZGF0YS5mcmFtZSgNCiAgcmkgPSB1bmxpc3QoUklfbGlzdCksDQogIGVmZiA9IHN1YnN0cmluZyhSSVtbMl1dJGVmZmVjdE5hbWVzLCAxNSksDQogIHkgPSByZXAoYygiRnJlcXVlbmN5IiwgIlZvbHVtZSIpLCAxMCwgZWFjaD01KSwNCiAgY2x1YiA9IHJlcChjKCJDbHViIDEiLCAiQ2x1YiAyIiwgIkNsdWIgMyIsICJDbHViIDQiLCAiQ2x1YiA1IiksIDEsIGVhY2ggPSAxMCkNCg0KKQ0KDQojIGFsdGVyIGVmZmVjdCBuYW1lcw0KZGZfcGxvdCRlZmYgPC0gYXMuZmFjdG9yKGRmX3Bsb3QkZWZmKQ0KbGV2ZWxzKGRmX3Bsb3QkZWZmKVsxXSA8LSBzdWJzdHJpbmcobGV2ZWxzKGRmX3Bsb3QkZWZmKVsxXSwgMTQpDQpsZXZlbHMoZGZfcGxvdCRlZmYpWzJdIDwtICJvdGhlciBhY3Rpdml0aWVzIg0KDQojIHJlb3JkZXIgZWZmZWN0IGZvciBwbG90DQpkZl9wbG90JGVmZiA8LSBmYWN0b3IoZGZfcGxvdCRlZmYsDQogICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJpbmRlZ3JlZSIsICJhdmVyYWdlIGF0dHJhY3Rpb24gaGlnaGVyIiwgImF2ZXJhZ2UgYXR0cmFjdGlvbiBsb3dlciIsICJnZW5kZXIiLCAib3RoZXIgYWN0aXZpdGllcyIpKQ0KIyBuaWNlIGNvbG9ycw0KY29sb3IgPC0gYnJld2VyLnBhbCg1LCAiU2V0MiIpDQoNCmdncGxvdChkZl9wbG90LCBhZXMoeD0iIiwgeT1yaSwgZmlsbD1lZmYpKSArDQogIGdlb21fYmFyKHdpZHRoID0gMSwgc2l6ZSA9IDEsIGNvbG9yID0gIndoaXRlIiwgc3RhdCA9ICJpZGVudGl0eSIpICsNCiAgY29vcmRfcG9sYXIoInkiKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBwYXN0ZTAocm91bmQoMTAwKnJpKSwgIiUiKSksIA0KICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IDAuNSkpICsNCiAgbGFicyh4ID0gTlVMTCwgeSA9IE5VTEwsIGZpbGwgPSAiRWZmZWN0cyIsIA0KICAgICAgIHRpdGxlID0gIjxiPjxzcGFuIHN0eWxlID0gJ2ZvbnQtc2l6ZToxNnB0Jz5SZWxhdGl2ZSBJbXBvcnRhbmNlICg8aT5SSTwvaT4pIG9mIGluZGVncmVlIGFuZCBhdHRyYWN0aW9uIGhpZ2hlci9sb3dlciBlZmZlY3RzPC9zcGFuPiIsDQogICAgICAgY2FwdGlvbiA9ICI8c3BhbiBzdHlsZSA9ICdmb250LXNpemU6MTBwdCc+PGk+Tm90ZTwvaT46IHBlcmNlbnRhZ2VzIGluZGljYXRlIHRoZSBleHRlbnQgdG8gd2hpY2ggZWZmZWN0cyBkZXRlcm1pbmUgd2hldGhlciBhY3RvcnMgbWFrZSBjaGFuZ2VzIGluIHRoZWlyIHJ1bm5pbmcgYXR0cmlidXRlcyAoaS5lLiwgZnJlcXVlbmN5IGFuZCB2b2x1bWUpLg0KICAgICAgIFBlcmNlbnRhZ2VzIGluZGljYXRlIHRoZSBpbXBvcnRhbmNlIG9mIG1vZGVsIHBhcmFtZXRlcnMgcmVsYXRpdmUgdG8gb25lIGFub3RoZXIuIFRoZXkgc2hvdWxkIG5vdCBiZSBpbnRlcnByZXRlZCBhcyBhYnNvbHV0ZSBleHBsYWluZWQgdmFyaWFuY2UuIFBhdHRlcm5zIHByZXNlbnRlZCBoZXJlIHdvdWxkIGNoYW5nZSwgd291bGQgd2UgaW5jbHVkZSBvdGhlciBlZmZlY3RzIChlLmcuLCBiYXNpYyBzaGFwZSBlZmZlY3RzLCBjb3ZhcmlhdGUgZWZmZWN0cykuIA0KICAgICAgIFRoZSBwYXR0ZXJuIG9mIHJlbGF0aXZlIGltcG9ydGFuY2VzIG9mIGVmZmVjdHMgd2FzIGNvbnNpc3RlbnQgYWNyb3NzIHRpbWU7IGhlcmUsIHdlIHByZXNlbnQgdD0xLiIpICsNCiAgZ3VpZGVzKGZpbGwgPSBndWlkZV9sZWdlbmQoKSkgKw0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjb2xvcikgKw0KICBmYWNldF9ncmlkKHl+Y2x1Yiwgc3dpdGNoID0gInkiKSArDQogIHRoZW1lX2NsYXNzaWMoKSArDQogICAgdGhlbWUoYXhpcy5saW5lID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgYXhpcy50ZXh0ID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgIA0KICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dGJveF9zaW1wbGUoDQogICAgICAgIHBhZGRpbmcgPSBtYXJnaW4oNS41LCA1LjUsIDUuNSwgNS41KSwNCiAgICAgICAgbWFyZ2luID0gbWFyZ2luKDAsIDAsIDUuNSwgMCksDQogICAgICAgIGZpbGwgPSAibGlnaHRzdGVlbGJsdWUyIiwNCiAgICAgICAgbGluZWhlaWdodD0xKSwNCiAgICAgIA0KICAgICAgc3RyaXAudGV4dC54ID0gZWxlbWVudF90ZXh0Ym94KA0KICAgICAgICBzaXplID0gOSwNCiAgICAgICAgY29sb3IgPSAid2hpdGUiLCBmaWxsID0gIiM1RDcyOUQiLCBib3guY29sb3IgPSAiIzRBNjE4QyIsDQogICAgICAgIGhhbGlnbiA9IDAuNSwgbGluZXR5cGUgPSAxLCByID0gdW5pdCg1LCAicHQiKSwgd2lkdGggPSB1bml0KDEsICJucGMiKSwNCiAgICAgICAgcGFkZGluZyA9IG1hcmdpbigyLCAwLCAxLCAwKSwgbWFyZ2luID0gbWFyZ2luKDMsIDMsIDMsIDMpDQogICAgICApLA0KICAgICAgDQogICAgICBzdHJpcC50ZXh0LnkgPSBlbGVtZW50X3RleHRib3hfc2ltcGxlKA0KICAgICAgICBzaXplPTEyLA0KICAgICAgICBmYWNlPSJib2xkLml0YWxpYyIsDQogICAgICAgIHZqdXN0PTEpLA0KICAgICAgDQogICAgICBzdHJpcC5iYWNrZ3JvdW5kID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgDQogICAgICBwbG90LmNhcHRpb24gPSBlbGVtZW50X3RleHRib3hfc2ltcGxlKA0KICAgICAgICBwYWRkaW5nID0gbWFyZ2luKDIsIDIsIDIsIDIpLA0KICAgICAgICBtYXJnaW4gPSBtYXJnaW4oMCwgMCwgMiwgMCksDQogICAgICAgIGZpbGwgPSAibGlnaHRzdGVlbGJsdWUyIiwNCiAgICAgICAgbGluZWhlaWdodD0xLA0KICAgICAgICB2anVzdD0xLjUsDQogICAgICAgIHIgPSBncmlkOjp1bml0KDgsICJwdCIpKSkNCmBgYA0KDQohW10ocmkuanBnKQ0KDQotLS0tDQoNCg0KIyMjIFJlZmVyZW5jZXMgDQo=


Copyright © 2021 Rob Franken