Assignment Objectives

  • Reinforce the likelihood concepts and MLE.

  • Understand the concepts of confidence intervals.

  • Master the process of finding likelihood ratio confidence interval of unknown parameter.


Policies of Using AI Tools

Policy on AI Tool Use: You must adhere to the AI tool policy specified in the course syllabus. The direct copying of AI-generated content is strictly prohibited. All submitted work must reflect your own understanding; where external tools are consulted, content must be thoroughly rephrased and synthesized in your own words.

Code Inclusion Requirement: Any code included in your essay must be properly commented to explain the purpose and/or expected output of key code lines. Submitting AI-generated code without meaningful, student-added comments will not be accepted.


One Parameter Lindley Distribution

The Lindley distribution is a continuous probability distribution proposed by D.V. Lindley in 1958. It represents a weighted mixture of exponential and gamma distributions, providing a flexible single-parameter model for lifetime data.

\[ f(x;\theta) = \frac{\theta^2}{1+\theta}(1+x)e^{-\theta x}, \quad x > 0, \quad \theta > 0 \]

where \(x\) = random variable (e.g., time, size, amount) and \(\theta\) = shape parameter controlling the distribution.

Given an independent random sample \(X_1, X_2, \dots, X_n\):

\[ L(\theta) = \prod_{i=1}^n f(x_i;\theta) = \prod_{i=1}^n \left[ \frac{\theta^2}{1+\theta} (1 + x_i) e^{-\theta x_i} \right]. \]

Let \(S = \sum_{i=1}^n x_i\), \(\bar{x} = S/n\), and \(C = \sum_{i=1}^n \ln(1 + x_i)\) (constant with respect to \(\theta\)):

\[ \ell(\theta) = \ln L(\theta) = n \ln\left( \frac{\theta^2}{1+\theta} \right) + C - \theta S. \]

After some algebra, we obtain the closed form of the MLE of \(\theta\) in the following

\[ \boxed{\hat{\theta} = \frac{1 - \bar{x} + \sqrt{\bar{x}^2 + 6\bar{x} + 1}}{2\bar{x}}} \]

As good exercise, we can derive the following Fisher information of \(\theta\):

\[ \boxed{I(\theta) = \frac{2}{\theta^2} - \frac{1}{(1+\theta)^2}} \]


This assignment focuses on constructing various confidence intervals of the shape parameter \(\theta\) in the Lindley distribution.


Question: Customer Service Times (minutes)

The customer service call duration data set originates from a major telecommunications provider in North America, operating in a highly competitive market where:

3.2, 5.8, 7.1, 4.5, 10.3, 6.2, 8.7, 5.1, 12.5, 6.9,
9.4, 5.7, 11.8, 4.9, 9.1, 6.5, 13.2, 7.8, 10.6, 6.1,
8.9, 5.4, 12.1, 7.3, 9.8, 5.9, 11.4, 6.8, 10.9, 7.5,
4.2, 8.3, 6.4, 14.1, 5.6, 9.7, 7.9, 11.1, 6.7, 10.2,
5.3, 8.6, 7.2, 12.9, 6.3, 9.3, 8.1, 13.7, 7.6, 10.8
times <- c(
  3.2, 5.8, 7.1, 4.5, 10.3, 6.2, 8.7, 5.1, 12.5, 6.9,
  9.4, 5.7, 11.8, 4.9, 9.1, 6.5, 13.2, 7.8, 10.6, 6.1,
  8.9, 5.4, 12.1, 7.3, 9.8, 5.9, 11.4, 6.8, 10.9, 7.5,
  4.2, 8.3, 6.4, 14.1, 5.6, 9.7, 7.9, 11.1, 6.7, 10.2,
  5.3, 8.6, 7.2, 12.9, 6.3, 9.3, 8.1, 13.7, 7.6, 10.8
)

n <- length(times)
S <- sum(times)
xbar <- mean(times)

c(n = n, S = S, xbar = xbar)
      n       S    xbar 
 50.000 415.400   8.308 

From the data, we compute the basic summaries needed for the analysis: n = 50, S = 415.4, and x̄ = 8.308. These values will be used in constructing the estimators and confidence intervals.

Assuming the data follow a one-parameter Lindley distribution, construct a \(95\%\) confidence interval for the parameter \(\theta\) using the provided data and the specified methods. For each of the following questions, first describe your reasoning process for the analysis, then write code to perform the actual analysis. Finally, summarize the results to conclude the question.

  1. Construct a 95% asymptotic confidence interval based on the asymptotic sampling distribution of the maximum likelihood estimator (MLE) of \(\theta\).

To construct the asymptotic confidence interval, I use the fact that the MLE is approximately normal for large samples. Using the expressions for the MLE and Fisher information provided above, I estimate the variance by plugging in the MLE for \(\theta\). This gives a standard error, and I then use the normal critical value 1.96 to form the 95% confidence interval.

## Compute MLE of Theta Using Given Formula
theta_hat <- (1 - xbar + sqrt(xbar^2 + 6 * xbar + 1)) / (2 * xbar)

