Goal

The goal is to reproduce the calculation reported in Figure 2 in “Which Teachers Choose a Defined Contribution Pension Plan? Evidence from the Florida Retirement System” (Chingos and West, 2015) [PDF].

All calculation is based on a person starting working at age 32.

DC Plan

Compute the account balance for someone starting working at age 32, enrolled in a DC plan and leaving the system after working for T years where T ranges from 1 to 30.

Parameters

Factors relevant to DC plan

  • m0: initial salary
  • a: annual salary increasing rate
  • contribution: annual contribution rate (including the matching rate from employer)
  • ave.r: annual investment return rate

Set some initial parameters.

m0 = 60000
a = 0.03
ave.r = 5 / 100
contribution = 15.6 / 100
T = 30

Code

  • xValues: Years of Consecutive Service Prior to Separation (start age = 32). In the Florida paper, this value ranges from 1 to 30.

  • yValues: Account balance at age 62.

BalanceDC= function(T, ave.r){
  xValues = c(1:T) + 32
  yValues = rep(0, T)
  
  for (t in 1:T){
    AccountBalance = 0
    mT = m0
    for(j in 1:t){
      anualDeposit = mT * contribution
      monthlyDeposit = anualDeposit/12
    
      M = exp(log(1+ave.r)/12)
      for (m in 1:12){
        AccountBalance = AccountBalance * M + monthlyDeposit
      }
      mT = mT * (1 + a)
    }
    
    AccountBalance = AccountBalance * (1 + ave.r)^(T-t)    
    yValues[t] = AccountBalance
  }
   
 return(data.frame(x=xValues, y=yValues))
}

Plot

test = BalanceDC(T, ave.r)
x = test$x
y = test$y

plot (x, y,
        xlab = "Years of Service",
        ylab = "Pension Wealth",
        main = "Net Present Value of DC Benefits at age 62")

DB Plan

Assume a person starts working at age 32, enrolled in a DC plan and leeaves the system after working for T years where T ranges from 1 to 30.

Parameters

Factors relevant to DB plan

  • m0: initial salary
  • a: annual salary increasing rate
  • pension : annual pension income
  • discount.r: discount rate minus the pension annual increase rate. For example, if discount rate is 3% but also pension will increase annually with 3%, then discount.r = 0.

The formula for pension varies from plan to plan. It is usually equal to the product of the following two quantities (determined by the plan):

  • ave.m: average salary. For example, the Florida teacher’s DB plan defines ave.m to be the average salary over the last 5 years of the teacher’s career.

  • pension.percent: pension percentage. For example, the Florida teacher’s DB plan defines this percentage to be equal to 1.6 times T when T is bigger than 5 and 0 when T is less than or equal to 5.

Some initial values

m0 = 60000
a = 0.03
T = 30
pension.percent = 1.6 / 100

Code

  • xValues: Years of Consecutive Service Prior to Separation (start age = 32). In the Florida paper, this value ranges from 1 to 30.

  • yValues: Net present value (NPV) of the corresponding pension income

Our calculation involves two steps.

  • Step 1: compute the annual pension income, which is the product of ave.m and pension.percent.

  • Step 2: compute the (expected) NPV of the stream of pension income from age 63 to age 119 using the Actuarial Life Table from SSA website; we use the death rate averaged over male and female. The NPV formula is given below \[ \sum_{\text{age} = 63}^{119} ... = \sum_{t = 63-62}^{(119 - 62)} \text{annual-pension-income} \times p_t \times v^{t - 0.5} \] where \(v\) \[ v = \frac{1}{1 + \text{discount.rate}} \] is the discount factor and \[ \begin{aligned} p_t = & \mathbb{P}(\text{still alive at age} (62+t) \mid \text{alive at age } 62) \\ = & \quad \mathbb{P}(\text{surve for a year} \mid \text{alive at age } 62) \\ & \times \mathbb{P}(\text{surve for a year} \mid \text{alive at age } 63) \times \\ & \times \cdots \times \mathbb{P}(\text{surve for a year} \mid \text{alive at age } 62+t-1) \\ = & \prod_{j=1}^t \Big [ 1 - \mathbb{P} \big (\text{die within a year } \mid \text{alive at age } (62 + j-1) \big ) \Big ]. \end{aligned} \]

The probabilities in the last row above can be find from the Actuarial Life Table.

