[1] "/Users/jornbrouwer/Onedrive/Programeren/the_big_five/thebigfive/RScript/SpaandersBV_dataset_2"

Simulatie informatie

1.0 Logbestand: ../LogFiles/logfile-v4_minimale_productie.csv

1.1 aantal gemaakte budget-tafels: 61986

1.2 aantal gemaakte luxe-tafels: 7280

1.3 Gesimuleerde tijd: 1040d 0H 0M 0S

1.4 aantal reparaties: 0

1.5 Aantal keer dat machines zijn omgesteld tussen luxe- en budgettafels: 207

1.6 gemiddelde bezettingsgraad tussenliggende buffers: 23.2765098



Productielijnen

Budget-bladen

  • Rendered time period is: 3H 0M 0S

Machine 1 - (Hout) zaagmachine


Machine 4 - Voorboormachine


Machine 5 - Schuurmachine


Machine 6 - Verfmachine


Budget-poten

Machine 7 - IJzerzaag-machine


Machine 9 - Lasmachine


Machine 10 - Poedercoat-machine


Luxe-bladen

Render time

  • Rendered time period is: 3H 0M 0S

Machine 1 - (Hout) zaagmachine

Machine 2 - (Hout) lijmmachine

Machine 3 - (Hout) Freezemachine

Machine 4 - (Hout) Voorboormachine

Machine 5 - (Hout) Schuurmachine

Machine 6 - (Hout) Verfmachine

Luxe-poten

Machine 7 - IJzerzaag-machine

Machine 8 - (IJzer) buigmachine

M8 <- subset(logfile,select=c(Timestamp,Sender,Message,InputBuffer,OutputBuffer,Workload,ItemType),
             subset=((machines_V==8)&(itemtype_V=="E")&(timestamps_V<=renderTime[dummyRenderedTime])))
print(head(M8$OutputBuffer))
[1] "X" "X" "X" "X" "X" "X"
print(unique(M8$OutputBuffer))
[1] "X"
#print(count((M8$OutputBuffer)))
class(M8$OutputBuffer)
[1] "character"
#output <- abs(M8$OutputBuffer)
# par(mfrow = c(1,1))
# plot(M8$Timestamp,output, main="Buigmachine",xlab = "Timestamp in seconds",ylab="1st outputbuffer")
# lines(M8$Timestamp,M8$OutputBuffer)
#print(head(M8, n=50))
#print(tail(M8, n=50))
# par(mfrow = c(1,2))
# gebogenPoten <- M8$OutputBuffer
# gebogenPoten <- as.numeric(gebogenPoten)
# hist(gebogenPoten,main="Gebogen luxe poten", xlab="bucket grootte", ylab="hoeveelheid luxe gebogen poten")
#d <- density(gezaagdeBladen)
#plot(d)
#polygon(d,col="red",border="blue")
# xaxis <- seq(1:length(gebogenPoten))
# boxplot(x = gebogenPoten,y = xaxis, main="boxplot luxe gebogen poten", ylab="Hoeveelheid luxe gebogen poten")
#print(summary(gezaagdeBladen))
#print(unique(gezaagdeBladen))

Machine 9 - Lasmachine

Machine 11 - polijstmachine


