Question #79 Do you
experience joint pain and body aches?
A Chi-square test of independence was conducted to assess the
relationship between experiencing joint aches and pain and menopausal
status. A statistically significant association was found,
X2(df=2)=42.999, p<.00001. Cramer’s V was moderate at V=0.11, 95%
CI(0.073, 0.133).
Yes No Prefer Not to Answer
3210 931 0
<NA>
7
status
aches pre-menopause peri-menopause post-menopause
Yes 328 1421 1461
No 167 400 364
status
aches pre-menopause peri-menopause post-menopause
Yes 0.6626263 0.7803405 0.8005479
No 0.3373737 0.2196595 0.1994521
Pearson's Chi-squared test
data: x
X-squared = 42.999, df = 2, p-value = 0.0000000004602
Two-sided 95% chi-squared confidence interval for the population
Cramer's V
Sample estimate: 0.1019003
Confidence interval:
2.5% 97.5%
0.07338194 0.13313993
Pairwise comparisons using Pairwise comparison of proportions
data: b$num out of b$den
1 2
2 0.00000018386 -
3 0.00000000041 0.14
P value adjustment method: holm
Question #80 Please
rate the extent to which the joint pain/aches negatively impact your
training
A chi-square goodness-of-fit test was conducted to examine who
said “Often/Always” to Q79 were equally distributed across three stages.
The results indicated that the observed frequencies differed
significantly from the expected frequencies, χ²(2) = 23.515, p
=.0000078. Cramer’s V was small at V=0.09, 95% CI(0.055, 0.121).
Additionally, A chi-square goodness-of-fit test was conducted to
examine who said “Rarely/Never” to Q79 were equally distributed across
three stages. The results indicated that the observed frequencies
differed significantly from the expected frequencies, χ²(2) = 17.776,
p=.000138. Cramer’s V was small at V=0.11, 95% CI(0.044,
0.110).
Never Rarely Sometimes Often Always <NA>
72 805 1481 627 225 938
pre-menopause peri-menopause post-menopause <NA>
496 1823 1829 0
status
aches_imp pre-menopause peri-menopause post-menopause
Never 0.02439024 0.02463054 0.01984942
Rarely 0.33841463 0.22378607 0.25735797
Sometimes 0.48170732 0.46586911 0.45242984
Often 0.10670732 0.21534131 0.19575633
Always 0.04878049 0.07037298 0.07460643
status
aches_imp pre-menopause peri-menopause post-menopause
Never 8 35 29
Rarely 111 318 376
Sometimes 158 662 661
Often 35 306 286
Always 16 100 109
Oftenalways other
852 2358
status
achesimp pre-menopause peri-menopause post-menopause
Oftenalways 51 406 395
other 277 1015 1066
Pearson's Chi-squared test
data: x
X-squared = 23.515, df = 2, p-value = 0.000007829
Two-sided 95% chi-squared confidence interval for the population
Cramer's V
Sample estimate: 0.08559009
Confidence interval:
2.5% 97.5%
0.05462145 0.12123391
Pairwise comparisons using Pairwise comparison of proportions
data: b$num out of b$den
1 2
2 0.0000056 -
3 0.0000382 0.38
P value adjustment method: holm
other rarelynever
2333 877
status
achesimp pre-menopause peri-menopause post-menopause
other 209 1068 1056
rarelynever 119 353 405
Pearson's Chi-squared test
data: x
X-squared = 17.776, df = 2, p-value = 0.000138
Two-sided 95% chi-squared confidence interval for the population
Cramer's V
Sample estimate: 0.07441656
Confidence interval:
2.5% 97.5%
0.04451325 0.11013040
Pairwise comparisons using Pairwise comparison of proportions
data: b$num out of b$den
1 2
2 0.00011 -
3 0.00520 0.08675
P value adjustment method: holm
Question #81 . Do you
have frozen shoulder?
A Chi-square test of independence was conducted to assess the
relationship between frozen shoulder and menopausal status. A
statistically significant association was found, X2(df=2)=22.605,
p=.00015. Cramer’s V was small at V=0.052, 95% CI(0.0339,
0.0741).
Yes No I don't know
328 3598 222
Prefer Not to Answer <NA>
0 0
status
frozen pre-menopause peri-menopause post-menopause
I don't know 36 109 77
No 441 1553 1604
Yes 19 161 148
status
frozen pre-menopause peri-menopause post-menopause
I don't know 0.07258065 0.05979155 0.04209951
No 0.88911290 0.85189248 0.87698196
Yes 0.03830645 0.08831596 0.08091853
Pearson's Chi-squared test
data: x
X-squared = 22.605, df = 4, p-value = 0.0001518
Two-sided 95% chi-squared confidence interval for the population
Cramer's V
Sample estimate: 0.05220021
Confidence interval:
2.5% 97.5%
0.03388257 0.07406649
Pairwise comparisons using Pairwise comparison of proportions
data: b$num out of b$den
1 2
2 0.00097 -
3 0.00313 0.45706
P value adjustment method: holm
Question #82 Please
rate the extent to which frozen shoulder negatively impact your
training.
A chi-square goodness-of-fit test was conducted to examine who
said “Often/Always” to Q81 were equally distributed across three stages.
The results indicated that the observed frequencies did not differ
significantly from the expected frequencies, χ²(2) = 4.497, p =.1056.
Additionally, A chi-square goodness-of-fit test was conducted to
examine who said “Rarely/Never” to Q81 were equally distributed across
three stages. The results indicated that the observed frequencies did
not differ significantly from the expected frequencies, χ²(2) = 1.1287,
p=.5687.
Never Rarely Sometimes Often Always <NA>
7 36 140 97 48 3820
status
fr_impact pre-menopause peri-menopause post-menopause
Never 0.05263158 0.01863354 0.02027027
Rarely 0.15789474 0.10559006 0.10810811
Sometimes 0.57894737 0.42857143 0.40540541
Often 0.21052632 0.30434783 0.29729730
Always 0.00000000 0.14285714 0.16891892
status
fr_impact pre-menopause peri-menopause post-menopause
Never 1 3 3
Rarely 3 17 16
Sometimes 11 69 60
Often 4 49 44
Always 0 23 25
pre-menopause peri-menopause post-menopause <NA>
19 161 148 0
Oftenalways other
145 183
status
frozenimp pre-menopause peri-menopause post-menopause
Oftenalways 4 72 69
other 15 89 79
Pearson's Chi-squared test
data: x
X-squared = 4.497, df = 2, p-value = 0.1056
Two-sided 95% chi-squared confidence interval for the population
Cramer's V
Sample estimate: 0.1170919
Confidence interval:
2.5% 97.5%
0.0000000 0.2293522
other rarelynever
285 43
status
frozenimp pre-menopause peri-menopause post-menopause
other 15 141 129
rarelynever 4 20 19
Pearson's Chi-squared test
data: x
X-squared = 1.1287, df = 2, p-value = 0.5687
status
frozenimp pre-menopause peri-menopause post-menopause
other 16.509146 139.89329 128.59756
rarelynever 2.490854 21.10671 19.40244
Two-sided 95% chi-squared confidence interval for the population
Cramer's V
Sample estimate: 0.0586614
Confidence interval:
2.5% 97.5%
0.0000000 0.1690329
Question #83. Do you
have plantar fasciitis?
A Chi-square test of independence was conducted to assess the
relationship between plantar fasciitis frozen shoulder and menopausal
status. A statistically significant association was found,
X2(df=4)=21.506, p=.00025. Cramer’s V was small at V=0.051, 95%
CI(0.0328, 0.0728).
I don't know No Prefer not to answer
124 3489 1
Yes <NA>
534 0
1 2 4 <NA>
534 3489 124 0
I don't know No Yes
124 3489 534
status
plantar pre-menopause peri-menopause post-menopause
I don't know 21 70 33
No 413 1496 1580
Yes 61 257 216
status
plantar pre-menopause peri-menopause post-menopause
I don't know 0.04242424 0.03839824 0.01804265
No 0.83434343 0.82062534 0.86386003
Yes 0.12323232 0.14097641 0.11809732
Pearson's Chi-squared test
data: x
X-squared = 21.506, df = 4, p-value = 0.0002513
Two-sided 95% chi-squared confidence interval for the population
Cramer's V
Sample estimate: 0.05092122
Confidence interval:
2.5% 97.5%
0.03276740 0.07278492
Pairwise comparisons using Pairwise comparison of proportions
data: b$num out of b$den
1 2
2 0.69 -
3 0.81 0.13
P value adjustment method: holm
Question #84. Please
rate the extent to which the plantar fasciitis negatively impact your
training.
A chi-square goodness-of-fit test was conducted to examine who
said “Often/Always” to Q84 were equally distributed across three stages.
The results indicated that the observed frequencies differed
significantly from the expected frequencies, χ²(2) = 7.4466, p =.02415.
Cramer’s V was moderate at V=0.11, 95% CI(0.061, 0.206).
Additionally, A chi-square goodness-of-fit test was conducted to
examine who said “Rarely/Never” to Q84 were equally distributed across
three stages. The results indicated that the observed frequencies did
not differ significantly from the expected frequencies, χ²(2) = 3.4859,
p=.175. Cramer’s V was small at V=0.08, 95% CI(0.000, 0.169).
Never Rarely Sometimes Often Always <NA>
21 166 222 96 29 3614
status
pf_impact pre-menopause peri-menopause post-menopause
Never 0.04918033 0.01945525 0.06018519
Rarely 0.36065574 0.29182879 0.31944444
Sometimes 0.45901639 0.40856031 0.41203704
Often 0.08196721 0.22957198 0.14814815
Always 0.04918033 0.05058366 0.06018519
status
pf_impact pre-menopause peri-menopause post-menopause
Never 3 5 13
Rarely 22 75 69
Sometimes 28 105 89
Often 5 59 32
Always 3 13 13
pre-menopause peri-menopause post-menopause <NA>
61 257 216 0
Oftenalways other
125 409
status
plantarimp pre-menopause peri-menopause post-menopause
Oftenalways 8 72 45
other 53 185 171
Pearson's Chi-squared test
data: x
X-squared = 7.4466, df = 2, p-value = 0.02415
Two-sided 95% chi-squared confidence interval for the population
Cramer's V
Sample estimate: 0.1180888
Confidence interval:
2.5% 97.5%
0.06148507 0.20603650
Pairwise comparisons using Pairwise comparison of proportions
data: b$num out of b$den
1 2
2 0.074 -
3 0.242 0.180
P value adjustment method: holm
other rarelynever
347 187
status
plantarimp pre-menopause peri-menopause post-menopause
other 36 177 134
rarelynever 25 80 82
Pearson's Chi-squared test
data: x
X-squared = 3.4859, df = 2, p-value = 0.175
Two-sided 95% chi-squared confidence interval for the population
Cramer's V
Sample estimate: 0.08079535
Confidence interval:
2.5% 97.5%
0.0000000 0.1687117
Question #85. How often
do you alter your training program due to joint pain, frozen shoulder,
etc.
A chi-square goodness-of-fit test was conducted to examine who
said “Often/Always” to Q85 were equally distributed across three stages.
The results indicated that the observed frequencies differed
significantly from the expected frequencies, χ²(2) = 10.118, p =
.006352. Cramer’s V was small at V=0.06, 95% CI(0.030, 0.091).
Additionally, A chi-square goodness-of-fit test was conducted to
examine who said “Rarely/Never” to Q84 were equally distributed across
three stages. The results indicated that the observed frequencies did
not differ significantly from the expected frequencies, χ²(2) = 3.4859,
p= .175. Cramer’s V was small at V=0.08, 95% CI(0.000, 0.169).
Never Rarely Sometimes Often Always <NA>
181 1133 1321 485 175 853
status
aches_alter pre-menopause peri-menopause post-menopause
Never 0.10233918 0.05259563 0.04633983
Rarely 0.37719298 0.33948087 0.34049698
Sometimes 0.38304094 0.39412568 0.41168570
Often 0.10233918 0.16256831 0.14237743
Always 0.03508772 0.05122951 0.05910007
status
aches_alter pre-menopause peri-menopause post-menopause
Never 35 77 69
Rarely 129 497 507
Sometimes 131 577 613
Often 35 238 212
Always 12 75 88
Oftenalways other
660 2635
status
achesimp pre-menopause peri-menopause post-menopause
Oftenalways 47 313 300
other 295 1151 1189
Pearson's Chi-squared test
data: x
X-squared = 10.118, df = 2, p-value = 0.006352
Two-sided 95% chi-squared confidence interval for the population
Cramer's V
Sample estimate: 0.05541411
Confidence interval:
2.5% 97.5%
0.02950641 0.09077899
Pairwise comparisons using Pairwise comparison of proportions
data: b$num out of b$den
1 2
2 0.0057 -
3 0.0161 0.4354
P value adjustment method: holm
other rarelynever
347 187
status
achesimp pre-menopause peri-menopause post-menopause
other 36 177 134
rarelynever 25 80 82
Pearson's Chi-squared test
data: x
X-squared = 3.4859, df = 2, p-value = 0.175
Two-sided 95% chi-squared confidence interval for the population
Cramer's V
Sample estimate: 0.08079535
Confidence interval:
2.5% 97.5%
0.0000000 0.1687117
Question #86. From one
workout to the next, how often do you feel fully recovered?
A chi-square goodness-of-fit test was conducted to examine who
said “Often/Always” to Q86 were equally distributed across three stages.
The results indicated that the observed frequencies differed
significantly from the expected frequencies, χ²(2) = 44.517,
p<.000001. Cramer’s V was moderate at V=0.10, 95% CI(0.075,
0.135).
Additionally, A chi-square goodness-of-fit test was conducted to
examine who said “Rarely/Never” to Q86 were equally distributed across
three stages. The results indicated that the observed frequencies
differed significantly from the expected frequencies, χ²(2) = 17.739, p=
.00014. Cramer’s V was small at V=0.07, 95% CI(0.039, 0.097)
Never Rarely Sometimes Often Always <NA>
41 372 1365 2044 326 0
status
recover pre-menopause peri-menopause post-menopause
Never 0.008064516 0.013165112 0.007107709
Rarely 0.052419355 0.105869446 0.083652269
Sometimes 0.298387097 0.366428963 0.300164024
Often 0.580645161 0.458584750 0.503007108
Always 0.060483871 0.055951728 0.106068890
status
recover pre-menopause peri-menopause post-menopause
Never 4 24 13
Rarely 26 193 153
Sometimes 148 668 549
Often 288 836 920
Always 30 102 194
Oftenalways other
2370 1778
status
rec pre-menopause peri-menopause post-menopause
Oftenalways 318 938 1114
other 178 885 715
Pearson's Chi-squared test
data: x
X-squared = 44.517, df = 2, p-value = 0.0000000002155
Two-sided 95% chi-squared confidence interval for the population
Cramer's V
Sample estimate: 0.1035956
Confidence interval:
2.5% 97.5%
0.07505037 0.13480054
Pairwise comparisons using Pairwise comparison of proportions
data: b$num out of b$den
1 2
2 0.000001367 -
3 0.22 0.000000028
P value adjustment method: holm
other rarelynever
3735 413
status
rec pre-menopause peri-menopause post-menopause
other 466 1606 1663
rarelynever 30 217 166
Pearson's Chi-squared test
data: x
X-squared = 17.739, df = 2, p-value = 0.0001406
Two-sided 95% chi-squared confidence interval for the population
Cramer's V
Sample estimate: 0.06539596
Confidence interval:
2.5% 97.5%
0.03909832 0.09681374
Pairwise comparisons using Pairwise comparison of proportions
data: b$num out of b$den
1 2
2 0.00074 -
3 0.03927 0.01250
P value adjustment method: holm
Question #87. Do you
experience urinary incontinence?
A Chi-square test of independence was conducted to assess the
relationship between incontinence and menopausal status. A statistically
significant association was not found, X2(df=2)=21.699, p=.000019.
Cramer’s V was small at V=0.07, 95% CI(0.0454, 0.1038).
Yes No Prefer Not to Answer
1526 2614 0
<NA>
8
status
incont pre-menopause peri-menopause post-menopause
No 351 1094 1169
Yes 142 727 657
status
incont pre-menopause peri-menopause post-menopause
No 0.7119675 0.6007688 0.6401972
Yes 0.2880325 0.3992312 0.3598028
Pearson's Chi-squared test
data: x
X-squared = 21.699, df = 2, p-value = 0.00001942
Two-sided 95% chi-squared confidence interval for the population
Cramer's V
Sample estimate: 0.07239642
Confidence interval:
2.5% 97.5%
0.04536575 0.10380066
Pairwise comparisons using Pairwise comparison of proportions
data: b$num out of b$den
1 2
2 0.000023 -
3 0.007 0.016
P value adjustment method: holm
Question #88. What do
you believe was the cause of your urinary incontinence?
A Chi-square test of independence was conducted to assess the
relationship between menopausal status and Q88 response. A statistically
significant association was found, X2(df=2)=107.1, p<.00001. Cramer’s
V was moderate at V=0.19, 95% CI(0.153, 0.223).
1 2 3 4
508 693 104 221
Menopause Childbirth Other I don't know <NA>
508 693 104 221 2622
status
cause pre-menopause peri-menopause post-menopause
Childbirth 90 367 236
I don't know 34 109 78
Menopause 9 200 299
Other 9 51 44
status
cause pre-menopause peri-menopause post-menopause
Childbirth 0.63380282 0.50481431 0.35920852
I don't know 0.23943662 0.14993122 0.11872146
Menopause 0.06338028 0.27510316 0.45509893
Other 0.06338028 0.07015131 0.06697108
Pearson's Chi-squared test
data: x
X-squared = 107.1, df = 6, p-value < 0.00000000000000022
Two-sided 95% chi-squared confidence interval for the population
Cramer's V
Sample estimate: 0.1873243
Confidence interval:
2.5% 97.5%
0.1534578 0.2232019


