Parcel 06092-050-007 is overvalued by between $19,000 and $28,000 from the proposed TRIM assessment for 2017 based on a detailed market analysis of property appraiser’s data.

Multiple methods were used to determine the overvaluation. Similar homes sold in 2016 and 2017 were selected. This home was in the 50th percentile in terms of its price per square foot, meaning the market determined it was an average quality home.

However the home was in the 79th percentile based on the ratio of appraised value to sales price, and in the 75th percentile based on its ratio of appraised value to square footage. Additionally, the home is listed as an “above average quality home” but is has $28,000 in deferred maintenance and repairs that are needed.

Linear modeling of all similar properties sold in the last two years suggests that the fair value of the home is between $227,369 and $235,555. Based on deferred maintenance the value would be $226,100. By all metrics this property is worth less less than the proposed tax appraisal of $254,100.

Because sales price is the best predictor of true market value and this home sold less than 3 months ago, we think that the assessed value of the property for 2017 should be $227,369.

Data for comparison

To compare the appraisal for Parcel 06092-050-007 to other recently sold homes in the county, data were downloaded from the Alachua County Property Appraiser’s Database on October 4, 2017 using the following search criteria:

Data was cleaned up by removing records with missing values, and homes with extremely low tax valuations relative to sales price. After filtering, 4142 homes were used for comparison. The exact transformations were:

# Load R libraries
library("ggplot2")
library("viridis")
library("viridisLite")
# On October 4, 2017 Sales data were downloaded from the propery appraiser's site
# and are stored on google drive, accessed with this url
data <- read.csv("http://gdurl.com/IkiP")
# Set date format
data$Sale_Date <-as.Date(data$Sale_Date, format="%m/%d/%y")
# filter out records with NA's and homes over 800k
data<-data[is.na(data$HtdSqFt) ==FALSE,]
data<-data[data$HtdSqFt > 0,]
data<-data[is.na(data$Bldg_Value)==FALSE,]
data<-data[is.na(data$Sale_Price)==FALSE,]
data<-data[data$Sale_Price<800000,]
data<-data[is.na(data$Sale_Date)==FALSE,]
# Calculate cost per heated square foot
data$costPerSqFt<-data$Sale_Price/data$HtdSqFt
# Add land, extras and building value together to get appraised value
data$appraised <- data$Land_Value + data$Bldg_Value +data$OBXFValue
# Filter out extreamly low value sales that are likely to be interfamily transfers etc.
data<-data[data$Sale_Price>50000,]
# filter homes with extreamly high sale prices relative to appraised values
# (tear downs etc.)
data<-data[abs(log10(data$Sale_Price/data$appraised))<0.5, ]

Proposed tax appraisal for parcel 06092-050-007

hoi <- data.frame(Sale_Date=as.Date("2017-07-21"), appraised=254100, HtdSqFt=2629,
                  costPerSqFt=310000/2629, Sale_Price=310000, Land_Value=36000, 
                  Bldg_Value=208200, OBXFValue=9900 )

Price per square foot over time for 4 and 3 bedroom homes in Alachua County 2016-2017.

The red dot indicates parcel 06092-050-007. Parcel 06092-050-007 is an average 3 or 4 bedroom home in terms of it’s price per square foot. When homes sold a month before or after it are selected, the home is in the 50% percentile; it is an exactly average value home given its size.

ggplot(data=data, aes(x=Sale_Date, y=costPerSqFt)) + 
  geom_point(aes(color=log10(Sale_Price)), size=0.5) + 
  scale_color_viridis() + 
  geom_smooth(method="loess") +
  ylab("Dollars per Square Foot") +
  xlab("Year") +
  ggtitle("Price per square foot for 4 and 3 bedroom homes in Alachua County 2016-2017") +
  geom_point(data = hoi, colour = "red")

The home is in the 50th percentile in terms of it’s sales price per square foot

# Select the month before and after purchase since price per square foot is trending up
sdata <-data[(data$Sale_Date < "2017-08-21" & data$Sale_Date > "2017-06-21"),]
# Calculate the percentile
ecdf(sdata$costPerSqFt)(hoi$costPerSqFt)
[1] 0.5034803

Parcel 06092-050-007 is appraised in the 79th percentile given the ratio of its sales price to appraised value

The ratio for all properties is seen in the histogram. The blue line represents the median ratio and the red line represents Parcel 06092-050-007 which falls in the 79th percentile.

