OBJECTIVE This study aims to observe and understand the factors involving a household Income and Spending in Region 7 - Central Visayas, Philippines. Does education affect income?, if so, what education level has better income? Is it better to have higher education? Is it better to be employed or own a business?
Upon observation on Spending, which marital status has more spending? what is the relationship of Income to spending? or to marital status?
These are the questions we will attempt to understand and see a trend of. If you are a Business person or wants to know the economic status of Central visayas, this is an in-depth narrative of the Income and Spending status of the Region so you can make data-driven decision for whatever purpose this may economically serve you
We will utilize a data from the Philippines Statistic Authority as uploaded in kaggle: https://www.kaggle.com/grosvenpaul/family-income-and-expenditure/code
This is a two part analysis, 1. Analyze Income vs Spending, and 2. Spending habits (which and what within the sample size spend the most)
DATA STRUCTURE AND RETRIEVAL The data from this study came from kaggle - an online repository and site for data science enthusiast. https://www.kaggle.com/jackdaoud/marketing-data
r7househould <- read.csv("R7_IncomeSpending.csv")
head(r7househould)
TOTAL PARTICIPANTS
length(r7househould$Region)
[1] 2541
We have a total of 2541 sample size. This is enough of a size to tell us the general economic distribution of the population in the region.
SEX AND AGE DISTRIBUTION
r7househould %>% ggplot(aes(Head_Age, fill=Head_Sex)) + geom_density(alpha=0.2) + ggtitle("Sex and Age Distribution of Participants")

mean(r7househould$Head_Age)
[1] 53.00275
table(r7househould$Head_Sex)
Female Male
665 1876
The average age of the participants is 53yo. As shown in the chart, we have more Male over female. We have more Male participants in the younger spectrum and more Female in the older spectrum
PARTICIPANTS BY EDUCATION
r7househould %>% ggplot(aes(Education_Summary)) + geom_bar(fill="blue") + theme(axis.text.x = element_text(angle = 45)) + ggtitle("Participants as Household Head by Education")

r7househould %>% group_by(Education_Summary) %>% summarise(Sum_of_sample=length(Education_Summary), percent_Summary=formatC(Sum_of_sample/length(r7househould$Region)*100)) %>% arrange(desc(Sum_of_sample))
Looking at the chart and numbers in education above, education level with the most participants are in the elementary level group. This means that more participants were not even able to complete elementary level education. THis is surprising as this data is latest between 2018-2019. WIll this affect income and source of income? Let’s proceed.
INCOME DISTRIBUTION
r7househould %>% ggplot(aes(x= Total_Income, fill=Education_Summary)) + geom_density(alpha=0.2) + scale_x_continuous(trans = "log10", labels=scales::comma) + ggtitle("Income Density by Education")

r7househould %>% ggplot(aes(Education_Summary, Total_Income)) + geom_boxplot() + scale_y_continuous(trans = "log10", labels=scales::comma) + ylab("income in php") + ggtitle("Income by Education of Participants") + theme(axis.text.x = element_text(angle = 45))

NA
NA
mean(r7househould$Total_Income)
[1] 234909.3
all_sample <- length(r7househould$Region)
all_educ <- r7househould %>% group_by(Education_Summary) %>% summarise(sum_per_education=length(Education_Summary), percent_sample = length(Education_Summary)/all_sample*100,avg_income=mean(Total_Income)) %>% arrange(desc(avg_income))
all_educ
Majority of the participants are within 100,000 to 700,000 php in Income range with an average of 234,909.Looking at average income per education level, the higher the education level the greater the possibility of higher income. Although looking at the upper outlier income, there is an equal opportunity for everyone to get the million mark income.
Unfortunately, those on elementary level and elementary graduate group are within lower outlier of the distribution.
INCOME BY MAIN SOURCE OF INCOME
r7househould %>% ggplot(aes(x= Total_Income, fill=Main_Income)) + geom_density(alpha=0.2) + scale_x_continuous(trans = "log10", labels=scales::comma) + ggtitle("Income Density by Income source")

r7househould %>% ggplot(aes(Main_Income, Total_Income)) + geom_boxplot() + scale_y_continuous(trans = "log10", labels=scales::comma) + ylab("income in php") + ggtitle("Income by Source of income of Participants") + theme(axis.text.x = element_text(angle = 45))

r7househould %>% ggplot(aes(Head_Age, Total_Income, color=Main_Income)) + geom_jitter()+ scale_y_continuous(trans = "log10", labels=scales::comma) + ggtitle("Source of income through time (age)")