## Define Fisher Information Function
I_theta <- function(theta) {
  2 / theta^2 - 1 / (1 + theta)^2
}

## Compute Standard Error Using Plug-in Estimate
se_theta_hat <- sqrt(1 / (n * I_theta(theta_hat)))

## Obtain 95% Normal Critical Value
z_crit <- qnorm(0.975)

## Construct Asymptotic Confidence Interval
ci_asym <- theta_hat + c(-1, 1) * z_crit * se_theta_hat

theta_hat
[1] 0.2190994
se_theta_hat
[1] 0.02208903
ci_asym
[1] 0.1758057 0.2623931

The 95% asymptotic confidence interval for \(\theta\) is (0.1758, 0.2624). This interval represents the range of values for \(\theta\) that are consistent with the observed data. The relatively narrow width of the interval suggests a small standard error and a stable estimate.

  1. Construct a 95% likelihood ratio confidence interval for \(\theta\).

For the likelihood ratio confidence interval, I work with the log-likelihood and look for values of \(\theta\) that are close enough to the maximum. Based on the lecture, this means finding where the log-likelihood stays within the cutoff determined by the chi-square value. Since this does not simplify to a closed-form solution, I solve for the endpoints numerically.

## Define Log-Likelihood Function
loglik_theta <- function(theta) {
  n * log(theta^2 / (1 + theta)) + sum(log(1 + times)) - theta * S
}

## Compute Likelihood Ratio Cutoff
lr_cutoff <- loglik_theta(theta_hat) - qchisq(0.95, df = 1) / 2

## Define Root Function for Endpoints
lr_root <- function(theta) {
  loglik_theta(theta) - lr_cutoff
}

## Solve for Lower and Upper Endpoints
theta_L <- uniroot(lr_root, interval = c(0.01, theta_hat))$root
theta_U <- uniroot(lr_root, interval = c(theta_hat, 1))$root

## Construct Likelihood Ratio Confidence Interval
ci_lr <- c(theta_L, theta_U)

ci_lr
[1] 0.1786338 0.2653210

The 95% likelihood ratio confidence interval for \(\theta\) is (0.1786, 0.2653). This interval represents the range of values for \(\theta\) that are consistent with the observed data under the model. The narrow width of the interval reflects a stable estimate.

  1. Assuming the two confidence intervals above are valid, compare them in terms of performance and make a recommendation. Justify your recommendation.

The two confidence intervals are very similar in both location and width, so they lead to essentially the same conclusion about \(\theta\). The asymptotic interval is easier to compute but relies on the normal approximation, while the likelihood ratio interval is based directly on the likelihood function. For this reason, I would recommend the likelihood ratio interval, although the difference between the two is small.

## Compare Interval Widths
width_asym <- diff(ci_asym)
width_lr <- diff(ci_lr)

width_asym
[1] 0.08658742
width_lr
[1] 0.08668721

The asymptotic and likelihood ratio confidence intervals have very similar widths, with values 0.08658742 and 0.08668721, respectively. This indicates that both methods provide nearly the same level of precision for estimating \(\theta\). Since the likelihood ratio interval is based directly on the likelihood function, I would recommend it, although the difference between the two methods is minimal.

