3. Lập bảng tần số, tần suất để mô tả
3.1.Bảng tần số của giới tính và loại sản phẩm
- Bảng tần số của giới tính và loại sản phảm để xem có sự chênh lệch
giữa nam và nữ khi chọn một loại sản phẩm nào đó không.
frequency <- table(df$gender, df$category)
frequency
##
## Books Clothing Cosmetics Food & Beverage Shoes Souvenir Technology
## Female 2906 20652 9070 8804 5967 3017 2981
## Male 2075 13835 6027 5972 4067 1982 2015
##
## Toys
## Female 6085
## Male 4002
addmargins(frequency)
##
## Books Clothing Cosmetics Food & Beverage Shoes Souvenir Technology
## Female 2906 20652 9070 8804 5967 3017 2981
## Male 2075 13835 6027 5972 4067 1982 2015
## Sum 4981 34487 15097 14776 10034 4999 4996
##
## Toys Sum
## Female 6085 59482
## Male 4002 39975
## Sum 10087 99457
Nhìn sơ qua thì ta có thể thấy ở tất cả phân loại sản phẩm, số lượng
mua hàng của nữ nhiều hơn số lượng mua hàng của nam (Biểu đồ thể
hiện sự chênh lệch giữa nam và nữ và các loại sản phẩm thể hiện ở hình
4.1)
Bảng tần suất của sản phẩm
- Lập bảng tần suất để xem mặt hàng nào được bán chạy nhất và mặt hàng
nào ít bán chạy nhất
frequenproduct <- table(df$category)
percentfrequency <- prop.table(frequenproduct)
percentfrequency
##
## Books Clothing Cosmetics Food & Beverage Shoes
## 0.05008194 0.34675287 0.15179424 0.14856672 0.10088782
## Souvenir Technology Toys
## 0.05026293 0.05023276 0.10142071
min(percentfrequency)
## [1] 0.05008194
max(percentfrequency)
## [1] 0.3467529
- Sản phẩm có số bán ra ít nhất có tần số xuất hiện là 0.05008194
- Sản phẩm có số bán ra nhiều nhất có tần số xuất hiện là
0.3467529
3.2.Bảng tần số của giới tính và ngành hàng
- Bảng tần số của giới tính và ngành hàng để xem có sự chênh lệch giữa
nam và nữ khi chọn mua một loại hàng không
frequencyindustry <- table(df$gender, df$industry)
frequencyindustry
##
## F&B FMCG
## Female 8804 50678
## Male 5972 34003
addmargins(frequencyindustry)
##
## F&B FMCG Sum
## Female 8804 50678 59482
## Male 5972 34003 39975
## Sum 14776 84681 99457
Kết quả cho ta thấy ở cả hai ngành hàng F$B và FMCG, tỷ lệ mua
hàng của nữ lớn hơn tỷ lệ mua hàng của nam rất nhiều. (Đồ thị thể
hiện sự chênh lệch này nằm ở hình 3.2 )
Trong ngành hàng F&B, tỷ lệ khách hàng là nam so với tỷ lệ
khách hàng là nữ là: \(\frac{5972}{8804}\). Cho thấy tỷ lệ nữ mua
hàng ở ngành hàng này chiếm gần 68% so với tổng khách hàng
Trong ngành hàng FMCG, tỷ lệ khách hàng là nam so với tỷ lệ khách
hàng là nữ là: \(\frac{34003}{50678}\).
Cho thấy tỷ lệ nữ mua hàng ở ngành hàng này chiếm hơn 67% so với tổng
khách hàng
3.3.Bảng tần số của độ tuổi và ngành hàng tiêu dùng
- Bảng tần số của độ tuổi và ngành hàng tiêu dùng để xem rằng giữa
người già và người trẻ có sự chọn lựa khác nhau trong các ngành hàng
tiêu dùng khác nhau hay không
frequencyage <- table(df$age, df$industry)
frequencyage
##
## F&B FMCG
## Young 9430 53926
## Old 5346 30755
addmargins(frequencyage)
##
## F&B FMCG Sum
## Young 9430 53926 63356
## Old 5346 30755 36101
## Sum 14776 84681 99457
Kết quả cho ta thấy ở cả hai ngành hàng F$B và FMCG, tỷ lệ mua
hàng của người trể lớn hơn tỷ lệ mua hàng của người già rất nhiều.
(Đồ thị thể hiện sự chênh lệch này nằm ở hình 3.3 )
Trong ngành hàng F&B, tỷ lệ khách hàng là người trẻ so với tỷ
lệ khách hàng là người già là: \(\frac{9430}{5346}\). Cho thấy tỷ lệ người
trẻ mua hàng ở ngành hàng này chiếm gần 64% so với tổng khách
hàng
Trong ngành hàng FMCG, tỷ lệ khách hàng là người trẻ so với tỷ lệ
khách hàng là người già là: \(\frac{53926}{30755}\). Cho thấy tỷ lệ người
trẻ mua hàng ở ngành hàng này chiếm gần 64% so với tổng khách
hàng
3.4.Bảng tần số của độ tuổi và phương thức thanh toán
- Bảng tần số của độ tuổi để xem độ tuổi ảnh hưởng như thế nào đến
việc lựa chọn phương thức thanh toán
frequencypayment <- table(df$age, df$payment_method)
frequencypayment
##
## Cash Credit Card Debit Card
## Young 28259 22256 12841
## Old 16188 12675 7238
addmargins(frequencypayment)
##
## Cash Credit Card Debit Card Sum
## Young 28259 22256 12841 63356
## Old 16188 12675 7238 36101
## Sum 44447 34931 20079 99457
Kết quả cho ta thấy ở cả hai phương thức thanh toán, tỷ lệ mua
hàng của người trể lớn hơn tỷ lệ mua hàng của người già rất nhiều.
(Đồ thị thể hiện sự chênh lệch này nằm ở hình 3.4 )
Trong phương thức trả bằng tiền mặt, tỷ lệ khách hàng là người
trẻ so với tỷ lệ khách hàng là người già là: \(\frac{28259}{16188}\). Cho thấy tỷ lệ người
trẻ mua hàng ở ngành hàng này gấp 1,74 lần so với người già
Trong ngành hàng FMCG, tỷ lệ khách hàng là người trẻ so với tỷ lệ
khách hàng là người già là: \(\frac{35097}{
19913}\). Cho thấy tỷ lệ người trẻ mua hàng ở ngành hàng này gấp
1,76 lần so với người già
3.5.Bảng tần số của độ tuổi, ngành hàng và phương thức thanh
toán
frequency3a <- table(df$age, df$industry,df$payment_method)
frequency3a
## , , = Cash
##
##
## F&B FMCG
## Young 4182 24077
## Old 2405 13783
##
## , , = Credit Card
##
##
## F&B FMCG
## Young 3367 18889
## Old 1883 10792
##
## , , = Debit Card
##
##
## F&B FMCG
## Young 1881 10960
## Old 1058 6180
addmargins(frequency3a)
## , , = Cash
##
##
## F&B FMCG Sum
## Young 4182 24077 28259
## Old 2405 13783 16188
## Sum 6587 37860 44447
##
## , , = Credit Card
##
##
## F&B FMCG Sum
## Young 3367 18889 22256
## Old 1883 10792 12675
## Sum 5250 29681 34931
##
## , , = Debit Card
##
##
## F&B FMCG Sum
## Young 1881 10960 12841
## Old 1058 6180 7238
## Sum 2939 17140 20079
##
## , , = Sum
##
##
## F&B FMCG Sum
## Young 9430 53926 63356
## Old 5346 30755 36101
## Sum 14776 84681 99457
- Cho dù phân loại tần số lựa chọn ngành hàng sản phẩm ứng với phân
khúc độ tuổi theo 2 loại hình thức thanh toán thì tỷ lệ lựa chọn ngàng
hàng sử dụng giữa nam và nữ cũng không thay đổi.
4. Biểu đồ
4.1. Gender and Category
Biểu đồ thể hiện số lượng mua từng loại sản phẩm được chia
theo 2 giới tính
library(ggplot2)
ggplot(df, aes(gender, fill = category)) + geom_bar(position = 'dodge') + labs(x = "Gender", y = "Count of Category")

Nhìn vào đồ thị cũng dễ dàng nhìn thấy, số lượng mua hàng của Nữ ở
tất cả phân loại sản phẩm đều lớn hơn nam, tuy nhiên để đánh giá xem sự
chênh lệch từ biểu đồ vẽ ra có đáng tin cậy không thì ta dùng
Hypothetics test ước lượng tỷ lệ để đánh giá xem có sự khác nhau về cách
lựa chọn sản phẩm của 2 giới tính không.
Biểu đồ thể hiện số lượng mua từng sản phẩm của khách
hàng
ggplot(df, aes(category)) + geom_bar(position = 'dodge') + labs(x= "Category", y= "Count of invoice")

- Clothing là sản phẩm được tiêu thụ nhiều nhất. Nhìn vào đồ thị ta
khó phân biệt được Books, Souvenir hay Technology là sản phẩm tiêu thụ
ít nhất. Phần 5.1 sẽ dùng Hypothetics test để xem thử sản phẩm nào có
tần suất xuất hiện ít nhất.
4.2. Gender and Industry
Biểu đồ thể hiện số lượng mua từng loại ngành hàng được chia
theo 2 giới tính
ggplot(df, aes(gender, fill = industry)) + geom_bar(position = 'dodge') + labs(x = "Gender", y = "Count of industry")

4.3. Age and Industry
Biểu đồ thể hiện số lượng mua từng loại ngành hàng được chia
theo 2 độ tuổi
ggplot(df, aes(age, fill = industry)) + geom_bar(position = 'dodge') + labs(x = "Age", y = "Count of industry")

4.4. Age and Payment_method
Biểu đồ thể hiện số khách hàng lựa chọn từng phương thức
thanh toán được chia theo 2 độ tuổi
ggplot(df, aes(age, fill = payment_method)) + geom_bar(position = 'dodge') + labs(x = "Age", y = "Count of invoice")