LS0tCnRpdGxlOiAiU2ltdWxhdGlvbiBSZXBvcnQiCmF1dGhvcjogIlNwYWFuZGVycyBCLlYuIgpvdXRwdXQ6IAogIGh0bWxfbm90ZWJvb2sKLS0tCgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0KIyAxLjEgTG9hZCBsaWJyYXJpZXMKIyMgLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gIyMKbGlicmFyeShyZWFkcikKbGlicmFyeShkcGx5cikgIyBMaWJyYXJ5IGZvciBmaWx0ZXJpbmcgZGF0YQpsaWJyYXJ5KGx1YnJpZGF0ZSkgIyBMaWJyYXJ5IGZvciBjb252ZXJ0aW5nIHRpbWVzdGFtcHMgKHNlY29uZHMgaW4gb3VyIGNhc2UpIHRvIGZvcm1hdHRlZCBkYXRldGltZXMKbGlicmFyeSh0aWR5cikgIyBsaWJyYXJ5IGZvciBlZmZlY3RpdmUgZGF0YSBzaGFwaW5nCmxpYnJhcnkoZ2dwbG90MikgIyBsaWJyYXJ5IGZvciBlZmZlY3RpdmUgZGF0YSBzaGFwaW5nCmxpYnJhcnkoc2hpbnkpCmxpYnJhcnkoZ3JpZCkKbGlicmFyeShncmlkRXh0cmEpCmBgYAoKCmBgYHtyIGVjaG89RkFMU0V9CiMgLjIgU2V0IFdvcmtpbmcgRGlyZWN0b3J5CiNzZXR3ZCgifi9PbmVkcml2ZS9Qcm9ncmFtZXJlbi90aGVfYmlnX2ZpdmUvdGhlYmlnZml2ZS9SU2NyaXB0LyIpCiNwcmludChnZXR3ZCkKcHJpbnQoZ2V0d2QoKSkKIyBsb2dmaWxlIDwtIHJlYWQuY3N2KCJMb2dGaWxlcy9sb2dmaWxlLTE2LTAxLmNzdiIsIGhlYWRlciA9IFRSVUUsIHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSkgIyBSZWFkIGxvZyBmaWxlCiMgbG9nZmlsZSA8LSByZWFkLmNzdigifi9Vc2Vycy9qb3JuYnJvdXdlci9PbmVkcml2ZS9Qcm9ncmFtZXJlbi90aGVfYmlnX2ZpdmUvdGhlYmlnZml2ZS9SU2NyaXB0L0xvZ0ZpbGVzL2xvZ2ZpbGUtMTctMDEuY3N2IiwgaGVhZGVyID0gVFJVRSwgc3RyaW5nc0FzRmFjdG9ycyA9IEZBTFNFKSAjIFJlYWQgbG9nIGZpbGUKIyBsb2dmaWxlIDwtIHJlYWQuY3N2KCIuLi9Mb2dGaWxlcy9TcGFhbmRlcnNCVl8xamFhcl9nb2Vka29wZU1hY2hpbmVzX29tc3RlbGxlbl8xX3dlZWsuY3N2IiwgaGVhZGVyID0gVFJVRSxzdHJpbmdzQXNGYWN0b3JzID0gRkFMU0UpCiNsb2dmaWxlIDwtIHJlYWQuY3N2KCIuLi9Mb2dGaWxlcy9sb2dmaWxlLXYxX21pbmltYWxlX3Byb2R1Y3RpZS5jc3YiLCBoZWFkZXIgPSBUUlVFLHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSkKI2xvZ2ZpbGUgPC0gcmVhZC5jc3YoIi4uL0xvZ0ZpbGVzL2xvZ2ZpbGUtdjJfbWluaW1hbGVfcHJvZHVjdGllLmNzdiIsIGhlYWRlciA9IFRSVUUsc3RyaW5nc0FzRmFjdG9ycyA9IEZBTFNFKQojbG9nZmlsZSA8LSByZWFkLmNzdigiLi4vTG9nRmlsZXMvbG9nZmlsZS12Ml9taW5pbWFsZV9wcm9kdWN0aWUuY3N2IiwgaGVhZGVyID0gVFJVRSxzdHJpbmdzQXNGYWN0b3JzID0gRkFMU0UpCiNsb2dmaWxlIDwtIHJlYWQuY3N2KCIuLi9Mb2dGaWxlcy9sb2dmaWxlLXYzX21pbmltYWxlX3Byb2R1Y3RpZS5jc3YiLCBoZWFkZXIgPSBUUlVFLHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSkKbG9nZmlsZSA8LSByZWFkLmNzdigiLi4vTG9nRmlsZXMvbG9nZmlsZS12NF9taW5pbWFsZV9wcm9kdWN0aWUuY3N2IiwgaGVhZGVyID0gVFJVRSxzdHJpbmdzQXNGYWN0b3JzID0gRkFMU0UpCiMjIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICMjCnNpbV9uYW1lIDwtIGMoIi4uL0xvZ0ZpbGVzL2xvZ2ZpbGUtdjRfbWluaW1hbGVfcHJvZHVjdGllLmNzdiIpCiNwcmludChzaW1fbmFtZSkKCmBgYAoKYGBge3IgaW5jbHVkZT1GQUxTRX0Kc291cmNlKCJQT1NfdGltZV9jb252ZXJ0ZXIuUiIpCgpzaG93VGltZSA8LSAocmVuZGVyVGltZVtkdW1teVJlbmRlcmVkVGltZV0pKjMKc2hvd1RpbWUgPC0gc2Vjb25kc190b19wZXJpb2Qoc2hvd1RpbWUpCnNob3dUaW1lIDwtIGFzLmNoYXJhY3Rlci5QT1NJWHQoc2hvd1RpbWUpCnByaW50KHNob3dUaW1lKQpgYGAKCmBgYHtyIGluY2x1ZGU9RkFMU0V9CiMgVGVzdCB0aW1lc3RhbXBzIGZvciBjb252ZXJ0aWUKI3ByaW50KHNlY29uZHNfdG9fcGVyaW9kKDI5OTUyMDAwKSkKI3ByaW50KHNlY29uZHNfdG9fcGVyaW9kKDc0ODgwMDAqMyo0KSkKI3ByaW50KHNlY29uZHNfdG9fcGVyaW9kKDg5ODU2MDAwKSkKYGBgCgoKYGBge3IgU2V0dXAsIGluY2x1ZGU9RkFMU0V9CnByaW50KGdldHdkKCkpCgpzb3VyY2UoIkluaXRpYWxpemUuUiIpCmBgYAoKYGBge3IgZWNobz1GQUxTRX0KI3ByaW50KHRhaWwobG9nZmlsZSwgbj0yMDApKQpgYGAKCi0tLQoKIyMjIFNpbXVsYXRpZSBpbmZvcm1hdGllCgoxLjAgTG9nYmVzdGFuZDogX19gciBzaW1fbmFtZWBfXwoKMS4xIGFhbnRhbCBnZW1hYWt0ZSBidWRnZXQtdGFmZWxzOiBfX2ByIG5HZXByb2R1Y2VlcmRlQnVkZ2V0VGFmZWxzYF9fCgoxLjIgIGFhbnRhbCBnZW1hYWt0ZSBsdXhlLXRhZmVsczogX19gciBuR2Vwcm9kdWNlZXJkZUx1eGVUYWZlbHNgX18KCjEuMyBHZXNpbXVsZWVyZGUgdGlqZDogX19gciBmaW5hbFNpbVRpbWVgX18KCjEuNCBhYW50YWwgcmVwYXJhdGllczogX19gciBuTWFjaGluZXNCcm9rZW5gX18KCjEuNSBBYW50YWwga2VlciBkYXQgbWFjaGluZXMgemlqbiBvbWdlc3RlbGQgdHVzc2VuIGx1eGUtIGVuIGJ1ZGdldHRhZmVsczogX19gciBtYWNoaW5lX2NvbmZpZ3NfVWBfXwoKMS42IGdlbWlkZGVsZGUgYmV6ZXR0aW5nc2dyYWFkIHR1c3NlbmxpZ2dlbmRlIGJ1ZmZlcnM6IF9fYHIgdG90YWxCZXpldHRpbmdzR3JhYWRgX18KCi0tLQoKYGBge3IgZXZhbD1GQUxTRSwgaW5jbHVkZT1GQUxTRX0KI3NvdXJjZSgiZXhwZW5zaXZlSXRlbXMuUiIpCiMjIyAxIC0gR2VuZXJhbCBTaW11bGF0aW9uIFZhcmlhYmxlcwoKIyAxLjEgYWFudGFsIGdlbWFha3RlIGJ1ZGdldC10YWZlbHM6IF9fYHIgbkdlcHJvZHVjZWVyZGVCdWRnZXRUYWZlbHNgX18KIyAKIyAxLjIgIGFhbnRhbCBnZW1hYWt0ZSBsdXhlLXRhZmVsczogX19gciBuR2Vwcm9kdWNlZXJkZUx1eGVUYWZlbHNgX18KIyAKIyAxLjMgR2VzaW11bGVlcmRlIHRpamQ6IF9fYHIgZmluYWxTaW1UaW1lYF9fCiMgCiMgMS40IGFhbnRhbCByZXBhcmF0aWVzOiBfX2ByIG5NYWNoaW5lc0Jyb2tlbmBfXwojIAojIDEuNSBBYW50YWwga2VlciBkYXQgbWFjaGluZXMgemlqbiBvbWdlc3RlbGQgdHVzc2VuIGx1eGUtIGVuIGJ1ZGdldHRhZmVsczogX19gciBtYWNoaW5lX2NvbmZpZ3NfVWBfXwojIAojIDEuNiBnZW1pZGRlbGRlIGJlemV0dGluZ3NncmFhZCB0dXNzZW5saWdnZW5kZSBidWZmZXJzOiBfX2ByIHRvdGFsQmV6ZXR0aW5nc0dyYWFkYF9fCgpgYGAKCi0tLQoKIyAgUHJvZHVjdGllbGlqbmVuIHsudGFic2V0IC50YWJzZXQtZmFkZSAudGFic2V0LXBpbGxzfQoKYGBge3IgZWNobz1GQUxTRX0KcGFyKG1mcm93ID0gYygxLCAyKSkgIyBDcmVhdGUgYSB4IGdyaWQgZm9yIGRpYWdyYW1zCgpiZXpldHRpbmdzZ3JhYWRUYWZlbEl0ZW1zIDwtIGMobTFfbWVhbixtNF9tZWFuLG01X21lYW4pCmJhcnBsb3QoYmV6ZXR0aW5nc2dyYWFkVGFmZWxJdGVtcywgbWFpbj0iZ2VtaWRkZWxkZSB2YW4gZGUgYnVmZmVycyBbMV1bNF1bNV0iKQoKYmV6ZXR0aW5zZ3JhYWRUYWZlbHBvdGVuIDwtYyhtN19tZWFuLCBtOV9tZWFuKQoKYmFycGxvdChiZXpldHRpbnNncmFhZFRhZmVscG90ZW4sIG1haW49ImdlbWlkZGVsZGUgdmFuIGRlIGJ1ZmZlcnMgWzddWzldIikKCnRvdGFsQmV6ZXR0aW5nc0dyYWFkIDwtIGMoYmV6ZXR0aW5nc2dyYWFkVGFmZWxJdGVtcyxiZXpldHRpbnNncmFhZFRhZmVscG90ZW4pCnRvdGFsQmV6ZXR0aW5nc0dyYWFkIDwtIG1lYW4odG90YWxCZXpldHRpbmdzR3JhYWQpCmBgYAoKCiMjIEJ1ZGdldC1ibGFkZW4KCi0gUmVuZGVyZWQgdGltZSBwZXJpb2QgaXM6IF9fYHIgc2hvd1RpbWVgX18KCiMjIyBNYWNoaW5lIDEgLSAoSG91dCkgemFhZ21hY2hpbmUKCmBgYHtyIGVjaG89RkFMU0V9Ck0xIDwtIHN1YnNldChsb2dmaWxlLHNlbGVjdD1jKFRpbWVzdGFtcCxTZW5kZXIsTWVzc2FnZSxJbnB1dEJ1ZmZlcixPdXRwdXRCdWZmZXIsV29ya2xvYWQpLAogICAgICAgICAgICAgc3Vic2V0PSgobWFjaGluZXNfVj09MSkmKGl0ZW10eXBlX1Y9PSJDIikmKHRpbWVzdGFtcHNfVjw9cmVuZGVyVGltZVtkdW1teVJlbmRlcmVkVGltZV0pKSkKCiNwcmludChoZWFkKE0xLG49MTAwKSkKCnBhcihtZnJvdyA9IGMoMSwxKSkKcGxvdChNMSRUaW1lc3RhbXAsTTEkT3V0cHV0QnVmZmVyLCBtYWluPSJIb3V0emFhZ21hY2hpbmUiLHhsYWIgPSAiVGltZXN0YW1wIGluIHNlY29uZHMiLHlsYWI9IjFzdCBvdXRwdXRidWZmZXIiKQpsaW5lcyhNMSRUaW1lc3RhbXAsTTEkT3V0cHV0QnVmZmVyKQoKcGFyKG1mcm93ID0gYygxLDIpKQpnZXphYWdkZUJsYWRlbiA8LSBNMSRPdXRwdXRCdWZmZXIKZ2V6YWFnZGVCbGFkZW4gPC0gYXMubnVtZXJpYyhnZXphYWdkZUJsYWRlbikKCmhpc3QoZ2V6YWFnZGVCbGFkZW4sbWFpbj0iR2V6YWFnZGUgYnVkZ2V0IHRhZmVsYmxhZGVuIiwgeGxhYj0iYnVja2V0IGdyb290dGUiLCB5bGFiPSJob2V2ZWVsaGVpZCBnZXphYWdkZWJsYWRlbiIpCgojZCA8LSBkZW5zaXR5KGdlemFhZ2RlQmxhZGVuKQojcGxvdChkKQojcG9seWdvbihkLGNvbD0icmVkIixib3JkZXI9ImJsdWUiKQoKeGF4aXMgPC0gc2VxKDE6bGVuZ3RoKGdlemFhZ2RlQmxhZGVuKSkKYm94cGxvdCh4ID0gZ2V6YWFnZGVCbGFkZW4seSA9IHhheGlzLCBtYWluPSJib3hwbG90IGJ1ZGdldCB0YWZlbGJsYWRlbiIsIHlsYWI9Im5HZXphYWdkZUJsYWRlbiIpCgptMV9tZWFuIDwtIG1lYW4oZ2V6YWFnZGVCbGFkZW4pCiNwcmludChtMV9tZWFuKQojcHJpbnQoc3VtbWFyeShnZXphYWdkZUJsYWRlbikpCiNwcmludCh1bmlxdWUoZ2V6YWFnZGVCbGFkZW4pKQpgYGAKCmBgYHtyIHBpZTEsIGV2YWw9RkFMU0UsIGluY2x1ZGU9RkFMU0V9Ck0xX2NvbmZpZyA8LSBjKGZpbHRlcihNMSwgTTEkTWVzc2FnZT09IkNPTkZJRyIpKQpNMV9jb25maWcgPC0gTTFfY29uZmlnJFRpbWVzdGFtcAojIyAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAjIwpNMV9pZGxlIDwtIGMoZmlsdGVyKE0xLCBNMSRNZXNzYWdlPT0iUFJPRFVDVElPTl9JRExFIikpCk0xX2lkbGUgPC0gTTFfaWRsZSRUaW1lc3RhbXAKIyMgLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gIyMKTTFfcHJvY2Vzc2luZyA8LSBjKGZpbHRlcihNMSwgTTEkTWVzc2FnZT09IlBST0RVQ1RJT05fUFJPQ0VTU0lORyIpKQpNMV9wcm9jZXNzaW5nIDwtIE0xX3Byb2Nlc3NpbmckVGltZXN0YW1wCiMjIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICMjCk0xX3Byb2Nlc3NlZCA8LSBjKGZpbHRlcihNMSwgTTEkTWVzc2FnZT09IlBST0RVQ1RJT05fUFJPQ0VTU0VEIikpCk0xX3Byb2Nlc3NlZCA8LSBNMV9wcm9jZXNzZWQkVGltZXN0YW1wCiMjIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICMjCiNwcmludChsZW5ndGgoTTFfaWRsZSkpCiNwcmludChsZW5ndGgoTTFfcHJvY2Vzc2VkKSkKI3ByaW50KGxlbmd0aChNMV9wcm9jZXNzaW5nKSkKI3ByaW50KE0xX3Byb2Nlc3NpbmdbMl0gLSBNMV9pZGxlWzJdKQojcHJpbnQoTTFfcHJvY2Vzc2VkWzJdIC0gTTFfcHJvY2Vzc2luZ1syXSkKI3ByaW50KE0xX2lkbGVbM10gLSBNMV9wcm9jZXNzZWRbMl0pCiMjIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICMjCgojcHJpbnQoY29fdGltZSkgCm5Db25maWdzIDwtIGxlbmd0aChNMV9jb25maWcpCmNvX3RpbWUgPC0gbkNvbmZpZ3MgKiAzMDAgI2V2ZXJ5IGNvbmZpZyB0YWtlcyAzMDBzICg1bWludXRlcykKCiMjIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICMjCgoKI25Qcm9jZXNzaW5ncyA8LSBsZW5ndGgoTTFfcHJvY2Vzc2luZykgLTEKI25Qcm9jZXNzaW5ncyA8LSBsZW5ndGgoTTFfcHJvY2Vzc2VkKSAtMQojblByb2Nlc3NpbmdzIDwtIGxlbmd0aChNMV9pZGxlKSAtMSAKCnByaW50KG5Qcm9jZXNzaW5ncykKaWRfdGltZSA8LSAwCnBnX3RpbWUgPC0gMApwZF90aW1lIDwtIDAKZm9yKGkgaW4gMTpuUHJvY2Vzc2luZ3MpCnsKICBpZF90aW1lX3Rha2VuIDwtIE0xX3Byb2Nlc3NpbmdbaV0gLSBNMV9pZGxlW2ldICNpZGxlIHRpbWUgCiAgcGdfdGltZV90YWtlbiA8LSBNMV9wcm9jZXNzZWRbaV0gLSBNMV9wcm9jZXNzaW5nW2ldICNwcm9jZXNzaW5nIHRpbWUKICBwZF90aW1lX3Rha2VuIDwtIE0xX2lkbGVbaSsxXSAtIE0xX3Byb2Nlc3NlZFtpXSAgI3Byb2Nlc3NlZCB0aW1lCiAgCiAgaWRfdGltZSA8LSBpZF90aW1lICsgaWRfdGltZV90YWtlbgogIHBnX3RpbWUgPC0gcGdfdGltZSArIHBnX3RpbWVfdGFrZW4KICBwZF90aW1lIDwtIHBkX3RpbWUgKyBwZF90aW1lX3Rha2VuCn0KIyMgLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gIyMKc2xpY2VzIDwtIGMoY29fdGltZSwgaWRfdGltZSwgcGdfdGltZSxwZF90aW1lKQoKCgojcHJpbnQoaWRfdGltZSkgCiNwcmludChwZ190aW1lKVwKCmxhYmVscyA8LSBjKCJDT05GSUciLCAiSURMRSIsICJQUk9DRVNTSU5HIiwgIlBST0NFU1NFRCIpCgpwaWUoc2xpY2VzLCAgbGFiZWxzID0gbGFiZWxzLAogICAgICAgIG1haW4gPSAiVGlqZCBwZXIgc3RhdGUiLAogICAgICAgIHhsYWIgPSAiU3RhdGVzIiwKICAgICAgICB5bGFiID0gIlRpamQgKHNlY29uZGVuKSIsCiAgICAgICAgbGFzPTEsCiAgICAgICAgY29sID0gcmFpbmJvdyhsZW5ndGgobGFiZWxzKSkpCiMjIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICMjCmBgYAoKLS0tCgojIyMgTWFjaGluZSA0IC0gVm9vcmJvb3JtYWNoaW5lCgpgYGB7ciBlY2hvPUZBTFNFfQpNNCA8LSBzdWJzZXQobG9nZmlsZSxzZWxlY3Q9YyhUaW1lc3RhbXAsU2VuZGVyLE1lc3NhZ2UsSW5wdXRCdWZmZXIsT3V0cHV0QnVmZmVyLFdvcmtsb2FkKSwKICAgICAgICAgICAgIHN1YnNldD0oKG1hY2hpbmVzX1Y9PTQpJihpdGVtdHlwZV9WPT0iQyIpJih0aW1lc3RhbXBzX1Y8PXJlbmRlclRpbWVbZHVtbXlSZW5kZXJlZFRpbWVdKSkpCgpwYXIobWZyb3cgPSBjKDEsMSkpCnBsb3QoTTQkVGltZXN0YW1wLE00JE91dHB1dEJ1ZmZlciwgbWFpbj0iVm9vcmJvb3JtYWNoaW5lIix4bGFiID0gIlRpbWVzdGFtcCBpbiBzZWNvbmRzIix5bGFiPSIybmQgb3V0cHV0YnVmZmVyIikKbGluZXMoTTQkVGltZXN0YW1wLE00JE91dHB1dEJ1ZmZlcikKCnBhcihtZnJvdyA9IGMoMSwyKSkKZ2Vib29yZGVQbGF0ZW4gPC0gTTQkT3V0cHV0QnVmZmVyCmdlYm9vcmRlUGxhdGVuIDwtIGFzLm51bWVyaWMoZ2Vib29yZGVQbGF0ZW4pCmhpc3QoZ2Vib29yZGVQbGF0ZW4pCmJveHBsb3QoZ2Vib29yZGVQbGF0ZW4pCgptNF9tZWFuIDwtIG1lYW4oZ2Vib29yZGVQbGF0ZW4pCiNwcmludChtNF9tZWFuKQojcHJpbnQodW5pcXVlKGdlYm9vcmRlUGxhdGVuKSkKI3ByaW50KHN1bW1hcnkoZ2Vib29yZGVQbGF0ZW4pKQpgYGAKCgpgYGB7ciBwaWU0LCBldmFsPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQpNNF9jb25maWcgPC0gYyhmaWx0ZXIoTTQsIE00JE1lc3NhZ2U9PSJDT05GSUciKSkKTTRfY29uZmlnIDwtIE00X2NvbmZpZyRUaW1lc3RhbXAKI3ByaW50KE00X2NvbmZpZykKIyMgLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gIyMKTTRfaWRsZSA8LSBjKGZpbHRlcihNNCwgTTQkTWVzc2FnZT09IlBST0RVQ1RJT05fSURMRSIpKQpNNF9pZGxlIDwtIE00X2lkbGUkVGltZXN0YW1wCiNwcmludChsZW5ndGgoTTRfaWRsZSkpCiMjIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICMjCk00X3Byb2Nlc3NpbmcgPC0gYyhmaWx0ZXIoTTQsIE00JE1lc3NhZ2U9PSJQUk9EVUNUSU9OX1BST0NFU1NJTkciKSkKTTRfcHJvY2Vzc2luZyA8LSBNNF9wcm9jZXNzaW5nJFRpbWVzdGFtcAojcHJpbnQobGVuZ3RoKE00X3Byb2Nlc3NpbmcpKQojIyAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAjIwpNNF9wcm9jZXNzZWQgPC0gYyhmaWx0ZXIoTTQsIE00JE1lc3NhZ2U9PSJQUk9EVUNUSU9OX1BST0NFU1NFRCIpKQpNNF9wcm9jZXNzZWQgPC0gTTRfcHJvY2Vzc2VkJFRpbWVzdGFtcAojcHJpbnQobGVuZ3RoKE00X3Byb2Nlc3NlZCkpCiMjIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICMjCm5Db25maWdzIDwtIGxlbmd0aChNNF9jb25maWcpCmNvX3RpbWUgPC0gbkNvbmZpZ3MgKiAzMDAKblByb2Nlc3NpbmdzIDwtIGxlbmd0aChNNF9wcm9jZXNzaW5nKS0xCiNwcmludChuUHJvY2Vzc2luZ3MpCiMjIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICMjCmlkX3RpbWUgPC0gMApwZ190aW1lIDwtIDAKcGRfdGltZSA8LSAwCiMjIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICMjCmZvcihpIGluIDE6blByb2Nlc3NpbmdzKQp7CiAgaWRfdGltZV90YWtlbiA8LSBNNF9wcm9jZXNzaW5nW2ldIC0gTTRfaWRsZVtpXSAjaWRsZSB0aW1lIAogIHBnX3RpbWVfdGFrZW4gPC0gTTRfcHJvY2Vzc2VkW2ldIC0gTTRfcHJvY2Vzc2luZ1tpXSAjcHJvY2Vzc2luZyB0aW1lCiAgcGRfdGltZV90YWtlbiA8LSBNNF9pZGxlW2krMV0gLSBNNF9wcm9jZXNzZWRbaV0gICNwcm9jZXNzZWQgdGltZQogIAogIGlkX3RpbWUgPC0gaWRfdGltZSArIGlkX3RpbWVfdGFrZW4KICBwZ190aW1lIDwtIHBnX3RpbWUgKyBwZ190aW1lX3Rha2VuCiAgcGRfdGltZSA8LSBwZF90aW1lICsgcGRfdGltZV90YWtlbgogICNwcmludChwZF90aW1lX3Rha2VuKQp9CiMjIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICMjCnNsaWNlcyA8LSBjKGNvX3RpbWUsIGlkX3RpbWUsIHBnX3RpbWUsIHBkX3RpbWUpCgpsYWJlbCA8LSBjKCJDT05GSUciLCAiSURMRSIsICJQUk9DRVNTSU5HIiwgIlBST0NFU1NFRCIpCgpwaWUoc2xpY2VzLCAgbGFiZWwgPSBsYWJlbHMsCiAgICAgICAgbWFpbiA9ICJUaWpkIHBlciBzdGF0ZSIsCiAgICAgICAgeGxhYiA9ICJTdGF0ZXMiLAogICAgICAgIHlsYWIgPSAiVGlqZCAoc2Vjb25kZW4pIiwKICAgICAgICBjb2wgPSByYWluYm93KGxlbmd0aChsYWJlbHMpKSkKIyMgLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gIyMKYGBgCgoKLS0tCgojIyMgTWFjaGluZSA1IC0gU2NodXVybWFjaGluZQpgYGB7ciBlY2hvPUZBTFNFfQpNNSA8LSBzdWJzZXQobG9nZmlsZSxzZWxlY3Q9YyhUaW1lc3RhbXAsU2VuZGVyLE1lc3NhZ2UsSW5wdXRCdWZmZXIsT3V0cHV0QnVmZmVyLFdvcmtsb2FkKSwKICAgICAgICAgICAgIHN1YnNldD0oKG1hY2hpbmVzX1Y9PTUpJihpdGVtdHlwZV9WPT0iQyIpJih0aW1lc3RhbXBzX1Y8PXJlbmRlclRpbWVbZHVtbXlSZW5kZXJlZFRpbWVdKSkpCgpwYXIobWZyb3cgPSBjKDEsMSkpCnBsb3QoTTUkVGltZXN0YW1wLE01JE91dHB1dEJ1ZmZlciwgbWFpbj0iU2NodXVybWFjaGluZSIseGxhYiA9ICJUaW1lc3RhbXAgaW4gc2Vjb25kcyIseWxhYj0iM3Jkb3V0cHV0YnVmZmVyIikKbGluZXMoTTUkVGltZXN0YW1wLE01JE91dHB1dEJ1ZmZlcikKCnBhcihtZnJvdyA9IGMoMSwyKSkKZ2VzY2h1dXJkZVBsYXRlbiA8LSBNNSRPdXRwdXRCdWZmZXIKZ2VzY2h1dXJkZVBsYXRlbiA8LSBhcy5udW1lcmljKGdlc2NodXVyZGVQbGF0ZW4pCmhpc3QoZ2VzY2h1dXJkZVBsYXRlbikKYm94cGxvdChnZXNjaHV1cmRlUGxhdGVuKQoKbTVfbWVhbiA8LSBtZWFuKGdlc2NodXVyZGVQbGF0ZW4pCiNwcmludChtNV9tZWFuKQojcHJpbnQodW5pcXVlKGdlc2NodXVyZGVQbGF0ZW4pKQojcHJpbnQoc3VtbWFyeShnZXNjaHV1cmRlUGxhdGVuKSkKYGBgCgoKYGBge3IgcGllNSwgZXZhbD1GQUxTRSwgaW5jbHVkZT1GQUxTRX0KTTVfY29uZmlnIDwtIGMoZmlsdGVyKE01LCBNNSRNZXNzYWdlPT0iQ09ORklHIikpCk01X2NvbmZpZyA8LSBNNV9jb25maWckVGltZXN0YW1wCiMjIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICMjCk01X2lkbGUgPC0gYyhmaWx0ZXIoTTUsIE01JE1lc3NhZ2U9PSJQUk9EVUNUSU9OX0lETEUiKSkKTTVfaWRsZSA8LSBNNV9pZGxlJFRpbWVzdGFtcAojIyAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAjIwpNNV9wcm9jZXNzaW5nIDwtIGMoZmlsdGVyKE01LCBNNSRNZXNzYWdlPT0iUFJPRFVDVElPTl9QUk9DRVNTSU5HIikpCk01X3Byb2Nlc3NpbmcgPC0gTTVfcHJvY2Vzc2luZyRUaW1lc3RhbXAKIyMgLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gIyMKTTVfcHJvY2Vzc2VkIDwtIGMoZmlsdGVyKE01LCBNNSRNZXNzYWdlPT0iUFJPRFVDVElPTl9QUk9DRVNTRUQiKSkKTTVfcHJvY2Vzc2VkIDwtIE01X3Byb2Nlc3NlZCRUaW1lc3RhbXAKIyMgLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gIyMKbkNvbmZpZ3MgPC0gbGVuZ3RoKE01X2NvbmZpZykKY29fdGltZSA8LSBuQ29uZmlncyAqIDMwMApuUHJvY2Vzc2luZ3MgPC0gbGVuZ3RoKE01X3Byb2Nlc3NpbmcpLTEKIyMgLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gIyMKaWRfdGltZSA8LSAwCnBnX3RpbWUgPC0gMApwZF90aW1lIDwtIDAKIyMgLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gIyMKZm9yKGkgaW4gMTpuUHJvY2Vzc2luZ3MpCnsKICBpZF90aW1lX3Rha2VuIDwtIE01X3Byb2Nlc3NpbmdbaV0gLSBNNV9pZGxlW2ldICNpZGxlIHRpbWUgCiAgcGdfdGltZV90YWtlbiA8LSBNNV9wcm9jZXNzZWRbaV0gLSBNNV9wcm9jZXNzaW5nW2ldICNwcm9jZXNzaW5nIHRpbWUKICBwZF90aW1lX3Rha2VuIDwtIE01X2lkbGVbaSsxXSAtIE01X3Byb2Nlc3NlZFtpXSAgI3Byb2Nlc3NlZCB0aW1lCiAgCiAgaWRfdGltZSA8LSBpZF90aW1lICsgaWRfdGltZV90YWtlbgogIHBnX3RpbWUgPC0gcGdfdGltZSArIHBnX3RpbWVfdGFrZW4KICBwZF90aW1lIDwtIHBkX3RpbWUgKyBwZF90aW1lX3Rha2VuCiAgI3ByaW50KHBkX3RpbWVfdGFrZW4pCn0KIyMgLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gIyMKc2xpY2VzIDwtIGMoY29fdGltZSwgaWRfdGltZSwgcGdfdGltZSwgcGRfdGltZSkKCmxhYmVsIDwtIGMoIkNPTkZJRyIsICJJRExFIiwgIlBST0NFU1NJTkciLCAiUFJPQ0VTU0VEIikKCnBpZShzbGljZXMsICBsYWJlbCA9IGxhYmVscywKICAgICAgICBtYWluID0gIlRpamQgcGVyIHN0YXRlIiwKICAgICAgICB4bGFiID0gIlN0YXRlcyIsCiAgICAgICAgeWxhYiA9ICJUaWpkIChzZWNvbmRlbikiLAogICAgICAgIGNvbCA9IHJhaW5ib3cobGVuZ3RoKGxhYmVscykpKQojIyAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAjIwpgYGAKCi0tLQoKIyMjIE1hY2hpbmUgNiAtIFZlcmZtYWNoaW5lCmBgYHtyIGVjaG89RkFMU0V9Ck02IDwtIHN1YnNldChsb2dmaWxlLHNlbGVjdD1jKFRpbWVzdGFtcCxTZW5kZXIsTWVzc2FnZSxJbnB1dEJ1ZmZlcixPdXRwdXRCdWZmZXIsV29ya2xvYWQpLAogICAgICAgICAgICAgc3Vic2V0PSgobWFjaGluZXNfVj09NikmKGl0ZW10eXBlX1Y9PSJDIikmKHRpbWVzdGFtcHNfVjw9cmVuZGVyVGltZVtkdW1teVJlbmRlcmVkVGltZV0pKSkKCnBhcihtZnJvdyA9IGMoMSwxKSkKcGxvdChNNiRUaW1lc3RhbXAsTTYkT3V0cHV0QnVmZmVyLG1haW49IlZlcmZtYWNoaW5lIix4bGFiID0gIlRpbWVzdGFtcCBpbiBzZWNvbmRzIix5bGFiPSJmaW5hbG91dHB1dGJ1ZmZlciIpCmxpbmVzKE02JFRpbWVzdGFtcCxNNiRPdXRwdXRCdWZmZXIpCgpwYXIobWZyb3cgPSBjKDEsMikpCmdldmVyZmRlUGxhdGVuIDwtIE02JE91dHB1dEJ1ZmZlcgpnZXZlcmZkZVBsYXRlbiA8LSBhcy5udW1lcmljKGdldmVyZmRlUGxhdGVuKQpoaXN0KGdldmVyZmRlUGxhdGVuKQpib3hwbG90KGdldmVyZmRlUGxhdGVuKQoKI3ByaW50KHVuaXF1ZShnZXZlcmZkZVBsYXRlbikpCiNwcmludChzdW1tYXJ5KGdldmVyZmRlUGxhdGVuKSkKYGBgCgpgYGB7ciBwaWU2LCBldmFsPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQpNNl9jb25maWcgPC0gYyhmaWx0ZXIoTTYsIE02JE1lc3NhZ2U9PSJDT05GSUciKSkKTTZfY29uZmlnIDwtIE02X2NvbmZpZyRUaW1lc3RhbXAKIyMgLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gIyMKTTZfaWRsZSA8LSBjKGZpbHRlcihNNiwgTTYkTWVzc2FnZT09IlBST0RVQ1RJT05fSURMRSIpKQpNNl9pZGxlIDwtIE02X2lkbGUkVGltZXN0YW1wCiMjIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICMjCk02X3Byb2Nlc3NpbmcgPC0gYyhmaWx0ZXIoTTYsIE02JE1lc3NhZ2U9PSJQUk9EVUNUSU9OX1BST0NFU1NJTkciKSkKTTZfcHJvY2Vzc2luZyA8LSBNNl9wcm9jZXNzaW5nJFRpbWVzdGFtcAojIyAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAjIwpNNl9wcm9jZXNzZWQgPC0gYyhmaWx0ZXIoTTYsIE02JE1lc3NhZ2U9PSJQUk9EVUNUSU9OX1BST0NFU1NFRCIpKQpNNl9wcm9jZXNzZWQgPC0gTTZfcHJvY2Vzc2VkJFRpbWVzdGFtcAojIyAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAjIwpuQ29uZmlncyA8LSBsZW5ndGgoTTZfY29uZmlnKQpjb190aW1lIDwtIG5Db25maWdzICogMzAwCm5Qcm9jZXNzaW5ncyA8LSBsZW5ndGgoTTZfcHJvY2Vzc2VkKQojIyAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAjIwppZF90aW1lIDwtIDAKcGdfdGltZSA8LSAwCnBkX3RpbWUgPC0gMAojIyAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAjIwojIHByaW50KGxlbmd0aChNNl9pZGxlKSkKIyAKIyBwcmludChsZW5ndGgoTTZfcHJvY2Vzc2luZykpCiMgcHJpbnQobGVuZ3RoKE02X3Byb2Nlc3NlZCkpCiMgeCA8LSBsZW5ndGgoTTZfaWRsZSkKIyB5IDwtIGxlbmd0aChNNl9wcm9jZXNzaW5nKQojIHogPC0gbGVuZ3RoKE02X3Byb2Nlc3NlZCkKIyBwcmludCh0YWlsKE02X2lkbGUpKQojIHByaW50KHRhaWwoTTZfcHJvY2Vzc2luZykpCiMgcHJpbnQodGFpbChNNl9wcm9jZXNzZWQpKQojIHByaW50KE02X3Byb2Nlc3NpbmdbMl0gLSBNNl9pZGxlWzJdKQojIHByaW50KE02X3Byb2Nlc3NlZFsyXSAtIE02X3Byb2Nlc3NpbmdbMl0pCiBwcmludChNNl9pZGxlWzEwMDFdIC0gTTZfcHJvY2Vzc2VkWzEwMDBdKQoKZm9yKGkgaW4gMTpuUHJvY2Vzc2luZ3MpCnsKICBpZF90aW1lX3Rha2VuIDwtIE02X3Byb2Nlc3NpbmdbaV0gLSBNNl9pZGxlW2ldICNpZGxlIHRpbWUgCiAgcGdfdGltZV90YWtlbiA8LSBNNl9wcm9jZXNzZWRbaV0gLSBNNl9wcm9jZXNzaW5nW2ldICNwcm9jZXNzaW5nIHRpbWUKICBwZF90aW1lX3Rha2VuIDwtIE02X2lkbGVbaV0gLSBNNl9wcm9jZXNzZWRbaV0gICNwcm9jZXNzZWQgdGltZQogIAogIHByaW50KHBkX3RpbWVfdGFrZW4pCiAgCiAgaWRfdGltZSA8LSBpZF90aW1lICsgaWRfdGltZV90YWtlbgogIHBnX3RpbWUgPC0gcGdfdGltZSArIHBnX3RpbWVfdGFrZW4KICBwZF90aW1lIDwtIHBkX3RpbWUgKyBwZF90aW1lX3Rha2VuCn0KIAojcHJpbnQoaWRfdGltZSkKI3ByaW50KHBnX3RpbWUpCiNwcmludChwZF90aW1lKQoKIyMgLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gIyMKc2xpY2VzIDwtIGMoY29fdGltZSwgaWRfdGltZSwgcGdfdGltZSwgYWJzKHBkX3RpbWUpKQoKbGFiZWwgPC0gYygiQ09ORklHIiwgIklETEUiLCAiUFJPQ0VTU0lORyIsICJQUk9DRVNTRUQiKQoKcGllKHNsaWNlcywgIGxhYmVsID0gbGFiZWxzLAogICAgICAgIG1haW4gPSAiVGlqZCBwZXIgc3RhdGUiLAogICAgICAgIHhsYWIgPSAiU3RhdGVzIiwKICAgICAgICB5bGFiID0gIlRpamQgKHNlY29uZGVuKSIsCiAgICAgICAgY29sID0gcmFpbmJvdyhsZW5ndGgobGFiZWxzKSkpCiMjIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICMjCmBgYAoKLS0tLQoKIyMgQnVkZ2V0LXBvdGVuCgojIyMgTWFjaGluZSA3IC0gSUp6ZXJ6YWFnLW1hY2hpbmUKYGBge3IgZWNobz1GQUxTRX0KTTcgPC0gc3Vic2V0KGxvZ2ZpbGUsc2VsZWN0PWMoVGltZXN0YW1wLFNlbmRlcixNZXNzYWdlLElucHV0QnVmZmVyLE91dHB1dEJ1ZmZlcixXb3JrbG9hZCksCiAgICAgICAgICAgICBzdWJzZXQ9KChtYWNoaW5lc19WPT03KSYoaXRlbXR5cGVfVj09IkMiKSYodGltZXN0YW1wc19WPD1yZW5kZXJUaW1lW2R1bW15UmVuZGVyZWRUaW1lXSkpKQoKcGFyKG1mcm93ID0gYygxLDEpKQpwbG90KE03JFRpbWVzdGFtcCxNNyRPdXRwdXRCdWZmZXIsbWFpbj0iSUp6ZXJ6YWFnbWFjaGluZSIseGxhYiA9ICJUaW1lc3RhbXAgaW4gc2Vjb25kcyIseWxhYj0iMXN0IG91dHB1dGJ1ZmZlciIpCmxpbmVzKE03JFRpbWVzdGFtcCxNNyRPdXRwdXRCdWZmZXIpCgpwYXIobWZyb3cgPSBjKDEsMikpCmdlemFhZ2RlUG90ZW4gPC0gTTckT3V0cHV0QnVmZmVyCmdlemFhZ2RlUG90ZW4gPC0gYXMubnVtZXJpYyhnZXphYWdkZVBvdGVuKQpoaXN0KGdlemFhZ2RlUG90ZW4pCmJveHBsb3QoZ2V6YWFnZGVQb3RlbikKCm03X21lYW4gPC0gbWVhbihnZXphYWdkZVBvdGVuKQojcHJpbnQobTdfbWVhbikKCiNwcmludChzdW1tYXJ5KGdlemFhZ2RlUG90ZW4pKQpgYGAKCi0tLQoKIyMjIE1hY2hpbmUgOSAtIExhc21hY2hpbmUKYGBge3IgZWNobz1GQUxTRX0KTTkgPC0gc3Vic2V0KGxvZ2ZpbGUsc2VsZWN0PWMoVGltZXN0YW1wLFNlbmRlcixNZXNzYWdlLElucHV0QnVmZmVyLE91dHB1dEJ1ZmZlcixXb3JrbG9hZCksCiAgICAgICAgICAgICBzdWJzZXQ9KChtYWNoaW5lc19WPT05KSYoaXRlbXR5cGVfVj09IkMiKSYodGltZXN0YW1wc19WPD1yZW5kZXJUaW1lW2R1bW15UmVuZGVyZWRUaW1lXSkpKQoKcGFyKG1mcm93ID0gYygxLDEpKQpwbG90KE05JFRpbWVzdGFtcCxNOSRPdXRwdXRCdWZmZXIsbWFpbj0iTGFzbWFjaGluZSIseGxhYiA9ICJUaW1lc3RhbXAgaW4gc2Vjb25kcyIseWxhYj0iMm5kIG91dHB1dGJ1ZmZlciIpCmxpbmVzKE05JFRpbWVzdGFtcCxNOSRPdXRwdXRCdWZmZXIpCnBhcihtZnJvdyA9IGMoMSwyKSkKZ2VsYXNkZVBvdGVuIDwtIE05JE91dHB1dEJ1ZmZlcgpnZWxhc2RlUG90ZW4gPC0gYXMubnVtZXJpYyhnZWxhc2RlUG90ZW4pCmhpc3QoZ2VsYXNkZVBvdGVuKQpib3hwbG90KGdlbGFzZGVQb3RlbikKCm05X21lYW4gPC0gbWVhbihnZWxhc2RlUG90ZW4pCiNwcmludChtOV9tZWFuKQoKI3ByaW50KHN1bW1hcnkoZ2VsYXNkZVBvdGVuKSkKYGBgCgotLS0KCiMjIyBNYWNoaW5lIDEwIC0gUG9lZGVyY29hdC1tYWNoaW5lCmBgYHtyIGVjaG89RkFMU0V9Ck0xMCA8LSBzdWJzZXQobG9nZmlsZSxzZWxlY3Q9YyhUaW1lc3RhbXAsU2VuZGVyLE1lc3NhZ2UsSW5wdXRCdWZmZXIsT3V0cHV0QnVmZmVyLFdvcmtsb2FkKSwKICAgICAgICAgICAgICBzdWJzZXQ9KChtYWNoaW5lc19WPT0xMCkmKGl0ZW10eXBlX1Y9PSJDIikmKHRpbWVzdGFtcHNfVjw9cmVuZGVyVGltZVtkdW1teVJlbmRlcmVkVGltZV0pKSkKCnBhcihtZnJvdyA9IGMoMSwxKSkKcGxvdChNMTAkVGltZXN0YW1wLE0xMCRPdXRwdXRCdWZmZXIsbWFpbj0iUG9lZGVyY29hdG1hY2hpbmUiLHhsYWIgPSAiVGltZXN0YW1wIGluIHNlY29uZHMiLHlsYWI9ImZpbmFsIG91dHB1dGJ1ZmZlciIpCmxpbmVzKE0xMCRUaW1lc3RhbXAsTTEwJE91dHB1dEJ1ZmZlcikKCnBhcihtZnJvdyA9IGMoMSwyKSkKZ2Vjb2F0ZVBvdGVuIDwtIE0xMCRPdXRwdXRCdWZmZXIKZ2Vjb2F0ZVBvdGVuIDwtIGFzLm51bWVyaWMoZ2Vjb2F0ZVBvdGVuKQpoaXN0KGdlY29hdGVQb3RlbikKYm94cGxvdChnZWNvYXRlUG90ZW4pCgojbTEwX21lYW4gPC0gbWVhbihnZWNvYXRlUG90ZW4pCiNwcmludChtMTBfbWVhbikKCiNwcmludChzdW1tYXJ5KGdlY29hdGVQb3RlbikpCmBgYAoKLS0tCgojIyBMdXhlLWJsYWRlbgoKUmVuZGVyIHRpbWUKCi0gUmVuZGVyZWQgdGltZSBwZXJpb2QgaXM6IF9fYHIgc2hvd1RpbWVgX18KCiMjIyBNYWNoaW5lIDEgLSAoSG91dCkgemFhZ21hY2hpbmUKCmBgYHtyIGVjaG89RkFMU0V9Ck0xIDwtIHN1YnNldChsb2dmaWxlLHNlbGVjdD1jKFRpbWVzdGFtcCxTZW5kZXIsTWVzc2FnZSxJbnB1dEJ1ZmZlcixPdXRwdXRCdWZmZXIsV29ya2xvYWQpLAogICAgICAgICAgICAgc3Vic2V0PSgobWFjaGluZXNfVj09MSkmKGl0ZW10eXBlX1Y9PSJFIikmKHRpbWVzdGFtcHNfVjw9cmVuZGVyVGltZVtkdW1teVJlbmRlcmVkVGltZV0pKSkKCnBhcihtZnJvdyA9IGMoMSwxKSkKcGxvdChNMSRUaW1lc3RhbXAsTTEkT3V0cHV0QnVmZmVyLCBtYWluPSJIb3V0emFhZ21hY2hpbmUiLHhsYWIgPSAiVGltZXN0YW1wIGluIHNlY29uZHMiLHlsYWI9IjFzdCBvdXRwdXRidWZmZXIiKQpsaW5lcyhNMSRUaW1lc3RhbXAsTTEkT3V0cHV0QnVmZmVyKQoKcGFyKG1mcm93ID0gYygxLDIpKQpnZXphYWdkZUJsYWRlbiA8LSBNMSRPdXRwdXRCdWZmZXIKZ2V6YWFnZGVCbGFkZW4gPC0gYXMubnVtZXJpYyhnZXphYWdkZUJsYWRlbikKaGlzdChnZXphYWdkZUJsYWRlbixtYWluPSJHZXphYWdkZSBkdXJlIHRhZmVsYmxhZGVuIiwgeGxhYj0iYnVja2V0IGdyb290dGUiLCB5bGFiPSJob2V2ZWVsaGVpZCBnZXphYWdkZWJsYWRlbiIpCgojZCA8LSBkZW5zaXR5KGdlemFhZ2RlQmxhZGVuKQojcGxvdChkKQojcG9seWdvbihkLGNvbD0icmVkIixib3JkZXI9ImJsdWUiKQoKeGF4aXMgPC0gc2VxKDE6bGVuZ3RoKGdlemFhZ2RlQmxhZGVuKSkKYm94cGxvdCh4ID0gZ2V6YWFnZGVCbGFkZW4seSA9IHhheGlzLCBtYWluPSJib3hwbG90IGR1cmUgdGFmZWxibGFkZW4iLCB5bGFiPSJuR2V6YWFnZGVCbGFkZW4iKQoKI3ByaW50KHN1bW1hcnkoZ2V6YWFnZGVCbGFkZW4pKQojcHJpbnQodW5pcXVlKGdlemFhZ2RlQmxhZGVuKSkKYGBgCgojIyMgTWFjaGluZSAyIC0gKEhvdXQpIGxpam1tYWNoaW5lCgpgYGB7ciBlY2hvPUZBTFNFfQpNMiA8LSBzdWJzZXQobG9nZmlsZSxzZWxlY3Q9YyhUaW1lc3RhbXAsU2VuZGVyLE1lc3NhZ2UsSW5wdXRCdWZmZXIsT3V0cHV0QnVmZmVyLFdvcmtsb2FkKSwKICAgICAgICAgICAgIHN1YnNldD0oKG1hY2hpbmVzX1Y9PTIpJihpdGVtdHlwZV9WPT0iRSIpJih0aW1lc3RhbXBzX1Y8PXJlbmRlclRpbWVbZHVtbXlSZW5kZXJlZFRpbWVdKSkpCgpwYXIobWZyb3cgPSBjKDEsMSkpCnBsb3QoTTIkVGltZXN0YW1wLE0yJE91dHB1dEJ1ZmZlciwgbWFpbj0iTGlqbW1hY2hpbmUiLHhsYWIgPSAiVGltZXN0YW1wIGluIHNlY29uZHMiLHlsYWI9IjFzdCBvdXRwdXRidWZmZXIiKQpsaW5lcyhNMiRUaW1lc3RhbXAsTTIkT3V0cHV0QnVmZmVyKQoKcGFyKG1mcm93ID0gYygxLDIpKQpnZWxpam1kZUJsYWRlbiA8LSBNMiRPdXRwdXRCdWZmZXIKZ2VsaWptZGVCbGFkZW4gPC0gYXMubnVtZXJpYyhnZWxpam1kZUJsYWRlbikKaGlzdChnZWxpam1kZUJsYWRlbixtYWluPSJHZWxpam1kZSBkdXJlIHRhZmVsYmxhZGVuIiwgeGxhYj0iYnVja2V0IGdyb290dGUiLCB5bGFiPSJob2V2ZWVsaGVpZCBnZWxpam1kZWJsYWRlbiIpCgojZCA8LSBkZW5zaXR5KGdlemFhZ2RlQmxhZGVuKQojcGxvdChkKQojcG9seWdvbihkLGNvbD0icmVkIixib3JkZXI9ImJsdWUiKQoKeGF4aXMgPC0gc2VxKDE6bGVuZ3RoKGdlbGlqbWRlQmxhZGVuKSkKYm94cGxvdCh4ID0gZ2VsaWptZGVCbGFkZW4seSA9IHhheGlzLCBtYWluPSJHZWxpam1kZSBkdXJlIHRhZmVsYmxhZGVuIiwgeWxhYj0iZ2VsaWptZGVCbGFkZW4iKQoKI3ByaW50KHN1bW1hcnkoZ2V6YWFnZGVCbGFkZW4pKQojcHJpbnQodW5pcXVlKGdlemFhZ2RlQmxhZGVuKSkKYGBgCgoKIyMjIE1hY2hpbmUgMyAtIChIb3V0KSBGcmVlemVtYWNoaW5lCgpgYGB7ciBlY2hvPUZBTFNFfQpNMyA8LSBzdWJzZXQobG9nZmlsZSxzZWxlY3Q9YyhUaW1lc3RhbXAsU2VuZGVyLE1lc3NhZ2UsSW5wdXRCdWZmZXIsT3V0cHV0QnVmZmVyLFdvcmtsb2FkKSwKICAgICAgICAgICAgIHN1YnNldD0oKG1hY2hpbmVzX1Y9PTMpJihpdGVtdHlwZV9WPT0iRSIpJih0aW1lc3RhbXBzX1Y8PXJlbmRlclRpbWVbZHVtbXlSZW5kZXJlZFRpbWVdKSkpCgpwYXIobWZyb3cgPSBjKDEsMSkpCnBsb3QoTTMkVGltZXN0YW1wLE0zJE91dHB1dEJ1ZmZlciwgbWFpbj0iRnJlZXplbWFjaGluZSIseGxhYiA9ICJUaW1lc3RhbXAgaW4gc2Vjb25kcyIseWxhYj0iMXN0IG91dHB1dGJ1ZmZlciIpCmxpbmVzKE0zJFRpbWVzdGFtcCxNMyRPdXRwdXRCdWZmZXIpCgpwYXIobWZyb3cgPSBjKDEsMikpCmdlZnJlZXpkZUJsYWRlbiA8LSBNMyRPdXRwdXRCdWZmZXIKZ2VmcmVlemRlQmxhZGVuIDwtIGFzLm51bWVyaWMoZ2VmcmVlemRlQmxhZGVuKQpoaXN0KGdlZnJlZXpkZUJsYWRlbixtYWluPSJHZWZyZWV6ZGUgZHVyZSB0YWZlbGJsYWRlbiIsIHhsYWI9ImJ1Y2tldCBncm9vdHRlIiwgeWxhYj0iaG9ldmVlbGhlaWQgZ2VmcmVlemRlIGJsYWRlbiIpCgojZCA8LSBkZW5zaXR5KGdlemFhZ2RlQmxhZGVuKQojcGxvdChkKQojcG9seWdvbihkLGNvbD0icmVkIixib3JkZXI9ImJsdWUiKQoKeGF4aXMgPC0gc2VxKDE6bGVuZ3RoKGdlZnJlZXpkZUJsYWRlbikpCmJveHBsb3QoeCA9IGdlZnJlZXpkZUJsYWRlbix5ID0geGF4aXMsIG1haW49IkdlZnJlZXpkZSBkdXJlIHRhZmVsYmxhZGVuIiwgeWxhYj0iSG9ldmVlbGhlaWQgZ2VmcmVlemRlIGJsYWRlbiIpCgojcHJpbnQoc3VtbWFyeShnZXphYWdkZUJsYWRlbikpCiNwcmludCh1bmlxdWUoZ2V6YWFnZGVCbGFkZW4pKQpgYGAKCiMjIyBNYWNoaW5lIDQgLSAoSG91dCkgVm9vcmJvb3JtYWNoaW5lCgpgYGB7ciBlY2hvPUZBTFNFfQpNNCA8LSBzdWJzZXQobG9nZmlsZSxzZWxlY3Q9YyhUaW1lc3RhbXAsU2VuZGVyLE1lc3NhZ2UsSW5wdXRCdWZmZXIsT3V0cHV0QnVmZmVyLFdvcmtsb2FkKSwKICAgICAgICAgICAgIHN1YnNldD0oKG1hY2hpbmVzX1Y9PTQpJihpdGVtdHlwZV9WPT0iRSIpJih0aW1lc3RhbXBzX1Y8PXJlbmRlclRpbWVbZHVtbXlSZW5kZXJlZFRpbWVdKSkpCgpwYXIobWZyb3cgPSBjKDEsMSkpCnBsb3QoTTQkVGltZXN0YW1wLE00JE91dHB1dEJ1ZmZlciwgbWFpbj0iVm9vcmJvb3JtYWNoaW5lIix4bGFiID0gIlRpbWVzdGFtcCBpbiBzZWNvbmRzIix5bGFiPSIybmQgb3V0cHV0YnVmZmVyIikKbGluZXMoTTQkVGltZXN0YW1wLE00JE91dHB1dEJ1ZmZlcikKCnBhcihtZnJvdyA9IGMoMSwyKSkKZ2Vib29yZGVQbGF0ZW4gPC0gTTQkT3V0cHV0QnVmZmVyCmdlYm9vcmRlUGxhdGVuIDwtIGFzLm51bWVyaWMoZ2Vib29yZGVQbGF0ZW4pCgpoaXN0KGdlYm9vcmRlUGxhdGVuLG1haW49IlZvb3JnZWJvb3JkZSBkdXJlIHRhZmVsYmxhZGVuIiwgeGxhYj0iYnVja2V0IGdyb290dGUiLCB5bGFiPSJob2V2ZWVsaGVpZCB2b29yZ2Vib29yZGUgcGxhdGVuIikKCnhheGlzIDwtIHNlcSgxOmxlbmd0aChnZWJvb3JkZVBsYXRlbikpCmJveHBsb3QoZ2Vib29yZGVQbGF0ZW4seSA9IHhheGlzLCBtYWluPSJWb29yZ2Vib29yZGUgZHVyZSB0YWZlbGJsYWRlbiIsIHlsYWI9IkhvZXZlZWxoZWlkIFZvb3JnZWJvb3JkZSBibGFkZW4iKQoKI3ByaW50KHVuaXF1ZShnZWJvb3JkZVBsYXRlbikpCiNwcmludChzdW1tYXJ5KGdlYm9vcmRlUGxhdGVuKSkKYGBgCgojIyMgTWFjaGluZSA1IC0gKEhvdXQpIFNjaHV1cm1hY2hpbmUKCmBgYHtyIGVjaG89RkFMU0V9Ck01IDwtIHN1YnNldChsb2dmaWxlLHNlbGVjdD1jKFRpbWVzdGFtcCxTZW5kZXIsTWVzc2FnZSxJbnB1dEJ1ZmZlcixPdXRwdXRCdWZmZXIsV29ya2xvYWQpLAogICAgICAgICAgICAgc3Vic2V0PSgobWFjaGluZXNfVj09NSkmKGl0ZW10eXBlX1Y9PSJFIikmKHRpbWVzdGFtcHNfVjw9cmVuZGVyVGltZVtkdW1teVJlbmRlcmVkVGltZV0pKSkKCnBhcihtZnJvdyA9IGMoMSwxKSkKcGxvdChNNSRUaW1lc3RhbXAsTTUkT3V0cHV0QnVmZmVyLCBtYWluPSJTY2h1dXJtYWNoaW5lIix4bGFiID0gIlRpbWVzdGFtcCBpbiBzZWNvbmRzIix5bGFiPSIzcmQgb3V0cHV0YnVmZmVyIikKbGluZXMoTTUkVGltZXN0YW1wLE01JE91dHB1dEJ1ZmZlcikKCnBhcihtZnJvdyA9IGMoMSwyKSkKZ2VzY2h1dXJkZVBsYXRlbiA8LSBNNSRPdXRwdXRCdWZmZXIKZ2VzY2h1dXJkZVBsYXRlbiA8LSBhcy5udW1lcmljKGdlc2NodXVyZGVQbGF0ZW4pCmhpc3QoZ2VzY2h1dXJkZVBsYXRlbixtYWluPSJHZXNjaHV1cmRlIGR1cmUgdGFmZWxibGFkZW4iLCB4bGFiPSJidWNrZXQgZ3Jvb3R0ZSIsIHlsYWI9ImhvZXZlZWxoZWlkIGdlc2NodXVyZGUgcGxhdGVuIikKCnhheGlzIDwtIHNlcSgxOmxlbmd0aChnZXNjaHV1cmRlUGxhdGVuKSkKYm94cGxvdChnZXNjaHV1cmRlUGxhdGVuLHkgPSB4YXhpcywgbWFpbj0iR2VzY2h1dXJkZSBkdXJlIHRhZmVsYmxhZGVuIiwgeWxhYj0iSG9ldmVlbGhlaWQgZ2VzY2h1dXJkZSBibGFkZW4iKQoKI3ByaW50KHVuaXF1ZShnZXNjaHV1cmRlUGxhdGVuKSkKI3ByaW50KHN1bW1hcnkoZ2VzY2h1dXJkZVBsYXRlbikpCmBgYAoKIyMjIE1hY2hpbmUgNiAtIChIb3V0KSBWZXJmbWFjaGluZQoKYGBge3IgZWNobz1GQUxTRX0KTTYgPC0gc3Vic2V0KGxvZ2ZpbGUsc2VsZWN0PWMoVGltZXN0YW1wLFNlbmRlcixNZXNzYWdlLElucHV0QnVmZmVyLE91dHB1dEJ1ZmZlcixXb3JrbG9hZCksCiAgICAgICAgICAgICBzdWJzZXQ9KChtYWNoaW5lc19WPT02KSYoaXRlbXR5cGVfVj09IkUiKSYodGltZXN0YW1wc19WPD1yZW5kZXJUaW1lW2R1bW15UmVuZGVyZWRUaW1lXSkpKQoKcGFyKG1mcm93ID0gYygxLDEpKQpwbG90KE02JFRpbWVzdGFtcCxNNiRPdXRwdXRCdWZmZXIsbWFpbj0iVmVyZm1hY2hpbmUiLHhsYWIgPSAiVGltZXN0YW1wIGluIHNlY29uZHMiLHlsYWI9ImZpbmFsb3V0cHV0YnVmZmVyIikKbGluZXMoTTYkVGltZXN0YW1wLE02JE91dHB1dEJ1ZmZlcikKCnBhcihtZnJvdyA9IGMoMSwyKSkKZ2V2ZXJmZGVQbGF0ZW4gPC0gTTYkT3V0cHV0QnVmZmVyCmdldmVyZmRlUGxhdGVuIDwtIGFzLm51bWVyaWMoZ2V2ZXJmZGVQbGF0ZW4pCmhpc3QoZ2V2ZXJmZGVQbGF0ZW4pCmJveHBsb3QoZ2V2ZXJmZGVQbGF0ZW4pCgojcHJpbnQodW5pcXVlKGdldmVyZmRlUGxhdGVuKSkKI3ByaW50KHN1bW1hcnkoZ2V2ZXJmZGVQbGF0ZW4pKQpgYGAKCiMjIEx1eGUtcG90ZW4KCiMjIyBNYWNoaW5lIDcgLSBJSnplcnphYWctbWFjaGluZQoKYGBge3IgZWNobz1GQUxTRX0KTTcgPC0gc3Vic2V0KGxvZ2ZpbGUsc2VsZWN0PWMoVGltZXN0YW1wLFNlbmRlcixNZXNzYWdlLElucHV0QnVmZmVyLE91dHB1dEJ1ZmZlcixXb3JrbG9hZCksCiAgICAgICAgICAgICBzdWJzZXQ9KChtYWNoaW5lc19WPT03KSYoaXRlbXR5cGVfVj09IkUiKSYodGltZXN0YW1wc19WPD1yZW5kZXJUaW1lW2R1bW15UmVuZGVyZWRUaW1lXSkpKQoKcGFyKG1mcm93ID0gYygxLDEpKQpwbG90KE03JFRpbWVzdGFtcCxNNyRPdXRwdXRCdWZmZXIsbWFpbj0iSUp6ZXJ6YWFnbWFjaGluZSIseGxhYiA9ICJUaW1lc3RhbXAgaW4gc2Vjb25kcyIseWxhYj0iMXN0IG91dHB1dGJ1ZmZlciIpCmxpbmVzKE03JFRpbWVzdGFtcCxNNyRPdXRwdXRCdWZmZXIpCgpwYXIobWZyb3cgPSBjKDEsMikpCmdlemFhZ2RlUG90ZW4gPC0gTTckT3V0cHV0QnVmZmVyCmdlemFhZ2RlUG90ZW4gPC0gYXMubnVtZXJpYyhnZXphYWdkZVBvdGVuKQpoaXN0KGdlemFhZ2RlUG90ZW4sbWFpbj0iR2V6YWFnZGUgbHV4ZSBwb3RlbiIsIHhsYWI9ImJ1Y2tldCBncm9vdHRlIiwgeWxhYj0iaG9ldmVlbGhlaWQgbHV4ZSBnZXphYWdkZSBwb3RlbiIpCgp4YXhpcyA8LSBzZXEoMTpsZW5ndGgoZ2V6YWFnZGVQb3RlbikpCmJveHBsb3QoZ2V6YWFnZGVQb3RlbiwgeSA9IHhheGlzLCBtYWluPSJib3hwbG90IGx1eGUgZ2V6YWFnZGUgcG90ZW4iLCB5bGFiPSJIb2V2ZWVsaGVpZCBsdXhlIGdlemFhZ2RlIHBvdGVuIikKI3ByaW50KHN1bW1hcnkoZ2V6YWFnZGVQb3RlbikpCmBgYAoKIyMjIE1hY2hpbmUgOCAtIChJSnplcikgYnVpZ21hY2hpbmUKCmBgYHtyfQpNOCA8LSBzdWJzZXQobG9nZmlsZSxzZWxlY3Q9YyhUaW1lc3RhbXAsU2VuZGVyLE1lc3NhZ2UsSW5wdXRCdWZmZXIsT3V0cHV0QnVmZmVyLFdvcmtsb2FkLEl0ZW1UeXBlKSwKICAgICAgICAgICAgIHN1YnNldD0oKG1hY2hpbmVzX1Y9PTgpJihpdGVtdHlwZV9WPT0iRSIpJih0aW1lc3RhbXBzX1Y8PXJlbmRlclRpbWVbZHVtbXlSZW5kZXJlZFRpbWVdKSkpCgpwcmludChoZWFkKE04JE91dHB1dEJ1ZmZlcikpCnByaW50KHVuaXF1ZShNOCRPdXRwdXRCdWZmZXIpKQojcHJpbnQoY291bnQoKE04JE91dHB1dEJ1ZmZlcikpKQpjbGFzcyhNOCRPdXRwdXRCdWZmZXIpCiNvdXRwdXQgPC0gYWJzKE04JE91dHB1dEJ1ZmZlcikKCiMgcGFyKG1mcm93ID0gYygxLDEpKQojIHBsb3QoTTgkVGltZXN0YW1wLG91dHB1dCwgbWFpbj0iQnVpZ21hY2hpbmUiLHhsYWIgPSAiVGltZXN0YW1wIGluIHNlY29uZHMiLHlsYWI9IjFzdCBvdXRwdXRidWZmZXIiKQojIGxpbmVzKE04JFRpbWVzdGFtcCxNOCRPdXRwdXRCdWZmZXIpCgojcHJpbnQoaGVhZChNOCwgbj01MCkpCiNwcmludCh0YWlsKE04LCBuPTUwKSkKCiMgcGFyKG1mcm93ID0gYygxLDIpKQojIGdlYm9nZW5Qb3RlbiA8LSBNOCRPdXRwdXRCdWZmZXIKIyBnZWJvZ2VuUG90ZW4gPC0gYXMubnVtZXJpYyhnZWJvZ2VuUG90ZW4pCiMgaGlzdChnZWJvZ2VuUG90ZW4sbWFpbj0iR2Vib2dlbiBsdXhlIHBvdGVuIiwgeGxhYj0iYnVja2V0IGdyb290dGUiLCB5bGFiPSJob2V2ZWVsaGVpZCBsdXhlIGdlYm9nZW4gcG90ZW4iKQoKI2QgPC0gZGVuc2l0eShnZXphYWdkZUJsYWRlbikKI3Bsb3QoZCkKI3BvbHlnb24oZCxjb2w9InJlZCIsYm9yZGVyPSJibHVlIikKCiMgeGF4aXMgPC0gc2VxKDE6bGVuZ3RoKGdlYm9nZW5Qb3RlbikpCiMgYm94cGxvdCh4ID0gZ2Vib2dlblBvdGVuLHkgPSB4YXhpcywgbWFpbj0iYm94cGxvdCBsdXhlIGdlYm9nZW4gcG90ZW4iLCB5bGFiPSJIb2V2ZWVsaGVpZCBsdXhlIGdlYm9nZW4gcG90ZW4iKQoKI3ByaW50KHN1bW1hcnkoZ2V6YWFnZGVCbGFkZW4pKQojcHJpbnQodW5pcXVlKGdlemFhZ2RlQmxhZGVuKSkKYGBgCgojIyMgTWFjaGluZSA5IC0gTGFzbWFjaGluZQoKYGBge3IgZWNobz1GQUxTRX0KTTkgPC0gc3Vic2V0KGxvZ2ZpbGUsc2VsZWN0PWMoVGltZXN0YW1wLFNlbmRlcixNZXNzYWdlLElucHV0QnVmZmVyLE91dHB1dEJ1ZmZlcixXb3JrbG9hZCksCiAgICAgICAgICAgICBzdWJzZXQ9KChtYWNoaW5lc19WPT05KSYoaXRlbXR5cGVfVj09IkUiKSYodGltZXN0YW1wc19WPD1yZW5kZXJUaW1lW2R1bW15UmVuZGVyZWRUaW1lXSkpKQoKcGFyKG1mcm93ID0gYygxLDEpKQpwbG90KE05JFRpbWVzdGFtcCxNOSRPdXRwdXRCdWZmZXIsbWFpbj0iTGFzbWFjaGluZSIseGxhYiA9ICJUaW1lc3RhbXAgaW4gc2Vjb25kcyIseWxhYj0iMm5kIG91dHB1dGJ1ZmZlciIpCmxpbmVzKE05JFRpbWVzdGFtcCxNOSRPdXRwdXRCdWZmZXIpCgpwYXIobWZyb3cgPSBjKDEsMikpCmdlbGFzZGVQb3RlbiA8LSBNOSRPdXRwdXRCdWZmZXIKZ2VsYXNkZVBvdGVuIDwtIGFzLm51bWVyaWMoZ2VsYXNkZVBvdGVuKQpoaXN0KGdlbGFzZGVQb3RlbixtYWluPSJHZWxhc2RlIGx1eGUgcG90ZW4iLCB4bGFiPSJidWNrZXQgZ3Jvb3R0ZSIsIHlsYWI9ImhvZXZlZWxoZWlkIGdlbGFzZGUgbHV4ZSBwb3RlbiIpCgp4YXhpcyA8LSBzZXEoMTpsZW5ndGgoZ2VsYXNkZVBvdGVuKSkKYm94cGxvdChnZWxhc2RlUG90ZW4seSA9IHhheGlzLCBtYWluPSJib3hwbG90IGx1eGUgZ2VsYXNkZSBwb3RlbiIsIHlsYWI9IkhvZXZlZWxoZWlkIGx1eGUgZ2VsYXNkZSBwb3RlbiIpCgojcHJpbnQoc3VtbWFyeShnZWxhc2RlUG90ZW4pKQpgYGAKCiMjIyBNYWNoaW5lIDExIC0gcG9saWpzdG1hY2hpbmUKCmBgYHtyIGVjaG89RkFMU0V9Ck0xMSA8LSBzdWJzZXQobG9nZmlsZSxzZWxlY3Q9YyhUaW1lc3RhbXAsU2VuZGVyLE1lc3NhZ2UsSW5wdXRCdWZmZXIsT3V0cHV0QnVmZmVyLFdvcmtsb2FkKSwKICAgICAgICAgICAgICBzdWJzZXQ9KChtYWNoaW5lc19WPT0xMSkmKGl0ZW10eXBlX1Y9PSJFIikmKHRpbWVzdGFtcHNfVjw9cmVuZGVyVGltZVtkdW1teVJlbmRlcmVkVGltZV0pKSkKCnBhcihtZnJvdyA9IGMoMSwxKSkKcGxvdChNMTEkVGltZXN0YW1wLE0xMSRPdXRwdXRCdWZmZXIsbWFpbj0iUG9saWpzdG1hY2hpbmUiLHhsYWIgPSAiVGltZXN0YW1wIGluIHNlY29uZHMiLHlsYWI9ImZpbmFsIG91dHB1dGJ1ZmZlciIpCmxpbmVzKE0xMSRUaW1lc3RhbXAsTTExJE91dHB1dEJ1ZmZlcikKCnBhcihtZnJvdyA9IGMoMSwyKSkKZ2Vwb2xpanN0ZVBvdGVuIDwtIE0xMSRPdXRwdXRCdWZmZXIKZ2Vwb2xpanN0ZVBvdGVuIDwtIGFzLm51bWVyaWMoZ2Vwb2xpanN0ZVBvdGVuKQpoaXN0KGdlcG9saWpzdGVQb3RlbikKYm94cGxvdChnZXBvbGlqc3RlUG90ZW4pCgojcHJpbnQoc3VtbWFyeShnZWNvYXRlUG90ZW4pKQpgYGAKCi0tLQo=