EstadÃsticas Valorant
La base de datos contiene 135 partidas desde 2021-06-16 hasta 2021-10-16.
Resumen


Veamos ahora la performance por mapa

Icebox, con -5 aparece como el mapa con mayor complejidad. Vamos a descomponer esta estadÃstica según ataque o defensa:


Tanto en Haven como en Bind, el equipo parece sentirse mas cómodo al atacar. Tambien puede verse que se perdieron todas las partidas donde comenzamos atacando en Icebox mientras que, al defender, se obtienen mejores resultados.

Resultados por Jugador

Distribución de kills por jugador
Composición
Fenelepe
El jugador PD FeNeLePe jugó un total de 126 partidas que representan 93.33 % sobre el total de partidas. A continuación se muestran sus cifras generales y las cifras de los personajes que eligió
|
|
Cifras
|
|
|
Promedio Kills
|
Promedio Muertes
|
Promedio Asistencias
|
KDR
|
|
23.032
|
14.159
|
5.325
|
1.791
|
|
|
Personajes
|
|
|
Personaje
|
Total
|
Promedio Kills
|
Promedio Muertes
|
Promedio Asistencias
|
KDR
|
|
Phoenix
|
1 ( % 0.79)
|
28.000
|
13.000
|
4.000
|
2.154
|
|
Sova
|
23 ( % 18.25)
|
24.913
|
14.174
|
6.174
|
2.042
|
|
KJ
|
15 ( % 11.9)
|
26.267
|
14.000
|
4.867
|
1.977
|
|
Skye
|
25 ( % 19.84)
|
21.760
|
12.480
|
6.200
|
1.872
|
|
Jett
|
22 ( % 17.46)
|
23.318
|
14.227
|
4.727
|
1.872
|
|
Cypher
|
14 ( % 11.11)
|
23.429
|
15.571
|
5.571
|
1.683
|
|
Sage
|
7 ( % 5.56)
|
23.143
|
14.857
|
4.286
|
1.599
|
|
Reyna
|
6 ( % 4.76)
|
23.000
|
15.500
|
5.333
|
1.513
|
|
Viper
|
8 ( % 6.35)
|
17.375
|
14.000
|
3.875
|
1.273
|
|
Breach
|
2 ( % 1.59)
|
21.000
|
18.500
|
6.500
|
1.155
|
|
Raze
|
3 ( % 2.38)
|
13.667
|
15.333
|
3.000
|
0.881
|
A continuación se muestra el desempeño de los agentes según el mapa:
Evolutivos generales
Rendimiento según mapa

Gráfico Polar
Chicho874
El jugador PD Chicho874 jugó un total de 105 partidas que representan 77.78 % sobre el total de partidas. A continuación se muestran sus cifras generales y las cifras de los personajes que eligió
|
|
Cifras
|
|
|
Promedio Kills
|
Promedio Muertes
|
Promedio Asistencias
|
KDR
|
|
24.324
|
14.238
|
5.362
|
1.839
|
|
|
Personajes
|
|
|
Personaje
|
Total
|
Promedio Kills
|
Promedio Muertes
|
Promedio Asistencias
|
KDR
|
|
Breach
|
1 ( % 0.95)
|
37.000
|
13.000
|
5.000
|
2.846
|
|
KJ
|
1 ( % 0.95)
|
8.000
|
3.000
|
3.000
|
2.667
|
|
Raze
|
17 ( % 16.19)
|
24.765
|
14.118
|
7.588
|
1.913
|
|
Astra
|
2 ( % 1.9)
|
33.000
|
17.000
|
4.000
|
1.905
|
|
Omen
|
77 ( % 73.33)
|
24.312
|
14.273
|
4.922
|
1.832
|
|
kayo
|
4 ( % 3.81)
|
22.250
|
14.500
|
6.250
|
1.593
|
|
Viper
|
1 ( % 0.95)
|
24.000
|
17.000
|
2.000
|
1.412
|
|
Brimstone
|
2 ( % 1.9)
|
18.500
|
15.500
|
6.000
|
1.183
|
Evolutivos generales
Rendimiento según mapa

Gráfico Polar
Pabloca86
El jugador PD pabloca86 jugó un total de 125 partidas que representan 93.33 % sobre el total de partidas. A continuación se muestran sus cifras generales y las cifras de los personajes que eligió
|
|
Cifras
|
|
|
Promedio Kills
|
Promedio Muertes
|
Promedio Asistencias
|
KDR
|
|
10.2
|
15.992
|
4.096
|
0.689
|
|
|
Personajes
|
|
|
Personaje
|
Total
|
Promedio Kills
|
Promedio Muertes
|
Promedio Asistencias
|
KDR
|
|
Sage
|
3 ( % 2.4)
|
7.333
|
10.667
|
1.667
|
0.883
|
|
Jett
|
65 ( % 52)
|
11.231
|
16.185
|
4.569
|
0.738
|
|
Breach
|
56 ( % 44.8)
|
9.179
|
16.071
|
3.732
|
0.623
|
|
Sova
|
1 ( % 0.8)
|
9.000
|
15.000
|
1.000
|
0.600
|
Evolutivos generales
Rendimiento según mapa

Gráfico Polar
JustoYNecesario
El jugador PD JustoYNecesario jugó un total de 78 partidas que representan 57.78 % sobre el total de partidas. A continuación se muestran sus cifras generales y las cifras de los personajes que eligió
|
|
Cifras
|
|
|
Promedio Kills
|
Promedio Muertes
|
Promedio Asistencias
|
KDR
|
|
11.013
|
15.987
|
4.436
|
0.744
|
|
|
Personajes
|
|
|
Personaje
|
Total
|
Promedio Kills
|
Promedio Muertes
|
Promedio Asistencias
|
KDR
|
|
Raze
|
8 ( % 10.26)
|
12.250
|
11.750
|
5.875
|
1.153
|
|
Brimstone
|
18 ( % 23.08)
|
10.944
|
14.389
|
4.667
|
0.819
|
|
Yoru
|
44 ( % 56.41)
|
10.591
|
16.864
|
4.318
|
0.657
|
|
Jett
|
6 ( % 7.69)
|
12.833
|
19.667
|
3.000
|
0.652
|
|
kayo
|
2 ( % 2.56)
|
10.500
|
17.000
|
3.500
|
0.623
|
Evolutivos generales
Rendimiento según mapa

Gráfico Polar
Bernoneitor
El jugador PD Bernoneitor jugó un total de 103 partidas que representan 76.3 % sobre el total de partidas. A continuación se muestran sus cifras generales y las cifras de los personajes que eligió
|
|
Cifras
|
|
|
Promedio Kills
|
Promedio Muertes
|
Promedio Asistencias
|
KDR
|
|
10.738
|
15.65
|
4.951
|
0.746
|
|
|
Personajes
|
|
|
Personaje
|
Total
|
Promedio Kills
|
Promedio Muertes
|
Promedio Asistencias
|
KDR
|
|
Breach
|
1 ( % 0.97)
|
18.000
|
13.000
|
3.000
|
1.385
|
|
KJ
|
7 ( % 6.8)
|
9.429
|
14.286
|
3.000
|
0.974
|
|
Brimstone
|
12 ( % 11.65)
|
13.500
|
17.083
|
5.083
|
0.803
|
|
Raze
|
6 ( % 5.83)
|
14.000
|
17.833
|
6.000
|
0.767
|
|
Sage
|
61 ( % 59.22)
|
10.131
|
15.262
|
5.311
|
0.724
|
|
Skye
|
9 ( % 8.74)
|
10.222
|
15.667
|
3.889
|
0.672
|
|
Cypher
|
7 ( % 6.8)
|
9.429
|
16.429
|
4.286
|
0.596
|
Evolutivos generales
Rendimiento según mapa

Gráfico Polar
Guille YeiYi
El jugador PD Guille YeiYi jugó un total de 61 partidas que representan 45.19 % sobre el total de partidas. A continuación se muestran sus cifras generales y las cifras de los personajes que eligió
|
|
Cifras
|
|
|
Promedio Kills
|
Promedio Muertes
|
Promedio Asistencias
|
KDR
|
|
8.197
|
15.066
|
5.246
|
0.579
|
|
|
Personajes
|
|
|
Personaje
|
Total
|
Promedio Kills
|
Promedio Muertes
|
Promedio Asistencias
|
KDR
|
|
KJ
|
4 ( % 6.56)
|
9.500
|
13.250
|
6.250
|
0.703
|
|
Sage
|
35 ( % 57.38)
|
8.171
|
14.829
|
6.486
|
0.586
|
|
Viper
|
22 ( % 36.07)
|
8.000
|
15.773
|
3.091
|
0.546
|
Rendimiento según mapa

Gráfico Polar
Tanguito84
El jugador PD Tanguito84 jugó un total de 77 partidas que representan 57.04 % sobre el total de partidas. A continuación se muestran sus cifras generales y las cifras de los personajes que eligió
|
|
Cifras
|
|
|
Promedio Kills
|
Promedio Muertes
|
Promedio Asistencias
|
KDR
|
|
11.481
|
16.286
|
5.584
|
0.727
|
|
|
Personajes
|
|
|
Personaje
|
Total
|
Promedio Kills
|
Promedio Muertes
|
Promedio Asistencias
|
KDR
|
|
Raze
|
66 ( % 85.71)
|
12.015
|
16.47
|
5.561
|
0.756
|
|
Sage
|
10 ( % 12.99)
|
8.100
|
14.60
|
6.000
|
0.560
|
|
Phoenix
|
1 ( % 1.3)
|
10.000
|
21.00
|
3.000
|
0.476
|
Rendimiento según mapa