First, compute the probabilities.

data = read.table("mtable.txt", sep="\t")
names(data) = c("Age", "m.prob", "m.lives", "m.exp", 
                "f.prob", "f.lives", "f.exp")
newdata = data.frame(Age = data$Age, 
                     prob = data$m.prob + data$f.prob)
probs = newdata$prob[newdata$Age >= 62]
rm("data", "newdata")

Then, compute NPV for DB plan.

BalanceDB= function(T, discount.r){
  xValues = c(1:T) + 32
  yValues = rep(0, T)
  
  if (T < 6) {
    return(data.frame(x=xValues, y=yValues))
    exit
  }
  
  # Compute the annual pension income 
  pension = rep(0, T)
  for (t in 6:T){
    
    # compute ave.m: the average of the last five years' salaries
    tmp = tail(1:t, 5)
    tmp = tmp - 0.5
    ave.m = mean(m0 * (1 + a)^tmp)
    
    # compute pension income
    pension[t]  = ave.m * pension.percent * t
  }
  
  # Compute NPV of pension income
  
  pt = 1 
  v = 1 / (1 + discount.r)
  vt = v^{- 0.5}
  
  for(t in 1:length(probs)){
    
    pt = pt * (1 - probs[t])
    vt = vt * v
    yValues = yValues + pension * pt * vt
  }
   
 return(data.frame(x = xValues, y = yValues))
}

Plot


discount.r = 0.03 - 0.03
# discount.r = 0.07 - 0.03 
test = BalanceDB(T, discount.r)
x = test$x
y = test$y
plot(x, y, type="n", yaxt="n", 
     xlab = "Years of Service",
     ylab = "Pension Wealth (in Dollars)",
     main = "Net Present Value of DC Benefits at age 62")
lines(x, y, lty = 2)
points(x, y, pty = 2)
ytick = (1:11)*100000
axis(2, at = ytick, las = 2, cex.axis = 0.6,
     labels = formatC(ytick, big.mark = ",", format="f", digits = 0))

