library(tidyverse)
library(gtsummary)
library(broom)
library(gt)
ncd <- read.csv("ncd.csv")

# Previewdata
head(ncd)

Interpretation of the Dataset (n=6)

This small dataset (6 rows × 11 columns) appears to represent demographic information of research participants. Based on the subset of columns you shared (participant_id, age, sex, residence, and education), here’s a broad interpretation:

Sample Size and Composition

The dataset includes 6 participants, which suggests this might be a small pilot sample or an excerpt from a larger dataset.

All participants have unique IDs (participant_id 1–6).

Age Distribution

Participants range from 31 to 56 years old, showing a mid-adult to older-adult demographic spread.

The age distribution may indicate that the study focuses on working-age or mature adults rather than youth or elderly populations.

Gender Balance

Five males and one female are represented.

This shows a gender imbalance, with males being overrepresented (≈83%). Depending on the study’s purpose, this may affect generalizability or indicate male-dominated participation in the studied context.

Residence Pattern

Five participants are urban residents, and one is rural.

This indicates the sample is largely urban-based, possibly reflecting easier access to urban respondents or an urban-centered study.

Educational Background

Participants have varying education levels: No formal, Primary, Secondary, and Higher.

This variety suggests diverse educational attainment, which could be valuable for examining how education influences attitudes, behaviors, or socioeconomic outcomes.

Overall Impression

The sample skews male, urban, and moderately educated.

If representative, it may reflect urban middle-class adult males; if not, it may highlight a sampling bias that needs to be addressed in further data collection or analysis.

ncd %>% 
   tbl_summary()
Characteristic N = 2201
participant_id 111 (56, 166)
age 50 (38, 67)
sex
    Female 118 (54%)
    Male 102 (46%)
residence
    Rural 133 (60%)
    Urban 87 (40%)
education
    Higher 50 (23%)
    No formal 25 (11%)
    Primary 66 (30%)
    Secondary 79 (36%)
occupation
    Business 46 (21%)
    Farmer 61 (28%)
    Retired 24 (11%)
    Service 66 (30%)
    Unemployed 23 (10%)
bmi 25.4 (21.3, 28.3)
systolic_bp 134 (114, 165)
diastolic_bp 91 (76, 107)
diabetes 51 (23%)
hypertension 84 (38%)
1 Median (Q1, Q3); n (%)

Interpretation:

The dataset includes 2,201 participants with a median age of 50 years (IQR: 38–67), indicating that the study population is primarily composed of middle-aged and older adults. Females constitute a slightly higher proportion (54%) compared to males (46%). A majority of the participants (60%) reside in rural areas, suggesting that the sample is predominantly rural-based.

Educational attainment varies, with most participants having primary (30%) or secondary (36%) education, while 23% attained higher education and 11% had no formal education. This distribution reflects a moderately educated population, typical of semi-rural communities.

Occupationally, the largest groups are those engaged in service (30%) and farming (28%), followed by business (21%). Smaller proportions are retired (11%) or unemployed (10%). This pattern indicates a mix of formal and informal employment, with a significant share of participants involved in agriculture and service-related work.

Health indicators show a median BMI of 25.4 (IQR: 21.3–28.3), suggesting that the average participant is slightly overweight. The median systolic and diastolic blood pressures are 134 mmHg (IQR: 114–165) and 91 mmHg (IQR: 76–107), respectively—values that are on the higher end of the normal range, indicating potential risks of hypertension. Indeed, hypertension is reported among 38% of participants, and 23% have diabetes.

Overall, the data describe a population that is largely rural, middle-aged, and moderately educated, with a mixed occupational profile. The relatively high prevalence of hypertension and diabetes, along with elevated BMI, points to a significant burden of non-communicable diseases in this group, likely influenced by lifestyle and limited access to healthcare services.

ncd %>%
  tbl_summary(
    by = residence)
Characteristic Rural
N = 133
1
Urban
N = 87
1
participant_id 108 (64, 156) 115 (44, 176)
age 51 (38, 69) 49 (37, 65)
sex

    Female 74 (56%) 44 (51%)
    Male 59 (44%) 43 (49%)
education

    Higher 33 (25%) 17 (20%)
    No formal 13 (9.8%) 12 (14%)
    Primary 38 (29%) 28 (32%)
    Secondary 49 (37%) 30 (34%)
occupation

    Business 20 (15%) 26 (30%)
    Farmer 39 (29%) 22 (25%)
    Retired 14 (11%) 10 (11%)
    Service 42 (32%) 24 (28%)
    Unemployed 18 (14%) 5 (5.7%)
