Question: New Cholesterol Medication
A pharmaceutical company develops “CholestFix” to
reduce Low-Density Lipoprotein (LDL, fat carrier that’s low in
density) cholesterol. The current standard drug
lowers LDL by an average of 25 mg/dL with a standard deviation of 15
mg/dL. A clinical trial with 5 participants were recruited in the study
for three months. At the end of the study, the mean reduction is 29
mg/dL. Assume that the variance of LDL reduction of new drug is the same
as that of the standard drugs.
Based on the results in the clinical trial, researchers in the company
believe
CholestFix is more effective.
a). Perform a formal hypothesis test of the researchers’ belief
regarding LDL reduction, using a significance level of \(\alpha = 0.05\).
# Given values
xbar <- 29
mu0 <- 25
sigma <- 15
n <- 5
# Standard error
se <- sigma / sqrt(n)
# Z-statistic
z <- (xbar - mu0) / se
# One-sided p-value
p_value <- 1 - pnorm(z)
# Output
z
[1] 0.5962848
[1] 0.2754925
The test compares the mean cholesterol reduction of CholestFix to
the standard value of 25 using a one-sided z-test. The resulting p-value
is relatively large (≈ 0.275) indicating that the observed sample mean
of 29 is not sufficiently extreme given the variability and small sample
size.
This analysis is valid because the population standard deviation
is assumed known and the test statistic follows a normal distribution.
However, the small sample size (n = 5) limits statistical
power.
Conclusion: There is insufficient evidence at the 5%
significance level to conclude that CholestFix produces a greater mean
reduction than the standard drug.
b). Given \(n = 50, \sigma = 15, \alpha =
0.05\), and an effect size we wish to detect \(\delta = 4\) mg/dL (corresponding to a
reduction from 29 mg/dL to 25 mg/dL). What is the probability that we’d
detect a true improvement?
# Given values
sigma <- 15
n <- 50
delta <- 4 # true mean difference
alpha <- 0.05
# Standard error
se <- sigma / sqrt(n)
# Critical value
z_alpha <- qnorm(1 - alpha)
# Effect size in z-units
effect_z <- delta / se
# Power
power <- 1 - pnorm(z_alpha - effect_z)
# Output
power
[1] 0.5951312
The computed power is approximately 0.60 meaning there is about a
60% probability of correctly rejecting the null hypothesis if the true
mean improvement is 4 units above the standard.
This calculation is valid under the assumptions of known
population variance and normality. It reflects the test’s sensitivity
given the specified effect size and sample size.
Conclusion: The study has only moderate power implying a
relatively high chance (40%) of failing to detect a true improvement. A
larger sample size would be needed for more reliable
detection.
c). Determine the minimum sample size required to detect an effect
size of 4 mg/dL with a power of \(1 - \beta =
0.8\) and a significance level of \(\alpha = 0.05\). Assume the standard
deviation of LDL reduction is 15 mg/dL.
# Given values
sigma <- 15
delta <- 4
alpha <- 0.05
power_target <- 0.80
# Z values
z_alpha <- qnorm(1 - alpha)
z_beta <- qnorm(power_target)
# Sample size formula
n_required <- (( (z_alpha + z_beta) * sigma ) / delta)^2
# Round up
n_required <- ceiling(n_required)
# Output
n_required
[1] 87
The required sample size to achieve 80% power is 87. This ensures
a high probability of detecting a true effect of size 4 at the 5%
significance level.
This result follows from standard sample size formulas for
z-tests under normality and known variance assumptions.
Conclusion: A larger sample size than initially used is
necessary to achieve adequate statistical power.
d).
Power curve: To assess the impact of sample size on
power, we can create a power function in terms of the sample size
\(n\) and use the remaining information from
part (b). Plot the power curve by selecting a sequence of sample sizes.
# Parameters
sigma <- 15
delta <- 4
alpha <- 0.05
# Sample size range
n_seq <- seq(10, 150, by = 1)
# Function to compute power
power_func <- function(n) {
se <- sigma / sqrt(n)
z_alpha <- qnorm(1 - alpha)
effect_z <- delta / se
1 - pnorm(z_alpha - effect_z)
}
# Compute power for each n
power_vals <- sapply(n_seq, power_func)
# Plot
plot(n_seq, power_vals, type = "l",
xlab = "Sample Size (n)",
ylab = "Power",
main = "Power Curve")
# Add reference line at 80% power
abline(h = 0.8, lty = 2)