Gráfico Polar
LS0tDQp0aXRsZTogIlZhbG9yYW50Ig0KYXV0aG9yOiAiRmVyY2hlcm8gSnVhbiBHdWlsbGVybW8gKEBndWlsbGVhZGhvbm9yZW0pXlsgX1NveSBzb2Npw7Nsb2dvIChGU09DLVVCQSkuIE1lIGRlZGljbyBhbCBhbmFsaXNpcyBkZSBkYXRvcyBlbiB0ZW1hcyBjb21vIGVsIGVzdHVkaW8gZGUgbGEgb3BpbmnDs24gcMO6YmxpY2EsIGNvbXBvcnRhbWllbnRvIGVsZWN0b3JhbCwgYW5hbGlzaXMgZGUgdGV4dG8sIHJlZGVzIHNvY2lhbGVzIHkgY29uc3Vtb3MgY3VsdHVyYWxlcywgdG9kbyBtZWRpYW50ZSBSIHkgUGh5dG9uLiBEaXJpam8gZWwgT2JzZXJ2YXRvcmlvIGRlIE9waW5pw7NuIFB1YmxpY2EgIGVuXyBbQUNERVNdKGh0dHA6Ly93d3cuYWNkZXN3ZWIub3JnLykgX3kgZXNjcmlibyBlbl8gW21pIGJsb2cgZGUgdGVtYXMgZGUgUl0oaHR0cHM6Ly9ycHVicy5jb20vZ3VpbGxlZmVyY2hlcm8pIF95IGVuXyBbbWkgYmxvZyBkZSB0ZW1hcyBkZSBnZW5lcmFsZXNdKGh0dHBzOi8vYml0YWNvcmFtb2Rlcm5hYmxvZy53b3JkcHJlc3MuY29tKS4gX0NvbnRhY3RvXzogZ3VpbGxlZmVyY2hlcm9AZ21haWwuY29tXSINCmRhdGU6ICJBZ29zdG8gZGUgMjAyMSINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDoNCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlDQogICAgY29kZV9mb2xkaW5nOiBoaWRlDQogICAgdG9jOiBUUlVFDQogICAgZGVwdGg6IDUNCnN1YnRpdGxlOiBBbsOhbGlzaXMgZXF1aXBvIFBEDQotLS0NCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUpDQpgYGANCg0KIyMgRXN0YWTDrXN0aWNhcyBWYWxvcmFudCB7LnRhYnNldCAudGFic2V0LWZhZGV9DQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9DQojTGltcGlhbW9zIGFtYmllbnRlIGRlIHRyYWJham8NCg0Kcm0obGlzdCA9IGxzKCkpDQoNCiNJbnN0YWxhbW9zIExpYnJlcsOtYXMNCg0KI2luc3RhbGwucGFja2FnZXMoIkRUIikNCmxpYnJhcnkoIkRUIikNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeSgidGlkeXRleHQiKQ0KbGlicmFyeShsdWJyaWRhdGUpDQpsaWJyYXJ5KGthYmxlRXh0cmEpDQpsaWJyYXJ5KG9wZW54bHN4KQ0KbGlicmFyeShwbG90bHkpDQoNCiNMZXZhbnRhbW9zIGxhIGJhc2UNCg0KQmFzZSA8LSByZWFkLnhsc3goIkJhc2UueGxzeCIsIHNoZWV0ID0gIk1hcmNhZG9yIikNCg0KI2xpbXBpYW1vcyBmZWNoYQ0KDQpCYXNlJEZlY2hhIDwtIGNvbnZlcnRUb0RhdGUoQmFzZSRGZWNoYSkNCg0KDQojY3JlYW1vcyBiYXNlcyBhdXgNCg0KDQpCYXNlUEQgPC0gQmFzZSAlPiUgDQogIGZpbHRlcihFcXVpcG8gPT0gInBpZWxkZXBvciIpDQoNCg0KQmFzZVBhcnRpZGFzIDwtIEJhc2UgJT4lIA0KICBzZWxlY3QoQ8OzZGlnbyxGZWNoYSxFc2NlbmFyaW8sRHVyYWNpw7NuLEF0YXF1ZSxwaWVsZGVwb3Iscml2YWwsUmVzdWx0YWRvKSAlPiUgDQogIGZpbHRlcighZHVwbGljYXRlZChDw7NkaWdvKSkNCg0KUGFydGlkYXMgPC0gbnJvdyhCYXNlUGFydGlkYXMpDQoNCkJhc2VDb21wIDwtIEJhc2VQRCAlPiUgDQogIHNlbGVjdChDw7NkaWdvLFBlcnNvbmFqZSkgJT4lIA0KICBtdXRhdGUoanVnID0gcmVwKChjKCJqMSIsImoyIiwiajMiLCJqNCIsImo1IikpLFBhcnRpZGFzKSkgJT4lIA0KICBwaXZvdF93aWRlcihuYW1lc19mcm9tID0ganVnLA0KICAgICAgICAgICAgICB2YWx1ZXNfZnJvbSA9IFBlcnNvbmFqZSkNCg0KQmFzZUNvbXBvc2ljaW9uZXMgPC0gbGVmdF9qb2luKEJhc2VDb21wLEJhc2VQYXJ0aWRhcykNCg0KI0RlZmluaW1vcyBvYmpldG9zIHBhcmEgdGV4dG8NCg0KZmVjaGFpbmkgPC0gbWluKEJhc2UkRmVjaGEpDQpmZWNoYWZpbiA8LSBtYXgoQmFzZSRGZWNoYSkNCg0KY2FudHBhcnRpZGFzIDwtIG5yb3coQmFzZSkvMTANCg0KDQojRGVmaW5pbW9zIGNvbG9yZXMNCg0KbmVncm8gPC0gIiMwYzBjMGMiDQpncmlzMSA8LSAiIzU4NTc1NyINCmdyaXMyIDwtICIjNzI3MTcxIg0KYmxhbmNvIDwtICIjZjlmOWY5Ig0KDQoNCmBgYA0KDQpMYSBiYXNlIGRlIGRhdG9zIGNvbnRpZW5lIGByIGNhbnRwYXJ0aWRhc2AgcGFydGlkYXMgZGVzZGUgYHIgZmVjaGFpbmlgIGhhc3RhIGByIGZlY2hhZmluYC4NCg0KIyMjIFJlc3VtZW4NCg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NClRhYmxhXzEgPC0gQmFzZSAlPiUgDQogIHNlbGVjdChSZXN1bHRhZG8pICU+JSANCiAgZ3JvdXBfYnkoUmVzdWx0YWRvKSAlPiUgDQogIHN1bW1hcmlzZShUb3RhbCA9IG4oKS8xMCkgJT4lIA0KICBtdXRhdGUoUG9yY2VudGFqZSA9IHJvdW5kKFRvdGFsL3N1bShUb3RhbCkqMTAwLDIpKSAlPiUgDQogIG11dGF0ZShFdGlxdWV0YSA9IHBhc3RlMChUb3RhbCwgIiAoICUgIiwgUG9yY2VudGFqZSwgIikiKSkNCg0KZ2dwbG90KFRhYmxhXzEsIGFlcyh4ID0gIiIgLCB5ID0gVG90YWwsIGZpbGwgPSBSZXN1bHRhZG8gKSkrDQogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCB3aWR0aCA9IDAuNSkrDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBFdGlxdWV0YSksIHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2sodmp1c3QgPSAwLjUpLA0KICAgICAgICAgICAgY29sb3IgPSBjYXNlX3doZW4oDQogICAgICAgICAgICAgIFRhYmxhXzEkUmVzdWx0YWRvID09ICJWIiB+ICJibGFjayIsDQogICAgICAgICAgICAgIFRhYmxhXzEkUmVzdWx0YWRvID09ICJEIiB+ICJ3aGl0ZSIsDQogICAgICAgICAgICAgIFRhYmxhXzEkUmVzdWx0YWRvID09ICJFIiB+ICIjYWRhOWE5IiwNCiAgICAgICAgICAgICAgDQogICAgICAgICAgICApKSsNCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYyhuZWdybywgIiM1NDNjNTIiLCIjZjVmMWYxIikpKw0KICAgIGxhYnModGl0bGUgPSBwYXN0ZTAoIkRhdG9zIFZhbG9yYW50IEVxdWlwbyBQRCAiLGZlY2hhaW5pLCAiIC0gIiwgZmVjaGFmaW4pLA0KICAgICAgIHN1YnRpdGxlID0gIlJlc3VtZW4gVmljdG9yaWFzIC8gRGVycm90YXMiLA0KICAgICAgIGNhcHRpb24gPSAiRnVlbnRlOiBFbGFib3JhY2nDs24gcHJvcGlhIiwNCiAgICAgICB4ID0gIiIsDQogICAgICAgeSA9ICIiKSsNCiAgdGhlbWVfbWluaW1hbCgpKw0KICB0aGVtZSh0ZXh0ID0gZWxlbWVudF90ZXh0KGZhbWlseSA9ICJEZWNpbWEgV0UiLCBjb2xvciA9ICJncmV5MjAiKSwNCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAiVGltZXMgTmV3IFJvbWFuIiwgaGp1c3QgPSAwLjUsIHZqdXN0ID0gMC41KSwNCiAgICAgICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dCggaGp1c3QgPSAwLjUsIHZqdXN0ID0gMC41KSwNCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIsDQogICAgICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSkrDQogIGd1aWRlcyhmaWxsID0gZ3VpZGVfbGVnZW5kKHJldmVyc2UgPSBUUlVFKSkrDQogIGNvb3JkX2ZsaXAoKQ0KDQoNCmBgYA0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KDQpUYWJsYV8xLjEgPC0gQmFzZSAlPiUgDQogIHNlbGVjdChBdGFxdWUsUmVzdWx0YWRvKSAlPiUNCiAgZmlsdGVyKCFpcy5uYShBdGFxdWUpKSAlPiUNCiAgZ3JvdXBfYnkoQXRhcXVlLFJlc3VsdGFkbykgJT4lIA0KICBzdW1tYXJpc2UoVG90YWwgPSBuKCkvMTApICU+JSANCiAgbXV0YXRlKFBvcmNlbnRhamUgPSByb3VuZChUb3RhbC9zdW0oVG90YWwpKjEwMCwyKSkgJT4lIA0KICBtdXRhdGUoRXRpcXVldGEgPSBwYXN0ZTAoVG90YWwsICIgKCAlICIsIFBvcmNlbnRhamUsICIpIikpIA0KDQoNClRhYmxhYXV4IDwtIFRhYmxhXzEuMSAlPiUgDQogIHNlbGVjdChBdGFxdWUpICU+JSANCiAgZmlsdGVyKCFkdXBsaWNhdGVkKEF0YXF1ZSkpDQoNCmZpbGFzIDwtIG5yb3coVGFibGFhdXgpDQoNCmdncGxvdChUYWJsYV8xLjEsIGFlcyh4ID0gIiIgLCB5ID0gVG90YWwsIGZpbGwgPSBSZXN1bHRhZG8gKSkrDQogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCB3aWR0aCA9IDMpKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gRXRpcXVldGEpLCBwb3NpdGlvbiA9IHBvc2l0aW9uX3N0YWNrKHZqdXN0ID0gMC41KSwgc2l6ZSA9My41LCBjb2xvciA9IGJsYW5jbykrDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMobmVncm8sIGdyaXMyLGdyaXMxKSkrDQogICAgbGFicyh0aXRsZSA9IHBhc3RlMCgiRGF0b3MgVmFsb3JhbnQgRXF1aXBvIFBEICIsZmVjaGFpbmksICIgLSAiLCBmZWNoYWZpbiksDQogICAgICAgc3VidGl0bGUgPSAiUmVzdW1lbiBSZXN1bHRhZG8gc2Vnw7puIEF0YXF1ZS1EZWZlbnNhIiwNCiAgICAgICBjYXB0aW9uID0gIkZ1ZW50ZTogRWxhYm9yYWNpw7NuIHByb3BpYSIsDQogICAgICAgeCA9ICIiLA0KICAgICAgIHkgPSAiIikrDQogIHRoZW1lX21pbmltYWwoKSsNCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgdmp1c3QgPSAwLjUpLA0KICAgICAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KCBoanVzdCA9IDAuNSwgdmp1c3QgPSAwLjUpLA0KICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwNCiAgICAgICAgbGVnZW5kLnRpdGxlID0gZWxlbWVudF9ibGFuaygpKSsNCiAgZ3VpZGVzKGZpbGwgPSBndWlkZV9sZWdlbmQocmV2ZXJzZSA9IFRSVUUpKSsNCiAgY29vcmRfZmxpcCgpKw0KICBmYWNldF93cmFwKH5BdGFxdWUsIG5yb3cgPSBmaWxhcykNCmBgYA0KDQpWZWFtb3MgYWhvcmEgbGEgcGVyZm9ybWFuY2UgcG9yIG1hcGENCg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCg0KVGFibGFfMiA8LSBCYXNlICU+JSANCiAgc2VsZWN0KEVzY2VuYXJpbyxSZXN1bHRhZG8pICU+JQ0KICBmaWx0ZXIoIWlzLm5hKEVzY2VuYXJpbykpICU+JQ0KICBncm91cF9ieShFc2NlbmFyaW8sUmVzdWx0YWRvKSAlPiUgDQogIHN1bW1hcmlzZShUb3RhbCA9IG4oKS8xMCkgJT4lIA0KICBtdXRhdGUoUG9yY2VudGFqZSA9IHJvdW5kKFRvdGFsL3N1bShUb3RhbCkqMTAwLDIpKSAlPiUgDQogIG11dGF0ZShFdGlxdWV0YSA9IHBhc3RlMChUb3RhbCwgIiAoICUgIiwgUG9yY2VudGFqZSwgIikiKSkgDQoNCg0KVGFibGFhdXggPC0gVGFibGFfMiAlPiUgDQogIHNlbGVjdChFc2NlbmFyaW8pICU+JSANCiAgZmlsdGVyKCFkdXBsaWNhdGVkKEVzY2VuYXJpbykpDQoNCmZpbGFzIDwtIG5yb3coVGFibGFhdXgpDQoNCmdncGxvdChUYWJsYV8yLCBhZXMoeCA9ICIiICwgeSA9IFRvdGFsLCBmaWxsID0gUmVzdWx0YWRvICkpKw0KICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5Iiwgd2lkdGggPSAzKSsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IEV0aXF1ZXRhKSwgcG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IDAuNSksIHNpemUgPTMuNSwgY29sb3IgPSBibGFuY28pKw0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKG5lZ3JvLCBncmlzMixncmlzMSkpKw0KICAgIGxhYnModGl0bGUgPSBwYXN0ZTAoIkRhdG9zIFZhbG9yYW50IEVxdWlwbyBQRCAiLGZlY2hhaW5pLCAiIC0gIiwgZmVjaGFmaW4pLA0KICAgICAgIHN1YnRpdGxlID0gIlJlc3VtZW4gUmVzdWx0YWRvIHNlZ8O6biBtYXBhIiwNCiAgICAgICBjYXB0aW9uID0gIkZ1ZW50ZTogRWxhYm9yYWNpw7NuIHByb3BpYSIsDQogICAgICAgeCA9ICIiLA0KICAgICAgIHkgPSAiIikrDQogIHRoZW1lX21pbmltYWwoKSsNCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgdmp1c3QgPSAwLjUpLA0KICAgICAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KCBoanVzdCA9IDAuNSwgdmp1c3QgPSAwLjUpLA0KICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwNCiAgICAgICAgbGVnZW5kLnRpdGxlID0gZWxlbWVudF9ibGFuaygpKSsNCiAgZ3VpZGVzKGZpbGwgPSBndWlkZV9sZWdlbmQocmV2ZXJzZSA9IFRSVUUpKSsNCiAgY29vcmRfZmxpcCgpKw0KICBmYWNldF93cmFwKH5Fc2NlbmFyaW8sIG5yb3cgPSBmaWxhcykNCmBgYA0KDQpJY2Vib3gsIGNvbiAtNSBhcGFyZWNlIGNvbW8gZWwgbWFwYSBjb24gbWF5b3IgY29tcGxlamlkYWQuIFZhbW9zIGEgZGVzY29tcG9uZXIgZXN0YSBlc3RhZMOtc3RpY2Egc2Vnw7puIGF0YXF1ZSBvIGRlZmVuc2E6DQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQoNClRhYmxhXzIuMSA8LSBCYXNlICU+JSANCiAgZmlsdGVyKEF0YXF1ZSA9PSAiQXRhcXVlIikgJT4lIA0KICBzZWxlY3QoRXNjZW5hcmlvLFJlc3VsdGFkbykgJT4lDQogIGZpbHRlcighaXMubmEoRXNjZW5hcmlvKSkgJT4lDQogIGdyb3VwX2J5KEVzY2VuYXJpbyxSZXN1bHRhZG8pICU+JSANCiAgc3VtbWFyaXNlKFRvdGFsID0gbigpLzEwKSAlPiUgDQogIG11dGF0ZShQb3JjZW50YWplID0gcm91bmQoVG90YWwvc3VtKFRvdGFsKSoxMDAsMikpICU+JSANCiAgbXV0YXRlKEV0aXF1ZXRhID0gcGFzdGUwKFRvdGFsLCAiICggJSAiLCBQb3JjZW50YWplLCAiKSIpKSANCg0KDQpUYWJsYWF1eCA8LSBUYWJsYV8yLjEgJT4lIA0KICBzZWxlY3QoRXNjZW5hcmlvKSAlPiUgDQogIGZpbHRlcighZHVwbGljYXRlZChFc2NlbmFyaW8pKQ0KDQpmaWxhcyA8LSBucm93KFRhYmxhYXV4KQ0KDQpnZ3Bsb3QoVGFibGFfMi4xLCBhZXMoeCA9ICIiICwgeSA9IFRvdGFsLCBmaWxsID0gUmVzdWx0YWRvICkpKw0KICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5Iiwgd2lkdGggPSAzKSsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IEV0aXF1ZXRhKSwgcG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IDAuNSksIHNpemUgPTIuNSxjb2xvciA9IGJsYW5jbykrDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMobmVncm8sIGdyaXMyLGdyaXMxKSkrDQogICAgbGFicyh0aXRsZSA9IHBhc3RlMCgiRGF0b3MgVmFsb3JhbnQgRXF1aXBvIFBEICIsZmVjaGFpbmksICIgLSAiLCBmZWNoYWZpbiksDQogICAgICAgc3VidGl0bGUgPSAiUmVzdW1lbiBSZXN1bHRhZG8gc2Vnw7puIG1hcGEgLSBBVEFRVUUiLA0KICAgICAgIGNhcHRpb24gPSAiRnVlbnRlOiBFbGFib3JhY2nDs24gcHJvcGlhIiwNCiAgICAgICB4ID0gIiIsDQogICAgICAgeSA9ICIiKSsNCiAgdGhlbWVfbWluaW1hbCgpKw0KICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41LCB2anVzdCA9IDAuNSksDQogICAgICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoIGhqdXN0ID0gMC41LCB2anVzdCA9IDAuNSksDQogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iLA0KICAgICAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCkpKw0KICBndWlkZXMoZmlsbCA9IGd1aWRlX2xlZ2VuZChyZXZlcnNlID0gVFJVRSkpKw0KICBjb29yZF9mbGlwKCkrDQogIGZhY2V0X3dyYXAofkVzY2VuYXJpbywgbnJvdyA9IGZpbGFzKQ0KYGBgDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQoNClRhYmxhXzIuMiA8LSBCYXNlICU+JSANCiAgZmlsdGVyKEF0YXF1ZSA9PSAiRGVmZW5zYSIpICU+JSANCiAgc2VsZWN0KEVzY2VuYXJpbyxSZXN1bHRhZG8pICU+JQ0KICBmaWx0ZXIoIWlzLm5hKEVzY2VuYXJpbykpICU+JQ0KICBncm91cF9ieShFc2NlbmFyaW8sUmVzdWx0YWRvKSAlPiUgDQogIHN1bW1hcmlzZShUb3RhbCA9IG4oKS8xMCkgJT4lIA0KICBtdXRhdGUoUG9yY2VudGFqZSA9IHJvdW5kKFRvdGFsL3N1bShUb3RhbCkqMTAwLDIpKSAlPiUgDQogIG11dGF0ZShFdGlxdWV0YSA9IHBhc3RlMChUb3RhbCwgIiAoICUgIiwgUG9yY2VudGFqZSwgIikiKSkgDQoNCg0KVGFibGFhdXggPC0gVGFibGFfMi4yICU+JSANCiAgc2VsZWN0KEVzY2VuYXJpbykgJT4lIA0KICBmaWx0ZXIoIWR1cGxpY2F0ZWQoRXNjZW5hcmlvKSkNCg0KZmlsYXMgPC0gbnJvdyhUYWJsYWF1eCkNCg0KZ2dwbG90KFRhYmxhXzIuMiwgYWVzKHggPSAiIiAsIHkgPSBUb3RhbCwgZmlsbCA9IFJlc3VsdGFkbyApKSsNCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHdpZHRoID0gMykrDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBFdGlxdWV0YSksIHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2sodmp1c3QgPSAwLjUpLCBzaXplID0zLjUsIGNvbG9yID0gYmxhbmNvKSsNCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYyhuZWdybywgZ3JpczIsZ3JpczEpKSsNCiAgICBsYWJzKHRpdGxlID0gcGFzdGUwKCJEYXRvcyBWYWxvcmFudCBFcXVpcG8gUEQgIixmZWNoYWluaSwgIiAtICIsIGZlY2hhZmluKSwNCiAgICAgICBzdWJ0aXRsZSA9ICJSZXN1bWVuIFJlc3VsdGFkbyBzZWfDum4gbWFwYSAtIERFRkVOU0EiLA0KICAgICAgIGNhcHRpb24gPSAiRnVlbnRlOiBFbGFib3JhY2nDs24gcHJvcGlhIiwNCiAgICAgICB4ID0gIiIsDQogICAgICAgeSA9ICIiKSsNCiAgdGhlbWVfbWluaW1hbCgpKw0KICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41LCB2anVzdCA9IDAuNSksDQogICAgICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoIGhqdXN0ID0gMC41LCB2anVzdCA9IDAuNSksDQogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iLA0KICAgICAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCkpKw0KICBndWlkZXMoZmlsbCA9IGd1aWRlX2xlZ2VuZChyZXZlcnNlID0gVFJVRSkpKw0KICBjb29yZF9mbGlwKCkrDQogIGZhY2V0X3dyYXAofkVzY2VuYXJpbywgbnJvdyA9IGZpbGFzKQ0KDQoNCmBgYA0KDQpUYW50byBlbiBIYXZlbiBjb21vIGVuIEJpbmQsIGVsIGVxdWlwbyBwYXJlY2Ugc2VudGlyc2UgbWFzIGPDs21vZG8gYWwgYXRhY2FyLiBUYW1iaWVuIHB1ZWRlIHZlcnNlIHF1ZSBzZSBwZXJkaWVyb24gdG9kYXMgbGFzIHBhcnRpZGFzIGRvbmRlIGNvbWVuemFtb3MgYXRhY2FuZG8gZW4gSWNlYm94IG1pZW50cmFzIHF1ZSwgYWwgZGVmZW5kZXIsIHNlIG9idGllbmVuIG1lam9yZXMgcmVzdWx0YWRvcy4NCg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCg0KVGFibGFfNCA8LSBCYXNlICU+JSANCiAgc2VsZWN0KFBhcnRpZGEsUmVzdWx0YWRvKSAlPiUNCiAgZmlsdGVyKCFpcy5uYShQYXJ0aWRhKSkgJT4lDQogIGdyb3VwX2J5KFBhcnRpZGEsUmVzdWx0YWRvKSAlPiUgDQogIHN1bW1hcmlzZShUb3RhbCA9IG4oKS8xMCkgJT4lIA0KICBtdXRhdGUoUG9yY2VudGFqZSA9IHJvdW5kKFRvdGFsL3N1bShUb3RhbCkqMTAwLDIpKSAlPiUgDQogIG11dGF0ZShFdGlxdWV0YSA9IHBhc3RlMChUb3RhbCwgIiAoICUgIiwgUG9yY2VudGFqZSwgIikiKSkgDQoNCg0KVGFibGFhdXggPC0gVGFibGFfNCAlPiUgDQogIHNlbGVjdChQYXJ0aWRhKSAlPiUgDQogIGZpbHRlcighZHVwbGljYXRlZChQYXJ0aWRhKSkNCg0KZmlsYXMgPC0gbnJvdyhUYWJsYWF1eCkNCg0KZ2dwbG90KFRhYmxhXzQsIGFlcyh4ID0gIiIgLCB5ID0gVG90YWwsIGZpbGwgPSBSZXN1bHRhZG8gKSkrDQogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCB3aWR0aCA9IDMpKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gRXRpcXVldGEpLCBwb3NpdGlvbiA9IHBvc2l0aW9uX3N0YWNrKHZqdXN0ID0gMC41KSwgc2l6ZSA9Mi41LCBjb2xvciA9IGJsYW5jbykrDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMobmVncm8sIGdyaXMyLGdyaXMxKSkrDQogICAgbGFicyh0aXRsZSA9IHBhc3RlMCgiRGF0b3MgVmFsb3JhbnQgRXF1aXBvIFBEICIsZmVjaGFpbmksICIgLSAiLCBmZWNoYWZpbiksDQogICAgICAgc3VidGl0bGUgPSAiUmVzdW1lbiBSZXN1bHRhZG8gc2Vnw7puIG7Dum1lcm8gZGUgcGFydGlkYSIsDQogICAgICAgY2FwdGlvbiA9ICJGdWVudGU6IEVsYWJvcmFjacOzbiBwcm9waWEiLA0KICAgICAgIHggPSAiIiwNCiAgICAgICB5ID0gIiIpKw0KICB0aGVtZV9taW5pbWFsKCkrDQogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIHZqdXN0ID0gMC41KSwNCiAgICAgICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dCggaGp1c3QgPSAwLjUsIHZqdXN0ID0gMC41KSwNCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIsDQogICAgICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSkrDQogIGd1aWRlcyhmaWxsID0gZ3VpZGVfbGVnZW5kKHJldmVyc2UgPSBUUlVFKSkrDQogIGNvb3JkX2ZsaXAoKSsNCiAgZmFjZXRfd3JhcCh+UGFydGlkYSwgbnJvdyA9IGZpbGFzKQ0KDQoNCmBgYA0KDQpSZXN1bHRhZG9zIHBvciBKdWdhZG9yDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQoNClRhYmxhXzMgPC0gQmFzZSAlPiUNCiAgZmlsdGVyKEVxdWlwbyA9PSAicGllbGRlcG9yIikgJT4lIA0KICBzZWxlY3QoUGxheWVyLFJlc3VsdGFkbykgJT4lDQogIGZpbHRlcighaXMubmEoUGxheWVyKSkgJT4lDQogIGdyb3VwX2J5KFBsYXllcixSZXN1bHRhZG8pICU+JSANCiAgc3VtbWFyaXNlKFRvdGFsID0gbigpKSAlPiUgDQogIG11dGF0ZShQb3JjZW50YWplID0gcm91bmQoVG90YWwvc3VtKFRvdGFsKSoxMDAsMikpICU+JSANCiAgbXV0YXRlKEV0aXF1ZXRhID0gcGFzdGUwKFRvdGFsLCAiICggJSAiLCBQb3JjZW50YWplLCAiKSIpKQ0KDQoNClRhYmxhYXV4MiA8LSBUYWJsYV8zICU+JSANCiAgc2VsZWN0KFBsYXllcikgJT4lIA0KICBmaWx0ZXIoIWR1cGxpY2F0ZWQoUGxheWVyKSkNCg0KZmlsYXMgPC0gbnJvdyhUYWJsYWF1eDIpDQoNCmdncGxvdChUYWJsYV8zLCBhZXMoeCA9ICIiICwgeSA9IFRvdGFsLCBmaWxsID0gUmVzdWx0YWRvICkpKw0KICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5Iiwgd2lkdGggPSAyLCBzaXplID0gMi41KSsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IEV0aXF1ZXRhKSwgcG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IDAuNSksIHNpemUgPTIuNSwgY29sb3IgPSBibGFuY28pKw0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKG5lZ3JvLCBncmlzMixncmlzMSkpKw0KICAgIGxhYnModGl0bGUgPSBwYXN0ZTAoIkRhdG9zIFZhbG9yYW50IEVxdWlwbyBQRCAiLGZlY2hhaW5pLCAiIC0gIiwgZmVjaGFmaW4pLA0KICAgICAgIHN1YnRpdGxlID0gIlJlc3VtZW4gUmVzdWx0YWRvIHNlZ8O6biBqdWdhZG9yIiwNCiAgICAgICBjYXB0aW9uID0gIkZ1ZW50ZTogRWxhYm9yYWNpw7NuIHByb3BpYSIsDQogICAgICAgeCA9ICIiLA0KICAgICAgIHkgPSAiIikrDQogIHRoZW1lX21pbmltYWwoKSsNCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgdmp1c3QgPSAwLjUpLA0KICAgICAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KCBoanVzdCA9IDAuNSwgdmp1c3QgPSAwLjUpLA0KICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwNCiAgICAgICAgbGVnZW5kLnRpdGxlID0gZWxlbWVudF9ibGFuaygpKSsNCiAgZ3VpZGVzKGZpbGwgPSBndWlkZV9sZWdlbmQocmV2ZXJzZSA9IFRSVUUpKSsNCiAgY29vcmRfZmxpcCgpKw0KICBmYWNldF93cmFwKH5QbGF5ZXIsIG5yb3cgPSBmaWxhcykNCmBgYA0KDQpEaXN0cmlidWNpw7NuIGRlIGtpbGxzIHBvciBqdWdhZG9yDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQoNCnAxIDwtIGdncGxvdChCYXNlICU+JSANCiAgICAgICAgIGZpbHRlcihFcXVpcG8gPT0gInBpZWxkZXBvciIpLGFlcyh4ID0gZmFjdG9yKFBsYXllciksIHkgPSBLKSkrDQogIGdlb21fYm94cGxvdChjb2xvciA9ICIjMGIwYTBlIikrDQogIGxhYnModGl0bGUgPSBwYXN0ZTAoIkRhdG9zIFZhbG9yYW50IEVxdWlwbyBQRCAiLGZlY2hhaW5pLCAiIC0gIiwgZmVjaGFmaW4pLA0KICAgICAgIHN1YnRpdGxlID0gIkRpc3RyaWJ1Y2nDs24gZGUgS2lsbHMgdG90YWwiLA0KICAgICAgIGNhcHRpb24gPSAiRnVlbnRlOiBFbGFib3JhY2nDs24gcHJvcGlhIiwNCiAgICAgICB4ID0gIkp1Z2Fkb3IiLA0KICAgICAgIHkgPSAiS2lsbHMiKSsNCiAgdGhlbWVfbWluaW1hbCgpKw0KICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KCBoanVzdCA9IDAuNSAsIHZqdXN0ID0gMC41KSwNCiAgICAgICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dCggaGp1c3QgPSAwLjUgLCB2anVzdCA9IDAuNSkpDQoNCmZpZzEgPC0gZ2dwbG90bHkocDEpDQoNCmZpZzENCg0KDQoNCmBgYA0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KDQojRFVSQUNJT04gREUgUEFSVElEQVMNCg0KIyBUYWJsYW1pbiA8LSBCYXNlUGFydGlkYXMgJT4lIA0KIyAgIHNlbGVjdChFc2NlbmFyaW8sRHVyYWNpw7NuLFJlc3VsdGFkbykgJT4lIA0KIyAgIGdyb3VwX2J5KEVzY2VuYXJpbyxSZXN1bHRhZG8pICU+JSANCiMgICBzdW1tYXJpc2UoRHVyYWNpw7NuID0gbWVhbihEdXJhY2nDs24pKQ0KDQoNCg0KDQoNCg0KDQojIHAyIDwtIGdncGxvdChCYXNlICU+JSANCiMgICAgICAgICAgZmlsdGVyKEVxdWlwbyA9PSAicGllbGRlcG9yIiksYWVzKHggPSBGZWNoYSwgeSA9IER1cmFjacOzbiwgY29sb3IgPSBSZXN1bHRhZG8pKSsNCiMgICBnZW9tX2xpbmUoKSsNCiMgICBsYWJzKHRpdGxlID0gcGFzdGUwKCJEYXRvcyBWYWxvcmFudCBFcXVpcG8gUEQgIixmZWNoYWluaSwgIiAtICIsIGZlY2hhZmluKSwNCiMgICAgICAgIHN1YnRpdGxlID0gIkR1cmFjacOzbiBkZSBwYXJ0aWRhcyBzZWfDum4gcmVzdWx0YWRvIiwNCiMgICAgICAgIGNhcHRpb24gPSAiRnVlbnRlOiBFbGFib3JhY2nDs24gcHJvcGlhIiwNCiMgICAgICAgIHggPSAiUmVzdWx0YWRvIiwNCiMgICAgICAgIHkgPSAiTWludXRvcyIpKw0KIyAgIHRoZW1lX21pbmltYWwoKSsNCiMgICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KCBoanVzdCA9IDAuNSAsIHZqdXN0ID0gMC41KSwNCiMgICAgICAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KCBoanVzdCA9IDAuNSAsIHZqdXN0ID0gMC41KSkNCiMgDQojIGZpZzIgPC0gZ2dwbG90bHkocDIpDQojIA0KIyBmaWcyDQoNCg0KYGBgDQoNCg0KDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQoNClRhYmxhRyA8LSBCYXNlICU+JQ0KICBmaWx0ZXIoRXF1aXBvID09ICJwaWVsZGVwb3IiKSAlPiUNCiAgI2ZpbHRlcihKdWdhZG9yID09ICJEb2MiKSAlPiUNCiAgc2VsZWN0KEZlY2hhLEssRCxBLEtEUikgJT4lDQogIGdyb3VwX2J5KEZlY2hhKSAlPiUNCiAgc3VtbWFyaXNlKEtpbGxzID0gcm91bmQobWVhbihLKSwyKSwNCiAgICAgICAgICAgIERlYXRocyA9IHJvdW5kKG1lYW4oRCksMiksDQogICAgICAgICAgICBLRFJwID0gcm91bmQobWVhbihLRFIpLDIpKSAlPiUNCiAgbXV0YXRlKEtpbGxzQWN1bSA9IHJvdW5kKGN1bW1lYW4oS2lsbHMpLDIpLA0KICAgICAgICAgRGVhdGhzQWN1bSA9IHJvdW5kKGN1bW1lYW4oRGVhdGhzKSwyKSwNCiAgICAgICAgIEtEUkFjdW0gPSByb3VuZChjdW1tZWFuKEtEUnApLDIpKQ0KDQojR3LDoWZpY28gMQ0KDQpwMyA8LSBwbG90X2x5KFRhYmxhRyx4ID0gfkZlY2hhKSU+JQ0KICBhZGRfdHJhY2UoeSA9IH5LaWxscyxtb2RlID0gImxpbmVzK21hcmtlcnMiLCBuYW1lID0gImtpbGxzIiwgbGluZSA9IGxpc3QoY29sb3IgPSAiIzI3MjY0MyIpLG1hcmtlciA9IGxpc3QoY29sb3IgPSAiIzI3MjY0MyIpKSAlPiUNCiAgYWRkX3RyYWNlKHkgPSB+S2lsbHNBY3VtLG1vZGUgPSAibGluZXMrbWFya2VycyIsIG5hbWUgPSAia2lsbHNBY3VtIiwgbGluZSA9IGxpc3QoY29sb3IgPSAiIzJjNjk4ZCIpLG1hcmtlciA9IGxpc3QoY29sb3IgPSAiIzJjNjk4ZCIpKQ0KDQoNCiNHcsOhZmljbyAyDQoNCnA0IDwtIHBsb3RfbHkoVGFibGFHLHggPSB+RmVjaGEpJT4lDQogIGFkZF90cmFjZSh5ID0gfkRlYXRocyxtb2RlID0gImxpbmVzK21hcmtlcnMiLCBuYW1lID0gIkRlYXRocyIsIGxpbmUgPSBsaXN0KGNvbG9yID0gIiNmNTU5NTEiKSxtYXJrZXIgPSBsaXN0KGNvbG9yID0gIiNmNTU5NTEiKSkgJT4lDQogIGFkZF90cmFjZSh5ID0gfkRlYXRoc0FjdW0sbW9kZSA9ICJsaW5lcyttYXJrZXJzIiwgbmFtZSA9ICJEZWF0aHNBY3VtIiwgbGluZSA9IGxpc3QoY29sb3IgPSAiIzgwMGUwZCIpLG1hcmtlciA9IGxpc3QoY29sb3IgPSAiIzgwMGUwZCIpKQ0KDQojR3LDoWZpY28gMw0KDQpwNSA8LSBwbG90X2x5KFRhYmxhRyx4ID0gfkZlY2hhKSU+JQ0KICBhZGRfdHJhY2UoeSA9IH5LRFJwLG1vZGUgPSAibGluZXMrbWFya2VycyIsIG5hbWUgPSAiS0RSIiwgbGluZSA9IGxpc3QoY29sb3IgPSAiIzk1YWRiZSIpLG1hcmtlciA9IGxpc3QoY29sb3IgPSAiIzk1YWRiZSIpKSAlPiUNCiAgYWRkX3RyYWNlKHkgPSB+S0RSQWN1bSxtb2RlID0gImxpbmVzK21hcmtlcnMiLCBuYW1lID0gIktEUkFjdW0iLCBsaW5lID0gbGlzdChjb2xvciA9ICIjNTc0ZjdkIiksbWFya2VyID0gbGlzdChjb2xvciA9ICIjNTc0ZjdkIikpDQoNCg0KDQoNCmZpZyA8LSBzdWJwbG90KHAzLHA0LHA1LG5yb3dzID0gMywgc2hhcmVYID0gVFJVRSwgbWFyZ2luID0gMC4wNSkgJT4lDQogIGxheW91dChhbm5vdGF0aW9ucyA9IGxpc3QoDQogICAgbGlzdCh4ID0gMC41ICwgeSA9IDEuMDUgLHRleHQgPSAiS2lsbHMiLCBzaG93YXJyb3cgPSBGLHhyZWY9J3BhcGVyJywgeXJlZj0ncGFwZXInKSwNCiAgICBsaXN0KHggPSAwLjUgLCB5ID0gMC43LHRleHQgPSAiRGVhdGhzIixzaG93YXJyb3cgPSBGLHhyZWY9J3BhcGVyJywgeXJlZj0ncGFwZXInKSwNCiAgICBsaXN0KHggPSAwLjUgLCB5ID0gMC4zICwgeSA9IDI1LHRleHQgPSAiS0RSIixzaG93YXJyb3cgPSBGLHhyZWY9J3BhcGVyJywgeXJlZj0ncGFwZXInKQ0KICApKQ0KDQpmaWcNCg0KDQoNCg0KYGBgDQoNCg0KDQoNCg0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KDQojIFRhYmxhXzUgPC0gQmFzZSAlPiUNCiMgICBmaWx0ZXIoRXF1aXBvID09ICJwaWVsZGVwb3IiKSAlPiUgDQojICAgI2ZpbHRlcihKdWdhZG9yID09ICJMZW8iKSAlPiUgDQojICAgc2VsZWN0KEZlY2hhLEtEUikgJT4lDQojICAgZ3JvdXBfYnkoRmVjaGEpICU+JSANCiMgICBzdW1tYXJpc2UoS0RSID0gbWVhbihLRFIpKQ0KIyANCiMgDQojIGZpZzEgPC0gZ2dwbG90KFRhYmxhXzUsIGFlcyh4ID0gRmVjaGEsIHkgPSBLRFIpKSsgI3NlbGVjY2lvbmFtb3MgdmFyaWFibGVzIGEgZ3JhZmljYXIgeSBhIGNvbG9yZWFyDQojICAgZ2VvbV9saW5lKCkrIA0KIyAgIGdlb21fcG9pbnQoKSsNCiMgICAjIGdlb21fc21vb3RoKG1ldGhvZCA9ICdsb2VzcycsDQojICAgIyAgICAgICAgICAgICAgZm9ybXVsYSA9ICd5IH4geCcpKw0KIyAgIGxhYnModGl0bGUgPXBhc3RlMCgiS0RSIFNlZ8O6biBmZWNoYSBQRCAiLGZlY2hhaW5pLCAiIC0gIiwgZmVjaGFmaW4pLA0KIyAgICAgICAgc3VidGl0bGUgPSAiS0RSIFByb21lZGlvIHNlZ8O6biBmZWNoYSIsDQojICAgICAgICBjYXB0aW9uID0gIkZ1ZW50ZTogRWxhYm9yYWNpw7NuIHByb3BpYSIsDQojICAgICAgICB4ID0gIkZlY2hhIiwNCiMgICAgICAgIHkgPSAiS0RSIikrDQojICAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gbWVhbihCYXNlJEtEUiksIGNvbG9yPSIjYmFlOGU4IikrDQojICAgI3NjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCIjMWFjMGM2IiwgIiNlNzQ2NDUiLCIjZmFjZDYwIikpKyAjY29sb3JlYW1vcyBsYXMgbGluZWFzDQojICAgdGhlbWVfbWluaW1hbCgpKw0KIyAgIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoIGhqdXN0ID0gMC41ICwgdmp1c3QgPSAwLjUpLCANCiMgICAgICAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KCBoanVzdCA9IDAuNSAsIHZqdXN0ID0gMC41KSkNCiMgDQojIGZpZzEgPC0gZ2dwbG90bHkoZmlnMSkNCiMgIA0KIyBmaWcxDQoNCmBgYA0KDQoNCiANCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQoNClRhYmxhXzQgPC0gQmFzZSAlPiUNCiAgZmlsdGVyKEVxdWlwbyA9PSAicGllbGRlcG9yIikgJT4lIA0KICBzZWxlY3QoRmVjaGEsRXNjZW5hcmlvLEtEUikgJT4lDQogIGdyb3VwX2J5KEZlY2hhLEVzY2VuYXJpbykgJT4lIA0KICBzdW1tYXJpc2UoS0RSID0gbWVhbihLRFIpKQ0KDQoNCmZpZzEgPC0gZ2dwbG90KFRhYmxhXzQsIGFlcyh4ID0gRmVjaGEsIHkgPSBLRFIpKSsgI3NlbGVjY2lvbmFtb3MgdmFyaWFibGVzIGEgZ3JhZmljYXIgeSBhIGNvbG9yZWFyDQogIGdlb21fbGluZSgpKyANCiAgZ2VvbV9wb2ludCgpKw0KICAjIGdlb21fc21vb3RoKG1ldGhvZCA9ICdsb2VzcycsDQogICMgICAgICAgICAgICAgZm9ybXVsYSA9ICd5IH4geCcpKw0KICBsYWJzKHRpdGxlID1wYXN0ZTAoIktEUiBTZWfDum4gZmVjaGEgUEQgIixmZWNoYWluaSwgIiAtICIsIGZlY2hhZmluKSwNCiAgICAgICBzdWJ0aXRsZSA9ICJLRFIgUHJvbWVkaW8gc2Vnw7puIGZlY2hhIiwNCiAgICAgICBjYXB0aW9uID0gIkZ1ZW50ZTogRWxhYm9yYWNpw7NuIHByb3BpYSIsDQogICAgICAgeCA9ICJGZWNoYSIsDQogICAgICAgeSA9ICJLRFIiKSsNCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gbWVhbihCYXNlJEtEUiksIGNvbG9yPSIjYmFlOGU4IikrDQogICNzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiIzFhYzBjNiIsICIjZTc0NjQ1IiwiI2ZhY2Q2MCIpKSsgI2NvbG9yZWFtb3MgbGFzIGxpbmVhcw0KICB0aGVtZV9taW5pbWFsKCkrDQogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoIGhqdXN0ID0gMC41ICwgdmp1c3QgPSAwLjUpLCANCiAgICAgICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dCggaGp1c3QgPSAwLjUgLCB2anVzdCA9IDAuNSkpKw0KICBmYWNldF93cmFwKH5Fc2NlbmFyaW8pDQoNCmZpZzEgPC0gZ2dwbG90bHkoZmlnMSkNCiANCmZpZzENCg0KYGBgDQoNCg0KQ29tcG9zaWNpw7NuDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojSEFDRVIgVEFCTEEgQ09OIEtBQkxFDQoNCiMga2FibGUoQmFzZUNvbXBvc2ljaW9uZXMgJT4lIA0KIyAgICAgICAgIHNlbGVjdCgtQ8OzZGlnbywtRHVyYWNpw7NuKSxhbGlnbiA9ICJsIixkaWdpdHMgPSAzLGNvbC5uYW1lcyA9IGMoIkp1ZyAxIiwiSnVnIDIiLCJKdWcgMyIsIkp1ZyA0IiwiSnVnIDUiLCJGZWNoYSIsIk1hcGEiLCJBdC9EZWYiLCJSb25kYXMgUEQiLCJSb25kYXMgUml2YWwiLCJSZXN1bHRhZG8iKSklPiUgDQojICAgICAgICAgI2NvbHVtbl9zcGVjKDEsIGJvbGQgPSBUUlVFLCBjb2xvciA9IG5lZ3JvKSAlPiUNCiMgICByb3dfc3BlYygwLGJhY2tncm91bmQgPSBuZWdybywgY29sb3IgPSBibGFuY28pICU+JSANCiMgICAgIGFkZF9oZWFkZXJfYWJvdmUoYygiICIgPSAxLA0KIyAgICAgICAgICAgICAgICAgICAgICAiQ2lmcmFzIj0gOSwNCiMgICAgICAgICAgICAgICAgICAgICAgIiAiID0xKSkgJT4lIA0KIyAgIGthYmxlX21pbmltYWwoKQ0KDQoNCmRhdGF0YWJsZShCYXNlQ29tcG9zaWNpb25lcyAlPiUgDQogICAgICAgc2VsZWN0KC1Dw7NkaWdvLC1EdXJhY2nDs24pLGZpbHRlciA9ICd0b3AnLA0KICAgICAgICAgIG9wdGlvbnMgPSBsaXN0KA0KICBzZWFyY2hpbmcgPSBUUlVFLA0KICBwYWdlTGVuZ3RoID0gMTUsDQogIGluaXRDb21wbGV0ZSA9IEpTKA0KICAgICJmdW5jdGlvbihzZXR0aW5ncywganNvbikgeyIsDQogICAgIiQoJ2JvZHknKS5jc3Moeydmb250LWZhbWlseSc6ICdDYWxpYnJpJ30pOyIsDQogICAgIyIkKHRoaXMuYXBpKCkudGFibGUoKS5oZWFkZXIoKSkuY3NzKHsnYmFja2dyb3VuZC1jb2xvcic6ICcjMDAwJywgJ2NvbG9yJzogJyNmZmYnfSk7IiwNCiAgICAifSIpDQopKSAlPiUgDQogICNmb3JtYXRSb3VuZChjKCJQcm9tZWRpb19LaWxscyIsIlByb21lZGlvX011ZXJ0ZXMiLCJQcm9tZWRpb19Bc2lzdGVuY2lhcyIsIktEUiIpLDIpICU+JSANCiAgZm9ybWF0U3R5bGUoDQogICAgJ3BpZWxkZXBvcicsDQogICAgYmFja2dyb3VuZCA9IHN0eWxlQ29sb3JCYXIoQmFzZUNvbXBvc2ljaW9uZXMkcGllbGRlcG9yLCBncmlzMiksDQogICAgYmFja2dyb3VuZFNpemUgPSAnMTAwJSA5MCUnLA0KICAgIGJhY2tncm91bmRSZXBlYXQgPSAnbm8tcmVwZWF0JywgDQogICAgYmFja2dyb3VuZFBvc2l0aW9uID0gJ2NlbnRlcicNCiAgKQ0KDQoNCmBgYA0KDQoNCiMjIyBGZW5lbGVwZQ0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KDQpCYXNlRmVyIDwtIEJhc2UgJT4lIA0KICBmaWx0ZXIoSnVnYWRvciA9PSAiRmVyY2hhIikNCg0KRmVyUGFydGlkYXMgPC0gbnJvdyhCYXNlRmVyKQ0KDQpwb3JjZmVyIDwtIHBhc3RlMChyb3VuZChGZXJQYXJ0aWRhcy9jYW50cGFydGlkYXMqMTAwLDIpLCIgJSIpDQoNCkZlclBlcnNvbmFqZXMgPC0gIEJhc2VGZXIgJT4lDQogIHNlbGVjdChQZXJzb25hamUsSyxELEEsS0RSKSAlPiUNCiAgZ3JvdXBfYnkoUGVyc29uYWplKSAlPiUgDQogIHN1bW1hcmlzZShhY3Jvc3MoZXZlcnl0aGluZygpLCBsaXN0KG1lYW4pKSkNCg0KRmVyR3JhbCA8LSBCYXNlRmVyICU+JQ0KICBzZWxlY3QoSyxELEEsS0RSKSAlPiUNCiAgc3VtbWFyaXNlKGFjcm9zcyhldmVyeXRoaW5nKCksIGxpc3QobWVhbikpKQ0KDQpGZXJQZXJzb25hamVzMiA8LSBCYXNlRmVyICU+JQ0KICBzZWxlY3QoUGVyc29uYWplLEssRCxBLEtEUikgJT4lDQogIGdyb3VwX2J5KFBlcnNvbmFqZSkgJT4lDQogIHN1bW1hcmlzZShUb3RhbCA9IG4oKSkgJT4lIA0KICBtdXRhdGUoUG9yY2VudGFqZSA9IHJvdW5kKFRvdGFsL3N1bShUb3RhbCkqMTAwLDIpKSAlPiUgDQogIG11dGF0ZShFdGlxdWV0YSA9IHBhc3RlMChUb3RhbCwgIiAoICUgIiwgUG9yY2VudGFqZSwgIikiKSkNCg0KDQpGZXJQZXJzb25hamVzRmluYWwgPC0gbGVmdF9qb2luKEZlclBlcnNvbmFqZXMsRmVyUGVyc29uYWplczIpICU+JSANCiAgc2VsZWN0KFBlcnNvbmFqZSxFdGlxdWV0YSxLXzEsRF8xLEFfMSxLRFJfMSkgJT4lIA0KICByZW5hbWUoVG90YWwgPSBFdGlxdWV0YSwNCiAgICAgICAgIFByb21lZGlvX0tpbGxzID0gS18xLA0KICAgICAgICAgUHJvbWVkaW9fTXVlcnRlcyA9IERfMSwNCiAgICAgICAgIFByb21lZGlvX0FzaXN0ZW5jaWFzID1BXzEsDQogICAgICAgICBLRFIgPSBLRFJfMSkgJT4lIA0KICBhcnJhbmdlKGRlc2MoS0RSKSkNCg0KDQojI1RhYmxhIHBlcnNvbmFqZSBlc2NlbmFyaW8NCg0KDQpGZXJQZXJNYXBhIDwtICBCYXNlRmVyICU+JQ0KICBzZWxlY3QoRXNjZW5hcmlvLFJlc3VsdGFkbyxQZXJzb25hamUsSyxELEEsS0RSKSAlPiUNCiAgZ3JvdXBfYnkoRXNjZW5hcmlvLFJlc3VsdGFkbyxQZXJzb25hamUpICU+JSANCiAgc3VtbWFyaXNlKGFjcm9zcyhldmVyeXRoaW5nKCksIGxpc3QobWVhbikpKQ0KDQpGZXJQZXJNYXBhMiA8LSBCYXNlRmVyICU+JQ0KICBzZWxlY3QoRXNjZW5hcmlvLFJlc3VsdGFkbyxQZXJzb25hamUsSyxELEEsS0RSKSAlPiUNCiAgZ3JvdXBfYnkoRXNjZW5hcmlvLFJlc3VsdGFkbyxQZXJzb25hamUpICU+JQ0KICBzdW1tYXJpc2UoVG90YWwgPSBuKCkpICU+JSANCiAgbXV0YXRlKFBvcmNlbnRhamUgPSByb3VuZChUb3RhbC9zdW0oVG90YWwpKjEwMCwyKSkgJT4lIA0KICBtdXRhdGUoRXRpcXVldGEgPSBwYXN0ZTAoVG90YWwsICIgKCAlICIsIFBvcmNlbnRhamUsICIpIikpDQoNCg0KRmVyUGVyTWFwYUZpbmFsIDwtIGxlZnRfam9pbihGZXJQZXJNYXBhLEZlclBlck1hcGEyKSAlPiUgDQogIHNlbGVjdChSZXN1bHRhZG8sUGVyc29uYWplLEV0aXF1ZXRhLEtfMSxEXzEsQV8xLEtEUl8xKSAlPiUgDQogIHJlbmFtZShUb3RhbCA9IEV0aXF1ZXRhLA0KICAgICAgICAgUHJvbWVkaW9fS2lsbHMgPSBLXzEsDQogICAgICAgICBQcm9tZWRpb19NdWVydGVzID0gRF8xLA0KICAgICAgICAgUHJvbWVkaW9fQXNpc3RlbmNpYXMgPUFfMSwNCiAgICAgICAgIEtEUiA9IEtEUl8xKSAlPiUgDQogIGFycmFuZ2UoKEVzY2VuYXJpbykpDQoNCg0KDQpgYGANCg0KRWwganVnYWRvciBQRCBGZU5lTGVQZSBqdWfDsyB1biB0b3RhbCBkZSBgciBGZXJQYXJ0aWRhc2AgcGFydGlkYXMgcXVlIHJlcHJlc2VudGFuIGByIHBvcmNmZXJgIHNvYnJlIGVsIHRvdGFsIGRlIHBhcnRpZGFzLiBBIGNvbnRpbnVhY2nDs24gc2UgbXVlc3RyYW4gc3VzIGNpZnJhcyBnZW5lcmFsZXMgeSBsYXMgY2lmcmFzIGRlIGxvcyBwZXJzb25hamVzIHF1ZSBlbGlnacOzDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojSEFDRVIgVEFCTEEgQ09OIEtBQkxFDQoNCmthYmxlKEZlckdyYWwsYWxpZ24gPSAibCIsZGlnaXRzID0gMyxjb2wubmFtZXMgPSBjKCJQcm9tZWRpbyBLaWxscyIsIlByb21lZGlvIE11ZXJ0ZXMiLCJQcm9tZWRpbyBBc2lzdGVuY2lhcyIsIktEUiIpKSU+JSANCiAgICAgICAgY29sdW1uX3NwZWMoMSwgYm9sZCA9IFRSVUUsIGNvbG9yID0gbmVncm8pICU+JQ0KICByb3dfc3BlYygwLGJhY2tncm91bmQgPSBuZWdybywgY29sb3IgPSBibGFuY28pICU+JSANCiAgICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiID0gMSwNCiAgICAgICAgICAgICAgICAgICAgICJDaWZyYXMiPSAyLA0KICAgICAgICAgICAgICAgICAgICAgIiAiID0xKSkgJT4lIA0KICBrYWJsZV9taW5pbWFsKCkNCmBgYA0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KI0hBQ0VSIFRBQkxBIENPTiBLQUJMRQ0KDQprYWJsZShGZXJQZXJzb25hamVzRmluYWwsYWxpZ24gPSAibCIsZGlnaXRzID0gMyxjb2wubmFtZXMgPSBjKCJQZXJzb25hamUiLCJUb3RhbCIsIlByb21lZGlvIEtpbGxzIiwiUHJvbWVkaW8gTXVlcnRlcyIsIlByb21lZGlvIEFzaXN0ZW5jaWFzIiwiS0RSIikpJT4lIA0KICAgICAgICBjb2x1bW5fc3BlYygxLCBib2xkID0gVFJVRSwgY29sb3IgPSBuZWdybykgJT4lDQogIHJvd19zcGVjKDAsYmFja2dyb3VuZCA9IG5lZ3JvLCBjb2xvciA9ICJ3aGl0ZSIpICU+JSANCiAgICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiID0gMSwNCiAgICAgICAgICAgICAgICAgICAgICJQZXJzb25hamVzIj0gNCwNCiAgICAgICAgICAgICAgICAgICAgICIgIiA9MSkpICU+JSANCiAga2FibGVfbWluaW1hbChodG1sX2ZvbnQgPSAiQ2FsaWJyaSIpDQpgYGANCg0KDQoNCg0KQSBjb250aW51YWNpw7NuIHNlIG11ZXN0cmEgZWwgZGVzZW1wZcOxbyBkZSBsb3MgYWdlbnRlcyBzZWfDum4gZWwgbWFwYToNCg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCiNIQUNFUiBUQUJMQSBDT04gS0FCTEUNCg0KIyBrYWJsZShGZXJQZXJNYXBhRmluYWwsYWxpZ24gPSAibCIsZGlnaXRzID0gMyxjb2wubmFtZXMgPSBjKCJNYXBhIiwiUGVyc29uYWplIiwiVG90YWwiLCJQcm9tZWRpbyBLaWxscyIsIlByb21lZGlvIE11ZXJ0ZXMiLCJQcm9tZWRpbyBBc2lzdGVuY2lhcyIsIktEUiIpKSU+JSANCiMgICAgICAgICBjb2x1bW5fc3BlYygxLCBib2xkID0gVFJVRSwgY29sb3IgPSBuZWdybykgJT4lDQojICAgcm93X3NwZWMoMCxiYWNrZ3JvdW5kID0gbmVncm8sIGNvbG9yID0gIndoaXRlIikgJT4lIA0KIyAgICAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIiA9IDEsDQojICAgICAgICAgICAgICAgICAgICAgICJSZW5kaW1pZW50byBzZWfDum4gbWFwYSI9IDUsDQojICAgICAgICAgICAgICAgICAgICAgICIgIiA9MSkpICU+JSANCiMgICBrYWJsZV9wYXBlcigiaG92ZXIiLGh0bWxfZm9udCA9ICJDYWxpYnJpIikNCmBgYA0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KI0hBQ0VSIFRBQkxBIENPTiBLQUJMRQ0KDQpkYXRhdGFibGUoRmVyUGVyTWFwYUZpbmFsLGZpbHRlciA9ICd0b3AnLA0KICAgICAgICAgIG9wdGlvbnMgPSBsaXN0KA0KICBzZWFyY2hpbmcgPSBUUlVFLA0KICBwYWdlTGVuZ3RoID0gMTUsDQogIGluaXRDb21wbGV0ZSA9IEpTKA0KICAgICJmdW5jdGlvbihzZXR0aW5ncywganNvbikgeyIsDQogICAgIiQoJ2JvZHknKS5jc3Moeydmb250LWZhbWlseSc6ICdDYWxpYnJpJ30pOyIsDQogICAgIyIkKHRoaXMuYXBpKCkudGFibGUoKS5oZWFkZXIoKSkuY3NzKHsnYmFja2dyb3VuZC1jb2xvcic6ICcjMDAwJywgJ2NvbG9yJzogJyNmZmYnfSk7IiwNCiAgICAifSIpDQopKSAlPiUgDQogIGZvcm1hdFJvdW5kKGMoIlByb21lZGlvX0tpbGxzIiwiUHJvbWVkaW9fTXVlcnRlcyIsIlByb21lZGlvX0FzaXN0ZW5jaWFzIiwiS0RSIiksMikgJT4lIA0KICBmb3JtYXRTdHlsZSgNCiAgICAnS0RSJywNCiAgICBiYWNrZ3JvdW5kID0gc3R5bGVDb2xvckJhcihGZXJQZXJNYXBhRmluYWwkS0RSLCBncmlzMiksDQogICAgYmFja2dyb3VuZFNpemUgPSAnMTAwJSA5MCUnLA0KICAgIGJhY2tncm91bmRSZXBlYXQgPSAnbm8tcmVwZWF0JywgDQogICAgYmFja2dyb3VuZFBvc2l0aW9uID0gJ2NlbnRlcicNCiAgKQ0KDQoNCg0KDQpgYGANCg0KDQpFdm9sdXRpdm9zIGdlbmVyYWxlcw0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KDQpUYWJsYUcgPC0gQmFzZSAlPiUNCiAgI2ZpbHRlcihFcXVpcG8gPT0gInBpZWxkZXBvciIpICU+JQ0KICBmaWx0ZXIoSnVnYWRvciA9PSAiRmVyY2hhIikgJT4lDQogIHNlbGVjdChGZWNoYSxLLEQsQSxLRFIpICU+JQ0KICBncm91cF9ieShGZWNoYSkgJT4lDQogIHN1bW1hcmlzZShLaWxscyA9IHJvdW5kKG1lYW4oSyksMiksDQogICAgICAgICAgICBEZWF0aHMgPSByb3VuZChtZWFuKEQpLDIpLA0KICAgICAgICAgICAgS0RScCA9IHJvdW5kKG1lYW4oS0RSKSwyKSkgJT4lDQogIG11dGF0ZShLaWxsc0FjdW0gPSByb3VuZChjdW1tZWFuKEtpbGxzKSwyKSwNCiAgICAgICAgIERlYXRoc0FjdW0gPSByb3VuZChjdW1tZWFuKERlYXRocyksMiksDQogICAgICAgICBLRFJBY3VtID0gcm91bmQoY3VtbWVhbihLRFJwKSwyKSkNCg0KI0dyw6FmaWNvIDENCg0KcDMgPC0gcGxvdF9seShUYWJsYUcseCA9IH5GZWNoYSklPiUNCiAgYWRkX3RyYWNlKHkgPSB+S2lsbHMsbW9kZSA9ICJsaW5lcyttYXJrZXJzIiwgbmFtZSA9ICJraWxscyIsIGxpbmUgPSBsaXN0KGNvbG9yID0gIiMyNzI2NDMiKSxtYXJrZXIgPSBsaXN0KGNvbG9yID0gIiMyNzI2NDMiKSkgJT4lDQogIGFkZF90cmFjZSh5ID0gfktpbGxzQWN1bSxtb2RlID0gImxpbmVzK21hcmtlcnMiLCBuYW1lID0gImtpbGxzQWN1bSIsIGxpbmUgPSBsaXN0KGNvbG9yID0gIiMyYzY5OGQiKSxtYXJrZXIgPSBsaXN0KGNvbG9yID0gIiMyYzY5OGQiKSkNCg0KDQojR3LDoWZpY28gMg0KDQpwNCA8LSBwbG90X2x5KFRhYmxhRyx4ID0gfkZlY2hhKSU+JQ0KICBhZGRfdHJhY2UoeSA9IH5EZWF0aHMsbW9kZSA9ICJsaW5lcyttYXJrZXJzIiwgbmFtZSA9ICJEZWF0aHMiLCBsaW5lID0gbGlzdChjb2xvciA9ICIjZjU1OTUxIiksbWFya2VyID0gbGlzdChjb2xvciA9ICIjZjU1OTUxIikpICU+JQ0KICBhZGRfdHJhY2UoeSA9IH5EZWF0aHNBY3VtLG1vZGUgPSAibGluZXMrbWFya2VycyIsIG5hbWUgPSAiRGVhdGhzQWN1bSIsIGxpbmUgPSBsaXN0KGNvbG9yID0gIiM4MDBlMGQiKSxtYXJrZXIgPSBsaXN0KGNvbG9yID0gIiM4MDBlMGQiKSkNCg0KI0dyw6FmaWNvIDMNCg0KcDUgPC0gcGxvdF9seShUYWJsYUcseCA9IH5GZWNoYSklPiUNCiAgYWRkX3RyYWNlKHkgPSB+S0RScCxtb2RlID0gImxpbmVzK21hcmtlcnMiLCBuYW1lID0gIktEUiIsIGxpbmUgPSBsaXN0KGNvbG9yID0gIiM5NWFkYmUiKSxtYXJrZXIgPSBsaXN0KGNvbG9yID0gIiM5NWFkYmUiKSkgJT4lDQogIGFkZF90cmFjZSh5ID0gfktEUkFjdW0sbW9kZSA9ICJsaW5lcyttYXJrZXJzIiwgbmFtZSA9ICJLRFJBY3VtIiwgbGluZSA9IGxpc3QoY29sb3IgPSAiIzU3NGY3ZCIpLG1hcmtlciA9IGxpc3QoY29sb3IgPSAiIzU3NGY3ZCIpKQ0KDQoNCg0KDQpmaWcgPC0gc3VicGxvdChwMyxwNCxwNSxucm93cyA9IDMsIHNoYXJlWCA9IFRSVUUsIG1hcmdpbiA9IDAuMDUpICU+JQ0KICBsYXlvdXQoYW5ub3RhdGlvbnMgPSBsaXN0KA0KICAgIGxpc3QoeCA9IDAuNSAsIHkgPSAxLjA1ICx0ZXh0ID0gIktpbGxzIiwgc2hvd2Fycm93ID0gRix4cmVmPSdwYXBlcicsIHlyZWY9J3BhcGVyJyksDQogICAgbGlzdCh4ID0gMC41ICwgeSA9IDAuNyx0ZXh0ID0gIkRlYXRocyIsc2hvd2Fycm93ID0gRix4cmVmPSdwYXBlcicsIHlyZWY9J3BhcGVyJyksDQogICAgbGlzdCh4ID0gMC41ICwgeSA9IDAuMyAsIHkgPSAyNSx0ZXh0ID0gIktEUiIsc2hvd2Fycm93ID0gRix4cmVmPSdwYXBlcicsIHlyZWY9J3BhcGVyJykNCiAgKSkNCg0KZmlnDQoNCg0KDQoNCmBgYA0KDQpSZW5kaW1pZW50byBzZWfDum4gbWFwYQ0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KVGFibGFfMmYgPC0gQmFzZUZlciAlPiUgDQogIHNlbGVjdChFc2NlbmFyaW8sUmVzdWx0YWRvKSAlPiUNCiAgZmlsdGVyKCFpcy5uYShFc2NlbmFyaW8pKSAlPiUNCiAgZ3JvdXBfYnkoRXNjZW5hcmlvLFJlc3VsdGFkbykgJT4lIA0KICBzdW1tYXJpc2UoVG90YWwgPSBuKCkpICU+JSANCiAgbXV0YXRlKFBvcmNlbnRhamUgPSByb3VuZChUb3RhbC9zdW0oVG90YWwpKjEwMCwyKSkgJT4lIA0KICBtdXRhdGUoRXRpcXVldGEgPSBwYXN0ZTAoVG90YWwsICIgKCAlICIsIFBvcmNlbnRhamUsICIpIikpIA0KDQoNClRhYmxhYXV4IDwtIFRhYmxhXzJmICU+JSANCiAgc2VsZWN0KEVzY2VuYXJpbykgJT4lIA0KICBmaWx0ZXIoIWR1cGxpY2F0ZWQoRXNjZW5hcmlvKSkNCg0KZmlsYXMgPC0gbnJvdyhUYWJsYWF1eCkNCg0KZ2dwbG90KFRhYmxhXzJmLCBhZXMoeCA9ICIiICwgeSA9IFRvdGFsLCBmaWxsID0gUmVzdWx0YWRvICkpKw0KICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5Iiwgd2lkdGggPSAzKSsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IEV0aXF1ZXRhKSwgcG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IDAuNSksIHNpemUgPTMuNSwgY29sb3IgPSBibGFuY28pKw0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKG5lZ3JvLCBncmlzMixncmlzMSkpKw0KICAgIGxhYnModGl0bGUgPSBwYXN0ZTAoIkRhdG9zIFZhbG9yYW50IFBEIEZlTmVMZVBlICIsZmVjaGFpbmksICIgLSAiLCBmZWNoYWZpbiksDQogICAgICAgc3VidGl0bGUgPSAiUmVzdW1lbiBSZXN1bHRhZG8gc2Vnw7puIG1hcGEiLA0KICAgICAgIGNhcHRpb24gPSAiRnVlbnRlOiBFbGFib3JhY2nDs24gcHJvcGlhIiwNCiAgICAgICB4ID0gIiIsDQogICAgICAgeSA9ICIiKSsNCiAgdGhlbWVfbWluaW1hbCgpKw0KICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41LCB2anVzdCA9IDAuNSksDQogICAgICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoIGhqdXN0ID0gMC41LCB2anVzdCA9IDAuNSksDQogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iLA0KICAgICAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCkpKw0KICBndWlkZXMoZmlsbCA9IGd1aWRlX2xlZ2VuZChyZXZlcnNlID0gVFJVRSkpKw0KICBjb29yZF9mbGlwKCkrDQogIGZhY2V0X3dyYXAofkVzY2VuYXJpbywgbnJvdyA9IGZpbGFzKQ0KYGBgDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQoNCg0KcGYxIDwtIGdncGxvdChCYXNlRmVyLCBhZXMoeCA9IEZlY2hhLCB5ID0gSywgY29sb3IgPSBQZXJzb25hamUsIHRleHQgPSBwYXN0ZTAoIlJlc3VsdGFkbzogIixSZXN1bHRhZG8sIlxuTWFwYTogIixFc2NlbmFyaW8sIlxuS0RSIDogIixLRFIpICkpKw0KICAgICAgICAgICAgICAgICAgICBnZW9tX3BvaW50KCkrDQogIGxhYnModGl0bGUgPSBwYXN0ZTAoIkRhdG9zIFZhbG9yYW50IEtpbGxzIFBEIEZlTmVMZVBlICIsZmVjaGFpbmksICIgLSAiLCBmZWNoYWZpbiksDQogICAgICAgc3VidGl0bGUgPSAiRHVyYWNpw7NuIGRlIHBhcnRpZGFzIHNlZ8O6biByZXN1bHRhZG8iLA0KICAgICAgIGNhcHRpb24gPSAiRnVlbnRlOiBFbGFib3JhY2nDs24gcHJvcGlhIiwNCiAgICAgICB4ID0gIiIsDQogICAgICAgeSA9ICJLaWxscyIpKw0KICB0aGVtZV9taW5pbWFsKCkrDQogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoIGhqdXN0ID0gMC41ICwgdmp1c3QgPSAwLjUpLA0KICAgICAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KCBoanVzdCA9IDAuNSAsIHZqdXN0ID0gMC41KSkNCg0KZmlnNCA8LSBnZ3Bsb3RseShwZjEpDQoNCmZpZzQNCiAgICAgICAgICAgICAgICAgIA0KDQoNCg0KYGBgDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQoNCiNHUkFGSUNPIENPTiBTRUxFQ1RPUiAtLS0tLS0tLS0tLS0tLS0tLS0tIFJFVklTQVIhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhDQojIGZpZyA8LSBwbG90X2x5KGRhdGEgPSBCYXNlRmVyLCBjb2xvciA9IH5QZXJzb25hamUpICU+JQ0KIyAgIGFkZF90cmFjZSh4PX5GZWNoYSwgeT1+SywNCiMgICAgICAgICAgICAgdHJhbnNmb3JtcyA9IGxpc3QoDQojICAgICAgICAgICAgICAgbGlzdCgNCiMgICAgICAgICAgICAgICAgIHR5cGUgPSAiZmlsdGVyIiwNCiMgICAgICAgICAgICAgICAgIHRhcmdldCA9IH5Fc2NlbmFyaW8sDQojICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSAnPScsDQojICAgICAgICAgICAgICAgICB2YWx1ZSA9IHVuaXF1ZShCYXNlRmVyJEVzY2VuYXJpbylbMV0NCiMgICAgICAgICAgICAgICApDQojICAgICAgICAgICAgICkNCiMgICApICU+JQ0KIyAgIGxheW91dCgNCiMgICAgIHVwZGF0ZW1lbnVzID0gbGlzdCgNCiMgICAgICAgbGlzdCgNCiMgICAgICAgICB0eXBlID0gJ2Ryb3Bkb3duJywNCiMgICAgICAgICBhY3RpdmUgPSAwLA0KIyAgICAgICAgIGJ1dHRvbnMgPSBhcHBseShhcy5kYXRhLmZyYW1lKHVuaXF1ZShCYXNlRmVyJEVzY2VuYXJpbykpLCAxLCANCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbih4KSBsaXN0KG1ldGhvZCA9ICdyZXN0eWxlJyxhcmdzID0gbGlzdCgndHJhbnNmb3Jtc1swXS52YWx1ZScseCksbGFiZWwgPSB4DQojICAgICAgICAgKQ0KIyAgICAgICApDQojICAgICApDQojICAgKSkNCiMgZmlnDQoNCg0KDQoNCmBgYA0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KDQoNCnBmIDwtIGdncGxvdChCYXNlRmVyLCBhZXMoeCA9IEZlY2hhLCB5ID0gSywgY29sb3IgPSBQZXJzb25hamUpKSsNCiAgICAgICAgICAgICAgICAgICAgZ2VvbV9wb2ludCgpKw0KICBsYWJzKHRpdGxlID0gcGFzdGUwKCJLaWxscyBQRCBGZU5lTGVQZSBzZWfDum4gbWFwYSAiLGZlY2hhaW5pLCAiIC0gIiwgZmVjaGFmaW4pLA0KICAgICAgIHN1YnRpdGxlID0gIkR1cmFjacOzbiBkZSBwYXJ0aWRhcyBzZWfDum4gcmVzdWx0YWRvIiwNCiAgICAgICBjYXB0aW9uID0gIkZ1ZW50ZTogRWxhYm9yYWNpw7NuIHByb3BpYSIsDQogICAgICAgeCA9ICIiLA0KICAgICAgIHkgPSAiS2lsbHMiKSsNCiAgdGhlbWVfbWluaW1hbCgpKw0KICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KCBoanVzdCA9IDAuNSAsIHZqdXN0ID0gMC41KSwNCiAgICAgICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dCggaGp1c3QgPSAwLjUgLCB2anVzdCA9IDAuNSkpKw0KICBmYWNldF93cmFwKH5Fc2NlbmFyaW8sIG5jb2wgPSAyKQ0KDQpmaWczIDwtIGdncGxvdGx5KHBmKQ0KDQpmaWczDQogICAgICAgICAgICAgICAgICANCg0KDQoNCmBgYA0KDQpHcsOhZmljbyBQb2xhcg0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KDQpsaXN0YWZlciA8LSBjKG1lYW4oQmFzZUZlciRLKSxtZWFuKEJhc2VGZXIkRCksbWVhbihCYXNlRmVyJEEpLG1lYW4oQmFzZUZlciRLRFIpKQ0KDQpmaWc1IDwtIHBsb3RfbHkoDQogIHR5cGUgPSAic2NhdHRlcnBvbGFyIiwNCiAgciA9IGxpc3RhZmVyLA0KICB0aGV0YSA9IGMoIktpbGxzIiwiTXVlcnRlcyIsIkFzaXN0ZW5jaWEiLCJLRFIiKSwNCiAgZmlsbCA9ICJ0b3NlbGYiDQopDQpmaWc1IDwtIGZpZzUgJT4lDQogIGxheW91dCgNCiAgICBwb2xhciA9IGxpc3QoDQogICAgICByYWRpYWxheGlzID0gbGlzdCgNCiAgICAgICAgdmlzaWJsZSA9IFQsDQogICAgICAgIHJhbmdlID0gYygwLDMwKQ0KICAgICAgKQ0KICAgICksDQogICAgc2hvd2xlZ2VuZCA9IEYNCiAgKQ0KDQoNCmZpZzUNCmBgYA0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KDQpUYWJsYV80IDwtIEJhc2VGZXIgJT4lDQogIGZpbHRlcihFcXVpcG8gPT0gInBpZWxkZXBvciIpICU+JSANCiAgc2VsZWN0KEZlY2hhLEVzY2VuYXJpbyxLRFIpICU+JQ0KICBncm91cF9ieShGZWNoYSxFc2NlbmFyaW8pICU+JSANCiAgc3VtbWFyaXNlKEtEUiA9IG1lYW4oS0RSKSkNCg0KDQpmaWcxIDwtIGdncGxvdChUYWJsYV80LCBhZXMoeCA9IEZlY2hhLCB5ID0gS0RSKSkrICNzZWxlY2Npb25hbW9zIHZhcmlhYmxlcyBhIGdyYWZpY2FyIHkgYSBjb2xvcmVhcg0KICBnZW9tX2xpbmUoKSsgDQogIGdlb21fcG9pbnQoKSsNCiAgIyBnZW9tX3Ntb290aChtZXRob2QgPSAnbG9lc3MnLA0KICAjICAgICAgICAgICAgIGZvcm11bGEgPSAneSB+IHgnKSsNCiAgbGFicyh0aXRsZSA9cGFzdGUwKCJLRFIgU2Vnw7puIGZlY2hhIFBEICIsZmVjaGFpbmksICIgLSAiLCBmZWNoYWZpbiksDQogICAgICAgc3VidGl0bGUgPSAiS0RSIFByb21lZGlvIHNlZ8O6biBmZWNoYSIsDQogICAgICAgY2FwdGlvbiA9ICJGdWVudGU6IEVsYWJvcmFjacOzbiBwcm9waWEiLA0KICAgICAgIHggPSAiRmVjaGEiLA0KICAgICAgIHkgPSAiS0RSIikrDQogICNzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiIzFhYzBjNiIsICIjZTc0NjQ1IiwiI2ZhY2Q2MCIpKSsgI2NvbG9yZWFtb3MgbGFzIGxpbmVhcw0KICB0aGVtZV9taW5pbWFsKCkrDQogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoIGhqdXN0ID0gMC41ICwgdmp1c3QgPSAwLjUpLCANCiAgICAgICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dCggaGp1c3QgPSAwLjUgLCB2anVzdCA9IDAuNSkpKw0KICBmYWNldF93cmFwKH5Fc2NlbmFyaW8pDQoNCmZpZzEgPC0gZ2dwbG90bHkoZmlnMSkNCiANCmZpZzENCg0KYGBgDQoNCiMjIyBDaGljaG84NzQNCg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCg0KQmFzZUZlciA8LSBCYXNlICU+JSANCiAgZmlsdGVyKEp1Z2Fkb3IgPT0gImNoaWNobyIpDQoNCkNoaVBhcnRpZGFzIDwtIG5yb3coQmFzZUZlcikNCg0KcG9yY2hpIDwtIHBhc3RlMChyb3VuZChDaGlQYXJ0aWRhcy9jYW50cGFydGlkYXMqMTAwLDIpLCIgJSIpDQoNCkZlclBlcnNvbmFqZXMgPC0gIEJhc2VGZXIgJT4lDQogIHNlbGVjdChQZXJzb25hamUsSyxELEEsS0RSKSAlPiUNCiAgZ3JvdXBfYnkoUGVyc29uYWplKSAlPiUgDQogIHN1bW1hcmlzZShhY3Jvc3MoZXZlcnl0aGluZygpLCBsaXN0KG1lYW4pKSkNCg0KRmVyR3JhbCA8LSBCYXNlRmVyICU+JQ0KICBzZWxlY3QoSyxELEEsS0RSKSAlPiUNCiAgc3VtbWFyaXNlKGFjcm9zcyhldmVyeXRoaW5nKCksIGxpc3QobWVhbikpKQ0KDQpGZXJQZXJzb25hamVzMiA8LSBCYXNlRmVyICU+JQ0KICBzZWxlY3QoUGVyc29uYWplLEssRCxBLEtEUikgJT4lDQogIGdyb3VwX2J5KFBlcnNvbmFqZSkgJT4lDQogIHN1bW1hcmlzZShUb3RhbCA9IG4oKSkgJT4lIA0KICBtdXRhdGUoUG9yY2VudGFqZSA9IHJvdW5kKFRvdGFsL3N1bShUb3RhbCkqMTAwLDIpKSAlPiUgDQogIG11dGF0ZShFdGlxdWV0YSA9IHBhc3RlMChUb3RhbCwgIiAoICUgIiwgUG9yY2VudGFqZSwgIikiKSkNCg0KDQpGZXJQZXJzb25hamVzRmluYWwgPC0gbGVmdF9qb2luKEZlclBlcnNvbmFqZXMsRmVyUGVyc29uYWplczIpICU+JSANCiAgc2VsZWN0KFBlcnNvbmFqZSxFdGlxdWV0YSxLXzEsRF8xLEFfMSxLRFJfMSkgJT4lIA0KICByZW5hbWUoVG90YWwgPSBFdGlxdWV0YSwNCiAgICAgICAgIFByb21lZGlvX0tpbGxzID0gS18xLA0KICAgICAgICAgUHJvbWVkaW9fTXVlcnRlcyA9IERfMSwNCiAgICAgICAgIFByb21lZGlvX0FzaXN0ZW5jaWFzID1BXzEsDQogICAgICAgICBLRFIgPSBLRFJfMSkgJT4lIA0KICBhcnJhbmdlKGRlc2MoS0RSKSkNCg0KDQojI1RhYmxhIHBlcnNvbmFqZSBlc2NlbmFyaW8NCg0KDQojI1RhYmxhIHBlcnNvbmFqZSBlc2NlbmFyaW8NCg0KDQpGZXJQZXJNYXBhIDwtICBCYXNlRmVyICU+JQ0KICBzZWxlY3QoRXNjZW5hcmlvLFJlc3VsdGFkbyxQZXJzb25hamUsSyxELEEsS0RSKSAlPiUNCiAgZ3JvdXBfYnkoRXNjZW5hcmlvLFJlc3VsdGFkbyxQZXJzb25hamUpICU+JSANCiAgc3VtbWFyaXNlKGFjcm9zcyhldmVyeXRoaW5nKCksIGxpc3QobWVhbikpKQ0KDQpGZXJQZXJNYXBhMiA8LSBCYXNlRmVyICU+JQ0KICBzZWxlY3QoRXNjZW5hcmlvLFJlc3VsdGFkbyxQZXJzb25hamUsSyxELEEsS0RSKSAlPiUNCiAgZ3JvdXBfYnkoRXNjZW5hcmlvLFJlc3VsdGFkbyxQZXJzb25hamUpICU+JQ0KICBzdW1tYXJpc2UoVG90YWwgPSBuKCkpICU+JSANCiAgbXV0YXRlKFBvcmNlbnRhamUgPSByb3VuZChUb3RhbC9zdW0oVG90YWwpKjEwMCwyKSkgJT4lIA0KICBtdXRhdGUoRXRpcXVldGEgPSBwYXN0ZTAoVG90YWwsICIgKCAlICIsIFBvcmNlbnRhamUsICIpIikpDQoNCg0KRmVyUGVyTWFwYUZpbmFsIDwtIGxlZnRfam9pbihGZXJQZXJNYXBhLEZlclBlck1hcGEyKSAlPiUgDQogIHNlbGVjdChSZXN1bHRhZG8sUGVyc29uYWplLEV0aXF1ZXRhLEtfMSxEXzEsQV8xLEtEUl8xKSAlPiUgDQogIHJlbmFtZShUb3RhbCA9IEV0aXF1ZXRhLA0KICAgICAgICAgUHJvbWVkaW9fS2lsbHMgPSBLXzEsDQogICAgICAgICBQcm9tZWRpb19NdWVydGVzID0gRF8xLA0KICAgICAgICAgUHJvbWVkaW9fQXNpc3RlbmNpYXMgPUFfMSwNCiAgICAgICAgIEtEUiA9IEtEUl8xKSAlPiUgDQogIGFycmFuZ2UoKEVzY2VuYXJpbykpDQoNCg0KDQoNCmBgYA0KDQpFbCBqdWdhZG9yIFBEIENoaWNobzg3NCBqdWfDsyB1biB0b3RhbCBkZSBgciBDaGlQYXJ0aWRhc2AgcGFydGlkYXMgcXVlIHJlcHJlc2VudGFuIGByIHBvcmNoaWAgc29icmUgZWwgdG90YWwgZGUgcGFydGlkYXMuIEEgY29udGludWFjacOzbiBzZSBtdWVzdHJhbiBzdXMgY2lmcmFzIGdlbmVyYWxlcyB5IGxhcyBjaWZyYXMgZGUgbG9zIHBlcnNvbmFqZXMgcXVlIGVsaWdpw7MNCg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCiNIQUNFUiBUQUJMQSBDT04gS0FCTEUNCg0Ka2FibGUoRmVyR3JhbCxhbGlnbiA9ICJsIixkaWdpdHMgPSAzLGNvbC5uYW1lcyA9IGMoIlByb21lZGlvIEtpbGxzIiwiUHJvbWVkaW8gTXVlcnRlcyIsIlByb21lZGlvIEFzaXN0ZW5jaWFzIiwiS0RSIikpJT4lDQogICAgICAgIGNvbHVtbl9zcGVjKDEsIGJvbGQgPSBUUlVFLCBjb2xvciA9IG5lZ3JvKSAlPiUNCiAgcm93X3NwZWMoMCxiYWNrZ3JvdW5kID0gbmVncm8sIGNvbG9yID0gIndoaXRlIikgJT4lDQogICAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIiA9IDEsDQogICAgICAgICAgICAgICAgICAgICAiQ2lmcmFzIj0gMiwNCiAgICAgICAgICAgICAgICAgICAgICIgIiA9MSkpICU+JQ0KICBrYWJsZV9taW5pbWFsKCkNCmBgYA0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KI0hBQ0VSIFRBQkxBIENPTiBLQUJMRQ0KDQprYWJsZShGZXJQZXJzb25hamVzRmluYWwsYWxpZ24gPSAibCIsZGlnaXRzID0gMyxjb2wubmFtZXMgPSBjKCJQZXJzb25hamUiLCJUb3RhbCIsIlByb21lZGlvIEtpbGxzIiwiUHJvbWVkaW8gTXVlcnRlcyIsIlByb21lZGlvIEFzaXN0ZW5jaWFzIiwiS0RSIikpJT4lIA0KICAgICAgICBjb2x1bW5fc3BlYygxLCBib2xkID0gVFJVRSwgY29sb3IgPSBuZWdybykgJT4lDQogIHJvd19zcGVjKDAsYmFja2dyb3VuZCA9IG5lZ3JvLCBjb2xvciA9ICJ3aGl0ZSIpICU+JSANCiAgICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiID0gMSwNCiAgICAgICAgICAgICAgICAgICAgICJQZXJzb25hamVzIj0gNCwNCiAgICAgICAgICAgICAgICAgICAgICIgIiA9MSkpICU+JSANCiAga2FibGVfbWluaW1hbCgpDQpgYGANCg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCiNIQUNFUiBUQUJMQSBDT04gS0FCTEUNCg0KIyBrYWJsZShGZXJQZXJNYXBhRmluYWwsYWxpZ24gPSAibCIsZGlnaXRzID0gMyxjb2wubmFtZXMgPSBjKCJNYXBhIiwiUGVyc29uYWplIiwiVG90YWwiLCJQcm9tZWRpbyBLaWxscyIsIlByb21lZGlvIE11ZXJ0ZXMiLCJQcm9tZWRpbyBBc2lzdGVuY2lhcyIsIktEUiIpKSU+JSANCiMgICAgICAgICBjb2x1bW5fc3BlYygxLCBib2xkID0gVFJVRSwgY29sb3IgPSBuZWdybykgJT4lDQojICAgcm93X3NwZWMoMCxiYWNrZ3JvdW5kID0gbmVncm8sIGNvbG9yID0gIndoaXRlIikgJT4lIA0KIyAgICAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIiA9IDEsDQojICAgICAgICAgICAgICAgICAgICAgICJSZW5kaW1pZW50byBzZWfDum4gbWFwYSI9IDUsDQojICAgICAgICAgICAgICAgICAgICAgICIgIiA9MSkpICU+JSANCiMgICBrYWJsZV9wYXBlcigiaG92ZXIiLGh0bWxfZm9udCA9ICJDYWxpYnJpIikNCmBgYA0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KI0hBQ0VSIFRBQkxBIENPTiBLQUJMRQ0KDQpkYXRhdGFibGUoRmVyUGVyTWFwYUZpbmFsLGZpbHRlciA9ICd0b3AnLA0KICAgICAgICAgIG9wdGlvbnMgPSBsaXN0KA0KICBzZWFyY2hpbmcgPSBUUlVFLA0KICBwYWdlTGVuZ3RoID0gMTUsDQogIGluaXRDb21wbGV0ZSA9IEpTKA0KICAgICJmdW5jdGlvbihzZXR0aW5ncywganNvbikgeyIsDQogICAgIiQoJ2JvZHknKS5jc3Moeydmb250LWZhbWlseSc6ICdDYWxpYnJpJ30pOyIsDQogICAgIn0iDQopKSkgJT4lIA0KICBmb3JtYXRSb3VuZChjKCJQcm9tZWRpb19LaWxscyIsIlByb21lZGlvX011ZXJ0ZXMiLCJQcm9tZWRpb19Bc2lzdGVuY2lhcyIsIktEUiIpLDIpDQoNCg0KDQoNCmBgYA0KDQoNCkV2b2x1dGl2b3MgZ2VuZXJhbGVzDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQoNClRhYmxhRyA8LSBCYXNlICU+JQ0KICBmaWx0ZXIoRXF1aXBvID09ICJwaWVsZGVwb3IiKSAlPiUNCiAgZmlsdGVyKEp1Z2Fkb3IgPT0gImNoaWNobyIpICU+JQ0KICBzZWxlY3QoRmVjaGEsSyxELEEsS0RSKSAlPiUNCiAgZ3JvdXBfYnkoRmVjaGEpICU+JQ0KICBzdW1tYXJpc2UoS2lsbHMgPSByb3VuZChtZWFuKEspLDIpLA0KICAgICAgICAgICAgRGVhdGhzID0gcm91bmQobWVhbihEKSwyKSwNCiAgICAgICAgICAgIEtEUnAgPSByb3VuZChtZWFuKEtEUiksMikpICU+JQ0KICBtdXRhdGUoS2lsbHNBY3VtID0gcm91bmQoY3VtbWVhbihLaWxscyksMiksDQogICAgICAgICBEZWF0aHNBY3VtID0gcm91bmQoY3VtbWVhbihEZWF0aHMpLDIpLA0KICAgICAgICAgS0RSQWN1bSA9IHJvdW5kKGN1bW1lYW4oS0RScCksMikpDQoNCiNHcsOhZmljbyAxDQoNCnAzIDwtIHBsb3RfbHkoVGFibGFHLHggPSB+RmVjaGEpJT4lDQogIGFkZF90cmFjZSh5ID0gfktpbGxzLG1vZGUgPSAibGluZXMrbWFya2VycyIsIG5hbWUgPSAia2lsbHMiLCBsaW5lID0gbGlzdChjb2xvciA9ICIjMjcyNjQzIiksbWFya2VyID0gbGlzdChjb2xvciA9ICIjMjcyNjQzIikpICU+JQ0KICBhZGRfdHJhY2UoeSA9IH5LaWxsc0FjdW0sbW9kZSA9ICJsaW5lcyttYXJrZXJzIiwgbmFtZSA9ICJraWxsc0FjdW0iLCBsaW5lID0gbGlzdChjb2xvciA9ICIjMmM2OThkIiksbWFya2VyID0gbGlzdChjb2xvciA9ICIjMmM2OThkIikpDQoNCg0KI0dyw6FmaWNvIDINCg0KcDQgPC0gcGxvdF9seShUYWJsYUcseCA9IH5GZWNoYSklPiUNCiAgYWRkX3RyYWNlKHkgPSB+RGVhdGhzLG1vZGUgPSAibGluZXMrbWFya2VycyIsIG5hbWUgPSAiRGVhdGhzIiwgbGluZSA9IGxpc3QoY29sb3IgPSAiI2Y1NTk1MSIpLG1hcmtlciA9IGxpc3QoY29sb3IgPSAiI2Y1NTk1MSIpKSAlPiUNCiAgYWRkX3RyYWNlKHkgPSB+RGVhdGhzQWN1bSxtb2RlID0gImxpbmVzK21hcmtlcnMiLCBuYW1lID0gIkRlYXRoc0FjdW0iLCBsaW5lID0gbGlzdChjb2xvciA9ICIjODAwZTBkIiksbWFya2VyID0gbGlzdChjb2xvciA9ICIjODAwZTBkIikpDQoNCiNHcsOhZmljbyAzDQoNCnA1IDwtIHBsb3RfbHkoVGFibGFHLHggPSB+RmVjaGEpJT4lDQogIGFkZF90cmFjZSh5ID0gfktEUnAsbW9kZSA9ICJsaW5lcyttYXJrZXJzIiwgbmFtZSA9ICJLRFIiLCBsaW5lID0gbGlzdChjb2xvciA9ICIjOTVhZGJlIiksbWFya2VyID0gbGlzdChjb2xvciA9ICIjOTVhZGJlIikpICU+JQ0KICBhZGRfdHJhY2UoeSA9IH5LRFJBY3VtLG1vZGUgPSAibGluZXMrbWFya2VycyIsIG5hbWUgPSAiS0RSQWN1bSIsIGxpbmUgPSBsaXN0KGNvbG9yID0gIiM1NzRmN2QiKSxtYXJrZXIgPSBsaXN0KGNvbG9yID0gIiM1NzRmN2QiKSkNCg0KDQoNCg0KZmlnIDwtIHN1YnBsb3QocDMscDQscDUsbnJvd3MgPSAzLCBzaGFyZVggPSBUUlVFLCBtYXJnaW4gPSAwLjA1KSAlPiUNCiAgbGF5b3V0KGFubm90YXRpb25zID0gbGlzdCgNCiAgICBsaXN0KHggPSAwLjUgLCB5ID0gMS4wNSAsdGV4dCA9ICJLaWxscyIsIHNob3dhcnJvdyA9IEYseHJlZj0ncGFwZXInLCB5cmVmPSdwYXBlcicpLA0KICAgIGxpc3QoeCA9IDAuNSAsIHkgPSAwLjcsdGV4dCA9ICJEZWF0aHMiLHNob3dhcnJvdyA9IEYseHJlZj0ncGFwZXInLCB5cmVmPSdwYXBlcicpLA0KICAgIGxpc3QoeCA9IDAuNSAsIHkgPSAwLjMgLCB5ID0gMjUsdGV4dCA9ICJLRFIiLHNob3dhcnJvdyA9IEYseHJlZj0ncGFwZXInLCB5cmVmPSdwYXBlcicpDQogICkpDQoNCmZpZw0KDQoNCg0KDQpgYGANCg0KDQpSZW5kaW1pZW50byBzZWfDum4gbWFwYQ0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KVGFibGFfMmYgPC0gQmFzZUZlciAlPiUgDQogIHNlbGVjdChFc2NlbmFyaW8sUmVzdWx0YWRvKSAlPiUNCiAgZmlsdGVyKCFpcy5uYShFc2NlbmFyaW8pKSAlPiUNCiAgZ3JvdXBfYnkoRXNjZW5hcmlvLFJlc3VsdGFkbykgJT4lIA0KICBzdW1tYXJpc2UoVG90YWwgPSBuKCkpICU+JSANCiAgbXV0YXRlKFBvcmNlbnRhamUgPSByb3VuZChUb3RhbC9zdW0oVG90YWwpKjEwMCwyKSkgJT4lIA0KICBtdXRhdGUoRXRpcXVldGEgPSBwYXN0ZTAoVG90YWwsICIgKCAlICIsIFBvcmNlbnRhamUsICIpIikpIA0KDQoNClRhYmxhYXV4IDwtIFRhYmxhXzJmICU+JSANCiAgc2VsZWN0KEVzY2VuYXJpbykgJT4lIA0KICBmaWx0ZXIoIWR1cGxpY2F0ZWQoRXNjZW5hcmlvKSkNCg0KZmlsYXMgPC0gbnJvdyhUYWJsYWF1eCkNCg0KZ2dwbG90KFRhYmxhXzJmLCBhZXMoeCA9ICIiICwgeSA9IFRvdGFsLCBmaWxsID0gUmVzdWx0YWRvICkpKw0KICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5Iiwgd2lkdGggPSAzKSsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IEV0aXF1ZXRhKSwgcG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IDAuNSksIHNpemUgPTMuNSxjb2xvciA9ICBibGFuY28pKw0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKG5lZ3JvLCBncmlzMixncmlzMSkpKw0KICAgIGxhYnModGl0bGUgPSBwYXN0ZTAoIkRhdG9zIFZhbG9yYW50IFBEIENoaWNobzg3NCIsZmVjaGFpbmksICIgLSAiLCBmZWNoYWZpbiksDQogICAgICAgc3VidGl0bGUgPSAiUmVzdW1lbiBSZXN1bHRhZG8gc2Vnw7puIG1hcGEiLA0KICAgICAgIGNhcHRpb24gPSAiRnVlbnRlOiBFbGFib3JhY2nDs24gcHJvcGlhIiwNCiAgICAgICB4ID0gIiIsDQogICAgICAgeSA9ICIiKSsNCiAgdGhlbWVfbWluaW1hbCgpKw0KICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41LCB2anVzdCA9IDAuNSksDQogICAgICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoIGhqdXN0ID0gMC41LCB2anVzdCA9IDAuNSksDQogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iLA0KICAgICAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCkpKw0KICBndWlkZXMoZmlsbCA9IGd1aWRlX2xlZ2VuZChyZXZlcnNlID0gVFJVRSkpKw0KICBjb29yZF9mbGlwKCkrDQogIGZhY2V0X3dyYXAofkVzY2VuYXJpbywgbnJvdyA9IGZpbGFzKQ0KYGBgDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQoNCg0KcGYxIDwtIGdncGxvdChCYXNlRmVyLCBhZXMoeCA9IEZlY2hhLCB5ID0gSywgY29sb3IgPSBQZXJzb25hamUsdGV4dCA9IHBhc3RlMCgiUmVzdWx0YWRvOiAiLFJlc3VsdGFkbywiXG5NYXBhOiAiLEVzY2VuYXJpbywiXG5LRFIgOiAiLEtEUikpKSsNCiAgICAgICAgICAgICAgICAgICAgZ2VvbV9wb2ludCgpKw0KICBsYWJzKHRpdGxlID0gcGFzdGUwKCJEYXRvcyBWYWxvcmFudCBLaWxscyBQRCBDaGljaG84NzQgIixmZWNoYWluaSwgIiAtICIsIGZlY2hhZmluKSwNCiAgICAgICBzdWJ0aXRsZSA9ICJEdXJhY2nDs24gZGUgcGFydGlkYXMgc2Vnw7puIHJlc3VsdGFkbyIsDQogICAgICAgY2FwdGlvbiA9ICJGdWVudGU6IEVsYWJvcmFjacOzbiBwcm9waWEiLA0KICAgICAgIHggPSAiIiwNCiAgICAgICB5ID0gIktpbGxzIikrDQogIHRoZW1lX21pbmltYWwoKSsNCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dCggaGp1c3QgPSAwLjUgLCB2anVzdCA9IDAuNSksDQogICAgICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoIGhqdXN0ID0gMC41ICwgdmp1c3QgPSAwLjUpKQ0KDQpmaWc0IDwtIGdncGxvdGx5KHBmMSkNCg0KZmlnNA0KICAgICAgICAgICAgICAgICAgDQoNCg0KDQpgYGANCg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCg0KDQpwZiA8LSBnZ3Bsb3QoQmFzZUZlciwgYWVzKHggPSBGZWNoYSwgeSA9IEssIGNvbG9yID0gUGVyc29uYWplKSkrDQogICAgICAgICAgICAgICAgICAgIGdlb21fcG9pbnQoKSsNCiAgbGFicyh0aXRsZSA9IHBhc3RlMCgiS2lsbHMgUEQgQ2hpY2hvODc0IHNlZ8O6biBtYXBhICIsZmVjaGFpbmksICIgLSAiLCBmZWNoYWZpbiksDQogICAgICAgc3VidGl0bGUgPSAiRHVyYWNpw7NuIGRlIHBhcnRpZGFzIHNlZ8O6biByZXN1bHRhZG8iLA0KICAgICAgIGNhcHRpb24gPSAiRnVlbnRlOiBFbGFib3JhY2nDs24gcHJvcGlhIiwNCiAgICAgICB4ID0gIiIsDQogICAgICAgeSA9ICJLaWxscyIpKw0KICB0aGVtZV9taW5pbWFsKCkrDQogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoIGhqdXN0ID0gMC41ICwgdmp1c3QgPSAwLjUpLA0KICAgICAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KCBoanVzdCA9IDAuNSAsIHZqdXN0ID0gMC41KSkrDQogIGZhY2V0X3dyYXAofkVzY2VuYXJpbywgbmNvbCA9IDIpDQoNCmZpZzMgPC0gZ2dwbG90bHkocGYpDQoNCmZpZzMNCiAgICAgICAgICAgICAgICAgIA0KDQoNCg0KYGBgDQoNCkdyw6FmaWNvIFBvbGFyDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQoNCmxpc3RhZmVyIDwtIGMobWVhbihCYXNlRmVyJEspLG1lYW4oQmFzZUZlciREKSxtZWFuKEJhc2VGZXIkQSksbWVhbihCYXNlRmVyJEtEUikpDQoNCmZpZzUgPC0gcGxvdF9seSgNCiAgdHlwZSA9ICJzY2F0dGVycG9sYXIiLA0KICByID0gbGlzdGFmZXIsDQogIHRoZXRhID0gYygiS2lsbHMiLCJNdWVydGVzIiwiQXNpc3RlbmNpYSIsIktEUiIpLA0KICBmaWxsID0gInRvc2VsZiINCikNCmZpZzUgPC0gZmlnNSAlPiUNCiAgbGF5b3V0KA0KICAgIHBvbGFyID0gbGlzdCgNCiAgICAgIHJhZGlhbGF4aXMgPSBsaXN0KA0KICAgICAgICB2aXNpYmxlID0gVCwNCiAgICAgICAgcmFuZ2UgPSBjKDAsMzApDQogICAgICApDQogICAgKSwNCiAgICBzaG93bGVnZW5kID0gRg0KICApDQoNCg0KZmlnNQ0KYGBgDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQoNClRhYmxhXzQgPC0gQmFzZUZlciAlPiUNCiAgZmlsdGVyKEVxdWlwbyA9PSAicGllbGRlcG9yIikgJT4lIA0KICBzZWxlY3QoRmVjaGEsRXNjZW5hcmlvLEtEUikgJT4lDQogIGdyb3VwX2J5KEZlY2hhLEVzY2VuYXJpbykgJT4lIA0KICBzdW1tYXJpc2UoS0RSID0gbWVhbihLRFIpKQ0KDQoNCmZpZzEgPC0gZ2dwbG90KFRhYmxhXzQsIGFlcyh4ID0gRmVjaGEsIHkgPSBLRFIpKSsgI3NlbGVjY2lvbmFtb3MgdmFyaWFibGVzIGEgZ3JhZmljYXIgeSBhIGNvbG9yZWFyDQogIGdlb21fbGluZSgpKyANCiAgZ2VvbV9wb2ludCgpKw0KICAjIGdlb21fc21vb3RoKG1ldGhvZCA9ICdsb2VzcycsDQogICMgICAgICAgICAgICAgZm9ybXVsYSA9ICd5IH4geCcpKw0KICBsYWJzKHRpdGxlID1wYXN0ZTAoIktEUiBTZWfDum4gZmVjaGEgUEQgIixmZWNoYWluaSwgIiAtICIsIGZlY2hhZmluKSwNCiAgICAgICBzdWJ0aXRsZSA9ICJLRFIgUHJvbWVkaW8gc2Vnw7puIGZlY2hhIiwNCiAgICAgICBjYXB0aW9uID0gIkZ1ZW50ZTogRWxhYm9yYWNpw7NuIHByb3BpYSIsDQogICAgICAgeCA9ICJGZWNoYSIsDQogICAgICAgeSA9ICJLRFIiKSsNCiAgI3NjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCIjMWFjMGM2IiwgIiNlNzQ2NDUiLCIjZmFjZDYwIikpKyAjY29sb3JlYW1vcyBsYXMgbGluZWFzDQogIHRoZW1lX21pbmltYWwoKSsNCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dCggaGp1c3QgPSAwLjUgLCB2anVzdCA9IDAuNSksIA0KICAgICAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KCBoanVzdCA9IDAuNSAsIHZqdXN0ID0gMC41KSkrDQogIGZhY2V0X3dyYXAofkVzY2VuYXJpbykNCg0KZmlnMSA8LSBnZ3Bsb3RseShmaWcxKQ0KIA0KZmlnMQ0KDQpgYGANCg0KIyMjIFBhYmxvY2E4Ng0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KDQpCYXNlRmVyIDwtIEJhc2UgJT4lIA0KICBmaWx0ZXIoSnVnYWRvciA9PSAiRW56byIpDQoNCkVuelBhcnRpZGFzIDwtIG5yb3coQmFzZUZlcikNCg0KcG9yY2VueiA8LSBwYXN0ZTAocm91bmQoRmVyUGFydGlkYXMvY2FudHBhcnRpZGFzKjEwMCwyKSwiICUiKQ0KDQpGZXJQZXJzb25hamVzIDwtICBCYXNlRmVyICU+JQ0KICBzZWxlY3QoUGVyc29uYWplLEssRCxBLEtEUikgJT4lDQogIGdyb3VwX2J5KFBlcnNvbmFqZSkgJT4lIA0KICBzdW1tYXJpc2UoYWNyb3NzKGV2ZXJ5dGhpbmcoKSwgbGlzdChtZWFuKSkpDQoNCkZlckdyYWwgPC0gQmFzZUZlciAlPiUNCiAgc2VsZWN0KEssRCxBLEtEUikgJT4lDQogIHN1bW1hcmlzZShhY3Jvc3MoZXZlcnl0aGluZygpLCBsaXN0KG1lYW4pKSkNCg0KRmVyUGVyc29uYWplczIgPC0gQmFzZUZlciAlPiUNCiAgc2VsZWN0KFBlcnNvbmFqZSxLLEQsQSxLRFIpICU+JQ0KICBncm91cF9ieShQZXJzb25hamUpICU+JQ0KICBzdW1tYXJpc2UoVG90YWwgPSBuKCkpICU+JSANCiAgbXV0YXRlKFBvcmNlbnRhamUgPSByb3VuZChUb3RhbC9zdW0oVG90YWwpKjEwMCwyKSkgJT4lIA0KICBtdXRhdGUoRXRpcXVldGEgPSBwYXN0ZTAoVG90YWwsICIgKCAlICIsIFBvcmNlbnRhamUsICIpIikpDQoNCg0KRmVyUGVyc29uYWplc0ZpbmFsIDwtIGxlZnRfam9pbihGZXJQZXJzb25hamVzLEZlclBlcnNvbmFqZXMyKSAlPiUgDQogIHNlbGVjdChQZXJzb25hamUsRXRpcXVldGEsS18xLERfMSxBXzEsS0RSXzEpICU+JSANCiAgcmVuYW1lKFRvdGFsID0gRXRpcXVldGEsDQogICAgICAgICBQcm9tZWRpb19LaWxscyA9IEtfMSwNCiAgICAgICAgIFByb21lZGlvX011ZXJ0ZXMgPSBEXzEsDQogICAgICAgICBQcm9tZWRpb19Bc2lzdGVuY2lhcyA9QV8xLA0KICAgICAgICAgS0RSID0gS0RSXzEpICU+JSANCiAgYXJyYW5nZShkZXNjKEtEUikpDQoNCiMjVGFibGEgcGVyc29uYWplIGVzY2VuYXJpbw0KDQoNCiMjVGFibGEgcGVyc29uYWplIGVzY2VuYXJpbw0KDQoNCkZlclBlck1hcGEgPC0gIEJhc2VGZXIgJT4lDQogIHNlbGVjdChFc2NlbmFyaW8sUmVzdWx0YWRvLFBlcnNvbmFqZSxLLEQsQSxLRFIpICU+JQ0KICBncm91cF9ieShFc2NlbmFyaW8sUmVzdWx0YWRvLFBlcnNvbmFqZSkgJT4lIA0KICBzdW1tYXJpc2UoYWNyb3NzKGV2ZXJ5dGhpbmcoKSwgbGlzdChtZWFuKSkpDQoNCkZlclBlck1hcGEyIDwtIEJhc2VGZXIgJT4lDQogIHNlbGVjdChFc2NlbmFyaW8sUmVzdWx0YWRvLFBlcnNvbmFqZSxLLEQsQSxLRFIpICU+JQ0KICBncm91cF9ieShFc2NlbmFyaW8sUmVzdWx0YWRvLFBlcnNvbmFqZSkgJT4lDQogIHN1bW1hcmlzZShUb3RhbCA9IG4oKSkgJT4lIA0KICBtdXRhdGUoUG9yY2VudGFqZSA9IHJvdW5kKFRvdGFsL3N1bShUb3RhbCkqMTAwLDIpKSAlPiUgDQogIG11dGF0ZShFdGlxdWV0YSA9IHBhc3RlMChUb3RhbCwgIiAoICUgIiwgUG9yY2VudGFqZSwgIikiKSkNCg0KDQpGZXJQZXJNYXBhRmluYWwgPC0gbGVmdF9qb2luKEZlclBlck1hcGEsRmVyUGVyTWFwYTIpICU+JSANCiAgc2VsZWN0KFJlc3VsdGFkbyxQZXJzb25hamUsRXRpcXVldGEsS18xLERfMSxBXzEsS0RSXzEpICU+JSANCiAgcmVuYW1lKFRvdGFsID0gRXRpcXVldGEsDQogICAgICAgICBQcm9tZWRpb19LaWxscyA9IEtfMSwNCiAgICAgICAgIFByb21lZGlvX011ZXJ0ZXMgPSBEXzEsDQogICAgICAgICBQcm9tZWRpb19Bc2lzdGVuY2lhcyA9QV8xLA0KICAgICAgICAgS0RSID0gS0RSXzEpICU+JSANCiAgYXJyYW5nZSgoRXNjZW5hcmlvKSkNCg0KDQoNCg0KYGBgDQoNCkVsIGp1Z2Fkb3IgUEQgcGFibG9jYTg2IGp1Z8OzIHVuIHRvdGFsIGRlIGByIEVuelBhcnRpZGFzYCBwYXJ0aWRhcyBxdWUgcmVwcmVzZW50YW4gYHIgcG9yY2VuemAgc29icmUgZWwgdG90YWwgZGUgcGFydGlkYXMuIEEgY29udGludWFjacOzbiBzZSBtdWVzdHJhbiBzdXMgY2lmcmFzIGdlbmVyYWxlcyB5IGxhcyBjaWZyYXMgZGUgbG9zIHBlcnNvbmFqZXMgcXVlIGVsaWdpw7MNCg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCiNIQUNFUiBUQUJMQSBDT04gS0FCTEUNCg0Ka2FibGUoRmVyR3JhbCxhbGlnbiA9ICJsIixkaWdpdHMgPSAzLGNvbC5uYW1lcyA9IGMoIlByb21lZGlvIEtpbGxzIiwiUHJvbWVkaW8gTXVlcnRlcyIsIlByb21lZGlvIEFzaXN0ZW5jaWFzIiwiS0RSIikpJT4lIA0KICAgICAgICBjb2x1bW5fc3BlYygxLCBib2xkID0gVFJVRSwgY29sb3IgPSBuZWdybykgJT4lDQogIHJvd19zcGVjKDAsYmFja2dyb3VuZCA9IG5lZ3JvLCBjb2xvciA9ICJ3aGl0ZSIpICU+JSANCiAgICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiID0gMSwNCiAgICAgICAgICAgICAgICAgICAgICJDaWZyYXMiPSAyLA0KICAgICAgICAgICAgICAgICAgICAgIiAiID0xKSkgJT4lIA0KICBrYWJsZV9taW5pbWFsKCkNCmBgYA0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KI0hBQ0VSIFRBQkxBIENPTiBLQUJMRQ0KDQprYWJsZShGZXJQZXJzb25hamVzRmluYWwsYWxpZ24gPSAibCIsZGlnaXRzID0gMyxjb2wubmFtZXMgPSBjKCJQZXJzb25hamUiLCJUb3RhbCIsIlByb21lZGlvIEtpbGxzIiwiUHJvbWVkaW8gTXVlcnRlcyIsIlByb21lZGlvIEFzaXN0ZW5jaWFzIiwiS0RSIikpJT4lIA0KICAgICAgICBjb2x1bW5fc3BlYygxLCBib2xkID0gVFJVRSwgY29sb3IgPSBuZWdybykgJT4lDQogIHJvd19zcGVjKDAsYmFja2dyb3VuZCA9IG5lZ3JvLCBjb2xvciA9ICJ3aGl0ZSIpICU+JSANCiAgICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiID0gMSwNCiAgICAgICAgICAgICAgICAgICAgICJQZXJzb25hamVzIj0gNCwNCiAgICAgICAgICAgICAgICAgICAgICIgIiA9MSkpICU+JSANCiAga2FibGVfbWluaW1hbCgpDQpgYGANCg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCiNIQUNFUiBUQUJMQSBDT04gS0FCTEUNCg0KIyBrYWJsZShGZXJQZXJNYXBhRmluYWwsYWxpZ24gPSAibCIsZGlnaXRzID0gMyxjb2wubmFtZXMgPSBjKCJNYXBhIiwiUGVyc29uYWplIiwiVG90YWwiLCJQcm9tZWRpbyBLaWxscyIsIlByb21lZGlvIE11ZXJ0ZXMiLCJQcm9tZWRpbyBBc2lzdGVuY2lhcyIsIktEUiIpKSU+JSANCiMgICAgICAgICBjb2x1bW5fc3BlYygxLCBib2xkID0gVFJVRSwgY29sb3IgPSBuZWdybykgJT4lDQojICAgcm93X3NwZWMoMCxiYWNrZ3JvdW5kID0gbmVncm8sIGNvbG9yID0gIndoaXRlIikgJT4lIA0KIyAgICAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIiA9IDEsDQojICAgICAgICAgICAgICAgICAgICAgICJSZW5kaW1pZW50byBzZWfDum4gbWFwYSI9IDUsDQojICAgICAgICAgICAgICAgICAgICAgICIgIiA9MSkpICU+JSANCiMgICBrYWJsZV9wYXBlcigiaG92ZXIiLGh0bWxfZm9udCA9ICJDYWxpYnJpIikNCmBgYA0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KI0hBQ0VSIFRBQkxBIENPTiBLQUJMRQ0KDQpkYXRhdGFibGUoRmVyUGVyTWFwYUZpbmFsLGZpbHRlciA9ICd0b3AnLA0KICAgICAgICAgIG9wdGlvbnMgPSBsaXN0KA0KICBzZWFyY2hpbmcgPSBUUlVFLA0KICBwYWdlTGVuZ3RoID0gMTUsDQogIGluaXRDb21wbGV0ZSA9IEpTKA0KICAgICJmdW5jdGlvbihzZXR0aW5ncywganNvbikgeyIsDQogICAgIiQoJ2JvZHknKS5jc3Moeydmb250LWZhbWlseSc6ICdDYWxpYnJpJ30pOyIsDQogICAgIn0iDQopKSkgJT4lIA0KICBmb3JtYXRSb3VuZChjKCJQcm9tZWRpb19LaWxscyIsIlByb21lZGlvX011ZXJ0ZXMiLCJQcm9tZWRpb19Bc2lzdGVuY2lhcyIsIktEUiIpLDIpDQoNCg0KDQoNCmBgYA0KDQpFdm9sdXRpdm9zIGdlbmVyYWxlcyANCg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCg0KVGFibGFHIDwtIEJhc2UgJT4lDQogIGZpbHRlcihFcXVpcG8gPT0gInBpZWxkZXBvciIpICU+JQ0KICBmaWx0ZXIoSnVnYWRvciA9PSAiRW56byIpICU+JQ0KICBzZWxlY3QoRmVjaGEsSyxELEEsS0RSKSAlPiUNCiAgZ3JvdXBfYnkoRmVjaGEpICU+JQ0KICBzdW1tYXJpc2UoS2lsbHMgPSByb3VuZChtZWFuKEspLDIpLA0KICAgICAgICAgICAgRGVhdGhzID0gcm91bmQobWVhbihEKSwyKSwNCiAgICAgICAgICAgIEtEUnAgPSByb3VuZChtZWFuKEtEUiksMikpICU+JQ0KICBtdXRhdGUoS2lsbHNBY3VtID0gcm91bmQoY3VtbWVhbihLaWxscyksMiksDQogICAgICAgICBEZWF0aHNBY3VtID0gcm91bmQoY3VtbWVhbihEZWF0aHMpLDIpLA0KICAgICAgICAgS0RSQWN1bSA9IHJvdW5kKGN1bW1lYW4oS0RScCksMikpDQoNCiNHcsOhZmljbyAxDQoNCnAzIDwtIHBsb3RfbHkoVGFibGFHLHggPSB+RmVjaGEpJT4lDQogIGFkZF90cmFjZSh5ID0gfktpbGxzLG1vZGUgPSAibGluZXMrbWFya2VycyIsIG5hbWUgPSAia2lsbHMiLCBsaW5lID0gbGlzdChjb2xvciA9ICIjMjcyNjQzIiksbWFya2VyID0gbGlzdChjb2xvciA9ICIjMjcyNjQzIikpICU+JQ0KICBhZGRfdHJhY2UoeSA9IH5LaWxsc0FjdW0sbW9kZSA9ICJsaW5lcyttYXJrZXJzIiwgbmFtZSA9ICJraWxsc0FjdW0iLCBsaW5lID0gbGlzdChjb2xvciA9ICIjMmM2OThkIiksbWFya2VyID0gbGlzdChjb2xvciA9ICIjMmM2OThkIikpDQoNCg0KI0dyw6FmaWNvIDINCg0KcDQgPC0gcGxvdF9seShUYWJsYUcseCA9IH5GZWNoYSklPiUNCiAgYWRkX3RyYWNlKHkgPSB+RGVhdGhzLG1vZGUgPSAibGluZXMrbWFya2VycyIsIG5hbWUgPSAiRGVhdGhzIiwgbGluZSA9IGxpc3QoY29sb3IgPSAiI2Y1NTk1MSIpLG1hcmtlciA9IGxpc3QoY29sb3IgPSAiI2Y1NTk1MSIpKSAlPiUNCiAgYWRkX3RyYWNlKHkgPSB+RGVhdGhzQWN1bSxtb2RlID0gImxpbmVzK21hcmtlcnMiLCBuYW1lID0gIkRlYXRoc0FjdW0iLCBsaW5lID0gbGlzdChjb2xvciA9ICIjODAwZTBkIiksbWFya2VyID0gbGlzdChjb2xvciA9ICIjODAwZTBkIikpDQoNCiNHcsOhZmljbyAzDQoNCnA1IDwtIHBsb3RfbHkoVGFibGFHLHggPSB+RmVjaGEpJT4lDQogIGFkZF90cmFjZSh5ID0gfktEUnAsbW9kZSA9ICJsaW5lcyttYXJrZXJzIiwgbmFtZSA9ICJLRFIiLCBsaW5lID0gbGlzdChjb2xvciA9ICIjOTVhZGJlIiksbWFya2VyID0gbGlzdChjb2xvciA9ICIjOTVhZGJlIikpICU+JQ0KICBhZGRfdHJhY2UoeSA9IH5LRFJBY3VtLG1vZGUgPSAibGluZXMrbWFya2VycyIsIG5hbWUgPSAiS0RSQWN1bSIsIGxpbmUgPSBsaXN0KGNvbG9yID0gIiM1NzRmN2QiKSxtYXJrZXIgPSBsaXN0KGNvbG9yID0gIiM1NzRmN2QiKSkNCg0KDQoNCg0KZmlnIDwtIHN1YnBsb3QocDMscDQscDUsbnJvd3MgPSAzLCBzaGFyZVggPSBUUlVFLCBtYXJnaW4gPSAwLjA1KSAlPiUNCiAgbGF5b3V0KGFubm90YXRpb25zID0gbGlzdCgNCiAgICBsaXN0KHggPSAwLjUgLCB5ID0gMS4wNSAsdGV4dCA9ICJLaWxscyIsIHNob3dhcnJvdyA9IEYseHJlZj0ncGFwZXInLCB5cmVmPSdwYXBlcicpLA0KICAgIGxpc3QoeCA9IDAuNSAsIHkgPSAwLjcsdGV4dCA9ICJEZWF0aHMiLHNob3dhcnJvdyA9IEYseHJlZj0ncGFwZXInLCB5cmVmPSdwYXBlcicpLA0KICAgIGxpc3QoeCA9IDAuNSAsIHkgPSAwLjMgLCB5ID0gMjUsdGV4dCA9ICJLRFIiLHNob3dhcnJvdyA9IEYseHJlZj0ncGFwZXInLCB5cmVmPSdwYXBlcicpDQogICkpDQoNCmZpZw0KDQoNCg0KDQpgYGANCg0KDQpSZW5kaW1pZW50byBzZWfDum4gbWFwYQ0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KVGFibGFfMmYgPC0gQmFzZUZlciAlPiUgDQogIHNlbGVjdChFc2NlbmFyaW8sUmVzdWx0YWRvKSAlPiUNCiAgZmlsdGVyKCFpcy5uYShFc2NlbmFyaW8pKSAlPiUNCiAgZ3JvdXBfYnkoRXNjZW5hcmlvLFJlc3VsdGFkbykgJT4lIA0KICBzdW1tYXJpc2UoVG90YWwgPSBuKCkpICU+JSANCiAgbXV0YXRlKFBvcmNlbnRhamUgPSByb3VuZChUb3RhbC9zdW0oVG90YWwpKjEwMCwyKSkgJT4lIA0KICBtdXRhdGUoRXRpcXVldGEgPSBwYXN0ZTAoVG90YWwsICIgKCAlICIsIFBvcmNlbnRhamUsICIpIikpIA0KDQoNClRhYmxhYXV4IDwtIFRhYmxhXzJmICU+JSANCiAgc2VsZWN0KEVzY2VuYXJpbykgJT4lIA0KICBmaWx0ZXIoIWR1cGxpY2F0ZWQoRXNjZW5hcmlvKSkNCg0KZmlsYXMgPC0gbnJvdyhUYWJsYWF1eCkNCg0KZ2dwbG90KFRhYmxhXzJmLCBhZXMoeCA9ICIiICwgeSA9IFRvdGFsLCBmaWxsID0gUmVzdWx0YWRvICkpKw0KICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5Iiwgd2lkdGggPSAzKSsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IEV0aXF1ZXRhKSwgcG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IDAuNSksIHNpemUgPTMuNSwgY29sb3IgPSBibGFuY28pKw0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKG5lZ3JvLCBncmlzMixncmlzMSkpKw0KICAgIGxhYnModGl0bGUgPSBwYXN0ZTAoIkRhdG9zIFZhbG9yYW50IFBEIFBhYmxvY2E4NiAiLGZlY2hhaW5pLCAiIC0gIiwgZmVjaGFmaW4pLA0KICAgICAgIHN1YnRpdGxlID0gIlJlc3VtZW4gUmVzdWx0YWRvIHNlZ8O6biBtYXBhIiwNCiAgICAgICBjYXB0aW9uID0gIkZ1ZW50ZTogRWxhYm9yYWNpw7NuIHByb3BpYSIsDQogICAgICAgeCA9ICIiLA0KICAgICAgIHkgPSAiIikrDQogIHRoZW1lX21pbmltYWwoKSsNCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgdmp1c3QgPSAwLjUpLA0KICAgICAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KCBoanVzdCA9IDAuNSwgdmp1c3QgPSAwLjUpLA0KICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwNCiAgICAgICAgbGVnZW5kLnRpdGxlID0gZWxlbWVudF9ibGFuaygpKSsNCiAgZ3VpZGVzKGZpbGwgPSBndWlkZV9sZWdlbmQocmV2ZXJzZSA9IFRSVUUpKSsNCiAgY29vcmRfZmxpcCgpKw0KICBmYWNldF93cmFwKH5Fc2NlbmFyaW8sIG5yb3cgPSBmaWxhcykNCmBgYA0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KDQoNCnBmMSA8LSBnZ3Bsb3QoQmFzZUZlciwgYWVzKHggPSBGZWNoYSwgeSA9IEssIGNvbG9yID0gUGVyc29uYWplLHRleHQgPSBwYXN0ZTAoIlJlc3VsdGFkbzogIixSZXN1bHRhZG8sIlxuTWFwYTogIixFc2NlbmFyaW8sIlxuS0RSIDogIixLRFIpKSkrDQogICAgICAgICAgICAgICAgICAgIGdlb21fcG9pbnQoKSsNCiAgbGFicyh0aXRsZSA9IHBhc3RlMCgiRGF0b3MgVmFsb3JhbnQgS2lsbHMgUEQgUGFibG9jYTg2ICIsZmVjaGFpbmksICIgLSAiLCBmZWNoYWZpbiksDQogICAgICAgc3VidGl0bGUgPSAiRHVyYWNpw7NuIGRlIHBhcnRpZGFzIHNlZ8O6biByZXN1bHRhZG8iLA0KICAgICAgIGNhcHRpb24gPSAiRnVlbnRlOiBFbGFib3JhY2nDs24gcHJvcGlhIiwNCiAgICAgICB4ID0gIiIsDQogICAgICAgeSA9ICJLaWxscyIpKw0KICB0aGVtZV9taW5pbWFsKCkrDQogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoIGhqdXN0ID0gMC41ICwgdmp1c3QgPSAwLjUpLA0KICAgICAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KCBoanVzdCA9IDAuNSAsIHZqdXN0ID0gMC41KSkNCg0KZmlnNCA8LSBnZ3Bsb3RseShwZjEpDQoNCmZpZzQNCiAgICAgICAgICAgICAgICAgIA0KDQoNCg0KYGBgDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQoNCiNHUkFGSUNPIENPTiBTRUxFQ1RPUiAtLS0tLS0tLS0tLS0tLS0tLS0tIFJFVklTQVIhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhDQojIGZpZyA8LSBwbG90X2x5KGRhdGEgPSBCYXNlRmVyLCBjb2xvciA9IH5QZXJzb25hamUpICU+JQ0KIyAgIGFkZF90cmFjZSh4PX5GZWNoYSwgeT1+SywNCiMgICAgICAgICAgICAgdHJhbnNmb3JtcyA9IGxpc3QoDQojICAgICAgICAgICAgICAgbGlzdCgNCiMgICAgICAgICAgICAgICAgIHR5cGUgPSAiZmlsdGVyIiwNCiMgICAgICAgICAgICAgICAgIHRhcmdldCA9IH5Fc2NlbmFyaW8sDQojICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSAnPScsDQojICAgICAgICAgICAgICAgICB2YWx1ZSA9IHVuaXF1ZShCYXNlRmVyJEVzY2VuYXJpbykNCiMgICAgICAgICAgICAgICApDQojICAgICAgICAgICAgICkNCiMgICApICU+JQ0KIyAgIGxheW91dCgNCiMgICAgIHVwZGF0ZW1lbnVzID0gbGlzdCgNCiMgICAgICAgbGlzdCgNCiMgICAgICAgICB0eXBlID0gJ2Ryb3Bkb3duJywNCiMgICAgICAgICBhY3RpdmUgPSAtMSwNCiMgICAgICAgICBidXR0b25zID0gbGlzdCgNCiMgICAgICAgICAgIGxpc3QobWV0aG9kID0gInJlc3R5bGUiLA0KIyAgICAgICAgICAgICAgICBhcmdzID0gbGlzdCgidHJhbnNmb3Jtc1swXS52YWx1ZSIsIHVuaXF1ZShCYXNlRmVyJEVzY2VuYXJpbylbMV0pLA0KIyAgICAgICAgICAgICAgICBsYWJlbCA9ICJCaW5kIiksDQojICAgICAgICAgICBsaXN0KG1ldGhvZCA9ICJyZXN0eWxlIiwNCiMgICAgICAgICAgICAgICAgYXJncyA9IGxpc3QoInRyYW5zZm9ybXNbMF0udmFsdWUiLCB1bmlxdWUoQmFzZUZlciRFc2NlbmFyaW8pWzJdKSwNCiMgICAgICAgICAgICAgICAgbGFiZWwgPSAiQXNjZW50IiksDQojICAgICAgICAgICBsaXN0KG1ldGhvZCA9ICJyZXN0eWxlIiwNCiMgICAgICAgICAgICAgICAgYXJncyA9IGxpc3QoInRyYW5zZm9ybXNbMF0udmFsdWUiLCB1bmlxdWUoQmFzZUZlciRFc2NlbmFyaW8pWzNdKSwNCiMgICAgICAgICAgICAgICAgbGFiZWwgPSAiSGF2ZW4iKSwNCiMgICAgICAgICAgIGxpc3QobWV0aG9kID0gInJlc3R5bGUiLA0KIyAgICAgICAgICAgICAgICBhcmdzID0gbGlzdCgidHJhbnNmb3Jtc1swXS52YWx1ZSIsIHVuaXF1ZShCYXNlRmVyJEVzY2VuYXJpbylbNF0pLA0KIyAgICAgICAgICAgICAgICBsYWJlbCA9ICJTcGxpdCIpLA0KIyAgICAgICAgICAgbGlzdChtZXRob2QgPSAicmVzdHlsZSIsDQojICAgICAgICAgICAgICAgIGFyZ3MgPSBsaXN0KCJ0cmFuc2Zvcm1zWzBdLnZhbHVlIiwgdW5pcXVlKEJhc2VGZXIkRXNjZW5hcmlvKVs1XSksDQojICAgICAgICAgICAgICAgIGxhYmVsID0gIkJyZWV6ZSIpLA0KIyAgICAgICAgICAgbGlzdChtZXRob2QgPSAicmVzdHlsZSIsDQojICAgICAgICAgICAgICAgIGFyZ3MgPSBsaXN0KCJ0cmFuc2Zvcm1zWzBdLnZhbHVlIiwgdW5pcXVlKEJhc2VGZXIkRXNjZW5hcmlvKVs2XSksDQojICAgICAgICAgICAgICAgIGxhYmVsID0gIkljZWJveCIpDQojICAgICAgICAgKQ0KIyAgICAgICApDQojICAgICApDQojICAgKQ0KIyBmaWcNCg0KDQoNCg0KYGBgDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQoNCg0KcGYgPC0gZ2dwbG90KEJhc2VGZXIsIGFlcyh4ID0gRmVjaGEsIHkgPSBLLCBjb2xvciA9IFBlcnNvbmFqZSkpKw0KICAgICAgICAgICAgICAgICAgICBnZW9tX3BvaW50KCkrDQogIGxhYnModGl0bGUgPSBwYXN0ZTAoIktpbGxzIFBEIFBhYmxvY2E4NiBzZWfDum4gbWFwYSAiLGZlY2hhaW5pLCAiIC0gIiwgZmVjaGFmaW4pLA0KICAgICAgIHN1YnRpdGxlID0gIkR1cmFjacOzbiBkZSBwYXJ0aWRhcyBzZWfDum4gcmVzdWx0YWRvIiwNCiAgICAgICBjYXB0aW9uID0gIkZ1ZW50ZTogRWxhYm9yYWNpw7NuIHByb3BpYSIsDQogICAgICAgeCA9ICIiLA0KICAgICAgIHkgPSAiS2lsbHMiKSsNCiAgdGhlbWVfbWluaW1hbCgpKw0KICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KCBoanVzdCA9IDAuNSAsIHZqdXN0ID0gMC41KSwNCiAgICAgICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dCggaGp1c3QgPSAwLjUgLCB2anVzdCA9IDAuNSkpKw0KICBmYWNldF93cmFwKH5Fc2NlbmFyaW8sIG5jb2wgPSAyKQ0KDQpmaWczIDwtIGdncGxvdGx5KHBmKQ0KDQpmaWczDQogICAgICAgICAgICAgICAgICANCg0KDQoNCmBgYA0KDQpHcsOhZmljbyBQb2xhcg0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KDQpsaXN0YWZlciA8LSBjKG1lYW4oQmFzZUZlciRLKSxtZWFuKEJhc2VGZXIkRCksbWVhbihCYXNlRmVyJEEpLG1lYW4oQmFzZUZlciRLRFIpKQ0KDQpmaWc1IDwtIHBsb3RfbHkoDQogIHR5cGUgPSAic2NhdHRlcnBvbGFyIiwNCiAgciA9IGxpc3RhZmVyLA0KICB0aGV0YSA9IGMoIktpbGxzIiwiTXVlcnRlcyIsIkFzaXN0ZW5jaWEiLCJLRFIiKSwNCiAgZmlsbCA9ICJ0b3NlbGYiDQopDQpmaWc1IDwtIGZpZzUgJT4lDQogIGxheW91dCgNCiAgICBwb2xhciA9IGxpc3QoDQogICAgICByYWRpYWxheGlzID0gbGlzdCgNCiAgICAgICAgdmlzaWJsZSA9IFQsDQogICAgICAgIHJhbmdlID0gYygwLDMwKQ0KICAgICAgKQ0KICAgICksDQogICAgc2hvd2xlZ2VuZCA9IEYNCiAgKQ0KDQoNCmZpZzUNCmBgYA0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KDQpUYWJsYV80IDwtIEJhc2VGZXIgJT4lDQogIGZpbHRlcihFcXVpcG8gPT0gInBpZWxkZXBvciIpICU+JSANCiAgc2VsZWN0KEZlY2hhLEVzY2VuYXJpbyxLRFIpICU+JQ0KICBncm91cF9ieShGZWNoYSxFc2NlbmFyaW8pICU+JSANCiAgc3VtbWFyaXNlKEtEUiA9IG1lYW4oS0RSKSkNCg0KDQpmaWcxIDwtIGdncGxvdChUYWJsYV80LCBhZXMoeCA9IEZlY2hhLCB5ID0gS0RSKSkrICNzZWxlY2Npb25hbW9zIHZhcmlhYmxlcyBhIGdyYWZpY2FyIHkgYSBjb2xvcmVhcg0KICBnZW9tX2xpbmUoKSsgDQogIGdlb21fcG9pbnQoKSsNCiAgIyBnZW9tX3Ntb290aChtZXRob2QgPSAnbG9lc3MnLA0KICAjICAgICAgICAgICAgIGZvcm11bGEgPSAneSB+IHgnKSsNCiAgbGFicyh0aXRsZSA9cGFzdGUwKCJLRFIgU2Vnw7puIGZlY2hhIFBEICIsZmVjaGFpbmksICIgLSAiLCBmZWNoYWZpbiksDQogICAgICAgc3VidGl0bGUgPSAiS0RSIFByb21lZGlvIHNlZ8O6biBmZWNoYSIsDQogICAgICAgY2FwdGlvbiA9ICJGdWVudGU6IEVsYWJvcmFjacOzbiBwcm9waWEiLA0KICAgICAgIHggPSAiRmVjaGEiLA0KICAgICAgIHkgPSAiS0RSIikrDQogICNzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiIzFhYzBjNiIsICIjZTc0NjQ1IiwiI2ZhY2Q2MCIpKSsgI2NvbG9yZWFtb3MgbGFzIGxpbmVhcw0KICB0aGVtZV9taW5pbWFsKCkrDQogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoIGhqdXN0ID0gMC41ICwgdmp1c3QgPSAwLjUpLCANCiAgICAgICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dCggaGp1c3QgPSAwLjUgLCB2anVzdCA9IDAuNSkpKw0KICBmYWNldF93cmFwKH5Fc2NlbmFyaW8pDQoNCmZpZzEgPC0gZ2dwbG90bHkoZmlnMSkNCiANCmZpZzENCg0KYGBgDQoNCiMjIyBKdXN0b1lOZWNlc2FyaW8NCg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCg0KQmFzZUZlciA8LSBCYXNlICU+JSANCiAgZmlsdGVyKEp1Z2Fkb3IgPT0gIkxlbyIpDQoNCkxlb1BhcnRpZGFzIDwtIG5yb3coQmFzZUZlcikNCg0KcG9yY2xlbyA8LSBwYXN0ZTAocm91bmQoTGVvUGFydGlkYXMvY2FudHBhcnRpZGFzKjEwMCwyKSwiICUiKQ0KDQpGZXJQZXJzb25hamVzIDwtICBCYXNlRmVyICU+JQ0KICBzZWxlY3QoUGVyc29uYWplLEssRCxBLEtEUikgJT4lDQogIGdyb3VwX2J5KFBlcnNvbmFqZSkgJT4lIA0KICBzdW1tYXJpc2UoYWNyb3NzKGV2ZXJ5dGhpbmcoKSwgbGlzdChtZWFuKSkpDQoNCkZlckdyYWwgPC0gQmFzZUZlciAlPiUNCiAgc2VsZWN0KEssRCxBLEtEUikgJT4lDQogIHN1bW1hcmlzZShhY3Jvc3MoZXZlcnl0aGluZygpLCBsaXN0KG1lYW4pKSkNCg0KRmVyUGVyc29uYWplczIgPC0gQmFzZUZlciAlPiUNCiAgc2VsZWN0KFBlcnNvbmFqZSxLLEQsQSxLRFIpICU+JQ0KICBncm91cF9ieShQZXJzb25hamUpICU+JQ0KICBzdW1tYXJpc2UoVG90YWwgPSBuKCkpICU+JSANCiAgbXV0YXRlKFBvcmNlbnRhamUgPSByb3VuZChUb3RhbC9zdW0oVG90YWwpKjEwMCwyKSkgJT4lIA0KICBtdXRhdGUoRXRpcXVldGEgPSBwYXN0ZTAoVG90YWwsICIgKCAlICIsIFBvcmNlbnRhamUsICIpIikpDQoNCg0KRmVyUGVyc29uYWplc0ZpbmFsIDwtIGxlZnRfam9pbihGZXJQZXJzb25hamVzLEZlclBlcnNvbmFqZXMyKSAlPiUgDQogIHNlbGVjdChQZXJzb25hamUsRXRpcXVldGEsS18xLERfMSxBXzEsS0RSXzEpICU+JSANCiAgcmVuYW1lKFRvdGFsID0gRXRpcXVldGEsDQogICAgICAgICBQcm9tZWRpb19LaWxscyA9IEtfMSwNCiAgICAgICAgIFByb21lZGlvX011ZXJ0ZXMgPSBEXzEsDQogICAgICAgICBQcm9tZWRpb19Bc2lzdGVuY2lhcyA9QV8xLA0KICAgICAgICAgS0RSID0gS0RSXzEpICU+JSANCiAgYXJyYW5nZShkZXNjKEtEUikpDQoNCiMjVGFibGEgcGVyc29uYWplIGVzY2VuYXJpbw0KDQoNCkZlclBlck1hcGEgPC0gIEJhc2VGZXIgJT4lDQogIHNlbGVjdChFc2NlbmFyaW8sUmVzdWx0YWRvLFBlcnNvbmFqZSxLLEQsQSxLRFIpICU+JQ0KICBncm91cF9ieShFc2NlbmFyaW8sUmVzdWx0YWRvLFBlcnNvbmFqZSkgJT4lIA0KICBzdW1tYXJpc2UoYWNyb3NzKGV2ZXJ5dGhpbmcoKSwgbGlzdChtZWFuKSkpDQoNCkZlclBlck1hcGEyIDwtIEJhc2VGZXIgJT4lDQogIHNlbGVjdChFc2NlbmFyaW8sUmVzdWx0YWRvLFBlcnNvbmFqZSxLLEQsQSxLRFIpICU+JQ0KICBncm91cF9ieShFc2NlbmFyaW8sUmVzdWx0YWRvLFBlcnNvbmFqZSkgJT4lDQogIHN1bW1hcmlzZShUb3RhbCA9IG4oKSkgJT4lIA0KICBtdXRhdGUoUG9yY2VudGFqZSA9IHJvdW5kKFRvdGFsL3N1bShUb3RhbCkqMTAwLDIpKSAlPiUgDQogIG11dGF0ZShFdGlxdWV0YSA9IHBhc3RlMChUb3RhbCwgIiAoICUgIiwgUG9yY2VudGFqZSwgIikiKSkNCg0KDQpGZXJQZXJNYXBhRmluYWwgPC0gbGVmdF9qb2luKEZlclBlck1hcGEsRmVyUGVyTWFwYTIpICU+JSANCiAgc2VsZWN0KFJlc3VsdGFkbyxQZXJzb25hamUsRXRpcXVldGEsS18xLERfMSxBXzEsS0RSXzEpICU+JSANCiAgcmVuYW1lKFRvdGFsID0gRXRpcXVldGEsDQogICAgICAgICBQcm9tZWRpb19LaWxscyA9IEtfMSwNCiAgICAgICAgIFByb21lZGlvX011ZXJ0ZXMgPSBEXzEsDQogICAgICAgICBQcm9tZWRpb19Bc2lzdGVuY2lhcyA9QV8xLA0KICAgICAgICAgS0RSID0gS0RSXzEpICU+JSANCiAgYXJyYW5nZSgoRXNjZW5hcmlvKSkNCg0KDQoNCg0KDQpgYGANCg0KRWwganVnYWRvciBQRCBKdXN0b1lOZWNlc2FyaW8ganVnw7MgdW4gdG90YWwgZGUgYHIgTGVvUGFydGlkYXNgIHBhcnRpZGFzIHF1ZSByZXByZXNlbnRhbiBgciBwb3JjbGVvYCBzb2JyZSBlbCB0b3RhbCBkZSBwYXJ0aWRhcy4gQSBjb250aW51YWNpw7NuIHNlIG11ZXN0cmFuIHN1cyBjaWZyYXMgZ2VuZXJhbGVzIHkgbGFzIGNpZnJhcyBkZSBsb3MgcGVyc29uYWplcyBxdWUgZWxpZ2nDsw0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KI0hBQ0VSIFRBQkxBIENPTiBLQUJMRQ0KDQprYWJsZShGZXJHcmFsLGFsaWduID0gImwiLGRpZ2l0cyA9IDMsY29sLm5hbWVzID0gYygiUHJvbWVkaW8gS2lsbHMiLCJQcm9tZWRpbyBNdWVydGVzIiwiUHJvbWVkaW8gQXNpc3RlbmNpYXMiLCJLRFIiKSklPiUgDQogICAgICAgIGNvbHVtbl9zcGVjKDEsIGJvbGQgPSBUUlVFLCBjb2xvciA9IG5lZ3JvKSAlPiUNCiAgcm93X3NwZWMoMCxiYWNrZ3JvdW5kID0gbmVncm8sIGNvbG9yID0gIndoaXRlIikgJT4lIA0KICAgIGFkZF9oZWFkZXJfYWJvdmUoYygiICIgPSAxLA0KICAgICAgICAgICAgICAgICAgICAgIkNpZnJhcyI9IDIsDQogICAgICAgICAgICAgICAgICAgICAiICIgPTEpKSAlPiUgDQogIGthYmxlX21pbmltYWwoKQ0KYGBgDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojSEFDRVIgVEFCTEEgQ09OIEtBQkxFDQoNCmthYmxlKEZlclBlcnNvbmFqZXNGaW5hbCxhbGlnbiA9ICJsIixkaWdpdHMgPSAzLGNvbC5uYW1lcyA9IGMoIlBlcnNvbmFqZSIsIlRvdGFsIiwiUHJvbWVkaW8gS2lsbHMiLCJQcm9tZWRpbyBNdWVydGVzIiwiUHJvbWVkaW8gQXNpc3RlbmNpYXMiLCJLRFIiKSklPiUgDQogICAgICAgIGNvbHVtbl9zcGVjKDEsIGJvbGQgPSBUUlVFLCBjb2xvciA9IG5lZ3JvKSAlPiUNCiAgcm93X3NwZWMoMCxiYWNrZ3JvdW5kID0gbmVncm8sIGNvbG9yID0gIndoaXRlIikgJT4lIA0KICAgIGFkZF9oZWFkZXJfYWJvdmUoYygiICIgPSAxLA0KICAgICAgICAgICAgICAgICAgICAgIlBlcnNvbmFqZXMiPSA0LA0KICAgICAgICAgICAgICAgICAgICAgIiAiID0xKSkgJT4lIA0KICBrYWJsZV9taW5pbWFsKCkNCmBgYA0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KI0hBQ0VSIFRBQkxBIENPTiBLQUJMRQ0KDQojIGthYmxlKEZlclBlck1hcGFGaW5hbCxhbGlnbiA9ICJsIixkaWdpdHMgPSAzLGNvbC5uYW1lcyA9IGMoIk1hcGEiLCJQZXJzb25hamUiLCJUb3RhbCIsIlByb21lZGlvIEtpbGxzIiwiUHJvbWVkaW8gTXVlcnRlcyIsIlByb21lZGlvIEFzaXN0ZW5jaWFzIiwiS0RSIikpJT4lIA0KIyAgICAgICAgIGNvbHVtbl9zcGVjKDEsIGJvbGQgPSBUUlVFLCBjb2xvciA9IG5lZ3JvKSAlPiUNCiMgICByb3dfc3BlYygwLGJhY2tncm91bmQgPSBuZWdybywgY29sb3IgPSAid2hpdGUiKSAlPiUgDQojICAgICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiID0gMSwNCiMgICAgICAgICAgICAgICAgICAgICAgIlJlbmRpbWllbnRvIHNlZ8O6biBtYXBhIj0gNSwNCiMgICAgICAgICAgICAgICAgICAgICAgIiAiID0xKSkgJT4lIA0KIyAgIGthYmxlX3BhcGVyKCJob3ZlciIsaHRtbF9mb250ID0gIkNhbGlicmkiKQ0KYGBgDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojSEFDRVIgVEFCTEEgQ09OIEtBQkxFDQoNCmRhdGF0YWJsZShGZXJQZXJNYXBhRmluYWwsZmlsdGVyID0gJ3RvcCcsDQogICAgICAgICAgb3B0aW9ucyA9IGxpc3QoDQogIHNlYXJjaGluZyA9IFRSVUUsDQogIHBhZ2VMZW5ndGggPSAxNSwNCiAgaW5pdENvbXBsZXRlID0gSlMoDQogICAgImZ1bmN0aW9uKHNldHRpbmdzLCBqc29uKSB7IiwNCiAgICAiJCgnYm9keScpLmNzcyh7J2ZvbnQtZmFtaWx5JzogJ0NhbGlicmknfSk7IiwNCiAgICAifSINCikpKSAlPiUgDQogIGZvcm1hdFJvdW5kKGMoIlByb21lZGlvX0tpbGxzIiwiUHJvbWVkaW9fTXVlcnRlcyIsIlByb21lZGlvX0FzaXN0ZW5jaWFzIiwiS0RSIiksMikNCg0KDQoNCg0KYGBgDQoNCkV2b2x1dGl2b3MgZ2VuZXJhbGVzDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQoNClRhYmxhRyA8LSBCYXNlICU+JQ0KICBmaWx0ZXIoRXF1aXBvID09ICJwaWVsZGVwb3IiKSAlPiUNCiAgZmlsdGVyKEp1Z2Fkb3IgPT0gIkxlbyIpICU+JQ0KICBzZWxlY3QoRmVjaGEsSyxELEEsS0RSKSAlPiUNCiAgZ3JvdXBfYnkoRmVjaGEpICU+JQ0KICBzdW1tYXJpc2UoS2lsbHMgPSByb3VuZChtZWFuKEspLDIpLA0KICAgICAgICAgICAgRGVhdGhzID0gcm91bmQobWVhbihEKSwyKSwNCiAgICAgICAgICAgIEtEUnAgPSByb3VuZChtZWFuKEtEUiksMikpICU+JQ0KICBtdXRhdGUoS2lsbHNBY3VtID0gcm91bmQoY3VtbWVhbihLaWxscyksMiksDQogICAgICAgICBEZWF0aHNBY3VtID0gcm91bmQoY3VtbWVhbihEZWF0aHMpLDIpLA0KICAgICAgICAgS0RSQWN1bSA9IHJvdW5kKGN1bW1lYW4oS0RScCksMikpDQoNCiNHcsOhZmljbyAxDQoNCnAzIDwtIHBsb3RfbHkoVGFibGFHLHggPSB+RmVjaGEpJT4lDQogIGFkZF90cmFjZSh5ID0gfktpbGxzLG1vZGUgPSAibGluZXMrbWFya2VycyIsIG5hbWUgPSAia2lsbHMiLCBsaW5lID0gbGlzdChjb2xvciA9ICIjMjcyNjQzIiksbWFya2VyID0gbGlzdChjb2xvciA9ICIjMjcyNjQzIikpICU+JQ0KICBhZGRfdHJhY2UoeSA9IH5LaWxsc0FjdW0sbW9kZSA9ICJsaW5lcyttYXJrZXJzIiwgbmFtZSA9ICJraWxsc0FjdW0iLCBsaW5lID0gbGlzdChjb2xvciA9ICIjMmM2OThkIiksbWFya2VyID0gbGlzdChjb2xvciA9ICIjMmM2OThkIikpDQoNCg0KI0dyw6FmaWNvIDINCg0KcDQgPC0gcGxvdF9seShUYWJsYUcseCA9IH5GZWNoYSklPiUNCiAgYWRkX3RyYWNlKHkgPSB+RGVhdGhzLG1vZGUgPSAibGluZXMrbWFya2VycyIsIG5hbWUgPSAiRGVhdGhzIiwgbGluZSA9IGxpc3QoY29sb3IgPSAiI2Y1NTk1MSIpLG1hcmtlciA9IGxpc3QoY29sb3IgPSAiI2Y1NTk1MSIpKSAlPiUNCiAgYWRkX3RyYWNlKHkgPSB+RGVhdGhzQWN1bSxtb2RlID0gImxpbmVzK21hcmtlcnMiLCBuYW1lID0gIkRlYXRoc0FjdW0iLCBsaW5lID0gbGlzdChjb2xvciA9ICIjODAwZTBkIiksbWFya2VyID0gbGlzdChjb2xvciA9ICIjODAwZTBkIikpDQoNCiNHcsOhZmljbyAzDQoNCnA1IDwtIHBsb3RfbHkoVGFibGFHLHggPSB+RmVjaGEpJT4lDQogIGFkZF90cmFjZSh5ID0gfktEUnAsbW9kZSA9ICJsaW5lcyttYXJrZXJzIiwgbmFtZSA9ICJLRFIiLCBsaW5lID0gbGlzdChjb2xvciA9ICIjOTVhZGJlIiksbWFya2VyID0gbGlzdChjb2xvciA9ICIjOTVhZGJlIikpICU+JQ0KICBhZGRfdHJhY2UoeSA9IH5LRFJBY3VtLG1vZGUgPSAibGluZXMrbWFya2VycyIsIG5hbWUgPSAiS0RSQWN1bSIsIGxpbmUgPSBsaXN0KGNvbG9yID0gIiM1NzRmN2QiKSxtYXJrZXIgPSBsaXN0KGNvbG9yID0gIiM1NzRmN2QiKSkNCg0KDQoNCg0KZmlnIDwtIHN1YnBsb3QocDMscDQscDUsbnJvd3MgPSAzLCBzaGFyZVggPSBUUlVFLCBtYXJnaW4gPSAwLjA1KSAlPiUNCiAgbGF5b3V0KGFubm90YXRpb25zID0gbGlzdCgNCiAgICBsaXN0KHggPSAwLjUgLCB5ID0gMS4wNSAsdGV4dCA9ICJLaWxscyIsIHNob3dhcnJvdyA9IEYseHJlZj0ncGFwZXInLCB5cmVmPSdwYXBlcicpLA0KICAgIGxpc3QoeCA9IDAuNSAsIHkgPSAwLjcsdGV4dCA9ICJEZWF0aHMiLHNob3dhcnJvdyA9IEYseHJlZj0ncGFwZXInLCB5cmVmPSdwYXBlcicpLA0KICAgIGxpc3QoeCA9IDAuNSAsIHkgPSAwLjMgLCB5ID0gMjUsdGV4dCA9ICJLRFIiLHNob3dhcnJvdyA9IEYseHJlZj0ncGFwZXInLCB5cmVmPSdwYXBlcicpDQogICkpDQoNCmZpZw0KDQoNCg0KDQpgYGANCg0KDQpSZW5kaW1pZW50byBzZWfDum4gbWFwYQ0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KVGFibGFfMmYgPC0gQmFzZUZlciAlPiUgDQogIHNlbGVjdChFc2NlbmFyaW8sUmVzdWx0YWRvKSAlPiUNCiAgZmlsdGVyKCFpcy5uYShFc2NlbmFyaW8pKSAlPiUNCiAgZ3JvdXBfYnkoRXNjZW5hcmlvLFJlc3VsdGFkbykgJT4lIA0KICBzdW1tYXJpc2UoVG90YWwgPSBuKCkpICU+JSANCiAgbXV0YXRlKFBvcmNlbnRhamUgPSByb3VuZChUb3RhbC9zdW0oVG90YWwpKjEwMCwyKSkgJT4lIA0KICBtdXRhdGUoRXRpcXVldGEgPSBwYXN0ZTAoVG90YWwsICIgKCAlICIsIFBvcmNlbnRhamUsICIpIikpIA0KDQoNClRhYmxhYXV4IDwtIFRhYmxhXzJmICU+JSANCiAgc2VsZWN0KEVzY2VuYXJpbykgJT4lIA0KICBmaWx0ZXIoIWR1cGxpY2F0ZWQoRXNjZW5hcmlvKSkNCg0KZmlsYXMgPC0gbnJvdyhUYWJsYWF1eCkNCg0KZ2dwbG90KFRhYmxhXzJmLCBhZXMoeCA9ICIiICwgeSA9IFRvdGFsLCBmaWxsID0gUmVzdWx0YWRvICkpKw0KICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5Iiwgd2lkdGggPSAzKSsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IEV0aXF1ZXRhKSwgcG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IDAuNSksIHNpemUgPTMuNSwgY29sb3IgPSBibGFuY28pKw0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKG5lZ3JvLCBncmlzMixncmlzMSkpKw0KICAgIGxhYnModGl0bGUgPSBwYXN0ZTAoIkRhdG9zIFZhbG9yYW50IFBEIEp1c3RvWU5lY2VzYXJpbyAiLGZlY2hhaW5pLCAiIC0gIiwgZmVjaGFmaW4pLA0KICAgICAgIHN1YnRpdGxlID0gIlJlc3VtZW4gUmVzdWx0YWRvIHNlZ8O6biBtYXBhIiwNCiAgICAgICBjYXB0aW9uID0gIkZ1ZW50ZTogRWxhYm9yYWNpw7NuIHByb3BpYSIsDQogICAgICAgeCA9ICIiLA0KICAgICAgIHkgPSAiIikrDQogIHRoZW1lX21pbmltYWwoKSsNCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgdmp1c3QgPSAwLjUpLA0KICAgICAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KCBoanVzdCA9IDAuNSwgdmp1c3QgPSAwLjUpLA0KICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwNCiAgICAgICAgbGVnZW5kLnRpdGxlID0gZWxlbWVudF9ibGFuaygpKSsNCiAgZ3VpZGVzKGZpbGwgPSBndWlkZV9sZWdlbmQocmV2ZXJzZSA9IFRSVUUpKSsNCiAgY29vcmRfZmxpcCgpKw0KICBmYWNldF93cmFwKH5Fc2NlbmFyaW8sIG5yb3cgPSBmaWxhcykNCmBgYA0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KDQoNCnBmMSA8LSBnZ3Bsb3QoQmFzZUZlciwgYWVzKHggPSBGZWNoYSwgeSA9IEssIGNvbG9yID0gUGVyc29uYWplLHRleHQgPSBwYXN0ZTAoIlJlc3VsdGFkbzogIixSZXN1bHRhZG8sIlxuTWFwYTogIixFc2NlbmFyaW8sIlxuS0RSIDogIixLRFIpKSkrDQogICAgICAgICAgICAgICAgICAgIGdlb21fcG9pbnQoKSsNCiAgbGFicyh0aXRsZSA9IHBhc3RlMCgiRGF0b3MgVmFsb3JhbnQgS2lsbHMgUEQgSnVzdG9ZTmVjZXNhcmlvICIsZmVjaGFpbmksICIgLSAiLCBmZWNoYWZpbiksDQogICAgICAgc3VidGl0bGUgPSAiRHVyYWNpw7NuIGRlIHBhcnRpZGFzIHNlZ8O6biByZXN1bHRhZG8iLA0KICAgICAgIGNhcHRpb24gPSAiRnVlbnRlOiBFbGFib3JhY2nDs24gcHJvcGlhIiwNCiAgICAgICB4ID0gIiIsDQogICAgICAgeSA9ICJLaWxscyIpKw0KICB0aGVtZV9taW5pbWFsKCkrDQogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoIGhqdXN0ID0gMC41ICwgdmp1c3QgPSAwLjUpLA0KICAgICAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KCBoanVzdCA9IDAuNSAsIHZqdXN0ID0gMC41KSkNCg0KZmlnNCA8LSBnZ3Bsb3RseShwZjEpDQoNCmZpZzQNCiAgICAgICAgICAgICAgICAgIA0KDQoNCg0KYGBgDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQoNCiNHUkFGSUNPIENPTiBTRUxFQ1RPUiAtLS0tLS0tLS0tLS0tLS0tLS0tIFJFVklTQVIhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhDQojIGZpZyA8LSBwbG90X2x5KGRhdGEgPSBCYXNlRmVyLCBjb2xvciA9IH5QZXJzb25hamUpICU+JQ0KIyAgIGFkZF90cmFjZSh4PX5GZWNoYSwgeT1+SywNCiMgICAgICAgICAgICAgdHJhbnNmb3JtcyA9IGxpc3QoDQojICAgICAgICAgICAgICAgbGlzdCgNCiMgICAgICAgICAgICAgICAgIHR5cGUgPSAiZmlsdGVyIiwNCiMgICAgICAgICAgICAgICAgIHRhcmdldCA9IH5Fc2NlbmFyaW8sDQojICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSAnPScsDQojICAgICAgICAgICAgICAgICB2YWx1ZSA9IHVuaXF1ZShCYXNlRmVyJEVzY2VuYXJpbykNCiMgICAgICAgICAgICAgICApDQojICAgICAgICAgICAgICkNCiMgICApICU+JQ0KIyAgIGxheW91dCgNCiMgICAgIHVwZGF0ZW1lbnVzID0gbGlzdCgNCiMgICAgICAgbGlzdCgNCiMgICAgICAgICB0eXBlID0gJ2Ryb3Bkb3duJywNCiMgICAgICAgICBhY3RpdmUgPSAtMSwNCiMgICAgICAgICBidXR0b25zID0gbGlzdCgNCiMgICAgICAgICAgIGxpc3QobWV0aG9kID0gInJlc3R5bGUiLA0KIyAgICAgICAgICAgICAgICBhcmdzID0gbGlzdCgidHJhbnNmb3Jtc1swXS52YWx1ZSIsIHVuaXF1ZShCYXNlRmVyJEVzY2VuYXJpbylbMV0pLA0KIyAgICAgICAgICAgICAgICBsYWJlbCA9ICJCaW5kIiksDQojICAgICAgICAgICBsaXN0KG1ldGhvZCA9ICJyZXN0eWxlIiwNCiMgICAgICAgICAgICAgICAgYXJncyA9IGxpc3QoInRyYW5zZm9ybXNbMF0udmFsdWUiLCB1bmlxdWUoQmFzZUZlciRFc2NlbmFyaW8pWzJdKSwNCiMgICAgICAgICAgICAgICAgbGFiZWwgPSAiQXNjZW50IiksDQojICAgICAgICAgICBsaXN0KG1ldGhvZCA9ICJyZXN0eWxlIiwNCiMgICAgICAgICAgICAgICAgYXJncyA9IGxpc3QoInRyYW5zZm9ybXNbMF0udmFsdWUiLCB1bmlxdWUoQmFzZUZlciRFc2NlbmFyaW8pWzNdKSwNCiMgICAgICAgICAgICAgICAgbGFiZWwgPSAiSGF2ZW4iKSwNCiMgICAgICAgICAgIGxpc3QobWV0aG9kID0gInJlc3R5bGUiLA0KIyAgICAgICAgICAgICAgICBhcmdzID0gbGlzdCgidHJhbnNmb3Jtc1swXS52YWx1ZSIsIHVuaXF1ZShCYXNlRmVyJEVzY2VuYXJpbylbNF0pLA0KIyAgICAgICAgICAgICAgICBsYWJlbCA9ICJTcGxpdCIpLA0KIyAgICAgICAgICAgbGlzdChtZXRob2QgPSAicmVzdHlsZSIsDQojICAgICAgICAgICAgICAgIGFyZ3MgPSBsaXN0KCJ0cmFuc2Zvcm1zWzBdLnZhbHVlIiwgdW5pcXVlKEJhc2VGZXIkRXNjZW5hcmlvKVs1XSksDQojICAgICAgICAgICAgICAgIGxhYmVsID0gIkJyZWV6ZSIpLA0KIyAgICAgICAgICAgbGlzdChtZXRob2QgPSAicmVzdHlsZSIsDQojICAgICAgICAgICAgICAgIGFyZ3MgPSBsaXN0KCJ0cmFuc2Zvcm1zWzBdLnZhbHVlIiwgdW5pcXVlKEJhc2VGZXIkRXNjZW5hcmlvKVs2XSksDQojICAgICAgICAgICAgICAgIGxhYmVsID0gIkljZWJveCIpDQojICAgICAgICAgKQ0KIyAgICAgICApDQojICAgICApDQojICAgKQ0KIyBmaWcNCg0KDQoNCg0KYGBgDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQoNCg0KcGYgPC0gZ2dwbG90KEJhc2VGZXIsIGFlcyh4ID0gRmVjaGEsIHkgPSBLLCBjb2xvciA9IFBlcnNvbmFqZSkpKw0KICAgICAgICAgICAgICAgICAgICBnZW9tX3BvaW50KCkrDQogIGxhYnModGl0bGUgPSBwYXN0ZTAoIktpbGxzIFBEIFBEIEp1c3RvWU5lY2VzYXJpbyBzZWfDum4gbWFwYSAiLGZlY2hhaW5pLCAiIC0gIiwgZmVjaGFmaW4pLA0KICAgICAgIHN1YnRpdGxlID0gIkR1cmFjacOzbiBkZSBwYXJ0aWRhcyBzZWfDum4gcmVzdWx0YWRvIiwNCiAgICAgICBjYXB0aW9uID0gIkZ1ZW50ZTogRWxhYm9yYWNpw7NuIHByb3BpYSIsDQogICAgICAgeCA9ICIiLA0KICAgICAgIHkgPSAiS2lsbHMiKSsNCiAgdGhlbWVfbWluaW1hbCgpKw0KICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KCBoanVzdCA9IDAuNSAsIHZqdXN0ID0gMC41KSwNCiAgICAgICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dCggaGp1c3QgPSAwLjUgLCB2anVzdCA9IDAuNSkpKw0KICBmYWNldF93cmFwKH5Fc2NlbmFyaW8sIG5jb2wgPSAyKQ0KDQpmaWczIDwtIGdncGxvdGx5KHBmKQ0KDQpmaWczDQogICAgICAgICAgICAgICAgICANCg0KDQoNCmBgYA0KDQpHcsOhZmljbyBQb2xhcg0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KDQpsaXN0YWZlciA8LSBjKG1lYW4oQmFzZUZlciRLKSxtZWFuKEJhc2VGZXIkRCksbWVhbihCYXNlRmVyJEEpLG1lYW4oQmFzZUZlciRLRFIpKQ0KDQpmaWc1IDwtIHBsb3RfbHkoDQogIHR5cGUgPSAic2NhdHRlcnBvbGFyIiwNCiAgciA9IGxpc3RhZmVyLA0KICB0aGV0YSA9IGMoIktpbGxzIiwiTXVlcnRlcyIsIkFzaXN0ZW5jaWEiLCJLRFIiKSwNCiAgZmlsbCA9ICJ0b3NlbGYiDQopDQpmaWc1IDwtIGZpZzUgJT4lDQogIGxheW91dCgNCiAgICBwb2xhciA9IGxpc3QoDQogICAgICByYWRpYWxheGlzID0gbGlzdCgNCiAgICAgICAgdmlzaWJsZSA9IFQsDQogICAgICAgIHJhbmdlID0gYygwLDMwKQ0KICAgICAgKQ0KICAgICksDQogICAgc2hvd2xlZ2VuZCA9IEYNCiAgKQ0KDQoNCmZpZzUNCmBgYA0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KDQpUYWJsYV80IDwtIEJhc2VGZXIgJT4lDQogIGZpbHRlcihFcXVpcG8gPT0gInBpZWxkZXBvciIpICU+JSANCiAgc2VsZWN0KEZlY2hhLEVzY2VuYXJpbyxLRFIpICU+JQ0KICBncm91cF9ieShGZWNoYSxFc2NlbmFyaW8pICU+JSANCiAgc3VtbWFyaXNlKEtEUiA9IG1lYW4oS0RSKSkNCg0KDQpmaWcxIDwtIGdncGxvdChUYWJsYV80LCBhZXMoeCA9IEZlY2hhLCB5ID0gS0RSKSkrICNzZWxlY2Npb25hbW9zIHZhcmlhYmxlcyBhIGdyYWZpY2FyIHkgYSBjb2xvcmVhcg0KICBnZW9tX2xpbmUoKSsgDQogIGdlb21fcG9pbnQoKSsNCiAgIyBnZW9tX3Ntb290aChtZXRob2QgPSAnbG9lc3MnLA0KICAjICAgICAgICAgICAgIGZvcm11bGEgPSAneSB+IHgnKSsNCiAgbGFicyh0aXRsZSA9cGFzdGUwKCJLRFIgU2Vnw7puIGZlY2hhIFBEICIsZmVjaGFpbmksICIgLSAiLCBmZWNoYWZpbiksDQogICAgICAgc3VidGl0bGUgPSAiS0RSIFByb21lZGlvIHNlZ8O6biBmZWNoYSIsDQogICAgICAgY2FwdGlvbiA9ICJGdWVudGU6IEVsYWJvcmFjacOzbiBwcm9waWEiLA0KICAgICAgIHggPSAiRmVjaGEiLA0KICAgICAgIHkgPSAiS0RSIikrDQogICNzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiIzFhYzBjNiIsICIjZTc0NjQ1IiwiI2ZhY2Q2MCIpKSsgI2NvbG9yZWFtb3MgbGFzIGxpbmVhcw0KICB0aGVtZV9taW5pbWFsKCkrDQogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoIGhqdXN0ID0gMC41ICwgdmp1c3QgPSAwLjUpLCANCiAgICAgICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dCggaGp1c3QgPSAwLjUgLCB2anVzdCA9IDAuNSkpKw0KICBmYWNldF93cmFwKH5Fc2NlbmFyaW8pDQoNCmZpZzEgPC0gZ2dwbG90bHkoZmlnMSkNCiANCmZpZzENCg0KYGBgDQoNCiMjIyBCZXJub25laXRvcg0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KDQpCYXNlRmVyIDwtIEJhc2UgJT4lIA0KICBmaWx0ZXIoSnVnYWRvciA9PSAiQmVybm8iKQ0KDQpCZXJQYXJ0aWRhcyA8LSBucm93KEJhc2VGZXIpDQoNCnBvcmNCZXIgPC0gcGFzdGUwKHJvdW5kKEJlclBhcnRpZGFzL2NhbnRwYXJ0aWRhcyoxMDAsMiksIiAlIikNCg0KRmVyUGVyc29uYWplcyA8LSAgQmFzZUZlciAlPiUNCiAgc2VsZWN0KFBlcnNvbmFqZSxLLEQsQSxLRFIpICU+JQ0KICBncm91cF9ieShQZXJzb25hamUpICU+JSANCiAgc3VtbWFyaXNlKGFjcm9zcyhldmVyeXRoaW5nKCksIGxpc3QobWVhbikpKQ0KDQpGZXJHcmFsIDwtIEJhc2VGZXIgJT4lDQogIHNlbGVjdChLLEQsQSxLRFIpICU+JQ0KICBzdW1tYXJpc2UoYWNyb3NzKGV2ZXJ5dGhpbmcoKSwgbGlzdChtZWFuKSkpDQoNCkZlclBlcnNvbmFqZXMyIDwtIEJhc2VGZXIgJT4lDQogIHNlbGVjdChQZXJzb25hamUsSyxELEEsS0RSKSAlPiUNCiAgZ3JvdXBfYnkoUGVyc29uYWplKSAlPiUNCiAgc3VtbWFyaXNlKFRvdGFsID0gbigpKSAlPiUgDQogIG11dGF0ZShQb3JjZW50YWplID0gcm91bmQoVG90YWwvc3VtKFRvdGFsKSoxMDAsMikpICU+JSANCiAgbXV0YXRlKEV0aXF1ZXRhID0gcGFzdGUwKFRvdGFsLCAiICggJSAiLCBQb3JjZW50YWplLCAiKSIpKQ0KDQoNCkZlclBlcnNvbmFqZXNGaW5hbCA8LSBsZWZ0X2pvaW4oRmVyUGVyc29uYWplcyxGZXJQZXJzb25hamVzMikgJT4lIA0KICBzZWxlY3QoUGVyc29uYWplLEV0aXF1ZXRhLEtfMSxEXzEsQV8xLEtEUl8xKSAlPiUgDQogIHJlbmFtZShUb3RhbCA9IEV0aXF1ZXRhLA0KICAgICAgICAgUHJvbWVkaW9fS2lsbHMgPSBLXzEsDQogICAgICAgICBQcm9tZWRpb19NdWVydGVzID0gRF8xLA0KICAgICAgICAgUHJvbWVkaW9fQXNpc3RlbmNpYXMgPUFfMSwNCiAgICAgICAgIEtEUiA9IEtEUl8xKSAlPiUgDQogIGFycmFuZ2UoZGVzYyhLRFIpKQ0KDQojI1RhYmxhIHBlcnNvbmFqZSBlc2NlbmFyaW8NCg0KDQpGZXJQZXJNYXBhIDwtICBCYXNlRmVyICU+JQ0KICBzZWxlY3QoRXNjZW5hcmlvLFJlc3VsdGFkbyxQZXJzb25hamUsSyxELEEsS0RSKSAlPiUNCiAgZ3JvdXBfYnkoRXNjZW5hcmlvLFJlc3VsdGFkbyxQZXJzb25hamUpICU+JSANCiAgc3VtbWFyaXNlKGFjcm9zcyhldmVyeXRoaW5nKCksIGxpc3QobWVhbikpKQ0KDQpGZXJQZXJNYXBhMiA8LSBCYXNlRmVyICU+JQ0KICBzZWxlY3QoRXNjZW5hcmlvLFJlc3VsdGFkbyxQZXJzb25hamUsSyxELEEsS0RSKSAlPiUNCiAgZ3JvdXBfYnkoRXNjZW5hcmlvLFJlc3VsdGFkbyxQZXJzb25hamUpICU+JQ0KICBzdW1tYXJpc2UoVG90YWwgPSBuKCkpICU+JSANCiAgbXV0YXRlKFBvcmNlbnRhamUgPSByb3VuZChUb3RhbC9zdW0oVG90YWwpKjEwMCwyKSkgJT4lIA0KICBtdXRhdGUoRXRpcXVldGEgPSBwYXN0ZTAoVG90YWwsICIgKCAlICIsIFBvcmNlbnRhamUsICIpIikpDQoNCg0KRmVyUGVyTWFwYUZpbmFsIDwtIGxlZnRfam9pbihGZXJQZXJNYXBhLEZlclBlck1hcGEyKSAlPiUgDQogIHNlbGVjdChSZXN1bHRhZG8sUGVyc29uYWplLEV0aXF1ZXRhLEtfMSxEXzEsQV8xLEtEUl8xKSAlPiUgDQogIHJlbmFtZShUb3RhbCA9IEV0aXF1ZXRhLA0KICAgICAgICAgUHJvbWVkaW9fS2lsbHMgPSBLXzEsDQogICAgICAgICBQcm9tZWRpb19NdWVydGVzID0gRF8xLA0KICAgICAgICAgUHJvbWVkaW9fQXNpc3RlbmNpYXMgPUFfMSwNCiAgICAgICAgIEtEUiA9IEtEUl8xKSAlPiUgDQogIGFycmFuZ2UoKEVzY2VuYXJpbykpDQoNCg0KDQoNCg0KYGBgDQoNCkVsIGp1Z2Fkb3IgUEQgQmVybm9uZWl0b3IganVnw7MgdW4gdG90YWwgZGUgYHIgQmVyUGFydGlkYXNgIHBhcnRpZGFzIHF1ZSByZXByZXNlbnRhbiBgciBwb3JjQmVyYCBzb2JyZSBlbCB0b3RhbCBkZSBwYXJ0aWRhcy4gQSBjb250aW51YWNpw7NuIHNlIG11ZXN0cmFuIHN1cyBjaWZyYXMgZ2VuZXJhbGVzIHkgbGFzIGNpZnJhcyBkZSBsb3MgcGVyc29uYWplcyBxdWUgZWxpZ2nDsw0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KI0hBQ0VSIFRBQkxBIENPTiBLQUJMRQ0KDQprYWJsZShGZXJHcmFsLGFsaWduID0gImwiLGRpZ2l0cyA9IDMsY29sLm5hbWVzID0gYygiUHJvbWVkaW8gS2lsbHMiLCJQcm9tZWRpbyBNdWVydGVzIiwiUHJvbWVkaW8gQXNpc3RlbmNpYXMiLCJLRFIiKSklPiUgDQogICAgICAgIGNvbHVtbl9zcGVjKDEsIGJvbGQgPSBUUlVFLCBjb2xvciA9IG5lZ3JvKSAlPiUNCiAgcm93X3NwZWMoMCxiYWNrZ3JvdW5kID0gbmVncm8sIGNvbG9yID0gIndoaXRlIikgJT4lIA0KICAgIGFkZF9oZWFkZXJfYWJvdmUoYygiICIgPSAxLA0KICAgICAgICAgICAgICAgICAgICAgIkNpZnJhcyI9IDIsDQogICAgICAgICAgICAgICAgICAgICAiICIgPTEpKSAlPiUgDQogIGthYmxlX21pbmltYWwoKQ0KYGBgDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojSEFDRVIgVEFCTEEgQ09OIEtBQkxFDQoNCmthYmxlKEZlclBlcnNvbmFqZXNGaW5hbCxhbGlnbiA9ICJsIixkaWdpdHMgPSAzLGNvbC5uYW1lcyA9IGMoIlBlcnNvbmFqZSIsIlRvdGFsIiwiUHJvbWVkaW8gS2lsbHMiLCJQcm9tZWRpbyBNdWVydGVzIiwiUHJvbWVkaW8gQXNpc3RlbmNpYXMiLCJLRFIiKSklPiUgDQogICAgICAgIGNvbHVtbl9zcGVjKDEsIGJvbGQgPSBUUlVFLCBjb2xvciA9IG5lZ3JvKSAlPiUNCiAgcm93X3NwZWMoMCxiYWNrZ3JvdW5kID0gbmVncm8sIGNvbG9yID0gIndoaXRlIikgJT4lIA0KICAgIGFkZF9oZWFkZXJfYWJvdmUoYygiICIgPSAxLA0KICAgICAgICAgICAgICAgICAgICAgIlBlcnNvbmFqZXMiPSA0LA0KICAgICAgICAgICAgICAgICAgICAgIiAiID0xKSkgJT4lIA0KICBrYWJsZV9taW5pbWFsKCkNCmBgYA0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KI0hBQ0VSIFRBQkxBIENPTiBLQUJMRQ0KDQojIGthYmxlKEZlclBlck1hcGFGaW5hbCxhbGlnbiA9ICJsIixkaWdpdHMgPSAzLGNvbC5uYW1lcyA9IGMoIk1hcGEiLCJQZXJzb25hamUiLCJUb3RhbCIsIlByb21lZGlvIEtpbGxzIiwiUHJvbWVkaW8gTXVlcnRlcyIsIlByb21lZGlvIEFzaXN0ZW5jaWFzIiwiS0RSIikpJT4lIA0KIyAgICAgICAgIGNvbHVtbl9zcGVjKDEsIGJvbGQgPSBUUlVFLCBjb2xvciA9IG5lZ3JvKSAlPiUNCiMgICByb3dfc3BlYygwLGJhY2tncm91bmQgPSBuZWdybywgY29sb3IgPSAid2hpdGUiKSAlPiUgDQojICAgICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiID0gMSwNCiMgICAgICAgICAgICAgICAgICAgICAgIlJlbmRpbWllbnRvIHNlZ8O6biBtYXBhIj0gNSwNCiMgICAgICAgICAgICAgICAgICAgICAgIiAiID0xKSkgJT4lIA0KIyAgIGthYmxlX3BhcGVyKCJob3ZlciIsaHRtbF9mb250ID0gIkNhbGlicmkiKQ0KYGBgDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojSEFDRVIgVEFCTEEgQ09OIEtBQkxFDQoNCmRhdGF0YWJsZShGZXJQZXJNYXBhRmluYWwsZmlsdGVyID0gJ3RvcCcsDQogICAgICAgICAgb3B0aW9ucyA9IGxpc3QoDQogIHNlYXJjaGluZyA9IFRSVUUsDQogIHBhZ2VMZW5ndGggPSAxNSwNCiAgaW5pdENvbXBsZXRlID0gSlMoDQogICAgImZ1bmN0aW9uKHNldHRpbmdzLCBqc29uKSB7IiwNCiAgICAiJCgnYm9keScpLmNzcyh7J2ZvbnQtZmFtaWx5JzogJ0NhbGlicmknfSk7IiwNCiAgICAifSINCikpKSAlPiUgDQogIGZvcm1hdFJvdW5kKGMoIlByb21lZGlvX0tpbGxzIiwiUHJvbWVkaW9fTXVlcnRlcyIsIlByb21lZGlvX0FzaXN0ZW5jaWFzIiwiS0RSIiksMikNCg0KDQoNCg0KYGBgDQoNCkV2b2x1dGl2b3MgZ2VuZXJhbGVzDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQoNClRhYmxhRyA8LSBCYXNlICU+JQ0KICBmaWx0ZXIoRXF1aXBvID09ICJwaWVsZGVwb3IiKSAlPiUNCiAgZmlsdGVyKEp1Z2Fkb3IgPT0gIkJlcm5vIikgJT4lDQogIHNlbGVjdChGZWNoYSxLLEQsQSxLRFIpICU+JQ0KICBncm91cF9ieShGZWNoYSkgJT4lDQogIHN1bW1hcmlzZShLaWxscyA9IHJvdW5kKG1lYW4oSyksMiksDQogICAgICAgICAgICBEZWF0aHMgPSByb3VuZChtZWFuKEQpLDIpLA0KICAgICAgICAgICAgS0RScCA9IHJvdW5kKG1lYW4oS0RSKSwyKSkgJT4lDQogIG11dGF0ZShLaWxsc0FjdW0gPSByb3VuZChjdW1tZWFuKEtpbGxzKSwyKSwNCiAgICAgICAgIERlYXRoc0FjdW0gPSByb3VuZChjdW1tZWFuKERlYXRocyksMiksDQogICAgICAgICBLRFJBY3VtID0gcm91bmQoY3VtbWVhbihLRFJwKSwyKSkNCg0KI0dyw6FmaWNvIDENCg0KcDMgPC0gcGxvdF9seShUYWJsYUcseCA9IH5GZWNoYSklPiUNCiAgYWRkX3RyYWNlKHkgPSB+S2lsbHMsbW9kZSA9ICJsaW5lcyttYXJrZXJzIiwgbmFtZSA9ICJraWxscyIsIGxpbmUgPSBsaXN0KGNvbG9yID0gIiMyNzI2NDMiKSxtYXJrZXIgPSBsaXN0KGNvbG9yID0gIiMyNzI2NDMiKSkgJT4lDQogIGFkZF90cmFjZSh5ID0gfktpbGxzQWN1bSxtb2RlID0gImxpbmVzK21hcmtlcnMiLCBuYW1lID0gImtpbGxzQWN1bSIsIGxpbmUgPSBsaXN0KGNvbG9yID0gIiMyYzY5OGQiKSxtYXJrZXIgPSBsaXN0KGNvbG9yID0gIiMyYzY5OGQiKSkNCg0KDQojR3LDoWZpY28gMg0KDQpwNCA8LSBwbG90X2x5KFRhYmxhRyx4ID0gfkZlY2hhKSU+JQ0KICBhZGRfdHJhY2UoeSA9IH5EZWF0aHMsbW9kZSA9ICJsaW5lcyttYXJrZXJzIiwgbmFtZSA9ICJEZWF0aHMiLCBsaW5lID0gbGlzdChjb2xvciA9ICIjZjU1OTUxIiksbWFya2VyID0gbGlzdChjb2xvciA9ICIjZjU1OTUxIikpICU+JQ0KICBhZGRfdHJhY2UoeSA9IH5EZWF0aHNBY3VtLG1vZGUgPSAibGluZXMrbWFya2VycyIsIG5hbWUgPSAiRGVhdGhzQWN1bSIsIGxpbmUgPSBsaXN0KGNvbG9yID0gIiM4MDBlMGQiKSxtYXJrZXIgPSBsaXN0KGNvbG9yID0gIiM4MDBlMGQiKSkNCg0KI0dyw6FmaWNvIDMNCg0KcDUgPC0gcGxvdF9seShUYWJsYUcseCA9IH5GZWNoYSklPiUNCiAgYWRkX3RyYWNlKHkgPSB+S0RScCxtb2RlID0gImxpbmVzK21hcmtlcnMiLCBuYW1lID0gIktEUiIsIGxpbmUgPSBsaXN0KGNvbG9yID0gIiM5NWFkYmUiKSxtYXJrZXIgPSBsaXN0KGNvbG9yID0gIiM5NWFkYmUiKSkgJT4lDQogIGFkZF90cmFjZSh5ID0gfktEUkFjdW0sbW9kZSA9ICJsaW5lcyttYXJrZXJzIiwgbmFtZSA9ICJLRFJBY3VtIiwgbGluZSA9IGxpc3QoY29sb3IgPSAiIzU3NGY3ZCIpLG1hcmtlciA9IGxpc3QoY29sb3IgPSAiIzU3NGY3ZCIpKQ0KDQoNCg0KDQpmaWcgPC0gc3VicGxvdChwMyxwNCxwNSxucm93cyA9IDMsIHNoYXJlWCA9IFRSVUUsIG1hcmdpbiA9IDAuMDUpICU+JQ0KICBsYXlvdXQoYW5ub3RhdGlvbnMgPSBsaXN0KA0KICAgIGxpc3QoeCA9IDAuNSAsIHkgPSAxLjA1ICx0ZXh0ID0gIktpbGxzIiwgc2hvd2Fycm93ID0gRix4cmVmPSdwYXBlcicsIHlyZWY9J3BhcGVyJyksDQogICAgbGlzdCh4ID0gMC41ICwgeSA9IDAuNyx0ZXh0ID0gIkRlYXRocyIsc2hvd2Fycm93ID0gRix4cmVmPSdwYXBlcicsIHlyZWY9J3BhcGVyJyksDQogICAgbGlzdCh4ID0gMC41ICwgeSA9IDAuMyAsIHkgPSAyNSx0ZXh0ID0gIktEUiIsc2hvd2Fycm93ID0gRix4cmVmPSdwYXBlcicsIHlyZWY9J3BhcGVyJykNCiAgKSkNCg0KZmlnDQoNCg0KDQoNCmBgYA0KUmVuZGltaWVudG8gc2Vnw7puIG1hcGENCg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NClRhYmxhXzJmIDwtIEJhc2VGZXIgJT4lIA0KICBzZWxlY3QoRXNjZW5hcmlvLFJlc3VsdGFkbykgJT4lDQogIGZpbHRlcighaXMubmEoRXNjZW5hcmlvKSkgJT4lDQogIGdyb3VwX2J5KEVzY2VuYXJpbyxSZXN1bHRhZG8pICU+JSANCiAgc3VtbWFyaXNlKFRvdGFsID0gbigpKSAlPiUgDQogIG11dGF0ZShQb3JjZW50YWplID0gcm91bmQoVG90YWwvc3VtKFRvdGFsKSoxMDAsMikpICU+JSANCiAgbXV0YXRlKEV0aXF1ZXRhID0gcGFzdGUwKFRvdGFsLCAiICggJSAiLCBQb3JjZW50YWplLCAiKSIpKSANCg0KDQpUYWJsYWF1eCA8LSBUYWJsYV8yZiAlPiUgDQogIHNlbGVjdChFc2NlbmFyaW8pICU+JSANCiAgZmlsdGVyKCFkdXBsaWNhdGVkKEVzY2VuYXJpbykpDQoNCmZpbGFzIDwtIG5yb3coVGFibGFhdXgpDQoNCmdncGxvdChUYWJsYV8yZiwgYWVzKHggPSAiIiAsIHkgPSBUb3RhbCwgZmlsbCA9IFJlc3VsdGFkbyApKSsNCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHdpZHRoID0gMykrDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBFdGlxdWV0YSksIHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2sodmp1c3QgPSAwLjUpLCBzaXplID0zLjUsIGNvbG9yID0gYmxhbmNvKSsNCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYyhuZWdybywgZ3JpczIsZ3JpczEpKSsNCiAgICBsYWJzKHRpdGxlID0gcGFzdGUwKCJEYXRvcyBWYWxvcmFudCBQRCBCZXJub25laXRvciAiLGZlY2hhaW5pLCAiIC0gIiwgZmVjaGFmaW4pLA0KICAgICAgIHN1YnRpdGxlID0gIlJlc3VtZW4gUmVzdWx0YWRvIHNlZ8O6biBtYXBhIiwNCiAgICAgICBjYXB0aW9uID0gIkZ1ZW50ZTogRWxhYm9yYWNpw7NuIHByb3BpYSIsDQogICAgICAgeCA9ICIiLA0KICAgICAgIHkgPSAiIikrDQogIHRoZW1lX21pbmltYWwoKSsNCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgdmp1c3QgPSAwLjUpLA0KICAgICAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KCBoanVzdCA9IDAuNSwgdmp1c3QgPSAwLjUpLA0KICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwNCiAgICAgICAgbGVnZW5kLnRpdGxlID0gZWxlbWVudF9ibGFuaygpKSsNCiAgZ3VpZGVzKGZpbGwgPSBndWlkZV9sZWdlbmQocmV2ZXJzZSA9IFRSVUUpKSsNCiAgY29vcmRfZmxpcCgpKw0KICBmYWNldF93cmFwKH5Fc2NlbmFyaW8sIG5yb3cgPSBmaWxhcykNCmBgYA0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KDQoNCnBmMSA8LSBnZ3Bsb3QoQmFzZUZlciwgYWVzKHggPSBGZWNoYSwgeSA9IEssIGNvbG9yID0gUGVyc29uYWplLHRleHQgPSBwYXN0ZTAoIlJlc3VsdGFkbzogIixSZXN1bHRhZG8sIlxuTWFwYTogIixFc2NlbmFyaW8sIlxuS0RSIDogIixLRFIpKSkrDQogICAgICAgICAgICAgICAgICAgIGdlb21fcG9pbnQoKSsNCiAgbGFicyh0aXRsZSA9IHBhc3RlMCgiRGF0b3MgVmFsb3JhbnQgS2lsbHMgUEQgQmVybm9uZWl0b3IgIixmZWNoYWluaSwgIiAtICIsIGZlY2hhZmluKSwNCiAgICAgICBzdWJ0aXRsZSA9ICJEdXJhY2nDs24gZGUgcGFydGlkYXMgc2Vnw7puIHJlc3VsdGFkbyIsDQogICAgICAgY2FwdGlvbiA9ICJGdWVudGU6IEVsYWJvcmFjacOzbiBwcm9waWEiLA0KICAgICAgIHggPSAiIiwNCiAgICAgICB5ID0gIktpbGxzIikrDQogIHRoZW1lX21pbmltYWwoKSsNCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dCggaGp1c3QgPSAwLjUgLCB2anVzdCA9IDAuNSksDQogICAgICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoIGhqdXN0ID0gMC41ICwgdmp1c3QgPSAwLjUpKQ0KDQpmaWc0IDwtIGdncGxvdGx5KHBmMSkNCg0KZmlnNA0KICAgICAgICAgICAgICAgICAgDQoNCg0KDQpgYGANCg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCg0KI0dSQUZJQ08gQ09OIFNFTEVDVE9SIC0tLS0tLS0tLS0tLS0tLS0tLS0gUkVWSVNBUiEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISENCiMgZmlnIDwtIHBsb3RfbHkoZGF0YSA9IEJhc2VGZXIsIGNvbG9yID0gflBlcnNvbmFqZSkgJT4lDQojICAgYWRkX3RyYWNlKHg9fkZlY2hhLCB5PX5LLA0KIyAgICAgICAgICAgICB0cmFuc2Zvcm1zID0gbGlzdCgNCiMgICAgICAgICAgICAgICBsaXN0KA0KIyAgICAgICAgICAgICAgICAgdHlwZSA9ICJmaWx0ZXIiLA0KIyAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gfkVzY2VuYXJpbywNCiMgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9ICc9JywNCiMgICAgICAgICAgICAgICAgIHZhbHVlID0gdW5pcXVlKEJhc2VGZXIkRXNjZW5hcmlvKQ0KIyAgICAgICAgICAgICAgICkNCiMgICAgICAgICAgICAgKQ0KIyAgICkgJT4lDQojICAgbGF5b3V0KA0KIyAgICAgdXBkYXRlbWVudXMgPSBsaXN0KA0KIyAgICAgICBsaXN0KA0KIyAgICAgICAgIHR5cGUgPSAnZHJvcGRvd24nLA0KIyAgICAgICAgIGFjdGl2ZSA9IC0xLA0KIyAgICAgICAgIGJ1dHRvbnMgPSBsaXN0KA0KIyAgICAgICAgICAgbGlzdChtZXRob2QgPSAicmVzdHlsZSIsDQojICAgICAgICAgICAgICAgIGFyZ3MgPSBsaXN0KCJ0cmFuc2Zvcm1zWzBdLnZhbHVlIiwgdW5pcXVlKEJhc2VGZXIkRXNjZW5hcmlvKVsxXSksDQojICAgICAgICAgICAgICAgIGxhYmVsID0gIkJpbmQiKSwNCiMgICAgICAgICAgIGxpc3QobWV0aG9kID0gInJlc3R5bGUiLA0KIyAgICAgICAgICAgICAgICBhcmdzID0gbGlzdCgidHJhbnNmb3Jtc1swXS52YWx1ZSIsIHVuaXF1ZShCYXNlRmVyJEVzY2VuYXJpbylbMl0pLA0KIyAgICAgICAgICAgICAgICBsYWJlbCA9ICJBc2NlbnQiKSwNCiMgICAgICAgICAgIGxpc3QobWV0aG9kID0gInJlc3R5bGUiLA0KIyAgICAgICAgICAgICAgICBhcmdzID0gbGlzdCgidHJhbnNmb3Jtc1swXS52YWx1ZSIsIHVuaXF1ZShCYXNlRmVyJEVzY2VuYXJpbylbM10pLA0KIyAgICAgICAgICAgICAgICBsYWJlbCA9ICJIYXZlbiIpLA0KIyAgICAgICAgICAgbGlzdChtZXRob2QgPSAicmVzdHlsZSIsDQojICAgICAgICAgICAgICAgIGFyZ3MgPSBsaXN0KCJ0cmFuc2Zvcm1zWzBdLnZhbHVlIiwgdW5pcXVlKEJhc2VGZXIkRXNjZW5hcmlvKVs0XSksDQojICAgICAgICAgICAgICAgIGxhYmVsID0gIlNwbGl0IiksDQojICAgICAgICAgICBsaXN0KG1ldGhvZCA9ICJyZXN0eWxlIiwNCiMgICAgICAgICAgICAgICAgYXJncyA9IGxpc3QoInRyYW5zZm9ybXNbMF0udmFsdWUiLCB1bmlxdWUoQmFzZUZlciRFc2NlbmFyaW8pWzVdKSwNCiMgICAgICAgICAgICAgICAgbGFiZWwgPSAiQnJlZXplIiksDQojICAgICAgICAgICBsaXN0KG1ldGhvZCA9ICJyZXN0eWxlIiwNCiMgICAgICAgICAgICAgICAgYXJncyA9IGxpc3QoInRyYW5zZm9ybXNbMF0udmFsdWUiLCB1bmlxdWUoQmFzZUZlciRFc2NlbmFyaW8pWzZdKSwNCiMgICAgICAgICAgICAgICAgbGFiZWwgPSAiSWNlYm94IikNCiMgICAgICAgICApDQojICAgICAgICkNCiMgICAgICkNCiMgICApDQojIGZpZw0KDQoNCg0KDQpgYGANCg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCg0KDQpwZiA8LSBnZ3Bsb3QoQmFzZUZlciwgYWVzKHggPSBGZWNoYSwgeSA9IEssIGNvbG9yID0gUGVyc29uYWplKSkrDQogICAgICAgICAgICAgICAgICAgIGdlb21fcG9pbnQoKSsNCiAgbGFicyh0aXRsZSA9IHBhc3RlMCgiS2lsbHMgUEQgUEQgQmVybm9uZWl0b3Igc2Vnw7puIG1hcGEgIixmZWNoYWluaSwgIiAtICIsIGZlY2hhZmluKSwNCiAgICAgICBzdWJ0aXRsZSA9ICJEdXJhY2nDs24gZGUgcGFydGlkYXMgc2Vnw7puIHJlc3VsdGFkbyIsDQogICAgICAgY2FwdGlvbiA9ICJGdWVudGU6IEVsYWJvcmFjacOzbiBwcm9waWEiLA0KICAgICAgIHggPSAiIiwNCiAgICAgICB5ID0gIktpbGxzIikrDQogIHRoZW1lX21pbmltYWwoKSsNCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dCggaGp1c3QgPSAwLjUgLCB2anVzdCA9IDAuNSksDQogICAgICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoIGhqdXN0ID0gMC41ICwgdmp1c3QgPSAwLjUpKSsNCiAgZmFjZXRfd3JhcCh+RXNjZW5hcmlvLCBuY29sID0gMikNCg0KZmlnMyA8LSBnZ3Bsb3RseShwZikNCg0KZmlnMw0KICAgICAgICAgICAgICAgICAgDQoNCg0KDQpgYGANCg0KR3LDoWZpY28gUG9sYXINCg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCg0KbGlzdGFmZXIgPC0gYyhtZWFuKEJhc2VGZXIkSyksbWVhbihCYXNlRmVyJEQpLG1lYW4oQmFzZUZlciRBKSxtZWFuKEJhc2VGZXIkS0RSKSkNCg0KZmlnNSA8LSBwbG90X2x5KA0KICB0eXBlID0gInNjYXR0ZXJwb2xhciIsDQogIHIgPSBsaXN0YWZlciwNCiAgdGhldGEgPSBjKCJLaWxscyIsIk11ZXJ0ZXMiLCJBc2lzdGVuY2lhIiwiS0RSIiksDQogIGZpbGwgPSAidG9zZWxmIg0KKQ0KZmlnNSA8LSBmaWc1ICU+JQ0KICBsYXlvdXQoDQogICAgcG9sYXIgPSBsaXN0KA0KICAgICAgcmFkaWFsYXhpcyA9IGxpc3QoDQogICAgICAgIHZpc2libGUgPSBULA0KICAgICAgICByYW5nZSA9IGMoMCwzMCkNCiAgICAgICkNCiAgICApLA0KICAgIHNob3dsZWdlbmQgPSBGDQogICkNCg0KDQpmaWc1DQpgYGANCg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCg0KVGFibGFfNCA8LSBCYXNlRmVyICU+JQ0KICBmaWx0ZXIoRXF1aXBvID09ICJwaWVsZGVwb3IiKSAlPiUgDQogIHNlbGVjdChGZWNoYSxFc2NlbmFyaW8sS0RSKSAlPiUNCiAgZ3JvdXBfYnkoRmVjaGEsRXNjZW5hcmlvKSAlPiUgDQogIHN1bW1hcmlzZShLRFIgPSBtZWFuKEtEUikpDQoNCg0KZmlnMSA8LSBnZ3Bsb3QoVGFibGFfNCwgYWVzKHggPSBGZWNoYSwgeSA9IEtEUikpKyAjc2VsZWNjaW9uYW1vcyB2YXJpYWJsZXMgYSBncmFmaWNhciB5IGEgY29sb3JlYXINCiAgZ2VvbV9saW5lKCkrIA0KICBnZW9tX3BvaW50KCkrDQogICMgZ2VvbV9zbW9vdGgobWV0aG9kID0gJ2xvZXNzJywNCiAgIyAgICAgICAgICAgICBmb3JtdWxhID0gJ3kgfiB4JykrDQogIGxhYnModGl0bGUgPXBhc3RlMCgiS0RSIFNlZ8O6biBmZWNoYSBQRCAiLGZlY2hhaW5pLCAiIC0gIiwgZmVjaGFmaW4pLA0KICAgICAgIHN1YnRpdGxlID0gIktEUiBQcm9tZWRpbyBzZWfDum4gZmVjaGEiLA0KICAgICAgIGNhcHRpb24gPSAiRnVlbnRlOiBFbGFib3JhY2nDs24gcHJvcGlhIiwNCiAgICAgICB4ID0gIkZlY2hhIiwNCiAgICAgICB5ID0gIktEUiIpKw0KICAjc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIiMxYWMwYzYiLCAiI2U3NDY0NSIsIiNmYWNkNjAiKSkrICNjb2xvcmVhbW9zIGxhcyBsaW5lYXMNCiAgdGhlbWVfbWluaW1hbCgpKw0KICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KCBoanVzdCA9IDAuNSAsIHZqdXN0ID0gMC41KSwgDQogICAgICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoIGhqdXN0ID0gMC41ICwgdmp1c3QgPSAwLjUpKSsNCiAgZmFjZXRfd3JhcCh+RXNjZW5hcmlvKQ0KDQpmaWcxIDwtIGdncGxvdGx5KGZpZzEpDQogDQpmaWcxDQoNCmBgYA0KDQojIyMgR3VpbGxlIFllaVlpDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQoNCkJhc2VGZXIgPC0gQmFzZSAlPiUgDQogIGZpbHRlcihKdWdhZG9yID09ICJHdWlsbGUiKQ0KDQpHdWlQYXJ0aWRhcyA8LSBucm93KEJhc2VGZXIpDQoNCnBvcmNHdWkgPC0gcGFzdGUwKHJvdW5kKEd1aVBhcnRpZGFzL2NhbnRwYXJ0aWRhcyoxMDAsMiksIiAlIikNCg0KRmVyUGVyc29uYWplcyA8LSAgQmFzZUZlciAlPiUNCiAgc2VsZWN0KFBlcnNvbmFqZSxLLEQsQSxLRFIpICU+JQ0KICBncm91cF9ieShQZXJzb25hamUpICU+JSANCiAgc3VtbWFyaXNlKGFjcm9zcyhldmVyeXRoaW5nKCksIGxpc3QobWVhbikpKQ0KDQpGZXJHcmFsIDwtIEJhc2VGZXIgJT4lDQogIHNlbGVjdChLLEQsQSxLRFIpICU+JQ0KICBzdW1tYXJpc2UoYWNyb3NzKGV2ZXJ5dGhpbmcoKSwgbGlzdChtZWFuKSkpDQoNCkZlclBlcnNvbmFqZXMyIDwtIEJhc2VGZXIgJT4lDQogIHNlbGVjdChQZXJzb25hamUsSyxELEEsS0RSKSAlPiUNCiAgZ3JvdXBfYnkoUGVyc29uYWplKSAlPiUNCiAgc3VtbWFyaXNlKFRvdGFsID0gbigpKSAlPiUgDQogIG11dGF0ZShQb3JjZW50YWplID0gcm91bmQoVG90YWwvc3VtKFRvdGFsKSoxMDAsMikpICU+JSANCiAgbXV0YXRlKEV0aXF1ZXRhID0gcGFzdGUwKFRvdGFsLCAiICggJSAiLCBQb3JjZW50YWplLCAiKSIpKQ0KDQoNCkZlclBlcnNvbmFqZXNGaW5hbCA8LSBsZWZ0X2pvaW4oRmVyUGVyc29uYWplcyxGZXJQZXJzb25hamVzMikgJT4lIA0KICBzZWxlY3QoUGVyc29uYWplLEV0aXF1ZXRhLEtfMSxEXzEsQV8xLEtEUl8xKSAlPiUgDQogIHJlbmFtZShUb3RhbCA9IEV0aXF1ZXRhLA0KICAgICAgICAgUHJvbWVkaW9fS2lsbHMgPSBLXzEsDQogICAgICAgICBQcm9tZWRpb19NdWVydGVzID0gRF8xLA0KICAgICAgICAgUHJvbWVkaW9fQXNpc3RlbmNpYXMgPUFfMSwNCiAgICAgICAgIEtEUiA9IEtEUl8xKSAlPiUgDQogIGFycmFuZ2UoZGVzYyhLRFIpKQ0KDQojI1RhYmxhIHBlcnNvbmFqZSBlc2NlbmFyaW8NCg0KDQpGZXJQZXJNYXBhIDwtICBCYXNlRmVyICU+JQ0KICBzZWxlY3QoRXNjZW5hcmlvLFJlc3VsdGFkbyxQZXJzb25hamUsSyxELEEsS0RSKSAlPiUNCiAgZ3JvdXBfYnkoRXNjZW5hcmlvLFJlc3VsdGFkbyxQZXJzb25hamUpICU+JSANCiAgc3VtbWFyaXNlKGFjcm9zcyhldmVyeXRoaW5nKCksIGxpc3QobWVhbikpKQ0KDQpGZXJQZXJNYXBhMiA8LSBCYXNlRmVyICU+JQ0KICBzZWxlY3QoRXNjZW5hcmlvLFJlc3VsdGFkbyxQZXJzb25hamUsSyxELEEsS0RSKSAlPiUNCiAgZ3JvdXBfYnkoRXNjZW5hcmlvLFJlc3VsdGFkbyxQZXJzb25hamUpICU+JQ0KICBzdW1tYXJpc2UoVG90YWwgPSBuKCkpICU+JSANCiAgbXV0YXRlKFBvcmNlbnRhamUgPSByb3VuZChUb3RhbC9zdW0oVG90YWwpKjEwMCwyKSkgJT4lIA0KICBtdXRhdGUoRXRpcXVldGEgPSBwYXN0ZTAoVG90YWwsICIgKCAlICIsIFBvcmNlbnRhamUsICIpIikpDQoNCg0KRmVyUGVyTWFwYUZpbmFsIDwtIGxlZnRfam9pbihGZXJQZXJNYXBhLEZlclBlck1hcGEyKSAlPiUgDQogIHNlbGVjdChSZXN1bHRhZG8sUGVyc29uYWplLEV0aXF1ZXRhLEtfMSxEXzEsQV8xLEtEUl8xKSAlPiUgDQogIHJlbmFtZShUb3RhbCA9IEV0aXF1ZXRhLA0KICAgICAgICAgUHJvbWVkaW9fS2lsbHMgPSBLXzEsDQogICAgICAgICBQcm9tZWRpb19NdWVydGVzID0gRF8xLA0KICAgICAgICAgUHJvbWVkaW9fQXNpc3RlbmNpYXMgPUFfMSwNCiAgICAgICAgIEtEUiA9IEtEUl8xKSAlPiUgDQogIGFycmFuZ2UoKEVzY2VuYXJpbykpDQoNCg0KDQoNCmBgYA0KDQpFbCBqdWdhZG9yIFBEIEd1aWxsZSBZZWlZaSBqdWfDsyB1biB0b3RhbCBkZSBgciBHdWlQYXJ0aWRhc2AgcGFydGlkYXMgcXVlIHJlcHJlc2VudGFuIGByIHBvcmNHdWlgIHNvYnJlIGVsIHRvdGFsIGRlIHBhcnRpZGFzLiBBIGNvbnRpbnVhY2nDs24gc2UgbXVlc3RyYW4gc3VzIGNpZnJhcyBnZW5lcmFsZXMgeSBsYXMgY2lmcmFzIGRlIGxvcyBwZXJzb25hamVzIHF1ZSBlbGlnacOzDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojSEFDRVIgVEFCTEEgQ09OIEtBQkxFDQoNCmthYmxlKEZlckdyYWwsYWxpZ24gPSAibCIsZGlnaXRzID0gMyxjb2wubmFtZXMgPSBjKCJQcm9tZWRpbyBLaWxscyIsIlByb21lZGlvIE11ZXJ0ZXMiLCJQcm9tZWRpbyBBc2lzdGVuY2lhcyIsIktEUiIpKSU+JSANCiAgICAgICAgY29sdW1uX3NwZWMoMSwgYm9sZCA9IFRSVUUsIGNvbG9yID0gbmVncm8pICU+JQ0KICByb3dfc3BlYygwLGJhY2tncm91bmQgPSBuZWdybywgY29sb3IgPSAid2hpdGUiKSAlPiUgDQogICAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIiA9IDEsDQogICAgICAgICAgICAgICAgICAgICAiQ2lmcmFzIj0gMiwNCiAgICAgICAgICAgICAgICAgICAgICIgIiA9MSkpICU+JSANCiAga2FibGVfbWluaW1hbCgpDQpgYGANCg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCiNIQUNFUiBUQUJMQSBDT04gS0FCTEUNCg0Ka2FibGUoRmVyUGVyc29uYWplc0ZpbmFsLGFsaWduID0gImwiLGRpZ2l0cyA9IDMsY29sLm5hbWVzID0gYygiUGVyc29uYWplIiwiVG90YWwiLCJQcm9tZWRpbyBLaWxscyIsIlByb21lZGlvIE11ZXJ0ZXMiLCJQcm9tZWRpbyBBc2lzdGVuY2lhcyIsIktEUiIpKSU+JSANCiAgICAgICAgY29sdW1uX3NwZWMoMSwgYm9sZCA9IFRSVUUsIGNvbG9yID0gbmVncm8pICU+JQ0KICByb3dfc3BlYygwLGJhY2tncm91bmQgPSBuZWdybywgY29sb3IgPSAid2hpdGUiKSAlPiUgDQogICAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIiA9IDEsDQogICAgICAgICAgICAgICAgICAgICAiUGVyc29uYWplcyI9IDQsDQogICAgICAgICAgICAgICAgICAgICAiICIgPTEpKSAlPiUgDQogIGthYmxlX21pbmltYWwoKQ0KYGBgDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojSEFDRVIgVEFCTEEgQ09OIEtBQkxFDQoNCiMga2FibGUoRmVyUGVyTWFwYUZpbmFsLGFsaWduID0gImwiLGRpZ2l0cyA9IDMsY29sLm5hbWVzID0gYygiTWFwYSIsIlBlcnNvbmFqZSIsIlRvdGFsIiwiUHJvbWVkaW8gS2lsbHMiLCJQcm9tZWRpbyBNdWVydGVzIiwiUHJvbWVkaW8gQXNpc3RlbmNpYXMiLCJLRFIiKSklPiUgDQojICAgICAgICAgY29sdW1uX3NwZWMoMSwgYm9sZCA9IFRSVUUsIGNvbG9yID0gbmVncm8pICU+JQ0KIyAgIHJvd19zcGVjKDAsYmFja2dyb3VuZCA9IG5lZ3JvLCBjb2xvciA9ICJ3aGl0ZSIpICU+JSANCiMgICAgIGFkZF9oZWFkZXJfYWJvdmUoYygiICIgPSAxLA0KIyAgICAgICAgICAgICAgICAgICAgICAiUmVuZGltaWVudG8gc2Vnw7puIG1hcGEiPSA1LA0KIyAgICAgICAgICAgICAgICAgICAgICAiICIgPTEpKSAlPiUgDQojICAga2FibGVfcGFwZXIoImhvdmVyIixodG1sX2ZvbnQgPSAiQ2FsaWJyaSIpDQpgYGANCg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCiNIQUNFUiBUQUJMQSBDT04gS0FCTEUNCg0KZGF0YXRhYmxlKEZlclBlck1hcGFGaW5hbCxmaWx0ZXIgPSAndG9wJywNCiAgICAgICAgICBvcHRpb25zID0gbGlzdCgNCiAgc2VhcmNoaW5nID0gVFJVRSwNCiAgcGFnZUxlbmd0aCA9IDE1LA0KICBpbml0Q29tcGxldGUgPSBKUygNCiAgICAiZnVuY3Rpb24oc2V0dGluZ3MsIGpzb24pIHsiLA0KICAgICIkKCdib2R5JykuY3NzKHsnZm9udC1mYW1pbHknOiAnQ2FsaWJyaSd9KTsiLA0KICAgICJ9Ig0KKSkpICU+JSANCiAgZm9ybWF0Um91bmQoYygiUHJvbWVkaW9fS2lsbHMiLCJQcm9tZWRpb19NdWVydGVzIiwiUHJvbWVkaW9fQXNpc3RlbmNpYXMiLCJLRFIiKSwyKQ0KDQoNCg0KDQpgYGANCg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCg0KVGFibGFHIDwtIEJhc2UgJT4lDQogIGZpbHRlcihFcXVpcG8gPT0gInBpZWxkZXBvciIpICU+JQ0KICBmaWx0ZXIoSnVnYWRvciA9PSAiR3VpbGxlIikgJT4lDQogIHNlbGVjdChGZWNoYSxLLEQsQSxLRFIpICU+JQ0KICBncm91cF9ieShGZWNoYSkgJT4lDQogIHN1bW1hcmlzZShLaWxscyA9IHJvdW5kKG1lYW4oSyksMiksDQogICAgICAgICAgICBEZWF0aHMgPSByb3VuZChtZWFuKEQpLDIpLA0KICAgICAgICAgICAgS0RScCA9IHJvdW5kKG1lYW4oS0RSKSwyKSkgJT4lDQogIG11dGF0ZShLaWxsc0FjdW0gPSByb3VuZChjdW1tZWFuKEtpbGxzKSwyKSwNCiAgICAgICAgIERlYXRoc0FjdW0gPSByb3VuZChjdW1tZWFuKERlYXRocyksMiksDQogICAgICAgICBLRFJBY3VtID0gcm91bmQoY3VtbWVhbihLRFJwKSwyKSkNCg0KI0dyw6FmaWNvIDENCg0KcDMgPC0gcGxvdF9seShUYWJsYUcseCA9IH5GZWNoYSklPiUNCiAgYWRkX3RyYWNlKHkgPSB+S2lsbHMsbW9kZSA9ICJsaW5lcyttYXJrZXJzIiwgbmFtZSA9ICJraWxscyIsIGxpbmUgPSBsaXN0KGNvbG9yID0gIiMyNzI2NDMiKSxtYXJrZXIgPSBsaXN0KGNvbG9yID0gIiMyNzI2NDMiKSkgJT4lDQogIGFkZF90cmFjZSh5ID0gfktpbGxzQWN1bSxtb2RlID0gImxpbmVzK21hcmtlcnMiLCBuYW1lID0gImtpbGxzQWN1bSIsIGxpbmUgPSBsaXN0KGNvbG9yID0gIiMyYzY5OGQiKSxtYXJrZXIgPSBsaXN0KGNvbG9yID0gIiMyYzY5OGQiKSkNCg0KDQojR3LDoWZpY28gMg0KDQpwNCA8LSBwbG90X2x5KFRhYmxhRyx4ID0gfkZlY2hhKSU+JQ0KICBhZGRfdHJhY2UoeSA9IH5EZWF0aHMsbW9kZSA9ICJsaW5lcyttYXJrZXJzIiwgbmFtZSA9ICJEZWF0aHMiLCBsaW5lID0gbGlzdChjb2xvciA9ICIjZjU1OTUxIiksbWFya2VyID0gbGlzdChjb2xvciA9ICIjZjU1OTUxIikpICU+JQ0KICBhZGRfdHJhY2UoeSA9IH5EZWF0aHNBY3VtLG1vZGUgPSAibGluZXMrbWFya2VycyIsIG5hbWUgPSAiRGVhdGhzQWN1bSIsIGxpbmUgPSBsaXN0KGNvbG9yID0gIiM4MDBlMGQiKSxtYXJrZXIgPSBsaXN0KGNvbG9yID0gIiM4MDBlMGQiKSkNCg0KI0dyw6FmaWNvIDMNCg0KcDUgPC0gcGxvdF9seShUYWJsYUcseCA9IH5GZWNoYSklPiUNCiAgYWRkX3RyYWNlKHkgPSB+S0RScCxtb2RlID0gImxpbmVzK21hcmtlcnMiLCBuYW1lID0gIktEUiIsIGxpbmUgPSBsaXN0KGNvbG9yID0gIiM5NWFkYmUiKSxtYXJrZXIgPSBsaXN0KGNvbG9yID0gIiM5NWFkYmUiKSkgJT4lDQogIGFkZF90cmFjZSh5ID0gfktEUkFjdW0sbW9kZSA9ICJsaW5lcyttYXJrZXJzIiwgbmFtZSA9ICJLRFJBY3VtIiwgbGluZSA9IGxpc3QoY29sb3IgPSAiIzU3NGY3ZCIpLG1hcmtlciA9IGxpc3QoY29sb3IgPSAiIzU3NGY3ZCIpKQ0KDQoNCg0KDQpmaWcgPC0gc3VicGxvdChwMyxwNCxwNSxucm93cyA9IDMsIHNoYXJlWCA9IFRSVUUsIG1hcmdpbiA9IDAuMDUpICU+JQ0KICBsYXlvdXQoYW5ub3RhdGlvbnMgPSBsaXN0KA0KICAgIGxpc3QoeCA9IDAuNSAsIHkgPSAxLjA1ICx0ZXh0ID0gIktpbGxzIiwgc2hvd2Fycm93ID0gRix4cmVmPSdwYXBlcicsIHlyZWY9J3BhcGVyJyksDQogICAgbGlzdCh4ID0gMC41ICwgeSA9IDAuNyx0ZXh0ID0gIkRlYXRocyIsc2hvd2Fycm93ID0gRix4cmVmPSdwYXBlcicsIHlyZWY9J3BhcGVyJyksDQogICAgbGlzdCh4ID0gMC41ICwgeSA9IDAuMyAsIHkgPSAyNSx0ZXh0ID0gIktEUiIsc2hvd2Fycm93ID0gRix4cmVmPSdwYXBlcicsIHlyZWY9J3BhcGVyJykNCiAgKSkNCg0KZmlnDQoNCg0KDQoNCmBgYA0KDQoNClJlbmRpbWllbnRvIHNlZ8O6biBtYXBhDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpUYWJsYV8yZiA8LSBCYXNlRmVyICU+JSANCiAgc2VsZWN0KEVzY2VuYXJpbyxSZXN1bHRhZG8pICU+JQ0KICBmaWx0ZXIoIWlzLm5hKEVzY2VuYXJpbykpICU+JQ0KICBncm91cF9ieShFc2NlbmFyaW8sUmVzdWx0YWRvKSAlPiUgDQogIHN1bW1hcmlzZShUb3RhbCA9IG4oKSkgJT4lIA0KICBtdXRhdGUoUG9yY2VudGFqZSA9IHJvdW5kKFRvdGFsL3N1bShUb3RhbCkqMTAwLDIpKSAlPiUgDQogIG11dGF0ZShFdGlxdWV0YSA9IHBhc3RlMChUb3RhbCwgIiAoICUgIiwgUG9yY2VudGFqZSwgIikiKSkgDQoNCg0KVGFibGFhdXggPC0gVGFibGFfMmYgJT4lIA0KICBzZWxlY3QoRXNjZW5hcmlvKSAlPiUgDQogIGZpbHRlcighZHVwbGljYXRlZChFc2NlbmFyaW8pKQ0KDQpmaWxhcyA8LSBucm93KFRhYmxhYXV4KQ0KDQpnZ3Bsb3QoVGFibGFfMmYsIGFlcyh4ID0gIiIgLCB5ID0gVG90YWwsIGZpbGwgPSBSZXN1bHRhZG8gKSkrDQogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCB3aWR0aCA9IDMpKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gRXRpcXVldGEpLCBwb3NpdGlvbiA9IHBvc2l0aW9uX3N0YWNrKHZqdXN0ID0gMC41KSwgc2l6ZSA9My41LCBjb2xvciA9IGJsYW5jbykrDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMobmVncm8sIGdyaXMyLGdyaXMxKSkrDQogICAgbGFicyh0aXRsZSA9IHBhc3RlMCgiRGF0b3MgVmFsb3JhbnQgUEQgR3VpbGxlIFllaVlpICIsZmVjaGFpbmksICIgLSAiLCBmZWNoYWZpbiksDQogICAgICAgc3VidGl0bGUgPSAiUmVzdW1lbiBSZXN1bHRhZG8gc2Vnw7puIG1hcGEiLA0KICAgICAgIGNhcHRpb24gPSAiRnVlbnRlOiBFbGFib3JhY2nDs24gcHJvcGlhIiwNCiAgICAgICB4ID0gIiIsDQogICAgICAgeSA9ICIiKSsNCiAgdGhlbWVfbWluaW1hbCgpKw0KICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41LCB2anVzdCA9IDAuNSksDQogICAgICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoIGhqdXN0ID0gMC41LCB2anVzdCA9IDAuNSksDQogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iLA0KICAgICAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCkpKw0KICBndWlkZXMoZmlsbCA9IGd1aWRlX2xlZ2VuZChyZXZlcnNlID0gVFJVRSkpKw0KICBjb29yZF9mbGlwKCkrDQogIGZhY2V0X3dyYXAofkVzY2VuYXJpbywgbnJvdyA9IGZpbGFzKQ0KYGBgDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQoNCg0KcGYxIDwtIGdncGxvdChCYXNlRmVyLCBhZXMoeCA9IEZlY2hhLCB5ID0gSywgY29sb3IgPSBQZXJzb25hamUsdGV4dCA9IHBhc3RlMCgiUmVzdWx0YWRvOiAiLFJlc3VsdGFkbywiXG5NYXBhOiAiLEVzY2VuYXJpbywiXG5LRFIgOiAiLEtEUikpKSsNCiAgICAgICAgICAgICAgICAgICAgZ2VvbV9wb2ludCgpKw0KICBsYWJzKHRpdGxlID0gcGFzdGUwKCJEYXRvcyBWYWxvcmFudCBLaWxscyBQRCBHdWlsbGUgWWVpWWkgIixmZWNoYWluaSwgIiAtICIsIGZlY2hhZmluKSwNCiAgICAgICBzdWJ0aXRsZSA9ICJEdXJhY2nDs24gZGUgcGFydGlkYXMgc2Vnw7puIHJlc3VsdGFkbyIsDQogICAgICAgY2FwdGlvbiA9ICJGdWVudGU6IEVsYWJvcmFjacOzbiBwcm9waWEiLA0KICAgICAgIHggPSAiIiwNCiAgICAgICB5ID0gIktpbGxzIikrDQogIHRoZW1lX21pbmltYWwoKSsNCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dCggaGp1c3QgPSAwLjUgLCB2anVzdCA9IDAuNSksDQogICAgICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoIGhqdXN0ID0gMC41ICwgdmp1c3QgPSAwLjUpKQ0KDQpmaWc0IDwtIGdncGxvdGx5KHBmMSkNCg0KZmlnNA0KICAgICAgICAgICAgICAgICAgDQoNCg0KDQpgYGANCg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCg0KI0dSQUZJQ08gQ09OIFNFTEVDVE9SIC0tLS0tLS0tLS0tLS0tLS0tLS0gUkVWSVNBUiEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISENCiMgZmlnIDwtIHBsb3RfbHkoZGF0YSA9IEJhc2VGZXIsIGNvbG9yID0gflBlcnNvbmFqZSkgJT4lDQojICAgYWRkX3RyYWNlKHg9fkZlY2hhLCB5PX5LLA0KIyAgICAgICAgICAgICB0cmFuc2Zvcm1zID0gbGlzdCgNCiMgICAgICAgICAgICAgICBsaXN0KA0KIyAgICAgICAgICAgICAgICAgdHlwZSA9ICJmaWx0ZXIiLA0KIyAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gfkVzY2VuYXJpbywNCiMgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9ICc9JywNCiMgICAgICAgICAgICAgICAgIHZhbHVlID0gdW5pcXVlKEJhc2VGZXIkRXNjZW5hcmlvKQ0KIyAgICAgICAgICAgICAgICkNCiMgICAgICAgICAgICAgKQ0KIyAgICkgJT4lDQojICAgbGF5b3V0KA0KIyAgICAgdXBkYXRlbWVudXMgPSBsaXN0KA0KIyAgICAgICBsaXN0KA0KIyAgICAgICAgIHR5cGUgPSAnZHJvcGRvd24nLA0KIyAgICAgICAgIGFjdGl2ZSA9IC0xLA0KIyAgICAgICAgIGJ1dHRvbnMgPSBsaXN0KA0KIyAgICAgICAgICAgbGlzdChtZXRob2QgPSAicmVzdHlsZSIsDQojICAgICAgICAgICAgICAgIGFyZ3MgPSBsaXN0KCJ0cmFuc2Zvcm1zWzBdLnZhbHVlIiwgdW5pcXVlKEJhc2VGZXIkRXNjZW5hcmlvKVsxXSksDQojICAgICAgICAgICAgICAgIGxhYmVsID0gIkJpbmQiKSwNCiMgICAgICAgICAgIGxpc3QobWV0aG9kID0gInJlc3R5bGUiLA0KIyAgICAgICAgICAgICAgICBhcmdzID0gbGlzdCgidHJhbnNmb3Jtc1swXS52YWx1ZSIsIHVuaXF1ZShCYXNlRmVyJEVzY2VuYXJpbylbMl0pLA0KIyAgICAgICAgICAgICAgICBsYWJlbCA9ICJBc2NlbnQiKSwNCiMgICAgICAgICAgIGxpc3QobWV0aG9kID0gInJlc3R5bGUiLA0KIyAgICAgICAgICAgICAgICBhcmdzID0gbGlzdCgidHJhbnNmb3Jtc1swXS52YWx1ZSIsIHVuaXF1ZShCYXNlRmVyJEVzY2VuYXJpbylbM10pLA0KIyAgICAgICAgICAgICAgICBsYWJlbCA9ICJIYXZlbiIpLA0KIyAgICAgICAgICAgbGlzdChtZXRob2QgPSAicmVzdHlsZSIsDQojICAgICAgICAgICAgICAgIGFyZ3MgPSBsaXN0KCJ0cmFuc2Zvcm1zWzBdLnZhbHVlIiwgdW5pcXVlKEJhc2VGZXIkRXNjZW5hcmlvKVs0XSksDQojICAgICAgICAgICAgICAgIGxhYmVsID0gIlNwbGl0IiksDQojICAgICAgICAgICBsaXN0KG1ldGhvZCA9ICJyZXN0eWxlIiwNCiMgICAgICAgICAgICAgICAgYXJncyA9IGxpc3QoInRyYW5zZm9ybXNbMF0udmFsdWUiLCB1bmlxdWUoQmFzZUZlciRFc2NlbmFyaW8pWzVdKSwNCiMgICAgICAgICAgICAgICAgbGFiZWwgPSAiQnJlZXplIiksDQojICAgICAgICAgICBsaXN0KG1ldGhvZCA9ICJyZXN0eWxlIiwNCiMgICAgICAgICAgICAgICAgYXJncyA9IGxpc3QoInRyYW5zZm9ybXNbMF0udmFsdWUiLCB1bmlxdWUoQmFzZUZlciRFc2NlbmFyaW8pWzZdKSwNCiMgICAgICAgICAgICAgICAgbGFiZWwgPSAiSWNlYm94IikNCiMgICAgICAgICApDQojICAgICAgICkNCiMgICAgICkNCiMgICApDQojIGZpZw0KDQoNCg0KDQpgYGANCg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCg0KDQpwZiA8LSBnZ3Bsb3QoQmFzZUZlciwgYWVzKHggPSBGZWNoYSwgeSA9IEssIGNvbG9yID0gUGVyc29uYWplKSkrDQogICAgICAgICAgICAgICAgICAgIGdlb21fcG9pbnQoKSsNCiAgbGFicyh0aXRsZSA9IHBhc3RlMCgiS2lsbHMgUEQgUEQgR3VpbGxlIFllaVlpIHNlZ8O6biBtYXBhICIsZmVjaGFpbmksICIgLSAiLCBmZWNoYWZpbiksDQogICAgICAgc3VidGl0bGUgPSAiRHVyYWNpw7NuIGRlIHBhcnRpZGFzIHNlZ8O6biByZXN1bHRhZG8iLA0KICAgICAgIGNhcHRpb24gPSAiRnVlbnRlOiBFbGFib3JhY2nDs24gcHJvcGlhIiwNCiAgICAgICB4ID0gIiIsDQogICAgICAgeSA9ICJLaWxscyIpKw0KICB0aGVtZV9taW5pbWFsKCkrDQogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoIGhqdXN0ID0gMC41ICwgdmp1c3QgPSAwLjUpLA0KICAgICAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KCBoanVzdCA9IDAuNSAsIHZqdXN0ID0gMC41KSkrDQogIGZhY2V0X3dyYXAofkVzY2VuYXJpbywgbmNvbCA9IDIpDQoNCmZpZzMgPC0gZ2dwbG90bHkocGYpDQoNCmZpZzMNCiAgICAgICAgICAgICAgICAgIA0KDQoNCg0KYGBgDQoNCkdyw6FmaWNvIFBvbGFyDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQoNCmxpc3RhZmVyIDwtIGMobWVhbihCYXNlRmVyJEspLG1lYW4oQmFzZUZlciREKSxtZWFuKEJhc2VGZXIkQSksbWVhbihCYXNlRmVyJEtEUikpDQoNCmZpZzUgPC0gcGxvdF9seSgNCiAgdHlwZSA9ICJzY2F0dGVycG9sYXIiLA0KICByID0gbGlzdGFmZXIsDQogIHRoZXRhID0gYygiS2lsbHMiLCJNdWVydGVzIiwiQXNpc3RlbmNpYSIsIktEUiIpLA0KICBmaWxsID0gInRvc2VsZiINCikNCmZpZzUgPC0gZmlnNSAlPiUNCiAgbGF5b3V0KA0KICAgIHBvbGFyID0gbGlzdCgNCiAgICAgIHJhZGlhbGF4aXMgPSBsaXN0KA0KICAgICAgICB2aXNpYmxlID0gVCwNCiAgICAgICAgcmFuZ2UgPSBjKDAsMzApDQogICAgICApDQogICAgKSwNCiAgICBzaG93bGVnZW5kID0gRg0KICApDQoNCg0KZmlnNQ0KYGBgDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQoNClRhYmxhXzQgPC0gQmFzZUZlciAlPiUNCiAgZmlsdGVyKEVxdWlwbyA9PSAicGllbGRlcG9yIikgJT4lIA0KICBzZWxlY3QoRmVjaGEsRXNjZW5hcmlvLEtEUikgJT4lDQogIGdyb3VwX2J5KEZlY2hhLEVzY2VuYXJpbykgJT4lIA0KICBzdW1tYXJpc2UoS0RSID0gbWVhbihLRFIpKQ0KDQoNCmZpZzEgPC0gZ2dwbG90KFRhYmxhXzQsIGFlcyh4ID0gRmVjaGEsIHkgPSBLRFIpKSsgI3NlbGVjY2lvbmFtb3MgdmFyaWFibGVzIGEgZ3JhZmljYXIgeSBhIGNvbG9yZWFyDQogIGdlb21fbGluZSgpKyANCiAgZ2VvbV9wb2ludCgpKw0KICAjIGdlb21fc21vb3RoKG1ldGhvZCA9ICdsb2VzcycsDQogICMgICAgICAgICAgICAgZm9ybXVsYSA9ICd5IH4geCcpKw0KICBsYWJzKHRpdGxlID1wYXN0ZTAoIktEUiBTZWfDum4gZmVjaGEgUEQgIixmZWNoYWluaSwgIiAtICIsIGZlY2hhZmluKSwNCiAgICAgICBzdWJ0aXRsZSA9ICJLRFIgUHJvbWVkaW8gc2Vnw7puIGZlY2hhIiwNCiAgICAgICBjYXB0aW9uID0gIkZ1ZW50ZTogRWxhYm9yYWNpw7NuIHByb3BpYSIsDQogICAgICAgeCA9ICJGZWNoYSIsDQogICAgICAgeSA9ICJLRFIiKSsNCiAgI3NjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCIjMWFjMGM2IiwgIiNlNzQ2NDUiLCIjZmFjZDYwIikpKyAjY29sb3JlYW1vcyBsYXMgbGluZWFzDQogIHRoZW1lX21pbmltYWwoKSsNCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dCggaGp1c3QgPSAwLjUgLCB2anVzdCA9IDAuNSksIA0KICAgICAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KCBoanVzdCA9IDAuNSAsIHZqdXN0ID0gMC41KSkrDQogIGZhY2V0X3dyYXAofkVzY2VuYXJpbykNCg0KZmlnMSA8LSBnZ3Bsb3RseShmaWcxKQ0KIA0KZmlnMQ0KDQpgYGANCg0KIyMjIFRhbmd1aXRvODQNCg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCg0KQmFzZUZlciA8LSBCYXNlICU+JSANCiAgZmlsdGVyKEp1Z2Fkb3IgPT0gIkRvYyIpDQoNClRhblBhcnRpZGFzIDwtIG5yb3coQmFzZUZlcikNCg0KcG9yY1RhbiA8LSBwYXN0ZTAocm91bmQoVGFuUGFydGlkYXMvY2FudHBhcnRpZGFzKjEwMCwyKSwiICUiKQ0KDQpGZXJQZXJzb25hamVzIDwtICBCYXNlRmVyICU+JQ0KICBzZWxlY3QoUGVyc29uYWplLEssRCxBLEtEUikgJT4lDQogIGdyb3VwX2J5KFBlcnNvbmFqZSkgJT4lIA0KICBzdW1tYXJpc2UoYWNyb3NzKGV2ZXJ5dGhpbmcoKSwgbGlzdChtZWFuKSkpDQoNCkZlckdyYWwgPC0gQmFzZUZlciAlPiUNCiAgc2VsZWN0KEssRCxBLEtEUikgJT4lDQogIHN1bW1hcmlzZShhY3Jvc3MoZXZlcnl0aGluZygpLCBsaXN0KG1lYW4pKSkNCg0KRmVyUGVyc29uYWplczIgPC0gQmFzZUZlciAlPiUNCiAgc2VsZWN0KFBlcnNvbmFqZSxLLEQsQSxLRFIpICU+JQ0KICBncm91cF9ieShQZXJzb25hamUpICU+JQ0KICBzdW1tYXJpc2UoVG90YWwgPSBuKCkpICU+JSANCiAgbXV0YXRlKFBvcmNlbnRhamUgPSByb3VuZChUb3RhbC9zdW0oVG90YWwpKjEwMCwyKSkgJT4lIA0KICBtdXRhdGUoRXRpcXVldGEgPSBwYXN0ZTAoVG90YWwsICIgKCAlICIsIFBvcmNlbnRhamUsICIpIikpDQoNCg0KRmVyUGVyc29uYWplc0ZpbmFsIDwtIGxlZnRfam9pbihGZXJQZXJzb25hamVzLEZlclBlcnNvbmFqZXMyKSAlPiUgDQogIHNlbGVjdChQZXJzb25hamUsRXRpcXVldGEsS18xLERfMSxBXzEsS0RSXzEpICU+JSANCiAgcmVuYW1lKFRvdGFsID0gRXRpcXVldGEsDQogICAgICAgICBQcm9tZWRpb19LaWxscyA9IEtfMSwNCiAgICAgICAgIFByb21lZGlvX011ZXJ0ZXMgPSBEXzEsDQogICAgICAgICBQcm9tZWRpb19Bc2lzdGVuY2lhcyA9QV8xLA0KICAgICAgICAgS0RSID0gS0RSXzEpICU+JSANCiAgYXJyYW5nZShkZXNjKEtEUikpDQoNCiMjVGFibGEgcGVyc29uYWplIGVzY2VuYXJpbw0KDQoNCkZlclBlck1hcGEgPC0gIEJhc2VGZXIgJT4lDQogIHNlbGVjdChFc2NlbmFyaW8sUmVzdWx0YWRvLFBlcnNvbmFqZSxLLEQsQSxLRFIpICU+JQ0KICBncm91cF9ieShFc2NlbmFyaW8sUmVzdWx0YWRvLFBlcnNvbmFqZSkgJT4lIA0KICBzdW1tYXJpc2UoYWNyb3NzKGV2ZXJ5dGhpbmcoKSwgbGlzdChtZWFuKSkpDQoNCkZlclBlck1hcGEyIDwtIEJhc2VGZXIgJT4lDQogIHNlbGVjdChFc2NlbmFyaW8sUmVzdWx0YWRvLFBlcnNvbmFqZSxLLEQsQSxLRFIpICU+JQ0KICBncm91cF9ieShFc2NlbmFyaW8sUmVzdWx0YWRvLFBlcnNvbmFqZSkgJT4lDQogIHN1bW1hcmlzZShUb3RhbCA9IG4oKSkgJT4lIA0KICBtdXRhdGUoUG9yY2VudGFqZSA9IHJvdW5kKFRvdGFsL3N1bShUb3RhbCkqMTAwLDIpKSAlPiUgDQogIG11dGF0ZShFdGlxdWV0YSA9IHBhc3RlMChUb3RhbCwgIiAoICUgIiwgUG9yY2VudGFqZSwgIikiKSkNCg0KDQpGZXJQZXJNYXBhRmluYWwgPC0gbGVmdF9qb2luKEZlclBlck1hcGEsRmVyUGVyTWFwYTIpICU+JSANCiAgc2VsZWN0KFJlc3VsdGFkbyxQZXJzb25hamUsRXRpcXVldGEsS18xLERfMSxBXzEsS0RSXzEpICU+JSANCiAgcmVuYW1lKFRvdGFsID0gRXRpcXVldGEsDQogICAgICAgICBQcm9tZWRpb19LaWxscyA9IEtfMSwNCiAgICAgICAgIFByb21lZGlvX011ZXJ0ZXMgPSBEXzEsDQogICAgICAgICBQcm9tZWRpb19Bc2lzdGVuY2lhcyA9QV8xLA0KICAgICAgICAgS0RSID0gS0RSXzEpICU+JSANCiAgYXJyYW5nZSgoRXNjZW5hcmlvKSkNCg0KDQoNCmBgYA0KDQpFbCBqdWdhZG9yIFBEIFRhbmd1aXRvODQganVnw7MgdW4gdG90YWwgZGUgYHIgVGFuUGFydGlkYXNgIHBhcnRpZGFzIHF1ZSByZXByZXNlbnRhbiBgciBwb3JjVGFuYCBzb2JyZSBlbCB0b3RhbCBkZSBwYXJ0aWRhcy4gQSBjb250aW51YWNpw7NuIHNlIG11ZXN0cmFuIHN1cyBjaWZyYXMgZ2VuZXJhbGVzIHkgbGFzIGNpZnJhcyBkZSBsb3MgcGVyc29uYWplcyBxdWUgZWxpZ2nDsw0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KI0hBQ0VSIFRBQkxBIENPTiBLQUJMRQ0KDQprYWJsZShGZXJHcmFsLGFsaWduID0gImwiLGRpZ2l0cyA9IDMsY29sLm5hbWVzID0gYygiUHJvbWVkaW8gS2lsbHMiLCJQcm9tZWRpbyBNdWVydGVzIiwiUHJvbWVkaW8gQXNpc3RlbmNpYXMiLCJLRFIiKSklPiUgDQogICAgICAgIGNvbHVtbl9zcGVjKDEsIGJvbGQgPSBUUlVFLCBjb2xvciA9IG5lZ3JvKSAlPiUNCiAgcm93X3NwZWMoMCxiYWNrZ3JvdW5kID0gbmVncm8sIGNvbG9yID0gIndoaXRlIikgJT4lIA0KICAgIGFkZF9oZWFkZXJfYWJvdmUoYygiICIgPSAxLA0KICAgICAgICAgICAgICAgICAgICAgIkNpZnJhcyI9IDIsDQogICAgICAgICAgICAgICAgICAgICAiICIgPTEpKSAlPiUgDQogIGthYmxlX21pbmltYWwoKQ0KYGBgDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojSEFDRVIgVEFCTEEgQ09OIEtBQkxFDQoNCmthYmxlKEZlclBlcnNvbmFqZXNGaW5hbCxhbGlnbiA9ICJsIixkaWdpdHMgPSAzLGNvbC5uYW1lcyA9IGMoIlBlcnNvbmFqZSIsIlRvdGFsIiwiUHJvbWVkaW8gS2lsbHMiLCJQcm9tZWRpbyBNdWVydGVzIiwiUHJvbWVkaW8gQXNpc3RlbmNpYXMiLCJLRFIiKSklPiUgDQogICAgICAgIGNvbHVtbl9zcGVjKDEsIGJvbGQgPSBUUlVFLCBjb2xvciA9IG5lZ3JvKSAlPiUNCiAgcm93X3NwZWMoMCxiYWNrZ3JvdW5kID0gbmVncm8sIGNvbG9yID0gIndoaXRlIikgJT4lIA0KICAgIGFkZF9oZWFkZXJfYWJvdmUoYygiICIgPSAxLA0KICAgICAgICAgICAgICAgICAgICAgIlBlcnNvbmFqZXMiPSA0LA0KICAgICAgICAgICAgICAgICAgICAgIiAiID0xKSkgJT4lIA0KICBrYWJsZV9taW5pbWFsKCkNCmBgYA0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KI0hBQ0VSIFRBQkxBIENPTiBLQUJMRQ0KDQojIGthYmxlKEZlclBlck1hcGFGaW5hbCxhbGlnbiA9ICJsIixkaWdpdHMgPSAzLGNvbC5uYW1lcyA9IGMoIk1hcGEiLCJQZXJzb25hamUiLCJUb3RhbCIsIlByb21lZGlvIEtpbGxzIiwiUHJvbWVkaW8gTXVlcnRlcyIsIlByb21lZGlvIEFzaXN0ZW5jaWFzIiwiS0RSIikpJT4lIA0KIyAgICAgICAgIGNvbHVtbl9zcGVjKDEsIGJvbGQgPSBUUlVFLCBjb2xvciA9IG5lZ3JvKSAlPiUNCiMgICByb3dfc3BlYygwLGJhY2tncm91bmQgPSBuZWdybywgY29sb3IgPSAid2hpdGUiKSAlPiUgDQojICAgICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiID0gMSwNCiMgICAgICAgICAgICAgICAgICAgICAgIlJlbmRpbWllbnRvIHNlZ8O6biBtYXBhIj0gNSwNCiMgICAgICAgICAgICAgICAgICAgICAgIiAiID0xKSkgJT4lIA0KIyAgIGthYmxlX3BhcGVyKCJob3ZlciIsaHRtbF9mb250ID0gIkNhbGlicmkiKQ0KYGBgDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojSEFDRVIgVEFCTEEgQ09OIEtBQkxFDQoNCmRhdGF0YWJsZShGZXJQZXJNYXBhRmluYWwsZmlsdGVyID0gJ3RvcCcsDQogICAgICAgICAgb3B0aW9ucyA9IGxpc3QoDQogIHNlYXJjaGluZyA9IFRSVUUsDQogIHBhZ2VMZW5ndGggPSAxNSwNCiAgaW5pdENvbXBsZXRlID0gSlMoDQogICAgImZ1bmN0aW9uKHNldHRpbmdzLCBqc29uKSB7IiwNCiAgICAiJCgnYm9keScpLmNzcyh7J2ZvbnQtZmFtaWx5JzogJ0NhbGlicmknfSk7IiwNCiAgICAifSINCikpKSAlPiUgDQogIGZvcm1hdFJvdW5kKGMoIlByb21lZGlvX0tpbGxzIiwiUHJvbWVkaW9fTXVlcnRlcyIsIlByb21lZGlvX0FzaXN0ZW5jaWFzIiwiS0RSIiksMikNCg0KDQoNCg0KYGBgDQoNCg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCg0KVGFibGFHIDwtIEJhc2UgJT4lDQogIGZpbHRlcihFcXVpcG8gPT0gInBpZWxkZXBvciIpICU+JQ0KICBmaWx0ZXIoSnVnYWRvciA9PSAiRG9jIikgJT4lDQogIHNlbGVjdChGZWNoYSxLLEQsQSxLRFIpICU+JQ0KICBncm91cF9ieShGZWNoYSkgJT4lDQogIHN1bW1hcmlzZShLaWxscyA9IHJvdW5kKG1lYW4oSyksMiksDQogICAgICAgICAgICBEZWF0aHMgPSByb3VuZChtZWFuKEQpLDIpLA0KICAgICAgICAgICAgS0RScCA9IHJvdW5kKG1lYW4oS0RSKSwyKSkgJT4lDQogIG11dGF0ZShLaWxsc0FjdW0gPSByb3VuZChjdW1tZWFuKEtpbGxzKSwyKSwNCiAgICAgICAgIERlYXRoc0FjdW0gPSByb3VuZChjdW1tZWFuKERlYXRocyksMiksDQogICAgICAgICBLRFJBY3VtID0gcm91bmQoY3VtbWVhbihLRFJwKSwyKSkNCg0KI0dyw6FmaWNvIDENCg0KcDMgPC0gcGxvdF9seShUYWJsYUcseCA9IH5GZWNoYSklPiUNCiAgYWRkX3RyYWNlKHkgPSB+S2lsbHMsbW9kZSA9ICJsaW5lcyttYXJrZXJzIiwgbmFtZSA9ICJraWxscyIsIGxpbmUgPSBsaXN0KGNvbG9yID0gIiMyNzI2NDMiKSxtYXJrZXIgPSBsaXN0KGNvbG9yID0gIiMyNzI2NDMiKSkgJT4lDQogIGFkZF90cmFjZSh5ID0gfktpbGxzQWN1bSxtb2RlID0gImxpbmVzK21hcmtlcnMiLCBuYW1lID0gImtpbGxzQWN1bSIsIGxpbmUgPSBsaXN0KGNvbG9yID0gIiMyYzY5OGQiKSxtYXJrZXIgPSBsaXN0KGNvbG9yID0gIiMyYzY5OGQiKSkNCg0KDQojR3LDoWZpY28gMg0KDQpwNCA8LSBwbG90X2x5KFRhYmxhRyx4ID0gfkZlY2hhKSU+JQ0KICBhZGRfdHJhY2UoeSA9IH5EZWF0aHMsbW9kZSA9ICJsaW5lcyttYXJrZXJzIiwgbmFtZSA9ICJEZWF0aHMiLCBsaW5lID0gbGlzdChjb2xvciA9ICIjZjU1OTUxIiksbWFya2VyID0gbGlzdChjb2xvciA9ICIjZjU1OTUxIikpICU+JQ0KICBhZGRfdHJhY2UoeSA9IH5EZWF0aHNBY3VtLG1vZGUgPSAibGluZXMrbWFya2VycyIsIG5hbWUgPSAiRGVhdGhzQWN1bSIsIGxpbmUgPSBsaXN0KGNvbG9yID0gIiM4MDBlMGQiKSxtYXJrZXIgPSBsaXN0KGNvbG9yID0gIiM4MDBlMGQiKSkNCg0KI0dyw6FmaWNvIDMNCg0KcDUgPC0gcGxvdF9seShUYWJsYUcseCA9IH5GZWNoYSklPiUNCiAgYWRkX3RyYWNlKHkgPSB+S0RScCxtb2RlID0gImxpbmVzK21hcmtlcnMiLCBuYW1lID0gIktEUiIsIGxpbmUgPSBsaXN0KGNvbG9yID0gIiM5NWFkYmUiKSxtYXJrZXIgPSBsaXN0KGNvbG9yID0gIiM5NWFkYmUiKSkgJT4lDQogIGFkZF90cmFjZSh5ID0gfktEUkFjdW0sbW9kZSA9ICJsaW5lcyttYXJrZXJzIiwgbmFtZSA9ICJLRFJBY3VtIiwgbGluZSA9IGxpc3QoY29sb3IgPSAiIzU3NGY3ZCIpLG1hcmtlciA9IGxpc3QoY29sb3IgPSAiIzU3NGY3ZCIpKQ0KDQoNCg0KDQpmaWcgPC0gc3VicGxvdChwMyxwNCxwNSxucm93cyA9IDMsIHNoYXJlWCA9IFRSVUUsIG1hcmdpbiA9IDAuMDUpICU+JQ0KICBsYXlvdXQoYW5ub3RhdGlvbnMgPSBsaXN0KA0KICAgIGxpc3QoeCA9IDAuNSAsIHkgPSAxLjA1ICx0ZXh0ID0gIktpbGxzIiwgc2hvd2Fycm93ID0gRix4cmVmPSdwYXBlcicsIHlyZWY9J3BhcGVyJyksDQogICAgbGlzdCh4ID0gMC41ICwgeSA9IDAuNyx0ZXh0ID0gIkRlYXRocyIsc2hvd2Fycm93ID0gRix4cmVmPSdwYXBlcicsIHlyZWY9J3BhcGVyJyksDQogICAgbGlzdCh4ID0gMC41ICwgeSA9IDAuMyAsIHkgPSAyNSx0ZXh0ID0gIktEUiIsc2hvd2Fycm93ID0gRix4cmVmPSdwYXBlcicsIHlyZWY9J3BhcGVyJykNCiAgKSkNCg0KZmlnDQoNCg0KDQoNCmBgYA0KDQpSZW5kaW1pZW50byBzZWfDum4gbWFwYQ0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KVGFibGFfMmYgPC0gQmFzZUZlciAlPiUgDQogIHNlbGVjdChFc2NlbmFyaW8sUmVzdWx0YWRvKSAlPiUNCiAgZmlsdGVyKCFpcy5uYShFc2NlbmFyaW8pKSAlPiUNCiAgZ3JvdXBfYnkoRXNjZW5hcmlvLFJlc3VsdGFkbykgJT4lIA0KICBzdW1tYXJpc2UoVG90YWwgPSBuKCkpICU+JSANCiAgbXV0YXRlKFBvcmNlbnRhamUgPSByb3VuZChUb3RhbC9zdW0oVG90YWwpKjEwMCwyKSkgJT4lIA0KICBtdXRhdGUoRXRpcXVldGEgPSBwYXN0ZTAoVG90YWwsICIgKCAlICIsIFBvcmNlbnRhamUsICIpIikpIA0KDQoNClRhYmxhYXV4IDwtIFRhYmxhXzJmICU+JSANCiAgc2VsZWN0KEVzY2VuYXJpbykgJT4lIA0KICBmaWx0ZXIoIWR1cGxpY2F0ZWQoRXNjZW5hcmlvKSkNCg0KZmlsYXMgPC0gbnJvdyhUYWJsYWF1eCkNCg0KZ2dwbG90KFRhYmxhXzJmLCBhZXMoeCA9ICIiICwgeSA9IFRvdGFsLCBmaWxsID0gUmVzdWx0YWRvICkpKw0KICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5Iiwgd2lkdGggPSAzKSsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IEV0aXF1ZXRhKSwgcG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IDAuNSksIHNpemUgPTMuNSwgY29sb3IgPSBibGFuY28pKw0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKG5lZ3JvLCBncmlzMixncmlzMSkpKw0KICAgIGxhYnModGl0bGUgPSBwYXN0ZTAoIkRhdG9zIFZhbG9yYW50IFBEIFRhbmd1aXRvODQgIixmZWNoYWluaSwgIiAtICIsIGZlY2hhZmluKSwNCiAgICAgICBzdWJ0aXRsZSA9ICJSZXN1bWVuIFJlc3VsdGFkbyBzZWfDum4gbWFwYSIsDQogICAgICAgY2FwdGlvbiA9ICJGdWVudGU6IEVsYWJvcmFjacOzbiBwcm9waWEiLA0KICAgICAgIHggPSAiIiwNCiAgICAgICB5ID0gIiIpKw0KICB0aGVtZV9taW5pbWFsKCkrDQogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIHZqdXN0ID0gMC41KSwNCiAgICAgICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dCggaGp1c3QgPSAwLjUsIHZqdXN0ID0gMC41KSwNCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIsDQogICAgICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSkrDQogIGd1aWRlcyhmaWxsID0gZ3VpZGVfbGVnZW5kKHJldmVyc2UgPSBUUlVFKSkrDQogIGNvb3JkX2ZsaXAoKSsNCiAgZmFjZXRfd3JhcCh+RXNjZW5hcmlvLCBucm93ID0gZmlsYXMpDQpgYGANCg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCg0KDQpwZjEgPC0gZ2dwbG90KEJhc2VGZXIsIGFlcyh4ID0gRmVjaGEsIHkgPSBLLCBjb2xvciA9IFBlcnNvbmFqZSx0ZXh0ID0gcGFzdGUwKCJSZXN1bHRhZG86ICIsUmVzdWx0YWRvLCJcbk1hcGE6ICIsRXNjZW5hcmlvLCJcbktEUiA6ICIsS0RSKSkpKw0KICAgICAgICAgICAgICAgICAgICBnZW9tX3BvaW50KCkrDQogIGxhYnModGl0bGUgPSBwYXN0ZTAoIkRhdG9zIFZhbG9yYW50IEtpbGxzIFBEIFRhbmd1aXRvODQgIixmZWNoYWluaSwgIiAtICIsIGZlY2hhZmluKSwNCiAgICAgICBzdWJ0aXRsZSA9ICJEdXJhY2nDs24gZGUgcGFydGlkYXMgc2Vnw7puIHJlc3VsdGFkbyIsDQogICAgICAgY2FwdGlvbiA9ICJGdWVudGU6IEVsYWJvcmFjacOzbiBwcm9waWEiLA0KICAgICAgIHggPSAiIiwNCiAgICAgICB5ID0gIktpbGxzIikrDQogIHRoZW1lX21pbmltYWwoKSsNCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dCggaGp1c3QgPSAwLjUgLCB2anVzdCA9IDAuNSksDQogICAgICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoIGhqdXN0ID0gMC41ICwgdmp1c3QgPSAwLjUpKQ0KDQpmaWc0IDwtIGdncGxvdGx5KHBmMSkNCg0KZmlnNA0KICAgICAgICAgICAgICAgICAgDQoNCg0KDQpgYGANCg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCg0KI0dSQUZJQ08gQ09OIFNFTEVDVE9SIC0tLS0tLS0tLS0tLS0tLS0tLS0gUkVWSVNBUiEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISENCiMgZmlnIDwtIHBsb3RfbHkoZGF0YSA9IEJhc2VGZXIsIGNvbG9yID0gflBlcnNvbmFqZSkgJT4lDQojICAgYWRkX3RyYWNlKHg9fkZlY2hhLCB5PX5LLA0KIyAgICAgICAgICAgICB0cmFuc2Zvcm1zID0gbGlzdCgNCiMgICAgICAgICAgICAgICBsaXN0KA0KIyAgICAgICAgICAgICAgICAgdHlwZSA9ICJmaWx0ZXIiLA0KIyAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gfkVzY2VuYXJpbywNCiMgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9ICc9JywNCiMgICAgICAgICAgICAgICAgIHZhbHVlID0gdW5pcXVlKEJhc2VGZXIkRXNjZW5hcmlvKQ0KIyAgICAgICAgICAgICAgICkNCiMgICAgICAgICAgICAgKQ0KIyAgICkgJT4lDQojICAgbGF5b3V0KA0KIyAgICAgdXBkYXRlbWVudXMgPSBsaXN0KA0KIyAgICAgICBsaXN0KA0KIyAgICAgICAgIHR5cGUgPSAnZHJvcGRvd24nLA0KIyAgICAgICAgIGFjdGl2ZSA9IC0xLA0KIyAgICAgICAgIGJ1dHRvbnMgPSBsaXN0KA0KIyAgICAgICAgICAgbGlzdChtZXRob2QgPSAicmVzdHlsZSIsDQojICAgICAgICAgICAgICAgIGFyZ3MgPSBsaXN0KCJ0cmFuc2Zvcm1zWzBdLnZhbHVlIiwgdW5pcXVlKEJhc2VGZXIkRXNjZW5hcmlvKVsxXSksDQojICAgICAgICAgICAgICAgIGxhYmVsID0gIkJpbmQiKSwNCiMgICAgICAgICAgIGxpc3QobWV0aG9kID0gInJlc3R5bGUiLA0KIyAgICAgICAgICAgICAgICBhcmdzID0gbGlzdCgidHJhbnNmb3Jtc1swXS52YWx1ZSIsIHVuaXF1ZShCYXNlRmVyJEVzY2VuYXJpbylbMl0pLA0KIyAgICAgICAgICAgICAgICBsYWJlbCA9ICJBc2NlbnQiKSwNCiMgICAgICAgICAgIGxpc3QobWV0aG9kID0gInJlc3R5bGUiLA0KIyAgICAgICAgICAgICAgICBhcmdzID0gbGlzdCgidHJhbnNmb3Jtc1swXS52YWx1ZSIsIHVuaXF1ZShCYXNlRmVyJEVzY2VuYXJpbylbM10pLA0KIyAgICAgICAgICAgICAgICBsYWJlbCA9ICJIYXZlbiIpLA0KIyAgICAgICAgICAgbGlzdChtZXRob2QgPSAicmVzdHlsZSIsDQojICAgICAgICAgICAgICAgIGFyZ3MgPSBsaXN0KCJ0cmFuc2Zvcm1zWzBdLnZhbHVlIiwgdW5pcXVlKEJhc2VGZXIkRXNjZW5hcmlvKVs0XSksDQojICAgICAgICAgICAgICAgIGxhYmVsID0gIlNwbGl0IiksDQojICAgICAgICAgICBsaXN0KG1ldGhvZCA9ICJyZXN0eWxlIiwNCiMgICAgICAgICAgICAgICAgYXJncyA9IGxpc3QoInRyYW5zZm9ybXNbMF0udmFsdWUiLCB1bmlxdWUoQmFzZUZlciRFc2NlbmFyaW8pWzVdKSwNCiMgICAgICAgICAgICAgICAgbGFiZWwgPSAiQnJlZXplIiksDQojICAgICAgICAgICBsaXN0KG1ldGhvZCA9ICJyZXN0eWxlIiwNCiMgICAgICAgICAgICAgICAgYXJncyA9IGxpc3QoInRyYW5zZm9ybXNbMF0udmFsdWUiLCB1bmlxdWUoQmFzZUZlciRFc2NlbmFyaW8pWzZdKSwNCiMgICAgICAgICAgICAgICAgbGFiZWwgPSAiSWNlYm94IikNCiMgICAgICAgICApDQojICAgICAgICkNCiMgICAgICkNCiMgICApDQojIGZpZw0KIyANCg0KDQoNCmBgYA0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KDQoNCnBmIDwtIGdncGxvdChCYXNlRmVyLCBhZXMoeCA9IEZlY2hhLCB5ID0gSywgY29sb3IgPSBQZXJzb25hamUpKSsNCiAgICAgICAgICAgICAgICAgICAgZ2VvbV9wb2ludCgpKw0KICBsYWJzKHRpdGxlID0gcGFzdGUwKCJLaWxscyBQRCBQRCBUYW5ndWl0bzg0IHNlZ8O6biBtYXBhICIsZmVjaGFpbmksICIgLSAiLCBmZWNoYWZpbiksDQogICAgICAgc3VidGl0bGUgPSAiRHVyYWNpw7NuIGRlIHBhcnRpZGFzIHNlZ8O6biByZXN1bHRhZG8iLA0KICAgICAgIGNhcHRpb24gPSAiRnVlbnRlOiBFbGFib3JhY2nDs24gcHJvcGlhIiwNCiAgICAgICB4ID0gIiIsDQogICAgICAgeSA9ICJLaWxscyIpKw0KICB0aGVtZV9taW5pbWFsKCkrDQogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoIGhqdXN0ID0gMC41ICwgdmp1c3QgPSAwLjUpLA0KICAgICAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KCBoanVzdCA9IDAuNSAsIHZqdXN0ID0gMC41KSkrDQogIGZhY2V0X3dyYXAofkVzY2VuYXJpbywgbmNvbCA9IDIpDQoNCmZpZzMgPC0gZ2dwbG90bHkocGYpDQoNCmZpZzMNCiAgICAgICAgICAgICAgICAgIA0KDQoNCg0KYGBgDQoNCkdyw6FmaWNvIFBvbGFyDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQoNCmxpc3RhZmVyIDwtIGMobWVhbihCYXNlRmVyJEspLG1lYW4oQmFzZUZlciREKSxtZWFuKEJhc2VGZXIkQSksbWVhbihCYXNlRmVyJEtEUikpDQoNCmZpZzUgPC0gcGxvdF9seSgNCiAgdHlwZSA9ICJzY2F0dGVycG9sYXIiLA0KICByID0gbGlzdGFmZXIsDQogIHRoZXRhID0gYygiS2lsbHMiLCJNdWVydGVzIiwiQXNpc3RlbmNpYSIsIktEUiIpLA0KICBmaWxsID0gInRvc2VsZiINCikNCmZpZzUgPC0gZmlnNSAlPiUNCiAgbGF5b3V0KA0KICAgIHBvbGFyID0gbGlzdCgNCiAgICAgIHJhZGlhbGF4aXMgPSBsaXN0KA0KICAgICAgICB2aXNpYmxlID0gVCwNCiAgICAgICAgcmFuZ2UgPSBjKDAsMzApDQogICAgICApDQogICAgKSwNCiAgICBzaG93bGVnZW5kID0gRg0KICApDQoNCg0KZmlnNQ0KYGBgDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQoNClRhYmxhXzQgPC0gQmFzZUZlciAlPiUNCiAgZmlsdGVyKEVxdWlwbyA9PSAicGllbGRlcG9yIikgJT4lIA0KICBzZWxlY3QoRmVjaGEsRXNjZW5hcmlvLEtEUikgJT4lDQogIGdyb3VwX2J5KEZlY2hhLEVzY2VuYXJpbykgJT4lIA0KICBzdW1tYXJpc2UoS0RSID0gbWVhbihLRFIpKQ0KDQoNCmZpZzEgPC0gZ2dwbG90KFRhYmxhXzQsIGFlcyh4ID0gRmVjaGEsIHkgPSBLRFIpKSsgI3NlbGVjY2lvbmFtb3MgdmFyaWFibGVzIGEgZ3JhZmljYXIgeSBhIGNvbG9yZWFyDQogIGdlb21fbGluZSgpKyANCiAgZ2VvbV9wb2ludCgpKw0KICAjIGdlb21fc21vb3RoKG1ldGhvZCA9ICdsb2VzcycsDQogICMgICAgICAgICAgICAgZm9ybXVsYSA9ICd5IH4geCcpKw0KICBsYWJzKHRpdGxlID1wYXN0ZTAoIktEUiBTZWfDum4gZmVjaGEgUEQgIixmZWNoYWluaSwgIiAtICIsIGZlY2hhZmluKSwNCiAgICAgICBzdWJ0aXRsZSA9ICJLRFIgUHJvbWVkaW8gc2Vnw7puIGZlY2hhIiwNCiAgICAgICBjYXB0aW9uID0gIkZ1ZW50ZTogRWxhYm9yYWNpw7NuIHByb3BpYSIsDQogICAgICAgeCA9ICJGZWNoYSIsDQogICAgICAgeSA9ICJLRFIiKSsNCiAgI3NjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCIjMWFjMGM2IiwgIiNlNzQ2NDUiLCIjZmFjZDYwIikpKyAjY29sb3JlYW1vcyBsYXMgbGluZWFzDQogIHRoZW1lX21pbmltYWwoKSsNCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dCggaGp1c3QgPSAwLjUgLCB2anVzdCA9IDAuNSksIA0KICAgICAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KCBoanVzdCA9IDAuNSAsIHZqdXN0ID0gMC41KSkrDQogIGZhY2V0X3dyYXAofkVzY2VuYXJpbykNCg0KZmlnMSA8LSBnZ3Bsb3RseShmaWcxKQ0KIA0KZmlnMQ0KDQpgYGANCg==