Warning: package ‘dplyr’ was built under R version 4.1.2

Attaching package: ‘dplyr’

The following objects are masked from ‘package:stats’:

    filter, lag

The following objects are masked from ‘package:base’:

    intersect, setdiff, setequal, union

Loading required package: lme4
Loading required package: Matrix

Attaching package: ‘Matrix’

The following objects are masked from ‘package:tidyr’:

    expand, pack, unpack

************
Welcome to afex. For support visit: http://afex.singmann.science/
- Functions for ANOVAs: aov_car(), aov_ez(), and aov_4()
- Methods for calculating p-values with mixed(): 'S', 'KR', 'LRT', and 'PB'
- 'afex_aov' and 'mixed' objects can be passed to emmeans() for follow-up tests
- NEWS: emmeans() for ANOVA models now uses model = 'multivariate' as default.
- Get and set global package options with: afex_options()
- Set orthogonal sum-to-zero contrasts globally: set_sum_contrasts()
- For example analyses see: browseVignettes("afex")
************

Attaching package: ‘afex’

The following object is masked from ‘package:lme4’:

    lmer
`summarise()` has grouped output by 'id'. You can override using the `.groups` argument.
`summarise()` has grouped output by 'id'. You can override using the `.groups` argument.
`summarise()` has grouped output by 'id', 'condition'. You can override using the `.groups` argument.
`summarise()` has grouped output by 'id'. You can override using the `.groups` argument.

H1: Perceived social controllability will be lower in the PTSD group than the control group (LE and resilient groups)

H2: Perceived social controllability will be different in the resilient group than in the LE group.

There is a significant main effect of condition, where perceived control is higher in the IC condition than the NC condition (averaged across the 3 groups). No significant main effect of group or group x condition interaction, but based on the plots, there’s a tendency for people in the PTSD group to perceive somewhat lower social control in both conditions, and people in the resilient group to perceive somewhat higher social control.

Converting to factor: group
Contrasts set to contr.sum for the following variables: group

Univariate Type III Repeated-Measures ANOVA Assuming Sphericity

                Sum Sq num Df Error SS den Df  F value              Pr(>F)    
(Intercept)     153830      1    77641     53 105.0092 0.00000000000003555 ***
group             4059      2    77641     53   1.3855            0.259111    
condition         2274      1    12428     53   9.6956            0.002977 ** 
group:condition    614      2    12428     53   1.3084            0.278842    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
$emmeans
 condition emmean   SE df lower.CL upper.CL
 IC          43.0 4.05 53     34.9     51.2
 NC          33.7 4.01 53     25.7     41.8

Results are averaged over the levels of: group 
Confidence level used: 0.95 

$contrasts
 contrast estimate SE df t.ratio p.value
 IC - NC      9.33  3 53   3.114  0.0030

Results are averaged over the levels of: group 
P value adjustment: holm method for 1 tests 

$emmeans
group = Low-exposed:
 condition emmean   SE df lower.CL upper.CL
 IC          45.0 7.32 53     30.3     59.7
 NC          29.1 7.25 53     14.5     43.6

group = PTSD:
 condition emmean   SE df lower.CL upper.CL
 IC          33.6 7.83 53     17.9     49.3
 NC          30.4 7.75 53     14.8     45.9

group = Resilient:
 condition emmean   SE df lower.CL upper.CL
 IC          50.6 5.75 53     39.1     62.1
 NC          41.7 5.69 53     30.3     53.1

Confidence level used: 0.95 

$contrasts
group = Low-exposed:
 contrast estimate   SE df t.ratio p.value
 IC - NC     15.94 5.41 53   2.944  0.0048

group = PTSD:
 contrast estimate   SE df t.ratio p.value
 IC - NC      3.21 5.79 53   0.555  0.5810

group = Resilient:
 contrast estimate   SE df t.ratio p.value
 IC - NC      8.85 4.25 53   2.083  0.0421

P value adjustment: holm method for 1 tests 
Warning: `fun.y` is deprecated. Use `fun` instead.

Warning: `fun.y` is deprecated. Use `fun` instead.

Warning: `fun.y` is deprecated. Use `fun` instead.

H3: Percent of offers accepted will be higher in the PTSD group than the control group (LE and resilient groups)

There is a significant main effect of condition, where more offers are accepted in the IC condition than the NC condition (averaged across the 3 groups). No significant main effect of group or group x condition interaction, but based on the plots, there’s a tendency for people in the PTSD group to accept more offers (could indicate a less risky strategy - i.e., better to win a small amount than gamble on a big amount and get nothing) and people in the low exposed group to be more choosy about which offers they accept.

I wonder if part of the reason we see more offers on average being accepted in the IC condition is because for people who effectively picked up on their ability to control their “partner’s” offers, their offers got better so they accepted more of them…? Not sure but I feel like the actual offers that people are receiving in the IC condition might make a difference here somehow…

Converting to factor: group
Contrasts set to contr.sum for the following variables: group

Univariate Type III Repeated-Measures ANOVA Assuming Sphericity

                 Sum Sq num Df Error SS den Df F value             Pr(>F)    
(Intercept)     17.6573      1   9.5218     53 98.2836 0.0000000000001138 ***
group            0.4470      2   9.5218     53  1.2440           0.296515    
condition        0.2585      1   1.3248     53 10.3426           0.002217 ** 
group:condition  0.0347      2   1.3248     53  0.6948           0.503653    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
$emmeans
 condition emmean     SE df lower.CL upper.CL
 IC         0.461 0.0383 53    0.384    0.538
 NC         0.361 0.0496 53    0.262    0.461

Results are averaged over the levels of: group 
Confidence level used: 0.95 

$contrasts
 contrast estimate     SE df t.ratio p.value
 IC - NC    0.0995 0.0309 53   3.216  0.0022

Results are averaged over the levels of: group 
P value adjustment: holm method for 1 tests 

$emmeans
group = Low-exposed:
 condition emmean     SE df lower.CL upper.CL
 IC         0.381 0.0691 53   0.2423    0.520
 NC         0.258 0.0895 53   0.0787    0.438

group = PTSD:
 condition emmean     SE df lower.CL upper.CL
 IC         0.550 0.0739 53   0.4020    0.698
 NC         0.427 0.0957 53   0.2348    0.619

group = Resilient:
 condition emmean     SE df lower.CL upper.CL
 IC         0.452 0.0542 53   0.3431    0.561
 NC         0.399 0.0702 53   0.2586    0.540

Confidence level used: 0.95 

$contrasts
group = Low-exposed:
 contrast estimate     SE df t.ratio p.value
 IC - NC    0.1227 0.0559 53   2.195  0.0326

group = PTSD:
 contrast estimate     SE df t.ratio p.value
 IC - NC    0.1235 0.0598 53   2.066  0.0437

group = Resilient:
 contrast estimate     SE df t.ratio p.value
 IC - NC    0.0524 0.0438 53   1.195  0.2372

P value adjustment: holm method for 1 tests 
Warning: `fun.y` is deprecated. Use `fun` instead.

Warning: `fun.y` is deprecated. Use `fun` instead.

Warning: `fun.y` is deprecated. Use `fun` instead.

H4: Mean offer accepted will be lower in the PTSD group than the control group (LE and resilient groups)

There is a significant main effect of condition, where mean offer amount accepted is lower in the IC condition than the NC condition (averaged across the 3 groups)…see the next section for what I suspect might explain this unexpected result.

No significant main effect of group or group x condition interaction, but based on the plots, there’s a tendency for people in the PTSD group to accept lower offers in general.

Converting to factor: group
Warning: Missing values for following ID(s):
NWTC-008, NWTC-011, NWTC-012, NWTC-018, NWTC-019, NWTC-033, NWTC-043, NWTC-045, NWTC-058, NWTC-060, NWTC-074, NWTC-084, NWTC-091
Removing those cases from the analysis.
Contrasts set to contr.sum for the following variables: group

Univariate Type III Repeated-Measures ANOVA Assuming Sphericity

                 Sum Sq num Df Error SS den Df  F value                Pr(>F)    
(Intercept)     3067.42      1  299.305     40 409.9390 < 0.00000000000000022 ***
group             35.26      2  299.305     40   2.3558              0.107839    
condition         13.83      1   68.188     40   8.1109              0.006915 ** 
group:condition    1.05      2   68.188     40   0.3089              0.735954    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
$emmeans
 condition emmean    SE df lower.CL upper.CL
 IC          5.77 0.427 40     4.90     6.63
 NC          6.60 0.216 40     6.16     7.03

Results are averaged over the levels of: group 
Confidence level used: 0.95 

$contrasts
 contrast estimate    SE df t.ratio p.value
 IC - NC     -0.83 0.291 40  -2.848  0.0069

Results are averaged over the levels of: group 
P value adjustment: holm method for 1 tests 

$emmeans
group = Low-exposed:
 condition emmean    SE df lower.CL upper.CL
 IC          6.78 0.781 40     5.20     8.36
 NC          7.38 0.395 40     6.59     8.18

group = PTSD:
 condition emmean    SE df lower.CL upper.CL
 IC          4.75 0.816 40     3.11     6.40
 NC          5.92 0.412 40     5.09     6.76

group = Resilient:
 condition emmean    SE df lower.CL upper.CL
 IC          5.76 0.605 40     4.54     6.99
 NC          6.48 0.306 40     5.86     7.10

Confidence level used: 0.95 

$contrasts
group = Low-exposed:
 contrast estimate    SE df t.ratio p.value
 IC - NC    -0.601 0.533 40  -1.128  0.2662

group = PTSD:
 contrast estimate    SE df t.ratio p.value
 IC - NC    -1.170 0.557 40  -2.101  0.0420

group = Resilient:
 contrast estimate    SE df t.ratio p.value
 IC - NC    -0.720 0.413 40  -1.743  0.0890

P value adjustment: holm method for 1 tests 
Warning: `fun.y` is deprecated. Use `fun` instead.
Warning: Removed 19 rows containing non-finite values (stat_summary).
Warning: Removed 19 rows containing non-finite values (stat_summary).
Warning: Removed 19 rows containing non-finite values (stat_summary).
Warning: Removed 19 rows containing non-finite values (stat_summary).

Warning: `fun.y` is deprecated. Use `fun` instead.
Warning: Removed 19 rows containing non-finite values (stat_summary).
Warning: Removed 19 rows containing non-finite values (stat_summary).
Warning: Removed 19 rows containing non-finite values (stat_summary).
Warning: Removed 19 rows containing non-finite values (stat_summary).

Warning: `fun.y` is deprecated. Use `fun` instead.
Warning: Removed 19 rows containing non-finite values (stat_summary).
Warning: Removed 19 rows containing non-finite values (stat_summary).
Warning: Removed 19 rows containing non-finite values (stat_summary).
Warning: Removed 19 rows containing non-finite values (stat_summary).

H4a: Mean offer overall (both accepted & rejected) will be lower in the PTSD group than the control group (LE and resilient groups)

Converting to factor: group
Contrasts set to contr.sum for the following variables: group

Univariate Type III Repeated-Measures ANOVA Assuming Sphericity

                 Sum Sq num Df Error SS den Df  F value               Pr(>F)    
(Intercept)     3068.89      1   165.99     53 979.8673 < 0.0000000000000002 ***
group              8.65      2   165.99     53   1.3808              0.26027    
condition         20.60      1   168.53     53   6.4787              0.01386 *  
group:condition    7.97      2   168.53     53   1.2539              0.29371    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
$emmeans
 condition emmean     SE df lower.CL upper.CL
 IC          5.87 0.3471 53     5.17     6.56
 NC          4.98 0.0206 53     4.94     5.02

Results are averaged over the levels of: group 
Confidence level used: 0.95 

$contrasts
 contrast estimate    SE df t.ratio p.value
 IC - NC     0.888 0.349 53   2.545  0.0139

Results are averaged over the levels of: group 
P value adjustment: holm method for 1 tests 

$emmeans
group = Low-exposed:
 condition emmean     SE df lower.CL upper.CL
 IC          6.61 0.6270 53     5.35     7.87
 NC          4.99 0.0372 53     4.91     5.06

group = PTSD:
 condition emmean     SE df lower.CL upper.CL
 IC          5.12 0.6703 53     3.78     6.46
 NC          4.96 0.0398 53     4.88     5.04

group = Resilient:
 condition emmean     SE df lower.CL upper.CL
 IC          5.87 0.4918 53     4.88     6.85
 NC          4.99 0.0292 53     4.93     5.05

Confidence level used: 0.95 

$contrasts
group = Low-exposed:
 contrast estimate    SE df t.ratio p.value
 IC - NC     1.623 0.630 53   2.574  0.0129

group = PTSD:
 contrast estimate    SE df t.ratio p.value
 IC - NC     0.164 0.674 53   0.243  0.8090

group = Resilient:
 contrast estimate    SE df t.ratio p.value
 IC - NC     0.879 0.495 53   1.777  0.0814

P value adjustment: holm method for 1 tests 
Warning: `fun.y` is deprecated. Use `fun` instead.

Warning: `fun.y` is deprecated. Use `fun` instead.

Warning: `fun.y` is deprecated. Use `fun` instead.

Effect of time (over the 30 trials)

I wanted to look at the offer size across all trials, since I thought the weird-seeming effect of IC being lower than NC (above) might be driven by the fact that people who don’t pick up on their control over the offers keep using the strategy of “something is better than nothing, let’s accept more often”, so their mean offer thus keeps going down…i.e., if they accept a $1 offer, they get $1 offers more frequently, versus in the NC condition, accepting a $1 offer doesn’t change what they’re offered on the next trial.

Indeed, here we see that offers are higher on average in the IC condition vs. NC condition. There is no significant effect of group or interaction effect but the plots illustrate how the PTSD group’s lack of awareness of their ability to control the offers means that their offers do NOT increase in the IC condition, unlike the control groups (whose offers are greater in IC > NC).

Here is what the trajectory (showing the SIZE of the offers they received, over time) looks like:

`geom_smooth()` using method = 'loess' and formula 'y ~ x'
`geom_smooth()` using method = 'loess' and formula 'y ~ x'

`geom_smooth()` using method = 'loess' and formula 'y ~ x'
`geom_smooth()` using method = 'loess' and formula 'y ~ x'

Here is what the trajectory (showing the chance of ACCEPTING offers, over time) looks like:

`geom_smooth()` using method = 'loess' and formula 'y ~ x'
`geom_smooth()` using method = 'loess' and formula 'y ~ x'

`geom_smooth()` using method = 'loess' and formula 'y ~ x'
`geom_smooth()` using method = 'loess' and formula 'y ~ x'

`geom_smooth()` using method = 'loess' and formula 'y ~ x'
`geom_smooth()` using method = 'loess' and formula 'y ~ x'

So this makes me think we should look at the effect of TIME (at some point, not necessarily for the presentation - could be a future direction) since there seem to be some pretty obvious group differences that are obscured when we average all trials together.

Effects of income

Perceived control

Converting to factor: group
Warning: Missing values for following ID(s):
NWTC-028, NWTC-034, NWTC-042
Removing those cases from the analysis.
Contrasts set to contr.sum for the following variables: group, income

Univariate Type III Repeated-Measures ANOVA Assuming Sphericity

                 Sum Sq num Df Error SS den Df F value            Pr(>F)    
(Intercept)      136319      1    75032     47 85.3900 0.000000000003844 ***
group              3186      2    75032     47  0.9977          0.376386    
income             2156      3    75032     47  0.4502          0.718354    
condition          1921      1    10130     47  8.9120          0.004487 ** 
group:condition     670      2    10130     47  1.5544          0.221975    
income:condition   1566      3    10130     47  2.4218          0.077648 .  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
$emmeans
income = <=$80k:
 condition emmean    SE df lower.CL upper.CL
 IC          35.8  9.22 47    17.25     54.4
 NC          28.3  8.92 47    10.38     46.3

income = $130k+:
 condition emmean    SE df lower.CL upper.CL
 IC          43.7  7.16 47    29.31     58.1
 NC          31.6  6.92 47    17.66     45.5

income = $110-130k:
 condition emmean    SE df lower.CL upper.CL
 IC          48.9  9.70 47    29.34     68.4
 NC          28.0  9.38 47     9.15     46.9

income = $80-110k:
 condition emmean    SE df lower.CL upper.CL
 IC          44.7 10.06 47    24.51     65.0
 NC          48.5  9.73 47    28.88     68.0

Results are averaged over the levels of: group 
Confidence level used: 0.95 

$contrasts
income = <=$80k:
 contrast estimate   SE df t.ratio p.value
 IC - NC      7.48 6.26 47   1.196  0.2377

income = $130k+:
 contrast estimate   SE df t.ratio p.value
 IC - NC     12.12 4.86 47   2.495  0.0162

income = $110-130k:
 contrast estimate   SE df t.ratio p.value
 IC - NC     20.84 6.58 47   3.165  0.0027

income = $80-110k:
 contrast estimate   SE df t.ratio p.value
 IC - NC     -3.70 6.83 47  -0.542  0.5902

Results are averaged over the levels of: group 
P value adjustment: holm method for 1 tests 

Percent offers accepted

Converting to factor: group
Warning: Missing values for following ID(s):
NWTC-028, NWTC-034, NWTC-042
Removing those cases from the analysis.
Contrasts set to contr.sum for the following variables: group, income

Univariate Type III Repeated-Measures ANOVA Assuming Sphericity

                  Sum Sq num Df Error SS den Df  F value              Pr(>F)    
(Intercept)      16.6883      1   7.1677     47 109.4290 0.00000000000007333 ***
group             0.1115      2   7.1677     47   0.3656           0.6957257    
income            1.8448      3   7.1677     47   4.0323           0.0124164 *  
condition         0.3007      1   1.0951     47  12.9046           0.0007817 ***
group:condition   0.0225      2   1.0951     47   0.4838           0.6194837    
income:condition  0.0157      3   1.0951     47   0.2250           0.8785391    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Mean offer ($) accepted

Converting to factor: group
Warning: Missing values for following ID(s):
NWTC-008, NWTC-011, NWTC-012, NWTC-018, NWTC-019, NWTC-028, NWTC-033, NWTC-034, NWTC-042, NWTC-043, NWTC-045, NWTC-058, NWTC-060, NWTC-074, NWTC-084, NWTC-091
Removing those cases from the analysis.
Contrasts set to contr.sum for the following variables: group, income

Univariate Type III Repeated-Measures ANOVA Assuming Sphericity

                  Sum Sq num Df Error SS den Df  F value                Pr(>F)    
(Intercept)      2449.02      1  151.054     34 551.2385 < 0.00000000000000022 ***
group              28.00      2  151.054     34   3.1508             0.0555462 .  
income            134.41      3  151.054     34  10.0846             0.0000672 ***
condition          18.82      1   45.465     34  14.0776             0.0006551 ***
group:condition     0.74      2   45.465     34   0.2772             0.7596164    
income:condition   20.23      3   45.465     34   5.0423             0.0053581 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
$emmeans
income = <=$80k:
 condition emmean    SE df lower.CL upper.CL
 IC          5.27 0.700 34    3.848     6.69
 NC          6.41 0.375 34    5.648     7.17

income = $130k+:
 condition emmean    SE df lower.CL upper.CL
 IC          7.17 0.616 34    5.916     8.42
 NC          7.14 0.330 34    6.468     7.81

income = $110-130k:
 condition emmean    SE df lower.CL upper.CL
 IC          7.10 0.714 34    5.651     8.55
 NC          7.37 0.383 34    6.589     8.14