ggplot(data = data, aes(x=(appraised/Sale_Price))) + 
        geom_histogram(bins=100) +
        xlab("The ratio of appraised value to sale price") +
        geom_vline(xintercept=hoi$appraised/hoi$Sale_Price,color="red") + 
        geom_vline(xintercept=median(data$appraised/data$Sale_Price), color="blue") +
        ggtitle("The ratio of appraised value to sales price")

percentile = ecdf(data$appraised/data$Sale_Price)(hoi$appraised/hoi$Sale_Price)
paste("Parcel 06092-050-007 is in the", percentile ,"percentile")
[1] "Parcel 06092-050-007 is in the 0.790922259777885 percentile"

Parcel 06092-050-007 is appraised is higher than average given its sales price.

ggplot(data= data, aes(x=Sale_Price, y= appraised)) +
  geom_point(aes(color=log10(HtdSqFt)),  size=0.5) + 
  scale_color_viridis() + 
  geom_smooth(method ="lm") +
  ylab("Appraised value") +
  xlab("Sale price") +
  geom_point(data = hoi, colour = "red")

Parcel 06092-050-007 is appraised in the 75% percentile given its square footage

ggplot(data = data, aes(x=(appraised/HtdSqFt))) + 
         geom_histogram(bins=100) +
        xlab("The ratio of appraised value to heated square feet") +
        geom_vline(xintercept=hoi$appraised/hoi$HtdSqFt,color="red") + 
        geom_vline(xintercept=median(data$appraised/data$HtdSqFt), color="blue") +
        ggtitle("The ratio of appraised value to heated square feet")

percentile = ecdf(data$appraised/data$HtdSqFt)(hoi$appraised/hoi$HtdSqFt)
paste("Parcel 06092-050-007 is in the", percentile ,"percentile")
[1] "Parcel 06092-050-007 is in the 0.747464992757122 percentile"

What is a fair apprasial of the property?

With sales price alone, a linear model appraises the parcel at $227,369. Given that sales price is what determines market value and that this home sold less than 3 months ago, we recommend using that valuation of $227.369.

mod1<- lm(appraised ~ Sale_Price, data = data)
summary(mod1)

Call:
lm(formula = appraised ~ Sale_Price, data = data)

Residuals:
    Min      1Q  Median      3Q     Max 
-278335  -13436    -426   12439  414096 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) 2.957e+03  1.003e+03   2.949  0.00321 ** 
Sale_Price  7.239e-01  4.164e-03 173.834  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 29270 on 4140 degrees of freedom
Multiple R-squared:  0.8795,    Adjusted R-squared:  0.8795 
F-statistic: 3.022e+04 on 1 and 4140 DF,  p-value: < 2.2e-16
p.df<- data.frame(Sale_Price=310000, HtdSqFt=2629)
predict(mod1, p.df,se.fit=T, level=.05, interval = "prediction")
$fit
       fit      lwr      upr
1 227368.7 225532.5 229204.9

$se.fit
[1] 603.9863

$df
[1] 4140

$residual.scale
[1] 29274.44

A linear model of price and square footage combined can also be used. Using that less direct approach an appraisal a value of $235,555 is estimated.

mod0<- lm(appraised ~ Sale_Price + HtdSqFt, data = data)
summary(mod0)

Call:
lm(formula = appraised ~ Sale_Price + HtdSqFt, data = data)

Residuals:
    Min      1Q  Median      3Q     Max 
-235374  -12669    1040   13370  361617 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept) -1.835e+04  1.394e+03  -13.16   <2e-16 ***
Sale_Price   6.045e-01  6.941e-03   87.09   <2e-16 ***
HtdSqFt      2.530e+01  1.207e+00   20.96   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 27840 on 4139 degrees of freedom
Multiple R-squared:  0.8911,    Adjusted R-squared:  0.891 
F-statistic: 1.693e+04 on 2 and 4139 DF,  p-value: < 2.2e-16
p.df<- data.frame(Sale_Price=310000, HtdSqFt=2629)
predict(mod0, p.df,se.fit=T, level=.05, interval = "prediction")
$fit
       fit      lwr      upr
1 235554.9 233808.6 237301.2

$se.fit
[1] 694.5933

$df
[1] 4139

$residual.scale
[1] 27838.18

Additional condition factors

