Análisis de la VANCAN

Total de perros vacunados por Microred

Total de perros vacunados por Cluster

CLUSTER 1: Puntos Optimizados propuestos vs Puntos Ejecutados

Cuadro resumen de la VANCAN en general por punto de vacunacion

Total perros vacunados Promedio perros vacunados (PPV) PPV en puntos OPT PPV en puntos NO OPT PPV en punto fijo PPV en punto movil PPV en punto mixto PPV en punto planificado PPV en punto NO planificado Total de brigadas Total de horas trabajados Promedio de horas trabajadas
105232 63.3 64.2 63.1 64.6 61.6 64.3 63.6 62.7 1663 6967 4.2

Cuadro resumen de la VANCAN por cluster

Cluster Total perros vacunados Promedio perros vacunados (PPV) PPV en puntos OPT PPV en puntos NO OPT PPV en punto fijo PPV en punto movil PPV en punto mixto PPV en punto planificado PPV en punto NO planificado Total de brigadas Promedio de horas trabajadas
01 - Socabaya 4742 65.0 75.3 60.2 64.7 55.6 71.6 65.1 64.5 73 4.4
02 - J L Garcia( Hunter) 5794 78.3 76.4 79.4 84.9 81.0 62.9 83.7 63.7 74 5.0
03 - V R Hinojosa (Bustamante) 4172 41.7 41.4 42.1 42.0 45.2 39.0 45.2 37.5 100 4.6
04 - Buenos Aires 4648 60.4 NaN 60.4 44.0 60.6 56.0 59.9 63.2 77 4.0
05 - F Bolognesi 4930 67.5 NaN 67.5 70.5 61.1 62.5 67.9 66.6 73 4.8
06 - ASA 1 Norte 2580 66.2 69.0 64.0 75.7 54.4 63.5 70.3 61.3 39 4.3
07 - ASA 2 Centro 2435 71.6 NaN 71.6 78.6 59.4 89.0 72.2 70.1 34 4.7
08 - ASA 3 SurO 1 2666 74.1 72.9 74.8 65.0 77.5 76.7 70.4 77.3 36 4.8
09 - ASA 4 SurO 2 2432 67.6 NaN 67.6 71.0 65.3 71.3 59.4 77.8 36 4.3
10 - Yanahuara 724 31.5 NaN 31.5 36.2 25.1 27.0 32.0 30.3 23 4.2
11 - E Misti 1 Oeste 2036 61.7 NaN 61.7 48.2 70.3 48.6 62.3 60.9 33 4.5
12 - E Misti 2 Este 2389 58.3 NaN 58.3 54.5 67.0 33.0 63.4 48.3 41 4.4
13 - G S Martin 2775 57.8 NaN 57.8 60.2 55.2 NaN 57.8 57.8 48 4.2
14 - M Melgar 2659 55.4 NaN 55.4 33.0 55.9 NaN 55.5 54.8 48 4.0
15 - Sachaca 2203 51.2 46.3 59.6 48.6 67.1 45.8 52.3 48.9 43 4.3
16 - 15 de agosto 5301 70.7 72.7 68.0 75.3 62.1 67.5 71.4 65.3 75 4.7
17 - Paucarpata 4073 58.2 76.0 57.9 57.5 58.4 60.0 56.2 63.5 70 4.2
18 - Ciudad Blanca 4229 54.9 NaN 54.9 57.1 73.5 48.8 64.0 50.0 77 4.3
19 - CDD 1 Este 2280 51.8 54.0 47.5 56.5 48.8 37.0 51.4 53.3 44 3.9
20 - CDD 2 Centro 1441 36.9 NaN 36.9 50.0 36.6 NaN 38.0 32.0 39 3.3
21 - C Colorado 3541 72.3 NaN 72.3 75.1 38.0 69.1 83.5 69.4 49 4.2
22 - Zam 6 SurEste 5117 68.2 NaN 68.2 64.9 69.2 62.0 72.1 65.2 75 3.8
23 - Zam 1 Norte 2438 81.3 NaN 81.3 71.8 105.0 84.6 74.7 84.1 30 3.5
24 - Zam 2 CentroEste 3839 85.3 87.6 84.6 62.5 95.0 94.5 49.9 91.8 45 3.7
25 - Zam 3 Centro 2480 70.9 NaN 70.9 72.5 60.0 66.0 71.9 69.1 35 3.6
26 - Zam 4 CentroOeste 2594 81.1 104.2 75.7 82.8 73.7 NaN 80.9 81.3 32 3.6
27 - Zam 5 SurOeste 4161 57.0 NaN 57.0 46.3 57.3 76.9 58.9 54.9 73 3.2
28 - M Castilla 5463 58.7 NaN 58.7 59.5 37.1 67.4 55.0 60.7 93 3.6
29 - Tiabaya-Uch 3890 79.4 NaN 79.4 NaN 79.4 NaN 83.5 55.0 49 4.3
30 - Characato-Sab 3393 70.7 NaN 70.7 75.6 69.9 59.9 73.7 66.5 48 4.4
31 - Mollebaya-Que 3506 79.7 80.6 78.8 93.4 82.4 49.6 86.3 70.2 44 4.4
32 - CDD 3 Oeste (Yura) 301 43.0 NaN 43.0 NaN 43.0 NaN 43.0 NaN 7 2.7

Distribución de datos de perros vacunados y demás indicadores

## Warning: Groups with fewer than two datapoints have been dropped.
## ℹ Set `drop = FALSE` to consider such groups for position adjustment purposes.

Ratios espaciales

Cuadro resumen de la VANCAN por Microred