income = $80-110k:
 condition emmean    SE df lower.CL upper.CL
 IC          2.23 0.866 34    0.465     3.99
 NC          5.03 0.465 34    4.088     5.98

Results are averaged over the levels of: group 
Confidence level used: 0.95 

$contrasts
income = <=$80k:
 contrast estimate    SE df t.ratio p.value
 IC - NC   -1.1404 0.540 34  -2.111  0.0422

income = $130k+:
 contrast estimate    SE df t.ratio p.value
 IC - NC    0.0282 0.475 34   0.059  0.9531

income = $110-130k:
 contrast estimate    SE df t.ratio p.value
 IC - NC   -0.2649 0.551 34  -0.481  0.6338

income = $80-110k:
 contrast estimate    SE df t.ratio p.value
 IC - NC   -2.8062 0.669 34  -4.197  0.0002

Results are averaged over the levels of: group 
P value adjustment: holm method for 1 tests 

$emmeans
 group       emmean    SE df lower.CL upper.CL
 Low-exposed   6.74 0.466 34     5.80     7.69
 PTSD          4.95 0.527 34     3.88     6.02
 Resilient     6.20 0.359 34     5.47     6.93

Results are averaged over the levels of: income, condition 
Confidence level used: 0.95 

$contrasts
 contrast                  estimate    SE df t.ratio p.value
 (Low-exposed) - PTSD         1.792 0.719 34   2.490  0.0534
 (Low-exposed) - Resilient    0.545 0.576 34   0.946  0.3510
 PTSD - Resilient            -1.247 0.666 34  -1.873  0.1393

Results are averaged over the levels of: income, condition 
P value adjustment: holm method for 3 tests 

Mean offer ($) overall

Converting to factor: group
Warning: Missing values for following ID(s):
NWTC-028, NWTC-034, NWTC-042
Removing those cases from the analysis.
Contrasts set to contr.sum for the following variables: group, income

Univariate Type III Repeated-Measures ANOVA Assuming Sphericity

                  Sum Sq num Df Error SS den Df  F value               Pr(>F)    
(Intercept)      2625.40      1   124.52     47 990.9648 < 0.0000000000000002 ***
group               3.08      2   124.52     47   0.5819              0.56283    
income             32.11      3   124.52     47   4.0395              0.01232 *  
condition          14.18      1   124.67     47   5.3448              0.02521 *  
group:condition     2.46      2   124.67     47   0.4637              0.63180    
income:condition   32.78      3   124.67     47   4.1190              0.01128 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
$emmeans
income = <=$80k:
 condition emmean     SE df lower.CL upper.CL
 IC          5.29 0.6927 47     3.89     6.68
 NC          4.99 0.0424 47     4.91     5.08

income = $130k+:
 condition emmean     SE df lower.CL upper.CL
 IC          7.05 0.5377 47     5.97     8.13
 NC          4.93 0.0329 47     4.86     4.99

income = $110-130k:
 condition emmean     SE df lower.CL upper.CL
 IC          6.56 0.7288 47     5.09     8.03
 NC          5.03 0.0446 47     4.94     5.12

income = $80-110k:
 condition emmean     SE df lower.CL upper.CL
 IC          4.16 0.7557 47     2.64     5.68
 NC          4.95 0.0462 47     4.86     5.04

Results are averaged over the levels of: group 
Confidence level used: 0.95 

$contrasts
income = <=$80k:
 contrast estimate    SE df t.ratio p.value
 IC - NC     0.294 0.694 47   0.423  0.6743

income = $130k+:
 contrast estimate    SE df t.ratio p.value
 IC - NC     2.119 0.539 47   3.933  0.0003

income = $110-130k:
 contrast estimate    SE df t.ratio p.value
 IC - NC     1.532 0.730 47   2.098  0.0413

income = $80-110k:
 contrast estimate    SE df t.ratio p.value
 IC - NC    -0.788 0.757 47  -1.041  0.3032

Results are averaged over the levels of: group 
P value adjustment: holm method for 1 tests 

Income (low/high categorical variable)

Converting to factor: group
Warning: Missing values for following ID(s):
NWTC-028, NWTC-034, NWTC-042
Removing those cases from the analysis.
Contrasts set to contr.sum for the following variables: group, income_Hi

Univariate Type III Repeated-Measures ANOVA Assuming Sphericity

                    Sum Sq num Df Error SS den Df F value            Pr(>F)    
(Intercept)         138401      1    77150     49 87.9017 0.000000000001637 ***
group                 4290      2    77150     49  1.3623          0.265604    
income_Hi               38      1    77150     49  0.0240          0.877484    
condition             1920      1    10634     49  8.8483          0.004543 ** 
group:condition        359      2    10634     49  0.8278          0.443011    
income_Hi:condition   1061      1    10634     49  4.8903          0.031704 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
$emmeans
income_Hi = 0:
 condition emmean   SE df lower.CL upper.CL
 IC          39.9 6.62 49     26.6     53.2
 NC          37.5 6.51 49     24.4     50.6

income_Hi = 1:
 condition emmean   SE df lower.CL upper.CL
 IC          45.3 5.60 49     34.0     56.5
 NC          29.7 5.50 49     18.7     40.8

Results are averaged over the levels of: group 
Confidence level used: 0.95 

$contrasts
income_Hi = 0:
 contrast estimate   SE df t.ratio p.value
 IC - NC      2.42 4.57 49   0.528  0.5997

income_Hi = 1:
 contrast estimate   SE df t.ratio p.value
 IC - NC     15.54 3.86 49   4.023  0.0002

Results are averaged over the levels of: group 
P value adjustment: holm method for 1 tests 
Converting to factor: group
Warning: Missing values for following ID(s):
NWTC-028, NWTC-034, NWTC-042
Removing those cases from the analysis.
Contrasts set to contr.sum for the following variables: group, income_Hi

Univariate Type III Repeated-Measures ANOVA Assuming Sphericity

                     Sum Sq num Df Error SS den Df  F value              Pr(>F)    
(Intercept)         16.5515      1   7.4648     49 108.6458 0.00000000000004992 ***
group                0.0897      2   7.4648     49   0.2945           0.7461861    
income_Hi            1.5477      1   7.4648     49  10.1592           0.0025009 ** 
condition            0.3104      1   1.0985     49  13.8451           0.0005117 ***
group:condition      0.0302      2   1.0985     49   0.6739           0.5143793    
income_Hi:condition  0.0123      1   1.0985     49   0.5504           0.4617096    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
$emmeans
 income_Hi emmean     SE df lower.CL upper.CL
 0          0.542 0.0606 49    0.420    0.664
 1          0.291 0.0512 49    0.189    0.394

Results are averaged over the levels of: group, condition 
Confidence level used: 0.95 

$contrasts
 contrast estimate     SE df t.ratio p.value
 0 - 1       0.251 0.0786 49   3.187  0.0025

Results are averaged over the levels of: group, condition 
P value adjustment: holm method for 1 tests 
Converting to factor: group
Warning: Missing values for following ID(s):
NWTC-008, NWTC-011, NWTC-012, NWTC-018, NWTC-019, NWTC-028, NWTC-033, NWTC-034, NWTC-042, NWTC-043, NWTC-045, NWTC-058, NWTC-060, NWTC-074, NWTC-084, NWTC-091
Removing those cases from the analysis.
Contrasts set to contr.sum for the following variables: group, income_Hi

Univariate Type III Repeated-Measures ANOVA Assuming Sphericity

                     Sum Sq num Df Error SS den Df  F value                Pr(>F)    
(Intercept)         2680.62      1  185.433     36 520.4178 < 0.00000000000000022 ***
group                 13.56      2  185.433     36   1.3167              0.280625    
income_Hi            100.03      1  185.433     36  19.4202            0.00009052 ***
condition             15.56      1   50.871     36  11.0101              0.002081 ** 
group:condition        0.23      2   50.871     36   0.0800              0.923303    
income_Hi:condition   14.82      1   50.871     36  10.4890              0.002583 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
$emmeans
income_Hi = 0:
 condition emmean    SE df lower.CL upper.CL
 IC          4.05 0.572 36     2.89     5.20
 NC          5.86 0.298 36     5.26     6.47

income_Hi = 1:
 condition emmean    SE df lower.CL upper.CL
 IC          7.24 0.484 36     6.26     8.22
 NC          7.28 0.252 36     6.77     7.79

Results are averaged over the levels of: group 
Confidence level used: 0.95 

$contrasts
income_Hi = 0:
 contrast estimate    SE df t.ratio p.value
 IC - NC   -1.8174 0.423 36  -4.296  0.0001

income_Hi = 1:
 contrast estimate    SE df t.ratio p.value
 IC - NC   -0.0434 0.358 36  -0.121  0.9043

Results are averaged over the levels of: group 
P value adjustment: holm method for 1 tests 
Converting to factor: group
Warning: Missing values for following ID(s):
NWTC-028, NWTC-034, NWTC-042
Removing those cases from the analysis.
Contrasts set to contr.sum for the following variables: group, income_Hi

Univariate Type III Repeated-Measures ANOVA Assuming Sphericity

                     Sum Sq num Df Error SS den Df   F value                Pr(>F)    
(Intercept)         2783.35      1   128.59     49 1060.5720 < 0.00000000000000022 ***
group                  2.17      2   128.59     49    0.4134              0.663661    
income_Hi             28.03      1   128.59     49   10.6808              0.001982 ** 
condition             18.01      1   128.94     49    6.8454              0.011783 *  
group:condition        1.89      2   128.94     49    0.3596              0.699773    
income_Hi:condition   28.50      1   128.94     49   10.8308              0.001855 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
$emmeans
income_Hi = 0:
 condition emmean     SE df lower.CL upper.CL
 IC          4.77 0.5022 49     3.76     5.78
 NC          4.97 0.0313 49     4.91     5.04

income_Hi = 1:
 condition emmean     SE df lower.CL upper.CL
 IC          6.91 0.4242 49     6.06     7.76
 NC          4.96 0.0264 49     4.91     5.02

Results are averaged over the levels of: group 
Confidence level used: 0.95 

$contrasts
income_Hi = 0:
 contrast estimate    SE df t.ratio p.value
 IC - NC    -0.206 0.503 49  -0.409  0.6844

income_Hi = 1:
 contrast estimate    SE df t.ratio p.value
 IC - NC     1.945 0.425 49   4.572  <.0001

Results are averaged over the levels of: group 
P value adjustment: holm method for 1 tests 

Order effects (IC = run 1 or 2) (TBD)

Effects of file version (TBD)

Boxplots

Some people prefer these over bar charts because you can see the actual data points and distribution of the data…

Warning: Removed 19 rows containing non-finite values (stat_boxplot).
Warning: Removed 19 rows containing missing values (geom_point).
Warning: Removed 19 rows containing missing values (geom_point).

Demographics

Sex

n = 56 participants total, of which 9 (16%) are female.

There are 14 in the PTSD group (2 women), 16 Low-exposed (4 women), and 26 Resilient (3 women).

Age
  • PTSD: Mean (M) = 54.15, Standard Deviation (SD) = 6.20
  • Low-exposed: M = 51.47, SD = 6.21
  • PTSD: M = 54.35, SD (SD) = 4.53

Income

  • Income (annual) brackets: <$80k, $80-110k, $110-130k, $130k+
    • Original answer choices listed income in ~10k intervals, but not every income level was represented in every group so we condensed them into 4 categories instead of 16
  • Groups do not significantly differ on annual income (using the 4 categories above), based on Chi square test data (X-squared = 10.533, p-value >.10)

    Pearson's Chi-squared test with simulated p-value (based on 2000 replicates)

data:  income$group and income$income
X-squared = 10.533, df = NA, p-value = 0.1099

The table below lists income in each group. We see that 50% of the Low-exposed and 42% of the Resilient group have an annual household income of $130k or more, whereas only 14% of the PTSD group are in that category. Conversely, 43% of the PTSD group have an annual household income of $80k or less.

