Função xR1 com especificações para média e desvio-padrão
Função xR2 sem especificações para média e desvio-padrão

Funções


# m = número de amostras observadas.
# n = número de observações de cada amostra.
# y = vetor com as observações, ordenadas por amostra, da variável observada.
# mi = especificação para a média do processo.
# sigma = especificação para o desvio-padrão do processo.


xR1=function(m,n,y,mi,sigma){ 
  if (n>1) { 
    amplit=numeric(m) 
    mat=matrix(y,m,n,byrow=T) 
    media=apply(mat,1,mean) 
    for (i in 1:m) {
  amplit[i]=max(mat[i,])-min(mat[i,])}
 } 
  else { 
    amplit=numeric(m-1) 
    media=y 
    for (i in 2:m) 
      amplit[i-1]=sqrt((y[i]-y[i-1])^2) 
    } 
  
  d2=c(1.1296,1.6918,2.0535,2.3248,2.5404,2.7074, 2.8501,2.9677,3.0737,3.1696)
  d3=c(.8541,.8909,.8800,.8674,.8508, .8326,.8209,.8102,.7978,.7890) 
  LIC1=mi-3*sigma/sqrt(n) 
  LSC1=mi+3*sigma/sqrt(n) 
  if(n>1) { 
    LIC2=d2[n-1]*sigma-3*d3[n-1]*sigma 
    LSC2=d2[n-1]*sigma+3*d3[n-1]*sigma 
    if (LIC2 < 0) 
      LIC2=0 
    } else { 
      LIC2=d2[n]*sigma-3*d3[n]*sigma 
      LSC2=d2[n]*sigma+3*d3[n]*sigma 
      if (LIC2 < 0)
        LIC2=0
      }
  
  par(mfrow=c(2,1)) 
  amostra1=matrix(rep(seq(1,m),4),m,4,byrow=F)
  if (n>1) amostra2=amostra1 else amostra2=amostra1[-1,] 
  xbar=cbind(rep(mi,m),rep(LIC1,m),rep(LSC1,m),media) 
  if (n>1) { 
    rbar=cbind(rep(sigma,m),rep(LIC2,m),rep(LSC2,m),amplit) 
    } 
  else rbar=cbind(rep(sigma,m-1),rep(LIC2,m-1), 
                  rep(LSC2,m-1),amplit) 
  
  matplot(amostra2,rbar,type="o",ylab="Amplitude",
          col=c("black","red","red","blue"),
          ylim=c(min(rbar),max(rbar)),
          xlab="Amostras",main="Gráfico R",pch=20, lty=1, lwd=2)
  
  matplot(amostra1,xbar,type="o",ylab="Média",xlab="Amostras",
          main=expression(paste("Gráfico " * bar(x))),col=c("black","red","red", "blue"),ylim=c(min(xbar),max(xbar)),pch=20, lty=1, lwd=2) 
  out=rbind(round(xbar[1,1:3],2),round(rbar[1,1:3],2))
  colnames(out)=c("Referência","LIC","LSC")
  out 
  }