LS0tCnRpdGxlOiAiUGxhbiBDb21wYXJzaW9uIgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazoKICAgIHRoZW1lOiByZWFkYWJsZQogICAgdG9jOiBUUlVFCiAgICB0b2NfZmxvYXQ6IFRSVUUKLS0tCgojIyBHb2FsCgpUaGUgZ29hbCBpcyB0byByZXByb2R1Y2UgdGhlIGNhbGN1bGF0aW9uIHJlcG9ydGVkIGluIEZpZ3VyZSAyIGluICJXaGljaCBUZWFjaGVycyBDaG9vc2UgYSBEZWZpbmVkIENvbnRyaWJ1dGlvbiBQZW5zaW9uIFBsYW4/ICBFdmlkZW5jZSBmcm9tIHRoZSBGbG9yaWRhIFJldGlyZW1lbnQgU3lzdGVtIiAoW0NoaW5nb3MgYW5kIFdlc3QsIDIwMTVdKGh0dHBzOi8vZXJpYy5lZC5nb3YvP2lkPUVKMTA1ODM1MSkpIFtbUERGXShodHRwczovL3d3dy5oa3MuaGFydmFyZC5lZHUvc2l0ZXMvZGVmYXVsdC9maWxlcy9UYXVibWFuL1BFUEcvcmVzZWFyY2gvUEVQRzEzXzAxLnBkZildLiAKCgpBbGwgY2FsY3VsYXRpb24gaXMgYmFzZWQgb24gYSBwZXJzb24gc3RhcnRpbmcgd29ya2luZyBhdCBhZ2UgMzIuIAoKCiMjIERDIFBsYW4KCkNvbXB1dGUgdGhlIGFjY291bnQgYmFsYW5jZSBmb3Igc29tZW9uZSBzdGFydGluZyB3b3JraW5nIGF0IGFnZSAzMiwgZW5yb2xsZWQgaW4gYSBEQyBwbGFuIGFuZCBsZWF2aW5nIHRoZSBzeXN0ZW0gYWZ0ZXIgd29ya2luZyBmb3IgYFRgIHllYXJzIHdoZXJlIGBUYCByYW5nZXMgZnJvbSAxIHRvIDMwLiAKCiMjIyBQYXJhbWV0ZXJzCgpGYWN0b3JzIHJlbGV2YW50IHRvIERDIHBsYW4KCi0gYG0wYDogaW5pdGlhbCBzYWxhcnkKLSBgYWA6IGFubnVhbCBzYWxhcnkgaW5jcmVhc2luZyByYXRlCi0gYGNvbnRyaWJ1dGlvbmA6IGFubnVhbCBjb250cmlidXRpb24gcmF0ZSAoaW5jbHVkaW5nIHRoZSBtYXRjaGluZyByYXRlIGZyb20gZW1wbG95ZXIpCi0gYGF2ZS5yYDogYW5udWFsIGludmVzdG1lbnQgcmV0dXJuIHJhdGUKClNldCBzb21lIGluaXRpYWwgcGFyYW1ldGVycy4gCgpgYGB7cn0KbTAgPSA2MDAwMAphID0gMC4wMwphdmUuciA9IDUgLyAxMDAKY29udHJpYnV0aW9uID0gMTUuNiAvIDEwMApUID0gMzAKYGBgCgojIyMgQ29kZQoKLSBgeFZhbHVlc2A6IFllYXJzIG9mIENvbnNlY3V0aXZlIFNlcnZpY2UgUHJpb3IgdG8gU2VwYXJhdGlvbiAoc3RhcnQgYWdlID0gMzIpLiBJbiB0aGUgRmxvcmlkYSBwYXBlciwgdGhpcyB2YWx1ZSByYW5nZXMgZnJvbSAxIHRvIDMwLgoKLSBgeVZhbHVlc2A6IEFjY291bnQgYmFsYW5jZSBhdCBhZ2UgNjIuCgoKYGBge3J9CkJhbGFuY2VEQz0gZnVuY3Rpb24oVCwgYXZlLnIpewogIHhWYWx1ZXMgPSBjKDE6VCkgKyAzMgogIHlWYWx1ZXMgPSByZXAoMCwgVCkKICAKICBmb3IgKHQgaW4gMTpUKXsKICAgIEFjY291bnRCYWxhbmNlID0gMAogICAgbVQgPSBtMAogICAgZm9yKGogaW4gMTp0KXsKICAgICAgYW51YWxEZXBvc2l0ID0gbVQgKiBjb250cmlidXRpb24KICAgICAgbW9udGhseURlcG9zaXQgPSBhbnVhbERlcG9zaXQvMTIKICAgIAogICAgICBNID0gZXhwKGxvZygxK2F2ZS5yKS8xMikKICAgICAgZm9yIChtIGluIDE6MTIpewogICAgICAgIEFjY291bnRCYWxhbmNlID0gQWNjb3VudEJhbGFuY2UgKiBNICsgbW9udGhseURlcG9zaXQKICAgICAgfQogICAgICBtVCA9IG1UICogKDEgKyBhKQogICAgfQogICAgCiAgICBBY2NvdW50QmFsYW5jZSA9IEFjY291bnRCYWxhbmNlICogKDEgKyBhdmUucileKFQtdCkgICAgCiAgICB5VmFsdWVzW3RdID0gQWNjb3VudEJhbGFuY2UKICB9CiAgIAogcmV0dXJuKGRhdGEuZnJhbWUoeD14VmFsdWVzLCB5PXlWYWx1ZXMpKQp9CmBgYAoKIyMjIFBsb3QKCgpgYGB7cn0KdGVzdCA9IEJhbGFuY2VEQyhULCBhdmUucikKeCA9IHRlc3QkeAp5ID0gdGVzdCR5CgpwbG90ICh4LCB5LAogICAgICAgIHhsYWIgPSAiWWVhcnMgb2YgU2VydmljZSIsCiAgICAgICAgeWxhYiA9ICJQZW5zaW9uIFdlYWx0aCIsCiAgICAgICAgbWFpbiA9ICJOZXQgUHJlc2VudCBWYWx1ZSBvZiBEQyBCZW5lZml0cyBhdCBhZ2UgNjIiKQpgYGAKCiMjIERCIFBsYW4KCkFzc3VtZSBhIHBlcnNvbiBzdGFydHMgd29ya2luZyBhdCBhZ2UgMzIsIGVucm9sbGVkIGluIGEgREMgcGxhbiBhbmQgbGVlYXZlcyB0aGUgc3lzdGVtIGFmdGVyIHdvcmtpbmcgZm9yIGBUYCB5ZWFycyB3aGVyZSBgVGAgcmFuZ2VzIGZyb20gMSB0byAzMC4KCiMjIyBQYXJhbWV0ZXJzCgpGYWN0b3JzIHJlbGV2YW50IHRvIERCIHBsYW4KCi0gYG0wYDogaW5pdGlhbCBzYWxhcnkKLSBgYWA6IGFubnVhbCBzYWxhcnkgaW5jcmVhc2luZyByYXRlCi0gYHBlbnNpb25gIDogYW5udWFsIHBlbnNpb24gaW5jb21lCi0gYGRpc2NvdW50LnJgOiBkaXNjb3VudCByYXRlIG1pbnVzIHRoZSBwZW5zaW9uIGFubnVhbCBpbmNyZWFzZSByYXRlLiBGb3IgZXhhbXBsZSwgaWYgZGlzY291bnQgcmF0ZSBpcyAzXCUgYnV0IGFsc28gcGVuc2lvbiB3aWxsIGluY3JlYXNlIGFubnVhbGx5IHdpdGggM1wlLCB0aGVuIGBkaXNjb3VudC5yID0gMGAuCgpUaGUgZm9ybXVsYSBmb3IgYHBlbnNpb25gIHZhcmllcyBmcm9tIHBsYW4gdG8gcGxhbi4gSXQgaXMgdXN1YWxseSBlcXVhbCB0byB0aGUgcHJvZHVjdCBvZiB0aGUgZm9sbG93aW5nIHR3byBxdWFudGl0aWVzIChkZXRlcm1pbmVkIGJ5IHRoZSBwbGFuKTogCgotIGBhdmUubWA6IGF2ZXJhZ2Ugc2FsYXJ5LiBGb3IgZXhhbXBsZSwgdGhlIEZsb3JpZGEgdGVhY2hlcidzIERCIHBsYW4gZGVmaW5lcyBgYXZlLm1gIHRvIGJlIHRoZSBhdmVyYWdlIHNhbGFyeSBvdmVyIHRoZSBsYXN0ICoqNSoqIHllYXJzIG9mIHRoZSB0ZWFjaGVyJ3MgY2FyZWVyLiAKCi0gYHBlbnNpb24ucGVyY2VudGA6IHBlbnNpb24gcGVyY2VudGFnZS4gRm9yIGV4YW1wbGUsIHRoZSBGbG9yaWRhIHRlYWNoZXIncyBEQiBwbGFuIGRlZmluZXMgdGhpcyBwZXJjZW50YWdlIHRvIGJlIGVxdWFsIHRvICoqMS42KiogdGltZXMgYFRgIHdoZW4gYFRgIGlzIGJpZ2dlciB0aGFuIDUgYW5kICoqMCoqIHdoZW4gYFRgIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byA1LiAKCgpTb21lIGluaXRpYWwgdmFsdWVzCgpgYGB7cn0KbTAgPSA2MDAwMAphID0gMC4wMwpUID0gMzAKcGVuc2lvbi5wZXJjZW50ID0gMS42IC8gMTAwCmBgYAoKIyMjIENvZGUKCgotIGB4VmFsdWVzYDogWWVhcnMgb2YgQ29uc2VjdXRpdmUgU2VydmljZSBQcmlvciB0byBTZXBhcmF0aW9uIChzdGFydCBhZ2UgPSAzMikuIEluIHRoZSBGbG9yaWRhIHBhcGVyLCB0aGlzIHZhbHVlIHJhbmdlcyBmcm9tIDEgdG8gMzAuCgotIGB5VmFsdWVzYDogTmV0IHByZXNlbnQgdmFsdWUgKE5QVikgb2YgdGhlIGNvcnJlc3BvbmRpbmcgcGVuc2lvbiBpbmNvbWUKCk91ciBjYWxjdWxhdGlvbiBpbnZvbHZlcyB0d28gc3RlcHMuIAoKLSBTdGVwIDE6IGNvbXB1dGUgdGhlIGFubnVhbCBwZW5zaW9uIGluY29tZSwgd2hpY2ggaXMgdGhlIHByb2R1Y3Qgb2YgYGF2ZS5tYCBhbmQgYHBlbnNpb24ucGVyY2VudGAuCgotIFN0ZXAgMjogY29tcHV0ZSB0aGUgKCoqZXhwZWN0ZWQqKikgTlBWIG9mIHRoZSBzdHJlYW0gb2YgcGVuc2lvbiBpbmNvbWUgZnJvbSBhZ2UgNjMgdG8gYWdlIDExOSB1c2luZyB0aGUgW0FjdHVhcmlhbCBMaWZlIFRhYmxlXShodHRwczovL3d3dy5zc2EuZ292L29hY3QvU1RBVFMvdGFibGU0YzYuaHRtbCNmbjEpIGZyb20gU1NBIHdlYnNpdGU7IHdlIHVzZSB0aGUgZGVhdGggcmF0ZSBhdmVyYWdlZCBvdmVyIG1hbGUgYW5kIGZlbWFsZS4gVGhlIE5QViBmb3JtdWxhIGlzIGdpdmVuIGJlbG93CiQkClxzdW1fe1x0ZXh0e2FnZX0gPSA2M31eezExOX0gLi4uICA9IFxzdW1fe3QgPSA2My02Mn1eeygxMTkgLSA2Mil9IFx0ZXh0e2FubnVhbC1wZW5zaW9uLWluY29tZX0gXHRpbWVzIHBfdCBcdGltZXMgdl57dCAtIDAuNX0KJCQKd2hlcmUgJHYkIAokJCAgCnYgPSBcZnJhY3sxfXsxICsgXHRleHR7ZGlzY291bnQucmF0ZX19CiQkCmlzIHRoZSBkaXNjb3VudCBmYWN0b3IgYW5kCiQkClxiZWdpbnthbGlnbmVkfQpwX3QgID0gJiBcbWF0aGJie1B9KFx0ZXh0e3N0aWxsIGFsaXZlIGF0IGFnZX0gKDYyK3QpIFxtaWQgXHRleHR7YWxpdmUgYXQgYWdlIH0gNjIpIFxcCiA9ICYgXHF1YWQgXG1hdGhiYntQfShcdGV4dHtzdXJ2ZSBmb3IgYSB5ZWFyfSBcbWlkICBcdGV4dHthbGl2ZSBhdCBhZ2UgfSA2MikgXFwKICYgXHRpbWVzICBcbWF0aGJie1B9KFx0ZXh0e3N1cnZlIGZvciBhIHllYXJ9IFxtaWQgXHRleHR7YWxpdmUgYXQgYWdlIH0gNjMpIFx0aW1lcyBcXAomIFx0aW1lcyBcY2RvdHMgXHRpbWVzIFxtYXRoYmJ7UH0oXHRleHR7c3VydmUgZm9yIGEgeWVhcn0gXG1pZCBcdGV4dHthbGl2ZSBhdCBhZ2UgfSA2Mit0LTEpIFxcCiAgPSAmIFxwcm9kX3tqPTF9XnQgXEJpZyBbIDEgLSAgXG1hdGhiYntQfSBcYmlnIChcdGV4dHtkaWUgd2l0aGluIGEgeWVhciB9IFxtaWQgXHRleHR7YWxpdmUgYXQgYWdlIH0gKDYyICsgai0xKSBcYmlnICkgXEJpZyBdLgpcZW5ke2FsaWduZWR9CiQkCgpUaGUgcHJvYmFiaWxpdGllcyBpbiB0aGUgbGFzdCByb3cgYWJvdmUgY2FuIGJlIGZpbmQgZnJvbSB0aGUgW0FjdHVhcmlhbCBMaWZlIFRhYmxlXShodHRwczovL3d3dy5zc2EuZ292L29hY3QvU1RBVFMvdGFibGU0YzYuaHRtbCNmbjEpLiAKCgoKCkZpcnN0LCBjb21wdXRlIHRoZSBwcm9iYWJpbGl0aWVzLiAKCmBgYHtyfQpkYXRhID0gcmVhZC50YWJsZSgibXRhYmxlLnR4dCIsIHNlcD0iXHQiKQpuYW1lcyhkYXRhKSA9IGMoIkFnZSIsICJtLnByb2IiLCAibS5saXZlcyIsICJtLmV4cCIsIAogICAgICAgICAgICAgICAgImYucHJvYiIsICJmLmxpdmVzIiwgImYuZXhwIikKbmV3ZGF0YSA9IGRhdGEuZnJhbWUoQWdlID0gZGF0YSRBZ2UsIAogICAgICAgICAgICAgICAgICAgICBwcm9iID0gZGF0YSRtLnByb2IgKyBkYXRhJGYucHJvYikKcHJvYnMgPSBuZXdkYXRhJHByb2JbbmV3ZGF0YSRBZ2UgPj0gNjJdCnJtKCJkYXRhIiwgIm5ld2RhdGEiKQpgYGAKClRoZW4sIGNvbXB1dGUgTlBWIGZvciBEQiBwbGFuLiAKCmBgYHtyfQpCYWxhbmNlREI9IGZ1bmN0aW9uKFQsIGRpc2NvdW50LnIpewogIHhWYWx1ZXMgPSBjKDE6VCkgKyAzMgogIHlWYWx1ZXMgPSByZXAoMCwgVCkKICAKICBpZiAoVCA8IDYpIHsKICAgIHJldHVybihkYXRhLmZyYW1lKHg9eFZhbHVlcywgeT15VmFsdWVzKSkKICAgIGV4aXQKICB9CiAgCiAgIyBDb21wdXRlIHRoZSBhbm51YWwgcGVuc2lvbiBpbmNvbWUgCiAgcGVuc2lvbiA9IHJlcCgwLCBUKQogIGZvciAodCBpbiA2OlQpewogICAgCiAgICAjIGNvbXB1dGUgYXZlLm06IHRoZSBhdmVyYWdlIG9mIHRoZSBsYXN0IGZpdmUgeWVhcnMnIHNhbGFyaWVzCiAgICB0bXAgPSB0YWlsKDE6dCwgNSkKICAgIHRtcCA9IHRtcCAtIDAuNQogICAgYXZlLm0gPSBtZWFuKG0wICogKDEgKyBhKV50bXApCiAgICAKICAgICMgY29tcHV0ZSBwZW5zaW9uIGluY29tZQogICAgcGVuc2lvblt0XSAgPSBhdmUubSAqIHBlbnNpb24ucGVyY2VudCAqIHQKICB9CiAgCiAgIyBDb21wdXRlIE5QViBvZiBwZW5zaW9uIGluY29tZQogIAogIHB0ID0gMSAKICB2ID0gMSAvICgxICsgZGlzY291bnQucikKICB2dCA9IHZeey0gMC41fQogIAogIGZvcih0IGluIDE6bGVuZ3RoKHByb2JzKSl7CiAgICAKICAgIHB0ID0gcHQgKiAoMSAtIHByb2JzW3RdKQogICAgdnQgPSB2dCAqIHYKICAgIHlWYWx1ZXMgPSB5VmFsdWVzICsgcGVuc2lvbiAqIHB0ICogdnQKICB9CiAgIAogcmV0dXJuKGRhdGEuZnJhbWUoeCA9IHhWYWx1ZXMsIHkgPSB5VmFsdWVzKSkKfQpgYGAKCiMjIyBQbG90CgoKYGBge3J9CgpkaXNjb3VudC5yID0gMC4wMyAtIDAuMDMKIyBkaXNjb3VudC5yID0gMC4wNyAtIDAuMDMgCnRlc3QgPSBCYWxhbmNlREIoVCwgZGlzY291bnQucikKeCA9IHRlc3QkeAp5ID0gdGVzdCR5CmBgYAoKYGBge3J9CnBsb3QoeCwgeSwgdHlwZT0ibiIsIHlheHQ9Im4iLCAKICAgICB4bGFiID0gIlllYXJzIG9mIFNlcnZpY2UiLAogICAgIHlsYWIgPSAiUGVuc2lvbiBXZWFsdGggKGluIERvbGxhcnMpIiwKICAgICBtYWluID0gIk5ldCBQcmVzZW50IFZhbHVlIG9mIERDIEJlbmVmaXRzIGF0IGFnZSA2MiIpCmxpbmVzKHgsIHksIGx0eSA9IDIpCnBvaW50cyh4LCB5LCBwdHkgPSAyKQp5dGljayA9ICgxOjExKSoxMDAwMDAKYXhpcygyLCBhdCA9IHl0aWNrLCBsYXMgPSAyLCBjZXguYXhpcyA9IDAuNiwKICAgICBsYWJlbHMgPSBmb3JtYXRDKHl0aWNrLCBiaWcubWFyayA9ICIsIiwgZm9ybWF0PSJmIiwgZGlnaXRzID0gMCkpCmBgYA==