5.Ước lượng tỷ lệ
Ước lượng tỷ lệ của từng sản phẩm
Nhìn vào đồ thị thể hiện số lượng mua hàng của từng sản phẩm, ta thấy
Books là sản phẩm ít bán chạy nhất. Ta đặt ra câu hỏi là có chắc chắn
Books là loại sản phẩm có số lượng mua hàng ít nhất không? Ước lượng tỷ
lệ người mua sản phẩm là Books đồng thời kiểm định xem tỷ lệ (%) người
mua Books có phải là 5% không (5% là tần sô của sản phẩm được bán ra ít
nhất)? Chúng ta tiến hành kiểm định giả thuyết \(H_0=0,05\)
books <- df[df$category == "Books",]
prop.test(length(books$category), length(books$category), p = 0.05)
##
## 1-sample proportions test with continuity correction
##
## data: length(books$category) out of length(books$category), null probability 0.05
## X-squared = 94619, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.05
## 95 percent confidence interval:
## 0.9990392 1.0000000
## sample estimates:
## p
## 1
Kết quả cho ta thấy giá trị P-value < mức ý nghĩa 0.05. Ta bác bỏ
H0, tức là tỷ lệ mua sản phẩm Books của khách hàng không phải là
0.05%.
- Nhìn vào đồ thị, ta thấy Clothing là sản phẩm bán chạy nhất. Ta đặt
ra câu hỏi là có chắc chắn Clothing là loại sản phẩm có số lượng mua
hàng nhiều nhất không? Ước lượng tỷ lệ người mua sản phẩm là Clothings
đồng thời kiểm định xem tỷ lệ (%) người mua Clothing có phải là 35%
không (35% là tấn số của sản phẩm được bán chạy nhất)? Chúng ta tiến
hành kiểm định giả thuyết \(H_0=0.35\)
Clothings <- df[df$category == "Clothing",]
prop.test(length(Clothings$category), length(Clothings$category), p = 0.35)
##
## 1-sample proportions test with continuity correction
##
## data: length(Clothings$category) out of length(Clothings$category), null probability 0.35
## X-squared = 64044, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.35
## 95 percent confidence interval:
## 0.9998611 1.0000000
## sample estimates:
## p
## 1
Giá trị P-value trả về rất bé, nhỏ hơn mức ý nghĩa 0.05 nên ta bác bỏ
H0, vậy tỷ lệ mua sản phẩm Clothings không phải là 35%.
Ước lượng chênh lệch tỷ lệ của từng sản phẩm đối với từng
phân khúc khách hàng
1. Ước lượng sự chênh lệch về tỷ lệ mua Books giữa nam và
nữ.
Đặt giả thuyết \(H_0\): Tỷ lệ mua
Books của nam và nữ là bằng nhau
Male <- df[df$gender == "Male",]
Female <- df[df$gender == "Female",]
Malerate <- Male[Male$category == "Books",]
Femalerate <- Female[Female$category == "Books",]
genderate <- c(nrow(Male), nrow(Male))
categoryrate <- c(nrow(Malerate), nrow(Femalerate))
prop.test(categoryrate,genderate)
##
## 2-sample test for equality of proportions with continuity correction
##
## data: categoryrate out of genderate
## X-squared = 147.49, df = 1, p-value < 2.2e-16
## alternative hypothesis: two.sided
## 95 percent confidence interval:
## -0.02416072 -0.01741527
## sample estimates:
## prop 1 prop 2
## 0.05190744 0.07269543
Kết quả P_value rất nhỏ, ta bác bỏ H0. Cho thấy có sự khác biệt giữa
tỷ lệ nam mua Books và nữ mua Books. Ngoài ra, khoảng tin cậy cho tỷ lệ
mua books của hai giới tính này là (-0.02416072,-0.01741527), không bao
gồm số 0, cho thấy giữa 2 tỷ lệ này có một sự chênh lệch đáng kể. Tỷ lệ
của nhóm thứ nhất là 0.05190744, tỷ lệ của nhóm thứ 2 là 0.07269543.
2.Ước lượng sự chênh lệch về tỷ lệ mua Clothings giữa nam và
nữ.
Đặt giả thuyết \(H_0\): Tỷ lệ mua
Clothings của nam và nữ là bằng nhau
Male <- df[df$gender == "Male",]
Female <- df[df$gender == "Female",]
Malerate <- Male[Male$category == "Clothing",]
Femalerate <- Female[Female$category == "Clothing",]
genderate <- c(nrow(Male), nrow(Male))
categoryrate <- c(nrow(Malerate), nrow(Femalerate))
prop.test(categoryrate,genderate)
##
## 2-sample test for equality of proportions with continuity correction
##
## data: categoryrate out of genderate
## X-squared = 2369, df = 1, p-value < 2.2e-16
## alternative hypothesis: two.sided
## 95 percent confidence interval:
## -0.1773201 -0.1637430
## sample estimates:
## prop 1 prop 2
## 0.3460913 0.5166229
Kết quả P_value rất nhỏ, ta bác bỏ H0. Cho thấy có sự khác biệt giữa
tỷ lệ nam mua Clothings và nữ mua Clothings. Ngoài ra, khoảng tin cậy
cho tỷ lệ mua Clothings của hai giới tính này là (-0.1773201,
-0.1637430), không bao gồm số 0, cho thấy giữa 2 tỷ lệ này có một sự
chênh lệch đáng kể. Tỷ lệ của nhóm thứ nhất là 0.3460913, tỷ lệ của nhóm
thứ 2 là 0.5166229.
6. Relative Risk/ Odd Ratio
6.1. Gender and Payment_method
Relative Risk
df$payment_method[df$payment_method == "Debit Card"] <- "Credit Card"
paymentfrequency <- table(df$gender, df$payment_method)
addmargins(paymentfrequency)
##
## Cash Credit Card Sum
## Female 26509 32973 59482
## Male 17938 22037 39975
## Sum 44447 55010 99457
RelRisk(paymentfrequency) #Relrisk tính ở vị trí 11 so với 21 (biến thành công là cột thứ 1)
## [1] 0.9931669
riskratio(paymentfrequency)
## $data
##
## Cash Credit Card Total
## Female 26509 32973 59482
## Male 17938 22037 39975
## Total 44447 55010 99457
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## Female 1.0000000 NA NA
## Male 0.9944687 0.9831882 1.005879
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Female NA NA NA
## Male 0.3402943 0.3423102 0.3402862
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
- Rủi ro tương đối của nam chọn Cash làm phương thức thanh toán so với
nữ chọn Cash làm phương thức thanh toán là 1.00688. Kết quả này lớn hơn
1, nghĩa là Nam sẽ có nguy cơ chọn Cash là phương thức thanh toán hơn
nữ
- Kết quả trên cho thấy rủi ro tương đối của nữ chọn Credit Card làm
phương thức thanh toán so với nam chọn credit card làm phương thức thanh
toán là 1.005562. Kết quả này cũng lớn hơn 1, cho thấy nữ có nguy cơ
chọn Credit Card làm phương thức thanh toán hơn Nam.
Odd Ratio
- Tỷ lệ nam và nữ giữa xác suất “sử dụng Cash” và xác suất “không sử
dụng Cash”
oddsratio(paymentfrequency)
## $data
##
## Cash Credit Card Total
## Female 26509 32973 59482
## Male 17938 22037 39975
## Total 44447 55010 99457
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## Female 1.0000000 NA NA
## Male 0.9876839 0.9628148 1.013201
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Female NA NA NA
## Male 0.3402943 0.3423102 0.3402862
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
- Tỷ lệ Nam sử dụng Cash làm phương thức thanh toán so với nữ sử dụng
cash làm phương thức thanh toán là 1.01246, giá trị này lớn hơn 1 tức là
nam sẽ có nguy cơ sử dụng cash làm phương thức thanh toán hơn nữ.
6.2. Gender and Industry
Relative Risk
addmargins(frequencyindustry)
##
## F&B FMCG Sum
## Female 8804 50678 59482
## Male 5972 34003 39975
## Sum 14776 84681 99457
RelRisk(frequencyindustry)
## [1] 0.9907479
riskratio(frequencyindustry)
## $data
##
## F&B FMCG Total
## Female 8804 50678 59482
## Male 5972 34003 39975
## Total 14776 84681 99457
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## Female 1.0000000 NA NA
## Male 0.9983777 0.9930996 1.003684
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Female NA NA NA
## Male 0.5477424 0.5484646 0.5479025
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
- Rủi ro tương đối của nữ chọn F&B là ngành hàng tiêu dùng với nam
chọn F&B là ngành hàng tiêu dùng là 0.9907479. Giá trị này bé hơn 1,
thể hiện nữ sẽ ít chọn F&B là ngành hàng tiêu dùng hơn nam.
- Rủi ro tương đối giữa nam chọn FMCG là ngành hàng tiêu dùng và nữ
chọn FMCG là ngành hàng tiêu dùng là 0.9983777, giá trị này bé hơn 1,
thể hiện nam sẽ ít chọn FMCG là ngành hàng tiêu dùng hơn nữ.
Odd Ratio
oddsratio(frequencyindustry)
## $data
##
## F&B FMCG Total
## Female 8804 50678 59482
## Male 5972 34003 39975
## Total 14776 84681 99457
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## Female 1.0000000 NA NA
## Male 0.9891338 0.9545528 1.025001
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Female NA NA NA
## Male 0.5477424 0.5484646 0.5479025
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
- Xác xuất của nữ chọn ngành hàng F&B là 0.9891338, giá trị này
nhỏ hơn 1 cũng thể hiện nữ ít chọn ngành hàng F&B hơn so với
nam.
6.3. Age and Industry
Relative Risk
addmargins(frequencyage)
##
## F&B FMCG Sum
## Young 9430 53926 63356
## Old 5346 30755 36101
## Sum 14776 84681 99457
RelRisk(frequencyage)
## [1] 1.005111
riskratio(frequencyage)
## $data
##
## F&B FMCG Total
## Young 9430 53926 63356
## Old 5346 30755 36101
## Total 14776 84681 99457
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## Young 1.000000 NA NA
## Old 1.000889 0.9955046 1.006303
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Young NA NA NA
## Old 0.7473071 0.752617 0.7468917
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
- Giá trị Relrisk = 1.005111 lớn hơn 1 thể hiện xác xuất người trẻ
chọn ngành hàng F&B nhiều hơn người già chọn ngành hàng F&B
- Giá trị Risratio = 1.000889 lớn hơn 1 thể hiện xác xuất người già
chọn ngành hàng FMCG nhiều hơn người trẻ chọn ngành hàng FMCG
Odd Ratio
oddsratio(frequencyage)
## $data
##
## F&B FMCG Total
## Young 9430 53926 63356
## Old 5346 30755 36101
## Total 14776 84681 99457
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## Young 1.000000 NA NA
## Old 1.005994 0.9700925 1.043272
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Young NA NA NA
## Old 0.7473071 0.752617 0.7468917
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
- Giá trị 1.005994 lớn hơn 1 cho thấy, ở ngành hàng F&B, người trẻ
sẽ có nhu cầu nhiều hơn người già
8. Hồi quy
Xây dựng mô hình hồi quy
1.Giả sử ở trong biến Gender, thuộc tính gọi là thành công khi
kết quả trả về là Male(Nam)
gender <- factor(df$gender)
levels(gender) #Vì thuộc tính thứ 2 là Male nên Male được gọi là "thành công"
## [1] "Female" "Male"
fitted <- glm(factor(gender) ~ category, family = binomial(link = 'logit'), data = df)
summary(fitted)
##
## Call:
## glm(formula = factor(gender) ~ category, family = binomial(link = "logit"),
## data = df)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.33682 0.02874 -11.719 <2e-16 ***
## categoryClothing -0.06379 0.03077 -2.073 0.0381 *
## categoryCosmetics -0.07191 0.03320 -2.166 0.0303 *
## categoryFood & Beverage -0.05131 0.03327 -1.542 0.1231
## categoryShoes -0.04652 0.03521 -1.321 0.1864
## categorySouvenir -0.08334 0.04077 -2.044 0.0409 *
## categoryTechnology -0.05482 0.04072 -1.346 0.1781
## categoryToys -0.08222 0.03522 -2.335 0.0196 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 134026 on 99456 degrees of freedom
## Residual deviance: 134018 on 99449 degrees of freedom
## AIC: 134034
##
## Number of Fisher Scoring iterations: 4
- Đọc kết quả P_value. Mô hình hồi quy trên giải thích rằng các sản
phẩm categoryClothing, categoryCosmetics, categorySouvenir, categoryToys
sẽ ảnh hưởng lên phân khúc khách hàng là Nam.
2.Giả sử ở trong biến Gender, thuộc tính gọi là thành công khi
kết quả trả về là Male(Nam)
df$gender <- factor(df$gender, levels = c("Male","Female"))
gender <- factor(df$gender)
levels(gender) #Đổi lại thuộc tính thứ 2 là Female nên Female được gọi là "thành công"
## [1] "Male" "Female"
fitted <- glm(factor(gender) ~ category, family = binomial(link = 'logit'), data = df)
summary(fitted)
##
## Call:
## glm(formula = factor(gender) ~ category, family = binomial(link = "logit"),
## data = df)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 0.33682 0.02874 11.719 <2e-16 ***
## categoryClothing 0.06379 0.03077 2.073 0.0381 *
## categoryCosmetics 0.07191 0.03320 2.166 0.0303 *
## categoryFood & Beverage 0.05131 0.03327 1.542 0.1231
## categoryShoes 0.04652 0.03521 1.321 0.1864
## categorySouvenir 0.08334 0.04077 2.044 0.0409 *
## categoryTechnology 0.05482 0.04072 1.346 0.1781
## categoryToys 0.08222 0.03522 2.335 0.0196 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 134026 on 99456 degrees of freedom
## Residual deviance: 134018 on 99449 degrees of freedom
## AIC: 134034
##
## Number of Fisher Scoring iterations: 4
- Đọc kết quả P_value. Mô hình hồi quy trên cũng giải thích rằng các
sản phẩm categoryClothing,categoryCosmetics, categorySouvenir,
categoryToys sẽ ảnh hưởng lên phân khúc khách hàng là Nữ.
LS0tDQp0aXRsZTogIkJhaXRhcGJ1b2kxIg0KYXV0aG9yOiAiTmd1eWVuQmluaFBodW9uZ1V5ZW4iDQpkYXRlOiAiMjAyNC0wNi0wMiINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0b2M6IFRSVUUNCiAgICB0b2NfZmxvYXQ6IFRSVUUNCiAgICBkZl9wcmludDogcGFnZWQNCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlDQogICAgY29kZV9mb2xkaW5nOiBoaWRlDQogIHBkZl9kb2N1bWVudDoNCiAgICBleHRyYV9kZXBlbmRlbmNpZXM6DQogICAgICB2aWV0bmFtOiB1dGY4DQogICAgdG9jOiB5ZXMNCiAgICBudW1iZXJfc2VjdGlvbnM6IHllcw0KICB3b3JkX2RvY3VtZW50Og0KICAgIHRvYzogeWVzDQogICAgbnVtYmVyX3NlY3Rpb25zOiB5ZXMNCmdlb21ldHJ5Og0KICAgICAgLSBpbm5lcj0zY20NCiAgICAgIC0gb3V0ZXI9NGNtDQogICAgICAtIHRvcD0zY20NCiAgICAgIC0gYm90dG9tPTRjbQ0KICAgICAgLSBoZWFkc2VwPTIycHQNCiAgICAgIC0gaGVhZGhlaWdodD0xMXB0DQogICAgICAtIGZvb3Rza2lwPTMzcHQNCiAgICAgIC0gaWdub3JlaGVhZA0KICAgICAgLSBpZ25vcmVmb290DQogICAgICAtIGhlaWdodHJvdW5kZWQNCmVkaXRvcl9vcHRpb25zOiANCiAgbWFya2Rvd246IA0KICAgIHdyYXA6IDcyDQotLS0NCg0KDQojIyAxLkdp4bubaSB0aGnhu4d1IHbhu4EgYuG7mSBk4buvIGxp4buHdSB2w6AgxJHhurd0IHbhuqVuIMSR4buBDQojIyMgMS4xLiBNw7QgdOG6oyBi4buZIGThu68gbGnhu4d1DQoNCkLhu5kgZOG7ryBsaeG7h3UgY2jhu6lhIHRow7RuZyB0aW4gbXVhIHPhuq9tIGPhu6dhIDEwIGPhu61hIGjDoG5nIOG7nyBJc3RhbmJ1bCB0cm9uZyBnaWFpIMSRb+G6oW4gdOG7qyAyMDIxIMSR4bq/biAyMDIzLCDEkcaw4bujYyB04buVbmcgaOG7o3AgZOG7sWEgdHLDqm4gcGjDom4ga2jDumMgxJHhu5kgdHXhu5VpIHbDoCBnaeG7m2kgdMOtbmggxJHhu4MgeGVtIGjDoG5oIHZpIG11YSBz4bqvbSBj4bunYSBraMOhY2ggaMOgbmcuIFRow7RuZyB0aW4gdGh1IHRo4bqtcCDEkcaw4bujYyBn4buTbSAxMCBiaeG6v246DQoNCi0gaW52b2ljZV9ubzogSUQgY+G7p2EgxJHGoW4gaMOgbmcNCg0KLSBjdXN0b21lcl9pZDogSUQgY+G7p2Ega2jDoWNoIGjDoG5nDQoNCi0gR2VuZGVyOiBnaeG7m2kgdMOtbmgga2jDoWNoIGjDoG5nDQoNCi0gQWdlOiDEkOG7mSB0deG7lWkNCg0KLSBDYXRlZ29yeTogUGjDom4gbG/huqFpIHPhuqNuIHBo4bqpbSANCg0KLSBRdWFudGl0eTogU+G7kSBsxrDhu6NuZyBow6BuZyBtdWENCg0KLSBQcmljZTogR2nDoSBow6BuZyBiw6FuDQoNCi0gUGF5bWVudF9tZXRob2Q6IEjDrG5oIHRo4bupYyB0aGFuaCB0b8Ohbg0KDQotIGludm9pY2VfZGF0ZTogTmfDoHkgbXVhIGjDoG5nDQoNCi0gc2hvcHBpbmdfbWFsbDogVMOqbiBj4butYSBow6BuZw0KDQotIGluZHVzdHJ5OiBuZ8OgbmggaMOgbmcgKCB0acOqdSBkw7luZyBuaGFuaCBoYXkgdGjhu6ljIMSDbiBuaGFuaCkNCg0KIyMjIDEuMi4gxJDhurd0IHbhuqVuIMSR4buBDQoNCioqxq/hu5tjIGzGsOG7o25nIDIgYmnhur9uKioNCg0KLSBHaeG7m2kgdMOtbmggY8OzbMOgbSDhuqNuaCBoxrDhu59uZyDEkeG6v24gdmnhu4djIGtow6FjaCBow6BuZyBs4buxYSBjaOG7jW4gbXVhIG3hu5l0IGxv4bqhaSBz4bqjbiBwaOG6qW0gbsOgbyDEkcOzIGtow7RuZyAoYmnhur9uIEdlbmRlciBjw7MgbMOgbSDhuqNuaCBoxrDhu59uZyDEkeG6v24gYmnhur9uIENhdGVnb3J5IGtow7RuZz8pDQoNCi0gR2nhu5tpIHTDrW5oIGPDsyBsw6BtIOG6o25oIGjGsOG7n25nIMSR4bq/biB2aeG7h2Mga2jDoWNoIGjDoG5nIGzhu7FhIGNo4buNbiBtdWEgc+G6o24gcGjhuqltIHRodeG7mWMgbmfDoG5oIGjDoG5nIG7DoG8gxJHDsyBraMO0bmc/IChiaeG6v24gR2VuZGVyIGPDsyBsw6BtIOG6o25oIGjGsOG7n25nIMSR4bq/biBiaeG6v24gaW5kdXN0cnkga2jDtG5nPykNCg0KLSBHaeG7m2kgdMOtbmggY8OzIGzDoG0g4bqjbmggaMaw4bufbmcgxJHhur9uIHZp4buHYyBraMOhY2ggaMOgbmcgbOG7sWEgY2jhu41uIHBoxrDGoW5nIHRo4bupYyB0aGFuaCB0b8OhbiBraMO0bmc/DQooYmnhur9uIEdlbmRlciBjw7MgbMOgbSDhuqNuaCBoxrDhu59uZyDEkeG6v24gYmnhur9uIFBheW1lbnRfbWV0aG9kIGtow7RuZz8pDQoNCi0gxJDhu5kgdHXhu5VpIGPDsyBsw6BtIOG6o25oIGjGsOG7n25nIMSR4bq/biB2aeG7h2Mga2jDoWNoIGjDoG5nIGzhu7FhIGNo4buNbiBtdWEgbeG7mXQgc+G6o24gcGjhuqltIHRodeG7mWMgbmfDoG5oIGjDoG5nIG7DoG8gxJHDsyBraMO0bmc/KGJp4bq/biBhZ2UgY8OzIGzDoG0g4bqjbmggaMaw4bufbmcgxJHhur9uIGJp4bq/biBpbmR1c3RyeSBraMO0bmc/KQ0KDQotIMSQ4buZIHR14buVaSBjw7Mg4bqjbmggaMaw4bufbmcgxJHhur9uIHZp4buHYyBs4buxYSBjaOG7jW4gcGjGsMahbmcgdGjhu6ljIHRoYW5oIHRvw6FuIGPhu6dhIGtow6FjaCBow6BuZyBraMO0bmcgKGJp4bq/biBnZW5kZXIgY8OzIGzDoG0g4bqjbmggaMaw4bufbmcgxJHhur9uIGJp4bq/biBwYXltZW50X21ldGhvZCBraMO0bmcpDQoNCioqxq/hu5tjIGzGsOG7o25nIDMgYmnhur9uKioNCg0KLSDEkOG7mSB0deG7lWkgY8OzIGzDoG0g4bqjbmggaMaw4bufbmcgxJHhur9uIHZp4buHYyBraMOhY2ggaMOgbmcgbOG7sWEgY2jhu41uIHBoxrDGoW5nIHRo4bupYyB0aGFuaCB0b8OhbiB2w6AgbOG7sWEgY2jhu41uIG5nw6BuaCBow6BuZyBtdWEgc+G6r20ga2jDtG5nIChiaeG6v24gYWdlIGPDsyBsw6BtIOG6o25oIGjGsOG7n25nIMSR4bq/biBiaeG6v24gcGF5bWVudF9tZXRob2QgdsOgIGluZHVzdHJ5IGtow7RuZz8pDQoNCi0gR2nhu5tpIHTDrW5oIGPDsyBsw6BtIOG6o25oIGjGsOG7n25nIMSR4bq/biB2aeG7h2Mga2jDoWNoIGjDoG5nIGzhu7FhIGNo4buNbiBwaMawxqFuZyB0aOG7qWMgdGhhbmggdG/DoW4gdsOgIGzhu7FhIGNo4buNbiBuZ8OgbmggaMOgbmcgbXVhIHPhuq9tIGtow7RuZyAoYmnhur9uIGdlbmRlciBjw7MgbMOgbSDhuqNuaCBoxrDhu59uZyDEkeG6v24gYmnhur9ucGF5bWVudF9tZXRob2QgdsOgIGluZHVzdHJ5IGtow7RuZz8pDQoNCiMjIDMuIEzhuq1wIGLhuqNuZyB04bqnbiBz4buRLCB04bqnbiBzdeG6pXQgxJHhu4MgbcO0IHThuqMgDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0KDQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUpDQoNCmxpYnJhcnkodGlkeXZlcnNlKQ0KDQpsaWJyYXJ5KERlc2NUb29scykNCmxpYnJhcnkoZXBpdG9vbHMpDQpkZiA8LSByZWFkLmNzdigiRDovUGjDom4gdMOtY2ggZOG7ryBsaeG7h3UgxJHhu4tuaCB0w61uaC9jdXN0b21lcl9zaG9wcGluZ19kYXRhLmNzdiIpDQpkZiRpbmR1c3RyeSA8LSBpZmVsc2UoZGYkY2F0ZWdvcnkgPT0gIkZvb2QgJiBCZXZlcmFnZSIsICJGJkIiLCAiRk1DRyIpDQpkZiRhZ2UgPC0gY3V0KGRmJGFnZSwgYnJlYWtzID0gYygwLDUwLDEwMCksIGxhYmVscyA9IGMoIllvdW5nIiwiT2xkIikpDQpkZg0KDQpgYGANCg0KIyMjIDMuMS5C4bqjbmcgdOG6p24gc+G7kSBj4bunYSBnaeG7m2kgdMOtbmggdsOgIGxv4bqhaSBz4bqjbiBwaOG6qW0NCg0KLSBC4bqjbmcgdOG6p24gc+G7kSBj4bunYSBnaeG7m2kgdMOtbmggdsOgIGxv4bqhaSBz4bqjbiBwaOG6o20gxJHhu4MgeGVtIGPDsyBz4buxIGNow6puaCBs4buHY2ggZ2nhu69hIG5hbSB2w6AgbuG7ryBraGkgY2jhu41uIG3hu5l0IGxv4bqhaSBz4bqjbiBwaOG6qW0gbsOgbyDEkcOzIGtow7RuZy4NCg0KYGBge3J9DQoNCmZyZXF1ZW5jeSA8LSB0YWJsZShkZiRnZW5kZXIsIGRmJGNhdGVnb3J5KQ0KDQpmcmVxdWVuY3kNCmFkZG1hcmdpbnMoZnJlcXVlbmN5KQ0KYGBgDQpOaMOsbiBzxqEgcXVhIHRow6wgdGEgY8OzIHRo4buDIHRo4bqleSDhu58gdOG6pXQgY+G6oyBwaMOibiBsb+G6oWkgc+G6o24gcGjhuqltLCBz4buRIGzGsOG7o25nIG11YSBow6BuZyBj4bunYSBu4buvIG5oaeG7gXUgaMahbiBz4buRIGzGsOG7o25nIG11YSBow6BuZyBj4bunYSBuYW0gDQooKkJp4buDdSDEkeG7kyB0aOG7gyBoaeG7h24gc+G7sSBjaMOqbmggbOG7h2NoIGdp4buvYSBuYW0gdsOgIG7hu68gdsOgIGPDoWMgbG/huqFpIHPhuqNuIHBo4bqpbSB0aOG7gyBoaeG7h24g4bufIGjDrG5oIDQuMSopDQoNCioqQuG6o25nIHThuqduIHN14bqldCBj4bunYSBz4bqjbiBwaOG6qW0qKg0KDQotIEzhuq1wIGLhuqNuZyB04bqnbiBzdeG6pXQgxJHhu4MgeGVtIG3hurd0IGjDoG5nIG7DoG8gxJHGsOG7o2MgYsOhbiBjaOG6oXkgbmjhuqV0IHbDoCBt4bq3dCBow6BuZyBuw6BvIMOtdCBiw6FuIGNo4bqheSBuaOG6pXQNCg0KYGBge3J9DQpmcmVxdWVucHJvZHVjdCA8LSB0YWJsZShkZiRjYXRlZ29yeSkNCnBlcmNlbnRmcmVxdWVuY3kgPC0gcHJvcC50YWJsZShmcmVxdWVucHJvZHVjdCkNCnBlcmNlbnRmcmVxdWVuY3kNCm1pbihwZXJjZW50ZnJlcXVlbmN5KQ0KbWF4KHBlcmNlbnRmcmVxdWVuY3kpDQoNCmBgYA0KLSBT4bqjbiBwaOG6qW0gY8OzIHPhu5EgYsOhbiByYSDDrXQgbmjhuqV0IGPDsyB04bqnbiBz4buRIHh14bqldCBoaeG7h24gbMOgIDAuMDUwMDgxOTQNCi0gU+G6o24gcGjhuqltIGPDsyBz4buRIGLDoW4gcmEgbmhp4buBdSBuaOG6pXQgY8OzIHThuqduIHPhu5EgeHXhuqV0IGhp4buHbiBsw6AgMC4zNDY3NTI5DQoNCiMjIyAzLjIuQuG6o25nIHThuqduIHPhu5EgY+G7p2EgZ2nhu5tpIHTDrW5oIHbDoCBuZ8OgbmggaMOgbmcNCg0KLSBC4bqjbmcgdOG6p24gc+G7kSBj4bunYSBnaeG7m2kgdMOtbmggdsOgIG5nw6BuaCBow6BuZyDEkeG7gyB4ZW0gY8OzIHPhu7EgY2jDqm5oIGzhu4djaCBnaeG7r2EgbmFtIHbDoCBu4buvIGtoaSBjaOG7jW4gbXVhIG3hu5l0IGxv4bqhaSBow6BuZyBraMO0bmcNCmBgYHtyfQ0KZnJlcXVlbmN5aW5kdXN0cnkgPC0gdGFibGUoZGYkZ2VuZGVyLCBkZiRpbmR1c3RyeSkNCg0KZnJlcXVlbmN5aW5kdXN0cnkNCmFkZG1hcmdpbnMoZnJlcXVlbmN5aW5kdXN0cnkpDQpgYGANCg0KLSBL4bq/dCBxdeG6oyBjaG8gdGEgdGjhuqV5IOG7nyBj4bqjIGhhaSBuZ8OgbmggaMOgbmcgRiRCIHbDoCBGTUNHLCB04bu3IGzhu4cgbXVhIGjDoG5nIGPhu6dhIG7hu68gbOG7m24gaMahbiB04bu3IGzhu4cgbXVhIGjDoG5nIGPhu6dhIG5hbSBy4bqldCBuaGnhu4F1LiAoKsSQ4buTIHRo4buLIHRo4buDIGhp4buHbiBz4buxIGNow6puaCBs4buHY2ggbsOgeSBu4bqxbSDhu58gaMOsbmggMy4yKiApDQoNCi0gVHJvbmcgbmfDoG5oIGjDoG5nIEYmQiwgdOG7tyBs4buHIGtow6FjaCBow6BuZyBsw6AgbmFtIHNvIHbhu5tpIHThu7cgbOG7hyBraMOhY2ggaMOgbmcgbMOgIG7hu68gbMOgOg0KJFxmcmFjezU5NzJ9ezg4MDR9JC4gQ2hvIHRo4bqleSB04bu3IGzhu4cgbuG7ryBtdWEgaMOgbmcg4bufIG5nw6BuaCBow6BuZyBuw6B5IGNoaeG6v20gZ+G6p24gNjglIHNvIHbhu5tpIHThu5VuZyBraMOhY2ggaMOgbmcNCg0KLSBUcm9uZyBuZ8OgbmggaMOgbmcgRk1DRywgdOG7tyBs4buHIGtow6FjaCBow6BuZyBsw6AgbmFtIHNvIHbhu5tpIHThu7cgbOG7hyBraMOhY2ggaMOgbmcgbMOgIG7hu68gbMOgOiAkXGZyYWN7MzQwMDN9ezUwNjc4fSQuIENobyB0aOG6pXkgdOG7tyBs4buHIG7hu68gbXVhIGjDoG5nIOG7nyBuZ8OgbmggaMOgbmcgbsOgeSBjaGnhur9tIGjGoW4gNjclIHNvIHbhu5tpIHThu5VuZyBraMOhY2ggaMOgbmcNCg0KIyMjIDMuMy5C4bqjbmcgdOG6p24gc+G7kSBj4bunYSDEkeG7mSB0deG7lWkgdsOgIG5nw6BuaCBow6BuZyB0acOqdSBkw7luZw0KDQotIELhuqNuZyB04bqnbiBz4buRIGPhu6dhIMSR4buZIHR14buVaSB2w6AgbmfDoG5oIGjDoG5nIHRpw6p1IGTDuW5nIMSR4buDIHhlbSBy4bqxbmcgZ2nhu69hIG5nxrDhu51pIGdpw6AgdsOgIG5nxrDhu51pIHRy4bq7IGPDsyBz4buxIGNo4buNbiBs4buxYSBraMOhYyBuaGF1IHRyb25nIGPDoWMgbmfDoG5oIGjDoG5nIHRpw6p1IGTDuW5nIGtow6FjIG5oYXUgaGF5IGtow7RuZw0KDQpgYGB7cn0NCmZyZXF1ZW5jeWFnZSA8LSB0YWJsZShkZiRhZ2UsIGRmJGluZHVzdHJ5KQ0KDQpmcmVxdWVuY3lhZ2UNCmFkZG1hcmdpbnMoZnJlcXVlbmN5YWdlKQ0KYGBgDQotIEvhur90IHF14bqjIGNobyB0YSB0aOG6pXkg4bufIGPhuqMgaGFpIG5nw6BuaCBow6BuZyBGJEIgdsOgIEZNQ0csIHThu7cgbOG7hyBtdWEgaMOgbmcgY+G7p2EgbmfGsOG7nWkgdHLhu4MgbOG7m24gaMahbiB04bu3IGzhu4cgbXVhIGjDoG5nIGPhu6dhIG5nxrDhu51pIGdpw6AgcuG6pXQgbmhp4buBdS4gKCrEkOG7kyB0aOG7iyB0aOG7gyBoaeG7h24gc+G7sSBjaMOqbmggbOG7h2NoIG7DoHkgbuG6sW0g4bufIGjDrG5oIDMuMyogKQ0KDQotIFRyb25nIG5nw6BuaCBow6BuZyBGJkIsIHThu7cgbOG7hyBraMOhY2ggaMOgbmcgbMOgIG5nxrDhu51pIHRy4bq7IHNvIHbhu5tpIHThu7cgbOG7hyBraMOhY2ggaMOgbmcgbMOgIG5nxrDhu51pIGdpw6AgbMOgOg0KJFxmcmFjezk0MzB9ezUzNDZ9JC4gQ2hvIHRo4bqleSB04bu3IGzhu4cgbmfGsOG7nWkgdHLhursgbXVhIGjDoG5nIOG7nyBuZ8OgbmggaMOgbmcgbsOgeSBjaGnhur9tIGfhuqduIDY0JSBzbyB24bubaSB04buVbmcga2jDoWNoIGjDoG5nDQoNCi0gVHJvbmcgbmfDoG5oIGjDoG5nIEZNQ0csIHThu7cgbOG7hyBraMOhY2ggaMOgbmcgbMOgIG5nxrDhu51pIHRy4bq7IHNvIHbhu5tpIHThu7cgbOG7hyBraMOhY2ggaMOgbmcgbMOgIG5nxrDhu51pIGdpw6AgbMOgOiAkXGZyYWN7NTM5MjZ9ezMwNzU1fSQuIENobyB0aOG6pXkgdOG7tyBs4buHIG5nxrDhu51pIHRy4bq7IG11YSBow6BuZyDhu58gbmfDoG5oIGjDoG5nIG7DoHkgY2hp4bq/bSBn4bqnbiA2NCUgc28gduG7m2kgdOG7lW5nIGtow6FjaCBow6BuZw0KDQoNCiMjIyAzLjQuQuG6o25nIHThuqduIHPhu5EgY+G7p2EgxJHhu5kgdHXhu5VpIHbDoCBwaMawxqFuZyB0aOG7qWMgdGhhbmggdG/DoW4NCg0KLSBC4bqjbmcgdOG6p24gc+G7kSBj4bunYSDEkeG7mSB0deG7lWkgxJHhu4MgeGVtIMSR4buZIHR14buVaSDhuqNuaCBoxrDhu59uZyBuaMawIHRo4bq/IG7DoG8gxJHhur9uIHZp4buHYyBs4buxYSBjaOG7jW4gcGjGsMahbmcgdGjhu6ljIHRoYW5oIHRvw6FuDQoNCmBgYHtyfQ0KZnJlcXVlbmN5cGF5bWVudCA8LSB0YWJsZShkZiRhZ2UsIGRmJHBheW1lbnRfbWV0aG9kKQ0KDQpmcmVxdWVuY3lwYXltZW50DQphZGRtYXJnaW5zKGZyZXF1ZW5jeXBheW1lbnQpDQoNCmBgYA0KLSBL4bq/dCBxdeG6oyBjaG8gdGEgdGjhuqV5IOG7nyBj4bqjIGhhaSBwaMawxqFuZyB0aOG7qWMgdGhhbmggdG/DoW4sIHThu7cgbOG7hyBtdWEgaMOgbmcgY+G7p2EgbmfGsOG7nWkgdHLhu4MgbOG7m24gaMahbiB04bu3IGzhu4cgbXVhIGjDoG5nIGPhu6dhIG5nxrDhu51pIGdpw6AgcuG6pXQgbmhp4buBdS4gKCrEkOG7kyB0aOG7iyB0aOG7gyBoaeG7h24gc+G7sSBjaMOqbmggbOG7h2NoIG7DoHkgbuG6sW0g4bufIGjDrG5oIDMuNCogKQ0KDQotIFRyb25nIHBoxrDGoW5nIHRo4bupYyB0cuG6oyBi4bqxbmcgdGnhu4FuIG3hurd0LCB04bu3IGzhu4cga2jDoWNoIGjDoG5nIGzDoCBuZ8aw4budaSB0cuG6uyBzbyB24bubaSB04bu3IGzhu4cga2jDoWNoIGjDoG5nIGzDoCBuZ8aw4budaSBnacOgIGzDoDoNCiRcZnJhY3syODI1OX17MTYxODh9JC4gQ2hvIHRo4bqleSB04bu3IGzhu4cgbmfGsOG7nWkgdHLhursgbXVhIGjDoG5nIOG7nyBuZ8OgbmggaMOgbmcgbsOgeSBn4bqlcCAxLDc0IGzhuqduIHNvIHbhu5tpIG5nxrDhu51pIGdpw6ANCg0KLSBUcm9uZyBuZ8OgbmggaMOgbmcgRk1DRywgdOG7tyBs4buHIGtow6FjaCBow6BuZyBsw6AgbmfGsOG7nWkgdHLhursgc28gduG7m2kgdOG7tyBs4buHIGtow6FjaCBow6BuZyBsw6AgbmfGsOG7nWkgZ2nDoCBsw6A6ICRcZnJhY3szNTA5N317IDE5OTEzfSQuIENobyB0aOG6pXkgdOG7tyBs4buHIG5nxrDhu51pIHRy4bq7IG11YSBow6BuZyDhu58gbmfDoG5oIGjDoG5nIG7DoHkgZ+G6pXAgMSw3NiBs4bqnbiBzbyB24bubaSBuZ8aw4budaSBnacOgDQoNCiMjIyAzLjUuQuG6o25nIHThuqduIHPhu5EgY+G7p2EgxJHhu5kgdHXhu5VpLCBuZ8OgbmggaMOgbmcgdsOgIHBoxrDGoW5nIHRo4bupYyB0aGFuaCB0b8Ohbg0KYGBge3J9DQpmcmVxdWVuY3kzYSA8LSB0YWJsZShkZiRhZ2UsIGRmJGluZHVzdHJ5LGRmJHBheW1lbnRfbWV0aG9kKQ0KDQpmcmVxdWVuY3kzYQ0KYWRkbWFyZ2lucyhmcmVxdWVuY3kzYSkNCg0KYGBgDQotIENobyBkw7kgcGjDom4gbG/huqFpIHThuqduIHPhu5EgbOG7sWEgY2jhu41uIG5nw6BuaCBow6BuZyBz4bqjbiBwaOG6qW0g4bupbmcgduG7m2kgcGjDom4ga2jDumMgxJHhu5kgdHXhu5VpIHRoZW8gMiBsb+G6oWkgaMOsbmggdGjhu6ljIHRoYW5oIHRvw6FuIHRow6wgdOG7tyBs4buHIGzhu7FhIGNo4buNbiBuZ8OgbmcgaMOgbmcgc+G7rSBk4bulbmcgZ2nhu69hIG5hbSB2w6AgbuG7ryBjxaluZyBraMO0bmcgdGhheSDEkeG7lWkuDQoNCiMjIDQuIEJp4buDdSDEkeG7kyANCiMjIyA0LjEuIEdlbmRlciBhbmQgQ2F0ZWdvcnkNCg0KKipCaeG7g3UgxJHhu5MgdGjhu4MgaGnhu4duIHPhu5EgbMaw4bujbmcgbXVhIHThu6tuZyBsb+G6oWkgc+G6o24gcGjhuqltIMSRxrDhu6NjIGNoaWEgdGhlbyAyIGdp4bubaSB0w61uaCoqDQoNCmBgYHtyfQ0KDQpsaWJyYXJ5KGdncGxvdDIpDQpnZ3Bsb3QoZGYsIGFlcyhnZW5kZXIsIGZpbGwgPSBjYXRlZ29yeSkpICsgZ2VvbV9iYXIocG9zaXRpb24gPSAnZG9kZ2UnKSArICBsYWJzKHggPSAiR2VuZGVyIiwgeSA9ICJDb3VudCBvZiBDYXRlZ29yeSIpDQoNCmBgYA0KDQoNCk5ow6xuIHbDoG8gxJHhu5MgdGjhu4sgY8WpbmcgZOG7hSBkw6BuZyBuaMOsbiB0aOG6pXksIHPhu5EgbMaw4bujbmcgbXVhIGjDoG5nIGPhu6dhIE7hu68g4bufIHThuqV0IGPhuqMgcGjDom4gbG/huqFpIHPhuqNuIHBo4bqpbSDEkeG7gXUgbOG7m24gaMahbiBuYW0sIHR1eSBuaGnDqm4gxJHhu4MgxJHDoW5oIGdpw6EgeGVtIHPhu7EgY2jDqm5oIGzhu4djaCB04burIGJp4buDdSDEkeG7kyB24bq9IHJhIGPDsyDEkcOhbmcgdGluIGPhuq15IGtow7RuZyB0aMOsIHRhIGTDuW5nIEh5cG90aGV0aWNzIHRlc3QgxrDhu5tjIGzGsOG7o25nIHThu7cgbOG7hyDEkeG7gyDEkcOhbmggZ2nDoSB4ZW0gY8OzIHPhu7Ega2jDoWMgbmhhdSB24buBIGPDoWNoIGzhu7FhIGNo4buNbiBz4bqjbiBwaOG6qW0gY+G7p2EgMiBnaeG7m2kgdMOtbmgga2jDtG5nLg0KDQoqKkJp4buDdSDEkeG7kyB0aOG7gyBoaeG7h24gc+G7kSBsxrDhu6NuZyBtdWEgdOG7q25nIHPhuqNuIHBo4bqpbSBj4bunYSBraMOhY2ggaMOgbmcqKg0KDQpgYGB7cn0NCmdncGxvdChkZiwgYWVzKGNhdGVnb3J5KSkgKyBnZW9tX2Jhcihwb3NpdGlvbiA9ICdkb2RnZScpICsgbGFicyh4PSAiQ2F0ZWdvcnkiLCB5PSAiQ291bnQgb2YgaW52b2ljZSIpDQoNCg0KYGBgDQoNCi0gQ2xvdGhpbmcgbMOgIHPhuqNuIHBo4bqpbSDEkcaw4bujYyB0acOqdSB0aOG7pSBuaGnhu4F1IG5o4bqldC4gTmjDrG4gdsOgbyDEkeG7kyB0aOG7iyB0YSBraMOzIHBow6JuIGJp4buHdCDEkcaw4bujYyBCb29rcywgU291dmVuaXIgaGF5IFRlY2hub2xvZ3kgbMOgIHPhuqNuIHBo4bqpbSB0acOqdSB0aOG7pSDDrXQgbmjhuqV0LiBQaOG6p24gNS4xIHPhur0gZMO5bmcgSHlwb3RoZXRpY3MgdGVzdCDEkeG7gyB4ZW0gdGjhu60gc+G6o24gcGjhuqltIG7DoG8gY8OzIHThuqduIHN14bqldCB4deG6pXQgaGnhu4duIMOtdCBuaOG6pXQuDQoNCiMjIyA0LjIuIEdlbmRlciBhbmQgSW5kdXN0cnkNCg0KKipCaeG7g3UgxJHhu5MgdGjhu4MgaGnhu4duIHPhu5EgbMaw4bujbmcgbXVhIHThu6tuZyBsb+G6oWkgbmfDoG5oIGjDoG5nIMSRxrDhu6NjIGNoaWEgdGhlbyAyIGdp4bubaSB0w61uaCoqDQoNCmBgYHtyfQ0KDQpnZ3Bsb3QoZGYsIGFlcyhnZW5kZXIsIGZpbGwgPSBpbmR1c3RyeSkpICsgZ2VvbV9iYXIocG9zaXRpb24gPSAnZG9kZ2UnKSArICBsYWJzKHggPSAiR2VuZGVyIiwgeSA9ICJDb3VudCBvZiBpbmR1c3RyeSIpDQoNCmBgYA0KDQoNCiMjIyA0LjMuIEFnZSBhbmQgSW5kdXN0cnkNCg0KKipCaeG7g3UgxJHhu5MgdGjhu4MgaGnhu4duIHPhu5EgbMaw4bujbmcgbXVhIHThu6tuZyBsb+G6oWkgbmfDoG5oIGjDoG5nIMSRxrDhu6NjIGNoaWEgdGhlbyAyIMSR4buZIHR14buVaSoqDQoNCmBgYHtyfQ0KDQpnZ3Bsb3QoZGYsIGFlcyhhZ2UsIGZpbGwgPSBpbmR1c3RyeSkpICsgZ2VvbV9iYXIocG9zaXRpb24gPSAnZG9kZ2UnKSArICBsYWJzKHggPSAiQWdlIiwgeSA9ICJDb3VudCBvZiBpbmR1c3RyeSIpDQoNCmBgYA0KDQojIyMgNC40LiBBZ2UgYW5kIFBheW1lbnRfbWV0aG9kDQoNCioqQmnhu4N1IMSR4buTIHRo4buDIGhp4buHbiBz4buRIGtow6FjaCBow6BuZyBs4buxYSBjaOG7jW4gdOG7q25nIHBoxrDGoW5nIHRo4bupYyB0aGFuaCB0b8OhbiDEkcaw4bujYyBjaGlhIHRoZW8gMiDEkeG7mSB0deG7lWkgKioNCg0KYGBge3J9DQoNCmdncGxvdChkZiwgYWVzKGFnZSwgZmlsbCA9IHBheW1lbnRfbWV0aG9kKSkgKyBnZW9tX2Jhcihwb3NpdGlvbiA9ICdkb2RnZScpICsgIGxhYnMoeCA9ICJBZ2UiLCB5ID0gIkNvdW50IG9mIGludm9pY2UiKQ0KDQpgYGANCg0KDQojIyA1Lsav4bubYyBsxrDhu6NuZyB04bu3IGzhu4cgDQoNCioqxq/hu5tjIGzGsOG7o25nIHThu7cgbOG7hyBj4bunYSB04burbmcgc+G6o24gcGjhuqltICoqDQoNCk5ow6xuIHbDoG8gxJHhu5MgdGjhu4sgdGjhu4MgaGnhu4duIHPhu5EgbMaw4bujbmcgbXVhIGjDoG5nIGPhu6dhIHThu6tuZyBz4bqjbiBwaOG6qW0sIHRhIHRo4bqleSBCb29rcyBsw6Agc+G6o24gcGjhuqltIMOtdCBiw6FuIGNo4bqheSBuaOG6pXQuIFRhIMSR4bq3dCByYSBjw6J1IGjhu49pIGzDoCBjw7MgY2jhuq9jIGNo4bqvbiBCb29rcyBsw6AgbG/huqFpIHPhuqNuIHBo4bqpbSBjw7Mgc+G7kSBsxrDhu6NuZyBtdWEgaMOgbmcgw610IG5o4bqldCBraMO0bmc/IMav4bubYyBsxrDhu6NuZyB04bu3IGzhu4cgbmfGsOG7nWkgbXVhIHPhuqNuIHBo4bqpbSBsw6AgQm9va3MgxJHhu5NuZyB0aOG7nWkga2nhu4NtIMSR4buLbmggeGVtIHThu7cgbOG7hyAoJSkgbmfGsOG7nWkgbXVhIEJvb2tzIGPDsyBwaOG6o2kgbMOgIDUlIGtow7RuZyAoNSUgbMOgIHThuqduIHPDtCBj4bunYSBz4bqjbiBwaOG6qW0gxJHGsOG7o2MgYsOhbiByYSDDrXQgbmjhuqV0KT8NCkNow7puZyB0YSB0aeG6v24gaMOgbmgga2nhu4NtIMSR4buLbmggZ2nhuqMgdGh1eeG6v3QgJEhfMD0wLDA1JA0KDQpgYGB7cn0NCmJvb2tzIDwtIGRmW2RmJGNhdGVnb3J5ID09ICJCb29rcyIsXQ0KcHJvcC50ZXN0KGxlbmd0aChib29rcyRjYXRlZ29yeSksIGxlbmd0aChib29rcyRjYXRlZ29yeSksIHAgPSAwLjA1KQ0KYGBgDQoNCkvhur90IHF14bqjIGNobyB0YSB0aOG6pXkgZ2nDoSB0cuG7iyBQLXZhbHVlIDwgbeG7qWMgw70gbmdoxKlhIDAuMDUuIFRhIGLDoWMgYuG7jyBIMCwgdOG7qWMgbMOgIHThu7cgbOG7hyBtdWEgc+G6o24gcGjhuqltIEJvb2tzIGPhu6dhIGtow6FjaCBow6BuZyBraMO0bmcgcGjhuqNpIGzDoCAwLjA1JS4NCg0KLSBOaMOsbiB2w6BvIMSR4buTIHRo4buLLCB0YSB0aOG6pXkgQ2xvdGhpbmcgbMOgIHPhuqNuIHBo4bqpbSBiw6FuIGNo4bqheSBuaOG6pXQuIFRhIMSR4bq3dCByYSBjw6J1IGjhu49pIGzDoCBjw7MgY2jhuq9jIGNo4bqvbiBDbG90aGluZyBsw6AgbG/huqFpIHPhuqNuIHBo4bqpbSBjw7Mgc+G7kSBsxrDhu6NuZyBtdWEgaMOgbmcgbmhp4buBdSBuaOG6pXQga2jDtG5nPyDGr+G7m2MgbMaw4bujbmcgdOG7tyBs4buHIG5nxrDhu51pIG11YSBz4bqjbiBwaOG6qW0gbMOgIENsb3RoaW5ncyDEkeG7k25nIHRo4budaSBraeG7g20gxJHhu4tuaCB4ZW0gdOG7tyBs4buHICglKSBuZ8aw4budaSBtdWEgQ2xvdGhpbmcgY8OzIHBo4bqjaSBsw6AgMzUlIGtow7RuZyAoMzUlIGzDoCB04bqlbiBz4buRIGPhu6dhIHPhuqNuIHBo4bqpbSDEkcaw4bujYyBiw6FuIGNo4bqheSBuaOG6pXQpPw0KQ2jDum5nIHRhIHRp4bq/biBow6BuaCBraeG7g20gxJHhu4tuaCBnaeG6oyB0aHV54bq/dCAkSF8wPTAuMzUkDQoNCmBgYHtyfQ0KQ2xvdGhpbmdzIDwtIGRmW2RmJGNhdGVnb3J5ID09ICJDbG90aGluZyIsXQ0KcHJvcC50ZXN0KGxlbmd0aChDbG90aGluZ3MkY2F0ZWdvcnkpLCBsZW5ndGgoQ2xvdGhpbmdzJGNhdGVnb3J5KSwgcCA9IDAuMzUpDQpgYGANCkdpw6EgdHLhu4sgUC12YWx1ZSB0cuG6oyB24buBIHLhuqV0IGLDqSwgbmjhu48gaMahbiBt4bupYyDDvSBuZ2jEqWEgMC4wNSBuw6puIHRhIGLDoWMgYuG7jyBIMCwgduG6rXkgdOG7tyBs4buHIG11YSBz4bqjbiBwaOG6qW0gQ2xvdGhpbmdzIGtow7RuZyBwaOG6o2kgbMOgIDM1JS4NCg0KKirGr+G7m2MgbMaw4bujbmcgY2jDqm5oIGzhu4djaCB04bu3IGzhu4cgY+G7p2EgdOG7q25nIHPhuqNuIHBo4bqpbSDEkeG7kWkgduG7m2kgdOG7q25nIHBow6JuIGtow7pjIGtow6FjaCBow6BuZyoqDQoNCioxLiDGr+G7m2MgbMaw4bujbmcgc+G7sSBjaMOqbmggbOG7h2NoIHbhu4EgdOG7tyBs4buHIG11YSBCb29rcyBnaeG7r2EgbmFtIHbDoCBu4buvLioNCg0KxJDhurd0IGdp4bqjIHRodXnhur90ICRIXzAkOiBU4bu3IGzhu4cgbXVhIEJvb2tzIGPhu6dhIG5hbSB2w6AgbuG7ryBsw6AgYuG6sW5nIG5oYXUNCg0KYGBge3J9DQpNYWxlIDwtIGRmW2RmJGdlbmRlciA9PSAiTWFsZSIsXQ0KRmVtYWxlIDwtIGRmW2RmJGdlbmRlciA9PSAiRmVtYWxlIixdDQoNCk1hbGVyYXRlIDwtIE1hbGVbTWFsZSRjYXRlZ29yeSA9PSAiQm9va3MiLF0NCkZlbWFsZXJhdGUgPC0gRmVtYWxlW0ZlbWFsZSRjYXRlZ29yeSA9PSAiQm9va3MiLF0NCg0KZ2VuZGVyYXRlIDwtIGMobnJvdyhNYWxlKSwgbnJvdyhNYWxlKSkNCmNhdGVnb3J5cmF0ZSA8LSBjKG5yb3coTWFsZXJhdGUpLCBucm93KEZlbWFsZXJhdGUpKQ0KDQpwcm9wLnRlc3QoY2F0ZWdvcnlyYXRlLGdlbmRlcmF0ZSkNCg0KDQpgYGANCkvhur90IHF14bqjIFBfdmFsdWUgcuG6pXQgbmjhu48sIHRhIGLDoWMgYuG7jyBIMC4gQ2hvIHRo4bqleSBjw7Mgc+G7sSBraMOhYyBiaeG7h3QgZ2nhu69hIHThu7cgbOG7hyBuYW0gbXVhIEJvb2tzIHbDoCBu4buvIG11YSBCb29rcy4gTmdvw6BpIHJhLCBraG/huqNuZyB0aW4gY+G6rXkgY2hvIHThu7cgbOG7hyBtdWEgYm9va3MgY+G7p2EgaGFpIGdp4bubaSB0w61uaCBuw6B5IGzDoCAoLTAuMDI0MTYwNzIsLTAuMDE3NDE1MjcpLCBraMO0bmcgYmFvIGfhu5NtIHPhu5EgMCwgY2hvIHRo4bqleSBnaeG7r2EgMiB04bu3IGzhu4cgbsOgeSBjw7MgbeG7mXQgc+G7sSBjaMOqbmggbOG7h2NoIMSRw6FuZyBr4buDLiBU4bu3IGzhu4cgY+G7p2EgbmjDs20gdGjhu6kgbmjhuqV0IGzDoCAwLjA1MTkwNzQ0LCB04bu3IGzhu4cgY+G7p2EgbmjDs20gdGjhu6kgMiBsw6AgMC4wNzI2OTU0My4NCg0KDQoqMi7Gr+G7m2MgbMaw4bujbmcgc+G7sSBjaMOqbmggbOG7h2NoIHbhu4EgdOG7tyBs4buHIG11YSBDbG90aGluZ3MgZ2nhu69hIG5hbSB2w6AgbuG7ry4qDQoNCsSQ4bq3dCBnaeG6oyB0aHV54bq/dCAkSF8wJDogVOG7tyBs4buHIG11YSBDbG90aGluZ3MgY+G7p2EgbmFtIHbDoCBu4buvIGzDoCBi4bqxbmcgbmhhdQ0KDQpgYGB7cn0NCk1hbGUgPC0gZGZbZGYkZ2VuZGVyID09ICJNYWxlIixdDQpGZW1hbGUgPC0gZGZbZGYkZ2VuZGVyID09ICJGZW1hbGUiLF0NCg0KTWFsZXJhdGUgPC0gTWFsZVtNYWxlJGNhdGVnb3J5ID09ICJDbG90aGluZyIsXQ0KRmVtYWxlcmF0ZSA8LSBGZW1hbGVbRmVtYWxlJGNhdGVnb3J5ID09ICJDbG90aGluZyIsXQ0KDQpnZW5kZXJhdGUgPC0gYyhucm93KE1hbGUpLCBucm93KE1hbGUpKQ0KY2F0ZWdvcnlyYXRlIDwtIGMobnJvdyhNYWxlcmF0ZSksIG5yb3coRmVtYWxlcmF0ZSkpDQoNCnByb3AudGVzdChjYXRlZ29yeXJhdGUsZ2VuZGVyYXRlKQ0KYGBgDQpL4bq/dCBxdeG6oyBQX3ZhbHVlIHLhuqV0IG5o4buPLCB0YSBiw6FjIGLhu48gSDAuIENobyB0aOG6pXkgY8OzIHPhu7Ega2jDoWMgYmnhu4d0IGdp4buvYSB04bu3IGzhu4cgbmFtIG11YSBDbG90aGluZ3MgdsOgIG7hu68gbXVhIENsb3RoaW5ncy4gTmdvw6BpIHJhLCBraG/huqNuZyB0aW4gY+G6rXkgY2hvIHThu7cgbOG7hyBtdWEgQ2xvdGhpbmdzIGPhu6dhIGhhaSBnaeG7m2kgdMOtbmggbsOgeSBsw6AgKC0wLjE3NzMyMDEsIC0wLjE2Mzc0MzApLCBraMO0bmcgYmFvIGfhu5NtIHPhu5EgMCwgY2hvIHRo4bqleSBnaeG7r2EgMiB04bu3IGzhu4cgbsOgeSBjw7MgbeG7mXQgc+G7sSBjaMOqbmggbOG7h2NoIMSRw6FuZyBr4buDLiBU4bu3IGzhu4cgY+G7p2EgbmjDs20gdGjhu6kgbmjhuqV0IGzDoCAwLjM0NjA5MTMsIHThu7cgbOG7hyBj4bunYSBuaMOzbSB0aOG7qSAyIGzDoCAwLjUxNjYyMjkuDQoNCiMjIDYuIFJlbGF0aXZlIFJpc2svIE9kZCBSYXRpbyANCg0KIyMjIDYuMS4gR2VuZGVyIGFuZCBQYXltZW50X21ldGhvZA0KDQoqKlJlbGF0aXZlIFJpc2sqKg0KDQoNCmBgYHtyfQ0KDQpkZiRwYXltZW50X21ldGhvZFtkZiRwYXltZW50X21ldGhvZCA9PSAiRGViaXQgQ2FyZCJdIDwtICJDcmVkaXQgQ2FyZCINCnBheW1lbnRmcmVxdWVuY3kgPC0gdGFibGUoZGYkZ2VuZGVyLCBkZiRwYXltZW50X21ldGhvZCkNCg0KYWRkbWFyZ2lucyhwYXltZW50ZnJlcXVlbmN5KQ0KDQpSZWxSaXNrKHBheW1lbnRmcmVxdWVuY3kpICNSZWxyaXNrIHTDrW5oIOG7nyB24buLIHRyw60gMTEgc28gduG7m2kgMjEgKGJp4bq/biB0aMOgbmggY8O0bmcgbMOgIGPhu5l0IHRo4bupIDEpDQoNCnJpc2tyYXRpbyhwYXltZW50ZnJlcXVlbmN5KQ0KDQoNCg0KDQpgYGANCg0KLSBS4bunaSBybyB0xrDGoW5nIMSR4buRaSBj4bunYSBuYW0gY2jhu41uIENhc2ggbMOgbSBwaMawxqFuZyB0aOG7qWMgdGhhbmggdG/DoW4gc28gduG7m2kgbuG7ryBjaOG7jW4gQ2FzaCBsw6BtIHBoxrDGoW5nIHRo4bupYyB0aGFuaCB0b8OhbiBsw6AgMS4wMDY4OC4gS+G6v3QgcXXhuqMgbsOgeSBs4bubbiBoxqFuIDEsIG5naMSpYSBsw6AgTmFtIHPhur0gY8OzIG5ndXkgY8ahIGNo4buNbiBDYXNoIGzDoCBwaMawxqFuZyB0aOG7qWMgdGhhbmggdG/DoW4gaMahbiBu4buvIA0KLSBL4bq/dCBxdeG6oyB0csOqbiBjaG8gdGjhuqV5IHLhu6dpIHJvIHTGsMahbmcgxJHhu5FpIGPhu6dhIG7hu68gY2jhu41uIENyZWRpdCBDYXJkIGzDoG0gcGjGsMahbmcgdGjhu6ljIHRoYW5oIHRvw6FuIHNvIHbhu5tpIG5hbSBjaOG7jW4gY3JlZGl0IGNhcmQgbMOgbSBwaMawxqFuZyB0aOG7qWMgdGhhbmggdG/DoW4gbMOgIDEuMDA1NTYyLiBL4bq/dCBxdeG6oyBuw6B5IGPFqW5nIGzhu5tuIGjGoW4gMSwgY2hvIHRo4bqleSBu4buvIGPDsyBuZ3V5IGPGoSBjaOG7jW4gQ3JlZGl0IENhcmQgbMOgbSBwaMawxqFuZyB0aOG7qWMgdGhhbmggdG/DoW4gaMahbiBOYW0uDQoNCg0KKipPZGQgUmF0aW8qKg0KDQotIFThu7cgbOG7hyBuYW0gdsOgIG7hu68gZ2nhu69hIHjDoWMgc3XhuqV0ICJz4butIGThu6VuZyBDYXNoIiB2w6AgeMOhYyBzdeG6pXQgImtow7RuZyBz4butIGThu6VuZyBDYXNoIg0KDQpgYGB7cn0NCm9kZHNyYXRpbyhwYXltZW50ZnJlcXVlbmN5KQ0KDQpgYGANCg0KLSBU4bu3IGzhu4cgTmFtIHPhu60gZOG7pW5nIENhc2ggbMOgbSBwaMawxqFuZyB0aOG7qWMgdGhhbmggdG/DoW4gc28gduG7m2kgbuG7ryBz4butIGThu6VuZyBjYXNoIGzDoG0gcGjGsMahbmcgdGjhu6ljIHRoYW5oIHRvw6FuIGzDoCAxLjAxMjQ2LCBnacOhIHRy4buLIG7DoHkgbOG7m24gaMahbiAxIHThu6ljIGzDoCBuYW0gc+G6vSBjw7Mgbmd1eSBjxqEgc+G7rSBk4bulbmcgY2FzaCBsw6BtIHBoxrDGoW5nIHRo4bupYyB0aGFuaCB0b8OhbiBoxqFuIG7hu68uDQoNCg0KDQojIyMgNi4yLiBHZW5kZXIgYW5kIEluZHVzdHJ5DQoNCioqUmVsYXRpdmUgUmlzayoqDQpgYGB7cn0NCg0KYWRkbWFyZ2lucyhmcmVxdWVuY3lpbmR1c3RyeSkNCg0KUmVsUmlzayhmcmVxdWVuY3lpbmR1c3RyeSkNCnJpc2tyYXRpbyhmcmVxdWVuY3lpbmR1c3RyeSkNCg0KYGBgDQotIFLhu6dpIHJvIHTGsMahbmcgxJHhu5FpIGPhu6dhIG7hu68gY2jhu41uIEYmQiBsw6AgbmfDoG5oIGjDoG5nIHRpw6p1IGTDuW5nIHbhu5tpIG5hbSBjaOG7jW4gRiZCIGzDoCBuZ8OgbmggaMOgbmcgdGnDqnUgZMO5bmcgbMOgIDAuOTkwNzQ3OS4gR2nDoSB0cuG7iyBuw6B5IGLDqSBoxqFuIDEsIHRo4buDIGhp4buHbiBu4buvIHPhur0gw610IGNo4buNbiBGJkIgbMOgIG5nw6BuaCBow6BuZyB0acOqdSBkw7luZyBoxqFuIG5hbS4NCi0gUuG7p2kgcm8gdMawxqFuZyDEkeG7kWkgZ2nhu69hIG5hbSBjaOG7jW4gRk1DRyBsw6AgbmfDoG5oIGjDoG5nIHRpw6p1IGTDuW5nIHbDoCBu4buvIGNo4buNbiBGTUNHIGzDoCBuZ8OgbmggaMOgbmcgdGnDqnUgZMO5bmcgbMOgIDAuOTk4Mzc3NywgZ2nDoSB0cuG7iyBuw6B5IGLDqSBoxqFuIDEsIHRo4buDIGhp4buHbiBuYW0gc+G6vSDDrXQgY2jhu41uIEZNQ0cgbMOgIG5nw6BuaCBow6BuZyB0acOqdSBkw7luZyBoxqFuIG7hu68uDQoNCioqT2RkIFJhdGlvKioNCg0KYGBge3J9DQpvZGRzcmF0aW8oZnJlcXVlbmN5aW5kdXN0cnkpDQoNCg0KYGBgDQotIFjDoWMgeHXhuqV0IGPhu6dhIG7hu68gY2jhu41uIG5nw6BuaCBow6BuZyBGJkIgbMOgIDAuOTg5MTMzOCwgZ2nDoSB0cuG7iyBuw6B5IG5o4buPIGjGoW4gMSBjxaluZyB0aOG7gyBoaeG7h24gbuG7ryDDrXQgY2jhu41uIG5nw6BuaCBow6BuZyBGJkIgaMahbiBzbyB24bubaSBuYW0uDQoNCiMjIyA2LjMuIEFnZSBhbmQgSW5kdXN0cnkNCg0KKipSZWxhdGl2ZSBSaXNrKioNCmBgYHtyfQ0KDQphZGRtYXJnaW5zKGZyZXF1ZW5jeWFnZSkNClJlbFJpc2soZnJlcXVlbmN5YWdlKQ0Kcmlza3JhdGlvKGZyZXF1ZW5jeWFnZSkNCg0KYGBgDQotIEdpw6EgdHLhu4sgUmVscmlzayA9IDEuMDA1MTExIGzhu5tuIGjGoW4gMSB0aOG7gyBoaeG7h24geMOhYyB4deG6pXQgbmfGsOG7nWkgdHLhursgY2jhu41uIG5nw6BuaCBow6BuZyBGJkIgbmhp4buBdSBoxqFuIG5nxrDhu51pIGdpw6AgY2jhu41uIG5nw6BuaCBow6BuZyBGJkINCi0gR2nDoSB0cuG7iyBSaXNyYXRpbyA9IDEuMDAwODg5IGzhu5tuIGjGoW4gMSB0aOG7gyBoaeG7h24geMOhYyB4deG6pXQgbmfGsOG7nWkgZ2nDoCBjaOG7jW4gbmfDoG5oIGjDoG5nIEZNQ0cgbmhp4buBdSBoxqFuIG5nxrDhu51pIHRy4bq7IGNo4buNbiBuZ8OgbmggaMOgbmcgRk1DRw0KDQoqKk9kZCBSYXRpbyoqDQoNCmBgYHtyfQ0Kb2Rkc3JhdGlvKGZyZXF1ZW5jeWFnZSkNCg0KDQpgYGANCg0KLSBHacOhIHRy4buLIDEuMDA1OTk0IGzhu5tuIGjGoW4gMSBjaG8gdGjhuqV5LCDhu58gbmfDoG5oIGjDoG5nIEYmQiwgbmfGsOG7nWkgdHLhursgc+G6vSBjw7Mgbmh1IGPhuqd1IG5oaeG7gXUgaMahbiBuZ8aw4budaSBnacOgDQoNCiMjIDcuIFRo4buRbmcga8OqIHN1eSBkaeG7hW4NCg0KLSDEkOG7gyBraeG7g20gxJHhu4tuaCB4ZW0gZ2nhu5tpIHTDrW5oIGPDsyDhuqNuaCBoxrDhu59uZyDEkeG6v24gaMOgbmggdmkgbOG7sWEgY2jhu41uIHPhuqNuIHBo4bqpbSBraGkgbXVhIGjDoG5nIGPhu6dhIGtow6FjaCBow6BuZyBraMO0bmcsIHRhIGTDuW5nIEh5cG90aGV0aWNzIHRlc3QgdsOgIHBoxrDGoW5nIHBow6FwIGtp4buDbSDEkeG7i25oIHRo4buRbmcga8OqIENoaS1zcXVhcmUgDQpHaeG6oyB0aHV54bq/dCAkSF8wJDogSGFpIGJp4bq/biDEkeG7mWMgbOG6rXAgaG/DoG4gdG/DoG4NCg0KIyMjIDcuMS4gR2VuZGVyIGFuZCBDYXRlZ29yeQ0KDQoqKktp4buDbSDEkeG7i25oIHTDrW5oIMSR4buZYyBs4bqtcCoqDQoNCg0KYGBge3J9DQpjaGlzcS50ZXN0KGZyZXF1ZW5jeSkNCmBgYA0KDQotIEdpw6EgdHLhu4sgcC12YWx1ZSA9IDAuMzcyMiwgY2jDum5nIHRhIGNoxrBhIMSR4bunIGNo4bupbmcgY+G7qSDEkeG7gyBiw6FjIGLhu48gSDAuIFbhuq15IGdp4bubaSB0w61uaCBraMO0bmcg4bqjbmggaMaw4bufbmcgxJHhur9uIHZp4buHYyBs4buxYSBjaOG7jW4gc+G6o24gcGjhuqltIGPhu6dhIGtow6FjaCBow6BuZy4NCg0KIyMjIDcuMi4gR2VuZGVyIGFuZCBJbmR1c3RyeQ0KYGBge3J9DQpjaGlzcS50ZXN0KGZyZXF1ZW5jeWluZHVzdHJ5KQ0KYGBgDQoNCi0gR2nDoSB0cuG7iyBwLXZhbHVlID0gMC41NTQsIGNow7puZyB0YSBjaMawYSDEkeG7pyBjaOG7qW5nIGPhu6kgxJHhu4MgYsOhYyBi4buPIEgwLiBW4bqteSBnaeG7m2kgdMOtbmgga2jDtG5nIOG6o25oIGjGsOG7n25nIMSR4bq/biB2aeG7h2MgbOG7sWEgY2jhu41uIG5nw6BuaCBow6BuZyBtdWEgc+G6r20gY+G7p2Ega2jDoWNoIGjDoG5nLg0KDQojIyMgNy4zLiBBZ2UgYW5kIEluZHVzdHJ5DQpgYGB7cn0NCmNoaXNxLnRlc3QoZnJlcXVlbmN5YWdlKQ0KYGBgDQoNCi0gR2nDoSB0cuG7iyBwLXZhbHVlID0gIDAuNzUzOSwgY2jDum5nIHRhIGNoxrBhIMSR4bunIGNo4bupbmcgY+G7qSDEkeG7gyBiw6FjIGLhu48gSDAuIFbhuq15IMSR4buZIHR14buVaSBraMO0bmcg4bqjbmggaMaw4bufbmcgxJHhur9uIHZp4buHYyBs4buxYSBjaOG7jW4gbmfDoG5oIGjDoG5nIG11YSBz4bqvbSBj4bunYSBraMOhY2ggaMOgbmcuDQoNCiMjIyA3LjQuIEFnZSBhbmQgcGF5bWVudF9tZXRob2QNCg0KYGBge3J9DQpjaGlzcS50ZXN0KGZyZXF1ZW5jeXBheW1lbnQpDQpgYGANCg0KLSBHacOhIHRy4buLIHAtdmFsdWUgPSAgMC42NTgsIGNow7puZyB0YSBjaMawYSDEkeG7pyBjaOG7qW5nIGPhu6kgxJHhu4MgYsOhYyBi4buPIEgwLiBW4bqteSDEkeG7mSB0deG7lWkga2jDtG5nIOG6o25oIGjGsOG7n25nIMSR4bq/biB2aeG7h2MgbOG7sWEgY2jhu41uIHBoxrDGoW5nIHRo4bupYyB0aGFuaCB0b8Ohbi4NCg0KIyMgOC4gSOG7k2kgcXV5DQoNCg0KKipYw6J5IGThu7FuZyBtw7QgaMOsbmggaOG7k2kgcXV5KioNCg0KKjEuR2nhuqMgc+G7rSDhu58gdHJvbmcgYmnhur9uIEdlbmRlciwgdGh14buZYyB0w61uaCBn4buNaSBsw6AgdGjDoG5oIGPDtG5nIGtoaSBr4bq/dCBxdeG6oyB0cuG6oyB24buBIGzDoCBNYWxlKE5hbSkqDQpgYGB7cn0NCmdlbmRlciA8LSBmYWN0b3IoZGYkZ2VuZGVyKQ0KbGV2ZWxzKGdlbmRlcikgI1bDrCB0aHXhu5ljIHTDrW5oIHRo4bupIDIgbMOgIE1hbGUgbsOqbiBNYWxlIMSRxrDhu6NjIGfhu41pIGzDoCAidGjDoG5oIGPDtG5nIg0KDQpmaXR0ZWQgPC0gZ2xtKGZhY3RvcihnZW5kZXIpIH4gY2F0ZWdvcnksIGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAnbG9naXQnKSwgZGF0YSA9IGRmKQ0Kc3VtbWFyeShmaXR0ZWQpDQoNCmBgYA0KLSDEkOG7jWMga+G6v3QgcXXhuqMgUF92YWx1ZS4gTcO0IGjDrG5oIGjhu5NpIHF1eSB0csOqbiBnaeG6o2kgdGjDrWNoIHLhurFuZyBjw6FjIHPhuqNuIHBo4bqpbSBjYXRlZ29yeUNsb3RoaW5nLA0KY2F0ZWdvcnlDb3NtZXRpY3MsIGNhdGVnb3J5U291dmVuaXIsIGNhdGVnb3J5VG95cyBz4bq9IOG6o25oIGjGsOG7n25nIGzDqm4gcGjDom4ga2jDumMga2jDoWNoIGjDoG5nIGzDoCBOYW0uDQoNCioyLkdp4bqjIHPhu60g4bufIHRyb25nIGJp4bq/biBHZW5kZXIsIHRodeG7mWMgdMOtbmggZ+G7jWkgbMOgIHRow6BuaCBjw7RuZyBraGkga+G6v3QgcXXhuqMgdHLhuqMgduG7gSBsw6AgTWFsZShOYW0pKg0KDQpgYGB7cn0NCmRmJGdlbmRlciA8LSBmYWN0b3IoZGYkZ2VuZGVyLCBsZXZlbHMgPSBjKCJNYWxlIiwiRmVtYWxlIikpDQpnZW5kZXIgPC0gZmFjdG9yKGRmJGdlbmRlcikNCmxldmVscyhnZW5kZXIpICPEkOG7lWkgbOG6oWkgdGh14buZYyB0w61uaCB0aOG7qSAyIGzDoCBGZW1hbGUgbsOqbiBGZW1hbGUgxJHGsOG7o2MgZ+G7jWkgbMOgICJ0aMOgbmggY8O0bmciDQoNCmZpdHRlZCA8LSBnbG0oZmFjdG9yKGdlbmRlcikgfiBjYXRlZ29yeSwgZmFtaWx5ID0gYmlub21pYWwobGluayA9ICdsb2dpdCcpLCBkYXRhID0gZGYpDQpzdW1tYXJ5KGZpdHRlZCkNCg0KYGBgDQotIMSQ4buNYyBr4bq/dCBxdeG6oyBQX3ZhbHVlLiBNw7QgaMOsbmggaOG7k2kgcXV5IHRyw6puIGPFqW5nIGdp4bqjaSB0aMOtY2ggcuG6sW5nIGPDoWMgc+G6o24gcGjhuqltIGNhdGVnb3J5Q2xvdGhpbmcsY2F0ZWdvcnlDb3NtZXRpY3MsIGNhdGVnb3J5U291dmVuaXIsIGNhdGVnb3J5VG95cyBz4bq9IOG6o25oIGjGsOG7n25nIGzDqm4gcGjDom4ga2jDumMga2jDoWNoIGjDoG5nIGzDoCBO4buvLg0KDQoNCg0KDQo=