xR2=function(m,n,y){
  if (n>1) { 
    amplit=numeric(m) 
    mat=matrix(y,m,n,byrow=T) 
    media=apply(mat,1,mean) 
    for (i in 1:m) 
      amplit[i]=max(mat[i,])-min(mat[i,]) 
    x2barras=mean(media) 
    Rbarra=mean(amplit) 
    d2=c(1.1296,1.6918,2.0535,2.3248,2.5404,2.7074,2.8501, 2.9677,3.0737,3.1696)
    d3=c(.8541,.8909,.8800,.8674,.8508,.8326,.8209, .8102,.7978,.7890) 
    LIC1=x2barras-3*Rbarra/(d2[n-1]*sqrt(n)) 
    LSC1=x2barras+3*Rbarra/(d2[n-1]*sqrt(n)) 
    LIC2=Rbarra-3*d3[n-1]*Rbarra/d2[n-1] 
    LSC2=Rbarra+3*d3[n-1]*Rbarra/d2[n-1] 
    if (LIC2 < 0) 
      LIC2=0 
    } 
  else { 
      amplit=numeric(m-1) 
      media=y 
      for (i in 2:m)
        amplit[i-1]=sqrt((y[i]-y[i-1])^2)
      x2barras=mean(media) 
      Rbarra=mean(amplit) 
      d2=1.1296 
      d3=.8541 
      LIC1=x2barras-3*Rbarra/(d2*sqrt(n)) 
      LSC1=x2barras+3*Rbarra/(d2*sqrt(n)) 
      LIC2=Rbarra-3*d3*Rbarra/d2 
      LSC2=Rbarra+3*d3*Rbarra/d2 
      if (LIC2 < 0) LIC2=0 } 
  
  par(mfrow=c(2,1)) 
  amostra1=matrix(rep(seq(1,m),4),m,4,byrow=F) 
  if (n>1) amostra2=amostra1 
  else amostra2=amostra1[-1,] 
  xbar=cbind(rep(x2barras,m),rep(LIC1,m),rep(LSC1,m),media) 
  if (n>1) {
    rbar=cbind(rep(Rbarra,m),rep(LIC2,m),rep(LSC2,m),amplit) 
  } 
  else
    rbar=cbind(rep(Rbarra,m-1),rep(LIC2,m-1),
               rep(LSC2,m-1),amplit) 
  
  matplot(amostra2,rbar,type="o",ylab="Amplitude",
          col=c("black","red","red","blue"),
          ylim=c(min(rbar),max(rbar)),
          xlab="Amostras",main="Gráfico R",pch=20, lty=1, lwd=2)
  
  matplot(amostra1,xbar,type="o",ylab="Média",xlab="Amostras",
          main=expression(paste("Gráfico " * bar(x))),col=c("black","red","red", "blue"),ylim=c(min(xbar),max(xbar)),pch=20, lty=1,lwd=2)
  out=rbind(round(xbar[1,1:3],2),round(rbar[1,1:3],2)) 
  colnames(out)=c("Referência","LIC","LSC")
  out
#print(Rbarra)
#print(x2barras)
#print(LIC1)
#print(LSC1)
#print(LIC2)
#print(LSC2)
#print(d2[n-1])
#print(d3[n-1]) 
  }

Exemplo

# m = número de amostras observadas.
# n = número de observações de cada amostra.
# y = vetor com as observações, ordenadas por amostra, da variável observada.
# mi = especificação para a média do processo.
# sigma = especificação para o desvio-padrão do processo.
#simular 
y1 <- rnorm(100, mean = 50, sd = 5)
y2 <- rnorm(100, mean = 70, sd = 5)
dados <- c(y1,y2)

m=40
n=5

xR2(m,n,y=dados)
     Referência   LIC   LSC
[1,]      59.83 52.92 66.74
[2,]      11.97  0.00 25.37

#simular 
y1 <- rnorm(100, mean = 50, sd = 5)
y2 <- rnorm(100, mean = 70, sd = 5)
dados <- c(y1,y2)

m=40
n=5

xR1(m,n,y=dados,mi=50,sigma=5)
     Referência   LIC   LSC
[1,]         50 43.29 56.71
[2,]          5  0.00 24.63

TCC Robson

dados <- c(311.29,
310.87,
311.2,
311.13,
311.08,
311.13,
310.98,
310.63,
310.76,
311.37,
311.02,
311.13,
311.12,
311,
311.08,
311.08,
311.12,
311.1,
311.21,
311.25,
311.17,
310.89,
311.38,
311.32,
311.02,
310.75,
310.93,
310.96,
311.03,
311.22,
310.97,
311.3,
311.13,
311.29,
311.14,
311.46,
311.33,
311.37,
311.12,
311.42,
310.69,
311,
311.15,
311.16,
310.97,
310.97,
311.36,
311.03,
311.22,
311.22,
310.97,
310.83,
311.21,
310.97,
310.87,
311.37,
311.08,
310.99,
311.19,
311.12,
311.1,
311.18,
311.16,
311.28,
311.34,
311.32,
311.3,
311.16,
311.02,
311.03,
311.05,
311.18,
311.22,
311.33,
311.24,
311.41,
311.34,
311.44,
310.76,
310.78,
310.92,
310.92,
310.95,
310.99,
311.23,
311.26,
310.77,
310.84)

m=22
n=4

xR2(m,n,y=dados)
     Referência    LIC    LSC
[1,]     311.11 310.86 311.36
[2,]       0.34   0.00   0.77