The construction of the home is listed as “above average quality”. Unfortunately deferred maintenance on the property has lowered the quality and value of the building.

Total deferred maintenance on the property is expected to lower the value of the home by $28,000.

LS0tCnRpdGxlOiAiU3VwcG9ydGluZyBtYXJrZXQgaW5mb3JtYXRpb24gZm9yIGFwcGVhbCBvZiAyMDE3IGFzc2Vzc21lbnQgZm9yIHBhcmNlbCAwNjA5Mi0wNTAtMDA3IgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdAogIHBkZl9kb2N1bWVudDogZGVmYXVsdAotLS0KCgpQYXJjZWwgMDYwOTItMDUwLTAwNyBpcyBvdmVydmFsdWVkIGJ5IGJldHdlZW4gJDE5LDAwMCBhbmQgJDI4LDAwMCBmcm9tIHRoZSBwcm9wb3NlZCBUUklNIGFzc2Vzc21lbnQgZm9yIDIwMTcgYmFzZWQgb24gYSBkZXRhaWxlZCBtYXJrZXQgYW5hbHlzaXMgb2YgcHJvcGVydHkgYXBwcmFpc2VyJ3MgZGF0YS4KCk11bHRpcGxlIG1ldGhvZHMgd2VyZSB1c2VkIHRvIGRldGVybWluZSB0aGUgb3ZlcnZhbHVhdGlvbi4gU2ltaWxhciBob21lcyBzb2xkIGluIDIwMTYgYW5kIDIwMTcgd2VyZSBzZWxlY3RlZC4gVGhpcyBob21lIHdhcyBpbiB0aGUgNTB0aCBwZXJjZW50aWxlIGluIHRlcm1zIG9mIGl0cyBwcmljZSBwZXIgc3F1YXJlIGZvb3QsIG1lYW5pbmcgdGhlIG1hcmtldCBkZXRlcm1pbmVkIGl0IHdhcyBhbiBhdmVyYWdlIHF1YWxpdHkgaG9tZS4KCkhvd2V2ZXIgdGhlIGhvbWUgd2FzIGluIHRoZSA3OXRoIHBlcmNlbnRpbGUgYmFzZWQgb24gdGhlIHJhdGlvIG9mIGFwcHJhaXNlZCB2YWx1ZSB0byBzYWxlcyBwcmljZSwgYW5kIGluIHRoZSA3NXRoIHBlcmNlbnRpbGUgYmFzZWQgb24gIGl0cyByYXRpbyBvZiBhcHByYWlzZWQgdmFsdWUgdG8gc3F1YXJlIGZvb3RhZ2UuIEFkZGl0aW9uYWxseSwgdGhlIGhvbWUgaXMgbGlzdGVkIGFzIGFuICJhYm92ZSBhdmVyYWdlIHF1YWxpdHkgaG9tZSIgYnV0IGlzIGhhcyAkMjgsMDAwIGluIGRlZmVycmVkIG1haW50ZW5hbmNlIGFuZCByZXBhaXJzIHRoYXQgYXJlIG5lZWRlZC4gCgpMaW5lYXIgbW9kZWxpbmcgb2YgYWxsIHNpbWlsYXIgcHJvcGVydGllcyBzb2xkIGluIHRoZSBsYXN0IHR3byB5ZWFycyBzdWdnZXN0cyB0aGF0IHRoZSBmYWlyIHZhbHVlIG9mIHRoZSBob21lIGlzIGJldHdlZW4gJDIyNywzNjkgYW5kICQyMzUsNTU1LiBCYXNlZCBvbiBkZWZlcnJlZCBtYWludGVuYW5jZSB0aGUgdmFsdWUgd291bGQgYmUgJDIyNiwxMDAuIEJ5IGFsbCBtZXRyaWNzIHRoaXMgcHJvcGVydHkgaXMgd29ydGggbGVzcyBsZXNzIHRoYW4gdGhlIHByb3Bvc2VkIHRheCBhcHByYWlzYWwgb2YgJDI1NCwxMDAuCgpCZWNhdXNlIHNhbGVzIHByaWNlIGlzIHRoZSBiZXN0IHByZWRpY3RvciBvZiB0cnVlIG1hcmtldCB2YWx1ZSBhbmQgdGhpcyBob21lIHNvbGQgbGVzcyB0aGFuIDMgbW9udGhzIGFnbywgd2UgdGhpbmsgdGhhdCB0aGUgYXNzZXNzZWQgdmFsdWUgb2YgdGhlIHByb3BlcnR5IGZvciAyMDE3IHNob3VsZCBiZSAkMjI3LDM2OS4KCgojIyBEYXRhIGZvciBjb21wYXJpc29uClRvIGNvbXBhcmUgdGhlIGFwcHJhaXNhbCBmb3IgUGFyY2VsIDA2MDkyLTA1MC0wMDcgdG8gb3RoZXIgcmVjZW50bHkgc29sZCBob21lcyBpbiB0aGUgY291bnR5LCBkYXRhIHdlcmUgZG93bmxvYWRlZCBmcm9tIHRoZSBBbGFjaHVhIENvdW50eSBQcm9wZXJ0eSBBcHByYWlzZXIncyBEYXRhYmFzZSBvbiBPY3RvYmVyIDQsIDIwMTcgdXNpbmcgdGhlIGZvbGxvd2luZyBzZWFyY2ggY3JpdGVyaWE6CgoqIFByb3BlcnR5IHVzZSBjb2RlOiBSZXNpZGVudGlhbAoqIFNhbGVzIHByaWNlIHJhbmdlOiAkNTAsMDAwIHRvICQxLDAwMCwwMDAKKiBWYWNhbnQgb3IgSW1wcm92ZWQ6IEltcHJvdmVkCiogU2FsZXMgRGF0ZTogMDEvMjAxNiAtIDEwLzIwMTcKKiBCZWRyb29tczogMy00CiogVHlwZTogU2luZ2xlIEZhbWlseQoKRGF0YSB3YXMgY2xlYW5lZCB1cCBieSByZW1vdmluZyByZWNvcmRzIHdpdGggbWlzc2luZyB2YWx1ZXMsIGFuZCBob21lcyB3aXRoIGV4dHJlbWVseSBsb3cgdGF4IHZhbHVhdGlvbnMgcmVsYXRpdmUgdG8gc2FsZXMgcHJpY2UuIEFmdGVyIGZpbHRlcmluZywgNDE0MiBob21lcyB3ZXJlIHVzZWQgZm9yIGNvbXBhcmlzb24uIFRoZSBleGFjdCB0cmFuc2Zvcm1hdGlvbnMgd2VyZTogCmBgYHtyfQojIExvYWQgUiBsaWJyYXJpZXMKbGlicmFyeSgiZ2dwbG90MiIpCmxpYnJhcnkoInZpcmlkaXMiKQpsaWJyYXJ5KCJ2aXJpZGlzTGl0ZSIpCgojIE9uIE9jdG9iZXIgNCwgMjAxNyBTYWxlcyBkYXRhIHdlcmUgZG93bmxvYWRlZCBmcm9tIHRoZSBwcm9wZXJ5IGFwcHJhaXNlcidzIHNpdGUKIyBhbmQgYXJlIHN0b3JlZCBvbiBnb29nbGUgZHJpdmUsIGFjY2Vzc2VkIHdpdGggdGhpcyB1cmwKZGF0YSA8LSByZWFkLmNzdigiaHR0cDovL2dkdXJsLmNvbS9Ja2lQIikKCiMgU2V0IGRhdGUgZm9ybWF0CmRhdGEkU2FsZV9EYXRlIDwtYXMuRGF0ZShkYXRhJFNhbGVfRGF0ZSwgZm9ybWF0PSIlbS8lZC8leSIpCgojIGZpbHRlciBvdXQgcmVjb3JkcyB3aXRoIE5BJ3MgYW5kIGhvbWVzIG92ZXIgODAwawpkYXRhPC1kYXRhW2lzLm5hKGRhdGEkSHRkU3FGdCkgPT1GQUxTRSxdCmRhdGE8LWRhdGFbZGF0YSRIdGRTcUZ0ID4gMCxdCmRhdGE8LWRhdGFbaXMubmEoZGF0YSRCbGRnX1ZhbHVlKT09RkFMU0UsXQpkYXRhPC1kYXRhW2lzLm5hKGRhdGEkU2FsZV9QcmljZSk9PUZBTFNFLF0KZGF0YTwtZGF0YVtkYXRhJFNhbGVfUHJpY2U8ODAwMDAwLF0KZGF0YTwtZGF0YVtpcy5uYShkYXRhJFNhbGVfRGF0ZSk9PUZBTFNFLF0KCiMgQ2FsY3VsYXRlIGNvc3QgcGVyIGhlYXRlZCBzcXVhcmUgZm9vdApkYXRhJGNvc3RQZXJTcUZ0PC1kYXRhJFNhbGVfUHJpY2UvZGF0YSRIdGRTcUZ0CgojIEFkZCBsYW5kLCBleHRyYXMgYW5kIGJ1aWxkaW5nIHZhbHVlIHRvZ2V0aGVyIHRvIGdldCBhcHByYWlzZWQgdmFsdWUKZGF0YSRhcHByYWlzZWQgPC0gZGF0YSRMYW5kX1ZhbHVlICsgZGF0YSRCbGRnX1ZhbHVlICtkYXRhJE9CWEZWYWx1ZQoKIyBGaWx0ZXIgb3V0IGV4dHJlYW1seSBsb3cgdmFsdWUgc2FsZXMgdGhhdCBhcmUgbGlrZWx5IHRvIGJlIGludGVyZmFtaWx5IHRyYW5zZmVycyBldGMuCmRhdGE8LWRhdGFbZGF0YSRTYWxlX1ByaWNlPjUwMDAwLF0KCiMgZmlsdGVyIGhvbWVzIHdpdGggZXh0cmVhbWx5IGhpZ2ggc2FsZSBwcmljZXMgcmVsYXRpdmUgdG8gYXBwcmFpc2VkIHZhbHVlcwojICh0ZWFyIGRvd25zIGV0Yy4pCmRhdGE8LWRhdGFbYWJzKGxvZzEwKGRhdGEkU2FsZV9QcmljZS9kYXRhJGFwcHJhaXNlZCkpPDAuNSwgXQpgYGAKCiMjIyBQcm9wb3NlZCB0YXggYXBwcmFpc2FsIGZvciBwYXJjZWwgMDYwOTItMDUwLTAwNwpgYGB7cn0KaG9pIDwtIGRhdGEuZnJhbWUoU2FsZV9EYXRlPWFzLkRhdGUoIjIwMTctMDctMjEiKSwgYXBwcmFpc2VkPTI1NDEwMCwgSHRkU3FGdD0yNjI5LAogICAgICAgICAgICAgICAgICBjb3N0UGVyU3FGdD0zMTAwMDAvMjYyOSwgU2FsZV9QcmljZT0zMTAwMDAsIExhbmRfVmFsdWU9MzYwMDAsIAogICAgICAgICAgICAgICAgICBCbGRnX1ZhbHVlPTIwODIwMCwgT0JYRlZhbHVlPTk5MDAgKQpgYGAKCgojIyMgUHJpY2UgcGVyIHNxdWFyZSBmb290IG92ZXIgdGltZSBmb3IgNCBhbmQgMyBiZWRyb29tIGhvbWVzIGluIEFsYWNodWEgQ291bnR5IDIwMTYtMjAxNy4KClRoZSByZWQgZG90IGluZGljYXRlcyBwYXJjZWwgMDYwOTItMDUwLTAwNy4gUGFyY2VsIDA2MDkyLTA1MC0wMDcgaXMgYW4gYXZlcmFnZSAzIG9yIDQgYmVkcm9vbSBob21lIGluIHRlcm1zIG9mIGl0J3MgcHJpY2UgcGVyIHNxdWFyZSBmb290LiBXaGVuIGhvbWVzIHNvbGQgYSBtb250aCBiZWZvcmUgb3IgYWZ0ZXIgaXQgYXJlIHNlbGVjdGVkLCB0aGUgaG9tZSBpcyBpbiB0aGUgNTAlIHBlcmNlbnRpbGU7IGl0IGlzIGFuIGV4YWN0bHkgYXZlcmFnZSB2YWx1ZSBob21lIGdpdmVuIGl0cyBzaXplLgoKYGBge3J9CmdncGxvdChkYXRhPWRhdGEsIGFlcyh4PVNhbGVfRGF0ZSwgeT1jb3N0UGVyU3FGdCkpICsgCiAgZ2VvbV9wb2ludChhZXMoY29sb3I9bG9nMTAoU2FsZV9QcmljZSkpLCBzaXplPTAuNSkgKyAKICBzY2FsZV9jb2xvcl92aXJpZGlzKCkgKyAKICBnZW9tX3Ntb290aChtZXRob2Q9ImxvZXNzIikgKwogIHlsYWIoIkRvbGxhcnMgcGVyIFNxdWFyZSBGb290IikgKwogIHhsYWIoIlllYXIiKSArCiAgZ2d0aXRsZSgiUHJpY2UgcGVyIHNxdWFyZSBmb290IGZvciA0IGFuZCAzIGJlZHJvb20gaG9tZXMgaW4gQWxhY2h1YSBDb3VudHkgMjAxNi0yMDE3IikgKwogIGdlb21fcG9pbnQoZGF0YSA9IGhvaSwgY29sb3VyID0gInJlZCIpCgoKYGBgCgojIyMgVGhlIGhvbWUgaXMgaW4gdGhlIDUwdGggcGVyY2VudGlsZSBpbiB0ZXJtcyBvZiBpdCdzIHNhbGVzIHByaWNlIHBlciBzcXVhcmUgZm9vdAoKYGBge3J9CiMgU2VsZWN0IHRoZSBtb250aCBiZWZvcmUgYW5kIGFmdGVyIHB1cmNoYXNlIHNpbmNlIHByaWNlIHBlciBzcXVhcmUgZm9vdCBpcyB0cmVuZGluZyB1cApzZGF0YSA8LWRhdGFbKGRhdGEkU2FsZV9EYXRlIDwgIjIwMTctMDgtMjEiICYgZGF0YSRTYWxlX0RhdGUgPiAiMjAxNy0wNi0yMSIpLF0KIyBDYWxjdWxhdGUgdGhlIHBlcmNlbnRpbGUKZWNkZihzZGF0YSRjb3N0UGVyU3FGdCkoaG9pJGNvc3RQZXJTcUZ0KQpgYGAKCiMjIyBQYXJjZWwgMDYwOTItMDUwLTAwNyBpcyBhcHByYWlzZWQgaW4gdGhlIDc5dGggcGVyY2VudGlsZSBnaXZlbiB0aGUgcmF0aW8gb2YgaXRzIHNhbGVzIHByaWNlIHRvIGFwcHJhaXNlZCB2YWx1ZQpUaGUgcmF0aW8gZm9yIGFsbCBwcm9wZXJ0aWVzIGlzIHNlZW4gaW4gdGhlIGhpc3RvZ3JhbS4gVGhlIGJsdWUgbGluZSByZXByZXNlbnRzIHRoZSBtZWRpYW4gcmF0aW8gYW5kIHRoZSByZWQgbGluZSByZXByZXNlbnRzIFBhcmNlbCAwNjA5Mi0wNTAtMDA3IHdoaWNoIGZhbGxzIGluIHRoZSA3OXRoIHBlcmNlbnRpbGUuCmBgYHtyfQoKZ2dwbG90KGRhdGEgPSBkYXRhLCBhZXMoeD0oYXBwcmFpc2VkL1NhbGVfUHJpY2UpKSkgKyAKICAgICAgICBnZW9tX2hpc3RvZ3JhbShiaW5zPTEwMCkgKwogICAgICAgIHhsYWIoIlRoZSByYXRpbyBvZiBhcHByYWlzZWQgdmFsdWUgdG8gc2FsZSBwcmljZSIpICsKICAgICAgICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQ9aG9pJGFwcHJhaXNlZC9ob2kkU2FsZV9QcmljZSxjb2xvcj0icmVkIikgKyAKICAgICAgICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQ9bWVkaWFuKGRhdGEkYXBwcmFpc2VkL2RhdGEkU2FsZV9QcmljZSksIGNvbG9yPSJibHVlIikgKwogICAgICAgIGdndGl0bGUoIlRoZSByYXRpbyBvZiBhcHByYWlzZWQgdmFsdWUgdG8gc2FsZXMgcHJpY2UiKQpwZXJjZW50aWxlID0gZWNkZihkYXRhJGFwcHJhaXNlZC9kYXRhJFNhbGVfUHJpY2UpKGhvaSRhcHByYWlzZWQvaG9pJFNhbGVfUHJpY2UpCnBhc3RlKCJQYXJjZWwgMDYwOTItMDUwLTAwNyBpcyBpbiB0aGUiLCBwZXJjZW50aWxlICwicGVyY2VudGlsZSIpCmBgYAoKCiMjIyBQYXJjZWwgMDYwOTItMDUwLTAwNyBpcyBhcHByYWlzZWQgaXMgaGlnaGVyIHRoYW4gYXZlcmFnZSBnaXZlbiBpdHMgc2FsZXMgcHJpY2UuCgpgYGB7cn0KZ2dwbG90KGRhdGE9IGRhdGEsIGFlcyh4PVNhbGVfUHJpY2UsIHk9IGFwcHJhaXNlZCkpICsKICBnZW9tX3BvaW50KGFlcyhjb2xvcj1sb2cxMChIdGRTcUZ0KSksICBzaXplPTAuNSkgKyAKICBzY2FsZV9jb2xvcl92aXJpZGlzKCkgKyAKICBnZW9tX3Ntb290aChtZXRob2QgPSJsbSIpICsKICB5bGFiKCJBcHByYWlzZWQgdmFsdWUiKSArCiAgeGxhYigiU2FsZSBwcmljZSIpICsKICBnZW9tX3BvaW50KGRhdGEgPSBob2ksIGNvbG91ciA9ICJyZWQiKQpgYGAKCiMjIyBQYXJjZWwgMDYwOTItMDUwLTAwNyBpcyBhcHByYWlzZWQgaW4gdGhlIDc1JSBwZXJjZW50aWxlIGdpdmVuIGl0cyBzcXVhcmUgZm9vdGFnZQoKYGBge3J9CgpnZ3Bsb3QoZGF0YSA9IGRhdGEsIGFlcyh4PShhcHByYWlzZWQvSHRkU3FGdCkpKSArIAogICAgICAgICBnZW9tX2hpc3RvZ3JhbShiaW5zPTEwMCkgKwogICAgICAgIHhsYWIoIlRoZSByYXRpbyBvZiBhcHByYWlzZWQgdmFsdWUgdG8gaGVhdGVkIHNxdWFyZSBmZWV0IikgKwogICAgICAgIGdlb21fdmxpbmUoeGludGVyY2VwdD1ob2kkYXBwcmFpc2VkL2hvaSRIdGRTcUZ0LGNvbG9yPSJyZWQiKSArIAogICAgICAgIGdlb21fdmxpbmUoeGludGVyY2VwdD1tZWRpYW4oZGF0YSRhcHByYWlzZWQvZGF0YSRIdGRTcUZ0KSwgY29sb3I9ImJsdWUiKSArCiAgICAgICAgZ2d0aXRsZSgiVGhlIHJhdGlvIG9mIGFwcHJhaXNlZCB2YWx1ZSB0byBoZWF0ZWQgc3F1YXJlIGZlZXQiKQoKcGVyY2VudGlsZSA9IGVjZGYoZGF0YSRhcHByYWlzZWQvZGF0YSRIdGRTcUZ0KShob2kkYXBwcmFpc2VkL2hvaSRIdGRTcUZ0KQpwYXN0ZSgiUGFyY2VsIDA2MDkyLTA1MC0wMDcgaXMgaW4gdGhlIiwgcGVyY2VudGlsZSAsInBlcmNlbnRpbGUiKQoKYGBgCgoKIyMjIFdoYXQgaXMgYSBmYWlyIGFwcHJhc2lhbCBvZiB0aGUgcHJvcGVydHk/CldpdGggc2FsZXMgcHJpY2UgYWxvbmUsIGEgbGluZWFyIG1vZGVsIGFwcHJhaXNlcyB0aGUgcGFyY2VsIGF0ICQyMjcsMzY5LiBHaXZlbiB0aGF0IHNhbGVzIHByaWNlIGlzIHdoYXQgZGV0ZXJtaW5lcyBtYXJrZXQgdmFsdWUgYW5kIHRoYXQgdGhpcyBob21lIHNvbGQgbGVzcyB0aGFuIDMgbW9udGhzIGFnbywgd2UgcmVjb21tZW5kIHVzaW5nIHRoYXQgdmFsdWF0aW9uIG9mICQyMjcuMzY5LgpgYGB7cn0KbW9kMTwtIGxtKGFwcHJhaXNlZCB+IFNhbGVfUHJpY2UsIGRhdGEgPSBkYXRhKQpzdW1tYXJ5KG1vZDEpCnAuZGY8LSBkYXRhLmZyYW1lKFNhbGVfUHJpY2U9MzEwMDAwLCBIdGRTcUZ0PTI2MjkpCnByZWRpY3QobW9kMSwgcC5kZixzZS5maXQ9VCwgbGV2ZWw9LjA1LCBpbnRlcnZhbCA9ICJwcmVkaWN0aW9uIikKYGBgCkEgbGluZWFyIG1vZGVsIG9mIHByaWNlIGFuZCBzcXVhcmUgZm9vdGFnZSBjb21iaW5lZCBjYW4gYWxzbyBiZSB1c2VkLiBVc2luZyB0aGF0IGxlc3MgZGlyZWN0IGFwcHJvYWNoIGFuIGFwcHJhaXNhbCBhIHZhbHVlIG9mICQyMzUsNTU1IGlzIGVzdGltYXRlZC4gCmBgYHtyfQptb2QwPC0gbG0oYXBwcmFpc2VkIH4gU2FsZV9QcmljZSArIEh0ZFNxRnQsIGRhdGEgPSBkYXRhKQpzdW1tYXJ5KG1vZDApCnAuZGY8LSBkYXRhLmZyYW1lKFNhbGVfUHJpY2U9MzEwMDAwLCBIdGRTcUZ0PTI2MjkpCnByZWRpY3QobW9kMCwgcC5kZixzZS5maXQ9VCwgbGV2ZWw9LjA1LCBpbnRlcnZhbCA9ICJwcmVkaWN0aW9uIikKYGBgCgoKCiMjIEFkZGl0aW9uYWwgY29uZGl0aW9uIGZhY3RvcnMKClRoZSBjb25zdHJ1Y3Rpb24gb2YgdGhlIGhvbWUgaXMgbGlzdGVkIGFzICJhYm92ZSBhdmVyYWdlIHF1YWxpdHkiLiBVbmZvcnR1bmF0ZWx5IGRlZmVycmVkIG1haW50ZW5hbmNlIG9uIHRoZSBwcm9wZXJ0eSBoYXMgbG93ZXJlZCB0aGUgcXVhbGl0eSBhbmQgdmFsdWUgb2YgdGhlIGJ1aWxkaW5nLgoKKiBUaGUgSFZBQyBzeXN0ZW0gd2FzIGluc3RhbGxlZCBpbiAxOTk5IGFuZCBpcyBhdCB0aGUgZW5kIG9mIGl0cyBzZXJ2aWNlYWJsZSBsaWZlLiBFc3RpbWF0ZWQgcmVwbGFjZW1lbnQgY29zdCBpcyAkODAwMC4KKiBUaGUgd2F0ZXIgaGVhdGVyIHdhcyBpbnN0YWxsZWQgaW4gMTk5OSBhbmQgaXQgYXQgdGhlIGVuZCBvZiBpdHMgc2VydmljZWFibGUgbGlmZS4gRXN0aW1hdGVkIHJlcGxhY2VtZW50IGNvc3QgaXMgJDEwMDAuCiogVGhlIHJvb2Ygd2FzIGluc3RhbGxlZCBwcmlvciB0byAyMDAzICh0aGUgZXhhY3QgZGF0ZSBpcyBub3Qga25vd24pIGFuZCBpcyBpbiBuZWVkIG9mIHJlcGxhY2VtZW50LiBFc3RpbWF0ZWQgcmVwbGFjZW1lbnQgY29zdCBpcyAkMTUsMDAwLgoqIFRoZSBnYXJhZ2UgZG9vciBoYXMgd2F0ZXIgZGFtYWdlIGFuZCBpcyBpbiBuZWVkIG9mIHJlcGxhY2VtZW50LiBFc3RpbWF0ZWQgcmVwbGFjZW1lbnQgY29zdCBpcyAkMjAwMC4KKiBQb29sIGRlY2tpbmcgaXMgY3JhY2tlZCBhbmQgaW4gbmVlZCBvciByZXBhaXIuIEV4cGVjdGVkIHJlcGFpciBjb3N0IGlzICQyMDAwLgoKVG90YWwgZGVmZXJyZWQgbWFpbnRlbmFuY2Ugb24gdGhlIHByb3BlcnR5IGlzIGV4cGVjdGVkIHRvIGxvd2VyIHRoZSB2YWx1ZSBvZiB0aGUgaG9tZSBieSAkMjgsMDAwLgoKCgoKCg==