NA
NA
looking at income by age through the income source, we see that between 25-60yo, the large part of the distribution are within wage earners and entrep activities and later on in time from 60yo onwards we are seeing other sources to be prevalent. This could from investments or savings made by the participants.
r7househould %>% group_by(Main_Income) %>% summarise(Sum_per_sample=length(Main_Income), percent_Summary=formatC(Sum_per_sample/length(r7househould$Region)*100),avg_income=mean(Total_Income)) %>% arrange(desc(Sum_per_sample))
There is nothing much of a difference in average income for all participants in the sample data, however for those into entrepreneurial activities, have greater potential of million earnings.
r7househould %>% filter(Total_Income>1000000) %>% group_by(Main_Income) %>% summarise(Sum_per_sample=length(Main_Income), percent_Summary=formatC(Sum_per_sample/length(r7househould$Region)*100),avg_income=mean(Total_Income)) %>% arrange(desc(Sum_per_sample))
And speaking of million earnings, just for the kick, i have dug in a bit and the ratio for the participants relative to having an income of >1000000 we see that it is possible however the chances are slim in all groups of income source.
INCOME VS MARITAL STATUS
r7househould %>% ggplot(aes(Marital_Status)) + geom_bar() + ggtitle("Participants by Marital status")

Majority of our participants are in the Married group and mainly having that large sample size means our analysis will be closer to the realistic analysis for married group regardless of education, income and other relational analysis in this study
r7househould %>% ggplot(aes(Head_Age, Total_Income, color=Marital_Status)) + geom_jitter() + scale_y_continuous(trans = "log10", labels=scales::comma) + ylab("income in php") + ggtitle("Income by Marital Status of Participants")