LS0tDQp0aXRsZTogIkdyw6FmaWNvcyBkZSBDb250cm9sZSBYX2JhciBlIFIiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQogDQogICAgRnVuw6fDo28geFIxIGNvbSBlc3BlY2lmaWNhw6fDtWVzIHBhcmEgbcOpZGlhIGUgZGVzdmlvLXBhZHLDo28NCiAgICBGdW7Dp8OjbyB4UjIgc2VtIGVzcGVjaWZpY2HDp8O1ZXMgcGFyYSBtw6lkaWEgZSBkZXN2aW8tcGFkcsOjbw0KDQojIyBGdW7Dp8O1ZXMNCmBgYHtyfQ0KDQojIG0gPSBudcyBbWVybyBkZSBhbW9zdHJhcyBvYnNlcnZhZGFzLg0KIyBuID0gbnXMgW1lcm8gZGUgb2JzZXJ2YWPMp2/Mg2VzIGRlIGNhZGEgYW1vc3RyYS4NCiMgeSA9IHZldG9yIGNvbSBhcyBvYnNlcnZhY8ynb8yDZXMsIG9yZGVuYWRhcyBwb3IgYW1vc3RyYSwgZGEgdmFyaWHMgXZlbCBvYnNlcnZhZGEuDQojIG1pID0gZXNwZWNpZmljYWPMp2HMg28gcGFyYSBhIG1lzIFkaWEgZG8gcHJvY2Vzc28uDQojIHNpZ21hID0gZXNwZWNpZmljYWPMp2HMg28gcGFyYSBvIGRlc3Zpby1wYWRyYcyDbyBkbyBwcm9jZXNzby4NCg0KDQp4UjE9ZnVuY3Rpb24obSxuLHksbWksc2lnbWEpeyANCiAgaWYgKG4+MSkgeyANCiAgICBhbXBsaXQ9bnVtZXJpYyhtKSANCiAgICBtYXQ9bWF0cml4KHksbSxuLGJ5cm93PVQpIA0KICAgIG1lZGlhPWFwcGx5KG1hdCwxLG1lYW4pIA0KICAgIGZvciAoaSBpbiAxOm0pIHsNCiAgYW1wbGl0W2ldPW1heChtYXRbaSxdKS1taW4obWF0W2ksXSl9DQogfSANCiAgZWxzZSB7IA0KICAgIGFtcGxpdD1udW1lcmljKG0tMSkgDQogICAgbWVkaWE9eSANCiAgICBmb3IgKGkgaW4gMjptKSANCiAgICAgIGFtcGxpdFtpLTFdPXNxcnQoKHlbaV0teVtpLTFdKV4yKSANCiAgICB9IA0KICANCiAgZDI9YygxLjEyOTYsMS42OTE4LDIuMDUzNSwyLjMyNDgsMi41NDA0LDIuNzA3NCwgMi44NTAxLDIuOTY3NywzLjA3MzcsMy4xNjk2KQ0KICBkMz1jKC44NTQxLC44OTA5LC44ODAwLC44Njc0LC44NTA4LCAuODMyNiwuODIwOSwuODEwMiwuNzk3OCwuNzg5MCkgDQogIExJQzE9bWktMypzaWdtYS9zcXJ0KG4pIA0KICBMU0MxPW1pKzMqc2lnbWEvc3FydChuKSANCiAgaWYobj4xKSB7IA0KICAgIExJQzI9ZDJbbi0xXSpzaWdtYS0zKmQzW24tMV0qc2lnbWEgDQogICAgTFNDMj1kMltuLTFdKnNpZ21hKzMqZDNbbi0xXSpzaWdtYSANCiAgICBpZiAoTElDMiA8IDApIA0KICAgICAgTElDMj0wIA0KICAgIH0gZWxzZSB7IA0KICAgICAgTElDMj1kMltuXSpzaWdtYS0zKmQzW25dKnNpZ21hIA0KICAgICAgTFNDMj1kMltuXSpzaWdtYSszKmQzW25dKnNpZ21hIA0KICAgICAgaWYgKExJQzIgPCAwKQ0KICAgICAgICBMSUMyPTANCiAgICAgIH0NCiAgDQogIHBhcihtZnJvdz1jKDIsMSkpIA0KICBhbW9zdHJhMT1tYXRyaXgocmVwKHNlcSgxLG0pLDQpLG0sNCxieXJvdz1GKQ0KICBpZiAobj4xKSBhbW9zdHJhMj1hbW9zdHJhMSBlbHNlIGFtb3N0cmEyPWFtb3N0cmExWy0xLF0gDQogIHhiYXI9Y2JpbmQocmVwKG1pLG0pLHJlcChMSUMxLG0pLHJlcChMU0MxLG0pLG1lZGlhKSANCiAgaWYgKG4+MSkgeyANCiAgICByYmFyPWNiaW5kKHJlcChzaWdtYSxtKSxyZXAoTElDMixtKSxyZXAoTFNDMixtKSxhbXBsaXQpIA0KICAgIH0gDQogIGVsc2UgcmJhcj1jYmluZChyZXAoc2lnbWEsbS0xKSxyZXAoTElDMixtLTEpLCANCiAgICAgICAgICAgICAgICAgIHJlcChMU0MyLG0tMSksYW1wbGl0KSANCiAgDQogIG1hdHBsb3QoYW1vc3RyYTIscmJhcix0eXBlPSJvIix5bGFiPSJBbXBsaXR1ZGUiLA0KICAgICAgICAgIGNvbD1jKCJibGFjayIsInJlZCIsInJlZCIsImJsdWUiKSwNCiAgICAgICAgICB5bGltPWMobWluKHJiYXIpLG1heChyYmFyKSksDQogICAgICAgICAgeGxhYj0iQW1vc3RyYXMiLG1haW49Ikdyw6FmaWNvIFIiLHBjaD0yMCwgbHR5PTEsIGx3ZD0yKQ0KICANCiAgbWF0cGxvdChhbW9zdHJhMSx4YmFyLHR5cGU9Im8iLHlsYWI9Ik3DqWRpYSIseGxhYj0iQW1vc3RyYXMiLA0KICAgICAgICAgIG1haW49ZXhwcmVzc2lvbihwYXN0ZSgiR3LDoWZpY28gIiAqIGJhcih4KSkpLGNvbD1jKCJibGFjayIsInJlZCIsInJlZCIsICJibHVlIikseWxpbT1jKG1pbih4YmFyKSxtYXgoeGJhcikpLHBjaD0yMCwgbHR5PTEsIGx3ZD0yKSANCiAgb3V0PXJiaW5kKHJvdW5kKHhiYXJbMSwxOjNdLDIpLHJvdW5kKHJiYXJbMSwxOjNdLDIpKQ0KICBjb2xuYW1lcyhvdXQpPWMoIlJlZmVyw6puY2lhIiwiTElDIiwiTFNDIikNCiAgb3V0IA0KICB9DQoNCg0KeFIyPWZ1bmN0aW9uKG0sbix5KXsNCiAgaWYgKG4+MSkgeyANCiAgICBhbXBsaXQ9bnVtZXJpYyhtKSANCiAgICBtYXQ9bWF0cml4KHksbSxuLGJ5cm93PVQpIA0KICAgIG1lZGlhPWFwcGx5KG1hdCwxLG1lYW4pIA0KICAgIGZvciAoaSBpbiAxOm0pIA0KICAgICAgYW1wbGl0W2ldPW1heChtYXRbaSxdKS1taW4obWF0W2ksXSkgDQogICAgeDJiYXJyYXM9bWVhbihtZWRpYSkgDQogICAgUmJhcnJhPW1lYW4oYW1wbGl0KSANCiAgICBkMj1jKDEuMTI5NiwxLjY5MTgsMi4wNTM1LDIuMzI0OCwyLjU0MDQsMi43MDc0LDIuODUwMSwgMi45Njc3LDMuMDczNywzLjE2OTYpDQogICAgZDM9YyguODU0MSwuODkwOSwuODgwMCwuODY3NCwuODUwOCwuODMyNiwuODIwOSwgLjgxMDIsLjc5NzgsLjc4OTApIA0KICAgIExJQzE9eDJiYXJyYXMtMypSYmFycmEvKGQyW24tMV0qc3FydChuKSkgDQogICAgTFNDMT14MmJhcnJhcyszKlJiYXJyYS8oZDJbbi0xXSpzcXJ0KG4pKSANCiAgICBMSUMyPVJiYXJyYS0zKmQzW24tMV0qUmJhcnJhL2QyW24tMV0gDQogICAgTFNDMj1SYmFycmErMypkM1tuLTFdKlJiYXJyYS9kMltuLTFdIA0KICAgIGlmIChMSUMyIDwgMCkgDQogICAgICBMSUMyPTAgDQogICAgfSANCiAgZWxzZSB7IA0KICAgICAgYW1wbGl0PW51bWVyaWMobS0xKSANCiAgICAgIG1lZGlhPXkgDQogICAgICBmb3IgKGkgaW4gMjptKQ0KICAgICAgICBhbXBsaXRbaS0xXT1zcXJ0KCh5W2ldLXlbaS0xXSleMikNCiAgICAgIHgyYmFycmFzPW1lYW4obWVkaWEpIA0KICAgICAgUmJhcnJhPW1lYW4oYW1wbGl0KSANCiAgICAgIGQyPTEuMTI5NiANCiAgICAgIGQzPS44NTQxIA0KICAgICAgTElDMT14MmJhcnJhcy0zKlJiYXJyYS8oZDIqc3FydChuKSkgDQogICAgICBMU0MxPXgyYmFycmFzKzMqUmJhcnJhLyhkMipzcXJ0KG4pKSANCiAgICAgIExJQzI9UmJhcnJhLTMqZDMqUmJhcnJhL2QyIA0KICAgICAgTFNDMj1SYmFycmErMypkMypSYmFycmEvZDIgDQogICAgICBpZiAoTElDMiA8IDApIExJQzI9MCB9IA0KICANCiAgcGFyKG1mcm93PWMoMiwxKSkgDQogIGFtb3N0cmExPW1hdHJpeChyZXAoc2VxKDEsbSksNCksbSw0LGJ5cm93PUYpIA0KICBpZiAobj4xKSBhbW9zdHJhMj1hbW9zdHJhMSANCiAgZWxzZSBhbW9zdHJhMj1hbW9zdHJhMVstMSxdIA0KICB4YmFyPWNiaW5kKHJlcCh4MmJhcnJhcyxtKSxyZXAoTElDMSxtKSxyZXAoTFNDMSxtKSxtZWRpYSkgDQogIGlmIChuPjEpIHsNCiAgICByYmFyPWNiaW5kKHJlcChSYmFycmEsbSkscmVwKExJQzIsbSkscmVwKExTQzIsbSksYW1wbGl0KSANCiAgfSANCiAgZWxzZQ0KICAgIHJiYXI9Y2JpbmQocmVwKFJiYXJyYSxtLTEpLHJlcChMSUMyLG0tMSksDQogICAgICAgICAgICAgICByZXAoTFNDMixtLTEpLGFtcGxpdCkgDQogIA0KICBtYXRwbG90KGFtb3N0cmEyLHJiYXIsdHlwZT0ibyIseWxhYj0iQW1wbGl0dWRlIiwNCiAgICAgICAgICBjb2w9YygiYmxhY2siLCJyZWQiLCJyZWQiLCJibHVlIiksDQogICAgICAgICAgeWxpbT1jKG1pbihyYmFyKSxtYXgocmJhcikpLA0KICAgICAgICAgIHhsYWI9IkFtb3N0cmFzIixtYWluPSJHcsOhZmljbyBSIixwY2g9MjAsIGx0eT0xLCBsd2Q9MikNCiAgDQogIG1hdHBsb3QoYW1vc3RyYTEseGJhcix0eXBlPSJvIix5bGFiPSJNw6lkaWEiLHhsYWI9IkFtb3N0cmFzIiwNCiAgICAgICAgICBtYWluPWV4cHJlc3Npb24ocGFzdGUoIkdyw6FmaWNvICIgKiBiYXIoeCkpKSxjb2w9YygiYmxhY2siLCJyZWQiLCJyZWQiLCAiYmx1ZSIpLHlsaW09YyhtaW4oeGJhciksbWF4KHhiYXIpKSxwY2g9MjAsIGx0eT0xLGx3ZD0yKQ0KICBvdXQ9cmJpbmQocm91bmQoeGJhclsxLDE6M10sMikscm91bmQocmJhclsxLDE6M10sMikpIA0KICBjb2xuYW1lcyhvdXQpPWMoIlJlZmVyw6puY2lhIiwiTElDIiwiTFNDIikNCiAgb3V0DQojcHJpbnQoUmJhcnJhKQ0KI3ByaW50KHgyYmFycmFzKQ0KI3ByaW50KExJQzEpDQojcHJpbnQoTFNDMSkNCiNwcmludChMSUMyKQ0KI3ByaW50KExTQzIpDQojcHJpbnQoZDJbbi0xXSkNCiNwcmludChkM1tuLTFdKSANCiAgfQ0KDQpgYGANCg0KDQojIyBFeGVtcGxvDQoNCiAgICAjIG0gPSBudcyBbWVybyBkZSBhbW9zdHJhcyBvYnNlcnZhZGFzLg0KICAgICMgbiA9IG51zIFtZXJvIGRlIG9ic2VydmFjzKdvzINlcyBkZSBjYWRhIGFtb3N0cmEuDQogICAgIyB5ID0gdmV0b3IgY29tIGFzIG9ic2VydmFjzKdvzINlcywgb3JkZW5hZGFzIHBvciBhbW9zdHJhLCBkYSB2YXJpYcyBdmVsIG9ic2VydmFkYS4NCiAgICAjIG1pID0gZXNwZWNpZmljYWPMp2HMg28gcGFyYSBhIG1lzIFkaWEgZG8gcHJvY2Vzc28uDQogICAgIyBzaWdtYSA9IGVzcGVjaWZpY2FjzKdhzINvIHBhcmEgbyBkZXN2aW8tcGFkcmHMg28gZG8gcHJvY2Vzc28uDQoNCmBgYHtyfQ0KI3NpbXVsYXIgDQp5MSA8LSBybm9ybSgxMDAsIG1lYW4gPSA1MCwgc2QgPSA1KQ0KeTIgPC0gcm5vcm0oMTAwLCBtZWFuID0gNzAsIHNkID0gNSkNCmRhZG9zIDwtIGMoeTEseTIpDQoNCm09NDANCm49NQ0KDQp4UjIobSxuLHk9ZGFkb3MpDQpgYGANCg0KDQpgYGB7cn0NCiNzaW11bGFyIA0KeTEgPC0gcm5vcm0oMTAwLCBtZWFuID0gNTAsIHNkID0gNSkNCnkyIDwtIHJub3JtKDEwMCwgbWVhbiA9IDcwLCBzZCA9IDUpDQpkYWRvcyA8LSBjKHkxLHkyKQ0KDQptPTQwDQpuPTUNCg0KeFIxKG0sbix5PWRhZG9zLG1pPTUwLHNpZ21hPTUpDQpgYGANCg0KIyMgVENDIFJvYnNvbg0KDQpgYGB7ciBmaWcuaGVpZ2h0PTE1LCBmaWcud2lkdGg9MTJ9DQpkYWRvcyA8LSBjKDMxMS4yOSwNCjMxMC44NywNCjMxMS4yLA0KMzExLjEzLA0KMzExLjA4LA0KMzExLjEzLA0KMzEwLjk4LA0KMzEwLjYzLA0KMzEwLjc2LA0KMzExLjM3LA0KMzExLjAyLA0KMzExLjEzLA0KMzExLjEyLA0KMzExLA0KMzExLjA4LA0KMzExLjA4LA0KMzExLjEyLA0KMzExLjEsDQozMTEuMjEsDQozMTEuMjUsDQozMTEuMTcsDQozMTAuODksDQozMTEuMzgsDQozMTEuMzIsDQozMTEuMDIsDQozMTAuNzUsDQozMTAuOTMsDQozMTAuOTYsDQozMTEuMDMsDQozMTEuMjIsDQozMTAuOTcsDQozMTEuMywNCjMxMS4xMywNCjMxMS4yOSwNCjMxMS4xNCwNCjMxMS40NiwNCjMxMS4zMywNCjMxMS4zNywNCjMxMS4xMiwNCjMxMS40MiwNCjMxMC42OSwNCjMxMSwNCjMxMS4xNSwNCjMxMS4xNiwNCjMxMC45NywNCjMxMC45NywNCjMxMS4zNiwNCjMxMS4wMywNCjMxMS4yMiwNCjMxMS4yMiwNCjMxMC45NywNCjMxMC44MywNCjMxMS4yMSwNCjMxMC45NywNCjMxMC44NywNCjMxMS4zNywNCjMxMS4wOCwNCjMxMC45OSwNCjMxMS4xOSwNCjMxMS4xMiwNCjMxMS4xLA0KMzExLjE4LA0KMzExLjE2LA0KMzExLjI4LA0KMzExLjM0LA0KMzExLjMyLA0KMzExLjMsDQozMTEuMTYsDQozMTEuMDIsDQozMTEuMDMsDQozMTEuMDUsDQozMTEuMTgsDQozMTEuMjIsDQozMTEuMzMsDQozMTEuMjQsDQozMTEuNDEsDQozMTEuMzQsDQozMTEuNDQsDQozMTAuNzYsDQozMTAuNzgsDQozMTAuOTIsDQozMTAuOTIsDQozMTAuOTUsDQozMTAuOTksDQozMTEuMjMsDQozMTEuMjYsDQozMTAuNzcsDQozMTAuODQpDQoNCm09MjINCm49NA0KDQp4UjIobSxuLHk9ZGFkb3MpDQoNCmBgYA0KDQog