bmi 25.5 (21.1, 28.3) 24.9 (21.9, 28.4)
systolic_bp 136 (114, 166) 131 (111, 164)
diastolic_bp 91 (74, 104) 93 (77, 108)
diabetes 34 (26%) 17 (20%)
hypertension 55 (41%) 29 (33%)
1 Median (Q1, Q3); n (%)

Interpretation:

The study included 2,202 participants, comprising 1,331 rural and 871 urban residents. The median age of rural participants was 51 years (IQR: 38–69), slightly higher than that of urban participants (49 years; IQR: 37–65), indicating a somewhat older rural population.

In both settings, females constituted a slightly higher proportion—56% in rural areas and 51% in urban areas—suggesting a relatively balanced gender distribution across residences.

Educational attainment showed modest differences between groups. A slightly higher proportion of rural participants (25%) had higher education compared to urban participants (20%), whereas those with no formal education were marginally fewer in rural (9.8%) than in urban (14%) settings. Across both groups, primary and secondary education were the most common levels, together accounting for over 60% of participants, reflecting a moderately educated sample overall.

Occupational patterns varied notably between rural and urban areas. Farming was more prevalent among rural participants (29%) than urban participants (25%), while business-related occupations were more common in urban areas (30% vs. 15%). Service employment was comparable (32% rural; 28% urban). Unemployment was nearly three times higher in rural areas (14%) than in urban settings (5.7%), which may suggest limited job opportunities outside agriculture.

Health indicators showed small but meaningful rural–urban differences. The median BMI was similar across groups—25.5 (IQR: 21.1–28.3) in rural areas and 24.9 (IQR: 21.9–28.4) in urban areas—indicating a generally overweight population. However, blood pressure readings were higher among rural participants, with median systolic/diastolic values of 136/91 mmHg compared to 131/93 mmHg in urban participants.

Consistent with these findings, hypertension was more prevalent in rural areas (41%) than in urban ones (33%). Diabetes also followed a similar pattern, affecting 26% of rural participants and 20% of urban participants.

Overall, the results indicate that rural participants are slightly older, less employed, and experience higher rates of hypertension and diabetes compared to their urban counterparts. These findings suggest a potential rural disadvantage in health outcomes, possibly linked to differences in lifestyle, healthcare access, and socioeconomic opportunities.

model <- glm( factor(hypertension) ~ age + sex + bmi + residence + education + occupation + diabetes, data = ncd, family = binomial)
tbl_regression(model)
Characteristic log(OR) 95% CI p-value
age 0.00 -0.02, 0.02 0.8
sex


    Female
    Male 0.30 -0.27, 0.87 0.3
bmi -0.01 -0.07, 0.04 0.6
residence


    Rural
    Urban -0.41 -1.0, 0.18 0.2
education


    Higher
    No formal 0.52 -0.48, 1.5 0.3
    Primary 0.05 -0.72, 0.84 0.9
    Secondary 0.09 -0.66, 0.85 0.8
occupation


    Business
    Farmer -0.41 -1.2, 0.41 0.3
    Retired -0.56 -1.7, 0.49 0.3
    Service -0.12 -0.91, 0.67 0.8
    Unemployed -0.26 -1.4, 0.80 0.6
diabetes


    No
    Yes 0.06 -0.61, 0.71 0.9
Abbreviations: CI = Confidence Interval, OR = Odds Ratio
NA
NA

Interpretation of Logistic Regression Results:

The multivariable logistic regression model examined the association between several demographic and health-related variables and the outcome of interest (unspecified). None of the covariates showed statistically significant associations at the conventional 5% significance level.

Age had a log(OR) of 0.00 (95% CI: −0.02 to 0.02, p = 0.8), indicating no measurable association with the outcome. Similarly, sex did not demonstrate a significant effect; males had higher odds compared to females (log(OR) = 0.30, 95% CI: −0.27 to 0.87, p = 0.3), but the confidence interval included zero, suggesting no evidence of a true difference.

Body mass index (BMI) also showed no significant relationship (log(OR) = −0.01, 95% CI: −0.07 to 0.04, p = 0.6). Residence type did not substantially affect the odds of the outcome, with urban participants having lower odds than rural participants (log(OR) = −0.41, 95% CI: −1.0 to 0.18, p = 0.2), though this difference was not statistically significant.

Education level was not significantly associated with the outcome in any category compared to the higher-education reference group. The log(OR) ranged from 0.05 for primary education (p = 0.9) to 0.52 for no formal education (p = 0.3), with all confidence intervals crossing zero.

Occupational categories also revealed no significant differences relative to the business group. The estimated log odds ranged from −0.56 for retired participants to −0.12 for those in service occupations, all with p-values above 0.3. Likewise, diabetes status showed no meaningful association with the outcome (log(OR) = 0.06, 95% CI: −0.61 to 0.71, p = 0.9).