The power curve shows that the statistical power increases as
sample size increases. For small sample sizes, when power is low, true
effects are likely to be missed but as sample size approaches 87, power
reaches the desired 80% level.
This analysis is valid because it applies the same assumptions as
earlier parts while systematically varying sample size.
Conclusion: Increasing sample size significantly improves the
ability to detect meaningful effects even though gains become more
gradual at larger sample sizes.
Note: For each of the questions
above, write a short summary of what you observed, justify why your
analysis is valid, and interpret the results.
LS0tDQp0aXRsZTogIkFzc2lnbm1lbnQgOTogSHlwb3RoZXNpcyBUZXN0aW5nIGFuZCBQb3dlciBhbmQgU2FtcGxlIHNpemUgRGV0ZXJtaW5hdGlvbiINCmF1dGhvcjogIktpZXJhbiBIZWZmZXJhbiAiDQpkYXRlOiAiIER1ZTogNC83LzI2ICINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDogDQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZGVwdGg6IDQNCiAgICB0b2NfZmxvYXQ6IHllcw0KICAgIG51bWJlcl9zZWN0aW9uczogbm8NCiAgICB0b2NfY29sbGFwc2VkOiB5ZXMNCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMNCiAgICBzbW9vdGhfc2Nyb2xsOiB5ZXMNCiAgICBoaWdobGlnaHQ6IG1vbm9jaHJvbWUNCiAgICB0aGVtZTogc3BhY2VsYWINCiAgd29yZF9kb2N1bWVudDogDQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZGVwdGg6IDQNCiAgICBmaWdfY2FwdGlvbjogeWVzDQogICAga2VlcF9tZDogeWVzDQogIHBkZl9kb2N1bWVudDogDQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZGVwdGg6IDQNCiAgICBmaWdfY2FwdGlvbjogeWVzDQogICAgbnVtYmVyX3NlY3Rpb25zOiB5ZXMNCiAgICBmaWdfd2lkdGg6IDMNCiAgICBmaWdfaGVpZ2h0OiAzDQplZGl0b3Jfb3B0aW9uczogDQogIGNodW5rX291dHB1dF90eXBlOiBpbmxpbmUNCi0tLQ0KDQpgYGB7Y3NzLCBlY2hvID0gRkFMU0V9DQojVE9DOjpiZWZvcmUgew0KICBjb250ZW50OiAiVGFibGUgb2YgQ29udGVudHMiOw0KICBmb250LXdlaWdodDogYm9sZDsNCiAgZm9udC1zaXplOiAxLjJlbTsNCiAgZGlzcGxheTogYmxvY2s7DQogIGNvbG9yOiBuYXZ5Ow0KICBtYXJnaW4tYm90dG9tOiAxMHB4Ow0KfQ0KDQoNCmRpdiNUT0MgbGkgeyAgICAgLyogdGFibGUgb2YgY29udGVudCAgKi8NCiAgICBsaXN0LXN0eWxlOnVwcGVyLXJvbWFuOw0KICAgIGJhY2tncm91bmQtaW1hZ2U6bm9uZTsNCiAgICBiYWNrZ3JvdW5kLXJlcGVhdDpub25lOw0KICAgIGJhY2tncm91bmQtcG9zaXRpb246MDsNCn0NCg0KaDEudGl0bGUgeyAgICAvKiBsZXZlbCAxIGhlYWRlciBvZiB0aXRsZSAgKi8NCiAgZm9udC1zaXplOiAyMnB4Ow0KICBmb250LXdlaWdodDogYm9sZDsNCiAgY29sb3I6IERhcmtSZWQ7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgZm9udC1mYW1pbHk6ICJHaWxsIFNhbnMiLCBzYW5zLXNlcmlmOw0KfQ0KDQpoNC5hdXRob3IgeyAvKiBIZWFkZXIgNCAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLw0KICBmb250LXNpemU6IDE1cHg7DQogIGZvbnQtd2VpZ2h0OiBib2xkOw0KICBmb250LWZhbWlseTogc3lzdGVtLXVpOw0KICBjb2xvcjogbmF2eTsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KDQpoNC5kYXRlIHsgLyogSGVhZGVyIDQgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8NCiAgZm9udC1zaXplOiAxOHB4Ow0KICBmb250LXdlaWdodDogYm9sZDsNCiAgZm9udC1mYW1pbHk6ICJHaWxsIFNhbnMiLCBzYW5zLXNlcmlmOw0KICBjb2xvcjogRGFya0JsdWU7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCn0NCg0KaDEgeyAvKiBIZWFkZXIgMSAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLw0KICAgIGZvbnQtc2l6ZTogMjBweDsNCiAgICBmb250LXdlaWdodDogYm9sZDsNCiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgICBjb2xvcjogZGFya3JlZDsNCiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7DQp9DQoNCmgyIHsgLyogSGVhZGVyIDIgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8NCiAgICBmb250LXNpemU6IDE4cHg7DQogICAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogICAgY29sb3I6IG5hdnk7DQogICAgdGV4dC1hbGlnbjogbGVmdDsNCn0NCg0KaDMgeyAvKiBIZWFkZXIgMyAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLw0KICAgIGZvbnQtc2l6ZTogMTZweDsNCiAgICBmb250LXdlaWdodDogYm9sZDsNCiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgICBjb2xvcjogbmF2eTsNCiAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KfQ0KDQpoNCB7IC8qIEhlYWRlciA0IC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovDQogICAgZm9udC1zaXplOiAxNHB4Ow0KICBmb250LXdlaWdodDogYm9sZDsNCiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgICBjb2xvcjogZGFya3JlZDsNCiAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KfQ0KDQovKiBBZGQgZG90cyBhZnRlciBudW1iZXJlZCBoZWFkZXJzICovDQouaGVhZGVyLXNlY3Rpb24tbnVtYmVyOjphZnRlciB7DQogIGNvbnRlbnQ6ICIuIjsNCg0KYm9keSB7YmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjsNCiAgICAgIGNvbG9yOiAjMDAwMDAwOw0KICAgICAgZm9udC1mYW1pbHk6IEFyaWFsLCBzYW5zLXNlcmlmOw0KICAgICAgZm9udC1zaXplOiAxcmVtOw0KICAgICAgbGluZS1oZWlnaHQ6IDEuNjsNCiAgICAgIH0NCg0KLmhpZ2hsaWdodG1lIHsgYmFja2dyb3VuZC1jb2xvcjp5ZWxsb3c7IH0NCg0KcCB7IGJhY2tncm91bmQtY29sb3I6d2hpdGU7IH0NCg0KfQ0KYGBgDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0KIyBjb2RlIGNodW5rIHNwZWNpZmllcyB3aGV0aGVyIHRoZSBSIGNvZGUsIHdhcm5pbmdzLCBhbmQgb3V0cHV0IA0KIyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBvdXRwdXQgZmlsZXMuDQppZiAoIXJlcXVpcmUoImtuaXRyIikpIHsNCiAgIGluc3RhbGwucGFja2FnZXMoImtuaXRyIikNCiAgIGxpYnJhcnkoa25pdHIpDQp9DQppZiAoIXJlcXVpcmUoInBhbmRlciIpKSB7DQogICBpbnN0YWxsLnBhY2thZ2VzKCJwYW5kZXIiKQ0KICAgbGlicmFyeShwYW5kZXIpDQp9DQppZiAoIXJlcXVpcmUoImdncGxvdDIiKSkgew0KICBpbnN0YWxsLnBhY2thZ2VzKCJnZ3Bsb3QyIikNCiAgbGlicmFyeShnZ3Bsb3QyKQ0KfQ0KaWYgKCFyZXF1aXJlKCJ0aWR5dmVyc2UiKSkgew0KICBpbnN0YWxsLnBhY2thZ2VzKCJ0aWR5dmVyc2UiKQ0KICBsaWJyYXJ5KHRpZHl2ZXJzZSkNCn0NCg0KaWYgKCFyZXF1aXJlKCJwbG90bHkiKSkgew0KICBpbnN0YWxsLnBhY2thZ2VzKCJwbG90bHkiKQ0KICBsaWJyYXJ5KHBsb3RseSkNCn0NCg0KaWYgKCFyZXF1aXJlKCJWR0FNIikpIHsNCiAgaW5zdGFsbC5wYWNrYWdlcygiVkdBTSIpDQogIGxpYnJhcnkoVkdBTSkNCn0NCiMjIyMgVkdBTQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFLCAgICAgICAjIGluY2x1ZGUgY29kZSBjaHVuayBpbiB0aGUgb3V0cHV0IGZpbGUNCiAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nID0gRkFMU0UsICAgIyBzb21ldGltZXMsIHlvdSBjb2RlIG1heSBwcm9kdWNlIHdhcm5pbmcgbWVzc2FnZXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgeW91IGNhbiBjaG9vc2UgdG8gaW5jbHVkZSB0aGUgd2FybmluZyBtZXNzYWdlcyBpbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRoZSBvdXRwdXQgZmlsZS4gDQogICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IFRSVUUsICAgICMgeW91IGNhbiBhbHNvIGRlY2lkZSB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlIG91dHB1dA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGluIHRoZSBvdXRwdXQgZmlsZS4NCiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gRkFMU0UsDQogICAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IE5BDQogICAgICAgICAgICAgICAgICAgICAgKSAgDQpgYGANCiANCiBcDQogDQojIyAqKkFzc2lnbm1lbnQgT2JqZWN0aXZlcyoqIA0KDQo8cD4NCiogRW5oYW5jZSB1bmRlcnN0YW5kaW5nIHRoZSBsb2dpYyBhbmQgcHJvY2VkdXJlIG9mIGh5cG90aGVzaXMgdGVzdGluZyAuDQoNCiogSW1wbGVtZW50IHRoZSBwcm9jZWR1cmVzIGZvciBwb3dlciBhbmQgc2FtcGxlIHNpemUgY2FsY3VsYXRpb24gZm9yIGJhc2ljIGh5cG90aGVzaXMgdGVzdGluZyBwcm9jZWR1cmVzIHVzaW5nIG51aWx0LWluIGZ1bmN0aW9uIGFuZCBtYW51YWwgY2FsY3VsYXRpb24uDQo8L3A+DQoNCg0KIyMgKipQb2xpY2llcyBvZiBVc2luZyBBSSBUb29scyoqDQoNCjxwPg0KKipQb2xpY3kgb24gQUkgVG9vbCBVc2UqKjogUGxlYXNlIGFkaGVyZSB0byB0aGUgQUkgdG9vbCBwb2xpY3kgc3BlY2lmaWVkIGluIHRoZSBjb3Vyc2Ugc3lsbGFidXMuIFRoZSBkaXJlY3QgY29weWluZyBvZiBBSS1nZW5lcmF0ZWQgY29udGVudCBpcyBzdHJpY3RseSBwcm9oaWJpdGVkLiBBbGwgc3VibWl0dGVkIHdvcmsgbXVzdCByZWZsZWN0IHlvdXIgb3duIHVuZGVyc3RhbmRpbmc7IHdoZXJlIGV4dGVybmFsIHRvb2xzIGFyZSBjb25zdWx0ZWQsIGNvbnRlbnQgbXVzdCBiZSB0aG9yb3VnaGx5IHJlcGhyYXNlZCBhbmQgc3ludGhlc2l6ZWQgaW4geW91ciBvd24gd29yZHMuDQo8L3A+DQoNCjxwPg0KKipDb2RlIEluY2x1c2lvbiBSZXF1aXJlbWVudCoqOiBBbnkgY29kZSBpbmNsdWRlZCBpbiB5b3VyIGVzc2F5IG11c3QgYmUgcHJvcGVybHkgY29tbWVudGVkIHRvIGV4cGxhaW4gdGhlIHB1cnBvc2UgYW5kL29yIGV4cGVjdGVkIG91dHB1dCBvZiBrZXkgY29kZSBsaW5lcy4gU3VibWl0dGluZyBBSS1nZW5lcmF0ZWQgY29kZSB3aXRob3V0IG1lYW5pbmdmdWwsIHN0dWRlbnQtYWRkZWQgY29tbWVudHMgd2lsbCBub3QgYmUgYWNjZXB0ZWQuDQo8L3A+DQoNCg0KIyMgKipTaW1wbGUgdmVyc3VzIENvbXBvc2l0ZSBIeXBvdGhlc2lzKg0KDQoqKlNpbXBsZSBIeXBvdGhlc2lzKioNCg0KKiAqKlNpbXBsZSBIeXBvdGhlc2lzIFRlc3QqKiBpcyBhIGh5cG90aGVzaXMgdGhhdCBjb21wbGV0ZWx5IHNwZWNpZmllcyB0aGUgcG9wdWxhdGlvbiBkaXN0cmlidXRpb24uIE1hdGhlbWF0aWNhbGx5LCBzaW1wbGUgaHlwb3RoZXNpcyBmaXhlcyBhbGwgcGFyYW1ldGVycyB0byBzcGVjaWZpYyB2YWx1ZXMuIEZvciBleGFtcGxlLCBUaGUgc2ltcGxlIGh5cG90aGVzZXMgYXJlOiAkSF8wOiBcbXUgPSA1JCAoaWYgJFxhbHBoYSQgaXMga25vd24pLCAkSF8wOiBcbXUgPSAxMDAsIFxzaWdtYV4yID0gMjUkLCBhbmQgJEhfMTogcCA9IDAuNyQgZm9yIGEgQmVybm91bGxpIGRpc3RyaWJ1dGlvbi4NCg0KKiAqKkV4YW1wbGUgU2NlbmFyaW8qKiAgVGVzdCBpZiBhIGNvaW4gaXMgZmFpcjoNCg0KXGJlZ2lue2FsaWduZWR9DQpIXzAmOiBwID0gMC41IFxxdWFkIFx0ZXh0eyhjb21wbGV0ZWx5IHNwZWNpZmllZCl9IFxcDQpIXzEmOiBwID0gMC42IFxxdWFkIFx0ZXh0eyhhbHNvIGNvbXBsZXRlbHkgc3BlY2lmaWVkKX0NClxlbmR7YWxpZ25lZH0NCg0KQm90aCBhcmUgKipzaW1wbGUqKiBoeXBvdGhlc2VzLg0KDQoqKkNvbXBvc2l0ZSBIeXBvdGhlc2lzKioNCg0KKiAqKkNvbXBvc2l0ZSBIeXBvdGhlc2lzKiogaXMgYSBoeXBvdGhlc2lzIHRoYXQgZG9lcyBub3QgY29tcGxldGVseSBzcGVjaWZ5IHRoZSBkaXN0cmlidXRpb24uIE1hdGhlbWF0aWNhbGx5LCBpdCBhbGxvd3MgYSByYW5nZSBvZiB2YWx1ZXMgZm9yIGF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIuIEZvciBleGFtcGxlLCBpbiBvbmUtc2lkZWQ6ICRcbXUgPjUkOyBpbiB0d28tc2lkZWQ6ICRcbXUgXGxlIDUkLg0KDQoqICoqRXhhbXBsZSBTY2VuYXJpb3MqKiANCg0KDQpcYmVnaW57YWxpZ25lZH0NCiZIXzA6IFxtdSA9IDUgJiYgXHRleHR7KHNpbXBsZSl9IFxcDQomSF8xOiBcbXUgPiA1ICYmIFx0ZXh0eyhjb21wb3NpdGUpfQ0KXGVuZHthbGlnbmVkfQ0KDQoNCg0KXGJlZ2lue2FsaWduZWR9DQomSF8wOiBcbXUgXGxlcSA1ICYmIFx0ZXh0eyhjb21wb3NpdGUpfSBcXA0KJkhfMTogXG11ID4gNSAmJiBcdGV4dHsoY29tcG9zaXRlKX0NClxlbmR7YWxpZ25lZH0NCg0KDQpcYmVnaW57YWxpZ25lZH0NCiZIXzA6IFx0ZXh0e2RhdGEgZm9sbG93cyB9IE4oXG11LCAxKSwgXG11ID0gMCAmJiBcdGV4dHsoc2ltcGxlKX0gXFwNCiZIXzE6IFx0ZXh0e2RhdGEgZm9sbG93cyBQb2lzc29ufShcbGFtYmRhKSAmJiBcdGV4dHsoY29tcG9zaXRlIOKAkyBkaWZmZXJlbnQgZmFtaWx5KX0NClxlbmR7YWxpZ25lZH0NCg0KDQoNCjxwPjxmb250IGNvbG9yID0gImRhcmtyZWQiPioqVGhpcyBhc3NpZ25tZW50IGZvY3VzZXMgb24gcGVyZm9ybWluZyBwZXJmb3JtaW5nIGEgdGVzdCBvZiBtZWFuICgkXG11JCkgYSBub3JtYWwgcG9wdWxhdGlvbiBhbmQgY2FsY3VsYXRpbmcgdGhlIHBvd2VyIGFuZCBzYW1wbGUgc2l6ZSBiYXNlZCBvbiB2YXJpb3VzIGFzc3VtcHRpb25zKio8L2ZvbnQ+PC9wPg0KDQoNClwNCg0KIyMgKipRdWVzdGlvbjogTmV3IENob2xlc3Rlcm9sIE1lZGljYXRpb24qKg0KDQo8cD4NCkEgcGhhcm1hY2V1dGljYWwgY29tcGFueSBkZXZlbG9wcyAqKiJDaG9sZXN0Rml4IioqIHRvIHJlZHVjZSBMb3ctRGVuc2l0eSBMaXBvcHJvdGVpbiAoTERMLCAqZmF0IGNhcnJpZXIgdGhhdCdzIGxvdyBpbiBkZW5zaXR5KikgY2hvbGVzdGVyb2wuIFRoZSAqKmN1cnJlbnQgc3RhbmRhcmQgZHJ1ZyoqIGxvd2VycyBMREwgYnkgYW4gYXZlcmFnZSBvZiAyNSBtZy9kTCB3aXRoIGEgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIDE1IG1nL2RMLiBBIGNsaW5pY2FsIHRyaWFsIHdpdGggNSBwYXJ0aWNpcGFudHMgd2VyZSByZWNydWl0ZWQgaW4gdGhlIHN0dWR5IGZvciB0aHJlZSBtb250aHMuIEF0IHRoZSBlbmQgb2YgdGhlIHN0dWR5LCB0aGUgbWVhbiByZWR1Y3Rpb24gaXMgMjkgbWcvZEwuIEFzc3VtZSB0aGF0IHRoZSB2YXJpYW5jZSBvZiBMREwgcmVkdWN0aW9uIG9mIG5ldyBkcnVnIGlzIHRoZSBzYW1lIGFzIHRoYXQgb2YgdGhlIHN0YW5kYXJkIGRydWdzLg0KDQpCYXNlZCBvbiB0aGUgcmVzdWx0cyBpbiB0aGUgY2xpbmljYWwgdHJpYWwsIHJlc2VhcmNoZXJzIGluIHRoZSBjb21wYW55IGJlbGlldmUgKipDaG9sZXN0Rml4KiogaXMgbW9yZSBlZmZlY3RpdmUuDQo8L3A+DQoNCg0KPHA+DQphKS4gUGVyZm9ybSBhIGZvcm1hbCBoeXBvdGhlc2lzIHRlc3Qgb2YgdGhlIHJlc2VhcmNoZXJz4oCZIGJlbGllZiByZWdhcmRpbmcgTERMIHJlZHVjdGlvbiwgdXNpbmcgYSBzaWduaWZpY2FuY2UgbGV2ZWwgb2YgJFxhbHBoYSA9IDAuMDUkLg0KYGBge3J9DQojIEdpdmVuIHZhbHVlcw0KeGJhciA8LSAyOQ0KbXUwICA8LSAyNQ0Kc2lnbWEgPC0gMTUNCm4gPC0gNQ0KDQojIFN0YW5kYXJkIGVycm9yDQpzZSA8LSBzaWdtYSAvIHNxcnQobikNCg0KIyBaLXN0YXRpc3RpYw0KeiA8LSAoeGJhciAtIG11MCkgLyBzZQ0KDQojIE9uZS1zaWRlZCBwLXZhbHVlDQpwX3ZhbHVlIDwtIDEgLSBwbm9ybSh6KQ0KDQojIE91dHB1dA0Keg0KcF92YWx1ZQ0KYGBgDQoqVGhlIHRlc3QgY29tcGFyZXMgdGhlIG1lYW4gY2hvbGVzdGVyb2wgcmVkdWN0aW9uIG9mIENob2xlc3RGaXggdG8gdGhlIHN0YW5kYXJkIHZhbHVlIG9mIDI1IHVzaW5nIGEgb25lLXNpZGVkIHotdGVzdC4gVGhlIHJlc3VsdGluZyBwLXZhbHVlIGlzIHJlbGF0aXZlbHkgbGFyZ2UgKOKJiCAwLjI3NSkgaW5kaWNhdGluZyB0aGF0IHRoZSBvYnNlcnZlZCBzYW1wbGUgbWVhbiBvZiAyOSBpcyBub3Qgc3VmZmljaWVudGx5IGV4dHJlbWUgZ2l2ZW4gdGhlIHZhcmlhYmlsaXR5IGFuZCBzbWFsbCBzYW1wbGUgc2l6ZS4qDQoNCipUaGlzIGFuYWx5c2lzIGlzIHZhbGlkIGJlY2F1c2UgdGhlIHBvcHVsYXRpb24gc3RhbmRhcmQgZGV2aWF0aW9uIGlzIGFzc3VtZWQga25vd24gYW5kIHRoZSB0ZXN0IHN0YXRpc3RpYyBmb2xsb3dzIGEgbm9ybWFsIGRpc3RyaWJ1dGlvbi4gSG93ZXZlciwgdGhlIHNtYWxsIHNhbXBsZSBzaXplIChuID0gNSkgbGltaXRzIHN0YXRpc3RpY2FsIHBvd2VyLioNCg0KKipDb25jbHVzaW9uOiBUaGVyZSBpcyBpbnN1ZmZpY2llbnQgZXZpZGVuY2UgYXQgdGhlIDUlIHNpZ25pZmljYW5jZSBsZXZlbCB0byBjb25jbHVkZSB0aGF0IENob2xlc3RGaXggcHJvZHVjZXMgYSBncmVhdGVyIG1lYW4gcmVkdWN0aW9uIHRoYW4gdGhlIHN0YW5kYXJkIGRydWcuKiogDQoNCmIpLiBHaXZlbiAkbiA9IDUwLCBcc2lnbWEgPSAxNSwgXGFscGhhID0gMC4wNSQsIGFuZCBhbiBlZmZlY3Qgc2l6ZSB3ZSB3aXNoIHRvIGRldGVjdCAkXGRlbHRhID0gNCQgbWcvZEwgKGNvcnJlc3BvbmRpbmcgdG8gYSByZWR1Y3Rpb24gZnJvbSAyOSBtZy9kTCB0byAyNSBtZy9kTCkuICBXaGF0IGlzIHRoZSBwcm9iYWJpbGl0eSB0aGF0IHdlJ2QgZGV0ZWN0IGEgdHJ1ZSBpbXByb3ZlbWVudD8NCmBgYHtyfQ0KIyBHaXZlbiB2YWx1ZXMNCnNpZ21hIDwtIDE1DQpuIDwtIDUwDQpkZWx0YSA8LSA0ICAgIyB0cnVlIG1lYW4gZGlmZmVyZW5jZQ0KYWxwaGEgPC0gMC4wNQ0KDQojIFN0YW5kYXJkIGVycm9yDQpzZSA8LSBzaWdtYSAvIHNxcnQobikNCg0KIyBDcml0aWNhbCB2YWx1ZQ0Kel9hbHBoYSA8LSBxbm9ybSgxIC0gYWxwaGEpDQoNCiMgRWZmZWN0IHNpemUgaW4gei11bml0cw0KZWZmZWN0X3ogPC0gZGVsdGEgLyBzZQ0KDQojIFBvd2VyDQpwb3dlciA8LSAxIC0gcG5vcm0oel9hbHBoYSAtIGVmZmVjdF96KQ0KDQojIE91dHB1dA0KcG93ZXINCmBgYA0KKlRoZSBjb21wdXRlZCBwb3dlciBpcyBhcHByb3hpbWF0ZWx5IDAuNjAgbWVhbmluZyB0aGVyZSBpcyBhYm91dCBhIDYwJSBwcm9iYWJpbGl0eSBvZiBjb3JyZWN0bHkgcmVqZWN0aW5nIHRoZSBudWxsIGh5cG90aGVzaXMgaWYgdGhlIHRydWUgbWVhbiBpbXByb3ZlbWVudCBpcyA0IHVuaXRzIGFib3ZlIHRoZSBzdGFuZGFyZC4qDQoNCipUaGlzIGNhbGN1bGF0aW9uIGlzIHZhbGlkIHVuZGVyIHRoZSBhc3N1bXB0aW9ucyBvZiBrbm93biBwb3B1bGF0aW9uIHZhcmlhbmNlIGFuZCBub3JtYWxpdHkuIEl0IHJlZmxlY3RzIHRoZSB0ZXN04oCZcyBzZW5zaXRpdml0eSBnaXZlbiB0aGUgc3BlY2lmaWVkIGVmZmVjdCBzaXplIGFuZCBzYW1wbGUgc2l6ZS4qDQoNCioqQ29uY2x1c2lvbjogVGhlIHN0dWR5IGhhcyBvbmx5IG1vZGVyYXRlIHBvd2VyIGltcGx5aW5nIGEgcmVsYXRpdmVseSBoaWdoIGNoYW5jZSAoNDAlKSBvZiBmYWlsaW5nIHRvIGRldGVjdCBhIHRydWUgaW1wcm92ZW1lbnQuIEEgbGFyZ2VyIHNhbXBsZSBzaXplIHdvdWxkIGJlIG5lZWRlZCBmb3IgbW9yZSByZWxpYWJsZSBkZXRlY3Rpb24uKioNCg0KYykuIERldGVybWluZSB0aGUgbWluaW11bSBzYW1wbGUgc2l6ZSByZXF1aXJlZCB0byBkZXRlY3QgYW4gZWZmZWN0IHNpemUgb2YgNCBtZy9kTCB3aXRoIGEgcG93ZXIgb2YgJDEgLSBcYmV0YSA9IDAuOCQgIGFuZCBhIHNpZ25pZmljYW5jZSBsZXZlbCBvZiAkXGFscGhhID0gMC4wNSQuIEFzc3VtZSB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIExETCByZWR1Y3Rpb24gaXMgMTUgbWcvZEwuDQpgYGB7cn0NCiMgR2l2ZW4gdmFsdWVzDQpzaWdtYSA8LSAxNQ0KZGVsdGEgPC0gNA0KYWxwaGEgPC0gMC4wNQ0KcG93ZXJfdGFyZ2V0IDwtIDAuODANCg0KIyBaIHZhbHVlcw0Kel9hbHBoYSA8LSBxbm9ybSgxIC0gYWxwaGEpDQp6X2JldGEgIDwtIHFub3JtKHBvd2VyX3RhcmdldCkNCg0KIyBTYW1wbGUgc2l6ZSBmb3JtdWxhDQpuX3JlcXVpcmVkIDwtICgoICh6X2FscGhhICsgel9iZXRhKSAqIHNpZ21hICkgLyBkZWx0YSleMg0KDQojIFJvdW5kIHVwDQpuX3JlcXVpcmVkIDwtIGNlaWxpbmcobl9yZXF1aXJlZCkNCg0KIyBPdXRwdXQNCm5fcmVxdWlyZWQNCmBgYA0KKlRoZSByZXF1aXJlZCBzYW1wbGUgc2l6ZSB0byBhY2hpZXZlIDgwJSBwb3dlciBpcyA4Ny4gVGhpcyBlbnN1cmVzIGEgaGlnaCBwcm9iYWJpbGl0eSBvZiBkZXRlY3RpbmcgYSB0cnVlIGVmZmVjdCBvZiBzaXplIDQgYXQgdGhlIDUlIHNpZ25pZmljYW5jZSBsZXZlbC4qDQoNCipUaGlzIHJlc3VsdCBmb2xsb3dzIGZyb20gc3RhbmRhcmQgc2FtcGxlIHNpemUgZm9ybXVsYXMgZm9yIHotdGVzdHMgdW5kZXIgbm9ybWFsaXR5IGFuZCBrbm93biB2YXJpYW5jZSBhc3N1bXB0aW9ucy4qDQoNCioqQ29uY2x1c2lvbjogQSBsYXJnZXIgc2FtcGxlIHNpemUgdGhhbiBpbml0aWFsbHkgdXNlZCBpcyBuZWNlc3NhcnkgdG8gYWNoaWV2ZSBhZGVxdWF0ZSBzdGF0aXN0aWNhbCBwb3dlci4qKg0KDQpkKS4gKipQb3dlciBjdXJ2ZSoqOiBUbyBhc3Nlc3MgdGhlIGltcGFjdCBvZiBzYW1wbGUgc2l6ZSBvbiBwb3dlciwgd2UgY2FuIGNyZWF0ZSBhIHBvd2VyIGZ1bmN0aW9uIGluIHRlcm1zIG9mIHRoZSBzYW1wbGUgc2l6ZSAkbiQgYW5kIHVzZSB0aGUgcmVtYWluaW5nIGluZm9ybWF0aW9uIGZyb20gcGFydCAoYikuIFBsb3QgdGhlIHBvd2VyIGN1cnZlIGJ5IHNlbGVjdGluZyBhIHNlcXVlbmNlIG9mIHNhbXBsZSBzaXplcy4NCjwvcD4NCmBgYHtyfQ0KIyBQYXJhbWV0ZXJzDQpzaWdtYSA8LSAxNQ0KZGVsdGEgPC0gNA0KYWxwaGEgPC0gMC4wNQ0KDQojIFNhbXBsZSBzaXplIHJhbmdlDQpuX3NlcSA8LSBzZXEoMTAsIDE1MCwgYnkgPSAxKQ0KDQojIEZ1bmN0aW9uIHRvIGNvbXB1dGUgcG93ZXINCnBvd2VyX2Z1bmMgPC0gZnVuY3Rpb24obikgew0KICBzZSA8LSBzaWdtYSAvIHNxcnQobikNCiAgel9hbHBoYSA8LSBxbm9ybSgxIC0gYWxwaGEpDQogIGVmZmVjdF96IDwtIGRlbHRhIC8gc2UNCiAgMSAtIHBub3JtKHpfYWxwaGEgLSBlZmZlY3RfeikNCn0NCg0KIyBDb21wdXRlIHBvd2VyIGZvciBlYWNoIG4NCnBvd2VyX3ZhbHMgPC0gc2FwcGx5KG5fc2VxLCBwb3dlcl9mdW5jKQ0KDQojIFBsb3QNCnBsb3Qobl9zZXEsIHBvd2VyX3ZhbHMsIHR5cGUgPSAibCIsDQogICAgIHhsYWIgPSAiU2FtcGxlIFNpemUgKG4pIiwNCiAgICAgeWxhYiA9ICJQb3dlciIsDQogICAgIG1haW4gPSAiUG93ZXIgQ3VydmUiKQ0KDQojIEFkZCByZWZlcmVuY2UgbGluZSBhdCA4MCUgcG93ZXINCmFibGluZShoID0gMC44LCBsdHkgPSAyKSANCg0KYGBgDQoNCipUaGUgcG93ZXIgY3VydmUgc2hvd3MgdGhhdCB0aGUgc3RhdGlzdGljYWwgcG93ZXIgaW5jcmVhc2VzIGFzIHNhbXBsZSBzaXplIGluY3JlYXNlcy4gRm9yIHNtYWxsIHNhbXBsZSBzaXplcywgd2hlbiBwb3dlciBpcyBsb3csIHRydWUgZWZmZWN0cyBhcmUgbGlrZWx5IHRvIGJlIG1pc3NlZCBidXQgYXMgc2FtcGxlIHNpemUgYXBwcm9hY2hlcyA4NywgcG93ZXIgcmVhY2hlcyB0aGUgZGVzaXJlZCA4MCUgbGV2ZWwuKg0KDQoqVGhpcyBhbmFseXNpcyBpcyB2YWxpZCBiZWNhdXNlIGl0IGFwcGxpZXMgdGhlIHNhbWUgYXNzdW1wdGlvbnMgYXMgZWFybGllciBwYXJ0cyB3aGlsZSBzeXN0ZW1hdGljYWxseSB2YXJ5aW5nIHNhbXBsZSBzaXplLioNCg0KKipDb25jbHVzaW9uOiBJbmNyZWFzaW5nIHNhbXBsZSBzaXplIHNpZ25pZmljYW50bHkgaW1wcm92ZXMgdGhlIGFiaWxpdHkgdG8gZGV0ZWN0IG1lYW5pbmdmdWwgZWZmZWN0cyBldmVuIHRob3VnaCBnYWlucyBiZWNvbWUgbW9yZSBncmFkdWFsIGF0IGxhcmdlciBzYW1wbGUgc2l6ZXMuKioNCg0KDQo8Zm9udCBjb2xvciA9ICJyZWQiPioqTm90ZSoqOiBGb3IgZWFjaCBvZiB0aGUgcXVlc3Rpb25zIGFib3ZlLCB3cml0ZSBhIHNob3J0IHN1bW1hcnkgb2Ygd2hhdCB5b3Ugb2JzZXJ2ZWQsIGp1c3RpZnkgd2h5IHlvdXIgYW5hbHlzaXMgaXMgdmFsaWQsIGFuZCBpbnRlcnByZXQgdGhlIHJlc3VsdHMuPC9mb250Pg0KDQo=