LS0tCnRpdGxlOiAiQXNzaWdubWVudCA2OiBDb25zdHJ1Y3RpbmcgTGlrZWxpaG9vZCBSYXRpbyBDb25maWRlbmNlIEludGVydmFsIgphdXRob3I6ICJLYXlsYSBEeWVyIgpkYXRlOiAiIER1ZTogTWFyY2ggMjQsIDIwMjYgKGFwcHJvdmVkIGZvciBsYXRlcikiCm91dHB1dDoKICBodG1sX2RvY3VtZW50OiAKICAgIHRvYzogeWVzCiAgICB0b2NfZGVwdGg6IDQKICAgIHRvY19mbG9hdDogeWVzCiAgICBudW1iZXJfc2VjdGlvbnM6IG5vCiAgICB0b2NfY29sbGFwc2VkOiB5ZXMKICAgIGNvZGVfZm9sZGluZzogaGlkZQogICAgY29kZV9kb3dubG9hZDogeWVzCiAgICBzbW9vdGhfc2Nyb2xsOiB5ZXMKICAgIGhpZ2hsaWdodDogbW9ub2Nocm9tZQogICAgdGhlbWU6IHNwYWNlbGFiCiAgcGRmX2RvY3VtZW50OiAKICAgIHRvYzogeWVzCiAgICB0b2NfZGVwdGg6IDQKICAgIGZpZ19jYXB0aW9uOiB5ZXMKICAgIG51bWJlcl9zZWN0aW9uczogeWVzCiAgICBmaWdfd2lkdGg6IDMKICAgIGZpZ19oZWlnaHQ6IDMKICB3b3JkX2RvY3VtZW50OiAKICAgIHRvYzogeWVzCiAgICB0b2NfZGVwdGg6IDQKICAgIGZpZ19jYXB0aW9uOiB5ZXMKICAgIGtlZXBfbWQ6IHllcwplZGl0b3Jfb3B0aW9uczogCiAgY2h1bmtfb3V0cHV0X3R5cGU6IGlubGluZQotLS0KCmBgYHtjc3MsIGVjaG8gPSBGQUxTRX0KI1RPQzo6YmVmb3JlIHsKICBjb250ZW50OiAiVGFibGUgb2YgQ29udGVudHMiOwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIGZvbnQtc2l6ZTogMS4yZW07CiAgZGlzcGxheTogYmxvY2s7CiAgY29sb3I6IG5hdnk7CiAgbWFyZ2luLWJvdHRvbTogMTBweDsKfQoKCmRpdiNUT0MgbGkgeyAgICAgLyogdGFibGUgb2YgY29udGVudCAgKi8KICAgIGxpc3Qtc3R5bGU6dXBwZXItcm9tYW47CiAgICBiYWNrZ3JvdW5kLWltYWdlOm5vbmU7CiAgICBiYWNrZ3JvdW5kLXJlcGVhdDpub25lOwogICAgYmFja2dyb3VuZC1wb3NpdGlvbjowOwp9CgpoMS50aXRsZSB7ICAgIC8qIGxldmVsIDEgaGVhZGVyIG9mIHRpdGxlICAqLwogIGZvbnQtc2l6ZTogMjJweDsKICBmb250LXdlaWdodDogYm9sZDsKICBjb2xvcjogRGFya1JlZDsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgZm9udC1mYW1pbHk6ICJHaWxsIFNhbnMiLCBzYW5zLXNlcmlmOwp9CgpoNC5hdXRob3IgeyAvKiBIZWFkZXIgNCAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLwogIGZvbnQtc2l6ZTogMTVweDsKICBmb250LXdlaWdodDogYm9sZDsKICBmb250LWZhbWlseTogc3lzdGVtLXVpOwogIGNvbG9yOiBuYXZ5OwogIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKaDQuZGF0ZSB7IC8qIEhlYWRlciA0IC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovCiAgZm9udC1zaXplOiAxOHB4OwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIGZvbnQtZmFtaWx5OiAiR2lsbCBTYW5zIiwgc2Fucy1zZXJpZjsKICBjb2xvcjogRGFya0JsdWU7CiAgdGV4dC1hbGlnbjogY2VudGVyOwp9CgpoMSB7IC8qIEhlYWRlciAxIC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovCiAgICBmb250LXNpemU6IDIwcHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOwogICAgY29sb3I6IGRhcmtyZWQ7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCmgyIHsgLyogSGVhZGVyIDIgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8KICAgIGZvbnQtc2l6ZTogMThweDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7CiAgICBjb2xvcjogbmF2eTsKICAgIHRleHQtYWxpZ246IGxlZnQ7Cn0KCmgzIHsgLyogSGVhZGVyIDMgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8KICAgIGZvbnQtc2l6ZTogMTZweDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7CiAgICBjb2xvcjogbmF2eTsKICAgIHRleHQtYWxpZ246IGxlZnQ7Cn0KCmg0IHsgLyogSGVhZGVyIDQgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8KICAgIGZvbnQtc2l6ZTogMTRweDsKICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOwogICAgY29sb3I6IGRhcmtyZWQ7CiAgICB0ZXh0LWFsaWduOiBsZWZ0Owp9CgovKiBBZGQgZG90cyBhZnRlciBudW1iZXJlZCBoZWFkZXJzICovCi5oZWFkZXItc2VjdGlvbi1udW1iZXI6OmFmdGVyIHsKICBjb250ZW50OiAiLiI7Cgpib2R5IHsgYmFja2dyb3VuZC1jb2xvcjp3aGl0ZTsgfQoKLmhpZ2hsaWdodG1lIHsgYmFja2dyb3VuZC1jb2xvcjp5ZWxsb3c7IH0KCnAgeyBiYWNrZ3JvdW5kLWNvbG9yOndoaXRlOyB9Cgp9CmBgYAoKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CiMgY29kZSBjaHVuayBzcGVjaWZpZXMgd2hldGhlciB0aGUgUiBjb2RlLCB3YXJuaW5ncywgYW5kIG91dHB1dCAKIyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBvdXRwdXQgZmlsZXMuCmlmICghcmVxdWlyZSgia25pdHIiKSkgewogICBpbnN0YWxsLnBhY2thZ2VzKCJrbml0ciIpCiAgIGxpYnJhcnkoa25pdHIpCn0KaWYgKCFyZXF1aXJlKCJwYW5kZXIiKSkgewogICBpbnN0YWxsLnBhY2thZ2VzKCJwYW5kZXIiKQogICBsaWJyYXJ5KHBhbmRlcikKfQppZiAoIXJlcXVpcmUoImdncGxvdDIiKSkgewogIGluc3RhbGwucGFja2FnZXMoImdncGxvdDIiKQogIGxpYnJhcnkoZ2dwbG90MikKfQppZiAoIXJlcXVpcmUoInRpZHl2ZXJzZSIpKSB7CiAgaW5zdGFsbC5wYWNrYWdlcygidGlkeXZlcnNlIikKICBsaWJyYXJ5KHRpZHl2ZXJzZSkKfQoKaWYgKCFyZXF1aXJlKCJwbG90bHkiKSkgewogIGluc3RhbGwucGFja2FnZXMoInBsb3RseSIpCiAgbGlicmFyeShwbG90bHkpCn0KCmlmICghcmVxdWlyZSgiVkdBTSIpKSB7CiAgaW5zdGFsbC5wYWNrYWdlcygiVkdBTSIpCiAgbGlicmFyeShWR0FNKQp9CiMjIyMgVkdBTQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUsICAgICAgICMgaW5jbHVkZSBjb2RlIGNodW5rIGluIHRoZSBvdXRwdXQgZmlsZQogICAgICAgICAgICAgICAgICAgICAgd2FybmluZyA9IEZBTFNFLCAgICMgc29tZXRpbWVzLCB5b3UgY29kZSBtYXkgcHJvZHVjZSB3YXJuaW5nIG1lc3NhZ2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgeW91IGNhbiBjaG9vc2UgdG8gaW5jbHVkZSB0aGUgd2FybmluZyBtZXNzYWdlcyBpbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdGhlIG91dHB1dCBmaWxlLiAKICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBUUlVFLCAgICAjIHlvdSBjYW4gYWxzbyBkZWNpZGUgd2hldGhlciB0byBpbmNsdWRlIHRoZSBvdXRwdXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGluIHRoZSBvdXRwdXQgZmlsZS4KICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBGQUxTRSwKICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBOQQogICAgICAgICAgICAgICAgICAgICAgKSAgCmBgYAogCiBcCiAKIyMgKipBc3NpZ25tZW50IE9iamVjdGl2ZXMqKiAKCiogUmVpbmZvcmNlIHRoZSBsaWtlbGlob29kIGNvbmNlcHRzIGFuZCBNTEUuCgoqIFVuZGVyc3RhbmQgdGhlIGNvbmNlcHRzIG9mIGNvbmZpZGVuY2UgaW50ZXJ2YWxzLgoKKiBNYXN0ZXIgdGhlIHByb2Nlc3Mgb2YgZmluZGluZyBsaWtlbGlob29kIHJhdGlvIGNvbmZpZGVuY2UgaW50ZXJ2YWwgb2YgdW5rbm93biBwYXJhbWV0ZXIuCgpcCgojIyAqKlBvbGljaWVzIG9mIFVzaW5nIEFJIFRvb2xzKioKCioqUG9saWN5IG9uIEFJIFRvb2wgVXNlKio6IFlvdSBtdXN0IGFkaGVyZSB0byB0aGUgQUkgdG9vbCBwb2xpY3kgc3BlY2lmaWVkIGluIHRoZSBjb3Vyc2Ugc3lsbGFidXMuIFRoZSBkaXJlY3QgY29weWluZyBvZiBBSS1nZW5lcmF0ZWQgY29udGVudCBpcyBzdHJpY3RseSBwcm9oaWJpdGVkLiBBbGwgc3VibWl0dGVkIHdvcmsgbXVzdCByZWZsZWN0IHlvdXIgb3duIHVuZGVyc3RhbmRpbmc7IHdoZXJlIGV4dGVybmFsIHRvb2xzIGFyZSBjb25zdWx0ZWQsIGNvbnRlbnQgbXVzdCBiZSB0aG9yb3VnaGx5IHJlcGhyYXNlZCBhbmQgc3ludGhlc2l6ZWQgaW4geW91ciBvd24gd29yZHMuCgoqKkNvZGUgSW5jbHVzaW9uIFJlcXVpcmVtZW50Kio6IEFueSBjb2RlIGluY2x1ZGVkIGluIHlvdXIgZXNzYXkgbXVzdCBiZSBwcm9wZXJseSBjb21tZW50ZWQgdG8gZXhwbGFpbiB0aGUgcHVycG9zZSBhbmQvb3IgZXhwZWN0ZWQgb3V0cHV0IG9mIGtleSBjb2RlIGxpbmVzLiBTdWJtaXR0aW5nIEFJLWdlbmVyYXRlZCBjb2RlIHdpdGhvdXQgbWVhbmluZ2Z1bCwgc3R1ZGVudC1hZGRlZCBjb21tZW50cyB3aWxsIG5vdCBiZSBhY2NlcHRlZC4KClwKCioqT25lIFBhcmFtZXRlciBMaW5kbGV5IERpc3RyaWJ1dGlvbioqCgpUaGUgKipMaW5kbGV5IGRpc3RyaWJ1dGlvbioqIGlzIGEgKipjb250aW51b3VzIHByb2JhYmlsaXR5IGRpc3RyaWJ1dGlvbioqIHByb3Bvc2VkIGJ5IEQuVi4gTGluZGxleSBpbiAxOTU4LiBJdCByZXByZXNlbnRzIGEgKip3ZWlnaHRlZCBtaXh0dXJlKiogb2YgZXhwb25lbnRpYWwgYW5kIGdhbW1hIGRpc3RyaWJ1dGlvbnMsIHByb3ZpZGluZyBhIGZsZXhpYmxlIHNpbmdsZS1wYXJhbWV0ZXIgbW9kZWwgZm9yIGxpZmV0aW1lIGRhdGEuIAoKJCQKZih4O1x0aGV0YSkgPSBcZnJhY3tcdGhldGFeMn17MStcdGhldGF9KDEreCllXnstXHRoZXRhIHh9LCBccXVhZCB4ID4gMCwgXHF1YWQgXHRoZXRhID4gMAokJAoKd2hlcmUgJHgkID0gcmFuZG9tIHZhcmlhYmxlIChlLmcuLCB0aW1lLCBzaXplLCBhbW91bnQpIGFuZCAkXHRoZXRhJCA9IHNoYXBlIHBhcmFtZXRlciBjb250cm9sbGluZyB0aGUgZGlzdHJpYnV0aW9uLgoKR2l2ZW4gYW4gaW5kZXBlbmRlbnQgcmFuZG9tIHNhbXBsZSAkWF8xLCBYXzIsIFxkb3RzLCBYX24kOgoKJCQKTChcdGhldGEpID0gXHByb2Rfe2k9MX1ebiBmKHhfaTtcdGhldGEpID0gXHByb2Rfe2k9MX1ebiBcbGVmdFsgXGZyYWN7XHRoZXRhXjJ9ezErXHRoZXRhfSAoMSArIHhfaSkgZV57LVx0aGV0YSB4X2l9IFxyaWdodF0uCiQkCgpMZXQgJFMgPSBcc3VtX3tpPTF9Xm4geF9pJCwgJFxiYXJ7eH0gPSBTL24kLCAgYW5kICRDID0gXHN1bV97aT0xfV5uIFxsbigxICsgeF9pKSQgKGNvbnN0YW50IHdpdGggcmVzcGVjdCB0byAkXHRoZXRhJCk6CgokJApcZWxsKFx0aGV0YSkgPSBcbG4gTChcdGhldGEpID0gbiBcbG5cbGVmdCggXGZyYWN7XHRoZXRhXjJ9ezErXHRoZXRhfSBccmlnaHQpICsgQyAtIFx0aGV0YSBTLgokJAoKQWZ0ZXIgc29tZSBhbGdlYnJhLCB3ZSBvYnRhaW4gdGhlIGNsb3NlZCBmb3JtIG9mIHRoZSBNTEUgb2YgJFx0aGV0YSQgaW4gdGhlIGZvbGxvd2luZwoKJCQKXGJveGVke1xoYXR7XHRoZXRhfSA9IFxmcmFjezEgLSBcYmFye3h9ICsgXHNxcnR7XGJhcnt4fV4yICsgNlxiYXJ7eH0gKyAxfX17MlxiYXJ7eH19fQokJAoKQXMgZ29vZCBleGVyY2lzZSwgd2UgY2FuIGRlcml2ZSB0aGUgZm9sbG93aW5nIEZpc2hlciBpbmZvcm1hdGlvbiBvZiAkXHRoZXRhJDoKCiQkClxib3hlZHtJKFx0aGV0YSkgPSBcZnJhY3syfXtcdGhldGFeMn0gLSBcZnJhY3sxfXsoMStcdGhldGEpXjJ9fQokJAoKClwKCjxmb250IGNvbG9yID0gImJsdWUiPioqVGhpcyBhc3NpZ25tZW50IGZvY3VzZXMgb24gY29uc3RydWN0aW5nIHZhcmlvdXMgY29uZmlkZW5jZSBpbnRlcnZhbHMgb2YgdGhlIHNoYXBlIHBhcmFtZXRlciAkXHRoZXRhJCBpbiB0aGUgTGluZGxleSBkaXN0cmlidXRpb24uKio8L2ZvbnQ+CgoKXAoKIyMgKipRdWVzdGlvbjogQ3VzdG9tZXIgU2VydmljZSBUaW1lcyAobWludXRlcykqKgoKVGhlIGN1c3RvbWVyIHNlcnZpY2UgY2FsbCBkdXJhdGlvbiBkYXRhIHNldCBvcmlnaW5hdGVzIGZyb20gYSBtYWpvciB0ZWxlY29tbXVuaWNhdGlvbnMgcHJvdmlkZXIgaW4gTm9ydGggQW1lcmljYSwgb3BlcmF0aW5nIGluIGEgaGlnaGx5IGNvbXBldGl0aXZlIG1hcmtldCB3aGVyZToKCmBgYAozLjIsIDUuOCwgNy4xLCA0LjUsIDEwLjMsIDYuMiwgOC43LCA1LjEsIDEyLjUsIDYuOSwKOS40LCA1LjcsIDExLjgsIDQuOSwgOS4xLCA2LjUsIDEzLjIsIDcuOCwgMTAuNiwgNi4xLAo4LjksIDUuNCwgMTIuMSwgNy4zLCA5LjgsIDUuOSwgMTEuNCwgNi44LCAxMC45LCA3LjUsCjQuMiwgOC4zLCA2LjQsIDE0LjEsIDUuNiwgOS43LCA3LjksIDExLjEsIDYuNywgMTAuMiwKNS4zLCA4LjYsIDcuMiwgMTIuOSwgNi4zLCA5LjMsIDguMSwgMTMuNywgNy42LCAxMC44CmBgYAoKYGBge3J9CnRpbWVzIDwtIGMoCiAgMy4yLCA1LjgsIDcuMSwgNC41LCAxMC4zLCA2LjIsIDguNywgNS4xLCAxMi41LCA2LjksCiAgOS40LCA1LjcsIDExLjgsIDQuOSwgOS4xLCA2LjUsIDEzLjIsIDcuOCwgMTAuNiwgNi4xLAogIDguOSwgNS40LCAxMi4xLCA3LjMsIDkuOCwgNS45LCAxMS40LCA2LjgsIDEwLjksIDcuNSwKICA0LjIsIDguMywgNi40LCAxNC4xLCA1LjYsIDkuNywgNy45LCAxMS4xLCA2LjcsIDEwLjIsCiAgNS4zLCA4LjYsIDcuMiwgMTIuOSwgNi4zLCA5LjMsIDguMSwgMTMuNywgNy42LCAxMC44CikKCm4gPC0gbGVuZ3RoKHRpbWVzKQpTIDwtIHN1bSh0aW1lcykKeGJhciA8LSBtZWFuKHRpbWVzKQoKYyhuID0gbiwgUyA9IFMsIHhiYXIgPSB4YmFyKQpgYGAKCkZyb20gdGhlIGRhdGEsIHdlIGNvbXB1dGUgdGhlIGJhc2ljIHN1bW1hcmllcyBuZWVkZWQgZm9yIHRoZSBhbmFseXNpczogbiA9IDUwLCBTID0gNDE1LjQsIGFuZCB4zIQgPSA4LjMwOC4gVGhlc2UgdmFsdWVzIHdpbGwgYmUgdXNlZCBpbiBjb25zdHJ1Y3RpbmcgdGhlIGVzdGltYXRvcnMgYW5kIGNvbmZpZGVuY2UgaW50ZXJ2YWxzLgoKQXNzdW1pbmcgdGhlIGRhdGEgZm9sbG93IGEgb25lLXBhcmFtZXRlciBMaW5kbGV5IGRpc3RyaWJ1dGlvbiwgY29uc3RydWN0IGEgJDk1XCUkIGNvbmZpZGVuY2UgaW50ZXJ2YWwgZm9yIHRoZSBwYXJhbWV0ZXIgJFx0aGV0YSQgdXNpbmcgdGhlIHByb3ZpZGVkIGRhdGEgYW5kIHRoZSBzcGVjaWZpZWQgbWV0aG9kcy4gRm9yIGVhY2ggb2YgdGhlIGZvbGxvd2luZyBxdWVzdGlvbnMsIGZpcnN0IGRlc2NyaWJlIHlvdXIgcmVhc29uaW5nIHByb2Nlc3MgZm9yIHRoZSBhbmFseXNpcywgdGhlbiB3cml0ZSBjb2RlIHRvIHBlcmZvcm0gdGhlIGFjdHVhbCBhbmFseXNpcy4gRmluYWxseSwgc3VtbWFyaXplIHRoZSByZXN1bHRzIHRvIGNvbmNsdWRlIHRoZSBxdWVzdGlvbi4KCgphKSBDb25zdHJ1Y3QgYSAqKjk1JSBhc3ltcHRvdGljIGNvbmZpZGVuY2UgaW50ZXJ2YWwqKiBiYXNlZCBvbiB0aGUgYXN5bXB0b3RpYyBzYW1wbGluZyBkaXN0cmlidXRpb24gb2YgdGhlIG1heGltdW0gbGlrZWxpaG9vZCBlc3RpbWF0b3IgKE1MRSkgb2YgJFx0aGV0YSQuCgpUbyBjb25zdHJ1Y3QgdGhlIGFzeW1wdG90aWMgY29uZmlkZW5jZSBpbnRlcnZhbCwgSSB1c2UgdGhlIGZhY3QgdGhhdCB0aGUgTUxFIGlzIGFwcHJveGltYXRlbHkgbm9ybWFsIGZvciBsYXJnZSBzYW1wbGVzLiBVc2luZyB0aGUgZXhwcmVzc2lvbnMgZm9yIHRoZSBNTEUgYW5kIEZpc2hlciBpbmZvcm1hdGlvbiBwcm92aWRlZCBhYm92ZSwgSSBlc3RpbWF0ZSB0aGUgdmFyaWFuY2UgYnkgcGx1Z2dpbmcgaW4gdGhlIE1MRSBmb3IgJFx0aGV0YSQuIFRoaXMgZ2l2ZXMgYSBzdGFuZGFyZCBlcnJvciwgYW5kIEkgdGhlbiB1c2UgdGhlIG5vcm1hbCBjcml0aWNhbCB2YWx1ZSAxLjk2IHRvIGZvcm0gdGhlIDk1JSBjb25maWRlbmNlIGludGVydmFsLgoKYGBge3J9CiMjIENvbXB1dGUgTUxFIG9mIFRoZXRhIFVzaW5nIEdpdmVuIEZvcm11bGEKdGhldGFfaGF0IDwtICgxIC0geGJhciArIHNxcnQoeGJhcl4yICsgNiAqIHhiYXIgKyAxKSkgLyAoMiAqIHhiYXIpCgojIyBEZWZpbmUgRmlzaGVyIEluZm9ybWF0aW9uIEZ1bmN0aW9uCklfdGhldGEgPC0gZnVuY3Rpb24odGhldGEpIHsKICAyIC8gdGhldGFeMiAtIDEgLyAoMSArIHRoZXRhKV4yCn0KCiMjIENvbXB1dGUgU3RhbmRhcmQgRXJyb3IgVXNpbmcgUGx1Zy1pbiBFc3RpbWF0ZQpzZV90aGV0YV9oYXQgPC0gc3FydCgxIC8gKG4gKiBJX3RoZXRhKHRoZXRhX2hhdCkpKQoKIyMgT2J0YWluIDk1JSBOb3JtYWwgQ3JpdGljYWwgVmFsdWUKel9jcml0IDwtIHFub3JtKDAuOTc1KQoKIyMgQ29uc3RydWN0IEFzeW1wdG90aWMgQ29uZmlkZW5jZSBJbnRlcnZhbApjaV9hc3ltIDwtIHRoZXRhX2hhdCArIGMoLTEsIDEpICogel9jcml0ICogc2VfdGhldGFfaGF0Cgp0aGV0YV9oYXQKc2VfdGhldGFfaGF0CmNpX2FzeW0KYGBgCgpUaGUgOTUlIGFzeW1wdG90aWMgY29uZmlkZW5jZSBpbnRlcnZhbCBmb3IgJFx0aGV0YSQgaXMgKDAuMTc1OCwgMC4yNjI0KS4gVGhpcyBpbnRlcnZhbCByZXByZXNlbnRzIHRoZSByYW5nZSBvZiB2YWx1ZXMgZm9yICRcdGhldGEkIHRoYXQgYXJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgb2JzZXJ2ZWQgZGF0YS4gVGhlIHJlbGF0aXZlbHkgbmFycm93IHdpZHRoIG9mIHRoZSBpbnRlcnZhbCBzdWdnZXN0cyBhIHNtYWxsIHN0YW5kYXJkIGVycm9yIGFuZCBhIHN0YWJsZSBlc3RpbWF0ZS4KCmIpIENvbnN0cnVjdCBhICoqOTUlIGxpa2VsaWhvb2QgcmF0aW8gY29uZmlkZW5jZSBpbnRlcnZhbCoqIGZvciAkXHRoZXRhJC4KCkZvciB0aGUgbGlrZWxpaG9vZCByYXRpbyBjb25maWRlbmNlIGludGVydmFsLCBJIHdvcmsgd2l0aCB0aGUgbG9nLWxpa2VsaWhvb2QgYW5kIGxvb2sgZm9yIHZhbHVlcyBvZiAkXHRoZXRhJCB0aGF0IGFyZSBjbG9zZSBlbm91Z2ggdG8gdGhlIG1heGltdW0uIEJhc2VkIG9uIHRoZSBsZWN0dXJlLCB0aGlzIG1lYW5zIGZpbmRpbmcgd2hlcmUgdGhlIGxvZy1saWtlbGlob29kIHN0YXlzIHdpdGhpbiB0aGUgY3V0b2ZmIGRldGVybWluZWQgYnkgdGhlIGNoaS1zcXVhcmUgdmFsdWUuIFNpbmNlIHRoaXMgZG9lcyBub3Qgc2ltcGxpZnkgdG8gYSBjbG9zZWQtZm9ybSBzb2x1dGlvbiwgSSBzb2x2ZSBmb3IgdGhlIGVuZHBvaW50cyBudW1lcmljYWxseS4KCmBgYHtyfQojIyBEZWZpbmUgTG9nLUxpa2VsaWhvb2QgRnVuY3Rpb24KbG9nbGlrX3RoZXRhIDwtIGZ1bmN0aW9uKHRoZXRhKSB7CiAgbiAqIGxvZyh0aGV0YV4yIC8gKDEgKyB0aGV0YSkpICsgc3VtKGxvZygxICsgdGltZXMpKSAtIHRoZXRhICogUwp9CgojIyBDb21wdXRlIExpa2VsaWhvb2QgUmF0aW8gQ3V0b2ZmCmxyX2N1dG9mZiA8LSBsb2dsaWtfdGhldGEodGhldGFfaGF0KSAtIHFjaGlzcSgwLjk1LCBkZiA9IDEpIC8gMgoKIyMgRGVmaW5lIFJvb3QgRnVuY3Rpb24gZm9yIEVuZHBvaW50cwpscl9yb290IDwtIGZ1bmN0aW9uKHRoZXRhKSB7CiAgbG9nbGlrX3RoZXRhKHRoZXRhKSAtIGxyX2N1dG9mZgp9CgojIyBTb2x2ZSBmb3IgTG93ZXIgYW5kIFVwcGVyIEVuZHBvaW50cwp0aGV0YV9MIDwtIHVuaXJvb3QobHJfcm9vdCwgaW50ZXJ2YWwgPSBjKDAuMDEsIHRoZXRhX2hhdCkpJHJvb3QKdGhldGFfVSA8LSB1bmlyb290KGxyX3Jvb3QsIGludGVydmFsID0gYyh0aGV0YV9oYXQsIDEpKSRyb290CgojIyBDb25zdHJ1Y3QgTGlrZWxpaG9vZCBSYXRpbyBDb25maWRlbmNlIEludGVydmFsCmNpX2xyIDwtIGModGhldGFfTCwgdGhldGFfVSkKCmNpX2xyCmBgYAoKVGhlIDk1JSBsaWtlbGlob29kIHJhdGlvIGNvbmZpZGVuY2UgaW50ZXJ2YWwgZm9yICRcdGhldGEkIGlzICgwLjE3ODYsIDAuMjY1MykuIFRoaXMgaW50ZXJ2YWwgcmVwcmVzZW50cyB0aGUgcmFuZ2Ugb2YgdmFsdWVzIGZvciAkXHRoZXRhJCB0aGF0IGFyZSBjb25zaXN0ZW50IHdpdGggdGhlIG9ic2VydmVkIGRhdGEgdW5kZXIgdGhlIG1vZGVsLiBUaGUgbmFycm93IHdpZHRoIG9mIHRoZSBpbnRlcnZhbCByZWZsZWN0cyBhIHN0YWJsZSBlc3RpbWF0ZS4KCmMpIEFzc3VtaW5nIHRoZSB0d28gY29uZmlkZW5jZSBpbnRlcnZhbHMgYWJvdmUgYXJlIHZhbGlkLCBjb21wYXJlIHRoZW0gaW4gdGVybXMgb2YgcGVyZm9ybWFuY2UgYW5kIG1ha2UgYSByZWNvbW1lbmRhdGlvbi4gSnVzdGlmeSB5b3VyIHJlY29tbWVuZGF0aW9uLgoKVGhlIHR3byBjb25maWRlbmNlIGludGVydmFscyBhcmUgdmVyeSBzaW1pbGFyIGluIGJvdGggbG9jYXRpb24gYW5kIHdpZHRoLCBzbyB0aGV5IGxlYWQgdG8gZXNzZW50aWFsbHkgdGhlIHNhbWUgY29uY2x1c2lvbiBhYm91dCAkXHRoZXRhJC4gVGhlIGFzeW1wdG90aWMgaW50ZXJ2YWwgaXMgZWFzaWVyIHRvIGNvbXB1dGUgYnV0IHJlbGllcyBvbiB0aGUgbm9ybWFsIGFwcHJveGltYXRpb24sIHdoaWxlIHRoZSBsaWtlbGlob29kIHJhdGlvIGludGVydmFsIGlzIGJhc2VkIGRpcmVjdGx5IG9uIHRoZSBsaWtlbGlob29kIGZ1bmN0aW9uLiBGb3IgdGhpcyByZWFzb24sIEkgd291bGQgcmVjb21tZW5kIHRoZSBsaWtlbGlob29kIHJhdGlvIGludGVydmFsLCBhbHRob3VnaCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28gaXMgc21hbGwuCgpgYGB7cn0KIyMgQ29tcGFyZSBJbnRlcnZhbCBXaWR0aHMKd2lkdGhfYXN5bSA8LSBkaWZmKGNpX2FzeW0pCndpZHRoX2xyIDwtIGRpZmYoY2lfbHIpCgp3aWR0aF9hc3ltCndpZHRoX2xyCmBgYAoKVGhlIGFzeW1wdG90aWMgYW5kIGxpa2VsaWhvb2QgcmF0aW8gY29uZmlkZW5jZSBpbnRlcnZhbHMgaGF2ZSB2ZXJ5IHNpbWlsYXIgd2lkdGhzLCB3aXRoIHZhbHVlcyAwLjA4NjU4NzQyIGFuZCAwLjA4NjY4NzIxLCByZXNwZWN0aXZlbHkuIFRoaXMgaW5kaWNhdGVzIHRoYXQgYm90aCBtZXRob2RzIHByb3ZpZGUgbmVhcmx5IHRoZSBzYW1lIGxldmVsIG9mIHByZWNpc2lvbiBmb3IgZXN0aW1hdGluZyAkXHRoZXRhJC4gU2luY2UgdGhlIGxpa2VsaWhvb2QgcmF0aW8gaW50ZXJ2YWwgaXMgYmFzZWQgZGlyZWN0bHkgb24gdGhlIGxpa2VsaWhvb2QgZnVuY3Rpb24sIEkgd291bGQgcmVjb21tZW5kIGl0LCBhbHRob3VnaCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28gbWV0aG9kcyBpcyBtaW5pbWFsLgo=