Overall, the regression analysis suggests that none of the examined variables—age, sex, BMI, residence, education, occupation, or diabetes—were significantly associated with the outcome. The direction and magnitude of the coefficients indicate that any observed differences are small and likely due to random variation rather than systematic effects.

LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpgYGB7cn0NCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShndHN1bW1hcnkpDQpsaWJyYXJ5KGJyb29tKQ0KbGlicmFyeShndCkNCmBgYA0KDQpgYGB7cn0NCm5jZCA8LSByZWFkLmNzdigibmNkLmNzdiIpDQoNCiMgUHJldmlld2RhdGENCmhlYWQobmNkKQ0KYGBgDQpJbnRlcnByZXRhdGlvbiBvZiB0aGUgRGF0YXNldCAobj02KQ0KDQpUaGlzIHNtYWxsIGRhdGFzZXQgKDYgcm93cyDDlyAxMSBjb2x1bW5zKSBhcHBlYXJzIHRvIHJlcHJlc2VudCBkZW1vZ3JhcGhpYyBpbmZvcm1hdGlvbiBvZiByZXNlYXJjaCBwYXJ0aWNpcGFudHMuIEJhc2VkIG9uIHRoZSBzdWJzZXQgb2YgY29sdW1ucyB5b3Ugc2hhcmVkIChwYXJ0aWNpcGFudF9pZCwgYWdlLCBzZXgsIHJlc2lkZW5jZSwgYW5kIGVkdWNhdGlvbiksIGhlcmXigJlzIGEgYnJvYWQgaW50ZXJwcmV0YXRpb246DQoNClNhbXBsZSBTaXplIGFuZCBDb21wb3NpdGlvbg0KDQpUaGUgZGF0YXNldCBpbmNsdWRlcyA2IHBhcnRpY2lwYW50cywgd2hpY2ggc3VnZ2VzdHMgdGhpcyBtaWdodCBiZSBhIHNtYWxsIHBpbG90IHNhbXBsZSBvciBhbiBleGNlcnB0IGZyb20gYSBsYXJnZXIgZGF0YXNldC4NCg0KQWxsIHBhcnRpY2lwYW50cyBoYXZlIHVuaXF1ZSBJRHMgKHBhcnRpY2lwYW50X2lkIDHigJM2KS4NCg0KQWdlIERpc3RyaWJ1dGlvbg0KDQpQYXJ0aWNpcGFudHMgcmFuZ2UgZnJvbSAzMSB0byA1NiB5ZWFycyBvbGQsIHNob3dpbmcgYSBtaWQtYWR1bHQgdG8gb2xkZXItYWR1bHQgZGVtb2dyYXBoaWMgc3ByZWFkLg0KDQpUaGUgYWdlIGRpc3RyaWJ1dGlvbiBtYXkgaW5kaWNhdGUgdGhhdCB0aGUgc3R1ZHkgZm9jdXNlcyBvbiB3b3JraW5nLWFnZSBvciBtYXR1cmUgYWR1bHRzIHJhdGhlciB0aGFuIHlvdXRoIG9yIGVsZGVybHkgcG9wdWxhdGlvbnMuDQoNCkdlbmRlciBCYWxhbmNlDQoNCkZpdmUgbWFsZXMgYW5kIG9uZSBmZW1hbGUgYXJlIHJlcHJlc2VudGVkLg0KDQpUaGlzIHNob3dzIGEgZ2VuZGVyIGltYmFsYW5jZSwgd2l0aCBtYWxlcyBiZWluZyBvdmVycmVwcmVzZW50ZWQgKOKJiDgzJSkuIERlcGVuZGluZyBvbiB0aGUgc3R1ZHnigJlzIHB1cnBvc2UsIHRoaXMgbWF5IGFmZmVjdCBnZW5lcmFsaXphYmlsaXR5IG9yIGluZGljYXRlIG1hbGUtZG9taW5hdGVkIHBhcnRpY2lwYXRpb24gaW4gdGhlIHN0dWRpZWQgY29udGV4dC4NCg0KUmVzaWRlbmNlIFBhdHRlcm4NCg0KRml2ZSBwYXJ0aWNpcGFudHMgYXJlIHVyYmFuIHJlc2lkZW50cywgYW5kIG9uZSBpcyBydXJhbC4NCg0KVGhpcyBpbmRpY2F0ZXMgdGhlIHNhbXBsZSBpcyBsYXJnZWx5IHVyYmFuLWJhc2VkLCBwb3NzaWJseSByZWZsZWN0aW5nIGVhc2llciBhY2Nlc3MgdG8gdXJiYW4gcmVzcG9uZGVudHMgb3IgYW4gdXJiYW4tY2VudGVyZWQgc3R1ZHkuDQoNCkVkdWNhdGlvbmFsIEJhY2tncm91bmQNCg0KUGFydGljaXBhbnRzIGhhdmUgdmFyeWluZyBlZHVjYXRpb24gbGV2ZWxzOiBObyBmb3JtYWwsIFByaW1hcnksIFNlY29uZGFyeSwgYW5kIEhpZ2hlci4NCg0KVGhpcyB2YXJpZXR5IHN1Z2dlc3RzIGRpdmVyc2UgZWR1Y2F0aW9uYWwgYXR0YWlubWVudCwgd2hpY2ggY291bGQgYmUgdmFsdWFibGUgZm9yIGV4YW1pbmluZyBob3cgZWR1Y2F0aW9uIGluZmx1ZW5jZXMgYXR0aXR1ZGVzLCBiZWhhdmlvcnMsIG9yIHNvY2lvZWNvbm9taWMgb3V0Y29tZXMuDQoNCk92ZXJhbGwgSW1wcmVzc2lvbg0KDQpUaGUgc2FtcGxlIHNrZXdzIG1hbGUsIHVyYmFuLCBhbmQgbW9kZXJhdGVseSBlZHVjYXRlZC4NCg0KSWYgcmVwcmVzZW50YXRpdmUsIGl0IG1heSByZWZsZWN0IHVyYmFuIG1pZGRsZS1jbGFzcyBhZHVsdCBtYWxlczsgaWYgbm90LCBpdCBtYXkgaGlnaGxpZ2h0IGEgc2FtcGxpbmcgYmlhcyB0aGF0IG5lZWRzIHRvIGJlIGFkZHJlc3NlZCBpbiBmdXJ0aGVyIGRhdGEgY29sbGVjdGlvbiBvciBhbmFseXNpcy4NCg0KDQpgYGB7cn0NCm5jZCAlPiUgDQogICB0Ymxfc3VtbWFyeSgpDQpgYGANCkludGVycHJldGF0aW9uOg0KDQpUaGUgZGF0YXNldCBpbmNsdWRlcyAyLDIwMSBwYXJ0aWNpcGFudHMgd2l0aCBhIG1lZGlhbiBhZ2Ugb2YgNTAgeWVhcnMgKElRUjogMzjigJM2NyksIGluZGljYXRpbmcgdGhhdCB0aGUgc3R1ZHkgcG9wdWxhdGlvbiBpcyBwcmltYXJpbHkgY29tcG9zZWQgb2YgbWlkZGxlLWFnZWQgYW5kIG9sZGVyIGFkdWx0cy4gRmVtYWxlcyBjb25zdGl0dXRlIGEgc2xpZ2h0bHkgaGlnaGVyIHByb3BvcnRpb24gKDU0JSkgY29tcGFyZWQgdG8gbWFsZXMgKDQ2JSkuIEEgbWFqb3JpdHkgb2YgdGhlIHBhcnRpY2lwYW50cyAoNjAlKSByZXNpZGUgaW4gcnVyYWwgYXJlYXMsIHN1Z2dlc3RpbmcgdGhhdCB0aGUgc2FtcGxlIGlzIHByZWRvbWluYW50bHkgcnVyYWwtYmFzZWQuDQoNCkVkdWNhdGlvbmFsIGF0dGFpbm1lbnQgdmFyaWVzLCB3aXRoIG1vc3QgcGFydGljaXBhbnRzIGhhdmluZyBwcmltYXJ5ICgzMCUpIG9yIHNlY29uZGFyeSAoMzYlKSBlZHVjYXRpb24sIHdoaWxlIDIzJSBhdHRhaW5lZCBoaWdoZXIgZWR1Y2F0aW9uIGFuZCAxMSUgaGFkIG5vIGZvcm1hbCBlZHVjYXRpb24uIFRoaXMgZGlzdHJpYnV0aW9uIHJlZmxlY3RzIGEgbW9kZXJhdGVseSBlZHVjYXRlZCBwb3B1bGF0aW9uLCB0eXBpY2FsIG9mIHNlbWktcnVyYWwgY29tbXVuaXRpZXMuDQoNCk9jY3VwYXRpb25hbGx5LCB0aGUgbGFyZ2VzdCBncm91cHMgYXJlIHRob3NlIGVuZ2FnZWQgaW4gc2VydmljZSAoMzAlKSBhbmQgZmFybWluZyAoMjglKSwgZm9sbG93ZWQgYnkgYnVzaW5lc3MgKDIxJSkuIFNtYWxsZXIgcHJvcG9ydGlvbnMgYXJlIHJldGlyZWQgKDExJSkgb3IgdW5lbXBsb3llZCAoMTAlKS4gVGhpcyBwYXR0ZXJuIGluZGljYXRlcyBhIG1peCBvZiBmb3JtYWwgYW5kIGluZm9ybWFsIGVtcGxveW1lbnQsIHdpdGggYSBzaWduaWZpY2FudCBzaGFyZSBvZiBwYXJ0aWNpcGFudHMgaW52b2x2ZWQgaW4gYWdyaWN1bHR1cmUgYW5kIHNlcnZpY2UtcmVsYXRlZCB3b3JrLg0KDQpIZWFsdGggaW5kaWNhdG9ycyBzaG93IGEgbWVkaWFuIEJNSSBvZiAyNS40IChJUVI6IDIxLjPigJMyOC4zKSwgc3VnZ2VzdGluZyB0aGF0IHRoZSBhdmVyYWdlIHBhcnRpY2lwYW50IGlzIHNsaWdodGx5IG92ZXJ3ZWlnaHQuIFRoZSBtZWRpYW4gc3lzdG9saWMgYW5kIGRpYXN0b2xpYyBibG9vZCBwcmVzc3VyZXMgYXJlIDEzNCBtbUhnIChJUVI6IDExNOKAkzE2NSkgYW5kIDkxIG1tSGcgKElRUjogNzbigJMxMDcpLCByZXNwZWN0aXZlbHnigJR2YWx1ZXMgdGhhdCBhcmUgb24gdGhlIGhpZ2hlciBlbmQgb2YgdGhlIG5vcm1hbCByYW5nZSwgaW5kaWNhdGluZyBwb3RlbnRpYWwgcmlza3Mgb2YgaHlwZXJ0ZW5zaW9uLiBJbmRlZWQsIGh5cGVydGVuc2lvbiBpcyByZXBvcnRlZCBhbW9uZyAzOCUgb2YgcGFydGljaXBhbnRzLCBhbmQgMjMlIGhhdmUgZGlhYmV0ZXMuDQoNCk92ZXJhbGwsIHRoZSBkYXRhIGRlc2NyaWJlIGEgcG9wdWxhdGlvbiB0aGF0IGlzIGxhcmdlbHkgcnVyYWwsIG1pZGRsZS1hZ2VkLCBhbmQgbW9kZXJhdGVseSBlZHVjYXRlZCwgd2l0aCBhIG1peGVkIG9jY3VwYXRpb25hbCBwcm9maWxlLiBUaGUgcmVsYXRpdmVseSBoaWdoIHByZXZhbGVuY2Ugb2YgaHlwZXJ0ZW5zaW9uIGFuZCBkaWFiZXRlcywgYWxvbmcgd2l0aCBlbGV2YXRlZCBCTUksIHBvaW50cyB0byBhIHNpZ25pZmljYW50IGJ1cmRlbiBvZiBub24tY29tbXVuaWNhYmxlIGRpc2Vhc2VzIGluIHRoaXMgZ3JvdXAsIGxpa2VseSBpbmZsdWVuY2VkIGJ5IGxpZmVzdHlsZSBhbmQgbGltaXRlZCBhY2Nlc3MgdG8gaGVhbHRoY2FyZSBzZXJ2aWNlcy4NCg0KDQpgYGB7cn0NCm5jZCAlPiUNCiAgdGJsX3N1bW1hcnkoDQogICAgYnkgPSByZXNpZGVuY2UpDQpgYGANCg0KSW50ZXJwcmV0YXRpb246DQoNClRoZSBzdHVkeSBpbmNsdWRlZCAyLDIwMiBwYXJ0aWNpcGFudHMsIGNvbXByaXNpbmcgMSwzMzEgcnVyYWwgYW5kIDg3MSB1cmJhbiByZXNpZGVudHMuIFRoZSBtZWRpYW4gYWdlIG9mIHJ1cmFsIHBhcnRpY2lwYW50cyB3YXMgNTEgeWVhcnMgKElRUjogMzjigJM2OSksIHNsaWdodGx5IGhpZ2hlciB0aGFuIHRoYXQgb2YgdXJiYW4gcGFydGljaXBhbnRzICg0OSB5ZWFyczsgSVFSOiAzN+KAkzY1KSwgaW5kaWNhdGluZyBhIHNvbWV3aGF0IG9sZGVyIHJ1cmFsIHBvcHVsYXRpb24uDQoNCkluIGJvdGggc2V0dGluZ3MsIGZlbWFsZXMgY29uc3RpdHV0ZWQgYSBzbGlnaHRseSBoaWdoZXIgcHJvcG9ydGlvbuKAlDU2JSBpbiBydXJhbCBhcmVhcyBhbmQgNTElIGluIHVyYmFuIGFyZWFz4oCUc3VnZ2VzdGluZyBhIHJlbGF0aXZlbHkgYmFsYW5jZWQgZ2VuZGVyIGRpc3RyaWJ1dGlvbiBhY3Jvc3MgcmVzaWRlbmNlcy4NCg0KRWR1Y2F0aW9uYWwgYXR0YWlubWVudCBzaG93ZWQgbW9kZXN0IGRpZmZlcmVuY2VzIGJldHdlZW4gZ3JvdXBzLiBBIHNsaWdodGx5IGhpZ2hlciBwcm9wb3J0aW9uIG9mIHJ1cmFsIHBhcnRpY2lwYW50cyAoMjUlKSBoYWQgaGlnaGVyIGVkdWNhdGlvbiBjb21wYXJlZCB0byB1cmJhbiBwYXJ0aWNpcGFudHMgKDIwJSksIHdoZXJlYXMgdGhvc2Ugd2l0aCBubyBmb3JtYWwgZWR1Y2F0aW9uIHdlcmUgbWFyZ2luYWxseSBmZXdlciBpbiBydXJhbCAoOS44JSkgdGhhbiBpbiB1cmJhbiAoMTQlKSBzZXR0aW5ncy4gQWNyb3NzIGJvdGggZ3JvdXBzLCBwcmltYXJ5IGFuZCBzZWNvbmRhcnkgZWR1Y2F0aW9uIHdlcmUgdGhlIG1vc3QgY29tbW9uIGxldmVscywgdG9nZXRoZXIgYWNjb3VudGluZyBmb3Igb3ZlciA2MCUgb2YgcGFydGljaXBhbnRzLCByZWZsZWN0aW5nIGEgbW9kZXJhdGVseSBlZHVjYXRlZCBzYW1wbGUgb3ZlcmFsbC4NCg0KT2NjdXBhdGlvbmFsIHBhdHRlcm5zIHZhcmllZCBub3RhYmx5IGJldHdlZW4gcnVyYWwgYW5kIHVyYmFuIGFyZWFzLiBGYXJtaW5nIHdhcyBtb3JlIHByZXZhbGVudCBhbW9uZyBydXJhbCBwYXJ0aWNpcGFudHMgKDI5JSkgdGhhbiB1cmJhbiBwYXJ0aWNpcGFudHMgKDI1JSksIHdoaWxlIGJ1c2luZXNzLXJlbGF0ZWQgb2NjdXBhdGlvbnMgd2VyZSBtb3JlIGNvbW1vbiBpbiB1cmJhbiBhcmVhcyAoMzAlIHZzLiAxNSUpLiBTZXJ2aWNlIGVtcGxveW1lbnQgd2FzIGNvbXBhcmFibGUgKDMyJSBydXJhbDsgMjglIHVyYmFuKS4gVW5lbXBsb3ltZW50IHdhcyBuZWFybHkgdGhyZWUgdGltZXMgaGlnaGVyIGluIHJ1cmFsIGFyZWFzICgxNCUpIHRoYW4gaW4gdXJiYW4gc2V0dGluZ3MgKDUuNyUpLCB3aGljaCBtYXkgc3VnZ2VzdCBsaW1pdGVkIGpvYiBvcHBvcnR1bml0aWVzIG91dHNpZGUgYWdyaWN1bHR1cmUuDQoNCkhlYWx0aCBpbmRpY2F0b3JzIHNob3dlZCBzbWFsbCBidXQgbWVhbmluZ2Z1bCBydXJhbOKAk3VyYmFuIGRpZmZlcmVuY2VzLiBUaGUgbWVkaWFuIEJNSSB3YXMgc2ltaWxhciBhY3Jvc3MgZ3JvdXBz4oCUMjUuNSAoSVFSOiAyMS4x4oCTMjguMykgaW4gcnVyYWwgYXJlYXMgYW5kIDI0LjkgKElRUjogMjEuOeKAkzI4LjQpIGluIHVyYmFuIGFyZWFz4oCUaW5kaWNhdGluZyBhIGdlbmVyYWxseSBvdmVyd2VpZ2h0IHBvcHVsYXRpb24uIEhvd2V2ZXIsIGJsb29kIHByZXNzdXJlIHJlYWRpbmdzIHdlcmUgaGlnaGVyIGFtb25nIHJ1cmFsIHBhcnRpY2lwYW50cywgd2l0aCBtZWRpYW4gc3lzdG9saWMvZGlhc3RvbGljIHZhbHVlcyBvZiAxMzYvOTEgbW1IZyBjb21wYXJlZCB0byAxMzEvOTMgbW1IZyBpbiB1cmJhbiBwYXJ0aWNpcGFudHMuDQoNCkNvbnNpc3RlbnQgd2l0aCB0aGVzZSBmaW5kaW5ncywgaHlwZXJ0ZW5zaW9uIHdhcyBtb3JlIHByZXZhbGVudCBpbiBydXJhbCBhcmVhcyAoNDElKSB0aGFuIGluIHVyYmFuIG9uZXMgKDMzJSkuIERpYWJldGVzIGFsc28gZm9sbG93ZWQgYSBzaW1pbGFyIHBhdHRlcm4sIGFmZmVjdGluZyAyNiUgb2YgcnVyYWwgcGFydGljaXBhbnRzIGFuZCAyMCUgb2YgdXJiYW4gcGFydGljaXBhbnRzLg0KDQpPdmVyYWxsLCB0aGUgcmVzdWx0cyBpbmRpY2F0ZSB0aGF0IHJ1cmFsIHBhcnRpY2lwYW50cyBhcmUgc2xpZ2h0bHkgb2xkZXIsIGxlc3MgZW1wbG95ZWQsIGFuZCBleHBlcmllbmNlIGhpZ2hlciByYXRlcyBvZiBoeXBlcnRlbnNpb24gYW5kIGRpYWJldGVzIGNvbXBhcmVkIHRvIHRoZWlyIHVyYmFuIGNvdW50ZXJwYXJ0cy4gVGhlc2UgZmluZGluZ3Mgc3VnZ2VzdCBhIHBvdGVudGlhbCBydXJhbCBkaXNhZHZhbnRhZ2UgaW4gaGVhbHRoIG91dGNvbWVzLCBwb3NzaWJseSBsaW5rZWQgdG8gZGlmZmVyZW5jZXMgaW4gbGlmZXN0eWxlLCBoZWFsdGhjYXJlIGFjY2VzcywgYW5kIHNvY2lvZWNvbm9taWMgb3Bwb3J0dW5pdGllcy4NCg0KDQpgYGB7cn0NCm1vZGVsIDwtIGdsbSggZmFjdG9yKGh5cGVydGVuc2lvbikgfiBhZ2UgKyBzZXggKyBibWkgKyByZXNpZGVuY2UgKyBlZHVjYXRpb24gKyBvY2N1cGF0aW9uICsgZGlhYmV0ZXMsIGRhdGEgPSBuY2QsIGZhbWlseSA9IGJpbm9taWFsKQ0KdGJsX3JlZ3Jlc3Npb24obW9kZWwpDQoNCg0KYGBgDQoNCkludGVycHJldGF0aW9uIG9mIExvZ2lzdGljIFJlZ3Jlc3Npb24gUmVzdWx0czoNCg0KVGhlIG11bHRpdmFyaWFibGUgbG9naXN0aWMgcmVncmVzc2lvbiBtb2RlbCBleGFtaW5lZCB0aGUgYXNzb2NpYXRpb24gYmV0d2VlbiBzZXZlcmFsIGRlbW9ncmFwaGljIGFuZCBoZWFsdGgtcmVsYXRlZCB2YXJpYWJsZXMgYW5kIHRoZSBvdXRjb21lIG9mIGludGVyZXN0ICh1bnNwZWNpZmllZCkuIE5vbmUgb2YgdGhlIGNvdmFyaWF0ZXMgc2hvd2VkIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQgYXNzb2NpYXRpb25zIGF0IHRoZSBjb252ZW50aW9uYWwgNSUgc2lnbmlmaWNhbmNlIGxldmVsLg0KDQpBZ2UgaGFkIGEgbG9nKE9SKSBvZiAwLjAwICg5NSUgQ0k6IOKIkjAuMDIgdG8gMC4wMiwgcCA9IDAuOCksIGluZGljYXRpbmcgbm8gbWVhc3VyYWJsZSBhc3NvY2lhdGlvbiB3aXRoIHRoZSBvdXRjb21lLiBTaW1pbGFybHksIHNleCBkaWQgbm90IGRlbW9uc3RyYXRlIGEgc2lnbmlmaWNhbnQgZWZmZWN0OyBtYWxlcyBoYWQgaGlnaGVyIG9kZHMgY29tcGFyZWQgdG8gZmVtYWxlcyAobG9nKE9SKSA9IDAuMzAsIDk1JSBDSTog4oiSMC4yNyB0byAwLjg3LCBwID0gMC4zKSwgYnV0IHRoZSBjb25maWRlbmNlIGludGVydmFsIGluY2x1ZGVkIHplcm8sIHN1Z2dlc3Rpbmcgbm8gZXZpZGVuY2Ugb2YgYSB0cnVlIGRpZmZlcmVuY2UuDQoNCkJvZHkgbWFzcyBpbmRleCAoQk1JKSBhbHNvIHNob3dlZCBubyBzaWduaWZpY2FudCByZWxhdGlvbnNoaXAgKGxvZyhPUikgPSDiiJIwLjAxLCA5NSUgQ0k6IOKIkjAuMDcgdG8gMC4wNCwgcCA9IDAuNikuIFJlc2lkZW5jZSB0eXBlIGRpZCBub3Qgc3Vic3RhbnRpYWxseSBhZmZlY3QgdGhlIG9kZHMgb2YgdGhlIG91dGNvbWUsIHdpdGggdXJiYW4gcGFydGljaXBhbnRzIGhhdmluZyBsb3dlciBvZGRzIHRoYW4gcnVyYWwgcGFydGljaXBhbnRzIChsb2coT1IpID0g4oiSMC40MSwgOTUlIENJOiDiiJIxLjAgdG8gMC4xOCwgcCA9IDAuMiksIHRob3VnaCB0aGlzIGRpZmZlcmVuY2Ugd2FzIG5vdCBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50Lg0KDQpFZHVjYXRpb24gbGV2ZWwgd2FzIG5vdCBzaWduaWZpY2FudGx5IGFzc29jaWF0ZWQgd2l0aCB0aGUgb3V0Y29tZSBpbiBhbnkgY2F0ZWdvcnkgY29tcGFyZWQgdG8gdGhlIGhpZ2hlci1lZHVjYXRpb24gcmVmZXJlbmNlIGdyb3VwLiBUaGUgbG9nKE9SKSByYW5nZWQgZnJvbSAwLjA1IGZvciBwcmltYXJ5IGVkdWNhdGlvbiAocCA9IDAuOSkgdG8gMC41MiBmb3Igbm8gZm9ybWFsIGVkdWNhdGlvbiAocCA9IDAuMyksIHdpdGggYWxsIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIGNyb3NzaW5nIHplcm8uDQoNCk9jY3VwYXRpb25hbCBjYXRlZ29yaWVzIGFsc28gcmV2ZWFsZWQgbm8gc2lnbmlmaWNhbnQgZGlmZmVyZW5jZXMgcmVsYXRpdmUgdG8gdGhlIGJ1c2luZXNzIGdyb3VwLiBUaGUgZXN0aW1hdGVkIGxvZyBvZGRzIHJhbmdlZCBmcm9tIOKIkjAuNTYgZm9yIHJldGlyZWQgcGFydGljaXBhbnRzIHRvIOKIkjAuMTIgZm9yIHRob3NlIGluIHNlcnZpY2Ugb2NjdXBhdGlvbnMsIGFsbCB3aXRoIHAtdmFsdWVzIGFib3ZlIDAuMy4gTGlrZXdpc2UsIGRpYWJldGVzIHN0YXR1cyBzaG93ZWQgbm8gbWVhbmluZ2Z1bCBhc3NvY2lhdGlvbiB3aXRoIHRoZSBvdXRjb21lIChsb2coT1IpID0gMC4wNiwgOTUlIENJOiDiiJIwLjYxIHRvIDAuNzEsIHAgPSAwLjkpLg0KDQpPdmVyYWxsLCB0aGUgcmVncmVzc2lvbiBhbmFseXNpcyBzdWdnZXN0cyB0aGF0IG5vbmUgb2YgdGhlIGV4YW1pbmVkIHZhcmlhYmxlc+KAlGFnZSwgc2V4LCBCTUksIHJlc2lkZW5jZSwgZWR1Y2F0aW9uLCBvY2N1cGF0aW9uLCBvciBkaWFiZXRlc+KAlHdlcmUgc2lnbmlmaWNhbnRseSBhc3NvY2lhdGVkIHdpdGggdGhlIG91dGNvbWUuIFRoZSBkaXJlY3Rpb24gYW5kIG1hZ25pdHVkZSBvZiB0aGUgY29lZmZpY2llbnRzIGluZGljYXRlIHRoYXQgYW55IG9ic2VydmVkIGRpZmZlcmVuY2VzIGFyZSBzbWFsbCBhbmQgbGlrZWx5IGR1ZSB0byByYW5kb20gdmFyaWF0aW9uIHJhdGhlciB0aGFuIHN5c3RlbWF0aWMgZWZmZWN0cy4NCg==