Married group proves to be more active in higher income generation surpassing the million mark income. although overall, regardless of marital status, we are seeing a wide spread of income range. Married group continues to be active income earners through time from 30-60yo, and the widowed from 60 on wards.
Overall our takeaways for this analysis of household income in Central Visayas are:
Education plays a huge part in alleviating low income/salary
Majority of the household head earners of the sample comprises of individuals who have not even completed their elementary education level or 32% of the sample size.
THe average income for Central Visayas is Php 234,909.3. Regardless of one’s income source, it still averages 230,000-245,000
The active age of the participants in wage/salaries are 30 - 60yo
There is a slim chance of reaching the million peso income mark however, most who have reached the million are wage/salary earners however the higher average are those in entrepreneurial activities
ANNUAL FOOD SPENDING OF PARTICIPANTS BY INCOME SOURCE
spending <- r7househould %>% group_by(Main_Income) %>% summarise(Household=length(Main_Income), Bread_Spending=sum(Bread_Expenditure), Meat_spending=sum(Meat_Expenditure),Veggie_Spending=sum(Vegetables_Expenditure), Fruit_Spending=sum(Fruit_Expenditure))
spending
AVERAGE ANNUAL SPENDING PER INCOME SOURCE
r7househould %>% group_by(Main_Income) %>% summarise(Household=length(Main_Income), Bread_Spending=sum(Bread_Expenditure)/Household, Meat_spending=sum(Meat_Expenditure)/Household,Veggie_Spending=sum(Vegetables_Expenditure)/Household, Fruit_Spending=sum(Fruit_Expenditure)/Household)
NA
ANNUAL FOOD SPENDING PER INCOME SOURCE by WEEKLY SPENDING
r7househould %>% group_by(Main_Income) %>% summarise(Household=length(Main_Income), Bread_Spending=sum(Bread_Expenditure)/Household/52, Meat_spending=sum(Meat_Expenditure)/Household/52,Veggie_Spending=sum(Vegetables_Expenditure)/Household/52, Fruit_Spending=sum(Fruit_Expenditure)/Household/52)
NA
LS0tDQp0aXRsZTogIkVjb25vbWljIEFuYWx5c2lzOiBDZW50cmFsIFZpc2F5YXMgSG91c2Vob2xkIFNwZW5kaW5nIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KDQpgYGB7cn0NCg0KYGBgDQoNCk9CSkVDVElWRSANClRoaXMgc3R1ZHkgYWltcyB0byBvYnNlcnZlIGFuZCB1bmRlcnN0YW5kIHRoZSBmYWN0b3JzIGludm9sdmluZyBhIGhvdXNlaG9sZCBJbmNvbWUgYW5kICBTcGVuZGluZyBpbiBSZWdpb24gNyAtIENlbnRyYWwgVmlzYXlhcywgUGhpbGlwcGluZXMuIERvZXMgZWR1Y2F0aW9uIGFmZmVjdCBpbmNvbWU/LCBpZiBzbywgd2hhdCBlZHVjYXRpb24gbGV2ZWwgaGFzIGJldHRlciBpbmNvbWU/IElzIGl0IGJldHRlciB0byBoYXZlIGhpZ2hlciBlZHVjYXRpb24/IElzIGl0IGJldHRlciB0byBiZSBlbXBsb3llZCBvciBvd24gYSBidXNpbmVzcz8gDQoNClVwb24gb2JzZXJ2YXRpb24gb24gU3BlbmRpbmcsIHdoaWNoIG1hcml0YWwgc3RhdHVzIGhhcyBtb3JlIHNwZW5kaW5nPyB3aGF0IGlzIHRoZSByZWxhdGlvbnNoaXAgb2YgSW5jb21lIHRvIHNwZW5kaW5nPyBvciB0byBtYXJpdGFsIHN0YXR1cz8NCg0KVGhlc2UgYXJlIHRoZSBxdWVzdGlvbnMgd2Ugd2lsbCBhdHRlbXB0IHRvIHVuZGVyc3RhbmQgYW5kIHNlZSBhIHRyZW5kIG9mLiBJZiB5b3UgYXJlIGEgQnVzaW5lc3MgcGVyc29uIG9yIHdhbnRzIHRvIGtub3cgdGhlIGVjb25vbWljIHN0YXR1cyBvZiBDZW50cmFsIHZpc2F5YXMsIHRoaXMgaXMgYW4gaW4tZGVwdGggbmFycmF0aXZlIG9mIHRoZSBJbmNvbWUgYW5kIFNwZW5kaW5nIHN0YXR1cyBvZiB0aGUgUmVnaW9uIHNvIHlvdSBjYW4gbWFrZSBkYXRhLWRyaXZlbiBkZWNpc2lvbiBmb3Igd2hhdGV2ZXIgcHVycG9zZSB0aGlzIG1heSBlY29ub21pY2FsbHkgc2VydmUgeW91DQoNCldlIHdpbGwgdXRpbGl6ZSBhIGRhdGEgZnJvbSB0aGUgUGhpbGlwcGluZXMgU3RhdGlzdGljIEF1dGhvcml0eSBhcyB1cGxvYWRlZCBpbiBrYWdnbGU6IGh0dHBzOi8vd3d3LmthZ2dsZS5jb20vZ3Jvc3ZlbnBhdWwvZmFtaWx5LWluY29tZS1hbmQtZXhwZW5kaXR1cmUvY29kZSANCg0KVGhpcyBpcyBhIHR3byBwYXJ0IGFuYWx5c2lzLCAxLiBBbmFseXplIEluY29tZSB2cyBTcGVuZGluZywgYW5kIDIuIFNwZW5kaW5nIGhhYml0cyAod2hpY2ggYW5kIHdoYXQgd2l0aGluIHRoZSBzYW1wbGUgc2l6ZSBzcGVuZCB0aGUgbW9zdCkNCg0KREFUQSBTVFJVQ1RVUkUgQU5EIFJFVFJJRVZBTA0KVGhlIGRhdGEgZnJvbSB0aGlzIHN0dWR5IGNhbWUgZnJvbSBrYWdnbGUgLSBhbiBvbmxpbmUgcmVwb3NpdG9yeSBhbmQgc2l0ZSBmb3IgZGF0YSBzY2llbmNlIGVudGh1c2lhc3QuIGh0dHBzOi8vd3d3LmthZ2dsZS5jb20vamFja2Rhb3VkL21hcmtldGluZy1kYXRhDQoNCmBgYHtyfQ0Kcjdob3VzZWhvdWxkIDwtIHJlYWQuY3N2KCJSN19JbmNvbWVTcGVuZGluZy5jc3YiKQ0KaGVhZChyN2hvdXNlaG91bGQpDQpgYGANCg0KDQpUT1RBTCBQQVJUSUNJUEFOVFMNCmBgYHtyfQ0KbGVuZ3RoKHI3aG91c2Vob3VsZCRSZWdpb24pDQoNCmBgYA0KV2UgaGF2ZSBhIHRvdGFsIG9mIDI1NDEgc2FtcGxlIHNpemUuIFRoaXMgaXMgZW5vdWdoIG9mIGEgc2l6ZSB0byB0ZWxsIHVzIHRoZSBnZW5lcmFsIGVjb25vbWljIGRpc3RyaWJ1dGlvbiBvZiB0aGUgcG9wdWxhdGlvbiBpbiB0aGUgcmVnaW9uLg0KDQoNClNFWCBBTkQgQUdFIERJU1RSSUJVVElPTg0KYGBge3J9DQpyN2hvdXNlaG91bGQgJT4lICBnZ3Bsb3QoYWVzKEhlYWRfQWdlLCBmaWxsPUhlYWRfU2V4KSkgKyBnZW9tX2RlbnNpdHkoYWxwaGE9MC4yKSArIGdndGl0bGUoIlNleCBhbmQgQWdlIERpc3RyaWJ1dGlvbiBvZiBQYXJ0aWNpcGFudHMiKQ0KbWVhbihyN2hvdXNlaG91bGQkSGVhZF9BZ2UpDQp0YWJsZShyN2hvdXNlaG91bGQkSGVhZF9TZXgpDQpgYGANClRoZSBhdmVyYWdlIGFnZSBvZiB0aGUgcGFydGljaXBhbnRzIGlzIDUzeW8uIEFzIHNob3duIGluIHRoZSBjaGFydCwgd2UgaGF2ZSBtb3JlIE1hbGUgb3ZlciBmZW1hbGUuIFdlIGhhdmUgbW9yZSBNYWxlIHBhcnRpY2lwYW50cyBpbiB0aGUgeW91bmdlciBzcGVjdHJ1bSBhbmQgbW9yZSBGZW1hbGUgaW4gdGhlIG9sZGVyIHNwZWN0cnVtDQoNCg0KDQpQQVJUSUNJUEFOVFMgQlkgRURVQ0FUSU9ODQpgYGB7cn0NCg0Kcjdob3VzZWhvdWxkICU+JSBnZ3Bsb3QoYWVzKEVkdWNhdGlvbl9TdW1tYXJ5KSkgKyBnZW9tX2JhcihmaWxsPSJibHVlIikgKyAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSkpICsgZ2d0aXRsZSgiUGFydGljaXBhbnRzIGFzIEhvdXNlaG9sZCBIZWFkIGJ5IEVkdWNhdGlvbiIpDQpgYGANCmBgYHtyfQ0KDQpyN2hvdXNlaG91bGQgJT4lIGdyb3VwX2J5KEVkdWNhdGlvbl9TdW1tYXJ5KSAlPiUgc3VtbWFyaXNlKFN1bV9vZl9zYW1wbGU9bGVuZ3RoKEVkdWNhdGlvbl9TdW1tYXJ5KSwgcGVyY2VudF9TdW1tYXJ5PWZvcm1hdEMoU3VtX29mX3NhbXBsZS9sZW5ndGgocjdob3VzZWhvdWxkJFJlZ2lvbikqMTAwKSkgJT4lICBhcnJhbmdlKGRlc2MoU3VtX29mX3NhbXBsZSkpDQpgYGANCkxvb2tpbmcgYXQgdGhlIGNoYXJ0IGFuZCBudW1iZXJzIGluIGVkdWNhdGlvbiBhYm92ZSwgZWR1Y2F0aW9uIGxldmVsIHdpdGggdGhlIG1vc3QgcGFydGljaXBhbnRzIGFyZSBpbiB0aGUgZWxlbWVudGFyeSBsZXZlbCBncm91cC4gVGhpcyBtZWFucyB0aGF0IG1vcmUgcGFydGljaXBhbnRzIHdlcmUgbm90IGV2ZW4gYWJsZSB0byBjb21wbGV0ZSBlbGVtZW50YXJ5IGxldmVsIGVkdWNhdGlvbi4gVEhpcyBpcyBzdXJwcmlzaW5nIGFzIHRoaXMgZGF0YSBpcyBsYXRlc3QgYmV0d2VlbiAyMDE4LTIwMTkuIFdJbGwgdGhpcyBhZmZlY3QgaW5jb21lIGFuZCBzb3VyY2Ugb2YgaW5jb21lPyBMZXQncyBwcm9jZWVkLg0KDQoNCklOQ09NRSBESVNUUklCVVRJT04NCmBgYHtyfQ0Kcjdob3VzZWhvdWxkICU+JSBnZ3Bsb3QoYWVzKHg9IFRvdGFsX0luY29tZSwgZmlsbD1FZHVjYXRpb25fU3VtbWFyeSkpICsgZ2VvbV9kZW5zaXR5KGFscGhhPTAuMikgKyAgc2NhbGVfeF9jb250aW51b3VzKHRyYW5zID0gImxvZzEwIiwgbGFiZWxzPXNjYWxlczo6Y29tbWEpICsgZ2d0aXRsZSgiSW5jb21lIERlbnNpdHkgYnkgRWR1Y2F0aW9uIikNCg0Kcjdob3VzZWhvdWxkICU+JSAgZ2dwbG90KGFlcyhFZHVjYXRpb25fU3VtbWFyeSwgVG90YWxfSW5jb21lKSkgKyBnZW9tX2JveHBsb3QoKSArIHNjYWxlX3lfY29udGludW91cyh0cmFucyA9ICJsb2cxMCIsIGxhYmVscz1zY2FsZXM6OmNvbW1hKSArIHlsYWIoImluY29tZSBpbiBwaHAiKSArIGdndGl0bGUoIkluY29tZSBieSBFZHVjYXRpb24gb2YgUGFydGljaXBhbnRzIikgKyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1KSkNCg0KDQpgYGANCg0KYGBge3J9DQptZWFuKHI3aG91c2Vob3VsZCRUb3RhbF9JbmNvbWUpDQphbGxfc2FtcGxlIDwtIGxlbmd0aChyN2hvdXNlaG91bGQkUmVnaW9uKQ0KYWxsX2VkdWMgPC0gcjdob3VzZWhvdWxkICU+JSBncm91cF9ieShFZHVjYXRpb25fU3VtbWFyeSkgJT4lIHN1bW1hcmlzZShzdW1fcGVyX2VkdWNhdGlvbj1sZW5ndGgoRWR1Y2F0aW9uX1N1bW1hcnkpLCBwZXJjZW50X3NhbXBsZSA9IGxlbmd0aChFZHVjYXRpb25fU3VtbWFyeSkvYWxsX3NhbXBsZSoxMDAsYXZnX2luY29tZT1tZWFuKFRvdGFsX0luY29tZSkpICU+JSBhcnJhbmdlKGRlc2MoYXZnX2luY29tZSkpDQphbGxfZWR1Yw0KYGBgDQpNYWpvcml0eSBvZiB0aGUgcGFydGljaXBhbnRzIGFyZSB3aXRoaW4gMTAwLDAwMCB0byA3MDAsMDAwIHBocCBpbiBJbmNvbWUgcmFuZ2Ugd2l0aCBhbiBhdmVyYWdlIG9mIDIzNCw5MDkuTG9va2luZyBhdCBhdmVyYWdlIGluY29tZSBwZXIgZWR1Y2F0aW9uIGxldmVsLCB0aGUgaGlnaGVyIHRoZSBlZHVjYXRpb24gbGV2ZWwgdGhlIGdyZWF0ZXIgdGhlIHBvc3NpYmlsaXR5IG9mIGhpZ2hlciBpbmNvbWUuIEFsdGhvdWdoIGxvb2tpbmcgYXQgdGhlIHVwcGVyIG91dGxpZXIgaW5jb21lLCB0aGVyZSBpcyBhbiBlcXVhbCBvcHBvcnR1bml0eSBmb3IgZXZlcnlvbmUgdG8gZ2V0IHRoZSBtaWxsaW9uIG1hcmsgaW5jb21lLg0KDQpVbmZvcnR1bmF0ZWx5LCB0aG9zZSBvbiBlbGVtZW50YXJ5IGxldmVsIGFuZCBlbGVtZW50YXJ5IGdyYWR1YXRlIGdyb3VwIGFyZSB3aXRoaW4gbG93ZXIgb3V0bGllciBvZiB0aGUgZGlzdHJpYnV0aW9uLg0KDQpJTkNPTUUgQlkgTUFJTiBTT1VSQ0UgT0YgSU5DT01FDQpgYGB7cn0NCnI3aG91c2Vob3VsZCAlPiUgZ2dwbG90KGFlcyh4PSBUb3RhbF9JbmNvbWUsIGZpbGw9TWFpbl9JbmNvbWUpKSArIGdlb21fZGVuc2l0eShhbHBoYT0wLjIpICsgIHNjYWxlX3hfY29udGludW91cyh0cmFucyA9ICJsb2cxMCIsIGxhYmVscz1zY2FsZXM6OmNvbW1hKSArIGdndGl0bGUoIkluY29tZSBEZW5zaXR5IGJ5IEluY29tZSBzb3VyY2UiKQ0KDQpyN2hvdXNlaG91bGQgJT4lICBnZ3Bsb3QoYWVzKE1haW5fSW5jb21lLCBUb3RhbF9JbmNvbWUpKSArIGdlb21fYm94cGxvdCgpICsgc2NhbGVfeV9jb250aW51b3VzKHRyYW5zID0gImxvZzEwIiwgbGFiZWxzPXNjYWxlczo6Y29tbWEpICsgeWxhYigiaW5jb21lIGluIHBocCIpICsgZ2d0aXRsZSgiSW5jb21lIGJ5IFNvdXJjZSBvZiBpbmNvbWUgb2YgUGFydGljaXBhbnRzIikgKyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1KSkNCg0Kcjdob3VzZWhvdWxkICU+JSBnZ3Bsb3QoYWVzKEhlYWRfQWdlLCBUb3RhbF9JbmNvbWUsIGNvbG9yPU1haW5fSW5jb21lKSkgKyBnZW9tX2ppdHRlcigpKyBzY2FsZV95X2NvbnRpbnVvdXModHJhbnMgPSAibG9nMTAiLCBsYWJlbHM9c2NhbGVzOjpjb21tYSkgKyBnZ3RpdGxlKCJTb3VyY2Ugb2YgaW5jb21lIHRocm91Z2ggdGltZSAoYWdlKSIpDQoNCg0KYGBgDQpsb29raW5nIGF0IGluY29tZSBieSBhZ2UgdGhyb3VnaCB0aGUgaW5jb21lIHNvdXJjZSwgd2Ugc2VlIHRoYXQgYmV0d2VlbiAyNS02MHlvLCB0aGUgbGFyZ2UgcGFydCBvZiB0aGUgZGlzdHJpYnV0aW9uIGFyZSB3aXRoaW4gd2FnZSBlYXJuZXJzIGFuZCBlbnRyZXAgYWN0aXZpdGllcyBhbmQgbGF0ZXIgb24gaW4gdGltZSBmcm9tIDYweW8gb253YXJkcyB3ZSBhcmUgc2VlaW5nIG90aGVyIHNvdXJjZXMgdG8gYmUgcHJldmFsZW50LiBUaGlzIGNvdWxkIGZyb20gaW52ZXN0bWVudHMgb3Igc2F2aW5ncyBtYWRlIGJ5IHRoZSBwYXJ0aWNpcGFudHMuDQoNCmBgYHtyfQ0KDQpyN2hvdXNlaG91bGQgJT4lIGdyb3VwX2J5KE1haW5fSW5jb21lKSAlPiUgc3VtbWFyaXNlKFN1bV9wZXJfc2FtcGxlPWxlbmd0aChNYWluX0luY29tZSksIHBlcmNlbnRfU3VtbWFyeT1mb3JtYXRDKFN1bV9wZXJfc2FtcGxlL2xlbmd0aChyN2hvdXNlaG91bGQkUmVnaW9uKSoxMDApLGF2Z19pbmNvbWU9bWVhbihUb3RhbF9JbmNvbWUpKSAlPiUgIGFycmFuZ2UoZGVzYyhTdW1fcGVyX3NhbXBsZSkpDQpgYGANClRoZXJlIGlzIG5vdGhpbmcgbXVjaCBvZiBhIGRpZmZlcmVuY2UgaW4gYXZlcmFnZSBpbmNvbWUgZm9yIGFsbCBwYXJ0aWNpcGFudHMgaW4gdGhlIHNhbXBsZSBkYXRhLCBob3dldmVyIGZvciB0aG9zZSBpbnRvIGVudHJlcHJlbmV1cmlhbCBhY3Rpdml0aWVzLCBoYXZlIGdyZWF0ZXIgcG90ZW50aWFsIG9mIG1pbGxpb24gZWFybmluZ3MuIA0KDQpgYGB7cn0NCnI3aG91c2Vob3VsZCAlPiUgZmlsdGVyKFRvdGFsX0luY29tZT4xMDAwMDAwKSAlPiUgIGdyb3VwX2J5KE1haW5fSW5jb21lKSAlPiUgc3VtbWFyaXNlKFN1bV9wZXJfc2FtcGxlPWxlbmd0aChNYWluX0luY29tZSksIHBlcmNlbnRfU3VtbWFyeT1mb3JtYXRDKFN1bV9wZXJfc2FtcGxlL2xlbmd0aChyN2hvdXNlaG91bGQkUmVnaW9uKSoxMDApLGF2Z19pbmNvbWU9bWVhbihUb3RhbF9JbmNvbWUpKSAlPiUgIGFycmFuZ2UoZGVzYyhTdW1fcGVyX3NhbXBsZSkpDQpgYGANCkFuZCBzcGVha2luZyBvZiBtaWxsaW9uIGVhcm5pbmdzLCBqdXN0IGZvciB0aGUga2ljaywgaSBoYXZlIGR1ZyBpbiBhIGJpdCBhbmQgdGhlIHJhdGlvIGZvciB0aGUgcGFydGljaXBhbnRzIHJlbGF0aXZlIHRvIGhhdmluZyBhbiBpbmNvbWUgb2YgPjEwMDAwMDAgd2Ugc2VlIHRoYXQgaXQgaXMgcG9zc2libGUgaG93ZXZlciB0aGUgY2hhbmNlcyBhcmUgc2xpbSBpbiBhbGwgZ3JvdXBzIG9mIGluY29tZSBzb3VyY2UuDQoNCg0KSU5DT01FIFZTIE1BUklUQUwgU1RBVFVTDQoNCmBgYHtyfQ0Kcjdob3VzZWhvdWxkICU+JSBnZ3Bsb3QoYWVzKE1hcml0YWxfU3RhdHVzKSkgKyBnZW9tX2JhcigpICsgZ2d0aXRsZSgiUGFydGljaXBhbnRzIGJ5IE1hcml0YWwgc3RhdHVzIikNCmBgYA0KTWFqb3JpdHkgb2Ygb3VyIHBhcnRpY2lwYW50cyBhcmUgaW4gdGhlIE1hcnJpZWQgZ3JvdXAgYW5kIG1haW5seSBoYXZpbmcgdGhhdCBsYXJnZSBzYW1wbGUgc2l6ZSBtZWFucyBvdXIgYW5hbHlzaXMgd2lsbCBiZSBjbG9zZXIgdG8gdGhlIHJlYWxpc3RpYyBhbmFseXNpcyBmb3IgbWFycmllZCBncm91cCByZWdhcmRsZXNzIG9mIGVkdWNhdGlvbiwgaW5jb21lIGFuZCBvdGhlciByZWxhdGlvbmFsIGFuYWx5c2lzIGluIHRoaXMgc3R1ZHkNCg0KYGBge3J9DQpyN2hvdXNlaG91bGQgJT4lIGdncGxvdChhZXMoSGVhZF9BZ2UsIFRvdGFsX0luY29tZSwgY29sb3I9TWFyaXRhbF9TdGF0dXMpKSArIGdlb21faml0dGVyKCkgKyBzY2FsZV95X2NvbnRpbnVvdXModHJhbnMgPSAibG9nMTAiLCBsYWJlbHM9c2NhbGVzOjpjb21tYSkgKyB5bGFiKCJpbmNvbWUgaW4gcGhwIikgKyBnZ3RpdGxlKCJJbmNvbWUgYnkgTWFyaXRhbCBTdGF0dXMgb2YgUGFydGljaXBhbnRzIikNCmBgYA0KTWFycmllZCBncm91cCBwcm92ZXMgdG8gYmUgbW9yZSBhY3RpdmUgaW4gaGlnaGVyIGluY29tZSBnZW5lcmF0aW9uIHN1cnBhc3NpbmcgdGhlIG1pbGxpb24gbWFyayBpbmNvbWUuIGFsdGhvdWdoIG92ZXJhbGwsIHJlZ2FyZGxlc3Mgb2YgbWFyaXRhbCBzdGF0dXMsIHdlIGFyZSBzZWVpbmcgYSB3aWRlIHNwcmVhZCBvZiBpbmNvbWUgcmFuZ2UuIE1hcnJpZWQgZ3JvdXAgY29udGludWVzIHRvIGJlIGFjdGl2ZSBpbmNvbWUgZWFybmVycyB0aHJvdWdoIHRpbWUgZnJvbSAzMC02MHlvLCBhbmQgdGhlIHdpZG93ZWQgZnJvbSA2MCBvbiB3YXJkcy4gDQoNCg0KT3ZlcmFsbCBvdXIgdGFrZWF3YXlzIGZvciB0aGlzIGFuYWx5c2lzIG9mIGhvdXNlaG9sZCBpbmNvbWUgaW4gQ2VudHJhbCBWaXNheWFzIGFyZToNCg0KMS4gRWR1Y2F0aW9uIHBsYXlzIGEgaHVnZSBwYXJ0IGluIGFsbGV2aWF0aW5nIGxvdyBpbmNvbWUvc2FsYXJ5IA0KDQoyLiBNYWpvcml0eSBvZiB0aGUgaG91c2Vob2xkIGhlYWQgZWFybmVycyBvZiB0aGUgc2FtcGxlIGNvbXByaXNlcyBvZiBpbmRpdmlkdWFscyB3aG8gaGF2ZSBub3QgZXZlbiBjb21wbGV0ZWQgdGhlaXIgZWxlbWVudGFyeSBlZHVjYXRpb24gbGV2ZWwgb3IgMzIlIG9mIHRoZSBzYW1wbGUgc2l6ZS4NCg0KMy4gVEhlIGF2ZXJhZ2UgaW5jb21lIGZvciBDZW50cmFsIFZpc2F5YXMgaXMgUGhwIDIzNCw5MDkuMy4gUmVnYXJkbGVzcyBvZiBvbmUncyBpbmNvbWUgc291cmNlLCBpdCBzdGlsbCBhdmVyYWdlcyAyMzAsMDAwLTI0NSwwMDANCg0KNC4gVGhlIGFjdGl2ZSBhZ2Ugb2YgdGhlIHBhcnRpY2lwYW50cyBpbiB3YWdlL3NhbGFyaWVzIGFyZSAzMCAtIDYweW8NCg0KNS4gVGhlcmUgaXMgYSBzbGltIGNoYW5jZSBvZiByZWFjaGluZyB0aGUgbWlsbGlvbiBwZXNvIGluY29tZSBtYXJrIGhvd2V2ZXIsIG1vc3Qgd2hvIGhhdmUgcmVhY2hlZCB0aGUgbWlsbGlvbiBhcmUgd2FnZS9zYWxhcnkgZWFybmVycyBob3dldmVyIHRoZSBoaWdoZXIgYXZlcmFnZSBhcmUgdGhvc2UgaW4gZW50cmVwcmVuZXVyaWFsIGFjdGl2aXRpZXMNCg0KDQoNCg0KQU5OVUFMIEZPT0QgU1BFTkRJTkcgT0YgUEFSVElDSVBBTlRTIEJZIElOQ09NRSBTT1VSQ0UNCmBgYHtyfQ0Kc3BlbmRpbmcgPC0gcjdob3VzZWhvdWxkICU+JSBncm91cF9ieShNYWluX0luY29tZSkgJT4lIHN1bW1hcmlzZShIb3VzZWhvbGQ9bGVuZ3RoKE1haW5fSW5jb21lKSwgQnJlYWRfU3BlbmRpbmc9c3VtKEJyZWFkX0V4cGVuZGl0dXJlKSwgTWVhdF9zcGVuZGluZz1zdW0oTWVhdF9FeHBlbmRpdHVyZSksVmVnZ2llX1NwZW5kaW5nPXN1bShWZWdldGFibGVzX0V4cGVuZGl0dXJlKSwgRnJ1aXRfU3BlbmRpbmc9c3VtKEZydWl0X0V4cGVuZGl0dXJlKSkNCnNwZW5kaW5nDQpgYGANCg0KQVZFUkFHRSBBTk5VQUwgU1BFTkRJTkcgUEVSIElOQ09NRSBTT1VSQ0UNCmBgYHtyfQ0Kcjdob3VzZWhvdWxkICU+JSBncm91cF9ieShNYWluX0luY29tZSkgJT4lIHN1bW1hcmlzZShIb3VzZWhvbGQ9bGVuZ3RoKE1haW5fSW5jb21lKSwgQnJlYWRfU3BlbmRpbmc9c3VtKEJyZWFkX0V4cGVuZGl0dXJlKS9Ib3VzZWhvbGQsIE1lYXRfc3BlbmRpbmc9c3VtKE1lYXRfRXhwZW5kaXR1cmUpL0hvdXNlaG9sZCxWZWdnaWVfU3BlbmRpbmc9c3VtKFZlZ2V0YWJsZXNfRXhwZW5kaXR1cmUpL0hvdXNlaG9sZCwgRnJ1aXRfU3BlbmRpbmc9c3VtKEZydWl0X0V4cGVuZGl0dXJlKS9Ib3VzZWhvbGQpDQoNCmBgYA0KDQpBTk5VQUwgRk9PRCBTUEVORElORyBQRVIgSU5DT01FIFNPVVJDRSBieSBXRUVLTFkgU1BFTkRJTkcNCmBgYHtyfQ0Kcjdob3VzZWhvdWxkICU+JSBncm91cF9ieShNYWluX0luY29tZSkgJT4lIHN1bW1hcmlzZShIb3VzZWhvbGQ9bGVuZ3RoKE1haW5fSW5jb21lKSwgQnJlYWRfU3BlbmRpbmc9c3VtKEJyZWFkX0V4cGVuZGl0dXJlKS9Ib3VzZWhvbGQvNTIsIE1lYXRfc3BlbmRpbmc9c3VtKE1lYXRfRXhwZW5kaXR1cmUpL0hvdXNlaG9sZC81MixWZWdnaWVfU3BlbmRpbmc9c3VtKFZlZ2V0YWJsZXNfRXhwZW5kaXR1cmUpL0hvdXNlaG9sZC81MiwgRnJ1aXRfU3BlbmRpbmc9c3VtKEZydWl0X0V4cGVuZGl0dXJlKS9Ib3VzZWhvbGQvNTIpDQoNCmBgYA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K