Question #89. Please
rate the extent to which urinary incontinence impacts your desire to
engage in exercise.
A chi-square goodness-of-fit test was conducted to examine who
said “Often/Always” to Q89 were equally distributed across three stages.
The results indicated that the observed frequencies differed
significantly from the expected frequencies, χ²(2) = 8.3636, p = .01527.
Cramer’s V was small at V=0.074, 95% CI(0.039, 0.126).
Additionally, A chi-square goodness-of-fit test was conducted to
examine who said “Rarely/Never” to Q89 were equally distributed across
three stages. The results indicated that the observed frequencies did
not differ significantly from the expected frequencies, χ²(2) = 2.3826,
p= .3038.Cramer’s V was small at V=0.04, 95% CI(0.000, 0.091)
Never Rarely Sometimes Often Always <NA>
492 563 311 124 36 2622
status
in_impact pre-menopause peri-menopause post-menopause
Never 0.32394366 0.29848693 0.34855403
Rarely 0.37323944 0.37414030 0.36225266
Sometimes 0.19014085 0.20082531 0.21004566
Often 0.08450704 0.10178817 0.05783866
Always 0.02816901 0.02475928 0.02130898
status
in_impact pre-menopause peri-menopause post-menopause
Never 46 217 229
Rarely 53 272 238
Sometimes 27 146 138
Often 12 74 38
Always 4 18 14
Oftenalways other
160 1366
status
incimp pre-menopause peri-menopause post-menopause
Oftenalways 16 92 52
other 126 635 605
Pearson's Chi-squared test
data: x
X-squared = 8.3636, df = 2, p-value = 0.01527
Two-sided 95% chi-squared confidence interval for the population
Cramer's V
Sample estimate: 0.07403208
Confidence interval:
2.5% 97.5%
0.03867997 0.12603885
Pairwise comparisons using Pairwise comparison of proportions
data: b$num out of b$den
1 2
2 0.750 -
3 0.515 0.016
P value adjustment method: holm
other rarelynever
471 1055
status
incimp pre-menopause peri-menopause post-menopause
other 43 238 190
rarelynever 99 489 467
Pearson's Chi-squared test
data: x
X-squared = 2.3825, df = 2, p-value = 0.3038
Two-sided 95% chi-squared confidence interval for the population
Cramer's V
Sample estimate: 0.03951297
Confidence interval:
2.5% 97.5%
0.00000000 0.09138077
LS0tDQp0aXRsZTogIkZGTVMgTWFudXNjcmlwdCAzIFN0YXRpc3RpY2FsIEFuYWx5c2lzIg0KYXV0aG9yOiAiIg0KZGF0ZTogIiINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDogDQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZGVwdGg6IDQNCiAgICB0b2NfZmxvYXQ6IHllcw0KICAgIG51bWJlcl9zZWN0aW9uczogeWVzDQogICAgdG9jX2NvbGxhcHNlZDogeWVzDQogICAgY29kZV9mb2xkaW5nOiBoaWRlDQogICAgY29kZV9kb3dubG9hZDogeWVzDQogICAgc21vb3RoX3Njcm9sbDogeWVzDQogICAgdGhlbWU6IGx1bWVuDQogIHBkZl9kb2N1bWVudDogDQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZGVwdGg6IDQNCiAgICBmaWdfY2FwdGlvbjogeWVzDQogICAgbnVtYmVyX3NlY3Rpb25zOiB5ZXMNCiAgICBmaWdfd2lkdGg6IDMNCiAgICBmaWdfaGVpZ2h0OiAzDQogIHdvcmRfZG9jdW1lbnQ6IA0KICAgIHRvYzogeWVzDQogICAgdG9jX2RlcHRoOiA0DQogICAgZmlnX2NhcHRpb246IHllcw0KICAgIGtlZXBfbWQ6IHllcw0KZWRpdG9yX29wdGlvbnM6IA0KICBjaHVua19vdXRwdXRfdHlwZTogaW5saW5lDQotLS0NCg0KYGBge2NzcywgZWNobyA9IEZBTFNFfQ0KI1RPQzo6YmVmb3JlIHsNCiAgY29udGVudDogIlRhYmxlIG9mIENvbnRlbnRzIjsNCiAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogIGZvbnQtc2l6ZTogMS4yZW07DQogIGRpc3BsYXk6IGJsb2NrOw0KICBjb2xvcjogbmF2eTsNCiAgbWFyZ2luLWJvdHRvbTogMTBweDsNCn0NCg0KDQpkaXYjVE9DIGxpIHsgICAgIC8qIHRhYmxlIG9mIGNvbnRlbnQgICovDQogICAgbGlzdC1zdHlsZTp1cHBlci1yb21hbjsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOm5vbmU7DQogICAgYmFja2dyb3VuZC1yZXBlYXQ6bm9uZTsNCiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOjA7DQp9DQoNCmgxLnRpdGxlIHsgICAgLyogbGV2ZWwgMSBoZWFkZXIgb2YgdGl0bGUgICovDQogIGZvbnQtc2l6ZTogMjJweDsNCiAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogIGNvbG9yOiBEYXJrUmVkOw0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogIGZvbnQtZmFtaWx5OiAiR2lsbCBTYW5zIiwgc2Fucy1zZXJpZjsNCn0NCg0KaDQuYXV0aG9yIHsgLyogSGVhZGVyIDQgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8NCiAgZm9udC1zaXplOiAxNXB4Ow0KICBmb250LXdlaWdodDogYm9sZDsNCiAgZm9udC1mYW1pbHk6IHN5c3RlbS11aTsNCiAgY29sb3I6IG5hdnk7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCn0NCg0KaDQuZGF0ZSB7IC8qIEhlYWRlciA0IC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovDQogIGZvbnQtc2l6ZTogMThweDsNCiAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogIGZvbnQtZmFtaWx5OiAiR2lsbCBTYW5zIiwgc2Fucy1zZXJpZjsNCiAgY29sb3I6IERhcmtCbHVlOw0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQp9DQoNCmgxIHsgLyogSGVhZGVyIDEgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8NCiAgICBmb250LXNpemU6IDIwcHg7DQogICAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogICAgY29sb3I6IGRhcmtyZWQ7DQogICAgdGV4dC1hbGlnbjogbGVmdDsNCn0NCg0KaDIgeyAvKiBIZWFkZXIgMiAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLw0KICAgIGZvbnQtc2l6ZTogMThweDsNCiAgICBmb250LXdlaWdodDogYm9sZDsNCiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgICBjb2xvcjogbmF2eTsNCiAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KfQ0KDQpoMyB7IC8qIEhlYWRlciAzIC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovDQogICAgZm9udC1zaXplOiAxNnB4Ow0KICAgIGZvbnQtd2VpZ2h0OiBib2xkOw0KICAgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICAgIGNvbG9yOiBuYXZ5Ow0KICAgIHRleHQtYWxpZ246IGxlZnQ7DQp9DQoNCmg0IHsgLyogSGVhZGVyIDQgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8NCiAgICBmb250LXNpemU6IDE0cHg7DQogIGZvbnQtd2VpZ2h0OiBib2xkOw0KICAgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICAgIGNvbG9yOiBkYXJrcmVkOw0KICAgIHRleHQtYWxpZ246IGxlZnQ7DQp9DQoNCi8qIEFkZCBkb3RzIGFmdGVyIG51bWJlcmVkIGhlYWRlcnMgKi8NCi5oZWFkZXItc2VjdGlvbi1udW1iZXI6OmFmdGVyIHsNCiAgY29udGVudDogIi4iOw0KDQpib2R5IHsgYmFja2dyb3VuZC1jb2xvcjp3aGl0ZTsgfQ0KDQouaGlnaGxpZ2h0bWUgeyBiYWNrZ3JvdW5kLWNvbG9yOnllbGxvdzsgfQ0KDQpwIHsgYmFja2dyb3VuZC1jb2xvcjp3aGl0ZTsgfQ0KDQp9DQpgYGANCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9Rn0NCg0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBGLCBjb21tZW50PU5BLCB3YXJuaW5nPUYsIHJlc3VsdHM9VCwgbWVzc2FnZT1GKQ0KDQpzZXR3ZCgiQzovVXNlcnMvNzVMUFlPVFQvT25lRHJpdmUgLSBXZXN0IENoZXN0ZXIgVW5pdmVyc2l0eSBvZiBQQS9GRk1TIikNCg0KbGlicmFyeShGU0EpDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShrYWJsZUV4dHJhKQ0KbGlicmFyeShzcGxpdHN0YWNrc2hhcGUpDQpsaWJyYXJ5KHN1bW1hcnl0b29scykNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeSh0aWR5cikNCmxpYnJhcnkoVklNKQ0KbGlicmFyeSh6b28pDQpsaWJyYXJ5KGp0b29scykNCmxpYnJhcnkoYnJvb20pDQpsaWJyYXJ5KHZjZCkNCmxpYnJhcnkodmlzZGF0KQ0KbGlicmFyeShza2ltcikNCmxpYnJhcnkoamFuaXRvcikNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoZ21vZGVscykNCmxpYnJhcnkoZHVubi50ZXN0KQ0KbGlicmFyeShyc3RhdGl4KQ0KbGlicmFyeShEZXNjVG9vbHMpDQpsaWJyYXJ5KGVmZmVjdHNpemUpDQpsaWJyYXJ5KGNvbmZpbnRyKQ0KbGlicmFyeShjaGlzcXVhcmUpDQpsaWJyYXJ5KGZvcmNhdHMpDQpvcHRpb25zKHNjaXBlbj05OTkpDQoNCiN3cmFuZ2xpbmcNCg0KZmlyc3QuZGF0YT1yZWFkLmNzdigiRkZNUyBkZW1vZyB2YXJzLmNzdiIsIGhlYWRlcj1UKQ0KDQpmaXJzdC5kYXRhID0gZmlyc3QuZGF0YSAlPiUNCiAgZmlsdGVyKFdUS0c8MTgwKQ0KDQpmaXJzdC5kYXRhID0gZmlyc3QuZGF0YSAlPiUNCiAgbXV0YXRlKHN0YXR1cz1jYXNlX3doZW4oTUVOT1NUQVRVUz09MX4icHJlLW1lbm9wYXVzZSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBNRU5PU1RBVFVTPT0yfiJwZXJpLW1lbm9wYXVzZSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBNRU5PU1RBVFVTPT0zfiJwb3N0LW1lbm9wYXVzZSIsIFRSVUV+TkEpKQ0KDQpmaXJzdC5kYXRhJHN0YXR1cz1mY3RfaW5vcmRlcihmaXJzdC5kYXRhJHN0YXR1cykNCmBgYA0KDQojIFF1ZXN0aW9uICM3OSBEbyB5b3UgZXhwZXJpZW5jZSBqb2ludCBwYWluIGFuZCBib2R5IGFjaGVzPw0KDQoqQSBDaGktc3F1YXJlIHRlc3Qgb2YgaW5kZXBlbmRlbmNlIHdhcyBjb25kdWN0ZWQgdG8gYXNzZXNzIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBleHBlcmllbmNpbmcgam9pbnQgYWNoZXMgYW5kIHBhaW4gYW5kIG1lbm9wYXVzYWwgc3RhdHVzLiBBIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQgYXNzb2NpYXRpb24gd2FzIGZvdW5kLCBYMihkZj0yKT00Mi45OTksIHA8LjAwMDAxLiBDcmFtZXIncyBWIHdhcyBtb2RlcmF0ZSBhdCBWPTAuMTEsIDk1JSBDSSgwLjA3MywgMC4xMzMpLioNCg0KYGBge3IgUTc5LCBpbmNsdWRlPVR9DQoNCmZpcnN0LmRhdGEgPSBmaXJzdC5kYXRhICU+JQ0KICBtdXRhdGUoYWNoZXM9Y2FzZV93aGVuKEFDSEVTPT0xfiJZZXMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0hFUz09Mn4iTm8iLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgQUNIRVM9PTN+IlByZWZlciBub3QgdG8gYW5zd2VyIiwgVFJVRX5OQSkpDQpmaXJzdC5kYXRhJGFjaGVzIDwtIGZhY3RvcihmaXJzdC5kYXRhJGFjaGVzLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiWWVzIiwgIk5vIiwgIlByZWZlciBOb3QgdG8gQW5zd2VyIikpDQp0YWJsZShmaXJzdC5kYXRhJGFjaGVzLCB1c2VOQSA9ICJhbHdheXMiKQ0KI1JlbW92ZSBwcmVmZXIgbm90IHRvIGFuc3dlcj0wIGFuZCBtaXNzaW5nPTcNCmRhdGEgPSBmaXJzdC5kYXRhICU+JQ0KICBmaWx0ZXIoQUNIRVM8MykNCg0KZGF0YSRhY2hlcyA8LSBmYWN0b3IoZGF0YSRhY2hlcywgbGV2ZWxzID0gYygiWWVzIiwgIk5vIikpDQoNCng9eHRhYnMofmFjaGVzK3N0YXR1cywgZGF0YT1kYXRhKQ0KeA0KcHJvcC50YWJsZSh4LDIpDQpyZXN1bHQ9Y2hpc3EudGVzdCh4KQ0KcmVzdWx0DQpjaV9jcmFtZXJzdihyZXN1bHQpDQoNCmI9ZGF0YS5mcmFtZSgNCm51bT1jKDMyOCwgMTQyMSwgMTQ2MSksDQpkZW49YygzMjgrMTY3LCAxNDIxKzQwMCAsMTQ2MSszNjQpLA0Kc3RhZ2U9YygicHJlIiwgInBlcmkiLCAicG9zdCIpDQopDQoNCnBhaXJ3aXNlLnByb3AudGVzdCh4PWIkbnVtLCBuPWIkZGVuLCBwLmFkanVzdC5tZXRob2QgPSAiaG9sbSIpDQoNCmBgYA0KDQojIFF1ZXN0aW9uICM4MCBQbGVhc2UgcmF0ZSB0aGUgZXh0ZW50IHRvIHdoaWNoIHRoZSBqb2ludCBwYWluL2FjaGVzIG5lZ2F0aXZlbHkgaW1wYWN0IHlvdXIgdHJhaW5pbmcNCg0KKkEgY2hpLXNxdWFyZSBnb29kbmVzcy1vZi1maXQgdGVzdCB3YXMgY29uZHVjdGVkIHRvIGV4YW1pbmUgd2hvIHNhaWQgIk9mdGVuL0Fsd2F5cyIgdG8gUTc5IHdlcmUgZXF1YWxseSBkaXN0cmlidXRlZCBhY3Jvc3MgdGhyZWUgc3RhZ2VzLiBUaGUgcmVzdWx0cyBpbmRpY2F0ZWQgdGhhdCB0aGUgb2JzZXJ2ZWQgZnJlcXVlbmNpZXMgZGlmZmVyZWQgc2lnbmlmaWNhbnRseSBmcm9tIHRoZSBleHBlY3RlZCBmcmVxdWVuY2llcywgz4fCsigyKSA9IDIzLjUxNSwgcCA9LjAwMDAwNzguIENyYW1lcidzIFYgd2FzIHNtYWxsIGF0IFY9MC4wOSwgOTUlIENJKDAuMDU1LCAwLjEyMSkuICoNCg0KKkFkZGl0aW9uYWxseSwgQSBjaGktc3F1YXJlIGdvb2RuZXNzLW9mLWZpdCB0ZXN0IHdhcyBjb25kdWN0ZWQgdG8gZXhhbWluZSB3aG8gc2FpZCAiUmFyZWx5L05ldmVyIiB0byBRNzkgd2VyZSBlcXVhbGx5IGRpc3RyaWJ1dGVkIGFjcm9zcyB0aHJlZSBzdGFnZXMuIFRoZSByZXN1bHRzIGluZGljYXRlZCB0aGF0IHRoZSBvYnNlcnZlZCBmcmVxdWVuY2llcyBkaWZmZXJlZCBzaWduaWZpY2FudGx5IGZyb20gdGhlIGV4cGVjdGVkIGZyZXF1ZW5jaWVzLCDPh8KyKDIpID0gMTcuNzc2LCBwPS4wMDAxMzguIENyYW1lcidzIFYgd2FzIHNtYWxsIGF0IFY9MC4xMSwgOTUlIENJKDAuMDQ0LCAwLjExMCkuKg0KDQpgYGB7ciBRODAsIGluY2x1ZGU9VH0NCg0KZmlyc3QuZGF0YSA9IGZpcnN0LmRhdGEgJT4lDQogICAgbXV0YXRlKGFjaGVzX2ltcD1jYXNlX3doZW4oQUNIRVNfSU1QQUNUPT0xfiJBbHdheXMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0hFU19JTVBBQ1Q9PTJ+Ik9mdGVuIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgIEFDSEVTX0lNUEFDVD09M34iU29tZXRpbWVzIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgQUNIRVNfSU1QQUNUPT00fiJSYXJlbHkiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgQUNIRVNfSU1QQUNUPT01fiJOZXZlciIsIFRSVUV+TkEpKQ0KZmlyc3QuZGF0YSRhY2hlc19pbXAgPC0gZmFjdG9yKGZpcnN0LmRhdGEkYWNoZXNfaW1wLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiTmV2ZXIiLCJSYXJlbHkiLCAiU29tZXRpbWVzIiwgIk9mdGVuIiwiQWx3YXlzIikpDQp0YWJsZShmaXJzdC5kYXRhJGFjaGVzX2ltcCwgdXNlTkEgPSAiYWx3YXlzIikNCnRhYmxlKGZpcnN0LmRhdGEkc3RhdHVzLCB1c2VOQSA9ICJhbHdheXMiKQ0KI1JlbW92ZSBtaXNzaW5nIE49OTM4LCBza2lwIGxvZ2ljDQpkYXRhID0gZmlyc3QuZGF0YSAlPiUNCiAgZmlsdGVyKEFDSEVTX0lNUEFDVDw2KQ0KeD14dGFicyh+YWNoZXNfaW1wK3N0YXR1cywgZGF0YT1kYXRhKQ0KcHJvcC50YWJsZSh4LDIpDQp4DQoNCiNvZnRlbiBhbmQgYWx3YXlzLWNvbWJpbmUgcmVzcG9uc2VzIGZvciB4MiB0ZXN0DQpvZnRlbiA9IGRhdGEgJT4lDQogIG11dGF0ZShhY2hlc2ltcD1jYXNlX3doZW4oQUNIRVNfSU1QQUNUPD0yfiJPZnRlbmFsd2F5cyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNIRVNfSU1QQUNUPjJ+Im90aGVyIikpDQoNCnRhYmxlKG9mdGVuJGFjaGVzaW1wKQ0KeD14dGFicyh+YWNoZXNpbXArc3RhdHVzLCBkYXRhPW9mdGVuKQ0KeA0KcmVzdWx0PWNoaXNxLnRlc3QoeCkNCnJlc3VsdA0KY2lfY3JhbWVyc3YocmVzdWx0KQ0KDQpiPWRhdGEuZnJhbWUoDQpudW09Yyg1MSwgNDA2LCAzOTUpLA0KZGVuPWMoNTErMjc3LCA0MDYrMTAxNSwgMzk1KzEwNjYpLA0Kc3RhZ2U9YygicHJlIiwgInBlcmkiLCAicG9zdCIpDQopDQoNCnBhaXJ3aXNlLnByb3AudGVzdCh4PWIkbnVtLCBuPWIkZGVuLCBwLmFkanVzdC5tZXRob2QgPSAiaG9sbSIpDQoNCiNuZXZlciBhbmQgcmFyZWx5LWNvbWJpbmUgcmVzcG9uc2VzIGZvciB4MiB0ZXN0DQpuZXZlciA9IGRhdGEgJT4lDQogIG11dGF0ZShhY2hlc2ltcD1jYXNlX3doZW4oQUNIRVNfSU1QQUNUPj00fiJyYXJlbHluZXZlciIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNIRVNfSU1QQUNUPDR+Im90aGVyIikpDQoNCnRhYmxlKG5ldmVyJGFjaGVzaW1wKQ0KeD14dGFicyh+YWNoZXNpbXArc3RhdHVzLCBkYXRhPW5ldmVyKQ0KeA0KcmVzdWx0PWNoaXNxLnRlc3QoeCkNCnJlc3VsdA0KY2lfY3JhbWVyc3YocmVzdWx0KQ0KDQpiPWRhdGEuZnJhbWUoDQpudW09YygxMTksIDM1MywgNDA1KSwNCmRlbj1jKDExOSsyMDksIDM1MysxMDY4LCA0MDUrMTA1NiksDQpzdGFnZT1jKCJwcmUiLCAicGVyaSIsICJwb3N0IikNCikNCg0KcGFpcndpc2UucHJvcC50ZXN0KHg9YiRudW0sIG49YiRkZW4sIHAuYWRqdXN0Lm1ldGhvZCA9ICJob2xtIikNCg0KYGBgDQoNCiMgUXVlc3Rpb24gIzgxIC4gRG8geW91IGhhdmUgZnJvemVuIHNob3VsZGVyPw0KDQoqQSBDaGktc3F1YXJlIHRlc3Qgb2YgaW5kZXBlbmRlbmNlIHdhcyBjb25kdWN0ZWQgdG8gYXNzZXNzIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBmcm96ZW4gc2hvdWxkZXIgYW5kIG1lbm9wYXVzYWwgc3RhdHVzLiBBIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQgYXNzb2NpYXRpb24gd2FzIGZvdW5kLCBYMihkZj0yKT0yMi42MDUsIHA9LjAwMDE1LiBDcmFtZXIncyBWIHdhcyBzbWFsbCBhdCBWPTAuMDUyLCA5NSUgQ0koMC4wMzM5LCAwLjA3NDEpLioNCg0KYGBge3IgUTgxLCBpbmNsdWRlPVR9DQoNCmZpcnN0LmRhdGEgPSBmaXJzdC5kYXRhICU+JQ0KICBtdXRhdGUoZnJvemVuPWNhc2Vfd2hlbihGUk9aRU49PTF+IlllcyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgIEZST1pFTj09Mn4iTm8iLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgRlJPWkVOPT00fiJJIGRvbid0IGtub3ciLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgRlJPWkVOPT0zfiJQcmVmZXIgbm90IHRvIGFuc3dlciIsIFRSVUV+TkEpKQ0KZmlyc3QuZGF0YSRmcm96ZW4gPC0gZmFjdG9yKGZpcnN0LmRhdGEkZnJvemVuLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiWWVzIiwgIk5vIiwgIkkgZG9uJ3Qga25vdyIsICJQcmVmZXIgTm90IHRvIEFuc3dlciIpKQ0KdGFibGUoZmlyc3QuZGF0YSRmcm96ZW4sIHVzZU5BID0gImFsd2F5cyIpDQojUmVtb3ZlIG1pc3NpbmcgTj0wLCBQTlRBPTANCmRhdGEgPSBmaXJzdC5kYXRhICU+JQ0KICBmaWx0ZXIoRlJPWkVOPT0xIHwgRlJPWkVOPT0yIHwgRlJPWkVOPT00KQ0KDQpkYXRhJGZyb3plbiA8LSBhcy5jaGFyYWN0ZXIoZGF0YSRmcm96ZW4pDQoNCng9eHRhYnMofmZyb3plbitzdGF0dXMsIGRhdGE9ZGF0YSkNCngNCnByb3AudGFibGUoeCwyKQ0KcmVzdWx0PWNoaXNxLnRlc3QoeCkNCnJlc3VsdA0KY2lfY3JhbWVyc3YocmVzdWx0KQ0KDQpiPWRhdGEuZnJhbWUoDQpudW09YygxOSwgMTYxLCAxNDgpLA0KZGVuPWMoMTkrNDQxKzM2LCAxNjErMTU1MysxMDksIDE0OCsxNjA0Kzc3KSwNCnN0YWdlPWMoInByZSIsICJwZXJpIiwgInBvc3QiKQ0KKQ0KDQpwYWlyd2lzZS5wcm9wLnRlc3QoeD1iJG51bSwgbj1iJGRlbiwgcC5hZGp1c3QubWV0aG9kID0gImhvbG0iKQ0KDQpgYGANCg0KIyBRdWVzdGlvbiAjODIgUGxlYXNlIHJhdGUgdGhlIGV4dGVudCB0byB3aGljaCBmcm96ZW4gc2hvdWxkZXIgbmVnYXRpdmVseSBpbXBhY3QgeW91ciB0cmFpbmluZy4gDQoNCipBIGNoaS1zcXVhcmUgZ29vZG5lc3Mtb2YtZml0IHRlc3Qgd2FzIGNvbmR1Y3RlZCB0byBleGFtaW5lIHdobyBzYWlkICJPZnRlbi9BbHdheXMiIHRvIFE4MSB3ZXJlIGVxdWFsbHkgZGlzdHJpYnV0ZWQgYWNyb3NzIHRocmVlIHN0YWdlcy4gVGhlIHJlc3VsdHMgaW5kaWNhdGVkIHRoYXQgdGhlIG9ic2VydmVkIGZyZXF1ZW5jaWVzIGRpZCBub3QgZGlmZmVyIHNpZ25pZmljYW50bHkgZnJvbSB0aGUgZXhwZWN0ZWQgZnJlcXVlbmNpZXMsIM+HwrIoMikgPSA0LjQ5NywgcCA9LjEwNTYuICoNCg0KKkFkZGl0aW9uYWxseSwgQSBjaGktc3F1YXJlIGdvb2RuZXNzLW9mLWZpdCB0ZXN0IHdhcyBjb25kdWN0ZWQgdG8gZXhhbWluZSB3aG8gc2FpZCAiUmFyZWx5L05ldmVyIiB0byBRODEgd2VyZSBlcXVhbGx5IGRpc3RyaWJ1dGVkIGFjcm9zcyB0aHJlZSBzdGFnZXMuIFRoZSByZXN1bHRzIGluZGljYXRlZCB0aGF0IHRoZSBvYnNlcnZlZCBmcmVxdWVuY2llcyBkaWQgbm90IGRpZmZlciBzaWduaWZpY2FudGx5IGZyb20gdGhlIGV4cGVjdGVkIGZyZXF1ZW5jaWVzLCDPh8KyKDIpID0gMS4xMjg3LCBwPS41Njg3LiAqDQoNCg0KYGBge3IgUTgyLCBpbmNsdWRlPVR9DQoNCmZpcnN0LmRhdGEgPSBmaXJzdC5kYXRhICU+JQ0KICBtdXRhdGUoZnJfaW1wYWN0PWNhc2Vfd2hlbihGUk9aRU5fSU1QQUNUPT0xfiJBbHdheXMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBGUk9aRU5fSU1QQUNUPT0yfiJPZnRlbiIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBGUk9aRU5fSU1QQUNUPT0zfiJTb21ldGltZXMiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgRlJPWkVOX0lNUEFDVD09NH4iUmFyZWx5IiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgIEZST1pFTl9JTVBBQ1Q9PTV+Ik5ldmVyIiwgVFJVRX5OQSkpDQpmaXJzdC5kYXRhJGZyX2ltcGFjdCA8LSBmYWN0b3IoZmlyc3QuZGF0YSRmcl9pbXBhY3QsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJOZXZlciIsIlJhcmVseSIsICJTb21ldGltZXMiLCAiT2Z0ZW4iLCJBbHdheXMiKSkNCnRhYmxlKGZpcnN0LmRhdGEkZnJfaW1wYWN0LCB1c2VOQSA9ICJhbHdheXMiKQ0KDQoNCiNSZW1vdmUgbWlzc2luZyBOPTM4MjAsIHNraXAgbG9naWMNCmRhdGEgPSBmaXJzdC5kYXRhICU+JQ0KICBmaWx0ZXIoRlJPWkVOX0lNUEFDVDw2KQ0KeD14dGFicyh+ZnJfaW1wYWN0K3N0YXR1cywgZGF0YT1kYXRhKQ0KcHJvcC50YWJsZSh4LDIpDQp4DQp0YWJsZShkYXRhJHN0YXR1cywgdXNlTkE9ImFsd2F5cyIpDQoNCiNvZnRlbiBhbmQgYWx3YXlzLWNvbWJpbmUgcmVzcG9uc2VzIGZvciB4MiB0ZXN0DQoNCm9mdGVuID0gZGF0YSAlPiUNCiAgbXV0YXRlKGZyb3plbmltcD1jYXNlX3doZW4oRlJPWkVOX0lNUEFDVDw9Mn4iT2Z0ZW5hbHdheXMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZST1pFTl9JTVBBQ1Q+Mn4ib3RoZXIiKSkNCg0KdGFibGUob2Z0ZW4kZnJvemVuaW1wKQ0KeD14dGFicyh+ZnJvemVuaW1wK3N0YXR1cywgZGF0YT1vZnRlbikNCngNCnJlc3VsdD1jaGlzcS50ZXN0KHgpDQpyZXN1bHQNCmNpX2NyYW1lcnN2KHJlc3VsdCkNCg0KI25ldmVyIGFuZCByYXJlbHktY29tYmluZSByZXNwb25zZXMgZm9yIHgyIHRlc3QNCg0KbmV2ZXIgPSBkYXRhICU+JQ0KICBtdXRhdGUoZnJvemVuaW1wPWNhc2Vfd2hlbihGUk9aRU5fSU1QQUNUPj00fiJyYXJlbHluZXZlciIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlJPWkVOX0lNUEFDVDw0fiJvdGhlciIpKQ0KDQp0YWJsZShuZXZlciRmcm96ZW5pbXApDQp4PXh0YWJzKH5mcm96ZW5pbXArc3RhdHVzLCBkYXRhPW5ldmVyKQ0KeA0KcmVzdWx0PWNoaXNxLnRlc3QoeCkNCnJlc3VsdA0KcmVzdWx0JGV4cGVjdGVkDQpjaV9jcmFtZXJzdihyZXN1bHQpDQpgYGANCg0KIyBRdWVzdGlvbiAjODMuIERvIHlvdSBoYXZlIHBsYW50YXIgZmFzY2lpdGlzPw0KDQoqQSBDaGktc3F1YXJlIHRlc3Qgb2YgaW5kZXBlbmRlbmNlIHdhcyBjb25kdWN0ZWQgdG8gYXNzZXNzIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBwbGFudGFyIGZhc2NpaXRpcyBmcm96ZW4gc2hvdWxkZXIgYW5kIG1lbm9wYXVzYWwgc3RhdHVzLiBBIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQgYXNzb2NpYXRpb24gd2FzIGZvdW5kLCBYMihkZj00KT0yMS41MDYsIHA9LjAwMDI1LiBDcmFtZXIncyBWIHdhcyBzbWFsbCBhdCBWPTAuMDUxLCA5NSUgQ0koMC4wMzI4LCAwLjA3MjgpLiAqDQoNCg0KYGBge3IgUTgzfQ0KDQpmaXJzdC5kYXRhID0gZmlyc3QuZGF0YSAlPiUNCiAgbXV0YXRlKHBsYW50YXI9Y2FzZV93aGVuKFBMQU5UQVI9PTF+IlllcyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgIFBMQU5UQVI9PTJ+Ik5vIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgIFBMQU5UQVI9PTR+IkkgZG9uJ3Qga25vdyIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBQTEFOVEFSPT0zfiJQcmVmZXIgbm90IHRvIGFuc3dlciIsIFRSVUV+TkEpKQ0KI2ZpcnN0LmRhdGEkcGxhbnRhciA8LSBmYWN0b3IoZmlyc3QuZGF0YSRwbGFudGFyLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGxldmVscyA9IGMoIlllcyIsICJObyIsICJJIGRvbid0IGtub3ciLCAiUHJlZmVyIE5vdCB0byBBbnN3ZXIiKSkNCnRhYmxlKGZpcnN0LmRhdGEkcGxhbnRhciwgdXNlTkEgPSAiYWx3YXlzIikNCiNSZW1vdmUgbWlzc2luZyBOPTEsIFBOVEE9MA0KZGF0YSA9IGZpcnN0LmRhdGEgJT4lDQogIGZpbHRlcihQTEFOVEFSPT0xIHwgUExBTlRBUj09MiB8IFBMQU5UQVI9PTQpDQoNCnRhYmxlKGRhdGEkUExBTlRBUiwgdXNlTkE9ImFsd2F5cyIpDQp0YWJsZShkYXRhJHBsYW50YXIpDQpkYXRhJHBsYW50YXIgPC0gYXMuY2hhcmFjdGVyKGRhdGEkcGxhbnRhcikNCg0KeD14dGFicyh+cGxhbnRhcitzdGF0dXMsIGRhdGE9ZGF0YSkNCngNCnByb3AudGFibGUoeCwyKQ0KcmVzdWx0PWNoaXNxLnRlc3QoeCkNCnJlc3VsdA0KY2lfY3JhbWVyc3YocmVzdWx0KQ0KDQpiPWRhdGEuZnJhbWUoDQpudW09Yyg2MSwgMjU3LCAyMTYpLA0KZGVuPWMoNjErMjErNDEzLCAyNTcrMTQ5Nis3MCwgMjE2KzMzKzE1ODApLA0Kc3RhZ2U9YygicHJlIiwgInBlcmkiLCAicG9zdCIpDQopDQoNCnBhaXJ3aXNlLnByb3AudGVzdCh4PWIkbnVtLCBuPWIkZGVuLCBwLmFkanVzdC5tZXRob2QgPSAiaG9sbSIpDQoNCg0KYGBgDQoNCiMgUXVlc3Rpb24gIzg0LiBQbGVhc2UgcmF0ZSB0aGUgZXh0ZW50IHRvIHdoaWNoIHRoZSBwbGFudGFyIGZhc2NpaXRpcyBuZWdhdGl2ZWx5IGltcGFjdCB5b3VyIHRyYWluaW5nLg0KDQoqQSBjaGktc3F1YXJlIGdvb2RuZXNzLW9mLWZpdCB0ZXN0IHdhcyBjb25kdWN0ZWQgdG8gZXhhbWluZSB3aG8gc2FpZCAiT2Z0ZW4vQWx3YXlzIiB0byBRODQgd2VyZSBlcXVhbGx5IGRpc3RyaWJ1dGVkIGFjcm9zcyB0aHJlZSBzdGFnZXMuIFRoZSByZXN1bHRzIGluZGljYXRlZCB0aGF0IHRoZSBvYnNlcnZlZCBmcmVxdWVuY2llcyBkaWZmZXJlZCBzaWduaWZpY2FudGx5IGZyb20gdGhlIGV4cGVjdGVkIGZyZXF1ZW5jaWVzLCDPh8KyKDIpID0gNy40NDY2LCBwID0uMDI0MTUuIENyYW1lcidzIFYgd2FzIG1vZGVyYXRlIGF0IFY9MC4xMSwgOTUlIENJKDAuMDYxLCAwLjIwNikuICoNCg0KKkFkZGl0aW9uYWxseSwgQSBjaGktc3F1YXJlIGdvb2RuZXNzLW9mLWZpdCB0ZXN0IHdhcyBjb25kdWN0ZWQgdG8gZXhhbWluZSB3aG8gc2FpZCAiUmFyZWx5L05ldmVyIiB0byBRODQgd2VyZSBlcXVhbGx5IGRpc3RyaWJ1dGVkIGFjcm9zcyB0aHJlZSBzdGFnZXMuIFRoZSByZXN1bHRzIGluZGljYXRlZCB0aGF0IHRoZSBvYnNlcnZlZCBmcmVxdWVuY2llcyBkaWQgbm90IGRpZmZlciBzaWduaWZpY2FudGx5IGZyb20gdGhlIGV4cGVjdGVkIGZyZXF1ZW5jaWVzLCDPh8KyKDIpID0gMy40ODU5LCBwPS4xNzUuIENyYW1lcidzIFYgd2FzIHNtYWxsIGF0IFY9MC4wOCwgOTUlIENJKDAuMDAwLCAwLjE2OSkuKg0KDQpgYGB7ciBRODQsIGluY2x1ZGU9VH0NCg0KZmlyc3QuZGF0YSA9IGZpcnN0LmRhdGEgJT4lDQogIG11dGF0ZShwZl9pbXBhY3Q9Y2FzZV93aGVuKFBMQU5UQVJfSU1QQUNUPT0xfiJBbHdheXMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBQTEFOVEFSX0lNUEFDVD09Mn4iT2Z0ZW4iLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgUExBTlRBUl9JTVBBQ1Q9PTN+IlNvbWV0aW1lcyIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBQTEFOVEFSX0lNUEFDVD09NH4iUmFyZWx5IiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgIFBMQU5UQVJfSU1QQUNUPT01fiJOZXZlciIsIFRSVUV+TkEpKQ0KZmlyc3QuZGF0YSRwZl9pbXBhY3QgPC0gZmFjdG9yKGZpcnN0LmRhdGEkcGZfaW1wYWN0LCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiTmV2ZXIiLCJSYXJlbHkiLCAiU29tZXRpbWVzIiwgIk9mdGVuIiwiQWx3YXlzIikpDQp0YWJsZShmaXJzdC5kYXRhJHBmX2ltcGFjdCwgdXNlTkEgPSAiYWx3YXlzIikNCg0KDQojUmVtb3ZlIG1pc3NpbmcgTj0zNjE0LCBza2lwIGxvZ2ljDQpkYXRhID0gZmlyc3QuZGF0YSAlPiUNCiAgZmlsdGVyKFBMQU5UQVJfSU1QQUNUPDYpDQp4PXh0YWJzKH5wZl9pbXBhY3Qrc3RhdHVzLCBkYXRhPWRhdGEpDQpwcm9wLnRhYmxlKHgsMikNCngNCnRhYmxlKGRhdGEkc3RhdHVzLCB1c2VOQT0iYWx3YXlzIikNCg0KI29mdGVuIGFuZCBhbHdheXMtY29tYmluZSByZXNwb25zZXMgZm9yIHgyIHRlc3QNCm9mdGVuID0gZGF0YSAlPiUNCiAgbXV0YXRlKHBsYW50YXJpbXA9Y2FzZV93aGVuKFBMQU5UQVJfSU1QQUNUPD0yfiJPZnRlbmFsd2F5cyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUExBTlRBUl9JTVBBQ1Q+Mn4ib3RoZXIiKSkNCg0KdGFibGUob2Z0ZW4kcGxhbnRhcmltcCkNCng9eHRhYnMofnBsYW50YXJpbXArc3RhdHVzLCBkYXRhPW9mdGVuKQ0KeA0KcmVzdWx0PWNoaXNxLnRlc3QoeCkNCnJlc3VsdA0KY2lfY3JhbWVyc3YocmVzdWx0KQ0KDQpiPWRhdGEuZnJhbWUoDQpudW09Yyg4LCA3MiwgNDUpLA0KZGVuPWMoOCs1MywgNzIrMTg1LCA0NSsxNzEpLA0Kc3RhZ2U9YygicHJlIiwgInBlcmkiLCAicG9zdCIpDQopDQoNCnBhaXJ3aXNlLnByb3AudGVzdCh4PWIkbnVtLCBuPWIkZGVuLCBwLmFkanVzdC5tZXRob2QgPSAiaG9sbSIpDQoNCiNuZXZlciBhbmQgcmFyZWx5LWNvbWJpbmUgcmVzcG9uc2VzIGZvciB4MiB0ZXN0DQoNCm5ldmVyID0gZGF0YSAlPiUNCiAgbXV0YXRlKHBsYW50YXJpbXA9Y2FzZV93aGVuKFBMQU5UQVJfSU1QQUNUPj00fiJyYXJlbHluZXZlciIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUExBTlRBUl9JTVBBQ1Q8NH4ib3RoZXIiKSkNCg0KdGFibGUobmV2ZXIkcGxhbnRhcmltcCkNCng9eHRhYnMofnBsYW50YXJpbXArc3RhdHVzLCBkYXRhPW5ldmVyKQ0KeA0KcmVzdWx0PWNoaXNxLnRlc3QoeCkNCnJlc3VsdA0KY2lfY3JhbWVyc3YocmVzdWx0KQ0KDQpgYGANCg0KIyBRdWVzdGlvbiAjODUuIEhvdyBvZnRlbiBkbyB5b3UgYWx0ZXIgeW91ciB0cmFpbmluZyBwcm9ncmFtIGR1ZSB0byBqb2ludCBwYWluLCBmcm96ZW4gc2hvdWxkZXIsIGV0Yy4gDQoqQSBjaGktc3F1YXJlIGdvb2RuZXNzLW9mLWZpdCB0ZXN0IHdhcyBjb25kdWN0ZWQgdG8gZXhhbWluZSB3aG8gc2FpZCAiT2Z0ZW4vQWx3YXlzIiB0byBRODUgd2VyZSBlcXVhbGx5IGRpc3RyaWJ1dGVkIGFjcm9zcyB0aHJlZSBzdGFnZXMuIFRoZSByZXN1bHRzIGluZGljYXRlZCB0aGF0IHRoZSBvYnNlcnZlZCBmcmVxdWVuY2llcyBkaWZmZXJlZCBzaWduaWZpY2FudGx5IGZyb20gdGhlIGV4cGVjdGVkIGZyZXF1ZW5jaWVzLCDPh8KyKDIpID0gMTAuMTE4LCBwID0gLjAwNjM1Mi4gQ3JhbWVyJ3MgViB3YXMgc21hbGwgYXQgVj0wLjA2LCA5NSUgQ0koMC4wMzAsIDAuMDkxKS4gKg0KDQoqQWRkaXRpb25hbGx5LCBBIGNoaS1zcXVhcmUgZ29vZG5lc3Mtb2YtZml0IHRlc3Qgd2FzIGNvbmR1Y3RlZCB0byBleGFtaW5lIHdobyBzYWlkICJSYXJlbHkvTmV2ZXIiIHRvIFE4NCB3ZXJlIGVxdWFsbHkgZGlzdHJpYnV0ZWQgYWNyb3NzIHRocmVlIHN0YWdlcy4gVGhlIHJlc3VsdHMgaW5kaWNhdGVkIHRoYXQgdGhlIG9ic2VydmVkIGZyZXF1ZW5jaWVzIGRpZCBub3QgZGlmZmVyIHNpZ25pZmljYW50bHkgZnJvbSB0aGUgZXhwZWN0ZWQgZnJlcXVlbmNpZXMsIM+HwrIoMikgPSAzLjQ4NTksIHA9IC4xNzUuIENyYW1lcidzIFYgd2FzIHNtYWxsIGF0IFY9MC4wOCwgOTUlIENJKDAuMDAwLCAwLjE2OSkuICoNCg0KDQpgYGB7ciBRODUsIGluY2x1ZGU9VH0NCmZpcnN0LmRhdGEgPSBmaXJzdC5kYXRhICU+JQ0KICBtdXRhdGUoYWNoZXNfYWx0ZXI9Y2FzZV93aGVuKEFDSEVTX0FMVEVSPT0xfiJBbHdheXMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0hFU19BTFRFUj09Mn4iT2Z0ZW4iLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgQUNIRVNfQUxURVI9PTN+IlNvbWV0aW1lcyIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0hFU19BTFRFUj09NH4iUmFyZWx5IiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgIEFDSEVTX0FMVEVSPT01fiJOZXZlciIsIFRSVUV+TkEpKQ0KZmlyc3QuZGF0YSRhY2hlc19hbHRlciA8LSBmYWN0b3IoZmlyc3QuZGF0YSRhY2hlc19hbHRlciwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIk5ldmVyIiwiUmFyZWx5IiwgIlNvbWV0aW1lcyIsICJPZnRlbiIsIkFsd2F5cyIpKQ0KdGFibGUoZmlyc3QuZGF0YSRhY2hlc19hbHRlciwgdXNlTkEgPSAiYWx3YXlzIikNCg0KDQojUmVtb3ZlIG1pc3NpbmcgTj04NTMsIHNraXAgbG9naWMNCmRhdGEgPSBmaXJzdC5kYXRhICU+JQ0KICBmaWx0ZXIoQUNIRVNfQUxURVI8NikNCng9eHRhYnMofmFjaGVzX2FsdGVyK3N0YXR1cywgZGF0YT1kYXRhKQ0KcHJvcC50YWJsZSh4LDIpDQp4DQoNCiNvZnRlbiBhbmQgYWx3YXlzLWNvbWJpbmUgcmVzcG9uc2VzIGZvciB4MiB0ZXN0DQpvZnRlbiA9IGRhdGEgJT4lDQogIG11dGF0ZShhY2hlc2ltcD1jYXNlX3doZW4oQUNIRVNfQUxURVI8PTJ+Ik9mdGVuYWx3YXlzIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0hFU19BTFRFUj4yfiJvdGhlciIpKQ0KDQp0YWJsZShvZnRlbiRhY2hlc2ltcCkNCng9eHRhYnMofmFjaGVzaW1wK3N0YXR1cywgZGF0YT1vZnRlbikNCngNCnJlc3VsdD1jaGlzcS50ZXN0KHgpDQpyZXN1bHQNCmNpX2NyYW1lcnN2KHJlc3VsdCkNCg0KYj1kYXRhLmZyYW1lKA0KbnVtPWMoNDcsIDMxMywgMzAwKSwNCmRlbj1jKDQ3KzI5NSwgMzEzKzExNTEsIDMwMCsxMTg5KSwNCnN0YWdlPWMoInByZSIsICJwZXJpIiwgInBvc3QiKQ0KKQ0KDQpwYWlyd2lzZS5wcm9wLnRlc3QoeD1iJG51bSwgbj1iJGRlbiwgcC5hZGp1c3QubWV0aG9kID0gImhvbG0iKQ0KDQojbmV2ZXIgYW5kIHJhcmVseS1jb21iaW5lIHJlc3BvbnNlcyBmb3IgeDIgdGVzdA0KDQpuZXZlciA9IGRhdGEgJT4lDQogIG11dGF0ZShhY2hlc2ltcD1jYXNlX3doZW4oUExBTlRBUl9JTVBBQ1Q+PTR+InJhcmVseW5ldmVyIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQTEFOVEFSX0lNUEFDVDw0fiJvdGhlciIpKQ0KDQp0YWJsZShuZXZlciRhY2hlc2ltcCkNCng9eHRhYnMofmFjaGVzaW1wK3N0YXR1cywgZGF0YT1uZXZlcikNCngNCnJlc3VsdD1jaGlzcS50ZXN0KHgpDQpyZXN1bHQNCmNpX2NyYW1lcnN2KHJlc3VsdCkNCmBgYA0KDQoNCiMgUXVlc3Rpb24gIzg2LiBGcm9tIG9uZSB3b3Jrb3V0IHRvIHRoZSBuZXh0LCBob3cgb2Z0ZW4gZG8geW91IGZlZWwgZnVsbHkgcmVjb3ZlcmVkPw0KDQoqQSBjaGktc3F1YXJlIGdvb2RuZXNzLW9mLWZpdCB0ZXN0IHdhcyBjb25kdWN0ZWQgdG8gZXhhbWluZSB3aG8gc2FpZCAiT2Z0ZW4vQWx3YXlzIiB0byBRODYgd2VyZSBlcXVhbGx5IGRpc3RyaWJ1dGVkIGFjcm9zcyB0aHJlZSBzdGFnZXMuIFRoZSByZXN1bHRzIGluZGljYXRlZCB0aGF0IHRoZSBvYnNlcnZlZCBmcmVxdWVuY2llcyBkaWZmZXJlZCBzaWduaWZpY2FudGx5IGZyb20gdGhlIGV4cGVjdGVkIGZyZXF1ZW5jaWVzLCDPh8KyKDIpID0gNDQuNTE3LCBwPC4wMDAwMDEuIENyYW1lcidzIFYgd2FzIG1vZGVyYXRlIGF0IFY9MC4xMCwgOTUlIENJKDAuMDc1LCAwLjEzNSkuKg0KDQoqQWRkaXRpb25hbGx5LCBBIGNoaS1zcXVhcmUgZ29vZG5lc3Mtb2YtZml0IHRlc3Qgd2FzIGNvbmR1Y3RlZCB0byBleGFtaW5lIHdobyBzYWlkICJSYXJlbHkvTmV2ZXIiIHRvIFE4NiB3ZXJlIGVxdWFsbHkgZGlzdHJpYnV0ZWQgYWNyb3NzIHRocmVlIHN0YWdlcy4gVGhlIHJlc3VsdHMgaW5kaWNhdGVkIHRoYXQgdGhlIG9ic2VydmVkIGZyZXF1ZW5jaWVzIGRpZmZlcmVkIHNpZ25pZmljYW50bHkgZnJvbSB0aGUgZXhwZWN0ZWQgZnJlcXVlbmNpZXMsIM+HwrIoMikgPSAxNy43MzksIHA9IC4wMDAxNC4gQ3JhbWVyJ3MgViB3YXMgc21hbGwgYXQgVj0wLjA3LCA5NSUgQ0koMC4wMzksIDAuMDk3KSoNCg0KYGBge3IgUTg2fQ0KDQpmaXJzdC5kYXRhID0gZmlyc3QuZGF0YSAlPiUNCiAgbXV0YXRlKHJlY292ZXI9Y2FzZV93aGVuKFJFQ09WRVJZPT0xfiJBbHdheXMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBSRUNPVkVSWT09Mn4iT2Z0ZW4iLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgUkVDT1ZFUlk9PTN+IlNvbWV0aW1lcyIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBSRUNPVkVSWT09NH4iUmFyZWx5IiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgIFJFQ09WRVJZPT01fiJOZXZlciIsIFRSVUV+TkEpKQ0KZmlyc3QuZGF0YSRyZWNvdmVyIDwtIGZhY3RvcihmaXJzdC5kYXRhJHJlY292ZXIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJOZXZlciIsIlJhcmVseSIsICJTb21ldGltZXMiLCAiT2Z0ZW4iLCJBbHdheXMiKSkNCnRhYmxlKGZpcnN0LmRhdGEkcmVjb3ZlciwgdXNlTkEgPSAiYWx3YXlzIikNCg0KI05vIG1pc3NpbmcgdmFsdWVzIGZvciB0aGlzIHF1ZXN0aW9uDQojZGF0YSA9IGZpcnN0LmRhdGEgJT4lIGZpbHRlcihGUk9aRU5fSU1QQUNUPDYpDQp4PXh0YWJzKH5yZWNvdmVyK3N0YXR1cywgZGF0YT1maXJzdC5kYXRhKQ0KcHJvcC50YWJsZSh4LDIpDQp4DQoNCiNvZnRlbiBhbmQgYWx3YXlzLWNvbWJpbmUgcmVzcG9uc2VzIGZvciB4MiB0ZXN0DQoNCm9mdGVuID0gZmlyc3QuZGF0YSAlPiUNCiAgbXV0YXRlKHJlYz1jYXNlX3doZW4oUkVDT1ZFUlk8PTJ+Ik9mdGVuYWx3YXlzIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUNPVkVSWT4yfiJvdGhlciIpKQ0KDQp0YWJsZShvZnRlbiRyZWMpDQp4PXh0YWJzKH5yZWMrc3RhdHVzLCBkYXRhPW9mdGVuKQ0KeA0KcmVzdWx0PWNoaXNxLnRlc3QoeCkNCnJlc3VsdA0KY2lfY3JhbWVyc3YocmVzdWx0KQ0KDQpiPWRhdGEuZnJhbWUoDQpudW09YygzMTgsIDkzOCwgMTExNCksDQpkZW49YygzMTgrMTc4LCA5MzgrODg1LCAxMTE0KzcxNCksDQpzdGFnZT1jKCJwcmUiLCAicGVyaSIsICJwb3N0IikNCikNCg0KcGFpcndpc2UucHJvcC50ZXN0KHg9YiRudW0sIG49YiRkZW4sIHAuYWRqdXN0Lm1ldGhvZCA9ICJob2xtIikNCg0KI25ldmVyIGFuZCByYXJlbHkNCg0KbmV2ZXIgPSBmaXJzdC5kYXRhICU+JQ0KICBtdXRhdGUocmVjPWNhc2Vfd2hlbihSRUNPVkVSWT49NH4icmFyZWx5bmV2ZXIiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFQ09WRVJZPDR+Im90aGVyIikpDQoNCnRhYmxlKG5ldmVyJHJlYykNCng9eHRhYnMofnJlYytzdGF0dXMsIGRhdGE9bmV2ZXIpDQp4DQpyZXN1bHQ9Y2hpc3EudGVzdCh4KQ0KcmVzdWx0DQpjaV9jcmFtZXJzdihyZXN1bHQpDQoNCmI9ZGF0YS5mcmFtZSgNCm51bT1jKDMwLCAyMTcsIDE2NiksDQpkZW49YygzMCs0NjYsIDIxNysxNjA2LCAxNjYrMTY2MyksDQpzdGFnZT1jKCJwcmUiLCAicGVyaSIsICJwb3N0IikNCikNCg0KcGFpcndpc2UucHJvcC50ZXN0KHg9YiRudW0sIG49YiRkZW4sIHAuYWRqdXN0Lm1ldGhvZCA9ICJob2xtIikNCg0KYGBgDQoNCiMgUXVlc3Rpb24gIzg3LiBEbyB5b3UgZXhwZXJpZW5jZSB1cmluYXJ5IGluY29udGluZW5jZT8NCg0KKkEgQ2hpLXNxdWFyZSB0ZXN0IG9mIGluZGVwZW5kZW5jZSB3YXMgY29uZHVjdGVkIHRvIGFzc2VzcyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gaW5jb250aW5lbmNlIGFuZCBtZW5vcGF1c2FsIHN0YXR1cy4gQSBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50IGFzc29jaWF0aW9uIHdhcyBub3QgZm91bmQsIFgyKGRmPTIpPTIxLjY5OSwgcD0uMDAwMDE5LiBDcmFtZXIncyBWIHdhcyBzbWFsbCBhdCBWPTAuMDcsIDk1JSBDSSgwLjA0NTQsIDAuMTAzOCkuICoNCg0KYGBge3IgUTg3fQ0KDQpmaXJzdC5kYXRhID0gZmlyc3QuZGF0YSAlPiUNCiAgbXV0YXRlKGluY29udD1jYXNlX3doZW4oSU5DT05USU5FTkNFPT0xfiJZZXMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBJTkNPTlRJTkVOQ0U9PTJ+Ik5vIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgIElOQ09OVElORU5DRT09M34iUHJlZmVyIG5vdCB0byBhbnN3ZXIiLCBUUlVFfk5BKSkNCmZpcnN0LmRhdGEkaW5jb250IDwtIGZhY3RvcihmaXJzdC5kYXRhJGluY29udCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIlllcyIsICJObyIsICJQcmVmZXIgTm90IHRvIEFuc3dlciIpKQ0KdGFibGUoZmlyc3QuZGF0YSRpbmNvbnQsIHVzZU5BID0gImFsd2F5cyIpDQojUmVtb3ZlIG1pc3NpbmcgTj04LCBJREs9MCwgUE5UQT0wDQpkYXRhID0gZmlyc3QuZGF0YSAlPiUNCiAgZmlsdGVyKGluY29udDwzKQ0KDQpmaXJzdC5kYXRhJGluY29udCA8LSBhcy5jaGFyYWN0ZXIoZmlyc3QuZGF0YSRpbmNvbnQpDQoNCng9eHRhYnMofmluY29udCtzdGF0dXMsIGRhdGE9Zmlyc3QuZGF0YSkNCngNCnByb3AudGFibGUoeCwyKQ0KcmVzdWx0PWNoaXNxLnRlc3QoeCkNCnJlc3VsdA0KY2lfY3JhbWVyc3YocmVzdWx0KQ0KDQpiPWRhdGEuZnJhbWUoDQpudW09YygxNDIsIDcyNywgNjU3KSwNCmRlbj1jKDE0MiszNTEsIDcyNysxMDk0LCA2NTcrMTE2OSksDQpzdGFnZT1jKCJwcmUiLCAicGVyaSIsICJwb3N0IikNCikNCg0KcGFpcndpc2UucHJvcC50ZXN0KHg9YiRudW0sIG49YiRkZW4sIHAuYWRqdXN0Lm1ldGhvZCA9ICJob2xtIikNCmBgYA0KDQoNCiMgUXVlc3Rpb24gIzg4LiBXaGF0IGRvIHlvdSBiZWxpZXZlIHdhcyB0aGUgY2F1c2Ugb2YgeW91ciB1cmluYXJ5IGluY29udGluZW5jZT8NCg0KKkEgQ2hpLXNxdWFyZSB0ZXN0IG9mIGluZGVwZW5kZW5jZSB3YXMgY29uZHVjdGVkIHRvIGFzc2VzcyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gIG1lbm9wYXVzYWwgc3RhdHVzIGFuZCBRODggcmVzcG9uc2UuIEEgc3RhdGlzdGljYWxseSBzaWduaWZpY2FudCBhc3NvY2lhdGlvbiB3YXMgZm91bmQsIFgyKGRmPTIpPTEwNy4xLCBwPC4wMDAwMS4gQ3JhbWVyJ3MgViB3YXMgbW9kZXJhdGUgYXQgVj0wLjE5LCA5NSUgQ0koMC4xNTMsIDAuMjIzKS4qDQoNCmBgYHtyIFE4OH0NCnRhYmxlKGZpcnN0LmRhdGEkSU5DT05UX0NBVVNFKQ0KZmlyc3QuZGF0YSA9IGZpcnN0LmRhdGEgJT4lDQogIG11dGF0ZShjYXVzZT1jYXNlX3doZW4oSU5DT05UX0NBVVNFPT0xfiJNZW5vcGF1c2UiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBJTkNPTlRfQ0FVU0U9PTJ+IkNoaWxkYmlydGgiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgSU5DT05UX0NBVVNFPT0zfiJPdGhlciIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBJTkNPTlRfQ0FVU0U9PTR+IkkgZG9uJ3Qga25vdyIsIFRSVUV+TkEpKQ0KZmlyc3QuZGF0YSRjYXVzZSA8LSBmYWN0b3IoZmlyc3QuZGF0YSRjYXVzZSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIk1lbm9wYXVzZSIsICJDaGlsZGJpcnRoIiwgIk90aGVyIiwiSSBkb24ndCBrbm93IikpDQp0YWJsZShmaXJzdC5kYXRhJGNhdXNlLCB1c2VOQSA9ICJhbHdheXMiKQ0KI1JlbW92ZSBtaXNzaW5nIE49MjYyMiwgSURLPTAsIFBOVEE9MA0KZGF0YSA9IGZpcnN0LmRhdGEgJT4lDQogIGZpbHRlcihJTkNPTlRfQ0FVU0U8NSkNCg0KZGF0YSRjYXVzZSA8LSBhcy5jaGFyYWN0ZXIoZGF0YSRjYXVzZSkNCg0KeD14dGFicyh+Y2F1c2Urc3RhdHVzLCBkYXRhPWRhdGEpDQp4DQpwcm9weD1wcm9wLnRhYmxlKHgsMikNCnByb3B4DQpyZXN1bHQ9Y2hpc3EudGVzdCh4KQ0KcmVzdWx0DQpjaV9jcmFtZXJzdihyZXN1bHQpDQoNCmdnLmRhdGE9YXMuZGF0YS5mcmFtZShwcm9weCkNCg0KZ2cuZGF0YSRjYXVzZT1mYWN0b3IoZ2cuZGF0YSRjYXVzZSwgDQogICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJNZW5vcGF1c2UiLCAiQ2hpbGRiaXJ0aCIsICJPdGhlciIsIkkgZG9uJ3Qga25vdyIpKQ0KDQpnZ3Bsb3QoZ2cuZGF0YSwgYWVzKHggPSBzdGF0dXMsIHkgPSBGcmVxLCBmaWxsID0gY2F1c2UpKSArDQogIGdlb21fY29sKHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjkpKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSByb3VuZChGcmVxLDIpKSwNCiAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC45KSwgdmp1c3QgPSAtMC4zLCBzaXplID0gMykrDQogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBzY2FsZXM6OnBlcmNlbnQpICsNCiAgbGFicyh4ID0gIk1lbm9wYXVzYWwgU3RhdHVzIiwgeSA9ICJSZWxhdGl2ZSBGcmVxdWVuY3kiLCBmaWxsID0gIkNhdXNlIikgKw0KICB0aGVtZV9idygpDQoNCmdncGxvdChnZy5kYXRhLA0KICAgICAgIGFlcyh4ID0gc3RhdHVzLA0KICAgICAgICAgICB5ID0gRnJlcSwNCiAgICAgICAgICAgZ3JvdXAgPSBjYXVzZSwNCiAgICAgICAgICAgY29sb3IgPSBjYXVzZSkpICsNCiAgZ2VvbV9saW5lKGxpbmV3aWR0aCA9IDEpICsNCiAgZ2VvbV9wb2ludChzaXplID0gMykgKw0KICBnZW9tX3RleHQoDQogICAgYWVzKGxhYmVsID0gcm91bmQoRnJlcSwyKSwgdmp1c3QgPSAtMC41ICApKSArDQogICNzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gRnJlcSkgKw0KICBsYWJzKA0KICAgIHggPSAiTWVub3BhdXNhbCBTdGF0dXMiLA0KICAgIHkgPSAiUmVsYXRpdmUgRnJlcXVlbmN5IiwNCiAgICBjb2xvciA9ICJDYXVzZSINCiAgKSArDQogIHRoZW1lX2J3KCkNCg0KYGBgDQoNCg0KIyBRdWVzdGlvbiAjODkuIFBsZWFzZSByYXRlIHRoZSBleHRlbnQgdG8gd2hpY2ggdXJpbmFyeSBpbmNvbnRpbmVuY2UgaW1wYWN0cyB5b3VyIGRlc2lyZSB0byBlbmdhZ2UgaW4gZXhlcmNpc2UuIA0KDQoqQSBjaGktc3F1YXJlIGdvb2RuZXNzLW9mLWZpdCB0ZXN0IHdhcyBjb25kdWN0ZWQgdG8gZXhhbWluZSB3aG8gc2FpZCAiT2Z0ZW4vQWx3YXlzIiB0byBRODkgd2VyZSBlcXVhbGx5IGRpc3RyaWJ1dGVkIGFjcm9zcyB0aHJlZSBzdGFnZXMuIFRoZSByZXN1bHRzIGluZGljYXRlZCB0aGF0IHRoZSBvYnNlcnZlZCBmcmVxdWVuY2llcyBkaWZmZXJlZCBzaWduaWZpY2FudGx5IGZyb20gdGhlIGV4cGVjdGVkIGZyZXF1ZW5jaWVzLCDPh8KyKDIpID0gOC4zNjM2LCBwID0gLjAxNTI3LiBDcmFtZXIncyBWIHdhcyBzbWFsbCBhdCBWPTAuMDc0LCA5NSUgQ0koMC4wMzksIDAuMTI2KS4qDQoNCipBZGRpdGlvbmFsbHksIEEgY2hpLXNxdWFyZSBnb29kbmVzcy1vZi1maXQgdGVzdCB3YXMgY29uZHVjdGVkIHRvIGV4YW1pbmUgd2hvIHNhaWQgIlJhcmVseS9OZXZlciIgdG8gUTg5IHdlcmUgZXF1YWxseSBkaXN0cmlidXRlZCBhY3Jvc3MgdGhyZWUgc3RhZ2VzLiBUaGUgcmVzdWx0cyBpbmRpY2F0ZWQgdGhhdCB0aGUgb2JzZXJ2ZWQgZnJlcXVlbmNpZXMgZGlkIG5vdCBkaWZmZXIgc2lnbmlmaWNhbnRseSBmcm9tIHRoZSBleHBlY3RlZCBmcmVxdWVuY2llcywgz4fCsigyKSA9IDIuMzgyNiwgcD0gLjMwMzguQ3JhbWVyJ3MgViB3YXMgc21hbGwgYXQgVj0wLjA0LCA5NSUgQ0koMC4wMDAsIDAuMDkxKSAqDQoNCmBgYHtyIFE4OX0NCg0KZmlyc3QuZGF0YSA9IGZpcnN0LmRhdGEgJT4lDQogIG11dGF0ZShpbl9pbXBhY3Q9Y2FzZV93aGVuKElOQ09OVF9JTVBBQ1Q9PTF+IkFsd2F5cyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgIElOQ09OVF9JTVBBQ1Q9PTJ+Ik9mdGVuIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgIElOQ09OVF9JTVBBQ1Q9PTN+IlNvbWV0aW1lcyIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBJTkNPTlRfSU1QQUNUPT00fiJSYXJlbHkiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgSU5DT05UX0lNUEFDVD09NX4iTmV2ZXIiLCBUUlVFfk5BKSkNCmZpcnN0LmRhdGEkaW5faW1wYWN0IDwtIGZhY3RvcihmaXJzdC5kYXRhJGluX2ltcGFjdCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIk5ldmVyIiwiUmFyZWx5IiwgIlNvbWV0aW1lcyIsICJPZnRlbiIsIkFsd2F5cyIpKQ0KdGFibGUoZmlyc3QuZGF0YSRpbl9pbXBhY3QsIHVzZU5BID0gImFsd2F5cyIpDQoNCg0KI1JlbW92ZSBtaXNzaW5nIE49MjYyMiwgc2tpcCBsb2dpYw0KZGF0YSA9IGZpcnN0LmRhdGEgJT4lDQogIGZpbHRlcihJTkNPTlRfSU1QQUNUPDYpDQp4PXh0YWJzKH5pbl9pbXBhY3Qrc3RhdHVzLCBkYXRhPWRhdGEpDQpwcm9wLnRhYmxlKHgsMikNCngNCg0KI29mdGVuIGFuZCBhbHdheXMtY29tYmluZSByZXNwb25zZXMgZm9yIHgyIHRlc3QNCm9mdGVuID0gZGF0YSAlPiUNCiAgbXV0YXRlKGluY2ltcD1jYXNlX3doZW4oSU5DT05UX0lNUEFDVDw9Mn4iT2Z0ZW5hbHdheXMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOQ09OVF9JTVBBQ1Q+Mn4ib3RoZXIiKSkNCg0KdGFibGUob2Z0ZW4kaW5jaW1wKQ0KeD14dGFicyh+aW5jaW1wK3N0YXR1cywgZGF0YT1vZnRlbikNCngNCnJlc3VsdD1jaGlzcS50ZXN0KHgpDQpyZXN1bHQNCmNpX2NyYW1lcnN2KHJlc3VsdCkNCg0KYj1kYXRhLmZyYW1lKA0KbnVtPWMoMTYsIDkyLCA1MiksDQpkZW49YygxNisxMjYsIDkyKzYzNSwgNTIrNjA1KSwNCnN0YWdlPWMoInByZSIsICJwZXJpIiwgInBvc3QiKQ0KKQ0KDQpwYWlyd2lzZS5wcm9wLnRlc3QoeD1iJG51bSwgbj1iJGRlbiwgcC5hZGp1c3QubWV0aG9kID0gImhvbG0iKQ0KI25ldmVyIGFuZCByYXJlbHktY29tYmluZSByZXNwb25zZXMgZm9yIHgyIHRlc3QNCg0KbmV2ZXIgPSBkYXRhICU+JQ0KICBtdXRhdGUoaW5jaW1wPWNhc2Vfd2hlbihJTkNPTlRfSU1QQUNUPj00fiJyYXJlbHluZXZlciIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5DT05UX0lNUEFDVDw0fiJvdGhlciIpKQ0KDQp0YWJsZShuZXZlciRpbmNpbXApDQp4PXh0YWJzKH5pbmNpbXArc3RhdHVzLCBkYXRhPW5ldmVyKQ0KeA0KcmVzdWx0PWNoaXNxLnRlc3QoeCkNCnJlc3VsdA0KY2lfY3JhbWVyc3YocmVzdWx0KQ0KYGBgDQoNCg==