LS0tCnRpdGxlOiAiTldUQyBzdHVkeSB1bHRpbWF0dW0gZ2FtZSAod2lwKSIKb3V0cHV0OiAKICBodG1sX25vdGVib29rOgogICAgdG9jOiB5ZXMKLS0tCgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBGQUxTRSkKa25pdHI6Om9wdHNfa25pdCRzZXQocm9vdC5kaXIgPSAiL1VzZXJzL3NhcmVuc2VlbGV5L0RvY3VtZW50cy9VbHRpbWF0dW1HYW1lLyIpCm9wdGlvbnMoc2NpcGVuPTk5OSkKYGBgCgpgYGB7ciwgZWNobz1GQUxTRX0KI3NldHVwCnJtKGxpc3QgPSBscygpKQoKbGlicmFyeShkcGx5cikKbGlicmFyeSh0aWR5cikKbGlicmFyeShzdHJpbmdyKQpsaWJyYXJ5KGFmZXgpCmxpYnJhcnkoZW1tZWFucykKbGlicmFyeShnZ3Bsb3QyKQpsaWJyYXJ5KGdncHVicikKZmlsdGVyIDwtIGRwbHlyOjpmaWx0ZXIKc2VsZWN0IDwtIGRwbHlyOjpzZWxlY3QKYWZleF9vcHRpb25zKGVtbWVhbnNfbW9kZWwgPSAibXVsdGl2YXJpYXRlIikKCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgSU1QT1JUIERBVEEKCiMgbG9hZCBiZWhhdmlvcmFsIGRhdGEgKGxvbmcvdHJpYWwtYnktdHJpYWwgZm9ybWF0LCBldmVyeW9uZSBoYXMgNjAgdHJpYWxzIHRvdGFsIGFjcm9zcyAyIGNvbmRpdGlvbnMpCmRhdGE8LXJlYWQuY3N2KCJVR19sb25nX2RhdGEuY3N2Iiwgc3RyaXAud2hpdGU9RkFMU0UsIG5hLnN0cmluZ3M9IiIpCiMgbG9hZCBwYXJ0aWNpcGFudCBncm91cCB2YXJpYWJsZXMKcHB0IDwtcmVhZC5jc3YoIlVHX3BhcnRpY2lwYW50cy5jc3YiLCBzdHJpcC53aGl0ZT1GQUxTRSwgbmEuc3RyaW5ncz0iIikKCgojIChwZW9wbGUgd2l0aCBmaXJzdCB2ZXJzaW9uIG9mIFVHIHJhdGVkIHNldmVyYWwgdGltZXMgZHVyaW5nIGdhbWUgJiBhdCB0aGUgZW5kOwojIHBlb3BsZSB3aG8gZ290IHRoZSBvbmxpbmUvc2Vjb25kIHZlcnNpb24gb2YgVUcgcmF0ZSBvbmx5IGF0IHRoZSBlbmQpCiMgTldUQy0wMjIgcGFydGljaXBhbnQgZGlkIG5vdCB1bmRlcnN0YW5kIHRoZSB0YXNrIApncm91cCA8LSBwcHQgJT4lIHNlbGVjdChyZWNvcmRfaWQsZ3JvdXApICU+JSAgcmVuYW1lKGlkID0gcmVjb3JkX2lkKSAlPiUgZmlsdGVyKCFpZCA9PSAiTldUQy0wMjIiKSAKcHB0IDwtIHBwdCAlPiUgcmVuYW1lKGlkID0gcmVjb3JkX2lkKSAlPiUgc2VsZWN0KC1jKFgpKSAlPiUgZmlsdGVyKCFpZCA9PSAiTldUQy0wMjIiICYgIWlkID09ICJOV1RDLTA0NiIpIApkYXRhIDwtIGRhdGEgJT4lIGZpbHRlcighaWQgPT0gIk5XVEMtMDIyIiAmICFpZCA9PSAiTldUQy0wNDYiKSAlPiUgCiAgcmVuYW1lKHBlcmNlaXZlZF9jb250cm9sID0gdXNlLnBjKSAKCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgTE9ORwoKIyBtZXJnZSAyIGRhdGFzZXRzCmRhdGEgPC0gbGVmdF9qb2luKHBwdCxkYXRhLGJ5PSJpZCIpCmRhdGEgPC0gZGF0YSAlPiUgbXV0YXRlKGFjcm9zcyh3aGVyZShpcy5udW1lcmljKSwgcm91bmQsIDMpLAogICAgICAgICAgICAgICAgICAgICAgICB0cmlhbCA9IHJlcCgxOjMwLCBsZW5ndGgub3V0ID0gbnJvdyhkYXRhKSkpCgpwOTU8LXF1YW50aWxlKGRhdGEkUlQsIDAuOTUsbmEucm09VFJVRSkgIyB0b3AgNSUgUlRzCnAwNTwtcXVhbnRpbGUoZGF0YSRSVCwgMC4wNSxuYS5ybT1UUlVFKSAjIGJvdHRvbSA1JSBSVHMKIyBkcm9wIHRvcCBhbmQgYm90dG9tIDUlIG9mIFJUcyAKZXhjbCA8LSBkYXRhICU+JSBmaWx0ZXIoUlQgPj0gcDk1IHwgUlQgPD0gcDA1KSAKZGF0YSA8LSBkYXRhICU+JSBmaWx0ZXIoUlQgPCBwOTUgJiBSVCA+IHAwNSkgCgp0cmlhbHNfbiA8LSBkYXRhICU+JSBzZWxlY3QoaWQsY29uZGl0aW9uKSAlPiUgZ3JvdXBfYnkoaWQsY29uZGl0aW9uKSAlPiUgY291bnQoKSAlPiUgcmVuYW1lKG5fdHJpYWxzID0gbikKZGF0YSA8LSBsZWZ0X2pvaW4oZGF0YSx0cmlhbHNfbiwgYnk9YygiaWQiLCJjb25kaXRpb24iKSkKI3dyaXRlLmNzdihkYXRhLCJVR19kYXRhc2V0X2xvbmcuY3N2IikKCiMjIyBBZGQgQ0FQUyBzeCBhbmQgZGVtb2dyYXBoaWNzCiMgCiBjbGluIDwtIHJlYWRSRFMoIi9Vc2Vycy9zYXJlbnNlZWxleS9Ecm9wYm94L1Bvc3Rkb2Mvbnd0Y19zdHVkeS9kYXRhL19jbGVhbmVkL253dGNfZGF0YV9jbGVhbmVkXzA3LTI1LTIyLnJkcyIpCiBjbGluIDwtIGNsaW4gJT4lIHNlbGVjdChzdGFydHNfd2l0aCgidG90X21vcyIpfCBzdGFydHNfd2l0aCgiQ0FQUzVfUE1fdG90YWwiKSB8IHN0YXJ0c193aXRoKCJhZ2VfIikgfCBzdGFydHNfd2l0aCgiZ2VuZGVyXzFpc0YiKSB8IHN0YXJ0c193aXRoKCJpbmNvbWVMZXZlbCIpIHwgc3RhcnRzX3dpdGgoInJlY29yZF9pZCIpKSAlPiUgcmVuYW1lKGlkID0gcmVjb3JkX2lkKSAKIGRhdGFMb25nIDwtIGxlZnRfam9pbihkYXRhLGNsaW4sYnk9ImlkIikKd3JpdGUuY3N2KGRhdGFMb25nLCJVR19kYXRhc2V0X2xvbmdlcl9jbGluaWNhbC5jc3YiLCBuYSA9ICIuIikKCm9mZmVyX2FjYyA8LSBkYXRhTG9uZyAlPiUgZmlsdGVyKGNob2ljZT09MSkgJT4lIHNlbGVjdChpZCwgY29uZGl0aW9uLG9mZmVyKSAlPiUgCiAgZ3JvdXBfYnkoaWQsY29uZGl0aW9uKSAlPiUgc3VtbWFyaXplKG1lYW4ob2ZmZXIpKSAlPiUgcmVuYW1lKG1lYW5fb2ZmZXJfYWNjZXB0ID0gJ21lYW4ob2ZmZXIpJykKb2ZmZXJfYWxsIDwtIGRhdGFMb25nICU+JSBzZWxlY3QoaWQsIGNvbmRpdGlvbixvZmZlcikgJT4lIAogIGdyb3VwX2J5KGlkLGNvbmRpdGlvbikgJT4lIHN1bW1hcml6ZShtZWFuKG9mZmVyKSkgJT4lIHJlbmFtZShtZWFuX29mZmVyX2FsbCA9ICdtZWFuKG9mZmVyKScpCmNob2ljZV9hY2MgPC0gZGF0YUxvbmcgJT4lIGdyb3VwX2J5KGlkLCBjb25kaXRpb24pICU+JSBzdW1tYXJpemUoc3VtKGNob2ljZSkvbl90cmlhbHMpICU+JSAKICByZW5hbWUocGVyY2VudF9hY2NlcHQgPSAnc3VtKGNob2ljZSkvbl90cmlhbHMnKSAlPiUgZGlzdGluY3QoaWQsIGNvbmRpdGlvbiwgLmtlZXBfYWxsID0gVFJVRSkKYWRkIDwtIGxlZnRfam9pbihjaG9pY2VfYWNjLG9mZmVyX2FjYywgYnkgPSBjKCJpZCIsImNvbmRpdGlvbiIpKQphZGQgPC0gbGVmdF9qb2luKG9mZmVyX2FsbCxhZGQsIGJ5ID0gYygiaWQiLCJjb25kaXRpb24iKSkKCgpSVCA8LSBkYXRhTG9uZyAlPiUgCiAgZ3JvdXBfYnkoaWQsY29uZGl0aW9uKSAlPiUgc3VtbWFyaXplKG1lYW4oUlQpKSAlPiUgcmVuYW1lKG1lYW5fUlQgPSAnbWVhbihSVCknKQoKZGF0YUxvbmcgPC0gZGF0YUxvbmcgJT4lIHNlbGVjdCgtYyhSVCxwYyxvZmZlcixjaG9pY2UpKSAlPiUgZGlzdGluY3QoaWQsIGNvbmRpdGlvbiwgLmtlZXBfYWxsID0gVFJVRSkKZGF0YUxvbmcyIDwtIGxlZnRfam9pbihhZGQsZGF0YUxvbmcsYnkgPSBjKCJpZCIsImNvbmRpdGlvbiIpKQpkYXRhTG9uZzIgPC0gbGVmdF9qb2luKGRhdGFMb25nMixSVCxieSA9IGMoImlkIiwiY29uZGl0aW9uIikpCgp3cml0ZS5jc3YoZGF0YUxvbmcyLCJVR19kYXRhc2V0X2xvbmdfY2xpbmljYWwuY3N2IiwgbmEgPSAiICIpCmxvbmdfZGF0YSA8LSBkYXRhTG9uZzIKbG9uZ19kYXRhIDwtIGxvbmdfZGF0YSAlPiUgbXV0YXRlKHB0c2RfY3RsID0gaWZfZWxzZShncm91cD09IlBUU0QiLCAxLCAwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY29tZSA9IHJlY29kZV9mYWN0b3IoaW5jb21lTGV2ZWwsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiID0gIjw9JDMwayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgPSAiPD0kMzBrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICIzIiA9ICI8PSQzMGsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIjQiID0gIiQzMC01MGsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIjUiID0gIiQzMC01MGsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIjYiID0gIiQ1MC04MGsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIjciID0gIiQ1MC04MGsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIjgiID0gIiQ1MC04MGsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIjkiID0gIiQ4MC0xMDBrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxMCIgPSAiJDgwLTEwMGsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIjExIiA9ICIkMTAwLTEzMGsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEyIiA9ICIkMTAwLTEzMGsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEzIiA9ICIkMTAwLTEzMGsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIjE0IiA9ICIkMTMwaysiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIjE1IiA9ICIkMTMwaysiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNvbWUgPSByZWNvZGVfZmFjdG9yKGluY29tZUxldmVsLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiA9ICI8PSQ4MGsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiID0gIjw9JDgwayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMyIgPSAiPD0kODBrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICI0IiA9ICI8PSQ4MGsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIjUiID0gIjw9JDgwayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNiIgPSAiPD0kODBrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICI3IiA9ICI8PSQ4MGsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIjgiID0gIjw9JDgwayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiOSIgPSAiJDgwLTExMGsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEwIiA9ICIkODAtMTEwayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTEiID0gIiQ4MC0xMTBrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxMiIgPSAiJDExMC0xMzBrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxMyIgPSAiJDExMC0xMzBrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxNCIgPSAiJDEzMGsrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxNSIgPSAiJDEzMGsrIikpCmBgYAoKCgojIyBIMTogUGVyY2VpdmVkIHNvY2lhbCBjb250cm9sbGFiaWxpdHkgd2lsbCBiZSBsb3dlciBpbiB0aGUgUFRTRCBncm91cCB0aGFuIHRoZSBjb250cm9sIGdyb3VwIChMRSBhbmQgcmVzaWxpZW50IGdyb3VwcykKIyMgSDI6CVBlcmNlaXZlZCBzb2NpYWwgY29udHJvbGxhYmlsaXR5IHdpbGwgYmUgZGlmZmVyZW50IGluIHRoZSByZXNpbGllbnQgZ3JvdXAgdGhhbiBpbiB0aGUgTEUgZ3JvdXAuCgpUaGVyZSBpcyBhIHNpZ25pZmljYW50IG1haW4gZWZmZWN0IG9mIGNvbmRpdGlvbiwgd2hlcmUgcGVyY2VpdmVkIGNvbnRyb2wgaXMgaGlnaGVyIGluIHRoZSBJQyBjb25kaXRpb24gdGhhbiB0aGUgTkMgY29uZGl0aW9uIChhdmVyYWdlZCBhY3Jvc3MgdGhlIDMgZ3JvdXBzKS4gTm8gc2lnbmlmaWNhbnQgbWFpbiBlZmZlY3Qgb2YgZ3JvdXAgb3IgZ3JvdXAgeCBjb25kaXRpb24gaW50ZXJhY3Rpb24sIGJ1dCBiYXNlZCBvbiB0aGUgcGxvdHMsIHRoZXJlJ3MgYSB0ZW5kZW5jeSBmb3IgcGVvcGxlIGluIHRoZSBQVFNEIGdyb3VwIHRvIHBlcmNlaXZlIHNvbWV3aGF0IGxvd2VyIHNvY2lhbCBjb250cm9sIGluIGJvdGggY29uZGl0aW9ucywgYW5kIHBlb3BsZSBpbiB0aGUgcmVzaWxpZW50IGdyb3VwIHRvIHBlcmNlaXZlIHNvbWV3aGF0IGhpZ2hlciBzb2NpYWwgY29udHJvbC4KCgpgYGB7cn0KcTEgPC0gYW92X2V6KGlkID0gImlkIiwgZHYgPSAicGVyY2VpdmVkX2NvbnRyb2wiLCBsb25nX2RhdGEsIHdpdGhpbiA9ICJjb25kaXRpb24iLCBiZXR3ZWVuPSJncm91cCIpCnN1bW1hcnkocTEpCmVtbWVhbnMocTEsIH5jb25kaXRpb24sIGNvbnRyID0gInBhaXJ3aXNlIiwgYWRqdXN0PSJob2xtIikKZW1tZWFucyhxMSwgfmNvbmRpdGlvbnxncm91cCwgY29udHIgPSAicGFpcndpc2UiLCBhZGp1c3Q9ImhvbG0iKQoKcDEgPC0gZ2dwbG90KGxvbmdfZGF0YSwgYWVzKHk9cGVyY2VpdmVkX2NvbnRyb2wsIHg9Y29uZGl0aW9uLCBmaWxsPWNvbmRpdGlvbikpICsgCiAgICBzdGF0X3N1bW1hcnkoZ2VvbSA9ICJiYXIiLCBmdW4ueSA9IG1lYW4sIHBvc2l0aW9uID0gImRvZGdlIiwgY29sb3I9ImJsYWNrIikgKwogIHN0YXRfc3VtbWFyeShnZW9tID0gImVycm9yYmFyIiwgZnVuLmRhdGEgPSBtZWFuX3NlLCBwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSguOSksIHdpZHRoID0gMC4yNSwgY29sb3I9ImJsYWNrIikgKwogICB4bGFiKCJjb25kaXRpb24iKSArIHlsYWIoInBlcmNlaXZlZCBjb250cm9sIikgKyB0aGVtZV9wdWJyKGJhc2Vfc2l6ZSA9IDE0KSArIGZhY2V0X3dyYXAofmdyb3VwKQpwMQpnZ3NhdmUoIn4vRG9jdW1lbnRzL1VsdGltYXR1bUdhbWUvcGVyY2VpdmVkQ29udHJvbF9iYXJHcm91cC5wbmciLCBwbG90ID0gcDEsIGRwaT02MDAsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNikKCnAxIDwtIGdncGxvdChsb25nX2RhdGEsIGFlcyh5PXBlcmNlaXZlZF9jb250cm9sLCB4PWdyb3VwLCBmaWxsPWdyb3VwKSkgKyAKICAgIHN0YXRfc3VtbWFyeShnZW9tID0gImJhciIsIGZ1bi55ID0gbWVhbiwgcG9zaXRpb24gPSAiZG9kZ2UiLCBjb2xvcj0iYmxhY2siKSArCiAgc3RhdF9zdW1tYXJ5KGdlb20gPSAiZXJyb3JiYXIiLCBmdW4uZGF0YSA9IG1lYW5fc2UsIHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKC45KSwgd2lkdGggPSAwLjI1LCBjb2xvcj0iYmxhY2siKSArCiAgIHhsYWIoImdyb3VwIikgKyB5bGFiKCJwZXJjZWl2ZWQgY29udHJvbCIpICsgdGhlbWVfcHVicihiYXNlX3NpemUgPSAxNCkgKyBmYWNldF93cmFwKH5jb25kaXRpb24pCnAxCmdnc2F2ZSgifi9Eb2N1bWVudHMvVWx0aW1hdHVtR2FtZS9wZXJjZWl2ZWRDb250cm9sX2JhckNvbmRpdGlvbi5wbmciLCBwbG90ID0gcDEsIGRwaT02MDAsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNikKCnAxIDwtIGdncGxvdChsb25nX2RhdGEsIGFlcyh5PXBlcmNlaXZlZF9jb250cm9sLCB4PWNvbmRpdGlvbiwgZmlsbD1jb25kaXRpb24pKSArIAogICAgc3RhdF9zdW1tYXJ5KGdlb20gPSAiYmFyIiwgZnVuLnkgPSBtZWFuLCBwb3NpdGlvbiA9ICJkb2RnZSIsIGNvbG9yPSJibGFjayIpICsKICBzdGF0X3N1bW1hcnkoZ2VvbSA9ICJlcnJvcmJhciIsIGZ1bi5kYXRhID0gbWVhbl9zZSwgcG9zaXRpb249cG9zaXRpb25fZG9kZ2UoLjkpLCB3aWR0aCA9IDAuMjUsIGNvbG9yPSJibGFjayIpICsKICAgeGxhYigiY29uZGl0aW9uIikgKyB5bGFiKCJwZXJjZWl2ZWQgY29udHJvbCIpICsgdGhlbWVfcHVicihiYXNlX3NpemUgPSAxNCkgCnAxCmdnc2F2ZSgifi9Eb2N1bWVudHMvVWx0aW1hdHVtR2FtZS9wZXJjZWl2ZWRDb250cm9sX2Jhci5wbmciLCBwbG90ID0gcDEsIGRwaT02MDAsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNikKCmBgYAoKCiMjIEgzOiBQZXJjZW50IG9mIG9mZmVycyBhY2NlcHRlZCB3aWxsIGJlIGhpZ2hlciBpbiB0aGUgUFRTRCBncm91cCB0aGFuIHRoZSBjb250cm9sIGdyb3VwIChMRSBhbmQgcmVzaWxpZW50IGdyb3VwcykKClRoZXJlIGlzIGEgc2lnbmlmaWNhbnQgbWFpbiBlZmZlY3Qgb2YgY29uZGl0aW9uLCB3aGVyZSBtb3JlIG9mZmVycyBhcmUgYWNjZXB0ZWQgaW4gdGhlIElDIGNvbmRpdGlvbiB0aGFuIHRoZSBOQyBjb25kaXRpb24gKGF2ZXJhZ2VkIGFjcm9zcyB0aGUgMyBncm91cHMpLiBObyBzaWduaWZpY2FudCBtYWluIGVmZmVjdCBvZiBncm91cCBvciBncm91cCB4IGNvbmRpdGlvbiBpbnRlcmFjdGlvbiwgYnV0IGJhc2VkIG9uIHRoZSBwbG90cywgdGhlcmUncyBhIHRlbmRlbmN5IGZvciBwZW9wbGUgaW4gdGhlIFBUU0QgZ3JvdXAgdG8gYWNjZXB0IG1vcmUgb2ZmZXJzIChjb3VsZCBpbmRpY2F0ZSBhIGxlc3Mgcmlza3kgc3RyYXRlZ3kgLSBpLmUuLCBiZXR0ZXIgdG8gd2luIGEgc21hbGwgYW1vdW50IHRoYW4gZ2FtYmxlIG9uIGEgYmlnIGFtb3VudCBhbmQgZ2V0IG5vdGhpbmcpIGFuZCBwZW9wbGUgaW4gdGhlIGxvdyBleHBvc2VkIGdyb3VwIHRvIGJlIG1vcmUgY2hvb3N5IGFib3V0IHdoaWNoIG9mZmVycyB0aGV5IGFjY2VwdC4KCkkgd29uZGVyIGlmIHBhcnQgb2YgdGhlIHJlYXNvbiB3ZSBzZWUgbW9yZSBvZmZlcnMgb24gYXZlcmFnZSBiZWluZyBhY2NlcHRlZCBpbiB0aGUgSUMgY29uZGl0aW9uIGlzIGJlY2F1c2UgZm9yIHBlb3BsZSB3aG8gZWZmZWN0aXZlbHkgcGlja2VkIHVwIG9uIHRoZWlyIGFiaWxpdHkgdG8gY29udHJvbCB0aGVpciAicGFydG5lcidzIiBvZmZlcnMsIHRoZWlyIG9mZmVycyBnb3QgYmV0dGVyIHNvIHRoZXkgYWNjZXB0ZWQgbW9yZSBvZiB0aGVtLi4uPyBOb3Qgc3VyZSBidXQgSSBmZWVsIGxpa2UgdGhlIGFjdHVhbCBvZmZlcnMgdGhhdCBwZW9wbGUgYXJlIHJlY2VpdmluZyBpbiB0aGUgSUMgY29uZGl0aW9uIG1pZ2h0IG1ha2UgYSBkaWZmZXJlbmNlIGhlcmUgc29tZWhvdy4uLgoKCmBgYHtyfQpxMSA8LSBhb3ZfZXooaWQgPSAiaWQiLCBkdiA9ICJwZXJjZW50X2FjY2VwdCIsIGxvbmdfZGF0YSwgd2l0aGluID0gImNvbmRpdGlvbiIsIGJldHdlZW49Imdyb3VwIikKc3VtbWFyeShxMSkKZW1tZWFucyhxMSwgfmNvbmRpdGlvbiwgY29udHIgPSAicGFpcndpc2UiLCBhZGp1c3Q9ImhvbG0iKQplbW1lYW5zKHExLCB+Y29uZGl0aW9ufGdyb3VwLCBjb250ciA9ICJwYWlyd2lzZSIsIGFkanVzdD0iaG9sbSIpCgoKI2VtbWVhbnMocTEsIH5jb25kaXRpb24sIGNvbnRyID0gInBhaXJ3aXNlIiwgYWRqdXN0PSJob2xtIikKCnAxIDwtIGdncGxvdChsb25nX2RhdGEsIGFlcyh5PXBlcmNlbnRfYWNjZXB0LCB4PWNvbmRpdGlvbiwgZmlsbD1jb25kaXRpb24pKSArIAogICAgc3RhdF9zdW1tYXJ5KGdlb20gPSAiYmFyIiwgZnVuLnkgPSBtZWFuLCBwb3NpdGlvbiA9ICJkb2RnZSIsIGNvbG9yPSJibGFjayIpICsKICBzdGF0X3N1bW1hcnkoZ2VvbSA9ICJlcnJvcmJhciIsIGZ1bi5kYXRhID0gbWVhbl9zZSwgcG9zaXRpb249cG9zaXRpb25fZG9kZ2UoLjkpLCB3aWR0aCA9IDAuMjUsIGNvbG9yPSJibGFjayIpICsKICAgeGxhYigiY29uZGl0aW9uIikgKyB5bGFiKCJwZXJjZW50IGFjY2VwdCIpICsgdGhlbWVfcHVicihiYXNlX3NpemUgPSAxNCkgKyBmYWNldF93cmFwKH5ncm91cCkKcDEKZ2dzYXZlKCJ+L0RvY3VtZW50cy9VbHRpbWF0dW1HYW1lL3BlcmNlbnRBY2NlcHRfYmFyR3JvdXAucG5nIiwgcGxvdCA9IHAxLCBkcGk9NjAwLCB3aWR0aCA9IDgsIGhlaWdodCA9IDYpCgoKcDEgPC0gZ2dwbG90KGxvbmdfZGF0YSwgYWVzKHk9cGVyY2VudF9hY2NlcHQsIHg9Z3JvdXAsIGZpbGw9Z3JvdXApKSArIAogICAgc3RhdF9zdW1tYXJ5KGdlb20gPSAiYmFyIiwgZnVuLnkgPSBtZWFuLCBwb3NpdGlvbiA9ICJkb2RnZSIsIGNvbG9yPSJibGFjayIpICsKICBzdGF0X3N1bW1hcnkoZ2VvbSA9ICJlcnJvcmJhciIsIGZ1bi5kYXRhID0gbWVhbl9zZSwgcG9zaXRpb249cG9zaXRpb25fZG9kZ2UoLjkpLCB3aWR0aCA9IDAuMjUsIGNvbG9yPSJibGFjayIpICsKICAgeGxhYigiZ3JvdXAiKSArIHlsYWIoInBlcmNlbnQgYWNjZXB0IikgKyB0aGVtZV9wdWJyKGJhc2Vfc2l6ZSA9IDE0KSArIGZhY2V0X3dyYXAofmNvbmRpdGlvbikKcDEKZ2dzYXZlKCJ+L0RvY3VtZW50cy9VbHRpbWF0dW1HYW1lL3BlcmNlbnRBY2NlcHRfYmFyQ29uZGl0aW9uLnBuZyIsIHBsb3QgPSBwMSwgZHBpPTYwMCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2KQoKcDEgPC0gZ2dwbG90KGxvbmdfZGF0YSwgYWVzKHk9cGVyY2VudF9hY2NlcHQsIHg9Y29uZGl0aW9uLCBmaWxsPWNvbmRpdGlvbikpICsgCiAgICBzdGF0X3N1bW1hcnkoZ2VvbSA9ICJiYXIiLCBmdW4ueSA9IG1lYW4sIHBvc2l0aW9uID0gImRvZGdlIiwgY29sb3I9ImJsYWNrIikgKwogIHN0YXRfc3VtbWFyeShnZW9tID0gImVycm9yYmFyIiwgZnVuLmRhdGEgPSBtZWFuX3NlLCBwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSguOSksIHdpZHRoID0gMC4yNSwgY29sb3I9ImJsYWNrIikgKwogICB4bGFiKCJjb25kaXRpb24iKSArIHlsYWIoInBlcmNlbnQgYWNjZXB0ZWQgb2ZmZXJzIikgKyB0aGVtZV9wdWJyKGJhc2Vfc2l6ZSA9IDE0KSAKcDEKZ2dzYXZlKCJ+L0RvY3VtZW50cy9VbHRpbWF0dW1HYW1lL3BlcmNlbnRBY2NlcHRfYmFyLnBuZyIsIHBsb3QgPSBwMSwgZHBpPTYwMCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2KQoKYGBgCgojIyBINDogTWVhbiBvZmZlciBhY2NlcHRlZCB3aWxsIGJlIGxvd2VyIGluIHRoZSBQVFNEIGdyb3VwIHRoYW4gdGhlIGNvbnRyb2wgZ3JvdXAgKExFIGFuZCByZXNpbGllbnQgZ3JvdXBzKQoKVGhlcmUgaXMgYSBzaWduaWZpY2FudCBtYWluIGVmZmVjdCBvZiBjb25kaXRpb24sIHdoZXJlIG1lYW4gb2ZmZXIgYW1vdW50IGFjY2VwdGVkIGlzIGxvd2VyIGluIHRoZSBJQyBjb25kaXRpb24gdGhhbiB0aGUgTkMgY29uZGl0aW9uIChhdmVyYWdlZCBhY3Jvc3MgdGhlIDMgZ3JvdXBzKS4uLnNlZSB0aGUgbmV4dCBzZWN0aW9uIGZvciB3aGF0IEkgc3VzcGVjdCBtaWdodCBleHBsYWluIHRoaXMgdW5leHBlY3RlZCByZXN1bHQuCgpObyBzaWduaWZpY2FudCBtYWluIGVmZmVjdCBvZiBncm91cCBvciBncm91cCB4IGNvbmRpdGlvbiBpbnRlcmFjdGlvbiwgYnV0IGJhc2VkIG9uIHRoZSBwbG90cywgdGhlcmUncyBhIHRlbmRlbmN5IGZvciBwZW9wbGUgaW4gdGhlIFBUU0QgZ3JvdXAgdG8gYWNjZXB0IGxvd2VyIG9mZmVycyBpbiBnZW5lcmFsLgoKYGBge3J9CnExIDwtIGFvdl9leihpZCA9ICJpZCIsIGR2ID0gIm1lYW5fb2ZmZXJfYWNjZXB0IiwgbG9uZ19kYXRhLCB3aXRoaW4gPSAiY29uZGl0aW9uIiwgYmV0d2Vlbj0iZ3JvdXAiKQpzdW1tYXJ5KHExKQoKCmVtbWVhbnMocTEsIH5jb25kaXRpb24sIGNvbnRyID0gInBhaXJ3aXNlIiwgYWRqdXN0PSJob2xtIikKCmVtbWVhbnMocTEsIH5jb25kaXRpb258Z3JvdXAsIGNvbnRyID0gInBhaXJ3aXNlIiwgYWRqdXN0PSJob2xtIikKCgpwMSA8LSBnZ3Bsb3QobG9uZ19kYXRhLCBhZXMoeT1tZWFuX29mZmVyX2FjY2VwdCwgeD1jb25kaXRpb24sIGZpbGw9Y29uZGl0aW9uKSkgKyAKICAgIHN0YXRfc3VtbWFyeShnZW9tID0gImJhciIsIGZ1bi55ID0gbWVhbiwgcG9zaXRpb24gPSAiZG9kZ2UiLCBjb2xvcj0iYmxhY2siKSArCiAgc3RhdF9zdW1tYXJ5KGdlb20gPSAiZXJyb3JiYXIiLCBmdW4uZGF0YSA9IG1lYW5fc2UsIHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKC45KSwgd2lkdGggPSAwLjI1LCBjb2xvcj0iYmxhY2siKSArCiAgIHhsYWIoImNvbmRpdGlvbiIpICsgeWxhYigibWVhbiBvZmZlciAkIGFjY2VwdGVkIikgKyB0aGVtZV9wdWJyKGJhc2Vfc2l6ZSA9IDE0KSArIGZhY2V0X3dyYXAofmdyb3VwKQpwMQpnZ3NhdmUoIn4vRG9jdW1lbnRzL1VsdGltYXR1bUdhbWUvbWVhbkFjY2VwdF9iYXJHcm91cC5wbmciLCBwbG90ID0gcDEsIGRwaT02MDAsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNikKCgpwMSA8LSBnZ3Bsb3QobG9uZ19kYXRhLCBhZXMoeT1tZWFuX29mZmVyX2FjY2VwdCwgeD1ncm91cCwgZmlsbD1ncm91cCkpICsgCiAgICBzdGF0X3N1bW1hcnkoZ2VvbSA9ICJiYXIiLCBmdW4ueSA9IG1lYW4sIHBvc2l0aW9uID0gImRvZGdlIiwgY29sb3I9ImJsYWNrIikgKwogIHN0YXRfc3VtbWFyeShnZW9tID0gImVycm9yYmFyIiwgZnVuLmRhdGEgPSBtZWFuX3NlLCBwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSguOSksIHdpZHRoID0gMC4yNSwgY29sb3I9ImJsYWNrIikgKwogICB4bGFiKCJncm91cCIpICsgeWxhYigibWVhbiBvZmZlciAkIGFjY2VwdGVkIikgKyB0aGVtZV9wdWJyKGJhc2Vfc2l6ZSA9IDE0KSArIGZhY2V0X3dyYXAofmNvbmRpdGlvbikKcDEKZ2dzYXZlKCJ+L0RvY3VtZW50cy9VbHRpbWF0dW1HYW1lL21lYW5BY2NlcHRfYmFyQ29uZGl0aW9uLnBuZyIsIHBsb3QgPSBwMSwgZHBpPTYwMCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2KQoKcDEgPC0gZ2dwbG90KGxvbmdfZGF0YSwgYWVzKHk9bWVhbl9vZmZlcl9hY2NlcHQsIHg9Y29uZGl0aW9uLCBmaWxsPWNvbmRpdGlvbikpICsgCiAgICBzdGF0X3N1bW1hcnkoZ2VvbSA9ICJiYXIiLCBmdW4ueSA9IG1lYW4sIHBvc2l0aW9uID0gImRvZGdlIiwgY29sb3I9ImJsYWNrIikgKwogIHN0YXRfc3VtbWFyeShnZW9tID0gImVycm9yYmFyIiwgZnVuLmRhdGEgPSBtZWFuX3NlLCBwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSguOSksIHdpZHRoID0gMC4yNSwgY29sb3I9ImJsYWNrIikgKwogICB4bGFiKCJjb25kaXRpb24iKSArIHlsYWIoIm1lYW4gb2ZmZXIgJCBhY2NlcHRlZCIpICsgdGhlbWVfcHVicihiYXNlX3NpemUgPSAxNCkgCnAxCmdnc2F2ZSgifi9Eb2N1bWVudHMvVWx0aW1hdHVtR2FtZS9tZWFuQWNjZXB0X2Jhci5wbmciLCBwbG90ID0gcDEsIGRwaT02MDAsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNikKCgpgYGAKCiMjIyBINGE6IE1lYW4gb2ZmZXIgb3ZlcmFsbCAoYm90aCBhY2NlcHRlZCAmIHJlamVjdGVkKSB3aWxsIGJlIGxvd2VyIGluIHRoZSBQVFNEIGdyb3VwIHRoYW4gdGhlIGNvbnRyb2wgZ3JvdXAgKExFIGFuZCByZXNpbGllbnQgZ3JvdXBzKSAKCmBgYHtyfQpxMSA8LSBhb3ZfZXooaWQgPSAiaWQiLCBkdiA9ICJtZWFuX29mZmVyX2FsbCIsIGxvbmdfZGF0YSwgd2l0aGluID0gImNvbmRpdGlvbiIsIGJldHdlZW49Imdyb3VwIikKc3VtbWFyeShxMSkKCmRhdGFfaWMgPC0gbG9uZ19kYXRhICU+JSBmaWx0ZXIoY29uZGl0aW9uPT0iSUMiKQoKZW1tZWFucyhxMSwgfmNvbmRpdGlvbiwgY29udHIgPSAicGFpcndpc2UiLCBhZGp1c3Q9ImhvbG0iKQoKZW1tZWFucyhxMSwgfmNvbmRpdGlvbnxncm91cCwgY29udHIgPSAicGFpcndpc2UiLCBhZGp1c3Q9ImhvbG0iKQoKcDEgPC0gZ2dwbG90KGxvbmdfZGF0YSwgYWVzKHk9bWVhbl9vZmZlcl9hbGwsIHg9Y29uZGl0aW9uLCBmaWxsPWNvbmRpdGlvbikpICsgCiAgICBzdGF0X3N1bW1hcnkoZ2VvbSA9ICJiYXIiLCBmdW4ueSA9IG1lYW4sIHBvc2l0aW9uID0gImRvZGdlIiwgY29sb3I9ImJsYWNrIikgKwogIHN0YXRfc3VtbWFyeShnZW9tID0gImVycm9yYmFyIiwgZnVuLmRhdGEgPSBtZWFuX3NlLCBwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSguOSksIHdpZHRoID0gMC4yNSwgY29sb3I9ImJsYWNrIikgKwogICB4bGFiKCJjb25kaXRpb24iKSArIHlsYWIoIm1lYW4gb2ZmZXIgLSBhbGwgdHJpYWxzIikgKyB0aGVtZV9wdWJyKGJhc2Vfc2l6ZSA9IDE0KSArIGZhY2V0X3dyYXAofmdyb3VwKQpwMQpnZ3NhdmUoIn4vRG9jdW1lbnRzL1VsdGltYXR1bUdhbWUvbWVhbk9mZmVyQWxsX2Jhckdyb3VwLnBuZyIsIHBsb3QgPSBwMSwgZHBpPTYwMCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2KQoKCnAxIDwtIGdncGxvdChsb25nX2RhdGEsIGFlcyh5PW1lYW5fb2ZmZXJfYWxsLCB4PWdyb3VwLCBmaWxsPWdyb3VwKSkgKyAKICAgIHN0YXRfc3VtbWFyeShnZW9tID0gImJhciIsIGZ1bi55ID0gbWVhbiwgcG9zaXRpb24gPSAiZG9kZ2UiLCBjb2xvcj0iYmxhY2siKSArCiAgc3RhdF9zdW1tYXJ5KGdlb20gPSAiZXJyb3JiYXIiLCBmdW4uZGF0YSA9IG1lYW5fc2UsIHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKC45KSwgd2lkdGggPSAwLjI1LCBjb2xvcj0iYmxhY2siKSArCiAgIHhsYWIoImdyb3VwIikgKyB5bGFiKCJtZWFuIG9mZmVyIC0gYWxsIHRyaWFscyIpICsgdGhlbWVfcHVicihiYXNlX3NpemUgPSAxNCkgKyBmYWNldF93cmFwKH5jb25kaXRpb24pCnAxCmdnc2F2ZSgifi9Eb2N1bWVudHMvVWx0aW1hdHVtR2FtZS9tZWFuT2ZmZXJBbGxfYmFyQ29uZGl0aW9uLnBuZyIsIHBsb3QgPSBwMSwgZHBpPTYwMCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2KQoKcDEgPC0gZ2dwbG90KGxvbmdfZGF0YSwgYWVzKHk9bWVhbl9vZmZlcl9hbGwsIHg9Y29uZGl0aW9uLCBmaWxsPWNvbmRpdGlvbikpICsgCiAgICBzdGF0X3N1bW1hcnkoZ2VvbSA9ICJiYXIiLCBmdW4ueSA9IG1lYW4sIHBvc2l0aW9uID0gImRvZGdlIiwgY29sb3I9ImJsYWNrIikgKwogIHN0YXRfc3VtbWFyeShnZW9tID0gImVycm9yYmFyIiwgZnVuLmRhdGEgPSBtZWFuX3NlLCBwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSguOSksIHdpZHRoID0gMC4yNSwgY29sb3I9ImJsYWNrIikgKwogICB4bGFiKCJjb25kaXRpb24iKSArIHlsYWIoIm1lYW4gb2ZmZXIgLSBhbGwgdHJpYWxzIikgKyB0aGVtZV9wdWJyKGJhc2Vfc2l6ZSA9IDE0KSAKcDEKZ2dzYXZlKCJ+L0RvY3VtZW50cy9VbHRpbWF0dW1HYW1lL21lYW5PZmZlckFsbF9iYXIucG5nIiwgcGxvdCA9IHAxLCBkcGk9NjAwLCB3aWR0aCA9IDgsIGhlaWdodCA9IDYpCgoKYGBgCgojIyMjIEVmZmVjdCBvZiB0aW1lIChvdmVyIHRoZSAzMCB0cmlhbHMpCgpJIHdhbnRlZCB0byBsb29rIGF0IHRoZSBvZmZlciBzaXplIGFjcm9zcyBhbGwgdHJpYWxzLCBzaW5jZSBJIHRob3VnaHQgdGhlIHdlaXJkLXNlZW1pbmcgZWZmZWN0IG9mIElDIGJlaW5nIGxvd2VyIHRoYW4gTkMgKGFib3ZlKSBtaWdodCBiZSBkcml2ZW4gYnkgdGhlIGZhY3QgdGhhdCBwZW9wbGUgd2hvIGRvbid0IHBpY2sgdXAgb24gdGhlaXIgY29udHJvbCBvdmVyIHRoZSBvZmZlcnMga2VlcCB1c2luZyB0aGUgc3RyYXRlZ3kgb2YgInNvbWV0aGluZyBpcyBiZXR0ZXIgdGhhbiBub3RoaW5nLCBsZXQncyBhY2NlcHQgbW9yZSBvZnRlbiIsIHNvIHRoZWlyIG1lYW4gb2ZmZXIgdGh1cyBrZWVwcyBnb2luZyBkb3duLi4uaS5lLiwgaWYgdGhleSBhY2NlcHQgYSBgJDFgIG9mZmVyLCB0aGV5IGdldCBgJDFgIG9mZmVycyBtb3JlIGZyZXF1ZW50bHksIHZlcnN1cyBpbiB0aGUgTkMgY29uZGl0aW9uLCBhY2NlcHRpbmcgYSBgJDFgIG9mZmVyIGRvZXNuJ3QgY2hhbmdlIHdoYXQgdGhleSdyZSBvZmZlcmVkIG9uIHRoZSBuZXh0IHRyaWFsLgoKSW5kZWVkLCBoZXJlIHdlIHNlZSB0aGF0IG9mZmVycyBhcmUgaGlnaGVyIG9uIGF2ZXJhZ2UgaW4gdGhlIElDIGNvbmRpdGlvbiB2cy4gTkMgY29uZGl0aW9uLiBUaGVyZSBpcyBubyBzaWduaWZpY2FudCBlZmZlY3Qgb2YgZ3JvdXAgb3IgaW50ZXJhY3Rpb24gZWZmZWN0IGJ1dCB0aGUgcGxvdHMgaWxsdXN0cmF0ZSBob3cgdGhlIFBUU0QgZ3JvdXAncyBsYWNrIG9mIGF3YXJlbmVzcyBvZiB0aGVpciBhYmlsaXR5IHRvIGNvbnRyb2wgdGhlIG9mZmVycyBtZWFucyB0aGF0IHRoZWlyIG9mZmVycyBkbyBOT1QgaW5jcmVhc2UgaW4gdGhlIElDIGNvbmRpdGlvbiwgdW5saWtlIHRoZSBjb250cm9sIGdyb3VwcyAod2hvc2Ugb2ZmZXJzIGFyZSBncmVhdGVyIGluIElDID4gTkMpLiAKCkhlcmUgaXMgd2hhdCB0aGUgdHJhamVjdG9yeSAoc2hvd2luZyB0aGUgU0laRSBvZiB0aGUgb2ZmZXJzIHRoZXkgcmVjZWl2ZWQsIG92ZXIgdGltZSkgbG9va3MgbGlrZToKCmBgYHtyfQpwMSA8LSBnZ3Bsb3QoZGF0YSwgYWVzKGNvbG9yPWNvbmRpdGlvbiwgeT1vZmZlciwgeCA9dHJpYWwsIGdyb3VwPWNvbmRpdGlvbikpICsKICAgICAgICBnZW9tX3Ntb290aChzcGFuID0gMC41KSArIGZhY2V0X3dyYXAofmdyb3VwKSArIHRoZW1lX3B1YmNsZWFuKCkKICBwMSAgCiAgZ2dzYXZlKCJ+L0RvY3VtZW50cy9VbHRpbWF0dW1HYW1lL3RyYWplY3Rvcnlfb2ZmZXJfZ3JvdXAucG5nIiwgcGxvdCA9IHAxLCBkcGk9NjAwLCB3aWR0aCA9IDgsIGhlaWdodCA9IDYpCgogIAogIHAxIDwtIGdncGxvdChkYXRhLCBhZXMoY29sb3I9Z3JvdXAsIHk9b2ZmZXIsIHggPXRyaWFsLCBncm91cD1ncm91cCkpICsKICAgICAgICBnZW9tX3Ntb290aChzcGFuID0gMC41KSArIGZhY2V0X3dyYXAofmNvbmRpdGlvbikgKyB0aGVtZV9wdWJjbGVhbigpCiAgcDEKICBnZ3NhdmUoIn4vRG9jdW1lbnRzL1VsdGltYXR1bUdhbWUvdHJhamVjdG9yeV9vZmZlcl9jb25kaXRpb24ucG5nIiwgcGxvdCA9IHAxLCBkcGk9NjAwLCB3aWR0aCA9IDgsIGhlaWdodCA9IDYpCgpgYGAKCkhlcmUgaXMgd2hhdCB0aGUgdHJhamVjdG9yeSAoc2hvd2luZyB0aGUgY2hhbmNlIG9mIEFDQ0VQVElORyBvZmZlcnMsIG92ZXIgdGltZSkgbG9va3MgbGlrZToKCmBgYHtyfQpwMSA8LSBnZ3Bsb3QoZGF0YSwgYWVzKGNvbG9yPWNvbmRpdGlvbiwgeT1jaG9pY2UsIHggPXRyaWFsLCBncm91cD1jb25kaXRpb24pKSArCiAgICAgICAgZ2VvbV9zbW9vdGgoc3BhbiA9IDAuNSkgKyBmYWNldF93cmFwKH5ncm91cCkgKyB0aGVtZV9wdWJjbGVhbigpCiAgcDEKICBnZ3NhdmUoIn4vRG9jdW1lbnRzL1VsdGltYXR1bUdhbWUvdHJhamVjdG9yeV9jaG9pY2VfZ3JvdXAucG5nIiwgcGxvdCA9IHAxLCBkcGk9NjAwLCB3aWR0aCA9IDgsIGhlaWdodCA9IDYpCgoKICBwMSA8LSBnZ3Bsb3QoZGF0YSwgYWVzKGNvbG9yPWdyb3VwLCB5PWNob2ljZSwgeCA9dHJpYWwsIGdyb3VwPWdyb3VwKSkgKwogICAgICAgIGdlb21fc21vb3RoKHNwYW4gPSAwLjUpICsgZmFjZXRfd3JhcCh+Y29uZGl0aW9uKSArIHRoZW1lX3B1YmNsZWFuKCkKICBwMQogIGdnc2F2ZSgifi9Eb2N1bWVudHMvVWx0aW1hdHVtR2FtZS90cmFqZWN0b3J5X2Nob2ljZV9jb25kaXRpb24ucG5nIiwgcGxvdCA9IHAxLCBkcGk9NjAwLCB3aWR0aCA9IDgsIGhlaWdodCA9IDYpCgojZGF0YV9pYyA8LSBkYXRhICU+JSBmaWx0ZXIoY29uZGl0aW9uPT0iSUMiKQojcDEgPC0gZ2dwbG90KGRhdGFfaWMsIGFlcyhjb2xvcj1ncm91cCwgeT1vZmZlciwgeCA9dHJpYWwsIGdyb3VwPWdyb3VwKSkgKwojICAgICAgICBnZW9tX3Ntb290aChzcGFuID0gMC41KSArIGZhY2V0X3dyYXAofmNvbmRpdGlvbikgKyB0aGVtZV9wdWJjbGVhbigpCiAjIHAxCiAgCiNwMSA8LSBnZ3Bsb3QoZGF0YV9pYywgYWVzKGNvbG9yPWdyb3VwLCB5PW9mZmVyLCB4ID10cmlhbCwgZ3JvdXA9Z3JvdXApKSArICAgICAgICBnZW9tX3Ntb290aChzcGFuID0gMC41KSArIGZhY2V0X3dyYXAofmZpbGVfdmVyc2lvbikgKyB0aGVtZV9wdWJjbGVhbigpCgogIAojZGF0YV9uYyA8LSBkYXRhICU+JSBmaWx0ZXIoY29uZGl0aW9uPT0iTkMiKQojcDEgPC0gZ2dwbG90KGRhdGFfbmMsIGFlcyhjb2xvcj1ncm91cCwgeT1vZmZlciwgeCA9dHJpYWwsIGdyb3VwPWdyb3VwKSkgKyAgICAgICAgCiMgIGdlb21fc21vb3RoKHNwYW4gPSAwLjUpICsgZmFjZXRfd3JhcCh+ZmlsZV92ZXJzaW9uKSArIHRoZW1lX3B1YmNsZWFuKCkKCiAgcDEgPC0gZ2dwbG90KGRhdGEsIGFlcyh4ID10cmlhbCkpICsKICAgIGdlb21fc21vb3RoKGFlcyh5ID0gY2hvaWNlKjUpLHNwYW49LjUpICsgCiAgZ2VvbV9zbW9vdGgoYWVzKHkgPSBvZmZlciksIHNwYW49LjUsIGxpbmV0eXBlPSJ0d29kYXNoIikgKwogICAgICAgICBmYWNldF93cmFwKH5jb25kaXRpb24qZ3JvdXApICsgdGhlbWVfcHViY2xlYW4oKSAgIAogIApwMQpgYGAKClNvIHRoaXMgbWFrZXMgbWUgdGhpbmsgd2Ugc2hvdWxkIGxvb2sgYXQgdGhlIGVmZmVjdCBvZiBUSU1FIChhdCBzb21lIHBvaW50LCBub3QgbmVjZXNzYXJpbHkgZm9yIHRoZSBwcmVzZW50YXRpb24gLSBjb3VsZCBiZSBhIGZ1dHVyZSBkaXJlY3Rpb24pIHNpbmNlIHRoZXJlIHNlZW0gdG8gYmUgc29tZSBwcmV0dHkgb2J2aW91cyBncm91cCBkaWZmZXJlbmNlcyB0aGF0IGFyZSBvYnNjdXJlZCB3aGVuIHdlIGF2ZXJhZ2UgYWxsIHRyaWFscyB0b2dldGhlci4KCgoKCgoKIyMgRWZmZWN0cyBvZiBpbmNvbWUKCiMjIyBQZXJjZWl2ZWQgY29udHJvbApgYGB7cn0KcTEgPC0gYW92X2V6KGlkID0gImlkIiwgZHYgPSAicGVyY2VpdmVkX2NvbnRyb2wiLCBsb25nX2RhdGEsIHdpdGhpbiA9ICJjb25kaXRpb24iLCBiZXR3ZWVuPWMoImdyb3VwIiksIGNvdmFyaWF0ZT0iaW5jb21lIikKc3VtbWFyeShxMSkKZW1tZWFucyhxMSwgfmNvbmRpdGlvbnxpbmNvbWUsIGNvbnRyID0gInBhaXJ3aXNlIiwgYWRqdXN0PSJob2xtIikKYGBgCgojIyMgUGVyY2VudCBvZmZlcnMgYWNjZXB0ZWQKYGBge3J9CnExIDwtIGFvdl9leihpZCA9ICJpZCIsIGR2ID0gInBlcmNlbnRfYWNjZXB0IiwgbG9uZ19kYXRhLCB3aXRoaW4gPSAiY29uZGl0aW9uIiwgYmV0d2Vlbj1jKCJncm91cCIpLCBjb3ZhcmlhdGU9ImluY29tZSIpCnN1bW1hcnkocTEpCmBgYAoKIyMjIE1lYW4gb2ZmZXIgKCQpIGFjY2VwdGVkCmBgYHtyfQpxMSA8LSBhb3ZfZXooaWQgPSAiaWQiLCBkdiA9ICJtZWFuX29mZmVyX2FjY2VwdCIsIGxvbmdfZGF0YSwgd2l0aGluID0gImNvbmRpdGlvbiIsIGJldHdlZW49YygiZ3JvdXAiKSwgY292YXJpYXRlPSJpbmNvbWUiKQpzdW1tYXJ5KHExKQplbW1lYW5zKHExLCB+Y29uZGl0aW9ufGluY29tZSwgY29udHIgPSAicGFpcndpc2UiLCBhZGp1c3Q9ImhvbG0iKQplbW1lYW5zKHExLCB+Z3JvdXAsIGNvbnRyID0gInBhaXJ3aXNlIiwgYWRqdXN0PSJob2xtIikKYGBgCiMjIyBNZWFuIG9mZmVyICgkKSBvdmVyYWxsCmBgYHtyfQpxMSA8LSBhb3ZfZXooaWQgPSAiaWQiLCBkdiA9ICJtZWFuX29mZmVyX2FsbCIsIGxvbmdfZGF0YSwgd2l0aGluID0gImNvbmRpdGlvbiIsIGJldHdlZW49YygiZ3JvdXAiKSwgY292YXJpYXRlPSJpbmNvbWUiKQpzdW1tYXJ5KHExKQplbW1lYW5zKHExLCB+Y29uZGl0aW9ufGluY29tZSwgY29udHIgPSAicGFpcndpc2UiLCBhZGp1c3Q9ImhvbG0iKQpgYGAKCiMjIyBJbmNvbWUgKGxvdy9oaWdoIGNhdGVnb3JpY2FsIHZhcmlhYmxlKQpgYGB7cn0KbG9uZ19kYXRhIDwtIGxvbmdfZGF0YSAlPiUgbXV0YXRlKGluY29tZV9IaSA9IGFzLmZhY3RvcihpZmVsc2UoaW5jb21lID09ICIkMTEwLTEzMGsiIHwgaW5jb21lID09ICIkMTMwaysiLCAxLCAwKSkpCgpxMSA8LSBhb3ZfZXooaWQgPSAiaWQiLCBkdiA9ICJwZXJjZWl2ZWRfY29udHJvbCIsIGxvbmdfZGF0YSwgd2l0aGluID0gImNvbmRpdGlvbiIsIGJldHdlZW49YygiZ3JvdXAiKSwgY292YXJpYXRlPSJpbmNvbWVfSGkiKQpzdW1tYXJ5KHExKQplbW1lYW5zKHExLCB+Y29uZGl0aW9ufGluY29tZV9IaSwgY29udHIgPSAicGFpcndpc2UiLCBhZGp1c3Q9ImhvbG0iKQoKCnExIDwtIGFvdl9leihpZCA9ICJpZCIsIGR2ID0gInBlcmNlbnRfYWNjZXB0IiwgbG9uZ19kYXRhLCB3aXRoaW4gPSAiY29uZGl0aW9uIiwgYmV0d2Vlbj1jKCJncm91cCIpLCBjb3ZhcmlhdGU9ImluY29tZV9IaSIpCnN1bW1hcnkocTEpCmVtbWVhbnMocTEsIH5pbmNvbWVfSGksIGNvbnRyID0gInBhaXJ3aXNlIiwgYWRqdXN0PSJob2xtIikKCnExIDwtIGFvdl9leihpZCA9ICJpZCIsIGR2ID0gIm1lYW5fb2ZmZXJfYWNjZXB0IiwgbG9uZ19kYXRhLCB3aXRoaW4gPSAiY29uZGl0aW9uIiwgYmV0d2Vlbj1jKCJncm91cCIpLCBjb3ZhcmlhdGU9ImluY29tZV9IaSIpCnN1bW1hcnkocTEpCmVtbWVhbnMocTEsIH5jb25kaXRpb258aW5jb21lX0hpLCBjb250ciA9ICJwYWlyd2lzZSIsIGFkanVzdD0iaG9sbSIpCgpxMSA8LSBhb3ZfZXooaWQgPSAiaWQiLCBkdiA9ICJtZWFuX29mZmVyX2FsbCIsIGxvbmdfZGF0YSwgd2l0aGluID0gImNvbmRpdGlvbiIsIGJldHdlZW49YygiZ3JvdXAiKSwgY292YXJpYXRlPSJpbmNvbWVfSGkiKQpzdW1tYXJ5KHExKQplbW1lYW5zKHExLCB+Y29uZGl0aW9ufGluY29tZV9IaSwgY29udHIgPSAicGFpcndpc2UiLCBhZGp1c3Q9ImhvbG0iKQoKYGBgCgoKCiMjIE9yZGVyIGVmZmVjdHMgKElDID0gcnVuIDEgb3IgMikgKFRCRCkKYGBge3IsIGV2YWw9RkFMU0UsIGVjaG89RkFMU0V9CmxvbmdfZGF0YSA8LSBsb25nX2RhdGEgJT4lIG11dGF0ZShvcmRlciA9IGZhY3RvcihvcmRlciwgbGV2ZWxzID0gYygiMSIsIjIiKSkpCnExIDwtIGFvdl9leihpZCA9ICJpZCIsIGR2ID0gInBlcmNlaXZlZF9jb250cm9sIiwgbG9uZ19kYXRhLCB3aXRoaW4gPSAiY29uZGl0aW9uIiwgYmV0d2Vlbj1jKCJncm91cCIpLGNvdmFyaWF0ZT0ib3JkZXIiKQpzdW1tYXJ5KHExKQplbW1lYW5zKHExLCB+Y29uZGl0aW9ufG9yZGVyLCBjb250ciA9ICJwYWlyd2lzZSIsIGFkanVzdD0iaG9sbSIpCgpxMSA8LSBhb3ZfZXooaWQgPSAiaWQiLCBkdiA9ICJwZXJjZW50X2FjY2VwdCIsIGxvbmdfZGF0YSwgd2l0aGluID0gImNvbmRpdGlvbiIsIGJldHdlZW49YygiZ3JvdXAiKSwgY292YXJpYXRlPSgib3JkZXIiKSkKc3VtbWFyeShxMSkKCnExIDwtIGFvdl9leihpZCA9ICJpZCIsIGR2ID0gIm1lYW5fb2ZmZXJfYWNjZXB0IiwgbG9uZ19kYXRhLCB3aXRoaW4gPSAiY29uZGl0aW9uIiwgYmV0d2Vlbj1jKCJncm91cCIpLCBjb3ZhcmlhdGU9Im9yZGVyIikKc3VtbWFyeShxMSkKCnExIDwtIGFvdl9leihpZCA9ICJpZCIsIGR2ID0gIm1lYW5fb2ZmZXJfYWxsIiwgbG9uZ19kYXRhLCB3aXRoaW4gPSAiY29uZGl0aW9uIiwgYmV0d2Vlbj1jKCJncm91cCIpLCBjb3ZhcmlhdGU9KCJvcmRlciIpKQpzdW1tYXJ5KHExKQplbW1lYW5zKHExLCB+Y29uZGl0aW9ufG9yZGVyLCBjb250ciA9ICJwYWlyd2lzZSIsIGFkanVzdD0iaG9sbSIpCmBgYAoKIyMgRWZmZWN0cyBvZiBmaWxlIHZlcnNpb24gKFRCRCkKYGBge3IsIGV2YWw9RkFMU0UsIGVjaG89RkFMU0V9CiMgZmlsZSB2ZXJzaW9uCnExIDwtIGFvdl9leihpZCA9ICJpZCIsIGR2ID0gInBlcmNlaXZlZF9jb250cm9sIiwgbG9uZ19kYXRhLCB3aXRoaW4gPSAiY29uZGl0aW9uIiwgYmV0d2Vlbj1jKCJncm91cCIpLGNvdmFyaWF0ZT0iZmlsZV92ZXJzaW9uIikKc3VtbWFyeShxMSkKZW1tZWFucyhxMSwgfmNvbmRpdGlvbnxmaWxlX3ZlcnNpb24sIGNvbnRyID0gInBhaXJ3aXNlIiwgYWRqdXN0PSJob2xtIikKCnExIDwtIGFvdl9leihpZCA9ICJpZCIsIGR2ID0gInBlcmNlbnRfYWNjZXB0IiwgbG9uZ19kYXRhLCB3aXRoaW4gPSAiY29uZGl0aW9uIiwgYmV0d2Vlbj1jKCJncm91cCIpLCBjb3ZhcmlhdGU9KCJmaWxlX3ZlcnNpb24iKSkKc3VtbWFyeShxMSkKCnExIDwtIGFvdl9leihpZCA9ICJpZCIsIGR2ID0gIm1lYW5fb2ZmZXJfYWNjZXB0IiwgbG9uZ19kYXRhLCB3aXRoaW4gPSAiY29uZGl0aW9uIiwgYmV0d2Vlbj1jKCJncm91cCIpLCBjb3ZhcmlhdGU9ImZpbGVfdmVyc2lvbiIpCnN1bW1hcnkocTEpCgpxMSA8LSBhb3ZfZXooaWQgPSAiaWQiLCBkdiA9ICJtZWFuX29mZmVyX2FsbCIsIGxvbmdfZGF0YSwgd2l0aGluID0gImNvbmRpdGlvbiIsIGJldHdlZW49YygiZ3JvdXAiKSwgY292YXJpYXRlPSgiZmlsZV92ZXJzaW9uIikpCnN1bW1hcnkocTEpCmVtbWVhbnMocTEsIH5jb25kaXRpb258ZmlsZV92ZXJzaW9uLCBjb250ciA9ICJwYWlyd2lzZSIsIGFkanVzdD0iaG9sbSIpCgoKIyBmaWxlIHZlcnNpb24KbG9uZ19kYXRhX3R4dCA8LSBsb25nX2RhdGEgJT4lIGZpbHRlcihmaWxlX3ZlcnNpb24gPT0gIi50eHQiKQpsb25nX2RhdGFfbWF0IDwtIGxvbmdfZGF0YSAlPiUgZmlsdGVyKGZpbGVfdmVyc2lvbiA9PSAiLm1hdCIpCgpxMSA8LSBhb3ZfZXooaWQgPSAiaWQiLCBkdiA9ICJwZXJjZWl2ZWRfY29udHJvbCIsIGxvbmdfZGF0YV9tYXQsIHdpdGhpbiA9ICJjb25kaXRpb24iLCBiZXR3ZWVuPSJncm91cCIpCnN1bW1hcnkocTEpCnExIDwtIGFvdl9leihpZCA9ICJpZCIsIGR2ID0gInBlcmNlaXZlZF9jb250cm9sIiwgbG9uZ19kYXRhX3R4dCwgd2l0aGluID0gImNvbmRpdGlvbiIsIGJldHdlZW49Imdyb3VwIikKc3VtbWFyeShxMSkKCnExIDwtIGFvdl9leihpZCA9ICJpZCIsIGR2ID0gInBlcmNlbnRfYWNjZXB0IiwgbG9uZ19kYXRhX21hdCwgd2l0aGluID0gImNvbmRpdGlvbiIsIGJldHdlZW49Imdyb3VwIikKc3VtbWFyeShxMSkKcTEgPC0gYW92X2V6KGlkID0gImlkIiwgZHYgPSAicGVyY2VudF9hY2NlcHQiLCBsb25nX2RhdGFfdHh0LCB3aXRoaW4gPSAiY29uZGl0aW9uIiwgYmV0d2Vlbj0iZ3JvdXAiKQpzdW1tYXJ5KHExKQoKcTEgPC0gYW92X2V6KGlkID0gImlkIiwgZHYgPSAibWVhbl9vZmZlcl9hY2NlcHQiLCBsb25nX2RhdGFfbWF0LCB3aXRoaW4gPSAiY29uZGl0aW9uIiwgYmV0d2Vlbj0iZ3JvdXAiKQpzdW1tYXJ5KHExKQpxMSA8LSBhb3ZfZXooaWQgPSAiaWQiLCBkdiA9ICJtZWFuX29mZmVyX2FjY2VwdCIsIGxvbmdfZGF0YV90eHQsIHdpdGhpbiA9ICJjb25kaXRpb24iLCBiZXR3ZWVuPSJncm91cCIpCnN1bW1hcnkocTEpCgpxMSA8LSBhb3ZfZXooaWQgPSAiaWQiLCBkdiA9ICJtZWFuX29mZmVyX2FsbCIsIGxvbmdfZGF0YV9tYXQsIHdpdGhpbiA9ICJjb25kaXRpb24iLCBiZXR3ZWVuPSJncm91cCIpCnN1bW1hcnkocTEpCnExIDwtIGFvdl9leihpZCA9ICJpZCIsIGR2ID0gIm1lYW5fb2ZmZXJfYWxsIiwgbG9uZ19kYXRhX3R4dCwgd2l0aGluID0gImNvbmRpdGlvbiIsIGJldHdlZW49Imdyb3VwIikKc3VtbWFyeShxMSkKCgpwMSA8LSBnZ3Bsb3QobG9uZ19kYXRhLCBhZXMoeT1wZXJjZWl2ZWRfY29udHJvbCwgeD1jb25kaXRpb24sIGZpbGw9Z3JvdXApKSArIAogICAgc3RhdF9zdW1tYXJ5KGdlb20gPSAiYmFyIiwgZnVuLnkgPSBtZWFuLCBwb3NpdGlvbiA9ICJkb2RnZSIsIGNvbG9yPSJibGFjayIpICsKICBzdGF0X3N1bW1hcnkoZ2VvbSA9ICJlcnJvcmJhciIsIGZ1bi5kYXRhID0gbWVhbl9zZSwgcG9zaXRpb249cG9zaXRpb25fZG9kZ2UoLjkpLCB3aWR0aCA9IDAuMjUsIGNvbG9yPSJibGFjayIpICsKICAgeGxhYigiY29uZGl0aW9uIikgKyB5bGFiKCJwZXJjZWl2ZWQgY29udHJvbCIpICsgdGhlbWVfcHVicihiYXNlX3NpemUgPSAxNCkgKyBmYWNldF93cmFwKH5maWxlX3ZlcnNpb24pCnAxCgpwMSA8LSBnZ3Bsb3QobG9uZ19kYXRhLCBhZXMoeT1wZXJjZW50X2FjY2VwdCwgeD1jb25kaXRpb24sIGZpbGw9Z3JvdXApKSArIAogICAgc3RhdF9zdW1tYXJ5KGdlb20gPSAiYmFyIiwgZnVuLnkgPSBtZWFuLCBwb3NpdGlvbiA9ICJkb2RnZSIsIGNvbG9yPSJibGFjayIpICsKICBzdGF0X3N1bW1hcnkoZ2VvbSA9ICJlcnJvcmJhciIsIGZ1bi5kYXRhID0gbWVhbl9zZSwgcG9zaXRpb249cG9zaXRpb25fZG9kZ2UoLjkpLCB3aWR0aCA9IDAuMjUsIGNvbG9yPSJibGFjayIpICsKICAgeGxhYigiY29uZGl0aW9uIikgKyB5bGFiKCIlIG9mZmVycyBhY2NlcHRlZCIpICsgdGhlbWVfcHVicihiYXNlX3NpemUgPSAxNCkgKyBmYWNldF93cmFwKH5maWxlX3ZlcnNpb24pCnAxCgoKcDEgPC0gZ2dwbG90KGxvbmdfZGF0YSwgYWVzKHk9bWVhbl9vZmZlcl9hY2NlcHQsIHg9Y29uZGl0aW9uLCBmaWxsPWdyb3VwKSkgKyAKICAgIHN0YXRfc3VtbWFyeShnZW9tID0gImJhciIsIGZ1bi55ID0gbWVhbiwgcG9zaXRpb24gPSAiZG9kZ2UiLCBjb2xvcj0iYmxhY2siKSArCiAgc3RhdF9zdW1tYXJ5KGdlb20gPSAiZXJyb3JiYXIiLCBmdW4uZGF0YSA9IG1lYW5fc2UsIHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKC45KSwgd2lkdGggPSAwLjI1LCBjb2xvcj0iYmxhY2siKSArCiAgIHhsYWIoImNvbmRpdGlvbiIpICsgeWxhYigibWVhbiBvZmZlciBhY2NlcHRlZCIpICsgdGhlbWVfcHVicihiYXNlX3NpemUgPSAxNCkgKyBmYWNldF93cmFwKH5maWxlX3ZlcnNpb24pCnAxCgpwMSA8LSBnZ3Bsb3QobG9uZ19kYXRhLCBhZXMoeT1tZWFuX29mZmVyX2FsbCwgeD1jb25kaXRpb24sIGZpbGw9Z3JvdXApKSArIAogICAgc3RhdF9zdW1tYXJ5KGdlb20gPSAiYmFyIiwgZnVuLnkgPSBtZWFuLCBwb3NpdGlvbiA9ICJkb2RnZSIsIGNvbG9yPSJibGFjayIpICsKICBzdGF0X3N1bW1hcnkoZ2VvbSA9ICJlcnJvcmJhciIsIGZ1bi5kYXRhID0gbWVhbl9zZSwgcG9zaXRpb249cG9zaXRpb25fZG9kZ2UoLjkpLCB3aWR0aCA9IDAuMjUsIGNvbG9yPSJibGFjayIpICsKICAgeGxhYigiY29uZGl0aW9uIikgKyB5bGFiKCJtZWFuIG9mZmVyIG92ZXJhbGwiKSArIHRoZW1lX3B1YnIoYmFzZV9zaXplID0gMTQpICsgZmFjZXRfd3JhcCh+ZmlsZV92ZXJzaW9uKQpwMQoKCgoKcTEgPC0gYW92X2V6KGlkID0gImlkIiwgZHYgPSAicGVyY2VpdmVkX2NvbnRyb2wiLCBsb25nX2RhdGFfdHh0LCB3aXRoaW4gPSAiY29uZGl0aW9uIiwgYmV0d2Vlbj1jKCJncm91cCIpKQpzdW1tYXJ5KHExKQpxMSA8LSBhb3ZfZXooaWQgPSAiaWQiLCBkdiA9ICJwZXJjZWl2ZWRfY29udHJvbCIsIGxvbmdfZGF0YV9tYXQsIHdpdGhpbiA9ICJjb25kaXRpb24iLCBiZXR3ZWVuPWMoImdyb3VwIikpCnN1bW1hcnkocTEpCgpxMSA8LSBhb3ZfZXooaWQgPSAiaWQiLCBkdiA9ICJwZXJjZW50X2FjY2VwdCIsIGxvbmdfZGF0YSwgd2l0aGluID0gImNvbmRpdGlvbiIsIGJldHdlZW49YygiZ3JvdXAiKSwgY292YXJpYXRlPSgiZmlsZV92ZXJzaW9uIikpCnN1bW1hcnkocTEpCgpxMSA8LSBhb3ZfZXooaWQgPSAiaWQiLCBkdiA9ICJtZWFuX29mZmVyX2FjY2VwdCIsIGxvbmdfZGF0YSwgd2l0aGluID0gImNvbmRpdGlvbiIsIGJldHdlZW49YygiZ3JvdXAiKSwgY292YXJpYXRlPSJmaWxlX3ZlcnNpb24iKQpzdW1tYXJ5KHExKQoKcTEgPC0gYW92X2V6KGlkID0gImlkIiwgZHYgPSAibWVhbl9vZmZlcl9hbGwiLCBsb25nX2RhdGEsIHdpdGhpbiA9ICJjb25kaXRpb24iLCBiZXR3ZWVuPWMoImdyb3VwIiksIGNvdmFyaWF0ZT0oImZpbGVfdmVyc2lvbiIpKQpzdW1tYXJ5KHExKQplbW1lYW5zKHExLCB+Y29uZGl0aW9ufGZpbGVfdmVyc2lvbiwgY29udHIgPSAicGFpcndpc2UiLCBhZGp1c3Q9ImhvbG0iKQoKCmBgYAoKCgoKCgoKCgoKCgoKCgpgYGB7ciwgZXZhbD1GQUxTRSwgZWNobz1GQUxTRX0KIyMjIFdJREUKCmRhdGFfaWNfYWNjIDwtIGRhdGEgJT4lIGZpbHRlcihjb25kaXRpb24gPT0gIklDIiAmIGNob2ljZSA9PSAxKSAKZGF0YV9pY19yZWogPC0gZGF0YSAlPiUgZmlsdGVyKGNvbmRpdGlvbiA9PSAiSUMiICYgY2hvaWNlID09IDApCgpkYXRhX25jX2FjYyA8LSBkYXRhICU+JSBmaWx0ZXIoY29uZGl0aW9uID09ICJOQyIgJiBjaG9pY2UgPT0gMSkKZGF0YV9uY19yZWogPC0gZGF0YSAlPiUgZmlsdGVyKGNvbmRpdGlvbiA9PSAiTkMiICYgY2hvaWNlID09IDApCgpkYXRhX2ljX2FjY19SVCA8LSBkYXRhX2ljX2FjYyAlPiUgIGdyb3VwX2J5KGlkKSAlPiUgc3VtbWFyaXNlKG1lYW5fUlRfYWNjZXB0ID0gbWVhbihSVCkpCmRhdGFfaWNfYWNjX29mZmVyIDwtIGRhdGFfaWNfYWNjICU+JSBncm91cF9ieShpZCkgJT4lIHN1bW1hcmlzZShtZWFuX29mZmVyX2FjY2VwdCA9IG1lYW4ob2ZmZXIpKQpkYXRhX2ljX2FjY19jaG9pY2UgPC0gZGF0YV9pY19hY2MgJT4lIHNlbGVjdChjKGlkLGNob2ljZSkpICU+JSBncm91cF9ieShpZCkgJT4lIGFkZF9jb3VudChjaG9pY2UpICU+JSBtdXRhdGUocGVyY19hY2NlcHQgPSBuLzMwKSAlPiUgc2VsZWN0KGlkLHBlcmNfYWNjZXB0KSAlPiUgZGlzdGluY3QoKQojZGF0YV9pY19hY2NfcGMgPC0gZGF0YV9pY19hY2MgJT4lIHNlbGVjdChjKGlkLHVzZS5wYykpICU+JSBkaXN0aW5jdCgpCmRhdGFfaWNfYWNjIDwtIGxlZnRfam9pbihkYXRhX2ljX2FjY19SVCxkYXRhX2ljX2FjY19vZmZlciwgYnkgPSAiaWQiKQpkYXRhX2ljX2FjYyA8LSBsZWZ0X2pvaW4oZGF0YV9pY19hY2MsZGF0YV9pY19hY2NfY2hvaWNlLCBieSA9ICJpZCIpCmNvbG5hbWVzKGRhdGFfaWNfYWNjKSA8LSBwYXN0ZTAoY29sbmFtZXMoZGF0YV9pY19hY2MpLCJfSUNfYWNjZXB0IikKZGF0YV9pY19hY2MgPC0gZGF0YV9pY19hY2MgJT4lIGRwbHlyOjpyZW5hbWUoaWQgPSBpZF9JQ19hY2NlcHQpCgpkYXRhX2ljX3Jlal9SVCA8LSBkYXRhX2ljX3JlaiAlPiUgIGdyb3VwX2J5KGlkKSAlPiUgc3VtbWFyaXNlKG1lYW5fUlRfcmVqZWN0ID0gbWVhbihSVCkpCmRhdGFfaWNfcmVqX29mZmVyIDwtIGRhdGFfaWNfcmVqICU+JSBncm91cF9ieShpZCkgJT4lIHN1bW1hcmlzZShtZWFuX29mZmVyX3JlamVjdCA9IG1lYW4ob2ZmZXIpKQpkYXRhX2ljX3Jlal9jaG9pY2UgPC0gZGF0YV9pY19yZWogJT4lIHNlbGVjdChjKGlkLGNob2ljZSkpICU+JSBncm91cF9ieShpZCkgJT4lIGFkZF9jb3VudChjaG9pY2UpICU+JSBtdXRhdGUocGVyY19yZWplY3QgPSBuLzMwKSAlPiUgc2VsZWN0KGlkLHBlcmNfcmVqZWN0KSAlPiUgZGlzdGluY3QoKQojZGF0YV9pY19yZWpfcGMgPC0gZGF0YV9pY19yZWogJT4lIHNlbGVjdChjKGlkLHVzZS5wYykpICU+JSBkaXN0aW5jdCgpCmRhdGFfaWNfcmVqIDwtIGxlZnRfam9pbihkYXRhX2ljX3Jlal9SVCxkYXRhX2ljX3Jlal9vZmZlciwgYnkgPSAiaWQiKQpkYXRhX2ljX3JlaiA8LSBsZWZ0X2pvaW4oZGF0YV9pY19yZWosZGF0YV9pY19yZWpfY2hvaWNlLCBieSA9ICJpZCIpCmNvbG5hbWVzKGRhdGFfaWNfcmVqKSA8LSBwYXN0ZTAoY29sbmFtZXMoZGF0YV9pY19yZWopLCJfSUMiKQpkYXRhX2ljX3JlaiA8LSBkYXRhX2ljX3JlaiAlPiUgZHBseXI6OnJlbmFtZShpZCA9IGlkX0lDKQojIHBlcmNlaXZlZCBjb250cm9sIElDIGNvbmRpdGlvbgpkYXRhX2ljX3BjIDwtIGRhdGEgJT4lIGZpbHRlcihjb25kaXRpb249PSJJQyIpICU+JSBzZWxlY3QoaWQscGVyY2VpdmVkX2NvbnRyb2wsIGNvbmRpdGlvbikgJT4lIGRpc3RpbmN0KCkgCgpkYXRhX25jX2FjY19SVCA8LSBkYXRhX25jX2FjYyAlPiUgIGdyb3VwX2J5KGlkKSAlPiUgc3VtbWFyaXNlKG1lYW5fUlRfYWNjZXB0ID0gbWVhbihSVCkpCmRhdGFfbmNfYWNjX29mZmVyIDwtIGRhdGFfbmNfYWNjICU+JSBncm91cF9ieShpZCkgJT4lIHN1bW1hcmlzZShtZWFuX29mZmVyX2FjY2VwdCA9IG1lYW4ob2ZmZXIpKQpkYXRhX25jX2FjY19jaG9pY2UgPC0gZGF0YV9uY19hY2MgJT4lIHNlbGVjdChjKGlkLGNob2ljZSkpICU+JSBncm91cF9ieShpZCkgJT4lIGFkZF9jb3VudChjaG9pY2UpICU+JSBtdXRhdGUocGVyY19hY2NlcHQgPSBuLzMwKSAlPiUgc2VsZWN0KGlkLHBlcmNfYWNjZXB0KSAlPiUgZGlzdGluY3QoKQojZGF0YV9uY19hY2NfcGMgPC0gZGF0YV9uY19hY2MgJT4lIHNlbGVjdChjKGlkLHVzZS5wYykpICU+JSBkaXN0aW5jdCgpCmRhdGFfbmNfYWNjIDwtIGxlZnRfam9pbihkYXRhX25jX2FjY19SVCxkYXRhX25jX2FjY19vZmZlciwgYnkgPSAiaWQiKQpkYXRhX25jX2FjYyA8LSBsZWZ0X2pvaW4oZGF0YV9uY19hY2MsZGF0YV9uY19hY2NfY2hvaWNlLCBieSA9ICJpZCIpCmNvbG5hbWVzKGRhdGFfbmNfYWNjKSA8LSBwYXN0ZTAoY29sbmFtZXMoZGF0YV9uY19hY2MpLCJfTkMiKQpkYXRhX25jX2FjYyA8LSBkYXRhX25jX2FjYyAlPiUgcmVuYW1lKGlkID0gaWRfTkMpCgpkYXRhX25jX3Jlal9SVCA8LSBkYXRhX25jX3JlaiAlPiUgIGdyb3VwX2J5KGlkKSAlPiUgc3VtbWFyaXNlKG1lYW5fUlRfcmVqZWN0ID0gbWVhbihSVCkpCmRhdGFfbmNfcmVqX29mZmVyIDwtIGRhdGFfbmNfcmVqICU+JSBncm91cF9ieShpZCkgJT4lIHN1bW1hcmlzZShtZWFuX29mZmVyX3JlamVjdCA9IG1lYW4ob2ZmZXIpKQpkYXRhX25jX3Jlal9jaG9pY2UgPC0gZGF0YV9uY19yZWogJT4lIHNlbGVjdChjKGlkLGNob2ljZSkpICU+JSBncm91cF9ieShpZCkgJT4lIGFkZF9jb3VudChjaG9pY2UpICU+JSBtdXRhdGUocGVyY19yZWplY3QgPSBuLzMwKSAlPiUgc2VsZWN0KGlkLHBlcmNfcmVqZWN0KSAlPiUgZGlzdGluY3QoKQojZGF0YV9uY19yZWpfcGMgPC0gZGF0YV9uY19yZWogJT4lIHNlbGVjdChjKGlkLHVzZS5wYykpICU+JSBkaXN0aW5jdCgpCmRhdGFfbmNfcmVqIDwtIGxlZnRfam9pbihkYXRhX25jX3Jlal9SVCxkYXRhX25jX3Jlal9vZmZlciwgYnkgPSAiaWQiKQpkYXRhX25jX3JlaiA8LSBsZWZ0X2pvaW4oZGF0YV9uY19yZWosZGF0YV9uY19yZWpfY2hvaWNlLCBieSA9ICJpZCIpCmNvbG5hbWVzKGRhdGFfbmNfcmVqKSA8LSBwYXN0ZTAoY29sbmFtZXMoZGF0YV9uY19yZWopLCJfTkMiKQpkYXRhX25jX3JlaiA8LSBkYXRhX25jX3JlaiAlPiUgZHBseXI6OnJlbmFtZShpZCA9IGlkX05DKQojIHBlcmNlaXZlZCBjb250cm9sIE5DIGNvbmRpdGlvbgpkYXRhX25jX3BjIDwtIGRhdGEgJT4lIGZpbHRlcihjb25kaXRpb249PSJOQyIpICU+JSBzZWxlY3QoaWQscGVyY2VpdmVkX2NvbnRyb2wsIGNvbmRpdGlvbikgJT4lIGRpc3RpbmN0KCkgCgoKZGF0YV9uYyA8LSBmdWxsX2pvaW4oZGF0YV9uY19hY2MsZGF0YV9uY19yZWosYnk9ImlkIikKZGF0YV9uYyA8LSBmdWxsX2pvaW4oZGF0YV9uYywgZGF0YV9uY19wYyxieT0iaWQiKQoKZGF0YV9pYyA8LSBmdWxsX2pvaW4oZGF0YV9pY19hY2MsZGF0YV9pY19yZWosYnk9ImlkIikKZGF0YV9pYyA8LSBmdWxsX2pvaW4oZGF0YV9pYywgZGF0YV9pY19wYyxieT0iaWQiKQoKb3JkZXIgPC0gZGF0YSAlPiUgc2VsZWN0KG9yZGVyLGZpbGVfdmVyc2lvbixpZCkgJT4lIGRpc3RpbmN0KCkKCndpZGUgPC0gZnVsbF9qb2luKGRhdGFfbmMsZGF0YV9pYywgYnk9ImlkIikKd2lkZSA8LSBsZWZ0X2pvaW4od2lkZSxwcHQpICU+JSBzZWxlY3QoIXN0YXJ0c193aXRoKCJjb25kaXRpb24iKSkKd2lkZSA8LSBsZWZ0X2pvaW4od2lkZSxvcmRlcikKd2lkZSA8LSB3aWRlICU+JSBtdXRhdGUoYWNyb3NzKHdoZXJlKGlzLm51bWVyaWMpLCByb3VuZCwgMykpCgp3cml0ZS5jc3Yod2lkZSwiVUdfZGF0YXNldF93aWRlLmNzdiIsIG5hID0gIiIpCgoKYGBgCgpgYGB7ciwgZXZhbD1GQUxTRSwgZWNobz1GQUxTRX0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgU0lNVUxBVEVEIERBVEEKbGlicmFyeShmYXV4KQoKc2ltX2RhdGFMPC0gZGF0YSAlPiUgc2VsZWN0KHdoZXJlKGlzLm51bWVyaWMpKSAlPiUgc2VsZWN0KC1jKG9yZGVyLHBjLHBlcmNlaXZlZF9jb250cm9sKSkKc2ltX3BjX2wgPC0gZGF0YSAlPiUgc2VsZWN0KHBlcmNlaXZlZF9jb250cm9sKSAlPiUgYXJyYW5nZSgpCnNpbV9wY193IDwtIGRhdGEgJT4lIHNlbGVjdChwZXJjZWl2ZWRfY29udHJvbCxpZCxjb25kaXRpb24pICU+JSBkaXN0aW5jdCgpCnNpbV9kYXRhTCA8LSBzaW1fZGYoc2ltX2RhdGFMLG49MzM1MCkgJT4lIHNlbGVjdCghaWQpICAlPiUgYWJzKCkKc2ltX2RhdGFMMSA8LSBkYXRhICU+JSBzZWxlY3QoIXdoZXJlKGlzLm51bWVyaWMpKSAgCnNpbV9kYXRhX2lkIDwtIHNpbV9kYXRhTDEgJT4lIHNlbGVjdChpZCkgCnNpbV9kYXRhTDEgPC0gc2ltX2RhdGFMMSAlPiUgc2VsZWN0KCFpZCkgCnNpbV9kYXRhX2lkJElEIDwtIHN0cl9zb3J0KHNpbV9kYXRhX2lkJGlkKQpzaW1fZGF0YUxvbmcgPC0gYmluZF9jb2xzKHNpbV9kYXRhX2lkLHNpbV9kYXRhTDEpCnNpbV9kYXRhTG9uZyA8LSBzaW1fZGF0YUxvbmcgJT4lIHNlbGVjdCghc3RhcnRzX3dpdGgoImlkIiwgaWdub3JlLmNhc2UgPSBGQUxTRSkpICU+JSByZW5hbWUoaWQgPSBJRCkKc2ltX2RhdGFMb25nIDwtIGJpbmRfY29scyhzaW1fZGF0YUxvbmcsc2ltX2RhdGFMKSAKc2ltX2RhdGFMb25nIDwtIGJpbmRfY29scyhzaW1fZGF0YUxvbmcsc2ltX3BjX2wpCgojIyMgQWRkIENBUFMgc3ggYW5kIGRlbW9ncmFwaGljcwojIAogY2xpbiA8LSByZWFkUkRTKCIvVXNlcnMvc2FyZW5zZWVsZXkvRHJvcGJveC9Qb3N0ZG9jL253dGNfc3R1ZHkvZGF0YS9fY2xlYW5lZC9ud3RjX2RhdGFfY2xlYW5lZF8wNy0yNS0yMi5yZHMiKQogY2xpbiA8LSBjbGluICU+JSBzZWxlY3Qoc3RhcnRzX3dpdGgoInRvdF9tb3MiKXwgc3RhcnRzX3dpdGgoIkNBUFM1X1BNX3RvdGFsIikgfCBzdGFydHNfd2l0aCgiYWdlXyIpIHwgc3RhcnRzX3dpdGgoImdlbmRlcl8xaXNGIikgfCBzdGFydHNfd2l0aCgiaW5jb21lTGV2ZWwiKSB8IHN0YXJ0c193aXRoKCJyZWNvcmRfaWQiKSkgJT4lIHJlbmFtZShpZCA9IHJlY29yZF9pZCkgCiBzaW1fZGF0YUxvbmcgPC0gbGVmdF9qb2luKHNpbV9kYXRhTG9uZyxjbGluLGJ5PSJpZCIpCiBjaG9pY2UgPC0gYXMuZGF0YS5mcmFtZShyZXAoMDoxLCB0aW1lcz0zMzUwLzIpKQogc2ltX2RhdGFMb25nIDwtIGJpbmRfY29scyhzaW1fZGF0YUxvbmcsY2hvaWNlKQogc2ltX2RhdGFMb25nIDwtIHNpbV9kYXRhTG9uZyAlPiUgbXV0YXRlKGNob2ljZT1gcmVwKDA6MSwgdGltZXMgPSAzMzUwLzIpYCkKd3JpdGUuY3N2KHNpbV9kYXRhTG9uZywiVUdfZGF0YXNldF9sb25nZXJfc2ltdWxhdGVkLmNzdiIsIG5hID0gIi4iKQoKc2ltX2RhdGFMb25nMjwtIHNpbV9kYXRhTG9uZyAlPiUgZ3JvdXBfYnkoaWQsY29uZGl0aW9uKSAlPiUgc3VtbWFyaXplKG1lYW4ob2ZmZXIpLG1lYW4ocmV3YXJkKSxtZWFuKFJUKSxzdW0oY2hvaWNlKS8zMCkKd3JpdGUuY3N2KHNpbV9kYXRhTG9uZzIsIlVHX2RhdGFzZXRfbG9uZ19tZWFuc19zaW11bGF0ZWQuY3N2IiwgbmEgPSAiLiIpCgoKIyBzaW11bGF0ZWQgV0lERSBkYXRhc2V0CmRhdGFfaWNfYWNjIDwtIHNpbV9kYXRhTG9uZyAlPiUgZmlsdGVyKGNvbmRpdGlvbiA9PSAiSUMiICYgY2hvaWNlID09IDEpCmRhdGFfaWNfcmVqIDwtIHNpbV9kYXRhTG9uZyAlPiUgZmlsdGVyKGNvbmRpdGlvbiA9PSAiSUMiICYgY2hvaWNlID09IDApCgpkYXRhX25jX2FjYyA8LSBzaW1fZGF0YUxvbmcgJT4lIGZpbHRlcihjb25kaXRpb24gPT0gIk5DIiAmIGNob2ljZSA9PSAxKQpkYXRhX25jX3JlaiA8LSBzaW1fZGF0YUxvbmcgJT4lIGZpbHRlcihjb25kaXRpb24gPT0gIk5DIiAmIGNob2ljZSA9PSAwKQoKZGF0YV9pY19hY2NfUlQgPC0gZGF0YV9pY19hY2MgJT4lICBncm91cF9ieShpZCkgJT4lIHN1bW1hcmlzZShtZWFuX1JUX2FjY2VwdCA9IG1lYW4oUlQpKQpkYXRhX2ljX2FjY19vZmZlciA8LSBkYXRhX2ljX2FjYyAlPiUgZ3JvdXBfYnkoaWQpICU+JSBzdW1tYXJpc2UobWVhbl9vZmZlcl9hY2NlcHQgPSBtZWFuKG9mZmVyKSkKZGF0YV9pY19hY2NfY2hvaWNlIDwtIGRhdGFfaWNfYWNjICU+JSBzZWxlY3QoYyhpZCxjaG9pY2UpKSAlPiUgZ3JvdXBfYnkoaWQpICU+JSBhZGRfY291bnQoY2hvaWNlKSAlPiUgbXV0YXRlKHBlcmNfYWNjZXB0ID0gbi8zMCkgJT4lIHNlbGVjdChpZCxwZXJjX2FjY2VwdCkgJT4lIGRpc3RpbmN0KCkKI2RhdGFfaWNfYWNjX3BjIDwtIGRhdGFfaWNfYWNjICU+JSBzZWxlY3QoYyhpZCxwZXJjZWl2ZWRfY29udHJvbCkpICU+JSBkaXN0aW5jdCgpCmRhdGFfaWNfYWNjIDwtIGxlZnRfam9pbihkYXRhX2ljX2FjY19SVCxkYXRhX2ljX2FjY19vZmZlciwgYnkgPSAiaWQiKQpkYXRhX2ljX2FjYyA8LSBsZWZ0X2pvaW4oZGF0YV9pY19hY2MsZGF0YV9pY19hY2NfY2hvaWNlLCBieSA9ICJpZCIpCmNvbG5hbWVzKGRhdGFfaWNfYWNjKSA8LSBwYXN0ZTAoY29sbmFtZXMoZGF0YV9pY19hY2MpLCJfSUNfYWNjZXB0IikKZGF0YV9pY19hY2MgPC0gZGF0YV9pY19hY2MgJT4lIGRwbHlyOjpyZW5hbWUoaWQgPSBpZF9JQ19hY2NlcHQpCgpkYXRhX2ljX3Jlal9SVCA8LSBkYXRhX2ljX3JlaiAlPiUgIGdyb3VwX2J5KGlkKSAlPiUgc3VtbWFyaXNlKG1lYW5fUlRfcmVqZWN0ID0gbWVhbihSVCkpCmRhdGFfaWNfcmVqX29mZmVyIDwtIGRhdGFfaWNfcmVqICU+JSBncm91cF9ieShpZCkgJT4lIHN1bW1hcmlzZShtZWFuX29mZmVyX3JlamVjdCA9IG1lYW4ob2ZmZXIpKQpkYXRhX2ljX3Jlal9jaG9pY2UgPC0gZGF0YV9pY19yZWogJT4lIHNlbGVjdChjKGlkLGNob2ljZSkpICU+JSBncm91cF9ieShpZCkgJT4lIGFkZF9jb3VudChjaG9pY2UpICU+JSBtdXRhdGUocGVyY19yZWplY3QgPSBuLzMwKSAlPiUgc2VsZWN0KGlkLHBlcmNfcmVqZWN0KSAlPiUgZGlzdGluY3QoKQojZGF0YV9pY19yZWpfcGMgPC0gZGF0YV9pY19yZWogJT4lIHNlbGVjdChjKGlkLHBlcmNlaXZlZF9jb250cm9sKSkgJT4lIGRpc3RpbmN0KCkKZGF0YV9pY19yZWogPC0gbGVmdF9qb2luKGRhdGFfaWNfcmVqX1JULGRhdGFfaWNfcmVqX29mZmVyLCBieSA9ICJpZCIpCmRhdGFfaWNfcmVqIDwtIGxlZnRfam9pbihkYXRhX2ljX3JlaixkYXRhX2ljX3Jlal9jaG9pY2UsIGJ5ID0gImlkIikKY29sbmFtZXMoZGF0YV9pY19yZWopIDwtIHBhc3RlMChjb2xuYW1lcyhkYXRhX2ljX3JlaiksIl9JQyIpCmRhdGFfaWNfcmVqIDwtIGRhdGFfaWNfcmVqICU+JSBkcGx5cjo6cmVuYW1lKGlkID0gaWRfSUMpCiMgcGVyY2VpdmVkIGNvbnRyb2wgSUMgY29uZGl0aW9uCmRhdGFfaWNfcGMgPC0gc2ltX3BjX3cgJT4lIGZpbHRlcihjb25kaXRpb249PSJJQyIpICAlPiUgc2VsZWN0KHBlcmNlaXZlZF9jb250cm9sLGlkKSAlPiUgYXJyYW5nZShwZXJjZWl2ZWRfY29udHJvbCkKCmRhdGFfbmNfYWNjX1JUIDwtIGRhdGFfbmNfYWNjICU+JSAgZ3JvdXBfYnkoaWQpICU+JSBzdW1tYXJpc2UobWVhbl9SVF9hY2NlcHQgPSBtZWFuKFJUKSkKZGF0YV9uY19hY2Nfb2ZmZXIgPC0gZGF0YV9uY19hY2MgJT4lIGdyb3VwX2J5KGlkKSAlPiUgc3VtbWFyaXNlKG1lYW5fb2ZmZXJfYWNjZXB0ID0gbWVhbihvZmZlcikpCmRhdGFfbmNfYWNjX2Nob2ljZSA8LSBkYXRhX25jX2FjYyAlPiUgc2VsZWN0KGMoaWQsY2hvaWNlKSkgJT4lIGdyb3VwX2J5KGlkKSAlPiUgYWRkX2NvdW50KGNob2ljZSkgJT4lIG11dGF0ZShwZXJjX2FjY2VwdCA9IG4vMzApICU+JSBzZWxlY3QoaWQscGVyY19hY2NlcHQpICU+JSBkaXN0aW5jdCgpCiNkYXRhX25jX2FjY19wYyA8LSBkYXRhX25jX2FjYyAlPiUgc2VsZWN0KGMoaWQscGVyY2VpdmVkX2NvbnRyb2wpKSAlPiUgZGlzdGluY3QoKQpkYXRhX25jX2FjYyA8LSBsZWZ0X2pvaW4oZGF0YV9uY19hY2NfUlQsZGF0YV9uY19hY2Nfb2ZmZXIsIGJ5ID0gImlkIikKZGF0YV9uY19hY2MgPC0gbGVmdF9qb2luKGRhdGFfbmNfYWNjLGRhdGFfbmNfYWNjX2Nob2ljZSwgYnkgPSAiaWQiKQpjb2xuYW1lcyhkYXRhX25jX2FjYykgPC0gcGFzdGUwKGNvbG5hbWVzKGRhdGFfbmNfYWNjKSwiX05DIikKZGF0YV9uY19hY2MgPC0gZGF0YV9uY19hY2MgJT4lIGRwbHlyOjpyZW5hbWUoaWQgPSBpZF9OQykKCmRhdGFfbmNfcmVqX1JUIDwtIGRhdGFfbmNfcmVqICU+JSAgZ3JvdXBfYnkoaWQpICU+JSBzdW1tYXJpc2UobWVhbl9SVF9yZWplY3QgPSBtZWFuKFJUKSkKZGF0YV9uY19yZWpfb2ZmZXIgPC0gZGF0YV9uY19yZWogJT4lIGdyb3VwX2J5KGlkKSAlPiUgc3VtbWFyaXNlKG1lYW5fb2ZmZXJfcmVqZWN0ID0gbWVhbihvZmZlcikpCmRhdGFfbmNfcmVqX2Nob2ljZSA8LSBkYXRhX25jX3JlaiAlPiUgc2VsZWN0KGMoaWQsY2hvaWNlKSkgJT4lIGdyb3VwX2J5KGlkKSAlPiUgYWRkX2NvdW50KGNob2ljZSkgJT4lIG11dGF0ZShwZXJjX3JlamVjdCA9IG4vMzApICU+JSBzZWxlY3QoaWQscGVyY19yZWplY3QpICU+JSBkaXN0aW5jdCgpCiNkYXRhX25jX3Jlal9wYyA8LSBkYXRhX25jX3JlaiAlPiUgc2VsZWN0KGMoaWQscGVyY2VpdmVkX2NvbnRyb2wpKSAlPiUgZGlzdGluY3QoKQpkYXRhX25jX3JlaiA8LSBsZWZ0X2pvaW4oZGF0YV9uY19yZWpfUlQsZGF0YV9uY19yZWpfb2ZmZXIsIGJ5ID0gImlkIikKZGF0YV9uY19yZWogPC0gbGVmdF9qb2luKGRhdGFfbmNfcmVqLGRhdGFfbmNfcmVqX2Nob2ljZSwgYnkgPSAiaWQiKQpjb2xuYW1lcyhkYXRhX25jX3JlaikgPC0gcGFzdGUwKGNvbG5hbWVzKGRhdGFfbmNfcmVqKSwiX05DIikKZGF0YV9uY19yZWogPC0gZGF0YV9uY19yZWogJT4lIGRwbHlyOjpyZW5hbWUoaWQgPSBpZF9OQykKIyBwZXJjZWl2ZWQgY29udHJvbCBOQyBjb25kaXRpb24KZGF0YV9uY19wYyA8LSBzaW1fcGNfdyAlPiUgZmlsdGVyKGNvbmRpdGlvbj09Ik5DIikgJT4lIHNlbGVjdChwZXJjZWl2ZWRfY29udHJvbCxpZCkgJT4lIGFycmFuZ2UocGVyY2VpdmVkX2NvbnRyb2wpCgoKCmRhdGFfbmMgPC0gZnVsbF9qb2luKGRhdGFfbmNfYWNjLGRhdGFfbmNfcmVqLGJ5PSJpZCIpCmRhdGFfbmMgPC0gZnVsbF9qb2luKGRhdGFfbmMsIGRhdGFfbmNfcGMsYnk9ImlkIikKCmRhdGFfaWMgPC0gZnVsbF9qb2luKGRhdGFfaWNfYWNjLGRhdGFfaWNfcmVqLGJ5PSJpZCIpCmRhdGFfaWMgPC0gZnVsbF9qb2luKGRhdGFfaWMsIGRhdGFfaWNfcGMsYnk9ImlkIikKCndpZGUgPC0gZnVsbF9qb2luKGRhdGFfbmMsZGF0YV9pYywgYnk9ImlkIikKd2lkZSA8LSBsZWZ0X2pvaW4od2lkZSxwcHQpICU+JSBzZWxlY3QoIXN0YXJ0c193aXRoKCJjb25kaXRpb24iKSkKd2lkZSA8LSB3aWRlICU+JSBtdXRhdGUoYWNyb3NzKHdoZXJlKGlzLm51bWVyaWMpLCByb3VuZCwgMykpIAoKb3JkZXIgPC0gYXMuZGF0YS5mcmFtZShyZXAoMToyLCB0aW1lcz01Ny8yKSkKb3JkZXJbNTcsXSA8LSAyCndpZGU8LSBiaW5kX2NvbHMod2lkZSxvcmRlcikKd2lkZSA8LSB3aWRlICU+JSByZW5hbWUob3JkZXI9YHJlcCgxOjIsIHRpbWVzID0gNTcvMilgKQoKCgojIyMgQWRkIENBUFMgc3ggYW5kIGRlbW9ncmFwaGljcwoKY2xpbiA8LSByZWFkUkRTKCIvVXNlcnMvc2FyZW5zZWVsZXkvRHJvcGJveC9Qb3N0ZG9jL253dGNfc3R1ZHkvZGF0YS9fY2xlYW5lZC9ud3RjX2RhdGFfY2xlYW5lZF8wNy0yNS0yMi5yZHMiKQpjbGluIDwtIGNsaW4gJT4lIHNlbGVjdChzdGFydHNfd2l0aCgidG90X21vcyIpfCBzdGFydHNfd2l0aCgiQ0FQUzVfUE1fdG90YWwiKSB8IHN0YXJ0c193aXRoKCJhZ2UiKSB8IHN0YXJ0c193aXRoKCJnZW5kZXJfMWlzRiIpIHwgc3RhcnRzX3dpdGgoImluY29tZUxldmVsIikpIAoKc2ltX2NsaW4gPC1jbGluICU+JSBzZWxlY3Qod2hlcmUoaXMubnVtZXJpYykpIApzaW1fY2xpbiA8LSBzaW1fY2xpbiAlPiUgc2xpY2UoMTo1NykgCndpZGU8LWJpbmRfY29scyh3aWRlLHNpbV9jbGluKSAlPiUgYXJyYW5nZShDQVBTNV9QTV90b3RhbCkgCgp3cml0ZS5jc3Yod2lkZSwiVUdfZGF0YXNldF93aWRlX3NpbXVsYXRlZC5jc3YiLCBuYSA9ICIuIikKCiNybShsaXN0ID0gbHMoKSkKYGBgCgoKCgojIyBCb3hwbG90cwpTb21lIHBlb3BsZSBwcmVmZXIgdGhlc2Ugb3ZlciBiYXIgY2hhcnRzIGJlY2F1c2UgeW91IGNhbiBzZWUgdGhlIGFjdHVhbCBkYXRhIHBvaW50cyBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBkYXRhLi4uCmBgYHtyfQoKcDEgPC0gZ2dwbG90KGxvbmdfZGF0YSwgYWVzKGNvbG9yPWdyb3VwLCB5PW1lYW5fb2ZmZXJfYWNjZXB0LCB4PWdyb3VwKSkgKyAKICBnZW9tX2JveHBsb3QoKSArIGdlb21fcG9pbnQoKSArICBnZW9tX2ppdHRlcih3aWR0aCA9IDAuMSkgKyBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzPWMoIiMwMEJBMzgiLCIjNjE5Q0ZGIiwiI0Y4NzY2RCIpKSArIAogIHlsYWIoIm1lYW4gb2ZmZXIgYWNjZXB0ZWQiKSArIHhsYWIoImdyb3VwIHggY29uZGl0aW9uIikgKyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfYmxhbmsoKSkgKyB0aGVtZV9wdWJyKCkgKyBmYWNldF93cmFwKH5jb25kaXRpb24pCnAxCgpwMSA8LSBnZ3Bsb3QobG9uZ19kYXRhLCBhZXMoY29sb3I9Z3JvdXAsIHk9bWVhbl9vZmZlcl9hbGwsIHg9Z3JvdXApKSArIAogIGdlb21fYm94cGxvdCgpICsgZ2VvbV9wb2ludCgpICsgIGdlb21faml0dGVyKHdpZHRoID0gMC4xKSArIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXM9YygiIzAwQkEzOCIsIiM2MTlDRkYiLCIjRjg3NjZEIikpICsgCiAgeWxhYigibWVhbiBvZmZlciBvdmVyYWxsIikgKyB4bGFiKCJncm91cCB4IGNvbmRpdGlvbiIpICsgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X2JsYW5rKCkpICsgdGhlbWVfcHVicigpICsgZmFjZXRfd3JhcCh+Y29uZGl0aW9uKQpwMQoKcDEgPC0gZ2dwbG90KGxvbmdfZGF0YSwgYWVzKGNvbG9yPWdyb3VwLCB5PXBlcmNlbnRfYWNjZXB0LCB4PWdyb3VwKSkgKyAKICBnZW9tX2JveHBsb3QoKSArIGdlb21fcG9pbnQoKSArICBnZW9tX2ppdHRlcih3aWR0aCA9IDAuMSkgKyBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzPWMoIiMwMEJBMzgiLCIjNjE5Q0ZGIiwiI0Y4NzY2RCIpKSArIAogIHlsYWIoIiUgb2ZmZXJzIGFjY2VwdGVkIikgKyB4bGFiKCJncm91cCB4IGNvbmRpdGlvbiIpICsgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X2JsYW5rKCkpICsgdGhlbWVfcHVicigpICsgZmFjZXRfd3JhcCh+Y29uZGl0aW9uKQpwMQoKcDEgPC0gZ2dwbG90KGxvbmdfZGF0YSwgYWVzKGNvbG9yPWdyb3VwLCB5PXBlcmNlaXZlZF9jb250cm9sLCB4PWdyb3VwKSkgKyAKICBnZW9tX2JveHBsb3QoKSArIGdlb21fcG9pbnQoKSArICBnZW9tX2ppdHRlcih3aWR0aCA9IDAuMSkgKyBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzPWMoIiMwMEJBMzgiLCIjNjE5Q0ZGIiwiI0Y4NzY2RCIpKSArIAogIHlsYWIoInBlcmNlaXZlZCBjb250cm9sIikgKyB4bGFiKCJncm91cCB4IGNvbmRpdGlvbiIpICsgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X2JsYW5rKCkpICsgdGhlbWVfcHVicigpICsgZmFjZXRfd3JhcCh+Y29uZGl0aW9uKSAKcDEKCnAxIDwtIGdncGxvdChsb25nX2RhdGEsIGFlcyhjb2xvcj1ncm91cCwgeT1tZWFuX1JULCB4PWdyb3VwKSkgKyAKICBnZW9tX2JveHBsb3QoKSArIGdlb21fcG9pbnQoKSArICBnZW9tX2ppdHRlcih3aWR0aCA9IDAuMSkgKyBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzPWMoIiMwMEJBMzgiLCIjNjE5Q0ZGIiwiI0Y4NzY2RCIpKSArIAogIHlsYWIoInJlYWN0aW9uIHRpbWUiKSArIHhsYWIoImNvbmRpdGlvbiIpICsgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X2JsYW5rKCkpICsgdGhlbWVfcHVicigpICsgZmFjZXRfd3JhcCh+Y29uZGl0aW9uKSAKcDEKCmBgYAojIyBEZW1vZ3JhcGhpY3MKCiMjIyMjIFNleAoKbiA9IDU2IHBhcnRpY2lwYW50cyB0b3RhbCwgb2Ygd2hpY2ggOSAoMTYlKSBhcmUgZmVtYWxlLgoKVGhlcmUgYXJlIDE0IGluIHRoZSBQVFNEIGdyb3VwICgyIHdvbWVuKSwgMTYgTG93LWV4cG9zZWQgKDQgd29tZW4pLCBhbmQgMjYgUmVzaWxpZW50ICgzIHdvbWVuKS4KCiMjIyMjIEFnZQoKKiBQVFNEOiBNZWFuIChNKSA9IDU0LjE1LCBTdGFuZGFyZCBEZXZpYXRpb24gKFNEKSA9IDYuMjAKKiBMb3ctZXhwb3NlZDogTSA9IDUxLjQ3LCBTRCA9IDYuMjEKKiBQVFNEOiBNID0gNTQuMzUsIFNEIChTRCkgPSA0LjUzCgoKIyMjIyBJbmNvbWUKCiogSW5jb21lIChhbm51YWwpIGJyYWNrZXRzOiA8YCQ4MGtgLCBgJDgwLTExMGtgLCBgJDExMC0xMzBrYCwgYCQxMzBrK2AKICAqIE9yaWdpbmFsIGFuc3dlciBjaG9pY2VzIGxpc3RlZCBpbmNvbWUgaW4gfjEwayBpbnRlcnZhbHMsIGJ1dCBub3QgZXZlcnkgaW5jb21lIGxldmVsIHdhcyByZXByZXNlbnRlZCBpbiBldmVyeSBncm91cCBzbyB3ZSBjb25kZW5zZWQgdGhlbSBpbnRvIDQgY2F0ZWdvcmllcyBpbnN0ZWFkIG9mIDE2CgoqIEdyb3VwcyBkbyBub3Qgc2lnbmlmaWNhbnRseSBkaWZmZXIgb24gYW5udWFsIGluY29tZSAodXNpbmcgdGhlIDQgY2F0ZWdvcmllcyBhYm92ZSksIGJhc2VkIG9uIENoaSBzcXVhcmUgdGVzdCBkYXRhIChYLXNxdWFyZWQgPSAxMC41MzMsIHAtdmFsdWUgPi4xMCkKCgpgYGB7cn0KCmxvbmdfZGF0YSAlPiUgZGlzdGluY3QoaWQsIC5rZWVwX2FsbCA9IFRSVUUpICU+JSBncm91cF9ieShncm91cCkgJT4lIGNvdW50KCkKCmxvbmdfZGF0YSAlPiUgZGlzdGluY3QoaWQsIC5rZWVwX2FsbCA9IFRSVUUpICU+JSBncm91cF9ieShncm91cCkgJT4lIHN1bW1hcmlzZShtZWFuKG5hLm9taXQoYWdlX3Zpc2l0MSkpLCBzZChuYS5vbWl0KGFnZV92aXNpdDEpKSwgc3VtKG5hLm9taXQoZ2VuZGVyXzFpc0YpKSkKCmluY29tZSA8LSBsb25nX2RhdGEgJT4lIGRpc3RpbmN0KGlkLCAua2VlcF9hbGwgPSBUUlVFKSAKY2hpc3EudGVzdChpbmNvbWUkZ3JvdXAsaW5jb21lJGluY29tZSwgc2ltdWxhdGUucC52YWx1ZSA9IFRSVUUpCmBgYAoKClRoZSB0YWJsZSBiZWxvdyBsaXN0cyBpbmNvbWUgaW4gZWFjaCBncm91cC4gV2Ugc2VlIHRoYXQgNTAlIG9mIHRoZSBMb3ctZXhwb3NlZCBhbmQgNDIlIG9mIHRoZSBSZXNpbGllbnQgZ3JvdXAgaGF2ZSBhbiBhbm51YWwgaG91c2Vob2xkIGluY29tZSBvZiBgJDEzMGtgIG9yIG1vcmUsIHdoZXJlYXMgb25seSAxNCUgb2YgdGhlIFBUU0QgZ3JvdXAgYXJlIGluIHRoYXQgY2F0ZWdvcnkuIENvbnZlcnNlbHksIDQzJSBvZiB0aGUgUFRTRCBncm91cCBoYXZlIGFuIGFubnVhbCBob3VzZWhvbGQgaW5jb21lIG9mIGAkODBrYCBvciBsZXNzLgoKYGBge3J9CmxpYnJhcnkoZm9yY2F0cykKaW5jb21lIDwtIGxvbmdfZGF0YSAlPiUgZGlzdGluY3QoaWQsIC5rZWVwX2FsbCA9IFRSVUUpIAoKaW5jb21lIDwtaW5jb21lICU+JSBncm91cF9ieShncm91cCkgJT4lIGNvdW50KGluY29tZSkgJT4lCiAgbXV0YXRlKGAoXFwlKWAgPSBwcm9wLnRhYmxlKG4pKjEwMCkgJT4lIG11dGF0ZShpbmNvbWUgPSBmY3RfcmVsZXZlbChpbmNvbWUsIjw9JDgwayIsIiQ4MC0xMTBrIiwgIiQxMTAtMTMwayIsIiQxMzBrKyIpKQoKcDEgPC0gZ2dwbG90KGluY29tZSwgYWVzKGZpbGw9Z3JvdXAsIHk9YChcXCUpYCwgeCA9aW5jb21lKSkgKyAKICBnZW9tX2NvbCgpICsgCnNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXM9YygiIzAwQkEzOCIsIiM2MTlDRkYiLCIjRjg3NjZEIikpICsgCiAgeWxhYigiJSIpICsgeGxhYigiIikgKyB0aGVtZV9wdWJjbGVhbigpICsgZmFjZXRfZ3JpZCh+Z3JvdXApICsKICB0aGVtZSgKICAgIHBhbmVsLnNwYWNpbmcgPSB1bml0KDAsICdwdCcpLAogICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZT0xMSxhbmdsZT0yNSx2anVzdD0uNSxmYWNlID0gImJvbGQiKSkgCnAxCgpgYGAKCmBgYHtyIGV2YWw9RkFMU0UsIGVjaG89RkFMU0V9CmRhdGEgPC0gbGVmdF9qb2luKGRhdGEsY2xpbixieT0iaWQiKQpkYXRhIDwtIGRhdGEgJT4lIG11dGF0ZShwdHNkX2N0bCA9IGlmX2Vsc2UoZ3JvdXA9PSJQVFNEIiwgMSwgMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNvbWUgPSByZWNvZGVfZmFjdG9yKGluY29tZUxldmVsLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiA9ICI8PSQzMGsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiID0gIjw9JDMwayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMyIgPSAiPD0kMzBrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICI0IiA9ICIkMzAtNTBrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICI1IiA9ICIkMzAtNTBrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICI2IiA9ICIkNTAtODBrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICI3IiA9ICIkNTAtODBrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICI4IiA9ICIkNTAtODBrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICI5IiA9ICIkODAtMTAwayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTAiID0gIiQ4MC0xMDBrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxMSIgPSAiJDEwMC0xMzBrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxMiIgPSAiJDEwMC0xMzBrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxMyIgPSAiJDEwMC0xMzBrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxNCIgPSAiJDEzMGsrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxNSIgPSAiJDEzMGsrIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jb21lID0gcmVjb2RlX2ZhY3RvcihpbmNvbWVMZXZlbCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgPSAiPD0kODBrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiA9ICI8PSQ4MGsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIjMiID0gIjw9JDgwayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNCIgPSAiPD0kODBrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICI1IiA9ICI8PSQ4MGsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIjYiID0gIjw9JDgwayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNyIgPSAiPD0kODBrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICI4IiA9ICI8PSQ4MGsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIjkiID0gIiQ4MC0xMTBrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxMCIgPSAiJDgwLTExMGsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIjExIiA9ICIkODAtMTEwayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTIiID0gIiQxMTAtMTMwayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTMiID0gIiQxMTAtMTMwayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTQiID0gIiQxMzBrKyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTUiID0gIiQxMzBrKyIpKQoKbGlicmFyeShsbWU0KQpsaWJyYXJ5KGxtZXJUZXN0KQptMSA8LSBsbWVyKFJUIH4gZ3JvdXAqY29uZGl0aW9uICsgKDEgfCBpZCksIGRhdGEgPSBkYXRhKQpzdW1tYXJ5KG0xKQooYW92IDwtIGFub3ZhKG0xKSkKCiMjIEluc3BlY3QgdGhlIGNvbnRyYXN0IG1hdHJpeCBmb3IgdGhlIFR5cGUgSUlJIHRlc3Qgb2YgUHJvZHVjdDoKc2hvd190ZXN0cyhhb3YsIGZyYWN0aW9ucyA9IFRSVUUpJGNvbmRpdGlvbgojIyBBbm92YS1saWtlIHRhYmxlIG9mIHJhbmRvbS1lZmZlY3QgdGVybXMgdXNpbmcgbGlrZWxpaG9vZCByYXRpbyB0ZXN0czoKcmFub3ZhKG0xKQoKIyMgRi10ZXN0cyBvZiAnc2luZ2xlIHRlcm0gZGVsZXRpb25zJyBmb3IgYWxsIG1hcmdpbmFsIHRlcm1zOgpkcm9wMShtMSkKCiMjIExlYXN0LVNxdWFyZSBtZWFucyBhbmQgcGFpcndpc2UgZGlmZmVyZW5jZXM6Cihsc20gPC0gbHNfbWVhbnMobTEpKQpsc19tZWFucyhtMSwgd2hpY2ggPSAiY29uZGl0aW9uIiwgcGFpcndpc2UgPSBUUlVFKQoKIyMgbHNfbWVhbnMgYWxzbyBoYXZlIHBsb3QgYW5kIGFzLmRhdGEuZnJhbWUgbWV0aG9kczoKIyMgTm90IHJ1bjogCnBsb3QobHNtLCB3aGljaD1jKCJncm91cCIsICJjb25kaXRpb24iKSkKYXMuZGF0YS5mcmFtZShsc20pCiMjIEluc3BlY3QgdGhlIExTLW1lYW5zIGNvbnRyYXN0czoKc2hvd190ZXN0cyhsc20sIGZyYWN0aW9ucz1UUlVFKSRQcm9kdWN0CgojIyBFbmQoTm90IHJ1bikKCiMjIENvbnRyYXN0IHRlc3QgKGNvbnRlc3QpIHVzaW5nIGEgY3VzdG9tIGNvbnRyYXN0OgojIyBIZXJlIHdlIG1ha2UgdGhlIDItZGYgam9pbnQgdGVzdCBvZiB0aGUgbWFpbiBlZmZlY3RzIG9mIEdlbmRlciBhbmQgSW5mb3JtYXRpb24KKEwgPC0gZGlhZyhsZW5ndGgoZml4ZWYobTEpKSlbMjozLCBdKQpjb250ZXN0KG0xLCBMID0gTCkKCiMjIGJhY2t3YXJkIGVsaW1pbmF0aW9uIG9mIG5vbi1zaWduaWZpY2FudCBlZmZlY3RzOgpzdGVwX3Jlc3VsdCA8LSBzdGVwKG0xKQoKIyMgRWxpbWluYXRpb24gdGFibGVzIGZvciByYW5kb20tIGFuZCBmaXhlZC1lZmZlY3QgdGVybXM6CnN0ZXBfcmVzdWx0CgojIEV4dHJhY3QgdGhlIG1vZGVsIHRoYXQgc3RlcCBmb3VuZDoKZmluYWxfbW9kZWwgPC0gZ2V0X21vZGVsKHN0ZXBfcmVzdWx0KQpzdW1tYXJ5KGZpbmFsX21vZGVsKQoKc3VtbWFyeShtMSkgICAKY29uZmludChtMSkKCiMgdmFyaWFuY2UgZXhwbGFpbmVkIGJ5IHRoZSBlbnRpcmUgbW9kZWwgCmZpdHRlZF9tMSA8LSBmaXR0ZWQobTEpCmRhdGFfYmlhcyRmaXR0ZWRfcTNsbWUgPC0gYXMudmVjdG9yKGZpdHRlZF9xM2xtZSkKZm9yUjIgPC0gbG0oZ0FBVF9iaWFzIH4gZml0dGVkX3EzbG1lLCBkYXRhPWRhdGFfYmlhcykKc3VtbWFyeShmb3JSMikgCgptMSA8LSBsbWVyKHBlcmNlaXZlZF9jb250cm9sIH4gcHRzZF9jdGwgKiBjb25kaXRpb24gKyAoMSB8IGlkKSwgZGF0YSA9IGxvbmdfZGF0YSkKc3VtbWFyeShtMSkgICAgIAogICAgICAgICAgIAptMSA8LSBsbWUocGVyY2VpdmVkX2NvbnRyb2wgfiBDQVBTNV9QTV90b3RhbCAqIGNvbmRpdGlvbiArIGluY29tZSwgcmFuZG9tPSB+MXxpZCwgbmEub21pdChkYXRhTG9uZzIpLCBtZXRob2Q9IlJFTUwiKQpzdW1tYXJ5KG0xKQpBbm92YShtMSkKCnBsb3QobG9uZ19kYXRhJENBUFM1X1BNX3RvdGFsLGxvbmdfZGF0YSRwZXJjZWl2ZWRfY29udHJvbCkKcGxvdChsb25nX2RhdGEkQ0FQUzVfUE1fdG90YWwsbG9uZ19kYXRhJHBlcmNlbnRfYWNjZXB0KQpwbG90KGxvbmdfZGF0YSRDQVBTNV9QTV90b3RhbCxsb25nX2RhdGEkbWVhbl9vZmZlcl9hY2NlcHQpCgppbmNfZGF0YSA8LSBsb25nX2RhdGEoKQoKcTEgPC0gYW92X2V6KGlkID0gImlkIiwgZHYgPSAibWVhbl9vZmZlcl9hY2NlcHQiLCBsb25nX2RhdGEsIHdpdGhpbiA9ICJjb25kaXRpb24iLCBiZXR3ZWVuPWMoImdyb3VwIiksIGNvdmFyaWF0ZSA9ICJpbmNvbWVMZXZlbCIpCnN1bW1hcnkocTEpCiMgdmFyaWFuY2UgZXhwbGFpbmVkIGJ5IHRoZSBlbnRpcmUgbW9kZWwgCmZpdHRlZF9xMSA8LSBmaXR0ZWQocTEpCmRhdGFfYmlhcyRmaXR0ZWRfcTNsbWUgPC0gYXMudmVjdG9yKGZpdHRlZF9xM2xtZSkKZm9yUjIgPC0gbG0oZ0FBVF9iaWFzIH4gZml0dGVkX3EzbG1lLCBkYXRhPWRhdGFfYmlhcykKc3VtbWFyeShmb3JSMikgCgoKcTEgPC0gYW92X2V6KGlkID0gImlkIiwgZHYgPSAibWVhbl9vZmZlcl9hY2NlcHQiLCBsb25nX2RhdGEsIHdpdGhpbiA9IGMoImNvbmRpdGlvbiIpLCBiZXR3ZWVuPWMoImdyb3VwIiksIGNvdmFyaWF0ZSA9ICJpbmNvbWVMZXZlbCIpCgojIyBlZmZlY3Qgb2YgdGltZT8/CmRhdGFfaWM8LSBkYXRhICU+JSBmaWx0ZXIoY29uZGl0aW9uPT0iSUMiKQpxMSA8LSBsbShvZmZlciB+IGdyb3VwKnRyaWFsLGRhdGFfaWMpCnN1bW1hcnkocTEpCmRhdGFfbmM8LSBkYXRhICU+JSBmaWx0ZXIoY29uZGl0aW9uPT0iTkMiKQpxMSA8LSBsbShvZmZlciB+IGdyb3VwKnRyaWFsLGRhdGFfaWMpCnN1bW1hcnkocTEpCgpxMSA8LSBsbShjaG9pY2UgfiBncm91cCp0cmlhbCxkYXRhX2ljKQpzdW1tYXJ5KHExKQpxMSA8LSBsbShjaG9pY2UgfiBncm91cCp0cmlhbCxkYXRhX2ljKQpzdW1tYXJ5KHExKQoKbGlicmFyeShsbWU0KQpsaWJyYXJ5KGxtZXJUZXN0KQptMSA8LSBsbWVyKFJUIH4gZ3JvdXAqY29uZGl0aW9uKnRyaWFsICsgKDEgfCBpZCksIGRhdGEgPSBkYXRhKQpzdW1tYXJ5KG0xKQooYW92IDwtIGFub3ZhKG0xKSkKYGBgCg==