Microred Total perros vacunados Promedio perros vacunados por punto Total de brigadas Total de horas trabajados Promedio de horas trabajados
15 de Agosto 5301 70.7 75 352.8 4.7
ASA 10113 69.7 145 650.8 4.5
B Aires 4648 60.4 77 311.1 4.0
C Blanca 4229 54.9 77 329.0 4.3
C Colorado 3541 72.3 49 203.9 4.2
C de Dios 4022 44.7 90 318.3 3.5
Characato 6899 75.0 92 407.4 4.4
E Misti 4425 59.8 74 329.4 4.5
F Bolognesi 4930 67.5 73 353.3 4.8
G San Martin 2775 57.8 48 201.1 4.2
Hunter 5794 78.3 74 369.2 5.0
M Castilla 5463 58.7 93 337.4 3.6
M Melgar 2659 55.4 48 193.5 4.0
Paucarpata 4073 58.2 70 297.5 4.2
Socabaya 4742 65.0 73 323.4 4.4
Tiabaya 3890 79.4 49 212.9 4.3
V R Hinojosa 4172 41.7 100 460.3 4.6
Yanahuara 2927 44.3 66 279.6 4.2
Zamacola 20629 71.1 290 1036.1 3.6
LS0tDQp0aXRsZTogIkRBVEEgQlJJR0FEQSBERSBWQUNVTkFDScOTTiAyMDIzIg0KYXV0aG9yOiAiRXF1aXBvIEVuY3Vlc3RhcyINCmRhdGU6ICIyMDI0LTA1LTEzIg0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIHRvYzogVFJVRQ0KICAgIHRvY19mbG9hdDogVFJVRQ0KICAgIGNvZGVfZG93bmxvYWQ6IFRSVUUNCiAgICB0aGVtZTogdW5pdGVkDQotLS0NCg0KIyAqKkFuw6FsaXNpcyBkZSBsYSBWQU5DQU4qKg0KDQoNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0V9DQoNCnJtKGxpc3Q9bHMoKSkNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KHdyaXRleGwpDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShsZWFmbGV0KQ0KbGlicmFyeShsdWJyaWRhdGUpDQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KHJpbykNCiNpbnN0YWxsLnBhY2thZ2VzKCJEVCIpDQpsaWJyYXJ5KERUKQ0KbGlicmFyeShqYW5pdG9yKQ0KI2luc3RhbGwucGFja2FnZXMoImdnbWFwIikNCmxpYnJhcnkoUkNvbG9yQnJld2VyKQ0KI2luc3RhbGwucGFja2FnZXMoInNmIikNCmxpYnJhcnkoc2YpDQpsaWJyYXJ5KGpzb25saXRlKQ0KbGlicmFyeShsZWFmbGV0LmV4dHJhcykNCiNpbnN0YWxsLnBhY2thZ2VzKCJrYWJsZUV4dHJhIikNCmxpYnJhcnkoa2FibGVFeHRyYSkNCmNhdCgiXDAxNCIpIA0KYGBgDQoNCg0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCg0KY2F0KCJcMDE0IikgIA0KDQojIyMjIyMjIyMjIyMjIyMjIw0KIyMjIERhdGEgQlJJR0FEQVMgDQoNCiMgTGVlIGxvcyBhcmNoaXZvcyBDU1YNCmRhdGEgPC0gaW1wb3J0KCJWQU5DQU5fMjAyM19CcmlnYWRhcy5SRFMiKSAlPiUgDQogIGNsZWFuX25hbWVzKCkNCg0KZGF0YSA8LSBkYXRhICU+JQ0KICBtdXRhdGUodmFuY2FuX2NhbiA9IHJvd1N1bXMoc2VsZWN0KC4sIHRvdGFsMV9jYW5fdmFjLCB0b3RhbDFfY2FuX3ZhY18yLCB0b3RhbDFfY2FuX3ZhY18zLCB0b3RhbDFfY2FuX3ZhY180LCBwbV90b3RhbF9jYW4pLCBuYS5ybSA9IFRSVUUpLA0KICAgICAgICAgaG9yYV9pbmljaW8gPSBhcy5QT1NJWGN0KGhvcmFfaW5pY2lvLCBmb3JtYXQgPSAiJUg6JU0iKSwNCiAgICAgICAgIGhvcmFfZmluYWwgPSBhcy5QT1NJWGN0KGhvcmFfZmluYWwsIGZvcm1hdCA9ICIlSDolTSIpLA0KICAgICAgICAgaG9yYXNfdG90YWwgPSBhcy5udW1lcmljKGRpZmZ0aW1lKGhvcmFfZmluYWwsIGhvcmFfaW5pY2lvLCB1bml0cyA9ICJob3VycyIpKSkNCg0KDQojIyMjIyMjIyMjIyMjIyMjIw0KIyMjIERhdGEgQ0xVU1RFUiANCg0KIyBMZWVyIGVsIGFyY2hpdm8gU2hhcGVmaWxlDQpjbHVzdGVyIDwtIHN0X3JlYWQoImNsdXN0ZXIvY2x1c3Rlci5zaHAiKQ0KbmFtZXMoY2x1c3RlcikgPC0gbWFrZS5uYW1lcyhuYW1lcyhjbHVzdGVyKSwgdW5pcXVlID0gVFJVRSkNCmNsdXN0ZXIgPC0gY2x1c3RlciAlPiUgbXV0YXRlKGNsdXN0ZXIgPSBzdWJzdHIoTmFtZSwgMSwgMikpDQpuYW1lcyhjbHVzdGVyKQ0Kc3RyKGNsdXN0ZXIpDQoNCg0KDQojIFZpc3VhbGl6YW5kbyBlbCBtYXBhIGRlIGNsdXN0ZXINCiNtYXBfY2x1c3RlciA8LSBsZWFmbGV0KGNsdXN0ZXIpICU+JQ0KIyAgYWRkVGlsZXMoKSAlPiUNCiMgIGFkZFBvbHlnb25zKA0KICMgICBmaWxsQ29sb3IgPSAiIzAwRkYwMCIsICAgIyBDb2xvciBkZSByZWxsZW5vIGRlbCBwb2zDrWdvbm8NCiMgICAgZmlsbE9wYWNpdHkgPSAwLjUsICAgICAgICMgT3BhY2lkYWQgZGVsIHJlbGxlbm8NCiMgICAgY29sb3IgPSAiIzQ0NDQ0NCIsICAgICAgICMgQ29sb3IgZGVsIGJvcmRlIGRlbCBwb2zDrWdvbm8NCiMgICAgd2VpZ2h0ID0gMSwgICAgICAgICAgICAgICMgR3Jvc29yIGRlbCBib3JkZQ0KIyAgICBwb3B1cCA9IH5wYXN0ZSgiTmFtZToiLCBOYW1lKSAgIyBQb3B1cCBtb3N0cmFuZG8gZWwgbm9tYnJlIGRlbCBwb2zDrWdvbm8NCiMgICkNCiNtYXBfY2x1c3Rlcg0KDQojIENhbGN1bGFubyDDoXJlYSBlbiBtZXRyb3MgY3VhZHJhZG9zIGRlIGNhc2EgY2x1c3Rlcg0KDQpjbHVzdGVyX3RyYW5zZm9ybWVkIDwtIHN0X3RyYW5zZm9ybShjbHVzdGVyLCBjcnMgPSAzMjcxOSkgIA0KDQojIENhbGN1bGFyIGVsIMOhcmVhIGVuIG1ldHJvcyBjdWFkcmFkb3MgeSBhw7FhZGlybG8gY29tbyB1bmEgbnVldmEgY29sdW1uYQ0KY2x1c3Rlcl90cmFuc2Zvcm1lZCA8LSBjbHVzdGVyX3RyYW5zZm9ybWVkICU+JQ0KICBtdXRhdGUoYXJlYSA9IHN0X2FyZWEoZ2VvbWV0cnkpKQ0KDQojIENvbnZlcnRpciBlbCDDoXJlYSBhIG7Dum1lcm9zDQpjbHVzdGVyX3RyYW5zZm9ybWVkIDwtIGNsdXN0ZXJfdHJhbnNmb3JtZWQgJT4lDQogIG11dGF0ZShhcmVhID0gYXMubnVtZXJpYyhhcmVhKSkNCg0KIyBWb2x2ZXIgYSB0cmFuc2Zvcm1hciBhbCBDUlMgb3JpZ2luYWwgKG9wY2lvbmFsLCBzaSBkZXNlYXMgbWFudGVuZXIgbGEgY29oZXJlbmNpYSBkZSB0dSBDUlMgb3JpZ2luYWwpDQpjbHVzdGVyIDwtIHN0X3RyYW5zZm9ybShjbHVzdGVyX3RyYW5zZm9ybWVkLCBjcnMgPSA0MzI2KQ0KDQojIFZlcmlmaWNhciBsYSBlc3RydWN0dXJhIGRlIGxvcyBkYXRvcw0KY2x1c3Rlcg0Kc3RyKGNsdXN0ZXIpDQoNCmNsdXN0ZXJfYXJlYSA8LSBjbHVzdGVyICU+JQ0KICBzdF9zZXRfZ2VvbWV0cnkoTlVMTCkgJT4lICAjIEVsaW1pbmFyIGxhIGNvbHVtbmEgZGUgZ2VvbWV0csOtYSBwYXJhIGNvbnZlcnRpciBhIGRhdGEgZnJhbWUNCiAgc2VsZWN0KGNsdXN0ZXIsIGFyZWEpDQoNCmNsdXN0ZXJfYXJlYQ0KDQojY2x1c3Rlcl9hcmVhIDwtIGFzLmRhdGEuZnJhbWUoY2x1c3RlcikNCiNzYXZlUkRTKGNsdXN0ZXJfYXJlYSwgImNsdXN0ZXJfYXJlYS5yZHMiKQ0Kcm0oY2x1c3Rlcl90cmFuc2Zvcm1lZCkNCg0KDQoNCiMjIyMjIyMjIyMjIyMjIyMjDQojIyMgQ0xVU1RFUiAxOiBEYXRhIHB1bnRvcyBvcHRpbWl6YWRvcyANCg0KcF9vcHRfYzEgPC0gaW1wb3J0KCJjbHVzdGVyL2NsdXN0ZXIxXzI1cHVudG9zXzUuMi4yMy5jc3YiKSAlPiUgIGNsZWFuX25hbWVzKCkNCnBfb3B0X2MyIDwtIGltcG9ydCgiY2x1c3Rlci9jbHVzdGVyMl8yNXB1bnRvc181LjQuMjMuY3N2IikgJT4lICBjbGVhbl9uYW1lcygpDQpwX29wdF9jM18xIDwtIGltcG9ydCgiY2x1c3Rlci9jbHVzdGVyM25vcnRlXzI1cHVudG9zXzUuMS4yMy5jc3YiKSAlPiUgIGNsZWFuX25hbWVzKCkNCnBfb3B0X2MzXzIgPC0gaW1wb3J0KCJjbHVzdGVyL2NsdXN0ZXIzc3VyXzI1cHVudG9zXzUuMS4yMy5jc3YiKSAlPiUgIGNsZWFuX25hbWVzKCkNCnBfb3B0X2M2IDwtIGltcG9ydCgiY2x1c3Rlci9jbHVzdGVyNl8xM3B1bnRvc181LjIuMjMuY3N2IikgJT4lICBjbGVhbl9uYW1lcygpDQpwX29wdF9jOCA8LSBpbXBvcnQoImNsdXN0ZXIvY2x1c3RlcjhfMTNwdW50b3NfNS4zLjIzLmNzdiIpICU+JSAgY2xlYW5fbmFtZXMoKQ0KcF9vcHRfYzE1XzEgPC0gaW1wb3J0KCJjbHVzdGVyL2NsdXN0ZXIxNV96b25hMV8xNXB1bnRvc181LjQuMjMuY3N2IikgJT4lICBjbGVhbl9uYW1lcygpDQpwX29wdF9jMTVfMiA8LSBpbXBvcnQoImNsdXN0ZXIvY2x1c3RlcjE1X3pvbmEyXzE1cHVudG9zXzUuNC4yMy5jc3YiKSAlPiUgIGNsZWFuX25hbWVzKCkNCnBfb3B0X2MxNV8zIDwtIGltcG9ydCgiY2x1c3Rlci9jbHVzdGVyMTVfem9uYTNfMTBwdW50b3NfNS40LjIzLmNzdiIpICU+JSAgY2xlYW5fbmFtZXMoKQ0KcF9vcHRfYzE2XzEgPC0gaW1wb3J0KCJjbHVzdGVyL2NsdXN0ZXIxNl96b25hMV8yMHB1bnRvc181LjUuMjMuY3N2IikgJT4lICBjbGVhbl9uYW1lcygpDQpwX29wdF9jMTZfMiA8LSBpbXBvcnQoImNsdXN0ZXIvY2x1c3RlcjE2X3pvbmEyXzIwcHVudG9zXzUuNS4yMy5jc3YiKSAlPiUgIGNsZWFuX25hbWVzKCkNCnBfb3B0X2MxOSA8LSBpbXBvcnQoImNsdXN0ZXIvY2x1c3RlcjE5X3B1bnRvc29wdGltaXphZG9zXzQuMjYuMjMuY3N2IikgJT4lICBjbGVhbl9uYW1lcygpDQpwX29wdF9jMjQgPC0gaW1wb3J0KCJjbHVzdGVyL2NsdXN0ZXIyNF8yNXB1bnRvc181LjE5LjIzLmNzdiIpICU+JSAgY2xlYW5fbmFtZXMoKQ0KcF9vcHRfYzI2IDwtIGltcG9ydCgiY2x1c3Rlci9jbHVzdGVyMjZfMjVwdW50b3NfNS4xOS4yMy5jc3YiKSAlPiUgIGNsZWFuX25hbWVzKCkNCnBfb3B0X2MzMV8xIDwtIGltcG9ydCgiY2x1c3Rlci9jbHVzdGVyMzF6b25hMV8xMnB1bnRvc3RvZG9zXzUuMjguMjMuY3N2IikgJT4lICBjbGVhbl9uYW1lcygpDQpwX29wdF9jMzFfMiA8LSBpbXBvcnQoImNsdXN0ZXIvY2x1c3RlcjMxem9uYTJfMTBwdW50b3N0b2Rvc181LjI4LjIzLmNzdiIpICU+JSAgY2xlYW5fbmFtZXMoKQ0KcF9vcHRfYzMxXzMgPC0gaW1wb3J0KCJjbHVzdGVyL2NsdXN0ZXIzMXpvbmEzXzlwdW50b3N0b2Rvc181LjI4LjIzLmNzdiIpICU+JSAgY2xlYW5fbmFtZXMoKQ0KDQoNCnBfb3B0X2FsbCA8LSBiaW5kX3Jvd3MoDQogIHBfb3B0X2MxLCBwX29wdF9jMiwgcF9vcHRfYzNfMSwgcF9vcHRfYzNfMiwgcF9vcHRfYzYsIHBfb3B0X2M4LA0KICBwX29wdF9jMTVfMSwgcF9vcHRfYzE1XzIsIHBfb3B0X2MxNV8zLCBwX29wdF9jMTZfMSwgcF9vcHRfYzE2XzIsDQogIHBfb3B0X2MxOSwgcF9vcHRfYzI0LCBwX29wdF9jMjYsIHBfb3B0X2MzMV8xLCBwX29wdF9jMzFfMiwgcF9vcHRfYzMxXzMNCikNCg0KIyBWZXJpZmljYXIgbGEgbnVldmEgYmFzZSBkZSBkYXRvcyBjb21iaW5hZGENCiNnbGltcHNlKHBfb3B0X2FsbCkNCg0KDQoNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KIyMjIE9QRVJBQ0nDk04gMTogSWRlbmZpY2ljYW5kbyBlbCBjbHVzdGVyIGxvcyBkYXRvcyBkZSBCUklHQURBUyBhIHBhcnRpciBkZSBsYSBkYXRhIGVzcGFjaWFsIENMVVNURVINCnN0cihjbHVzdGVyKQ0Kc3RyKGRhdGEpDQoNCmRhdGFfc2YgPC0gc3RfYXNfc2YoZGF0YSwgY29vcmRzID0gYygibG9uZ2l0dWRfZiIsICJsYXRpdHVkX2YiKSwgY3JzID0gNDMyNikNCmRhdGFfam9pbmVkIDwtIHN0X2pvaW4oZGF0YV9zZiwgY2x1c3RlclsiY2x1c3RlciJdKQ0KZ2xpbXBzZShkYXRhKQ0KZ2xpbXBzZShkYXRhX2pvaW5lZCkNCm5hbWVzKGRhdGFfam9pbmVkKQ0KDQojZGF0YV9qb2luZWQNCmRhdGFfam9pbmVkIDwtIGRhdGFfam9pbmVkICU+JQ0KICBtdXRhdGUobG9uZ2l0dWRfZiA9IHN0X2Nvb3JkaW5hdGVzKC4pWywxXSwNCiAgICAgICAgIGxhdGl0dWRfZiA9IHN0X2Nvb3JkaW5hdGVzKC4pWywyXSkNCg0KZGF0YSA8LSBhcy5kYXRhLmZyYW1lKGRhdGFfam9pbmVkKQ0Kcm0oZGF0YV9qb2luZWQsIGRhdGFfc2YpDQojZ2xpbXBzZShkYXRhKQ0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojIyMgT1BFUkFDScOTTiAyOiBJZGVuZmljaWNhbmRvIHNpIGxvcyBwdW50b3MgZGUgdmFjdW5hY2nDs24gZnVlcm9uIG8gbm8gb3B0aW1pemFkb3MNCg0KDQojIENvbnZlcnRpciBkYXRhIGEgb2JqZXRvIHNmDQpnbGltcHNlKGRhdGEpDQpkYXRhX3NmIDwtIHN0X2FzX3NmKGRhdGEsIGNvb3JkcyA9IGMoImxvbmdpdHVkX2YiLCAibGF0aXR1ZF9mIiksIGNycyA9IDQzMjYpDQpkYXRhX3NmIDwtIGRhdGFfc2YgJT4lDQogIG11dGF0ZShsb25naXR1ZF9mID0gc3RfY29vcmRpbmF0ZXMoLilbLDFdLA0KICAgICAgICAgbGF0aXR1ZF9mID0gc3RfY29vcmRpbmF0ZXMoLilbLDJdKQ0KDQojIENvbnZlcnRpciBwX29wdF9jMSBhIG9iamV0byBzZg0KcF9vcHRfYWxsX3NmIDwtIHN0X2FzX3NmKHBfb3B0X2FsbCwgY29vcmRzID0gYygibG9uZyIsICJsYXQiKSwgY3JzID0gNDMyNikNCg0KIyBUcmFuc2Zvcm1hciBhIHVuYSBwcm95ZWNjacOzbiBtw6l0cmljYSAocG9yIGVqZW1wbG8sIFVUTSkgcGFyYSBtZWRpciBkaXN0YW5jaWFzIGVuIG1ldHJvcw0KZGF0YV9zZiA8LSBzdF90cmFuc2Zvcm0oZGF0YV9zZiwgY3JzID0gMzI2MTkpDQpwX29wdF9hbGxfc2YgPC0gc3RfdHJhbnNmb3JtKHBfb3B0X2FsbF9zZiwgY3JzID0gMzI2MTkpDQoNCiMgQ3JlYXIgdW4gYnVmZmVyIGRlIDUwIG1ldHJvcyBhbHJlZGVkb3IgZGUgbG9zIHB1bnRvcyBvcHRpbWl6YWRvcw0KcF9vcHRfYWxsX3NmX2J1ZmZlcl8xMDAgPC0gc3RfYnVmZmVyKHBfb3B0X2FsbF9zZiwgZGlzdCA9IDEwMCkNCnBfb3B0X2FsbF9zZl9idWZmZXJfNTAgPC0gc3RfYnVmZmVyKHBfb3B0X2FsbF9zZiwgZGlzdCA9IDUwKQ0KDQojIFZlcmlmaWNhciBzaSBsb3MgcHVudG9zIGRlIHZhY3VuYWNpw7NuIGVzdMOhbiBkZW50cm8gZGUgbG9zIGJ1ZmZlcnMNCmRhdGFfc2YkcG9pbnRfb3B0XzEwMCA8LSBpZmVsc2Uoc3RfaW50ZXJzZWN0cyhkYXRhX3NmLCBwX29wdF9hbGxfc2ZfYnVmZmVyXzEwMCwgc3BhcnNlID0gRkFMU0UpICU+JSByb3dTdW1zKCkgPiAwLCAiU2kiLCAiTm8iKQ0KZGF0YV9zZiRwb2ludF9vcHRfNTAgPC0gaWZlbHNlKHN0X2ludGVyc2VjdHMoZGF0YV9zZiwgcF9vcHRfYWxsX3NmX2J1ZmZlcl81MCwgc3BhcnNlID0gRkFMU0UpICU+JSByb3dTdW1zKCkgPiAwLCAiU2kiLCAiTm8iKQ0KIyBDb252ZXJ0aXIgZGUgbnVldm8gYSBkYXRhLmZyYW1lDQoNCmRhdGEgPC0gYXMuZGF0YS5mcmFtZShkYXRhX3NmKQ0Kcm0oZGF0YV9zZiwgcF9vcHRfYWxsX3NmLCBwX29wdF9hbGxfc2ZfYnVmZmVyXzEwMCwgcF9vcHRfYWxsX3NmX2J1ZmZlcl81MCkNCiMgVmVyaWZpY2FjacOzbiBmaW5hbA0KI3RhYmxlKGRhdGEkcG9pbnRfb3B0KQ0KDQoNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KIyMjIE9QRVJBQ0nDk04gMjogREFUQSBDTEVBTklORyBBRElDSU9OQUwgDQoNCnRhYmxlKGRhdGEkY2x1c3RlciwgdXNlTkEgPSAiYWx3YXlzIikNCg0KZGF0YSRjbHVzdGVyW2RhdGEkaWQgPT0gNTE5XSA8LSAiMTAiDQpkYXRhJGNsdXN0ZXJbZGF0YSRpZCA9PSAzNDldIDwtICIwMSINCmRhdGEkY2x1c3RlcltkYXRhJGlkID09IDYzNF0gPC0gIjAyIg0KZGF0YSRjbHVzdGVyW2RhdGEkaWQgPT0gMTY3OF0gPC0gIjMxIg0KZGF0YSRjbHVzdGVyW2RhdGEkaWQgPT0gMTY3OV0gPC0gIjMxIg0KDQpkYXRhJGNsdXN0ZXJbZGF0YSRpZCA9PSAzOThdIDwtICIwMSINCmRhdGEkY2x1c3RlcltkYXRhJGlkID09IDM5MF0gPC0gIjAxIg0KZGF0YSRjbHVzdGVyW2RhdGEkaWQgPT0gMzg5XSA8LSAiMDEiDQpkYXRhJGNsdXN0ZXJbZGF0YSRpZCA9PSA0MDJdIDwtICIwMSINCmRhdGEkY2x1c3RlcltkYXRhJGlkID09IDQwMF0gPC0gIjAxIg0KZGF0YSRjbHVzdGVyW2RhdGEkaWQgPT0gMzgzXSA8LSAiMDEiDQpkYXRhJGNsdXN0ZXJbZGF0YSRpZCA9PSAzOTRdIDwtICIwMSINCmRhdGEkY2x1c3RlcltkYXRhJGlkID09IDM4MV0gPC0gIjAxIg0KZGF0YSRjbHVzdGVyW2RhdGEkaWQgPT0gMzk5XSA8LSAiMDEiDQoNCmRhdGEkY2x1c3RlcltkYXRhJGlkID09IDE2MDFdIDwtICIzMSINCmRhdGEkY2x1c3RlcltkYXRhJGlkID09IDM5NV0gPC0gIjMwIg0KDQp0YWJsZShkYXRhJGNsdXN0ZXIsIHVzZU5BID0gImFsd2F5cyIpDQoNCg0KIyMjIyMjIENyZWFuZG8gbnVldmFtZW50ZSBNSUNST1JFRCBlbiBiYXNlIGEgbGEgYXNpZ25hY2lvbiBlc3BhY2lhbCBkZSBsYSB2YXJpYWJsZXMgY2x1c3Rlcl9uYW1lDQp0YWJsZShkYXRhJG1pY3JvcmVkXzMpDQoNCmRhdGEkbWljcm9yZWRfM1tkYXRhJGNsdXN0ZXIgPT0gIjAxIl0gPC0gIlNvY2FiYXlhIg0KZGF0YSRtaWNyb3JlZF8zW2RhdGEkY2x1c3RlciA9PSAiMDIiXSA8LSAiSHVudGVyIg0KZGF0YSRtaWNyb3JlZF8zW2RhdGEkY2x1c3RlciA9PSAiMDMiXSA8LSAiViBSIEhpbm9qb3NhIg0KZGF0YSRtaWNyb3JlZF8zW2RhdGEkY2x1c3RlciA9PSAiMDQiXSA8LSAiQiBBaXJlcyINCmRhdGEkbWljcm9yZWRfM1tkYXRhJGNsdXN0ZXIgPT0gIjA1Il0gPC0gIkYgQm9sb2duZXNpIg0KZGF0YSRtaWNyb3JlZF8zW2RhdGEkY2x1c3RlciA9PSAiMDYiXSA8LSAiQVNBIg0KZGF0YSRtaWNyb3JlZF8zW2RhdGEkY2x1c3RlciA9PSAiMDciXSA8LSAiQVNBIg0KZGF0YSRtaWNyb3JlZF8zW2RhdGEkY2x1c3RlciA9PSAiMDgiXSA8LSAiQVNBIg0KZGF0YSRtaWNyb3JlZF8zW2RhdGEkY2x1c3RlciA9PSAiMDkiXSA8LSAiQVNBIg0KZGF0YSRtaWNyb3JlZF8zW2RhdGEkY2x1c3RlciA9PSAiMTAiXSA8LSAiWWFuYWh1YXJhIg0KZGF0YSRtaWNyb3JlZF8zW2RhdGEkY2x1c3RlciA9PSAiMTEiXSA8LSAiRSBNaXN0aSINCmRhdGEkbWljcm9yZWRfM1tkYXRhJGNsdXN0ZXIgPT0gIjEyIl0gPC0gIkUgTWlzdGkiDQpkYXRhJG1pY3JvcmVkXzNbZGF0YSRjbHVzdGVyID09ICIxMyJdIDwtICJHIFNhbiBNYXJ0aW4iDQpkYXRhJG1pY3JvcmVkXzNbZGF0YSRjbHVzdGVyID09ICIxNCJdIDwtICJNIE1lbGdhciINCmRhdGEkbWljcm9yZWRfM1tkYXRhJGNsdXN0ZXIgPT0gIjE1Il0gPC0gIllhbmFodWFyYSINCmRhdGEkbWljcm9yZWRfM1tkYXRhJGNsdXN0ZXIgPT0gIjE2Il0gPC0gIjE1IGRlIEFnb3N0byINCmRhdGEkbWljcm9yZWRfM1tkYXRhJGNsdXN0ZXIgPT0gIjE3Il0gPC0gIlBhdWNhcnBhdGEiDQpkYXRhJG1pY3JvcmVkXzNbZGF0YSRjbHVzdGVyID09ICIxOCJdIDwtICJDIEJsYW5jYSINCmRhdGEkbWljcm9yZWRfM1tkYXRhJGNsdXN0ZXIgPT0gIjE5Il0gPC0gIkMgZGUgRGlvcyINCmRhdGEkbWljcm9yZWRfM1tkYXRhJGNsdXN0ZXIgPT0gIjIwIl0gPC0gIkMgZGUgRGlvcyINCmRhdGEkbWljcm9yZWRfM1tkYXRhJGNsdXN0ZXIgPT0gIjMyIl0gPC0gIkMgZGUgRGlvcyINCmRhdGEkbWljcm9yZWRfM1tkYXRhJGNsdXN0ZXIgPT0gIjIxIl0gPC0gIkMgQ29sb3JhZG8iDQpkYXRhJG1pY3JvcmVkXzNbZGF0YSRjbHVzdGVyID09ICIyMiJdIDwtICJaYW1hY29sYSINCmRhdGEkbWljcm9yZWRfM1tkYXRhJGNsdXN0ZXIgPT0gIjIzIl0gPC0gIlphbWFjb2xhIg0KZGF0YSRtaWNyb3JlZF8zW2RhdGEkY2x1c3RlciA9PSAiMjQiXSA8LSAiWmFtYWNvbGEiDQpkYXRhJG1pY3JvcmVkXzNbZGF0YSRjbHVzdGVyID09ICIyNSJdIDwtICJaYW1hY29sYSINCmRhdGEkbWljcm9yZWRfM1tkYXRhJGNsdXN0ZXIgPT0gIjI2Il0gPC0gIlphbWFjb2xhIg0KZGF0YSRtaWNyb3JlZF8zW2RhdGEkY2x1c3RlciA9PSAiMjciXSA8LSAiWmFtYWNvbGEiDQpkYXRhJG1pY3JvcmVkXzNbZGF0YSRjbHVzdGVyID09ICIyOCJdIDwtICJNIENhc3RpbGxhIg0KZGF0YSRtaWNyb3JlZF8zW2RhdGEkY2x1c3RlciA9PSAiMjkiXSA8LSAiVGlhYmF5YSINCmRhdGEkbWljcm9yZWRfM1tkYXRhJGNsdXN0ZXIgPT0gIjMwIl0gPC0gIkNoYXJhY2F0byINCmRhdGEkbWljcm9yZWRfM1tkYXRhJGNsdXN0ZXIgPT0gIjMxIl0gPC0gIkNoYXJhY2F0byINCmRhdGEkbWljcm9yZWRfM1tkYXRhJGNsdXN0ZXIgPT0gIjMzIl0gPC0gIlBlZHJlZ2FsIg0KZGF0YSRtaWNyb3JlZF8zW2RhdGEkY2x1c3RlciA9PSAiMzQiXSA8LSAiUGVkcmVnYWwiDQpkYXRhJG1pY3JvcmVkXzNbZGF0YSRjbHVzdGVyID09ICIzNSJdIDwtICJQZWRyZWdhbCINCmRhdGEkbWljcm9yZWRfM1tkYXRhJGNsdXN0ZXIgPT0gIjM2Il0gPC0gIlBlZHJlZ2FsIg0KDQp0YWJsZShkYXRhJG1pY3JvcmVkXzMsIHVzZU5BID0gImlmYW55IikNCg0KIyMjIyMjIENvbG9jYW5kbyBlbCBub21icmUgZGVsIGNsdXN0ZXINCnRhYmxlKGRhdGEkY2x1c3Rlcl9uYW1lKQ0KDQpkYXRhJGNsdXN0ZXJfbmFtZVtkYXRhJGNsdXN0ZXIgPT0gIjAxIl0gPC0gIjAxIC0gU29jYWJheWEiDQpkYXRhJGNsdXN0ZXJfbmFtZVtkYXRhJGNsdXN0ZXIgPT0gIjAyIl0gPC0gIjAyIC0gSiBMIEdhcmNpYSggSHVudGVyKSINCmRhdGEkY2x1c3Rlcl9uYW1lW2RhdGEkY2x1c3RlciA9PSAiMDMiXSA8LSAiMDMgLSBWIFIgSGlub2pvc2EgKEJ1c3RhbWFudGUpIg0KZGF0YSRjbHVzdGVyX25hbWVbZGF0YSRjbHVzdGVyID09ICIwNCJdIDwtICIwNCAtIEJ1ZW5vcyBBaXJlcyINCmRhdGEkY2x1c3Rlcl9uYW1lW2RhdGEkY2x1c3RlciA9PSAiMDUiXSA8LSAiMDUgLSBGIEJvbG9nbmVzaSINCmRhdGEkY2x1c3Rlcl9uYW1lW2RhdGEkY2x1c3RlciA9PSAiMDYiXSA8LSAiMDYgLSBBU0EgMSBOb3J0ZSINCmRhdGEkY2x1c3Rlcl9uYW1lW2RhdGEkY2x1c3RlciA9PSAiMDciXSA8LSAiMDcgLSBBU0EgMiBDZW50cm8iDQpkYXRhJGNsdXN0ZXJfbmFtZVtkYXRhJGNsdXN0ZXIgPT0gIjA4Il0gPC0gIjA4IC0gQVNBIDMgU3VyTyAxIg0KZGF0YSRjbHVzdGVyX25hbWVbZGF0YSRjbHVzdGVyID09ICIwOSJdIDwtICIwOSAtIEFTQSA0IFN1ck8gMiINCmRhdGEkY2x1c3Rlcl9uYW1lW2RhdGEkY2x1c3RlciA9PSAiMTAiXSA8LSAiMTAgLSBZYW5haHVhcmEiDQpkYXRhJGNsdXN0ZXJfbmFtZVtkYXRhJGNsdXN0ZXIgPT0gIjExIl0gPC0gIjExIC0gRSBNaXN0aSAxIE9lc3RlIg0KZGF0YSRjbHVzdGVyX25hbWVbZGF0YSRjbHVzdGVyID09ICIxMiJdIDwtICIxMiAtIEUgTWlzdGkgMiBFc3RlIg0KZGF0YSRjbHVzdGVyX25hbWVbZGF0YSRjbHVzdGVyID09ICIxMyJdIDwtICIxMyAtIEcgUyBNYXJ0aW4iDQpkYXRhJGNsdXN0ZXJfbmFtZVtkYXRhJGNsdXN0ZXIgPT0gIjE0Il0gPC0gIjE0IC0gTSBNZWxnYXIiDQpkYXRhJGNsdXN0ZXJfbmFtZVtkYXRhJGNsdXN0ZXIgPT0gIjE1Il0gPC0gIjE1IC0gU2FjaGFjYSINCmRhdGEkY2x1c3Rlcl9uYW1lW2RhdGEkY2x1c3RlciA9PSAiMTYiXSA8LSAiMTYgLSAxNSAgZGUgYWdvc3RvIg0KZGF0YSRjbHVzdGVyX25hbWVbZGF0YSRjbHVzdGVyID09ICIxNyJdIDwtICIxNyAtIFBhdWNhcnBhdGEiDQpkYXRhJGNsdXN0ZXJfbmFtZVtkYXRhJGNsdXN0ZXIgPT0gIjE4Il0gPC0gIjE4IC0gQ2l1ZGFkIEJsYW5jYSINCmRhdGEkY2x1c3Rlcl9uYW1lW2RhdGEkY2x1c3RlciA9PSAiMTkiXSA8LSAiMTkgLSBDREQgMSBFc3RlIg0KZGF0YSRjbHVzdGVyX25hbWVbZGF0YSRjbHVzdGVyID09ICIyMCJdIDwtICIyMCAtIENERCAyIENlbnRybyINCmRhdGEkY2x1c3Rlcl9uYW1lW2RhdGEkY2x1c3RlciA9PSAiMjEiXSA8LSAiMjEgLSBDIENvbG9yYWRvIg0KZGF0YSRjbHVzdGVyX25hbWVbZGF0YSRjbHVzdGVyID09ICIyMiJdIDwtICIyMiAtIFphbSA2IFN1ckVzdGUiDQpkYXRhJGNsdXN0ZXJfbmFtZVtkYXRhJGNsdXN0ZXIgPT0gIjIzIl0gPC0gIjIzIC0gWmFtIDEgTm9ydGUiDQpkYXRhJGNsdXN0ZXJfbmFtZVtkYXRhJGNsdXN0ZXIgPT0gIjI0Il0gPC0gIjI0IC0gWmFtIDIgQ2VudHJvRXN0ZSINCmRhdGEkY2x1c3Rlcl9uYW1lW2RhdGEkY2x1c3RlciA9PSAiMjUiXSA8LSAiMjUgLSBaYW0gMyBDZW50cm8iDQpkYXRhJGNsdXN0ZXJfbmFtZVtkYXRhJGNsdXN0ZXIgPT0gIjI2Il0gPC0gIjI2IC0gWmFtIDQgQ2VudHJvT2VzdGUiDQpkYXRhJGNsdXN0ZXJfbmFtZVtkYXRhJGNsdXN0ZXIgPT0gIjI3Il0gPC0gIjI3IC0gWmFtIDUgU3VyT2VzdGUiDQpkYXRhJGNsdXN0ZXJfbmFtZVtkYXRhJGNsdXN0ZXIgPT0gIjI4Il0gPC0gIjI4IC0gTSBDYXN0aWxsYSINCmRhdGEkY2x1c3Rlcl9uYW1lW2RhdGEkY2x1c3RlciA9PSAiMjkiXSA8LSAiMjkgLSBUaWFiYXlhLVVjaCINCmRhdGEkY2x1c3Rlcl9uYW1lW2RhdGEkY2x1c3RlciA9PSAiMzAiXSA8LSAiMzAgLSBDaGFyYWNhdG8tU2FiIg0KZGF0YSRjbHVzdGVyX25hbWVbZGF0YSRjbHVzdGVyID09ICIzMSJdIDwtICIzMSAtIE1vbGxlYmF5YS1RdWUiDQpkYXRhJGNsdXN0ZXJfbmFtZVtkYXRhJGNsdXN0ZXIgPT0gIjMyIl0gPC0gIjMyIC0gQ0REIDMgT2VzdGUgKFl1cmEpIg0KZGF0YSRjbHVzdGVyX25hbWVbZGF0YSRjbHVzdGVyID09ICIzMyJdIDwtICIzMyAtIFBlZCAxIE5vcnRlIg0KZGF0YSRjbHVzdGVyX25hbWVbZGF0YSRjbHVzdGVyID09ICIzNCJdIDwtICIzNCAtIFBlZCAyIENlbnRybyINCmRhdGEkY2x1c3Rlcl9uYW1lW2RhdGEkY2x1c3RlciA9PSAiMzUiXSA8LSAiMzUgLSBQZWQgMyBTdXJPZXN0ZSINCmRhdGEkY2x1c3Rlcl9uYW1lW2RhdGEkY2x1c3RlciA9PSAiMzYiXSA8LSAiMzYgLSBQZWQgNCBTdXJFc3RlIg0KDQoNCiNTaSBlbCBwdW50byBkZSB2YWN1bmFjaW9uIGZ1ZSBQTEFOSUZJQ0FETyBPIE5PLiBwb2ludF9wbGFuaWZpY2Fkbw0KI1NpIGVsIHB1bnRvIGRlIHZhY3VuYWNpb24gZnVlIG1vdmlsIG8gZmlqbzogIHBvaW50X3BsYW5pZmljYWRvX3RpcG8gICMjIFNpIGZ1ZSBwdW50byBmaWpvIDEgbyBtb3ZpbCAyICAgbyBtaXh0byAzDQojU2kgZWwgcHVudG8gZGUgdmFjdW5hY2lvbiBmdWUgbW92aWwgbyBmaWpvOiAgcHVudG9faW5pY2lvDQoNCg0KI2RhdGFbLCBjKCJpZCIsICJwb2ludF9wbGFuaWZpY2FkbyIsICJwb2ludF9wbGFuaWZpY2Fkb190aXBvIiwgInB1bnRvX2luaWNpbyIsICJtb3ZfaW5pY2lhbF9mYWN0b3IiKV0gJT4lIHNhbXBsZV9uKDUpDQojZGF0YVtkYXRhJG1vdl9pbmljaWFsX2ZhY3RvciA9PSAiU0kiICYgIWlzLm5hKGRhdGEkbW92X2luaWNpYWxfZmFjdG9yKSwgYygiaWQiLCAicG9pbnRfcGxhbmlmaWNhZG8iLCAicG9pbnRfcGxhbmlmaWNhZG9fdGlwbyIsICJwdW50b19pbmljaW8iLCAibW92X2luaWNpYWxfZmFjdG9yIildICU+JSBzYW1wbGVfbigyNSkNCg0KdGFibGUoZGF0YSRwb2ludF9wbGFuaWZpY2FkbykNCmRhdGEkcG9pbnRfcGxhbmlmaWNhZG9bZGF0YSRtb3ZfaW5pY2lhbCA9PSAxXSA8LSAyIA0KDQoNCiNkYXRhW2RhdGEkbW92X2luaWNpYWxfZmFjdG9yID09ICJTSSIgJiAhaXMubmEoZGF0YSRtb3ZfaW5pY2lhbF9mYWN0b3IpLCBjKCJpZCIsICJwb2ludF9wbGFuaWZpY2FkbyIsICJwb2ludF9wbGFuaWZpY2Fkb190aXBvIiwgInB1bnRvX2luaWNpbyIsICJtb3ZfaW5pY2lhbF9mYWN0b3IiKV0gJT4lIHNhbXBsZV9uKDI1KQ0KI2RhdGFbLCBjKCJpZCIsICJwb2ludF9wbGFuaWZpY2FkbyIsICJwb2ludF9wbGFuaWZpY2Fkb190aXBvIiwgInB1bnRvX2luaWNpbyIsICJtb3ZfaW5pY2lhbF9mYWN0b3IiKV0gJT4lIHNhbXBsZV9uKDE1KQ0KI2RhdGFbZGF0YSRtb3ZfaW5pY2lhbF9mYWN0b3IgPT0gIlNJIiAmICFpcy5uYShkYXRhJG1vdl9pbmljaWFsX2ZhY3RvciksIGMoImlkIiwgInBvaW50X3BsYW5pZmljYWRvIiwgInBvaW50X3BsYW5pZmljYWRvX3RpcG8iLCAicHVudG9faW5pY2lvIiwgIm1vdl9pbmljaWFsX2ZhY3RvciIsICJjYW1iaW9fZnVlIiwgICJjYW1iaW9fZnVlX2ZhY3RvciIsICAiY2FtYmlvX2Z1ZV8yX2ZhY3RvciIsICJjYW1iaW9fZnVlXzNfZmFjdG9yIildICU+JSBzYW1wbGVfbigzMCkNCiNkYXRhW2RhdGEkcG9pbnRfcGxhbmlmaWNhZG9fdGlwbyA9PSAxICYgZGF0YSRjYW1iaW9fZnVlID09IDEgJiBkYXRhJGNhbWJpb19mdWVfMiA9PSAxICYgZGF0YSRjYW1iaW9fZnVlXzMgPT0gMSAmICFpcy5uYShkYXRhJGNhbWJpb19mdWVfMyksIGMoImlkIiwgInBvaW50X3BsYW5pZmljYWRvIiwgInBvaW50X3BsYW5pZmljYWRvX3RpcG8iLCAicHVudG9faW5pY2lvIiwgIm1vdl9pbmljaWFsX2ZhY3RvciIsICJjYW1iaW9fZnVlIiwgICJjYW1iaW9fZnVlX2ZhY3RvciIsICAiY2FtYmlvX2Z1ZV8yX2ZhY3RvciIsICJjYW1iaW9fZnVlXzNfZmFjdG9yIildIA0KDQpkYXRhIDwtIGRhdGEgJT4lDQogIG11dGF0ZShwb2ludF9wbGFuaWZpY2Fkb190aXBvID0gY2FzZV93aGVuKA0KICAgIChpcy5uYShjYW1iaW9fZnVlKSB8IGlzLm5hKGNhbWJpb19mdWVfMikgfCBpcy5uYShjYW1iaW9fZnVlXzMpKSAmIHBvaW50X3BsYW5pZmljYWRvX3RpcG8gPT0gMSB+IDEsDQogICAgY2FtYmlvX2Z1ZSA9PSAxICYgY2FtYmlvX2Z1ZV8yID09IDEgJiBjYW1iaW9fZnVlXzMgPT0gMSB+IDEsDQogICAgVFJVRSB+IHBvaW50X3BsYW5pZmljYWRvX3RpcG8NCiAgKSkNCg0KDQpkYXRhIDwtIGRhdGEgJT4lDQogIG11dGF0ZShwb2ludF9wbGFuaWZpY2Fkb190aXBvID0gY2FzZV93aGVuKA0KICAgIChpcy5uYShjYW1iaW9fZnVlKSB8IGlzLm5hKGNhbWJpb19mdWVfMikgfCBpcy5uYShjYW1iaW9fZnVlXzMpKSAmIHBvaW50X3BsYW5pZmljYWRvX3RpcG8gPT0gMiB+IDIsDQogICAgY2FtYmlvX2Z1ZSA9PSAyICYgY2FtYmlvX2Z1ZV8yID09IDIgJiBjYW1iaW9fZnVlXzMgPT0gMiB+IDIsDQogICAgVFJVRSB+IHBvaW50X3BsYW5pZmljYWRvX3RpcG8NCiAgKSkNCg0KDQpkYXRhIDwtIGRhdGEgJT4lDQogIG11dGF0ZShwb2ludF9wbGFuaWZpY2Fkb190aXBvID0gY2FzZV93aGVuKA0KICAgIHBvaW50X3BsYW5pZmljYWRvX3RpcG8gPT0gMSAmIChjYW1iaW9fZnVlID09IDIgfCBjYW1iaW9fZnVlXzIgPT0gMiB8IGNhbWJpb19mdWVfMyA9PSAyKSB+IDMsDQogICAgcG9pbnRfcGxhbmlmaWNhZG9fdGlwbyA9PSAyICYgKGNhbWJpb19mdWUgPT0gMSB8IGNhbWJpb19mdWVfMiA9PSAxIHwgY2FtYmlvX2Z1ZV8zID09IDEpIH4gMywNCiAgICBUUlVFIH4gcG9pbnRfcGxhbmlmaWNhZG9fdGlwbw0KICApKQ0KDQoNCg0KZGF0YSRwb2ludF9wbGFuaWZpY2FkbyA8LSBmYWN0b3IoZGF0YSRwb2ludF9wbGFuaWZpY2FkbywgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKDEsIDIpLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIlNpIiwgIk5vIikpDQoNCg0KZGF0YSRwb2ludF9wbGFuaWZpY2Fkb190aXBvIDwtIGZhY3RvcihkYXRhJHBvaW50X3BsYW5pZmljYWRvX3RpcG8sIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKDEsIDIsIDMpLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiUHVudG8gZmlqbyIsICJQdW50byBtb3ZpbCIsICJQdW50byBtaXh0byIpKQ0KDQoNCmRhdGEkcHVudG9faW5pY2lvIDwtIGZhY3RvcihkYXRhJHB1bnRvX2luaWNpbywgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygxLCAyKSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiUHVudG8gZmlqbyIsICJQdW50byBtb3ZpbCIpKQ0KDQoNCiNkYXRhW2RhdGEkcG9pbnRfcGxhbmlmaWNhZG9fdGlwbyA9PSAiUHVudG8gbWl4dG8iICAmICFpcy5uYShkYXRhJHBvaW50X3BsYW5pZmljYWRvX3RpcG8pLCBjKCJpZCIsICJwb2ludF9wbGFuaWZpY2FkbyIsICJwb2ludF9wbGFuaWZpY2Fkb190aXBvIiwgInB1bnRvX2luaWNpbyIsICJtb3ZfaW5pY2lhbF9mYWN0b3IiLCAiY2FtYmlvX2Z1ZSIsICAiY2FtYmlvX2Z1ZV9mYWN0b3IiLCAgImNhbWJpb19mdWVfMl9mYWN0b3IiLCAiY2FtYmlvX2Z1ZV8zX2ZhY3RvciIpXSAlPiUgc2FtcGxlX24oMzApDQojZGF0YVtkYXRhJHBvaW50X3BsYW5pZmljYWRvX3RpcG8gPT0gIlB1bnRvIGZpam8iICAmICFpcy5uYShkYXRhJHBvaW50X3BsYW5pZmljYWRvX3RpcG8pLCBjKCJpZCIsICJwb2ludF9wbGFuaWZpY2FkbyIsICJwb2ludF9wbGFuaWZpY2Fkb190aXBvIiwgInB1bnRvX2luaWNpbyIsICJtb3ZfaW5pY2lhbF9mYWN0b3IiLCAiY2FtYmlvX2Z1ZSIsICAiY2FtYmlvX2Z1ZV9mYWN0b3IiLCAgImNhbWJpb19mdWVfMl9mYWN0b3IiLCAiY2FtYmlvX2Z1ZV8zX2ZhY3RvciIpXSAlPiUgc2FtcGxlX24oMzApDQojZGF0YVtkYXRhJHBvaW50X3BsYW5pZmljYWRvID09ICJObyIgICYgZGF0YSRwb2ludF9wbGFuaWZpY2Fkb190aXBvID09ICJQdW50byBtaXh0byIsIGMoImlkIiwgInBvaW50X3BsYW5pZmljYWRvIiwgInBvaW50X3BsYW5pZmljYWRvX3RpcG8iLCAicHVudG9faW5pY2lvIiwgIm1vdl9pbmljaWFsX2ZhY3RvciIsICJjYW1iaW9fZnVlIiwgICJjYW1iaW9fZnVlX2ZhY3RvciIsICAiY2FtYmlvX2Z1ZV8yX2ZhY3RvciIsICJjYW1iaW9fZnVlXzNfZmFjdG9yIildIA0KDQojdGFibGUoZGF0YSRwb2ludF9wbGFuaWZpY2FkbykNCiN0YWJsZShkYXRhJHBvaW50X3BsYW5pZmljYWRvX3RpcG8pDQoNCmBgYA0KDQoNCg0KIyMjIFRvdGFsIGRlIHBlcnJvcyB2YWN1bmFkb3MgcG9yIE1pY3JvcmVkIA0KDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFfQ0KZGF0YSR2YW5jYW5fY2FuIDwtIHVubmFtZShkYXRhJHZhbmNhbl9jYW4pDQoNCm5fY29sb3JzIDwtIGxlbmd0aCh1bmlxdWUoZGF0YSRtaWNyb3JlZF8zKSkNCmNvbG9yX3BhbGV0dGUgPC0gY29sb3JSYW1wUGFsZXR0ZShicmV3ZXIucGFsKDgsICJTZXQyIikpKG5fY29sb3JzKQ0KDQpwYWwgPC0gY29sb3JGYWN0b3IoDQogIHBhbGV0dGUgPSBjb2xvcl9wYWxldHRlLA0KICBkb21haW4gPSBkYXRhJG1pY3JvcmVkXzMNCikNCg0KbWFwIDwtIGxlYWZsZXQoZGF0YSkgJT4lDQogIGFkZFRpbGVzKCkgJT4lDQogIGFkZENpcmNsZU1hcmtlcnMoDQogICAgbG5nID0gfmxvbmdpdHVkX2YsIGxhdCA9IH5sYXRpdHVkX2YsDQogICAgY29sb3IgPSB+cGFsKG1pY3JvcmVkXzMpLA0KICAgIGZpbGxDb2xvciA9IH5wYWwobWljcm9yZWRfMyksDQogICAgZmlsbE9wYWNpdHkgPSAwLjgsDQogICAgcmFkaXVzID0gfnZhbmNhbl9jYW4vMTAsICAjIFRhbWHDsW8gZGVsIG1hcmNhZG9yIGJhc2FkbyBlbiB2YW5jYW5fY2FuDQogICAgcG9wdXAgPSB+cGFzdGUoIklEIGRlbCBwdW50bzoiLCBpZCwgIjxicj4iLA0KICAgICAgICAgICAgICAgICAgICJNaWNyb3JlZDoiLCBtaWNyb3JlZF8zLCAiPGJyPiIsIA0KICAgICAgICAgICAgICAgICAgICJVYmljYWNpw7NuOiIsIG5hbWVfcG9pbnQsICI8YnI+IiwNCiAgICAgICAgICAgICAgICAgICAiUHVudG8gb3B0aW1pemFkbyA1MG06IiwgcG9pbnRfb3B0XzUwLCAiPGJyPiIsDQogICAgICAgICAgICAgICAgICAgIlB1bnRvIG9wdGltaXphZG8gMTAwbToiLCBwb2ludF9vcHRfMTAwLCAiPGJyPiIsDQogICAgICAgICAgICAgICAgICAgIlRvdGFsIGRlIHBlcnJvcyB2YWN1bmFkb3M6IiwgdmFuY2FuX2NhbiksDQogICAgZ3JvdXAgPSB+bWljcm9yZWRfMyAgIyBBZ3J1cGFyIGxvcyBwdW50b3MgcG9yIG1pY3JvcmVkXzIgcGFyYSBjb250cm9sZXMgZGUgY2FwYQ0KICApICU+JQ0KICBhZGRMYXllcnNDb250cm9sKA0KICAgIG92ZXJsYXlHcm91cHMgPSB1bmlxdWUoZGF0YSRtaWNyb3JlZF8zKSwNCiAgICBvcHRpb25zID0gbGF5ZXJzQ29udHJvbE9wdGlvbnMoY29sbGFwc2VkID0gVFJVRSkNCiAgKSAlPiUgDQogICAgICBhZGRFYXN5QnV0dG9uKGVhc3lCdXR0b24oDQogICAgaWNvbiA9ICJmYS10aW1lcyIsIHRpdGxlID0gIkRlc2VsZWNjaW9uYXIgdG9kYXMgbGFzIGNhcGFzIiwNCiAgICBvbkNsaWNrID0gSlMocGFzdGUwKA0KICAgICAgImZ1bmN0aW9uKGJ0biwgbWFwKSB7IiwNCiAgICAgICJ2YXIgZ3JvdXBzID0gIiwgdG9KU09OKHVuaXF1ZShkYXRhJG1pY3JvcmVkXzMpKSwgIjsiLA0KICAgICAgImdyb3Vwcy5mb3JFYWNoKGZ1bmN0aW9uKGdyb3VwKSB7IiwNCiAgICAgICJtYXAuZWFjaExheWVyKGZ1bmN0aW9uKGxheWVyKSB7IiwNCiAgICAgICJpZihsYXllci5vcHRpb25zICYmIGxheWVyLm9wdGlvbnMuZ3JvdXAgPT09IGdyb3VwKSB7IiwNCiAgICAgICJtYXAucmVtb3ZlTGF5ZXIobGF5ZXIpOyIsDQogICAgICAifX0pOyIsDQogICAgICAidmFyIGNoZWNrYm94ZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcubGVhZmxldC1jb250cm9sLWxheWVycy1vdmVybGF5cyBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0nKTsiLA0KICAgICAgImNoZWNrYm94ZXMuZm9yRWFjaChmdW5jdGlvbihjaGVja2JveCkgeyIsDQogICAgICAiY2hlY2tib3guY2hlY2tlZCA9IGZhbHNlOyIsDQogICAgICAifSk7IiwNCiAgICAgICJ9KTsiLA0KICAgICAgIn0iDQogICAgKSkNCiAgKSkNCg0KDQoNCiMgTW9zdHJhciBlbCBtYXBhDQptYXANCg0KDQoNCmBgYA0KDQoNCg0KIyMjIFRvdGFsIGRlIHBlcnJvcyB2YWN1bmFkb3MgcG9yIENsdXN0ZXINCg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRX0NCg0KZGF0YSR2YW5jYW5fY2FuIDwtIHVubmFtZShkYXRhJHZhbmNhbl9jYW4pDQoNCm5fY29sb3JzIDwtIGxlbmd0aCh1bmlxdWUoZGF0YSRjbHVzdGVyX25hbWUpKQ0KY29sb3JfcGFsZXR0ZSA8LSBjb2xvclJhbXBQYWxldHRlKGJyZXdlci5wYWwoOCwgIlNldDIiKSkobl9jb2xvcnMpDQoNCnBhbCA8LSBjb2xvckZhY3RvcigNCiAgcGFsZXR0ZSA9IGNvbG9yX3BhbGV0dGUsDQogIGRvbWFpbiA9IGRhdGEkY2x1c3Rlcl9uYW1lDQopDQoNCm1hcCA8LSBsZWFmbGV0KGRhdGEpICU+JQ0KICBhZGRUaWxlcygpICU+JQ0KICBhZGRDaXJjbGVNYXJrZXJzKA0KICAgIGxuZyA9IH5sb25naXR1ZF9mLCBsYXQgPSB+bGF0aXR1ZF9mLA0KICAgIGNvbG9yID0gfnBhbChjbHVzdGVyX25hbWUpLA0KICAgIGZpbGxDb2xvciA9IH5wYWwoY2x1c3Rlcl9uYW1lKSwNCiAgICBmaWxsT3BhY2l0eSA9IDAuOCwNCiAgICByYWRpdXMgPSB+dmFuY2FuX2Nhbi8xMCwgICMgVGFtYcOxbyBkZWwgbWFyY2Fkb3IgYmFzYWRvIGVuIHZhbmNhbl9jYW4NCiAgICBwb3B1cCA9IH5wYXN0ZSgiSUQgZGVsIHB1bnRvOiIsIGlkLCAiPGJyPiIsDQogICAgICAgICAgICAgICAgICAgIkNsdXN0ZXI6IiwgY2x1c3Rlcl9uYW1lLCAiPGJyPiIsIA0KICAgICAgICAgICAgICAgICAgICJVYmljYWNpw7NuOiIsIG5hbWVfcG9pbnQsICI8YnI+IiwNCiAgICAgICAgICAgICAgICAgICAiUHVudG8gb3B0aW1pemFkbyA1MG06IiwgcG9pbnRfb3B0XzUwLCAiPGJyPiIsDQogICAgICAgICAgICAgICAgICAgIlB1bnRvIG9wdGltaXphZG8gMTAwbToiLCBwb2ludF9vcHRfMTAwLCAiPGJyPiIsDQogICAgICAgICAgICAgICAgICAgIlRvdGFsIGRlIHBlcnJvcyB2YWN1bmFkb3M6IiwgdmFuY2FuX2NhbiksDQogICAgZ3JvdXAgPSB+Y2x1c3Rlcl9uYW1lICAjIEFncnVwYXIgbG9zIHB1bnRvcyBwb3IgbWljcm9yZWRfMiBwYXJhIGNvbnRyb2xlcyBkZSBjYXBhDQogICkgJT4lDQogIGFkZExheWVyc0NvbnRyb2woDQogICAgb3ZlcmxheUdyb3VwcyA9IHVuaXF1ZShkYXRhJGNsdXN0ZXJfbmFtZSksDQogICAgb3B0aW9ucyA9IGxheWVyc0NvbnRyb2xPcHRpb25zKGNvbGxhcHNlZCA9IFRSVUUpDQogICkgICU+JSANCiAgICAgIGFkZEVhc3lCdXR0b24oZWFzeUJ1dHRvbigNCiAgICBpY29uID0gImZhLXRpbWVzIiwgdGl0bGUgPSAiRGVzZWxlY2Npb25hciB0b2RhcyBsYXMgY2FwYXMiLA0KICAgIG9uQ2xpY2sgPSBKUyhwYXN0ZTAoDQogICAgICAiZnVuY3Rpb24oYnRuLCBtYXApIHsiLA0KICAgICAgInZhciBncm91cHMgPSAiLCB0b0pTT04odW5pcXVlKGRhdGEkY2x1c3Rlcl9uYW1lKSksICI7IiwNCiAgICAgICJncm91cHMuZm9yRWFjaChmdW5jdGlvbihncm91cCkgeyIsDQogICAgICAibWFwLmVhY2hMYXllcihmdW5jdGlvbihsYXllcikgeyIsDQogICAgICAiaWYobGF5ZXIub3B0aW9ucyAmJiBsYXllci5vcHRpb25zLmdyb3VwID09PSBncm91cCkgeyIsDQogICAgICAibWFwLnJlbW92ZUxheWVyKGxheWVyKTsiLA0KICAgICAgIn19KTsiLA0KICAgICAgInZhciBjaGVja2JveGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmxlYWZsZXQtY29udHJvbC1sYXllcnMtb3ZlcmxheXMgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdJyk7IiwNCiAgICAgICJjaGVja2JveGVzLmZvckVhY2goZnVuY3Rpb24oY2hlY2tib3gpIHsiLA0KICAgICAgImNoZWNrYm94LmNoZWNrZWQgPSBmYWxzZTsiLA0KICAgICAgIn0pOyIsDQogICAgICAifSk7IiwNCiAgICAgICJ9Ig0KICAgICkpDQogICkpDQoNCg0KIyBNb3N0cmFyIGVsIG1hcGENCm1hcA0KDQoNCg0KYGBgDQoNCg0KDQojIyMgQ0xVU1RFUiAxOiBQdW50b3MgT3B0aW1pemFkb3MgcHJvcHVlc3RvcyB2cyBQdW50b3MgRWplY3V0YWRvcw0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRX0NCiMgRmlsdHJhciBzb2xvIGxvcyBkYXRvcyBkZWwgY2x1c3RlciAwMQ0KDQpwX29wdF9jMSA8LSBpbXBvcnQoImNsdXN0ZXIvY2x1c3RlcjFfMjVwdW50b3NfNS4yLjIzLmNzdiIpICU+JSANCiAgY2xlYW5fbmFtZXMoKQ0KDQojZ2xpbXBzZShkYXRhKQ0KDQojZGF0YV9jbHVzdGVyXzAxIDwtIGRhdGEgJT4lIGZpbHRlcihjbHVzdGVyID09ICIwMSIpDQoNCmRhdGEkdmFuY2FuX2NhbiA8LSB1bm5hbWUoZGF0YSR2YW5jYW5fY2FuKQ0KDQpuX2NvbG9ycyA8LSBsZW5ndGgodW5pcXVlKGRhdGEkY2x1c3Rlcl9uYW1lKSkNCmNvbG9yX3BhbGV0dGUgPC0gY29sb3JSYW1wUGFsZXR0ZShicmV3ZXIucGFsKDgsICJTZXQyIikpKG5fY29sb3JzKQ0KDQpwYWwgPC0gY29sb3JGYWN0b3IoDQogIHBhbGV0dGUgPSBjb2xvcl9wYWxldHRlLA0KICBkb21haW4gPSBkYXRhJGNsdXN0ZXJfbmFtZQ0KKQ0KDQptYXBfY29tYmluZWQgPC0gbGVhZmxldCgpICU+JQ0KICBhZGRUaWxlcygpICU+JQ0KICBhZGRDaXJjbGVNYXJrZXJzKA0KICAgIGRhdGEgPSBkYXRhLA0KICAgIGxuZyA9IH5sb25naXR1ZF9mLCBsYXQgPSB+bGF0aXR1ZF9mLA0KICAgIGNvbG9yID0gfnBhbChjbHVzdGVyX25hbWUpLA0KICAgIGZpbGxDb2xvciA9IH5wYWwoY2x1c3Rlcl9uYW1lKSwNCiAgICBmaWxsT3BhY2l0eSA9IDAuOCwNCiAgICByYWRpdXMgPSB+dmFuY2FuX2NhbiAvIDEwLCAgIyBUYW1hw7FvIGRlbCBtYXJjYWRvciBiYXNhZG8gZW4gdmFuY2FuX2Nhbg0KICAgIHBvcHVwID0gfnBhc3RlKCJJRCBkZWwgcHVudG86IiwgaWQsICI8YnI+IiwNCiAgICAgICAgICAgICAgICAgICAiQ2x1c3RlcjoiLCBjbHVzdGVyX25hbWUsICI8YnI+IiwgDQogICAgICAgICAgICAgICAgICAgIlViaWNhY2nDs246IiwgbmFtZV9wb2ludCwgIjxicj4iLA0KICAgICAgICAgICAgICAgICAgICJQdW50byBvcHRpbWl6YWRvIDUwbToiLCBwb2ludF9vcHRfNTAsICI8YnI+IiwNCiAgICAgICAgICAgICAgICAgICAiUHVudG8gb3B0aW1pemFkbyAxMDBtOiIsIHBvaW50X29wdF8xMDAsICI8YnI+IiwNCiAgICAgICAgICAgICAgICAgICAiVG90YWwgZGUgcGVycm9zIHZhY3VuYWRvczoiLCB2YW5jYW5fY2FuKSwNCiAgICBncm91cCA9IH5jbHVzdGVyX25hbWUgICMgQWdydXBhciBsb3MgcHVudG9zIHBvciBjbHVzdGVyX25hbWUgcGFyYSBjb250cm9sZXMgZGUgY2FwYQ0KICApICU+JQ0KICBhZGRNYXJrZXJzKA0KICAgIGRhdGEgPSBwX29wdF9jMSwNCiAgICBsbmcgPSB+bG9uZywgbGF0ID0gfmxhdCwNCiAgICBwb3B1cCA9IH5wYXN0ZSgiUHVudG8gT3B0aW1pemFkbzoiLCAiPGJyPiIsIA0KICAgICAgICAgICAgICAgICAgICJMYXRpdHVkOiIsIGxhdCwgIjxicj4iLCANCiAgICAgICAgICAgICAgICAgICAiTG9uZ2l0dWQ6IiwgbG9uZyksDQogICAgZ3JvdXAgPSAiUHVudG9zIE9wdGltaXphZG9zIg0KICApICU+JQ0KICBhZGRMYXllcnNDb250cm9sKA0KICAgIG92ZXJsYXlHcm91cHMgPSBjKHVuaXF1ZShkYXRhJGNsdXN0ZXJfbmFtZSksICJQdW50b3MgT3B0aW1pemFkb3MiKSwNCiAgICBvcHRpb25zID0gbGF5ZXJzQ29udHJvbE9wdGlvbnMoY29sbGFwc2VkID0gVFJVRSkNCiAgKSAgICU+JSANCiAgICAgIGFkZEVhc3lCdXR0b24oZWFzeUJ1dHRvbigNCiAgICBpY29uID0gImZhLXRpbWVzIiwgdGl0bGUgPSAiRGVzZWxlY2Npb25hciB0b2RhcyBsYXMgY2FwYXMiLA0KICAgIG9uQ2xpY2sgPSBKUyhwYXN0ZTAoDQogICAgICAiZnVuY3Rpb24oYnRuLCBtYXApIHsiLA0KICAgICAgInZhciBncm91cHMgPSAiLCB0b0pTT04odW5pcXVlKGRhdGEkY2x1c3Rlcl9uYW1lKSksICI7IiwNCiAgICAgICJncm91cHMuZm9yRWFjaChmdW5jdGlvbihncm91cCkgeyIsDQogICAgICAibWFwLmVhY2hMYXllcihmdW5jdGlvbihsYXllcikgeyIsDQogICAgICAiaWYobGF5ZXIub3B0aW9ucyAmJiBsYXllci5vcHRpb25zLmdyb3VwID09PSBncm91cCkgeyIsDQogICAgICAibWFwLnJlbW92ZUxheWVyKGxheWVyKTsiLA0KICAgICAgIn19KTsiLA0KICAgICAgInZhciBjaGVja2JveGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmxlYWZsZXQtY29udHJvbC1sYXllcnMtb3ZlcmxheXMgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdJyk7IiwNCiAgICAgICJjaGVja2JveGVzLmZvckVhY2goZnVuY3Rpb24oY2hlY2tib3gpIHsiLA0KICAgICAgImNoZWNrYm94LmNoZWNrZWQgPSBmYWxzZTsiLA0KICAgICAgIn0pOyIsDQogICAgICAifSk7IiwNCiAgICAgICJ9Ig0KICAgICkpDQogICkpDQoNCg0KIyBNb3N0cmFyIGVsIG1hcGEgY29tYmluYWRvDQptYXBfY29tYmluZWQNCg0KDQpgYGANCg0KDQoNCiMjIyBDdWFkcm8gcmVzdW1lbiBkZSBsYSBWQU5DQU4gZW4gZ2VuZXJhbCBwb3IgcHVudG8gZGUgdmFjdW5hY2lvbg0KDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFfQ0KI3RhYmxlKGRhdGEkcG9pbnRfb3B0XzEwMCkNCiN0YWJsZShkYXRhJHBvaW50X29wdF81MCkNCg0KDQoNCnJlc3VtZW5fZyA8LSBkYXRhICU+JSANCiAgc3VtbWFyaXplKHRvdGFsX2Nhbl92YW5jYW4gPSBzdW0odmFuY2FuX2NhbiwgbmEucm0gPSBUUlVFKSwNCiAgICAgICAgICAgIG1lYW5fY2FuX3ZhbmNhbiA9IHJvdW5kKG1lYW4odmFuY2FuX2NhbiwgbmEucm0gPSBUUlVFKSwgMSksDQogICAgICAgICAgICBtZWFuX3B1bnRvX29wdCA9IHJvdW5kKG1lYW4odmFuY2FuX2Nhbltwb2ludF9vcHRfMTAwID09ICJTaSJdLCBuYS5ybSA9IFRSVUUpLCAxKSwNCiAgICAgICAgICAgIG1lYW5fcHVudG9fbm9fb3B0ID0gcm91bmQobWVhbih2YW5jYW5fY2FuW3BvaW50X29wdF8xMDAgPT0gIk5vIl0sIG5hLnJtID0gVFJVRSksIDEpLA0KICAgICAgICAgICAgbWVhbl9wdW50b19maWpvID0gcm91bmQobWVhbih2YW5jYW5fY2FuW3BvaW50X3BsYW5pZmljYWRvX3RpcG8gPT0gIlB1bnRvIGZpam8iXSwgbmEucm0gPSBUUlVFKSwgMSksDQogICAgICAgICAgICBtZWFuX3B1bnRvX21vdmlsID0gcm91bmQobWVhbih2YW5jYW5fY2FuW3BvaW50X3BsYW5pZmljYWRvX3RpcG8gPT0gIlB1bnRvIG1vdmlsIl0sIG5hLnJtID0gVFJVRSksIDEpLA0KICAgICAgICAgICAgbWVhbl9wdW50b19taXh0byA9IHJvdW5kKG1lYW4odmFuY2FuX2Nhbltwb2ludF9wbGFuaWZpY2Fkb190aXBvID09ICJQdW50byBtaXh0byJdLCBuYS5ybSA9IFRSVUUpLCAxKSwNCiAgICAgICAgICAgIG1lYW5fcHVudG9fcGxhbmlmaWNhZG8gPSByb3VuZChtZWFuKHZhbmNhbl9jYW5bcG9pbnRfcGxhbmlmaWNhZG8gPT0gIlNpIl0sIG5hLnJtID0gVFJVRSksIDEpLA0KICAgICAgICAgICAgbWVhbl9wdW50b19ub19wbGFuaWZpY2FkbyA9IHJvdW5kKG1lYW4odmFuY2FuX2Nhbltwb2ludF9wbGFuaWZpY2FkbyA9PSAiTm8iXSwgbmEucm0gPSBUUlVFKSwgMSksDQogICAgICAgICAgICB0b3RhbF9icmlnYWRhcyA9IGxlbmd0aChpZCksDQogICAgICAgICAgICBob3Jhc190b3RhbF9zdW0gPSByb3VuZChzdW0oaG9yYXNfdG90YWwsIG5hLnJtID0gVFJVRSksIDEpLA0KICAgICAgICAgICAgaG9yYXNfdG90YWxfbWVhbiA9IHJvdW5kKG1lYW4oaG9yYXNfdG90YWwsIG5hLnJtID0gVFJVRSksIDEpKQ0KDQoNCnJlc3VtZW5fZyAlPiUNCiAga2FibGUoImh0bWwiLCBjb2wubmFtZXMgPSBjKCAiVG90YWwgcGVycm9zIHZhY3VuYWRvcyIsICJQcm9tZWRpbyBwZXJyb3MgdmFjdW5hZG9zIChQUFYpIiwgIlBQViBlbiBwdW50b3MgT1BUIiwgICAiUFBWIGVuIHB1bnRvcyBOTyBPUFQiLCAiUFBWIGVuIHB1bnRvIGZpam8iLCAiUFBWIGVuIHB1bnRvIG1vdmlsIiwgIlBQViBlbiBwdW50byBtaXh0byIsICJQUFYgZW4gcHVudG8gcGxhbmlmaWNhZG8iLCAiUFBWIGVuIHB1bnRvIE5PIHBsYW5pZmljYWRvIiwgIlRvdGFsIGRlIGJyaWdhZGFzIiwgIlRvdGFsIGRlIGhvcmFzIHRyYWJhamFkb3MiLCAiUHJvbWVkaW8gZGUgaG9yYXMgdHJhYmFqYWRhcyIpKSAlPiUNCiAga2FibGVfc3R5bGluZyhmdWxsX3dpZHRoID0gVFJVRSwgcG9zaXRpb24gPSAiY2VudGVyIiwgYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwgImhvdmVyIiwgImNvbmRlbnNlZCIsICJyZXNwb25zaXZlIikpDQoNCg0KYGBgDQoNCg0KIyMjIEN1YWRybyByZXN1bWVuIGRlIGxhIFZBTkNBTiBwb3IgY2x1c3Rlcg0KDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFfQ0KDQpyZXN1bWVuX2NsIDwtIGRhdGEgJT4lIA0KICBncm91cF9ieShjbHVzdGVyX25hbWUpICU+JSANCiAgc3VtbWFyaXplKHRvdGFsX2Nhbl92YW5jYW4gPSBzdW0odmFuY2FuX2NhbiwgbmEucm0gPSBUUlVFKSwNCiAgICAgICAgICAgIG1lYW5fY2FuX3ZhbmNhbiA9IHJvdW5kKG1lYW4odmFuY2FuX2NhbiwgbmEucm0gPSBUUlVFKSwxKSwNCiAgICAgICAgICAgIG1lYW5fcHVudG9fb3B0ID0gcm91bmQobWVhbih2YW5jYW5fY2FuW3BvaW50X29wdF8xMDAgPT0gIlNpIl0sIG5hLnJtID0gVFJVRSksIDEpLA0KICAgICAgICAgICAgbWVhbl9wdW50b19ub19vcHQgPSByb3VuZChtZWFuKHZhbmNhbl9jYW5bcG9pbnRfb3B0XzEwMCA9PSAiTm8iXSwgbmEucm0gPSBUUlVFKSwgMSksDQogICAgICAgICAgICBtZWFuX3B1bnRvX2Zpam8gPSByb3VuZChtZWFuKHZhbmNhbl9jYW5bcG9pbnRfcGxhbmlmaWNhZG9fdGlwbyA9PSAiUHVudG8gZmlqbyJdLCBuYS5ybSA9IFRSVUUpLCAxKSwNCiAgICAgICAgICAgIG1lYW5fcHVudG9fbW92aWwgPSByb3VuZChtZWFuKHZhbmNhbl9jYW5bcG9pbnRfcGxhbmlmaWNhZG9fdGlwbyA9PSAiUHVudG8gbW92aWwiXSwgbmEucm0gPSBUUlVFKSwgMSksDQogICAgICAgICAgICBtZWFuX3B1bnRvX21peHRvID0gcm91bmQobWVhbih2YW5jYW5fY2FuW3BvaW50X3BsYW5pZmljYWRvX3RpcG8gPT0gIlB1bnRvIG1peHRvIl0sIG5hLnJtID0gVFJVRSksIDEpLA0KICAgICAgICAgICAgbWVhbl9wdW50b19wbGFuaWZpY2FkbyA9IHJvdW5kKG1lYW4odmFuY2FuX2Nhbltwb2ludF9wbGFuaWZpY2FkbyA9PSAiU2kiXSwgbmEucm0gPSBUUlVFKSwgMSksDQogICAgICAgICAgICBtZWFuX3B1bnRvX25vX3BsYW5pZmljYWRvID0gcm91bmQobWVhbih2YW5jYW5fY2FuW3BvaW50X3BsYW5pZmljYWRvID09ICJObyJdLCBuYS5ybSA9IFRSVUUpLCAxKSwNCiAgICAgICAgICAgIHRvdGFsX2JyaWdhZGFzID0gbGVuZ3RoKGlkKSwNCiAgICAgICAgICAgIGhvcmFzX3RvdGFsX21lYW4gPSByb3VuZChtZWFuKGhvcmFzX3RvdGFsLCBuYS5ybSA9IFRSVUUpLDEpLCkgJT4lDQogIGFycmFuZ2UoY2x1c3Rlcl9uYW1lKQ0KDQoNCnJlc3VtZW5fY2wgJT4lDQogIGthYmxlKCJodG1sIiwgY29sLm5hbWVzID0gYygiQ2x1c3RlciIsICJUb3RhbCBwZXJyb3MgdmFjdW5hZG9zIiwgIlByb21lZGlvIHBlcnJvcyB2YWN1bmFkb3MgKFBQVikiLCAiUFBWIGVuIHB1bnRvcyBPUFQiLCAgICJQUFYgZW4gcHVudG9zIE5PIE9QVCIsICJQUFYgZW4gcHVudG8gZmlqbyIsICJQUFYgZW4gcHVudG8gbW92aWwiLCAiUFBWIGVuIHB1bnRvIG1peHRvIiwgIlBQViBlbiBwdW50byBwbGFuaWZpY2FkbyIsICJQUFYgZW4gcHVudG8gTk8gcGxhbmlmaWNhZG8iLCAiVG90YWwgZGUgYnJpZ2FkYXMiLCAgIlByb21lZGlvIGRlIGhvcmFzIHRyYWJhamFkYXMiKSkgJT4lIA0KICBrYWJsZV9zdHlsaW5nKGZ1bGxfd2lkdGggPSBUUlVFLCBwb3NpdGlvbiA9ICJjZW50ZXIiLCBib290c3RyYXBfb3B0aW9ucyA9IGMoInN0cmlwZWQiLCAiaG92ZXIiLCAiY29uZGVuc2VkIiwgInJlc3BvbnNpdmUiKSkNCg0KDQpgYGANCg0KDQojIyMgRGlzdHJpYnVjacOzbiBkZSBkYXRvcyBkZSBwZXJyb3MgdmFjdW5hZG9zIHkgZGVtw6FzIGluZGljYWRvcmVzDQoNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0V9DQoNCiMgRmlsdHJhIGxvcyBkYXRvcyBwYXJhIGV4Y2x1aXIgTkEgZW4gdmFuY2FuX2Nhbg0KZGF0YV9maWx0ZXJlZCA8LSBkYXRhICU+JSBmaWx0ZXIoIWlzLm5hKHZhbmNhbl9jYW4pKQ0KDQojIERpc3RyaWJ1Y2nDs24gZGUgcGVycm9zIHZhY3VuYWRvcyBwb3IgbWljcm9yZWQNCmdncGxvdChkYXRhX2ZpbHRlcmVkLCBhZXMoeCA9IHZhbmNhbl9jYW4sIHkgPSBtaWNyb3JlZF9mYWN0b3IpKSArDQogIGdlb21fdmlvbGluKHRyaW0gPSBGQUxTRSwgZmlsbCA9ICJza3libHVlIikgKw0KICBnZW9tX2ppdHRlcihzaGFwZSA9IDE2LCBwb3NpdGlvbiA9IHBvc2l0aW9uX2ppdHRlcigwLjIpLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC41KSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIGxhYnModGl0bGUgPSAiRGlzdHJpYnVjacOzbiBkZSBQZXJyb3MgVmFjdW5hZG9zIHBvciBNaWNyb3JlZCIsDQogICAgICAgeCA9ICJQZXJyb3MgdmFjdW5hZG9zIGVuIGxhIFZBTkNBTiIsDQogICAgICAgeSA9ICJNaWNyb3JlZGVzIikNCg0KIyBEaXN0cmlidWNpw7NuIGRlIHBlcnJvcyB2YWN1bmFkb3MgcG9yIGVuIHB1bnRvcyBvcHRpbWl6YWRvcw0KZ2dwbG90KGRhdGFfZmlsdGVyZWQsIGFlcyh4ID0gdmFuY2FuX2NhbiwgeSA9IHBvaW50X29wdF8xMDApKSArDQogIGdlb21fdmlvbGluKHRyaW0gPSBGQUxTRSwgZmlsbCA9ICJza3libHVlIikgKw0KICBnZW9tX2ppdHRlcihzaGFwZSA9IDE2LCBwb3NpdGlvbiA9IHBvc2l0aW9uX2ppdHRlcigwLjIpLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC41KSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIGxhYnModGl0bGUgPSAiRGlzdHJpYnVjacOzbiBkZSBQZXJyb3MgVmFjdW5hZG9zIHBvciBQdW50b3MgT3B0aW1pemFkb3MiLA0KICAgICAgIHggPSAiUGVycm9zIHZhY3VuYWRvcyBlbiBsYSBWQU5DQU4iLA0KICAgICAgIHkgPSAiT3B0aW1pemFjacOzbiIpDQoNCg0KIyBEaXN0cmlidWNpw7NuIGRlIHBlcnJvcyB2YWN1bmFkb3MgcG9yIHRpcG9zIGRlIHB1bnRvIGRlIHZhY3VuYWNpb24gcGxhbmlmaWNhZG8NCmdncGxvdChkYXRhX2ZpbHRlcmVkLCBhZXMoeCA9IHZhbmNhbl9jYW4sIHkgPSBwdW50b19pbmljaW9fZmFjdG9yKSkgKw0KICBnZW9tX3Zpb2xpbih0cmltID0gRkFMU0UsIGZpbGwgPSAic2t5Ymx1ZSIpICsNCiAgZ2VvbV9qaXR0ZXIoc2hhcGUgPSAxNiwgcG9zaXRpb24gPSBwb3NpdGlvbl9qaXR0ZXIoMC4yKSwgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuNSkgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICBsYWJzKHRpdGxlID0gIkRpc3RyaWJ1Y2nDs24gZGUgUGVycm9zIFZhY3VuYWRvcyBwb3IgcHVudG9zIGRlIHZhY3VuYWNpw7NuIHBsYW5pZmljYWRvcyIsDQogICAgICAgeCA9ICJQZXJyb3MgdmFjdW5hZG9zIGVuIGxhIFZBTkNBTiIsDQogICAgICAgeSA9ICJQdW50b3MgZGUgdmFjdW5hY2nDs24gcGxhbmlmaWNhZG9zIikNCg0KDQojIERpc3RyaWJ1Y2nDs24gZGUgcGVycm9zIHZhY3VuYWRvcyBwb3IgdGlwb3MgZGUgcHVudG8gZGUgdmFjdW5hY2lvbiBpbXBsZW1lbnRhZG9zDQpnZ3Bsb3QoZGF0YV9maWx0ZXJlZCwgYWVzKHggPSB2YW5jYW5fY2FuLCB5ID0gcG9pbnRfcGxhbmlmaWNhZG9fdGlwbykpICsNCiAgZ2VvbV92aW9saW4odHJpbSA9IEZBTFNFLCBmaWxsID0gInNreWJsdWUiKSArDQogIGdlb21faml0dGVyKHNoYXBlID0gMTYsIHBvc2l0aW9uID0gcG9zaXRpb25faml0dGVyKDAuMiksIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLjUpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgbGFicyh0aXRsZSA9ICJEaXN0cmlidWNpw7NuIGRlIFBlcnJvcyBWYWN1bmFkb3MgcG9yIHB1bnRvcyBkZSB2YWN1bmFjaW9uIGltcGxlbWVudGFkb3MiLA0KICAgICAgIHggPSAiUGVycm9zIHZhY3VuYWRvcyBlbiBsYSBWQU5DQU4iLA0KICAgICAgIHkgPSAiUHVudG9zIGRlIHZhY3VuYWNpw7NuIGltcGxlbWVudGFkbyIpDQoNCg0KDQoNCg0KYGBgDQoNCg0KIyMjIFJhdGlvcyBlc3BhY2lhbGVzDQoNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0V9DQoNCnJlc3VtZW5fY2wyIDwtIGRhdGEgJT4lIA0KICBncm91cF9ieShjbHVzdGVyKSAlPiUgDQogIHN1bW1hcml6ZSh0b3RhbF9jYW5fdmFuY2FuID0gc3VtKHZhbmNhbl9jYW4sIG5hLnJtID0gVFJVRSksDQogICAgICAgICAgICBtZWFuX2Nhbl92YW5jYW4gPSByb3VuZChtZWFuKHZhbmNhbl9jYW4sIG5hLnJtID0gVFJVRSksMSksDQogICAgICAgICAgICBtZWFuX3B1bnRvX29wdCA9IHJvdW5kKG1lYW4odmFuY2FuX2Nhbltwb2ludF9vcHRfMTAwID09ICJTaSJdLCBuYS5ybSA9IFRSVUUpLCAxKSwNCiAgICAgICAgICAgIG1lYW5fcHVudG9fbm9fb3B0ID0gcm91bmQobWVhbih2YW5jYW5fY2FuW3BvaW50X29wdF8xMDAgPT0gIk5vIl0sIG5hLnJtID0gVFJVRSksIDEpLA0KICAgICAgICAgICAgbWVhbl9wdW50b19maWpvID0gcm91bmQobWVhbih2YW5jYW5fY2FuW3BvaW50X3BsYW5pZmljYWRvX3RpcG8gPT0gIlB1bnRvIGZpam8iXSwgbmEucm0gPSBUUlVFKSwgMSksDQogICAgICAgICAgICBtZWFuX3B1bnRvX21vdmlsID0gcm91bmQobWVhbih2YW5jYW5fY2FuW3BvaW50X3BsYW5pZmljYWRvX3RpcG8gPT0gIlB1bnRvIG1vdmlsIl0sIG5hLnJtID0gVFJVRSksIDEpLA0KICAgICAgICAgICAgbWVhbl9wdW50b19taXh0byA9IHJvdW5kKG1lYW4odmFuY2FuX2Nhbltwb2ludF9wbGFuaWZpY2Fkb190aXBvID09ICJQdW50byBtaXh0byJdLCBuYS5ybSA9IFRSVUUpLCAxKSwNCiAgICAgICAgICAgIG1lYW5fcHVudG9fcGxhbmlmaWNhZG8gPSByb3VuZChtZWFuKHZhbmNhbl9jYW5bcG9pbnRfcGxhbmlmaWNhZG8gPT0gIlNpIl0sIG5hLnJtID0gVFJVRSksIDEpLA0KICAgICAgICAgICAgbWVhbl9wdW50b19ub19wbGFuaWZpY2FkbyA9IHJvdW5kKG1lYW4odmFuY2FuX2Nhbltwb2ludF9wbGFuaWZpY2FkbyA9PSAiTm8iXSwgbmEucm0gPSBUUlVFKSwgMSksDQogICAgICAgICAgICB0b3RhbF9icmlnYWRhcyA9IGxlbmd0aChpZCksDQogICAgICAgICAgICBob3Jhc190b3RhbF9tZWFuID0gcm91bmQobWVhbihob3Jhc190b3RhbCwgbmEucm0gPSBUUlVFKSwxKSwpICU+JQ0KICBhcnJhbmdlKGNsdXN0ZXIpDQoNCnJlc3VtZW5fY29tcGxldG8gPC0gbGVmdF9qb2luKHJlc3VtZW5fY2wyLCBjbHVzdGVyX2FyZWEsIGJ5ID0gImNsdXN0ZXIiKQ0KY29iX2VuY3Vlc3RhXzIwMjMgPC0gaW1wb3J0KCJjb2JfZW5jdWVzdGFfMjAyMy54bHN4IikNCiNnbGltcHNlKHJlc3VtZW5fY29tcGxldG8pDQojZ2xpbXBzZShjb2JfZW5jdWVzdGFfMjAyMykNCnJhdGlvX3NwYXRpYWwgPC0gbGVmdF9qb2luKHJlc3VtZW5fY29tcGxldG8sIGNvYl9lbmN1ZXN0YV8yMDIzLCBieSA9ICJjbHVzdGVyIikNCiNnbGltcHNlKHJhdGlvX3NwYXRpYWwpDQoNCnJhdGlvX3NwYXRpYWwgPC0gcmF0aW9fc3BhdGlhbCAlPiUgDQogIHNlbGVjdChjbHVzdGVyLCBjbHVzdGVyX25hbWUsIGFyZWEsIGNvYl92YW5jYW4sIGNvYl9wcml2LCBjb2JfdG90YWwsIHJhdGlvX2hwLCB0b3RhbF9jYW5fdmFuY2FuLCB0b3RhbF9icmlnYWRhcykNCg0KcmF0aW9fc3BhdGlhbCA8LSByYXRpb19zcGF0aWFsICU+JQ0KICBtdXRhdGUoYXJlYV8yID0gcm91bmQoYXJlYS8xMDAwMDAwLDIpLA0KICAgIHJfYnJpZ19hcmVhID0gcm91bmQodG90YWxfYnJpZ2FkYXMgLyBhcmVhXzIsMiksDQogICAgcl9kb2dfdmFjY19hcmVhID0gcm91bmQodG90YWxfY2FuX3ZhbmNhbiAvIGFyZWFfMiwyKSwNCiAgICByX2RvZ192YWNjX3JfaHA9IHJvdW5kKHJhdGlvX2hwIC8gYXJlYV8yLDIpKQ0KDQoNCnJhdGlvX3NwYXRpYWwgPC0gcmF0aW9fc3BhdGlhbCAlPiUgDQogIHNlbGVjdChjbHVzdGVyX25hbWUsIGFyZWFfMiwgY29iX3ZhbmNhbiwgY29iX3ByaXYsIGNvYl90b3RhbCwgcmF0aW9faHAsIHRvdGFsX2Nhbl92YW5jYW4sIHRvdGFsX2JyaWdhZGFzLCByX2JyaWdfYXJlYSwgcl9kb2dfdmFjY19hcmVhLCByX2RvZ192YWNjX3JfaHApDQojZ2xpbXBzZShyYXRpb19zcGF0aWFsKQ0KDQoNCnJhdGlvX3NwYXRpYWwgJT4lDQogIGRhdGF0YWJsZSgNCiAgICBjb2xuYW1lcyA9IGMoDQogICAgICAiQ2x1c3RlciIsICLDgXJlYSBjbHVzdGVyIG0yeDEwwrQ2IiwgIkNvYmVydHVyYSBWYW5jYW4tRSIsICJDb2JlcnR1cmEgcHJpdmFkby1FIiwNCiAgICAgICJDb2JlcnR1cmEgdG90YWwtRSIsICJSYXRpbyBIUC1FIiwgIlRvdGFsIHBlcnJvcyB2YWN1bmFkb3MiLCAiVG90YWwgZGUgYnJpZ2FkYXMiLA0KICAgICAgIlJhdGlvIGJyaWdhZGEgeCDDoXJlYSIsICJSYXRpbyBwZXJyb3MgdmFjdW5hZG9zIHggw6FyZWEiLCAiUmF0aW8gcGVycm9zIHZhY3VuYWRvcyB4IHJhdGlvIEhQIg0KICAgICksDQogICAgb3B0aW9ucyA9IGxpc3QoDQogICAgICBwYWdlTGVuZ3RoID0gMzIsICAjIE7Dum1lcm8gZGUgZmlsYXMgYSBtb3N0cmFyIHBvciBww6FnaW5hDQogICAgICBhdXRvV2lkdGggPSBUUlVFICAjIEFqdXN0YXIgYXV0b23DoXRpY2FtZW50ZSBlbCBhbmNobyBkZSBsYXMgY29sdW1uYXMNCiAgICApLA0KICAgIGNsYXNzID0gImRpc3BsYXkiDQogICkNCg0KDQojcmF0aW9fc3BhdGlhbCAlPiUNCiMgIGthYmxlKCJodG1sIiwgY29sLm5hbWVzID0gYygiQ2x1c3RlciIsICLDgXJlYSBjbHVzdGVyIG0yIiwgIkNvYmVydHVyYSBWYW5jYW4tRSIsICJDb2JlcnR1cmEgcHJpdmFkby1FIiwgIkNvYmVydHVyYSB0b3RhbC1FIiwgIlJhdGlvIEhQLUUiLCAiVG90YWwgcGVycm9zIHZhY3VuYWRvcyIsICJUb3RhbCBkZSBicmlnYWRhcyIsIlJhdGlvIGJyaWRhZ2EgeCDDoXJlYSIsICJSYXRpbyBwZXJyb3MgdmFjdW5hZG9zIHggw6FyZWEiLCAiUmF0aW8gcGVycm9zIHZhY3VuYWRvcyB4IHJhdGlvIEhQIikpICU+JSANCiMgIGthYmxlX3N0eWxpbmcoZnVsbF93aWR0aCA9IFRSVUUsIHBvc2l0aW9uID0gImNlbnRlciIsIGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJob3ZlciIsICJjb25kZW5zZWQiLCAicmVzcG9uc2l2ZSIpKQ0KDQoNCmBgYA0KDQoNCg0KDQojIyMgQ3VhZHJvIHJlc3VtZW4gZGUgbGEgVkFOQ0FOIHBvciBNaWNyb3JlZA0KDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFfQ0KDQoNCg0KcmVzdW1lbl9tciA8LSBkYXRhICU+JSANCiAgZ3JvdXBfYnkobWljcm9yZWRfMykgJT4lIA0KICBzdW1tYXJpemUodG90YWxfY2FuX3ZhbmNhbiA9IHN1bSh2YW5jYW5fY2FuLCBuYS5ybSA9IFRSVUUpLA0KICAgICAgICAgICAgbWVhbl9jYW5fdmFuY2FuID0gcm91bmQobWVhbih2YW5jYW5fY2FuLCBuYS5ybSA9IFRSVUUpLDEpLA0KICAgICAgICAgICAgdG90YWxfYnJpZ2FkYXMgPSBsZW5ndGgoaWQpLA0KICAgICAgICAgICAgaG9yYXNfdG90YWxfc3VtID0gcm91bmQoc3VtKGhvcmFzX3RvdGFsLCAgbmEucm0gPSBUUlVFKSwxKSwNCiAgICAgICAgICAgIGhvcmFzX3RvdGFsX21lYW4gPSByb3VuZChtZWFuKGhvcmFzX3RvdGFsLCBuYS5ybSA9IFRSVUUpLDEpLCkgJT4lDQogIGFycmFuZ2UobWljcm9yZWRfMykNCg0KcmVzdW1lbl9tciAlPiUNCiAga2FibGUoImh0bWwiLCBjb2wubmFtZXMgPSBjKCJNaWNyb3JlZCIsICJUb3RhbCBwZXJyb3MgdmFjdW5hZG9zIiwgIlByb21lZGlvIHBlcnJvcyB2YWN1bmFkb3MgcG9yIHB1bnRvIiwgIlRvdGFsIGRlIGJyaWdhZGFzIiwgIlRvdGFsIGRlIGhvcmFzIHRyYWJhamFkb3MiLCAiUHJvbWVkaW8gZGUgaG9yYXMgdHJhYmFqYWRvcyIpKSAlPiUNCiAga2FibGVfc3R5bGluZyhmdWxsX3dpZHRoID0gVFJVRSwgcG9zaXRpb24gPSAiY2VudGVyIiwgYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwgImhvdmVyIiwgImNvbmRlbnNlZCIsICJyZXNwb25zaXZlIikpDQoNCg0KYGBgDQoNCg0K